Hintsdb: fix sqlite
authorJeremy Harris <jgh146exb@wizmail.org>
Sat, 20 Jul 2024 18:16:36 +0000 (19:16 +0100)
committerJeremy Harris <jgh146exb@wizmail.org>
Sat, 20 Jul 2024 18:16:36 +0000 (19:16 +0100)
Broken-by: 3cee6033bae8
src/src/dbfn.c
src/src/deliver.c
test/log/0367
test/runtest
test/scripts/0000-Basic/0367
test/stderr/0218
test/stderr/1157
test/stdout/0367

index 1f69891646f0a73f6db0dfd146f973bba75f1a99..27bd9e56c23ee161eb45a5b73c4e10c01fef834b 100644 (file)
@@ -256,6 +256,7 @@ uschar dirname[PATHLEN], filename[PATHLEN];
 DEBUG(D_hints_lookup) acl_level++;
 
 dbblock->lockfd = -1;
+dbblock->readonly = (flags & O_ACCMODE) == O_RDONLY;
 db_dir_make(TRUE);
 
 dlen = snprintf(CS dirname, sizeof(dirname), "%s/db", spool_directory);
@@ -295,11 +296,13 @@ return dbblock;
 }
 
 
+/* Return: boolean success */
 BOOL
 dbfn_transaction_start(open_db * dbp)
 {
 DEBUG(D_hints_lookup) debug_printf_indent("dbfn_transaction_start\n");
 if (!dbp->readonly) return exim_dbtransaction_start(dbp->dbptr);
+return FALSE;
 }
 void
 dbfn_transaction_commit(open_db * dbp)
index ee7650243199607ae2086f148e3a58d6ac6c4a10..8aeedc755138accc8064ec4b5518241467a5f0ea 100644 (file)
@@ -4794,6 +4794,10 @@ do_remote_deliveries par_reduce par_wait par_read_pipe
 */
 
   /*XXX what about firsttime? */
+  /*XXX also, ph1? Note tp->name would possibly change per message,
+  so a check/close/open would be needed. Might was to change that var name
+  "continue_wait_db" as we'd be using it for a non-continued-transport
+  context. */
   if (continue_transport && !exim_lockfile_needed())
     if (!continue_wait_db)
       {
@@ -4804,7 +4808,7 @@ do_remote_deliveries par_reduce par_wait par_read_pipe
       continue_next_id[0] = '\0';
       }
 
