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