diff options
author | Florian Weimer <fweimer@redhat.com> | 2016-12-31 21:16:27 +0100 |
---|---|---|
committer | Florian Weimer <fweimer@redhat.com> | 2016-12-31 21:16:27 +0100 |
commit | 4f157746e0c713965d9143b52fef606312087c48 (patch) | |
tree | 82a04d21a1d007fc93b1ead4544877a0e20b1049 /scripts | |
parent | fc82b0a2dfe7dbd35671c10510a8da1043d746a5 (diff) | |
download | glibc-4f157746e0c713965d9143b52fef606312087c48.zip glibc-4f157746e0c713965d9143b52fef606312087c48.tar.gz glibc-4f157746e0c713965d9143b52fef606312087c48.tar.bz2 |
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.py | 68 |
1 files changed, 68 insertions, 0 deletions
diff --git a/scripts/gen-rrtypes.py b/scripts/gen-rrtypes.py new file mode 100644 index 0000000..88bcb4c --- /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() |