summaryrefslogtreecommitdiff
path: root/scripts
diff options
context:
space:
mode:
authorFlorian Weimer <fweimer@redhat.com>2016-12-31 21:16:27 +0100
committerFlorian Weimer <fweimer@redhat.com>2016-12-31 21:16:27 +0100
commit4f157746e0c713965d9143b52fef606312087c48 (patch)
tree82a04d21a1d007fc93b1ead4544877a0e20b1049 /scripts
parentfc82b0a2dfe7dbd35671c10510a8da1043d746a5 (diff)
Update DNS RR type definitions [BZ #20593]
This commit includes a new script which allows generating parts of the header files from IANA DNS parameters protocol registry.
Diffstat (limited to 'scripts')
-rw-r--r--scripts/gen-rrtypes.py68
1 files changed, 68 insertions, 0 deletions
diff --git a/scripts/gen-rrtypes.py b/scripts/gen-rrtypes.py
new file mode 100644
index 0000000000..88bcb4ceeb
--- /dev/null
+++ b/scripts/gen-rrtypes.py
@@ -0,0 +1,68 @@
+#!/usr/bin/python3
+# Generate DNS RR type constants for resolv header files.
+# Copyright (C) 2016 Free Software Foundation, Inc.
+# This file is part of the GNU C Library.
+#
+# The GNU C Library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License, or (at your option) any later version.
+#
+# The GNU C Library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with the GNU C Library; if not, see
+# <http://www.gnu.org/licenses/>.
+
+"""Generate DNS RR type constants for resolv header files.
+
+resolv/arpa/nameser.h and resolv/arpa/nameser_compat.h contain lists
+of RR type constants. This script downloads the current definitions
+from the IANA DNS Parameters protocol registry and translates it into
+the two different lists.
+
+Two lists are written to standard output. The first one contains enum
+constants for resolv/arpa/nameser.h. The second one lists the
+preprocessor macros for resolv/arpa/nameser_compat.h.
+
+"""
+
+# URL of the IANA registry.
+source = "http://www.iana.org/assignments/dns-parameters/dns-parameters-4.csv"
+
+import collections
+import csv
+import io
+import urllib.request
+
+Type = collections.namedtuple("Type", "name number comment")
+
+def get_types(source):
+ for row in csv.reader(io.TextIOWrapper(urllib.request.urlopen(source))):
+ if row[0] in ('TYPE', 'Unassigned', 'Private use', 'Reserved'):
+ continue
+ name, number, comment = row[:3]
+ if name == '*':
+ name = 'ANY'
+ comment = 'request for all cached records'
+ number = int(number)
+ yield Type(name, number, comment)
+
+types = list(get_types(source))
+
+print("// enum constants for resolv/arpa/nameser.h")
+print()
+for typ in types:
+ name = typ.name.replace("-", "_").lower()
+ print(" ns_t_{0} = {1.number},".format(name, typ))
+print()
+
+print("// macro aliases resolv/arpa/nameser_compat.h")
+print()
+for typ in types:
+ name = typ.name.replace("-", "_")
+ print("#define T_{0} ns_t_{1}".format(name.upper(), name.lower()))
+print()