]> git.ipfire.org Git - thirdparty/knot-dns.git/commitdiff
keymgr: interpret omitted bool argument as true
authorDaniel Salzman <daniel.salzman@nic.cz>
Sat, 19 Jul 2025 18:17:42 +0000 (20:17 +0200)
committerDaniel Salzman <daniel.salzman@nic.cz>
Mon, 21 Jul 2025 12:20:48 +0000 (14:20 +0200)
src/utils/keymgr/functions.c

index a07cdf66320699316695847399cd446abd80cefc..eb3febf42a6f4055d103ab4274f1e26d161a72e9 100644 (file)
@@ -126,6 +126,21 @@ static void bitmap_set(kdnssec_generate_flags_t *bitmap, int flag, bool onoff)
         }
 }
 
+static bool same_command_bool(const char *arg, const char *cmd, bool *res)
+{
+       char prefix[32];
+       (void)snprintf(prefix, sizeof(prefix), "%s=", cmd);
+       if (same_command(arg, prefix, true)) {
+               *res = str2bool(arg + strlen(prefix));
+               return true;
+       } else if (same_command(arg, cmd, false)) {
+               *res = true;
+               return true;
+       } else {
+               return false;
+       }
+}
+
 static bool genkeyargs(int argc, char *argv[], bool just_timing,
                        kdnssec_generate_flags_t *flags, dnssec_key_algorithm_t *algorithm,
                        uint16_t *keysize, knot_kasp_key_timing_t *timing,
@@ -144,6 +159,7 @@ static bool genkeyargs(int argc, char *argv[], bool just_timing,
 
        // parse args
        for (int i = 0; i < argc; i++) {
+               bool res;
                if (!just_timing && same_command(argv[i], "algorithm=", true)) {
                        int alg = 256; // invalid value
                        (void)str_to_int(argv[i] + 10, &alg, 0, 255);
@@ -158,15 +174,15 @@ static bool genkeyargs(int argc, char *argv[], bool just_timing,
                                return false;
                        }
                        *algorithm = alg;
-               } else if (same_command(argv[i], "ksk=", true)) {
-                       bitmap_set(flags, DNSKEY_GENERATE_KSK, str2bool(argv[i] + 4));
-               } else if (same_command(argv[i], "zsk=", true)) {
-                       bitmap_set(flags, DNSKEY_GENERATE_ZSK, str2bool(argv[i] + 4));
-               } else if (same_command(argv[i], "sep=", true)) {
+               } else if (same_command_bool(argv[i], "ksk", &res)) {
+                       bitmap_set(flags, DNSKEY_GENERATE_KSK, res);
+               } else if (same_command_bool(argv[i], "zsk", &res)) {
+                       bitmap_set(flags, DNSKEY_GENERATE_ZSK, res);
+               } else if (same_command_bool(argv[i], "sep", &res)) {
                        bitmap_set(flags, DNSKEY_GENERATE_SEP_SPEC, true);
-                       bitmap_set(flags, DNSKEY_GENERATE_SEP_ON, str2bool(argv[i] + 4));
-               } else if (same_command(argv[i], "for-later=", true)) {
-                       bitmap_set(flags, DNSKEY_GENERATE_FOR_LATER, str2bool(argv[i] + 10));
+                       bitmap_set(flags, DNSKEY_GENERATE_SEP_ON, res);
+               } else if (same_command_bool(argv[i], "for-later", &res)) {
+                       bitmap_set(flags, DNSKEY_GENERATE_FOR_LATER, res);
                } else if (!just_timing && same_command(argv[i], "size=", true)) {
                        if (str_to_u16(argv[i] + 5, keysize) != KNOT_EOK) {
                                ERR2("invalid size: '%s'", argv[i] + 5);