changeset 6519:66e5f514355e HEAD

Login processes started by inetd aren't ours, don't treat them as such.
author Timo Sirainen <tss@iki.fi>
date Sun, 30 Sep 2007 18:03:18 +0300
parents 9b71007b70c7
children 745d5bb908f4
files src/master/login-process.c
diffstat 1 files changed, 7 insertions(+), 5 deletions(-) [+]
line wrap: on
line diff
--- a/src/master/login-process.c	Sun Sep 30 17:51:25 2007 +0300
+++ b/src/master/login-process.c	Sun Sep 30 18:03:18 2007 +0300
@@ -435,7 +435,8 @@
 }
 
 static struct login_process *
-login_process_new(struct login_group *group, pid_t pid, int fd)
+login_process_new(struct login_group *group, pid_t pid, int fd,
+		  bool inetd_child)
 {
 	struct login_process *p;
 
@@ -447,10 +448,12 @@
 	p->refcount = 2; /* once for fd close, another for process exit */
 	p->pid = pid;
 	p->fd = fd;
+	p->inetd_child = inetd_child;
 	p->io = io_add(fd, IO_READ, login_process_input, p);
 	p->output = o_stream_create_fd(fd, sizeof(struct master_login_reply)*10,
 				       FALSE);
-	child_process_add(pid, &p->process);
+	if (!inetd_child)
+		child_process_add(pid, &p->process);
 
 	p->state = LOGIN_STATE_LISTENING;
 
@@ -627,7 +630,7 @@
 
 		net_set_nonblock(fd[0], TRUE);
 		fd_close_on_exec(fd[0], TRUE);
-		(void)login_process_new(group, pid, fd[0]);
+		(void)login_process_new(group, pid, fd[0], FALSE);
 		(void)close(fd[1]);
 		(void)close(log_fd);
 		return pid;
@@ -907,9 +910,8 @@
 		net_set_nonblock(fd, TRUE);
 		fd_close_on_exec(fd, TRUE);
 
-		p = login_process_new(NULL, ++login_pid_counter, fd);
+		p = login_process_new(NULL, ++login_pid_counter, fd, TRUE);
 		p->initialized = TRUE;
-		p->inetd_child = TRUE;
 	}
 }