32 if ((ch < 32) || (ch > 126)) ch =
'?';
33 buffer_put(buffer_1,&ch,1);
39void do_int(
char *
fn,
char *def,
char *pre,
char *post)
42 buffer_puts(buffer_1,
"\n");
43 buffer_puts(buffer_1,
fn);
44 buffer_puts(buffer_1,
": ");
47 buffer_puts(buffer_1,
"(Default.) ");
48 buffer_puts(buffer_1,pre);
49 buffer_puts(buffer_1,def);
50 buffer_puts(buffer_1,post);
51 buffer_puts(buffer_1,
".\n");
55 buffer_puts(buffer_1,pre);
56 buffer_put(buffer_1,
num,fmt_uint(
num,i));
57 buffer_puts(buffer_1,post);
58 buffer_puts(buffer_1,
".\n");
61 buffer_puts(buffer_1,
"Oops! Trouble reading this file.\n");
66void do_str(
char *
fn,
int flagme,
char *def,
char *pre)
68 buffer_puts(buffer_1,
"\n");
69 buffer_puts(buffer_1,
fn);
70 buffer_puts(buffer_1,
": ");
73 buffer_puts(buffer_1,
"(Default.) ");
75 buffer_puts(buffer_1,
"Oops! Out of memory.\n");
79 if (!stralloc_copy(&
line,&
me)) {
80 buffer_puts(buffer_1,
"Oops! Out of memory.\n");
84 buffer_puts(buffer_1,pre);
86 buffer_puts(buffer_1,
".\n");
89 buffer_puts(buffer_1,
"Oops! Trouble reading this file.\n");
94int do_lst(
char *
fn,
char *def,
char *pre,
char *post)
99 buffer_puts(buffer_1,
"\n");
100 buffer_puts(buffer_1,
fn);
101 buffer_puts(buffer_1,
": ");
104 buffer_puts(buffer_1,
"(Default.) ");
105 buffer_puts(buffer_1,def);
106 buffer_puts(buffer_1,
"\n");
109 buffer_puts(buffer_1,
"\n");
113 buffer_puts(buffer_1,pre);
115 buffer_puts(buffer_1,post);
116 buffer_puts(buffer_1,
"\n");
121 buffer_puts(buffer_1,
"Oops! Trouble reading this file.\n");
131 struct stat stmrhcdb;
133 buffer_puts(buffer_1,
"s/qmail home directory: ");
135 buffer_puts(buffer_1,
".\n");
137 buffer_puts(buffer_1,
"user-ext delimiter: ");
139 buffer_puts(buffer_1,
".\n");
141 buffer_puts(buffer_1,
"paternalism (in decimal): ");
143 buffer_puts(buffer_1,
".\n");
145 buffer_puts(buffer_1,
"silent concurrency limit: ");
147 buffer_puts(buffer_1,
".\n");
149 buffer_puts(buffer_1,
"subdirectory split: ");
151 buffer_puts(buffer_1,
".\n");
153 buffer_puts(buffer_1,
"user ids: ");
155 buffer_puts(buffer_1,
", ");
157 buffer_puts(buffer_1,
", ");
159 buffer_puts(buffer_1,
", ");
161 buffer_puts(buffer_1,
", ");
163 buffer_puts(buffer_1,
", ");
165 buffer_puts(buffer_1,
", ");
167 buffer_puts(buffer_1,
", ");
169 buffer_puts(buffer_1,
".\n");
171 buffer_puts(buffer_1,
"group ids: ");
173 buffer_puts(buffer_1,
", ");
175 buffer_puts(buffer_1,
".\n");
178 buffer_puts(buffer_1,
"Oops! Unable to chdir to ");
180 buffer_puts(buffer_1,
".\n");
181 buffer_flush(buffer_1);
184 if (chdir(
"control") == -1) {
185 buffer_puts(buffer_1,
"Oops! Unable to chdir to control.\n");
186 buffer_flush(buffer_1);
192 buffer_puts(buffer_1,
"Oops! Unable to open current directory.\n");
193 buffer_flush(buffer_1);
199 buffer_puts(buffer_1,
"Oops! Trouble reading control/me.");
200 buffer_flush(buffer_1);
204 do_lst(
"authsenders",
"No authenticated SMTP senders.",
"Authenticated SMTP senders: ",
"");
205 do_lst(
"badhelo",
"Any HELO/EHLO greeting is allowed.",
"",
" not accepted in HELO/EHLO; exception token is '!'.");
206 do_lst(
"badmailfrom",
"Any MAIL FROM is allowed.",
"",
" are rejected or treated special in MAIL FROM depending on tokens: '!', '?', '=', '~', '+'.");
207 do_lst(
"badloadertypes",
"Any loader types are accepted.",
"",
" not accepted as loader type.");
209 buffer_puts(buffer_1,
"\nbadloadertypes.cdb: ");
210 if (stat(
"badloadertypes",&stmrh) == -1)
211 if (stat(
"badloadertypes.cdb",&stmrhcdb) == -1)
212 buffer_puts(buffer_1,
"(Default.) No effect.\n");
214 buffer_puts(buffer_1,
"Oops! badloadertypes.cdb exists but badloadertypes doesn't.\n");
216 if (stat(
"badloadertypes.cdb",&stmrhcdb) == -1)
217 buffer_puts(buffer_1,
"Oops! badloadertypes exists but badloadertypes.cdb doesn't.\n");
219 if (stmrh.st_mtime > stmrhcdb.st_mtime)
220 buffer_puts(buffer_1,
"Oops! badloadertypes.cdb is older than badloadertypes.\n");
222 buffer_puts(buffer_1,
"Modified recently enough; hopefully up to date.\n");
223 do_lst(
"badmimetypes",
"Any MIME types are accepted.",
"",
" not accepted as MIME type.");
225 buffer_puts(buffer_1,
"\nbadmimetypes.cdb: ");
226 if (stat(
"badmimetypes",&stmrh) == -1)
227 if (stat(
"badmimetypes.cdb",&stmrhcdb) == -1)
228 buffer_puts(buffer_1,
"(Default.) No effect.\n");
230 buffer_puts(buffer_1,
"Oops! badmimetypes.cdb exists but badmimetypes doesn't.\n");
232 if (stat(
"badmimetypes.cdb",&stmrhcdb) == -1)
233 buffer_puts(buffer_1,
"Oops! badmimetypes exists but badmimetypes.cdb doesn't.\n");
235 if (stmrh.st_mtime > stmrhcdb.st_mtime)
236 buffer_puts(buffer_1,
"Oops! badmimetypes.cdb is older than badmimetypes.\n");
238 buffer_puts(buffer_1,
"Modified recently enough; hopefully up to date.\n");
239 do_lst(
"badrcptto",
"Any RCPT TO is allowed.",
"",
" not accepted in RCPT TO.");
240 do_str(
"bouncefrom",0,
"MAILER-DAEMON",
"Bounce user name is ");
241 do_str(
"bouncehost",1,
"bouncehost",
"Bounce host name is ");
242 do_int(
"bouncemaxbytes",
"0",
"Bounce size limit is ",
" bytes");
243 do_int(
"concurrencylocal",
"10",
"Local concurrency is ",
"");
244 do_int(
"concurrencyremote",
"20",
"Remote concurrency is ",
"");
245 do_int(
"databytes",
"0",
"SMTP DATA limit is ",
" bytes");
246 do_str(
"defaultdomain",1,
"defaultdomain",
"Default domain name is ");
247 do_str(
"defaulthost",1,
"defaulthost",
"Default host name is ");
248 do_lst(
"dkimdomains",
"No DKIM domains defined for signing.",
"DKIM domains: ",
"");
249 do_lst(
"domaincerts",
"No domain certs defined.",
"Domain certs: ",
"");
250 do_lst(
"domainips",
"No domain ip mappings defined.",
"Mappping sender domain part to local ip: ",
"");
251 do_str(
"doublebouncehost",1,
"doublebouncehost",
"2B recipient host: ");
252 do_str(
"doublebounceto",0,
"postmaster",
"2B recipient user: ");
253 do_str(
"envnoathost",1,
"envnoathost",
"Presumed domain name is ");
254 do_str(
"helohost",1,
"helohost",
"SMTP client HELO host name is ");
255 do_str(
"idhost",1,
"idhost",
"Message-ID host name is ");
256 do_str(
"localiphost",1,
"localiphost",
"Local IP address becomes ");
257 do_lst(
"locals",
"Messages for me are delivered locally.",
"Messages for ",
" are delivered locally.");
258 do_str(
"me",0,
"undefined! Uh-oh",
"My name is ");
260 do_lst(
"mailfromrules",
"Any envelope sender are accepted.",
"",
" (MAV rule).");
262 buffer_puts(buffer_1,
"\nmailfromrules.cdb: ");
263 if (stat(
"mailfromrules",&stmrh) == -1)
264 if (stat(
"mailfromrules.cdb",&stmrhcdb) == -1)
265 buffer_puts(buffer_1,
"(Default.) No effect.\n");
267 buffer_puts(buffer_1,
"Oops! mailfromrules.cdb exists but mailfromrules doesn't.\n");
269 if (stat(
"mailfromrules.cdb",&stmrhcdb) == -1)
270 buffer_puts(buffer_1,
"Oops! mailfromrules exists but mailfromrules.cdb doesn't.\n");
272 if (stmrh.st_mtime > stmrhcdb.st_mtime)
273 buffer_puts(buffer_1,
"Oops! mailfromrules.cdb is older than mailfromrules.\n");
275 buffer_puts(buffer_1,
"Modified recently enough; hopefully up to date.\n");
277 do_lst(
"percenthack",
"The percent hack is not allowed.",
"The percent hack is allowed for user%host@",
".");
278 do_str(
"plusdomain",1,
"plusdomain",
"Plus domain name is ");
279 do_lst(
"qmqpservers",
"No QMQP servers.",
"QMQP server: ",
".");
280 do_int(
"queuelifetime",
"604800",
"Message lifetime in the queue is ",
" seconds");
282 if (
do_lst(
"rcpthosts",
"SMTP clients may send messages to any recipient.",
"SMTP clients may send messages to recipients at ",
"."))
283 do_lst(
"morercpthosts",
"No effect.",
"SMTP clients may send messages to recipients at ",
".");
285 do_lst(
"morercpthosts",
"No rcpthosts; morercpthosts is irrelevant.",
"No rcpthosts; doesn't matter that morercpthosts has ",
".");
287 buffer_puts(buffer_1,
"\nmorercpthosts.cdb: ");
288 if (stat(
"morercpthosts",&stmrh) == -1)
289 if (stat(
"morercpthosts.cdb",&stmrhcdb) == -1)
290 buffer_puts(buffer_1,
"(Default.) No effect.\n");
292 buffer_puts(buffer_1,
"Oops! morercpthosts.cdb exists but morercpthosts doesn't.\n");
294 if (stat(
"morercpthosts.cdb",&stmrhcdb) == -1)
295 buffer_puts(buffer_1,
"Oops! morercpthosts exists but morercpthosts.cdb doesn't.\n");
297 if (stmrh.st_mtime > stmrhcdb.st_mtime)
298 buffer_puts(buffer_1,
"Oops! morercpthosts.cdb is older than morercpthosts.\n");
300 buffer_puts(buffer_1,
"Modified recently enough; hopefully up to date.\n");
301 do_lst(
"recipients",
"SMTP clients may send messages to any recipient.",
"SMTP clients may send messages to local recipients listed in ",
".");
302 do_str(
"smtpgreeting",1,
"smtpgreeting",
"SMTP greeting: 220 ");
303 do_lst(
"qmtproutes",
"No additional QMTP routes.",
"QMTP route: ",
"");
304 do_lst(
"smtproutes",
"No artificial SMTP routes.",
"SMTP route: ",
"");
306 do_str(
"spflocalrules",0,
"(None)",
"Defined local SPF rules are: ");
307 do_lst(
"srsdomains",
"No SRS fowarding rules.",
"SRS rules: ",
"");
308 do_int(
"timeoutconnect",
"60",
"SMTP client connection timeout is ",
" seconds");
309 do_int(
"timeoutremote",
"1200",
"SMTP client data timeout is ",
" seconds");
310 do_int(
"timeoutsmtpd",
"1200",
"SMTP server data timeout is ",
" seconds");
311 do_lst(
"tlsdestinations",
"No TLS destinations defined.",
"TLS destination: ",
"");
312 do_lst(
"virtualdomains",
"No virtual domains.",
"Virtual domain: ",
"");
314 while ((
d = readdir(dir))) {
315 if (str_equal(
d->d_name,
"."))
continue;
316 if (str_equal(
d->d_name,
".."))
continue;
317 if (str_equal(
d->d_name,
"authsenders"))
continue;
318 if (str_equal(
d->d_name,
"badhelo"))
continue;
319 if (str_equal(
d->d_name,
"badrcptto"))
continue;
320 if (str_equal(
d->d_name,
"badmailfrom"))
continue;
321 if (str_equal(
d->d_name,
"badloadertypes"))
continue;
322 if (str_equal(
d->d_name,
"badloadertypes.cdb"))
continue;
323 if (str_equal(
d->d_name,
"badmimetypes"))
continue;
324 if (str_equal(
d->d_name,
"badmimetypes.cdb"))
continue;
325 if (str_equal(
d->d_name,
"bouncefrom"))
continue;
326 if (str_equal(
d->d_name,
"bouncehost"))
continue;
327 if (str_equal(
d->d_name,
"bouncemaxbytes"))
continue;
328 if (str_equal(
d->d_name,
"concurrencylocal"))
continue;
329 if (str_equal(
d->d_name,
"concurrencyremote"))
continue;
330 if (str_equal(
d->d_name,
"databytes"))
continue;
331 if (str_equal(
d->d_name,
"defaultdomain"))
continue;
332 if (str_equal(
d->d_name,
"defaulthost"))
continue;
333 if (str_equal(
d->d_name,
"dkimdomains"))
continue;
334 if (str_equal(
d->d_name,
"domainips"))
continue;
335 if (str_equal(
d->d_name,
"domaincerts"))
continue;
336 if (str_equal(
d->d_name,
"doublebouncehost"))
continue;
337 if (str_equal(
d->d_name,
"doublebounceto"))
continue;
338 if (str_equal(
d->d_name,
"envnoathost"))
continue;
339 if (str_equal(
d->d_name,
"helohost"))
continue;
340 if (str_equal(
d->d_name,
"idhost"))
continue;
341 if (str_equal(
d->d_name,
"localiphost"))
continue;
342 if (str_equal(
d->d_name,
"locals"))
continue;
343 if (str_equal(
d->d_name,
"me"))
continue;
344 if (str_equal(
d->d_name,
"mailfromrules"))
continue;
345 if (str_equal(
d->d_name,
"mailfromrules.cdb"))
continue;
346 if (str_equal(
d->d_name,
"morercpthosts"))
continue;
347 if (str_equal(
d->d_name,
"morercpthosts.cdb"))
continue;
348 if (str_equal(
d->d_name,
"percenthack"))
continue;
349 if (str_equal(
d->d_name,
"plusdomain"))
continue;
350 if (str_equal(
d->d_name,
"qmqpservers"))
continue;
351 if (str_equal(
d->d_name,
"queuelifetime"))
continue;
352 if (str_equal(
d->d_name,
"rcpthosts"))
continue;
353 if (str_equal(
d->d_name,
"recipients"))
continue;
354 if (str_equal(
d->d_name,
"smtpgreeting"))
continue;
355 if (str_equal(
d->d_name,
"qmtproutes"))
continue;
356 if (str_equal(
d->d_name,
"smtproutes"))
continue;
357 if (str_equal(
d->d_name,
"spfexplain"))
continue;
358 if (str_equal(
d->d_name,
"spflocalrules"))
continue;
359 if (str_equal(
d->d_name,
"srsdomains"))
continue;
360 if (str_equal(
d->d_name,
"timeoutconnect"))
continue;
361 if (str_equal(
d->d_name,
"timeoutremote"))
continue;
362 if (str_equal(
d->d_name,
"timeoutsmtpd"))
continue;
363 if (str_equal(
d->d_name,
"tlsdestinations"))
continue;
364 if (str_equal(
d->d_name,
"virtualdomains"))
continue;
365 buffer_puts(buffer_1,
"\n");
366 buffer_puts(buffer_1,
d->d_name);
367 buffer_puts(buffer_1,
": I have no idea what this file does.\n");
370 buffer_flush(buffer_1);
int control_readint(unsigned long *i, char *fn)
int control_readline(stralloc *sa, char *fn)
int control_readfile(stralloc *sa, char *fn, int flagme)
int stralloc_copys(stralloc *, char const *)
int do_lst(char *fn, char *def, char *pre, char *post)
void safeput(char *buf, unsigned int len)
void do_str(char *fn, int flagme, char *def, char *pre)
void do_int(char *fn, char *def, char *pre, char *post)