Diff for /ansh/src/anshd.c between versions 1.1.1.1 and 1.1.1.1.2.3

version 1.1.1.1, 2011/10/04 22:37:46 version 1.1.1.1.2.3, 2011/10/10 13:56:30
Line 12 Line 12
   
   
 intptr_t Kill;  intptr_t Kill;
int bpfLEN, Verbose, Crypted = 1;int Verbose;
 u_int Crypted = 1;
 proc_head_t pH;  proc_head_t pH;
int Daemon = 1;int bpfLEN, Timeout, Daemon = 1;
   
 extern char compiled[], compiledby[], compilehost[];  extern char compiled[], compiledby[], compilehost[];
   
Line 25  Usage() Line 26  Usage()
                 "=== %s === %s@%s ===\n\n"                  "=== %s === %s@%s ===\n\n"
                 " Syntax: anshd [options]\n\n"                  " Syntax: anshd [options]\n\n"
                 "\t-d <dev>\tBind to host interface, like 'em0' (default is first host interface)\n"                  "\t-d <dev>\tBind to host interface, like 'em0' (default is first host interface)\n"
                 "\t-i <id>\tService ID (default is 42)\n"  
                 "\t-U <user>\tRun service with other user\n"                  "\t-U <user>\tRun service with other user\n"
                 "\t-C <dir>\tRun service into chroot directory\n"                  "\t-C <dir>\tRun service into chroot directory\n"
                   "\t-t <timeout>\tTimeout of login if no activity (default is 0 sec)\n"
                 "\t-u\t\tSwitch to unencrypted traffic between hosts\n"                  "\t-u\t\tSwitch to unencrypted traffic between hosts\n"
                 "\t-b\t\tRun into batch mode (default is daemon mode)\n"                  "\t-b\t\tRun into batch mode (default is daemon mode)\n"
                 "\t-v\t\tVerbose (more -v, more verbosity ...)\n"                  "\t-v\t\tVerbose (more -v, more verbosity ...)\n"
