]> git.ipfire.org Git - thirdparty/bind9.git/commitdiff
dnssec-verify now returns failure on bad arguments
authorMark Andrews <marka@isc.org>
Thu, 16 Oct 2025 05:52:57 +0000 (16:52 +1100)
committerMark Andrews <marka@isc.org>
Wed, 22 Oct 2025 02:48:22 +0000 (13:48 +1100)
(cherry picked from commit ac3fba068e87206209deed008f288f2e4ed16166)

12 files changed:
bin/check/named-checkzone.c
bin/delv/delv.c
bin/dnssec/dnssec-dsfromkey.c
bin/dnssec/dnssec-importkey.c
bin/dnssec/dnssec-keyfromlabel.c
bin/dnssec/dnssec-keygen.c
bin/dnssec/dnssec-revoke.c
bin/dnssec/dnssec-settime.c
bin/dnssec/dnssec-signzone.c
bin/dnssec/dnssec-verify.c
bin/dnssec/dnssectool.c
bin/dnssec/dnssectool.h

index 9f5bf45aa2cbcc50d02b9c69dc227defab2dae28..ae8feafc8cedff5db552d84aa7cfa5d076b597e1 100644 (file)
@@ -63,10 +63,10 @@ static enum { progmode_check, progmode_compile } progmode;
        } while (0)
 
 noreturn static void
-usage(void);
+usage(int ret);
 
 static void
