/usr/bin/limits (WAS: Re: Apache.sh on current)

Yuriy Tsibizov Yuriy.Tsibizov at gfk.ru
Tue Sep 2 19:06:41 UTC 2008


On Tue, 2 Sep 2008, Ed Schouten wrote:

> Looks like I introduced this regression when importing MPSAFE TTY.
> limits(1) dies when RLIMIT_NLIMITS is increased, but the array in
> limits.c isn't extended (seems to be quite fragile).
>
> Can you try the attached patch for limits(1)? Thanks!

Yes, it solves that problem. You may also want to add -p switch to man
page and fix some other places in limits.c (see attached files).

We also have built-in 'limit' in csh -- should it be updated as well?

Yuriy Tsibizov,
GfK RUS Network Administrator
-------------- next part --------------
Index: limits.c
===================================================================
RCS file: /home/ncvs/src/usr.bin/limits/limits.c,v
retrieving revision 1.17
diff -u -r1.17 limits.c
--- limits.c	4 Jul 2007 00:00:40 -0000	1.17
+++ limits.c	2 Sep 2008 18:13:07 -0000
@@ -76,17 +76,18 @@
 {
     { "", "infinity", "Resource limits%s%s:\n", "-max", "-cur", "",
       {
-	  { "  cputime%-4s      %8s", " secs\n",  1    },
-	  { "  filesize%-4s     %8s", " kB\n",    1024 },
-	  { "  datasize%-4s     %8s", " kB\n",    1024 },
-	  { "  stacksize%-4s    %8s", " kB\n",    1024 },
-	  { "  coredumpsize%-4s %8s", " kB\n",    1024 },
-	  { "  memoryuse%-4s    %8s", " kB\n",    1024 },
-	  { "  memorylocked%-4s %8s", " kB\n",    1024 },
-	  { "  maxprocesses%-4s %8s", "\n",       1    },
-	  { "  openfiles%-4s    %8s", "\n",       1    },
-	  { "  sbsize%-4s       %8s", " bytes\n", 1    },
-	  { "  vmemoryuse%-4s   %8s", " kB\n",    1024 }
+	  { "  cputime%-4s          %8s", " secs\n",  1    },
+	  { "  filesize%-4s         %8s", " kB\n",    1024 },
+	  { "  datasize%-4s         %8s", " kB\n",    1024 },
+	  { "  stacksize%-4s        %8s", " kB\n",    1024 },
+	  { "  coredumpsize%-4s     %8s", " kB\n",    1024 },
+	  { "  memoryuse%-4s        %8s", " kB\n",    1024 },
+	  { "  memorylocked%-4s     %8s", " kB\n",    1024 },
+	  { "  maxprocesses%-4s     %8s", "\n",       1    },
+	  { "  openfiles%-4s        %8s", "\n",       1    },
+	  { "  sbsize%-4s           %8s", " bytes\n", 1    },
+	  { "  vmemoryuse%-4s       %8s", " kB\n",    1024 },
+	  { "  pseudo-terminals%-4s %8s", "\n",       1    }
       }
     },
     { "sh", "unlimited", "", " -H", " -S", "",
@@ -101,22 +102,24 @@
 	  { "ulimit%s -u %s", ";\n",  1    },
 	  { "ulimit%s -n %s", ";\n",  1    },
 	  { "ulimit%s -b %s", ";\n",  1    },
-	  { "ulimit%s -v %s", ";\n",  1024 }
+	  { "ulimit%s -v %s", ";\n",  1024 },
+	  { "ulimit%s -p %s", ";\n",  1    }
       }
     },
     { "csh", "unlimited", "", " -h", "", NULL,
       {
-	  { "limit%s cputime %s",      ";\n",  1    },
-	  { "limit%s filesize %s",     ";\n",  1024 },
-	  { "limit%s datasize %s",     ";\n",  1024 },
-	  { "limit%s stacksize %s",    ";\n",  1024 },
-	  { "limit%s coredumpsize %s", ";\n",  1024 },
-	  { "limit%s memoryuse %s",    ";\n",  1024 },
-	  { "limit%s memorylocked %s", ";\n",  1024 },
-	  { "limit%s maxproc %s",      ";\n",  1    },
-	  { "limit%s openfiles %s",    ";\n",  1    },
-	  { "limit%s sbsize %s",       ";\n",  1    },
-	  { "limit%s vmemoryuse %s",   ";\n",  1024 }
+	  { "limit%s cputime %s",         ";\n",  1    },
+	  { "limit%s filesize %s",        ";\n",  1024 },
+	  { "limit%s datasize %s",        ";\n",  1024 },
+	  { "limit%s stacksize %s",       ";\n",  1024 },
+	  { "limit%s coredumpsize %s",    ";\n",  1024 },
+	  { "limit%s memoryuse %s",       ";\n",  1024 },
+	  { "limit%s memorylocked %s",    ";\n",  1024 },
+	  { "limit%s maxproc %s",         ";\n",  1    },
+	  { "limit%s openfiles %s",       ";\n",  1    },
+	  { "limit%s sbsize %s",          ";\n",  1    },
+	  { "limit%s vmemoryuse %s",      ";\n",  1024 },
+	  { "limit%s pseudoterminals %s", ";\n",  1    }
       }
     },
     { "bash|bash2", "unlimited", "", " -H", " -S", "",
@@ -131,22 +134,24 @@
 	  { "ulimit%s -u %s", ";\n",  1    },
 	  { "ulimit%s -n %s", ";\n",  1    },
 	  { "ulimit%s -b %s", ";\n",  1    },
-	  { "ulimit%s -v %s", ";\n",  1024 }
+	  { "ulimit%s -v %s", ";\n",  1024 },
+	  { "ulimit%s -p %s", ";\n",  1    }
       }
     },
     { "tcsh", "unlimited", "", " -h", "", NULL,
       {
-	  { "limit%s cputime %s",      ";\n",  1    },
-	  { "limit%s filesize %s",     ";\n",  1024 },
-	  { "limit%s datasize %s",     ";\n",  1024 },
-	  { "limit%s stacksize %s",    ";\n",  1024 },
-	  { "limit%s coredumpsize %s", ";\n",  1024 },
-	  { "limit%s memoryuse %s",    ";\n",  1024 },
-	  { "limit%s memorylocked %s", ";\n",  1024 },
-	  { "limit%s maxproc %s",      ";\n",  1    },
-	  { "limit%s descriptors %s",  ";\n",  1    },
-	  { "limit%s sbsize %s",       ";\n",  1    },
-	  { "limit%s vmemoryuse %s",   ";\n",  1024 }
+	  { "limit%s cputime %s",         ";\n",  1    },
+	  { "limit%s filesize %s",        ";\n",  1024 },
+	  { "limit%s datasize %s",        ";\n",  1024 },
+	  { "limit%s stacksize %s",       ";\n",  1024 },
+	  { "limit%s coredumpsize %s",    ";\n",  1024 },
+	  { "limit%s memoryuse %s",       ";\n",  1024 },
+	  { "limit%s memorylocked %s",    ";\n",  1024 },
+	  { "limit%s maxproc %s",         ";\n",  1    },
+	  { "limit%s descriptors %s",     ";\n",  1    },
+	  { "limit%s sbsize %s",          ";\n",  1    },
+	  { "limit%s vmemoryuse %s",      ";\n",  1024 },
+	  { "limit%s pseudoterminals %s", ";\n",  1    }
       }
     },
     { "ksh|pdksh", "unlimited", "", " -H", " -S", "",
@@ -161,7 +166,8 @@
 	  { "ulimit%s -p %s", ";\n",  1    },
 	  { "ulimit%s -n %s", ";\n",  1    },
 	  { "ulimit%s -b %s", ";\n",  1    },
-	  { "ulimit%s -v %s", ";\n",  1024 }
+	  { "ulimit%s -v %s", ";\n",  1024 },
+	  { "ulimit%s -p %s", ";\n",  1    }
       }
     },
     { "zsh", "unlimited", "", " -H", " -S", "",
@@ -176,22 +182,24 @@
 	  { "ulimit%s -u %s", ";\n",  1    },
 	  { "ulimit%s -n %s", ";\n",  1    },
 	  { "ulimit%s -b %s", ";\n",  1    },
-	  { "ulimit%s -v %s", ";\n",  1024 }
+	  { "ulimit%s -v %s", ";\n",  1024 },
+	  { "ulimit%s -p %s", ";\n",  1    }
       }
     },
     { "rc|es", "unlimited", "", " -h", "", NULL,
       {
-	  { "limit%s cputime %s",      ";\n",  1    },
-	  { "limit%s filesize %s",     ";\n",  1024 },
-	  { "limit%s datasize %s",     ";\n",  1024 },
-	  { "limit%s stacksize %s",    ";\n",  1024 },
-	  { "limit%s coredumpsize %s", ";\n",  1024 },
-	  { "limit%s memoryuse %s",    ";\n",  1024 },
-	  { "limit%s lockedmemory %s", ";\n",  1024 },
-	  { "limit%s processes %s",    ";\n",  1    },
-	  { "limit%s descriptors %s",  ";\n",  1    },
-	  { "limit%s sbsize %s",       ";\n",  1    },
-	  { "limit%s vmemoryuse %s",   ";\n",  1024 }
+	  { "limit%s cputime %s",         ";\n",  1    },
+	  { "limit%s filesize %s",        ";\n",  1024 },
+	  { "limit%s datasize %s",        ";\n",  1024 },
+	  { "limit%s stacksize %s",       ";\n",  1024 },
+	  { "limit%s coredumpsize %s",    ";\n",  1024 },
+	  { "limit%s memoryuse %s",       ";\n",  1024 },
+	  { "limit%s lockedmemory %s",    ";\n",  1024 },
+	  { "limit%s processes %s",       ";\n",  1    },
+	  { "limit%s descriptors %s",     ";\n",  1    },
+	  { "limit%s sbsize %s",          ";\n",  1    },
+	  { "limit%s vmemoryuse %s",      ";\n",  1024 },
+	  { "limit%s pseudoterminals %s", ";\n",  1    }
       }
     },
     { NULL, NULL, NULL, NULL, NULL, NULL,
@@ -213,7 +221,8 @@
     { "maxproc",	login_getcapnum  },
     { "openfiles",	login_getcapnum  },
     { "sbsize",		login_getcapsize  },
-    { "vmemoryuse",	login_getcapsize  }
+    { "vmemoryuse",	login_getcapsize  },
+    { "pseudoterminals",login_getcapnum  },
 };
 
 /*
@@ -224,7 +233,7 @@
  * to be modified accordingly!
  */
 
