]> git.ipfire.org Git - thirdparty/postfix.git/commitdiff
postfix-1.1.11-20020527
authorWietse Venema <wietse@porcupine.org>
Mon, 27 May 2002 05:00:00 +0000 (00:00 -0500)
committerViktor Dukhovni <viktor@dukhovni.org>
Tue, 5 Feb 2013 06:27:59 +0000 (06:27 +0000)
20 files changed:
postfix/HISTORY
postfix/Makefile.in
postfix/RELEASE_NOTES
postfix/conf/main.cf
postfix/conf/sample-filter.cf
postfix/conf/sample-mime.cf
postfix/conf/sample-pcre-body.cf
postfix/conf/sample-pcre-header.cf
postfix/conf/sample-regexp-body.cf
postfix/conf/sample-regexp-header.cf
postfix/html/uce.html
postfix/src/cleanup/cleanup.h
postfix/src/cleanup/cleanup_extracted.c
postfix/src/cleanup/cleanup_message.c
postfix/src/cleanup/cleanup_state.c
postfix/src/global/mail_version.h
postfix/src/global/rec_type.h
postfix/src/nqmgr/qmgr_message.c
postfix/src/pickup/pickup.c
postfix/src/qmgr/qmgr_message.c

index 3eef83492a2e7d246c2f0161e69b04067501c5d4..4df04b0db8111a1dd27bf8b3c763ebfc55d26005 100644 (file)
@@ -6473,12 +6473,14 @@ Apologies for any names omitted.
        Feature: new MIME parser, written from scratch, that
        recognizes the structure of MIME encapsulated mail. Influenced
        by comments from Victor Duchovny. This code can detect but
-       will not fix illegal MIME encapsulations that Liviu Daia
-       expresses concern about.  MIME header scanning now happens
-       in header_checks, and is faster than body_checks could ever
-       be. Thus also eliminates the problem with multi-line MIME
-       headers being matched one line at a time.  Files:
-       global/mime_state.[hc], cleanup/cleanup_message.c.
+       will not decode obscure MIME formats or obscure character
+       string encoding that Liviu Daia expresses concern about.
+
+       MIME header scanning now happens in header_checks, and is
+       faster than body_checks could ever be. This also eliminates
+       the problem with multi-line MIME headers being matched one
+       line at a time.  Files:  global/mime_state.[hc],
+       cleanup/cleanup_message.c.
 
 20020521-22
 
@@ -6486,12 +6488,12 @@ Apologies for any names omitted.
        the Postfix SMTP client. File: smtp/smtp_proto.c.
 
        Logging: the Postfix SMTP and LMTP clients now report the
-       stage of the protocol when they report a server reply.
-       File:  smtp/smtp_proto.c, lmtp/lmtp_proto.c.
+       the protocol stage when they report a server reply.  File:
+       smtp/smtp_proto.c, lmtp/lmtp_proto.c.
 
-       Bugfix: the SMTP server warned about ignored client
-       attributes (introduced in 20020510) in mail submitted with
-       "sendmail -bs".  File: smtpd/smtpd.c.
+       Bugfix: the SMTP server warned about ignored client attributes
+       (these were introduced 20020510) in mail that was submitted
+       with "sendmail -bs".  File: smtpd/smtpd.c.
 
 20020525
 
@@ -6521,20 +6523,30 @@ Apologies for any names omitted.
 
        Feature: disable_mime_output_conversion=yes/no controls
        whether Postfix will convert 8BITMIME to 7BIT mail when
-       delivering to an SMTP server that does not announce 8BITMIME.
-       Default is NO.
+       delivering mail to an SMTP server that does not announce
+       8BITMIME support.  Default is NO.
 
        Feature: strict_8bitmime=yes/no controls whether Postfix
        rejects 8-bit characters in headers and 7-bit body parts.
