/* UNIX Daemon Server program for monitoring conntrack logging processes. Usage: ./vyatta-conntrack-logging -p -e [-s ] */ #include #include #include #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 */ openlog("log-conntrack", LOG_PID, LOG_USER); syslog(LOG_ALERT,"STARTING CONNTRACK DAEMON"); closelog(); 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[]) { int other=0; int i; 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