Diff for /suX/src/sux.c between versions 1.1.1.1.2.3 and 1.2.2.2

version 1.1.1.1.2.3, 2011/05/20 16:38:53 version 1.2.2.2, 2011/10/09 21:45:44
Line 18  FILE *lf; Line 18  FILE *lf;
 static inline void  static inline void
 Log(int lvl, const char *fmt, ...)  Log(int lvl, const char *fmt, ...)
 {  {
        va_list lst;        va_list lst, cp;
   
         if (lvl <= Verbose) {          if (lvl <= Verbose) {
                 va_start(lst, fmt);                  va_start(lst, fmt);
                   va_copy(cp, lst);
                 vfprintf(lf, fmt, lst);                  vfprintf(lf, fmt, lst);
                 fprintf(lf, "\n");  
                 vsyslog(LOG_WARNING, fmt, lst);  
                 va_end(lst);                  va_end(lst);
                   fprintf(lf, "\n");
                   vsyslog(LOG_WARNING, fmt, cp);
                   va_end(cp);
         }          }
 }  }
   
 static inline void  static inline void
 Err(const char *fmt, ...)  Err(const char *fmt, ...)
 {  {
        va_list lst;        va_list lst, cp;
   
         va_start(lst, fmt);          va_start(lst, fmt);
           va_copy(cp, lst);
         vfprintf(lf, fmt, lst);          vfprintf(lf, fmt, lst);
         fprintf(lf, "\n");  
         vsyslog(LOG_ERR, fmt, lst);  
         va_end(lst);          va_end(lst);
           fprintf(lf, "\n");
           vsyslog(LOG_ERR, fmt, cp);
           va_end(cp);
 }  }
   
 static void  static void
Line 49  initProg() Line 53  initProg()
         proc.proc_prio = getpriority(PRIO_PROCESS, 0);          proc.proc_prio = getpriority(PRIO_PROCESS, 0);
         getcwd(proc.proc_dir, sizeof proc.proc_dir);          getcwd(proc.proc_dir, sizeof proc.proc_dir);
   
   #if 0
         lf = fopen(DEFAULT_LOG, "a");          lf = fopen(DEFAULT_LOG, "a");
         if (!lf)          if (!lf)
   #endif
                 lf = stdout;                  lf = stdout;
   
        openlog(PACKAGE_NAME, LOG_CONS | LOG_PID | LOG_NDELAY | LOG_PERROR, LOG_USER);        openlog(PACKAGE_NAME, LOG_CONS | LOG_PID | LOG_NDELAY, LOG_USER);
 }  }
   
 static void  static void
Line 66  Usage() Line 72  Usage()
                 "\t-g <group>\t\t\tGroup for suID\n"                  "\t-g <group>\t\t\tGroup for suID\n"
                 "\t-p <priority (-20..20)>\t\tExecute with priority\n"                  "\t-p <priority (-20..20)>\t\tExecute with priority\n"
                 "\t-d <directory>\t\t\tDirectory for suID\n"                  "\t-d <directory>\t\t\tDirectory for suID\n"
                   "\t-C <directory>\t\t\tChroot to directory\n"
                   "\t-c <cfgfile>\t\t\tConfig file\n"
                 "\t-l <logfile>\t\t\tLog file path (default:/var/log/suX.log)\n"                  "\t-l <logfile>\t\t\tLog file path (default:/var/log/suX.log)\n"
                 "\t-v\t\t\t\tVerbose, (more -v, more verbosity)\n"                  "\t-v\t\t\t\tVerbose, (more -v, more verbosity)\n"
                 "\t-h\t\t\t\tThis help screen!\n\n", PACKAGE_NAME);                  "\t-h\t\t\t\tThis help screen!\n\n", PACKAGE_NAME);
