diff --git a/postfix/HISTORY b/postfix/HISTORY index d56bbb796..45d3ca07c 100644 --- a/postfix/HISTORY +++ b/postfix/HISTORY @@ -22724,3 +22724,16 @@ Apologies for any names omitted. or the command must be invoked with root priveleges. This mitigates a problem with the PHP mail() function. Files: global/mail_conf.[hc], sendmail/sendmail.c. + +20161228 + + Documentation: moved the "BACKWARDS COMPATIBILITY" sections + to the end of ldap_table, mysql_table, pgsql_table, and + sqlite_table, renamed to "OBSOLETE MAIN.CF PARAMETERS". + +20161231 + + Bugfix (introduced: 20160521): segfault (null pointer) in + cidr, pcre, and regexp table when an input does not match + an ENDIF-less IF operator. Found during code maintenance. + File: util/cidr_map.c, util/dict_regexp.c, util/dict_pcre.c. diff --git a/postfix/html/ldap_table.5.html b/postfix/html/ldap_table.5.html index 0fe022576..8d4ee06cc 100644 --- a/postfix/html/ldap_table.5.html +++ b/postfix/html/ldap_table.5.html @@ -30,31 +30,12 @@ LDAP_TABLE(5) LDAP_TABLE(5) example is given at the end of this manual. This configuration method is available with Postfix version 2.1 and - later. See the section "BACKWARDS COMPATIBILITY" below for older Post- - fix versions. + later. See the section "OBSOLETE MAIN.CF PARAMETERS" below for older + Postfix versions. For details about LDAP SSL and STARTTLS, see the section on SSL and STARTTLS below. -BACKWARDS COMPATIBILITY - For backwards compatibility with Postfix version 2.0 and earlier, LDAP - parameters can also be defined in main.cf. Specify as LDAP source a - name that doesn't begin with a slash or a dot. The LDAP parameters - will then be accessible as the name you've given the source in its def- - inition, an underscore, and the name of the parameter. For example, if - the map is specified as "ldap:ldapsource", the "server_host" parameter - below would be defined in main.cf as "ldapsource_server_host". - - Note: with this form, the passwords for the LDAP sources are written in - main.cf, which is normally world-readable. Support for this form will - be removed in a future Postfix version. - - For backwards compatibility with the pre 2.2 LDAP clients, result_fil- - ter can for now be used instead of result_format, when the latter - parameter is not also set. The new name better reflects the function - of the parameter. This compatibility interface may be removed in a - future release. - LIST MEMBERSHIP When using LDAP to store lists such as $mynetworks, $mydestination, $relay_domains, $local_recipient_maps, etc., it is important to under- @@ -651,6 +632,26 @@ LDAP_TABLE(5) LDAP_TABLE(5) list of their maildrops, which will be treated as RFC822 addresses to which the message will be delivered. +OBSOLETE MAIN.CF PARAMETERS + For backwards compatibility with Postfix version 2.0 and earlier, LDAP + parameters can also be defined in main.cf. Specify as LDAP source a + name that doesn't begin with a slash or a dot. The LDAP parameters + will then be accessible as the name you've given the source in its def- + inition, an underscore, and the name of the parameter. For example, if + the map is specified as "ldap:ldapsource", the "server_host" parameter + below would be defined in main.cf as "ldapsource_server_host". + + Note: with this form, the passwords for the LDAP sources are written in + main.cf, which is normally world-readable. Support for this form will + be removed in a future Postfix version. + +OTHER OBSOLETE FEATURES + For backwards compatibility with the pre 2.2 LDAP clients, result_fil- + ter can for now be used instead of result_format, when the latter + parameter is not also set. The new name better reflects the function + of the parameter. This compatibility interface may be removed in a + future release. + SEE ALSO postmap(1), Postfix lookup table manager postconf(5), configuration parameters diff --git a/postfix/html/mysql_table.5.html b/postfix/html/mysql_table.5.html index e066bc88c..6dcb4ed29 100644 --- a/postfix/html/mysql_table.5.html +++ b/postfix/html/mysql_table.5.html @@ -26,70 +26,41 @@ MYSQL_TABLE(5) MYSQL_TABLE(5) The file /etc/postfix/mysql-aliases.cf has the same format as the Post- fix main.cf file, and can specify the parameters described below. -BACKWARDS COMPATIBILITY - For compatibility with other Postfix lookup tables, MySQL parameters - can also be defined in main.cf. In order to do that, specify as MySQL - source a name that doesn't begin with a slash or a dot. The MySQL - parameters will then be accessible as the name you've given the source - in its definition, an underscore, and the name of the parameter. For - example, if the map is specified as "mysql:mysqlname", the parameter - "hosts" below would be defined in main.cf as "mysqlname_hosts". - - Note: with this form, the passwords for the MySQL sources are written - in main.cf, which is normally world-readable. Support for this form - will be removed in a future Postfix version. - - Normally, the SQL query is specified via a single query parameter - (described in more detail below). When this parameter is not specified - in the map definition, Postfix reverts to an older interface, with the - SQL query constructed from the select_field, table, where_field and - additional_conditions parameters. The old interface will be gradually - phased out. To migrate to the new interface set: - - query = SELECT [select_field] - FROM [table] - WHERE [where_field] = '%s' - [additional_conditions] - - Insert the value, not the name, of each legacy parameter. Note that the - additional_conditions parameter is optional and if not empty, will - always start with AND. - LIST MEMBERSHIP - When using SQL to store lists such as $mynetworks, $mydestination, - $relay_domains, $local_recipient_maps, etc., it is important to under- + When using SQL to store lists such as $mynetworks, $mydestination, + $relay_domains, $local_recipient_maps, etc., it is important to under- stand that the table must store each list member as a separate key. The - table lookup verifies the *existence* of the key. See "Postfix lists + table lookup verifies the *existence* of the key. See "Postfix lists versus tables" in the DATABASE_README document for a discussion. - Do NOT create tables that return the full list of domains in $mydesti- + Do NOT create tables that return the full list of domains in $mydesti- nation or $relay_domains etc., or IP addresses in $mynetworks. DO create tables with each matching item as a key and with an arbitrary - value. With SQL databases it is not uncommon to return the key itself + value. With SQL databases it is not uncommon to return the key itself or a constant value. MYSQL PARAMETERS - hosts The hosts that Postfix will try to connect to and query from. + hosts The hosts that Postfix will try to connect to and query from. Specify unix: for UNIX domain sockets, inet: for TCP connections (default). Example: hosts = host1.some.domain host2.some.domain:port hosts = unix:/file/name - The hosts are tried in random order, with all connections over + The hosts are tried in random order, with all connections over UNIX domain sockets being tried before those over TCP. The con- - nections are automatically closed after being idle for about 1 + nections are automatically closed after being idle for about 1 minute, and are re-opened as necessary. Postfix versions 2.0 and earlier do not randomize the host order. NOTE: if you specify localhost as a hostname (even if you prefix - it with inet:), MySQL will connect to the default UNIX domain + it with inet:), MySQL will connect to the default UNIX domain socket. In order to instruct MySQL to connect to localhost over TCP you have to specify hosts = 127.0.0.1 user, password - The user name and password to log into the mysql server. Exam- + The user name and password to log into the mysql server. Exam- ple: user = someone password = some_password @@ -97,56 +68,56 @@ MYSQL_TABLE(5) MYSQL_TABLE(5) dbname The database name on the servers. Example: dbname = customer_database - query The SQL query template used to search the database, where %s is - a substitute for the address Postfix is trying to resolve, e.g. + query The SQL query template used to search the database, where %s is + a substitute for the address Postfix is trying to resolve, e.g. query = SELECT replacement FROM aliases WHERE mailbox = '%s' - By default, every query must return a result set (instead of - storing its results in a table); with "require_result_set = no" - (Postfix 3.2 and later), the absence of a result set is treated + By default, every query must return a result set (instead of + storing its results in a table); with "require_result_set = no" + (Postfix 3.2 and later), the absence of a result set is treated as "not found". This parameter supports the following '%' expansions: %% This is replaced by a literal '%' character. - %s This is replaced by the input key. SQL quoting is used - to make sure that the input key does not add unexpected + %s This is replaced by the input key. SQL quoting is used + to make sure that the input key does not add unexpected metacharacters. %u When the input key is an address of the form user@domain, - %u is replaced by the SQL quoted local part of the - address. Otherwise, %u is replaced by the entire search - string. If the localpart is empty, the query is sup- + %u is replaced by the SQL quoted local part of the + address. Otherwise, %u is replaced by the entire search + string. If the localpart is empty, the query is sup- pressed and returns no results. %d When the input key is an address of the form user@domain, - %d is replaced by the SQL quoted domain part of the - address. Otherwise, the query is suppressed and returns + %d is replaced by the SQL quoted domain part of the + address. Otherwise, the query is suppressed and returns no results. %[SUD] The upper-case equivalents of the above expansions behave - in the query parameter identically to their lower-case - counter-parts. With the result_format parameter (see - below), they expand the input key rather than the result + in the query parameter identically to their lower-case + counter-parts. With the result_format parameter (see + below), they expand the input key rather than the result value. - %[1-9] The patterns %1, %2, ... %9 are replaced by the corre- - sponding most significant component of the input key's - domain. If the input key is user@mail.example.com, then + %[1-9] The patterns %1, %2, ... %9 are replaced by the corre- + sponding most significant component of the input key's + domain. If the input key is user@mail.example.com, then %1 is com, %2 is example and %3 is mail. If the input key - is unqualified or does not have enough domain components - to satisfy all the specified patterns, the query is sup- + is unqualified or does not have enough domain components + to satisfy all the specified patterns, the query is sup- pressed and returns no results. - The domain parameter described below limits the input keys to - addresses in matching domains. When the domain parameter is + The domain parameter described below limits the input keys to + addresses in matching domains. When the domain parameter is non-empty, SQL queries for unqualified addresses or addresses in non-matching domains are suppressed and return no results. - This parameter is available with Postfix 2.2. In prior releases - the SQL query was built from the separate parameters: - select_field, table, where_field and additional_conditions. The + This parameter is available with Postfix 2.2. In prior releases + the SQL query was built from the separate parameters: + select_field, table, where_field and additional_conditions. The mapping from the old parameters to the equivalent query is: SELECT [select_field] @@ -154,50 +125,50 @@ MYSQL_TABLE(5) MYSQL_TABLE(5) WHERE [where_field] = '%s' [additional_conditions] - The '%s' in the WHERE clause expands to the escaped search - string. With Postfix 2.2 these legacy parameters are used if + The '%s' in the WHERE clause expands to the escaped search + string. With Postfix 2.2 these legacy parameters are used if the query parameter is not specified. NOTE: DO NOT put quotes around the query parameter. result_format (default: %s) Format template applied to result attributes. Most commonly used - to append (or prepend) text to the result. This parameter sup- + to append (or prepend) text to the result. This parameter sup- ports the following '%' expansions: %% This is replaced by a literal '%' character. - %s This is replaced by the value of the result attribute. + %s This is replaced by the value of the result attribute. When result is empty it is skipped. %u When the result attribute value is an address of the form - user@domain, %u is replaced by the local part of the - address. When the result has an empty localpart it is + user@domain, %u is replaced by the local part of the + address. When the result has an empty localpart it is skipped. - %d When a result attribute value is an address of the form - user@domain, %d is replaced by the domain part of the - attribute value. When the result is unqualified it is + %d When a result attribute value is an address of the form + user@domain, %d is replaced by the domain part of the + attribute value. When the result is unqualified it is skipped. %[SUD1-9] - The upper-case and decimal digit expansions interpolate - the parts of the input key rather than the result. Their - behavior is identical to that described with query, and - in fact because the input key is known in advance, - queries whose key does not contain all the information - specified in the result template are suppressed and + The upper-case and decimal digit expansions interpolate + the parts of the input key rather than the result. Their + behavior is identical to that described with query, and + in fact because the input key is known in advance, + queries whose key does not contain all the information + specified in the result template are suppressed and return no results. For example, using "result_format = smtp:[%s]" allows one to use a mailHost attribute as the basis of a transport(5) table. After - applying the result format, multiple values are concatenated as + applying the result format, multiple values are concatenated as comma separated strings. The expansion_limit and parameter - explained below allows one to restrict the number of values in + explained below allows one to restrict the number of values in the result, which is especially useful for maps that must return at most one value. - The default value %s specifies that each result value should be + The default value %s specifies that each result value should be used as is. This parameter is available with Postfix 2.2 and later. @@ -206,14 +177,14 @@ MYSQL_TABLE(5) MYSQL_TABLE(5) domain (default: no domain list) This is a list of domain names, paths to files, or dictionaries. - When specified, only fully qualified search keys with a - *non-empty* localpart and a matching domain are eligible for + When specified, only fully qualified search keys with a + *non-empty* localpart and a matching domain are eligible for lookup: 'user' lookups, bare domain lookups and "@domain" - lookups are not performed. This can significantly reduce the + lookups are not performed. This can significantly reduce the query load on the MySQL server. domain = postfix.org, hash:/etc/postfix/searchdomains - It is best not to use SQL to store the domains eligible for SQL + It is best not to use SQL to store the domains eligible for SQL lookups. This parameter is available with Postfix 2.2 and later. @@ -222,37 +193,37 @@ MYSQL_TABLE(5) MYSQL_TABLE(5) the input keys are always unqualified. expansion_limit (default: 0) - A limit on the total number of result elements returned (as a + A limit on the total number of result elements returned (as a comma separated list) by a lookup against the map. A setting of - zero disables the limit. Lookups fail with a temporary error if - the limit is exceeded. Setting the limit to 1 ensures that + zero disables the limit. Lookups fail with a temporary error if + the limit is exceeded. Setting the limit to 1 ensures that lookups do not return multiple values. option_file - Read options from the given file instead of the default my.cnf - location. This reads options from the [client] option group, + Read options from the given file instead of the default my.cnf + location. This reads options from the [client] option group, optionally followed by options from the group given with option_group. This parameter is available with Postfix 2.11 and later. option_group (default: Postfix >=3.2: client, <= 3.1: empty) - Read options from the given group of the mysql options file, + Read options from the given group of the mysql options file, after reading options from the [client] group. - Postfix 3.2 and later read [client] option group settings by - default. To disable this specify no option_file and specify + Postfix 3.2 and later read [client] option group settings by + default. To disable this specify no option_file and specify "option_group =" (i.e. an empty value). - Postfix 3.1 and earlier don't read [client] option group set- - tings unless a non-empty option_file or option_group value are + Postfix 3.1 and earlier don't read [client] option group set- + tings unless a non-empty option_file or option_group value are specified. To enable this, specify, for example, "option_group = client". This parameter is available with Postfix 2.11 and later. require_result_set (default: yes) - If "yes", require that every query returns a result set. If + If "yes", require that every query returns a result set. If "no", treat the absence of a result set as "not found". This parameter is available with Postfix 3.2 and later. @@ -263,31 +234,31 @@ MYSQL_TABLE(5) MYSQL_TABLE(5) This parameter is available with Postfix 2.11 and later. tls_key_file - File containing the private key corresponding to tls_cert_file. + File containing the private key corresponding to tls_cert_file. This parameter is available with Postfix 2.11 and later. tls_CAfile - File containing certificates for all of the X509 Certification - Authorities the client will recognize. Takes precedence over + File containing certificates for all of the X509 Certification + Authorities the client will recognize. Takes precedence over tls_CApath. This parameter is available with Postfix 2.11 and later. tls_CApath - Directory containing X509 Certification Authority certificates + Directory containing X509 Certification Authority certificates in separate individual files. This parameter is available with Postfix 2.11 and later. tls_verify_cert (default: no) - Verify that the server's name matches the common name in the + Verify that the server's name matches the common name in the certificate. This parameter is available with Postfix 2.11 and later. USING MYSQL STORED PROCEDURES - Postfix 3.2 and later support calling a stored procedure instead of + Postfix 3.2 and later support calling a stored procedure instead of using a SELECT statement in the query, e.g. query = CALL lookup('%s') @@ -295,17 +266,17 @@ MYSQL_TABLE(5) MYSQL_TABLE(5) The previously described '%' expansions can be used in the parameter(s) to the stored procedure. - By default, every stored procedure call must return a result set, i.e. - every code path must execute a SELECT statement that returns a result + By default, every stored procedure call must return a result set, i.e. + every code path must execute a SELECT statement that returns a result set (instead of storing its results in a table). With - "require_result_set = no", the absence of a result set is treated as + "require_result_set = no", the absence of a result set is treated as "not found". - A stored procedure must not return multiple result sets. That is, - there must be no code path that executes multiple SELECT statements + A stored procedure must not return multiple result sets. That is, + there must be no code path that executes multiple SELECT statements that return a result (instead of storing their results in a table). - The following is an example of a stored procedure returning a single + The following is an example of a stored procedure returning a single result set: CREATE [DEFINER=`user`@`host`] PROCEDURE @@ -316,14 +287,27 @@ MYSQL_TABLE(5) MYSQL_TABLE(5) select goto from alias where address=param; END +OBSOLETE MAIN.CF PARAMETERS + For compatibility with other Postfix lookup tables, MySQL parameters + can also be defined in main.cf. In order to do that, specify as MySQL + source a name that doesn't begin with a slash or a dot. The MySQL + parameters will then be accessible as the name you've given the source + in its definition, an underscore, and the name of the parameter. For + example, if the map is specified as "mysql:mysqlname", the parameter + "hosts" would be defined in main.cf as "mysqlname_hosts". + + Note: with this form, the passwords for the MySQL sources are written + in main.cf, which is normally world-readable. Support for this form + will be removed in a future Postfix version. + OBSOLETE QUERY INTERFACE - This section describes an interface that is deprecated as of Postfix - 2.2. It is replaced by the more general query interface described - above. If the query parameter is defined, the legacy parameters - described here ignored. Please migrate to the new interface as the + This section describes an interface that is deprecated as of Postfix + 2.2. It is replaced by the more general query interface described + above. If the query parameter is defined, the legacy parameters + described here ignored. Please migrate to the new interface as the legacy interface may be removed in a future release. - The following parameters can be used to fill in a SELECT template + The following parameters can be used to fill in a SELECT template statement of the form: SELECT [select_field] @@ -332,7 +316,7 @@ MYSQL_TABLE(5) MYSQL_TABLE(5) [additional_conditions] The specifier %s is replaced by the search string, and is escaped so if - it contains single quotes or other odd characters, it will not cause a + it contains single quotes or other odd characters, it will not cause a parse error, or worse, a security problem. select_field diff --git a/postfix/html/pgsql_table.5.html b/postfix/html/pgsql_table.5.html index f92720d1a..17d887c98 100644 --- a/postfix/html/pgsql_table.5.html +++ b/postfix/html/pgsql_table.5.html @@ -26,40 +26,6 @@ PGSQL_TABLE(5) PGSQL_TABLE(5) The file /etc/postfix/pgsql-aliases.cf has the same format as the Post- fix main.cf file, and can specify the parameters described below. -BACKWARDS COMPATIBILITY - For compatibility with other Postfix lookup tables, PostgreSQL parame- - ters can also be defined in main.cf. In order to do that, specify as - PostgreSQL source a name that doesn't begin with a slash or a dot. The - PostgreSQL parameters will then be accessible as the name you've given - the source in its definition, an underscore, and the name of the param- - eter. For example, if the map is specified as "pgsql:pgsqlname", the - parameter "hosts" below would be defined in main.cf as "pgsql- - name_hosts". - - Note: with this form, the passwords for the PostgreSQL sources are - written in main.cf, which is normally world-readable. Support for this - form will be removed in a future Postfix version. - - Normally, the SQL query is specified via a single query parameter - (described in more detail below). When this parameter is not specified - in the map definition, Postfix reverts to an older interface, with the - SQL query constructed from the select_function, select_field, table, - where_field and additional_conditions parameters. The old interface - will be gradually phased out. To migrate to the new interface set: - - query = SELECT select_function('%s') - - or in the absence of select_function, the lower precedence: - - query = SELECT select_field - FROM table - WHERE where_field = '%s' - additional_conditions - - Use the value, not the name, of each legacy parameter. Note that the - additional_conditions parameter is optional and if not empty, will - always start with AND. - LIST MEMBERSHIP When using SQL to store lists such as $mynetworks, $mydestination, $relay_domains, $local_recipient_maps, etc., it is important to under- @@ -227,6 +193,19 @@ PGSQL_TABLE(5) PGSQL_TABLE(5) the limit is exceeded. Setting the limit to 1 ensures that lookups do not return multiple values. +OBSOLETE MAIN.CF PARAMETERS + For compatibility with other Postfix lookup tables, PostgreSQL parame- + ters can also be defined in main.cf. In order to do that, specify as + PostgreSQL source a name that doesn't begin with a slash or a dot. The + PostgreSQL parameters will then be accessible as the name you've given + the source in its definition, an underscore, and the name of the param- + eter. For example, if the map is specified as "pgsql:pgsqlname", the + parameter "hosts" would be defined in main.cf as "pgsqlname_hosts". + + Note: with this form, the passwords for the PostgreSQL sources are + written in main.cf, which is normally world-readable. Support for this + form will be removed in a future Postfix version. + OBSOLETE QUERY INTERFACES This section describes query interfaces that are deprecated as of Post- fix 2.2. Please migrate to the new query interface as the old inter- diff --git a/postfix/html/sqlite_table.5.html b/postfix/html/sqlite_table.5.html index 44f5678df..7ca5fd3bb 100644 --- a/postfix/html/sqlite_table.5.html +++ b/postfix/html/sqlite_table.5.html @@ -26,94 +26,69 @@ SQLITE_TABLE(5) SQLITE_TABLE(5) The file /etc/postfix/sqlite-aliases.cf has the same format as the Postfix main.cf file, and can specify the parameters described below. -BACKWARDS COMPATIBILITY - For compatibility with other Postfix lookup tables, SQLite parameters - can also be defined in main.cf. In order to do that, specify as SQLite - source a name that doesn't begin with a slash or a dot. The SQLite - parameters will then be accessible as the name you've given the source - in its definition, an underscore, and the name of the parameter. For - example, if the map is specified as "sqlite:sqlitename", the parameter - "query" below would be defined in main.cf as "sqlitename_query". - - Normally, the SQL query is specified via a single query parameter - (described in more detail below). When this parameter is not specified - in the map definition, Postfix reverts to an older interface, with the - SQL query constructed from the select_field, table, where_field and - additional_conditions parameters. The old interface will be gradually - phased out. To migrate to the new interface set: - - query = SELECT [select_field] - FROM [table] - WHERE [where_field] = '%s' - [additional_conditions] - - Insert the value, not the name, of each legacy parameter. Note that the - additional_conditions parameter is optional and if not empty, will - always start with AND. - LIST MEMBERSHIP - When using SQL to store lists such as $mynetworks, $mydestination, - $relay_domains, $local_recipient_maps, etc., it is important to under- + When using SQL to store lists such as $mynetworks, $mydestination, + $relay_domains, $local_recipient_maps, etc., it is important to under- stand that the table must store each list member as a separate key. The - table lookup verifies the *existence* of the key. See "Postfix lists + table lookup verifies the *existence* of the key. See "Postfix lists versus tables" in the DATABASE_README document for a discussion. - Do NOT create tables that return the full list of domains in $mydesti- + Do NOT create tables that return the full list of domains in $mydesti- nation or $relay_domains etc., or IP addresses in $mynetworks. DO create tables with each matching item as a key and with an arbitrary - value. With SQL databases it is not uncommon to return the key itself + value. With SQL databases it is not uncommon to return the key itself or a constant value. SQLITE PARAMETERS dbpath The SQLite database file location. Example: dbpath = customer_database - query The SQL query template used to search the database, where %s is - a substitute for the address Postfix is trying to resolve, e.g. + query The SQL query template used to search the database, where %s is + a substitute for the address Postfix is trying to resolve, e.g. query = SELECT replacement FROM aliases WHERE mailbox = '%s' This parameter supports the following '%' expansions: %% This is replaced by a literal '%' character. - %s This is replaced by the input key. SQL quoting is used - to make sure that the input key does not add unexpected + %s This is replaced by the input key. SQL quoting is used + to make sure that the input key does not add unexpected metacharacters. %u When the input key is an address of the form user@domain, - %u is replaced by the SQL quoted local part of the - address. Otherwise, %u is replaced by the entire search - string. If the localpart is empty, the query is sup- + %u is replaced by the SQL quoted local part of the + address. Otherwise, %u is replaced by the entire search + string. If the localpart is empty, the query is sup- pressed and returns no results. %d When the input key is an address of the form user@domain, - %d is replaced by the SQL quoted domain part of the - address. Otherwise, the query is suppressed and returns + %d is replaced by the SQL quoted domain part of the + address. Otherwise, the query is suppressed and returns no results. %[SUD] The upper-case equivalents of the above expansions behave - in the query parameter identically to their lower-case - counter-parts. With the result_format parameter (see - below), they expand the input key rather than the result + in the query parameter identically to their lower-case + counter-parts. With the result_format parameter (see + below), they expand the input key rather than the result value. - %[1-9] The patterns %1, %2, ... %9 are replaced by the corre- - sponding most significant component of the input key's - domain. If the input key is user@mail.example.com, then + %[1-9] The patterns %1, %2, ... %9 are replaced by the corre- + sponding most significant component of the input key's + domain. If the input key is user@mail.example.com, then %1 is com, %2 is example and %3 is mail. If the input key - is unqualified or does not have enough domain components - to satisfy all the specified patterns, the query is sup- + is unqualified or does not have enough domain components + to satisfy all the specified patterns, the query is sup- pressed and returns no results. - The domain parameter described below limits the input keys to - addresses in matching domains. When the domain parameter is + The domain parameter described below limits the input keys to + addresses in matching domains. When the domain parameter is non-empty, SQL queries for unqualified addresses or addresses in non-matching domains are suppressed and return no results. - This parameter is available with Postfix 2.2. In prior releases - the SQL query was built from the separate parameters: - select_field, table, where_field and additional_conditions. The + This parameter is available with Postfix 2.2. In prior releases + the SQL query was built from the separate parameters: + select_field, table, where_field and additional_conditions. The mapping from the old parameters to the equivalent query is: SELECT [select_field] @@ -121,50 +96,50 @@ SQLITE_TABLE(5) SQLITE_TABLE(5) WHERE [where_field] = '%s' [additional_conditions] - The '%s' in the WHERE clause expands to the escaped search - string. With Postfix 2.2 these legacy parameters are used if + The '%s' in the WHERE clause expands to the escaped search + string. With Postfix 2.2 these legacy parameters are used if the query parameter is not specified. NOTE: DO NOT put quotes around the query parameter. result_format (default: %s) Format template applied to result attributes. Most commonly used - to append (or prepend) text to the result. This parameter sup- + to append (or prepend) text to the result. This parameter sup- ports the following '%' expansions: %% This is replaced by a literal '%' character. - %s This is replaced by the value of the result attribute. + %s This is replaced by the value of the result attribute. When result is empty it is skipped. %u When the result attribute value is an address of the form - user@domain, %u is replaced by the local part of the - address. When the result has an empty localpart it is + user@domain, %u is replaced by the local part of the + address. When the result has an empty localpart it is skipped. - %d When a result attribute value is an address of the form - user@domain, %d is replaced by the domain part of the - attribute value. When the result is unqualified it is + %d When a result attribute value is an address of the form + user@domain, %d is replaced by the domain part of the + attribute value. When the result is unqualified it is skipped. %[SUD1-9] - The upper-case and decimal digit expansions interpolate - the parts of the input key rather than the result. Their - behavior is identical to that described with query, and - in fact because the input key is known in advance, - queries whose key does not contain all the information - specified in the result template are suppressed and + The upper-case and decimal digit expansions interpolate + the parts of the input key rather than the result. Their + behavior is identical to that described with query, and + in fact because the input key is known in advance, + queries whose key does not contain all the information + specified in the result template are suppressed and return no results. For example, using "result_format = smtp:[%s]" allows one to use a mailHost attribute as the basis of a transport(5) table. After - applying the result format, multiple values are concatenated as + applying the result format, multiple values are concatenated as comma separated strings. The expansion_limit and parameter - explained below allows one to restrict the number of values in + explained below allows one to restrict the number of values in the result, which is especially useful for maps that must return at most one value. - The default value %s specifies that each result value should be + The default value %s specifies that each result value should be used as is. This parameter is available with Postfix 2.2 and later. @@ -173,14 +148,14 @@ SQLITE_TABLE(5) SQLITE_TABLE(5) domain (default: no domain list) This is a list of domain names, paths to files, or dictionaries. - When specified, only fully qualified search keys with a - *non-empty* localpart and a matching domain are eligible for + When specified, only fully qualified search keys with a + *non-empty* localpart and a matching domain are eligible for lookup: 'user' lookups, bare domain lookups and "@domain" - lookups are not performed. This can significantly reduce the + lookups are not performed. This can significantly reduce the query load on the SQLite server. domain = postfix.org, hash:/etc/postfix/searchdomains - It is best not to use SQL to store the domains eligible for SQL + It is best not to use SQL to store the domains eligible for SQL lookups. This parameter is available with Postfix 2.2 and later. @@ -189,20 +164,29 @@ SQLITE_TABLE(5) SQLITE_TABLE(5) the input keys are always unqualified. expansion_limit (default: 0) - A limit on the total number of result elements returned (as a + A limit on the total number of result elements returned (as a comma separated list) by a lookup against the map. A setting of - zero disables the limit. Lookups fail with a temporary error if - the limit is exceeded. Setting the limit to 1 ensures that + zero disables the limit. Lookups fail with a temporary error if + the limit is exceeded. Setting the limit to 1 ensures that lookups do not return multiple values. +OBSOLETE MAIN.CF PARAMETERS + For compatibility with other Postfix lookup tables, SQLite parameters + can also be defined in main.cf. In order to do that, specify as SQLite + source a name that doesn't begin with a slash or a dot. The SQLite + parameters will then be accessible as the name you've given the source + in its definition, an underscore, and the name of the parameter. For + example, if the map is specified as "sqlite:sqlitename", the parameter + "query" would be defined in main.cf as "sqlitename_query". + OBSOLETE QUERY INTERFACE - This section describes an interface that is deprecated as of Postfix - 2.2. It is replaced by the more general query interface described - above. If the query parameter is defined, the legacy parameters - described here ignored. Please migrate to the new interface as the + This section describes an interface that is deprecated as of Postfix + 2.2. It is replaced by the more general query interface described + above. If the query parameter is defined, the legacy parameters + described here ignored. Please migrate to the new interface as the legacy interface may be removed in a future release. - The following parameters can be used to fill in a SELECT template + The following parameters can be used to fill in a SELECT template statement of the form: SELECT [select_field] @@ -211,7 +195,7 @@ SQLITE_TABLE(5) SQLITE_TABLE(5) [additional_conditions] The specifier %s is replaced by the search string, and is escaped so if - it contains single quotes or other odd characters, it will not cause a + it contains single quotes or other odd characters, it will not cause a parse error, or worse, a security problem. select_field diff --git a/postfix/man/man5/ldap_table.5 b/postfix/man/man5/ldap_table.5 index 762d507a1..a3e95e817 100644 --- a/postfix/man/man5/ldap_table.5 +++ b/postfix/man/man5/ldap_table.5 @@ -32,35 +32,11 @@ the Postfix main.cf file, and can specify the parameters described below. An example is given at the end of this manual. This configuration method is available with Postfix version -2.1 and later. See the section "BACKWARDS COMPATIBILITY" +2.1 and later. See the section "OBSOLETE MAIN.CF PARAMETERS" below for older Postfix versions. For details about LDAP SSL and STARTTLS, see the section on SSL and STARTTLS below. -.SH "BACKWARDS COMPATIBILITY" -.na -.nf -.ad -.fi -For backwards compatibility with Postfix version 2.0 and earlier, -LDAP parameters can also be defined in main.cf. Specify -as LDAP source a name that doesn't begin with a slash or -a dot. The LDAP parameters will then be accessible as the -name you've given the source in its definition, an underscore, -and the name of the parameter. For example, if the map is -specified as "ldap:\fIldapsource\fR", the "server_host" -parameter below would be defined in main.cf as -"\fIldapsource\fR_server_host". - -Note: with this form, the passwords for the LDAP sources are -written in main.cf, which is normally world\-readable. Support -for this form will be removed in a future Postfix version. - -For backwards compatibility with the pre -2.2 LDAP clients, \fBresult_filter\fR can for now be used instead -of \fBresult_format\fR, when the latter parameter is not also set. -The new name better reflects the function of the parameter. This -compatibility interface may be removed in a future release. .SH "LIST MEMBERSHIP" .na .nf @@ -702,6 +678,34 @@ whose mailacceptinggeneralid attribute is "ldapuser", read the "maildrop" attributes of those found, and build a list of their maildrops, which will be treated as RFC822 addresses to which the message will be delivered. +.SH "OBSOLETE MAIN.CF PARAMETERS" +.na +.nf +.ad +.fi +For backwards compatibility with Postfix version 2.0 and earlier, +LDAP parameters can also be defined in main.cf. Specify +as LDAP source a name that doesn't begin with a slash or +a dot. The LDAP parameters will then be accessible as the +name you've given the source in its definition, an underscore, +and the name of the parameter. For example, if the map is +specified as "ldap:\fIldapsource\fR", the "server_host" +parameter below would be defined in main.cf as +"\fIldapsource\fR_server_host". + +Note: with this form, the passwords for the LDAP sources are +written in main.cf, which is normally world\-readable. Support +for this form will be removed in a future Postfix version. +.SH "OTHER OBSOLETE FEATURES" +.na +.nf +.ad +.fi +For backwards compatibility with the pre +2.2 LDAP clients, \fBresult_filter\fR can for now be used instead +of \fBresult_format\fR, when the latter parameter is not also set. +The new name better reflects the function of the parameter. This +compatibility interface may be removed in a future release. .SH "SEE ALSO" .na .nf diff --git a/postfix/man/man5/mysql_table.5 b/postfix/man/man5/mysql_table.5 index 6a8464647..64753182c 100644 --- a/postfix/man/man5/mysql_table.5 +++ b/postfix/man/man5/mysql_table.5 @@ -28,43 +28,6 @@ table in main.cf, for example: The file /etc/postfix/mysql\-aliases.cf has the same format as the Postfix main.cf file, and can specify the parameters described below. -.SH "BACKWARDS COMPATIBILITY" -.na -.nf -.ad -.fi -For compatibility with other Postfix lookup tables, MySQL -parameters can also be defined in main.cf. In order to do that, -specify as MySQL source a name that doesn't begin with a slash -or a dot. The MySQL parameters will then be accessible as the -name you've given the source in its definition, an underscore, -and the name of the parameter. For example, if the map is -specified as "mysql:\fImysqlname\fR", the parameter "hosts" -below would be defined in main.cf as "\fImysqlname\fR_hosts". - -Note: with this form, the passwords for the MySQL sources are -written in main.cf, which is normally world\-readable. Support -for this form will be removed in a future Postfix version. - -Normally, the SQL query is specified via a single \fBquery\fR -parameter (described in more detail below). When this -parameter is not specified in the map definition, Postfix -reverts to an older interface, with the SQL query constructed -from the \fBselect_field\fR, \fBtable\fR, \fBwhere_field\fR -and \fBadditional_conditions\fR parameters. The old interface -will be gradually phased out. To migrate to the new interface -set: - -.nf - \fBquery\fR = SELECT [\fIselect_field\fR] - FROM [\fItable\fR] - WHERE [\fIwhere_field\fR] = '%s' - [\fIadditional_conditions\fR] -.fi - -Insert the value, not the name, of each legacy parameter. Note -that the \fBadditional_conditions\fR parameter is optional -and if not empty, will always start with \fBAND\fR. .SH "LIST MEMBERSHIP" .na .nf @@ -350,6 +313,23 @@ CREATE [DEFINER=`user`@`host`] PROCEDURE select goto from alias where address=param; END .fi +.SH "OBSOLETE MAIN.CF PARAMETERS" +.na +.nf +.ad +.fi +For compatibility with other Postfix lookup tables, MySQL +parameters can also be defined in main.cf. In order to do that, +specify as MySQL source a name that doesn't begin with a slash +or a dot. The MySQL parameters will then be accessible as the +name you've given the source in its definition, an underscore, +and the name of the parameter. For example, if the map is +specified as "mysql:\fImysqlname\fR", the parameter "hosts" +would be defined in main.cf as "\fImysqlname\fR_hosts". + +Note: with this form, the passwords for the MySQL sources are +written in main.cf, which is normally world\-readable. Support +for this form will be removed in a future Postfix version. .SH "OBSOLETE QUERY INTERFACE" .na .nf diff --git a/postfix/man/man5/pgsql_table.5 b/postfix/man/man5/pgsql_table.5 index 7089c24e0..2e6f587d6 100644 --- a/postfix/man/man5/pgsql_table.5 +++ b/postfix/man/man5/pgsql_table.5 @@ -28,51 +28,6 @@ PostgreSQL source as a lookup table in main.cf, for example: The file /etc/postfix/pgsql\-aliases.cf has the same format as the Postfix main.cf file, and can specify the parameters described below. -.SH "BACKWARDS COMPATIBILITY" -.na -.nf -.ad -.fi -For compatibility with other Postfix lookup tables, PostgreSQL -parameters can also be defined in main.cf. In order to do -that, specify as PostgreSQL source a name that doesn't begin -with a slash or a dot. The PostgreSQL parameters will then -be accessible as the name you've given the source in its -definition, an underscore, and the name of the parameter. For -example, if the map is specified as "pgsql:\fIpgsqlname\fR", -the parameter "hosts" below would be defined in main.cf as -"\fIpgsqlname\fR_hosts". - -Note: with this form, the passwords for the PostgreSQL sources -are written in main.cf, which is normally world\-readable. -Support for this form will be removed in a future Postfix -version. - -Normally, the SQL query is specified via a single \fBquery\fR -parameter (described in more detail below). When this -parameter is not specified in the map definition, Postfix -reverts to an older interface, with the SQL query -constructed from the \fBselect_function\fR, \fBselect_field\fR, -\fBtable\fR, \fBwhere_field\fR and \fBadditional_conditions\fR -parameters. The old interface will be gradually phased -out. To migrate to the new interface set: - -.nf - \fBquery\fR = SELECT \fIselect_function\fR('%s') -.fi - -or in the absence of \fBselect_function\fR, the lower precedence: - -.nf - \fBquery\fR = SELECT \fIselect_field\fR - FROM \fItable\fR - WHERE \fIwhere_field\fR = '%s' - \fIadditional_conditions\fR -.fi - -Use the value, not the name, of each legacy parameter. Note -that the \fBadditional_conditions\fR parameter is optional -and if not empty, will always start with \fBAND\fR. .SH "LIST MEMBERSHIP" .na .nf @@ -257,6 +212,25 @@ A setting of zero disables the limit. Lookups fail with a temporary error if the limit is exceeded. Setting the limit to 1 ensures that lookups do not return multiple values. +.SH "OBSOLETE MAIN.CF PARAMETERS" +.na +.nf +.ad +.fi +For compatibility with other Postfix lookup tables, PostgreSQL +parameters can also be defined in main.cf. In order to do +that, specify as PostgreSQL source a name that doesn't begin +with a slash or a dot. The PostgreSQL parameters will then +be accessible as the name you've given the source in its +definition, an underscore, and the name of the parameter. For +example, if the map is specified as "pgsql:\fIpgsqlname\fR", +the parameter "hosts" would be defined in main.cf as +"\fIpgsqlname\fR_hosts". + +Note: with this form, the passwords for the PostgreSQL sources +are written in main.cf, which is normally world\-readable. +Support for this form will be removed in a future Postfix +version. .SH "OBSOLETE QUERY INTERFACES" .na .nf diff --git a/postfix/man/man5/sqlite_table.5 b/postfix/man/man5/sqlite_table.5 index f1cf2d49c..01c420ae6 100644 --- a/postfix/man/man5/sqlite_table.5 +++ b/postfix/man/man5/sqlite_table.5 @@ -28,39 +28,6 @@ table in main.cf, for example: The file /etc/postfix/sqlite\-aliases.cf has the same format as the Postfix main.cf file, and can specify the parameters described below. -.SH "BACKWARDS COMPATIBILITY" -.na -.nf -.ad -.fi -For compatibility with other Postfix lookup tables, SQLite -parameters can also be defined in main.cf. In order to do that, -specify as SQLite source a name that doesn't begin with a slash -or a dot. The SQLite parameters will then be accessible as the -name you've given the source in its definition, an underscore, -and the name of the parameter. For example, if the map is -specified as "sqlite:\fIsqlitename\fR", the parameter "query" -below would be defined in main.cf as "\fIsqlitename\fR_query". - -Normally, the SQL query is specified via a single \fBquery\fR -parameter (described in more detail below). When this -parameter is not specified in the map definition, Postfix -reverts to an older interface, with the SQL query constructed -from the \fBselect_field\fR, \fBtable\fR, \fBwhere_field\fR -and \fBadditional_conditions\fR parameters. The old interface -will be gradually phased out. To migrate to the new interface -set: - -.nf - \fBquery\fR = SELECT [\fIselect_field\fR] - FROM [\fItable\fR] - WHERE [\fIwhere_field\fR] = '%s' - [\fIadditional_conditions\fR] -.fi - -Insert the value, not the name, of each legacy parameter. Note -that the \fBadditional_conditions\fR parameter is optional -and if not empty, will always start with \fBAND\fR. .SH "LIST MEMBERSHIP" .na .nf @@ -223,6 +190,19 @@ A setting of zero disables the limit. Lookups fail with a temporary error if the limit is exceeded. Setting the limit to 1 ensures that lookups do not return multiple values. +.SH "OBSOLETE MAIN.CF PARAMETERS" +.na +.nf +.ad +.fi +For compatibility with other Postfix lookup tables, SQLite +parameters can also be defined in main.cf. In order to do that, +specify as SQLite source a name that doesn't begin with a slash +or a dot. The SQLite parameters will then be accessible as the +name you've given the source in its definition, an underscore, +and the name of the parameter. For example, if the map is +specified as "sqlite:\fIsqlitename\fR", the parameter "query" +would be defined in main.cf as "\fIsqlitename\fR_query". .SH "OBSOLETE QUERY INTERFACE" .na .nf diff --git a/postfix/proto/ldap_table b/postfix/proto/ldap_table index 5492fa827..b770e4a16 100644 --- a/postfix/proto/ldap_table +++ b/postfix/proto/ldap_table @@ -26,33 +26,11 @@ # described below. An example is given at the end of this manual. # # This configuration method is available with Postfix version -# 2.1 and later. See the section "BACKWARDS COMPATIBILITY" +# 2.1 and later. See the section "OBSOLETE MAIN.CF PARAMETERS" # below for older Postfix versions. # # For details about LDAP SSL and STARTTLS, see the section # on SSL and STARTTLS below. -# BACKWARDS COMPATIBILITY -# .ad -# .fi -# For backwards compatibility with Postfix version 2.0 and earlier, -# LDAP parameters can also be defined in main.cf. Specify -# as LDAP source a name that doesn't begin with a slash or -# a dot. The LDAP parameters will then be accessible as the -# name you've given the source in its definition, an underscore, -# and the name of the parameter. For example, if the map is -# specified as "ldap:\fIldapsource\fR", the "server_host" -# parameter below would be defined in main.cf as -# "\fIldapsource\fR_server_host". -# -# Note: with this form, the passwords for the LDAP sources are -# written in main.cf, which is normally world-readable. Support -# for this form will be removed in a future Postfix version. -# -# For backwards compatibility with the pre -# 2.2 LDAP clients, \fBresult_filter\fR can for now be used instead -# of \fBresult_format\fR, when the latter parameter is not also set. -# The new name better reflects the function of the parameter. This -# compatibility interface may be removed in a future release. # LIST MEMBERSHIP # .ad # .fi @@ -684,6 +662,30 @@ # the "maildrop" attributes of those found, and build a list # of their maildrops, which will be treated as RFC822 addresses # to which the message will be delivered. +# OBSOLETE MAIN.CF PARAMETERS +# .ad +# .fi +# For backwards compatibility with Postfix version 2.0 and earlier, +# LDAP parameters can also be defined in main.cf. Specify +# as LDAP source a name that doesn't begin with a slash or +# a dot. The LDAP parameters will then be accessible as the +# name you've given the source in its definition, an underscore, +# and the name of the parameter. For example, if the map is +# specified as "ldap:\fIldapsource\fR", the "server_host" +# parameter below would be defined in main.cf as +# "\fIldapsource\fR_server_host". +# +# Note: with this form, the passwords for the LDAP sources are +# written in main.cf, which is normally world-readable. Support +# for this form will be removed in a future Postfix version. +# OTHER OBSOLETE FEATURES +# .ad +# .fi +# For backwards compatibility with the pre +# 2.2 LDAP clients, \fBresult_filter\fR can for now be used instead +# of \fBresult_format\fR, when the latter parameter is not also set. +# The new name better reflects the function of the parameter. This +# compatibility interface may be removed in a future release. # SEE ALSO # postmap(1), Postfix lookup table manager # postconf(5), configuration parameters diff --git a/postfix/proto/mysql_table b/postfix/proto/mysql_table index 748b7f68a..b4c7c75b0 100644 --- a/postfix/proto/mysql_table +++ b/postfix/proto/mysql_table @@ -22,41 +22,6 @@ # The file /etc/postfix/mysql-aliases.cf has the same format as # the Postfix main.cf file, and can specify the parameters # described below. -# BACKWARDS COMPATIBILITY -# .ad -# .fi -# For compatibility with other Postfix lookup tables, MySQL -# parameters can also be defined in main.cf. In order to do that, -# specify as MySQL source a name that doesn't begin with a slash -# or a dot. The MySQL parameters will then be accessible as the -# name you've given the source in its definition, an underscore, -# and the name of the parameter. For example, if the map is -# specified as "mysql:\fImysqlname\fR", the parameter "hosts" -# below would be defined in main.cf as "\fImysqlname\fR_hosts". -# -# Note: with this form, the passwords for the MySQL sources are -# written in main.cf, which is normally world-readable. Support -# for this form will be removed in a future Postfix version. -# -# Normally, the SQL query is specified via a single \fBquery\fR -# parameter (described in more detail below). When this -# parameter is not specified in the map definition, Postfix -# reverts to an older interface, with the SQL query constructed -# from the \fBselect_field\fR, \fBtable\fR, \fBwhere_field\fR -# and \fBadditional_conditions\fR parameters. The old interface -# will be gradually phased out. To migrate to the new interface -# set: -# -# .nf -# \fBquery\fR = SELECT [\fIselect_field\fR] -# FROM [\fItable\fR] -# WHERE [\fIwhere_field\fR] = '%s' -# [\fIadditional_conditions\fR] -# .fi -# -# Insert the value, not the name, of each legacy parameter. Note -# that the \fBadditional_conditions\fR parameter is optional -# and if not empty, will always start with \fBAND\fR. # LIST MEMBERSHIP # .ad # .fi @@ -336,6 +301,21 @@ # select goto from alias where address=param; # END # .fi +# OBSOLETE MAIN.CF PARAMETERS +# .ad +# .fi +# For compatibility with other Postfix lookup tables, MySQL +# parameters can also be defined in main.cf. In order to do that, +# specify as MySQL source a name that doesn't begin with a slash +# or a dot. The MySQL parameters will then be accessible as the +# name you've given the source in its definition, an underscore, +# and the name of the parameter. For example, if the map is +# specified as "mysql:\fImysqlname\fR", the parameter "hosts" +# would be defined in main.cf as "\fImysqlname\fR_hosts". +# +# Note: with this form, the passwords for the MySQL sources are +# written in main.cf, which is normally world-readable. Support +# for this form will be removed in a future Postfix version. # OBSOLETE QUERY INTERFACE # .ad # .fi diff --git a/postfix/proto/pgsql_table b/postfix/proto/pgsql_table index 32e872fdb..bf9b3c837 100644 --- a/postfix/proto/pgsql_table +++ b/postfix/proto/pgsql_table @@ -22,49 +22,6 @@ # The file /etc/postfix/pgsql-aliases.cf has the same format as # the Postfix main.cf file, and can specify the parameters # described below. -# BACKWARDS COMPATIBILITY -# .ad -# .fi -# For compatibility with other Postfix lookup tables, PostgreSQL -# parameters can also be defined in main.cf. In order to do -# that, specify as PostgreSQL source a name that doesn't begin -# with a slash or a dot. The PostgreSQL parameters will then -# be accessible as the name you've given the source in its -# definition, an underscore, and the name of the parameter. For -# example, if the map is specified as "pgsql:\fIpgsqlname\fR", -# the parameter "hosts" below would be defined in main.cf as -# "\fIpgsqlname\fR_hosts". -# -# Note: with this form, the passwords for the PostgreSQL sources -# are written in main.cf, which is normally world-readable. -# Support for this form will be removed in a future Postfix -# version. -# -# Normally, the SQL query is specified via a single \fBquery\fR -# parameter (described in more detail below). When this -# parameter is not specified in the map definition, Postfix -# reverts to an older interface, with the SQL query -# constructed from the \fBselect_function\fR, \fBselect_field\fR, -# \fBtable\fR, \fBwhere_field\fR and \fBadditional_conditions\fR -# parameters. The old interface will be gradually phased -# out. To migrate to the new interface set: -# -# .nf -# \fBquery\fR = SELECT \fIselect_function\fR('%s') -# .fi -# -# or in the absence of \fBselect_function\fR, the lower precedence: -# -# .nf -# \fBquery\fR = SELECT \fIselect_field\fR -# FROM \fItable\fR -# WHERE \fIwhere_field\fR = '%s' -# \fIadditional_conditions\fR -# .fi -# -# Use the value, not the name, of each legacy parameter. Note -# that the \fBadditional_conditions\fR parameter is optional -# and if not empty, will always start with \fBAND\fR. # LIST MEMBERSHIP # .ad # .fi @@ -245,6 +202,23 @@ # temporary error if the limit is exceeded. Setting the # limit to 1 ensures that lookups do not return multiple # values. +# OBSOLETE MAIN.CF PARAMETERS +# .ad +# .fi +# For compatibility with other Postfix lookup tables, PostgreSQL +# parameters can also be defined in main.cf. In order to do +# that, specify as PostgreSQL source a name that doesn't begin +# with a slash or a dot. The PostgreSQL parameters will then +# be accessible as the name you've given the source in its +# definition, an underscore, and the name of the parameter. For +# example, if the map is specified as "pgsql:\fIpgsqlname\fR", +# the parameter "hosts" would be defined in main.cf as +# "\fIpgsqlname\fR_hosts". +# +# Note: with this form, the passwords for the PostgreSQL sources +# are written in main.cf, which is normally world-readable. +# Support for this form will be removed in a future Postfix +# version. # OBSOLETE QUERY INTERFACES # .ad # .fi diff --git a/postfix/proto/sqlite_table b/postfix/proto/sqlite_table index 51ee41785..aeaba341d 100644 --- a/postfix/proto/sqlite_table +++ b/postfix/proto/sqlite_table @@ -22,37 +22,6 @@ # The file /etc/postfix/sqlite-aliases.cf has the same format as # the Postfix main.cf file, and can specify the parameters # described below. -# BACKWARDS COMPATIBILITY -# .ad -# .fi -# For compatibility with other Postfix lookup tables, SQLite -# parameters can also be defined in main.cf. In order to do that, -# specify as SQLite source a name that doesn't begin with a slash -# or a dot. The SQLite parameters will then be accessible as the -# name you've given the source in its definition, an underscore, -# and the name of the parameter. For example, if the map is -# specified as "sqlite:\fIsqlitename\fR", the parameter "query" -# below would be defined in main.cf as "\fIsqlitename\fR_query". -# -# Normally, the SQL query is specified via a single \fBquery\fR -# parameter (described in more detail below). When this -# parameter is not specified in the map definition, Postfix -# reverts to an older interface, with the SQL query constructed -# from the \fBselect_field\fR, \fBtable\fR, \fBwhere_field\fR -# and \fBadditional_conditions\fR parameters. The old interface -# will be gradually phased out. To migrate to the new interface -# set: -# -# .nf -# \fBquery\fR = SELECT [\fIselect_field\fR] -# FROM [\fItable\fR] -# WHERE [\fIwhere_field\fR] = '%s' -# [\fIadditional_conditions\fR] -# .fi -# -# Insert the value, not the name, of each legacy parameter. Note -# that the \fBadditional_conditions\fR parameter is optional -# and if not empty, will always start with \fBAND\fR. # LIST MEMBERSHIP # .ad # .fi @@ -211,6 +180,17 @@ # temporary error if the limit is exceeded. Setting the # limit to 1 ensures that lookups do not return multiple # values. +# OBSOLETE MAIN.CF PARAMETERS +# .ad +# .fi +# For compatibility with other Postfix lookup tables, SQLite +# parameters can also be defined in main.cf. In order to do that, +# specify as SQLite source a name that doesn't begin with a slash +# or a dot. The SQLite parameters will then be accessible as the +# name you've given the source in its definition, an underscore, +# and the name of the parameter. For example, if the map is +# specified as "sqlite:\fIsqlitename\fR", the parameter "query" +# would be defined in main.cf as "\fIsqlitename\fR_query". # OBSOLETE QUERY INTERFACE # .ad # .fi diff --git a/postfix/src/global/mail_version.h b/postfix/src/global/mail_version.h index ad107a7e5..07abf4893 100644 --- a/postfix/src/global/mail_version.h +++ b/postfix/src/global/mail_version.h @@ -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 "20161227" +#define MAIL_RELEASE_DATE "20161231" #define MAIL_VERSION_NUMBER "3.2" #ifdef SNAPSHOT diff --git a/postfix/src/util/Makefile.in b/postfix/src/util/Makefile.in index 91eacc923..cfc8610d1 100644 --- a/postfix/src/util/Makefile.in +++ b/postfix/src/util/Makefile.in @@ -533,7 +533,8 @@ tests: all valid_hostname_test mac_expand_test dict_test unescape_test \ base32_code_test dict_thash_test surrogate_test timecmp_test \ dict_static_test dict_inline_test midna_domain_test casefold_test \ dict_utf8_test strcasecmp_utf8_test vbuf_print_test dict_regexp_test \ - dict_union_test dict_pipe_test + dict_union_test dict_pipe_test miss_endif_cidr_test \ + miss_endif_pcre_test miss_endif_regexp_test root_tests: @@ -615,6 +616,21 @@ dict_cidr_test: dict_open dict_cidr.in dict_cidr.map dict_cidr.ref diff dict_cidr.ref dict_cidr.tmp rm -f dict_cidr.tmp +miss_endif_cidr_test: dict_open miss_endif_cidr.map miss_endif_cidr.ref + echo get 1.2.3.5 | $(SHLIB_ENV) ./dict_open cidr:miss_endif_cidr.map read 2>&1 | sed 's/uid=[0-9][0-9][0-9]*/uid=USER/' >dict_cidr.tmp + diff miss_endif_cidr.ref dict_cidr.tmp + rm -f dict_cidr.tmp + +miss_endif_pcre_test: dict_open miss_endif_re.map miss_endif_pcre.ref + echo get 1.2.3.5 | $(SHLIB_ENV) ./dict_open pcre:miss_endif_re.map read 2>&1 | sed 's/uid=[0-9][0-9][0-9]*/uid=USER/' >dict_pcre.tmp + diff miss_endif_pcre.ref dict_pcre.tmp + rm -f dict_pcre.tmp + +miss_endif_regexp_test: dict_open miss_endif_re.map miss_endif_regexp.ref + echo get 1.2.3.5 | $(SHLIB_ENV) ./dict_open regexp:miss_endif_re.map read 2>&1 | sed 's/uid=[0-9][0-9][0-9]*/uid=USER/' >dict_regexp.tmp + diff miss_endif_regexp.ref dict_regexp.tmp + rm -f dict_regexp.tmp + dict_seq_test: dict_open testdb dict_seq.in dict_seq.ref rm -f testdb.db testdb.dir testdb.pag $(SHLIB_ENV) ./dict_open hash:testdb create sync < dict_seq.in 2>&1 | sed 's/uid=[0-9][0-9][0-9]*/uid=USER/' > dict_seq.tmp diff --git a/postfix/src/util/cidr_match.c b/postfix/src/util/cidr_match.c index f585bfb00..a2692369c 100644 --- a/postfix/src/util/cidr_match.c +++ b/postfix/src/util/cidr_match.c @@ -171,7 +171,7 @@ CIDR_MATCH *cidr_match_execute(CIDR_MATCH *list, const char *addr) continue; /* An IF without matching ENDIF has no end-of block entry. */ if ((entry = entry->block_end) == 0) - break; + return (0); /* FALLTHROUGH */ case CIDR_MATCH_OP_ENDIF: diff --git a/postfix/src/util/dict_pcre.c b/postfix/src/util/dict_pcre.c index ac06f5841..af15707a1 100644 --- a/postfix/src/util/dict_pcre.c +++ b/postfix/src/util/dict_pcre.c @@ -358,7 +358,7 @@ static const char *dict_pcre_lookup(DICT *dict, const char *lookup_string) continue; /* An IF without matching ENDIF has no "endif" rule. */ if ((rule = if_rule->endif_rule) == 0) - break; + return (0); /* FALLTHROUGH */ /* @@ -743,6 +743,7 @@ static DICT_PCRE_RULE *dict_pcre_parse_rule(const char *mapname, int lineno, if_rule->match = regexp.match; if_rule->pattern = engine.pattern; if_rule->hints = engine.hints; + if_rule->endif_rule = 0; return ((DICT_PCRE_RULE *) if_rule); } diff --git a/postfix/src/util/dict_regexp.c b/postfix/src/util/dict_regexp.c index cd4223793..7123f5413 100644 --- a/postfix/src/util/dict_regexp.c +++ b/postfix/src/util/dict_regexp.c @@ -303,7 +303,7 @@ static const char *dict_regexp_lookup(DICT *dict, const char *lookup_string) continue; /* An IF without matching ENDIF has no "endif" rule. */ if ((rule = if_rule->endif_rule) == 0) - break; + return (0); /* FALLTHROUGH */ /* @@ -693,6 +693,7 @@ static DICT_REGEXP_RULE *dict_regexp_parseline(const char *mapname, int lineno, sizeof(DICT_REGEXP_IF_RULE)); if_rule->expr = expr; if_rule->match = pattern.match; + if_rule->endif_rule = 0; return ((DICT_REGEXP_RULE *) if_rule); } diff --git a/postfix/src/util/miss_endif_cidr.map b/postfix/src/util/miss_endif_cidr.map new file mode 100644 index 000000000..7c882081c --- /dev/null +++ b/postfix/src/util/miss_endif_cidr.map @@ -0,0 +1 @@ +if 1.2.3.4 diff --git a/postfix/src/util/miss_endif_cidr.ref b/postfix/src/util/miss_endif_cidr.ref new file mode 100644 index 000000000..df5dc6cd3 --- /dev/null +++ b/postfix/src/util/miss_endif_cidr.ref @@ -0,0 +1,4 @@ +./dict_open: warning: cidr map miss_endif_cidr.map, line 1: IF has no matching ENDIF +owner=untrusted (uid=USER) +> get 1.2.3.5 +1.2.3.5: not found diff --git a/postfix/src/util/miss_endif_pcre.ref b/postfix/src/util/miss_endif_pcre.ref new file mode 100644 index 000000000..21d74024b --- /dev/null +++ b/postfix/src/util/miss_endif_pcre.ref @@ -0,0 +1,4 @@ +./dict_open: warning: pcre map miss_endif_re.map, line 1: IF has no matching ENDIF +owner=untrusted (uid=USER) +> get 1.2.3.5 +1.2.3.5: not found diff --git a/postfix/src/util/miss_endif_re.map b/postfix/src/util/miss_endif_re.map new file mode 100644 index 000000000..b085ecb88 --- /dev/null +++ b/postfix/src/util/miss_endif_re.map @@ -0,0 +1 @@ +if /foo/ diff --git a/postfix/src/util/miss_endif_regexp.ref b/postfix/src/util/miss_endif_regexp.ref new file mode 100644 index 000000000..f77f95aff --- /dev/null +++ b/postfix/src/util/miss_endif_regexp.ref @@ -0,0 +1,4 @@ +./dict_open: warning: regexp map miss_endif_re.map, line 1: IF has no matching ENDIF +owner=untrusted (uid=USER) +> get 1.2.3.5 +1.2.3.5: not found