Adjust for the recent changes in symbol space functions
(sieve_test_header): New tag :mime. Directs header to test headers in all parts of a multipart message, not only main message headers.
Showing
1 changed file
with
46 additions
and
14 deletions
... | @@ -87,7 +87,7 @@ sieve_test_address (sieve_machine_t mach, list_t args, list_t tags) | ... | @@ -87,7 +87,7 @@ sieve_test_address (sieve_machine_t mach, list_t args, list_t tags) |
87 | { | 87 | { |
88 | sieve_value_t *h, *v; | 88 | sieve_value_t *h, *v; |
89 | header_t header = NULL; | 89 | header_t header = NULL; |
90 | sieve_comparator_t comp = sieve_get_comparator (tags); | 90 | sieve_comparator_t comp = sieve_get_comparator (mach, tags); |
91 | struct address_closure clos; | 91 | struct address_closure clos; |
92 | int rc; | 92 | int rc; |
93 | 93 | ||
... | @@ -129,7 +129,7 @@ sieve_test_header (sieve_machine_t mach, list_t args, list_t tags) | ... | @@ -129,7 +129,7 @@ sieve_test_header (sieve_machine_t mach, list_t args, list_t tags) |
129 | { | 129 | { |
130 | sieve_value_t *h, *v; | 130 | sieve_value_t *h, *v; |
131 | header_t header = NULL; | 131 | header_t header = NULL; |
132 | sieve_comparator_t comp = sieve_get_comparator (tags); | 132 | sieve_comparator_t comp = sieve_get_comparator (mach, tags); |
133 | 133 | ||
134 | if (mach->debug_level & MU_SIEVE_DEBUG_TRACE) | 134 | if (mach->debug_level & MU_SIEVE_DEBUG_TRACE) |
135 | sieve_debug (mach, "HEADER\n"); | 135 | sieve_debug (mach, "HEADER\n"); |
... | @@ -147,8 +147,31 @@ sieve_test_header (sieve_machine_t mach, list_t args, list_t tags) | ... | @@ -147,8 +147,31 @@ sieve_test_header (sieve_machine_t mach, list_t args, list_t tags) |
147 | sieve_abort (mach); | 147 | sieve_abort (mach); |
148 | } | 148 | } |
149 | 149 | ||
150 | message_get_header (sieve_get_message (mach), &header); | 150 | if (sieve_tag_lookup (tags, "mime", NULL)) |
151 | 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); | ||
152 | return sieve_vlist_compare (h, v, comp, retrieve_header, header); | 175 | return sieve_vlist_compare (h, v, comp, retrieve_header, header); |
153 | } | 176 | } |
154 | 177 | ||
... | @@ -184,7 +207,7 @@ int | ... | @@ -184,7 +207,7 @@ int |
184 | sieve_test_envelope (sieve_machine_t mach, list_t args, list_t tags) | 207 | sieve_test_envelope (sieve_machine_t mach, list_t args, list_t tags) |
185 | { | 208 | { |
186 | sieve_value_t *h, *v; | 209 | sieve_value_t *h, *v; |
187 | sieve_comparator_t comp = sieve_get_comparator (tags); | 210 | sieve_comparator_t comp = sieve_get_comparator (mach, tags); |
188 | struct address_closure clos; | 211 | struct address_closure clos; |
189 | int rc; | 212 | int rc; |
190 | 213 | ||
... | @@ -305,6 +328,11 @@ static sieve_tag_def_t size_tags[] = { | ... | @@ -305,6 +328,11 @@ static sieve_tag_def_t size_tags[] = { |
305 | { NULL } | 328 | { NULL } |
306 | }; | 329 | }; |
307 | 330 | ||
331 | static sieve_tag_def_t mime_tags[] = { | ||
332 | { "mime", SVT_VOID }, | ||
333 | { NULL } | ||
334 | }; | ||
335 | |||
308 | #define ADDRESS_PART_GROUP \ | 336 | #define ADDRESS_PART_GROUP \ |
309 | { address_part_tags, NULL } | 337 | { address_part_tags, NULL } |
310 | 338 | ||
... | @@ -312,7 +340,10 @@ static sieve_tag_def_t size_tags[] = { | ... | @@ -312,7 +340,10 @@ static sieve_tag_def_t size_tags[] = { |
312 | { match_part_tags, sieve_match_part_checker } | 340 | { match_part_tags, sieve_match_part_checker } |
313 | 341 | ||
314 | #define SIZE_GROUP { size_tags, NULL } | 342 | #define SIZE_GROUP { size_tags, NULL } |
315 | 343 | ||
344 | #define MIME_GROUP \ | ||
345 | { mime_tags, NULL } | ||
346 | |||
316 | sieve_tag_group_t address_tag_groups[] = { | 347 | sieve_tag_group_t address_tag_groups[] = { |
317 | ADDRESS_PART_GROUP, | 348 | ADDRESS_PART_GROUP, |
318 | MATCH_PART_GROUP, | 349 | MATCH_PART_GROUP, |
... | @@ -348,22 +379,23 @@ sieve_data_type exists_req_args[] = { | ... | @@ -348,22 +379,23 @@ sieve_data_type exists_req_args[] = { |
348 | 379 | ||
349 | sieve_tag_group_t header_tag_groups[] = { | 380 | sieve_tag_group_t header_tag_groups[] = { |
350 | MATCH_PART_GROUP, | 381 | MATCH_PART_GROUP, |
382 | MIME_GROUP, | ||
351 | { NULL } | 383 | { NULL } |
352 | }; | 384 | }; |
353 | 385 | ||
354 | void | 386 | void |
355 | sieve_register_standard_tests () | 387 | sieve_register_standard_tests (sieve_machine_t mach) |
356 | { | 388 | { |
357 | sieve_register_test ("false", sieve_test_false, NULL, NULL, 1); | 389 | sieve_register_test (mach, "false", sieve_test_false, NULL, NULL, 1); |
358 | sieve_register_test ("true", sieve_test_true, NULL, NULL, 1); | 390 | sieve_register_test (mach, "true", sieve_test_true, NULL, NULL, 1); |
359 | sieve_register_test ("address", sieve_test_address, | 391 | sieve_register_test (mach, "address", sieve_test_address, |
360 | address_req_args, address_tag_groups, 1); | 392 | address_req_args, address_tag_groups, 1); |
361 | sieve_register_test ("size", sieve_test_size, | 393 | sieve_register_test (mach, "size", sieve_test_size, |
362 | size_req_args, size_tag_groups, 1); | 394 | size_req_args, size_tag_groups, 1); |
363 | sieve_register_test ("envelope", sieve_test_envelope, | 395 | sieve_register_test (mach, "envelope", sieve_test_envelope, |
364 | address_req_args, envelope_tag_groups, 1); | 396 | address_req_args, envelope_tag_groups, 1); |
365 | sieve_register_test ("exists", sieve_test_exists, | 397 | sieve_register_test (mach, "exists", sieve_test_exists, |
366 | exists_req_args, NULL, 1); | 398 | exists_req_args, NULL, 1); |
367 | sieve_register_test ("header", sieve_test_header, | 399 | sieve_register_test (mach, "header", sieve_test_header, |
368 | address_req_args, header_tag_groups, 1); | 400 | address_req_args, header_tag_groups, 1); |
369 | } | 401 | } | ... | ... |
-
Please register or sign in to post a comment