* siteconfig.c: began i18n
[citadel.git] / webcit / siteconfig.c
1 /*
2  * $Id$
3  *
4  * Administrative screen for site-wide configuration
5  *
6  */
7
8
9 #include "webcit.h"
10
11
12 void display_siteconfig(void)
13 {
14         char buf[SIZ];
15         char *whichmenu;
16         int i, j;
17
18         /* expire policy settings */
19         int sitepolicy = 0;
20         int sitevalue = 0;
21         int mboxpolicy = 0;
22         int mboxvalue = 0;
23
24         output_headers(1, 1, 2, 0, 0, 0, 0);
25         wprintf("<div id=\"banner\">\n"
26                 "<TABLE WIDTH=100%% BORDER=0 BGCOLOR=\"#444455\"><TR><TD>"
27                 "<SPAN CLASS=\"titlebar\">");
28         wprintf(_("Site configuration"));
29         wprintf("</SPAN>"
30                 "</TD></TR></TABLE>\n"
31                 "</div>\n<div id=\"content\">\n"
32         );
33
34         wprintf("<div id=\"fix_scrollbar_bug\">"
35                 "<table border=0 width=100%% bgcolor=\"#ffffff\"><tr><td>");
36
37         whichmenu = bstr("whichmenu");
38
39         if (!strcmp(whichmenu, "")) {
40                 wprintf("<TABLE border=0 cellspacing=0 cellpadding=3 width=100%%>\n");
41
42                 wprintf("<TR BGCOLOR=\"#CCCCCC\"><TD>"
43                         "<A HREF=\"/display_siteconfig?whichmenu=general\">"
44                         "<IMG BORDER=\"0\" WIDTH=\"48\" HEIGHT=\"48\" "
45                         "SRC=\"/static/advanpage2_48x.gif\" ALT=\"&nbsp;\">"
46                         "</TD><TD>"
47                         "<A HREF=\"/display_siteconfig?whichmenu=general\">"
48                         "<B>%s</B><br />"
49                         "%s"
50                         "</A></TD></TR>\n",
51                         _("General"),
52                         _("General site configuration items")
53                 );
54
55                 wprintf("<TR><TD>"
56                         "<A HREF=\"/display_siteconfig?whichmenu=access\">"
57                         "<IMG BORDER=\"0\" WIDTH=\"48\" HEIGHT=\"48\" "
58                         "SRC=\"/static/advanpage2_48x.gif\" ALT=\"&nbsp;\">"
59                         "</TD><TD>"
60                         "<A HREF=\"/display_siteconfig?whichmenu=access\">"
61                         "<B>%s</B><br />"
62                         "%s"
63                         "</A></TD></TR>\n",
64                         _("Access"),
65                         _("Access controls and site policy settings")
66                 );
67
68                 wprintf("<TR BGCOLOR=\"#CCCCCC\"><TD>"
69                         "<A HREF=\"/display_siteconfig?whichmenu=network\">"
70                         "<IMG BORDER=\"0\" WIDTH=\"48\" HEIGHT=\"48\" "
71                         "SRC=\"/static/advanpage2_48x.gif\" ALT=\"&nbsp;\">"
72                         "</TD><TD>"
73                         "<A HREF=\"/display_siteconfig?whichmenu=network\">"
74                         "<B>%s</B><br />"
75                         "%s"
76                         "</A></TD></TR>\n",
77                         _("Network"),
78                         _("Network services")
79                 );
80
81                 wprintf("<TR><TD>"
82                         "<A HREF=\"/display_siteconfig?whichmenu=tuning\">"
83                         "<IMG BORDER=\"0\" WIDTH=\"48\" HEIGHT=\"48\" "
84                         "SRC=\"/static/advanpage2_48x.gif\" ALT=\"&nbsp;\">"
85                         "</TD><TD>"
86                         "<A HREF=\"/display_siteconfig?whichmenu=tuning\">"
87                         "<B>%s</B><br />"
88                         "%s"
89                         "</A></TD></TR>\n",
90                         _("Tuning"),
91                         _("Advanced server fine-tuning controls")
92                 );
93
94                 wprintf("<TR BGCOLOR=\"#CCCCCC\"><TD>"
95                         "<A HREF=\"/display_siteconfig?whichmenu=ldap\">"
96                         "<IMG BORDER=\"0\" WIDTH=\"48\" HEIGHT=\"48\" "
97                         "SRC=\"/static/advanpage2_48x.gif\" ALT=\"&nbsp;\">"
98                         "</TD><TD>"
99                         "<A HREF=\"/display_siteconfig?whichmenu=ldap\">"
100                         "<B>%s</B><br />"
101                         "%s"
102                         "</A></TD></TR>\n",
103                         _("Directory"),
104                         _("Configure the LDAP connector for Citadel")
105                 );
106
107                 wprintf("<TR><TD>"
108                         "<A HREF=\"/display_siteconfig?whichmenu=purger\">"
109                         "<IMG BORDER=\"0\" WIDTH=\"48\" HEIGHT=\"48\" "
110                         "SRC=\"/static/advanpage2_48x.gif\" ALT=\"&nbsp;\">"
111                         "</TD><TD>"
112                         "<A HREF=\"/display_siteconfig?whichmenu=purger\">"
113                         "<B>%s</B><br />"
114                         "%s"
115                         "</A></TD></TR>\n",
116                         _("Auto-purger"),
117                         _("Configure automatic expiry of old messages")
118                 );
119
120                 wprintf("</TABLE>");
121                 wprintf("</td></tr></table></center>\n");
122                 wDumpContent(1);
123                 return;
124         }
125
126         if (!strcasecmp(whichmenu, "general")) {
127                 wprintf("<div align="center"><h2>");
128                 wprintf(_("General site configuration items"));
129                 wprintf("</h2></div>\n");
130         }
131
132         if (!strcasecmp(whichmenu, "access")) {
133                 wprintf("<div align="center"><h2>");
134                 wprintf(_("Access controls and site policy settings"));
135                 wprintf("</h2></div>\n");
136         }
137
138         if (!strcasecmp(whichmenu, "network")) {
139                 wprintf("<div align="center"><h2>");
140                 wprintf(_("Network services"));
141                 wprintf("</h2>");
142                 wprintf(_("Changes made on this screen will not take effect "
143                         "until you restart the Citadel server."));
144                 wprintf("</div>\n");
145         }
146
147         if (!strcasecmp(whichmenu, "tuning")) {
148                 wprintf("<div align="center"><h2>");
149                 wprintf(_("Advanced server fine-tuning controls"));
150                 wprintf("</h2></div>\n");
151         }
152
153         if (!strcasecmp(whichmenu, "ldap")) {
154                 wprintf("<div align="center"><h2>");
155                 wprintf(_("Citadel LDAP connector configuration"));
156                 wprintf("</h2>");
157                 wprintf(_("Changes made on this screen will not take effect "
158                         "until you restart the Citadel server."));
159                 wprintf("</div>\n");
160         }
161
162         if (!strcasecmp(whichmenu, "purger")) {
163                 wprintf("<div align="center"><h2>");
164                 wprintf(_("Message auto-purger settings"));
165                 wprintf("</h2>");
166                 wprintf(_("These settings may be overridden on a per-floor or per-room basis."));
167                 wprintf("</div>\n");
168         }
169
170         serv_printf("CONF get");
171         serv_getln(buf, sizeof buf);
172         if (buf[0] != '1') {
173                 wprintf("<TABLE WIDTH=100%% BORDER=0 BGCOLOR=\"#444455\"><TR><TD>");
174                 wprintf("<SPAN CLASS=\"titlebar\">");
175                 wprintf(_("Error"));
176                 wprintf("</SPAN>\n");
177                 wprintf("</TD></TR></TABLE><br />\n");
178                 wprintf("%s<br />\n", &buf[4]);
179                 do_template("endbox");
180                 wDumpContent(1);
181                 return;
182         }
183
184         wprintf("<FORM METHOD=\"POST\" ACTION=\"/siteconfig\">\n");
185         wprintf("<TABLE border=0>\n");
186
187         i = 0;
188         while (serv_getln(buf, sizeof buf), strcmp(buf, "000")) {
189                 switch (++i) {
190                 case 1:
191                         if (!strcasecmp(whichmenu, "general")) {
192                                 wprintf("<TR><TD>");
193                                 wprintf(_("Node name"));
194                                 wprintf("</TD><TD>");
195                                 wprintf("<INPUT TYPE=\"text\" NAME=\"c_nodename\" MAXLENGTH=\"15\" VALUE=\"%s\">", buf);
196                                 wprintf("</TD></TR>\n");
197                         }
198                         else {
199                                 wprintf("<INPUT TYPE=\"hidden\" NAME=\"c_nodename\" VALUE=\"%s\">", buf);
200                         }
201                         break;
202                 case 2:
203                         if (!strcasecmp(whichmenu, "general")) {
204                                 wprintf("<TR><TD>");
205                                 wprintf(_("Fully qualified domain name"));
206                                 wprintf("</TD><TD>");
207                                 wprintf("<INPUT TYPE=\"text\" NAME=\"c_fqdn\" MAXLENGTH=\"63\" VALUE=\"%s\">", buf);
208                                 wprintf("</TD></TR>\n");
209                         }
210                         else {
211                                 wprintf("<INPUT TYPE=\"hidden\" NAME=\"c_fqdn\" VALUE=\"%s\">", buf);
212                         }
213                         break;
214                 case 3:
215                         if (!strcasecmp(whichmenu, "general")) {
216                                 wprintf("<TR><TD>");
217                                 wprintf(_("Human-readable node name"));
218                                 wprintf("</TD><TD>");
219                                 wprintf("<INPUT TYPE=\"text\" NAME=\"c_humannode\" MAXLENGTH=\"20\" VALUE=\"%s\">", buf);
220                                 wprintf("</TD></TR>\n");
221                         }
222                         else {
223                                 wprintf("<INPUT TYPE=\"hidden\" NAME=\"c_humannode\" VALUE=\"%s\">", buf);
224                         }
225                         break;
226                 case 4:
227                         if (!strcasecmp(whichmenu, "general")) {
228                                 wprintf("<TR><TD>");
229                                 wprintf(_("Telephone number"));
230                                 wprintf("</TD><TD>");
231                                 wprintf("<INPUT TYPE=\"text\" NAME=\"c_phonenum\" MAXLENGTH=\"15\" VALUE=\"%s\">", buf);
232                                 wprintf("</TD></TR>\n");
233                         }
234                         else {
235                                 wprintf("<INPUT TYPE=\"hidden\" NAME=\"c_phonenum\" VALUE=\"%s\">", buf);
236                         }
237                         break;
238                 case 5:
239                         if (!strcasecmp(whichmenu, "access")) {
240                                 wprintf("<TR><TD>Automatically grant room-aide status to users who create private rooms</TD><TD>");
241                                 wprintf("<INPUT TYPE=\"checkbox\" NAME=\"c_creataide\" VALUE=\"yes\" %s>", ((atoi(buf) != 0) ? "CHECKED" : ""));
242                                 wprintf("</TD></TR>\n");
243                         }
244                         else {
245                                 wprintf("<INPUT TYPE=\"hidden\" NAME=\"c_creataide\" VALUE=\"%s\">", buf);
246                         }
247                         break;
248                 case 6:
249                         if (!strcasecmp(whichmenu, "tuning")) {
250                                 wprintf("<TR><TD>Server connection idle timeout (in seconds)</TD><TD>");
251                                 wprintf("<INPUT TYPE=\"text\" NAME=\"c_sleeping\" MAXLENGTH=\"15\" VALUE=\"%s\">", buf);
252                                 wprintf("</TD></TR>\n");
253                         }
254                         else {
255                                 wprintf("<INPUT TYPE=\"hidden\" NAME=\"c_sleeping\" VALUE=\"%s\">", buf);
256                         }
257                         break;
258                 case 7:
259                         if (!strcasecmp(whichmenu, "access")) {
260                                 wprintf("<TR><TD>Initial access level for new users</TD><TD>");
261                                 wprintf("<SELECT NAME=\"c_initax\" SIZE=\"1\">\n");
262                                 for (j=0; j<=6; ++j) {
263                                         wprintf("<OPTION %s VALUE=\"%d\">%d - %s</OPTION>\n",
264                                                 ((atoi(buf) == j) ? "SELECTED" : ""),
265                                                 j, j, axdefs[j]
266                                         );
267                                 }
268                                 wprintf("</SELECT>");
269                                 wprintf("</TD></TR>\n");
270                         }
271                         else {
272                                 wprintf("<INPUT TYPE=\"hidden\" NAME=\"c_initax\" VALUE=\"%s\">", buf);
273                         }
274                         break;
275                 case 8:
276                         if (!strcasecmp(whichmenu, "access")) {
277                                 wprintf("<TR><TD>Require registration for new users</TD><TD>");
278                                 wprintf("<INPUT TYPE=\"checkbox\" NAME=\"c_regiscall\" VALUE=\"yes\" %s>", ((atoi(buf) != 0) ? "CHECKED" : ""));
279                                 wprintf("</TD></TR>\n");
280                         }
281                         else {
282                                 wprintf("<INPUT TYPE=\"hidden\" NAME=\"c_regiscall\" VALUE=\"%s\">", buf);
283                         }
284                         break;
285                 case 9:
286                         if (!strcasecmp(whichmenu, "access")) {
287                                 wprintf("<TR><TD>Quarantine messages from problem users</TD><TD>");
288                                 wprintf("<INPUT TYPE=\"checkbox\" NAME=\"c_twitdetect\" VALUE=\"yes\" %s>", ((atoi(buf) != 0) ? "CHECKED" : ""));
289                                 wprintf("</TD></TR>\n");
290                         }
291                         else {
292                                 wprintf("<INPUT TYPE=\"hidden\" NAME=\"c_twitdetect\" VALUE=\"%s\">", buf);
293                         }
294                         break;
295                 case 10:
296                         if (!strcasecmp(whichmenu, "access")) {
297                                 wprintf("<TR><TD>Name of quarantine room</TD><TD>");
298                                 wprintf("<INPUT TYPE=\"text\" NAME=\"c_twitroom\" MAXLENGTH=\"63\" VALUE=\"%s\">", buf);
299                                 wprintf("</TD></TR>\n");
300                         }
301                         else {
302                                 wprintf("<INPUT TYPE=\"hidden\" NAME=\"c_twitroom\" VALUE=\"%s\">", buf);
303                         }
304                         break;
305                 case 11:
306                         if (!strcasecmp(whichmenu, "general")) {
307                                 wprintf("<TR><TD>Paginator prompt (for text mode clients)</TD><TD>");
308                                 wprintf("<INPUT TYPE=\"text\" NAME=\"c_moreprompt\" MAXLENGTH=\"79\" VALUE=\"%s\">", buf);
309                                 wprintf("</TD></TR>\n");
310                         }
311                         else {
312                                 wprintf("<INPUT TYPE=\"hidden\" NAME=\"c_moreprompt\" VALUE=\"%s\">", buf);
313                         }
314                         break;
315                 case 12:
316                         if (!strcasecmp(whichmenu, "access")) {
317                                 wprintf("<TR><TD>Restrict access to Internet mail</TD><TD>");
318                                 wprintf("<INPUT TYPE=\"checkbox\" NAME=\"c_restrict\" VALUE=\"yes\" %s>", ((atoi(buf) != 0) ? "CHECKED" : ""));
319                                 wprintf("</TD></TR>\n");
320                         }
321                         else {
322                                 wprintf("<INPUT TYPE=\"hidden\" NAME=\"c_restrict\" VALUE=\"%s\">", buf);
323                         }
324                         break;
325                 case 13:
326                         if (!strcasecmp(whichmenu, "general")) {
327                                 wprintf("<TR><TD>Geographic location of this system</TD><TD>");
328                                 wprintf("<INPUT TYPE=\"text\" NAME=\"c_bbs_city\" MAXLENGTH=\"31\" VALUE=\"%s\">", buf);
329                                 wprintf("</TD></TR>\n");
330                         }
331                         else {
332                                 wprintf("<INPUT TYPE=\"hidden\" NAME=\"c_bbs_city\" VALUE=\"%s\">", buf);
333                         }
334                         break;
335                 case 14:
336                         if (!strcasecmp(whichmenu, "general")) {
337                                 wprintf("<TR><TD>Name of system administrator</TD><TD>");
338                                 wprintf("<INPUT TYPE=\"text\" NAME=\"c_sysadm\" MAXLENGTH=\"25\" VALUE=\"%s\">", buf);
339                                 wprintf("</TD></TR>\n");
340                         }
341                         else {
342                                 wprintf("<INPUT TYPE=\"hidden\" NAME=\"c_sysadm\" VALUE=\"%s\">", buf);
343                         }
344                         break;
345                 case 15:
346                         if (!strcasecmp(whichmenu, "tuning")) {
347                                 wprintf("<TR><TD>Maximum concurrent sessions (0 = no limit)</TD><TD>");
348                                 wprintf("<INPUT TYPE=\"text\" NAME=\"c_maxsessions\" MAXLENGTH=\"5\" VALUE=\"%s\">", buf);
349                                 wprintf("</TD></TR>\n");
350                         }
351                         else {
352                                 wprintf("<INPUT TYPE=\"hidden\" NAME=\"c_maxsessions\" VALUE=\"%s\">", buf);
353                         }
354                         break;
355                 case 17:
356                         if (!strcasecmp(whichmenu, "tuning")) {
357                                 wprintf("<TR><TD>Default user purge time (days)</TD><TD>");
358                                 wprintf("<INPUT TYPE=\"text\" NAME=\"c_userpurge\" MAXLENGTH=\"5\" VALUE=\"%s\">", buf);
359                                 wprintf("</TD></TR>\n");
360                         }
361                         else {
362                                 wprintf("<INPUT TYPE=\"hidden\" NAME=\"c_userpurge\" VALUE=\"%s\">", buf);
363                         }
364                         break;
365                 case 18:
366                         if (!strcasecmp(whichmenu, "tuning")) {
367                                 wprintf("<TR><TD>Default room purge time (days)</TD><TD>");
368                                 wprintf("<INPUT TYPE=\"text\" NAME=\"c_roompurge\" MAXLENGTH=\"5\" VALUE=\"%s\">", buf);
369                                 wprintf("</TD></TR>\n");
370                         }
371                         else {
372                                 wprintf("<INPUT TYPE=\"hidden\" NAME=\"c_roompurge\" VALUE=\"%s\">", buf);
373                         }
374                         break;
375                 case 19:
376                         if (!strcasecmp(whichmenu, "access")) {
377                                 wprintf("<TR><TD>Name of room to log pages</TD><TD>");
378                                 wprintf("<INPUT TYPE=\"text\" NAME=\"c_logpages\" MAXLENGTH=\"63\" VALUE=\"%s\">", buf);
379                                 wprintf("</TD></TR>\n");
380                         }
381                         else {
382                                 wprintf("<INPUT TYPE=\"hidden\" NAME=\"c_logpages\" VALUE=\"%s\">", buf);
383                         }
384                         break;
385                 case 20:
386                         if (!strcasecmp(whichmenu, "access")) {
387                                 wprintf("<TR><TD>Access level required to create rooms</TD><TD>");
388                                 wprintf("<SELECT NAME=\"c_createax\" SIZE=\"1\">\n");
389                                 for (j=0; j<=6; ++j) {
390                                         wprintf("<OPTION %s VALUE=\"%d\">%d - %s</OPTION>\n",
391                                                 ((atoi(buf) == j) ? "SELECTED" : ""),
392                                                 j, j, axdefs[j]
393                                         );
394                                 }
395                                 wprintf("</SELECT>");
396                                 wprintf("</TD></TR>\n");
397                         }
398                         else {
399                                 wprintf("<INPUT TYPE=\"hidden\" NAME=\"c_createax\" VALUE=\"%s\">", buf);
400                         }
401                         break;
402                 case 21:
403                         if (!strcasecmp(whichmenu, "tuning")) {
404                                 wprintf("<TR><TD>Maximum message length</TD><TD>");
405                                 wprintf("<INPUT TYPE=\"text\" NAME=\"c_maxmsglen\" MAXLENGTH=\"20\" VALUE=\"%s\">", buf);
406                                 wprintf("</TD></TR>\n");
407                         }
408                         else {
409                                 wprintf("<INPUT TYPE=\"hidden\" NAME=\"c_maxmsglen\" VALUE=\"%s\">", buf);
410                         }
411                         break;
412                 case 22:
413                         if (!strcasecmp(whichmenu, "tuning")) {
414                                 wprintf("<TR><TD>Minimum number of worker threads</TD><TD>");
415                                 wprintf("<INPUT TYPE=\"text\" NAME=\"c_min_workers\" MAXLENGTH=\"5\" VALUE=\"%s\">", buf);
416                                 wprintf("</TD></TR>\n");
417                         }
418                         else {
419                                 wprintf("<INPUT TYPE=\"hidden\" NAME=\"c_min_workers\" VALUE=\"%s\">", buf);
420                         }
421                         break;
422                 case 23:
423                         if (!strcasecmp(whichmenu, "tuning")) {
424                                 wprintf("<TR><TD>Maximum number of worker threads</TD><TD>");
425                                 wprintf("<INPUT TYPE=\"text\" NAME=\"c_max_workers\" MAXLENGTH=\"5\" VALUE=\"%s\">", buf);
426                                 wprintf("</TD></TR>\n");
427                         }
428                         else {
429                                 wprintf("<INPUT TYPE=\"hidden\" NAME=\"c_max_workers\" VALUE=\"%s\">", buf);
430                         }
431                         break;
432                 case 24:
433                         if (!strcasecmp(whichmenu, "network")) {
434                                 wprintf("<TR><TD>POP3 listener port (-1 to disable)</TD><TD>");
435                                 wprintf("<INPUT TYPE=\"text\" NAME=\"c_pop3_port\" MAXLENGTH=\"5\" VALUE=\"%s\">", buf);
436                                 wprintf("</TD></TR>\n");
437                         }
438                         else {
439                                 wprintf("<INPUT TYPE=\"hidden\" NAME=\"c_pop3_port\" VALUE=\"%s\">", buf);
440                         }
441                         break;
442                 case 25:
443                         if (!strcasecmp(whichmenu, "network")) {
444                                 wprintf("<TR><TD>SMTP MTA port (-1 to disable)</TD><TD>");
445                                 wprintf("<INPUT TYPE=\"text\" NAME=\"c_smtp_port\" MAXLENGTH=\"5\" VALUE=\"%s\">", buf);
446                                 wprintf("</TD></TR>\n");
447                         }
448                         else {
449                                 wprintf("<INPUT TYPE=\"hidden\" NAME=\"c_smtp_port\" VALUE=\"%s\">", buf);
450                         }
451                         break;
452                 case 27:
453                         if (!strcasecmp(whichmenu, "access")) {
454                                 wprintf("<TR><TD>Allow aides to zap (forget) rooms</TD><TD>");
455                                 wprintf("<INPUT TYPE=\"checkbox\" NAME=\"c_aide_zap\" VALUE=\"yes\" %s>", ((atoi(buf) != 0) ? "CHECKED" : ""));
456                                 wprintf("</TD></TR>\n");
457                         }
458                         else {
459                                 wprintf("<INPUT TYPE=\"hidden\" NAME=\"c_aide_zap\" VALUE=\"%s\">", buf);
460                         }
461                         break;
462                 case 28:
463                         if (!strcasecmp(whichmenu, "network")) {
464                                 wprintf("<TR><TD>IMAP listener port (-1 to disable)</TD><TD>");
465                                 wprintf("<INPUT TYPE=\"text\" NAME=\"c_imap_port\" MAXLENGTH=\"5\" VALUE=\"%s\">", buf);
466                                 wprintf("</TD></TR>\n");
467                         }
468                         else {
469                                 wprintf("<INPUT TYPE=\"hidden\" NAME=\"c_imap_port\" VALUE=\"%s\">", buf);
470                         }
471                         break;
472                 case 29:
473                         if (!strcasecmp(whichmenu, "network")) {
474                                 wprintf("<TR><TD>Network run frequency (in seconds)</TD><TD>");
475                                 wprintf("<INPUT TYPE=\"text\" NAME=\"c_net_freq\" MAXLENGTH=\"5\" VALUE=\"%s\">", buf);
476                                 wprintf("</TD></TR>\n");
477                         }
478                         else {
479                                 wprintf("<INPUT TYPE=\"hidden\" NAME=\"c_net_freq\" VALUE=\"%s\">", buf);
480                         }
481                         break;
482                 case 30:
483                         if (!strcasecmp(whichmenu, "access")) {
484                                 wprintf("<TR><TD>Disable self-service user account creation</TD><TD>");
485                                 wprintf("<INPUT TYPE=\"checkbox\" NAME=\"c_disable_newu\" VALUE=\"yes\" %s>", ((atoi(buf) != 0) ? "CHECKED" : ""));
486                                 wprintf("</TD></TR>\n");
487                         }
488                         else {
489                                 wprintf("<INPUT TYPE=\"hidden\" NAME=\"c_disable_newu\" VALUE=\"%s\">", buf);
490                         }
491                         break;
492                 case 31:
493                         /* niu */
494                         break;
495                 case 32:
496                         if (!strcasecmp(whichmenu, "purger")) {
497                                 wprintf("<TR><TD>Hour to run database auto-purge</TD><TD>");
498                                 wprintf("<SELECT NAME=\"c_purge_hour\" SIZE=\"1\">\n");
499                                 for (j=0; j<=23; ++j) {
500                                         wprintf("<OPTION %s VALUE=\"%d\">%d:00%s</OPTION>\n",
501                                                 ((atoi(buf) == j) ? "SELECTED" : ""),
502                                                 j,
503                                                 ((j == 0) ? 12 : ((j>12) ? j-12 : j)),
504                                                 ((j >= 12) ? "pm" : "am")
505                                         );
506                                 }
507                                 wprintf("</SELECT>");
508                                 wprintf("</TD></TR>\n");
509                         }
510                         else {
511                                 wprintf("<INPUT TYPE=\"hidden\" NAME=\"c_purge_hour\" VALUE=\"%s\">", buf);
512                         }
513                         break;
514                 case 33:
515                         if ( (serv_info.serv_supports_ldap) && (!strcasecmp(whichmenu, "ldap")) ) {
516                                 wprintf("<TR><TD>Host name of LDAP server (blank to disable)</TD><TD>");
517                                 wprintf("<INPUT TYPE=\"text\" NAME=\"c_ldap_host\" MAXLENGTH=\"127\" VALUE=\"%s\">", buf);
518                                 wprintf("</TD></TR>\n");
519                         }
520                         else {
521                                 wprintf("<INPUT TYPE=\"hidden\" NAME=\"c_ldap_host\" VALUE=\"%s\">", buf);
522                         }
523                         break;
524                 case 34:
525                         if ( (serv_info.serv_supports_ldap) && (!strcasecmp(whichmenu, "ldap")) ) {
526                                 wprintf("<TR><TD>Port number of LDAP server (blank to disable)</TD><TD>");
527                                 wprintf("<INPUT TYPE=\"text\" NAME=\"c_ldap_port\" MAXLENGTH=\"127\" VALUE=\"%d\">", atoi(buf));
528                                 wprintf("</TD></TR>\n");
529                         }
530                         else {
531                                 wprintf("<INPUT TYPE=\"hidden\" NAME=\"c_ldap_port\" VALUE=\"%d\">", atoi(buf));
532                         }
533                         break;
534                 case 35:
535                         if ( (serv_info.serv_supports_ldap) && (!strcasecmp(whichmenu, "ldap")) ) {
536                                 wprintf("<TR><TD>Base DN</TD><TD>");
537                                 wprintf("<INPUT TYPE=\"text\" NAME=\"c_ldap_base_dn\" MAXLENGTH=\"255\" VALUE=\"%s\">", buf);
538                                 wprintf("</TD></TR>\n");
539                         }
540                         else {
541                                 wprintf("<INPUT TYPE=\"hidden\" NAME=\"c_ldap_base_dn\" VALUE=\"%s\">", buf);
542                         }
543                         break;
544                 case 36:
545                         if ( (serv_info.serv_supports_ldap) && (!strcasecmp(whichmenu, "ldap")) ) {
546                                 wprintf("<TR><TD>Bind DN</TD><TD>");
547                                 wprintf("<INPUT TYPE=\"text\" NAME=\"c_ldap_bind_dn\" MAXLENGTH=\"255\" VALUE=\"%s\">", buf);
548                                 wprintf("</TD></TR>\n");
549                         }
550                         else {
551                                 wprintf("<INPUT TYPE=\"hidden\" NAME=\"c_ldap_bind_dn\" VALUE=\"%s\">", buf);
552                         }
553                         break;
554                 case 37:
555                         if ( (serv_info.serv_supports_ldap) && (!strcasecmp(whichmenu, "ldap")) ) {
556                                 wprintf("<TR><TD>Password for bind DN</TD><TD>");
557                                 wprintf("<INPUT TYPE=\"password\" NAME=\"c_ldap_bind_pw\" MAXLENGTH=\"255\" VALUE=\"%s\">", buf);
558                                 wprintf("</TD></TR>\n");
559                         }
560                         else {
561                                 wprintf("<INPUT TYPE=\"hidden\" NAME=\"c_ldap_bind_pw\" VALUE=\"%s\">", buf);
562                         }
563                         break;
564                 case 38:
565                         if (!strcasecmp(whichmenu, "network")) {
566                                 wprintf("<TR><TD>Server IP address (0.0.0.0 for 'any')</TD><TD>");
567                                 wprintf("<INPUT TYPE=\"text\" NAME=\"c_ip_addr\" MAXLENGTH=\"15\" VALUE=\"%s\">", buf);
568                                 wprintf("</TD></TR>\n");
569                         }
570                         else {
571                                 wprintf("<INPUT TYPE=\"hidden\" NAME=\"c_ip_addr\" VALUE=\"%s\">", buf);
572                         }
573                         break;
574                 case 39:
575                         if (!strcasecmp(whichmenu, "network")) {
576                                 wprintf("<TR><TD>SMTP MSA port (-1 to disable)</TD><TD>");
577                                 wprintf("<INPUT TYPE=\"text\" NAME=\"c_msa_port\" MAXLENGTH=\"5\" VALUE=\"%s\">", buf);
578                                 wprintf("</TD></TR>\n");
579                         }
580                         else {
581                                 wprintf("<INPUT TYPE=\"hidden\" NAME=\"c_msa_port\" VALUE=\"%s\">", buf);
582                         }
583                         break;
584                 case 40:
585                         if (!strcasecmp(whichmenu, "network")) {
586                                 wprintf("<TR><TD>IMAP over SSL port (-1 to disable)</TD><TD>");
587                                 wprintf("<INPUT TYPE=\"text\" NAME=\"c_imaps_port\" MAXLENGTH=\"5\" VALUE=\"%s\">", buf);
588                                 wprintf("</TD></TR>\n");
589                         }
590                         else {
591                                 wprintf("<INPUT TYPE=\"hidden\" NAME=\"c_imaps_port\" VALUE=\"%s\">", buf);
592                         }
593                         break;
594                 case 41:
595                         if (!strcasecmp(whichmenu, "network")) {
596                                 wprintf("<TR><TD>POP3 over SSL port (-1 to disable)</TD><TD>");
597                                 wprintf("<INPUT TYPE=\"text\" NAME=\"c_pop3s_port\" MAXLENGTH=\"5\" VALUE=\"%s\">", buf);
598                                 wprintf("</TD></TR>\n");
599                         }
600                         else {
601                                 wprintf("<INPUT TYPE=\"hidden\" NAME=\"c_pop3s_port\" VALUE=\"%s\">", buf);
602                         }
603                         break;
604                 case 42:
605                         if (!strcasecmp(whichmenu, "network")) {
606                                 wprintf("<TR><TD>SMTP over SSL port (-1 to disable)</TD><TD>");
607                                 wprintf("<INPUT TYPE=\"text\" NAME=\"c_smtps_port\" MAXLENGTH=\"5\" VALUE=\"%s\">", buf);
608                                 wprintf("</TD></TR>\n");
609                         }
610                         else {
611                                 wprintf("<INPUT TYPE=\"hidden\" NAME=\"c_smtps_port\" VALUE=\"%s\">", buf);
612                         }
613                         break;
614                 case 43:
615                         if (!strcasecmp(whichmenu, "general")) {
616                                 wprintf("<TR><TD>Enable full text index (warning: resource intensive)</TD><TD>");
617                                 wprintf("<INPUT TYPE=\"checkbox\" NAME=\"c_enable_fulltext\" VALUE=\"yes\" %s>", ((atoi(buf) != 0) ? "CHECKED" : ""));
618                                 wprintf("</TD></TR>\n");
619                         }
620                         else {
621                                 wprintf("<INPUT TYPE=\"hidden\" NAME=\"c_enable_fulltext\" VALUE=\"%s\">", buf);
622                         }
623                         break;
624                 case 44:
625                         if (!strcasecmp(whichmenu, "tuning")) {
626                                 wprintf("<TR><TD>Automatically delete committed database logs</TD><TD>");
627                                 wprintf("<INPUT TYPE=\"checkbox\" NAME=\"c_auto_cull\" VALUE=\"yes\" %s>", ((atoi(buf) != 0) ? "CHECKED" : ""));
628                                 wprintf("</TD></TR>\n");
629                         }
630                         else {
631                                 wprintf("<INPUT TYPE=\"hidden\" NAME=\"c_auto_cull\" VALUE=\"%s\">", buf);
632                         }
633                         break;
634                 case 45:
635                         if (!strcasecmp(whichmenu, "network")) {
636                                 wprintf("<TR><TD>Instantly expunge deleted messages in IMAP</TD><TD>");
637                                 wprintf("<INPUT TYPE=\"checkbox\" NAME=\"c_instant_expunge\" VALUE=\"yes\" %s>", ((atoi(buf) != 0) ? "CHECKED" : ""));
638                                 wprintf("</TD></TR>\n");
639                         }
640                         else {
641                                 wprintf("<INPUT TYPE=\"hidden\" NAME=\"c_instant_expunge\" VALUE=\"%s\">", buf);
642                         }
643                         break;
644                 case 46:
645                         if (!strcasecmp(whichmenu, "network")) {
646                                 wprintf("<TR><TD>Allow unauthenticated SMTP clients to spoof my domains</TD><TD>");
647                                 wprintf("<INPUT TYPE=\"checkbox\" NAME=\"c_allow_spoofing\" VALUE=\"yes\" %s>", ((atoi(buf) != 0) ? "CHECKED" : ""));
648                                 wprintf("</TD></TR>\n");
649                         }
650                         else {
651                                 wprintf("<INPUT TYPE=\"hidden\" NAME=\"c_allow_spoofing\" VALUE=\"%s\">", buf);
652                         }
653                         break;
654                 }
655         }
656
657         serv_puts("GPEX site");
658         serv_getln(buf, sizeof buf);
659         if (buf[0] == '2') {
660                 sitepolicy = extract_int(&buf[4], 0);
661                 sitevalue = extract_int(&buf[4], 1);
662         }
663
664         serv_puts("GPEX mailboxes");
665         serv_getln(buf, sizeof buf);
666         if (buf[0] == '2') {
667                 mboxpolicy = extract_int(&buf[4], 0);
668                 mboxvalue = extract_int(&buf[4], 1);
669         }
670
671         if (!strcasecmp(whichmenu, "purger")) {
672
673                 wprintf("<TR><TD COLSPAN=2><hr /></TD></TR>\n");
674
675                 wprintf("<TR><TD>Default message expire policy for public rooms</TD><TD>");
676                 wprintf("<INPUT TYPE=\"radio\" NAME=\"sitepolicy\" VALUE=\"1\" %s>",
677                         ((sitepolicy == 1) ? "CHECKED" : "") );
678                 wprintf("Never automatically expire messages<br />\n");
679                 wprintf("<INPUT TYPE=\"radio\" NAME=\"sitepolicy\" VALUE=\"2\" %s>",
680                         ((sitepolicy == 2) ? "CHECKED" : "") );
681                 wprintf("Expire by message count<br />\n");
682                 wprintf("<INPUT TYPE=\"radio\" NAME=\"sitepolicy\" VALUE=\"3\" %s>",
683                         ((sitepolicy == 3) ? "CHECKED" : "") );
684                 wprintf("Expire by message age<br />");
685                 wprintf("Number of messages or days: ");
686                 wprintf("<INPUT TYPE=\"text\" NAME=\"sitevalue\" MAXLENGTH=\"5\" VALUE=\"%d\">", sitevalue);
687                 wprintf("</TD></TR>\n");
688
689                 wprintf("<TR><TD COLSPAN=2><hr /></TD></TR>\n");
690
691                 wprintf("<TR><TD>Default message expire policy for private mailboxes</TD><TD>");
692                 wprintf("<INPUT TYPE=\"radio\" NAME=\"mboxpolicy\" VALUE=\"0\" %s>",
693                         ((mboxpolicy == 0) ? "CHECKED" : "") );
694                 wprintf("Same policy as public rooms<br />\n");
695                 wprintf("<INPUT TYPE=\"radio\" NAME=\"mboxpolicy\" VALUE=\"1\" %s>",
696                         ((mboxpolicy == 1) ? "CHECKED" : "") );
697                 wprintf("Never automatically expire messages<br />\n");
698                 wprintf("<INPUT TYPE=\"radio\" NAME=\"mboxpolicy\" VALUE=\"2\" %s>",
699                         ((mboxpolicy == 2) ? "CHECKED" : "") );
700                 wprintf("Expire by message count<br />\n");
701                 wprintf("<INPUT TYPE=\"radio\" NAME=\"mboxpolicy\" VALUE=\"3\" %s>",
702                         ((mboxpolicy == 3) ? "CHECKED" : "") );
703                 wprintf("Expire by message age<br />");
704                 wprintf("Number of messages or days: ");
705                 wprintf("<INPUT TYPE=\"text\" NAME=\"mboxvalue\" MAXLENGTH=\"5\" VALUE=\"%d\">", mboxvalue);
706                 wprintf("</TD></TR>\n");
707
708                 wprintf("<TR><TD COLSPAN=2><hr /></TD></TR>\n");
709
710         }
711         else {
712                 wprintf("<INPUT TYPE=\"hidden\" NAME=\"sitepolicy\" VALUE=\"%d\">\n", sitepolicy);
713                 wprintf("<INPUT TYPE=\"hidden\" NAME=\"sitevalue\" VALUE=\"%d\">\n", sitevalue);
714                 wprintf("<INPUT TYPE=\"hidden\" NAME=\"mboxpolicy\" VALUE=\"%d\">\n", mboxpolicy);
715                 wprintf("<INPUT TYPE=\"hidden\" NAME=\"mboxvalue\" VALUE=\"%d\">\n", mboxvalue);
716         }
717
718         wprintf("</TABLE><div align="center">");
719         wprintf("<INPUT TYPE=\"submit\" NAME=\"sc\" VALUE=\"OK\">");
720         wprintf("&nbsp;");
721         wprintf("<INPUT TYPE=\"submit\" NAME=\"sc\" VALUE=\"Cancel\">\n");
722         wprintf("</div></FORM>\n");
723         wprintf("</td></tr></table></div>\n");
724         wDumpContent(1);
725 }
726
727
728 void siteconfig(void)
729 {
730         char buf[SIZ];
731
732         if (strcasecmp(bstr("sc"), "OK")) {
733                 display_siteconfig();
734                 return;
735         }
736         serv_printf("CONF set");
737         serv_getln(buf, sizeof buf);
738         if (buf[0] != '4') {
739                 safestrncpy(WC->ImportantMessage, &buf[4], sizeof WC->ImportantMessage);
740                 display_siteconfig();
741                 return;
742         }
743         serv_printf("%s", bstr("c_nodename"));
744         serv_printf("%s", bstr("c_fqdn"));
745         serv_printf("%s", bstr("c_humannode"));
746         serv_printf("%s", bstr("c_phonenum"));
747         serv_printf("%s", ((!strcasecmp(bstr("c_creataide"), "yes") ? "1" : "0")));
748         serv_printf("%s", bstr("c_sleeping"));
749         serv_printf("%s", bstr("c_initax"));
750         serv_printf("%s", ((!strcasecmp(bstr("c_regiscall"), "yes") ? "1" : "0")));
751         serv_printf("%s", ((!strcasecmp(bstr("c_twitdetect"), "yes") ? "1" : "0")));
752         serv_printf("%s", bstr("c_twitroom"));
753         serv_printf("%s", bstr("c_moreprompt"));
754         serv_printf("%s", ((!strcasecmp(bstr("c_restrict"), "yes") ? "1" : "0")));
755         serv_printf("%s", bstr("c_bbs_city"));
756         serv_printf("%s", bstr("c_sysadm"));
757         serv_printf("%s", bstr("c_maxsessions"));
758         serv_printf("");  /* networking password -- deprecated */
759         serv_printf("%s", bstr("c_userpurge"));
760         serv_printf("%s", bstr("c_roompurge"));
761         serv_printf("%s", bstr("c_logpages"));
762         serv_printf("%s", bstr("c_createax"));
763         serv_printf("%s", bstr("c_maxmsglen"));
764         serv_printf("%s", bstr("c_min_workers"));
765         serv_printf("%s", bstr("c_max_workers"));
766         serv_printf("%s", bstr("c_pop3_port"));
767         serv_printf("%s", bstr("c_smtp_port"));
768         serv_printf("");  /* moderation filter level -- not yet implemented */
769         serv_printf("%s", ((!strcasecmp(bstr("c_aide_zap"), "yes") ? "1" : "0")));
770         serv_printf("%s", bstr("c_imap_port"));
771         serv_printf("%s", bstr("c_net_freq"));
772         serv_printf("%s", ((!strcasecmp(bstr("c_disable_newu"), "yes") ? "1" : "0")));
773         serv_printf("1");
774         serv_printf("%s", bstr("c_purge_hour"));
775         serv_printf("%s", bstr("c_ldap_host"));
776         serv_printf("%s", bstr("c_ldap_port"));
777         serv_printf("%s", bstr("c_ldap_base_dn"));
778         serv_printf("%s", bstr("c_ldap_bind_dn"));
779         serv_printf("%s", bstr("c_ldap_bind_pw"));
780         serv_printf("%s", bstr("c_ip_addr"));
781         serv_printf("%s", bstr("c_msa_port"));
782         serv_printf("%s", bstr("c_imaps_port"));
783         serv_printf("%s", bstr("c_pop3s_port"));
784         serv_printf("%s", bstr("c_smtps_port"));
785         serv_printf("%s", ((!strcasecmp(bstr("c_enable_fulltext"), "yes") ? "1" : "0")));
786         serv_printf("%s", ((!strcasecmp(bstr("c_auto_cull"), "yes") ? "1" : "0")));
787         serv_printf("%s", ((!strcasecmp(bstr("c_instant_expunge"), "yes") ? "1" : "0")));
788         serv_printf("%s", ((!strcasecmp(bstr("c_allow_spoofing"), "yes") ? "1" : "0")));
789         serv_printf("000");
790
791         serv_printf("SPEX site|%d|%d", atoi(bstr("sitepolicy")), atoi(bstr("sitevalue")));
792         serv_getln(buf, sizeof buf);
793         serv_printf("SPEX mailboxes|%d|%d", atoi(bstr("mboxpolicy")), atoi(bstr("mboxvalue")));
794         serv_getln(buf, sizeof buf);
795
796         safestrncpy(WC->ImportantMessage, "System configuration has been updated.",
797                 sizeof WC->ImportantMessage);
798         display_siteconfig();
799 }