-/* $Cambridge: exim/src/src/regex.c,v 1.3 2004/12/17 14:52:44 ph10 Exp $ */
+/* $Cambridge: exim/src/src/regex.c,v 1.4 2005/02/17 11:58:26 ph10 Exp $ */
/*************************************************
* Exim - an Internet mail transport agent *
int pcre_erroffset;
uschar *linebuffer;
long f_pos = 0;
-
+
/* reset expansion variable */
regex_match_string = NULL;
-
+
if (mime_stream == NULL) {
/* We are in the DATA ACL */
mbox_file = spool_mbox(&mbox_size);
f_pos = ftell(mime_stream);
mbox_file = mime_stream;
};
-
+
/* precompile our regexes */
while ((regex_string = string_nextinlist(&list, &sep,
regex_string_buffer,
sizeof(regex_string_buffer))) != NULL) {
-
+
/* parse option */
- if ( (strcmpic(regex_string,US"false") == 0) ||
+ if ( (strcmpic(regex_string,US"false") == 0) ||
(Ustrcmp(regex_string,"0") == 0) ) {
/* explicitly no matching */
continue;
};
-
+
/* compile our regular expression */
re = pcre_compile( CS regex_string,
0,
re_list_head = re_list_item;
};
};
-
+
/* no regexes -> nothing to do */
if (re_list_head == NULL) {
return FAIL;
};
-
+
/* match each line against all regexes */
linebuffer = store_get(32767);
- while (fgets(CS linebuffer, 32767, mbox_file) != NULL) {
+ while (fgets(CS linebuffer, 32767, mbox_file) != NULL) {
if ( (mime_stream != NULL) && (mime_current_boundary != NULL) ) {
/* check boundary */
if (Ustrncmp(linebuffer,"--",2) == 0) {
re_list_item = re_list_item->next;
} while (re_list_item != NULL);
};
-
+
if (mime_stream == NULL)
fclose(mbox_file);
else {
clearerr(mime_stream);
fseek(mime_stream,f_pos,SEEK_SET);
};
-
+
/* no matches ... */
return FAIL;
}
while ((regex_string = string_nextinlist(&list, &sep,
regex_string_buffer,
sizeof(regex_string_buffer))) != NULL) {
-
+
/* parse option */
- if ( (strcmpic(regex_string,US"false") == 0) ||
+ if ( (strcmpic(regex_string,US"false") == 0) ||
(Ustrcmp(regex_string,"0") == 0) ) {
/* explicitly no matching */
continue;
};
-
+
/* compile our regular expression */
re = pcre_compile( CS regex_string,
0,
re_list_head = re_list_item;
};
};
-
+
/* no regexes -> nothing to do */
if (re_list_head == NULL) {
return FAIL;
};
-
+
/* check if the file is already decoded */
if (mime_decoded_filename == NULL) {
uschar *empty = US"";
"mime_regex acl condition warning - can't open '%s' for reading.", mime_decoded_filename);
return DEFER;
};
-
+
/* get 32k memory */
mime_subject = (uschar *)store_get(32767);
-
+
/* read max 32k chars from file */
mime_subject_len = fread(mime_subject, 1, 32766, f);
-
+
re_list_item = re_list_head;
do {
/* try matcher on the mmapped file */
} while (re_list_item != NULL);
fclose(f);
-
+
/* no matches ... */
return FAIL;
}