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

	-= Release 4.0 =-
	
2007-05-12  Sergey Poznyakoff  <gray@gnu.org.ua>

	* bootstrap: Avoid importing openat-die.  This needs the following
	patch:
	http://lists.gnu.org/archive/html/bug-gnulib/2007-05/msg00056.html
	* README-alpha: Update
	* src/openat-die.c: New source
	* src/Makefile.am (mtasim_SOURCES): Add openat-die.c
	* doc/mailfromd.texi, doc/mtasim.texi: Update

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

	* configure.ac, NEWS: Raise version number to 4.0.  Ready for the
	release.
	* src/version.c: New file.
	* src/Makefile.am (libmf.a): New library
	* bootstrap (MODLIST): Add version-etc
	* src/mailfromd.h (mailfromd_version): New function
	* src/main.c, src/mtasim.c: Use mailfromd_version to display
	program version/license.  Remove --license option, because
	--version does the job.
	* tests/version.at: Fix version format to match that of version-etc
	output. 

	* doc/mailfromd.texi: Final polish.
	
2007-05-10  Sergey Poznyakoff  <gray@gnu.org.ua>

	* src/mu_dbm.c [WITH_BDB] (mu_dbm_open): Up to v.4.1 there were no
	txn argument to db->open.
	* src/engine.c (check_on_host): Clear last_poll_* values before
	startning the new poll.

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

	* src/engine.c (check_portspec): Bugfix

	* src/mu_dbm.c [WITH_BDB] (mu_dbm_open): Locking mode
	depends on the open flags.

2007-05-06  Sergey Poznyakoff  <gray@gnu.org.ua>

	* src/mtasim.c: \E can take 1 and 2 digit codes.
	Correctly close the milter server before exiting
	* configure.ac: Call MU_DEBUG_MODE
	* doc/mailfromd.texi, doc/mtasim.texi: Update
	* acinclude.m4: New file
	* gacopyz/gacopyz.h, gacopyz/server.c (gacopyz_srv_abort)
	(gacopyz_srv_quit): New functions
	* gacopyz/gacopyz.c: Do not complain if the socket does not exist.

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

	* src/mailfromd.h (DEFAULT_PIDFILE): Use file name relative to
	the state directory
	* src/main.c (portspec,pidfile): Initialize dynamically.
	(init_names): New function
	(state_dir_fixup,portspec_fixup,fixup_state_dir_names): New
	functions
	(main): Call init_names and fixup_state_dir_names
	(mailfromd_show_defaults): Use variables, not defines (hmmm)

