mirror of
https://github.com/vdukhovni/postfix
synced 2025-08-30 13:48:06 +00:00
postfix-1.1.8-20020505
This commit is contained in:
parent
44b8cf6ec1
commit
8cae9ae6db
@ -6294,8 +6294,10 @@ Apologies for any names omitted.
|
|||||||
developed with Lamont Jones, HP.
|
developed with Lamont Jones, HP.
|
||||||
|
|
||||||
Feature: more efficient use of cache memory when a process
|
Feature: more efficient use of cache memory when a process
|
||||||
opens multiple Berkeley DB tables. Files: util/dict_db.c,
|
opens multiple Berkeley DB tables; and faster performance
|
||||||
global/mkmap_db.c. Victor Duchovni, Morgan Stanley.
|
creating large tables by using more buffer memory. Files:
|
||||||
|
util/dict_db.[hc], global/mkmap_db.c. Victor Duchovni,
|
||||||
|
Morgan Stanley.
|
||||||
|
|
||||||
20020503
|
20020503
|
||||||
|
|
||||||
@ -6320,9 +6322,28 @@ Apologies for any names omitted.
|
|||||||
permissions from the source file when it creates a new
|
permissions from the source file when it creates a new
|
||||||
table for the first time. File: postalias/postalias.c.
|
table for the first time. File: postalias/postalias.c.
|
||||||
|
|
||||||
|
20020504
|
||||||
|
|
||||||
Portability: run-time test to avoid GDBM trouble. File:
|
Portability: run-time test to avoid GDBM trouble. File:
|
||||||
util/dict_dbm.c.
|
util/dict_dbm.c.
|
||||||
|
|
||||||
|
20020505
|
||||||
|
|
||||||
|
Cleanup: revised and simplified the transport map semantics.
|
||||||
|
Null transport or nexhop fields now mean: "do not change":
|
||||||
|
use what would be used if the transport map did not exist.
|
||||||
|
This change eliminated a lot of code. The incompatibility
|
||||||
|
is that a null transport field no longer defaults to
|
||||||
|
$default_transport, but to $local_transport or $default_transport
|
||||||
|
depending on the destination, and that a transport map only
|
||||||
|
overrides relayhost when the table specifies explicit
|
||||||
|
nexthop information. Files: trivial-rewrite/transport.c,
|
||||||
|
trivial-rewrite/resolve.c.
|
||||||
|
|
||||||
|
Cleanup: revised the user interface for controlling the
|
||||||
|
Berkeley DB create and read buffer size controls. Files:
|
||||||
|
util/dict_db.[hc], global/mail_params.[hc], global/mkmap_db.c.
|
||||||
|
|
||||||
Open problems:
|
Open problems:
|
||||||
|
|
||||||
Low: sendmail does not store null command-line recipients.
|
Low: sendmail does not store null command-line recipients.
|
||||||
|
@ -1,9 +1,13 @@
|
|||||||
Purpose of this document
|
Purpose of this document
|
||||||
========================
|
========================
|
||||||
|
|
||||||
This document describes how to build Postfix with third-party
|
This document describes
|
||||||
Berkeley DB from www.sleepycat.com, or how to choose a specific
|
|
||||||
Berkeley DB version when your system provides multiple implementations.
|
1 - How to build Postfix with third-party Berkeley DB from
|
||||||
|
www.sleepycat.com, or how to choose a specific Berkeley DB version
|
||||||
|
when your system provides multiple implementations.
|
||||||
|
|
||||||
|
2 - How to tweak performance.
|
||||||
|
|
||||||
Building Postfix with Sleepycat Berkeley DB
|
Building Postfix with Sleepycat Berkeley DB
|
||||||
===========================================
|
===========================================
|
||||||
@ -84,3 +88,20 @@ DB 1.85 compatibility mode. Doing so would break fcntl file locking.
|
|||||||
|
|
||||||
Warning: if you use PERL to manipulate Postfix .db files, then you
|
Warning: if you use PERL to manipulate Postfix .db files, then you
|
||||||
need to use the same Berkeley DB version in PERL as in Postfix.
|
need to use the same Berkeley DB version in PERL as in Postfix.
|
||||||
|
|
||||||
|
Tweaking performance
|
||||||
|
====================
|
||||||
|
|
||||||
|
Postfix provides two configuration parameters that control how much
|
||||||
|
buffering memory Berkeley DB will use.
|
||||||
|
|
||||||
|
- berkeley_db_create_buffer_size (default: 16 MBytes). This setting
|
||||||
|
is used by the postalias and postmap commands. For "hash" files
|
||||||
|
performance degrades rapidly unless the memory pool is O(file size).
|
||||||
|
For "btree" files peformance is good with sorted input even for
|
||||||
|
small memory pools, but with random input degrades rapidly unless
|
||||||
|
the memory pool is O(file size).
|
||||||
|
|
||||||
|
- berkeley_db_read_buffer_size (default: 256 kBytes). This setting
|
||||||
|
is used by all other Postfix programs. The buffer size is adequate
|
||||||
|
for reading.
|
||||||
|
@ -12,6 +12,60 @@ snapshot release). Patches change the patchlevel and the release
|
|||||||
date. Snapshots change only the release date, unless they include
|
date. Snapshots change only the release date, unless they include
|
||||||
the same bugfixes as a patch release.
|
the same bugfixes as a patch release.
|
||||||
|
|
||||||
|
Incompatible changes with Postfix snapshot 1.1.8-20020505
|
||||||
|
=========================================================
|
||||||
|
|
||||||
|
In the Postfix transport table, the meaning of null delivery
|
||||||
|
transport and nexhop information fields has changed. As of now, a
|
||||||
|
null delivery transport or nexthop information field means "do not
|
||||||
|
modify": use the delivery transport or nexthop information that
|
||||||
|
would be used if no transport table did not exist. This change
|
||||||
|
results in the following incompatible changes in behavior:
|
||||||
|
|
||||||
|
- A null delivery transport field no longer defaults to
|
||||||
|
$default_transport. It now defaults to $local_transport or
|
||||||
|
$default_transport depending on the destination.
|
||||||
|
|
||||||
|
- A null nexthop information field no longer overrides the main.cf
|
||||||
|
relayhost setting. To override the relayhost, specify explicit
|
||||||
|
nexthop information in the Postfix transport table.
|
||||||
|
|
||||||
|
The postalias command now copies the source file read permissions
|
||||||
|
to the result file when creating a table for the first time. Until
|
||||||
|
now, the result file was created with default read permissions.
|
||||||
|
This change makes postalias more similar to postmap.
|
||||||
|
|
||||||
|
The postalias and postmap commands now drop super-user privileges
|
||||||
|
when processing a non-root source file. The file is now processed
|
||||||
|
as the source file owner, and the owner must therefore have permission
|
||||||
|
to update the result file. Specify the "-o" flag to get the old
|
||||||
|
behavior (process non-root files with root privileges).
|
||||||
|
|
||||||
|
The read buffer size for Berkeley DB lookup tables was decreased
|
||||||
|
from 1MByte to 256kByte. Specify "berkeley_db_read_buffer_size =
|
||||||
|
1048576" to get the old read buffer size.
|
||||||
|
|
||||||
|
Major changes with Postfix snapshot 1.1.8-20020505
|
||||||
|
==================================================
|
||||||
|
|
||||||
|
Friendlier behavior of Postfix transport tables. There is a new
|
||||||
|
"*" wildcard pattern that matches any domain. The meaning of a null
|
||||||
|
delivery transport or nexhop information field has changed to "do
|
||||||
|
not modify": use the information that would be used if the transport
|
||||||
|
table did not exist. This change makes it easier to route internal
|
||||||
|
mail (everything under my.domain) directly: you no longer need to
|
||||||
|
specify explicit "local" transport table entries for the local
|
||||||
|
machine. For more information, including examples, see the updated
|
||||||
|
transport(5) manual page.
|
||||||
|
|
||||||
|
Finer control over Berkeley DB memory usage, and more efficient
|
||||||
|
usage of memory in applications that open lots of tables. The
|
||||||
|
parameter "berkeley_db_create_buffer_size" (default: 16 MBytes)
|
||||||
|
specifies the buffer size for the postmap and postalias commands.
|
||||||
|
The parameter "berkeley_db_read_buffer_size" (default: 256 kBytes)
|
||||||
|
speficies the buffer size for all other applications. For more
|
||||||
|
information, see the last paragraphs of the DB_README file.
|
||||||
|
|
||||||
Major changes with Postfix snapshot 1.1.7-20020331
|
Major changes with Postfix snapshot 1.1.7-20020331
|
||||||
==================================================
|
==================================================
|
||||||
|
|
||||||
|
@ -1,4 +1,3 @@
|
|||||||
#
|
|
||||||
# TRANSPORT(5) TRANSPORT(5)
|
# TRANSPORT(5) TRANSPORT(5)
|
||||||
#
|
#
|
||||||
# NAME
|
# NAME
|
||||||
@ -34,8 +33,7 @@
|
|||||||
#
|
#
|
||||||
# pattern result
|
# pattern result
|
||||||
# When pattern matches the domain, use the corre-
|
# When pattern matches the domain, use the corre-
|
||||||
# sponding result. A pattern of `*' matches all
|
# sponding result.
|
||||||
# entries.
|
|
||||||
#
|
#
|
||||||
# blank lines and comments
|
# blank lines and comments
|
||||||
# Empty lines and whitespace-only lines are ignored,
|
# Empty lines and whitespace-only lines are ignored,
|
||||||
@ -47,6 +45,22 @@
|
|||||||
# line that starts with whitespace continues a logi-
|
# line that starts with whitespace continues a logi-
|
||||||
# cal line.
|
# cal line.
|
||||||
#
|
#
|
||||||
|
# In an indexed file, a pattern of `*' matches everything.
|
||||||
|
#
|
||||||
|
# The result is of the form transport:nexthop. The trans-
|
||||||
|
# port field specifies a mail delivery transport such as
|
||||||
|
# smtp or local. The nexthop field specifies where and how
|
||||||
|
# to deliver mail. A null transport or nexthop field means
|
||||||
|
# "do not change": use the delivery transport and nexthop
|
||||||
|
# information that would be used if no match were found.
|
||||||
|
#
|
||||||
|
# The interpretation of the nexthop field is transport
|
||||||
|
# dependent. In the case of SMTP, specify host:service for a
|
||||||
|
# non-default server port, and use [host] or [host]:port in
|
||||||
|
# order to disable MX (mail exchanger) DNS lookups. The []
|
||||||
|
# form can also be used with IP addresses instead of host-
|
||||||
|
# names.
|
||||||
|
#
|
||||||
# With lookups from indexed files such as DB or DBM, or from
|
# With lookups from indexed files such as DB or DBM, or from
|
||||||
# networked tables such as NIS, LDAP or SQL, patterns are
|
# networked tables such as NIS, LDAP or SQL, patterns are
|
||||||
# tried in the order as listed below:
|
# tried in the order as listed below:
|
||||||
@ -63,33 +77,19 @@
|
|||||||
# ting. Otherwise, a domain name matches itself and
|
# ting. Otherwise, a domain name matches itself and
|
||||||
# its subdomains.
|
# its subdomains.
|
||||||
#
|
#
|
||||||
# An empty result (`:' - default transport, default nexthop)
|
|
||||||
# behaves as though the transport map did not exist. When
|
|
||||||
# combined with a wildcard (`*') entry, this can be used to
|
|
||||||
# route internal mail directly, while using a relay for all
|
|
||||||
# outbound traffic. (Note that you should _NOT_ set
|
|
||||||
# relayhost in this case.)
|
|
||||||
#
|
|
||||||
# * smtp:outbound-relay.my.domain
|
|
||||||
# .my.domain :
|
|
||||||
#
|
|
||||||
# Note: transport map entries take precedence over domains
|
|
||||||
# specified in the mydestination parameter. If you use the
|
|
||||||
# optional transport map, it may be safer to specify
|
|
||||||
# explicit entries for all domains specified in mydestina-
|
|
||||||
# tion, for example:
|
|
||||||
#
|
|
||||||
# hostname.my.domain local:
|
|
||||||
# localhost.my.domain local:
|
|
||||||
#
|
|
||||||
# The interpretation of the nexthop field is transport
|
|
||||||
# dependent. In the case of SMTP, specify host:service for a
|
|
||||||
# non-default server port, and use [host] or [host]:port in
|
|
||||||
# order to disable MX (mail exchanger) DNS lookups. The []
|
|
||||||
# form can also be used with IP addresses instead of host-
|
|
||||||
# names.
|
|
||||||
#
|
|
||||||
# EXAMPLES
|
# EXAMPLES
|
||||||
|
# In order to deliver internal mail directly, while using a
|
||||||
|
# mail relay for all other mail, specify a null entry for
|
||||||
|
# internal destinations (do not change the delivery trans-
|
||||||
|
# port or the nexthop information) and specify a wildcard
|
||||||
|
# for all other destinations. Note that for this trick to
|
||||||
|
# work you should not specify a relayhost in the main.cf
|
||||||
|
# file.
|
||||||
|
#
|
||||||
|
# my.domain :
|
||||||
|
# .my.domain :
|
||||||
|
# * smtp:outbound-relay.my.domain
|
||||||
|
#
|
||||||
# In order to send mail for foo.org and its subdomains via
|
# In order to send mail for foo.org and its subdomains via
|
||||||
# the uucp transport to the UUCP host named foo:
|
# the uucp transport to the UUCP host named foo:
|
||||||
#
|
#
|
||||||
@ -105,10 +105,11 @@
|
|||||||
#
|
#
|
||||||
# foo.org slow:
|
# foo.org slow:
|
||||||
#
|
#
|
||||||
# When no transport is specified, the default transport is
|
# When no transport is specified, Postfix uses either
|
||||||
# used, as specified via the default_transport configuration
|
# $local_transport or $default_transport, depending on
|
||||||
# parameter. The following sends all mail for foo.org and
|
# whether the destination matches $mydestination. The fol-
|
||||||
# its subdomains to host gateway.foo.org:
|
# lowing sends all mail for foo.org and its subdomains to
|
||||||
|
# host gateway.foo.org:
|
||||||
#
|
#
|
||||||
# foo.org :[gateway.foo.org]
|
# foo.org :[gateway.foo.org]
|
||||||
# .foo.org :[gateway.foo.org]
|
# .foo.org :[gateway.foo.org]
|
||||||
@ -169,13 +170,23 @@
|
|||||||
#
|
#
|
||||||
# Other parameters of interest:
|
# Other parameters of interest:
|
||||||
#
|
#
|
||||||
|
# local_transport
|
||||||
|
# The mail delivery transport to use when no trans-
|
||||||
|
# port is explicitly specified, and the destination
|
||||||
|
# matches $mydestination.
|
||||||
|
#
|
||||||
# default_transport
|
# default_transport
|
||||||
# The transport to use when no transport is explic-
|
# The mail delivery transport to use when no trans-
|
||||||
# itly specified.
|
# port is explicitly specified, and the destination
|
||||||
|
# does not match $mydestination.
|
||||||
|
#
|
||||||
|
# mydestination
|
||||||
|
# The destinations that are given to $local_transport
|
||||||
|
# by default.
|
||||||
#
|
#
|
||||||
# relayhost
|
# relayhost
|
||||||
# The default host to send to when no transport table
|
# The default host for destinations that do not match
|
||||||
# entry matches.
|
# $mydestination.
|
||||||
#
|
#
|
||||||
# SEE ALSO
|
# SEE ALSO
|
||||||
# postmap(1) create mapping table
|
# postmap(1) create mapping table
|
||||||
@ -193,5 +204,4 @@
|
|||||||
# P.O. Box 704
|
# P.O. Box 704
|
||||||
# Yorktown Heights, NY 10598, USA
|
# Yorktown Heights, NY 10598, USA
|
||||||
#
|
#
|
||||||
# 1
|
# TRANSPORT(5)
|
||||||
#
|
|
||||||
|
@ -584,24 +584,23 @@ DNS lookups as well:
|
|||||||
|
|
||||||
<p>
|
<p>
|
||||||
|
|
||||||
<li>In addition to the above you can configure Postfix to deliver
|
<li>Instead of the above you can configure Postfix to deliver
|
||||||
intranet mail directly instead of sending it via the intranet
|
intranet mail directly instead of sending it via the intranet
|
||||||
mail gateway.
|
mail gateway. In this case, do not specify a relayhost!!
|
||||||
|
|
||||||
<p>
|
<p>
|
||||||
|
|
||||||
Specify routing information for the internal domain in the <a
|
Specify default routing information for the internal domain in the
|
||||||
href="transport.5.html">transport</a> table, and enable <a
|
<a href="transport.5.html">transport</a> table, and enable <a
|
||||||
href="transport.5.html">transport</a> table lookups.
|
href="transport.5.html">transport</a> table lookups.
|
||||||
|
|
||||||
<p>
|
<p>
|
||||||
|
|
||||||
<pre>
|
<pre>
|
||||||
/etc/postfix/transport:
|
/etc/postfix/transport:
|
||||||
my.domain smtp:
|
my.domain :
|
||||||
.my.domain smtp:
|
.my.domain :
|
||||||
thishost.my.domain local: !!!important!!!
|
* smtp:gateway.my.domain
|
||||||
localhost.my.domain local: !!!important!!!
|
|
||||||
|
|
||||||
/etc/postfix/main.cf:
|
/etc/postfix/main.cf:
|
||||||
transport_maps = hash:/etc/postfix/transport
|
transport_maps = hash:/etc/postfix/transport
|
||||||
@ -609,8 +608,8 @@ href="transport.5.html">transport</a> table lookups.
|
|||||||
|
|
||||||
<p>
|
<p>
|
||||||
|
|
||||||
Important: do not omit the entries that deliver mail locally, or
|
Important: do not specify a relayhost entry, or else mail for
|
||||||
else mail will bounce with a "mail loops to myself" condition.
|
internal destinations will still be given to the relayhost.
|
||||||
|
|
||||||
<p>
|
<p>
|
||||||
|
|
||||||
|
@ -136,6 +136,14 @@ POSTALIAS(1) POSTALIAS(1)
|
|||||||
Default alias database type. On many UNIX systems,
|
Default alias database type. On many UNIX systems,
|
||||||
the default type is either <b>dbm</b> or <b>hash</b>.
|
the default type is either <b>dbm</b> or <b>hash</b>.
|
||||||
|
|
||||||
|
<b>berkeley</b><i>_</i><b>db</b><i>_</i><b>create</b><i>_</i><b>buffer</b><i>_</i><b>size</b>
|
||||||
|
Amount of buffer memory to be used when creating a
|
||||||
|
Berkeley DB <b>hash</b> or <b>btree</b> lookup table.
|
||||||
|
|
||||||
|
<b>berkeley</b><i>_</i><b>db</b><i>_</i><b>read</b><i>_</i><b>buffer</b><i>_</i><b>size</b>
|
||||||
|
Amount of buffer memory to be used when reading a
|
||||||
|
Berkeley DB <b>hash</b> or <b>btree</b> lookup table.
|
||||||
|
|
||||||
<b>STANDARDS</b>
|
<b>STANDARDS</b>
|
||||||
<a href="http://www.faqs.org/rfcs/rfc822.html">RFC 822</a> (ARPA Internet Text Messages)
|
<a href="http://www.faqs.org/rfcs/rfc822.html">RFC 822</a> (ARPA Internet Text Messages)
|
||||||
|
|
||||||
|
@ -153,6 +153,14 @@ POSTMAP(1) POSTMAP(1)
|
|||||||
tems, the default database type is either <b>hash</b> or
|
tems, the default database type is either <b>hash</b> or
|
||||||
<b>dbm</b>.
|
<b>dbm</b>.
|
||||||
|
|
||||||
|
<b>berkeley</b><i>_</i><b>db</b><i>_</i><b>create</b><i>_</i><b>buffer</b><i>_</i><b>size</b>
|
||||||
|
Amount of buffer memory to be used when creating a
|
||||||
|
Berkeley DB <b>hash</b> or <b>btree</b> lookup table.
|
||||||
|
|
||||||
|
<b>berkeley</b><i>_</i><b>db</b><i>_</i><b>read</b><i>_</i><b>buffer</b><i>_</i><b>size</b>
|
||||||
|
Amount of buffer memory to be used when reading a
|
||||||
|
Berkeley DB <b>hash</b> or <b>btree</b> lookup table.
|
||||||
|
|
||||||
<b>LICENSE</b>
|
<b>LICENSE</b>
|
||||||
The Secure Mailer license must be distributed with this
|
The Secure Mailer license must be distributed with this
|
||||||
software.
|
software.
|
||||||
|
@ -1,5 +1,4 @@
|
|||||||
<html> <head> </head> <body> <pre>
|
<html> <head> </head> <body> <pre>
|
||||||
|
|
||||||
TRANSPORT(5) TRANSPORT(5)
|
TRANSPORT(5) TRANSPORT(5)
|
||||||
|
|
||||||
<b>NAME</b>
|
<b>NAME</b>
|
||||||
@ -47,6 +46,22 @@ TRANSPORT(5) TRANSPORT(5)
|
|||||||
line that starts with whitespace continues a logi-
|
line that starts with whitespace continues a logi-
|
||||||
cal line.
|
cal line.
|
||||||
|
|
||||||
|
In an indexed file, a pattern of `<b>*</b>' matches everything.
|
||||||
|
|
||||||
|
The <i>result</i> is of the form <i>transport</i><b>:</b><i>nexthop</i>. The <i>trans-</i>
|
||||||
|
<i>port</i> field specifies a mail delivery transport such as
|
||||||
|
<b>smtp</b> or <b>local</b>. The <i>nexthop</i> field specifies where and how
|
||||||
|
to deliver mail. A null <i>transport</i> or <i>nexthop</i> field means
|
||||||
|
"do not change": use the delivery transport and nexthop
|
||||||
|
information that would be used if no match were found.
|
||||||
|
|
||||||
|
The interpretation of the <i>nexthop</i> field is transport
|
||||||
|
dependent. In the case of SMTP, specify <i>host</i>:<i>service</i> for a
|
||||||
|
non-default server port, and use [<i>host</i>] or [<i>host</i>]:<i>port</i> in
|
||||||
|
order to disable MX (mail exchanger) DNS lookups. The []
|
||||||
|
form can also be used with IP addresses instead of host-
|
||||||
|
names.
|
||||||
|
|
||||||
With lookups from indexed files such as DB or DBM, or from
|
With lookups from indexed files such as DB or DBM, or from
|
||||||
networked tables such as NIS, LDAP or SQL, patterns are
|
networked tables such as NIS, LDAP or SQL, patterns are
|
||||||
tried in the order as listed below:
|
tried in the order as listed below:
|
||||||
@ -63,23 +78,19 @@ TRANSPORT(5) TRANSPORT(5)
|
|||||||
ting. Otherwise, a domain name matches itself and
|
ting. Otherwise, a domain name matches itself and
|
||||||
its subdomains.
|
its subdomains.
|
||||||
|
|
||||||
Note: transport map entries take precedence over domains
|
|
||||||
specified in the <b>mydestination</b> parameter. If you use the
|
|
||||||
optional transport map, it may be safer to specify
|
|
||||||
explicit entries for all domains specified in <b>mydestina-</b>
|
|
||||||
<b>tion</b>, for example:
|
|
||||||
|
|
||||||
<b>hostname.my.domain</b> <b>local:</b>
|
|
||||||
<b>localhost.my.domain</b> <b>local:</b>
|
|
||||||
|
|
||||||
The interpretation of the <i>nexthop</i> field is transport
|
|
||||||
dependent. In the case of SMTP, specify <i>host</i>:<i>service</i> for a
|
|
||||||
non-default server port, and use [<i>host</i>] or [<i>host</i>]:<i>port</i> in
|
|
||||||
order to disable MX (mail exchanger) DNS lookups. The []
|
|
||||||
form can also be used with IP addresses instead of host-
|
|
||||||
names.
|
|
||||||
|
|
||||||
<b>EXAMPLES</b>
|
<b>EXAMPLES</b>
|
||||||
|
In order to deliver internal mail directly, while using a
|
||||||
|
mail relay for all other mail, specify a null entry for
|
||||||
|
internal destinations (do not change the delivery trans-
|
||||||
|
port or the nexthop information) and specify a wildcard
|
||||||
|
for all other destinations. Note that for this trick to
|
||||||
|
work you should not specify a <b>relayhost</b> in the <b>main.cf</b>
|
||||||
|
file.
|
||||||
|
|
||||||
|
<b>my.domain</b> <b>:</b>
|
||||||
|
<b>.my.domain</b> <b>:</b>
|
||||||
|
<b>*</b> <b>smtp:outbound-relay.my.domain</b>
|
||||||
|
|
||||||
In order to send mail for <b>foo.org</b> and its subdomains via
|
In order to send mail for <b>foo.org</b> and its subdomains via
|
||||||
the <b>uucp</b> transport to the UUCP host named <b>foo</b>:
|
the <b>uucp</b> transport to the UUCP host named <b>foo</b>:
|
||||||
|
|
||||||
@ -95,10 +106,11 @@ TRANSPORT(5) TRANSPORT(5)
|
|||||||
|
|
||||||
<b>foo.org</b> <b>slow:</b>
|
<b>foo.org</b> <b>slow:</b>
|
||||||
|
|
||||||
When no <i>transport</i> is specified, the default transport is
|
When no <i>transport</i> is specified, Postfix uses either
|
||||||
used, as specified via the <b>default</b><i>_</i><b>transport</b> configuration
|
<b>$local</b><i>_</i><b>transport</b> or <b>$default</b><i>_</i><b>transport</b>, depending on
|
||||||
parameter. The following sends all mail for <b>foo.org</b> and
|
whether the destination matches <b>$mydestination</b>. The fol-
|
||||||
its subdomains to host <b>gateway.foo.org</b>:
|
lowing sends all mail for <b>foo.org</b> and its subdomains to
|
||||||
|
host <b>gateway.foo.org</b>:
|
||||||
|
|
||||||
<b>foo.org</b> <b>:[gateway.foo.org]</b>
|
<b>foo.org</b> <b>:[gateway.foo.org]</b>
|
||||||
<b>.foo.org</b> <b>:[gateway.foo.org]</b>
|
<b>.foo.org</b> <b>:[gateway.foo.org]</b>
|
||||||
@ -159,13 +171,23 @@ TRANSPORT(5) TRANSPORT(5)
|
|||||||
|
|
||||||
Other parameters of interest:
|
Other parameters of interest:
|
||||||
|
|
||||||
|
<b>local</b><i>_</i><b>transport</b>
|
||||||
|
The mail delivery transport to use when no trans-
|
||||||
|
port is explicitly specified, and the destination
|
||||||
|
matches <b>$mydestination</b>.
|
||||||
|
|
||||||
<b>default</b><i>_</i><b>transport</b>
|
<b>default</b><i>_</i><b>transport</b>
|
||||||
The transport to use when no transport is explic-
|
The mail delivery transport to use when no trans-
|
||||||
itly specified.
|
port is explicitly specified, and the destination
|
||||||
|
does not match <b>$mydestination</b>.
|
||||||
|
|
||||||
|
<b>mydestination</b>
|
||||||
|
The destinations that are given to <b>$local</b><i>_</i><b>transport</b>
|
||||||
|
by default.
|
||||||
|
|
||||||
<b>relayhost</b>
|
<b>relayhost</b>
|
||||||
The default host to send to when no transport table
|
The default host for destinations that do not match
|
||||||
entry matches.
|
<b>$mydestination</b>.
|
||||||
|
|
||||||
<b>SEE</b> <b>ALSO</b>
|
<b>SEE</b> <b>ALSO</b>
|
||||||
<a href="postmap.1.html">postmap(1)</a> create mapping table
|
<a href="postmap.1.html">postmap(1)</a> create mapping table
|
||||||
@ -183,6 +205,5 @@ TRANSPORT(5) TRANSPORT(5)
|
|||||||
P.O. Box 704
|
P.O. Box 704
|
||||||
Yorktown Heights, NY 10598, USA
|
Yorktown Heights, NY 10598, USA
|
||||||
|
|
||||||
1
|
TRANSPORT(5)
|
||||||
|
|
||||||
</pre> </body> </html>
|
</pre> </body> </html>
|
||||||
|
@ -128,6 +128,12 @@ and for default values.
|
|||||||
.IP \fBdatabase_type\fR
|
.IP \fBdatabase_type\fR
|
||||||
Default alias database type. On many UNIX systems, the default type
|
Default alias database type. On many UNIX systems, the default type
|
||||||
is either \fBdbm\fR or \fBhash\fR.
|
is either \fBdbm\fR or \fBhash\fR.
|
||||||
|
.IP \fBberkeley_db_create_buffer_size\fR
|
||||||
|
Amount of buffer memory to be used when creating a Berkeley DB
|
||||||
|
\fBhash\fR or \fBbtree\fR lookup table.
|
||||||
|
.IP \fBberkeley_db_read_buffer_size\fR
|
||||||
|
Amount of buffer memory to be used when reading a Berkeley DB
|
||||||
|
\fBhash\fR or \fBbtree\fR lookup table.
|
||||||
.SH STANDARDS
|
.SH STANDARDS
|
||||||
.na
|
.na
|
||||||
.nf
|
.nf
|
||||||
|
@ -146,6 +146,12 @@ Enable verbose logging for debugging purposes.
|
|||||||
Default output database type.
|
Default output database type.
|
||||||
On many UNIX systems, the default database type is either \fBhash\fR
|
On many UNIX systems, the default database type is either \fBhash\fR
|
||||||
or \fBdbm\fR.
|
or \fBdbm\fR.
|
||||||
|
.IP \fBberkeley_db_create_buffer_size\fR
|
||||||
|
Amount of buffer memory to be used when creating a Berkeley DB
|
||||||
|
\fBhash\fR or \fBbtree\fR lookup table.
|
||||||
|
.IP \fBberkeley_db_read_buffer_size\fR
|
||||||
|
Amount of buffer memory to be used when reading a Berkeley DB
|
||||||
|
\fBhash\fR or \fBbtree\fR lookup table.
|
||||||
.SH LICENSE
|
.SH LICENSE
|
||||||
.na
|
.na
|
||||||
.nf
|
.nf
|
||||||
|
@ -45,6 +45,22 @@ are lines whose first non-whitespace character is a `#'.
|
|||||||
A logical line starts with non-whitespace text. A line that
|
A logical line starts with non-whitespace text. A line that
|
||||||
starts with whitespace continues a logical line.
|
starts with whitespace continues a logical line.
|
||||||
.PP
|
.PP
|
||||||
|
In an indexed file, a pattern of `\fB*\fR' matches everything.
|
||||||
|
.PP
|
||||||
|
The \fIresult\fR is of the form \fItransport\fB:\fInexthop\fR.
|
||||||
|
The \fItransport\fR field specifies a mail delivery transport
|
||||||
|
such as \fBsmtp\fR or \fBlocal\fR. The \fInexthop\fR field
|
||||||
|
specifies where and how to deliver mail. A null \fItransport\fR
|
||||||
|
or \fInexthop\fR field means "do not change": use the delivery
|
||||||
|
transport and nexthop information that would be used if no
|
||||||
|
match were found.
|
||||||
|
.PP
|
||||||
|
The interpretation of the \fInexthop\fR field is transport
|
||||||
|
dependent. In the case of SMTP, specify \fIhost\fR:\fIservice\fR for a
|
||||||
|
non-default server port, and use [\fIhost\fR] or [\fIhost\fR]:\fIport\fR
|
||||||
|
in order to disable MX (mail exchanger) DNS lookups. The [] form
|
||||||
|
can also be used with IP addresses instead of hostnames.
|
||||||
|
.PP
|
||||||
With lookups from indexed files such as DB or DBM, or from networked
|
With lookups from indexed files such as DB or DBM, or from networked
|
||||||
tables such as NIS, LDAP or SQL, patterns are tried in the order as
|
tables such as NIS, LDAP or SQL, patterns are tried in the order as
|
||||||
listed below:
|
listed below:
|
||||||
@ -57,28 +73,25 @@ Mail for any subdomain of \fIdomain\fR is delivered through
|
|||||||
string \fBtransport_maps\fR is not listed in the
|
string \fBtransport_maps\fR is not listed in the
|
||||||
\fBparent_domain_matches_subdomains\fR configuration setting.
|
\fBparent_domain_matches_subdomains\fR configuration setting.
|
||||||
Otherwise, a domain name matches itself and its subdomains.
|
Otherwise, a domain name matches itself and its subdomains.
|
||||||
.PP
|
|
||||||
Note: transport map entries take precedence over domains
|
|
||||||
specified in the \fBmydestination\fR parameter. If you use
|
|
||||||
the optional transport map, it may be safer to specify explicit
|
|
||||||
entries for all domains specified in \fBmydestination\fR,
|
|
||||||
for example:
|
|
||||||
|
|
||||||
.ti +5
|
|
||||||
\fBhostname.my.domain local:\fR
|
|
||||||
.ti +5
|
|
||||||
\fBlocalhost.my.domain local:\fR
|
|
||||||
|
|
||||||
The interpretation of the \fInexthop\fR field is transport
|
|
||||||
dependent. In the case of SMTP, specify \fIhost\fR:\fIservice\fR for a
|
|
||||||
non-default server port, and use [\fIhost\fR] or [\fIhost\fR]:\fIport\fR
|
|
||||||
in order to disable MX (mail exchanger) DNS lookups. The [] form
|
|
||||||
can also be used with IP addresses instead of hostnames.
|
|
||||||
.SH EXAMPLES
|
.SH EXAMPLES
|
||||||
.na
|
.na
|
||||||
.nf
|
.nf
|
||||||
.ad
|
.ad
|
||||||
.fi
|
.fi
|
||||||
|
In order to deliver internal mail directly, while using a
|
||||||
|
mail relay for all other mail, specify a null entry for
|
||||||
|
internal destinations (do not change the delivery transport or
|
||||||
|
the nexthop information) and specify a wildcard for all other
|
||||||
|
destinations. Note that for this trick to work you should
|
||||||
|
not specify a \fBrelayhost\fR in the \fBmain.cf\fR file.
|
||||||
|
|
||||||
|
.ti +5
|
||||||
|
\fB\&my.domain :\fR
|
||||||
|
.ti +5
|
||||||
|
\fB\&.my.domain :\fR
|
||||||
|
.ti +5
|
||||||
|
\fB* smtp:outbound-relay.my.domain\fR
|
||||||
|
|
||||||
In order to send mail for \fBfoo.org\fR and its subdomains
|
In order to send mail for \fBfoo.org\fR and its subdomains
|
||||||
via the \fBuucp\fR transport to the UUCP host named \fBfoo\fR:
|
via the \fBuucp\fR transport to the UUCP host named \fBfoo\fR:
|
||||||
|
|
||||||
@ -96,9 +109,10 @@ something that runs at most one delivery process at a time:
|
|||||||
.ti +5
|
.ti +5
|
||||||
\fBfoo.org slow:\fR
|
\fBfoo.org slow:\fR
|
||||||
|
|
||||||
When no \fItransport\fR is specified, the default transport is
|
When no \fItransport\fR is specified, Postfix uses either
|
||||||
used, as specified via the \fBdefault_transport\fR configuration
|
\fB$local_transport\fR or \fB$default_transport\fR, depending
|
||||||
parameter. The following sends all mail for \fBfoo.org\fR and its
|
on whether the destination matches \fB$mydestination\fR.
|
||||||
|
The following sends all mail for \fBfoo.org\fR and its
|
||||||
subdomains to host \fBgateway.foo.org\fR:
|
subdomains to host \fBgateway.foo.org\fR:
|
||||||
|
|
||||||
.ti +5
|
.ti +5
|
||||||
@ -163,10 +177,18 @@ requiring \fI.domain.name\fR patterns).
|
|||||||
List of transport lookup tables.
|
List of transport lookup tables.
|
||||||
.PP
|
.PP
|
||||||
Other parameters of interest:
|
Other parameters of interest:
|
||||||
|
.IP \fBlocal_transport\fR
|
||||||
|
The mail delivery transport to use when no transport is explicitly
|
||||||
|
specified, and the destination matches \fB$mydestination\fR.
|
||||||
.IP \fBdefault_transport\fR
|
.IP \fBdefault_transport\fR
|
||||||
The transport to use when no transport is explicitly specified.
|
The mail delivery transport to use when no transport is explicitly
|
||||||
|
specified, and the destination does not match \fB$mydestination\fR.
|
||||||
|
.IP \fBmydestination\fR
|
||||||
|
The destinations that are given to \fB$local_transport\fR
|
||||||
|
by default.
|
||||||
.IP \fBrelayhost\fR
|
.IP \fBrelayhost\fR
|
||||||
The default host to send to when no transport table entry matches.
|
The default host for destinations that do not match
|
||||||
|
\fB$mydestination\fR.
|
||||||
.SH SEE ALSO
|
.SH SEE ALSO
|
||||||
.na
|
.na
|
||||||
.nf
|
.nf
|
||||||
|
@ -37,6 +37,22 @@
|
|||||||
# A logical line starts with non-whitespace text. A line that
|
# A logical line starts with non-whitespace text. A line that
|
||||||
# starts with whitespace continues a logical line.
|
# starts with whitespace continues a logical line.
|
||||||
# .PP
|
# .PP
|
||||||
|
# In an indexed file, a pattern of `\fB*\fR' matches everything.
|
||||||
|
# .PP
|
||||||
|
# The \fIresult\fR is of the form \fItransport\fB:\fInexthop\fR.
|
||||||
|
# The \fItransport\fR field specifies a mail delivery transport
|
||||||
|
# such as \fBsmtp\fR or \fBlocal\fR. The \fInexthop\fR field
|
||||||
|
# specifies where and how to deliver mail. A null \fItransport\fR
|
||||||
|
# or \fInexthop\fR field means "do not change": use the delivery
|
||||||
|
# transport and nexthop information that would be used if no
|
||||||
|
# match were found.
|
||||||
|
# .PP
|
||||||
|
# The interpretation of the \fInexthop\fR field is transport
|
||||||
|
# dependent. In the case of SMTP, specify \fIhost\fR:\fIservice\fR for a
|
||||||
|
# non-default server port, and use [\fIhost\fR] or [\fIhost\fR]:\fIport\fR
|
||||||
|
# in order to disable MX (mail exchanger) DNS lookups. The [] form
|
||||||
|
# can also be used with IP addresses instead of hostnames.
|
||||||
|
# .PP
|
||||||
# With lookups from indexed files such as DB or DBM, or from networked
|
# With lookups from indexed files such as DB or DBM, or from networked
|
||||||
# tables such as NIS, LDAP or SQL, patterns are tried in the order as
|
# tables such as NIS, LDAP or SQL, patterns are tried in the order as
|
||||||
# listed below:
|
# listed below:
|
||||||
@ -49,26 +65,23 @@
|
|||||||
# string \fBtransport_maps\fR is not listed in the
|
# string \fBtransport_maps\fR is not listed in the
|
||||||
# \fBparent_domain_matches_subdomains\fR configuration setting.
|
# \fBparent_domain_matches_subdomains\fR configuration setting.
|
||||||
# Otherwise, a domain name matches itself and its subdomains.
|
# Otherwise, a domain name matches itself and its subdomains.
|
||||||
# .PP
|
|
||||||
# Note: transport map entries take precedence over domains
|
|
||||||
# specified in the \fBmydestination\fR parameter. If you use
|
|
||||||
# the optional transport map, it may be safer to specify explicit
|
|
||||||
# entries for all domains specified in \fBmydestination\fR,
|
|
||||||
# for example:
|
|
||||||
#
|
|
||||||
# .ti +5
|
|
||||||
# \fBhostname.my.domain local:\fR
|
|
||||||
# .ti +5
|
|
||||||
# \fBlocalhost.my.domain local:\fR
|
|
||||||
#
|
|
||||||
# The interpretation of the \fInexthop\fR field is transport
|
|
||||||
# dependent. In the case of SMTP, specify \fIhost\fR:\fIservice\fR for a
|
|
||||||
# non-default server port, and use [\fIhost\fR] or [\fIhost\fR]:\fIport\fR
|
|
||||||
# in order to disable MX (mail exchanger) DNS lookups. The [] form
|
|
||||||
# can also be used with IP addresses instead of hostnames.
|
|
||||||
# EXAMPLES
|
# EXAMPLES
|
||||||
# .ad
|
# .ad
|
||||||
# .fi
|
# .fi
|
||||||
|
# In order to deliver internal mail directly, while using a
|
||||||
|
# mail relay for all other mail, specify a null entry for
|
||||||
|
# internal destinations (do not change the delivery transport or
|
||||||
|
# the nexthop information) and specify a wildcard for all other
|
||||||
|
# destinations. Note that for this trick to work you should
|
||||||
|
# not specify a \fBrelayhost\fR in the \fBmain.cf\fR file.
|
||||||
|
#
|
||||||
|
# .ti +5
|
||||||
|
# \fB\&my.domain :\fR
|
||||||
|
# .ti +5
|
||||||
|
# \fB\&.my.domain :\fR
|
||||||
|
# .ti +5
|
||||||
|
# \fB* smtp:outbound-relay.my.domain\fR
|
||||||
|
#
|
||||||
# In order to send mail for \fBfoo.org\fR and its subdomains
|
# In order to send mail for \fBfoo.org\fR and its subdomains
|
||||||
# via the \fBuucp\fR transport to the UUCP host named \fBfoo\fR:
|
# via the \fBuucp\fR transport to the UUCP host named \fBfoo\fR:
|
||||||
#
|
#
|
||||||
@ -86,9 +99,10 @@
|
|||||||
# .ti +5
|
# .ti +5
|
||||||
# \fBfoo.org slow:\fR
|
# \fBfoo.org slow:\fR
|
||||||
#
|
#
|
||||||
# When no \fItransport\fR is specified, the default transport is
|
# When no \fItransport\fR is specified, Postfix uses either
|
||||||
# used, as specified via the \fBdefault_transport\fR configuration
|
# \fB$local_transport\fR or \fB$default_transport\fR, depending
|
||||||
# parameter. The following sends all mail for \fBfoo.org\fR and its
|
# on whether the destination matches \fB$mydestination\fR.
|
||||||
|
# The following sends all mail for \fBfoo.org\fR and its
|
||||||
# subdomains to host \fBgateway.foo.org\fR:
|
# subdomains to host \fBgateway.foo.org\fR:
|
||||||
#
|
#
|
||||||
# .ti +5
|
# .ti +5
|
||||||
@ -149,10 +163,18 @@
|
|||||||
# List of transport lookup tables.
|
# List of transport lookup tables.
|
||||||
# .PP
|
# .PP
|
||||||
# Other parameters of interest:
|
# Other parameters of interest:
|
||||||
|
# .IP \fBlocal_transport\fR
|
||||||
|
# The mail delivery transport to use when no transport is explicitly
|
||||||
|
# specified, and the destination matches \fB$mydestination\fR.
|
||||||
# .IP \fBdefault_transport\fR
|
# .IP \fBdefault_transport\fR
|
||||||
# The transport to use when no transport is explicitly specified.
|
# The mail delivery transport to use when no transport is explicitly
|
||||||
|
# specified, and the destination does not match \fB$mydestination\fR.
|
||||||
|
# .IP \fBmydestination\fR
|
||||||
|
# The destinations that are given to \fB$local_transport\fR
|
||||||
|
# by default.
|
||||||
# .IP \fBrelayhost\fR
|
# .IP \fBrelayhost\fR
|
||||||
# The default host to send to when no transport table entry matches.
|
# The default host for destinations that do not match
|
||||||
|
# \fB$mydestination\fR.
|
||||||
# SEE ALSO
|
# SEE ALSO
|
||||||
# postmap(1) create mapping table
|
# postmap(1) create mapping table
|
||||||
# trivial-rewrite(8) rewrite and resolve addresses
|
# trivial-rewrite(8) rewrite and resolve addresses
|
||||||
|
@ -85,6 +85,8 @@
|
|||||||
/* char *var_showq_service;
|
/* char *var_showq_service;
|
||||||
/* char *var_error_service;
|
/* char *var_error_service;
|
||||||
/* char *var_flush_service;
|
/* char *var_flush_service;
|
||||||
|
/* int var_db_create_buf;
|
||||||
|
/* int var_db_read_buf;
|
||||||
/*
|
/*
|
||||||
/* void mail_params_init()
|
/* void mail_params_init()
|
||||||
/* DESCRIPTION
|
/* DESCRIPTION
|
||||||
@ -131,6 +133,9 @@
|
|||||||
#include <valid_hostname.h>
|
#include <valid_hostname.h>
|
||||||
#include <stringops.h>
|
#include <stringops.h>
|
||||||
#include <safe.h>
|
#include <safe.h>
|
||||||
|
#ifdef HAS_DB
|
||||||
|
#include <dict_db.h>
|
||||||
|
#endif
|
||||||
|
|
||||||
/* Global library. */
|
/* Global library. */
|
||||||
|
|
||||||
@ -223,6 +228,8 @@ char *var_rewrite_service;
|
|||||||
char *var_showq_service;
|
char *var_showq_service;
|
||||||
char *var_error_service;
|
char *var_error_service;
|
||||||
char *var_flush_service;
|
char *var_flush_service;
|
||||||
|
int var_db_create_buf;
|
||||||
|
int var_db_read_buf;
|
||||||
|
|
||||||
#define MAIN_CONF_FILE "main.cf"
|
#define MAIN_CONF_FILE "main.cf"
|
||||||
|
|
||||||
@ -456,6 +463,8 @@ void mail_params_init()
|
|||||||
VAR_FLOCK_TRIES, DEF_FLOCK_TRIES, &var_flock_tries, 1, 0,
|
VAR_FLOCK_TRIES, DEF_FLOCK_TRIES, &var_flock_tries, 1, 0,
|
||||||
VAR_DEBUG_PEER_LEVEL, DEF_DEBUG_PEER_LEVEL, &var_debug_peer_level, 1, 0,
|
VAR_DEBUG_PEER_LEVEL, DEF_DEBUG_PEER_LEVEL, &var_debug_peer_level, 1, 0,
|
||||||
VAR_FAULT_INJ_CODE, DEF_FAULT_INJ_CODE, &var_fault_inj_code, 0, 0,
|
VAR_FAULT_INJ_CODE, DEF_FAULT_INJ_CODE, &var_fault_inj_code, 0, 0,
|
||||||
|
VAR_DB_CREATE_BUF, DEF_DB_CREATE_BUF, &var_db_create_buf, 1, 0,
|
||||||
|
VAR_DB_READ_BUF, DEF_DB_READ_BUF, &var_db_read_buf, 1, 0,
|
||||||
0,
|
0,
|
||||||
};
|
};
|
||||||
static CONFIG_TIME_TABLE time_defaults[] = {
|
static CONFIG_TIME_TABLE time_defaults[] = {
|
||||||
@ -515,6 +524,9 @@ void mail_params_init()
|
|||||||
check_mail_owner();
|
check_mail_owner();
|
||||||
check_sgid_group();
|
check_sgid_group();
|
||||||
check_overlap();
|
check_overlap();
|
||||||
|
#ifdef HAS_DB
|
||||||
|
dict_db_mpool_size = var_db_read_buf;
|
||||||
|
#endif
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Variables whose defaults are determined at runtime, after other
|
* Variables whose defaults are determined at runtime, after other
|
||||||
|
@ -1475,6 +1475,17 @@ extern char *var_mbx_defer_errs;
|
|||||||
#define DEF_MDR_DEFER_ERRS "enospc, estale"
|
#define DEF_MDR_DEFER_ERRS "enospc, estale"
|
||||||
extern char *var_mdr_defer_errs;
|
extern char *var_mdr_defer_errs;
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Berkeley DB memory pool sizes.
|
||||||
|
*/
|
||||||
|
#define VAR_DB_CREATE_BUF "berkeley_db_create_buffer_size"
|
||||||
|
#define DEF_DB_CREATE_BUF (16 * 1024 *1024)
|
||||||
|
extern int var_db_create_buf;
|
||||||
|
|
||||||
|
#define VAR_DB_READ_BUF "berkeley_db_read_buffer_size"
|
||||||
|
#define DEF_DB_READ_BUF (256 *1024)
|
||||||
|
extern int var_db_read_buf;
|
||||||
|
|
||||||
/* LICENSE
|
/* LICENSE
|
||||||
/* .ad
|
/* .ad
|
||||||
/* .fi
|
/* .fi
|
||||||
|
@ -20,10 +20,10 @@
|
|||||||
* Patches change the patchlevel and the release date. Snapshots change the
|
* Patches change the patchlevel and the release date. Snapshots change the
|
||||||
* release date only, unless they include the same bugfix as a patch release.
|
* release date only, unless they include the same bugfix as a patch release.
|
||||||
*/
|
*/
|
||||||
#define MAIL_RELEASE_DATE "20020501"
|
#define MAIL_RELEASE_DATE "20020505"
|
||||||
|
|
||||||
#define VAR_MAIL_VERSION "mail_version"
|
#define VAR_MAIL_VERSION "mail_version"
|
||||||
#define DEF_MAIL_VERSION "1.1.7-" MAIL_RELEASE_DATE
|
#define DEF_MAIL_VERSION "1.1.8-" MAIL_RELEASE_DATE
|
||||||
extern char *var_mail_version;
|
extern char *var_mail_version;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
@ -37,10 +37,6 @@
|
|||||||
|
|
||||||
#include <sys_defs.h>
|
#include <sys_defs.h>
|
||||||
|
|
||||||
/* Global library. */
|
|
||||||
|
|
||||||
#include "mail_conf.h"
|
|
||||||
|
|
||||||
/* Utility library. */
|
/* Utility library. */
|
||||||
|
|
||||||
#include <msg.h>
|
#include <msg.h>
|
||||||
@ -49,6 +45,10 @@
|
|||||||
#include <dict.h>
|
#include <dict.h>
|
||||||
#include <dict_db.h>
|
#include <dict_db.h>
|
||||||
|
|
||||||
|
/* Global library. */
|
||||||
|
|
||||||
|
#include <mail_params.h>
|
||||||
|
|
||||||
/* Application-specific. */
|
/* Application-specific. */
|
||||||
|
|
||||||
#include "mkmap.h"
|
#include "mkmap.h"
|
||||||
@ -62,30 +62,29 @@
|
|||||||
|
|
||||||
/* mkmap_db_open - create or open database */
|
/* mkmap_db_open - create or open database */
|
||||||
|
|
||||||
/*
|
|
||||||
* db_mpool_size" is defined in util/dict_db.c and defaults to 256K,
|
|
||||||
* which works well for the lookup code.
|
|
||||||
*
|
|
||||||
* We use a larger memory pool when building ".db" files.
|
|
||||||
* For "hash" files performance degrades rapidly unless the memory pool
|
|
||||||
* is O(file size).
|
|
||||||
*
|
|
||||||
* For "btree" files peformance is good with sorted input even for small
|
|
||||||
* memory pools, but with random input degrades rapidly unless the memory
|
|
||||||
* pool is O(file size).
|
|
||||||
*/
|
|
||||||
extern int db_mpool_size;
|
|
||||||
|
|
||||||
#define VAR_MPOOL_SIZE "db_mkmap_mpool_size"
|
|
||||||
#define DEF_MPOOL_SIZE 16777216 /* 16MB */
|
|
||||||
|
|
||||||
static MKMAP *mkmap_db_open(const char *path,
|
static MKMAP *mkmap_db_open(const char *path,
|
||||||
DICT *(*db_open) (const char *, int, int))
|
DICT *(*db_open) (const char *, int, int))
|
||||||
{
|
{
|
||||||
MKMAP *mkmap = (MKMAP *) mymalloc(sizeof(*mkmap));
|
MKMAP *mkmap = (MKMAP *) mymalloc(sizeof(*mkmap));
|
||||||
|
|
||||||
/* Override default mpool size for map rebuilds */
|
/*
|
||||||
db_mpool_size = get_mail_conf_int(VAR_MPOOL_SIZE, DEF_MPOOL_SIZE, 0, 0);
|
* Override the default mpool size for map (re)builds.
|
||||||
|
*
|
||||||
|
* db_mpool_size" is defined in util/dict_db.c and defaults to 256K, which
|
||||||
|
* works well for the lookup code.
|
||||||
|
*
|
||||||
|
* We use a larger memory pool when building ".db" files. For "hash" files
|
||||||
|
* performance degrades rapidly unless the memory pool is O(file size).
|
||||||
|
*
|
||||||
|
* For "btree" files peformance is good with sorted input even for small
|
||||||
|
* memory pools, but with random input degrades rapidly unless the memory
|
||||||
|
* pool is O(file size).
|
||||||
|
*
|
||||||
|
* XXX This should be specified via the DICT interface so that the buffer
|
||||||
|
* size becomes an object property, instead of being specified by poking
|
||||||
|
* a global variable so that it becomes a class property.
|
||||||
|
*/
|
||||||
|
dict_db_mpool_size = var_db_create_buf;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Fill in the generic members.
|
* Fill in the generic members.
|
||||||
|
@ -572,21 +572,21 @@ static void get_service_attr(PIPE_ATTR *attr, char **argv)
|
|||||||
case 'B':
|
case 'B':
|
||||||
attr->flags |= MAIL_COPY_BLANK;
|
attr->flags |= MAIL_COPY_BLANK;
|
||||||
break;
|
break;
|
||||||
|
case 'D':
|
||||||
|
attr->flags |= MAIL_COPY_DELIVERED;
|
||||||
|
break;
|
||||||
case 'F':
|
case 'F':
|
||||||
attr->flags |= MAIL_COPY_FROM;
|
attr->flags |= MAIL_COPY_FROM;
|
||||||
break;
|
break;
|
||||||
|
case 'R':
|
||||||
|
attr->flags |= MAIL_COPY_RETURN_PATH;
|
||||||
|
break;
|
||||||
case '.':
|
case '.':
|
||||||
attr->flags |= MAIL_COPY_DOT;
|
attr->flags |= MAIL_COPY_DOT;
|
||||||
break;
|
break;
|
||||||
case '>':
|
case '>':
|
||||||
attr->flags |= MAIL_COPY_QUOTE;
|
attr->flags |= MAIL_COPY_QUOTE;
|
||||||
break;
|
break;
|
||||||
case 'R':
|
|
||||||
attr->flags |= MAIL_COPY_RETURN_PATH;
|
|
||||||
break;
|
|
||||||
case 'D':
|
|
||||||
attr->flags |= MAIL_COPY_DELIVERED;
|
|
||||||
break;
|
|
||||||
case 'h':
|
case 'h':
|
||||||
attr->flags |= PIPE_OPT_FOLD_HOST;
|
attr->flags |= PIPE_OPT_FOLD_HOST;
|
||||||
break;
|
break;
|
||||||
|
@ -116,6 +116,12 @@
|
|||||||
/* .IP \fBdatabase_type\fR
|
/* .IP \fBdatabase_type\fR
|
||||||
/* Default alias database type. On many UNIX systems, the default type
|
/* Default alias database type. On many UNIX systems, the default type
|
||||||
/* is either \fBdbm\fR or \fBhash\fR.
|
/* is either \fBdbm\fR or \fBhash\fR.
|
||||||
|
/* .IP \fBberkeley_db_create_buffer_size\fR
|
||||||
|
/* Amount of buffer memory to be used when creating a Berkeley DB
|
||||||
|
/* \fBhash\fR or \fBbtree\fR lookup table.
|
||||||
|
/* .IP \fBberkeley_db_read_buffer_size\fR
|
||||||
|
/* Amount of buffer memory to be used when reading a Berkeley DB
|
||||||
|
/* \fBhash\fR or \fBbtree\fR lookup table.
|
||||||
/* STANDARDS
|
/* STANDARDS
|
||||||
/* RFC 822 (ARPA Internet Text Messages)
|
/* RFC 822 (ARPA Internet Text Messages)
|
||||||
/* SEE ALSO
|
/* SEE ALSO
|
||||||
|
@ -134,6 +134,12 @@
|
|||||||
/* Default output database type.
|
/* Default output database type.
|
||||||
/* On many UNIX systems, the default database type is either \fBhash\fR
|
/* On many UNIX systems, the default database type is either \fBhash\fR
|
||||||
/* or \fBdbm\fR.
|
/* or \fBdbm\fR.
|
||||||
|
/* .IP \fBberkeley_db_create_buffer_size\fR
|
||||||
|
/* Amount of buffer memory to be used when creating a Berkeley DB
|
||||||
|
/* \fBhash\fR or \fBbtree\fR lookup table.
|
||||||
|
/* .IP \fBberkeley_db_read_buffer_size\fR
|
||||||
|
/* Amount of buffer memory to be used when reading a Berkeley DB
|
||||||
|
/* \fBhash\fR or \fBbtree\fR lookup table.
|
||||||
/* LICENSE
|
/* LICENSE
|
||||||
/* .ad
|
/* .ad
|
||||||
/* .fi
|
/* .fi
|
||||||
|
@ -188,7 +188,7 @@ static void show_queue(void)
|
|||||||
* Don't assume that the mail system is down when the user has
|
* Don't assume that the mail system is down when the user has
|
||||||
* insufficient permission to access the showq socket.
|
* insufficient permission to access the showq socket.
|
||||||
*/
|
*/
|
||||||
else if (errno != ECONNREFUSED && errno != ENOENT) {
|
else if (errno == EACCES) {
|
||||||
msg_fatal_status(EX_SOFTWARE,
|
msg_fatal_status(EX_SOFTWARE,
|
||||||
"Connect to the %s %s service: %m",
|
"Connect to the %s %s service: %m",
|
||||||
var_mail_name, var_showq_service);
|
var_mail_name, var_showq_service);
|
||||||
|
@ -188,24 +188,12 @@ void resolve_addr(char *addr, VSTRING *channel, VSTRING *nexthop,
|
|||||||
}
|
}
|
||||||
tok822_internalize(nextrcpt, tree, TOK822_STR_DEFL);
|
tok822_internalize(nextrcpt, tree, TOK822_STR_DEFL);
|
||||||
|
|
||||||
/*
|
|
||||||
* The transport map overrides any transport and next-hop host info that
|
|
||||||
* is set up below. For a long time, it was not possible to override
|
|
||||||
* routing of mail that resolves locally, because Postfix used a
|
|
||||||
* zero-length next-hop hostname result to indicate local delivery, and
|
|
||||||
* transport maps cannot return zero-length hostnames.
|
|
||||||
*/
|
|
||||||
if (*var_transport_maps
|
|
||||||
&& transport_lookup(strrchr(STR(nextrcpt), '@') + 1, channel, nexthop)) {
|
|
||||||
/* void */ ;
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Non-local delivery, presumably. Set up the default remote transport
|
* Non-local delivery, presumably. Set up the default remote transport
|
||||||
* specified with var_def_transport. Use the destination's mail exchanger
|
* specified with var_def_transport. Use the destination's mail exchanger
|
||||||
* unless a default mail relay is specified with var_relayhost.
|
* unless a default mail relay is specified with var_relayhost.
|
||||||
*/
|
*/
|
||||||
else if (domain != 0) {
|
if (domain != 0) {
|
||||||
vstring_strcpy(channel, var_def_transport);
|
vstring_strcpy(channel, var_def_transport);
|
||||||
if ((destination = split_at(STR(channel), ':')) != 0 && *destination)
|
if ((destination = split_at(STR(channel), ':')) != 0 && *destination)
|
||||||
vstring_strcpy(nexthop, destination);
|
vstring_strcpy(nexthop, destination);
|
||||||
@ -235,6 +223,16 @@ void resolve_addr(char *addr, VSTRING *channel, VSTRING *nexthop,
|
|||||||
if (*STR(nexthop) == 0)
|
if (*STR(nexthop) == 0)
|
||||||
msg_panic("%s: null nexthop", myname);
|
msg_panic("%s: null nexthop", myname);
|
||||||
|
|
||||||
|
/*
|
||||||
|
* The transport map overrides any transport and next-hop host info that
|
||||||
|
* is set up above. For a long time, it was not possible to override
|
||||||
|
* routing of mail that resolves locally, because Postfix used a
|
||||||
|
* zero-length next-hop hostname result to indicate local delivery, and
|
||||||
|
* transport maps cannot return zero-length hostnames.
|
||||||
|
*/
|
||||||
|
if (*var_transport_maps)
|
||||||
|
transport_lookup(strrchr(STR(nextrcpt), '@') + 1, channel, nexthop);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Clean up.
|
* Clean up.
|
||||||
*/
|
*/
|
||||||
|
@ -85,17 +85,22 @@ void transport_init(void)
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* transport_wildcard_init - post-jail initialization */
|
||||||
|
|
||||||
void transport_wildcard_init(void)
|
void transport_wildcard_init(void)
|
||||||
{
|
{
|
||||||
wildcard_channel = vstring_alloc(10);
|
wildcard_channel = vstring_alloc(10);
|
||||||
wildcard_nexthop = vstring_alloc(10);
|
wildcard_nexthop = vstring_alloc(10);
|
||||||
if (!transport_lookup("*", wildcard_channel, wildcard_nexthop)) {
|
|
||||||
vstring_free(wildcard_channel);
|
if (transport_lookup("*", wildcard_channel, wildcard_nexthop)) {
|
||||||
vstring_free(wildcard_nexthop);
|
if (msg_verbose)
|
||||||
}
|
msg_info("wildcard_{chan:hop}={%s:%s}",
|
||||||
if (msg_verbose) {
|
|
||||||
msg_info("wildcard_{chan,hop}={%s %s}",
|
|
||||||
vstring_str(wildcard_channel), vstring_str(wildcard_nexthop));
|
vstring_str(wildcard_channel), vstring_str(wildcard_nexthop));
|
||||||
|
} else {
|
||||||
|
vstring_free(wildcard_channel);
|
||||||
|
wildcard_channel = 0;
|
||||||
|
vstring_free(wildcard_nexthop);
|
||||||
|
wildcard_nexthop = 0;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -111,7 +116,6 @@ int transport_lookup(const char *domain, VSTRING *channel, VSTRING *nexthop)
|
|||||||
char *saved_value;
|
char *saved_value;
|
||||||
char *transport;
|
char *transport;
|
||||||
int found = 0;
|
int found = 0;
|
||||||
int null_found = 0;
|
|
||||||
|
|
||||||
#define FULL 0
|
#define FULL 0
|
||||||
#define PARTIAL DICT_FLAG_FIXED
|
#define PARTIAL DICT_FLAG_FIXED
|
||||||
@ -123,9 +127,12 @@ int transport_lookup(const char *domain, VSTRING *channel, VSTRING *nexthop)
|
|||||||
|
|
||||||
/*
|
/*
|
||||||
* Keep stripping domain components until nothing is left or until a
|
* Keep stripping domain components until nothing is left or until a
|
||||||
* matching entry is found. If a NULL entry (either no RHS, or ':'),
|
* matching entry is found.
|
||||||
* then pretend we got no match, and return. If we really got no match,
|
*
|
||||||
* then return the wildcard transport, if any.
|
* If the entry specifies no nexthop host and/or delivery channel, do not
|
||||||
|
* change caller-provided information.
|
||||||
|
*
|
||||||
|
* If we find no match, then return the wildcard entry, if any.
|
||||||
*
|
*
|
||||||
* After checking the full name, check for .upper.domain, to distinguish
|
* After checking the full name, check for .upper.domain, to distinguish
|
||||||
* between the upper domain and it's decendants, ala sendmail and tcp
|
* between the upper domain and it's decendants, ala sendmail and tcp
|
||||||
@ -140,22 +147,10 @@ int transport_lookup(const char *domain, VSTRING *channel, VSTRING *nexthop)
|
|||||||
for (name = low_domain; /* void */ ; name = next) {
|
for (name = low_domain; /* void */ ; name = next) {
|
||||||
if ((value = maps_find(transport_path, name, maps_flag)) != 0) {
|
if ((value = maps_find(transport_path, name, maps_flag)) != 0) {
|
||||||
saved_value = mystrdup(value);
|
saved_value = mystrdup(value);
|
||||||
if ((host = split_at(saved_value, ':')) == 0 || *host == 0) {
|
if ((host = split_at(saved_value, ':')) != 0 && *host != 0)
|
||||||
if (*saved_value == 0) {
|
|
||||||
myfree(saved_value);
|
|
||||||
null_found = 1;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
host = domain;
|
|
||||||
}
|
|
||||||
if (*(transport = saved_value) == 0)
|
|
||||||
transport = var_def_transport;
|
|
||||||
vstring_strcpy(channel, transport);
|
|
||||||
(void) split_at(vstring_str(channel), ':');
|
|
||||||
if (*vstring_str(channel) == 0)
|
|
||||||
msg_fatal("null transport is not allowed: %s = %s",
|
|
||||||
VAR_DEF_TRANSPORT, var_def_transport);
|
|
||||||
vstring_strcpy(nexthop, host);
|
vstring_strcpy(nexthop, host);
|
||||||
|
if (*(transport = saved_value) != 0)
|
||||||
|
vstring_strcpy(channel, transport);
|
||||||
myfree(saved_value);
|
myfree(saved_value);
|
||||||
found = 1;
|
found = 1;
|
||||||
break;
|
break;
|
||||||
@ -170,12 +165,14 @@ int transport_lookup(const char *domain, VSTRING *channel, VSTRING *nexthop)
|
|||||||
}
|
}
|
||||||
myfree(low_domain);
|
myfree(low_domain);
|
||||||
|
|
||||||
if (wildcard_channel && !null_found) {
|
/*
|
||||||
|
* Fall back to the wild-card entry.
|
||||||
|
*/
|
||||||
|
if (found == 0 && wildcard_channel) {
|
||||||
|
if (*vstring_str(wildcard_channel))
|
||||||
vstring_strcpy(channel, vstring_str(wildcard_channel));
|
vstring_strcpy(channel, vstring_str(wildcard_channel));
|
||||||
if (vstring_str(wildcard_nexthop))
|
if (*vstring_str(wildcard_nexthop))
|
||||||
vstring_strcpy(nexthop, vstring_str(wildcard_nexthop));
|
vstring_strcpy(nexthop, vstring_str(wildcard_nexthop));
|
||||||
else
|
|
||||||
vstring_strcpy(nexthop, domain);
|
|
||||||
found = 1;
|
found = 1;
|
||||||
}
|
}
|
||||||
return (found);
|
return (found);
|
||||||
|
@ -6,6 +6,8 @@
|
|||||||
/* SYNOPSIS
|
/* SYNOPSIS
|
||||||
/* #include <dict_db.h>
|
/* #include <dict_db.h>
|
||||||
/*
|
/*
|
||||||
|
/* int dict_db_mpool_size;
|
||||||
|
/*
|
||||||
/* DICT *dict_hash_open(path, open_flags, dict_flags)
|
/* DICT *dict_hash_open(path, open_flags, dict_flags)
|
||||||
/* const char *path;
|
/* const char *path;
|
||||||
/* int open_flags;
|
/* int open_flags;
|
||||||
@ -20,6 +22,11 @@
|
|||||||
/* a pointer to a structure that can be used to access the dictionary
|
/* a pointer to a structure that can be used to access the dictionary
|
||||||
/* using the generic methods documented in dict_open(3).
|
/* using the generic methods documented in dict_open(3).
|
||||||
/*
|
/*
|
||||||
|
/* The dict_db_mpool_size variable specifies a non-default I/O buffer
|
||||||
|
/* size. The default buffer size is adequate for reading. For better
|
||||||
|
/* performance while creating a large table, specify a large buffer size
|
||||||
|
/* before opening the file.
|
||||||
|
/*
|
||||||
/* Arguments:
|
/* Arguments:
|
||||||
/* .IP path
|
/* .IP path
|
||||||
/* The database pathname, not including the ".db" suffix.
|
/* The database pathname, not including the ".db" suffix.
|
||||||
@ -105,16 +112,16 @@ typedef struct {
|
|||||||
} DICT_DB;
|
} DICT_DB;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* db_mpool_size is initialized when the first database is opened. The
|
* You can override the default dict_db_mpool_size setting before calling
|
||||||
* parameter can be preempted by setting db_mpool_size != 0 before calling
|
* dict_hash_open() or dict_btree_open(). This is done in mkmap_db_open() to
|
||||||
* dict_hash_open() or dict_btree_open(). This is done in mkmap_db_open()
|
* set a larger memory pool for database (re)builds.
|
||||||
* via "db_mkmap_mpool_size" to set a larger memory pool for database
|
*
|
||||||
* rebuilds.
|
* XXX This should be specified via the DICT interface so that it becomes an
|
||||||
|
* object property, instead of being specified by poking a global variable
|
||||||
|
* so that it becomes a class property.
|
||||||
*/
|
*/
|
||||||
#define VAR_MPOOL_SIZE "db_mpool_size"
|
|
||||||
#define DEF_MPOOL_SIZE 262144 /* 256K default memory pool */
|
|
||||||
#define DICT_DB_NELM 4096
|
#define DICT_DB_NELM 4096
|
||||||
int db_mpool_size;
|
int dict_db_mpool_size = (256 * 1024); /* 256K default memory pool */
|
||||||
|
|
||||||
#if DB_VERSION_MAJOR > 1
|
#if DB_VERSION_MAJOR > 1
|
||||||
|
|
||||||
@ -152,6 +159,8 @@ static int sanitize(int status)
|
|||||||
static DB_ENV *dict_db_env;
|
static DB_ENV *dict_db_env;
|
||||||
static int dict_db_refcount;
|
static int dict_db_refcount;
|
||||||
|
|
||||||
|
/* dict_db_env_alloc - allocate shared environment */
|
||||||
|
|
||||||
static int dict_db_env_alloc(DB_ENV ** env)
|
static int dict_db_env_alloc(DB_ENV ** env)
|
||||||
{
|
{
|
||||||
int err;
|
int err;
|
||||||
@ -164,19 +173,19 @@ static int dict_db_env_alloc(DB_ENV ** env)
|
|||||||
if (dict_db_env != 0) {
|
if (dict_db_env != 0) {
|
||||||
++dict_db_refcount;
|
++dict_db_refcount;
|
||||||
*env = dict_db_env;
|
*env = dict_db_env;
|
||||||
return 0;
|
return (0);
|
||||||
}
|
}
|
||||||
#if DB_VERSION_MAJOR == 2
|
#if DB_VERSION_MAJOR == 2
|
||||||
#define DICT_DB_ENV_FLAGS (DB_CREATE|DB_INIT_MPOOL|DB_MPOOL_PRIVATE)
|
#define DICT_DB_ENV_FLAGS (DB_CREATE|DB_INIT_MPOOL|DB_MPOOL_PRIVATE)
|
||||||
|
|
||||||
dict_db_env = (DB_ENV *) mymalloc(sizeof(DB_ENV));
|
dict_db_env = (DB_ENV *) mymalloc(sizeof(DB_ENV));
|
||||||
memset((char *) dict_db_env, 0, sizeof(DB_ENV));
|
memset((char *) dict_db_env, 0, sizeof(DB_ENV));
|
||||||
dict_db_env->mp_size = db_mpool_size;
|
dict_db_env->mp_size = dict_db_mpool_size;
|
||||||
|
|
||||||
if ((err = db_appinit(0, 0, dict_db_env, DICT_DB_ENV_FLAGS)) != 0) {
|
if ((err = db_appinit(0, 0, dict_db_env, DICT_DB_ENV_FLAGS)) != 0) {
|
||||||
myfree((char *) dict_db_env);
|
myfree((char *) dict_db_env);
|
||||||
dict_db_env = 0;
|
dict_db_env = 0;
|
||||||
return err;
|
return (err);
|
||||||
}
|
}
|
||||||
#endif /* DB_VERSION_MAJOR == 2 */
|
#endif /* DB_VERSION_MAJOR == 2 */
|
||||||
|
|
||||||
@ -185,7 +194,7 @@ static int dict_db_env_alloc(DB_ENV ** env)
|
|||||||
|
|
||||||
err = db_env_create(&dict_db_env, 0);
|
err = db_env_create(&dict_db_env, 0);
|
||||||
if (err == 0)
|
if (err == 0)
|
||||||
err = dict_db_env->set_cachesize(dict_db_env, 0, db_mpool_size, 1);
|
err = dict_db_env->set_cachesize(dict_db_env, 0, dict_db_mpool_size, 1);
|
||||||
if (err == 0)
|
if (err == 0)
|
||||||
err = dict_db_env->open(dict_db_env, 0, DICT_DB_ENV_FLAGS, 0644);
|
err = dict_db_env->open(dict_db_env, 0, DICT_DB_ENV_FLAGS, 0644);
|
||||||
|
|
||||||
@ -193,13 +202,13 @@ static int dict_db_env_alloc(DB_ENV ** env)
|
|||||||
if (dict_db_env)
|
if (dict_db_env)
|
||||||
dict_db_env->close(dict_db_env, 0);
|
dict_db_env->close(dict_db_env, 0);
|
||||||
dict_db_env = 0;
|
dict_db_env = 0;
|
||||||
return err;
|
return (err);
|
||||||
}
|
}
|
||||||
#endif /* DB_VERSION_MAJOR > 2 */
|
#endif /* DB_VERSION_MAJOR > 2 */
|
||||||
|
|
||||||
++dict_db_refcount;
|
++dict_db_refcount;
|
||||||
*env = dict_db_env;
|
*env = dict_db_env;
|
||||||
return 0;
|
return (0);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void dict_db_env_free(void)
|
static void dict_db_env_free(void)
|
||||||
@ -213,6 +222,7 @@ static void dict_db_env_free(void)
|
|||||||
#if DB_VERSION_MAJOR == 2
|
#if DB_VERSION_MAJOR == 2
|
||||||
if (dict_db_env && dict_db_refcount > 0 && --dict_db_refcount == 0) {
|
if (dict_db_env && dict_db_refcount > 0 && --dict_db_refcount == 0) {
|
||||||
db_appexit(dict_db_env);
|
db_appexit(dict_db_env);
|
||||||
|
myfree((char *) dict_db_env);
|
||||||
dict_db_env = 0;
|
dict_db_env = 0;
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
@ -667,31 +677,21 @@ DICT *dict_hash_open(const char *path, int open_flags, int dict_flags)
|
|||||||
#if DB_VERSION_MAJOR < 2
|
#if DB_VERSION_MAJOR < 2
|
||||||
HASHINFO tweak;
|
HASHINFO tweak;
|
||||||
|
|
||||||
|
memset((char *) &tweak, 0, sizeof(tweak));
|
||||||
|
tweak.nelem = DICT_DB_NELM;
|
||||||
|
tweak.cachesize = dict_db_mpool_size;
|
||||||
#endif
|
#endif
|
||||||
#if DB_VERSION_MAJOR == 2
|
#if DB_VERSION_MAJOR == 2
|
||||||
DB_INFO tweak;
|
DB_INFO tweak;
|
||||||
|
|
||||||
|
memset((char *) &tweak, 0, sizeof(tweak));
|
||||||
|
tweak.h_nelem = DICT_DB_NELM;
|
||||||
#endif
|
#endif
|
||||||
#if DB_VERSION_MAJOR > 2
|
#if DB_VERSION_MAJOR > 2
|
||||||
void *tweak;
|
void *tweak;
|
||||||
|
|
||||||
|
tweak = 0;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/* Set the mpool size if not already set in mkmap_db_open() */
|
|
||||||
if (db_mpool_size == 0)
|
|
||||||
db_mpool_size = get_mail_conf_int(VAR_MPOOL_SIZE, DEF_MPOOL_SIZE, 0, 0);
|
|
||||||
|
|
||||||
memset((char *) &tweak, 0, sizeof(tweak));
|
|
||||||
|
|
||||||
#if DB_VERSION_MAJOR < 2
|
|
||||||
tweak.nelem = DICT_DB_NELM;
|
|
||||||
tweak.cachesize = db_mpool_size;
|
|
||||||
#endif
|
|
||||||
#if DB_VERSION_MAJOR == 2
|
|
||||||
tweak.h_nelem = DICT_DB_NELM;
|
|
||||||
tweak.db_cachesize = 0;
|
|
||||||
#endif
|
|
||||||
|
|
||||||
return (dict_db_open(DICT_TYPE_HASH, path, open_flags, DB_HASH,
|
return (dict_db_open(DICT_TYPE_HASH, path, open_flags, DB_HASH,
|
||||||
(void *) &tweak, dict_flags));
|
(void *) &tweak, dict_flags));
|
||||||
}
|
}
|
||||||
@ -703,24 +703,18 @@ DICT *dict_btree_open(const char *path, int open_flags, int dict_flags)
|
|||||||
#if DB_VERSION_MAJOR < 2
|
#if DB_VERSION_MAJOR < 2
|
||||||
BTREEINFO tweak;
|
BTREEINFO tweak;
|
||||||
|
|
||||||
|
memset((char *) &tweak, 0, sizeof(tweak));
|
||||||
|
tweak.cachesize = dict_db_mpool_size;
|
||||||
#endif
|
#endif
|
||||||
#if DB_VERSION_MAJOR == 2
|
#if DB_VERSION_MAJOR == 2
|
||||||
DB_INFO tweak;
|
DB_INFO tweak;
|
||||||
|
|
||||||
|
memset((char *) &tweak, 0, sizeof(tweak));
|
||||||
#endif
|
#endif
|
||||||
#if DB_VERSION_MAJOR > 2
|
#if DB_VERSION_MAJOR > 2
|
||||||
void *tweak;
|
void *tweak;
|
||||||
|
|
||||||
#endif
|
tweak = 0;
|
||||||
|
|
||||||
/* Set the mpool size if not already set in mkmap_db_open() */
|
|
||||||
if (db_mpool_size == 0)
|
|
||||||
db_mpool_size = get_mail_conf_int(VAR_MPOOL_SIZE, DEF_MPOOL_SIZE, 0, 0);
|
|
||||||
|
|
||||||
memset((char *) &tweak, 0, sizeof(tweak));
|
|
||||||
|
|
||||||
#if DB_VERSION_MAJOR < 2
|
|
||||||
tweak.cachesize = db_mpool_size;
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
return (dict_db_open(DICT_TYPE_BTREE, path, open_flags, DB_BTREE,
|
return (dict_db_open(DICT_TYPE_BTREE, path, open_flags, DB_BTREE,
|
||||||
|
@ -25,6 +25,11 @@
|
|||||||
extern DICT *dict_hash_open(const char *, int, int);
|
extern DICT *dict_hash_open(const char *, int, int);
|
||||||
extern DICT *dict_btree_open(const char *, int, int);
|
extern DICT *dict_btree_open(const char *, int, int);
|
||||||
|
|
||||||
|
/*
|
||||||
|
* XXX Should be part of the DICT interface.
|
||||||
|
*/
|
||||||
|
extern int dict_db_mpool_size;
|
||||||
|
|
||||||
/* LICENSE
|
/* LICENSE
|
||||||
/* .ad
|
/* .ad
|
||||||
/* .fi
|
/* .fi
|
||||||
|
Loading…
x
Reference in New Issue
Block a user