[rt-commit] r210 - in /redwax-tool/trunk: ChangeLog redwax-tool.c

rt-commit at redwax.eu rt-commit at redwax.eu
Sat Feb 22 16:03:44 CET 2025


Author: minfrin at redwax.eu
Date: Sat Feb 22 16:03:43 2025
New Revision: 210

Log:
Add a dedicated exit code for processes that are not
implemented on a specific platform.

Modified:
    redwax-tool/trunk/ChangeLog
    redwax-tool/trunk/redwax-tool.c

Modified: redwax-tool/trunk/ChangeLog
==============================================================================
--- redwax-tool/trunk/ChangeLog	(original)
+++ redwax-tool/trunk/ChangeLog	Sat Feb 22 16:03:43 2025
@@ -1,5 +1,8 @@
 
 Changes with v0.9.9
+
+ *) Add a dedicated exit code for processes that are not
+    implemented on a specific platform. [Graham Leggett]
 
  *) Remove warning pointer of type 'void *' used
     in subtraction. [Graham Leggett]

Modified: redwax-tool/trunk/redwax-tool.c
==============================================================================
--- redwax-tool/trunk/redwax-tool.c	(original)
+++ redwax-tool/trunk/redwax-tool.c	Sat Feb 22 16:03:43 2025
@@ -327,6 +327,7 @@
 #define REDWAX_EXIT_FILTER 3
 #define REDWAX_EXIT_AUTH 4
 #define REDWAX_EXIT_NOTIMPL 5
+#define REDWAX_EXIT_PROCESS 6
 
 #define REDWAX_PASSTHROUGH "passthrough"
 
@@ -684,6 +685,7 @@
             "  - 3: No certificates were passed through the filter.\n"
             "  - 4: Could not become user or group.\n"
             "  - 5: Capability not implemented on this platform.\n"
+            "  - 6: Processing of certificates failed.\n"
             "\n"
             "EXAMPLES\n"
             "  In this example, we read all PEM files matching the wildcard, we pass\n"
@@ -1416,11 +1418,9 @@
     return APR_SUCCESS;
 }
 
-static apr_status_t redwax_set_option(redwax_tool_t *r, const char *arg,
-        apr_status_t (fn)(redwax_tool_t *r, const char *arg),
+static apr_status_t redwax_process(redwax_tool_t *r, apr_status_t status,
         const char *name)
 {
-    apr_status_t status = fn(r, arg);
 
     if (DECLINED == status) {
         redwax_print_error(r,
@@ -1429,7 +1429,26 @@
     }
 
     else if (status) {
-        r->rc = REDWAX_EXIT_FILTER;
+        r->rc = REDWAX_EXIT_PROCESS;
+    }
+
+    return status;
+}
+
+static apr_status_t redwax_set_option(redwax_tool_t *r, const char *arg,
+        apr_status_t (fn)(redwax_tool_t *r, const char *arg),
+        const char *name)
+{
+    apr_status_t status = fn(r, arg);
+
+    if (DECLINED == status) {
+        redwax_print_error(r,
+                           "Error: --%s not supported on this platform.\n", name);
+        r->rc = REDWAX_EXIT_NOTIMPL;
+    }
+
+    else if (status) {
+        r->rc = REDWAX_EXIT_OPTIONS;
     }
 
     return status;
@@ -2091,7 +2110,8 @@
 }
 
 apr_status_t redwax_file_out(redwax_tool_t *r, const char *path,
-        apr_status_t (out)(redwax_tool_t *r, const char *path, const char *secret))
+        apr_status_t (out)(redwax_tool_t *r, const char *path, const char *secret),
+        const char *name)
 {
     const char *dir, *base;
     apr_status_t status;
@@ -2106,16 +2126,13 @@
     dir = redwax_home(r, dir);
 
     status = out(r, path, redwax_secret_path(r, dir, base, r->secret_suffix_out));
-    if (APR_SUCCESS != status) {
-        return status;
-    }
-
-    return APR_SUCCESS;
+
+    return redwax_process(r, status, name);
 }
 
 apr_status_t redwax_token_out(redwax_tool_t *r, const char *path, const char *token,
         apr_status_t (out)(redwax_tool_t *r, const char *path, const char *token,
-                apr_hash_t *secrets))
+                apr_hash_t *secrets), const char *name)
 {
     apr_status_t status;
 
@@ -2124,20 +2141,18 @@
     }
 
     if (!strcmp(path, "-")) {
-        redwax_print_error(r, "Directory cannot be read from stdin.\n");
+        redwax_print_error(r, "%s: directory cannot be read from stdin.\n", name);
         return APR_ENOENT;
     }
 
     status = out(r, path, token, redwax_secrets_path(r, r->secret_token_out));
