[rt-commit] r200 - in /redwax-tool/trunk: ChangeLog redwax-tool.c redwax_openssl.c
rt-commit at redwax.eu
rt-commit at redwax.eu
Tue Feb 18 11:26:11 CET 2025
Author: minfrin at redwax.eu
Date: Tue Feb 18 11:26:01 2025
New Revision: 200
Log:
Add a dedicated exit code for options that are not
implemented on a specific platform.
Modified:
redwax-tool/trunk/ChangeLog
redwax-tool/trunk/redwax-tool.c
redwax-tool/trunk/redwax_openssl.c
Modified: redwax-tool/trunk/ChangeLog
==============================================================================
--- redwax-tool/trunk/ChangeLog (original)
+++ redwax-tool/trunk/ChangeLog Tue Feb 18 11:26:01 2025
@@ -1,5 +1,9 @@
Changes with v0.9.8
+
+ *) Add a dedicated exit code for options that are not
+ implemented on a specific platform.
+ [Graham Leggett]
*) \e is a GCC extension, use \033 instead.
[Graham Leggett]
Modified: redwax-tool/trunk/redwax-tool.c
==============================================================================
--- redwax-tool/trunk/redwax-tool.c (original)
+++ redwax-tool/trunk/redwax-tool.c Tue Feb 18 11:26:01 2025
@@ -135,34 +135,34 @@
APR_IMPLEMENT_EXTERNAL_HOOK_RUN_ALL(rt, REDWAX, int, initialise,
(redwax_tool_t * r), (r), OK, DECLINED)
-APR_IMPLEMENT_EXTERNAL_HOOK_RUN_ALL(rt, REDWAX, int, set_dns_server,
- (redwax_tool_t * r, const char *arg), (r, arg), OK, DECLINED)
-APR_IMPLEMENT_EXTERNAL_HOOK_RUN_ALL(rt, REDWAX, int, set_dns_trust_anchor,
- (redwax_tool_t * r, const char *arg), (r, arg), OK, DECLINED)
-APR_IMPLEMENT_EXTERNAL_HOOK_RUN_ALL(rt, REDWAX, int, set_verify_param,
- (redwax_tool_t * r, const char *arg), (r, arg), OK, DECLINED)
+APR_IMPLEMENT_EXTERNAL_HOOK_RUN_FIRST(rt, REDWAX, apr_status_t, set_dns_server,
+ (redwax_tool_t * r, const char *arg), (r, arg), DECLINED)
+APR_IMPLEMENT_EXTERNAL_HOOK_RUN_FIRST(rt, REDWAX, apr_status_t, set_dns_trust_anchor,
+ (redwax_tool_t * r, const char *arg), (r, arg), DECLINED)
+APR_IMPLEMENT_EXTERNAL_HOOK_RUN_FIRST(rt, REDWAX, apr_status_t, set_verify_param,
+ (redwax_tool_t * r, const char *arg), (r, arg), DECLINED)
APR_IMPLEMENT_EXTERNAL_HOOK_RUN_ALL(rt, REDWAX, int, complete_verify_param,
(redwax_tool_t * r, apr_hash_t *params), (r, params), OK, DECLINED)
-APR_IMPLEMENT_EXTERNAL_HOOK_RUN_ALL(rt, REDWAX, int, set_verify_date,
- (redwax_tool_t * r, const char *arg), (r, arg), OK, DECLINED)
-APR_IMPLEMENT_EXTERNAL_HOOK_RUN_ALL(rt, REDWAX, int, set_verify_expiry,
- (redwax_tool_t * r, const char *arg), (r, arg), OK, DECLINED)
+APR_IMPLEMENT_EXTERNAL_HOOK_RUN_FIRST(rt, REDWAX, apr_status_t, set_verify_date,
+ (redwax_tool_t * r, const char *arg), (r, arg), DECLINED)
+APR_IMPLEMENT_EXTERNAL_HOOK_RUN_FIRST(rt, REDWAX, apr_status_t, set_verify_expiry,
+ (redwax_tool_t * r, const char *arg), (r, arg), DECLINED)
APR_IMPLEMENT_EXTERNAL_HOOK_RUN_ALL(rt, REDWAX, int, complete_verify_expiry,
(redwax_tool_t * r, apr_hash_t *params), (r, params), OK, DECLINED)
-APR_IMPLEMENT_EXTERNAL_HOOK_RUN_ALL(rt, REDWAX, int, set_verify_dane,
- (redwax_tool_t * r, const char *arg), (r, arg), OK, DECLINED)
+APR_IMPLEMENT_EXTERNAL_HOOK_RUN_FIRST(rt, REDWAX, apr_status_t, set_verify_dane,
+ (redwax_tool_t * r, const char *arg), (r, arg), DECLINED)
APR_IMPLEMENT_EXTERNAL_HOOK_RUN_ALL(rt, REDWAX, int, complete_verify_dane,
(redwax_tool_t * r, apr_hash_t *params), (r, params), OK, DECLINED)
-APR_IMPLEMENT_EXTERNAL_HOOK_RUN_ALL(rt, REDWAX, int, set_purpose,
- (redwax_tool_t * r, const char *arg), (r, arg), OK, DECLINED)
+APR_IMPLEMENT_EXTERNAL_HOOK_RUN_FIRST(rt, REDWAX, apr_status_t, set_purpose,
+ (redwax_tool_t * r, const char *arg), (r, arg), DECLINED)
APR_IMPLEMENT_EXTERNAL_HOOK_RUN_ALL(rt, REDWAX, int, complete_purpose,
(redwax_tool_t * r, apr_hash_t *purposes), (r, purposes), OK, DECLINED)
-APR_IMPLEMENT_EXTERNAL_HOOK_RUN_ALL(rt, REDWAX, int, set_tlsa,
- (redwax_tool_t * r, const char *arg), (r, arg), OK, DECLINED)
+APR_IMPLEMENT_EXTERNAL_HOOK_RUN_FIRST(rt, REDWAX, apr_status_t, set_tlsa,
+ (redwax_tool_t * r, const char *arg), (r, arg), DECLINED)
APR_IMPLEMENT_EXTERNAL_HOOK_RUN_FIRST(rt, REDWAX, int, process_tlsa,
(redwax_tool_t * r, redwax_dns_t *dns), (r, dns), DECLINED)
-APR_IMPLEMENT_EXTERNAL_HOOK_RUN_ALL(rt, REDWAX, int, set_smimea,
- (redwax_tool_t * r, const char *arg), (r, arg), OK, DECLINED)
+APR_IMPLEMENT_EXTERNAL_HOOK_RUN_FIRST(rt, REDWAX, apr_status_t, set_smimea,
+ (redwax_tool_t * r, const char *arg), (r, arg), DECLINED)
APR_IMPLEMENT_EXTERNAL_HOOK_RUN_FIRST(rt, REDWAX, int, process_smimea,
(redwax_tool_t * r, redwax_dns_t *dns), (r, dns), DECLINED)
APR_IMPLEMENT_EXTERNAL_HOOK_RUN_FIRST(rt, REDWAX, int, process_pem_in,
@@ -214,15 +214,15 @@
(redwax_tool_t * r, const char *arg), (r, arg), DECLINED)
APR_IMPLEMENT_EXTERNAL_HOOK_RUN_FIRST(rt, REDWAX, int, process_ssh_public_out,
(redwax_tool_t * r, const char *arg, const char *secret), (r, arg, secret), DECLINED)
-APR_IMPLEMENT_EXTERNAL_HOOK_RUN_FIRST(rt, REDWAX, int, set_format_out,
+APR_IMPLEMENT_EXTERNAL_HOOK_RUN_FIRST(rt, REDWAX, apr_status_t, set_format_out,
(redwax_tool_t * r, const char *arg), (r, arg), DECLINED)
APR_IMPLEMENT_EXTERNAL_HOOK_RUN_FIRST(rt, REDWAX, int, complete_format_out,
(redwax_tool_t * r, apr_hash_t *formats), (r, formats), DECLINED)
-APR_IMPLEMENT_EXTERNAL_HOOK_RUN_FIRST(rt, REDWAX, int, set_order_out,
+APR_IMPLEMENT_EXTERNAL_HOOK_RUN_FIRST(rt, REDWAX, apr_status_t, set_order_out,
(redwax_tool_t * r, const char *arg), (r, arg), DECLINED)
APR_IMPLEMENT_EXTERNAL_HOOK_RUN_FIRST(rt, REDWAX, int, complete_order_out,
(redwax_tool_t * r, apr_hash_t *orders), (r, orders), DECLINED)
-APR_IMPLEMENT_EXTERNAL_HOOK_RUN_FIRST(rt, REDWAX, int, set_calendar_alarm,
+APR_IMPLEMENT_EXTERNAL_HOOK_RUN_FIRST(rt, REDWAX, apr_status_t, set_calendar_alarm,
(redwax_tool_t * r, const char *arg), (r, arg), DECLINED)
APR_IMPLEMENT_EXTERNAL_HOOK_RUN_FIRST(rt, REDWAX, int, process_jwks_out,
(redwax_tool_t * r, const char *arg), (r, arg), DECLINED)
@@ -326,6 +326,7 @@
#define REDWAX_EXIT_OPTIONS 2
#define REDWAX_EXIT_FILTER 3
#define REDWAX_EXIT_AUTH 4
+#define REDWAX_EXIT_NOTIMPL 5
#define REDWAX_PASSTHROUGH "passthrough"
@@ -1222,22 +1223,19 @@
return APR_SUCCESS;
}
-static apr_status_t redwax_set_dns_server(redwax_tool_t *r, const char *arg)
-{
- apr_status_t status = rt_run_set_dns_server(r, arg);
-
- if (status) {
- r->rc = REDWAX_EXIT_FILTER;
- }
-
- return status;
-}
-
-static apr_status_t redwax_set_dns_trust_anchor(redwax_tool_t *r, const char *arg)
-{
- apr_status_t status = rt_run_set_dns_trust_anchor(r, arg);
-
- if (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_FILTER;
}
@@ -1468,6 +1466,32 @@
return NULL;
}
+apr_status_t redwax_complete_hash(redwax_tool_t *r, const char *arg,
+ apr_status_t (fn)(redwax_tool_t *r, apr_hash_t *options),
+ redwax_token_quoted_e quoted)
+{
+ apr_hash_t *options = apr_hash_make(r->pool);
+
+ apr_hash_index_t *hi;
+ void *val;
+ int arglen = strlen(arg);
+
+ fn(r, options);
+
+ for (hi = apr_hash_first(r->pool, options); hi; hi = apr_hash_next(hi)) {
+ apr_hash_this(hi, NULL, NULL, &val);
+
+ if (!strncmp(arg, (const char *)val, arglen)) {
+
+ apr_file_printf(r->out, "%s \n",
+ redwax_pescape_echo_quoted(r->pool,
+ (const char *)val, quoted, 1));
+ }
+ }
+
+ return APR_SUCCESS;
+}
+
apr_status_t redwax_complete_user(redwax_tool_t *r, const char *arg,
redwax_token_quoted_e quoted)
{
@@ -2432,85 +2456,6 @@
return APR_SUCCESS;
}
-static apr_status_t redwax_set_verify_param(redwax_tool_t *r, const char *arg)
-{
- apr_status_t status = rt_run_set_verify_param(r, arg);
-
- /* FIXME: detect DECLINED and exit with REDWAX_EXIT_NOTIMPL */
-
- if (status) {
- r->rc = REDWAX_EXIT_OPTIONS;
- }
-
- return status;
-}
-
-static apr_status_t redwax_set_verify_date(redwax_tool_t *r, const char *arg)
-{
- apr_status_t status = rt_run_set_verify_date(r, arg);
-
- if (status) {
- r->rc = REDWAX_EXIT_OPTIONS;
- }
-
- return status;
-}
-
-static apr_status_t redwax_set_verify_expiry(redwax_tool_t *r, const char *arg)
-{
- apr_status_t status = rt_run_set_verify_expiry(r, arg);
-
- if (status) {
- r->rc = REDWAX_EXIT_OPTIONS;
- }
-
- return status;
-}
-
-static apr_status_t redwax_set_verify_dane(redwax_tool_t *r, const char *arg)
-{
- apr_status_t status = rt_run_set_verify_dane(r, arg);
-
- if (status) {
- r->rc = REDWAX_EXIT_OPTIONS;
- }
-
- return status;
-}
-
-static apr_status_t redwax_set_tlsa(redwax_tool_t *r, const char *arg)
-{
- apr_status_t status = rt_run_set_tlsa(r, arg);
-
- if (status) {
- r->rc = REDWAX_EXIT_OPTIONS;
- }
-
- return status;
-}
-
-static apr_status_t redwax_set_smimea(redwax_tool_t *r, const char *arg)
-{
- apr_status_t status = rt_run_set_smimea(r, arg);
-
- if (status) {
- r->rc = REDWAX_EXIT_OPTIONS;
- }
-
- return status;
-}
-
-static apr_status_t redwax_set_purpose(redwax_tool_t *r, const char *arg)
-{
- apr_status_t status = rt_run_set_purpose(r, arg);
-
- if (status) {
- r->rc = REDWAX_EXIT_OPTIONS;
- }
-
- return status;
-}
-
static apr_status_t redwax_set_threshold(redwax_tool_t *r, const char *arg)
{
r->threshold = atoi(arg) * 86400;
@@ -2658,35 +2603,11 @@
return status;
}
-static apr_status_t redwax_format_out(redwax_tool_t *r, const char *arg)
-{
-
- apr_status_t status = rt_run_set_format_out(r, arg);
-
- return status;
-}
-
-static apr_status_t redwax_order_out(redwax_tool_t *r, const char *arg)
-{
-
- apr_status_t status = rt_run_set_order_out(r, arg);
-
- return status;
-}
-
static apr_status_t redwax_calendar_out(redwax_tool_t *r, const char *arg)
{
arg = redwax_home(r, arg);
apr_status_t status = rt_run_process_calendar_out(r, arg);
-
- return status;
-}
-
-static apr_status_t redwax_calendar_alarm(redwax_tool_t *r, const char *arg)
-{
-
- apr_status_t status = rt_run_set_calendar_alarm(r, arg);
return status;
}
@@ -2758,14 +2679,16 @@
break;
}
case REDWAX_TOOL_DNS_SERVER: {
- if (redwax_set_dns_server(r, optarg)) {
- return REDWAX_EXIT_AUTH;
+ if (redwax_set_option(r, optarg, &rt_run_set_dns_server,
+ "dns-server")) {
+ return r->rc;
}
break;
}
case REDWAX_TOOL_DNS_TRUST_ANCHOR: {
- if (redwax_set_dns_trust_anchor(r, optarg)) {
- return REDWAX_EXIT_AUTH;
+ if (redwax_set_option(r, optarg, &rt_run_set_dns_trust_anchor,
+ "dns-trust-anchor")) {
+ return r->rc;
}
break;
}
@@ -2871,44 +2794,51 @@
break;
}
case REDWAX_TOOL_FILTER_VERIFY_PARAM: {
- if (redwax_set_verify_param(r, optarg)) {
- return REDWAX_EXIT_OPTIONS;
+ if (redwax_set_option(r, optarg, &rt_run_set_verify_param,
+ "filter-verify-params")) {
+ return r->rc;
}
break;
}
case REDWAX_TOOL_FILTER_DATE: {
- if (redwax_set_verify_date(r, optarg)) {
- return REDWAX_EXIT_OPTIONS;
+ if (redwax_set_option(r, optarg, &rt_run_set_verify_date,
+ "filter-date")) {
+ return r->rc;
}
break;
}
case REDWAX_TOOL_FILTER_EXPIRY: {
- if (redwax_set_verify_expiry(r, optarg)) {
- return REDWAX_EXIT_OPTIONS;
+ if (redwax_set_option(r, optarg, &rt_run_set_verify_expiry,
+ "filter-exiry")) {
+ return r->rc;
}
break;
}
case REDWAX_TOOL_FILTER_DANE: {
- if (redwax_set_verify_dane(r, optarg)) {
- return REDWAX_EXIT_OPTIONS;
+ if (redwax_set_option(r, optarg, &rt_run_set_verify_dane,
+ "filter-dane")) {
+ return r->rc;
}
break;
}
case REDWAX_TOOL_FILTER_PURPOSE: {
- if (redwax_set_purpose(r, optarg)) {
- return REDWAX_EXIT_OPTIONS;
+ if (redwax_set_option(r, optarg, &rt_run_set_purpose,
+ "filter-purpose")) {
+ return r->rc;
}
break;
}
case REDWAX_TOOL_FILTER_VERIFY_TLSA: {
- if (redwax_set_tlsa(r, optarg)) {
- return REDWAX_EXIT_OPTIONS;
+ if (redwax_set_option(r, optarg, &rt_run_set_tlsa,
+ "filter-verify-tlsa")) {
+ return r->rc;
}
break;
}
case REDWAX_TOOL_FILTER_VERIFY_SMIMEA: {
- if (redwax_set_smimea(r, optarg)) {
- return REDWAX_EXIT_OPTIONS;
+ if (redwax_set_option(r, optarg, &rt_run_set_smimea,
+ "filter-verify-smimea")) {
+ return r->rc;
}
break;
}
@@ -3092,7 +3022,10 @@
break;
}
case REDWAX_TOOL_CALENDAR_ALARM: {
- redwax_calendar_alarm(r, optarg);
+ if (redwax_set_option(r, optarg, &rt_run_set_calendar_alarm,
+ "calendar-alarm")) {
+ return r->rc;
+ }
break;
}
case REDWAX_TOOL_REMINDER_OUT: {
@@ -3104,12 +3037,16 @@
break;
}
case REDWAX_TOOL_FORMAT_OUT: {
- redwax_format_out(r, optarg);
+ if (redwax_set_option(r, optarg, &rt_run_set_format_out,
+ "format-out")) {
+ return r->rc;
+ }
break;
}
case REDWAX_TOOL_ORDER_OUT: {
- if (redwax_order_out(r, optarg)) {
- return REDWAX_EXIT_OPTIONS;
+ if (redwax_set_option(r, optarg, &rt_run_set_order_out,
+ "order-out")) {
+ return r->rc;
}
break;
}
@@ -3257,7 +3194,7 @@
break;
}
case REDWAX_TOOL_FILTER: {
- redwax_complete_filter(r, optarg, state.isquoted);
+ redwax_complete_hash(r, optarg, &rt_run_complete_filter, state.isquoted);
break;
}
case REDWAX_TOOL_FILTER_HOSTNAME: {
@@ -3481,7 +3418,7 @@
break;
}
case REDWAX_TOOL_FILTER: {
- redwax_complete_filter(r, "", state.isquoted);
+ redwax_complete_hash(r, "", &rt_run_complete_filter, state.isquoted);
break;
}
case REDWAX_TOOL_FILTER_EMAIL: {
Modified: redwax-tool/trunk/redwax_openssl.c
==============================================================================
--- redwax-tool/trunk/redwax_openssl.c (original)
+++ redwax-tool/trunk/redwax_openssl.c Tue Feb 18 11:26:01 2025
@@ -2242,9 +2242,9 @@
redwax_print_error(r,
"verify-filter: DANE TLSA record not found "
- "(%d bogus, %d insecure, %d nxdomain, %d malformed): %s\n",
- r->dane_bogus, r->dane_insecure, r->dane_nxdomain,
- r->dane_malformed, r->dane_basename);
+ "(%d bogus, %d insecure, %d nxdomain, %d malformed): %s\n",
+ r->dane_bogus, r->dane_insecure, r->dane_nxdomain,
+ r->dane_malformed, r->dane_basename);
return APR_ENOENT;
@@ -5447,7 +5447,10 @@
return APR_SUCCESS;
}
- return DECLINED;
+ redwax_print_error(r, "format-out: '%s' must be one of xml, json, yaml\n",
+ arg);
+
+ return APR_EINVAL;
}
apr_status_t redwax_openssl_complete_order_out(redwax_tool_t *r,
@@ -5480,7 +5483,12 @@
return APR_SUCCESS;
}
- return DECLINED;
+ redwax_print_error(r,
+ "order-out: '%s' must be one of " REDWAX_ORDER_ALL_TEXT ", "
+ REDWAX_ORDER_KEY_FIRST_TEXT ", " REDWAX_ORDER_KEY_LAST_TEXT "\n",
+ arg);
+
+ return APR_EINVAL;
}
static apr_status_t redwax_openssl_process_jwks_out(redwax_tool_t *r,
More information about the rt-commit
mailing list