From: Tobias Heider Subject: proc.c: more syncing To: tech@openbsd.org Cc: florian@openbsd.org, kn@openbsd.org Date: Mon, 8 Apr 2024 15:34:36 +0200 Like in relayd, we can also drop a few dup2()s, setsid() and setpgid() that should be taken care of by calling daemon() earlier in proc_init(). See relayd/proc.c v1.43 ok? Index: sbin/iked/proc.c =================================================================== RCS file: /cvs/src/sbin/iked/proc.c,v diff -u -p -r1.43 proc.c --- sbin/iked/proc.c 8 Apr 2024 12:50:05 -0000 1.43 +++ sbin/iked/proc.c 8 Apr 2024 13:24:23 -0000 @@ -39,7 +39,7 @@ enum privsep_procid privsep_process; void proc_exec(struct privsep *, struct privsep_proc *, unsigned int, int, - int, char **); + char **); void proc_setup(struct privsep *, struct privsep_proc *, unsigned int); void proc_open(struct privsep *, int, int); void proc_accept(struct privsep *, int, enum privsep_procid, @@ -70,7 +70,7 @@ proc_getid(struct privsep_proc *procs, u void proc_exec(struct privsep *ps, struct privsep_proc *procs, unsigned int nproc, - int debug, int argc, char **argv) + int argc, char **argv) { unsigned int proc, nargc, i, proc_i; char **nargv; @@ -119,10 +119,6 @@ proc_exec(struct privsep *ps, struct pri fatal("%s: fork", __func__); break; case 0: - /* First create a new session */ - if (setsid() == -1) - fatal("setsid"); - /* Prepare parent socket. */ if (fd != PROC_PARENT_SOCK_FILENO) { if (dup2(fd, PROC_PARENT_SOCK_FILENO) @@ -131,16 +127,6 @@ 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; @@ -260,7 +246,7 @@ proc_init(struct privsep *ps, struct pri } /* Engage! */ - proc_exec(ps, procs, nproc, debug, argc, argv); + proc_exec(ps, procs, nproc, argc, argv); return; } Index: usr.sbin/httpd/proc.c =================================================================== RCS file: /cvs/src/usr.sbin/httpd/proc.c,v diff -u -p -r1.44 proc.c --- usr.sbin/httpd/proc.c 8 Apr 2024 12:45:18 -0000 1.44 +++ usr.sbin/httpd/proc.c 8 Apr 2024 13:24:23 -0000 @@ -37,7 +37,7 @@ #include "httpd.h" void proc_exec(struct privsep *, struct privsep_proc *, unsigned int, int, - int, char **); + char **); void proc_setup(struct privsep *, struct privsep_proc *, unsigned int); void proc_open(struct privsep *, int, int); void proc_accept(struct privsep *, int, enum privsep_procid, @@ -68,7 +68,7 @@ proc_getid(struct privsep_proc *procs, u void proc_exec(struct privsep *ps, struct privsep_proc *procs, unsigned int nproc, - int debug, int argc, char **argv) + int argc, char **argv) { unsigned int proc, nargc, i, proc_i; char **nargv; @@ -117,10 +117,6 @@ proc_exec(struct privsep *ps, struct pri fatal("%s: fork", __func__); break; case 0: - /* First create a new session */ - if (setsid() == -1) - fatal("setsid"); - /* Prepare parent socket. */ if (fd != PROC_PARENT_SOCK_FILENO) { if (dup2(fd, PROC_PARENT_SOCK_FILENO) @@ -129,16 +125,6 @@ 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; @@ -232,7 +218,7 @@ proc_init(struct privsep *ps, struct pri } /* Engage! */ - proc_exec(ps, procs, nproc, debug, argc, argv); + proc_exec(ps, procs, nproc, argc, argv); return; } @@ -525,9 +511,6 @@ proc_run(struct privsep *ps, struct priv struct control_sock *rcs; log_procinit(p->p_title); - - /* Set the process group of the current process */ - setpgid(0, 0); if (p->p_id == PROC_CONTROL && ps->ps_instance == 0) { if (control_init(ps, &ps->ps_csock) == -1) Index: usr.sbin/vmd/proc.c =================================================================== RCS file: /cvs/src/usr.sbin/vmd/proc.c,v diff -u -p -r1.24 proc.c --- usr.sbin/vmd/proc.c 8 Apr 2024 12:48:26 -0000 1.24 +++ usr.sbin/vmd/proc.c 8 Apr 2024 13:24:23 -0000 @@ -37,7 +37,7 @@ #include "proc.h" void proc_exec(struct privsep *, struct privsep_proc *, unsigned int, int, - int, char **); + char **); void proc_setup(struct privsep *, struct privsep_proc *, unsigned int); void proc_open(struct privsep *, int, int); void proc_accept(struct privsep *, int, enum privsep_procid, @@ -68,7 +68,7 @@ proc_getid(struct privsep_proc *procs, u void proc_exec(struct privsep *ps, struct privsep_proc *procs, unsigned int nproc, - int debug, int argc, char **argv) + int argc, char **argv) { unsigned int proc, nargc, i, proc_i; char **nargv; @@ -117,10 +117,6 @@ proc_exec(struct privsep *ps, struct pri fatal("%s: fork", __func__); break; case 0: - /* First create a new session */ - if (setsid() == -1) - fatal("setsid"); - /* Prepare parent socket. */ if (fd != PROC_PARENT_SOCK_FILENO) { if (dup2(fd, PROC_PARENT_SOCK_FILENO) @@ -129,16 +125,6 @@ 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; @@ -232,7 +218,7 @@ proc_init(struct privsep *ps, struct pri } /* Engage! */ - proc_exec(ps, procs, nproc, debug, argc, argv); + proc_exec(ps, procs, nproc, argc, argv); return; } @@ -518,9 +504,6 @@ proc_run(struct privsep *ps, struct priv struct control_sock *rcs; log_procinit("%s", p->p_title); - - /* Set the process group of the current process */ - setpgid(0, 0); if (p->p_id == PROC_CONTROL && ps->ps_instance == 0) { if (control_init(ps, &ps->ps_csock) == -1) Index: usr.sbin/snmpd/proc.c =================================================================== RCS file: /cvs/src/usr.sbin/snmpd/proc.c,v diff -u -p -r1.31 proc.c --- usr.sbin/snmpd/proc.c 8 Apr 2024 13:18:54 -0000 1.31 +++ usr.sbin/snmpd/proc.c 8 Apr 2024 13:24:23 -0000 @@ -37,7 +37,7 @@ #include "snmpd.h" void proc_exec(struct privsep *, struct privsep_proc *, unsigned int, int, - int, char **); + char **); void proc_setup(struct privsep *, struct privsep_proc *, unsigned int); void proc_open(struct privsep *, int, int); void proc_accept(struct privsep *, int, enum privsep_procid, @@ -68,7 +68,7 @@ proc_getid(struct privsep_proc *procs, u void proc_exec(struct privsep *ps, struct privsep_proc *procs, unsigned int nproc, - int debug, int argc, char **argv) + int argc, char **argv) { unsigned int proc, nargc, i, proc_i; char **nargv; @@ -117,10 +117,6 @@ proc_exec(struct privsep *ps, struct pri fatal("%s: fork", __func__); break; case 0: - /* First create a new session */ - if (setsid() == -1) - fatal("setsid"); - /* Prepare parent socket. */ if (fd != PROC_PARENT_SOCK_FILENO) { if (dup2(fd, PROC_PARENT_SOCK_FILENO) @@ -129,16 +125,6 @@ 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; @@ -232,7 +218,7 @@ proc_init(struct privsep *ps, struct pri } /* Engage! */ - proc_exec(ps, procs, nproc, debug, argc, argv); + proc_exec(ps, procs, nproc, argc, argv); return; }