-    if (APR_SUCCESS != status) {
-        return status;
-    }
-
-    return APR_SUCCESS;
+
+    return redwax_process(r, status, name);
 }
 
 apr_status_t redwax_dir_walk(redwax_tool_t *r, const char *path,
-        apr_status_t (walk)(redwax_tool_t *r, const char *path, const char *secret))
+        apr_status_t (walk)(redwax_tool_t *r, const char *path, const char *secret),
+        const char *name)
 {
     apr_dir_t *thedir;
     apr_finfo_t dirent;
@@ -2191,7 +2206,7 @@
                 status = walk(r, npath, redwax_secret_path(r, dir, dirent.name, r->secret_suffix_in));
                 if (APR_SUCCESS != status) {
                     apr_dir_close(thedir);
-                    return status;
+                    return redwax_process(r, status, name);
                 }
 
                 break;
@@ -2541,11 +2556,13 @@
     return APR_SUCCESS;
 }
 
-static apr_status_t redwax_nss_dir_out(redwax_tool_t *r, const char *arg)
-{
+static apr_status_t redwax_nss_dir_out(redwax_tool_t *r, const char *arg, const char *name)
+{
+    apr_status_t status = APR_SUCCESS;
+
     if (!arg) {
         if (r->nss_out.needs_write) {
-            redwax_token_out(r, r->nss_out.dir, NULL, &rt_run_process_nss_out);
+            status = redwax_token_out(r, r->nss_out.dir, NULL, &rt_run_process_nss_out, name);
         }
         r->nss_out.needs_write = 0;
     }
@@ -2555,26 +2572,27 @@
     }
     else {
         if (r->nss_out.needs_write) {
-            redwax_token_out(r, r->nss_out.dir, NULL, &rt_run_process_nss_out);
+            status = redwax_token_out(r, r->nss_out.dir, NULL, &rt_run_process_nss_out, name);
         }
         r->nss_out.dir = redwax_home(r, arg);;
         r->nss_out.needs_write = 1;
     }
 
-    return APR_SUCCESS;
-}
-
-static apr_status_t redwax_nss_token_out(redwax_tool_t *r, const char *arg)
-{
-
-    redwax_token_out(r, r->nss_out.dir, arg, &rt_run_process_nss_out);
+    return status;
+}
+
+static apr_status_t redwax_nss_token_out(redwax_tool_t *r, const char *arg, const char *name)
+{
+    apr_status_t status = APR_SUCCESS;
+
+    status = redwax_token_out(r, r->nss_out.dir, arg, &rt_run_process_nss_out, name);
 
     r->nss_out.needs_write = 0;
 
-    return APR_SUCCESS;
-}
-
-static apr_status_t redwax_pkcs11_in(redwax_tool_t *r, const char *arg)
+    return status;
+}
+
+static apr_status_t redwax_pkcs11_in(redwax_tool_t *r, const char *arg, const char *name)
 {
 
     apr_status_t status = rt_run_process_pkcs11_in(r, arg,
@@ -2582,7 +2600,7 @@
 
     apr_array_clear(r->pkcs11_in.pkcs11_modules);
 
-    return status;
+    return redwax_process(r, status, name);
 }
 
 static apr_status_t redwax_pkcs11_module_in(redwax_tool_t *r, const char *arg)
@@ -2593,7 +2611,7 @@
     return APR_SUCCESS;
 }
 
-static apr_status_t redwax_pkcs11_out(redwax_tool_t *r, const char *arg)
+static apr_status_t redwax_pkcs11_out(redwax_tool_t *r, const char *arg, const char *name)
 {
 
     apr_status_t status = rt_run_process_pkcs11_out(r, arg,
@@ -2601,7 +2619,7 @@
 
     apr_array_clear(r->pkcs11_out.pkcs11_modules);
 
-    return status;
+    return redwax_process(r, status, name);
 }
 
 static apr_status_t redwax_pkcs11_module_out(redwax_tool_t *r, const char *arg)
@@ -2612,48 +2630,48 @@
     return APR_SUCCESS;
 }
 
