|
version 1.3.2.4, 2013/04/09 12:55:51
|
version 1.4, 2013/04/09 15:59:44
|
|
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; |
| } |
} |
| |
|