[netfilter-cvslog] r6847 - in trunk/ulog/ulogd: . extensions

pablo at netfilter.org pablo at netfilter.org
Mon May 28 14:46:38 CEST 2007


Author: pablo at netfilter.org
Date: 2007-05-28 14:46:38 +0200 (Mon, 28 May 2007)
New Revision: 6847

Modified:
   trunk/ulog/ulogd/extensions/printpkt.c
   trunk/ulog/ulogd/extensions/ulogd_BASE.c
   trunk/ulog/ulogd/extensions/ulogd_LOCAL.c
   trunk/ulog/ulogd/extensions/ulogd_LOGEMU.c
   trunk/ulog/ulogd/extensions/ulogd_OPRINT.c
   trunk/ulog/ulogd/extensions/ulogd_PWSNIFF.c
   trunk/ulog/ulogd/ulogd.c
Log:
Patches from Marius Tomaschewski <mt at suse.de>:

- Fixed sigterm_handler to close logfile and then call output_plugin->fini. The output_plugin->fini function may still use the logger (e.g. sqlite3 does), what causes a SEGV (really happens in case of sqlite3 db init error - as far as I remember)
- Changed sighup_handler_print to not to call exit(2) on reopen failure, but try to reopen and fallback to continue using old descriptor on failure.
- Fixed mac output in ulogd_BASE.c
- Added explicit termination of the hostname buffer: "[...] if namelen is an insufficient length to hold the host name, then the returned name is truncated and it is unspecified whether the returned name is null-terminated.  [...]" as SUSv2 specifies.
- Added to print "\n" after ULOGD_RET_NONE type as well after an unspecified type. See example above at extensions/ulogd_BASE.c.
- Fixed to set the '\0' at the end and not behind the buffer.



Modified: trunk/ulog/ulogd/extensions/printpkt.c
===================================================================
--- trunk/ulog/ulogd/extensions/printpkt.c	2007-05-24 18:46:54 UTC (rev 6846)
+++ trunk/ulog/ulogd/extensions/printpkt.c	2007-05-28 12:46:38 UTC (rev 6847)
@@ -267,6 +267,7 @@
 			  strerror(errno));
 		exit(2);
 	}
+	hostname[sizeof(hostname)-1] = '\0';
 
 	if (get_ids())
 		return 1;

Modified: trunk/ulog/ulogd/extensions/ulogd_BASE.c
===================================================================
--- trunk/ulog/ulogd/extensions/ulogd_BASE.c	2007-05-24 18:46:54 UTC (rev 6846)
+++ trunk/ulog/ulogd/extensions/ulogd_BASE.c	2007-05-28 12:46:38 UTC (rev 6847)
@@ -32,6 +32,7 @@
 
 #include <stdio.h>
 #include <stdlib.h>
+#include <string.h>
 #include <sys/socket.h>
 #include <netinet/ip.h>
 #include <netinet/in.h>
@@ -62,12 +63,14 @@
 				ulog_packet_msg_t *pkt)
 {
 	unsigned char *p;
-	int i;
-	char *buf, *oldbuf = NULL;
+	int i, tmp, len = 0;
+	char *buf, *ptr = NULL;
 	ulog_iret_t *ret = ip->result;
+	size_t siz;
 
 	if (pkt->mac_len) {
-		buf = (char *) malloc(3 * pkt->mac_len + 1);
+		siz = 3 * pkt->mac_len + 1;
+		buf = (char *) malloc(siz);
 		if (!buf) {
 			ulogd_log(ULOGD_ERROR, "OOM!!!\n");
 			return NULL;
@@ -75,9 +78,14 @@
 		*buf = '\0';
 
 		p = pkt->mac;
-		oldbuf = buf;
-		for (i = 0; i < pkt->mac_len; i++, p++)
-			sprintf(buf, "%s%02x%c", oldbuf, *p, i==pkt->mac_len-1 ? ' ':':');
+		ptr = buf;
+		for (i = 0; i < pkt->mac_len; i++, p++) {
+			tmp = snprintf(ptr+len, siz-len, "%02x%s", 
+					*p, i==pkt->mac_len-1 ? "":":");
+			if (tmp == -1)
+				break;
+			len += tmp;
+		}
 		ret[0].value.ptr = buf;
 		ret[0].flags |= ULOGD_RETF_VALID;
 	}

Modified: trunk/ulog/ulogd/extensions/ulogd_LOCAL.c
===================================================================
--- trunk/ulog/ulogd/extensions/ulogd_LOCAL.c	2007-05-24 18:46:54 UTC (rev 6846)
+++ trunk/ulog/ulogd/extensions/ulogd_LOCAL.c	2007-05-28 12:46:38 UTC (rev 6847)
@@ -93,6 +93,7 @@
 			  strerror(errno));
 		exit(2);
 	}
