inline privdrop()

This commit is contained in:
Alexandre Ratchov 2015-12-09 11:23:55 +01:00
parent 91166d3abf
commit fc179fb0c0
1 changed files with 12 additions and 23 deletions

View File

@ -95,7 +95,6 @@ unsigned int opt_mode(void);
void getbasepath(char *, size_t); void getbasepath(char *, size_t);
void setsig(void); void setsig(void);
void unsetsig(void); void unsetsig(void);
void privdrop(void);
struct dev *mkdev(char *, struct aparams *, struct dev *mkdev(char *, struct aparams *,
int, int, int, int, int, int); int, int, int, int, int, int);
struct port *mkport(char *, int); struct port *mkport(char *, int);
@ -279,21 +278,6 @@ getbasepath(char *base, size_t size)
errx(1, "%s has wrong permissions", base); 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 * struct dev *
mkdev(char *path, struct aparams *par, mkdev(char *path, struct aparams *par,
int mode, int bufsz, int round, int rate, int hold, int autovol) 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 dev *d;
struct port *p; struct port *p;
struct listen *l; struct listen *l;
struct passwd *pw;
atexit(log_flush); atexit(log_flush);
@ -494,8 +479,16 @@ main(int argc, char **argv)
getbasepath(base, sizeof(base)); getbasepath(base, sizeof(base));
snprintf(path, SOCKPATH_MAX, "%s/" SOCKPATH_FILE "%u", base, unit); snprintf(path, SOCKPATH_MAX, "%s/" SOCKPATH_FILE "%u", base, unit);
listen_new_un(path); listen_new_un(path);
if (geteuid() == 0) if (geteuid() == 0) {
privdrop(); 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(); midi_init();
for (p = port_list; p != NULL; p = p->next) { for (p = port_list; p != NULL; p = p->next) {
if (!port_init(p)) if (!port_init(p))
@ -515,10 +508,6 @@ main(int argc, char **argv)
if (daemon(0, 0) < 0) if (daemon(0, 0) < 0)
err(1, "daemon"); err(1, "daemon");
} }
/*
* Loop, start audio.
*/
for (;;) { for (;;) {
if (quit_flag) if (quit_flag)
break; break;
@ -542,8 +531,8 @@ main(int argc, char **argv)
dev_del(dev_list); dev_del(dev_list);
while (port_list) while (port_list)
port_del(port_list); port_del(port_list);
filelist_done();
rmdir(base); rmdir(base);
filelist_done();
unsetsig(); unsetsig();
return 0; return 0;
} }