]> git.ipfire.org Git - thirdparty/knot-dns.git/commitdiff
keymgr: support colon separators in keyid
authorDaniel Salzman <daniel.salzman@nic.cz>
Mon, 21 Jul 2025 06:43:36 +0000 (08:43 +0200)
committerDaniel Salzman <daniel.salzman@nic.cz>
Mon, 21 Jul 2025 12:24:21 +0000 (14:24 +0200)
src/libdnssec/keyid.c

index 59086dc4c9c1d65d39e9b159aeb9b01e49ce059d..cb4d2679fd9fef73acce2ed3b7e58286fd33e5f0 100644 (file)
@@ -22,11 +22,16 @@ bool dnssec_keyid_is_valid(const char *id)
                return false;
        }
 
-       if (strlen(id) % 2 != 0) {
+       size_t id_len = strlen(id);
+       bool with_colons = (id_len > 3 && id[2] == ':'); // p11tool format XX:XX:XX:<..>:XX
+       if ((id_len - (with_colons ? id_len / 3 : 0)) % 2 != 0) {
                return false;
        }
 
        for (int i = 0; id[i] != '\0'; i++) {
+               if (with_colons && i > 0 && i < id_len - 1 && i % 3 == 2 && id[i] == ':') {
+                       continue;
+               }
                if (!is_xdigit(id[i])) {
                        return false;
                }
@@ -42,10 +47,16 @@ void dnssec_keyid_normalize(char *id)
                return;
        }
 
+       size_t j = 0;
        for (size_t i = 0; id[i] != '\0'; i++) {
+               if (id[i] == ':') {
+                       assert(i % 3 == 2);
+                       continue;
+               }
                assert(id[i] != '\0' && is_xdigit(id[i]));
-               id[i] = knot_tolower(id[i]);
+               id[j++] = knot_tolower(id[i]);
        }
+       id[j] = '\0';
 }
 
 _public_