mirror of
https://github.com/vdukhovni/postfix
synced 2025-08-30 05:38:06 +00:00
postfix-2.9-20111117
This commit is contained in:
parent
3e2c27fd00
commit
43e8a20e21
4
postfix/.indent.pro
vendored
4
postfix/.indent.pro
vendored
@ -97,6 +97,7 @@
|
||||
-TDICT_REGEXP_RULE
|
||||
-TDICT_SDBM
|
||||
-TDICT_SQLITE
|
||||
-TDICT_STACK
|
||||
-TDICT_TCP
|
||||
-TDICT_TEXT
|
||||
-TDICT_UNIX
|
||||
@ -185,6 +186,8 @@
|
||||
-TNAME_CODE
|
||||
-TNAME_MASK
|
||||
-TNBBIO
|
||||
-TPC_SERVICE_DEF
|
||||
-TPC_STRING_NV
|
||||
-TPEER_NAME
|
||||
-TPGSQL_NAME
|
||||
-TPICKUP_INFO
|
||||
@ -266,7 +269,6 @@
|
||||
-TSSL_CTX
|
||||
-TSSL_SESSION
|
||||
-TSTRING_LIST
|
||||
-TSTRING_NV
|
||||
-TSTRING_TABLE
|
||||
-TSYS_EXITS_DETAIL
|
||||
-TTLSMGR_SCACHE
|
||||
|
@ -17075,3 +17075,20 @@ Apologies for any names omitted.
|
||||
Cleanup: documented the postconf algorithms and their
|
||||
limitations, and added regression tests to speed up future
|
||||
development. File: postconf/postconf.c
|
||||
|
||||
20111117
|
||||
|
||||
Cleanup: postconf didn't "bless" type "inet" service names.
|
||||
|
||||
Cleanup: with pipelined sessions, smtp-sink flushed the
|
||||
output too often. Reported by Mark Martinec. File:
|
||||
smtpstone/smtp-sink.c.
|
||||
|
||||
Workaround: don't use IPv6 at build time. File: conf/main.cf.
|
||||
|
||||
Workaround: don't abort when IPv6 is present but busted.
|
||||
File: util/inet_proto.c.
|
||||
|
||||
Portability: Dovecot now officially supports more socket
|
||||
types for its authentication server. File:
|
||||
xsasl/xsasl_dovecot_server.c.
|
||||
|
@ -654,3 +654,4 @@ sample_directory =
|
||||
# readme_directory: The location of the Postfix README files.
|
||||
#
|
||||
readme_directory =
|
||||
inet_protocols = ipv4
|
||||
|
@ -186,7 +186,7 @@ MASTER(8) MASTER(8)
|
||||
<a href="qmgr.8.html">qmgr(8)</a>, queue manager
|
||||
<a href="verify.8.html">verify(8)</a>, address verification
|
||||
<a href="master.5.html">master(5)</a>, <a href="master.5.html">master.cf</a> configuration file syntax
|
||||
<a href="postconf.5.html">postconf(5)</a>, <a href="postconf.5.html">main.cf</a> configuration parameter syntax
|
||||
<a href="postconf.5.html">postconf(5)</a>, <a href="postconf.5.html">main.cf</a> configuration file syntax
|
||||
syslogd(8), system logging
|
||||
|
||||
<b>LICENSE</b>
|
||||
|
@ -270,10 +270,10 @@ POSTCONF(1) POSTCONF(1)
|
||||
Problems are reported to the standard error stream.
|
||||
|
||||
<b>BUGS</b>
|
||||
There currently is no support for per-service parameter
|
||||
name spaces in <a href="master.5.html">master.cf</a>. This means that "-o user-
|
||||
defined-name=value" always results in an "unused parame-
|
||||
ter" warning.
|
||||
<a href="postconf.1.html"><b>postconf</b>(1)</a> may log "unused parameter" warnings for <b>mas-</b>
|
||||
<b>ter.cf</b> entries with "-o user-defined-name=value".
|
||||
Addressing this limitation requires support for per-ser-
|
||||
vice parameter name spaces.
|
||||
|
||||
<b>ENVIRONMENT</b>
|
||||
<b>MAIL_CONFIG</b>
|
||||
@ -299,7 +299,8 @@ POSTCONF(1) POSTCONF(1)
|
||||
|
||||
<b>SEE ALSO</b>
|
||||
<a href="bounce.5.html">bounce(5)</a>, bounce template file format
|
||||
<a href="postconf.5.html">postconf(5)</a>, configuration parameters
|
||||
<a href="master.5.html">master(5)</a>, <a href="master.5.html">master.cf</a> configuration file syntax
|
||||
<a href="postconf.5.html">postconf(5)</a>, <a href="postconf.5.html">main.cf</a> configuration file syntax
|
||||
|
||||
<b>README FILES</b>
|
||||
<a href="DATABASE_README.html">DATABASE_README</a>, Postfix lookup table overview
|
||||
|
@ -229,10 +229,10 @@ Problems are reported to the standard error stream.
|
||||
.SH BUGS
|
||||
.ad
|
||||
.fi
|
||||
There currently is no support for per-service parameter
|
||||
name spaces in master.cf. This means that "-o
|
||||
user-defined-name=value" always results in an "unused
|
||||
parameter" warning.
|
||||
\fBpostconf\fR(1) may log "unused parameter" warnings for
|
||||
\fBmaster.cf\fR entries with "-o user-defined-name=value".
|
||||
Addressing this limitation requires support for per-service
|
||||
parameter name spaces.
|
||||
.SH "ENVIRONMENT"
|
||||
.na
|
||||
.nf
|
||||
@ -263,7 +263,8 @@ Pathname of a configuration file with bounce message templates.
|
||||
.na
|
||||
.nf
|
||||
bounce(5), bounce template file format
|
||||
postconf(5), configuration parameters
|
||||
master(5), master.cf configuration file syntax
|
||||
postconf(5), main.cf configuration file syntax
|
||||
.SH "README FILES"
|
||||
.na
|
||||
.nf
|
||||
|
@ -170,7 +170,7 @@ $data_directory/master.lock, master lock file.
|
||||
qmgr(8), queue manager
|
||||
verify(8), address verification
|
||||
master(5), master.cf configuration file syntax
|
||||
postconf(5), main.cf configuration parameter syntax
|
||||
postconf(5), main.cf configuration file syntax
|
||||
syslogd(8), system logging
|
||||
.SH "LICENSE"
|
||||
.na
|
||||
|
@ -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 "20111113"
|
||||
#define MAIL_RELEASE_DATE "20111117"
|
||||
#define MAIL_VERSION_NUMBER "2.9"
|
||||
|
||||
#ifdef SNAPSHOT
|
||||
|
@ -150,7 +150,7 @@
|
||||
/* qmgr(8), queue manager
|
||||
/* verify(8), address verification
|
||||
/* master(5), master.cf configuration file syntax
|
||||
/* postconf(5), main.cf configuration parameter syntax
|
||||
/* postconf(5), main.cf configuration file syntax
|
||||
/* syslogd(8), system logging
|
||||
/* LICENSE
|
||||
/* .ad
|
||||
|
@ -36,7 +36,7 @@ Makefile: Makefile.in
|
||||
|
||||
test: $(TESTPROG)
|
||||
|
||||
tests: test1 test2 test3 test4 test5
|
||||
tests: test1 test2 test3 test4 test5 test6 test7 test8
|
||||
|
||||
root_tests:
|
||||
|
||||
@ -79,7 +79,6 @@ test2: $(PROG) test2.ref
|
||||
test3: $(PROG) test3.ref
|
||||
rm -f main.cf master.cf
|
||||
touch main.cf master.cf
|
||||
./$(PROG) -nc . >test_base.tmp 2>&1
|
||||
echo foo = yes >> main.cf
|
||||
echo 'bar = $$foo' >> main.cf
|
||||
echo 'always_bcc = $$bar' >> main.cf
|
||||
@ -92,10 +91,9 @@ test3: $(PROG) test3.ref
|
||||
test4: $(PROG) test4.ref
|
||||
rm -f main.cf master.cf
|
||||
touch main.cf master.cf
|
||||
./$(PROG) -nc . >test_base.tmp 2>&1
|
||||
echo foo = yes >> main.cf
|
||||
echo 'bar = $$foo' >> main.cf
|
||||
echo smtpd 1 2 3 4 5 6 7 >> master.cf
|
||||
echo smtpd unix - n n - 0 smtpd >> master.cf
|
||||
echo ' -o always_bcc=$$bar' >> master.cf
|
||||
./$(PROG) -nc . >test4.tmp 2>&1
|
||||
diff test4.ref test4.tmp
|
||||
@ -109,13 +107,41 @@ test4: $(PROG) test4.ref
|
||||
test5: $(PROG) test5.ref
|
||||
rm -f main.cf master.cf
|
||||
touch main.cf master.cf
|
||||
./$(PROG) -nc . >test_base.tmp 2>&1
|
||||
echo smtpd 1 2 3 4 5 6 7 >> master.cf
|
||||
echo smtpd unix - n n - 0 smtpd >> master.cf
|
||||
echo ' -o bar=yes -o always_bcc=$$bar -o' >> master.cf
|
||||
./$(PROG) -nc . >test5.tmp 2>&1
|
||||
diff test5.ref test5.tmp
|
||||
rm -f main.cf master.cf test5.tmp
|
||||
|
||||
# Basic functionality test: service parameters for delivery agents.
|
||||
|
||||
test6: $(PROG) test6.ref
|
||||
rm -f main.cf master.cf
|
||||
touch main.cf master.cf
|
||||
echo whatevershebrings unix - n n - 0 pipe >> master.cf
|
||||
./$(PROG) -c . 2>&1 | grep whatevershebrings >test6.tmp
|
||||
diff test6.ref test6.tmp
|
||||
rm -f main.cf master.cf test6.tmp
|
||||
|
||||
# Basic functionality test: service parameters for spawn programs.
|
||||
|
||||
test7: $(PROG) test7.ref
|
||||
rm -f main.cf master.cf
|
||||
touch main.cf master.cf
|
||||
echo whatevershebrings unix - n n - 0 spawn >> master.cf
|
||||
./$(PROG) -c . 2>&1 | grep whatevershebrings >test7.tmp
|
||||
diff test7.ref test7.tmp
|
||||
rm -f main.cf master.cf test7.tmp
|
||||
|
||||
test8: $(PROG) test8.ref
|
||||
rm -f main.cf master.cf
|
||||
touch main.cf master.cf
|
||||
echo whatevershebrings inet - n n - 0 spawn >> master.cf
|
||||
echo whatevershebrings_time_limit=1 >> main.cf
|
||||
./$(PROG) -c . 2>&1 | grep whatevershebrings >test8.tmp
|
||||
diff test8.ref test8.tmp
|
||||
rm -f main.cf master.cf test8.tmp
|
||||
|
||||
printfck: $(OBJS) $(PROG)
|
||||
rm -rf printfck
|
||||
mkdir printfck
|
||||
@ -152,6 +178,8 @@ postconf.o: ../../include/get_hostname.h
|
||||
postconf.o: ../../include/htable.h
|
||||
postconf.o: ../../include/inet_proto.h
|
||||
postconf.o: ../../include/iostuff.h
|
||||
postconf.o: ../../include/mac_expand.h
|
||||
postconf.o: ../../include/mac_parse.h
|
||||
postconf.o: ../../include/mail_addr.h
|
||||
postconf.o: ../../include/mail_conf.h
|
||||
postconf.o: ../../include/mail_dict.h
|
||||
|
@ -219,10 +219,10 @@
|
||||
/* DIAGNOSTICS
|
||||
/* Problems are reported to the standard error stream.
|
||||
/* BUGS
|
||||
/* There currently is no support for per-service parameter
|
||||
/* name spaces in master.cf. This means that "-o
|
||||
/* user-defined-name=value" always results in an "unused
|
||||
/* parameter" warning.
|
||||
/* \fBpostconf\fR(1) may log "unused parameter" warnings for
|
||||
/* \fBmaster.cf\fR entries with "-o user-defined-name=value".
|
||||
/* Addressing this limitation requires support for per-service
|
||||
/* parameter name spaces.
|
||||
/* ENVIRONMENT
|
||||
/* .ad
|
||||
/* .fi
|
||||
@ -245,7 +245,8 @@
|
||||
/* /etc/postfix/main.cf, Postfix configuration parameters
|
||||
/* SEE ALSO
|
||||
/* bounce(5), bounce template file format
|
||||
/* postconf(5), configuration parameters
|
||||
/* master(5), master.cf configuration file syntax
|
||||
/* postconf(5), main.cf configuration file syntax
|
||||
/* README FILES
|
||||
/* .ad
|
||||
/* .fi
|
||||
@ -349,7 +350,7 @@ HTABLE *param_table;
|
||||
* Lookup table for master.cf info.
|
||||
*
|
||||
* XXX Replace by data structures with per-entry hashes for "-o name=value", so
|
||||
* that we can properly handle of definitions and uses in per-service name
|
||||
* that we can properly handle name=value definitions in per-service name
|
||||
* spaces.
|
||||
*/
|
||||
static ARGV **master_table;
|
||||
@ -423,14 +424,14 @@ static const CONFIG_LONG_TABLE long_table[] = {
|
||||
typedef struct {
|
||||
const char *name;
|
||||
const char *value;
|
||||
} STRING_NV;
|
||||
} PC_STRING_NV;
|
||||
|
||||
/*
|
||||
* Service-defined parameter names are created by appending postfix-defined
|
||||
* suffixes to master.cf service names. These parameters have default values
|
||||
* that are defined by built-in parameters.
|
||||
*/
|
||||
static STRING_NV *serv_param_table;
|
||||
static PC_STRING_NV *serv_param_table;
|
||||
static ssize_t serv_param_tablen;
|
||||
|
||||
/*
|
||||
@ -767,8 +768,13 @@ static void set_parameters(void)
|
||||
{
|
||||
|
||||
/*
|
||||
* Populate the configuration parameter dictionary with default settings
|
||||
* or with actual settings.
|
||||
* The proposal below describes some of the steps needed to expand
|
||||
* parameter values. It has a problem: it updates the configuration
|
||||
* parameter dictionary, and in doing so breaks the "postconf -d"
|
||||
* implementation.
|
||||
*
|
||||
* Populate the configuration parameter dictionary with default settings or
|
||||
* with actual settings.
|
||||
*
|
||||
* Iterate over each entry in str_fn_table, str_fn_table_2, time_table,
|
||||
* bool_table, int_table, str_table, and raw_table. Look up each
|
||||
@ -856,7 +862,7 @@ static void read_master(void)
|
||||
static void add_service_parameter(const char *service, const char *suffix,
|
||||
const char *defparam)
|
||||
{
|
||||
STRING_NV *sp;
|
||||
PC_STRING_NV *sp;
|
||||
char *name = concatenate(service, suffix, (char *) 0);
|
||||
|
||||
/*
|
||||
@ -867,11 +873,11 @@ static void add_service_parameter(const char *service, const char *suffix,
|
||||
if (htable_locate(param_table, name) != 0) {
|
||||
myfree(name);
|
||||
} else {
|
||||
serv_param_table = (STRING_NV *)
|
||||
serv_param_table = (PC_STRING_NV *)
|
||||
myrealloc((char *) serv_param_table,
|
||||
(serv_param_tablen + 1) * sizeof(*serv_param_table));
|
||||
sp = serv_param_table + serv_param_tablen;
|
||||
sp->name = concatenate(service, suffix, (char *) 0);
|
||||
sp->name = name;
|
||||
sp->value = defparam;
|
||||
serv_param_tablen += 1;
|
||||
}
|
||||
@ -881,14 +887,7 @@ static void add_service_parameter(const char *service, const char *suffix,
|
||||
|
||||
static void add_service_parameters(void)
|
||||
{
|
||||
/* XXX Should this list be configurable? */
|
||||
static const char *delivery_agents[] = {
|
||||
MAIL_PROGRAM_LOCAL, MAIL_PROGRAM_ERROR,
|
||||
MAIL_PROGRAM_VIRTUAL, MAIL_PROGRAM_SMTP,
|
||||
MAIL_PROGRAM_LMTP, MAIL_PROGRAM_PIPE,
|
||||
0,
|
||||
};
|
||||
static const STRING_NV service_params[] = {
|
||||
static const PC_STRING_NV service_params[] = {
|
||||
/* suffix, default parameter name */
|
||||
_XPORT_RCPT_LIMIT, VAR_XPORT_RCPT_LIMIT,
|
||||
_STACK_RCPT_LIMIT, VAR_STACK_RCPT_LIMIT,
|
||||
@ -907,22 +906,36 @@ static void add_service_parameters(void)
|
||||
_DEST_RATE_DELAY, VAR_DEST_RATE_DELAY,
|
||||
0,
|
||||
};
|
||||
static const STRING_NV spawn_params[] = {
|
||||
static const PC_STRING_NV spawn_params[] = {
|
||||
/* suffix, default parameter name */
|
||||
_MAXTIME, VAR_COMMAND_MAXTIME,
|
||||
0,
|
||||
};
|
||||
const STRING_NV *sp;
|
||||
typedef struct {
|
||||
const char *progname;
|
||||
const PC_STRING_NV *params;
|
||||
} PC_SERVICE_DEF;
|
||||
static const PC_SERVICE_DEF service_defs[] = {
|
||||
MAIL_PROGRAM_LOCAL, service_params,
|
||||
MAIL_PROGRAM_ERROR, service_params,
|
||||
MAIL_PROGRAM_VIRTUAL, service_params,
|
||||
MAIL_PROGRAM_SMTP, service_params,
|
||||
MAIL_PROGRAM_LMTP, service_params,
|
||||
MAIL_PROGRAM_PIPE, service_params,
|
||||
MAIL_PROGRAM_SPAWN, spawn_params,
|
||||
0,
|
||||
};
|
||||
const PC_STRING_NV *sp;
|
||||
const char *progname;
|
||||
const char *service;
|
||||
ARGV **argvp;
|
||||
ARGV *argv;
|
||||
const char **cpp;
|
||||
const PC_SERVICE_DEF *sd;
|
||||
|
||||
/*
|
||||
* Initialize the table with service parameter names and defaults.
|
||||
*/
|
||||
serv_param_table = (STRING_NV *) mymalloc(1);
|
||||
serv_param_table = (PC_STRING_NV *) mymalloc(1);
|
||||
serv_param_tablen = 0;
|
||||
|
||||
/*
|
||||
@ -932,33 +945,17 @@ static void add_service_parameters(void)
|
||||
for (argvp = master_table; (argv = *argvp) != 0; argvp++) {
|
||||
|
||||
/*
|
||||
* Skip all endpoints except UNIX-domain sockets.
|
||||
*/
|
||||
if (strcmp(argv->argv[1], MASTER_XPORT_NAME_UNIX) != 0)
|
||||
continue;
|
||||
|
||||
/*
|
||||
* Add service parameters for message delivery transports.
|
||||
* Add service parameters for message delivery transports or spawn
|
||||
* programs.
|
||||
*/
|
||||
progname = argv->argv[7];
|
||||
for (cpp = delivery_agents; *cpp; cpp++)
|
||||
if (strcmp(*cpp, progname) == 0)
|
||||
for (sd = service_defs; sd->progname; sd++) {
|
||||
if (strcmp(sd->progname, progname) == 0) {
|
||||
service = argv->argv[0];
|
||||
for (sp = sd->params; sp->name; sp++)
|
||||
add_service_parameter(service, sp->name, sp->value);
|
||||
break;
|
||||
if (*cpp != 0) {
|
||||
service = argv->argv[0];
|
||||
for (sp = service_params; sp->name; sp++)
|
||||
add_service_parameter(service, sp->name, sp->value);
|
||||
continue;
|
||||
}
|
||||
|
||||
/*
|
||||
* Add service parameters for spawn(8)-based services.
|
||||
*/
|
||||
if (strcmp(MAIL_PROGRAM_SPAWN, progname) == 0) {
|
||||
service = argv->argv[0];
|
||||
for (sp = spawn_params; sp->name; sp++)
|
||||
add_service_parameter(service, sp->name, sp->value);
|
||||
continue;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@ -1056,9 +1053,9 @@ static void add_user_parameters(void)
|
||||
* but only if they have a "name=value" entry in main.cf.
|
||||
*
|
||||
* XXX It is possible that a user-defined parameter is defined in master.cf
|
||||
* with "-o smtpd_restriction_classes=name -o name=value". To handle this
|
||||
* we need to give each master.cf entry its own name space. Until then,
|
||||
* we may log false warnings for unused "-o name=value" entries.
|
||||
* with "-o smtpd_restriction_classes=name -o name=value". This requires
|
||||
* name space support for master.cf entries. Without this, we always log
|
||||
* "unused parameter" warnings for "-o user-defined-name=value" entries.
|
||||
*/
|
||||
if ((class_list = mail_conf_lookup_eval(VAR_REST_CLASSES)) != 0) {
|
||||
cp = saved_class_list = mystrdup(class_list);
|
||||
@ -1070,8 +1067,9 @@ static void add_user_parameters(void)
|
||||
/*
|
||||
* Parse the "name=value" instances in main.cf of built-in and service
|
||||
* parameters only, look for macro expansions of unknown parameter names,
|
||||
* and flag those unknown parameter names as "known" if they have a
|
||||
* "name=value" entry in main.cf.
|
||||
* and flag those parameter names as "known" if they have a "name=value"
|
||||
* entry in main.cf. Recursively apply the procedure to the values of
|
||||
* newly-flagged parameters.
|
||||
*/
|
||||
for (ht_info = ht = htable_list(param_table); *ht; ht++)
|
||||
if ((cparam_value = mail_conf_lookup(ht[0]->key)) != 0)
|
||||
@ -1079,16 +1077,11 @@ static void add_user_parameters(void)
|
||||
myfree((char *) ht_info);
|
||||
|
||||
/*
|
||||
* Parse all "-o parameter=value" instances in master.cf, look for for
|
||||
* macro expansions of unknown parameter names, and flag those unknown
|
||||
* parameter names as "known" if they have a "name=value" entry in
|
||||
* main.cf.
|
||||
*
|
||||
* XXX It is possible that a user-defined parameter is defined in master.cf
|
||||
* with "-o name1=value1" and then used in a "-o name2=$name1" macro
|
||||
* expansion in that same master.cf entry. To handle this we need to give
|
||||
* each master.cf entry its own name space. Until then, we may log false
|
||||
* warnings for unused "-o name=value" entries.
|
||||
* Parse all "-o parameter=value" instances in master.cf, look for macro
|
||||
* expansions of unknown parameter names, and flag those parameter names
|
||||
* as "known" if they have a "name=value" entry in main.cf (XXX todo: in
|
||||
* master.cf; without master.cf name space support we always log "unused
|
||||
* parameter" warnings for "-o user-defined-name=value" entries).
|
||||
*/
|
||||
for (argvp = master_table; (argv = *argvp) != 0; argvp++) {
|
||||
for (field = MASTER_FIELD_COUNT; argv->argv[field] != 0; field++) {
|
||||
@ -1505,7 +1498,7 @@ static void print_service_param_default(int mode, const char *name,
|
||||
/* print_service_param - show service parameter */
|
||||
|
||||
static void print_service_param(int mode, const char *name,
|
||||
const STRING_NV *dst)
|
||||
const PC_STRING_NV *dst)
|
||||
{
|
||||
const char *value;
|
||||
|
||||
@ -1581,7 +1574,7 @@ static void print_parameter(int mode, const char *name, char *ptr)
|
||||
if (INSIDE(ptr, long_table))
|
||||
print_long(mode, name, (CONFIG_LONG_TABLE *) ptr);
|
||||
if (INSIDE3(ptr, serv_param_table, serv_param_tablen))
|
||||
print_service_param(mode, name, (STRING_NV *) ptr);
|
||||
print_service_param(mode, name, (PC_STRING_NV *) ptr);
|
||||
if (INSIDE3(ptr, user_param_table, user_param_tablen))
|
||||
print_user_param(mode, name);
|
||||
if (msg_verbose)
|
||||
@ -1824,8 +1817,8 @@ static void flag_unused_master_parameters(void)
|
||||
* with "-o smtpd_restriction_classes=name", or with "-o name1=value1"
|
||||
* and then used in a "-o name2=$name1" macro expansion in that same
|
||||
* master.cf entry. To handle this we need to give each master.cf entry
|
||||
* its own name space. Until then, we may log false warnings for unused
|
||||
* "-o name=value" entries.
|
||||
* its own name space. Until then, we always log "unused parameter"
|
||||
* warnings for "-o user-defined-name=value" entries.
|
||||
*/
|
||||
for (argvp = master_table; (argv = *argvp) != 0; argvp++) {
|
||||
for (field = MASTER_FIELD_COUNT; argv->argv[field] != 0; field++) {
|
||||
|
15
postfix/src/postconf/test6.ref
Normal file
15
postfix/src/postconf/test6.ref
Normal file
@ -0,0 +1,15 @@
|
||||
whatevershebrings_delivery_slot_cost = $default_delivery_slot_cost
|
||||
whatevershebrings_delivery_slot_discount = $default_delivery_slot_discount
|
||||
whatevershebrings_delivery_slot_loan = $default_delivery_slot_loan
|
||||
whatevershebrings_destination_concurrency_failed_cohort_limit = $default_destination_concurrency_failed_cohort_limit
|
||||
whatevershebrings_destination_concurrency_limit = $default_destination_concurrency_limit
|
||||
whatevershebrings_destination_concurrency_negative_feedback = $default_destination_concurrency_negative_feedback
|
||||
whatevershebrings_destination_concurrency_positive_feedback = $default_destination_concurrency_positive_feedback
|
||||
whatevershebrings_destination_rate_delay = $default_destination_rate_delay
|
||||
whatevershebrings_destination_recipient_limit = $default_destination_recipient_limit
|
||||
whatevershebrings_extra_recipient_limit = $default_extra_recipient_limit
|
||||
whatevershebrings_initial_destination_concurrency = $initial_destination_concurrency
|
||||
whatevershebrings_minimum_delivery_slots = $default_minimum_delivery_slots
|
||||
whatevershebrings_recipient_limit = $default_recipient_limit
|
||||
whatevershebrings_recipient_refill_delay = $default_recipient_refill_delay
|
||||
whatevershebrings_recipient_refill_limit = $default_recipient_refill_limit
|
1
postfix/src/postconf/test7.ref
Normal file
1
postfix/src/postconf/test7.ref
Normal file
@ -0,0 +1 @@
|
||||
whatevershebrings_time_limit = $command_time_limit
|
1
postfix/src/postconf/test8.ref
Normal file
1
postfix/src/postconf/test8.ref
Normal file
@ -0,0 +1 @@
|
||||
whatevershebrings_time_limit = 1
|
@ -335,6 +335,15 @@ typedef struct SINK_STATE {
|
||||
#define SOFT_ERROR_RESP "450 4.3.0 Error: command failed"
|
||||
#define HARD_ERROR_RESP "500 5.3.0 Error: command failed"
|
||||
|
||||
/*
|
||||
* We can't rely on vstream auto-flushing, so we have to prepare for the
|
||||
* next read request.
|
||||
*/
|
||||
#define SMTP_FLUSH(fp) do { \
|
||||
if (vstream_peek(fp) <= 0 && readable(vstream_fileno(fp)) <= 0) \
|
||||
smtp_flush(fp); \
|
||||
} while (0)
|
||||
|
||||
static int var_tmout = 100;
|
||||
static int var_max_line_length = 2048;
|
||||
static char *var_myhostname;
|
||||
@ -387,7 +396,7 @@ static void do_stats(void)
|
||||
static void hard_err_resp(SINK_STATE *state)
|
||||
{
|
||||
smtp_printf(state->stream, "%s", hard_error_resp);
|
||||
smtp_flush(state->stream);
|
||||
SMTP_FLUSH(state->stream);
|
||||
}
|
||||
|
||||
/* soft_err_resp - generic soft error response */
|
||||
@ -395,7 +404,7 @@ static void hard_err_resp(SINK_STATE *state)
|
||||
static void soft_err_resp(SINK_STATE *state)
|
||||
{
|
||||
smtp_printf(state->stream, "%s", soft_error_resp);
|
||||
smtp_flush(state->stream);
|
||||
SMTP_FLUSH(state->stream);
|
||||
}
|
||||
|
||||
/* exp_path_template - expand template pathname, static result */
|
||||
@ -618,7 +627,7 @@ static void ehlo_response(SINK_STATE *state, const char *args)
|
||||
smtp_printf(state->stream, "250-ENHANCEDSTATUSCODES");
|
||||
/* RFC 821/2821/5321: Format is replycode<SPACE>optional-text<CRLF> */
|
||||
smtp_printf(state->stream, "250 ");
|
||||
smtp_flush(state->stream);
|
||||
SMTP_FLUSH(state->stream);
|
||||
if (single_template) {
|
||||
if (state->helo_args)
|
||||
myfree(state->helo_args);
|
||||
@ -635,7 +644,7 @@ static void helo_response(SINK_STATE *state, const char *args)
|
||||
mail_cmd_reset(state);
|
||||
state->client_proto = "SMTP";
|
||||
smtp_printf(state->stream, "250 %s", var_myhostname);
|
||||
smtp_flush(state->stream);
|
||||
SMTP_FLUSH(state->stream);
|
||||
if (single_template) {
|
||||
if (state->helo_args)
|
||||
myfree(state->helo_args);
|
||||
@ -649,7 +658,7 @@ static void helo_response(SINK_STATE *state, const char *args)
|
||||
static void ok_response(SINK_STATE *state, const char *unused_args)
|
||||
{
|
||||
smtp_printf(state->stream, "250 2.0.0 Ok");
|
||||
smtp_flush(state->stream);
|
||||
SMTP_FLUSH(state->stream);
|
||||
}
|
||||
|
||||
/* rset_response - reset, send 250 OK */
|
||||
@ -658,7 +667,7 @@ static void rset_response(SINK_STATE *state, const char *unused_args)
|
||||
{
|
||||
mail_cmd_reset(state);
|
||||
smtp_printf(state->stream, "250 2.1.0 Ok");
|
||||
smtp_flush(state->stream);
|
||||
SMTP_FLUSH(state->stream);
|
||||
}
|
||||
|
||||
/* mail_response - reset recipient count, send 250 OK */
|
||||
@ -667,13 +676,13 @@ static void mail_response(SINK_STATE *state, const char *args)
|
||||
{
|
||||
if (state->in_mail) {
|
||||
smtp_printf(state->stream, "503 5.5.1 Error: nested MAIL command");
|
||||
smtp_flush(state->stream);
|
||||
SMTP_FLUSH(state->stream);
|
||||
return;
|
||||
}
|
||||
state->in_mail++;
|
||||
state->rcpts = 0;
|
||||
smtp_printf(state->stream, "250 2.1.0 Ok");
|
||||
smtp_flush(state->stream);
|
||||
SMTP_FLUSH(state->stream);
|
||||
if (single_template) {
|
||||
mail_file_open(state);
|
||||
SKIP(args, *args != ':');
|
||||
@ -689,12 +698,12 @@ static void rcpt_response(SINK_STATE *state, const char *args)
|
||||
{
|
||||
if (state->in_mail == 0) {
|
||||
smtp_printf(state->stream, "503 5.5.1 Error: need MAIL command");
|
||||
smtp_flush(state->stream);
|
||||
SMTP_FLUSH(state->stream);
|
||||
return;
|
||||
}
|
||||
state->rcpts++;
|
||||
smtp_printf(state->stream, "250 2.1.5 Ok");
|
||||
smtp_flush(state->stream);
|
||||
SMTP_FLUSH(state->stream);
|
||||
/* Note: there may be more than one recipient per mail transaction. */
|
||||
if (state->dump_file) {
|
||||
SKIP(args, *args != ':');
|
||||
@ -711,7 +720,7 @@ static void abort_event(int unused_event, char *context)
|
||||
SINK_STATE *state = (SINK_STATE *) context;
|
||||
|
||||
smtp_printf(state->stream, "550 This violates SMTP");
|
||||
smtp_flush(state->stream);
|
||||
SMTP_FLUSH(state->stream);
|
||||
disconnect(state);
|
||||
}
|
||||
|
||||
@ -721,13 +730,13 @@ static void data_response(SINK_STATE *state, const char *unused_args)
|
||||
{
|
||||
if (state->in_mail == 0 || state->rcpts == 0) {
|
||||
smtp_printf(state->stream, "503 5.5.1 Error: need RCPT command");
|
||||
smtp_flush(state->stream);
|
||||
SMTP_FLUSH(state->stream);
|
||||
return;
|
||||
}
|
||||
/* Not: ST_ANY. */
|
||||
state->data_state = ST_CR_LF;
|
||||
smtp_printf(state->stream, "354 End data with <CR><LF>.<CR><LF>");
|
||||
smtp_flush(state->stream);
|
||||
SMTP_FLUSH(state->stream);
|
||||
if (abort_delay < 0) {
|
||||
state->read_fn = data_read;
|
||||
} else {
|
||||
@ -750,7 +759,7 @@ static void dot_resp_hard(SINK_STATE *state)
|
||||
} else {
|
||||
smtp_printf(state->stream, "%s", hard_error_resp);
|
||||
}
|
||||
smtp_flush(state->stream);
|
||||
SMTP_FLUSH(state->stream);
|
||||
}
|
||||
|
||||
/* dot_resp_soft - soft error response to . command */
|
||||
@ -763,7 +772,7 @@ static void dot_resp_soft(SINK_STATE *state)
|
||||
} else {
|
||||
smtp_printf(state->stream, "%s", soft_error_resp);
|
||||
}
|
||||
smtp_flush(state->stream);
|
||||
SMTP_FLUSH(state->stream);
|
||||
}
|
||||
|
||||
/* dot_response - response to . command */
|
||||
@ -776,7 +785,7 @@ static void dot_response(SINK_STATE *state, const char *unused_args)
|
||||
} else {
|
||||
smtp_printf(state->stream, "250 2.0.0 Ok");
|
||||
}
|
||||
smtp_flush(state->stream);
|
||||
SMTP_FLUSH(state->stream);
|
||||
}
|
||||
|
||||
/* quit_response - respond to QUIT command */
|
||||
@ -784,7 +793,7 @@ static void dot_response(SINK_STATE *state, const char *unused_args)
|
||||
static void quit_response(SINK_STATE *state, const char *unused_args)
|
||||
{
|
||||
smtp_printf(state->stream, "221 Bye");
|
||||
smtp_flush(state->stream);
|
||||
smtp_flush(state->stream); /* not: SMTP_FLUSH */
|
||||
if (count)
|
||||
quit_count++;
|
||||
}
|
||||
@ -799,7 +808,7 @@ static void conn_response(SINK_STATE *state, const char *unused_args)
|
||||
smtp_printf(state->stream, "220 %s", var_myhostname);
|
||||
else
|
||||
smtp_printf(state->stream, "220 %s ESMTP", var_myhostname);
|
||||
smtp_flush(state->stream);
|
||||
SMTP_FLUSH(state->stream);
|
||||
}
|
||||
|
||||
/* delay_event - delayed command response */
|
||||
@ -1175,7 +1184,7 @@ static int command_read(SINK_STATE *state)
|
||||
msg_info("%s", ptr);
|
||||
if ((command = mystrtok(&ptr, " \t")) == 0) {
|
||||
smtp_printf(state->stream, "500 5.5.2 Error: unknown command");
|
||||
smtp_flush(state->stream);
|
||||
SMTP_FLUSH(state->stream);
|
||||
return (0);
|
||||
}
|
||||
for (cmdp = command_table; cmdp->name != 0; cmdp++)
|
||||
@ -1183,7 +1192,7 @@ static int command_read(SINK_STATE *state)
|
||||
break;
|
||||
if (cmdp->name == 0 || (cmdp->flags & FLAG_ENABLE) == 0) {
|
||||
smtp_printf(state->stream, "500 5.5.1 Error: unknown command");
|
||||
smtp_flush(state->stream);
|
||||
SMTP_FLUSH(state->stream);
|
||||
return (0);
|
||||
}
|
||||
return (command_resp(state, cmdp, command, printable(ptr, '?')));
|
||||
|
@ -219,7 +219,7 @@ INET_PROTO_INFO *inet_proto_init(const char *context, const char *protocols)
|
||||
pf->dns_atype_list = make_unsigned_vector(3, T_A, T_AAAA, 0);
|
||||
pf->sa_family_list = make_uchar_vector(3, AF_INET, AF_INET6, 0);
|
||||
break;
|
||||
} else if (errno == EAFNOSUPPORT) {
|
||||
} else if (errno == EAFNOSUPPORT || errno == EPROTONOSUPPORT) {
|
||||
msg_warn("%s: IPv6 support is disabled: %m", context);
|
||||
msg_warn("%s: configuring for IPv4 support only", context);
|
||||
/* FALLTHROUGH */
|
||||
|
@ -371,11 +371,6 @@ XSASL_SERVER_IMPL *xsasl_dovecot_server_init(const char *server_type,
|
||||
{
|
||||
XSASL_DOVECOT_SERVER_IMPL *xp;
|
||||
|
||||
if (strchr(path_info, '/') == 0)
|
||||
msg_warn("when SASL type is \"%s\", SASL path \"%s\" "
|
||||
"should be a socket pathname",
|
||||
server_type, path_info);
|
||||
|
||||
xp = (XSASL_DOVECOT_SERVER_IMPL *) mymalloc(sizeof(*xp));
|
||||
xp->xsasl.create = xsasl_dovecot_server_create;
|
||||
xp->xsasl.done = xsasl_dovecot_server_done;
|
||||
|
Loading…
x
Reference in New Issue
Block a user