-/* $Cambridge: exim/src/src/regex.c,v 1.3 2004/12/17 14:52:44 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);
+ mbox_file = spool_mbox(&mbox_size, NULL);
if (mbox_file == NULL) {
/* error while spooling */
log_write(0, LOG_MAIN|LOG_PANIC,
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) {
do {
/* try matcher on the line */
if (pcre_exec(re_list_item->re, NULL, CS linebuffer,
- (int)Ustrlen(linebuffer), 0, 0, NULL, 0) >= 0) {
+ (int)Ustrlen(linebuffer), 0, 0, NULL, 0) >= 0) {
Ustrncpy(regex_match_string_buffer, re_list_item->pcre_text, 1023);
regex_match_string = regex_match_string_buffer;
if (mime_stream == NULL)
- fclose(mbox_file);
+ (void)fclose(mbox_file);
else {
clearerr(mime_stream);
fseek(mime_stream,f_pos,SEEK_SET);
re_list_item = re_list_item->next;
} while (re_list_item != NULL);
};
-
+
if (mime_stream == NULL)
- fclose(mbox_file);
+ (void)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"";
/* open file */
- f = fopen(CS mime_decoded_filename, "r");
+ f = fopen(CS mime_decoded_filename, "rb");
if (f == NULL) {
/* open failed */
log_write(0, LOG_MAIN,
"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 */
mime_subject_len, 0, 0, NULL, 0) >= 0) {
Ustrncpy(regex_match_string_buffer, re_list_item->pcre_text, 1023);
regex_match_string = regex_match_string_buffer;
- fclose(f);
+ (void)fclose(f);
return OK;
};
re_list_item = re_list_item->next;
} while (re_list_item != NULL);
- fclose(f);
-
+ (void)fclose(f);
+
/* no matches ... */
return FAIL;
}