summaryrefslogtreecommitdiffstats
path: root/output/pgsql/ulogd_output_PGSQL.c
diff options
context:
space:
mode:
Diffstat (limited to 'output/pgsql/ulogd_output_PGSQL.c')
-rw-r--r--output/pgsql/ulogd_output_PGSQL.c64
1 files changed, 25 insertions, 39 deletions
diff --git a/output/pgsql/ulogd_output_PGSQL.c b/output/pgsql/ulogd_output_PGSQL.c
index fda289e..04c2665 100644
--- a/output/pgsql/ulogd_output_PGSQL.c
+++ b/output/pgsql/ulogd_output_PGSQL.c
@@ -181,8 +181,7 @@ static int get_columns_pgsql(struct ulogd_pluginstance *upi)
upi->input.num_keys = PQntuples(pi->pgres);
ulogd_log(ULOGD_DEBUG, "%u fields in table\n", upi->input.num_keys);
- upi->input.keys = malloc(sizeof(struct ulogd_key) *
- upi->input.num_keys);
+ upi->input.keys = calloc(upi->input.num_keys, sizeof(*upi->input.keys));
if (!upi->input.keys) {
upi->input.num_keys = 0;
ulogd_log(ULOGD_ERROR, "ENOMEM\n");
@@ -190,22 +189,19 @@ static int get_columns_pgsql(struct ulogd_pluginstance *upi)
return -ENOMEM;
}
- memset(upi->input.keys, 0, sizeof(struct ulogd_key) *
- upi->input.num_keys);
-
for (i = 0; i < PQntuples(pi->pgres); i++) {
- char buf[ULOGD_MAX_KEYLEN+1];
char *underscore;
+ snprintf(upi->input.keys[i].name,
+ sizeof(upi->input.keys[i].name),
+ "%s", PQgetvalue(pi->pgres, i, 0));
+
/* replace all underscores with dots */
- strncpy(buf, PQgetvalue(pi->pgres, i, 0), ULOGD_MAX_KEYLEN);
- while ((underscore = strchr(buf, '_')))
+ for (underscore = upi->input.keys[i].name;
+ (underscore = strchr(underscore, '_')); )
*underscore = '.';
- DEBUGP("field '%s' found: ", buf);
-
- /* add it to list of input keys */
- strncpy(upi->input.keys[i].name, buf, ULOGD_MAX_KEYLEN);
+ DEBUGP("field '%s' found\n", upi->input.keys[i].name);
}
/* ID (starting by '.') is a sequence */
@@ -236,48 +232,38 @@ static int open_db_pgsql(struct ulogd_pluginstance *upi)
char *schema = NULL;
char pgbuf[128];
- if (!connstr) {
- char *server = host_ce(upi->config_kset).u.string;
- unsigned int port = port_ce(upi->config_kset).u.value;
- char *user = user_ce(upi->config_kset).u.string;
- char *pass = pass_ce(upi->config_kset).u.string;
- char *db = db_ce(upi->config_kset).u.string;
+ if (!connstr[0]) {
+ char *server = host_ce(upi->config_kset).u.string;
+ unsigned int port = port_ce(upi->config_kset).u.value;
+ char *user = user_ce(upi->config_kset).u.string;
+ char *pass = pass_ce(upi->config_kset).u.string;
+ char *db = db_ce(upi->config_kset).u.string;
+ char *cp;
/* 80 is more than what we need for the fixed parts below */
len = 80 + strlen(user) + strlen(db);
/* hostname and and password are the only optionals */
- if (server)
+ if (server[0])
len += strlen(server);
- if (pass)
+ if (pass[0])
len += strlen(pass);
if (port)
len += 20;
- connstr = (char *) malloc(len);
+ cp = connstr = malloc(len);
if (!connstr)
return -ENOMEM;
- connstr[0] = '\0';
- if (server && strlen(server) > 0) {
- strcpy(connstr, " host=");
- strcat(connstr, server);
- }
+ if (server[0])
+ cp += sprintf(cp, "host=%s ", server);
- if (port) {
- char portbuf[20];
- snprintf(portbuf, sizeof(portbuf), " port=%u", port);
- strcat(connstr, portbuf);
- }
+ if (port)
+ cp += sprintf(cp, "port=%u ", port);
- strcat(connstr, " dbname=");
- strcat(connstr, db);
- strcat(connstr, " user=");
- strcat(connstr, user);
+ cp += sprintf(cp, "dbname=%s user=%s", db, user);
- if (pass) {
- strcat(connstr, " password=");
- strcat(connstr, pass);
- }
+ if (pass[0])
+ cp += sprintf(cp, " password=%s", pass);
}
pi->dbh = PQconnectdb(connstr);
if (PQstatus(pi->dbh) != CONNECTION_OK) {