mirror of
https://github.com/vdukhovni/postfix
synced 2025-08-29 13:18:12 +00:00
postfix-2.4-20070121
This commit is contained in:
parent
3fbdd5d9ec
commit
72f1233da7
1
postfix/.indent.pro
vendored
1
postfix/.indent.pro
vendored
@ -257,6 +257,7 @@
|
||||
-TXSASL_SERVER
|
||||
-TXSASL_SERVER_IMPL
|
||||
-TXSASL_SERVER_IMPL_INFO
|
||||
-Toff_t
|
||||
-Tregex_t
|
||||
-Tregmatch_t
|
||||
-Tsasl_conn_t
|
||||
|
@ -13130,8 +13130,29 @@ Apologies for any names omitted.
|
||||
for !/file/name, and updated the documentation. File:
|
||||
util/match_list.c.
|
||||
|
||||
20070119-21
|
||||
|
||||
Cleanup: pad short message headers with a filler record,
|
||||
so that the result is never shorter than a pointer record.
|
||||
This immensely simplified the support for Milter header
|
||||
modification requests: three complex loops could be replaced
|
||||
by one simpler loop. The DTXT record type was re-purposed
|
||||
from "deleted header text" to "short header padding", keeping
|
||||
the change backwards compatible. Files: cleanup/cleanup_out.c,
|
||||
cleanup/cleanup_milter.c, global/record.c.
|
||||
|
||||
Cleanup: the Milter "add recipient" action always added the
|
||||
recipient to the initial envelope segment, causing added
|
||||
recipients to be separate from "sendmail -t" recipients.
|
||||
This violated design, without impact on delivery (always_bcc
|
||||
recipient are always at the end of the queue file even when
|
||||
all other recipients are in the initial segment). File:
|
||||
global/rec_types.h.
|
||||
|
||||
Wish list:
|
||||
|
||||
Update message content length when adding/removing headers.
|
||||
|
||||
Need scache size limit.
|
||||
|
||||
Don't transform bare username into user@localdomain.localdomain
|
||||
|
@ -17,6 +17,15 @@ Incompatibility with Postfix 2.2 and earlier
|
||||
If you upgrade from Postfix 2.2 or earlier, read RELEASE_NOTES-2.3
|
||||
before proceeding.
|
||||
|
||||
Major changes with Postfix snapshot 20070121
|
||||
============================================
|
||||
|
||||
The support for Milter header modification requests was revised.
|
||||
With minimal change in the on-disk representation, the code was
|
||||
greatly simplified, and regression tests were updated to ensure
|
||||
that old errors were not re-introduced. The queue file format is
|
||||
entirely backwards compatible with Postfix 2.3.
|
||||
|
||||
Incompatible changes with Postfix snapshot 20070116
|
||||
===================================================
|
||||
|
||||
@ -28,9 +37,9 @@ as it was before the body was replaced.
|
||||
Major changes with Postfix snapshot 20070116
|
||||
============================================
|
||||
|
||||
Support for Milter applications that replace the message body.
|
||||
Postfix now implements all the header/body modification requests
|
||||
that are available with Sendmail 8.13.
|
||||
Support for Milter requests to replace the message body. Postfix
|
||||
now implements all the header/body modification requests that are
|
||||
available with Sendmail 8.13.
|
||||
|
||||
Incompatible changes with Postfix snapshot 20061217
|
||||
===================================================
|
||||
|
@ -74,7 +74,7 @@ milter_tests: cleanup_milter_test bug_tests \
|
||||
cleanup_milter_test5 cleanup_milter_test6 cleanup_milter_test7 \
|
||||
cleanup_milter_test8 cleanup_milter_test9 cleanup_milter_test10a \
|
||||
cleanup_milter_test10b cleanup_milter_test10c cleanup_milter_test10d \
|
||||
cleanup_milter_test10e cleanup_milter_test11
|
||||
cleanup_milter_test10e cleanup_milter_test11 cleanup_milter_test12
|
||||
|
||||
root_tests:
|
||||
|
||||
@ -287,6 +287,15 @@ cleanup_milter_test11: cleanup_milter test-queue-file11 cleanup_milter.in11 \
|
||||
diff cleanup_milter.ref11 cleanup_milter.tmp
|
||||
rm -f test-queue-file11.tmp cleanup_milter.tmp
|
||||
|
||||
cleanup_milter_test12: cleanup_milter test-queue-file12 cleanup_milter.in12 \
|
||||
cleanup_milter.ref12 ../postcat/postcat
|
||||
cp test-queue-file12 test-queue-file12.tmp
|
||||
chmod u+w test-queue-file12.tmp
|
||||
./cleanup_milter <cleanup_milter.in12
|
||||
../postcat/postcat -ov test-queue-file12.tmp 2>/dev/null >cleanup_milter.tmp
|
||||
diff cleanup_milter.ref12 cleanup_milter.tmp
|
||||
rm -f test-queue-file12.tmp cleanup_milter.tmp
|
||||
|
||||
depend: $(MAKES)
|
||||
(sed '1,/^# do not edit/!d' Makefile.in; \
|
||||
set -e; for i in [a-z][a-z0-9]*.c; do \
|
||||
|
Binary file not shown.
@ -1,49 +1,56 @@
|
||||
*** ENVELOPE RECORDS bug1.file.tmp ***
|
||||
0 message_size: 428 654 3 0
|
||||
65 message_arrival_time: Sat May 13 21:04:18 2006
|
||||
84 create_time: Sat May 13 21:04:27 2006
|
||||
108 named_attribute: rewrite_context=local
|
||||
131 sender: wietse@porcupine.org
|
||||
153 named_attribute: client_name=tail.porcupine.org
|
||||
185 named_attribute: client_address=IPv6:2001:240:587:0:2d0:b7ff:febe:ca9f
|
||||
240 named_attribute: message_origin=tail.porcupine.org[2001:240:587:0:2d0:b7ff:febe:ca9f]
|
||||
310 named_attribute: helo_name=tail.porcupine.org
|
||||
340 named_attribute: protocol_name=SMTP
|
||||
360 named_attribute: dsn_orig_rcpt=rfc822;wietse@porcupine.org
|
||||
403 original_recipient: wietse@porcupine.org
|
||||
425 recipient: wietse@porcupine.org
|
||||
447 named_attribute: dsn_orig_rcpt=rfc822;alias@tail.porcupine.org
|
||||
494 original_recipient: alias@tail.porcupine.org
|
||||
520 recipient: wietse@porcupine.org
|
||||
542 named_attribute: dsn_orig_rcpt=rfc822;alias@tail.porcupine.org
|
||||
589 original_recipient: alias@tail.porcupine.org
|
||||
615 recipient: root@porcupine.org
|
||||
635 pointer_record: 0
|
||||
652 *** MESSAGE CONTENTS bug1.file.tmp ***
|
||||
654 regular_text: Received: from tail.porcupine.org (tail.porcupine.org [IPv6:2001:240:587:0:2d0:b7ff:febe:ca9f])
|
||||
751 regular_text: by tail.porcupine.org (Postfix) with SMTP id E0F703D1E36;
|
||||
811 regular_text: Sat, 13 May 2006 21:04:18 -0400 (EDT)
|
||||
851 regular_text: X: 1
|
||||
857 regular_text: 2
|
||||
861 regular_text: 3
|
||||
865 regular_text: 4
|
||||
869 regular_text: 5
|
||||
873 regular_text: 6
|
||||
877 regular_text: 7
|
||||
881 regular_text: Y: 1234567
|
||||
893 regular_text: Message-Id: <20060514010427.E0F703D1E36@tail.porcupine.org>
|
||||
954 regular_text: Date: Sat, 13 May 2006 21:04:18 -0400 (EDT)
|
||||
999 regular_text: From: wietse@porcupine.org
|
||||
1027 regular_text: To: undisclosed-recipients:;
|
||||
1057 pointer_record: 1103
|
||||
1103 pointer_record: 1147
|
||||
1147 pointer_record: 1191
|
||||
1191 pointer_record: 1235
|
||||
1235 regular_text: Subject: long header text
|
||||
1262 pointer_record: 1130
|
||||
1130 pointer_record: 1074
|
||||
1074 regular_text:
|
||||
1076 regular_text: text
|
||||
1082 *** HEADER EXTRACTED bug1.file.tmp ***
|
||||
1084 pointer_record: 0
|
||||
1101 *** MESSAGE FILE END bug1.file.tmp ***
|
||||
0 message_size: 441 813 3 0 441
|
||||
81 message_arrival_time: Sat Jan 20 19:52:41 2007
|
||||
100 create_time: Sat Jan 20 19:52:47 2007
|
||||
124 named_attribute: rewrite_context=local
|
||||
147 sender: wietse@porcupine.org
|
||||
169 named_attribute: log_client_name=hades.porcupine.org
|
||||
206 named_attribute: log_client_address=168.100.189.10
|
||||
241 named_attribute: log_message_origin=hades.porcupine.org[168.100.189.10]
|
||||
297 named_attribute: log_helo_name=hades.porcupine.org
|
||||
332 named_attribute: log_protocol_name=SMTP
|
||||
356 named_attribute: client_name=hades.porcupine.org
|
||||
389 named_attribute: reverse_client_name=hades.porcupine.org
|
||||
430 named_attribute: client_address=168.100.189.10
|
||||
461 named_attribute: helo_name=hades.porcupine.org
|
||||
492 named_attribute: client_address_type=2
|
||||
515 named_attribute: dsn_orig_rcpt=rfc822;wietse@porcupine.org
|
||||
558 original_recipient: wietse@porcupine.org
|
||||
580 recipient: wietse@porcupine.org
|
||||
602 named_attribute: dsn_orig_rcpt=rfc822;alias@hades.porcupine.org
|
||||
650 original_recipient: alias@hades.porcupine.org
|
||||
677 recipient: wietse@porcupine.org
|
||||
699 named_attribute: dsn_orig_rcpt=rfc822;alias@hades.porcupine.org
|
||||
747 original_recipient: alias@hades.porcupine.org
|
||||
774 recipient: root@porcupine.org
|
||||
794 pointer_record: 0
|
||||
811 *** MESSAGE CONTENTS bug1.file.tmp ***
|
||||
813 regular_text: Received: from hades.porcupine.org (hades.porcupine.org [168.100.189.10])
|
||||
888 regular_text: by hades.porcupine.org (Postfix) with SMTP id 38132290405;
|
||||
949 regular_text: Sat, 20 Jan 2007 19:52:41 -0500 (EST)
|
||||
989 regular_text: X: 1
|
||||
995 padding: 0
|
||||
1006 regular_text: 2
|
||||
1010 regular_text: 3
|
||||
1014 regular_text: 4
|
||||
1018 regular_text: 5
|
||||
1022 regular_text: 6
|
||||
1026 regular_text: 7
|
||||
1030 regular_text: Y: 1234567
|
||||
1042 padding: 0
|
||||
1047 regular_text: Message-Id: <20070121005247.38132290405@hades.porcupine.org>
|
||||
1109 regular_text: Date: Sat, 20 Jan 2007 19:52:41 -0500 (EST)
|
||||
1154 regular_text: From: wietse@porcupine.org
|
||||
1182 regular_text: To: undisclosed-recipients:;
|
||||
1212 pointer_record: 1258
|
||||
1258 pointer_record: 1302
|
||||
1302 pointer_record: 1346
|
||||
1346 pointer_record: 1390
|
||||
1390 regular_text: Subject: long header text
|
||||
1417 pointer_record: 1285
|
||||
1285 pointer_record: 1229
|
||||
1229 regular_text:
|
||||
1231 regular_text: text
|
||||
1237 pointer_record: 0
|
||||
1254 *** HEADER EXTRACTED bug1.file.tmp ***
|
||||
1256 *** MESSAGE FILE END bug1.file.tmp ***
|
||||
|
@ -1,27 +1,32 @@
|
||||
*** ENVELOPE RECORDS bug1.file.tmp ***
|
||||
message_size: 428 654 3 0
|
||||
message_arrival_time: Sat May 13 21:04:18 2006
|
||||
create_time: Sat May 13 21:04:27 2006
|
||||
message_size: 441 813 3 0 441
|
||||
message_arrival_time: Sat Jan 20 19:52:41 2007
|
||||
create_time: Sat Jan 20 19:52:47 2007
|
||||
named_attribute: rewrite_context=local
|
||||
sender: wietse@porcupine.org
|
||||
named_attribute: client_name=tail.porcupine.org
|
||||
named_attribute: client_address=IPv6:2001:240:587:0:2d0:b7ff:febe:ca9f
|
||||
named_attribute: message_origin=tail.porcupine.org[2001:240:587:0:2d0:b7ff:febe:ca9f]
|
||||
named_attribute: helo_name=tail.porcupine.org
|
||||
named_attribute: protocol_name=SMTP
|
||||
named_attribute: log_client_name=hades.porcupine.org
|
||||
named_attribute: log_client_address=168.100.189.10
|
||||
named_attribute: log_message_origin=hades.porcupine.org[168.100.189.10]
|
||||
named_attribute: log_helo_name=hades.porcupine.org
|
||||
named_attribute: log_protocol_name=SMTP
|
||||
named_attribute: client_name=hades.porcupine.org
|
||||
named_attribute: reverse_client_name=hades.porcupine.org
|
||||
named_attribute: client_address=168.100.189.10
|
||||
named_attribute: helo_name=hades.porcupine.org
|
||||
named_attribute: client_address_type=2
|
||||
named_attribute: dsn_orig_rcpt=rfc822;wietse@porcupine.org
|
||||
original_recipient: wietse@porcupine.org
|
||||
recipient: wietse@porcupine.org
|
||||
named_attribute: dsn_orig_rcpt=rfc822;alias@tail.porcupine.org
|
||||
original_recipient: alias@tail.porcupine.org
|
||||
named_attribute: dsn_orig_rcpt=rfc822;alias@hades.porcupine.org
|
||||
original_recipient: alias@hades.porcupine.org
|
||||
recipient: wietse@porcupine.org
|
||||
named_attribute: dsn_orig_rcpt=rfc822;alias@tail.porcupine.org
|
||||
original_recipient: alias@tail.porcupine.org
|
||||
named_attribute: dsn_orig_rcpt=rfc822;alias@hades.porcupine.org
|
||||
original_recipient: alias@hades.porcupine.org
|
||||
recipient: root@porcupine.org
|
||||
*** MESSAGE CONTENTS bug1.file.tmp ***
|
||||
Received: from tail.porcupine.org (tail.porcupine.org [IPv6:2001:240:587:0:2d0:b7ff:febe:ca9f])
|
||||
by tail.porcupine.org (Postfix) with SMTP id E0F703D1E36;
|
||||
Sat, 13 May 2006 21:04:18 -0400 (EDT)
|
||||
Received: from hades.porcupine.org (hades.porcupine.org [168.100.189.10])
|
||||
by hades.porcupine.org (Postfix) with SMTP id 38132290405;
|
||||
Sat, 20 Jan 2007 19:52:41 -0500 (EST)
|
||||
X: 1
|
||||
2
|
||||
3
|
||||
@ -30,8 +35,8 @@ X: 1
|
||||
6
|
||||
7
|
||||
Y: 1234567
|
||||
Message-Id: <20060514010427.E0F703D1E36@tail.porcupine.org>
|
||||
Date: Sat, 13 May 2006 21:04:18 -0400 (EDT)
|
||||
Message-Id: <20070121005247.38132290405@hades.porcupine.org>
|
||||
Date: Sat, 20 Jan 2007 19:52:41 -0500 (EST)
|
||||
From: wietse@porcupine.org
|
||||
To: undisclosed-recipients:;
|
||||
Subject: long header text
|
||||
|
Binary file not shown.
@ -1,27 +1,30 @@
|
||||
*** ENVELOPE RECORDS bug2.file.tmp ***
|
||||
0 message_size: 329 181 1 0
|
||||
65 message_arrival_time: Tue Jul 25 15:37:06 2006
|
||||
82 create_time: Tue Jul 25 15:37:06 2006
|
||||
106 named_attribute: rewrite_context=local
|
||||
129 sender_fullname: Wietse Venema
|
||||
144 sender: me@porcupine.org
|
||||
162 pointer_record: 0
|
||||
179 *** MESSAGE CONTENTS bug2.file.tmp ***
|
||||
181 regular_text: Received: by bristle.watson.ibm.com (Postfix, from userid 0)
|
||||
243 regular_text: id 034B229013F; Tue, 25 Jul 2006 15:37:06 -0400 (EDT)
|
||||
299 regular_text: From: me@porcupine.org
|
||||
323 regular_text: To: you@porcupine.org
|
||||
346 regular_text: Message-Id: <20060725192735.5EC2D29013F@hades.porcupine.org>
|
||||
408 regular_text: Date: Tue, 25 Jul 2006 15:27:19 -0400 (EDT)
|
||||
453 pointer_record: 552
|
||||
552 regular_text: Subject: hey!
|
||||
567 pointer_record: 584
|
||||
584 regular_text: foo: foobar
|
||||
597 pointer_record: 485
|
||||
485 regular_text:
|
||||
487 regular_text: text
|
||||
493 pointer_record: 0
|
||||
510 *** HEADER EXTRACTED bug2.file.tmp ***
|
||||
512 original_recipient: you@porcupine.org
|
||||
531 recipient: you@porcupine.org
|
||||
550 *** MESSAGE FILE END bug2.file.tmp ***
|
||||
0 message_size: 332 199 1 0 332
|
||||
81 message_arrival_time: Sat Jan 20 20:53:54 2007
|
||||
100 create_time: Sat Jan 20 20:53:59 2007
|
||||
124 named_attribute: rewrite_context=local
|
||||
147 sender_fullname: Wietse Venema
|
||||
162 sender: me@porcupine.org
|
||||
180 pointer_record: 0
|
||||
197 *** MESSAGE CONTENTS bug2.file.tmp ***
|
||||
199 regular_text: Received: by hades.porcupine.org (Postfix, from userid 1001)
|
||||
261 regular_text: id B85F1290407; Sat, 20 Jan 2007 20:53:59 -0500 (EST)
|
||||
317 regular_text: From: me@porcupine.org
|
||||
341 regular_text: To: you@porcupine.org
|
||||
364 regular_text: Message-Id: <20060725192735.5EC2D29013F@hades.porcupine.org>
|
||||
426 regular_text: Date: Tue, 25 Jul 2006 15:27:19 -0400 (EDT)
|
||||
471 pointer_record: 573
|
||||
573 regular_text: Subject: hey!
|
||||
588 padding: 0
|
||||
591 pointer_record: 489
|
||||
489 pointer_record: 608
|
||||
608 regular_text: foo: foobar
|
||||
621 padding: 0
|
||||
625 pointer_record: 506
|
||||
506 regular_text:
|
||||
508 regular_text: text
|
||||
514 pointer_record: 0
|
||||
531 *** HEADER EXTRACTED bug2.file.tmp ***
|
||||
533 original_recipient: you@porcupine.org
|
||||
552 recipient: you@porcupine.org
|
||||
571 *** MESSAGE FILE END bug2.file.tmp ***
|
||||
|
@ -1,13 +1,13 @@
|
||||
*** ENVELOPE RECORDS bug2.file.tmp ***
|
||||
message_size: 329 181 1 0
|
||||
message_arrival_time: Tue Jul 25 15:37:06 2006
|
||||
create_time: Tue Jul 25 15:37:06 2006
|
||||
message_size: 332 199 1 0 332
|
||||
message_arrival_time: Sat Jan 20 20:53:54 2007
|
||||
create_time: Sat Jan 20 20:53:59 2007
|
||||
named_attribute: rewrite_context=local
|
||||
sender_fullname: Wietse Venema
|
||||
sender: me@porcupine.org
|
||||
*** MESSAGE CONTENTS bug2.file.tmp ***
|
||||
Received: by bristle.watson.ibm.com (Postfix, from userid 0)
|
||||
id 034B229013F; Tue, 25 Jul 2006 15:37:06 -0400 (EDT)
|
||||
Received: by hades.porcupine.org (Postfix, from userid 1001)
|
||||
id B85F1290407; Sat, 20 Jan 2007 20:53:59 -0500 (EST)
|
||||
From: me@porcupine.org
|
||||
To: you@porcupine.org
|
||||
Message-Id: <20060725192735.5EC2D29013F@hades.porcupine.org>
|
||||
|
@ -111,69 +111,80 @@
|
||||
#include <cleanup.h>
|
||||
|
||||
/*
|
||||
* How Postfix edits queue file information:
|
||||
* How Postfix 2.4 edits queue file information:
|
||||
*
|
||||
* Mail filter applications (Milters) can send modification requests after
|
||||
* receiving the end of the message body. Postfix implements these
|
||||
* modifications in the cleanup server, so that it can edit the queue file
|
||||
* in place. This avoids the temporary files that would be needed when
|
||||
* modifications were implemented in the SMTP server (where possible,
|
||||
* Postfix does not store the whole message in main memory). Once a Milter
|
||||
* is done editing, the queue file can be used as input for the next Milter,
|
||||
* and so on. Finally, the cleanup server changes file permissions, calls
|
||||
* fsync(), and waits for successful completion.
|
||||
* modifications were implemented in the SMTP server (Postfix normally does
|
||||
* not store the whole message in main memory). Once a Milter is done
|
||||
* editing, the queue file can be used as input for the next Milter, and so
|
||||
* on. Finally, the cleanup server changes file permissions, calls fsync(),
|
||||
* and waits for successful completion.
|
||||
*
|
||||
* To implement in-place queue file edits, we need to introduce surprisingly
|
||||
* little change to the existing Postfix queue file structure. All we need
|
||||
* is a way to mark a record as deleted, and to jump from one place in the
|
||||
* queue file to another. We could implement deleted records with jumps, but
|
||||
* marking is simpler, and it preserves information that may be useful for
|
||||
* archival purposes.
|
||||
* marking is sometimes simpler.
|
||||
*
|
||||
* Postfix does not store queue files as plain text files. Instead all
|
||||
* information is stored in records with an explicit type and length for
|
||||
* information is stored in records with an explicit type and length, for
|
||||
* sender, recipient, arrival time, and so on. Even the content that makes
|
||||
* up the message header and body is stored as records with explicit types
|
||||
* and lengths. This organization makes it very easy to mark a record as
|
||||
* deleted, and to introduce the pointer records that we will use to jump
|
||||
* from one place in a queue file to another place.
|
||||
*
|
||||
* - Deleting a recipient or message header is easiest - simply modify the
|
||||
* record type into one that is skipped by the software that delivers mail.
|
||||
* We won't try to reuse the deleted recipient or message header for other
|
||||
* purposes. When deleting a recipient, we must delete all recipient records
|
||||
* that result from virtual alias expansion of the original recipient
|
||||
* address. When deleting a long message header, multiple queue file records
|
||||
* may need to be deleted. We use REC_TYPE_DRCP for deleted recipients, and
|
||||
* REC_TYPE_DTXT for deleted text.
|
||||
* - Deleting a recipient is easiest - simply modify the record type into one
|
||||
* that is skipped by the software that delivers mail. We won't try to reuse
|
||||
* the deleted recipient for other purposes. When deleting a recipient, we
|
||||
* may need to delete multiple recipient records that result from virtual
|
||||
* alias expansion of the original recipient address.
|
||||
*
|
||||
* - Replacing a header record involves pointer records. A record is replaced
|
||||
* by overwriting it with a forward pointer to space after the end of the
|
||||
* queue file, putting the new record there, followed by a reverse pointer
|
||||
* to the record that follows the replaced information. If the replaced
|
||||
* record is shorter than a pointer record, we relocate the records that
|
||||
* follow it to the new area as well, until we have enough space for the
|
||||
* forward pointer record. See below for a discussion on what it takes to
|
||||
* make this safe. Sendmail mail filters currently do not replace individual
|
||||
* body records, but we could add support for this if need be.
|
||||
* to the record that follows the replaced header. To simplify
|
||||
* implementation we follow a short header record with a filler record so
|
||||
* that we can always overwrite a header record with a pointer.
|
||||
*
|
||||
* N.B. This is a major difference with Postfix version 2.3, which needed
|
||||
* complex code to save records that follow a short header, before it could
|
||||
* overwrite a short header record. This code contained two of the three
|
||||
* post-release bugs that were found with Postfix header editing.
|
||||
*
|
||||
* - Inserting a header record is like replacing one, except that we also
|
||||
* relocate the record that is being overwritten by the forward pointer.
|
||||
*
|
||||
* - Appending a recipient or header record involves pointer records as well.
|
||||
* To make this convenient, the queue file already contains a dummy pointer
|
||||
* record at the place where we want to append recipient or header content.
|
||||
* To append, change the dummy pointer into a forward pointer to space after
|
||||
* the end of a message, put the new recipient or header record there,
|
||||
* followed by a reverse pointer to the record that follows the forward
|
||||
* pointer.
|
||||
* - Deleting a message header is simplest when we replace it by a "skip"
|
||||
* pointer to the information that follows the header. With a multi-line
|
||||
* header we need to update only the first line.
|
||||
*
|
||||
* - To append another record of the same type, replace the reverse pointer by
|
||||
* a forward pointer to space after the end of a message, put the new record
|
||||
* there, followed by the value of the reverse pointer that we replace.
|
||||
* Thus, there is no one-to-one correspondence between forward and backward
|
||||
* pointers. Instead, there can be multiple forward pointers for one reverse
|
||||
* pointer.
|
||||
* - Appending a recipient or header record involves pointer records as well.
|
||||
* To make this convenient, the queue file already contains dummy pointer
|
||||
* records at the locations where we want to append recipient or header
|
||||
* content. To append, change the dummy pointer into a forward pointer to
|
||||
* space after the end of a message, put the new recipient or header record
|
||||
* there, followed by a reverse pointer to the record that follows the
|
||||
* forward pointer.
|
||||
*
|
||||
* - To append another header or recipient record, replace the reverse pointer
|
||||
* by a forward pointer to space after the end of a message, put the new
|
||||
* record there, followed by the value of the reverse pointer that we
|
||||
* replace. Thus, there is no one-to-one correspondence between forward and
|
||||
* backward pointers. Instead, there can be multiple forward pointers for
|
||||
* one reverse pointer.
|
||||
*
|
||||
* - When a mail filter wants to replace an entire body, we overwrite existing
|
||||
* body records until we run out of space, and then write a pointer to space
|
||||
* after the end of the queue file, followed by more body content. There may
|
||||
* be multiple regions with body content; regions are connected by forward
|
||||
* pointers, and the last region ends with a pointer to the marker that ends
|
||||
* the message content segment. Body regions can be large and therefore they
|
||||
* are reused to avoid wasting space. Sendmail mail filters currently do not
|
||||
* replace individual body records, and that is a good thing.
|
||||
*
|
||||
* Making queue file modifications safe:
|
||||
*
|
||||
@ -189,20 +200,15 @@
|
||||
* record, without having to relocate a marker record, the cleanup server
|
||||
* places a dummy pointer record at the end of the recipients and at the end
|
||||
* of the message header. To support message body modifications, a dummy
|
||||
* pointer record will also be needed at the end of the message content.
|
||||
* pointer record is also placed at the end of the message content.
|
||||
*
|
||||
* When a mail filter wants to replace an entire body, we have the option to
|
||||
* overwrite existing body records until we run out of space, and then
|
||||
* writing a pointer to space at the end of the queue file, followed by the
|
||||
* remainder of the body, and a pointer to the marker that ends the message
|
||||
* content segment.
|
||||
*
|
||||
* With all these changes, REC_TYPE_END is no longer guaranteed to be the last
|
||||
* record in a queue file. If an application were to read beyond the
|
||||
* REC_TYPE_END marker, it would go into an infinite loop, because records
|
||||
* after REC_TYPE_END alternate with reverse pointers to the middle of the
|
||||
* queue file. For robustness, the record reading routine skips forward to
|
||||
* end-of-file position after reading the REC_TYPE_END marker.
|
||||
* With all these changes in queue file organization, REC_TYPE_END is no longer
|
||||
* guaranteed to be the last record in a queue file. If an application were
|
||||
* to read beyond the REC_TYPE_END marker, it would go into an infinite
|
||||
* loop, because records after REC_TYPE_END alternate with reverse pointers
|
||||
* to the middle of the queue file. For robustness, the record reading
|
||||
* routine skips forward to the end-of-file position after reading the
|
||||
* REC_TYPE_END marker.
|
||||
*/
|
||||
|
||||
/*#define msg_verbose 2*/
|
||||
@ -281,7 +287,7 @@ static const char *cleanup_add_header(void *context, char *name, char *value)
|
||||
}
|
||||
buf = vstring_alloc(100);
|
||||
vstring_sprintf(buf, "%s: %s", name, value);
|
||||
cleanup_out_header(state, buf);
|
||||
cleanup_out_header(state, buf); /* Includes padding */
|
||||
vstring_free(buf);
|
||||
if ((reverse_ptr_offset = vstream_ftell(state->dst)) < 0) {
|
||||
msg_warn("%s: vstream_ftell file %s: %m", myname, cleanup_path);
|
||||
@ -293,6 +299,12 @@ static const char *cleanup_add_header(void *context, char *name, char *value)
|
||||
/*
|
||||
* Pointer flipping: update the old "header append" pointer record value
|
||||
* with the location of the new header record.
|
||||
*
|
||||
* XXX To avoid unnecessary seek operations when the new header immediately
|
||||
* follows the old append header pointer, write a null pointer or make
|
||||
* the record reading loop smarter. Making vstream_fseek() smarter does
|
||||
* not help, because it doesn't know if we're going to read or write
|
||||
* after a write+seek sequence.
|
||||
*/
|
||||
if (vstream_fseek(state->dst, state->append_hdr_pt_offset, SEEK_SET) < 0) {
|
||||
msg_warn("%s: seek file %s: %m", myname, cleanup_path);
|
||||
@ -316,15 +328,16 @@ static const char *cleanup_add_header(void *context, char *name, char *value)
|
||||
return (CLEANUP_OUT_OK(state) ? 0 : cleanup_milter_error(state, 0));
|
||||
}
|
||||
|
||||
/* cleanup_find_header - find specific header instance */
|
||||
/* cleanup_find_header_start - find specific header instance */
|
||||
|
||||
static off_t cleanup_find_header(CLEANUP_STATE *state, ssize_t index,
|
||||
const char *header_label, VSTRING *buf,
|
||||
int *prec_type,
|
||||
int allow_ptr_backup,
|
||||
int skip_headers)
|
||||
static off_t cleanup_find_header_start(CLEANUP_STATE *state, ssize_t index,
|
||||
const char *header_label,
|
||||
VSTRING *buf,
|
||||
int *prec_type,
|
||||
int allow_ptr_backup,
|
||||
int skip_headers)
|
||||
{
|
||||
const char *myname = "cleanup_find_header";
|
||||
const char *myname = "cleanup_find_header_start";
|
||||
off_t curr_offset; /* offset after found record */
|
||||
off_t ptr_offset; /* pointer to found record */
|
||||
VSTRING *ptr_buf = 0;
|
||||
@ -356,8 +369,8 @@ static off_t cleanup_find_header(CLEANUP_STATE *state, ssize_t index,
|
||||
* When the specified header is found, its first record is stored in the
|
||||
* caller-provided read buffer, and the result value is the queue file
|
||||
* offset of that record. The file read position is left at the start of
|
||||
* the next queue file record, which can be the remainder of a
|
||||
* multi-record header.
|
||||
* the next (non-filler) queue file record, which can be the remainder of
|
||||
* a multi-record header.
|
||||
*
|
||||
* When a header is found and allow_ptr_backup is non-zero, then the result
|
||||
* is either the first record of that header, or it is the pointer record
|
||||
@ -366,18 +379,16 @@ static off_t cleanup_find_header(CLEANUP_STATE *state, ssize_t index,
|
||||
* to do some optimizations when inserting text multiple times at the
|
||||
* same place.
|
||||
*
|
||||
* XXX We don't use the MIME processor here. It not only buffers up the
|
||||
* XXX We can't use the MIME processor here. It not only buffers up the
|
||||
* input, it also reads the record that follows a complete header before
|
||||
* it invokes the header call-back action. This complicates the way that
|
||||
* we discover header offsets and boundaries. Worse is that the MIME
|
||||
* processor is unaware that multi-record message headers can have PTR
|
||||
* records in the middle. This means that we can't correctly mark
|
||||
* multi-record text as deleted. We could avoid the latter by never
|
||||
* breaking up multi-record headers.
|
||||
* records in the middle.
|
||||
*
|
||||
* XXX The draw-back of not using the MIME processor is that we have to
|
||||
* duplicate some of its logic here and in the routines that delete or
|
||||
* modify header records. To minimize the duplication we define an ugly
|
||||
* duplicate some of its logic here and in the routine that finds the end
|
||||
* of the header record. To minimize the duplication we define an ugly
|
||||
* macro that is used in all code that scans for header boundaries.
|
||||
*
|
||||
* XXX Sendmail compatibility (based on Sendmail 8.13.6 measurements).
|
||||
@ -429,6 +440,7 @@ static off_t cleanup_find_header(CLEANUP_STATE *state, ssize_t index,
|
||||
if (rec_type != REC_TYPE_NORM && rec_type != REC_TYPE_CONT \
|
||||
&& rec_type != REC_TYPE_PTR) \
|
||||
break;
|
||||
/* End of hairy macros. */
|
||||
|
||||
if (vstream_fseek(state->dst, state->data_offset, SEEK_SET) < 0) {
|
||||
msg_warn("%s: seek file %s: %m", myname, cleanup_path);
|
||||
@ -441,6 +453,9 @@ static off_t cleanup_find_header(CLEANUP_STATE *state, ssize_t index,
|
||||
cleanup_milter_set_error(state, errno);
|
||||
CLEANUP_FIND_HEADER_RETURN(CLEANUP_FIND_HEADER_IOERROR);
|
||||
}
|
||||
/* Don't follow the "append header" pointer. */
|
||||
if (curr_offset == state->append_hdr_pt_offset)
|
||||
break;
|
||||
/* Caution: this macro terminates the loop at end-of-message. */
|
||||
/* Don't do complex processing while breaking out of this loop. */
|
||||
GET_NEXT_TEXT_OR_PTR_RECORD(rec_type, state, buf, curr_offset,
|
||||
@ -490,14 +505,34 @@ static off_t cleanup_find_header(CLEANUP_STATE *state, ssize_t index,
|
||||
*/
|
||||
if (index > 0) {
|
||||
curr_offset = CLEANUP_FIND_HEADER_NOTFOUND;
|
||||
}
|
||||
} else {
|
||||
|
||||
/*
|
||||
* Optionally return the saved PTR record instead of the start of the
|
||||
* message header. In that case the file read position is undefined
|
||||
* (actually it is after the first text record that follows this header).
|
||||
*/
|
||||
else {
|
||||
/*
|
||||
* Skip over short-header padding, so that the file read pointer is
|
||||
* always positioned at the first non-padding record after the header
|
||||
* record. Insist on padding after short a header record, so that a
|
||||
* short header record can safely be overwritten by a pointer record.
|
||||
*/
|
||||
if (LEN(buf) < REC_TYPE_PTR_PAYL_SIZE) {
|
||||
VSTRING *rbuf = (ptr_offset ? buf :
|
||||
(ptr_buf ? ptr_buf :
|
||||
(ptr_buf = vstring_alloc(100))));
|
||||
int rval;
|
||||
|
||||
if ((rval = rec_get_raw(state->dst, rbuf, 0, REC_FLAG_NONE)) < 0) {
|
||||
cleanup_milter_set_error(state, errno);
|
||||
CLEANUP_FIND_HEADER_RETURN(CLEANUP_FIND_HEADER_IOERROR);
|
||||
}
|
||||
if (rval != REC_TYPE_DTXT)
|
||||
msg_panic("%s: short header without padding", myname);
|
||||
}
|
||||
|
||||
/*
|
||||
* Optionally return a pointer to the message header, instead of the
|
||||
* start of the message header itself. In that case the file read
|
||||
* position is undefined (actually it is at the first non-padding
|
||||
* record that follows the message header record).
|
||||
*/
|
||||
if (ptr_offset != 0) {
|
||||
rec_type = REC_TYPE_PTR;
|
||||
curr_offset = ptr_offset;
|
||||
@ -505,7 +540,6 @@ static off_t cleanup_find_header(CLEANUP_STATE *state, ssize_t index,
|
||||
}
|
||||
*prec_type = rec_type;
|
||||
}
|
||||
|
||||
if (msg_verbose)
|
||||
msg_info("%s: index %ld name %s type %d offset %ld",
|
||||
myname, (long) index, header_label ?
|
||||
@ -514,22 +548,67 @@ static off_t cleanup_find_header(CLEANUP_STATE *state, ssize_t index,
|
||||
CLEANUP_FIND_HEADER_RETURN(curr_offset);
|
||||
}
|
||||
|
||||
/* cleanup_find_header_end - find end of header */
|
||||
|
||||
static off_t cleanup_find_header_end(CLEANUP_STATE *state,
|
||||
VSTRING *rec_buf,
|
||||
int last_type)
|
||||
{
|
||||
const char *myname = "cleanup_find_header_end";
|
||||
off_t read_offset;
|
||||
int rec_type;
|
||||
|
||||
/*
|
||||
* This routine is called immediately after cleanup_find_header_start().
|
||||
* rec_buf is the cleanup_find_header_start() result record; last_type is
|
||||
* the corresponding record type: REC_TYPE_PTR or REC_TYPE_NORM; the file
|
||||
* read position is at the first non-padding record after the result
|
||||
* header record.
|
||||
*/
|
||||
for (;;) {
|
||||
if ((read_offset = vstream_ftell(state->dst)) < 0) {
|
||||
msg_warn("%s: read file %s: %m", myname, cleanup_path);
|
||||
cleanup_milter_error(state, errno);
|
||||
return (-1);
|
||||
}
|
||||
/* Don't follow the "append header" pointer. */
|
||||
if (read_offset == state->append_hdr_pt_offset)
|
||||
break;
|
||||
/* Caution: this macro terminates the loop at end-of-message. */
|
||||
/* Don't do complex processing while breaking out of this loop. */
|
||||
GET_NEXT_TEXT_OR_PTR_RECORD(rec_type, state, rec_buf, read_offset,
|
||||
/* Warning and errno->error mapping are done elsewhere. */
|
||||
return (-1));
|
||||
if (rec_type == REC_TYPE_PTR) {
|
||||
if (rec_goto(state->dst, STR(rec_buf)) < 0) {
|
||||
msg_warn("%s: read file %s: %m", myname, cleanup_path);
|
||||
cleanup_milter_error(state, errno);
|
||||
return (-1);
|
||||
}
|
||||
/* Don't update last_type; PTR may follow REC_TYPE_CONT. */
|
||||
continue;
|
||||
}
|
||||
/* Start of header or message body. */
|
||||
if (last_type != REC_TYPE_CONT && !IS_SPACE_TAB(STR(rec_buf)[0]))
|
||||
break;
|
||||
last_type = rec_type;
|
||||
}
|
||||
return (read_offset);
|
||||
}
|
||||
|
||||
/* cleanup_patch_header - patch new header into an existing header */
|
||||
|
||||
static const char *cleanup_patch_header(CLEANUP_STATE *state,
|
||||
const char *new_hdr_name,
|
||||
const char *new_hdr_value,
|
||||
off_t old_rec_offset,
|
||||
int rec_type,
|
||||
int old_rec_type,
|
||||
VSTRING *old_rec_buf,
|
||||
ssize_t avail_space,
|
||||
off_t read_offset)
|
||||
off_t next_offset)
|
||||
{
|
||||
const char *myname = "cleanup_patch_header";
|
||||
VSTRING *buf = vstring_alloc(100);
|
||||
off_t new_hdr_offset;
|
||||
off_t saved_read_offset;
|
||||
off_t write_offset;
|
||||
|
||||
#define CLEANUP_PATCH_HEADER_RETURN(ret) do { \
|
||||
vstring_free(buf); \
|
||||
@ -541,34 +620,24 @@ static const char *cleanup_patch_header(CLEANUP_STATE *state,
|
||||
myname, new_hdr_name, new_hdr_value, (long) old_rec_offset);
|
||||
|
||||
/*
|
||||
* Allocate space after the end of the queue file, and save the new
|
||||
* header and existing record(s) until we have enough space to replace
|
||||
* the saved record(s) by a forward pointer record. If the saved record
|
||||
* was not a PTR record, follow the saved records by a reverse pointer
|
||||
* record that points to the record after the original location of the
|
||||
* last saved record. Note: while moving data, we may move the "header
|
||||
* append" pointer record, so we have to update the in-memory offset for
|
||||
* that record.
|
||||
* Allocate space after the end of the queue file for the new header and
|
||||
* optionally save an existing record to make room for a forward pointer
|
||||
* record. If the saved record was not a PTR record, follow the saved
|
||||
* record by a reverse pointer record that points to the record after the
|
||||
* original location of the saved record.
|
||||
*
|
||||
* We update the queue file in a safe manner: save the new header and the
|
||||
* existing records after the end of the queue file, write the reverse
|
||||
* pointer, and only then overwrite the saved records with the forward
|
||||
* pointer to the new header.
|
||||
*/
|
||||
|
||||
/*
|
||||
* old_rec_offset, rec_type, and old_rec_buf specify the record that we
|
||||
*
|
||||
* old_rec_offset, old_rec_type, and old_rec_buf specify the record that we
|
||||
* are about to overwrite with a pointer record. If the record needs to
|
||||
* be saved (i.e. old_rec_type > 0), the buffer contains the data content
|
||||
* of exactly one PTR or text record.
|
||||
*
|
||||
* When rec_type specifies a text record, avail_space specifies the amount
|
||||
* of contiguous space for the forward pointer record before the records
|
||||
* beginning at read_offset. It's the text record data size, or the
|
||||
* amount of contiguous space at the start of a multi-record header.
|
||||
*
|
||||
* When rec_type specifies a pointer record, the avail_space and read_offset
|
||||
* arguments are ignored.
|
||||
* next_offset specifies the record that follows the to-be-overwritten
|
||||
* record. It is ignored when the to-be-saved record is a pointer record.
|
||||
*/
|
||||
|
||||
/*
|
||||
@ -580,80 +649,39 @@ static const char *cleanup_patch_header(CLEANUP_STATE *state,
|
||||
CLEANUP_PATCH_HEADER_RETURN(cleanup_milter_error(state, errno));
|
||||
}
|
||||
vstring_sprintf(buf, "%s: %s", new_hdr_name, new_hdr_value);
|
||||
cleanup_out_header(state, buf);
|
||||
cleanup_out_header(state, buf); /* Includes padding */
|
||||
if (msg_verbose > 1)
|
||||
msg_info("%s: %ld: write %.*s", myname, (long) new_hdr_offset,
|
||||
LEN(buf) > 30 ? 30 : (int) LEN(buf), STR(buf));
|
||||
|
||||
/*
|
||||
* Optionally, save the existing text record or pointer record that will
|
||||
* be overwritten with the forward pointer.
|
||||
* be overwritten with the forward pointer. Pad a short saved record to
|
||||
* ensure that it, too, can be overwritten by a pointer.
|
||||
*/
|
||||
if (rec_type > 0) {
|
||||
CLEANUP_OUT_BUF(state, rec_type, old_rec_buf);
|
||||
if (old_rec_type > 0) {
|
||||
CLEANUP_OUT_BUF(state, old_rec_type, old_rec_buf);
|
||||
if (LEN(old_rec_buf) < REC_TYPE_PTR_PAYL_SIZE)
|
||||
rec_pad(state->dst, REC_TYPE_DTXT,
|
||||
REC_TYPE_PTR_PAYL_SIZE - LEN(old_rec_buf));
|
||||
if (msg_verbose > 1)
|
||||
msg_info("%s: write %.*s", myname, LEN(old_rec_buf) > 30 ?
|
||||
30 : (int) LEN(old_rec_buf), STR(old_rec_buf));
|
||||
}
|
||||
|
||||
/*
|
||||
* Save additional existing records to make space to write the forward
|
||||
* pointer. We go for simplicity instead of speed, because we rarely need
|
||||
* to do this. Special case: don't create additional space after saving a
|
||||
* pointer record. Requirement: the message headers (and body) always end
|
||||
* in a pointer record.
|
||||
* If the saved record wasn't a PTR record, write the reverse pointer
|
||||
* after the saved records. A reverse pointer value of -1 means we were
|
||||
* confused about what we were going to save.
|
||||
*/
|
||||
while (rec_type != REC_TYPE_PTR && avail_space < REC_TYPE_PTR_PAYL_SIZE) {
|
||||
/* Read existing text or pointer record. */
|
||||
if (vstream_fseek(state->dst, read_offset, SEEK_SET) < 0) {
|
||||
msg_warn("%s: seek file %s: %m", myname, cleanup_path);
|
||||
CLEANUP_PATCH_HEADER_RETURN(cleanup_milter_error(state, errno));
|
||||
}
|
||||
if ((rec_type = rec_get_raw(state->dst, buf, 0, REC_FLAG_NONE)) < 0) {
|
||||
msg_warn("%s: read file %s: %m", myname, cleanup_path);
|
||||
CLEANUP_PATCH_HEADER_RETURN(cleanup_milter_error(state, errno));
|
||||
}
|
||||
if (msg_verbose > 1)
|
||||
msg_info("%s: %ld: read %.*s", myname, (long) read_offset,
|
||||
LEN(buf) > 30 ? 30 : (int) LEN(buf), STR(buf));
|
||||
if (rec_type != REC_TYPE_NORM && rec_type != REC_TYPE_CONT
|
||||
&& rec_type != REC_TYPE_PTR && rec_type != REC_TYPE_DTXT)
|
||||
msg_panic("%s: non-text/ptr record type %d in header, file %s",
|
||||
myname, rec_type, cleanup_path);
|
||||
saved_read_offset = read_offset;
|
||||
if ((read_offset = vstream_ftell(state->dst)) < 0) {
|
||||
msg_warn("%s: vstream_ftell file %s: %m", myname, cleanup_path);
|
||||
CLEANUP_PATCH_HEADER_RETURN(cleanup_milter_error(state, errno));
|
||||
}
|
||||
avail_space += (read_offset - saved_read_offset);
|
||||
/* Save the text or pointer record. */
|
||||
if ((write_offset = vstream_fseek(state->dst, (off_t) 0, SEEK_END)) < 0) {
|
||||
msg_warn("%s: seek file %s: %m", myname, cleanup_path);
|
||||
CLEANUP_PATCH_HEADER_RETURN(cleanup_milter_error(state, errno));
|
||||
}
|
||||
/* The saved "append header" pointer record may still contain "0". */
|
||||
if (saved_read_offset == state->append_hdr_pt_offset)
|
||||
cleanup_out_format(state, REC_TYPE_PTR, REC_TYPE_PTR_FORMAT,
|
||||
(long) state->append_hdr_pt_target);
|
||||
else
|
||||
CLEANUP_OUT_BUF(state, rec_type, buf);
|
||||
if (msg_verbose > 1)
|
||||
msg_info("%s: %ld: write %.*s", myname, (long) write_offset,
|
||||
LEN(buf) > 30 ? 30 : (int) LEN(buf), STR(buf));
|
||||
/* Update cached location of "append header" pointer record. */
|
||||
if (saved_read_offset == state->append_hdr_pt_offset)
|
||||
state->append_hdr_pt_offset = write_offset;
|
||||
}
|
||||
|
||||
/*
|
||||
* If the saved records didn't already end with an old PTR record, write
|
||||
* the reverse pointer after the saved records.
|
||||
*/
|
||||
if (rec_type != REC_TYPE_PTR) {
|
||||
if (old_rec_type != REC_TYPE_PTR) {
|
||||
if (next_offset < 0)
|
||||
msg_panic("%s: bad reverse pointer %ld",
|
||||
myname, (long) next_offset);
|
||||
cleanup_out_format(state, REC_TYPE_PTR, REC_TYPE_PTR_FORMAT,
|
||||
(long) read_offset);
|
||||
(long) next_offset);
|
||||
if (msg_verbose > 1)
|
||||
msg_info("%s: write PTR %ld", myname, (long) read_offset);
|
||||
msg_info("%s: write PTR %ld", myname, (long) next_offset);
|
||||
}
|
||||
|
||||
/*
|
||||
@ -694,8 +722,7 @@ static const char *cleanup_ins_header(void *context, ssize_t index,
|
||||
VSTRING *old_rec_buf = vstring_alloc(100);
|
||||
off_t old_rec_offset;
|
||||
int old_rec_type;
|
||||
off_t read_offset;
|
||||
ssize_t avail_space;
|
||||
off_t next_offset;
|
||||
const char *ret;
|
||||
|
||||
#define CLEANUP_INS_HEADER_RETURN(ret) do { \
|
||||
@ -708,11 +735,7 @@ static const char *cleanup_ins_header(void *context, ssize_t index,
|
||||
myname, (long) index, new_hdr_name, new_hdr_value);
|
||||
|
||||
/*
|
||||
* Look for a header at the specified position. If none exists, simply
|
||||
* append the header to the linked list at the "header append" pointer
|
||||
* record. Otherwise, save both the new and the existing header to new
|
||||
* storage at the end of the queue file, and link the new storage with a
|
||||
* forward and reverse pointer.
|
||||
* Look for a header at the specified position.
|
||||
*
|
||||
* The lookup result may be a pointer record. This allows us to make some
|
||||
* optimization when multiple insert operations happen in the same place.
|
||||
@ -726,32 +749,40 @@ static const char *cleanup_ins_header(void *context, ssize_t index,
|
||||
|
||||
if (index < 1)
|
||||
index = 1;
|
||||
old_rec_offset = cleanup_find_header(state, index, NO_HEADER_NAME,
|
||||
old_rec_buf, &old_rec_type,
|
||||
ALLOW_PTR_BACKUP,
|
||||
DONT_SKIP_HEADERS);
|
||||
old_rec_offset = cleanup_find_header_start(state, index, NO_HEADER_NAME,
|
||||
old_rec_buf, &old_rec_type,
|
||||
ALLOW_PTR_BACKUP,
|
||||
DONT_SKIP_HEADERS);
|
||||
if (old_rec_offset == CLEANUP_FIND_HEADER_IOERROR)
|
||||
/* Warning and errno->error mapping are done elsewhere. */
|
||||
CLEANUP_INS_HEADER_RETURN(cleanup_milter_error(state, 0));
|
||||
if (old_rec_offset < 0) {
|
||||
|
||||
/*
|
||||
* If the header does not exist, simply append the header to the linked
|
||||
* list at the "header append" pointer record.
|
||||
*/
|
||||
if (old_rec_offset < 0)
|
||||
CLEANUP_INS_HEADER_RETURN(cleanup_add_header(context, new_hdr_name,
|
||||
new_hdr_value));
|
||||
|
||||
/*
|
||||
* If the header does exist, save both the new and the existing header to
|
||||
* new storage at the end of the queue file, and link the new storage
|
||||
* with a forward and reverse pointer (don't write a reverse pointer if
|
||||
* we are starting with a pointer record).
|
||||
*/
|
||||
if (old_rec_type == REC_TYPE_PTR) {
|
||||
next_offset = -1;
|
||||
} else {
|
||||
if (old_rec_type == REC_TYPE_PTR) {
|
||||
read_offset = -1;
|
||||
avail_space = -1;
|
||||
} else {
|
||||
if ((read_offset = vstream_ftell(state->dst)) < 0) {
|
||||
msg_warn("%s: read file %s: %m", myname, cleanup_path);
|
||||
CLEANUP_INS_HEADER_RETURN(cleanup_milter_error(state, errno));
|
||||
}
|
||||
avail_space = LEN(old_rec_buf);
|
||||
if ((next_offset = vstream_ftell(state->dst)) < 0) {
|
||||
msg_warn("%s: read file %s: %m", myname, cleanup_path);
|
||||
CLEANUP_INS_HEADER_RETURN(cleanup_milter_error(state, errno));
|
||||
}
|
||||
ret = cleanup_patch_header(state, new_hdr_name, new_hdr_value,
|
||||
old_rec_offset, old_rec_type, old_rec_buf,
|
||||
avail_space, read_offset);
|
||||
CLEANUP_INS_HEADER_RETURN(ret);
|
||||
}
|
||||
ret = cleanup_patch_header(state, new_hdr_name, new_hdr_value,
|
||||
old_rec_offset, old_rec_type,
|
||||
old_rec_buf, next_offset);
|
||||
CLEANUP_INS_HEADER_RETURN(ret);
|
||||
}
|
||||
|
||||
/* cleanup_upd_header - modify or append message header */
|
||||
@ -764,12 +795,8 @@ static const char *cleanup_upd_header(void *context, ssize_t index,
|
||||
CLEANUP_STATE *state = (CLEANUP_STATE *) context;
|
||||
VSTRING *rec_buf;
|
||||
off_t old_rec_offset;
|
||||
ssize_t avail_space;
|
||||
off_t read_offset;
|
||||
off_t saved_read_offset;
|
||||
int rec_type;
|
||||
off_t next_offset;
|
||||
int last_type;
|
||||
int jumped;
|
||||
const char *ret;
|
||||
|
||||
if (msg_verbose)
|
||||
@ -783,11 +810,7 @@ static const char *cleanup_upd_header(void *context, ssize_t index,
|
||||
msg_panic("%s: null header name", myname);
|
||||
|
||||
/*
|
||||
* Find the header that is being modified. If none is found, simply
|
||||
* append the header to the linked list at the "header append" pointer
|
||||
* record. Otherwise, find the end of the old header, save the new header
|
||||
* to new storage at the end of the queue file, and link the new storage
|
||||
* with a forward and reverse pointer.
|
||||
* Find the header that is being modified.
|
||||
*
|
||||
* The lookup result will never be a pointer record.
|
||||
*
|
||||
@ -806,67 +829,34 @@ static const char *cleanup_upd_header(void *context, ssize_t index,
|
||||
} while (0)
|
||||
|
||||
rec_buf = vstring_alloc(100);
|
||||
old_rec_offset = cleanup_find_header(state, index, new_hdr_name,
|
||||
rec_buf, &last_type,
|
||||
NO_PTR_BACKUP,
|
||||
SKIP_ONE_HEADER);
|
||||
old_rec_offset = cleanup_find_header_start(state, index, new_hdr_name,
|
||||
rec_buf, &last_type,
|
||||
NO_PTR_BACKUP,
|
||||
SKIP_ONE_HEADER);
|
||||
if (old_rec_offset == CLEANUP_FIND_HEADER_IOERROR)
|
||||
/* Warning and errno->error mapping are done elsewhere. */
|
||||
CLEANUP_UPD_HEADER_RETURN(cleanup_milter_error(state, 0));
|
||||
if (old_rec_offset < 0) {
|
||||
|
||||
/*
|
||||
* If no old header is found, simply append the new header to the linked
|
||||
* list at the "header append" pointer record.
|
||||
*/
|
||||
if (old_rec_offset < 0)
|
||||
CLEANUP_UPD_HEADER_RETURN(cleanup_add_header(context, new_hdr_name,
|
||||
new_hdr_value));
|
||||
} else {
|
||||
/* Find the end of this header. */
|
||||
avail_space = LEN(rec_buf);
|
||||
if ((read_offset = vstream_ftell(state->dst)) < 0) {
|
||||
msg_warn("%s: read file %s: %m", myname, cleanup_path);
|
||||
CLEANUP_UPD_HEADER_RETURN(cleanup_milter_error(state, errno));
|
||||
}
|
||||
for (jumped = 0, ret = 0; ret == 0; /* void */ ) {
|
||||
if (CLEANUP_OUT_OK(state) == 0)
|
||||
/* Warning and errno->error mapping are done elsewhere. */
|
||||
CLEANUP_UPD_HEADER_RETURN(cleanup_milter_error(state, 0));
|
||||
saved_read_offset = read_offset;
|
||||
/* Caution: this macro terminates the loop at end-of-message. */
|
||||
/* Don't do complex processing while breaking out of this loop. */
|
||||
GET_NEXT_TEXT_OR_PTR_RECORD(rec_type, state, rec_buf, read_offset,
|
||||
/* Warning and errno->error mapping are done elsewhere. */
|
||||
CLEANUP_UPD_HEADER_RETURN(cleanup_milter_error(state, 0)));
|
||||
if ((read_offset = vstream_ftell(state->dst)) < 0) {
|
||||
msg_warn("%s: read file %s: %m", myname, cleanup_path);
|
||||
CLEANUP_UPD_HEADER_RETURN(cleanup_milter_error(state, errno));
|
||||
}
|
||||
if (rec_type == REC_TYPE_PTR) {
|
||||
/* The "append header" pointer record content must be saved. */
|
||||
if (saved_read_offset == state->append_hdr_pt_offset)
|
||||
break;
|
||||
if (jumped == 0) {
|
||||
/* Enough contiguous space for writing a PTR record. */
|
||||
avail_space += read_offset - saved_read_offset;
|
||||
jumped = 1;
|
||||
}
|
||||
if (rec_goto(state->dst, STR(rec_buf)) < 0
|
||||
|| (read_offset = vstream_ftell(state->dst)) < 0) {
|
||||
msg_warn("%s: read file %s: %m", myname, cleanup_path);
|
||||
CLEANUP_UPD_HEADER_RETURN(cleanup_milter_error(state,
|
||||
errno));
|
||||
}
|
||||
/* Don't update last_type; PTR may follow REC_TYPE_CONT. */
|
||||
continue;
|
||||
}
|
||||
/* Start of header or message body. */
|
||||
if (last_type != REC_TYPE_CONT && !IS_SPACE_TAB(STR(rec_buf)[0]))
|
||||
break;
|
||||
if (jumped == 0)
|
||||
avail_space += read_offset - saved_read_offset;
|
||||
last_type = rec_type;
|
||||
}
|
||||
ret = cleanup_patch_header(state, new_hdr_name, new_hdr_value,
|
||||
old_rec_offset, DONT_SAVE_RECORD, (VSTRING *) 0,
|
||||
avail_space, saved_read_offset);
|
||||
CLEANUP_UPD_HEADER_RETURN(ret);
|
||||
}
|
||||
|
||||
/*
|
||||
* If the old header is found, find the end of the old header, save the
|
||||
* new header to new storage at the end of the queue file, and link the
|
||||
* new storage with a forward and reverse pointer.
|
||||
*/
|
||||
if ((next_offset = cleanup_find_header_end(state, rec_buf, last_type)) < 0)
|
||||
/* Warning and errno->error mapping are done elsewhere. */
|
||||
CLEANUP_UPD_HEADER_RETURN(cleanup_milter_error(state, 0));
|
||||
ret = cleanup_patch_header(state, new_hdr_name, new_hdr_value,
|
||||
old_rec_offset, DONT_SAVE_RECORD,
|
||||
(VSTRING *) 0, next_offset);
|
||||
CLEANUP_UPD_HEADER_RETURN(ret);
|
||||
}
|
||||
|
||||
/* cleanup_del_header - delete message header */
|
||||
@ -878,8 +868,7 @@ static const char *cleanup_del_header(void *context, ssize_t index,
|
||||
CLEANUP_STATE *state = (CLEANUP_STATE *) context;
|
||||
VSTRING *rec_buf;
|
||||
off_t header_offset;
|
||||
off_t curr_offset;
|
||||
int rec_type;
|
||||
off_t next_offset;
|
||||
int last_type;
|
||||
|
||||
if (msg_verbose)
|
||||
@ -892,76 +881,42 @@ static const char *cleanup_del_header(void *context, ssize_t index,
|
||||
msg_panic("%s: null header name", myname);
|
||||
|
||||
/*
|
||||
* Find the header that is being deleted, and write over it with a
|
||||
* "deleted text" record type. We first read all the record offsets of
|
||||
* this header, and then mark the records as deleted. If headers were
|
||||
* guaranteed to be contiguous in the queue file (no PTRs in the middle)
|
||||
* then we could use cleanup_out_header() instead of doing multiple seek
|
||||
* + write operations.
|
||||
* Find the header that is being deleted.
|
||||
*
|
||||
* The lookup result will never be a pointer record.
|
||||
*
|
||||
* Index 1 is the first matching header instance.
|
||||
*/
|
||||
rec_buf = vstring_alloc(100);
|
||||
header_offset = cleanup_find_header(state, index, hdr_name, rec_buf,
|
||||
&last_type, NO_PTR_BACKUP,
|
||||
SKIP_ONE_HEADER);
|
||||
if (header_offset == CLEANUP_FIND_HEADER_IOERROR) {
|
||||
vstring_free(rec_buf);
|
||||
/* Warning and errno->error mapping are done elsewhere. */
|
||||
return (cleanup_milter_error(state, 0));
|
||||
}
|
||||
/* Memory usage for header offsets is limited by header_size_limit. */
|
||||
if (header_offset > 0) {
|
||||
ssize_t off_len = 1;
|
||||
ssize_t off_used = 1;
|
||||
off_t *off_list = (off_t *) mymalloc(off_len * sizeof(*off_list));
|
||||
int n;
|
||||
|
||||
#define CLEANUP_DEL_HEADER_RETURN(ret) do { \
|
||||
vstring_free(rec_buf); \
|
||||
myfree((char *) off_list); \
|
||||
return (ret); \
|
||||
} while (0)
|
||||
|
||||
off_list[0] = header_offset;
|
||||
for (;;) {
|
||||
curr_offset = vstream_ftell(state->dst);
|
||||
/* Caution: this macro terminates the loop at end-of-message. */
|
||||
/* Don't do complex processing while breaking out of this loop. */
|
||||
GET_NEXT_TEXT_OR_PTR_RECORD(rec_type, state, rec_buf, curr_offset,
|
||||
rec_buf = vstring_alloc(100);
|
||||
header_offset = cleanup_find_header_start(state, index, hdr_name, rec_buf,
|
||||
&last_type, NO_PTR_BACKUP,
|
||||
SKIP_ONE_HEADER);
|
||||
if (header_offset == CLEANUP_FIND_HEADER_IOERROR)
|
||||
/* Warning and errno->error mapping are done elsewhere. */
|
||||
CLEANUP_DEL_HEADER_RETURN(cleanup_milter_error(state, 0));
|
||||
|
||||
/*
|
||||
* Overwrite the beginning of the header record with a pointer to the
|
||||
* information that follows the header. We can't simply use
|
||||
* cleanup_out_header() with a special record type, because there may be
|
||||
* a PTR record in the middle of a multi-line header.
|
||||
*/
|
||||
if (header_offset > 0) {
|
||||
if ((next_offset = cleanup_find_header_end(state, rec_buf, last_type)) < 0)
|
||||
/* Warning and errno->error mapping are done elsewhere. */
|
||||
CLEANUP_DEL_HEADER_RETURN(cleanup_milter_error(state, 0)));
|
||||
if (rec_type == REC_TYPE_PTR) {
|
||||
if (rec_goto(state->dst, STR(rec_buf)) < 0) {
|
||||
msg_warn("%s: read file %s: %m", myname, cleanup_path);
|
||||
CLEANUP_DEL_HEADER_RETURN(cleanup_milter_error(state,
|
||||
errno));
|
||||
}
|
||||
/* Don't update last_type; PTR may follow REC_TYPE_CONT. */
|
||||
continue;
|
||||
}
|
||||
/* Start of header or message body. */
|
||||
if (last_type != REC_TYPE_CONT && !IS_SPACE_TAB(STR(rec_buf)[0]))
|
||||
break;
|
||||
/* Save this header text record offset. */
|
||||
if (off_used >= off_len) {
|
||||
off_len *= 2;
|
||||
off_list = (off_t *) myrealloc((char *) off_list,
|
||||
off_len * sizeof(*off_list));
|
||||
}
|
||||
off_list[off_used++] = curr_offset;
|
||||
last_type = rec_type;
|
||||
CLEANUP_DEL_HEADER_RETURN(cleanup_milter_error(state, 0));
|
||||
/* Mark the header as deleted. */
|
||||
if (vstream_fseek(state->dst, header_offset, SEEK_SET) < 0) {
|
||||
msg_warn("%s: seek file %s: %m", myname, cleanup_path);
|
||||
CLEANUP_DEL_HEADER_RETURN(cleanup_milter_error(state, errno));
|
||||
}
|
||||
/* Mark the header text records as deleted. */
|
||||
for (n = 0; n < off_used; n++) {
|
||||
if (rec_put_type(state->dst, REC_TYPE_DTXT, off_list[n]) < 0) {
|
||||
msg_warn("%s: write file %s: %m", myname, cleanup_path);
|
||||
CLEANUP_DEL_HEADER_RETURN(cleanup_milter_error(state, errno));
|
||||
}
|
||||
}
|
||||
myfree((char *) off_list);
|
||||
rec_fprintf(state->dst, REC_TYPE_PTR, REC_TYPE_PTR_FORMAT,
|
||||
(long) next_offset);
|
||||
}
|
||||
vstring_free(rec_buf);
|
||||
|
||||
@ -1674,6 +1629,7 @@ int var_enable_orcpt = DEF_ENABLE_ORCPT;
|
||||
MAPS *cleanup_virt_alias_maps;
|
||||
char *var_milt_daemon_name = "host.example.com";
|
||||
char *var_milt_v = DEF_MILT_V;
|
||||
MILTERS *cleanup_milters = (MILTERS *) ((char *) sizeof(*cleanup_milters));
|
||||
|
||||
/* Dummies to satisfy unused external references. */
|
||||
|
||||
@ -1775,7 +1731,8 @@ static void open_queue_file(CLEANUP_STATE *state, const char *path)
|
||||
} else if (rec_type == REC_TYPE_PTR) {
|
||||
if (state->data_offset < 0)
|
||||
msg_fatal("file %s: missing SIZE record", cleanup_path);
|
||||
if (curr_offset < state->data_offset) {
|
||||
if (curr_offset < state->data_offset
|
||||
|| curr_offset > state->xtra_offset) {
|
||||
if (state->append_rcpt_pt_offset < 0) {
|
||||
state->append_rcpt_pt_offset = curr_offset;
|
||||
if (atol(STR(buf)) != 0)
|
||||
@ -1785,7 +1742,7 @@ static void open_queue_file(CLEANUP_STATE *state, const char *path)
|
||||
vstream_ftell(state->dst)) < 0)
|
||||
msg_fatal("file %s: vstream_ftell: %m", cleanup_path);
|
||||
}
|
||||
} else if (curr_offset < state->xtra_offset) {
|
||||
} else {
|
||||
if (state->append_hdr_pt_offset < 0) {
|
||||
state->append_hdr_pt_offset = curr_offset;
|
||||
if (atol(STR(buf)) != 0)
|
||||
@ -1794,17 +1751,13 @@ static void open_queue_file(CLEANUP_STATE *state, const char *path)
|
||||
if ((state->append_hdr_pt_target =
|
||||
vstream_ftell(state->dst)) < 0)
|
||||
msg_fatal("file %s: vstream_ftell: %m", cleanup_path);
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
if (state->append_rcpt_pt_offset > 0
|
||||
&& state->append_hdr_pt_offset > 0)
|
||||
break;
|
||||
}
|
||||
if (state->append_rcpt_pt_offset < 0)
|
||||
msg_fatal("file %s: no append recipient pointer record",
|
||||
cleanup_path);
|
||||
if (state->append_hdr_pt_offset < 0)
|
||||
msg_fatal("file %s: no append header pointer record",
|
||||
cleanup_path);
|
||||
if (msg_verbose) {
|
||||
msg_info("append_rcpt_pt_offset %ld append_rcpt_pt_target %ld",
|
||||
(long) state->append_rcpt_pt_offset,
|
||||
|
@ -7,7 +7,7 @@ open test-queue-file.tmp
|
||||
|
||||
add_rcpt xxxx
|
||||
add_rcpt yyyy
|
||||
del_rcpt alias@tail.porcupine.org
|
||||
del_rcpt alias@hades.porcupine.org
|
||||
del_rcpt yyyy
|
||||
|
||||
# Insert a short header X2 at the position of a short multi-line
|
||||
|
22
postfix/src/cleanup/cleanup_milter.in12
Normal file
22
postfix/src/cleanup/cleanup_milter.in12
Normal file
@ -0,0 +1,22 @@
|
||||
#verbose on
|
||||
open test-queue-file12.tmp
|
||||
|
||||
# Add a recipient to a message that was received with "sendmail -t"
|
||||
# so that all the recipients are in the extracted queue file segment.
|
||||
|
||||
add_rcpt me@porcupine.org
|
||||
|
||||
# Delete the recipient added above.
|
||||
|
||||
del_rcpt me@porcupine.org
|
||||
|
||||
# Add a new recipient, using a different address than above, so that
|
||||
# the duplicate filter won't suppress it.
|
||||
|
||||
add_rcpt em@porcupine.org
|
||||
|
||||
# Delete the recipient.
|
||||
|
||||
del_rcpt em@porcupine.org
|
||||
|
||||
close
|
@ -1,52 +1,58 @@
|
||||
*** ENVELOPE RECORDS test-queue-file.tmp ***
|
||||
0 message_size: 428 654 3 0
|
||||
65 message_arrival_time: Sat May 13 21:04:18 2006
|
||||
84 create_time: Sat May 13 21:04:27 2006
|
||||
108 named_attribute: rewrite_context=local
|
||||
131 sender: wietse@porcupine.org
|
||||
153 named_attribute: client_name=tail.porcupine.org
|
||||
185 named_attribute: client_address=IPv6:2001:240:587:0:2d0:b7ff:febe:ca9f
|
||||
240 named_attribute: message_origin=tail.porcupine.org[2001:240:587:0:2d0:b7ff:febe:ca9f]
|
||||
310 named_attribute: helo_name=tail.porcupine.org
|
||||
340 named_attribute: protocol_name=SMTP
|
||||
360 named_attribute: dsn_orig_rcpt=rfc822;wietse@porcupine.org
|
||||
403 original_recipient: wietse@porcupine.org
|
||||
425 recipient: wietse@porcupine.org
|
||||
447 named_attribute: dsn_orig_rcpt=rfc822;alias@tail.porcupine.org
|
||||
494 original_recipient: alias@tail.porcupine.org
|
||||
520 canceled_recipient: wietse@porcupine.org
|
||||
542 named_attribute: dsn_orig_rcpt=rfc822;alias@tail.porcupine.org
|
||||
589 original_recipient: alias@tail.porcupine.org
|
||||
615 canceled_recipient: root@porcupine.org
|
||||
635 pointer_record: 1103
|
||||
1103 named_attribute: notify_flags=1
|
||||
1119 original_recipient: xxxx
|
||||
1125 recipient: xxxx
|
||||
1131 pointer_record: 1148
|
||||
1148 named_attribute: notify_flags=1
|
||||
1164 original_recipient: yyyy
|
||||
1170 canceled_recipient: yyyy
|
||||
1176 pointer_record: 652
|
||||
652 *** MESSAGE CONTENTS test-queue-file.tmp ***
|
||||
654 regular_text: Received: from tail.porcupine.org (tail.porcupine.org [IPv6:2001:240:587:0:2d0:b7ff:febe:ca9f])
|
||||
751 regular_text: by tail.porcupine.org (Postfix) with SMTP id E0F703D1E36;
|
||||
811 regular_text: Sat, 13 May 2006 21:04:18 -0400 (EDT)
|
||||
851 pointer_record: 1193
|
||||
1193 pointer_record: 1236
|
||||
1236 deleted_text: X2: v2
|
||||
1244 pointer_record: 1386
|
||||
1386 regular_text: X: X-replaced-header replacement header text
|
||||
1432 pointer_record: 1271
|
||||
1271 regular_text: X2: test header value 3
|
||||
1296 regular_text: Y: 1234567
|
||||
1308 regular_text: Message-Id: <20060514010427.E0F703D1E36@tail.porcupine.org>
|
||||
1369 pointer_record: 954
|
||||
954 regular_text: Date: Sat, 13 May 2006 21:04:18 -0400 (EDT)
|
||||
999 regular_text: From: wietse@porcupine.org
|
||||
1027 regular_text: To: undisclosed-recipients:;
|
||||
1057 pointer_record: 0
|
||||
1074 regular_text:
|
||||
1076 regular_text: text
|
||||
1082 *** HEADER EXTRACTED test-queue-file.tmp ***
|
||||
1084 pointer_record: 0
|
||||
1101 *** MESSAGE FILE END test-queue-file.tmp ***
|
||||
0 message_size: 441 813 3 0 441
|
||||
81 message_arrival_time: Sat Jan 20 19:52:41 2007
|
||||
100 create_time: Sat Jan 20 19:52:47 2007
|
||||
124 named_attribute: rewrite_context=local
|
||||
147 sender: wietse@porcupine.org
|
||||
169 named_attribute: log_client_name=hades.porcupine.org
|
||||
206 named_attribute: log_client_address=168.100.189.10
|
||||
241 named_attribute: log_message_origin=hades.porcupine.org[168.100.189.10]
|
||||
297 named_attribute: log_helo_name=hades.porcupine.org
|
||||
332 named_attribute: log_protocol_name=SMTP
|
||||
356 named_attribute: client_name=hades.porcupine.org
|
||||
389 named_attribute: reverse_client_name=hades.porcupine.org
|
||||
430 named_attribute: client_address=168.100.189.10
|
||||
461 named_attribute: helo_name=hades.porcupine.org
|
||||
492 named_attribute: client_address_type=2
|
||||
515 named_attribute: dsn_orig_rcpt=rfc822;wietse@porcupine.org
|
||||
558 original_recipient: wietse@porcupine.org
|
||||
580 recipient: wietse@porcupine.org
|
||||
602 named_attribute: dsn_orig_rcpt=rfc822;alias@hades.porcupine.org
|
||||
650 original_recipient: alias@hades.porcupine.org
|
||||
677 canceled_recipient: wietse@porcupine.org
|
||||
699 named_attribute: dsn_orig_rcpt=rfc822;alias@hades.porcupine.org
|
||||
747 original_recipient: alias@hades.porcupine.org
|
||||
774 canceled_recipient: root@porcupine.org
|
||||
794 pointer_record: 1258
|
||||
1258 named_attribute: notify_flags=1
|
||||
1274 original_recipient: xxxx
|
||||
1280 recipient: xxxx
|
||||
1286 pointer_record: 1303
|
||||
1303 named_attribute: notify_flags=1
|
||||
1319 original_recipient: yyyy
|
||||
1325 canceled_recipient: yyyy
|
||||
1331 pointer_record: 811
|
||||
811 *** MESSAGE CONTENTS test-queue-file.tmp ***
|
||||
813 regular_text: Received: from hades.porcupine.org (hades.porcupine.org [168.100.189.10])
|
||||
888 regular_text: by hades.porcupine.org (Postfix) with SMTP id 38132290405;
|
||||
949 regular_text: Sat, 20 Jan 2007 19:52:41 -0500 (EST)
|
||||
989 pointer_record: 1348
|
||||
1348 pointer_record: 1399
|
||||
1399 pointer_record: 1365
|
||||
1365 pointer_record: 1492
|
||||
1492 regular_text: X: X-replaced-header replacement header text
|
||||
1538 pointer_record: 1433
|
||||
1433 regular_text: X2: test header value 3
|
||||
1458 regular_text: Y: 1234567
|
||||
1470 padding: 0
|
||||
1475 pointer_record: 1047
|
||||
1047 regular_text: Message-Id: <20070121005247.38132290405@hades.porcupine.org>
|
||||
1109 regular_text: Date: Sat, 20 Jan 2007 19:52:41 -0500 (EST)
|
||||
1154 regular_text: From: wietse@porcupine.org
|
||||
1182 regular_text: To: undisclosed-recipients:;
|
||||
1212 pointer_record: 0
|
||||
1229 regular_text:
|
||||
1231 regular_text: text
|
||||
1237 pointer_record: 0
|
||||
1254 *** HEADER EXTRACTED test-queue-file.tmp ***
|
||||
1256 *** MESSAGE FILE END test-queue-file.tmp ***
|
||||
|
@ -1,52 +1,53 @@
|
||||
*** ENVELOPE RECORDS test-queue-file10.tmp ***
|
||||
0 message_size: 329 181 1 0
|
||||
65 message_arrival_time: Tue Jul 25 15:37:06 2006
|
||||
82 create_time: Tue Jul 25 15:37:06 2006
|
||||
106 named_attribute: rewrite_context=local
|
||||
129 sender_fullname: Wietse Venema
|
||||
144 sender: me@porcupine.org
|
||||
162 pointer_record: 0
|
||||
179 *** MESSAGE CONTENTS test-queue-file10.tmp ***
|
||||
181 regular_text: Received: by bristle.watson.ibm.com (Postfix, from userid 0)
|
||||
243 regular_text: id 034B229013F; Tue, 25 Jul 2006 15:37:06 -0400 (EDT)
|
||||
299 regular_text: From: me@porcupine.org
|
||||
323 regular_text: To: you@porcupine.org
|
||||
346 regular_text: Message-Id: <20060725192735.5EC2D29013F@hades.porcupine.org>
|
||||
408 regular_text: Date: Tue, 25 Jul 2006 15:27:19 -0400 (EDT)
|
||||
453 regular_text: Subject: hey!
|
||||
468 pointer_record: 485
|
||||
485 regular_text:
|
||||
487 pointer_record: 552
|
||||
552 regular_text: Sed ut perspiciatis unde omnis iste natus error sit voluptatem
|
||||
617 regular_text: accusantium doloremque laudantium, totam rem aperiam, eaque ipsa
|
||||
684 regular_text: quae ab illo inventore veritatis et quasi architecto beatae vitae
|
||||
752 regular_text: dicta sunt explicabo. Nemo enim ipsam voluptatem quia voluptas sit
|
||||
821 regular_text: aspernatur aut odit aut fugit, sed quia consequuntur magni dolores
|
||||
890 regular_text: eos qui ratione voluptatem sequi nesciunt. Neque porro quisquam
|
||||
956 regular_text: est, qui dolorem ipsum quia dolor sit amet, consectetur, adipisci
|
||||
1024 regular_text: velit, sed quia non numquam eius modi tempora incidunt ut labore
|
||||
1091 regular_text: et dolore magnam aliquam quaerat voluptatem. Ut enim ad minima
|
||||
1156 regular_text: veniam, quis nostrum exercitationem ullam corporis suscipit laboriosam,
|
||||
1230 regular_text: nisi ut aliquid ex ea commodi consequatur? Quis autem vel eum iure
|
||||
1299 regular_text: reprehenderit qui in ea voluptate velit esse quam nihil molestiae
|
||||
1367 regular_text: consequatur, vel illum qui dolorem eum fugiat quo voluptas nulla
|
||||
1434 regular_text: pariatur?
|
||||
1446 regular_text:
|
||||
1449 regular_text: At vero eos et accusamus et iusto odio dignissimos ducimus qui
|
||||
1514 regular_text: blanditiis praesentium voluptatum deleniti atque corrupti quos
|
||||
1579 regular_text: dolores et quas molestias excepturi sint occaecati cupiditate non
|
||||
1647 regular_text: provident, similique sunt in culpa qui officia deserunt mollitia
|
||||
1714 regular_text: animi, id est laborum et dolorum fuga. Et harum quidem rerum facilis
|
||||
1785 regular_text: est et expedita distinctio. Nam libero tempore, cum soluta nobis
|
||||
1852 regular_text: est eligendi optio cumque nihil impedit quo minus id quod maxime
|
||||
1919 regular_text: placeat facere possimus, omnis voluptas assumenda est, omnis dolor
|
||||
1988 regular_text: repellendus. Temporibus autem quibusdam et aut officiis debitis aut
|
||||
2058 regular_text: rerum necessitatibus saepe eveniet ut et voluptates repudiandae
|
||||
2124 regular_text: sint et molestiae non recusandae. Itaque earum rerum hic tenetur a
|
||||
2193 regular_text: sapiente delectus, ut aut reiciendis voluptatibus maiores alias
|
||||
2259 regular_text: consequatur aut perferendis doloribus asperiores repellat.
|
||||
2320 pointer_record: 510
|
||||
510 *** HEADER EXTRACTED test-queue-file10.tmp ***
|
||||
512 original_recipient: you@porcupine.org
|
||||
531 recipient: you@porcupine.org
|
||||
550 *** MESSAGE FILE END test-queue-file10.tmp ***
|
||||
0 message_size: 332 199 1 0 332
|
||||
81 message_arrival_time: Sat Jan 20 20:53:54 2007
|
||||
100 create_time: Sat Jan 20 20:53:59 2007
|
||||
124 named_attribute: rewrite_context=local
|
||||
147 sender_fullname: Wietse Venema
|
||||
162 sender: me@porcupine.org
|
||||
180 pointer_record: 0
|
||||
197 *** MESSAGE CONTENTS test-queue-file10.tmp ***
|
||||
199 regular_text: Received: by hades.porcupine.org (Postfix, from userid 1001)
|
||||
261 regular_text: id B85F1290407; Sat, 20 Jan 2007 20:53:59 -0500 (EST)
|
||||
317 regular_text: From: me@porcupine.org
|
||||
341 regular_text: To: you@porcupine.org
|
||||
364 regular_text: Message-Id: <20060725192735.5EC2D29013F@hades.porcupine.org>
|
||||
426 regular_text: Date: Tue, 25 Jul 2006 15:27:19 -0400 (EDT)
|
||||
471 regular_text: Subject: hey!
|
||||
486 padding: 0
|
||||
489 pointer_record: 506
|
||||
506 regular_text:
|
||||
508 pointer_record: 573
|
||||
573 regular_text: Sed ut perspiciatis unde omnis iste natus error sit voluptatem
|
||||
638 regular_text: accusantium doloremque laudantium, totam rem aperiam, eaque ipsa
|
||||
705 regular_text: quae ab illo inventore veritatis et quasi architecto beatae vitae
|
||||
773 regular_text: dicta sunt explicabo. Nemo enim ipsam voluptatem quia voluptas sit
|
||||
842 regular_text: aspernatur aut odit aut fugit, sed quia consequuntur magni dolores
|
||||
911 regular_text: eos qui ratione voluptatem sequi nesciunt. Neque porro quisquam
|
||||
977 regular_text: est, qui dolorem ipsum quia dolor sit amet, consectetur, adipisci
|
||||
1045 regular_text: velit, sed quia non numquam eius modi tempora incidunt ut labore
|
||||
1112 regular_text: et dolore magnam aliquam quaerat voluptatem. Ut enim ad minima
|
||||
1177 regular_text: veniam, quis nostrum exercitationem ullam corporis suscipit laboriosam,
|
||||
1251 regular_text: nisi ut aliquid ex ea commodi consequatur? Quis autem vel eum iure
|
||||
1320 regular_text: reprehenderit qui in ea voluptate velit esse quam nihil molestiae
|
||||
1388 regular_text: consequatur, vel illum qui dolorem eum fugiat quo voluptas nulla
|
||||
1455 regular_text: pariatur?
|
||||
1467 regular_text:
|
||||
1470 regular_text: At vero eos et accusamus et iusto odio dignissimos ducimus qui
|
||||
1535 regular_text: blanditiis praesentium voluptatum deleniti atque corrupti quos
|
||||
1600 regular_text: dolores et quas molestias excepturi sint occaecati cupiditate non
|
||||
1668 regular_text: provident, similique sunt in culpa qui officia deserunt mollitia
|
||||
1735 regular_text: animi, id est laborum et dolorum fuga. Et harum quidem rerum facilis
|
||||
1806 regular_text: est et expedita distinctio. Nam libero tempore, cum soluta nobis
|
||||
1873 regular_text: est eligendi optio cumque nihil impedit quo minus id quod maxime
|
||||
1940 regular_text: placeat facere possimus, omnis voluptas assumenda est, omnis dolor
|
||||
2009 regular_text: repellendus. Temporibus autem quibusdam et aut officiis debitis aut
|
||||
2079 regular_text: rerum necessitatibus saepe eveniet ut et voluptates repudiandae
|
||||
2145 regular_text: sint et molestiae non recusandae. Itaque earum rerum hic tenetur a
|
||||
2214 regular_text: sapiente delectus, ut aut reiciendis voluptatibus maiores alias
|
||||
2280 regular_text: consequatur aut perferendis doloribus asperiores repellat.
|
||||
2341 pointer_record: 531
|
||||
531 *** HEADER EXTRACTED test-queue-file10.tmp ***
|
||||
533 original_recipient: you@porcupine.org
|
||||
552 recipient: you@porcupine.org
|
||||
571 *** MESSAGE FILE END test-queue-file10.tmp ***
|
||||
|
@ -1,52 +1,53 @@
|
||||
*** ENVELOPE RECORDS test-queue-file10.tmp ***
|
||||
0 message_size: 329 181 1 0
|
||||
65 message_arrival_time: Tue Jul 25 15:37:06 2006
|
||||
82 create_time: Tue Jul 25 15:37:06 2006
|
||||
106 named_attribute: rewrite_context=local
|
||||
129 sender_fullname: Wietse Venema
|
||||
144 sender: me@porcupine.org
|
||||
162 pointer_record: 0
|
||||
179 *** MESSAGE CONTENTS test-queue-file10.tmp ***
|
||||
181 regular_text: Received: by bristle.watson.ibm.com (Postfix, from userid 0)
|
||||
243 regular_text: id 034B229013F; Tue, 25 Jul 2006 15:37:06 -0400 (EDT)
|
||||
299 regular_text: From: me@porcupine.org
|
||||
323 regular_text: To: you@porcupine.org
|
||||
346 regular_text: Message-Id: <20060725192735.5EC2D29013F@hades.porcupine.org>
|
||||
408 regular_text: Date: Tue, 25 Jul 2006 15:27:19 -0400 (EDT)
|
||||
453 regular_text: Subject: hey!
|
||||
468 pointer_record: 485
|
||||
485 regular_text:
|
||||
487 pointer_record: 552
|
||||
552 regular_text: Sed ut perspiciatis unde omnis iste natus error sit voluptatem
|
||||
617 regular_text: accusantium doloremque laudantium, totam rem aperiam, eaque ipsa
|
||||
684 regular_text: quae ab illo inventore veritatis et quasi architecto beatae vitae
|
||||
752 regular_text: dicta sunt explicabo. Nemo enim ipsam voluptatem quia voluptas sit
|
||||
821 regular_text: aspernatur aut odit aut fugit, sed quia consequuntur magni dolores
|
||||
890 regular_text: eos qui ratione voluptatem sequi nesciunt. Neque porro quisquam
|
||||
956 regular_text: est, qui dolorem ipsum quia dolor sit amet, consectetur, adipisci
|
||||
1024 regular_text: velit, sed quia non numquam eius modi tempora incidunt ut labore
|
||||
1091 regular_text: et dolore magnam aliquam quaerat voluptatem. Ut enim ad minima
|
||||
1156 regular_text: veniam, quis nostrum exercitationem ullam corporis suscipit laboriosam,
|
||||
1230 regular_text: nisi ut aliquid ex ea commodi consequatur? Quis autem vel eum iure
|
||||
1299 regular_text: reprehenderit qui in ea voluptate velit esse quam nihil molestiae
|
||||
1367 regular_text: consequatur, vel illum qui dolorem eum fugiat quo voluptas nulla
|
||||
1434 regular_text: pariatur?
|
||||
1446 regular_text:
|
||||
1449 regular_text: At vero eos et accusamus et iusto odio dignissimos ducimus qui
|
||||
1514 regular_text: blanditiis praesentium voluptatum deleniti atque corrupti quos
|
||||
1579 regular_text: dolores et quas molestias excepturi sint occaecati cupiditate non
|
||||
1647 regular_text: provident, similique sunt in culpa qui officia deserunt mollitia
|
||||
1714 regular_text: animi, id est laborum et dolorum fuga. Et harum quidem rerum facilis
|
||||
1785 regular_text: est et expedita distinctio. Nam libero tempore, cum soluta nobis
|
||||
1852 regular_text: est eligendi optio cumque nihil impedit quo minus id quod maxime
|
||||
1919 regular_text: placeat facere possimus, omnis voluptas assumenda est, omnis dolor
|
||||
1988 regular_text: repellendus. Temporibus autem quibusdam et aut officiis debitis aut
|
||||
2058 regular_text: rerum necessitatibus saepe eveniet ut et voluptates repudiandae
|
||||
2124 regular_text: sint et molestiae non recusandae. Itaque earum rerum hic tenetur a
|
||||
2193 regular_text: sapiente delectus, ut aut reiciendis voluptatibus maiores alias
|
||||
2259 regular_text: consequatur aut perferendis doloribus asperiores repellat.
|
||||
2320 pointer_record: 510
|
||||
510 *** HEADER EXTRACTED test-queue-file10.tmp ***
|
||||
512 original_recipient: you@porcupine.org
|
||||
531 recipient: you@porcupine.org
|
||||
550 *** MESSAGE FILE END test-queue-file10.tmp ***
|
||||
0 message_size: 332 199 1 0 332
|
||||
81 message_arrival_time: Sat Jan 20 20:53:54 2007
|
||||
100 create_time: Sat Jan 20 20:53:59 2007
|
||||
124 named_attribute: rewrite_context=local
|
||||
147 sender_fullname: Wietse Venema
|
||||
162 sender: me@porcupine.org
|
||||
180 pointer_record: 0
|
||||
197 *** MESSAGE CONTENTS test-queue-file10.tmp ***
|
||||
199 regular_text: Received: by hades.porcupine.org (Postfix, from userid 1001)
|
||||
261 regular_text: id B85F1290407; Sat, 20 Jan 2007 20:53:59 -0500 (EST)
|
||||
317 regular_text: From: me@porcupine.org
|
||||
341 regular_text: To: you@porcupine.org
|
||||
364 regular_text: Message-Id: <20060725192735.5EC2D29013F@hades.porcupine.org>
|
||||
426 regular_text: Date: Tue, 25 Jul 2006 15:27:19 -0400 (EDT)
|
||||
471 regular_text: Subject: hey!
|
||||
486 padding: 0
|
||||
489 pointer_record: 506
|
||||
506 regular_text:
|
||||
508 pointer_record: 573
|
||||
573 regular_text: Sed ut perspiciatis unde omnis iste natus error sit voluptatem
|
||||
638 regular_text: accusantium doloremque laudantium, totam rem aperiam, eaque ipsa
|
||||
705 regular_text: quae ab illo inventore veritatis et quasi architecto beatae vitae
|
||||
773 regular_text: dicta sunt explicabo. Nemo enim ipsam voluptatem quia voluptas sit
|
||||
842 regular_text: aspernatur aut odit aut fugit, sed quia consequuntur magni dolores
|
||||
911 regular_text: eos qui ratione voluptatem sequi nesciunt. Neque porro quisquam
|
||||
977 regular_text: est, qui dolorem ipsum quia dolor sit amet, consectetur, adipisci
|
||||
1045 regular_text: velit, sed quia non numquam eius modi tempora incidunt ut labore
|
||||
1112 regular_text: et dolore magnam aliquam quaerat voluptatem. Ut enim ad minima
|
||||
1177 regular_text: veniam, quis nostrum exercitationem ullam corporis suscipit laboriosam,
|
||||
1251 regular_text: nisi ut aliquid ex ea commodi consequatur? Quis autem vel eum iure
|
||||
1320 regular_text: reprehenderit qui in ea voluptate velit esse quam nihil molestiae
|
||||
1388 regular_text: consequatur, vel illum qui dolorem eum fugiat quo voluptas nulla
|
||||
1455 regular_text: pariatur?
|
||||
1467 regular_text:
|
||||
1470 regular_text: At vero eos et accusamus et iusto odio dignissimos ducimus qui
|
||||
1535 regular_text: blanditiis praesentium voluptatum deleniti atque corrupti quos
|
||||
1600 regular_text: dolores et quas molestias excepturi sint occaecati cupiditate non
|
||||
1668 regular_text: provident, similique sunt in culpa qui officia deserunt mollitia
|
||||
1735 regular_text: animi, id est laborum et dolorum fuga. Et harum quidem rerum facilis
|
||||
1806 regular_text: est et expedita distinctio. Nam libero tempore, cum soluta nobis
|
||||
1873 regular_text: est eligendi optio cumque nihil impedit quo minus id quod maxime
|
||||
1940 regular_text: placeat facere possimus, omnis voluptas assumenda est, omnis dolor
|
||||
2009 regular_text: repellendus. Temporibus autem quibusdam et aut officiis debitis aut
|
||||
2079 regular_text: rerum necessitatibus saepe eveniet ut et voluptates repudiandae
|
||||
2145 regular_text: sint et molestiae non recusandae. Itaque earum rerum hic tenetur a
|
||||
2214 regular_text: sapiente delectus, ut aut reiciendis voluptatibus maiores alias
|
||||
2280 regular_text: consequatur aut perferendis doloribus asperiores repellat.
|
||||
2341 pointer_record: 531
|
||||
531 *** HEADER EXTRACTED test-queue-file10.tmp ***
|
||||
533 original_recipient: you@porcupine.org
|
||||
552 recipient: you@porcupine.org
|
||||
571 *** MESSAGE FILE END test-queue-file10.tmp ***
|
||||
|
@ -1,82 +1,83 @@
|
||||
*** ENVELOPE RECORDS test-queue-file10.tmp ***
|
||||
0 message_size: 329 181 1 0
|
||||
65 message_arrival_time: Tue Jul 25 15:37:06 2006
|
||||
82 create_time: Tue Jul 25 15:37:06 2006
|
||||
106 named_attribute: rewrite_context=local
|
||||
129 sender_fullname: Wietse Venema
|
||||
144 sender: me@porcupine.org
|
||||
162 pointer_record: 0
|
||||
179 *** MESSAGE CONTENTS test-queue-file10.tmp ***
|
||||
181 regular_text: Received: by bristle.watson.ibm.com (Postfix, from userid 0)
|
||||
243 regular_text: id 034B229013F; Tue, 25 Jul 2006 15:37:06 -0400 (EDT)
|
||||
299 regular_text: From: me@porcupine.org
|
||||
323 regular_text: To: you@porcupine.org
|
||||
346 regular_text: Message-Id: <20060725192735.5EC2D29013F@hades.porcupine.org>
|
||||
408 regular_text: Date: Tue, 25 Jul 2006 15:27:19 -0400 (EDT)
|
||||
453 regular_text: Subject: hey!
|
||||
468 pointer_record: 485
|
||||
485 regular_text:
|
||||
487 pointer_record: 552
|
||||
552 regular_text: Sed ut perspiciatis unde omnis iste natus error sit voluptatem
|
||||
617 regular_text: accusantium doloremque laudantium, totam rem aperiam, eaque ipsa
|
||||
684 regular_text: quae ab illo inventore veritatis et quasi architecto beatae vitae
|
||||
752 regular_text: dicta sunt explicabo. Nemo enim ipsam voluptatem quia voluptas sit
|
||||
821 regular_text: aspernatur aut odit aut fugit, sed quia consequuntur magni dolores
|
||||
890 regular_text: eos qui ratione voluptatem sequi nesciunt. Neque porro quisquam
|
||||
956 regular_text: est, qui dolorem ipsum quia dolor sit amet, consectetur, adipisci
|
||||
1024 regular_text: velit, sed quia non numquam eius modi tempora incidunt ut labore
|
||||
1091 regular_text: et dolore magnam aliquam quaerat voluptatem. Ut enim ad minima
|
||||
1156 regular_text: veniam, quis nostrum exercitationem ullam corporis suscipit laboriosam,
|
||||
1230 regular_text: nisi ut aliquid ex ea commodi consequatur? Quis autem vel eum iure
|
||||
1299 regular_text: reprehenderit qui in ea voluptate velit esse quam nihil molestiae
|
||||
1367 regular_text: consequatur, vel illum qui dolorem eum fugiat quo voluptas nulla
|
||||
1434 regular_text: pariatur?
|
||||
1446 regular_text:
|
||||
1449 regular_text: At vero eos et accusamus et iusto odio dignissimos ducimus qui
|
||||
1514 regular_text: blanditiis praesentium voluptatum deleniti atque corrupti quos
|
||||
1579 regular_text: dolores et quas molestias excepturi sint occaecati cupiditate non
|
||||
1647 regular_text: provident, similique sunt in culpa qui officia deserunt mollitia
|
||||
1714 regular_text: animi, id est laborum et dolorum fuga. Et harum quidem rerum facilis
|
||||
1785 regular_text: est et expedita distinctio. Nam libero tempore, cum soluta nobis
|
||||
1852 regular_text: est eligendi optio cumque nihil impedit quo minus id quod maxime
|
||||
1919 regular_text: placeat facere possimus, omnis voluptas assumenda est, omnis dolor
|
||||
1988 regular_text: repellendus. Temporibus autem quibusdam et aut officiis debitis aut
|
||||
2058 regular_text: rerum necessitatibus saepe eveniet ut et voluptates repudiandae
|
||||
2124 regular_text: sint et molestiae non recusandae. Itaque earum rerum hic tenetur a
|
||||
2193 regular_text: sapiente delectus, ut aut reiciendis voluptatibus maiores alias
|
||||
2259 regular_text: consequatur aut perferendis doloribus asperiores repellat.
|
||||
2320 pointer_record: 2337
|
||||
2337 regular_text:
|
||||
2340 regular_text: Sed ut perspiciatis unde omnis iste natus error sit voluptatem
|
||||
2405 regular_text: accusantium doloremque laudantium, totam rem aperiam, eaque ipsa
|
||||
2472 regular_text: quae ab illo inventore veritatis et quasi architecto beatae vitae
|
||||
2540 regular_text: dicta sunt explicabo. Nemo enim ipsam voluptatem quia voluptas sit
|
||||
2609 regular_text: aspernatur aut odit aut fugit, sed quia consequuntur magni dolores
|
||||
2678 regular_text: eos qui ratione voluptatem sequi nesciunt. Neque porro quisquam
|
||||
2744 regular_text: est, qui dolorem ipsum quia dolor sit amet, consectetur, adipisci
|
||||
2812 regular_text: velit, sed quia non numquam eius modi tempora incidunt ut labore
|
||||
2879 regular_text: et dolore magnam aliquam quaerat voluptatem. Ut enim ad minima
|
||||
2944 regular_text: veniam, quis nostrum exercitationem ullam corporis suscipit laboriosam,
|
||||
3018 regular_text: nisi ut aliquid ex ea commodi consequatur? Quis autem vel eum iure
|
||||
3087 regular_text: reprehenderit qui in ea voluptate velit esse quam nihil molestiae
|
||||
3155 regular_text: consequatur, vel illum qui dolorem eum fugiat quo voluptas nulla
|
||||
3222 regular_text: pariatur?
|
||||
3234 regular_text:
|
||||
3237 regular_text: At vero eos et accusamus et iusto odio dignissimos ducimus qui
|
||||
3302 regular_text: blanditiis praesentium voluptatum deleniti atque corrupti quos
|
||||
3367 regular_text: dolores et quas molestias excepturi sint occaecati cupiditate non
|
||||
3435 regular_text: provident, similique sunt in culpa qui officia deserunt mollitia
|
||||
3502 regular_text: animi, id est laborum et dolorum fuga. Et harum quidem rerum facilis
|
||||
3573 regular_text: est et expedita distinctio. Nam libero tempore, cum soluta nobis
|
||||
3640 regular_text: est eligendi optio cumque nihil impedit quo minus id quod maxime
|
||||
3707 regular_text: placeat facere possimus, omnis voluptas assumenda est, omnis dolor
|
||||
3776 regular_text: repellendus. Temporibus autem quibusdam et aut officiis debitis aut
|
||||
3846 regular_text: rerum necessitatibus saepe eveniet ut et voluptates repudiandae
|
||||
3912 regular_text: sint et molestiae non recusandae. Itaque earum rerum hic tenetur a
|
||||
3981 regular_text: sapiente delectus, ut aut reiciendis voluptatibus maiores alias
|
||||
4047 regular_text: consequatur aut perferendis doloribus asperiores repellat.
|
||||
4108 pointer_record: 510
|
||||
510 *** HEADER EXTRACTED test-queue-file10.tmp ***
|
||||
512 original_recipient: you@porcupine.org
|
||||
531 recipient: you@porcupine.org
|
||||
550 *** MESSAGE FILE END test-queue-file10.tmp ***
|
||||
0 message_size: 332 199 1 0 332
|
||||
81 message_arrival_time: Sat Jan 20 20:53:54 2007
|
||||
100 create_time: Sat Jan 20 20:53:59 2007
|
||||
124 named_attribute: rewrite_context=local
|
||||
147 sender_fullname: Wietse Venema
|
||||
162 sender: me@porcupine.org
|
||||
180 pointer_record: 0
|
||||
197 *** MESSAGE CONTENTS test-queue-file10.tmp ***
|
||||
199 regular_text: Received: by hades.porcupine.org (Postfix, from userid 1001)
|
||||
261 regular_text: id B85F1290407; Sat, 20 Jan 2007 20:53:59 -0500 (EST)
|
||||
317 regular_text: From: me@porcupine.org
|
||||
341 regular_text: To: you@porcupine.org
|
||||
364 regular_text: Message-Id: <20060725192735.5EC2D29013F@hades.porcupine.org>
|
||||
426 regular_text: Date: Tue, 25 Jul 2006 15:27:19 -0400 (EDT)
|
||||
471 regular_text: Subject: hey!
|
||||
486 padding: 0
|
||||
489 pointer_record: 506
|
||||
506 regular_text:
|
||||
508 pointer_record: 573
|
||||
573 regular_text: Sed ut perspiciatis unde omnis iste natus error sit voluptatem
|
||||
638 regular_text: accusantium doloremque laudantium, totam rem aperiam, eaque ipsa
|
||||
705 regular_text: quae ab illo inventore veritatis et quasi architecto beatae vitae
|
||||
773 regular_text: dicta sunt explicabo. Nemo enim ipsam voluptatem quia voluptas sit
|
||||
842 regular_text: aspernatur aut odit aut fugit, sed quia consequuntur magni dolores
|
||||
911 regular_text: eos qui ratione voluptatem sequi nesciunt. Neque porro quisquam
|
||||
977 regular_text: est, qui dolorem ipsum quia dolor sit amet, consectetur, adipisci
|
||||
1045 regular_text: velit, sed quia non numquam eius modi tempora incidunt ut labore
|
||||
1112 regular_text: et dolore magnam aliquam quaerat voluptatem. Ut enim ad minima
|
||||
1177 regular_text: veniam, quis nostrum exercitationem ullam corporis suscipit laboriosam,
|
||||
1251 regular_text: nisi ut aliquid ex ea commodi consequatur? Quis autem vel eum iure
|
||||
1320 regular_text: reprehenderit qui in ea voluptate velit esse quam nihil molestiae
|
||||
1388 regular_text: consequatur, vel illum qui dolorem eum fugiat quo voluptas nulla
|
||||
1455 regular_text: pariatur?
|
||||
1467 regular_text:
|
||||
1470 regular_text: At vero eos et accusamus et iusto odio dignissimos ducimus qui
|
||||
1535 regular_text: blanditiis praesentium voluptatum deleniti atque corrupti quos
|
||||
1600 regular_text: dolores et quas molestias excepturi sint occaecati cupiditate non
|
||||
1668 regular_text: provident, similique sunt in culpa qui officia deserunt mollitia
|
||||
1735 regular_text: animi, id est laborum et dolorum fuga. Et harum quidem rerum facilis
|
||||
1806 regular_text: est et expedita distinctio. Nam libero tempore, cum soluta nobis
|
||||
1873 regular_text: est eligendi optio cumque nihil impedit quo minus id quod maxime
|
||||
1940 regular_text: placeat facere possimus, omnis voluptas assumenda est, omnis dolor
|
||||
2009 regular_text: repellendus. Temporibus autem quibusdam et aut officiis debitis aut
|
||||
2079 regular_text: rerum necessitatibus saepe eveniet ut et voluptates repudiandae
|
||||
2145 regular_text: sint et molestiae non recusandae. Itaque earum rerum hic tenetur a
|
||||
2214 regular_text: sapiente delectus, ut aut reiciendis voluptatibus maiores alias
|
||||
2280 regular_text: consequatur aut perferendis doloribus asperiores repellat.
|
||||
2341 pointer_record: 2358
|
||||
2358 regular_text:
|
||||
2361 regular_text: Sed ut perspiciatis unde omnis iste natus error sit voluptatem
|
||||
2426 regular_text: accusantium doloremque laudantium, totam rem aperiam, eaque ipsa
|
||||
2493 regular_text: quae ab illo inventore veritatis et quasi architecto beatae vitae
|
||||
2561 regular_text: dicta sunt explicabo. Nemo enim ipsam voluptatem quia voluptas sit
|
||||
2630 regular_text: aspernatur aut odit aut fugit, sed quia consequuntur magni dolores
|
||||
2699 regular_text: eos qui ratione voluptatem sequi nesciunt. Neque porro quisquam
|
||||
2765 regular_text: est, qui dolorem ipsum quia dolor sit amet, consectetur, adipisci
|
||||
2833 regular_text: velit, sed quia non numquam eius modi tempora incidunt ut labore
|
||||
2900 regular_text: et dolore magnam aliquam quaerat voluptatem. Ut enim ad minima
|
||||
2965 regular_text: veniam, quis nostrum exercitationem ullam corporis suscipit laboriosam,
|
||||
3039 regular_text: nisi ut aliquid ex ea commodi consequatur? Quis autem vel eum iure
|
||||
3108 regular_text: reprehenderit qui in ea voluptate velit esse quam nihil molestiae
|
||||
3176 regular_text: consequatur, vel illum qui dolorem eum fugiat quo voluptas nulla
|
||||
3243 regular_text: pariatur?
|
||||
3255 regular_text:
|
||||
3258 regular_text: At vero eos et accusamus et iusto odio dignissimos ducimus qui
|
||||
3323 regular_text: blanditiis praesentium voluptatum deleniti atque corrupti quos
|
||||
3388 regular_text: dolores et quas molestias excepturi sint occaecati cupiditate non
|
||||
3456 regular_text: provident, similique sunt in culpa qui officia deserunt mollitia
|
||||
3523 regular_text: animi, id est laborum et dolorum fuga. Et harum quidem rerum facilis
|
||||
3594 regular_text: est et expedita distinctio. Nam libero tempore, cum soluta nobis
|
||||
3661 regular_text: est eligendi optio cumque nihil impedit quo minus id quod maxime
|
||||
3728 regular_text: placeat facere possimus, omnis voluptas assumenda est, omnis dolor
|
||||
3797 regular_text: repellendus. Temporibus autem quibusdam et aut officiis debitis aut
|
||||
3867 regular_text: rerum necessitatibus saepe eveniet ut et voluptates repudiandae
|
||||
3933 regular_text: sint et molestiae non recusandae. Itaque earum rerum hic tenetur a
|
||||
4002 regular_text: sapiente delectus, ut aut reiciendis voluptatibus maiores alias
|
||||
4068 regular_text: consequatur aut perferendis doloribus asperiores repellat.
|
||||
4129 pointer_record: 531
|
||||
531 *** HEADER EXTRACTED test-queue-file10.tmp ***
|
||||
533 original_recipient: you@porcupine.org
|
||||
552 recipient: you@porcupine.org
|
||||
571 *** MESSAGE FILE END test-queue-file10.tmp ***
|
||||
|
@ -1,52 +1,53 @@
|
||||
*** ENVELOPE RECORDS test-queue-file10.tmp ***
|
||||
0 message_size: 329 181 1 0
|
||||
65 message_arrival_time: Tue Jul 25 15:37:06 2006
|
||||
82 create_time: Tue Jul 25 15:37:06 2006
|
||||
106 named_attribute: rewrite_context=local
|
||||
129 sender_fullname: Wietse Venema
|
||||
144 sender: me@porcupine.org
|
||||
162 pointer_record: 0
|
||||
179 *** MESSAGE CONTENTS test-queue-file10.tmp ***
|
||||
181 regular_text: Received: by bristle.watson.ibm.com (Postfix, from userid 0)
|
||||
243 regular_text: id 034B229013F; Tue, 25 Jul 2006 15:37:06 -0400 (EDT)
|
||||
299 regular_text: From: me@porcupine.org
|
||||
323 regular_text: To: you@porcupine.org
|
||||
346 regular_text: Message-Id: <20060725192735.5EC2D29013F@hades.porcupine.org>
|
||||
408 regular_text: Date: Tue, 25 Jul 2006 15:27:19 -0400 (EDT)
|
||||
453 regular_text: Subject: hey!
|
||||
468 pointer_record: 485
|
||||
485 regular_text:
|
||||
487 pointer_record: 552
|
||||
552 regular_text: Sed ut perspiciatis unde omnis iste natus error sit voluptatem
|
||||
617 regular_text: accusantium doloremque laudantium, totam rem aperiam, eaque ipsa
|
||||
684 regular_text: quae ab illo inventore veritatis et quasi architecto beatae vitae
|
||||
752 regular_text: dicta sunt explicabo. Nemo enim ipsam voluptatem quia voluptas sit
|
||||
821 regular_text: aspernatur aut odit aut fugit, sed quia consequuntur magni dolores
|
||||
890 regular_text: eos qui ratione voluptatem sequi nesciunt. Neque porro quisquam
|
||||
956 regular_text: est, qui dolorem ipsum quia dolor sit amet, consectetur, adipisci
|
||||
1024 regular_text: velit, sed quia non numquam eius modi tempora incidunt ut labore
|
||||
1091 regular_text: et dolore magnam aliquam quaerat voluptatem. Ut enim ad minima
|
||||
1156 regular_text: veniam, quis nostrum exercitationem ullam corporis suscipit laboriosam,
|
||||
1230 regular_text: nisi ut aliquid ex ea commodi consequatur? Quis autem vel eum iure
|
||||
1299 regular_text: reprehenderit qui in ea voluptate velit esse quam nihil molestiae
|
||||
1367 regular_text: consequatur, vel illum qui dolorem eum fugiat quo voluptas nulla
|
||||
1434 regular_text: pariatur?
|
||||
1446 regular_text:
|
||||
1449 regular_text: At vero eos et accusamus et iusto odio dignissimos ducimus qui
|
||||
1514 regular_text: blanditiis praesentium voluptatum deleniti atque corrupti quos
|
||||
1579 regular_text: dolores et quas molestias excepturi sint occaecati cupiditate non
|
||||
1647 regular_text: provident, similique sunt in culpa qui officia deserunt mollitia
|
||||
1714 regular_text: animi, id est laborum et dolorum fuga. Et harum quidem rerum facilis
|
||||
1785 regular_text: est et expedita distinctio. Nam libero tempore, cum soluta nobis
|
||||
1852 regular_text: est eligendi optio cumque nihil impedit quo minus id quod maxime
|
||||
1919 regular_text: placeat facere possimus, omnis voluptas assumenda est, omnis dolor
|
||||
1988 regular_text: repellendus. Temporibus autem quibusdam et aut officiis debitis aut
|
||||
2058 regular_text: rerum necessitatibus saepe eveniet ut et voluptates repudiandae
|
||||
2124 regular_text: sint et molestiae non recusandae. Itaque earum rerum hic tenetur a
|
||||
2193 regular_text: sapiente delectus, ut aut reiciendis voluptatibus maiores alias
|
||||
2259 regular_text: consequatur aut perferendis doloribus asperiores repellat.
|
||||
2320 pointer_record: 510
|
||||
510 *** HEADER EXTRACTED test-queue-file10.tmp ***
|
||||
512 original_recipient: you@porcupine.org
|
||||
531 recipient: you@porcupine.org
|
||||
550 *** MESSAGE FILE END test-queue-file10.tmp ***
|
||||
0 message_size: 332 199 1 0 332
|
||||
81 message_arrival_time: Sat Jan 20 20:53:54 2007
|
||||
100 create_time: Sat Jan 20 20:53:59 2007
|
||||
124 named_attribute: rewrite_context=local
|
||||
147 sender_fullname: Wietse Venema
|
||||
162 sender: me@porcupine.org
|
||||
180 pointer_record: 0
|
||||
197 *** MESSAGE CONTENTS test-queue-file10.tmp ***
|
||||
199 regular_text: Received: by hades.porcupine.org (Postfix, from userid 1001)
|
||||
261 regular_text: id B85F1290407; Sat, 20 Jan 2007 20:53:59 -0500 (EST)
|
||||
317 regular_text: From: me@porcupine.org
|
||||
341 regular_text: To: you@porcupine.org
|
||||
364 regular_text: Message-Id: <20060725192735.5EC2D29013F@hades.porcupine.org>
|
||||
426 regular_text: Date: Tue, 25 Jul 2006 15:27:19 -0400 (EDT)
|
||||
471 regular_text: Subject: hey!
|
||||
486 padding: 0
|
||||
489 pointer_record: 506
|
||||
506 regular_text:
|
||||
508 pointer_record: 573
|
||||
573 regular_text: Sed ut perspiciatis unde omnis iste natus error sit voluptatem
|
||||
638 regular_text: accusantium doloremque laudantium, totam rem aperiam, eaque ipsa
|
||||
705 regular_text: quae ab illo inventore veritatis et quasi architecto beatae vitae
|
||||
773 regular_text: dicta sunt explicabo. Nemo enim ipsam voluptatem quia voluptas sit
|
||||
842 regular_text: aspernatur aut odit aut fugit, sed quia consequuntur magni dolores
|
||||
911 regular_text: eos qui ratione voluptatem sequi nesciunt. Neque porro quisquam
|
||||
977 regular_text: est, qui dolorem ipsum quia dolor sit amet, consectetur, adipisci
|
||||
1045 regular_text: velit, sed quia non numquam eius modi tempora incidunt ut labore
|
||||
1112 regular_text: et dolore magnam aliquam quaerat voluptatem. Ut enim ad minima
|
||||
1177 regular_text: veniam, quis nostrum exercitationem ullam corporis suscipit laboriosam,
|
||||
1251 regular_text: nisi ut aliquid ex ea commodi consequatur? Quis autem vel eum iure
|
||||
1320 regular_text: reprehenderit qui in ea voluptate velit esse quam nihil molestiae
|
||||
1388 regular_text: consequatur, vel illum qui dolorem eum fugiat quo voluptas nulla
|
||||
1455 regular_text: pariatur?
|
||||
1467 regular_text:
|
||||
1470 regular_text: At vero eos et accusamus et iusto odio dignissimos ducimus qui
|
||||
1535 regular_text: blanditiis praesentium voluptatum deleniti atque corrupti quos
|
||||
1600 regular_text: dolores et quas molestias excepturi sint occaecati cupiditate non
|
||||
1668 regular_text: provident, similique sunt in culpa qui officia deserunt mollitia
|
||||
1735 regular_text: animi, id est laborum et dolorum fuga. Et harum quidem rerum facilis
|
||||
1806 regular_text: est et expedita distinctio. Nam libero tempore, cum soluta nobis
|
||||
1873 regular_text: est eligendi optio cumque nihil impedit quo minus id quod maxime
|
||||
1940 regular_text: placeat facere possimus, omnis voluptas assumenda est, omnis dolor
|
||||
2009 regular_text: repellendus. Temporibus autem quibusdam et aut officiis debitis aut
|
||||
2079 regular_text: rerum necessitatibus saepe eveniet ut et voluptates repudiandae
|
||||
2145 regular_text: sint et molestiae non recusandae. Itaque earum rerum hic tenetur a
|
||||
2214 regular_text: sapiente delectus, ut aut reiciendis voluptatibus maiores alias
|
||||
2280 regular_text: consequatur aut perferendis doloribus asperiores repellat.
|
||||
2341 pointer_record: 531
|
||||
531 *** HEADER EXTRACTED test-queue-file10.tmp ***
|
||||
533 original_recipient: you@porcupine.org
|
||||
552 recipient: you@porcupine.org
|
||||
571 *** MESSAGE FILE END test-queue-file10.tmp ***
|
||||
|
@ -1,86 +1,89 @@
|
||||
*** ENVELOPE RECORDS test-queue-file10.tmp ***
|
||||
0 message_size: 329 181 1 0
|
||||
65 message_arrival_time: Tue Jul 25 15:37:06 2006
|
||||
82 create_time: Tue Jul 25 15:37:06 2006
|
||||
106 named_attribute: rewrite_context=local
|
||||
129 sender_fullname: Wietse Venema
|
||||
144 sender: me@porcupine.org
|
||||
162 pointer_record: 0
|
||||
179 *** MESSAGE CONTENTS test-queue-file10.tmp ***
|
||||
181 regular_text: Received: by bristle.watson.ibm.com (Postfix, from userid 0)
|
||||
243 regular_text: id 034B229013F; Tue, 25 Jul 2006 15:37:06 -0400 (EDT)
|
||||
299 regular_text: From: me@porcupine.org
|
||||
323 regular_text: To: you@porcupine.org
|
||||
346 regular_text: Message-Id: <20060725192735.5EC2D29013F@hades.porcupine.org>
|
||||
408 regular_text: Date: Tue, 25 Jul 2006 15:27:19 -0400 (EDT)
|
||||
453 regular_text: Subject: hey!
|
||||
468 pointer_record: 552
|
||||
552 regular_text: foo1: foobar
|
||||
566 pointer_record: 2368
|
||||
2368 regular_text: foo2: foobar
|
||||
2382 pointer_record: 485
|
||||
485 regular_text:
|
||||
487 pointer_record: 583
|
||||
583 regular_text: Sed ut perspiciatis unde omnis iste natus error sit voluptatem
|
||||
648 regular_text: accusantium doloremque laudantium, totam rem aperiam, eaque ipsa
|
||||
715 regular_text: quae ab illo inventore veritatis et quasi architecto beatae vitae
|
||||
783 regular_text: dicta sunt explicabo. Nemo enim ipsam voluptatem quia voluptas sit
|
||||
852 regular_text: aspernatur aut odit aut fugit, sed quia consequuntur magni dolores
|
||||
921 regular_text: eos qui ratione voluptatem sequi nesciunt. Neque porro quisquam
|
||||
987 regular_text: est, qui dolorem ipsum quia dolor sit amet, consectetur, adipisci
|
||||
1055 regular_text: velit, sed quia non numquam eius modi tempora incidunt ut labore
|
||||
1122 regular_text: et dolore magnam aliquam quaerat voluptatem. Ut enim ad minima
|
||||
1187 regular_text: veniam, quis nostrum exercitationem ullam corporis suscipit laboriosam,
|
||||
1261 regular_text: nisi ut aliquid ex ea commodi consequatur? Quis autem vel eum iure
|
||||
1330 regular_text: reprehenderit qui in ea voluptate velit esse quam nihil molestiae
|
||||
1398 regular_text: consequatur, vel illum qui dolorem eum fugiat quo voluptas nulla
|
||||
1465 regular_text: pariatur?
|
||||
1477 regular_text:
|
||||
1480 regular_text: At vero eos et accusamus et iusto odio dignissimos ducimus qui
|
||||
1545 regular_text: blanditiis praesentium voluptatum deleniti atque corrupti quos
|
||||
1610 regular_text: dolores et quas molestias excepturi sint occaecati cupiditate non
|
||||
1678 regular_text: provident, similique sunt in culpa qui officia deserunt mollitia
|
||||
1745 regular_text: animi, id est laborum et dolorum fuga. Et harum quidem rerum facilis
|
||||
1816 regular_text: est et expedita distinctio. Nam libero tempore, cum soluta nobis
|
||||
1883 regular_text: est eligendi optio cumque nihil impedit quo minus id quod maxime
|
||||
1950 regular_text: placeat facere possimus, omnis voluptas assumenda est, omnis dolor
|
||||
2019 regular_text: repellendus. Temporibus autem quibusdam et aut officiis debitis aut
|
||||
2089 regular_text: rerum necessitatibus saepe eveniet ut et voluptates repudiandae
|
||||
2155 regular_text: sint et molestiae non recusandae. Itaque earum rerum hic tenetur a
|
||||
2224 regular_text: sapiente delectus, ut aut reiciendis voluptatibus maiores alias
|
||||
2290 regular_text: consequatur aut perferendis doloribus asperiores repellat.
|
||||
2351 pointer_record: 2399
|
||||
2399 regular_text:
|
||||
2402 regular_text: Sed ut perspiciatis unde omnis iste natus error sit voluptatem
|
||||
2467 regular_text: accusantium doloremque laudantium, totam rem aperiam, eaque ipsa
|
||||
2534 regular_text: quae ab illo inventore veritatis et quasi architecto beatae vitae
|
||||
2602 regular_text: dicta sunt explicabo. Nemo enim ipsam voluptatem quia voluptas sit
|
||||
2671 regular_text: aspernatur aut odit aut fugit, sed quia consequuntur magni dolores
|
||||
2740 regular_text: eos qui ratione voluptatem sequi nesciunt. Neque porro quisquam
|
||||
2806 regular_text: est, qui dolorem ipsum quia dolor sit amet, consectetur, adipisci
|
||||
2874 regular_text: velit, sed quia non numquam eius modi tempora incidunt ut labore
|
||||
2941 regular_text: et dolore magnam aliquam quaerat voluptatem. Ut enim ad minima
|
||||
3006 regular_text: veniam, quis nostrum exercitationem ullam corporis suscipit laboriosam,
|
||||
3080 regular_text: nisi ut aliquid ex ea commodi consequatur? Quis autem vel eum iure
|
||||
3149 regular_text: reprehenderit qui in ea voluptate velit esse quam nihil molestiae
|
||||
3217 regular_text: consequatur, vel illum qui dolorem eum fugiat quo voluptas nulla
|
||||
3284 regular_text: pariatur?
|
||||
3296 regular_text:
|
||||
3299 regular_text: At vero eos et accusamus et iusto odio dignissimos ducimus qui
|
||||
3364 regular_text: blanditiis praesentium voluptatum deleniti atque corrupti quos
|
||||
3429 regular_text: dolores et quas molestias excepturi sint occaecati cupiditate non
|
||||
3497 regular_text: provident, similique sunt in culpa qui officia deserunt mollitia
|
||||
3564 regular_text: animi, id est laborum et dolorum fuga. Et harum quidem rerum facilis
|
||||
3635 regular_text: est et expedita distinctio. Nam libero tempore, cum soluta nobis
|
||||
3702 regular_text: est eligendi optio cumque nihil impedit quo minus id quod maxime
|
||||
3769 regular_text: placeat facere possimus, omnis voluptas assumenda est, omnis dolor
|
||||
3838 regular_text: repellendus. Temporibus autem quibusdam et aut officiis debitis aut
|
||||
3908 regular_text: rerum necessitatibus saepe eveniet ut et voluptates repudiandae
|
||||
3974 regular_text: sint et molestiae non recusandae. Itaque earum rerum hic tenetur a
|
||||
4043 regular_text: sapiente delectus, ut aut reiciendis voluptatibus maiores alias
|
||||
4109 regular_text: consequatur aut perferendis doloribus asperiores repellat.
|
||||
4170 pointer_record: 510
|
||||
510 *** HEADER EXTRACTED test-queue-file10.tmp ***
|
||||
512 original_recipient: you@porcupine.org
|
||||
531 recipient: you@porcupine.org
|
||||
550 *** MESSAGE FILE END test-queue-file10.tmp ***
|
||||
0 message_size: 332 199 1 0 332
|
||||
81 message_arrival_time: Sat Jan 20 20:53:54 2007
|
||||
100 create_time: Sat Jan 20 20:53:59 2007
|
||||
124 named_attribute: rewrite_context=local
|
||||
147 sender_fullname: Wietse Venema
|
||||
162 sender: me@porcupine.org
|
||||
180 pointer_record: 0
|
||||
197 *** MESSAGE CONTENTS test-queue-file10.tmp ***
|
||||
199 regular_text: Received: by hades.porcupine.org (Postfix, from userid 1001)
|
||||
261 regular_text: id B85F1290407; Sat, 20 Jan 2007 20:53:59 -0500 (EST)
|
||||
317 regular_text: From: me@porcupine.org
|
||||
341 regular_text: To: you@porcupine.org
|
||||
364 regular_text: Message-Id: <20060725192735.5EC2D29013F@hades.porcupine.org>
|
||||
426 regular_text: Date: Tue, 25 Jul 2006 15:27:19 -0400 (EDT)
|
||||
471 regular_text: Subject: hey!
|
||||
486 padding: 0
|
||||
489 pointer_record: 573
|
||||
573 regular_text: foo1: foobar
|
||||
587 padding: 0
|
||||
590 pointer_record: 2392
|
||||
2392 regular_text: foo2: foobar
|
||||
2406 padding: 0
|
||||
2409 pointer_record: 506
|
||||
506 regular_text:
|
||||
508 pointer_record: 607
|
||||
607 regular_text: Sed ut perspiciatis unde omnis iste natus error sit voluptatem
|
||||
672 regular_text: accusantium doloremque laudantium, totam rem aperiam, eaque ipsa
|
||||
739 regular_text: quae ab illo inventore veritatis et quasi architecto beatae vitae
|
||||
807 regular_text: dicta sunt explicabo. Nemo enim ipsam voluptatem quia voluptas sit
|
||||
876 regular_text: aspernatur aut odit aut fugit, sed quia consequuntur magni dolores
|
||||
945 regular_text: eos qui ratione voluptatem sequi nesciunt. Neque porro quisquam
|
||||
1011 regular_text: est, qui dolorem ipsum quia dolor sit amet, consectetur, adipisci
|
||||
1079 regular_text: velit, sed quia non numquam eius modi tempora incidunt ut labore
|
||||
1146 regular_text: et dolore magnam aliquam quaerat voluptatem. Ut enim ad minima
|
||||
1211 regular_text: veniam, quis nostrum exercitationem ullam corporis suscipit laboriosam,
|
||||
1285 regular_text: nisi ut aliquid ex ea commodi consequatur? Quis autem vel eum iure
|
||||
1354 regular_text: reprehenderit qui in ea voluptate velit esse quam nihil molestiae
|
||||
1422 regular_text: consequatur, vel illum qui dolorem eum fugiat quo voluptas nulla
|
||||
1489 regular_text: pariatur?
|
||||
1501 regular_text:
|
||||
1504 regular_text: At vero eos et accusamus et iusto odio dignissimos ducimus qui
|
||||
1569 regular_text: blanditiis praesentium voluptatum deleniti atque corrupti quos
|
||||
1634 regular_text: dolores et quas molestias excepturi sint occaecati cupiditate non
|
||||
1702 regular_text: provident, similique sunt in culpa qui officia deserunt mollitia
|
||||
1769 regular_text: animi, id est laborum et dolorum fuga. Et harum quidem rerum facilis
|
||||
1840 regular_text: est et expedita distinctio. Nam libero tempore, cum soluta nobis
|
||||
1907 regular_text: est eligendi optio cumque nihil impedit quo minus id quod maxime
|
||||
1974 regular_text: placeat facere possimus, omnis voluptas assumenda est, omnis dolor
|
||||
2043 regular_text: repellendus. Temporibus autem quibusdam et aut officiis debitis aut
|
||||
2113 regular_text: rerum necessitatibus saepe eveniet ut et voluptates repudiandae
|
||||
2179 regular_text: sint et molestiae non recusandae. Itaque earum rerum hic tenetur a
|
||||
2248 regular_text: sapiente delectus, ut aut reiciendis voluptatibus maiores alias
|
||||
2314 regular_text: consequatur aut perferendis doloribus asperiores repellat.
|
||||
2375 pointer_record: 2426
|
||||
2426 regular_text:
|
||||
2429 regular_text: Sed ut perspiciatis unde omnis iste natus error sit voluptatem
|
||||
2494 regular_text: accusantium doloremque laudantium, totam rem aperiam, eaque ipsa
|
||||
2561 regular_text: quae ab illo inventore veritatis et quasi architecto beatae vitae
|
||||
2629 regular_text: dicta sunt explicabo. Nemo enim ipsam voluptatem quia voluptas sit
|
||||
2698 regular_text: aspernatur aut odit aut fugit, sed quia consequuntur magni dolores
|
||||
2767 regular_text: eos qui ratione voluptatem sequi nesciunt. Neque porro quisquam
|
||||
2833 regular_text: est, qui dolorem ipsum quia dolor sit amet, consectetur, adipisci
|
||||
2901 regular_text: velit, sed quia non numquam eius modi tempora incidunt ut labore
|
||||
2968 regular_text: et dolore magnam aliquam quaerat voluptatem. Ut enim ad minima
|
||||
3033 regular_text: veniam, quis nostrum exercitationem ullam corporis suscipit laboriosam,
|
||||
3107 regular_text: nisi ut aliquid ex ea commodi consequatur? Quis autem vel eum iure
|
||||
3176 regular_text: reprehenderit qui in ea voluptate velit esse quam nihil molestiae
|
||||
3244 regular_text: consequatur, vel illum qui dolorem eum fugiat quo voluptas nulla
|
||||
3311 regular_text: pariatur?
|
||||
3323 regular_text:
|
||||
3326 regular_text: At vero eos et accusamus et iusto odio dignissimos ducimus qui
|
||||
3391 regular_text: blanditiis praesentium voluptatum deleniti atque corrupti quos
|
||||
3456 regular_text: dolores et quas molestias excepturi sint occaecati cupiditate non
|
||||
3524 regular_text: provident, similique sunt in culpa qui officia deserunt mollitia
|
||||
3591 regular_text: animi, id est laborum et dolorum fuga. Et harum quidem rerum facilis
|
||||
3662 regular_text: est et expedita distinctio. Nam libero tempore, cum soluta nobis
|
||||
3729 regular_text: est eligendi optio cumque nihil impedit quo minus id quod maxime
|
||||
3796 regular_text: placeat facere possimus, omnis voluptas assumenda est, omnis dolor
|
||||
3865 regular_text: repellendus. Temporibus autem quibusdam et aut officiis debitis aut
|
||||
3935 regular_text: rerum necessitatibus saepe eveniet ut et voluptates repudiandae
|
||||
4001 regular_text: sint et molestiae non recusandae. Itaque earum rerum hic tenetur a
|
||||
4070 regular_text: sapiente delectus, ut aut reiciendis voluptatibus maiores alias
|
||||
4136 regular_text: consequatur aut perferendis doloribus asperiores repellat.
|
||||
4197 pointer_record: 531
|
||||
531 *** HEADER EXTRACTED test-queue-file10.tmp ***
|
||||
533 original_recipient: you@porcupine.org
|
||||
552 recipient: you@porcupine.org
|
||||
571 *** MESSAGE FILE END test-queue-file10.tmp ***
|
||||
|
33
postfix/src/cleanup/cleanup_milter.ref12
Normal file
33
postfix/src/cleanup/cleanup_milter.ref12
Normal file
@ -0,0 +1,33 @@
|
||||
*** ENVELOPE RECORDS test-queue-file12.tmp ***
|
||||
0 message_size: 332 182 1 0 332
|
||||
81 message_arrival_time: Sun Jan 21 13:32:59 2007
|
||||
100 create_time: Sun Jan 21 13:33:08 2007
|
||||
124 named_attribute: rewrite_context=local
|
||||
147 sender_fullname: Wietse Venema
|
||||
162 sender: me@porcupine.org
|
||||
180 *** MESSAGE CONTENTS test-queue-file12.tmp ***
|
||||
182 regular_text: Received: by hades.porcupine.org (Postfix, from userid 1001)
|
||||
244 regular_text: id DE040290405; Sun, 21 Jan 2007 13:33:08 -0500 (EST)
|
||||
300 regular_text: From: me@porcupine.org
|
||||
324 regular_text: To: you@porcupine.org
|
||||
347 regular_text: Message-Id: <20060725192735.5EC2D29013F@hades.porcupine.org>
|
||||
409 regular_text: Date: Tue, 25 Jul 2006 15:27:19 -0400 (EDT)
|
||||
454 regular_text: Subject: hey!
|
||||
469 padding: 0
|
||||
472 pointer_record: 0
|
||||
489 regular_text:
|
||||
491 regular_text: text
|
||||
497 pointer_record: 0
|
||||
514 *** HEADER EXTRACTED test-queue-file12.tmp ***
|
||||
516 original_recipient: you@porcupine.org
|
||||
535 recipient: you@porcupine.org
|
||||
554 pointer_record: 573
|
||||
573 named_attribute: notify_flags=1
|
||||
589 original_recipient: me@porcupine.org
|
||||
607 canceled_recipient: me@porcupine.org
|
||||
625 pointer_record: 642
|
||||
642 named_attribute: notify_flags=1
|
||||
658 original_recipient: em@porcupine.org
|
||||
676 canceled_recipient: em@porcupine.org
|
||||
694 pointer_record: 571
|
||||
571 *** MESSAGE FILE END test-queue-file12.tmp ***
|
@ -1,32 +1,36 @@
|
||||
*** ENVELOPE RECORDS test-queue-file2.tmp ***
|
||||
0 message_size: 329 181 1 0
|
||||
65 message_arrival_time: Tue Jul 25 15:37:06 2006
|
||||
82 create_time: Tue Jul 25 15:37:06 2006
|
||||
106 named_attribute: rewrite_context=local
|
||||
129 sender_fullname: Wietse Venema
|
||||
144 sender: me@porcupine.org
|
||||
162 pointer_record: 0
|
||||
179 *** MESSAGE CONTENTS test-queue-file2.tmp ***
|
||||
181 regular_text: Received: by bristle.watson.ibm.com (Postfix, from userid 0)
|
||||
243 regular_text: id 034B229013F; Tue, 25 Jul 2006 15:37:06 -0400 (EDT)
|
||||
299 regular_text: From: me@porcupine.org
|
||||
323 regular_text: To: you@porcupine.org
|
||||
346 regular_text: Message-Id: <20060725192735.5EC2D29013F@hades.porcupine.org>
|
||||
408 regular_text: Date: Tue, 25 Jul 2006 15:27:19 -0400 (EDT)
|
||||
453 pointer_record: 552
|
||||
552 pointer_record: 584
|
||||
584 pointer_record: 616
|
||||
616 regular_text: Subject: hey!
|
||||
631 pointer_record: 648
|
||||
648 pointer_record: 678
|
||||
678 pointer_record: 708
|
||||
708 pointer_record: 738
|
||||
738 regular_text: foo: foobar
|
||||
751 pointer_record: 485
|
||||
485 regular_text:
|
||||
487 regular_text: text
|
||||
493 pointer_record: 0
|
||||
510 *** HEADER EXTRACTED test-queue-file2.tmp ***
|
||||
512 original_recipient: you@porcupine.org
|
||||
531 recipient: you@porcupine.org
|
||||
550 *** MESSAGE FILE END test-queue-file2.tmp ***
|
||||
0 message_size: 332 199 1 0 332
|
||||
81 message_arrival_time: Sat Jan 20 20:53:54 2007
|
||||
100 create_time: Sat Jan 20 20:53:59 2007
|
||||
124 named_attribute: rewrite_context=local
|
||||
147 sender_fullname: Wietse Venema
|
||||
162 sender: me@porcupine.org
|
||||
180 pointer_record: 0
|
||||
197 *** MESSAGE CONTENTS test-queue-file2.tmp ***
|
||||
199 regular_text: Received: by hades.porcupine.org (Postfix, from userid 1001)
|
||||
261 regular_text: id B85F1290407; Sat, 20 Jan 2007 20:53:59 -0500 (EST)
|
||||
317 regular_text: From: me@porcupine.org
|
||||
341 regular_text: To: you@porcupine.org
|
||||
364 regular_text: Message-Id: <20060725192735.5EC2D29013F@hades.porcupine.org>
|
||||
426 regular_text: Date: Tue, 25 Jul 2006 15:27:19 -0400 (EDT)
|
||||
471 pointer_record: 573
|
||||
573 pointer_record: 608
|
||||
608 pointer_record: 643
|
||||
643 regular_text: Subject: hey!
|
||||
658 padding: 0
|
||||
661 pointer_record: 489
|
||||
489 pointer_record: 678
|
||||
678 pointer_record: 712
|
||||
712 pointer_record: 746
|
||||
746 pointer_record: 780
|
||||
780 regular_text: foo: foobar
|
||||
793 padding: 0
|
||||
797 pointer_record: 695
|
||||
695 pointer_record: 506
|
||||
506 regular_text:
|
||||
508 regular_text: text
|
||||
514 pointer_record: 0
|
||||
531 *** HEADER EXTRACTED test-queue-file2.tmp ***
|
||||
533 original_recipient: you@porcupine.org
|
||||
552 recipient: you@porcupine.org
|
||||
571 *** MESSAGE FILE END test-queue-file2.tmp ***
|
||||
|
@ -1,50 +1,52 @@
|
||||
*** ENVELOPE RECORDS test-queue-file3.tmp ***
|
||||
0 message_size: 329 181 1 0
|
||||
65 message_arrival_time: Tue Jul 25 15:37:06 2006
|
||||
82 create_time: Tue Jul 25 15:37:06 2006
|
||||
106 named_attribute: rewrite_context=local
|
||||
129 sender_fullname: Wietse Venema
|
||||
144 sender: me@porcupine.org
|
||||
162 pointer_record: 552
|
||||
552 named_attribute: notify_flags=1
|
||||
568 original_recipient: me@porcupine.org
|
||||
586 canceled_recipient: me@porcupine.org
|
||||
604 pointer_record: 1383
|
||||
1383 named_attribute: notify_flags=1
|
||||
1399 original_recipient: em@porcupine.org
|
||||
1417 canceled_recipient: em@porcupine.org
|
||||
1435 pointer_record: 179
|
||||
179 *** MESSAGE CONTENTS test-queue-file3.tmp ***
|
||||
181 regular_text: Received: by bristle.watson.ibm.com (Postfix, from userid 0)
|
||||
243 regular_text: id 034B229013F; Tue, 25 Jul 2006 15:37:06 -0400 (EDT)
|
||||
299 pointer_record: 834
|
||||
834 pointer_record: 1301
|
||||
1301 pointer_record: 1342
|
||||
1342 pointer_record: 1452
|
||||
1452 pointer_record: 1706
|
||||
1706 pointer_record: 1747
|
||||
1747 regular_text: From: me@porcupine.org
|
||||
1771 pointer_record: 1493
|
||||
1493 pointer_record: 1788
|
||||
1788 pointer_record: 1828
|
||||
1828 regular_text: To: you@porcupine.org
|
||||
1851 pointer_record: 1533
|
||||
1533 pointer_record: 1868
|
||||
1868 pointer_record: 1947
|
||||
1947 regular_text: Message-Id: <20060725192735.5EC2D29013F@hades.porcupine.org>
|
||||
2009 pointer_record: 1612
|
||||
1612 pointer_record: 2026
|
||||
2026 pointer_record: 2088
|
||||
2088 regular_text: Date: Tue, 25 Jul 2006 15:27:19 -0400 (EDT)
|
||||
2133 pointer_record: 1674
|
||||
1674 pointer_record: 2150
|
||||
2150 pointer_record: 2182
|
||||
2182 regular_text: Subject: hey!
|
||||
2197 pointer_record: 485
|
||||
485 regular_text:
|
||||
487 regular_text: text
|
||||
493 pointer_record: 0
|
||||
510 *** HEADER EXTRACTED test-queue-file3.tmp ***
|
||||
512 original_recipient: you@porcupine.org
|
||||
531 recipient: you@porcupine.org
|
||||
550 *** MESSAGE FILE END test-queue-file3.tmp ***
|
||||
0 message_size: 332 199 1 0 332
|
||||
81 message_arrival_time: Sat Jan 20 20:53:54 2007
|
||||
100 create_time: Sat Jan 20 20:53:59 2007
|
||||
124 named_attribute: rewrite_context=local
|
||||
147 sender_fullname: Wietse Venema
|
||||
162 sender: me@porcupine.org
|
||||
180 pointer_record: 573
|
||||
573 named_attribute: notify_flags=1
|
||||
589 original_recipient: me@porcupine.org
|
||||
607 canceled_recipient: me@porcupine.org
|
||||
625 pointer_record: 1413
|
||||
1413 named_attribute: notify_flags=1
|
||||
1429 original_recipient: em@porcupine.org
|
||||
1447 canceled_recipient: em@porcupine.org
|
||||
1465 pointer_record: 197
|
||||
197 *** MESSAGE CONTENTS test-queue-file3.tmp ***
|
||||
199 regular_text: Received: by hades.porcupine.org (Postfix, from userid 1001)
|
||||
261 regular_text: id B85F1290407; Sat, 20 Jan 2007 20:53:59 -0500 (EST)
|
||||
317 pointer_record: 858
|
||||
858 pointer_record: 1331
|
||||
1331 pointer_record: 1372
|
||||
1372 pointer_record: 1482
|
||||
1482 pointer_record: 1739
|
||||
1739 pointer_record: 1780
|
||||
1780 regular_text: From: me@porcupine.org
|
||||
1804 pointer_record: 1523
|
||||
1523 pointer_record: 1821
|
||||
1821 pointer_record: 1861
|
||||
1861 regular_text: To: you@porcupine.org
|
||||
1884 pointer_record: 1563
|
||||
1563 pointer_record: 1901
|
||||
1901 pointer_record: 1980
|
||||
1980 regular_text: Message-Id: <20060725192735.5EC2D29013F@hades.porcupine.org>
|
||||
2042 pointer_record: 1642
|
||||
1642 pointer_record: 2059
|
||||
2059 pointer_record: 2121
|
||||
2121 regular_text: Date: Tue, 25 Jul 2006 15:27:19 -0400 (EDT)
|
||||
2166 pointer_record: 1704
|
||||
1704 pointer_record: 2183
|
||||
2183 pointer_record: 2218
|
||||
2218 regular_text: Subject: hey!
|
||||
2233 padding: 0
|
||||
2236 pointer_record: 489
|
||||
489 pointer_record: 0
|
||||
506 regular_text:
|
||||
508 regular_text: text
|
||||
514 pointer_record: 0
|
||||
531 *** HEADER EXTRACTED test-queue-file3.tmp ***
|
||||
533 original_recipient: you@porcupine.org
|
||||
552 recipient: you@porcupine.org
|
||||
571 *** MESSAGE FILE END test-queue-file3.tmp ***
|
||||
|
@ -1,55 +1,62 @@
|
||||
*** ENVELOPE RECORDS test-queue-file4.tmp ***
|
||||
0 message_size: 428 654 3 0
|
||||
65 message_arrival_time: Sat May 13 21:04:18 2006
|
||||
84 create_time: Sat May 13 21:04:27 2006
|
||||
108 named_attribute: rewrite_context=local
|
||||
131 sender: wietse@porcupine.org
|
||||
153 named_attribute: client_name=tail.porcupine.org
|
||||
185 named_attribute: client_address=IPv6:2001:240:587:0:2d0:b7ff:febe:ca9f
|
||||
240 named_attribute: message_origin=tail.porcupine.org[2001:240:587:0:2d0:b7ff:febe:ca9f]
|
||||
310 named_attribute: helo_name=tail.porcupine.org
|
||||
340 named_attribute: protocol_name=SMTP
|
||||
360 named_attribute: dsn_orig_rcpt=rfc822;wietse@porcupine.org
|
||||
403 original_recipient: wietse@porcupine.org
|
||||
425 recipient: wietse@porcupine.org
|
||||
447 named_attribute: dsn_orig_rcpt=rfc822;alias@tail.porcupine.org
|
||||
494 original_recipient: alias@tail.porcupine.org
|
||||
520 recipient: wietse@porcupine.org
|
||||
542 named_attribute: dsn_orig_rcpt=rfc822;alias@tail.porcupine.org
|
||||
589 original_recipient: alias@tail.porcupine.org
|
||||
615 recipient: root@porcupine.org
|
||||
635 pointer_record: 1103
|
||||
1103 named_attribute: notify_flags=1
|
||||
1119 original_recipient: 01
|
||||
1123 canceled_recipient: 01
|
||||
1127 pointer_record: 1144
|
||||
1144 named_attribute: notify_flags=1
|
||||
1160 original_recipient: 02
|
||||
1164 canceled_recipient: 02
|
||||
1168 pointer_record: 1185
|
||||
1185 named_attribute: notify_flags=1
|
||||
1201 original_recipient: 03
|
||||
1205 canceled_recipient: 03
|
||||
1209 pointer_record: 652
|
||||
652 *** MESSAGE CONTENTS test-queue-file4.tmp ***
|
||||
654 regular_text: Received: from tail.porcupine.org (tail.porcupine.org [IPv6:2001:240:587:0:2d0:b7ff:febe:ca9f])
|
||||
751 regular_text: by tail.porcupine.org (Postfix) with SMTP id E0F703D1E36;
|
||||
811 regular_text: Sat, 13 May 2006 21:04:18 -0400 (EDT)
|
||||
851 regular_text: X: 1
|
||||
857 regular_text: 2
|
||||
861 regular_text: 3
|
||||
865 regular_text: 4
|
||||
869 regular_text: 5
|
||||
873 regular_text: 6
|
||||
877 regular_text: 7
|
||||
881 regular_text: Y: 1234567
|
||||
893 regular_text: Message-Id: <20060514010427.E0F703D1E36@tail.porcupine.org>
|
||||
954 regular_text: Date: Sat, 13 May 2006 21:04:18 -0400 (EDT)
|
||||
999 regular_text: From: wietse@porcupine.org
|
||||
1027 regular_text: To: undisclosed-recipients:;
|
||||
1057 pointer_record: 0
|
||||
1074 regular_text:
|
||||
1076 regular_text: text
|
||||
1082 *** HEADER EXTRACTED test-queue-file4.tmp ***
|
||||
1084 pointer_record: 0
|
||||
1101 *** MESSAGE FILE END test-queue-file4.tmp ***
|
||||
0 message_size: 441 813 3 0 441
|
||||
81 message_arrival_time: Sat Jan 20 19:52:41 2007
|
||||
100 create_time: Sat Jan 20 19:52:47 2007
|
||||
124 named_attribute: rewrite_context=local
|
||||
147 sender: wietse@porcupine.org
|
||||
169 named_attribute: log_client_name=hades.porcupine.org
|
||||
206 named_attribute: log_client_address=168.100.189.10
|
||||
241 named_attribute: log_message_origin=hades.porcupine.org[168.100.189.10]
|
||||
297 named_attribute: log_helo_name=hades.porcupine.org
|
||||
332 named_attribute: log_protocol_name=SMTP
|
||||
356 named_attribute: client_name=hades.porcupine.org
|
||||
389 named_attribute: reverse_client_name=hades.porcupine.org
|
||||
430 named_attribute: client_address=168.100.189.10
|
||||
461 named_attribute: helo_name=hades.porcupine.org
|
||||
492 named_attribute: client_address_type=2
|
||||
515 named_attribute: dsn_orig_rcpt=rfc822;wietse@porcupine.org
|
||||
558 original_recipient: wietse@porcupine.org
|
||||
580 recipient: wietse@porcupine.org
|
||||
602 named_attribute: dsn_orig_rcpt=rfc822;alias@hades.porcupine.org
|
||||
650 original_recipient: alias@hades.porcupine.org
|
||||
677 recipient: wietse@porcupine.org
|
||||
699 named_attribute: dsn_orig_rcpt=rfc822;alias@hades.porcupine.org
|
||||
747 original_recipient: alias@hades.porcupine.org
|
||||
774 recipient: root@porcupine.org
|
||||
794 pointer_record: 1258
|
||||
1258 named_attribute: notify_flags=1
|
||||
1274 original_recipient: 01
|
||||
1278 canceled_recipient: 01
|
||||
1282 pointer_record: 1299
|
||||
1299 named_attribute: notify_flags=1
|
||||
1315 original_recipient: 02
|
||||
1319 canceled_recipient: 02
|
||||
1323 pointer_record: 1340
|
||||
1340 named_attribute: notify_flags=1
|
||||
1356 original_recipient: 03
|
||||
1360 canceled_recipient: 03
|
||||
1364 pointer_record: 811
|
||||
811 *** MESSAGE CONTENTS test-queue-file4.tmp ***
|
||||
813 regular_text: Received: from hades.porcupine.org (hades.porcupine.org [168.100.189.10])
|
||||
888 regular_text: by hades.porcupine.org (Postfix) with SMTP id 38132290405;
|
||||
949 regular_text: Sat, 20 Jan 2007 19:52:41 -0500 (EST)
|
||||
989 regular_text: X: 1
|
||||
995 padding: 0
|
||||
1006 regular_text: 2
|
||||
1010 regular_text: 3
|
||||
1014 regular_text: 4
|
||||
1018 regular_text: 5
|
||||
1022 regular_text: 6
|
||||
1026 regular_text: 7
|
||||
1030 regular_text: Y: 1234567
|
||||
1042 padding: 0
|
||||
1047 regular_text: Message-Id: <20070121005247.38132290405@hades.porcupine.org>
|
||||
1109 regular_text: Date: Sat, 20 Jan 2007 19:52:41 -0500 (EST)
|
||||
1154 regular_text: From: wietse@porcupine.org
|
||||
1182 regular_text: To: undisclosed-recipients:;
|
||||
1212 pointer_record: 0
|
||||
1229 regular_text:
|
||||
1231 regular_text: text
|
||||
1237 pointer_record: 0
|
||||
1254 *** HEADER EXTRACTED test-queue-file4.tmp ***
|
||||
1256 *** MESSAGE FILE END test-queue-file4.tmp ***
|
||||
|
@ -1,29 +1,29 @@
|
||||
*** ENVELOPE RECORDS test-queue-file5.tmp ***
|
||||
0 message_size: 370 221 1 0
|
||||
65 message_arrival_time: Fri Jul 28 15:14:59 2006
|
||||
84 create_time: Fri Jul 28 15:15:05 2006
|
||||
108 named_attribute: rewrite_context=local
|
||||
131 sender_fullname: Wietse Venema
|
||||
146 sender: me@porcupine.org
|
||||
164 original_recipient: you@porcupine.org
|
||||
183 recipient: you@porcupine.org
|
||||
202 pointer_record: 0
|
||||
219 *** MESSAGE CONTENTS test-queue-file5.tmp ***
|
||||
221 regular_text: Received: by bristle.watson.ibm.com (Postfix, from userid 1001)
|
||||
286 regular_text: id 78849290593; Fri, 28 Jul 2006 15:15:05 -0400 (EDT)
|
||||
342 pointer_record: 750
|
||||
750 regular_text: Subject: hya
|
||||
764 pointer_record: 705
|
||||
705 regular_text: X: whatevershebringswesing
|
||||
733 pointer_record: 623
|
||||
623 regular_text: Message-Id: <20060728191505.78849290593@bristle.watson.ibm.com>
|
||||
688 pointer_record: 434
|
||||
434 regular_text: Date: Fri, 28 Jul 2006 15:14:59 -0400 (EDT)
|
||||
479 regular_text: From: me@porcupine.org (Wietse Venema)
|
||||
519 regular_text: To: undisclosed-recipients:;
|
||||
549 pointer_record: 0
|
||||
566 regular_text:
|
||||
568 regular_text: text
|
||||
574 pointer_record: 0
|
||||
591 *** HEADER EXTRACTED test-queue-file5.tmp ***
|
||||
593 *** MESSAGE FILE END test-queue-file5.tmp ***
|
||||
0 message_size: 376 237 1 0 376
|
||||
81 message_arrival_time: Sun Jan 21 11:26:46 2007
|
||||
100 create_time: Sun Jan 21 11:26:59 2007
|
||||
124 named_attribute: rewrite_context=local
|
||||
147 sender_fullname: Wietse Venema
|
||||
162 sender: me@porcupine.org
|
||||
180 original_recipient: you@porcupine.org
|
||||
199 recipient: you@porcupine.org
|
||||
218 pointer_record: 0
|
||||
235 *** MESSAGE CONTENTS test-queue-file5.tmp ***
|
||||
237 regular_text: Received: by hades.porcupine.org (Postfix, from userid 0)
|
||||
296 regular_text: id 38FA9290404; Sun, 21 Jan 2007 11:26:59 -0500 (EST)
|
||||
352 pointer_record: 707
|
||||
707 regular_text: Subject: hya
|
||||
721 padding: 0
|
||||
724 pointer_record: 662
|
||||
662 regular_text: X: whatevershebringswesing
|
||||
690 pointer_record: 394
|
||||
394 regular_text: Message-Id: <20070121162659.38FA9290404@hades.porcupine.org>
|
||||
456 regular_text: Date: Sun, 21 Jan 2007 11:26:46 -0500 (EST)
|
||||
501 regular_text: From: me@porcupine.org (Wietse Venema)
|
||||
541 regular_text: To: undisclosed-recipients:;
|
||||
571 pointer_record: 0
|
||||
588 regular_text:
|
||||
590 regular_text: text
|
||||
596 pointer_record: 0
|
||||
613 *** HEADER EXTRACTED test-queue-file5.tmp ***
|
||||
615 *** MESSAGE FILE END test-queue-file5.tmp ***
|
||||
|
@ -1,27 +1,28 @@
|
||||
*** ENVELOPE RECORDS test-queue-file6.tmp ***
|
||||
0 message_size: 329 181 1 0
|
||||
65 message_arrival_time: Tue Jul 25 15:37:06 2006
|
||||
82 create_time: Tue Jul 25 15:37:06 2006
|
||||
106 named_attribute: rewrite_context=local
|
||||
129 sender_fullname: Wietse Venema
|
||||
144 sender: me@porcupine.org
|
||||
162 pointer_record: 0
|
||||
179 *** MESSAGE CONTENTS test-queue-file6.tmp ***
|
||||
181 pointer_record: 552
|
||||
552 regular_text: X-Virus-Scanned: hya
|
||||
574 regular_text: Received: by bristle.watson.ibm.com (Postfix, from userid 0)
|
||||
636 pointer_record: 243
|
||||
243 regular_text: id 034B229013F; Tue, 25 Jul 2006 15:37:06 -0400 (EDT)
|
||||
299 regular_text: From: me@porcupine.org
|
||||
323 regular_text: To: you@porcupine.org
|
||||
346 regular_text: Message-Id: <20060725192735.5EC2D29013F@hades.porcupine.org>
|
||||
408 regular_text: Date: Tue, 25 Jul 2006 15:27:19 -0400 (EDT)
|
||||
453 regular_text: Subject: hey!
|
||||
468 pointer_record: 0
|
||||
485 regular_text:
|
||||
487 regular_text: text
|
||||
493 pointer_record: 0
|
||||
510 *** HEADER EXTRACTED test-queue-file6.tmp ***
|
||||
512 original_recipient: you@porcupine.org
|
||||
531 recipient: you@porcupine.org
|
||||
550 *** MESSAGE FILE END test-queue-file6.tmp ***
|
||||
0 message_size: 332 199 1 0 332
|
||||
81 message_arrival_time: Sat Jan 20 20:53:54 2007
|
||||
100 create_time: Sat Jan 20 20:53:59 2007
|
||||
124 named_attribute: rewrite_context=local
|
||||
147 sender_fullname: Wietse Venema
|
||||
162 sender: me@porcupine.org
|
||||
180 pointer_record: 0
|
||||
197 *** MESSAGE CONTENTS test-queue-file6.tmp ***
|
||||
199 pointer_record: 573
|
||||
573 regular_text: X-Virus-Scanned: hya
|
||||
595 regular_text: Received: by hades.porcupine.org (Postfix, from userid 1001)
|
||||
657 pointer_record: 261
|
||||
261 regular_text: id B85F1290407; Sat, 20 Jan 2007 20:53:59 -0500 (EST)
|
||||
317 regular_text: From: me@porcupine.org
|
||||
341 regular_text: To: you@porcupine.org
|
||||
364 regular_text: Message-Id: <20060725192735.5EC2D29013F@hades.porcupine.org>
|
||||
426 regular_text: Date: Tue, 25 Jul 2006 15:27:19 -0400 (EDT)
|
||||
471 regular_text: Subject: hey!
|
||||
486 padding: 0
|
||||
489 pointer_record: 0
|
||||
506 regular_text:
|
||||
508 regular_text: text
|
||||
514 pointer_record: 0
|
||||
531 *** HEADER EXTRACTED test-queue-file6.tmp ***
|
||||
533 original_recipient: you@porcupine.org
|
||||
552 recipient: you@porcupine.org
|
||||
571 *** MESSAGE FILE END test-queue-file6.tmp ***
|
||||
|
@ -1,30 +1,31 @@
|
||||
*** ENVELOPE RECORDS test-queue-file6.tmp ***
|
||||
0 message_size: 329 181 1 0
|
||||
65 message_arrival_time: Tue Jul 25 15:37:06 2006
|
||||
82 create_time: Tue Jul 25 15:37:06 2006
|
||||
106 named_attribute: rewrite_context=local
|
||||
129 sender_fullname: Wietse Venema
|
||||
144 sender: me@porcupine.org
|
||||
162 pointer_record: 0
|
||||
179 *** MESSAGE CONTENTS test-queue-file6.tmp ***
|
||||
181 pointer_record: 552
|
||||
552 regular_text: X-Virus-Scanned: hya
|
||||
574 pointer_record: 653
|
||||
653 regular_text: Domainkey-Signature: hya
|
||||
679 regular_text: Received: by bristle.watson.ibm.com (Postfix, from userid 0)
|
||||
741 pointer_record: 636
|
||||
636 pointer_record: 243
|
||||
243 regular_text: id 034B229013F; Tue, 25 Jul 2006 15:37:06 -0400 (EDT)
|
||||
299 regular_text: From: me@porcupine.org
|
||||
323 regular_text: To: you@porcupine.org
|
||||
346 regular_text: Message-Id: <20060725192735.5EC2D29013F@hades.porcupine.org>
|
||||
408 regular_text: Date: Tue, 25 Jul 2006 15:27:19 -0400 (EDT)
|
||||
453 regular_text: Subject: hey!
|
||||
468 pointer_record: 0
|
||||
485 regular_text:
|
||||
487 regular_text: text
|
||||
493 pointer_record: 0
|
||||
510 *** HEADER EXTRACTED test-queue-file6.tmp ***
|
||||
512 original_recipient: you@porcupine.org
|
||||
531 recipient: you@porcupine.org
|
||||
550 *** MESSAGE FILE END test-queue-file6.tmp ***
|
||||
0 message_size: 332 199 1 0 332
|
||||
81 message_arrival_time: Sat Jan 20 20:53:54 2007
|
||||
100 create_time: Sat Jan 20 20:53:59 2007
|
||||
124 named_attribute: rewrite_context=local
|
||||
147 sender_fullname: Wietse Venema
|
||||
162 sender: me@porcupine.org
|
||||
180 pointer_record: 0
|
||||
197 *** MESSAGE CONTENTS test-queue-file6.tmp ***
|
||||
199 pointer_record: 573
|
||||
573 regular_text: X-Virus-Scanned: hya
|
||||
595 pointer_record: 674
|
||||
674 regular_text: Domainkey-Signature: hya
|
||||
700 regular_text: Received: by hades.porcupine.org (Postfix, from userid 1001)
|
||||
762 pointer_record: 657
|
||||
657 pointer_record: 261
|
||||
261 regular_text: id B85F1290407; Sat, 20 Jan 2007 20:53:59 -0500 (EST)
|
||||
317 regular_text: From: me@porcupine.org
|
||||
341 regular_text: To: you@porcupine.org
|
||||
364 regular_text: Message-Id: <20060725192735.5EC2D29013F@hades.porcupine.org>
|
||||
426 regular_text: Date: Tue, 25 Jul 2006 15:27:19 -0400 (EDT)
|
||||
471 regular_text: Subject: hey!
|
||||
486 padding: 0
|
||||
489 pointer_record: 0
|
||||
506 regular_text:
|
||||
508 regular_text: text
|
||||
514 pointer_record: 0
|
||||
531 *** HEADER EXTRACTED test-queue-file6.tmp ***
|
||||
533 original_recipient: you@porcupine.org
|
||||
552 recipient: you@porcupine.org
|
||||
571 *** MESSAGE FILE END test-queue-file6.tmp ***
|
||||
|
@ -1,32 +1,33 @@
|
||||
*** ENVELOPE RECORDS test-queue-file6.tmp ***
|
||||
0 message_size: 329 181 1 0
|
||||
65 message_arrival_time: Tue Jul 25 15:37:06 2006
|
||||
82 create_time: Tue Jul 25 15:37:06 2006
|
||||
106 named_attribute: rewrite_context=local
|
||||
129 sender_fullname: Wietse Venema
|
||||
144 sender: me@porcupine.org
|
||||
162 pointer_record: 0
|
||||
179 *** MESSAGE CONTENTS test-queue-file6.tmp ***
|
||||
181 pointer_record: 552
|
||||
552 regular_text: X-Virus-Scanned: hya
|
||||
574 pointer_record: 758
|
||||
758 regular_text: DKIM-Signature: hya
|
||||
779 pointer_record: 653
|
||||
653 regular_text: Domainkey-Signature: hya
|
||||
679 regular_text: Received: by bristle.watson.ibm.com (Postfix, from userid 0)
|
||||
741 pointer_record: 636
|
||||
636 pointer_record: 243
|
||||
243 regular_text: id 034B229013F; Tue, 25 Jul 2006 15:37:06 -0400 (EDT)
|
||||
299 regular_text: From: me@porcupine.org
|
||||
323 regular_text: To: you@porcupine.org
|
||||
346 regular_text: Message-Id: <20060725192735.5EC2D29013F@hades.porcupine.org>
|
||||
408 regular_text: Date: Tue, 25 Jul 2006 15:27:19 -0400 (EDT)
|
||||
453 regular_text: Subject: hey!
|
||||
468 pointer_record: 0
|
||||
485 regular_text:
|
||||
487 regular_text: text
|
||||
493 pointer_record: 0
|
||||
510 *** HEADER EXTRACTED test-queue-file6.tmp ***
|
||||
512 original_recipient: you@porcupine.org
|
||||
531 recipient: you@porcupine.org
|
||||
550 *** MESSAGE FILE END test-queue-file6.tmp ***
|
||||
0 message_size: 332 199 1 0 332
|
||||
81 message_arrival_time: Sat Jan 20 20:53:54 2007
|
||||
100 create_time: Sat Jan 20 20:53:59 2007
|
||||
124 named_attribute: rewrite_context=local
|
||||
147 sender_fullname: Wietse Venema
|
||||
162 sender: me@porcupine.org
|
||||
180 pointer_record: 0
|
||||
197 *** MESSAGE CONTENTS test-queue-file6.tmp ***
|
||||
199 pointer_record: 573
|
||||
573 regular_text: X-Virus-Scanned: hya
|
||||
595 pointer_record: 779
|
||||
779 regular_text: DKIM-Signature: hya
|
||||
800 pointer_record: 674
|
||||
674 regular_text: Domainkey-Signature: hya
|
||||
700 regular_text: Received: by hades.porcupine.org (Postfix, from userid 1001)
|
||||
762 pointer_record: 657
|
||||
657 pointer_record: 261
|
||||
261 regular_text: id B85F1290407; Sat, 20 Jan 2007 20:53:59 -0500 (EST)
|
||||
317 regular_text: From: me@porcupine.org
|
||||
341 regular_text: To: you@porcupine.org
|
||||
364 regular_text: Message-Id: <20060725192735.5EC2D29013F@hades.porcupine.org>
|
||||
426 regular_text: Date: Tue, 25 Jul 2006 15:27:19 -0400 (EDT)
|
||||
471 regular_text: Subject: hey!
|
||||
486 padding: 0
|
||||
489 pointer_record: 0
|
||||
506 regular_text:
|
||||
508 regular_text: text
|
||||
514 pointer_record: 0
|
||||
531 *** HEADER EXTRACTED test-queue-file6.tmp ***
|
||||
533 original_recipient: you@porcupine.org
|
||||
552 recipient: you@porcupine.org
|
||||
571 *** MESSAGE FILE END test-queue-file6.tmp ***
|
||||
|
@ -1,31 +1,32 @@
|
||||
*** ENVELOPE RECORDS test-queue-file7.tmp ***
|
||||
0 message_size: 329 181 1 0
|
||||
65 message_arrival_time: Tue Jul 25 15:37:06 2006
|
||||
82 create_time: Tue Jul 25 15:37:06 2006
|
||||
106 named_attribute: rewrite_context=local
|
||||
129 sender_fullname: Wietse Venema
|
||||
144 sender: me@porcupine.org
|
||||
162 pointer_record: 0
|
||||
179 *** MESSAGE CONTENTS test-queue-file7.tmp ***
|
||||
181 regular_text: Received: by bristle.watson.ibm.com (Postfix, from userid 0)
|
||||
243 regular_text: id 034B229013F; Tue, 25 Jul 2006 15:37:06 -0400 (EDT)
|
||||
299 pointer_record: 658
|
||||
658 regular_text: DKIM-Signature: hya
|
||||
679 pointer_record: 615
|
||||
615 regular_text: Domainkey-Signature: hya
|
||||
641 pointer_record: 552
|
||||
552 regular_text: X-Virus-Scanned: hya
|
||||
574 regular_text: From: me@porcupine.org
|
||||
598 pointer_record: 323
|
||||
323 regular_text: To: you@porcupine.org
|
||||
346 regular_text: Message-Id: <20060725192735.5EC2D29013F@hades.porcupine.org>
|
||||
408 regular_text: Date: Tue, 25 Jul 2006 15:27:19 -0400 (EDT)
|
||||
453 regular_text: Subject: hey!
|
||||
468 pointer_record: 0
|
||||
485 regular_text:
|
||||
487 regular_text: text
|
||||
493 pointer_record: 0
|
||||
510 *** HEADER EXTRACTED test-queue-file7.tmp ***
|
||||
512 original_recipient: you@porcupine.org
|
||||
531 recipient: you@porcupine.org
|
||||
550 *** MESSAGE FILE END test-queue-file7.tmp ***
|
||||
0 message_size: 332 199 1 0 332
|
||||
81 message_arrival_time: Sat Jan 20 20:53:54 2007
|
||||
100 create_time: Sat Jan 20 20:53:59 2007
|
||||
124 named_attribute: rewrite_context=local
|
||||
147 sender_fullname: Wietse Venema
|
||||
162 sender: me@porcupine.org
|
||||
180 pointer_record: 0
|
||||
197 *** MESSAGE CONTENTS test-queue-file7.tmp ***
|
||||
199 regular_text: Received: by hades.porcupine.org (Postfix, from userid 1001)
|
||||
261 regular_text: id B85F1290407; Sat, 20 Jan 2007 20:53:59 -0500 (EST)
|
||||
317 pointer_record: 679
|
||||
679 regular_text: DKIM-Signature: hya
|
||||
700 pointer_record: 636
|
||||
636 regular_text: Domainkey-Signature: hya
|
||||
662 pointer_record: 573
|
||||
573 regular_text: X-Virus-Scanned: hya
|
||||
595 regular_text: From: me@porcupine.org
|
||||
619 pointer_record: 341
|
||||
341 regular_text: To: you@porcupine.org
|
||||
364 regular_text: Message-Id: <20060725192735.5EC2D29013F@hades.porcupine.org>
|
||||
426 regular_text: Date: Tue, 25 Jul 2006 15:27:19 -0400 (EDT)
|
||||
471 regular_text: Subject: hey!
|
||||
486 padding: 0
|
||||
489 pointer_record: 0
|
||||
506 regular_text:
|
||||
508 regular_text: text
|
||||
514 pointer_record: 0
|
||||
531 *** HEADER EXTRACTED test-queue-file7.tmp ***
|
||||
533 original_recipient: you@porcupine.org
|
||||
552 recipient: you@porcupine.org
|
||||
571 *** MESSAGE FILE END test-queue-file7.tmp ***
|
||||
|
@ -1,33 +1,34 @@
|
||||
*** ENVELOPE RECORDS test-queue-file8.tmp ***
|
||||
0 message_size: 329 181 1 0
|
||||
65 message_arrival_time: Tue Jul 25 15:37:06 2006
|
||||
82 create_time: Tue Jul 25 15:37:06 2006
|
||||
106 named_attribute: rewrite_context=local
|
||||
129 sender_fullname: Wietse Venema
|
||||
144 sender: me@porcupine.org
|
||||
162 pointer_record: 0
|
||||
179 *** MESSAGE CONTENTS test-queue-file8.tmp ***
|
||||
181 pointer_record: 552
|
||||
552 regular_text: inserted-at-1: hya
|
||||
572 pointer_record: 651
|
||||
651 regular_text: inserted-at-2: hya
|
||||
671 pointer_record: 750
|
||||
750 regular_text: inserted-at-3: hya
|
||||
770 regular_text: Received: by bristle.watson.ibm.com (Postfix, from userid 0)
|
||||
832 pointer_record: 733
|
||||
733 pointer_record: 634
|
||||
634 pointer_record: 243
|
||||
243 regular_text: id 034B229013F; Tue, 25 Jul 2006 15:37:06 -0400 (EDT)
|
||||
299 regular_text: From: me@porcupine.org
|
||||
323 regular_text: To: you@porcupine.org
|
||||
346 regular_text: Message-Id: <20060725192735.5EC2D29013F@hades.porcupine.org>
|
||||
408 regular_text: Date: Tue, 25 Jul 2006 15:27:19 -0400 (EDT)
|
||||
453 regular_text: Subject: hey!
|
||||
468 pointer_record: 0
|
||||
485 regular_text:
|
||||
487 regular_text: text
|
||||
493 pointer_record: 0
|
||||
510 *** HEADER EXTRACTED test-queue-file8.tmp ***
|
||||
512 original_recipient: you@porcupine.org
|
||||
531 recipient: you@porcupine.org
|
||||
550 *** MESSAGE FILE END test-queue-file8.tmp ***
|
||||
0 message_size: 332 199 1 0 332
|
||||
81 message_arrival_time: Sat Jan 20 20:53:54 2007
|
||||
100 create_time: Sat Jan 20 20:53:59 2007
|
||||
124 named_attribute: rewrite_context=local
|
||||
147 sender_fullname: Wietse Venema
|
||||
162 sender: me@porcupine.org
|
||||
180 pointer_record: 0
|
||||
197 *** MESSAGE CONTENTS test-queue-file8.tmp ***
|
||||
199 pointer_record: 573
|
||||
573 regular_text: inserted-at-1: hya
|
||||
593 pointer_record: 672
|
||||
672 regular_text: inserted-at-2: hya
|
||||
692 pointer_record: 771
|
||||
771 regular_text: inserted-at-3: hya
|
||||
791 regular_text: Received: by hades.porcupine.org (Postfix, from userid 1001)
|
||||
853 pointer_record: 754
|
||||
754 pointer_record: 655
|
||||
655 pointer_record: 261
|
||||
261 regular_text: id B85F1290407; Sat, 20 Jan 2007 20:53:59 -0500 (EST)
|
||||
317 regular_text: From: me@porcupine.org
|
||||
341 regular_text: To: you@porcupine.org
|
||||
364 regular_text: Message-Id: <20060725192735.5EC2D29013F@hades.porcupine.org>
|
||||
426 regular_text: Date: Tue, 25 Jul 2006 15:27:19 -0400 (EDT)
|
||||
471 regular_text: Subject: hey!
|
||||
486 padding: 0
|
||||
489 pointer_record: 0
|
||||
506 regular_text:
|
||||
508 regular_text: text
|
||||
514 pointer_record: 0
|
||||
531 *** HEADER EXTRACTED test-queue-file8.tmp ***
|
||||
533 original_recipient: you@porcupine.org
|
||||
552 recipient: you@porcupine.org
|
||||
571 *** MESSAGE FILE END test-queue-file8.tmp ***
|
||||
|
@ -1,32 +1,33 @@
|
||||
*** ENVELOPE RECORDS test-queue-file9.tmp ***
|
||||
0 message_size: 329 181 1 0
|
||||
65 message_arrival_time: Tue Jul 25 15:37:06 2006
|
||||
82 create_time: Tue Jul 25 15:37:06 2006
|
||||
106 named_attribute: rewrite_context=local
|
||||
129 sender_fullname: Wietse Venema
|
||||
144 sender: me@porcupine.org
|
||||
162 pointer_record: 0
|
||||
179 *** MESSAGE CONTENTS test-queue-file9.tmp ***
|
||||
181 pointer_record: 552
|
||||
552 regular_text: inserted-at-1: hya
|
||||
572 regular_text: Received: by bristle.watson.ibm.com (Postfix, from userid 0)
|
||||
634 pointer_record: 243
|
||||
243 regular_text: id 034B229013F; Tue, 25 Jul 2006 15:37:06 -0400 (EDT)
|
||||
299 pointer_record: 651
|
||||
651 regular_text: inserted-at-3: hya
|
||||
671 regular_text: From: me@porcupine.org
|
||||
695 pointer_record: 712
|
||||
712 regular_text: inserted-at-5: hya
|
||||
732 pointer_record: 323
|
||||
323 regular_text: To: you@porcupine.org
|
||||
346 regular_text: Message-Id: <20060725192735.5EC2D29013F@hades.porcupine.org>
|
||||
408 regular_text: Date: Tue, 25 Jul 2006 15:27:19 -0400 (EDT)
|
||||
453 regular_text: Subject: hey!
|
||||
468 pointer_record: 0
|
||||
485 regular_text:
|
||||
487 regular_text: text
|
||||
493 pointer_record: 0
|
||||
510 *** HEADER EXTRACTED test-queue-file9.tmp ***
|
||||
512 original_recipient: you@porcupine.org
|
||||
531 recipient: you@porcupine.org
|
||||
550 *** MESSAGE FILE END test-queue-file9.tmp ***
|
||||
0 message_size: 332 199 1 0 332
|
||||
81 message_arrival_time: Sat Jan 20 20:53:54 2007
|
||||
100 create_time: Sat Jan 20 20:53:59 2007
|
||||
124 named_attribute: rewrite_context=local
|
||||
147 sender_fullname: Wietse Venema
|
||||
162 sender: me@porcupine.org
|
||||
180 pointer_record: 0
|
||||
197 *** MESSAGE CONTENTS test-queue-file9.tmp ***
|
||||
199 pointer_record: 573
|
||||
573 regular_text: inserted-at-1: hya
|
||||
593 regular_text: Received: by hades.porcupine.org (Postfix, from userid 1001)
|
||||
655 pointer_record: 261
|
||||
261 regular_text: id B85F1290407; Sat, 20 Jan 2007 20:53:59 -0500 (EST)
|
||||
317 pointer_record: 672
|
||||
672 regular_text: inserted-at-3: hya
|
||||
692 regular_text: From: me@porcupine.org
|
||||
716 pointer_record: 733
|
||||
733 regular_text: inserted-at-5: hya
|
||||
753 pointer_record: 341
|
||||
341 regular_text: To: you@porcupine.org
|
||||
364 regular_text: Message-Id: <20060725192735.5EC2D29013F@hades.porcupine.org>
|
||||
426 regular_text: Date: Tue, 25 Jul 2006 15:27:19 -0400 (EDT)
|
||||
471 regular_text: Subject: hey!
|
||||
486 padding: 0
|
||||
489 pointer_record: 0
|
||||
506 regular_text:
|
||||
508 regular_text: text
|
||||
514 pointer_record: 0
|
||||
531 *** HEADER EXTRACTED test-queue-file9.tmp ***
|
||||
533 original_recipient: you@porcupine.org
|
||||
552 recipient: you@porcupine.org
|
||||
571 *** MESSAGE FILE END test-queue-file9.tmp ***
|
||||
|
@ -168,6 +168,7 @@ void cleanup_out_header(CLEANUP_STATE *state, VSTRING *header_buf)
|
||||
char *start = vstring_str(header_buf);
|
||||
char *line;
|
||||
char *next_line;
|
||||
ssize_t line_len;
|
||||
|
||||
/*
|
||||
* Prepend a tab to continued header lines that went through the address
|
||||
@ -181,17 +182,26 @@ void cleanup_out_header(CLEANUP_STATE *state, VSTRING *header_buf)
|
||||
* 10%, we truncate between line boundaries to avoid losing too much
|
||||
* text. This "unkind cut" may result in syntax errors and may trigger
|
||||
* warnings from down-stream MTAs.
|
||||
*
|
||||
* If Milter is enabled, pad a short header record with a dummy record so
|
||||
* that a header record can safely be overwritten by a pointer record.
|
||||
* This simplifies header modification enormously.
|
||||
*/
|
||||
for (line = start; line; line = next_line) {
|
||||
next_line = split_at(line, '\n');
|
||||
if ((next_line ? next_line - 1 : line + strlen(line))
|
||||
> start + var_header_limit) {
|
||||
line_len = next_line ? next_line - 1 - line : strlen(line);
|
||||
if (line + line_len > start + var_header_limit) {
|
||||
if (line - start > 0.9 * var_header_limit) /* nice cut */
|
||||
break;
|
||||
start[var_header_limit] = 0; /* unkind cut */
|
||||
next_line = 0;
|
||||
}
|
||||
if (line == start || IS_SPACE_TAB(*line)) {
|
||||
if (line == start) {
|
||||
cleanup_out_string(state, REC_TYPE_NORM, line);
|
||||
if (line_len < REC_TYPE_PTR_PAYL_SIZE)
|
||||
rec_pad(state->dst, REC_TYPE_DTXT,
|
||||
REC_TYPE_PTR_PAYL_SIZE - line_len);
|
||||
} else if (IS_SPACE_TAB(*line)) {
|
||||
cleanup_out_string(state, REC_TYPE_NORM, line);
|
||||
} else {
|
||||
cleanup_out_format(state, REC_TYPE_NORM, "\t%s", line);
|
||||
|
BIN
postfix/src/cleanup/test-queue-file
Executable file → Normal file
BIN
postfix/src/cleanup/test-queue-file
Executable file → Normal file
Binary file not shown.
Binary file not shown.
BIN
postfix/src/cleanup/test-queue-file12
Normal file
BIN
postfix/src/cleanup/test-queue-file12
Normal file
Binary file not shown.
Binary file not shown.
Binary file not shown.
BIN
postfix/src/cleanup/test-queue-file4
Executable file → Normal file
BIN
postfix/src/cleanup/test-queue-file4
Executable file → Normal file
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
@ -20,7 +20,7 @@
|
||||
* Patches change both the patchlevel and the release date. Snapshots have no
|
||||
* patchlevel; they change the release date only.
|
||||
*/
|
||||
#define MAIL_RELEASE_DATE "20070119"
|
||||
#define MAIL_RELEASE_DATE "20070121"
|
||||
#define MAIL_VERSION_NUMBER "2.4"
|
||||
|
||||
#ifdef SNAPSHOT
|
||||
|
@ -58,7 +58,7 @@ REC_TYPE_NAME rec_type_names[] = {
|
||||
REC_TYPE_MESG, "message_content",
|
||||
REC_TYPE_CONT, "unterminated_text",
|
||||
REC_TYPE_NORM, "regular_text",
|
||||
REC_TYPE_DTXT, "deleted_text",
|
||||
REC_TYPE_DTXT, "padding",
|
||||
REC_TYPE_XTRA, "extracted_info",
|
||||
REC_TYPE_RRTO, "return_receipt",
|
||||
REC_TYPE_ERTO, "errors_to",
|
||||
|
@ -83,8 +83,8 @@
|
||||
* have to read all the queue file records before starting delivery. This is
|
||||
* often the case with list mail, where such optimization is desirable.
|
||||
*/
|
||||
#define REC_TYPE_ENV_RECIPIENT "MDRO/Kon"
|
||||
#define REC_TYPE_EXT_RECIPIENT "EDRO/Kon"
|
||||
#define REC_TYPE_ENV_RECIPIENT "DRO/Kon"
|
||||
#define REC_TYPE_EXT_RECIPIENT "DRO/Kon"
|
||||
|
||||
/*
|
||||
* The types of records that I expect to see while processing different
|
||||
|
@ -53,6 +53,11 @@
|
||||
/* VSTREAM *stream;
|
||||
/* const char *where;
|
||||
/*
|
||||
/* int rec_pad(stream, type, len)
|
||||
/* VSTREAM *stream;
|
||||
/* int type;
|
||||
/* int len;
|
||||
/*
|
||||
/* REC_SPACE_NEED(buflen, reclen)
|
||||
/* ssize_t buflen;
|
||||
/* ssize_t reclen;
|
||||
@ -81,8 +86,8 @@
|
||||
/* and REC_FLAG_DEFAULT for normal use.
|
||||
/*
|
||||
/* rec_get() is a wrapper around rec_get_raw() that always
|
||||
/* enables the REC_FLAG_FOLLOW_PTR and REC_FLAG_SKIP_DTXT
|
||||
/* features.
|
||||
/* enables the REC_FLAG_FOLLOW_PTR, REC_FLAG_SKIP_DTXT
|
||||
/* and REC_FLAG_SEEK_END features.
|
||||
/*
|
||||
/* rec_put() stores the specified record and returns the record
|
||||
/* type, or REC_TYPE_ERROR in case of problems.
|
||||
@ -107,6 +112,9 @@
|
||||
/* means do nothing. The result is REC_TYPE_ERROR in case of
|
||||
/* failure.
|
||||
/*
|
||||
/* rec_pad() writes a record that occupies the larger of (the
|
||||
/* specified amount) or (an implementation-defined minimum).
|
||||
/*
|
||||
/* REC_SPACE_NEED(buflen, reclen) converts the specified buffer
|
||||
/* length into a record length. This macro modifies its second
|
||||
/* argument.
|
||||
@ -380,3 +388,13 @@ int rec_fputs(VSTREAM *stream, int type, const char *str)
|
||||
{
|
||||
return (rec_put(stream, type, str, str ? strlen(str) : 0));
|
||||
}
|
||||
|
||||
/* rec_pad - write padding record */
|
||||
|
||||
int rec_pad(VSTREAM *stream, int type, int len)
|
||||
{
|
||||
int width = len - 2; /* type + length */
|
||||
|
||||
return (rec_fprintf(stream, type, "%*s",
|
||||
width < 1 ? 1 : width, "0"));
|
||||
}
|
||||
|
@ -38,6 +38,7 @@ extern int rec_put_type(VSTREAM *, int, off_t);
|
||||
extern int PRINTFLIKE(3, 4) rec_fprintf(VSTREAM *, int, const char *,...);
|
||||
extern int rec_fputs(VSTREAM *, int, const char *);
|
||||
extern int rec_goto(VSTREAM *, const char *);
|
||||
extern int rec_pad(VSTREAM *, int, int);
|
||||
|
||||
#define REC_PUT_BUF(v, t, b) rec_put((v), (t), vstring_str(b), VSTRING_LEN(b))
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user