]> git.ipfire.org Git - thirdparty/postfix.git/commitdiff
postfix-2.12-20141224-nonprod 20141214-nonprod
authorWietse Venema <wietse@porcupine.org>
Wed, 24 Dec 2014 05:00:00 +0000 (00:00 -0500)
committerViktor Dukhovni <postfix-users@dukhovni.org>
Thu, 25 Dec 2014 03:23:12 +0000 (22:23 -0500)
140 files changed:
postfix/HISTORY
postfix/RELEASE_NOTES
postfix/WISHLIST
postfix/html/lmtp.8.html
postfix/html/postconf.5.html
postfix/html/smtp-sink.1.html
postfix/html/smtp.8.html
postfix/makedefs
postfix/man/man1/smtp-sink.1
postfix/man/man5/postconf.5
postfix/man/man8/smtp.8
postfix/proto/INSTALL.html
postfix/proto/postconf.proto
postfix/src/anvil/anvil.c
postfix/src/bounce/bounce.c
postfix/src/cleanup/cleanup.c
postfix/src/cleanup/cleanup_api.c
postfix/src/discard/Makefile.in
postfix/src/discard/discard.c
postfix/src/dns/Makefile.in
postfix/src/dnsblog/dnsblog.c
postfix/src/error/Makefile.in
postfix/src/error/error.c
postfix/src/flush/flush.c
postfix/src/fsstone/Makefile.in
postfix/src/global/Makefile.in
postfix/src/global/attr_override.c
postfix/src/global/attr_override.h
postfix/src/global/dsn_mask.c
postfix/src/global/mail_connect.c
postfix/src/global/mail_queue.c
postfix/src/global/mail_stream.c
postfix/src/global/mail_stream.h
postfix/src/global/mail_version.h
postfix/src/global/pipe_command.c
postfix/src/global/pipe_command.h
postfix/src/global/smtp_stream.c
postfix/src/global/strip_addr.c
postfix/src/global/sys_exits.c
postfix/src/global/timed_ipc.c
postfix/src/local/command.c
postfix/src/local/local.c
postfix/src/master/Makefile.in
postfix/src/master/event_server.c
postfix/src/master/mail_server.h
postfix/src/master/multi_server.c
postfix/src/master/single_server.c
postfix/src/master/trigger_server.c
postfix/src/milter/milter.c
postfix/src/milter/milter8.c
postfix/src/oqmgr/Makefile.in
postfix/src/oqmgr/qmgr.c
postfix/src/oqmgr/qmgr_transport.c
postfix/src/pickup/pickup.c
postfix/src/pipe/pipe.c
postfix/src/postalias/Makefile.in
postfix/src/postalias/postalias.c
postfix/src/postcat/postcat.c
postfix/src/postconf/Makefile.in
postfix/src/postdrop/postdrop.c
postfix/src/postfix/Makefile.in
postfix/src/postlock/Makefile.in
postfix/src/postlog/Makefile.in
postfix/src/postmap/Makefile.in
postfix/src/postmap/postmap.c
postfix/src/postmulti/Makefile.in
postfix/src/postmulti/postmulti.c
postfix/src/postscreen/Makefile.in
postfix/src/postscreen/postscreen.c
postfix/src/postscreen/postscreen_dnsbl.c
postfix/src/postscreen/postscreen_endpt.c
postfix/src/postscreen/postscreen_haproxy.c
postfix/src/postscreen/postscreen_starttls.c
postfix/src/postsuper/Makefile.in
postfix/src/posttls-finger/Makefile.in
postfix/src/posttls-finger/posttls-finger.c
postfix/src/proxymap/proxymap.c
postfix/src/qmgr/Makefile.in
postfix/src/qmgr/qmgr.c
postfix/src/qmgr/qmgr_transport.c
postfix/src/qmqpd/qmqpd.c
postfix/src/scache/scache.c
postfix/src/showq/showq.c
postfix/src/smtp/smtp.c
postfix/src/smtpd/Makefile.in
postfix/src/smtpd/smtpd.c
postfix/src/smtpd/smtpd_chat.h
postfix/src/smtpd/smtpd_check.c
postfix/src/smtpd/smtpd_check_backup.in
postfix/src/smtpd/smtpd_check_backup.ref
postfix/src/smtpd/smtpd_dns_filter.in
postfix/src/smtpd/smtpd_dns_filter.ref
postfix/src/smtpd/smtpd_proxy.c
postfix/src/smtpstone/Makefile.in
postfix/src/smtpstone/smtp-sink.c
postfix/src/smtpstone/smtp-source.c
postfix/src/spawn/Makefile.in
postfix/src/spawn/spawn.c
postfix/src/tls/Makefile.in
postfix/src/tls/tls_proxy_clnt.c
postfix/src/tls/tls_stream.c
postfix/src/tlsmgr/tlsmgr.c
postfix/src/tlsproxy/Makefile.in
postfix/src/tlsproxy/tlsproxy.c
postfix/src/trivial-rewrite/trivial-rewrite.c
postfix/src/util/Makefile.in
postfix/src/util/attr.c [deleted file]
postfix/src/util/attr.h
postfix/src/util/attr_clnt.h
postfix/src/util/attr_print0.c
postfix/src/util/attr_print64.c
postfix/src/util/attr_print_plain.c
postfix/src/util/attr_scan0.c
postfix/src/util/attr_scan64.c
postfix/src/util/attr_scan_plain.c
postfix/src/util/auto_clnt.c
postfix/src/util/check_arg.h
postfix/src/util/ctable.c
postfix/src/util/dict_cache.c
postfix/src/util/dict_cache.h
postfix/src/util/dict_lmdb.c
postfix/src/util/dict_tcp.c
postfix/src/util/dict_test.c
postfix/src/util/netstring.c
postfix/src/util/recv_pass_attr.c
postfix/src/util/slmdb.c
postfix/src/util/slmdb.h
postfix/src/util/spawn_command.c
postfix/src/util/spawn_command.h
postfix/src/util/valid_hostname.c
postfix/src/util/vstream.c
postfix/src/util/vstream.h
postfix/src/util/vstream_popen.c
postfix/src/util/vstream_tweak.c
postfix/src/util/vstring.c
postfix/src/util/vstring.h
postfix/src/verify/verify.c
postfix/src/virtual/virtual.c
postfix/src/xsasl/Makefile.in
postfix/src/xsasl/xsasl_dovecot_server.c

index 5f7977c213dcd41fd84a1dcceeae9210c815f4eb..661bc84ad7083c15dde6942e7bedd6160221f567 100644 (file)
@@ -21094,35 +21094,82 @@ Apologies for any names omitted.
        format check, making it a noop. Viktor Dukhovni. File:
        util/sys_defs.h.
 
-       Maintainability: argument typechecking for the variadic
-       attribute-value read/write functions. For full typechecking
-       compile with -DVARARGS_ATTR_DEBUG. Files: anvil/anvil.c,
-       bounce/bounce.c, cleanup/cleanup.c, dnsblog/dnsblog.c,
-       flush/flush.c, global/abounce.c, global/anvil_clnt.c,
-       global/bounce.c, global/defer.c, global/deliver_pass.c,
-       global/deliver_request.c, global/dict_proxy.c, global/dsb_scan.c,
-       global/dsn_print.c, global/flush_clnt.c,
-       global/mail_command_client.c, global/mail_stream.c,
-       global/msg_stats_print.c, global/msg_stats_scan.c,
-       global/post_mail.c, global/rcpt_buf.c, global/rcpt_print.c,
-       global/resolve_clnt.c, global/rewrite_clnt.c, global/scache_clnt.c,
-       global/trace.c, global/verify_clnt.c, local/forward.c,
-       milter/milter.c, milter/milter8.c, milter/milter_macros.c,
-       oqmgr/qmgr_deliver.c, pickup/pickup.c, postdrop/postdrop.c,
-       postscreen/postscreen_dnsbl.c, postscreen/postscreen_send.c,
-       postscreen/postscreen_starttls.c, proxymap/proxymap.c,
-       qmgr/qmgr_deliver.c, qmqpd/qmqpd.c, scache/scache.c,
-       smtpd/smtpd.c, smtpd/smtpd_check.c, tls/tls_mgr.c,
-       tls/tls_proxy_clnt.c, tls/tls_proxy_print.c, tls/tls_proxy_scan.c,
-       tlsmgr/tlsmgr.c, tlsproxy/tlsproxy.c, trivial-rewrite/resolve.c,
-       trivial-rewrite/rewrite.c, trivial-rewrite/trivial-rewrite.c,
-       util/attr.h.
+       Maintainability: compile-time argument typechecking for
+       variadic attribute-value read/write functions. Files:
+       anvil/anvil.c, bounce/bounce.c, cleanup/cleanup.c,
+       dnsblog/dnsblog.c, flush/flush.c, global/abounce.c,
+       global/anvil_clnt.c, global/bounce.c, global/defer.c,
+       global/deliver_pass.c, global/deliver_request.c,
+       global/dict_proxy.c, global/dsb_scan.c, global/dsn_print.c,
+       global/flush_clnt.c, global/mail_command_client.c,
+       global/mail_stream.c, global/msg_stats_print.c,
+       global/msg_stats_scan.c, global/post_mail.c, global/rcpt_buf.c,
+       global/rcpt_print.c, global/resolve_clnt.c, global/rewrite_clnt.c,
+       global/scache_clnt.c, global/trace.c, global/verify_clnt.c,
+       local/forward.c, milter/milter.c, milter/milter8.c,
+       milter/milter_macros.c, oqmgr/qmgr_deliver.c, pickup/pickup.c,
+       postdrop/postdrop.c, postscreen/postscreen_dnsbl.c,
+       postscreen/postscreen_send.c, postscreen/postscreen_starttls.c,
+       proxymap/proxymap.c, qmgr/qmgr_deliver.c, qmqpd/qmqpd.c,
+       scache/scache.c, smtpd/smtpd.c, smtpd/smtpd_check.c,
+       tls/tls_mgr.c, tls/tls_proxy_clnt.c, tls/tls_proxy_print.c,
+       tls/tls_proxy_scan.c, tlsmgr/tlsmgr.c, tlsproxy/tlsproxy.c,
+       trivial-rewrite/resolve.c, trivial-rewrite/rewrite.c,
+       trivial-rewrite/trivial-rewrite.c, util/attr.h.
 
 20141217
 
-       Replaced argment typechecking based on inline functions
-       with an implementation based on ternary expressions with
-       unreachable assignments to dummy variables.   This should
-       produce the exact same result as the approach based on
-       inline functions (which were standardized with C99). Files:
-       util/check_arg.h, util/attr.h, util/attr.c.
+       Replaced compile-time argument typechecking based on inline
+       functions with an implementation based on ternary expressions
+       with unreachable assignments to dummy variables.   This
+       should produce the exact same result as the approach based
+       on inline functions (which were standardized with C99).
+       Files: util/check_arg.h, util/attr.h, util/attr.c.
+
+20141221
+
+       Portability: proof-of-concept template for OpenBSD build
+       with shared libpostfix etc. libraries. File: makedefs.
+
+20141223
+
+       Cleanup: compile-time variadic argument type checking for
+       attribute-value APIs of vstream, vstream_popen, vstring,
+       pipe_command, spawn_command, attr_override, and mail_server
+       skeletons.  Based on mostly automatic conversion and checking,
+       with a manual inspection of the remainder.  Files:
+       anvil/anvil.c, bounce/bounce.c, cleanup/cleanup.c,
+       cleanup/cleanup_api.c, discard/discard.c, dnsblog/dnsblog.c,
+       error/error.c, flush/flush.c, global/attr_override.c,
+       global/attr_override.h, global/mail_connect.c, global/mail_queue.c,
+       global/mail_stream.c, global/mail_stream.h, global/pipe_command.c,
+       global/pipe_command.h, global/smtp_stream.c, global/timed_ipc.c,
+       local/command.c, local/local.c, master/event_server.c,
+       master/mail_server.h, master/multi_server.c,
+       master/single_server.c, milter/milter.c, milter/milter8.c,
+       oqmgr/qmgr.c, oqmgr/qmgr_transport.c, pickup/pickup.c,
+       pipe/pipe.c, postalias/postalias.c, postcat/postcat.c,
+       postdrop/postdrop.c, postmap/postmap.c, postscreen/postscreen.c,
+       postscreen/postscreen_dnsbl.c, postscreen/postscreen_haproxy.c,
+       postscreen/postscreen_starttls.c, posttls-finger/posttls-finger.c,
+       proxymap/proxymap.c, qmgr/qmgr.c, qmgr/qmgr_transport.c,
+       qmqpd/qmqpd.c, scache/scache.c, showq/showq.c, smtp/smtp.c,
+       smtpd/smtpd.c, smtpd/smtpd_check.c, smtpd/smtpd_proxy.c,
+       smtpstone/smtp-source.c, spawn/spawn.c, tls/tls_proxy_clnt.c,
+       tls/tls_stream.c, tlsmgr/tlsmgr.c, tlsproxy/tlsproxy.c,
+       trivial-rewrite/trivial-rewrite.c, util/auto_clnt.c,
+       util/ctable.c, util/dict_cache.c, util/dict_cache.h,
+       util/dict_lmdb.c, util/dict_tcp.c, util/netstring.c,
+       util/recv_pass_attr.c, util/slmdb.c, util/slmdb.h,
+       util/spawn_command.c, util/spawn_command.h, util/vstream.c,
+       util/vstream.h, util/vstream_popen.c, util/vstream_tweak.c,
+       util/vstring.c, util/vstring.h, verify/verify.c,
+       virtual/virtual.c, xsasl/xsasl_dovecot_server.c.
+
+20141224
+
+       Cleanup: the compile-time argument typechecks for attribute-value
+       APIs are now by default implemented with inline functions.
+       Compile with -DNO_INLINE to implement the argument typechecks
+       with ternary operators and unreachable assignments.  Files:
+       util/check_arg.h and its consumers.
index 44a424d410595fcaa950b3fb9667eab5acf1fbd0..f2abd42ba24fd2ee66f01d98bd05b2c9efaf73f7 100644 (file)
@@ -59,6 +59,14 @@ Maintainers may also benefit from the makedefs documentation
 (mantools/srctoman - makedefs | nroff -man | less) with information
 about build options that are not described in the INSTALL instructions.
 
+Major changes with snapshot 20141224
+====================================
+
+Compile-time argument typechecks of non-printf/scanf-like variadic
+function argument lists. This change produces no directly-visible
+result, but it makes Postfix code easier to maintain, and therefore
+makes new functionality easier to add.
+
 Major changes with snapshot 20141207
 ====================================
 
index 76d3939bf7d49547158e4d39ad9096c09bc1b18a..6da5d5c7338d118f0e2d173fce1344b9bbf0bd60 100644 (file)
@@ -12,6 +12,14 @@ Wish list:
        support for regexp: and cidr: tables. Factor out and reuse
        code that already exists in inline: and other tables.
 
+       Solaris poll() does not work as expected. With Solaris10,
+       write_wait() hangs until timeout when invoked after peekfd()
+       has received an ECONNRESET error indication. This happens
+       when a client sends QUIT and closes the connection immediately.
+       Apparently the ECONNRESET error condition is not persistent.
+
+       Fix "postfix-install: daemon_directory: not found' on Solaris.
+
        Log command=good/bad statistics in postscreen?
 
        Implement smtpd_client_auth_rate limit?
index 12e631e4cec872d57e38e412352ab53c00d0dcea..37f1a1986f4ad759b7df92790ab5b300735f4af4 100644 (file)
@@ -299,7 +299,7 @@ SMTP(8)                                                                SMTP(8)
               delivery status code or explanatory text of successful or unsuc-
               cessful deliveries.
 
-       <b><a href="postconf.5.html#smtp_dns_reply_filter">smtp_dns_reply_filter</a> ($<a href="postconf.5.html#default_dns_reply_filter">default_dns_reply_filter</a>)</b>
+       <b><a href="postconf.5.html#smtp_dns_reply_filter">smtp_dns_reply_filter</a> (empty)</b>
               Optional filter for Postfix SMTP client DNS lookup results.
 
 <b>MIME PROCESSING CONTROLS</b>
@@ -801,7 +801,7 @@ SMTP(8)                                                                SMTP(8)
               client should bind to when making an IPv6 connection.
 
        <b><a href="postconf.5.html#smtp_helo_name">smtp_helo_name</a> ($<a href="postconf.5.html#myhostname">myhostname</a>)</b>
-              The hostname to send in the SMTP EHLO or HELO command.
+              The hostname to send in the SMTP HELO or EHLO command.
 
        <b><a href="postconf.5.html#lmtp_lhlo_name">lmtp_lhlo_name</a> ($<a href="postconf.5.html#myhostname">myhostname</a>)</b>
               The hostname to send in the LMTP LHLO command.
index 95d65ef1424c03bf982706e5729704107fd42e71..b3d7e8b5fe01383934a5fecb543d530800a80d86 100644 (file)
@@ -781,7 +781,9 @@ and <a href="postdrop.1.html">postdrop(1)</a>.
 when not present.  Postfix 2.6 and later add these headers only
 when clients match the <a href="postconf.5.html#local_header_rewrite_clients">local_header_rewrite_clients</a> parameter
 setting.  Earlier Postfix versions always add these headers; this
-may break DKIM signatures that cover non-existent headers. </p>
+may break DKIM signatures that cover non-existent headers.
+The <a href="postconf.5.html#undisclosed_recipients_header">undisclosed_recipients_header</a> parameter setting determines
+whether a To: header will be added. </p>
 
 
 </DD>
index e58394ec3fd5f2b3f867e0de431d30845e4f8ca6..b9424202c11d517389b9902b0fe1e609762a840c 100644 (file)
@@ -102,12 +102,18 @@ SMTP-SINK(1)                                                      SMTP-SINK(1)
               Use <i>hostname</i> in the SMTP greeting, in the HELO response, and  in
               the EHLO response. The default hostname is "smtp-sink".
 
+       <b>-H</b> <i>delay</i>
+              Delay  the  first  read  operation after receiving DATA (time in
+              seconds). Combine with a large test message and a small TCP win-
+              dow  size  (see  the  <b>-T</b>  option)  to  test  the  Postfix client
+              write_wait() implementation.
+
        <b>-L</b>     Enable LMTP instead of SMTP.
 
        <b>-m</b> <i>count</i> (default: 256)
               An upper bound on the maximal number of simultaneous connections
-              that <b>smtp-sink</b> will handle. This prevents the process from  run-
-              ning  out  of  file  descriptors.  Excess  connections will stay
+              that  <b>smtp-sink</b> will handle. This prevents the process from run-
+              ning out of  file  descriptors.  Excess  connections  will  stay
               queued in the TCP/IP stack.
 
        <b>-M</b> <i>count</i>
@@ -120,69 +126,69 @@ SMTP-SINK(1)                                                      SMTP-SINK(1)
 
        <b>-p</b>     Do not announce support for ESMTP command pipelining.
 
-       <b>-P</b>     Change the server greeting so that it appears to come through  a
+       <b>-P</b>     Change  the server greeting so that it appears to come through a
               CISCO PIX system. Implies <b>-e</b>.
 
        <b>-q</b> <i>command,command,...</i>
-              Disconnect  (without replying) after receiving one of the speci-
+              Disconnect (without replying) after receiving one of the  speci-
               fied commands.
 
-              Examples of commands are CONNECT, HELO, EHLO, LHLO, MAIL,  RCPT,
-              VRFY,  DATA,  ., RSET, NOOP, and QUIT. Separate command names by
-              white space or commas, and use quotes  to  protect  white  space
+              Examples  of commands are CONNECT, HELO, EHLO, LHLO, MAIL, RCPT,
+              VRFY, DATA, ., RSET, NOOP, and QUIT. Separate command  names  by
+              white  space  or  commas,  and use quotes to protect white space
               from the shell. Command names are case-insensitive.
 
        <b>-Q</b> <i>command,command,...</i>
               Send a 421 reply and disconnect after receiving one of the spec-
               ified commands.
 
-              Examples of commands are CONNECT, HELO, EHLO, LHLO, MAIL,  RCPT,
-              VRFY,  DATA,  ., RSET, NOOP, and QUIT. Separate command names by
-              white space or commas, and use quotes  to  protect  white  space
+              Examples  of commands are CONNECT, HELO, EHLO, LHLO, MAIL, RCPT,
+              VRFY, DATA, ., RSET, NOOP, and QUIT. Separate command  names  by
+              white  space  or  commas,  and use quotes to protect white space
               from the shell. Command names are case-insensitive.
 
        <b>-r</b> <i>command,command,...</i>
-              Reject  the  specified  commands  with  a soft (4xx) error code.
+              Reject the specified commands with  a  soft  (4xx)  error  code.
               This option implies <b>-p</b>.
 
-              Examples of commands are CONNECT, HELO, EHLO, LHLO, MAIL,  RCPT,
-              VRFY,  DATA,  ., RSET, NOOP, and QUIT. Separate command names by
-              white space or commas, and use quotes  to  protect  white  space
+              Examples  of commands are CONNECT, HELO, EHLO, LHLO, MAIL, RCPT,
+              VRFY, DATA, ., RSET, NOOP, and QUIT. Separate command  names  by
+              white  space  or  commas,  and use quotes to protect white space
               from the shell. Command names are case-insensitive.
 
        <b>-R</b> <i>root-directory</i>
-              Change  the  process  root  directory to the specified location.
-              This option requires super-user  privileges.  See  also  the  <b>-u</b>
+              Change the process root directory  to  the  specified  location.
+              This  option  requires  super-user  privileges.  See also the <b>-u</b>
               option.
 
        <b>-s</b> <i>command,command,...</i>
               Log the named commands to syslogd.
 
-              Examples  of commands are CONNECT, HELO, EHLO, LHLO, MAIL, RCPT,
-              VRFY, DATA, ., RSET, NOOP, and QUIT. Separate command  names  by
-              white  space  or  commas,  and use quotes to protect white space
+              Examples of commands are CONNECT, HELO, EHLO, LHLO, MAIL,  RCPT,
+              VRFY,  DATA,  ., RSET, NOOP, and QUIT. Separate command names by
+              white space or commas, and use quotes  to  protect  white  space
               from the shell. Command names are case-insensitive.
 
        <b>-S start-string</b>
-              An optional string that is prepended to  each  message  that  is
-              written  to  a  dump  file (see the dump file format description
-              below). The following  C  escape  sequences  are  supported:  \a
-              (bell),  \b  (backslace),  \f (formfeed), \n (newline), \r (car-
-              riage return), \t (horizontal tab), \v (vertical tab), \<i>ddd</i>  (up
+              An  optional  string  that  is prepended to each message that is
+              written to a dump file (see the  dump  file  format  description
+              below).  The  following  C  escape  sequences  are supported: \a
+              (bell), \b (backslace), \f (formfeed), \n  (newline),  \r  (car-
+              riage  return), \t (horizontal tab), \v (vertical tab), \<i>ddd</i> (up
               to three octal digits) and \\ (the backslash character).
 
        <b>-t</b> <i>timeout</i> (default: 100)
-              Limit  the  time  for receiving a command or sending a response.
+              Limit the time for receiving a command or  sending  a  response.
               The time limit is specified in seconds.
 
        <b>-T</b> <i>windowsize</i>
-              Override the default TCP window size. To work around broken  TCP
+              Override  the default TCP window size. To work around broken TCP
               window scaling implementations, specify a value &gt; 0 and &lt; 65536.
 
        <b>-u</b> <i>username</i>
-              Switch to the specified user privileges after opening  the  net-
-              work  socket and optionally changing the process root directory.
-              This option is required when the process  runs  with  super-user
+              Switch  to  the specified user privileges after opening the net-
+              work socket and optionally changing the process root  directory.
+              This  option  is  required when the process runs with super-user
               privileges. See also the <b>-R</b> option.
 
        <b>-v</b>     Show the SMTP conversations.
@@ -191,27 +197,27 @@ SMTP-SINK(1)                                                      SMTP-SINK(1)
               Wait <i>delay</i> seconds before responding to a DATA command.
 
        <b>-W</b> <i>command:delay[:odds]</i>
-              Wait  <i>delay</i>  seconds  before  responding to <i>command</i>.  If <i>odds</i> is
-              also specified (a number between 1-99  inclusive),  wait  for  a
-              random  multiple of <i>delay</i>. The random multiplier is equal to the
+              Wait <i>delay</i> seconds before responding to  <i>command</i>.   If  <i>odds</i>  is
+              also  specified  (a  number  between 1-99 inclusive), wait for a
+              random multiple of <i>delay</i>. The random multiplier is equal to  the
               number of times the program needs to roll a dice with a range of
-              0..99  inclusive, before the dice produces a result greater than
+              0..99 inclusive, before the dice produces a result greater  than
               or equal to <i>odds</i>.
 
        [<b>inet:</b>][<i>host</i>]:<i>port</i>
-              Listen on network interface <i>host</i> (default:  any  interface)  TCP
-              port  <i>port</i>.  Both  <i>host</i>  and <i>port</i> may be specified in numeric or
+              Listen  on  network  interface <i>host</i> (default: any interface) TCP
+              port <i>port</i>. Both <i>host</i> and <i>port</i> may be  specified  in  numeric  or
               symbolic form.
 
        <b>unix:</b><i>pathname</i>
               Listen on the UNIX-domain socket at <i>pathname</i>.
 
        <i>backlog</i>
-              The maximum length the queue of pending connections, as  defined
+              The  maximum length the queue of pending connections, as defined
               by the <b>listen</b>(2) system call.
 
 <b>DUMP FILE FORMAT</b>
-       Each  dumped message contains a sequence of text lines, terminated with
+       Each dumped message contains a sequence of text lines, terminated  with
        the newline character. The sequence of information is as follows:
 
        <b>o</b>      The optional string specified with the <b>-S</b> option.
@@ -225,41 +231,41 @@ SMTP-SINK(1)                                                      SMTP-SINK(1)
        The format of the <b>smtp-sink</b> generated headers is as follows:
 
        <b>X-Client-Addr:</b> <i>text</i>
-              The client IP address without enclosing []. An IPv6  address  is
+              The  client  IP address without enclosing []. An IPv6 address is
               prefixed with "ipv6:". This record is always present.
 
        <b>X-Client-Proto:</b> <i>text</i>
-              The  client protocol: SMTP, ESMTP or LMTP. This record is always
+              The client protocol: SMTP, ESMTP or LMTP. This record is  always
               present.
 
        <b>X-Helo-Args:</b> <i>text</i>
-              The arguments of the last HELO or EHLO command before this  mail
-              delivery  transaction. This record is present only if the client
-              sent a recognizable HELO or EHLO command before  the  DATA  com-
+              The  arguments of the last HELO or EHLO command before this mail
+              delivery transaction. This record is present only if the  client
+              sent  a  recognizable  HELO or EHLO command before the DATA com-
               mand.
 
        <b>X-Mail-Args:</b> <i>text</i>
-              The  arguments of the MAIL command that started this mail deliv-
+              The arguments of the MAIL command that started this mail  deliv-
               ery transaction. This record is present exactly once.
 
        <b>X-Rcpt-Args:</b> <i>text</i>
-              The arguments of an  RCPT  command  within  this  mail  delivery
+              The  arguments  of  an  RCPT  command  within this mail delivery
               transaction. There is one record for each RCPT command, and they
               are in the order as sent by the client.
 
        <b>Received:</b> <i>text</i>
-              A message header for compatibility with  mail  processing  soft-
-              ware.  This  three-line header marks the end of the headers pro-
+              A  message  header  for compatibility with mail processing soft-
+              ware. This three-line header marks the end of the  headers  pro-
               vided by <b>smtp-sink</b>, and is formatted as follows:
 
               <b>from</b> <i>helo</i> <b>([</b><i>addr</i><b>])</b>
-                     The HELO or EHLO command argument and client IP  address.
-                     If  the  client  did not send HELO or EHLO, the client IP
+                     The  HELO or EHLO command argument and client IP address.
+                     If the client did not send HELO or EHLO,  the  client  IP
                      address is used instead.
 
               <b>by</b> <i>host</i> <b>(smtp-sink) with</b> <i>proto</i> <b>id</b> <i>random</i><b>;</b>
-                     The hostname specified with the  <b>-h</b>  option,  the  client
-                     protocol  (see <b>X-Client-Proto</b> above), and the pseudo-ran-
+                     The  hostname  specified  with  the <b>-h</b> option, the client
+                     protocol (see <b>X-Client-Proto</b> above), and the  pseudo-ran-
                      dom portion of the per-message capture file name.
 
               <i>time-stamp</i>
index 12e631e4cec872d57e38e412352ab53c00d0dcea..37f1a1986f4ad759b7df92790ab5b300735f4af4 100644 (file)
@@ -299,7 +299,7 @@ SMTP(8)                                                                SMTP(8)
               delivery status code or explanatory text of successful or unsuc-
               cessful deliveries.
 
-       <b><a href="postconf.5.html#smtp_dns_reply_filter">smtp_dns_reply_filter</a> ($<a href="postconf.5.html#default_dns_reply_filter">default_dns_reply_filter</a>)</b>
+       <b><a href="postconf.5.html#smtp_dns_reply_filter">smtp_dns_reply_filter</a> (empty)</b>
               Optional filter for Postfix SMTP client DNS lookup results.
 
 <b>MIME PROCESSING CONTROLS</b>
@@ -801,7 +801,7 @@ SMTP(8)                                                                SMTP(8)
               client should bind to when making an IPv6 connection.
 
        <b><a href="postconf.5.html#smtp_helo_name">smtp_helo_name</a> ($<a href="postconf.5.html#myhostname">myhostname</a>)</b>
-              The hostname to send in the SMTP EHLO or HELO command.
+              The hostname to send in the SMTP HELO or EHLO command.
 
        <b><a href="postconf.5.html#lmtp_lhlo_name">lmtp_lhlo_name</a> ($<a href="postconf.5.html#myhostname">myhostname</a>)</b>
               The hostname to send in the LMTP LHLO command.
index 58eb0cca4f3b1d8454953144cff68e17b61c6232..e024cda4008637a0f8be05e85012393a28b27bf3 100644 (file)
 #      are known to support it.
 # .IP \fB-DNO_EAI\fR
 #      Do not build with EAI (SMTPUTF8) support.
+# .IP \fB-DNO_INLINE\fR
+#      Do not require support for C99 "inline" functions. Instead,
+#      implement argument typechecks for non-printf/scanf-like
+#      functions with ternary operators and unreachable code.
 # .IP \fB-DNO_IPV6\fR
 #      Do not build with IPv6 support.
 #      By default, IPv6 support is compiled in on platforms that
@@ -240,6 +244,13 @@ case "$SYSTEM.$RELEASE" in
   OpenBSD.4*)  SYSTYPE=OPENBSD4
                ;;
   OpenBSD.5*)  SYSTYPE=OPENBSD5
+               : ${CC=cc}
+               : ${SHLIB_SUFFIX=.so.1.0}
+               : ${SHLIB_CFLAGS=-fPIC}
+               : ${SHLIB_LD="${CC} -shared"' -Wl,-soname,${LIB}'}
+               : ${SHLIB_RPATH='-Wl,-rpath,${SHLIB_DIR}'}
+               : ${SHLIB_ENV="LD_LIBRARY_PATH=`pwd`/lib"}
+               : ${PLUGIN_LD="${CC} -shared"}
                ;;
   ekkoBSD.1*)  SYSTYPE=EKKOBSD1
                ;;
index da45ae7fdb44f4616164cb816ee3c37befe53eee..136475b7c19d44e42359309d81a63363ac0d1901 100644 (file)
@@ -101,6 +101,11 @@ Disable XFORWARD support.
 .IP "\fB-h\fI hostname\fR"
 Use \fIhostname\fR in the SMTP greeting, in the HELO response,
 and in the EHLO response. The default hostname is "smtp-sink".
+.IP "\fB-H\fI delay\fR"
+Delay the first read operation after receiving DATA (time
+in seconds). Combine with a large test message and a small
+TCP window size (see the \fB-T\fR option) to test the Postfix
+client write_wait() implementation.
 .IP \fB-L\fR
 Enable LMTP instead of SMTP.
 .IP "\fB-m \fIcount\fR (default: 256)"
index c06e544dfc16d3b8ee3e27d62a9aa2b90b1d2fb2..69603ad35c4378461ed8e67a1ded19d197975eb0 100644 (file)
@@ -458,6 +458,8 @@ when not present.  Postfix 2.6 and later add these headers only
 when clients match the local_header_rewrite_clients parameter
 setting.  Earlier Postfix versions always add these headers; this
 may break DKIM signatures that cover non-existent headers.
+The undisclosed_recipients_header parameter setting determines
+whether a To: header will be added.
 .SH always_bcc (default: empty)
 Optional address that receives a "blind carbon copy" of each message
 that is received by the Postfix mail system.
index ffcac6c9cd9635b1cb366179277c1ae12006f4b0..6a9de639e606f4a4b3b78221cb12ab11646a65c8 100644 (file)
@@ -282,7 +282,7 @@ Available in Postfix version 2.12 and later:
 Optional filter for the \fBsmtp\fR(8) delivery agent to change the
 delivery status code or explanatory text of successful or unsuccessful
 deliveries.
-.IP "\fBsmtp_dns_reply_filter ($default_dns_reply_filter)\fR"
+.IP "\fBsmtp_dns_reply_filter (empty)\fR"
 Optional filter for Postfix SMTP client DNS lookup results.
 .SH "MIME PROCESSING CONTROLS"
 .na
@@ -702,7 +702,7 @@ should bind to when making an IPv4 connection.
 An optional numerical network address that the Postfix SMTP client
 should bind to when making an IPv6 connection.
 .IP "\fBsmtp_helo_name ($myhostname)\fR"
-The hostname to send in the SMTP EHLO or HELO command.
+The hostname to send in the SMTP HELO or EHLO command.
 .IP "\fBlmtp_lhlo_name ($myhostname)\fR"
 The hostname to send in the LMTP LHLO command.
 .IP "\fBsmtp_host_lookup (dns)\fR"
index 7636ce69058f214b92349310368cc98d48d28ee6..8a1b958ef4b4360bbea05710834110a7ea3b8357 100644 (file)
@@ -734,6 +734,11 @@ that are known to support this feature. </td> </tr>
 (SMTPUTF8) support. By default, EAI support is compiled in when 
 the "icuuc" library and header files are found.  </td> </tr>
 
+<tr> <td> </td> <td> -DNO_INLINE </td> <td> Do not require support
+for C99 "inline" functions. Instead, implement argument typechecks
+for non-printf/scanf-like functions with ternary operators and
+unreachable code. </td> </tr>
+
 <tr> <td> </td> <td> -DNO_IPV6 </td> <td> Do not build with IPv6
 support. By default, IPv6 support is compiled in on platforms that
 are known to have IPv6 support. Note: this directive is for debugging
index 9341208dbbee2bd59ab03e0e68fee2e1f47d3063..eb6633cabe327f9d65573ef883233e3f100cfcf2 100644 (file)
@@ -13563,7 +13563,9 @@ existing LMTP-based content filters. </p>
 when not present.  Postfix 2.6 and later add these headers only
 when clients match the local_header_rewrite_clients parameter
 setting.  Earlier Postfix versions always add these headers; this
-may break DKIM signatures that cover non-existent headers. </p>
+may break DKIM signatures that cover non-existent headers. 
+The undisclosed_recipients_header parameter setting determines
+whether a To: header will be added. </p>
 
 %PARAM lmtp_header_checks
 
index 59549e878bac50db4d24fea54ef2a6d0eb9c00d8..a4912defca872824f12cfa271ba07960440a6ff9 100644 (file)
@@ -591,8 +591,8 @@ static ANVIL_REMOTE *anvil_remote_conn_update(VSTREAM *client_stream, const char
        anvil_local = (ANVIL_LOCAL *) mymalloc(sizeof(*anvil_local));
        ANVIL_LOCAL_INIT(anvil_local);
        vstream_control(client_stream,
-                       VSTREAM_CTL_CONTEXT, (void *) anvil_local,
-                       VSTREAM_CTL_END);
+                       VSTREAM_SCTL_CONTEXT((void *) anvil_local),
+                       VSTREAM_SCTL_END);
     }
     ANVIL_LOCAL_ADD_ONE(anvil_local, anvil_remote);
     if (msg_verbose)
@@ -954,10 +954,10 @@ int     main(int argc, char **argv)
     MAIL_VERSION_STAMP_ALLOCATE;
 
     multi_server_main(argc, argv, anvil_service,
-                     MAIL_SERVER_TIME_TABLE, time_table,
-                     MAIL_SERVER_POST_INIT, post_jail_init,
-                     MAIL_SERVER_SOLITARY,
-                     MAIL_SERVER_PRE_DISCONN, anvil_service_done,
-                     MAIL_SERVER_EXIT, anvil_status_dump,
+                     MAIL_SERVER_REQ_TIME_TABLE(time_table),
+                     MAIL_SERVER_REQ_POST_INIT(post_jail_init),
+                     MAIL_SERVER_REQ_SOLITARY,
+                     MAIL_SERVER_REQ_PRE_DISCONN(anvil_service_done),
+                     MAIL_SERVER_REQ_EXIT(anvil_status_dump),
                      0);
 }
index 2016a3433ef0b05e2abd89087d6a4e1f6b424cff..82cb39e3b09ba7efb9245c4279c7d29f17baa1f8 100644 (file)
@@ -656,11 +656,11 @@ int     main(int argc, char **argv)
      * Pass control to the single-threaded service skeleton.
      */
     single_server_main(argc, argv, bounce_service,
-                      MAIL_SERVER_INT_TABLE, int_table,
-                      MAIL_SERVER_STR_TABLE, str_table,
-                      MAIL_SERVER_TIME_TABLE, time_table,
-                      MAIL_SERVER_PRE_INIT, pre_jail_init,
-                      MAIL_SERVER_POST_INIT, post_jail_init,
-                      MAIL_SERVER_UNLIMITED,
+                      MAIL_SERVER_REQ_INT_TABLE(int_table),
+                      MAIL_SERVER_REQ_STR_TABLE(str_table),
+                      MAIL_SERVER_REQ_TIME_TABLE(time_table),
+                      MAIL_SERVER_REQ_PRE_INIT(pre_jail_init),
+                      MAIL_SERVER_REQ_POST_INIT(post_jail_init),
+                      MAIL_SERVER_REQ_UNLIMITED,
                       0);
 }
index 3c05943f97b3fcba709edd1dc1d9771b4f779bec..d306bb647db22a55953c739523170365147dd0ca 100644 (file)
@@ -570,14 +570,14 @@ int     main(int argc, char **argv)
      * Pass control to the single-threaded service skeleton.
      */
     single_server_main(argc, argv, cleanup_service,
-                      MAIL_SERVER_INT_TABLE, cleanup_int_table,
-                      MAIL_SERVER_BOOL_TABLE, cleanup_bool_table,
-                      MAIL_SERVER_STR_TABLE, cleanup_str_table,
-                      MAIL_SERVER_TIME_TABLE, cleanup_time_table,
-                      MAIL_SERVER_PRE_INIT, cleanup_pre_jail,
-                      MAIL_SERVER_POST_INIT, cleanup_post_jail,
-                      MAIL_SERVER_PRE_ACCEPT, pre_accept,
-                      MAIL_SERVER_IN_FLOW_DELAY,
-                      MAIL_SERVER_UNLIMITED,
+                      MAIL_SERVER_REQ_INT_TABLE(cleanup_int_table),
+                      MAIL_SERVER_REQ_BOOL_TABLE(cleanup_bool_table),
+                      MAIL_SERVER_REQ_STR_TABLE(cleanup_str_table),
+                      MAIL_SERVER_REQ_TIME_TABLE(cleanup_time_table),
+                      MAIL_SERVER_REQ_PRE_INIT(cleanup_pre_jail),
+                      MAIL_SERVER_REQ_POST_INIT(cleanup_post_jail),
+                      MAIL_SERVER_REQ_PRE_ACCEPT(pre_accept),
+                      MAIL_SERVER_REQ_IN_FLOW_DELAY,
+                      MAIL_SERVER_REQ_UNLIMITED,
                       0);
 }
index 7e7c43c415051ccd693408934b2e94925b0d9254..6f43dff40c34ec5a5df90ca0a57680b6e722e3ba 100644 (file)
@@ -304,13 +304,13 @@ int     cleanup_flush(CLEANUP_STATE *state)
            state->queue_name = mystrdup(MAIL_QUEUE_HOLD);
 #endif
            mail_stream_ctl(state->handle,
-                           MAIL_STREAM_CTL_QUEUE, state->queue_name,
-                           MAIL_STREAM_CTL_CLASS, (char *) 0,
-                           MAIL_STREAM_CTL_SERVICE, (char *) 0,
+                           MAIL_STREAM_SCTL_QUEUE(state->queue_name),
+                           MAIL_STREAM_SCTL_CLASS((char *) 0),
+                           MAIL_STREAM_SCTL_SERVICE((char *) 0),
 #ifdef DELAY_ACTION
-                           MAIL_STREAM_CTL_DELAY, state->defer_delay,
+                           MAIL_STREAM_SCTL_DELAY(state->defer_delay),
 #endif
-                           MAIL_STREAM_CTL_END);
+                           MAIL_STREAM_SCTL_END);
            junk = cleanup_path;
            cleanup_path = mystrdup(VSTREAM_PATH(state->handle->stream));
            myfree(junk);
index d14751466a8f89398942a48b9de5cbdb31016256..218f28bc5bf48be11a4a8cd5921d1cecec5e15a4 100644 (file)
@@ -69,6 +69,7 @@ discard.o: ../../include/dsn_buf.h
 discard.o: ../../include/dsn_util.h
 discard.o: ../../include/flush_clnt.h
 discard.o: ../../include/htable.h
+discard.o: ../../include/mail_conf.h
 discard.o: ../../include/mail_queue.h
 discard.o: ../../include/mail_server.h
 discard.o: ../../include/mail_version.h
index fec6a9f853d394d3ef2a8b996e773676fedb7154..aeab6e701e4124267e669f723b0e52ab44a7f590 100644 (file)
@@ -237,6 +237,6 @@ int     main(int argc, char **argv)
     MAIL_VERSION_STAMP_ALLOCATE;
 
     single_server_main(argc, argv, discard_service,
-                      MAIL_SERVER_PRE_INIT, pre_init,
+                      MAIL_SERVER_REQ_PRE_INIT(pre_init),
                       0);
 }
index 4635cb1904694a4c092106a2a3d06916a089e797..d8551b0f87c5209ca2e089887fcb2f3a01435510 100644 (file)
@@ -162,6 +162,7 @@ depend: $(MAKES)
 
 # do not edit below this line - it is generated by 'make depend'
 dns_lookup.o: ../../include/argv.h
+dns_lookup.o: ../../include/check_arg.h
 dns_lookup.o: ../../include/dict.h
 dns_lookup.o: ../../include/maps.h
 dns_lookup.o: ../../include/msg.h
@@ -177,6 +178,7 @@ dns_lookup.o: ../../include/vstream.h
 dns_lookup.o: ../../include/vstring.h
 dns_lookup.o: dns.h
 dns_lookup.o: dns_lookup.c
+dns_rr.o: ../../include/check_arg.h
 dns_rr.o: ../../include/msg.h
 dns_rr.o: ../../include/myaddrinfo.h
 dns_rr.o: ../../include/mymalloc.h
@@ -187,6 +189,7 @@ dns_rr.o: ../../include/vbuf.h
 dns_rr.o: ../../include/vstring.h
 dns_rr.o: dns.h
 dns_rr.o: dns_rr.c
+dns_rr_eq_sa.o: ../../include/check_arg.h
 dns_rr_eq_sa.o: ../../include/msg.h
 dns_rr_eq_sa.o: ../../include/myaddrinfo.h
 dns_rr_eq_sa.o: ../../include/sock_addr.h
@@ -196,6 +199,7 @@ dns_rr_eq_sa.o: ../../include/vstring.h
 dns_rr_eq_sa.o: dns.h
 dns_rr_eq_sa.o: dns_rr_eq_sa.c
 dns_rr_filter.o: ../../include/argv.h
+dns_rr_filter.o: ../../include/check_arg.h
 dns_rr_filter.o: ../../include/dict.h
 dns_rr_filter.o: ../../include/maps.h
 dns_rr_filter.o: ../../include/msg.h
@@ -208,6 +212,7 @@ dns_rr_filter.o: ../../include/vstream.h
 dns_rr_filter.o: ../../include/vstring.h
 dns_rr_filter.o: dns.h
 dns_rr_filter.o: dns_rr_filter.c
+dns_rr_to_pa.o: ../../include/check_arg.h
 dns_rr_to_pa.o: ../../include/msg.h
 dns_rr_to_pa.o: ../../include/myaddrinfo.h
 dns_rr_to_pa.o: ../../include/sock_addr.h
@@ -216,6 +221,7 @@ dns_rr_to_pa.o: ../../include/vbuf.h
 dns_rr_to_pa.o: ../../include/vstring.h
 dns_rr_to_pa.o: dns.h
 dns_rr_to_pa.o: dns_rr_to_pa.c
+dns_rr_to_sa.o: ../../include/check_arg.h
 dns_rr_to_sa.o: ../../include/msg.h
 dns_rr_to_sa.o: ../../include/myaddrinfo.h
 dns_rr_to_sa.o: ../../include/sock_addr.h
@@ -224,6 +230,7 @@ dns_rr_to_sa.o: ../../include/vbuf.h
 dns_rr_to_sa.o: ../../include/vstring.h
 dns_rr_to_sa.o: dns.h
 dns_rr_to_sa.o: dns_rr_to_sa.c
+dns_sa_to_rr.o: ../../include/check_arg.h
 dns_sa_to_rr.o: ../../include/msg.h
 dns_sa_to_rr.o: ../../include/myaddrinfo.h
 dns_sa_to_rr.o: ../../include/sock_addr.h
@@ -232,6 +239,7 @@ dns_sa_to_rr.o: ../../include/vbuf.h
 dns_sa_to_rr.o: ../../include/vstring.h
 dns_sa_to_rr.o: dns.h
 dns_sa_to_rr.o: dns_sa_to_rr.c
+dns_strerror.o: ../../include/check_arg.h
 dns_strerror.o: ../../include/myaddrinfo.h
 dns_strerror.o: ../../include/sock_addr.h
 dns_strerror.o: ../../include/sys_defs.h
@@ -239,6 +247,7 @@ dns_strerror.o: ../../include/vbuf.h
 dns_strerror.o: ../../include/vstring.h
 dns_strerror.o: dns.h
 dns_strerror.o: dns_strerror.c
+dns_strrecord.o: ../../include/check_arg.h
 dns_strrecord.o: ../../include/msg.h
 dns_strrecord.o: ../../include/myaddrinfo.h
 dns_strrecord.o: ../../include/sock_addr.h
@@ -247,6 +256,7 @@ dns_strrecord.o: ../../include/vbuf.h
 dns_strrecord.o: ../../include/vstring.h
 dns_strrecord.o: dns.h
 dns_strrecord.o: dns_strrecord.c
+dns_strtype.o: ../../include/check_arg.h
 dns_strtype.o: ../../include/myaddrinfo.h
 dns_strtype.o: ../../include/sock_addr.h
 dns_strtype.o: ../../include/sys_defs.h
@@ -255,6 +265,7 @@ dns_strtype.o: ../../include/vstring.h
 dns_strtype.o: dns.h
 dns_strtype.o: dns_strtype.c
 test_dns_lookup.o: ../../include/argv.h
+test_dns_lookup.o: ../../include/check_arg.h
 test_dns_lookup.o: ../../include/msg.h
 test_dns_lookup.o: ../../include/msg_vstream.h
 test_dns_lookup.o: ../../include/myaddrinfo.h
index d12ce69ae1c11a98c4dfbcf6b9c06a83c439b8ec..fc46feb28f48513846dbede2d0b4678fb97da067 100644 (file)
@@ -277,8 +277,8 @@ int     main(int argc, char **argv)
     MAIL_VERSION_STAMP_ALLOCATE;
 
     single_server_main(argc, argv, dnsblog_service,
-                      MAIL_SERVER_TIME_TABLE, time_table,
-                      MAIL_SERVER_POST_INIT, post_jail_init,
-                      MAIL_SERVER_UNLIMITED,
+                      MAIL_SERVER_REQ_TIME_TABLE(time_table),
+                      MAIL_SERVER_REQ_POST_INIT(post_jail_init),
+                      MAIL_SERVER_REQ_UNLIMITED,
                       0);
 }
index 31e32b7f713af64612b04d5b16ef953d91f65201..c4f636ef3a0296450ddcf0b38c170e3d2c6c0618 100644 (file)
@@ -71,6 +71,7 @@ error.o: ../../include/dsn_util.h
 error.o: ../../include/flush_clnt.h
 error.o: ../../include/htable.h
 error.o: ../../include/iostuff.h
+error.o: ../../include/mail_conf.h
 error.o: ../../include/mail_proto.h
 error.o: ../../include/mail_queue.h
 error.o: ../../include/mail_server.h
index 26aa0113470794970269904b00d2e2c7690ffbc3..59b2fcc6e3a915d9db07147422a919b37946931d 100644 (file)
@@ -250,6 +250,6 @@ int     main(int argc, char **argv)
     MAIL_VERSION_STAMP_ALLOCATE;
 
     single_server_main(argc, argv, error_service,
-                      MAIL_SERVER_PRE_INIT, pre_init,
+                      MAIL_SERVER_REQ_PRE_INIT(pre_init),
                       0);
 }
index 1f544bdefc7f27186612186591d69f9e88792315..ce0d8f0236d5c319707a699549c9a6ff227f5bf1 100644 (file)
@@ -828,8 +828,8 @@ int     main(int argc, char **argv)
     MAIL_VERSION_STAMP_ALLOCATE;
 
     single_server_main(argc, argv, flush_service,
-                      MAIL_SERVER_TIME_TABLE, time_table,
-                      MAIL_SERVER_PRE_INIT, pre_jail_init,
-                      MAIL_SERVER_UNLIMITED,
+                      MAIL_SERVER_REQ_TIME_TABLE(time_table),
+                      MAIL_SERVER_REQ_PRE_INIT(pre_jail_init),
+                      MAIL_SERVER_REQ_UNLIMITED,
                       0);
 }
index 564a3009a7e9f673df752ac784f2dc49c6da4f45..532abe082d88e48b935ef01393ab7032f864a3ff 100644 (file)
@@ -59,6 +59,7 @@ depend: $(MAKES)
        @$(EXPORT) make -f Makefile.in Makefile 1>&2
 
 # do not edit below this line - it is generated by 'make depend'
+fsstone.o: ../../include/check_arg.h
 fsstone.o: ../../include/mail_version.h
 fsstone.o: ../../include/msg.h
 fsstone.o: ../../include/msg_vstream.h
index ad2082e4aa5057573b9529c60662fb9f44e3fbf3..2f96f25219c1e6ce4aab9834191304b8a7ed7b50 100644 (file)
@@ -708,6 +708,7 @@ anvil_clnt.o: anvil_clnt.c
 anvil_clnt.o: anvil_clnt.h
 anvil_clnt.o: mail_params.h
 anvil_clnt.o: mail_proto.h
+attr_override.o: ../../include/check_arg.h
 attr_override.o: ../../include/msg.h
 attr_override.o: ../../include/stringops.h
 attr_override.o: ../../include/sys_defs.h
@@ -717,6 +718,7 @@ attr_override.o: attr_override.c
 attr_override.o: attr_override.h
 attr_override.o: conv_time.h
 attr_override.o: mail_conf.h
+been_here.o: ../../include/check_arg.h
 been_here.o: ../../include/htable.h
 been_here.o: ../../include/msg.h
 been_here.o: ../../include/mymalloc.h
@@ -792,6 +794,7 @@ canon_addr.o: canon_addr.h
 canon_addr.o: mail_proto.h
 canon_addr.o: rewrite_clnt.h
 cfg_parser.o: ../../include/argv.h
+cfg_parser.o: ../../include/check_arg.h
 cfg_parser.o: ../../include/dict.h
 cfg_parser.o: ../../include/msg.h
 cfg_parser.o: ../../include/myflock.h
@@ -803,12 +806,14 @@ cfg_parser.o: ../../include/vstring.h
 cfg_parser.o: cfg_parser.c
 cfg_parser.o: cfg_parser.h
 cfg_parser.o: mail_conf.h
+cleanup_strerror.o: ../../include/check_arg.h
 cleanup_strerror.o: ../../include/msg.h
 cleanup_strerror.o: ../../include/sys_defs.h
 cleanup_strerror.o: ../../include/vbuf.h
 cleanup_strerror.o: ../../include/vstring.h
 cleanup_strerror.o: cleanup_strerror.c
 cleanup_strerror.o: cleanup_user.h
+cleanup_strflags.o: ../../include/check_arg.h
 cleanup_strflags.o: ../../include/msg.h
 cleanup_strflags.o: ../../include/sys_defs.h
 cleanup_strflags.o: ../../include/vbuf.h
@@ -836,6 +841,7 @@ conv_time.o: ../../include/sys_defs.h
 conv_time.o: conv_time.c
 conv_time.o: conv_time.h
 data_redirect.o: ../../include/argv.h
+data_redirect.o: ../../include/check_arg.h
 data_redirect.o: ../../include/dict.h
 data_redirect.o: ../../include/dict_cdb.h
 data_redirect.o: ../../include/dict_db.h
@@ -856,6 +862,7 @@ data_redirect.o: data_redirect.h
 data_redirect.o: dict_proxy.h
 data_redirect.o: mail_params.h
 db_common.o: ../../include/argv.h
+db_common.o: ../../include/check_arg.h
 db_common.o: ../../include/dict.h
 db_common.o: ../../include/match_list.h
 db_common.o: ../../include/msg.h
@@ -914,6 +921,7 @@ defer.o: rcpt_print.h
 defer.o: recipient_list.h
 defer.o: trace.h
 defer.o: verify.h
+deliver_completed.o: ../../include/check_arg.h
 deliver_completed.o: ../../include/msg.h
 deliver_completed.o: ../../include/sys_defs.h
 deliver_completed.o: ../../include/vbuf.h
@@ -923,6 +931,7 @@ deliver_completed.o: deliver_completed.c
 deliver_completed.o: deliver_completed.h
 deliver_completed.o: rec_type.h
 deliver_completed.o: record.h
+deliver_flock.o: ../../include/check_arg.h
 deliver_flock.o: ../../include/iostuff.h
 deliver_flock.o: ../../include/myflock.h
 deliver_flock.o: ../../include/sys_defs.h
@@ -978,6 +987,7 @@ deliver_request.o: mail_queue.h
 deliver_request.o: msg_stats.h
 deliver_request.o: rcpt_buf.h
 deliver_request.o: recipient_list.h
+delivered_hdr.o: ../../include/check_arg.h
 delivered_hdr.o: ../../include/htable.h
 delivered_hdr.o: ../../include/msg.h
 delivered_hdr.o: ../../include/mymalloc.h
@@ -998,6 +1008,7 @@ delivered_hdr.o: rec_type.h
 delivered_hdr.o: record.h
 dict_ldap.o: ../../include/argv.h
 dict_ldap.o: ../../include/binhash.h
+dict_ldap.o: ../../include/check_arg.h
 dict_ldap.o: ../../include/dict.h
 dict_ldap.o: ../../include/match_list.h
 dict_ldap.o: ../../include/msg.h
@@ -1017,6 +1028,7 @@ dict_ldap.o: mail_conf.h
 dict_ldap.o: string_list.h
 dict_memcache.o: ../../include/argv.h
 dict_memcache.o: ../../include/auto_clnt.h
+dict_memcache.o: ../../include/check_arg.h
 dict_memcache.o: ../../include/dict.h
 dict_memcache.o: ../../include/match_list.h
 dict_memcache.o: ../../include/msg.h
@@ -1033,27 +1045,10 @@ dict_memcache.o: dict_memcache.c
 dict_memcache.o: dict_memcache.h
 dict_memcache.o: memcache_proto.h
 dict_memcache.o: string_list.h
-dict_mysql.o: ../../include/argv.h
-dict_mysql.o: ../../include/dict.h
-dict_mysql.o: ../../include/events.h
-dict_mysql.o: ../../include/find_inet.h
-dict_mysql.o: ../../include/match_list.h
-dict_mysql.o: ../../include/msg.h
-dict_mysql.o: ../../include/myflock.h
-dict_mysql.o: ../../include/mymalloc.h
-dict_mysql.o: ../../include/myrand.h
-dict_mysql.o: ../../include/split_at.h
-dict_mysql.o: ../../include/stringops.h
 dict_mysql.o: ../../include/sys_defs.h
-dict_mysql.o: ../../include/vbuf.h
-dict_mysql.o: ../../include/vstream.h
-dict_mysql.o: ../../include/vstring.h
-dict_mysql.o: cfg_parser.h
-dict_mysql.o: db_common.h
 dict_mysql.o: dict_mysql.c
-dict_mysql.o: dict_mysql.h
-dict_mysql.o: string_list.h
 dict_pgsql.o: ../../include/argv.h
+dict_pgsql.o: ../../include/check_arg.h
 dict_pgsql.o: ../../include/dict.h
 dict_pgsql.o: ../../include/events.h
 dict_pgsql.o: ../../include/find_inet.h
@@ -1094,6 +1089,7 @@ dict_proxy.o: dict_proxy.h
 dict_proxy.o: mail_params.h
 dict_proxy.o: mail_proto.h
 dict_sqlite.o: ../../include/argv.h
+dict_sqlite.o: ../../include/check_arg.h
 dict_sqlite.o: ../../include/dict.h
 dict_sqlite.o: ../../include/match_list.h
 dict_sqlite.o: ../../include/msg.h
@@ -1114,6 +1110,7 @@ domain_list.o: ../../include/match_list.h
 domain_list.o: ../../include/sys_defs.h
 domain_list.o: domain_list.c
 domain_list.o: domain_list.h
+dot_lockfile.o: ../../include/check_arg.h
 dot_lockfile.o: ../../include/iostuff.h
 dot_lockfile.o: ../../include/mymalloc.h
 dot_lockfile.o: ../../include/stringops.h
@@ -1124,6 +1121,7 @@ dot_lockfile.o: ../../include/warn_stat.h
 dot_lockfile.o: dot_lockfile.c
 dot_lockfile.o: dot_lockfile.h
 dot_lockfile.o: mail_params.h
+dot_lockfile_as.o: ../../include/check_arg.h
 dot_lockfile_as.o: ../../include/msg.h
 dot_lockfile_as.o: ../../include/set_eugid.h
 dot_lockfile_as.o: ../../include/sys_defs.h
@@ -1152,6 +1150,7 @@ dsn.o: ../../include/mymalloc.h
 dsn.o: ../../include/sys_defs.h
 dsn.o: dsn.c
 dsn.o: dsn.h
+dsn_buf.o: ../../include/check_arg.h
 dsn_buf.o: ../../include/msg.h
 dsn_buf.o: ../../include/mymalloc.h
 dsn_buf.o: ../../include/sys_defs.h
@@ -1161,6 +1160,7 @@ dsn_buf.o: dsn.h
 dsn_buf.o: dsn_buf.c
 dsn_buf.o: dsn_buf.h
 dsn_filter.o: ../../include/argv.h
+dsn_filter.o: ../../include/check_arg.h
 dsn_filter.o: ../../include/dict.h
 dsn_filter.o: ../../include/msg.h
 dsn_filter.o: ../../include/myflock.h
@@ -1174,6 +1174,7 @@ dsn_filter.o: dsn_filter.c
 dsn_filter.o: dsn_filter.h
 dsn_filter.o: dsn_util.h
 dsn_filter.o: maps.h
+dsn_mask.o: ../../include/check_arg.h
 dsn_mask.o: ../../include/msg.h
 dsn_mask.o: ../../include/name_code.h
 dsn_mask.o: ../../include/name_mask.h
@@ -1196,6 +1197,7 @@ dsn_print.o: dsn.h
 dsn_print.o: dsn_print.c
 dsn_print.o: dsn_print.h
 dsn_print.o: mail_proto.h
+dsn_util.o: ../../include/check_arg.h
 dsn_util.o: ../../include/msg.h
 dsn_util.o: ../../include/mymalloc.h
 dsn_util.o: ../../include/stringops.h
@@ -1205,6 +1207,7 @@ dsn_util.o: ../../include/vstring.h
 dsn_util.o: dsn_util.c
 dsn_util.o: dsn_util.h
 dynamicmaps.o: ../../include/argv.h
+dynamicmaps.o: ../../include/check_arg.h
 dynamicmaps.o: ../../include/dict.h
 dynamicmaps.o: ../../include/htable.h
 dynamicmaps.o: ../../include/load_lib.h
@@ -1222,12 +1225,14 @@ dynamicmaps.o: ../../include/vstring_vstream.h
 dynamicmaps.o: dynamicmaps.c
 dynamicmaps.o: dynamicmaps.h
 dynamicmaps.o: mkmap.h
+ehlo_mask.o: ../../include/check_arg.h
 ehlo_mask.o: ../../include/name_mask.h
 ehlo_mask.o: ../../include/sys_defs.h
 ehlo_mask.o: ../../include/vbuf.h
 ehlo_mask.o: ../../include/vstring.h
 ehlo_mask.o: ehlo_mask.c
 ehlo_mask.o: ehlo_mask.h
+ext_prop.o: ../../include/check_arg.h
 ext_prop.o: ../../include/name_mask.h
 ext_prop.o: ../../include/sys_defs.h
 ext_prop.o: ../../include/vbuf.h
@@ -1235,6 +1240,7 @@ ext_prop.o: ../../include/vstring.h
 ext_prop.o: ext_prop.c
 ext_prop.o: ext_prop.h
 ext_prop.o: mail_params.h
+file_id.o: ../../include/check_arg.h
 file_id.o: ../../include/msg.h
 file_id.o: ../../include/sys_defs.h
 file_id.o: ../../include/vbuf.h
@@ -1265,12 +1271,14 @@ flush_clnt.o: mail_flush.h
 flush_clnt.o: mail_params.h
 flush_clnt.o: mail_proto.h
 flush_clnt.o: match_parent_style.h
+fold_addr.o: ../../include/check_arg.h
 fold_addr.o: ../../include/stringops.h
 fold_addr.o: ../../include/sys_defs.h
 fold_addr.o: ../../include/vbuf.h
 fold_addr.o: ../../include/vstring.h
 fold_addr.o: fold_addr.c
 fold_addr.o: fold_addr.h
+haproxy_srvr.o: ../../include/check_arg.h
 haproxy_srvr.o: ../../include/inet_proto.h
 haproxy_srvr.o: ../../include/msg.h
 haproxy_srvr.o: ../../include/myaddrinfo.h
@@ -1283,6 +1291,7 @@ haproxy_srvr.o: ../../include/vstring.h
 haproxy_srvr.o: haproxy_srvr.c
 haproxy_srvr.o: haproxy_srvr.h
 header_body_checks.o: ../../include/argv.h
+header_body_checks.o: ../../include/check_arg.h
 header_body_checks.o: ../../include/dict.h
 header_body_checks.o: ../../include/msg.h
 header_body_checks.o: ../../include/myflock.h
@@ -1301,6 +1310,7 @@ header_body_checks.o: maps.h
 header_body_checks.o: mime_state.h
 header_body_checks.o: rec_type.h
 header_opts.o: ../../include/argv.h
+header_opts.o: ../../include/check_arg.h
 header_opts.o: ../../include/htable.h
 header_opts.o: ../../include/msg.h
 header_opts.o: ../../include/mymalloc.h
@@ -1311,6 +1321,7 @@ header_opts.o: ../../include/vstring.h
 header_opts.o: header_opts.c
 header_opts.o: header_opts.h
 header_opts.o: mail_params.h
+header_token.o: ../../include/check_arg.h
 header_token.o: ../../include/msg.h
 header_token.o: ../../include/sys_defs.h
 header_token.o: ../../include/vbuf.h
@@ -1318,6 +1329,7 @@ header_token.o: ../../include/vstring.h
 header_token.o: header_token.c
 header_token.o: header_token.h
 header_token.o: lex_822.h
+input_transp.o: ../../include/check_arg.h
 input_transp.o: ../../include/msg.h
 input_transp.o: ../../include/name_mask.h
 input_transp.o: ../../include/sys_defs.h
@@ -1364,6 +1376,7 @@ log_adhoc.o: log_adhoc.h
 log_adhoc.o: mail_params.h
 log_adhoc.o: msg_stats.h
 log_adhoc.o: recipient_list.h
+mail_addr.o: ../../include/check_arg.h
 mail_addr.o: ../../include/stringops.h
 mail_addr.o: ../../include/sys_defs.h
 mail_addr.o: ../../include/vbuf.h
@@ -1372,6 +1385,7 @@ mail_addr.o: mail_addr.c
 mail_addr.o: mail_addr.h
 mail_addr.o: mail_params.h
 mail_addr_crunch.o: ../../include/argv.h
+mail_addr_crunch.o: ../../include/check_arg.h
 mail_addr_crunch.o: ../../include/mymalloc.h
 mail_addr_crunch.o: ../../include/sys_defs.h
 mail_addr_crunch.o: ../../include/vbuf.h
@@ -1382,6 +1396,7 @@ mail_addr_crunch.o: mail_addr_crunch.h
 mail_addr_crunch.o: resolve_clnt.h
 mail_addr_crunch.o: tok822.h
 mail_addr_find.o: ../../include/argv.h
+mail_addr_find.o: ../../include/check_arg.h
 mail_addr_find.o: ../../include/dict.h
 mail_addr_find.o: ../../include/msg.h
 mail_addr_find.o: ../../include/myflock.h
@@ -1398,6 +1413,7 @@ mail_addr_find.o: maps.h
 mail_addr_find.o: resolve_local.h
 mail_addr_find.o: strip_addr.h
 mail_addr_map.o: ../../include/argv.h
+mail_addr_map.o: ../../include/check_arg.h
 mail_addr_map.o: ../../include/dict.h
 mail_addr_map.o: ../../include/msg.h
 mail_addr_map.o: ../../include/myflock.h
@@ -1436,6 +1452,7 @@ mail_command_server.o: ../../include/vstring.h
 mail_command_server.o: mail_command_server.c
 mail_command_server.o: mail_proto.h
 mail_conf.o: ../../include/argv.h
+mail_conf.o: ../../include/check_arg.h
 mail_conf.o: ../../include/dict.h
 mail_conf.o: ../../include/msg.h
 mail_conf.o: ../../include/myflock.h
@@ -1451,6 +1468,7 @@ mail_conf.o: mail_conf.c
 mail_conf.o: mail_conf.h
 mail_conf.o: mail_params.h
 mail_conf_bool.o: ../../include/argv.h
+mail_conf_bool.o: ../../include/check_arg.h
 mail_conf_bool.o: ../../include/dict.h
 mail_conf_bool.o: ../../include/msg.h
 mail_conf_bool.o: ../../include/myflock.h
@@ -1461,6 +1479,7 @@ mail_conf_bool.o: ../../include/vstring.h
 mail_conf_bool.o: mail_conf.h
 mail_conf_bool.o: mail_conf_bool.c
 mail_conf_int.o: ../../include/argv.h
+mail_conf_int.o: ../../include/check_arg.h
 mail_conf_int.o: ../../include/dict.h
 mail_conf_int.o: ../../include/msg.h
 mail_conf_int.o: ../../include/myflock.h
@@ -1473,6 +1492,7 @@ mail_conf_int.o: ../../include/vstring.h
 mail_conf_int.o: mail_conf.h
 mail_conf_int.o: mail_conf_int.c
 mail_conf_long.o: ../../include/argv.h
+mail_conf_long.o: ../../include/check_arg.h
 mail_conf_long.o: ../../include/dict.h
 mail_conf_long.o: ../../include/msg.h
 mail_conf_long.o: ../../include/myflock.h
@@ -1485,6 +1505,7 @@ mail_conf_long.o: ../../include/vstring.h
 mail_conf_long.o: mail_conf.h
 mail_conf_long.o: mail_conf_long.c
 mail_conf_nbool.o: ../../include/argv.h
+mail_conf_nbool.o: ../../include/check_arg.h
 mail_conf_nbool.o: ../../include/dict.h
 mail_conf_nbool.o: ../../include/msg.h
 mail_conf_nbool.o: ../../include/myflock.h
@@ -1495,6 +1516,7 @@ mail_conf_nbool.o: ../../include/vstring.h
 mail_conf_nbool.o: mail_conf.h
 mail_conf_nbool.o: mail_conf_nbool.c
 mail_conf_nint.o: ../../include/argv.h
+mail_conf_nint.o: ../../include/check_arg.h
 mail_conf_nint.o: ../../include/dict.h
 mail_conf_nint.o: ../../include/msg.h
 mail_conf_nint.o: ../../include/myflock.h
@@ -1511,6 +1533,7 @@ mail_conf_raw.o: ../../include/mymalloc.h
 mail_conf_raw.o: ../../include/sys_defs.h
 mail_conf_raw.o: mail_conf.h
 mail_conf_raw.o: mail_conf_raw.c
+mail_conf_str.o: ../../include/check_arg.h
 mail_conf_str.o: ../../include/msg.h
 mail_conf_str.o: ../../include/mymalloc.h
 mail_conf_str.o: ../../include/stringops.h
@@ -1520,6 +1543,7 @@ mail_conf_str.o: ../../include/vstring.h
 mail_conf_str.o: mail_conf.h
 mail_conf_str.o: mail_conf_str.c
 mail_conf_time.o: ../../include/argv.h
+mail_conf_time.o: ../../include/check_arg.h
 mail_conf_time.o: ../../include/dict.h
 mail_conf_time.o: ../../include/msg.h
 mail_conf_time.o: ../../include/myflock.h
@@ -1548,6 +1572,7 @@ mail_connect.o: ../../include/vstring.h
 mail_connect.o: mail_connect.c
 mail_connect.o: mail_proto.h
 mail_connect.o: timed_ipc.h
+mail_copy.o: ../../include/check_arg.h
 mail_copy.o: ../../include/htable.h
 mail_copy.o: ../../include/iostuff.h
 mail_copy.o: ../../include/msg.h
@@ -1573,6 +1598,7 @@ mail_copy.o: quote_flags.h
 mail_copy.o: rec_type.h
 mail_copy.o: record.h
 mail_copy.o: sys_exits.h
+mail_date.o: ../../include/check_arg.h
 mail_date.o: ../../include/msg.h
 mail_date.o: ../../include/sys_defs.h
 mail_date.o: ../../include/vbuf.h
@@ -1580,6 +1606,7 @@ mail_date.o: ../../include/vstring.h
 mail_date.o: mail_date.c
 mail_date.o: mail_date.h
 mail_dict.o: ../../include/argv.h
+mail_dict.o: ../../include/check_arg.h
 mail_dict.o: ../../include/dict.h
 mail_dict.o: ../../include/msg.h
 mail_dict.o: ../../include/myflock.h
@@ -1599,6 +1626,7 @@ mail_dict.o: dynamicmaps.h
 mail_dict.o: mail_dict.c
 mail_dict.o: mail_dict.h
 mail_dict.o: mail_params.h
+mail_error.o: ../../include/check_arg.h
 mail_error.o: ../../include/name_mask.h
 mail_error.o: ../../include/sys_defs.h
 mail_error.o: ../../include/vbuf.h
@@ -1619,6 +1647,7 @@ mail_flush.o: mail_flush.c
 mail_flush.o: mail_flush.h
 mail_flush.o: mail_params.h
 mail_flush.o: mail_proto.h
+mail_open_ok.o: ../../include/check_arg.h
 mail_open_ok.o: ../../include/msg.h
 mail_open_ok.o: ../../include/sys_defs.h
 mail_open_ok.o: ../../include/vbuf.h
@@ -1664,6 +1693,7 @@ mail_params.o: own_inet_addr.h
 mail_params.o: recipient_list.h
 mail_params.o: verp_sender.h
 mail_parm_split.o: ../../include/argv.h
+mail_parm_split.o: ../../include/check_arg.h
 mail_parm_split.o: ../../include/msg.h
 mail_parm_split.o: ../../include/mymalloc.h
 mail_parm_split.o: ../../include/stringops.h
@@ -1687,6 +1717,7 @@ mail_pathname.o: ../../include/vstring.h
 mail_pathname.o: mail_pathname.c
 mail_pathname.o: mail_proto.h
 mail_queue.o: ../../include/argv.h
+mail_queue.o: ../../include/check_arg.h
 mail_queue.o: ../../include/dir_forest.h
 mail_queue.o: ../../include/make_dirs.h
 mail_queue.o: ../../include/msg.h
@@ -1703,6 +1734,7 @@ mail_queue.o: mail_params.h
 mail_queue.o: mail_queue.c
 mail_queue.o: mail_queue.h
 mail_queue.o: safe_ultostr.h
+mail_run.o: ../../include/check_arg.h
 mail_run.o: ../../include/msg.h
 mail_run.o: ../../include/mymalloc.h
 mail_run.o: ../../include/stringops.h
@@ -1739,6 +1771,7 @@ mail_stream.o: mail_queue.h
 mail_stream.o: mail_stream.c
 mail_stream.o: mail_stream.h
 mail_stream.o: opened.h
+mail_task.o: ../../include/check_arg.h
 mail_task.o: ../../include/safe.h
 mail_task.o: ../../include/sys_defs.h
 mail_task.o: ../../include/vbuf.h
@@ -1763,6 +1796,7 @@ mail_trigger.o: ../../include/warn_stat.h
 mail_trigger.o: mail_params.h
 mail_trigger.o: mail_proto.h
 mail_trigger.o: mail_trigger.c
+mail_version.o: ../../include/check_arg.h
 mail_version.o: ../../include/msg.h
 mail_version.o: ../../include/mymalloc.h
 mail_version.o: ../../include/split_at.h
@@ -1773,6 +1807,7 @@ mail_version.o: ../../include/vstring.h
 mail_version.o: mail_version.c
 mail_version.o: mail_version.h
 maps.o: ../../include/argv.h
+maps.o: ../../include/check_arg.h
 maps.o: ../../include/dict.h
 maps.o: ../../include/msg.h
 maps.o: ../../include/myflock.h
@@ -1813,6 +1848,7 @@ match_parent_style.o: match_parent_style.c
 match_parent_style.o: match_parent_style.h
 match_parent_style.o: string_list.h
 match_service.o: ../../include/argv.h
+match_service.o: ../../include/check_arg.h
 match_service.o: ../../include/msg.h
 match_service.o: ../../include/mymalloc.h
 match_service.o: ../../include/stringops.h
@@ -1822,6 +1858,7 @@ match_service.o: ../../include/vstring.h
 match_service.o: match_service.c
 match_service.o: match_service.h
 mbox_conf.o: ../../include/argv.h
+mbox_conf.o: ../../include/check_arg.h
 mbox_conf.o: ../../include/name_mask.h
 mbox_conf.o: ../../include/sys_defs.h
 mbox_conf.o: ../../include/vbuf.h
@@ -1830,6 +1867,7 @@ mbox_conf.o: mail_params.h
 mbox_conf.o: mbox_conf.c
 mbox_conf.o: mbox_conf.h
 mbox_open.o: ../../include/argv.h
+mbox_open.o: ../../include/check_arg.h
 mbox_open.o: ../../include/iostuff.h
 mbox_open.o: ../../include/msg.h
 mbox_open.o: ../../include/myflock.h
@@ -1847,6 +1885,7 @@ mbox_open.o: dsn_buf.h
 mbox_open.o: mbox_conf.h
 mbox_open.o: mbox_open.c
 mbox_open.o: mbox_open.h
+memcache_proto.o: ../../include/check_arg.h
 memcache_proto.o: ../../include/compat_va_copy.h
 memcache_proto.o: ../../include/msg.h
 memcache_proto.o: ../../include/sys_defs.h
@@ -1856,6 +1895,7 @@ memcache_proto.o: ../../include/vstring.h
 memcache_proto.o: ../../include/vstring_vstream.h
 memcache_proto.o: memcache_proto.c
 memcache_proto.o: memcache_proto.h
+mime_state.o: ../../include/check_arg.h
 mime_state.o: ../../include/msg.h
 mime_state.o: ../../include/mymalloc.h
 mime_state.o: ../../include/sys_defs.h
@@ -1870,6 +1910,7 @@ mime_state.o: mime_state.c
 mime_state.o: mime_state.h
 mime_state.o: rec_type.h
 mkmap_cdb.o: ../../include/argv.h
+mkmap_cdb.o: ../../include/check_arg.h
 mkmap_cdb.o: ../../include/dict.h
 mkmap_cdb.o: ../../include/dict_cdb.h
 mkmap_cdb.o: ../../include/myflock.h
@@ -1881,6 +1922,7 @@ mkmap_cdb.o: ../../include/vstring.h
 mkmap_cdb.o: mkmap.h
 mkmap_cdb.o: mkmap_cdb.c
 mkmap_db.o: ../../include/argv.h
+mkmap_db.o: ../../include/check_arg.h
 mkmap_db.o: ../../include/dict.h
 mkmap_db.o: ../../include/dict_db.h
 mkmap_db.o: ../../include/msg.h
@@ -1896,6 +1938,7 @@ mkmap_db.o: mail_params.h
 mkmap_db.o: mkmap.h
 mkmap_db.o: mkmap_db.c
 mkmap_dbm.o: ../../include/argv.h
+mkmap_dbm.o: ../../include/check_arg.h
 mkmap_dbm.o: ../../include/dict.h
 mkmap_dbm.o: ../../include/dict_dbm.h
 mkmap_dbm.o: ../../include/msg.h
@@ -1909,6 +1952,7 @@ mkmap_dbm.o: ../../include/vstring.h
 mkmap_dbm.o: mkmap.h
 mkmap_dbm.o: mkmap_dbm.c
 mkmap_fail.o: ../../include/argv.h
+mkmap_fail.o: ../../include/check_arg.h
 mkmap_fail.o: ../../include/dict.h
 mkmap_fail.o: ../../include/dict_fail.h
 mkmap_fail.o: ../../include/myflock.h
@@ -1920,6 +1964,7 @@ mkmap_fail.o: ../../include/vstring.h
 mkmap_fail.o: mkmap.h
 mkmap_fail.o: mkmap_fail.c
 mkmap_lmdb.o: ../../include/argv.h
+mkmap_lmdb.o: ../../include/check_arg.h
 mkmap_lmdb.o: ../../include/dict.h
 mkmap_lmdb.o: ../../include/dict_lmdb.h
 mkmap_lmdb.o: ../../include/msg.h
@@ -1936,6 +1981,7 @@ mkmap_lmdb.o: mail_params.h
 mkmap_lmdb.o: mkmap.h
 mkmap_lmdb.o: mkmap_lmdb.c
 mkmap_open.o: ../../include/argv.h
+mkmap_open.o: ../../include/check_arg.h
 mkmap_open.o: ../../include/dict.h
 mkmap_open.o: ../../include/dict_cdb.h
 mkmap_open.o: ../../include/dict_db.h
@@ -1956,6 +2002,7 @@ mkmap_open.o: dict_proxy.h
 mkmap_open.o: mkmap.h
 mkmap_open.o: mkmap_open.c
 mkmap_proxy.o: ../../include/argv.h
+mkmap_proxy.o: ../../include/check_arg.h
 mkmap_proxy.o: ../../include/dict.h
 mkmap_proxy.o: ../../include/myflock.h
 mkmap_proxy.o: ../../include/mymalloc.h
@@ -1967,6 +2014,7 @@ mkmap_proxy.o: dict_proxy.h
 mkmap_proxy.o: mkmap.h
 mkmap_proxy.o: mkmap_proxy.c
 mkmap_sdbm.o: ../../include/argv.h
+mkmap_sdbm.o: ../../include/check_arg.h
 mkmap_sdbm.o: ../../include/dict.h
 mkmap_sdbm.o: ../../include/dict_sdbm.h
 mkmap_sdbm.o: ../../include/msg.h
@@ -2007,6 +2055,7 @@ msg_stats_scan.o: mail_proto.h
 msg_stats_scan.o: msg_stats.h
 msg_stats_scan.o: msg_stats_scan.c
 mynetworks.o: ../../include/argv.h
+mynetworks.o: ../../include/check_arg.h
 mynetworks.o: ../../include/inet_addr_list.h
 mynetworks.o: ../../include/inet_proto.h
 mynetworks.o: ../../include/mask_addr.h
@@ -2035,18 +2084,21 @@ namadr_list.o: ../../include/match_list.h
 namadr_list.o: ../../include/sys_defs.h
 namadr_list.o: namadr_list.c
 namadr_list.o: namadr_list.h
+off_cvt.o: ../../include/check_arg.h
 off_cvt.o: ../../include/msg.h
 off_cvt.o: ../../include/sys_defs.h
 off_cvt.o: ../../include/vbuf.h
 off_cvt.o: ../../include/vstring.h
 off_cvt.o: off_cvt.c
 off_cvt.o: off_cvt.h
+opened.o: ../../include/check_arg.h
 opened.o: ../../include/msg.h
 opened.o: ../../include/sys_defs.h
 opened.o: ../../include/vbuf.h
 opened.o: ../../include/vstring.h
 opened.o: opened.c
 opened.o: opened.h
+own_inet_addr.o: ../../include/check_arg.h
 own_inet_addr.o: ../../include/inet_addr_host.h
 own_inet_addr.o: ../../include/inet_addr_list.h
 own_inet_addr.o: ../../include/inet_addr_local.h
@@ -2063,6 +2115,7 @@ own_inet_addr.o: mail_params.h
 own_inet_addr.o: own_inet_addr.c
 own_inet_addr.o: own_inet_addr.h
 pipe_command.o: ../../include/argv.h
+pipe_command.o: ../../include/check_arg.h
 pipe_command.o: ../../include/chroot_uid.h
 pipe_command.o: ../../include/clean_env.h
 pipe_command.o: ../../include/exec_command.h
@@ -2107,12 +2160,14 @@ post_mail.o: post_mail.h
 post_mail.o: rec_type.h
 post_mail.o: record.h
 post_mail.o: smtputf8.h
+quote_821_local.o: ../../include/check_arg.h
 quote_821_local.o: ../../include/sys_defs.h
 quote_821_local.o: ../../include/vbuf.h
 quote_821_local.o: ../../include/vstring.h
 quote_821_local.o: quote_821_local.c
 quote_821_local.o: quote_821_local.h
 quote_821_local.o: quote_flags.h
+quote_822_local.o: ../../include/check_arg.h
 quote_822_local.o: ../../include/sys_defs.h
 quote_822_local.o: ../../include/vbuf.h
 quote_822_local.o: ../../include/vstring.h
@@ -2147,6 +2202,7 @@ rcpt_print.o: mail_proto.h
 rcpt_print.o: rcpt_print.c
 rcpt_print.o: rcpt_print.h
 rcpt_print.o: recipient_list.h
+rec2stream.o: ../../include/check_arg.h
 rec2stream.o: ../../include/sys_defs.h
 rec2stream.o: ../../include/vbuf.h
 rec2stream.o: ../../include/vstream.h
@@ -2169,6 +2225,7 @@ rec_attr_map.o: mail_proto.h
 rec_attr_map.o: rec_attr_map.c
 rec_attr_map.o: rec_attr_map.h
 rec_attr_map.o: rec_type.h
+rec_streamlf.o: ../../include/check_arg.h
 rec_streamlf.o: ../../include/sys_defs.h
 rec_streamlf.o: ../../include/vbuf.h
 rec_streamlf.o: ../../include/vstream.h
@@ -2179,6 +2236,7 @@ rec_streamlf.o: rec_type.h
 rec_streamlf.o: record.h
 rec_type.o: rec_type.c
 rec_type.o: rec_type.h
+recdump.o: ../../include/check_arg.h
 recdump.o: ../../include/msg_vstream.h
 recdump.o: ../../include/sys_defs.h
 recdump.o: ../../include/vbuf.h
@@ -2193,6 +2251,7 @@ recipient_list.o: ../../include/mymalloc.h
 recipient_list.o: ../../include/sys_defs.h
 recipient_list.o: recipient_list.c
 recipient_list.o: recipient_list.h
+record.o: ../../include/check_arg.h
 record.o: ../../include/msg.h
 record.o: ../../include/mymalloc.h
 record.o: ../../include/stringops.h
@@ -2204,6 +2263,7 @@ record.o: off_cvt.h
 record.o: rec_type.h
 record.o: record.c
 record.o: record.h
+remove.o: ../../include/check_arg.h
 remove.o: ../../include/sys_defs.h
 remove.o: ../../include/vbuf.h
 remove.o: ../../include/vstring.h
@@ -2229,6 +2289,7 @@ resolve_clnt.o: mail_proto.h
 resolve_clnt.o: resolve_clnt.c
 resolve_clnt.o: resolve_clnt.h
 resolve_local.o: ../../include/argv.h
+resolve_local.o: ../../include/check_arg.h
 resolve_local.o: ../../include/dict.h
 resolve_local.o: ../../include/inet_addr_list.h
 resolve_local.o: ../../include/match_list.h
@@ -2267,6 +2328,7 @@ rewrite_clnt.o: quote_822_local.h
 rewrite_clnt.o: quote_flags.h
 rewrite_clnt.o: rewrite_clnt.c
 rewrite_clnt.o: rewrite_clnt.h
+safe_ultostr.o: ../../include/check_arg.h
 safe_ultostr.o: ../../include/msg.h
 safe_ultostr.o: ../../include/mymalloc.h
 safe_ultostr.o: ../../include/sys_defs.h
@@ -2275,6 +2337,7 @@ safe_ultostr.o: ../../include/vstring.h
 safe_ultostr.o: safe_ultostr.c
 safe_ultostr.o: safe_ultostr.h
 scache.o: ../../include/argv.h
+scache.o: ../../include/check_arg.h
 scache.o: ../../include/events.h
 scache.o: ../../include/msg.h
 scache.o: ../../include/sys_defs.h
@@ -2301,6 +2364,7 @@ scache_clnt.o: mail_params.h
 scache_clnt.o: mail_proto.h
 scache_clnt.o: scache.h
 scache_clnt.o: scache_clnt.c
+scache_multi.o: ../../include/check_arg.h
 scache_multi.o: ../../include/events.h
 scache_multi.o: ../../include/htable.h
 scache_multi.o: ../../include/msg.h
@@ -2311,6 +2375,7 @@ scache_multi.o: ../../include/vbuf.h
 scache_multi.o: ../../include/vstring.h
 scache_multi.o: scache.h
 scache_multi.o: scache_multi.c
+scache_single.o: ../../include/check_arg.h
 scache_single.o: ../../include/events.h
 scache_single.o: ../../include/msg.h
 scache_single.o: ../../include/mymalloc.h
@@ -2346,6 +2411,7 @@ sent.o: sent.h
 sent.o: trace.h
 sent.o: verify.h
 server_acl.o: ../../include/argv.h
+server_acl.o: ../../include/check_arg.h
 server_acl.o: ../../include/dict.h
 server_acl.o: ../../include/match_list.h
 server_acl.o: ../../include/msg.h
@@ -2362,6 +2428,7 @@ server_acl.o: match_parent_style.h
 server_acl.o: mynetworks.h
 server_acl.o: server_acl.c
 server_acl.o: server_acl.h
+smtp_reply_footer.o: ../../include/check_arg.h
 smtp_reply_footer.o: ../../include/mac_expand.h
 smtp_reply_footer.o: ../../include/mac_parse.h
 smtp_reply_footer.o: ../../include/msg.h
@@ -2371,6 +2438,7 @@ smtp_reply_footer.o: ../../include/vstring.h
 smtp_reply_footer.o: dsn_util.h
 smtp_reply_footer.o: smtp_reply_footer.c
 smtp_reply_footer.o: smtp_reply_footer.h
+smtp_stream.o: ../../include/check_arg.h
 smtp_stream.o: ../../include/iostuff.h
 smtp_stream.o: ../../include/msg.h
 smtp_stream.o: ../../include/sys_defs.h
@@ -2403,6 +2471,7 @@ split_addr.o: mail_addr.h
 split_addr.o: mail_params.h
 split_addr.o: split_addr.c
 split_addr.o: split_addr.h
+stream2rec.o: ../../include/check_arg.h
 stream2rec.o: ../../include/sys_defs.h
 stream2rec.o: ../../include/vbuf.h
 stream2rec.o: ../../include/vstream.h
@@ -2421,12 +2490,14 @@ strip_addr.o: ../../include/sys_defs.h
 strip_addr.o: split_addr.h
 strip_addr.o: strip_addr.c
 strip_addr.o: strip_addr.h
+sys_exits.o: ../../include/check_arg.h
 sys_exits.o: ../../include/msg.h
 sys_exits.o: ../../include/sys_defs.h
 sys_exits.o: ../../include/vbuf.h
 sys_exits.o: ../../include/vstring.h
 sys_exits.o: sys_exits.c
 sys_exits.o: sys_exits.h
+timed_ipc.o: ../../include/check_arg.h
 timed_ipc.o: ../../include/msg.h
 timed_ipc.o: ../../include/sys_defs.h
 timed_ipc.o: ../../include/vbuf.h
@@ -2434,12 +2505,14 @@ timed_ipc.o: ../../include/vstream.h
 timed_ipc.o: mail_params.h
 timed_ipc.o: timed_ipc.c
 timed_ipc.o: timed_ipc.h
+tok822_find.o: ../../include/check_arg.h
 tok822_find.o: ../../include/sys_defs.h
 tok822_find.o: ../../include/vbuf.h
 tok822_find.o: ../../include/vstring.h
 tok822_find.o: resolve_clnt.h
 tok822_find.o: tok822.h
 tok822_find.o: tok822_find.c
+tok822_node.o: ../../include/check_arg.h
 tok822_node.o: ../../include/mymalloc.h
 tok822_node.o: ../../include/sys_defs.h
 tok822_node.o: ../../include/vbuf.h
@@ -2447,6 +2520,7 @@ tok822_node.o: ../../include/vstring.h
 tok822_node.o: resolve_clnt.h
 tok822_node.o: tok822.h
 tok822_node.o: tok822_node.c
+tok822_parse.o: ../../include/check_arg.h
 tok822_parse.o: ../../include/msg.h
 tok822_parse.o: ../../include/stringops.h
 tok822_parse.o: ../../include/sys_defs.h
@@ -2458,6 +2532,7 @@ tok822_parse.o: quote_flags.h
 tok822_parse.o: resolve_clnt.h
 tok822_parse.o: tok822.h
 tok822_parse.o: tok822_parse.c
+tok822_resolve.o: ../../include/check_arg.h
 tok822_resolve.o: ../../include/msg.h
 tok822_resolve.o: ../../include/sys_defs.h
 tok822_resolve.o: ../../include/vbuf.h
@@ -2481,6 +2556,7 @@ tok822_rewrite.o: resolve_clnt.h
 tok822_rewrite.o: rewrite_clnt.h
 tok822_rewrite.o: tok822.h
 tok822_rewrite.o: tok822_rewrite.c
+tok822_tree.o: ../../include/check_arg.h
 tok822_tree.o: ../../include/mymalloc.h
 tok822_tree.o: ../../include/sys_defs.h
 tok822_tree.o: ../../include/vbuf.h
@@ -2513,6 +2589,7 @@ trace.o: recipient_list.h
 trace.o: trace.c
 trace.o: trace.h
 user_acl.o: ../../include/argv.h
+user_acl.o: ../../include/check_arg.h
 user_acl.o: ../../include/dict.h
 user_acl.o: ../../include/dict_static.h
 user_acl.o: ../../include/match_list.h
@@ -2525,6 +2602,7 @@ user_acl.o: mypwd.h
 user_acl.o: string_list.h
 user_acl.o: user_acl.c
 user_acl.o: user_acl.h
+uxtext.o: ../../include/check_arg.h
 uxtext.o: ../../include/msg.h
 uxtext.o: ../../include/sys_defs.h
 uxtext.o: ../../include/vbuf.h
@@ -2596,6 +2674,7 @@ verify_sender_addr.o: rewrite_clnt.h
 verify_sender_addr.o: safe_ultostr.h
 verify_sender_addr.o: verify_sender_addr.c
 verify_sender_addr.o: verify_sender_addr.h
+verp_sender.o: ../../include/check_arg.h
 verp_sender.o: ../../include/sys_defs.h
 verp_sender.o: ../../include/vbuf.h
 verp_sender.o: ../../include/vstring.h
@@ -2610,6 +2689,7 @@ wildcard_inet_addr.o: ../../include/myaddrinfo.h
 wildcard_inet_addr.o: ../../include/sys_defs.h
 wildcard_inet_addr.o: wildcard_inet_addr.c
 wildcard_inet_addr.o: wildcard_inet_addr.h
+xtext.o: ../../include/check_arg.h
 xtext.o: ../../include/msg.h
 xtext.o: ../../include/sys_defs.h
 xtext.o: ../../include/vbuf.h
index c5bd616d8f0005ccc1e4f9a97183ce48b0e78aff..73455d4066900e3313e39b5a81da0b8a6e58aa79 100644 (file)
@@ -6,7 +6,7 @@
 /* SYNOPSIS
 /*     #include <attr_override.h>
 /*
-/*     void    attr_override(bp, delimiters, parens, ... ATTR_OVER_END);
+/*     void    attr_override(bp, delimiters, parens, ... ATTR_OVER_REQ_END);
 /*     char    *bp;
 /*     const char *delimiters;
 /*     const char *parens;
 /*     See mystrtok(3) for description. Typical values are
 /*     CHARS_COMMA_SP and CHARS_BRACE, respectively.
 /* .PP
-/*     The parens argument is followed by a list of (key, value)
-/*     argument pairs. Each key may appear only once.  The list
-/*     must be terminated with ATTR_OVER_END.  The following
-/*     describes the keys and the expected values.
-/* .IP "ATTR_OVER_STR_TABLE, const ATTR_OVER_STR *
-/*     The second argument specifies a null-terminated table with
+/*     The parens argument is followed by a list of macros
+/*     with arguments. Each macro may appear only once.  The list
+/*     must be terminated with ATTR_OVER_REQ_END which has no argument.
+/*     The following describes the expected values.
+/* .IP "ATTR_OVER_REQ_STR_TABLE(const ATTR_OVER_STR *)
+/*     The macro argument specifies a null-terminated table with
 /*     attribute names, assignment targets, and range limits which
 /*     should be the same as for the corresponding main.cf parameters.
-/* .IP "ATTR_OVER_TIME_TABLE, const ATTR_OVER_TIME *
-/*     The second argument specifies a null-terminated table with
+/* .IP "ATTR_OVER_REQ_TIME_TABLE(const ATTR_OVER_TIME *)
+/*     The macro argument specifies a null-terminated table with
 /*     attribute names, their default time units (leading digits
 /*     are skipped), assignment targets, and range limits which
 /*     should be the same as for the corresponding main.cf parameters.
-/* .IP "ATTR_OVER_INT_TABLE, const ATTR_OVER_INT *
-/*     The second argument specifies a null-terminated table with
+/* .IP "ATTR_OVER_REQ_INT_TABLE(const ATTR_OVER_INT *)
+/*     The macro argument specifies a null-terminated table with
 /*     attribute names, assignment targets, and range limits which
 /*     should be the same as for the corresponding main.cf parameters.
 /* SEE ALSO
index 6b7828dee952c70d0b936156fb00a6992a8ca793..575e841b057738c952d939a7f6731212ef3c5bd4 100644 (file)
@@ -14,6 +14,8 @@
  /*
   * External interface.
   */
+#include <check_arg.h>
+
 extern void attr_override(char *, const char *, const char *,...);
 
 typedef struct {
@@ -38,11 +40,22 @@ typedef struct {
     int     max;
 } ATTR_OVER_INT;
 
+/* Type-unchecked API, internal use only. */
 #define ATTR_OVER_END          0
 #define ATTR_OVER_STR_TABLE    1
 #define ATTR_OVER_TIME_TABLE   2
 #define ATTR_OVER_INT_TABLE    3
 
+/* Type-checked API, external use only. */
+#define ATTR_OVER_REQ_END              0
+#define ATTR_OVER_REQ_STR_TABLE(v)     ATTR_OVER_STR_TABLE, CHECK_CPTR(ATTR_OVER, ATTR_OVER_STR, (v))
+#define ATTR_OVER_REQ_TIME_TABLE(v)    ATTR_OVER_TIME_TABLE, CHECK_CPTR(ATTR_OVER, ATTR_OVER_TIME, (v))
+#define ATTR_OVER_REQ_INT_TABLE(v)     ATTR_OVER_INT_TABLE, CHECK_CPTR(ATTR_OVER, ATTR_OVER_INT, (v))
+
+CHECK_CPTR_HELPER_DCL(ATTR_OVER, ATTR_OVER_TIME);
+CHECK_CPTR_HELPER_DCL(ATTR_OVER, ATTR_OVER_STR);
+CHECK_CPTR_HELPER_DCL(ATTR_OVER, ATTR_OVER_INT);
+
 /* LICENSE
 /* .ad
 /* .fi
index 8485be17f45a47cb61343d56cffa8587dbd171da..b45342e0cfe671b84488f74e5faa39986d8b2239 100644 (file)
@@ -96,7 +96,7 @@ int     dsn_ret_code(const char *str)
 
 const char *dsn_ret_str(int code)
 {
-    const char *cp ;
+    const char *cp;
 
     if ((cp = str_name_code(dsn_ret_table, code)) == 0)
        msg_panic("dsn_ret_str: unknown code %d", code);
index a8ef96d1364785fd7fb590013163c3ada126c610..7188f15a95510b0fd33b674268a04f5a1785014f 100644 (file)
@@ -94,8 +94,8 @@ VSTREAM *mail_connect(const char *class, const char *name, int block_mode)
        timed_ipc_setup(stream);
        sock_name = concatenate(path, " socket", (char *) 0);
        vstream_control(stream,
-                       VSTREAM_CTL_PATH, sock_name,
-                       VSTREAM_CTL_END);
+                       VSTREAM_SCTL_PATH(sock_name),
+                       VSTREAM_SCTL_END);
        myfree(sock_name);
     }
     myfree(path);
index 6cdfa24822c7f7dfe7a12b5f2e1f9cc582c78b82..3516aa9b2b9d0013dd244b1477f70e66d208fc36 100644 (file)
@@ -192,7 +192,7 @@ const char *mail_queue_dir(VSTRING *buf, const char *queue_name,
                queue_id = STR(usec_buf);
            }
            vstring_strcat(buf,
-                      dir_forest(hash_buf, queue_id, var_hash_queue_depth));
+                     dir_forest(hash_buf, queue_id, var_hash_queue_depth));
            break;
        }
     }
@@ -415,7 +415,7 @@ VSTREAM *mail_queue_enter(const char *queue_name, mode_t mode,
     }
 
     stream = vstream_fdopen(fd, O_RDWR);
-    vstream_control(stream, VSTREAM_CTL_PATH, STR(path_buf), VSTREAM_CTL_END);
+    vstream_control(stream, VSTREAM_SCTL_PATH(STR(path_buf)), VSTREAM_SCTL_END);
     return (stream);
 }
 
index f760636ee40e4dbb1498497ce6216da1194c0102..d5d551762df32f28da82ed62ab256455963e2537 100644 (file)
 /*     mail_stream_ctl() selectively overrides information that
 /*     was specified with mail_stream_file(); none of the attributes
 /*     are applicable for other mail stream types.  The arguments
-/*     are a list of (operation, value) pairs, terminated with
-/*     MAIL_STREAM_CTL_END.  The following lists the operation
-/*     codes and the types of the corresponding value arguments.
-/* .IP "MAIL_STREAM_CTL_QUEUE (char *)"
+/*     are a list macros with arguments, terminated with
+/*     MAIL_STREAM_SCTL_END which has none.  The following lists
+/*     the macros and the types of the corresponding arguments.
+/* .IP "MAIL_STREAM_SCTL_QUEUE(const char *)"
 /*     The argument specifies an alternate destination queue. The
 /*     queue file is moved to the specified queue before the call
 /*     returns. Failure to rename the queue file results in a fatal
 /*     error.
-/* .IP "MAIL_STREAM_CTL_CLASS (char *)"
+/* .IP "MAIL_STREAM_SCTL_CLASS(const char *)"
 /*     The argument specifies an alternate trigger class.
-/* .IP "MAIL_STREAM_CTL_SERVICE (char *)"
+/* .IP "MAIL_STREAM_SCTL_SERVICE(const char *)"
 /*     The argument specifies an alternate trigger service.
-/* .IP "MAIL_STREAM_CTL_MODE (int)"
+/* .IP "MAIL_STREAM_SCTL_MODE(int)"
 /*     The argument specifies alternate permissions that override
 /*     the permissions specified with mail_stream_file().
-/* .IP "MAIL_STREAM_CTL_DELAY (int)"
+/* .IP "MAIL_STREAM_SCTL_DELAY(int)"
 /*     Attempt to postpone initial delivery by advancing the queue
 /*     file modification time stamp by this amount.  This has
 /*     effect only within the deferred mail queue.
@@ -481,16 +481,16 @@ MAIL_STREAM *mail_stream_command(const char *command)
      */
     export_env = mail_parm_split(VAR_EXPORT_ENVIRON, var_export_environ);
     while ((stream = vstream_popen(O_RDWR,
-                                  VSTREAM_POPEN_COMMAND, command,
-                                  VSTREAM_POPEN_EXPORT, export_env->argv,
-                                  VSTREAM_POPEN_END)) == 0) {
+                                  VSTREAM_SPOPEN_COMMAND(command),
+                                  VSTREAM_SPOPEN_EXPORT(export_env->argv),
+                                  VSTREAM_SPOPEN_END)) == 0) {
        msg_warn("fork: %m");
        sleep(10);
     }
     argv_free(export_env);
     vstream_control(stream,
-                   VSTREAM_CTL_PATH, command,
-                   VSTREAM_CTL_END);
+                   VSTREAM_SCTL_PATH(command),
+                   VSTREAM_SCTL_END);
 
     if (attr_scan(stream, ATTR_FLAG_MISSING,
                  RECV_ATTR_STR(MAIL_ATTR_QUEUEID, id_buf), 0) != 1) {
@@ -599,8 +599,8 @@ void    mail_stream_ctl(MAIL_STREAM *info, int op,...)
 
        (void) mail_queue_path(new_path, new_queue, info->id);
        info->queue = mystrdup(new_queue);
-       vstream_control(info->stream, VSTREAM_CTL_PATH, STR(new_path),
-                       VSTREAM_CTL_END);
+       vstream_control(info->stream, VSTREAM_SCTL_PATH(STR(new_path)),
+                       VSTREAM_SCTL_END);
 
        if (sane_rename(saved_path, STR(new_path)) == 0
            || (mail_queue_mkdirs(STR(new_path)) == 0
index a8e73032e526341a17cdd0737476dd172e460cde..e8169e92eff27298077d22c686f2936ea089273e 100644 (file)
@@ -21,6 +21,7 @@
   */
 #include <vstream.h>
 #include <vstring.h>
+#include <check_arg.h>
 
  /*
   * External interface.
@@ -45,6 +46,7 @@ struct MAIL_STREAM {
     struct timeval ctime;              /* creation time */
 };
 
+/* Legacy type-unchecked API, internal use. */
 #define MAIL_STREAM_CTL_END    0       /* Terminator */
 #define MAIL_STREAM_CTL_QUEUE  1       /* Change queue */
 #define MAIL_STREAM_CTL_CLASS  2       /* Change notification class */
@@ -54,6 +56,19 @@ struct MAIL_STREAM {
 #define MAIL_STREAM_CTL_DELAY  5       /* Change final queue file mtime */
 #endif
 
+/* Type-checked API, external use. */
+#define MAIL_STREAM_SCTL_END           MAIL_STREAM_CTL_END
+#define MAIL_STREAM_SCTL_QUEUE(v)      MAIL_STREAM_CTL_QUEUE, CHECK_CPTR(MAIL_STREAM, char, (v))
+#define MAIL_STREAM_SCTL_CLASS(v)      MAIL_STREAM_CTL_CLASS, CHECK_CPTR(MAIL_STREAM, char, (v))
+#define MAIL_STREAM_SCTL_SERVICE(v)    MAIL_STREAM_CTL_SERVICE, CHECK_CPTR(MAIL_STREAM, char, (v))
+#define MAIL_STREAM_SCTL_MODE(v)       MAIL_STREAM_CTL_MODE, CHECK_VAL(MAIL_STREAM, int, (v))
+#ifdef DELAY_ACTION
+#define MAIL_STREAM_SCTL_DELAY(v)      MAIL_STREAM_CTL_DELAY, CHECK_VAL(MAIL_STREAM, int, (v))
+#endif
+
+CHECK_VAL_HELPER_DCL(MAIL_STREAM, int);
+CHECK_CPTR_HELPER_DCL(MAIL_STREAM, char);
+
 extern MAIL_STREAM *mail_stream_file(const char *, const char *, const char *, int);
 extern MAIL_STREAM *mail_stream_service(const char *, const char *);
 extern MAIL_STREAM *mail_stream_command(const char *);
index 6b29494073aa7b9a42228d20765fd1e5adfa4391..0ac4f4784ef54178923a5b8523212f016f0d74fd 100644 (file)
@@ -20,7 +20,7 @@
   * Patches change both the patchlevel and the release date. Snapshots have no
   * patchlevel; they change the release date only.
   */
-#define MAIL_RELEASE_DATE      "20141217"
+#define MAIL_RELEASE_DATE      "20141224"
 #define MAIL_VERSION_NUMBER    "2.12"
 
 #ifdef SNAPSHOT
index 29c1ffb0d350c5314439d0fc9859047dbb47a5af..cf0c4500bec36d45f2a7500fddab1cc5c10ed0bf 100644 (file)
 /*     a limited portion of command output, among other free text.
 /* .IP key
 /*     Specifies what value will follow. pipe_command() takes a list
-/*     of (key, value) arguments, terminated by PIPE_CMD_END. The
-/*     following is a listing of key codes together with the expected
-/*     value type.
+/*     of macros with arguments, terminated by PIPE_SCMD_END which
+/*     has no argument. The following is a listing of macros and
+/*     expected argument types.
 /* .RS
-/* .IP "PIPE_CMD_COMMAND (char *)"
+/* .IP "PIPE_SCMD_COMMAND(const char *)"
 /*     Specifies the command to execute as a string. The string is
 /*     passed to the shell when it contains shell meta characters
 /*     or when it appears to be a shell built-in command, otherwise
 /*     the command is executed without invoking a shell.
-/*     One of PIPE_CMD_COMMAND or PIPE_CMD_ARGV must be specified.
-/*     See also the PIPE_CMD_SHELL attribute below.
-/* .IP "PIPE_CMD_ARGV (char **)"
+/*     One of PIPE_SCMD_COMMAND or PIPE_SCMD_ARGV must be specified.
+/*     See also the PIPE_SCMD_SHELL attribute below.
+/* .IP "PIPE_SCMD_ARGV(char **)"
 /*     The command is specified as an argument vector. This vector is
 /*     passed without further inspection to the \fIexecvp\fR() routine.
-/*     One of PIPE_CMD_COMMAND or PIPE_CMD_ARGV must be specified.
-/* .IP "PIPE_CMD_CHROOT (char *)"
+/*     One of PIPE_SCMD_COMMAND or PIPE_SCMD_ARGV must be specified.
+/* .IP "PIPE_SCMD_CHROOT(const char *)"
 /*     Root and working directory for command execution. This takes
-/*     effect before PIPE_CMD_CWD. A null pointer means don't
+/*     effect before PIPE_SCMD_CWD. A null pointer means don't
 /*     change root and working directory anyway. Failure to change
 /*     directory causes mail delivery to be deferred.
-/* .IP "PIPE_CMD_CWD (char *)"
+/* .IP "PIPE_SCMD_CWD(const char *)"
 /*     Working directory for command execution, after changing process
-/*     privileges to PIPE_CMD_UID and PIPE_CMD_GID. A null pointer means
+/*     privileges to PIPE_SCMD_UID and PIPE_SCMD_GID. A null pointer means
 /*     don't change directory anyway. Failure to change directory
 /*     causes mail delivery to be deferred.
-/* .IP "PIPE_CMD_ENV (char **)"
+/* .IP "PIPE_SCMD_ENV(char **)"
 /*     Additional environment information, in the form of a null-terminated
 /*     list of name, value, name, value, ... elements. By default only the
 /*     command search path is initialized to _PATH_DEFPATH.
-/* .IP "PIPE_CMD_EXPORT (char **)"
+/* .IP "PIPE_SCMD_EXPORT(char **)"
 /*     Null-terminated array with names of environment parameters
 /*     that can be exported. By default, everything is exported.
-/* .IP "PIPE_CMD_COPY_FLAGS (int)"
+/* .IP "PIPE_SCMD_COPY_FLAGS(int)"
 /*     Flags that are passed on to the \fImail_copy\fR() routine.
 /*     The default flags value is 0 (zero).
-/* .IP "PIPE_CMD_SENDER (char *)"
+/* .IP "PIPE_SCMD_SENDER(const char *)"
 /*     The envelope sender address, which is passed on to the
 /*     \fImail_copy\fR() routine.
-/* .IP "PIPE_CMD_ORIG_RCPT (char *)"
+/* .IP "PIPE_SCMD_ORIG_RCPT(const char *)"
 /*     The original recipient envelope address, which is passed on
 /*     to the \fImail_copy\fR() routine.
-/* .IP "PIPE_CMD_DELIVERED (char *)"
+/* .IP "PIPE_SCMD_DELIVERED(const char *)"
 /*     The recipient envelope address, which is passed on to the
 /*     \fImail_copy\fR() routine.
-/* .IP "PIPE_CMD_EOL (char *)"
+/* .IP "PIPE_SCMD_EOL(const char *)"
 /*     End-of-line delimiter. The default is to use the newline character.
-/* .IP "PIPE_CMD_UID (uid_t)"
+/* .IP "PIPE_SCMD_UID(uid_t)"
 /*     The user ID to execute the command as. The default is
 /*     the user ID corresponding to the \fIdefault_privs\fR
 /*     configuration parameter. The user ID must be non-zero.
-/* .IP "PIPE_CMD_GID (gid_t)"
+/* .IP "PIPE_SCMD_GID(gid_t)"
 /*     The group ID to execute the command as. The default is
 /*     the group ID corresponding to the \fIdefault_privs\fR
 /*     configuration parameter. The group ID must be non-zero.
-/* .IP "PIPE_CMD_TIME_LIMIT (int)"
+/* .IP "PIPE_SCMD_TIME_LIMIT(int)"
 /*     The amount of time the command is allowed to run before it
-/*     is terminated with SIGKILL. A non-negative PIPE_CMD_TIME_LIMIT
+/*     is terminated with SIGKILL. A non-negative PIPE_SCMD_TIME_LIMIT
 /*     value must be specified.
-/* .IP "PIPE_CMD_SHELL (char *)"
+/* .IP "PIPE_SCMD_SHELL(const char *)"
 /*     The shell to use when executing the command specified with
-/*     PIPE_CMD_COMMAND. This shell is invoked regardless of the
+/*     PIPE_SCMD_COMMAND. This shell is invoked regardless of the
 /*     command content.
 /* .RE
 /* DIAGNOSTICS
@@ -307,7 +307,7 @@ static ssize_t pipe_command_write(int fd, void *buf, size_t len,
 
 /* pipe_command_read - read from command with time limit */
 
-static ssize_t pipe_command_read(int fd, void *buf, ssize_t len,
+static ssize_t pipe_command_read(int fd, void *buf, size_t len,
                                         int unused_timeout,
                                         void *unused_context)
 {
@@ -572,11 +572,11 @@ int     pipe_command(VSTREAM *src, DSN_BUF *why,...)
         * timeouts on all I/O from and to it.
         */
        vstream_control(cmd_in_stream,
-                       VSTREAM_CTL_WRITE_FN, pipe_command_write,
-                       VSTREAM_CTL_END);
+                       VSTREAM_SCTL_WRITE_FN(pipe_command_write),
+                       VSTREAM_SCTL_END);
        vstream_control(cmd_out_stream,
-                       VSTREAM_CTL_READ_FN, pipe_command_read,
-                       VSTREAM_CTL_END);
+                       VSTREAM_SCTL_READ_FN(pipe_command_read),
+                       VSTREAM_SCTL_END);
        pipe_command_timeout = 0;
 
        /*
index 339ac5ec015f4900ba146e6cc2eb1c4c439c167c..02cac18e313bccba2ef485f64b6f2317907c4a50 100644 (file)
@@ -16,6 +16,7 @@
   */
 #include <vstream.h>
 #include <vstring.h>
+#include <check_arg.h>
 
  /*
   * Global library.
 #include <dsn_buf.h>
 
  /*
-  * Request arguments.
+  * Legacy API: type-unchecked arguments, internal use.
   */
 #define PIPE_CMD_END           0       /* terminator */
 #define PIPE_CMD_COMMAND       1       /* command is string */
-#define PIPE_CMD_ARGV          2       /* command is array */
+#define PIPE_CMD_ARGV  2               /* command is array */
 #define PIPE_CMD_COPY_FLAGS    3       /* mail_copy() flags */
-#define PIPE_CMD_SENDER                4       /* mail_copy() sender */
+#define PIPE_CMD_SENDER        4               /* mail_copy() sender */
 #define PIPE_CMD_DELIVERED     5       /* mail_copy() recipient */
 #define PIPE_CMD_UID           6       /* privileges */
 #define PIPE_CMD_GID           7       /* privileges */
 #define PIPE_CMD_TIME_LIMIT    8       /* time limit */
 #define PIPE_CMD_ENV           9       /* extra environment */
-#define PIPE_CMD_SHELL         10      /* alternative shell */
+#define PIPE_CMD_SHELL 10              /* alternative shell */
 #define PIPE_CMD_EOL           11      /* record delimiter */
-#define PIPE_CMD_EXPORT                12      /* exportable environment */
+#define PIPE_CMD_EXPORT        12              /* exportable environment */
 #define PIPE_CMD_ORIG_RCPT     13      /* mail_copy() original recipient */
 #define PIPE_CMD_CWD           14      /* working directory */
-#define PIPE_CMD_CHROOT                15      /* chroot() before exec() */
+#define PIPE_CMD_CHROOT        15              /* chroot() before exec() */
+
+ /*
+  * Safer API: type-checked arguments, external use.
+  */
+#define PIPE_SCMD_END          PIPE_CMD_END
+#define PIPE_SCMD_COMMAND(v)   PIPE_CMD_COMMAND, CHECK_CPTR(PIPE_SCMD, char, (v))
+#define PIPE_SCMD_ARGV(v)      PIPE_CMD_ARGV, CHECK_PPTR(PIPE_SCMD, char, (v))
+#define PIPE_SCMD_COPY_FLAGS(v)        PIPE_CMD_COPY_FLAGS, CHECK_VAL(PIPE_SCMD, int, (v))
+#define PIPE_SCMD_SENDER(v)    PIPE_CMD_SENDER, CHECK_CPTR(PIPE_SCMD, char, (v))
+#define PIPE_SCMD_DELIVERED(v) PIPE_CMD_DELIVERED, CHECK_CPTR(PIPE_SCMD, char, (v))
+#define PIPE_SCMD_UID(v)       PIPE_CMD_UID, CHECK_VAL(PIPE_SCMD, uid_t, (v))
+#define PIPE_SCMD_GID(v)       PIPE_CMD_GID, CHECK_VAL(PIPE_SCMD, gid_t, (v))
+#define PIPE_SCMD_TIME_LIMIT(v)        PIPE_CMD_TIME_LIMIT, CHECK_VAL(PIPE_SCMD, int, (v))
+#define PIPE_SCMD_ENV(v)       PIPE_CMD_ENV, CHECK_PPTR(PIPE_SCMD, char, (v))
+#define PIPE_SCMD_SHELL(v)     PIPE_CMD_SHELL, CHECK_CPTR(PIPE_SCMD, char, (v))
+#define PIPE_SCMD_EOL(v)       PIPE_CMD_EOL, CHECK_CPTR(PIPE_SCMD, char, (v))
+#define PIPE_SCMD_EXPORT(v)    PIPE_CMD_EXPORT, CHECK_PPTR(PIPE_SCMD, char, (v))
+#define PIPE_SCMD_ORIG_RCPT(v) PIPE_CMD_ORIG_RCPT, CHECK_CPTR(PIPE_SCMD, char, (v))
+#define PIPE_SCMD_CWD(v)       PIPE_CMD_CWD, CHECK_CPTR(PIPE_SCMD, char, (v))
+#define PIPE_SCMD_CHROOT(v)    PIPE_CMD_CHROOT, CHECK_CPTR(PIPE_SCMD, char, (v))
+
+CHECK_VAL_HELPER_DCL(PIPE_SCMD, uid_t);
+CHECK_VAL_HELPER_DCL(PIPE_SCMD, int);
+CHECK_VAL_HELPER_DCL(PIPE_SCMD, gid_t);
+CHECK_PPTR_HELPER_DCL(PIPE_SCMD, char);
+CHECK_CPTR_HELPER_DCL(PIPE_SCMD, char);
 
  /*
   * Command completion status.
index 4893f40822c67e46670b7a3d5ab754303945590d..967154b2b4ee7f3ac68234bff7f9b81f385d30d8 100644 (file)
@@ -182,7 +182,7 @@ static void smtp_timeout_reset(VSTREAM *stream)
      * sending body content one line at a time.
      */
     if (vstream_fstat(stream, VSTREAM_FLAG_DEADLINE))
-       vstream_control(stream, VSTREAM_CTL_START_DEADLINE, VSTREAM_CTL_END);
+       vstream_control(stream, VSTREAM_SCTL_START_DEADLINE, VSTREAM_SCTL_END);
 }
 
 /* smtp_longjmp - raise an exception */
@@ -215,12 +215,12 @@ void    smtp_stream_setup(VSTREAM *stream, int maxtime, int enable_deadline)
                 myname, maxtime, enable_deadline);
 
     vstream_control(stream,
-                   VSTREAM_CTL_DOUBLE,
-                   VSTREAM_CTL_TIMEOUT, maxtime,
-                   enable_deadline ? VSTREAM_CTL_START_DEADLINE
-                   : VSTREAM_CTL_STOP_DEADLINE,
-                   VSTREAM_CTL_EXCEPT,
-                   VSTREAM_CTL_END);
+                   VSTREAM_SCTL_DOUBLE,
+                   VSTREAM_SCTL_TIMEOUT(maxtime),
+                   enable_deadline ? VSTREAM_SCTL_START_DEADLINE
+                   : VSTREAM_SCTL_STOP_DEADLINE,
+                   VSTREAM_SCTL_EXCEPT,
+                   VSTREAM_SCTL_END);
 }
 
 /* smtp_flush - flush stream */
index 6792d35f327f09c3c5b58d491f364fb77a58f1f5..95365c2026f6950f85b1d510f449f483f7dc19d3 100644 (file)
@@ -105,7 +105,7 @@ int     main(int unused_argc, char **unused_argv)
 {
     char   *extension;
     char   *stripped;
-    char*  delim = "+-";
+    char   *delim = "+-";
 
 #define NO_DELIM       ""
 
index 05d1afd4900cd828fffa90b0326f17a81cf141de..1e628d785db3c09f1552ac9c6bc324112dc2a47e 100644 (file)
@@ -106,7 +106,7 @@ static SYS_EXITS_DETAIL *sys_exits_fake(int code)
 
     vstring_sprintf(sys_exits_def_text, "unknown mail system error %d", code);
     sys_exits_default->text = vstring_str(sys_exits_def_text);
-    return(sys_exits_default);
+    return (sys_exits_default);
 }
 
 /* sys_exits_strerror - map exit status to error string */
index a4640e083a94a6f555ca27a8ba83d0fd2f92fd02..94ac7e072563560d9eaa490088819b417d9e4161 100644 (file)
@@ -50,6 +50,6 @@ void    timed_ipc_setup(VSTREAM *stream)
        msg_panic("timed_ipc_setup: bad ipc_timeout %d", var_ipc_timeout);
 
     vstream_control(stream,
-                   VSTREAM_CTL_TIMEOUT, var_ipc_timeout,
-                   VSTREAM_CTL_END);
+                   VSTREAM_SCTL_TIMEOUT(var_ipc_timeout),
+                   VSTREAM_SCTL_END);
 }
index 04fcc0d4321873fe7bd217cfa181d15dd8deac4a..f18aa2e8b5207f98e8d746e81c78b66c09279f58 100644 (file)
@@ -206,20 +206,20 @@ int     deliver_command(LOCAL_STATE state, USER_ATTR usr_attr, const char *comma
                 VAR_EXEC_DIRECTORY, var_exec_directory);
     } else {
        cmd_status = pipe_command(state.msg_attr.fp, why,
-                                 PIPE_CMD_UID, usr_attr.uid,
-                                 PIPE_CMD_GID, usr_attr.gid,
-                                 PIPE_CMD_COMMAND, command,
-                                 PIPE_CMD_COPY_FLAGS, copy_flags,
-                                 PIPE_CMD_SENDER, state.msg_attr.sender,
-                         PIPE_CMD_ORIG_RCPT, state.msg_attr.rcpt.orig_addr,
-                              PIPE_CMD_DELIVERED, state.msg_attr.delivered,
-                                 PIPE_CMD_TIME_LIMIT, var_command_maxtime,
-                                 PIPE_CMD_ENV, env->argv,
-                                 PIPE_CMD_EXPORT, export_env->argv,
-                                 PIPE_CMD_SHELL, var_local_cmd_shell,
-                                 PIPE_CMD_CWD, *STR(exec_dir) ?
-                                 STR(exec_dir) : (char *) 0,
-                                 PIPE_CMD_END);
+                                 PIPE_SCMD_UID(usr_attr.uid),
+                                 PIPE_SCMD_GID(usr_attr.gid),
+                                 PIPE_SCMD_COMMAND(command),
+                                 PIPE_SCMD_COPY_FLAGS(copy_flags),
+                                 PIPE_SCMD_SENDER(state.msg_attr.sender),
+                        PIPE_SCMD_ORIG_RCPT(state.msg_attr.rcpt.orig_addr),
+                             PIPE_SCMD_DELIVERED(state.msg_attr.delivered),
+                                 PIPE_SCMD_TIME_LIMIT(var_command_maxtime),
+                                 PIPE_SCMD_ENV(env->argv),
+                                 PIPE_SCMD_EXPORT(export_env->argv),
+                                 PIPE_SCMD_SHELL(var_local_cmd_shell),
+                                 PIPE_SCMD_CWD(*STR(exec_dir) ?
+                                               STR(exec_dir) : (char *) 0),
+                                 PIPE_SCMD_END);
     }
     vstring_free(exec_dir);
     argv_free(export_env);
index 6b82dd3216c5a00e7165ce23338b2eebfbcb2eb9..b548e29b86e6e5e87674e6772f0ad79ddedbc29c 100644 (file)
@@ -935,17 +935,17 @@ int     main(int argc, char **argv)
     MAIL_VERSION_STAMP_ALLOCATE;
 
     single_server_main(argc, argv, local_service,
-                      MAIL_SERVER_INT_TABLE, int_table,
-                      MAIL_SERVER_LONG_TABLE, long_table,
-                      MAIL_SERVER_STR_TABLE, str_table,
-                      MAIL_SERVER_RAW_TABLE, raw_table,
-                      MAIL_SERVER_BOOL_TABLE, bool_table,
-                      MAIL_SERVER_TIME_TABLE, time_table,
-                      MAIL_SERVER_PRE_INIT, pre_init,
-                      MAIL_SERVER_POST_INIT, post_init,
-                      MAIL_SERVER_PRE_ACCEPT, pre_accept,
-                      MAIL_SERVER_PRIVILEGED,
-                      MAIL_SERVER_BOUNCE_INIT, VAR_LOCAL_DSN_FILTER,
-                      &var_local_dsn_filter,
+                      MAIL_SERVER_REQ_INT_TABLE(int_table),
+                      MAIL_SERVER_REQ_LONG_TABLE(long_table),
+                      MAIL_SERVER_REQ_STR_TABLE(str_table),
+                      MAIL_SERVER_REQ_RAW_TABLE(raw_table),
+                      MAIL_SERVER_REQ_BOOL_TABLE(bool_table),
+                      MAIL_SERVER_REQ_TIME_TABLE(time_table),
+                      MAIL_SERVER_REQ_PRE_INIT(pre_init),
+                      MAIL_SERVER_REQ_POST_INIT(post_init),
+                      MAIL_SERVER_REQ_PRE_ACCEPT(pre_accept),
+                      MAIL_SERVER_REQ_PRIVILEGED,
+                      MAIL_SERVER_REQ_BOUNCE_INIT(VAR_LOCAL_DSN_FILTER,
+                                                  &var_local_dsn_filter),
                       0);
 }
index 450617a8317cce72c2a6ae2d7dae2cbb2d331402..0a608b9bdca7f80c811b850b30a9b189cc0c3fa7 100644 (file)
@@ -137,6 +137,7 @@ mail_flow.o: mail_flow.c
 mail_flow.o: mail_flow.h
 mail_flow.o: master_proto.h
 master.o: ../../include/argv.h
+master.o: ../../include/check_arg.h
 master.o: ../../include/clean_env.h
 master.o: ../../include/debug_process.h
 master.o: ../../include/events.h
@@ -209,6 +210,7 @@ master_flow.o: ../../include/sys_defs.h
 master_flow.o: master.h
 master_flow.o: master_flow.c
 master_flow.o: master_proto.h
+master_listen.o: ../../include/check_arg.h
 master_listen.o: ../../include/htable.h
 master_listen.o: ../../include/inet_addr_list.h
 master_listen.o: ../../include/iostuff.h
@@ -250,6 +252,7 @@ master_sig.o: master.h
 master_sig.o: master_sig.c
 master_spawn.o: ../../include/argv.h
 master_spawn.o: ../../include/binhash.h
+master_spawn.o: ../../include/check_arg.h
 master_spawn.o: ../../include/events.h
 master_spawn.o: ../../include/mail_conf.h
 master_spawn.o: ../../include/msg.h
@@ -268,6 +271,7 @@ master_status.o: ../../include/sys_defs.h
 master_status.o: master.h
 master_status.o: master_proto.h
 master_status.o: master_status.c
+master_vars.o: ../../include/check_arg.h
 master_vars.o: ../../include/mail_conf.h
 master_vars.o: ../../include/mail_params.h
 master_vars.o: ../../include/msg.h
@@ -283,6 +287,7 @@ master_wakeup.o: ../../include/check_arg.h
 master_wakeup.o: ../../include/events.h
 master_wakeup.o: ../../include/htable.h
 master_wakeup.o: ../../include/iostuff.h
+master_wakeup.o: ../../include/mail_conf.h
 master_wakeup.o: ../../include/mail_params.h
 master_wakeup.o: ../../include/mail_proto.h
 master_wakeup.o: ../../include/msg.h
index 356c36081916dc7536beb04bc7a071fe6863dc18..8c3d699065b01f69788a65aed49030a5a1e81bf0 100644 (file)
 /*     file.  The argv argument specifies command-line arguments
 /*     left over after options processing.
 /* .PP
-/*     Optional arguments are specified as a null-terminated (key, value)
-/*     list. Keys and expected values are:
-/* .IP "MAIL_SERVER_INT_TABLE (CONFIG_INT_TABLE *)"
+/*     Optional arguments are specified as a null-terminated list
+/*     with macros that have zero or more arguments:
+/* .IP "MAIL_SERVER_REQ_REQ_INT_TABLE(CONFIG_INT_TABLE *)"
 /*     A table with configurable parameters, to be loaded from the
 /*     global Postfix configuration file. Tables are loaded in the
 /*     order as specified, and multiple instances of the same type
 /*     are allowed.
-/* .IP "MAIL_SERVER_LONG_TABLE (CONFIG_LONG_TABLE *)"
+/* .IP "MAIL_SERVER_REQ_REQ_LONG_TABLE(CONFIG_LONG_TABLE *)"
 /*     A table with configurable parameters, to be loaded from the
 /*     global Postfix configuration file. Tables are loaded in the
 /*     order as specified, and multiple instances of the same type
 /*     are allowed.
-/* .IP "MAIL_SERVER_STR_TABLE (CONFIG_STR_TABLE *)"
+/* .IP "MAIL_SERVER_REQ_REQ_STR_TABLE(CONFIG_STR_TABLE *)"
 /*     A table with configurable parameters, to be loaded from the
 /*     global Postfix configuration file. Tables are loaded in the
 /*     order as specified, and multiple instances of the same type
 /*     are allowed.
-/* .IP "MAIL_SERVER_BOOL_TABLE (CONFIG_BOOL_TABLE *)"
+/* .IP "MAIL_SERVER_REQ_REQ_BOOL_TABLE(CONFIG_BOOL_TABLE *)"
 /*     A table with configurable parameters, to be loaded from the
 /*     global Postfix configuration file. Tables are loaded in the
 /*     order as specified, and multiple instances of the same type
 /*     are allowed.
-/* .IP "MAIL_SERVER_TIME_TABLE (CONFIG_TIME_TABLE *)"
+/* .IP "MAIL_SERVER_REQ_REQ_TIME_TABLE(CONFIG_TIME_TABLE *)"
 /*     A table with configurable parameters, to be loaded from the
 /*     global Postfix configuration file. Tables are loaded in the
 /*     order as specified, and multiple instances of the same type
 /*     are allowed.
-/* .IP "MAIL_SERVER_RAW_TABLE (CONFIG_RAW_TABLE *)"
+/* .IP "MAIL_SERVER_REQ_REQ_RAW_TABLE(CONFIG_RAW_TABLE *)"
 /*     A table with configurable parameters, to be loaded from the
 /*     global Postfix configuration file. Tables are loaded in the
 /*     order as specified, and multiple instances of the same type
 /*     are allowed. Raw parameters are not subjected to $name
 /*     evaluation.
-/* .IP "MAIL_SERVER_NINT_TABLE (CONFIG_NINT_TABLE *)"
+/* .IP "MAIL_SERVER_REQ_REQ_NINT_TABLE(CONFIG_NINT_TABLE *)"
 /*     A table with configurable parameters, to be loaded from the
 /*     global Postfix configuration file. Tables are loaded in the
 /*     order as specified, and multiple instances of the same type
 /*     are allowed.
-/* .IP "MAIL_SERVER_NBOOL_TABLE (CONFIG_NBOOL_TABLE *)"
+/* .IP "MAIL_SERVER_REQ_REQ_NBOOL_TABLE(CONFIG_NBOOL_TABLE *)"
 /*     A table with configurable parameters, to be loaded from the
 /*     global Postfix configuration file. Tables are loaded in the
 /*     order as specified, and multiple instances of the same type
 /*     are allowed.
-/* .IP "MAIL_SERVER_PRE_INIT (void *(char *service_name, char **argv))"
+/* .IP "MAIL_SERVER_REQ_REQ_PRE_INIT(void *(char *service_name, char **argv))"
 /*     A pointer to a function that is called once
 /*     by the skeleton after it has read the global configuration file
 /*     and after it has processed command-line arguments, but before
 /*     the skeleton has optionally relinquished the process privileges.
 /* .sp
 /*     Only the last instance of this parameter type is remembered.
-/* .IP "MAIL_SERVER_POST_INIT (void *(char *service_name, char **argv))"
+/* .IP "MAIL_SERVER_REQ_REQ_POST_INIT(void *(char *service_name, char **argv))"
 /*     A pointer to a function that is called once
 /*     by the skeleton after it has optionally relinquished the process
 /*     privileges, but before servicing client connection requests.
 /* .sp
 /*     Only the last instance of this parameter type is remembered.
-/* .IP "MAIL_SERVER_LOOP (int *(char *service_name, char **argv))"
+/* .IP "MAIL_SERVER_REQ_REQ_LOOP(int *(char *service_name, char **argv))"
 /*     A pointer to function that is executed from
 /*     within the event loop, whenever an I/O or timer event has happened,
 /*     or whenever nothing has happened for a specified amount of time.
 /*     the next event. Specify -1 to wait for "as long as it takes".
 /* .sp
 /*     Only the last instance of this parameter type is remembered.
-/* .IP "MAIL_SERVER_EXIT (void *(char *service_name, char **argv))"
+/* .IP "MAIL_SERVER_REQ_EXIT(void *(char *service_name, char **argv))"
 /*     A pointer to function that is executed immediately before normal
 /*     process termination.
-/* .IP "MAIL_SERVER_PRE_ACCEPT (void *(char *service_name, char **argv))"
+/* .IP "MAIL_SERVER_REQ_PRE_ACCEPT(void *(char *service_name, char **argv))"
 /*     Function to be executed prior to accepting a new connection.
 /* .sp
 /*     Only the last instance of this parameter type is remembered.
-/* .IP "MAIL_SERVER_PRE_DISCONN (VSTREAM *, char *service_name, char **argv)"
+/* .IP "MAIL_SERVER_REQ_PRE_DISCONN(VSTREAM *, char *service_name, char **argv)"
 /*     A pointer to a function that is called
 /*     by the event_server_disconnect() function (see below).
 /* .sp
 /*     Only the last instance of this parameter type is remembered.
-/* .IP "MAIL_SERVER_IN_FLOW_DELAY (none)"
+/* .IP "MAIL_SERVER_REQ_IN_FLOW_DELAY
 /*     Pause $in_flow_delay seconds when no "mail flow control token"
 /*     is available. A token is consumed for each connection request.
-/* .IP MAIL_SERVER_SOLITARY
+/* .IP MAIL_SERVER_REQ_SOLITARY
 /*     This service must be configured with process limit of 1.
-/* .IP MAIL_SERVER_UNLIMITED
+/* .IP MAIL_SERVER_REQ_UNLIMITED
 /*     This service must be configured with process limit of 0.
-/* .IP MAIL_SERVER_PRIVILEGED
+/* .IP MAIL_SERVER_REQ_PRIVILEGED
 /*     This service must be configured as privileged.
-/* .IP "MAIL_SERVER_SLOW_EXIT (void *(char *service_name, char **argv))"
+/* .IP "MAIL_SERVER_REQ_SLOW_EXIT(void *(char *service_name, char **argv))"
 /*     A pointer to a function that is called after "postfix reload"
 /*     or "master exit".  The application can call event_server_drain()
 /*     (see below) to finish ongoing activities in the background.
-/* .IP "MAIL_SERVER_WATCHDOG (int *)"
+/* .IP "MAIL_SERVER_REQ_WATCHDOG(int *)"
 /*     Override the default 1000s watchdog timeout. The value is
 /*     used after command-line and main.cf file processing.
-/* .IP "MAIL_SERVER_BOUNCE_INIT (const char *, const char **)"
+/* .IP "MAIL_SERVER_REQ_BOUNCE_INIT(const char *, const char **)"
 /*     Initialize the DSN filter for the bounce/defer service
 /*     clients with the specified map source and map names.
 /* .PP
@@ -401,9 +401,9 @@ static void event_server_wakeup(int fd, HTABLE *attr)
     stream = vstream_fdopen(fd, O_RDWR);
     tmp = concatenate(event_server_name, " socket", (char *) 0);
     vstream_control(stream,
-                   VSTREAM_CTL_PATH, tmp,
-                   VSTREAM_CTL_CONTEXT, (void *) attr,
-                   VSTREAM_CTL_END);
+                   VSTREAM_SCTL_PATH(tmp),
+                   VSTREAM_SCTL_CONTEXT((void *) attr),
+                   VSTREAM_SCTL_END);
     myfree(tmp);
     timed_ipc_setup(stream);
     event_server_saved_flags = vstream_flags(stream);
@@ -885,9 +885,9 @@ NORETURN event_server_main(int argc, char **argv, MULTI_SERVER_FN service,...)
      */
     if (stream != 0) {
        vstream_control(stream,
-                       VSTREAM_CTL_DOUBLE,
-                       VSTREAM_CTL_WRITE_FD, STDOUT_FILENO,
-                       VSTREAM_CTL_END);
+                       VSTREAM_SCTL_DOUBLE,
+                       VSTREAM_SCTL_WRITE_FD(STDOUT_FILENO),
+                       VSTREAM_SCTL_END);
        service(stream, event_server_name, event_server_argv);
        vstream_fflush(stream);
        event_server_exit();
index cdd9469431cd039d9f69c951c1f743fd9dc01280..3fb8ebd73e897416b0695fb32e2590edabde55f2 100644 (file)
   */
 #include <vstream.h>
 
+ /*
+  * Global library.
+  */
+#include <mail_conf.h>
+
  /*
   * External interface. Tables are defined in mail_conf.h.
   */
@@ -47,6 +52,47 @@ typedef void (*MAIL_SERVER_ACCEPT_FN) (char *, char **);
 typedef void (*MAIL_SERVER_DISCONN_FN) (VSTREAM *, char *, char **);
 typedef void (*MAIL_SERVER_SLOW_EXIT_FN) (char *, char **);
 
+/* Type-checked API for external use. */
+#define MAIL_SERVER_REQ_INT_TABLE(v)   MAIL_SERVER_INT_TABLE, CHECK_CPTR(MAIL_SERVER, CONFIG_INT_TABLE, (v))
+#define MAIL_SERVER_REQ_STR_TABLE(v)   MAIL_SERVER_STR_TABLE, CHECK_CPTR(MAIL_SERVER, CONFIG_STR_TABLE, (v))
+#define MAIL_SERVER_REQ_BOOL_TABLE(v)  MAIL_SERVER_BOOL_TABLE, CHECK_CPTR(MAIL_SERVER, CONFIG_BOOL_TABLE, (v))
+#define MAIL_SERVER_REQ_TIME_TABLE(v)  MAIL_SERVER_TIME_TABLE, CHECK_CPTR(MAIL_SERVER, CONFIG_TIME_TABLE, (v))
+#define MAIL_SERVER_REQ_RAW_TABLE(v)   MAIL_SERVER_RAW_TABLE, CHECK_CPTR(MAIL_SERVER, CONFIG_RAW_TABLE, (v))
+#define MAIL_SERVER_REQ_NINT_TABLE(v)  MAIL_SERVER_NINT_TABLE, CHECK_CPTR(MAIL_SERVER, CONFIG_NINT_TABLE, (v))
+#define MAIL_SERVER_REQ_NBOOL_TABLE(v) MAIL_SERVER_NBOOL_TABLE, CHECK_CPTR(MAIL_SERVER, CONFIG_NBOOL_TABLE, (v))
+#define MAIL_SERVER_REQ_LONG_TABLE(v)  MAIL_SERVER_LONG_TABLE, CHECK_CPTR(MAIL_SERVER, CONFIG_LONG_TABLE, (v))
+#define MAIL_SERVER_REQ_PRE_INIT(v)    MAIL_SERVER_PRE_INIT, CHECK_VAL(MAIL_SERVER, MAIL_SERVER_INIT_FN, (v))
+#define MAIL_SERVER_REQ_POST_INIT(v)   MAIL_SERVER_POST_INIT, CHECK_VAL(MAIL_SERVER, MAIL_SERVER_INIT_FN, (v))
+#define MAIL_SERVER_REQ_LOOP(v)                MAIL_SERVER_LOOP, CHECK_VAL(MAIL_SERVER, MAIL_SERVER_LOOP_FN, (v))
+#define MAIL_SERVER_REQ_EXIT(v)                MAIL_SERVER_EXIT, CHECK_VAL(MAIL_SERVER, MAIL_SERVER_EXIT_FN, (v))
+#define MAIL_SERVER_REQ_PRE_ACCEPT(v)  MAIL_SERVER_PRE_ACCEPT, CHECK_VAL(MAIL_SERVER, MAIL_SERVER_ACCEPT_FN, (v))
+#define MAIL_SERVER_REQ_SOLITARY       MAIL_SERVER_SOLITARY
+#define MAIL_SERVER_REQ_UNLIMITED      MAIL_SERVER_UNLIMITED
+#define MAIL_SERVER_REQ_PRE_DISCONN(v) MAIL_SERVER_PRE_DISCONN, CHECK_VAL(MAIL_SERVER, MAIL_SERVER_DISCONN_FN, (v))
+#define MAIL_SERVER_REQ_PRIVILEGED     MAIL_SERVER_PRIVILEGED
+#define MAIL_SERVER_REQ_WATCHDOG(v)    MAIL_SERVER_WATCHDOG, CHECK_PTR(MAIL_SERVER, int, (v))
+#define MAIL_SERVER_REQ_IN_FLOW_DELAY  MAIL_SERVER_IN_FLOW_DELAY
+#define MAIL_SERVER_REQ_SLOW_EXIT(v)   MAIL_SERVER_SLOW_EXIT, CHECK_VAL(MAIL_SERVER, MAIL_SERVER_SLOW_EXIT_FN, (v))
+#define MAIL_SERVER_REQ_BOUNCE_INIT(v, w) MAIL_SERVER_BOUNCE_INIT, CHECK_PTR(MAIL_SERVER, char, (v)), CHECK_PPTR(MAIL_SERVER, char, (w))
+
+CHECK_VAL_HELPER_DCL(MAIL_SERVER, MAIL_SERVER_SLOW_EXIT_FN);
+CHECK_VAL_HELPER_DCL(MAIL_SERVER, MAIL_SERVER_LOOP_FN);
+CHECK_VAL_HELPER_DCL(MAIL_SERVER, MAIL_SERVER_INIT_FN);
+CHECK_VAL_HELPER_DCL(MAIL_SERVER, MAIL_SERVER_EXIT_FN);
+CHECK_VAL_HELPER_DCL(MAIL_SERVER, MAIL_SERVER_DISCONN_FN);
+CHECK_VAL_HELPER_DCL(MAIL_SERVER, MAIL_SERVER_ACCEPT_FN);
+CHECK_PTR_HELPER_DCL(MAIL_SERVER, int);
+CHECK_PTR_HELPER_DCL(MAIL_SERVER, char);
+CHECK_PPTR_HELPER_DCL(MAIL_SERVER, char);
+CHECK_CPTR_HELPER_DCL(MAIL_SERVER, CONFIG_TIME_TABLE);
+CHECK_CPTR_HELPER_DCL(MAIL_SERVER, CONFIG_STR_TABLE);
+CHECK_CPTR_HELPER_DCL(MAIL_SERVER, CONFIG_RAW_TABLE);
+CHECK_CPTR_HELPER_DCL(MAIL_SERVER, CONFIG_NINT_TABLE);
+CHECK_CPTR_HELPER_DCL(MAIL_SERVER, CONFIG_NBOOL_TABLE);
+CHECK_CPTR_HELPER_DCL(MAIL_SERVER, CONFIG_LONG_TABLE);
+CHECK_CPTR_HELPER_DCL(MAIL_SERVER, CONFIG_INT_TABLE);
+CHECK_CPTR_HELPER_DCL(MAIL_SERVER, CONFIG_BOOL_TABLE);
+
  /*
   * single_server.c
   */
index 995b98550c25e47bc702b677757c0680fa684f2c..d2e86644ac15eb5dfc10cf24b39f635191910c1c 100644 (file)
 /*     The argv argument specifies command-line arguments left over
 /*     after options processing.
 /* .PP
-/*     Optional arguments are specified as a null-terminated (key, value)
-/*     list. Keys and expected values are:
-/* .IP "MAIL_SERVER_INT_TABLE (CONFIG_INT_TABLE *)"
+/*     Optional arguments are specified as a null-terminated list
+/*     with macros that have zero or more arguments:
+/* .IP "MAIL_SERVER_REQ_INT_TABLE(CONFIG_INT_TABLE *)"
 /*     A table with configurable parameters, to be loaded from the
 /*     global Postfix configuration file. Tables are loaded in the
 /*     order as specified, and multiple instances of the same type
 /*     are allowed.
-/* .IP "MAIL_SERVER_LONG_TABLE (CONFIG_LONG_TABLE *)"
+/* .IP "MAIL_SERVER_REQ_LONG_TABLE(CONFIG_LONG_TABLE *)"
 /*     A table with configurable parameters, to be loaded from the
 /*     global Postfix configuration file. Tables are loaded in the
 /*     order as specified, and multiple instances of the same type
 /*     are allowed.
-/* .IP "MAIL_SERVER_STR_TABLE (CONFIG_STR_TABLE *)"
+/* .IP "MAIL_SERVER_REQ_STR_TABLE(CONFIG_STR_TABLE *)"
 /*     A table with configurable parameters, to be loaded from the
 /*     global Postfix configuration file. Tables are loaded in the
 /*     order as specified, and multiple instances of the same type
 /*     are allowed.
-/* .IP "MAIL_SERVER_BOOL_TABLE (CONFIG_BOOL_TABLE *)"
+/* .IP "MAIL_SERVER_REQ_BOOL_TABLE(CONFIG_BOOL_TABLE *)"
 /*     A table with configurable parameters, to be loaded from the
 /*     global Postfix configuration file. Tables are loaded in the
 /*     order as specified, and multiple instances of the same type
 /*     are allowed.
-/* .IP "MAIL_SERVER_TIME_TABLE (CONFIG_TIME_TABLE *)"
+/* .IP "MAIL_SERVER_REQ_TIME_TABLE(CONFIG_TIME_TABLE *)"
 /*     A table with configurable parameters, to be loaded from the
 /*     global Postfix configuration file. Tables are loaded in the
 /*     order as specified, and multiple instances of the same type
 /*     are allowed.
-/* .IP "MAIL_SERVER_RAW_TABLE (CONFIG_RAW_TABLE *)"
+/* .IP "MAIL_SERVER_REQ_RAW_TABLE(CONFIG_RAW_TABLE *)"
 /*     A table with configurable parameters, to be loaded from the
 /*     global Postfix configuration file. Tables are loaded in the
 /*     order as specified, and multiple instances of the same type
 /*     are allowed. Raw parameters are not subjected to $name
 /*     evaluation.
-/* .IP "MAIL_SERVER_NINT_TABLE (CONFIG_NINT_TABLE *)"
+/* .IP "MAIL_SERVER_REQ_NINT_TABLE(CONFIG_NINT_TABLE *)"
 /*     A table with configurable parameters, to be loaded from the
 /*     global Postfix configuration file. Tables are loaded in the
 /*     order as specified, and multiple instances of the same type
 /*     are allowed.
-/* .IP "MAIL_SERVER_NBOOL_TABLE (CONFIG_NBOOL_TABLE *)"
+/* .IP "MAIL_SERVER_REQ_NBOOL_TABLE(CONFIG_NBOOL_TABLE *)"
 /*     A table with configurable parameters, to be loaded from the
 /*     global Postfix configuration file. Tables are loaded in the
 /*     order as specified, and multiple instances of the same type
 /*     are allowed.
-/* .IP "MAIL_SERVER_PRE_INIT (void *(char *service_name, char **argv))"
+/* .IP "MAIL_SERVER_REQ_PRE_INIT(void *(char *service_name, char **argv))"
 /*     A pointer to a function that is called once
 /*     by the skeleton after it has read the global configuration file
 /*     and after it has processed command-line arguments, but before
 /*     the skeleton has optionally relinquished the process privileges.
 /* .sp
 /*     Only the last instance of this parameter type is remembered.
-/* .IP "MAIL_SERVER_POST_INIT (void *(char *service_name, char **argv))"
+/* .IP "MAIL_SERVER_REQ_POST_INIT(void *(char *service_name, char **argv))"
 /*     A pointer to a function that is called once
 /*     by the skeleton after it has optionally relinquished the process
 /*     privileges, but before servicing client connection requests.
 /* .sp
 /*     Only the last instance of this parameter type is remembered.
-/* .IP "MAIL_SERVER_LOOP (int *(char *service_name, char **argv))"
+/* .IP "MAIL_SERVER_REQ_LOOP(int *(char *service_name, char **argv))"
 /*     A pointer to function that is executed from
 /*     within the event loop, whenever an I/O or timer event has happened,
 /*     or whenever nothing has happened for a specified amount of time.
 /*     the next event. Specify -1 to wait for "as long as it takes".
 /* .sp
 /*     Only the last instance of this parameter type is remembered.
-/* .IP "MAIL_SERVER_EXIT (void *(char *service_name, char **argv))"
+/* .IP "MAIL_SERVER_REQ_EXIT(void *(char *service_name, char **argv))"
 /*     A pointer to function that is executed immediately before normal
 /*     process termination.
-/* .IP "MAIL_SERVER_PRE_ACCEPT (void *(char *service_name, char **argv))"
+/* .IP "MAIL_SERVER_REQ_PRE_ACCEPT(void *(char *service_name, char **argv))"
 /*     Function to be executed prior to accepting a new connection.
 /* .sp
 /*     Only the last instance of this parameter type is remembered.
-/* .IP "MAIL_SERVER_PRE_DISCONN (VSTREAM *, char *service_name, char **argv)"
+/* .IP "MAIL_SERVER_REQ_PRE_DISCONN(VSTREAM *, char *service_name, char **argv)"
 /*     A pointer to a function that is called
 /*     by the multi_server_disconnect() function (see below).
 /* .sp
 /*     Only the last instance of this parameter type is remembered.
-/* .IP "MAIL_SERVER_IN_FLOW_DELAY (none)"
+/* .IP "MAIL_SERVER_REQ_IN_FLOW_DELAY
 /*     Pause $in_flow_delay seconds when no "mail flow control token"
 /*     is available. A token is consumed for each connection request.
-/* .IP MAIL_SERVER_SOLITARY
+/* .IP MAIL_SERVER_REQ_SOLITARY
 /*     This service must be configured with process limit of 1.
-/* .IP MAIL_SERVER_UNLIMITED
+/* .IP MAIL_SERVER_REQ_UNLIMITED
 /*     This service must be configured with process limit of 0.
-/* .IP MAIL_SERVER_PRIVILEGED
+/* .IP MAIL_SERVER_REQ_PRIVILEGED
 /*     This service must be configured as privileged.
-/* .IP "MAIL_SERVER_BOUNCE_INIT (const char *, const char **)"
+/* .IP "MAIL_SERVER_REQ_BOUNCE_INIT(const char *, const char **)"
 /*     Initialize the DSN filter for the bounce/defer service
 /*     clients with the specified map source and map names.
 /* .PP
@@ -397,9 +397,9 @@ static void multi_server_wakeup(int fd, HTABLE *attr)
     stream = vstream_fdopen(fd, O_RDWR);
     tmp = concatenate(multi_server_name, " socket", (char *) 0);
     vstream_control(stream,
-                   VSTREAM_CTL_PATH, tmp,
-                   VSTREAM_CTL_CONTEXT, (void *) attr,
-                   VSTREAM_CTL_END);
+                   VSTREAM_SCTL_PATH(tmp),
+                   VSTREAM_SCTL_CONTEXT((void *) attr),
+                   VSTREAM_SCTL_END);
     myfree(tmp);
     timed_ipc_setup(stream);
     multi_server_saved_flags = vstream_flags(stream);
@@ -875,9 +875,9 @@ NORETURN multi_server_main(int argc, char **argv, MULTI_SERVER_FN service,...)
      */
     if (stream != 0) {
        vstream_control(stream,
-                       VSTREAM_CTL_DOUBLE,
-                       VSTREAM_CTL_WRITE_FD, STDOUT_FILENO,
-                       VSTREAM_CTL_END);
+                       VSTREAM_SCTL_DOUBLE,
+                       VSTREAM_SCTL_WRITE_FD(STDOUT_FILENO),
+                       VSTREAM_SCTL_END);
        service(stream, multi_server_name, multi_server_argv);
        vstream_fflush(stream);
        multi_server_exit();
index 41b47311e8efd5df1a86efa0b76e255468010cf9..9fbde02345dc37f6a4bc0c959944f759813c81da 100644 (file)
 /*     The argv argument specifies command-line arguments left over
 /*     after options processing.
 /* .PP
-/*     Optional arguments are specified as a null-terminated (key, value)
-/*     list. Keys and expected values are:
-/* .IP "MAIL_SERVER_INT_TABLE (CONFIG_INT_TABLE *)"
+/*     Optional arguments are specified as a null-terminated list
+/*     with macros that have zero or more arguments:
+/* .IP "MAIL_SERVER_REQ_INT_TABLE(CONFIG_INT_TABLE *)"
 /*     A table with configurable parameters, to be loaded from the
 /*     global Postfix configuration file. Tables are loaded in the
 /*     order as specified, and multiple instances of the same type
 /*     are allowed.
-/* .IP "MAIL_SERVER_LONG_TABLE (CONFIG_LONG_TABLE *)"
+/* .IP "MAIL_SERVER_REQ_LONG_TABLE(CONFIG_LONG_TABLE *)"
 /*     A table with configurable parameters, to be loaded from the
 /*     global Postfix configuration file. Tables are loaded in the
 /*     order as specified, and multiple instances of the same type
 /*     are allowed.
-/* .IP "MAIL_SERVER_STR_TABLE (CONFIG_STR_TABLE *)"
+/* .IP "MAIL_SERVER_REQ_STR_TABLE(CONFIG_STR_TABLE *)"
 /*     A table with configurable parameters, to be loaded from the
 /*     global Postfix configuration file. Tables are loaded in the
 /*     order as specified, and multiple instances of the same type
 /*     are allowed.
-/* .IP "MAIL_SERVER_BOOL_TABLE (CONFIG_BOOL_TABLE *)"
+/* .IP "MAIL_SERVER_REQ_BOOL_TABLE(CONFIG_BOOL_TABLE *)"
 /*     A table with configurable parameters, to be loaded from the
 /*     global Postfix configuration file. Tables are loaded in the
 /*     order as specified, and multiple instances of the same type
 /*     are allowed.
-/* .IP "MAIL_SERVER_TIME_TABLE (CONFIG_TIME_TABLE *)"
+/* .IP "MAIL_SERVER_REQ_TIME_TABLE(CONFIG_TIME_TABLE *)"
 /*     A table with configurable parameters, to be loaded from the
 /*     global Postfix configuration file. Tables are loaded in the
 /*     order as specified, and multiple instances of the same type
 /*     are allowed.
-/* .IP "MAIL_SERVER_RAW_TABLE (CONFIG_RAW_TABLE *)"
+/* .IP "MAIL_SERVER_REQ_RAW_TABLE(CONFIG_RAW_TABLE *)"
 /*     A table with configurable parameters, to be loaded from the
 /*     global Postfix configuration file. Tables are loaded in the
 /*     order as specified, and multiple instances of the same type
 /*     are allowed. Raw parameters are not subjected to $name
 /*     evaluation.
-/* .IP "MAIL_SERVER_NINT_TABLE (CONFIG_NINT_TABLE *)"
+/* .IP "MAIL_SERVER_REQ_NINT_TABLE(CONFIG_NINT_TABLE *)"
 /*     A table with configurable parameters, to be loaded from the
 /*     global Postfix configuration file. Tables are loaded in the
 /*     order as specified, and multiple instances of the same type
 /*     are allowed.
-/* .IP "MAIL_SERVER_NBOOL_TABLE (CONFIG_NBOOL_TABLE *)"
+/* .IP "MAIL_SERVER_REQ_NBOOL_TABLE(CONFIG_NBOOL_TABLE *)"
 /*     A table with configurable parameters, to be loaded from the
 /*     global Postfix configuration file. Tables are loaded in the
 /*     order as specified, and multiple instances of the same type
 /*     are allowed.
-/* .IP "MAIL_SERVER_PRE_INIT (void *(char *service_name, char **argv))"
+/* .IP "MAIL_SERVER_REQ_PRE_INIT(void *(char *service_name, char **argv))"
 /*     A pointer to a function that is called once
 /*     by the skeleton after it has read the global configuration file
 /*     and after it has processed command-line arguments, but before
 /*     the skeleton has optionally relinquished the process privileges.
 /* .sp
 /*     Only the last instance of this parameter type is remembered.
-/* .IP "MAIL_SERVER_POST_INIT (void *(char *service_name, char **argv))"
+/* .IP "MAIL_SERVER_REQ_POST_INIT(void *(char *service_name, char **argv))"
 /*     A pointer to a function that is called once
 /*     by the skeleton after it has optionally relinquished the process
 /*     privileges, but before servicing client connection requests.
 /* .sp
 /*     Only the last instance of this parameter type is remembered.
-/* .IP "MAIL_SERVER_LOOP (int *(char *service_name, char **argv))"
+/* .IP "MAIL_SERVER_REQ_LOOP(int *(char *service_name, char **argv))"
 /*     A pointer to function that is executed from
 /*     within the event loop, whenever an I/O or timer event has happened,
 /*     or whenever nothing has happened for a specified amount of time.
 /*     the next event. Specify -1 to wait for "as long as it takes".
 /* .sp
 /*     Only the last instance of this parameter type is remembered.
-/* .IP "MAIL_SERVER_EXIT (void *(void))"
+/* .IP "MAIL_SERVER_REQ_EXIT(void *(void))"
 /*     A pointer to function that is executed immediately before normal
 /*     process termination.
 /* .sp
 /*     Only the last instance of this parameter type is remembered.
-/* .IP "MAIL_SERVER_PRE_ACCEPT (void *(char *service_name, char **argv))"
+/* .IP "MAIL_SERVER_REQ_PRE_ACCEPT(void *(char *service_name, char **argv))"
 /*     Function to be executed prior to accepting a new connection.
 /* .sp
 /*     Only the last instance of this parameter type is remembered.
-/* .IP "MAIL_SERVER_IN_FLOW_DELAY (none)"
+/* .IP "MAIL_SERVER_REQ_IN_FLOW_DELAY(none)"
 /*     Pause $in_flow_delay seconds when no "mail flow control token"
 /*     is available. A token is consumed for each connection request.
-/* .IP MAIL_SERVER_SOLITARY
+/* .IP MAIL_SERVER_REQ_SOLITARY
 /*     This service must be configured with process limit of 1.
-/* .IP MAIL_SERVER_UNLIMITED
+/* .IP MAIL_SERVER_REQ_UNLIMITED
 /*     This service must be configured with process limit of 0.
-/* .IP MAIL_SERVER_PRIVILEGED
+/* .IP MAIL_SERVER_REQ_PRIVILEGED
 /*     This service must be configured as privileged.
-/* .IP "MAIL_SERVER_BOUNCE_INIT (const char *, const char **)"
+/* .IP "MAIL_SERVER_REQ_BOUNCE_INIT(const char *, const char **)"
 /*     Initialize the DSN filter for the bounce/defer service
 /*     clients with the specified map source and map names.
 /* .PP
@@ -270,9 +270,9 @@ static void single_server_wakeup(int fd, HTABLE *attr)
     stream = vstream_fdopen(fd, O_RDWR);
     tmp = concatenate(single_server_name, " socket", (char *) 0);
     vstream_control(stream,
-                   VSTREAM_CTL_PATH, tmp,
-                   VSTREAM_CTL_CONTEXT, (void *) attr,
-                   VSTREAM_CTL_END);
+                   VSTREAM_SCTL_PATH(tmp),
+                   VSTREAM_SCTL_CONTEXT((void *) attr),
+                   VSTREAM_SCTL_END);
     myfree(tmp);
     timed_ipc_setup(stream);
     if (master_notify(var_pid, single_server_generation, MASTER_STAT_TAKEN) < 0)
@@ -743,9 +743,9 @@ NORETURN single_server_main(int argc, char **argv, SINGLE_SERVER_FN service,...)
      */
     if (stream != 0) {
        vstream_control(stream,
-                       VSTREAM_CTL_DOUBLE,
-                       VSTREAM_CTL_WRITE_FD, STDOUT_FILENO,
-                       VSTREAM_CTL_END);
+                       VSTREAM_SCTL_DOUBLE,
+                       VSTREAM_SCTL_WRITE_FD(STDOUT_FILENO),
+                       VSTREAM_SCTL_END);
        service(stream, single_server_name, single_server_argv);
        vstream_fflush(stream);
        single_server_exit();
index ef545eec2820d1f8a96476b39d6367abce4c536c..a7f26c6ca6430f66fe05a5007d974afd21d60d9c 100644 (file)
 /*     after options processing.
 /*     The \fBserver\fR argument provides the following information:
 /* .PP
-/*     Optional arguments are specified as a null-terminated (key, value)
-/*     list. Keys and expected values are:
-/* .IP "MAIL_SERVER_INT_TABLE (CONFIG_INT_TABLE *)"
+/*     Optional arguments are specified as a null-terminated list
+/*     with macros that have zero or more arguments:
+/* .IP "MAIL_SERVER_REQ_INT_TABLE(CONFIG_INT_TABLE *)"
 /*     A table with configurable parameters, to be loaded from the
 /*     global Postfix configuration file. Tables are loaded in the
 /*     order as specified, and multiple instances of the same type
 /*     are allowed.
-/* .IP "MAIL_SERVER_LONG_TABLE (CONFIG_LONG_TABLE *)"
+/* .IP "MAIL_SERVER_REQ_LONG_TABLE(CONFIG_LONG_TABLE *)"
 /*     A table with configurable parameters, to be loaded from the
 /*     global Postfix configuration file. Tables are loaded in the
 /*     order as specified, and multiple instances of the same type
 /*     are allowed.
-/* .IP "MAIL_SERVER_STR_TABLE (CONFIG_STR_TABLE *)"
+/* .IP "MAIL_SERVER_REQ_STR_TABLE(CONFIG_STR_TABLE *)"
 /*     A table with configurable parameters, to be loaded from the
 /*     global Postfix configuration file. Tables are loaded in the
 /*     order as specified, and multiple instances of the same type
 /*     are allowed.
-/* .IP "MAIL_SERVER_BOOL_TABLE (CONFIG_BOOL_TABLE *)"
+/* .IP "MAIL_SERVER_REQ_BOOL_TABLE(CONFIG_BOOL_TABLE *)"
 /*     A table with configurable parameters, to be loaded from the
 /*     global Postfix configuration file. Tables are loaded in the
 /*     order as specified, and multiple instances of the same type
 /*     are allowed.
-/* .IP "MAIL_SERVER_TIME_TABLE (CONFIG_TIME_TABLE *)"
+/* .IP "MAIL_SERVER_REQ_TIME_TABLE(CONFIG_TIME_TABLE *)"
 /*     A table with configurable parameters, to be loaded from the
 /*     global Postfix configuration file. Tables are loaded in the
 /*     order as specified, and multiple instances of the same type
 /*     are allowed.
-/* .IP "MAIL_SERVER_RAW_TABLE (CONFIG_RAW_TABLE *)"
+/* .IP "MAIL_SERVER_REQ_RAW_TABLE(CONFIG_RAW_TABLE *)"
 /*     A table with configurable parameters, to be loaded from the
 /*     global Postfix configuration file. Tables are loaded in the
 /*     order as specified, and multiple instances of the same type
 /*     are allowed. Raw parameters are not subjected to $name
 /*     evaluation.
-/* .IP "MAIL_SERVER_NINT_TABLE (CONFIG_NINT_TABLE *)"
+/* .IP "MAIL_SERVER_REQ_NINT_TABLE(CONFIG_NINT_TABLE *)"
 /*     A table with configurable parameters, to be loaded from the
 /*     global Postfix configuration file. Tables are loaded in the
 /*     order as specified, and multiple instances of the same type
 /*     are allowed.
-/* .IP "MAIL_SERVER_NBOOL_TABLE (CONFIG_NBOOL_TABLE *)"
+/* .IP "MAIL_SERVER_REQ_NBOOL_TABLE(CONFIG_NBOOL_TABLE *)"
 /*     A table with configurable parameters, to be loaded from the
 /*     global Postfix configuration file. Tables are loaded in the
 /*     order as specified, and multiple instances of the same type
 /*     are allowed.
-/* .IP "MAIL_SERVER_PRE_INIT (void *(char *service_name, char **argv))"
+/* .IP "MAIL_SERVER_REQ_PRE_INIT(void *(char *service_name, char **argv))"
 /*     A pointer to a function that is called once
 /*     by the skeleton after it has read the global configuration file
 /*     and after it has processed command-line arguments, but before
 /*     the skeleton has optionally relinquished the process privileges.
 /* .sp
 /*     Only the last instance of this parameter type is remembered.
-/* .IP "MAIL_SERVER_POST_INIT (void *(char *service_name, char **argv))"
+/* .IP "MAIL_SERVER_REQ_POST_INIT(void *(char *service_name, char **argv))"
 /*     A pointer to a function that is called once
 /*     by the skeleton after it has optionally relinquished the process
 /*     privileges, but before servicing client connection requests.
 /* .sp
 /*     Only the last instance of this parameter type is remembered.
-/* .IP "MAIL_SERVER_LOOP (int *(char *service_name, char **argv))"
+/* .IP "MAIL_SERVER_REQ_LOOP(int *(char *service_name, char **argv))"
 /*     A pointer to function that is executed from
 /*     within the event loop, whenever an I/O or timer event has happened,
 /*     or whenever nothing has happened for a specified amount of time.
 /*     the next event. Specify -1 to wait for "as long as it takes".
 /* .sp
 /*     Only the last instance of this parameter type is remembered.
-/* .IP "MAIL_SERVER_EXIT (void *(char *service_name, char **argv))"
+/* .IP "MAIL_SERVER_REQ_EXIT(void *(char *service_name, char **argv))"
 /*     A pointer to function that is executed immediately before normal
 /*     process termination.
 /* .sp
 /*     Only the last instance of this parameter type is remembered.
-/* .IP "MAIL_SERVER_PRE_ACCEPT (void *(char *service_name, char **argv))"
+/* .IP "MAIL_SERVER_REQ_PRE_ACCEPT(void *(char *service_name, char **argv))"
 /*     Function to be executed prior to accepting a new request.
 /* .sp
 /*     Only the last instance of this parameter type is remembered.
-/* .IP "MAIL_SERVER_IN_FLOW_DELAY (none)"
+/* .IP "MAIL_SERVER_REQ_IN_FLOW_DELAY(none)"
 /*     Pause $in_flow_delay seconds when no "mail flow control token"
 /*     is available. A token is consumed for each connection request.
-/* .IP MAIL_SERVER_SOLITARY
+/* .IP MAIL_SERVER_REQ_SOLITARY
 /*     This service must be configured with process limit of 1.
-/* .IP MAIL_SERVER_UNLIMITED
+/* .IP MAIL_SERVER_REQ_UNLIMITED
 /*     This service must be configured with process limit of 0.
-/* .IP MAIL_SERVER_PRIVILEGED
+/* .IP MAIL_SERVER_REQ_PRIVILEGED
 /*     This service must be configured as privileged.
-/* .IP "MAIL_SERVER_WATCHDOG (int *)"
+/* .IP "MAIL_SERVER_REQ_WATCHDOG(int *)"
 /*     Override the default 1000s watchdog timeout. The value is
 /*     used after command-line and main.cf file processing.
-/* .IP "MAIL_SERVER_BOUNCE_INIT (const char *, const char **)"
+/* .IP "MAIL_SERVER_REQ_BOUNCE_INIT(const char *, const char **)"
 /*     Initialize the DSN filter for the bounce/defer service
 /*     clients with the specified map source and map names.
 /* .PP
index 5b067a5323230192d773386909b37b9e8a29ee69..734bf4cb768b53d7957d15cc0079149fca981e4f 100644 (file)
@@ -622,9 +622,9 @@ MILTERS *milter_new(const char *names,
                if ((name = mystrtok(&op, sep)) == 0)
                    msg_fatal("empty milter definition: \"%s\"", names);
                attr_override(op, sep, parens,
-                             ATTR_OVER_STR_TABLE, str_table,
-                             ATTR_OVER_TIME_TABLE, time_table,
-                             0);
+                             ATTR_OVER_REQ_STR_TABLE(str_table),
+                             ATTR_OVER_REQ_TIME_TABLE(time_table),
+                             ATTR_OVER_REQ_END);
            }
            milter = milter8_create(name, my_conn_timeout, my_cmd_timeout,
                                    my_msg_timeout, my_protocol,
index c813d3c8b1af64eb5f31aeab0b6dbce93f28d7bf..f6c11d2ebdc6fa2a39c61a0a4c55788f5db4617b 100644 (file)
@@ -1723,9 +1723,9 @@ static void milter8_connect(MILTER8 *milter)
     myfree(transport);
     milter->fp = vstream_fdopen(fd, O_RDWR);
     vstream_control(milter->fp,
-                   VSTREAM_CTL_DOUBLE,
-                   VSTREAM_CTL_TIMEOUT, milter->cmd_timeout,
-                   VSTREAM_CTL_END);
+                   VSTREAM_SCTL_DOUBLE,
+                   VSTREAM_SCTL_TIMEOUT(milter->cmd_timeout),
+                   VSTREAM_SCTL_END);
     /* Avoid poor performance when TCP MSS > VSTREAM_BUFSIZE. */
     if (connect_fn == inet_connect)
        vstream_tweak_tcp(milter->fp);
@@ -2567,9 +2567,9 @@ static const char *milter8_message(MILTER *m, VSTREAM *qfile,
        milter->state = MILTER8_STAT_MESSAGE;
        VSTRING_RESET(milter->body);
        vstream_control(milter->fp,
-                       VSTREAM_CTL_DOUBLE,
-                       VSTREAM_CTL_TIMEOUT, milter->msg_timeout,
-                       VSTREAM_CTL_END);
+                       VSTREAM_SCTL_DOUBLE,
+                       VSTREAM_SCTL_TIMEOUT(milter->msg_timeout),
+                       VSTREAM_SCTL_END);
 
        /*
         * XXX When the message (not MIME body part) does not end in CRLF
@@ -2602,9 +2602,9 @@ static const char *milter8_message(MILTER *m, VSTREAM *qfile,
        vstring_free(buf);
        if (milter->fp)
            vstream_control(milter->fp,
-                           VSTREAM_CTL_DOUBLE,
-                           VSTREAM_CTL_TIMEOUT, milter->cmd_timeout,
-                           VSTREAM_CTL_END);
+                           VSTREAM_SCTL_DOUBLE,
+                           VSTREAM_SCTL_TIMEOUT(milter->cmd_timeout),
+                           VSTREAM_SCTL_END);
        if (milter->state == MILTER8_STAT_MESSAGE
            || milter->state == MILTER8_STAT_ACCEPT_MSG)
            milter->state = MILTER8_STAT_ENVELOPE;
@@ -2782,7 +2782,7 @@ MILTER *milter8_receive(VSTREAM *stream, MILTERS *parent)
                            msg_timeout, NO_PROTOCOL, STR(act_buf), parent);
        milter->fp = vstream_fdopen(fd, O_RDWR);
        milter->m.macros = macros;
-       vstream_control(milter->fp, VSTREAM_CTL_DOUBLE, VSTREAM_CTL_END);
+       vstream_control(milter->fp, VSTREAM_SCTL_DOUBLE, VSTREAM_SCTL_END);
        /* Avoid poor performance when TCP MSS > VSTREAM_BUFSIZE. */
        vstream_tweak_sock(milter->fp);
        milter->version = version;
index 07148f55ec82b762fadb442604ce16b5f5357e9f..8a2ac56b09beee02e3c777635b78bd379b24d153 100644 (file)
@@ -196,6 +196,7 @@ qmgr_deliver.o: ../../include/vstring.h
 qmgr_deliver.o: ../../include/vstring_vstream.h
 qmgr_deliver.o: qmgr.h
 qmgr_deliver.o: qmgr_deliver.c
+qmgr_enable.o: ../../include/check_arg.h
 qmgr_enable.o: ../../include/dsn.h
 qmgr_enable.o: ../../include/msg.h
 qmgr_enable.o: ../../include/recipient_list.h
@@ -224,6 +225,7 @@ qmgr_entry.o: ../../include/vstream.h
 qmgr_entry.o: ../../include/vstring.h
 qmgr_entry.o: qmgr.h
 qmgr_entry.o: qmgr_entry.c
+qmgr_error.o: ../../include/check_arg.h
 qmgr_error.o: ../../include/dsn.h
 qmgr_error.o: ../../include/mymalloc.h
 qmgr_error.o: ../../include/recipient_list.h
@@ -235,6 +237,7 @@ qmgr_error.o: ../../include/vstream.h
 qmgr_error.o: ../../include/vstring.h
 qmgr_error.o: qmgr.h
 qmgr_error.o: qmgr_error.c
+qmgr_feedback.o: ../../include/check_arg.h
 qmgr_feedback.o: ../../include/dsn.h
 qmgr_feedback.o: ../../include/mail_conf.h
 qmgr_feedback.o: ../../include/mail_params.h
@@ -292,6 +295,7 @@ qmgr_message.o: ../../include/vstream.h
 qmgr_message.o: ../../include/vstring.h
 qmgr_message.o: qmgr.h
 qmgr_message.o: qmgr_message.c
+qmgr_move.o: ../../include/check_arg.h
 qmgr_move.o: ../../include/dsn.h
 qmgr_move.o: ../../include/mail_queue.h
 qmgr_move.o: ../../include/mail_scan_dir.h
@@ -323,6 +327,7 @@ qmgr_queue.o: ../../include/vstream.h
 qmgr_queue.o: ../../include/vstring.h
 qmgr_queue.o: qmgr.h
 qmgr_queue.o: qmgr_queue.c
+qmgr_scan.o: ../../include/check_arg.h
 qmgr_scan.o: ../../include/dsn.h
 qmgr_scan.o: ../../include/mail_scan_dir.h
 qmgr_scan.o: ../../include/msg.h
index daef4cea722ba4615856df0f3584f0b3b5f41747..8befbfffc666546ecf992e2a0675af0a60671d96 100644 (file)
@@ -669,15 +669,15 @@ int     main(int argc, char **argv)
      * not talk back to the client.
      */
     trigger_server_main(argc, argv, qmgr_trigger_event,
-                       MAIL_SERVER_INT_TABLE, int_table,
-                       MAIL_SERVER_STR_TABLE, str_table,
-                       MAIL_SERVER_BOOL_TABLE, bool_table,
-                       MAIL_SERVER_TIME_TABLE, time_table,
-                       MAIL_SERVER_PRE_INIT, qmgr_pre_init,
-                       MAIL_SERVER_POST_INIT, qmgr_post_init,
-                       MAIL_SERVER_LOOP, qmgr_loop,
-                       MAIL_SERVER_PRE_ACCEPT, pre_accept,
-                       MAIL_SERVER_SOLITARY,
-                       MAIL_SERVER_WATCHDOG, &var_qmgr_daemon_timeout,
+                       MAIL_SERVER_REQ_INT_TABLE(int_table),
+                       MAIL_SERVER_REQ_STR_TABLE(str_table),
+                       MAIL_SERVER_REQ_BOOL_TABLE(bool_table),
+                       MAIL_SERVER_REQ_TIME_TABLE(time_table),
+                       MAIL_SERVER_REQ_PRE_INIT(qmgr_pre_init),
+                       MAIL_SERVER_REQ_POST_INIT(qmgr_post_init),
+                       MAIL_SERVER_REQ_LOOP(qmgr_loop),
+                       MAIL_SERVER_REQ_PRE_ACCEPT(pre_accept),
+                       MAIL_SERVER_REQ_SOLITARY,
+                       MAIL_SERVER_REQ_WATCHDOG(&var_qmgr_daemon_timeout),
                        0);
 }
index aaacb03e0df19f7b3d73dd22f99ecaef88e3c242..ac80da3442d550f1fe30b7b7fe7b35095b0c6551 100644 (file)
@@ -344,13 +344,13 @@ void    qmgr_transport_alloc(QMGR_TRANSPORT *transport, QMGR_TRANSPORT_ALLOC_NOT
        event_request_timer(qmgr_transport_event, (void *) alloc, 0);
        return;
     }
-#if (EVENTS_STYLE != EVENTS_STYLE_SELECT) && defined(VSTREAM_CTL_DUPFD)
+#if (EVENTS_STYLE != EVENTS_STYLE_SELECT) && defined(VSTREAM_SCTL_DUPFD)
 #ifndef THRESHOLD_FD_WORKAROUND
 #define THRESHOLD_FD_WORKAROUND 128
 #endif
     vstream_control(alloc->stream,
-                   VSTREAM_CTL_DUPFD, THRESHOLD_FD_WORKAROUND,
-                   VSTREAM_CTL_END);
+                   VSTREAM_SCTL_DUPFD(THRESHOLD_FD_WORKAROUND),
+                   VSTREAM_SCTL_END);
 #endif
     event_enable_read(vstream_fileno(alloc->stream), qmgr_transport_event,
                      (void *) alloc);
index 1b11fda2873a3c096cd795a3a4344569e229d663..32db5314e25c7983a0f9babc77c7c05642e80591 100644 (file)
@@ -605,9 +605,9 @@ int     main(int argc, char **argv)
      * submissions.
      */
     trigger_server_main(argc, argv, pickup_service,
-                       MAIL_SERVER_STR_TABLE, str_table,
-                       MAIL_SERVER_POST_INIT, post_jail_init,
-                       MAIL_SERVER_SOLITARY,
-                       MAIL_SERVER_WATCHDOG, &var_daemon_timeout,
+                       MAIL_SERVER_REQ_STR_TABLE(str_table),
+                       MAIL_SERVER_REQ_POST_INIT(post_jail_init),
+                       MAIL_SERVER_REQ_SOLITARY,
+                       MAIL_SERVER_REQ_WATCHDOG(&var_daemon_timeout),
                        0);
 }
index a92af58fe34a9b0e2e1a94b2b4865f3a50d69119..b1481ccf1f656e2f81fa326c4250b192a871450a 100644 (file)
@@ -1270,19 +1270,19 @@ static int deliver_message(DELIVER_REQUEST *request, char *service, char **argv)
     export_env = mail_parm_split(VAR_EXPORT_ENVIRON, var_export_environ);
 
     command_status = pipe_command(request->fp, why,
-                                 PIPE_CMD_UID, attr.uid,
-                                 PIPE_CMD_GID, attr.gid,
-                                 PIPE_CMD_SENDER, sender,
-                                 PIPE_CMD_COPY_FLAGS, attr.flags,
-                                 PIPE_CMD_ARGV, expanded_argv->argv,
-                                 PIPE_CMD_TIME_LIMIT, conf.time_limit,
-                                 PIPE_CMD_EOL, STR(attr.eol),
-                                 PIPE_CMD_EXPORT, export_env->argv,
-                                 PIPE_CMD_CWD, attr.exec_dir,
-                                 PIPE_CMD_CHROOT, attr.chroot_dir,
-                          PIPE_CMD_ORIG_RCPT, rcpt_list->info[0].orig_addr,
-                            PIPE_CMD_DELIVERED, rcpt_list->info[0].address,
-                                 PIPE_CMD_END);
+                                 PIPE_SCMD_UID(attr.uid),
+                                 PIPE_SCMD_GID(attr.gid),
+                                 PIPE_SCMD_SENDER(sender),
+                                 PIPE_SCMD_COPY_FLAGS(attr.flags),
+                                 PIPE_SCMD_ARGV(expanded_argv->argv),
+                                 PIPE_SCMD_TIME_LIMIT(conf.time_limit),
+                                 PIPE_SCMD_EOL(STR(attr.eol)),
+                                 PIPE_SCMD_EXPORT(export_env->argv),
+                                 PIPE_SCMD_CWD(attr.exec_dir),
+                                 PIPE_SCMD_CHROOT(attr.chroot_dir),
+                         PIPE_SCMD_ORIG_RCPT(rcpt_list->info[0].orig_addr),
+                           PIPE_SCMD_DELIVERED(rcpt_list->info[0].address),
+                                 PIPE_SCMD_END);
     argv_free(export_env);
 
     deliver_status = eval_command_status(command_status, service, request,
@@ -1364,13 +1364,13 @@ int     main(int argc, char **argv)
     MAIL_VERSION_STAMP_ALLOCATE;
 
     single_server_main(argc, argv, pipe_service,
-                      MAIL_SERVER_TIME_TABLE, time_table,
-                      MAIL_SERVER_STR_TABLE, str_table,
-                      MAIL_SERVER_PRE_INIT, pre_init,
-                      MAIL_SERVER_POST_INIT, drop_privileges,
-                      MAIL_SERVER_PRE_ACCEPT, pre_accept,
-                      MAIL_SERVER_PRIVILEGED,
-                      MAIL_SERVER_BOUNCE_INIT, VAR_PIPE_DSN_FILTER,
-                      &var_pipe_dsn_filter,
+                      MAIL_SERVER_REQ_TIME_TABLE(time_table),
+                      MAIL_SERVER_REQ_STR_TABLE(str_table),
+                      MAIL_SERVER_REQ_PRE_INIT(pre_init),
+                      MAIL_SERVER_REQ_POST_INIT(drop_privileges),
+                      MAIL_SERVER_REQ_PRE_ACCEPT(pre_accept),
+                      MAIL_SERVER_REQ_PRIVILEGED,
+                      MAIL_SERVER_REQ_BOUNCE_INIT(VAR_PIPE_DSN_FILTER,
+                                                  &var_pipe_dsn_filter),
                       0);
 }
index 2f731eb80f60680722760364251f0a62cfabe20b..7982af60395a4890ca2a7ca22d339c8c2a6265d0 100644 (file)
@@ -54,7 +54,7 @@ test2:        $(PROG) map.in map-abc2.ref map-ghi2.ref map-uABC2.ref
        rm -f map.in.db
 
 fail_test: $(PROG) aliases fail_test.in fail_test.ref
-       -sh fail_test.in > fail_test.tmp 2>&1 || exit 0
+       -(sh fail_test.in 2>&1 || exit 0) | sed 's/No error:/Unknown error:/' > fail_test.tmp
        diff fail_test.ref fail_test.tmp
        rm -f fail_test.tmp
 
@@ -88,6 +88,7 @@ depend: $(MAKES)
 
 # do not edit below this line - it is generated by 'make depend'
 postalias.o: ../../include/argv.h
+postalias.o: ../../include/check_arg.h
 postalias.o: ../../include/dict.h
 postalias.o: ../../include/dict_proxy.h
 postalias.o: ../../include/mail_conf.h
index 7105d30f96ad3990e1ace0e17d496bea6043bbe0..4684892ec3112f47a3f3afd30a536606b4b7be25 100644 (file)
@@ -282,7 +282,7 @@ static void postalias(char *map_type, char *path_name, int postalias_flags,
     if ((open_flags & O_TRUNC) == 0) {
        /* Incremental mode. */
        source_fp = VSTREAM_IN;
-       vstream_control(source_fp, VSTREAM_CTL_PATH, "stdin", VSTREAM_CTL_END);
+       vstream_control(source_fp, VSTREAM_SCTL_PATH("stdin"), VSTREAM_SCTL_END);
     } else {
        /* Create database. */
        if (strcmp(map_type, DICT_TYPE_PROXY) == 0)
index 3d9b5158b136f8910373ff15694deb1cc2d0df27..5795c34f547d7f7fb4992178048e518a6a9471de 100644 (file)
@@ -236,7 +236,7 @@ static void postcat(VSTREAM *fp, VSTRING *buffer, int flags)
                /* Optimization: skip to extracted segment marker. */
                if (do_print == 0 && (flags & PC_FLAG_PRINT_ENV)
                    && data_offset >= 0 && data_size >= 0
-                   && vstream_fseek(fp, data_offset + data_size, SEEK_SET) < 0)
+               && vstream_fseek(fp, data_offset + data_size, SEEK_SET) < 0)
                    msg_fatal("seek error: %m");
            }
            /* Optional output happens further down below. */
@@ -492,8 +492,8 @@ int     main(int argc, char **argv)
      */
     if (argc == optind) {
        vstream_control(VSTREAM_IN,
-                       VSTREAM_CTL_PATH, "stdin",
-                       VSTREAM_CTL_END);
+                       VSTREAM_SCTL_PATH("stdin"),
+                       VSTREAM_SCTL_END);
        postcat(VSTREAM_IN, buffer, flags);
     }
 
index 78f22f3531ecab9052084fc8db48f14e64f3c8dd..186ca86b35da3b1e5d5640a546b776d6633ad095 100644 (file)
@@ -834,6 +834,7 @@ depend: $(MAKES)
 
 # do not edit below this line - it is generated by 'make depend'
 postconf.o: ../../include/argv.h
+postconf.o: ../../include/check_arg.h
 postconf.o: ../../include/dict.h
 postconf.o: ../../include/htable.h
 postconf.o: ../../include/mail_conf.h
@@ -903,6 +904,7 @@ postconf_builtin.o: str_vars.h
 postconf_builtin.o: time_table.h
 postconf_builtin.o: time_vars.h
 postconf_dbms.o: ../../include/argv.h
+postconf_dbms.o: ../../include/check_arg.h
 postconf_dbms.o: ../../include/dict.h
 postconf_dbms.o: ../../include/dict_ldap.h
 postconf_dbms.o: ../../include/dict_memcache.h
@@ -928,6 +930,7 @@ postconf_dbms.o: ../../include/vstring.h
 postconf_dbms.o: postconf.h
 postconf_dbms.o: postconf_dbms.c
 postconf_edit.o: ../../include/argv.h
+postconf_edit.o: ../../include/check_arg.h
 postconf_edit.o: ../../include/dict.h
 postconf_edit.o: ../../include/edit_file.h
 postconf_edit.o: ../../include/htable.h
@@ -947,6 +950,7 @@ postconf_edit.o: ../../include/vstring_vstream.h
 postconf_edit.o: postconf.h
 postconf_edit.o: postconf_edit.c
 postconf_lookup.o: ../../include/argv.h
+postconf_lookup.o: ../../include/check_arg.h
 postconf_lookup.o: ../../include/dict.h
 postconf_lookup.o: ../../include/htable.h
 postconf_lookup.o: ../../include/mac_expand.h
@@ -964,6 +968,7 @@ postconf_lookup.o: ../../include/vstring.h
 postconf_lookup.o: postconf.h
 postconf_lookup.o: postconf_lookup.c
 postconf_main.o: ../../include/argv.h
+postconf_main.o: ../../include/check_arg.h
 postconf_main.o: ../../include/dict.h
 postconf_main.o: ../../include/htable.h
 postconf_main.o: ../../include/mac_expand.h
@@ -983,6 +988,7 @@ postconf_main.o: ../../include/vstring.h
 postconf_main.o: postconf.h
 postconf_main.o: postconf_main.c
 postconf_master.o: ../../include/argv.h
+postconf_master.o: ../../include/check_arg.h
 postconf_master.o: ../../include/dict.h
 postconf_master.o: ../../include/htable.h
 postconf_master.o: ../../include/mail_params.h
@@ -1001,6 +1007,7 @@ postconf_master.o: ../../include/vstring.h
 postconf_master.o: postconf.h
 postconf_master.o: postconf_master.c
 postconf_match.o: ../../include/argv.h
+postconf_match.o: ../../include/check_arg.h
 postconf_match.o: ../../include/dict.h
 postconf_match.o: ../../include/htable.h
 postconf_match.o: ../../include/msg.h
@@ -1015,6 +1022,7 @@ postconf_match.o: ../../include/vstring.h
 postconf_match.o: postconf.h
 postconf_match.o: postconf_match.c
 postconf_misc.o: ../../include/argv.h
+postconf_misc.o: ../../include/check_arg.h
 postconf_misc.o: ../../include/dict.h
 postconf_misc.o: ../../include/htable.h
 postconf_misc.o: ../../include/mail_conf.h
@@ -1030,6 +1038,7 @@ postconf_misc.o: ../../include/vstring.h
 postconf_misc.o: postconf.h
 postconf_misc.o: postconf_misc.c
 postconf_node.o: ../../include/argv.h
+postconf_node.o: ../../include/check_arg.h
 postconf_node.o: ../../include/dict.h
 postconf_node.o: ../../include/htable.h
 postconf_node.o: ../../include/msg.h
@@ -1043,6 +1052,7 @@ postconf_node.o: ../../include/vstring.h
 postconf_node.o: postconf.h
 postconf_node.o: postconf_node.c
 postconf_other.o: ../../include/argv.h
+postconf_other.o: ../../include/check_arg.h
 postconf_other.o: ../../include/dict.h
 postconf_other.o: ../../include/htable.h
 postconf_other.o: ../../include/mbox_conf.h
@@ -1056,6 +1066,7 @@ postconf_other.o: ../../include/xsasl.h
 postconf_other.o: postconf.h
 postconf_other.o: postconf_other.c
 postconf_print.o: ../../include/argv.h
+postconf_print.o: ../../include/check_arg.h
 postconf_print.o: ../../include/dict.h
 postconf_print.o: ../../include/htable.h
 postconf_print.o: ../../include/msg.h
@@ -1068,6 +1079,7 @@ postconf_print.o: ../../include/vstring.h
 postconf_print.o: postconf.h
 postconf_print.o: postconf_print.c
 postconf_service.o: ../../include/argv.h
+postconf_service.o: ../../include/check_arg.h
 postconf_service.o: ../../include/dict.h
 postconf_service.o: ../../include/htable.h
 postconf_service.o: ../../include/mail_params.h
@@ -1083,6 +1095,7 @@ postconf_service.o: ../../include/vstring.h
 postconf_service.o: postconf.h
 postconf_service.o: postconf_service.c
 postconf_unused.o: ../../include/argv.h
+postconf_unused.o: ../../include/check_arg.h
 postconf_unused.o: ../../include/dict.h
 postconf_unused.o: ../../include/htable.h
 postconf_unused.o: ../../include/mail_conf.h
@@ -1097,6 +1110,7 @@ postconf_unused.o: ../../include/vstring.h
 postconf_unused.o: postconf.h
 postconf_unused.o: postconf_unused.c
 postconf_user.o: ../../include/argv.h
+postconf_user.o: ../../include/check_arg.h
 postconf_user.o: ../../include/dict.h
 postconf_user.o: ../../include/htable.h
 postconf_user.o: ../../include/mac_expand.h
index 14e32066368e27d0017a61abc2ef82b5edfbb56f..0d5c967812c99d4473fa0ac1936a9cdb404a3a07 100644 (file)
@@ -393,7 +393,7 @@ int     main(int argc, char **argv)
      * Allow attribute records if the attribute specifies the MIME body type
      * (sendmail -B).
      */
-    vstream_control(VSTREAM_IN, VSTREAM_CTL_PATH, "stdin", VSTREAM_CTL_END);
+    vstream_control(VSTREAM_IN, VSTREAM_SCTL_PATH("stdin"), VSTREAM_SCTL_END);
     buf = vstring_alloc(100);
     expected = segment_info;
     /* Override time information from the untrusted caller. */
index 2b4281d35dbcb9375bff1bc78817b4cbe20dda50..9be4ec19076836151c5622a8cdf59b2842788e95 100644 (file)
@@ -63,6 +63,7 @@ depend: $(MAKES)
 
 # do not edit below this line - it is generated by 'make depend'
 postfix.o: ../../include/argv.h
+postfix.o: ../../include/check_arg.h
 postfix.o: ../../include/clean_env.h
 postfix.o: ../../include/mail_conf.h
 postfix.o: ../../include/mail_params.h
index 1715d719cb2d2bcdb88c942884e3e4dba3cb7161..d14c31a3209fa7b488a6343000da3f709a9bea8c 100644 (file)
@@ -59,6 +59,7 @@ depend: $(MAKES)
 
 # do not edit below this line - it is generated by 'make depend'
 postlock.o: ../../include/argv.h
+postlock.o: ../../include/check_arg.h
 postlock.o: ../../include/deliver_flock.h
 postlock.o: ../../include/dot_lockfile.h
 postlock.o: ../../include/dsn.h
index 0cc87284244fb4c28e7c50532525ea0c6cfba618..76fda9b6e6cc3b0af97e481eea4aac6204696b1d 100644 (file)
@@ -62,6 +62,7 @@ depend: $(MAKES)
        @$(EXPORT) make -f Makefile.in Makefile 1>&2
 
 # do not edit below this line - it is generated by 'make depend'
+postlog.o: ../../include/check_arg.h
 postlog.o: ../../include/mail_conf.h
 postlog.o: ../../include/mail_params.h
 postlog.o: ../../include/mail_task.h
index 5f7dc6ad7d1b1a6072e73a5be568e276bf7f0289..f5bed55044d526dd4ad1d2f3e8c5543b941165c2 100644 (file)
@@ -57,7 +57,8 @@ test2:        $(PROG) map.in map-abc2.ref map-ghi2.ref map-uABC2.ref
        rm -f map.in.db
 
 fail_test: $(PROG) aliases fail_test.in fail_test.ref
-       -sh fail_test.in > fail_test.tmp 2>&1 || exit 0
+       -(sh fail_test.in || exit 0) 2>&1 | \
+           sed 's/No error:/Unknown error:/' > fail_test.tmp
        diff fail_test.ref fail_test.tmp
        rm -f fail_test.tmp
 
@@ -88,6 +89,7 @@ depend: $(MAKES)
 
 # do not edit below this line - it is generated by 'make depend'
 postmap.o: ../../include/argv.h
+postmap.o: ../../include/check_arg.h
 postmap.o: ../../include/dict.h
 postmap.o: ../../include/dict_proxy.h
 postmap.o: ../../include/header_opts.h
index aae3b81f5176f0bb31144b3f82e3b5ca409f08cb..cf8d6ff6138266d88d82a118b8b1efdb63ae3726 100644 (file)
@@ -345,7 +345,7 @@ static void postmap(char *map_type, char *path_name, int postmap_flags,
     if ((open_flags & O_TRUNC) == 0) {
        /* Incremental mode. */
        source_fp = VSTREAM_IN;
-       vstream_control(source_fp, VSTREAM_CTL_PATH, "stdin", VSTREAM_CTL_END);
+       vstream_control(source_fp, VSTREAM_SCTL_PATH("stdin"), VSTREAM_SCTL_END);
     } else {
        /* Create database. */
        if (strcmp(map_type, DICT_TYPE_PROXY) == 0)
index 059fcfea55b5c9f9e9a5d7d4cc6d9773446e617a..b2ba77ede2019c89b5a9eb8a9aabcca04da38894 100644 (file)
@@ -63,6 +63,7 @@ depend: $(MAKES)
 
 # do not edit below this line - it is generated by 'make depend'
 postmulti.o: ../../include/argv.h
+postmulti.o: ../../include/check_arg.h
 postmulti.o: ../../include/clean_env.h
 postmulti.o: ../../include/htable.h
 postmulti.o: ../../include/mail_conf.h
index 0ad8d568640912471a86a7c25907bdcf2353e850..99320e98559724233b9dd87050aca98a87c1afc4 100644 (file)
@@ -801,8 +801,8 @@ static INSTANCE *load_instance(INSTANCE *ip)
             VAR_MULTI_NAME, VAR_MULTI_GROUP, VAR_MULTI_ENABLE,
             (char *) 0);
     myfree(name);
-    pipe = vstream_popen(O_RDONLY, VSTREAM_POPEN_ARGV, cmd->argv,
-                        VSTREAM_POPEN_END);
+    pipe = vstream_popen(O_RDONLY, VSTREAM_SPOPEN_ARGV(cmd->argv),
+                        VSTREAM_SPOPEN_END);
     argv_free(cmd);
     if (pipe == 0)
        msg_fatal("Cannot parse %s/main.cf file: %m", ip->config_dir);
index 5ccbb12445128e17b2af6b8cee7a6e7dc294fac0..f241afc6cfb7c847eb1cc1e54e4bfd7ab5147ef9 100644 (file)
@@ -105,6 +105,7 @@ postscreen.o: postscreen.c
 postscreen.o: postscreen.h
 postscreen_dict.o: ../../include/addr_match_list.h
 postscreen_dict.o: ../../include/argv.h
+postscreen_dict.o: ../../include/check_arg.h
 postscreen_dict.o: ../../include/dict.h
 postscreen_dict.o: ../../include/dict_cache.h
 postscreen_dict.o: ../../include/events.h
@@ -155,6 +156,7 @@ postscreen_dnsbl.o: postscreen.h
 postscreen_dnsbl.o: postscreen_dnsbl.c
 postscreen_early.o: ../../include/addr_match_list.h
 postscreen_early.o: ../../include/argv.h
+postscreen_early.o: ../../include/check_arg.h
 postscreen_early.o: ../../include/dict.h
 postscreen_early.o: ../../include/dict_cache.h
 postscreen_early.o: ../../include/events.h
@@ -177,6 +179,7 @@ postscreen_early.o: postscreen.h
 postscreen_early.o: postscreen_early.c
 postscreen_endpt.o: ../../include/addr_match_list.h
 postscreen_endpt.o: ../../include/argv.h
+postscreen_endpt.o: ../../include/check_arg.h
 postscreen_endpt.o: ../../include/dict.h
 postscreen_endpt.o: ../../include/dict_cache.h
 postscreen_endpt.o: ../../include/events.h
@@ -227,6 +230,7 @@ postscreen_expand.o: postscreen.h
 postscreen_expand.o: postscreen_expand.c
 postscreen_haproxy.o: ../../include/addr_match_list.h
 postscreen_haproxy.o: ../../include/argv.h
+postscreen_haproxy.o: ../../include/check_arg.h
 postscreen_haproxy.o: ../../include/dict.h
 postscreen_haproxy.o: ../../include/dict_cache.h
 postscreen_haproxy.o: ../../include/events.h
@@ -251,6 +255,7 @@ postscreen_haproxy.o: postscreen_haproxy.c
 postscreen_haproxy.o: postscreen_haproxy.h
 postscreen_misc.o: ../../include/addr_match_list.h
 postscreen_misc.o: ../../include/argv.h
+postscreen_misc.o: ../../include/check_arg.h
 postscreen_misc.o: ../../include/dict.h
 postscreen_misc.o: ../../include/dict_cache.h
 postscreen_misc.o: ../../include/events.h
@@ -379,6 +384,7 @@ postscreen_state.o: ../../include/dict_cache.h
 postscreen_state.o: ../../include/events.h
 postscreen_state.o: ../../include/htable.h
 postscreen_state.o: ../../include/iostuff.h
+postscreen_state.o: ../../include/mail_conf.h
 postscreen_state.o: ../../include/mail_proto.h
 postscreen_state.o: ../../include/mail_server.h
 postscreen_state.o: ../../include/maps.h
@@ -399,6 +405,7 @@ postscreen_state.o: postscreen.h
 postscreen_state.o: postscreen_state.c
 postscreen_tests.o: ../../include/addr_match_list.h
 postscreen_tests.o: ../../include/argv.h
+postscreen_tests.o: ../../include/check_arg.h
 postscreen_tests.o: ../../include/dict.h
 postscreen_tests.o: ../../include/dict_cache.h
 postscreen_tests.o: ../../include/events.h
index 8e621885c5ecc9f06b7e3aad8ecf3ffff6ec000e..725945ccac29f02bed1f9ce95e6fc77e521db709 100644 (file)
@@ -549,7 +549,7 @@ static void psc_endpt_lookup_done(int, VSTREAM *,
 
 /* psc_dump - dump some statistics before exit */
 
-static void psc_dump(void)
+static void psc_dump(char *unused_service, char **unused_argv)
 {
 
     /*
@@ -821,7 +821,7 @@ static void psc_endpt_lookup_done(int endpt_status,
 
 static int psc_cache_validator(const char *client_addr,
                                       const char *stamp_str,
-                                      char *unused_context)
+                                      void *unused_context)
 {
     PSC_STATE dummy;
 
@@ -1010,11 +1010,11 @@ static void post_jail_init(char *unused_name, char **unused_argv)
        cache_flags |= DICT_CACHE_FLAG_VERBOSE;
     if (psc_cache_map != 0 && var_psc_cache_scan > 0)
        dict_cache_control(psc_cache_map,
-                          DICT_CACHE_CTL_FLAGS, cache_flags,
-                          DICT_CACHE_CTL_INTERVAL, var_psc_cache_scan,
-                          DICT_CACHE_CTL_VALIDATOR, psc_cache_validator,
-                          DICT_CACHE_CTL_CONTEXT, (void *) 0,
-                          DICT_CACHE_CTL_END);
+                          DICT_CACHE_SCTL_FLAGS(cache_flags),
+                          DICT_CACHE_SCTL_INTERVAL(var_psc_cache_scan),
+                          DICT_CACHE_SCTL_VALIDATOR(psc_cache_validator),
+                          DICT_CACHE_SCTL_CONTEXT((void *) 0),
+                          DICT_CACHE_SCTL_END);
 
     /*
      * Pre-compute the minimal and maximal TTL.
@@ -1164,19 +1164,19 @@ int     main(int argc, char **argv)
     MAIL_VERSION_STAMP_ALLOCATE;
 
     event_server_main(argc, argv, psc_service,
-                     MAIL_SERVER_STR_TABLE, str_table,
-                     MAIL_SERVER_INT_TABLE, int_table,
-                     MAIL_SERVER_NINT_TABLE, nint_table,
-                     MAIL_SERVER_TIME_TABLE, time_table,
-                     MAIL_SERVER_BOOL_TABLE, bool_table,
-                     MAIL_SERVER_RAW_TABLE, raw_table,
-                     MAIL_SERVER_NBOOL_TABLE, nbool_table,
-                     MAIL_SERVER_PRE_INIT, pre_jail_init,
-                     MAIL_SERVER_POST_INIT, post_jail_init,
-                     MAIL_SERVER_PRE_ACCEPT, pre_accept,
-                     MAIL_SERVER_SOLITARY,
-                     MAIL_SERVER_SLOW_EXIT, psc_drain,
-                     MAIL_SERVER_EXIT, psc_dump,
-                     MAIL_SERVER_WATCHDOG, &var_psc_watchdog,
+                     MAIL_SERVER_REQ_STR_TABLE(str_table),
+                     MAIL_SERVER_REQ_INT_TABLE(int_table),
+                     MAIL_SERVER_REQ_NINT_TABLE(nint_table),
+                     MAIL_SERVER_REQ_TIME_TABLE(time_table),
+                     MAIL_SERVER_REQ_BOOL_TABLE(bool_table),
+                     MAIL_SERVER_REQ_RAW_TABLE(raw_table),
+                     MAIL_SERVER_REQ_NBOOL_TABLE(nbool_table),
+                     MAIL_SERVER_REQ_PRE_INIT(pre_jail_init),
+                     MAIL_SERVER_REQ_POST_INIT(post_jail_init),
+                     MAIL_SERVER_REQ_PRE_ACCEPT(pre_accept),
+                     MAIL_SERVER_REQ_SOLITARY,
+                     MAIL_SERVER_REQ_SLOW_EXIT(psc_drain),
+                     MAIL_SERVER_REQ_EXIT(psc_dump),
+                     MAIL_SERVER_REQ_WATCHDOG(&var_psc_watchdog),
                      0);
 }
index 8d51673385e372661b09959d6713ab909f4806b8..38d352610ff6cb9b72083644d51c61a91df31a34 100644 (file)
@@ -506,8 +506,8 @@ int     psc_dnsbl_request(const char *client_addr,
        }
        stream = vstream_fdopen(fd, O_RDWR);
        vstream_control(stream,
-                       VSTREAM_CTL_CONTEXT, ht[0]->key,
-                       VSTREAM_CTL_END);
+                       VSTREAM_SCTL_CONTEXT(ht[0]->key),
+                       VSTREAM_SCTL_END);
        attr_print(stream, ATTR_FLAG_NONE,
                   SEND_ATTR_STR(MAIL_ATTR_RBL_DOMAIN, ht[0]->key),
                   SEND_ATTR_STR(MAIL_ATTR_ACT_CLIENT_ADDR, client_addr),
index c76c58e2d00d9735d27cf824d84d40271b475c79..57655ac6a4d8dbcbb924b1543e2a6fab234c8989 100644 (file)
@@ -86,7 +86,7 @@ static INET_PROTO_INFO *proto_info;
 
 /* psc_sockaddr_to_hostaddr - transform endpoint address and port to string */
 
-static int psc_sockaddr_to_hostaddr(struct sockaddr * addr_storage,
+static int psc_sockaddr_to_hostaddr(struct sockaddr *addr_storage,
                                            SOCKADDR_SIZE addr_storage_len,
                                            MAI_HOSTADDR_STR *addr_buf,
                                            MAI_SERVPORT_STR *port_buf,
@@ -106,7 +106,7 @@ static int psc_sockaddr_to_hostaddr(struct sockaddr * addr_storage,
 /* psc_endpt_local_lookup - look up local system connection information */
 
 static void psc_endpt_local_lookup(VSTREAM *smtp_client_stream,
-                                           PSC_ENDPT_LOOKUP_FN lookup_done)
+                                          PSC_ENDPT_LOOKUP_FN lookup_done)
 {
     struct sockaddr_storage addr_storage;
     SOCKADDR_SIZE addr_storage_len = sizeof(addr_storage);
@@ -121,7 +121,7 @@ static void psc_endpt_local_lookup(VSTREAM *smtp_client_stream,
      * Look up the remote SMTP client address and port.
      */
     if (getpeername(vstream_fileno(smtp_client_stream), (struct sockaddr *)
-                   & addr_storage, &addr_storage_len) < 0) {
+                   &addr_storage, &addr_storage_len) < 0) {
        msg_warn("getpeername: %m -- dropping this connection");
        status = -1;
     }
@@ -131,7 +131,7 @@ static void psc_endpt_local_lookup(VSTREAM *smtp_client_stream,
      * logging and access control.
      */
     else if ((aierr = psc_sockaddr_to_hostaddr(
-                                        (struct sockaddr *) & addr_storage,
+                                         (struct sockaddr *) &addr_storage,
                                        addr_storage_len, &smtp_client_addr,
                                    &smtp_client_port, SOCK_STREAM)) != 0) {
        msg_warn("cannot convert client address/port to string: %s"
@@ -144,7 +144,7 @@ static void psc_endpt_local_lookup(VSTREAM *smtp_client_stream,
      * Look up the local SMTP server address and port.
      */
     else if (getsockname(vstream_fileno(smtp_client_stream),
-                        (struct sockaddr *) & addr_storage,
+                        (struct sockaddr *) &addr_storage,
                         &addr_storage_len) < 0) {
        msg_warn("getsockname: %m -- dropping this connection");
        status = -1;
@@ -155,7 +155,7 @@ static void psc_endpt_local_lookup(VSTREAM *smtp_client_stream,
      * logging.
      */
     else if ((aierr = psc_sockaddr_to_hostaddr(
-                                        (struct sockaddr *) & addr_storage,
+                                         (struct sockaddr *) &addr_storage,
                                        addr_storage_len, &smtp_server_addr,
                                    &smtp_server_port, SOCK_STREAM)) != 0) {
        msg_warn("cannot convert server address/port to string: %s"
@@ -192,7 +192,7 @@ void    psc_endpt_lookup(VSTREAM *smtp_client_stream,
     const PSC_ENDPT_LOOKUP_INFO *pp;
 
     if (proto_info == 0)
-        proto_info = inet_proto_info();
+       proto_info = inet_proto_info();
 
     for (pp = psc_endpt_lookup_info; /* see below */ ; pp++) {
        if (pp->name == 0)
index 36207e180bfefa3b6592540fd610c713422acabc..79ff7fde6acda0785c15d339ee9d171db729bec9 100644 (file)
@@ -107,8 +107,8 @@ static void psc_endpt_haproxy_event(int event, void *context)
            } else {
                read_len = 1;
            }
-           vstream_control(state->stream, VSTREAM_CTL_BUFSIZE, read_len,
-                           VSTREAM_CTL_END);
+           vstream_control(state->stream, VSTREAM_SCTL_BUFSIZE(read_len),
+                           VSTREAM_SCTL_END);
        }
        /* Drain the VSTREAM buffer, otherwise this pseudo-thread will hang. */
        do {
@@ -157,8 +157,8 @@ static void psc_endpt_haproxy_event(int event, void *context)
        PSC_CLEAR_EVENT_REQUEST(vstream_fileno(state->stream),
                                psc_endpt_haproxy_event, context);
        vstream_control(state->stream,
-                       VSTREAM_CTL_BUFSIZE, (ssize_t) VSTREAM_BUFSIZE,
-                       VSTREAM_CTL_END);
+                       VSTREAM_SCTL_BUFSIZE(VSTREAM_BUFSIZE),
+                       VSTREAM_SCTL_END);
        state->notify(status, state->stream,
                      &smtp_client_addr, &smtp_client_port,
                      &smtp_server_addr, &smtp_server_port);
index a4b40085c80282589f7d0776872675f541f917ad..fcefdd4d859f7ab64e821744655c06f90fcb2927 100644 (file)
@@ -167,8 +167,8 @@ static void psc_starttls_finish(int event, void *context)
         */
        vstream_fpurge(smtp_state->smtp_client_stream, VSTREAM_PURGE_BOTH);
        vstream_control(smtp_state->smtp_client_stream,
-                       VSTREAM_CTL_SWAP_FD, tlsproxy_stream,
-                       VSTREAM_CTL_END);
+                       VSTREAM_SCTL_SWAP_FD(tlsproxy_stream),
+                       VSTREAM_SCTL_END);
        vstream_fclose(tlsproxy_stream);        /* direct-to-client stream! */
        smtp_state->flags |= PSC_STATE_FLAG_USING_TLS;
     }
index e38b62420c66f71140995f04683784d3e4c4e6d5..b9a57ca59b68025a7e9c029d97fb5fbf79a265a3 100644 (file)
@@ -59,6 +59,7 @@ depend: $(MAKES)
 
 # do not edit below this line - it is generated by 'make depend'
 postsuper.o: ../../include/argv.h
+postsuper.o: ../../include/check_arg.h
 postsuper.o: ../../include/file_id.h
 postsuper.o: ../../include/mail_conf.h
 postsuper.o: ../../include/mail_open_ok.h
index ff4507cc52b2d4e3f0c52e5ab681ba9ed182c2f9..02b4261ab76e3a38b3c72f87e05ee7d68f51fd61 100644 (file)
@@ -63,6 +63,7 @@ depend: $(MAKES)
 
 # do not edit below this line - it is generated by 'make depend'
 posttls-finger.o: ../../include/argv.h
+posttls-finger.o: ../../include/check_arg.h
 posttls-finger.o: ../../include/chroot_uid.h
 posttls-finger.o: ../../include/dns.h
 posttls-finger.o: ../../include/dsn.h
@@ -94,6 +95,7 @@ posttls-finger.o: ../../include/vstring_vstream.h
 posttls-finger.o: posttls-finger.c
 posttls-finger.o: tlsmgrmem.h
 tlsmgrmem.o: ../../include/argv.h
+tlsmgrmem.o: ../../include/check_arg.h
 tlsmgrmem.o: ../../include/dict.h
 tlsmgrmem.o: ../../include/htable.h
 tlsmgrmem.o: ../../include/myflock.h
index ec44e119508308782d9f02ae31549b827cd1324a..9ed1a997637e4723f801d7722ce6e71df8ae79a6 100644 (file)
@@ -498,7 +498,7 @@ static RESPONSE *response(STATE *state, int verbose)
      */
     if (rdata.buf == 0) {
        rdata.buf = vstring_alloc(100);
-       vstring_ctl(rdata.buf, VSTRING_CTL_MAXLEN, (ssize_t) var_line_limit, 0);
+       vstring_ctl(rdata.buf, VSTRING_SCTL_MAXLEN(var_line_limit), 0);
     }
 
     /*
@@ -1413,8 +1413,7 @@ static int finger(STATE *state)
      * never-ending lines of text.
      */
     state->buffer = vstring_alloc(100);
-    vstring_ctl(state->buffer, VSTRING_CTL_MAXLEN,
-               (ssize_t) var_line_limit, 0);
+    vstring_ctl(state->buffer, VSTRING_SCTL_MAXLEN(var_line_limit), 0);
     state->why = dsb_create();
 
     if (!(err = connect_dest(state))) {
index 31ae405fb6515cee6e0639ac75914b22b4c6d0af..f10b0aa6064b3f2295893cf587e0a99cbca722de 100644 (file)
@@ -596,8 +596,8 @@ static void proxymap_service(VSTREAM *client_stream, char *unused_service,
      */
     if (vstream_fstat(client_stream, VSTREAM_FLAG_DEADLINE) == 0)
        vstream_control(client_stream,
-                       VSTREAM_CTL_TIMEOUT, 1,
-                       VSTREAM_CTL_END);
+                       VSTREAM_SCTL_TIMEOUT(1),
+                       VSTREAM_SCTL_END);
 
     /*
      * This routine runs whenever a client connects to the socket dedicated
@@ -605,8 +605,8 @@ static void proxymap_service(VSTREAM *client_stream, char *unused_service,
      * the common code in multi_server.c.
      */
     vstream_control(client_stream,
-                   VSTREAM_CTL_START_DEADLINE,
-                   VSTREAM_CTL_END);
+                   VSTREAM_SCTL_START_DEADLINE,
+                   VSTREAM_SCTL_END);
     if (attr_scan(client_stream,
                  ATTR_FLAG_MORE | ATTR_FLAG_STRICT,
                  RECV_ATTR_STR(MAIL_ATTR_REQ, request),
@@ -629,8 +629,8 @@ static void proxymap_service(VSTREAM *client_stream, char *unused_service,
        }
     }
     vstream_control(client_stream,
-                   VSTREAM_CTL_START_DEADLINE,
-                   VSTREAM_CTL_END);
+                   VSTREAM_SCTL_START_DEADLINE,
+                   VSTREAM_SCTL_END);
     vstream_fflush(client_stream);
 }
 
@@ -747,9 +747,9 @@ int     main(int argc, char **argv)
     MAIL_VERSION_STAMP_ALLOCATE;
 
     multi_server_main(argc, argv, proxymap_service,
-                     MAIL_SERVER_STR_TABLE, str_table,
-                     MAIL_SERVER_POST_INIT, post_jail_init,
-                     MAIL_SERVER_PRE_ACCEPT, pre_accept,
-    /* XXX MAIL_SERVER_SOLITARY if proxywrite */
+                     MAIL_SERVER_REQ_STR_TABLE(str_table),
+                     MAIL_SERVER_REQ_POST_INIT(post_jail_init),
+                     MAIL_SERVER_REQ_PRE_ACCEPT(pre_accept),
+    /* XXX MAIL_SERVER_REQ_SOLITARY if proxywrite */
                      0);
 }
index 243a9b0917f9ebfc2eb115d1255722d74010ce56..b24b74145937103a425de5c73c601f061c33ae9f 100644 (file)
@@ -198,6 +198,7 @@ qmgr_deliver.o: ../../include/vstring.h
 qmgr_deliver.o: ../../include/vstring_vstream.h
 qmgr_deliver.o: qmgr.h
 qmgr_deliver.o: qmgr_deliver.c
+qmgr_enable.o: ../../include/check_arg.h
 qmgr_enable.o: ../../include/dsn.h
 qmgr_enable.o: ../../include/msg.h
 qmgr_enable.o: ../../include/recipient_list.h
@@ -226,6 +227,7 @@ qmgr_entry.o: ../../include/vstream.h
 qmgr_entry.o: ../../include/vstring.h
 qmgr_entry.o: qmgr.h
 qmgr_entry.o: qmgr_entry.c
+qmgr_error.o: ../../include/check_arg.h
 qmgr_error.o: ../../include/dsn.h
 qmgr_error.o: ../../include/mymalloc.h
 qmgr_error.o: ../../include/recipient_list.h
@@ -237,6 +239,7 @@ qmgr_error.o: ../../include/vstream.h
 qmgr_error.o: ../../include/vstring.h
 qmgr_error.o: qmgr.h
 qmgr_error.o: qmgr_error.c
+qmgr_feedback.o: ../../include/check_arg.h
 qmgr_feedback.o: ../../include/dsn.h
 qmgr_feedback.o: ../../include/mail_conf.h
 qmgr_feedback.o: ../../include/mail_params.h
@@ -252,6 +255,7 @@ qmgr_feedback.o: ../../include/vstream.h
 qmgr_feedback.o: ../../include/vstring.h
 qmgr_feedback.o: qmgr.h
 qmgr_feedback.o: qmgr_feedback.c
+qmgr_job.o: ../../include/check_arg.h
 qmgr_job.o: ../../include/dsn.h
 qmgr_job.o: ../../include/htable.h
 qmgr_job.o: ../../include/msg.h
@@ -307,6 +311,7 @@ qmgr_message.o: ../../include/vstream.h
 qmgr_message.o: ../../include/vstring.h
 qmgr_message.o: qmgr.h
 qmgr_message.o: qmgr_message.c
+qmgr_move.o: ../../include/check_arg.h
 qmgr_move.o: ../../include/dsn.h
 qmgr_move.o: ../../include/mail_queue.h
 qmgr_move.o: ../../include/mail_scan_dir.h
@@ -319,6 +324,7 @@ qmgr_move.o: ../../include/vstream.h
 qmgr_move.o: ../../include/vstring.h
 qmgr_move.o: qmgr.h
 qmgr_move.o: qmgr_move.c
+qmgr_peer.o: ../../include/check_arg.h
 qmgr_peer.o: ../../include/dsn.h
 qmgr_peer.o: ../../include/htable.h
 qmgr_peer.o: ../../include/msg.h
@@ -349,6 +355,7 @@ qmgr_queue.o: ../../include/vstream.h
 qmgr_queue.o: ../../include/vstring.h
 qmgr_queue.o: qmgr.h
 qmgr_queue.o: qmgr_queue.c
+qmgr_scan.o: ../../include/check_arg.h
 qmgr_scan.o: ../../include/dsn.h
 qmgr_scan.o: ../../include/mail_scan_dir.h
 qmgr_scan.o: ../../include/msg.h
index b8954e3482eb944a8e81e3ef6d85d5fb5e56e1d3..bbe87bb2e20c32b6388d130b8e0c0d2cee139d5b 100644 (file)
@@ -744,15 +744,15 @@ int     main(int argc, char **argv)
      * not talk back to the client.
      */
     trigger_server_main(argc, argv, qmgr_trigger_event,
-                       MAIL_SERVER_INT_TABLE, int_table,
-                       MAIL_SERVER_STR_TABLE, str_table,
-                       MAIL_SERVER_BOOL_TABLE, bool_table,
-                       MAIL_SERVER_TIME_TABLE, time_table,
-                       MAIL_SERVER_PRE_INIT, qmgr_pre_init,
-                       MAIL_SERVER_POST_INIT, qmgr_post_init,
-                       MAIL_SERVER_LOOP, qmgr_loop,
-                       MAIL_SERVER_PRE_ACCEPT, pre_accept,
-                       MAIL_SERVER_SOLITARY,
-                       MAIL_SERVER_WATCHDOG, &var_qmgr_daemon_timeout,
+                       MAIL_SERVER_REQ_INT_TABLE(int_table),
+                       MAIL_SERVER_REQ_STR_TABLE(str_table),
+                       MAIL_SERVER_REQ_BOOL_TABLE(bool_table),
+                       MAIL_SERVER_REQ_TIME_TABLE(time_table),
+                       MAIL_SERVER_REQ_PRE_INIT(qmgr_pre_init),
+                       MAIL_SERVER_REQ_POST_INIT(qmgr_post_init),
+                       MAIL_SERVER_REQ_LOOP(qmgr_loop),
+                       MAIL_SERVER_REQ_PRE_ACCEPT(pre_accept),
+                       MAIL_SERVER_REQ_SOLITARY,
+                       MAIL_SERVER_REQ_WATCHDOG(&var_qmgr_daemon_timeout),
                        0);
 }
index b4c0468cd4b74818336502d8afc85611f4b04a8e..410d77ea7d9f71685e2d10e0567f149dbf201627 100644 (file)
@@ -349,13 +349,13 @@ void    qmgr_transport_alloc(QMGR_TRANSPORT *transport, QMGR_TRANSPORT_ALLOC_NOT
        event_request_timer(qmgr_transport_event, (void *) alloc, 0);
        return;
     }
-#if (EVENTS_STYLE != EVENTS_STYLE_SELECT) && defined(VSTREAM_CTL_DUPFD)
+#if (EVENTS_STYLE != EVENTS_STYLE_SELECT) && defined(VSTREAM_SCTL_DUPFD)
 #ifndef THRESHOLD_FD_WORKAROUND
 #define THRESHOLD_FD_WORKAROUND 128
 #endif
     vstream_control(alloc->stream,
-                   VSTREAM_CTL_DUPFD, THRESHOLD_FD_WORKAROUND,
-                   VSTREAM_CTL_END);
+                   VSTREAM_SCTL_DUPFD(THRESHOLD_FD_WORKAROUND),
+                   VSTREAM_SCTL_END);
 #endif
     event_enable_read(vstream_fileno(alloc->stream), qmgr_transport_event,
                      (void *) alloc);
index a1b4ba06ce997249aaa318fb8b66d865045f0959..948275bd0810a7cf5695b863d021c3752fb861e1 100644 (file)
@@ -834,11 +834,11 @@ int     main(int argc, char **argv)
      * Pass control to the single-threaded service skeleton.
      */
     single_server_main(argc, argv, qmqpd_service,
-                      MAIL_SERVER_TIME_TABLE, time_table,
-                      MAIL_SERVER_STR_TABLE, str_table,
-                      MAIL_SERVER_BOOL_TABLE, bool_table,
-                      MAIL_SERVER_PRE_INIT, pre_jail_init,
-                      MAIL_SERVER_PRE_ACCEPT, pre_accept,
-                      MAIL_SERVER_POST_INIT, post_jail_init,
+                      MAIL_SERVER_REQ_TIME_TABLE(time_table),
+                      MAIL_SERVER_REQ_STR_TABLE(str_table),
+                      MAIL_SERVER_REQ_BOOL_TABLE(bool_table),
+                      MAIL_SERVER_REQ_PRE_INIT(pre_jail_init),
+                      MAIL_SERVER_REQ_PRE_ACCEPT(pre_accept),
+                      MAIL_SERVER_REQ_POST_INIT(post_jail_init),
                       0);
 }
index 4af9a62611b2b4f6bf6db62aab3cad67c6010a76..a1362044db1a776fb63eaf7fa0071d5f29386e5c 100644 (file)
@@ -551,9 +551,9 @@ int     main(int argc, char **argv)
     MAIL_VERSION_STAMP_ALLOCATE;
 
     multi_server_main(argc, argv, scache_service,
-                     MAIL_SERVER_TIME_TABLE, time_table,
-                     MAIL_SERVER_POST_INIT, post_jail_init,
-                     MAIL_SERVER_EXIT, scache_status_dump,
-                     MAIL_SERVER_SOLITARY,
+                     MAIL_SERVER_REQ_TIME_TABLE(time_table),
+                     MAIL_SERVER_REQ_POST_INIT(post_jail_init),
+                     MAIL_SERVER_REQ_EXIT(scache_status_dump),
+                     MAIL_SERVER_REQ_SOLITARY,
                      0);
 }
index 859314593ee8b2b1db30bcccd1ac3e28fd96ec95..79b4d6ee993ecbf27d77c34e6a80e3d5a2fe9820 100644 (file)
@@ -429,7 +429,7 @@ int     main(int argc, char **argv)
     MAIL_VERSION_STAMP_ALLOCATE;
 
     single_server_main(argc, argv, showq_service,
-                      MAIL_SERVER_INT_TABLE, int_table,
-                      MAIL_SERVER_STR_TABLE, str_table,
+                      MAIL_SERVER_REQ_INT_TABLE(int_table),
+                      MAIL_SERVER_REQ_STR_TABLE(str_table),
                       0);
 }
index d66aec33b02c642b5b5f65ac226be1046507e328..1b6b18b00a396fcc9c9a4a53fdd044d1fa15aa6e 100644 (file)
 /*     Optional filter for the \fBsmtp\fR(8) delivery agent to change the
 /*     delivery status code or explanatory text of successful or unsuccessful
 /*     deliveries.
-/* .IP "\fBsmtp_dns_reply_filter ($default_dns_reply_filter)\fR"
+/* .IP "\fBsmtp_dns_reply_filter (empty)\fR"
 /*     Optional filter for Postfix SMTP client DNS lookup results.
 /* MIME PROCESSING CONTROLS
 /* .ad
 /*     An optional numerical network address that the Postfix SMTP client
 /*     should bind to when making an IPv6 connection.
 /* .IP "\fBsmtp_helo_name ($myhostname)\fR"
-/*     The hostname to send in the SMTP EHLO or HELO command.
+/*     The hostname to send in the SMTP HELO or EHLO command.
 /* .IP "\fBlmtp_lhlo_name ($myhostname)\fR"
 /*     The hostname to send in the LMTP LHLO command.
 /* .IP "\fBsmtp_host_lookup (dns)\fR"
@@ -1291,18 +1291,18 @@ int     main(int argc, char **argv)
      * Initialize with the LMTP or SMTP parameter name space.
      */
     single_server_main(argc, argv, smtp_service,
-                      MAIL_SERVER_TIME_TABLE, smtp_mode ?
-                      smtp_time_table : lmtp_time_table,
-                      MAIL_SERVER_INT_TABLE, smtp_mode ?
-                      smtp_int_table : lmtp_int_table,
-                      MAIL_SERVER_STR_TABLE, smtp_mode ?
-                      smtp_str_table : lmtp_str_table,
-                      MAIL_SERVER_BOOL_TABLE, smtp_mode ?
-                      smtp_bool_table : lmtp_bool_table,
-                      MAIL_SERVER_PRE_INIT, pre_init,
-                      MAIL_SERVER_POST_INIT, post_init,
-                      MAIL_SERVER_PRE_ACCEPT, pre_accept,
-                      MAIL_SERVER_BOUNCE_INIT, VAR_SMTP_DSN_FILTER,
-                      &var_smtp_dsn_filter,
+                      MAIL_SERVER_REQ_TIME_TABLE(smtp_mode ?
+                                        smtp_time_table : lmtp_time_table),
+                      MAIL_SERVER_REQ_INT_TABLE(smtp_mode ?
+                                          smtp_int_table : lmtp_int_table),
+                      MAIL_SERVER_REQ_STR_TABLE(smtp_mode ?
+                                          smtp_str_table : lmtp_str_table),
+                      MAIL_SERVER_REQ_BOOL_TABLE(smtp_mode ?
+                                        smtp_bool_table : lmtp_bool_table),
+                      MAIL_SERVER_REQ_PRE_INIT(pre_init),
+                      MAIL_SERVER_REQ_POST_INIT(post_init),
+                      MAIL_SERVER_REQ_PRE_ACCEPT(pre_accept),
+                      MAIL_SERVER_REQ_BOUNCE_INIT(VAR_SMTP_DSN_FILTER,
+                                                  &var_smtp_dsn_filter),
                       0);
 }
index 987db1c47a6fc8be03bc16d2a862e95ff0d2f0bf..13c6e6f09ff2933e7435960f4b39852021222296 100644 (file)
@@ -625,6 +625,7 @@ smtpd_state.o: smtpd.h
 smtpd_state.o: smtpd_chat.h
 smtpd_state.o: smtpd_sasl_glue.h
 smtpd_state.o: smtpd_state.c
+smtpd_token.o: ../../include/check_arg.h
 smtpd_token.o: ../../include/mvect.h
 smtpd_token.o: ../../include/mymalloc.h
 smtpd_token.o: ../../include/sys_defs.h
index 935a148554f6c7e70dd3313c0f08fd3bbbec0792..1e12a197e20dffb2dd9255eb97796398c1dfbadc 100644 (file)
@@ -4313,9 +4313,9 @@ static void smtpd_start_tls(SMTPD_STATE *state)
      * develop a usable abstraction that encapsulates this stream plumbing in
      * a library module.
      */
-    vstream_control(state->tlsproxy, VSTREAM_CTL_DOUBLE, VSTREAM_CTL_END);
-    vstream_control(state->client, VSTREAM_CTL_SWAP_FD, state->tlsproxy,
-                   VSTREAM_CTL_END);
+    vstream_control(state->tlsproxy, VSTREAM_SCTL_DOUBLE, VSTREAM_SCTL_END);
+    vstream_control(state->client, VSTREAM_SCTL_SWAP_FD(state->tlsproxy),
+                   VSTREAM_SCTL_END);
     (void) vstream_fclose(state->tlsproxy);    /* direct-to-client stream! */
     state->tlsproxy = 0;
 
@@ -5715,15 +5715,15 @@ int     main(int argc, char **argv)
      * Pass control to the single-threaded service skeleton.
      */
     single_server_main(argc, argv, smtpd_service,
-                      MAIL_SERVER_NINT_TABLE, nint_table,
-                      MAIL_SERVER_INT_TABLE, int_table,
-                      MAIL_SERVER_STR_TABLE, str_table,
-                      MAIL_SERVER_RAW_TABLE, raw_table,
-                      MAIL_SERVER_BOOL_TABLE, bool_table,
-                      MAIL_SERVER_NBOOL_TABLE, nbool_table,
-                      MAIL_SERVER_TIME_TABLE, time_table,
-                      MAIL_SERVER_PRE_INIT, pre_jail_init,
-                      MAIL_SERVER_PRE_ACCEPT, pre_accept,
-                      MAIL_SERVER_POST_INIT, post_jail_init,
+                      MAIL_SERVER_REQ_NINT_TABLE(nint_table),
+                      MAIL_SERVER_REQ_INT_TABLE(int_table),
+                      MAIL_SERVER_REQ_STR_TABLE(str_table),
+                      MAIL_SERVER_REQ_RAW_TABLE(raw_table),
+                      MAIL_SERVER_REQ_BOOL_TABLE(bool_table),
+                      MAIL_SERVER_REQ_NBOOL_TABLE(nbool_table),
+                      MAIL_SERVER_REQ_TIME_TABLE(time_table),
+                      MAIL_SERVER_REQ_PRE_INIT(pre_jail_init),
+                      MAIL_SERVER_REQ_PRE_ACCEPT(pre_accept),
+                      MAIL_SERVER_REQ_POST_INIT(post_jail_init),
                       0);
 }
index 132314b67cdbf3f3202889b89efadd43b97c3f58..6ac49ac0aa19e9d615c75ad53822e64a6f96de64 100644 (file)
@@ -14,7 +14,7 @@
   */
 extern void smtpd_chat_reset(SMTPD_STATE *);
 extern void smtpd_chat_query(SMTPD_STATE *);
-extern void PRINTFLIKE(2, 3) smtpd_chat_reply(SMTPD_STATE *, const char *, ...);
+extern void PRINTFLIKE(2, 3) smtpd_chat_reply(SMTPD_STATE *, const char *,...);
 extern void smtpd_chat_notify(SMTPD_STATE *);
 
 /* LICENSE
@@ -27,4 +27,3 @@ extern void smtpd_chat_notify(SMTPD_STATE *);
 /*     P.O. Box 704
 /*     Yorktown Heights, NY 10598, USA
 /*--*/
-
index 0c34982f79915d0a3fc588bf4e5d05597405e618..a67f8789f280b2f4fda75e946407afb2fc416585 100644 (file)
@@ -543,10 +543,10 @@ static void policy_client_register(const char *name)
            if ((policy_name = mystrtok(&cp, sep)) == 0)
                msg_fatal("empty policy service: \"%s\"", name);
            attr_override(cp, sep, parens,
-                         ATTR_OVER_TIME_TABLE, time_table,
-                         ATTR_OVER_INT_TABLE, int_table,
-                         ATTR_OVER_STR_TABLE, str_table,
-                         0);
+                         ATTR_OVER_REQ_TIME_TABLE(time_table),
+                         ATTR_OVER_REQ_INT_TABLE(int_table),
+                         ATTR_OVER_REQ_STR_TABLE(str_table),
+                         ATTR_OVER_REQ_END);
        } else {
            policy_name = name;
        }
index 84ba6ad6f2d19112418a08aab22d41543e236aec..c4f44bb3d7c10992ffd0dbdfdb69f3b5bcd27d0f 100644 (file)
@@ -12,9 +12,9 @@ mydestination wzv.porcupine.org,localhost.porcupine.org
 inet_interfaces 168.100.189.7,127.0.0.1
 recipient_restrictions permit_mx_backup,reject
 rcpt wietse@wzv.porcupine.org
-rcpt wietse@fist.porcupine.org
+rcpt wietse@backup.porcupine.org
 rcpt wietse@porcupine.org
 permit_mx_backup_networks 168.100.189.5
-rcpt wietse@fist.porcupine.org
+rcpt wietse@backup.porcupine.org
 permit_mx_backup_networks 168.100.189.4
-rcpt wietse@fist.porcupine.org
+rcpt wietse@backup.porcupine.org
index 3e0b643cc2f3fcecba1cf20c87afef4d607e100c..9f20b9017eaeab0d3a8e6430b4d9d0d217c75302 100644 (file)
@@ -18,17 +18,17 @@ OK
 OK
 >>> rcpt wietse@wzv.porcupine.org
 OK
->>> rcpt wietse@fist.porcupine.org
+>>> rcpt wietse@backup.porcupine.org
 OK
 >>> rcpt wietse@porcupine.org
 ./smtpd_check: <queue id>: reject: RCPT from localhost[127.0.0.1]: 554 5.7.1 <wietse@porcupine.org>: Recipient address rejected: Access denied; to=<wietse@porcupine.org> proto=SMTP
 554 5.7.1 <wietse@porcupine.org>: Recipient address rejected: Access denied
 >>> permit_mx_backup_networks 168.100.189.5
 OK
->>> rcpt wietse@fist.porcupine.org
-./smtpd_check: <queue id>: reject: RCPT from localhost[127.0.0.1]: 554 5.7.1 <wietse@fist.porcupine.org>: Recipient address rejected: Access denied; to=<wietse@fist.porcupine.org> proto=SMTP
-554 5.7.1 <wietse@fist.porcupine.org>: Recipient address rejected: Access denied
+>>> rcpt wietse@backup.porcupine.org
+./smtpd_check: <queue id>: reject: RCPT from localhost[127.0.0.1]: 554 5.7.1 <wietse@backup.porcupine.org>: Recipient address rejected: Access denied; to=<wietse@backup.porcupine.org> proto=SMTP
+554 5.7.1 <wietse@backup.porcupine.org>: Recipient address rejected: Access denied
 >>> permit_mx_backup_networks 168.100.189.4
 OK
->>> rcpt wietse@fist.porcupine.org
+>>> rcpt wietse@backup.porcupine.org
 OK
index e2048c57e31de7b77ab8932106e0352521671efa..df1d8ef9ecd40c36139b030a53bf51a9a596391a 100644 (file)
@@ -19,7 +19,7 @@ smtpd_dns_reply_filter regexp:../dns/no-a.reg
 mail user@spike.porcupine.org
 helo spike.porcupine.org
 # EXPECT OK + "all A records dropped" warning + no delayed reject.
-helo umbilical.porcupine.org
+helo fist.porcupine.org
 mail user@spike.porcupine.org
 rcpt user@spike.porcupine.org
 smtpd_dns_reply_filter regexp:../dns/error.reg
@@ -52,7 +52,7 @@ smtpd_dns_reply_filter regexp:../dns/no-a.reg
 # EXPECT OK (host has AAAA record).
 mail user@spike.porcupine.org
 # EXPECT OK + "all A records dropped" warning.
-mail user@umbilical.porcupine.org
+mail user@fist.porcupine.org
 smtpd_dns_reply_filter regexp:../dns/error.reg
 # EXPECT OK + "filter config error" warning + delayed reject.
 mail user@xn--1xa.porcupine.org
index f3c9bf98eb1600d65499aaf355a407f88815d34d..edef24650beaba10723e05f35f92618c28fb34bd 100644 (file)
@@ -33,9 +33,9 @@ OK
 ./smtpd_check: ignoring DNS RR: spike.porcupine.org. TTL IN A 168.100.189.2
 OK
 >>> # EXPECT OK + "all A records dropped" warning + no delayed reject.
->>> helo umbilical.porcupine.org
-./smtpd_check: ignoring DNS RR: umbilical.porcupine.org. TTL IN A 168.100.189.1
-./smtpd_check: warning: umbilical.porcupine.org: address or MX lookup error: DNS reply filter drops all results
+>>> helo fist.porcupine.org
+./smtpd_check: ignoring DNS RR: fist.porcupine.org. TTL IN A 168.100.189.4
+./smtpd_check: warning: fist.porcupine.org: address or MX lookup error: DNS reply filter drops all results
 OK
 >>> mail user@spike.porcupine.org
 OK
@@ -99,9 +99,9 @@ OK
 ./smtpd_check: ignoring DNS RR: spike.porcupine.org. TTL IN A 168.100.189.2
 OK
 >>> # EXPECT OK + "all A records dropped" warning.
->>> mail user@umbilical.porcupine.org
-./smtpd_check: ignoring DNS RR: umbilical.porcupine.org. TTL IN A 168.100.189.1
-./smtpd_check: warning: umbilical.porcupine.org: MX or address lookup error: DNS reply filter drops all results
+>>> mail user@fist.porcupine.org
+./smtpd_check: ignoring DNS RR: fist.porcupine.org. TTL IN A 168.100.189.4
+./smtpd_check: warning: fist.porcupine.org: MX or address lookup error: DNS reply filter drops all results
 OK
 >>> smtpd_dns_reply_filter regexp:../dns/error.reg
 OK
index 8a6bffb3a25997481906f2cc7a6bd4d66b393561..045c7f44d6c6b04181303d2a6a4acb40db0afd3a 100644 (file)
@@ -347,8 +347,9 @@ static int smtpd_proxy_connect(SMTPD_STATE *state)
     }
     proxy->service_stream = vstream_fdopen(fd, O_RDWR);
     /* Needed by our DATA-phase record emulation routines. */
-    vstream_control(proxy->service_stream, VSTREAM_CTL_CONTEXT,
-                   (void *) state, VSTREAM_CTL_END);
+    vstream_control(proxy->service_stream,
+                   VSTREAM_SCTL_CONTEXT((void *) state),
+                   VSTREAM_SCTL_END);
     /* Avoid poor performance when TCP MSS > VSTREAM_BUFSIZE. */
     if (connect_fn == inet_connect)
        vstream_tweak_tcp(proxy->service_stream);
@@ -993,8 +994,9 @@ static int smtpd_proxy_replay_setup(SMTPD_STATE *state)
     /*
      * Needed by our DATA-phase record emulation routines.
      */
-    vstream_control(smtpd_proxy_replay_stream, VSTREAM_CTL_CONTEXT,
-                   (void *) state, VSTREAM_CTL_END);
+    vstream_control(smtpd_proxy_replay_stream,
+                   VSTREAM_SCTL_CONTEXT((void *) state),
+                   VSTREAM_SCTL_END);
     return (0);
 }
 
index 1dec35497a06357d39a525bc1663d749ddaef13a..5d1af3447db2252ea63cf7139f536801ffceea5e 100644 (file)
@@ -79,6 +79,7 @@ depend: $(MAKES)
        @$(EXPORT) make -f Makefile.in Makefile 1>&2
 
 # do not edit below this line - it is generated by 'make depend'
+qmqp-sink.o: ../../include/check_arg.h
 qmqp-sink.o: ../../include/events.h
 qmqp-sink.o: ../../include/htable.h
 qmqp-sink.o: ../../include/inet_proto.h
@@ -95,6 +96,7 @@ qmqp-sink.o: ../../include/vbuf.h
 qmqp-sink.o: ../../include/vstream.h
 qmqp-sink.o: ../../include/vstring.h
 qmqp-sink.o: qmqp-sink.c
+qmqp-source.o: ../../include/check_arg.h
 qmqp-source.o: ../../include/connect.h
 qmqp-source.o: ../../include/events.h
 qmqp-source.o: ../../include/get_hostname.h
@@ -118,6 +120,7 @@ qmqp-source.o: ../../include/vbuf.h
 qmqp-source.o: ../../include/vstream.h
 qmqp-source.o: ../../include/vstring.h
 qmqp-source.o: qmqp-source.c
+smtp-sink.o: ../../include/check_arg.h
 smtp-sink.o: ../../include/chroot_uid.h
 smtp-sink.o: ../../include/events.h
 smtp-sink.o: ../../include/get_hostname.h
@@ -142,6 +145,7 @@ smtp-sink.o: ../../include/vstream.h
 smtp-sink.o: ../../include/vstring.h
 smtp-sink.o: ../../include/vstring_vstream.h
 smtp-sink.o: smtp-sink.c
+smtp-source.o: ../../include/check_arg.h
 smtp-source.o: ../../include/compat_va_copy.h
 smtp-source.o: ../../include/connect.h
 smtp-source.o: ../../include/events.h
index 51dcb34a8e388eff74573f47ee934f5ca89dcc6a..3e48a3b87e72ec8646b540a54e327ffd6de422f2 100644 (file)
 /* .IP "\fB-h\fI hostname\fR"
 /*     Use \fIhostname\fR in the SMTP greeting, in the HELO response,
 /*     and in the EHLO response. The default hostname is "smtp-sink".
+/* .IP "\fB-H\fI delay\fR"
+/*     Delay the first read operation after receiving DATA (time
+/*     in seconds). Combine with a large test message and a small
+/*     TCP window size (see the \fB-T\fR option) to test the Postfix
+/*     client write_wait() implementation.
 /* .IP \fB-L\fR
 /*     Enable LMTP instead of SMTP.
 /* .IP "\fB-m \fIcount\fR (default: 256)"
@@ -376,6 +381,7 @@ static int max_client_count = DEF_MAX_CLIENT_COUNT;
 static int client_count;
 static int sock;
 static int abort_delay = -1;
+static int data_read_delay = 0;
 
 static char *single_template;          /* individual template */
 static char *shared_template;          /* shared template */
@@ -732,6 +738,28 @@ static void abort_event(int unused_event, void *context)
     disconnect(state);
 }
 
+/* delay_read_event - resume input event handling */
+
+static void delay_read_event(int event, void *context)
+{
+    SINK_STATE *state = (SINK_STATE *) context;
+
+    if (event != EVENT_TIME)
+       msg_panic("delay_read_event: non-timer event %d", event);
+
+    event_enable_read(vstream_fileno(state->stream), read_event, (void *) state);
+    event_request_timer(read_timeout, (void *) state, var_tmout);
+}
+
+/* delay_read - temporarily suspend input event handling */
+
+static void delay_read(SINK_STATE *state, int delay)
+{
+    event_disable_readwrite(vstream_fileno(state->stream));
+    event_cancel_timer(read_timeout, (void *) state);
+    event_request_timer(delay_read_event, (void *) state, delay);
+}
+
 /* data_response - respond to DATA command */
 
 static void data_response(SINK_STATE *state, const char *unused_args)
@@ -747,6 +775,9 @@ static void data_response(SINK_STATE *state, const char *unused_args)
     SMTP_FLUSH(state->stream);
     if (abort_delay < 0) {
        state->read_fn = data_read;
+       /* Todo: move into code that invokes the command response function. */
+       if (data_read_delay > 0)
+           delay_read(state, data_read_delay);
     } else {
        /* Stop reading, send premature 550, and disconnect. */
        event_disable_readwrite(vstream_fileno(state->stream));
@@ -1427,7 +1458,7 @@ int     main(int argc, char **argv)
     /*
      * Parse JCL.
      */
-    while ((ch = GETOPT(argc, argv, "468aA:b:B:cCd:D:eEf:Fh:Ln:m:M:NpPq:Q:r:R:s:S:t:T:u:vw:W:")) > 0) {
+    while ((ch = GETOPT(argc, argv, "468aA:b:B:cCd:D:eEf:Fh:H:Ln:m:M:NpPq:Q:r:R:s:S:t:T:u:vw:W:")) > 0) {
        switch (ch) {
        case '4':
            protocols = INET_PROTO_NAME_IPV4;
@@ -1489,6 +1520,10 @@ int     main(int argc, char **argv)
        case 'h':
            var_myhostname = optarg;
            break;
+       case 'H':
+           if ((data_read_delay = atoi(optarg)) <= 0)
+               msg_fatal("bad data read delay: %s", optarg);
+           break;
        case 'L':
            enable_lmtp = 1;
            break;
index f19d284de359db223a72c6a14a64033dc39ce987..36fc7889037429beee658c230684809fd8f263fb 100644 (file)
@@ -305,7 +305,7 @@ static RESPONSE *response(VSTREAM *stream, VSTRING *buf)
      */
     if (rdata.buf == 0) {
        rdata.buf = vstring_alloc(100);
-       vstring_ctl(rdata.buf, VSTRING_CTL_MAXLEN, (ssize_t) var_line_limit, 0);
+       vstring_ctl(rdata.buf, VSTRING_SCTL_MAXLEN(var_line_limit), 0);
     }
 
     /*
@@ -1142,7 +1142,7 @@ int     main(int argc, char **argv)
      */
     if (buffer == 0) {
        buffer = vstring_alloc(100);
-       vstring_ctl(buffer, VSTRING_CTL_MAXLEN, (ssize_t) var_line_limit, 0);
+       vstring_ctl(buffer, VSTRING_SCTL_MAXLEN(var_line_limit), 0);
     }
 
     /*
index 51fdeee7f00d77c49a612796a9d74cb9d31e6b41..85863b76d5082778dcbcf5e018eb40c57d53ed24 100644 (file)
@@ -60,6 +60,7 @@ depend: $(MAKES)
 
 # do not edit below this line - it is generated by 'make depend'
 spawn.o: ../../include/argv.h
+spawn.o: ../../include/check_arg.h
 spawn.o: ../../include/dict.h
 spawn.o: ../../include/mail_conf.h
 spawn.o: ../../include/mail_params.h
index c44ebcdfcddd4c820ff7f5d54e1db7371e470e9a..419049a2ac4d21f96bf06f25b9702521dbbb1c8a 100644 (file)
@@ -298,15 +298,15 @@ static void spawn_service(VSTREAM *client_stream, char *service, char **argv)
      * Execute the command.
      */
     export_env = mail_parm_split(VAR_EXPORT_ENVIRON, var_export_environ);
-    status = spawn_command(SPAWN_CMD_STDIN, vstream_fileno(client_stream),
-                          SPAWN_CMD_STDOUT, vstream_fileno(client_stream),
-                          SPAWN_CMD_STDERR, vstream_fileno(client_stream),
-                          SPAWN_CMD_UID, attr.uid,
-                          SPAWN_CMD_GID, attr.gid,
-                          SPAWN_CMD_ARGV, attr.argv,
-                          SPAWN_CMD_TIME_LIMIT, attr.time_limit,
-                          SPAWN_CMD_EXPORT, export_env->argv,
-                          SPAWN_CMD_END);
+    status = spawn_command(SPAWN_SCMD_STDIN(vstream_fileno(client_stream)),
+                          SPAWN_SCMD_STDOUT(vstream_fileno(client_stream)),
+                          SPAWN_SCMD_STDERR(vstream_fileno(client_stream)),
+                          SPAWN_SCMD_UID(attr.uid),
+                          SPAWN_SCMD_GID(attr.gid),
+                          SPAWN_SCMD_ARGV(attr.argv),
+                          SPAWN_SCMD_TIME_LIMIT(attr.time_limit),
+                          SPAWN_SCMD_EXPORT(export_env->argv),
+                          SPAWN_SCMD_END);
     argv_free(export_env);
 
     /*
@@ -358,9 +358,9 @@ int     main(int argc, char **argv)
     MAIL_VERSION_STAMP_ALLOCATE;
 
     single_server_main(argc, argv, spawn_service,
-                      MAIL_SERVER_TIME_TABLE, time_table,
-                      MAIL_SERVER_POST_INIT, drop_privileges,
-                      MAIL_SERVER_PRE_ACCEPT, pre_accept,
-                      MAIL_SERVER_PRIVILEGED,
+                      MAIL_SERVER_REQ_TIME_TABLE(time_table),
+                      MAIL_SERVER_REQ_POST_INIT(drop_privileges),
+                      MAIL_SERVER_REQ_PRE_ACCEPT(pre_accept),
+                      MAIL_SERVER_REQ_PRIVILEGED,
                       0);
 }
index 6324fb59c3c916807499278587f51cf5c8e72636..cddb4915b76f3f81d3e9844dc3ece2be2e67965b 100644 (file)
@@ -105,6 +105,7 @@ depend: $(MAKES)
 
 # do not edit below this line - it is generated by 'make depend'
 tls_bio_ops.o: ../../include/argv.h
+tls_bio_ops.o: ../../include/check_arg.h
 tls_bio_ops.o: ../../include/dns.h
 tls_bio_ops.o: ../../include/iostuff.h
 tls_bio_ops.o: ../../include/msg.h
@@ -119,6 +120,7 @@ tls_bio_ops.o: ../../include/vstring.h
 tls_bio_ops.o: tls.h
 tls_bio_ops.o: tls_bio_ops.c
 tls_certkey.o: ../../include/argv.h
+tls_certkey.o: ../../include/check_arg.h
 tls_certkey.o: ../../include/dns.h
 tls_certkey.o: ../../include/mail_params.h
 tls_certkey.o: ../../include/msg.h
@@ -133,6 +135,7 @@ tls_certkey.o: ../../include/vstring.h
 tls_certkey.o: tls.h
 tls_certkey.o: tls_certkey.c
 tls_client.o: ../../include/argv.h
+tls_client.o: ../../include/check_arg.h
 tls_client.o: ../../include/dict.h
 tls_client.o: ../../include/dns.h
 tls_client.o: ../../include/iostuff.h
@@ -155,6 +158,7 @@ tls_client.o: tls_client.c
 tls_client.o: tls_mgr.h
 tls_client.o: tls_scache.h
 tls_dane.o: ../../include/argv.h
+tls_dane.o: ../../include/check_arg.h
 tls_dane.o: ../../include/ctable.h
 tls_dane.o: ../../include/dns.h
 tls_dane.o: ../../include/events.h
@@ -177,6 +181,7 @@ tls_dane.o: ../../include/vstring.h
 tls_dane.o: tls.h
 tls_dane.o: tls_dane.c
 tls_dh.o: ../../include/argv.h
+tls_dh.o: ../../include/check_arg.h
 tls_dh.o: ../../include/dns.h
 tls_dh.o: ../../include/mail_params.h
 tls_dh.o: ../../include/msg.h
@@ -191,6 +196,7 @@ tls_dh.o: ../../include/vstring.h
 tls_dh.o: tls.h
 tls_dh.o: tls_dh.c
 tls_fprint.o: ../../include/argv.h
+tls_fprint.o: ../../include/check_arg.h
 tls_fprint.o: ../../include/dns.h
 tls_fprint.o: ../../include/mail_params.h
 tls_fprint.o: ../../include/msg.h
@@ -207,6 +213,7 @@ tls_fprint.o: ../../include/vstring.h
 tls_fprint.o: tls.h
 tls_fprint.o: tls_fprint.c
 tls_level.o: ../../include/argv.h
+tls_level.o: ../../include/check_arg.h
 tls_level.o: ../../include/dns.h
 tls_level.o: ../../include/myaddrinfo.h
 tls_level.o: ../../include/name_code.h
@@ -240,6 +247,7 @@ tls_mgr.o: tls_mgr.c
 tls_mgr.o: tls_mgr.h
 tls_mgr.o: tls_scache.h
 tls_misc.o: ../../include/argv.h
+tls_misc.o: ../../include/check_arg.h
 tls_misc.o: ../../include/dns.h
 tls_misc.o: ../../include/mail_conf.h
 tls_misc.o: ../../include/mail_params.h
@@ -349,6 +357,7 @@ tls_proxy_scan.o: tls.h
 tls_proxy_scan.o: tls_proxy.h
 tls_proxy_scan.o: tls_proxy_scan.c
 tls_rsa.o: ../../include/argv.h
+tls_rsa.o: ../../include/check_arg.h
 tls_rsa.o: ../../include/dns.h
 tls_rsa.o: ../../include/msg.h
 tls_rsa.o: ../../include/myaddrinfo.h
@@ -362,6 +371,7 @@ tls_rsa.o: ../../include/vstring.h
 tls_rsa.o: tls.h
 tls_rsa.o: tls_rsa.c
 tls_scache.o: ../../include/argv.h
+tls_scache.o: ../../include/check_arg.h
 tls_scache.o: ../../include/dict.h
 tls_scache.o: ../../include/hex_code.h
 tls_scache.o: ../../include/msg.h
@@ -376,6 +386,7 @@ tls_scache.o: ../../include/vstring.h
 tls_scache.o: tls_scache.c
 tls_scache.o: tls_scache.h
 tls_seed.o: ../../include/argv.h
+tls_seed.o: ../../include/check_arg.h
 tls_seed.o: ../../include/dict.h
 tls_seed.o: ../../include/dns.h
 tls_seed.o: ../../include/msg.h
@@ -393,6 +404,7 @@ tls_seed.o: tls_mgr.h
 tls_seed.o: tls_scache.h
 tls_seed.o: tls_seed.c
 tls_server.o: ../../include/argv.h
+tls_server.o: ../../include/check_arg.h
 tls_server.o: ../../include/dict.h
 tls_server.o: ../../include/dns.h
 tls_server.o: ../../include/hex_code.h
@@ -415,6 +427,7 @@ tls_server.o: tls_mgr.h
 tls_server.o: tls_scache.h
 tls_server.o: tls_server.c
 tls_session.o: ../../include/argv.h
+tls_session.o: ../../include/check_arg.h
 tls_session.o: ../../include/dns.h
 tls_session.o: ../../include/msg.h
 tls_session.o: ../../include/myaddrinfo.h
@@ -429,6 +442,7 @@ tls_session.o: ../../include/vstring.h
 tls_session.o: tls.h
 tls_session.o: tls_session.c
 tls_stream.o: ../../include/argv.h
+tls_stream.o: ../../include/check_arg.h
 tls_stream.o: ../../include/dns.h
 tls_stream.o: ../../include/iostuff.h
 tls_stream.o: ../../include/msg.h
@@ -443,6 +457,7 @@ tls_stream.o: ../../include/vstring.h
 tls_stream.o: tls.h
 tls_stream.o: tls_stream.c
 tls_verify.o: ../../include/argv.h
+tls_verify.o: ../../include/check_arg.h
 tls_verify.o: ../../include/dns.h
 tls_verify.o: ../../include/msg.h
 tls_verify.o: ../../include/myaddrinfo.h
index 70c0096dca30892ba6d47677db5d699ef58d022c..c4516ad86793868ffa3bab79be499112b1aab401 100644 (file)
@@ -27,7 +27,7 @@
 /*     The result value is a null pointer on failure. The peer_stream
 /*     is not closed.  The resulting proxy stream is single-buffered.
 /*
-/*     After this, it is a good idea to use the VSTREAM_CTL_SWAP_FD
+/*     After this, it is a good idea to use the VSTREAM_SCTL_SWAP_FD
 /*     request to swap the file descriptors between the plaintext
 /*     peer_stream and the proxy stream from tls_proxy_open().
 /*     This avoids the loss of application-configurable VSTREAM
index e58a30b9af6732d89c3736d656fad1ef3759baaa..3d44509141b1d061bec73f046ea0c31c14c629d9 100644 (file)
@@ -134,10 +134,10 @@ static ssize_t tls_timed_write(int fd, void *buf, size_t len, int timeout,
 void    tls_stream_start(VSTREAM *stream, TLS_SESS_STATE *context)
 {
     vstream_control(stream,
-                   VSTREAM_CTL_READ_FN, tls_timed_read,
-                   VSTREAM_CTL_WRITE_FN, tls_timed_write,
-                   VSTREAM_CTL_CONTEXT, (void *) context,
-                   VSTREAM_CTL_END);
+                   VSTREAM_SCTL_READ_FN(tls_timed_read),
+                   VSTREAM_SCTL_WRITE_FN(tls_timed_write),
+                   VSTREAM_SCTL_CONTEXT(context),
+                   VSTREAM_SCTL_END);
 }
 
 /* tls_stream_stop - stop VSTREAM over TLS */
@@ -151,10 +151,10 @@ void    tls_stream_stop(VSTREAM *stream)
      * noise when used.
      */
     vstream_control(stream,
-                   VSTREAM_CTL_READ_FN, dummy_read,
-                   VSTREAM_CTL_WRITE_FN, dummy_write,
-                   VSTREAM_CTL_CONTEXT, (void *) 0,
-                   VSTREAM_CTL_END);
+                   VSTREAM_SCTL_READ_FN(dummy_read),
+                   VSTREAM_SCTL_WRITE_FN(dummy_write),
+                   VSTREAM_SCTL_CONTEXT((void *) 0),
+                   VSTREAM_SCTL_END);
 }
 
 #endif
index 7072c0c6b9a38183edf5a9b2bb0d8294ebbd6105..b20ffb68b77fbafa1c503177386b0a6de119a58e 100644 (file)
@@ -1046,14 +1046,14 @@ int     main(int argc, char **argv)
      * monitoring our service port while this process runs.
      */
     multi_server_main(argc, argv, tlsmgr_service,
-                     MAIL_SERVER_TIME_TABLE, time_table,
-                     MAIL_SERVER_INT_TABLE, int_table,
-                     MAIL_SERVER_STR_TABLE, str_table,
-                     MAIL_SERVER_PRE_INIT, tlsmgr_pre_init,
-                     MAIL_SERVER_POST_INIT, tlsmgr_post_init,
-                     MAIL_SERVER_EXIT, tlsmgr_before_exit,
-                     MAIL_SERVER_LOOP, tlsmgr_loop,
-                     MAIL_SERVER_SOLITARY,
+                     MAIL_SERVER_REQ_TIME_TABLE(time_table),
+                     MAIL_SERVER_REQ_INT_TABLE(int_table),
+                     MAIL_SERVER_REQ_STR_TABLE(str_table),
+                     MAIL_SERVER_REQ_PRE_INIT(tlsmgr_pre_init),
+                     MAIL_SERVER_REQ_POST_INIT(tlsmgr_post_init),
+                     MAIL_SERVER_REQ_EXIT(tlsmgr_before_exit),
+                     MAIL_SERVER_REQ_LOOP(tlsmgr_loop),
+                     MAIL_SERVER_REQ_SOLITARY,
                      0);
 }
 
index 8e97f2105a16e659e4a8142c9a365fe9fb766cd6..744b1d1218a2f7b4035e8b96e15f93d023d86b2d 100644 (file)
@@ -90,8 +90,10 @@ tlsproxy.o: ../../include/vstring.h
 tlsproxy.o: tlsproxy.c
 tlsproxy.o: tlsproxy.h
 tlsproxy_state.o: ../../include/argv.h
+tlsproxy_state.o: ../../include/check_arg.h
 tlsproxy_state.o: ../../include/dns.h
 tlsproxy_state.o: ../../include/events.h
+tlsproxy_state.o: ../../include/mail_conf.h
 tlsproxy_state.o: ../../include/mail_server.h
 tlsproxy_state.o: ../../include/msg.h
 tlsproxy_state.o: ../../include/myaddrinfo.h
index 1bd7fc3986db058f8de1bf7f7ead1f2e0baacde7..cb05c85a183c26ea5e9e5ccfd72bf6a5a0fcbe4c 100644 (file)
@@ -883,9 +883,9 @@ static void tlsp_service(VSTREAM *plaintext_stream,
      */
     non_blocking(plaintext_fd, NON_BLOCKING);
     vstream_control(plaintext_stream,
-                   VSTREAM_CTL_PATH, "plaintext",
-                   VSTREAM_CTL_TIMEOUT, 5,
-                   VSTREAM_CTL_END);
+                   VSTREAM_SCTL_PATH("plaintext"),
+                   VSTREAM_SCTL_TIMEOUT(5),
+                   VSTREAM_SCTL_END);
 
     /*
      * Receive postscreen's remote SMTP client address/port and socket.
@@ -1108,16 +1108,16 @@ int     main(int argc, char **argv)
      * Pass control to the single-threaded service skeleton.
      */
     event_server_main(argc, argv, tlsp_service,
-                     MAIL_SERVER_INT_TABLE, int_table,
-                     MAIL_SERVER_NINT_TABLE, nint_table,
-                     MAIL_SERVER_STR_TABLE, str_table,
-                     MAIL_SERVER_BOOL_TABLE, bool_table,
-                     MAIL_SERVER_NBOOL_TABLE, nbool_table,
-                     MAIL_SERVER_TIME_TABLE, time_table,
-                     MAIL_SERVER_PRE_INIT, pre_jail_init,
-                     MAIL_SERVER_POST_INIT, post_jail_init,
-                     MAIL_SERVER_SLOW_EXIT, tlsp_drain,
-                     MAIL_SERVER_WATCHDOG, &var_tlsp_watchdog,
+                     MAIL_SERVER_REQ_INT_TABLE(int_table),
+                     MAIL_SERVER_REQ_NINT_TABLE(nint_table),
+                     MAIL_SERVER_REQ_STR_TABLE(str_table),
+                     MAIL_SERVER_REQ_BOOL_TABLE(bool_table),
+                     MAIL_SERVER_REQ_NBOOL_TABLE(nbool_table),
+                     MAIL_SERVER_REQ_TIME_TABLE(time_table),
+                     MAIL_SERVER_REQ_PRE_INIT(pre_jail_init),
+                     MAIL_SERVER_REQ_POST_INIT(post_jail_init),
+                     MAIL_SERVER_REQ_SLOW_EXIT(tlsp_drain),
+                     MAIL_SERVER_REQ_WATCHDOG(&var_tlsp_watchdog),
                      0);
 }
 
index d167a9a7ccaf4b83f26947c47f21cb22dc1ca5e2..ab70d5ad2545adf326a86fdd3f235f4c300d0242 100644 (file)
@@ -629,13 +629,13 @@ int     main(int argc, char **argv)
     MAIL_VERSION_STAMP_ALLOCATE;
 
     multi_server_main(argc, argv, rewrite_service,
-                     MAIL_SERVER_STR_TABLE, str_table,
-                     MAIL_SERVER_BOOL_TABLE, bool_table,
-                     MAIL_SERVER_NBOOL_TABLE, nbool_table,
-                     MAIL_SERVER_PRE_INIT, pre_jail_init,
-                     MAIL_SERVER_POST_INIT, post_jail_init,
+                     MAIL_SERVER_REQ_STR_TABLE(str_table),
+                     MAIL_SERVER_REQ_BOOL_TABLE(bool_table),
+                     MAIL_SERVER_REQ_NBOOL_TABLE(nbool_table),
+                     MAIL_SERVER_REQ_PRE_INIT(pre_jail_init),
+                     MAIL_SERVER_REQ_POST_INIT(post_jail_init),
 #ifdef CHECK_TABLE_STATS_BEFORE_ACCEPT
-                     MAIL_SERVER_PRE_ACCEPT, pre_accept,
+                     MAIL_SERVER_REQ_PRE_ACCEPT(pre_accept),
 #endif
                      0);
 }
index ded35f049d2107bc4fabca6db06db6350083ad16..e8739d1b2c659b889046a2fa65a8041ff59f9ce3 100644 (file)
@@ -39,7 +39,7 @@ SRCS  = alldig.c allprint.c argv.c argv_split.c attr_clnt.c attr_print0.c \
        dict_sockmap.c line_number.c recv_pass_attr.c pass_accept.c \
        poll_fd.c timecmp.c slmdb.c dict_pipe.c dict_random.c \
        valid_utf8_hostname.c midna.c argv_splitq.c balpar.c dict_union.c \
-       extpar.c dict_inline.c attr.c
+       extpar.c dict_inline.c
 OBJS   = alldig.o allprint.o argv.o argv_split.o attr_clnt.o attr_print0.o \
        attr_print64.o attr_print_plain.o attr_scan0.o attr_scan64.o \
        attr_scan_plain.o auto_clnt.o base64_code.o basename.o binhash.o \
@@ -80,7 +80,7 @@ OBJS  = alldig.o allprint.o argv.o argv_split.o attr_clnt.o attr_print0.o \
        dict_sockmap.o line_number.o recv_pass_attr.o pass_accept.o \
        poll_fd.o timecmp.o $(NON_PLUGIN_MAP_OBJ) dict_pipe.o dict_random.o \
        valid_utf8_hostname.o midna.o argv_splitq.o balpar.o dict_union.o \
-       extpar.o dict_inline.o attr.o
+       extpar.o dict_inline.o
 # MAP_OBJ is for maps that may be dynamically loaded with dynamicmaps.cf.
 # When hard-linking these, makedefs sets NON_PLUGIN_MAP_OBJ=$(MAP_OBJ),
 # otherwise it sets the PLUGIN_* macros.
@@ -509,7 +509,7 @@ midna: $(LIB)
        $(CC) $(CFLAGS) -DTEST -o $@ $@.c $(LIB) $(SYSLIBS)
        mv junk $@.o
 
-tests: valid_hostname_test mac_expand_test dict_test unescape_test \
+tests: all valid_hostname_test mac_expand_test dict_test unescape_test \
        hex_quote_test ctable_test inet_addr_list_test base64_code_test \
        attr_scan64_test attr_scan0_test dict_pcre_test host_port_test \
        dict_cidr_test attr_scan_plain_test htable_test hex_code_test \
@@ -761,21 +761,25 @@ depend: $(MAKES)
 
 # do not edit below this line - it is generated by 'make depend'
 allascii.o: allascii.c
+allascii.o: check_arg.h
 allascii.o: stringops.h
 allascii.o: sys_defs.h
 allascii.o: vbuf.h
 allascii.o: vstring.h
 alldig.o: alldig.c
+alldig.o: check_arg.h
 alldig.o: stringops.h
 alldig.o: sys_defs.h
 alldig.o: vbuf.h
 alldig.o: vstring.h
 allprint.o: allprint.c
+allprint.o: check_arg.h
 allprint.o: stringops.h
 allprint.o: sys_defs.h
 allprint.o: vbuf.h
 allprint.o: vstring.h
 allspace.o: allspace.c
+allspace.o: check_arg.h
 allspace.o: stringops.h
 allspace.o: sys_defs.h
 allspace.o: vbuf.h
@@ -787,6 +791,7 @@ argv.o: mymalloc.h
 argv.o: sys_defs.h
 argv_split.o: argv.h
 argv_split.o: argv_split.c
+argv_split.o: check_arg.h
 argv_split.o: msg.h
 argv_split.o: mymalloc.h
 argv_split.o: stringops.h
@@ -795,22 +800,13 @@ argv_split.o: vbuf.h
 argv_split.o: vstring.h
 argv_splitq.o: argv.h
 argv_splitq.o: argv_splitq.c
+argv_splitq.o: check_arg.h
 argv_splitq.o: msg.h
 argv_splitq.o: mymalloc.h
 argv_splitq.o: stringops.h
 argv_splitq.o: sys_defs.h
 argv_splitq.o: vbuf.h
 argv_splitq.o: vstring.h
-attr.o: attr.c
-attr.o: attr.h
-attr.o: check_arg.h
-attr.o: htable.h
-attr.o: mymalloc.h
-attr.o: nvtable.h
-attr.o: sys_defs.h
-attr.o: vbuf.h
-attr.o: vstream.h
-attr.o: vstring.h
 attr_clnt.o: attr.h
 attr_clnt.o: attr_clnt.c
 attr_clnt.o: attr_clnt.h
@@ -901,6 +897,7 @@ attr_scan_plain.o: vstream.h
 attr_scan_plain.o: vstring.h
 auto_clnt.o: auto_clnt.c
 auto_clnt.o: auto_clnt.h
+auto_clnt.o: check_arg.h
 auto_clnt.o: connect.h
 auto_clnt.o: events.h
 auto_clnt.o: iostuff.h
@@ -911,12 +908,14 @@ auto_clnt.o: sys_defs.h
 auto_clnt.o: vbuf.h
 auto_clnt.o: vstream.h
 balpar.o: balpar.c
+balpar.o: check_arg.h
 balpar.o: stringops.h
 balpar.o: sys_defs.h
 balpar.o: vbuf.h
 balpar.o: vstring.h
 base32_code.o: base32_code.c
 base32_code.o: base32_code.h
+base32_code.o: check_arg.h
 base32_code.o: msg.h
 base32_code.o: mymalloc.h
 base32_code.o: sys_defs.h
@@ -924,12 +923,14 @@ base32_code.o: vbuf.h
 base32_code.o: vstring.h
 base64_code.o: base64_code.c
 base64_code.o: base64_code.h
+base64_code.o: check_arg.h
 base64_code.o: msg.h
 base64_code.o: mymalloc.h
 base64_code.o: sys_defs.h
 base64_code.o: vbuf.h
 base64_code.o: vstring.h
 basename.o: basename.c
+basename.o: check_arg.h
 basename.o: stringops.h
 basename.o: sys_defs.h
 basename.o: vbuf.h
@@ -939,12 +940,11 @@ binhash.o: binhash.h
 binhash.o: msg.h
 binhash.o: mymalloc.h
 binhash.o: sys_defs.h
-check_arg.o: check_arg.c
-check_arg.o: sys_defs.h
 chroot_uid.o: chroot_uid.c
 chroot_uid.o: chroot_uid.h
 chroot_uid.o: msg.h
 chroot_uid.o: sys_defs.h
+cidr_match.o: check_arg.h
 cidr_match.o: cidr_match.c
 cidr_match.o: cidr_match.h
 cidr_match.o: mask_addr.h
@@ -965,6 +965,7 @@ close_on_exec.o: close_on_exec.c
 close_on_exec.o: iostuff.h
 close_on_exec.o: msg.h
 close_on_exec.o: sys_defs.h
+concatenate.o: check_arg.h
 concatenate.o: compat_va_copy.h
 concatenate.o: concatenate.c
 concatenate.o: mymalloc.h
@@ -980,6 +981,7 @@ ctable.o: mymalloc.h
 ctable.o: ring.h
 ctable.o: sys_defs.h
 dict.o: argv.h
+dict.o: check_arg.h
 dict.o: dict.c
 dict.o: dict.h
 dict.o: dict_ht.h
@@ -1000,6 +1002,7 @@ dict.o: vstream.h
 dict.o: vstring.h
 dict.o: warn_stat.h
 dict_alloc.o: argv.h
+dict_alloc.o: check_arg.h
 dict_alloc.o: dict.h
 dict_alloc.o: dict_alloc.c
 dict_alloc.o: msg.h
@@ -1010,6 +1013,7 @@ dict_alloc.o: vbuf.h
 dict_alloc.o: vstream.h
 dict_alloc.o: vstring.h
 dict_cache.o: argv.h
+dict_cache.o: check_arg.h
 dict_cache.o: dict.h
 dict_cache.o: dict_cache.c
 dict_cache.o: dict_cache.h
@@ -1022,6 +1026,7 @@ dict_cache.o: vbuf.h
 dict_cache.o: vstream.h
 dict_cache.o: vstring.h
 dict_cdb.o: argv.h
+dict_cdb.o: check_arg.h
 dict_cdb.o: dict.h
 dict_cdb.o: dict_cdb.c
 dict_cdb.o: dict_cdb.h
@@ -1036,6 +1041,7 @@ dict_cdb.o: vstream.h
 dict_cdb.o: vstring.h
 dict_cdb.o: warn_stat.h
 dict_cidr.o: argv.h
+dict_cidr.o: check_arg.h
 dict_cidr.o: cidr_match.h
 dict_cidr.o: dict.h
 dict_cidr.o: dict_cidr.c
@@ -1052,6 +1058,7 @@ dict_cidr.o: vstream.h
 dict_cidr.o: vstring.h
 dict_cidr.o: warn_stat.h
 dict_db.o: argv.h
+dict_db.o: check_arg.h
 dict_db.o: dict.h
 dict_db.o: dict_db.c
 dict_db.o: dict_db.h
@@ -1068,6 +1075,7 @@ dict_db.o: warn_stat.h
 dict_dbm.o: dict_dbm.c
 dict_dbm.o: sys_defs.h
 dict_debug.o: argv.h
+dict_debug.o: check_arg.h
 dict_debug.o: dict.h
 dict_debug.o: dict_debug.c
 dict_debug.o: msg.h
@@ -1078,6 +1086,7 @@ dict_debug.o: vbuf.h
 dict_debug.o: vstream.h
 dict_debug.o: vstring.h
 dict_env.o: argv.h
+dict_env.o: check_arg.h
 dict_env.o: dict.h
 dict_env.o: dict_env.c
 dict_env.o: dict_env.h
@@ -1091,6 +1100,7 @@ dict_env.o: vbuf.h
 dict_env.o: vstream.h
 dict_env.o: vstring.h
 dict_fail.o: argv.h
+dict_fail.o: check_arg.h
 dict_fail.o: dict.h
 dict_fail.o: dict_fail.c
 dict_fail.o: dict_fail.h
@@ -1102,6 +1112,7 @@ dict_fail.o: vbuf.h
 dict_fail.o: vstream.h
 dict_fail.o: vstring.h
 dict_ht.o: argv.h
+dict_ht.o: check_arg.h
 dict_ht.o: dict.h
 dict_ht.o: dict_ht.c
 dict_ht.o: dict_ht.h
@@ -1114,6 +1125,7 @@ dict_ht.o: vbuf.h
 dict_ht.o: vstream.h
 dict_ht.o: vstring.h
 dict_inline.o: argv.h
+dict_inline.o: check_arg.h
 dict_inline.o: dict.h
 dict_inline.o: dict_inline.c
 dict_inline.o: dict_inline.h
@@ -1127,6 +1139,7 @@ dict_inline.o: vbuf.h
 dict_inline.o: vstream.h
 dict_inline.o: vstring.h
 dict_lmdb.o: argv.h
+dict_lmdb.o: check_arg.h
 dict_lmdb.o: dict.h
 dict_lmdb.o: dict_lmdb.c
 dict_lmdb.o: dict_lmdb.h
@@ -1145,6 +1158,7 @@ dict_lmdb.o: warn_stat.h
 dict_ni.o: dict_ni.c
 dict_ni.o: sys_defs.h
 dict_nis.o: argv.h
+dict_nis.o: check_arg.h
 dict_nis.o: dict.h
 dict_nis.o: dict_nis.c
 dict_nis.o: dict_nis.h
@@ -1157,6 +1171,7 @@ dict_nis.o: vbuf.h
 dict_nis.o: vstream.h
 dict_nis.o: vstring.h
 dict_nisplus.o: argv.h
+dict_nisplus.o: check_arg.h
 dict_nisplus.o: dict.h
 dict_nisplus.o: dict_nisplus.c
 dict_nisplus.o: dict_nisplus.h
@@ -1169,6 +1184,7 @@ dict_nisplus.o: vbuf.h
 dict_nisplus.o: vstream.h
 dict_nisplus.o: vstring.h
 dict_open.o: argv.h
+dict_open.o: check_arg.h
 dict_open.o: dict.h
 dict_open.o: dict_cdb.h
 dict_open.o: dict_cidr.h
@@ -1205,6 +1221,7 @@ dict_open.o: vbuf.h
 dict_open.o: vstream.h
 dict_open.o: vstring.h
 dict_pcre.o: argv.h
+dict_pcre.o: check_arg.h
 dict_pcre.o: dict.h
 dict_pcre.o: dict_pcre.c
 dict_pcre.o: dict_pcre.h
@@ -1221,6 +1238,7 @@ dict_pcre.o: vstream.h
 dict_pcre.o: vstring.h
 dict_pcre.o: warn_stat.h
 dict_pipe.o: argv.h
+dict_pipe.o: check_arg.h
 dict_pipe.o: dict.h
 dict_pipe.o: dict_pipe.c
 dict_pipe.o: dict_pipe.h
@@ -1234,6 +1252,7 @@ dict_pipe.o: vbuf.h
 dict_pipe.o: vstream.h
 dict_pipe.o: vstring.h
 dict_random.o: argv.h
+dict_random.o: check_arg.h
 dict_random.o: dict.h
 dict_random.o: dict_random.c
 dict_random.o: dict_random.h
@@ -1247,6 +1266,7 @@ dict_random.o: vbuf.h
 dict_random.o: vstream.h
 dict_random.o: vstring.h
 dict_regexp.o: argv.h
+dict_regexp.o: check_arg.h
 dict_regexp.o: dict.h
 dict_regexp.o: dict_regexp.c
 dict_regexp.o: dict_regexp.h
@@ -1263,6 +1283,7 @@ dict_regexp.o: vstream.h
 dict_regexp.o: vstring.h
 dict_regexp.o: warn_stat.h
 dict_sdbm.o: argv.h
+dict_sdbm.o: check_arg.h
 dict_sdbm.o: dict.h
 dict_sdbm.o: dict_sdbm.c
 dict_sdbm.o: dict_sdbm.h
@@ -1279,6 +1300,7 @@ dict_sdbm.o: vstring.h
 dict_sdbm.o: warn_stat.h
 dict_sockmap.o: argv.h
 dict_sockmap.o: auto_clnt.h
+dict_sockmap.o: check_arg.h
 dict_sockmap.o: dict.h
 dict_sockmap.o: dict_sockmap.c
 dict_sockmap.o: dict_sockmap.h
@@ -1294,6 +1316,7 @@ dict_sockmap.o: vbuf.h
 dict_sockmap.o: vstream.h
 dict_sockmap.o: vstring.h
 dict_static.o: argv.h
+dict_static.o: check_arg.h
 dict_static.o: dict.h
 dict_static.o: dict_static.c
 dict_static.o: dict_static.h
@@ -1306,6 +1329,7 @@ dict_static.o: vbuf.h
 dict_static.o: vstream.h
 dict_static.o: vstring.h
 dict_surrogate.o: argv.h
+dict_surrogate.o: check_arg.h
 dict_surrogate.o: compat_va_copy.h
 dict_surrogate.o: dict.h
 dict_surrogate.o: dict_surrogate.c
@@ -1317,6 +1341,7 @@ dict_surrogate.o: vbuf.h
 dict_surrogate.o: vstream.h
 dict_surrogate.o: vstring.h
 dict_tcp.o: argv.h
+dict_tcp.o: check_arg.h
 dict_tcp.o: connect.h
 dict_tcp.o: dict.h
 dict_tcp.o: dict_tcp.c
@@ -1333,6 +1358,7 @@ dict_tcp.o: vstream.h
 dict_tcp.o: vstring.h
 dict_tcp.o: vstring_vstream.h
 dict_test.o: argv.h
+dict_test.o: check_arg.h
 dict_test.o: dict.h
 dict_test.o: dict_db.h
 dict_test.o: dict_lmdb.h
@@ -1347,6 +1373,7 @@ dict_test.o: vstream.h
 dict_test.o: vstring.h
 dict_test.o: vstring_vstream.h
 dict_thash.o: argv.h
+dict_thash.o: check_arg.h
 dict_thash.o: dict.h
 dict_thash.o: dict_thash.c
 dict_thash.o: dict_thash.h
@@ -1363,6 +1390,7 @@ dict_thash.o: vstream.h
 dict_thash.o: vstring.h
 dict_thash.o: warn_stat.h
 dict_union.o: argv.h
+dict_union.o: check_arg.h
 dict_union.o: dict.h
 dict_union.o: dict_union.c
 dict_union.o: dict_union.h
@@ -1376,6 +1404,7 @@ dict_union.o: vbuf.h
 dict_union.o: vstream.h
 dict_union.o: vstring.h
 dict_unix.o: argv.h
+dict_unix.o: check_arg.h
 dict_unix.o: dict.h
 dict_unix.o: dict_unix.c
 dict_unix.o: dict_unix.h
@@ -1387,6 +1416,7 @@ dict_unix.o: sys_defs.h
 dict_unix.o: vbuf.h
 dict_unix.o: vstream.h
 dict_unix.o: vstring.h
+dir_forest.o: check_arg.h
 dir_forest.o: dir_forest.c
 dir_forest.o: dir_forest.h
 dir_forest.o: msg.h
@@ -1410,6 +1440,7 @@ duplex_pipe.o: duplex_pipe.c
 duplex_pipe.o: iostuff.h
 duplex_pipe.o: sane_socketpair.h
 duplex_pipe.o: sys_defs.h
+edit_file.o: check_arg.h
 edit_file.o: edit_file.c
 edit_file.o: edit_file.h
 edit_file.o: msg.h
@@ -1435,6 +1466,7 @@ exec_command.o: exec_command.c
 exec_command.o: exec_command.h
 exec_command.o: msg.h
 exec_command.o: sys_defs.h
+extpar.o: check_arg.h
 extpar.o: extpar.c
 extpar.o: msg.h
 extpar.o: stringops.h
@@ -1453,6 +1485,7 @@ fifo_rdonly_bug.o: fifo_rdonly_bug.c
 fifo_rdonly_bug.o: sys_defs.h
 fifo_rdwr_bug.o: fifo_rdwr_bug.c
 fifo_rdwr_bug.o: sys_defs.h
+fifo_trigger.o: check_arg.h
 fifo_trigger.o: fifo_trigger.c
 fifo_trigger.o: iostuff.h
 fifo_trigger.o: msg.h
@@ -1466,6 +1499,7 @@ file_limit.o: file_limit.c
 file_limit.o: iostuff.h
 file_limit.o: msg.h
 file_limit.o: sys_defs.h
+find_inet.o: check_arg.h
 find_inet.o: find_inet.c
 find_inet.o: find_inet.h
 find_inet.o: msg.h
@@ -1473,6 +1507,7 @@ find_inet.o: stringops.h
 find_inet.o: sys_defs.h
 find_inet.o: vbuf.h
 find_inet.o: vstring.h
+format_tv.o: check_arg.h
 format_tv.o: format_tv.c
 format_tv.o: format_tv.h
 format_tv.o: msg.h
@@ -1483,6 +1518,7 @@ fsspace.o: fsspace.c
 fsspace.o: fsspace.h
 fsspace.o: msg.h
 fsspace.o: sys_defs.h
+fullname.o: check_arg.h
 fullname.o: fullname.c
 fullname.o: fullname.h
 fullname.o: safe.h
@@ -1501,6 +1537,7 @@ get_hostname.o: msg.h
 get_hostname.o: mymalloc.h
 get_hostname.o: sys_defs.h
 get_hostname.o: valid_hostname.h
+hex_code.o: check_arg.h
 hex_code.o: hex_code.c
 hex_code.o: hex_code.h
 hex_code.o: msg.h
@@ -1508,12 +1545,14 @@ hex_code.o: mymalloc.h
 hex_code.o: sys_defs.h
 hex_code.o: vbuf.h
 hex_code.o: vstring.h
+hex_quote.o: check_arg.h
 hex_quote.o: hex_quote.c
 hex_quote.o: hex_quote.h
 hex_quote.o: msg.h
 hex_quote.o: sys_defs.h
 hex_quote.o: vbuf.h
 hex_quote.o: vstring.h
+host_port.o: check_arg.h
 host_port.o: host_port.c
 host_port.o: host_port.h
 host_port.o: msg.h
@@ -1545,6 +1584,7 @@ inet_addr_list.o: myaddrinfo.h
 inet_addr_list.o: mymalloc.h
 inet_addr_list.o: sock_addr.h
 inet_addr_list.o: sys_defs.h
+inet_addr_local.o: check_arg.h
 inet_addr_local.o: hex_code.h
 inet_addr_local.o: inet_addr_list.h
 inet_addr_local.o: inet_addr_local.c
@@ -1581,6 +1621,7 @@ inet_listen.o: mymalloc.h
 inet_listen.o: sane_accept.h
 inet_listen.o: sock_addr.h
 inet_listen.o: sys_defs.h
+inet_proto.o: check_arg.h
 inet_proto.o: inet_proto.c
 inet_proto.o: inet_proto.h
 inet_proto.o: msg.h
@@ -1602,6 +1643,7 @@ inet_windowsize.o: inet_windowsize.c
 inet_windowsize.o: iostuff.h
 inet_windowsize.o: msg.h
 inet_windowsize.o: sys_defs.h
+ip_match.o: check_arg.h
 ip_match.o: ip_match.c
 ip_match.o: ip_match.h
 ip_match.o: msg.h
@@ -1612,6 +1654,7 @@ ip_match.o: vstring.h
 killme_after.o: killme_after.c
 killme_after.o: killme_after.h
 killme_after.o: sys_defs.h
+line_number.o: check_arg.h
 line_number.o: line_number.c
 line_number.o: line_number.h
 line_number.o: sys_defs.h
@@ -1620,6 +1663,7 @@ line_number.o: vstring.h
 line_wrap.o: line_wrap.c
 line_wrap.o: line_wrap.h
 line_wrap.o: sys_defs.h
+load_file.o: check_arg.h
 load_file.o: iostuff.h
 load_file.o: load_file.c
 load_file.o: load_file.h
@@ -1629,7 +1673,10 @@ load_file.o: vbuf.h
 load_file.o: vstream.h
 load_file.o: warn_stat.h
 load_lib.o: load_lib.c
+load_lib.o: load_lib.h
+load_lib.o: msg.h
 load_lib.o: sys_defs.h
+lowercase.o: check_arg.h
 lowercase.o: lowercase.c
 lowercase.o: stringops.h
 lowercase.o: sys_defs.h
@@ -1641,6 +1688,7 @@ lstat_as.o: msg.h
 lstat_as.o: set_eugid.h
 lstat_as.o: sys_defs.h
 lstat_as.o: warn_stat.h
+mac_expand.o: check_arg.h
 mac_expand.o: mac_expand.c
 mac_expand.o: mac_expand.h
 mac_expand.o: mac_parse.h
@@ -1651,12 +1699,14 @@ mac_expand.o: stringops.h
 mac_expand.o: sys_defs.h
 mac_expand.o: vbuf.h
 mac_expand.o: vstring.h
+mac_parse.o: check_arg.h
 mac_parse.o: mac_parse.c
 mac_parse.o: mac_parse.h
 mac_parse.o: msg.h
 mac_parse.o: sys_defs.h
 mac_parse.o: vbuf.h
 mac_parse.o: vstring.h
+make_dirs.o: check_arg.h
 make_dirs.o: make_dirs.c
 make_dirs.o: make_dirs.h
 make_dirs.o: msg.h
@@ -1671,6 +1721,7 @@ mask_addr.o: mask_addr.h
 mask_addr.o: msg.h
 mask_addr.o: sys_defs.h
 match_list.o: argv.h
+match_list.o: check_arg.h
 match_list.o: dict.h
 match_list.o: match_list.c
 match_list.o: match_list.h
@@ -1684,6 +1735,7 @@ match_list.o: vstream.h
 match_list.o: vstring.h
 match_list.o: vstring_vstream.h
 match_ops.o: argv.h
+match_ops.o: check_arg.h
 match_ops.o: cidr_match.h
 match_ops.o: dict.h
 match_ops.o: match_list.h
@@ -1698,6 +1750,7 @@ match_ops.o: sys_defs.h
 match_ops.o: vbuf.h
 match_ops.o: vstream.h
 match_ops.o: vstring.h
+midna.o: check_arg.h
 midna.o: ctable.h
 midna.o: midna.c
 midna.o: midna.h
@@ -1712,6 +1765,7 @@ msg.o: msg.c
 msg.o: msg.h
 msg.o: msg_output.h
 msg.o: sys_defs.h
+msg_output.o: check_arg.h
 msg_output.o: msg_output.c
 msg_output.o: msg_output.h
 msg_output.o: msg_vstream.h
@@ -1722,12 +1776,14 @@ msg_output.o: sys_defs.h
 msg_output.o: vbuf.h
 msg_output.o: vstream.h
 msg_output.o: vstring.h
+msg_rate_delay.o: check_arg.h
 msg_rate_delay.o: events.h
 msg_rate_delay.o: msg.h
 msg_rate_delay.o: msg_rate_delay.c
 msg_rate_delay.o: sys_defs.h
 msg_rate_delay.o: vbuf.h
 msg_rate_delay.o: vstring.h
+msg_syslog.o: check_arg.h
 msg_syslog.o: msg.h
 msg_syslog.o: msg_output.h
 msg_syslog.o: msg_syslog.c
@@ -1737,6 +1793,7 @@ msg_syslog.o: stringops.h
 msg_syslog.o: sys_defs.h
 msg_syslog.o: vbuf.h
 msg_syslog.o: vstring.h
+msg_vstream.o: check_arg.h
 msg_vstream.o: msg.h
 msg_vstream.o: msg_output.h
 msg_vstream.o: msg_vstream.c
@@ -1748,6 +1805,7 @@ mvect.o: mvect.c
 mvect.o: mvect.h
 mvect.o: mymalloc.h
 mvect.o: sys_defs.h
+myaddrinfo.o: check_arg.h
 myaddrinfo.o: inet_proto.h
 myaddrinfo.o: msg.h
 myaddrinfo.o: myaddrinfo.c
@@ -1771,6 +1829,7 @@ mymalloc.o: sys_defs.h
 myrand.o: myrand.c
 myrand.o: myrand.h
 myrand.o: sys_defs.h
+mystrtok.o: check_arg.h
 mystrtok.o: mystrtok.c
 mystrtok.o: stringops.h
 mystrtok.o: sys_defs.h
@@ -1779,6 +1838,7 @@ mystrtok.o: vstring.h
 name_code.o: name_code.c
 name_code.o: name_code.h
 name_code.o: sys_defs.h
+name_mask.o: check_arg.h
 name_mask.o: msg.h
 name_mask.o: mymalloc.h
 name_mask.o: name_mask.c
@@ -1793,6 +1853,7 @@ nbbio.o: mymalloc.h
 nbbio.o: nbbio.c
 nbbio.o: nbbio.h
 nbbio.o: sys_defs.h
+netstring.o: check_arg.h
 netstring.o: compat_va_copy.h
 netstring.o: msg.h
 netstring.o: netstring.c
@@ -1801,6 +1862,7 @@ netstring.o: sys_defs.h
 netstring.o: vbuf.h
 netstring.o: vstream.h
 netstring.o: vstring.h
+neuter.o: check_arg.h
 neuter.o: neuter.c
 neuter.o: stringops.h
 neuter.o: sys_defs.h
@@ -1823,6 +1885,7 @@ open_as.o: sys_defs.h
 open_limit.o: iostuff.h
 open_limit.o: open_limit.c
 open_limit.o: sys_defs.h
+open_lock.o: check_arg.h
 open_lock.o: msg.h
 open_lock.o: myflock.h
 open_lock.o: open_lock.c
@@ -1856,6 +1919,7 @@ pass_trigger.o: trigger.h
 peekfd.o: iostuff.h
 peekfd.o: peekfd.c
 peekfd.o: sys_defs.h
+percentm.o: check_arg.h
 percentm.o: percentm.c
 percentm.o: percentm.h
 percentm.o: sys_defs.h
@@ -1868,6 +1932,7 @@ poll_fd.o: sys_defs.h
 posix_signals.o: posix_signals.c
 posix_signals.o: posix_signals.h
 posix_signals.o: sys_defs.h
+printable.o: check_arg.h
 printable.o: printable.c
 printable.o: stringops.h
 printable.o: sys_defs.h
@@ -1878,6 +1943,7 @@ rand_sleep.o: msg.h
 rand_sleep.o: myrand.h
 rand_sleep.o: rand_sleep.c
 rand_sleep.o: sys_defs.h
+readlline.o: check_arg.h
 readlline.o: msg.h
 readlline.o: readlline.c
 readlline.o: readlline.h
@@ -1902,6 +1968,7 @@ ring.o: ring.h
 safe_getenv.o: safe.h
 safe_getenv.o: safe_getenv.c
 safe_getenv.o: sys_defs.h
+safe_open.o: check_arg.h
 safe_open.o: msg.h
 safe_open.o: safe_open.c
 safe_open.o: safe_open.h
@@ -1915,6 +1982,7 @@ sane_accept.o: msg.h
 sane_accept.o: sane_accept.c
 sane_accept.o: sane_accept.h
 sane_accept.o: sys_defs.h
+sane_basename.o: check_arg.h
 sane_basename.o: sane_basename.c
 sane_basename.o: stringops.h
 sane_basename.o: sys_defs.h
@@ -1942,6 +2010,7 @@ sane_time.o: msg.h
 sane_time.o: sane_time.c
 sane_time.o: sane_time.h
 sane_time.o: sys_defs.h
+scan_dir.o: check_arg.h
 scan_dir.o: msg.h
 scan_dir.o: mymalloc.h
 scan_dir.o: scan_dir.c
@@ -1950,6 +2019,7 @@ scan_dir.o: stringops.h
 scan_dir.o: sys_defs.h
 scan_dir.o: vbuf.h
 scan_dir.o: vstring.h
+select_bug.o: check_arg.h
 select_bug.o: msg.h
 select_bug.o: msg_vstream.h
 select_bug.o: select_bug.c
@@ -1969,11 +2039,13 @@ sigdelay.o: posix_signals.h
 sigdelay.o: sigdelay.c
 sigdelay.o: sigdelay.h
 sigdelay.o: sys_defs.h
+skipblanks.o: check_arg.h
 skipblanks.o: skipblanks.c
 skipblanks.o: stringops.h
 skipblanks.o: sys_defs.h
 skipblanks.o: vbuf.h
 skipblanks.o: vstring.h
+slmdb.o: check_arg.h
 slmdb.o: slmdb.c
 slmdb.o: slmdb.h
 sock_addr.o: msg.h
@@ -1981,6 +2053,7 @@ sock_addr.o: sock_addr.c
 sock_addr.o: sock_addr.h
 sock_addr.o: sys_defs.h
 spawn_command.o: argv.h
+spawn_command.o: check_arg.h
 spawn_command.o: clean_env.h
 spawn_command.o: exec_command.h
 spawn_command.o: msg.h
@@ -1992,6 +2065,7 @@ spawn_command.o: timed_wait.h
 split_at.o: split_at.c
 split_at.o: split_at.h
 split_at.o: sys_defs.h
+split_nameval.o: check_arg.h
 split_nameval.o: msg.h
 split_nameval.o: split_nameval.c
 split_nameval.o: stringops.h
@@ -2025,6 +2099,7 @@ stream_send_fd.o: iostuff.h
 stream_send_fd.o: msg.h
 stream_send_fd.o: stream_send_fd.c
 stream_send_fd.o: sys_defs.h
+stream_test.o: check_arg.h
 stream_test.o: connect.h
 stream_test.o: htable.h
 stream_test.o: iostuff.h
@@ -2066,16 +2141,19 @@ timed_write.o: iostuff.h
 timed_write.o: msg.h
 timed_write.o: sys_defs.h
 timed_write.o: timed_write.c
+translit.o: check_arg.h
 translit.o: stringops.h
 translit.o: sys_defs.h
 translit.o: translit.c
 translit.o: vbuf.h
 translit.o: vstring.h
+trimblanks.o: check_arg.h
 trimblanks.o: stringops.h
 trimblanks.o: sys_defs.h
 trimblanks.o: trimblanks.c
 trimblanks.o: vbuf.h
 trimblanks.o: vstring.h
+unescape.o: check_arg.h
 unescape.o: stringops.h
 unescape.o: sys_defs.h
 unescape.o: unescape.c
@@ -2095,6 +2173,7 @@ unix_listen.o: msg.h
 unix_listen.o: sane_accept.h
 unix_listen.o: sys_defs.h
 unix_listen.o: unix_listen.c
+unix_pass_fd_fix.o: check_arg.h
 unix_pass_fd_fix.o: iostuff.h
 unix_pass_fd_fix.o: name_mask.h
 unix_pass_fd_fix.o: sys_defs.h
@@ -2120,6 +2199,7 @@ unix_trigger.o: unix_trigger.c
 unsafe.o: safe.h
 unsafe.o: sys_defs.h
 unsafe.o: unsafe.c
+uppercase.o: check_arg.h
 uppercase.o: stringops.h
 uppercase.o: sys_defs.h
 uppercase.o: uppercase.c
@@ -2128,6 +2208,7 @@ uppercase.o: vstring.h
 username.o: sys_defs.h
 username.o: username.c
 username.o: username.h
+valid_hostname.o: check_arg.h
 valid_hostname.o: msg.h
 valid_hostname.o: mymalloc.h
 valid_hostname.o: stringops.h
@@ -2136,6 +2217,7 @@ valid_hostname.o: valid_hostname.c
 valid_hostname.o: valid_hostname.h
 valid_hostname.o: vbuf.h
 valid_hostname.o: vstring.h
+valid_utf8_hostname.o: check_arg.h
 valid_utf8_hostname.o: midna.h
 valid_utf8_hostname.o: msg.h
 valid_utf8_hostname.o: mymalloc.h
@@ -2146,6 +2228,7 @@ valid_utf8_hostname.o: valid_utf8_hostname.c
 valid_utf8_hostname.o: valid_utf8_hostname.h
 valid_utf8_hostname.o: vbuf.h
 valid_utf8_hostname.o: vstring.h
+valid_utf8_string.o: check_arg.h
 valid_utf8_string.o: stringops.h
 valid_utf8_string.o: sys_defs.h
 valid_utf8_string.o: valid_utf8_string.c
@@ -2154,12 +2237,14 @@ valid_utf8_string.o: vstring.h
 vbuf.o: sys_defs.h
 vbuf.o: vbuf.c
 vbuf.o: vbuf.h
+vbuf_print.o: check_arg.h
 vbuf_print.o: msg.h
 vbuf_print.o: sys_defs.h
 vbuf_print.o: vbuf.h
 vbuf_print.o: vbuf_print.c
 vbuf_print.o: vbuf_print.h
 vbuf_print.o: vstring.h
+vstream.o: check_arg.h
 vstream.o: iostuff.h
 vstream.o: msg.h
 vstream.o: mymalloc.h
@@ -2170,6 +2255,7 @@ vstream.o: vstream.c
 vstream.o: vstream.h
 vstream.o: vstring.h
 vstream_popen.o: argv.h
+vstream_popen.o: check_arg.h
 vstream_popen.o: clean_env.h
 vstream_popen.o: exec_command.h
 vstream_popen.o: iostuff.h
@@ -2179,11 +2265,13 @@ vstream_popen.o: sys_defs.h
 vstream_popen.o: vbuf.h
 vstream_popen.o: vstream.h
 vstream_popen.o: vstream_popen.c
+vstream_tweak.o: check_arg.h
 vstream_tweak.o: msg.h
 vstream_tweak.o: sys_defs.h
 vstream_tweak.o: vbuf.h
 vstream_tweak.o: vstream.h
 vstream_tweak.o: vstream_tweak.c
+vstring.o: check_arg.h
 vstring.o: msg.h
 vstring.o: mymalloc.h
 vstring.o: sys_defs.h
@@ -2191,6 +2279,7 @@ vstring.o: vbuf.h
 vstring.o: vbuf_print.h
 vstring.o: vstring.c
 vstring.o: vstring.h
+vstring_vstream.o: check_arg.h
 vstring_vstream.o: msg.h
 vstring_vstream.o: sys_defs.h
 vstring_vstream.o: vbuf.h
diff --git a/postfix/src/util/attr.c b/postfix/src/util/attr.c
deleted file mode 100644 (file)
index e382184..0000000
+++ /dev/null
@@ -1,49 +0,0 @@
-/*++
-/* NAME
-/*     attr 3
-/* SUMMARY
-/*     attribute list manipulations
-/* SYNOPSIS
-/*     #include <attr.h>
-/* DESCRIPTION
-/*     This module allocates storage for dummy variables that are
-/*     never referenced. They are used in expressions that are
-/*     discarded by the compiler. Only defective compiler would
-/*     generate code that references these variables.
-/* LICENSE
-/* .ad
-/* .fi
-/*     The Secure Mailer license must be distributed with this software.
-/* AUTHOR(S)
-/*     Wietse Venema
-/*     IBM T.J. Watson Research
-/*     P.O. Box 704
-/*     Yorktown Heights, NY 10598, USA
-/*--*/
-
- /*
-  * System library.
-  */
-#include <sys_defs.h>
-
- /*
-  * Utility library.
-  */
-#include <attr.h>
-
- /*
-  * These should never be referenced, but they are here just in case.
-  */
-int     CHECK_VAL_DUMMY(int);
-long    CHECK_VAL_DUMMY(long);
-ssize_t CHECK_VAL_DUMMY(ssize_t);
-int    *CHECK_PTR_DUMMY(int);
-long   *CHECK_PTR_DUMMY(long);
-void   *CHECK_PTR_DUMMY(void);
-const char *CHECK_CONST_PTR_DUMMY(char);
-const void *CHECK_CONST_PTR_DUMMY(void);
-VSTRING *CHECK_PTR_DUMMY(VSTRING);
-HTABLE *CHECK_PTR_DUMMY(HTABLE);
-const HTABLE *CHECK_CONST_PTR_DUMMY(HTABLE);
-NVTABLE *CHECK_PTR_DUMMY(NVTABLE);
-const NVTABLE *CHECK_CONST_PTR_DUMMY(NVTABLE);
index e398f23895bb28c13db106979eb085f38ca9ab19..b5d92e4f56e4dcc2f67b349706a2b6b6d46f84b8 100644 (file)
 
 #define ATTR_HASH_LIMIT                1024    /* Size of hash table */
 
-#define SEND_ATTR_INT(name, val)       ATTR_TYPE_INT, CHECK_CONST_PTR(char, name), CHECK_VAL(int, val)
-#define SEND_ATTR_STR(name, val)       ATTR_TYPE_STR, CHECK_CONST_PTR(char, name), CHECK_CONST_PTR(char, val)
-#define SEND_ATTR_HASH(val)            ATTR_TYPE_HASH, CHECK_CONST_PTR(HTABLE, val)
-#define SEND_ATTR_NV(val)              ATTR_TYPE_NV, CHECK_CONST_PTR(NVTABLE, val)
-#define SEND_ATTR_LONG(name, val)      ATTR_TYPE_LONG, CHECK_CONST_PTR(char, name), CHECK_VAL(long, val)
-#define SEND_ATTR_DATA(name, len, val) ATTR_TYPE_DATA, CHECK_CONST_PTR(char, name), CHECK_VAL(ssize_t, len), CHECK_CONST_PTR(void, val)
-#define SEND_ATTR_FUNC(func, val)      ATTR_TYPE_FUNC, (func), CHECK_CONST_PTR(void, val)
-
-#define RECV_ATTR_INT(name, val)       ATTR_TYPE_INT, CHECK_CONST_PTR(char, name), CHECK_PTR(int, val)
-#define RECV_ATTR_STR(name, val)       ATTR_TYPE_STR, CHECK_CONST_PTR(char, name), CHECK_PTR(VSTRING, val)
-#define RECV_ATTR_HASH(val)            ATTR_TYPE_HASH, CHECK_PTR(HTABLE, val)
-#define RECV_ATTR_NV(val)              ATTR_TYPE_NV, CHECK_PTR(NVTABLE, val)
-#define RECV_ATTR_LONG(name, val)      ATTR_TYPE_LONG, CHECK_CONST_PTR(char, name), CHECK_PTR(long, val)
-#define RECV_ATTR_DATA(name, val)      ATTR_TYPE_DATA, CHECK_CONST_PTR(char, name), CHECK_PTR(VSTRING, val)
-#define RECV_ATTR_FUNC(func, val)      ATTR_TYPE_FUNC, (func), CHECK_PTR(void, val)
-
-extern int CHECK_VAL_DUMMY(int);
-extern long CHECK_VAL_DUMMY(long);
-extern ssize_t CHECK_VAL_DUMMY(ssize_t);
-extern int *CHECK_PTR_DUMMY(int);
-extern long *CHECK_PTR_DUMMY(long);
-extern void *CHECK_PTR_DUMMY(void);
-extern const char *CHECK_CONST_PTR_DUMMY(char);
-extern const void *CHECK_CONST_PTR_DUMMY(void);
-
-extern VSTRING *CHECK_PTR_DUMMY(VSTRING);
-
-extern HTABLE *CHECK_PTR_DUMMY(HTABLE);
-extern const HTABLE *CHECK_CONST_PTR_DUMMY(HTABLE);
-
-extern NVTABLE *CHECK_PTR_DUMMY(NVTABLE);
-extern const NVTABLE *CHECK_CONST_PTR_DUMMY(NVTABLE);
+#define SEND_ATTR_INT(name, val)       ATTR_TYPE_INT, CHECK_CPTR(ATTR_TAG, char, (name)), CHECK_VAL(ATTR_TAG, int, (val))
+#define SEND_ATTR_STR(name, val)       ATTR_TYPE_STR, CHECK_CPTR(ATTR_TAG, char, (name)), CHECK_CPTR(ATTR_TAG, char, (val))
+#define SEND_ATTR_HASH(val)            ATTR_TYPE_HASH, CHECK_CPTR(ATTR_TAG, HTABLE, (val))
+#define SEND_ATTR_NV(val)              ATTR_TYPE_NV, CHECK_CPTR(ATTR_TAG, NVTABLE, (val))
+#define SEND_ATTR_LONG(name, val)      ATTR_TYPE_LONG, CHECK_CPTR(ATTR_TAG, char, (name)), CHECK_VAL(ATTR_TAG, long, (val))
+#define SEND_ATTR_DATA(name, len, val) ATTR_TYPE_DATA, CHECK_CPTR(ATTR_TAG, char, (name)), CHECK_VAL(ATTR_TAG, ssize_t, (len)), CHECK_CPTR(ATTR_TAG, void, (val))
+#define SEND_ATTR_FUNC(func, val)      ATTR_TYPE_FUNC, (func), CHECK_CPTR(ATTR_TAG, void, (val))
+
+#define RECV_ATTR_INT(name, val)       ATTR_TYPE_INT, CHECK_CPTR(ATTR_TAG, char, (name)), CHECK_PTR(ATTR_TAG, int, (val))
+#define RECV_ATTR_STR(name, val)       ATTR_TYPE_STR, CHECK_CPTR(ATTR_TAG, char, (name)), CHECK_PTR(ATTR_TAG, VSTRING, (val))
+#define RECV_ATTR_HASH(val)            ATTR_TYPE_HASH, CHECK_PTR(ATTR_TAG, HTABLE, (val))
+#define RECV_ATTR_NV(val)              ATTR_TYPE_NV, CHECK_PTR(ATTR_TAG, NVTABLE, (val))
+#define RECV_ATTR_LONG(name, val)      ATTR_TYPE_LONG, CHECK_CPTR(ATTR_TAG, char, (name)), CHECK_PTR(ATTR_TAG, long, (val))
+#define RECV_ATTR_DATA(name, val)      ATTR_TYPE_DATA, CHECK_CPTR(ATTR_TAG, char, (name)), CHECK_PTR(ATTR_TAG, VSTRING, (val))
+#define RECV_ATTR_FUNC(func, val)      ATTR_TYPE_FUNC, (func), CHECK_PTR(ATTR_TAG, void, (val))
+
+CHECK_VAL_HELPER_DCL(ATTR_TAG, ssize_t);
+CHECK_VAL_HELPER_DCL(ATTR_TAG, long);
+CHECK_VAL_HELPER_DCL(ATTR_TAG, int);
+CHECK_PTR_HELPER_DCL(ATTR_TAG, void);
+CHECK_PTR_HELPER_DCL(ATTR_TAG, long);
+CHECK_PTR_HELPER_DCL(ATTR_TAG, int);
+CHECK_PTR_HELPER_DCL(ATTR_TAG, VSTRING);
+CHECK_PTR_HELPER_DCL(ATTR_TAG, NVTABLE);
+CHECK_PTR_HELPER_DCL(ATTR_TAG, HTABLE);
+CHECK_CPTR_HELPER_DCL(ATTR_TAG, void);
+CHECK_CPTR_HELPER_DCL(ATTR_TAG, char);
+CHECK_CPTR_HELPER_DCL(ATTR_TAG, NVTABLE);
+CHECK_CPTR_HELPER_DCL(ATTR_TAG, HTABLE);
 
  /*
   * Flags that control processing. See attr_scan(3) for documentation.
index 9f038e2893d14b075a3f18467378154b7786d896..c5e5ac0ae454657798985d41d7f015aab23446b5 100644 (file)
@@ -31,7 +31,7 @@ typedef int (*ATTR_CLNT_SCAN_FN) (VSTREAM *, int, va_list);
 extern ATTR_CLNT *attr_clnt_create(const char *, int, int, int);
 extern int attr_clnt_request(ATTR_CLNT *, int,...);
 extern void attr_clnt_free(ATTR_CLNT *);
-extern void attr_clnt_control(ATTR_CLNT *, int, ...);
+extern void attr_clnt_control(ATTR_CLNT *, int,...);
 
 #define ATTR_CLNT_CTL_END      0
 #define ATTR_CLNT_CTL_PROTO    1       /* print/scan functions */
index 650fd6d7fd277c0cdd8313365cd79cbcd8e3a611..44238f5c770080ac41e0df7cbb4f3d77fb7f0f47 100644 (file)
 /*     By default, attr_print0() automatically appends an attribute list
 /*     terminator when it has sent the last requested attribute.
 /* .RE
-/* .IP type
-/*     The type determines the arguments that follow.
+/* .IP List of attributes followed by terminator:
 /* .RS
-/* .IP "ATTR_TYPE_INT (char *, int)"
-/*     This argument is followed by an attribute name and an integer.
-/* .IP "ATTR_TYPE_LONG (char *, long)"
-/*     This argument is followed by an attribute name and a long integer.
-/* .IP "ATTR_TYPE_STR (char *, char *)"
-/*     This argument is followed by an attribute name and a null-terminated
+/* .IP "SEND_ATTR_INT(const char *name, int value)"
+/*     The arguments are an attribute name and an integer.
+/* .IP "SEND_ATTR_LONG(const char *name, long value)"
+/*     The arguments are an attribute name and a long integer.
+/* .IP "SEND_ATTR_STR(const char *name, const char *value)"
+/*     The arguments are an attribute name and a null-terminated
 /*     string.
-/* .IP "ATTR_TYPE_DATA (char *, ssize_t, char *)"
-/*     This argument is followed by an attribute name, an attribute value
+/* .IP "SEND_ATTR_DATA(const char *name, ssize_t len, const void *value)"
+/*     The arguments are an attribute name, an attribute value
 /*     length, and an attribute value pointer.
-/* .IP "ATTR_TYPE_FUNC (ATTR_PRINT_SLAVE_FN, void *)"
-/*     This argument is followed by a function pointer and generic data
+/* .IP "SEND_ATTR_FUNC(ATTR_PRINT_SLAVE_FN, const void *value)"
+/*     The arguments are a function pointer and generic data
 /*     pointer. The caller-specified function returns whatever the
 /*     specified attribute printing function returns.
-/* .IP "ATTR_TYPE_HASH (HTABLE *)"
-/* .IP "ATTR_TYPE_NAMEVAL (NVTABLE *)"
+/* .IP "SEND_ATTR_HASH(const HTABLE *table)"
+/* .IP "SEND_ATTR_NAMEVAL(const NVTABLE *table)"
 /*     The content of the table is sent as a sequence of string-valued
 /*     attributes with names equal to the table lookup keys.
 /* .IP ATTR_TYPE_END
index 00d945fa3e43456ed070cd443568d7672d11d6db..63871a048962fc236445b9dbfc19c6fd795e44ee 100644 (file)
 /*     By default, attr_print64() automatically appends an attribute list
 /*     terminator when it has sent the last requested attribute.
 /* .RE
-/* .IP type
-/*     The type determines the arguments that follow.
+/* .IP List of attributes followed by terminator:
 /* .RS
-/* .IP "ATTR_TYPE_INT (char *, int)"
-/*     This argument is followed by an attribute name and an integer.
-/* .IP "ATTR_TYPE_LONG (char *, long)"
-/*     This argument is followed by an attribute name and a long integer.
-/* .IP "ATTR_TYPE_STR (char *, char *)"
-/*     This argument is followed by an attribute name and a null-terminated
+/* .IP "SEND_ATTR_INT(const char *name, int value)"
+/*     The arguments are an attribute name and an integer.
+/* .IP "SEND_ATTR_LONG(const char *name, long value)"
+/*     The arguments are an attribute name and a long integer.
+/* .IP "SEND_ATTR_STR(const char *name, const char *value)"
+/*     The arguments are an attribute name and a null-terminated
 /*     string.
-/* .IP "ATTR_TYPE_DATA (char *, ssize_t, char *)"
-/*     This argument is followed by an attribute name, an attribute value
+/* .IP "SEND_ATTR_DATA(const char *name, ssize_t len, const void *value)"
+/*     The arguments are an attribute name, an attribute value
 /*     length, and an attribute value pointer.
-/* .IP "ATTR_TYPE_FUNC (ATTR_PRINT_SLAVE_FN, void *)"
-/*     This argument is followed by a function pointer and generic data
+/* .IP "SEND_ATTR_FUNC(ATTR_PRINT_SLAVE_FN, const void *value)"
+/*     The arguments are a function pointer and generic data
 /*     pointer. The caller-specified function returns whatever the
 /*     specified attribute printing function returns.
-/* .IP "ATTR_TYPE_HASH (HTABLE *)"
-/* .IP "ATTR_TYPE_NAMEVAL (NVTABLE *)"
+/* .IP "SEND_ATTR_HASH(const HTABLE *table)"
+/* .IP "SEND_ATTR_NAMEVAL(const NVTABLE *table)"
 /*     The content of the table is sent as a sequence of string-valued
 /*     attributes with names equal to the table lookup keys.
 /* .IP ATTR_TYPE_END
index 4edb100d98a9c946060942b3f6bfca6113a2acc8..f94afb9af9781c36ddd8c407008e9b7883edc75c 100644 (file)
 /*     By default, attr_print_plain() automatically appends an attribute list
 /*     terminator when it has sent the last requested attribute.
 /* .RE
-/* .IP type
-/*     The type determines the arguments that follow.
+/* .IP List of attributes followed by terminator:
 /* .RS
-/* .IP "ATTR_TYPE_INT (char *, int)"
-/*     This argument is followed by an attribute name and an integer.
-/* .IP "ATTR_TYPE_LONG (char *, long)"
-/*     This argument is followed by an attribute name and a long integer.
-/* .IP "ATTR_TYPE_STR (char *, char *)"
-/*     This argument is followed by an attribute name and a null-terminated
+/* .IP "SEND_ATTR_INT(const char *name, int value)"
+/*     The arguments are an attribute name and an integer.
+/* .IP "SEND_ATTR_LONG(const char *name, long value)"
+/*     The arguments are an attribute name and a long integer.
+/* .IP "SEND_ATTR_STR(const char *name, const char *value)"
+/*     The arguments are an attribute name and a null-terminated
 /*     string.
-/* .IP "ATTR_TYPE_DATA (char *, ssize_t, char *)"
-/*     This argument is followed by an attribute name, an attribute value
-/*     length, and a pointer to attribute value.
-/* .IP "ATTR_TYPE_FUNC (ATTR_PRINT_SLAVE_FN, void *)"
-/*     This argument is followed by a function pointer and generic data
+/* .IP "SEND_ATTR_DATA(const char *name, ssize_t len, const void *value)"
+/*     The arguments are an attribute name, an attribute value
+/*     length, and an attribute value pointer.
+/* .IP "SEND_ATTR_FUNC(ATTR_PRINT_SLAVE_FN, const void *value)"
+/*     The arguments are a function pointer and generic data
 /*     pointer. The caller-specified function returns whatever the
 /*     specified attribute printing function returns.
-/* .IP "ATTR_TYPE_HASH (HTABLE *)"
-/* .IP "ATTR_TYPE_NAMEVAL (NVTABLE *)"
+/* .IP "SEND_ATTR_HASH(const HTABLE *table)"
+/* .IP "SEND_ATTR_NAMEVAL(const NVTABLE *table)"
 /*     The content of the table is sent as a sequence of string-valued
 /*     attributes with names equal to the table lookup keys.
 /* .IP ATTR_TYPE_END
index e15ffefe682407d0f985fbffdf71ed76f0b11aa9..41299aef878b07624e51dea24cf1a61ff9429edd 100644 (file)
 /* .IP ATTR_FLAG_NONE
 /*     For convenience, this value requests none of the above.
 /* .RE
-/* .IP type
-/*     The type argument determines the arguments that follow.
+/* .IP List of attributes followed by terminator:
 /* .RS
-/* .IP "ATTR_TYPE_INT (char *, int *)"
+/* .IP "RECV_ATTR_INT(const char *name, int *ptr)"
 /*     This argument is followed by an attribute name and an integer pointer.
-/* .IP "ATTR_TYPE_LONG (char *, long *)"
+/* .IP "RECV_ATTR_LONG(const char *name, long *ptr)"
 /*     This argument is followed by an attribute name and a long pointer.
-/* .IP "ATTR_TYPE_STR (char *, VSTRING *)"
+/* .IP "RECV_ATTR_STR(const char *name, VSTRING *vp)"
 /*     This argument is followed by an attribute name and a VSTRING pointer.
-/* .IP "ATTR_TYPE_DATA (char *, VSTRING *)"
+/* .IP "RECV_ATTR_DATA(const char *name, VSTRING *vp)"
 /*     This argument is followed by an attribute name and a VSTRING pointer.
-/* .IP "ATTR_TYPE_FUNC (ATTR_SCAN_SLAVE_FN, void *)"
+/* .IP "RECV_ATTR_FUNC(ATTR_SCAN_SLAVE_FN, void *data)"
 /*     This argument is followed by a function pointer and a generic data
 /*     pointer. The caller-specified function returns < 0 in case of
 /*     error.
-/* .IP "ATTR_TYPE_HASH (HTABLE *)"
-/* .IP "ATTR_TYPE_NAMEVAL (NVTABLE *)"
+/* .IP "RECV_ATTR_HASH(HTABLE *table)"
+/* .IP "RECV_ATTR_NAMEVAL(NVTABLE *table)"
 /*     All further input attributes are processed as string attributes.
 /*     No specific attribute sequence is enforced.
 /*     All attributes up to the attribute list terminator are read,
 /*     This argument terminates the requested attribute list.
 /* .RE
 /* BUGS
-/*     ATTR_TYPE_HASH (ATTR_TYPE_NAMEVAL) accepts attributes with arbitrary
+/*     RECV_ATTR_HASH (RECV_ATTR_NAMEVAL) accepts attributes with arbitrary
 /*     names from possibly untrusted sources.
 /*     This is unsafe, unless the resulting table is queried only with
 /*     known to be good attribute names.
index 52a3ba3fad3b09578cb5b41e90a57e4af6bc19c6..488c4c5f575c89faff58c208ef29ba9ae35f9fd2 100644 (file)
 /* .IP ATTR_FLAG_NONE
 /*     For convenience, this value requests none of the above.
 /* .RE
-/* .IP type
-/*     The type argument determines the arguments that follow.
+/* .IP List of attributes followed by terminator:
 /* .RS
-/* .IP "ATTR_TYPE_INT (char *, int *)"
+/* .IP "RECV_ATTR_INT(const char *name, int *ptr)"
 /*     This argument is followed by an attribute name and an integer pointer.
-/* .IP "ATTR_TYPE_LONG (char *, long *)"
+/* .IP "RECV_ATTR_LONG(const char *name, long *ptr)"
 /*     This argument is followed by an attribute name and a long pointer.
-/* .IP "ATTR_TYPE_STR (char *, VSTRING *)"
+/* .IP "RECV_ATTR_STR(const char *name, VSTRING *vp)"
 /*     This argument is followed by an attribute name and a VSTRING pointer.
-/* .IP "ATTR_TYPE_DATA (char *, VSTRING *)"
+/* .IP "RECV_ATTR_DATA(const char *name, VSTRING *vp)"
 /*     This argument is followed by an attribute name and a VSTRING pointer.
-/* .IP "ATTR_TYPE_FUNC (ATTR_SCAN_SLAVE_FN, void *)"
+/* .IP "RECV_ATTR_FUNC(ATTR_SCAN_SLAVE_FN, void *data)"
 /*     This argument is followed by a function pointer and a generic data
 /*     pointer. The caller-specified function returns < 0 in case of
 /*     error.
-/* .IP "ATTR_TYPE_HASH (HTABLE *)"
-/* .IP "ATTR_TYPE_NAMEVAL (NVTABLE *)"
+/* .IP "RECV_ATTR_HASH(HTABLE *table)"
+/* .IP "RECV_ATTR_NAMEVAL(NVTABLE *table)"
 /*     All further input attributes are processed as string attributes.
 /*     No specific attribute sequence is enforced.
 /*     All attributes up to the attribute list terminator are read,
 /*     This argument terminates the requested attribute list.
 /* .RE
 /* BUGS
-/*     ATTR_TYPE_HASH (ATTR_TYPE_NAMEVAL) accepts attributes with arbitrary
+/*     RECV_ATTR_HASH (RECV_ATTR_NAMEVAL) accepts attributes with arbitrary
 /*     names from possibly untrusted sources.
 /*     This is unsafe, unless the resulting table is queried only with
 /*     known to be good attribute names.
index 9fd5c7c993d0c82dddc3b680af2aebcffb45caa9..4a99f5cdfa0b9eb869e8b3c70a09208aa83242fc 100644 (file)
 /* .IP ATTR_FLAG_NONE
 /*     For convenience, this value requests none of the above.
 /* .RE
-/* .IP type
-/*     The type argument determines the arguments that follow.
+/* .IP List of attributes followed by terminator:
 /* .RS
-/* .IP "ATTR_TYPE_INT (char *, int *)"
+/* .IP "RECV_ATTR_INT(const char *name, int *ptr)"
 /*     This argument is followed by an attribute name and an integer pointer.
-/* .IP "ATTR_TYPE_LONG (char *, long *)"
+/* .IP "RECV_ATTR_LONG(const char *name, long *ptr)"
 /*     This argument is followed by an attribute name and a long pointer.
-/* .IP "ATTR_TYPE_STR (char *, VSTRING *)"
+/* .IP "RECV_ATTR_STR(const char *name, VSTRING *vp)"
 /*     This argument is followed by an attribute name and a VSTRING pointer.
-/* .IP "ATTR_TYPE_DATA (char *, VSTRING *)"
+/* .IP "RECV_ATTR_DATA(const char *name, VSTRING *vp)"
 /*     This argument is followed by an attribute name and a VSTRING pointer.
-/* .IP "ATTR_TYPE_FUNC (ATTR_SCAN_SLAVE_FN, void *)"
+/* .IP "RECV_ATTR_FUNC(ATTR_SCAN_SLAVE_FN, void *data)"
 /*     This argument is followed by a function pointer and a generic data
 /*     pointer. The caller-specified function returns < 0 in case of
 /*     error.
-/* .IP "ATTR_TYPE_HASH (HTABLE *)"
-/* .IP "ATTR_TYPE_NAMEVAL (NVTABLE *)"
+/* .IP "RECV_ATTR_HASH(HTABLE *table)"
+/* .IP "RECV_ATTR_NAMEVAL(NVTABLE *table)"
 /*     All further input attributes are processed as string attributes.
 /*     No specific attribute sequence is enforced.
 /*     All attributes up to the attribute list terminator are read,
 /*     This argument terminates the requested attribute list.
 /* .RE
 /* BUGS
-/*     ATTR_TYPE_HASH (ATTR_TYPE_NAMEVAL) accepts attributes with arbitrary
+/*     RECV_ATTR_HASH (RECV_ATTR_NAMEVAL) accepts attributes with arbitrary
 /*     names from possibly untrusted sources.
 /*     This is unsafe, unless the resulting table is queried only with
 /*     known to be good attribute names.
index 8b4a82e4428223d2cfb3062fe9d63a1b6ca9383b..8ff34d750a6a0a5172925efe1da879d64b90558f 100644 (file)
@@ -191,9 +191,9 @@ static void auto_clnt_open(AUTO_CLNT *auto_clnt)
            msg_info("%s: connected to %s", myname, auto_clnt->endpoint);
        auto_clnt->vstream = vstream_fdopen(fd, O_RDWR);
        vstream_control(auto_clnt->vstream,
-                       VSTREAM_CTL_PATH, auto_clnt->endpoint,
-                       VSTREAM_CTL_TIMEOUT, auto_clnt->timeout,
-                       VSTREAM_CTL_END);
+                       VSTREAM_SCTL_PATH(auto_clnt->endpoint),
+                       VSTREAM_SCTL_TIMEOUT(auto_clnt->timeout),
+                       VSTREAM_SCTL_END);
     }
 
     if (auto_clnt->vstream != 0) {
index f8f4a7503abeefdf3fc70618e24a97a18937f2d5..3a83895075ca4ae74c1c146711687fc71890328c 100644 (file)
 /* SYNOPSIS
 /*     #include <check_arg.h>
 /*
-/*     extern int CHECK_VAL_DUMMY(int);
-/*     extern int CHECK_PTR_DUMMY(int);
-/*     extern int CHECK_CONST_PTR_DUMMY(int);
+/*     /* Example checking infrastructure for int, int *, const int *. */
+/*     CHECK_VAL_HELPER_DCL(tag, int);
+/*     CHECK_PTR_HELPER_DCL(tag, int);
+/*     CHECK_CPTR_HELPER_DCL(tag, int);
 /*
-/*     int val;
-/*     int *p1;
-/*     const int *p2;
+/*     /* Example variables with type int, int *, const int *. */
+/*     int int_val;
+/*     int *int_ptr;
+/*     const int *int_cptr;
 /*
-/*     func(CHECK_VAL(int, val), CHECK_PTR(int, p1), CHECK_CONST_PTR(int, p2));
+/*     /* Example variadic function with type-flag arguments. */
+/*     func(FLAG_INT_VAL, CHECK_VAL(tag, int, int_val),
+/*          FLAG_INT_PTR, CHECK_PTR(tag, int, int_ptr),
+/*          FLAG_INT_CPTR, CHECK_CPTR(tag, int, int_cptr)
+/*          FLAG_END);
 /* DESCRIPTION
-/*      This module implements wrappers for unprototyped function
-/*      arguments, to enable the same type checking, type narrowing,
-/*      and type widening as for prototyped function arguments. The
+/*     This module implements wrappers for unprototyped function
+/*     arguments, to enable the same type checking, type narrowing,
+/*     and type widening as for prototyped function arguments. The
 /*     wrappers may also be useful in other contexts.
 /*
-/*      Each non-pointer argument type is handled by a corresponding
-/*      CHECK_VAL(type, value) wrapper (type = int, long, etc.), and
-/*      each pointer argument type is handled by a corresponding
-/*      CHECK_CONST_PTR(type, ptr) or CHECK_PTR(type, ptr) wrapper.
+/*     Typically, these wrappers are hidden away in a per-module
+/*     header file that is read by the consumers of that module.
+/*     To protect consumers against name collisions between wrappers
+/*     in different header files, wrappers should be called with
+/*     a distinct per-module tag value.  The tag syntax is that
+/*     of a C identifier.
 /*
-/*      A good compiler will report the following problems:
+/*     Use CHECK_VAL(tag, type, argument) for arguments with a
+/*     basic type: int, long, etc., and types defined with "typedef"
+/*     where indirection is built into the type itself (for example,
+/*     the result of "typedef int *foo" or function pointer
+/*     typedefs).
+/*
+/*     Use CHECK_PTR(tag, type, argument) for non-const pointer
+/*     arguments, CHECK_CPTR(tag, type, argument) for const pointer
+/*     arguments, and CHECK_PPTR(tag, type, argument) for pointer-
+/*     to-pointer arguments.
+/*
+/*     Use CHECK_*_HELPER_DCL(tag, type) to provide the
+/*     checking infrastructure for all CHECK_*(tag, type, ...)
+/*     instances with the same *, tag and type. Depending on
+/*     the compilation environment, the infrastructure consists
+/*     of an inline function definition or a dummy assignment
+/*     target declaration.
+/*
+/*     The compiler should report the following problems:
 /* .IP \(bu
-/*      Const pointer argument where a non-const pointer is expected.
+/*     Const pointer argument where a non-const pointer is expected.
 /* .IP \(bu
-/*      Pointer argument where a non-pointer is expected.
+/*     Pointer argument where a non-pointer is expected and
+/*     vice-versa.
 /* .IP \(bu
-/*      Pointer/pointer type mismatches except void/non-void pointers.
-/*      The latter is why all check_arg_xxx_ptr() macros cast their
-/*      result to the desired type.
+/*     Pointer/pointer type mismatches except void/non-void pointers.
+/*     Just like function prototypes, all CHECK_*PTR() wrappers
+/*     cast their result to the desired type.
 /* .IP \(bu
-/*      Non-constant non-pointer argument where a pointer is expected.
+/*     Non-constant non-pointer argument where a pointer is expected.
 /*. PP
-/*      Just like function prototypes, the CHECK_(CONST_)PTR() wrappers
-/*      handle "bare" numeric constants by casting their argument to
-/*      the desired pointer type.
+/*     Just like function prototypes, the CHECK_*PTR() wrappers
+/*     handle "bare" numerical constants by casting their argument
+/*     to the desired pointer type.
 /*
-/*      Just like function prototypes, the CHECK_VAL() wrapper cannot
-/*      force the caller to specify a particular non-pointer type and
-/*      casts its argument to the desired type.
+/*     Just like function prototypes, the CHECK_VAL() wrapper
+/*     cannot force the caller to specify a particular non-pointer
+/*     type and casts its argument value to the desired type which
+/*     may wider or narrower than the argument value.
 /* IMPLEMENTATION
-/* .ad
-/* .fi
-/*      This implementation uses unreachable assignments to dummy
-/*      variables. Even a basic optimizer will eliminate these
-/*      assignments along with any reference to the dummy assignment
-/*      targets. It should be possible to declare these variables as
-/*      extern only, without any actual definition for storage
-/*      allocation.
-/* .na
-/* .nf
 
  /*
-  * Templates for parameter value checks.
+  * Choose between an implementation based on inline functions (standardized
+  * with C99) or conditional assignment (portable to older compilers, with
+  * some caveats as discussed below).
   */
-#define CHECK_VAL(type, v) ((type) (1 ? (v) : (CHECK_VAL_DUMMY(type) = (v))))
-#define CHECK_PTR(type, p) ((type *) (1 ? (p) : (CHECK_PTR_DUMMY(type) = (p))))
-#define CHECK_CONST_PTR(type, p) \
-       ((const type *) (1 ? (p) : (CHECK_CONST_PTR_DUMMY(type) = (p))))
+#ifndef NO_INLINE
 
  /*
-  * Templates for dummy assignment targets. These will never be referenced,
+  * Parameter checks expand into inline helper function calls.
+  */
+#define CHECK_VAL(tag, type, v) check_val_##tag##type(v)
+#define CHECK_PTR(tag, type, v) check_ptr_##tag##type(v)
+#define CHECK_CPTR(tag, type, v) check_cptr_##tag##type(v)
+#define CHECK_PPTR(tag, type, v) check_pptr_##tag##type(v)
+
+ /*
+  * Macros to instantiate the inline helper functions.
+  */
+#define CHECK_VAL_HELPER_DCL(tag, type) \
+       static inline type check_val_##tag##type(type v) { return v; }
+#define CHECK_PTR_HELPER_DCL(tag, type) \
+       static inline type *check_ptr_##tag##type(type *v) { return v; }
+#define CHECK_CPTR_HELPER_DCL(tag, type) \
+       static inline const type *check_cptr_##tag##type(const type *v) \
+           { return v; }
+#define CHECK_PPTR_HELPER_DCL(tag, type) \
+       static inline type **check_pptr_##tag##type(type **v) { return v; }
+
+#else                                  /* NO_INLINE */
+
+ /*
+  * Parameter checks expand into unreachable conditional assignments.
+  * Inspired by OpenSSL's verified pointer check, our implementation also
+  * detects const/non-const pointer conflicts, and it also supports
+  * non-pointer expressions.
+  */
+#define CHECK_VAL(tag, type, v) ((type) (1 ? (v) : (CHECK_VAL_DUMMY(type) = (v))))
+#define CHECK_PTR(tag, type, v) ((type *) (1 ? (v) : (CHECK_PTR_DUMMY(type) = (v))))
+#define CHECK_CPTR(tag, type, v) \
+       ((const type *) (1 ? (v) : (CHECK_CPTR_DUMMY(type) = (v))))
+#define CHECK_PPTR(tag, type, v) ((type **) (1 ? (v) : (CHECK_PPTR_DUMMY(type) = (v))))
+
+ /*
+  * These macros instantiate assignment target declarations. Since the
+  * assignment is made in unreachable code, the compiler "should" not emit
+  * any references to those assignment targets. We use the "extern" class so
+  * that gcc will not complain about unused variables. Using "extern" breaks
+  * when a compiler does emit references unreachable assignment targets.
+  * Hopefully, those cases will be rare.
+  */
+#define CHECK_VAL_HELPER_DCL(tag, type) extern type CHECK_VAL_DUMMY(type)
+#define CHECK_PTR_HELPER_DCL(tag, type) extern type *CHECK_PTR_DUMMY(type)
+#define CHECK_CPTR_HELPER_DCL(tag, type) extern const type *CHECK_CPTR_DUMMY(type)
+#define CHECK_PPTR_HELPER_DCL(tag, type) extern type **CHECK_PPTR_DUMMY(type)
+
+ /*
+  * The actual dummy assignment target names.
   */
 #define CHECK_VAL_DUMMY(type) check_val_dummy_##type
 #define CHECK_PTR_DUMMY(type) check_ptr_dummy_##type
-#define CHECK_CONST_PTR_DUMMY(type) check_const_ptr_dummy_##type
+#define CHECK_CPTR_DUMMY(type) check_cptr_dummy_##type
+#define CHECK_PPTR_DUMMY(type) check_pptr_dummy_##type
+
+#endif                                 /* NO_INLINE */
 
 /* LICENSE
 /* .ad
index 7a25cb4aa77fca4c947447af10359e90ba43fdfd..6a17aee9b53dcad3bb184b1cda64ac1f3604a601 100644 (file)
@@ -296,7 +296,7 @@ int     main(int unused_argc, char **argv)
     data_buf = vstring_alloc(100);
     cache = ctable_create(1, ask, drop, (void *) data_buf);
     msg_verbose = 1;
-    vstream_control(VSTREAM_IN, VSTREAM_CTL_EXCEPT, VSTREAM_CTL_END);
+    vstream_control(VSTREAM_IN, VSTREAM_SCTL_EXCEPT, VSTREAM_SCTL_END);
 
     if (vstream_setjmp(VSTREAM_IN) == 0) {
        for (;;) {
index c9e85f9ae354a7dc67009e01b5124c74cc832810..3b39ec04d0ab02922edb2f647a7115f58bb9d041 100644 (file)
 /*
 /*     dict_cache_control() provides control over the built-in
 /*     cache cleanup feature and logging. The arguments are a list
-/*     of (name, value) pairs, terminated with DICT_CACHE_CTL_END.
-/*     The following lists the names and the types of the corresponding
-/*     value arguments.
-/* .IP "DICT_CACHE_FLAGS (int flags)"
+/*     of macros with zero or more arguments, terminated with
+/*     DICT_CACHE_SCTL_END which has none.  The following lists
+/*     the macros and corresponding argument types.
+/* .IP "DICT_CACHE_SCTL_FLAGS(int flags)"
 /*     The arguments to this command are the bit-wise OR of zero
 /*     or more of the following:
 /* .RS
-/* .IP DICT_CACHE_FLAG_VERBOSE
+/* .IP DICT_CACHE_SCTL_FLAG_VERBOSE
 /*     Enable verbose logging of cache activity.
-/* .IP DICT_CACHE_FLAG_EXP_SUMMARY
+/* .IP DICT_CACHE_SCTL_FLAG_EXP_SUMMARY
 /*     Log cache statistics after each cache cleanup run.
 /* .RE
-/* .IP "DICT_CACHE_CTL_INTERVAL (int interval)"
+/* .IP "DICT_CACHE_SCTL_INTERVAL(int interval)"
 /*     The interval between cache cleanup runs.  Specify a null
 /*     validator or interval to stop cache cleanup.
-/* .IP "DICT_CACHE_CTL_VALIDATOR (DICT_CACHE_VALIDATOR_FN validator)"
+/* .IP "DICT_CACHE_SCTL_VALIDATOR(DICT_CACHE_VALIDATOR_FN validator)"
 /*     An application call-back routine that returns non-zero when
 /*     a cache entry should be kept. The call-back function should
 /*     not make changes to the cache. Specify a null validator or
 /*     interval to stop cache cleanup.
-/* .IP "DICT_CACHE_CTL_CONTEXT (void *context)"
+/* .IP "DICT_CACHE_SCTL_CONTEXT(void *context)"
 /*     Application context that is passed to the validator function.
 /* .RE
 /* .PP
index e86cfc22d407bd926a69410ba8779f6f12a3aef6..392284decc5bd48daf4681f4c65463b7b01312ff 100644 (file)
@@ -15,6 +15,7 @@
   * Utility library.
   */
 #include <dict.h>
+#include <check_arg.h>
 
  /*
   * External interface.
@@ -34,12 +35,24 @@ extern const char *dict_cache_name(DICT_CACHE *);
 #define DICT_CACHE_FLAG_VERBOSE                (1<<0)  /* verbose operation */
 #define DICT_CACHE_FLAG_STATISTICS     (1<<1)  /* log cache statistics */
 
+/* Legacy API: type-unchecked argument, internal use. */
 #define DICT_CACHE_CTL_END             0       /* list terminator */
 #define DICT_CACHE_CTL_FLAGS           1       /* see above */
 #define DICT_CACHE_CTL_INTERVAL                2       /* cleanup interval */
 #define DICT_CACHE_CTL_VALIDATOR       3       /* call-back validator */
 #define DICT_CACHE_CTL_CONTEXT         4       /* call-back context */
 
+/* Safer API: type-checked arguments, external use. */
+#define DICT_CACHE_SCTL_END            DICT_CACHE_CTL_END
+#define DICT_CACHE_SCTL_FLAGS(v)       DICT_CACHE_CTL_FLAGS, CHECK_VAL(DICT_CACHE, int, (v))
+#define DICT_CACHE_SCTL_INTERVAL(v)    DICT_CACHE_CTL_INTERVAL, CHECK_VAL(DICT_CACHE, int, (v))
+#define DICT_CACHE_SCTL_VALIDATOR(v)   DICT_CACHE_CTL_VALIDATOR, CHECK_VAL(DICT_CACHE, DICT_CACHE_VALIDATOR_FN, (v))
+#define DICT_CACHE_SCTL_CONTEXT(v)     DICT_CACHE_CTL_CONTEXT, CHECK_PTR(DICT_CACHE, void, (v))
+
+CHECK_VAL_HELPER_DCL(DICT_CACHE, int);
+CHECK_VAL_HELPER_DCL(DICT_CACHE, DICT_CACHE_VALIDATOR_FN);
+CHECK_PTR_HELPER_DCL(DICT_CACHE, void);
+
 /* LICENSE
 /* .ad
 /* .fi
index 2df583088998c18b957759c3ec5ad90405cb10b7..bc3b03cff9ecad780ace29d43749907f00da5506 100644 (file)
@@ -680,14 +680,14 @@ DICT   *dict_lmdb_open(const char *path, int open_flags, int dict_flags)
      * memory corruption problem.
      */
     if (slmdb_control(&dict_lmdb->slmdb,
-                     SLMDB_CTL_API_RETRY_LIMIT, DICT_LMDB_API_RETRY_LIMIT,
-                     SLMDB_CTL_BULK_RETRY_LIMIT, DICT_LMDB_BULK_RETRY_LIMIT,
-                     SLMDB_CTL_LONGJMP_FN, dict_lmdb_longjmp,
-                     SLMDB_CTL_NOTIFY_FN, msg_verbose ?
-                     dict_lmdb_notify : (SLMDB_NOTIFY_FN) 0,
-                     SLMDB_CTL_ASSERT_FN, dict_lmdb_assert,
-                     SLMDB_CTL_CB_CONTEXT, (void *) dict_lmdb,
-                     SLMDB_CTL_END) != 0)
+                     SLMDB_SCTL_API_RETRY_LIMIT(DICT_LMDB_API_RETRY_LIMIT),
+                   SLMDB_SCTL_BULK_RETRY_LIMIT(DICT_LMDB_BULK_RETRY_LIMIT),
+                     SLMDB_SCTL_LONGJMP_FN(dict_lmdb_longjmp),
+                     SLMDB_SCTL_NOTIFY_FN(msg_verbose ?
+                                   dict_lmdb_notify : (SLMDB_NOTIFY_FN) 0),
+                     SLMDB_SCTL_ASSERT_FN(dict_lmdb_assert),
+                     SLMDB_SCTL_CB_CONTEXT((void *) dict_lmdb),
+                     SLMDB_SCTL_END) != 0)
        msg_panic("dict_lmdb_open: slmdb_control: %m");
 
     if (msg_verbose)
index a20956538f9bc1f936f8fe6792119ced740971a8..7b4aa8df11cd07202b53b7b375b8b4eb81dcfe8e 100644 (file)
@@ -128,8 +128,8 @@ static int dict_tcp_connect(DICT_TCP *dict_tcp)
     }
     dict_tcp->fp = vstream_fdopen(fd, O_RDWR);
     vstream_control(dict_tcp->fp,
-                   VSTREAM_CTL_TIMEOUT, DICT_TCP_TMOUT,
-                   VSTREAM_CTL_END);
+                   VSTREAM_SCTL_TIMEOUT(DICT_TCP_TMOUT),
+                   VSTREAM_SCTL_END);
 
     /*
      * Allocate per-map I/O buffers on the fly.
index 2fedcb60fe3902264e64aa7c018d975daf80b921..0fb0133bf97da14236ffa53d7ffd24e2e2bc0123 100644 (file)
@@ -81,11 +81,11 @@ void    dict_test(int argc, char **argv)
     dict_allow_surrogate = 1;
     dict = dict_open(dict_name, open_flags, dict_flags);
     dict_register(dict_name, dict);
-    vstream_printf("owner=%s (uid=%ld)\n", 
-       dict->owner.status == DICT_OWNER_TRUSTED ? "trusted" :
-       dict->owner.status == DICT_OWNER_UNTRUSTED? "untrusted" :
-       dict->owner.status == DICT_OWNER_UNKNOWN? "unspecified" :
-       "error", (long) dict->owner.uid);
+    vstream_printf("owner=%s (uid=%ld)\n",
+                  dict->owner.status == DICT_OWNER_TRUSTED ? "trusted" :
+                  dict->owner.status == DICT_OWNER_UNTRUSTED ? "untrusted" :
+                  dict->owner.status == DICT_OWNER_UNKNOWN ? "unspecified" :
+                  "error", (long) dict->owner.uid);
     vstream_fflush(VSTREAM_OUT);
 
     while (vstring_fgets_nonl(inbuf, VSTREAM_IN)) {
index 02b2b48d86c4fd7ecdaed88d96d024913244dd9e..0e888d65f3fec21ed74bc478aaa1db119277299a 100644 (file)
 void    netstring_setup(VSTREAM *stream, int timeout)
 {
     vstream_control(stream,
-                   VSTREAM_CTL_TIMEOUT, timeout,
-                   VSTREAM_CTL_EXCEPT,
-                   VSTREAM_CTL_END);
+                   VSTREAM_SCTL_TIMEOUT(timeout),
+                   VSTREAM_SCTL_EXCEPT,
+                   VSTREAM_SCTL_END);
 }
 
 /* netstring_except - process netstring stream exception */
@@ -466,9 +466,9 @@ int     main(int argc, char **argv)
      * Run the specified command as a child process with stdin and stdout
      * connected to us.
      */
-    child_stream = vstream_popen(O_RDWR, VSTREAM_POPEN_ARGV, argv + 1,
-                                VSTREAM_POPEN_END);
-    vstream_control(child_stream, VSTREAM_CTL_DOUBLE, VSTREAM_CTL_END);
+    child_stream = vstream_popen(O_RDWR, VSTREAM_SPOPEN_ARGV(argv + 1),
+                                VSTREAM_SPOPEN_END);
+    vstream_control(child_stream, VSTREAM_SCTL_DOUBLE, VSTREAM_SCTL_END);
     netstring_setup(child_stream, 10);
 
     /*
index 3e7a9d0c0bcaec56013c51af06daec0260366e28..2eaaa5e5d02609ec78331ad4f0a187f766aed686 100644 (file)
@@ -66,10 +66,10 @@ int     recv_pass_attr(int fd, HTABLE **attr, int timeout, ssize_t bufsize)
      */
     fp = vstream_fdopen(fd, O_RDWR);
     vstream_control(fp,
-                   VSTREAM_CTL_BUFSIZE, bufsize,
-                   VSTREAM_CTL_TIMEOUT, timeout,
-                   VSTREAM_CTL_START_DEADLINE,
-                   VSTREAM_CTL_END);
+                   VSTREAM_SCTL_BUFSIZE(bufsize),
+                   VSTREAM_SCTL_TIMEOUT(timeout),
+                   VSTREAM_SCTL_START_DEADLINE,
+                   VSTREAM_SCTL_END);
     (void) attr_scan(fp, ATTR_FLAG_NONE,
                     ATTR_TYPE_HASH, *attr = htable_create(1),
                     ATTR_TYPE_END);
index 81ecf3e9d8721ec1809231d3aff65159f3f794a4..539f15a01ae570b791b14a39f45f3bea266b0f43 100644 (file)
 /*     LMDB cursor operation.
 /* .IP request
 /*     The start of a list of (name, value) pairs, terminated with
-/*     SLMDB_CTL_END.  The following text enumerates the symbolic
-/*     request names and the corresponding value types.
+/*     SLMDB_SCTL_END.  The following text enumerates the symbolic
+/*     request names and the corresponding argument types.
 /* .RS
-/* .IP "SLMDB_CTL_LONGJMP_FN (void (*)(void *, int))
+/* .IP "SLMDB_SCTL_LONGJMP_FN(void (*)(void *, int))
 /*     Call-back function pointer. The function is called to repeat
 /*     a failed bulk-mode transaction from the start. The arguments
 /*     are the application context and the setjmp() or sigsetjmp()
 /*     result value.
-/* .IP "SLMDB_CTL_NOTIFY_FN (void (*)(void *, int, ...))"
+/* .IP "SLMDB_SCTL_NOTIFY_FN(void (*)(void *, int, ...))"
 /*     Call-back function pointer. The function is called to report
 /*     succesful error recovery. The arguments are the application
 /*     context, the MDB error code, and additional arguments that
 /*     depend on the error code.  Details are given in the section
 /*     "ERROR RECOVERY".
-/* .IP "SLMDB_CTL_ASSERT_FN (void (*)(void *, const char *))"
+/* .IP "SLMDB_SCTL_ASSERT_FN(void (*)(void *, const char *))"
 /*     Call-back function pointer.  The function is called to
 /*     report an LMDB internal assertion failure. The arguments
 /*     are the application context, and text that describes the
 /*     problem.
-/* .IP "SLMDB_CTL_CB_CONTEXT (void *)"
+/* .IP "SLMDB_SCTL_CB_CONTEXT(void *)"
 /*     Application context that is passed in call-back function
 /*     calls.
-/* .IP "SLMDB_CTL_API_RETRY_LIMIT (int)"
+/* .IP "SLMDB_SCTL_API_RETRY_LIMIT(int)"
 /*     How many times to recover from LMDB errors within the
 /*     execution of a single slmdb(3) API call before giving up.
-/* .IP "SLMDB_CTL_BULK_RETRY_LIMIT (int)"
+/* .IP "SLMDB_SCTL_BULK_RETRY_LIMIT(int)"
 /*     How many times to recover from a bulk-mode transaction
 /*     before giving up.
 /* .RE
index 4b41cae185f67c3cf6447added40eb7ac91e5660..fd2a8dc0bc3bfcd00eb75bd77aa55468d3f1ba8b 100644 (file)
 #include <lmdb.h>
 #endif
 
+ /*
+  * Utility library.
+  */
+#include <check_arg.h>
+
  /*
   * External interface.
   */
@@ -72,19 +77,34 @@ extern int slmdb_close(SLMDB *);
 #define slmdb_fd(slmdb)                        ((slmdb)->db_fd)
 #define slmdb_curr_limit(slmdb)                ((slmdb)->curr_limit)
 
-#define SLMDB_CTL_END          0
-#define SLMDB_CTL_LONGJMP_FN   1       /* exception handling */
-#define SLMDB_CTL_NOTIFY_FN    2       /* debug logging function */
-#define SLMDB_CTL_CB_CONTEXT   3       /* call-back context */
-#define SLMDB_CTL_HARD_LIMIT   4       /* hard database size limit */
+/* Legacy API: type-unchecked arguments, internal use. */
+#define SLMDB_CTL_END                  0
+#define SLMDB_CTL_LONGJMP_FN           1       /* exception handling */
+#define SLMDB_CTL_NOTIFY_FN            2       /* debug logging function */
+#define SLMDB_CTL_CB_CONTEXT           3       /* call-back context */
 #define SLMDB_CTL_API_RETRY_LIMIT      5       /* per slmdb(3) API call */
 #define SLMDB_CTL_BULK_RETRY_LIMIT     6       /* per bulk update */
-#define SLMDB_CTL_ASSERT_FN    7       /* report assertion failure */
+#define SLMDB_CTL_ASSERT_FN            7       /* report assertion failure */
+
+/* Safer API: type-checked arguments, external use. */
+#define SLMDB_SCTL_END                 SLMDB_CTL_END
+#define SLMDB_SCTL_LONGJMP_FN(v)       SLMDB_CTL_LONGJMP_FN, CHECK_VAL(SLMDB, SLMDB_LONGJMP_FN, (v))
+#define SLMDB_SCTL_NOTIFY_FN(v)                SLMDB_CTL_NOTIFY_FN, CHECK_VAL(SLMDB, SLMDB_NOTIFY_FN, (v))
+#define SLMDB_SCTL_CB_CONTEXT(v)       SLMDB_CTL_CB_CONTEXT, CHECK_PTR(SLMDB, void, (v))
+#define SLMDB_SCTL_API_RETRY_LIMIT(v)  SLMDB_CTL_API_RETRY_LIMIT, CHECK_VAL(SLMDB, int, (v))
+#define SLMDB_SCTL_BULK_RETRY_LIMIT(v) SLMDB_CTL_BULK_RETRY_LIMIT, CHECK_VAL(SLMDB, int, (v))
+#define SLMDB_SCTL_ASSERT_FN(v)                SLMDB_CTL_ASSERT_FN, CHECK_VAL(SLMDB, SLMDB_ASSERT_FN, (v))
 
 typedef void (*SLMDB_NOTIFY_FN) (void *, int,...);
 typedef void (*SLMDB_LONGJMP_FN) (void *, int);
 typedef void (*SLMDB_ASSERT_FN) (void *, const char *);
 
+CHECK_VAL_HELPER_DCL(SLMDB, int);
+CHECK_VAL_HELPER_DCL(SLMDB, SLMDB_NOTIFY_FN);
+CHECK_VAL_HELPER_DCL(SLMDB, SLMDB_LONGJMP_FN);
+CHECK_VAL_HELPER_DCL(SLMDB, SLMDB_ASSERT_FN);
+CHECK_PTR_HELPER_DCL(SLMDB, void);
+
 /* LICENSE
 /* .ad
 /* .fi
index 2cfb3b27297a260eafb19fc88ffa1ac3432db753..650839fe4b50ca85cffb53fe7835e3abeca09da9 100644 (file)
 /*
 /*     Arguments:
 /* .IP key
-/*     Specifies what value will follow. spawn_command() takes a list
-/*     of (key, value) arguments, terminated by SPAWN_CMD_END. The
-/*     following is a listing of key codes together with the expected
-/*     value type.
+/*     spawn_command() takes a list of macros with arguments,
+/*     terminated by SPAWN_SCMD_END which has no arguments. The
+/*     following is a listing of macros and expected argument
+/*     types.
 /* .RS
-/* .IP "SPAWN_CMD_COMMAND (char *)"
+/* .IP "SPAWN_SCMD_COMMAND(const char *)"
 /*     Specifies the command to execute as a string. The string is
 /*     passed to the shell when it contains shell meta characters
 /*     or when it appears to be a shell built-in command, otherwise
 /*     the command is executed without invoking a shell.
-/*     One of SPAWN_CMD_COMMAND or SPAWN_CMD_ARGV must be specified.
+/*     One of SPAWN_SCMD_COMMAND or SPAWN_SCMD_ARGV must be specified.
 /*     See also the SPAWN_CMD_SHELL attribute below.
-/* .IP "SPAWN_CMD_ARGV (char **)"
+/* .IP "SPAWN_SCMD_ARGV(char **)"
 /*     The command is specified as an argument vector. This vector is
 /*     passed without further inspection to the \fIexecvp\fR() routine.
-/*     One of SPAWN_CMD_COMMAND or SPAWN_CMD_ARGV must be specified.
-/* .IP "SPAWN_CMD_ENV (char **)"
+/*     One of SPAWN_SCMD_COMMAND or SPAWN_SCMD_ARGV must be specified.
+/* .IP "SPAWN_SCMD_ENV(char **)"
 /*     Additional environment information, in the form of a null-terminated
 /*     list of name, value, name, value, ... elements. By default only the
 /*     command search path is initialized to _PATH_DEFPATH.
-/* .IP "SPAWN_CMD_EXPORT (char **)"
+/* .IP "SPAWN_SCMD_EXPORT(char **)"
 /*     Null-terminated array of names of environment parameters that can
 /*     be exported. By default, everything is exported.
-/* .IP "SPAWN_CMD_STDIN (int)"
-/* .IP "SPAWN_CMD_STDOUT (int)"
-/* .IP "SPAWN_CMD_STDERR (int)"
+/* .IP "SPAWN_SCMD_STDIN(int)"
+/* .IP "SPAWN_SCMD_STDOUT(int)"
+/* .IP "SPAWN_SCMD_STDERR(int)"
 /*     Each of these specifies I/O redirection of one of the standard file
 /*     descriptors for the command.
-/* .IP "SPAWN_CMD_UID (uid_t)"
+/* .IP "SPAWN_SCMD_UID(uid_t)"
 /*     The user ID to execute the command as. The value -1 is reserved
 /*     and cannot be specified.
-/* .IP "SPAWN_CMD_GID (gid_t)"
+/* .IP "SPAWN_SCMD_GID(gid_t)"
 /*     The group ID to execute the command as. The value -1 is reserved
 /*     and cannot be specified.
-/* .IP "SPAWN_CMD_TIME_LIMIT (int)"
+/* .IP "SPAWN_SCMD_TIME_LIMIT(int)"
 /*     The amount of time in seconds the command is allowed to run before
 /*     it is terminated with SIGKILL. The default is no time limit.
-/* .IP "SPAWN_CMD_SHELL (char *)"
+/* .IP "SPAWN_SCMD_SHELL(const char *)"
 /*     The shell to use when executing the command specified with
-/*     SPAWN_CMD_COMMAND. This shell is invoked regardless of the
+/*     SPAWN_SCMD_COMMAND. This shell is invoked regardless of the
 /*     command content.
 /* .RE
 /* DIAGNOSTICS
index 9282528a6d16b043ce403777d5bbf9bef0db8cc8..e9be82557d851f6b4654aa6ffa6fefbf33897869 100644 (file)
 /* .nf
 
  /*
-  * Request arguments.
+  * Utility library.
   */
+#include <check_arg.h>
+
+/* Legacy API: type-unchecked arguments, internal use. */
 #define SPAWN_CMD_END          0       /* terminator */
 #define SPAWN_CMD_ARGV         1       /* command is array */
 #define SPAWN_CMD_COMMAND      2       /* command is string */
 #define SPAWN_CMD_SHELL                10      /* alternative shell */
 #define SPAWN_CMD_EXPORT       11      /* exportable parameters */
 
+/* Safer API: type-checked arguments, external use. */
+#define SPAWN_SCMD_END         SPAWN_CMD_END
+#define SPAWN_SCMD_ARGV(v)     SPAWN_CMD_ARGV, CHECK_PPTR(SPAWN_SCMD, char, (v))
+#define SPAWN_SCMD_COMMAND(v)  SPAWN_CMD_COMMAND, CHECK_CPTR(SPAWN_SCMD, char, (v))
+#define SPAWN_SCMD_STDIN(v)    SPAWN_CMD_STDIN, CHECK_VAL(SPAWN_SCMD, int, (v))
+#define SPAWN_SCMD_STDOUT(v)   SPAWN_CMD_STDOUT, CHECK_VAL(SPAWN_SCMD, int, (v))
+#define SPAWN_SCMD_STDERR(v)   SPAWN_CMD_STDERR, CHECK_VAL(SPAWN_SCMD, int, (v))
+#define SPAWN_SCMD_UID(v)      SPAWN_CMD_UID, CHECK_VAL(SPAWN_SCMD, uid_t, (v))
+#define SPAWN_SCMD_GID(v)      SPAWN_CMD_GID, CHECK_VAL(SPAWN_SCMD, gid_t, (v))
+#define SPAWN_SCMD_TIME_LIMIT(v) SPAWN_CMD_TIME_LIMIT, CHECK_VAL(SPAWN_SCMD, int, (v))
+#define SPAWN_SCMD_ENV(v)      SPAWN_CMD_ENV, CHECK_PPTR(SPAWN_SCMD, char, (v))
+#define SPAWN_SCMD_SHELL(v)    SPAWN_CMD_SHELL, CHECK_CPTR(SPAWN_SCMD, char, (v))
+#define SPAWN_SCMD_EXPORT(v)   SPAWN_CMD_EXPORT, CHECK_PPTR(SPAWN_SCMD, char, (v))
+
+CHECK_VAL_HELPER_DCL(SPAWN_SCMD, uid_t);
+CHECK_VAL_HELPER_DCL(SPAWN_SCMD, int);
+CHECK_VAL_HELPER_DCL(SPAWN_SCMD, gid_t);
+CHECK_PPTR_HELPER_DCL(SPAWN_SCMD, char);
+CHECK_CPTR_HELPER_DCL(SPAWN_SCMD, char);
+
 extern WAIT_STATUS_T spawn_command(int,...);
 
 /* LICENSE
index 7a40d6e4bd19e45ef62f7ed203b96576cf908222..5b11ad1b1b6eb211e128f736b4f9974829dade74 100644 (file)
@@ -29,9 +29,9 @@
 /*     valid_hostname() scrutinizes a hostname: the name should
 /*     be no longer than VALID_HOSTNAME_LEN characters, should
 /*     contain only letters, digits, dots and hyphens, no adjacent
-/*     dots and hyphens, no leading or trailing dots or hyphens,
-/*     no labels longer than VALID_LABEL_LEN characters, and it
-/*     should not be all numeric.
+/*     dots, no leading or trailing dots or hyphens, no labels
+/*     longer than VALID_LABEL_LEN characters, and it should not
+/*     be all numeric.
 /*
 /*     valid_hostaddr() requires that the input is a valid string
 /*     representation of an IPv4 or IPv6 network address as
index f05e0e72b2da6bbc78dc1f785da588deb6992955..bf71e9a844faebb6390541f6192a5278ca008fdd 100644 (file)
 /*     or error conditions.
 /*
 /*     vstream_control() allows the user to fine tune the behavior of
-/*     the specified stream.  The arguments are a list of (name,
-/*     value) pairs, terminated with VSTREAM_CTL_END.
-/*     The following lists the names and the types of the corresponding
-/*     value arguments.
-/* .IP "VSTREAM_CTL_READ_FN (ssize_t (*)(int, void *, size_t, int, void *))"
+/*     the specified stream.  The arguments are a list of macros with
+/*     zero or more arguments, terminated with VSTREAM_SCTL_END
+/*     which has none.  The following lists the names and the types
+/*     of the corresponding value arguments.
+/* .IP "VSTREAM_SCTL_READ_FN(ssize_t (*)(int, void *, size_t, int, void *))"
 /*     The argument specifies an alternative for the timed_read(3) function,
 /*     for example, a read function that performs decryption.
 /*     This function receives as arguments a file descriptor, buffer pointer,
 /*     A timeout value <= 0 disables the time limit.
 /*     This function should return the positive number of bytes transferred,
 /*     0 upon EOF, and -1 upon error with errno set appropriately.
-/* .IP "VSTREAM_CTL_WRITE_FN (ssize_t (*)(int, void *, size_t, int, void *))"
+/* .IP "VSTREAM_SCTL_WRITE_FN(ssize_t (*)(int, void *, size_t, int, void *))"
 /*     The argument specifies an alternative for the timed_write(3) function,
 /*     for example, a write function that performs encryption.
 /*     This function receives as arguments a file descriptor, buffer pointer,
 /*     This function should return the positive number of bytes transferred,
 /*     and -1 upon error with errno set appropriately. Instead of -1 it may
 /*     also return 0, e.g., upon remote party-initiated protocol shutdown.
-/* .IP "VSTREAM_CTL_CONTEXT (void *)"
+/* .IP "VSTREAM_SCTL_CONTEXT(void *)"
 /*     The argument specifies application context that is passed on to
 /*     the application-specified read/write routines. No copy is made.
-/* .IP "VSTREAM_CTL_PATH (char *)"
+/* .IP "VSTREAM_SCTL_PATH(const char *)"
 /*     Updates the stored pathname of the specified stream. The pathname
 /*     is copied.
-/* .IP "VSTREAM_CTL_DOUBLE (no value)"
+/* .IP "VSTREAM_SCTL_DOUBLE (no arguments)"
 /*     Use separate buffers for reading and for writing.  This prevents
 /*     unread input from being discarded upon change of I/O direction.
-/* .IP "VSTREAM_CTL_READ_FD (int)
+/* .IP "VSTREAM_SCTL_READ_FD(int)
 /*     The argument specifies the file descriptor to be used for reading.
 /*     This feature is limited to double-buffered streams, and makes the
 /*     stream non-seekable.
-/* .IP "VSTREAM_CTL_WRITE_FD (int)
+/* .IP "VSTREAM_SCTL_WRITE_FD(int)
 /*     The argument specifies the file descriptor to be used for writing.
 /*     This feature is limited to double-buffered streams, and makes the
 /*     stream non-seekable.
-/* .IP "VSTREAM_CTL_SWAP_FD (VSTREAM *)"
+/* .IP "VSTREAM_SCTL_SWAP_FD(VSTREAM *)"
 /*     The argument specifies a VSTREAM pointer; the request swaps the
 /*     file descriptor members of the two streams. This feature is limited
 /*     to streams that are both double-buffered or both single-buffered.
-/* .IP "VSTREAM_CTL_DUPFD (int)"
+/* .IP "VSTREAM_SCTL_DUPFD(int)"
 /*     The argument specifies a minimum file descriptor value. If
 /*     the actual stream's file descriptors are below the minimum,
 /*     reallocate the descriptors to the first free value greater
 /*     than or equal to the minimum. The VSTREAM_CTL_DUPFD macro
 /*     is defined only on systems with fcntl() F_DUPFD support.
-/* .IP "VSTREAM_CTL_WAITPID_FN (int (*)(pid_t, WAIT_STATUS_T *, int))"
+/* .IP "VSTREAM_SCTL_WAITPID_FN(int (*)(pid_t, WAIT_STATUS_T *, int))"
 /*     A pointer to function that behaves like waitpid(). This information
 /*     is used by the vstream_pclose() routine.
-/* .IP "VSTREAM_CTL_TIMEOUT (int)
+/* .IP "VSTREAM_SCTL_TIMEOUT(int)
 /*     The deadline for a descriptor to become readable in case of a read
 /*     request, or writable in case of a write request. Specify a value
 /*     of 0 to disable deadlines.
-/* .IP "VSTREAM_CTL_EXCEPT (no value)"
+/* .IP "VSTREAM_SCTL_EXCEPT (no arguments)"
 /*     Enable exception handling with vstream_setjmp() and vstream_longjmp().
 /*     This involves allocation of additional memory that normally isn't
 /*     used.
-/* .IP "VSTREAM_CTL_BUFSIZE (ssize_t)"
+/* .IP "VSTREAM_SCTL_BUFSIZE(ssize_t)"
 /*     Specify a non-default buffer size for the next read(2) or
 /*     write(2) operation, or zero to implement a no-op. Requests
 /*     to reduce the buffer size are silently ignored (i.e. any
 /*     NOTE: the vstream_*printf() routines may silently expand a
 /*     buffer, so that the result of some %letter specifiers can
 /*     be written to contiguous memory.
-/*
-/*     NOTE: the VSTREAM_CTL_BUFSIZE argument type is ssize_t, not
-/*     int. Use an explicit cast to avoid problems on LP64
-/*     environments and other environments where ssize_t is larger
-/*     than int.
-/* .IP VSTREAM_CTL_START_DEADLINE
+/* .IP VSTREAM_SCTL_START_DEADLINE (no arguments)
 /*     Change the VSTREAM_CTL_TIMEOUT behavior, to limit the total
 /*     time for all subsequent file descriptor read or write
 /*     operations, and recharge the deadline timer.
-/* .IP VSTREAM_CTL_STOP_DEADLINE
+/* .IP VSTREAM_SCTL_STOP_DEADLINE (no arguments)
 /*     Revert VSTREAM_CTL_TIMEOUT behavior to the default, i.e.
 /*     a time limit for individual file descriptor read or write
 /*     operations.
@@ -497,19 +492,19 @@ VSTREAM vstream_fstd[] = {
            0,                          /* flags */
            0, 0, 0, 0,                 /* buffer */
            vstream_buf_get_ready, vstream_buf_put_ready, vstream_buf_space,
-    }, STDIN_FILENO, (VSTREAM_FN) timed_read, (VSTREAM_FN) timed_write,
+    }, STDIN_FILENO, (VSTREAM_RW_FN) timed_read, (VSTREAM_RW_FN) timed_write,
     0,},
     {{
            0,                          /* flags */
            0, 0, 0, 0,                 /* buffer */
            vstream_buf_get_ready, vstream_buf_put_ready, vstream_buf_space,
-    }, STDOUT_FILENO, (VSTREAM_FN) timed_read, (VSTREAM_FN) timed_write,
+    }, STDOUT_FILENO, (VSTREAM_RW_FN) timed_read, (VSTREAM_RW_FN) timed_write,
     0,},
     {{
            VBUF_FLAG_FIXED | VSTREAM_FLAG_WRITE,
            vstream_fstd_buf, VSTREAM_BUFSIZE, VSTREAM_BUFSIZE, vstream_fstd_buf,
            vstream_buf_get_ready, vstream_buf_put_ready, vstream_buf_space,
-    }, STDERR_FILENO, (VSTREAM_FN) timed_read, (VSTREAM_FN) timed_write,
+    }, STDERR_FILENO, (VSTREAM_RW_FN) timed_read, (VSTREAM_RW_FN) timed_write,
     VSTREAM_BUFSIZE,},
 };
 
@@ -1217,8 +1212,8 @@ VSTREAM *vstream_fdopen(int fd, int flags)
      */
     stream = (VSTREAM *) mymalloc(sizeof(*stream));
     stream->fd = fd;
-    stream->read_fn = VSTREAM_CAN_READ(flags) ? (VSTREAM_FN) timed_read : 0;
-    stream->write_fn = VSTREAM_CAN_WRITE(flags) ? (VSTREAM_FN) timed_write : 0;
+    stream->read_fn = VSTREAM_CAN_READ(flags) ? (VSTREAM_RW_FN) timed_read : 0;
+    stream->write_fn = VSTREAM_CAN_WRITE(flags) ? (VSTREAM_RW_FN) timed_write : 0;
     vstream_buf_init(&stream->buf, flags);
     stream->offset = 0;
     stream->path = 0;
@@ -1380,10 +1375,10 @@ void    vstream_control(VSTREAM *stream, int name,...)
     for (va_start(ap, name); name != VSTREAM_CTL_END; name = va_arg(ap, int)) {
        switch (name) {
        case VSTREAM_CTL_READ_FN:
-           stream->read_fn = va_arg(ap, VSTREAM_FN);
+           stream->read_fn = va_arg(ap, VSTREAM_RW_FN);
            break;
        case VSTREAM_CTL_WRITE_FN:
-           stream->write_fn = va_arg(ap, VSTREAM_FN);
+           stream->write_fn = va_arg(ap, VSTREAM_RW_FN);
            break;
        case VSTREAM_CTL_CONTEXT:
            stream->context = va_arg(ap, void *);
@@ -1604,8 +1599,8 @@ static void copy_line(ssize_t bufsize)
 {
     int     c;
 
-    vstream_control(VSTREAM_IN, VSTREAM_CTL_BUFSIZE, bufsize, VSTREAM_CTL_END);
-    vstream_control(VSTREAM_OUT, VSTREAM_CTL_BUFSIZE, bufsize, VSTREAM_CTL_END);
+    vstream_control(VSTREAM_IN, VSTREAM_CTL_BUFSIZE(bufsize), VSTREAM_CTL_END);
+    vstream_control(VSTREAM_OUT, VSTREAM_CTL_BUFSIZE(bufsize), VSTREAM_CTL_END);
     while ((c = VSTREAM_GETC(VSTREAM_IN)) != VSTREAM_EOF) {
        VSTREAM_PUTC(c, VSTREAM_OUT);
        if (c == '\n')
index ee8d843478980b5373b93e2746dc3d7defe429f1..21d294ac05b8d28e0df32d0108ac0192d71058c9 100644 (file)
   * Utility library.
   */
 #include <vbuf.h>
+#include <check_arg.h>
 
  /*
   * Simple buffered stream. The members of this structure are not part of the
   * official interface and can change without prior notice.
   */
-typedef ssize_t (*VSTREAM_FN) (int, void *, size_t, int, void *);
-typedef int (*VSTREAM_WAITPID_FN) (pid_t, WAIT_STATUS_T *, int);
+typedef ssize_t (*VSTREAM_RW_FN) (int, void *, size_t, int, void *);
+typedef pid_t (*VSTREAM_WAITPID_FN) (pid_t, WAIT_STATUS_T *, int);
 
 #ifdef NO_SIGSETJMP
 #define VSTREAM_JMP_BUF        jmp_buf
@@ -42,8 +43,8 @@ typedef int (*VSTREAM_WAITPID_FN) (pid_t, WAIT_STATUS_T *, int);
 typedef struct VSTREAM {
     VBUF    buf;                       /* generic intelligent buffer */
     int     fd;                                /* file handle, no 256 limit */
-    VSTREAM_FN read_fn;                        /* buffer fill action */
-    VSTREAM_FN write_fn;               /* buffer fill action */
+    VSTREAM_RW_FN read_fn;             /* buffer fill action */
+    VSTREAM_RW_FN write_fn;            /* buffer fill action */
     ssize_t req_bufsize;               /* requested read/write buffer size */
     void   *context;                   /* application context */
     off_t   offset;                    /* cached seek info */
@@ -130,6 +131,7 @@ extern int vstream_fdclose(VSTREAM *);
 
 extern void vstream_control(VSTREAM *, int,...);
 
+/* Legacy API: type-unchecked arguments, internal use. */
 #define VSTREAM_CTL_END                0
 #define VSTREAM_CTL_READ_FN    1
 #define VSTREAM_CTL_WRITE_FN   2
@@ -146,8 +148,36 @@ extern void vstream_control(VSTREAM *, int,...);
 #endif
 #define VSTREAM_CTL_BUFSIZE    12
 #define VSTREAM_CTL_SWAP_FD    13
-#define VSTREAM_CTL_START_DEADLINE     14
-#define VSTREAM_CTL_STOP_DEADLINE      15
+#define VSTREAM_CTL_START_DEADLINE 14
+#define VSTREAM_CTL_STOP_DEADLINE 15
+
+/* Safer API: type-checked arguments, external use. */
+#define VSTREAM_SCTL_END       VSTREAM_CTL_END
+#define VSTREAM_SCTL_READ_FN(v)        VSTREAM_CTL_READ_FN, CHECK_VAL(VSTREAM_SCTL, VSTREAM_RW_FN, (v))
+#define VSTREAM_SCTL_WRITE_FN(v) VSTREAM_CTL_WRITE_FN, CHECK_VAL(VSTREAM_SCTL, VSTREAM_RW_FN, (v))
+#define VSTREAM_SCTL_PATH(v)   VSTREAM_CTL_PATH, CHECK_CPTR(VSTREAM_SCTL, char, (v))
+#define VSTREAM_SCTL_DOUBLE    VSTREAM_CTL_DOUBLE
+#define VSTREAM_SCTL_READ_FD(v)        VSTREAM_CTL_READ_FD, CHECK_VAL(VSTREAM_SCTL, int, (v))
+#define VSTREAM_SCTL_WRITE_FD(v) VSTREAM_CTL_WRITE_FD, CHECK_VAL(VSTREAM_SCTL, int, (v))
+#define VSTREAM_SCTL_WAITPID_FN(v) VSTREAM_CTL_WAITPID_FN, CHECK_VAL(VSTREAM_SCTL, VSTREAM_WAITPID_FN, (v))
+#define VSTREAM_SCTL_TIMEOUT(v)        VSTREAM_CTL_TIMEOUT, CHECK_VAL(VSTREAM_SCTL, int, (v))
+#define VSTREAM_SCTL_EXCEPT    VSTREAM_CTL_EXCEPT
+#define VSTREAM_SCTL_CONTEXT(v)        VSTREAM_CTL_CONTEXT, CHECK_PTR(VSTREAM_SCTL, void, (v))
+#ifdef F_DUPFD
+#define VSTREAM_SCTL_DUPFD(v)  VSTREAM_CTL_DUPFD, CHECK_VAL(VSTREAM_SCTL, int, (v))
+#endif
+#define VSTREAM_SCTL_BUFSIZE(v)        VSTREAM_CTL_BUFSIZE, CHECK_VAL(VSTREAM_SCTL, ssize_t, (v))
+#define VSTREAM_SCTL_SWAP_FD(v)        VSTREAM_CTL_SWAP_FD, CHECK_PTR(VSTREAM_SCTL, VSTREAM, (v))
+#define VSTREAM_SCTL_START_DEADLINE VSTREAM_CTL_START_DEADLINE
+#define VSTREAM_SCTL_STOP_DEADLINE VSTREAM_CTL_STOP_DEADLINE
+
+CHECK_VAL_HELPER_DCL(VSTREAM_SCTL, ssize_t);
+CHECK_VAL_HELPER_DCL(VSTREAM_SCTL, int);
+CHECK_VAL_HELPER_DCL(VSTREAM_SCTL, VSTREAM_WAITPID_FN);
+CHECK_VAL_HELPER_DCL(VSTREAM_SCTL, VSTREAM_RW_FN);
+CHECK_PTR_HELPER_DCL(VSTREAM_SCTL, void);
+CHECK_PTR_HELPER_DCL(VSTREAM_SCTL, VSTREAM);
+CHECK_CPTR_HELPER_DCL(VSTREAM_SCTL, char);
 
 extern VSTREAM *PRINTFLIKE(1, 2) vstream_printf(const char *,...);
 extern VSTREAM *PRINTFLIKE(2, 3) vstream_fprintf(VSTREAM *, const char *,...);
@@ -157,6 +187,7 @@ extern int vstream_pclose(VSTREAM *);
 
 #define vstream_ispipe(vp)     ((vp)->pid != 0)
 
+/* Legacy API: type-unchecked arguments, internal use. */
 #define VSTREAM_POPEN_END      0       /* terminator */
 #define VSTREAM_POPEN_COMMAND  1       /* command is string */
 #define VSTREAM_POPEN_ARGV     2       /* command is array */
@@ -167,6 +198,23 @@ extern int vstream_pclose(VSTREAM *);
 #define VSTREAM_POPEN_WAITPID_FN 7     /* child catcher, waitpid() compat. */
 #define VSTREAM_POPEN_EXPORT   8       /* exportable environment */
 
+/* Safer API: type-checked arguments, external use. */
+#define VSTREAM_SPOPEN_END             VSTREAM_POPEN_END
+#define VSTREAM_SPOPEN_COMMAND(v)      VSTREAM_POPEN_COMMAND, CHECK_CPTR(VSTREAM_SPOP, char, (v))
+#define VSTREAM_SPOPEN_ARGV(v)         VSTREAM_POPEN_ARGV, CHECK_PPTR(VSTREAM_SPOP, char, (v))
+#define VSTREAM_SPOPEN_UID(v)          VSTREAM_POPEN_UID, CHECK_VAL(VSTREAM_SPOP, uid_t, (v))
+#define VSTREAM_SPOPEN_GID(v)          VSTREAM_POPEN_GID, CHECK_VAL(VSTREAM_SPOP, gid_t, (v))
+#define VSTREAM_SPOPEN_ENV(v)          VSTREAM_POPEN_ENV, CHECK_PPTR(VSTREAM_SPOP, char, (v))
+#define VSTREAM_SPOPEN_SHELL(v)                VSTREAM_POPEN_SHELL, CHECK_CPTR(VSTREAM_SPOP, char, (v))
+#define VSTREAM_SPOPEN_WAITPID_FN(v)   VSTREAM_POPEN_WAITPID_FN, CHECK_VAL(VSTREAM_SPOP, VSTREAM_WAITPID_FN, (v))
+#define VSTREAM_SPOPEN_EXPORT(v)       VSTREAM_POPEN_EXPORT, CHECK_PPTR(VSTREAM_SPOP, char, (v))
+
+CHECK_VAL_HELPER_DCL(VSTREAM_SPOP, uid_t);
+CHECK_VAL_HELPER_DCL(VSTREAM_SPOP, gid_t);
+CHECK_VAL_HELPER_DCL(VSTREAM_SPOP, VSTREAM_WAITPID_FN);
+CHECK_PPTR_HELPER_DCL(VSTREAM_SPOP, char);
+CHECK_CPTR_HELPER_DCL(VSTREAM_SPOP, char);
+
 extern VSTREAM *vstream_vprintf(const char *, va_list);
 extern VSTREAM *vstream_vfprintf(VSTREAM *, const char *, va_list);
 
index 7c54ec14a659a66bf070d20cd3b74547edc93b56..66077e6dcb9771fa19186316346c9483a7617617 100644 (file)
 /*     argument is as with vstream_fopen(). The child's standard input and
 /*     standard output are redirected to the stream, which is based on a
 /*     socketpair or other suitable local IPC. vstream_popen() takes a list
-/*     of (key, value) arguments, terminated by VSTREAM_POPEN_END. The key
-/*     argument specifies what value will follow. The following is a listing
-/*     of key codes together with the expected value type.
+/*     of macros with zero or more arguments, terminated by
+/*     VSTREAM_SPOPEN_END.  The following is a listing of macros
+/*     with the expected argument type.
 /* .RS
-/* .IP "VSTREAM_POPEN_COMMAND (char *)"
+/* .IP "VSTREAM_SPOPEN_COMMAND(const char *)"
 /*     Specifies the command to execute as a string. The string is
 /*     passed to the shell when it contains shell meta characters
 /*     or when it appears to be a shell built-in command, otherwise
 /*     the command is executed without invoking a shell.
-/*     One of VSTREAM_POPEN_COMMAND or VSTREAM_POPEN_ARGV must be specified.
-/* .IP "VSTREAM_POPEN_ARGV (char **)"
+/*     One of VSTREAM_SPOPEN_COMMAND or VSTREAM_POPEN_ARGV must be specified.
+/* .IP "VSTREAM_SPOPEN_ARGV(char **)"
 /*     The command is specified as an argument vector. This vector is
 /*     passed without further inspection to the \fIexecvp\fR() routine.
-/*     One of VSTREAM_POPEN_COMMAND or VSTREAM_POPEN_ARGV must be specified.
-/*     See also the VSTREAM_POPEN_SHELL attribute below.
-/* .IP "VSTREAM_POPEN_ENV (char **)"
+/*     One of VSTREAM_SPOPEN_COMMAND or VSTREAM_POPEN_ARGV must be specified.
+/*     See also the VSTREAM_SPOPEN_SHELL attribute below.
+/* .IP "VSTREAM_SPOPEN_ENV(char **)"
 /*     Additional environment information, in the form of a null-terminated
 /*     list of name, value, name, value, ... elements. By default only the
 /*     command search path is initialized to _PATH_DEFPATH.
-/* .IP "VSTREAM_POPEN_EXPORT (char **)"
+/* .IP "VSTREAM_SPOPEN_EXPORT(char **)"
 /*     This argument is passed to clean_env().
 /*     Null-terminated array of names of environment parameters
 /*     that can be exported. By default, everything is exported.
-/* .IP "VSTREAM_POPEN_UID (uid_t)"
+/* .IP "VSTREAM_SPOPEN_UID(uid_t)"
 /*     The user ID to execute the command as. The user ID must be non-zero.
-/* .IP "VSTREAM_POPEN_GID (gid_t)"
+/* .IP "VSTREAM_SPOPEN_GID(gid_t)"
 /*     The group ID to execute the command as. The group ID must be non-zero.
-/* .IP "VSTREAM_POPEN_SHELL (char *)"
+/* .IP "VSTREAM_SPOPEN_SHELL(const char *)"
 /*     The shell to use when executing the command specified with
-/*     VSTREAM_POPEN_COMMAND. This shell is invoked regardless of the
+/*     VSTREAM_SPOPEN_COMMAND. This shell is invoked regardless of the
 /*     command content.
-/* .IP "VSTREAM_POPEN_WAITPID_FN ((*)(pid_t, WAIT_STATUS_T *, int))"
+/* .IP "VSTREAM_SPOPEN_WAITPID_FN(pid_t (*)(pid_t, WAIT_STATUS_T *, int))"
 /*     waitpid()-like function to reap the child exit status when
 /*     vstream_pclose() is called.
 /* .RE
index 28ba0b1c528f21d75d0c9587f428d82083655eb9..9169b7e52105e544272e165621023c52ab9133fd 100644 (file)
@@ -120,7 +120,7 @@ int     vstream_tweak_tcp(VSTREAM *fp)
      * changes and IP path MTU discovery is turned on, so we choose a
      * somewhat larger buffer.
      * 
-     * Note: as of 20120527, the VSTREAM_CTL_BUFSIZE request can reduce the
+     * Note: as of 20120527, the VSTREAM_SCTL_BUFSIZE request can reduce the
      * stream buffer size to less than VSTREAM_BUFSIZE, when the request is
      * made before the first stream read or write operation. We don't want to
      * reduce the buffer size.
@@ -128,13 +128,13 @@ int     vstream_tweak_tcp(VSTREAM *fp)
 #define EFF_BUFFER_SIZE(fp) (vstream_req_bufsize(fp) ? \
                vstream_req_bufsize(fp) : VSTREAM_BUFSIZE)
 
-#ifdef VSTREAM_CTL_BUFSIZE
+#ifdef VSTREAM_SCTL_BUFSIZE
     if (mss > EFF_BUFFER_SIZE(fp) / 2) {
        if (mss < INT_MAX / 2)
            mss *= 2;
        vstream_control(fp,
-                       VSTREAM_CTL_BUFSIZE, (ssize_t) mss,
-                       VSTREAM_CTL_END);
+                       VSTREAM_SCTL_BUFSIZE(mss),
+                       VSTREAM_SCTL_END);
     }
 
     /*
index 6732507afcc96f62838b0c9b61b2a5d1507b6243..a2bc3f13f7eeb6b6a32490e28b68f8fdd7a91d7b 100644 (file)
 /*     is a null-terminated string of length zero.
 /*
 /*     vstring_ctl() gives additional control over VSTRING behavior.
-/*     The function takes a VSTRING pointer and a list of zero
-/*     or more (name,value) pairs. The expected value type
-/*     depends on the specified name. The value name codes are:
-/* .IP "VSTRING_CTL_MAXLEN (ssize_t)"
+/*     The function takes a VSTRING pointer and a list of zero or
+/*     more macros with zer or more arguments, terminated with
+/*     VSTRING_SCTL_END which has none.
+/* .IP "VSTRING_SCTL_MAXLEN(ssize_t len)
 /*     Specifies a hard upper limit on a string's length. When the
 /*     length would be exceeded, the program simulates a memory
 /*     allocation problem (i.e. it terminates through msg_fatal()).
 /*     This fuctionality is currently unimplemented.
-/* .IP "VSTRING_CTL_END (no value)"
+/* .IP "VSTRING_SCTL_END (no argument)"
 /*     Specifies the end of the argument list. Forgetting to terminate
 /*     the argument list may cause the program to crash.
 /* .PP
index 30b463d1ec197cef2ddd4100c554acca016ff61d..b220b0f7f8c3985e01d3d16d2631abb5fd16ebf3 100644 (file)
@@ -20,6 +20,7 @@
   * Utility library.
   */
 #include <vbuf.h>
+#include <check_arg.h>
 
  /*
   * We can't allow bare VBUFs in the interface, because VSTRINGs have a
@@ -27,7 +28,7 @@
   */
 typedef struct VSTRING {
     VBUF    vbuf;
-    ssize_t  maxlen;
+    ssize_t maxlen;
 } VSTRING;
 
 extern VSTRING *vstring_alloc(ssize_t);
@@ -45,13 +46,20 @@ extern VSTRING *vstring_insert(VSTRING *, ssize_t, const char *, ssize_t);
 extern VSTRING *vstring_prepend(VSTRING *, const char *, ssize_t);
 extern VSTRING *PRINTFLIKE(2, 3) vstring_sprintf(VSTRING *, const char *,...);
 extern VSTRING *PRINTFLIKE(2, 3) vstring_sprintf_append(VSTRING *, const char *,...);
-extern VSTRING *PRINTFLIKE(2, 3) vstring_sprintf_prepend(VSTRING *, const char *, ...);
+extern VSTRING *PRINTFLIKE(2, 3) vstring_sprintf_prepend(VSTRING *, const char *,...);
 extern char *vstring_export(VSTRING *);
 extern VSTRING *vstring_import(char *);
 
+/* Legacy API: constant plus type-unchecked argument. */
 #define VSTRING_CTL_MAXLEN     1
 #define VSTRING_CTL_END                0
 
+/* Safer API: type-checked arguments. */
+#define VSTRING_SCTL_END       VSTRING_CTL_END
+#define VSTRING_SCTL_MAXLEN(val) VSTRING_CTL_MAXLEN, CHECK_VAL(VSTRING, ssize_t, (val))
+
+CHECK_VAL_HELPER_DCL(VSTRING, ssize_t);
+
  /*
   * Macros. Unsafe macros have UPPERCASE names.
   */
index d7642c9fc481fc26ed221f9c843afc15ff7b343a..cc45581f603603be3265ae96db61ccfac9a927aa 100644 (file)
@@ -532,7 +532,7 @@ static void verify_query_service(VSTREAM *client_stream)
 /* verify_cache_validator - cache cleanup validator */
 
 static int verify_cache_validator(const char *addr, const char *raw_data,
-                                         char *context)
+                                         void *context)
 {
     VSTRING *get_buf = (VSTRING *) context;
     int     addr_status;
@@ -591,7 +591,7 @@ static void verify_service(VSTREAM *client_stream, char *unused_service,
 
 /* verify_dump - dump some statistics */
 
-static void verify_dump(void)
+static void verify_dump(char *unused_name, char **unused_argv)
 {
 
     /*
@@ -629,11 +629,11 @@ static void post_jail_init(char *unused_name, char **unused_argv)
        if (msg_verbose)
            cache_flags |= DICT_CACHE_FLAG_VERBOSE;
        dict_cache_control(verify_map,
-                          DICT_CACHE_CTL_FLAGS, cache_flags,
-                          DICT_CACHE_CTL_INTERVAL, var_verify_scan_cache,
-                          DICT_CACHE_CTL_VALIDATOR, verify_cache_validator,
-                       DICT_CACHE_CTL_CONTEXT, (void *) vstring_alloc(100),
-                          DICT_CACHE_CTL_END);
+                          DICT_CACHE_SCTL_FLAGS(cache_flags),
+                          DICT_CACHE_SCTL_INTERVAL(var_verify_scan_cache),
+                          DICT_CACHE_SCTL_VALIDATOR(verify_cache_validator),
+                      DICT_CACHE_SCTL_CONTEXT((void *) vstring_alloc(100)),
+                          DICT_CACHE_SCTL_END);
     }
 }
 
@@ -724,11 +724,11 @@ int     main(int argc, char **argv)
     MAIL_VERSION_STAMP_ALLOCATE;
 
     multi_server_main(argc, argv, verify_service,
-                     MAIL_SERVER_STR_TABLE, str_table,
-                     MAIL_SERVER_TIME_TABLE, time_table,
-                     MAIL_SERVER_PRE_INIT, pre_jail_init,
-                     MAIL_SERVER_POST_INIT, post_jail_init,
-                     MAIL_SERVER_SOLITARY,
-                     MAIL_SERVER_EXIT, verify_dump,
+                     MAIL_SERVER_REQ_STR_TABLE(str_table),
+                     MAIL_SERVER_REQ_TIME_TABLE(time_table),
+                     MAIL_SERVER_REQ_PRE_INIT(pre_jail_init),
+                     MAIL_SERVER_REQ_POST_INIT(post_jail_init),
+                     MAIL_SERVER_REQ_SOLITARY,
+                     MAIL_SERVER_REQ_EXIT(verify_dump),
                      0);
 }
index 6b56226da63e89e0f21f2ec68744f8d47c176824..9c0d9091e6a5d150ecb6982df8f7325bf42f6611 100644 (file)
@@ -531,15 +531,15 @@ int     main(int argc, char **argv)
     MAIL_VERSION_STAMP_ALLOCATE;
 
     single_server_main(argc, argv, local_service,
-                      MAIL_SERVER_INT_TABLE, int_table,
-                      MAIL_SERVER_LONG_TABLE, long_table,
-                      MAIL_SERVER_STR_TABLE, str_table,
-                      MAIL_SERVER_BOOL_TABLE, bool_table,
-                      MAIL_SERVER_PRE_INIT, pre_init,
-                      MAIL_SERVER_POST_INIT, post_init,
-                      MAIL_SERVER_PRE_ACCEPT, pre_accept,
-                      MAIL_SERVER_PRIVILEGED,
-                      MAIL_SERVER_BOUNCE_INIT, VAR_VIRT_DSN_FILTER,
-                      &var_virt_dsn_filter,
+                      MAIL_SERVER_REQ_INT_TABLE(int_table),
+                      MAIL_SERVER_REQ_LONG_TABLE(long_table),
+                      MAIL_SERVER_REQ_STR_TABLE(str_table),
+                      MAIL_SERVER_REQ_BOOL_TABLE(bool_table),
+                      MAIL_SERVER_REQ_PRE_INIT(pre_init),
+                      MAIL_SERVER_REQ_POST_INIT(post_init),
+                      MAIL_SERVER_REQ_PRE_ACCEPT(pre_accept),
+                      MAIL_SERVER_REQ_PRIVILEGED,
+                      MAIL_SERVER_REQ_BOUNCE_INIT(VAR_VIRT_DSN_FILTER,
+                                                  &var_virt_dsn_filter),
                       0);
 }
index 3abdfca3d222852e5e742f0b93e27bffd804e650..9a7b171b571d9d5c56a5494d48d7cd954d0a3beb 100644 (file)
@@ -82,6 +82,7 @@ depend: $(MAKES)
 
 # do not edit below this line - it is generated by 'make depend'
 xsasl_client.o: ../../include/argv.h
+xsasl_client.o: ../../include/check_arg.h
 xsasl_client.o: ../../include/msg.h
 xsasl_client.o: ../../include/mymalloc.h
 xsasl_client.o: ../../include/sys_defs.h
@@ -92,6 +93,7 @@ xsasl_client.o: xsasl.h
 xsasl_client.o: xsasl_client.c
 xsasl_client.o: xsasl_cyrus.h
 xsasl_cyrus_client.o: ../../include/argv.h
+xsasl_cyrus_client.o: ../../include/check_arg.h
 xsasl_cyrus_client.o: ../../include/mail_params.h
 xsasl_cyrus_client.o: ../../include/msg.h
 xsasl_cyrus_client.o: ../../include/mymalloc.h
@@ -108,6 +110,7 @@ xsasl_cyrus_log.o: ../../include/msg.h
 xsasl_cyrus_log.o: ../../include/sys_defs.h
 xsasl_cyrus_log.o: xsasl_cyrus_common.h
 xsasl_cyrus_log.o: xsasl_cyrus_log.c
+xsasl_cyrus_security.o: ../../include/check_arg.h
 xsasl_cyrus_security.o: ../../include/name_mask.h
 xsasl_cyrus_security.o: ../../include/sys_defs.h
 xsasl_cyrus_security.o: ../../include/vbuf.h
@@ -115,6 +118,7 @@ xsasl_cyrus_security.o: ../../include/vstring.h
 xsasl_cyrus_security.o: xsasl_cyrus_common.h
 xsasl_cyrus_security.o: xsasl_cyrus_security.c
 xsasl_cyrus_server.o: ../../include/argv.h
+xsasl_cyrus_server.o: ../../include/check_arg.h
 xsasl_cyrus_server.o: ../../include/mail_params.h
 xsasl_cyrus_server.o: ../../include/msg.h
 xsasl_cyrus_server.o: ../../include/mymalloc.h
@@ -129,6 +133,7 @@ xsasl_cyrus_server.o: xsasl_cyrus.h
 xsasl_cyrus_server.o: xsasl_cyrus_common.h
 xsasl_cyrus_server.o: xsasl_cyrus_server.c
 xsasl_dovecot_server.o: ../../include/argv.h
+xsasl_dovecot_server.o: ../../include/check_arg.h
 xsasl_dovecot_server.o: ../../include/connect.h
 xsasl_dovecot_server.o: ../../include/iostuff.h
 xsasl_dovecot_server.o: ../../include/mail_params.h
@@ -147,6 +152,7 @@ xsasl_dovecot_server.o: xsasl.h
 xsasl_dovecot_server.o: xsasl_dovecot.h
 xsasl_dovecot_server.o: xsasl_dovecot_server.c
 xsasl_server.o: ../../include/argv.h
+xsasl_server.o: ../../include/check_arg.h
 xsasl_server.o: ../../include/msg.h
 xsasl_server.o: ../../include/mymalloc.h
 xsasl_server.o: ../../include/sys_defs.h
index 7f54582809890843d0a0aa7d1ad740c13a8dba9e..f2a08f2d536727788c751a43680696898d7d0b9a 100644 (file)
@@ -278,9 +278,9 @@ static int xsasl_dovecot_server_connect(XSASL_DOVECOT_SERVER_IMPL *xp)
     }
     sasl_stream = vstream_fdopen(fd, O_RDWR);
     vstream_control(sasl_stream,
-                   VSTREAM_CTL_PATH, xp->socket_path,
-                   VSTREAM_CTL_TIMEOUT, AUTH_TIMEOUT,
-                   VSTREAM_CTL_END);
+                   VSTREAM_SCTL_PATH(xp->socket_path),
+                   VSTREAM_SCTL_TIMEOUT(AUTH_TIMEOUT),
+                   VSTREAM_SCTL_END);
 
     /* XXX Encapsulate for logging. */
     vstream_fprintf(sasl_stream,