Blob Blame History Raw
diff -u vsftpd-2.0.1.orig/standalone.c vsftpd-2.0.1/standalone.c
--- vsftpd-2.0.1.orig/standalone.c	2005-06-15 16:08:52.000000000 -0400
+++ vsftpd-2.0.1/standalone.c	2005-06-15 16:06:26.000000000 -0400
@@ -53,6 +53,7 @@
       vsf_sysutil_exit(0);
     }
     vsf_sysutil_make_session_leader();
+    vsf_sysutil_reopen_standard_fds();
   }
   if (tunable_listen)
   {
diff -u vsftpd-2.0.1.orig/sysutil.c vsftpd-2.0.1/sysutil.c
--- vsftpd-2.0.1.orig/sysutil.c	2005-06-15 16:08:52.000000000 -0400
+++ vsftpd-2.0.1/sysutil.c	2005-06-15 16:03:25.000000000 -0400
@@ -2357,6 +2357,44 @@
 }
 
 void
+vsf_sysutil_reopen_standard_fds(void)
+{
+  /* This reopens STDIN, STDOUT and STDERR to /dev/null */
+
+  int fd;
+
+  if ( (fd = open("/dev/null", O_RDWR, 0)) == -1 )
+  {
+    goto error;
+  }
+
+  if ( dup2(fd, STDIN_FILENO) == -1 )
+  {
+    goto error;
+  }
+
+  if ( dup2(fd, STDOUT_FILENO) == -1 )
+  {
+    goto error;
+  }
+
+  if ( dup2(fd, STDERR_FILENO) == -1 )
+  {
+    goto error;
+  }
+
+  if ( fd > 2 )
+  {
+    (void) close(fd);
+  }
+
+  return;
+
+error:
+  die("reopening standard file descriptors to /dev/null failed");
+}
+
+void
 vsf_sysutil_tzset(void)
 {
   tzset();
diff -u vsftpd-2.0.1.orig/sysutil.h vsftpd-2.0.1/sysutil.h
--- vsftpd-2.0.1.orig/sysutil.h	2004-06-04 06:11:52.000000000 -0400
+++ vsftpd-2.0.1/sysutil.h	2005-06-15 16:03:54.000000000 -0400
@@ -287,6 +287,7 @@
 unsigned int vsf_sysutil_get_umask(void);
 void vsf_sysutil_set_umask(unsigned int umask);
 void vsf_sysutil_make_session_leader(void);
+void vsf_sysutil_reopen_standard_fds(void);
 void vsf_sysutil_tzset(void);
 const char* vsf_sysutil_get_current_date(void);
 void vsf_sysutil_qsort(void* p_base, unsigned int num_elem,