4 * Administrative screen for site-wide configuration
12 HashList *ZoneHash = NULL;
16 void LoadZoneFiles(void)
21 const char *this_zone;
24 ZoneHash = NewHash(1, NULL);
25 ZName = NewStrBufPlain(HKEY("UTC"));
26 Put(ZoneHash, HKEY("UTC"), ZName, HFreeStrBuf);
27 zones = icaltimezone_get_builtin_timezones();
28 for (z = 0; z < zones->num_elements; ++z) {
29 /* lprintf(9, "Location: %-40s tzid: %s\n",
30 icaltimezone_get_location(icalarray_element_at(zones, z)),
31 icaltimezone_get_tzid(icalarray_element_at(zones, z))
33 this_zone = icaltimezone_get_location(icalarray_element_at(zones, z));
34 len = strlen(this_zone);
35 ZName = NewStrBufPlain(this_zone, len);
36 Put(ZoneHash, this_zone, len, ZName, HFreeStrBuf);
38 SortByHashKey(ZoneHash, 0);
42 typedef struct _CfgMapping {
52 CfgMapping ServerConfig[] = {
53 {CFG_STR, HKEY("c_nodename")},
54 {CFG_STR, HKEY("c_fqdn")},
55 {CFG_STR, HKEY("c_humannode")},
56 {CFG_STR, HKEY("c_phonenum")},
57 {CFG_YES, HKEY("c_creataide")},
58 {CFG_STR, HKEY("c_sleeping")},
59 {CFG_STR, HKEY("c_initax")},
60 {CFG_YES, HKEY("c_regiscall")},
61 {CFG_YES, HKEY("c_twitdetect")},
62 {CFG_STR, HKEY("c_twitroom")},
63 {CFG_STR, HKEY("c_moreprompt")},
64 {CFG_YES, HKEY("c_restrict")},
65 {CFG_STR, HKEY("c_bbs_city")},
66 {CFG_STR, HKEY("c_sysadm")},
67 {CFG_STR, HKEY("c_maxsessions")},
68 {CFG_STR, HKEY("reserved1")},
69 {CFG_STR, HKEY("c_userpurge")},
70 {CFG_STR, HKEY("c_roompurge")},
71 {CFG_STR, HKEY("c_logpages")},
72 {CFG_STR, HKEY("c_createax")},
73 {CFG_STR, HKEY("c_maxmsglen")},
74 {CFG_STR, HKEY("c_min_workers")},
75 {CFG_STR, HKEY("c_max_workers")},
76 {CFG_STR, HKEY("c_pop3_port")},
77 {CFG_STR, HKEY("c_smtp_port")},
78 {CFG_NO , HKEY("c_rfc822_strict_from")}, /* note: reverse bool */
79 {CFG_YES, HKEY("c_aide_zap")},
80 {CFG_STR, HKEY("c_imap_port")},
81 {CFG_STR, HKEY("c_net_freq")},
82 {CFG_YES, HKEY("c_disable_newu")},
83 {CFG_STR, HKEY("reserved2")},
84 {CFG_STR, HKEY("c_purge_hour")},
85 {CFG_STR, HKEY("c_ldap_host")},
86 {CFG_STR, HKEY("c_ldap_port")},
87 {CFG_STR, HKEY("c_ldap_base_dn")},
88 {CFG_STR, HKEY("c_ldap_bind_dn")},
89 {CFG_STR, HKEY("c_ldap_bind_pw")},
90 {CFG_STR, HKEY("c_ip_addr")},
91 {CFG_STR, HKEY("c_msa_port")},
92 {CFG_STR, HKEY("c_imaps_port")},
93 {CFG_STR, HKEY("c_pop3s_port")},
94 {CFG_STR, HKEY("c_smtps_port")},
95 {CFG_YES, HKEY("c_enable_fulltext")},
96 {CFG_YES, HKEY("c_auto_cull")},
97 {CFG_YES, HKEY("c_instant_expunge")},
98 {CFG_YES, HKEY("c_allow_spoofing")},
99 {CFG_YES, HKEY("c_journal_email")},
100 {CFG_YES, HKEY("c_journal_pubmsgs")},
101 {CFG_STR, HKEY("c_journal_dest")},
102 {CFG_STR, HKEY("c_default_cal_zone")},
103 {CFG_STR, HKEY("c_pftcpdict_port")},
104 {CFG_STR, HKEY("c_mgesve_port")},
105 {CFG_STR, HKEY("c_auth_mode")},
106 {CFG_STR, HKEY("c_funambol_host")},
107 {CFG_STR, HKEY("c_funambol_port")},
108 {CFG_STR, HKEY("c_funambol_source")},
109 {CFG_STR, HKEY("c_funambol_auth")},
110 {CFG_YES, HKEY("c_rbl_at_greeting")},
111 {CFG_STR, HKEY("c_master_user")},
112 {CFG_STR, HKEY("c_master_pass")},
113 {CFG_STR, HKEY("c_pager_program")},
114 {CFG_YES, HKEY("c_imap_keep_from")},
115 {CFG_STR, HKEY("c_xmpp_c2s_port")},
116 {CFG_STR, HKEY("c_xmpp_s2s_port")},
117 {CFG_STR, HKEY("c_pop3_fetch")},
118 {CFG_STR, HKEY("c_pop3_fastest")},
119 {CFG_YES, HKEY("c_spam_flag_only")},
120 {CFG_STR, HKEY("c_xmpps_c2s_port")}
125 * display all configuration items
127 void load_siteconfig(void)
130 StrBuf *Buf, *CfgToken;
136 if (WCC->ServCfg == NULL)
137 WCC->ServCfg = NewHash(1, NULL);
140 serv_printf("CONF get");
141 serv_getln(buf, sizeof buf);
144 while ((sizeof(ServerConfig) / sizeof(CfgMapping)) &&
145 (len = StrBuf_ServGetln(Buf),
146 strcmp(ChrPtr(Buf), "000")) &&
147 (i <= sizeof(ServerConfig)))
155 if (i <= sizeof(ServerConfig) / sizeof(CfgMapping))
162 serv_puts("GPEX site");
165 StrBuf_ServGetln(Buf);
166 if (GetServerStatus(Buf, NULL) == 2) {
167 StrBufCutLeft(Buf, 4);
169 CfgToken = NewStrBuf();
170 StrBufExtract_token(CfgToken, Buf, 0, '|');
171 Put(Cfg, HKEY("sitepolicy"), CfgToken, HFreeStrBuf);
173 CfgToken = NewStrBuf();
174 StrBufExtract_token(CfgToken, Buf, 1, '|');
175 Put(Cfg, HKEY("sitevalue"), CfgToken, HFreeStrBuf);
178 serv_puts("GPEX mailboxes");
179 StrBuf_ServGetln(Buf);
180 if (GetServerStatus(Buf, NULL) == 2) {
181 StrBufCutLeft(Buf, 4);
183 CfgToken = NewStrBuf();
184 StrBufExtract_token(CfgToken, Buf, 0, '|');
185 Put(Cfg, HKEY("mboxpolicy"), CfgToken, HFreeStrBuf);
187 CfgToken = NewStrBuf();
188 StrBufExtract_token(CfgToken, Buf, 1, '|');
189 Put(Cfg, HKEY("mboxvalue"), CfgToken, HFreeStrBuf);
196 * parse siteconfig changes
198 void siteconfig(void)
204 if (strlen(bstr("ok_button")) == 0) {
208 serv_printf("CONF set");
209 serv_getln(buf, sizeof buf);
211 safestrncpy(WCC->ImportantMessage, &buf[4], sizeof WCC->ImportantMessage);
216 for (i=0; i < (sizeof(ServerConfig) / sizeof(CfgMapping)); i ++)
218 switch (ServerConfig[i].type) {
221 serv_putbuf(SBstr(ServerConfig[i].Key, ServerConfig[i].len));
224 serv_puts(YesBstr(ServerConfig[i].Key,
225 ServerConfig[i].len) ?
229 serv_puts(YesBstr(ServerConfig[i].Key,
230 ServerConfig[i].len) ?
237 serv_printf("SPEX site|%d|%d", ibstr("sitepolicy"), ibstr("sitevalue"));
238 serv_getln(buf, sizeof buf);
239 serv_printf("SPEX mailboxes|%d|%d", ibstr("mboxpolicy"), ibstr("mboxvalue"));
240 serv_getln(buf, sizeof buf);
241 FreeStrBuf(&WCC->serv_info->serv_default_cal_zone);
242 WCC->serv_info->serv_default_cal_zone = NewStrBufDup(sbstr("c_default_cal_zone"));
244 safestrncpy(WCC->ImportantMessage, _("Your system configuration has been updated."),
245 sizeof WCC->ImportantMessage);
246 DeleteHash(&WCC->ServCfg);
250 void tmplput_servcfg(StrBuf *Target, WCTemplputParams *TP)
257 if (WCC->ServCfg == NULL)
259 GetHash(WCC->ServCfg, TKEY(0), &vBuf);
260 Buf = (StrBuf*) vBuf;
261 StrBufAppendTemplate(Target, TP, Buf, 1);
265 int ConditionalServCfg(StrBuf *Target, WCTemplputParams *TP)
272 if (WCC->ServCfg == NULL)
274 GetHash(WCC->ServCfg, TKEY(2), &vBuf);
275 if (vBuf == NULL) return 0;
276 Buf = (StrBuf*) vBuf;
277 if (TP->Tokens->nParameters == 3) {
280 else if (TP->Tokens->Params[3]->Type == TYPE_STR)
281 return (strcmp(TP->Tokens->Params[3]->Start, ChrPtr(Buf)) == 0);
282 else return (StrTol(Buf) == TP->Tokens->Params[3]->lvalue);
287 int ConditionalServCfgSubst(StrBuf *Target, WCTemplputParams *TP)
294 if (WCC->ServCfg == NULL)
296 GetHash(WCC->ServCfg, TKEY(2), &vBuf);
297 if (vBuf == NULL) return 0;
298 Buf = (StrBuf*) vBuf;
300 return CompareSubstToStrBuf(Buf, TP->Tokens->Params[3]);
306 InitModule_SITECONFIG
309 WebcitAddUrlHandler(HKEY("siteconfig"), siteconfig, CTX_NONE);
311 RegisterNamespace("SERV:CFG", 1, 2, tmplput_servcfg, CTX_NONE);
312 RegisterConditional(HKEY("COND:SERVCFG"), 3, ConditionalServCfg, CTX_NONE);
313 RegisterConditional(HKEY("COND:SERVCFG:SUBST"), 4, ConditionalServCfgSubst, CTX_NONE);