* Dropping root privileges
* returns 0 on success, 1 on error
*/
-int drop_root_privileges(void)
+int drop_root_privileges(uid_t appUid, gid_t appGid)
{
if (getuid() == 0) {
/* process is running as root, drop privileges */
- if (setgid(APP_GID) != 0)
+ if (setgid(appGid) != 0)
return 1;
- if (setuid(APP_UID) != 0)
+ if (setuid(appUid) != 0)
return 1;
}
uid_t uid = getuid();
- if (uid == APP_UID)
+ if (uid == appUid)
return 0;
return 1;
{
// get group ID by group name
group *gr = getgrnam(group_name);
- RUNNER_ASSERT_ERRNO_MSG(gr != NULL, "getgrnam failed on '" << group_name << "' group");
+ RUNNER_ASSERT_ERRNO_MSG(gr != nullptr, "getgrnam failed on '" << group_name << "' group");
const gid_t new_group_id = gr->gr_gid;
// get number of groups that the current process belongs to
- int ngroups = getgroups(0, NULL);
+ int ngroups = getgroups(0, nullptr);
//allocate groups table + space for new group entry
std::vector<gid_t> groups(ngroups + 1);
{
// get group ID by group name
group *gr = getgrnam(group_name);
- RUNNER_ASSERT_ERRNO_MSG(gr != NULL, "getgrnam failed on '" << group_name << "' group");
+ RUNNER_ASSERT_ERRNO_MSG(gr != nullptr, "getgrnam failed on '" << group_name << "' group");
const gid_t new_group_id = gr->gr_gid;
- int ngroups = getgroups(0, NULL);
+ int ngroups = getgroups(0, nullptr);
std::vector<gid_t> groups(ngroups);
getgroups(ngroups, groups.data());