#include #include #include #include #include "globals.h" #include "proto.h" #include /* * \brief Parse connection string in form: * 1) 'database_name' * 2) 'host=xx,port=xx,dbname=xx' * * returns: DB_OK - OK * DB_FAILED - error */ int parse_conn(const char *str, PGCONN * pgconn) { int i; char **tokens, delm[2]; /* reset */ pgconn->host = NULL; pgconn->port = NULL; pgconn->options = NULL; pgconn->tty = NULL; pgconn->dbname = NULL; pgconn->user = NULL; pgconn->password = NULL; pgconn->schema = NULL; G_debug(3, "parse_conn : %s", str); if (strchr(str, '=') == NULL) { /*db name only */ pgconn->dbname = G_store(str); } else { delm[0] = ','; delm[1] = '\0'; tokens = G_tokenize(str, delm); i = 0; while (tokens[i]) { G_debug(3, "token %d : %s", i, tokens[i]); if (strncmp(tokens[i], "host", 4) == 0) pgconn->host = G_store(tokens[i] + 5); else if (strncmp(tokens[i], "port", 4) == 0) pgconn->port = G_store(tokens[i] + 5); else if (strncmp(tokens[i], "options", 7) == 0) pgconn->options = G_store(tokens[i] + 8); else if (strncmp(tokens[i], "tty", 3) == 0) pgconn->tty = G_store(tokens[i] + 4); else if (strncmp(tokens[i], "dbname", 6) == 0) pgconn->dbname = G_store(tokens[i] + 7); else if (strncmp(tokens[i], "user", 4) == 0) G_warning(_("'user' in database definition is not supported, use db.login")); /* pgconn->user = G_store ( tokens[i] + 5 ); */ else if (strncmp(tokens[i], "password", 8) == 0) /* pgconn->password = G_store ( tokens[i] + 9 ); */ G_warning(_("'password' in database definition is not supported, use db.login")); else if (strncmp(tokens[i], "schema", 6) == 0) pgconn->schema = G_store(tokens[i] + 7); else { append_error(_("Unknown option in database definition for PostgreSQL: ")); append_error(tokens[i]); return DB_FAILED; } i++; } G_free_tokens(tokens); } return DB_OK; }