]> granicus.if.org Git - sudo/commitdiff
When using rlimit check for RLIM_INFINITY
authorTodd C. Miller <Todd.Miller@courtesan.com>
Mon, 17 Jan 2000 22:46:32 +0000 (22:46 +0000)
committerTodd C. Miller <Todd.Miller@courtesan.com>
Mon, 17 Jan 2000 22:46:32 +0000 (22:46 +0000)
When computing the value of maxfd, use min(getdtablesize(), RLIMIT_NOFILE)

sudo.c

diff --git a/sudo.c b/sudo.c
index b935d2f676fe6528d83ea0975321e186c360a606..e16148fd5b440903cb356311a4a03070acd5b6ad 100644 (file)
--- a/sudo.c
+++ b/sudo.c
@@ -1009,16 +1009,17 @@ initial_setup()
     /*
      * Close any open fd's other than stdin, stdout and stderr.
      */
-#ifdef RLIMIT_NOFILE
-    if (getrlimit(RLIMIT_NOFILE, &rl) == 0)
-       maxfd = rl.rlim_max - 1;
-    else
-#endif /* RLIMIT_NOFILE */
 #ifdef HAVE_SYSCONF
-       maxfd = sysconf(_SC_OPEN_MAX) - 1;
+    maxfd = sysconf(_SC_OPEN_MAX) - 1;
 #else
-       maxfd = getdtablesize() - 1;
+    maxfd = getdtablesize() - 1;
 #endif /* HAVE_SYSCONF */
+#ifdef RLIMIT_NOFILE
+    if (getrlimit(RLIMIT_NOFILE, &rl) == 0) {
+       if (rl.rlim_max != RLIM_INFINITY && rl.rlim_max <= maxfd)
+           maxfd = rl.rlim_max - 1;
+    }
+#endif /* RLIMIT_NOFILE */
 
     for (fd = maxfd; fd > STDERR_FILENO; fd--)
        (void) close(fd);