]> git.ipfire.org Git - thirdparty/bind9.git/commitdiff
Don't use wildcard keys in update-policy in ddns-confgen 12439/head
authorEvan Hunt <each@isc.org>
Wed, 22 Jul 2026 21:35:19 +0000 (14:35 -0700)
committerEvan Hunt <each@isc.org>
Thu, 23 Jul 2026 05:21:07 +0000 (22:21 -0700)
In ddns-confgen, if the requested key name is a wildcard, don't generate
an update-policy statement, since using a wildcard as an SSU identity
allows other keys that match the wildcard to update records.

bin/confgen/keygen.c
bin/confgen/keygen.h
bin/confgen/rndc-confgen.c
bin/confgen/tsig-keygen.c

index 40123b15b8ad342e4e1c0dc5dadd462bd7eec493..5bc7e1d0fbf5ebac1abf5eae2aa7ab304ed44afb 100644 (file)
@@ -95,7 +95,8 @@ alg_bits(dns_secalg_t alg) {
  * rndc.conf and named.conf.
  */
 void
-makesafe_keyname(const char *keyname, char *namebuf, size_t length) {
+makesafe_keyname(const char *keyname, char *namebuf, size_t length,
+                bool *wildcard) {
        dns_fixedname_t fixed;
        dns_name_t *name = dns_fixedname_initname(&fixed);
        isc_result_t result;
@@ -109,6 +110,8 @@ makesafe_keyname(const char *keyname, char *namebuf, size_t length) {
                fatal("invalid key name: %s", isc_result_totext(result));
        }
 
+       SET_IF_NOT_NULL(wildcard, dns_name_iswildcard(name));
+
        isc_buffer_init(&b, namebuf, length);
        result = dns_name_totext(name, DNS_NAME_QUOTED | DNS_NAME_OMITFINALDOT,
                                 &b);
index 97be9b4e1ccc773051cdb41f2da01fa0a565e12c..8392f02009456733662198314ea68ac8481c5eb9 100644 (file)
@@ -21,7 +21,8 @@
 #include <dns/secalg.h>
 
 void
-makesafe_keyname(const char *keyname, char *namebuf, size_t length);
+makesafe_keyname(const char *keyname, char *namebuf, size_t length,
+                bool *wildcard);
 
 void
 generate_key(isc_mem_t *mctx, dns_secalg_t alg, int keysize,
index 5ddede48ad96a1d6ee9c3c41512ba98804e6c114..a63614d18c985da20736b7c0a016bb83918f17f6 100644 (file)
@@ -208,7 +208,7 @@ main(int argc, char **argv) {
                usage(EXIT_FAILURE);
        }
 
-       makesafe_keyname(keyname, namebuf, sizeof(namebuf));
+       makesafe_keyname(keyname, namebuf, sizeof(namebuf), NULL);
 
        if (alg == DST_ALG_HMACMD5) {
                fprintf(stderr, "warning: use of hmac-md5 for RNDC keys "
index c6af0ed7b6a1e87b8154fe4fbd900cfb3d482832..88acff9e09616ee0254672626a01f28fd3bfca68 100644 (file)
@@ -94,6 +94,7 @@ main(int argc, char **argv) {
        int keysize = 256;
        int len = 0;
        int ch;
+       bool wildcard;
 
        isc_commandline_init(argc, argv);
 
@@ -213,7 +214,7 @@ main(int argc, char **argv) {
                }
        }
 
-       makesafe_keyname(keyname, namebuf, sizeof(namebuf));
+       makesafe_keyname(keyname, namebuf, sizeof(namebuf), &wildcard);
 
        isc_buffer_init(&key_txtbuffer, &key_txtsecret, sizeof(key_txtsecret));
 
@@ -234,7 +235,10 @@ key \"%s\" {\n\
               namebuf, algname, (int)isc_buffer_usedlength(&key_txtbuffer),
               (char *)isc_buffer_base(&key_txtbuffer));
 
-       if (!quiet) {
+       if (wildcard && !quiet) {
+               printf("\n\
+# This is a wildcard key, and should not be used in an update-policy.\n");
+       } else if (!quiet) {
                if (self_domain != NULL) {
                        printf("\n\
 # Then, in the \"zone\" statement for the zone containing the\n\