00001
00002
00003
00009
00010 #include "webcit.h"
00011 #include "webserver.h"
00012
00016 void display_siteconfig(void)
00017 {
00018 char buf[SIZ];
00019 int i, j;
00020
00021 char general[65536];
00022 char access[SIZ];
00023 char network[SIZ];
00024 char tuning[SIZ];
00025 char directory[SIZ];
00026 char purger[SIZ];
00027 char idxjnl[SIZ];
00028 char funambol[SIZ];
00030 int sitepolicy = 0;
00031 int sitevalue = 0;
00032 int mboxpolicy = 0;
00033 int mboxvalue = 0;
00034
00035 output_headers(1, 1, 2, 0, 0, 0);
00036 wprintf("<div id=\"banner\">\n"
00037 "<table class=\"siteconfig_banner\"><tr><td>"
00038 "<span class=\"titlebar\">");
00039 wprintf(_("Site configuration"));
00040 wprintf("</span>"
00041 "</td></tr></table>\n"
00042 "</div>\n<div id=\"content\">\n"
00043 );
00044
00045 serv_printf("CONF get");
00046 serv_getln(buf, sizeof buf);
00047 if (buf[0] != '1') {
00048 wprintf("<table class=\"siteconfig_banner\"><tr><td>");
00049 wprintf("<span class=\"titlebar\">");
00050 wprintf(_("Error"));
00051 wprintf("</span>\n");
00052 wprintf("</td></tr></table><br />\n");
00053 wprintf("%s<br />\n", &buf[4]);
00054 wDumpContent(1);
00055 return;
00056 }
00057
00058 wprintf("<div class=\"fix_scrollbar_bug\">"
00059 "<table class=\"siteconfig_background\"><tr><td>");
00060
00061 char *tabnames[] = {
00062 _("General"),
00063 _("Access"),
00064 _("Network"),
00065 _("Tuning"),
00066 _("Directory"),
00067 _("Auto-purger"),
00068 _("Indexing/Journaling"),
00069 _("Push Email")
00070 };
00071
00072 sprintf(general, "<center><h1>%s</h1><table border=\"0\">",
00073 _("General site configuration items")
00074 );
00075
00076 sprintf(access, "<center><h1>%s</h1><table border=\"0\">",
00077 _("Access controls and site policy settings")
00078 );
00079
00080 sprintf(network, "<center><h1>%s</h1><h2>%s</h2><table border=\"0\">",
00081 _("Network services"),
00082 _("Changes made on this screen will not take effect "
00083 "until you restart the Citadel server.")
00084 );
00085
00086 sprintf(tuning, "<center><h1>%s</h1><table border=\"0\">",
00087 _("Advanced server fine-tuning controls")
00088 );
00089
00090 sprintf(directory, "<center><h1>%s</h1><h2>%s</h2><table border=\"0\">",
00091 _("Configure the LDAP connector for Citadel"),
00092 (serv_info.serv_supports_ldap
00093 ? _("Changes made on this screen will not take effect "
00094 "until you restart the Citadel server.")
00095 : _("NOTE: This Citadel server has been built without "
00096 "LDAP support. These options will have no effect.")
00097 )
00098 );
00099
00100 sprintf(purger, "<center><h1>%s</h1><h2>%s</h2><table border=\"0\">",
00101 _("Configure automatic expiry of old messages"),
00102 _("These settings may be overridden on a per-floor or per-room basis.")
00103 );
00104
00105 sprintf(idxjnl, "<center><h1>%s</h1><h2>%s</h2><table border=\"0\">",
00106 _("Indexing and Journaling"),
00107 _("Warning: these facilities are resource intensive.")
00108 );
00109 sprintf(funambol, "<center><h1>%s</h1><table border=\"0\">",
00110 _("Push Email")
00111 );
00112
00113 wprintf("<form method=\"post\" action=\"siteconfig\">\n");
00114
00115 i = 0;
00116 while (serv_getln(buf, sizeof buf), strcmp(buf, "000")) {
00117 switch (i++) {
00118 case 0:
00119 sprintf(&general[strlen(general)], "<tr><td>");
00120 sprintf(&general[strlen(general)], _("Node name"));
00121 sprintf(&general[strlen(general)], "</td><td>");
00122 sprintf(&general[strlen(general)], "<input type=\"text\" name=\"c_nodename\" maxlength=\"15\" value=\"%s\">", buf);
00123 sprintf(&general[strlen(general)], "</td></tr>\n");
00124 break;
00125 case 1:
00126 sprintf(&general[strlen(general)], "<tr><td>");
00127 sprintf(&general[strlen(general)], _("Fully qualified domain name"));
00128 sprintf(&general[strlen(general)], "</td><td>");
00129 sprintf(&general[strlen(general)], "<input type=\"text\" name=\"c_fqdn\" maxlength=\"63\" value=\"%s\">", buf);
00130 sprintf(&general[strlen(general)], "</td></tr>\n");
00131 break;
00132 case 2:
00133 sprintf(&general[strlen(general)], "<tr><td>");
00134 sprintf(&general[strlen(general)], _("Human-readable node name"));
00135 sprintf(&general[strlen(general)], "</td><td>");
00136 sprintf(&general[strlen(general)], "<input type=\"text\" name=\"c_humannode\" maxlength=\"20\" value=\"%s\">", buf);
00137 sprintf(&general[strlen(general)], "</td></tr>\n");
00138 break;
00139 case 3:
00140 sprintf(&general[strlen(general)], "<tr><td>");
00141 sprintf(&general[strlen(general)], _("Telephone number"));
00142 sprintf(&general[strlen(general)], "</td><td>");
00143 sprintf(&general[strlen(general)], "<input type=\"text\" name=\"c_phonenum\" maxlength=\"15\" value=\"%s\">", buf);
00144 sprintf(&general[strlen(general)], "</td></tr>\n");
00145 break;
00146 case 4:
00147 sprintf(&access[strlen(access)], "<tr><td>");
00148 sprintf(&access[strlen(access)], _("Automatically grant room-aide status to users who create private rooms"));
00149 sprintf(&access[strlen(access)], "</td><td>");
00150 sprintf(&access[strlen(access)], "<input type=\"checkbox\" name=\"c_creataide\" value=\"yes\" %s>",
00151 ((atoi(buf) != 0) ? "checked" : ""));
00152 sprintf(&access[strlen(access)], "</td></tr>\n");
00153 break;
00154 case 5:
00155 sprintf(&tuning[strlen(tuning)], "<tr><td>");
00156 sprintf(&tuning[strlen(tuning)], _("Server connection idle timeout (in seconds)"));
00157 sprintf(&tuning[strlen(tuning)], "</td><td>");
00158 sprintf(&tuning[strlen(tuning)], "<input type=\"text\" name=\"c_sleeping\" maxlength=\"15\" value=\"%s\">", buf);
00159 sprintf(&tuning[strlen(tuning)], "</td></tr>\n");
00160 break;
00161 case 6:
00162 sprintf(&access[strlen(access)], "<tr><td>");
00163 sprintf(&access[strlen(access)], _("Initial access level for new users"));
00164 sprintf(&access[strlen(access)], "</td><td>");
00165 sprintf(&access[strlen(access)], "<select name=\"c_initax\" size=\"1\">\n");
00166 for (j=0; j<=6; ++j) {
00167 sprintf(&access[strlen(access)], "<option %s value=\"%d\">%d - %s</option>\n",
00168 ((atoi(buf) == j) ? "selected" : ""),
00169 j, j, axdefs[j]
00170 );
00171 }
00172 sprintf(&access[strlen(access)], "</select>");
00173 sprintf(&access[strlen(access)], "</td></tr>\n");
00174 break;
00175 case 7:
00176 sprintf(&access[strlen(access)], "<tr><td>");
00177 sprintf(&access[strlen(access)], _("Require registration for new users"));
00178 sprintf(&access[strlen(access)], "</td><td>");
00179 sprintf(&access[strlen(access)], "<input type=\"checkbox\" name=\"c_regiscall\" value=\"yes\" %s>",
00180 ((atoi(buf) != 0) ? "checked" : ""));
00181 sprintf(&access[strlen(access)], "</td></tr>\n");
00182 break;
00183 case 8:
00184 sprintf(&access[strlen(access)], "<tr><td>");
00185 sprintf(&access[strlen(access)], _("Quarantine messages from problem users"));
00186 sprintf(&access[strlen(access)], "</td><td>");
00187 sprintf(&access[strlen(access)], "<input type=\"checkbox\" name=\"c_twitdetect\" value=\"yes\" %s>",
00188 ((atoi(buf) != 0) ? "checked" : ""));
00189 sprintf(&access[strlen(access)], "</td></tr>\n");
00190 break;
00191 case 9:
00192 sprintf(&access[strlen(access)], "<tr><td>");
00193 sprintf(&access[strlen(access)], _("Name of quarantine room"));
00194 sprintf(&access[strlen(access)], "</td><td>");
00195 sprintf(&access[strlen(access)], "<input type=\"text\" name=\"c_twitroom\" maxlength=\"63\" value=\"%s\">", buf);
00196 sprintf(&access[strlen(access)], "</td></tr>\n");
00197 break;
00198 case 10:
00199 sprintf(&general[strlen(general)], "<tr><td>");
00200 sprintf(&general[strlen(general)], _("Paginator prompt (for text mode clients)"));
00201 sprintf(&general[strlen(general)], "</td><td>");
00202 sprintf(&general[strlen(general)], "<input type=\"text\" name=\"c_moreprompt\" maxlength=\"79\" value=\"%s\">", buf);
00203 sprintf(&general[strlen(general)], "</td></tr>\n");
00204 break;
00205 case 11:
00206 sprintf(&access[strlen(access)], "<tr><td>");
00207 sprintf(&access[strlen(access)], _("Restrict access to Internet mail"));
00208 sprintf(&access[strlen(access)], "</td><td>");
00209 sprintf(&access[strlen(access)], "<input type=\"checkbox\" name=\"c_restrict\" value=\"yes\" %s>",
00210 ((atoi(buf) != 0) ? "checked" : ""));
00211 sprintf(&access[strlen(access)], "</td></tr>\n");
00212 break;
00213 case 12:
00214 sprintf(&general[strlen(general)], "<tr><td>");
00215 sprintf(&general[strlen(general)], _("Geographic location of this system"));
00216 sprintf(&general[strlen(general)], "</td><td>");
00217 sprintf(&general[strlen(general)], "<input type=\"text\" name=\"c_bbs_city\" maxlength=\"31\" value=\"%s\">", buf);
00218 sprintf(&general[strlen(general)], "</td></tr>\n");
00219 break;
00220 case 13:
00221 sprintf(&general[strlen(general)], "<tr><td>");
00222 sprintf(&general[strlen(general)], _("Name of system administrator"));
00223 sprintf(&general[strlen(general)], "</td><td>");
00224 sprintf(&general[strlen(general)], "<input type=\"text\" name=\"c_sysadm\" MAXLENGTH=\"25\" VALUE=\"%s\">", buf);
00225 sprintf(&general[strlen(general)], "</td></tr>\n");
00226 break;
00227 case 14:
00228 sprintf(&tuning[strlen(tuning)], "<tr><td>");
00229 sprintf(&tuning[strlen(tuning)], _("Maximum concurrent sessions (0 = no limit)"));
00230 sprintf(&tuning[strlen(tuning)], "</td><td>");
00231 sprintf(&tuning[strlen(tuning)], "<input type=\"text\" name=\"c_maxsessions\" maxlength=\"5\" value=\"%s\">", buf);
00232 sprintf(&tuning[strlen(tuning)], "</td></tr>\n");
00233 break;
00234 case 16:
00235 sprintf(&tuning[strlen(tuning)], "<tr><td>");
00236 sprintf(&tuning[strlen(tuning)], _("Default user purge time (days)"));
00237 sprintf(&tuning[strlen(tuning)], "</td><td>");
00238 sprintf(&tuning[strlen(tuning)], "<input type=\"text\" name=\"c_userpurge\" maxlength=\"5\" value=\"%s\">", buf);
00239 sprintf(&tuning[strlen(tuning)], "</td></tr>\n");
00240 break;
00241 case 17:
00242 sprintf(&tuning[strlen(tuning)], "<tr><td>");
00243 sprintf(&tuning[strlen(tuning)], _("Default room purge time (days)"));
00244 sprintf(&tuning[strlen(tuning)], "</td><td>");
00245 sprintf(&tuning[strlen(tuning)], "<input type=\"text\" name=\"c_roompurge\" maxlength=\"5\" value=\"%s\">", buf);
00246 sprintf(&tuning[strlen(tuning)], "</td></tr>\n");
00247 break;
00248 case 18:
00249 sprintf(&access[strlen(access)], "<tr><td>");
00250 sprintf(&access[strlen(access)], _("Name of room to log pages"));
00251 sprintf(&access[strlen(access)], "</td><td>");
00252 sprintf(&access[strlen(access)], "<input type=\"text\" name=\"c_logpages\" maxlength=\"63\" value=\"%s\">", buf);
00253 sprintf(&access[strlen(access)], "</td></tr>\n");
00254 break;
00255 case 19:
00256 sprintf(&access[strlen(access)], "<tr><td>");
00257 sprintf(&access[strlen(access)], _("Access level required to create rooms"));
00258 sprintf(&access[strlen(access)], "</td><td>");
00259 sprintf(&access[strlen(access)], "<select name=\"c_createax\" size=\"1\">\n");
00260 for (j=0; j<=6; ++j) {
00261 sprintf(&access[strlen(access)], "<option %s value=\"%d\">%d - %s</option>\n",
00262 ((atoi(buf) == j) ? "selected" : ""),
00263 j, j, axdefs[j]
00264 );
00265 }
00266 sprintf(&access[strlen(access)], "</select>");
00267 sprintf(&access[strlen(access)], "</td></tr>\n");
00268 break;
00269 case 20:
00270 sprintf(&tuning[strlen(tuning)], "<tr><td>");
00271 sprintf(&tuning[strlen(tuning)], _("Maximum message length"));
00272 sprintf(&tuning[strlen(tuning)], "</td><td>");
00273 sprintf(&tuning[strlen(tuning)], "<input type=\"text\" name=\"c_maxmsglen\" maxlength=\"20\" value=\"%s\">", buf);
00274 sprintf(&tuning[strlen(tuning)], "</td></tr>\n");
00275 break;
00276 case 21:
00277 sprintf(&tuning[strlen(tuning)], "<tr><td>");
00278 sprintf(&tuning[strlen(tuning)], _("Minimum number of worker threads"));
00279 sprintf(&tuning[strlen(tuning)], "</td><td>");
00280 sprintf(&tuning[strlen(tuning)], "<input type=\"text\" name=\"c_min_workers\" maxlength=\"5\" value=\"%s\">", buf);
00281 sprintf(&tuning[strlen(tuning)], "</td></tr>\n");
00282 break;
00283 case 22:
00284 sprintf(&tuning[strlen(tuning)], "<tr><td>");
00285 sprintf(&tuning[strlen(tuning)], _("Maximum number of worker threads"));
00286 sprintf(&tuning[strlen(tuning)], "</td><td>");
00287 sprintf(&tuning[strlen(tuning)], "<input type=\"text\" name=\"c_max_workers\" maxlength=\"5\" value=\"%s\">", buf);
00288 sprintf(&tuning[strlen(tuning)], "</td></tr>\n");
00289 break;
00290 case 23:
00291 sprintf(&network[strlen(network)], "<tr><td>");
00292 sprintf(&network[strlen(network)], _("POP3 listener port (-1 to disable)"));
00293 sprintf(&network[strlen(network)], "</td><td>");
00294 sprintf(&network[strlen(network)], "<input type=\"text\" name=\"c_pop3_port\" maxlength=\"5\" value=\"%s\">", buf);
00295 sprintf(&network[strlen(network)], "</TD></TR>\n");
00296 break;
00297 case 24:
00298 sprintf(&network[strlen(network)], "<TR><TD>");
00299 sprintf(&network[strlen(network)], _("SMTP MTA port (-1 to disable)"));
00300 sprintf(&network[strlen(network)], "</TD><TD>");
00301 sprintf(&network[strlen(network)], "<input type=\"text\" NAME=\"c_smtp_port\" MAXLENGTH=\"5\" VALUE=\"%s\">", buf);
00302 sprintf(&network[strlen(network)], "</TD></TR>\n");
00303 break;
00304 case 25:
00305 sprintf(&network[strlen(network)], "<TR><TD>");
00306 sprintf(&network[strlen(network)], _("Correct forged From: lines during authenticated SMTP"));
00307 sprintf(&network[strlen(network)], "</TD><TD>");
00308 sprintf(&network[strlen(network)], "<input type=\"checkbox\" NAME=\"c_rfc822_strict_from\" VALUE=\"yes\" %s>",
00309 ((atoi(buf) == 0) ? "CHECKED" : ""));
00310 sprintf(&network[strlen(network)], "</TD></TR>\n");
00311 break;
00312 case 26:
00313 sprintf(&access[strlen(access)], "<TR><TD>");
00314 sprintf(&access[strlen(access)], _("Allow aides to zap (forget) rooms"));
00315 sprintf(&access[strlen(access)], "</TD><TD>");
00316 sprintf(&access[strlen(access)], "<input type=\"checkbox\" NAME=\"c_aide_zap\" VALUE=\"yes\" %s>",
00317 ((atoi(buf) != 0) ? "CHECKED" : ""));
00318 sprintf(&access[strlen(access)], "</TD></TR>\n");
00319 break;
00320 case 27:
00321 sprintf(&network[strlen(network)], "<TR><TD>");
00322 sprintf(&network[strlen(network)], _("IMAP listener port (-1 to disable)"));
00323 sprintf(&network[strlen(network)], "</TD><TD>");
00324 sprintf(&network[strlen(network)], "<input type=\"text\" NAME=\"c_imap_port\" MAXLENGTH=\"5\" VALUE=\"%s\">", buf);
00325 sprintf(&network[strlen(network)], "</TD></TR>\n");
00326 break;
00327 case 28:
00328 sprintf(&network[strlen(network)], "<TR><TD>");
00329 sprintf(&network[strlen(network)], _("Network run frequency (in seconds)"));
00330 sprintf(&network[strlen(network)], "</TD><TD>");
00331 sprintf(&network[strlen(network)], "<input type=\"text\" NAME=\"c_net_freq\" MAXLENGTH=\"5\" VALUE=\"%s\">", buf);
00332 sprintf(&network[strlen(network)], "</TD></TR>\n");
00333 break;
00334 case 29:
00335 sprintf(&access[strlen(access)], "<TR><TD>");
00336 sprintf(&access[strlen(access)], _("Disable self-service user account creation"));
00337 sprintf(&access[strlen(access)], "</TD><TD>");
00338 sprintf(&access[strlen(access)], "<input type=\"checkbox\" NAME=\"c_disable_newu\" VALUE=\"yes\" %s>",
00339 ((atoi(buf) != 0) ? "CHECKED" : ""));
00340 sprintf(&access[strlen(access)], "</TD></TR>\n");
00341 break;
00342 case 31:
00343 sprintf(&purger[strlen(purger)], "<TR><TD>");
00344 sprintf(&purger[strlen(purger)], _("Hour to run database auto-purge"));
00345 sprintf(&purger[strlen(purger)], "</TD><TD>");
00346 sprintf(&purger[strlen(purger)], "<SELECT NAME=\"c_purge_hour\" SIZE=\"1\">\n");
00347 for (j=0; j<=23; ++j) {
00348 sprintf(&purger[strlen(purger)], "<OPTION %s VALUE=\"%d\">%d:00%s</OPTION>\n",
00349 ((atoi(buf) == j) ? "SELECTED" : ""),
00350 j,
00351 ((j == 0) ? 12 : ((j>12) ? j-12 : j)),
00352 ((j >= 12) ? "pm" : "am")
00353 );
00354 }
00355 sprintf(&purger[strlen(purger)], "</SELECT>");
00356 sprintf(&purger[strlen(purger)], "</TD></TR>\n");
00357 break;
00358 case 32:
00359 sprintf(&directory[strlen(directory)], "<TR><TD>");
00360 sprintf(&directory[strlen(directory)], _("Host name of LDAP server (blank to disable)"));
00361 sprintf(&directory[strlen(directory)], "</TD><TD>");
00362 sprintf(&directory[strlen(directory)], "<input type=\"text\" NAME=\"c_ldap_host\" MAXLENGTH=\"127\" VALUE=\"%s\">", buf);
00363 sprintf(&directory[strlen(directory)], "</TD></TR>\n");
00364 break;
00365 case 33:
00366 sprintf(&directory[strlen(directory)], "<TR><TD>");
00367 sprintf(&directory[strlen(directory)], _("Port number of LDAP server (blank to disable)"));
00368 sprintf(&directory[strlen(directory)], "</TD><TD>");
00369 sprintf(&directory[strlen(directory)], "<input type=\"text\" NAME=\"c_ldap_port\" MAXLENGTH=\"127\" VALUE=\"%d\">", atoi(buf));
00370 sprintf(&directory[strlen(directory)], "</TD></TR>\n");
00371 break;
00372 case 34:
00373 sprintf(&directory[strlen(directory)], "<TR><TD>");
00374 sprintf(&directory[strlen(directory)], _("Base DN"));
00375 sprintf(&directory[strlen(directory)], "</TD><TD>");
00376 sprintf(&directory[strlen(directory)], "<input type=\"text\" NAME=\"c_ldap_base_dn\" MAXLENGTH=\"255\" VALUE=\"%s\">", buf);
00377 sprintf(&directory[strlen(directory)], "</TD></TR>\n");
00378 break;
00379 case 35:
00380 sprintf(&directory[strlen(directory)], "<TR><TD>");
00381 sprintf(&directory[strlen(directory)], _("Bind DN"));
00382 sprintf(&directory[strlen(directory)], "</TD><TD>");
00383 sprintf(&directory[strlen(directory)], "<input type=\"text\" NAME=\"c_ldap_bind_dn\" MAXLENGTH=\"255\" VALUE=\"%s\">", buf);
00384 sprintf(&directory[strlen(directory)], "</TD></TR>\n");
00385 break;
00386 case 36:
00387 sprintf(&directory[strlen(directory)], "<TR><TD>");
00388 sprintf(&directory[strlen(directory)], _("Password for bind DN"));
00389 sprintf(&directory[strlen(directory)], "</TD><TD>");
00390 sprintf(&directory[strlen(directory)], "<input type=\"password\" NAME=\"c_ldap_bind_pw\" MAXLENGTH=\"255\" VALUE=\"%s\">",
00391 buf);
00392 sprintf(&directory[strlen(directory)], "</TD></TR>\n");
00393 break;
00394 case 37:
00395 sprintf(&network[strlen(network)], "<TR><TD>");
00396 sprintf(&network[strlen(network)], _("Server IP address (0.0.0.0 for 'any')"));
00397 sprintf(&network[strlen(network)], "</TD><TD>");
00398 sprintf(&network[strlen(network)], "<input type=\"text\" NAME=\"c_ip_addr\" MAXLENGTH=\"15\" VALUE=\"%s\">", buf);
00399 sprintf(&network[strlen(network)], "</TD></TR>\n");
00400 break;
00401 case 38:
00402 sprintf(&network[strlen(network)], "<TR><TD>");
00403 sprintf(&network[strlen(network)], _("SMTP MSA port (-1 to disable)"));
00404 sprintf(&network[strlen(network)], "</TD><TD>");
00405 sprintf(&network[strlen(network)], "<input type=\"text\" NAME=\"c_msa_port\" MAXLENGTH=\"5\" VALUE=\"%s\">", buf);
00406 sprintf(&network[strlen(network)], "</TD></TR>\n");
00407 break;
00408 case 39:
00409 sprintf(&network[strlen(network)], "<TR><TD>");
00410 sprintf(&network[strlen(network)], _("IMAP over SSL port (-1 to disable)"));
00411 sprintf(&network[strlen(network)], "</TD><TD>");
00412 sprintf(&network[strlen(network)], "<input type=\"text\" NAME=\"c_imaps_port\" MAXLENGTH=\"5\" VALUE=\"%s\">", buf);
00413 sprintf(&network[strlen(network)], "</TD></TR>\n");
00414 break;
00415 case 40:
00416 sprintf(&network[strlen(network)], "<TR><TD>");
00417 sprintf(&network[strlen(network)], _("POP3 over SSL port (-1 to disable)"));
00418 sprintf(&network[strlen(network)], "</TD><TD>");
00419 sprintf(&network[strlen(network)], "<input type=\"text\" NAME=\"c_pop3s_port\" MAXLENGTH=\"5\" VALUE=\"%s\">", buf);
00420 sprintf(&network[strlen(network)], "</TD></TR>\n");
00421 break;
00422 case 41:
00423 sprintf(&network[strlen(network)], "<TR><TD>");
00424 sprintf(&network[strlen(network)], _("SMTP over SSL port (-1 to disable)"));
00425 sprintf(&network[strlen(network)], "</TD><TD>");
00426 sprintf(&network[strlen(network)], "<input type=\"text\" NAME=\"c_smtps_port\" MAXLENGTH=\"5\" VALUE=\"%s\">", buf);
00427 sprintf(&network[strlen(network)], "</TD></TR>\n");
00428 break;
00429 case 42:
00430 sprintf(&idxjnl[strlen(idxjnl)], "<TR><TD>");
00431 sprintf(&idxjnl[strlen(idxjnl)], _("Enable full text index"));
00432 sprintf(&idxjnl[strlen(idxjnl)], "</TD><TD>");
00433 sprintf(&idxjnl[strlen(idxjnl)], "<input type=\"checkbox\" NAME=\"c_enable_fulltext\" VALUE=\"yes\" %s>",
00434 ((atoi(buf) != 0) ? "CHECKED" : ""));
00435 sprintf(&idxjnl[strlen(idxjnl)], "</TD></TR>\n");
00436 break;
00437 case 43:
00438 sprintf(&tuning[strlen(tuning)], "<TR><TD>");
00439 sprintf(&tuning[strlen(tuning)], _("Automatically delete committed database logs"));
00440 sprintf(&tuning[strlen(tuning)], "</TD><TD>");
00441 sprintf(&tuning[strlen(tuning)], "<input type=\"checkbox\" NAME=\"c_auto_cull\" VALUE=\"yes\" %s>",
00442 ((atoi(buf) != 0) ? "CHECKED" : ""));
00443 sprintf(&tuning[strlen(tuning)], "</TD></TR>\n");
00444 break;
00445 case 44:
00446 sprintf(&network[strlen(network)], "<TR><TD>");
00447 sprintf(&network[strlen(network)], _("Instantly expunge deleted messages in IMAP"));
00448 sprintf(&network[strlen(network)], "</TD><TD>");
00449 sprintf(&network[strlen(network)], "<input type=\"checkbox\" NAME=\"c_instant_expunge\" VALUE=\"yes\" %s>",
00450 ((atoi(buf) != 0) ? "CHECKED" : ""));
00451 sprintf(&network[strlen(network)], "</TD></TR>\n");
00452 break;
00453 case 45:
00454 sprintf(&network[strlen(network)], "<TR><TD>");
00455 sprintf(&network[strlen(network)], _("Allow unauthenticated SMTP clients to spoof this site's domains"));
00456 sprintf(&network[strlen(network)], "</TD><TD>");
00457 sprintf(&network[strlen(network)], "<input type=\"checkbox\" NAME=\"c_allow_spoofing\" VALUE=\"yes\" %s>",
00458 ((atoi(buf) != 0) ? "CHECKED" : ""));
00459 sprintf(&network[strlen(network)], "</TD></TR>\n");
00460 break;
00461 case 46:
00462 sprintf(&idxjnl[strlen(idxjnl)], "<TR><TD>");
00463 sprintf(&idxjnl[strlen(idxjnl)], _("Perform journaling of email messages"));
00464 sprintf(&idxjnl[strlen(idxjnl)], "</TD><TD>");
00465 sprintf(&idxjnl[strlen(idxjnl)], "<input type=\"checkbox\" NAME=\"c_journal_email\" VALUE=\"yes\" %s>",
00466 ((atoi(buf) != 0) ? "CHECKED" : ""));
00467 sprintf(&idxjnl[strlen(idxjnl)], "</TD></TR>\n");
00468 break;
00469 case 47:
00470 sprintf(&idxjnl[strlen(idxjnl)], "<TR><TD>");
00471 sprintf(&idxjnl[strlen(idxjnl)], _("Perform journaling of non-email messages"));
00472 sprintf(&idxjnl[strlen(idxjnl)], "</TD><TD>");
00473 sprintf(&idxjnl[strlen(idxjnl)], "<input type=\"checkbox\" NAME=\"c_journal_pubmsgs\" VALUE=\"yes\" %s>",
00474 ((atoi(buf) != 0) ? "CHECKED" : ""));
00475 sprintf(&idxjnl[strlen(idxjnl)], "</TD></TR>\n");
00476 break;
00477 case 48:
00478 sprintf(&idxjnl[strlen(idxjnl)], "<TR><TD>");
00479 sprintf(&idxjnl[strlen(idxjnl)], _("Email destination of journalized messages"));
00480 sprintf(&idxjnl[strlen(idxjnl)], "</TD><TD>");
00481 sprintf(&idxjnl[strlen(idxjnl)], "<input type=\"text\" NAME=\"c_journal_dest\" MAXLENGTH=\"127\" VALUE=\"%s\">", buf);
00482 sprintf(&idxjnl[strlen(idxjnl)], "</TD></TR>\n");
00483 break;
00484 case 49:
00485 if (strlen(buf) == 0) {
00486 strcpy(buf, "UTC");
00487 }
00488 #ifdef WEBCIT_WITH_CALENDAR_SERVICE
00489 sprintf(&general[strlen(general)], "<TR><TD>");
00490 sprintf(&general[strlen(general)], _("Default timezone for unzoned calendar items"));
00491 sprintf(&general[strlen(general)], "</TD><TD>");
00492 sprintf(&general[strlen(general)], "<select name=\"c_default_cal_zone\" size=\"1\">\n");
00493
00494 sprintf(&general[strlen(general)], "<option %s value=\"UTC\">UTC</option>\n",
00495 (!strcasecmp(buf, "UTC") ? "selected" : "")
00496 );
00497
00498 icalarray *zones;
00499 int z;
00500 char this_zone[128];
00501 zones = icaltimezone_get_builtin_timezones();
00502 for (z = 0; z < zones->num_elements; ++z) {
00503 strcpy(this_zone, icaltimezone_get_location(icalarray_element_at(zones, z)));
00504 sprintf(&general[strlen(general)], "<option %s value=\"%s\">%s</option>\n",
00505 (!strcasecmp(this_zone, buf) ? "selected" : ""),
00506 this_zone, this_zone
00507 );
00508 }
00509
00510 sprintf(&general[strlen(general)], "</select>");
00511 sprintf(&general[strlen(general)], "</TD></TR>\n");
00512 #else
00513 wprintf("<input type=\"hidden\" name=\"c_default_cal_zone\" value=\"%s\">\n", buf);
00514 #endif
00515 break;
00516 case 50:
00517 sprintf(&network[strlen(network)], "<TR><TD>");
00518 sprintf(&network[strlen(network)], _("<a href=\"http://www.postfix.org/tcp_table.5.html\">Postfix TCP Dictionary Port </a> (-1 to disable)"));
00519 sprintf(&network[strlen(network)], "</TD><TD>");
00520 sprintf(&network[strlen(network)], "<input type=\"text\" NAME=\"c_pftcpdict_port\" MAXLENGTH=\"5\" VALUE=\"%s\">", buf);
00521 sprintf(&network[strlen(network)], "</TD></TR>\n");
00522 break;
00523 case 51:
00524 sprintf(&network[strlen(network)], "<TR><TD>");
00525 sprintf(&network[strlen(network)], _("ManageSieve Port (-1 to disable)"));
00526 sprintf(&network[strlen(network)], "</TD><TD>");
00527 sprintf(&network[strlen(network)], "<input type=\"text\" NAME=\"c_mgesve_port\" MAXLENGTH=\"5\" VALUE=\"%s\">", buf);
00528 sprintf(&network[strlen(network)], "</TD></TR>\n");
00529 break;
00530 case 52:
00531 sprintf(&access[strlen(access)], "<TR><TD>");
00532 sprintf(&access[strlen(access)], _("Enable host based authentication mode"));
00533 sprintf(&access[strlen(access)], "</TD><TD><input type=\"checkbox\" NAME=\"c_auth_mode\" VALUE=\"yes\" DISABLED %s>",
00534 ((atoi(buf) != 0) ? "CHECKED" : ""));
00535 sprintf(&access[strlen(access)], "</TD></TR>\n");
00536 break;
00537 case 53:
00538 sprintf(&funambol[strlen(funambol)], "<TR><TD>");
00539 sprintf(&funambol[strlen(funambol)], _("Funambol server host (blank to disable)"));
00540 sprintf(&funambol[strlen(funambol)], "</TD><TD>");
00541 sprintf(&funambol[strlen(funambol)], "<input type=\"text\" NAME=\"c_funambol_host\" MAXLENGTH=\"255\" VALUE=\"%s\">", buf);
00542 sprintf(&funambol[strlen(funambol)], "</TD></TR>\n");
00543 break;
00544 case 54:
00545 sprintf(&funambol[strlen(funambol)], "<TR><TD>");
00546 sprintf(&funambol[strlen(funambol)], _("Funambol server port "));
00547 sprintf(&funambol[strlen(funambol)], "</TD><TD>");
00548 sprintf(&funambol[strlen(funambol)], "<input type=\"text\" NAME=\"c_funambol_port\" MAXLENGTH=\"5\" VALUE=\"%s\">", buf);
00549 sprintf(&funambol[strlen(funambol)], "</TD></TR>\n");
00550 break;
00551 case 55:
00552 sprintf(&funambol[strlen(funambol)], "<TR><TD>");
00553 sprintf(&funambol[strlen(funambol)], _("Funambol sync source"));
00554 sprintf(&funambol[strlen(funambol)], "</TD><TD>");
00555 sprintf(&funambol[strlen(funambol)], "<input type=\"text\" NAME=\"c_funambol_source\" MAXLENGTH=\"255\" VALUE=\"%s\">", buf);
00556 sprintf(&funambol[strlen(funambol)], "</TD></TR>\n");
00557 break;
00558 case 56:
00559 sprintf(&funambol[strlen(funambol)], "<TR><TD>");
00560 sprintf(&funambol[strlen(funambol)], _("Funambol auth details (user:pass in Base64)"));
00561 sprintf(&funambol[strlen(funambol)], "</TD><TD>");
00562 sprintf(&funambol[strlen(funambol)], "<input type=\"text\" NAME=\"c_funambol_auth\" MAXLENGTH=\"255\" VALUE=\"%s\">", buf);
00563 sprintf(&funambol[strlen(funambol)], "</TD></TR>\n");
00564 break;
00565 }
00566
00567 }
00568
00569 serv_puts("GPEX site");
00570 serv_getln(buf, sizeof buf);
00571 if (buf[0] == '2') {
00572 sitepolicy = extract_int(&buf[4], 0);
00573 sitevalue = extract_int(&buf[4], 1);
00574 }
00575
00576 serv_puts("GPEX mailboxes");
00577 serv_getln(buf, sizeof buf);
00578 if (buf[0] == '2') {
00579 mboxpolicy = extract_int(&buf[4], 0);
00580 mboxvalue = extract_int(&buf[4], 1);
00581 }
00582
00583
00584 sprintf(&purger[strlen(purger)], "<TR><TD COLSPAN=2><hr /></TD></TR>\n");
00585
00586 sprintf(&purger[strlen(purger)], "<TR><TD>");
00587 sprintf(&purger[strlen(purger)], _("Default message expire policy for public rooms"));
00588 sprintf(&purger[strlen(purger)], "</TD><TD>");
00589 sprintf(&purger[strlen(purger)], "<input type=\"radio\" NAME=\"sitepolicy\" VALUE=\"1\" %s>",
00590 ((sitepolicy == 1) ? "CHECKED" : "") );
00591 sprintf(&purger[strlen(purger)], _("Never automatically expire messages"));
00592 sprintf(&purger[strlen(purger)], "<br />\n");
00593 sprintf(&purger[strlen(purger)], "<input type=\"radio\" NAME=\"sitepolicy\" VALUE=\"2\" %s>",
00594 ((sitepolicy == 2) ? "CHECKED" : "") );
00595 sprintf(&purger[strlen(purger)], _("Expire by message count"));
00596 sprintf(&purger[strlen(purger)], "<br />\n");
00597 sprintf(&purger[strlen(purger)], "<input type=\"radio\" NAME=\"sitepolicy\" VALUE=\"3\" %s>",
00598 ((sitepolicy == 3) ? "CHECKED" : "") );
00599 sprintf(&purger[strlen(purger)], _("Expire by message age"));
00600 sprintf(&purger[strlen(purger)], "<br />");
00601 sprintf(&purger[strlen(purger)], _("Number of messages or days: "));
00602 sprintf(&purger[strlen(purger)], "<input type=\"text\" NAME=\"sitevalue\" MAXLENGTH=\"5\" VALUE=\"%d\">", sitevalue);
00603 sprintf(&purger[strlen(purger)], "</TD></TR>\n");
00604
00605 sprintf(&purger[strlen(purger)], "<TR><TD COLSPAN=2><hr /></TD></TR>\n");
00606
00607 sprintf(&purger[strlen(purger)], "<TR><TD>");
00608 sprintf(&purger[strlen(purger)], _("Default message expire policy for private mailboxes"));
00609 sprintf(&purger[strlen(purger)], "</TD><TD>");
00610 sprintf(&purger[strlen(purger)], "<input type=\"radio\" NAME=\"mboxpolicy\" VALUE=\"0\" %s>",
00611 ((mboxpolicy == 0) ? "CHECKED" : "") );
00612 sprintf(&purger[strlen(purger)], _("Same policy as public rooms"));
00613 sprintf(&purger[strlen(purger)], "<br />\n");
00614 sprintf(&purger[strlen(purger)], "<input type=\"radio\" NAME=\"mboxpolicy\" VALUE=\"1\" %s>",
00615 ((mboxpolicy == 1) ? "CHECKED" : "") );
00616 sprintf(&purger[strlen(purger)], _("Never automatically expire messages"));
00617 sprintf(&purger[strlen(purger)], "<br />\n");
00618 sprintf(&purger[strlen(purger)], "<input type=\"radio\" NAME=\"mboxpolicy\" VALUE=\"2\" %s>",
00619 ((mboxpolicy == 2) ? "CHECKED" : "") );
00620 sprintf(&purger[strlen(purger)], _("Expire by message count"));
00621 sprintf(&purger[strlen(purger)], "<br />\n");
00622 sprintf(&purger[strlen(purger)], "<input type=\"radio\" NAME=\"mboxpolicy\" VALUE=\"3\" %s>",
00623 ((mboxpolicy == 3) ? "CHECKED" : "") );
00624 sprintf(&purger[strlen(purger)], _("Expire by message age"));
00625 sprintf(&purger[strlen(purger)], "<br />");
00626 sprintf(&purger[strlen(purger)], _("Number of messages or days: "));
00627 sprintf(&purger[strlen(purger)], "<input type=\"text\" NAME=\"mboxvalue\" MAXLENGTH=\"5\" VALUE=\"%d\">", mboxvalue);
00628 sprintf(&purger[strlen(purger)], "</TD></TR>\n");
00629
00630 sprintf(&purger[strlen(purger)], "<TR><TD COLSPAN=2><hr /></TD></TR>\n");
00631
00632
00633 sprintf(&general[strlen(general)], "</table>");
00634 sprintf(&access[strlen(access)], "</table>");
00635 sprintf(&network[strlen(network)], "</table>");
00636 sprintf(&tuning[strlen(tuning)], "</table>");
00637 sprintf(&directory[strlen(directory)], "</table>");
00638 sprintf(&purger[strlen(purger)], "</table>");
00639 sprintf(&idxjnl[strlen(idxjnl)], "</table>");
00640 sprintf(&funambol[strlen(funambol)], "</table>");
00641
00642 tabbed_dialog(8, tabnames);
00643
00644 begin_tab(0, 8); client_write(general, strlen(general)); end_tab(0, 8);
00645 begin_tab(1, 8); client_write(access, strlen(access)); end_tab(1, 8);
00646 begin_tab(2, 8); client_write(network, strlen(network)); end_tab(2, 8);
00647 begin_tab(3, 8); client_write(tuning, strlen(tuning)); end_tab(3, 8);
00648 begin_tab(4, 8); client_write(directory, strlen(directory)); end_tab(4, 8);
00649 begin_tab(5, 8); client_write(purger, strlen(purger)); end_tab(5, 8);
00650 begin_tab(6, 8); client_write(idxjnl, strlen(idxjnl)); end_tab(6, 8);
00651 begin_tab(7, 8); client_write(funambol, strlen(funambol)); end_tab(7, 8);
00652 wprintf("<div align=\"center\"><br>");
00653 wprintf("<input type=\"submit\" NAME=\"ok_button\" VALUE=\"%s\">", _("Save changes"));
00654 wprintf(" ");
00655 wprintf("<input type=\"submit\" NAME=\"cancel_button\" VALUE=\"%s\">\n", _("Cancel"));
00656 wprintf("</div></FORM>\n");
00657 wprintf("</td></tr></table></div>\n");
00658 wDumpContent(1);
00659 }
00660
00664 void siteconfig(void)
00665 {
00666 char buf[256];
00667
00668 if (strlen(bstr("ok_button")) == 0) {
00669 display_aide_menu();
00670 return;
00671 }
00672 serv_printf("CONF set");
00673 serv_getln(buf, sizeof buf);
00674 if (buf[0] != '4') {
00675 safestrncpy(WC->ImportantMessage, &buf[4], sizeof WC->ImportantMessage);
00676 display_aide_menu();
00677 return;
00678 }
00679 serv_printf("%s", bstr("c_nodename"));
00680 serv_printf("%s", bstr("c_fqdn"));
00681 serv_printf("%s", bstr("c_humannode"));
00682 serv_printf("%s", bstr("c_phonenum"));
00683 serv_printf("%s", ((!strcasecmp(bstr("c_creataide"), "yes") ? "1" : "0")));
00684 serv_printf("%s", bstr("c_sleeping"));
00685 serv_printf("%s", bstr("c_initax"));
00686 serv_printf("%s", ((!strcasecmp(bstr("c_regiscall"), "yes") ? "1" : "0")));
00687 serv_printf("%s", ((!strcasecmp(bstr("c_twitdetect"), "yes") ? "1" : "0")));
00688 serv_printf("%s", bstr("c_twitroom"));
00689 serv_printf("%s", bstr("c_moreprompt"));
00690 serv_printf("%s", ((!strcasecmp(bstr("c_restrict"), "yes") ? "1" : "0")));
00691 serv_printf("%s", bstr("c_bbs_city"));
00692 serv_printf("%s", bstr("c_sysadm"));
00693 serv_printf("%s", bstr("c_maxsessions"));
00694 serv_printf("");
00695 serv_printf("%s", bstr("c_userpurge"));
00696 serv_printf("%s", bstr("c_roompurge"));
00697 serv_printf("%s", bstr("c_logpages"));
00698 serv_printf("%s", bstr("c_createax"));
00699 serv_printf("%s", bstr("c_maxmsglen"));
00700 serv_printf("%s", bstr("c_min_workers"));
00701 serv_printf("%s", bstr("c_max_workers"));
00702 serv_printf("%s", bstr("c_pop3_port"));
00703 serv_printf("%s", bstr("c_smtp_port"));
00704 serv_printf("%s", ((!strcasecmp(bstr("c_rfc822_strict_from"), "yes") ? "0" : "1")));
00705 serv_printf("%s", ((!strcasecmp(bstr("c_aide_zap"), "yes") ? "1" : "0")));
00706 serv_printf("%s", bstr("c_imap_port"));
00707 serv_printf("%s", bstr("c_net_freq"));
00708 serv_printf("%s", ((!strcasecmp(bstr("c_disable_newu"), "yes") ? "1" : "0")));
00709 serv_printf("1");
00710 serv_printf("%s", bstr("c_purge_hour"));
00711 serv_printf("%s", bstr("c_ldap_host"));
00712 serv_printf("%s", bstr("c_ldap_port"));
00713 serv_printf("%s", bstr("c_ldap_base_dn"));
00714 serv_printf("%s", bstr("c_ldap_bind_dn"));
00715 serv_printf("%s", bstr("c_ldap_bind_pw"));
00716 serv_printf("%s", bstr("c_ip_addr"));
00717 serv_printf("%s", bstr("c_msa_port"));
00718 serv_printf("%s", bstr("c_imaps_port"));
00719 serv_printf("%s", bstr("c_pop3s_port"));
00720 serv_printf("%s", bstr("c_smtps_port"));
00721 serv_printf("%s", ((!strcasecmp(bstr("c_enable_fulltext"), "yes") ? "1" : "0")));
00722 serv_printf("%s", ((!strcasecmp(bstr("c_auto_cull"), "yes") ? "1" : "0")));
00723 serv_printf("%s", ((!strcasecmp(bstr("c_instant_expunge"), "yes") ? "1" : "0")));
00724 serv_printf("%s", ((!strcasecmp(bstr("c_allow_spoofing"), "yes") ? "1" : "0")));
00725 serv_printf("%s", ((!strcasecmp(bstr("c_journal_email"), "yes") ? "1" : "0")));
00726 serv_printf("%s", ((!strcasecmp(bstr("c_journal_pubmsgs"), "yes") ? "1" : "0")));
00727 serv_printf("%s", bstr("c_journal_dest"));
00728 serv_printf("%s", bstr("c_default_cal_zone"));
00729 serv_printf("%s", bstr("c_pftcpdict_port"));
00730 serv_printf("%s", bstr("c_mgesve_port"));
00731 serv_printf("%s", ((!strcasecmp(bstr("c_auth_mode"), "yes") ? "1" : "0")));
00732 serv_printf("%s", bstr("c_funambol_host"));
00733 serv_printf("%s", bstr("c_funambol_port"));
00734 serv_printf("%s", bstr("c_funambol_source"));
00735 serv_printf("%s", bstr("c_funambol_auth"));
00736 serv_printf("000");
00737
00738 serv_printf("SPEX site|%d|%d", atoi(bstr("sitepolicy")), atoi(bstr("sitevalue")));
00739 serv_getln(buf, sizeof buf);
00740 serv_printf("SPEX mailboxes|%d|%d", atoi(bstr("mboxpolicy")), atoi(bstr("mboxvalue")));
00741 serv_getln(buf, sizeof buf);
00742
00743 strcpy(serv_info.serv_default_cal_zone, bstr("c_default_cal_zone"));
00744
00745 safestrncpy(WC->ImportantMessage, _("Your system configuration has been updated."),
00746 sizeof WC->ImportantMessage);
00747 display_aide_menu();
00748 }
00749
00750