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

Diff of /imapfilter/file.c

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

revision 1.26 by lefcha, Tue Oct 23 09:21:45 2001 UTC revision 1.26.2.2 by lefcha, Mon Jan 21 15:45:02 2002 UTC
# Line 15  Line 15 
15  extern char logfile[PATH_MAX];  extern char logfile[PATH_MAX];
16  extern unsigned int options;  extern unsigned int options;
17    
18    long timeout = -1;              /* Server non-response timeout in seconds. */
19    
20    
21  /*  /*
22   * Find the path to configuration file, open it and call parse_config().   * Find the path to configuration file, open it and call parse_config().
# Line 97  int parse_config(FILE * fp) Line 99  int parse_config(FILE * fp)
99      int i, r = 0;      int i, r = 0;
100      unsigned int row = 0;      unsigned int row = 0;
101      char line[LINE_MAX];      char line[LINE_MAX];
102      regex_t creg[12];      regex_t creg[13];
103      regmatch_t match[7];      regmatch_t match[7];
104      const char *reg[12] = {      const char *reg[13] = {
105          "^([[:blank:]]*\n|#.*\n)$",          "^([[:blank:]]*\n|#.*\n)$",
106  #ifndef SSL_TLS  #ifndef SSL_TLS
107          "^[[:blank:]]*ACCOUNT[[:blank:]]+([[:graph:]]*):([[:graph:]]*)@([[:alnum:].-]+)(:[[:digit:]]+)?[[:blank:]]*\n$",          "^[[:blank:]]*ACCOUNT[[:blank:]]+([[:graph:]]*):([[:graph:]]*)@([[:alnum:].-]+)(:[[:digit:]]+)?[[:blank:]]*\n$",
108  #else  #else
109          "^[[:blank:]]*ACCOUNT[[:blank:]]+([[:graph:]]*):([[:graph:]]*)@([[:alnum:].-]+)(:[[:digit:]]+)?[[:blank:]]*([[:blank:]]SSL|[[:blank:]]SSL2|[[:blank:]]SSL3|[[:blank:]]TLS1)?[[:blank:]]*\n$",          "^[[:blank:]]*ACCOUNT[[:blank:]]+([[:graph:]]*):([[:graph:]]*)@([[:alnum:].-]+)(:[[:digit:]]+)?[[:blank:]]*([[:blank:]]SSL|[[:blank:]]SSL2|[[:blank:]]SSL3|[[:blank:]]TLS1)?[[:blank:]]*\n$",
110  #endif  #endif
111          "^[[:blank:]]*FOLDER[[:blank:]]+([[:alnum:]_-]+)[[:blank:]]+([[:graph:]]+)[[:blank:]]*\n$",          "^[[:blank:]]*FOLDER[[:blank:]]+([[:alnum:]_-]+)[[:blank:]]+([[:print:]]+)[[:blank:]]*\n$",
112          "^[[:blank:]]*FILTER[[:blank:]]+([[:alnum:]_-]+)[[:blank:]]*([[:blank:]]OR|[[:blank:]]AND)?[[:blank:]]*\n$",          "^[[:blank:]]*FILTER[[:blank:]]+([[:alnum:]_-]+)[[:blank:]]*([[:blank:]]OR|[[:blank:]]AND)?[[:blank:]]*\n$",
113          "^[[:blank:]]*ACTION[[:blank:]]+(DELETE|COPY[[:blank:]]+([[:graph:]]+)|MOVE[[:blank:]]+([[:graph:]]+)|LIST)[[:blank:]]*([[:graph:]]*)[[:blank:]]*\n$",          "^[[:blank:]]*ACTION[[:blank:]]+(DELETE|COPY[[:blank:]]+(\"[[:print:]]*\"|[[:graph:]]+)|MOVE[[:blank:]]+(\"[[:print:]]*\"|[[:graph:]]+)|LIST)[[:blank:]]*([[:graph:]]*)[[:blank:]]*\n$",
114          "^[[:blank:]]*(MASK[[:blank:]])?[[:blank:]]*(OR[[:blank:]]|AND[[:blank:]])?[[:blank:]]*(NOT[[:blank:]])?[[:blank:]]*(ANSWERED|DELETED|DRAFT|FLAGGED|NEW|OLD|RECENT|SEEN|UNANSWERED|UNDELETED|UNDRAFT|UNFLAGGED|UNSEEN)[[:blank:]]*\n$",          "^[[:blank:]]*(MASK[[:blank:]])?[[:blank:]]*(OR[[:blank:]]|AND[[:blank:]])?[[:blank:]]*(NOT[[:blank:]])?[[:blank:]]*(ANSWERED|DELETED|DRAFT|FLAGGED|NEW|OLD|RECENT|SEEN|UNANSWERED|UNDELETED|UNDRAFT|UNFLAGGED|UNSEEN)[[:blank:]]*\n$",
115          "^[[:blank:]]*(MASK[[:blank:]])?[[:blank:]]*(OR[[:blank:]]|AND[[:blank:]])?[[:blank:]]*(NOT[[:blank:]])?[[:blank:]]*(BCC|BODY|CC|FROM|SUBJECT|TEXT|TO)[[:blank:]]+(\"[[:print:]]*\"|[[:graph:]]+)[[:blank:]]*\n$",          "^[[:blank:]]*(MASK[[:blank:]])?[[:blank:]]*(OR[[:blank:]]|AND[[:blank:]])?[[:blank:]]*(NOT[[:blank:]])?[[:blank:]]*(BCC|BODY|CC|FROM|SUBJECT|TEXT|TO)[[:blank:]]+(\"[[:print:]]*\"|[[:graph:]]+)[[:blank:]]*\n$",
116          "^[[:blank:]]*(MASK[[:blank:]])?[[:blank:]]*(OR[[:blank:]]|AND[[:blank:]])?[[:blank:]]*(NOT[[:blank:]])?[[:blank:]]*(HEADER)[[:blank:]]+(\"[[:print:]]*\"|[[:graph:]]+)[[:blank:]]+(\"[[:print:]]*\"|[[:graph:]]+)[[:blank:]]*\n$",          "^[[:blank:]]*(MASK[[:blank:]])?[[:blank:]]*(OR[[:blank:]]|AND[[:blank:]])?[[:blank:]]*(NOT[[:blank:]])?[[:blank:]]*(HEADER)[[:blank:]]+(\"[[:print:]]*\"|[[:graph:]]+)[[:blank:]]+(\"[[:print:]]*\"|[[:graph:]]+)[[:blank:]]*\n$",
117          "^[[:blank:]]*(MASK[[:blank:]])?[[:blank:]]*(OR[[:blank:]]|AND[[:blank:]])?[[:blank:]]*(NOT[[:blank:]])?[[:blank:]]*(LARGER|SMALLER|OLDER|NEWER)[[:blank:]]+([[:digit:]]+)[[:blank:]]*\n$",          "^[[:blank:]]*(MASK[[:blank:]])?[[:blank:]]*(OR[[:blank:]]|AND[[:blank:]])?[[:blank:]]*(NOT[[:blank:]])?[[:blank:]]*(LARGER|SMALLER|OLDER|NEWER)[[:blank:]]+([[:digit:]]+)[[:blank:]]*\n$",
118          "^[[:blank:]]*JOB[[:blank:]]+([[:alnum:],_-]+)[[:blank:]]+([[:alnum:],_-]+)[[:blank:]]*\n$",          "^[[:blank:]]*JOB[[:blank:]]+([[:alnum:],_-]+)[[:blank:]]+([[:alnum:],_-]+)[[:blank:]]*\n$",
119          "^[[:blank:]]*(SET[[:blank:]])?[[:blank:]]*(LOGFILE)[[:blank:]]*=[[:blank:]]*([[:print:]]+)\n$",          "^[[:blank:]]*(SET[[:blank:]])?[[:blank:]]*(LOGFILE)[[:blank:]]*=[[:blank:]]*([[:print:]]+)\n$",
120          "^[[:blank:]]*(SET[[:blank:]])?[[:blank:]]*(HEADERS)[[:blank:]]*=[[:blank:]]*(YES|NO)[[:blank:]]*\n$"          "^[[:blank:]]*(SET[[:blank:]])?[[:blank:]]*(HEADERS|NAMESPACE)[[:blank:]]*=[[:blank:]]*(YES|NO)[[:blank:]]*\n$",
121            "^[[:blank:]]*(SET[[:blank:]])?[[:blank:]]*(TIMEOUT)[[:blank:]]*=[[:blank:]]*(-?[[:digit:]]+)\n$"
122      };      };
123    
124      for (i = 0; i < 12; i++)      for (i = 0; i < 13; i++)
125          regcomp(&creg[i], reg[i], REG_EXTENDED | REG_ICASE);          regcomp(&creg[i], reg[i], REG_EXTENDED | REG_ICASE);
126    
127      while (fgets(line, LINE_MAX - 1, fp)) {      while (fgets(line, LINE_MAX - 1, fp)) {
# Line 145  int parse_config(FILE * fp) Line 148  int parse_config(FILE * fp)
148          else if (!regexec(&creg[9], line, 3, match, 0))          else if (!regexec(&creg[9], line, 3, match, 0))
149              r = set_job(line, match);              r = set_job(line, match);
150          else if (!regexec(&creg[10], line, 4, match, 0) ||          else if (!regexec(&creg[10], line, 4, match, 0) ||
151                   !regexec(&creg[11], line, 4, match, 0))                   !regexec(&creg[11], line, 4, match, 0) ||
152                     !regexec(&creg[12], line, 4, match, 0))
153              set_options(line, match);              set_options(line, match);
154          else          else
155              return row;              return row;
# Line 154  int parse_config(FILE * fp) Line 158  int parse_config(FILE * fp)
158              return row;              return row;
159      }      }
160    
161      for (i = 0; i < 12; i++)      for (i = 0; i < 13; i++)
162          regfree(&creg[i]);          regfree(&creg[i]);
163    
164      destroy_data();      destroy_data();
# Line 172  void set_options(char *line, regmatch_t Line 176  void set_options(char *line, regmatch_t
176          if (!*logfile)          if (!*logfile)
177              strncat(logfile, line + match[3].rm_so,              strncat(logfile, line + match[3].rm_so,
178                      min((match[3].rm_eo - match[3].rm_so), PATH_MAX - 1));                      min((match[3].rm_eo - match[3].rm_so), PATH_MAX - 1));
179      } else {      } else if (!strncasecmp(line + match[2].rm_so, "header", 6)) {
180          if (!strncasecmp(line + match[3].rm_so, "yes", 3))          if (!strncasecmp(line + match[3].rm_so, "yes", 3))
181              options |= OPTION_HEADERS;              options |= OPTION_HEADERS;
182          else          else
183              options &= ~(OPTION_HEADERS);              options &= ~(OPTION_HEADERS);
184        } else if (!strncasecmp(line + match[2].rm_so, "namespace", 9)) {
185            if (!strncasecmp(line + match[3].rm_so, "yes", 3))
186                options |= OPTION_NAMESPACE;
187            else
188                options &= ~(OPTION_NAMESPACE);
189        } else if (!strncasecmp(line + match[2].rm_so, "timeout", 7)) {
190            errno = 0;
191            timeout = strtol(line + match[3].rm_so, NULL, 10);
192            if (errno)
193                timeout = 0;
194      }      }
195  }  }

Legend:
Removed from v.1.26  
changed lines
  Added in v.1.26.2.2

webmaster@linux.gr
ViewVC Help
Powered by ViewVC 1.1.26