-#define RCS_STRING  "tfdscmlunbv"
+#define RCS_STRING  "tfdscmlunbvp"
 
 static rlim_t resource_num(int which, int ch, const char *str);
 static void usage(void);
@@ -261,7 +270,7 @@
     }
 
     optarg = NULL;
-    while ((ch = getopt(argc, argv, ":EeC:U:BSHab:c:d:f:l:m:n:s:t:u:v:")) != -1) {
+    while ((ch = getopt(argc, argv, ":EeC:U:BSHab:c:d:f:l:m:n:s:t:u:v:p:")) != -1) {
 	switch(ch) {
 	case 'a':
 	    doall = 1;
@@ -475,7 +484,7 @@
 usage(void)
 {
     (void)fprintf(stderr,
-"usage: limits [-C class|-U user] [-eaSHBE] [-bcdflmnstuv [val]] [[name=val ...] cmd]\n");
+"usage: limits [-C class|-U user] [-eaSHBE] [-bcdflmnstuvp [val]] [[name=val ...] cmd]\n");
     exit(EXIT_FAILURE);
 }
 
@@ -581,6 +590,7 @@
 	    break;
 	case RLIMIT_NPROC:
 	case RLIMIT_NOFILE:
+	case RLIMIT_NPTS:
 	    res = strtoq(s, &e, 0);
 	    s = e;
 	    break;
-------------- next part --------------
Index: limits.1
===================================================================
RCS file: /home/ncvs/src/usr.bin/limits/limits.1,v
retrieving revision 1.29
diff -u -r1.29 limits.1
--- limits.1	17 Jan 2005 07:44:20 -0000	1.29
+++ limits.1	2 Sep 2008 18:03:45 -0000
@@ -30,11 +30,11 @@
 .Op Fl C Ar class | Fl U Ar user
 .Op Fl SHB
 .Op Fl ea
-.Op Fl bcdflmnstuv Op Ar val
+.Op Fl bcdflmnstuvp Op Ar val
 .Nm
 .Op Fl C Ar class | Fl U Ar user
 .Op Fl SHB
-.Op Fl bcdflmnstuv Op Ar val
+.Op Fl bcdflmnstuvp Op Ar val
 .Op Fl E
 .Oo
 .Op Ar name Ns = Ns Ar value ...
@@ -262,6 +262,10 @@
 and
 .Xr mmap 2 Ns 'd
 space.
+.It Fl p Op Ar val
+Select or set the
+.Va pseudoterminals
+resource limit.
 .El
 .Pp
 Valid values for


More information about the freebsd-current mailing list