Cmdine option for only IDs of queue
authorJeremy Harris <jgh146exb@wizmail.org>
Sun, 12 Mar 2023 20:57:40 +0000 (20:57 +0000)
committerJeremy Harris <jgh146exb@wizmail.org>
Sun, 12 Mar 2023 20:57:40 +0000 (20:57 +0000)
doc/doc-docbook/spec.xfpt
doc/doc-txt/NewStuff
src/src/exim.c
src/src/macros.h
src/src/queue.c
test/scripts/0000-Basic/0155
test/stdout/0155

index 8e2e1d142317387906dd0a0aa099ad8a18cb6f21..0ba62ce5e471c846d0f19409a9c79b3859e9f636 100644 (file)
@@ -3272,6 +3272,12 @@ to the standard output. It is restricted to admin users, unless
 &%queue_list_requires_admin%& is set false.
 
 
+.cmdopt -bpi
+.cindex queue "list of message IDs"
+This option operates like &%-bp%&, but only outputs message ids
+(one per line).
+
+
 .cmdopt -bpr
 This option operates like &%-bp%&, but the output is not sorted into
 chronological order of message arrival. This can speed it up when there are
@@ -3281,6 +3287,9 @@ going to be post-processed in a way that doesn't need the sorting.
 .cmdopt -bpra
 This option is a combination of &%-bpr%& and &%-bpa%&.
 
+.cmdopt -bpri
+This option is a combination of &%-bpr%& and &%-bpi%&.
+
 .cmdopt -bpru
 This option is a combination of &%-bpr%& and &%-bpu%&.
 
index ba204c040761b64d94b02114eff994cb7f5e3115..d12246e03a90fb6e796339626372145172f4eb3c 100644 (file)
@@ -27,6 +27,8 @@ Version 4.97
 
  9. An expansion operator for wrapping long header lines.
 
+ 10. A commandline option to print just the message IDs of the queue
+
 Version 4.96
 ------------
 
index 8d13bd4782a94563497a8e58919ca459501beeb0..c16beb1afaf5441523892ec43f97cbe118856d5a 100644 (file)
@@ -1745,7 +1745,7 @@ int  filter_sfd = -1;
 int  filter_ufd = -1;
 int  group_count;
 int  i, rv;
-int  list_queue_option = 0;
+int  list_queue_option = QL_BASIC;
 int  msg_action = 0;
 int  msg_action_arg = -1;
 int  namelen = argv[0] ? Ustrlen(argv[0]) : 0;
@@ -2388,11 +2388,9 @@ on the second character (the one after '-'), to save some effort. */
            }
 
          if (*argrest == 'r')
-           {
-           list_queue_option = 8;
-           argrest++;
-           }
-         else list_queue_option = 0;
+           list_queue_option = QL_UNSORTED, argrest++;
+         else
+           list_queue_option = QL_BASIC;
 
          list_queue = TRUE;
 
@@ -2402,11 +2400,15 @@ on the second character (the one after '-'), to save some effort. */
 
          /* -bpu: List the contents of the mail queue, top-level undelivered */
 
-         else if (Ustrcmp(argrest, "u") == 0) list_queue_option += 1;
+         else if (Ustrcmp(argrest, "u") == 0) list_queue_option |= QL_UNDELIVERED_ONLY;
 
          /* -bpa: List the contents of the mail queue, including all delivered */
 
-         else if (Ustrcmp(argrest, "a") == 0) list_queue_option += 2;
+         else if (Ustrcmp(argrest, "a") == 0) list_queue_option |= QL_PLUS_GENERATED;
+
+         /* -bpi: List only message IDs */
+
+         else if (Ustrcmp(argrest, "i") == 0) list_queue_option |= QL_MSGID_ONLY;
 
          /* Unknown after -bp[r] */
 
index 3b0293b971d5631569f3244601d18ff1c6a673aa..9f3a7b06af7cc42e91f9c5b90b61a69f24f65231 100644 (file)
@@ -1140,4 +1140,11 @@ typedef unsigned mcs_flags;
 /* A big number for (effectively) unlimited envelope addresses */
 #define UNLIMITED_ADDRS                999999
 
+/* Flags for queue_list() */
+#define QL_BASIC               0
+#define QL_UNDELIVERED_ONLY    1
+#define QL_PLUS_GENERATED      2
+#define QL_MSGID_ONLY          3
+#define QL_UNSORTED            8
+
 /* End of macros.h */