-static apr_status_t redwax_metadata_out(redwax_tool_t *r, const char *arg)
+static apr_status_t redwax_metadata_out(redwax_tool_t *r, const char *arg, const char *name)
 {
     arg = redwax_home(r, arg);
 
     apr_status_t status = rt_run_process_metadata_out(r, arg);
 
-    return status;
-}
-
-static apr_status_t redwax_calendar_out(redwax_tool_t *r, const char *arg)
+    return redwax_process(r, status, name);
+}
+
+static apr_status_t redwax_calendar_out(redwax_tool_t *r, const char *arg, const char *name)
 {
     arg = redwax_home(r, arg);
 
     apr_status_t status = rt_run_process_calendar_out(r, arg);
 
-    return status;
-}
-
-static apr_status_t redwax_reminder_out(redwax_tool_t *r, const char *arg)
+    return redwax_process(r, status, name);
+}
+
+static apr_status_t redwax_reminder_out(redwax_tool_t *r, const char *arg, const char *name)
 {
     arg = redwax_home(r, arg);
 
     apr_status_t status = rt_run_process_reminder_out(r, arg);
 
-    return status;
-}
-
-static apr_status_t redwax_jwks_out(redwax_tool_t *r, const char *arg)
+    return redwax_process(r, status, name);
+}
+
+static apr_status_t redwax_jwks_out(redwax_tool_t *r, const char *arg, const char *name)
 {
     arg = redwax_home(r, arg);
 
     apr_status_t status = rt_run_process_jwks_out(r, arg);
 
-    return status;
-}
-
-static apr_status_t redwax_keychain_in(redwax_tool_t *r, const char *arg)
+    return redwax_process(r, status, name);
+}
+
+static apr_status_t redwax_keychain_in(redwax_tool_t *r, const char *arg, const char *name)
 {
 
     apr_status_t status = rt_run_process_keychain_in(r, arg);
 
-    return status;
+    return redwax_process(r, status, name);
 }
 
 void redwax_add_default_hooks(apr_pool_t *pool)
@@ -2758,15 +2776,21 @@
             break;
         }
         case REDWAX_TOOL_PEM_IN: {
-            redwax_dir_walk(r, optarg, &rt_run_process_pem_in);
+            if (redwax_dir_walk(r, optarg, &rt_run_process_pem_in, "pem-in")) {
+                return r->rc;
+            }
             break;
         }
         case REDWAX_TOOL_TRUST_PEM_IN: {
-            redwax_dir_walk(r, optarg, &rt_run_process_trust_pem_in);
+            if (redwax_dir_walk(r, optarg, &rt_run_process_trust_pem_in, "trust-pem-in")) {
+                return r->rc;
+            }
             break;
         }
         case REDWAX_TOOL_PKCS11_IN: {
-            redwax_pkcs11_in(r, optarg);
+            if (redwax_pkcs11_in(r, optarg, "pkcs11-in")) {
+                return r->rc;
+            }
             break;
         }
         case REDWAX_TOOL_PKCS11_MODULE_IN: {
@@ -2774,11 +2798,15 @@
             break;
         }
         case REDWAX_TOOL_PKCS12_IN: {
-            redwax_dir_walk(r, optarg, &rt_run_process_pkcs12_in);
+            if (redwax_dir_walk(r, optarg, &rt_run_process_pkcs12_in, "pkcs12-in")) {
+                return r->rc;
+            }
             break;
         }
         case REDWAX_TOOL_KEYCHAIN_IN: {
-            redwax_keychain_in(r, optarg);
+            if (redwax_keychain_in(r, optarg, "keychain-in")) {
+                return r->rc;
+            }
             break;
         }
         }
