Fix listing a named queue by a non-admin user. Bug 2398
authorJeremy Harris <jgh146exb@wizmail.org>
Fri, 10 May 2019 14:35:58 +0000 (15:35 +0100)
committerHeiko Schlittermann (HS12-RIPE) <hs@schlittermann.de>
Fri, 19 Jul 2019 06:55:06 +0000 (08:55 +0200)
(cherry picked from commit e5903596a0)
(cherry picked from commit affc23f0d27bfbca773094146d7e62872ed2895b)

doc/doc-txt/ChangeLog
src/src/exim.c

index 05f999bbae16c9d2e52caa84e9db776d5e123929..dbede67b62718618f0046b1864fbbeb679129996 100644 (file)
@@ -63,6 +63,10 @@ JH/16 GnuTLS: rework ciphersuite strings under recent library versions.  Thanks
 JH/18 GnuTLS: fix $tls_out_ocsp under hosts_request_ocsp. Previously the
       verification result was not updated unless hosts_require_ocsp applied.
 
+JH/19 Bug 2398: fix listing of a named-queue.  Previously, even with the option
+      queue_list_requires_admin set to false, non-admin users were denied the
+      facility.
+
 
 Exim version 4.92
 -----------------
index f6f15f44998bb6792ad4542a498a2541ce8fc434..83b5ef51f221e3951804f65f4dd15b025dae7e9f 100644 (file)
@@ -3187,22 +3187,23 @@ for (i = 1; i < argc; i++)
     /* -q[f][f][l][G<name>]: Run the queue, optionally forced, optionally local
     only, optionally named, optionally starting from a given message id. */
 
-    if (*argrest == 0 &&
-        (i + 1 >= argc || argv[i+1][0] == '-' || mac_ismsgid(argv[i+1])))
-      {
-      queue_interval = 0;
-      if (i+1 < argc && mac_ismsgid(argv[i+1]))
-        start_queue_run_id = argv[++i];
-      if (i+1 < argc && mac_ismsgid(argv[i+1]))
-        stop_queue_run_id = argv[++i];
-      }
+    if (!(list_queue || count_queue))
+      if (*argrest == 0
+        && (i + 1 >= argc || argv[i+1][0] == '-' || mac_ismsgid(argv[i+1])))
+       {
+       queue_interval = 0;
+       if (i+1 < argc && mac_ismsgid(argv[i+1]))
+         start_queue_run_id = argv[++i];
+       if (i+1 < argc && mac_ismsgid(argv[i+1]))
+         stop_queue_run_id = argv[++i];
+       }
 
     /* -q[f][f][l][G<name>/]<n>: Run the queue at regular intervals, optionally
     forced, optionally local only, optionally named. */
 
-    else if ((queue_interval = readconf_readtime(*argrest ? argrest : argv[++i],
-                                               0, FALSE)) <= 0)
-      exim_fail("exim: bad time value %s: abandoned\n", argv[i]);
+      else if ((queue_interval = readconf_readtime(*argrest ? argrest : argv[++i],
+                                                 0, FALSE)) <= 0)
+       exim_fail("exim: bad time value %s: abandoned\n", argv[i]);
     break;