/[imapfilter]/imapfilter/file.c
ViewVC logotype

Diff of /imapfilter/file.c

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

revision 1.14 by lefcha, Tue Sep 11 16:15:21 2001 UTC revision 1.15 by lefcha, Wed Sep 12 15:40:35 2001 UTC
# Line 98  int parse_config(FILE * fp) Line 98  int parse_config(FILE * fp)
98      int i;      int i;
99      unsigned int row = 0;      unsigned int row = 0;
100      char line[LINE_MAX];      char line[LINE_MAX];
101      regex_t creg[10];      regex_t creg[11];
102      regmatch_t match[7];      regmatch_t match[7];
103      const char *reg[10] = {      const char *reg[11] = {
104            "^([[:blank:]]*\n|#.*\n)$",
105          "^[[:blank:]]*ACCOUNT[[:blank:]]+([[:graph:]]*):([[:graph:]]*)@([[:alnum:].-]+):?([[:digit:]]{0,5})[[:blank:]]*\n$",          "^[[:blank:]]*ACCOUNT[[:blank:]]+([[:graph:]]*):([[:graph:]]*)@([[:alnum:].-]+):?([[:digit:]]{0,5})[[:blank:]]*\n$",
106          "^[[:blank:]]*FOLDER[[:blank:]]+([[:alnum:]_-]+)[[:blank:]]+([[:graph:]]+)[[:blank:]]*\n$",          "^[[:blank:]]*FOLDER[[:blank:]]+([[:alnum:]_-]+)[[:blank:]]+([[:graph:]]+)[[:blank:]]*\n$",
107          "^[[:blank:]]*FILTER[[:blank:]]+([[:alnum:]_-]+)[[:blank:]]*([[:blank:]]OR|[[:blank:]]AND)?[[:blank:]]*\n$",          "^[[:blank:]]*FILTER[[:blank:]]+([[:alnum:]_-]+)[[:blank:]]*([[:blank:]]OR|[[:blank:]]AND)?[[:blank:]]*\n$",
# Line 110  int parse_config(FILE * fp) Line 111  int parse_config(FILE * fp)
111          "^[[:blank:]]*(MASK[[:blank:]])?[[:blank:]]*(OR[[:blank:]]|AND[[:blank:]])?[[:blank:]]*(NOT[[:blank:]])?[[:blank:]]*(HEADER)[[:blank:]]+([[:graph:]]+)[[:blank:]]+([[:print:]]+)\n$",          "^[[:blank:]]*(MASK[[:blank:]])?[[:blank:]]*(OR[[:blank:]]|AND[[:blank:]])?[[:blank:]]*(NOT[[:blank:]])?[[:blank:]]*(HEADER)[[:blank:]]+([[:graph:]]+)[[:blank:]]+([[:print:]]+)\n$",
112          "^[[:blank:]]*(MASK[[:blank:]])?[[:blank:]]*(OR[[:blank:]]|AND[[:blank:]])?[[:blank:]]*(NOT[[:blank:]])?[[:blank:]]*(LARGER|SMALLER)[[:blank:]]+([[:digit:]]+)[[:blank:]]*\n$",          "^[[:blank:]]*(MASK[[:blank:]])?[[:blank:]]*(OR[[:blank:]]|AND[[:blank:]])?[[:blank:]]*(NOT[[:blank:]])?[[:blank:]]*(LARGER|SMALLER)[[:blank:]]+([[:digit:]]+)[[:blank:]]*\n$",
113          "^[[:blank:]]*JOB[[:blank:]]+([[:alnum:],_-]+)[[:blank:]]+([[:alnum:],_-]+)[[:blank:]]*\n$",          "^[[:blank:]]*JOB[[:blank:]]+([[:alnum:],_-]+)[[:blank:]]+([[:alnum:],_-]+)[[:blank:]]*\n$",
114          "^([[:blank:]]*\n|#.*\n)$"          "^[[:blank:]]*LOGFILE[[:blank:]]*=[[:blank:]]*([[:print:]]+\n$"
115      };      };
116    
117      for (i = 0; i < 10; i++)      for (i = 0; i < 11; i++)
118          regcomp(&creg[i], reg[i], REG_EXTENDED | REG_ICASE);          regcomp(&creg[i], reg[i], REG_EXTENDED | REG_ICASE);
119    
120      while (fgets(line, LINE_MAX - 1, fp)) {      while (fgets(line, LINE_MAX - 1, fp)) {
121          row++;          row++;
122          if (!regexec(&creg[0], line, 6, match, 0)) {          if (!regexec(&creg[0], line, 0, match, 0))
             set_account(line, match);  
123              continue;              continue;
124          } else if (!regexec(&creg[1], line, 3, match, 0)) {          else if (!regexec(&creg[1], line, 6, match, 0))
125                set_account(line, match);
126            else if (!regexec(&creg[2], line, 3, match, 0))
127              set_mboxgrp(line, match);              set_mboxgrp(line, match);
128              continue;          else if (!regexec(&creg[3], line, 3, match, 0))
         } else if (!regexec(&creg[2], line, 3, match, 0)) {  
129              set_filter(line, match);              set_filter(line, match);
130              continue;          else if (!regexec(&creg[4], line, 3, match, 0))
         } else if (!regexec(&creg[3], line, 3, match, 0)) {  
131              set_action(line, match);              set_action(line, match);
132              continue;          else if (!regexec(&creg[5], line, 7, match, 0) ||
         } else if (!regexec(&creg[4], line, 7, match, 0) ||  
                    !regexec(&creg[5], line, 7, match, 0) ||  
133                     !regexec(&creg[6], line, 7, match, 0) ||                     !regexec(&creg[6], line, 7, match, 0) ||
134                     !regexec(&creg[7], line, 7, match, 0)) {                     !regexec(&creg[7], line, 7, match, 0) ||
135                       !regexec(&creg[8], line, 7, match, 0))
136              set_mask(line, match);              set_mask(line, match);
137              continue;          else if (!regexec(&creg[9], line, 3, match, 0))
         } else if (!regexec(&creg[8], line, 3, match, 0)) {  
138              set_job(line, match);              set_job(line, match);
139              continue;          else if (!regexec(&creg[10], line, 2, match, 0))
140          } else if (!regexec(&creg[9], line, 0, match, 0)) {              set_options(line, match);
141              continue;          else {
         } else {  
142              error("imapfilter: parse error in config file at row %d\n",              error("imapfilter: parse error in config file at row %d\n",
143                    row);                    row);
144              return 1;              return 1;
145          }          }
146      }      }
147    
148      for (i = 0; i < 10; i++)      for (i = 0; i < 11; i++)
149          regfree(&creg[i]);          regfree(&creg[i]);
150        
151        destroy_data();
152    
153      return 0;      return 0;
154  }  }
# Line 162  void set_options(char *line, regmatch_t Line 161  void set_options(char *line, regmatch_t
161  {  {
162      int s;      int s;
163    
164      if (!*logfile && !strncmp(line + match[1].rm_so, "LOGFILE", 7)) {      if (!*logfile) {
165          s = min((match[2].rm_eo - match[2].rm_so), PATH_MAX - 1);          s = min((match[2].rm_eo - match[2].rm_so), PATH_MAX - 1);
166          strncpy(logfile, line + match[2].rm_so, s);          strncpy(logfile, line + match[2].rm_so, s);
167          logfile[s] = 0;          logfile[s] = 0;

Legend:
Removed from v.1.14  
changed lines
  Added in v.1.15

webmaster@linux.gr
ViewVC Help
Powered by ViewVC 1.1.26