X-Git-Url: https://code.citadel.org/?a=blobdiff_plain;f=webcit%2Fsieve.c;fp=webcit%2Fsieve.c;h=528009ef3f1ebb3f9899175d6aa427631308e28d;hb=c6aec42f213ec284e34648f3d69bcf927dccddb1;hp=2e3d615853b4f09c68964856ed41ba3b2c358b03;hpb=7beff529e758f6f0706e733901824c63bcac6d19;p=citadel.git diff --git a/webcit/sieve.c b/webcit/sieve.c index 2e3d61585..528009ef3 100644 --- a/webcit/sieve.c +++ b/webcit/sieve.c @@ -1,3 +1,4 @@ + /* * Copyright (c) 1996-2020 by the citadel.org team * @@ -48,19 +49,20 @@ void parse_fields_from_rule_editor(void) { char rule[2048]; char encoded_rule[4096]; char my_addresses[4096]; - + /* Enumerate my email addresses in case they are needed for a vacation rule */ my_addresses[0] = 0; serv_puts("GVEA"); serv_getln(buf, sizeof buf); - if (buf[0] == '1') while (serv_getln(buf, sizeof buf), strcmp(buf, "000")) { - if (!IsEmptyStr(my_addresses)) { - strcat(my_addresses, ",\n"); + if (buf[0] == '1') + while (serv_getln(buf, sizeof buf), strcmp(buf, "000")) { + if (!IsEmptyStr(my_addresses)) { + strcat(my_addresses, ",\n"); + } + strcat(my_addresses, "\""); + strcat(my_addresses, buf); + strcat(my_addresses, "\""); } - strcat(my_addresses, "\""); - strcat(my_addresses, buf); - strcat(my_addresses, "\""); - } /* Now generate the script and write it to the Citadel server */ serv_printf("PIBR"); @@ -69,51 +71,49 @@ void parse_fields_from_rule_editor(void) { return; } - for (i=0; iIsActive; } -int ConditionalSieveScriptIsRulesScript(StrBuf *Target, WCTemplputParams *TP) -{ - SieveListing *SieveList = (SieveListing *)CTX(CTX_SIEVELIST); +int ConditionalSieveScriptIsRulesScript(StrBuf * Target, WCTemplputParams * TP) { + SieveListing *SieveList = (SieveListing *) CTX(CTX_SIEVELIST); return SieveList->IsActive; } -void tmplput_SieveScriptName(StrBuf *Target, WCTemplputParams *TP) -{ - SieveListing *SieveList = (SieveListing *)CTX(CTX_SIEVELIST); +void tmplput_SieveScriptName(StrBuf * Target, WCTemplputParams * TP) { + SieveListing *SieveList = (SieveListing *) CTX(CTX_SIEVELIST); StrBufAppendTemplate(Target, TP, SieveList->Name, 0); } -void tmplput_SieveScriptContent(StrBuf *Target, WCTemplputParams *TP) -{ - SieveListing *SieveList = (SieveListing *)CTX(CTX_SIEVELIST); +void tmplput_SieveScriptContent(StrBuf * Target, WCTemplputParams * TP) { + SieveListing *SieveList = (SieveListing *) CTX(CTX_SIEVELIST); StrBufAppendTemplate(Target, TP, SieveList->Content, 0); } -void FreeSieveListing(void *vSieveListing) -{ - SieveListing *List = (SieveListing*) vSieveListing; +void FreeSieveListing(void *vSieveListing) { + SieveListing *List = (SieveListing *) vSieveListing; FreeStrBuf(&List->Name); free(List); } -HashList *GetSieveScriptListing(StrBuf *Target, WCTemplputParams *TP) -{ - wcsession *WCC = WC; +HashList *GetSieveScriptListing(StrBuf * Target, WCTemplputParams * TP) { + wcsession *WCC = WC; StrBuf *Line; int num_scripts = 0; int rules_script_active = 0; int have_rules_script = 0; const char *pch; - HashPos *it; + HashPos *it; int Done = 0; SieveListing *Ruleset; @@ -218,31 +212,25 @@ HashList *GetSieveScriptListing(StrBuf *Target, WCTemplputParams *TP) serv_puts("MSIV listscripts"); Line = NewStrBuf(); StrBuf_ServGetln(Line); - if (GetServerStatus(Line, NULL) == 1) - { + if (GetServerStatus(Line, NULL) == 1) { WCC->KnownSieveScripts = NewHash(1, Flathash); - while(!Done && (StrBuf_ServGetln(Line) >= 0) ) - if ( (StrLength(Line)==3) && - !strcmp(ChrPtr(Line), "000")) - { + while (!Done && (StrBuf_ServGetln(Line) >= 0)) + if ((StrLength(Line) == 3) && !strcmp(ChrPtr(Line), "000")) { Done = 1; } - else - { + else { pch = NULL; Ruleset = (SieveListing *) malloc(sizeof(SieveListing)); Ruleset->Name = NewStrBufPlain(NULL, StrLength(Line)); StrBufExtract_NextToken(Ruleset->Name, Line, &pch, '|'); - Ruleset->IsActive = StrBufExtractNext_int(Line, &pch, '|'); + Ruleset->IsActive = StrBufExtractNext_int(Line, &pch, '|'); Ruleset->Content = NULL; - if (!strcasecmp(ChrPtr(Ruleset->Name), RULES_SCRIPT)) - { + if (!strcasecmp(ChrPtr(Ruleset->Name), RULES_SCRIPT)) { Ruleset->IsRulesScript = 1; have_rules_script = 1; - if (Ruleset->IsActive) - { + if (Ruleset->IsActive) { rules_script_active = 1; PutBstr(HKEY("__SIEVE:RULESSCRIPT"), NewStrBufPlain(HKEY("1"))); } @@ -257,8 +245,7 @@ HashList *GetSieveScriptListing(StrBuf *Target, WCTemplputParams *TP) PutBstr(HKEY("__SIEVE:EXTERNAL_SCRIPT"), NewStrBufPlain(HKEY("1"))); } - if (num_scripts > have_rules_script) - { + if (num_scripts > have_rules_script) { long rc = 0; long len; const char *Key; @@ -270,29 +257,24 @@ HashList *GetSieveScriptListing(StrBuf *Target, WCTemplputParams *TP) PutBstr(HKEY("__SIEVE:HAVE_EXTERNAL_SCRIPT"), NewStrBufPlain(HKEY("1"))); it = GetNewHashPos(WCC->KnownSieveScripts, 0); - while (GetNextHashPos(WCC->KnownSieveScripts, it, &len, &Key, &vRuleset) && - (vRuleset != NULL)) - { + while (GetNextHashPos(WCC->KnownSieveScripts, it, &len, &Key, &vRuleset) && (vRuleset != NULL)) { Ruleset = (SieveListing *) vRuleset; serv_printf("MSIV getscript|%s", ChrPtr(Ruleset->Name)); StrBuf_ServGetln(Line); - if (GetServerStatus(Line, NULL) == 1) - { + if (GetServerStatus(Line, NULL) == 1) { Ruleset->Content = NewStrBuf(); Done = 0; - while(!Done && (rc = StrBuf_ServGetln(Line), rc >= 0) ) - if ( (StrLength(Line)==3) && - !strcmp(ChrPtr(Line), "000")) - { + while (!Done && (rc = StrBuf_ServGetln(Line), rc >= 0)) + if ((StrLength(Line) == 3) && !strcmp(ChrPtr(Line), "000")) { Done = 1; } - else - { - if (StrLength(Ruleset->Content)>0) + else { + if (StrLength(Ruleset->Content) > 0) StrBufAppendBufPlain(Ruleset->Content, HKEY("\n"), 0); StrBufAppendBuf(Ruleset->Content, Line, 0); } - if (rc < 0) break; + if (rc < 0) + break; } } } @@ -301,22 +283,21 @@ HashList *GetSieveScriptListing(StrBuf *Target, WCTemplputParams *TP) } -typedef enum __eSieveHfield -{ - from, - tocc, - subject, - replyto, - sender, - resentfrom, - resentto, - envfrom, - envto, - xmailer, - xspamflag, - xspamstatus, - listid, - size, +typedef enum __eSieveHfield { + from, + tocc, + subject, + replyto, + sender, + resentfrom, + resentto, + envfrom, + envto, + xmailer, + xspamflag, + xspamstatus, + listid, + size, all } eSieveHfield; @@ -362,128 +343,89 @@ typedef struct __SieveRule { StrBuf *redirect; StrBuf *automsg; eSieveFinal final; -}SieveRule; +} SieveRule; -int ConditionalSieveRule_hfield(StrBuf *Target, WCTemplputParams *TP) -{ - SieveRule *Rule = (SieveRule *)CTX(CTX_SIEVESCRIPT); - - return GetTemplateTokenNumber(Target, - TP, - 3, - from) - == - Rule->hfield; +int ConditionalSieveRule_hfield(StrBuf * Target, WCTemplputParams * TP) { + SieveRule *Rule = (SieveRule *) CTX(CTX_SIEVESCRIPT); + + return GetTemplateTokenNumber(Target, TP, 3, from) + == Rule->hfield; } -int ConditionalSieveRule_compare(StrBuf *Target, WCTemplputParams *TP) -{ - SieveRule *Rule = (SieveRule *)CTX(CTX_SIEVESCRIPT); - return GetTemplateTokenNumber(Target, - TP, - 3, - contains) - == - Rule->compare; +int ConditionalSieveRule_compare(StrBuf * Target, WCTemplputParams * TP) { + SieveRule *Rule = (SieveRule *) CTX(CTX_SIEVESCRIPT); + return GetTemplateTokenNumber(Target, TP, 3, contains) + == Rule->compare; } -int ConditionalSieveRule_action(StrBuf *Target, WCTemplputParams *TP) -{ - SieveRule *Rule = (SieveRule *)CTX(CTX_SIEVESCRIPT); - return GetTemplateTokenNumber(Target, - TP, - 3, - keep) - == - Rule->Action; +int ConditionalSieveRule_action(StrBuf * Target, WCTemplputParams * TP) { + SieveRule *Rule = (SieveRule *) CTX(CTX_SIEVESCRIPT); + return GetTemplateTokenNumber(Target, TP, 3, keep) + == Rule->Action; } -int ConditionalSieveRule_sizecomp(StrBuf *Target, WCTemplputParams *TP) -{ - SieveRule *Rule = (SieveRule *)CTX(CTX_SIEVESCRIPT); - return GetTemplateTokenNumber(Target, - TP, - 3, - larger) - == - Rule->sizecomp; +int ConditionalSieveRule_sizecomp(StrBuf * Target, WCTemplputParams * TP) { + SieveRule *Rule = (SieveRule *) CTX(CTX_SIEVESCRIPT); + return GetTemplateTokenNumber(Target, TP, 3, larger) + == Rule->sizecomp; } -int ConditionalSieveRule_final(StrBuf *Target, WCTemplputParams *TP) -{ - SieveRule *Rule = (SieveRule *)CTX(CTX_SIEVESCRIPT); - return GetTemplateTokenNumber(Target, - TP, - 3, - econtinue) - == - Rule->final; +int ConditionalSieveRule_final(StrBuf * Target, WCTemplputParams * TP) { + SieveRule *Rule = (SieveRule *) CTX(CTX_SIEVESCRIPT); + return GetTemplateTokenNumber(Target, TP, 3, econtinue) + == Rule->final; } -int ConditionalSieveRule_ThisRoom(StrBuf *Target, WCTemplputParams *TP) -{ - SieveRule *Rule = (SieveRule *)CTX(CTX_SIEVESCRIPT); - return GetTemplateTokenNumber(Target, - TP, - 3, - econtinue) - == - Rule->final; +int ConditionalSieveRule_ThisRoom(StrBuf * Target, WCTemplputParams * TP) { + SieveRule *Rule = (SieveRule *) CTX(CTX_SIEVESCRIPT); + return GetTemplateTokenNumber(Target, TP, 3, econtinue) + == Rule->final; } -int ConditionalSieveRule_Active(StrBuf *Target, WCTemplputParams *TP) -{ - SieveRule *Rule = (SieveRule *)CTX(CTX_SIEVESCRIPT); - return Rule->active; +int ConditionalSieveRule_Active(StrBuf * Target, WCTemplputParams * TP) { + SieveRule *Rule = (SieveRule *) CTX(CTX_SIEVESCRIPT); + return Rule->active; } -void tmplput_SieveRule_htext(StrBuf *Target, WCTemplputParams *TP) -{ - SieveRule *Rule = (SieveRule *)CTX(CTX_SIEVESCRIPT); +void tmplput_SieveRule_htext(StrBuf * Target, WCTemplputParams * TP) { + SieveRule *Rule = (SieveRule *) CTX(CTX_SIEVESCRIPT); StrBufAppendTemplate(Target, TP, Rule->htext, 0); } -void tmplput_SieveRule_fileinto(StrBuf *Target, WCTemplputParams *TP) -{ - SieveRule *Rule = (SieveRule *)CTX(CTX_SIEVESCRIPT); +void tmplput_SieveRule_fileinto(StrBuf * Target, WCTemplputParams * TP) { + SieveRule *Rule = (SieveRule *) CTX(CTX_SIEVESCRIPT); StrBufAppendTemplate(Target, TP, Rule->fileinto, 0); } -void tmplput_SieveRule_redirect(StrBuf *Target, WCTemplputParams *TP) -{ - SieveRule *Rule = (SieveRule *)CTX(CTX_SIEVESCRIPT); +void tmplput_SieveRule_redirect(StrBuf * Target, WCTemplputParams * TP) { + SieveRule *Rule = (SieveRule *) CTX(CTX_SIEVESCRIPT); StrBufAppendTemplate(Target, TP, Rule->redirect, 0); } -void tmplput_SieveRule_automsg(StrBuf *Target, WCTemplputParams *TP) -{ - SieveRule *Rule = (SieveRule *)CTX(CTX_SIEVESCRIPT); +void tmplput_SieveRule_automsg(StrBuf * Target, WCTemplputParams * TP) { + SieveRule *Rule = (SieveRule *) CTX(CTX_SIEVESCRIPT); StrBufAppendTemplate(Target, TP, Rule->automsg, 0); } -void tmplput_SieveRule_sizeval(StrBuf *Target, WCTemplputParams *TP) -{ - SieveRule *Rule = (SieveRule *)CTX(CTX_SIEVESCRIPT); +void tmplput_SieveRule_sizeval(StrBuf * Target, WCTemplputParams * TP) { + SieveRule *Rule = (SieveRule *) CTX(CTX_SIEVESCRIPT); StrBufAppendPrintf(Target, "%d", Rule->sizeval); } -void tmplput_SieveRule_lookup_FileIntoRoom(StrBuf *Target, WCTemplputParams *TP) -{ +void tmplput_SieveRule_lookup_FileIntoRoom(StrBuf * Target, WCTemplputParams * TP) { void *vRoom; - SieveRule *Rule = (SieveRule *)CTX(CTX_SIEVESCRIPT); - wcsession *WCC = WC; + SieveRule *Rule = (SieveRule *) CTX(CTX_SIEVESCRIPT); + wcsession *WCC = WC; HashList *Rooms = GetRoomListHashLKRA(Target, TP); GetHash(Rooms, SKEY(Rule->fileinto), &vRoom); - WCC->ThisRoom = (folder*) vRoom; + WCC->ThisRoom = (folder *) vRoom; } -void FreeSieveRule(void *vRule) -{ - SieveRule *Rule = (SieveRule*) vRule; +void FreeSieveRule(void *vRule) { + SieveRule *Rule = (SieveRule *) vRule; FreeStrBuf(&Rule->htext); FreeStrBuf(&Rule->fileinto); FreeStrBuf(&Rule->redirect); FreeStrBuf(&Rule->automsg); - + free(Rule); } #define WC_RULE_HEADER "rule|" -HashList *GetSieveRules(StrBuf *Target, WCTemplputParams *TP) -{ +HashList *GetSieveRules(StrBuf * Target, WCTemplputParams * TP) { StrBuf *Line = NULL; StrBuf *EncodedRule = NULL; int n = 0; @@ -497,38 +439,34 @@ HashList *GetSieveRules(StrBuf *Target, WCTemplputParams *TP) Line = NewStrBuf(); EncodedRule = NewStrBuf(); StrBuf_ServGetln(Line); - if (GetServerStatus(Line, NULL) == 1) - { - while(!Done && (StrBuf_ServGetln(Line) >= 0) ) - if ( (StrLength(Line)==3) && - !strcmp(ChrPtr(Line), "000")) - { + if (GetServerStatus(Line, NULL) == 1) { + while (!Done && (StrBuf_ServGetln(Line) >= 0)) + if ((StrLength(Line) == 3) && !strcmp(ChrPtr(Line), "000")) { Done = 1; } - else - { + else { pch = NULL; /* We just care for our encoded header and skip everything else */ - if ((StrLength(Line) > sizeof(WC_RULE_HEADER) - 1) && (!strncasecmp(ChrPtr(Line), HKEY(WC_RULE_HEADER)))) - { + if ((StrLength(Line) > sizeof(WC_RULE_HEADER) - 1) + && (!strncasecmp(ChrPtr(Line), HKEY(WC_RULE_HEADER)))) { StrBufSkip_NTokenS(Line, &pch, '|', 1); - n = StrBufExtractNext_int(Line, &pch, '|'); + n = StrBufExtractNext_int(Line, &pch, '|'); StrBufExtract_NextToken(EncodedRule, Line, &pch, '|'); StrBufDecodeBase64(EncodedRule); - Rule = (SieveRule*) malloc(sizeof(SieveRule)); + Rule = (SieveRule *) malloc(sizeof(SieveRule)); - Rule->htext = NewStrBufPlain (NULL, StrLength(EncodedRule)); + Rule->htext = NewStrBufPlain(NULL, StrLength(EncodedRule)); - Rule->fileinto = NewStrBufPlain (NULL, StrLength(EncodedRule)); - Rule->redirect = NewStrBufPlain (NULL, StrLength(EncodedRule)); - Rule->automsg = NewStrBufPlain (NULL, StrLength(EncodedRule)); + Rule->fileinto = NewStrBufPlain(NULL, StrLength(EncodedRule)); + Rule->redirect = NewStrBufPlain(NULL, StrLength(EncodedRule)); + Rule->automsg = NewStrBufPlain(NULL, StrLength(EncodedRule)); /* Grab our existing values to populate */ pch = NULL; Rule->active = StrBufExtractNext_int(EncodedRule, &pch, '|'); StrBufExtract_NextToken(Line, EncodedRule, &pch, '|'); - + Rule->hfield = (eSieveHfield) GetTokenDefine(SKEY(Line), tocc); StrBufExtract_NextToken(Line, EncodedRule, &pch, '|'); Rule->compare = (eSieveCompare) GetTokenDefine(SKEY(Line), contains); @@ -550,10 +488,10 @@ HashList *GetSieveRules(StrBuf *Target, WCTemplputParams *TP) } while (n < MAX_RULES) { - Rule = (SieveRule*) malloc(sizeof(SieveRule)); + Rule = (SieveRule *) malloc(sizeof(SieveRule)); memset(Rule, 0, sizeof(SieveRule)); Put(SieveRules, IKEY(n), Rule, FreeSieveRule); - + n++; } @@ -563,33 +501,27 @@ HashList *GetSieveRules(StrBuf *Target, WCTemplputParams *TP) return SieveRules; } -void -SessionDetachModule_SIEVE -(wcsession *sess) -{ +void SessionDetachModule_SIEVE(wcsession * sess) { DeleteHash(&sess->KnownSieveScripts); } -void -InitModule_SIEVE -(void) -{ +void InitModule_SIEVE(void) { RegisterCTX(CTX_SIEVELIST); RegisterCTX(CTX_SIEVESCRIPT); - REGISTERTokenParamDefine(from); - REGISTERTokenParamDefine(tocc); - REGISTERTokenParamDefine(subject); - REGISTERTokenParamDefine(replyto); - REGISTERTokenParamDefine(sender); - REGISTERTokenParamDefine(resentfrom); - REGISTERTokenParamDefine(resentto); - REGISTERTokenParamDefine(envfrom); - REGISTERTokenParamDefine(envto); - REGISTERTokenParamDefine(xmailer); - REGISTERTokenParamDefine(xspamflag); - REGISTERTokenParamDefine(xspamstatus); - REGISTERTokenParamDefine(listid); - REGISTERTokenParamDefine(size); + REGISTERTokenParamDefine(from); + REGISTERTokenParamDefine(tocc); + REGISTERTokenParamDefine(subject); + REGISTERTokenParamDefine(replyto); + REGISTERTokenParamDefine(sender); + REGISTERTokenParamDefine(resentfrom); + REGISTERTokenParamDefine(resentto); + REGISTERTokenParamDefine(envfrom); + REGISTERTokenParamDefine(envto); + REGISTERTokenParamDefine(xmailer); + REGISTERTokenParamDefine(xspamflag); + REGISTERTokenParamDefine(xspamstatus); + REGISTERTokenParamDefine(listid); + REGISTERTokenParamDefine(size); REGISTERTokenParamDefine(all); REGISTERTokenParamDefine(contains); @@ -620,7 +552,7 @@ InitModule_SIEVE RegisterNamespace("SIEVE:SCRIPT:NAME", 0, 1, tmplput_SieveScriptName, NULL, CTX_SIEVELIST); RegisterNamespace("SIEVE:SCRIPT:CONTENT", 0, 1, tmplput_SieveScriptContent, NULL, CTX_SIEVELIST); - + RegisterIterator("SIEVE:RULES", 0, NULL, GetSieveRules, NULL, DeleteHash, CTX_SIEVESCRIPT, CTX_NONE, IT_NOFLAG); RegisterConditional("COND:SIEVE:ACTIVE", 1, ConditionalSieveRule_Active, CTX_SIEVESCRIPT);