git://git.exim.org
/
exim.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Added -bem option.
[exim.git]
/
src
/
src
/
match.c
diff --git
a/src/src/match.c
b/src/src/match.c
index 7cca71b7ff093c85897a922d6fda082a56a3dbd2..238a2cdeaa2ab24892b9cc24c8cf8700c352f933 100644
(file)
--- a/
src/src/match.c
+++ b/
src/src/match.c
@@
-1,10
+1,10
@@
-/* $Cambridge: exim/src/src/match.c,v 1.1
1 2005/11/15 11:19:38
ph10 Exp $ */
+/* $Cambridge: exim/src/src/match.c,v 1.1
5 2006/07/27 13:50:43
ph10 Exp $ */
/*************************************************
* Exim - an Internet mail transport agent *
*************************************************/
/*************************************************
* Exim - an Internet mail transport agent *
*************************************************/
-/* Copyright (c) University of Cambridge 1995 - 200
5
*/
+/* Copyright (c) University of Cambridge 1995 - 200
6
*/
/* See the file NOTICE for conditions of use and distribution. */
/* Functions for matching strings */
/* See the file NOTICE for conditions of use and distribution. */
/* Functions for matching strings */
@@
-74,7
+74,8
@@
Arguments:
returns ERROR)
Contents of the argument block:
returns ERROR)
Contents of the argument block:
- subject the subject string to be checked
+ origsubject the subject in its original casing
+ subject the subject string to be checked, lowercased if caseless
expand_setup if < 0, don't set up any numeric expansion variables;
if = 0, set $0 to whole subject, and either
$1 to what matches * or
expand_setup if < 0, don't set up any numeric expansion variables;
if = 0, set $0 to whole subject, and either
$1 to what matches * or
@@
-99,7
+100,7
@@
check_string_block *cb = (check_string_block *)arg;
int search_type, partial, affixlen, starflags;
int expand_setup = cb->expand_setup;
uschar *affix;
int search_type, partial, affixlen, starflags;
int expand_setup = cb->expand_setup;
uschar *affix;
-uschar *s
= cb->subject
;
+uschar *s;
uschar *filename = NULL;
uschar *keyquery, *result, *semicolon;
void *handle;
uschar *filename = NULL;
uschar *keyquery, *result, *semicolon;
void *handle;
@@
-108,6
+109,12
@@
error = error; /* Keep clever compilers from complaining */
if (valueptr != NULL) *valueptr = NULL; /* For non-lookup matches */
if (valueptr != NULL) *valueptr = NULL; /* For non-lookup matches */
+/* For regular expressions, use cb->origsubject rather than cb->subject so that
+it works if the pattern uses (?-i) to turn off case-independence, overriding
+"caseless". */
+
+s = (pattern[0] == '^')? cb->origsubject : cb->subject;
+
/* If required to set up $0, initialize the data but don't turn on by setting
expand_nmax until the match is assured. */
/* If required to set up $0, initialize the data but don't turn on by setting
expand_nmax until the match is assured. */
@@
-425,7
+432,7
@@
Returns: OK if matched a non-negated item
FAIL if expansion force-failed
FAIL if matched a negated item
FAIL if hit end of list after a non-negated item
FAIL if expansion force-failed
FAIL if matched a negated item
FAIL if hit end of list after a non-negated item
- DEFER if a
lookup
deferred or expansion failed
+ DEFER if a
something
deferred or expansion failed
*/
int
*/
int
@@
-715,7
+722,7
@@
while ((sss = string_nextinlist(&list, &sep, buffer, sizeof(buffer))) != NULL)
case ERROR:
if (ignore_unknown)
{
case ERROR:
if (ignore_unknown)
{
- HDEBUG(D_lists) debug_printf("%s: item ignored by +ignore_unknown",
+ HDEBUG(D_lists) debug_printf("%s: item ignored by +ignore_unknown
\n
",
error);
}
else
error);
}
else
@@
-810,7
+817,7
@@
while ((sss = string_nextinlist(&list, &sep, buffer, sizeof(buffer))) != NULL)
case ERROR: /* host name lookup failed - this can only */
if (ignore_unknown) /* be for an incoming host (not outgoing) */
{
case ERROR: /* host name lookup failed - this can only */
if (ignore_unknown) /* be for an incoming host (not outgoing) */
{
- HDEBUG(D_lists) debug_printf("%s: item ignored by +ignore_unknown",
+ HDEBUG(D_lists) debug_printf("%s: item ignored by +ignore_unknown
\n
",
error);
}
else
error);
}
else
@@
-844,10
+851,10
@@
HDEBUG(D_lists)
debug_printf("%s %s (end of list)\n", ot, (yield == OK)? "no":"yes");
return (yield == OK)? FAIL : OK;
debug_printf("%s %s (end of list)\n", ot, (yield == OK)? "no":"yes");
return (yield == OK)? FAIL : OK;
-/*
Handle lookup defer
*/
+/*
Something deferred
*/
DEFER_RETURN:
DEFER_RETURN:
-HDEBUG(D_lists) debug_printf("%s l
ookup
deferred for %s\n", ot, sss);
+HDEBUG(D_lists) debug_printf("%s l
ist match
deferred for %s\n", ot, sss);
return DEFER;
}
return DEFER;
}