2007-06-01 Sergey Poznyakoff * src/lex.l: Fix line counting within here-documents 2007-05-12 Sergey Poznyakoff -= Release 4.0 =- 2007-05-12 Sergey Poznyakoff * 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 * 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 * 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 * 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 * 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 * 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 * 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 * src/mu_dbm.c (mu_dbm_strerror): Improve error logging. 2007-05-01 Sergey Poznyakoff * 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 * 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 * 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 * 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 * 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 * 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 * 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 * 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 * 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 * 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 * 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 * 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 * 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 * 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 * doc/mailfromd.texi, NEWS: Document SPF functions 2007-04-03 Sergey Poznyakoff * 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 * 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 * 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 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 * 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 * 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 * 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 * 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 * 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 * 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 * 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 * 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 * 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 * 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 * 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 * 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 * 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 * 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 * 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 * src/gram.y (constdecl): Return NULL. Fixes coredump if const is used within a code block. 2007-02-19 Sergey Poznyakoff * src/mailfrom.h (node_type_noop): New node type * src/gram.y: Allow declarations of initialized variables. (print_node) : Fix coredump on void returns (optimize_node): Fix coredump on `if 0 ' * 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 * src/spf.c: Implement all modifiers, improve debugging. 2007-02-17 Sergey Poznyakoff * 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 * gacopyz/trans.awk: Always quote /dev/stderr 2007-02-08 Sergey Poznyakoff Move version control under SVN. Remove .cvsignore files. CVS copy kept around for references. 2007-01-24 Sergey Poznyakoff * 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 * 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 * 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 * 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 * 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 * 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 , 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 * 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 * 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 * 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 * 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 * doc/mailfromd.texi: Fix typo 2006-12-25 Sergey Poznyakoff * 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 * NEWS: Update * src/bi_string.m4 (message_header_decode, message_header_encode): New functions. 2006-12-15 Sergey Poznyakoff * 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 * 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 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 * 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 * 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 * NEWS, configure.ac: Version 3.1 2006-12-06 Sergey Poznyakoff * 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 * 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 * 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 * 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 * src/prog.c (env_final_gc): Free temporary storagee before returning. 2006-11-30 Sergey Poznyakoff * 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 * 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 * 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 * 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 * 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 * 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 * 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 * 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 * 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 * 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 * 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 * 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 * 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 * 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 * 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 * 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 * 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 * 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 Release 3.0 * doc/mailfromd.texi: Update * etc/rc.in: Update 2006-11-05 Sergey Poznyakoff * 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 * 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 * 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 * 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 * 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 * 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 * 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 * 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 * 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 * src/prog.c: Minor indentation changes * src/snarf.m4: Add comments 2006-10-22 Sergey Poznyakoff * src/lex.l: Use familiar \N notation for back references. Expand \0ooo and \xhh notations in double-quoted strings. 2006-10-21 Sergey Poznyakoff * 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 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 * 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 * TODO: Update * doc/mailfromd.texi: Apply some fixes, proposed by Jan 2006-10-11 Sergey Poznyakoff * 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 * 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 * 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 * 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 -= 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 * 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 * 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 * doc/mailfromd.texi: Update * src/prog.c (env_catch): Reset the exception handler. 2006-09-10 Sergey Poznyakoff * 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 * 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 * 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 * 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 * 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 * 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 * 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 * 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 * 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 * 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 * 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 * 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 * 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 * 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 * 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 * src/gram.y (MARK_LOCUS): Optimize insertion of instr_locus codes. * TODO: New file. 2006-08-13 Sergey Poznyakoff * src/prog.c (instr_header): Allocate header_node. 2006-08-12 Sergey Poznyakoff * 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 * 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 * 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 DO ... DONE' will be executed when the requested 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 * 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 * 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 * 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 * 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 * 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 * 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 * 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 * 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 (Sync with v_1_0) * src/main.c (check_portspec): Fix eventual coredump and add more checks. 2006-01-10 Sergey Poznyakoff * 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 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 -= Release 1.3 =- 2006-01-06 Sergey Poznyakoff * src/lex.l: Remove leftover argc_unquote_char 2006-01-05 Sergey Poznyakoff * 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 * src/Makefile.am (AM_CPPFLAGS): Define MU_COMPAT, needed for latest mailutils. 2005-09-20 Sergey Poznyakoff * 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 * 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 * 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 * 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 * 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 * 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 * 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 * doc/mailfromd.texi: Fixed usage of @email{} and @url{}. 2005-06-17 Sergey Poznyakoff * 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 * 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 * 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 * 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 * 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 * 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 * 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 * 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 * 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 * 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 * src/main.c (method_standard): Check the host first, only if it does not answer, check MXs. 2005-06-06 Sergey Poznyakoff * 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 * 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 * 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 * main.c: Rewritten action system. Documented the code. 2005-06-03 Sergey Poznyakoff * main.c (parse_opt): Ordered switch cases. (main): Switch to user's privileges only if started as root. 2005-06-03 Sergey Poznyakoff * Initial release. Local Variables: mode: change-log version-control: never End: