ELM ME+ 2.5 PLalpha52 announcement

Elm ME+ 2.5 PLalpha52

Undo  Elm ME+ 2.5 PLalpha51a patch before applying this patch.

- Is available with
	<URL: http://www.elmme-mailer.org/elm-ME+2.5.PLalpha52.patch.gz >
  and	<URL: http://www.elmme-mailer.org/elm-ME+2.5.alpha52.1064e7434a25434de195c340c86e037f.tar.gz >
  via http.

- Is available with
	<URL: https://hurtta.kapsi.fi/elm-ME+2.5/elm-ME+2.5.PLalpha52.patch.gz >
  and	<URL: https://hurtta.kapsi.fi/elm-ME+2.5/elm-ME+2.5.alpha52.1064e7434a25434de195c340c86e037f.tar.gz >
  via https.

- Is available on ftp.funet.fi
  via anonymous ftp
    directory pub/mirrors/elmme-mailer.org/src/elm-ME+2.5/

    files	elm-ME+2.5.PLalpha52.patch.gz
    and		elm-ME+2.5.alpha52.1064e7434a25434de195c340c86e037f.tar.gz

  or is available with
	<URL: ftp://ftp.funet.fi/pub/mirrors/elmme-mailer.org/src/elm-ME+2.5/elm-ME+2.5.PLalpha52.patch.gz >
  and	<URL: ftp://ftp.funet.fi/pub/mirrors/elmme-mailer.org/src/elm-ME+2.5/elm-ME+2.5.alpha52.1064e7434a25434de195c340c86e037f.tar.gz >

  or is available with
	<URL: https://nic.funet.fi/pub/mirrors/elmme-mailer.org/src/elm-ME+2.5/elm-ME+2.5.PLalpha52.patch.gz >
  and	<URL: https://nic.funet.fi/pub/mirrors/elmme-mailer.org/src/elm-ME+2.5/elm-ME+2.5.alpha52.1064e7434a25434de195c340c86e037f.tar.gz >
  via https.

- Is available with
        message-id <elmME+2.5/PLalpha52/1-0@kasvihuone.keh.iki.fi>
                   <elmME+2.5/PLalpha52/1-1@kasvihuone.keh.iki.fi>
                   <elmME+2.5/PLalpha52/1-2@kasvihuone.keh.iki.fi>
                   <elmME+2.5/PLalpha52/1-3@kasvihuone.keh.iki.fi>
                   <elmME+2.5/PLalpha52/1-5@kasvihuone.keh.iki.fi>
                   <elmME+2.5/PLalpha52/1-4@kasvihuone.keh.iki.fi>
                   <elmME+2.5/PLalpha52/1-6@kasvihuone.keh.iki.fi>
                   <elmME+2.5/PLalpha52/1-7@kasvihuone.keh.iki.fi>
  on newsgroups alt.sources and comp.mail.elm.

SUMMARY: This release collects patch Elm ME+ 2.5 PLalpha51a,
         adds generation of "Message-ID:" -header field,
	 adds "Message-ID:", "Expires:", "Date:",
	 "In-reply-to:", and "References:" -header fields
	 to 'invoke e(d)itor' buffer on header editing screen
	 and adds --messages={file} and --transaction={file}
	 arguments to command line of elm. This release changes
	 pager date and time display on pager title line and
	 changes fastmail -command. This release adds TLS 1.1
	 and 1.2 alternatives to libelmme-tls module. New elmrc
	 options are "valid-msg-id-domains", "generate-message-id",
	 "pager-time-display" and "address-lookup". Also
	 added "default-tls-version" elmrc option to "tls:" section.
	 Also some other changes and fixes are included.

Changes on Elm ME+ 2.5 PLalpha52 compared with Elm ME+ 2.5 PLalpha51
--------------------------------------------------------------------

        Undo  Elm ME+ 2.5 PLalpha51a patch before applying this patch.

        SUMMARY: This release collects patch Elm ME+ 2.5 PLalpha51a,
	         adds generation of "Message-ID:" -header field,
		 adds "Message-ID:", "Expires:", "Date:",
		 "In-reply-to:", and "References:" -header fields
		 to 'invoke e(d)itor' buffer on header editing screen
		 and adds --messages={file} and --transaction={file}
		 arguments to command line of elm. This release changes
		 pager date and time display on pager title line and
		 changes fastmail -command. This release adds TLS 1.1
		 and 1.2 alternatives to libelmme-tls module. New elmrc
		 options are "valid-msg-id-domains", "generate-message-id",
		 "pager-time-display" and "address-lookup". Also
		 added "default-tls-version" elmrc option to "tls:" section.
		 Also some other changes and fixes are included.

        - Changed Va_start() / va_end() usage on gen_browser()
        > This fixes crash on f)ilename command on
          Elm 2.5 style file browser:
              SIGNAL PANIC in signals.c:144:segv_signal
              >>>

              Segment Violation signal!


              Call stack: 7FBC6A31301E 4F108B 7FBC69AAACB0 7FBC69AFCDFA 7FBC6A30C337
               continues: 44D2EE 4502A0 47372E 46470A 490DE5
               continues: 4925FE 466D3A 7FBC69A95F45 41F1A9
              backtrace: 
              /usr/local/lib/libelmme-base.so.1.1.51(panic+0x1de)[0x7fbc6a31301e]
              elm(segv_signal+0x80)[0x4f108b]
              /lib/x86_64-linux-gnu/libc.so.6(+0x36cb0)[0x7fbc69aaacb0]
              /lib/x86_64-linux-gnu/libc.so.6(strlen+0x2a)[0x7fbc69afcdfa]
              /usr/local/lib/libelmme-base.so.1.1.51(elm_smessage+0x1025)[0x7fbc6a30c337]
              elm[0x44d2ee]
              elm(gen_browser+0x73b)[0x4502a0]
              elm(save+0x834)[0x47372e]
              elm(mailbox_command+0x1cae)[0x46470a]
              elm[0x490de5]
              elm(main_messages_menu+0x165)[0x4925fe]
              elm(main+0xf13)[0x466d3a]
              /lib/x86_64-linux-gnu/libc.so.6(__libc_start_main+0xf5)[0x7fbc69a95f45]
              elm[0x41f1a9]
              Press a <enter> to abort or <enter> to exit: 
          Crash occurs on x86_64 (amd64) architecture on Linux.
          Crash does not occur on i386 architecture on Linux.
        - Changed Va_start() / va_end() usage on folder_browser()

        - Added
              struct message_id    * message_id;
              struct digest_proc   * message_digest;
              struct expanded_date * date; 
          to struct mailing_headers on hdrs/addrlib.h
        - Added write_msgid_header(), write_date_header()
          to lib/addr/write_hdr.c and hdrs/addrlib.h

        NOTE: A header fields Date: and Message-ID: are generated
             before "Mail Preview Screen" entered. Therefore Date:
             header field does not reflect mail sending time. A header
             fields Date: and Message-ID: are always same on
             "Mail Preview Screen", on sent mail and on saved copy.

        - Changed static struct header_info header_types[]
          on lib/addr/headers.c so that Message-ID: is also
          allowed on .elm/elmheaders (although that is not very
          useful) or on 'invoke e(d)itor' buffer on 
          header editing screen.

        - Added
                Message-ID:
          to edit buffer used by 'invoke e(d)itor' on 
          header editing screen. This is supported on
          static struct header_info header_types[]
          on lib/addr/headers.c.         

        - Added is_whitelisted_msgid_domain() to
          to lib/addr/outheaders.h and to hdrs/addrlib.h
        - Added elmrc option "valid-msg-id-domains" to
          lib/addr/init.c
        - Added elmrc option "generate-message-id" to
          lib/mailer/init.c

        - Elm ME+ generates message-id header field
          when sending mail. This is controller by
          new elmrc option "generate-message-id".
          Message-id domain part is checked from
          DNS when
               use-mailer-library = smtp resolv
          is used. Id domain part of message-id
          header field is listed on new elmrc option
          "valid-msg-id-domains", then domain part is
          accepted without DNS check.

        See also chapter "Message-ID generation"

        - Configure now asks fall back domain name for
          message-id. msg-id.elmme-mailer.org is suggested.

        - Added check_domain_name() to shared_libs/resolv/resolv.c

        - Added "RSA Data Security, Inc. MD5 Message-Digest
          Algorithm" from
             RFC 1321: The MD5 Message-Digest Algorithm
          and modified that to work on 64-bit machine. Test
          suite on original code produces wrong hashes.

        - Possible fix to RC_fill_enum_values() on
          shared_libs/resolv/resolv.c
        - Possible fix to verify_mail_domain2() on
          shared_libs/resolv/resolv.c

        - Added macros DEBUG_CHECK_INIT() and DEBUG_CHECK()
          to hdrs/elmlib.h

        - Changed handling of valid-domains elmrc option.
          Even when some item on list starts with dot (.),
          name stated with dot (.) does not have accepted.
          When .domain is given on valid-domains elmrc option
          it marks {anything}.domain as valid domain, but
          {anything} can not be empty.

        - Moved message_id_domain() and message_id_left()
          from lib/addr/def_addr.h to hdrs/addrlib.h

        - Added free_digest_proc(), inc_digest_proc_refcount(),
          start_digest_proc(), feed_digest_proc(),
          len_digest_proc(), mode_digest_proc(),
          end_digest_proc(), result_digest_proc()
          digest_proc_equal(),  malloc_digest_proc(),
          digest_type()
          to hdrs/elmlib.h and lib/digest_wrapper.c

        - Exported name_ok() from lib/service_list.c
          as host_name_ok().

        - Changed mail() on src/mailmsg2.c

        - Added digest_feed_string() to  hdrs/elmlib.h and
          lib/string.c
        - Added cs_digest_feed_from_string() to hdrs/cs_imp.h
        - Added digest_feed_str(), digest_feed_references(),
          digest_feed_message_id(), digest_feed_addrs(),
          digest_feed_expires_hdr()
          to hdrs/addrlib.h and lib/addr/digest.c

        - Added query_s_mailer_info() to hdrs/mailerlib.h
          and lib/mailer/mailer.c
        - Added mailer_info_s_query_hook() to hdrs/mailer_imp.h
        - Added Configure test for getsockname()

        - Added set_address_from_gen_helper2() to hdrs/connection_imp.h
          and lib/remote_mbx.c
        - Added local socket address (result of
          getsockaname()) to struct remote_account
        - local address (result of getsockaname())
          is now included to transcript file
          (file given with -X option).
        - Submission mailer's check for MI_REMOTE_MAILER
          implementation for query_mailer_info() now
          also check that local and remote address
          of socket is same.

        - Added verify_library_prefix() to lib/shared.c and hdrs/shared_imp.h
        - Added shared_check_dname() and mailerdom_verify_lib_status()
          to lib/mailer/shared_mailer.c and hdrs/mailerlib.h

        - Added new_expanded_date(), free_expanded_date(),
          get_expanded_date_value(), get_expanded_date_cached_time(),
          get_expanded_date_source()
          to lib/addr/outdate.c and hdrs/addrlib.h
        - Added date_hdrval() to lib/addr/date.c and
          hdrs/addrlib.h
        - Added digest_feed_date_hdr() to lib/addr/digest.c
          and hdrs/addrlib.h
        - Added expanded_time_hdrval() to lib/addr/date.c
          and hdrs/addrlib.h

        - Changed add_expires_hdr()
        - Changed parsing of Expires: -header on .elm/elmheaders
        - Added
                Expires:
          to edit buffer used by 'invoke e(d)itor' on 
          header editing screen. This is supported on
          static struct header_info header_types[]
          on lib/addr/headers.c.        
        - Allow "x days" as value for Expires: -header
          on edit buffer.
        - Possible fix for expval_expires()
          
        - Added  add_date_hdr() to lib/addr/outheaders.h
        - Changed static struct header_info header_types[]
          on lib/addr/headers.c so that Date: is also
          allowed on .elm/elmheaders (although that is not very
          useful).

        - Added
                Date:
          to edit buffer used by 'invoke e(d)itor' on 
          header editing screen. This is supported on
          static struct header_info header_types[]
          on lib/addr/headers.c.         
        - Fixed skipping of comments between headers
          on edit buffer used by 'invoke e(d)itor' on 
          header editing screen. 

        - Fix for parse_parts_date_time(), wday number was
          returned wrongly.

        - Avoid 
             "Failed to leave folder: Try to quit again ?  ([P]anic/y/n) n"
          when
             "Move read messages to "received" folder? (y/n)"
          is canceled with ctrl-C
        - Added to sync_mbox() return status sync_mbox_cancel (-4).

        - Changed  sync_mbox() so that it does not
          call emergency_exit() when EOF is send from user input.
        - Added to sync_mbox() return status sync_mbox_EOF (-5).

        - Changed real_save() so that it does not
          call emergency_exit() when end_keep_folder()
          fails. Also real_save() does not close folder
          when end_keep_folder() fails. 

        - Added --messages={file} argument to elm.
          This logs some messages (usually errors)
          shown.  
        - Added open_messages_log(), close_messages_log()
          to hdrs/me.h and src/out_utils.c

        - Added --transaction={file} argument to elm.
          This is same than -X {file} option.
        - Added free_transaction_file() to hdrs/elmlib.h
          and lib/remote_mbx.c
        - free_transaction_file() is called from
          free_rc_options().
          
        - Changed some time() calls.

        - Check on can_open() that userid and groupid have set.

        - Set close-on-exec flag on set_transaction_file() and
          init_debug().

        - Avoid 
                Failed to leave folder!
          and then
                Failed to leave folder: Try to quit again ?  ([P]anic/y/n) n
          on closing/leaving folders
          when several folders are open and some of them
          are read only. If just read only folder was open
	  that produced already
               Folder XXXXXX is read-only and unchanged.

        - Added "-X transcript/transaction file" parameter
          to fastmail. This is useful when mailer=submission
          is used. Same option is also on elm, newmail and frm
          (on these cases transcript/transaction file will
           include passwords). Currently mailer=submission
          does not support SMTP AUTH, so there is no passwords
          on transcript/transaction file on that case now.

        - Added Message-ID: -generation to fastmail.

        - Use DEFAULT_BATCH_SUBJECT also on fastmail.

        - Added write_common_mailing_headers() to
          lib/mailer/write_common.c and hdrs/mailerlib.h
        - Used that on elm's src/mailmsg2.c and
          on fastmail.
        Note: If nohdrencoding is set on elmrc, now
               also fastmail (as elm does) adds
                 X-ELM-OSV: no-hdr-encoding=1
              to outgoing mails.       

        - Moved add_parameter() from src/mime_encode.c
          to lib/mailer/mime_encode.c

        - Added feed_common_mailing_headers() to
          lib/mailer/feed_common.c and hdrs/mailerlib.h
        - Used that on elm's src/mailmsg2.c and
          on fastmail

        - Added -H option to fastmail. If set, only
          Return-Path: -header field is read from
          ~/.elm/elmheaders file and other header fields
          are ignored.

        - Added similar generation of From: and Sender:
          header fields to fastmail than it is on
          elm -command. Global elm.rc option "add-sender"
          is now used also on fastmail.
          
        - Added sndhelper_get_sender(),
          sndhelper_handle_sender() to
          lib/mailer/senderhelper.c and hdrs/mailerlib.h
        - Used that on elm's src/mailmsg2.c and
          on fastmail

        - Moved build_address_classify_domain(),
          build_address_classify_message(),
          build_address_cancel_mode(),
          verify_mail_domain_util() from
          hdrs/me.h and src/addr_util.c to
          lib/mailer/senderhelper.c and hdrs/mailerlib.h

        - Changed static struct header_info header_types[]
          on lib/addr/headers.c so that In-reply-to: and
          References: are also allowed on .elm/elmheaders
          (although that is not very useful) or on 'invoke
          e(d)itor' buffer on header editing screen.

        - Added In-reply-to: and References: to
          'invoke e(d)itor' buffer on header editing
          screen. This is supported on
          static struct header_info header_types[]
          on lib/addr/headers.c. 

        - Moved print_edit_string(), add_addr_header(),
          add_string_header(), edit_headers_on_editor()
          from src/hdrconfg.h to src/edithdr.c

        - strftime() format specifier %r (The time in
          a.m. or p.m. notation) produces 12-hour clock
          without AM/PM notification on fi_FI.UTF-8
          locale (also %p produces empty result).
        > Changed default to 24-hour clock (without
          seconds).
        - Added elmrc option "pager-time-display".
          Option have values
                 legacy                         (same than month-day-year-12h)
                 default                        (same than month-day-year-HH-MM)
                 month-day-year-12h             month day, Year 12h (am/pm)
                                                strftime %b %d, %Y %r
                 month-day-year-24h             month day, Year 24h
                                                strftime %b %d, %Y %T
                 month-day-year-HH-MM           month day, Year HH:MH
                                                strftime %b %d, %Y %R
                 preferred                      Local preferred format
                                                strftime %c
                 day-month-year-12h             day month year 12h (am/pm)
                                                strftime %d %b %Y %r
                 day-month-year-24h             day month year 24h
                                                strftime %d %b %Y %T
                 day-month-year-HH-MM           day month year  HH:MM
                                                strftime %d %b %Y %R
                 YYYY-MM-DD-HH-MM               numeric YYYY-MM-DD HH:MM
                 YYYY-MM-DD-HH-MM-SS            numeric YYYY-MM-DD HH:MM:SS
          Sender's timezone is appended to time.
          This option controls how pager show message
          date and time on title line (top line) when "titles"
          elmrc option have value ON (default).
        - If Date: is unparsable, pager no longer show dummy
          date and time on title line.
        - If Date: is parsable, but year is too early or
          year is too late (time_t overflows on 32-bit
          systems), pager shows text "year " and year number 
          on place of date and time on title line (top line).

        - Replaced elm_date_str() with elm_date_text().
        - elm_date_text() will report "year xxxx" if date value
          is unsupported or overflow, but year is available
          (from time_menu_year at struct header_rec)

        - Changed that setting add-in-reply-to-phrase does not
          use elm_date_str()'s or elm_date_text()'s strftime
          for phrase time used on in-reply-to reply header field. Result
          of that is locale dependent. Changed that this
          uses date: -header format on phrase (actually
          implemented via  elm_date_text(), but not available as
          "pager-time-display" value).

        - Added  give_name_from_sockaddr() to lib/service_list.c 
          and hdrs/connection_imp.h   
        - Added elmrc option "address-lookup".
          Possible values are:
                   normal                Currently same than
                                        "gethostbyaddr"
                   gethostbyaddr        Use getgostbyaddr()
                   getnameinfo          Use getnameinfo()

          This option specifies how translation from ip-address
          to hostname is done. Default value "normal"  specifies
          that normal address -lookup API (that is gethostbyaddr())
          is done.
          Both gethostbyaddr() and getnameinfo() works
          also with IPv6 (on Linux). getnameinfo() is newer
          interface, but it can return only one name. gethostbyaddr()
          may return several names. Seems that getnameinfo()
          returns first name from /etc/hosts even
          when this is not best choice.

          This is currently only used when "generate-message-id"
          have {domainspec} value "default" and "mailer"
          is "submission" and that connection is not local.

        - Added give_SOCKADDR_ptr_as_string() to 
          lib/service_list.c and hdrs/connection_imp.h

	- Do not ask
	     Can I test if your mailer supports DSN options: -N -R -V?
	  on Configure if selected mailer is "none".

	- Changed Configure (actually shared_libs/tls/config)
	  so that it detects also on Ubuntu 18.4
	  that OpenSSL is available on system directory.

	- OpenSSL seems not include RAND_egd_bytes() on Ubuntu 18.4.
	  Now Configure (actually shared_libs/tls/config) tests
	  that RAND_egd_bytes() can be linked.

	- libelmme-tls module only used SSLv23_client_method() and
	  TLSv1_client_method(). Added Configure (actually shared_libs/tls/config)
	  test that
	       SSLv23_client_method()
	       TLS_client_method()	
	       TLSv1_client_method()
	       TLSv1_1_client_method()
	       TLSv1_2_client_method()
	  can be linked.
        - Changed prototype of create_TLS_stream()
	- Changed libelmme-tls module handle more protocol versions.
	- "tls:starttls-version" and "tls:tls-version" parameters
	  of global elm.mailservices and user's ~/.elm/mail.services
	  file now accepts new values:
		 tls-1			TLS 1 protocol
		 tls-1.1		TLS 1.1 protocol
		 tls-1.2		TLS 1.2 protocol
	  These "tls:starttls-version" and "tls:tls-version" parameters
	  also accepts old values:
		 none			disables STLS or STARTTLS
		 ssl			SSL or TLS, semantic varies
		 tls			TLS, semantic varies (default)
	  See details from shared_libs/tls/README.ME+ file.
	  
	  Default "tls" means that protocol TLS 1 is used or with
	  OpenSSL 1.1 that protocol TLS 1 or newer is used. Value
	  "ssl" probably means with OpenSSL 1.0 or older that
	  SSL 2 client hello packet is used.
	  
        NOTE: Configure (actually shared_libs/tls/config) disables
	      by default
	      TLSv1_client_method(),
	      TLSv1_1_client_method(), and
	      TLSv1_2_client_method()
	  on Ubuntu 18.4 because them are deprecated. This assumes
	  that compiler gives "is deprecated" message and user agrees
	  disabling on Configure prompt.

          ( However SSLv23_client_method() seems not produce
	    "is deprecated" message. )

        - Added "default-tls-version" elmrc option
	  to "tls:" section. This option accepts values:
		 ssl			SSL or TLS, semantic varies
		 tls			TLS, semantic varies (default)
		 tls-1			TLS 1 protocol
		 tls-1.1		TLS 1.1 protocol
		 tls-1.2		TLS 1.2 protocol
	   This is used, if "tls:starttls-version" and
	   "tls:tls-version" parameters does not exists on
	   global elm.mailservices or user's ~/.elm/mail.services
	   file for particular host and service.

	- Changed that Configure puts UU directory to build-directory when
	  -O option is used and not source directory when checking
	  that package is complete

	- Added $dummydomain to Configure. This is used if Configure
	  defaults to placeholder domain. That is '.localdomain'.
	- Added matches_dummy_domain() to  lib/mailer/senderhelper.c
	  and hdrs/mailerlib.h. That returns ".localdomain" if domain
	  ends .localdomain and Configure or setup_names() selected that
	  for placeholder domain. This is used for avoiding DNS
	  lookup.

        New elmrc option:
            address-lookup
            generate-message-id
            valid-msg-id-domains
            pager-time-display
	    tls:default-tls-version

        New files:
            lib/addr/md5_global.h
            lib/addr/md5.h
            lib/addr/md5c.c
            lib/addr/md5_wrapper.c
            lib/digest_wrapper.c
            hdrs/digest_imp.h
            lib/mailer/message-id.c
            lib/addr/digest.c
            lib/addr/outdate.c
            lib/mailer/write_common.c
            lib/mailer/feed_common.c
            lib/mailer/senderhelper.c
            src/edithdr.c
	    shared_libs/tls/tlsconf.h.SH

