[netfilter-cvslog] r6323 - in branches/ulog/ulogd2: include/ulogd output/mysql output/pgsql util

laforge at netfilter.org laforge at netfilter.org
Thu Dec 15 13:37:59 CET 2005


Author: laforge at netfilter.org
Date: 2005-12-15 13:37:58 +0100 (Thu, 15 Dec 2005)
New Revision: 6323

Added:
   branches/ulog/ulogd2/include/ulogd/db.h
Modified:
   branches/ulog/ulogd2/output/mysql/Makefile.am
   branches/ulog/ulogd2/output/mysql/ulogd_output_MYSQL.c
   branches/ulog/ulogd2/output/pgsql/Makefile.am
   branches/ulog/ulogd2/output/pgsql/ulogd_output_PGSQL.c
   branches/ulog/ulogd2/util/db.c
Log:
don't "#include" a .c file but rather compile db.c on it's own


Added: branches/ulog/ulogd2/include/ulogd/db.h
===================================================================
--- branches/ulog/ulogd2/include/ulogd/db.h	2005-12-14 21:35:27 UTC (rev 6322)
+++ branches/ulog/ulogd2/include/ulogd/db.h	2005-12-15 12:37:58 UTC (rev 6323)
@@ -0,0 +1,61 @@
+#ifndef _ULOGD_DB_H
+#define _ULOGD_DB_H
+
+#include <ulogd/ulogd.h>
+
+struct db_driver {
+	int (*get_columns)(struct ulogd_pluginstance *upi);
+	int (*open_db)(struct ulogd_pluginstance *upi);
+	int (*close_db)(struct ulogd_pluginstance *upi);
+	int (*escape_string)(struct ulogd_pluginstance *upi,
+			     char *dst, const char *src, unsigned int len);
+	int (*execute)(struct ulogd_pluginstance *upi,
+			const char *stmt, unsigned int len);
+	char *(*strerror)(struct ulogd_pluginstance *upi);
+};
+
+struct db_instance {
+	char *stmt; /* buffer for our insert statement */
+	char *stmt_val; /* pointer to the beginning of the "VALUES" part */
+	char *stmt_ins; /* pointer to current inser position in statement */
+	char *schema;
+	time_t reconnect;
+	int (*interp)(struct ulogd_pluginstance *upi);
+	struct db_driver *driver;
+};
+#define TIME_ERR		((time_t)-1)	/* Be paranoid */
+
+#define DB_CES							\
+		{						\
+			.key = "table",				\
+			.type = CONFIG_TYPE_STRING,		\
+			.options = CONFIG_OPT_MANDATORY,	\
+		},						\
+		{						\
+			.key = "reconnect",			\
+			.type = CONFIG_TYPE_INT,		\
+		},						\
+		{						\
+			.key = "ip_as_string",			\
+			.type = CONFIG_TYPE_INT,		\
+		},						\
+		{						\
+			.key = "connect_timeout",		\
+			.type = CONFIG_TYPE_INT,		\
+		}
+
+#define DB_CE_NUM	4
+#define table_ce(x)	(x->ces[0])
+#define reconnect_ce(x)	(x->ces[1])
+#define asstring_ce(x)	(x->ces[2])
+#define timeout_ce(x)	(x->ces[3])
+
+void ulogd_db_signal(struct ulogd_pluginstance *upi, int signal);
+int ulogd_db_start(struct ulogd_pluginstance *upi);
+int ulogd_db_stop(struct ulogd_pluginstance *upi);
+int ulogd_db_interp(struct ulogd_pluginstance *upi);
+int ulogd_db_configure(struct ulogd_pluginstance *upi,
+			struct ulogd_pluginstance_stack *stack);
+
+
+#endif

Modified: branches/ulog/ulogd2/output/mysql/Makefile.am
===================================================================
--- branches/ulog/ulogd2/output/mysql/Makefile.am	2005-12-14 21:35:27 UTC (rev 6322)
+++ branches/ulog/ulogd2/output/mysql/Makefile.am	2005-12-15 12:37:58 UTC (rev 6323)
@@ -4,6 +4,6 @@
 
 pkglib_LTLIBRARIES = ulogd_output_MYSQL.la
 
