From 0956e3d6074b197eb6aeadd6aa985e60e0dbd15d Mon Sep 17 00:00:00 2001 From: Danny Mayer Date: Sat, 3 Aug 2002 01:31:48 +0000 Subject: [PATCH] Add check and warning message for Windows 2000 systems not running Service Pack 2 or later --- bin/named/win32/include/named/ntservice.h | 3 ++- bin/named/win32/ntservice.c | 12 +++++++++--- bin/named/win32/os.c | 24 ++++++++++++++++++++++- 3 files changed, 34 insertions(+), 5 deletions(-) diff --git a/bin/named/win32/include/named/ntservice.h b/bin/named/win32/include/named/ntservice.h index 4ae97f823c..de1d5c971d 100644 --- a/bin/named/win32/include/named/ntservice.h +++ b/bin/named/win32/include/named/ntservice.h @@ -15,7 +15,7 @@ * WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ -/* $Id: ntservice.h,v 1.1 2001/07/18 03:43:18 mayer Exp $ */ +/* $Id: ntservice.h,v 1.2 2002/08/03 01:31:48 mayer Exp $ */ #ifndef NTSERVICE_H #define NTSERVICE_H @@ -31,4 +31,5 @@ void UpdateSCM(DWORD); void ServiceControl(DWORD dwCtrlCode); void ntservice_shutdown(); +BOOL ntservice_isservice(); #endif \ No newline at end of file diff --git a/bin/named/win32/ntservice.c b/bin/named/win32/ntservice.c index 488119f64b..1b3f891345 100644 --- a/bin/named/win32/ntservice.c +++ b/bin/named/win32/ntservice.c @@ -15,7 +15,7 @@ * WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ -/* $Id: ntservice.c,v 1.6 2002/02/20 03:33:36 marka Exp $ */ +/* $Id: ntservice.c,v 1.7 2002/08/03 01:31:48 mayer Exp $ */ #include #include @@ -30,7 +30,7 @@ /* Handle to SCM for updating service status */ static SERVICE_STATUS_HANDLE hServiceStatus = 0; -static int foreground = FALSE; +static BOOL foreground = FALSE; static char ConsoleTitle[128]; /* @@ -122,7 +122,13 @@ void ntservice_shutdown() { UpdateSCM(SERVICE_STOPPED); } - +/* + * Routine to check if this is a service or a foreground program + */ +BOOL +ntservice_isservice() { + return(!foreground); +} /* * ServiceControl(): Handles requests from the SCM and passes them on * to named. diff --git a/bin/named/win32/os.c b/bin/named/win32/os.c index 15d6f296c3..9ffcf70fdd 100644 --- a/bin/named/win32/os.c +++ b/bin/named/win32/os.c @@ -15,7 +15,7 @@ * WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ -/* $Id: os.c,v 1.16 2002/08/01 03:25:34 mayer Exp $ */ +/* $Id: os.c,v 1.17 2002/08/03 01:31:48 mayer Exp $ */ #include #include @@ -37,8 +37,10 @@ #include #include #include +#include #include +#include #include #include #include @@ -48,6 +50,9 @@ static char *pidfile = NULL; static BOOL Initialized = FALSE; +static char *version_error = + "named requires Windows 2000 Service Pack 2 or later to run correctly"; + void ns_paths_init() { if (!Initialized) @@ -64,6 +69,22 @@ ns_paths_init() { Initialized = TRUE; } +/* + * Due to Knowledge base article Q263823 we need to make sure that + * Windows 2000 systems have Service Pack 2 or later installed and + * warn when it isn't. + */ +static void +version_check(const char *progname) { + + if(isc_win32os_majorversion() < 5) + return; /* No problem with Version 4.0 */ + if(isc_win32os_versioncheck(5, 0, 2, 0) < 0) + if (ntservice_isservice()) + NTReportError(progname, version_error); + else + fprintf(stderr, "%s\n", version_error); +} static void setup_syslog(const char *progname) { @@ -82,6 +103,7 @@ ns_os_init(const char *progname) { ns_paths_init(); setup_syslog(progname); ntservice_init(); + version_check(progname); } void