diff options
author | ed <ed@FreeBSD.org> | 2008-09-02 19:13:24 +0000 |
---|---|---|
committer | ed <ed@FreeBSD.org> | 2008-09-02 19:13:24 +0000 |
commit | 5f23a3b5ca609a1597f573305e7e58558a73a897 (patch) | |
tree | 75408679db0cb502243675e0570a66b0bb817eed /usr.bin/limits | |
parent | 59a00054acff9e2ada7d2366d4aeaec829dcd3a4 (diff) | |
download | FreeBSD-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')
-rw-r--r-- | usr.bin/limits/limits.1 | 8 | ||||
-rw-r--r-- | usr.bin/limits/limits.c | 114 |
2 files changed, 68 insertions, 54 deletions
diff --git a/usr.bin/limits/limits.1 b/usr.bin/limits/limits.1 index 62efb85..edc6bb9 100644 --- a/usr.bin/limits/limits.1 +++ b/usr.bin/limits/limits.1 @@ -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 is inclusive of text, data, bss, stack, 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 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; |