Diff for /suX/src/sux.c between versions 1.3.2.4 and 1.3.2.6

version 1.3.2.4, 2013/04/09 12:55:51 version 1.3.2.6, 2013/04/09 15:51:11
Line 131  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 142  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 261  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) {                /*
                        ESYSERR(0);                if (setegid(AIT_GET_I16(&proc.proc_gid)) == -1)
                        if (args)                        goto err;
                                free(args);                if (seteuid(AIT_GET_I16(&proc.proc_uid)) == -1)
                        return -1;                        goto err;
                }                        */
                if (setuid(AIT_GET_I16(&proc.proc_uid)) == -1) {                if (setpriority(PRIO_PROCESS, 0, AIT_GET_I32(&proc.proc_prio)) == -1)
                        ESYSERR(0);                        goto err;
                        if (args) 
                                free(args); 
                        return -1; 
                } 
                if (setpriority(PRIO_PROCESS, 0, AIT_GET_I32(&proc.proc_prio)) == -1) { 
                        ESYSERR(0); 
                        if (args) 
                                free(args); 
                        return -1; 
                } 
         }          }
   
         DumpProc(__func__);          DumpProc(__func__);
Line 292  Run(char **argv, char flg) Line 274  Run(char **argv, char flg)
         fflush(lf);          fflush(lf);
   
         execve(cmd, args, environ);          execve(cmd, args, environ);
        if (args)err:
                free(args); 
         ESYSERR(0);          ESYSERR(0);
           if (args)
                   e_free(args);
         return -1;          return -1;
 }  }
   

Removed from v.1.3.2.4  
changed lines
  Added in v.1.3.2.6


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