Index | Thread | Search

From:
Tobias Heider <tobias.heider@stusta.de>
Subject:
httpd: don't orphan children
To:
tech@openbsd.org
Date:
Thu, 4 Apr 2024 19:05:43 +0200

Download raw body.

Thread
Calling daemon() after proc_init() will detach the children from the
parent process. Also return errno if daemon fails.

See ps auxf:

root     70446  0.0  0.1  1964  2360 ??  Ip     Wed11PM    0:00.02 - /usr/sbin/httpd
www      22440  0.0  0.1  2192  4704 ??  Ipc    Wed11PM    0:02.88 - httpd: server (httpd)
www      27514  0.0  0.1  1664  2940 ??  Ipc    Wed11PM    0:00.02 - httpd: logger (httpd)

which should be:

root     43158  0.0  0.1  1964  2344 ??  Ip      6:58PM    0:00.01 - /usr/sbin/httpd
www      64572  0.0  0.1  1932  4280 ??  Ipc     6:58PM    0:00.01 |-- httpd: server (h
www      16700  0.0  0.1  1660  2804 ??  Ipc     6:58PM    0:00.01 `-- httpd: logger (h

patch syncs what iked does.

ok?

diff /home/user/got/co/src
commit - 3b374a56007af68fb6fd1926b370d0a3e8d6dbca
path + /home/user/got/co/src
blob - af863cf2710dadce01a85cb618fe5bfbb91b9adc
file + usr.sbin/httpd/httpd.c
--- usr.sbin/httpd/httpd.c
+++ usr.sbin/httpd/httpd.c
@@ -220,8 +220,6 @@ main(int argc, char *argv[])
 	proc_init(ps, procs, nitems(procs), debug, argc0, argv, proc_id);
 
 	log_procinit("parent");
-	if (!debug && daemon(1, 0) == -1)
-		err(1, "failed to daemonize");
 
 	if (ps->ps_noaction == 0)
 		log_info("startup");
blob - e8b08dd23175817590214abb7b433caf541e215d
file + usr.sbin/httpd/proc.c
--- usr.sbin/httpd/proc.c
+++ usr.sbin/httpd/proc.c
@@ -203,6 +203,8 @@ proc_init(struct privsep *ps, struct privsep_proc *pro
 
 	if (proc_id == PROC_PARENT) {
 		privsep_process = PROC_PARENT;
+		if (!debug && daemon(1, 0) == -1)
+			fatal("failed to daemonize");
 		proc_setup(ps, procs, nproc);
 
 		/*