Message-ID generation
---------------------

        elm.rc option option "generate-message-id" tells
        how message-id should be generated for outgoing
        mail. Elm ME+ does not generate Message-ID
        header field if "generate-message-id" have
        value "none" or if Elm ME+ can't select
        "good" domain name to domain part (right
        side from '@') of message-id.

        Value of "generate-message-id" optios is either

        none                            Message-ID: -header field is not generated

        or value have form

        {localspec}@{domainspec}; {parameter}={value}...

        or

        {localspec}@domain.name; {parameter}={value}...

        {localspec} values includes:

        none                            Message-ID: -header field is not generated
        md5                             Use 16 octets md5 hash value from message
                                        content for generating local part of message-id.
        /dev/urandom                    Use 16 octets from /dev/urandom for
                                        generating local part of message-id.
        /proc/sys/kernel/random/uuid    Use content from /proc/sys/kernel/random/uuid
                                        as local part of message-id.

        Local part of message-id is generated from 16 octets same way on both
        md5 and /dev/urandom cases. Result includes 2 or 4 "words" which are
        separated by '.' characters (on 64-bit architecture result includes
        2 "words" and 32-bit architecture result includes 4 shorter "words").

        {domainspec} values includes:

        default                         Try following as domain part of message id
                                            1) value of "hostfullname" elmrc option
                                            2) mailer specific value (name of local
                                               address of connected socket on "submission"
                                               mailer, if connection is remote)
                                            3) First value from "mailname" elmrc option
        hostfullname                    Try value of "hostfullname" elmrc option as
                                        domain part of message id
        maildomain                      Try first value from "mailname" elmrc option as
                                        domain part of message id
 
        'domain.name' is any dns name which is tried as domain part of message id. This
        must include at least one dot ('.'). Without dot ('.') it is interpreted as
        {domainspec} keyword.

        {parameter} values includes:

        fallback-domain                 Overrides possible compile time default
                                        domain for domain part of message id
        default-cache-timeout           Default timeout for cached results
                                        of dns check for domain part of message id.
                                        May include unit: "s" for seconds, "m"
                                        for minutes, "h" for hours or "d" for days.
                                        Without unit gives default cache timeout on
                                        seconds.

        check-domain                    Value "none" indicates that dns check is not
                                        done and "valid-msg-id-domains" elmrc option
                                        must be used.

        check-domain                    Value "shared" indicates that shared routine
                                        (resolv -module) is used for dns check.

        min-domain-labels               Minimun number of domain labels (0-9) separated
                                        by '.' characters required for dns check.
                                        Value zero (0) disables counting of labels
                                        and rfc 822 special characters and whitespace
                                        are not checked.
                                        Note that '\.' does not count as label separator.

        With elmrc option 
           use-mailer-library = resolv 
        possible {parameter} value includes:

        check-domain                    Value "resolv" indicates that shared routine
                                        from resolv -module is used for dns check.
                                        
        {value} may be quoted string for "fallback-domain" and "check-domain".

        A domain part of message-id either must be listed on
        "valid-msg-id-domains" elmrc option or resolv -module must check that
        given dns name exists. If a  domain part of message-id is listed
        "special-use-domains-blacklist", dns check is not done and domain part
        is not accepted.

