From b90f8af4fb0b2a8ce60014144e47fdbb0922e34d Mon Sep 17 00:00:00 2001 From: Deepti Kulkarni Date: Tue, 13 Dec 2011 02:49:29 -0800 Subject: Bug fix 7397 - Conntrack log creation and deletion. --- src/vyatta-conntrack-logging.c | 254 +++++++++++++++++++++++++++++++++++++++++ 1 file changed, 254 insertions(+) create mode 100644 src/vyatta-conntrack-logging.c (limited to 'src') diff --git a/src/vyatta-conntrack-logging.c b/src/vyatta-conntrack-logging.c new file mode 100644 index 0000000..27f426b --- /dev/null +++ b/src/vyatta-conntrack-logging.c @@ -0,0 +1,254 @@ +/* +UNIX Daemon Server program for monitoring conntrack logging +processes. +Usage: ./vyatta-conntrack-logging + -p -e [-s ] +*/ + +#include +#include +#include +#include +#include +#include +#include +#include + + +#define RUNNING_DIR "/var/run/vyatta" +#define LOCK_FILE "connlogd.lock" +#define MAX_PROCESS 17 + +// Global variables +pid_t pids[MAX_PROCESS]; +char *cmds[MAX_PROCESS]; +long int nbuffer[MAX_PROCESS]; +int pcounter=0; +long int netlink_buffer_size = 2097152; +long int netlink_buffer_maxsize= 8388608; + +// Initialise the nbuffer to 2MB +void init_nbuffer() +{ + int i; + for (i=0;i0) { + exit(0); + } + /* child (daemon) continues */ + setsid(); + for (i=getdtablesize();i>=0;--i) + close(i); + i=open("/dev/null",O_RDWR); dup(i); dup(i); + umask(027); + chdir(RUNNING_DIR); + fptr=open(LOCK_FILE,O_RDWR|O_CREAT,0640); + if (fptr<0) + exit(1); + if (lockf(fptr,F_TLOCK,0)<0) + exit(0); + sprintf(str,"%d\n",getpid()); + write(fptr,str,strlen(str)); + + signal(SIGHUP,signal_handler); + signal(SIGTERM,signal_handler); +} + +int main(int argc, char *argv[]) +{ + FILE *logfile; + int other=0; + int i, pid; + char *conn="conntrack -E"; + char *logger="logger -t log-conntrack -p daemon.notice"; + char *fother="grep -vE 'tcp|udp|icmp'"; + char cmd[1024]; + char cmd_to_run[1024]; + int length = 0; + char * temp_cmd = cmd; + + for (i=1; i