+void daemon_switch_ugid(struct daemon_params *dp)
+{
+ if (dp->want_setgid && setresgid(dp->run_as_gid, dp->run_as_gid, dp->run_as_gid) < 0)
+ die("Cannot set GID to %d: %m", (int) dp->run_as_gid);
+ if (dp->want_setgid > 1 && initgroups(dp->run_as_user, dp->run_as_gid) < 0)
+ die("Cannot initialize groups: %m");
+ if (dp->want_setuid && setresuid(dp->run_as_uid, dp->run_as_uid, dp->run_as_uid) < 0)
+ die("Cannot set UID to %d: %m", (int) dp->run_as_uid);
+}
+
+void
+daemon_init(struct daemon_params *dp)