git://git.exim.org
/
exim.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
SPDX: license tags (mostly by guesswork)
[exim.git]
/
src
/
src
/
transports
/
lmtp.c
diff --git
a/src/src/transports/lmtp.c
b/src/src/transports/lmtp.c
index 306ec450b8a3a3724273fc44f4258ed423a92e94..c734c3a26e3e38ab4a433ebaac798c6daf69a1b8 100644
(file)
--- a/
src/src/transports/lmtp.c
+++ b/
src/src/transports/lmtp.c
@@
-2,8
+2,10
@@
* Exim - an Internet mail transport agent *
*************************************************/
* Exim - an Internet mail transport agent *
*************************************************/
+/* Copyright (c) The Exim Maintainers 2020 - 2022 */
/* Copyright (c) University of Cambridge 1995 - 2018 */
/* See the file NOTICE for conditions of use and distribution. */
/* Copyright (c) University of Cambridge 1995 - 2018 */
/* See the file NOTICE for conditions of use and distribution. */
+/* SPDX-License-Identifier: GPL-2.0-only */
#include "../exim.h"
#include "../exim.h"
@@
-21,17
+23,17
@@
instance block so as to be publicly visible; these are flagged with opt_public.
optionlist lmtp_transport_options[] = {
{ "batch_id", opt_stringptr | opt_public,
optionlist lmtp_transport_options[] = {
{ "batch_id", opt_stringptr | opt_public,
-
(void *)offsetof
(transport_instance, batch_id) },
+
OPT_OFF
(transport_instance, batch_id) },
{ "batch_max", opt_int | opt_public,
{ "batch_max", opt_int | opt_public,
-
(void *)offsetof
(transport_instance, batch_max) },
+
OPT_OFF
(transport_instance, batch_max) },
{ "command", opt_stringptr,
{ "command", opt_stringptr,
-
(void *)offsetof
(lmtp_transport_options_block, cmd) },
+
OPT_OFF
(lmtp_transport_options_block, cmd) },
{ "ignore_quota", opt_bool,
{ "ignore_quota", opt_bool,
-
(void *)offsetof
(lmtp_transport_options_block, ignore_quota) },
+
OPT_OFF
(lmtp_transport_options_block, ignore_quota) },
{ "socket", opt_stringptr,
{ "socket", opt_stringptr,
-
(void *)offsetof
(lmtp_transport_options_block, skt) },
+
OPT_OFF
(lmtp_transport_options_block, skt) },
{ "timeout", opt_time,
{ "timeout", opt_time,
-
(void *)offsetof
(lmtp_transport_options_block, timeout) }
+
OPT_OFF
(lmtp_transport_options_block, timeout) }
};
/* Size of the options list. An extern variable has to be used so that its
};
/* Size of the options list. An extern variable has to be used so that its
@@
-488,8
+490,8
@@
if (ob->cmd)
{
DEBUG(D_transport) debug_printf("using command %s\n", ob->cmd);
sprintf(CS buffer, "%.50s transport", tblock->name);
{
DEBUG(D_transport) debug_printf("using command %s\n", ob->cmd);
sprintf(CS buffer, "%.50s transport", tblock->name);
- if (!transport_set_up_command(&argv, ob->cmd, TRUE, PANIC, addrlist,
buffer
,
- NULL))
+ if (!transport_set_up_command(&argv, ob->cmd, TRUE, PANIC, addrlist,
FALSE
,
+
buffer,
NULL))
return FALSE;
/* If the -N option is set, can't do any more. Presume all has gone well. */
return FALSE;
/* If the -N option is set, can't do any more. Presume all has gone well. */
@@
-500,7
+502,8
@@
if (ob->cmd)
uid/gid and current directory. Request that the new process be a process group
leader, so we can kill it and all its children on an error. */
uid/gid and current directory. Request that the new process be a process group
leader, so we can kill it and all its children on an error. */
- if ((pid = child_open(USS argv, NULL, 0, &fd_in, &fd_out, TRUE)) < 0)
+ if ((pid = child_open(USS argv, NULL, 0, &fd_in, &fd_out, TRUE,
+ US"lmtp-tpt-cmd")) < 0)
{
addrlist->message = string_sprintf(
"Failed to create child process for %s transport: %s", tblock->name,
{
addrlist->message = string_sprintf(
"Failed to create child process for %s transport: %s", tblock->name,
@@
-514,8
+517,7
@@
leader, so we can kill it and all its children on an error. */
else
{
DEBUG(D_transport) debug_printf("using socket %s\n", ob->skt);
else
{
DEBUG(D_transport) debug_printf("using socket %s\n", ob->skt);
- sockname = expand_string(ob->skt);
- if (sockname == NULL)
+ if (!(sockname = expand_string(ob->skt)))
{
addrlist->message = string_sprintf("Expansion of \"%s\" (socket setting "
"for %s transport) failed: %s", ob->skt, tblock->name,
{
addrlist->message = string_sprintf("Expansion of \"%s\" (socket setting "
"for %s transport) failed: %s", ob->skt, tblock->name,
@@
-557,23
+559,23
@@
allows for message+recipient checks after the message has been received. */
/* First thing is to wait for an initial greeting. */
Ustrcpy(big_buffer, US"initial connection");
/* First thing is to wait for an initial greeting. */
Ustrcpy(big_buffer, US"initial connection");
-if (!lmtp_read_response(out, buffer, sizeof(buffer), '2',
-
timeout))
goto RESPONSE_FAILED;
+if (!lmtp_read_response(out, buffer, sizeof(buffer), '2',
timeout))
+ goto RESPONSE_FAILED;
/* Next, we send a LHLO command, and expect a positive response */
/* Next, we send a LHLO command, and expect a positive response */
-if (!lmtp_write_command(fd_in, "%s %s\r\n", "LHLO",
-
primary_hostname))
goto WRITE_FAILED;
+if (!lmtp_write_command(fd_in, "%s %s\r\n", "LHLO",
primary_hostname))
+ goto WRITE_FAILED;
-if (!lmtp_read_response(out, buffer, sizeof(buffer), '2',
-
timeout))
goto RESPONSE_FAILED;
+if (!lmtp_read_response(out, buffer, sizeof(buffer), '2',
timeout))
+ goto RESPONSE_FAILED;
/* If the ignore_quota option is set, note whether the server supports the
IGNOREQUOTA option, and if so, set an appropriate addition for RCPT. */
if (ob->ignore_quota)
/* If the ignore_quota option is set, note whether the server supports the
IGNOREQUOTA option, and if so, set an appropriate addition for RCPT. */
if (ob->ignore_quota)
- igquotstr =
(pcre_exec(regex_IGNOREQUOTA, NULL, CS buffer,
-
Ustrlen(CS buffer), 0, PCRE_EOPT, NULL, 0) >= 0)
? US" IGNOREQUOTA" : US"";
+ igquotstr =
regex_match(regex_IGNOREQUOTA, buffer, -1, NULL)
+ ? US" IGNOREQUOTA" : US"";
/* Now the envelope sender */
/* Now the envelope sender */