From: Jeremy Harris Date: Sat, 5 Feb 2022 22:32:12 +0000 (+0000) Subject: Debug: handle exact-fill of pretrigger buffer X-Git-Tag: exim-4.96-RC0~77 X-Git-Url: https://git.exim.org/exim.git/commitdiff_plain/70918f02eecc64d5033b9831a393f2eca3c4709d Debug: handle exact-fill of pretrigger buffer --- diff --git a/src/src/debug.c b/src/src/debug.c index 7b9be057b..f71146220 100644 --- a/src/src/debug.c +++ b/src/src/debug.c @@ -322,7 +322,7 @@ if (debug_ptr[-1] == '\n') if (debug_pretrigger_buf) { - int needed = Ustrlen(debug_buffer), avail; + int needed = Ustrlen(debug_buffer)+1, avail; char c; if (needed > debug_pretrigger_bsize) @@ -343,6 +343,7 @@ if (debug_ptr[-1] == '\n') } while (c && c != '\n' && pretrigger_readoff != pretrigger_writeoff); + needed--; for (int i = 0; needed; i++, needed--) { debug_pretrigger_buf[pretrigger_writeoff] = debug_buffer[i]; diff --git a/test/confs/0630 b/test/confs/0630 index b83790f19..d641967bf 100644 --- a/test/confs/0630 +++ b/test/confs/0630 @@ -14,7 +14,7 @@ acl_smtp_rcpt = chk_rcpt begin acl chk_mail: - accept control = debug/tag=_router/opts=+all/pretrigger=2040/trigger=paniclog + accept control = debug/tag=_router/opts=+all/pretrigger=800/trigger=paniclog chk_rcpt: accept @@ -25,8 +25,9 @@ begin routers r0: # cause paniclog write (by using a tainted filename) + # keep the path non-variable driver = redirect - local_parts = $spool_directory/$local_part + local_parts = /$local_part data = :blackhole: # # End diff --git a/test/log/0630 b/test/log/0630 index 86dfe447e..82a6c823b 100644 --- a/test/log/0630 +++ b/test/log/0630 @@ -2,5 +2,5 @@ ******** SERVER ******** 1999-03-02 09:44:33 exim x.yz daemon started: pid=pppp, no queue runs, listening for SMTP on port PORT_D 1999-03-02 09:44:33 10HmaX-0005vi-00 <= test_3@paniclogrouter H=(test.ex) [127.0.0.1] P=esmtp S=sss -1999-03-02 09:44:33 10HmaX-0005vi-00 Tainted filename 'TESTSUITE/spool/dest3' -1999-03-02 09:44:33 10HmaX-0005vi-00 failed to open TESTSUITE/spool/dest3 when checking "$spool_directory/$local_part": Permission denied (euid=uuuu egid=EXIM_GID) +1999-03-02 09:44:33 10HmaX-0005vi-00 Tainted filename '/dest3' +1999-03-02 09:44:33 10HmaX-0005vi-00 failed to open /dest3 when checking "/$local_part": Permission denied (euid=uuuu egid=EXIM_GID) diff --git a/test/paniclog/0630 b/test/paniclog/0630 index 6e72b86ed..65080a7f6 100644 --- a/test/paniclog/0630 +++ b/test/paniclog/0630 @@ -1,4 +1,4 @@ ******** SERVER ******** -1999-03-02 09:44:33 10HmaX-0005vi-00 Tainted filename 'TESTSUITE/spool/dest3' -1999-03-02 09:44:33 10HmaX-0005vi-00 failed to open TESTSUITE/spool/dest3 when checking "$spool_directory/$local_part": Permission denied (euid=uuuu egid=EXIM_GID) +1999-03-02 09:44:33 10HmaX-0005vi-00 Tainted filename '/dest3' +1999-03-02 09:44:33 10HmaX-0005vi-00 failed to open /dest3 when checking "/$local_part": Permission denied (euid=uuuu egid=EXIM_GID) diff --git a/test/stderr/0630 b/test/stderr/0630 index 271f4499b..0aaf71ac8 100644 --- a/test/stderr/0630 +++ b/test/stderr/0630 @@ -1,23 +1,3 @@ -01:01:01 1234 reading spool file 10HmaX-0005vi-00-H -01:01:01 1234 user=EXIMUSER uid=EXIM_UID gid=EXIM_GID sender=test_3@paniclogrouter -01:01:01 1234 sender_fullhost = (test.ex) [127.0.0.1] -01:01:01 1234 sender_rcvhost = [127.0.0.1] (helo=test.ex) -01:01:01 1234 sender_local=0 ident=unset -01:01:01 1234 Non-recipients: -01:01:01 1234 Empty Tree -01:01:01 1234 ---- End of tree ---- -01:01:01 1234 recipients_count=1 -01:01:01 1234 **** SPOOL_IN - No additional fields -01:01:01 1234 body_linecount=0 message_linecount=6 -01:01:01 1234 DSN: set orcpt: flags: 0x0 -01:01:01 1234 Delivery address list: -01:01:01 1234 dest3@test.ex -01:01:01 1234 locking TESTSUITE/spool/db/retry.lockfile -01:01:01 1234 locked TESTSUITE/spool/db/retry.lockfile -01:01:01 1234 EXIM_DBOPEN: file dir flags=O_RDONLY -01:01:01 1234 returned from EXIM_DBOPEN: (nil) -01:01:01 1234 failed to open DB file TESTSUITE/spool/db/retry: No such file or directory -01:01:01 1234 no retry data available 01:01:01 1234 >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> 01:01:01 1234 Considering: dest3@test.ex 01:01:01 1234 unique = dest3@test.ex @@ -29,17 +9,16 @@ 01:01:01 1234 --------> r0 router <-------- 01:01:01 1234 local_part=dest3 domain=test.ex 01:01:01 1234 checking local_parts -01:01:01 1234 ╭considering: $spool_directory/$local_part -01:01:01 1234 ├considering: /$local_part +01:01:01 1234 ╭considering: /$local_part 01:01:01 1234 ├───────text: / 01:01:01 1234 ├considering: $local_part -01:01:01 1234 ├──expanding: $spool_directory/$local_part -01:01:01 1234 ╰─────result: TESTSUITE/spool/dest3 +01:01:01 1234 ├──expanding: /$local_part +01:01:01 1234 ╰─────result: /dest3 01:01:01 1234 ╰──(tainted) 01:01:01 1234 LOG: MAIN PANIC -01:01:01 1234 Tainted filename 'TESTSUITE/spool/dest3' +01:01:01 1234 Tainted filename '/dest3' 01:01:01 1234 LOG: MAIN PANIC DIE -01:01:01 1234 failed to open TESTSUITE/spool/dest3 when checking "$spool_directory/$local_part": Permission denied (euid=uuuu egid=EXIM_GID) +01:01:01 1234 failed to open /dest3 when checking "/$local_part": Permission denied (euid=uuuu egid=EXIM_GID) 01:01:01 1234 search_tidyup called 01:01:01 1234 >>>>>>>>>>>>>>>> Exim pid=pppp (daemon-accept-delivery) terminating with rc=1 >>>>>>>>>>>>>>>>