Package: nbd-client
Version: 1:2.9.9-1
Severity: minor
Tags: patch

Hi,

nbd-client doesn't detach itself fully from the terminal when it forks:

# lsof -p 3610
[...]
nbd-clien 3610 root    0u   CHR  136,0              2 /dev/pts/0
nbd-clien 3610 root    1u   CHR  136,0              2 /dev/pts/0
nbd-clien 3610 root    2u   CHR  136,0              2 /dev/pts/0
[...]

The attached patch fixes that.

Cheers, Til
=== nbd-client.c
==================================================================
--- nbd-client.c	(revision 5)
+++ nbd-client.c	(local)
@@ -183,6 +183,8 @@
 	int sdp=0;
 	u64 size64;
 	u32 flags;
+	pid_t pid;
+	int  i;
 
 	logging();
 
@@ -275,12 +277,30 @@
 	set_timeout(nbd, timeout);
 	finish_sock(sock, nbd, swap);
 
+#ifndef NOFORK
 	/* Go daemon */
-	
-	chdir("/");
-#ifndef NOFORK
-	if (fork())
-		exit(0);
+	umask(0);
+	if (chdir("/") < 0)
+		perror("Cannot change directory to /");
+	/* lose controlling terminal */
+	pid = fork();
+	if (pid < 0)
+		perror("Cannot fork");
+	else if (pid != 0)
+		exit(0);	/* parent */
+	setsid();
+	/* make sure we never gain it again */
+	pid = fork();
+	if (pid < 0)
+		perror("Cannot fork");
+	else if (pid != 0)
+		exit(0);	/* parent */
+	/* detach file descriptors */
+	for (i = 0; i < 3; i++)
+		close(i);
+	(void)open("/dev/null", O_RDWR);
+	(void)dup(0);
+	(void)dup(0);
 #endif
 
 	do {

Reply via email to