Line 42  sig(int s) Line 43  sig(int s)
   
         switch (s) {          switch (s) {
                 case SIGHUP:                  case SIGHUP:
                        LOG("Got SIGHUP!\n");                        VERB(1) LOG("Got SIGHUP!\n");
                         break;                          break;
                 case SIGTERM:                  case SIGTERM:
                         LOG("Got SIGTERM!\n");  
                         Kill++;                          Kill++;
                           VERB(1) LOG("Got SIGTERM!\n");
                         break;                          break;
                 case SIGPIPE:                  case SIGPIPE:
                        LOG("Got SIGPIPE!\n");                        VERB(1) LOG("Got SIGPIPE!\n");
                         break;                          break;
                 case SIGCHLD:                  case SIGCHLD:
                           VERB(1) LOG("Got SIGCHLD!\n");
                         while (waitpid(-1, &state, WNOHANG) > 0);                          while (waitpid(-1, &state, WNOHANG) > 0);
                         break;                          break;
         }          }
 }  }
   
   static void *
   hook_error(void *root, void *arg)
   {
   /*      sched_root_task_t *r = root; */
   
           if (!root)
                   return (void*) -1;
   
           if (arg == (void*) EINTR)
                   return (void*) -1;
   
           return NULL;
   }
   
 int  int
 main(int argc, char **argv)  main(int argc, char **argv)
 {  {
         struct passwd *pass;          struct passwd *pass;
         int fd, h = 0, uid = 0, gid = 0;          int fd, h = 0, uid = 0, gid = 0;
         long id = ANSH_ID;  
         char ch, szUser[STRSIZ] = "root", szChroot[STRSIZ] = "/", szDev[STRSIZ] = { 0 };          char ch, szUser[STRSIZ] = "root", szChroot[STRSIZ] = "/", szDev[STRSIZ] = { 0 };
         struct sigaction sact;          struct sigaction sact;
         sched_root_task_t *root = NULL;          sched_root_task_t *root = NULL;
Line 70  main(int argc, char **argv) Line 85  main(int argc, char **argv)
   
         Get1stEth(szDev, STRSIZ);          Get1stEth(szDev, STRSIZ);
   
        while ((ch = getopt(argc, argv, "hvulbd:U:C:")) != -1)        while ((ch = getopt(argc, argv, "hvubt:d:U:C:")) != -1)
                 switch (ch) {                  switch (ch) {
                         case 'U':                          case 'U':
                                 pass = getpwnam(optarg);                                  pass = getpwnam(optarg);
Line 91  main(int argc, char **argv) Line 106  main(int argc, char **argv)
                                 } else                                  } else
                                         strlcpy(szChroot, optarg, sizeof szChroot);                                          strlcpy(szChroot, optarg, sizeof szChroot);
                                 break;                                  break;
                        case 'i':                        case 't':
                                id = strtol(optarg, NULL, 0);                                Timeout = abs(strtol(optarg, NULL, 0));
                                 break;                                  break;
                         case 'd':                          case 'd':
                                 strlcpy(szDev, optarg, sizeof szDev);                                  strlcpy(szDev, optarg, sizeof szDev);
Line 152  main(int argc, char **argv) Line 167  main(int argc, char **argv)
                 }                  }
         }          }
   
           if (ioCreatePIDFile(PIDFILE_ANSHD, 42)) {
                   ERR("Error:: already started anshd service ...\n");
                   closelog();
                   return 1;
           }
   
         h = PrepareL2(szDev, &bpfLEN);          h = PrepareL2(szDev, &bpfLEN);
         if (h == -1) {          if (h == -1) {
                 ERR("Error:: Descriptor not opened ... abort!\n");                  ERR("Error:: Descriptor not opened ... abort!\n");
                   unlink(PIDFILE_ANSHD);
                 closelog();                  closelog();
                 return 2;                  return 2;
         }          }
   
         SLIST_INIT(&pH);          SLIST_INIT(&pH);
        if (!(proc = InitProc(h, NULL, id, bpfLEN))) {        if (!(proc = InitProc(h, NULL, ANSH_ID, bpfLEN))) {
                 ERR("Error:: Not enough memory ...\n");                  ERR("Error:: Not enough memory ...\n");
                 close(h);                  close(h);
                   unlink(PIDFILE_ANSHD);
                 closelog();                  closelog();
                 return 3;                  return 3;
         }          }
Line 170  main(int argc, char **argv) Line 193  main(int argc, char **argv)
         root = schedBegin();          root = schedBegin();
         if (!root) {          if (!root) {
                 ERR("Scheduler not init #%d - %s\n", sched_GetErrno(), sched_GetError());                  ERR("Scheduler not init #%d - %s\n", sched_GetErrno(), sched_GetError());
                DestroyProc(id);                DestroyProc(ANSH_ID);
                 close(h);                  close(h);
                   unlink(PIDFILE_ANSHD);
                 closelog();                  closelog();
                 return 4;                  return 4;
        }        } else
                 root->root_hooks.hook_root.error = hook_error;
   
         chdir("/");          chdir("/");
         chroot(szChroot);          chroot(szChroot);
Line 182  main(int argc, char **argv) Line 207  main(int argc, char **argv)
         setgid(gid);          setgid(gid);
         setuid(uid);          setuid(uid);
   
        if (schedRead(root, pktRx, (void*) id, h)) {        if (schedRead(root, pktRx, (void*) ANSH_ID, h)) {
                 schedRun(root, &Kill);                  schedRun(root, &Kill);
         } else          } else
                 ERR("Failed to add reader task #%d - %s\n", sched_GetErrno(), sched_GetError());                  ERR("Failed to add reader task #%d - %s\n", sched_GetErrno(), sched_GetError());
   
         VERB(1) LOG("Finish process.");          VERB(1) LOG("Finish process.");
         schedEnd(&root);          schedEnd(&root);
        DestroyProc(id);        DestroyProc(ANSH_ID);
         close(h);          close(h);
           unlink(PIDFILE_ANSHD);
         closelog();          closelog();
         return 0;          return 0;
 }  }

Removed from v.1.1.1.1  
changed lines
  Added in v.1.1.1.1.2.3


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