5 * \defgroup AdminConfig Administrative screen for site-wide configuration
13 * \brief display all configuration items
15 void display_siteconfig(void)
28 /** expire policy settings */
34 output_headers(1, 1, 2, 0, 0, 0);
35 wprintf("<div id=\"banner\">\n"
36 "<TABLE WIDTH=100%% BORDER=0 BGCOLOR=\"#444455\"><TR><TD>"
37 "<SPAN CLASS=\"titlebar\">");
38 wprintf(_("Site configuration"));
40 "</TD></TR></TABLE>\n"
41 "</div>\n<div id=\"content\">\n"
44 serv_printf("CONF get");
45 serv_getln(buf, sizeof buf);
47 wprintf("<TABLE WIDTH=100%% BORDER=0 BGCOLOR=\"#444455\"><TR><TD>");
48 wprintf("<SPAN CLASS=\"titlebar\">");
51 wprintf("</TD></TR></TABLE><br />\n");
52 wprintf("%s<br />\n", &buf[4]);
57 wprintf("<div class=\"fix_scrollbar_bug\">"
58 "<table border=0 width=100%% bgcolor=\"#ffffff\"><tr><td>");
67 _("Indexing/Journaling")
70 sprintf(general, "<center><h1>%s</h1><table border=\"0\">",
71 _("General site configuration items")
74 sprintf(access, "<center><h1>%s</h1><table border=\"0\">",
75 _("Access controls and site policy settings")
78 sprintf(network, "<center><h1>%s</h1><h2>%s</h2><table border=\"0\">",
79 _("Network services"),
80 _("Changes made on this screen will not take effect "
81 "until you restart the Citadel server.")
84 sprintf(tuning, "<center><h1>%s</h1><table border=\"0\">",
85 _("Advanced server fine-tuning controls")
88 sprintf(directory, "<center><h1>%s</h1><h2>%s</h2><table border=\"0\">",
89 _("Configure the LDAP connector for Citadel"),
90 _("Changes made on this screen will not take effect "
91 "until you restart the Citadel server.")
94 sprintf(purger, "<center><h1>%s</h1><h2>%s</h2><table border=\"0\">",
95 _("Configure automatic expiry of old messages"),
96 _("These settings may be overridden on a per-floor or per-room basis.")
99 sprintf(idxjnl, "<center><h1>%s</h1><h2>%s</h2><table border=\"0\">",
100 _("Indexing and Journaling"),
101 _("Warning: these facilities are resource intensive.")
105 wprintf("<form method=\"post\" action=\"siteconfig\">\n");
108 while (serv_getln(buf, sizeof buf), strcmp(buf, "000")) {
111 sprintf(&general[strlen(general)], "<TR><TD>");
112 sprintf(&general[strlen(general)], _("Node name"));
113 sprintf(&general[strlen(general)], "</TD><TD>");
114 sprintf(&general[strlen(general)], "<input type=\"text\" NAME=\"c_nodename\" MAXLENGTH=\"15\" VALUE=\"%s\">", buf);
115 sprintf(&general[strlen(general)], "</TD></TR>\n");
118 sprintf(&general[strlen(general)], "<TR><TD>");
119 sprintf(&general[strlen(general)], _("Fully qualified domain name"));
120 sprintf(&general[strlen(general)], "</TD><TD>");
121 sprintf(&general[strlen(general)], "<input type=\"text\" NAME=\"c_fqdn\" MAXLENGTH=\"63\" VALUE=\"%s\">", buf);
122 sprintf(&general[strlen(general)], "</TD></TR>\n");
125 sprintf(&general[strlen(general)], "<TR><TD>");
126 sprintf(&general[strlen(general)], _("Human-readable node name"));
127 sprintf(&general[strlen(general)], "</TD><TD>");
128 sprintf(&general[strlen(general)], "<input type=\"text\" NAME=\"c_humannode\" MAXLENGTH=\"20\" VALUE=\"%s\">", buf);
129 sprintf(&general[strlen(general)], "</TD></TR>\n");
132 sprintf(&general[strlen(general)], "<TR><TD>");
133 sprintf(&general[strlen(general)], _("Telephone number"));
134 sprintf(&general[strlen(general)], "</TD><TD>");
135 sprintf(&general[strlen(general)], "<input type=\"text\" NAME=\"c_phonenum\" MAXLENGTH=\"15\" VALUE=\"%s\">", buf);
136 sprintf(&general[strlen(general)], "</TD></TR>\n");
139 sprintf(&access[strlen(access)], "<TR><TD>");
140 sprintf(&access[strlen(access)], _("Automatically grant room-aide status to users who create private rooms"));
141 sprintf(&access[strlen(access)], "</TD><TD>");
142 sprintf(&access[strlen(access)], "<input type=\"checkbox\" NAME=\"c_creataide\" VALUE=\"yes\" %s>",
143 ((atoi(buf) != 0) ? "CHECKED" : ""));
144 sprintf(&access[strlen(access)], "</TD></TR>\n");
147 sprintf(&tuning[strlen(tuning)], "<TR><TD>");
148 sprintf(&tuning[strlen(tuning)], _("Server connection idle timeout (in seconds)"));
149 sprintf(&tuning[strlen(tuning)], "</TD><TD>");
150 sprintf(&tuning[strlen(tuning)], "<input type=\"text\" NAME=\"c_sleeping\" MAXLENGTH=\"15\" VALUE=\"%s\">", buf);
151 sprintf(&tuning[strlen(tuning)], "</TD></TR>\n");
154 sprintf(&access[strlen(access)], "<TR><TD>");
155 sprintf(&access[strlen(access)], _("Initial access level for new users"));
156 sprintf(&access[strlen(access)], "</TD><TD>");
157 sprintf(&access[strlen(access)], "<SELECT NAME=\"c_initax\" SIZE=\"1\">\n");
158 for (j=0; j<=6; ++j) {
159 sprintf(&access[strlen(access)], "<OPTION %s VALUE=\"%d\">%d - %s</OPTION>\n",
160 ((atoi(buf) == j) ? "SELECTED" : ""),
164 sprintf(&access[strlen(access)], "</SELECT>");
165 sprintf(&access[strlen(access)], "</TD></TR>\n");
168 sprintf(&access[strlen(access)], "<TR><TD>");
169 sprintf(&access[strlen(access)], _("Require registration for new users"));
170 sprintf(&access[strlen(access)], "</TD><TD>");
171 sprintf(&access[strlen(access)], "<input type=\"checkbox\" NAME=\"c_regiscall\" VALUE=\"yes\" %s>",
172 ((atoi(buf) != 0) ? "CHECKED" : ""));
173 sprintf(&access[strlen(access)], "</TD></TR>\n");
176 sprintf(&access[strlen(access)], "<TR><TD>");
177 sprintf(&access[strlen(access)], _("Quarantine messages from problem users"));
178 sprintf(&access[strlen(access)], "</TD><TD>");
179 sprintf(&access[strlen(access)], "<input type=\"checkbox\" NAME=\"c_twitdetect\" VALUE=\"yes\" %s>",
180 ((atoi(buf) != 0) ? "CHECKED" : ""));
181 sprintf(&access[strlen(access)], "</TD></TR>\n");
184 sprintf(&access[strlen(access)], "<TR><TD>");
185 sprintf(&access[strlen(access)], _("Name of quarantine room"));
186 sprintf(&access[strlen(access)], "</TD><TD>");
187 sprintf(&access[strlen(access)], "<input type=\"text\" NAME=\"c_twitroom\" MAXLENGTH=\"63\" VALUE=\"%s\">", buf);
188 sprintf(&access[strlen(access)], "</TD></TR>\n");
191 sprintf(&general[strlen(general)], "<TR><TD>");
192 sprintf(&general[strlen(general)], _("Paginator prompt (for text mode clients)"));
193 sprintf(&general[strlen(general)], "</TD><TD>");
194 sprintf(&general[strlen(general)], "<input type=\"text\" NAME=\"c_moreprompt\" MAXLENGTH=\"79\" VALUE=\"%s\">", buf);
195 sprintf(&general[strlen(general)], "</TD></TR>\n");
198 sprintf(&access[strlen(access)], "<TR><TD>");
199 sprintf(&access[strlen(access)], _("Restrict access to Internet mail"));
200 sprintf(&access[strlen(access)], "</TD><TD>");
201 sprintf(&access[strlen(access)], "<input type=\"checkbox\" NAME=\"c_restrict\" VALUE=\"yes\" %s>",
202 ((atoi(buf) != 0) ? "CHECKED" : ""));
203 sprintf(&access[strlen(access)], "</TD></TR>\n");
206 sprintf(&general[strlen(general)], "<TR><TD>");
207 sprintf(&general[strlen(general)], _("Geographic location of this system"));
208 sprintf(&general[strlen(general)], "</TD><TD>");
209 sprintf(&general[strlen(general)], "<input type=\"text\" NAME=\"c_bbs_city\" MAXLENGTH=\"31\" VALUE=\"%s\">", buf);
210 sprintf(&general[strlen(general)], "</TD></TR>\n");
213 sprintf(&general[strlen(general)], "<TR><TD>");
214 sprintf(&general[strlen(general)], _("Name of system administrator"));
215 sprintf(&general[strlen(general)], "</TD><TD>");
216 sprintf(&general[strlen(general)], "<input type=\"text\" NAME=\"c_sysadm\" MAXLENGTH=\"25\" VALUE=\"%s\">", buf);
217 sprintf(&general[strlen(general)], "</TD></TR>\n");
220 sprintf(&tuning[strlen(tuning)], "<TR><TD>");
221 sprintf(&tuning[strlen(tuning)], _("Maximum concurrent sessions (0 = no limit)"));
222 sprintf(&tuning[strlen(tuning)], "</TD><TD>");
223 sprintf(&tuning[strlen(tuning)], "<input type=\"text\" NAME=\"c_maxsessions\" MAXLENGTH=\"5\" VALUE=\"%s\">", buf);
224 sprintf(&tuning[strlen(tuning)], "</TD></TR>\n");
227 sprintf(&tuning[strlen(tuning)], "<TR><TD>");
228 sprintf(&tuning[strlen(tuning)], _("Default user purge time (days)"));
229 sprintf(&tuning[strlen(tuning)], "</TD><TD>");
230 sprintf(&tuning[strlen(tuning)], "<input type=\"text\" NAME=\"c_userpurge\" MAXLENGTH=\"5\" VALUE=\"%s\">", buf);
231 sprintf(&tuning[strlen(tuning)], "</TD></TR>\n");
234 sprintf(&tuning[strlen(tuning)], "<TR><TD>");
235 sprintf(&tuning[strlen(tuning)], _("Default room purge time (days)"));
236 sprintf(&tuning[strlen(tuning)], "</TD><TD>");
237 sprintf(&tuning[strlen(tuning)], "<input type=\"text\" NAME=\"c_roompurge\" MAXLENGTH=\"5\" VALUE=\"%s\">", buf);
238 sprintf(&tuning[strlen(tuning)], "</TD></TR>\n");
241 sprintf(&access[strlen(access)], "<TR><TD>");
242 sprintf(&access[strlen(access)], _("Name of room to log pages"));
243 sprintf(&access[strlen(access)], "</TD><TD>");
244 sprintf(&access[strlen(access)], "<input type=\"text\" NAME=\"c_logpages\" MAXLENGTH=\"63\" VALUE=\"%s\">", buf);
245 sprintf(&access[strlen(access)], "</TD></TR>\n");
248 sprintf(&access[strlen(access)], "<TR><TD>");
249 sprintf(&access[strlen(access)], _("Access level required to create rooms"));
250 sprintf(&access[strlen(access)], "</TD><TD>");
251 sprintf(&access[strlen(access)], "<SELECT NAME=\"c_createax\" SIZE=\"1\">\n");
252 for (j=0; j<=6; ++j) {
253 sprintf(&access[strlen(access)], "<OPTION %s VALUE=\"%d\">%d - %s</OPTION>\n",
254 ((atoi(buf) == j) ? "SELECTED" : ""),
258 sprintf(&access[strlen(access)], "</SELECT>");
259 sprintf(&access[strlen(access)], "</TD></TR>\n");
262 sprintf(&tuning[strlen(tuning)], "<TR><TD>");
263 sprintf(&tuning[strlen(tuning)], _("Maximum message length"));
264 sprintf(&tuning[strlen(tuning)], "</TD><TD>");
265 sprintf(&tuning[strlen(tuning)], "<input type=\"text\" NAME=\"c_maxmsglen\" MAXLENGTH=\"20\" VALUE=\"%s\">", buf);
266 sprintf(&tuning[strlen(tuning)], "</TD></TR>\n");
269 sprintf(&tuning[strlen(tuning)], "<TR><TD>");
270 sprintf(&tuning[strlen(tuning)], _("Minimum number of worker threads"));
271 sprintf(&tuning[strlen(tuning)], "</TD><TD>");
272 sprintf(&tuning[strlen(tuning)], "<input type=\"text\" NAME=\"c_min_workers\" MAXLENGTH=\"5\" VALUE=\"%s\">", buf);
273 sprintf(&tuning[strlen(tuning)], "</TD></TR>\n");
276 sprintf(&tuning[strlen(tuning)], "<TR><TD>");
277 sprintf(&tuning[strlen(tuning)], _("Maximum number of worker threads"));
278 sprintf(&tuning[strlen(tuning)], "</TD><TD>");
279 sprintf(&tuning[strlen(tuning)], "<input type=\"text\" NAME=\"c_max_workers\" MAXLENGTH=\"5\" VALUE=\"%s\">", buf);
280 sprintf(&tuning[strlen(tuning)], "</TD></TR>\n");
283 sprintf(&network[strlen(network)], "<TR><TD>");
284 sprintf(&network[strlen(network)], _("POP3 listener port (-1 to disable)"));
285 sprintf(&network[strlen(network)], "</TD><TD>");
286 sprintf(&network[strlen(network)], "<input type=\"text\" NAME=\"c_pop3_port\" MAXLENGTH=\"5\" VALUE=\"%s\">", buf);
287 sprintf(&network[strlen(network)], "</TD></TR>\n");
290 sprintf(&network[strlen(network)], "<TR><TD>");
291 sprintf(&network[strlen(network)], _("SMTP MTA port (-1 to disable)"));
292 sprintf(&network[strlen(network)], "</TD><TD>");
293 sprintf(&network[strlen(network)], "<input type=\"text\" NAME=\"c_smtp_port\" MAXLENGTH=\"5\" VALUE=\"%s\">", buf);
294 sprintf(&network[strlen(network)], "</TD></TR>\n");
296 case 25: /* note: reverse bool */
297 sprintf(&network[strlen(network)], "<TR><TD>");
298 sprintf(&network[strlen(network)], _("Correct forged From: lines during authenticated SMTP"));
299 sprintf(&network[strlen(network)], "</TD><TD>");
300 sprintf(&network[strlen(network)], "<input type=\"checkbox\" NAME=\"c_rfc822_strict_from\" VALUE=\"yes\" %s>",
301 ((atoi(buf) == 0) ? "CHECKED" : ""));
302 sprintf(&network[strlen(network)], "</TD></TR>\n");
305 sprintf(&access[strlen(access)], "<TR><TD>");
306 sprintf(&access[strlen(access)], _("Allow aides to zap (forget) rooms"));
307 sprintf(&access[strlen(access)], "</TD><TD>");
308 sprintf(&access[strlen(access)], "<input type=\"checkbox\" NAME=\"c_aide_zap\" VALUE=\"yes\" %s>",
309 ((atoi(buf) != 0) ? "CHECKED" : ""));
310 sprintf(&access[strlen(access)], "</TD></TR>\n");
313 sprintf(&network[strlen(network)], "<TR><TD>");
314 sprintf(&network[strlen(network)], _("IMAP listener port (-1 to disable)"));
315 sprintf(&network[strlen(network)], "</TD><TD>");
316 sprintf(&network[strlen(network)], "<input type=\"text\" NAME=\"c_imap_port\" MAXLENGTH=\"5\" VALUE=\"%s\">", buf);
317 sprintf(&network[strlen(network)], "</TD></TR>\n");
320 sprintf(&network[strlen(network)], "<TR><TD>");
321 sprintf(&network[strlen(network)], _("Network run frequency (in seconds)"));
322 sprintf(&network[strlen(network)], "</TD><TD>");
323 sprintf(&network[strlen(network)], "<input type=\"text\" NAME=\"c_net_freq\" MAXLENGTH=\"5\" VALUE=\"%s\">", buf);
324 sprintf(&network[strlen(network)], "</TD></TR>\n");
327 sprintf(&access[strlen(access)], "<TR><TD>");
328 sprintf(&access[strlen(access)], _("Disable self-service user account creation"));
329 sprintf(&access[strlen(access)], "</TD><TD>");
330 sprintf(&access[strlen(access)], "<input type=\"checkbox\" NAME=\"c_disable_newu\" VALUE=\"yes\" %s>",
331 ((atoi(buf) != 0) ? "CHECKED" : ""));
332 sprintf(&access[strlen(access)], "</TD></TR>\n");
335 sprintf(&purger[strlen(purger)], "<TR><TD>");
336 sprintf(&purger[strlen(purger)], _("Hour to run database auto-purge"));
337 sprintf(&purger[strlen(purger)], "</TD><TD>");
338 sprintf(&purger[strlen(purger)], "<SELECT NAME=\"c_purge_hour\" SIZE=\"1\">\n");
339 for (j=0; j<=23; ++j) {
340 sprintf(&purger[strlen(purger)], "<OPTION %s VALUE=\"%d\">%d:00%s</OPTION>\n",
341 ((atoi(buf) == j) ? "SELECTED" : ""),
343 ((j == 0) ? 12 : ((j>12) ? j-12 : j)),
344 ((j >= 12) ? "pm" : "am")
347 sprintf(&purger[strlen(purger)], "</SELECT>");
348 sprintf(&purger[strlen(purger)], "</TD></TR>\n");
351 sprintf(&directory[strlen(directory)], "<TR><TD>");
352 sprintf(&directory[strlen(directory)], _("Host name of LDAP server (blank to disable)"));
353 sprintf(&directory[strlen(directory)], "</TD><TD>");
354 sprintf(&directory[strlen(directory)], "<input type=\"text\" NAME=\"c_ldap_host\" MAXLENGTH=\"127\" VALUE=\"%s\">", buf);
355 sprintf(&directory[strlen(directory)], "</TD></TR>\n");
358 sprintf(&directory[strlen(directory)], "<TR><TD>");
359 sprintf(&directory[strlen(directory)], _("Port number of LDAP server (blank to disable)"));
360 sprintf(&directory[strlen(directory)], "</TD><TD>");
361 sprintf(&directory[strlen(directory)], "<input type=\"text\" NAME=\"c_ldap_port\" MAXLENGTH=\"127\" VALUE=\"%d\">", atoi(buf));
362 sprintf(&directory[strlen(directory)], "</TD></TR>\n");
365 sprintf(&directory[strlen(directory)], "<TR><TD>");
366 sprintf(&directory[strlen(directory)], _("Base DN"));
367 sprintf(&directory[strlen(directory)], "</TD><TD>");
368 sprintf(&directory[strlen(directory)], "<input type=\"text\" NAME=\"c_ldap_base_dn\" MAXLENGTH=\"255\" VALUE=\"%s\">", buf);
369 sprintf(&directory[strlen(directory)], "</TD></TR>\n");
372 sprintf(&directory[strlen(directory)], "<TR><TD>");
373 sprintf(&directory[strlen(directory)], _("Bind DN"));
374 sprintf(&directory[strlen(directory)], "</TD><TD>");
375 sprintf(&directory[strlen(directory)], "<input type=\"text\" NAME=\"c_ldap_bind_dn\" MAXLENGTH=\"255\" VALUE=\"%s\">", buf);
376 sprintf(&directory[strlen(directory)], "</TD></TR>\n");
379 sprintf(&directory[strlen(directory)], "<TR><TD>");
380 sprintf(&directory[strlen(directory)], _("Password for bind DN"));
381 sprintf(&directory[strlen(directory)], "</TD><TD>");
382 sprintf(&directory[strlen(directory)], "<input type=\"password\" NAME=\"c_ldap_bind_pw\" MAXLENGTH=\"255\" VALUE=\"%s\">",
384 sprintf(&directory[strlen(directory)], "</TD></TR>\n");
387 sprintf(&network[strlen(network)], "<TR><TD>");
388 sprintf(&network[strlen(network)], _("Server IP address (0.0.0.0 for 'any')"));
389 sprintf(&network[strlen(network)], "</TD><TD>");
390 sprintf(&network[strlen(network)], "<input type=\"text\" NAME=\"c_ip_addr\" MAXLENGTH=\"15\" VALUE=\"%s\">", buf);
391 sprintf(&network[strlen(network)], "</TD></TR>\n");
394 sprintf(&network[strlen(network)], "<TR><TD>");
395 sprintf(&network[strlen(network)], _("SMTP MSA port (-1 to disable)"));
396 sprintf(&network[strlen(network)], "</TD><TD>");
397 sprintf(&network[strlen(network)], "<input type=\"text\" NAME=\"c_msa_port\" MAXLENGTH=\"5\" VALUE=\"%s\">", buf);
398 sprintf(&network[strlen(network)], "</TD></TR>\n");
401 sprintf(&network[strlen(network)], "<TR><TD>");
402 sprintf(&network[strlen(network)], _("IMAP over SSL port (-1 to disable)"));
403 sprintf(&network[strlen(network)], "</TD><TD>");
404 sprintf(&network[strlen(network)], "<input type=\"text\" NAME=\"c_imaps_port\" MAXLENGTH=\"5\" VALUE=\"%s\">", buf);
405 sprintf(&network[strlen(network)], "</TD></TR>\n");
408 sprintf(&network[strlen(network)], "<TR><TD>");
409 sprintf(&network[strlen(network)], _("POP3 over SSL port (-1 to disable)"));
410 sprintf(&network[strlen(network)], "</TD><TD>");
411 sprintf(&network[strlen(network)], "<input type=\"text\" NAME=\"c_pop3s_port\" MAXLENGTH=\"5\" VALUE=\"%s\">", buf);
412 sprintf(&network[strlen(network)], "</TD></TR>\n");
415 sprintf(&network[strlen(network)], "<TR><TD>");
416 sprintf(&network[strlen(network)], _("SMTP over SSL port (-1 to disable)"));
417 sprintf(&network[strlen(network)], "</TD><TD>");
418 sprintf(&network[strlen(network)], "<input type=\"text\" NAME=\"c_smtps_port\" MAXLENGTH=\"5\" VALUE=\"%s\">", buf);
419 sprintf(&network[strlen(network)], "</TD></TR>\n");
422 sprintf(&idxjnl[strlen(idxjnl)], "<TR><TD>");
423 sprintf(&idxjnl[strlen(idxjnl)], _("Enable full text index"));
424 sprintf(&idxjnl[strlen(idxjnl)], "</TD><TD>");
425 sprintf(&idxjnl[strlen(idxjnl)], "<input type=\"checkbox\" NAME=\"c_enable_fulltext\" VALUE=\"yes\" %s>",
426 ((atoi(buf) != 0) ? "CHECKED" : ""));
427 sprintf(&idxjnl[strlen(idxjnl)], "</TD></TR>\n");
430 sprintf(&tuning[strlen(tuning)], "<TR><TD>");
431 sprintf(&tuning[strlen(tuning)], _("Automatically delete committed database logs"));
432 sprintf(&tuning[strlen(tuning)], "</TD><TD>");
433 sprintf(&tuning[strlen(tuning)], "<input type=\"checkbox\" NAME=\"c_auto_cull\" VALUE=\"yes\" %s>",
434 ((atoi(buf) != 0) ? "CHECKED" : ""));
435 sprintf(&tuning[strlen(tuning)], "</TD></TR>\n");
438 sprintf(&network[strlen(network)], "<TR><TD>");
439 sprintf(&network[strlen(network)], _("Instantly expunge deleted messages in IMAP"));
440 sprintf(&network[strlen(network)], "</TD><TD>");
441 sprintf(&network[strlen(network)], "<input type=\"checkbox\" NAME=\"c_instant_expunge\" VALUE=\"yes\" %s>",
442 ((atoi(buf) != 0) ? "CHECKED" : ""));
443 sprintf(&network[strlen(network)], "</TD></TR>\n");
446 sprintf(&network[strlen(network)], "<TR><TD>");
447 sprintf(&network[strlen(network)], _("Allow unauthenticated SMTP clients to spoof this site's domains"));
448 sprintf(&network[strlen(network)], "</TD><TD>");
449 sprintf(&network[strlen(network)], "<input type=\"checkbox\" NAME=\"c_allow_spoofing\" VALUE=\"yes\" %s>",
450 ((atoi(buf) != 0) ? "CHECKED" : ""));
451 sprintf(&network[strlen(network)], "</TD></TR>\n");
454 sprintf(&idxjnl[strlen(idxjnl)], "<TR><TD>");
455 sprintf(&idxjnl[strlen(idxjnl)], _("Perform journaling of email messages"));
456 sprintf(&idxjnl[strlen(idxjnl)], "</TD><TD>");
457 sprintf(&idxjnl[strlen(idxjnl)], "<input type=\"checkbox\" NAME=\"c_journal_email\" VALUE=\"yes\" %s>",
458 ((atoi(buf) != 0) ? "CHECKED" : ""));
459 sprintf(&idxjnl[strlen(idxjnl)], "</TD></TR>\n");
462 sprintf(&idxjnl[strlen(idxjnl)], "<TR><TD>");
463 sprintf(&idxjnl[strlen(idxjnl)], _("Perform journaling of non-email messages"));
464 sprintf(&idxjnl[strlen(idxjnl)], "</TD><TD>");
465 sprintf(&idxjnl[strlen(idxjnl)], "<input type=\"checkbox\" NAME=\"c_journal_pubmsgs\" VALUE=\"yes\" %s>",
466 ((atoi(buf) != 0) ? "CHECKED" : ""));
467 sprintf(&idxjnl[strlen(idxjnl)], "</TD></TR>\n");
470 sprintf(&idxjnl[strlen(idxjnl)], "<TR><TD>");
471 sprintf(&idxjnl[strlen(idxjnl)], _("Email destination of journalized messages"));
472 sprintf(&idxjnl[strlen(idxjnl)], "</TD><TD>");
473 sprintf(&idxjnl[strlen(idxjnl)], "<input type=\"text\" NAME=\"c_journal_dest\" MAXLENGTH=\"127\" VALUE=\"%s\">", buf);
474 sprintf(&idxjnl[strlen(idxjnl)], "</TD></TR>\n");
479 serv_puts("GPEX site");
480 serv_getln(buf, sizeof buf);
482 sitepolicy = extract_int(&buf[4], 0);
483 sitevalue = extract_int(&buf[4], 1);
486 serv_puts("GPEX mailboxes");
487 serv_getln(buf, sizeof buf);
489 mboxpolicy = extract_int(&buf[4], 0);
490 mboxvalue = extract_int(&buf[4], 1);
494 sprintf(&purger[strlen(purger)], "<TR><TD COLSPAN=2><hr /></TD></TR>\n");
496 sprintf(&purger[strlen(purger)], "<TR><TD>");
497 sprintf(&purger[strlen(purger)], _("Default message expire policy for public rooms"));
498 sprintf(&purger[strlen(purger)], "</TD><TD>");
499 sprintf(&purger[strlen(purger)], "<input type=\"radio\" NAME=\"sitepolicy\" VALUE=\"1\" %s>",
500 ((sitepolicy == 1) ? "CHECKED" : "") );
501 sprintf(&purger[strlen(purger)], _("Never automatically expire messages"));
502 sprintf(&purger[strlen(purger)], "<br />\n");
503 sprintf(&purger[strlen(purger)], "<input type=\"radio\" NAME=\"sitepolicy\" VALUE=\"2\" %s>",
504 ((sitepolicy == 2) ? "CHECKED" : "") );
505 sprintf(&purger[strlen(purger)], _("Expire by message count"));
506 sprintf(&purger[strlen(purger)], "<br />\n");
507 sprintf(&purger[strlen(purger)], "<input type=\"radio\" NAME=\"sitepolicy\" VALUE=\"3\" %s>",
508 ((sitepolicy == 3) ? "CHECKED" : "") );
509 sprintf(&purger[strlen(purger)], _("Expire by message age"));
510 sprintf(&purger[strlen(purger)], "<br />");
511 sprintf(&purger[strlen(purger)], _("Number of messages or days: "));
512 sprintf(&purger[strlen(purger)], "<input type=\"text\" NAME=\"sitevalue\" MAXLENGTH=\"5\" VALUE=\"%d\">", sitevalue);
513 sprintf(&purger[strlen(purger)], "</TD></TR>\n");
515 sprintf(&purger[strlen(purger)], "<TR><TD COLSPAN=2><hr /></TD></TR>\n");
517 sprintf(&purger[strlen(purger)], "<TR><TD>");
518 sprintf(&purger[strlen(purger)], _("Default message expire policy for private mailboxes"));
519 sprintf(&purger[strlen(purger)], "</TD><TD>");
520 sprintf(&purger[strlen(purger)], "<input type=\"radio\" NAME=\"mboxpolicy\" VALUE=\"0\" %s>",
521 ((mboxpolicy == 0) ? "CHECKED" : "") );
522 sprintf(&purger[strlen(purger)], _("Same policy as public rooms"));
523 sprintf(&purger[strlen(purger)], "<br />\n");
524 sprintf(&purger[strlen(purger)], "<input type=\"radio\" NAME=\"mboxpolicy\" VALUE=\"1\" %s>",
525 ((mboxpolicy == 1) ? "CHECKED" : "") );
526 sprintf(&purger[strlen(purger)], _("Never automatically expire messages"));
527 sprintf(&purger[strlen(purger)], "<br />\n");
528 sprintf(&purger[strlen(purger)], "<input type=\"radio\" NAME=\"mboxpolicy\" VALUE=\"2\" %s>",
529 ((mboxpolicy == 2) ? "CHECKED" : "") );
530 sprintf(&purger[strlen(purger)], _("Expire by message count"));
531 sprintf(&purger[strlen(purger)], "<br />\n");
532 sprintf(&purger[strlen(purger)], "<input type=\"radio\" NAME=\"mboxpolicy\" VALUE=\"3\" %s>",
533 ((mboxpolicy == 3) ? "CHECKED" : "") );
534 sprintf(&purger[strlen(purger)], _("Expire by message age"));
535 sprintf(&purger[strlen(purger)], "<br />");
536 sprintf(&purger[strlen(purger)], _("Number of messages or days: "));
537 sprintf(&purger[strlen(purger)], "<input type=\"text\" NAME=\"mboxvalue\" MAXLENGTH=\"5\" VALUE=\"%d\">", mboxvalue);
538 sprintf(&purger[strlen(purger)], "</TD></TR>\n");
540 sprintf(&purger[strlen(purger)], "<TR><TD COLSPAN=2><hr /></TD></TR>\n");
543 sprintf(&general[strlen(general)], "</table>");
544 sprintf(&access[strlen(access)], "</table>");
545 sprintf(&network[strlen(network)], "</table>");
546 sprintf(&tuning[strlen(tuning)], "</table>");
547 sprintf(&directory[strlen(directory)], "</table>");
548 sprintf(&purger[strlen(purger)], "</table>");
549 sprintf(&idxjnl[strlen(idxjnl)], "</table>");
551 tabbed_dialog(7, tabnames);
553 begin_tab(0, 7); wprintf("%s", general); end_tab(0, 7);
554 begin_tab(1, 7); wprintf("%s", access); end_tab(1, 7);
555 begin_tab(2, 7); wprintf("%s", network); end_tab(2, 7);
556 begin_tab(3, 7); wprintf("%s", tuning); end_tab(3, 7);
557 begin_tab(4, 7); wprintf("%s", directory); end_tab(4, 7);
558 begin_tab(5, 7); wprintf("%s", purger); end_tab(5, 7);
559 begin_tab(6, 7); wprintf("%s", idxjnl); end_tab(6, 7);
561 wprintf("<div align=\"center\"><br>");
562 wprintf("<input type=\"submit\" NAME=\"ok_button\" VALUE=\"%s\">", _("Save changes"));
564 wprintf("<input type=\"submit\" NAME=\"cancel_button\" VALUE=\"%s\">\n", _("Cancel"));
565 wprintf("</div></FORM>\n");
566 wprintf("</td></tr></table></div>\n");
571 * parse siteconfig changes
573 void siteconfig(void)
577 if (strlen(bstr("ok_button")) == 0) {
581 serv_printf("CONF set");
582 serv_getln(buf, sizeof buf);
584 safestrncpy(WC->ImportantMessage, &buf[4], sizeof WC->ImportantMessage);
588 serv_printf("%s", bstr("c_nodename"));
589 serv_printf("%s", bstr("c_fqdn"));
590 serv_printf("%s", bstr("c_humannode"));
591 serv_printf("%s", bstr("c_phonenum"));
592 serv_printf("%s", ((!strcasecmp(bstr("c_creataide"), "yes") ? "1" : "0")));
593 serv_printf("%s", bstr("c_sleeping"));
594 serv_printf("%s", bstr("c_initax"));
595 serv_printf("%s", ((!strcasecmp(bstr("c_regiscall"), "yes") ? "1" : "0")));
596 serv_printf("%s", ((!strcasecmp(bstr("c_twitdetect"), "yes") ? "1" : "0")));
597 serv_printf("%s", bstr("c_twitroom"));
598 serv_printf("%s", bstr("c_moreprompt"));
599 serv_printf("%s", ((!strcasecmp(bstr("c_restrict"), "yes") ? "1" : "0")));
600 serv_printf("%s", bstr("c_bbs_city"));
601 serv_printf("%s", bstr("c_sysadm"));
602 serv_printf("%s", bstr("c_maxsessions"));
603 serv_printf(""); /* placeholder - this field is not in use */
604 serv_printf("%s", bstr("c_userpurge"));
605 serv_printf("%s", bstr("c_roompurge"));
606 serv_printf("%s", bstr("c_logpages"));
607 serv_printf("%s", bstr("c_createax"));
608 serv_printf("%s", bstr("c_maxmsglen"));
609 serv_printf("%s", bstr("c_min_workers"));
610 serv_printf("%s", bstr("c_max_workers"));
611 serv_printf("%s", bstr("c_pop3_port"));
612 serv_printf("%s", bstr("c_smtp_port"));
613 serv_printf("%s", ((!strcasecmp(bstr("c_rfc822_strict_from"), "yes") ? "0" : "1"))); /* note: reverse bool */
614 serv_printf("%s", ((!strcasecmp(bstr("c_aide_zap"), "yes") ? "1" : "0")));
615 serv_printf("%s", bstr("c_imap_port"));
616 serv_printf("%s", bstr("c_net_freq"));
617 serv_printf("%s", ((!strcasecmp(bstr("c_disable_newu"), "yes") ? "1" : "0")));
618 serv_printf("1"); /* placeholder - this field is not in use */
619 serv_printf("%s", bstr("c_purge_hour"));
620 serv_printf("%s", bstr("c_ldap_host"));
621 serv_printf("%s", bstr("c_ldap_port"));
622 serv_printf("%s", bstr("c_ldap_base_dn"));
623 serv_printf("%s", bstr("c_ldap_bind_dn"));
624 serv_printf("%s", bstr("c_ldap_bind_pw"));
625 serv_printf("%s", bstr("c_ip_addr"));
626 serv_printf("%s", bstr("c_msa_port"));
627 serv_printf("%s", bstr("c_imaps_port"));
628 serv_printf("%s", bstr("c_pop3s_port"));
629 serv_printf("%s", bstr("c_smtps_port"));
630 serv_printf("%s", ((!strcasecmp(bstr("c_enable_fulltext"), "yes") ? "1" : "0")));
631 serv_printf("%s", ((!strcasecmp(bstr("c_auto_cull"), "yes") ? "1" : "0")));
632 serv_printf("%s", ((!strcasecmp(bstr("c_instant_expunge"), "yes") ? "1" : "0")));
633 serv_printf("%s", ((!strcasecmp(bstr("c_allow_spoofing"), "yes") ? "1" : "0")));
634 serv_printf("%s", ((!strcasecmp(bstr("c_journal_email"), "yes") ? "1" : "0")));
635 serv_printf("%s", ((!strcasecmp(bstr("c_journal_pubmsgs"), "yes") ? "1" : "0")));
636 serv_printf("%s", bstr("c_journal_dest"));
639 serv_printf("SPEX site|%d|%d", atoi(bstr("sitepolicy")), atoi(bstr("sitevalue")));
640 serv_getln(buf, sizeof buf);
641 serv_printf("SPEX mailboxes|%d|%d", atoi(bstr("mboxpolicy")), atoi(bstr("mboxvalue")));
642 serv_getln(buf, sizeof buf);
644 safestrncpy(WC->ImportantMessage, _("Your system configuration has been updated."),
645 sizeof WC->ImportantMessage);