more detail in error messages
authorJeremy Harris <jgh146exb@wizmail.org>
Sun, 24 Sep 2023 19:50:26 +0000 (20:50 +0100)
committerJeremy Harris <jgh146exb@wizmail.org>
Sun, 24 Sep 2023 19:50:26 +0000 (20:50 +0100)
src/src/exim.c
src/src/readconf.c

index 8a78689fff683356fe58a7d0f253251f70e53efe..e200fc062641647366e5ec9c960accd1b2e68550 100644 (file)
@@ -4478,7 +4478,8 @@ if (!f.admin_user)
      || queue_name_dest && prod_requires_admin
      || debugset && !f.running_in_test_harness
      )
      || queue_name_dest && prod_requires_admin
      || debugset && !f.running_in_test_harness
      )
-    exim_fail("exim:%s permission denied\n", debugset ? " debugging" : "");
+    exim_fail("exim:%s permission denied; not admin\n",
+             debugset ? " debugging" : "");
   }
 
 /* If the real user is not root or the exim uid, the argument for passing
   }
 
 /* If the real user is not root or the exim uid, the argument for passing
@@ -4494,7 +4495,7 @@ if (  real_uid != root_uid && real_uid != exim_uid
       )  )
    && !f.running_in_test_harness
    )
       )  )
    && !f.running_in_test_harness
    )
-  exim_fail("exim: Permission denied\n");
+  exim_fail("exim: Permission denied; not exim user or root\n");
 
 /* If the caller is not trusted, certain arguments are ignored when running for
 real, but are permitted when checking things (-be, -bv, -bt, -bh, -bf, -bF).
 
 /* If the caller is not trusted, certain arguments are ignored when running for
 real, but are permitted when checking things (-be, -bv, -bt, -bh, -bf, -bF).
index 7d48f085df33084759b94e1f192b00df8c1ec6a8..d6d6f53a52aa39a03f0209193f720fa410ea3466 100644 (file)
@@ -2915,7 +2915,7 @@ else if (Ustrcmp(type, "macro") == 0)
   for printing.  So we have an admin_users restriction. */
   if (!f.admin_user)
     {
   for printing.  So we have an admin_users restriction. */
   if (!f.admin_user)
     {
-    fprintf(stderr, "exim: permission denied\n");
+    fprintf(stderr, "exim: permission denied; not admin\n");
     return FALSE;
     }
   for (macro_item * m = macros; m; m = m->next)
     return FALSE;
     }
   for (macro_item * m = macros; m; m = m->next)