@@ -2998,27 +3026,39 @@
             break;
         }
         case REDWAX_TOOL_NSS_OUT: {
-            redwax_nss_dir_out(r, optarg);
+            if (redwax_nss_dir_out(r, optarg, "nss-out")) {
+                return r->rc;
+            }
             break;
         }
         case REDWAX_TOOL_NSS_SLOT_OUT: {
-            redwax_nss_token_out(r, optarg);
+            if (redwax_nss_token_out(r, optarg, "nss-token-out")) {
+                return r->rc;
+            }
             break;
         }
         case REDWAX_TOOL_DER_OUT: {
-            redwax_file_out(r, optarg, &rt_run_process_der_out);
+            if (redwax_file_out(r, optarg, &rt_run_process_der_out, "der-out")) {
+                return r->rc;
+            }
             break;
         }
         case REDWAX_TOOL_PEM_OUT: {
-            redwax_file_out(r, optarg, &rt_run_process_pem_out);
+            if (redwax_file_out(r, optarg, &rt_run_process_pem_out, "pem-out")) {
+                return r->rc;
+            }
             break;
         }
         case REDWAX_TOOL_PKCS12_OUT: {
-            redwax_file_out(r, optarg, &rt_run_process_pkcs12_out);
+            if (redwax_file_out(r, optarg, &rt_run_process_pkcs12_out, "pkcs12-out")) {
+                return r->rc;
+            }
             break;
         }
         case REDWAX_TOOL_PKCS11_OUT: {
-            redwax_pkcs11_out(r, optarg);
+            if (redwax_pkcs11_out(r, optarg, "pkcs11-out")) {
+                return r->rc;
+            }
             break;
         }
         case REDWAX_TOOL_PKCS11_MODULE_OUT: {
@@ -3026,7 +3066,9 @@
             break;
         }
         case REDWAX_TOOL_METADATA_OUT: {
-            redwax_metadata_out(r, optarg);
+            if (redwax_metadata_out(r, optarg, "metadata-out")) {
+                return r->rc;
+            }
             break;
         }
         case REDWAX_TOOL_METADATA_THRESHOLD: {
@@ -3036,7 +3078,9 @@
             break;
         }
         case REDWAX_TOOL_CALENDAR_OUT: {
-            redwax_calendar_out(r, optarg);
+            if (redwax_calendar_out(r, optarg, "calendar-out")) {
+                return r->rc;
+            }
             break;
         }
         case REDWAX_TOOL_CALENDAR_ALARM: {
@@ -3047,11 +3091,15 @@
             break;
         }
         case REDWAX_TOOL_REMINDER_OUT: {
-            redwax_reminder_out(r, optarg);
+            if (redwax_reminder_out(r, optarg, "reminder-out")) {
+                return r->rc;
+            }
             break;
         }
         case REDWAX_TOOL_SSH_PUBLIC_OUT: {
-            redwax_file_out(r, optarg, &rt_run_process_ssh_public_out);
+            if (redwax_file_out(r, optarg, &rt_run_process_ssh_public_out, "ssh-public-out")) {
+                return r->rc;
+            }
             break;
         }
         case REDWAX_TOOL_FORMAT_OUT: {
@@ -3069,7 +3117,9 @@
             break;
         }
         case REDWAX_TOOL_JWKS_OUT: {
-            redwax_jwks_out(r, optarg);
+            if (redwax_jwks_out(r, optarg, "jwks-out")) {
+                return r->rc;
+            }
             break;
         }
         }
@@ -3077,7 +3127,7 @@
     }
 
     /* output catch-all */
-    redwax_nss_dir_out(r, NULL);
+    redwax_nss_dir_out(r, NULL, "nss-out");
 
     redwax_set_user(r, NULL);
     redwax_set_group(r, NULL);
@@ -3330,11 +3380,11 @@
                 break;
             }
             case REDWAX_TOOL_PEM_IN: {
-                redwax_dir_walk(r, optarg, &rt_run_process_pem_in);
+                redwax_dir_walk(r, optarg, &rt_run_process_pem_in, "pem-in");
                 break;
             }
             case REDWAX_TOOL_TRUST_PEM_IN: {
-                redwax_dir_walk(r, optarg, &rt_run_process_trust_pem_in);
+                redwax_dir_walk(r, optarg, &rt_run_process_trust_pem_in, "trust-pem-in");
                 break;
             }
             case REDWAX_TOOL_PKCS11_MODULE_IN: {
@@ -3342,7 +3392,7 @@
                 break;
             }
             case REDWAX_TOOL_PKCS12_IN: {
-                redwax_dir_walk(r, optarg, &rt_run_process_pkcs12_in);
+                redwax_dir_walk(r, optarg, &rt_run_process_pkcs12_in, "pkcs12-in");
                 break;
             }
             case REDWAX_TOOL_NSS_OUT: {



More information about the rt-commit mailing list