char opbx_config_OPBX_RUN_GROUP[OPBX_CONFIG_MAX_PATH];
..
}
v = opbx_variable_browse(cfg, "general");
while (v) {
if (!strcasecmp(v->name, "opbxrunuser")) {
opbx_copy_string(opbx_config_OPBX_RUN_USER, v->value, sizeof(opbx_config_OPBX_RUN_USER));
} else if (!strcasecmp(v->name, "opbxrungroup")) {
opbx_copy_string(opbx_config_OPBX_RUN_GROUP, v->value, sizeof(opbx_config_OPBX_RUN_GROUP));
}
v = v->next;
}
....
if (!rungroup)
rungroup = opbx_config_OPBX_RUN_GROUP;
if (!is_child_of_nonroot && rungroup) {
struct group *gr;
gr = getgrnam(rungroup);
if (!gr) {
opbx_log(LOG_WARNING, "No such group '%s'!\n", rungroup);
}
if (setregid(gr->gr_gid, gr->gr_gid)) {
opbx_log(LOG_WARNING, "Unable to setgid to %d (%s)\n", gr->gr_gid, rungroup);
exit(1);
}
if (option_verbose)
opbx_verbose("Running as group '%s'\n", rungroup);
}
....
if (!runuser)
runuser = opbx_config_OPBX_RUN_USER;
if (!is_child_of_nonroot && runuser) {
struct passwd *pw;
pw = getpwnam(runuser);
if (!pw) {
opbx_log(LOG_WARNING, "No such user '%s'!\n", runuser);
exit(1);
}
if (setreuid(pw->pw_uid, pw->pw_uid)) {
opbx_log(LOG_WARNING, "Unable to setuid to %d (%s)\n", pw->pw_uid, runuser);
exit(1);
}
setenv("OPENPBX_ALREADY_NONROOT","yes",1);
if (option_verbose)
opbx_verbose("Running as user '%s'\n", runuser);
}
.....
if (!is_child_of_nonroot && rungroup) {
struct group *gr;
gr = getgrnam(rungroup);
if (!gr) {
opbx_log(LOG_WARNING, "No such group '%s'!\n", rungroup);
}
if (setregid(gr->gr_gid, gr->gr_gid)) {
opbx_log(LOG_WARNING, "Unable to setgid to %d (%s)\n", gr->gr_gid, rungroup);
exit(1);
}
if (option_verbose)
opbx_verbose("Running as group '%s'\n", rungroup);
}