-ulogd_output_MYSQL_la_SOURCES = ulogd_output_MYSQL.c
+ulogd_output_MYSQL_la_SOURCES = ulogd_output_MYSQL.c ../../util/db.c
 ulogd_output_MYSQL_la_LDFLAGS = -module
 

Modified: branches/ulog/ulogd2/output/mysql/ulogd_output_MYSQL.c
===================================================================
--- branches/ulog/ulogd2/output/mysql/ulogd_output_MYSQL.c	2005-12-14 21:35:27 UTC (rev 6322)
+++ branches/ulog/ulogd2/output/mysql/ulogd_output_MYSQL.c	2005-12-15 12:37:58 UTC (rev 6323)
@@ -47,9 +47,8 @@
 #include <mysql/mysql.h>
 #include <ulogd/ulogd.h>
 #include <ulogd/conffile.h>
+#include <ulogd/db.h>
 
-#include "../../util/db.c"
-
 #ifdef DEBUG_MYSQL
 #define DEBUGP(x, args...)	fprintf(stderr, x, ## args)
 #else
@@ -245,7 +244,7 @@
 	struct db_instance *di = (struct db_instance *) &upi->private;
 	di->driver = &db_driver_mysql;
 
-	return configure_db(upi, stack);
+	return ulogd_db_configure(upi, stack);
 }
 
 static struct ulogd_plugin plugin_mysql = {
@@ -261,10 +260,10 @@
 	.config_kset = &kset_mysql,
 	.priv_size = sizeof(struct mysql_instance),
 	.configure = &configure_mysql,
-	.start	   = &start_db,
-	.stop	   = &stop_db,
-	.signal	   = &signal_db,
-	.interp	   = &interp_db,
+	.start	   = &ulogd_db_start,
+	.stop	   = &ulogd_db_stop,
+	.signal	   = &ulogd_db_signal,
+	.interp	   = &ulogd_db_interp,
 	.version   = ULOGD_VERSION,
 };
 

Modified: branches/ulog/ulogd2/output/pgsql/Makefile.am
===================================================================
--- branches/ulog/ulogd2/output/pgsql/Makefile.am	2005-12-14 21:35:27 UTC (rev 6322)
+++ branches/ulog/ulogd2/output/pgsql/Makefile.am	2005-12-15 12:37:58 UTC (rev 6323)
@@ -4,6 +4,6 @@
 
 pkglib_LTLIBRARIES = ulogd_output_PGSQL.la
 
-ulogd_output_PGSQL_la_SOURCES = ulogd_output_PGSQL.c
+ulogd_output_PGSQL_la_SOURCES = ulogd_output_PGSQL.c ../../util/db.c
 ulogd_output_PGSQL_la_LDFLAGS = -module
 

Modified: branches/ulog/ulogd2/output/pgsql/ulogd_output_PGSQL.c
===================================================================
--- branches/ulog/ulogd2/output/pgsql/ulogd_output_PGSQL.c	2005-12-14 21:35:27 UTC (rev 6322)
+++ branches/ulog/ulogd2/output/pgsql/ulogd_output_PGSQL.c	2005-12-15 12:37:58 UTC (rev 6323)
@@ -14,11 +14,12 @@
 #include <string.h>
 #include <errno.h>
 #include <arpa/inet.h>
-#include <libpq-fe.h>
+
 #include <ulogd/ulogd.h>
 #include <ulogd/conffile.h>
+#include <ulogd/db.h>
 
-#include "../../util/db.c"
+#include <libpq-fe.h>
 
 #ifdef DEBUG_PGSQL
 #define DEBUGP(x, args...)	fprintf(stderr, x, ## args)
@@ -78,113 +79,9 @@
 #define port_ce(x)	(x->ces[DB_CE_NUM+5])
 #define schema_ce(x)	(x->ces[DB_CE_NUM+6])
 