Line 222  Run(char **argv) Line 230  Run(char **argv)
                 return -1;                  return -1;
         }          }
   
           /*
         if (setgid(proc.proc_gid) == -1) {          if (setgid(proc.proc_gid) == -1) {
                 Err("Error:: setgid #%d - %s\n", errno, strerror(errno));                  Err("Error:: setgid #%d - %s\n", errno, strerror(errno));
                 if (args)                  if (args)
Line 240  Run(char **argv) Line 249  Run(char **argv)
                         free(args);                          free(args);
                 return -1;                  return -1;
         }          }
           */
   
        Log(1, "UID:GID=%d:%d Prio=%d Class=%s Name=%s Dir=%s Cmd=%s\n", proc.proc_uid, proc.proc_gid,         Log(0, "UID:GID=%d:%d Prio=%d Class=%s Name=%s Dir=%s Cmd=%s Script=%s", 
                        proc.proc_prio, proc.proc_class, proc.proc_name, proc.proc_dir, proc.proc_cmd);                        proc.proc_uid, proc.proc_gid, proc.proc_prio, proc.proc_class, 
                         proc.proc_name, proc.proc_dir, proc.proc_cmd, getenv("PATH_TRANSLATED"));
   
         if (3 <= Verbose) {          if (3 <= Verbose) {
                 char **el = args - 1;                  char **el = args - 1;
Line 250  Run(char **argv) Line 261  Run(char **argv)
                         Log(3, "args: %s", *el);                          Log(3, "args: %s", *el);
         }          }
   
           fflush(lf);
   
         execve(cmd, args, environ);          execve(cmd, args, environ);
         if (args)          if (args)
                 free(args);                  free(args);
Line 261  Run(char **argv) Line 274  Run(char **argv)
 int  int
 main(int argc, char **argv)  main(int argc, char **argv)
 {  {
        char ch, *str, szCfg[MAXPATHLEN], flg = 0;        char ch, *str, *wrk, szCfg[MAXPATHLEN], **pp, flg = 0;
         struct passwd *pass;          struct passwd *pass;
         struct group *grp;          struct group *grp;
         FILE *f;          FILE *f;
Line 269  main(int argc, char **argv) Line 282  main(int argc, char **argv)
         initProg();          initProg();
         strlcpy(szCfg, DEFAULT_CONFIG, sizeof szCfg);          strlcpy(szCfg, DEFAULT_CONFIG, sizeof szCfg);
   
        while ((ch = getopt(argc, argv, "hvc:u:g:p:d:l:")) != -1)        while ((ch = getopt(argc, argv, "hvC:c:u:g:p:d:l:")) != -1)
                 switch (ch) {                  switch (ch) {
                         case 'l':                          case 'l':
                                 f = fopen(optarg, "a");                                  f = fopen(optarg, "a");
Line 312  main(int argc, char **argv) Line 325  main(int argc, char **argv)
                         case 'c':                          case 'c':
                                 strlcpy(szCfg, optarg, sizeof szCfg);                                  strlcpy(szCfg, optarg, sizeof szCfg);
                                 break;                                  break;
                           case 'C':
                                   if (chroot(optarg) == -1)
                                           Err("Error:: chroot to dir");
                                   if ((str = getenv("PATH_TRANSLATED")))
                                           if ((wrk = strstr(str, optarg)))
                                                   setenv("PATH_TRANSLATED", str + strlen(optarg), 42);
                                   break;
                         case 'v':                          case 'v':
                                 Verbose++;                                  Verbose++;
                                 break;                                  break;
Line 324  main(int argc, char **argv) Line 344  main(int argc, char **argv)
                 }                  }
         argc -= optind;          argc -= optind;
         argv += optind;          argv += optind;
   
           if (2 <= Verbose) {
                   for (pp = argv; *pp; pp++)
                           Log(2, "Args=%s\n", *pp);
                   for (pp = environ; *pp; pp++)
                           Log(2, "Envs=%s\n", *pp);
           }
   
         if (!argc) {          if (!argc) {
                 if (!(str = getenv("PATH_TRANSLATED"))) {                  if (!(str = getenv("PATH_TRANSLATED"))) {
                         Usage();                          Usage();

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


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