summaryrefslogtreecommitdiff
path: root/ldpd/ldpd.c
diff options
context:
space:
mode:
Diffstat (limited to 'ldpd/ldpd.c')
-rw-r--r--ldpd/ldpd.c19
1 files changed, 15 insertions, 4 deletions
diff --git a/ldpd/ldpd.c b/ldpd/ldpd.c
index 0f9f055d02..818d744207 100644
--- a/ldpd/ldpd.c
+++ b/ldpd/ldpd.c
@@ -308,9 +308,15 @@ main(int argc, char *argv[])
exit(1);
}
- if (lflag || eflag)
- openzlog(ldpd_di.progname, "LDP", 0,
- LOG_CONS | LOG_NDELAY | LOG_PID, LOG_DAEMON);
+ if (lflag || eflag) {
+ struct zprivs_ids_t ids;
+
+ zprivs_preinit(&ldpd_privs);
+ zprivs_get_ids(&ids);
+
+ zlog_init(ldpd_di.progname, "LDP", 0,
+ ids.uid_normal, ids.gid_normal);
+ }
if (lflag)
lde();
else if (eflag)
@@ -486,7 +492,7 @@ ldpd_shutdown(void)
static pid_t
start_child(enum ldpd_process p, char *argv0, int fd_async, int fd_sync)
{
- char *argv[3];
+ char *argv[7];
int argc = 0, nullfd;
pid_t pid;
@@ -529,6 +535,11 @@ start_child(enum ldpd_process p, char *argv0, int fd_async, int fd_sync)
argv[argc++] = (char *)"-E";
break;
}
+
+ argv[argc++] = (char *)"-u";
+ argv[argc++] = (char *)ldpd_privs.user;
+ argv[argc++] = (char *)"-g";
+ argv[argc++] = (char *)ldpd_privs.group;
argv[argc++] = NULL;
execvp(argv0, argv);