|
version 1.3.2.6, 2013/04/09 15:51:11
|
version 1.4.2.1, 2013/04/09 23:50:14
|
|
Line 48 Err(const char *fmt, ...)
|
Line 48 Err(const char *fmt, ...)
|
| static inline void |
static inline void |
| DumpProc(const char *txt) |
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", | Log(0, "%s:: uid:gid=%d:%d UID:GID=%d:%d Prio=%d Class=%s Name=%s Dir=%s Cmd=%s " |
| txt ? txt : __func__, AIT_GET_I16(&proc.proc_uid), | "Script=%s From=%s:%s Get=%s", txt ? txt : __func__, |
| | geteuid(), getegid(), AIT_GET_I16(&proc.proc_uid), |
| AIT_GET_I16(&proc.proc_gid), AIT_GET_I32(&proc.proc_prio), |
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_class), AIT_GET_STR(&proc.proc_name), |
| AIT_GET_STR(&proc.proc_dir), AIT_GET_STR(&proc.proc_cmd), |
AIT_GET_STR(&proc.proc_dir), AIT_GET_STR(&proc.proc_cmd), |
|
Line 57 DumpProc(const char *txt)
|
Line 58 DumpProc(const char *txt)
|
| getenv("REMOTE_PORT"), getenv("REQUEST_URI")); |
getenv("REMOTE_PORT"), getenv("REQUEST_URI")); |
| } |
} |
| |
|
| static void | static int |
| initProg() |
initProg() |
| { |
{ |
| char d[MAXPATHLEN]; |
|
| |
|
| 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); |
AIT_INIT_VAL2(&proc.proc_class, string); |
| getcwd(d, sizeof d); | AIT_INIT_VAL2(&proc.proc_dir, string); |
| AIT_SET_STR(&proc.proc_dir, d); | |
| AIT_INIT_VAL2(&proc.proc_name, string); |
AIT_INIT_VAL2(&proc.proc_name, string); |
| AIT_INIT_VAL2(&proc.proc_cmd, string); |
AIT_INIT_VAL2(&proc.proc_cmd, string); |
| |
|
|
Line 78 initProg()
|
Line 76 initProg()
|
| lf = stdout; |
lf = stdout; |
| |
|
| openlog(PACKAGE_NAME, LOG_CONS | LOG_PID | LOG_NDELAY, LOG_USER); |
openlog(PACKAGE_NAME, LOG_CONS | LOG_PID | LOG_NDELAY, LOG_USER); |
| |
return 0; |
| } |
} |
| |
|
| static void |
static void |
|
Line 114 static inline int
|
Line 113 static inline int
|
| setUIDGID(char flg, const char *name) |
setUIDGID(char flg, const char *name) |
| { |
{ |
| struct stat sb; |
struct stat sb; |
| |
struct passwd *pass; |
| |
short uid, gid; |
| |
|
| if (stat(name, &sb) == -1) { | if (name) { |
| ESYSERR(0); | if (stat(name, &sb) == -1) { |
| return -1; | ESYSERR(0); |
| | return -1; |
| | } |
| | uid = sb.st_uid; |
| | gid = sb.st_gid; |
| | } else { |
| | pass = getpwnam(getenv("SUX_USER")); |
| | if (!pass) { |
| | Err("Error:: User %s not found", getenv("SUX_USER")); |
| | endpwent(); |
| | return -1; |
| | } |
| | uid = pass->pw_uid; |
| | gid = pass->pw_gid; |
| | endpwent(); |
| } |
} |
| |
|
| if (!(flg & SUX_GET_UID)) |
if (!(flg & SUX_GET_UID)) |
| AIT_SET_I16(&proc.proc_uid, sb.st_uid); | AIT_SET_I16(&proc.proc_uid, uid); |
| if (!(flg & SUX_GET_GID)) |
if (!(flg & SUX_GET_GID)) |
| AIT_SET_I16(&proc.proc_gid, sb.st_gid); | AIT_SET_I16(&proc.proc_gid, gid); |
| |
|
| return 0; |
return 0; |
| } |
} |
| |
|
| static inline int |
static inline int |
| SetClass() | setClassDir() |
| { |
{ |
| struct passwd *pass; |
struct passwd *pass; |
| int ret = 0; |
int ret = 0; |
|
Line 137 SetClass()
|
Line 152 SetClass()
|
| pass = getpwuid(AIT_GET_I16(&proc.proc_uid)); |
pass = getpwuid(AIT_GET_I16(&proc.proc_uid)); |
| if (!pass) { |
if (!pass) { |
| Err("Error:: User with this UID %d not found", AIT_GET_I16(&proc.proc_uid)); |
Err("Error:: User with this UID %d not found", AIT_GET_I16(&proc.proc_uid)); |
| endpwent(); | ret = -1; |
| return -1; | } else { |
| } else | |
| AIT_SET_STR(&proc.proc_class, pass->pw_class); |
AIT_SET_STR(&proc.proc_class, pass->pw_class); |
| |
AIT_SET_STR(&proc.proc_dir, pass->pw_dir); |
| |
|
| if (setusercontext(NULL, pass, AIT_GET_I16(&proc.proc_uid), | if (setusercontext(NULL, pass, AIT_GET_I16(&proc.proc_uid), |
| LOGIN_SETRESOURCES | LOGIN_SETGROUP | LOGIN_SETLOGIN | | LOGIN_SETLOGIN | LOGIN_SETGROUP | LOGIN_SETUSER | |
| LOGIN_SETPRIORITY)) { | LOGIN_SETPRIORITY | LOGIN_SETRESOURCES)) { |
| Err("Error:: Cant set login class %s", AIT_GET_STR(&proc.proc_class)); | Err("Error:: Can't set login class %s", AIT_GET_STR(&proc.proc_class)); |
| ret = -1; | ret = -1; |
| | } |
| } |
} |
| |
|
| endpwent(); |
endpwent(); |
|
Line 164 LoadCfgData(char flg)
|
Line 180 LoadCfgData(char flg)
|
| Err("Error:: Unknown mode ..."); |
Err("Error:: Unknown mode ..."); |
| return -1; |
return -1; |
| } |
} |
| if (!strcasecmp(str, "SCRIPT")) { | if (!strcasecmp(str, "SCRIPT") && getenv("SUX_USER")) { |
| mode = 1; |
mode = 1; |
| if (setUIDGID(flg, AIT_GET_STR(&proc.proc_name)) == -1) | if (setUIDGID(flg, NULL) == -1) |
| return -1; |
return -1; |
| } else if (!strcasecmp(str, "FILE")) { |
} else if (!strcasecmp(str, "FILE")) { |
| mode = 2; |
mode = 2; |
| if (setUIDGID(flg, AIT_GET_STR(&proc.proc_name)) == -1) |
if (setUIDGID(flg, AIT_GET_STR(&proc.proc_name)) == -1) |
| return -1; |
return -1; |
| } else if (!strcasecmp(str, "DIR") && | } else if (!strcasecmp(str, "DIR")) { |
| (str = cfg_getAttribute(&cfg, "global", "directory"))) { | |
| mode = 3; |
mode = 3; |
| if (!(flg & SUX_GET_DIR)) | str = AIT_GET_STR(&proc.proc_dir) ? AIT_GET_STR(&proc.proc_dir) : "."; |
| AIT_SET_STR(&proc.proc_dir, str); | if (setUIDGID(flg, str) == -1) |
| |
| if (setUIDGID(flg, AIT_GET_STR(&proc.proc_dir)) == -1) | |
| return -1; |
return -1; |
| } else { |
} else { |
| Err("Error:: Unknown mode %s", str); |
Err("Error:: Unknown mode %s", str); |
|
Line 200 LoadCfgData(char flg)
|
Line 213 LoadCfgData(char flg)
|
| ELIBERR(cfg); |
ELIBERR(cfg); |
| return -1; |
return -1; |
| case 0: |
case 0: |
| cfg_loadAttribute(&cfg, "associate", "default", &proc.proc_cmd, DEFAULT_CMD); | cfg_loadAttribute(&cfg, "associate", "default", |
| | &proc.proc_cmd, DEFAULT_CMD); |
| } |
} |
| } else |
} else |
| AIT_SET_STR(&proc.proc_cmd, DEFAULT_CMD); |
AIT_SET_STR(&proc.proc_cmd, DEFAULT_CMD); |
|
Line 246 Run(char **argv, char flg)
|
Line 260 Run(char **argv, char flg)
|
| } |
} |
| array_Destroy(&acmd); |
array_Destroy(&acmd); |
| |
|
| if (SetClass()) { | if (setClassDir()) { |
| if (args) |
if (args) |
| e_free(args); |
e_free(args); |
| return -1; |
return -1; |
| } |
} |
| |
|
| if (flg & SUX_GET_FORCE) { |
if (flg & SUX_GET_FORCE) { |
| /* |
|
| if (setegid(AIT_GET_I16(&proc.proc_gid)) == -1) |
if (setegid(AIT_GET_I16(&proc.proc_gid)) == -1) |
| goto err; |
goto err; |
| if (seteuid(AIT_GET_I16(&proc.proc_uid)) == -1) |
if (seteuid(AIT_GET_I16(&proc.proc_uid)) == -1) |
| goto err; |
goto err; |
| */ |
|
| if (setpriority(PRIO_PROCESS, 0, AIT_GET_I32(&proc.proc_prio)) == -1) |
if (setpriority(PRIO_PROCESS, 0, AIT_GET_I32(&proc.proc_prio)) == -1) |
| goto err; |
goto err; |
| } |
} |