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