bozo: fix overrun from -rxbind on restart
[openafs.git] / src / WINNT / bosctlsvc / bosctlsvc.c
index c58ac53..475d7ac 100644 (file)
@@ -1,5 +1,10 @@
-/* Copyright (C)  1998  Transarc Corporation.  All rights reserved.
+/*
+ * Copyright 2000, International Business Machines Corporation and others.
+ * All Rights Reserved.
  *
+ * This software has been released under the terms of the IBM Public
+ * License.  For details, see the LICENSE file in the top-level source
+ * directory or online at http://www.openafs.org/dl/license10.html
  */
 
 /* This file implements the AFS BOS control service.  Basically, it provides
@@ -11,7 +16,6 @@
 #include <afs/param.h>
 #include <afs/stds.h>
 
-#include <param.h>
 #include <stddef.h>
 #include <stdlib.h>
 #include <stdio.h>
 #include <afs/procmgmt.h>
 #include <afs/dirpath.h>
 #include <afs/bnode.h>
-
+#include <afs/afsicf.h>
 
 /* Define globals */
 
 #define BOSSERVER_STARTMSG_EXE  "afslegal.exe"
 
-#define BOSSERVER_RESTART_ARG_MAX  2  /* "-noauth", "-log" */
+#define BOSSERVER_RESTART_ARG_MAX  3  /* "-noauth", "-log", "-rxbind" */
 #define BOSSERVER_WAIT_TIME_HINT  60  /* seconds */
 #define BOSSERVER_STOP_TIME_MAX  (FSSDTIME + 60)  /* seconds */
 
@@ -228,14 +232,14 @@ BosCtlMain(DWORD argc, LPTSTR *argv)
     if ((bosCtlEvent[BOS_STOP_EVENT] = CreateEvent(NULL,
                                                   FALSE /* manual reset */,
                                                   FALSE /* initial state */,
-                                                  NULL)) == NULL) {
+                                                  TEXT("BosCtlSvc Stop Event"))) == NULL) {
        status = GetLastError();
     }
 
     if ((bosCtlEvent[BOS_EXIT_EVENT] = CreateEvent(NULL,
                                                   FALSE /* manual reset */,
                                                   FALSE /* initial state */,
-                                                  NULL)) == NULL) {
+                                                  TEXT("BosCtlSvc Exit Event"))) == NULL) {
        status = GetLastError();
     }
 
@@ -268,6 +272,9 @@ BosCtlMain(DWORD argc, LPTSTR *argv)
        return;
     }
 
+    /* For XP SP2 and above, open required ports */
+    icf_CheckAndAddAFSPorts(AFS_PORTSET_SERVER);
+
     /* Initialize the dirpath package so can access local bosserver binary */
     if (!(initAFSDirPath() & AFSDIR_SERVER_PATHS_OK)) {
        /* sw install directory probably not in registry; can not continue */
@@ -410,6 +417,11 @@ BosserverDoExitEvent(pid_t cpid,
                    restartArgv[i] = "-log";
                    i++;
                }
+               if (exitCode & BOSEXIT_RXBIND_FLAG) {
+                   /* pass "-rxbind" to new bosserver */
+                   restartArgv[i] = "-rxbind";
+                   i++;
+               }
                restartArgv[i] = NULL;
            }
        }
@@ -447,7 +459,7 @@ BosserverRun(DWORD argc,
     char **spawn_argv;
 
     /* Display bosserver startup (legal) message; first start only */
-    BosserverStartupMsgDisplay();
+    /* BosserverStartupMsgDisplay(); */
 
     /* Set env variable forcing process mgmt lib to spawn processes detached */
     (void)putenv(PMGT_SPAWN_DETACHED_ENV_NAME "=1");