2020-12-29  Sergey Poznyakoff  <gray@gnu.org>

	Version 8.9

	* NEWS: Update.
	* configure.ac: Update.
	* doc/functions.texi (dkim_verified_signature_tag): Add missing
	type declaration.
	* tests/hdr-cap.at: Ignore X-* headers.
	* tests/hdr-mul.at: Likewise.

2020-11-19  Sergey Poznyakoff  <gray@gnu.org>

	Remove old code.

	* src/builtin/mbox.bi (mailbox_open): Remove a left-over workaround,
	not needed since mailutils commit d7a596df78.

2020-11-08  Sergey Poznyakoff  <gray@gnu.org>

	Remove obsolete ifdefs

	Version 8.8.92

	New builtin function: geoip2_get_json

	* src/builtin/geoip2.bi (geoip2_get): Throw e_range if the lookup
	path does not exist in the returned data.
	Return empty string if there is no data in the entry.
	(geoip2_get_json): New function.
	* src/prog.c (heap_obstack_vsprintf): Don't overwrite previously
	written data.
	* doc/functions.texi: Describe the geoip2 functions.
	* NEWS: Update.

2020-11-06  Sergey Poznyakoff  <gray@gnu.org>

	geoip2 support

	* configure.ac: Check for libmaxminddb.
	* src/Makefile.am (mailfromd_LDADD): Add GEOIP2_LIBS.
	* src/builtin/Makefile.am: Add geoip2.bi
	* src/builtin/geoip2.bi: New file.
	* src/main.c (mailfromd_show_defaults): Reflect the status of geoip2
	support.

	New functions for printf-style operations on the heap temporary space.

	* src/builtin/snarf.m4 (MF_OBSTACK_PRINTF): New macro.
	* src/prog.c (heap_obstack_size, heap_obstack_vsprintf)
	(heap_obstack_sprintf): New functions.
	(env_vsprintf): Create copy of the va_list prior to using it and
	dispose of it afterwards.
	* src/prog.h (heap_obstack_vsprintf, heap_obstack_sprintf): New protos.

2020-11-05  Sergey Poznyakoff  <gray@gnu.org>

	Improve numeric overflow checking during stack/data reallocation

	* src/gram.y (strtosize): Improve numeric overflow checking.
	* src/prog.c (expand_dataseg): Change signature.  Improve
	reallocation strategy and overflow checking.  Don't throw exception
	on error, that's the responsibility of the caller.
	All uses changed.
	* src/prog.h (expand_dataseg): Change signature.
	* src/builtin/debug.bi (_expand_dataseg): Update call to expand_dataseg.

2020-11-04  Sergey Poznyakoff  <gray@gnu.org>

	Reimplement several DNS functions in pure MFL

	* NEWS: Update.
	* doc/functions.texi: Update.
	* mflib/dns.mf4 (dns_getname, dns_getaddr)
	(getns, getmx): New functions.
	* src/builtin/dns.bi (dns_getname, dns_getaddr)
	(getns, getmx): Remove.

	Add tests fir dns_query

	* tests/dns_query.at: New file.
	* tests/Makefile.am: Add dns_query.at
	* tests/testsuite.at: Likewise.
	* tests/atlocal.in (MFOPTS): Change order of the include directories.

	Version 8.8.91

	dns_query: remove the arbitrary limit on the number of replies

	* src/builtin/dns.bi: Use the module private storage for reply table.

2020-11-03  Sergey Poznyakoff  <gray@gnu.org>

	Implement the dns_query function: a generalized API for DNS queries

	* mflib/dns.mf4 (DNS_TYPE_A, DNS_TYPE_NS)
	(DNS_TYPE_PTR, DNS_TYPE_MX, DNS_TYPE_TXT): New constants.
	* src/builtin/dns.bi (dns_query): New function.
	(dns_reply_release,dns_reply_count)
	(dns_reply_string,dns_reply_ip): New functions.
	* src/prog.c (eval_environ): Rename cleanup_list to function_cleanup_list.
	New member environ_cleanup_list.
	(env_environ_cleanup_add): New function.
	* src/prog.h (env_environ_cleanup_add): New proto.
	* doc/functions.texi: Document the dns_query function.
	* NEWS: Likewise.

	Doc: Remove references to non-existing DNS cache

	Expect 15 shift/reduce in grammar

	Don't assume smallbook in docs.

2020-11-02  Sergey Poznyakoff  <gray@gnu.org>

	Fix typo

	Document the sed construct.  Implement the qr() builtin.

	* doc/Makefile.am: Remove sexp.texi.
	* doc/sexp.texi: Remove.
	* doc/functions.texi: Document the sed function.
	* doc/mailfromd.texi: Update.
	* src/builtin/snarf.m4 (__MF_DEFUN_FLAGS__): New macro.
	(__mf_add_defun_flag)
	(__mf_mfl_type,__mf_arglist_init): New macros.
	(__mf_defun): Use __mf_arglist_init to initialize __MF_ARGLIST__ and
	the defun flags.
	(__MF_NEEDS_CAPTURE__): Remove.
	(MF_CAPTURE): Set MFD_BUILTIN_CAPTURE directly, instead of setting
	__MF_NEEDS_CAPTURE__.
	* src/builtin/string.bi (qr): New function.
	* src/gram.y (funcall: T_BUILTIN): Special handling for builtins
	with MFD_BUILTIN_REGEX_FLAGS flag set.
	* src/mailfromd.h (MFD_BUILTIN_REGEX_FLAGS): New flag.
	* tests/sed.at: Rename qr to myqr to avoid name clash with the
	builtin.

	* configure.ac: Version 8.8.90
	* NEWS: Document the sed and qr functions.

2020-11-01  Sergey Poznyakoff  <gray@gnu.org>

	MFL: New built-in function "sed".

	The "sed" function (actually, a statement) transforms its first argument
	using the sed expressions given in its subsequent arguments and returns the
	result:

	  set res sed(input, 's/foo/bar/g', 's/bar/Baz/')

	* lib/libmf.h (transform_append_t)
	(transform_reduce_t): Remove typedefs.
	(transform_string): Change signature.
	* lib/transform.c (parse_transform_expr): Fix parsing of the
	regexp part.
	(transform_string): Rewrite.  No additional callbacks needed.
	* src/drivers.c: New node types: 'sedcomp', to compile the sed
	transformation expression, and 'sed', to apply it.
	* src/gram.y: New production for sed(arg, expr).
	* src/lex.l (sed): New keyword.
	* src/mailfromd.h (sedcomp_node, sed_node): New structs.
	(node): Add new sedcomp_node and sed_node parts to the union.
	* src/opcodes (SEDCOMP, SED): New opcodes.
	* src/prog.c (next_transform_index)
	(install_transform,get_transform): New functions.
	(instr_sedcomp, instr_sed): New instruction handlers.
	* src/symbols.c (import_rules_eval): Simplify transform expression
	handling.

	* tests/sed.at: New file.
	* tests/Makefile.am: Add sed.at
	* tests/testsuite.at: Include sed.at

2020-10-31  Sergey Poznyakoff  <gray@gnu.org>

	Bugfix in the mfl-mode

	* elisp/mfl-mode.el (mfl-next-line-indentation): Handle the beginning
	of buffer case.

2020-07-26  Sergey Poznyakoff  <gray@gnu.org>

	Version 8.8

2020-07-24  Sergey Poznyakoff  <gray@gnu.org>

	Update copyright years

	Version 8.7.92

2020-07-23  Sergey Poznyakoff  <gray@gnu.org>

	Fix compilation without libnettle

	* NEWS: Version 8.7.91
	* configure.ac: Likewise.
	Define WITH_DKIM.
	* mflib/Makefile.am [NETTLE_COND]: Add dkim.mf conditionally.
	* src/Makefile.am [NETTLE_COND]: Remove appending to AM_CPPFLAGS:
	symbol defined in config.h
	* src/builtin/Makefile.am (BI_FILES): Add dkim.bi unconditionally.
	* src/builtin/dkim.bi: Mark source with MF_COND(WITH_DKIM)

2020-07-22  Sergey Poznyakoff  <gray@gnu.org>

	Fix compilation with gcc 10

	* gacopyz/gacopyz_priv.h (__gacopyz_log_printer): Mark as extern.
	* lib/mfdb.h (cache_format, rate_format)
	(tbf_rate_format,greylist_format): Mark as extern.
	(predict_rate,predict_next_option): New externs.
	* src/dkim.c (dkim_signature_parse): Fix improper use of unprefixed
	WRDSF_ constant.
	* src/mfdbtool.c (predict_rate,predict_next_option): Remove variable
	declarations.
	* src/savsrv.c (writeout): Use memcpy instead of strncpy to shut
	up the gcc warning.
	* src/srvcfg.c (negative_expire_interval): Remove declaration.

2020-07-13  Sergey Poznyakoff  <gray@gnu.org>

	Fix the use of deprecated CPPFunction* in mtasim

	Implement enumerations in MFL

	* src/gram.y: Implement enumerated constant definitions.
	* src/mailfromd.h (define_constant): Remove const from the
	return type.
	* src/symbols.c: Likewise.

	* tests/enum.at: New test.
	* tests/Makefile.am: Add new test.
	* tests/testsuite.at: Likewise.

	* NEWS: Mention new features.
	* doc/mailfromd.texi: Document new features.

	Minor fix

	* src/lex.l (lex_new_source_0): Initialize yylloc early.  This makes
	sure that eventual syntax errors occurring at the first token are
	printed with detailed location (filename:line.start-end)

	Fix compilation without external preprocessor

2020-07-11  Sergey Poznyakoff  <gray@gnu.org>

	Minor fix in the docs

	Provide DKIM_EXPL_ codes for use in MFL

	* doc/functions.texi: Document changes
	* mflib/status.mf: Define DKIM_EXPL_ constants
	* src/dkim.c (dkim_explanation_str): Change the wording of
	DKIM_EXPL_BAD_BASE64 error string.
	* src/dkim.h: Define DKIM_EXPL_ using _MFL_DKIM_EXPL_ ones

2020-07-10  Sergey Poznyakoff  <gray@gnu.org>

	Minor fix

	Minor fixes

	* src/builtin/dkim.bi (dkim_sign): Insert DKIM-Signature at position 0.
	* src/dkim.c (dkim_signature_format): Don't request MU_STREAM_STAT_OUTLN

	Provide additonal data upon successful return from mfd_dkim_verify

	* doc/functions.texi: Document new functions and variables.
	* mflib/Makefile.am: Add dkim..mf
	* mflib/dkim.mf: New function.
	* src/builtin/dkim.bi (dkim_verified_signature): New MFL variable.
	(dkim_verify): Set dkim_verified_signature upon return.
	* src/dkim.c (mfd_dkim_verify): Return normalized DKIM signature
	value in the memory location pointed to by the second argument.
	* src/dkim.h (mfd_dkim_verify): Change signature.

	Rewrite DKIM parser and formatter

	DKIM: implement l= tag

2020-07-09  Sergey Poznyakoff  <gray@gnu.org>

	DKIM: Minor change

	* src/dkim.c (dkim_hash): Use dkim_header_list_first/
	dkim_header_list_first/dkim_header_list_end instead of mu_wordsplit
	to iterate over the list of headers.

	Implement DKIM-Signature wrapping. Fix DKIM interaction with header_replace

	* src/builtin/dkim.bi (do_msgmod): When processing header_replace,
	first check if the requested header is already present.  If it is,
	proceed with header insert.  Otherwise do mu_header_append.  This
	mimics the Sendmail behaviour.
	* src/dkim.c (dkim_header_list_end, dkim_header_list_next)
	(dkim_header_list_first): New functions.
	(dkim_signature_format): Rewrite.  Take additional argument crlf.
	When set, insert CRLF instead of LF when wrapping.

	DKIM: Fix verification in case of wrapped DKIM-Signature

	* src/dkim.c: tranlsate lf->crlf before hashing

	Fix DKIM record parsing to comply to RFC 6376

	* src/dkim.c (dkim_signature_parse,dnsrec_parse): Allow for FWS
	as per RFC 6376, section 3.2

2020-07-07  Sergey Poznyakoff  <gray@gnu.org>

	Fixes in DKIM code

	* lib/dns.c (dkim_lookup): The v= tag is optional.
	* src/builtin/dkim.bi (dkim_sign): Insert the created header at
	the beginning.
	(dkim_verify): Mark with MF_DSEXP.
	* src/dkim-canonicalize.c (dkim_canonicalizer): Fix relaxed body
	canonicalization: ignore whitespace at the end of the line (before
	CRLF).
	* src/dkim.c (dkim_str_to_canon_type): Take two arguments.  Return
	the pointer to the first character after the spec in *endp.
	All uses changed.
	(dkim_signature_parse): Fix typo (missing else).
	Fix c= tag parsing.
	(dkim_sig_validate): The q= tag is optional.
	Fix verification of the i= tag.
	(pubkey_validate): Validate v= tag, if supplied.
	Fix validation of the key type and algorithm.
	* src/dkim.h (DKIM_KEYRECORD_VERSION): New constant.

	Remove mudefs.h

2020-07-06  Sergey Poznyakoff  <gray@gnu.org>

	Move mu_stream_shift to GNU mailutils

	This partially reverts 7049008599.  The function itself, which had
	been introduced in anticipation of its possible use in DKIM module,
	was never actually used.

	Implement DKIM verification

	* lib/dns.c (dkim_lookup): New function.
	* lib/dns.h (dkim_lookup): New proto.
	* mflib/status.mf (DKIM_VERIFY_OK, DKIM_VERIFY_PERMFAIL)
	(DKIM_VERIFY_TEMPFAIL): New constants.
	* src/builtin/dkim.bi (msgmod_data) <h_list>: New member.
	(do_msgmod): Ignore modification commands that affect headers
	not listed in h=.
	(dkim_sign): Initialize v, a, and q members of
	struct dkim_signature.
	(dkim_explanation_code, dkim_explanation): New MFL variables.
	(dkim_verify): New function.
	* src/dkim.c (pubkey_from_base64): New function.
	(dkim_header_list_match): New function.
	(dkim_signature_format): Format new members of the struct dkim_signature.
	(dkim_signature_free): New function.
	(dkim_signature_parse): New function.
	(dkim_hash): New function.
	(mfd_dkim_sign): Rewrite using dkim_hash.
	(dkim_explanation_str)
	(dkim_result_trans): New globals.
	(mfd_dkim_verify): New function.
	* src/dkim.h (dkim_header_list_match): New proto.
	(mfd_dkim_verify): New proto.
	(DKIM_VERSION,DKIM_SIGNATURE_HEADER)
	(DKIM_QUERY_METHOD,DKIM_ALGORITHM): New constants.
	(dkim_signature) <a,q,v>: New members.
	(DKIM_EXPL_*): New constants.
	(DKIM_VERIFY_*): New constants.
	(dkim_explanation_str, dkim_result_trans): New externs.

	* NEWS: Document changes.
	* doc/functions.texi: Likewise.

2020-07-04  Sergey Poznyakoff  <gray@gnu.org>

	dkim: take into account changes applied by MMQ

	* mflib/status.mf (e_badmmq): New exception: MMQ incompatible with
	the signing function (currently for dkim_sign).
	* src/builtin/dkim.bi (dkim_sign): Apply MMQ to the temporary message
	prior to calling mfd_dkim_sign.
	* src/mailfromd.h (env_msgmod_apply): Change the return type.
	* src/prog.c (env_msgmod_apply): Return int code from mu_list_foreach.
	* src/dkim.c (mfd_dkim_sign): Fix the type of the c auto.

2020-07-03  Sergey Poznyakoff  <gray@gnu.org>

	Move MMQ from milter context to program evaluation environment.

	* src/engine.c: (message_data): Remove mmq.  Use env_msgmod functions
	to access it.  All uses updated.
	(ctx_msgmod): Removed.
	(priv_store_msgmod_closure): Removed.
	(mlfi_eom): Use env_msgmod_count to check the size of the message
	modification queue and env_msgmod_apply to apply it.
	* src/mailfromd.h (env_msgmod): Rename to env_msgmod_append.
	(env_clear_msgmod): Rename to env_msgmod_clear.
	(env_msgmod_apply): New proto.
	* src/prog.c (ENVF_MSGMOD): Remove.
	(eval_environ) <flags,mmq>: Remove.
	(instr_result): Use env_msgmod_count to chech for mmq size.
	(env_clear_msgmod): Rewrite and rename to env_msgmod_clear.
	(env_msgmod): Rewrite and rename to env_msgmod_append.
	(env_msgmod_count): New function.
	(destroy_environment): Destroy env->mmq

2020-07-02  Sergey Poznyakoff  <gray@gnu.org>

	Remove header_delete_nth and header_replace_nth.

	Both functions were unable to do their work properly, due to the
	deficiences of the Milter API.

	Rewrite header_rename, header_prefix_all and header_prefix_pattern.

	* NEWS: Update.
	* doc/functions.texi: Update discussion of header modification
	functions.
	* mflib/header_rename.mf4: Rewrite.
	* src/builtin/header.bi (header_delete_nth)
	(header_replace_nth): Remove.
	* src/builtin/vars.bi (sendmail_header_count): Remove.
	(get_sendmail_header_count,set_sendmail_header_count): Remove.
	* src/engine.c (message_data): Remove members: hdrtrans, hdrcount.
	All uses changed.
	(md_hdrtrans_fill,md_hdrtrans): Remove.
	* src/mailfromd.h (header_delete_nth,header_replace_nth): Remove.
	All uses changed.

2020-06-30  Sergey Poznyakoff  <gray@gnu.org>

	Fix typos

2020-05-29  Sergey Poznyakoff  <gray@gnu.org>

	New function: mfd_temp_stream_shift

	Shifts the contents of temporary stream between two offsets.

	* lib/Makefile.am: Add new sources.
	* lib/libmf.h (mfd_temp_stream_shift): New proto.
	* lib/mudefs.h (MUREF): Remove.
	Define _MFD_USE_STREAM_SHIFT depending on mailutils version.
	* lib/mustrmshift.c: New file.
	* lib/streamshift.c: New file.

	* src/Makefile.am (AM_CPPFLAGS) [NETTLE_COND]: Define WITH_DKIM.
	* src/main.c (mailfromd_show_defaults): Reveal whether DKIM is supported.

	* tests/Makefile.am: Add new tests.
	* tests/testsuite.at: Likewise.
	* tests/resolv.c: Fix formatting.
	* tests/streamshift.at: New file.
	* tests/streamshift.c: New file.
	* tests/.gitignore: Update.

2020-05-26  Sergey Poznyakoff  <gray@gnu.org>

	Implementation of DKIM signing

	* configure.ac: Detect presence of nettle libraries.
	* src/Makefile.am: Add new sources.
	* src/dkim-canonicalize.c: New file.
	* src/dkim.c: New file.
	* src/dkim.h: New file.
	* src/builtin/Makefile.am: Add new sources.
	* src/builtin/body.bi (current_message): Rewrite as a simple
	wrapper over bi_get_current_message.
	* src/builtin/dkim.bi: New file.
	* src/builtin/msg.bi (bi_get_current_message): Optionally return
	the message itself.
	* src/builtin/msg.h (bi_get_current_message(: Change signature.
	* src/builtin/snarf.m4 (env_get_stream): Fix quoting.

	* NEWS: Document changes.
	* doc/functions.texi: Document the dkim_sign function
	* doc/mailfromd.texi: Minor changes.

2019-09-07  Sergey Poznyakoff  <gray@gnu.org>

	Minor fixes

	* src/main.c (mf_cfg_param): Remove the surplus "database"
	section: it is already included in srvcfg.c
	* src/prog.c (env_register_auto): Use mu_diag_cont_printf to
	continue diagnostic message without inserting unnecessary
	<> directives (perhaps should be fixed in mailutils).

2019-06-18  Sergey Poznyakoff  <gray@gnu.org>

	Don't accept database types not supported by mailutils

	For details, see the last paragraph in:

	http://mail.gnu.org.ua/mailman/listarchive/bug-mailfromd/2019-06/msg00001.html

	* configure.ac (db_type_to_feature): Make sure empty string is never
	returned.

2019-01-29  Sergey Poznyakoff  <gray@gnu.org>

	Fixes in runtime memory management

	* src/builtin/sprintf.bi: Don't use pointer to format: the latter
	might be reallocated during stack expansions, and the pointer would
	end up pointing to freed memory area. Another way to fix it would be
	to make env_register_auto and env_pop_auto global and to mark the
	address of pointer with env_register_auto so it would be reallocated
	together with format. However, I wouldn't like to expose too much of
	the internals of prog.c.
	* src/prog.c (env_get_locus)
	(heap_obstack_grow,pushs): Fix argument to env_register_auto.
	(env_register_auto): Check if the argument points to a memory
	location within data segment + stack. This is necessary, because
	heap_obstack_grow registers its argument, which at least in one case
	is a pointer to an automatic variable (see MF_OBSTACK_1GROW in
	builtin/snarf.m4).
	(env_pop_auto,env_unregister_autos)
	(env_fixup_autos): Make static.

	Fix in callout

	* src/callout.c (reset): Send \r\n after RSET.

2019-01-24  Sergey Poznyakoff  <gray@gnu.org>

	Minor fixes.

	* doc/mtasim.texi: Fix description of the milter timeout letters.
	* mtasim/Makefile.am (mtasim_DEPENDENCIES): Depend on libmf and
	libgacopyz

2019-01-03  Sergey Poznyakoff  <gray@gnu.org>

	Version 8.7

	* NEWS: Update.
	* configure.ac: Raise minor version.
	* doc/functions.texi: Document new functions

	Include the implementation of the NS resolving MFL functions, as
	proposed by Jan Rafaj

	* lib/dns.c (ns_lookup): New function.
	* lib/dns.h (ns_lookup): New proto.
	* mflib/dns.mf4 (hasns): New function.
	* src/builtin/dns.bi (primitive_hasns, getns): New functions.

	Update copyright years

2018-11-09  Sergey Poznyakoff  <gray@gnu.org>

	Document debug categories. Fix improper use of decimal constants instead of MU_DEBUG_TRACE identifiers

	Fix docstring for the "debug" statement in the config-help output.

2018-11-08  Sergey Poznyakoff  <gray@gnu.org>

	mtasim: don't clobber existing callout socket when used with -Xauto

	* doc/mailfromd.texi: Document the --callout-socket option.
	* mtasim/mtasim.c (start_mailfromd): Supply the --callout-socket option.
	* src/main.c: New option --callout-socket

	Silently ignore non-existing keys in dbdel

	* src/builtin/db.bi (dbdel): Treat MU_ERR_NOENT as success.

2018-11-07  Sergey Poznyakoff  <gray@gnu.org>

	Fix the functionality of the mailfromd --mtasim option

	This option must discard the effect of the server.listen statement
	This also fixes mtasim -Xauto

	* src/main.c (mailfromd_options): Process the --mtasim option immediately.

2018-11-05  Sergey Poznyakoff  <gray@gnu.org>

	Change generation of debug names for built-in modules

	* src/builtin/Makefile.am (.bi.c): Don't define SOURCE
	* src/builtin/snarf.m4 (MF_SOURCE_DEBUG_NAME): Remove.
	(MF_MODULE_DEBUG_NAME): New macro.
	(_init_builtin): Use MF_MODULE_DEBUG_NAME

	Partially revert "Fix indentation of the generated sources"

	GNU indent reformats the sources. As a result, preprocessor #line
	directives become misleading.

2018-11-04  Sergey Poznyakoff  <gray@gnu.org>

	Fix indentation of the generated sources

	* NEWS: Version 8.6.90
	* configure.ac: Version 8.6.90
	Check for GNU indent
	* am/indent.m4: New file.
	* src/builtin/Makefile.am (EXTRA_DIST): Add indent.pro
	(.bi.c, .def.h): Use GNU indent if available.
	* src/builtin/indent.pro: New file.
	* src/builtin/snarf.m4: Minor change.

2018-11-03  Sergey Poznyakoff  <gray@gnu.org>

	Revise preprocessor macros for builtin functions.

	* doc/mailfromd.texi: Minor change.
	* src/builtin/Makefile.am (builtin.h): Depend pn init.m4
	(.bi.c): Don't eliminate first #line
	* src/builtin/snarf.m4 (MF_BUILTIN_MODULE): New macro.
	(MF_INIT): Rewrite.
	Revise comments.
	* src/builtin/init.m4 (MF_BUILTIN_MODULE): New macro.
	(MF_INIT): Remove.

	* src/builtin/body.bi: Use MF_BUILTIN_MODULE statement.
	* src/builtin/burst.bi: Likewise.
	* src/builtin/callout.bi: Likewise.
	* src/builtin/ctype.bi: Likewise.
	* src/builtin/curhdr.bi: Likewise.
	* src/builtin/db.bi: Likewise.
	* src/builtin/debug.bi: Likewise.
	* src/builtin/dns.bi: Likewise.
	* src/builtin/dspam.bi: Likewise.
	* src/builtin/email.bi: Likewise.
	* src/builtin/from.bi: Likewise.
	* src/builtin/geoip.bi: Likewise.
	* src/builtin/gethostname.bi: Likewise.
	* src/builtin/getopt.bi: Likewise.
	* src/builtin/getpw.bi: Likewise.
	* src/builtin/gettext.bi: Likewise.
	* src/builtin/header.bi: Likewise.
	* src/builtin/io.bi: Likewise.
	* src/builtin/ipaddr.bi: Likewise.
	* src/builtin/macro.bi: Likewise.
	* src/builtin/mail.bi: Likewise.
	* src/builtin/mbox.bi: Likewise.
	* src/builtin/mmq.bi: Likewise.
	* src/builtin/msg.bi: Likewise.
	* src/builtin/other.bi: Likewise.
	* src/builtin/prereq.bi: Likewise.
	* src/builtin/progress.bi: Likewise.
	* src/builtin/qrnt.bi: Likewise.
	* src/builtin/rate.bi: Likewise.
	* src/builtin/rcpt.bi: Likewise.
	* src/builtin/sa.bi: Likewise.
	* src/builtin/sieve.bi: Likewise.
	* src/builtin/spf.bi: Likewise.
	* src/builtin/sprintf.bi: Likewise.
	* src/builtin/string.bi: Likewise.
	* src/builtin/syslog.bi: Likewise.
	* src/builtin/system.bi: Likewise.
	* src/builtin/vars.bi: Likewise.

	Minor change

	* mflib/callout.mf4 (callout_do): Return true for null return address.

2018-11-01  Sergey Poznyakoff  <gray@gnu.org>

	Quote arguments in the callout transactions in poll

	Minor fixes in the docs

	Avoid spurious warnings from libadns

	* tests/resolv_a.at: Always pass -f option to resolv to
	prevent eventual "unknown option" messages from libadns.

2018-10-26  Sergey Poznyakoff  <gray@gnu.org>

	Bugfix

	* lib/dns.c (dns_str_is_ipv4): Don't tolerate whitespace and
	extra dots.

2018-07-24  Sergey Poznyakoff  <gray@gnu.org>

	configure: accept any DBM type supported by mailutils as the default implementation

	* NEWS: Version 8.6
	* configure.ac: New configure option --with-dbm
	* doc/mailfromd.texi: Update.
	* doc/upgrade.texi: Update.

	Reword copyright statement in accordance with the GFDL addendum

	This pacifies lintian.

	Bugfixes

	* elisp/mfl-mode.el: Fix byte-compilation.
	* git2chg.awk: Ignore git-svn-id:
	* src/pp.c (pp_extrn_shutdown): Report errors.

2018-07-24  Sergey Poznyakoff  <gray@gnu.org.ua>

	Version 8.5

	Update copyright years

	Ensure proper integer promotion in vm.

	* src/prog.c (pushn): New function.
	Use pushn wherever a numeric or boolean return type is required.
	* src/prog.h (mf_c_cast): Minor change.

2018-03-23  Sergey Poznyakoff  <gray@gnu.org>

	Fix dns_resolve_ipstr

	* lib/dns.c (dns_resolve_ipstr): Select rrtype depending on the
	domain in question. This should produce the same results as it was
	in the previous res_query implementation, which queried for T_ANY
	and selected the first RR type returned.

2017-11-21  Sergey Poznyakoff  <gray@gnu.org>

	Ensure case-insensitive comparison of SPF record marker.

	* lib/dns.c (spf_lookup): ignore case when looking for v=spf1

	Normalize inclusion of mailutils headers

2017-11-20  Sergey Poznyakoff  <gray@gnu.org.ua>

	Concatenate segments of a TXT record.

	* lib/dns.c (txt_lookup): Concatenate multiple ans->rrs.manyistr.

	Fix resolving of queries containing invalid characters

	* lib/dns.c (DEFAULT_QFLAGS): Add adns_qf_quoteok_query

2017-11-03  Sergey Poznyakoff  <gray@gnu.org>

	Version 8.4

	* NEWS: Update.
	* configure.ac: Update.
	* doc/upgrade.texi: Update.

2017-11-02  Sergey Poznyakoff  <gray@gnu.org>

	Bugfix

	* lib/srvman.c: Use mu_sys_sockaddr_to_astr
	* configure.ac: Require mailutils 3.4

2017-11-02  Sergey Poznyakoff  <gray@gnu.org.ua>

	Version 8.3

	Update documentation

	calloutd: implement the --resolv-conf-file option

	Remove cover requirement from doc license text

	Documentation and configuration changes

	* configure.ac: Remove leftover checks for libresolv.
	* doc/upgrade.texi: Document recent changes.

2017-11-01  Sergey Poznyakoff  <gray@gnu.org.ua>

	Improve ADNS return status handling.

	* lib/dns.c (adns_to_dns_status): Rewrite.

2017-10-25  Sergey Poznyakoff  <gray@gnu.org.ua>

	Update docs. Version 8.2.91

2017-10-25  Sergey Poznyakoff  <gray@gnu.org>

	Change the rc suffix to mf in test scripts.

	That was a leftover from pre-6.0 times.

2017-10-23  Sergey Poznyakoff  <gray@gnu.org>

	Minor fix

2017-10-23  Sergey Poznyakoff  <gray@gnu.org.ua>

	Improve DNS API; rewrite DNS testsuite.

	* lib/dns.c (dnsbase_real_init): Take configuration text
	as argument (can be NULL).
	Enable adns debugging on trace9
	(dnsbase_file_init): New function.
	(dns_reply_init): New function.
	(dns_reply_push): New function.
	(soa_check): New function.
	Rewrite all functions using dns_reply_init+dns_reply_push, as appropriate.
	* lib/dns.h (dns_reply) <maxcount, data.ptr>: New members.
	(dnsbase_real_init, dnsbase_file_init)
	(dns_reply_init, soa_check): New protos.
	* src/builtin/dns.bi (resolve_host): Rewrite to return all A records.
	(dns_replies_intersect): New static function.
	(primitive_ismx): Rewrite taking into account all A records.
	* src/main.c: New option --resolv-conf-file (mostly for checking.

	* tests/resolv.c: Change option handling, implement new options.

	* tests/atlocal.in (MF_TOPDOMAIN,MF_NAMESERVER): New variables.
	(at_resolv_conf): New function.
	* tests/Makefile.am: Add new tests.
	* tests/testsuite.at: Include new tests.
	* tests/hasmx.at: Use dedicated MF test domains,
	* tests/hostname.at: Likewise.
	* tests/ismx.at: Likewise.
	* tests/rescname.at: Likewise.
	* tests/resolve.at: Likewise.

	* tests/resolv_a.at: New test.
	* tests/resolv_mx.at: Likewise.
	* tests/resolv_ptr.at: Likewise.
	* tests/resolv_ptr_val.at: Likewise.
	* tests/resolv_spf.at: Likewise.
	* tests/resolv_txt.at: Likewise.

2017-10-21  Sergey Poznyakoff  <gray@gnu.org.ua>

	Bugfix

	* lib/dns.c (dns_reply_resolve): Remove unneeded ntohl.
	* src/builtin/dns.bi): Remove unneeded htonl.

2017-10-20  Sergey Poznyakoff  <gray@gnu.org.ua>

	Improve DNS API consistency

	* lib/dns.c (dns_get_mx_records, getmx, getmxip): Replace
	with a single function mx_lookup. All uses updated.

	Bugfixes; implement test program for DNS API.

	* lib/dns.c (ptr_lookup): Reverse IP octets prior to look up.
	Use adns_r_ptr_raw to disable consistency checks.
	(ptr_validate): Return values in struct dns_reply.
	All uses changed.
	* lib/dns.h (ptr_validate): Change signature.

	* tests/resolv.c: New test program.
	* tests/Makefile.am: Add resolv.c
	* tests/.gitignore: Update.

	Drop configure checks for res_ functions

	Update docs

	Unify DNS reply types.

	* lib/dns.h (mxbuf): Remove
	(mxbuf_init, mxbuf_free): Remove protos.
	(dns_get_mx_records): Remove the maxdepth parameter. Return
	MX names in struct dns_reply. All uses changed.
	(getmx,getmxip): Return MX names in struct dns_reply. All uses changed.

	Rewrite base dns functions using adns.

	* configure.ac: Require libadns.
	* lib/dns.c: Rewrite.
	* lib/dns.h (dns_resolve_ipstr, dns_resolve_hostname): Simplify
	parameters.
	(dns_reply): Remove max, last_len, and last_max.

	Drop ttl tracking from DNS API; drop SPF caching

	* lib/dns.c: Remove ttl tracking.
	* lib/dns.h: Fix prototypes.
	* mflib/spf.mf: Remove caching.
	* src/builtin/spf.bi (spf_ttl): Remove variable.
	* src/builtin/dns.bi: Update calls to DNS API.
	* src/spf.c: Likewise.
	* src/spf.h (spf_answer_t): Remove ttl.

	Bugfix

	* lib/dns.c (cname_loop_body): Restore accidentally removed line.

2017-10-19  Sergey Poznyakoff  <gray@gnu.org.ua>

	Improve DNS resolver API

	Remove arbitrary size limits.

	* NEWS: Version 8.2.90
	* configure.ac: Likewise. Require Mailutils 3.3

	* doc/calloutd.texi: Update.
	* doc/functions.texi: Update.
	* doc/mailfromd.texi: Update.
	* doc/upgrade.texi: Update.

	* lib/dns.c: Rewrite.
	* lib/dns.h (MAXMXCOUNT, MXF_MAX): Remove.
	(mxbuf_init,dns_resolve_ipstr)
	(a_lookup,ptr_lookup,txt_lookup)
	(spf_lookup): Change protos.
	(dns_reply): New struct.
	(dns_reply_free,dns_reply_ip): New functions.
	* lib/libmf.h (getmxip): Change proto.

	* src/builtin/dns.bi: Remove runtime configuration statements:
	max-dns-reply-a, max-dns-reply-ptr, and max-dns-reply-mx. Rewrite using
	the new DNS API.
	* src/callout.c: Update.
	* src/mailfromd.h: Update.
	* src/main.c: Remove the max-match-mx configuration statement.
	* src/prog.c: Update.
	* src/spf.c: Update.
	* src/spf.h: Update.
	* src/srvcfg.c: Remove the max-callout-mx configuration statement.

	Allocate exception buffer even if status.mf is not required

	This fixes coredumps caused by calls to MF_THROW from built-in functions
	in scripts without the 'require status' statement.

	* src/exclist.c (fixup_exceptions): New function
	* src/mailfromd.h (fixup_exceptions): New proto.
	* src/gram.y: Call fixup_exceptions before setting up dataseg.

	Require mailutils 3.3

2017-10-18  Sergey Poznyakoff  <gray@gnu.org.ua>

	Version 8.2

2017-06-18  Sergey Poznyakoff  <gray@gnu.org>

	Minor fix

	* src/gram.y (free_node): Deinit locus

	Switch to detailed source locations from Mailutils 3.2.92

	* configure.ac: Version 8.1.92
	* NEWS: Update.
	* src/builtin/debug.bi (debug): Use mu_locus_range
	* src/builtin/from.bi: Likewise.
	* src/builtin/header.bi: Likewise.
	* src/builtin/progress.bi: Likewise.
	* src/builtin/qrnt.bi: Likewise.
	* src/builtin/rcpt.bi: Likewise.
	* src/exclist.c: Likewise.
	* src/builtin/sieve.bi: Use mu_locus_range
	(sieve): Accept new optional argument "col".
	* src/drivers.c: Use mu_locus_range
	(MARK_LOCUS): Rewrite as inline function.
	* src/gram.y: Use mu_locus_range and location macros from mailutils/yyloc.h
	Improve error diagnostics
	(parse_program): Prepare mu_strerr for locus-aware diagnostics.
	* src/lex.l: Use mu_linetrack_t to track locations.
	* src/mailfromd.h: Use mu_locus_range
	* src/main.c: Likewise.
	* src/pp.c: Likewise.
	* src/prog.c: Likewise.
	* src/prog.h: Likewise.
	* src/symbols.c: Likewise.

	* tests/ashadow.at: Expect detailed error locations.
	* tests/bctx00.at: Likewise.
	* tests/fctx00.at: Likewise.
	* tests/invcidr.at: Likewise.
	* tests/invcidr2.at: Likewise.
	* tests/module04.at: Likewise.
	* tests/module06.at: Likewise.
	* tests/poll04.at: Likewise.
	* tests/setvar.at: Likewise.
	* tests/shadow.at: Likewise.
	* tests/static02.at: Likewise.

	Minor fixes.

	* gacopyz/context.c (gacopyz_setmlreply_va): Return meaningful code.
	(gacopyz_setmlreply_v): Likewise.
	* lib/db.c (db_compact): Fix improper use of uninitialized value.
	* lib/userprivs.c (mf_gid_list_free): Fix loop.
	* mtasim/mtasim.c (smtp_mail): Remove unused variable.
	* src/calloutd.c (main): Likewise.
	* src/savsrv.c (callout_session_server): Likewise.

2017-04-14  Sergey Poznyakoff  <gray@gnu.org.ua>

	Fix typo in docs.

2017-04-09  Sergey Poznyakoff  <gray@gnu.org>

	Version 8.1.90

2017-03-06  Sergey Poznyakoff  <gray@gnu.org>

	Fix compiler message

2017-03-04  Sergey Poznyakoff  <gray@gnu.org>

	Minor fix

	* lib/dns.c (cnameloop): Ignore trailing dot

	Fix syntax table in mfl-mode

	* elisp/mfl-mode.el: Declare _ as part of word

2017-01-21  Sergey Poznyakoff  <gray@gnu.org>

	mtasim: code cleanup

	* mtasim/mtasim.c (argcv_split, argcv_free): Remove.
	(parse_email_addr): Use mu_alloc.
	(check_address_command): Rewrite.
	(smtp_mail): New function.
	(smtp_rcpt): Update.
	(smtp): Use mu_wordsplit.

2017-01-02  Sergey Poznyakoff  <gray@gnu.org>

	Use new assoc array API (MU commit 622bc770)

	* lib/dict.c (name_destroy): Remove
	(dict_init): Use new API
	(dict_install,dict_getsym): Likewise.

	Happy GNU Year

2016-12-20  Sergey Poznyakoff  <gray@gnu.org.ua>

	Improve Sieve interface

	* src/builtin/sieve.bi: Initialize Sieve environment
	* doc/functions.texi: Document changes.

2016-12-13  Sergey Poznyakoff  <gray@gnu.org.ua>

	Version 8.1

2016-12-12  Sergey Poznyakoff  <gray@gnu.org.ua>

	Use new Sieve API

	* src/builtin/sieve.bi: Change to use new Sieve API
	* configure.ac: Version 8.0.90.  Require MU 3.0.90
	* NEWS: Update.

2016-12-08  Sergey Poznyakoff  <gray@gnu.org.ua>

	Merge branch 'master' of ssh://git.gnu.org.ua/gitroot/mailfromd

2016-12-08  Sergey Poznyakoff  <gray@gnu.org>

	Fix typo

	Ensure proper type conversion when coding immediate values.

	* src/prog.h (mf_c_cast): New define.
	(code_put, code_immediate): New macros.
	* src/prog.c (code_immediate): Rename to code_immediat_stkval.
	(code_put): Rename to code_put_stkval.
	* src/drivers.c: Use typed calls to code_immediate and code_put
	* src/gram.y: Likewise.

	* src/main.c: Allocate mu_log_tag.

2016-12-08  Sergey Poznyakoff  <gray@gnu.org.ua>

	Bugfixes

	* lib/mfgetopt.c (mf_getopt): Initialize cfhint.flags
	* src/symbols.c (free_symbols): Free buckets after freeing
	everything else.

	Minor fix

	* lib/dns.c: Use stat.res_h_errno instead of the global h_errno.

2016-11-09  Sergey Poznyakoff  <gray@gnu.org>

	Version 8.0

	Minor fixes

	Update docs

	Update docs

	* doc/mailfromd.texi: Document the single configuration file.
	* doc/calloutd.texi: Update.
	* doc/mfdbtool.texi: Update.
	* doc/pmult.texi: Update.
	* pmult/pmult.c: Use the common configuration file.  Support
	database-related configuration statements for compatibility with
	other mailfromd utilities.
	* src/mfdbtool.c: compatibility fix: --predict implies --list.

2016-11-08  Sergey Poznyakoff  <gray@gnu.org>

	Use single configuration file.

	* lib/libmf.h (MF_GETOPT_DEFAULT)
	(MF_GETOPT_IN_ORDER,MF_GETOPT_NO_CONFIG): New flags.
	(mf_getopt): Change signature.
	* lib/mfgetopt.c (mf_getopt): Remove the cfile parameter.
	Change semantics of the 5th parameter (inorder -> flags).

	* mtasim/mtasim.c: Change call to mf_getopt.
	* pmult/pmult.c: Likewise.
	* src/calloutd.c: Likewise.
	* src/main.c: Likewise.
	* src/mfdbtool.c: Likewise.

2016-11-08  Sergey Poznyakoff  <gray@gnu.org.ua>

	Fix mfdbtool.

	* lib/db.c (mf_database_mode): New global variable.
	(mf_dbm_open): Remove "mode" parameter.  Use mf_database_mode.
	(db_expire_func): Fix passing the datum size.
	(db_compact): Preserve mode and ownership of the database.
	* lib/dbcfg.c (cb_database_mode): New function.
	* lib/mfdb.h (mf_database_mode): New extern.
	(mf_dbm_open): Change signature.
	(cb_database_mode): New proto.

	* src/mfdbtool.c (mfdbtool_cfg_param): New statement "database-mode".
	Read configuration from /etc/mailfromd.conf
	* src/srvcfg.c (srv_cfg_param): Likewise.

	* lib/cache.c: Update calls to mf_dbm_open.
	* lib/rate.c: Likewise.
	* lib/tbf_rate.c: Likewise.

	mfdbtool: add missing options

2016-11-07  Sergey Poznyakoff  <gray@gnu.org.ua>

	Require mailutils 3.0; update documentation

2016-11-02  Sergey Poznyakoff  <gray@gnu.org.ua>

	Follow Mailutils commit dc62b399

2016-10-31  Sergey Poznyakoff  <gray@gnu.org>

	Bugfixes

	* gacopyz/server.c (gacopyz_srv_reply): Return entire
	buffer.
	* pmult/pmult.c (collect_symlists): Don't attempt to print empty
	client name.
	(main): Read mailutils configuration file.
	* src/srvcfg.c (mfd_capa_server): Don't register srv_cfg_param.
	It pertains to canned section.

2016-10-30  Sergey Poznyakoff  <gray@gnu.org>

	Version 7.99.97

	Minor fix

	* lib/libmf.h: Include limits.h

	Get rid of obstack; use mu_opool_t instead

	* configure.ac: Remove checks for obstack.
	Require Mailutils 2.99.993
	* lib/Makefile.am: Remove obstack.
	* lib/obstack.c: Delete.
	* lib/obstack.h_: Delete.
	* po/POTFILES.in: Remove obstack.

	* lib/mfgetopt.c (mf_getopt): Bugfix: initialize flags.

	* lib/db.c: Use mu_opool_t instead of obstack.
	* mtasim/mtasim.c: Likewise.
	* pmult/pmult.c: Likewise.
	* src/callout.c: Likewise.
	* src/callout.h: Likewise.
	* src/engine.c: Likewise.
	* src/gram.y: Likewise.
	* src/lex.l: Likewise.
	* src/mailfromd.h: Likewise.
	* src/pragma.c: Likewise.
	* src/prog.c: Likewise.
	* src/spf.c: Likewise.
	* src/symbols.c: Likewise.

2016-10-29  Sergey Poznyakoff  <gray@gnu.org>

	Minor fixes

2016-10-28  Sergey Poznyakoff  <gray@gnu.org>

	Finish conversion.  Version 7.99.96

2016-10-24  Sergey Poznyakoff  <gray@gnu.org>

	Convert mailfromd to new interface.

	Start transition to mu_cli interface

	* configure.ac: Require mailutils 2.99.991

	* src/main.c: Start transition to mu_cli
	* lib/optcache.c: Remove file.
	* lib/Makefile.am (optcache.c): Remove.
	* lib/libmf.h: Remove optcache prototypes.
	* lib/dbcfg.c: Convert to mu_option.
	* lib/utils.c: Likewise.
	* src/builtin/dns.bi: Likewise.
	* src/builtin/io.bi: Likewise.
	* src/builtin/mbox.bi: Likewise.
	* src/builtin/msg.bi: Likewise.
	* src/mfdbtool.c: Likewise.
	* src/savsrv.c: Likewise.
	* src/srvcfg.c: Likewise.
	* src/srvcfg.h: Likewise.

2016-10-24  Sergey Poznyakoff  <gray@gnu.org.ua>

	Minor fixes

	* lib/dns.c (mf_to_dns_status): New function.
	* lib/libmf.h (mf_to_dns_status): New proto.
	* lib/cache.c: Fix conversions.
	* lib/rate.c: Fix conversions.
	* lib/vercmp.c: Fix conversions.
	* src/builtin/dns.bi: Fix conversions.
	* src/builtin/string.bi: Fix conversions.
	* src/drivers.c: Fix conversions.
	* src/exclist.c: Fix conversions.
	* src/main.c: Fix conversions.
	* src/prog.c: Fix conversions.
	* tests/trycatch05.at: Print first field of wc output.
	* tests/trycatch06.at: Likewise.
	* tests/trycatch07.at: Likewise.
	* tests/trycatch08.at: Likewise.
	* tests/trycatch09.at: Likewise.
	* tests/trycatch10.at: Likewise.
	* tests/trycatch11.at: Likewise.
	* tests/trycatch12.at: Likewise.
	* tests/trycatch13.at: Likewise.
	* tests/trycatch14.at: Likewise.
	* tests/trycatch15.at: Likewise.
	* tests/trycatch16.at: Likewise.
	* tests/version.at: Compatibility fix in sed expression.

2016-08-09  Sergey Poznyakoff  <gray@gnu.org.ua>

	Minor changes (mostly po-related)

2016-08-01  Sergey Poznyakoff  <gray@gnu.org.ua>

	Make listen(2) backlog size configurable.

	* lib/srvman.c (mfd_server_set_backlog): New function.
	* lib/srvman.h: Likewise.
	* src/srvcfg.c (server_section_param): New statement: "backlog"
	* src/srvcfg.h (mf_srvcfg) <backlog>: New member.

	* doc/mailfromd.texi: Document the backlog statement.
	* NEWS: Mention the backlog statement.

2016-07-06  Sergey Poznyakoff  <gray@gnu.org.ua>

	Fix documentation of spf_explanation.

	Bugfix

	* gacopyz/server.c (gacopyz_srv_connect): Fix memory allocation error.

	Handle multiple strings in SPF records.

	* lib/dns.c (cname_loop_body): Concatenate multiple strings of
	a TXT record (RFC 7208, 3.3)

2016-04-26  Sergey Poznyakoff  <gray@gnu.org>

	Improve previous commit.

	* src/builtin/spf.bi (update_spf_vars): Add trailing null character.
	* src/spf.c (mech_include): Remove any mechanisms saved during
	call to spf_check_host_internal if the result qualifies as
	not matching.

2016-04-20  Sergey Poznyakoff  <gray@gnu.org>

	List all traversed mechanisms in the spf_mechanism built-in variable.

	* src/builtin/spf.bi (update_spf_vars): Concatenate all
	traversed mechanisms.
	* src/spf.c (spf_data): Replace exp, mech, ttl with a pointer to
	answer.
	(UPDATE_ANSWER_TTL): New macro.  Use it instead of UPDATE_TTL
	throughout this source.
	(spf_data_init): Take spf_answer_t * as 2nd argument.  All uses
	changed.
	(mech_include,mod_redirect): Propagate pointer to original spf_answer_t
	through subordinate spf_check_host_internal calls.
	(mod_exp): Expand text here.
	(spf_eval_record): Trace traversed mechanisms.
	(spf_answer_free): Free mechv array
	(spf_answer_add_mech): New function.
	* src/spf.h (spf_answer_t): Remove mech.
	New members: mechv, mechn, mechmax.
	(spf_answer_add_mech): New proto.

	* doc/functions.texi: Document changes to the spf_mechanism
	built-in variable.
	* NEWS: Update.

2016-04-19  Sergey Poznyakoff  <gray@gnu.org.ua>

	Bugfixes

	* configure.ac: Fix the --with-dspam option.
	* doc/mailfromd.texi: Update postfix-related info.

2016-03-12  Sergey Poznyakoff  <gray@gnu.org.ua>

	Prevent NULL dereferencing when attempting to remove an unexistent symtab entry.

	* lib/symtab.c (symtab_remove): Return if no matching entry
	was found.

2016-03-03  Sergey Poznyakoff  <gray@gnu.org>

	Minor fix in pmult

	* pmult/pmult.c: PM_MAX_MACROS was renamed to PM_MACROS_MAX.

2016-03-02  Sergey Poznyakoff  <gray@gnu.org>

	Fix compilation of pmult with MeTA1 1.0.0.0

	* configure.ac: In MeTA1 1.0.0.0 librcbcomm was renamed to rcbcommr,
	and librcb - to librcbr.
	* pmult/pmult.c [!PM_MAX_MACROS] (PM_MAX_MACROS): Provide default.
	(SM_ONERROR_ACTION): Expect const char * from smerr2txt.
	(pmult_connect, pmult_rcpt): Use snprintf instead of umaxtostr.
	(main): Call mu_set_program_name.
	* doc/pmult.texi: Improve pmult documentation.

	Fix coredump:

	* gacopyz/server.c (gacopyz_srv_clear_macros_pred): Rearrange
	the array after removing elements.

2016-02-17  Sergey Poznyakoff  <gray@gnu.org.ua>

	Update copyright years

	Fix type-related warnings.

2015-11-12  Sergey Poznyakoff  <gray@gnu.org>

	Fix C unescaping in lex code.

	The mailutils commit f160ca75 changed return code of
	mu_wordsplit_c_unquote_char.  This commit modifies the code
	accordingly.

	* src/lex.l (c_unescape): New function.  Use instead of
	mu_wordsplit_c_unquote_char throughout the code.
	(QML line): remove spurious backslash.

	Fix build with dspam and geoip

	* src/builtin/dspam.bi: Fix the use of MF_VAR_REF.
	* src/builtin/geoip.bi: Use MF_RETURN.

2015-11-11  Sergey Poznyakoff  <gray@gnu.org>

	bootstrap: pull submodules

2015-09-15  Sergey Poznyakoff  <gray@gnu.org>

	Merge branch 'master' of ssh://git.gnu.org.ua/gitroot/mailfromd

	Version 7.99.94

	* configure.ac: Version 7.99.94; Require Mailutils 2.99.99,
	use gettext 0.16
	* NEWS: Update.
	* etc/rc.in: Rewrite mailfromd_status
	* gacopyz/Makefile.am (AM_CPPFLAGS): Add /lib
	* src/builtin/io.bi (open_program_stream_ioe): Disable C escapes
	when splitting the command line.
	* src/srvcfg.c (mf_srvcfg_init): Update call to mu_register_argp_capa

2015-08-07  Sergey Poznyakoff  <gray@gnu.org.ua>

	Fix typos.

	Thanks to Andres Jonsson.

2015-07-11  Sergey Poznyakoff  <gray@gnu.org.ua>

	Minor changes

	* Makefile.am: Fix path to git2chg.awk
	* lib/dns.c (domain_name_cmp): Use case-insensitive comparison

2015-04-27  Sergey Poznyakoff  <gray@gnu.org.ua>

	Update docs

	* NEWS: Document new functions.
	* doc/functions.texi: Fix typos.
	* doc/mailfromd.texi: Likewise.

	Update copyright years

	Avoid casts between pointers and integers (mtasim)

	* mtasim/mtasim.c (_def_write, _def_read, _def_close): SD points to
	file handle.
	(mta_daemon,mta_stdio): Change initialization of in and out.

	Avoid casts between pointers and integers (group lists)

	* lib/libmf.h (mf_gid_list): New datatype.
	(mf_gid_list_alloc,mf_gid_list_free)
	(mf_gid_list_dup,mf_gid_list_add)
	(mf_gid_list_array): New functions.
	(switch_to_privs,get_user_groups): Change signature.
	* lib/server.c (mf_server_retain_groups): Change type.
	* lib/userprivs.c (mf_gid_block,mf_gid_list): New struct.
	(mf_gid_list_alloc,mf_gid_list_free)
	(mf_gid_list_dup,mf_gid_list_add)
	(mf_gid_list_array): New functions.
	(get_user_groups): Rewrite.
	(switch_to_privs): Take pointer to mf_gid_list as its
	last argument.
	(grouplist_translate): Rewrite.
	* mtasim/mtasim.c (grouplist): Change type. All uses updated.
	* src/srvcfg.c (mf_option_group): Rewrite.

	Avoid casts between pointers and integers (optcache)

	* lib/libmf.h (mf_option_value): Union.
	(mf_option_cache): Rearrange members.
	(handler,set): Change signature.
	(isset): New member.
	(mf_optcache_set_option): Change signature.
	(mf_option_string,mf_option_boolean): Likewise.
	(mf_option_time_t,mf_option_size_t): Remove.
	(mf_option_timeout,mf_option_size): New prototypes.
	* lib/optcache.c (optcache_dup): Clear isset member for each element.
	(mf_optcache_set_option): Rewrite.
	(mf_option_string, mf_option_boolean): Rewrite.
	(mf_option_time_t,mf_option_size_t): Remove.
	(mf_option_timeout,mf_option_size): New functions.

	* lib/utils.c: Change the use of mf_optcache functions.
	* src/main.c: Likewise.
	* src/mfdbtool.c: Likewise.
	* src/srvcfg.c: Likewise.

	Avoid casts between pointers and integers (prog & runtime).

	* src/prog.h (mf_stkval): New data type.
	(STKVAL): Redefine as union mf_stkval.
	(mft_ptr,mft_str,mft_int)
	(mft_uint,mft_long,mft_ulong)
	(mft_size,mft_string,mft_number): New data types.
	(mf_cat,mf_c_val): New macros.
	(instr_t): Moved from mailfromd.h
	(mf_code_cell): New union
	(mf_code_cell_t): New typedef.
	(mf_cell_instr,mf_cell_value)
	(mf_cell_c_value): New macros
	(code_peek): Moved from mailfromd.h. Change return type;
	(code_immediate,code_put): Moved from mailfromd.h. Change signature.
	(code_op,code_instr,code_exmask)
	(code_get_counter,dump_code,fixup_code): Moved from mailfromd.h.
	(prog): Change type.
	* src/prog.c: Use mf_c_val to extract C values from STKVAL.
	(get_immediate): Return STKVAL.
	(prog): Change type
	(code_cell): New function.
	(code_instr): Rewrite using code_cell
	(code_immediate): Likewise. Change argument type.
	(code_exmask): Use proper typecast.
	(code_put): Change argument type.
	(code_peek): Change return type.
	(runtime_stack_trace): Use mf_cell_instr to access instruction
	pointer.
	* src/mailfromd.h (yyerror): Change signature.
	(instr_t): Move to prog.h
	(code_put,code_peek,code_reserve)
	(code_immediate,code_op,code_instr)
	(code_exmask,code_get_counter)
	(dump_code,fixup_code): Move to prog.h
	* src/exclist.c: Use mf_c_val
	* src/gram.y (yyerror): Change signature.
	(mailfromd_run): Use mf_c_val to extract actual value.

	* doc/functions.texi (body_has_nulls): Fix return type.

	* src/builtin/snarf.m4 (__mf_defun): Define __MF_RETTYPE__
	(MF_RETURN): Take optional second argument (return type).
	Decide what push function to use and what type to cast the
	value to depending on its value and that of __MF_RETTYPE__.
	(MF_RETURN_STRING): Remove.
	(MF_RETURN_OBSTACK): Explicitly declare return type as STKVAL.
	(MF_VAR_REF): Take two or three arguments (second one declaring
	value type).
	(MF_ALLOC_HEAP_TEMP):
	(MF_VAR_STRING): Update.
	(END): Popdef __MF_RETTYPE__.
	* src/builtin/body.bi: Use MF_RETURN.
	(body_has_nulls): Fix return type.
	* src/builtin/burst.bi: Use MF_RETURN.
	* src/builtin/callout.bi: Likewise.
	* src/builtin/ctype.bi: Likewise.
	* src/builtin/curhdr.bi: Likewise.
	* src/builtin/db.bi: Likewise.
	* src/builtin/debug.bi: Likewise.
	* src/builtin/dns.bi: Likewise.
	* src/builtin/email.bi: Likewise.
	* src/builtin/geoip.bi: Likewise.
	* src/builtin/getopt.bi: Likewise.
	* src/builtin/gettext.bi: Likewise.
	* src/builtin/io.bi: Likewise.
	* src/builtin/ipaddr.bi: Likewise.
	* src/builtin/macro.bi: Likewise.
	* src/builtin/msg.bi: Likewise.
	* src/builtin/sa.bi: Likewise.
	* src/builtin/spf.bi: Likewise.
	* src/builtin/string.bi: Likewise.
	* src/builtin/system.bi: Likewise.
	* src/builtin/vars.bi: Likewise.

	* src/drivers.c: Use proper typecasts when calling code_* functions.
	* src/optab.opc (scan_code): Use mf_cell_c_value to inspect
	prog[].

2015-04-24  Sergey Poznyakoff  <gray@gnu.org>

	Minor change

	Implement change sender function.

	* gacopyz/gacopyz.c (gacopyz_argn_command): New function.
	(gacopyz_add_rcpt_par, gacopyz_chgfrom): Use gacopyz_argn_command.

	* src/builtin/Makefile.am (BI_FILES): Add from.bi
	* src/builtin/from.bi: New file.

	* src/mailfromd.h (msgmod_opcode) <set_from>: New opcode.
	* src/engine.c (run_msgmod): Support set_from.
	(smfilter): Announce SMFIF_CHGFROM flag.
	* src/gram.y (msgmod_opcode_str): Support set_from.

	* NEWS: Update.
	* doc/functions.texi: Document set_from.

2015-04-23  Sergey Poznyakoff  <gray@gnu.org.ua>

	Fix doc generation.

	Default Config file applied to all output formats, which is wrong.
	Use a dedicated configuration file for html output formats, and
	defaults for the rest.

	* doc/Makefile.am (GENDOCS): Add html-specific configuration file.
	* doc/Config: Rename to doc/html.init (with changes).
	* doc/functions.texi: Fix sectioning.
	* doc/mailfromd.texi: Likewise.

2015-03-01  Sergey Poznyakoff  <gray@gnu.org>

	Switch to Texinfo 5.0

	* doc/Config: Rewrite.
	* doc/Makefile.am: Use Makeinfo 5 instead of texi2htm
	* doc/gendocs_template: Ps is not built
	* imprimatur: Upgrade.

2014-12-10  Sergey Poznyakoff  <gray@gnu.org.ua>

	Minor fix (remove unused static function)

	New function message_body_is_empty

	* src/builtin/msg.bi (DCL_BODY_HDR): New m4 macro.
	(message_body_is_empty): New function.

	* NEWS: Mention message_body_is_empty
	* doc/functions.texi: Document message_body_is_empty

	* tests/nulmsg.at: New  testcase.
	* tests/Makefile.am: Add new test.
	* tests/testsuite.at: Likewise.

2014-12-06  Sergey Poznyakoff  <gray@gnu.org.ua>

	Bugfix

	* src/builtin/mbox.bi (mailbox_open): Fix the use of the perms
	argument.
	* doc/functions.texi: Document last argument to mailbox_open.

2014-08-27  Sergey Poznyakoff  <gray@gnu.org>

	get translations from TP during bootstrapping

2014-02-28  Sergey Poznyakoff  <gray@gnu.org.ua>

	Bugfixes.

	* src/pp.c (stderr_redirector): Fix reading loop.
	* src/savsrv.c (callout_session_server): Likewise.

2013-08-08  Sergey Poznyakoff  <gray@gnu.org.ua>

	Get rid of gnulib.

	* .gitmodules: Remove gnulib.
	* gnulib: Remove.
	* gnulib.modules: Remove.
	* Makefile.am: Remove gnulib. Use git2chg.awk to create
	ChangeLog.
	* bootstrap: Rewrite.
	* bootstrap.conf: Remove.
	* configure.ac: Update.
	* gacopyz/Makefile.am (AM_CPPFLAGS): Update.
	* git2chg.awk: New file.
	* lib/Makefile.am: Remove dependencies on gnulib.
	* mtasim/Makefile.am: Likewise.
	* pmult/Makefile.am: Likewise.
	* src/Makefile.am: Likewise.
	* src/builtin/Makefile.am: Likewise.

	* lib/gettext.h: New file.
	* lib/.gitignore: New file.
	* lib/obstack.c: New file.
	* lib/obstack.h_: New file.

	* lib/ftimestr.c (format_time_str): Rewrite using
	strftime and statically allocated buffer.
	* lib/libmf.h (transform_error_string): Change return
	type (const char *).
	* lib/proctitle.c: Rewrite using statically allocated
	buffer.
	* lib/transform.c: Use mu_ allocation and ctype functions.
	(transform_error_string): Use statically allocated buffer.
	Return a pointer to its content.
	* mtasim/mtasim.c Use mu_ allocation and ctype functions.
	(save_cwd, restore_cwd): New functions

	* lib/db.c: Use mu_ allocation and ctype functions.
	* lib/dbcfg.c: Likewise.
	* lib/dict.c: Likewise.
	* lib/dns.c: Likewise.
	* lib/namefixup.c: Likewise.
	* lib/optcache.c: Likewise.
	* lib/parsetime.c: Likewise.
	* lib/server.c: Likewise.
	* lib/srvman.c: Likewise.
	* lib/userprivs.c: Likewise.
	* lib/utils.c: Likewise.
	* pmult/pmult.c: Likewise.
	* src/bitmask.h: Likewise.
	* src/builtin/burst.bi: Likewise.
	* src/builtin/ctype.bi: Likewise.
	* src/builtin/db.bi: Likewise.
	* src/builtin/dns.bi: Likewise.
	* src/builtin/dspam.bi: Likewise.
	* src/builtin/getopt.bi: Likewise.
	* src/builtin/getpw.bi: Likewise.
	* src/builtin/mbox.bi: Likewise.
	* src/builtin/msg.bi: Likewise.
	* src/builtin/sprintf.bi: Likewise.
	* src/callout.h: Likewise.
	* src/calloutd.c: Likewise.
	* src/deprecation.c: Likewise.
	* src/engine.c: Likewise.
	* src/exclist.c: Likewise.
	* src/gram.y: Likewise.
	* src/lex.l: Likewise.
	* src/mailfromd.h: Likewise.
	* src/main.c: Likewise.
	* src/mfdbtool.c: Likewise.
	* src/pp.c: Likewise.
	* src/pragma.c: Likewise.
	* src/prog.c: Likewise.
	* src/srvcfg.c: Likewise.
	* src/stack.c: Likewise.
	* src/symbols.c: Likewise.

	* src/callout.c: Likewise.
	* po/.gitignore: Update.
	* po/Makevars: New file.
	* src/builtin/io.bi: Use mu_ allocation and ctype functions.
	(stderr_to_log): Use fgets instead of getline.
	* src/builtin/system.bi (strftime): Use statically allocated buffer
	and strftime.
	* src/savsrv.c: Use mu_ allocation and ctype functions.
	(trimcrlf): Return 0 if theCR(LF) has been removed and 1 otherwise.
	(callout_session_server): Use statically allocated buffer. Reject
	input lines that are longer than allowed by its capacity.
	* src/spf.c: Use mu_ allocation and ctype functions.
	(scanback): New function.
	(spf_reverse,spf_truncate): Use scanback instead of memrchr.

2013-07-30  Sergey Poznyakoff  <gray@gnu.org.ua>

	Document testsuite

	* tests/testsuite.at: Add banners

2013-07-29  Sergey Poznyakoff  <gray@gnu.org.ua>

	Provide built-ins for effective handling of large message bodies.

	* src/mailfromd.h (body_repl_fd): New opcode.
	* src/engine.c (run_msgmod): Handle body_repl_fd.
	* src/gram.y (msgmod_opcode_str): Handle body_repl_fd.
	* gacopyz/gacopyz.c (gacopyz_replace_body_fn)
	(gacopyz_replace_body_fd): New functions.
	(gacopyz_replace_body): Rewrite using gacopyz_replace_body_fn.
	* gacopyz/gacopyz.h (gacopyz_replace_body_fn)
	(gacopyz_replace_body_fd): New protos.
	* src/builtin/body.bi (replbody_fd): New built-in function.
	* src/builtin/io.bi (open_program_stream_ioe): New static.
	(open_program_stream): Rewrite via open_program_stream_ioe.
	(spawn, write_body): New built-in functions.
	* src/builtin/system.bi (unlink): New built-in function.
	* NEWS: Update.
	* doc/functions.texi: Document the new functions.

2012-12-30  Sergey Poznyakoff  <gray@gnu.org.ua>

	Use AM_CPPFLAGS instead of INCLUDES in Makefiles.

2012-11-03  Sergey Poznyakoff  <gray@gnu.org.ua>

	Fix communication with a program invoked via open().

	* src/builtin/io.bi (REDIRECT_STDOUT_P): Fix.
	(open_program_stream): Remove improper calls to close().
	(open): Implement the |< prefix to open read-only communication
	with the invoked program.
	* doc/functions.texi: Document the |< prefix.
	* NEWS: Update.
	* THANKS: Mention Mehmet Tolga Avcioglu.

2012-09-02  Sergey Poznyakoff  <gray@gnu.org.ua>

	Fix `next' in do-while loops.

	The next keyword would incorrectly bypass the conditional in
	do-while loops.

	* src/drivers.c (code_type_loop): Fix jump target for `next' to
	include end of loop conditional.
	* tests/next03.at: New test case.
	* tests/Makefile.am (TESTSUITE_AT): Add next03.at
	* tests/testsuite.at: Include next03.at

	* tests/next01.at: Fix keywords.
	* tests/next02.at: Likewise.
	* tests/trycatch07.at: Likewise.
	* tests/trycatch08.at: Likewise.
	* tests/trycatch11.at: Likewise.
	* tests/trycatch12.at: Likewise.
	* tests/trycatch15.at: Likewise.
	* tests/trycatch16.at: Likewise.

	* NEWS: Update.

2012-08-08  Sergey Poznyakoff  <gray@gnu.org.ua>

	Improve DSN API.

	* src/builtin/mail.bi (add_headers): Append headers to existing ones,
	instead of replacing them.
	Unref the header stream.
	(mime_create_quote): Skip envelope (UNIX From ) line.
	(create_dsn): New function.

2012-08-06  Sergey Poznyakoff  <gray@gnu.org.ua>

	Rename header_rename_* functions to header_prefix_*

	* mflib/header_rename.mf4 (header_rename_all): Rename to header_prefix_all.
	(header_rename_pattern): Rename to header_prefix_pattern.
	* NEWS: Likewise.
	* doc/functions.texi: Likewise.

2012-08-05  Sergey Poznyakoff  <gray@gnu.org.ua>

	Implement functions for modifying headers addressed by their number. Improve header renaming functions.

	* NEWS: Updated.
	* doc/functions.texi: Updated.
	* mflib/header_rename.mf4: Rewrite from scratch.
	* src/builtin/curhdr.bi (get_current_header): Remove,
	use env_get_header instead. All uses changed.
	* src/builtin/header.bi (header_delete_nth)
	(header_replace_nth): New built-ins.
	* src/builtin/snarf.m4 (MF_CAPTURE): Accept opional argument.
	All uses updated.
	* src/builtin/vars.bi (sendmail_header_count): New variable.
	(get_sendmail_header_count)
	(set_sendmail_header_count): New functions.
	* src/engine.c (message_data) <hdrtrans,hdrcount>: New members.
	(test_message_data_init,priv_get): Initialize hdrtrans and hdrcount.
	(priv_store_msgmod_closure): Name can be NULL.
	(filter_cleanup): Free hdrtrans.
	(run_msgmod) <header_insert>: Adjust header number by the value of
	sendmail_header_count variable.
	Handle header_replace_nth and header_delete_nth opcodes.
	* src/gram.y (msgmod_opcode_str): Handle header_replace_nth and
	header_delete_nth opcodes.
	* src/mailfromd.h (msgmod_opcode) <header_delete_nth>
	<header_replace_nth>: New opcodes.
	(get_sendmail_header_count)
	(set_sendmail_header_count)
	(env_get_header): New protos.
	* src/prog.c (eval_environ) <header>: New member.
	(env_capture_start): Initialize header.
	(env_get_header): New function.
	(env_msgmod): Name can be NULL.
	(destroy_environment): Destroy the header.

2012-08-04  Sergey Poznyakoff  <gray@gnu.org.ua>

	Fix trace output.

	The c-escape filter used by the trace output stream suppresses
	newlines in output.  This is harmless when the output goes to
	syslog, but when it goes to stderr, all trace lines get concatenated
	into a single one on output.  To fix this, newline has to be sent
	directly to the underlying stream, bypassing the filter.

	* src/main.c (trace): Send newline bypassing the c-escape
	filter (which would have converted it to the "\n" sequence).
	This requires MU commit 1cbbd572.

2012-07-15  Sergey Poznyakoff  <gray@gnu.org.ua>

	Upgrade imprimatur.

2012-03-21  Sergey Poznyakoff  <gray@gnu.org.ua>

	Minor fix.

	* lib/db.c (db_compact): Do not unlink prior to renaming.

	mfdbtool: fix creating the database when compacting

	This requires MU 5eb34056 or later.

	* lib/db.c (make_tmp_name): Prefer changing the suffix when
	creating temporary db name.
	(db_compact): Make sure file mode and owner are preserved.
	Use actual file name (as opposed to eventual URL) when renaming.

2012-02-26  Sergey Poznyakoff  <gray@gnu.org.ua>

	Bugfix

	* mflib/Makefile.am (EXTRA_DIST): Add dspam.mf

	Restore legacy lock-* configuration statements.

	* lib/libmf.h (config_cb_lock_retry_count)
	(config_cb_lock_retry_timeout)
	(mf_option_size_t,mf_init_lock_options): New prototypes.
	* lib/optcache.c (mf_option_size_t): New function.
	* lib/utils.c (config_cb_lock_retry_count)
	(config_cb_lock_retry_timeout)
	(mf_init_lock_options): New functions.
	* src/main.c (mf_cfg_param): Restore lock-retry-count and
	lock-retry-timeout for backward compatibility.
	(main): Call mf_init_lock_options.
	* src/mfdbtool.c (mfdbtool_cfg_param): Restore lock-retry-count and
	lock-retry-timeout for backward compatibility.
	(main): Call mf_init_lock_options.
	* src/calloutd.c: Likewise.

	* lib/close-fds.c (close_fds_except): Don't access FD_SET unless
	i is less than FD_SETSIZE.

	Fix database expiration in mfdbtool.

	* NEWS: Version 7.99.92
	* configure.ac: 7.99.92
	* lib/db.c (make_tmp_name): Don't assume additional directories.
	* lib/mfdb.h (db_expire_t): Change signature.  All uses updated.

2012-02-08  Sergey Poznyakoff  <gray@gnu.org.ua>

	Fix circular dependency in Makefiles.

	This fixes 2ef494a7.  Make should process the mflib directory
	before src, because the latter relies on status.ex being built.
	On the other hand, mf sources in mflib have to be linted on
	make check.  The solution runs as follows: (1) mflib appears in
	SUBDIRS before src, and (2) src/Makefile.am runs make lint in
	../mflib on make check.

	* Makefile.am (SUBDIRS): Restore mflib to its proper place.
	* mflib/Makefile.am (check-am): Remove rule.
	* src/Makefile.am (check-am): New rule.  Run make lint in mflib.

	Fix ipv6 configuration test.

2012-02-07  Sergey Poznyakoff  <gray@gnu.org.ua>

	Implement ltrim and rtrim

	* src/builtin/string.bi (ltrim, rtrim): New functions.
	* NEWS: List new functions.
	* doc/functions.texi: Document new functions.

2012-02-03  Sergey Poznyakoff  <gray@gnu.org.ua>

	Fix argument expansion in pragmas.

	* src/pragma.c (expand_string): Fix expansion of quoted strings.

	Fix database privileges in dbfirst.

	* src/builtin/db.bi (dbfirst): Get db mode from the properties,
	use DEFAULT_DB_MODE if these are not defined.

2011-11-21  Sergey Poznyakoff  <gray@gnu.org.ua>

	Version 7.99.91

	More fixes.  Use mu_list_foreach instead of mu_list_do.

	* Makefile.am (SUBDIRS): Use mflib after src, so that make check uses
	the freshly built version of mailfromd.
	* lib/userprivs.c: Use mu_list_foreach instead of mu_list_do
	* mtasim/mtasim.c: Likewise.
	* pmult/pmult.c: Likewise.
	* src/builtin/mbox.bi: Likewise.
	* src/builtin/msg.bi: Likewise.
	* src/engine.c: Likewise.
	* src/gram.y: Likewise.
	* src/main.c: Likewise.
	* src/pp.c: Likewise.

	Bugfixes.

	* configure.ac: Fix mu info test.
	* lib/db.c: Add default safety flags to mu_dbm_create* calls.
	* src/builtin/db.bi: Likewise.

2011-11-10  Sergey Poznyakoff  <gray@gnu.org.ua>

	Improve handling of database security flags.

	* src/builtin/db.bi (db_prop)<hint>: New member.
	(dbprop): Accept additional "hint" argument.
	(_mf_dbm_open): Rename to _open_dbm (all uses changed). Get safety flags
	from the created DB and augment them with bits deduced from the file mode.
	* src/srvcfg.c (mf_srvcfg_flush): Add default parameters to the database
	URL hint.

	Bugfixes

	* lib/db.c (mf_dbm_open): Destroy db after failed attempt to open it.
	* src/builtin/db.bi (_mf_dbm_open): Likewise.
	(dbmap_lookup): Take db_prop as an additional argument.  Use its mode
	field for opening.
	Fix improper conditional.

	Switch to libmu_dbm for DBM support.

	* configure.ac (DEFAULT_DB_TYPE): New variable.
	Use mu info to determine which DBM is supported.
	* lib/Makefile.am (noinst_LIBRARIES): Remove libdbm.a
	* lib/mf-dbm.c: remove.
	* lib/mf-dbm.h: remove.
	* lib/cache.c: Use libmu_dbm functions.
	* lib/db.c: Likewise.
	* lib/dbcfg.c: Likewise.
	* lib/greylist.c: Likewise.
	* lib/rate.c: Likewise.
	* lib/tbf_rate.c: Likewise.
	* src/builtin/db.bi: Likewise.
	* src/savsrv.c: Likewise.
	* src/srvcfg.c (srv_cfg_param) <database-type>: New statement.
	* lib/libmf.h (config_cb_ignore): New proto.
	* lib/mfdb.h (db_item_printer_t): Change signature.
	* lib/utils.c (config_cb_ignore): New function.
	* po/POTFILES.in: Update.
	* src/Makefile.am (mailfromd_LDADD)
	(calloutd_LDADD): Remove libdbm.a.
	* src/calloutd.c: Update.
	* src/main.c (mf_cfg_param): lock-retry-count and
	lock-retry-timeout are no-op now.
	* src/mfdbtool.c: Likewise.

2011-11-08  Sergey Poznyakoff  <gray@gnu.org.ua>

	Adapt for MU 2.99.94

	* configure.ac: Require MU 2.99.94
	* lib/mf-dbm.c: Use EACCES instead of the removed MU_ERR_UNSAFE_PERMS
	* src/builtin/burst.bi (finish_stream): Use MU_ERR_INVALID_EMAIL instead
	of the removed MU_ERR_BAD_822_FORMAT.
	* src/mfdbtool.c (main): exit on invalid usage.

2011-10-08  Sergey Poznyakoff  <gray@gnu.org.ua>

	Docs: fix sentence spacing; use @: where appropriate.

2011-10-02  Sergey Poznyakoff  <gray@gnu.org.ua>

	Use Imprimatur for doc development and maintenance.

	* Makefile.am (SUBDIRS): Add imprimatur.
	* configure.ac: Invoke IMPRIMATUR_INIT
	* doc/Makefile.am: Update.
	* doc/check-docs.sh: Remove.
	* doc/rendition.texi: Remove.
	* doc/untabify.el: Remove.
	* doc/mastermenu.el: Remove.
	* doc/functions.texi: Minor changes.
	* doc/mailfromd.texi: Minor changes.
	* doc/mfdbtool.texi: Minor changes.

2011-09-02  Sergey Poznyakoff  <gray@gnu.org.ua>

	Bugfix

	* src/builtin/io.bi (open_program_stream): Print the value of
	errno, not rc (which is irrelevant if execve fails).

2011-09-01  Sergey Poznyakoff  <gray@gnu.org.ua>

	Document DSPAM, fix doc compilation.

	* NEWS: Update.
	* doc/Makefile.am (AM_MAKEINFOFLAGS): Use abs_top_srcdir
	Pass --I option to texi2html.
	* doc/functions.texi: Document DSPAM.
	Use @deftypevr instead of @deftypevar.
	* doc/mailfromd.texi: Update.

2011-08-29  Sergey Poznyakoff  <gray@gnu.org.ua>

	Further improvements to the message_burst interface.

	* NEWS, doc/functions.texi: Update.
	* mflib/status.mf (BURST_ERR_MASK): New mask.
	(BURST_DECODE): New flag.
	* src/builtin/burst.bi (burst_stream) <on_bad_format>: Remove.
	<burst_ctl>: New member.
	(finish_stream): Select error action from burst_ctl.
	(burst_digest): Optionally decode MIME parts.

	Separate C and MFL constant space.

	* mflib/.gitignore: Add status.h
	* mflib/Makefile.am (noinst_HEADERS): Add status.h
	(BUILT_SOURCES): Expand to noinst_HEADERS
	* mflib/dspam.mf: Change prefix to _MFL_
	* mflib/status.mf: Likewise.
	* mflib/syslog.mf: Likewise.
	* src/builtin/builtin.c (_builtin_const_to_c)
	(_builtin_c_to_const,_builtin_const_to_bitmap): New functions.
	* src/builtin/builtin.def (builtin_const_trans): New struct.
	(_builtin_const_to_c,_builtin_c_to_const)
	(_builtin_const_to_bitmap): New protos.
	* src/builtin/burst.bi: Include mflib/status.h. Rename BURST_
	constants to agree with the new prefix.
	* src/builtin/dspam.bi: Use translation functions from builtin.c.
	* src/builtin/syslog.bi: Likewise.
	* src/builtin/io.bi: Translate shutdown modes.
	* src/builtin/snarf.m4 (MF_TRANS_PREFIX): New constant.
	(MF_TRANS): New macro.
	* src/builtin/system.bi: Translate access modes.

	Fix NEWS

	Improve error handling in message_burst.

	* mflib/status.mf (BURST_ERR_FAIL)
	(BURST_ERR_IGNORE,BURST_ERR_BODY): New constants.
	* src/builtin/burst.bi (burst_stream) <on_bad_format>: New member.
	(finish_stream): If the stream cannot be converted to message,
	use on_bad_format to decide what to do with it.
	(message_burst): Take optional argument.
	* src/builtin/sa.bi (set_xscript): Now returns void.
	* src/prog.c (env_function_cleanup_del): Bugfix.

	* NEWS, doc/functions.texi: Document the changes to message_burst.

2011-08-27  Sergey Poznyakoff  <gray@gnu.org.ua>

	Minor changes.

	* src/builtin/burst.bi (DEFAULT_EB_LEN): New define
	(MF_INIT): Initialize burst_eb_min_length.
	* doc/functions.texi: Document RFC 934 functions.

	Implement a built-in function for bursting RFC 934 digests.

	* configure.ac: Require Mailutils 2.99.93

	* src/prog.c (_cleanup_destroy) allow for clos->cleanup == NULL.
	(env_function_cleanup_del): New function.
	* src/prog.h (env_function_cleanup_del): New proto.

	* mflib/status.mf (e_format): New exception.

	* src/builtin/snarf.m4 (MF_CLR_CLEANUP): New macro.
	* src/builtin/burst.bi: New source.
	* src/builtin/Makefile.am (BI_FILES): Add burst.bi

	* src/builtin/body.bi (current_message): Pass MF_MSG_CURRENT
	to bi_message_register.
	* src/builtin/mbox.bi (mailbox_get_message): Pass MF_MSG_MAILBOX
	to bi_message_register.
	* src/builtin/msg.bi (drop_current_message)
	(bi_get_current_message): Check for MF_MSG_CURRENT
	(bi_close_message): Destroy the message if type is MF_MSG_STANDALONE.
	(bi_message_register): Change meaning of the last argument.
	* src/builtin/msg.h (MF_MSG_MAILBOX)
	(MF_MSG_CURRENT,MF_MSG_STANDALONE): New defines.
	(mf_message) <mylist>: Remove.
	(mf_message) <current>: Rename to type.
	* src/builtin/sieve.bi: Fix a bug introduced in 19f41d6c5b.

	* NEWS: Document message_burst.
	* doc/functions.texi: Restructure the "Message functions" section.

2011-08-24  Sergey Poznyakoff  <gray@gnu.org.ua>

	Improve third-party interfaces to process arbitrary messages (not only current one).

	* NEWS: Updated.
	* doc/functions.texi: Reflect changes in sieve, clamav
	and sa (spamc) functions.
	* mflib/Makefile.am: Build sa.h
	* mflib/sa.mf (SA_SYMBOLS, SA_REPORT)
	(SA_LEARN_SPAM,SA_LEARN_HAM,SA_FORGET): New constants.
	(sa): Wrapper over spamc for backward compatibility.
	* src/builtin/Makefile.am (builtin.h): Depends on builtin.def
	* src/builtin/body.bi (current_message): Use MF_STREAM_TO_MESSAGE.
	* src/builtin/builtin.c: Add more includes.
	(_builtin_stream_cleanup): New function.
	(_builtin_mu_stream_to_message): New function.
	* src/builtin/builtin.def (_builtin_stream_cleanup)
	(_builtin_mu_stream_to_message): New protos.
	* src/builtin/dspam.bi: Use _builtin_stream_cleanup for
	stream cleanups.
	* src/builtin/msg.bi (message_from_stream): Use MF_STREAM_TO_MESSAGE.
	* src/builtin/sa.bi (open_connection): Register returned stream
	for cleanup.
	(sa): Rewrite as spamc function.
	(clamav): Take message descriptor as the first argument.
	* src/builtin/sieve.bi (sieve): Take message descriptor as the first argument.
	Use cleanups.
	* src/builtin/snarf.m4 (MF_STREAM_TO_MESSAGE): New macro.
	* src/main.c (options): Remove "debug" option, handled by srvcfg.c
	* tests/bctx00.at: Use current_message function.
	* tests/bctx01.at: Likewise.
	* tests/fctx00.at: Likewise.
	* tests/fctx01.at: Likewise.

2011-08-23  Sergey Poznyakoff  <gray@gnu.org.ua>

	Bugfix.

	* src/builtin/dspam.bi: Translate return code.
	Change handling of class_src argument.
	* mflib/dspam.mf: Redefine DSS_NONE,DSR_NONE to be 0.

2011-08-22  Sergey Poznyakoff  <gray@gnu.org.ua>

	Parse dspam configuration file.

	* mflib/dspam.mf: Start DSZ_ constants from 1.
	* src/builtin/dspam.bi: Parse dspam.conf
	* src/builtin/snarf.m4 (__MF_DSEXP_REQ): Fix quoting.

2011-08-21  Sergey Poznyakoff  <gray@gnu.org.ua>

	Minor change

	* src/builtin/dspam.bi: Configure training mode.

2011-08-20  Sergey Poznyakoff  <gray@gnu.org.ua>

	Minor fixes.

	Merge branch 'master' of ssh://git.gnu.org.ua/gitroot/mailfromd

	Implement dspam support.

	* configure.ac: Check for dspam
	* mflib/.gitignore: Add dspam.h
	* mflib/Makefile.am: Build dspam.h
	Install dspam.mf
	* mflib/dspam.mf: New file.
	* src/Makefile.am (mailfromd_LDADD): Add DSPAM_LIBS
	(INCLUDES): Add DSPAM_CFLAGS
	* src/builtin/Makefile.am (BI_FILES): Add dspam.bi.
	(INCLUDES): Add DSPAM_CFLAGS
	* src/builtin/dspam.bi: New file.
	* src/main.c (mailfromd_show_defaults): Reflect dspam support.

	New macros and functions for registering function cleanup sequence in environments.

	Cleanup sequence holds pointers to data created within the function along
	with the corresponding functions for their disposal.  When the function
	terminates or raises an exception, the sequence is executed thereby freeing
	the temporary data.

	* mflib/mfh.awk: Convert # comments to C-style.
	* src/builtin/io.bi (REDIRECT_STDOUT_P): Remove useless comparison.
	* src/builtin/snarf.m4 (MF_VAR_STRING): New macro
	(END): Call env_function_cleanup_flush.
	(MF_DCL_CLEANUP,MF_CLEANUP): New macros.
	* src/builtin/spf.bi (spf_check_host)
	(spf_test_record): Use MF_VAR_STRING to initialize q.exp_prefix.
	* src/prog.c (environ_cleanup_closure): New struct.
	(eval_environ)<cleanup_list>: New member.
	(env_create_cleanup_list): New static function.
	(env_function_cleanup_flush)
	(env_function_cleanup_add): New function.
	(env_throw_0): Call env_function_cleanup_flush.
	(create_environment): Create cleanup_list.
	(destroy_environment): Destroy it.
	* src/prog.h (env_function_cleanup_add)
	(env_function_cleanup_flush): New protos.

2011-08-18  Sergey Poznyakoff  <gray@gnu.org.ua>

	Improve I/O interface, implement new functions.

	* mflib/status.mf (SHUT_RD,SHUT_RW)
	(SHUT_RDWR): New constants.
	* src/builtin/io.bi (io_stream) <shutdown>: New member
	(open_inet_stream): Set str->shutdown.
	(tempfile,shutdown,rewind,copy): New built-in functions.
	* src/builtin/mail.bi (_send): Recipient address (to)
	can be null.
	(send_mail,send_text): `To' argument is now optional.
	(send_message): New built-in function.
	* src/builtin/msg.bi (message_copy): Rename to
	message_to_stream
	(message_copy_body): Rename to message_body_to_stream.
	(message_to_stream): New built-in function.

	* NEWS: Document new functions.
	* doc/functions.texi: Likewise.

2011-08-17  Sergey Poznyakoff  <gray@gnu.org.ua>

	Pass content size to item printers

	* lib/mfdb.h (db_item_printer_t): Take four arguments.
	* lib/cache.c: Update item printers.
	* lib/db.c: Likewise.
	* lib/greylist.c: Likewise.
	* lib/tbf_rate.c: Likewise.
	* lib/rate.c: Likewise.

	Minor fix

	Implement getenv() builtin and string_list_iterate macro.

	* mflib/pp-setup (string_list_iterate): New macro.
	* src/builtin/system.bi (getenv): New function.

	* NEWS: Update.
	* doc/functions.texi: Update.
	* doc/mailfromd.texi: Update.

	Implement message_copy and message_body_copy built-ins.

	* src/builtin/io.bi (_bi_io_fd): New function.
	* src/builtin/msg.bi (message_copy)
	(message_body_copy): New builtin functions.
	* src/builtin/msg.h (_bi_io_fd): New proto.
	* doc/functions.texi: Document new functions.
	* NEWS: Mention new functions.

2011-08-16  Sergey Poznyakoff  <gray@gnu.org.ua>

	Fix IPv6 recognition in configure.

	* am/ipv6.m4: check whether getaddrinfo works for AF_INET6.
	* tests/connect03.at: Fix prerequisite.

2011-08-14  Sergey Poznyakoff  <gray@gnu.org.ua>

	Call connect handler from mtasim.

	* configure.ac (MF_IPV6_SUPPORT): New subst var.
	* gacopyz/gacopyz_priv.h (GACOPYZ_IPV6PREFIX_STR)
	(GACOPYZ_IPV6PREFIX_LEN): New macros.
	* gacopyz/gacopyz.h (gacopyz_srv_connect): Rename to gacopyz_srv_open
	(gacopyz_srv_conn): Rename to gacopyz_srv_connect.
	* gacopyz/gacopyz.c (shan_connect): Use GACOPYZ_IPV6PREFIX_STR
	and GACOPYZ_IPV6PREFIX_LEN macros instead of the literals.
	<inet6>: Convert port to network byte order.
	* gacopyz/server.c (gacopyz_srv_connect): Rename to gacopyz_srv_open.
	(gacopyz_srv_conn): Remove.
	(gacopyz_srv_connect): New function.
	* mtasim/mtasim.c (sender_hostname, sender_sockaddr): New variables.
	(OPTION_SENDER_SOCKADDR): New option code.
	(options)<--sender-sockaddr>: New option.
	(parse_opt): Handle OPTION_SENDER_SOCKADDR.
	(main): Call gacopyz_srv_connect if sender_hostname is set.
	(smtp): Call gacopyz_srv_connect before handling first
	SMTP command, unless it has already been called before.
	(shell_help): Show \S command if available.
	(shell): Handle \S command.
	* pmult/pmult.c: Reflect the above changes.
	* tests/Makefile.am (TESTSUITE_AT): Add connect00.at, connect01.at,
	connect02.at and connect03.at.
	* tests/testsuite.at: Include connect00.at -- connect03.at.
	* tests/atlocal.in (MF_IPV6_SUPPORT): New variable.
	* tests/connect00.at: New testcase.
	* tests/connect01.at: New testcase.
	* tests/connect02.at: New testcase.
	* tests/connect03.at: New testcase.

	* NEWS: Update.
	* doc/mtasim.texi: Document the \S command and the --sender-sockaddr
	option.
	* doc/mailfromd.texi: Update.

2011-08-09  Sergey Poznyakoff  <gray@gnu.org.ua>

	Add a testcase for #! ... !# comment.

	* tests/atlocal.in (MAILFROMD): New variable.
	* tests/shellmagic.at: New file.
	* tests/Makefile.am: Add shellmagic.at
	* tests/testsuite.at: Include shellmagic.at

	Minor fix.

	* doc/mailfromd.texi: Make it clear that the initial #! must
	have a closing !#.

2011-08-08  Sergey Poznyakoff  <gray@gnu.org.ua>

	Implement the initial #! ... !# block comment.

	* src/lex.l: Handle initial #! ... !# block comment.
	* doc/mailfromd.texi: Document the #! ... !# comment.
	* NEWS: Update.

2011-07-18  Sergey Poznyakoff  <gray@gnu.org.ua>

	Bugfix

	* src/builtin/mail.bi: Redo message creation using
	a static stream.

2011-07-05  Sergey Poznyakoff  <gray@gnu.org.ua>

	Improve reporting of startup errors. HUP restarts the program only if syntax check succeeds.

	* lib/libmf.h (mf_server_lint_option): New extern.
	* lib/server.c (mf_server_lint_option): New global
	variable.
	(sig_restart): Don't call mfd_srvman_stop.
	(run_lint,server_idle_hook): New functions.
	(mf_server_start): Install idle hook.
	HUP restarts the program only if syntax check succeeds.
	Close fds above 2 if using stderr for error output,
	and from 1 if using syslog.
	* src/calloutd.c (main): Call mu_stdstream_setup.
	Set mf_server_lint_option.
	* src/main.c (main): Check whether stderr is open as early as possible.
	Update call to mu_stdstream_setup (needs MU 5e1d982ec).
	Set mf_server_lint_option.
	* src/srvcfg.c (srv_parse_opt): Make sure --syslog takes effect
	at once.

2011-07-04  Sergey Poznyakoff  <gray@gnu.org.ua>

	Minor improvement.

	* lib/srvman.c (report_exit_status): Surround PIDs with square brackets
	to facilitate grepping in logfiles.

	Bugfix

	* lib/syslog_async.c (find_percent_m): Fix endless loop.

2011-06-30  Sergey Poznyakoff  <gray@gnu.org.ua>

	Minor change.

	* etc/Makefile.am (install-data-local): Don't check for the
	pre-6.0 mailfromd.rc

2011-06-20  Sergey Poznyakoff  <gray@gnu.org.ua>

	Restore last_poll_host.

	* mflib/callout.mf4 (callout_do): Handle INIT.
	* src/callout.c (callout_io): Pass hostname as argument to INIT.
	* src/savsrv.c (savsrv_smtp_io_callback): Don't ignore INIT.

2011-03-30  Sergey Poznyakoff  <gray@gnu.org.ua>

	Minor fix

	* mflib/portprobe.mf4 (portprobe): Allow for family specification
	in host argument.

	Implement IPv6 support.

	* am/ipv6.m4: New file
	* configure.ac: Call MF_ENABLE_IPV6
	* gacopyz/gacopyz.c (parse_url,do_connect)
	(gacopyz_parse_connection): Handle IPv6 addresses.
	(shan_connect): Remove IPv6: prefix from addresses.
	* gacopyz/gacopyz.h (milter_sockaddr_t) [GACOPYZ_IPV6] <sin6>: New member.
	(gacopyz_srv_set_source): Alter signature.
	* gacopyz/server.c (gacopyz_srv) <source_addr>: Change type to
	struct sockaddr. All uses updated.
	<source_addr_len>: New member.
	(gacopyz_srv_set_source): Change signature.
	(gacopyz_srv_destroy): Free source_addr.
	(srv_connect): Support IPv6

	* lib/srvman.c (srvman_url_to_sockaddr): Handle IPv6 addresses.
	* mflib/status.mf (FAMILY_INET6): New constant.
	* src/builtin/io.bi (open_parsed_inet_stream): Handle IPv6 addresses.
	* src/builtin/vars.bi (set_milter_$1_address): Handle IPv6 addresses.
	* src/engine.c (mlfi_connect): Handle IPv6 addresses.
	* src/callout.c (smtp_io_open): Handle IPv6 addresses.
	* src/mailfromd.h (MFAM_INET6): New constant.
	(source_address): Change type to struct mu_sockaddr.
	* src/srvcfg.c (source_address): Change type to struct mu_sockaddr.
	(mf_srvcfg_add): Don't abort if mfd_server_new returns NULL
	(mf_option_source_ip,option_source_ip): Remove.
	(set_source_ip): Use mu_sockaddr_from_node to parse the address.
	(cb_source_ip): Call set_source_ip.
	* src/srvcfg.h (source_address): Change type to struct mu_sockaddr.

2011-03-25  Sergey Poznyakoff  <gray@gnu.org.ua>

	Version 7.99.90

	Version number updated to avoid confusion with the 7.x branch

2011-03-24  Sergey Poznyakoff  <gray@gnu.org.ua>

	syslog_async: add support for %m format specifier.

	* lib/syslog_async.c (find_percent_m): New static function.
	(vsyslog_async_logger): New static function, from renamed
	vsyslog_async.
	(syslog_async, vsyslog_async): Rewrite as a wrapper around
	vsyslog_async_logger.

	Minor change

	* src/callout.c (callout_host): Reword a debugging message.

2011-03-23  Sergey Poznyakoff  <gray@gnu.org.ua>

	Minor fix

	* src/builtin/.gitignore: Add syslog.c

	Implement modulo operator.

	* src/drivers.c (optimize_arith,code_type_bin): Implement modulo
	operator.
	* src/gram.y: Implement modulo operator.
	* src/lex.l: Withdraw support for %ident.
	* src/mailfromd.h (bin_opcode) <bin_mod>: New constant.
	* src/opcodes (MOD): New opcode.
	* src/prog.c (instr_mod): New function.
	* doc/mailfromd.texi: Update.
	* NEWS: Update.

	Minor change

	* mflib/syslog.mf: Rewrite facility constants in a
	traditional way, i.e. as (N<<3).

	Implement bitwise shifts.

	* doc/mailfromd.texi: Document << and >>
	* src/drivers.c (optimize_arith,optimize_type_bin): Implement
	bitwise operations.
	* src/gram.y: Implement bitwise << and >>.
	* src/lex.l: Likewise.
	* src/mailfromd.h (bin_opcode): New opcodes bin_shl and bin_shr.
	* src/opcodes (SHL, SHR): New opcodes.

	Bugfix in syslog_async

	* lib/syslog_async.c (vsyslog_async): accept the facility level
	ORed in the priority argument.

	New builtin function: syslog.

	* lib/libmf.h (logger) <log_text>: New member
	(logger_text): New proto.
	* lib/logger.c: Add static qualifiers where they belong
	(syslog_default_logtext,syslog_async_logtext): New static functions.
	(logger_text): New function.
	* mflib/mfh.awk: New file.
	* mflib/Makefile.am (noinst_HEADERS,BUILT_SOURCES): Add syslog.h
	(EXTRA_DIST): Add mfh.awk
	(.mf.h): Use mfh.awk to generate the goal.
	* mflib/.gitignore: Add syslog.h
	* src/builtin/syslog.bi: New file.
	* src/builtin/Makefile.am (BI_FILES): Add syslog.bi
	* NEWS: Update.
	* doc/functions.texi: Update.

2011-03-22  Sergey Poznyakoff  <gray@gnu.org.ua>

	Use C-escape filter (MU b5c66e41) to format trace output.

	* src/main.c (mf_trace_stream): New static var.
	(open_trace_stream): New static function.
	(trace): Print to mf_trace_stream.

2011-03-19  Sergey Poznyakoff  <gray@gnu.org.ua>

	Document enable-vrfy.

	Update docs.

	* NEWS: Update.
	* doc/mailfromd.texi: Remove the description of the
	standalone listen statement,
	Move descriptionis of --lock-retry-* options to mfdbtool.texi
	* doc/mfdbtool.texi: Describe --lock-retry-* options.
	* doc/Makefile.am (check-config): Ignore keywords not
	starting with [a-zA-Z_].

	Restore lock-retry-count and lock-retry-timeout configuration statements

	* lib/mf-dbm.h (lock_retry_timeout_option): New extern.
	* lib/libmf.h (mf_option_time_t, config_cb_time_t): New protos.
	* lib/optcache.c (mf_option_time_t): New function.
	* lib/utils.c (config_cb_time_t): New function.
	* src/main.c (mf_cfg_param): Restore lock-retry-count
	and lock-retry-timeout statements.
	(cb_timeout): Remove.  Use config_cb_timeout instead
	* mfdbtool.c (options, parse_opt): Enable --lock-retry-count
	and --lock-retry-timeout options,
	(option_cache): Define lock-retry-count and lock-retry-timeout
	caches.
	* TODO: Update

	Provide a definition of timersub for platforms missing it

	* gacopyz/gacopyz_priv.h [!timersub]: Define timersub

2011-03-18  Sergey Poznyakoff  <gray@gnu.org.ua>

	mtasim: minor improvement

	* mtasim/mtasim.c (start_mailfromd): Print mailfromd PID in verbose mode.

	Rethink the solution to mtasim interaction problem (see c0535e8e).

	* src/main.c (parse_opt) <OPTION_MTASIM>: Rollback c0535e8e.
	(mtasim_option): Move to srvcfg.c.
	* src/srvcfg.c (server_section_parser) <mu_cfg_section_end>: If
	mtasim_option is set, ignore the server statements.

2011-03-17  Sergey Poznyakoff  <gray@gnu.org.ua>

	Bugfix

	* src/builtin/debug.bi (callout_transcript): Fix return type.

	Implement callout_transcript function to toggle SMTP transcript on and off.

	* src/builtin/debug.bi (callout_transcript): New function.
	* NEWS: Mention callout_transcript.
	* doc/functions.texi: Document callout_transcript.

	Improve interaction with mtasim.

	Jan Rafaj reported that the use of mtasim -Xauto may result in
	the subordinate mailfromd removing the UNIX communication sockets
	of the main running process.  This can happen if: (1) there is
	a mailfromd process running on the box where mtasim is run and
	(2) the user does not supply --no-site-config option to the subordinate.

	* src/main.c (parse_opt) <OPTION_MTASIM>: Inhibit
	loading of the default configuration files.

2011-03-14  Sergey Poznyakoff  <gray@gnu.org.ua>

	docs: document mailfromd options

	* doc/Makefile.am (check-config): Fix the rule
	* doc/mailfromd.texi: Document mailfromd options.

	* etc/Makefile.am (.mf.lint): -I$(top_srcdir)/src is no
	longer needed (see 01ad06fc).
	* mflib/Makefile.am: Likewise.

2011-03-13  Sergey Poznyakoff  <gray@gnu.org.ua>

	Rename .pm:server config section to .mfd:server.  Fix check-docs.

	New function header_rename_pattern

	* NEWS: Update.
	* mflib/header_rename.mf4: New function header_rename_pattern.
	* doc/functions.texi: Document changes to message_header_count.
	Document header_rename_pattern.

	Improve docs

	* NEWS: Update.
	* doc/functions.texi: Document new built-in and most library
	functions.
	* doc/upgrade.texi: Update.

	* src/builtin/debug.bi (debug_level): Fix the use of modname.
	(debug_spec): Remove the minlevel parameter.
	* src/builtin/io.bi: Remove misleading comment.
	* src/main.c: Restore the --debug option.

2011-03-12  Sergey Poznyakoff  <gray@gnu.org.ua>

	Minor fix.

	Update docs.

	* doc/mailfromd.texi: Document new pragmas (prereq and provide-callout)

	docs: improve check-docs, document mfdbtool.

	* doc/mfdbtool.texi: New file.
	* doc/calloutd.texi: New file.
	* doc/Makefile.am (mailfromd_TEXINFOS): Add new files.
	(check-options): depend on several check-*-options goals
	(check-mailfromd-options)
	(check-calloutd-options)
	(check-mfdbtool-options): New goals.
	(check-sub-config): Scan $(top_srcdir)/lib/dbcfg.c as well.
	* doc/check-docs.sh: Minor change
	* doc/functions.texi: Remove the discussion of DNS Cache Management.
	* doc/macros.texi (xopindex, opsummary): Take the program name as
	the 2nd argument. All uses changed.
	* doc/mailfromd.texi: Add documentation placeholder for calloutd.
	Add documentation of mfdbtool.
	Remove description of DEFAULT_DNS_NEGATIVE_EXPIRE_INTERVAL and
	dns database.

2011-03-11  Sergey Poznyakoff  <gray@gnu.org.ua>

	Improve check-docs

	* doc/Makefile.am (check-pragmas): Implement the rule.
	* doc/check-docs.sh: Remove leading whitespace from joinable
	files.

	Ensure the same set of constants is used in the sources and in the documentation.

	* .gitignore: Add global.h and global.texi
	* global.awk: New file.
	* global.texi: New file.
	* Makefile.am (SUBDIRS): Begin with .
	(noinst_HEADERS): Add global.h
	(noinst_DATA): Add global.texi
	(BUILT_SOURCES): Add both.
	(EXTRA_DIST): Likewise. Add global.def and global.awk
	(.def.h): New rule
	(.def.texi): New rule
	* doc/values.texi: Remove.
	* doc/Makefile.am (mailfromd_TEXINFOS): Remove values.texi.
	(AM_MAKEINFOFLAGS): Add top_srcdir to include path.
	* doc/mailfromd.texi: Include global.texi instead of values.texi.
	* doc/functions.texi: Update.

	* src/builtin/dns.bi: Include global.h.  Use constants defined in it.
	* src/builtin/io.bi: Likewise.
	* src/builtin/mbox.bi: Likewise.
	* src/builtin/msg.bi: Likewise.
	* src/prog.c: Likewise.
	* src/builtin/msg.h (NMBOXES, NMSGS): Remove definitions.

2011-03-10  Sergey Poznyakoff  <gray@gnu.org.ua>

	Minor documentation changes.

	* doc/Makefile.am (check-config, check-exceptions): Fix rules.
	* doc/mailfromd.texi: Document e_exists.
	* doc/values.texi (MIN_EXCEPTION, MAX_EXCEPTION): Remove.
	(E_EXCEPTIONS): New value.

	Implement escape/unescape builtin functions and functions for email processing.

	* mflib/.gitignore: Add email.h
	* mflib/Makefile.am (noinst_HEADERS,BUILT_SOURCES): Add email.mf
	* mflib/email.mf: New file.
	* mflib/callout.mf4 (callout_do): Escape email.
	* src/builtin/email.bi (email_map): New function.
	* src/builtin/string.bi (escape, unescape): New functions.
	* doc/functions.texi: Document new functions.

	More bugfixes

	* src/main.c (main): Call mf_server_log_setup only for
	mode==MAILFROMD_DAEMON.
	(parse_opt): Allocate strings appended to args->trace_modules.
	* src/prog.c (instr_xmemstk): Adjust stack before pushing to it.
	(dump_catch): Print exception names.

2011-03-09  Sergey Poznyakoff  <gray@gnu.org.ua>

	Version 7.0.95

	* NEWS, configure.ac: Update.

	Restore (try,catch)/loop/(break,next) functionality.

	The commit bd4fb40f took care about breaks and nexts called from
	tries/catches that appear within a loop, but in the meantime it
	broke the functionality of breaks/nexts called within loops which
	are nested in a try or catch block.  This is fixed in this commit.

	* src/drivers.c (trycatch_stack_entry) <id>: New member.
	(trycatch_last_id): New function.
	(enter_trycatch): Initialize ent.id.
	(_code_trycatch_exit): Break the iteration if current entry id is
	less than the loop id.
	(code_trycatch_exit): Take block ID as argument.
	(enter_loop): Initialize trycatch_id.
	(code_type_next, code_type_break): Pass loop ID to code_trycatch_exit.

	* tests/trycatch13.at: New testcase.
	* tests/trycatch14.at: New testcase.
	* tests/Makefile.am (TESTSUITE_AT): Add new testcases.
	* tests/testsuite.at: Include new testcases.

	* tests/miltermacros.at: Fix a typo.

	Fix built-in macro expansion in strings appearing within pragmas.

	* src/pragma.c (nextword): Advance *end past the final quote.
	* tests/expstr.at: New testcase.
	* tests/Makefile.am (TESTSUITE_AT): Add expstr.at
	* tests/testsuite.at: Include expstr.at
	* tests/macros.at: Add keywords.

	Cleanup.

	* po/POTFILES.in: Remove appinit.c (See e473ab7d).
	* src/Makefile.am: Restore incdir, needed for AM_CPPFLAGS. Was
	accidentally removed in 01ad06fca.
	* src/builtin/sa.bi (sa): Restore initialization of msize. Accidentally
	removed in bcd64af9.
	* src/main.c: Call mf_server_log_setup after compiling the sources, so
	that --lint spits out its diagnostics on stderr (initially placed here
	in e75c9a39).

	Fix deferred variable initialization.

	The bug was spotted by Brian Kroth.

	* src/gram.y (deferred_decl) <locus>: New member.
	(defer_initialize_variable): Use string_alloc
	instead of literal_lookup. Take additional argument (ptr to locus). All
	uses updated.
	(apply_deferred_init): Pass a ptr to the actual locus to initialize_variable.
	* src/mailfromd.h (defer_initialize_variable): Change signature.
	* src/main.c (cb_set_variable): Deduce definition location from
	mu_strerr.
	* THANKS: Update.
	* tests/setvar.at: New testcase.
	* tests/Makefile.am (TESTSUITE_AT): Add setvar.at.
	* tests/testsuite.at: Include setvar.at.
	* tests/invcidr.at: Update experr.
	* tests/invcidr2.at: Likewise.

	Bugfix.

	* src/lex.l (lex_new_source): Fail if the fail is not a regular one.

2011-03-07  Sergey Poznyakoff  <gray@gnu.org.ua>

	Sync with MU commit 4bcd5c9de0cb6ca85bcc3a35b1518739b939b009.

	* lib/appinit.c: Remove.
	* lib/Makefile.am (libmf_a_SOURCES): Remove appinit.c
	* lib/libmf.h (mu_app_rcfile, mfd_app_init): Remove.
	* src/calloutd.c (main): Use mu_app_init. Set mu_site_rcfile beforehand.
	* src/main.c (main): Likewise.
	* src/mfdbtool.c (main): Likewise.

2011-03-05  Sergey Poznyakoff  <gray@gnu.org.ua>

	Sync with MU commit ad938c5af.

	* lib/appinit.c (mfd_parse_config_files): Remove.
	(mfd_app_init): Use new API.

	Bugfix

	* src/main.c (cb_set_variable): Fix argument cast.

2011-03-03  Sergey Poznyakoff  <gray@gnu.org.ua>

	Minor changes

	Use `volatile' qualifier for variables that can change during dataseg expansion.

	* src/builtin/snarf.m4 (__mf_dataseg): New define.
	(MF_DSEXP, __MF_DSEXP_REQ)
	(__mf_define_fun, MF_DSEXP_SUPPRESS): New macros.
	(__mf_c_type): Define string arguments wiht __mf_dataseg qualifier.
	(MF_DEFUN): For functions returning STRING assume MF_DSEXP.
	(MF_ALLOC_HEAP,MF_ALLOC_HEAP_TEMP)
	(MF_COPY_STRING): Call __MF_DSEXP_REQ
	(END): Redefine __mf_dataseg to empty string.

	* src/builtin/db.bi (dbmap_lookup): Define within a
	MF_DSEXP_SUPPRESS block.
	(dbmap): Mark as MF_DSEXP.
	* src/builtin/sa.bi (sa, clamav): Mark as MF_DSEXP.
	* src/builtin/spf.bi (update_spf_vars): Define within a
	MF_DSEXP_SUPPRESS block.
	(spf_check_host, spf_test_record): Mark as MF_DSEXP.
	* src/builtin/string.bi (rindex): Mark as MF_DSEXP.
	* src/builtin/vars.bi (set_milter_$1_address): Define within
	a MF_DSEXP_SUPPRESS block.
	(set_milter_server_id): Likewise.

	* src/prog.c (get_string_arg): Use MFL_DATASEG qualifier for return pointer
	(get_pointer_arg): Likewise.
	(heap_obstack_grow, pushs): Use MFL_DATASEG qualifier for pointer arg.
	(instr_concat): Use MFL_DATASEG qualifiers for left and right declarations.
	* src/prog.h (MFL_DATASEG): New define.
	(get_pointer_arg, get_string_arg)
	(heap_obstack_grow, pushs): Change signature.

	Bugfix

	* src/prog.c (instr_backref): Reference matchstr only after
	eventual dataseg expansion.
	(env_pop_auto): New function.
	(pushs): Protect source pointer from changing during dataseg expansion
	(env_final_gc): Likewise.
	(heap_obstack_grow): Likewise.

2011-03-02  Sergey Poznyakoff  <gray@gnu.org.ua>

	Fix the usage of `next' and `break' in try/catch blocks.

	* src/drivers.c (enter_trycatch, leave_trycatch)
	(code_trycatch_exit): New functions.
	(code_type_catch): Enclose traverse_tree in enter_trycatch/leave_trycatch.
	(code_type_try): Likewise.
	(code_type_next): Call code_trycatch_exit to make sure any
	outer tries/catches are exited correctly.
	(code_type_break): Likewise.

	* tests/trycatch05.at: New file.
	* tests/trycatch06.at: New file.
	* tests/trycatch07.at: New file.
	* tests/trycatch08.at: New file.
	* tests/trycatch09.at: New file.
	* tests/trycatch10.at: New file.
	* tests/trycatch11.at: New file.
	* tests/trycatch12.at: New file.
	* tests/Makefile.am (TESTSUITE_AT): Add trycatch05.at - trycatch12.at
	* tests/testsuite.at: Include trycatch05.at - trycatch12.at
	* tests/trycatch01.at: Update AT_KEYWORDS.
	* tests/trycatch02.at: Likewise.
	* tests/trycatch03.at: Likewise.
	* tests/trycatch04.at: Likewise.

	* doc/.gitignore: Update.
	* mflib/.gitignore: Update.
	* src/builtin/.gitignore: Update.

	Move debugging API to a separate compilation unit.

	Rename wd built-in to _wd.

	* src/builtin/debug.bi: New file.
	* src/builtin/Makefile.am (BI_FILES): Add debug.bi
	* src/builtin/other.bi: Move debugging functions to debug.bi.
	* src/prog.c (env_register_read) <REG_REG>: Add a type cast.

	New debugging function: _reg().

	* mflib/_register.mf: New file.
	* mflib/.gitignore: Add _register.mf
	* mflib/Makefile.am (MF_FILES): Add _register.mf
	(noinst_HEADERS, BUILT_SOURCES): Add _register.h
	* src/builtin/other.bi (_reg): New function.
	* src/prog.c (env_register_read): New function.
	* src/prog.h (env_register_read): New proto.

	Minor fix

	* src/drivers.c (print_type_try): Fix output indentation.

2011-03-01  Sergey Poznyakoff  <gray@gnu.org.ua>

	New pragma: prereq.  New function: vercmp.

	* NEWS, configure.ac: Version 7.0.94
	* lib/vercmp.c: New file.
	* lib/Makefile.am (libmf_a_SOURCES): Add vercmp.c
	* lib/libmf.h (mf_vercmp): New proto.

	* src/builtin/Makefile.am (BI_FILES): Add prereq.bi.
	* src/builtin/.gitignore: Add prereq.c
	* src/prog.c (env_throw_0): Reword unknown exception diagnostics.

	* tests/vercmp.at: New file.
	* tests/vercmp01.at: New file.
	* tests/vercmp02.at: New file.
	* tests/Makefile.am (TESTSUITE_AT): Add vercmp.at, vercmp01.at
	and vercmp02.at.
	* tests/testsuite.at: Include vercmp testcases.

	* mflib/status.mf: Require mailfromd version 7.0.94 or later.
	[OLD_EXCEPTION_CODES]: Remove.

	* po/POTFILES.in: Update.

	Store exception names in the dataseg.

	* src/mf-status.c: Remove.
	* src/exclist.c: New file.
	* src/Makefile.am (mailfromd_SOURCES): Remove mf-status.c,
	add exclist.c.
	* src/gram.y (exdecl): Call define_exception.
	(dataseg_layout): Create table of exception names in dataseg.
	* src/mailfromd.h (define_constant): Change return value.
	(string_to_exception): Remove.
	(define_exception,enumerate_exceptions)
	(free_exceptions): New protos.
	* src/main.c (main): Call free_exceptions.
	* src/prog.c (exception_count): Move declaration to exclist.c
	(instr_throw): Add trace print.
	(dump_throw): Print exception number along with its symbolic value.
	(env_throw_0): Reword default message.
	* src/prog.h (EXTABIND): New macro.
	* src/symbols.c (define_constant): Return pointer to the allocated
	struct constant.
	* tests/eof.at: Reflect changes to env_throw_0.
	* tests/hdr-gete.at: Likewise.
	* mflib/mfex.awk: Simplify.

	Fix src/.gitignore

	Document e_exists and dbinsert (see commit 185360ba).

	New built-in: body_has_nulls

	* src/builtin/body.bi (body_has_nulls): New function.
	* doc/functions.texi: Document body_has_nulls.

	Revamp declaration of built-in exception codes.

	Exception codes are declared (via dclex) in mflib/status.mf.  The C code
	includes mflib/status.ex, which is generated from that file.

	* src/status.mfh: Move to mflib.
	* src/mf-status.mfi: Move to mflib/status.mfh
	* src/mf-status.mfi: Move to src/mf-status.c
	(std_status_tab): Include mflib/status.ex
	* src/mfstat.awk: Remove.
	* src/status.mfi: Remove.
	* src/Makefile.am: Reflect these changes.
	* src/mailfromd.h (mf_exception_code): Remove exception declarations,
	include mflib/status.ex instead.
	* src/prog.c (exception_count): Initialize to 0.
	(instr_restex): If count is 0, do nothing.
	(env_init): Copy exceptions only if exception_count is not 0.
	(env_throw_0): Remove extra \n from runtime error diagnostics.
	(create_environment): Allocate catch_ctx and defcatch_ctx only
	if exception_count is not 0.

	* mflib/.gitignore: Add status.ex
	* mflib/Makefile.am (inc_DATA,noinst_HEADERS,BUILT_SOURCES): Add status.mfh
	(MF_FILES): Add status.mf
	(EXTRA_DIST): Add mfex.awk
	(SUFFIXES): Add .ex
	(.mf.ex): New rule.
	* mflib/mfex.awk: New file.

	* tests/Makefile.am (status.mf): Depend on $(top_srcdir)/mflib/status.mf
	* tests/eof.at: Reflect changes to "built-in" exceptions.
	* tests/hdr-gete.at: Likewise.
	* tests/trycatch02.at: Likewise.
	* tests/trycatch04.at: Likewise.

2011-02-28  Sergey Poznyakoff  <gray@gnu.org.ua>

	Fix the use of user-defined exceptions.

	* src/prog.c (instr_throw): Use exception_count instead of
	mf_exception_count.

	Minor change

	Synchronize MF_SIEVE_ defines in C with the corresponding constants in MFL.

	* Makefile.am (SUBDIRS): Place mflib before lib and src.
	* mflib/.gitignore: Add sieve.h
	* mflib/Makefile.am (noinst_HEADERS,BUILT_SOURCES): New variables.
	(.mf.h): New implicit rule.
	* mflib/sieve.mf: Fix comment.
	* po/POTFILES.in: Remove builtin/mudebug.bi.
	* src/builtin/Makefile.am (INCLUDES): Add $(top_srcdir)
	* src/builtin/sieve.bi: Include mflib/sieve.h. Remove MF_SIEVE_ defines.

	Improve the sieve built-in.

	* mflib/sieve.mf (MF_SIEVE_FILE,MF_SIEVE_TEXT): New constants.
	(MF_SIEVE_LOG,MF_SIEVE_DEBUG_TRACE)
	(MF_SIEVE_DEBUG_INSTR): Change numeric values.
	* src/builtin/other.bi (wd): New function.
	* src/builtin/sieve.bi (sieve): The script parameter specifies the
	Sieve program text (literal) if MF_SIEVE_TEXT flag is set.
	Additional parameters file and line can be used in this case to
	correct reported locations in the Sieve program.
	Fix memory leak (msg not being destroyed).

	* doc/functions.texi: Document changes to the sieve function.

2011-02-09  Sergey Poznyakoff  <gray@gnu.org.ua>

	Bugfixes.

	* src/prog.c (eval_environ) <string>: Remove.  The pointer is
	invalidated after dataseg expansion.  Keep offset of the
	last matched string in matchstr instead (data offset is
	invariant).  All callers updated.
	(expand_dataseg): Remove static qualifier.
	(instr_memstk, instr_xmemstk): Bugfix.  Both functions were not
	expansion-safe.
	* src/prog.h (expand_dataseg): New proto.
	* src/builtin/other.bi (_expand_dataseg): New function.

2011-01-20  Sergey Poznyakoff  <gray@gnu.org.ua>

	Bugfixes.

	* lib/mf-dbm.c (mf_dbm_insert): Add missing break.

	* src/bitmask.h (bitmask_merge): Update bm_nset.

	* src/prog.c (environ_locus): New struct.
	(eval_environ): Change type of locus to environ_locus.
	(ENV_LOC_FILE,ENV_LOC_LINE): New defines.
	(env_get_locus): Store locus in the struct locus supplied by
	the second argument. Register the file member as automatic variable,
	lest it gets clobbered by stack expansions.
	All callers updated.
	(instr_push,instr_stkalloc,instr_regmatch_mx)
	(instr_next): Fix trace formats.
	* src/prog.h (runtime_warning,runtime_error)
	(prog_trace): Mark as printflike.
	(env_get_locus): Change signature.

	* src/builtin/header.bi (header_add,header_insert)
	(header_delete,header_replace): Update calls to env_get_locus.
	* src/builtin/progress.bi (progress): Likewise.
	* src/builtin/qrnt.bi (quarantine): Likewise.
	* src/builtin/rcpt.bi (rcpt_add,rcpt_delete): Likewise.

	* src/builtin/snarf.m4: Minor indentation change.

	* mflib/sieve.mf (MF_SIEVE_DEBUG_MAILUTILS)
	(MF_SIEVE_DEBUG_PROT): Remove.
	* src/builtin/sieve.bi: Likewise.
	* src/builtin/mudebug.bi: Remove.
	* src/builtin/Makefile.am (BI_FILES): Remove mudebug.bi
	* src/builtin/other.bi (debug): Set logstream locus information for
	better error diagnostics.
	Declare mailutils_set_debug_level as alias to debug.

2011-01-19  Sergey Poznyakoff  <gray@gnu.org.ua>

	Implement dbinsert built-in function.

	* src/builtin/db.bi (dbinsert): New function. Similar to dbput but
	allows better control over what to do if the key is already present
	in the database.
	* src/mailfromd.h (mfe_exists): New exception code.

2011-01-14  Sergey Poznyakoff  <gray@gnu.org.ua>

	Update TODO.

	Builtin functions obtain a reference to the capture stream, not the stream itself.

	* src/builtin/snarf.m4 (MF_CAPTURE): Require an argument.
	(__mf_defun): If MF_CAPTURE was called, declare an extra
	mu_stream_t argument and initialize it to the capture stream
	reference.
	(return): New macro.
	(MF_RETURN,MF_RETURN_STRING): Go to end label, instead of returning.
	(MF_THROW): Unref __MF_CAPTURE__, if defined.
	(END): Unref __MF_CAPTURE__, if defined.
	Declare end label.
	Undefine __MF_ENDLAB__

	* src/mailfromd.h (env_get_stream): Change prototype.
	* src/prog.c (env_get_stream): Return error code.
	Return a reference to the capture stream in the memory
	location pointed to by the second argument.

	* src/builtin/body.bi (current_message): Fix MF_CAPTURE declaration.
	* src/builtin/curhdr.bi (current_header_count): Likewise.
	(current_header_nth_name,current_header_nth_value): Likewise.
	(current_header): Likewise.
	* src/builtin/sa.bi (sa, clamav): Likewise.
	* src/builtin/sieve.bi (sieve): Likewise.
	* src/builtin/getpw.bi (return_passwd): Don't use MF_RETURN_OBSTACK
	here.
	(getpwnam, getpwuid): Use it here instead.
	* src/builtin/io.bi (write): Fix debug format string.
	* src/builtin/mail.bi (build_mime): Fix memory leak (occurred on
	error).
	(send_dsn): Likewise.

	gacopyz server: unescape % characters (complements e8f737fa).

	* gacopyz/gacopyz.h (gacopyz_srv_reply): Return int.
	(gacopyz_srv_reply_raw): New proto.
	* gacopyz/server.c (gacopyz_srv_reply): Unescape % characters.
	Allocates returned string.
	(gacopyz_srv_reply_raw): New function (renamed from old gacopyz_srv_reply).
	* mtasim/mtasim.c: Use xstrdup.
	(smtp_ehlo, process_gacopyz_reply)
	(process_data_reply): Fix calls to gacopyz_srv_reply.

2011-01-13  Sergey Poznyakoff  <gray@gnu.org.ua>

	lib: minor fix

	* lib/logger.c (mf_gacopyz_log_printer): Handle SMI_LOG_PROTO.

	gacopyz: minor fix.

	* gacopyz/context.c (format_message): Escape percent characters in
	the message string.

2011-01-08  Sergey Poznyakoff  <gray@gnu.org.ua>

	Update copyright year.

	sa,clamav: bugfixes.

	* lib/server.c (mf_server_check_pidfile): Use mu_program_name.
	* src/builtin/sa.bi: Major cleanup.
	(set_xscript): Do not switch to MU_XSCRIPT_PAYLOAD at once.
	(spamd_send_stream): New function.
	(spamd_connect): Do not unreference transport streams.
	(open_connection): Use _aget to obtain path.
	(sa,clamav): Rewind message stream; use spamd_send_stream to
	send it.
	* src/builtin/mail.bi (build_mime): Reposition the stream to its
	beginning.

2010-12-23  Sergey Poznyakoff  <gray@gnu.org.ua>

	Bugfixes.

	* lib/logger.c (syslog_async_open): Fix signature.
	* mflib/Makefile.am (.mf4.mf): Put $(AM_V_GEN) in front of
	the command.

	Reflect recent changes in MU (mu_debug_handle_t/mu_debug_level_t types).

2010-12-21  Sergey Poznyakoff  <gray@gnu.org.ua>

	Raise version number and MU requirements. Rewrite transcript support in callout.c

	* configure.ac: Require MU 2.9.90
	Set version number to 7.0.93
	Remove dist-lzma
	(strtok_r): Remove unused declaration.
	(gnulib.modules) <strtok_r>: Remove.
	* src/callout.c: Rewrite transcript support using MU3 API.
	(transcript): Remove. All callers updated.
	(create_transcript_stream): New function.
	(smtp_io_open): Set transcript stream if smtp_transcript is set.

	Switch to MU3 API.

	* lib/debug.c: Remove.
	* lib/debug.h: Remove.
	* lib/Makefile.am (noinst_HEADERS): Remove debug.h
	(libmf_a_SOURCES): Remove debug.c
	* lib/appinit.c: Use new mu_stream_* calls.

	* lib/libmf.h (config_array_to_argv,config_array_to_string): Change
	signatures.
	(config_cb_timeout): Likewise.
	(logger)<log_print>: Remove.
	<log_open>: Change signature.
	(logger_open): Change signature.
	(vlogmsg,logmsg): Rewrite as macros.
	* lib/logger.c: Rewrite logging support using MU3 streams.

	* lib/utils.c (config_array_to_argv)
	(config_array_to_string, config_cb_timeout): Rewrite.

	* lib/server.c (mf_server_start): Call mu_onexit_run.

	* lib/version.c (version_etc_copyright): Rename to avoid name
	clash.

	* lib/dbcfg.c: Rewrite callbacks.  Use MU3 configuration framework.

	* lib/cache.c: Use mu_debug for debugging.
	* lib/db.c: Likewise.
	* lib/dns.c: Likewise.
	* lib/greylist.c: Likewise.
	* lib/mf-dbm.c: Likewise.
	* lib/rate.c: Likewise.
	* lib/srvman.c: Likewise.
	* lib/tbf_rate.c: Likewise.
	* src/builtin/snarf.m4: Likewise.
	* src/calloutd.c: Likewise.
	* src/engine.c: Likewise.
	* src/spf.c: Likewise.

	* src/Makefile.am (mfd-dbgmod.h): Offset the indices by the value of
	mfd_debug_handle.

	* src/builtin/body.bi (current_message): Use mu_stream_to_message.
	* src/builtin/curhdr.bi: Use MU3 API.
	* src/builtin/db.bi: Likewise.
	* src/builtin/io.bi: Likewise.
	* src/builtin/mail.bi: Likewise.
	* src/builtin/msg.bi: Likewise.
	* src/builtin/mudebug.bi: Likewise.
	* src/builtin/sieve.bi: Likewise.
	* src/lex.l: Likewise.
	* src/savsrv.c: Likewise.
	* src/srvcfg.c: Likewise.

	* src/builtin/other.bi (debug_level): Rewrite using mu_debug_category_level
	(debug_spec): Rewrite using mu_debug_format_spec.
	(debug): Rewrite using mu_debug_parse_spec.

	* src/callout.c (smtp_io_data) <send_off, recv_off>: Remove. All uses
	updated.
	(smtp_io_free, smtp_send, smtp_recvline)
	(smtp_io_close, callout_host, callout_mx)
	(libcallout_init): Use new stream and debugging API.

	* src/mailfromd.h (mfd_debug_handle): New extern.
	(add_legacy_milter_port): Change signature.
	* src/main.c (mf_strecho): New global.
	(mfd_gacopyz_log_printer): Remove.
	(read_domain_file): Change signature.
	(cb_milter_timeout, cb_timeout, cb_set_variable)
	(cb_include_path, cb_trace_program, cb_relayed_domain_file): Rewrite.
	(mfd_debug_handle): New variable.
	(open_strecho): New function.
	(main): Revise logging support initialization.
	* src/mfdbtool.c: Use new MU API.
	* src/pp.c: Likewise.
	* src/pragma.c: Likewise.

	* src/prog.c: Use new MU API.
	(instr_echo): Send output to mf_strecho.
	* src/prog.h (mf_strecho): New extern.

	* src/builtin/msg.h (mf_message) <mstr, bstr>: New members.
	* src/builtin/sa.bi: Rewrite using new stream functions.

	* pmult/.gitignore: Remove pdbg.h.
	* pmult/pdbg.hm4: Remove.
	* pmult/debugdef.m4: Remove.
	* pmult/Makefile.am (EXTRA_DIST): Remove pdbg.hm4 and debugdef.m4
	(pmult_SOURCES): Remove pdbg.h
	* pmult/pmult.c: Redo logging, debugging and configuration support.

	* tests/hdr-gete.at: Update.
	* tests/testsuite.at (AT_MTA_TEST): Filter out info prefix from the
	'echo' output.

2010-11-20  Sergey Poznyakoff  <gray@gnu.org.ua>

	Bugfixes.

	* etc/Makefile.am: Install postfix-macros.sed to pkgdatadir.
	(install-data-local): Add missing $(DESTDIR)
	* src/builtin/sa.bi (sa): Check the result of the initial
	SPAMC command.
	* src/gram.y (register_macro): Set a comparator that ignores
	enclosing '{ }'.
	Always enclose in curly braces macro names longer than 1 character.
	* tests/miltermacros.at: New testcase.
	* tests/Makefile.am (TESTSUITE_AT): Add miltermacros.at.
	* tests/testsuite.at: Include miltermacros.at.

2010-10-16  Sergey Poznyakoff  <gray@gnu.org.ua>

	Be careful about undefined sun_path in struct sockaddr_un.

	* gacopyz/gacopyz.c (gacopyz_handle_connection): Log unnamed
	socket as [unnamed].
	* src/builtin/vars.bi (set_milter_$1_address): Use empty string
	if the socket is unnamed.

2010-10-05  Sergey Poznyakoff  <gray@gnu.org.ua>

	Bugfixes.

	* lib/dns.c (_dnsbase_init): Rename to dnsbase_init, now extern.
	(all functions): Remove calls to _dnsbase_init.
	* lib/libmf.h (dnsbase_init): New proto.
	* src/calloutd.c (main): Call dnsbase_init.
	* src/savsrv.c (cmd_run): Bugfix.
	(callout_session_server): Bugfix.
	* src/main.c (main): Call dnsbase_init.

2010-08-31  Sergey Poznyakoff  <gray@gnu.org.ua>

	Implement header renaming functions.

	* mflib/header_rename.mf4: New file.
	* mflib/.gitignore: Add header_rename.mf and rateok.mf.
	* mflib/Makefile.am (MF_FILES): Add MF4_FILES (with suffix
	fixup).

	Version 7.0.92

	Expand the functionality of the message_header_count() function.

	* src/builtin/msg.bi (message_header_count): Optional 2nd argument
	specifies the name of the header to count.

2010-08-30  Sergey Poznyakoff  <gray@gnu.org.ua>

	Two new MFL functions for reading message headers.

	* src/builtin/msg.bi (message_nth_header_name)
	(message_nth_header_value): New functions.

	callout: optionally use the VRFY command, if the remote party provides it.

	* src/callout.c (smtp_io_data) <nlines, esmtp_capa>: New members.
	(SMTP_PARSEHLO, CAPA_VRFY): New defines.
	(smtp_recv): Parse the EHLO reply, if SMTP_PARSEHLO flag is set.
	Always clear it before returning.
	(esmtp_vrfy): New function.
	(callout_io): Call esmtp_vrfy if enable_vrfy is set.
	(smtp_io_init, smtp_send, smtp_recvline)
	(smtp_recv, callout_io): Prefix all diagnostics with the transcaction
	ID.
	* src/callout.h (enable_vrfy): New extern.
	* src/savsrv.c (enable_vrfy): New variable.
	* src/srvcfg.c (srv_cfg_param)<enable-vrfy>: New statement

2010-08-27  Sergey Poznyakoff  <gray@gnu.org.ua>

	Tiny fix.

	* src/builtin/header.bi (header_replace): Fix a typo.

2010-08-25  Sergey Poznyakoff  <gray@gnu.org.ua>

	Version 7.0.91

2010-08-24  Sergey Poznyakoff  <gray@gnu.org.ua>

	Improve the caching logic in verify().

	* src/savsrv.c (vrfy_state): Remove. All uses updated.
	(verify): Change the cache usage logic.
	(cmd_run): Take into account mf_timeout results.
	* lib/cache.c (EXPIRE_INTERVAL): Take into account mf_timeout results.

	Minor change.

	* src/callout.c (first_line_of): New static function.
	(smtp_last_sent): Use first_line_of.
	(smtp_last_received): Use first_line_of. Return the very first
	line in case of multiline responses.

	Bugfix.

	* mflib/rateok.mf: Rename to rateok.mf4. Use defined() to
	check whether mincnt is actually given. This fixes the bug
	reported by Rich Graves on August 24, 2010.

2010-08-23  Sergey Poznyakoff  <gray@gnu.org.ua>

	Bugfixes.

	* lib/filenames.h (DEFAULT_PIDFILE): Remove.
	* lib/logger.c (loggertab): Add syslog_async_fdset method for
	syslog:async.
	* src/Makefile.am (mfd-dbgmod.h): Kik off libcallout_a_SOURCES.
	* src/calloutd.c (_log_setup, mf_server_log_setup): Remove.
	(main): Call mf_srvcfg_log_setup.
	Update call to mf_srvcfg_init.
	* src/engine.c (setprocid): New static function.
	(mfd_callout_session_server): New function.
	* src/lex.l (lex_new_source_0): Bugfux.
	* src/mailfromd.h (mfd_callout_session_server): New proto.
	* src/main.c (mf_diag_syslog_printer, _log_setup)
	(mf_server_log_setup): Remove.
	(main): Call mf_srvcfg_log_setup.
	Update call to mf_srvcfg_init.
	* src/savsrv.c: Include signal.h
	(vrfy_state): New enum.
	(vrfy_queue)<state>: New member.
	(verify): Use rc and qp->state to decide whether to process
	the entry. This still needs some more work, though.
	(addq): Initialize qp->state.
	(cmd_run): Update qp->state.
	(callout_session_server): Ignore SIGPIPE and SIGALRM.
	* src/srvcfg.c (srv_options): Remove 's' option.
	(srv_parse_opt): Logger options update optcache.
	(setdefpidfilename): New static function.
	(mf_srvcfg_init): Take program invocation name as the
	first argument.  Construct pidfile name based on it, unless
	pidfile has already been initialized.
	Done update srvman_param.keepfds (see mf_srvcfg_log_setup).
	Initialize syslog_tag.
	(mf_diag_syslog_printer, mf_debug_syslog_printer): New functions.
	(mf_srvcfg_log_setup): New function.
	* src/srvcfg.h (mf_srvcfg_init): Change signature.

	Improve default filter.

	* src/builtin/system.bi (access): New function.
	* src/status.mfi (R_OK, W_OK, X_OK, F_OK): New constants.
	* etc/Makefile.am: Minor change.
	* etc/mailfromd.mf (whitelist_db): New constant.
	(envfrom): Test for existence of the whitelist
	db before trying to access it.

	Various changes to improve backward compatibility.

	* etc/mailfromd.mf: Clean up.
	* lib/server.c (mf_server_write_pidfile): New function.
	(mf_server_start): Call mf_server_log_setup prior to starting
	listeners. Issue the start up information afterwards, to make
	sure it is sent to the established logging channel.
	Call mf_server_write_pidfile instead of mu_daemon_create_pidfile,
	since the latter fails if the pidfile name is not absolute.
	Unlink the pidfile after mfd_srvman_run returns.
	* tests/testsuite.at (mailfromd_debug_header): Reflect the
	above change.
	* mflib/callout.mf4 (callout_open): If milter_client_address is
	empty (a local socket), use the word "local" instead.

	* src/callout.c: Include srvcfg.h
	(transcript): Check the smtp_transcript flag.
	* src/callout.h: Remove externs declared in srvcfg.h
	* src/savsrv.c: Include srvcfg.h
	* src/srvcfg.c (transcript_option): Change to static.
	(smtp_transcript): New variable.
	(server_section_parser): Allow for empty label (means "default").
	(srv_cfg_param): Restore the `transcript' statement.
	(mf_srvcfg_flush): Set the value of smtp_transcript.
	* src/srvcfg.h (transcript_option): Remove extern.
	(smtp_transcript, io_timeout): New externs.

2010-08-22  Sergey Poznyakoff  <gray@gnu.org.ua>

	Minor fixes.

	* src/savsrv.c (mailfrom_address): Remove initializer.
	* src/callout.c (smtp_io_setup_callout): Allow for mailfrom==NULL.

	Fix starting of the default callout server. Reflect the actual server URL in callout_server_url.

	* mflib/callout.mf4 (callout_server_url): New variable.
	(begin): Provide a default for callout_server_url.
	(__callout_open_default): Return the fd.
	(callout): Use return from __callout_open_default as
	the first argument to callout_do.
	* mflib/poll.mf (__make_extra_arg): New static function.
	(_pollhost, _pollmx, stdpoll, strictpoll): Use return from
	__callout_open_default as the first argument to callout_do.
	Construct the rest of arguments using __make_extra_arg.
	* src/builtin/callout.bi (callout_server_url): Remove.
	(default_callout_server_url): New function.
	(MF_INIT): Remove initialization of callout_server_url.
	* src/mailfromd.h (default_callout_url): Rename to
	callout_server_url.
	* src/main.c (default_callout_url): Rename to
	callout_server_url.
	(provide_default_callout_server): Rewrite the condition.
	Don't try to reset the callout_server_url MFL variable: it
	is useless after compilation is finished.
	(mf_server_function): Fix the use of mu_list_locate.
	(main): Fix a typo in the server section label.
	* src/srvcfg.c (server_section_parser): Move the call to
	mf_server_function to the mu_cfg_section_end branch.

	Complement the bugfix from 011f85d4

	* src/mailfromd.h (SYM_PASSTOGGLE): New bit.
	* src/gram.y (_ds_variable_count_fun)
	(_ds_variable_fill_fun, _ds_reloc_fun): Use SYM_PASSTOGGLE
	bit to avoid processing the same variable several times.
	(dataseg_layout): Fix memory allocation.

	Introduce callout session ID.

	* lib/srvman.c (mfd_srvman_open): Print error message if no
	servers are configured.
	* mflib/Makefile.am (.mf4.mf): Call m4 -s.
	* mflib/callout.mf4 (callout_open): Set session ID.
	* src/callout.c (smtp_io_setup_callout): Replace empty
	mailfrom address with <>.
	(smtp_io_id): New function.
	* src/callout.h (smtp_io_id): New proto.
	* src/savsrv.c (session_id): New variable.
	(defproctitle): New function.
	(vrfy_free): Consistently set proctitle to reflect the current state.
	(addq): Save session ID in the smtp io structure.
	(cmd_sid): New function.
	(callout_command_tab)<SID>: New command.

	Bugfix

	* src/builtin/macro.bi (miltermacros): Fix minimal number of
	arguments.

	Re-implement the `listens' function in mflib.

	* mflib/portprobe.mf4: New implementation of the `listens' function.
	* mflib/Makefile.am (MF4_FILES): New variable.
	(MAINTAINERCLEANFILES): Add mf files produced from MF4_FILES.
	(.mf4.mf): Define MF_AUTOHEADER to add a warning at the top of
	the generated files.
	* mflib/pp-setup: Issue an "automatically generated file" warning
	if MF_AUTOHEADER is defined.
	* mflib/.gitignore: Add portprobe.mf
	* src/builtin/dns.bi: Include srvcfg.h
	(listens_on, listens): Remove.

2010-08-21  Sergey Poznyakoff  <gray@gnu.org.ua>

	Restore some cfg statements for backward compatibility.

	* src/srvcfg.h: Add copyleft header.
	(DEFAULT_PIDFILE): Move to lib/filenames.h.
	(mf_srvcfg): New struct.
	(mf_server_function): New proto.
	(parse_milter_url): New proto.
	* lib/filenames.h: Add copyleft header.
	(DEFAULT_PIDFILE): New define.

	* src/gram.y: Use mf_list_compare_string comparator.
	(initialize_variable): Avoid coredump if locus==NULL.
	* mailfromd.h (default_callout_url): New extern.
	(compare_string): Remove proto.
	* src/main.c (default_callout_url): New function.
	(compare_string): Remove function. All callers use
	mf_list_compare_string instead.
	(mf_cfg_param): Remove ehlo-domain and mail-from-address
	statements (duplicated in srvcfg.c)
	Restore the callout-url statement.
	(mf_server_function): Change signature.
	Check for "option default" for callout servers.
	(main): Move call to mf_srvcfg_flush several lines up,
	before processing the filter script.
	* src/srvcfg.c (parse_milter_url): Remove static qualifier.
	(mf_srvcfg_add, server_section_parser): Use the new calling scheme
	of mf_server_function.
	(server_config_stmt): Remove struct.
	(server_config_stmt):Change type struct mf_srvcfg.
	(server_section_param) <option>: New statement.
	<default>: Restore statement.
	* src/calloutd.c (mf_server_function): Change signature.

	* lib/libmf.h (mf_list_compare_string): New function.
	* lib/utils.c: Likewise.
	* mflib/callout.mf4 (ehlo_domain, mailfrom_address): Comment out. See
	callout.bi.
	(callout_open): Comment out sending the SET commands.
	* mflib/spf.mf: Remove dependency on phased-out mydomain.mf.
	(check_host): Revert to using ehlo_domain.
	* src/builtin/callout.bi (ehlo_domain, mailfrom_address): Define here
	(again).
	(MF_INIT): Initialize callout_server_url, ehlo_domain
	and mailfrom_address.

	Restore the io-timeout configuration statement.

	* src/srvcfg.c (srv_cfg_param): Restore the io-timeout statement.

	Minor fix.

	* pmult/pmult.c (stderr_closed_p): Remove a leftover redefinition.

	Minor changes.

	* mflib/mydomain.mf: Remove
	* mflib/Makefile.am: Remove mydomain.mf
	* mflib/poll.mf: Add copyleft header.

	Fix namespace (mu_db -> mf_db)

	Fix namespace (pm -> mf)

	Fix debugging in calloutd.

	* src/dbgmod.awk: Use optional `offset' variable.
	* src/main.c (main): Call libcallout_init.
	* src/calloutd.c: Likewise.
	* lib/db.c (db_format_install): Register format (not database file) name.
	* lib/debug.c (debug_next_handle): New function.
	(debug_init): Register "all" only once.
	* lib/debug.h (debug_next_handle): New proto.
	* src/Makefile.am (callout-dbgmod.h): Offset handles by
	callout_debug_handle.
	* src/callout.c (libcallout_init): New function.
	* src/callout.h (callout_debug_handle): New extern.
	(libcallout_init): New proto.

	* etc/mailfromd.mf: Minor change.

	Rename mfd -> src

	Bugfixes

	* mfd/engine.c (mlfi_negotiate): Fix improper use of the debug macro.
	* mfd/gram.y: Remove prototypes of non-existing functions.
	* mfd/lex.l: Remove MF_SOURCE_NAME leftover.
	* mfd/mailfromd.h (tie_in_onblock): Restore prototype.

	Restore temporarly removed features.

	* mfd/main.c (main): Restore the check for non-absolute
	script file name.

	* mfd/srvcfg.c: Restore the --source-ip (-S) option and
	source-ip configuration statement.
	* tests/testsuite.at (mailfromd_script_warning): New define.
	(AT_MTA_TEST_X, AT_MTA_TEST_SCRIPT,
	(AT_MTA_TEST_FILTER_SCRIPT): Redefine mailfromd_debug_header to
	account for the non-absolute script file name warning.

	Silently ignore the --remove (-r) option.

	* mfd/srvcfg.c: Silently ignore the --remove (-r) option.

	Restore the `on' construct.

	* etc/mailfromd.mf: Require poll and callout.
	* lib/namefixup.c (pm_file_name_ptr_fixup): Bugfix.
	* mfd/gram.y: Restore the `on poll' construct.
	* mfd/lex.l: Likewise.
	* mflib/callout.mf4 (ehlo_domain): Remove static qualifier.
	* po/POTFILES.in: Update.
	* tests/etc/Makefile.am (RCFILES): Add vmod1.mf and vmod2.mf.
	* tests/etc/poll-1.rc: Require poll.
	* tests/etc/poll.rc: Likewise.
	* tests/poll.at: Rewrite using AT_MTA_TEST_FILTER.
	* tests/poll01.at: Likewise.
	* tests/poll02.at: Likewise.
	* tests/poll03.at: Likewise.
	* tests/poll04.at: Require poll.

	Implement default callout server. Fix the handling of not imported variables in submodules.

	* mfd/calloutd.c: New file.
	* mfd/builtin/callout.bi: New file.
	* mfd/builtin/.gitignore: Add callout.c
	* mfd/builtin/Makefile.am (BI_FILES): Add callout.bi.
	* builtin/builtin.def (provide_callout): New extern.

	* mfd/Makefile.am (noinst_LIBRARIES): New library libcallout.a.
	(mailfromd_SOURCES): Remove srvcfg.c
	(mailfromd_LDADD, calloutd_LDADD): Add libcallout.a.
	(calloutd_SOURCES): Move all sources to libcallout.a.
	Add calloutd.c
	(LDADD): Remove.
	(mfd-dbgmod.h): Obtain symbols from libcallout_a_SOURCES as well.
	(callout-dbgmod.h): Obtain symbols from libcallout_a_SOURCES.

	* lib/filenames.h (DEFAULT_CALLOUT_SOCKET): New define.
	* lib/libmf.h (stderr_closed_p): New proto.
	* lib/utils.c (stderr_closed_p): New function.

	* mfd/callout.c: Rearrange includes.
	* mfd/callout.h: Rearrange includes.
	(ehlo_domain, mailfrom_address): New externs.
	(callout_session_server): New extern.
	* mfd/savsrv.c: Rearrange includes.
	(main, etc.): Remove.
	* mfd/srvcfg.c (set_port): Fix 1st argument to pm_srvcfg_add.
	(srv_cfg_param): New keywords: database and mail-from-address
	(pm_srvcfg_flush): Initialize ehlo_domain and timeouts.

	* mfd/main.c: Rearrange includes.
	(pm_server_function): Use key as a selector value.
	(main): Start default milter and/or callout servers, if necessary.

	* mfd/symbols.c (import_builtin_variables): Minor fix.
	(module_head, module_tail): New statics.
	(module_register, module_symtab_enumerate): New functions.
	(module_init): Register the module.

	* mfd/mailfromd.h (SYM_INITIALIZED): New flag.
	(module_symtab_enumerate): New proto.
	* mfd/gram.y (initialize_variable): Set SYM_INITIALIZED bit.
	(dataseg_layout): Use module_symtab_enumerate instead of
	symtab_enumerate.

	* mflib/callout.mf: Rename to mflib/callout.mf4
	* mflib/Makefile.am (EXTRA_DIST): Add callout.mf4
	* mflib/.gitignore: Add callout.mf.
	* mflib/poll.mf: Rewrite using the callout function.

	New testcase.

	* tests/etc/vmod1.mf: New file.
	* tests/etc/vmod2.mf: New file.
	* tests/module07.at: New testcase.
	* tests/Makefile.am: Add module07.at
	* tests/testsuite.at: Add module07.at
	(MAILFROMD_LOGOPTS): New define
	(MF_CHECK_PROG, MF_CHECK_TEXT, MF_RUN_TEXT)
	(AT_MTA_TEST_X, AT_MTA_TEST): Add MAILFROMD_LOGOPTS to
	the mailfromd command line.

	Bugfix:

	* mfd/builtin/io.bi (write, read, getdelim)
	(getline, fd_set_delimiter, fd_delimiter): Fix assertions.
	* mfd/builtin/snarf.m4 (MF_PRAGMA): Replace '-' with '_' in
	the name of the generated hander.

	Improve debugging in calloutd.

	* lib/debug.h (debug_vlog): New proto.
	* lib/logger.c (debug_vlog): New function.
	* mfd/savsrv.c (writeout): New function. Use it instead of
	fprintf to send out server replies.

	Add pmtool.c

	Provide a default milter listener.

	* mfd/main.c (main): start a default listener if no servers
	have been configured.
	* mfd/srvcfg.c (pm_srvcfg_add): New function.
	(set_port): Rewrite using pm_srvcfg_add.
	* mfd/srvcfg.h (pm_srvcfg_add): New proto.

	Fix testsuite (except for poll tests).

	* tests/testsuite.at (mailfromd_debug_header)
	(mailfromd_debug_footer): New defines.
	(__MTA_TEST): New macro.
	(AT_MTA_TEST): Rewrite via __MTA_TEST.

	* tests/curmsg.at: Remove mailfromd debugging output from
	stderr patterns. It is added automatically by AT_MTA_TEST.
	* tests/hdr-all.at: Likewise.
	* tests/hdr-cap.at: Likewise.
	* tests/hdr-count.at: Likewise.
	* tests/hdr-get.at: Likewise.
	* tests/hdr-gete.at: Likewise.
	* tests/hdr-getn.at: Likewise.
	* tests/hdr-itr.at: Likewise.
	* tests/hdr-mul.at: Likewise.
	* tests/rset.at: Likewise.
	* tests/greylist-ct.at: Call mailfromd_stop if any
	subtest fails.

	Fixup database names in reference to the state dir.

	* lib/Makefile.am (libmf_a_SOURCES): Add namefixup.c
	* lib/db.c (db_format_install): Register database name
	for fixup.
	* lib/libmf.h: Uncover namefixup prototypes.
	* lib/namefixup.c (head, tail): Statics.
	* lib/optcache.c: Likewise.
	* mfd/main.c: Fixup names.

	Add a tool for database management.

	* lib/pmdb.h (ignore_failed_reads_option, time_format_string): New externs.
	* mfd/Makefile.am (bin_PROGRAMS): New program pmtool.
	* mfd/gram.y (convert_rate): Remove.
	* mfd/srvcfg.c: Include sysexits. Handle "port" option cache.
	* mfd/.gitignore: Add pmtool.

	Bugfix

	* lib/optcache.c (find_option, pm_optcache_flush): Bugfix (ouch!)

	Change callout protocol.

	* mfd/builtin/vars.bi (ehlo_domain, mailfrom_address): Remove variables.
	(builtin_post_setup): Remove function.
	* mfd/callout.c (smtp_io_set_timeouts): New function.
	* mfd/callout.h (smtp_io_set_timeouts): New proto.
	* mfd/gram.y: Remove call to builtin_post_setup.
	* mfd/mailfromd.h (builtin_post_setup): Remove proto.
	* mfd/main.c (parse_opt): Allocate string before adding it to trace_modules.
	* mfd/savsrv.c (ehlo_domain, mailfrom_address): New variables.
	(callout_mode): New enum.
	(vrfy_queue)<mode>: New member.
	(verify): 2nd arg tells which timeouts to use and whether to
	translate mf_timeout to mf_not_found.
	All callers updated.
	(addq): Use new protocol.
	(cmd_vrfy): Do not free timed out entries.
	(callout_command_tab): Alter protocol.
	(callout_cfg_param): New keywords ehlo-domain and mail-from-address.
	(init_domain): New function.
	(main): Call init_domain.

	* lib/cache.c (tempfail_expire_interval): New variable.
	(EXPIRE_INTERVAL): Take into account mf_temp_failure.

	* mflib/callout.mf, mflib/mydomain.mf, mflib/poll.mf: New files.
	* mflib/Makefile.am (MF_FILES): Add callout.mf, mydomain.mf
	and poll.mf
	* mflib/spf.mf: Use my_domain instead of the removed ehlo_domain.

	Move callout to a separate server

	Move srvman and logging to lib.

	* mfd/srvman.c, mfd/srvman.h: Move to lib, with edits.
	* lib/Makefile.am: Update.
	* mfd/Makefile.am: Update.

	* lib/logger.c: New file.
	* lib/debug.c (source_info_option): New global.
	* lib/debug.h: Likewise.
	* lib/libmf.h (logger): New struct.
	(logger_select, logger_open)
	(logger_close, logger_fdset)
	(logger_flags, vlogmsg, logmsg): New prototypes.

	* mfd/builtin/io.bi (stderr_to_log): Use logger_fdset.
	* mfd/mailfromd.h (source_info_option): Remove extern.
	(logmsg, vlogmsg): Remove protos.
	(log_to_stderr, use_syslog_async): Remove extern.
	* mfd/main.c (force_remove): Initialize to 1.
	(source_info_option): Remove.
	(log_to_stderr, use_syslog_async): Remove.
	(syslog_printer, vlogmsg, logmsg)
	(vformat_logmsg, format_logmsg)
	(format_log_si, debug_locus, debug_log)
	(mflog_fd): Remove.
	(_log_setup): Rewrite.
	(set_srvman_param): New function.
	(main): Call srvman_init and set_srvman_param.
	(log_stream): New variable.
	(option_cache): Cache logger.
	(OPTION_LOGGER): New constant.
	(OPTION_NO_SYSLOG_ASYNC, OPTION_SYSLOG_ASYNC): Remove.
	(options): Remove --syslog-async, --no-syslog-async. New option
	--logger.
	(arguments) <syslog_async>: Remove. All uses updated.
	(parse_opt): Set log_stream instead of the removed log_to_stderr.
	(mf_cfg_param)<syslog-async>: Remove.
	<logger>: New statement.
	(_log_setup): Change signature. All callers updated.
	(mflog_close): Remove function.
	(main): Do second log setup after calling process_options,
	so that the "logger" statement and "--logger" option work
	correctly. A side effect is that syntax errors are reported
	on stderr even when started in daemon mode.
	* mfd/pp.c (pp_extrn_start): Rewrite stderr redirection.
	* tests/numrcpt.at: Remove left-over % prefix.
	* mfd/builtin/io.bi (stderr_to_log): Use logger_open.
	* mfd/engine.c (mailfromd_daemon): Use logger_close.

	Bugfix.

	* mfd/srvman.c (mfd_srvman_run): Check if stop signal arrived
	right before select. This fixes sporadically reoccurring error
	in greylist*.at.

	Redo debugging support in the library.

	* mfd/debug.c: Moved to lib/debug.c.
	* mfd/debug.hin: Renamed to lib/debug.h.
	Removed calls to m4 macros.
	(__debug, debug): New macros.
	(debug_locus): New proto.
	* mfd/debugdef.m4: Remove.
	* mfd/modlist.cin: Remove.
	* lib/Makefile.am: Update.
	* lib/libmf.h (TYPE_SIGNED, INT_STRLEN_BOUND)
	(INT_BUFSIZE_BOUND, NUMERIC_BUFSIZE_BOUND): New defines (from mailfromd.h)
	(argp): Forward declaration of the struct.
	* mfd/.gitignore: Update.
	* mfd/Makefile.am (mailfromd_SOURCES): Remove debug.c and
	modlist.c.
	(noinst_HEADERS): Remove debug.h, add mfd-dbgmod.h.
	(EXTRA_DIST): Remove debug.hin, debugdef.m4, modlist.cin and module.list.
	Add dbgmod.awk.
	(BUILT_SOURCES): Likewise.
	(SUFFIXES): Remove .hin
	(mfd-dbgmod.h): New goal.
	(module.list, debug.h, modlist.c): Remove goals.
	(.cin.c, .hin.h): Remove rules.
	* mfd/dbgmod.awk: New file.

	* mfd/builtin/snarf.m4: Change default divertion to #2.
	(MF_INIT): Undivert everything here.
	(MF_DEBUG): New macro.

	* mfd/builtin/db.bi: Use MF_DEBUG instead of debug.
	* mfd/builtin/io.bi: Likewise.
	* mfd/builtin/mbox.bi: Likewise.
	* mfd/builtin/other.bi: Likewise.
	* mfd/builtin/sa.bi: Likewise.

	* mfd/mailfromd.h (getmaxfd): Remove (already defined in libmf.h)
	Include mfd-dbgmod.h
	* mfd/main.c (vformat_logmsg, format_logmsg)
	(format_log_si): New statics.
	(debug_locus): New function.
	(debug_log): Rewrite.
	(modnames): New variable.
	(main): Call debug_init.

	* mfd/*.c: Remove definitions of MF_SOURCE_NAME.
	Use debug() macro uniformly.

	* po/POTFILES.in: Update.

	Improve MFL getline interface.

	* mfd/builtin/io.bi (io_stream)<delim>: New member.
	(close_stream): Free delim.
	(read_stream_delim): Take delim as char*.
	(open): Initialize delim.
	(getdelim): Optimize.
	(getline):  Use ioptr->delim, fall back to "\n", if not set.
	(fd_set_delimiter, fd_delimiter): New functions.

	Change callout server protocol (part I).

	* mfd/appinit.c: Moved to ../lib
	* mfd/Makefile.am, lib/Makefile.am: Update accordingly.
	* lib/libmf.h (mu_app_rcfile): New extern.
	(mfd_app_init): New proto.

	* mfd/savsrv.c (callout_command)<argc>: Remove.
	<argmin,argmax>: New members.
	(vrfy_queue) <serial, result, file>: New members.
	(serial): New static.
	(vrfy_free, vrfy_del): New functions.
	(verify): Take one argument. Show request serial numbers in proctitle formats.
	(run_queue): Rewrite.
	(savsrv_smtp_io_callback): New function.
	(addq): Register i/o callback function.
	(cmd_vrfy): Print serial number in OK response.
	(cmd_run): Print results in OK response.
	(cmd_drop): New function.
	(callout_command_tab): Update.
	(callout_session_server): Check argmin and argmax.

2010-08-09  Sergey Poznyakoff  <gray@gnu.org.ua>

	Minor fix.

	* mfd/engine.c (mlfi_negotiate): issue a debugging diagnostics
	when automatically registering the "i" macro.
	(milter_enable_state): Update first_used_state only if state
	is one of the actual SMTP states (excluding begin and end).

2010-08-07  Sergey Poznyakoff  <gray@gnu.org.ua>

	Version 7.0

	* NEWS, configure.ac: Update
	* doc/upgrade.texi: Update

2010-08-05  Sergey Poznyakoff  <gray@gnu.org.ua>

	Minor fix.

	* mfd/engine.c (check_pidfile): Use `name' argument,
	not `pidfile' global.

2010-08-03  Sergey Poznyakoff  <gray@gnu.org.ua>

	Minor fixes. Improve callout sequence.

	* etc/mailfromd.mf (begin): Unconditionally initialize
	ehlo_domain. Provide a comment explaining this.
	* mfd/builtin/vars.bi: Set ehlo_domain to the value of
	the domain name, instead of the host name.
	* mfd/callout.c (callout_io): Try EHLO first and fall back
	to HELO if it fails, as requested by RFC 2821, section
	3.2 "Client Initiation".

	Bugfix.

	* mflib/sa.mf (sa_format_report_header): Initialize ret.

2010-08-02  Sergey Poznyakoff  <gray@gnu.org.ua>

	Register the "i" macro for use in the lowest SMTP state declared in the program.

	* mfd/engine.c (first_used_state): New variable.
	(mlfi_negotiate): If first_used_state is set, register "i"
	macro for it.
	(milter_enable_state): Set first_used_state.
	* mfd/gram.y (register_macro): Remove static qualifier.

	* mfd/builtin/macro.bi (miltermacros): New pragma.

	* mfd/lex.l (paren_follows): Remove tie-in variable.
	* mfd/mailfromd.h (register_macro): New proto.
	(paren_follows): Remove extern.

	* NEWS: Update.
	* doc/mailfromd.texi: Document #pragma miltermacros.
	* doc/functions.texi: Likewise.

	Register the "i" macro for use in the lowest SMTP state declared in the program.

	* mfd/engine.c (first_used_state): New variable.
	(mlfi_negotiate): If first_used_state is set, register "i"
	macro for it.
	(milter_enable_state): Set first_used_state.
	* mfd/gram.y (register_macro): Remove static qualifier.

	* mfd/builtin/macro.bi (mta_state_macros): New pragma.

	* mfd/lex.l (paren_follows): Remove tie-in variable.
	* mfd/mailfromd.h (register_macro): New proto.
	(paren_follows): Remove extern.

	Minor change.

	* mfd/builtin/db.bi: Remove extra whitespace.

	Fix docs

	* doc/functions.texi: Update.
	* doc/mailfromd.texi: Update.

2010-07-25  Sergey Poznyakoff  <gray@gnu.org.ua>

	Update the docs.

2010-07-24  Sergey Poznyakoff  <gray@gnu.org.ua>

	Discern between unset and zero module debugging levels.

	* mfd/builtin/other.bi (debug_spec): Additional 3rd argument.
	* mfd/debug.c (module_level) <isset>: New member.
	(debug_level_p): Check module level only if it is set.
	(debug_enable_module): Set isset to 1.
	(debug_disable_module): New function.
	(parse_spec): Skip initial whitespace.  Handle !module
	construct (meaning to unset debugging for module).
	(debug_spec_string): New argument showunset.  Print unset
	modules explicitly (discern between !module and module=0).
	Allow for leading whitespace in specs.
	* mfd/debug.hin (debug_spec_string): Change signature.

	* doc/functions.texi: Update.
	* doc/mailfromd.texi: Update.

2010-07-22  Sergey Poznyakoff  <gray@gnu.org.ua>

	Update the docs.

	* doc/mailfromd.texi: Update

	Suppress cc warnings.

	* gacopyz/server.c (gacopyz_srv_eoh): Remove unused variable.
	* mfd/dns.c (getmx): Likewise.
	* mfd/lex.l: Set nounput option.

	Version 6.0.94

	* NEWS, configure.ac: Update version number.

	Update docs; other minor changes.

	* etc/postfix-macros.sed: New file.
	* etc/Makefile.am (pkglibexec_DATA): Add postfix-macros.sed.

	* lib/version.c (version_etc_copyright): Update copyright years.
	* mflib/spf.mf (__spf_msgid): New static.  Use it instead of
	referring to $i, which may be not defined.

	* doc/mailfromd.texi: Update.
	* doc/pmult.texi: Update.

2010-07-21  Sergey Poznyakoff  <gray@gnu.org.ua>

	Bugfix.

	Minor change.

	* mfd/builtin/.gitignore: Add mmq.c

	Improve DNS interface. Number of MXs used in various operations is configurable.

	* mfd/dnsbase.c (_getmx): Change prototype. Use struct mxbuf,
	(dns_get_mx_records): Likewise.
	(dns_freemx): Remove.
	(mxbuf_init, mxbuf_free): New functions.
	* mfd/dns.h (mxbuf): New struct.
	(mxbuf_t): Remove typedef.
	(mxbuf_init, mxbuf_free): New functions.
	(dns_get_mx_records): Change proto.
	(dns_freemx): Remove proto.
	* mfd/dnscache.c (parse_value, dns_cache_get): Change signature. All callers
	updated.
	* mfd/mailfromd.h (getmx, getmxip): Change signature.
	(max_callout_mx, max_match_mx): New externs.
	(dns_cache_get): Change signature.
	* mfd/main.c (max_callout_mx, max_match_mx): New globals.
	(mf_cfg_param): New statements "max-callout-mx" and "max-match-mx".
	* mfd/callout.c (callout_mx): Use new mxbuf interface.
	* mfd/dns.c (getmx): Change signature. Use new mxbuf interface.
	(getmxip): Likewise.
	* mfd/prog.c (mx_match): Use new mxbuf interface. Limit number
	of MXs by max_match_mx.
	* mfd/spf.c (mech_mx): Use new mxbuf interface.

	* mfd/builtin/dns.bi (dns_cfg_param): New statement "max-dns-reply-mx".
	(primitive_hasmx,getmx)
	(primitive_ismx): Rewrite to use new mxbuf interface.

	* doc/values.texi (MAX_DNS_MX, MAXMXCOUNT): New values.
	* doc/functions.texi: Update.
	* doc/mailfromd.texi: Update.
	* doc/pmult.texi: Update.
	* doc/values.texi (MAX_DNS_MX, MAXMXCOUNT): New values.

	Remove hardcoded limits on the number of A and PTR records in DNS replies.

	* mfd/main.c (mf_runtime_param_finish): Fix.
	* doc/functions.texi: Document changes to DNS functions.
	* doc/mailfromd.texi (conf-runtime): Document max-dns-reply-a
	and max-dns-reply-ptr.
	* doc/values.texi (MAX_DNS_A, MAX_DNS_PTR): New values.

	* mfd/builtin/dns.bi (dns_cfg_param): Define new configuration
	statements in runtime block: max-dns-reply-a, max-dns-reply-ptr.
	(dns_getaddr, dns_getname): Do not use hardcoded limits.
	(MF_INIT): Register new configuration statements.

	Make runtime constants in builtin/*.bi sources configurable.

	* mfd/mailfromd.h (mf_add_runtime_params): New proto.
	* mfd/main.c (mf_cfg_param)<runtime>: New entry.
	(mf_add_runtime_params,mf_runtime_param_finish): New functions.
	(main): Call mf_runtime_param_finish.

	* mfd/builtin/io.bi (nstreams): New static, used instead of
	NSTREAMS macro.
	(io_cfg_param, MF_INIT): Declare a
	configuration statement to confifure nstreams.
	* mfd/builtin/mbox.bi (nmboxes): New static, used instead of
	NMBOXES macro.
	(mbox_cfg_param, MF_INIT): Declare a
	configuration statement to confifure nmboxes.
	* mfd/builtin/msg.bi (nmsgs): New static, used instead of
	NMSGS macro.
	(msg_cfg_param, MF_INIT): Declare a
	configuration statement to confifure nmsgs.

	* doc/Makefile.am (check-runtime-config): New rule.
	(all-check-docs): Depend on check-runtime-config.
	(check-sub-config): Ignore the "runtime" section.

	* doc/functions.texi: Document the runtime limits.
	* doc/mailfromd.texi (conf-runtime): New node.
	* doc/values.texi (NSTREAMS, NMBOXES, NMSGS): New values.

	* mfd/msg.h: Moved to builtin.
	* mfd/Makefile.am (noinst_HEADERS): Remove msg.h
	* mfd/builtin/Makefile.am (noinst_HEADERS): Add msg.h

2010-07-20  Sergey Poznyakoff  <gray@gnu.org.ua>

	Update docs.

2010-07-17  Sergey Poznyakoff  <gray@gnu.org.ua>

	Documentation: describe the changes since the last release and the upgrade procedure.

2010-07-15  Sergey Poznyakoff  <gray@gnu.org.ua>

	Minor changes to the docs.

	Write more docs.

	* doc/deprecate.texi: Remove.
	* doc/pragma-database.texi: Remove.
	* doc/pragma-option.texi: Remove.
	* doc/Makefile.am (mailfromd_TEXINFOS): Remove the above.
	(check-pragmas): Remove the rule, but leave a placeholder for
	a while.
	(check-sub-config): Fix the rule to allow for dashes in keyword
	names.
	* doc/functions.texi: Fix a typo.
	* doc/macros.texi (histref): New macro.
	* doc/mailfromd.texi: Remove obsolete sections. Describe
	callout servers and SMTP timeouts.

	* mflib/sav.mf: Remove.

2010-07-14  Sergey Poznyakoff  <gray@gnu.org.ua>

	Document try-catch and dclex

	* NEWS: Update.
	* doc/mailfromd.texi: Document try-catch and dclex.
	* doc/upgrade.texi : Update.
	* doc/values.texi (MIN_EXCEPTION, MAX_EXCEPTION): New values.

	Improve docs: replace %var with var.

	* doc/functions.texi: Update.
	* doc/mailfromd.texi: Update.

	Restructure the manual.

	Move function descriptions in a separate chapter.

	* doc/functions.texi: New file.
	* doc/Makefile.am (info_TEXINFOS): Add functions.texi
	* doc/mailfromd.texi: Restructure.

	Minor changes

	* NEWS: Reword some passages.
	* etc/Makefile.am (EXTRA_DIST): Add sendmail-8.14.3.connect.diff

2010-06-14  Sergey Poznyakoff  <gray@gnu.org.ua>

	Bugfixes in io.bi

	* mfd/builtin/io.bi (mfd/builtin/io.bi): Free str->name.
	(open): Allocate memory for iotab[i].name.
	(open_parsed_inet_stream): Remove select-driven loop
	which did nothing except eating up CPU.

2010-06-13  Sergey Poznyakoff  <gray@gnu.org.ua>

	Minor change

	Warn about risky uses of accept. Provide ways to properly handle them.

	* mfd/builtin/mmq.bi: New source.
	* builtin/Makefile.am (BI_FILES): Add mmq.bi

	* mfd/debug.hin (init_debug_modlist)
	(debug_init): New prototypes.
	* mfd/engine.c (message_data): Rename hdr to mmq. All uses
	updated.
	(priv_store_msgmod_closure): Purge the queue if cmd is NULL.
	(mlfi_eom): Emit warning if accept is called when the MMQ is
	not empty.
	* mfd/gram.y: Handle NULL closure.
	* mfd/mailfromd.h (env_clear_msgmod): New proto.
	* mfd/prog.c (ENVF_MSGMOD): New constant.
	(exception_context)<flags>: New member.
	(runtime_warning): Rewrite using mu_diag_printf.
	(instr_result): Warn user if `accept' is called
	after commands that modify message headers or
	body.
	(env_clear_msgmod): New function.
	(env_msgmod): Set ENVF_MSGMOD flag.

	* NEWS, doc/mailfromd.texi: Document mmq_purge and changes to accept.

2010-06-12  Sergey Poznyakoff  <gray@gnu.org.ua>

	Version 6.0.93

	* configure.ac, NEWS: Update.
	* mfd/mailfromd.h [USE_SYSLOG_ASYNC] (use_syslog_async): New
	extern.

	Improve handling of stderr in open("|...").

	* doc/mailfromd.texi: Document dequote and extensions to
	open("|..").
	* builtin/io.bi (STDERR_SHUT, STDERR_NULL)
	(STDERR_LOG, STDERR_FILE, STDERR_FILE_APPEND)
	(LOG_TAG_PFX, LOG_TAG_PFX_LEN): New defines.
	(stderr_to_log, stderr_handler)
	(parse_stderr_redirect): New statics.
	(open_program_stream): Always close or redirect stderr.
	* NEWS: Updated.

	* doc/Makefile.am (check-builtins): Fix rule to match new
	naming convention.

2010-06-08  Sergey Poznyakoff  <gray@gnu.org.ua>

	Smap forked into a separate project.

	* NEWS, configure.ac: Version 6.0.92.
	* Makefile.am (SUBDIRS): Remove smap.
	* doc/Makefile.am, doc/mailfromd.texi: Remove smap docs.
	* doc/smap.texi: Remove.
	* smap/.gitignore: Remove.
	* smap/Makefile.am: Remove.
	* smap/smap.c: Remove.
	* po/POTFILES.in: Update.

	Bugfix.

	* configure.ac: Remove whitespace around shell assignment operator.

2010-06-04  Sergey Poznyakoff  <gray@gnu.org.ua>

	Optimize boolean shortcut evaluation when one of arguments is constant.

	* mfd/drivers.c (node_boolean_value, _optimize_shortcut): New static
	functions.
	(optimize_relational): Optimize boolean shortcut evaluation.
	* mfd/debug.hin (debug_register): New prototype.
	* NEWS: Fix typos.

2010-05-28  Sergey Poznyakoff  <gray@gnu.org.ua>

	Minor fixes.

	* doc/mailfromd.texi (MF_OBSTACK_1GROW): Change type of the temp
	variable to char.
	* doc/mailfromd.texi: Minor fixes.

	Improve debugging system.

	* mfd/debug.cin: Remove.
	* mfd/modlist.cin: New file.
	* mfd/Makefile.am (mailfromd_SOURCES): Add modlist.c.
	(EXTRA_DIST): Remove debug.cin, add modlist.cin.
	(BUILT_SOURCES): Remove debug.c, add modlist.c.
	(debug.c): Rewrite rule.
	(debug.h): Remove rule.
	* mfd/.gitignore: Remove debug.c, add modlist.c.
	* mfd/builtin/Makefile.am (module.list): Remove.
	* mfd/builtin/.gitignore: Likewise.
	* mfd/builtin/snarf.m4 (MF_SOURCE_DEBUG_NAME): Do not output #define
	directive, only return the constructed module name.
	(_init_builtin): Register module in the debugging subsystem and
	initialize debug_handle.
	Define MF_SOURCE_NAME to debug_handle.
	* mfd/debug.hin (debug_spec_string): Change signature.
	* mfd/main.c (main): Call init_debug_modlist.

	* mfd/builtin/other.bi (debug_spec): Take additional argument,
	which specifies whether to return zero level specifications.

	* NEWS: Update.

	Change builtin trace control.

	The method used so far limited number of built-in modules. This
	limit was already reached with the addition of email.bi module, which
	was the compelling reason to implement a better scalable solution.

	* mfd/builtin/builtin.c: New file.
	* mfd/builtin/.gitignore: Explicitly mention ignored files.
	* mfd/builtin/Makefile.am (libbuiltin_a_SOURCES): Add builtin.c.
	* mfd/builtin/builtin.def (builtin_module) <mask>: Remove.
	<trace>: New member.
	(builtin_setup, builtin_set_module_trace)
	(builtin_set_all_module_trace,builtin_module_trace): New protos.
	* mfd/builtin/init.m4 (MF_MODULE_MASK): Replace by MF_MODULE_IDX.
	Change initializers of builtin_module.
	Define BUILTIN_IDX_MAX.
	* mfd/builtin/snarf.m4 (MF_MODULE_MASK): Replace by MF_MODULE_IDX.
	(__mf_defun): Use builtin_module_trace.
	* mfd/prog.c: Don't define DEFINE_BUILTIN_MODULE.
	(prog_trace_option): Remove variable.
	(PROG_TRACE_ENGINE): Rewrite macro.
	(enable_module_trace, disable_module_trace): Remove in favor of
	builtin_set_module_trace.
	(toggle_prog_trace): Remove.
	(set_prog_trace): New function.
	(enable_prog_trace, disable_prog_trace): Use set_prog_trace.
	(builtin_setup): Move to mfd/builtin/builtin.c.
	* po/POTFILES.in: Add mfd/builtin/builtin.c.

2010-05-26  Sergey Poznyakoff  <gray@gnu.org.ua>

	Amend previous commit:

	* NEWS: Update.
	* mfd/builtin/Makefile.am: Update.
	* mfd/builtin/dns.bi: Update.

	Implement dequote function

	* mfd/builtin/email.bi: New function.
	* mfd/builtin/Makefile.am (BI_FILES): Add email.bi.
	* mfd/builtin/dns.bi (domainpart, localpart): Move to email.bi.
	* NEWS: Update.

	Reorganize source tree structure.

	* configure.ac (AC_CONFIG_FILES): Add mfd/builtin/Makefile.
	* mfd/.gitignore: Update.
	* mfd/Makefile.am (SUBDIRS): New variable.
	(M4_FILES): Remove (see mfd/builtin/Makefile.am). All references updated.
	(noinst_HEADERS): Remove builtin.h.
	(EXTRA_DIST): Remove files moved to builtin.
	(BUILT_SOURCES): Likewise.
	(INCLUDES): Add -I$(top_srcdir)/mfd/builtin.
	(.def.h): Remove rule.
	(module.list): New goal.
	(LDADD): Add builtin.
	(SUFFIXES): Remove .m4 .c .def .h.
	(.m4.c, .def.h): Remove rules.
	(.cin.c, .hin.h): Rewrite.
	(debug.c, debug.h): Change dependencies.

	* mfd/builtin: New directory.
	* mfd/bi_(.*).m4: Move to mfd/builtin/\1.bi
	* mfd/builtin.def: Move to mfd/builtin.
	* mfd/init.m4: Likewise.
	* mfd/snarf.m4: Likewise.
	* mfd/builtin/Makefile.am: New file
	* mfd/builtin/.gitignore: New file
	* mfd/builtin/init.m4 (MF_MODULE_NAME): Reflect changes in file naming.
	* mfd/builtin/snarf.m4 (MF_MODULE_NAME)
	(MF_SOURCE_DEBUG_NAME): Likewise.
	* mfd/debug.cin (struct modinfo): Remove.
	Include module.list and builtin/module.list.
	* mfd/debugdef.m4 (__makedebugsym): Update.

	* po/POTFILES.in: Update.

2010-05-14  Sergey Poznyakoff  <gray@gnu.org.ua>

	Document new features in NEWS.

2010-05-12  Sergey Poznyakoff  <gray@gnu.org.ua>

	Add comments for the translators.

2010-05-08  Sergey Poznyakoff  <gray@gnu.org.ua>

	More compatibility fixes.

	* lib/mudefs.h (MUREF): New macro.
	* pmult/pmult.c (parse_opt): Use MUREF instead of & where necessary.
	* smap/smap.c: Likewise.

	Avoid name clashes.

	* mfd/snarf.m4 (MF_VAR_SET_STRING): Prefix local variables with
	a double-underscore to avoid name clashes with the existing variables.

2010-04-20  Sergey Poznyakoff  <gray@gnu.org.ua>

	Update for compatibility with Mailutils HEAD.

	* configure.ac: Check for struct mu_argp_node_list.
	* doc/upgrade.texi: Replace itemize with enumerate.
	* lib/mudefs.h: New file.
	* lib/Makefile.am (noinst_HEADERS): Add mudefs.h
	* pmult/pmult.c: Include mudefs.h
	(parse_opt): Use MUDEF_ARGP_NODE_LIST instead of
	struct mu_argp_node_list.
	* smap/smap.c: Likewise.

2010-01-20  Sergey Poznyakoff  <gray@gnu.org.ua>

	Fix keeping state information in the server.

	* gacopyz/gacopyz.h (gacopyz_flag_op): New enum.
	(GACOPYZ_SRV_DISABLED): New define.
	(gacopyz_srv_state): Remove proto.
	(gacopyz_srv_flags, gacopyz_srv_get_flags): New protos.
	* gacopyz/server.c (gacopyz_srv_state): Remove.
	(_SRV_CONNECTED,_SRV_READY,_SRV_CLRDIS)
	(_SRV_SYS_MASK): New defines.
	(gacopyz_srv.state): Remove.
	(gacopyz_srv.flags): New member.
	(gacopyz_srv_state): Remove function.
	(gacopyz_srv_flags, gacopyz_srv_get_flags): New functions.
	(gacopyz_srv_create): Init flags.
	(gacopyz_srv_connect): Set _SRV_CONNECTED flag.
	(gacopyz_srv_negotiate): Set _SRV_READY flag.
	(gacopyz_srv_send_command): On receiving the SMFIR_REPLYCODE
	reply set GACOPYZ_SRV_DISABLED flag, if the original command
	was one of SMFIC_BODY, SMFIC_HEADER or SMFIC_EOH.
	(gacopyz_srv_abort): Update flags.
	(gacopyz_srv_quit): Likewise.
	(_SRV_ASSERT_FLAG): New macro.
	(gacopyz_srv_helo)
	(gacopyz_srv_envfrom,gacopyz_srv_envrcpt)
	(gacopyz_srv_data,gacopyz_srv_header)
	(gacopyz_srv_eoh,gacopyz_srv_body): Return SMFIR_CONTINUE if
	GACOPYZ_SRV_DISABLED bit is set.
	(gacopyz_srv_eom): Likewise, but clear the GACOPYZ_SRV_DISABLED
	bit.
	(gacopyz_srv_close): Do nothing if _SRV_CONNECTED is not set.

	Minor fix.

	* doc/mailfromd.texi: Update.

2010-01-19  Sergey Poznyakoff  <gray@gnu.org.ua>

	Improve I/O timeout handling. Implement `progress' function.

	* gacopyz/gacopyz_priv.h (gacopyz_read_command): Additional
	argument: timeout index.
	* gacopyz/io.c (_gacopyz_read_tm): New function.
	(_gacopyz_read): Wrapper around _gacopyz_read_tm.
	(gacopyz_read_command): Additional argument: timeout index.
	All callers updated.
	* gacopyz/server.c (srv_connect): Use configured connection
	timeout instead of the hardcoded value.
	(gacopyz_srv_send_command): Use GACOPYZ_TO_EOM (EOM timeout)
	if the command send was SMFIC_BODYEOB.
	Handle SMFIR_PROGRESS return.
	* mfd/Makefile.am: Add bi_progress.m4.
	* mfd/bi_progress.m4: New file.
	* mfd/bi_system.m4 (sleep): Provide optional second
	argument: number of microseconds to sleep.
	* mtasim/mtasim.c (options): New option --milter-timeout.
	(parse_milter_timeouts): New function.
	(parse_opt): Handle --milter-timeout.

	* doc/mtasim.texi: Update.
	* doc/mailfromd.texi: Update.
	* NEWS: Update.

2010-01-17  Sergey Poznyakoff  <gray@gnu.org.ua>

	Improve handling of abort requests.

	* mfd/engine.c (mlfi_helo): Free previous value of
	md->helostr.
	(mlfi_abort): Do not discard helostr. See RFC 2822,
	section 4.1.1.5.

	* pmult/pmult.c (rf_abort): Clear macros in gsrv.

	Improve gacopyz server API.

	* gacopyz/gacopyz.h (gacopyz_srv_clear_macros_pred)
	(gacopyz_srv_get_id,gacopyz_srv_get_portspec)
	(gacopyz_srv_get_state,gacopyz_srv_get_logmask)
	(gacopyz_srv_get_fd,gacopyz_srv_get_onerr)
	(gacopyz_srv_set_logmask): New prototypes.
	* gacopyz/server.c (gacopyz_srv_clear_macros_pred)
	(gacopyz_srv_get_id,gacopyz_srv_get_portspec)
	(gacopyz_srv_get_state,gacopyz_srv_get_logmask)
	(gacopyz_srv_get_fd,gacopyz_srv_get_onerr)
	(gacopyz_srv_set_logmask): New functions.
	(gacopyz_srv_set_callback): Don't switch to
	srv_disabled state if command returned SMFIR_REPLYCODE.

2010-01-14  Sergey Poznyakoff  <gray@gnu.org.ua>

	Fix control flow through the try-catch construct.

	* mfd/drivers.c (code_type_try): Fix handling
	of returns from both branches of the construct:
	the return value is preserved in the register A
	until RESTEX.
	* tests/trycatch01.at: New test case.
	* tests/trycatch02.at: New test case.
	* tests/trycatch03.at: New test case.
	* tests/trycatch04.at: New test case.
	* tests/Makefile.am: Add new tests.
	* tests/testsuite.at: Add new tests.

	* tests/etc/catch.rc: Fix diagnostic message.
	* tests/etc/catch01.rc: Likewise.
	* tests/invcidr.at: Likewise.
	* tests/invcidr2.at: Likewise.
	* tests/invip.at: Likewise.

2010-01-02  Sergey Poznyakoff  <gray@gnu.org.ua>

	Update copyright years.

	Happy GNU Year!

2009-12-19  Sergey Poznyakoff  <gray@gnu.org.ua>

	Improve make check.

	* Makefile.am (git-describe): Prefix with AM_V_GEN
	* etc/Makefile.am (check-am): New rule.
	* etc/mailfromd.mf: Update. Use new syntax.
	* mflib/Makefile.am (.mf.lint): New rule.
	(check-am): Rewrite as a dependency on *.lint
	files.
	* mflib/spf.mf (spf_cached): Remove global.
	(__spf_log): Take `cached' as an argument.

2009-12-15  Sergey Poznyakoff  <gray@gnu.org.ua>

	Add close_fds functions.

	* lib/Makefile.am (libmf_a_SOURCES): Add close-fds.c
	* lib/libmf.h (close_fds_above)
	(close_fds_except): New declarations.
	* mfd/bi_io.m4 (open_program_stream): Use close_fds_above.
	* mfd/engine.c (mailfromd_daemon): Likewise.
	* mfd/pp.c (pp_extrn_start): Likewise.
	* mfd/srvman.c (close_fds): Remove.
	(server_run): Use close_fds_except.
	(srvman_url_to_sockaddr): Fix signature.
	All uses updated.
	* mfd/srvman.h (srvman_url_to_sockaddr): Fix prototype.

	Reflect server ID in the proctitle.

	* mfd/engine.c (milter_session_server): Call mflog_reopen
	to reset syslog ID.
	* mfd/mailfromd.h (syslog_fd): Rename to mflog_fd.
	(mflog_close, mflog_reopen): New functions.
	(log_setup): Remove.
	(mflog_setup): New function.
	* mfd/main.c (set_default_callout_server): New function.
	(server_config_stmt): New keyword "default".
	(server_section_parser): Handle "default" settings.
	(cb_callout_url): Call set_default_callout_server.
	(syslog_fd): Rename to mflog_fd.
	(mflog_close, mflog_reopen): New functions.
	(log_setup): Rename to _log_setup, now static, with changes.
	(mflog_setup): New function.
	* mfd/savsrv.c (callout_session_server): Call mflog_reopen
	to reset syslog ID.

	* mfd/lex.l: Stylistic changes.

	Minor change.

	* mfd/lex.l (__git__): New built-in constant.

	Fix gacopyz verbosity

	* gacopyz/gacopyz.c (report_command): print
	'state %s is unreachable' warning at debug level.
	Previously it was treated as a warning.
	(gacopyz_context_loop): Likewise.
	Also add state transition debugging info.

2009-12-14  Sergey Poznyakoff  <gray@gnu.org.ua>

	Minor change

	* mfd/mu_dbm.c (mu_dbm_errcall_fcn): One more fix

	Minor changes.

	* mfd/mailfromd.h (set_options): Remove proto.
	* mfd/main.c (struct option_cache): Remove
	flags, confkw, conffn.
	(MFD_OPTION_CUMULATIVE): Remove.
	(set_option): Now static.
	Remove `override' parameter. All uses updated.
	* mfd/mu_dbm.c (mu_dbm_errcall_fcn)![DB_VERSION_MAJOR == 3]:
	Fix signature.

	Bugfixes.

	* lib/syslog_async.c (log_fd_async): Always return
	actual log_fd.
	* mfd/main.c (parse_milter_url): Fix parsing of sendmail-compatible
	URLs.
	(syslog_fd): New function.
	* mfd/savclt.c (schedule_callout): Return immediately if
	unable to establish connection with the server.
	* mfd/srvman.c (server_run): Avoid closing syslog descriptor,
	if the async implementation is in use.

	Fix handling of hard timeouts in callouts.

	* mfd/mailfromd.h (mf_timeout): New
	status code.
	(mf_status_str, mf_status_to_exception): Remove macros.
	(mf_status_str, mf_status_to_exception): New protos.
	(test_message_data_init, trimcrlf): New protos.
	* mfd/mf-status.mfi (mf_status_str)
	(mf_status_to_exception): New functions.
	* mfd/savsrv.c (verify): Improve proctitle info.
	Handle mf_timeout response as equivalent to mf_not_found.
	* mfd/callout.c (reset, callout_io)
	(smtp_io_open, callout_host)
	(callout_mx, callout_strict)
	(listens_on): Return mf_temp_failure only if
	received 4xx reply from the SMTP server. If there
	was no response within the timeout interval,
	return mf_timeout.
	* mfd/engine.c (method_strict)
	(method_standard): Schedule callout only if
	our attempt returned mf_timeout.

	Improve --version output for alpha version.

	The new output looks like:

	   mailfromd (mailfromd) 6.0.91 [release-6.0-17-ga3fa5da]

	where the string in [] is the result of git describe.  If
	there are uncommitted changes, that string is suffixed with
	`-dirty'.

	* Makefile.am (git-describe): New goal.
	(dist-hook): Depend on ChangeLog and git-describe.
	* NEWS: Version 6.0.91.
	* configure.ac: Set GIT_DESCRIBE for alpha versions.
	* lib/version.c (mailfromd_version): Print $GIT_DESCRIBE
	along with the version info.
	* tests/version.at: Accept new version format.

2009-12-13  Sergey Poznyakoff  <gray@gnu.org.ua>

	Version 6.0.90

	* NEWS, configure.ac: Raise version number to 6.0.90

2009-12-12  Sergey Poznyakoff  <gray@gnu.org.ua>

	Use callout resolver to handle timed-out callouts.

	* mfd/savclt.c: New file.
	* mfd/Makefile.am (mailfromd_SOURCES): Add savclt.c
	* mfd/callout.c (transcript): Get ID as 1st arg.
	Remove static qualifier. All callers updated.
	* mfd/engine.c (method_strict)
	(method_standard): If callout returned mf_temp_failure,
	try to pass the task to the callout server, if one is
	defined.
	* mfd/mailfromd.h (transcript)
	(schedule_callout): New protos.
	(callout_server_sa, callout_server_sa_len): New externs.
	* mfd/main.c (force_remove): Initialize to 0 (see srvman.c)
	(server_config_stmt): New statements single-process and
	reuseaddr.
	(add_legacy_milter_port, server_section_parser): Pass
	flags to mfd_server_new.
	(mf_cfg_param): New statement `callout-url'.
	* mfd/savsrv.c (MF_SOURCE_NAME): Fixed.
	(verify, callout_session_server): Set proctitle.
	(callout_session_server): Fix memory leak.
	* mfd/srvman.c (struct mfd_server): New member `flags'.
	(mfd_server_new): Take flags as 4th argument.
	(server_run): Use flags to set single-user and reuseaddr
	modes.
	* mfd/srvman.h (SRV_SINGLE_PROCESS)
	(SRV_KEEP_EXISTING): New defines.
	(mfd_server_new): Change signature.
	(srvman_url_to_sockaddr): New proto.

	Implement the callout server.

	* mfd/savsrv.c: New file.
	* mfd/Makefile.am (mailfromd_SOURCES): Add savsrv.c.
	* mfd/callout.c (struct smtp_io_data): Add new fields:
	email, ehlo and mailfrom.
	(smtp_io_create): trim trailing ': ' from the id.
	(smtp_io_init, smtp_io_setup_callout): New functions.
	(smtp_io_free): Free new members.
	(smtp_io_email): New function.
	(callout_io): Change signature.
	(smtp_io_open): 2nd arg is const char *.
	(callout): Remove.
	(callout_host, callout_mx)
	(callout_strict, callout_standard): New functions.
	* mfd/engine.c (mfl_smtp_io_callback): Now extern.
	(check_on_host, check_mx_records): Remove.
	(method_strict, method_standard): Rewrite using new callout
	support.
	* mfd/mailfromd.h: Fix protos.
	(callout_host, callout_mx)
	(callout_strict, callout_standard): New functions.
	* mfd/main.c (cb_url)
	(callout_resolver, callout_resolver_section_param)
	(callout_resolver_cfg_init): Remove.
	(milter_config_stmt): Rename to server_config_stmt. Add new
	field `server'.
	(cb_milter_stmt_listen): Rename to cb_server_stmt_listen.
	(milter_section_param): Rename to server_section_param.
	(milter_section_parser): Rename to server_section_parser.
	The label of the statement determines the server type.
	(milter_cfg_init): Rename to server_cfg_init.
	(mf_cfg_param): Rename `milter' and `callout-resolver'
	statements. Add new statement `server'.
	(main): Call server_cfg_init.

	* mfd/bi_poll.m4 (_pollhost, _pollmx): Use callout_host
	and callout_mx, correspondingly.

	* mfd/cache.c (cache_get, cache_insert)
	(cache_get2, cache_insert2): String args are const.
	* mfd/dns.c (getmx): Likewise.
	* mfd/srvman.c: Add debugging statements.

	Implement multiple servers support.

	* mfd/srvman.c: New file.
	* mfd/srvman.h: New file.
	* gacopyz/gacopyz.h (gacopyz_context_loop): New proto.
	* gacopyz/gacopyz.c (gacopyz_context_loop): Remove static qualifier.
	Take additional parameter (closure). All callers updated.
	(gacopyz_getclosure): New proto.
	* gacopyz/gacopyz_priv.h (struct smfi_str): desc is const *.
	(closure): New member.
	* mfd/Makefile.am (mailfromd_SOURCES): Add srvman.c and srvman.h.
	* mfd/bi_vars.m4: New MFL variable milter_server_id.
	(set_milter_server_id): New proto.
	* mfd/engine.c (priv_get): Set milter_server_id.
	(milter_conn_accept): Remove.
	(smfilter): Static.
	Init xxfi_accept to NULL.
	(milter_session_server, milter_setlogmask)
	(milter_settimeout): New functions.
	(check_local_portspec, check_portspec): Remove.
	(sig_stop, sig_restart): Call mfd_srvman_stop instead
	of smfi_stop.
	(mailfromd_daemon): Rewrite via srvman functions.
	* mfd/mailfromd.h (portspec, mailfromd_acl): Remove.
	(add_legacy_milter_port, free_parser_data)
	(set_milter_server_id)
	(milter_session_server, milter_setlogmask)
	(milter_settimeout): New prototypes.
	* mfd/main.c (portspec): Remove
	(force_remove): Initialize to 1.
	(mailfromd_acl): Remove.
	(parse_milter_url, next_server_id)
	(add_legacy_milter_port): New functions.
	(set_port): Call add_legacy_milter_port.
	(parse_opt): Call milter_set.* functions, instead
	of smfi_set.*
	(portspec_fixup): Remove.
	(main): Call milter_cfg_init.
	(mf_cfg_param): New block statement 'milter'.

	* mflib/Makefile.am (check-am): Ignore
	configuration files.

	Preparational work for introducing callout resolver.

	* configure.ac: If --enable-pmilter=PATH is
	given, store appropriate -I statement in
	META1_INCLUDES. Modify CPPFLAGS for the
	subsequent AC_CHECK_HEADERS accordingly.
	Restrore LDFLAGS after checks.

	* mfd/bi_dns.m4: Rename smtp_timeout to smtp_timeout_soft.
	* mfd/engine.c: Rename smtp_timeout to smtp_timeout_soft.
	(xlate_and_replace_body): Fix uninitialized variable.
	* mfd/mailfromd.h (smtp_timeout): Remove.
	(smtp_timeout_soft, smtp_timeout_hard): New externs.
	(mfd_app_init): Change signature.
	* mfd/main.c (smtp_timeout): Remove.
	(smtp_timeout_soft, smtp_timeout_hard): New externs.
	New configuration statement `smtp-timeout', instead of `timeout'.
	New block statement `callout-resolver'.
	* pmult/Makefile.am (INCLUDES): Add META1_INCLUDES.

	Minor changes

	* mfd/callout.c: Fix comment.

	* gacopyz/context.c (format_message): Initialize
	xcodelen to shut up gcc warnings.
	* lib/utils.c, mfd/dnscache.c: Shut up gcc warnings.
	* mfd/appinit.c (mfd_app_init): Change signature.
	Take two closures: one for argp and another for
	mfd_parse_config_files.

	Optimize callout support. Introduce distinct timeouts for each SMTP command.

	* mfd/callout.c: New file.
	* mfd/Makefile.am (mailfromd_SOURCES): Add callout.c
	* mfd/bi_poll.m4 (set_last_poll_result): Remove.
	(set_last_poll_host)
	(set_last_poll_sent,set_last_poll_recv): New functions.
	* mfd/engine.c (struct message_data.io): Remove. All uses
	updated.
	(test_message_data_init): New function.
	(priv_set_io): Remove. All uses updated.
	(transcript, smtp_io_*, listens_on): Remove. See callout.c
	(mfl_smtp_io_callback): New function.
	(check_on_host): Rewrite using smtp_io_t functions.
	* mfd/gram.y (mailfromd_test, mailfromd_run): Call
	test_message_data_init.
	* mfd/mailfromd.h (connect_timeout)
	(response_timeout): Remove.
	(set_last_poll_result): Remove.
	(set_last_poll_host)
	(set_last_poll_sent,set_last_poll_recv): New proto.
	(listens_on): Change signature.
	(connect_timeout, response_timeout): Remove.
	(smtp_timeout): New extern.
	(smtp_timeout): New enum.
	(smtp_io_callback_t, smtp_io_t): New types.
	(smtp_io_create, smtp_io_free)
	(callout): New protos.
	* mfd/main.c (connect_timeout, response_timeout): Remove.
	(smtp_timeout): New global.
	(cb_io_timeout, cb_connect_timeout): Remove.
	(cb_initial_response_timeout): Remove.
	(cb_io_timeout): New function.
	(mf_cfg_param): New keywords: helo-timeout, mail-timeout,
	rcpt-timeout, rset-timeout, quit-timeout
	(main): Set uninitialized elements of smtp_timeout to
	io_timeout.
	* mfd/bi_dns.m4 (listens): Update call to listens_on.

	Bugfixes (port from master).

	* mfd/deprecation.c (init_fixup_stk): New function.
	(add_fixup_command, add_fixup_command_fmt): Call init_fixup_stk.
	* mfd/lex.l: Rewrite the rule for #pragma without using the
	trailing context, so it works after yyless(0).
	* mfd/tbf_rate.c: Inlcude inttypes.h.

	Fix exception handling. Introduce user-defined exceptions.

	* mfd/bitmask.h: New file.
	* mfd/Makefile.am: Add bitmask.h
	* mfd/drivers.c (print_type_catch): Take into account the `all'
	flag: there may be more exceptions than mf_exception_count.
	(code_type_catch): Use code_exmask to code exception mask values.
	* mfd/gram.y (codegen): Take struct exmask * as its third parameter.
	(%union): New member catchlist.
	(catchlist): Change type.
	(T_DCLEX): New token.
	(decl rule): New production: exdecl.
	(exdecl): New rule.
	(catch rule): Use bitmask.
	(simple_catch rule): Likewise.
	(catchlist rule): Rewrite.
	(free_parser_data): New placeholder.
	(exmask_create): New function.
	(create_on_node): Use struct exmask* instead of the fixed-size
	bitmask.
	(dataseg_layout): Store exception masks in the DS.
	* mfd/lex.l (dclex): New token.
	* mfd/mailfromd.h: Include bitmask.h
	(EXMASK): Rename to STATMASK.
	(struct catch_node, struct function): Store exception masks
	in struct exmask.
	(exmask): New struct.
	(exmask_create, code_exmask): New prototypes.
	* mfd/main.c (main): Call free_parser_data.
	* mfd/mf-status.mfi (mf_exception_str): Change parameter type to
	unsigned int. Return USER-DEFINED-%d instead of the UNKNOWN for
	exceptions not in the predefined range.
	* mfd/opcodes (CATCH): Decrease number of arguments.
	* mfd/prog.c (exception_count): New global.
	(code_exmask): New function.
	(exception_context): New struct.
	(eval_environ): defcatch and catch replaced by defcatch_ctx
	and catch_ctx.
	(instr_catch): Read exceptions from the DS. Take two arguments.
	(dump_catch): Update.
	(instr_saveex): For each exception, save on stack its entry point,
	tos and base addresses in the form of tos invariants.
	(dump_saveex): Update.
	(instr_restex): Do the reverse of instr_saveex.
	(env_init, destroy_environment)
	(env_save_catches): Reflect changes to eval_environ_t.
	(env_throw_0): Before passing control to the exception
	handler, restore tos and base addresses.
	* mfd/prog.h (exception_count): New extern.
	* mfd/snarf.m4: Use STATMASK instead of EXMASK.
	* mfd/symbols.c (function_install): Create mask
	using exmask_create.

	Implement `try - catch' construct.

	* elisp/mfl-mode.el (mfl-compute-line-indentation): Account
	for `try'.
	(mfl-keywords): New keyword `try'.
	* mfd/drivers.c (print_type_catch): Properly indent END CATCH.
	(code_type_catch): Remove adjust kludge (see prog.c).
	(type try): New node type.
	* mfd/gram.y (T_TRY): New token.
	(try_block, simple_catch): New types.
	(catch): Rewrite rule.
	(simple_catch): New production.
	(try_block): New production.
	(node_type): Handle node_type_try.
	* mfd/lex.l: Recognize the `try' keyword.
	* mfd/mailfromd.h (struct try_node): New struct.
	(struct node): Add v.try.
	* mfd/prog.c (instr_retcatch): Remove 2 args from stack,
	as per env_throw_0.
	* doc/mailfromd.texi: New keyword `try'.

	Re-introduce fixup script (partial port of 7cba79054 from master).

	* mfd/deprecation.c (add_fixup_command, add_fixup_command_fmt)
	(add_fixup_command_locus): New functions.
	(fixup_create_script): New functions.
	* mfd/gram.y: Issue fix-up statements for every deprecation
	warning.
	* mfd/lex.l: Likewise.
	* mfd/mailfromd.h (fixup_op): New enumeration.
	(add_fixup_command,add_fixup_command_fmt)
	(add_fixup_command_locus, fixup_create_script): New functions.
	* mfd/main.c (main): Call fixup_create_script.

	Improve locations in diagnostic messages (port b4e793c6329 from master).

	* mfd/deprecation.c (deprecation_warning_locus): New function.
	(deprecation_warning): Use print_parse_message.
	* mfd/gram.y: Improve error diagnostics by using Bison's locations
	feature.
	* mfd/lex.l (advance_line): Set point and leng to 0.
	(YY_USER_ACTION): Set yyloc.
	(keyword): Remove. Rely on YY_USER_ACTION for setting locations.
	(print_parse_message): Change scope of visibility.
	Print column information if location_column_option is set.
	(vparse_warning): Remove.
	* mfd/mailfromd.h (location_column_option): New extern.
	(struct locus): New members: point and leng.
	(LOCUS_EQ): Avoid coredumps on NULL file names.
	(mf_yyltype_t): New typedef.
	(YYLTYPE): New define.
	(vparse_warning): Remove.
	(print_parse_message): New proto.
	(deprecation_warning_locus): New proto.
	* mfd/main.c (location_column_option): New variable.
	(OPTION_LOCATION_COLUMN): New option.
	(options): New option --location-column.
	(parse_opt): Handle OPTION_LOCATION_COLUMN.
	* mfd/pp.c (assign_locus): Reset point and leng.
	* tests/poll04.at: Reflect changes in error messages.

	Update.

	* mflib/dns.mf4, mflib/safedb.mf4: Remove uses of %var.

	Remove %var usage.

	* mfd/lex.l: Warn about %var constructs outside of strings.
	(print_parse_message): Fix call to mu_error to avoid misinterpreting
	"%" in the message.

	* tests/farg.at: Remove
	* tests/Makefile.am, tests/testsuite.at: Remove farg.at
	* mflib/gettext.mf: s/%var/var/g outside of strings.
	* mflib/heloarg_test.mf: Likewise.
	* mflib/is_ip.mf: Likewise.
	* mflib/localdomain.mf: Likewise.
	* mflib/match_cidr.mf: Likewise.
	* mflib/match_dnsbl.mf: Likewise.
	* mflib/match_rhsbl.mf: Likewise.
	* mflib/rateok.mf: Likewise.
	* mflib/revip.mf: Likewise.
	* mflib/sa.mf: Likewise.
	* mflib/sockmap.mf: Likewise.
	* mflib/spf.mf: Likewise.
	* mflib/strip_domain_part.mf: Likewise.
	* mflib/valid_domain.mf: Likewise.
	* mflib/verp.mf: Likewise.
	* tests/declvar.at: Likewise.
	* tests/eof.at: Likewise.
	* tests/etc/catch.rc: Likewise.
	* tests/etc/public.mf: Likewise.
	* tests/etc/static.mf: Likewise.
	* tests/fctx00.at: Likewise.
	* tests/fctx01.at: Likewise.
	* tests/hdr-all.at: Likewise.
	* tests/hdr-cap.at: Likewise.
	* tests/hdr-itr.at: Likewise.
	* tests/hdr-mul.at: Likewise.
	* tests/ml01.at: Likewise.
	* tests/next01.at: Likewise.
	* tests/next02.at: Likewise.
	* tests/regopt0.at: Likewise.
	* tests/shadow.at: Likewise.
	* tests/strings.at: Likewise.

	The '%' prefix no longer needed to refer to variables.

	* mfd/gram.y, mfd/lex.l: Allow to refer to variables without
	'%' prefix.
	* mfd/prog.h (add_xref): New proto.
	* tests/etc/ack.rc, tests/etc/catch01.rc: Replace obsolete (v1.0-style)
	parameter declarations with normal ones.
	* tests/farg.at: account for a deprecation message.

	Simplify rules for function vs. procedure call.

	* mfd/gram.y (T_BUILTIN_PROC, T_FUNCTION_PROC): Removed.
	(proccall): Removed. Use funcall instead.
	* /mfd/lex.l (T_BUILTIN_PROC, T_FUNCTION_PROC): Removed.

	Initial cleanup: remove deprecated features.

	* mfd/deprecation.c: Remove _change_conf functions and data.
	* mfd/drivers.c (type strcat): Remove.
	* mfd/gram.y: Remove deprecated features: use of "functional operators",
	implicit concatenation (except for literal strings), #pragma option and
	#pragma database.
	* mfd/mailfromd.h (LEGACY_SCRIPT_FILE): Remove.
	(set_option): Remove last argument.
	(legacy_script_warning, open_change_conf, write_change_conf)
	(write_db_config, close_change_conf): Remove.
	* mfd/main.c: Remove obsolete pragma support.
	* mfd/pp.c (parse_require): Remove.

	* mflib/heloarg_test.mf: Remove use of obsolete features.
	* mflib/match_rhsbl.mf: Likewise.
	* mflib/strip_domain_part.mf: Likewise.

	* tests/prec.at: Remove.
	* tests/Makefile.am, tests/testsuite.at: Remove prec.at and prec01.at
	* tests/etc/dns.rc, tests/etc/relayed.rc,
	tests/fctx00.at, tests/numrcpt.at, tests/strings.at: Don't use
	obsolete features.

	Version 6.0

	* NEWS: Update.
	* configure.ac: Update.
	* mfd/lex.l (module rule): Add const qualifier.

2009-11-19  Sergey Poznyakoff  <gray@gnu.org.ua>

	Update docs

2009-11-18  Sergey Poznyakoff  <gray@gnu.org.ua>

	Version 5.9.91 (alpha)

	Fix configuration handling. Partial port from mtax-cleanup c9f9835a1820fa85ae49f2f511ce793255618bcb

	* mfd/appinit.c (mfd_app_init): Change signature.
	Take two closures: one for argp and another for mfd_parse_config_files.
	* mfd/mailfromd.h (mfd_app_init): Change signature.
	* mfd/main.c (main): Update call to mfd_app_init. Make sure
	to pass NULL as cfg_data, to not trigger a Mailutils bug.

2009-11-15  Sergey Poznyakoff  <gray@gnu.org.ua>

	Minor change

	* mfd/lex.l (print_parse_message): Use dot as a separator between line
	and column numbers.
	* doc/mailfromd.texi: Document this.

2009-11-07  Sergey Poznyakoff  <gray@gnu.org.ua>

	Update the docs. Minor change in is_greylisted().

	* NEWS: Update.
	* configure.ac: Update.
	* doc/mailfromd.texi: Update.
	* mfd/bi_db.m4 (is_greylisted_ct): Set greylist_seconds_left
	if returning true.

2009-11-06  Sergey Poznyakoff  <gray@gnu.org.ua>

	Fix diagnostic messages.

	* lib/userprivs.c
	* mfd/bi_body.m4
	* mfd/bi_curhdr.m4
	* mfd/bi_db.m4
	* mfd/bi_macro.m4
	* mfd/bi_mbox.m4
	* mfd/bi_msg.m4
	* mfd/bi_sieve.m4
	* mfd/gram.y
	* mfd/main.c
	* mfd/pp.c
	* mfd/pragma.c
	* mfd/symbols.c
	* mfd/tbf_rate.c

	Syntax sugar for the `require' statement.

	* mfd/lex.l (save_state): New static
	(XIDENT): New exclusive state.
	Enter XIDENT after `require' or initial `from'
	and quit after reading next symbol. Account for
	possible comment between `require' or `from' and
	the symbol.

2009-11-05  Sergey Poznyakoff  <gray@gnu.org.ua>

	Add gnulib as a module.

	* bootstrap: Merge changes from gnulib.
	* .gitmodules: Add gnulib

	Minor fix.

	* mfd/lex.l: Remove dependency on base_name.

	Minor changes.

	* mfd/Makefile.am (inc_DATA): Add status.mfh.
	* mfd/main.c (main): Use DEFAULT_CONFIG_FILE.
	* pmult/pmult.c (_cb_log_level): Bugfix.

	Fix docs

2009-11-04  Sergey Poznyakoff  <gray@gnu.org.ua>

	Fix handling of 5.x filter files.

	* mfd/lex.l (INCTX_IGNORE_BYE): New flag.
	(string_beg): New static.
	(compose_start): Initialize string_beg.
	(compose_finish): Assign string_beg to yylloc.beg.
	(module rule): Fix warning message.
	Eat everything up to and including '.', if
	the module file is included.
	Raise INCTX_IGNORE_BYE flag in this case.
	(bye rule): If INCTX_IGNORE_BYE is set return EOF.
	* mflib/heloarg_test.mf, mflib/match_cidr.mf,
	mflib/match_dnsbl.mf, mflib/match_rhsbl.mf,
	mflib/sockmap.mf, mflib/spf.mf: Quote arguments of the
	`require' statements.

	* doc/upgrade.texi: Update.

	Spell check the docs.

	Improve docs.

	* NEWS, doc/deprecate.texi,
	doc/mailfromd.texi: Document new features.
	* doc/sexp.texi: New file.
	* doc/upgrade.texi: Update.
	* mfd/bi_msg.m4 (message_read_line)
	(message_read_body_line): Raise eof exception when there
	are no more lines left.

2009-10-29  Sergey Poznyakoff  <gray@gnu.org.ua>

	Fix doc/Commit

	* doc/Commit (gray_print_section): Output anchors before
	chapter/section/etc. titles, so that the heading menu in
	monolithic document works properly.

2009-10-27  Sergey Poznyakoff  <gray@gnu.org.ua>

	Improve docs.

	* doc/Makefile.am (manual.tar.bz2, man-tar): New rules.
	(manual): Mark as phony.
	* doc/gendocs_template: Upgrade for the new webpage style.
	* doc/mailfromd.texi: Minor changes.
	* doc/Config: New file.

2009-10-25  Sergey Poznyakoff  <gray@gnu.org.ua>

	Bugfixes.

	* mfd/deprecation.c (init_fixup_stk): New function.
	(add_fixup_command, add_fixup_command_fmt): Call init_fixup_stk.
	* mfd/lex.l: Rewrite the rule for #pragma without using the
	trailing context, so it works after yyless(0).
	* mfd/tbf_rate.c: Inlcude inttypes.h.
	* tests/sh-req.at: New testcase.
	* tests/Makefile.am, tests/testsuite.at: Add sh-req.at.
	* NEWS: Update.

2009-10-20  Sergey Poznyakoff  <gray@gnu.org.ua>

	Move pies to a stand-alone project.

	* pies/Remove.
	* doc/pies.texi: Remove.
	* doc/Makefile.am: Update.
	* doc/mailfromd.texi: Update.
	* doc/pmult.texi: Update.
	* po/POTFILES.in: Update.
	* Makefile.am, NEWS: Update.

	* mfd/lex.l: Use %top section to include config.h

2009-10-09  Sergey Poznyakoff  <gray@gnu.org.ua>

	Begin restructuring the docs.

	* doc/deprecate.texi: New file.
	* doc/Makefile.am: Add deprecate.texi.
	* doc/upgrade.texi: Update.

2009-10-08  Sergey Poznyakoff  <gray@gnu.org.ua>

	Fix compilation of the `catch' construct.

	* mfd/drivers.c (print_type_catch): Properly indent END CATCH.
	(code_type_catch): Remove adjust kludge (see prog.c).
	* mfd/prog.c (instr_retcatch): Remove 2 args from stack,
	as per env_throw_0.

2009-10-07  Sergey Poznyakoff  <gray@gnu.org.ua>

	Update NEWS

2009-10-06  Sergey Poznyakoff  <gray@gnu.org.ua>

	Bugfix

	* mfd/symbols.c (literal_lookup): Initialize only newly installed
	literals.

	Minor change.

	* mfd/gram.y: Warn about obsolete ways of declaring
	function parameters (hopefully no one uses them by now).
	* tests/etc/ack.rc, tests/etc/catch01.rc,
	tests/farg.at, tests/prec.at, tests/prec01.at: Update

2009-10-05  Sergey Poznyakoff  <gray@gnu.org.ua>

	Improve fixup script generation.

	* mfd/gram.y (pragma_database): Print deprecation warning.
	Issue a fixup statement.

	Improve fixup script generation.

	* mfd/deprecation.c (open_change_conf)
	(close_change_conf): Remove.
	(write_db_config, write_db_config, write_change_conf): Rewrite.
	(add_fixup_command, add_fixup_command_fmt)
	(add_fixup_command_locus): New functions.
	(fixup_create_script): New functions.
	* mfd/gram.y: Issue fix-up statements for every deprecation
	warning.
	* mfd/lex.l ({IDENT} rule): update locus.point along
	with each call to input and unput.
	* mfd/mailfromd.h (parse_require): Take locus as the 2nd
	parameter.
	(open_change_conf,close_change_conf): Remove.
	(fixup_op): New enumeration.
	(add_fixup_command,add_fixup_command_fmt)
	(add_fixup_command_locus, fixup_create_script): New functions.
	* mfd/main.c (set_option): Update.
	(main): Call fixup_create_script instead of close_change_conf.
	* mfd/pp.c (parse_require): Issue a fixup statement.

	Improve locations in diagnostic messages.

	* mfd/deprecation.c (deprecation_warning_locus): New function.
	(deprecation_warning): Use print_parse_message.
	* mfd/gram.y: Improve error diagnostics by using Bison's locations
	feature.
	* mfd/lex.l (advance_line): Set point and leng to 0.
	(YY_USER_ACTION): Set yyloc.
	(keyword): Remove. Rely on YY_USER_ACTION for setting locations.
	(print_parse_message): Change scope of visibility.
	Print column information if location_column_option is set.
	(vparse_warning): Remove.
	* mfd/mailfromd.h (location_column_option): New extern.
	(struct locus): New members: point and leng.
	(LOCUS_EQ): Avoid coredumps on NULL file names.
	(mf_yyltype_t): New typedef.
	(YYLTYPE): New define.
	(vparse_warning): Remove.
	(print_parse_message): New proto.
	(deprecation_warning_locus): New proto.
	* mfd/main.c (location_column_option): New variable.
	(OPTION_LOCATION_COLUMN): New option.
	(options): New option --location-column.
	(parse_opt): Handle OPTION_LOCATION_COLUMN.
	* mfd/pp.c (assign_locus): Reset point and leng.
	* tests/fctx00.at, tests/poll04.at,
	tests/prec.at: Reflect changes in error messages.

2009-10-03  Sergey Poznyakoff  <gray@gnu.org.ua>

	Bugfixes.

	* mfd/gram.y: Remove calls to add_xref.
	* mfd/lex.l (variable_or_const): Call add_xref
	before returning a constant.
	(print_parse_message): Bugfix: pass argument
	to mu_error via "%s", to avoid interpretation of
	% sequences in the formatted message.
	* mfd/prog.h (add_xref): New proto.

	Use of function or built-in name as a prefix operator is deprecated.

	* mfd/gram.y: Issue deprecation warning on use of
	a function or built-in name as a prefix operator.
	* mfd/lex.l (paren_follows): New global.
	* mfd/mailfromd.h (paren_follows): New global.

	* mflib/heloarg_test.mf, mflib/match_rhsbl.mf,
	mflib/strip_domain_part.mf, tests/etc/dns.rc,
	tests/etc/relayed.rc, tests/strings.at: Don't use
	deprecated features.

	* tests/prec.at, tests/prec01.at: Account for the
	new warning.

	Minor change

	* doc/mailfromd.texi: Add new keywords.
	* elisp/mfl-mode.el: Add new keywords.
	* tests/prec01.at: Forgotten to add in 1026a8cc51d8c.

	Implement explicit type casts: TYPE(expr)

	* mfd/gram.y: (atom_expr: T_TYPECAST '(' expr ')'): New rule.
	* mfd/lex.l: New token T_TYPECAST

	Implement explicit concatenation operator (.)

	* mfd/drivers.c (type strcat): A synonym for concat, used
	for implicit string concatenation.
	* mfd/gram.y: Expect 53 shift/reduces.
	(alloc_node, cast_to): extern
	(T_COMPOSE): New token.
	(concat_expr): New %type.
	(concat_expr): New rule.
	(node_type): handle node_type_strcat.
	(create_node_variable, create_node_argcount)
	(create_node_arg, create_node_symbol)
	(create_node_backref): New functions.
	* mfd/lex.l: Rewrite string handling. Strings with
	variable and/or constant substitutions within them are
	handled in one run and a corresponding NODE* is composed
	out of them. That node is then returned as T_COMPOSE
	token.
	* mfd/prog.h (alloc_node, cast_to)
	(create_node_variable, create_node_argcount)
	(create_node_arg, create_node_symbol)
	(create_node_backref): New protos.

	* mflib/sa.mf, mflib/spf.mf, tests/alias.at,
	tests/curmsg.at, tests/etc/ack.rc, tests/etc/catch.rc,
	tests/etc/catch01.rc, tests/etc/public.mf,
	tests/hdr-all.at, tests/hdr-cap.at, tests/hdr-count.at,
	tests/hdr-get.at, tests/hdr-gete.at, tests/hdr-getn.at,
	tests/hdr-itr.at, tests/hdr-mul.at, tests/macros.at,
	tests/next01.at, tests/next02.at, tests/prec.at,
	tests/public.at, tests/shadow.at,
	tests/static01.at: Use explicit concatenation.

	* tests/prec01.at: New testcase.
	* tests/Makefile.am, tests/testsuite.at: Add prec01.at

	Fix coredumps on regex used with -O0

	* mfd/drivers.c (save_regexp): New function.
	(optimize_type_regcomp): Call save_regexp.
	(code_type_regcomp): Call save_regexp if regind == -1.
	* mfd/gram.y (input rule): Call regex_layout before
	or after compile_tree, depending on whether optimization
	is on.
	* tests/regopt0.at: New test.
	* tests/Makefile.am, tests/testsuite.at: Add regopt0.at

2009-10-02  Sergey Poznyakoff  <gray@gnu.org.ua>

	Minor changes.

	* mfd/gram.y: Improve module ending rules.
	* mfd/lex.l: Add more comments.
	(lex_buffer_push): Rename to inctx_push.
	(lex_buffer_pop): Rename to inctx_pop.
	* mfd/mailfromd.h (module_push): Remove.
	* mfd/symbols.c: Mark module_ functions
	as statics.

	Treat unquoted literals as errors.

	* mfd/gram.y: Treat unquoted literals as errors.
	* doc/mailfromd.texi: Comment out the description of
	unquoted literals and add a FIXME.

	Minor change (bison-dependent).

	* mfd/gram.y: Uniformly begin all token names with T_.
	Provide symbolic strings to improve error diagnostics.
	* mfd/lex.l: Uniformly begin all token names with T_.
	* tests/module04.at, tests/module06.at,
	tests/static02.at: Reflect the above changes.

	Fix scoping in imported modules.

	When handling `import' (`require') statements, mailfromd
	in some cases could have closed and popped the module lexical
	context before finishing processing its actual contents. In
	particular, if a module ended with a variable or constant
	declaration (e.g. status.mf), this declaration would end up
	in the symbol table of the importing compilation unit. This
	happened because yywrap, triggered by EOF on the module unit,
	caused immediate popping of the lexical contents, whereas
	the parser still had some unreduced symbols on its stack. The
	actual reduction (e.g. of the rule `stmt: CONST value') happened
	after the lexer had supplied next symbol, but by that time the
	original module had already been removed from stack.

	* mfd/gram.y (BYE): New keyword.
	(MODBEG, MODEND): New (pseudo)keywords.
	(input rule): Allow programs to begin with `module'.
	(modcntl): Fix parsing of the imported files.
	* mfd/lex.l (keyword): Rewrite as a macro.
	(INCTX_MODULE,INCTX_HADINPUT): New defines.
	(struct inctx): New member inctx_flags.
	(inctx_flags, emit_token): New statics.
	(lex_new_source): Change semantics of the second argument.
	(YY_USER_ACTION, YY_INPUT, YY_DECL): New defines.
	(module): Warn if module is used in included file, or
	if there were some statements before it.
	(yylex): New function.
	(lex_close_source): Error checking: yyin may be NULL on
	entry.
	(lex_drain_input, lex_bye): New functions.
	(yywrap): Set emit_token to MODEND if within a module.
	(LEX_NONE, LEX_ONCE, LEX_MODULE): New defines.
	(lex_bye, lex_drain_input): New functions.
	* mfd/pp.c (begin_module, parse_include): Update calls to lex_new_source.
	* mfd/status.mfi: Declare a module.

	* mflib/Makefile.am (install-data-local): Remove.
	* mflib/dns.mf4, mflib/gettext.mf, mflib/heloarg_test.mf,
	mflib/is_ip.mf, mflib/localdomain.mf, mflib/match_cidr.mf,
	mflib/match_dnsbl.mf, mflib/match_rhsbl.mf, mflib/rateok.mf,
	mflib/revip.mf, mflib/sa.mf, mflib/safedb.mf4,
	mflib/sieve.mf, mflib/sockmap.mf, mflib/spf.mf,
	mflib/strip_domain_part.mf, mflib/valid_domain.mf,
	mflib/verp.mf: Declare as modules.

	Fix memory overrun.

	* lib/libmf.h (syment_alloc_hook, syment_free_hook): Remove.
	(symtab_create): New argument `alloc_fun'.
	* lib/symtab.c (syment_alloc_hook, syment_free_hook): Remove.
	(struct symtab): New members syment_alloc_fun, syment_free_fun.
	Remove free_syment.
	(syment_free): Take pointer to the owner struct symtab in
	first argument.
	(syment_alloc): Rewrite.
	(symtab_free_syment): Rewrite.
	(symtab_create): New argument `alloc_fun'.
	* mfd/symbols.c (alloc_entry): Fix memory overrun.
	Fill allocated memory with zeros.
	(xsymtab_create): Reflect changes to symtab_create.
	(module_init, init_symbols): Likewise.

2009-10-01  Sergey Poznyakoff  <gray@gnu.org.ua>

	Update .gitignores.

	Add basic test cases for the module system.

	* configure.ac: Remove check for mu_get_auth.
	* mfd/bi_other.m4 [!HAVE_MU_GET_AUTH]: Remove.
	* lib/libmf.h (transform_compile): Take 2 arguments.
	* lib/transform.c (parse_transform_expr)
	(transform_compile): Take regcomp flags in an additional
	argument.
	* mfd/symbols.c (make_transform_rule): Pass regex_flags
	to transform_compile.
	(import_cpyfun): Make sure new symbol has valid locus.
	* mfd/lex.l: New built-in constant __module__.

	* tests/module01.at, tests/module02.at,
	tests/module03.at, tests/module04.at,
	tests/module05.at, tests/module06.at,
	tests/public.at, tests/static01.at,
	tests/static02.at: New testcases.

	* tests/Makefile.am: Add new tests.
	* tests/testsuite.at: Likewise.

	* tests/etc/public.mf, tests/etc/static.mf,
	tests/etc/mod1.mf, tests/etc/mod2.mf: New test programs.
	* tests/etc/Makefile.am (RCFILES): Add new test programs.

2009-09-30  Sergey Poznyakoff  <gray@gnu.org.ua>

	Improve handling of deprecated features.

	* mfd/deprecation.c: New file.
	* mfd/Makefile.am (mailfromd_SOURCES): Add deprecation.c.

	* mfd/mailfromd.h (vparse_warning): New proto.
	(deprecation_warning, final_deprecation_warning)
	(enable_deprecation_warnings, legacy_script_warning)
	(open_change_conf, write_change_conf, write_db_config)
	(close_change_conf): New functions.
	* mfd/main.c: Move `change_conf' functions to deprecation.c.
	* mfd/gram.y (parse_program): Emit final
	deprecation warning if MAILFROMD_DEPRECATION is
	set to no.
	* mfd/lex.l: Use deprecation_warning for its
	purpose.
	(vparse_warning): New function.

	Fix handling of #require.

	* mfd/gram.y (%union): New member `string'.
	(SHARPREQR): New token.
	(require: SHARPREQR): New rule.
	* mfd/lex.l: Fix handling of #require.
	* po/POTFILES.in: Add missing files.

	Fix --dump-code and --dump-tree output.

	* NEWS: Update.
	* configure.ac: Bump version number: 5.9.90
	* lib/libmf.h (symtab_count_entries): New proto.
	* lib/symtab.c (symtab_count_entries): New function.
	* mfd/gram.y (function_enumerator): Process only functions
	from one module.
	(print_syntax_tree): Iterate over all modules.
	* mfd/mailfromd.h (collect_modules): New proto.
	* mfd/prog.c (function_counter): Change closure type.
	Process only functions from one module.
	(function_lister): Process only functions from one module.
	(print_code): Iterate over all modules.
	* mfd/symbols.c (collect_modules): New function.
	(free_module_entry): Pass file name to "top" module creation
	call.
	* mflib/safedb.mf4: Require status, not "#include" it.

	Clean-up file inclusion code.

	* configure.ac: Call AC_PROG_LN_S.
	* mfd/Makefile.am: Rename status.mfh to status.mf
	(install-data-local): Create a link to status.mfh,
	for compatibility.
	* mfd/gram.y (print_syntax_tree): Test attempt to
	print all modules.
	* mfd/mailfromd.h (struct module): New member
	incl_sources.
	* mfd/pp.c (incl_sources): Removed.
	(source_lookup): Search in top_modules->incl_sources.
	(parse_include): Remove include_once kludge. Both
	include and include_once are now handled by
	lex_new_source, as previously.
	* mfd/symbols.c (import_confun): Remove spurious diagnostics.
	(module_init): Initialize all members.
	(module_free): Destroy incl_sources.
	* mflib/sieve.mfh: Rename to sieve.mf
	* mflib/Makefile.am: Rename sieve.mfh to sieve.mf
	(install-data-local): Create a link to sieve.mfh,
	for compatibility.
	* tests/Makefile.am: Remove status.mfh to status.mf

	* mflib/match_cidr.mf, mflib/match_dnsbl.mf,
	mflib/match_rhsbl.mf, mflib/sockmap.mf,
	tests/etc/catch.rc, tests/etc/catch01.rc,
	tests/etc/poll-1.rc, tests/etc/poll.rc: Use require
	instead of #include_once.

	Minor changes.

	* mfd/gram.y (constdecl): Allow static/public qualifiers
	before const.
	* mfd/mailfromd.h (define_constant): Add `flags' argument.
	(module_push, advance_line): New prototypes.
	* mfd/symbols.c (define_constant): Take `flags' argument.
	* mflib/Makefile.am (check-am): New rule.
	* mflib/match_dnsbl.mf: Include status.mfh
	* mflib/match_rhsbl.mf: Likewise.

2009-09-29  Sergey Poznyakoff  <gray@gnu.org.ua>

	Bugfixes.

	* mfd/main.c (add_pp_option): Initialize ext_pp_options.
	* lib/version.c: Update copyright year.

	Implement `static' and `public' qualifiers.

	* mfd/gram.y: Handle new keywords: STATIC PUBLIC MODULE
	(moddecl): New rule.
	(decl): Allow qualifiers before FUNC
	(vardecl): Allow qualifiers before TYPE.
	(qualifiers): New rule.
	* mfd/lex.l (static, public, module): New keywords.
	(symbit_to_qualifier): New function.
	* mfd/mailfromd.h (VAR_*): Rename to SYM_*
	(SYM_STATIC, SYM_PUBLIC): New bitmasks.
	(struct mf_symbol): New member `flags'.
	(struct variable): Remove flags.
	(struct module): New members `dclname' and `flags'.
	(symbit_to_qualifier): New proto.

	* mfd/bi_vars.m4, mfd/drivers.c, mfd/pp.c,
	mfd/snarf.m4: Reflect the above changes.
	* mfd/symbols.c (alloc_entry): Properly initialize struct mf_symbol.
	(import_selfun): Additional conditions.

	* mflib/dns.mf4, mflib/gettext.mf, mflib/heloarg_test.mf,
	mflib/is_ip.mf, mflib/match_cidr.mf, mflib/match_dnsbl.mf,
	mflib/match_rhsbl.mf, mflib/revip.mf, mflib/sa.mf,
	mflib/sockmap.mf, mflib/spf.mf, mflib/strip_domain_part.mf,
	mflib/valid_domain.mf: Fix indentation. Use `static' as appropriate.

	* doc/mailfromd.texi: Document new keywords.
	* elisp/mfl-mode.el (mfl-keywords): Add new keywords.

	Implement module system.

	* lib/transform.c: New file.
	* lib/Makefile.am (libmf_a_SOURCES): Add transform.c
	* lib/libmf.h (struct syment): Remove field `data',
	add `refcnt'.
	(syment_free_hook): New extern.
	(symtab_lookup_or_install_entry): New function.
	(symtab_free): Rename to symtab_destroy.
	(symtab_selfun, symtab_errfun, symtab_confun)
	(symtab_cpyfun): New typedefs.
	(symtab_import): New proto.
	(transform_t): New typedef.
	(transform_append_t, transform_reduce_t): New typedefs.
	(transform_error_string, transform_compile)
	(transform_free, transform_string): New functions.
	* lib/symtab.c (syment_alloc): New function.
	(symtab_free_syment): Honor reference count.
	(symtab_rehash): Bugfix.
	(symtab_get_index): New function.
	(symtab_lookup_or_install): Rewrite using symtab_get_index.
	(symtab_lookup_or_install_entry): New function.
	(symtab_create): Allocate tab.
	(symtab_free): Rename to symtab_destroy.
	(symtab_import): New function.

	* mfd/gram.y: Move inclusion of obstack.h to mailfromd.h
	Reflect changes to symbol tables.
	(%union): New member import_rule_list
	(REQUIRE, IMPORT) New tokens.
	(require): New rule.
	(builtin_variable_install): Move to symbols.c
	* mfd/lex.l: Move inclusion of obstack.h to mailfromd.h
	(lex_buffer_pop): Do not increment line number after popping.
	It is done before pushing the context.
	(lex_new_source_0): Argument is const.
	(lex_new_source): First argument is const.
	(advance_line): External.
	(#require): Deprecated.
	(require,import): New keywords.
	(from): New keyword (was in <ONBLOCK> before).
	(yywrap): Pop module.
	* mfd/mailfromd.h: Include obstack.h
	(SYMENT_STRUCT): New define.
	(struct mf_symbol): New structure.
	(struct builtin, struct literal, struct pragma): Use SYMENT_STRUCT.
	(struct function, struct variable)
	(struct constant): Inherit from mf_symbol.
	(stab_module): New extern.
	(stab_function, stab_variable, stab_constant): Remove. These
	are now per-module tables.
	(symbol_resolve_alias): New proto.
	(enum import_type, struct import_rule)
	(struct import_rule_list): New data types.
	(import_rule_create): New function.
	(enum module_namespace, struct module)
	(struct module_list): New data types.
	(top_module): New extern.
	(MODULE_SYMTAB, TOP_MODULE_SYMTAB): New defines.
	(require_module): New function.
	(assign_locus, lex_new_source): Change signature.
	* mfd/pp.c: Move inclusion of obstack.h to mailfromd.h
	(begin_module): New function.
	(parse_include): Include_once is synonimous to #require.
	Use begin_module to actually switch contents in this case.
	(parse_require): Call begin_module.
	(require_module): New function.
	(assign_locus): Change signature.
	* mfd/prog.c: Move inclusion of obstack.h to mailfromd.h
	Reflect changes to symbol tables.
	* mfd/symbols.c (alloc_entry): Set refcnt to 1
	(free_entry): New function.
	(import_rule_create, import_rules_free)
	(import_rules_eval): New functions.
	(stab_function, stab_variable, stab_constant): Remove. These
	are now per-module tables.
	(import_builtin_variables, module_import_symbols): New functions.
	(top_module, module_stack): New globals.
	(module_init, module_create)
	(module_free, module_add_submodule)
	(module_has_submodule, module_push)
	(module_pop, set_top_module, pop_top_module): New functions.
	(init_symbols): Set syment_free_hook. Initialize top_module.
	(free_symbols, init_variable)
	(function_lookup_or_install,function_install
	(install_alias, literal_lookup, constant_lookup): Reflect changes to
	symbol tables. Handle aliases.
	(builtin_variable_install): New function (from gram.y)

	* mfd/db.c, mfd/engine.c, mfd/main.c,
	mfd/pragma.c, mfd/spf.c : Move inclusion of obstack.h to mailfromd.h

	* mfd/drivers.c: Reflect changes to symbol tables.

	* etc/mailfromd.mf, mflib/heloarg_test.mf,
	* mflib/match_dnsbl.mf, mflib/match_rhsbl.mf,
	* mflib/spf.mf, mflib/valid_domain.mf,
	tests/etc/catch.rc, tests/etc/catch01.rc,
	tests/etc/cidr.rc: Use `require', without #.

2009-09-28  Sergey Poznyakoff  <gray@gnu.org.ua>

	Rewrite symbol tables.

	* lib/symtab.c: New file.
	* lib/Makefile.am (libmf_a_SOURCES): Add symtab.c
	* lib/libmf.h: Add symtab prototypes and declarations.
	* mfd/Makefile.am (mailfromd_SOURCES): Replace symtab.c
	with symbols.c.
	* mfd/symtab.c: Removed.
	* mfd/symbols.c: New file (partly based on symtab.c).
	* mfd/db.c (db_format_enumerate): Change signature.
	* mfd/gram.y: Replace calls to symbol_enumerate with
	symtab_enumerate.
	(forget_autos): Update calls to variable_replace.
	Use symtab_remove directly, instead of the removed
	function find_and_remove.
	* mfd/lex.l (variable_or_const): Rewrite.
	* mfd/mailfromd.h (struct function): New member `alias'.
	Remove owner.
	(SYM_ macros): Remove.
	(symbol_enumerator_t, symbol_enumerate): Remove.
	(stab_builtin, stab_function, stab_variable)
	(stab_literal, stab_constant, stab_pragma): New externs.
	(init_symbols): New proto.
	(variable_replace): Change signature.
	(dbfmt_enumerator_t): New typedef.
	(db_format_enumerate): Change signature.
	* mfd/main.c (db_fixup_name_enumerator)
	(db_proc_enumerator, db_format_enumerator): Change signatures.
	(main): Call init_symbols.
	* mfd/prog.c (function_counter, function_lister): Ignore aliases.
	(print_code): Use symtab_enumerate.
	* po/POTFILES.in: Update.
	* NEWS: Update.

2009-09-23  Sergey Poznyakoff  <gray@gnu.org.ua>

	Add milter connection patch for Sendmail-8.14.3

	* etc/sendmail-8.14.3.connect.diff: New file.
	* doc/mailfromd.texi: Document new patch.

2009-09-22  Sergey Poznyakoff  <gray@gnu.org.ua>

	Minor changes.

	* doc/upgrade.texi: Document MAILFROMD_DEPRECATION.
	* mfd/main.c: Remove spurious semicolon.
	* mfd/pp.c (pp_extrn_start): Print debug info on level >= 2.
	(preprocess_input): Add missing return.

2009-09-21  Sergey Poznyakoff  <gray@gnu.org.ua>

	Rewrite preprocessing algorithm.

	The internal preprocessor is removed. Inclusion directives
	(#include, #include_once and #require) are handled directly
	in the lexer. External preprocessor is called for each
	input file separately. This gives a lot of advantages:
	  1. The m4 namespace is kept clean. No unwanted m4 definitions
	  propagate between the files.
	  2. No need to fixup input line numbers.
	  3. End of each compilation unit is handled separately,
	  which allows to implement static variables.
	  4. Cleaner code.

	* mfd/lex.l (struct inctx): New struct.
	(input_file_id): New variable
	(YY_INPUT): Remove.
	(inctx_locate)
	(lex_buffer_push, lex_buffer_pop): New functions.
	(lex_new_source_0, lex_new_source): New functions.
	(lex_close_source): New function.
	(input_line): Remove variable.
	(is_stdin, source): Remove functions.
	(yywrap): Rewrite.
	(%% - grammar): Remove line number correction.
	Hanlde #include, #include_once and #require
	directives in place.
	* mfd/mailfromd.h (DEF_EXT_PP): New define (from main.c).
	(ext_pp_options, ext_pp_options_given): New externs.
	(struct input_file_ident): New declaration (from pp.c).
	(pp_extrn_start, pp_extrn_shutdown)
	(parse_include, parse_require): New prototypes.
	(pp_fill_buffer, source, pp_make_argcv)
	(pp_init, pp_done): Remove.
	(pp_extrn_start, pp_extrn_shutdown): Change proto.
	(preprocess_input): Change proto.
	(alloc_ext_pp, assign_locus, lex_new_source): New protos.
	* mfd/main.c (DEF_EXT_PP): Move to mailfromd.h
	(alloc_ext_pp): Incorporate all -I options. Move function
	to pp.c.
	(main): Update call to preprocess_input.
	* mfd/pp.c: Remove internal preprocessor functions.
	(parse_include, parse_require): Use lex_new_source to
	actually load the file.
	(pp_extrn_start, pp_extrn_shutdown, preprocess_input): Rewrite.

	* mfd/gram.y (parse_program): Call lex_new_source.

2009-09-19  Sergey Poznyakoff  <gray@gnu.org.ua>

	Bugfix.

	* pies/pies.c (_cb_action, _cb_redir): Fix arguments to
	mu_cfg_format_error.

2009-09-18  Sergey Poznyakoff  <gray@gnu.org.ua>

	Minor changes.

	* NEWS: Document milter_client_* and milter_server_*
	builtin variables.
	* Makefile.am: Silent ChangeLog rule.

	Improve testsuite.

	* tests/testsuite.at (MF_CHECK_PROG): New macro.
	(MF_CHECK_TEXT, MF_RUN_TEXT): Unify calls to mailfromd.

	* tests/accept.at, tests/arg.at, tests/bctx00.at,
	tests/bctx01.at, tests/curmsg.at, tests/declvar.at,
	tests/farg.at, tests/fctx00.at, tests/fctx01.at,
	tests/macros.at, tests/ml.at, tests/numrcpt.at,
	tests/prec.at, tests/reject.at, tests/shadow.at,
	tests/strings.at, tests/tempfail.at: Rewrite
	giving the filter script in place.

	* tests/ack.at, tests/catch.at, tests/catch01.at,
	tests/cidr1.at, tests/cidr2.at, tests/cidr3.at,
	tests/cond01.at, tests/cond02.at, tests/cond03.at,
	tests/cond04.at, tests/cond05.at, tests/cond06.at,
	tests/invcidr.at, tests/invcidr2.at, tests/invip.at,
	tests/invip2.at, tests/relayed01.at, tests/relayed02.at,
	tests/switchn1.at, tests/switchn2.at, tests/switchn3.at,
	tests/switchn4.at, tests/switchs1.at, tests/switchs2.at,
	tests/switchs3.at, tests/switchs4.at: Replace AT_CHECK
	with the equivalent MF_CHECK_PROG

	* tests/hasmx.at, tests/hostname.at, tests/poll.at,
	tests/poll01.at, tests/poll02.at, tests/poll03.at,
	tests/rescname.at, tests/resolve.at: Unify calls to mailfromd

	* tests/hdr-cap.at, tests/hdr-mul.at,
	tests/ismx.at: Use EX_ codes instead of hardcoded ints.

	* tests/etc/accept.rc: Remove.
	* tests/etc/arg.rc: Remove.
	* tests/etc/farg.rc: Remove.
	* tests/etc/macros.rc: Remove.
	* tests/etc/ml.rc: Remove.
	* tests/etc/numrcpt.rc: Remove.
	* tests/etc/prec.rc: Remove.
	* tests/etc/reject.rc: Remove.
	* tests/etc/sa01.rc: Remove.
	* tests/etc/sa02.rc: Remove.
	* tests/etc/sa03.rc: Remove.
	* tests/etc/sa04.rc: Remove.
	* tests/etc/shadow.rc: Remove.
	* tests/etc/size.rc: Remove.
	* tests/etc/strings.rc: Remove.
	* tests/etc/tempfail.rc: Remove.
	* tests/etc/var.rc: Remove.
	* tests/etc/Makefile.am (RCFILES): Remove the above files.

2009-09-17  Sergey Poznyakoff  <gray@gnu.org.ua>

	Bugfix

	* mfd/lex.l: Fix handling of variable references
	starting on new line in here-documents.
	* tests/ml01.at: New testcase.
	* tests/Makefile.am, tests/testsuite.at: Add ml01.at.

	Bugfix

	* mfd/main.c (alloc_ext_pp): Fix coredump.

	Fix ismx and getmx built-ins.

	* mfd/dns.c (comp_ipbuf): Remove.
	(getmxip): Change return type.
	* mfd/mailfromd.h (getmxip): Change prototype.
	* mfd/prog.c (dump_result): Fix output.
	* mfd/bi_dns.m4 (getmx): Rewrite using new getmxip.
	(primitive_ismx): Likewise.
	* NEWS: Update.
	* doc/mailfromd.texi (getmx): Update description.

	Fix --no-preprocess.

	* mfd/main.c (ext_pp_options_given): New variable.
	(alloc_ext_pp): Use ext_pp_options_given
	to decide whether to allocate ext_pp.
	(parse_opt): Set ext_pp_options_given if -D or -U were
	used.

2009-09-15  Sergey Poznyakoff  <gray@gnu.org.ua>

	Fix testsuite.

	* tests/testsuite.at (MAILFROMD_OPTIONS): New definition
	(MF_CHECK_TEXT, MF_RUN_TEXT, AT_MTA_TEST_X)
	(AT_MTA_TEST): Always pass MAILFROMD_OPTIONS to mailfromd.
	(AT_WITH_MAILFROMD_OPTIONS): Always prepend $MFOPTS $MFADDOPTS

	Fix return from gacopyz_client_sockname

	Bugfix.

	* gacopyz/context.c (gacopyz_server_sockname)
	(gacopyz_client_sockname): Tolerate ctx==NULL.
	* gacopyz/gacopyz.h (gacopyz_client_sockname): change
	return type to int.
	* mfd/engine.c (priv_get): Check return from
	gacopyz_client_sockname.

	New variables and functions for identifying milter client and server addresses.

	* gacopyz/gacopyz_priv.h (struct smfi_str): New members addr and
	addrlen.
	* gacopyz/context.c (gacopyz_server_sockname)
	(gacopyz_client_sockname): New functions.
	(gacopyz_context_loop): Get connection source address (sockaddr)
	and its length as arguments. Store them in ctx.
	(gacopyz_handle_connection): Pass connection source address and its length
	to gacopyz_context_loop.
	* gacopyz/gacopyz.h (gacopyz_context_loop): Remove useless prototype.
	(gacopyz_client_sockname, gacopyz_server_sockname): New prototypes.

	* mfd/bi_vars.m4 (milter_client_family, milter_client_address)
	(milter_server_family, milter_server_address): New built-in variables.
	(define_milter_address): New macro.
	* mfd/engine.c (priv_get): Initialize milter_client_* and milter_server_*
	MFL variables.
	(MFAM_STDIO, MFAM_UNIX, MFAM_INET): Move to mailfromd.h
	* mfd/mailfromd.h (MFAM_STDIO, MFAM_UNIX, MFAM_INET): New defines.
	(set_milter_client_address)
	(set_milter_server_address): New prototypes.
	* mfd/snarf.m4 (MF_VAR_SET_STRING): Optimize the use of $2.

2009-09-11  Sergey Poznyakoff  <gray@gnu.org.ua>

	Improve configuration and creation of mailfromd-newconf.sh  script.

	* NEWS: Update.
	* configure.ac: Produce xz and lzma compressed distributions.
	* doc/mailfromd.texi: Update.
	* mfd/main.c (struct option_cache): New member "conffn".
	(option_cache): Set conffn for negative-, positive-, and
	rates-expire-interval.
	(set_option): Prefer conffn over write_change_conf.
	(cb_negative_expire_interval, cb_positive_expire_interval)
	(cb_rates_expire_interval): Remove.
	(mf_cfg_param): Remove positive-expire-interval,
	negative-expire-interval and rates-expire-interval.

2009-09-03  Sergey Poznyakoff  <gray@gnu.org.ua>

	Improve the upgrade conversion script. Update docs.

	* NEWS: Update.
	* doc/Makefile.am (check-config, check-sub-config): New goals.
	(all-check-docs): Depend on the above.
	* doc/mailfromd.texi: Document syslog-async configuration
	statement.
	* doc/pragma-option.texi: Move the ignore block to doc/mailfromd.texi.
	* doc/upgrade.texi (5x0-600): Describe the changes and the
	proposed conversion procedure.
	* mfd/main.c (rename_legacy_file): new variable.
	(close_change_conf): Improve the created script.
	(cb_db_expire_interval): Bugfix.
	(database_section_param): File statement is mu_cfg_callback.
	(main): Set rename_legacy_file if necessary.

	Minor fixes.

	* doc/pragma-option.texi: Fix xrefs to conf-database.

	Define the `database' configuration statement. Document new configuration.

	* doc/pragma-option.texi: New file.
	* doc/pragma-database.texi: New file.
	* doc/Makefile.am (mailfromd_TEXINFOS): Add new files.
	* doc/mailfromd.texi: Document configuration file.
	* doc/upgrade.texi (5x0-600): New section.
	* mfd/gram.y (pragma_database): Add calls to write_db_config.
	* mfd/main.c (write_db_config): New function.
	(close_change_conf): Handle 'G' records.
	(cb_relay_file): Remove duplicate function.
	(cb_db_expire_interval, cb_db_positive_expire_interval)
	(cb_db_negative_expire_interval): New functions.
	(database_section_param): New configuration file statement:
	"database".
	(database_cfg_init): New function.
	(main): Call database_cfg_init.
	* mfd/mailfromd.h (write_db_config): New prototype.

2009-09-02  Sergey Poznyakoff  <gray@gnu.org.ua>

	Expand built-in constants in pragma arguments.

	* mfd/lex.l: Allow %{...} form for built-in constants.
	(builtin_const_value): New function.
	(builtin_const): do not expect null-terminated string as input.
	* mfd/mailfromd.h (builtin_const_value): New function.
	* mfd/pragma.c: (nextword, expand_builtin)
	(find_double_underscore, is_delim)
	(expand_string, expand_text): New functions.
	(parse_pragma): Expand built-in constants in
	pragma string.

2009-09-01  Sergey Poznyakoff  <gray@gnu.org.ua>

	Minor change.

	* mfd/main.c (close_change_conf): Fix warning message.

	Implement relayed-domain-file configuration statement.

	* mfd/main.c: Implement relayed-domain-file configuration statement.

	Mark all `#pragma option's as deprecated. Create a script for fixing them.

	* mfd/main.c (option_deprecated): Remove.
	(open_change_conf,write_change_conf)
	(close_change_conf): New functions.
	(config_statement_type): New function.
	(MFD_OPTION_DEPRECATED): Remove. Not used any more.
	(option_cache): All options are deprecated.
	(enable_pragma_deprecation_warning): New function.
	(set_option): Create a script for fixing
	configuration files.
	(main): Call close_change_conf.
	(mf_cfg_param): New statements: expire-interval,
	positive-expire-interval, negative-expire-interval,
	rates-expire-interval.
	* etc/mailfromd.mf: Remove deprecated pragmas.

	Minor change

	* mfd/bi_io.m4 (open): Default open mode is read-only.

2009-08-31  Sergey Poznyakoff  <gray@gnu.org.ua>

	Begin separation of configuration from filter script.

	The purpose is to separate compilation entities (filter script
	and files included therein), from the actual runtime configuration.
	This changeset introduces a separate mailfromd configuration file,
	located in SYSCONFDIR/mailfromd.conf. The filter script is called
	mailfromd.mf and located in SYSCONFDIR as well (but perhaps it
	should better be located elsewhere?) The old script name,
	mailfromd.rc, was a misnomer since its suffix suggested that the
	file was a configuration file, which as a matter of fact it was
	not. However, if this "legacy" file is present and readable, it is
	used and a warning message is issued.

	All `#pragma option' statements are considered deprecated, and explicit
	warnings are issued if they are used in the script file.

	* NEWS: Update.
	* mfd/appinit.c: New file.
	* mfd/Makefile.am (mailfromd_SOURCES): Add appinit.c
	* mfd/gram.y (pragma_option): Update call to set_option.
	Pass NULL locus to initialize_variable.
	(initialize_variable): Issue the "variable already initialized"
	warning only if previous initialization was in a source file,
	not from command line or a configuration statement.
	* mfd/mailfromd.h (DEFAULT_SCRIPT_FILE): Change definition.
	(LEGACY_SCRIPT_FILE): New define.
	(DEFAULT_CONFIG_FILE): New define.
	(set_option): Takes four arguments.
	(mu_app_rcfile): New extern.
	(mfd_app_init): New prototype.
	* mfd/main.c (need_config): Rename to need_script.
	(struct option_cache): Rename `cumulative' to `flags'.
	New member `confkw'.
	(set_option): Fourth argument specifies whether the
	function was called from a pragma option handler.
	(set_cmdline_option): New define.
	(struct arguments): New data type.
	(init_arguments, flush_trace_module)
	(flush_arguments, destroy_trace_item): New functions.
	(parse_opt): Use set_cmdline_option to set overridable
	options.
	(cb_trace_program): New callback.
	(mf_cfg_param): New statements: syslog-async, trace-actions,
	trace-program, transcript.
	(main): Use mfd_app_init instead of mu_app_init. Initialize
	mu_app_rcfile beforehand.
	Use legacy filter script (mailfromd.rc), if present.
	* mfd/prog.c (enable_module_trace): take 2 args, the 2nd one
	specifying the length of the first.
	(disable_module_trace): Likewise.
	(toggle_prog_trace): New function.
	(enable_prog_trace,disable_prog_trace): Rewrite using
	toggle_prog_trace.
	* tests/atlocal.in (MFADDOPTS): New variable.
	(checkstatedir): Define MFADDOPTS.
	(mailfromd_start): Pass $MFADDOPTS to the mailfromd invocation.
	* tests/etc/config.in: Remove.
	* tests/etc/Makefile.am: Remove config.in
	* tests/etc/dns.rc: Remove inclusion of config.rc
	* tests/etc/greylist-ct.rc: Likewise.
	* tests/etc/greylist.rc: Likewise.
	* tests/greylist-ct.at: Likewise.
	* tests/hasmx.at, tests/hostname.at, tests/ismx.at,
	tests/rescname.at, tests/resolve.at, tests/testsuite.at: Pass
	$MFADDOPTS to mailfromd invocations.
	* tets/invcidr.at: update stderr expectation
	(see changes to initialize_variable in gram.y)
	* tests/invcidr2.at: Likewise.
	* etc/mailfromd.rc: Rename to etc/mailfromd.mf
	* etc/Makefile.am: Rename mailfromd.rc to mailfromd.mf.

2009-08-28  Sergey Poznyakoff  <gray@gnu.org.ua>

	Update tests/.gitignore

	Fix handling of Milter abort commands. Introduce "precious" variables.

	* mfd/engine.c (mlfi_abort): Call env_init_dataseg and
	reset md->helostr.
	* mfd/gram.y (variable_count): Initialize to 0.
	(precious_count): New variable.
	(PRECIOUS): New token.
	(vardecl): Opional qualifier may appear before data
	type.
	(builtin_variable_install): Take 4th argument: addrptr.
	(_ds_variable_fun): Remove function.
	(_ds_variable_count_fun, _ds_variable_fill_fun): New
	functions.
	(vtab_comp): New function.
	(dataseg_layout): Revamp computation of variable
	offsets in the data segment. Ensure all precious variables
	are placed after non-precious ones.
	Set dvarsize to the number of the latter.
	* mfd/lex.l: Recognize the `precious' keyword.
	* mfd/mailfromd.h (VAR_PRECIOUS): New constant.
	(struct variable.addrptr): New member.
	(builtin_variable_install): Change proto.
	(env_init_dataseg): New proto.
	* mfd/prog.c (dvarsize): New global.
	(env_init_dataseg): New function.
	(init_dataseg): Take 2 arguments.
	* mfd/prog.h (dvarsize): New extern.
	* mfd/snarf.m4 (MF_VAR): Optional third argument gives
	additional flags.
	* mfd/symtab.c (init_variable): Initialize addrptr.
	* mtasim/mtasim.c (get_input_line): Call add_history
	before adding \n to the string.
	(smtp): Call gacopyz_srv_abort in reaction to RSET.
	* mfd/bi_vars.m4 (ehlo_domain,mailfrom_address): Mark
	as precious.

	* tests/rset.at: New file.
	* tests/Makefile.am: Add rset.at.
	* tests/testsuite.at (AT_MTA_TEST_FILTER_SCRIPT): Fix
	definition.
	Include rset.at.

	* NEWS: Update.
	* configure.ac: Version 5.2.90
	* doc/mailfromd.texi: Document `precious' keyword.

2009-08-27  Sergey Poznyakoff  <gray@gnu.org.ua>

	Fix diagnostic and help messages.

	1. Option descriptions in `--help' output do not constitute
	   conceptual sentences. Therefore, they should not begin
	   with a capital letter, nor end with a final point.
	2. According to standards.texi, a diagnostic message in a
	   non-interactive program "should not begin with a capital letter
	   when it follows a program name and/or file name, because that
	   isn't the beginning of a sentence.  (The sentence conceptually
	   starts at the beginning of the line.)  Also, it should not end
	   with a period."

	Affected files:

	* gacopyz/gacopyz.c
	* gacopyz/proc.c
	* gacopyz/server.c
	* gacopyz/smfi.c
	* mfd/bi_db.m4
	* mfd/bi_dns.m4
	* mfd/bi_io.m4
	* mfd/bi_ipaddr.m4
	* mfd/bi_mail.m4
	* mfd/bi_other.m4
	* mfd/bi_poll.m4
	* mfd/bi_sa.m4
	* mfd/bi_string.m4
	* mfd/cache.c
	* mfd/db.c
	* mfd/dnscache.c
	* mfd/drivers.c
	* mfd/engine.c
	* mfd/gram.y
	* mfd/lex.l
	* mfd/main.c
	* mfd/mu_dbm.c
	* mfd/optab.opc
	* mfd/prog.c
	* mfd/rate.c
	* mfd/symtab.c
	* mtasim/mtasim.c
	* mtasim/openat-die.c
	* pies/pies.c
	* pies/progman.c
	* pmult/pmult.c
	* smap/smap.c
	* tests/ashadow.at
	* tests/bctx00.at
	* tests/fctx00.at
	* tests/hdr-gete.at
	* tests/invcidr.at
	* tests/invcidr2.at
	* tests/shadow.at

	Version 5.2

	* NEWS, configure.ac: Raise version number.

	Minor fixes.

	* mfd/main.c (parse_opt): Add missing break.
	(cb_include_path): Fix use of improper variable
	in MU_CFG_LIST branch.
	* am/aggr.m4 (IU_CHECK_MEMBER): Remove improper use of dnl.
	* doc/Makefile.am (check-builtins, check-mflib): Do not
	split sed expressions over multiple lines: Makefile format
	cannot handle it properly.
	* doc/mailfromd.texi: Update.
	* bootstrap: Do not apply `silentize' to gnu/gnulib.mk. Latest
	gnulib takes care of it itself.

2009-08-18  Sergey Poznyakoff  <gray@gnu.org.ua>

	Add mfd/bi_getpw.m4

	Fix definition of `next'.

	* mfd/drivers.c (struct loop_stack): Replace `begjmp' with `nxtjmp'.
	(enter_loop): Reflect this.
	(code_type_next): Likewise.
	(code_type_loop): Rewrite jump fixup for `next' chain.

	* tests/next01.at, tests/next02.at: New testcases.
	* tests/Makefile.am: Add next01.at and next02.at
	* tests/testsuite.at: Likewise.

	* NEWS, doc/mailfromd.texi: Update

	Implement getpw.* interfaces

	* mfd/bi_getpw.m4: New file.
	* mfd/Makefile.am (M4_FILES): Add bi_getpw.m4
	* doc/Makefile.am (check-builtins): Take into
	account @deftypefnx
	* NEWS, doc/mailfromd.texi: Update

	Bugfixes

	* mfd/bi_io.m4 (read): Add terminating zero.
	* mflib/match_dnsbl.mf (match_dnsbl): Return
	0 if address is not resolved.
	* mflib/sockmap.mf (sockmap_single_lookup): Fix typo.

	Improve conditional building of pmult.

	* configure.ac (PMULT_COND): New condition
	(ENABLE_PMULT): Rename subst variable.
	* pmult/Makefile.am: Remove subst variable.
	* Makefile.am (SUBDIRS): Include pmult conditionally
	(ChangeLog rule): Improve formatting.
	* NEWS: Improve wording.

2009-06-30  Sergey Poznyakoff  <gray@gnu.org.ua>

	Bugfix.

	* mfd/bi_dns.m4 (dns_getname): Missed call to MF_OBSTACK_BEGIN.
	* mfd/prog.c (runtime_stack_trace): Prevent coredump on arriving to
	pc == 0.

2009-06-29  Sergey Poznyakoff  <gray@gnu.org.ua>

	Bugfix.

	* mfd/bi_db.m4 (db_prop_lookup): Fix conditional.
	Reported by Jan Rafaj.

2009-06-26  Sergey Poznyakoff  <gray@gnu.org.ua>

	Implement e_eof exception code (based on patch by Jan Rafaj).

	* doc/mailfromd.texi: Document e_eof.
	* mfd/Makefile.am (status.mfh): Define dependencies.
	* mfd/bi_io.m4 (read_stream_delim): Return number of
	bytes read.
	(read, getdelim, getline): Raise e_eof on EOF.
	* mfd/mailfromd.h (mfe_eof): New exception code.
	* tests/eof.at: New testcase.
	* tests/Makefile.am (TESTSUITE_AT): Add eof.at
	* tests/testsuite.at (MF_RUN_TEXT): New define.
	Include eof.at.

2009-06-17  Sergey Poznyakoff  <gray@gnu.org.ua>

	Minor changes.

	* configure.ac: Check for struct pmilter_S.pmfi_fdmax
	* doc/pmult.texi: Document new pmult configuration statements.
	* pmult/pmult.c: Make pmilter.pmfi_fdmax configurable.

	Bugfixes.

	* pies/pies.c (main): Change main loop to do..while,
	otherwise a signal arriving before entering the loop
	might cause the program to terminate.
	* pmult/pmult.c (internal_macro_p): New function.
	(collect_stage_symbols): Do not report internal
	macros as untranslatable.
	* mfd/gram.y (register_macro): Copy macro name to
	allocated storage.

2009-06-16  Sergey Poznyakoff  <gray@gnu.org.ua>

	Minor fixes.

	* mfd/engine.c (child_start): modify program title.
	* mfd/main.c (environ): extern.

2009-06-14  Sergey Poznyakoff  <gray@gnu.org.ua>

	Fix and improve termination actions in pies.

	* pies/pies.h (MAX_RETURN_CODE): Remove.
	(STATUS_SIG_BIT, STATUS_CODE): New defines
	(struct action): New fields next, nstat, status, command.
	(struct component): Keep singly-linked list of termination
	actions.
	* pies/progman.c (run_command): New function.
	(progman_cleanup): Redo iteration over termination actions.
	* pies/pies.c (return_code_cfg_param): Pass offsets in
	struct component.
	(create_action): Accept signal numbers (SIG.* or SIG\+[0-9]+)
	in tag.
	(return_code_section_parser): Update.
	(pies_check_status): Set *pid before returning pies_status_stale.
	* doc/pies.texi: Document changes.
	* NEWS: Updated.

	Implement socket I/O and sockmaps in mflib.

	* mfd/bi_io.m4 (struct io_stream): Add cleanup and cleanup_data.
	(close_stream): Use those members.
	(read_stream_line): Remove.
	(read_stream_delim): New function.
	(open_program_stream): Add the `env' argument.
	(open_file_stream): Likewise.
	(open_parsed_inet_stream, open_inet_stream): New functions.
	(alloc_streams): Update declaration of opf and the call thereof.
	(open): Prefix @ in first argument designates the connection URL.
	(read,getdelim): New functions.
	* mflib/Makefile.am (inc_DATA): Add sockmap.mf
	* mflib/sockmap.mf: New function.
	* doc/mailfromd.texi: Document new functions.
	* NEWS: Update.

2009-06-10  Sergey Poznyakoff  <gray@gnu.org.ua>

	Reflect program state in the ps(1) output.

	* mfd/main.c (main): Call mf_proctitle_init
	* mfd/engine.c (mlfi_connect, mlfi_helo, mlfi_envfrom)
	(mlfi_envrcpt, mlfi_data, mlfi_header, mlfi_eoh)
	(mlfi_body, mlfi_eom)
	(mlfi_abort, mlfi_close): Call mf_proctitle_format to reflect
	the program state in the ps output.
	* NEWS: Update.

2009-06-05  Sergey Poznyakoff  <gray@gnu.org.ua>

	Bugfixes.

	* pmult/pmult.c (client_block_begin): Set default
	logmask to '>info'
	(pmult_connect): Close gsrv if pmult_std_reply fails.
	This fixes FD leak.
	* gacopyz/gacopyz.c, mfd/dns.h, mfd/dnsbase.c,
	mfd/engine.c, mtasim/mtasim.c, pmult/pmult.c: Add typecasts between
	signed/unsigned char*.

2009-06-04  Sergey Poznyakoff  <gray@gnu.org.ua>

	Version 5.1.91

	* configure.ac, NEWS: Version 5.1.91
	* pmult/pmult.c: Bugfix

	MeTA1-related improvements.

	* configure.ac: Check for pmilter_S.pmfi_thrmax_[sh]. Requires
	28/0009-pmilter-configurable-maxthr.diff.
	* pmult/pmult.c: New configuration statements: max-threads-soft
	and max-threads-hard.
	* pies/pies.c (_cm_include_meta1): Fix coredump on syntax errors
	in meta1.conf.

2009-05-31  Sergey Poznyakoff  <gray@gnu.org.ua>

	Implement `localdomain' function + several improvements.

	* NEWS: Update.
	* etc/mailfromd.rc: Use localdomain to determine the domain
	name.
	Remove the `#error' statement.  Hopefully, this file can be
	used as is.
	* mfd/bi_gethostname.m4 (gethostname): Add an optional argument.
	* mfd/gram.y: Handle function declarations with only optional
	arguments, e.g.: func foo(; string bar)
	(mailfromd_test): Add missing env_init calls.
	* mfd/lex.l: Remove trailing newline before displaying the
	`#error' diagnostics.
	* mflib/localdomain.mf: New file.
	* mflib/Makefile.am (inc_DATA): Add localdomain.mf.
	* mflib/safedb.mf4 (safedb_verbose): New variable.
	(safedbmap, safedbdel): New function.
	(safedbget, safedbput): Verbosely print exceptions caught if
	safedb_verbose is set.

2009-05-23  Sergey Poznyakoff  <gray@gnu.org.ua>

	Add new debugging function.

	* mfd/bi_mudebug.m4: New file.
	* mfd/Makefile.am (M4_FILES): Add bi_mudebug.m4
	* NEWS, doc/mailfromd.texi: Update.

	Minor organizational changes.

	* elisp/Makefile.am (LISPSRC): Add obfemail-mode.el
	* elisp/mfl-mode.el (mfl-mode): Fix docstring.
	* THANKS: Use obfemail mode to encode emails.

2009-05-22  Sergey Poznyakoff  <gray@gnu.org.ua>

	Minor fix

2009-05-21  Sergey Poznyakoff  <gray@gnu.org.ua>

	More work on `silent rules' mode

	* bootstrap (silent_rules_prog): Preserve leading
	whitespace verbatim, when inserting the AM_V variables.
	Suggested by Ralf Wildenhues.
	Optionally insert the definitions of
	AM_DEFAULT_VERBOSITY, AM_V_GEN and AM_V_at: useful for
	po/Makefile.in.in
	(silentize): New function.
	(slurp): Call silentize
	Call silentize on po/Makefile.in.in.
	* doc/Makefile.am, etc/Makefile.am,
	pies/Makefile.am, pmult/Makefile.am,
	tests/Makefile.am, tests/etc/Makefile.am: Add silent rule markers.

	Switch to `silent rules' mode

	* bootstrap (slurp): Convert gnulib Makefile.am to
	support silent rules.
	* configure.ac (AM_INIT_AUTOMAKE): Add silent-rules.
	Enable silent rules by default.
	* gacopyz/Makefile.am, mfd/Makefile.am: Add silent rules markers.

	Bugfix

	* mfd/mu_dbm.c (mu_dbm_errcall_fcn): Fix arguments for BDBv4.

2009-05-20  Sergey Poznyakoff  <gray@gnu.org.ua>

	Minor changes.

	* am/gcc.m4: New file.
	* configure.ac: Raise autotools requirements to 2.63/1.11
	Call MF_GCC_QUIRKS.
	* gacopyz/gacopyz.c (ctx_free): Change return type.

2009-05-19  Sergey Poznyakoff  <gray@gnu.org.ua>

	Implement GeoIP support.

	* NEWS: Update.
	* configure.ac: Version 5.1.90
	New option --with-geoip
	(GEOIP_LIBS): New AC_SUBST
	* doc/mailfromd.texi: Document geoip functions.
	* mfd/bi_geoip.m4: New file.
	* mfd/Makefile.am (M4_FILES): Add bi_geoip.m4
	(LDADD): Add GEOIP_LIBS.
	* mfd/mailfromd.h (pp_define): New function.
	* mfd/main.c (pp_define): New function.
	* mfd/snarf.m4 (MF_DEFINED, MF_OPTVAL): Fix error diagnostics.
	(MF_COND): New macro.
	(MF_INIT): Handle MF_COND sources.

2009-05-14  Sergey Poznyakoff  <gray@gnu.org.ua>

	Fix typo in docs

2009-05-13  Sergey Poznyakoff  <gray@gnu.org.ua>

	Raise version to 5.1

	Minor change

	* mfd/bi_db.m4: Fix comment.
	* pies/progman.c: Use _exit in child processes.  This
	is a work over a fault in MU design: it registers
	the pidfile removal function via atexit.

	Bugfixes.

	* doc/mailfromd.texi: Fix declaration of `uname'
	* mtasim/mtasim.c: Fix handling of header continuation.
	When sending headers and body to the milter, consistently
	use \r\n line terminators.

2009-05-12  Sergey Poznyakoff  <gray@gnu.org.ua>

	Fix diagnostics spelling

	Version 5.0.94

	* NEWS, configure.ac: Update.
	* mfd/prog.c (env_free_captured): env->bi_priv_array can be NULL.

2009-05-11  Sergey Poznyakoff  <gray@gnu.org.ua>

	Implement functional notation for reply actions

	* NEWS, doc/mailfromd.texi: Update.
	* mfd/drivers.c (print_type_result, mark_type_result)
	(optimize_type_result, code_type_result): Rewrite.
	* mfd/gram.y: Rewrite action rules.
	* mfd/lex.l (CODE,XCODE): Remove.
	* mfd/opcodes (RESULT): Takes one immediate parameter.
	(instr_result): Get arguments from stack.

	Implement some system information functions.

	* mfd/bi_gethostname.m4: New file.
	* NEWS, doc/mailfromd.texi: Update.
	* mfd/Makefile.am (M4_FILES): Add bi_gethostname.m4.
	* mfd/bi_system.m4 (uname): New function.
	* mfd/prog.c (heap_obstack_cancel, heap_obstack_base): New function.
	* mfd/prog.h: Likewise.
	* mfd/snarf.m4 (MF_OBSTACK_BASE, MF_OBSTACK_CANCEL): New defuns.
	* mtasim/mtasim.c (stop_mailfromd): Reset signal handler before
	doing kill, so that waitpid works on hosts with BSD signal semantics.

2009-05-09  Sergey Poznyakoff  <gray@gnu.org.ua>

	Implement current header access functions.

	* mfd/bi_curhdr.m4: New file: implementation of
	current header functions.
	* mfd/Makefile.am (M4_FILES): Add bi_curhdr.m4
	* mfd/bi_mbox.m4 (mailbox_open): Work over MU lossage.
	* mfd/bi_msg.m4 (bi_drop_current_message): Remove.
	(drop_current_message): New function.
	* mfd/mailfromd.h (env_reposition): New prototype.
	* mfd/msg.h (bi_drop_current_message): Remove.
	* mfd/prog.c (struct eval_environ.reposition): New member.
	(env_reposition): New function. Work over MU lossage.
	(env_capture_start): Call env_free_captured to release any
	module private captured data.
	Reset env->reposition to 0.
	(env_capture_write): If env->reposition is set, move
	stream pointer to the end of stream.
	(struct builtin_priv.free_capture): New member.
	(builtin_priv_register): Take 3 arguments.
	(env_free_captured): New function.
	* mfd/prog.h (builtin_priv_register): Update proto.
	* mfd/snarf.m4 (MF_DECLARE_DATA): Get at most 3 arguments.

	* NEWS, doc/mailutils.texi: Document new functions.
	* tests/etc/hdr.mts: New file (message transfer session).
	* tests/etc/hdr2.mts: Likewise.
	* tests/etc/Makefile.am (EXTRA_DIST): Add new files.
	* tests/hdr-all.at: New testcase.
	* tests/hdr-cap.at: New testcase.
	* tests/hdr-count.at: New testcase.
	* tests/hdr-gete.at: New testcase.
	* tests/hdr-getn.at: New testcase.
	* tests/hdr-itr.at: New testcase.
	* tests/hdr-mul.at: New testcase.
	* tests/Makefile.am (TESTSUITE_AT): Add new testcase.
	* tests/atlocal.in (TESTDIR): New variable.
	* tests/testsuite.at (MTASIM_DEFS): New define.
	(AT_MTA_TEST): Rename to AT_MTA_TEST_FILTER.  All uses
	updated.
	(AT_MTA_TEST_SCRIPT,AT_MTA_TEST_FILTER_SCRIPT): New defines.
	Include new testcases.
	* tests/arg.at, tests/curmsg.at, tests/numrcpt.at,
	tests/reject.at, tests/tempfail.at: Updated.

	Fix the docs

2009-05-08  Sergey Poznyakoff  <gray@gnu.org.ua>

	Update docs.

	* NEWS: Document Milter v.6 support.
	* doc/mailfromd.texi: Likewise.
	* doc/smap.texi: Document smap.

2009-05-07  Sergey Poznyakoff  <gray@gnu.org.ua>

	Fix exception handling code (saveex/restex).

	* mfd/drivers.c (code_type_funcdecl): Exmask handling
	and jump fixups are handled within codegen.
	(code_type_progdecl): Update call to codegen.
	* mfd/gram.y (codegen): Take an extra argument specifying
	the exception mask to handle.  Unless it is zero, code
	saveex/restex pair around the main code.  This makes sure
	local allocations do not disturb exception handling code.
	Also, take care of jump fixup here.
	(mailfromd_test): Fix bug in numeric argument passing.
	* mfd/prog.c (instr_saveex): Provide additional debugging
	diagnostics (temporary).
	(dump_saveex): Fix retrieving of the exmask (seftover
	from earlier version).
	(instr_memstk, instr_xmemstk, instr_deref)
	(instr_ston, instr_ntos, instr_cmp)
	(instr_logand, instr_logor, instr_logxor)
	(instr_add, instr_sub, instr_mul)
	(instr_div, instr_regex, instr_regcomp)
	(instr_funcall): Make sure PC and stack adjustments
	occur after outputting trace info.

	Implement v6 negotiation in pmult.

	* pmult/pmult.c (define_single_macro): Check for table overflow.
	(collect_stage_symbols, collect_symlists): New functions.
	(pmult_negotiate) [HAVE_SM_PMFI_SETMACS]: Call collect_symlists.

	Implement v6 negotiation on the server side.

	* gacopyz/stagenames.c: New file.
	* gacopyz/Makefile.am (libgacopyz_a_SOURCES): Add stagenames.c.

	* gacopyz/gacopyz.c (gacopyz_context_loop): Free req_macros.
	(gacopyz_addrcpt_par): rename to gacopyz_add_rcpt_par.
	* gacopyz/gacopyz.h (SM_LM_VRS_MAJOR, SM_LM_VRS_MAJOR)
	(SM_LM_VRS_PLVL, GACOPYZ_SM_MKVER): New macros.
	(macro_index): Rename to gacopyz_stage. All uses updated.
	(smfi_version): New proto.
	(gacopyz_addrcpt_par): rename to gacopyz_add_rcpt_par.
	(gacopyz_stage_name): New declaration.
	(gacopyz_srv_get_required_macros): New proto.
	(gacopyz_srv_set_version, gacopyz_srv_set_protocol)
	(gacopyz_srv_set_actions): 2nd argument is unsigned long.
	* gacopyz/server.c (struct gacopyz_srv): New member req_macros.
	(gacopyz_srv_get_required_macros): New function.
	(gacopyz_srv_destroy): Free req_macros.
	(gacopyz_srv_negotiate): Read macros.
	* mfd/gram.y (milter_state_name): Removed. Use gacopyz_stage_name instead.

	* mtasim/mtasim.c: New options: --gacopyz-log, --milter-proto, --milter-acts.

	* doc/mtasim.texi, doc/mailfromd.texi: Update.

	Implement v6 negotiation on the server side.

	* gacopyz/stagenames.c: New file.
	* gacopyz/Makefile.am (libgacopyz_a_SOURCES): Add stagenames.c.

	* gacopyz/gacopyz.c (gacopyz_context_loop): Free req_macros.
	(gacopyz_addrcpt_par): rename to gacopyz_add_rcpt_par.
	* gacopyz/gacopyz.h (SM_LM_VRS_MAJOR, SM_LM_VRS_MAJOR)
	(SM_LM_VRS_PLVL, GACOPYZ_SM_MKVER): New macros.
	(macro_index): Rename to gacopyz_stage. All uses updated.
	(smfi_version): New proto.
	(gacopyz_addrcpt_par): rename to gacopyz_add_rcpt_par.
	(gacopyz_stage_name): New declaration.
	(gacopyz_srv_get_required_macros): New proto.
	(gacopyz_srv_set_version, gacopyz_srv_set_protocol)
	(gacopyz_srv_set_actions): 2nd argument is unsigned long.
	* gacopyz/server.c (struct gacopyz_srv): New member req_macros.
	(gacopyz_srv_get_required_macros): New function.
	(gacopyz_srv_destroy): Free req_macros.
	(gacopyz_srv_negotiate): Read macros.
	* mfd/gram.y (milter_state_name): Removed. Use gacopyz_stage_name instead.

	* mtasim/mtasim.c: New options: --gacopyz-log, --milter-proto, --milter-acts.

	* doc/mtasim.texi, doc/mailfromd.texi: Update.

	Implement Milter protocol version 6.

	* gacopyz/Makefile.am (trans.h): Pass -vheader_file
	argument to the trans.awk script.
	* gacopyz/dummy.c (smfilter): Update initialization.
	* gacopyz/gacopyz.c (trans_fixup): New function.
	(convert_sfsistat): Handle new codes.
	(make_optneg_buf): New function.
	(send_reply): Handle SMFIP_NR_* flags.
	Update SMFIC_OPTNEG case.
	(shan_optneg): Implement milter 1.0 (proto 6)
	(gacopyz_context_loop): Call trans_fixup.
	(ok_to_send): Use the negotiated aflags.
	(gacopyz_addrcpt_par, gacopyz_chgfrom)
	(gacopyz_setsymlist): New functions.
	* gacopyz/gacopyz.h (GACOPYZ_VERSION_MAJOR): Raise to 2.
	(SMFI_VERSION): Set to 0x01000000
	(SMFI_PROT_VERSION, SMFI_PROT_VERSION_MIN): New defines.
	(SMFIR_ADDRCPT_PAR, SMFIR_CHGFROM): New defines.
	(SMFIP_NR_HDR, SMFIP_SKIP, SMFIP_RCPT_REJ): New defines.
	(SMFIP_NR_CONN, SMFIP_NR_HELO, SMFIP_NR_MAIL)
	(SMFIP_NR_RCPT, SMFIP_NR_DATA, SMFIP_NR_UNKN)
	(SMFIP_NR_EOH, SMFIP_NR_BODY, SMFIP_HDR_LEADSPC)
	(SMFI_DEFAULT_PROT, SMFIF_CHGFROM)
	(SMFIF_ADDRCPT_PAR): New defines.
	(SMFIS_NOREPLY, SMFIS_SKIP, SMFIS_ALL_OPTS): New constants.
	(enum macro_index): New data type, from gacopyz_priv.h
	(SMFIM_CONNECT, SMFIM_HELO, SMFIM_ENVFROM)
	(SMFIM_ENVRCPT, SMFIM_DATA, SMFIM_EOM)
	(SMFIM_EOH): New defines.
	(struct gacopyz_milter_descr): New member: xxfi_negotiate
	(smfi_addrcpt_par, smfi_chgfrom, smfi_setsymlist)
	(gacopyz_addrcpt_par, gacopyz_setsymlist)
	(gacopyz_chgfrom): New protos.
	* gacopyz/gacopyz_priv.h (struct macro_assoc): Rename flags to pflags.
	New members: aflags, version, mta_pflags, req_macros.
	* gacopyz/server.c (struct gacopyz_srv): Remove flags.
	(struct gacopyz_srv.version, acts, proto): Change type.
	(gacopyz_srv_create): Change defaults.
	(gacopyz_srv_negotiate): Rewrite.
	* gacopyz/smfi.c (smfi_addrcpt_par, smfi_chgfrom)
	(smfi_setsymlist): New functions.
	* gacopyz/trans.awk (END): Print the state_nr_mask array.

	* mfd/bi_db.m4: Add missing includes.
	* mfd/engine.c: Implement mlfi_negotiate.
	* mfd/gram.y (register_macro): Arrange stored macros by
	gacopyz macro index. All uses updated.
	(get_stage_macro_string): New function.
	* mfd/mailfromd.h (get_stage_macro_string): New proto.
	(check_tbf_rate): Add proto.

2009-05-06  Sergey Poznyakoff  <gray@gnu.org.ua>

	Update docs

	Minor changes.

	* NEWS: Update.
	* doc/mailfromd.texi: Reorder material.
	* doc/upgrade.texi: New file.
	* doc/fdl.texi, doc/gacopyz.texi, doc/strftime.texi: Move
	sectioning commands to the main source.
	* etc/mailfromd.rc: Reflect recent changes.
	* mfd/lex.l: Change semantics of __statedir__
	and __preproc__. Introduce __defstatedir__ and
	__defpreproc__.

2009-05-04  Sergey Poznyakoff  <gray@gnu.org.ua>

	Version 5.0.93

	* NEWS, configure.ac: Raise patchlevel to 93.
	* doc/mailfromd.texi: Document new features.
	* mfd/tbf_rate.c (tbf_rate_format_struct): Change dbid to
	`tbf'.

2009-05-03  Sergey Poznyakoff  <gray@gnu.org.ua>

	Improve the rate function.

	* mfd/bi_other.m4 (rate): Add second optional
	parameter: a threshold.
	* mfd/mailfromd.h (get_rate): Change prototype.
	* mfd/rate.c (get_rate): Take two more parameters:
	threshold and interval. Return rate as long.
	Do not increment the hit counters if the observed
	rate is higher than the threshold.
	Expire the record if no mails were sent during a
	time longer than `interval' seconds.
	* mflib/rateok.mf: New file.
	* mflib/Makefile.am (inc_DATA): Add rateok.
	* NEWS: Update

	Minor change.

	* NEWS: Update.
	* .gitignore: Update.

2009-05-02  Sergey Poznyakoff  <gray@gnu.org.ua>

	Add an alternative implementation of the greylist function.

	* mfd/bi_db.m4: Add a new implementation of
	the greylist function, proposed by Con Tassios.
	In this implementation, the database keeps
	the time the greylisting period is set to expire,
	rather than the time the greylisting was activated.
	This allows to implement is_greylisted function.
	The implementation to use is selected by #pragma
	greylist.
	* tests/greylist-ct.at: New file. Testcase for Con Tassios
	style greylist.
	* tests/Makefile.am (TESTSUITE_AT): Add greylist-ct.at.
	* tests/greylist.at: Update.
	* tests/testsuite.at: Include greylist-ct.at.
	* tests/etc/greylist-ct.rc: New file.
	* tests/etc/Makefile.am (RCFILES): Add greylist-ct.rc.
	* THANKS: Fix alphabetical ordering.

2009-05-02  Ben McKeegan  <ben@netservers.co.uk>

	Implement token bucket filter.

	* mfd/tbf_rate.c: New file.
	* gnulib.modules: Add inttypes.
	* mfd/Makefile.am (mailfromd_SOURCES): Add tbf_rate.c.
	* mfd/bi_other.m4 (tbf_rate): New function.
	* mfd/mailfromd.h (tbf_rate_format): New global.
	* mfd/main.c (db_format_setup): Set tbf_rate_format.

2009-04-19  Sergey Poznyakoff  <gray@gnu.org.ua>

	Version 5.0.92

	Do not use RFC822 filter.

	* mfd/bi_sa.m4 (write_822): New function to replace MU's "rfc822" filter,
	which is a pile of junk (sorry). Improves performance, besides.
	(spamd_send_stream): Use write_822 instead of the filter. See above.
	* mfd/engine.c: Fix comment.
	* mfd/mailfromd.h (mem_search): New proto.
	* mfd/prog.c (env_capture_write): Use mem_search.

2009-04-18  Sergey Poznyakoff  <gray@gnu.org.ua>

	Version 5.0.91

	Fix CRLF/LF inconsistencies. Fix bug in SAVEEX/RESTEX.

	* mfd/prog.c (instr_restex): Bugfix. Use pop to restore catch
	addresses. This also fixes the resulting tos value.
	* mfd/bi_body.m4 (current_message): Use mf_stream_to_message
	* mfd/bi_sa.m4 (spamd_send_stream): Return int. Recode delimiters to
	"\r\n".
	(sa): Check return from spamd_send_stream. Adjust reported stream size.
	(clamav): Check return from spamd_send_stream.
	* mfd/bi_sieve.m4 [MAILUTILS_VERSION_NUMBER < 1290]: Remove
	* mfd/mailfromd.h (env_get_line_count, mf_stream_to_message): New functions.
	* mfd/prog.c (struct eval_environ.line_count): New member.
	(env_get_line_count): New function.
	(env_capture_start): Init eval_environ.line_count
	(env_capture_write): Recode "\r\n" -> "\r". Update eval_environ.line_count.

	* mtasim/mtasim.c (send_body): New function.
	(smtp): Use CRLF as line terminator in message body.
	* pmult/pmult.c (collect_headers): strip off \r's.

2009-04-09  Sergey Poznyakoff  <gray@gnu.org.ua>

	Document #pragma dbprop

	Fix strict callout method.

	* mfd/engine.c (check_mx_records): Propagate mf_failure, mf_temp_failure,
	and mf_not_found returns to the caller.
	(method_strict): Dismiss return mf_not_found from check_mx_records, if
	there were no MXs.

2009-04-08  Sergey Poznyakoff  <gray@gnu.org.ua>

	The `dbprop' pragma allows to define database properties.

	* mfd/Makefile.am (mailfromd_SOURCES): Add pragma.c
	* mfd/pragma.c: New file.
	* mfd/bi_db.m4: New pragma `dbprop'.
	(dbmap, dbget, dbput, dbdel): take database properties from dbprop settings.
	(dbfirst): Open database for reading only.
	* mfd/gram.y (pragma_regex, pragma_option, pragma_stacksize)
	(pragma_database): Rewrite to match new pragma interface.
	(pragma_setup): New function.
	* mfd/mailfromd.h (SYM_PRAGMA): New symbol type.
	(install_pragma, lookup_pragma): New protos.
	(parse_pragma): Arg is const.
	* mfd/main.c (main): Call pragma_setup.
	* mfd/snarf.m4 (MF_PRAGMA): New define.
	* mfd/symtab.c ((install_pragma, lookup_pragma): New functions.

	* .gitignore, tests/.gitignore: Update.

2009-03-19  Con Tassios  <ct@swin.edu.au>

	Bugfix

	* mfd/bi_db.m4 (greylist): Initialize greylist_seconds_left for expired records.

2009-03-13  Sergey Poznyakoff  <gray@gnu.org.ua>

	Finish migration to Git.

	* Makefile.am (dist-hook): Create ChangeLog.
	(ChangeLog): New rule.
	* NEWS, README-alpha, README-hacking: Update
	* gnulib.modules: Add gitlog-to-changelog
	* ChangeLog: Rename to ChangeLog.svn

	* tests/hasmx.at, tests/hostname.at, tests/ismx.at,
	tests/poll.at, tests/poll01.at, tests/poll02.at,
	tests/poll03.at, tests/rescname.at, tests/resolve.at,
	tests/testsuite.at: Skip tests if the network is down.

	Add .gitignores

2009-03-12  Sergey Poznyakoff  <gray@gnu.org.ua>

	Fix the current_message function and subprocess handling in mtasim.

	* mtasim/mtasim.c (stop_mailfromd): Wait for the mailfromd child
	to terminate and analyze its return status.

	* mfd/bi_msg.m4 (bi_drop_current_message): New function.
	* mfd/prog.c (env_capture_start): Call bi_drop_current_message if
	the capture stream already exists (i.e. when starting processing
	2nd or later message in a session).
	* mfd/msg.h (bi_drop_current_message): New prototype.
	* gacopyz/server.c (srv_connect): Retry attempts to connect
	if they fail with ECONNREFUSED. Implement 5-second timeout.

	* tests/testsuite.at (MAILFROMD_OPTIONS): New define.
	(AT_MTA_TEST): Pass MAILFROMD_OPTIONS to mtasim invocation.
	(AT_WITH_MAILFROMD_OPTIONS): New macro.
	Include curmsg.at.
	* tests/curmsg.at: New file
	* tests/etc/Makefile.am (RCFILES): Add size.rc
	* tests/etc/size.rc: New file

2009-03-11  Sergey Poznyakoff  <gray@gnu.org.ua>

	Minor fixes.

	* mfd/prog.c (env_get_macro, instr_symbol): Minor fixes
	(env_capture_start): Seek to 0 after truncating the stream.
	Mailutils should know better and do it automatically.

2009-03-10  Sergey Poznyakoff  <gray@gnu.org.ua>

	Bugfixes

	* mfd/prog.c (env_capture_start): Do not create the stream if it
	already exists. Bug reported by Con Tassios.
	* mfd/bi_sieve.m4 (sieve): Don't free unexistend Sieve machines.
	* THANKS: Update
	* NEWS: Update

2009-02-20  Sergey Poznyakoff  <gray@gnu.org.ua>

	Raise version number to 5.0.90

	Bugfix

	* mfd/bi_io.m4 (write): Fix spurious runtime exceptions, raised if
	the third argument was not given.

	Minor changes

	* mfd/engine.c (mlfi_envfrom, mlfi_envrcpt): Fix second argument,
	so that it does not include $1.
	* THANKS: Update.
	* mflib/sa.mf (sa_format_report_header): Improve formatting.

2009-02-19  Sergey Poznyakoff  <gray@gnu.org.ua>

	Minor changes

	* mfd/engine.c (mlfi_envfrom, mlfi_envrcpt): Fix second argument,
	so that it does not include $1.
	* THANKS: Update.
	* mflib/sa.mf (sa_format_report_header): Improve formatting.

2009-02-18  Sergey Poznyakoff  <gray@gnu.org.ua>

	Bugfix

	* mfd/gram.y (state_parms): Fix number of arguments to
	envfrom and envrcpt.  Bug reported by Patrick Dalais
	<patrick@depari.co.za>.

	* tests/fromargs.at, tests/rcptargs.at: New tests.
	* tests/testsuite.at, tests/Makefile.am: Add new tests.
	* tests/etc/ack.rc: Increase stack allocation.

2008-12-26  Sergey Poznyakoff  <gray@gnu.org.ua>

	Version 5.0

	* configure.ac, NEWS: Version 5.0.
	* doc/mailfromd.texi, doc/pies.texi, doc/pmult.texi: Update.
	* doc/Makefile.am (check-builtins): Account for
	MF_DEFUN_VARARGS_NO_PROM.

2008-12-16  Sergey Poznyakoff  <gray@gnu.org.ua>

	Fix sprintf, accidentally broken on 2008-07-14.

	* mfd/symtab.c (va_builtin_install): Initialize flags to 0.
	(va_builtin_install_ex): Remove capture and varargs, replace them
	with flags.
	* mfd/snarf.m4 (__mf_defun,MF_DEFUN_VARARGS): Reflect changes to
	va_builtin_install_ex.
	(MF_DEFUN_VARARGS_NO_PROM): New defun.
	* mfd/gram.y (cast_arg_list): Add 4th argument, controlling
	argument type promotion.
	* mfd/drivers.c (code_type_builtin): Use builtin.flags.
	* mfd/mailfromd.h (MFD_BUILTIN_*): New defines.
	(struct builtin): Remove capture and varargs, replace them
	with flags.
	* mfd/bi_sprintf.m4: Define sprintf as MF_DEFUN_VARARGS_NO_PROM.

2008-12-01  Sergey Poznyakoff  <gray@gnu.org.ua>

	Update

	Update

	Documentation and minor fixes.

	* pies/pies.c, pies/progman.c, pies/meta1gram.y, pies/pies.h,
	pies/meta1lex.l: Normalize output redirection terminology, fix the
	debug levels.
	* pmult/pmult.c: Fix error message
	* doc/pies.texi: Document the configuration.

	Documentation and minor fixes.

	* pies/pies.c, pies/progman.c, pies/meta1gram.y, pies/pies.h,
	pies/meta1lex.l: Normalize output redirection terminology, fix the
	debug levels.
	* pmult/pmult.c: Fix error message
	* doc/pies.texi: Document the configuration.

2008-11-28  Sergey Poznyakoff  <gray@gnu.org.ua>

	Add const qualifiers to gacopyz_getsymval, gacopyz_replace_body and derived functions.

	Bugfixes/improvements.

	* doc/mailfromd.texi: Document replbody. Use @WRITEME where appropriate.
	* doc/rendition.texi (WRITEME): New macro.
	(UNREVISED): Reword.
	* doc/pies.texi, doc/smap.texi: Use @WRITEME
	* doc/Makefile.am (check-writeme): New rule.
	(all-check-docs): Depend on check-writeme.
	* mfd/bi_body.m4 (replbody): Can be used in any handler.
	* NEWS: Rearrange material.

	Emulate Sendmail behavior for SMFIR_REPLBODY.

	* pmult/pmult.c (struct pmult_priv_data): New members hdrbuf and
	body_itr. Remove body_off.
	(pmult_append_body_chunk): Set bucket size to PMILTER_CHUNK_SIZE.
	(pmult_clear): Free new pmult_priv_data members.
	(pmult_free): Call pmult_clear first.
	(pmult_eom): Initialize pmult_priv_data members for eventual body
	replacement.
	(pmult_msg_rplc): First send headers, then body.

2008-11-27  Sergey Poznyakoff  <gray@gnu.org.ua>

	Minor changes.

	* pmult/pmult.c: Remove obsolete comment.
	* mfd/engine.c (run_msgmod): Ensure the message for gacopyz_replace_body
	has \r\n endings.

2008-11-25  Sergey Poznyakoff  <gray@gnu.org.ua>

	Initial implementation of body replacement.

	* mfd/engine.c (run_msgmod): Handle body_repl
	* mfd/gram.y (msgmod_opcode_str): Likewise.
	* mfd/mailfromd.h (enum msgmod_opcode): New constant body_repl.
	* mfd/bi_body.m4 (replbody): New function (proof-of-concept).

	* pmult/pmult.c (struct pmult_priv_data): New fields body_off,
	body_chunks.
	(pmult_append_body_chunk): New function.
	(cb_reply): Handle SMFIR_REPLBODY
	(pmult_std_reply): Likewise.
	(pmult_clear): Destroy body_chunks
	(pmult_eom): Request body replacement if body_chunks is not NULL.
	(pmult_msg_rplc,pmult_msg_rplc_stat): New functions.
	(pmilter): Register pmult_msg_rplc and pmult_msg_rplc_stat.

2008-11-21  Sergey Poznyakoff  <gray@gnu.org.ua>

	Pies: ensure all prereqs are started in right order before starting a dependency.

	* pies/pies.c (component_cfg_param): New statement settle-timeout.
	* pies/progman.c (recompute_alarm): New static;
	(prog_start): Start the component only if all of its prerequisites
	are running.
	(progman_recompute_alarm): New function.
	(progman_start): Reset recompute_alarm to 0.
	(check_stopping): New function.
	(progman_wake_sleeping): Handle also status_stopping and
	status_enabled. Recompute alarm before leaving.
	(prog_start_prerequisites): Return 0 or 1 depending on whether all
	prerequisites have been started.
	(prog_stop): Raise recompute_alarm for stopping components.
	(progman_cleanup): Force status_enabled before attepmting to
	start a component.
	(progman_cleanup): Add a \n after debugging message.
	Run progman_wake_sleeping unlsess expect_term is set.
	* pies/meta1gram.y (translate_node_list): Force settle-timeout =
	1.
	* pies/pies.h (struct component.settle_timeout): New member.

	Improve pies.

	* pies/pies.c (main): New options --force, --dump-prereq and
	--dump-depmap.
	Refuse to start if another instance is already running.
	(pies_check_status): New function.
	(pies_status): Rewrite using pies_check_status.
	* pies/progman.c (component_fixup_depend): Bugfix: move
	mu_list_append off the conditional.
	(progman_dump_prereq, progman_dump_depmap): New functions.
	* pies/meta1gram.y (yyerror): Return 0.
	* pies/pies.h (progman_dump_prereq, progman_dump_depmap): New
	protos.
	(meta1_parser_set_debug, meta1lex, meta1error)
	(meta1parse): Likewise.

	Improve pies.

	* pies/progman.c (print_dep): New function.
	(progman_build_depmap): Call print_dep to facilitate fixing cyclic
	dependencies.
	(prog_start_prerequisites): Fix debugging output.
	Remove spurious second loop (was it a typo or copy-paste
	leftover?)
	(prog_stop_dependents): Fix debugging output.
	(progman_dump_stats): Avoid race conditions between running and
	querying instances.

2008-11-17  Sergey Poznyakoff  <gray@gnu.org.ua>

	Add pies.texi and smap.texi

	Document and improve pmult.

	* pmult/pmult.c (debug_level): Remove.
	(struct pmult_priv_data): Remove debug. Use pmult_debug instead.
	(macro_trans): Define Sendmail compatibility macros cn_issuer and
	cn_subject.
	(builtin_macros): Fix typo in "multiplexer".
	(define_macros): Rewrite.  The "define-macros" statement takes
	exactly two arguments, each of which can be either a string or a
	list of strings.
	* doc/values.texi, doc/mailfromd.texi, doc/pmult.texi: Update.

	* doc/Makefile.am (check-fixmes): Scan all texinfo documents.

	Fix handling of retranslators.

	* pies/pies.c (main): Call progman_build_depmap and
	progman_create_sockets before starting up components.
	* pies/progman.c (struct prog): New member `retr'.
	(destroy_prog): New function.
	(retr_tag): Change signature. Fix erroneous condition for
	xalloc_die.
	(register_retr): Return prog. Make static. Initialize idx
	with -1.
	(update_retr): Register retranslator, if necessary.
	(progman_register_retranslators): Remove.
	(register_prog0): 2nd argument: index.
	(register_prog): Do not create socket at once.
	(prog_start): Remove debugging fprintf.
	(progman_accept): Update call to register_prog0.
	(progman_create_sockets): New function.
	(progman_start): Remove calls to progman_register_retranslators
	and progman_build_depmap. They must be done only once.
	(prog_stop_retranslators): New function.
	(prog_stop_dependents): Call prog_stop_retranslators.
	(progman_cleanup): Remove dangling retranslators.
	* pies/pies.h (progman_create_sockets): New prototype.

	Fix handling of retranslators.

	* pies/pies.c (main): Call progman_build_depmap and
	progman_create_sockets before starting up components.
	* pies/progman.c (struct prog): New member `retr'.
	(destroy_prog): New function.
	(retr_tag): Change signature. Fix erroneous condition for
	xalloc_die.
	(register_retr): Return prog. Make static. Initialize idx
	with -1.
	(update_retr): Register retranslator, if necessary.
	(progman_register_retranslators): Remove.
	(register_prog0): 2nd argument: index.
	(register_prog): Do not create socket at once.
	(prog_start): Remove debugging fprintf.
	(progman_accept): Update call to register_prog0.
	(progman_create_sockets): New function.
	(progman_start): Remove calls to progman_register_retranslators
	and progman_build_depmap. They must be done only once.
	(prog_stop_retranslators): New function.
	(prog_stop_dependents): Call prog_stop_retranslators.
	(progman_cleanup): Remove dangling retranslators.
	* pies/pies.h (progman_create_sockets): New prototype.

2008-11-16  Sergey Poznyakoff  <gray@gnu.org.ua>

	Improve pies.

	* pies/pies.h (create_socket): Change proto to 3 arguments.
	* pies/socket.c (create_socket): Take two additional arguments.
	Allow to configure ownership and mode of created UNIX sockets.
	* pies/progman.c (register_prog, prog_start): Update calls to
	create_socket.

	Implement ctype functions.

	* mfd/bi_ctype.m4: New function.
	* mfd/Makefile.am (inc_DATA): Add bi_ctype.m4.
	* doc/Makefile.am (check-builtins): Update source sed expression.
	* doc/mailfromd.texi, NEWS: Document ctype functions.

2008-11-15  Sergey Poznyakoff  <gray@gnu.org.ua>

	Improve handling of program privileges.

	* lib/libmf.h (struct mf_privs): New data type.
	(get_user_groups, mf_priv_setup, mf_epriv_setup): New prototypes.
	* lib/userprivs.c (get_user_groups, mf_priv_setup)
	(mf_epriv_setup): New functions.

	* smap/smap.c: If user is specified, switch to effective uid/gid,
	in order for msrv to create files with right privileges, on one
	hand, and to be able to create pidfile in root-owned directories
	(e.g. /var/run), on the other hand. This requires todays snapshot
	of Mailutils.

	* pies/pies.h (struct pies_privs_data): Remove
	(struct component): Change type of `privs' to struct mf_privs.
	(priv_setup): Remove.
	* pies/pies.c: Use mf_priv* stuff to manipulate privileges.
	* pies/progman.c: Likewise.
	* pies/meta1gram.y (list): allow for trailing comma.

2008-11-13  Sergey Poznyakoff  <gray@gnu.org.ua>

	Bugfix.

	* mfd/bi_string.m4 (index) (rindex): Third argument (start index)
	can equal string length.

	Bugfix.

	* pies/Makefile.am (LDADD): Add MF_PROCTITLE_LIBS

	Bugfix.

	* lib/proctitle.c (mf_proctitle_format):
	* pies/progman.c (progman_register_retranslators): Register
	retranslators only for retr_syslog.
	(open_retranslator): Do not prepend program name to the proctitle.
	It is done automatically by the library.
	* lib/proctitle.c: Declare environ.
	Define __progname if not defined in libc.
	(mf_proctitle_init): Set __progname.
	(mf_proctitle_format): Prepend program name to the proctitle.

	Implement file output redirection.

	* pies/pies.h (enum retr_type): New constants.
	(struct retranslator): New type.
	(struct component): Change type of retr to struct retranslator.
	All uses updated.
	* pies/pies.c (_cb_retr): Takes two arguments:
	redirection type and file name or syslog priority.
	(make_full_name): New function.
	(component_verify): Check retr file names.
	* pies/progman.c (redirect_to_file): New function.
	(open_retranslator): Handle file redirects.
	(prog_start): Open /dev/null in wronly mode.
	* pies/meta1gram.y (create_retr_node): New function.
	(translate_node_list): Create default "stderr" statement.

	Implement setproctitle functionality for pies.

	* am: New directory.
	* am/aggr.m4, am/debug.m4: New files (from acinclude.m4)
	* am/proctitle.m4: New file.
	* acinclude.m4: Removed.
	* configure.ac: Call MF_PROCTITLE.
	* lib/libmf.h (mf_proctitle_format): New prototype.
	* lib/proctitle.c: New file.
	* lib/Makefile.am (libmf_a_SOURCES): Add proctitle.c.
	* Makefile.am (ACLOCAL_AMFLAGS): Add -I am

	* pies/pies.c (main): Call mf_proctitle_init.
	* pies/progman.c (retr_tag): Rewrite in a safer way.
	(open_retranslator): Set program title in child.

	Allow to complement existing components (useful for MeTA1 includes).

	* pies/pies.c (component_verify): New function.
	(component_section_parser): Call component_verify.
	(_cm_include_meta1): Reduce the tree at once.
	(parse_meta1_conf): Not needed any more.
	* pies/progman.c (progman_register_retranslators): New function.
	(pies/progman.c): Do not register retranslators: wait until the
	entire config is parsed and do that in progman_start.
	(progman_start): Call progman_register_retranslators.

	Optonal semicolon after a simple statement

2008-11-12  Sergey Poznyakoff  <gray@gnu.org.ua>

	Implement dependencies/prerequisites in MeTA1.

	* pies/pies.c (component_cfg_param): Rename "depend" to
	"prerequisites". Add new keyword "dependents".
	(pies_cfg_param): New keyword "limits".
	* pies/progman.c (struct prog): Rename "depend" to "prereq".
	(prog_start_dependencies): Rename to prog_start_prerequisites
	(register_prog0): Do not fill prereq. This will be done later,
	when all dependencies are resolved.
	(prog_rebuild_prerequisites): New function.
	(prog_start): Per-component limitis override system-wide ones.
	(component_fixup_depend, fixup_prerequisites)
	(rebuild_prerequisites): New functions.
	(progman_build_depmap): Call fixup_prerequisites and
	rebuild_prerequisites.
	(prog_stop_dependent): Rename to prog_stop_dependents.
	* pies/meta1gram.y: Implement restart_dependencies.
	* pies/pies.h (struct component): Rename "depend" to "prereq". Add
	new member "depend".
	(pies_limits): New extern.

	* pies/pies.rcin: Update

	Update

	Implement MeTA1 configuration file parser.

	* configure.ac: Require Mailutils 1.9.93
	* doc/mailfromd.texi, NEWS: Update.
	* pies/pies.c (_cb_depend): Accept list argument.
	(component_cfg_param): New statement: program.
	(pies_cfg_param): New statements: include-meta1 and
	meta1-queue-dir.
	(parse_meta1_conf, pies_cfg_verifier): New functions.
	(main): Set mu_app_cfg_verifier. Call parse_meta1_conf.
	* pies/progman.c (progman_lookup_component): New function.
	(prog_start): Pass program name (eventually differing from
	argv[0]).
	* pies/pies.h (struct component): New member `program'.
	(progman_lookup_component): New prototype.
	* pies/meta1gram.y, pies/meta1lex.h, pies/meta1lex.l: New files.
	* pies/Makefile.am (pies_SOURCES): Add meta1gram.y and
	pies/meta1lex.h.
	(noinst_HEADERS, AM_YFLAGS, AM_LFLAGS): New variables.

	Implement MeTA1 configuration file parser.

	* configure.ac: Require Mailutils 1.9.93
	* doc/mailfromd.texi, NEWS: Update.
	* pies/pies.c (_cb_depend): Accept list argument.
	(component_cfg_param): New statement: program.
	(pies_cfg_param): New statements: include-meta1 and
	meta1-queue-dir.
	(parse_meta1_conf, pies_cfg_verifier): New functions.
	(main): Set mu_app_cfg_verifier. Call parse_meta1_conf.
	* pies/progman.c (progman_lookup_component): New function.
	(prog_start): Pass program name (eventually differing from
	argv[0]).
	* pies/pies.h (struct component): New member `program'.
	(progman_lookup_component): New prototype.
	* pies/meta1gram.y, pies/meta1lex.h, pies/meta1lex.l: New files.
	* pies/Makefile.am (pies_SOURCES): Add meta1gram.y and
	pies/meta1lex.h.
	(noinst_HEADERS, AM_YFLAGS, AM_LFLAGS): New variables.

2008-11-11  Sergey Poznyakoff  <gray@gnu.org.ua>

	Bugfixes

	* pies/pies.c (component_cfg_param, pies_cfg_param): New keyword:
	allgroups.
	(pies_add_allgroups): New function.
	* pies/limits.c: Fix debug statements.
	* pies/progman.c (build_depmap): Rename to
	progman_build_depmap. Make extern, for future use. All callers
	updated.
	* pies/pies.h (progman_build_depmap): New proto.

	pies: rename open_socket to create_socket

	Bugfixes

	* pies/pies.c: Fix ACTION_COMPRELOAD
	* pies/progman.c (open_retranslator): (child) close all open
	sockets, except p[0] (pipe input).
	(prog_start): Bugfix: mark sleeping components with
	status_sleeping.
	(prog_start): stdout retranslation works for pies_comp_pass_fd.
	Mark started processes with status_enabled.
	(progman_start): Start enabled processes if pid is 0.
	(progman_stop_component): Correctly handle various status types.
	(progman_dump_stats): Mark processes being stopped.

	Bugfixes

	* pies/pies.c (component_cfg_param): Bugfix.
	(component_section_parser): Initialize comp->pass_fd_socket
	* pies/progman.c (prog_start): Listen on the socket, if in pass_fd
	mode. Avoid closing it.
	(prog_stop_all): Kill programs being stopped.
	* pies/socket.c (pass_fd): Check return from open_unix_socket.

	Bugfixes

	* pies/pies.c (component_cfg_param): Bugfix.
	(component_section_parser): Initialize comp->pass_fd_socket
	* pies/progman.c (prog_start): Listen on the socket, if in pass_fd
	mode. Avoid closing it.
	(prog_stop_all): Kill programs being stopped.
	* pies/socket.c (pass_fd): Check return from open_unix_socket.

2008-11-10  Sergey Poznyakoff  <gray@gnu.org.ua>

	Rewrite pies to incorporate into it the functionality of inetd and mcp.

	* pies/pies.c (pmult_debug): Rename to pies_debug.
	(pies_acl): New global.
	(component_cfg_param): New statements: mode, socket,
	pass-fd-socket, acl, limits.
	(component_section_parser): Allocate comp. Check its consistency
	on mu_cfg_section_end.
	(pies_cfg_param): New statement: acl.
	(main): Call mu_acl_cfg_init. Use pies_pause instead of pause.
	* pies/limits.c: New file.
	* pies/progman.c (enum prog_status): New status: status_listener.
	(struct prog): Keep a pointer to the original struct component,
	instead of copying its fields (except for depend, which is copied
	anyway). All uses updated.
	(prog_lookup_by_socket, unlink_prog, register_prog0): New
	functions.
	(prog_start, progman_cleanup, progman_stop_component): Rewrite to
	take into account various component modes.
	(pies_check_acl): New function.
	(progman_accept): New function.
	* pies/pies.h (limits_record_t): New typedef.
	(enum pies_comp_mode): New constants.
	(struct component): New members: mode, limits, socket_url,
	pass_fd_socket, acl.
	(progman_accept): New proto.
	(pies_pause, register_listener, pass_fd, open_socket)
	(parse_limits, set_limits): New protos.
	* pies/Makefile.am (pies_SOURCES): Add limits.c and socket.c
	* pies/socket.c: New file.

	* configure.ac: Check for msg_control and msg_accrights in struct
	msghdr.
	* acinclude.m4 (IU_CHECK_MEMBER, IU_CHECK_MEMBERS): New macros
	(from inetutils).

	Minor fixes.

	* pies/progman.c (prog_start): Bugfix.
	* pmult/pmult.c (pmult_cfg_param): New configuration statement
	pmilter-debug.
	(main): Call sm_pmfi_setdbg.

	Minor fixes.

	* pies/progman.c (prog_start): Bugfix.
	* pmult/pmult.c (pmult_cfg_param): New configuration statement
	pmilter-debug.
	(main): Call sm_pmfi_setdbg.

2008-11-09  Sergey Poznyakoff  <gray@gnu.org.ua>

	Update

	Add built-in functions for accessing Sendmail macros.

	* mfd/mailfromd.h (env_get_macro): New proto.
	* mfd/prog.c (env_get_macro): New function.
	* mfd/bi_macro.m4: New file.
	* mfd/Makefile.am (M4_FILES): Add bi_macro.m4.
	* NEWS: Update.
	* doc/mailfromd.texi (Macro access): New subsubsection.

2008-11-07  Sergey Poznyakoff  <gray@gnu.org.ua>

	* mfd/bi_mbox.m4 (mailbox_open): Take 2nd optional argument, specifying the permissions of the mailbox, if it is to be created. * doc/mailfromd.texi, NEWS: Update.

2008-11-06  Sergey Poznyakoff  <gray@gnu.org.ua>

	Bugfix & minor improvement.

	* pmult/pmult.c (collect_headers): Rewrite state machine to ensure
	each state either advances off or switches to the new state.
	(builtin_macros): New variable.
	(translate_macros0): Add builtin macros.
	(pmult_connect): Do not free priv_data even if some milters
	returned rejects.

	Bugfix

	* pmult/pmult.c (collect_headers): Rewrite state machine to ensure
	each state either advances off or switches to the new state.

	Bugfix

	* pmult/pmult.c (collect_headers): Rewrite state machine to ensure
	each state either advances off or switches to the new state.

2008-11-05  Sergey Poznyakoff  <gray@gnu.org.ua>

	Bugfix.

	* mfd/lex.l: Fix default condition for ML state, introduced on
	2008-11-02.

2008-11-04  Sergey Poznyakoff  <gray@gnu.org.ua>

	Improvements.

	* mflib/verp.mf (verp_extract_user): Pass email as the first
	argument.
	* doc/mailfromd.texi: Update.
	* doc/Makefile.am: Add pmult.texi
	* doc/pmult.texi: New file.
	* mfd/lex.l: %% and $$ in quoted strings are replaced by single %
	and $, correspondingly.
	* NEWS: Update.

2008-11-03  Sergey Poznyakoff  <gray@gnu.org.ua>

	Improve docs.

	* doc/mailfromd.texi, NEWS: Document `getopt' and run (script)
	mode. 
	* mfd/lex.l: Octal characters can contain 1 to 3 octal characters.
	* mfd/bi_getopt.m4: Allow to specify long options (without short
	option equivalents) that take arguments.
	* mfd/main.c (options): Document optional argument to the `--run'
	option.

2008-11-02  Sergey Poznyakoff  <gray@gnu.org.ua>

	Minor improvement in the lexer.

	* mfd/lex.l (start_locus): New variable.
	(BEGIN_X): New macro.
	Add a rule to ignore any characters at EOF in ML state.
	(yywrap): Report an error if the file is left not in the INITIAL
	state, i.e. EOFs in comments or strings.

	Improve the docs.

	* doc/mailfromd.texi, NEWS: Update.

	Minor fix.

	* mfd/drivers.c (mark_type_asgn): Mark variable as referenced if
	it is assigned a value.

	Get rid of ml_header.  Gacopyz takes care about the header formatting.

	* gacopyz/gacopyz.h (gacopyz_safe_header_value): New proto.
	* gacopyz/gacopyz.c (gacopyz_safe_header_value): New function.
	(gacopyz_header_command): Use gacopyz_safe_header_value to format
	header value.
	* mfd/bi_sa.m4 (sa): Remove unused variable.
	* mfd/bi_string.m4: Remove ml_header.
	* doc/mailfromd.texi: Remove ml_header.

	New functions: replstr, ml_header, sa_format_score, sa_format_report_header

	* mflib/sa.mf: New file.
	* mflib/Makefile.am (inc_DATA): Add sa.mf
	* mfd/bi_string.m4 (replstr): New function.

	* doc/mailfromd.texi: Document new functions.
	* NEWS: Update.

	New functions: replstr, ml_header, sa_format_score, sa_format_report_header

	* mflib/sa.mf: New file.
	* mflib/Makefile.am (inc_DATA): Add sa.mf
	* mfd/bi_string.m4 (replstr): New function.

	* doc/mailfromd.texi: Document new functions.
	* NEWS: Update.

2008-11-01  Sergey Poznyakoff  <gray@gnu.org.ua>

	mfd/bi_string.m4 (rindex): Fix bug introduced on 2008-10-29.

	Implement spamd REPORT in sa.

	* mfd/snarf.m4 (MF_OBSTACK_FINISH): New macro.
	* mfd/bi_string.m4 (ml_header): New function.
	* mfd/bi_sa.m4 (spamd_read_line0): New function.
	(spamd_read_line): Remove last argument. Use spamd_read_line0.
	(sa): Take a 3rd optional argument, specirying whether to
	return spam report in sa_keywords.

	Bugfix.

	* mfd/gram.y (ADD,REPLACE): Cast 2nd argument to string.
	* mfd/bi_system.m4 (strftime): Add missing MF_OPTVAL.

	Bugfix.

	* mfd/gram.y (ADD,REPLACE): Cast 2nd argument to string.
	* mfd/bi_system.m4 (strftime): Add missing MF_OPTVAL.

2008-10-31  Sergey Poznyakoff  <gray@gnu.org.ua>

	Update

	Update.

	* pmult/pmult.c (pmult_eom): Get macros from PM_SMST_DOT list.

	Allow to configure which macros to pass to the filter.

	* gnulib.modules: Add inttostr
	* smap/smap.c, pies/progman.c, pies/pies.h: Use umaxtostr, instead
	of mu_umaxtostr.

	* pmult/pmult.c (struct pmult_priv_data): New members: argc,
	argv.
	(macro_trans, meta_stage_trans, macrotab, macronames): New
	globals.
	(translate_macros0, translate_macros): New functions.
	(define_macros, define_macros_iter): New functions.
	(_cb_define, request_auth_macros): New functions.
	(pmult_cfg_param): New keyword `define-macro'.
	(pmult_free): Free argv.
	(pmult_negotiate): Use sm_pmfi_setmacs, if available.
	(pmult_connect, pmult_helo, pmult_mail, pmult_rcpt)
	(pmult_data, process_headers, pmult_eom): Use translate_macros.
	(main): Handle want_auth_macros.

	* configure.ac: Check for sm_pmfi_setmacs. This function should
	appear in meta1-1.0.PreAlpha28.0.

2008-10-30  Sergey Poznyakoff  <gray@gnu.org.ua>

	Bugfix

	* pmult/pmult.c (collect_headers): Bugfix, following changes
	dated 2008-10-14.

2008-10-29  Sergey Poznyakoff  <gray@gnu.org.ua>

	Improve string functions.

	* mfd/bi_string.m4 (index, rindex): Take an optional third
	argument, indicating where to start searching.
	* NEWS, doc/mailfromd.texi: Document changes to index and rindex.

2008-10-27  Sergey Poznyakoff  <gray@gnu.org.ua>

	Bugfixes

	* pmult/pmult.c (pmult_std_reply): Handle SMFIR_ACCEPT.
	* configure.ac, NEWS: Raise version patchlevel to 96
	* mfd/drivers.c (mark_type_asgn): Add a comment.
	* mfd/main.c (main): Do not try to start up if script_dump_xref
	was given.

2008-10-24  Sergey Poznyakoff  <gray@gnu.org.ua>

	* mflib/verp.mf: New file. * mflib/Makefile.am: Add verp.mf.

2008-10-22  Sergey Poznyakoff  <gray@gnu.org.ua>

	* gacopyz/server.c (gacopyz_srv_send_command): Fix arguments to gacopyz_io_log

	Fixes in Gacopyz server.

	* gacopyz/server.c (gacopyz_srv_abort): Reset state to srv_ready.
	(gacopyz_srv_helo): If called in srv_msgproc, reset the milter
	state by calling gacopyz_srv_abort before sending the command.
	(gacopyz_srv_envfrom): Likewise.

2008-10-21  Sergey Poznyakoff  <gray@gnu.org.ua>

	Pass auth macros to milter.

	* pmult/pmult.c: New configuration statement auth-macros.
	(pmult_negotiate): Request auth macros for PM_SMST_MAIL if
	auth-macros was requested.
	(pmult_mail): Translate auth macros if present.

	* gacopyz/server.c (gacopyz_srv_negotiate): Additional
	diagnostics.
	(gacopyz_srv_send_macros): Send macros only for those commands
	that do require them.
	(gacopyz_srv_send_command): Additional diagnostics.
	* gacopyz/gacopyz.c (gacopyz_context_loop): Additional diagnostics.

2008-10-16  Sergey Poznyakoff  <gray@gnu.org.ua>

	* pmult/pmult.c (_cb_log_level): Handle > level specifier (all levels from the given one up). * gacopyz/gacopyz.h (SMI_LOG_FROM): Handle n==0.

2008-10-15  Sergey Poznyakoff  <gray@gnu.org.ua>

	* pies/progman.c (env_setup): Port new implementation from Rush.

	* gnulib.modules: Add c-ctype
	* mtasim/mtasim.c, pies/pies.h, pmult/pmult.c, lib/parsetime.c,
	mfd/lex.l, mfd/gram.y, mfd/mailfromd.h, mfd/spf.c,
	mfd/bi_sprintf.m4, mfd/bi_io.m4, mfd/pp.c, mfd/main.c: Use c-ctype,
	instead of ctype. 

2008-10-14  Sergey Poznyakoff  <gray@gnu.org.ua>

	Minor improvement.

	* pmult/pmult.c (enum pmult_msg_state): Add more states.
	(collect_headers): Correctly handle end-of-message marker,
	even though it should never appear here.
	(pmult_msg_handler): Make sure the handler always processes first
	handlers, then body, even if some of these two is missing.

2008-10-13  Sergey Poznyakoff  <gray@gnu.org.ua>

	Bugfixes.

	* gacopyz/server.c (gacopyz_srv_eom): Reset state to srv_ready.

	Bugfixes.

	* mfd/engine.c (mlfi_eom): Destroy md->hdr.
	* pmult/pmult.c: Fix comment.
	* NEWS: Update.

2008-10-06  Sergey Poznyakoff  <gray@gnu.org.ua>

	Bugfix.

	* mfd/main.c (read_domain_file): Select first word from each
	line.  This allows to use meta1/mt.

2008-10-04  Sergey Poznyakoff  <gray@gnu.org.ua>

	Introduce "precious" components.

	* pies/pies.c (component_cfg_param): New configuration statement
	`precious'.
	* pies/progman.c (struct prog): New member `precious'.
	(register_prog): Set precious.
	(prog_start_dependencies): Do not mark disabled precious
	dependencies of a disabled component.
	* pies/pies.h (pies/pies.h): New member `precious'.
	* pies/pies.rcin (mcp): Mark as precious.

	Bugfix.

	* pies/pies.c (return_code_section_parser): Fix to work with tag
	of any type.
	* pies/pies.rcin: Minor change.

	Raise version number to 4.9.95.

	Terminate components in reverse order.

	* pies/pies.c (main): Do cleanup after main action processing and
	only if action == ACTION_CONT.
	* pies/progman.c (struct prog): New member `prev'.
	(link_prog): Maintain doubly-linked list.
	(prog_stop_dependent): Avoid printing diagnostics if there are
	no dependencies to be stopped.
	(prog_stop): Do nothing if prog->pid is zero.
	Do not call prog_stop_dependent, it will be done by
	progman_cleanup. 
	(prog_stop_all): Terminate components from last to first.
	* pies/pies.rcin: Improve example, by adding mcp component.

	Improvements in pies.

	* pies/pies.c (_cb_depend): Handle single string value.
	(_cb_retr): Fix diagnostic message.
	(_cb_facility): New function.
	(component_cfg_param): New statement `facility'.
	(component_section_parser): Initialize comp.facility to the
	default value.
	* pies/progman.c (struct prog): New member `facility'.
	(register_prog): Initialize facility.
	(open_retranslator): Use master->facility.
	* pies/pies.h (struct component): New member `facility'.

	Improvements in pies.

	* pies/pies.c (_cb_depend): Handle single string value.
	(_cb_retr): Fix diagnostic message.
	(_cb_facility): New function.
	(component_cfg_param): New statement `facility'.
	(component_section_parser): Initialize comp.facility to the
	default value.
	* pies/progman.c (struct prog): New member `facility'.
	(register_prog): Initialize facility.
	(open_retranslator): Use master->facility.
	* pies/pies.h (struct component): New member `facility'.

2008-10-03  Sergey Poznyakoff  <gray@gnu.org.ua>

	Bugfix.

	* pies/progman.c (register_prog): Remove stray semicolon.
	(retr_exit): Use _exit.
	(prog_stop_dependent): Bugfix: stop retranlators as well as
	components.

2008-09-29  Sergey Poznyakoff  <gray@gnu.org.ua>

	Remove unused vars

	Set patchlevel 94

	Fix MU configuration file support.

	* lib/libmf.h (config_array_to_argv)
	(config_array_to_string, config_cb_timeout): new prototypes.
	* lib/utils.c: New
	* lib/Makefile.am (libmf_a_SOURCES): Add utils.c
	* mfd/gram.y (defer_initialize_variable): Both args are const.
	* mfd/mailfromd.h (defer_initialize_variable)
	(add_include_dir): Change signatures.
	* mfd/pp.c (add_include_dir): Arg is const.
	* pies/pies.c, pmult/pmult.c, mfd/main.c: Rewrite configuration
	file support to match changes in Mailutils.

2008-09-20  Sergey Poznyakoff  <gray@gnu.org.ua>

	Improve stack memory management.

	* mfd/gram.y (strtosize, get_stack_max, get_stack_incr)
	(get_stack_size): New functions.
	(pragma_stacksize): Rewrite. Take maximum stack size as an optional third
	argument.
	* mfd/mailfromd.h (stack_max_size): New declaration.
	(stack_max_size): New function.
	(expand_dataseg): Signal exception if new memory size would be greater than
	the stack size limit.
	* NEWS, doc/mailfromd.texi: Update.

	Improve stack memory management.

	* mfd/gram.y (strtosize, get_stack_max, get_stack_incr)
	(get_stack_size): New functions.
	(pragma_stacksize): Rewrite. Take maximum stack size as an optional third
	argument.
	* mfd/mailfromd.h (stack_max_size): New declaration.
	(stack_max_size): New function.
	(expand_dataseg): Signal exception if new memory size would be greater than
	the stack size limit.
	* NEWS, doc/mailfromd.texi: Update.

2008-09-19  Sergey Poznyakoff  <gray@gnu.org.ua>

	Implement two stack growth policies.

	* mfd/gram.y (pragma_stacksize): Implement two stack growth
	policies.
	* mfd/mailfromd.h (enum stack_expand_policy): New enum.
	(stack_expand_incr, stack_expand_policy): New global variables.
	* mfd/prog.c (stack_expand_incr)
	(stack_expand_policy): New global variables.

	* NEWS: Update.
	* doc/mailfromd.texi (stacksize): Document changes to pragma
	stacksize. 
	* doc/values.texi (STACK-INCR): New value.

2008-09-18  Sergey Poznyakoff  <gray@gnu.org.ua>

	Fix typo

	Implement new last_poll_ variables.

	* doc/mailfromd.texi: Document new variables.
	* mfd/engine.c (check_on_host, method_strict, method_standard):
	Implement last_poll_helo and last_poll_greeting variables,
	proposed by Jan Rafaj.

	* Makefile.am: Implement a dist-hook, preventing distributing an unfinished NEWS file. * doc/mailfromd.texi: Document new mfl-mode customization variables. Add missing index entries. * NEWS: Update. * elisp/mfl-mode.el: Improve auto-indentation support.

2008-09-17  Sergey Poznyakoff  <gray@gnu.org.ua>

	Minor fix.

	* Makefile.am (dist-hook): New rule. Test for leftover FIXMEs in NEWS.

	Minor improvement.

	* mfd/bi_getopt.m4 (opterr, optopt): New globals.
	(getopt): Handle opterr and optopt.
	(MF_INIT): Initialize opterr to 1.

	* mfd/bi_getopt.m4 (getopt): Use | as a short/long option separator. Make sure optind/optarg are set before returning EOF. * mfd/gram.y (mailfromd_run): Remove superfluous call to env_leave_frame. * mfd/drivers.c (mark_type_argx, mark_type_vaptr): New functions. * mfd/prog.c (env_vaptr): Cast the result. * mfd/main.c (argpflag): Understand abbreviated forms of the --run option.

	* mfd/bi_db.m4 (dbfirst, dbnext, dbkey, dbvalue): New functions
	(proof of concept).

2008-09-16  Sergey Poznyakoff  <gray@gnu.org.ua>

	Implement functions with variable number of arguments and 'run' mode.

	* mfd/symtab.c (function_install): Take additional argument.
	* mfd/lex.l: New tokens `vaptr', `...' and ARGX.
	* mfd/snarf.m4 (MF_VASTRING): New define.
	* mfd/gram.y: Handle functions with variable number of arguments,
	$(expr), and vaptr() expressions.  This raises shift/reduce
	expectation to 29 conflicts. 
	(parmtype_function): Return dtype_string for
	arguments from vararg list.
	(FUNC_HIDDEN_ARGS): Return 1 if f->varargs is set.
	(type_to_string): Handle pointer argument.
	(function_call): Handle function->varargs.
	(node_type): Handle node_type_argx, and node_type_vaptr.
	(cast_arg_list): Handle variable number of arguments.
	(cast_to): Handle dtype_pointer as dtype_number.
	* mfd/drivers.c (argx, vaptr): New node types.
	(code_type_call): Handle variable number of arguments.
	(code_cast): Handle dtype_pointer as dtype_number.
	* mfd/mailfromd.h (MAILFROMD_RUN): New define.
	(struct argx_node): New type.
	(struct node): Add argx_node.
	(struct function): New member `varargs'.
	(function_install): Add varargs.
	(mailfromd_run): New prototype.
	* mfd/prog.c (env_vaptr, env_get_reg): New functions.
	(env_make_frame0): New function.
	(instr_xmemstk): New instruction handler.
	* mfd/opcodes (XMEMSTK): New opcode.
	* mfd/prog.h (env_get_reg, env_vaptr): New protos.
	* mfd/main.c (options): New option `--run'.
	(main): Handle `run' mode.
	* mfd/Makefile.am (M4_FILES): Add bi_getopt.m4.
	* NEWS: Update.

2008-09-15  Sergey Poznyakoff  <gray@gnu.org.ua>

	Add a test suite for aliases.

	* tests/alias.at: New file.
	* tests/Makefile.am (TESTSUITE_AT): Add alias.at 
	* tests/testsuite.at: Add alias.at.

	* elisp/mfl-mode.el (mfl-next-line-indentation) (mfl-find-line-indentation): Fix computations for `alias', `returns' and for comment lines. (mfl-returns-offset, mfl-comment-offset): New customization variables.

	Add sav.mf

	Minor fix

	* elisp/mfl-mode.el (mfl-mode): Make compile-command buffer-local.

	Implement function aliases.

	* mfd/symtab.c (struct alias): New data type.
	(union symentry): New member `alias'.
	(lookup_or_install): Remove erroneous condition, introduced in
	r1627 (branches/release_4_3_patches), which caused third
	argument (install) to be ignored if SYM_BITS was set in state.
	(function_install, function_lookup): Account for aliases.
	(install_alias): New function.
	* mfd/lex.l (alias): New keyword.
	* mfd/gram.y: Allow to define function aliases.
	* mfd/mailfromd.h (SYM_ALIAS): New define.
	(install_alias): New proto.

	* doc/mailfromd.texi: Document function aliases.
	* doc/NEWS: Likewise.

	* elisp/mfl-mode.el (mfl-mfd-command): Change command name.
	(mfl-keywords): Add alias.

2008-09-09  Sergey Poznyakoff  <gray@gnu.org.ua>

	Version 4.9.93

	* configure.ac: Version 4.9.93
	* NEWS: Likewise.
	* pies/pies.c: Change description.

2008-09-08  Sergey Poznyakoff  <gray@gnu.org.ua>

	* mfd/prog.c (instr_stkalloc): Expand stack segment if needed.

2008-08-17  Sergey Poznyakoff  <gray@gnu.org.ua>

	Bugfixes. * mflib/pp-setup (_, N_): If used without arguments, insert _ and N_ verbatim. * README: Update. * tests/Makefile.am (clean-local): Fix rule. * configure.ac: Fix check for res_query.

	* mfd/engine.c (mailfromd_daemon): Use mailfromd_umask instead of
	a hardcoded value.
	* mfd/mailfromd.h (mailfromd_umask): New prototype.
	* mfd/main.c (mailfromd_umask): New fucntion.
	* mfd/bi_system.m4 (umask): New built-in function.
	* gacopyz/gacopyz.c (do_connect): Ensure umask 0117 when binding
	the socket.

	* doc/mailfromd.texi: Improve usage of @deffn.
	(System functions): Document umask.

2008-07-04  Sergey Poznyakoff  <gray@gnu.org.ua>

	Implement mailbox_append_message built-in function.

	* NEWS, doc/mailfromd.texi: Document mailbox_append_message.  Document new
	semantics of `a' and `a+' in mailbox_open.
	* mfd/bi_msg.m4 (bi_message_from_descr): New function.
	* mfd/bi_body.m4 (current_message): Fix return value.
	* mfd/bi_mbox.m4 (mailbox_open): Discern between `a' and `a+'.
	(mailbox_append_message): New function.
	* mfd/msg.h (bi_message_from_descr): New prototype.

2008-06-26  Sergey Poznyakoff  <gray@gnu.org.ua>

	* pies/pies.h: Include stdint.h * configure.ac: Fix checking for libresolv.

2008-06-22  Sergey Poznyakoff  <gray@gnu.org.ua>

	Minor fixes.

	* doc/mailfromd.texi: Fix a typo.
	* mfd/prog.c: Fix comment.
	* gacopyz/server.c: Fix erroneous range checking condition.

2008-05-15  Sergey Poznyakoff  <gray@gnu.org.ua>

	Fixup C variables that point to dataseg after expanding it. Bug reported by Sergey Afonin.

	* mfd/snarf.m4 (mf_c_argdcl): Produce only C declarations.
	(mf_c_arginit): New macro.
	(__mf_c_argdcl_list,__mf_c_arginit_list): New auxiliary macros.
	(__mf_c_arglist): Rewrite using the above macros.
	(mf_c_arglist,MF_VA_ARG): Reflect changes to get_.*_arg functions.
	* mfd/bi_sprintf.m4: Update invocations of MF_VA_ARG.
	* mfd/prog.c (struct eval_environ): New members auto_ptr and
	numautos.
	(env_register_auto, env_unregister_autos, env_fixup_autos): New
	functions.
	(expand_dataseg): Call env_fixup_autos.
	(get_literal, get_string_arg): Change signature. Call
	env_register_auto. All callers updated.
	(get_numeric_arg): Change signature for consistency with other
	get_ functions. All callers updated.
	(get_pointer_arg): New function.
	(eval_environment): Call env_unregister_autos after running each
	instruction.
	* mfd/prog.h (get_pointer_arg): New function.
	(get_string_arg, get_numeric_arg): Change prototypes.
	* mfd/bi_sieve.m4: Minor stylistic fix.
	* NEWS: Update.

	* mfd/drivers.c (code_cast): Handle dtype_pointer

2008-04-13  Sergey Poznyakoff  <gray@gnu.org.ua>

	New builtins: message_size, message_body_size and message_header_size

2008-04-05  Sergey Poznyakoff  <gray@gnu.org.ua>

	Version 4.9.92

	svn:ignore .references

	* mtasim/mtasim.c: New command line options --user and --group. * doc/mailfromd.texi, doc/mtasim.texi, NEWS: Update.

	Introduce MU interface functions.

	* mfd/bi_msg.m4, mfd/bi_mbox.m4, mfd/msg.h: New files.
	* mfd/Makefile.am: Add new files.
	* mfd/bi_string.m4 (substring): 3rd argument can be negative.
	* mfd/bi_body.m4 (current_message): New function.
	* NEWS: Update.

2008-04-02  Sergey Poznyakoff  <gray@gnu.org.ua>

	* doc/mailfromd.texi: Document changes to prog body.

	Add new MFL datatype `POINTER' and convert `body' handler to take first argument of that type. Provide a function for converting POINTER to STRING.

	* mfd/Makefile.am (M4_FILES): Add bi_body.m4
	* mfd/bi_body.m4: New file.

	* mfd/engine.c (mlfi_body): Pass bodyp as a generic pointer.
	* mfd/snarf.m4 (__mf_argtype, __mf_ctype, __mf_c_getarg)
	(__mf_printf_type): Handle new data type POINTER.
	* mfd/gram.y (state_parms): Change type of the first parameter
	to body to dtype_pointer.
	(cast_to): Handle dtype_pointer.
	* mfd/mailfromd.h (data_type_t): New type dtype_pointer.
	(env_push_pointer): New function.
	* mfd/prog.c (env_push_pointer): New function.
	* mfd/prog.h (get_pointer_arg): New macro.
	* NEWS: Update.	

	Bugfixes:

	* mtasim/mtasim.c (get_input_line): Make sure the return line 
	always terminates with a newline.
	(smtp): Remove erroneous break.
	* mfd/symtab.c (variable_replace): Maintain correct value of
	newvar->owner.
	* mfd/pp.c (push_source): Prevent coredump on the first call.

2008-03-12  Sergey Poznyakoff  <gray@gnu.org.ua>

	* doc/Makefile.am (check-refs, check-fixmes): Print correct locations for multiple input files. Return a meaningful error code. * TODO: Update.

	Rewrite the bootstrap suite.

	* README-alpha: Rewritten.
	* bootstrap.conf: Rewritten.
	* bootstrap: Slightly modified version from gnulib.
	* gnulib.modules, README-hacking: New files.
	* doc/mailfromd.texi: Minor fix.

2008-03-11  Sergey Poznyakoff  <gray@gnu.org.ua>

	Fix handling of handler/handler name clashes.

	* mfd/drivers.c (code_type_progdecl): Warn if a header is
	redeclared.
	* doc/mailfromd.texi: Document resolving of handler/handler name
	clashes. 

2008-03-10  Sergey Poznyakoff  <gray@gnu.org.ua>

	Added missing acknowledgments

	Update

	* mflib/strip_domain_part.mf, mflib/heloarg_test.mf, mflib/gettext.mf, mflib/valid_domain.mf, mflib/spf.mf, mflib/match_cidr.mf, mflib/is_ip.mf, mflib/safedb.mf4, mflib/dns.mf4: Indent using mfl-mode.

	* mflib/match_dnsbl.mf, mflib/match_rhsbl.mf: Indent using
	mfl-mode. Remove m4 conditionals.

	* mflib/strip_domain_part.mf, mflib/heloarg_test.mf, mflib/gettext.mf, mflib/valid_domain.mf, mflib/spf.mf, mflib/match_cidr.mf, mflib/is_ip.mf, mflib/safedb.mf4, mflib/dns.mf4: Indent using mfl-mode.

	* mflib/match_dnsbl.mf, mflib/match_rhsbl.mf: Indent using
	mfl-mode. Remove m4 conditionals.

	Port r1632 of branches/release_4_3_patches.

2008-03-05  Sergey Poznyakoff  <gray@gnu.org.ua>

	Use ngettext

2008-03-04  Sergey Poznyakoff  <gray@gnu.org.ua>

	Minor fixes in translatable strings

2008-03-01  Sergey Poznyakoff  <gray@gnu.org.ua>

	Ported r1619 from branches/release_4_3_patches.

	* src/prog.c, src/prog.h (advance_pc): Fix type of the 2nd
	argument.
	* configure.ac: Use AC_TRY_LINK to check for libresolve.
	* THANKS: Update	
	* NEWS: Update

2008-02-26  Sergey Poznyakoff  <gray@gnu.org.ua>

	* pies/pies.c: New configuration statement "chdir". * pies/progman.c (struct prog.v.p): New member `dir'. (register_prog): Initialize newp->v.p.dir; (prog_start): Change to the working directory, if required by config.

2008-02-21  Sergey Poznyakoff  <gray@gnu.org.ua>

	Update

	* mfd/main.c (mf_error_on_locus): Mark as printflike. (cb_milter_timeout): Fix format. (mf_cfg_param): Fix erroneous description of include-path.

2008-02-10  Sergey Poznyakoff  <gray@gnu.org.ua>

	Merged HEAD from branches/gmach

	* README, configure.ac, NEWS: Update * src/version.c: Update copyright years. * doc/mailfromd.texi

2008-02-09  Sergey Poznyakoff  <gray@gnu.org.ua>

	* THANKS: Add Tom Lynch. Obfuscate email addresses.

2008-02-06  Sergey Poznyakoff  <gray@gnu.org.ua>

	* src/dnsbase.c: Define MAX, if necessary. * src/mailfromd.h: Define INADDR_NONE. * configure.ac: Check for librt. Add auth to AM_GNU_MAILUTILS. * gacopyz/gacopyz.c (do_connect): Fix typo. * bootstrap (MODLIST): Add vasprintf.

	configure.ac: Check for libsocket and libnsl.

	* src/dnsbase.c (dns_resolve_hostname,a_lookup): Change initialization of domainbuf. * src/syslog_async.c: Include fcntl.h.

2008-02-04  Sergey Poznyakoff  <gray@gnu.org.ua>

	* configure.ac: Check for locale.h * src/db.c, src/bi_sprintf.m4, src/prog.c, src/bi_db.m4, src/engine.c: Fix format arguments (ported from branches/gmach@{2008-01-28 and 2008-01-09). * src/main.c, src/mtasim.c: Include locale.h

2008-01-21  Sergey Poznyakoff  <gray@gnu.org.ua>

	* src/symtab.c: Ported r1584 from branches/gmach. * NEWS: Update. * doc/mailfromd.texi: Updated. * configure.ac: Version 4.3 (preparing for the release).

2008-01-15  Sergey Poznyakoff  <gray@gnu.org.ua>

	Ported r1556 from branches/gmach.

	* src/gram.y (DELETE string): Initialize hdr.value.
	* src/drivers.c (code_type_header): Value can be NULL.

	Fix compatibility with MU CVS:

	* src/main.c: Use mu_log_facility.
	* src/mtasim.c [MAILUTILS_VERSION_NUMBER > 1290]: Include
	gettext.h, define _ and N_.
	* configure.ac: Check for mu_log_facility.

2007-12-28  Sergey Poznyakoff  <gray@gnu.org.ua>

	* src/Makefile.am (libmf_a_DEPENDENCIES): Add BUILD_SYSLOG_ASYNC

2007-12-13  Sergey Poznyakoff  <gray@gnu.org.ua>

	(mf_cfg_param): Add docstrings.

	Ported r1536 from branches/release_4_2_patches (= r1535 from tags/release_4_2):

2007-12-12  Sergey Poznyakoff  <gray@gnu.org.ua>

	Reflect recent changes to Mailutils.

2007-11-22  Sergey Poznyakoff  <gray@gnu.org.ua>

	* src/main.c: Implement MU configuration statements. * tests/atlocal.in (MFOPTS): Ignore site-wide and per-user configuration files. * doc/mailfromd.texi: Document sieve interface.

	Update

2007-11-21  Sergey Poznyakoff  <gray@gnu.org.ua>

	* src/bi_io.m4 (write): Implement optional third argument. * src/bi_sieve.m4: New file. * src/mailfromd.h (vlogmsg): New proto. * src/main.c (capa): Request "common" capability. (main): Register all mailbox formats (needed for sieve). * src/Makefile.am (M4_FILES): Add bi_sieve.m4 * src/mtasim.c (process_header): chop trailing newline. * mflib/sieve.mfh: New file. * mflib/Makefile.am (inc_DATA): Add sieve.mfh. * configure.ac: Set patchlevel 90. (AM_GNU_MAILUTILS): Request 'all' and 'sieve' link flags. * doc/mailfromd.texi: Document 3rd argument of write. * NEWS: Update.

	* src/bi_io.m4 (write): Implement optional third argument. * src/bi_sieve.m4: New file. * src/mailfromd.h (vlogmsg): New proto. * src/main.c (capa): Request "common" capability. (main): Register all mailbox formats (needed for sieve). * src/Makefile.am (M4_FILES): Add bi_sieve.m4 * src/mtasim.c (process_header): chop trailing newline. * mflib/sieve.mfh: New file. * mflib/Makefile.am (inc_DATA): Add sieve.mfh. * configure.ac: Set patchlevel 90. (AM_GNU_MAILUTILS): Request 'all' and 'sieve' link flags. * doc/mailfromd.texi: Document 3rd argument of write. * NEWS: Update.

2007-11-19  Sergey Poznyakoff  <gray@gnu.org.ua>

	* README-alpha: Update * configure.ac: Use AM_GNU_MAILUTILS. * acinclude.m4: Minor fix.

	* smap: New directory. * smap/smap.c: New file. A general-purpose socket map for MeTA1 (for future use).

	* src/mu_dbm.c [WITH_GDBM]: do not bail out if the database does not exist. * src/mailfromd.h: Add argp.h * src/bi_sa.m4: Minor fixes. * src/main.c: Support for Mailutils CVS HEAD. * configure.ac: Likewise.

2007-11-11  Sergey Poznyakoff  <gray@gnu.org.ua>

	* src/engine.c (check_on_host): Wait for an answer to QUIT. Fix courtesy of Nacho Gonzalez Lopez. * src/bi_sa.m4: Revert the changes inadvertently pushed on 2007-10-21. * doc/Makefile.am: Use texi2html to produce HTML version of the manual. * doc/gendocs_template: Likewise * doc/gendocs.sh: Remove. Changes incorporated into the Texinfo repository. * doc/gendocs_template: Use conditionals, introduced in the Texinfo CVS.

2007-10-30  Sergey Poznyakoff  <gray@gnu.org.ua>

	(domain_name_cmp): Yet another bugfix

2007-10-29  Sergey Poznyakoff  <gray@gnu.org.ua>

	(domain_name_cmp): Allow for trailing dot after domain.

2007-10-23  Sergey Poznyakoff  <gray@gnu.org.ua>

	Generate html docs using texi2html

	Reimplement syslog-async. Thanks Simon Kelley for relicensing it under GPLv3.

2007-10-21  Sergey Poznyakoff  <gray@gnu.org.ua>

	s/assing_locus/assign_locus/

	* src/dnsbase.c (cname_loop_body): Return TXT only if explicitly required. Bug reported by Jan Rafaj.

	* src/engine.c: Fix timeout calculations (struct timeout_ctl): New data type (UPDATE_TTW,smtp_stream_wait,smtp_wait): Operate on struct timeout_ctl. All callers updated. (init_timeout_ctl): New function.

2007-10-12  Sergey Poznyakoff  <gray@gnu.org.ua>

	Update

	* src/mtasim.c (_def_read): Return 0 if zero bytes were read (get_input_line): Fix counting of input bytes. (smtp): Fix checking for returns from process_data_reply. * gacopyz/server.c (srv_format_macros): Do not add trailing zero to the packet.

2007-10-10  Sergey Poznyakoff  <gray@gnu.org.ua>

	* src/mailfromd.h [!ENABLE_NLS] (bindtextdomain): Fix definition. * src/cache.c (cache_get2): Fix misplaced variable definition.

	* src/dnsbase.c (dns_resolve_hostname): Remove stray free, left over after 2007-09-03.

2007-09-13  Sergey Poznyakoff  <gray@gnu.org.ua>

	Bugfix

	Fix MU version detection

2007-09-12  Sergey Poznyakoff  <gray@gnu.org.ua>

	(log_setup): Set up gacopyz_syslog_log_printer when logging to syslog.

2007-09-11  Sergey Poznyakoff  <gray@gnu.org.ua>

	* src/mu_dbm.c [WITH_GDBM] (mu_dbm_firstkey,mu_dbm_nextkey): Return MU_ERR_NOENT instead of MU_ERR_FAILURE. * src/mailfromd.h (get_rate): New argument mincount * src/rate.c: Likewise * src/bi_other.m4 (rate): Optional argument mincnt * src/mtasim.c: Accept MAIL FROM: and RCPT TO: without extra space after `:'. * doc/mailfromd.texi, NEWS: Update

2007-09-06  Sergey Poznyakoff  <gray@gnu.org.ua>

	Update

2007-09-03  Sergey Poznyakoff  <gray@gnu.org.ua>

	Update

	* src/dnsbase.c (dns_resolve_hostname): Make name buffer big enough to hold eventual CNAME expansions. Reporte by Jan Rafaj. * configure.ac: Improve to compile with the latest MU CVS.

2007-08-11  Sergey Poznyakoff  <gray@gnu.org.ua>

	Update

	Update

2007-08-10  Sergey Poznyakoff  <gray@gnu.org.ua>

	Update

	(a_lookup): Make name buffer big enough to hold eventual CNAME expansions.

	Update

	* src/gram.y (on_cond): Fix coredump if target address is not specified. (vardecl): Signal error if an auto variable is doubly defined. * tests/testsuite.at (EX_OK--EX_CONFIG): New defines (MF_CHECK_TEXT): New macro Add poll04.at and ashadow.at * tests/ashadow.at, tests/poll04.at: New files * doc/mailfromd.texi: Minor fixes

2007-08-09  Sergey Poznyakoff  <gray@gnu.org.ua>

	Use URL instead of FSF address in copyright statements

	Update

	Update

2007-06-30  Sergey Poznyakoff  <gray@gnu.org.ua>

	Relicense under the GPLv3

2007-06-14  Sergey Poznyakoff  <gray@gnu.org.ua>

	Minor fixes

	Bugfixes

2007-06-11  Sergey Poznyakoff  <gray@gnu.org.ua>

	Version 4.1

	(next_line): Bugfix

2007-06-08  Sergey Poznyakoff  <gray@gnu.org.ua>

	Update

2007-06-07  Sergey Poznyakoff  <gray@gnu.org.ua>

	Update

2007-06-06  Sergey Poznyakoff  <gray@gnu.org.ua>

	Update

2007-06-01  Sergey Poznyakoff  <gray@gnu.org.ua>

	Fix line counting within here-documents

2007-05-29  Sergey Poznyakoff  <gray@gnu.org.ua>

	Update

	Update

	Bugfixes

	Update

2007-05-27  Sergey Poznyakoff  <gray@gnu.org.ua>

	Improve mfl-mode

2007-05-26  Sergey Poznyakoff  <gray@gnu.org.ua>

	Initial implementation

	Add framework for Emacs MFL Major Mode

2007-05-25  Sergey Poznyakoff  <gray@gnu.org.ua>

	Minor fix

	Minor fix

	Lots of critical bugfixes

2007-05-24  Sergey Poznyakoff  <gray@gnu.org.ua>

	Minor rename/cleanup

	Further fixes

	Improve docs

	Implement NLS support

	Finish implementing sprintf

	Almost implemented sprintf

2007-05-23  Sergey Poznyakoff  <gray@gnu.org.ua>

	Support for built-in functions with varying number of arguments. Implement a limited version of sprintf.

	Update

2007-05-22  Sergey Poznyakoff  <gray@gnu.org.ua>

	Build mflib/dns.mf and mflib/safedb.mf from M4 sources

	Discontinue supporting &code (specifying an exception code) Implement $# and @parm, which expands to the ordinal number of a parameter:

	  func foo(string x ; number y)
	  do
	      echo @y
	  done

	gives 1.

	(__mf_defined_argname): Bugfix

	Add missing comments

	Arguments are passed in the same order for both built-in and MFL-level functions.

	If a builtin takes optional arguments, the actual number of arguments is
	passed in a hidden first argument.  This allows to discern between zero 
	arguments (emtpy strings) and absent arguments.

2007-05-20  Sergey Poznyakoff  <gray@gnu.org.ua>

	Bugfixes

	Improve external preprocessor usage

	Bugfix

	Implement built-in and external preprocessors

	Update

	(listens_on): port argument was ignored

2007-05-18  Sergey Poznyakoff  <gray@gnu.org.ua>

	Fix a typo

2007-05-17  Sergey Poznyakoff  <gray@gnu.org.ua>

	Update

	(listens): Bugfix

	Update

	Set exec property

	 Get translations from the TP.

	Generated automatically

	Move to po repository

	Move to po repository

2007-05-16  Sergey Poznyakoff  <gray@gnu.org.ua>

	Update

	Add missing NLS markers

	Save namespace from pollution: Use m4_ prefixed keywords.

	Update

	Update

	(mailfromd_daemon): Leave the first three descriptors open before attemtping to restart

	(instr_symbol): Add missing NLS marker.

	(EXTRA_DIST): Add daemon.c

	Fix typo

2007-05-15  Sergey Poznyakoff  <gray@gnu.org.ua>

	(debug_level_p): Change logic so that per-module specification takes precedence over the global one

	NLS-related fixes; Version no. 4.0.90

2007-05-14  Sergey Poznyakoff  <gray@gnu.org.ua>

	Update

	Update

2007-05-13  Sergey Poznyakoff  <gray@gnu.org.ua>

	Forgotten autopoint

	Mailfromd goes international

2007-05-12  Sergey Poznyakoff  <gray@gnu.org.ua>

	Remove the note about the openat-die patch.  It is already in gnulib

	Add release date

	Fix typo

	Final update

	Update for the recent gnulib changes

2007-05-11  Sergey Poznyakoff  <gray@gnu.org.ua>

	start cindexes with a lower case letter

	Change svn:ignore

	Use new version output format. Prepare for 4.0

2007-05-10  Sergey Poznyakoff  <gray@gnu.org.ua>

	Minor fixes

2007-05-08  Sergey Poznyakoff  <gray@gnu.org.ua>

	Bugfix

	[WITH_BDB] (mu_dbm_open): Locking mode depends on the open flags.

2007-05-06  Sergey Poznyakoff  <gray@gnu.org.ua>

	Update

	Update

	update

2007-05-05  Sergey Poznyakoff  <gray@gnu.org.ua>

	Update

	Fixup pidfile and portspec according to state directory settings

	Fix overfull boxes

	Update

	Update

2007-05-04  Sergey Poznyakoff  <gray@gnu.org.ua>

	Update

	Fixes

	SIGHUP instructs `mailfromd' to restart itself. Remove UNIX socket after closing it.

2007-05-02  Sergey Poznyakoff  <gray@gnu.org.ua>

	Update

	(mu_dbm_strerror): Improve error logging

2007-05-01  Sergey Poznyakoff  <gray@gnu.org.ua>

	(lock_file): fcntl can return non-null values. Retry if F_GETLK returns F_UNLCK (mu_dbm_open): Always use O_RDWR if the file could need to be locked for writing afterwards.

	Fixes

	Ensure begin blocks can set exception handlers

2007-04-30  Sergey Poznyakoff  <gray@gnu.org.ua>

	Fix typo

	Use inner context to check for action usage in begin/end blocks.  This allows to define global catches.

	Update

	Update

2007-04-28  Sergey Poznyakoff  <gray@gnu.org.ua>

	Minor wording fixes

	fix typo

	Bugfixes

2007-04-27  Sergey Poznyakoff  <gray@gnu.org.ua>

	update

	Implement begin/end statements.  Allow to disable/enable caching

	Improve locking algorithm

2007-04-26  Sergey Poznyakoff  <gray@gnu.org.ua>

	Fix typo

	Update

	Shut up gcc warnings and fix minor issues

2007-04-25  Sergey Poznyakoff  <gray@gnu.org.ua>

	Fix typos

		* NEWS: Update 	* src/lex.l (parse_require): Bugfix 	* mflib/heloarg_test.mf, mflib/spf.mf: Begin the names of the static 	functions with __ 	* doc/Makefile.am (check-refs): Scan all texi sources 	(check-mflib): Ignore static names (__.*) 	* doc/mailfromd.texi, doc/mtasim.texi, doc/macros.texi: Update.

	update

2007-04-24  Sergey Poznyakoff  <gray@gnu.org.ua>

		* src/lex.l (parse_require): Bugfix 	* src/bi_mail.m4: Bugfix 	* src/mtasim.c: Implement help, fix directory removal at exit, 	implement readline history file.  Bugfixes in smtp() 	* tests/testsuite.at, tests/accept.at, tests/greylist.at, 	tests/arg.at, tests/reject.at, tests/numrcpt.at, 	tests/tempfail.at: Use mtasim -Xauto when necessary 	* configure.ac, NEWS: Raise patchlevel to 92 	* doc/mailfromd.texi: Update 	* doc/mtasim.texi: mtasim documentation 	* doc/Makefile.am: Add mtasim.texi 	* gacopyz/gacopyz_priv.h (struct gacopyz_conn): Keep information 	about children pids 	* gacopyz/proc.c (gacopyz_register_child) 	(gacopyz_unregister_child): New functions 	(cleanup_children): Call gacopyz_unregister_child 	(gacopyz_cleanup_conn): Terminate children individualy instead of 	sending TERM to the whole process group, because we might be not 	the group leader. 	* gacopyz/gacopyz.c (gacopyz_handle_connection): Register child 	pid after startup. 	* bootstrap: Require save-cwd.  Test if lib/daemon.c exists before 	attempting to create it.

2007-04-23  Sergey Poznyakoff  <gray@gnu.org.ua>

	implement mtasim --port=auto

	Update

	update

	Introduce the module system

2007-04-21  Sergey Poznyakoff  <gray@gnu.org.ua>

	update

	Reimplement debugging macros and supporting functions

	Provide a patch for Sendmail to honor extended codes and textual messages returned by the connect handler.

	Improve logging

2007-04-20  Sergey Poznyakoff  <gray@gnu.org.ua>

	Implement asyncronous syslog

2007-04-18  Sergey Poznyakoff  <gray@gnu.org.ua>

	Fix typo

	Document new macros

	When possible lock BDB databases directly. For version 2.x fall back to external lock method. Fix handling of optional variables in built-in functions.

	Implement stack traces

	Update

	Use <> in #include statements

2007-04-17  Sergey Poznyakoff  <gray@gnu.org.ua>

	Bug fixes

2007-04-16  Sergey Poznyakoff  <gray@gnu.org.ua>

	Fix Milter packet length calculation & redo Berkeley DB locking

	Update

	(instr_restex): Fix stack addressing (broken after 2007-04-01).  Add trace output.

2007-04-12  Sergey Poznyakoff  <gray@gnu.org.ua>

	Re-implement database locking for Berkeley DB

	        * src/mu_dbm.c, src/mu_dbm.h (mu_dbm_strerror): New function         (mu_dbm_firstkey, mu_dbm_nextkey): Change signature 	* src/dnscache.c, src/db.c, src/cache.c, src/rate.c, 	src/bi_db.m4: Update for new mu_dbm interface.

2007-04-11  Sergey Poznyakoff  <gray@gnu.org.ua>

	Provide a special exception type for unresolved sendmail macros.

2007-04-04  Sergey Poznyakoff  <gray@gnu.org.ua>

	Document SPF functions

	Update

2007-04-03  Sergey Poznyakoff  <gray@gnu.org.ua>

	(mlfi_connect): Fix invocation of a wrong header

	(mlfi_abort): Do not call filter_cleanup

	(env_final_gc): Top heap limit is inclusive

	Bug fixes

	Minor fix

	Bugfixes

2007-04-02  Sergey Poznyakoff  <gray@gnu.org.ua>

		* src/gram.y (loop_parm): Is a stmtlist 	* src/prog.c (instr_echo): Pop the argument

2007-04-01  Sergey Poznyakoff  <gray@gnu.org.ua>

	Implement loop statement

	(s_off_cmp): Revert sorting order to match that of heap growth.

	Minor changes

	Update

	Revert stack growth direction. Expand stack as the need arises.

	(dataseg_layout): Make sure all global variables are subject to final_gc

2007-03-31  Sergey Poznyakoff  <gray@gnu.org.ua>

	Switch to flat address space model. Data space (and stack) contain only references to objects within the data space (virtual addresses), no actual pointers are passed.

	* src/snarf.m4 (MF_ALLOC_HEAP, MF_COPY_STRING): Take two arguments
	(MF_BEGIN_TEMP_SPACE): Use env_data_ref
	(MF_VAR_SET_STRING): New macro
	* src/bi_poll.m4, src/bi_string.m4, src/bi_dns.m4, src/bi_spf.m4, 
	src/bi_sa.m4, src/bi_vars.m4, src/bi_db.m4: Use new heap
	allocation macros.
	* src/drivers.c (code_memref, code_type_string): Use opcode_push
	(code_type_variable): Remove opcode_svalidate. This time for good
	* src/mailfromd.h (env_throw_0): Change signature
	* src/prog.c (struct eval_environ.stack): Remove. Use plain
	addressing model. All references updated.
	(env_reference,env_var_ref): Remove
	(heap_reserve_words, heap_reserve): Return offset into the data
	space instead of the pointer. All uses updated.
	(env_data_ref): New function
	* src/opcodes (MEMEXT,MEM,SVALIDATE): Remove
	* src/prog.h (env_data_ref): New function
	(heap_reserve_words): New function
	(heap_reserve): Return size_t
	* TODO: Update

	Use different argument accessors for different argument types

	(_fixup): Set .compile

	Update svn:ignore

	Reverted unintentionally applied changes

	Update svn:ignore

	Update svn:ignore

	Use reserved rt_regex slots for dynamically compiled regular expressions.

2007-03-28  Sergey Poznyakoff  <gray@gnu.org.ua>

	mtasim supports standard options

	mtasim supports standard options

	Update

	Prepare the instruction set for array data type: remove PUSH_LITERAL, PUSH_IMMEDIATE, VARIABLE, AUTO, ARG; introduce instead MEM, MEMSTK, MEMEXT, DEREF; Change semantics of ASGN

	Update

	Update

2007-03-27  Sergey Poznyakoff  <gray@gnu.org.ua>

	Bugfix

	Reimplement pre-compiled regular expressions

2007-03-24  Sergey Poznyakoff  <gray@gnu.org.ua>

	Update

	Update

	Updat

	Switch to Autotest based testsuite

2007-03-22  Sergey Poznyakoff  <gray@gnu.org.ua>

	Remove `next' node type

	Rework code generation rules

2007-03-21  Sergey Poznyakoff  <gray@gnu.org.ua>

	New built-in getmx

	Minor fix

	(open_connection): Raise mf_url if unknown protocol is specified in the URL.

	(mx_match): Do not raise exception if mf_not_found is returned.

2007-03-20  Sergey Poznyakoff  <gray@gnu.org.ua>

	Update

	(state_parms.types): Fix dimensions

2007-03-19  Sergey Poznyakoff  <gray@gnu.org.ua>

	Update

	Implement connect handler. Pass additional argument to envfrom and envrcpt

	Testsuite uses mtasim instead of sendmail

	Update

	Implement db_name

2007-03-18  Sergey Poznyakoff  <gray@gnu.org.ua>

	Implement `#pragma regex push|pop'

		* configure.ac, Makefile.am: Add mflib 	* NEWS: Update

		* mflib: New subdirectory
		* mflib/match_dnsbl.mf, mflib/strip_domain_part.mf,
		mflib/heloarg_test.mf, mflib/is_ip.mf, mflib/safedb.mf,
		mflib/mx.mf, mflib/dns.mf, mflib/revip.mf, mflib/valid_domain.mf,
		mflib/match_rhsbl.mf, mflib/spf.mf, mflib/Makefile.am,
		mflib/match_cidr.mf: New files

		* doc/Makefile.am: Remove extract.awk
		* doc/extract.awk: Remove
		* doc/mailfromd.texi: Update

		* src/symtab.c, src/gram.y, src/mailfromd.h: Implement optional
		arguments for user functions 
		* src/lex.l: Implement #include_once
		* src/prog.c (name_destroy): Free the object
		* src/bi_ipaddr.m4 (match_cidr): Remove. The function is
		implemented in MFL (mflib/match_cidr.mf)

		* testsuite/lib/mailfromd.exp, testsuite/etc/cidr.rc,
		testsuite/etc/catch.rc, testsuite/etc/catch01.rc,
		etc/mailfromd.rc: Use includes when necessary

		* src/snarf.m4, src/bi_dns.m4, src/bi_dns.m4, src/bi_sa.m4, 	src/bi_other.m4, src/bi_mail.m4, src/bi_db.m4: Use MF_THROW 	instead of MF_CATCH

		* src/gram.y, src/mailfromd.h,  src/prog.c, src/opcodes,
		src/prog.h, TODO: Provide access for outermost auto variables and
		parameters from catch blocks.

		* testsuite/etc/hasmx.rc, testsuite/etc/dns.rc: Use primitive_
		functions.

2007-03-17  Sergey Poznyakoff  <gray@gnu.org.ua>

		* src/lex.l, src/gram.y, src/mailfromd.h, src/prog.c, 	src/opcodes: Implement throw statement 	* src/bi_dns.m4 (match_cidr): Move into bi_ipaddr.m4 	* src/bi_ipaddr.m4: New module 	* src/Makefile.am: Add bi_ipaddr.m4 	* doc/mailfromd.texi: Initial doc for IP functions 	* NEWS: Update

2007-03-15  Sergey Poznyakoff  <gray@gnu.org.ua>

		* src/dnsbase.c (comp_pref): Secondary ordering by MX name 	* src/main.c, testsuite/lib/mailfromd.exp, doc/mailfromd.texi: 	Discontinue support for the old semantics of options -c, -l and -L. 	* doc/Makefile.am (check-exceptions): Fix the rule 	* NEWS: Update

	Minor stylistic and bug fixes

2007-03-12  Sergey Poznyakoff  <gray@gnu.org.ua>

	Update

2007-03-10  Sergey Poznyakoff  <gray@gnu.org.ua>

	Update

2007-03-09  Sergey Poznyakoff  <gray@gnu.org.ua>

	* src/engine.c, src/gram.y, src/mailfromd.h: Implement prog data * src/mtasim.c: Implement headers * gacopyz/gacopyz_priv.h, gacopyz/gacopyz.c: Fix processing of data and eoh * gacopyz/server.c: Implement most of the stuff

	Implement mail from and rcpt to

2007-03-07  Sergey Poznyakoff  <gray@gnu.org.ua>

		* src/Makefile.am: Allow to specify the m4 binary.

		* src/prog.c (env_push_string): Use pushs. This makes sure that
		the handler arguments are allocated in heap, which is necessary
		for normal functioning of the gc.
		* src/engine.c (mlfi_body): Pass bodyp as number. This is a
		temporary kludge.
		* testsuite/etc/ack.rc: The above change needs extra 2 words for
		the stack allocation.

		* NEWS: Update

2007-03-02  Sergey Poznyakoff  <gray@gnu.org.ua>

	Update

	Fix builtin context checks and implement the same for functions

	Update svn:ignore

	Start implementing test MTA simulator and Gacopyz server code

2007-02-27  Sergey Poznyakoff  <gray@gnu.org.ua>

	Bugfix

2007-02-26  Sergey Poznyakoff  <gray@gnu.org.ua>

	Update

2007-02-21  Sergey Poznyakoff  <gray@gnu.org.ua>

	Limit include/redirect recursion

	* src/spf.c (spf_data): Add mech (parse_record): Always allocate expr_space * src/bi_spf.m4 (update_spf_vars): Bugfix * src/prog.c (instr_backref): Allow to reference optional groups * src/Makefile.am (noinst_HEADERS): Add spf.h

	* src/lex.l: New built-in macro __statedir__ * NEWS: Update * src/mailfrom.h: Finally renamed to * src/mailfromd.h: this

	Affected files:

	* src/symtab.c, src/mu_dbm.c, src/engine.c, src/snarf.m4,
	src/dnscache.c, src/gram.y, src/dnsbase.c, src/dns.c, src/db.c,
	src/spf.c, src/spf.h, src/cache.c, src/optab.opc, src/prog.c,
	src/mf-status.mfi, src/main.c, src/Makefile.am, src/rate.c

2007-02-20  Sergey Poznyakoff  <gray@gnu.org.ua>

	src/gram.y (constdecl): Return NULL. Fixes coredump if const is used within a code block.

2007-02-19  Sergey Poznyakoff  <gray@gnu.org.ua>

	* src/mailfrom.h (node_type_noop): New node type * src/gram.y: Allow declarations of initialized variables. (print_node) <node_type_return>: Fix coredump on void returns (optimize_node): Fix coredump on `if 0 <expr>'

	* src/mailfrom.h (node_type_noop): New node type * src/gram.y: Allow declarations of initialized variables. (print_node) <node_type_return>: Fix coredump on void returns (optimize_node): Fix coredump on `if 0 <expr>'

	Minor fixes

	Update

	Change handling of modifiers

	Change calling convention for the interface functions (spf_query_t, spf_answer_t); fix IP address comparisons; implement builtin spf variables

	Syntax cleanup

2007-02-18  Sergey Poznyakoff  <gray@gnu.org.ua>

	Implement all SPF modifiers, improve debugging.

2007-02-17  Sergey Poznyakoff  <gray@gnu.org.ua>

	Implement all SPF mechanisms

	Implement A. Allow mechanisms followed by /

	Begin implementing SPF support

2007-02-11  Sergey Poznyakoff  <gray@gnu.org.ua>

	gacopyz/trans.awk: Always quote /dev/stderr

2007-02-08  Sergey Poznyakoff  <gray@gnu.org.ua>

	Update

	Move version control under SVN. Remove .cvsignore files.

2007-01-24  Sergey Poznyakoff  <gray@gnu.org.ua>

	Update

	Change deprecation warning.

	Update copyright statements

	Update

	(mailfromd_daemon): Improve logging

	(gacopyz_cleanup_conn): Print debugging message; Do not display spurious 'signal 15' messages

	Update

	Hide deprecated command line options

	Update

	Use DEFAULT_FROM_ADDRESS

	(DEFAULT_FROM_ADDRESS): New define

	(builtin_post_setup): Use string_alloc to allocate literals

	Update

	 (scan_code): Remove special handling for xlat(s)

	(XLAT, XLATS): instruction data has 2 words

	(struct switch_stmt): Additional fields to help code generation

	Store xlat tables in the data segment.

	Update

	(struct optab): New data type (scan_code): New function (prog): extern decl

	(prog): Remove static qualifier (code_op): New function (dump_*): Change number of arguments (optab,find_op): Remove (dump_code): Rewrite using scan_code (fixup_code): New function (print_code): Rewrite using dump_code

	Indicate c mode for emacs.

	(main): Call fixup code

	(instr_*): Remove prototypes.  (code_op, fixup_code): New prototypes.

	Use code_op instead of code_instr

	Add optab.opc, optab.oph, opcode.awk

2007-01-22  Sergey Poznyakoff  <gray@gnu.org.ua>

	Update

	Print informative warning messages where (pragma or command line option) ehlo or mailfrom is used

	(parse_warning,parse_warning_locus): New functions

	Use parse_warning where appropriate

	Remove pragma option mailfrom and ehlo

2007-01-21  Sergey Poznyakoff  <gray@gnu.org.ua>

	(smtp_domain,postmaster_email): Remove --ehlo and --mailfrom deprecated

	Update

	Update

	Update invocations of mailfromd

	(union symentry): Remove v.db (free_symbols): New function (db_format_install, db_format_lookup): Remove. Reimplement in db.c

	minor fixes

	(options, parse_opt): New option -v (mailfromd_expire, mailfromd_compact) (mailfromd_show_defaults): Use db_format_enumerate instead of symbol_enumerate (main): Free symbol and string space after compiling the script.

	(struct old_header_node.name): const (SYM_DB_FORMAT): Remove macro (free_symbols,defer_initialize_variable,free_string_space) (db_format_enumerate): New functions.

	(free_string_space, mf_strdup): New functions

	Provide for deferred variable initialization (to initialize variables from the command line).

	(MLFIPRIV): Remove unused macro. Use gacopyz_calls instead of smfi_ ones, except for initialization functions

	(_resolve_ipstr): Always copy ipstr to namebuf

	(db_format_enumerate, db_format_install) (db_format_lookup): New functions

	Minor fixes.

	(gacopyz_setpriv, gacopyz_getpriv): New functions.

	(smfi_setpriv, smfi_getpriv): Rename to gacopyz_*

2007-01-19  Sergey Poznyakoff  <gray@gnu.org.ua>

	Update

	(struct optab): Fix opname for instr_asgn (env_final_gc): Bugfix

	Update

	Update

	(instr_variable): Print more trace info (instr_svalidate): Restore - synch with 3.1 branch.

	(main): Remove call to builtin_post_setup.

	Warn about legacy constant usage only once Implement #error.

	(asgn:): Remove erroneous flag assignement (branch:): Warn about legacy constant usage only once (LOCUS_EQ): Moved to mailfrom.h (code_node): Restore svalidate - synch with 3.1 branch. Call MARK_LOCUS under node_type_result

	(check-exceptions): Fix rule

2007-01-18  Sergey Poznyakoff  <gray@gnu.org.ua>

	Update

	(struct stmtlist): New data type

	Do not compile autogenerated functions at once. Expand unprefixed named constants only when a value is expected

2007-01-17  Sergey Poznyakoff  <gray@gnu.org.ua>

	Update

	Update include path

	Include <status.mfh>, do not use &const.

	(post_parse): Remove

	(string_off,string_count): Removed. Relocation table is used instead.

	(lex_setup): Change default include path Issue deprecation warning if &const is used. Allow to use constants both in the program text and in literals

	(string: STRING): Fix incorrect argument to parse_error (parse_program): Remove call to post_parse (branch: WHEN): Issue deprecation warning if &const is used. (string_to_stat, mf_status_str): Defined in separate source

	(mf_resolve): Rename to mf_noresolve

	*** empty log message ***

	(status.mfh, mf-status.c): New built sources

	Raise patchlevel to 91

2007-01-15  Sergey Poznyakoff  <gray@gnu.org.ua>

	Update copyright year

2007-01-14  Sergey Poznyakoff  <gray@gnu.org.ua>

	Store  locus.file in the dataseg

	Update

	Minor change

	Implement const declarations

2007-01-13  Sergey Poznyakoff  <gray@gnu.org.ua>

	Update

	(string_alloc,string_finish): Return literal

	Use literals instead of string pointers. Each string reference in the resulting program should point within the current stack or data space (except for the values of Sendmail macros).

	(builtin_post_setup): Change initialization of ehlo_domain and mailfrom_address.

	Minor fixes

	(VBUFSIZE): Rename to GACOPYZ_VBUFSIZE (format_vbuf): Rename to gacopyz_format_vbuf; make extern

	(GACOPYZ_VBUFSIZE): New define (gacopyz_format_vbuf): New decl

2007-01-06  Sergey Poznyakoff  <gray@gnu.org.ua>

	Update

	(B2STACK): New macro (moved from prog.c) (variable_declared_p,declare_variable): Removed (ensure_initialized_variable): New function (dataseg,datasize,dataseg_reloc,dataseg_reloc_count): New externs

	Redo data segment initialization and handling. (dataseg,datasize,dataseg_reloc,dataseg_reloc_count): New variables. (struct eval_environ.var): Rename to dataseg.

	Put string values initially assigned to the variables into the data segment. Redo its planning. Process only variables marked as volatile (built-in) or as referenced. (builtin_variable_install): Initialize flags. (vardecl): Remove initialization of var->off (externdecl): Change declaration. (initialize_variable,ensure_initialized_variable) (dataseg_layout): New functions

	(builtin_post_setup): Change initialization of ehlo_domain and mailfrom_address built-in variables.

2007-01-04  Sergey Poznyakoff  <gray@gnu.org.ua>

	Update

	Add new testcase

	(init_variable): New function (variable_install): Use init_variable (variable_replace): New function

	(enum lexical_context): New data type. (struct catch_node.context): New field (struct progdecl, struct funcdecl): New data types. (enum node_type): Add new types: node_type_funcdecl and node_type_progdecl. (struct node.v): New members progdecl and funcdecl (VAR_REFERENCED): New macros (struct variable): New fields next and owner (variable_replace): New function

	New keyword `const'. (parse_error,parse_error_locus): Increase buffer size to 512.

	First build the entire tree, than compile it at once. Fix varaible shadowing. Reorganize lexical tie-ins.

	(smtp_last_received): Remove superfluous conditional (method_strict,method_standard): Set last_poll_* variables to "", not NULL

2006-12-27  Sergey Poznyakoff  <gray@gnu.org.ua>

	Update

	Fix typo

2006-12-25  Sergey Poznyakoff  <gray@gnu.org.ua>

	Update

	 (option_deprecated): mark as warning

	(check_on_host): Issue RSET if the previous MAIL FROM returned 4xx (mlfi_helo): Push malloced copy of helohost

	(unfold) new function

	Do not quote DEFAULT_LOG_FACILITY

2006-12-21  Sergey Poznyakoff  <gray@gnu.org.ua>

	Update

	(message_header_decode, message_header_encode): New functions.

2006-12-15  Sergey Poznyakoff  <gray@gnu.org.ua>

	(resolve_ipstr_domain): New function

	Allow `==' as well as `='

	(is_ipaddr): Stricter check (struct loop_data.atype): New member (cnameloop): Return the type of obtained answer in atype (_resolve_ipstr): Additional argument: domain to look up into. If not NULL, the ipstr is not reversed (resolve_ipstr_domain): New function (resolve_ipstr): Rewrite using resolve_ipstr_domain (_resolve_hostname): Convert IP to string if gotten T_A. All callers updated.

	(resolve): Take an optional second argument

	Update

	Update

	Capitalize diagnostics messages

	Update

	(switch_to_privs): Refuse to run as root

	Fix typo

2006-12-14  Sergey Poznyakoff  <gray@gnu.org.ua>

	(main): Set log_facility

	Update

	New configuration variable DEFAULT_LOG_FACILITY

	Update

	Revert accidental commit

	Fix the previous patch

	Update

	Update

	Allow any amount of whitespace between the function name and the opening parenthesis.

2006-12-13  Sergey Poznyakoff  <gray@gnu.org.ua>

	Synchronization with 3.1 branch

2006-12-10  Sergey Poznyakoff  <gray@gnu.org.ua>

	Update

	(get_rate): Bug fix: attempt to free auto storage

	(install-data-local): Rename leftover MAILFROMSTATEDIR

2006-12-07  Sergey Poznyakoff  <gray@gnu.org.ua>

	Update

	Version 3.1

2006-12-06  Sergey Poznyakoff  <gray@gnu.org.ua>

	Update

	Finished docs for 3.1

	Update patchlevel

	Update

	Fix overfull hblock

	Update

	Almost finished

	Handle @multitable blocks.  Print a diagnostic message if some other function is required

	(extract): Handle include dependencies

	Mark comparison operators as nonassoc

	(resolve): Return "0" if the argument is not resolved.

	(MAILFROMSTATEDIR): Rename to DEFAULT_STATE_DIR

2006-12-05  Sergey Poznyakoff  <gray@gnu.org.ua>

	Remove extra space

	(print_locus): Bugfix

	Update

	Minor change

	Minor fix

	Update

	Allow hex numbers to be prefixed with 0X as well.

	Remove -c option. Remove the inconsistent usage of config_ prefix.

	(builtin.h): Depend on M4_FILES

	Do not use obsolete -c option to mailfromd

	Consistently use `filter script' instead of `configuration file'.  Add some missing information.

	(EXTRA_DIST): Add untabify.el (check-format,untabify,final): New targets

	*** empty log message ***

2006-12-04  Sergey Poznyakoff  <gray@gnu.org.ua>

	Fix changecom

	Update

	Use "mailer" capability

	Add bi_mail.m4

	Update

	Update

	Implement bitwise operations

	Accept C-like notations for hex and octal numbers.

	Implement bitwise operators: &, |, ^, ~ Implicit declarations within functions create automatic variables.

	(get_mx_records): Use resolve_ipstr to resolve IP addresses.

	Update

	Update

	New file

	Update

	Remove conditional

	(start_daemon,mailfromd_exec): Add -I option

	Remove :RCDIR instruction

	Include config.rc

	Add config.rc, remove greylist.rc

	(RCFILES): Add config.in.  Replace greylist.in with greylist.rc (noinst_DATA, CLEANFILES): Add config.rc, remove greylist.rc

	Replace greylist.in with greylist.rc

	New option -I (--include)

	(add_include_dir): New proto.

	Implement search path for include files

	(dns_cache_get): Do not log error message if the file does not exist. Make sure rc is meaningful (dns_cache_put): Free temporary storage

	(print_status): Log normal child exits at SMI_LOG_INFO priority

	There's no use to pass MAILFROMSTATEDIR and DEFAULT_SOCKET in config.h, revert to the prior scheme

	Fix changecom

	Update

	[!USE_DBM]: Remove.  DBM is now required

	(AM_CPPFLAGS): Remove extra defines.  These are now passed via config.h

	Refuse to build without DBM. Pass all default values via config.h Print configuration summary at the end of the run.

2006-12-03  Sergey Poznyakoff  <gray@gnu.org.ua>

	Update

	Add dns.exp

	(db_format_enumerator): Handle special cases for `database dns'

	(pragma_database): Handle special cases for `database dns'

	(dns_cache_put): Fix calculation of the expiration date for negative records. (dns_cache_format_struct): Use DEFAULT_DNS_NEGATIVE_EXPIRE_INTERVAL

	(getmx,resolve_ipstr,resolve_hostname): Enable negative caching

	(AM_CPPFLAGS): Define DEFAULT_DNS_NEGATIVE_EXPIRE_INTERVAL

	Define DEFAULT_DNS_NEGATIVE_EXPIRE_INTERVAL

	(alpha,alphacheck): New rules

	Update

	Document the dns database.

	Update

	*** empty log message ***

	(RCFILES): Add dns.rc

	New test case

	(struct eval_environ.dict): Remove. All uses updated.

	(host_in_relayed_domain_p): Rewrite using new resolve_ipstr (db_format_setup): Initialize dns_cache_format

	(resolve_ipstr): Change prototype (resolve_hostname): New function (DEFAULT_DNS_DATABASE): New define (dns_cache_get,dns_cache_put): New functions

	Rewrite using global cache  (resolve_hostname): New function (resolve_ipstr): Change signature

	Rewrite using new dns functions

	Add dnscache.c

	New file

	(MI_TIMEOUT): Rename to GACOPYZ_TIMEOUT (mi_uint32_t): Rename to gacopyz_uint32_t Set gacopyz_uint32_t based on the result of a configure check (MILTER_OPTLEN): Rename to GACOPYZ_OPTLEN

	(noinst_PROGRAMS): Remove

	Check for unsigned 32-bit integer type

2006-12-01  Sergey Poznyakoff  <gray@gnu.org.ua>

	Update

	(env_final_gc): Free temporary storagee before returning.

2006-11-30  Sergey Poznyakoff  <gray@gnu.org.ua>

	Update

	Raise patchlevel to 92

	(mlfi_envrcpt): print entire argument array in debug level 70

	Update

	(debug macros): Rewritten

	(mlfi_envfrom): print entire argument array in debug level 70

2006-11-29  Sergey Poznyakoff  <gray@gnu.org.ua>

	Update

	(print_node): Handle nonprintable characters in strings.

	Minor change

	Add a comment

	Update

	(post_parse): New proto

	Implement simple GC for compacting the heap space.

	New option --xref (--dump-xref)

	(struct variable): New member xref. (env_final_gc): New proto.

	Implement cross-reference listing.

	(method_standard): Fix the call to set_last_poll_result.

	Update

2006-11-28  Sergey Poznyakoff  <gray@gnu.org.ua>

	Update

	(instr_retcatch): Call env_leave_frame with nargs=1 (env_catch pushes one argument.) (env_init): Remove initializatio of toh (create_environment): Initialize toh here (see the comment).

	Minor indentation fix

	Update

	(optab): Add missing entry (NEG)

	(parse_error_locus): Bugfix

	(copy_node): New function (print_node): Print "STRING" for node_type_string (optimize_arith): Immediate calculations if one of the arguments is 0 or 1. Side effect: catches all types of division by zero errors. (optimize_node): Optimize concatenations with an empty string (codegen): Do not attempt to generate code if the optimization resulted in errors.

	Update

	(eval_environment): Prevent coredumps on invalid PC values.

	Fix indentation

	Update

	Update

	(disable_prog_trace): Rename to cancel_program_trace

	(MF_RETURN_TEMP_SPACE): Bugfix - call heap_fix_tempspace. Take an optional argument specifying the size of the data stored in the temporary memory.

	(bi_strftime): Call MF_RETURN_TEMP_SPACE with an argument.

2006-11-27  Sergey Poznyakoff  <gray@gnu.org.ua>

	Update

	Assume C comments

	Change to new tracing scheme

	(disable_prog_trace,debug_level_p,enable_debug) (enable_debug_list,disable_debug_list): New functions The option --debug can take a comma-separated list of debug specifications. The option --trace-program takes as an optional argument a comma-separated list of modules to trace

	(__DBG): Change definition (enable_module_trace,disable_module_trace,enable_prog_trace) (disable_prog_trace,debug_level_p,enable_debug) (enable_debug_list,disable_debug_list): New functions (prog_trace_option): Remove declaration

	Use MF_INIT without arguments

	(noinst_HEADERS,EXTRA_DIST,BUILT_SOURCES): Add builtin.h, builtin.def, init.m4 (.def.h): New rule

	New file

2006-11-25  Sergey Poznyakoff  <gray@gnu.org.ua>

	Update

	(instr_symbol): Return the value using pushs, not push.

	Update

	Allow constant expressions in top-level set statements.

	(system): Return exit code of the executed command.

	Throw exception after closing the db  (dbdel): New function

	*** empty log message ***

2006-11-24  Sergey Poznyakoff  <gray@gnu.org.ua>

	Update

	(MF_BEGIN_TEMP_SPACE,MF_END_TEMP_SPACE,MF_RETURN_TEMP_SPACE): New macros

	(heap_max_tempspace, heap_fix_tempspace): New functions.

	Fix handling of escape sequences at the beginning of a string and before the beginning of an interpreted sequence within the string.

	(strftime): New function

	Various fixes

	Update

	Add new tests

	(remove_symbol): Fix assertion

	Handle zero argument count correctly

	(BUILTIN_P,FUNCTION_P): New tokens (IDENT}/"("): New rule

	(codegen): Two more arguments (forget_autos): Take number of parameters as an argument. Clear auto_list (BUILTIN_P): Renamed to BUILTIN_PROC (FUNCTION_P): Renamed to FUNCTION_PROC (BUILTIN_P,FUNCTION_P): New tokens. Lowest precedence Fix code generation for function arguments and the precedence of function or built-in calls without parens

	(time): New built-in

	(dbmap_lookup): Defval can be NULL Make sure returned string is null-terminated (dbput): New built-in function

2006-11-23  Sergey Poznyakoff  <gray@gnu.org.ua>

	Update

	(va_builtin_install_ex): Bugfix (variable_install, function_install): Init all members

	(MF_DECLARE_DATA,MF_GET_DATA): New macros

	(env_get_builtin_priv,builtin_priv_register, error_count): New declaration

	Keep builtin-specific private data in struct eval_environ. (builtin_priv_register,env_get_builtin_priv): New functions (builtin_setup): Call system_init_builtin and io_init_builtin

	(mf_ioerr): New exception

	New tokens FUNCTION_P and BUILTIN_P (parse_error,parse_error_locus): Increment error_count unless fmt begins with `warning:'.

	Modify error handling and proccall production. Get rid of svalidate.

	Add bi_io.m4 and bi_system.m4

2006-11-21  Sergey Poznyakoff  <gray@gnu.org.ua>

	Update

	svalidate is not needed any more (I hope)

	Document pragma stacksize

	Fix the precedence of function calls and boolean negation.

	Add strings.exp

2006-11-20  Sergey Poznyakoff  <gray@gnu.org.ua>

	Update

	New file

	(RCFILES): Add strings.rc

	(MF_VAR): Set VAR_VOLATILE by default

	(dump_asgn): Bugfix

	(node_type_auto): Remove, node_type_variable does the job (VAR_VOLATILE,VAR_EXTERN): New defines (for future use) (struct variable): New member flags.

	Rewrite expression rules to properly handle concatenations and to reduce the number of conflicts. Compute automatic and parameter offsets locally Rewrite optimizer.

	(toupper, tolower): Fix return type declarations (substr,rindex): Fix bugs

	(dbmap_lookup): Avoid needless memory allocation

	Document string and db functions

2006-11-18  Sergey Poznyakoff  <gray@gnu.org.ua>

	Update

	New file

	Update

	Use xmalloc instead of emalloc (emalloc): Remove (find_and_remove): Fix coredump

	Handle OPTIONAL keyword (MF_ALLOC_HEAP_TEMP): New macro

	(heap_tempspace): New function

	Include xalloc.h (struct builtin): New member optcount (va_builtin_install_ex): take 8 mandatory arguments (emalloc): Remove (heap_tempspace): New function

	Hanlde optional arguments to built-ins Use xmalloc instead of emalloc

	Use xmalloc instead of emalloc (xalloc_die): New function

	Use xmalloc instead of emalloc

	(substr): New function

	(dbmap): Take an optional third argument. (dbget): New built-in

	Create MAILFROMSTATEDIR with the right privileges.

	(INITIAL-RESPONSE-TIMEOUT): Update.

2006-11-14  Sergey Poznyakoff  <gray@gnu.org.ua>

	Bugfix

	Update

	Bug fixes

	Update

	New option -O (--optimize)

	Export string functions from lex.l

	Export string functions

	Implement code optimization

	Document -O option

	Raise version to 3.0.91

	Update

	Update

	Add macros.exp

	New test case

	Use full type names

	(RCFILES): Add macros.rc

	New file

	(function_name): New function

	New built-in macros

	 Document built-in macros

	Define split version

2006-11-13  Sergey Poznyakoff  <gray@gnu.org.ua>

	Fix typo

	Update

	*** empty log message ***

	Update

	(decode_debug): Remove legacy handling of `cdyl' flags.

	Remove legacy handling for `rate' New keywords __file__, __line__ and __function__

	Remove legacy handling for `rate' (function_name): New function

	Document `echo' statement

	update

	(numrcpt): Removed

2006-11-12  Sergey Poznyakoff  <gray@gnu.org.ua>

	Update

	Add

	Make sure symbol table entries do not change their address during rehashing

	Allow for auto variables in handlers (print_node): Print variable offset with SET (forget_autos): Use find_and_remove to remove the variable from the symtab

	Rewrite function examples using the new style

	Update

2006-11-11  Sergey Poznyakoff  <gray@gnu.org.ua>

	Update

	Make sure N in $N is positive

	Implement automatic variables

	Update

	(remove_symbol): Split in two functions. (variable_remove): New function

	(storage_class_t): New type (struct variable): New members: storage_class, locus, shadowed (variable_remove): New function

	Implement named function parameters and the framework for automatic variables.

	(remove_symbol): Fix typo

2006-11-10  Sergey Poznyakoff  <gray@gnu.org.ua>

	Update

	Make sure the test works offline

	(remove_symbol): New function

	(MF_RETURN, MF_RETURN_STRING, MF_ALLOC_HEAP, MF_VAR_INC, MF_COPY_STRING,MF_VAR_REF): New defines (MF_VAR): Declare offset as static

	(env_var_inc, variable_declared_p,declare_variable): New decls

	(env_var_inc): New function (struct declvar): Replace var with name and off.  It is not safe to keep the address of the variable as it can change during rehashing of the symtable (find_declared_variable): Replace with variable_declared_p (rcpt_count_loc,ehlo_domain_var,mailfrom_address_var): Remove (get_rcpt_count,clear_rcpt_count,incr_rcpt_count) (bi_numrcpt,builtin_post_setup): Move to bi_vars.m4

	(declare_numeric_variable,declare_string_variable): Remove

	(ctx_getsym): use gacopyz_setreply

	Replace calls to declare_string_variable and declare_numeric_variable with declare_variable (code_node): Fix coredump if node==NULL

	Use MF_RETURN, MF_RETURN_STRING, MF_VAR_REF, et al

	(M4_FILES): Add bi_vars.m4 (mailfromd_SOURCES): Remove ml.c

	*** empty log message ***

	build the targets inconditionally

	Remove legacy section

	Update

	Incorporate changes from 3.0 branch

	Update to match recent changes (string is a keyword)

	Update to match recent changes

	New rules for returning TYPE

	Control types during tree generation Start implementing strict type checking and the new way of declaring function parameters and return types. Implement functions without return value (procedures).

	Use the new way of declaring MF variables.

	(MF_VAR): New macro (__mf_argtype,mf_typelist): Change expansion according to mailfrom.h

2006-11-08  Sergey Poznyakoff  <gray@gnu.org.ua>

	Fix typo

	Update

	 Fix version: 3.0.90 (3.0.1 is moved to bug-fixing branch)

	Use catch/assert macros.

	(MF_CATCH, MF_CATCH_VAL, MF_ASSERT): New macros

	Update

	(struct function): Remove misleading comment

	New token type PROCEDURE

	(function_call): New function Allow functions returning unspecified (procedures) to be used as statements

	(parse_state_arg): Bugfix: do not reuse parsing buffer!

	(mailfromd_stop): Fix arithmetical expression syntax

	Raise version number to 3.0.1

2006-11-07  Sergey Poznyakoff  <gray@gnu.org.ua>

	Update

	Update FIXME-xref.

	Update

	(mu_dbm_open) [WITH_GDBM]: Use GDBM_NOLOCK, as we do the locking ourselves

2006-11-06  Sergey Poznyakoff  <gray@gnu.org.ua>

	Update

	Put back the changes, only make sure the leading white space is properly stripped off the argument.c

	Fix multiple from address handling

	(opton_ehlo): Adjust for changes in option mailfrom syntax

	(pragma_option): Undo the change from 2006-10-30.

	Update

	Update

	Update copyright year

2006-11-05  Sergey Poznyakoff  <gray@gnu.org.ua>

	Update

	New file

	Update

	Finish changes for 3.0

	(function-begin, function-end): Remove macros (example-output): New macro

	New file

	(mailfromd_TEXINFOS): Add gacopyz.texi (EXTRA_DIST): Add extract.awk (extract): New rule

	(gacopyz_cleanup_conn): Ignore SIGTERM while stopping children.

	(gacopyz_handle_connection): Reset SIGTERM and SIGHUP in child.

	Install mailfromd in sbin

	Update

	Set the version number to 3.0 (dropping libmilter support calls for raising the major number).

2006-11-04  Sergey Poznyakoff  <gray@gnu.org.ua>

	 (ctx_read,ctx_write): Return immediately on timeout and eof.

	New option `macros'.

	Add missing documentation

	(function-begin,function-end): New macros

	(check-pragmas): Minor change

	Update

2006-11-03  Sergey Poznyakoff  <gray@gnu.org.ua>

	Update

	(check_portspec): Minor fix: no use to make sp static. (mailfromd_daemon): Stop on SIGTERM, SIGQUIT, SIGHUP and SIGINT. Finally!

	Do not keep the list of children. gacopyz_cleanup_children now does the housekeeping job.

	(gacopyz_cleanup_children): Change signature

	(gacopyz_run): Update invocation of gacopyz_cleanup_children.

	New command 'configtest' (proposed by Jan)

	Update

	(smfilter): Set child start handler

	Fix conditionals for definition of res_n* wrappers.

	Remove any references to libmilter

	Warn if libmilter is requested

	Update

	Update

	Define wrappers for phread and res_n* functions,if necessary

	(on pollstmt do branches): Fix passing of arguments to the built-in poller

	Replace pthread-specific calls with macro wrappers

	Fix trace output (AS part)

	(macro_assoc_free): Initialize macro_assoc_t fields to NULL

	Autodetect the presence of res_n* functions Define HAVE_PTHREAD if we need to use libpthread

	Update

	(smfi_main): Remove debugging hook

	Update

	Include mfapi.h without leading directory. -I should take care of it. [GACOPYZ_VERSION_MAJOR]: Provide wrapper for gacopyz_setreply

	Do not include mfapi (MAILFROMD_DAEMON,MAILFROMD_TEST,MAILFROMD_DELETE,MAILFROMD_LIST) (MAILFROMD_EXPIRE,MAILFROMD_COMPACT) (MAILFROMD_SHOW_DEFAULTS): Move defines to mailfrom.h

	Include mfapi.h without leading directory. -I should take care of it. (MAILFROMD_DAEMON,MAILFROMD_TEST,MAILFROMD_DELETE,MAILFROMD_LIST) (MAILFROMD_EXPIRE,MAILFROMD_COMPACT) (MAILFROMD_SHOW_DEFAULTS): Moved from main.c (mode): New global

	Remove include mfapi.h (priv_get): Special provision for test mode

	(INCLUDES): Add MILTER_INCLUDES

	Raise version number to 2.0.4 Default to using libgacopyz. If the user really calls for trouble, allow him to use libmilter (possibly forked), instead.

	(SUBDIRS): Replace libmilter with gacopyz

	*** empty log message ***

	See /libmilter for the previous history

	Update

	Everything moved to /gacopyz; Some fixes applied as well

	Everything moved to /gacopyz; Some fixes applied as well

	Update

	Skip -f option and its argument.

	Finished libmilter implementation.

	Update

	(g_milter_setmlreply_v, smfi_setmlreply): Improved implementation. (g_milter_setmlreply_va): New function

2006-11-02  Sergey Poznyakoff  <gray@gnu.org.ua>

	Update

	Implement sending reply strings to sendmail.

	Update

	Fix type casting of arguments.

	Update

	Add to the repository

	Finish context loop implementation

	Update

	Define state_name array

	(macro_assoc_t): New data type (struct smfi_str.macros): Change type to macro_assoc_t

	(SMFI_V1_ACTS,SMFI_V2_ACTS): New defines (smfi_getsymval): Define to g_milter_getsymval (g_milter_getsymval): New prototype

	(trans_ok, get_command): Change signature (send_reply): Remove translation of the command. (union state_arg): Change contents. (state_ret_type): New data type (state_handler_fn): Change type and signature. (state_disp): New field `name'. (shan_abort,shan_macro,shan_optneg): Implemented (find_disp): New function (parse_state_arg): New function (g_milter_context_loop): Initial loop implementation. (g_milter_getsymval): New function

2006-11-01  Sergey Poznyakoff  <gray@gnu.org.ua>

	Update

	(END): Emit st_none

	(smfi_register): Fix declaration (smfi_main): Temporarly force foreground mode

	(enum macro_index) (milter_sockaddr_t,mi_uint32_t): New data type (struct smfi_str.macros): Change type

	(smfi_register): Fix prototype (g_smfi_logdump): New function

	Lots of fixes. Start implementing the read and eval loop.

	(g_smfi_logdump): New function

	Build dummy - a test program for libmilter

	(BUILD_DUMMY): New var

	Update

	Initial commit

	Update

	Conditionally build libmilter.a

	Add testing framework for libmilter; Raise version number to 2.0.3

	(SUBDIRS): Add libmilter

	Added to the repository

	Update

	(instr_ston): Fix runtime error diagnostic message

2006-10-30  Sergey Poznyakoff  <gray@gnu.org.ua>

	(pragma_option): Return the rest of the line as the option argument for `pragma option mailfromd'

	Document multiple from addresses.

	(check-exceptions): New goal (all-check-docs): Depend on check-exceptions

	Update

	Test multiple from addresses

	(set_mailfrom): Check if value is a valid mail address (or a list thereof)

	(check_on_host): Iterate over addresses from `mailfrom' until either the list is exhausted or the remote server replies 2xx. Generalization of Jan's idea.

	Update

	(check_mx_records): Update declaration

	(check_mx_records): Return actual number of MXs in the location given by the last argument. All callers updated (method_standard): Do the last-resort poll (i.e. querying the domain part of the sender email, treated as an MX) only if the domain has no MX records.

	_pollmx): Update invocation of check_mx_records

2006-10-29  Sergey Poznyakoff  <gray@gnu.org.ua>

	Update

	(struct eval_environ): Fix setheader prototype.

	Update

	(ismx): New built-in function

	(connect_timeout, connect_attempts): New variables.

	(smtp_stream_wait, smpt_wait) (check_on_host, listens_on): Use connect_wait/connect_timeout for the initial connection and io_wait/io_timeout for the I/O operations. Proposed by Jan.

2006-10-28  Sergey Poznyakoff  <gray@gnu.org.ua>

	Update

	Minor comment fixes

	(clamav): New built-in function

	Version 2.0.2

	Update

	(env_get_stream): New macro. Make sure env_get_stream is used only within capturing function definitions.

	Update

	(check-pragmas, check-options,check-builtins): Use new check-docs.sh invocation syntax

	Allow to take any number of "source"  arguments.

	Remove ignored deftypefn of numrcpt

2006-10-27  Sergey Poznyakoff  <gray@gnu.org.ua>

	Update

	(instr_header): The value for the header is obtained as the 1st argument. (struct optab): Change instr_header description (create_environment) Change type of the 4th argument

	New option --dump-macros

	(struct old_header_node): Renamed from header_node (struct header_node): New structure. (print_config_macros): New function (create_environment): Change type of the 4th argument (priv_store_header_command): Remove declaration (compare_string): New declaration

	Rules for header modification changed to allow an expression as the second argument. (register_macro,print_used_macros): New functions (dbg_setheader): Change type of the second argument to struct old_header_node. (print_node,code_node): Change handling of node_type_header

	(ctx_setheader,priv_store_header_command): Change type of the second argument to struct old_header_node.

	(MF_INIT): Install greylist_seconds_left variable

	Update

	Spam-Assassin interface.

	(va_builtin_install_ex): New function

	Change quoting symbols to [<,>] (MF_STATE, MF_CAPTURE): New defines (MF_DEFUN): use va_builtin_install_ex

	(sa_init_builtin): New function

	Include stdarg.h (struct eval_environ): New member `stream' (env_get_stream,env_capture_start,env_capture_write) (env_capture_write_args): New functions (destroy_environment): Destroy the capture stream (builtin_setup): Call sa_init_builtin.

	(mf_status): New status mf_url (struct builtin): New fields rettype, statemask, capture. (va_builtin_install_ex): New function (env_get_stream,env_capture_start,env_capture_write, env_capture_write_args): New functions

	 (parse_include): Remove unused variable

	Check if builtin invocations are allowed in the current state. (status_tab): Add mf_url

	(mlfi_envfrom,mlfi_header,mlfi_eoh) (mlfi_body, mlfi_eom): Capture support (mlfi_eom): Bugfix: mlfi_eval called with wrong state tag

	Remove unneded quoting

	(M4_FILES): Add bi_sa.m4

	Check for SIGRETTYPE

	Update

	(rate_print_item): Remove unused variables

	(other_init_builtin): New extern

	Move all milter-related stuff to engine.c

	Add external declarations, necessary for engine.c

	(substring): Fix swapping of start and end offsets.

	(mailfromd_SOURCES): Add engine.c

2006-10-23  Sergey Poznyakoff  <gray@gnu.org.ua>

	Update

	Add comments

	Minor indentation changes

2006-10-22  Sergey Poznyakoff  <gray@gnu.org.ua>

	Update

	Use familiar \N notation for back references. Expand \0ooo and \xhh notations in double-quoted strings.

2006-10-21  Sergey Poznyakoff  <gray@gnu.org.ua>

	Update

	Allow variable and macro interpretation and backreference substitution in "" strings.

	Bugfix

	Update

	Implement regexp back-references

	Update

	*** empty log message ***

2006-10-20  Sergey Poznyakoff  <gray@gnu.org.ua>

	Update

	Builtin framework

	Update

	Include prog.h Remove implementations of builtin functions. They all go into the corresponding m4 files. (advance_pc,adjust_stack): Functions, instead of macros (env_var_ref,env_dict_getsym,env_dict_install,env_get_locus): New functions.

	(check_on_host): Return mf_temp_failure if stream_open fails.

	New status mf_range

	(status_tab): New status mf_range

	Add rules for generating builtin implementation files from m4 sources

	Built-in function implementations

	Update

2006-10-18  Sergey Poznyakoff  <gray@gnu.org.ua>

	Update

	(set_last_poll_result): Allow NULL arguments

	Update

	(bi_hostname, bi_resolve): Cache negative results (valid_user_p): Use mu_get_auth if available and throw appropriate exceptions if the user validity cannot be confirmed.

	Check for mu_get_auth (MU >= 1.0.1)

2006-10-13  Sergey Poznyakoff  <gray@gnu.org.ua>

	Update

	Apply some fixes, proposed by Jan

2006-10-11  Sergey Poznyakoff  <gray@gnu.org.ua>

	Update

	(method_standard, method_strict): Initialize last_poll_sent, last_poll_recv to empty strings if cache was used.

2006-10-09  Sergey Poznyakoff  <gray@gnu.org.ua>

	Update

	Document here-documents.

	(ml_split): Fix counting of lines in the reply.  The last line was not taken into account unless it ended with a newline.

	Allow interpretation of variables and macros within here-documents. Special form to remove all leading whitespace from the here-document lines.

2006-10-07  Sergey Poznyakoff  <gray@gnu.org.ua>

	Update

	Provide example of cached_data usage.

	Update

	[WITH_BDB] (mu_dbm_open): Use DB_VERSION_MAJOR to select the version-dependent code.

	(INCLUDES): Add MU_COMMON_INCLUDES

	Fix Berkeley DB autodetection

2006-10-06  Sergey Poznyakoff  <gray@gnu.org.ua>

	Update

	(method_strict, method_standard): Set cache_used to 1 or 0 depending on whether the cached data were used or not.

	(set_cache_used): New function

	Document cache_used variable

	NEWS

	Update

	Document new variables

	(rate_expire_item): Compute the interval relative to the current time.

	(env_get_context, env_get_context): New function (greylist_expire_item): New function (greylist_format_struct): Add expire field. (greylist_format_struct): Declare last_poll_host, last_poll_send, last_poll_recv

	[WITH_BDB] (mu_dbm_open): Support Berkeley DB 4

	(smtp_send): Clear reply before proceeding (smtp_last_sent,smtp_last_received): Return literal "nothing" if nothing was sent/received. (check_mx_records,method_strict) (method_standard): Change first argument type to eval_environ_t (check_on_host): Change first argument type to eval_environ_t. Return last polled host, sent command and received reply in variables last_poll_host, last_poll_send and last_poll_recv.

	(set_last_poll_result): New function. (env_get_context): New function. (check_on_host,check_mx_records,method_strict) (method_standard): Change first argument type to eval_environ_t

	Add explicit support for Berkeley DB 4.  Raise version number to 2.0.1

2006-09-15  Sergey Poznyakoff  <gray@gnu.org.ua>

	Update

	Update

	Update

	(filter_cleanup): Free md->helostr (mlfi_helo): Allocate md->helostr.

	Finished

	Raise version number to 2.0

	Update

	(main): Enclose PACKAGE_BUGREPORT in angle brackets

2006-09-14  Sergey Poznyakoff  <gray@gnu.org.ua>

	Do not enclose dbm-related variables in #ifdef USE_DBM.

	Warn about unquoted strings

	Update

	Update

	Include sys/types.h

	Fix coredump if "rate" is not defined

	Define program_name

	Update

	New option -l (--lint)

	Fix counting of the input lines

	Update

	Update

2006-09-13  Sergey Poznyakoff  <gray@gnu.org.ua>

	Update

	Update

	Update

	(rate_print_item): Use format_time_str.

	(greylist_print_item): Use format_time_str.

	(time_format_string): New global New option --time-format

	(format_time_str): New function (time_format_string): New global

	(convert_rate): allow a separator ("per" or a punctuation) between the message count and the interval spec.

	(format_time_str): New function

	(cache_print_item): Use format_time_str

	(INCLUDES): Add lib (for fprintftime.h)

	Update (fprintftime gnulib module is required).

	(mailfromd_TEXINFOS): Add strftime.texi (check-builtins): Update rule (check-refs,check-fixmes): New rules (all-check-docs): New rule (check-docs): Rewrite via all-check-docs

	Add new file

	Update

2006-09-12  Sergey Poznyakoff  <gray@gnu.org.ua>

	Update

	Update

	(env_catch): Reset the exception handler.

	Update

2006-09-11  Sergey Poznyakoff  <gray@gnu.org.ua>

	Update

	Update

	(xopindex): Prefix option name with --

2006-09-10  Sergey Poznyakoff  <gray@gnu.org.ua>

	Update

	Update

	Update

	(options): Fix wrongly placed N_()s.

	Set the precedence of  MATCHES and FNMATCHES to that of EQ (print_bin_op): Add missing opcodes (print_node): Fix printing of NEG argument

	(xprindex): Not used now

	(check-pragmas): Modify (check-docs): Add check-builtins to the lst of prerequisites. (check-builtins): New rule (RENDITION): Remove variable assignment

	Set doc hints depending on the version (alpha vs. stable).

2006-09-09  Sergey Poznyakoff  <gray@gnu.org.ua>

	Update

	(valid_user_p): Do not suppose argument is an email address.

	Use ifdef USE_DBM where appropriate

	(mailfromd_TEXINFOS): Add macros.texi (check-pragmas,check-options): New rules (EXTRA_DIST): Add check-docs.sh

	*** empty log message ***

	Add texinfo to the prerequisites

2006-09-07  Sergey Poznyakoff  <gray@gnu.org.ua>

	Update

	(bi_domainpart, bi_localpart): New function (dbmap): Signal dbfailure exception if the database cannot be opened.  Do not suppose the argument is an email address.

	Almost finished Tutorial chapter

2006-09-05  Sergey Poznyakoff  <gray@gnu.org.ua>

	Update

	Update

	(bi_toupper, bi_tolower): New built-ins. (bi_stdpoll, bi_strictpoll, bi__pollhost, bi__pollmx): Signal runtime error on unhandled exceptions.

	Update

	New option --all (stderr_error_printer): Use program_invocation_short_name (main): Set stderr_error_printer early, before parsing command line.

	(parse_error): Do not output locus is locus.file is not set.

	(db_compact): Print debugging info at the beginning

	Update

	Update

	Removed

	New options --lock-retry-count and --lock-retry-timeout

	Switch to using gnulib

	(SUBDIRS): Add lib

	Building instructions for alpha and CVS versions

2006-09-03  Sergey Poznyakoff  <gray@gnu.org.ua>

	Update

	(pop_source): Do not free locus.file. It has already been referenced by now.

	(log_status): Avoid logging SMFIS_CONTINUE actions.

	Implement #include directive

	Update

2006-09-02  Sergey Poznyakoff  <gray@gnu.org.ua>

	Raise version number to 1.9.93

	Update

	*** empty log message ***

	Update

	Minor changes

	(mu_dbm_unlock): Return void

	Include mailutils/error.h

	(source_info_option): New option (struct message_data.msgid): New member (priv_get): Init msgid (mailfromd_msgid,mailfromd_timestr): New functions (trace, transcript): Use mailfromd_msgid() (check_on_host): Print exit code on debug level 1

	(debug macros): Print source location only if source_info_option is set (source_info_option): New extern (builtin_post_setup,print_code,yylex,yyerror,onblock,string_to_stat) (mailfromd_msgid,mailfromd_timestr,logmsg): (xeval,check_on_host,check_mx_records,get_rate): Add missing declarations

	(ECHO): Rename to KW_ECHO to avoid clashes with the lex macro name.

	Print status code and time stamps in human-readable form.

	Updated Jan's record

	Update

	*** empty log message ***

	Use RFC-compliant reply codes.

	Add hasmx.exp

	Add catch01.rc and hasmx.rc

	New file

	(builtin_post_setup): New function (builtin_setup): Install ehlo_domain and mailfrom_address vars (bi_strictpoll): Fix parameter order (bi__pollhost, bi__pollmx): New functions (bi_match_cidr): Fix coredump

	(get_smtp_domain): Remove function (main): Call builtin_post_setup after configuration

	(smtp_domain): New extern (get_smtp_domain): Remove function

	(on_cond): Use the values of %ehlo_domain and %mailfrom_address variables as default values for ehlo domain and sender address.

	Update

	(instr_catch, dump_catch): Update for the new catch calling convention. Remove includes of onwrap_std.c and onwrap_strict.c.

	(struct poll_node): Remove (struct poll_data): New data type (struct catch_node): Replace mf_status *values with unsigned exmask (enum node_type): Remove poll_node (std_on_wrapper_func,strict_on_wrapper_func): Remove

	Allow to specify catches for all exceptions (catch *). Allow to use any function as a selector to `on' statement. Get rid of poll_node.

	Remove bootstrap. Not needed any more.

	Remove

	Add to the repository

	(bootstrap): New goal

	Update

	Update catch syntax

	(prog_trace): New function. Used in all instructions and builtins instead of debugN(100...). (instr_callout): Removed (instr_retcatch, instr_saveex, instr_restex): New instructions (env_catch): Return an error code (bi_stdpoll, bi_strictpoll): New builtins

	New option --trace-prog

	(mf_status): Add new status codes (it'd be better to call them exception codes, perhaps). (EXMASK): New macro (prog_trace_option): New global (struct poll_action): Removed (struct poll_node): Change type of `actions' to struct case_stmt (struct function.exmask): New member (std_on_wrapper_func, strict_on_wrapper_func): New globals (instr_callout): Removed (instr_retcatch, instr_saveex, instr_restex): New instructions (env_catch): Return an error code

	The sequences poll, host, for, as and from are valid keywords only if used in ONBLOCK state. (onblock): New function

	Change catch semantics: a catch handler always causes exit from the function or prog it was called from.  The scope of a catch handler installed in a function ends with the end of that function. Rewrite ON statement using CATCH + wrappers over stdpoll or strictpoll functions.

	Add rules for generation of onwrap_std.c and onwrap_strict.c

2006-08-30  Sergey Poznyakoff  <gray@gnu.org.ua>

	Fix typo

	Update

	Rewrite using new syntax

	(instr_ntos): Remove unused variable

	Simplity case syntax: do not require do .. donearound statement lists

	Rewrite using 2.x syntax

	Bugfix

	Update

	Minor fix

	Set log_to_stderr=1 for some working modes (e.g. --test, --compact, --expire) (mailfromd_show_defaults): Remove NDBM/DBM leftovers

	(NUMERIC_BUFSIZE_BOUND): New macro

	New notation &word (for future use)

	Use NUMERIC_BUFSIZE_BOUND to declare buffers for numeric conversion

	Update

	New testcase

	Add switch.exp

	Rewrite to use new greylist syntax

	(RCFILES): Add switch.rc

	(db_format_install): Return struct db_format *

	(instr_xlat,instr_xlats,instr_jreg): New instructions (code_peek,code_reserve): New functions

	(positive_expire_interval,rates_expire_interval): Remove globals. Use corresponding db_format fields instead. All references updated. (db_format_setup): Protect by #ifdef USE_DBM (mailfromd_show_defaults): Use symbol_enumerate to dump available database information.

	(DEFAULT_GREYLIST_DATABASE): New define (positive_expire_interval,rates_expire_interval): Remove globals (struct value,struct valist,struct case_stmt) (struct switch_stmt): New data types (node_type_switch): New node type (struct node.v.switch_stmt): New member (instr_xlat,instr_xlats,instr_jreg): New instructions (code_peek,code_reserve): New functions (struct db_format.expire_interval): New member (db_format_install): Return struct db_format *

	Implement switch statement

	Use rate format

	Use cache_format

	Update

	Document switch statement, database pragma and the new greylist syntax

2006-08-23  Sergey Poznyakoff  <gray@gnu.org.ua>

	Update

	(stderr_error_printer): New function (main): Set stderr_error_printer as the default error printer if log_to_stderr is true. Bail out if extra arguments are given in daemon mode.

	Update

	(rate_print_item): Improved output

	(instr_rate): Remove (bi_interval,bi_rate): New functions

	Options ending in "timeout" and "expire-interval" take time interval specification as their argument.

	(node_type_rate): Remove type (instr_rate): Remove function

	Allow to use multi-letter sendmail variables without surrounding cury braces.

	Remove rate statement, use the built-in function instead. (pragma_option): Several pragmas take time interval specification as their argument. (time_multiplier): Analize the part of the first argument up to the first space characrer. Allow for abbreviated time units. (parse_time_interval): New function (convert_rate): Rewrite unsing parse_time_interval

	(getmx): Do not recurse to parent domains

2006-08-22  Sergey Poznyakoff  <gray@gnu.org.ua>

	Update

	Switch to user privileges before compacting the database

	Update

	Rewrite using the new syntax

	Update the comment

	Add new testcase

	(variable_install): Do not overwrite existing variables. (function_install): Locus pointer is const

	(declare_numeric_variable) (declare_string_variable): New function (env_decl_vars): New function (create_environment): Call env_decl_vars

	(parse_error_locus,function_install): Locus pointer is const (declare_numeric_variable,declare_string_variable): New function

	(parse_error_locus): Locus pointer is const

	The legacy syntax (statement list without any prog declaration) is no longer supported SET statements are allowed between declarations, they declare global variables and assign initial values to them.

	Update

	Add new testcases: ack and catch

	(instr_add,instr_sub,instr_mul,instr_div): Adjust stack (instr_result): Fix the debug diagnostics (instr_builtin): Advance pc before calling the handler, so it can use env_catch (instr_variable,instr_asgn,instr_svalidate,instr_arg) (instr_return,instr_adjust,instr_popreg,instr_pushreg): Provide appropriate debug diagnostics (bi_hasmx): Call freemx only ig getmx returned success. Call env_catch otherwise

	(FUNC declaration): Assign the entry point early to properly handle recursive functions (variable): Throw error if the variable is not defined

	Update

	Implement user-defined functions

2006-08-21  Sergey Poznyakoff  <gray@gnu.org.ua>

	Update

	(SYM_.*): Move defines to mailfrom.h (symbol_enumerate): new function (function_install): New function

	(struct eval_environ): New member `base' (pop): Return popped value (instr_ston): Fix format spec (instr_echo): New instruction (env_make_frame, env_leave_frame): New functions (env_catch): Create normal stack frame for the catch handler. Pass it the exception code as its argument. (print_code): New function.

	(mlfi_helo, mlfi_envfrom, mlfi_envrcpt, mlfi_header) (mlfi_eoh, mlfi_body, mlfi_eom): Create normal stack frame before calling the handler. (main): Use print_code to handle --dump-code option

	(node_type_echo): New node type (symbol_enumerator_t): New data type (symbol_enumerate): New function) (instr_echo): New instruction (env_make_frame,env_leave_frame,function_install): New functions

	(echo): New statement. Begin implementing user-defined functions

	Update

	(struct eval_environ): New member `catch' (instr_catch): New function (env_catch): New function (dump_locus,dump_push_immediate,dump_symbol,dump_branch,dump_return) (dump_header,dump_builtin,dump_variable,mx_match): Change signature. All callers updated (instr_catch,dump_catch): New function (env_init): Initialize catch array

	(mf_status_count): New value (struct catch_node): New data type (node_type_catch): New node type (instr_catch): New function

	Implement catch statement

2006-08-20  Sergey Poznyakoff  <gray@gnu.org.ua>

	Update

	(instr_fnmatch_mx,instr_regex_mx): New functions (instr_regex,instr_regcomp): Rewritten

	(bin_regex,struct regex_node): Remove (struct bin_node): New member qualifier (node_type_push,node_type_regcomp): New node types (struct node.v.re): Removed

	(MXMATCHES,MXFNMATCHES): New tokens

	Implement MX MATCHES and MX FNMATCHES. Change handling of compiled regular expressions. (%union): New member matchtype (MXMATCHES,MXFNMATCHES): New tokens (optimize,optimize_node): New function (codegen): Call optimize

	Update

	Update for new --test semantics

	(instr_add,instr_sub,instr_mul,instr_div) (instr_neg,env_set_variable): New functions.

	The --test option takes an optional argument specifying which state handler to test.  Only one handler can be tested per invocation. Command line interface allows to define all types of variables (sendmail, mailfromd and positional arguments).

	(bin_add,bin_sub,bin_mul,bin_div): New binary opcodes (unary_minus): New unary opcode (instr_add,instr_sub,instr_mul,instr_div,instr_neg): New functions (env_init,env_push_string,env_push_number,env_set_variable): New declarations. (test_program): Removed (mailfromd_test): New declaration

	Add arithmetical operations. Fix the implicit type conversion rules. (test_program): Removed (mailfromd_test): New function

2006-08-19  Sergey Poznyakoff  <gray@gnu.org.ua>

	Update

	Update to 1.9.92

	(freemx): New function

	Update copyright year

	(bi_hasmx): use freemx

	(check_mx_records): Use freemx

	Rearrange and add comments

	Return CODE only for strings consisting of three digits. Other number of digits form NUMBER token. Allow to split strings among multiple lines using \ as the last character on the line

	Use verbose error diagnostics. (NUMBER): New token

2006-08-18  Sergey Poznyakoff  <gray@gnu.org.ua>

	Update

	Add new test case (arg)

	Bugfixes

	Update

	Indentation fix

	(env_init,env_push_string,env_push_number): New functions. (get_rcpt_count,clear_rcpt_count,incr_rcpt_count): New functions (define_numeric_var): Remove function (bi_numrcpt): Directly update %rcpt_count cell. (bi_greylist): Directly update %greylist_seconds_left cell (builtin_setup): Initialize offsets of the internal variables

	(struct message_data): Remove numrcpt (mlfi_helo,mlfi_envfrom,mlfi_envrcpt,mlfi_header,mlfi_eoh) (mlfi_body,mlfi_eom): Init env and pass positional parameters. (mlfi_envrcpt): Update rcpt_count variable using incr_rcpt_count (mlfi_eom): Clear %rcpt_count

	(node_type_arg): New node type (define_numeric_var): Removed (get_rcpt_count,clear_rcpt_count,incr_rcpt_count): New functions (mf_status_str): New declaration (builtin_variable_install): Change return value

	$N notation (positional parameter) Fix IDENTIFIER rule to accept single-character identifiers

	Handle positional arguments (state_tag,state_args): New variables (action: ACT_CONTINUE, ACT_DISCARD): Initialize $$->v.ret to all zeros. (parse_config): Fix return value (mf_status_str): extern (test_program): Call env_init  (builtin_variable_install): Change return value

	(format_status): Remove function. Use mf_status_str instead.

	Update

	Update

	(ignore_failed_reads_option): New variable Do not use debug level 100, it is reserved for instruction traces. (--ignore-failed-reads): New option

	(DEFAULT_RATE_DATABASE): Include suffix

	Debug level 100 is reserved for instruction traces

	(db_list_item,db_delete): Include trailing nul to the key size (db_expire): Do not return error on failed reads if ignore_failed_reads_option is set. (db_compact): Add trailing zero to the keys missing it.

	Include trailing nul to the  key size.

	Update

	Remove NDBM and DBM support. Implement locking functions.

	(db_format_setup): Initialize locking parameters

	(DEFAULT_DATABASE): File name with suffix

	(db_compact): Implement locking. Improve error checking.

	Lock the database before writing to it

	Remove NDBM and DBM support

	Update

	(mu_dbm_file_name): New function Remove obsolete __P() declaration wrappers.

	(mu_dbm_file_name): New function (mu_dbm_stat): Rewrite using mu_dbm_file_name.

	 (options --expire,--list,--delete): Do not take argument. --format and/or --file should be used instead (--format, --file): New options

	(struct db_format): New data type (db_format_install,db_format_lookup): New functions

	(SYM_DB_FORMAT): New symbol state (struct symtab.v): New member db (db_format_install,db_format_lookup): New functions

	(all functions): Change data types to int. Improve error checking (db_compact): New function (Note: no locking so far!)

	Rewritten using new DB format handling primitives

2006-08-17  Sergey Poznyakoff  <gray@gnu.org.ua>

	Update

	New testcase

	Add ml.exp

	Add ml.rc, ml.pat

	(bi_greylist): Define greylist_seconds_left in both branches of the conditional.

	(ctx_setreply): Implement multy-line responses.

	(sendmail_mlreply): New function.

	Implement multy-line strings

	Bugfixes

	Rewrite db_expire to avoid skipping some keys using broken backends (namely, GDBM)

	A wrapper to implement multy-line responses

	(mailfromd_SOURCES): Add ml.c

	Update

	(RCFILES,PATFILES): Add numrcpt test

	(mlfi_envrcpt): Define %rcpt_count

	Add comparison operators (<,<=,>,>=) (struct eval_environ): Remove mailpool. Use heap to keep string values. Remove numrcpt. The number of recipients is kept in the variable %rcpt_count (pushs): New function (instr_arg): New function (for future use) (env_set_numrcpt,env_alloc,free_meme): Removed (define_numeric_var): New function

	Add comparison operators (<,<=,>,>=) (define_numeric_var): New function

	Add comparison operators (<,<=,>,>=)

2006-08-16  Sergey Poznyakoff  <gray@gnu.org.ua>

	Update

	(SYM_VARIABLE): New entry state. (struct symtab.name): Move to the union. All references updated. (variable_install,variable_lookup): New functions.

	(stack_size): new variable (struct eval_environ): Remove stacksize. New members: toh, var (struct environ_state): Remove (push): Do not realloc stack. Take into account heap top when computing stack space left. (heap_reserve): New function (instr_return): Remove third immediate argument (message). Take it from the stack instead (dump_return): Likewise (instr_concat,instr_variable,instr_asgn,instr_svalidate): New instructions. (struct optab): Add new instructions (eval_environment): Initialize tos and toh (create_environment): stack_size gives the total size of the stack+heap. Allocate memory for the variable array. (bi_greylist): Do not prolong greylisting period if the function is called within a greylisting interval. Variable greylist_seconds_left keeps the number of seconds left to the end of the greylisting period. (builtin_setup): Install greylist_seconds_left variable.

	(stack_size, variable_count): New variables. (struct return_node.message): Change type to NODE (struct concat_node, asgn_node): New data types (node_type_concat,node_type_asgn,node_type_variable): New node types. (struct node.v): add new structures. (instr_concat,instr_variable,instr_asgn,instr_svalidate): New instructions. (struct function): New member `name' (struct varuable): New structure (variable_install,variable_lookup,builtin_variable_install): New functions.

	Implement internal variables (%name notation)

	Implement concatenation of expressions and internal variables

	Start rewriting

2006-08-14  Sergey Poznyakoff  <gray@gnu.org.ua>

	Update

	(MARK_LOCUS): Optimize insertion of instr_locus codes.

	Initial commit

2006-08-13  Sergey Poznyakoff  <gray@gnu.org.ua>

	Update

	(instr_header): Allocate header_node

2006-08-12  Sergey Poznyakoff  <gray@gnu.org.ua>

	Update

	Call umask in child process. Set default umask to 0117.

	Update

	New file

	Add new files

	(start_daemon): Prefix config name with MAILFROMD_ETC_DIR only if it does not already begin with / (mailfromd_init): Initialize MAILFROMD_STATE_DIR instead of doing it in (default_mailfromd_start) (default_mailfromd_version, mailfromd_version) (mailfromd_check_capability,mailfromd_exec): New functions (mailfromd_pat): New keyword :RCDIR

	(RCFILES): Add cidr.rc, cond.rc, greylist.in, relayed.list, relayed.rc (PATFILES): Add greylist.pat (CLEANFILES, noinst_DATA): Add greylist.rc (.in.rc): New implicit rule

	(SUBDIRS): Remove .

	(eval_environment): Initialize status to SMFIS_CONTINUE.

	(mailfromd_show_defaults): Print version instead of the method.

	(line_finish): Extra debug

	Remove stray AC_DEFINE

	Update

	Initial import

	Initial import

	(option_pidfile): Assign *pval (mailfromd_daemon): Bail out if daemon fails

	(AC_CONFIG_FILES): Add testsuite/* Makefiles

	(SUBDIRS): Add testsuite

2006-08-11  Sergey Poznyakoff  <gray@gnu.org.ua>

	Update

	New test greylist

	New option --log-tag (-L) sets syslog tag.

	Warn if accept is used with arguments. Check codes and xcodes for reject and tmpfail actions.

2006-08-10  Sergey Poznyakoff  <gray@gnu.org.ua>

	Update

	(struct eval_environ) Remove statepool and smtp_state. (environ_save_state,environ_restore_state,environ_state_free): Remove. (instr_symbol): Fix debug diagnostic corresponding to previous cases of deferred evaluation. (instr_pushenv,instr_iter,dump_iter,instr_suspend): Remove (dump_code): Take two arguments. (eval_environment): Check second argument type (prog_counter_t). (environment_get_null_symbol): Return location where the undefined symbol occurs in the memory location pointed to by the second variable. (bi_numrcpt): Remove non-local jump

	(check_on_host): Be more liberal. Return mf_temp_failure if any transport error occurs Send QUIT after exiting the loop, so that we close the transaction correctly even if we get a negative reply. (xeval,mlfi_eval): New functions. (mlfi_helo,mlfi_envfrom,mlfi_envrcpt,mlfi_header,mlfi_eoh) (mlfi_eom,mlfi_body): Use mlfi_eval to evaluate the response. (smfilter,milter_enable_state): Set all handlers on request, when a specified PROG is available to avoid useless milter calls.

	(enum smtp_state): smtp_state_first marks first executable SMTP state, smtp_state_count gives the number of available states. (struct iter_node,node_type_iter,instr_iter,instr_pushenv) (instr_suspend): Removed. (entry_point): New global data (environment_get_null_symbol): Return locus in the location pointed to by the second argument. (codegen): Remove declaration (dump_code): Accepts two arguments.

	(iter): Remove keyword (prog): New keyword

	Major change in confguration language. By default all code will be executed in envfrom SMTP state. The parts of code enclosed in 'PROG <state> DO ... DONE' will be executed when the requested <state> is handled. Deferred evaluation is considered a failed experiment and is removed. ITER statement is removed as well, since it is no longer needed.

	(_getmx,cnameloop): Use res_n* functions to assure thread safety.

	(db_expire): Rewritten the loop after the proposal of Jan Rafaj.

	Raise version number to 1.9.91

	Add Jan Rafaj

2006-08-08  Sergey Poznyakoff  <gray@gnu.org.ua>

	Fix

	Update

	Exit immediately if any of the --dump options was given

	(code_node): Optimize code generation for `ON POLL' statements, avoiding multiple generation of action code for `or' branches.

2006-08-06  Sergey Poznyakoff  <gray@gnu.org.ua>

	Update

	(instr_symbol): Improve debugging messages (bi_match_cidr): New builtin.

	(mlfi_helo): Do not clear md->helostr after processing. We don't rely on sendmail setting $s any more.

2006-08-01  Sergey Poznyakoff  <gray@gnu.org.ua>

	Update

	(AC_ARG_WITH([berkeley-db])): Fix the help string

	Update

	(code_instr,code_immediate): Take const argument (bi_resolve): Fix inet_ntoa usage (dbmap_lookup_p): Change first argument

	(mlfi_header,mlfi_header,mlfi_eoh): Initial implementation. (milter_enable_state): New function (set_milter_header,set_milter_body): Removed Removed "API control" options (--milter-body and --milter-header).

	(struct builtin_node) const struct builtin (code_instr,code_immediate): Take const argument (milter_enable_state): New function

	(%union): const struct builtin (iter): Call milter_enable_state

2006-07-31  Sergey Poznyakoff  <gray@gnu.org.ua>

	Update

	(dbmap_lookup_p): Protect the text by ifdef USE_DBM (builtin_setup): Do not install bi_dbmap if DBM is not used.

	(get_smtp_domain): New function (main): Remove initialization of smtp_domain.

	(smtp_domain): Removed declaration; (get_smtp_domain): New function

	Use get_smtp_domain() instead of smtp_domain

	Update

	(mlfi_envrcpt): Remove implicit looping in envrcpt state. (struct message_data): Remove envstate. All references updated

	Support ITER construct (struct eval_environ): New member statepool (struct environ_state): New member next (environ_save_state): Create the state in the internal environment memory pool (destroy_environment): Free states from the pool (instr_pushenv,instr_iter,dump_iter,instr_suspend): New functions

	Support ITER construct

	Support ITER construct (string_to_state,state_to_string): New functions

	(string_to_state,state_to_string): New functions (instr_iter,instr_pushenv,instr_suspend): New functions (struct iter_node): New data type

2006-07-30  Sergey Poznyakoff  <gray@gnu.org.ua>

	Update

	Use direct boolean arithmetics: 1 means true, 0 means false. (bi_resolve,bi_hasmx): New builtins

	Use direct boolean arithmetics: 1 means true, 0 means false.

	Update

	Initial commit

	Update

	(instr_rate): Bugfix

	(struct option_cache): New option cumulative (sync with 1.x) Mark relay as cumulative (set_option): Ignore override for cumulative options

	Update version number to 1.9.90

	Update

	(environ_state_free): State can be NULL (bi_dbmap): Fix order of arguments

	(mu_dbm_open): Fix for DB 3.x

	New option --group (pragrma group) (switch_to_privs): Retain groups specified with --group options (mailfromd_show_defaults): Show DB version in use. (main): Call MU_AUTH_REGISTER_ALL_MODULES

	Change DB options to those used by MU configure.

	Update

	(struct eval_environ): New fields numrcpt, smtp_state (struct environ_state): New data type (environ_save_state,environ_restore_state,environ_state_free): New functions. (instr_ston,instr_ntos): Bugfix: do not advance pc (instr_symbol): Do not set env->status before longjump (env_set_numrcpt): New function (eval_environment): Take 2nd argument: the smtp state (bi_numrcpt,bi_validuser,bi_dbmap): New builtins (builtin_setup): Register new builtins

	(struct message_data): New member envstate (priv_get,filter_cleanup): Handle envstate (mlfi_helo,mlfi_envfrom): Update call to eval_environment (mlfi_envrcpt): Save environment state on the first call, restore it on subsequent ones. Keep track of the number of recipients. (mlfi_header): Call eval_environment (mlfi_eom): Call eval_environment. Return tempfail if the configuration program did not finish. (capa): Use "auth" capability

	(enum node_type): New type node_type_number (enum smtp_state, environ_state_t): new data type (eval_environment): Takes 2nd argument: smtp_state. All callers updated. (environ_save_state,environ_restore_state,environ_state_free): New functions. (emalloc): New prototype

	Allow numeric constants in the program

	(MAILUTILS_LIBS): Link with MU Auth

2006-07-29  Sergey Poznyakoff  <gray@gnu.org.ua>

	Update

	(get_rate): Remove unused variable

	(check_mx_records): Add default case (listens_on): New function (for compatibility with 1.x branch) (mlfi_eom): Clear numrcpt (main): Call builtin_setup. Check return value of codegen

	Add missing prototypes. Make debug macros safe to use within if blocks (struct builtin, struct function): New data types

	Introduce builtin functions. Remove rules for HOSTNAME and RELAYED: they are builtins now

	(mailfromd_SOURCES): Add symtab.c

	Initial commit

2006-07-26  Sergey Poznyakoff  <gray@gnu.org.ua>

	Update

	(get_immediate): Compensate for changes in eval_environment (eval_environment): Fix reenterability: increase env->pc only when the instruction returns successfully.

	(struct message_data): New members env, helostr and numrcpt (priv_get): Initialize new message_data members (ctx_getsym): Special handling for $s - sendmail does not set it when calling xxfi_helo (filter_cleanup): Use priv_get instead of MLFIPRIV Destroy the environment (mlfi_helo): Use priv_get instead of MLFIPRIV Set md->helostr (mlfi_envfrom): Use priv_get instead of MLFIPRIV Use md->env instead of creating new environment (mlfi_envrcpt): Increase numrcpt (mlfi_eom): Use priv_get instead of MLFIPRIV

	(LDADD): Use MILTER variable instead of hardcoding -lmilter

	Implement --with-forks option from 1.x branch.

2006-06-14  Sergey Poznyakoff  <gray@gnu.org.ua>

	Update

	Adopt new MU namespace (instr_and,instr_or): Remove

	Adopt new MU namespace New option --source

	(instr_and,instr_or): Remove Adopt new MU namespace

	Adopt new MU namespace

	Adopt new MU namespace (code_node): Fix generation of 'and' and 'or' code

	Remove MU_COMPAT. We need the latest mailutils (pre 1.0)

2006-01-17  Sergey Poznyakoff  <gray@gnu.org.ua>

	Updated

	(check_portspec): Fix eventual coredump and add more checks.

2006-01-10  Sergey Poznyakoff  <gray@gnu.org.ua>

	Updated

	(adjust_stack): Fix typo (reverted sign) (get_immediate): pc is already advanced by 1 by the time the function is called. (instr_bz, instr_bnz, instr_jmp): Fix 2nd. argument to advance_pc (instr_callout): Fix typo: adjust_stack instead of advance_pc.

	(config_dump): Renamed to config_dump_tree. (code_dump): Renamed to config_dump_code. New opions --dump-tree (eq. --debug=d), --dump-grammar-trace (eq. --debug=y), --dump-lex-trace (eq. --debug=l), --dump-code (eq. --debug=c).

	(code_node): Use BNZ for branching. [poll]: bugfix

	Fix typo

	Update

	(code_dump): New  variable (--debug=c option) (ctx_getsym,ctx_setreply,ctx_setheader): Moved from gram.y (mlfi_envfrom): Rewritten using new functions (decode_debug): Handle [cC] (main): Generate code and, if required, print it on stdout

	(regex_flags): Extern declaration (eval_environ_t,instr_t,prog_counter_t): New types. (instr_xchg,instr_ston,instr_ntos,instr_locus,instr_push_immediate) (instr_symbol,instr_bz,instr_bnz,instr_jmp,instr_callout,instr_dup) (instr_cmp,instr_pop,instr_and,instr_or,instr_regex,instr_regcomp) (instr_fnmatch,instr_not,instr_next,instr_return,instr_header) (instr_resolve,instr_relayed_domain,instr_rate,instr_eqn,instr_eqs) (instr_nen,instr_nen,create_environment,destroy_environment) (eval_environment,environment_get_status,codegen) (parse_error_locus): New functions

	Return EQ and NE as keywords. (parse_error_locus): New function.

	(codegen): Add code generation functions. (name_comp,name_destroy,dict_init,dict_install,dict_destroy) (dict_getsym): Move to prog.c (eval_poll,eval_hostname,eval_rate,eval_node) (eval_node_list,run_program): Remove runtime evaluation functions (ctx_getsym,ctx_setreply,ctx_setheader): Moved to main.c (test_program): Rewritten using new functions

	Run-time evaluation

	(mailfromd_SOURCES): Add rate.c

2006-01-06  Sergey Poznyakoff  <gray@gnu.org.ua>

	Update

	Update

	Remove leftover argc_unquote_char

2006-01-05  Sergey Poznyakoff  <gray@gnu.org.ua>

	Updated

	Updated

	Updated

	(check_portspec): New function.

	Mention BROKEN_PTHREAD_SLEEP Sendmail variable

	Raise version number to 1.3

2005-11-24  Sergey Poznyakoff  <gray@gnu.org.ua>

	Updated

	(AM_CPPFLAGS): Define MU_COMPAT, needed for latest mailutils.

2005-09-20  Sergey Poznyakoff  <gray@gnu.org.ua>

	(resolve_ipstr): Lock critical section

	Updated

	(resolve_ipstr): Removed in favor of the new implementation.

	(resolve_ipstr): New implementation, taking into account cnames.

2005-08-18  Sergey Poznyakoff  <gray@gnu.org.ua>

	Updated

2005-08-17  Sergey Poznyakoff  <gray@gnu.org.ua>

	Updated

	 Raised version number to 1.2

	(AUTOMAKE_OPTIONS): New variable

	Added to the repository

	(db_delete): Fix

	Updated

	(rate_delete): New function

	Option --delete takes an optional argument, as --list and --expire

	(db_delete): New function

	(cache_delete): Rewritten using db_delete

	Updated

	(line_add_unescape): Use argcv_unquote_char

	Updated

	(getmx): Return immediately in mf_temp_failure.

	Use separate expiration times for \negative and positive entries.

	Use separate expiration times for negative and positive entries.

2005-08-09  Sergey Poznyakoff  <gray@gnu.org.ua>

	Updated

	New option --syslog (cancels --stderr). (parse_opt) Make sure the errors are reported on stderr wherever it is connected to a tty (unless in daemon mode or otherwise directed by --syslog option).

2005-08-08  Sergey Poznyakoff  <gray@gnu.org.ua>

	Minor fixes

	Updated

	(node_type_continue): Renamed to node_type_next

	(NEXT): New token

	(stmtlist): Bugfix (NEXT): New token

	Updated

	(node_type_continue): New node type

	(ACT_CONTINUE): Continue execution of the program

	Update

	New file

	(get_rate): Optimized expiration logic. (rate_list_item,rate_list_db): Rewritten using functions from db.c (rate_expire_db): New function

	(MAILFROMD_EXPIRE_RATEDB): New mode (parse_opt): Removed --list-rates option. Both --list and --expire now take an optional argument, specifying which database to operate upon. (set_rates_expire): New function. Handles rates-expire-interval pragma.

	(cache_list_item,cache_list_db,cache_expire_db): Rewritten using functions from db.c

	(db_item_printer_t,db_expire_t): New types (rate_expire_db,db_list_item,db_list,db_expire): New functions

	(mailfromd_SOURCES): Add db.c (AM_CPPFLAGS): Define DEFAULT_EXPIRE_RATES_INTERVAL

	(DEFAULT_EXPIRE_RATES_INTERVAL): New variable

2005-08-07  Sergey Poznyakoff  <gray@gnu.org.ua>

	Updated

	Documented rate statement

	Rename getmx_status to mf_status

	Add support for rate statement

	Add rate.c

	Added to the repository

	Complain if a DB support is required but not found.

2005-07-31  Sergey Poznyakoff  <gray@gnu.org.ua>

	Updated

	(_getmx): Fix eventual buffer overflow.

	(check_on_host): Destroy IO data only if these have been initialized.

2005-07-28  Sergey Poznyakoff  <gray@gnu.org.ua>

	Update

	Do not include gram.h         (eval_hostname): Return with unmodified val if resolve_ipstr         fails.

	Updated

	Include resolv.h after netinet/in.h

	Bugfix: place LIBOBJS into LDADD

	Raised version number to 1.1         Check for argcv_unescape_char vs. argcv_unquote_char (CVS         mailutils declares the latter).

2005-06-30  Sergey Poznyakoff  <gray@gnu.org.ua>

	Updated

	Fixed usage of @email{}

	Minor fixes in @url usage

2005-06-17  Sergey Poznyakoff  <gray@gnu.org.ua>

	Updated

	(method_strict): Give precedence to temporary failure, if it occurs in any poll. (method_standard): Check the client host unless mx check gives success. Give precedence to temporary failure, if it occurs in any poll.

	(cache_expire_db): Check for res==NULL.

2005-06-16  Sergey Poznyakoff  <gray@gnu.org.ua>

	Updated

	(eval_poll): Fix wording in the trace message

	Updated

	(smtp_send2,smtp_send3): Send fully formed command, along with final CRLF, in one go.

2005-06-13  Sergey Poznyakoff  <gray@gnu.org.ua>

	(method_standard): Bugfix: probe MXs first.

2005-06-12  Sergey Poznyakoff  <gray@gnu.org.ua>

	Updated

	Updated

	Updated

	Finished

	(distuninstallcheck_listfiles): New variable. The install-data-local rule in etc/Makefile.am breaks distuninstall checks, hence the need to fix it.

	Raised version number to 1.0

	Updated

	check_on_host,check_mx_records,method_strict,method_standard): Accept two additional arguments.

	(smtp_domain,postmaster_email): External declarations.

	Handle new keywords: not, as, from.

	Allow two additional arguments to poll: as and from.

	Install mailfromd.rc

	Updated to match recent changes.

	Warn if DBM support is not configured

2005-06-10  Sergey Poznyakoff  <gray@gnu.org.ua>

	Updated

	Changed option handling

	Add new declarations

	Parse pragma directives

	Add configurable regcomp flags. (parse_pragma): New function

	Add missing includes. (free_mx_buffer): Removed

	(MAILFROMSTATEDIR): Remove definition

	Added to the repository

	New subst variable MAILFROMSTATEDIR

	(SUBDIRS): Add etc

	Minor formatting fixes

	Bugfix

2005-06-09  Sergey Poznyakoff  <gray@gnu.org.ua>

	Updated

	(relayed_domain_p): Verify full hostname as well (method_strict,method_standard): Return success on empty email.

	Implement new keyword 'relayed'

	Updated

	(do_trace): New variable (option --trace) (vlogmsg,logmsg,transcript): Fixed signature (const char *fmt). (trace): New function. (parse_opt): Handle --trace option.

	(debug4,debug5,debug6): New macros (struct locus): new data type (struct poll_action, struct node): Include locus (get_locus, trace): New functions

	Return locus along with the keyword

	Improved tracing and debugging output

	(EXTRA_DIST): Added gram.h

	Raised version number to 0.9.9

	Updated

	Reimplement header operations

	New keyword HOSTNAME.

	Use new debug macros

	New debug macros. (node_type_hostname): New node type

2005-06-08  Sergey Poznyakoff  <gray@gnu.org.ua>

	Updated

	src/.cvsignore

	Major rewrite: removed predefined and configurable actions, get *the program* to be executed from the configuration file.

	Add new includes (DEFAULT_CONFIG_FILE): New define Add parse tree-related data types (parse_error,yyparse,source,parse_config): New declarations

	 mailutils/mailutils.h are now included from mailfrom.h

	(mailfromd_SOURCES): Add gram.y lex.l (AM_CPPFLAGS): Define SYSCONFDIR (AM_YFLAGS,AM_LFLAGS): New vars

	Configuration file lexical analyzer.

	Configuration file grammar and run-time support.

	Check for yacc and lex

	Updated

	(smtp_stream_wait): Take an additional argument: number of attempts. Loop until the stream is ready or the number of attempts is exhausted. All callers updated.

2005-06-07  Sergey Poznyakoff  <gray@gnu.org.ua>

	Updated

	Updated

	(method_fp,method_standard,method_strict): Changed return type. All callers updated. (check_on_host): Issue EHLO if remote party refuses HELO.

2005-06-06  Sergey Poznyakoff  <gray@gnu.org.ua>

	Updated

	(method_standard): Check the host first, only if it does not answer, check MXs.

	Minor fix

	(install-data-local): use $(mkdir_p)

	Updated

	Updated

	(action_failure_default): Changed to return:reject (SMTP_MAJOR): New macro (check_on_host): Use SMTP_MAJOR

	More docs

2005-06-05  Sergey Poznyakoff  <gray@gnu.org.ua>

	Updated

	(add_header): Removed. Use per-message private data to keep it. All referers updated. (--delete): New mode (--expire): New mode

	(cache_expire_db): New function

	(install-data-local): Create MAILFROMSTATEDIR

	More documentation

	Updated

	(capa): Add license capability.

	(cache_get): Do not update timestamps on each retrieval.

	Created documentation framework

	Bugfixes

	Updated

	(check_mx_records): Bugfix. Provide default return value in case no MX records are found. (mailfromd_show_defaults): Show MAILFROMSTATEDIR

	(_getmx): Rewritten using BIND-4-style interface. See comment to this function for the reasons of this regress.

	(DEFAULT_PIDFILE,DEFAULT_DATABASE): Use MAILFROMSTATEDIR instead of LOCALSTATEDIR.

	(AM_CPPFLAGS): Define MAILFROMSTATEDIR instead of LOCALSTATEDIR (LDADD): Get rid of static linkage with libresolv

	(DEFAULT_SOCKET): Change default

2005-06-04  Sergey Poznyakoff  <gray@gnu.org.ua>

	Updated

	Added to the repository

	(postmaster_email): New variable (check_on_host): Use postmaster_email instead of hardcoding <> address. (options): New option --postmaster-email; Fixed several bugs. (parse_opt): Handle --postmaster-email option. Minor fixes.

	(AC_CONFIG_FILES): Add doc/Makefile

	(SUBDIRS): Add doc

	Bugfix

	Bugfix

	Get rid of xmalloc

	Updated

	New file

	Caching functions

	Added to the repository

	Moved from ../. Added result caching and new operating modes.

	Moved from ../

	Moved to src/

	Updated for deep directory structure. Detect DBM/NDBM/GDBM, define variables for caching. Raised version number to 0.2

	Updated for deep directory stru\cture

	Updated

	Implemented two methods: standard (the default) and strict (the one that was implemented initially).

	Do not skip hostname when checking. Handle both IP address and FQDN as input.

	(parse_action): Use strtok_r

	Removed standard file

	Updated

	Rewritten action system. Documented the code.

2005-06-03  Sergey Poznyakoff  <gray@gnu.org.ua>

	Updated

	(parse_opt): Ordered switch cases. (main): Switch to user's privileges only if started as root.

	Updated

	Initial revision

2005-06-03  (no author)  <(no author)@7a8a7f39-df28-0410-adc6-e0d955640f24>

	New repository initialized by cvs2svn.


Local Variables:
mode: change-log
version-control: never
buffer-read-only: t
End:
Local Variables:
mode: change-log
version-control: never
buffer-read-only: t
End:
