4 * Functions which handle Internet domain configuration etc.
22 typedef struct _ConstStrBuf {
28 /* These are server config keywords; do not localize! */
29 ConstStrBuf CfgNames[] = {
30 { HKEY("localhost") },
31 { HKEY("directory") },
32 { HKEY("smarthost") },
34 { HKEY("spamassassin") },
35 { HKEY("masqdomain") },
43 * display the inet config dialog
45 void load_inetconf(void)
48 StrBuf *Buf, *CfgToken, *Value;
55 WCC->InetCfg = NewHash(1, NULL);
57 for (i = 0; i < (sizeof(CfgNames) / sizeof(ConstStrBuf)); i++) {
58 Hash = NewHash(1, NULL);
59 Put(WCC->InetCfg, CfgNames[i].name, CfgNames[i].len, Hash, HDeleteHash);
62 serv_printf("CONF GETSYS|application/x-citadel-internet-config");
63 serv_getln(buf, sizeof buf);
67 CfgToken = NewStrBuf();
68 while ((len = StrBuf_ServGetln(Buf),
69 strcmp(ChrPtr(Buf), "000"))) {
72 StrBufExtract_token(CfgToken, Buf, 1, '|');
73 StrBufExtract_token(Value, Buf, 0, '|');
74 GetHash(WCC->InetCfg, ChrPtr(CfgToken), StrLength(CfgToken), &vHash);
75 Hash = (HashList*) vHash;
77 lprintf(1, "ERROR Loading inet config line: [%s]\n",
82 nUsed = GetCount(Hash);
83 nUsed = snprintf(nnn, sizeof(nnn), "%d", nUsed+1);
84 Put(Hash, nnn, nUsed, Value, HFreeStrBuf);
87 FreeStrBuf(&CfgToken);
93 * save changes to the inet config
95 void new_save_inetconf(void) {
99 const StrBuf *eType, *eNum, *eName;
106 eType = sbstr("etype");
108 GetHash(WCC->InetCfg, ChrPtr(eType), StrLength(eType), &vHash);
109 Hash = (HashList*) vHash;
111 sprintf(WC->ImportantMessage, _("Invalid Parameter"));
116 if (strcasecmp(bstr("oper"), "delete") == 0) {
117 eNum = sbstr("ename");
118 if (!GetHash(Hash, ChrPtr(eNum), StrLength(eNum), &vStr) ||
120 sprintf(WC->ImportantMessage, _("Invalid Parameter"));
126 sprintf(WC->ImportantMessage, _("%s has been deleted."), ChrPtr(Str));
129 else if (!strcasecmp(bstr("oper"), "add")) {
130 eName = sbstr("ename");
132 sprintf(WC->ImportantMessage, _("Invalid Parameter"));
137 nUsed = GetCount(Hash);
138 nUsed = snprintf(nnn, sizeof(nnn), "%d", nUsed+1);
140 Put(Hash, nnn, nUsed, NewStrBufDup(eName), HFreeStrBuf);
141 sprintf(WC->ImportantMessage, "%s added.", ChrPtr(eName));
144 serv_printf("CONF PUTSYS|application/x-citadel-internet-config");
145 serv_getln(buf, SIZ);
147 for (i = 0; i < (sizeof(CfgNames) / sizeof(ConstStrBuf)); i++) {
152 GetHash(WCC->InetCfg, CfgNames[i].name, CfgNames[i].len, &vHash);
153 Hash = (HashList*) vHash;
155 sprintf(WC->ImportantMessage, _("Invalid Parameter"));
159 if (GetCount(Hash) > 0) {
160 where = GetNewHashPos(Hash, 0);
161 while (GetNextHashPos(Hash, where, &KeyLen, &Key, &vStr)) {
162 Str = (StrBuf*) vStr;
163 if ((Str!= NULL) && (StrLength(Str) > 0))
168 DeleteHashPos(&where);
172 DeleteHash(&WCC->InetCfg);
178 void InetCfgSubst(StrBuf *TemplBuffer, void *vContext, WCTemplateToken *Tokens)
180 SVPutBuf("SERVCFG:INET:HOSTNAME", vContext, 1);
183 void DeleteInetConfHash(StrBuf *Target, int nArgs, WCTemplateToken *Tokens, void *Context, int ContextType)
187 if (WCC->InetCfg != NULL)
188 DeleteHash(&WCC->InetCfg);
193 HashList *GetInetConfHash(StrBuf *Target, int nArgs, WCTemplateToken *Tokens, void *Context, int ContextType)
198 if (WCC->InetCfg == NULL)
200 GetHash(WCC->InetCfg,
201 Tokens->Params[2]->Start,
202 Tokens->Params[2]->len,
204 svprintf(HKEY("SERVCFG:INET:TYPE"), WCS_STRING, Tokens->Params[2]->Start);
212 WebcitAddUrlHandler(HKEY("save_inetconf"), new_save_inetconf, AJAX);
213 RegisterIterator("SERVCFG:INET", 1, NULL, GetInetConfHash, InetCfgSubst, NULL, CTX_INETCFG, CTX_NONE);
214 RegisterNamespace("SERVCFG:FLUSHINETCFG",0, 0, DeleteInetConfHash, CTX_NONE);