-#if 0
-/* our main output function, called by ulogd */
-static int pgsql_output(ulog_iret_t *result)
-{
-	struct _field *f;
-	ulog_iret_t *res;
-	PGresult   *pgres;
-#ifdef IP_AS_STRING
-	char *tmpstr;		/* need this for --log-ip-as-string */
-	struct in_addr addr;
-#endif
+#define PGSQL_HAVE_NAMESPACE_TEMPLATE 			\
+	"SELECT nspname FROM pg_namespace n WHERE n.nspname='%s'"
 
-	stmt_ins = stmt_val;
-
-	for (f = fields; f; f = f->next) {
-		res = keyh_getres(f->id);
-
-		if (!res) {
-			ulogd_log(ULOGD_NOTICE,
-				"no result for %s ?!?\n", f->name);
-		}
-
-		if (!res || !IS_VALID((*res))) {
-			/* no result, we have to fake something */
-			sprintf(stmt_ins, "NULL,");
-			stmt_ins = stmt + strlen(stmt);
-			continue;
-		}
-
-		switch (res->type) {
-			case ULOGD_RET_INT8:
-				sprintf(stmt_ins, "%d,", res->value.i8);
-				break;
-			case ULOGD_RET_INT16:
-				sprintf(stmt_ins, "%d,", res->value.i16);
-				break;
-			case ULOGD_RET_INT32:
-				sprintf(stmt_ins, "%d,", res->value.i32);
-				break;
-			case ULOGD_RET_INT64:
-				sprintf(stmt_ins, "%lld,", res->value.i64);
-				break;
-			case ULOGD_RET_UINT8:
-				sprintf(stmt_ins, "%u,", res->value.ui8);
-				break;
-			case ULOGD_RET_UINT16:
-				sprintf(stmt_ins, "%u,", res->value.ui16);
-				break;
-			case ULOGD_RET_IPADDR:
-#ifdef IP_AS_STRING
-				*stmt_ins++ = '\'';
-				memset(&addr, 0, sizeof(addr));
-				addr.s_addr = ntohl(res->value.ui32);
-				tmpstr = (char *)inet_ntoa(addr);
-				PQescapeString(stmt_ins,tmpstr,strlen(tmpstr)); 
-				stmt_ins = stmt + strlen(stmt);
-				sprintf(stmt_ins, "',");
-				break;
-#endif /* IP_AS_STRING */
-				/* EVIL: fallthrough when logging IP as
-				 * u_int32_t */
-
-			case ULOGD_RET_UINT32:
-				sprintf(stmt_ins, "%u,", res->value.ui32);
-				break;
-			case ULOGD_RET_UINT64:
-				sprintf(stmt_ins, "%llu,", res->value.ui64);
-				break;
-			case ULOGD_RET_BOOL:
-				sprintf(stmt_ins, "'%d',", res->value.b);
-				break;
-			case ULOGD_RET_STRING:
-				*stmt_ins++ = '\'';
-				PQescapeString(stmt_ins,res->value.ptr,strlen(res->value.ptr)); 
-				stmt_ins = stmt + strlen(stmt);
-				sprintf(stmt_ins, "',");
-				break;
-			case ULOGD_RET_RAW:
-				ulogd_log(ULOGD_NOTICE,"%s: pgsql doesn't support type RAW\n",res->key);
-				sprintf(stmt_ins, "NULL,");
-				break;
-			default:
-				ulogd_log(ULOGD_NOTICE,
-					"unknown type %d for %s\n",
-					res->type, res->key);
-				break;
-		}
-		stmt_ins = stmt + strlen(stmt);
-	}
-	*(stmt_ins - 1) = ')';
-	DEBUGP("stmt=#%s#\n", stmt);
-
-	/* now we have created our statement, insert it */
-	/* Added code by Jaki */
-	pgres = PQexec(dbh, stmt);
-	if(!pgres || PQresultStatus(pgres) != PGRES_COMMAND_OK) {
-		ulogd_log(ULOGD_ERROR, "sql error during insert: %s\n",
-				PQresultErrorMessage(pgres));
-		return 1;
-	}
-
-	return 0;
-}
-#endif
-
-#define PGSQL_HAVE_NAMESPACE_TEMPLATE "SELECT nspname FROM pg_namespace n WHERE n.nspname='%s'"
-
 /* Determine if server support schemas */
 static int pgsql_namespace(struct ulogd_pluginstance *upi)
 {
@@ -218,9 +115,11 @@
 	return 0;
 }
 
