Output symbolic name of limit in warnings

Kimmo Suominen <[email protected]> Wed, 18 Dec 2019 18:08:33 +0200
Newsgroups gmane.comp.tools.sudo.devel
Message-ID <CADbbPnGoLf6yT4Ah9f3jstBgcYHdT261dfu3fpteg_AcxP=dvg@mail.gmail.com>
Hi all,

I thought it would be more user-friendly to output the symbolic name of the
limit when setrlimit(2) or getrlimit(2) fails. Patch attached.

Kind regards,
+ Kimmo

____________________________________________________________
sudo-workers mailing list <[email protected]>
For list information, options, or to unsubscribe, visit:
https://www.sudo.ws/mailman/listinfo/sudo-workers
sudo-setrlimit-warn.diff.txt (text/plain, 3.4 KB)
# HG changeset patch
# User Kimmo Suominen <[email protected]>
# Date 1576684877 -7200
#      Wed Dec 18 18:01:17 2019 +0200
# Branch 1.8
# Node ID 3a0fed5daaf259f957f29cacc92bb34bdcd2e088
# Parent  614f2b6a358ecef45a29b09b509b9ed5b408a791
Output the name of the limit when warning about setrlimit or getrlimit

diff -r 614f2b6a358e -r 3a0fed5daaf2 plugins/sudoers/sudoers.c
--- a/plugins/sudoers/sudoers.c	Wed Dec 11 13:06:05 2019 -0700
+++ b/plugins/sudoers/sudoers.c	Wed Dec 18 18:01:17 2019 +0200
@@ -129,12 +129,12 @@
     debug_decl(unlimit_nproc, SUDOERS_DEBUG_UTIL)
 
     if (getrlimit(RLIMIT_NPROC, &nproclimit) != 0)
-	    sudo_warn("getrlimit");
+	    sudo_warn("getrlimit(RLIMIT_NPROC)");
     rl.rlim_cur = rl.rlim_max = RLIM_INFINITY;
     if (setrlimit(RLIMIT_NPROC, &rl) != 0) {
 	rl.rlim_cur = rl.rlim_max = nproclimit.rlim_max;
 	if (setrlimit(RLIMIT_NPROC, &rl) != 0)
-	    sudo_warn("setrlimit");
+	    sudo_warn("setrlimit(RLIMIT_NPROC)");
     }
     debug_return;
 #endif /* __linux__ */
@@ -150,7 +150,7 @@
     debug_decl(restore_nproc, SUDOERS_DEBUG_UTIL)
 
     if (setrlimit(RLIMIT_NPROC, &nproclimit) != 0)
-	sudo_warn("setrlimit");
+	sudo_warn("setrlimit(RLIMIT_NPROC)");
 
     debug_return;
 #endif /* __linux__ */
diff -r 614f2b6a358e -r 3a0fed5daaf2 src/limits.c
--- a/src/limits.c	Wed Dec 11 13:06:05 2019 -0700
+++ b/src/limits.c	Wed Dec 18 18:01:17 2019 +0200
@@ -56,6 +56,7 @@
 static struct rlimit stack_fallback = { 8192 * 1024, 65532 * 1024 };
 
 static struct saved_limit {
+    char *name;
     int resource;
     bool saved;
     struct rlimit *fallback;
@@ -63,19 +64,19 @@
     struct rlimit oldlimit;
 } saved_limits[] = {
 #ifdef RLIMIT_AS
-    { RLIMIT_AS, false, NULL, { RLIM_INFINITY, RLIM_INFINITY } },
+    { "RLIMIT_AS", RLIMIT_AS, false, NULL, { RLIM_INFINITY, RLIM_INFINITY } },
 #endif
-    { RLIMIT_CPU, false, NULL, { RLIM_INFINITY, RLIM_INFINITY } },
-    { RLIMIT_DATA, false, NULL, { RLIM_INFINITY, RLIM_INFINITY } },
-    { RLIMIT_FSIZE, false, NULL, { RLIM_INFINITY, RLIM_INFINITY } },
-    { RLIMIT_NOFILE, false, &nofile_fallback, { RLIM_INFINITY, RLIM_INFINITY } },
+    { "RLIMIT_CPU", RLIMIT_CPU, false, NULL, { RLIM_INFINITY, RLIM_INFINITY } },
+    { "RLIMIT_DATA", RLIMIT_DATA, false, NULL, { RLIM_INFINITY, RLIM_INFINITY } },
+    { "RLIMIT_FSIZE", RLIMIT_FSIZE, false, NULL, { RLIM_INFINITY, RLIM_INFINITY } },
+    { "RLIMIT_NOFILE", RLIMIT_NOFILE, false, &nofile_fallback, { RLIM_INFINITY, RLIM_INFINITY } },
 #ifdef RLIMIT_NPROC
-    { RLIMIT_NPROC, false, NULL, { RLIM_INFINITY, RLIM_INFINITY } },
+    { "RLIMIT_NPROC", RLIMIT_NPROC, false, NULL, { RLIM_INFINITY, RLIM_INFINITY } },
 #endif
 #ifdef RLIMIT_RSS
-    { RLIMIT_RSS, false, NULL, { RLIM_INFINITY, RLIM_INFINITY } },
+    { "RLIMIT_RSS", RLIMIT_RSS, false, NULL, { RLIM_INFINITY, RLIM_INFINITY } },
 #endif
-    { RLIMIT_STACK, false, &stack_fallback, { 8192 * 1024, RLIM_INFINITY } }
+    { "RLIMIT_STACK", RLIMIT_STACK, false, &stack_fallback, { 8192 * 1024, RLIM_INFINITY } }
 };
 
 static struct rlimit corelimit;
@@ -209,7 +210,7 @@
 		rc = setrlimit(lim->resource, &lim->newlimit);
 	    }
 	    if (rc == -1)
-		sudo_warn("setrlimit(%d)", lim->resource);
+		sudo_warn("setrlimit(%s)", lim->name);
 	}
     }
 
@@ -230,7 +231,7 @@
 	struct saved_limit *lim = &saved_limits[idx];
 	if (lim->saved) {
 	    if (setrlimit(lim->resource, &lim->oldlimit) == -1)
-		sudo_warn("setrlimit(%d)", lim->resource);
+		sudo_warn("setrlimit(%s)", lim->name);
 	}
     }
     restore_coredump();