-       This blocks mail from poorly written software, as well as
-       mail that is piped into ancient /bin/mail implementations
-       that do not MIME format 8-bit content. Default is NO.
+       This blocks mail from poorly written software, including
+       majordomo approval requests that contain a valid 8BITMIME
+       email message, as well as mail that is piped into ancient
+       /bin/mail implementations that do not MIME format 8-bit
+       content. Default is NO.
 
        Feature: strict_mime_encoding_domain=yes/no controls whether
        Postfix rejects illegal content transfer encodings for
        multipart/* and message/*. This blocks mail from poorly
        written software. Default is NO.
 
+20020527
+
+       Feature: "FILTER transport:nexthop" in header/body checks.
+       After the message is queued, the message is sent through
+       a content filter. This requires different cleanup servers
+       before and after the filter, with header/body checks turned
+       off in the second cleanup server.
+
 Open problems:
 
        Medium: old maildrop files are no longer readable by the
index a8fff873e351fd8b782f8ba67325e495144d1be9..c58bcb9fcdd072fe26c21ab5c94f5b6cad0dc002 100644 (file)
@@ -62,6 +62,7 @@ tidy: clean
            *.orig */*.orig */*/*.orig \
            *.bak */*.bak */*/*.bak \
            make.err */make.err */*/make.err \
+           *.gmon */*.gmon */*/*.gmon \
            conf/main.cf.default
        find . -type s -print | xargs rm -f
        find . -type d -print | xargs chmod 755
index 6c7fe2a1be552c169735dd372dccfb9c7f97f802..8c226a12dcb716100c3e8a707940d1979bb2e46a 100644 (file)
@@ -12,36 +12,59 @@ snapshot release).  Patches change the patchlevel and the release
 date. Snapshots change only the release date, unless they include
 the same bugfixes as a patch release.
 
-Incompatible changes with Postfix snapshot 1.1.10-20020526
+Incompatible changes with Postfix snapshot 1.1.11-20020527
 ==========================================================
 
 Message headers in MIME attachments etc. are no longer matched by
 body_checks, one input line at a time. They are now by default
 matched by header_checks, one multi-line header at a time.  To get
-the old behavior, specify "disable_mime_input_processing = yes".
+the old behavior, specify "disable_mime_input_processing = yes",
+or specify separate patterns for header_checks, mime_header_checks
+and nested_header_checks. See conf/sample-mime.cf for details.
 
-Postfix rejects mail if the MIME multipart structure is nested more
-than mime_nesting_limit levels (default: 20) while receiving mail,
-or when Postfix is performing 8BITMIME to 7BIT conversion while
-delivering mail.
+Postfix now rejects mail if the MIME multipart structure is nested
+more than mime_nesting_limit levels (default: 20) when MIME input
+processing is enabled while receiving mail, or when Postfix is
+performing 8BITMIME to 7BIT conversion while delivering mail.
 
 Postfix now recognizes "name :" as a valid message header, but
 normalizes it to "name:" for consistency (actually, there is so
-much code in Postfix that would break with "name :" that there
-is little choice, except to not recognize "name :" headers).
+much code in Postfix that would break with "name :" that there is
+little choice, except to not recognize "name :" headers).
+
+Queue files created with the header/body_checks "FILTER" feature
+are not compatible with "postqueue -r" (move queue files back to
+the maildrop directory) of previous Postfix releases.
 
-Major changes with Postfix snapshot 1.1.10-20020526
+Major changes with Postfix snapshot 1.1.11-20020527
 ===================================================
 
-Postfix now properly recognizes MIME headers in attachments, which
-is much more efficient than recognizing them via body_checks.  In
-fact, Postfix now has three classes of header patterns:  header_checks
-(for primary message headers except MIME headers), mime_header_checks
-(for MIME headers), and nested_header_checks (for headers of attached
-email messages except MIME headers).  By default, all headers are
-matched with header_checks.  To revert to the the old behavior,
-specify "disable_mime_input_processing = yes".  More details in
-conf/sample-filter.cf.
+Postfix now has real MIME support. This improves content filtering
+efficiency and accuracy, and improves inter-operability with mail
+systems that cannot receive 8-bit mail. See conf/sample-mime.cf
+for details.
+
+Postfix header_checks now properly recognize MIME headers in
+attachments. This is much more efficient than previous versions
+that recognized MIME headers via body_checks.  MIME headers are
+now processed one multi-line header at a time, instead of one body
+line at a time.  
+
+In fact, Postfix now has three classes of header patterns:
+header_checks (for primary message headers except MIME headers),
+mime_header_checks (for MIME headers), and nested_header_checks
+(for headers of attached email messages except MIME headers).  By
+default, all headers are matched with header_checks.  To get the
+the old behavior, specify "disable_mime_input_processing = yes".
+More details in conf/sample-filter.cf.
+
+Selective content filtering. In header/body_check patterns, specify
+"FILTER transport:nexthop" for mail that needs filtering. This
+requires different cleanup servers before and after the filter,
+with header/body checks turned off in the second cleanup server.
+More info about content filtering is in the Postfix FILTER_README
+file. Examples for this new feature still need to be developed.
+This feature overrides the main.cf content_filter setting.
 
 The Postfix SMTP client will now convert 8BITMIME mail to 7BIT when
 delivering to an SMTP server that does not announce 8BITMIME support.
@@ -52,7 +75,8 @@ Postfix can enforce some aspects of the MIME standards while
 receiving mail. Specify "strict_8bitmime = yes" to disallow 8-bit
 characters except where allowed by the MIME standard, and specify
 "strict_mime_encoding_domain = yes" to block mail from poorly
-written mail software. More details in conf/sample-mime.cf.
+written mail software, including majordomo approval requests that
+contain valid 8BITMIME mail. More details in conf/sample-mime.cf.
 
 Incompatible changes with Postfix snapshot 1.1.10-20020514
 ==========================================================
index 9ac147d56f0cc09c034355333b29c8593b07d42f..de4d7fcf2cf3102b7b6c821337cc3cffbb896a43 100644 (file)
@@ -1,5 +1,5 @@
 # Global Postfix configuration file. This file lists only a subset
-# of all 100+ parameters. See the sample-xxx.cf files for a full list.
+# of all 250+ parameters. See the sample-xxx.cf files for a full list.
 # 
 # The general format is lines with parameter = value pairs. Lines
 # that begin with whitespace continue the previous line. A value can
@@ -418,6 +418,11 @@ mail_owner = postfix
 # IGNORE the header line is silently discarded.
 # WARN   the header is logged (not rejected) with a warning message.
 # WARN text... as above, and the text is logged, too.
+# FILTER transport:nexthop
+#      after the message is queued, send the entire message through
+#      a content filter. This requires different cleanup servers
+#      before and after the filter, with header/body checks turned
+#      off in the second cleanup server.
 #
 # By default, these patterns also apply to MIME headers and to the
 # headers of attached messages. With older Postfix versions, MIME and
index ded983fd6e69826c08c1b3875881e1f24781f54e..7ddfc3c271afd16f7e839072d7309eee22963e59 100644 (file)
 # IGNORE the header line is silently discarded.
 # WARN   the header is logged (not rejected) with a warning message.
 # WARN text... as above, and the text is logged, too.
+# FILTER transport:nexthop
+#       after the message is queued, the message is sent through
+#       a content filter. This requires different cleanup servers
+#       before and after the filter, with header/body checks turned
+#       off in the second cleanup server. More info about content
+#      filtering is in the Postfix FILTER_README file. This feature
+#      overrides the main.cf content_filter setting.
 #
 # By default, these patterns apply the primary message headers, to
 # MIME headers, and to the headers of attached messages. With older
@@ -38,6 +45,13 @@ header_checks = regexp:/etc/postfix/header_checks
 # IGNORE the header line is silently discarded.
 # WARN   the header is logged (not rejected) with a warning message.
 # WARN text... as above, and the text is logged, too.
+# FILTER transport:nexthop
+#       after the message is queued, the message is sent through
+#       a content filter. This requires different cleanup servers
+#       before and after the filter, with header/body checks turned
+#       off in the second cleanup server. More info about content
+#      filtering is in the Postfix FILTER_README file. This feature
+#      overrides the main.cf content_filter setting.
 #
 # By default, the same patterns are applied as for header_checks.
 #
@@ -56,6 +70,13 @@ mime_header_checks = $header_checks
 # IGNORE the header line is silently discarded.
 # WARN   the header is logged (not rejected) with a warning message.
 # WARN text... as above, and the text is logged, too.
+# FILTER transport:nexthop
+#       after the message is queued, the message is sent through
+#       a content filter. This requires different cleanup servers
+#       before and after the filter, with header/body checks turned
+#       off in the second cleanup server. More info about content
+#      filtering is in the Postfix FILTER_README file. This feature
+#      overrides the main.cf content_filter setting.
 #
 # By default, the same patterns are applied as for header_checks.
 #
@@ -76,5 +97,12 @@ nested_header_checks = $header_checks
 # IGNORE the body line is silently discarded.
 # WARN   the body line is logged (not rejected) with a warning message.
 # WARN text... as above, and the text is logged, too.
+# FILTER transport:nexthop
+#       after the message is queued, the message is sent through
+#       a content filter. This requires different cleanup servers
+#       before and after the filter, with header/body checks turned
+#       off in the second cleanup server. More info about content
+#      filtering is in the Postfix FILTER_README file. This feature
+#      overrides the main.cf content_filter setting.
 #
 body_checks = regexp:/etc/postfix/body_checks
index b8c59291d44dfd5815ed1bbaa1d17004e2ad715d..9cba90f9576412a72e9db6d31f06c5fc90f2a775 100644 (file)
@@ -5,14 +5,14 @@
 # parameters that control MIME processing.
 
 # Specify "yes" to disable special processing of Content-Type: headers
-# while receiving mail. This treats all text after the primary mail
+# while RECEIVING mail. This treats all text after the primary mail
 # headers as message body text, and disables the optional features
 # below that enforce some aspects of MIME standards.
 #
 disable_mime_input_processing = no
 
 # Specify "yes" to disable special processing of Content-Type: headers
-# while delivering mail. This treats all text after the primary mail
+# while DELIVERING mail. This treats all text after the primary mail
 # headers as message body text, and disables 8BITMIME to 7BIT conversion
 # when delivering mail to an SMTP server that does not announce
 # 8BITMIME support.
@@ -23,7 +23,7 @@ disable_mime_output_conversion = no
 # boundary strings. The MIME processor is unable to distinguish
 # between boundary strings that are identical in the first
 # $mime_boundary_length_limit characters. The default limit is the
-# input line length limit.
+# Postfix input line length limit.
 #
 mime_boundary_length_limit = 2048
 
index bb98b6cb22d9b708ef3992dd3b605d0c1b5d6ea3..6b23c9434ad1f37b21ad79bfa38f572ce71b5416 100644 (file)
 #      IGNORE          The line is silently discarded.
 #      WARN            The line is logged (not rejected) with a warning.
 #      WARN text....   As above, and the text is logged, too.
+#      FILTER transport:nexthop
+#                      After the message is queued, send the entire
+#                      message through a content filter. This
+#                      requires different cleanup servers before
+#                      and after the filter, with header/body
+#                      checks turned off in the second cleanup
+#                      server. More information about content filters
+#                      is in the Postfix FILTER_README file.
 #
 #      Substitution of sub-strings from the matched expression is
 #      possible using the conventional perl syntax. The macros in the
index a2bf1f5abfcb94105d3f4671028d8f4cd4d228fa..44bd7599719e7667c58887fedfabc535779ce7e9 100644 (file)
 #      IGNORE          The header line is silently discarded.
 #      WARN            The header is logged (not rejected) with a warning.
 #      WARN text....   As above, and the text is logged, too.
+#      FILTER transport:nexthop
+#                      After the message is queued, send the entire
+#                      message through a content filter. This
+#                      requires different cleanup servers before
+#                      and after the filter, with header/body
+#                      checks turned off in the second cleanup
+#                      server. More information about content filters
+#                      is in the Postfix FILTER_README file.
 #
 #      Substitution of sub-strings from the matched expression is
 #      possible using the conventional perl syntax. The macros in the
index 67e6f5bb0150bafdac4e8c3954506ef75bebbd69..577428e430641a938d97afc3be24a959a0759c32 100644 (file)
 #   IGNORE          The header line is silently discarded.
 #   WARN            The header is logged (not rejected) with a warning.
 #   WARN text....   As above, and the text is logged, too.
+#   FILTER transport:nexthop
+#                  After the message is queued, send the entire
+#                  message through a content filter. This requires
+#                  different cleanup servers before and after the
+#                  filter, with header/body checks turned off in
+#                  the second cleanup server. More information about 
+#                  content filters is in the Postfix FILTER_README file.
 
 # Skip over base 64 encoded blocks. This saves lots of CPU cycles.
 # Expressions by Liviu Daia. Amended by Victor Duchovni.
index 9552f1eed0d95fc3074760b45e884f6afdaa4a6f..23be2c363adabec77c59082b265495224ae5920e 100644 (file)
 #   IGNORE          the header line is silently discarded.
 #   WARN            the header is logged (not rejected) with a warning.
 #   WARN text...    As above, and the text is logged, too.
+#   FILTER transport:nexthop
+#                  After the message is queued, send the entire
+#                  message through a content filter. This requires
+#                  different cleanup servers before and after the
+#                  filter, with header/body checks turned off in
+#                  the second cleanup server. More information about 
+#                  content filters is in the Postfix FILTER_README file.
 
 /^Subject: Make Money Fast/    REJECT
 /^To: friend@public.com/       REJECT
index 9792e885df453ed82724b9e87d28f4e4e97b5133..883df41ed962274b38eace08db6a81fd9172f64d 100644 (file)
@@ -138,6 +138,14 @@ the originator.
 
 <dt>WARN text... <dd> As above, and also log the text.
 
+<dt>FILTER <i>transport</i>:<i>nexthop</i> <dd>
+After the message is queued, send the entire message through
+a content filter. This requires different cleanup servers
+before and after the filter, with header/body checks turned
+off in the second cleanup server. More details about content
+filtering are in the Postfix FILTER_README file. This feature
+overrides the main.cf <b>content_filter</b> setting.
+
 </dl>
 
 <p>
@@ -207,6 +215,14 @@ the originator.
 
 <dt>WARN text... <dd> As above, and also log the text.
 
+<dt>FILTER <i>transport</i>:<i>nexthop</i> <dd>
+After the message is queued, send the entire message through
+a content filter. This requires different cleanup servers
+before and after the filter, with header/body checks turned
+off in the second cleanup server. More details about content
+filtering are in the Postfix FILTER_README file. This feature
+overrides the main.cf <b>content_filter</b> setting.
+
 </dl>
 
 <p>
index 7e20ce46a16a879150663b7a9eaa0d971332e365..389361d4264f019b30e27b36b4d33853d524ae70 100644 (file)
@@ -64,6 +64,7 @@ typedef struct CLEANUP_STATE {
     NVTABLE *attr;                     /* queue file attribute list */
     MIME_STATE *mime_state;            /* MIME state engine */
     int     mime_errs;                 /* MIME error flags */
