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 this_zone = icaltimezone_get_location(icalarray_element_at(zones, z));
30 len = strlen(this_zone);
31 ZName = NewStrBufPlain(this_zone, len);
32 Put(ZoneHash, this_zone, len, ZName, HFreeStrBuf);
34 SortByHashKey(ZoneHash, 0);
38 typedef struct _CfgMapping {
48 CfgMapping ServerConfig[] = {
49 {CFG_STR, HKEY("c_nodename")},
50 {CFG_STR, HKEY("c_fqdn")},
51 {CFG_STR, HKEY("c_humannode")},
52 {CFG_STR, HKEY("c_phonenum")},
53 {CFG_YES, HKEY("c_creataide")},
54 {CFG_STR, HKEY("c_sleeping")},
55 {CFG_STR, HKEY("c_initax")},
56 {CFG_YES, HKEY("c_regiscall")},
57 {CFG_YES, HKEY("c_twitdetect")},
58 {CFG_STR, HKEY("c_twitroom")},
59 {CFG_STR, HKEY("c_moreprompt")},
60 {CFG_YES, HKEY("c_restrict")},
61 {CFG_STR, HKEY("c_bbs_city")},
62 {CFG_STR, HKEY("c_sysadm")},
63 {CFG_STR, HKEY("c_maxsessions")},
64 {CFG_STR, HKEY("reserved1")},
65 {CFG_STR, HKEY("c_userpurge")},
66 {CFG_STR, HKEY("c_roompurge")},
67 {CFG_STR, HKEY("c_logpages")},
68 {CFG_STR, HKEY("c_createax")},
69 {CFG_STR, HKEY("c_maxmsglen")},
70 {CFG_STR, HKEY("c_min_workers")},
71 {CFG_STR, HKEY("c_max_workers")},
72 {CFG_STR, HKEY("c_pop3_port")},
73 {CFG_STR, HKEY("c_smtp_port")},
74 {CFG_NO , HKEY("c_rfc822_strict_from")}, /* note: reverse bool */
75 {CFG_YES, HKEY("c_aide_zap")},
76 {CFG_STR, HKEY("c_imap_port")},
77 {CFG_STR, HKEY("c_net_freq")},
78 {CFG_YES, HKEY("c_disable_newu")},
79 {CFG_STR, HKEY("reserved2")},
80 {CFG_STR, HKEY("c_purge_hour")},
81 {CFG_STR, HKEY("c_ldap_host")},
82 {CFG_STR, HKEY("c_ldap_port")},
83 {CFG_STR, HKEY("c_ldap_base_dn")},
84 {CFG_STR, HKEY("c_ldap_bind_dn")},
85 {CFG_STR, HKEY("c_ldap_bind_pw")},
86 {CFG_STR, HKEY("c_ip_addr")},
87 {CFG_STR, HKEY("c_msa_port")},
88 {CFG_STR, HKEY("c_imaps_port")},
89 {CFG_STR, HKEY("c_pop3s_port")},
90 {CFG_STR, HKEY("c_smtps_port")},
91 {CFG_YES, HKEY("c_enable_fulltext")},
92 {CFG_YES, HKEY("c_auto_cull")},
93 {CFG_YES, HKEY("c_instant_expunge")},
94 {CFG_YES, HKEY("c_allow_spoofing")},
95 {CFG_YES, HKEY("c_journal_email")},
96 {CFG_YES, HKEY("c_journal_pubmsgs")},
97 {CFG_STR, HKEY("c_journal_dest")},
98 {CFG_STR, HKEY("c_default_cal_zone")},
99 {CFG_STR, HKEY("c_pftcpdict_port")},
100 {CFG_STR, HKEY("c_mgesve_port")},
101 {CFG_STR, HKEY("c_auth_mode")},
102 {CFG_STR, HKEY("c_funambol_host")},
103 {CFG_STR, HKEY("c_funambol_port")},
104 {CFG_STR, HKEY("c_funambol_source")},
105 {CFG_STR, HKEY("c_funambol_auth")},
106 {CFG_YES, HKEY("c_rbl_at_greeting")},
107 {CFG_STR, HKEY("c_master_user")},
108 {CFG_STR, HKEY("c_master_pass")},
109 {CFG_STR, HKEY("c_pager_program")},
110 {CFG_YES, HKEY("c_imap_keep_from")},
111 {CFG_STR, HKEY("c_xmpp_c2s_port")},
112 {CFG_STR, HKEY("c_xmpp_s2s_port")},
113 {CFG_STR, HKEY("c_pop3_fetch")},
114 {CFG_STR, HKEY("c_pop3_fastest")},
115 {CFG_YES , HKEY("c_spam_flag_only")}
120 * display all configuration items
122 void load_siteconfig(void)
124 struct wcsession *WCC = WC;
125 StrBuf *Buf, *CfgToken;
131 if (WCC->ServCfg == NULL)
132 WCC->ServCfg = NewHash(1, NULL);
135 serv_printf("CONF get");
136 serv_getln(buf, sizeof buf);
139 while ((sizeof(ServerConfig) / sizeof(CfgMapping)) &&
140 (len = StrBuf_ServGetln(Buf),
141 strcmp(ChrPtr(Buf), "000")) &&
142 (i <= sizeof(ServerConfig)))
150 if (i <= sizeof(ServerConfig) / sizeof(CfgMapping))
157 serv_puts("GPEX site");
160 StrBuf_ServGetln(Buf);
161 if (ChrPtr(Buf)[0] == '2') {
162 StrBufCutLeft(Buf, 4);
164 CfgToken = NewStrBuf();
165 StrBufExtract_token(CfgToken, Buf, 0, '|');
166 Put(Cfg, HKEY("sitepolicy"), CfgToken, HFreeStrBuf);
168 CfgToken = NewStrBuf();
169 StrBufExtract_token(CfgToken, Buf, 1, '|');
170 Put(Cfg, HKEY("sitevalue"), CfgToken, HFreeStrBuf);
173 serv_puts("GPEX mailboxes");
174 serv_getln(buf, sizeof buf);
176 StrBufCutLeft(Buf, 4);
178 CfgToken = NewStrBuf();
179 StrBufExtract_token(CfgToken, Buf, 0, '|');
180 Put(Cfg, HKEY("mboxpolicy"), CfgToken, HFreeStrBuf);
182 CfgToken = NewStrBuf();
183 StrBufExtract_token(CfgToken, Buf, 1, '|');
184 Put(Cfg, HKEY("mboxvalue"), CfgToken, HFreeStrBuf);
190 * parse siteconfig changes
192 void siteconfig(void)
194 struct wcsession *WCC = WC;
198 if (strlen(bstr("ok_button")) == 0) {
202 serv_printf("CONF set");
203 serv_getln(buf, sizeof buf);
205 safestrncpy(WCC->ImportantMessage, &buf[4], sizeof WCC->ImportantMessage);
210 for (i=0; i < (sizeof(ServerConfig) / sizeof(CfgMapping)); i ++)
212 switch (ServerConfig[i].type) {
215 serv_putbuf(SBstr(ServerConfig[i].Key, ServerConfig[i].len));
218 serv_puts(YesBstr(ServerConfig[i].Key,
219 ServerConfig[i].len) ?
223 serv_puts(YesBstr(ServerConfig[i].Key,
224 ServerConfig[i].len) ?
231 serv_printf("SPEX site|%d|%d", ibstr("sitepolicy"), ibstr("sitevalue"));
232 serv_getln(buf, sizeof buf);
233 serv_printf("SPEX mailboxes|%d|%d", ibstr("mboxpolicy"), ibstr("mboxvalue"));
234 serv_getln(buf, sizeof buf);
236 strcpy(serv_info.serv_default_cal_zone, bstr("c_default_cal_zone"));
238 safestrncpy(WCC->ImportantMessage, _("Your system configuration has been updated."),
239 sizeof WCC->ImportantMessage);
240 DeleteHash(&WCC->ServCfg);
244 void tmplput_servcfg(StrBuf *Target, int nArgs, WCTemplateToken *Tokens, void *Context, int ContextType)
246 struct wcsession *WCC = WC;
251 if (WCC->ServCfg == NULL)
253 GetHash(WCC->ServCfg,
254 Tokens->Params[0]->Start,
255 Tokens->Params[0]->len,
257 Buf = (StrBuf*) vBuf;
258 StrBufAppendTemplate(Target, nArgs, Tokens, Context, ContextType, Buf, 1);
262 int ConditionalServCfg(WCTemplateToken *Tokens, void *Context, int ContextType)
264 struct wcsession *WCC = WC;
269 if (WCC->ServCfg == NULL)
271 GetHash(WCC->ServCfg,
272 Tokens->Params[2]->Start,
273 Tokens->Params[2]->len,
275 if (vBuf == NULL) return 0;
276 Buf = (StrBuf*) vBuf;
277 if (Tokens->nParameters == 3) {
280 else if (Tokens->Params[3]->Type == TYPE_STR)
281 return (strcmp(Tokens->Params[3]->Start, ChrPtr(Buf)) == 0);
282 else return (StrTol(Buf) == Tokens->Params[3]->lvalue);
287 int ConditionalServCfgSubst(WCTemplateToken *Tokens, void *Context, int ContextType)
289 struct wcsession *WCC = WC;
294 if (WCC->ServCfg == NULL)
296 GetHash(WCC->ServCfg,
297 Tokens->Params[2]->Start,
298 Tokens->Params[2]->len,
300 if (vBuf == NULL) return 0;
301 Buf = (StrBuf*) vBuf;
303 return CompareSubstToStrBuf(Buf, Tokens->Params[3]);
309 InitModule_SITECONFIG
312 WebcitAddUrlHandler(HKEY("siteconfig"), siteconfig, CTX_NONE);
314 RegisterNamespace("SERV:CFG", 1, 2, tmplput_servcfg, CTX_NONE);
315 RegisterConditional(HKEY("COND:SERVCFG"), 3, ConditionalServCfg, CTX_NONE);
316 RegisterConditional(HKEY("COND:SERVCFG:SUBST"), 4, ConditionalServCfgSubst, CTX_NONE);