version 1.5, 2013/04/10 00:04:11
|
version 1.6, 2015/06/17 14:14:17
|
Line 26 Log(int lvl, const char *fmt, ...)
|
Line 26 Log(int lvl, const char *fmt, ...)
|
vfprintf(lf, fmt, lst); |
vfprintf(lf, fmt, lst); |
va_end(lst); |
va_end(lst); |
fprintf(lf, "\n"); |
fprintf(lf, "\n"); |
vsyslog(LOG_WARNING, fmt, cp); | vsyslog(LOG_INFO, fmt, cp); |
va_end(cp); |
va_end(cp); |
} |
} |
} |
} |
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 UID:GID=%d:%d Prio=%d Class=%s Name=%s Dir=%s Cmd=%s " | Log(1, "%s:: uid:gid=%d:%d UID:GID=%d:%d Prio=%d Class=%s Name=%s Dir=%s Cmd=%s " |
"Script=%s From=%s:%s Get=%s", txt ? txt : __func__, |
"Script=%s From=%s:%s Get=%s", txt ? txt : __func__, |
geteuid(), getegid(), AIT_GET_I16(&proc.proc_uid), |
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), |
Line 96 Usage()
|
Line 96 Usage()
|
{ |
{ |
printf( " -= suX =- suExecutor designed for web based applicaions\n" |
printf( " -= suX =- suExecutor designed for web based applicaions\n" |
"(C)`11 AITNET ltd - Sofia/Bulgaria - <office@aitnet.org>\n\n" |
"(C)`11 AITNET ltd - Sofia/Bulgaria - <office@aitnet.org>\n\n" |
" Syntax: %s [options] <program> [arguments]\n" | " Syntax: %s [options] <program|-> [arguments]\n" |
"\t-u <user>\t\t\tUser for suID\n" |
"\t-u <user>\t\t\tUser for suID\n" |
"\t-g <group>\t\t\tGroup for suID\n" |
"\t-g <group>\t\t\tGroup for suID\n" |
"\t-p <priority (-20..20)>\t\tExecute with priority\n" |
"\t-p <priority (-20..20)>\t\tExecute with priority\n" |
Line 124 setUIDGID(char flg, const char *name)
|
Line 124 setUIDGID(char flg, const char *name)
|
uid = sb.st_uid; |
uid = sb.st_uid; |
gid = sb.st_gid; |
gid = sb.st_gid; |
} else { |
} else { |
pass = getpwnam(getenv("SUX_USER")); | pass = getpwnam(getenv("SUX_USER") ? getenv("SUX_USER") : DEFAULT_SUX_USER); |
if (!pass) { |
if (!pass) { |
Err("Error:: User %s not found", getenv("SUX_USER")); |
Err("Error:: User %s not found", getenv("SUX_USER")); |
endpwent(); |
endpwent(); |
Line 180 LoadCfgData(char flg)
|
Line 180 LoadCfgData(char flg)
|
Err("Error:: Unknown mode ..."); |
Err("Error:: Unknown mode ..."); |
return -1; |
return -1; |
} |
} |
if (!strcasecmp(str, "SCRIPT") && getenv("SUX_USER")) { | if (!strcasecmp(str, "SCRIPT")) { |
mode = 1; |
mode = 1; |
if (setUIDGID(flg, NULL) == -1) | if (setUIDGID(flg, (getenv("SUX_USER") ? NULL : getenv("PATH_TRANSLATED"))) == -1) |
return -1; |
return -1; |
} else if (!strcasecmp(str, "FILE")) { |
} else if (!strcasecmp(str, "FILE")) { |
mode = 2; |
mode = 2; |
Line 238 Run(char **argv, char flg)
|
Line 238 Run(char **argv, char flg)
|
if (!(aarg = array_From((const char***) &argv, 0))) { |
if (!(aarg = array_From((const char***) &argv, 0))) { |
array_Destroy(&acmd); |
array_Destroy(&acmd); |
return -1; |
return -1; |
} else if (*array(acmd, 0, char*) == '!') { | } |
| /* '!' exclude associated wrapper aka direct args execution */ |
| if (*array(acmd, 0, char*) == '!') { |
if (array_Grow(acmd, 0, 0)) { |
if (array_Grow(acmd, 0, 0)) { |
array_Destroy(&aarg); |
array_Destroy(&aarg); |
array_Destroy(&acmd); |
array_Destroy(&acmd); |
Line 248 Run(char **argv, char flg)
|
Line 250 Run(char **argv, char flg)
|
} else |
} else |
cmd = array(acmd, 0, char*); |
cmd = array(acmd, 0, char*); |
|
|
if (array_Concat(acmd, aarg) == -1) { | if (!(flg & SUX_GET_STDIN) && array_Concat(acmd, aarg) == -1) { |
array_Destroy(&aarg); |
array_Destroy(&aarg); |
array_Destroy(&acmd); |
array_Destroy(&acmd); |
return -1; |
return -1; |
Line 275 Run(char **argv, char flg)
|
Line 277 Run(char **argv, char flg)
|
goto err; |
goto err; |
} |
} |
|
|
DumpProc(__func__); |
|
|
|
EVERBS(3) { |
EVERBS(3) { |
char **el = args - 1; |
char **el = args - 1; |
while (*++el) |
while (*++el) |
Log(3, "args: %s", *el); |
Log(3, "args: %s", *el); |
} |
} |
|
|
|
DumpProc(__func__); |
|
|
fflush(lf); |
fflush(lf); |
|
|
execve(cmd, args, environ); |
execve(cmd, args, environ); |
Line 388 main(int argc, char **argv)
|
Line 390 main(int argc, char **argv)
|
return 1; |
return 1; |
} else |
} else |
AIT_SET_STR(&proc.proc_name, str); |
AIT_SET_STR(&proc.proc_name, str); |
} else | } else if (strcmp(*argv, "-")) |
AIT_SET_STR(&proc.proc_name, *argv); |
AIT_SET_STR(&proc.proc_name, *argv); |
|
else { |
|
flg |= SUX_GET_STDIN; |
|
AIT_SET_STR(&proc.proc_name, "-.stdin"); /* hack for associate to stdin */ |
|
} |
Log(2, "Try to load config %s", szCfg); |
Log(2, "Try to load config %s", szCfg); |
if (cfgLoadConfig(szCfg, &cfg)) { |
if (cfgLoadConfig(szCfg, &cfg)) { |
ELIBERR(cfg); |
ELIBERR(cfg); |