+ sprintf(&purger[strlen(purger)], "<TR><TD>");
+ sprintf(&purger[strlen(purger)], _("Hour to run database auto-purge"));
+ sprintf(&purger[strlen(purger)], "</TD><TD>");
+ sprintf(&purger[strlen(purger)], "<SELECT NAME=\"c_purge_hour\" SIZE=\"1\">\n");
+ for (j=0; j<=23; ++j) {
+ sprintf(&purger[strlen(purger)], "<OPTION %s VALUE=\"%d\">%d:00%s</OPTION>\n",
+ ((atoi(buf) == j) ? "SELECTED" : ""),
+ j,
+ (get_time_format_cached() == WC_TIMEFORMAT_24) ? j : ((j == 0) ? 12 : ((j>12) ? j-12 : j)),
+ (get_time_format_cached() == WC_TIMEFORMAT_24) ? "" : ((j >= 12) ? "pm" : "am")
+ );
+ }
+ sprintf(&purger[strlen(purger)], "</SELECT>");
+ sprintf(&purger[strlen(purger)], "</TD></TR>\n");
+ break;
+ case 32:
+ sprintf(&directory[strlen(directory)], "<TR><TD>");
+ sprintf(&directory[strlen(directory)], _("Host name of LDAP server (blank to disable)"));
+ sprintf(&directory[strlen(directory)], "</TD><TD>");
+ sprintf(&directory[strlen(directory)], "<input type=\"text\" NAME=\"c_ldap_host\" MAXLENGTH=\"127\" VALUE=\"%s\">", buf);
+ sprintf(&directory[strlen(directory)], "</TD></TR>\n");
+ break;
+ case 33:
+ sprintf(&directory[strlen(directory)], "<TR><TD>");
+ sprintf(&directory[strlen(directory)], _("Port number of LDAP server (blank to disable)"));
+ sprintf(&directory[strlen(directory)], "</TD><TD>");
+ sprintf(&directory[strlen(directory)], "<input type=\"text\" NAME=\"c_ldap_port\" MAXLENGTH=\"127\" VALUE=\"%d\">", atoi(buf));
+ sprintf(&directory[strlen(directory)], "</TD></TR>\n");
+ break;
+ case 34:
+ sprintf(&directory[strlen(directory)], "<TR><TD>");
+ sprintf(&directory[strlen(directory)], _("Base DN"));
+ sprintf(&directory[strlen(directory)], "</TD><TD>");
+ sprintf(&directory[strlen(directory)], "<input type=\"text\" NAME=\"c_ldap_base_dn\" MAXLENGTH=\"255\" VALUE=\"%s\">", buf);
+ sprintf(&directory[strlen(directory)], "</TD></TR>\n");
+ break;
+ case 35:
+ sprintf(&directory[strlen(directory)], "<TR><TD>");
+ sprintf(&directory[strlen(directory)], _("Bind DN"));
+ sprintf(&directory[strlen(directory)], "</TD><TD>");
+ sprintf(&directory[strlen(directory)], "<input type=\"text\" NAME=\"c_ldap_bind_dn\" MAXLENGTH=\"255\" VALUE=\"%s\">", buf);
+ sprintf(&directory[strlen(directory)], "</TD></TR>\n");
+ break;
+ case 36:
+ sprintf(&directory[strlen(directory)], "<TR><TD>");
+ sprintf(&directory[strlen(directory)], _("Password for bind DN"));
+ sprintf(&directory[strlen(directory)], "</TD><TD>");
+ sprintf(&directory[strlen(directory)], "<input type=\"password\" NAME=\"c_ldap_bind_pw\" MAXLENGTH=\"255\" VALUE=\"%s\">",
+ buf);
+ sprintf(&directory[strlen(directory)], "</TD></TR>\n");
+ break;
+ case 37:
+ sprintf(&network[strlen(network)], "<TR><TD>");
+ sprintf(&network[strlen(network)], _("Server IP address (0.0.0.0 for 'any')"));
+ sprintf(&network[strlen(network)], "</TD><TD>");
+ sprintf(&network[strlen(network)], "<input type=\"text\" NAME=\"c_ip_addr\" MAXLENGTH=\"15\" VALUE=\"%s\">", buf);
+ sprintf(&network[strlen(network)], "</TD></TR>\n");
+ break;
+ case 38:
+ sprintf(&network[strlen(network)], "<TR><TD>");
+ sprintf(&network[strlen(network)], _("SMTP MSA port (-1 to disable)"));
+ sprintf(&network[strlen(network)], "</TD><TD>");
+ sprintf(&network[strlen(network)], "<input type=\"text\" NAME=\"c_msa_port\" MAXLENGTH=\"5\" VALUE=\"%s\">", buf);
+ sprintf(&network[strlen(network)], "</TD></TR>\n");
+ break;
+ case 39:
+ sprintf(&network[strlen(network)], "<TR><TD>");
+ sprintf(&network[strlen(network)], _("IMAP over SSL port (-1 to disable)"));
+ sprintf(&network[strlen(network)], "</TD><TD>");
+ sprintf(&network[strlen(network)], "<input type=\"text\" NAME=\"c_imaps_port\" MAXLENGTH=\"5\" VALUE=\"%s\">", buf);
+ sprintf(&network[strlen(network)], "</TD></TR>\n");
+ break;
+ case 40:
+ sprintf(&network[strlen(network)], "<TR><TD>");
+ sprintf(&network[strlen(network)], _("POP3 over SSL port (-1 to disable)"));
+ sprintf(&network[strlen(network)], "</TD><TD>");
+ sprintf(&network[strlen(network)], "<input type=\"text\" NAME=\"c_pop3s_port\" MAXLENGTH=\"5\" VALUE=\"%s\">", buf);
+ sprintf(&network[strlen(network)], "</TD></TR>\n");
+ break;
+ case 41:
+ sprintf(&network[strlen(network)], "<TR><TD>");
+ sprintf(&network[strlen(network)], _("SMTP over SSL port (-1 to disable)"));
+ sprintf(&network[strlen(network)], "</TD><TD>");
+ sprintf(&network[strlen(network)], "<input type=\"text\" NAME=\"c_smtps_port\" MAXLENGTH=\"5\" VALUE=\"%s\">", buf);
+ sprintf(&network[strlen(network)], "</TD></TR>\n");
+ break;
+ case 42:
+ sprintf(&idxjnl[strlen(idxjnl)], "<TR><TD>");
+ sprintf(&idxjnl[strlen(idxjnl)], _("Enable full text index"));
+ sprintf(&idxjnl[strlen(idxjnl)], "</TD><TD>");
+ sprintf(&idxjnl[strlen(idxjnl)], "<input type=\"checkbox\" NAME=\"c_enable_fulltext\" VALUE=\"yes\" %s>",
+ ((atoi(buf) != 0) ? "CHECKED" : ""));
+ sprintf(&idxjnl[strlen(idxjnl)], "</TD></TR>\n");
+ break;
+ case 43:
+ sprintf(&tuning[strlen(tuning)], "<TR><TD>");
+ sprintf(&tuning[strlen(tuning)], _("Automatically delete committed database logs"));
+ sprintf(&tuning[strlen(tuning)], "</TD><TD>");
+ sprintf(&tuning[strlen(tuning)], "<input type=\"checkbox\" NAME=\"c_auto_cull\" VALUE=\"yes\" %s>",
+ ((atoi(buf) != 0) ? "CHECKED" : ""));
+ sprintf(&tuning[strlen(tuning)], "</TD></TR>\n");
+ break;
+ case 44:
+ sprintf(&network[strlen(network)], "<TR><TD>");
+ sprintf(&network[strlen(network)], _("Instantly expunge deleted messages in IMAP"));
+ sprintf(&network[strlen(network)], "</TD><TD>");
+ sprintf(&network[strlen(network)], "<input type=\"checkbox\" NAME=\"c_instant_expunge\" VALUE=\"yes\" %s>",
+ ((atoi(buf) != 0) ? "CHECKED" : ""));
+ sprintf(&network[strlen(network)], "</TD></TR>\n");
+ break;
+ case 45:
+ sprintf(&network[strlen(network)], "<TR><TD>");
+ sprintf(&network[strlen(network)], _("Allow unauthenticated SMTP clients to spoof this site's domains"));
+ sprintf(&network[strlen(network)], "</TD><TD>");
+ sprintf(&network[strlen(network)], "<input type=\"checkbox\" NAME=\"c_allow_spoofing\" VALUE=\"yes\" %s>",
+ ((atoi(buf) != 0) ? "CHECKED" : ""));
+ sprintf(&network[strlen(network)], "</TD></TR>\n");
+ break;
+ case 46:
+ sprintf(&idxjnl[strlen(idxjnl)], "<TR><TD>");
+ sprintf(&idxjnl[strlen(idxjnl)], _("Perform journaling of email messages"));
+ sprintf(&idxjnl[strlen(idxjnl)], "</TD><TD>");
+ sprintf(&idxjnl[strlen(idxjnl)], "<input type=\"checkbox\" NAME=\"c_journal_email\" VALUE=\"yes\" %s>",
+ ((atoi(buf) != 0) ? "CHECKED" : ""));
+ sprintf(&idxjnl[strlen(idxjnl)], "</TD></TR>\n");
+ break;
+ case 47:
+ sprintf(&idxjnl[strlen(idxjnl)], "<TR><TD>");
+ sprintf(&idxjnl[strlen(idxjnl)], _("Perform journaling of non-email messages"));
+ sprintf(&idxjnl[strlen(idxjnl)], "</TD><TD>");
+ sprintf(&idxjnl[strlen(idxjnl)], "<input type=\"checkbox\" NAME=\"c_journal_pubmsgs\" VALUE=\"yes\" %s>",
+ ((atoi(buf) != 0) ? "CHECKED" : ""));
+ sprintf(&idxjnl[strlen(idxjnl)], "</TD></TR>\n");
+ break;
+ case 48:
+ sprintf(&idxjnl[strlen(idxjnl)], "<TR><TD>");
+ sprintf(&idxjnl[strlen(idxjnl)], _("Email destination of journalized messages"));
+ sprintf(&idxjnl[strlen(idxjnl)], "</TD><TD>");
+ sprintf(&idxjnl[strlen(idxjnl)], "<input type=\"text\" NAME=\"c_journal_dest\" MAXLENGTH=\"127\" VALUE=\"%s\">", buf);
+ sprintf(&idxjnl[strlen(idxjnl)], "</TD></TR>\n");
+ break;
+ case 49:
+ if (strlen(buf) == 0) {
+ strcpy(buf, "UTC");
+ }
+#ifdef WEBCIT_WITH_CALENDAR_SERVICE
+ sprintf(&general[strlen(general)], "<TR><TD>");
+ sprintf(&general[strlen(general)], _("Default timezone for unzoned calendar items"));
+ sprintf(&general[strlen(general)], "</TD><TD>");
+ sprintf(&general[strlen(general)], "<select name=\"c_default_cal_zone\" size=\"1\">\n");
+
+ sprintf(&general[strlen(general)], "<option %s value=\"UTC\">UTC</option>\n",
+ (!strcasecmp(buf, "UTC") ? "selected" : "")
+ );
+
+ icalarray *zones;
+ int z;
+ char this_zone[128];
+ zones = icaltimezone_get_builtin_timezones();
+ for (z = 0; z < zones->num_elements; ++z) {
+ strcpy(this_zone, icaltimezone_get_location(icalarray_element_at(zones, z)));
+ sprintf(&general[strlen(general)], "<option %s value=\"%s\">%s</option>\n",
+ (!strcasecmp(this_zone, buf) ? "selected" : ""),
+ this_zone, this_zone
+ );
+ }
+
+ sprintf(&general[strlen(general)], "</select>");
+ sprintf(&general[strlen(general)], "</TD></TR>\n");
+#else /* WEBCIT_WITH_CALENDAR_SERVICE */
+ wprintf("<input type=\"hidden\" name=\"c_default_cal_zone\" value=\"%s\">\n", buf);
+#endif /* WEBCIT_WITH_CALENDAR_SERVICE */
+ break;
+ case 50:
+ sprintf(&network[strlen(network)], "<TR><TD>");
+ sprintf(&network[strlen(network)], _("<a href=\"http://www.postfix.org/tcp_table.5.html\">Postfix TCP Dictionary Port </a> (-1 to disable)"));
+ sprintf(&network[strlen(network)], "</TD><TD>");
+ sprintf(&network[strlen(network)], "<input type=\"text\" NAME=\"c_pftcpdict_port\" MAXLENGTH=\"5\" VALUE=\"%s\">", buf);
+ sprintf(&network[strlen(network)], "</TD></TR>\n");
+ break;
+ case 51:
+ sprintf(&network[strlen(network)], "<TR><TD>");
+ sprintf(&network[strlen(network)], _("ManageSieve Port (-1 to disable)"));
+ sprintf(&network[strlen(network)], "</TD><TD>");
+ sprintf(&network[strlen(network)], "<input type=\"text\" NAME=\"c_mgesve_port\" MAXLENGTH=\"5\" VALUE=\"%s\">", buf);
+ sprintf(&network[strlen(network)], "</TD></TR>\n");
+ break;
+ case 52:
+ sprintf(&access[strlen(access)], "<TR><TD>");
+ sprintf(&access[strlen(access)], _("Enable host based authentication mode"));
+ sprintf(&access[strlen(access)], "</TD><TD><input type=\"hidden\" NAME=\"c_auth_mode\" VALUE=\"%s\">%s",
+ buf,
+ ((atoi(buf) != 0) ? "Yes" : "No"));
+ sprintf(&access[strlen(access)], "</TD></TR>\n");
+ break;
+ case 53:
+ sprintf(&funambol[strlen(funambol)], "<TR><TD>");
+ sprintf(&funambol[strlen(funambol)], _("Funambol server host (blank to disable)"));
+ sprintf(&funambol[strlen(funambol)], "</TD><TD>");
+ sprintf(&funambol[strlen(funambol)], "<input type=\"text\" NAME=\"c_funambol_host\" MAXLENGTH=\"255\" VALUE=\"%s\">", buf);
+ sprintf(&funambol[strlen(funambol)], "</TD></TR>\n");
+ break;
+ case 54:
+ sprintf(&funambol[strlen(funambol)], "<TR><TD>");
+ sprintf(&funambol[strlen(funambol)], _("Funambol server port "));
+ sprintf(&funambol[strlen(funambol)], "</TD><TD>");
+ sprintf(&funambol[strlen(funambol)], "<input type=\"text\" NAME=\"c_funambol_port\" MAXLENGTH=\"5\" VALUE=\"%s\">", buf);
+ sprintf(&funambol[strlen(funambol)], "</TD></TR>\n");
+ break;
+ case 55:
+ sprintf(&funambol[strlen(funambol)], "<TR><TD>");
+ sprintf(&funambol[strlen(funambol)], _("Funambol sync source"));
+ sprintf(&funambol[strlen(funambol)], "</TD><TD>");
+ sprintf(&funambol[strlen(funambol)], "<input type=\"text\" NAME=\"c_funambol_source\" MAXLENGTH=\"255\" VALUE=\"%s\">", buf);
+ sprintf(&funambol[strlen(funambol)], "</TD></TR>\n");
+ break;
+ case 56:
+ sprintf(&funambol[strlen(funambol)], "<TR><TD>");
+ sprintf(&funambol[strlen(funambol)], _("Funambol auth details (user:pass in Base64)"));
+ sprintf(&funambol[strlen(funambol)], "</TD><TD>");
+ sprintf(&funambol[strlen(funambol)], "<input type=\"text\" NAME=\"c_funambol_auth\" MAXLENGTH=\"255\" VALUE=\"%s\">", buf);
+ sprintf(&funambol[strlen(funambol)], "</TD></TR>\n");
+ break;
+ case 57:
+ sprintf(&network[strlen(network)], "<TR><TD>");
+ sprintf(&network[strlen(network)], _("Perform RBL checks upon connect instead of after RCPT"));
+ sprintf(&network[strlen(network)], "</TD><TD>");
+ sprintf(&network[strlen(network)], "<input type=\"checkbox\" NAME=\"c_rbl_at_greeting\" VALUE=\"yes\" %s>",
+ ((atoi(buf) != 0) ? "CHECKED" : ""));
+ sprintf(&network[strlen(network)], "</TD></TR>\n");
+ break;
+ case 58:
+ sprintf(&access[strlen(access)], "<TR><TD>");
+ sprintf(&access[strlen(access)], _("Master user name (blank to disable)"));
+ sprintf(&access[strlen(access)], "</TD><TD>");
+ sprintf(&access[strlen(access)], "<input type=\"text\" NAME=\"c_master_user\" MAXLENGTH=\"31\" VALUE=\"%s\">", buf);
+ sprintf(&access[strlen(access)], "</TD></TR>\n");
+ break;
+ case 59:
+ sprintf(&access[strlen(access)], "<TR><TD>");
+ sprintf(&access[strlen(access)], _("Master user password"));
+ sprintf(&access[strlen(access)], "</TD><TD>");
+ sprintf(&access[strlen(access)], "<input type=\"password\" NAME=\"c_master_pass\" MAXLENGTH=\"31\" VALUE=\"%s\">",
+ buf);
+ sprintf(&directory[strlen(directory)], "</TD></TR>\n");
+ break;
+ case 60:
+ sprintf(&funambol[strlen(funambol)], "<TR><TD>");
+ sprintf(&funambol[strlen(funambol)], _("External pager tool (blank to disable)"));
+ sprintf(&funambol[strlen(funambol)], "</TD><TD>");
+ sprintf(&funambol[strlen(funambol)], "<input type=\"text\" NAME=\"c_pager_program\" MAXLENGTH=\"255\" VALUE=\"%s\">", buf);
+ sprintf(&funambol[strlen(funambol)], "</TD></TR>\n");
+ break;
+ case 61:
+ sprintf(&network[strlen(network)], "<TR><TD>");
+ sprintf(&network[strlen(network)], _("Keep original from headers in IMAP"));
+ sprintf(&network[strlen(network)], "</TD><TD>");
+ sprintf(&network[strlen(network)], "<input type=\"checkbox\" NAME=\"c_imap_keep_from\" VALUE=\"yes\" %s>",
+ ((atoi(buf) != 0) ? "CHECKED" : ""));
+ sprintf(&network[strlen(network)], "</TD></TR>\n");
+ break;
+ case 62:
+ sprintf(&network[strlen(network)], "<tr><td>");
+ sprintf(&network[strlen(network)], _("XMPP (Jabber) client to server port (-1 to disable)"));
+ sprintf(&network[strlen(network)], "</td><td>");
+ sprintf(&network[strlen(network)], "<input type=\"text\" name=\"c_xmpp_c2s_port\" maxlength=\"5\" value=\"%s\">", buf);
+ sprintf(&network[strlen(network)], "</TD></TR>\n");
+ break;
+ case 63:
+ sprintf(&network[strlen(network)], "<tr><td>");
+ sprintf(&network[strlen(network)], _("XMPP (Jabber) server to server port (-1 to disable)"));
+ sprintf(&network[strlen(network)], "</td><td>");
+ sprintf(&network[strlen(network)], "<input type=\"hidden\" name=\"c_xmpp_s2s_port\" value=\"%s\">\n", buf);
+ sprintf(&network[strlen(network)], "</TD></TR>\n");