Hi, I already gave my OK for relayd but asked to adjust all proc.c instances.
OK reyk@ > Am 09.09.2018 um 23:47 schrieb Mike Larkin <[email protected]>: > >> On Sun, Sep 09, 2018 at 11:45:07PM +0200, Alexander Bluhm wrote: >> Hi, >> >> Like the other proc.c daemons, vmd(8) children do not detach from >> the terminal properly. >> >> ok? >> > > Reads ok to me but reyk@ should approve. > >> bluhm >> >> Index: src/usr.sbin/vmd/proc.c >> =================================================================== >> RCS file: /data/mirror/openbsd/cvs/src/usr.sbin/vmd/proc.c,v >> retrieving revision 1.17 >> diff -u -p -r1.17 proc.c >> --- src/usr.sbin/vmd/proc.c 5 Aug 2018 08:20:54 -0000 1.17 >> +++ src/usr.sbin/vmd/proc.c 9 Sep 2018 21:26:32 -0000 >> @@ -29,13 +29,14 @@ >> #include <string.h> >> #include <errno.h> >> #include <signal.h> >> +#include <paths.h> >> #include <pwd.h> >> #include <event.h> >> #include <imsg.h> >> >> #include "proc.h" >> >> -void proc_exec(struct privsep *, struct privsep_proc *, unsigned int, >> +void proc_exec(struct privsep *, struct privsep_proc *, unsigned int, >> int, >> int, char **); >> void proc_setup(struct privsep *, struct privsep_proc *, unsigned int); >> void proc_open(struct privsep *, int, int); >> @@ -80,7 +81,7 @@ proc_getid(struct privsep_proc *procs, u >> >> void >> proc_exec(struct privsep *ps, struct privsep_proc *procs, unsigned int nproc, >> - int argc, char **argv) >> + int debug, int argc, char **argv) >> { >> unsigned int proc, nargc, i, proc_i; >> char **nargv; >> @@ -141,6 +142,16 @@ proc_exec(struct privsep *ps, struct pri >> } else if (fcntl(fd, F_SETFD, 0) == -1) >> fatal("fcntl"); >> >> + /* Daemons detach from terminal. */ >> + if (!debug && (fd = >> + open(_PATH_DEVNULL, O_RDWR, 0)) != -1) { >> + (void)dup2(fd, STDIN_FILENO); >> + (void)dup2(fd, STDOUT_FILENO); >> + (void)dup2(fd, STDERR_FILENO); >> + if (fd > 2) >> + (void)close(fd); >> + } >> + >> execvp(argv[0], nargv); >> fatal("%s: execvp", __func__); >> break; >> @@ -191,7 +202,7 @@ proc_connect(struct privsep *ps) >> >> void >> proc_init(struct privsep *ps, struct privsep_proc *procs, unsigned int nproc, >> - int argc, char **argv, enum privsep_procid proc_id) >> + int debug, int argc, char **argv, enum privsep_procid proc_id) >> { >> struct privsep_proc *p = NULL; >> struct privsep_pipes *pa, *pb; >> @@ -231,7 +242,7 @@ proc_init(struct privsep *ps, struct pri >> } >> >> /* Engage! */ >> - proc_exec(ps, procs, nproc, argc, argv); >> + proc_exec(ps, procs, nproc, debug, argc, argv); >> return; >> } >> >> Index: src/usr.sbin/vmd/proc.h >> =================================================================== >> RCS file: /data/mirror/openbsd/cvs/src/usr.sbin/vmd/proc.h,v >> retrieving revision 1.15 >> diff -u -p -r1.15 proc.h >> --- src/usr.sbin/vmd/proc.h 5 Aug 2018 08:20:54 -0000 1.15 >> +++ src/usr.sbin/vmd/proc.h 9 Sep 2018 21:15:50 -0000 >> @@ -156,7 +156,7 @@ struct privsep_fd { >> #define PROC_MAX_INSTANCES 32 >> >> /* proc.c */ >> -void proc_init(struct privsep *, struct privsep_proc *, unsigned int, >> +void proc_init(struct privsep *, struct privsep_proc *, unsigned int, >> int, >> int, char **, enum privsep_procid); >> void proc_kill(struct privsep *); >> void proc_connect(struct privsep *ps); >> Index: src/usr.sbin/vmd/vmd.c >> =================================================================== >> RCS file: /data/mirror/openbsd/cvs/src/usr.sbin/vmd/vmd.c,v >> retrieving revision 1.98 >> diff -u -p -r1.98 vmd.c >> --- src/usr.sbin/vmd/vmd.c 15 Jul 2018 14:36:54 -0000 1.98 >> +++ src/usr.sbin/vmd/vmd.c 9 Sep 2018 21:25:57 -0000 >> @@ -792,7 +792,8 @@ main(int argc, char **argv) >> ps->ps_title[proc_id] = title; >> >> /* only the parent returns */ >> - proc_init(ps, procs, nitems(procs), argc0, argv, proc_id); >> + proc_init(ps, procs, nitems(procs), env->vmd_debug, argc0, argv, >> + proc_id); >> >> log_procinit("parent"); >> if (!env->vmd_debug && daemon(0, 0) == -1) >> >
