diff --git a/CHANGES b/CHANGES index 376033be50..284020e2b4 100644 --- a/CHANGES +++ b/CHANGES @@ -1,3 +1,6 @@ +3757. [port] Enable Python tools (dnssec-coverage, + dnssec-checkds) to run on Windows. [RT #34355] + 3756. [bug] GSSAPI Kerberos realm checking was broken in check_config leading to spurious messages being logged. [RT #35443] diff --git a/bin/dnssec/win32/importkey.vcxproj.in b/bin/dnssec/win32/importkey.vcxproj.in index 4ba5937556..810c7a3d8f 100644 --- a/bin/dnssec/win32/importkey.vcxproj.in +++ b/bin/dnssec/win32/importkey.vcxproj.in @@ -71,14 +71,6 @@ $(Configuration);..\..\..\lib\isc\win32\$(Configuration);..\..\..\lib\dns\win32\$(Configuration);%(AdditionalLibraryDirectories) dnssectool.lib;libisc.lib;libdns.lib;%(AdditionalDependencies) -@IF PYTHON - - cd ..\..\python -copy /Y dnssec-checkds.py ..\..\Build\$(Configuration)\dnssec-checkds.py -copy /Y dnssec-coverage.py ..\..\Build\$(Configuration)\dnssec-coverage.py - - -@END PYTHON @@ -108,14 +100,6 @@ copy /Y dnssec-coverage.py ..\..\Build\$(Configuration)\dnssec-coverage.py $(Configuration);..\..\..\lib\isc\win32\$(Configuration);..\..\..\lib\dns\win32\$(Configuration);%(AdditionalLibraryDirectories) dnssectool.lib;libisc.lib;libdns.lib;%(AdditionalDependencies) -@IF PYTHON - - cd ..\..\python -copy /Y dnssec-checkds.py ..\..\Build\$(Configuration)\dnssec-checkds.py -copy /Y dnssec-coverage.py ..\..\Build\$(Configuration)\dnssec-coverage.py - - -@END PYTHON diff --git a/bin/python/dnssec-checkds.py.in b/bin/python/dnssec-checkds.py.in index 8f1146821b..b923756191 100644 --- a/bin/python/dnssec-checkds.py.in +++ b/bin/python/dnssec-checkds.py.in @@ -15,15 +15,41 @@ # PERFORMANCE OF THIS SOFTWARE. ############################################################################ -# $Id$ - import argparse import pprint import os +prog='dnssec-checkds' + +# These routines permit platform-independent location of BIND 9 tools +if os.name == 'nt': + import win32con + import win32api + +def prefix(bindir = ''): + if os.name != 'nt': + return os.path.join('@prefix@', bindir) + + bind_subkey = "Software\\ISC\\BIND" + hKey = None + keyFound = True + try: + hKey = win32api.RegOpenKeyEx(win32con.HKEY_LOCAL_MACHINE, bind_subkey) + except: + keyFound = False + if keyFound: + try: + (namedBase, _) = win32api.RegQueryValueEx(hKey, "InstallDir") + except: + keyFound = False + win32api.RegCloseKey(hKey) + if keyFound: + return os.path.join(namedBase, bindir) + return os.path.join(win32api.GetSystemDirectory(), bindir) + def shellquote(s): if os.name == 'nt': - return s + return '"' + s.replace('"', '"\\"') + '"' return "'" + s.replace("'", "'\\''") + "'" ############################################################################ @@ -257,12 +283,13 @@ def checkdlv(zone, lookaside, masterfile = None): ############################################################################ def parse_args(): global args + parser = argparse.ArgumentParser(description=prog + ': checks DS coverage') + bindir = 'bin' - if os.name != 'nt': - sbindir = 'sbin' - else: + if os.name == 'nt': sbindir = 'bin' - parser = argparse.ArgumentParser(description='checkds: checks DS coverage') + else: + sbindir = 'sbin' parser.add_argument('zone', type=str, help='zone to check') parser.add_argument('-f', '--file', dest='masterfile', type=str, @@ -270,10 +297,10 @@ def parse_args(): parser.add_argument('-l', '--lookaside', dest='lookaside', type=str, help='DLV lookaside zone') parser.add_argument('-d', '--dig', dest='dig', - default=os.path.join('@prefix@', bindir, 'dig'), + default=os.path.join(prefix(bindir), 'dig'), type=str, help='path to \'dig\'') parser.add_argument('-D', '--dsfromkey', dest='dsfromkey', - default=os.path.join('@prefix@', sbindir, + default=os.path.join(prefix(sbindir), 'dnssec-dsfromkey'), type=str, help='path to \'dig\'') parser.add_argument('-v', '--version', action='version', version='9.9.1') diff --git a/bin/python/dnssec-coverage.py.in b/bin/python/dnssec-coverage.py.in index 1365471e04..6aded9ae19 100755 --- a/bin/python/dnssec-coverage.py.in +++ b/bin/python/dnssec-coverage.py.in @@ -15,10 +15,6 @@ # PERFORMANCE OF THIS SOFTWARE. ############################################################################ -# changes 2014-01-08, Peter Palfrader: -# - support checking only X days into the future. -# - support checking only KSK keys or only ZSK keys. - import argparse import os import glob @@ -31,6 +27,32 @@ import pprint prog='dnssec-coverage' +# These routines permit platform-independent location of BIND 9 tools +if os.name == 'nt': + import win32con + import win32api + +def prefix(bindir = ''): + if os.name != 'nt': + return os.path.join('@prefix@', bindir) + + bind_subkey = "Software\\ISC\\BIND" + hKey = None + keyFound = True + try: + hKey = win32api.RegOpenKeyEx(win32con.HKEY_LOCAL_MACHINE, bind_subkey) + except: + keyFound = False + if keyFound: + try: + (namedBase, _) = win32api.RegQueryValueEx(hKey, "InstallDir") + except: + keyFound = False + win32api.RegCloseKey(hKey) + if keyFound: + return os.path.join(namedBase, bindir) + return os.path.join(win32api.GetSystemDirectory(), bindir) + ######################################################################## # Class Event ######################################################################## @@ -633,11 +655,8 @@ def set_path(command, default=None): def parse_args(): """Read command line arguments, set global 'args' structure""" global args - bindir = 'bin'; - compilezone = set_path('named-compilezone', - os.path.join('@prefix@', bindir, - 'named-compilezone')) + os.path.join(prefix('bin'), 'named-compilezone')) parser = argparse.ArgumentParser(description=prog + ': checks future ' + 'DNSKEY coverage for a zone') diff --git a/bin/python/win32.py b/bin/python/win32.py deleted file mode 100644 index b347370bba..0000000000 --- a/bin/python/win32.py +++ /dev/null @@ -1,42 +0,0 @@ -#!@PYTHON@ -############################################################################ -# Copyright (C) 2013 Internet Systems Consortium, Inc. ("ISC") -# -# Permission to use, copy, modify, and/or distribute this software for any -# purpose with or without fee is hereby granted, provided that the above -# copyright notice and this permission notice appear in all copies. -# -# THE SOFTWARE IS PROVIDED "AS IS" AND ISC DISCLAIMS ALL WARRANTIES WITH -# REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY -# AND FITNESS. IN NO EVENT SHALL ISC BE LIABLE FOR ANY SPECIAL, DIRECT, -# INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM -# LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE -# OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR -# PERFORMANCE OF THIS SOFTWARE. -############################################################################ - -# $Id$ - -# ntpath rewrote in Python - -import win32con -import win32api - -BIND_SUBKEY = "Software\\ISC\\BIND" - -def base(): - hKey = None - keyFound = True - try: - hKey = win32api.RegOpenKeyEx(win32con.HKEY_LOCAL_MACHINE, BIND_SUBKEY) - except: - keyFound = False - if keyFound: - try: - (namedBase, _) = win32api.RegQueryValueEx(hKey, "InstallDir") - except: - keyFound = False - win32api.RegCloseKey(hKey) - if keyFound: - return namedBase - return win32api.GetSystemDirectory() diff --git a/bin/tests/system/checkds/dig.pl b/bin/tests/system/checkds/dig.pl new file mode 100644 index 0000000000..0470d5c5de --- /dev/null +++ b/bin/tests/system/checkds/dig.pl @@ -0,0 +1,50 @@ +#!/usr/bin/perl +# +# Copyright (C) 2014 Internet Systems Consortium, Inc. ("ISC") +# +# Permission to use, copy, modify, and/or distribute this software for any +# purpose with or without fee is hereby granted, provided that the above +# copyright notice and this permission notice appear in all copies. +# +# THE SOFTWARE IS PROVIDED "AS IS" AND ISC DISCLAIMS ALL WARRANTIES WITH +# REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY +# AND FITNESS. IN NO EVENT SHALL ISC BE LIABLE FOR ANY SPECIAL, DIRECT, +# INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM +# LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE +# OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +# PERFORMANCE OF THIS SOFTWARE. + +# $Id$ + +my $arg; +my $ext; +my $file; + +foreach $arg (@ARGV) { + if ($arg =~ /^\+/) { + next; + } + if ($arg =~ /^-t/) { + next; + } + if ($arg =~ /^ds$/i) { + $ext = "ds"; + next; + } + if ($arg =~ /^dlv$/i) { + $ext = "dlv"; + next; + } + if ($arg =~ /^dnskey$/i) { + $ext = "dnskey"; + next; + } + $file = $arg; + next; +} + +open F, $file . "." . $ext . ".db" || die $!; +while () { + print; +} +close F; diff --git a/lib/isc/win32/libisc.vcxproj.in b/lib/isc/win32/libisc.vcxproj.in index 83fc5c10e3..1e01ff2b41 100644 --- a/lib/isc/win32/libisc.vcxproj.in +++ b/lib/isc/win32/libisc.vcxproj.in @@ -192,6 +192,10 @@ copy ..\bin\dnssec\dnssec-settime.html ..\Build\Release copy ..\bin\dnssec\dnssec-revoke.html ..\Build\Release copy ..\bin\dnssec\dnssec-verify.html ..\Build\Release copy ..\bin\dnssec\dnssec-importkey.html ..\Build\Release +@IF PYTHON +copy ..\bin\python\dnssec-checkds.html ..\Build\Release +copy ..\bin\python\dnssec-coverage.html ..\Build\Release +@END PYTHON @IF PKCS11 copy ..\bin\pkcs11\pkcs11-keygen.html ..\Build\Release copy ..\bin\pkcs11\pkcs11-list.html ..\Build\Release diff --git a/win32utils/legacy/BuildSetup.bat.in b/win32utils/legacy/BuildSetup.bat.in index c266b0eda3..0512e0b5d3 100644 --- a/win32utils/legacy/BuildSetup.bat.in +++ b/win32utils/legacy/BuildSetup.bat.in @@ -66,6 +66,10 @@ copy ..\..\bin\dnssec\dnssec-settime.html ..\..\Build\Release copy ..\..\bin\dnssec\dnssec-revoke.html ..\..\Build\Release copy ..\..\bin\dnssec\dnssec-verify.html ..\..\Build\Release copy ..\..\bin\dnssec\dnssec-importkey.html ..\..\Build\Release +@IF PYTHON +copy ..\..\bin\python\dnssec-checkds.html ..\..\Build\Release +copy ..\..\bin\python\dnssec-coverage.html ..\..\Build\Release +@END PYTHON @IF PKCS11 copy ..\..\bin\pkcs11\pkcs11-keygen.html ..\..\Build\Release copy ..\..\bin\pkcs11\pkcs11-list.html ..\..\Build\Release