Reverts commit c6aec42f213ec284e34648f3d69bcf927dccddb1 because putting the opening...
[citadel.git] / webcit / sieve.c
index 528009ef3f1ebb3f9899175d6aa427631308e28d..2e3d615853b4f09c68964856ed41ba3b2c358b03 100644 (file)
@@ -1,4 +1,3 @@
-
 /*
  * Copyright (c) 1996-2020 by the citadel.org team
  *
@@ -49,20 +48,19 @@ 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");
-                       }
-                       strcat(my_addresses, "\"");
-                       strcat(my_addresses, buf);
-                       strcat(my_addresses, "\"");
+       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, "\"");
+       }
 
        /* Now generate the script and write it to the Citadel server */
        serv_printf("PIBR");
@@ -71,49 +69,51 @@ void parse_fields_from_rule_editor(void) {
                return;
        }
 
-       for (i = 0; i < MAX_RULES; ++i) {
-
+       for (i=0; i<MAX_RULES; ++i) {
+               
                strcpy(rule, "");
 
                sprintf(fname, "active%d", i);
-               active = !strcasecmp(BSTR(fname), "on");
+               active = !strcasecmp(BSTR(fname), "on") ;
 
                if (active) {
 
                        sprintf(fname, "hfield%d", i);
                        safestrncpy(hfield, BSTR(fname), sizeof hfield);
-
+       
                        sprintf(fname, "compare%d", i);
                        safestrncpy(compare, BSTR(fname), sizeof compare);
-
+       
                        sprintf(fname, "htext%d", i);
                        safestrncpy(htext, BSTR(fname), sizeof htext);
-
+       
                        sprintf(fname, "sizecomp%d", i);
                        safestrncpy(sizecomp, BSTR(fname), sizeof sizecomp);
-
+       
                        sprintf(fname, "sizeval%d", i);
                        sizeval = IBSTR(fname);
-
+       
                        sprintf(fname, "action%d", i);
                        safestrncpy(action, BSTR(fname), sizeof action);
-
+       
                        sprintf(fname, "fileinto%d", i);
                        safestrncpy(fileinto, BSTR(fname), sizeof fileinto);
-
+       
                        sprintf(fname, "redirect%d", i);
                        safestrncpy(redirect, BSTR(fname), sizeof redirect);
-
+       
                        sprintf(fname, "automsg%d", i);
                        safestrncpy(automsg, BSTR(fname), sizeof automsg);
-
+       
                        sprintf(fname, "final%d", i);
                        safestrncpy(final, BSTR(fname), sizeof final);
-
+       
                        snprintf(rule, sizeof rule, "%d|%s|%s|%s|%s|%d|%s|%s|%s|%s|%s",
-                                active, hfield, compare, htext, sizecomp, sizeval, action, fileinto, redirect, automsg, final);
-
-                       size_t len = CtdlEncodeBase64(encoded_rule, rule, strlen(rule) + 1, BASE64_NO_LINEBREAKS);
+                               active, hfield, compare, htext, sizecomp, sizeval, action, fileinto,
+                               redirect, automsg, final
+                       );
+       
+                       size_t len = CtdlEncodeBase64(encoded_rule, rule, strlen(rule)+1, BASE64_NO_LINEBREAKS);
                        if (encoded_rule[len - 1] == '\n') {
                                encoded_rule[len - 1] = '\0';
                        }
@@ -171,37 +171,43 @@ typedef struct __SieveListing {
        StrBuf *Content;
 } SieveListing;
 
-int ConditionalSieveScriptIsActive(StrBuf * Target, WCTemplputParams * TP) {
-       SieveListing *SieveList = (SieveListing *) CTX(CTX_SIEVELIST);
+int ConditionalSieveScriptIsActive(StrBuf *Target, WCTemplputParams *TP)
+{
+       SieveListing     *SieveList = (SieveListing *)CTX(CTX_SIEVELIST);
        return SieveList->IsActive;
 }
-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;
 
@@ -212,25 +218,31 @@ 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")));
                                        }
@@ -245,7 +257,8 @@ 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;
@@ -257,24 +270,29 @@ 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;
                        }
                }
        }
@@ -283,21 +301,22 @@ 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;
 
@@ -343,89 +362,128 @@ 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;
@@ -439,34 +497,38 @@ 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);
@@ -488,10 +550,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++;
        }
 
@@ -501,27 +563,33 @@ 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);
@@ -552,7 +620,7 @@ void InitModule_SIEVE(void) {
        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);