index d01cde655d6b0dfdd126684c3c33c585b8a093e8..b6e7907d73aa5c4cdd9fab37bf19c1ea81cfb08f 100644 (file)
@@ -913,7 +913,7 @@ Returns:      nothing
 */
 
 void
-queue_list(int option, uschar **list, int count)
+queue_list(int option, uschar ** list, int count)
 {
 int subcount;
 int now = (int)time(NULL);
@@ -942,21 +942,25 @@ if (count > 0)
 
 else
   qf = queue_get_spool_list(
-          -1,             /* entire queue */
-          subdirs,        /* for holding sub list */
-          &subcount,      /* for subcount */
-          option >= 8,   /* randomize if required */
-         NULL);          /* don't just count */
+          -1,                          /* entire queue */
+          subdirs,                     /* for holding sub list */
+          &subcount,                   /* for subcount */
+          option >= QL_UNSORTED,       /* randomize if required */
+         NULL);                        /* don't just count */
 
-if (option >= 8) option -= 8;
+option &= ~QL_UNSORTED;
 
 /* Now scan the chain and print information, resetting store used
 each time. */
 
-for (;
-    qf && (reset_point = store_mark());
-    spool_clear_header_globals(), store_reset(reset_point), qf = qf->next
-    )
+if (option == QL_MSGID_ONLY)   /* Print only the message IDs from the chain */
+  for (; qf; qf = qf->next)
+    fprintf(stdout, "%.*s\n", MESSAGE_ID_LENGTH, qf->text);
+
+else for (;
+         qf && (reset_point = store_mark());
+         spool_clear_header_globals(), store_reset(reset_point), qf = qf->next
+        )
   {
   int rc, save_errno;
   int size = 0;
@@ -1010,8 +1014,8 @@ for (;
       }
     }
 
-  fprintf(stdout, "%s ", string_format_size(size, big_buffer));
-  for (int i = 0; i < 16; i++) fputc(qf->text[i], stdout);
+  fprintf(stdout, "%s %.*s",
+    string_format_size(size, big_buffer), MESSAGE_ID_LENGTH, qf->text);
 
   if (env_read && sender_address)
     {
@@ -1048,14 +1052,14 @@ for (;
     {
     for (int i = 0; i < recipients_count; i++)
       {
-      tree_node *delivered =
+      tree_node * delivered =
         tree_search(tree_nonrecipients, recipients_list[i].address);
-      if (!delivered || option != 1)
+      if (!delivered || option != QL_UNDELIVERED_ONLY)
         printf("        %s %s\n",
          delivered ? "D" : " ", recipients_list[i].address);
       if (delivered) delivered->data.val = TRUE;
       }
-    if (option == 2 && tree_nonrecipients)
+    if (option == QL_PLUS_GENERATED && tree_nonrecipients)
       queue_list_extras(tree_nonrecipients);
     printf("\n");
     }
index 3cf45f8afbbd5f13c03940bc7f4b82921fbd9772..b221707f274a4d6238262dc35171cdc8490349c6 100644 (file)
@@ -28,8 +28,12 @@ exim -odq i@test.ex
 millisleep 500
 exim -odq j@test.ex
 ****
+### exim -bp
 exim -bp
 ****
+### exim -bpi
+exim -bpi
+****
 exim -q
 ****
 no_msglog_check
index 272078b57b99b964e3a32cbfd0081535c822e039..3ec38cf412f8fa56b71fce04be12e201f041e3a4 100644 (file)
@@ -1,3 +1,4 @@
+### exim -bp
  0m   sss 10HmaX-0005vi-00 <CALLER@test.ex>
           a@test.ex
 
  0m   sss 10HmbG-0005vi-00 <CALLER@test.ex>
           j@test.ex
 
+### exim -bpi
+10HmaX-0005vi-00
+10HmaY-0005vi-00
+10HmaZ-0005vi-00
+10HmbA-0005vi-00
+10HmbB-0005vi-00
+10HmbC-0005vi-00
+10HmbD-0005vi-00
+10HmbE-0005vi-00
+10HmbF-0005vi-00
+10HmbG-0005vi-00
+
+******** SERVER ********
+### exim -bp
+### exim -bpi