[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