Diff for /suX/src/sux.c between versions 1.3.2.3 and 1.3.2.5

version 1.3.2.3, 2013/04/09 08:56:57 version 1.3.2.5, 2013/04/09 15:44:28
Line 45  Err(const char *fmt, ...) Line 45  Err(const char *fmt, ...)
         va_end(cp);          va_end(cp);
 }  }
   
   static inline void
   DumpProc(const char *txt)
   {
           Log(0, "%s:: UID:GID=%d:%d Prio=%d Class=%s Name=%s Dir=%s Cmd=%s Script=%s From=%s:%s%s", 
                           txt ? txt : __func__, AIT_GET_I16(&proc.proc_uid), 
                           AIT_GET_I16(&proc.proc_gid), AIT_GET_I32(&proc.proc_prio), 
                           AIT_GET_STR(&proc.proc_class), AIT_GET_STR(&proc.proc_name), 
                           AIT_GET_STR(&proc.proc_dir), AIT_GET_STR(&proc.proc_cmd), 
                           getenv("PATH_TRANSLATED"), getenv("REMOTE_ADDR"), 
                           getenv("REMOTE_PORT"), getenv("REQUEST_URI"));
   }
   
 static void  static void
 initProg()  initProg()
 {  {
Line 53  initProg() Line 65  initProg()
         AIT_SET_I16(&proc.proc_uid, getuid());          AIT_SET_I16(&proc.proc_uid, getuid());
         AIT_SET_I16(&proc.proc_gid, getgid());          AIT_SET_I16(&proc.proc_gid, getgid());
         AIT_SET_I32(&proc.proc_prio, getpriority(PRIO_PROCESS, 0));          AIT_SET_I32(&proc.proc_prio, getpriority(PRIO_PROCESS, 0));
           AIT_INIT_VAL2(&proc.proc_class, string);
         getcwd(d, sizeof d);          getcwd(d, sizeof d);
         AIT_SET_STR(&proc.proc_dir, d);          AIT_SET_STR(&proc.proc_dir, d);
           AIT_INIT_VAL2(&proc.proc_name, string);
           AIT_INIT_VAL2(&proc.proc_cmd, string);
   
 #if 0  #if 0
         lf = fopen(DEFAULT_LOG, "a");          lf = fopen(DEFAULT_LOG, "a");
Line 116  setUIDGID(char flg, const char *name) Line 131  setUIDGID(char flg, const char *name)
 static inline int  static inline int
 SetClass()  SetClass()
 {  {
         login_cap_t *cap;  
         struct passwd *pass;          struct passwd *pass;
           int ret = 0;
   
         pass = getpwuid(AIT_GET_I16(&proc.proc_uid));          pass = getpwuid(AIT_GET_I16(&proc.proc_uid));
         if (!pass) {          if (!pass) {
Line 127  SetClass() Line 142  SetClass()
         } else           } else 
                 AIT_SET_STR(&proc.proc_class, pass->pw_class);                  AIT_SET_STR(&proc.proc_class, pass->pw_class);
   
        cap = login_getclass(AIT_GET_STR(&proc.proc_class));        if (setusercontext(NULL, pass, AIT_GET_I16(&proc.proc_uid), 
        if (!cap) {                                LOGIN_SETRESOURCES | LOGIN_SETGROUP | LOGIN_SETLOGIN | 
                Err("Error:: Cant get login class %s", AIT_GET_STR(&proc.proc_class));                                LOGIN_SETPRIORITY)) {
                endpwent(); 
                return -1; 
        } 
 
        if (setusercontext(cap, pass, AIT_GET_I16(&proc.proc_uid), LOGIN_SETALL)) { 
                 Err("Error:: Cant set login class %s", AIT_GET_STR(&proc.proc_class));                  Err("Error:: Cant set login class %s", AIT_GET_STR(&proc.proc_class));
                login_close(cap);                ret = -1;
                endpwent(); 
                return -1; 
         }          }
   
         login_close(cap);  
         endpwent();          endpwent();
        return 0;        return ret;
 }  }
   
 static int  static int
Line 246  Run(char **argv, char flg) Line 253  Run(char **argv, char flg)
         }          }
   
         if (flg & SUX_GET_FORCE) {          if (flg & SUX_GET_FORCE) {
                if (setgid(AIT_GET_I16(&proc.proc_gid)) == -1) {                if (setegid(AIT_GET_I16(&proc.proc_gid)) == -1) {
                         ESYSERR(0);                          ESYSERR(0);
                         if (args)                          if (args)
                                free(args);                                e_free(args);
                         return -1;                          return -1;
                 }                  }
                if (setuid(AIT_GET_I16(&proc.proc_uid)) == -1) {                if (seteuid(AIT_GET_I16(&proc.proc_uid)) == -1) {
                         ESYSERR(0);                          ESYSERR(0);
                         if (args)                          if (args)
                                free(args);                                e_free(args);
                         return -1;                          return -1;
                 }                  }
                 if (setpriority(PRIO_PROCESS, 0, AIT_GET_I32(&proc.proc_prio)) == -1) {                  if (setpriority(PRIO_PROCESS, 0, AIT_GET_I32(&proc.proc_prio)) == -1) {
                         ESYSERR(0);                          ESYSERR(0);
                         if (args)                          if (args)
                                free(args);                                e_free(args);
                         return -1;                          return -1;
                 }                  }
         }          }
   
        Log(0, "UID:GID=%d:%d Prio=%d Class=%s Name=%s Dir=%s Cmd=%s Script=%s",         DumpProc(__func__);
                        proc.proc_uid, proc.proc_gid, proc.proc_prio, AIT_GET_STR(&proc.proc_class),  
                        AIT_GET_STR(&proc.proc_name), AIT_GET_STR(&proc.proc_dir),  
                        AIT_GET_STR(&proc.proc_cmd), getenv("PATH_TRANSLATED")); 
   
         EVERBS(3) {          EVERBS(3) {
                 char **el = args - 1;                  char **el = args - 1;
Line 281  Run(char **argv, char flg) Line 285  Run(char **argv, char flg)
   
         execve(cmd, args, environ);          execve(cmd, args, environ);
         if (args)          if (args)
                free(args);                e_free(args);
         ESYSERR(0);          ESYSERR(0);
         return -1;          return -1;
 }  }

Removed from v.1.3.2.3  
changed lines
  Added in v.1.3.2.5


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