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

version 1.3.2.4, 2013/04/09 12:55:51 version 1.3.2.5, 2013/04/09 15:44:28
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) {                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;
                 }                  }
         }          }
Line 293  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.4  
changed lines
  Added in v.1.3.2.5


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