-  if ((pid = exim_fork(US"transport")) == 0)
+  if ((pid = exim_fork(f.queue_2stage ? US"transport ph1":US"transport")) == 0)
     {
     int fd = pfd[pipe_write];
     host_item *h;
index bfc366ac09271e76ef0b4037f3a09f64b80e60f4..0e5352d0b5bcfab643f134fe8e04bfa9ecbe3b57 100644 (file)
@@ -3,12 +3,12 @@
 1999-03-02 09:44:33 10HmaZ-000000005vi-0000 <= CALLER@test.ex U=CALLER P=local S=sss
 1999-03-02 09:44:33 10HmbA-000000005vi-0000 <= CALLER@test.ex U=CALLER P=local S=sss
 1999-03-02 09:44:33 Start queue run: pid=p1234 -qqf
-1999-03-02 09:44:33 10HmaX-000000005vi-0000 => userx@domain1 R=others T=smtp H=127.0.0.1 [127.0.0.1] C="250 OK"
+1999-03-02 09:44:33 10HmaX-000000005vi-0000 => userx1@domain1 R=others T=smtp H=127.0.0.1 [127.0.0.1] C="250 OK"
 1999-03-02 09:44:33 10HmaX-000000005vi-0000 Completed
-1999-03-02 09:44:33 10HmaY-000000005vi-0000 => userx@domain1 R=others T=smtp H=127.0.0.1 [127.0.0.1]* C="250 OK"
+1999-03-02 09:44:33 10HmaY-000000005vi-0000 => userx2@domain1 R=others T=smtp H=127.0.0.1 [127.0.0.1]* C="250 OK"
 1999-03-02 09:44:33 10HmaY-000000005vi-0000 Completed
-1999-03-02 09:44:33 10HmaZ-000000005vi-0000 => userx@domain1 R=others T=smtp H=127.0.0.1 [127.0.0.1]* C="250 OK"
+1999-03-02 09:44:33 10HmaZ-000000005vi-0000 => userx3@domain1 R=others T=smtp H=127.0.0.1 [127.0.0.1]* C="250 OK"
 1999-03-02 09:44:33 10HmaZ-000000005vi-0000 Completed
-1999-03-02 09:44:33 10HmbA-000000005vi-0000 => userx@domain1 R=others T=smtp H=127.0.0.1 [127.0.0.1]* C="250 OK"
+1999-03-02 09:44:33 10HmbA-000000005vi-0000 => userx4@domain1 R=others T=smtp H=127.0.0.1 [127.0.0.1]* C="250 OK"
 1999-03-02 09:44:33 10HmbA-000000005vi-0000 Completed
 1999-03-02 09:44:33 End queue run: pid=p1234 -qqf
index 6a00a464250a687eaa3cc20cb7d76e6ab28dbdaa..3b936de3d2c55eab90727bae2aadb9bc2959f318 100755 (executable)
@@ -1199,8 +1199,8 @@ RESET_AFTER_EXTRA_LINE_READ:
     s/(?:bdb|tdb|gdbm|ndbm|sqlite)
       _open\(flags\ 0x(\d)
       \ mode\ 0640\)
-      (?=\ No\ such\ file\ or\ directory$)
-     /hintsdb_open(flags 0x$1 mode 0640)/x;
+      \ (?:No\ such\ file\ or\ directory|unable\ to\ open\ database\ file)$
+     /hintsdb_open(flags 0x$1 mode 0640) No such file or directory/x;
 
     # Lines with a leading pid.  Only handle >= 4-digit PIDs to avoid converting SMTP respose codes
     s/^\s*(\d{4,})\s(?!(?:previous message|in\s|bytes remain in|SMTP accept process running))/new_value($1, "p%s", \$next_pid) . ' '/e;
index 0c03b391b2719f549cd11b94c21cecd4a0bca6e3..a8a06b83c1b3d4dbe5e21fdd5c7ab2fac5697437 100644 (file)
@@ -1,16 +1,16 @@
 # Multiple messages down one SMTP connection
 need_ipv4
 #
-exim -odq userx@domain1
+exim -odq userx1@domain1
 Test message 1
 ****
-exim -odq userx@domain1
+exim -odq userx2@domain1
 Test message 2
 ****
-exim -odq userx@domain1
+exim -odq userx3@domain1
 Test message 3
 ****
-exim -odq userx@domain1
+exim -odq userx4@domain1
 Test message 4
 ****
 server PORT_S
index 49afcdcc9473b95c1359f93fac7207895cab47a4..91d2c7104d35aeb93892c4c113dffbc14f067a40 100644 (file)
@@ -13,14 +13,14 @@ test.ex in ""? no (end of list)
 CALLER@test.ex in senders? no (end of list)
 R: client  (ACL)
 T: send_to_server  (ACL)
->>>>>>>>>>>>>>>> Exim pid=p1237 (transport) terminating with rc=0 >>>>>>>>>>>>>>>>
+>>>>>>>>>>>>>>>> Exim pid=p1237 (transport ph1) terminating with rc=0 >>>>>>>>>>>>>>>>
 >>>>>>>>>>>>>>>> Exim pid=p1238 (qrun-p1-delivery) terminating with rc=0 >>>>>>>>>>>>>>>>
 delivering 10HmaY-000000005vi-0000 (queue run pid p1234)
 test.ex in ""? no (end of list)
 CALLER@test.ex in senders? no (end of list)
 R: client  (ACL)
 T: send_to_server  (ACL)
->>>>>>>>>>>>>>>> Exim pid=p1239 (transport) terminating with rc=0 >>>>>>>>>>>>>>>>
+>>>>>>>>>>>>>>>> Exim pid=p1239 (transport ph1) terminating with rc=0 >>>>>>>>>>>>>>>>
 >>>>>>>>>>>>>>>> Exim pid=p1240 (qrun-p1-delivery) terminating with rc=0 >>>>>>>>>>>>>>>>
 queue_run phase 2 start
 queue running combined directories
@@ -95,14 +95,14 @@ test.ex in ""? no (end of list)
 CALLER@test.ex in senders? no (end of list)
 R: client  (ACL)
 T: send_to_server  (ACL)
->>>>>>>>>>>>>>>> Exim pid=p1244 (transport) terminating with rc=0 >>>>>>>>>>>>>>>>
+>>>>>>>>>>>>>>>> Exim pid=p1244 (transport ph1) terminating with rc=0 >>>>>>>>>>>>>>>>
 >>>>>>>>>>>>>>>> Exim pid=p1245 (qrun-p1-delivery) terminating with rc=0 >>>>>>>>>>>>>>>>
 delivering 10HmbA-000000005vi-0000 (queue run pid p1235)
 test.ex in ""? no (end of list)
 CALLER@test.ex in senders? no (end of list)
 R: client  (ACL)
 T: send_to_server  (ACL)
->>>>>>>>>>>>>>>> Exim pid=p1246 (transport) terminating with rc=0 >>>>>>>>>>>>>>>>
+>>>>>>>>>>>>>>>> Exim pid=p1246 (transport ph1) terminating with rc=0 >>>>>>>>>>>>>>>>
 >>>>>>>>>>>>>>>> Exim pid=p1247 (qrun-p1-delivery) terminating with rc=0 >>>>>>>>>>>>>>>>
 queue_run phase 2 start
 queue running combined directories
@@ -172,7 +172,7 @@ test.ex in ""? no (end of list)
 CALLER@test.ex in senders? no (end of list)
 R: client  (ACL)
 T: send_to_server  (ACL)
->>>>>>>>>>>>>>>> Exim pid=p1253 (transport) terminating with rc=0 >>>>>>>>>>>>>>>>
+>>>>>>>>>>>>>>>> Exim pid=p1253 (transport ph1) terminating with rc=0 >>>>>>>>>>>>>>>>
 >>>>>>>>>>>>>>>> Exim pid=p1254 (qrun-p1-delivery) terminating with rc=0 >>>>>>>>>>>>>>>>
 delivering 10HmbB-000000005vi-0000 (queue run pid p1236)
 R: bounce  (ACL)
@@ -188,7 +188,7 @@ test.ex in ""? no (end of list)
 CALLER@test.ex in senders? no (end of list)
 R: client  (ACL)
 T: send_to_server  (ACL)
->>>>>>>>>>>>>>>> Exim pid=p1256 (transport) terminating with rc=0 >>>>>>>>>>>>>>>>
+>>>>>>>>>>>>>>>> Exim pid=p1256 (transport ph1) terminating with rc=0 >>>>>>>>>>>>>>>>
 >>>>>>>>>>>>>>>> Exim pid=p1257 (qrun-p1-delivery) terminating with rc=0 >>>>>>>>>>>>>>>>
 delivering 10HmbA-000000005vi-0000 (queue run pid p1236)
 test.ex in ""? no (end of list)
index 95adc39607579cf355558ca79fc451dbaa0bbeb6..3d55a28c50527ef4ba14cf9f67edb76ed4892215 100644 (file)
@@ -5,11 +5,11 @@ admin user
 dropping to exim gid; retaining priv uid
 LOG: queue_run MAIN
   Start queue run: pid=p1234 -qqf
->>>>>>>>>>>>>>>> Exim pid=p1242 (transport) terminating with rc=0 >>>>>>>>>>>>>>>>
+>>>>>>>>>>>>>>>> Exim pid=p1242 (transport ph1) terminating with rc=0 >>>>>>>>>>>>>>>>
 >>>>>>>>>>>>>>>> Exim pid=p1243 (qrun-p1-delivery) terminating with rc=0 >>>>>>>>>>>>>>>>
->>>>>>>>>>>>>>>> Exim pid=p1244 (transport) terminating with rc=0 >>>>>>>>>>>>>>>>
+>>>>>>>>>>>>>>>> Exim pid=p1244 (transport ph1) terminating with rc=0 >>>>>>>>>>>>>>>>
 >>>>>>>>>>>>>>>> Exim pid=p1245 (qrun-p1-delivery) terminating with rc=0 >>>>>>>>>>>>>>>>
->>>>>>>>>>>>>>>> Exim pid=p1246 (transport) terminating with rc=0 >>>>>>>>>>>>>>>>
+>>>>>>>>>>>>>>>> Exim pid=p1246 (transport ph1) terminating with rc=0 >>>>>>>>>>>>>>>>
 >>>>>>>>>>>>>>>> Exim pid=p1247 (qrun-p1-delivery) terminating with rc=0 >>>>>>>>>>>>>>>>
 Connecting to 127.0.0.1 [127.0.0.1]:PORT_D ...
 connected
@@ -100,11 +100,11 @@ admin user
 dropping to exim gid; retaining priv uid
 LOG: queue_run MAIN
   Start queue run: pid=p1235 -qqf
->>>>>>>>>>>>>>>> Exim pid=p1253 (transport) terminating with rc=0 >>>>>>>>>>>>>>>>
+>>>>>>>>>>>>>>>> Exim pid=p1253 (transport ph1) terminating with rc=0 >>>>>>>>>>>>>>>>
 >>>>>>>>>>>>>>>> Exim pid=p1254 (qrun-p1-delivery) terminating with rc=0 >>>>>>>>>>>>>>>>
->>>>>>>>>>>>>>>> Exim pid=p1255 (transport) terminating with rc=0 >>>>>>>>>>>>>>>>
+>>>>>>>>>>>>>>>> Exim pid=p1255 (transport ph1) terminating with rc=0 >>>>>>>>>>>>>>>>
 >>>>>>>>>>>>>>>> Exim pid=p1256 (qrun-p1-delivery) terminating with rc=0 >>>>>>>>>>>>>>>>
->>>>>>>>>>>>>>>> Exim pid=p1257 (transport) terminating with rc=0 >>>>>>>>>>>>>>>>
+>>>>>>>>>>>>>>>> Exim pid=p1257 (transport ph1) terminating with rc=0 >>>>>>>>>>>>>>>>
 >>>>>>>>>>>>>>>> Exim pid=p1258 (qrun-p1-delivery) terminating with rc=0 >>>>>>>>>>>>>>>>
 Connecting to 127.0.0.1 [127.0.0.1]:PORT_D ...
 connected
@@ -195,11 +195,11 @@ admin user
 dropping to exim gid; retaining priv uid
 LOG: queue_run MAIN
   Start queue run: pid=p1236 -qqf
->>>>>>>>>>>>>>>> Exim pid=p1264 (transport) terminating with rc=0 >>>>>>>>>>>>>>>>
+>>>>>>>>>>>>>>>> Exim pid=p1264 (transport ph1) terminating with rc=0 >>>>>>>>>>>>>>>>
 >>>>>>>>>>>>>>>> Exim pid=p1265 (qrun-p1-delivery) terminating with rc=0 >>>>>>>>>>>>>>>>
->>>>>>>>>>>>>>>> Exim pid=p1266 (transport) terminating with rc=0 >>>>>>>>>>>>>>>>
+>>>>>>>>>>>>>>>> Exim pid=p1266 (transport ph1) terminating with rc=0 >>>>>>>>>>>>>>>>
 >>>>>>>>>>>>>>>> Exim pid=p1267 (qrun-p1-delivery) terminating with rc=0 >>>>>>>>>>>>>>>>
->>>>>>>>>>>>>>>> Exim pid=p1268 (transport) terminating with rc=0 >>>>>>>>>>>>>>>>
+>>>>>>>>>>>>>>>> Exim pid=p1268 (transport ph1) terminating with rc=0 >>>>>>>>>>>>>>>>
 >>>>>>>>>>>>>>>> Exim pid=p1269 (qrun-p1-delivery) terminating with rc=0 >>>>>>>>>>>>>>>>
 Connecting to 127.0.0.1 [127.0.0.1]:PORT_D ...
 connected
index 1f42f534aa0d67db2f9a791164c3cf56297be5e9..86165b4455fc4596e1bfdb90ef988c9d23b69878 100644 (file)
@@ -8,14 +8,14 @@ EHLO the.local.host.name
 250 HELP
 MAIL FROM:<CALLER@test.ex>
 250 OK
-RCPT TO:<userx@domain1>
+RCPT TO:<userx1@domain1>
 250 OK
 DATA
 354 More...
 Received: from CALLER by the.local.host.name with local (Exim x.yz)
        (envelope-from <CALLER@test.ex>)
        id 10HmaX-000000005vi-0000
-       for userx@domain1;
+       for userx1@domain1;
        Tue, 2 Mar 1999 09:44:33 +0000
 Message-Id: <E10HmaX-000000005vi-0000@the.local.host.name>
 From: CALLER_NAME <CALLER@test.ex>
@@ -26,14 +26,14 @@ Test message 1
 250 OK
 MAIL FROM:<CALLER@test.ex>
 250 OK
-RCPT TO:<userx@domain1>
+RCPT TO:<userx2@domain1>
 250 OK
 DATA
 354 More...
 Received: from CALLER by the.local.host.name with local (Exim x.yz)
        (envelope-from <CALLER@test.ex>)
        id 10HmaY-000000005vi-0000
-       for userx@domain1;
+       for userx2@domain1;
        Tue, 2 Mar 1999 09:44:33 +0000
 Message-Id: <E10HmaY-000000005vi-0000@the.local.host.name>
 From: CALLER_NAME <CALLER@test.ex>
@@ -44,14 +44,14 @@ Test message 2
 250 OK
 MAIL FROM:<CALLER@test.ex>
 250 OK
-RCPT TO:<userx@domain1>
+RCPT TO:<userx3@domain1>
 250 OK
 DATA
 354 More...
 Received: from CALLER by the.local.host.name with local (Exim x.yz)
        (envelope-from <CALLER@test.ex>)
        id 10HmaZ-000000005vi-0000
-       for userx@domain1;
+       for userx3@domain1;
        Tue, 2 Mar 1999 09:44:33 +0000
 Message-Id: <E10HmaZ-000000005vi-0000@the.local.host.name>
 From: CALLER_NAME <CALLER@test.ex>
@@ -62,14 +62,14 @@ Test message 3
 250 OK
 MAIL FROM:<CALLER@test.ex>
 250 OK
-RCPT TO:<userx@domain1>
+RCPT TO:<userx4@domain1>
 250 OK
 DATA
 354 More...
 Received: from CALLER by the.local.host.name with local (Exim x.yz)
        (envelope-from <CALLER@test.ex>)
        id 10HmbA-000000005vi-0000
-       for userx@domain1;
+       for userx4@domain1;
        Tue, 2 Mar 1999 09:44:33 +0000
 Message-Id: <E10HmbA-000000005vi-0000@the.local.host.name>
 From: CALLER_NAME <CALLER@test.ex>