static void *_pgsql_open(char *host, char *port, int usessl, const char *user, const char *password, const char *database) { PGconn *conn = NULL; char *conninfo, *p; /* create the connection info string */ /* The 64 represents the number of characters taken by * the keyword tokens, plus a small pad */ p = conninfo = xzmalloc(64 + sql_len(host) + sql_len(port) + sql_len(user) + sql_len(password) + sql_len(database)); /* add each term that exists */ if (sql_exists(host)) p += sprintf(p, " host='%s'", host); if (sql_exists(port)) p += sprintf(p, " port='%s'", port); if (sql_exists(user)) p += sprintf(p, " user='******'", user); if (sql_exists(password)) p += sprintf(p, " password='******'", password); if (sql_exists(database)) p += sprintf(p, " dbname='%s'", database); p += sprintf(p, " requiressl='%d'", usessl); conn = PQconnectdb(conninfo); free(conninfo); if ((PQstatus(conn) != CONNECTION_OK)) { syslog(LOG_ERR, "DBERROR: SQL backend: %s", PQerrorMessage(conn)); return NULL; } return conn; }
static void *_pgsql_open(char *host, char *port, int usessl, const char *user, const char *password, const char *database, const sasl_utils_t *utils) { PGconn *conn = NULL; char *conninfo, *sep; /* create the connection info string */ /* The 64 represents the number of characters taken by * the keyword tokens, plus a small pad */ conninfo = utils->malloc(64 + sql_len(host) + sql_len(port) + sql_len(user) + sql_len(password) + sql_len(database)); if (!conninfo) { MEMERROR(utils); return NULL; } /* add each term that exists */ conninfo[0] = '\0'; sep = ""; if (sql_exists(host)) { strcat(conninfo, sep); strcat(conninfo, "host='"); strcat(conninfo, host); strcat(conninfo, "'"); sep = " "; } if (sql_exists(port)) { strcat(conninfo, sep); strcat(conninfo, "port='"); strcat(conninfo, port); strcat(conninfo, "'"); sep = " "; } if (sql_exists(user)) { strcat(conninfo, sep); strcat(conninfo, "user='******'"); sep = " "; } if (sql_exists(password)) { strcat(conninfo, sep); strcat(conninfo, "password='******'"); sep = " "; } if (sql_exists(database)) { strcat(conninfo, sep); strcat(conninfo, "dbname='"); strcat(conninfo, database); strcat(conninfo, "'"); sep = " "; } if (usessl) { strcat(conninfo, sep); strcat(conninfo, "requiressl='1'"); } conn = PQconnectdb(conninfo); free(conninfo); if ((PQstatus(conn) != CONNECTION_OK)) { utils->log(NULL, SASL_LOG_ERR, "sql plugin: %s", PQerrorMessage(conn)); return NULL; } return conn; }