Diff for /embedtools/src/dwds.c between versions 1.1.2.3 and 1.1.2.4

version 1.1.2.3, 2010/10/27 13:50:03 version 1.1.2.4, 2010/10/27 15:23:49
Line 2 Line 2
 #include "dwds.h"  #include "dwds.h"
   
   
int Verbose, Kill;sl_config cfg;
char szConfig[MAXPATHLEN] = DWDS_CONFIG;int Verbose, Kill, nif;
 char **ifs, szConfig[MAXPATHLEN] = DWDS_CONFIG;
 struct dwds_if *wds;
 extern char compiled[], compiledby[], compilehost[];  extern char compiled[], compiledby[], compilehost[];
   
   
Line 20  Usage() Line 22  Usage()
                 "\n", compiled, compiledby, compilehost);                  "\n", compiled, compiledby, compilehost);
 }  }
   
   static void
   sigHandler(int sig)
   {
           int stat;
           const u_char *v;
           char szStr[STRSIZ];
   
           switch (sig) {
                   case SIGHUP:
                           UnloadConfig(&cfg);
                           if (LoadConfig(szConfig, &cfg)) {
                                   printf("Error:: can`t load config %s ...\n", szConfig);
                                   Kill++;
                           } else {
                                   closelog();
   
                                   cfg_LoadAttribute(&cfg, CFG("dwds"), CFG("name"), CFG(szStr), STRSIZ, DWDS_NAME);
                                   openlog(szStr, LOG_PID | LOG_CONS, LOG_DAEMON);
                                   v = cfg_GetAttribute(&cfg, CFG("dwds"), CFG("syslog_upto"));
                                   setlogmask(v ? strtol((char*) v, NULL, 0) : 0);
                           }
                           break;
                   case SIGTERM:
                           Kill++;
                           break;
                   case SIGCHLD:
                           while (waitpid(-1, &stat, WNOHANG) > 0);
                           break;
           }
   }
   
   static int
   RtMsg(struct rt_msghdr *msg, size_t len)
   {
           return 0;
   }
   
 // ---------------------------------------------------------------  // ---------------------------------------------------------------
   
 int  int
 main(int argc, char **argv)  main(int argc, char **argv)
 {  {
        char ch, fg = 0;        char ch, szStr[STRSIZ], fg = 0;
         const u_char *v, msg[2048];
         int s;
         struct sigaction sa;
         size_t len;
   
         while ((ch = getopt(argc, argv, "hvfc:")) != -1)          while ((ch = getopt(argc, argv, "hvfc:")) != -1)
                 switch (ch) {                  switch (ch) {
Line 49  main(int argc, char **argv) Line 92  main(int argc, char **argv)
                 printf("Error:: not specified interface for use ...\n");                  printf("Error:: not specified interface for use ...\n");
                 Usage();                  Usage();
                 return 1;                  return 1;
           } else {
                   nif = argc;
                   ifs = argv;
         }          }
           if (LoadConfig(szConfig, &cfg)) {
                   printf("Error:: can`t load config %s ...\n", szConfig);
                   return 1;
           }
   
           if (fg)
                   switch (fork()) {
                           case -1:
                                   printf("Error:: when fork() #%d - %s\n", errno, strerror(errno));
                                   UnloadConfig(&cfg);
                                   return 2;
                           case 0 :
                                   VERB(1) printf("Going to shadow land ...\n");
   
                                   setsid();
   
                                   memset(&sa, 0, sizeof sa);
                                   sa.sa_handler = sigHandler;
                                   sigemptyset(&sa.sa_mask);
                                   sigaction(SIGHUP, &sa, NULL);
                                   sigaction(SIGTERM, &sa, NULL);
                                   sigaction(SIGCHLD, &sa, NULL);
                                   break;
                           default:
                                   goto end;
                   }
   
           cfg_LoadAttribute(&cfg, CFG("dwds"), CFG("name"), CFG(szStr), STRSIZ, DWDS_NAME);
           openlog(szStr, LOG_PID | LOG_CONS, LOG_DAEMON);
           v = cfg_GetAttribute(&cfg, CFG("dwds"), CFG("syslog_upto"));
           setlogmask(v ? strtol((char*) v, NULL, 0) : 0);
   
           s = socket(PF_ROUTE, SOCK_RAW, 0);
           if (s == -1) {
                   syslog(LOG_ERR, "Error:: socket() #%d - %s\n", errno, strerror(errno));
                   goto end;
           }
   
           while (!Kill) {
                   len = read(s, (void*) msg, sizeof msg);
                   if (len == -1) {
                           syslog(LOG_ERR, "Error:: read() #%d - %s\n", errno, strerror(errno));
                           Kill++;
                   } else
                           RtMsg((struct rt_msghdr*) msg, len);
           }
   
           close(s);
   end:
           closelog();
           UnloadConfig(&cfg);
         return 0;          return 0;
 }  }

Removed from v.1.1.2.3  
changed lines
  Added in v.1.1.2.4


FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>