+    char   *filter;                    /* from header/body patterns */
 } CLEANUP_STATE;
 
  /*
index df3bcd993d84d2f4f20258e422916b9f5e0bc3f4..53faf57b6819aba895642fa246855fe8d83fa036 100644 (file)
@@ -81,6 +81,14 @@ void    cleanup_extracted(CLEANUP_STATE *state, int type, char *buf, int len)
      */
     cleanup_out_string(state, REC_TYPE_XTRA, "");
 
+    /*
+     * Put the optional content filter before the mandatory Return-Receipt-To
+     * and Errors-To so that the queue manager will pick up the filter name
+     * before starting deliveries.
+     */
+    if (state->filter != 0)
+       cleanup_out_string(state, REC_TYPE_FILT, state->filter);
+
     /*
      * Older Postfix versions didn't emit encoding information, so this
      * record can only be optional. Putting this before the mandatory
index dab5373d1efac6e64871bf9d2accef498cc205f1..87cf3d33e7f9c9e04c0d538ef2524cd8c99b9bbb 100644 (file)
@@ -294,6 +294,16 @@ static int cleanup_act(CLEANUP_STATE *state, char *context, const char *buf,
                 cleanup_strerror(CLEANUP_STAT_CONT));
        return (CLEANUP_ACT_KEEP);
     }
+    if (STREQUAL(value, "FILTER", command_len)) {
+       if (*optional_text == 0) {
+           msg_warn("missing FILTER command argument in %s map", map_class);
+       } else {
+           if (state->filter)
+               myfree(state->filter);
+           state->filter = mystrdup(optional_text);
+       }
+       return (CLEANUP_ACT_KEEP);
+    }
     if (*optional_text)
        msg_warn("unexpected text after command in %s map: %s",
                 map_class, value);
index f4a6a3c3f2e3cb1bd46515e5f0b8a809a1edc1e5..f2944f471f06989d3877bbe500e49df29faf3a3e 100644 (file)
@@ -89,6 +89,7 @@ CLEANUP_STATE *cleanup_state_alloc(void)
     state->attr = nvtable_create(10);
     state->mime_state = 0;
     state->mime_errs = 0;
+    state->filter = 0;
     return (state);
 }
 
@@ -122,5 +123,7 @@ void    cleanup_state_free(CLEANUP_STATE *state)
     nvtable_free(state->attr);
     if (state->mime_state)
        mime_state_free(state->mime_state);
+    if (state->filter)
+       myfree(state->filter);
     myfree((char *) state);
 }
index 64eee5b0d6554752d4e087ce1f3087f9750a0ab3..afc9017cabef8d4cc1e1f205704bd784783e60d3 100644 (file)
   * Patches change the patchlevel and the release date. Snapshots change the
   * release date only, unless they include the same bugfix as a patch release.
   */
