]> git.ipfire.org Git - thirdparty/knot-resolver.git/commitdiff
Correctly encode IPv6 addresses in root hints to prevent to uint16_t conversion
authorOndřej Surý <ondrej@sury.org>
Wed, 17 Aug 2016 12:38:00 +0000 (14:38 +0200)
committerOndřej Surý <ondrej@sury.org>
Wed, 17 Aug 2016 12:38:00 +0000 (14:38 +0200)
lib/zonecut.c
scripts/inet_pton.py [new file with mode: 0755]

index d58e893a5461e4a721f7d9366bb22dd7c10780d0..f4fe3503823e3029f4c864e577d0af3736f41808 100644 (file)
@@ -53,17 +53,17 @@ static const struct hint_info SBELT[HINT_COUNT] = {
         { U8("\x01""b""\x0c""root-servers""\x03""net"), I4, U8("\xc0\xe4O\xc9")    }, /* 192.228.79.201 */
         { U8("\x01""c""\x0c""root-servers""\x03""net"), I4, U8("\xc6)\x00\x04")    }, /* 192.33.4.12 */
         { U8("\x01""a""\x0c""root-servers""\x03""net"), I4, U8("\xc6)\x00\x04")    }, /* 198.41.0.4 */
-        { U8("\x01""j""\x0c""root-servers""\x03""net"), I6, U8(" \x01\x05\x03\x0c'\x00\x00\x00\x00\x00\x00\x00\x02\x00\x03")    },
-        { U8("\x01""k""\x0c""root-servers""\x03""net"), I6, U8(" \x01\x07\xfd\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01") },
-        { U8("\x01""d""\x0c""root-servers""\x03""net"), I6, U8(" \x01\x05\x00\x00-\x00\x00\x00\x00\x00\x00\x00\x00\x00\r")      },
-        { U8("\x01""f""\x0c""root-servers""\x03""net"), I6, U8(" \x01\x05\x00\x00/\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0f")    },
-        { U8("\x01""h""\x0c""root-servers""\x03""net"), I6, U8(" \x01\x05\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00S")    },
-        { U8("\x01""i""\x0c""root-servers""\x03""net"), I6, U8(" \x01\x07\xfe\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00S")    },
-        { U8("\x01""l""\x0c""root-servers""\x03""net"), I6, U8(" \x01\x05\x00\x00\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00B")    },
-        { U8("\x01""m""\x0c""root-servers""\x03""net"), I6, U8(" \x01\r\xc3\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x005")      },
-        { U8("\x01""b""\x0c""root-servers""\x03""net"), I6, U8(" \x01\x05\x00\x00\x84\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0b") },
-        { U8("\x01""c""\x0c""root-servers""\x03""net"), I6, U8(" \x01\x05\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0c") },
-        { U8("\x01""a""\x0c""root-servers""\x03""net"), I6, U8(" \x01\x05\x03\xba>\x00\x00\x00\x00\x00\x00\x00\x02\x000")       },
+       { U8("\x01""a""\x0c""root-servers""\x03""net"), I6, U8("\x20\x01\x05\x03\xba\x3e\x00\x00\x00\x00\x00\x00\x00\x02\x00") }, /* 2001:503:ba3e::2:30 */
+       { U8("\x01""b""\x0c""root-servers""\x03""net"), I6, U8("\x20\x01\x05\x00\x00\x84\x00\x00\x00\x00\x00\x00\x00\x00\x00") }, /* 2001:500:84::b */
+       { U8("\x01""c""\x0c""root-servers""\x03""net"), I6, U8("\x20\x01\x05\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00") }, /* 2001:500:2::c */
+       { U8("\x01""d""\x0c""root-servers""\x03""net"), I6, U8("\x20\x01\x05\x00\x00\x2d\x00\x00\x00\x00\x00\x00\x00\x00\x00") }, /* 2001:500:2d::d */
+       { U8("\x01""f""\x0c""root-servers""\x03""net"), I6, U8("\x20\x01\x05\x00\x00\x2f\x00\x00\x00\x00\x00\x00\x00\x00\x00") }, /* 2001:500:2f::f */
+       { U8("\x01""h""\x0c""root-servers""\x03""net"), I6, U8("\x20\x01\x05\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00") }, /* 2001:500:1::53 */
+       { U8("\x01""i""\x0c""root-servers""\x03""net"), I6, U8("\x20\x01\x07\xfe\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00") }, /* 2001:7fe::53 */
+       { U8("\x01""j""\x0c""root-servers""\x03""net"), I6, U8("\x20\x01\x05\x03\x0c\x27\x00\x00\x00\x00\x00\x00\x00\x02\x00") }, /* 2001:503:c27::2:30 */
+       { U8("\x01""k""\x0c""root-servers""\x03""net"), I6, U8("\x20\x01\x07\xfd\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00") }, /* 2001:7fd::1 */
+       { U8("\x01""l""\x0c""root-servers""\x03""net"), I6, U8("\x20\x01\x05\x00\x00\x9f\x00\x00\x00\x00\x00\x00\x00\x00\x00") }, /* 2001:500:9f::42 */
+       { U8("\x01""m""\x0c""root-servers""\x03""net"), I6, U8("\x20\x01\x0d\xc3\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00") }, /* 2001:dc3::35 */
 };
 #undef I4
 #undef I6
@@ -289,6 +289,10 @@ int kr_zonecut_set_sbelt(struct kr_context *ctx, struct kr_zonecut *cut)
                for (unsigned i = 0; i < HINT_COUNT; ++i) {
                        const struct hint_info *hint = &SBELT[i];
                        knot_rdata_init(rdata_arr, hint->len, hint->addr, 0);
+                       for(int j = 0; j < (uint16_t)rdata_arr[4]; j++) {
+                               printf("%02x", rdata_arr[j+4+2]);
+                       }
+                       printf("\n");
                        ret = kr_zonecut_add(cut, hint->name, rdata_arr);
                        if (ret != 0) {
                                break;
diff --git a/scripts/inet_pton.py b/scripts/inet_pton.py
new file mode 100755 (executable)
index 0000000..f6adeb9
--- /dev/null
@@ -0,0 +1,13 @@
+#!/usr/bin/python
+
+from socket import inet_pton,AF_INET6
+import sys
+from binascii import hexlify
+
+x = hexlify(inet_pton(AF_INET6, sys.argv[1]))
+
+out = ""
+for i in range(0, 15):
+    out += "\\x" + x[i*2] + x[i*2+1]
+
+print out