12 #include "auto_uids.h"
13 #include "auto_qmail.h"
14 #include "auto_break.h"
15 #include "auto_patrn.h"
16 #include "auto_spawn.h"
17 #include "auto_split.h"
33 if ((ch
< 32) || (ch
> 126)) ch
= '?';
34 substdio_put(subfdout
,&ch
,1);
40 void do_int(fn
,def
,pre
,post
)
47 substdio_puts(subfdout
,"\n");
48 substdio_puts(subfdout
,fn
);
49 substdio_puts(subfdout
,": ");
50 switch(control_readint(&i
,fn
)) {
52 substdio_puts(subfdout
,"(Default.) ");
53 substdio_puts(subfdout
,pre
);
54 substdio_puts(subfdout
,def
);
55 substdio_puts(subfdout
,post
);
56 substdio_puts(subfdout
,".\n");
60 substdio_puts(subfdout
,pre
);
61 substdio_put(subfdout
,num
,fmt_uint(num
,i
));
62 substdio_puts(subfdout
,post
);
63 substdio_puts(subfdout
,".\n");
66 substdio_puts(subfdout
,"Oops! Trouble reading this file.\n");
71 void do_str(fn
,flagme
,def
,pre
)
77 substdio_puts(subfdout
,"\n");
78 substdio_puts(subfdout
,fn
);
79 substdio_puts(subfdout
,": ");
80 switch(control_readline(&line
,fn
)) {
82 substdio_puts(subfdout
,"(Default.) ");
83 if (!stralloc_copys(&line
,def
)) {
84 substdio_puts(subfdout
,"Oops! Out of memory.\n");
88 if (!stralloc_copy(&line
,&me
)) {
89 substdio_puts(subfdout
,"Oops! Out of memory.\n");
93 substdio_puts(subfdout
,pre
);
94 safeput(line
.s
,line
.len
);
95 substdio_puts(subfdout
,".\n");
98 substdio_puts(subfdout
,"Oops! Trouble reading this file.\n");
103 int do_lst(fn
,def
,pre
,post
)
112 substdio_puts(subfdout
,"\n");
113 substdio_puts(subfdout
,fn
);
114 substdio_puts(subfdout
,": ");
115 switch(control_readfile(&line
,fn
)) {
117 substdio_puts(subfdout
,"(Default.) ");
118 substdio_puts(subfdout
,def
);
119 substdio_puts(subfdout
,"\n");
122 substdio_puts(subfdout
,"\n");
124 for (j
= 0;j
< line
.len
;++j
)
126 substdio_puts(subfdout
,pre
);
127 safeput(line
.s
+ i
,j
- i
);
128 substdio_puts(subfdout
,post
);
129 substdio_puts(subfdout
,"\n");
134 substdio_puts(subfdout
,"Oops! Trouble reading this file.\n");
144 struct stat stmrhcdb
;
146 substdio_puts(subfdout
,"qmail home directory: ");
147 substdio_puts(subfdout
,auto_qmail
);
148 substdio_puts(subfdout
,".\n");
150 substdio_puts(subfdout
,"user-ext delimiter: ");
151 substdio_puts(subfdout
,auto_break
);
152 substdio_puts(subfdout
,".\n");
154 substdio_puts(subfdout
,"paternalism (in decimal): ");
155 substdio_put(subfdout
,num
,fmt_ulong(num
,(unsigned long) auto_patrn
));
156 substdio_puts(subfdout
,".\n");
158 substdio_puts(subfdout
,"silent concurrency limit: ");
159 substdio_put(subfdout
,num
,fmt_ulong(num
,(unsigned long) auto_spawn
));
160 substdio_puts(subfdout
,".\n");
162 substdio_puts(subfdout
,"subdirectory split: ");
163 substdio_put(subfdout
,num
,fmt_ulong(num
,(unsigned long) auto_split
));
164 substdio_puts(subfdout
,".\n");
166 substdio_puts(subfdout
,"user ids: ");
167 substdio_put(subfdout
,num
,fmt_ulong(num
,(unsigned long) auto_uida
));
168 substdio_puts(subfdout
,", ");
169 substdio_put(subfdout
,num
,fmt_ulong(num
,(unsigned long) auto_uidd
));
170 substdio_puts(subfdout
,", ");
171 substdio_put(subfdout
,num
,fmt_ulong(num
,(unsigned long) auto_uidl
));
172 substdio_puts(subfdout
,", ");
173 substdio_put(subfdout
,num
,fmt_ulong(num
,(unsigned long) auto_uido
));
174 substdio_puts(subfdout
,", ");
175 substdio_put(subfdout
,num
,fmt_ulong(num
,(unsigned long) auto_uidp
));
176 substdio_puts(subfdout
,", ");
177 substdio_put(subfdout
,num
,fmt_ulong(num
,(unsigned long) auto_uidq
));
178 substdio_puts(subfdout
,", ");
179 substdio_put(subfdout
,num
,fmt_ulong(num
,(unsigned long) auto_uidr
));
180 substdio_puts(subfdout
,", ");
181 substdio_put(subfdout
,num
,fmt_ulong(num
,(unsigned long) auto_uids
));
182 substdio_puts(subfdout
,".\n");
184 substdio_puts(subfdout
,"group ids: ");
185 substdio_put(subfdout
,num
,fmt_ulong(num
,(unsigned long) auto_gidn
));
186 substdio_puts(subfdout
,", ");
187 substdio_put(subfdout
,num
,fmt_ulong(num
,(unsigned long) auto_gidq
));
188 substdio_puts(subfdout
,".\n");
190 if (chdir(auto_qmail
) == -1) {
191 substdio_puts(subfdout
,"Oops! Unable to chdir to ");
192 substdio_puts(subfdout
,auto_qmail
);
193 substdio_puts(subfdout
,".\n");
194 substdio_flush(subfdout
);
197 if (chdir("control") == -1) {
198 substdio_puts(subfdout
,"Oops! Unable to chdir to control.\n");
199 substdio_flush(subfdout
);
205 substdio_puts(subfdout
,"Oops! Unable to open current directory.\n");
206 substdio_flush(subfdout
);
210 meok
= control_readline(&me
,"me");
212 substdio_puts(subfdout
,"Oops! Trouble reading control/me.");
213 substdio_flush(subfdout
);
217 do_lst("badmailfrom","Any MAIL FROM is allowed.",""," not accepted in MAIL FROM.");
218 do_str("bouncefrom",0,"MAILER-DAEMON","Bounce user name is ");
219 do_str("bouncehost",1,"bouncehost","Bounce host name is ");
220 do_int("concurrencylocal","10","Local concurrency is ","");
221 do_int("concurrencyremote","20","Remote concurrency is ","");
222 do_int("databytes","0","SMTP DATA limit is "," bytes");
223 do_str("defaultdomain",1,"defaultdomain","Default domain name is ");
224 do_str("defaulthost",1,"defaulthost","Default host name is ");
225 do_str("doublebouncehost",1,"doublebouncehost","2B recipient host: ");
226 do_str("doublebounceto",0,"postmaster","2B recipient user: ");
227 do_str("envnoathost",1,"envnoathost","Presumed domain name is ");
228 do_str("helohost",1,"helohost","SMTP client HELO host name is ");
229 do_str("idhost",1,"idhost","Message-ID host name is ");
230 do_str("localiphost",1,"localiphost","Local IP address becomes ");
231 do_lst("locals","Messages for me are delivered locally.","Messages for "," are delivered locally.");
232 do_str("me",0,"undefined! Uh-oh","My name is ");
233 do_lst("percenthack","The percent hack is not allowed.","The percent hack is allowed for user%host@",".");
234 do_str("plusdomain",1,"plusdomain","Plus domain name is ");
235 do_lst("qmqpservers","No QMQP servers.","QMQP server: ",".");
236 do_int("queuelifetime","604800","Message lifetime in the queue is "," seconds");
238 if (do_lst("rcpthosts","SMTP clients may send messages to any recipient.","SMTP clients may send messages to recipients at ","."))
239 do_lst("morercpthosts","No effect.","SMTP clients may send messages to recipients at ",".");
241 do_lst("morercpthosts","No rcpthosts; morercpthosts is irrelevant.","No rcpthosts; doesn't matter that morercpthosts has ",".");
242 /* XXX: check morercpthosts.cdb contents */
243 substdio_puts(subfdout
,"\nmorercpthosts.cdb: ");
244 if (stat("morercpthosts",&stmrh
) == -1)
245 if (stat("morercpthosts.cdb",&stmrhcdb
) == -1)
246 substdio_puts(subfdout
,"(Default.) No effect.\n");
248 substdio_puts(subfdout
,"Oops! morercpthosts.cdb exists but morercpthosts doesn't.\n");
250 if (stat("morercpthosts.cdb",&stmrhcdb
) == -1)
251 substdio_puts(subfdout
,"Oops! morercpthosts exists but morercpthosts.cdb doesn't.\n");
253 if (stmrh
.st_mtime
> stmrhcdb
.st_mtime
)
254 substdio_puts(subfdout
,"Oops! morercpthosts.cdb is older than morercpthosts.\n");
256 substdio_puts(subfdout
,"Modified recently enough; hopefully up to date.\n");
258 do_lst("relayhosts","No relayhosts","Relay host: ","");
259 do_str("smtpgreeting",1,"smtpgreeting","SMTP greeting: 220 ");
260 do_lst("smtproutes","No artificial SMTP routes.","SMTP route: ","");
261 do_int("timeoutconnect","60","SMTP client connection timeout is "," seconds");
262 do_int("timeoutremote","1200","SMTP client data timeout is "," seconds");
263 do_int("timeoutsmtpd","1200","SMTP server data timeout is "," seconds");
264 do_lst("virtualdomains","No virtual domains.","Virtual domain: ","");
266 while (d
= readdir(dir
)) {
267 if (str_equal(d
->d_name
,".")) continue;
268 if (str_equal(d
->d_name
,"..")) continue;
269 if (str_equal(d
->d_name
,"bouncefrom")) continue;
270 if (str_equal(d
->d_name
,"bouncehost")) continue;
271 if (str_equal(d
->d_name
,"badmailfrom")) continue;
272 if (str_equal(d
->d_name
,"bouncefrom")) continue;
273 if (str_equal(d
->d_name
,"bouncehost")) continue;
274 if (str_equal(d
->d_name
,"concurrencylocal")) continue;
275 if (str_equal(d
->d_name
,"concurrencyremote")) continue;
276 if (str_equal(d
->d_name
,"databytes")) continue;
277 if (str_equal(d
->d_name
,"defaultdomain")) continue;
278 if (str_equal(d
->d_name
,"defaulthost")) continue;
279 if (str_equal(d
->d_name
,"doublebouncehost")) continue;
280 if (str_equal(d
->d_name
,"doublebounceto")) continue;
281 if (str_equal(d
->d_name
,"envnoathost")) continue;
282 if (str_equal(d
->d_name
,"helohost")) continue;
283 if (str_equal(d
->d_name
,"idhost")) continue;
284 if (str_equal(d
->d_name
,"localiphost")) continue;
285 if (str_equal(d
->d_name
,"locals")) continue;
286 if (str_equal(d
->d_name
,"me")) continue;
287 if (str_equal(d
->d_name
,"morercpthosts")) continue;
288 if (str_equal(d
->d_name
,"morercpthosts.cdb")) continue;
289 if (str_equal(d
->d_name
,"percenthack")) continue;
290 if (str_equal(d
->d_name
,"plusdomain")) continue;
291 if (str_equal(d
->d_name
,"qmqpservers")) continue;
292 if (str_equal(d
->d_name
,"queuelifetime")) continue;
293 if (str_equal(d
->d_name
,"rcpthosts")) continue;
294 if (str_equal(d
->d_name
,"relayhosts")) continue;
295 if (str_equal(d
->d_name
,"smtpgreeting")) continue;
296 if (str_equal(d
->d_name
,"smtproutes")) continue;
297 if (str_equal(d
->d_name
,"timeoutconnect")) continue;
298 if (str_equal(d
->d_name
,"timeoutremote")) continue;
299 if (str_equal(d
->d_name
,"timeoutsmtpd")) continue;
300 if (str_equal(d
->d_name
,"virtualdomains")) continue;
301 substdio_puts(subfdout
,"\n");
302 substdio_puts(subfdout
,d
->d_name
);
303 substdio_puts(subfdout
,": I have no idea what this file does.\n");
306 substdio_flush(subfdout
);