diff options
author | kpfleming <kpfleming@f38db490-d61c-443f-a65b-d21fe96a405b> | 2005-08-23 01:37:26 +0000 |
---|---|---|
committer | kpfleming <kpfleming@f38db490-d61c-443f-a65b-d21fe96a405b> | 2005-08-23 01:37:26 +0000 |
commit | faa970c9026119f8fb77e671f6182449b52d1fd8 (patch) | |
tree | aecc335f780a511f2d7b29973b43770e1cd179c2 | |
parent | 9413babc1d0e0d3effd70cd7959e0f6b65346959 (diff) |
don't try to change run priority, EUID or EGID on restart if they were already set (issue #4734 with minor mods)
git-svn-id: http://svn.digium.com/svn/asterisk/trunk@6369 f38db490-d61c-443f-a65b-d21fe96a405b
-rwxr-xr-x | asterisk.c | 13 |
1 files changed, 10 insertions, 3 deletions
diff --git a/asterisk.c b/asterisk.c index fe2861533..d50499dcf 100755 --- a/asterisk.c +++ b/asterisk.c @@ -1815,6 +1815,7 @@ int main(int argc, char *argv[]) FILE *f; sigset_t sigs; int num; + int is_child_of_nonroot=0; char *buf; char *runuser=NULL, *rungroup=NULL; @@ -1840,6 +1841,11 @@ int main(int argc, char *argv[]) callerid_init(); ast_utils_init(); tdd_init(); + /* When Asterisk restarts after it has dropped the root privileges, + * it can't issue setuid(), setgid(), setgroups() or set_priority() + * */ + if (getenv("ASTERISK_ALREADY_NONROOT")) + is_child_of_nonroot=1; if (getenv("HOME")) snprintf(filename, sizeof(filename), "%s/.asterisk_history", getenv("HOME")); /* Check if we're root */ @@ -1940,11 +1946,11 @@ int main(int argc, char *argv[]) ast_verbose("[ Reading Master Configuration ]"); ast_readconfig(); - if (ast_set_priority(option_highpriority)) { + if (!is_child_of_nonroot && ast_set_priority(option_highpriority)) { exit(1); } - if (rungroup) { + if (!is_child_of_nonroot && rungroup) { struct group *gr; gr = getgrnam(rungroup); if (!gr) { @@ -1959,7 +1965,7 @@ int main(int argc, char *argv[]) ast_verbose("Running as group '%s'\n", rungroup); } - if (runuser) { + if (!is_child_of_nonroot && runuser) { struct passwd *pw; pw = getpwnam(runuser); if (!pw) { @@ -1970,6 +1976,7 @@ int main(int argc, char *argv[]) ast_log(LOG_WARNING, "Unable to setuid to %d (%s)\n", pw->pw_uid, runuser); exit(1); } + setenv("ASTERISK_ALREADY_NONROOT","yes",1); if (option_verbose) ast_verbose("Running as user '%s'\n", runuser); } |