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)
>> 
> 

Reply via email to