Correct buffer size to match that of key-name. We can now replace strncpy with strcpy. Don't start strchr from the beginning every time. Signed-off-by: Jeremy Sowden <jeremy@xxxxxxxxxx> --- util/db.c | 23 +++++++++++------------ 1 file changed, 11 insertions(+), 12 deletions(-) diff --git a/util/db.c b/util/db.c index f0711146867f..0f8eb7057436 100644 --- a/util/db.c +++ b/util/db.c @@ -10,7 +10,7 @@ * (C) 2008,2013 Eric Leblond <eric@xxxxxxxxx> * * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License version 2 + * it under the terms of the GNU General Public License version 2 * as published by the Free Software Foundation * * This program is distributed in the hope that it will be useful, @@ -21,7 +21,7 @@ * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - * + * */ #include <unistd.h> @@ -96,8 +96,6 @@ static int sql_createstmt(struct ulogd_pluginstance *upi) if (strncasecmp(procedure,"INSERT", strlen("INSERT")) == 0 && (procedure[strlen("INSERT")] == '\0' || procedure[strlen("INSERT")] == ' ')) { - char buf[ULOGD_MAX_KEYLEN]; - char *underscore; if(procedure[6] == '\0') { /* procedure == "INSERT" */ @@ -112,11 +110,13 @@ static int sql_createstmt(struct ulogd_pluginstance *upi) stmt_val = mi->stmt + strlen(mi->stmt); for (i = 0; i < upi->input.num_keys; i++) { + char buf[sizeof(upi->input.keys[0].name)], *underscore = buf; + if (upi->input.keys[i].flags & ULOGD_KEYF_INACTIVE) continue; - strncpy(buf, upi->input.keys[i].name, ULOGD_MAX_KEYLEN); - while ((underscore = strchr(buf, '.'))) + strcpy(buf, upi->input.keys[i].name); + while ((underscore = strchr(underscore, '.'))) *underscore = '_'; sprintf(stmt_val, "%s,", buf); stmt_val = mi->stmt + strlen(mi->stmt); @@ -168,7 +168,7 @@ int ulogd_db_configure(struct ulogd_pluginstance *upi, ret = di->driver->get_columns(upi); if (ret < 0) ulogd_log(ULOGD_ERROR, "error in get_columns\n"); - + /* Close database, since ulogd core could just call configure * but abort during input key resolving routines. configure * doesn't have a destructor... */ @@ -215,7 +215,7 @@ int ulogd_db_start(struct ulogd_pluginstance *upi) if (di->ring.size > 0) { /* allocate */ - di->ring.ring = calloc(di->ring.size, sizeof(char) * di->ring.length); + di->ring.ring = calloc(di->ring.size, di->ring.length); if (di->ring.ring == NULL) { ret = -1; goto db_error; @@ -226,9 +226,8 @@ int ulogd_db_start(struct ulogd_pluginstance *upi) di->ring.size, di->ring.length); /* init start of query for each element */ for(i = 0; i < di->ring.size; i++) { - strncpy(di->ring.ring + di->ring.length * i + 1, - di->stmt, - strlen(di->stmt)); + strcpy(di->ring.ring + di->ring.length * i + 1, + di->stmt); } /* init cond & mutex */ ret = pthread_cond_init(&di->ring.cond, NULL); @@ -314,7 +313,7 @@ static int _init_reconnect(struct ulogd_pluginstance *upi) /* Disable plugin permanently */ ulogd_log(ULOGD_ERROR, "permanently disabling plugin\n"); di->interp = &disabled_interp_db; - + return 0; } -- 2.33.0