|
|
| 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; |
| } | } |