From 365bc90d4a3b3b561e96282e57e9848f8b79c81f Mon Sep 17 00:00:00 2001 From: =?utf8?q?Wilfried=20G=C3=B6esgens?= Date: Wed, 11 Aug 2010 11:15:15 +0000 Subject: [PATCH] * load_siteconfig(): revalidate what the server gives us as siteconfig, and bail out if we don't understand what we see. --- webcit/siteconfig.c | 28 +++++++++++++++++++++------- 1 file changed, 21 insertions(+), 7 deletions(-) diff --git a/webcit/siteconfig.c b/webcit/siteconfig.c index 6a5eea83b..24f97212c 100644 --- a/webcit/siteconfig.c +++ b/webcit/siteconfig.c @@ -213,7 +213,6 @@ void load_siteconfig(void) wcsession *WCC = WC; StrBuf *Buf; HashList *Cfg; - char buf[SIZ]; long len; int i; @@ -221,14 +220,21 @@ void load_siteconfig(void) WCC->ServCfg = NewHash(1, NULL); Cfg = WCC->ServCfg; + Buf = NewStrBuf(); + serv_printf("CONF get"); - serv_getln(buf, sizeof buf); + StrBuf_ServGetln(Buf); + if (GetServerStatus(Buf, NULL) != 1) { + StrBufCutLeft(Buf, 4); + AppendImportantMessage(SKEY(Buf)); + return; + + } i = 0; - Buf = NewStrBuf(); - while ((sizeof(ServerConfig) / sizeof(CfgMapping)) && - (len = StrBuf_ServGetln(Buf), - strcmp(ChrPtr(Buf), "000")) && - (i <= sizeof(ServerConfig))) + while (len = StrBuf_ServGetln(Buf), + (i <= (sizeof(ServerConfig) / sizeof(CfgMapping))) && + ((len != 3) || (strcmp(ChrPtr(Buf), "000")!= 0)) + ) { Put(Cfg, ServerConfig[i].Key, @@ -241,6 +247,14 @@ void load_siteconfig(void) 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; + } FreeStrBuf(&Buf); LoadExpirePolicy(sitepolicy); -- 2.30.2