+	hostname[sizeof(hostname)-1] = '\0';
 	/* strip off everything after first '.' */
 	if ((tmp = strchr(hostname, '.')))
 		*tmp = '\0';

Modified: trunk/ulog/ulogd/extensions/ulogd_LOGEMU.c
===================================================================
--- trunk/ulog/ulogd/extensions/ulogd_LOGEMU.c	2007-05-24 18:46:54 UTC (rev 6846)
+++ trunk/ulog/ulogd/extensions/ulogd_LOGEMU.c	2007-05-28 12:46:38 UTC (rev 6847)
@@ -79,15 +79,18 @@
 
 static void signal_handler_logemu(int signal)
 {
+	FILE *old=of;
+
 	switch (signal) {
 	case SIGHUP:
 		ulogd_log(ULOGD_NOTICE, "syslogemu: reopening logfile\n");
-		fclose(of);
 		of = fopen(syslogf_ce.u.string, "a");
 		if (!of) {
 			ulogd_log(ULOGD_FATAL, "can't open syslogemu: %s\n",
 				strerror(errno));
-			exit(2);
+			of=old;
+		} else {
+			fclose(old);
 		}
 		break;
 	default:

Modified: trunk/ulog/ulogd/extensions/ulogd_OPRINT.c
===================================================================
--- trunk/ulog/ulogd/extensions/ulogd_OPRINT.c	2007-05-24 18:46:54 UTC (rev 6846)
+++ trunk/ulog/ulogd/extensions/ulogd_OPRINT.c	2007-05-28 12:46:38 UTC (rev 6847)
@@ -72,8 +72,11 @@
 					HIPQUAD(ret->value.ui32));
 				break;
 			case ULOGD_RET_NONE:
-				fprintf(of, "<none>");
+				fprintf(of, "<none>\n");
 				break;
+			default:
+				fprintf(of, "\n");
+				break;
 		}
 	}
 	return 0;
@@ -88,16 +91,18 @@
 
 static void sighup_handler_print(int signal)
 {
+	FILE *old=of;
 
 	switch (signal) {
 	case SIGHUP:
 		ulogd_log(ULOGD_NOTICE, "PKTLOG: reopening logfile\n");
-		fclose(of);
 		of = fopen(outf_ce.u.string, "a");
 		if (!of) {
 			ulogd_log(ULOGD_FATAL, "can't open PKTLOG: %s\n",
 				strerror(errno));
-			exit(2);
+			of=old;
+		} else {
+			fclose(old);
 		}
 		break;
 	default:

Modified: trunk/ulog/ulogd/extensions/ulogd_PWSNIFF.c
===================================================================
--- trunk/ulog/ulogd/extensions/ulogd_PWSNIFF.c	2007-05-24 18:46:54 UTC (rev 6846)
+++ trunk/ulog/ulogd/extensions/ulogd_PWSNIFF.c	2007-05-28 12:46:38 UTC (rev 6847)
@@ -116,7 +116,7 @@
 			return NULL;
 		}
 		strncpy(ret[0].value.ptr, (char *)begp, len);
-		*((char *)ret[0].value.ptr + len + 1) = '\0';
+		*((char *)ret[0].value.ptr + len) = '\0';
 	}
 	if (pw_len) {
 		ret[1].value.ptr = (char *) malloc(pw_len+1);
@@ -126,7 +126,7 @@
 			return NULL;
 		}
 		strncpy(ret[1].value.ptr, (char *)pw_begp, pw_len);
-		*((char *)ret[1].value.ptr + pw_len + 1) = '\0';
+		*((char *)ret[1].value.ptr + pw_len) = '\0';
 
 	}
 	return ret;

Modified: trunk/ulog/ulogd/ulogd.c
===================================================================
--- trunk/ulog/ulogd/ulogd.c	2007-05-24 18:46:54 UTC (rev 6846)
+++ trunk/ulog/ulogd/ulogd.c	2007-05-28 12:46:38 UTC (rev 6847)
@@ -595,14 +595,15 @@
 
 	ipulog_destroy_handle(libulog_h);
 	free(libulog_buf);
-	if (logfile != stdout && logfile != &syslog_dummy)
-		fclose(logfile);
 
 	for (p = ulogd_outputs; p; p = p->next) {
 		if (p->fini)
 			(*p->fini)();
 	}
 
+	if (logfile != stdout && logfile != &syslog_dummy)
+		fclose(logfile);
+
 	exit(0);
 }
 




More information about the netfilter-cvslog mailing list