87 |
{ |
{ |
88 |
sieve_value_t *h, *v; |
sieve_value_t *h, *v; |
89 |
header_t header = NULL; |
header_t header = NULL; |
90 |
sieve_comparator_t comp = sieve_get_comparator (tags); |
sieve_comparator_t comp = sieve_get_comparator (mach, tags); |
91 |
struct address_closure clos; |
struct address_closure clos; |
92 |
int rc; |
int rc; |
93 |
|
|
129 |
{ |
{ |
130 |
sieve_value_t *h, *v; |
sieve_value_t *h, *v; |
131 |
header_t header = NULL; |
header_t header = NULL; |
132 |
sieve_comparator_t comp = sieve_get_comparator (tags); |
sieve_comparator_t comp = sieve_get_comparator (mach, tags); |
133 |
|
|
134 |
if (mach->debug_level & MU_SIEVE_DEBUG_TRACE) |
if (mach->debug_level & MU_SIEVE_DEBUG_TRACE) |
135 |
sieve_debug (mach, "HEADER\n"); |
sieve_debug (mach, "HEADER\n"); |
147 |
sieve_abort (mach); |
sieve_abort (mach); |
148 |
} |
} |
149 |
|
|
150 |
message_get_header (sieve_get_message (mach), &header); |
if (sieve_tag_lookup (tags, "mime", NULL)) |
151 |
|
{ |
152 |
|
int ismime = 0; |
153 |
|
|
154 |
|
message_is_multipart (mach->msg, &ismime); |
155 |
|
if (ismime) |
156 |
|
{ |
157 |
|
size_t i, nparts = 0; |
158 |
|
|
159 |
|
message_get_num_parts (mach->msg, &nparts); |
160 |
|
for (i = 1; i <= nparts; i++) |
161 |
|
{ |
162 |
|
message_t message = NULL; |
163 |
|
|
164 |
|
if (message_get_part (mach->msg, i, &message) == 0) |
165 |
|
{ |
166 |
|
message_get_header (message, &header); |
167 |
|
if (sieve_vlist_compare (h, v, comp, |
168 |
|
retrieve_header, header)) |
169 |
|
return 1; |
170 |
|
} |
171 |
|
} |
172 |
|
} |
173 |
|
} |
174 |
|
message_get_header (mach->msg, &header); |
175 |
return sieve_vlist_compare (h, v, comp, retrieve_header, header); |
return sieve_vlist_compare (h, v, comp, retrieve_header, header); |
176 |
} |
} |
177 |
|
|
207 |
sieve_test_envelope (sieve_machine_t mach, list_t args, list_t tags) |
sieve_test_envelope (sieve_machine_t mach, list_t args, list_t tags) |
208 |
{ |
{ |
209 |
sieve_value_t *h, *v; |
sieve_value_t *h, *v; |
210 |
sieve_comparator_t comp = sieve_get_comparator (tags); |
sieve_comparator_t comp = sieve_get_comparator (mach, tags); |
211 |
struct address_closure clos; |
struct address_closure clos; |
212 |
int rc; |
int rc; |
213 |
|
|
328 |
{ NULL } |
{ NULL } |
329 |
}; |
}; |
330 |
|
|
331 |
|
static sieve_tag_def_t mime_tags[] = { |
332 |
|
{ "mime", SVT_VOID }, |
333 |
|
{ NULL } |
334 |
|
}; |
335 |
|
|
336 |
#define ADDRESS_PART_GROUP \ |
#define ADDRESS_PART_GROUP \ |
337 |
{ address_part_tags, NULL } |
{ address_part_tags, NULL } |
338 |
|
|
340 |
{ match_part_tags, sieve_match_part_checker } |
{ match_part_tags, sieve_match_part_checker } |
341 |
|
|
342 |
#define SIZE_GROUP { size_tags, NULL } |
#define SIZE_GROUP { size_tags, NULL } |
343 |
|
|
344 |
|
#define MIME_GROUP \ |
345 |
|
{ mime_tags, NULL } |
346 |
|
|
347 |
sieve_tag_group_t address_tag_groups[] = { |
sieve_tag_group_t address_tag_groups[] = { |
348 |
ADDRESS_PART_GROUP, |
ADDRESS_PART_GROUP, |
349 |
MATCH_PART_GROUP, |
MATCH_PART_GROUP, |
379 |
|
|
380 |
sieve_tag_group_t header_tag_groups[] = { |
sieve_tag_group_t header_tag_groups[] = { |
381 |
MATCH_PART_GROUP, |
MATCH_PART_GROUP, |
382 |
|
MIME_GROUP, |
383 |
{ NULL } |
{ NULL } |
384 |
}; |
}; |
385 |
|
|
386 |
void |
void |
387 |
sieve_register_standard_tests () |
sieve_register_standard_tests (sieve_machine_t mach) |
388 |
{ |
{ |
389 |
sieve_register_test ("false", sieve_test_false, NULL, NULL, 1); |
sieve_register_test (mach, "false", sieve_test_false, NULL, NULL, 1); |
390 |
sieve_register_test ("true", sieve_test_true, NULL, NULL, 1); |
sieve_register_test (mach, "true", sieve_test_true, NULL, NULL, 1); |
391 |
sieve_register_test ("address", sieve_test_address, |
sieve_register_test (mach, "address", sieve_test_address, |
392 |
address_req_args, address_tag_groups, 1); |
address_req_args, address_tag_groups, 1); |
393 |
sieve_register_test ("size", sieve_test_size, |
sieve_register_test (mach, "size", sieve_test_size, |
394 |
size_req_args, size_tag_groups, 1); |
size_req_args, size_tag_groups, 1); |
395 |
sieve_register_test ("envelope", sieve_test_envelope, |
sieve_register_test (mach, "envelope", sieve_test_envelope, |
396 |
address_req_args, envelope_tag_groups, 1); |
address_req_args, envelope_tag_groups, 1); |
397 |
sieve_register_test ("exists", sieve_test_exists, |
sieve_register_test (mach, "exists", sieve_test_exists, |
398 |
exists_req_args, NULL, 1); |
exists_req_args, NULL, 1); |
399 |
sieve_register_test ("header", sieve_test_header, |
sieve_register_test (mach, "header", sieve_test_header, |
400 |
address_req_args, header_tag_groups, 1); |
address_req_args, header_tag_groups, 1); |
401 |
} |
} |