From fc179fb0c0fbb0a5631764f538f590d1468ed183 Mon Sep 17 00:00:00 2001 From: Alexandre Ratchov Date: Wed, 9 Dec 2015 11:23:55 +0100 Subject: [PATCH] inline privdrop() --- sndiod/sndiod.c | 35 ++++++++++++----------------------- 1 file changed, 12 insertions(+), 23 deletions(-) diff --git a/sndiod/sndiod.c b/sndiod/sndiod.c index 2ece5a9..19a32f5 100644 --- a/sndiod/sndiod.c +++ b/sndiod/sndiod.c @@ -95,7 +95,6 @@ unsigned int opt_mode(void); void getbasepath(char *, size_t); void setsig(void); void unsetsig(void); -void privdrop(void); struct dev *mkdev(char *, struct aparams *, int, int, int, int, int, int); struct port *mkport(char *, int); @@ -279,21 +278,6 @@ getbasepath(char *base, size_t size) errx(1, "%s has wrong permissions", base); } -void -privdrop(void) -{ - struct passwd *pw; - - if ((pw = getpwnam(SNDIO_USER)) == NULL) - errx(1, "unknown user %s", SNDIO_USER); - if (setpriority(PRIO_PROCESS, 0, SNDIO_PRIO) < 0) - err(1, "setpriority"); - if (setgroups(1, &pw->pw_gid) || - setresgid(pw->pw_gid, pw->pw_gid, pw->pw_gid) || - setresuid(pw->pw_uid, pw->pw_uid, pw->pw_uid)) - err(1, "cannot drop privileges"); -} - struct dev * mkdev(char *path, struct aparams *par, int mode, int bufsz, int round, int rate, int hold, int autovol) @@ -361,6 +345,7 @@ main(int argc, char **argv) struct dev *d; struct port *p; struct listen *l; + struct passwd *pw; atexit(log_flush); @@ -494,8 +479,16 @@ main(int argc, char **argv) getbasepath(base, sizeof(base)); snprintf(path, SOCKPATH_MAX, "%s/" SOCKPATH_FILE "%u", base, unit); listen_new_un(path); - if (geteuid() == 0) - privdrop(); + if (geteuid() == 0) { + if ((pw = getpwnam(SNDIO_USER)) == NULL) + errx(1, "unknown user %s", SNDIO_USER); + if (setpriority(PRIO_PROCESS, 0, SNDIO_PRIO) < 0) + err(1, "setpriority"); + if (setgroups(1, &pw->pw_gid) || + setresgid(pw->pw_gid, pw->pw_gid, pw->pw_gid) || + setresuid(pw->pw_uid, pw->pw_uid, pw->pw_uid)) + err(1, "cannot drop privileges"); + } midi_init(); for (p = port_list; p != NULL; p = p->next) { if (!port_init(p)) @@ -515,10 +508,6 @@ main(int argc, char **argv) if (daemon(0, 0) < 0) err(1, "daemon"); } - - /* - * Loop, start audio. - */ for (;;) { if (quit_flag) break; @@ -542,8 +531,8 @@ main(int argc, char **argv) dev_del(dev_list); while (port_list) port_del(port_list); - filelist_done(); rmdir(base); + filelist_done(); unsetsig(); return 0; }