2007-05-04  Sergey Poznyakoff  <gray@gnu.org.ua>

	* src/gram.y (convert_rate): Bugfix.
	* src/main.c: --predict implies --format=rate --list
	Update copyright years
	* doc/mailfromd.texi: Update
	* etc/Makefile.am (.in.mailfromd): Set executable bit on the
	target.

	* src/mu_dbm.c [WITH_BDB] (mu_dbm_open): install errcall fn if
	debug level >= 1
	* src/engine.c (save_cmdline,sig_restart): New function
	(mailfromd_daemon): SIGHUP causes restart (if the program is
	invoked using the absolute file name)
	* src/mailfromd.h (getmaxfd): New macro from bi_io.m4
	(script_file,mtasim_option): New globals
	(log_setup,save_cmdline): New functions
	* src/bi_io.m4 (getmaxfd): move to src/mailfromd.h
	* src/main.c: New option --mtasim for mtasim interaction
	(log_setup): New function
	(main): Initial logging stream depends on whether stderr is closed
	or not.
	Save command line unless script file is not an absolute file name
	* src/mtasim.c (start_mailfromd): Use --mtasim instead of
	--foreground (mainly for further use.
	* configure.ac: Check for sysconf and getdtablesize
	* doc/mailfromd.texi: Update
	* doc/Makefile.am (check-fixmes): The rule missed multiline fixmes
	* etc/rc.in (mailfromd_status): remove trailing space from the
	first grep pattern
	(mailfromd_reload): New function
	New option `reload'

	* gacopyz/gacopyz_priv.h (struct gacopyz_conn): New members
	cleanup and cleanup_data.
	* gacopyz/proc.c (gacopyz_cleanup_conn): Call conn->cleanup
	* gacopyz/gacopyz.c (do_connect): Install a cleanup handler to
	remove the UNIX socket.
	* NEWS: Update
	
2007-05-02  Sergey Poznyakoff  <gray@gnu.org.ua>

	* src/mu_dbm.c (mu_dbm_strerror): Improve error logging.

2007-05-01  Sergey Poznyakoff  <gray@gnu.org.ua>

	* src/mu_dbm.c (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.

	Ensure begin blocks can set exception handlers:
	
	* doc/mailfromd.texi: Update
	* src/engine.c (xeval): Call env_save_catches after running begin
	blocks
	* src/prog.c (struct eval_environ.defcatch): New field

2007-04-30  Sergey Poznyakoff  <gray@gnu.org.ua>

	* src/gram.y: Use inner context to check for action usage in
	begin/end blocks.  This allows to define global catches.

2007-04-28  Sergey Poznyakoff  <gray@gnu.org.ua>

	* src/mu_dbm.c: Use F_SETLKW
	* src/engine.c (priv_get, filter_cleanup): Add missing env_init
	* src/gram.y: Reset state_tag after reducing prog rules
	(sendmail_action, header_action): Additional checks
	* src/main.c: New option --gacopyz-log
	* doc/mailfromd.texi: Document --gacopyz-log
	
	* gacopyz/smfi.c (smfi_setlogmask): Do what its name suggests.
	* gacopyz/gacopyz.h (SMI_LOG_UPTO, SMI_LOG_FROM): New macros
	(gacopyz_string_to_log_level, gacopyz_log_level_to_string): New
	functions
	* gacopyz/log.c (gacopyz_string_to_log_level)
	(gacopyz_log_level_to_string): New functions.

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

	* src/mailfromd.h (smtp_state_begin,smtp_state_end): New
	(pseudo)states.
	(struct db_format.enabled): New field
	* src/lex.l (begin,end): New keywords
	* src/gram.y (begin,end): New statements
	* src/engine.c (priv_get, filter_cleanup): call `begin' and `end'
	handlers.
	(mlfi_abort): Clear session-specific information

	* src/dnscache.c, src/cache.c, src/rate.c: Honor `.enabled' field 
	* src/bi_db.m4: Honor `.enabled' field
	(db_get_active,db_set_active): New builtins
	(greylist): Remove spurious debugging info
	* doc/mailfromd.texi: Update
	* NEWS: Update
	
	* src/mu_dbm.c [WITH_BDB]: Improve locking algo: yield control to
	the system before locking DB for writing to give other processes a
	chance to get the DB.
	* src/engine.c: Use SIGUSR1 to let the siblings know we changed
	lock status.
	(mailfromd_daemon,child_start): Ignore SIGUSR1.

2007-04-25  Sergey Poznyakoff  <gray@gnu.org.ua>

	* 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.

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>

	* src/mtasim.c: Implement --port=auto, a special mode, where
	mtasim starts the mailfromd on an agreed-upon port and terminates
	it before exiting.
	* bootstrap: Require mkdtemp

	* mflib/mx.mf: Remove.  Superceded by the `getmx' builtin function.
	* mflib/Makefile.am: Remove mx.mf
	* doc/mailfromd.texi, NEWS: Update

	* src/debug.cin, src/debugdef.m4 (debug_spec_string): New function
	(modname): Redefine as char *[]
	* src/lex.l, mflib/match_dnsbl.mf, mflib/heloarg_test.mf,
	mflib/mx.mf, mflib/valid_domain.mf, mflib/match_rhsbl.mf,
	mflib/spf.mf, tests/etc/cidr.rc, tests/etc/catch.rc,
	tests/etc/catch01.rc, tests/etc/poll-1.rc, etc/mailfromd.rc,
	NEWS: Introduce module system 

	* src/main.c: Minor wording fixes
	* src/Makefile.am (.cin.c): Require line info from m4
	* src/bi_other.m4 (debug_spec, debug_level): New functions.

2007-04-21  Sergey Poznyakoff  <gray@gnu.org.ua>

	* src/debugdef.m4, src/debug.cin, src/debug.hin: Debugging macros
	and supporting functions.
	* src/snarf.m4 (MF_SOURCE_DEBUG_NAME): New macro
	* src/lex.l, src/engine.c, src/dnscache.c,
	src/gram.y, src/dnsbase.c, src/mailfromd.h, src/dns.c, src/db.c,
	src/spf.c, src/cache.c, src/prog.c, src/main.c, src/rate.c: Use
	new debugging system.
	* src/Makefile.am: Build debug.[ch]
	* src/bi_other.m4 (cancel_debug): Removed
	
	* etc/sendmail-8.13.7.connect.diff: New file.  Patch for Sendmail
	to honor extended codes and textual messages returned by the connect
	handler.
	* etc/Makefile.am: Add sendmail-8.13.7.connect.diff

	* gacopyz/smfi.c, gacopyz/gacopyz.h (smfi_setlogmask): New function
	* gacopyz/gacopyz.c (gacopyz_handle_connection): Log an info
	message before finishing.

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

	* src/syslog_async.c, src/syslog_async.h: Async syslog
	implementation by Simon Kelley
	* src/mailfromd.h, src/main.c, src/Makefile.am,
	configure.ac: Implement async syslog.
	
	* doc/mailfromd.texi, NEWS: Document syslog-async

	* gacopyz/gacopyz.c (gacopyz_handle_connection): Print connection
	info after forking, so the actual PID is displayed.

2007-04-18  Sergey Poznyakoff  <gray@gnu.org.ua>

	* src/mu_dbm.c: When possible lock BDB databases directly.
	For version 2.x fall back to external lock method.
	
	* src/snarf.m4 (MF_DEFINED, MF_OPTVAL): New macros
	* src/bi_string.m4, src/bi_dns.m4, src/bi_mail.m4,
	src/bi_db.m4: Use MF_DEFINED and MF_OPTVAL to test values of
	the optional variables.
	* src/main.c: New option --state-directory
	* doc/mailfromd.texi: Revert the description of `#pragma option'

	* src/gram.y (apply_deferred_init): Fix error messages
	* src/mailfromd.h, src/prog.c, src/main.c, src/bi_other.m4,
	NEWS: Implement stack traces.
	
	* mflib/match_dnsbl.mf, mflib/heloarg_test.mf,
	mflib/valid_domain.mf, mflib/match_rhsbl.mf, mflib/spf.mf,
	mflib/match_cidr.mf, doc/mailfromd.texi: Use <> in #include
	statements  

2007-04-17  Sergey Poznyakoff  <gray@gnu.org.ua>

	* src/engine.c (mailfromd_daemon): Do not call
	mu_daemon_remove_pidfile, this results in a duplicate free at
	exit (compensate for mailutils bug)
	* src/bi_dns.m4 (getmx): Fix iteration over mxbuf

2007-04-16  Sergey Poznyakoff  <gray@gnu.org.ua>

	* src/mu_dbm.c, src/mu_dbm.h: Use external lock file for Berkeley
	DB (argghh)
	* src/mailfromd.h, src/db.c, src/main.c: Implement pragma option
	state-directory
	* tests/etc/config.in: Use #pragma option state-directory
	* doc/mailfromd.texi: Document #pragma option state-directory

	* gacopyz/gacopyz.c (shan_connect): Fix packet length calculation.
	* NEWS: Update
	
	* src/prog.c (instr_restex): Fix stack addressing (broken after 
	2007-04-01).  Add trace output.
	
2007-04-12  Sergey Poznyakoff  <gray@gnu.org.ua>

	* src/mu_dbm.c: 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>

	* src/engine.c, src/mailfromd.h, src/prog.c, src/main.c,
	TODO, doc/mailfromd.texi: Provide a special exception type for
	unresolved sendmail macros. 

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

	* doc/mailfromd.texi, NEWS: Document SPF functions

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

	* src/engine.c (concat_args): Print all arguments in debuging
	mode.
	(mailfromd_daemon): Set single-process mode if requested
	(mlfi_abort): Do not call filter_cleanup.

	* src/mailfromd.h (single_process_option): New variable
	* src/prog.c: Fix initialization of toh and computation of
	heap bounds in gc.
	* src/main.c: New option --single-process (Do not use, unless you
	know what you are doing!)
	* gacopyz/smfi.c, gacopyz/gacopyz.h (smfi_set_foreground): New
	function.

2007-04-02  Sergey Poznyakoff  <gray@gnu.org.ua>

	* src/gram.y (FOR ..) takes a stmtlist
	* src/bi_string.m4 (substr): Extra argument check
	* src/bi_dns.m4 (dns_getaddr, dns_getname): New functions
	* src/prog.c (expand_dataseg): Update `base'
	* doc/mailfromd.texi: Update

	* 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>

	* src/lex.l, src/stack.c, src/gram.y, src/drivers.c,
	src/mailfromd.h, src/prog.h, doc/mailfromd.texi, NEWS: Implement
	loop statement.
	* etc/mailfromd.rc: Replace `next' with `pass'

	* src/prog.c (s_off_cmp): Revert sorting order to match that of
	heap growth.

	* src/drivers.c (code_memref, code_type_arg),
	src/prog.c (struct eval_environ, adjust_stack, env_base, get_arg)
	(push, pop, heap_reserve_words, heap_tempspace, heap_max_tempspace)
	(heap_fix_tempspace, instr_xchg, instr_dup, env_init)
	(env_make_frame, env_leave_frame, eval_environment, env_final_gc),
	src/prog.h, NEWS, doc/mailfromd.texi: Revert stack growth
	direction. Expand stack as the need arises.

	* src/gram.y (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
	
	* src/snarf.m4, src/prog.c, src/prog.h: Use different argument
	accessors for different argument types.

	* src/drivers.c (code_type_bin, code_type_regex,
	optimize_type_regcomp, code_type_regcomp), src/mailfromd.h (struct
	regcomp_data), src/prog.c (register_regex, instr_regex,
	instr_regcomp, instr_regmatch, instr_regmatch_mx): Use reserved
	rt_regex slots for dynamically compiled regular expressions.

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

	* src/Makefile.am, src/mtasim.c: mtasim supports standard options.

	* src/drivers.c, src/prog.c, src/opcodes: 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

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

	* src/symtab.c, src/lex.l, src/gram.y, src/drivers.c,
	src/mailfromd.h, src/optab.opc, src/prog.c, src/opcodes,
	src/prog.h, src/main.c: Reimplement pre-compiled regular
	expressions.

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

	* configure.ac, Makefile: Switch to Autotest based testsuite
	* testsuite/: Remove
	* tests/: New directory
	* tests/farg.at, tests/ismx.at, tests/atlocal.in, tests/catch.at,
	tests/catch01.at, tests/version.at, tests/cond02.at,
	tests/shadow.at, tests/cond04.at, tests/relayed02.at,
	tests/cond06.at, tests/testsuite.at, tests/invcidr.at,
	tests/ack.at, tests/accept.at, tests/bctx00.at,
	tests/switchn1.at, tests/greylist.at, tests/switchn3.at,
	tests/cidr2.at, tests/fctx00.at, tests/switchs1.at,
	tests/invip2.at, tests/switchs3.at,  tests/poll02.at,
	tests/arg.at, tests/reject.at, tests/hostname.at,
	tests/resolve.at, tests/hasmx.at, tests/invcidr2.at,
	tests/macros.at, tests/cond01.at, tests/invip.at, tests/cond03.at,
	tests/relayed01.at, tests/numrcpt.at, tests/cond05.at,
	tests/prec.at, tests/strings.at, tests/rescname.at,
	tests/tempfail.at,   tests/bctx01.at, tests/switchn2.at,
	tests/cidr1.at, tests/switchn4.at, tests/cidr3.at,
	tests/fctx01.at, tests/Makefile.am, tests/poll.at,
	tests/switchs2.at, tests/poll01.at, tests/ml.at, tests/switchs4.at,
	tests/poll03.at: New files
	* tests/etc: New directory
	* tests/etc/reject.rc, tests/etc/farg.rc, tests/etc/cidr.rc,
	tests/etc/catch.rc, tests/etc/catch01.rc, tests/etc/cond.rc,
	tests/etc/dns.rc, tests/etc/macros.rc, tests/etc/relayed.rc,
	tests/etc/shadow.rc, tests/etc/var.rc, tests/etc/numrcpt.rc,
	tests/etc/strings.rc, tests/etc/prec.rc, tests/etc/relayed.list,
	tests/etc/ack.rc, tests/etc/accept.rc, tests/etc/tempfail.rc,
	tests/etc/switch.rc, tests/etc/greylist.rc, tests/etc/poll-1.rc,
	tests/etc/sa01.rc, tests/etc/sa02.rc, tests/etc/poll.rc,
	tests/etc/sa03.rc, tests/etc/config.in, tests/etc/sa04.rc,
	tests/etc/ml.rc, tests/etc/arg.rc: Move from testsuite/etc

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

	* src/gram.y, srv/drivers.c: Remove `next' node type

	* src/drivers.c: New file. Code generation drivers.
	* src/gram.y: Include drivers.c and node-tab.c.
	* src/drv.awk: New file. Generate node-type.h and node-tab.c
	headers.
	* src/mailfromd.h: Include node-type.h instead of defining
	node_type.
	* src/Makefile.am: Add drivers.c, drv.awk and build rules for
	node-type.h and node-tab.c

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

	* src/mailfromd.h (getmxip): New function
	* src/dns.c (getmxip): New function
	* src/bi_dns.m4: (getmx): New built-in
	* doc/mailfromd.texi: Document getmx
	
	* src/prog.c (mx_match): Do not raise exception if mf_not_found is
	returned.
	* src/bi_sa.m4 (open_connection): Raise mf_url if unknown protocol
	is specified in the URL.
	* src/mtasim.c: Minor fix
	
2007-03-19  Sergey Poznyakoff  <gray@gnu.org.ua>

	* src/engine.c, src/gram.y, src/status.mfi, doc/mailfromd.texi:
	Implement connect handler. Pass additional argument to envfrom and
	envrcpt.
	* gacopyz/gacopyz.c (shan_connect): Bugfix
	* NEWS: Update

	* src/mtasim.c (process_gacopyz_reply): Do not switch to quit
	state unless SMFIR_SHUTDOWN is received.

	* testsuite/lib/mailfromd.exp: Use mtasim instead of sendmail
	* testsuite/etc/ml.pat, testsuite/etc/reject.pat: Adopt for
	mtasim.
	* gacopyz/server.c (gacopyz_srv_send_command): Bugfix

	* src/gram.y, src/mailfromd.h, src/prog.c, src/opcodes: Code
	regex_flags along with regcomp.
	* src/bi_dns.m4 (primitive_hasmx): Do not free mxbuf if the lookup
	failed. 
	* testsuite/mailfromd/hasmx.exp: Modify	
	
	* src/lex.l: Fix handling of double % and $ in literals
	* src/bi_ipaddr.m4 (len_to_netmask): Raise mf_range if n is out of
	range.
	* mflib/heloarg_test.mf: Fix typo
	* mflib/revip.mf: Revrite using IP built-ins
	* mflib/match_dnsbl.mf, mflib/strip_domain_part.mf,
	mflib/is_ip.mf, mflib/match_rhsbl.mf: Move detailed descriptions
	to the docs 
	* mflib/revip.mf: Rewrite using ntohl().

	* doc/mailfromd.texi: Update
	* doc/Makefile.am (check-mflib): New rule
	* NEWS: Update

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

	* src/stack.c: New file
	* src/Makefile.am: Add stack.c
	* src/gram.y, src/mailfromd.h, doc/mailfromd.texi: Implement
	`#pragma regex push|pop'
	* mflib/match_dnsbl.mf,  mflib/strip_domain_part.mf,
	mflib/heloarg_test.mf, mflib/is_ip.mf, mflib/revip.mf,
	mflib/match_rhsbl.mf, mflib/spf.mf, mflib/match_cidr.mf: preserve
	user regex settings.

	* 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

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

	* 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.

	* 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

	* src/engine.c, src/gram.y, src/dnsbase.c, src/mtasim.c: Minor
	stylistic and bug fixes.

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

	* doc/mailfromd.texi (Data Types): Fix description of numeric
	data type implementation.

	* etc/Makefile.am (DEFAULT_PIDFILE): Fix the leftover usage of
	MAILFROMSTATEDIR
	* src/engine.c (check_on_host): Break sender email iteration if
	the server tempfails.

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

	* src/mtasim.c: Implement basic milter support
	Implement long options.
	* gacopyz/gacopyz.h, gacopyz/gacopyz_priv.h, gacopyz/server.c: 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
	
	* src/mtasim.c: Implement mail from and rcpt to
	* gacopyz/gacopyz.h: Likewise
	* gacopyz/gacopyz_priv.h: Likewise
	* gacopyz/log.c: Likewise
	* gacopyz/server.c: Likewise
	* gacopyz/io.c: Likewise

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>

	* src/symtab.c (function_install): Init statemask
	* src/gram.y: Fix builtin context checks. Implement function
	context checks.
	* src/mailfromd.h (struct function): New member `statemask'
	* src/Makefile.am: Exempt mtasim from installcheck
	* testsuite/mailfromd/functx.exp: New testcase
	* testsuite/mailfromd/DISTFILES: Add functx.exp
	* testsuite/etc/Makefile.am: Add sa*.rc
	* testsuite/etc/sa01.rc, testsuite/etc/sa02.rc,
	testsuite/etc/sa03.rc, testsuite/etc/sa04.rc: New files.
	
	* NEWS: Update

	Start implementing test MTA simulator.
	
	* src/mtasim.c: New file
	* src/gram.y: Minor fixes
	* src/main.c: New option --gacopyz-debug
	* src/Makefile.am: Build nullmta
	* gacopyz/io.c: New file
	* gacopyz/server.c: New file
	* gacopyz/gacopyz.h, gacopyz/gacopyz_priv.h, gacopyz/log.c, 
	gacopyz/gacopyz.c, gacopyz/Makefile.am: Start implementing server
	code. 

2007-02-21  Sergey Poznyakoff  <gray@gnu.org.ua>

	* 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>'
	* NEWS: Update
	
	* src/spf.c: Change handling of modifiers.

	* src/dnsbase.c, src/spf.c, src/dns.h, src/spf.h,
	bi_spf.m4: Change calling convention for the interface
	functions (spf_query_t, spf_answer_t); fix IP address comparisons;
	implement builtin spf variables

2007-02-18  Sergey Poznyakoff  <gray@gnu.org.ua>

	* src/spf.c: Implement all modifiers, improve debugging.

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

	* src/dnsbase.c (_getmx, dns_get_mx_records): ttl can be NULL
	* src/spf.c: Implement all mechanisms

	* src/spf.c, src/spf.h: Templates for SPF support
	* src/bi_spf.m4: Interface definitions for SPF support
	* src/dns.c: Move generic DNS calls to dnsbase.c. Retain only
	interface calls.
	* src/dnsbase.c, src/dns.h: Generic DNS support

	* src/mailfrom.h: Move generic DNS declarations to dns.h
	* src/engine.c, src/bi_dns.m4, src/prog.c: Rename freemx to
	dns_freemx
	* src/main.c: Fix warning message wording
	* src/Makefile.am: Add new sources
	* bootstrap (MODLIST): Add memrchr

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>

	Move version control under SVN. Remove .cvsignore files.
	CVS copy kept around for references.

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

	* doc/mailfromd.texi: Update
	* src/gram.y: Change deprecation warning.

	* gacopyz/proc.c (gacopyz_cleanup_conn): Print debugging message;
	Do not display spurious 'signal 15' messages
	* src/engine.c (mailfromd_daemon): Improve logging

	* src/main.c: Hide deprecated command line options

	* src/bi_vars.m4 (builtin_post_setup): Use string_alloc to
	allocate literals
	* src/mailfrom.h (DEFAULT_FROM_ADDRESS): New define
	* src/main.c: Use DEFAULT_FROM_ADDRESS

	* src/gram.y: Store xlat tables in the data segment.
	* src/prog.c: Likewise
	* src/mailfrom.h (struct switch_stmt): Additional fields to help
	code generation
	* src/opcodes (XLAT, XLATS): instruction data has 2 words
	* src/optab.opc (scan_code): Remove special handling for xlat(s)

	Create a relocatable code. Fixup relocatable references before
	entering the working mode.
	
	* src/optab.opc: New file
	* src/optab.oph: New file
	* src/opcode.awk: New file
	* src/opcodes: New file
	* src/Makefile.am: Add optab.opc, optab.oph, opcode.awk
	* src/gram.y: Use code_op instead of code_instr
	* src/mailfrom.h (instr_*): Remove prototypes.
	(code_op, fixup_code): New prototypes.
	* src/main.c (main): Call fixup code
	* src/mf-status.mfi: Indicate c mode for emacs.
	* src/prog.c (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
	* src/prog.h (struct optab): New data type
	(scan_code): New function
	(prog): extern decl

2007-01-22  Sergey Poznyakoff  <gray@gnu.org.ua>

	* NEWS: Update
	* doc/mailfromd.texi: Update
	* etc/mailfromd.rc: Remove pragma option mailfrom and ehlo
	* src/gram.y,src/symtab.c: Use parse_warning where appropriate
	* src/lex.l, src/mailfrom.h (parse_warning)
	(parse_warning_locus): New functions
	* src/main.c: Print informative warning messages where
	(pragma or command line option) ehlo or mailfrom is used

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

	* NEWS: Update
	* doc/mailfromd.texi: Update
	* src/bi_vars.m4 (builtin_post_setup): smtp_domain and
	postmaster_email removed.
	* src/gram.y: Bugfix
	* src/main.c (smtp_domain,postmaster_email): Remove
	--ehlo and --mailfrom deprecated

	* gacopyz/context.c (smfi_setpriv, smfi_getpriv): Rename to
	gacopyz_*
	* gacopyz/gacopyz.h (gacopyz_setpriv, gacopyz_getpriv): New
	functions.
	* src/bi_other.m4, src/bi_sa.m4: Minor fixes.
	* src/db.c (db_format_enumerate, db_format_install)
	(db_format_lookup): New functions
	* src/dns.c (_resolve_ipstr): Always copy ipstr to namebuf
	* src/engine.c (MLFIPRIV): Remove unused macro. Use gacopyz_
	calls instead of smfi_ ones, except for initialization functions.
	* src/gram.y: Provide for deferred variable initialization (to
	initialize variables from the command line).
	* src/lex.l (free_string_space, mf_strdup): New functions
	* src/mailfrom.h (struct old_header_node.name): const
	(SYM_DB_FORMAT): Remove macro
	(free_symbols,defer_initialize_variable,free_string_space)
	(db_format_enumerate): New functions.
	* src/main.c (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.
	* src/prog.c (env_reference): Minor enhancement
	(env_set_variable): Fix call to mu_error
	* src/symtab.c (union symentry): Remove v.db
	(free_symbols): New function
	(db_format_install, db_format_lookup): Remove. Reimplement in db.c
	* testsuite/mailfromd/catch.exp: Update invocations of mailfromd

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

	* doc/mailfromd.texi: Update
	* src/prog.c (struct optab): Fix opname for instr_asgn
	(env_final_gc): Bugfix

	* doc/Makefile.am (check-exceptions): Fix rule
	* doc/mailfromd.texi: Update
	* src/gram.y (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
	* src/lex.l: Warn about legacy constant usage only once
	Implement #error.

	* etc/mailfromd.rc: Update
	* src/main.c (main): Remove call to builtin_post_setup.
	* src/prog.c (instr_variable): Print more trace info
	(instr_svalidate): Restore - synch with 3.1 branch.
	
2007-01-18  Sergey Poznyakoff  <gray@gnu.org.ua>

	* src/gram.y: Do not compile autogenerated functions at once.
	Expand unprefixed named constants only when a value is expected
	* src/lex.l: Likewise
	* src/mailfrom.h (struct stmtlist): New data type

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

	* NEWS: Update
	* configure.ac: Raise patchlevel to 91
	* doc/mailfromd.texi: Update
	* src/Makefile.am (status.mfh, mf-status.c): New built sources
	* src/mfstat.awk: New file
	* src/status.mfi: New file
	* src/mf-status.mfi: New file
	* src/mailfrom.h, src/bi_dns.m4 (mf_resolve): Rename to mf_noresolve
	* src/gram.y (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
	* src/lex.l (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
	* src/prog.c (string_off,string_count): Removed. Relocation table
	is used instead.
	* src/prog.h (post_parse): Remove
	* testsuite/etc/catch.rc: Include <status.mfh>, do not use &const.
	* testsuite/etc/catch01.rc: Likewise
	* testsuite/etc/hasmx.rc: Likewise
	* testsuite/etc/poll-1.rc: Likewise
	* testsuite/etc/poll.rc: Likewise
	* testsuite/lib/mailfromd.exp: Update include path

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

	* src/gram.y, src/lex.l, src/mailfrom.h, src/prog.c: Store
	locus.file in the dataseg.

	* src/gram.y: Implement const declarations
	* src/lex.l: Likewise
	* src/mailfrom.h: Likewise
	* src/symtab.c: Likewise
	* src/main.c: Minor change
	* src/prog.c: Minor change
	
2007-01-13  Sergey Poznyakoff  <gray@gnu.org.ua>

	* gacopyz/gacopyz.h (GACOPYZ_VBUFSIZE): New define
	(gacopyz_format_vbuf): New decl
	* gacopyz/log.c (VBUFSIZE): Rename to GACOPYZ_VBUFSIZE
	(format_vbuf): Rename to gacopyz_format_vbuf; make extern
	* src/bi_mail.m4, src/bi_sa.m4, src/bi_system.m4, src/cache.c,
	src/dns.c, src/dnscache.c, src/engine.c, src/main.c,
	src/rate.c: Minor fixes
	* src/bi_vars.m4 (builtin_post_setup): Change initialization of
	ehlo_domain and mailfrom_address.
	* src/gram.y, src/mailfrom.h, src/prog.c, src/symtab.c: 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).
	* src/lex.l (string_alloc,string_finish): Return literal
	
2007-01-06  Sergey Poznyakoff  <gray@gnu.org.ua>

	* src/bi_vars.m4 (builtin_post_setup): Change initialization of
	ehlo_domain and mailfrom_address built-in variables.
	* src/gram.y: 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
	* src/prog.c: Redo data segment initialization and handling.
	(dataseg,datasize,dataseg_reloc,dataseg_reloc_count): New
	variables
	(struct eval_environ.var): Rename to dataseg
	* src/prog.h (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
	
2007-01-04  Sergey Poznyakoff  <gray@gnu.org.ua>

	* TODO: Update
	* src/engine.c (smtp_last_received): Remove superfluous
	conditional
	(method_strict,method_standard): Set last_poll_* variables to "",
	not NULL
	* src/gram.y: First build the entire tree, than compile it at
	once.
	Fix varaible shadowing.
	Reorganize lexical tie-ins.
	* src/lex.l: New keyword `const'.
	(parse_error,parse_error_locus): Increase buffer size to 512.
	* src/mailfrom.h (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
	* src/symtab.c (init_variable): New function
	(variable_install): Use init_variable
	(variable_replace): New function
	* testsuite/etc/shadow.rc: New file
	* testsuite/etc/Makefile.am (RCFILES): Add shadow.rc
	* testsuite/mailfromd/shadow.exp: New file
	* testsuite/mailfromd/DISTFILES: Add shadow.exp

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

	* doc/mailfromd.texi: Fix typo

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

	* configure.ac: Do not quote DEFAULT_LOG_FACILITY
	* NEWS: update
	* src/bi_string.m4 (unfold) new function
	* src/engine.c (check_on_host): Issue RSET if the previous MAIL
	FROM returned 4xx
	(mlfi_helo): Push malloced copy of helohost
	* src/main.c (option_deprecated): mark as warning.

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

	* NEWS: Update
	* src/bi_string.m4 (message_header_decode, message_header_encode):
	New functions.

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

	* NEWS: Update
	* TODO: Update
	* doc/mailfromd.texi: Update the description of resolve and the
	code of match_dnsbl and match_rhsbl
	* src/bi_dns.m4 (resolve): Take an optional second argument
	* src/dns.c (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.
	* src/lex.l: Allow `==' as well as `='
	* src/mailfrom.h (resolve_ipstr_domain): New function 

	* src/main.c (switch_to_privs): Refuse to run as root
	* doc/mailfromd.texi: Fix typo.
	* bi_io.m4, db.c, dnscache.c, engine.c, gram.y, lex.l, main.c,
	prog.c: Capitalize diagnostic messages
	
2006-12-14  Sergey Poznyakoff  <gray@gnu.org.ua>

	* NEWS: Update
	* configure.ac: New configuration variable DEFAULT_LOG_FACILITY
	* doc/mailfromd.texi: Update
	* src/main.c (main): Set log_facility.

	* src/lex.l: Allow any amount of whitespace between the function
	name and the opening parenthesis.
	* src/lex.l: Fix the previous patch
	* src/gram.y: Revert accidental commit

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

	Synchronization with 3.1 branch:

        * NEWS, configure.ac: Version 3.1.90
        * doc/mailfromd.texi: Fix typo
        * src/bi_sa.m4 (spamd_send_stream): Assume captured stream already
        has \r in front of each \n
        (clamav): always shutdown data stream as a fd-style stream.
        * src/dns.c (_resolve_ipstr): First argument is const
        (resolve_ipstr,resolve_hostname): First argument is const
        * src/dnscache.c (parse_value,dns_make_key)
        (dns_cache_get,dns_cache_put): keystr is const
        * src/gram.y (optimize_node): Fix typo that caused correct
        `matches' conditions to be rejected (e.g. strip_domain_part.mf)
        * src/mailfrom.h (resolve_ipstr,resolve_hostname): First argument
        is const
        (dns_cache_get,dns_cache_put): keystr is const
        * src/snarf.m4 (MF_BEGIN_TEMP_SPACE): Do not terminate with a
        semicolon, since the statement is supposed to be used in argument
        declarations.

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

	* NEWS: Update
	* doc/mailfromd.texi: Fix typo
	* src/bi_sa.m4 (spamd_send_stream): Assume captured stream already
	has \r in front of each \n
	(clamav): always shutdown data stream as a fd-style stream.
	* src/dns.c (_resolve_ipstr): First argument is const
	(resolve_ipstr,resolve_hostname): First argument is const
	* src/dnscache.c (parse_value,dns_make_key)
	(dns_cache_get,dns_cache_put): keystr is const
	* src/gram.y (optimize_node): Fix typo that caused correct
	`matches' conditions to be rejected (e.g. strip_domain_part.mf)
	* src/mailfrom.h (resolve_ipstr,resolve_hostname): First argument
	is const
	(dns_cache_get,dns_cache_put): keystr is const
	* src/snarf.m4 (MF_BEGIN_TEMP_SPACE): Do not terminate with a
	semicolon, since the statement is supposed to be used in argument
	declarations.
	
2006-12-10  Sergey Poznyakoff  <gray@gnu.org.ua>

	* src/Makefile.am (install-data-local): Rename leftover
	MAILFROMSTATEDIR
	* src/rate.c (get_rate): Bug fix: attempt to free auto storage

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

	* NEWS, configure.ac: Version 3.1

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

	* NEWS, configure.ac: Update patchlevel
	* doc/mailfromd.texi: Finished docs for 3.1

	* configure.ac (MAILFROMSTATEDIR): Rename to DEFAULT_STATE_DIR
	* src/Makefile.am: Likewise
	* src/mailfrom.h: Likewise
	* src/main.c: Likewise
	* src/bi_dns.m4 (resolve): Return "0" if the argument is not
	resolved.
	* src/gram.y: Mark comparison operators as nonassoc
	
	* doc/Makefile.am (extract): Handle include dependencies
	* doc/extract.awk: Handle @multitable blocks.  Print a diagnostic
	message if some other function is required
	* doc/mailfromd.texi: Almost finished
	* doc/fdl.texi: Fix overfull hblock
	
2006-12-05  Sergey Poznyakoff  <gray@gnu.org.ua>

	* NEWS: Update
	* doc/Makefile.am: Minor change
	* doc/mailfromd.texi: Update
	* src/gram.y (print_locus): Bugfix
	* testsuite/etc/config.in: Remove extra space

	* NEWS: Update
	* doc/untabify.el: New file
	* doc/Makefile.am (EXTRA_DIST): Add untabify.el
	(check-format,untabify,final): New targets
	* doc/mailfromd.texi: Consistently use `filter script' instead of
	`configuration file'.  Add some missing information.
	* etc/rc.in: Do not use obsolete -c option to mailfromd
	* testsuite/lib/mailfromd.exp, testsuite/mailfromd/ack.exp,
	testsuite/mailfromd/arg.exp, testsuite/mailfromd/catch.exp,
	testsuite/mailfromd/cidr.exp, testsuite/mailfromd/cond.exp,
	testsuite/mailfromd/dns.exp, testsuite/mailfromd/hasmx.exp,
	testsuite/mailfromd/macros.exp, testsuite/mailfromd/poll.exp,
	testsuite/mailfromd/prec.exp, testsuite/mailfromd/relayed.exp,
	testsuite/mailfromd/strings.exp, testsuite/mailfromd/switch.exp,
	testsuite/mailfromd/var.exp: Likewise 
	
	* src/Makefile.am (builtin.h): Depend on M4_FILES

	* src/gram.y, src/mailfrom.h, src/main.c: Remove -c option. Remove
	the inconsistent usage of `config_' prefix.
	* src/lex.l: Allow hex numbers to be prefixed with 0X as well.

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

	* NEWS: Update
	* src/bi_mail.m4: New file
	* src/Makefile.am: Add bi_mail.m4
	* src/main.c: Use "mailer" capability

	* NEWS: Update
	* doc/mailfromd.texi: Update
	* src/dns.c (get_mx_records): Use resolve_ipstr to resolve IP
	addresses.
	* src/gram.y: Implement bitwise operators: &, |, ^, ~
	Implicit declarations within functions create automatic
	variables.
	* src/lex.l: Accept C-like notations for hex and octal numbers.
	* src/mailfrom.h: Implement bitwise operations
	* src/prog.c: Likewise

	* NEWS: Update
	* configure.ac: There's no use to pass MAILFROMSTATEDIR and
	DEFAULT_SOCKET in config.h, revert to the prior scheme
	* src/Makefile.am (AM_CPPFLAGS): Likewise
	* gacopyz/proc.c (print_status): Log normal child exits at
	SMI_LOG_INFO priority
	* src/dnscache.c (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
	* src/lex.l: Implement search path for include files
	* src/mailfrom.h (add_include_dir): New proto.
	* src/main.c: New option -I (--include)
	* testsuite/etc/greylist.in: Remove
	* testsuite/etc/greylist.rc: New file
	* testsuite/etc/Makefile.am (RCFILES): Add config.in.  Replace
	greylist.in with greylist.rc
	(noinst_DATA, CLEANFILES): Add config.rc, remove greylist.rc
	* testsuite/etc/.cvsignore: Add config.rc, remove greylist.rc
	* testsuite/etc/config.in: New file
	* testsuite/etc/dns.rc: Include config.rc
	* testsuite/etc/hasmx.rc: Likewise
	* testsuite/etc/greylist.pat: Remove :RCDIR instruction
	* testsuite/lib/mailfromd.exp (start_daemon,mailfromd_exec): Add
	-I option
	* testsuite/mailfromd/greylist.exp: Remove conditional
	
	* NEWS: Update
	* configure.ac: Refuse to build without DBM.
	Pass all default values via config.h
	Print configuration summary at the end of the run.
	* doc/mailfromd.texi: Update
	* src/Makefile.am (AM_CPPFLAGS): Remove extra defines.  These are
	now passed via config.h
	* src/bi_db.m4, src/cache.c, src/db.c, src/dnscache.c,
	src/mailfrom.h, src/main.c, src/rate.c [!USE_DBM]: Remove.  DBM is
	now required.

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

	* Makefile.am (alpha,alphacheck): New rules
	* NEWS: Update
	* configure.ac: Define DEFAULT_DNS_NEGATIVE_EXPIRE_INTERVAL
	* doc/mailfromd.texi: Update
	* src/Makefile.am (AM_CPPFLAGS): Define
	DEFAULT_DNS_NEGATIVE_EXPIRE_INTERVAL
	* src/dns.c (getmx,resolve_ipstr,resolve_hostname): Enable
	negative caching
	* src/dnscache.c (dns_cache_put): Fix calculation of the
	expiration date for negative records.
	(dns_cache_format_struct): Use
	DEFAULT_DNS_NEGATIVE_EXPIRE_INTERVAL
	* src/gram.y (pragma_database): Handle special cases for `database
	dns'.
	* src/main.c (db_format_enumerator): Likewise
	* testsuite/mailfromd/DISTFILES: Add dns.exp
	
	* doc/mailfromd.texi: Document the dns database

	* configure.ac: Check for unsigned 32-bit integer type
	* gacopyz/Makefile.am (noinst_PROGRAMS): Remove
	* gacopyz/gacopyz_priv.h: (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
	* gacopyz/gacopyz.c: Likewise 
	* src/dnscache.c: New file
	* src/Makefile.am: Add dnscache.c
	* src/bi_dns.m4: Rewrite using new dns functions
	* src/dns.c: Rewrite using global cache
	(resolve_hostname): New function
	(resolve_ipstr): Change signature
	* src/mailfrom.h (resolve_ipstr): Change prototype
	(resolve_hostname): New function
	(DEFAULT_DNS_DATABASE): New define
	(dns_cache_get,dns_cache_put): New functions
	* src/main.c (host_in_relayed_domain_p): Rewrite using new
	resolve_ipstr
	(db_format_setup): Initialize dns_cache_format
	* src/prog.c (struct eval_environ.dict): Remove. All uses updated.
	* testsuite/etc/dns.rc: New file
	* testsuite/etc/Makefile.am (RCFILES): Add dns.rc
	* testsuite/etc/dns.exp: New test case
	* testsuite/mailfromd/DISTFILES: Add dns.exp

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

	* src/prog.c (env_final_gc): Free temporary storagee before
	returning. 

2006-11-30  Sergey Poznyakoff  <gray@gnu.org.ua>

	* src/engine.c (mlfi_envfrom): print entire argument array in
	debug level 70
	(mlfi_envrcpt): Likewise.

	* src/mailfrom.h (debug macros): Rewritten

	* configure.ac: Raise patchlevel to 92
	* NEWS: Likewise.
	
2006-11-29  Sergey Poznyakoff  <gray@gnu.org.ua>

	* bootstrap: Minor change
	* doc/mailfromd.texi: Update
	* src/gram.y (print_node): Handle nonprintable characters in strings.

	* NEWS: Update
	* src/engine.c (method_standard): Fix the call to
	set_last_poll_result.
	* src/gram.y: Implement cross-reference listing.
	* src/mailfrom.h (struct variable): New member xref.
	(env_final_gc): New proto.
	* src/main.c: New option --xref (--dump-xref)
	* src/prog.c: Implement simple GC for compacting the heap space.
	* src/prog.h (post_parse): New proto

2006-11-28  Sergey Poznyakoff  <gray@gnu.org.ua>

	* src/bi_poll.m4: Minor indentation fix
	* src/prog.c (instr_retcatch): Call env_leave_frame with nargs=1
	(env_catch pushes one argument)
	(env_init): Remove initialization of toh
	(create_environment): Initialize toh here (see the comment).

	* src/gram.y (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.
	* src/lex.l (parse_error_locus): Bugfix
	* src/prog.c (optab): Add missing entry (NEG)
	
	* src/prog.c (eval_environment): Prevent coredumps on invalid
	PC values.

	* src/bi_other.m4 (disable_program_trace): Rename to
	cancel_program_trace.
	* NEWS: Update
	
	* src/bi_system.m4 (bi_strftime): Call MF_RETURN_TEMP_SPACE with
	an argument.
	* src/snarf.m4 (MF_RETURN_TEMP_SPACE): Bugfix - call
	heap_fix_tempspace.
	Take an optional argument specifying the size of the data stored
	in the temporary memory.
	
2006-11-27  Sergey Poznyakoff  <gray@gnu.org.ua>

	* src/builtin.def: New file
	* src/init.m4: New file
	* src/Makefile.am  (noinst_HEADERS,EXTRA_DIST,BUILT_SOURCES): Add
	builtin.h, builtin.def, init.m4
	(.def.h): New rule
	* src/bi_db.m4, src/bi_dns.m4, src/bi_io.m4, src/bi_other.m4,
	src/bi_poll.m4, src/bi_sa.m4, src/bi_string.m4, src/bi_system.m4,
	src/bi_vars.m4: Use MF_INIT without arguments
	* src/mailfrom.h (__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
	* src/main.c (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
	* src/prog.c, src/prog.h: Change to new tracing scheme
	* src/snarf.m4: Assume C comments
	(MF_MODULE_NAME,MF_MODULE_MASK): New defines
	(mf_prog_trace): New define
	(MF_DEFUN): Change to new tracing scheme
	(MF_INIT): Do not take a mandatory argument. Deduce the module
	name from the file name.

2006-11-25  Sergey Poznyakoff  <gray@gnu.org.ua>

	* src/prog.c (instr_symbol): Return the value using pushs, not
	push. 

	* NEWS: Update
	* doc/mailfromd.texi: Update
	* src/bi_db.m4 (dbput): Throw exception after closing the db
	(dbdel): New function
	* src/bi_system.m4 (system): Return exit code of the executed
	command.
	* src/gram.y: Allow constant expressions in top-level set
	statements.

2006-11-24  Sergey Poznyakoff  <gray@gnu.org.ua>

	* src/bi_system.m4 (strftime): New function
	* src/lex.l: Fix handling of escape sequences at the beginning of
	a string and before the beginning of an interpreted sequence
	within the string.
	* src/prog.c (heap_max_tempspace, heap_fix_tempspace): New
	functions.
	* src/prog.h: Likewise
	* src/snarf.m4 (MF_BEGIN_TEMP_SPACE,MF_END_TEMP_SPACE)
	(MF_RETURN_TEMP_SPACE): New macros

	* src/gram.y: Various fixes

	* src/bi_db.m4 (dbmap_lookup): Defval can be NULL
	Make sure returned string is null-terminated
	(dbput): New built-in function
	* src/bi_system.m4 (time): New built-in
	* src/gram.y (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
	* src/lex.l (BUILTIN_P,FUNCTION_P): New tokens
	(IDENT}/"("): New rule
	* src/snarf.m4: Fix handling of zero argument count
	* src/symtab.c (remove_symbol): Fix assertion
	* testsuite/etc/farg.rc: New file
	* testsuite/etc/prec.rc: New file
	* testsuite/etc/Makefile.am (RCFILES): Add farg.rc and prec.rc
	* testsuite/mailfromd/DISTFILES: Add prec.exp
	* testsuite/mailfromd/arg.exp: Add new test (farg.rc)

2006-11-23  Sergey Poznyakoff  <gray@gnu.org.ua>

	* src/bi_io.m4: New file
	* src/bi_system.m4: New file
	* src/Makefile.am (RCFILES): Add bi_io.m4 and bi_system.m4
	* src/gram.y: Modify error handling and proccall production.
	Get rid of svalidate.
	* src/lex.l: New tokens FUNCTION_P and BUILTIN_P
	(parse_error,parse_error_locus): Increment error_count unless fmt
	begins with `warning:'.
	* src/mailfrom.h (mf_ioerr): New exception
	* src/prog.c: 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
	* src/prog.h  (env_get_builtin_priv)
	(builtin_priv_register, error_count): New declaration
	* src/snarf.m4 (MF_DECLARE_DATA,MF_GET_DATA): New macros
	* src/symtab.c (va_builtin_install_ex): Bugfix
	(variable_install, function_install): Init all members
	
2006-11-21  Sergey Poznyakoff  <gray@gnu.org.ua>

	* doc/mailfromd.texi: Document pragma stacksize
	* doc/values.texi: Update
	* src/gram.y: svalidate is not needed any more (I hope)
	* src/prog.c: Likewise

	* src/gram.y: Fix the precedence of function calls and boolean
	negation. 
	* doc/mailfromd.texi

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

	* doc/mailfromd.texi: Document string and db functions
	* src/bi_db.m4 (dbmap_lookup): Avoid needless memory allocation
	* src/bi_string.m4 (toupper, tolower): Fix return type
	declarations
	(substr,rindex): Fix bugs
	* src/gram.y: Rewrite expression rules to properly handle
	concatenations and to reduce the number of conflicts.
	Compute automatic and parameter offsets locally
	Rewrite optimizer.
	* src/mailfrom.h (node_type_auto): Remove, node_type_variable does
	the job
	(VAR_VOLATILE,VAR_EXTERN): New defines (for future use)
	(struct variable): New member flags.
	* src/prog.c (dump_asgn): Bugfix
	* src/snarf.m4 (MF_VAR): Set VAR_VOLATILE by default
	* testsuite/etc/Makefile.am (RCFILES): Add strings.rc
	* testsuite/etc/strings.rc: New file
	* testsuite/mailfromd/strings.exp: New file
	* testsuite/mailfromd/DISTFILES: Add strings.exp

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

	* bootstrap: New file
	* NEWS: Update
	* doc/values.texi (INITIAL-RESPONSE-TIMEOUT): Update.
	* doc/mailfromd.texi: Update
	* src/Makefile.am: Create MAILFROMSTATEDIR with the right
	privileges.
	* src/bi_db.m4 (dbmap): Take an optional third argument.
	(dbget): New built-in
	* src/bi_string.m4 (substr): New function
	* src/db.c: Use xmalloc instead of emalloc
	* src/lex.l: Likewise
	* src/main.c: Likewise
	(xalloc_die): New function
	* src/gram.y: Hanlde optional arguments to built-ins
	Use xmalloc instead of emalloc
	* src/mailfrom.h: Include xalloc.h
	(struct builtin): New member optcount
	(va_builtin_install_ex): take 8 mandatory arguments
	(emalloc): Remove
	(heap_tempspace): New function
	* src/prog.c (heap_tempspace): New function
	Use xmalloc instead of emalloc
	* src/prog.h (heap_tempspace): New function
	* src/snarf.m4: Handle OPTIONAL keyword
	(MF_ALLOC_HEAP_TEMP): New macro
	* src/symtab.c: Use xmalloc instead of emalloc
	(emalloc): Remove
	(find_and_remove): Fix coredump
	
2006-11-14  Sergey Poznyakoff  <gray@gnu.org.ua>

	* src/gram.y: Bug fixes

	* NEWS: Update
	* configure.ac: Raise version to 3.0.91
	* doc/mailfromd.texi: Document -O option
	* src/gram.y: Implement code optimization
	* src/lex.l: Export string functions
	* src/mailfrom.h: Export string functions from lex.l
	* src/main.c: New option -O (--optimize)

	* NEWS: Update
	* configure.ac: Define split version
	* doc/mailfromd.texi: Document built-in macros
	* src/lex.l: New built-in macros
	* src/mailfrom.h (function_name): New function
	* testsuite/etc/macros.rc: New file
	* testsuite/etc/Makefile.am (RCFILES): Add macros.rc
	* testsuite/etc/ack.rc: Use full type names
	* testsuite/mailfromd/macros.exp: New test case
	* testsuite/mailfromd/DISTFILES: Add macros.exp

2006-11-13  Sergey Poznyakoff  <gray@gnu.org.ua>

	* NEWS: Update
	* doc/mailfromd.texi: Document `echo' statement
	* src/gram.y: Remove legacy handling for `rate'
	(function_name): New function
	* src/lex.l: Remove legacy handling for `rate'
	New keywords __file__, __line__ and __function__
	* src/main.c (decode_debug): Remove legacy handling of `cdyl'
	flags.
	* etc/sendmail-8.13.7.diff: Removed

	* NEWS: Update
	* README-alpha: Update
	* doc/mailfromd.texi: Update
	* src/bi_vars.m4 (numrcpt): Removed

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

	* NEWS: Update
	* doc/mailfromd.texi: Rewrite function examples using the new
	style
	* src/gram.y: 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
	* src/symtab.c: Make sure symbol table entries do not change their
	address during rehashing

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

	* src/gram.y, src/mailfrom.h, src/prog.c: Implement automatic
	variables 
	* src/lex.l: Make sure N in $N is positive

	* src/gram.y: Implement named function parameters and
	the framework for automatic variables.
	* src/mailfrom.h (storage_class_t): New type
	(struct variable): New members: storage_class, locus, shadowed
	(variable_remove): New function
	* src/symtab.c (remove_symbol): Split in two functions.
	(variable_remove): New function

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

	* configure.ac: Remove the legacy section
	* gacopyz/Makefile.am: Inconditionally build the targets
	* src/bi_vars.m4: New file
	* src/ml.c: Remove
	* src/Makefile.am (M4_FILES): Add bi_vars.m4
	(mailfromd_SOURCES): Remove ml.c
	* src/bi_db.m4: Use MF_RETURN, MF_RETURN_STRING, MF_VAR_REF
	* src/bi_dns.m4: Likewise
	* src/bi_other.m4: Likewise
	* src/bi_poll.m4: Likewise
	* src/bi_sa.m4: Likewise
	* src/bi_sa.m4: Likewise
	* src/engine.c (ctx_getsym): use gacopyz_setreply
	* src/gram.y: Replace calls to declare_string_variable and
	declare_numeric_variable with declare_variable
	(code_node): Fix coredump if node==NULL
	* src/mailfrom.h (declare_numeric_variable)
	(declare_string_variable): Remove
	* src/prog.c (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
	* src/prog.h (env_var_inc, variable_declared_p)
	(declare_variable): New decls
	* src/snarf.m4 (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
	* src/symtab.c (remove_symbol): New function

	* testsuite/etc/accept.pat: Make sure the test works offline
	* testsuite/etc/ml.pat: Likewise
	* testsuite/etc/numrcpt.pat: Likewise
	* testsuite/etc/reject.pat: Likewise
	* testsuite/etc/tempfail.pat: Likewise
	* testsuite/mailfromd/poll.exp: Likewise
	
	* src/snarf.m4 (MF_VAR): New macro
	(__mf_argtype,mf_typelist): Change expansion according to mailfrom.h
	* src/bi_db.m4, src/bi_poll.m4, src/bi_sa.m4: Use the new way of
	declaring MF variables. 

	* src/gram.y: 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).
	* src/lex.l: New rules for returning TYPE
	* src/prog.c: Update to match recent changes
	* src/symtab.c: Update to match recent changes
	* testsuite/etc/var.rc: Update to match recent changes (string is
	a keyword)
	
	Incorporate changes from 3.0 branch:

	* NEWS: Update

	* src/cache.c: Update invocations of mu_dbm_open, remove calls to
	mu_dbm_lock/mu_dbm_unlock.
	* src/db.c: Likewise.
	* src/mu_dbm.c: Likewise.
	* src/mu_dbm.h: Likewise.

 	* doc/Makefile.am (mailfromd_TEXINFOS): Add values.texi.
	* doc/values.texi: New file
	* doc/mailfromd.texi: Include values.texi. Document SMTP
	timeouts.
	* src/engine.c (smtp_stream_wait,smtp_wait,smtp_recvline)
	(check_on_host,listens_on): Implement new timeout control scheme.
	(smtp_recv_tm): New function
	* src/mailfrom.h (io_attempts,connect_attempts): Remove
	(io_timeout,connect_timeout): Change the type to time_t
	(response_timeout): New declaration
	
	(instr_rettype): Rename to data_type_t
	(rettype_string,rettype_number,rettype_unspecified): Rename to
	dtype_.*
	(struct un_node.result_type): New field
	(struct cast_node, positional_arg): New data types
	(enum node_type, node_type_cast): New value
	
	
	* src/main.c (io_attempts,connect_attempts): Remove
	(io_timeout,connect_timeout): Change the type to time_t
	(response_timeout): New variable
	(option_cache): Deprecate options connect-retry and
	io-retry
	(process_options): Additionally check if p->set is not NULL.
	

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

	* configure.ac, NEWS: Fix version: 3.0.90 (3.0.1 is moved to
	bug-fixing branch)
	
	* configure.ac: Raise version number to 3.0.1
	* NEWS: Update
	* etc/rc.in (mailfromd_stop): Fix arithmetical expression syntax
	* gacopyz/gacopyz.c (parse_state_arg): Bugfix: do not reuse
	parsing buffer!
	* src/gram.y (function_call): New function
	Allow functions returning unspecified (procedures) to be used as
	statements
	* src/lex.l: New token type PROCEDURE
	* src/mailfrom.h (struct function): Remove misleading comment

	* src/snarf.m4 (MF_CATCH, MF_CATCH_VAL, MF_ASSERT): New macros
	* src/bi_db.m4: Use catch/assert macros.
	* src/bi_dns.m4: Likewise.
	* src/bi_other.m4: Likewise.
	* src/bi_poll.m4: Likewise.
	* src/bi_sa.m4: Likewise.
	* src/bi_string.m4: Likewise.

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

	* src/gram.y: Update FIXME-xref.
	* src/mu_dbm.c (mu_dbm_open) [WITH_GDBM]: Use GDBM_NOLOCK, as we
	do the locking ourselves

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

	* src/engine.c: Fix multiple from address handling
	* src/gram.y: Put back the changes, only make sure the leading
	white space is properly stripped off the argument.c

	* src/gram.y (pragma_option): Undo the change from 2006-10-30.
	* src/main.c (opton_ehlo): Adjust for changes in option mailfrom
	syntax. 
	
2006-11-06  Sergey Poznyakoff  <gray@gnu.org.ua>

	Release 3.0
	
	* doc/mailfromd.texi: Update
	* etc/rc.in: Update

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

	* NEWS, configure.ac: Set the version number to 3.0
	(dropping libmilter support calls for raising the major number).
	* TODO: Update

	* src/Makefile.am: Install mailfromd in sbin
	* etc/Makefile.am (.in.mailfromd): Likewise
	* gacopyz/gacopyz.c (gacopyz_handle_connection): Reset SIGTERM and
	SIGHUP in child.
	* gacopyz/proc.c (gacopyz_cleanup_conn): Ignore SIGTERM while
	stopping children.

	* doc/gacopyz.texi: New file
	* doc/Makefile.am (mailfromd_TEXINFOS): Add gacopyz.texi
	(EXTRA_DIST): Add extract.awk
	(extract): New rule
	* doc/macros.texi (function-begin, function-end): Remove macros
	(example-output): New macro
	* doc/mailfromd.texi: Finish changes for 3.0

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

	* NEWS: Update
	* TODO: Update
	* doc/Makefile.am (check-pragmas): Minor change
	* doc/macros.texi (function-begin,function-end): New macros
	* doc/mailfromd.texi: Add missing documentation
	* etc/rc.in: New option `macros'.
	* gacopyz/gacopyz.c (ctx_read,ctx_write): Return immediately on
	timeout and eof.

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

	* etc/rc.in: New command 'configtest' (proposed by Jan)
	* gacopyz/gacopyz.c (gacopyz_run): Update invocation of
	gacopyz_cleanup_children.
	* gacopyz/gacopyz.h (gacopyz_cleanup_children): Change signature
	* gacopyz/proc.c: Do not keep the list of
	children. gacopyz_cleanup_children now does the housekeeping job.
	* src/engine.c (check_portspec): Minor fix: no use to make sp
	static.
	(mailfromd_daemon): Stop on SIGTERM, SIGQUIT, SIGHUP and SIGINT.
	Finally!	
	

	* src/engine.c (smfilter): Set child start handler

	* NEWS: Update
	* configure.ac: Warn if libmilter is requested
	* doc/mailfromd.texi: Remove any references to libmilter
	* src/mailfrom.h: Fix conditionals for definition of res_n*
	wrappers. 

	* configure.ac: Autodetect the presence of res_n* functions
	Define HAVE_PTHREAD if we need to use libpthread
	* gacopyz/gacopyz.c (macro_assoc_free): Initialize macro_assoc_t
	fields to NULL
	* src/bi_poll.m4: Fix trace output (AS part)
	* src/dns.c: Replace pthread-specific calls with macro wrappers
	* src/gram.y (on pollstmt do branches): Fix passing of arguments
	to the built-in poller
	* src/mailfrom.h: Define wrappers for phread and res_n* functions,
	if necessary

	* libmilter: Removed. Everything moved to /gacopyz
	* gacopyz: New directory. See libmilter for the previous history
	* Makefile.am (SUBDIRS): Replace libmilter with gacopyz
	* NEWS: Update
	* configure.ac: 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.
	* src/Makefile.am (INCLUDES): Add MILTER_INCLUDES
	* src/engine.c: Remove include mfapi.h
	(priv_get): Special provision for test mode
	* src/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
	* src/main.c: Do not include mfapi
	(MAILFROMD_DAEMON,MAILFROMD_TEST,MAILFROMD_DELETE,MAILFROMD_LIST)
	(MAILFROMD_EXPIRE,MAILFROMD_COMPACT)
	(MAILFROMD_SHOW_DEFAULTS): Move defines to mailfrom.h
	* src/ml.c: Include mfapi.h without leading directory. -I
	should take care of it.
	[GACOPYZ_VERSION_MAJOR]: Provide wrapper for gacopyz_setreply
	* gacopyz/smfi.c (smfi_main): Remove debugging hook
	
	* libmilter/dummy.c: Update
	* libmilter/milter.c, libmilter/milter.h, libmilter/smfi.c:
	Finished libmilter implementation.
	* testsuite/mail.null: Skip -f option and its argument.

	* libmilter/context.c, libmilter/milter.h, libmilter/smfi.c:
	(g_milter_setmlreply_v, smfi_setmlreply): Improved implementation.
	(g_milter_setmlreply_va): New function

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

	* libmilter/context.c, libmilter/milter.c, libmilter/milter.h
	libmilter/milter_priv.h, libmilter/smfi.c: Implement sending reply
	strings to sendmail.

	* src/gram.y: Fix type casting of arguments.

	* libmilter/milter.c, libmilter/milter.h,
	libmilter/milter_priv.h: Finish context loop implementation.
	* libmilter/dummy.c: Add to the repository
	
	* libmilter/milter.c (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
	* libmilter/milter.h (SMFI_V1_ACTS,SMFI_V2_ACTS): New defines
	(smfi_getsymval): Define to g_milter_getsymval
	(g_milter_getsymval): New prototype
	* libmilter/milter_priv.h (macro_assoc_t): New data type
	(struct smfi_str.macros): Change type to macro_assoc_t
	* libmilter/trans.awk: Define state_name array

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

	* configure.ac (BUILD_DUMMY): New var
	* libmilter/Makefile.am: Build dummy - a test program for
	libmilter
	* libmilter/log.c (g_smfi_logdump): New function
	* libmilter/milter.c: Lots of fixes. Start implementing the read
	and eval loop.
	* libmilter/milter.h (smfi_register): Fix prototype
	(g_smfi_logdump): New function
	* libmilter/milter_priv.h (enum macro_index)
	(milter_sockaddr_t,mi_uint32_t): New data type 
	(struct smfi_str.macros): Change type
	* libmilter/smfi.c (smfi_register): Fix declaration
	(smfi_main): Temporarly force foreground mode
	* libmilter/trans.awk (END): Emit st_none

	* Makefile.am (SUBDIRS): Add libmilter
	* configure.ac: Add testing framework for libmilter
	Raise version number to 2.0.3
	* libmilter/Makefile.am: Conditionally build libmilter.a
	
	* libmilter/: Initial commit
	* context.c: Initial commit
	* log.c: Initial commit
	* milter.c: Initial commit
	* milter.h: Initial commit
	* milter_priv.h: Initial commit
	* proc.c: Initial commit
	* smfi.c: Initial commit
	* trans.awk: Initial commit
	* trans.tab: Initial commit
	* libmilter/.cvsignore: Initial commit
	
	* src/prog.c (instr_ston): Fix runtime error diagnostic message

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

	* src/engine.c (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.
	* src/main.c (set_mailfrom): Check if value is a valid mail
	address (or a list thereof)
	* testsuite/etc/poll-1.rc: New file
	* testsuite/etc/Makefile.am (RCFILES): Add poll-1.rc
	* testsuite/mailfromd/poll.exp: Test multiple from addresses.
	* NEWS: Update
	* doc/Makefile.am (check-exceptions): New goal
	(all-check-docs): Depend on check-exceptions
	* doc/mailfromd.texi: Document multiple from addresses.
	* src/gram.y (pragma_option): Return the rest of the line as the
	option argument for `pragma option mailfromd'
	
	* NEWS, TODO: Update
	* src/bi_poll.m4 (_pollmx): Update invocation of check_mx_records
	* src/engine.c (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.
	* src/mailfrom.h (check_mx_records): Update declaration

2006-10-29  Sergey Poznyakoff  <gray@gnu.org.ua>
	
	* src/bi_dns.m4 (ismx): New built-in function
	
	Implement connect-timeout and connect-retry options proposed by
	Jan:
	
	* src/engine.c (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.
	* src/mailfrom.h (connect_timeout, connect_attempts): New
	variables.
	* src/main.c: Likewise.

	* src/prog.c (struct eval_environ): Fix setheader prototype.
	* TODO, NEWS: Update
	
2006-10-28  Sergey Poznyakoff  <gray@gnu.org.ua>

	* NEWS, configure.ac: Version 2.0.2
	* src/bi_sa.m4 (clamav): New built-in function
	* src/snarf.m4: Minor comment fixes

	* src/snarf.m4 (env_get_stream): New macro. Make sure
	env_get_stream is used only within capturing function
	definitions. 

	* doc/Makefile.am (check-pragmas, check-options)
	(check-builtins): Use new check-docs.sh invocation syntax
	* doc/check-docs.sh: Allow to take any number of "source"
	arguments.
	* doc/mailfromd.texi: Remove ignored deftypefn of numrcpt

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

	* NEWS: Update
	* src/bi_db.m4 (MF_INIT): Install greylist_seconds_left variable
	* src/engine.c (ctx_setheader,priv_store_header_command): Change
	type of the second argument to struct old_header_node.
	* src/gram.y: 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
	* src/mailfrom.h (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
	* src/main.c: New option --dump-macros
	* src/prog.c (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
	
	* configure.ac: Check for SIGRETTYPE
	* src/Makefile.am (M4_FILES): Add bi_sa.m4
	* src/bi_db.m4, src/bi_dns.m4, src/bi_string.m4: Remove unneded
	quoting
	* src/engine.c (mlfi_envfrom,mlfi_header,mlfi_eoh)
	(mlfi_body, mlfi_eom): Capture support
	(mlfi_eom): Bugfix: mlfi_eval called with wrong state tag
	* src/gram.y: Check if builtin invocations are allowed in the
	current state.
	(status_tab): Add mf_url
	* src/lex.l (parse_include): Remove unused variable
	* src/mailfrom.h (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
	* src/prog.c: 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.
	* src/prog.h (sa_init_builtin): New function
	* src/snarf.m4: Change quoting symbols to [<,>]
	(MF_STATE, MF_CAPTURE): New defines
	(MF_DEFUN): use va_builtin_install_ex
	* src/symtab.c (va_builtin_install_ex): New function
	* src/bi_sa.m4: New file. Spam-Assassin interface.

	* src/Makefile.am (mailfromd_SOURCES): Add engine.c
	* src/bi_string.m4 (substring): Fix swapping of start and end
	offsets.
	* src/mailfrom.h: Add external declarations, necessary for
	engine.c
	* src/main.c: Move all milter-related stuff to engine.c
	* src/engine.c: New file
	* src/prog.h (other_init_builtin): New extern
	* src/rate.c (rate_print_item): Remove unused variables

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

	* src/prog.c: Minor indentation changes
	* src/snarf.m4: Add comments

2006-10-22  Sergey Poznyakoff  <gray@gnu.org.ua>

	* src/lex.l: 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>

	* src/lex.l: Allow variable and macro interpretation and backreference
	substitution in "" strings.
	
	* src/gram.y: Implement regexp back-references
	* src/lex.l: Likewise
	* src/mailfrom.h: Likewise
	* src/prog.c: Likewise

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

	Implement new framework for builtin functions, which allows for
	easy addition of new functions and provides basic sanity checks.
	
	* TODO: Update
	* NEWS: Update
	* src/.cvsignore: Update
	* src/bi_db.m4: New file
	* src/bi_dns.m4: New file
	* src/bi_other.m4: New file
	* src/bi_poll.m4: New file
	* src/bi_string.m4: New file
	* src/snarf.m4: New file
	* src/prog.h: New file
	* src/Makefile.am: Add rules for generating builtin implementation
	files from m4 sources
	* src/gram.y (status_tab): New status mf_range
	* src/mailfrom.h: New status mf_range
	* src/main.c (check_on_host): Return mf_temp_failure if
	stream_open fails.
	* src/prog.c: 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. 

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

	* src/prog.c (set_last_poll_result): Allow NULL arguments

	* configure.ac: Check for mu_get_auth (MU >= 1.0.1)
	* src/prog.c (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.

2006-10-13  Sergey Poznyakoff  <gray@gnu.org.ua>

	* TODO: Update
	* doc/mailfromd.texi: Apply some fixes, proposed by Jan

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

	* src/main.c (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>

	* src/lex.l: Allow interpretation of variables and macros within
	here-documents.
	Special form to remove all leading whitespace from the here-
	document lines.
	* src/ml.c (ml_split): Fix counting of lines in the reply.  The
	last line was not taken into account unless it ended with a
	newline.
	* NEWS: Update.
	* doc/mailfromd.texi: Document here-documents.

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

	* doc/mailfromd.texi: Provide example of cached_data usage.

	* configure.ac: Fix Berkeley DB autodetection
	* src/Makefile.am (INCLUDES): Add MU_COMMON_INCLUDES
	* src/mu_dbm.c [WITH_BDB] (mu_dbm_open): Use DB_VERSION_MAJOR to
	select the version-dependent code.
	
2006-10-06  Sergey Poznyakoff  <gray@gnu.org.ua>

	* NEWS: Update
	* TODO: Update
	* doc/mailfromd.texi: Document cache_used variable
	* src/mailfrom.h (set_cache_used): New function
	* src/main.c (method_strict, method_standard): Set cache_used to 1
	or 0 depending on whether the cached data were used or not.
	* src/prog.c (set_cache_used): New function
	
	* configure.ac: Add explicit support for Berkeley DB 4.  Raise
	version number to 2.0.1
	* src/mailfrom.h (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
	* src/main.c (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.
	* src/mu_dbm.c [WITH_BDB] (mu_dbm_open): Support Berkeley DB 4
	* src/prog.c (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
	* src/rate.c (rate_expire_item): Compute the interval relative
	to the current time.

	* doc/mailfromd.texi: Document new variables
	* NEWS: Update
	
2006-09-15  Sergey Poznyakoff  <gray@gnu.org.ua>

	-= Release 2.0 =-

	* configure.ac: Raise version number to 2.0
	* NEWS: Likewise
	* doc/mailfromd.texi: Finished
	* src/main.c (filter_cleanup): Free md->helostr
	(mlfi_helo): Allocate md->helostr.

	* src/main.c (main): Enclose PACKAGE_BUGREPORT in angle brackets

2006-09-14  Sergey Poznyakoff  <gray@gnu.org.ua>

	* doc/mailfromd.texi: Update
	* src/gram.y: Warn about unquoted strings
	* src/main.c: Do not enclose dbm-related variables in #ifdef
	USE_DBM.

	* configure.ac: Define program_name
	* doc/mailfromd.texi: Update
	* src/gram.y: Fix coredump if "rate" is not defined
	* src/prog.c: Include sys/types.h

	* doc/mailfromd.texi: Update
	* etc/mailfromd.rc: Update
	* src/lex.l: Fix counting of the input lines
	* src/main.c: New option -l (--lint)
	* NEWS: Update

2006-09-13  Sergey Poznyakoff  <gray@gnu.org.ua>

	* doc/mailfromd.texi: Update
	* doc/strftime.texi: New file
	* doc/mastermenu.el: New file
	* doc/Makefile.am (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
	* README-alpha: Update (fprintftime gnulib module is required).
	* src/Makefile.am (INCLUDES): Add lib (for fprintftime.h)
	* src/cache.c (cache_print_item): Use format_time_str
	* src/db.c (format_time_str): New function
	* src/gram.y (convert_rate): allow a separator ("per" or a
	punctuation) between the message count and the interval spec.
	* src/mailfrom.h (format_time_str): New function
	(time_format_string): New global
	* src/main.c (time_format_string): New global
	New option --time-format
	(db_format_enumerator): Protect by #ifdef USE_DBM. Print negative
	expiration for cache.
	* src/prog.c (greylist_print_item): Use format_time_str.
	* src/rate.c (rate_print_item): Use format_time_str.

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

	* doc/mailfromd.texi: Update
	* src/prog.c (env_catch): Reset the exception handler.

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

	* TODO: Update
	* configure.ac: Set doc hints depending on the version (alpha
	vs. stable).
	* doc/Makefile.am (check-pragmas): Modify
	(check-docs): Add check-builtins to the lst of prerequisites.
	(check-builtins): New rule
	(RENDITION): Remove variable assignment
	* doc/macros.texi (xprindex): Not used now
	* doc/mailfromd.texi: Update
	* src/gram.y: Set the precedence of  MATCHES and FNMATCHES to
	that of EQ
	(print_bin_op): Add missing opcodes
	(print_node): Fix printing of NEG argument
	* src/main.c (options): Fix wrongly placed N_()s.

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

	* README-alpha: Add texinfo to the prerequisites
	* doc/macros.texi: New file
	* doc/Makefile.am (mailfromd_TEXINFOS): Add macros.texi
	(check-pragmas,check-options): New rules
	(EXTRA_DIST): Add check-docs.sh
	* doc/mailfromd.texi: Update
	* src/main.c: Use ifdef USE_DBM where appropriate
	* src/prog.c (valid_user_p): Do not suppose argument is an email
	address. 

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

	* NEWS: Update
	* doc/mailfromd.texi: Almost finished Tutorial chapter
	* src/prog.c (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.

2006-09-05  Sergey Poznyakoff  <gray@gnu.org.ua>

	* NEWS: Update
	* doc/mailfromd.texi: Update
	* src/prog.c (bi_toupper, bi_tolower): New built-ins.
	(bi_stdpoll, bi_strictpoll, bi__pollhost, bi__pollmx): Signal
	runtime error on unhandled exceptions.

	* Makefile.am: Update
	* NEWS: Update
	* src/db.c (db_compact): Print debugging info at the beginning
	* src/lex.l (parse_error): Do not output locus is locus.file is
	not set.
	* src/main.c: New option --all
	(stderr_error_printer): Use program_invocation_short_name
	(main): Set stderr_error_printer early, before parsing command
	line. 

	* README-alpha: New file
	* Makefile.am (SUBDIRS): Add lib
	* NEWS: Update
	* configure.ac: Switch to using gnulib
	* src/Makefile.am: Likewise
	* src/main.c: New options --lock-retry-count and
	--lock-retry-timeout
	* src/obstack.c, src/obstack.h, src/snprintf.c, src/snprintf.h,
	src/strtok_r.c: Remove files.

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

	* NEWS: Update
	* doc/mailfromd.texi: Update
	* src/lex.l: Implement #include directive
	(pop_source): Do not free locus.file. It has already been
	referenced by now.

	* src/main.c (log_status): Avoid logging SMFIS_CONTINUE actions.

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

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

	* THANKS: Updated Jan's record
	* src/cache.c: Print status code and time stamps in human-readable
	form.
	* src/gram.y (ECHO): Rename to KW_ECHO to avoid clashes with the lex
	macro name. 
	* src/lex.l: Likewise
	* src/mailfrom.h (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
	* src/main.c (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
	* src/mu_dbm.c: Include mailutils/error.h
	* src/mu_dbm.h (mu_dbm_unlock): Return void
	* src/prog.c: Minor changes
	* testsuite/etc/poll.rc: New file
	
	* NEWS: Update
	* etc/mailfromd.rc: Use RFC-compliant reply codes.
	* testsuite/etc/arg.pat: Likewise.
	* testsuite/etc/arg.rc: Likewise.
	* testsuite/etc/cidr.rc: Likewise.
	* testsuite/etc/cond.rc: Likewise.
	* testsuite/etc/numrcpt.pat: Likewise.
	* testsuite/etc/numrcpt.rc: Likewise.
	* testsuite/etc/reject.pat: Likewise.
	* testsuite/etc/reject.rc: Likewise.
	* testsuite/etc/relayed.rc: Likewise.
	* testsuite/etc/tempfail.pat: Likewise.
	* testsuite/etc/tempfail.rc: Likewise.
	* testsuite/mailfromd/cidr.exp: Likewise.
	* testsuite/mailfromd/cond.exp: Likewise.
	* testsuite/mailfromd/relayed.exp: Likewise.

	* src/gram.y (on_cond): Use the values of %ehlo_domain and
	%mailfrom_address variables as default values for ehlo domain and
	sender address.
	* src/mailfrom.h (smtp_domain): New extern
	(get_smtp_domain): Remove function
	* src/main.c (get_smtp_domain): Remove function
	(main): Call builtin_post_setup after configuration
	* src/prog.c (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

	* testsuite/etc/catch01.rc: New file
	* testsuite/etc/hasmx.rc: New file
	* testsuite/etc/Makefile.am: Add catch01.rc and hasmx.rc

	* testsuite/etc/catch.rc: Rewrite
	* testsuite/mailfromd/catch.exp: Rewrite

	* testsuite/mailfromd/hasmx.exp: New file
	* testsuite/mailfromd/poll.exp: New file
	* testsuite/mailfromd/DISTFILES: Add hasmx.exp and poll.exp
	
	* src/codegen.awk: Remove
	* src/onwrap_std.cin: Remove
	* src/onwrap_std.rc: Remove
	* src/onwrap_strict.cin: Remove
	* src/onwrap_strict.rc: Remove
	* Makefile.am, src/Makefile.am: Remove bootstrap. Not needed any
	more.
	* src/gram.y: Allow to specify catches for all exceptions
	(catch *).
	Allow to use any function as a selector to `on' statement.
	Get rid of poll_node.
	* src/mailfrom.h (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
	* src/prog.c (instr_catch, dump_catch): Update for the new catch
	calling convention.
	Remove includes of onwrap_std.c and onwrap_strict.c.
	* src/.cvsignore: Update

	* Makefile.am, src/Makefile.am (bootstrap): New goal

	* src/Makefile.am: Add rules for generation of onwrap_std.c and
	onwrap_strict.c
	* src/codegen.awk: New file
	* src/onwrap_std.cin: New file
	* src/onwrap_std.rc: New file
	* src/onwrap_strict.cin: New file
	* src/onwrap_strict.rc: New file

	* src/gram.y: 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.
	* src/lex.l: The sequences poll, host, for, as and from are valid
	keywords only if used in ONBLOCK state.
	(onblock): New function
	* src/mailfrom.h (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
	* src/main.c: New option --trace-prog
	* src/prog.c (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
	* src/.cvsignore: Update
	
	* testsuite/etc/catch.rc: Update catch syntax
	
2006-08-30  Sergey Poznyakoff  <gray@gnu.org.ua>

	* NEWS: Update
	* etc/mailfromd.rc: Rewrite using 2.x syntax
	* src/gram.y: Simplify case syntax: do not require do .. done
	around statement lists
	* src/prog.c (instr_ntos): Remove unused variable
	* testsuite/etc/switch.rc: Rewrite using new syntax

	* NEWS: Update
	* src/gram.y: Use NUMERIC_BUFSIZE_BOUND to declare buffers for
	numeric conversion
	* src/prog.c: Likewise
	* src/lex.l: New notation &word (for future use)
	* src/mailfrom.h (NUMERIC_BUFSIZE_BOUND): New macro
	* src/main.c: Set log_to_stderr=1 for some working modes
	(e.g. --test, --compact, --expire)
	(mailfromd_show_defaults): Remove NDBM/DBM leftovers
	* testsuite/etc/switch.rc: Minor fix
	
	* NEWS: Document switch statement, database pragma and the new
	greylist syntax
	* TODO: Update
	* src/cache.c: Use cache_format
	* src/rate.c: Use rate_format
	* src/gram.y: Implement switch statement
	* src/lex.l: Likewise
	* src/mailfrom.h (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 *
	* src/main.c (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.
	* src/prog.c (instr_xlat,instr_xlats,instr_jreg): New instructions
	(code_peek,code_reserve): New functions
	* src/symtab.c (db_format_install): Return struct db_format *
	* testsuite/etc/Makefile.am (RCFILES): Add switch.rc
	* testsuite/etc/greylist.in: Rewrite to use new greylist syntax
	* testsuite/mailfromd/DISTFILES: Add switch.exp
	* testsuite/etc/switch.rc: New testcase
	* testsuite/mailfromd/switch.exp: New testcase

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

	* src/main.c (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.

	* NEWS: Update
	* src/dns.c (getmx): Do not recurse to parent domains
	* src/gram.y: 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
	* src/lex.l: Allow to use multi-letter sendmail variables without
	surrounding cury braces.
	* src/mailfrom.h (node_type_rate): Remove type
	(instr_rate): Remove function
	* src/main.c: Options ending in "timeout" and "expire-interval"
	take time interval specification as their argument.
	* src/prog.c (instr_rate): Remove
	(bi_interval,bi_rate): New functions
	* src/rate.c (rate_print_item): Improved output
	
2006-08-22  Sergey Poznyakoff  <gray@gnu.org.ua>

	* src/main.c: Switch to user privileges before compacting the
	database

	* NEWS: Update
	* src/gram.y: 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.
	* src/lex.l (parse_error_locus): Locus pointer is const
	* src/mailfrom.h (parse_error_locus,function_install): Locus
	pointer is const
	(declare_numeric_variable,declare_string_variable): New function
	* src/prog.c (declare_numeric_variable)
	(declare_string_variable): New function
	(env_decl_vars): New function
	(create_environment): Call env_decl_vars
	* src/symtab.c (variable_install): Do not overwrite existing
	variables.
	(function_install): Locus pointer is const
	* testsuite/etc/Makefile.am: Add var.rc
	* testsuite/etc/var.rc: New file
	* testsuite/etc/accept.rc: Rewrite using the new syntax
	* testsuite/etc/ml.rc: Likewise
	* testsuite/etc/reject.rc: Likewise
	* testsuite/etc/tempfail.rc: Likewise
	* testsuite/etc/ack.rc: Update the comment
	* testsuite/mailfromd/DISTFILES: Add var.exp
	* testsuite/mailfromd/var.exp: New testcase

	* src/gram.y (FUNC declaration): Assign the entry point early to
	properly handle recursive functions
	(variable): Throw error if the variable is not defined
	* src/prog.c (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 if getmx returned success.
	Call env_catch otherwise
	* testsuite/etc/Makefile.am: New files ack.rc and catch.rc
	* testsuite/etc/ack.rc: New file
	* testsuite/etc/catch.rc: New file
	* testsuite/mailfromd/DISTFILES: New files ack.exp and catch.exp
	* testsuite/mailfromd/ack.exp: New file
	* testsuite/mailfromd/catch.exp: New file

	* src/gram.y: Implement user-defined functions
	* src/lex.l: Likewise
	* src/mailfrom.h: Likewise
	* src/prog.c: Likewise
	* src/symtab.c: Likewise
	* TODO: Update
	
2006-08-21  Sergey Poznyakoff  <gray@gnu.org.ua>

	* src/gram.y (echo): New statement.
	Begin implementing user-defined functions
	* src/lex.l: Likewise
	* src/mailfrom.h (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
	* src/main.c (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
	* src/prog.c (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.
	* src/symtab.c (SYM_.*): Move defines to mailfrom.h
	(symbol_enumerate): new function
	(function_install): New function

	* src/gram.y: Implement catch statement
	* src/lex.l: Likewise
	* src/mailfrom.h (mf_status_count): New value
	(struct catch_node): New data type
	(node_type_catch): New node type
	(instr_catch): New function
	* src/prog.c (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

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

	* src/gram.y: 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
	* src/lex.l (MXMATCHES,MXFNMATCHES): New tokens
	* src/mailfrom.h (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
	(instr_fnmatch_mx,instr_regex_mx): New functions
	* src/prog.c (instr_fnmatch_mx,instr_regex_mx): New functions
	(instr_regex,instr_regcomp): Rewritten

	* NEWS: Update
	* src/gram.y: Add arithmetical operations. Fix the implicit type
	conversion rules.
	(test_program): Removed
	(mailfromd_test): New function
	* src/mailfrom.h (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
	* src/main.c: 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).
	* src/prog.c (instr_add,instr_sub,instr_mul,instr_div)
	(instr_neg,env_set_variable): New functions.
	* testsuite/mailfromd/cidr.exp: Update for new --test semantics
	* testsuite/mailfromd/cond.exp: Likewise
	* testsuite/mailfromd/relayed.exp: Likewise

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

	* NEWS: Update
	* configure.ac: Update to 1.9.92
	* src/dns.c (freemx): New function
	* src/gram.y: Use verbose error diagnostics.
	(NUMBER): New token
	* src/lex.l: 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
	* src/mailfrom.h: Rearrange and add comments
	* src/main.c (check_mx_records): Use freemx
	* src/mu_dbm.c: Update copyright year
	* src/prog.c (bi_hasmx): use freemx
	* src/rate.c: Update copyright year

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

	* src/gram.y: Bugfixes
	* testsuite/etc/Makefile.am: Add arg.rc, arg.pat
	* testsuite/etc/arg.rc: New file
	* testsuite/etc/arg.pat: New file
	* testsuite/mailfromd/DISTFILES: Add arg.exp
	* testsuite/mailfromd/arg.exp: New file

	* src/cache.c (format_status): Remove function. Use mf_status_str
	instead.
	* src/gram.y: 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
	* src/lex.l: $N notation (positional parameter)
	Fix IDENTIFIER rule to accept single-character identifiers
	* src/mailfrom.h (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
	* src/main.c (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
	* src/prog.c (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
	* src/symtab.c: Indentation fix
	
	* TODO: Update

	* src/cache.c, src/rate.c: Include trailing nul to the
	key size. 
	* src/db.c (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.
	* src/dns.c: Debug level 100 is reserved for instruction traces
	* src/mailfrom.h (DEFAULT_RATE_DATABASE): Include suffix
	(ignore_failed_reads_option): New variable
	* src/main.c (ignore_failed_reads_option): New variable
	Do not use debug level 100, it is reserved for instruction
	traces. 
	(--ignore-failed-reads): New option
	
	* configure.ac: Remove NDBM and DBM support.
	* src/cache.c: Lock the database before writing to it.
	* src/prog.c: Likewise
	* src/rate.c: Likewise
	* src/db.c (db_compact): Implement locking. Improve error
	checking.
	* src/mailfrom.h (DEFAULT_DATABASE): File name with suffix.
	* src/main.c (db_format_setup): Initialize locking parameters.
	* src/mu_dbm.c: Remove NDBM and DBM support. Implement locking
	functions.
	* src/mu_dbm.h: Likewise

	Handle multiple DB formats by keeping a symbol table, describing
	main primitives for each of them. When a database management
	action is required (by using --list, --delete, --expire or
	--compact), the DB format can be given via --format option. The
	database file name can be given using --file option.
	
	* src/cache.c: Rewritten using new DB format handling primitives.
	* src/prog.c: Likewise
	* src/rate.c: Likewise
	* src/db.c (all functions): Change data types to int. Improve
	error checking
	(db_compact): New function (Note: no locking so far!)
	* src/symtab.c (SYM_DB_FORMAT): New symbol state
	(struct symtab.v): New member db
	(db_format_install,db_format_lookup): New functions
	* src/mailfrom.h (struct db_format): New data type
	(db_format_install,db_format_lookup): New functions
	* src/main.c (options --expire,--list,--delete): Do not take
	argument. --format and/or --file should be used instead
	(--format, --file): New options
	* src/mu_dbm.c (mu_dbm_file_name): New function
	(mu_dbm_stat): Rewrite using mu_dbm_file_name.
	* src/mu_dbm.h (mu_dbm_file_name): New function
	Remove obsolete __P() declaration wrappers.

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

	* src/Makefile.am (mailfromd_SOURCES): Add ml.c
	* src/ml.c: New file.
	* src/db.c: Rewrite db_expire to avoid skipping some keys using
	broken backends (namely, GDBM)
	* src/gram.y: Bugfixes
	* src/lex.l: Implement multy-line strings.
	* src/mailfrom.h (sendmail_mlreply): New function.
	* src/main.c (ctx_setreply): Implement multy-line responses.
	* src/prog.c (bi_greylist): Define greylist_seconds_left in both
	branches of the conditional.
	* testsuite/etc/Makefile.am: Add ml.rc, ml.pat
	* testsuite/etc/ml.rc: New file.
	* testsuite/etc/ml.pat: New file.
	* testsuite/mailfromd/DISTFILES: Add ml.exp
	* testsuite/mailfromd/ml.exp: New testcase

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

	* src/gram.y: Add comparison operators (<,<=,>,>=)
	* src/lex.l: Likewise.
	* src/mailfrom.h: Likewise.
	(define_numeric_var): New function
	* src/prog.c: 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
	* src/main.c (mlfi_envrcpt): Define %rcpt_count

	* testsuite/etc/Makefile.am (RCFILES,PATFILES): Add numrcpt test
	* testsuite/etc/numrcpt.pat: New file.
	* testsuite/etc/numrcpt.rc: New file.
	* testsuite/mailfromd/numrcpt.exp: New file

	* NEWS: Update
	* doc/mailfromd.texi: Start rewriting
	* src/gram.y: Implement concatenation of expressions and internal
	variables.
	* src/lex.l: Implement internal variables (%name notation)
	* src/mailfrom.h (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.
	* src/prog.c (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.
	* src/symtab.c (SYM_VARIABLE): New entry state.
	(struct symtab.name): Move to the union. All references updated.
	(variable_install,variable_lookup): New functions.

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

	* src/gram.y (MARK_LOCUS): Optimize insertion of instr_locus codes.
	* TODO: New file.
	
2006-08-13  Sergey Poznyakoff  <gray@gnu.org.ua>

	* src/prog.c (instr_header): Allocate header_node.

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

	* src/main.c: Call umask in child process. Set default umask to
	0117.
	* testsuite/.cvsignore: Update
	* testsuite/etc/.cvsignore: Update
	* testsuite/etc/cond.rc: Update

	* configure.ac: Remove stray AC_DEFINE
	* src/lex.l (line_finish): Extra debug
	* src/main.c (mailfromd_show_defaults): Print version instead of
	the method.
	* src/prog.c (eval_environment): Initialize status to
	SMFIS_CONTINUE.
	* testsuite/Makefile.am (SUBDIRS): Remove .
	* testsuite/etc/Makefile.am (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
	* testsuite/etc/cidr.rc: New file 
	* testsuite/etc/cond.rc: New file
	* testsuite/etc/greylist.in: New file
	* testsuite/etc/greylist.pat: New file
	* testsuite/etc/relayed.list: New file
	* testsuite/etc/relayed.rc: New file
	
	* testsuite/lib/mailfromd.exp (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
	* testsuite/mailfromd/DISTFILES: Add new files
	* testsuite/mailfromd/cidr.exp: New file
	* testsuite/mailfromd/cond.exp: New file
	* testsuite/mailfromd/greylist.exp: New file
	* testsuite/mailfromd/relayed.exp: New file
	
	* Makefile.am (SUBDIRS): Add testsuite
	* configure.ac (AC_CONFIG_FILES): Add testsuite/* Makefiles
	* .cvsignore: Update
	* src/main.c (option_pidfile): Assign *pval
	(mailfromd_daemon): Bail out if daemon fails
	* testsuite: New directory
	* testsuite/Makefile.am: Initial import
	* testsuite/.cvsignore: Likewise
	* testsuite/mail.null: Likewise
	* testsuite/etc: New directory
	* testsuite/etc/Makefile.am: Initial import
	* testsuite/etc/.cvsignore: Likewise
	* testsuite/etc/accept.pat: Likewise
	* testsuite/etc/accept.rc: Likewise
	* testsuite/etc/reject.pat: Likewise
	* testsuite/etc/reject.rc: Likewise
	* testsuite/etc/sendmail.cin: Likewise
	* testsuite/etc/sendmail.m4: Likewise
	* testsuite/etc/tempfail.pat: Likewise
	* testsuite/etc/tempfail.rc: Likewise
	* testsuite/lib: New directory
	* testsuite/lib/DISTFILES: Initial import
	* testsuite/lib/mailfromd.exp: Likewise
	* testsuite/mailfromd: New directory
	* testsuite/mailfromd/DISTFILES: Initial import
	* testsuite/mailfromd/actions.exp: Likewise

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

	* src/gram.y: Warn if accept is used with arguments.
	Check codes and xcodes for reject and tmpfail actions.
	* src/main.c: New option --log-tag (-L) sets syslog tag.
	* src/prog.c: New test greylist.

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

	* THANKS: Add Jan Rafaj
	* NEWS, configure.ac: Raise version number to 1.9.91
	* doc/mailfromd.texi: Update
	* src/db.c (db_expire): Rewritten the loop after the proposal of
	Jan Rafaj.
	* src/dns.c (_getmx,cnameloop): Use res_n* functions to assure
	thread safety.

	* src/gram.y: 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.
	* src/lex.l (iter): Remove keyword
	(prog): New keyword
	* src/mailfrom.h (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.
	* src/main.c (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.
	(main): Rewritten handling of --dump-code
	* src/prog.c (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

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

	* doc/mailfromd.texi: Update
	* src/gram.y (code_node): Optimize code generation for `ON POLL'
	statements, avoiding multiple generation of action code for `or'
	branches.
	* src/main.c: Exit immediately if any of the --dump options was
	given. 

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

	* src/main.c (mlfi_helo): Do not clear md->helostr after
	processing. We don't rely on sendmail setting $s any more.
	* src/prog.c (instr_symbol): Improve debugging messages
	(bi_match_cidr): New builtin.

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

	* configure.ac (AC_ARG_WITH([berkeley-db])): Fix the help string
	* README, doc/mailfromd.texi, doc/rendition.texi: Update

	* src/gram.y (%union): const struct builtin
	(iter): Call milter_enable_state
	* src/mailfrom.h (struct builtin_node) const struct builtin
	(code_instr,code_immediate): Take const argument
	(milter_enable_state): New function
	* src/main.c (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).
	* src/prog.c (code_instr,code_immediate): Take const argument
	(bi_resolve): Fix inet_ntoa usage
	(dbmap_lookup_p): Change first argument

2006-07-31  Sergey Poznyakoff  <gray@gnu.org.ua>

	* src/gram.y: Use get_smtp_domain() instead of smtp_domain
	* src/mailfrom.h (smtp_domain): Removed declaration;
	(get_smtp_domain): New function
	* src/main.c (get_smtp_domain): New function
	(main): Remove initialization of smtp_domain.
	* src/prog.c (dbmap_lookup_p): Protect the text by ifdef USE_DBM
	(builtin_setup): Do not install bi_dbmap if DBM is not used.

	* NEWS: Update
	* src/mailfrom.h (string_to_state,state_to_string): New functions
	(instr_iter,instr_pushenv,instr_suspend): New functions
	(struct iter_node): New data type
	* src/gram.y: Support ITER construct
	(string_to_state,state_to_string): New functions
	* src/lex.l: Support ITER construct
	* src/prog.c: 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
	* src/main.c (mlfi_envrcpt): Remove implicit looping in envrcpt state.
	(struct message_data): Remove envstate. All references updated

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

	* src/gram.y: Use direct boolean arithmetics: 1 means true, 0 means
	false.
	* src/prog.c: Likewise
	(bi_resolve,bi_hasmx): New builtins

	* etc/sendmail-8.13.7.diff: Added to the repository
	
	* configure.ac: Update version number to 1.9.90
	* NEWS: Update for 1.9.90
	* src/main.c (struct option_cache): New option cumulative (sync
	with 1.x)
	Mark relay as cumulative
	(set_option): Ignore override for cumulative options
	* src/prog.c (instr_rate): Bugfix
	
	* configure.ac: Change DB options to those used by MU configure.
	* src/main.c: 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
	* src/mu_dbm.c (mu_dbm_open): Fix for DB 3.x
	* src/mu_dbm.h: Likewise
	* src/prog.c (environ_state_free): State can be NULL
	(bi_dbmap): Fix order of arguments

	* configure.ac (MAILUTILS_LIBS): Link with MU Auth
	* src/gram.y: Allow numeric constants in the program
	* src/mailfrom.h (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
	* src/main.c (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
	* src/prog.c (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

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

	* src/symtab.c: New file
	* src/Makefile.am (mailfromd_SOURCES): Add symtab.c
	* src/gram.y: Introduce builtin functions. Remove rules for
	HOSTNAME and RELAYED: they are builtins now.
	* src/lex.l: Likewise
	* src/prog.c: Likewise
	* src/mailfrom.h: Add missing prototypes. Make debug macros safe
	to use within if blocks
	(struct builtin, struct function): New data types
	* src/main.c (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
	* src/rate.c (get_rate): Remove unused variable
	
2006-07-26  Sergey Poznyakoff  <gray@gnu.org.ua>

	* configure.ac: Implement --with-forks option from 1.x branch.
	* src/Makefile.am (LDADD): Use MILTER variable instead of
	hardcoding -lmilter
	* src/main.c (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
	* src/prog.c (get_immediate): Compensate for changes in
	eval_environment
	(eval_environment): Fix reenterability: increase env->pc only when
	the instruction returns successfully.

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

	* src/Makefile.am: Remove MU_COMPAT. We need the latest mailutils
	(pre 1.0)
	* src/gram.y: Adopt new MU namespace
	(code_node): Fix generation of 'and' and 'or' code
	* src/lex.l: Adopt new MU namespace
	* src/mailfrom.h (instr_and,instr_or): Remove
	Adopt new MU namespace
	* src/main.c: Adopt new MU namespace
	New option --source
	* src/prog.c: Adopt new MU namespace
	(instr_and,instr_or): Remove
	* doc/mailfromd.texi: Update
	
2006-01-17  Sergey Poznyakoff  <gray@gnu.org.ua> (Sync with v_1_0)

        * src/main.c (check_portspec): Fix eventual coredump and add more
	checks.

2006-01-10  Sergey Poznyakoff  <gray@gnu.org.ua>

	* src/gram.y (code_node): Use BNZ for branching.
	[poll]: bugfix
	* src/main.c (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).
	* src/prog.c (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.

2006-01-10  Sergey Poznyakoff  <gray@gnu.org.ua>

	Started major rewrite. The final aim is to make the internal
	program reentrant and to make it stop when it is trying to
	reference a non-existend sendmail variable. Then, the milter
	handler should return SMFIS_CONTINUE to pass control over to the
	next handler. That, in turn, should restart program execution in
	the hope that Sendmail has provided the variable on this stage. If
	it does not the process continues.
	
	* src/Makefile.am (mailfromd_SOURCES): Add prog.c
	* src/prog.c: New file
	* src/gram.y (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
	* src/lex.l: Return EQ and NE as keywords.
	(parse_error_locus): New function.
	* src/mailfrom.h (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
	* src/main.c (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

2006-01-06  Sergey Poznyakoff  <gray@gnu.org.ua>

	-= Release 1.3 =-
	
2006-01-06  Sergey Poznyakoff  <gray@gnu.org.ua>

	* src/lex.l: Remove leftover argc_unquote_char

2006-01-05  Sergey Poznyakoff  <gray@gnu.org.ua>

	* configure.ac: Raise version number to 1.3
	* NEWS: Updated
	* README: Mention BROKEN_PTHREAD_SLEEP Sendmail variable
	* doc/mailfromd.texi: Likewise
	* src/main.c (check_portspec): New function.

2005-11-24  Sergey Poznyakoff  <gray@gnu.org.ua>

	* src/Makefile.am (AM_CPPFLAGS): Define MU_COMPAT, needed for
	latest mailutils.

2005-09-20  Sergey Poznyakoff  <gray@gnu.org.ua>

	* src/dns.c (resolve_ipstr): New implementation, taking into
	account cnames.
	* src/main.c (resolve_ipstr): Removed in favor of the new
	implementation. 

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

	* THANKS: New file
	* Makefile.am (AUTOMAKE_OPTIONS): New variable
	* configure.ac: Raised version number to 1.2
	* NEWS: Likewise.

	* doc/gendocs_template: Updated
	* doc/mailfromd.texi: Updated

	* src/cache.c (cache_delete): Rewritten using db_delete
	* src/db.c (db_delete): New function
	* src/mailfrom.h: Likewise
	* src/main.c: Option --delete takes an optional argument, as
	--list and --expire
	* src/rate.c (rate_delete): New function

	* src/lex.l (line_add_unescape): Use argcv_unquote_char
	* src/cache.c: Use separate expiration times for negative and
	positive entries.
	* src/mailfrom.h: Likewise.
	* src/main.c: Likewise.
	* src/dns.c (getmx): Return immediately in mf_temp_failure.

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

	* src/main.c: 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>

	* src/gram.y (stmtlist): Bugfix
	(NEXT): New token
	* src/lex.l (NEXT): New token
	* src/mailfrom.h (node_type_continue): Renamed to node_type_next
	
	* src/gram.y (ACT_CONTINUE): Continue execution of the program
	* src/mailfrom.h (node_type_continue): New node type

	* configure.ac (DEFAULT_EXPIRE_RATES_INTERVAL): New variable
	* src/db.c: New file
	* src/Makefile.am (mailfromd_SOURCES): Add db.c
	(AM_CPPFLAGS): Define DEFAULT_EXPIRE_RATES_INTERVAL
	* src/mailfrom.h (db_item_printer_t,db_expire_t): New types
	(rate_expire_db,db_list_item,db_list,db_expire): New functions
	* src/cache.c (cache_list_item,cache_list_db,cache_expire_db):
	Rewritten using functions from db.c
	* src/main.c (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.
	* src/rate.c (get_rate): Optimized expiration logic.
	(rate_list_item,rate_list_db): Rewritten using functions from db.c
	(rate_expire_db): New function
	
2005-08-07  Sergey Poznyakoff  <gray@gnu.org.ua>

	* configure.ac: Complain if a DB support is required but not
	found.
	* src/rate.c: New file
	* src/Makefile.am: Add rate.c
	* src/gram.y: Add support for rate statement
	* src/lex.l: Likewise.
	* src/main.c: Likewise.
	* src/mailfrom.h: Rename getmx_status to mf_status
	* src/cache.c: Likewise.
	* src/dns.c: Likewise.
	
	* doc/mailfromd.texi: Documented rate statement
	* etc/mailfromd.rc: Likewise

2005-07-31  Sergey Poznyakoff  <gray@gnu.org.ua>

	* src/main.c (check_on_host): Destroy IO data only if these have
	been initialized.
	* src/dns.c (_getmx): Fix eventual buffer overflow.

2005-07-28  Sergey Poznyakoff  <gray@gnu.org.ua>

	* src/gram.y: Do not include gram.h
	(eval_hostname): Return with unmodified val if resolve_ipstr
	fails.

	* configure.ac: Raised version number to 1.1
	Check for argcv_unescape_char vs. argcv_unquote_char (CVS
	mailutils declares the latter).
	* src/Makefile.am: Bugfix: place LIBOBJS into LDADD
	* src/dns.c: Include resolv.h after netinet/in.h

2005-06-30  Sergey Poznyakoff  <gray@Noldor.runasimi.org>

	* doc/mailfromd.texi: Fixed usage of @email{} and @url{}.

2005-06-17  Sergey Poznyakoff  <mail@sun.farlep.net>

	* src/cache.c (cache_expire_db): Check for res==NULL.
	* src/main.c (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. 

2005-06-16  Sergey Poznyakoff  <gray@Mirddin.farlep.net>

	* src/main.c (smtp_send2,smtp_send3): Send fully formed command,
	along with final CRLF, in one go.
	(method_standard): Check MXs first, and only if they fail, check the
	client host.
	* src/gram.y (eval_poll): Fix wording of trace message
	
2005-06-12  Sergey Poznyakoff  <gray@Mirddin.farlep.net>

	* configure.ac: Raised version number to 1.0.
	* Makefile.am (distuninstallcheck_listfiles): New variable. The
	install-data-local rule in etc/Makefile.am breaks distuninstall
	checks, hence the need to fix it.
	* doc/mailfromd.texi: Finished

2005-06-12  Sergey Poznyakoff  <gray@Mirddin.farlep.net>

	* configure.ac: Warn if DBM support is not configured
	* doc/mailfromd.texi: Updated to match recent changes.
	* etc/Makefile.am: Install mailfromd.rc
	* src/gram.y: Allow two additional arguments to poll: as and from.
	* src/lex.l: Handle new keywords: not, as, from.
	* src/mailfrom.h (smtp_domain,postmaster_email): External
	declarations.
	* src/main.c (check_on_host,check_mx_records)
	(method_strict,method_standard): Accept two additional arguments.

2005-06-10  Sergey Poznyakoff  <gray@Mirddin.farlep.net>

	* Makefile.am (SUBDIRS): Add etc
	* configure.ac: New subst variable MAILFROMSTATEDIR
	* etc: New directory
	* etc/Makefile.am: New file
	* etc/mailfromd.rc: New file
	* etc/rc.in: New file
	* etc/.cvsignore: New file
	* src/Makefile.am (MAILFROMSTATEDIR): Remove definition
	* src/dns.c: Add missing includes.
	(free_mx_buffer): Removed
	* src/gram.y: Add configurable regcomp flags.
	(parse_pragma): New function
	* src/lex.l: Parse pragma directives
	* src/mailfrom.h: Add new declarations
	* src/main.c: Changed option handling
	
2005-06-09  Sergey Poznyakoff  <gray@Mirddin.farlep.net>

	* src/gram.y: Implement new keyword 'relayed'
	* src/lex.l: Likewise
	* src/mailfrom.h: Likewise
	* src/main.c (relayed_domain_p): Verify full hostname as well
	(method_strict,method_standard): Return success on empty email.

	* configure.ac: Raised version number to 0.9.9
	* src/Makefile.am (EXTRA_DIST): Added gram.h
	* src/gram.y: Improved tracing and debugging output.
	* src/lex.l: Return locus along with the keyword
	* src/mailfrom.h (debug4,debug5,debug6): New macros
	(struct locus): new data type
	(struct poll_action, struct node): Include locus
	(get_locus, trace): New functions
	* src/main.c (do_trace): New variable (option --trace)
	(vlogmsg,logmsg,transcript): Fixed signature (const char *fmt).
	(trace): New function.
	(parse_opt): Handle --trace option.

2005-06-09  Sergey Poznyakoff  <gray@Noldor.runasimi.org>

	* src/mailfrom.h: New debug macros.
	(node_type_hostname): New node type
	* src/cache.c: Use new debug macros
	* src/dns.c: Likewise
	* src/gram.y: Likewise
	* src/lex.l: New keyword HOSTNAME.
	* src/main.c: Implement header operations
	
2005-06-08  Sergey Poznyakoff  <gray@Mirddin.farlep.net>

	* configure.ac: Check for yacc and lex
	* src/gram.y: New file. Configuration file grammar and run-time
	support.
	* src/lex.l: New file. Configuration file lexical analyzer.
	* src/Makefile.am (mailfromd_SOURCES): Add gram.y lex.l
	(AM_CPPFLAGS): Define SYSCONFDIR
	(AM_YFLAGS,AM_LFLAGS): New vars
	* src/dns.c: mailutils/mailutils.h are now included from
	mailfrom.h
	* src/mailfrom.h: Add new includes
	(DEFAULT_CONFIG_FILE): New define
	Add parse tree-related data types
	(parse_error,yyparse,source,parse_config): New declarations
	* src/main.c: Major rewrite: removed predefined and configurable
	actions, get *the program* to be executed from the configuration
	file.
	* src/.cvsignore: Updated
	
2005-06-08  Sergey Poznyakoff  <gray@sun.farlep.net>

	* src/main.c (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@Mirddin.farlep.net>

	* src/main.c (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@Noldor.runasimi.org>

	* src/main.c (method_standard): Check the host first, only if it
	does not answer, check MXs.

2005-06-06  Sergey Poznyakoff  <gray@Mirddin.farlep.net>

	* NEWS: Updated
	* README: Updated
	* src/main.c (action_failure_default): Changed to return:reject
	(SMTP_MAJOR): New macro
	(check_on_host): Use SMTP_MAJOR
	* doc/.cvsignore: Updated

2005-06-05  Sergey Poznyakoff  <gray@Noldor.runasimi.org>

	* doc/mailfromd.texi: More documentation
	* src/Makefile.am (install-data-local): Create MAILFROMSTATEDIR
	* src/cache.c (cache_expire_db): New function
	* src/mailfrom.h: Likewise
	* src/main.c (add_header): Removed. Use per-message private data
	to keep it. All referers updated.
	(--delete): New mode
	(--expire): New mode

	* doc/Makefile.am: Bugfixes
	* doc/mailfromd.texi: Created documentation framework
	* src/cache.c (cache_get): Do not update timestamps on each
	retrieval.
	* src/main.c (capa): Add license capability.

	* configure.ac (DEFAULT_SOCKET): Change default
	* src/Makefile.am (AM_CPPFLAGS): Define MAILFROMSTATEDIR instead
	of LOCALSTATEDIR
	(LDADD): Get rid of static linkage with libresolv
	* src/mailfrom.h (DEFAULT_PIDFILE,DEFAULT_DATABASE): Use
	MAILFROMSTATEDIR instead of LOCALSTATEDIR.
	* src/dns.c (_getmx): Rewritten using BIND-4-style interface. See
	comment to this function for the reasons of this regress.
	* src/main.c (check_mx_records): Bugfix. Provide default return
	value in case no MX records are found.
	(mailfromd_show_defaults): Show MAILFROMSTATEDIR

2005-06-04  Sergey Poznyakoff  <gray@Noldor.runasimi.org>

	* Makefile.am (SUBDIRS): Add doc
	* configure.ac (AC_CONFIG_FILES): Add doc/Makefile
	* src/main.c (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.
	* doc: New directory
	* doc/Makefile.am, doc/fdl.texi, doc/gendocs_template,
	doc/mailfromd.texi, doc/rendition.texi, doc/.cvsignore: New files.

	* Makefile.am: Updated for deep directory structure
	* configure.ac: Updated for deep directory structure. Detect
	DBM/NDBM/GDBM, define variables for caching. Raised
	version number to 0.2
	* src: New directory
	* dns.c, daemon.c, obstack.c, obstack.h, snprintf.c,
	snprintf.h, mailfrom.h: Moved to ...
	* src/dns.c, src/daemon.c, obstack.c, src/obstack.h,
	src/snprintf.c, src/snprintf.h, src/mailfrom.h: here
	* src/Makefile.am: New file
	* main.c: Moved to src/
	* src/main.c: Moved from ../. Added result caching and new
	operating modes.
	* src/mu_dbm.c, src/mu_dbm.h, src/strtok_r.c: New files. Exported
	from mailutils
	* src/cache.c: New file. Caching support.
	* .cvsignore: New file
	* src/.cvsignore: New file

	* dns.c (getmx): Do not skip hostname when checking. Handle both
	IP address and FQDN as input.
	* main.c: Implemented two methods: standard (the default) and
	strict (the one that was implemented initially).

2005-06-04  Sergey Poznyakoff  <gray@Mirddin.farlep.net>

	* main.c: Rewritten action system. Documented the code.

2005-06-03  Sergey Poznyakoff  <gray@Mirddin.farlep.net>

	* main.c (parse_opt): Ordered switch cases.
	(main): Switch to user's privileges only if started as root.

2005-06-03  Sergey Poznyakoff  <gray@Mirddin.farlep.net>

	* Initial release.


Local Variables:
mode: change-log
version-control: never
End:
	