-#define PGSQL_GETCOLUMN_TEMPLATE "SELECT  a.attname FROM pg_class c, pg_attribute a WHERE c.relname ='%s' AND a.attnum>0 AND a.attrelid=c.oid ORDER BY a.attnum"
+#define PGSQL_GETCOLUMN_TEMPLATE 			\
+	"SELECT  a.attname FROM pg_class c, pg_attribute a WHERE c.relname ='%s' AND a.attnum>0 AND a.attrelid=c.oid ORDER BY a.attnum"
 
-#define PGSQL_GETCOLUMN_TEMPLATE_SCHEMA "SELECT a.attname FROM pg_attribute a, pg_class c LEFT JOIN pg_namespace n ON c.relnamespace=n.oid WHERE c.relname ='%s' AND n.nspname='%s' AND a.attnum>0 AND a.attrelid=c.oid AND a.attisdropped=FALSE ORDER BY a.attnum"
+#define PGSQL_GETCOLUMN_TEMPLATE_SCHEMA 		\
+	"SELECT a.attname FROM pg_attribute a, pg_class c LEFT JOIN pg_namespace n ON c.relnamespace=n.oid WHERE c.relname ='%s' AND n.nspname='%s' AND a.attnum>0 AND a.attrelid=c.oid AND a.attisdropped=FALSE ORDER BY a.attnum"
 
 /* find out which columns the table has */
 static int get_columns_pgsql(struct ulogd_pluginstance *upi)
@@ -410,7 +309,7 @@
 
 	pi->db_inst.driver = &db_driver_pgsql;
 
-	return configure_db(upi, stack);
+	return ulogd_db_configure(upi, stack);
 }
 
 static struct ulogd_plugin pgsql_plugin = { 
@@ -425,10 +324,11 @@
 	},
 	.config_kset 	= &pgsql_kset,
 	.priv_size	= sizeof(struct pgsql_instance),
-	.start		= &start_db,
-	.stop		= &stop_db,
-	.signal		= &signal_db,
-	.interp		= &interp_db,
+	.configure	= &configure_pgsql,
+	.start		= &ulogd_db_start,
+	.stop		= &ulogd_db_stop,
+	.signal		= &ulogd_db_signal,
+	.interp		= &ulogd_db_interp,
 	.version	= ULOGD_VERSION,
 };
 

Modified: branches/ulog/ulogd2/util/db.c
===================================================================
--- branches/ulog/ulogd2/util/db.c	2005-12-14 21:35:27 UTC (rev 6322)
+++ branches/ulog/ulogd2/util/db.c	2005-12-15 12:37:58 UTC (rev 6323)
@@ -24,60 +24,22 @@
  * $Id: ulogd_output_MYSQL.c 6304 2005-12-08 09:43:19Z /C=DE/ST=Berlin/L=Berlin/O=Netfilter Project/OU=Development/CN=laforge/emailAddress=laforge at netfilter.org $
  */
 
-/* generic db layer */
+#include <unistd.h>
+#include <stdlib.h>
+#include <string.h>
+#include <errno.h>
+#include <netinet/in.h>
 
