Просмотр исходного кода

* Close file descriptors when spawning new processes

Bryan Drewery 16 лет назад
Родитель
Сommit
d1a8db219c
3 измененных файлов с 9 добавлено и 2 удалено
  1. 2 2
      src/debug.c
  2. 2 0
      src/eggdrop.h
  3. 5 0
      src/shell.c

+ 2 - 2
src/debug.c

@@ -89,8 +89,8 @@ void setlimits()
 #ifndef __sun__
   setrlimit(RLIMIT_NPROC, &plim);
 #endif
-  fdlim.rlim_cur = 300;
-  fdlim.rlim_max = 300;
+  fdlim.rlim_cur = MAX_SOCKETS;
+  fdlim.rlim_max = MAX_SOCKETS;
   setrlimit(RLIMIT_NOFILE, &fdlim);
 #endif /* !CYGWIN_HACKS */
 }

+ 2 - 0
src/eggdrop.h

@@ -27,6 +27,8 @@
 #define HANDLEN		  9	/* valid values 9->NICKMAX		*/
 #define NICKMAX		 32	/* valid values HANDLEN->32		*/
 
+#define MAX_SOCKETS	300
+
 
 /* Handy string lengths */
 

+ 5 - 0
src/shell.c

@@ -440,6 +440,9 @@ int shell_exec(char *cmdline, char *input, char **output, char **erroutput, bool
       while (mycmdline[0] && (p = newsplit(&mycmdline)))
         argv[n++] = p;
       argv[n] = NULL;
+
+      // Close all sockets
+      for (int fd = 3; fd < MAX_SOCKETS; ++fd) close(fd);
     } else {
       argv[0] = "/bin/sh";
       argv[1] = "-c";
@@ -461,6 +464,8 @@ int simple_exec(const char* argv[]) {
     case -1:
       break;
     case 0:		//child
+      // Close all sockets
+      for (int fd = 3; fd < MAX_SOCKETS; ++fd) close(fd);
       execv(argv[0], (char* const*) &argv[0]);
       _exit(127);
     default:		//parent