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
DKIM: logging for signing in transport. Bug 3062
[exim.git]
/
src
/
src
/
dkim_transport.c
diff --git
a/src/src/dkim_transport.c
b/src/src/dkim_transport.c
index 6b643927c9c1500c2feb89590240f3a515e6b451..38f849af673ee44b8803f80536f50feec8cb9cf3 100644
(file)
--- a/
src/src/dkim_transport.c
+++ b/
src/src/dkim_transport.c
@@
-2,8
+2,10
@@
* Exim - an Internet mail transport agent *
*************************************************/
* Exim - an Internet mail transport agent *
*************************************************/
+/* Copyright (c) The Exim Maintainers 2022 - 2023 */
/* 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-or-later */
/* Transport shim for dkim signing */
/* Transport shim for dkim signing */
@@
-21,8
+23,8
@@
if (dkim->dkim_strict)
uschar * dkim_strict_result = expand_string(dkim->dkim_strict);
if (dkim_strict_result)
uschar * dkim_strict_result = expand_string(dkim->dkim_strict);
if (dkim_strict_result)
- if (
(strcmpic(dkim->dkim_strict, US"1") == 0) ||
-
(strcmpic(dkim->dkim_strict, US"true") == 0)
)
+ if (
strcmpic(dkim_strict_result, US"1") == 0
+
|| strcmpic(dkim_strict_result, US"true") == 0
)
{
/* Set errno to something halfway meaningful */
*errp = EACCES;
{
/* Set errno to something halfway meaningful */
*errp = EACCES;
@@
-158,8
+160,8
@@
arc_sign_init();
in wireformat. */
dkim->dot_stuffed = f.spool_file_wireformat;
in wireformat. */
dkim->dot_stuffed = f.spool_file_wireformat;
-if (!(dkim_signature = dkim_exim_sign(deliver_datafile,
SPOOL_DATA_START_OFFSET,
-
hdrs, dkim, &errstr)))
+if (!(dkim_signature = dkim_exim_sign(deliver_datafile,
+
spool_data_start_offset(message_id),
hdrs, dkim, &errstr)))
if (!(rc = dkt_sign_fail(dkim, &errno)))
{
*err = errstr;
if (!(rc = dkt_sign_fail(dkim, &errno)))
{
*err = errstr;
@@
-169,7
+171,7
@@
if (!(dkim_signature = dkim_exim_sign(deliver_datafile, SPOOL_DATA_START_OFFSET,
#ifdef EXPERIMENTAL_ARC
if (dkim->arc_signspec) /* Prepend ARC headers */
{
#ifdef EXPERIMENTAL_ARC
if (dkim->arc_signspec) /* Prepend ARC headers */
{
- uschar * e;
+ uschar * e
= NULL
;
if (!(dkim_signature = arc_sign(dkim->arc_signspec, dkim_signature, &e)))
{
*err = e;
if (!(dkim_signature = arc_sign(dkim->arc_signspec, dkim_signature, &e)))
{
*err = e;
@@
-382,6
+384,8
@@
BOOL
dkim_transport_write_message(transport_ctx * tctx,
struct ob_dkim * dkim, const uschar ** err)
{
dkim_transport_write_message(transport_ctx * tctx,
struct ob_dkim * dkim, const uschar ** err)
{
+BOOL yield;
+
/* If we can't sign, just call the original function. */
if ( !(dkim->dkim_private_key && dkim->dkim_domain && dkim->dkim_selector)
/* If we can't sign, just call the original function. */
if ( !(dkim->dkim_private_key && dkim->dkim_domain && dkim->dkim_selector)
@@
-396,12
+400,16
@@
if ( !transport_filter_argv
|| !*transport_filter_argv
|| !**transport_filter_argv
)
|| !*transport_filter_argv
|| !**transport_filter_argv
)
- return dkt_direct(tctx, dkim, err);
+ yield = dkt_direct(tctx, dkim, err);
+
+else
+ /* Use the transport path to write a file, calculate a dkim signature,
+ send the signature and then send the file. */
-/* Use the transport path to write a file, calculate a dkim signature,
-send the signature and then send the file. */
+ yield = dkt_via_kfile(tctx, dkim, err);
-return dkt_via_kfile(tctx, dkim, err);
+tctx->addr->dkim_used = string_from_gstring(dkim_signing_record);
+return yield;
}
#endif /* whole file */
}
#endif /* whole file */