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
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
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
f6ae4dc25427 cleanup
Timo Sirainen <tss@iki.fi>
parents: 1104
diff changeset
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
0644361ca409 Added restrict_get_fd_limit()
Timo Sirainen <tss@iki.fi>
parents: 13689
diff changeset
102
0644361ca409 Added restrict_get_fd_limit()
Timo Sirainen <tss@iki.fi>
parents: 13689
diff changeset
103 int restrict_get_fd_limit(rlim_t *limit_r)
0644361ca409 Added restrict_get_fd_limit()
Timo Sirainen <tss@iki.fi>
parents: 13689
diff changeset
104 {
0644361ca409 Added restrict_get_fd_limit()
Timo Sirainen <tss@iki.fi>
parents: 13689
diff changeset
105 struct rlimit rlim;
0644361ca409 Added restrict_get_fd_limit()
Timo Sirainen <tss@iki.fi>
parents: 13689
diff changeset
106
0644361ca409 Added restrict_get_fd_limit()
Timo Sirainen <tss@iki.fi>
parents: 13689
diff changeset
107 if (getrlimit(RLIMIT_NOFILE, &rlim) < 0) {
0644361ca409 Added restrict_get_fd_limit()
Timo Sirainen <tss@iki.fi>
parents: 13689
diff changeset
108 i_error("getrlimit(RLIMIT_NOFILE) failed: %m");
0644361ca409 Added restrict_get_fd_limit()
Timo Sirainen <tss@iki.fi>
parents: 13689
diff changeset
109 return -1;
0644361ca409 Added restrict_get_fd_limit()
Timo Sirainen <tss@iki.fi>
parents: 13689
diff changeset
110 }
0644361ca409 Added restrict_get_fd_limit()
Timo Sirainen <tss@iki.fi>
parents: 13689
diff changeset
111 *limit_r = rlim.rlim_cur;
0644361ca409 Added restrict_get_fd_limit()
Timo Sirainen <tss@iki.fi>
parents: 13689
diff changeset
112 return 0;
0644361ca409 Added restrict_get_fd_limit()
Timo Sirainen <tss@iki.fi>
parents: 13689
diff changeset
113 }