summaryrefslogtreecommitdiffstats
path: root/usr.bin/limits/limits.c
diff options
context:
space:
mode:
authored <ed@FreeBSD.org>2008-09-02 19:13:24 +0000
committered <ed@FreeBSD.org>2008-09-02 19:13:24 +0000
commit5f23a3b5ca609a1597f573305e7e58558a73a897 (patch)
tree75408679db0cb502243675e0570a66b0bb817eed /usr.bin/limits/limits.c
parent59a00054acff9e2ada7d2366d4aeaec829dcd3a4 (diff)
downloadFreeBSD-src-5f23a3b5ca609a1597f573305e7e58558a73a897.zip
FreeBSD-src-5f23a3b5ca609a1597f573305e7e58558a73a897.tar.gz
Add support for RLIMIT_NPTS to limits(1).
After the MPSAFE TTY import we support an additional rlimit, called RLIMIT_NPTS. This limit allows you to cap the amount of pseudo-terminals allocated by one user. We forgot to add support for this limit to limits(1), which means it crashed. Add the proper bits to make it work like it should. Unfortunately not all shells actually implement the RLIMIT, so unfortunately I suspect it to be broken with certain shells. Submitted by: Yuriy Tsibizov <yuriy tsibizov gfk ru>
Diffstat (limited to 'usr.bin/limits/limits.c')
-rw-r--r--usr.bin/limits/limits.c114
1 files changed, 62 insertions, 52 deletions
diff --git a/usr.bin/limits/limits.c b/usr.bin/limits/limits.c
index 0383ac2..1440250 100644
--- a/usr.bin/limits/limits.c
+++ b/usr.bin/limits/limits.c
@@ -76,17 +76,18 @@ static struct {
{
{ "", "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 @@ static struct {
{ "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 @@ static struct {
{ "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 @@ static struct {
{ "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 @@ static struct {
{ "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 @@ static struct {
{ "maxproc", login_getcapnum },
{ "openfiles", login_getcapnum },
{ "sbsize", login_getcapsize },
- { "vmemoryuse", login_getcapsize }
+ { "vmemoryuse", login_getcapsize },
+ { "pseudoterminals",login_getcapnum },
};
/*
@@ -224,7 +233,7 @@ static struct {
* 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 @@ main(int argc, char *argv[])
}
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 @@ static void
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 @@ resource_num(int which, int ch, const char *str)
break;
case RLIMIT_NPROC:
case RLIMIT_NOFILE:
+ case RLIMIT_NPTS:
res = strtoq(s, &e, 0);
s = e;
break;
OpenPOWER on IntegriCloud