summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--ulogd/extensions/printpkt.c1
-rw-r--r--ulogd/extensions/ulogd_BASE.c20
-rw-r--r--ulogd/extensions/ulogd_LOCAL.c1
-rw-r--r--ulogd/extensions/ulogd_LOGEMU.c7
-rw-r--r--ulogd/extensions/ulogd_OPRINT.c11
-rw-r--r--ulogd/extensions/ulogd_PWSNIFF.c4
-rw-r--r--ulogd/ulogd.c5
7 files changed, 34 insertions, 15 deletions
diff --git a/ulogd/extensions/printpkt.c b/ulogd/extensions/printpkt.c
index 0b6d111..a9e78d7 100644
--- a/ulogd/extensions/printpkt.c
+++ b/ulogd/extensions/printpkt.c
@@ -267,6 +267,7 @@ int printpkt_init(void)
strerror(errno));
exit(2);
}
+ hostname[sizeof(hostname)-1] = '\0';
if (get_ids())
return 1;
diff --git a/ulogd/extensions/ulogd_BASE.c b/ulogd/extensions/ulogd_BASE.c
index f8abd70..0fd921c 100644
--- a/ulogd/extensions/ulogd_BASE.c
+++ b/ulogd/extensions/ulogd_BASE.c
@@ -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 @@ static ulog_iret_t *_interp_raw(ulog_interpreter_t *ip,
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 @@ static ulog_iret_t *_interp_raw(ulog_interpreter_t *ip,
*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;
}
diff --git a/ulogd/extensions/ulogd_LOCAL.c b/ulogd/extensions/ulogd_LOCAL.c
index 1004586..6504ec6 100644
--- a/ulogd/extensions/ulogd_LOCAL.c
+++ b/ulogd/extensions/ulogd_LOCAL.c
@@ -93,6 +93,7 @@ void _init(void)
strerror(errno));
exit(2);
}
+ hostname[sizeof(hostname)-1] = '\0';
/* strip off everything after first '.' */
if ((tmp = strchr(hostname, '.')))
*tmp = '\0';
diff --git a/ulogd/extensions/ulogd_LOGEMU.c b/ulogd/extensions/ulogd_LOGEMU.c
index 4b654c7..5473668 100644
--- a/ulogd/extensions/ulogd_LOGEMU.c
+++ b/ulogd/extensions/ulogd_LOGEMU.c
@@ -79,15 +79,18 @@ static int _output_logemu(ulog_iret_t *res)
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:
diff --git a/ulogd/extensions/ulogd_OPRINT.c b/ulogd/extensions/ulogd_OPRINT.c
index 701b645..ed34382 100644
--- a/ulogd/extensions/ulogd_OPRINT.c
+++ b/ulogd/extensions/ulogd_OPRINT.c
@@ -72,7 +72,10 @@ static int _output_print(ulog_iret_t *res)
HIPQUAD(ret->value.ui32));
break;
case ULOGD_RET_NONE:
- fprintf(of, "<none>");
+ fprintf(of, "<none>\n");
+ break;
+ default:
+ fprintf(of, "\n");
break;
}
}
@@ -88,16 +91,18 @@ static config_entry_t outf_ce = {
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:
diff --git a/ulogd/extensions/ulogd_PWSNIFF.c b/ulogd/extensions/ulogd_PWSNIFF.c
index 1f86bbe..d205cdd 100644
--- a/ulogd/extensions/ulogd_PWSNIFF.c
+++ b/ulogd/extensions/ulogd_PWSNIFF.c
@@ -116,7 +116,7 @@ static ulog_iret_t *_interp_pwsniff(ulog_interpreter_t *ip, ulog_packet_msg_t *p
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 @@ static ulog_iret_t *_interp_pwsniff(ulog_interpreter_t *ip, ulog_packet_msg_t *p
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;
diff --git a/ulogd/ulogd.c b/ulogd/ulogd.c
index 9324a4f..5707ef8 100644
--- a/ulogd/ulogd.c
+++ b/ulogd/ulogd.c
@@ -595,14 +595,15 @@ static void sigterm_handler(int signal)
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);
}