Mercurial > dovecot > core-2.2
annotate src/lib/restrict-process-size.c @ 22664:fea53c2725c0
director: Fix director_max_parallel_moves/kicks type
Should be uint, not time.
author | Timo Sirainen <timo.sirainen@dovecot.fi> |
---|---|
date | Thu, 09 Nov 2017 12:24:16 +0200 |
parents | 2e2563132d5f |
children | cb108f786fb4 |
rev | line source |
---|---|
21390
2e2563132d5f
Updated copyright notices to include the year 2017.
Stephan Bosch <stephan.bosch@dovecot.fi>
parents:
19552
diff
changeset
|
1 /* Copyright (c) 2002-2017 Dovecot authors, see the included COPYING file */ |
722
0438621d25ff
Added virtual memory size limits to processes. Default values are pretty
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
2 |
0438621d25ff
Added virtual memory size limits to processes. Default values are pretty
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
3 #include "lib.h" |
0438621d25ff
Added virtual memory size limits to processes. Default values are pretty
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
4 #include "restrict-process-size.h" |
0438621d25ff
Added virtual memory size limits to processes. Default values are pretty
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
5 |
0438621d25ff
Added virtual memory size limits to processes. Default values are pretty
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
6 #include <unistd.h> |
0438621d25ff
Added virtual memory size limits to processes. Default values are pretty
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
7 |
13689
523f34bffc94
restrict_process_size() API changes.
Timo Sirainen <tss@iki.fi>
parents:
12782
diff
changeset
|
8 void restrict_process_size(rlim_t bytes) |
722
0438621d25ff
Added virtual memory size limits to processes. Default values are pretty
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
9 { |
0438621d25ff
Added virtual memory size limits to processes. Default values are pretty
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
10 struct rlimit rlim; |
0438621d25ff
Added virtual memory size limits to processes. Default values are pretty
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
11 |
13689
523f34bffc94
restrict_process_size() API changes.
Timo Sirainen <tss@iki.fi>
parents:
12782
diff
changeset
|
12 rlim.rlim_max = rlim.rlim_cur = bytes; |
523f34bffc94
restrict_process_size() API changes.
Timo Sirainen <tss@iki.fi>
parents:
12782
diff
changeset
|
13 if (setrlimit(RLIMIT_DATA, &rlim) < 0) { |
523f34bffc94
restrict_process_size() API changes.
Timo Sirainen <tss@iki.fi>
parents:
12782
diff
changeset
|
14 i_fatal("setrlimit(RLIMIT_DATA, %llu): %m", |
523f34bffc94
restrict_process_size() API changes.
Timo Sirainen <tss@iki.fi>
parents:
12782
diff
changeset
|
15 (unsigned long long)bytes); |
1397 | 16 } |
739
f50714973d0b
RLIMIT_AS isn't supported everywhere - use it if it exists, but also use
Timo Sirainen <tss@iki.fi>
parents:
722
diff
changeset
|
17 |
f50714973d0b
RLIMIT_AS isn't supported everywhere - use it if it exists, but also use
Timo Sirainen <tss@iki.fi>
parents:
722
diff
changeset
|
18 #ifdef HAVE_RLIMIT_AS |
13689
523f34bffc94
restrict_process_size() API changes.
Timo Sirainen <tss@iki.fi>
parents:
12782
diff
changeset
|
19 if (setrlimit(RLIMIT_AS, &rlim) < 0) { |
523f34bffc94
restrict_process_size() API changes.
Timo Sirainen <tss@iki.fi>
parents:
12782
diff
changeset
|
20 i_fatal("setrlimit(RLIMIT_AS, %llu): %m", |
523f34bffc94
restrict_process_size() API changes.
Timo Sirainen <tss@iki.fi>
parents:
12782
diff
changeset
|
21 (unsigned long long)bytes); |
722
0438621d25ff
Added virtual memory size limits to processes. Default values are pretty
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
22 } |
0438621d25ff
Added virtual memory size limits to processes. Default values are pretty
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
23 #endif |
0438621d25ff
Added virtual memory size limits to processes. Default values are pretty
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
24 } |
6314
c6d6ce742a82
Added restrict_fd_limit() and restrict_raise_fd_limit()
Timo Sirainen <tss@iki.fi>
parents:
1741
diff
changeset
|
25 |
13689
523f34bffc94
restrict_process_size() API changes.
Timo Sirainen <tss@iki.fi>
parents:
12782
diff
changeset
|
26 void restrict_process_count(rlim_t count ATTR_UNUSED) |
523f34bffc94
restrict_process_size() API changes.
Timo Sirainen <tss@iki.fi>
parents:
12782
diff
changeset
|
27 { |
523f34bffc94
restrict_process_size() API changes.
Timo Sirainen <tss@iki.fi>
parents:
12782
diff
changeset
|
28 #ifdef HAVE_RLIMIT_NPROC |
523f34bffc94
restrict_process_size() API changes.
Timo Sirainen <tss@iki.fi>
parents:
12782
diff
changeset
|
29 struct rlimit rlim; |
523f34bffc94
restrict_process_size() API changes.
Timo Sirainen <tss@iki.fi>
parents:
12782
diff
changeset
|
30 |
523f34bffc94
restrict_process_size() API changes.
Timo Sirainen <tss@iki.fi>
parents:
12782
diff
changeset
|
31 rlim.rlim_max = rlim.rlim_cur = count; |
523f34bffc94
restrict_process_size() API changes.
Timo Sirainen <tss@iki.fi>
parents:
12782
diff
changeset
|
32 if (setrlimit(RLIMIT_NPROC, &rlim) < 0) { |
16246
dd0d5981ad42
restrict_process_count(): Don't die if process count can't be changed.
Timo Sirainen <tss@iki.fi>
parents:
15715
diff
changeset
|
33 i_error("setrlimit(RLIMIT_NPROC, %llu): %m", |
13689
523f34bffc94
restrict_process_size() API changes.
Timo Sirainen <tss@iki.fi>
parents:
12782
diff
changeset
|
34 (unsigned long long)count); |
523f34bffc94
restrict_process_size() API changes.
Timo Sirainen <tss@iki.fi>
parents:
12782
diff
changeset
|
35 } |
523f34bffc94
restrict_process_size() API changes.
Timo Sirainen <tss@iki.fi>
parents:
12782
diff
changeset
|
36 #endif |
523f34bffc94
restrict_process_size() API changes.
Timo Sirainen <tss@iki.fi>
parents:
12782
diff
changeset
|
37 } |
523f34bffc94
restrict_process_size() API changes.
Timo Sirainen <tss@iki.fi>
parents:
12782
diff
changeset
|
38 |
523f34bffc94
restrict_process_size() API changes.
Timo Sirainen <tss@iki.fi>
parents:
12782
diff
changeset
|
39 void restrict_fd_limit(rlim_t count) |
6314
c6d6ce742a82
Added restrict_fd_limit() and restrict_raise_fd_limit()
Timo Sirainen <tss@iki.fi>
parents:
1741
diff
changeset
|
40 { |
c6d6ce742a82
Added restrict_fd_limit() and restrict_raise_fd_limit()
Timo Sirainen <tss@iki.fi>
parents:
1741
diff
changeset
|
41 #ifdef HAVE_SETRLIMIT |
c6d6ce742a82
Added restrict_fd_limit() and restrict_raise_fd_limit()
Timo Sirainen <tss@iki.fi>
parents:
1741
diff
changeset
|
42 struct rlimit rlim; |
c6d6ce742a82
Added restrict_fd_limit() and restrict_raise_fd_limit()
Timo Sirainen <tss@iki.fi>
parents:
1741
diff
changeset
|
43 |
c6d6ce742a82
Added restrict_fd_limit() and restrict_raise_fd_limit()
Timo Sirainen <tss@iki.fi>
parents:
1741
diff
changeset
|
44 rlim.rlim_cur = rlim.rlim_max = count; |
13689
523f34bffc94
restrict_process_size() API changes.
Timo Sirainen <tss@iki.fi>
parents:
12782
diff
changeset
|
45 if (setrlimit(RLIMIT_NOFILE, &rlim) < 0) { |
523f34bffc94
restrict_process_size() API changes.
Timo Sirainen <tss@iki.fi>
parents:
12782
diff
changeset
|
46 i_error("setrlimit(RLIMIT_NOFILE, %llu): %m", |
523f34bffc94
restrict_process_size() API changes.
Timo Sirainen <tss@iki.fi>
parents:
12782
diff
changeset
|
47 (unsigned long long)count); |
523f34bffc94
restrict_process_size() API changes.
Timo Sirainen <tss@iki.fi>
parents:
12782
diff
changeset
|
48 } |
6314
c6d6ce742a82
Added restrict_fd_limit() and restrict_raise_fd_limit()
Timo Sirainen <tss@iki.fi>
parents:
1741
diff
changeset
|
49 #endif |
c6d6ce742a82
Added restrict_fd_limit() and restrict_raise_fd_limit()
Timo Sirainen <tss@iki.fi>
parents:
1741
diff
changeset
|
50 } |
7946
aad49536db41
If core dump limit is 0, add "core dumps disabled" to startup log line.
Timo Sirainen <tss@iki.fi>
parents:
7086
diff
changeset
|
51 |
14198
1c1c2a1c85d7
Added restrict_get_process_size()
Timo Sirainen <tss@iki.fi>
parents:
14133
diff
changeset
|
52 int restrict_get_process_size(rlim_t *limit_r) |
1c1c2a1c85d7
Added restrict_get_process_size()
Timo Sirainen <tss@iki.fi>
parents:
14133
diff
changeset
|
53 { |
1c1c2a1c85d7
Added restrict_get_process_size()
Timo Sirainen <tss@iki.fi>
parents:
14133
diff
changeset
|
54 struct rlimit rlim; |
1c1c2a1c85d7
Added restrict_get_process_size()
Timo Sirainen <tss@iki.fi>
parents:
14133
diff
changeset
|
55 |
1c1c2a1c85d7
Added restrict_get_process_size()
Timo Sirainen <tss@iki.fi>
parents:
14133
diff
changeset
|
56 #ifdef HAVE_RLIMIT_AS |
1c1c2a1c85d7
Added restrict_get_process_size()
Timo Sirainen <tss@iki.fi>
parents:
14133
diff
changeset
|
57 if (getrlimit(RLIMIT_AS, &rlim) < 0) { |
1c1c2a1c85d7
Added restrict_get_process_size()
Timo Sirainen <tss@iki.fi>
parents:
14133
diff
changeset
|
58 i_error("getrlimit(RLIMIT_AS): %m"); |
1c1c2a1c85d7
Added restrict_get_process_size()
Timo Sirainen <tss@iki.fi>
parents:
14133
diff
changeset
|
59 return -1; |
1c1c2a1c85d7
Added restrict_get_process_size()
Timo Sirainen <tss@iki.fi>
parents:
14133
diff
changeset
|
60 } |
1c1c2a1c85d7
Added restrict_get_process_size()
Timo Sirainen <tss@iki.fi>
parents:
14133
diff
changeset
|
61 #else |
1c1c2a1c85d7
Added restrict_get_process_size()
Timo Sirainen <tss@iki.fi>
parents:
14133
diff
changeset
|
62 if (getrlimit(RLIMIT_DATA, &rlim) < 0) { |
1c1c2a1c85d7
Added restrict_get_process_size()
Timo Sirainen <tss@iki.fi>
parents:
14133
diff
changeset
|
63 i_error("getrlimit(RLIMIT_DATA): %m"); |
1c1c2a1c85d7
Added restrict_get_process_size()
Timo Sirainen <tss@iki.fi>
parents:
14133
diff
changeset
|
64 return -1; |
1c1c2a1c85d7
Added restrict_get_process_size()
Timo Sirainen <tss@iki.fi>
parents:
14133
diff
changeset
|
65 } |
1c1c2a1c85d7
Added restrict_get_process_size()
Timo Sirainen <tss@iki.fi>
parents:
14133
diff
changeset
|
66 #endif |
1c1c2a1c85d7
Added restrict_get_process_size()
Timo Sirainen <tss@iki.fi>
parents:
14133
diff
changeset
|
67 *limit_r = rlim.rlim_cur; |
1c1c2a1c85d7
Added restrict_get_process_size()
Timo Sirainen <tss@iki.fi>
parents:
14133
diff
changeset
|
68 return 0; |
1c1c2a1c85d7
Added restrict_get_process_size()
Timo Sirainen <tss@iki.fi>
parents:
14133
diff
changeset
|
69 } |
1c1c2a1c85d7
Added restrict_get_process_size()
Timo Sirainen <tss@iki.fi>
parents:
14133
diff
changeset
|
70 |
7946
aad49536db41
If core dump limit is 0, add "core dumps disabled" to startup log line.
Timo Sirainen <tss@iki.fi>
parents:
7086
diff
changeset
|
71 int restrict_get_core_limit(rlim_t *limit_r) |
aad49536db41
If core dump limit is 0, add "core dumps disabled" to startup log line.
Timo Sirainen <tss@iki.fi>
parents:
7086
diff
changeset
|
72 { |
aad49536db41
If core dump limit is 0, add "core dumps disabled" to startup log line.
Timo Sirainen <tss@iki.fi>
parents:
7086
diff
changeset
|
73 #ifdef HAVE_RLIMIT_CORE |
aad49536db41
If core dump limit is 0, add "core dumps disabled" to startup log line.
Timo Sirainen <tss@iki.fi>
parents:
7086
diff
changeset
|
74 struct rlimit rlim; |
aad49536db41
If core dump limit is 0, add "core dumps disabled" to startup log line.
Timo Sirainen <tss@iki.fi>
parents:
7086
diff
changeset
|
75 |
aad49536db41
If core dump limit is 0, add "core dumps disabled" to startup log line.
Timo Sirainen <tss@iki.fi>
parents:
7086
diff
changeset
|
76 if (getrlimit(RLIMIT_CORE, &rlim) < 0) { |
aad49536db41
If core dump limit is 0, add "core dumps disabled" to startup log line.
Timo Sirainen <tss@iki.fi>
parents:
7086
diff
changeset
|
77 i_error("getrlimit(RLIMIT_CORE) failed: %m"); |
aad49536db41
If core dump limit is 0, add "core dumps disabled" to startup log line.
Timo Sirainen <tss@iki.fi>
parents:
7086
diff
changeset
|
78 return -1; |
aad49536db41
If core dump limit is 0, add "core dumps disabled" to startup log line.
Timo Sirainen <tss@iki.fi>
parents:
7086
diff
changeset
|
79 } |
aad49536db41
If core dump limit is 0, add "core dumps disabled" to startup log line.
Timo Sirainen <tss@iki.fi>
parents:
7086
diff
changeset
|
80 *limit_r = rlim.rlim_cur; |
aad49536db41
If core dump limit is 0, add "core dumps disabled" to startup log line.
Timo Sirainen <tss@iki.fi>
parents:
7086
diff
changeset
|
81 return 0; |
aad49536db41
If core dump limit is 0, add "core dumps disabled" to startup log line.
Timo Sirainen <tss@iki.fi>
parents:
7086
diff
changeset
|
82 #else |
aad49536db41
If core dump limit is 0, add "core dumps disabled" to startup log line.
Timo Sirainen <tss@iki.fi>
parents:
7086
diff
changeset
|
83 return -1; |
aad49536db41
If core dump limit is 0, add "core dumps disabled" to startup log line.
Timo Sirainen <tss@iki.fi>
parents:
7086
diff
changeset
|
84 #endif |
aad49536db41
If core dump limit is 0, add "core dumps disabled" to startup log line.
Timo Sirainen <tss@iki.fi>
parents:
7086
diff
changeset
|
85 } |
13689
523f34bffc94
restrict_process_size() API changes.
Timo Sirainen <tss@iki.fi>
parents:
12782
diff
changeset
|
86 |
523f34bffc94
restrict_process_size() API changes.
Timo Sirainen <tss@iki.fi>
parents:
12782
diff
changeset
|
87 int restrict_get_process_limit(rlim_t *limit_r) |
523f34bffc94
restrict_process_size() API changes.
Timo Sirainen <tss@iki.fi>
parents:
12782
diff
changeset
|
88 { |
523f34bffc94
restrict_process_size() API changes.
Timo Sirainen <tss@iki.fi>
parents:
12782
diff
changeset
|
89 #ifdef HAVE_RLIMIT_NPROC |
523f34bffc94
restrict_process_size() API changes.
Timo Sirainen <tss@iki.fi>
parents:
12782
diff
changeset
|
90 struct rlimit rlim; |
523f34bffc94
restrict_process_size() API changes.
Timo Sirainen <tss@iki.fi>
parents:
12782
diff
changeset
|
91 |
523f34bffc94
restrict_process_size() API changes.
Timo Sirainen <tss@iki.fi>
parents:
12782
diff
changeset
|
92 if (getrlimit(RLIMIT_NPROC, &rlim) < 0) { |
523f34bffc94
restrict_process_size() API changes.
Timo Sirainen <tss@iki.fi>
parents:
12782
diff
changeset
|
93 i_error("getrlimit(RLIMIT_NPROC) failed: %m"); |
523f34bffc94
restrict_process_size() API changes.
Timo Sirainen <tss@iki.fi>
parents:
12782
diff
changeset
|
94 return -1; |
523f34bffc94
restrict_process_size() API changes.
Timo Sirainen <tss@iki.fi>
parents:
12782
diff
changeset
|
95 } |
523f34bffc94
restrict_process_size() API changes.
Timo Sirainen <tss@iki.fi>
parents:
12782
diff
changeset
|
96 *limit_r = rlim.rlim_cur; |
523f34bffc94
restrict_process_size() API changes.
Timo Sirainen <tss@iki.fi>
parents:
12782
diff
changeset
|
97 return 0; |
523f34bffc94
restrict_process_size() API changes.
Timo Sirainen <tss@iki.fi>
parents:
12782
diff
changeset
|
98 #else |
523f34bffc94
restrict_process_size() API changes.
Timo Sirainen <tss@iki.fi>
parents:
12782
diff
changeset
|
99 return -1; |
523f34bffc94
restrict_process_size() API changes.
Timo Sirainen <tss@iki.fi>
parents:
12782
diff
changeset
|
100 #endif |
523f34bffc94
restrict_process_size() API changes.
Timo Sirainen <tss@iki.fi>
parents:
12782
diff
changeset
|
101 } |
13755 | 102 |
103 int restrict_get_fd_limit(rlim_t *limit_r) | |
104 { | |
105 struct rlimit rlim; | |
106 | |
107 if (getrlimit(RLIMIT_NOFILE, &rlim) < 0) { | |
108 i_error("getrlimit(RLIMIT_NOFILE) failed: %m"); | |
109 return -1; | |
110 } | |
111 *limit_r = rlim.rlim_cur; | |
112 return 0; | |
113 } |