-usage(void) {
+usage(int ret) {
        fprintf(stderr,
                "usage: %s [-djqvD] [-c class] "
                "[-f inputformat] [-F outputformat] [-J filename] "
@@ -79,7 +79,7 @@ usage(void) {
                "%s zonename [ (filename|-) ]\n",
                prog_name,
                progmode == progmode_check ? "[-o filename]" : "-o filename");
-       exit(EXIT_FAILURE);
+       exit(ret);
 }
 
 static void
@@ -431,9 +431,10 @@ main(int argc, char **argv) {
                                fprintf(stderr, "%s: invalid argument -%c\n",
                                        prog_name, isc_commandline_option);
                        }
-                       FALLTHROUGH;
+                       usage(EXIT_FAILURE);
+
                case 'h':
-                       usage();
+                       usage(EXIT_SUCCESS);
 
                default:
                        fprintf(stderr, "%s: unhandled option -%c\n", prog_name,
@@ -496,7 +497,7 @@ main(int argc, char **argv) {
                if (output_filename == NULL) {
                        fprintf(stderr, "output file required, but not "
                                        "specified\n");
-                       usage();
+                       usage(EXIT_FAILURE);
                }
        }
 
@@ -520,7 +521,7 @@ main(int argc, char **argv) {
        if (argc - isc_commandline_index < 1 ||
            argc - isc_commandline_index > 2)
        {
-               usage();
+               usage(EXIT_FAILURE);
        }
 
        isc_mem_create(&mctx);
index 041f4b65ca9ddde246266cca887a71320fe883b5..84ce80f1aa2e54c6b9ebccbec89136f041281cc1 100644 (file)
@@ -171,8 +171,11 @@ get_reverse(char *reverse, size_t len, char *value, bool strict);
 static isc_result_t
 parse_uint(uint32_t *uip, const char *value, uint32_t max, const char *desc);
 
+noreturn static void
+usage(int ret);
+
 static void
-usage(void) {
+usage(int ret) {
        fprintf(stderr,
                "Usage:  delv [@server] {q-opt} {d-opt} [domain] [q-type] "
                "[q-class]\n"
@@ -256,7 +259,7 @@ usage(void) {
                "process)\n"
                "                 +[no]yaml           (Present the results as "
                "YAML)\n");
-       exit(EXIT_FAILURE);
+       exit(ret);
 }
 
 noreturn static void
@@ -1438,7 +1441,7 @@ plus_option(char *option) {
        invalid_option:
        need_value:
                fprintf(stderr, "Invalid option: +%s\n", option);
-               usage();
+               usage(EXIT_FAILURE);
        }
        return;
 }
@@ -1491,8 +1494,8 @@ dash_option(char *option, char *next, bool *open_type_class) {
                        }
                        break;
                case 'h':
-                       usage();
-                       exit(EXIT_SUCCESS);
+                       usage(EXIT_SUCCESS);
+
                case 'i':
                        no_sigs = true;
                        root_validation = false;
@@ -1645,7 +1648,7 @@ dash_option(char *option, char *next, bool *open_type_class) {
        invalid_option:
        default:
                fprintf(stderr, "Invalid option: -%s\n", option);
-               usage();
+               usage(EXIT_FAILURE);
        }
        UNREACHABLE();
        return false;
index f0adc4b0d172fb0c856ca6e3cd51e67628345092..8a645338c0314004642bef114d3f77e6bb689b1b 100644 (file)
@@ -331,10 +331,10 @@ emits(bool showall, bool cds, dns_rdata_t *rdata) {
 }
 
 noreturn static void
-usage(void);
+usage(int ret);
 
 static void
-usage(void) {
+usage(int ret) {
        fprintf(stderr, "Usage:\n");
        fprintf(stderr, "    %s [options] keyfile\n\n", program);
        fprintf(stderr, "    %s [options] -f zonefile [zonename]\n\n", program);
@@ -361,7 +361,7 @@ usage(void) {
                        "    -V: print version information\n");
        fprintf(stderr, "Output: DS or CDS RRs\n");
 
-       exit(EXIT_FAILURE);
+       exit(ret);
 }
 
 int
@@ -381,7 +381,7 @@ main(int argc, char **argv) {
        dns_rdata_init(&rdata);
 
        if (argc == 1) {
-               usage();
+               usage(EXIT_FAILURE);
        }
 
        isc_mem_create(&mctx);
@@ -451,10 +451,12 @@ main(int argc, char **argv) {
                                fprintf(stderr, "%s: invalid argument -%c\n",
                                        program, isc_commandline_option);
                        }
-                       FALLTHROUGH;
+                       /* Does not return. */
+                       usage(EXIT_FAILURE);
+
                case 'h':
                        /* Does not return. */
-                       usage();
+                       usage(EXIT_SUCCESS);
 
                case 'V':
                        /* Does not return. */
index 0d11d95e25bfb40dc48b6b09758771ebaf1ff2e1..77fb59923d59a989dc4f997e9e91dfdfe94186eb 100644 (file)
@@ -264,10 +264,10 @@ emit(const char *dir, dns_rdata_t *rdata) {
 }
 
 noreturn static void
-usage(void);
+usage(int ret);
 
 static void
-usage(void) {
+usage(int ret) {
        fprintf(stderr, "Usage:\n");
        fprintf(stderr, "    %s options [-K dir] keyfile\n\n", program);
        fprintf(stderr, "    %s options -f file [keyname]\n\n", program);
@@ -290,7 +290,7 @@ usage(void) {
        fprintf(stderr, "    -D sync date/[+-]offset/none: set/unset "
                        "CDS and CDNSKEY deletion date\n");
 
-       exit(EXIT_FAILURE);
+       exit(ret);
 }
 
 int
@@ -308,7 +308,7 @@ main(int argc, char **argv) {
        dns_rdata_init(&rdata);
 
        if (argc == 1) {
-               usage();
+               usage(EXIT_FAILURE);
        }
 
        isc_mem_create(&mctx);
@@ -384,10 +384,11 @@ main(int argc, char **argv) {
                                fprintf(stderr, "%s: invalid argument -%c\n",
                                        program, isc_commandline_option);
                        }
-                       FALLTHROUGH;
+                       usage(EXIT_FAILURE);
+
                case 'h':
                        /* Does not return. */
-                       usage();
+                       usage(EXIT_SUCCESS);
 
                case 'V':
                        /* Does not return. */
index 8bd181708c8090746d1cfac5b7a58bdad8042594..a133b7b7add5055a062f95ba528e4d80b5ab19c3 100644 (file)
@@ -46,10 +46,10 @@ const char *program = "dnssec-keyfromlabel";
 static uint16_t tag_min = 0, tag_max = 0xffff;
 
 noreturn static void
-usage(void);
+usage(int ret);
 
 static void
-usage(void) {
+usage(int ret) {
        fprintf(stderr, "Usage:\n");
        fprintf(stderr, "    %s -l label [options] name\n\n", program);
        fprintf(stderr, "Version: %s\n", PACKAGE_VERSION);
@@ -105,7 +105,7 @@ usage(void) {
        fprintf(stderr, "     K<name>+<alg>+<id>.key, "
                        "K<name>+<alg>+<id>.private\n");
 
-       exit(EXIT_FAILURE);
+       exit(ret);
 }
 
 int
@@ -156,7 +156,7 @@ main(int argc, char **argv) {
        isc_stdtime_t now = isc_stdtime_now();
 
        if (argc == 1) {
-               usage();
+               usage(EXIT_FAILURE);
        }
 
        isc_mem_create(&mctx);
@@ -336,10 +336,12 @@ main(int argc, char **argv) {
                                fprintf(stderr, "%s: invalid argument -%c\n",
                                        program, isc_commandline_option);
                        }
-                       FALLTHROUGH;
+                       /* Does not return. */
+                       usage(EXIT_FAILURE);
+
                case 'h':
                        /* Does not return. */
-                       usage();
+                       usage(EXIT_SUCCESS);
 
                case 'V':
                        /* Does not return. */
index 13f34000fa6841f4b97735a21b86509c2d7b439f..d690cbabdb5b588d6ce9513bcf531be8d32abd4e 100644 (file)
@@ -75,7 +75,7 @@ static int min_dh = 128;
 isc_log_t *lctx = NULL;
 
 noreturn static void
-usage(void);
+usage(int ret);
 
 static void
 progress(int p);
@@ -140,7 +140,7 @@ struct keygen_ctx {
 typedef struct keygen_ctx keygen_ctx_t;
 
 static void
-usage(void) {
+usage(int ret) {
        fprintf(stderr, "Usage:\n");
        fprintf(stderr, "    %s [options] name\n\n", program);
        fprintf(stderr, "Version: %s\n", PACKAGE_VERSION);
@@ -226,7 +226,7 @@ usage(void) {
        fprintf(stderr, "     K<name>+<alg>+<id>.key, "
                        "K<name>+<alg>+<id>.private\n");
 
-       exit(EXIT_FAILURE);
+       exit(ret);
 }
 
 static void
@@ -879,7 +879,7 @@ main(int argc, char **argv) {
        };
 
        if (argc == 1) {
-               usage();
+               usage(EXIT_FAILURE);
        }
 
        isc_commandline_errprint = false;
@@ -1134,10 +1134,12 @@ main(int argc, char **argv) {
                                fprintf(stderr, "%s: invalid argument -%c\n",
                                        program, isc_commandline_option);
                        }
-                       FALLTHROUGH;
+                       /* Does not return. */
+                       usage(EXIT_FAILURE);
+
                case 'h':
                        /* Does not return. */
-                       usage();
+                       usage(EXIT_SUCCESS);
 
                case 'V':
                        /* Does not return. */
index 01595a12bb2693e9b3965ccae18c3eca29deec89..847c2ac1286fd3a1835c5dfb26f5f4557c1af848 100644 (file)
@@ -39,10 +39,10 @@ const char *program = "dnssec-revoke";
 static isc_mem_t *mctx = NULL;
 
 noreturn static void
-usage(void);
+usage(int ret);
 
 static void
-usage(void) {
+usage(int ret) {
        fprintf(stderr, "Usage:\n");
        fprintf(stderr, "    %s [options] keyfile\n\n", program);
        fprintf(stderr, "Version: %s\n", PACKAGE_VERSION);
@@ -58,7 +58,7 @@ usage(void) {
        fprintf(stderr, "     K<name>+<alg>+<new id>.key, "
                        "K<name>+<alg>+<new id>.private\n");
 
-       exit(EXIT_FAILURE);
+       exit(ret);
 }
 
 int
@@ -79,7 +79,7 @@ main(int argc, char **argv) {
        bool id = false;
 
        if (argc == 1) {
-               usage();
+               usage(EXIT_FAILURE);
        }
 
        isc_mem_create(&mctx);
@@ -118,10 +118,12 @@ main(int argc, char **argv) {
                                fprintf(stderr, "%s: invalid argument -%c\n",
                                        program, isc_commandline_option);
                        }
-                       FALLTHROUGH;
+                       /* Does not return. */
+                       usage(EXIT_FAILURE);
+
                case 'h':
                        /* Does not return. */
-                       usage();
+                       usage(EXIT_SUCCESS);
 
                case 'V':
                        /* Does not return. */
index f61b63af507cb5233edf9b192445d645c7fdba13..ec0ec7fea8f75cbfc0ef2805053fc3c6a4f2b93b 100644 (file)
@@ -43,10 +43,10 @@ const char *program = "dnssec-settime";
 static isc_mem_t *mctx = NULL;
 
 noreturn static void
-usage(void);
+usage(int ret);
 
 static void
-usage(void) {
+usage(int ret) {
        fprintf(stderr, "Usage:\n");
        fprintf(stderr, "    %s [options] keyfile\n\n", program);
        fprintf(stderr, "Version: %s\n", PACKAGE_VERSION);
@@ -101,7 +101,7 @@ usage(void) {
        fprintf(stderr, "     K<name>+<alg>+<new id>.key, "
                        "K<name>+<alg>+<new id>.private\n");
 
-       exit(EXIT_FAILURE);
+       exit(ret);
 }
 
 static void
@@ -242,7 +242,7 @@ main(int argc, char **argv) {
        options = DST_TYPE_PUBLIC | DST_TYPE_PRIVATE | DST_TYPE_STATE;
 
        if (argc == 1) {
-               usage();
+               usage(EXIT_FAILURE);
        }
 
        isc_mem_create(&mctx);
@@ -339,10 +339,13 @@ main(int argc, char **argv) {
                                fprintf(stderr, "%s: invalid argument -%c\n",
                                        program, isc_commandline_option);
                        }
-                       FALLTHROUGH;
+                       /* Does not return. */
+                       usage(EXIT_FAILURE);
+
                case 'h':
                        /* Does not return. */
-                       usage();
+                       usage(EXIT_SUCCESS);
+
                case 'I':
                        if (setinact || unsetinact) {
                                fatal("-I specified more than once");
@@ -476,7 +479,7 @@ main(int argc, char **argv) {
                                case ' ':
                                        break;
                                default:
-                                       usage();
+                                       usage(EXIT_FAILURE);
                                        break;
                                }
                        } while (*p != '\0');
index 10f7f7d242c233b0f7cd252c4d233317a1225e0e..1ae677b262226aba2ef50a3f718e8aaefc70b8e6 100644 (file)
@@ -3234,10 +3234,10 @@ print_version(FILE *fp) {
 }
 
 noreturn static void
-usage(void);
+usage(int ret);
 
 static void
-usage(void) {
+usage(int ret) {
        fprintf(stderr, "Usage:\n");
        fprintf(stderr, "\t%s [options] zonefile [keys]\n", program);
 
@@ -3325,7 +3325,7 @@ usage(void) {
        fprintf(stderr, "(default: all zone keys that have private keys)\n");
        fprintf(stderr, "\tkeyfile (Kname+alg+tag)\n");
 
-       exit(EXIT_FAILURE);
+       exit(ret);
 }
 
 static void
@@ -3699,10 +3699,12 @@ main(int argc, char *argv[]) {
                                fprintf(stderr, "%s: invalid argument -%c\n",
                                        program, isc_commandline_option);
                        }
-                       FALLTHROUGH;
+                       /* Does not return. */
+                       usage(EXIT_FAILURE);
+
                case 'h':
                        /* Does not return. */
-                       usage();
+                       usage(EXIT_SUCCESS);
 
                case 'V':
                        /* Does not return. */
@@ -3795,7 +3797,7 @@ main(int argc, char *argv[]) {
        argv += isc_commandline_index;
 
        if (argc < 1) {
-               usage();
+               usage(EXIT_FAILURE);
        }
 
        file = argv[0];
index 74157cd9189294bfb8ea48ef4981c9a298de3344..27c17e905df943d0b718fe87ca5ee7cc57d3913c 100644 (file)
@@ -138,10 +138,10 @@ loadzone(char *file, char *origin, dns_rdataclass_t rdclass, dns_db_t **db) {
 }
 
 noreturn static void
-usage(void);
+usage(int ret);
 
 static void
-usage(void) {
+usage(int ret) {
        fprintf(stderr, "Usage:\n");
        fprintf(stderr, "\t%s [options] zonefile [keys]\n", program);
 
@@ -163,7 +163,7 @@ usage(void) {
        fprintf(stderr, "\t-x:\tDNSKEY record signed with KSKs only, "
                        "not ZSKs\n");
        fprintf(stderr, "\t-z:\tAll records signed with KSKs\n");
-       exit(EXIT_SUCCESS);
+       exit(ret);
 }
 
 int
@@ -259,11 +259,12 @@ main(int argc, char *argv[]) {
                                fprintf(stderr, "%s: invalid argument -%c\n",
                                        program, isc_commandline_option);
                        }
-                       FALLTHROUGH;
+                       /* Does not return. */
+                       usage(EXIT_FAILURE);
 
                case 'h':
                        /* Does not return. */
-                       usage();
+                       usage(EXIT_SUCCESS);
 
                case 'V':
                        /* Does not return. */
@@ -292,7 +293,7 @@ main(int argc, char *argv[]) {
        argv += isc_commandline_index;
 
        if (argc < 1) {
-               usage();
+               usage(EXIT_FAILURE);
        }
 
        file = argv[0];
index 5a0f81c97ca4b668be1bac4bf10e57ea43036c74..15fab3e3f6158a250a655ebfaa56a29ae1a163b3 100644 (file)
@@ -574,13 +574,13 @@ try_key:
 }
 
 bool
-isoptarg(const char *arg, char **argv, void (*usage)(void)) {
+isoptarg(const char *arg, char **argv, void (*usage)(int ret)) {
        if (!strcasecmp(isc_commandline_argument, arg)) {
                if (argv[isc_commandline_index] == NULL) {
                        fprintf(stderr, "%s: missing argument -%c %s\n",
                                program, isc_commandline_option,
                                isc_commandline_argument);
-                       usage();
+                       usage(EXIT_FAILURE);
                }
                isc_commandline_argument = argv[isc_commandline_index];
                /* skip to next argument */
index 1df15a9a115535a01197a5325a60b0a8e3159484..e4591f4c792f0527b6212dd3bafaae8b98c1c970 100644 (file)
@@ -112,7 +112,7 @@ key_collision(dst_key_t *dstkey, dns_name_t *name, const char *dir,
              isc_mem_t *mctx, uint16_t min, uint16_t max, bool *exact);
 
 bool
-isoptarg(const char *arg, char **argv, void (*usage)(void));
+isoptarg(const char *arg, char **argv, void (*usage)(int ret));
 
 void
 loadjournal(isc_mem_t *mctx, dns_db_t *db, const char *journal);