X-Git-Url: https://code.citadel.org/?a=blobdiff_plain;f=webcit%2Fsiteconfig.c;h=91509781466de4b029010cd5852d08e4900f4ac0;hb=fb6f6fa4ec4e3277e30d84326d48e6850822d318;hp=f893b4833e9437fa037ab3e337a5304ec2035e49;hpb=fa4703876cbb0330af860bb686d044ddb59dbadb;p=citadel.git diff --git a/webcit/siteconfig.c b/webcit/siteconfig.c index f893b4833..915097814 100644 --- a/webcit/siteconfig.c +++ b/webcit/siteconfig.c @@ -1,12 +1,20 @@ /* * Administrative screen for site-wide configuration + * + * Copyright (c) 1996-2012 by the citadel.org team + * + * This program is open source software. You can redistribute it and/or + * modify it under the terms of the GNU General Public License, version 3. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. */ - #include "webcit.h" #include "webserver.h" - HashList *ZoneHash = NULL; ConstStr ExpirePolicyString = {CStrOf(roompolicy) }; @@ -35,8 +43,7 @@ void LoadExpirePolicy(GPEXWhichPolicy which) WCC->Policy[which].expire_value = StrBufExtractNext_long(Buf, &Pos, '|'); } else if (State == 550) - StrBufAppendBufPlain(WCC->ImportantMsg, - _("Higher access is required to access this function."), -1, 0); + AppendImportantMessage(_("Higher access is required to access this function."), -1); FreeStrBuf(&Buf); } @@ -54,8 +61,7 @@ void SaveExpirePolicyFromHTTP(GPEXWhichPolicy which) StrBuf_ServGetln(Buf); GetServerStatus(Buf, &State); if (State == 550) - StrBufAppendBufPlain(WC->ImportantMsg, - _("Higher access is required to access this function."), -1, 0); + AppendImportantMessage(_("Higher access is required to access this function."), -1); FreeStrBuf(&Buf); } @@ -95,7 +101,6 @@ void tmplput_ExpireMode(StrBuf *Target, WCTemplputParams *TP) } - void LoadZoneFiles(void) { icalarray *zones; @@ -126,7 +131,7 @@ typedef struct _CfgMapping { int type; const char *Key; long len; -}CfgMapping; +} CfgMapping; #define CFG_STR 1 #define CFG_YES 2 @@ -199,11 +204,12 @@ CfgMapping ServerConfig[] = { {CFG_STR, HKEY("c_xmpp_s2s_port")}, {CFG_STR, HKEY("c_pop3_fetch")}, {CFG_STR, HKEY("c_pop3_fastest")}, - {CFG_YES , HKEY("c_spam_flag_only")}, - {CFG_YES , HKEY("c_guest_logins")} + {CFG_YES, HKEY("c_spam_flag_only")}, + {CFG_YES, HKEY("c_guest_logins")} }; + /* * display all configuration items */ @@ -213,7 +219,7 @@ void load_siteconfig(void) StrBuf *Buf; HashList *Cfg; long len; - int i; + int i, j; if (WCC->ServCfg == NULL) WCC->ServCfg = NewHash(1, NULL); @@ -226,33 +232,30 @@ void load_siteconfig(void) if (GetServerStatus(Buf, NULL) != 1) { StrBufCutLeft(Buf, 4); AppendImportantMessage(SKEY(Buf)); + FreeStrBuf(&Buf); return; } - i = 0; + j = i = 0; while (len = StrBuf_ServGetln(Buf), (len >= 0) && - (i <= (sizeof(ServerConfig) / sizeof(CfgMapping))) && ((len != 3) || strcmp(ChrPtr(Buf), "000"))) { - Put(Cfg, - ServerConfig[i].Key, - ServerConfig[i].len, - Buf, - HFreeStrBuf); - i++; - if (i <= sizeof(ServerConfig) / sizeof(CfgMapping)) + if (i < (sizeof(ServerConfig) / sizeof(CfgMapping))) + { + Put(Cfg, + ServerConfig[i].Key, + ServerConfig[i].len, + Buf, + HFreeStrBuf); + i++; Buf = NewStrBuf(); - else - Buf = NULL; - } - if (strcmp(ChrPtr(Buf), "000")!=0) - { - /* WHOOOOPSI??? burn the lines we don't understand */ - while ((len = StrBuf_ServGetln(Buf), - strcmp(ChrPtr(Buf), "000"))) {} - AppendImportantMessage(_("WARNING: Failed to parse Server Config; do you run a to new citserver?"), -1); - return; + } + else { + if (j == 0) + AppendImportantMessage(_("WARNING: Failed to parse Server Config; do you run a to new citserver?"), -1); + j++; + } } FreeStrBuf(&Buf); @@ -262,27 +265,30 @@ void load_siteconfig(void) -/** +/* * parse siteconfig changes */ void siteconfig(void) { wcsession *WCC = WC; int i; - char buf[256]; + StrBuf *Line; if (strlen(bstr("ok_button")) == 0) { display_aide_menu(); return; } + Line = NewStrBuf(); serv_printf("CONF set"); - serv_getln(buf, sizeof buf); - if (buf[0] != '4') { - safestrncpy(WCC->ImportantMessage, &buf[4], sizeof WCC->ImportantMessage); + StrBuf_ServGetln(Line); + if (GetServerStatusMsg(Line, NULL, 1, 4) != 4) { display_aide_menu(); + FreeStrBuf(&Line); return; } + FreeStrBuf(&Line); + for (i=0; i < (sizeof(ServerConfig) / sizeof(CfgMapping)); i ++) { switch (ServerConfig[i].type) { @@ -310,8 +316,7 @@ void siteconfig(void) FreeStrBuf(&WCC->serv_info->serv_default_cal_zone); WCC->serv_info->serv_default_cal_zone = NewStrBufDup(sbstr("c_default_cal_zone")); - safestrncpy(WCC->ImportantMessage, _("Your system configuration has been updated."), - sizeof WCC->ImportantMessage); + AppendImportantMessage(_("Your system configuration has been updated."), -1); DeleteHash(&WCC->ServCfg); display_aide_menu(); } @@ -382,6 +387,73 @@ int ConditionalServCfgCTXStrBuf(StrBuf *Target, WCTemplputParams *TP) else return 0; } +/*----------------------------------------------------------------------------* + * Displaying Logging * + *----------------------------------------------------------------------------*/ +typedef struct __LogStatusStruct { + int Enable; + StrBuf *Name; +}LogStatusStruct; + +void DeleteLogStatusStruct(void *v) +{ + LogStatusStruct *Stat = (LogStatusStruct*)v; + + FreeStrBuf(&Stat->Name); + free(Stat); +} + +void tmplput_servcfg_LogName(StrBuf *Target, WCTemplputParams *TP) +{ + LogStatusStruct *Stat = (LogStatusStruct*) CTX; + StrBufAppendTemplate(Target, TP, Stat->Name, 1); +} + +int ConditionalServCfgThisLogEnabled(StrBuf *Target, WCTemplputParams *TP) +{ + LogStatusStruct *Stat = (LogStatusStruct*) CTX; + return Stat->Enable; +} + +HashList *iterate_GetSrvLogEnable(StrBuf *Target, WCTemplputParams *TP) +{ + HashList *Hash = NULL; + StrBuf *Buf; + LogStatusStruct *Stat; + const char *Pos; + int Done = 0; + long len; + int num_logs = 0; + + serv_puts("LOGP"); + Buf = NewStrBuf(); + StrBuf_ServGetln(Buf); + if (GetServerStatus(Buf, NULL) == 1) { + Hash = NewHash(1, Flathash); + while (!Done) { + len = StrBuf_ServGetln(Buf); + if ((len <0) || + ((len == 3) && + !strcmp(ChrPtr(Buf), "000"))) + { + Done = 1; + break; + } + Stat = (LogStatusStruct*) malloc (sizeof(LogStatusStruct)); + Pos = NULL; + Stat->Name = NewStrBufPlain(NULL, len); + StrBufExtract_NextToken(Stat->Name, Buf, &Pos, '|'); + Stat->Enable = StrBufExtractNext_int(Buf, &Pos, '|'); + + Put(Hash, IKEY(num_logs), Stat, DeleteLogStatusStruct); + num_logs++; + } + } + FreeStrBuf(&Buf); + return Hash; +} + + void InitModule_SITECONFIG (void) @@ -406,6 +478,10 @@ InitModule_SITECONFIG RegisterConditional(HKEY("COND:EXPIRE:MODE"), 2, ConditionalExpire, CTX_NONE); RegisterNamespace("EXPIRE:VALUE", 1, 2, tmplput_ExpireValue, NULL, CTX_NONE); RegisterNamespace("EXPIRE:MODE", 1, 2, tmplput_ExpireMode, NULL, CTX_NONE); + + RegisterConditional(HKEY("COND:SERVCFG:THISLOGENABLE"), 4, ConditionalServCfgThisLogEnabled, CTX_SRVLOG); + RegisterIterator("SERVCFG:LOGENABLE", 0, NULL, iterate_GetSrvLogEnable, NULL, DeleteHash, CTX_SRVLOG, CTX_NONE, IT_NOFLAG); + RegisterNamespace("SERVCFG:LOGNAME", 0, 1, tmplput_servcfg_LogName, NULL, CTX_SRVLOG); } void