* 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
void ServiceControl(DWORD dwCtrlCode);
void
ntservice_shutdown();
+BOOL ntservice_isservice();
#endif
\ No newline at end of file
* 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 <config.h>
#include <stdio.h>
/* 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];
/*
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.
* 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 <config.h>
#include <stdarg.h>
#include <isc/string.h>
#include <isc/ntpaths.h>
#include <isc/util.h>
+#include <isc/win32os.h>
#include <named/main.h>
+#include <named/log.h>
#include <named/os.h>
#include <named/globals.h>
#include <named/ntservice.h>
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)
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) {
ns_paths_init();
setup_syslog(progname);
ntservice_init();
+ version_check(progname);
}
void