From 7482553d06b156505e38b4cb1b72324bcfb62b37 Mon Sep 17 00:00:00 2001 From: Jeremy Harris Date: Thu, 25 Jul 2024 14:37:21 +0100 Subject: [PATCH] Build: move xtext routines out of auths drivers to main --- src/OS/Makefile-Base | 3 +- src/scripts/MakeLinks | 4 +- src/src/auths/Makefile | 4 +- src/src/auths/xtextencode.c | 44 ------------------- src/src/deliver.c | 6 +-- src/src/expand.c | 2 +- src/src/functions.h | 4 +- src/src/smtp_in.c | 2 +- src/src/transports/smtp.c | 2 +- src/src/xclient.c | 2 +- .../{auths/xtextdecode.c => xtextencode.c} | 41 ++++++++++++++--- 11 files changed, 50 insertions(+), 64 deletions(-) delete mode 100644 src/src/auths/xtextencode.c rename src/src/{auths/xtextdecode.c => xtextencode.c} (61%) diff --git a/src/OS/Makefile-Base b/src/OS/Makefile-Base index 1daded431..4df9451f8 100644 --- a/src/OS/Makefile-Base +++ b/src/OS/Makefile-Base @@ -518,7 +518,7 @@ OBJ_EXIM = acl.o base64.o child.o crypt16.o daemon.o dbfn.o debug.o deliver.o \ rda.o readconf.o receive.o retry.o rewrite.o rfc2047.o regex_cache.o \ route.o search.o sieve.o smtp_in.o smtp_out.o spool_in.o spool_out.o \ std-crypto.o store.o string.o tls.o tod.o transport.o tree.o verify.o \ - environment.o macro.o \ + xtextencode.o environment.o macro.o \ $(OBJ_LOOKUPS) \ local_scan.o $(EXIM_PERL) $(OBJ_WITH_CONTENT_SCAN) \ $(OBJ_EXPERIMENTAL) @@ -869,6 +869,7 @@ tod.o: $(HDRS) tod.c transport.o: $(HDRS) transport.c tree.o: $(HDRS) tree.c verify.o: $(HDRS) transports/smtp.h verify.c +xtextencode.o: $(HDRS) xtextencode.c dkim.o: $(HDRS) pdkim/pdkim.h dkim.c dkim_transport.o: $(HDRS) dkim_transport.c diff --git a/src/scripts/MakeLinks b/src/scripts/MakeLinks index cda5ef65b..77dbe26bd 100755 --- a/src/scripts/MakeLinks +++ b/src/scripts/MakeLinks @@ -78,7 +78,7 @@ cd $d for f in README Makefile call_pam.c call_pwcheck.c \ call_radius.c check_serv_cond.c cyrus_sasl.c cyrus_sasl.h gsasl_exim.c \ gsasl_exim.h get_data.c get_no64_data.c heimdal_gssapi.c heimdal_gssapi.h \ - xtextencode.c xtextdecode.c cram_md5.c cram_md5.h plaintext.c plaintext.h \ + cram_md5.c cram_md5.h plaintext.c plaintext.h \ pwcheck.c pwcheck.h auth-spa.c auth-spa.h dovecot.c dovecot.h sha1.c spa.c \ spa.h tls.c tls.h external.c external.h do @@ -125,7 +125,7 @@ for f in blob.h dbfunctions.h exim.h functions.h globals.h \ sieve.c smtp_in.c smtp_out.c spool_in.c spool_out.c std-crypto.c store.c \ string.c tls.c tlscert-gnu.c tlscert-openssl.c tls-cipher-stdname.c \ tls-gnu.c tls-openssl.c \ - tod.c transport.c tree.c verify.c version.c \ + tod.c transport.c tree.c verify.c version.c xtextencode.c \ dkim.c dkim.h dkim_transport.c dmarc.c dmarc.h \ valgrind.h memcheck.h \ macro_predef.c macro_predef.h diff --git a/src/src/auths/Makefile b/src/src/auths/Makefile index e85b22a8a..ac5cf865b 100644 --- a/src/src/auths/Makefile +++ b/src/src/auths/Makefile @@ -9,7 +9,7 @@ OBJ = auth-spa.o call_pam.o call_pwcheck.o \ call_radius.o check_serv_cond.o cram_md5.o cyrus_sasl.o dovecot.o \ external.o get_data.o get_no64_data.o gsasl_exim.o heimdal_gssapi.o \ plaintext.o pwcheck.o \ - spa.o tls.o xtextdecode.o xtextencode.o + spa.o tls.o auths.a: $(OBJ) @$(RM_COMMAND) -f auths.a @@ -29,8 +29,6 @@ check_serv_cond.o: $(HDRS) check_serv_cond.c get_data.o: $(HDRS) get_data.c get_no64_data.o: $(HDRS) get_no64_data.c pwcheck.o: $(HDRS) pwcheck.c pwcheck.h -xtextdecode.o: $(HDRS) xtextdecode.c -xtextencode.o: $(HDRS) xtextencode.c cram_md5.o: $(HDRS) cram_md5.c cram_md5.h cyrus_sasl.o: $(HDRS) cyrus_sasl.c cyrus_sasl.h diff --git a/src/src/auths/xtextencode.c b/src/src/auths/xtextencode.c deleted file mode 100644 index 04cd302de..000000000 --- a/src/src/auths/xtextencode.c +++ /dev/null @@ -1,44 +0,0 @@ -/************************************************* -* Exim - an Internet mail transport agent * -*************************************************/ - -/* Copyright (c) The Exim Maintainers 2022 - 2024 */ -/* 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 */ - -#include "../exim.h" - - -/************************************************* -* Encode byte-string in xtext * -*************************************************/ - -/* This function encodes a string of bytes, containing any values whatsoever, -as "xtext", as defined in RFC 1891 and required by the SMTP AUTH extension (RFC -2554). - -Arguments: - clear points to the clear text bytes - len the number of bytes to encode - -Returns: a pointer to the zero-terminated xtext string, which - is in working store -*/ - -uschar * -auth_xtextencode(uschar *clear, int len) -{ -gstring * g = NULL; -for(uschar ch; len > 0; len--, clear++) - g = (ch = *clear) < 33 || ch > 126 || ch == '+' || ch == '=' - ? string_fmt_append(g, "+%.02X", ch) - : string_catn(g, clear, 1); -gstring_release_unused(g); -return string_from_gstring(g); -} - - -/* End of xtextencode.c */ -/* vi: aw ai sw=2 -*/ diff --git a/src/src/deliver.c b/src/src/deliver.c index 64a53c7ba..19b5c81df 100644 --- a/src/src/deliver.c +++ b/src/src/deliver.c @@ -6085,7 +6085,7 @@ wording. */ { /* must be decoded from xtext: see RFC 3461:6.3a */ uschar * xdec_envid; - if (auth_xtextdecode(dsn_envid, &xdec_envid) > 0) + if (xtextdecode(dsn_envid, &xdec_envid) > 0) fprintf(fp, "Original-Envelope-ID: %s\n", dsn_envid); else fprintf(fp, "X-Original-Envelope-ID: error decoding xtext formatted ENVID\n"); @@ -6390,7 +6390,7 @@ if (dsn_envid) { /* must be decoded from xtext: see RFC 3461:6.3a */ uschar *xdec_envid; - if (auth_xtextdecode(dsn_envid, &xdec_envid) > 0) + if (xtextdecode(dsn_envid, &xdec_envid) > 0) fprintf(f,"Original-Envelope-ID: %s\n", dsn_envid); else fprintf(f,"X-Original-Envelope-ID: error decoding xtext formatted ENVID\n"); @@ -6549,7 +6549,7 @@ if (addr_senddsn) if (dsn_envid) { /* must be decoded from xtext: see RFC 3461:6.3a */ uschar * xdec_envid; - if (auth_xtextdecode(dsn_envid, &xdec_envid) > 0) + if (xtextdecode(dsn_envid, &xdec_envid) > 0) fprintf(f, "Original-Envelope-ID: %s\n", dsn_envid); else fprintf(f, "X-Original-Envelope-ID: error decoding xtext formatted ENVID\n"); diff --git a/src/src/expand.c b/src/src/expand.c index 8232ed942..ca9c7c3ac 100644 --- a/src/src/expand.c +++ b/src/src/expand.c @@ -8329,7 +8329,7 @@ NOT_ITEM: ; case EOP_XTEXTD: { uschar * s; - int len = auth_xtextdecode(sub, &s); + int len = xtextdecode(sub, &s); yield = string_catn(yield, s, len); break; } diff --git a/src/src/functions.h b/src/src/functions.h index 4bd6ff51b..079e94f5e 100644 --- a/src/src/functions.h +++ b/src/src/functions.h @@ -137,8 +137,6 @@ extern int auth_get_no64_data(uschar **, uschar *); extern int auth_prompt(const uschar *); extern int auth_read_input(const uschar *); extern gstring * auth_show_supported(gstring *); -extern uschar *auth_xtextencode(uschar *, int); -extern int auth_xtextdecode(uschar *, uschar **); extern uschar *authenticator_current_name(void); #ifdef EXPERIMENTAL_ARC @@ -693,6 +691,8 @@ extern uschar *wrap_header(const uschar *, unsigned, unsigned, const uschar *, u extern uschar * xclient_smtp_command(uschar *, int *, BOOL *); extern gstring * xclient_smtp_advertise_str(gstring *); #endif +extern uschar *xtextencode(uschar *, int); +extern int xtextdecode(uschar *, uschar **); /******************************************************************************/ diff --git a/src/src/smtp_in.c b/src/src/smtp_in.c index f8656a6e8..eadad682b 100644 --- a/src/src/smtp_in.c +++ b/src/src/smtp_in.c @@ -4565,7 +4565,7 @@ while (done <= 0) int rc; uschar *ignore_msg; - if (auth_xtextdecode(value, &authenticated_sender) < 0) + if (xtextdecode(value, &authenticated_sender) < 0) { /* Put back terminator overrides for error message */ value[-1] = '='; diff --git a/src/src/transports/smtp.c b/src/src/transports/smtp.c index 5b54fa1ae..769c5d235 100644 --- a/src/src/transports/smtp.c +++ b/src/src/transports/smtp.c @@ -1809,7 +1809,7 @@ if ( (f.smtp_authenticated || ob->authenticated_sender_force) && local_authenticated_sender) { string_format_nt(p, sizeof(sx->buffer) - (p-sx->buffer), " AUTH=%s", - auth_xtextencode(local_authenticated_sender, + xtextencode(local_authenticated_sender, Ustrlen(local_authenticated_sender))); client_authenticated_sender = string_copy(local_authenticated_sender); } diff --git a/src/src/xclient.c b/src/src/xclient.c index cca5dd887..af2f287b9 100644 --- a/src/src/xclient.c +++ b/src/src/xclient.c @@ -66,7 +66,7 @@ Returns: the number of bytes in the result, excluding the final zero; static int xclient_xtextdecode(uschar * code, uschar * end, uschar ** ptr) { -return auth_xtextdecode(string_copyn(code, end-code), ptr); +return xtextdecode(string_copyn(code, end-code), ptr); } /************************************************* diff --git a/src/src/auths/xtextdecode.c b/src/src/xtextencode.c similarity index 61% rename from src/src/auths/xtextdecode.c rename to src/src/xtextencode.c index d261801ae..fa2b26bed 100644 --- a/src/src/auths/xtextdecode.c +++ b/src/src/xtextencode.c @@ -2,12 +2,41 @@ * Exim - an Internet mail transport agent * *************************************************/ -/* Copyright (c) The Exim Maintainers 2022 - 2023 */ -/* Copyright (c) University of Cambridge 1995 - 2009 */ +/* Copyright (c) The Exim Maintainers 2022 - 2024 */ +/* 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 */ -#include "../exim.h" +#include "exim.h" + + +/************************************************* +* Encode byte-string in xtext * +*************************************************/ + +/* This function encodes a string of bytes, containing any values whatsoever, +as "xtext", as defined in RFC 1891 and required by the SMTP AUTH extension (RFC +2554). + +Arguments: + clear points to the clear text bytes + len the number of bytes to encode + +Returns: a pointer to the zero-terminated xtext string, which + is in working store +*/ + +uschar * +xtextencode(uschar *clear, int len) +{ +gstring * g = NULL; +for(uschar ch; len > 0; len--, clear++) + g = (ch = *clear) < 33 || ch > 126 || ch == '+' || ch == '=' + ? string_fmt_append(g, "+%.02X", ch) + : string_catn(g, clear, 1); +gstring_release_unused(g); +return string_from_gstring(g); +} /************************************************* @@ -32,7 +61,7 @@ Returns: the number of bytes in the result, excluding the final zero; */ int -auth_xtextdecode(uschar * code, uschar ** ptr) +xtextdecode(uschar * code, uschar ** ptr) { int x; uschar * result = store_get(Ustrlen(code) + 1, code); @@ -56,4 +85,6 @@ while ((x = (*code++)) != 0) return result - *ptr; } -/* End of xtextdecode.c */ +/* End of xtextencode.c */ +/* vi: aw ai sw=2 +*/ -- 2.30.2