-#define MAIL_RELEASE_DATE      "20020526"
+#define MAIL_RELEASE_DATE      "20020527"
 
 #define VAR_MAIL_VERSION       "mail_version"
-#define DEF_MAIL_VERSION       "1.1.10-" MAIL_RELEASE_DATE
+#define DEF_MAIL_VERSION       "1.1.11-" MAIL_RELEASE_DATE
 extern char *var_mail_version;
 
  /*
index 0c3257a5dd62eb2d0034f3d3635482f41518d7fe..00d4b4697249854b23966e7b1b23f8b9076f2e5e 100644 (file)
@@ -64,8 +64,7 @@
   */
 #define REC_TYPE_ENVELOPE      "MCTFILSDROWVA"
 #define REC_TYPE_CONTENT       "XLN"
-#define REC_TYPE_EXTRACT       "EDROPreA"
-#define REC_TYPE_NOEXTRACT     "E"
+#define REC_TYPE_EXTRACT       "EDROPreAFI"
 
  /*
   * The record at the beginning of the envelope segment specifies the message
index 64642e4fb8cf54c92fb8b939722fe1cccbfbaf1d..04067d734bbd1a95a7c384e9a2ea2bbd4d5eda06 100644 (file)
@@ -378,11 +378,13 @@ static int qmgr_message_read(QMGR_MESSAGE *message)
            if (message->arrival_time == 0)
                message->arrival_time = atol(start);
        } else if (rec_type == REC_TYPE_FILT) {
-           if (message->filter_xport == 0)
-               message->filter_xport = mystrdup(start);
+           if (message->filter_xport != 0)
+               myfree(message->filter_xport);
+           message->filter_xport = mystrdup(start);
        } else if (rec_type == REC_TYPE_INSP) {
-           if (message->inspect_xport == 0)
-               message->inspect_xport = mystrdup(start);
+           if (message->inspect_xport != 0)
+               myfree(message->inspect_xport);
+           message->inspect_xport = mystrdup(start);
        } else if (rec_type == REC_TYPE_FROM) {
            if (message->sender == 0) {
                message->sender = mystrdup(start);
index 4ec76b434508513afe72e86e417eb818a39857c5..da2ff07c037b5d4e71a57cf1cf8b7db9a872977f 100644 (file)
@@ -212,7 +212,7 @@ static int copy_segment(VSTREAM *qfile, VSTREAM *cleanup, PICKUP_INFO *info,
                     (long) info->st.st_uid, attr_name, attr_value);
            continue;
        }
-       if (type == REC_TYPE_FILT && *expected == REC_TYPE_ENVELOPE[0])
+       if (type == REC_TYPE_FILT && info->st.st_uid != var_owner_uid)
            continue;
        else {
 
index fe79bb5790e250e408ec6d820a137ef6075c8890..aea2e20cda7c5720d10f1d86461a68620e05c3c0 100644 (file)
@@ -259,11 +259,13 @@ static int qmgr_message_read(QMGR_MESSAGE *message)
            if (message->arrival_time == 0)
                message->arrival_time = atol(start);
        } else if (rec_type == REC_TYPE_FILT) {
-           if (message->filter_xport == 0)
-               message->filter_xport = mystrdup(start);
+           if (message->filter_xport != 0)
+               myfree(message->filter_xport);
+           message->filter_xport = mystrdup(start);
        } else if (rec_type == REC_TYPE_INSP) {
-           if (message->inspect_xport == 0)
-               message->inspect_xport = mystrdup(start);
+           if (message->inspect_xport != 0)
+               myfree(message->inspect_xport);
+           message->inspect_xport = mystrdup(start);
        } else if (rec_type == REC_TYPE_FROM) {
            if (message->sender == 0) {
                message->sender = mystrdup(start);