Warnings
-------- 

        - Not compiled with MMDF support defined, so probably it doesn't 
          work (or even compile).

        - This has not been tested much so there can be bad bugs. 

          Bug reports to: Kari E. Hurtta <elm@elmme-mailer.org>
                                     (was hurtta+elm@posti.FMI.FI)

        - Internationalized (ie. non-ASCII) domain names are not supported.

        - Support for multipart/signed and multipart/encrypted (specially: 
          support for PGP/MIME) only in reading side. There is no support 
          for attachments with multipart/encrypted.

        - HP's shoftkeys are no longer supported

        - DECNET addresses like host::user may be interpreted as phrase
          of group syntax or as route of source routed address.

        - Header editing screen now uses addresses in form phrase <address>, 
          but because it does not require using of comma (,), multiword 
          phrases must be entered in quotes. 

          For example:  "Kari Hurtta" <hurtta>

        - If address includes <> or comments (), they are not aliased 
          expanded. So aliases must be entered as bare words.

        - Addresses given as arguments to elm command should be given
          as one address per argument. Giving of sevaral addresses per 
          one argument causes that address is misparsed if header is 
          edited on header editing screen.

          That is:

                Use:    elm  '"Kari Hurtta" <hurtta>' 'Admin <root>'

          Don't use:    elm  'Kari Hurtta <hurtta>, Admin <root>'

        - p)rint command acts as P)rint text -command. So it
          is currently quite useless.
          p)rint command does that via readmsg -command. However
          P)rint text does actually same (without readmsg).

        - Some Linux libraries does not follow $LC_CTYPE when program is 
          setgid. Net result is that your locale is always C. That is 
          visible that $LC_CTYPE does not effect to locale printed by 
          'elm -vvvvv':

                Locale (LC_CTYPE):         C
                Display character-set:     US-ASCII
                Sending character-set:     US-ASCII

        - All refrences iso2022 maps are parsed and read to memory. 
          This may cause quite big memory consumption specially because 
          eastern (multibyte) sets tend to be lot of characters. That 
          mapping information should be shared between processes to 
          reduce memory consuption.

        - If display charset is produced by using mapping from locale 
          to charset where charset definition is later invalidated 
          ("removed") by setting explicit compatcharsets on user's 
          .elm/elmrc, that may  cause PANIC on elm's internal pager 
          or other problems. Invalidation happens if display charset 
          is on implicit compatcharsets list (because of charset 
          definition), but does not have explicit compatcharsets list 
          given by user. 

        - Neither Unicode didirectional algorithm nor Right-Left scripts 
          are supported.

        - In some situations two Status headers may be generated two 
          Status headers -- one by IMAP deamon and one from APPENDed 
          message.
                  
        - When APPENDing message to IMAP folder (which is normal UNIX 
          mailbox format) original "From " separator line can not be 
          preserved -- specially it is not possible to pass envelope 
          sender address.
  
        - For UTF-8 charset Elm only knows printable characters from 
          Latin/1 range, if unicode database (see elmrc option "unidata")
          is not loaded.

        - For using of ISO2022 character sets it is required that mapping 
          them to unicode is know -- otherwise Elm ME+ does not know which 
          characters are printable.

        - UTF-16 surrogate pairs (D800-DFFF) are not supported on UTF-7 
          charset.

        - Mixing of names using IMAP naming convention 
          (imap-naming-convention = yes)
          and names using imap-charset does not work very well...

        - "  Regarding my message (8 Aug 2000) regarding 'newmail' on 
           AIX 4.3.3 in an 'aixterm' window and the 'aixterm' did not 
          close, indeed the problem was NOT related to 'newmail' but an 
          AIX bug.

          IBM has release a patch, and the 'aixterm' in AIX 4.3.3 must
          be update with fileset X11.apps.aixterm.4.3.3.26 (PTF
          U473920) is solved to problem."
         From: Noam G. Nudelman  <noam@mail.biu.ac.il>

        - File /usr/share/locale/fi/charset gives charset name utf-8 on 
          Linux Mandrake 7.2. This causes that Configure generates 
          mapping
                fi      utf-8
          to elm.mimecharsets. However that seems to have
          incorrect mapping. You may want change this to
                fi      ISO-8859-1

          ( however nl_langinfo(CODESET) gives charset ISO-8859-15
            but look following entry. )

        - Locale 'fi' seems to have charset ISO-8859-15 according
          of nl_langinfo(CODESET)  on Mandrake Linux 7.2 (and probaly 
          others with same glibc version). However for example gnome 
          terminal uses font 
                -misc-fixed-medium-r-normal--12-200-75-75-c-100-iso8859-1
          and not
                -misc-fixed-medium-r-normal--12-200-75-75-c-100-iso8859-15

          Also KDE's konsole program seems use iso8859-1 character set
          although locale is 'fi' which should have ISO-8859-15 according
          of nl_langinfo (selecting "unicode" from menu seems fix that.)
         
          Because of mismatch more correct locale is fi_FI.88591, which gives
          ISO-8859-1 character set according of nl_langinfo(CODESET).

          ( Locale seems come from /etc/sysconfig/i18n or $HOME/.i18n )

        > To enable handling of ISO-8859-1 and ISO-8859-15 character sets
          on linux console, read comments from doc/terminal.info file.

        - Mandrake Linux 7.2 seems set LD_PRELOAD to load 
          /usr/lib/libxalflaunch.so.0. That (xalf-0.4-2mdk) causes that 
          elm to crash on startup (actually before main() is reached.)

        - kterm on Mandrake Linux 7.2 seems have (at least on my test
          environment) seems get bad fontlist (*VT100*fontList) which 
          gives bad font for iso8859-1 -- therefore ISO-8859-1 characters 
          do not work.
        
          ("xrdb -query" seems report resource with name "*fontList"
           -- that probably overrides "*VT100*fontList" which comes
           from /usr/lib/X11/app-defaults/KTerm )

        - Also note that initially kterm does NOT default to
          ISO-8859-1 -- therefore ISO-8859-1 works only when
          elm explicity switch to ISO-8859-1 (for example
          with 'elm -D ISO-8859-1')

        - When assembling message/partial MIME (RFC 2046) 
          requires that all headers except Content-*, Subject, 
          MIME-Version, Message-ID and Encrypted are copied from
          initial enclosing message to assembled message. It also 
          requires that headers except Content-*, Subject,
          MIME-Version,  Message-ID and Encrypted  are ignored and
          dropped from enclosed  message.

          For now we copy only Received: -headers. Dropping extra
          headers from enclosed message makes assembly more 
          complicated  (and dropping of Received: -headers
          from enclosed message do not make sense.)

        - mailer=sendmail; verify=yes works only when sendmail 
          is installed as setuid root. Use mailer=submission instead.
        * Starting from sendmail 8.12 sendmail is normally
          installed as setgid smmsp and not as setuid root.
        - However error message is printed only if 
          verify-local-address=yes is also set

        - IMAP connection is stalled some times. Reason is unknown.