-struct db_driver {
-	int (*get_columns)(struct ulogd_pluginstance *upi);
-	int (*open_db)(struct ulogd_pluginstance *upi);
-	int (*close_db)(struct ulogd_pluginstance *upi);
-	int (*escape_string)(struct ulogd_pluginstance *upi,
-			     char *dst, const char *src, unsigned int len);
-	int (*execute)(struct ulogd_pluginstance *upi,
-			const char *stmt, unsigned int len);
-	char *(*strerror)(struct ulogd_pluginstance *upi);
-};
+#include <ulogd/ulogd.h>
+#include <ulogd/db.h>
 
-struct db_instance {
-	char *stmt; /* buffer for our insert statement */
-	char *stmt_val; /* pointer to the beginning of the "VALUES" part */
-	char *stmt_ins; /* pointer to current inser position in statement */
-	char *schema;
-	time_t reconnect;
-	int (*interp)(struct ulogd_pluginstance *upi);
-	struct db_driver *driver;
-};
-#define TIME_ERR		((time_t)-1)	/* Be paranoid */
+/* generic db layer */
 
-#define DB_CES							\
-		{						\
-			.key = "table",				\
-			.type = CONFIG_TYPE_STRING,		\
-			.options = CONFIG_OPT_MANDATORY,	\
-		},						\
-		{						\
-			.key = "reconnect",			\
-			.type = CONFIG_TYPE_INT,		\
-		},						\
-		{						\
-			.key = "ip_as_string",			\
-			.type = CONFIG_TYPE_INT,		\
-		},						\
-		{						\
-			.key = "connect_timeout",		\
-			.type = CONFIG_TYPE_INT,		\
-		}
-
-#define DB_CE_NUM	4
-#define table_ce(x)	(x->ces[0])
-#define reconnect_ce(x)	(x->ces[1])
-#define asstring_ce(x)	(x->ces[2])
-#define timeout_ce(x)	(x->ces[3])
-
 static int __interp_db(struct ulogd_pluginstance *upi);
 
 /* this is a wrapper that just calls the current real
  * interp function */
-static int interp_db(struct ulogd_pluginstance *upi)
+int ulogd_db_interp(struct ulogd_pluginstance *upi)
 {
 	struct db_instance *dbi = (struct db_instance *) &upi->private;
 	return dbi->interp(upi);
@@ -150,7 +112,7 @@
 	return 0;
 }
 
-static int configure_db(struct ulogd_pluginstance *upi,
+int ulogd_db_configure(struct ulogd_pluginstance *upi,
 			struct ulogd_pluginstance_stack *stack)
 {
 	struct db_instance *di = (struct db_instance *) upi->private;
@@ -185,7 +147,7 @@
 	return ret;
 }
 
-static int start_db(struct ulogd_pluginstance *upi)
+int ulogd_db_start(struct ulogd_pluginstance *upi)
 {
 	struct db_instance *di = (struct db_instance *) upi->private;
 	int ret;
@@ -203,7 +165,7 @@
 	return ret;
 }
 
-static int stop_db(struct ulogd_pluginstance *upi)
+int ulogd_db_stop(struct ulogd_pluginstance *upi)
 {
 	struct db_instance *di = (struct db_instance *) upi->private;
 	ulogd_log(ULOGD_NOTICE, "stopping\n");
@@ -251,7 +213,7 @@
 	
 	if (open_db(upi)) {
 		ulogd_log(ULOGD_ERROR, "can't establish database connection\n");
-		return init_reconnect(upi);
+		return _init_reconnect(upi);
 	}
 
 	/* enable 'real' logging */
@@ -356,7 +318,6 @@
 		di->stmt_ins = di->stmt + strlen(di->stmt);
 	}
 	*(di->stmt_ins - 1) = ')';
-	DEBUGP("stmt=#%s#\n", di->stmt);
 
 	/* now we have created our statement, insert it */
 
@@ -369,8 +330,7 @@
 	return 0;
 }
 
-static void signal_db(struct ulogd_pluginstance *upi,
-			 int signal)
+void ulogd_db_signal(struct ulogd_pluginstance *upi, int signal)
 {
 	switch (signal) {
 	case SIGHUP:




More information about the netfilter-cvslog mailing list