Collector of these patches
--------------------------

        Kari Hurtta <elm@elmme-mailer.org>
        Kari Hurtta <hurtta+elm@siilo.FMI.FI>

diffstat: ConfTool/Makefile | 2 Configure | 419 +!! MANIFEST | 14 README.ME+ | 718 +++++! config.h.SH | 20 doc/elm.1 | 22 doc/elmrc-info | 165 + doc/fastmail.1 | 27 doc/frm.1 | 5 doc/newmail.1 | 4 hdrs/addrlib.h | 110 hdrs/connection_imp.h | 51 hdrs/cs_imp.h | 22 hdrs/digest_imp.h | 67 hdrs/elmlib.h | 134 + hdrs/hdr_imp.h | 142 ! hdrs/mailer_imp.h | 14 hdrs/mailerlib.h | 166 + hdrs/me.h | 64 hdrs/melib.h | 6 hdrs/misclib.h | 6 hdrs/patchlevel.h | 10 hdrs/s_elm.h | 12 hdrs/s_fastmail.h | 4 hdrs/s_me.h | 32 hdrs/s_tls.h | 4 hdrs/save_opts.h | 15 hdrs/shared_imp.h | 14 lib/MAGIC | 4 lib/Makefile.SH | 4 lib/addr/Makefile.SH | 9 lib/addr/date.c | 520 !!!! lib/addr/def_addr.h | 13 lib/addr/digest.c | 248 ++ lib/addr/error.c | 7 lib/addr/getaddr.c | 11 lib/addr/getid.c | 15 lib/addr/headers.c | 12 lib/addr/init.c | 8 lib/addr/md5.h | 55 lib/addr/md5_global.h | 56 lib/addr/md5_wrapper.c | 351 +++ lib/addr/md5c.c | 358 +++ lib/addr/outdate.c | 183 + lib/addr/outexpires.c | 116 ! lib/addr/outheaders.c | 688 +++!!! lib/addr/parsarpdat.c | 8 lib/addr/write_hdr.c | 270 +! lib/atonum.c | 9 lib/can_open.c | 37 lib/cancel.c | 12 lib/cs_binary.c | 78 lib/cs_iso2022.c | 6 lib/cs_unknown.c | 5 lib/cs_utf.c | 99 lib/debug.c | 45 lib/digest_wrapper.c | 511 ++++ lib/mailer/Makefile.SH | 13 lib/mailer/def_mailer.h | 18 lib/mailer/feed_common.c | 188 + lib/mailer/init.c | 18 lib/mailer/mailer.c | 75 lib/mailer/message-id.c | 4364 +++++++++++++++++++++++++++++++++++++++++ lib/mailer/mime_encode.c | 37 lib/mailer/outheaders.c | 15 lib/mailer/senderhelper.c | 993 +++++++++ lib/mailer/shared_mailer.c | 313 !! lib/mailer/write_common.c | 287 ++ lib/mbox/connection.c | 8 lib/misc/Makefile.SH | 4 lib/misc/charset.c | 12 lib/misc/def_misc.h | 7 lib/misc/init.c | 7 lib/output.c | 24 lib/read_rc.c | 189 lib/remote_mbx.c | 506 ++! lib/service_list.c | 878 +++++++! lib/shared.c | 117 + lib/state_out.c | 31 lib/static-hosts.c | 9 lib/streamsched.c | 220 lib/string.c | 163 + lib/syscall.c | 13 melib/mime_param.c | 6 nls/C/C/C/s_elm.m | 25 nls/C/C/C/s_fastmail.m | 8 nls/C/C/C/s_me.m | 64 nls/C/C/C/s_tls.m | 8 shared_libs/iconv/iconv.c | 7 shared_libs/include/shared.h | 21 shared_libs/resolv/query.c | 6 shared_libs/resolv/resolv.c | 473 +++ shared_libs/smtp/smtp.c | 307 +! shared_libs/tls/Makefile.SH | 11 shared_libs/tls/README.ME+ | 62 shared_libs/tls/config | 275 ++ shared_libs/tls/elmrc-tls-info | 16 shared_libs/tls/elmtls.h | 23 shared_libs/tls/imap.c | 59 shared_libs/tls/pop.c | 67 shared_libs/tls/remote.c | 59 shared_libs/tls/smtp.c | 56 shared_libs/tls/tls.c | 711 +!!!!! shared_libs/tls/tlsconf.h.SH | 68 src/Makefile.SH | 10 src/addr_util.c | 789 -----!! src/args.c | 51 src/block/def_block.h | 6 src/browser.c | 47 src/command/command.c | 18 src/date.c | 268 ! src/def_elm.h | 6 src/edithdr.c | 892 ++++++++ src/elm.c | 7 src/fbrowser.c | 6 src/file.c | 6 src/hdrconfg.c | 618 ----- src/in_utils.c | 8 src/leavembox.c | 84 src/list/visit_mailbox.c | 61 src/mailmsg2.c | 1197 ++-!!!!!!! src/messages/Makefile.SH | 4 src/messages/def_messages.h | 6 src/metapager.c | 16 src/mime_encode.c | 38 src/mkhdrs.c | 11 src/opt_generic.c | 6 src/out_utils.c | 573 +++++ src/quit.c | 67 src/remail.c | 26 src/screen/screen.c | 43 src/showmsg_c.c | 6 src/signals.c | 15 src/url/def_url.h | 6 src/utils.c | 8 utils/Makefile.SH | 6 utils/elmlibregister.c | 5 utils/fastmail.c | 914 +++++!!! 138 files changed, 15168 insertions(+), 1506 deletions(-), 5998 modifications(!)