mirror of https://github.com/OpenIdentityPlatform/OpenDJ.git

jvergara
18.28.2007 08d62ab30082bc0feb209c8de443b8ec9a419dd6
opendj-sdk/opends/src/build-tools/windows/service.c
@@ -72,7 +72,7 @@
  }
  debug("registerServiceHandler returning '%d'", returnValue);
  return returnValue;
}  // registerServiceHandler
@@ -147,7 +147,8 @@
  );
  if (scm == NULL)
  {
    debugError("Failed to open the Service Control Manager.  Last error = %d", GetLastError());
    debugError("Failed to open the Service Control Manager.  Last error = %d",
        GetLastError());
    returnValue = SERVICE_RETURN_ERROR;
  }
  else
@@ -247,7 +248,8 @@
    );
    if (result != ERROR_SUCCESS)
    {
      debugError("RegSetValueEx('EventMessageFile') failed, result=%d.", result);
      debugError("RegSetValueEx('EventMessageFile') failed, result=%d.",
          result);
      success = FALSE;
    }
  }
@@ -290,7 +292,8 @@
    );
    if (result != ERROR_SUCCESS)
    {
      debugError("RegSetValueEx('CategoryMessageFile') failed, result=%d.", result);
      debugError("RegSetValueEx('CategoryMessageFile') failed, result=%d.",
          result);
      success = FALSE;
    }
  }
@@ -362,7 +365,8 @@
  );
  if (result != ERROR_SUCCESS)
  {
    debug("The registry key for service '%s' does not exist, so we do not need to remove it.", serviceName);
    debug("The registry key for service '%s' does not exist, so we do not need to remove it.",
        serviceName);
    // Assume that the registry key does not exist.
    returnValue = TRUE;
  }
@@ -429,14 +433,15 @@
  char* relativePath = "\\locks\\server.lock";
  char lockFile[MAX_PATH];
  debug("Determining if the server is running.");
  if (strlen(relativePath)+strlen(_instanceDir)+1 < MAX_PATH)
  {
    int fd;
    sprintf(lockFile, "%s%s", _instanceDir, relativePath);
    debug("When determining whether the server is running, the lock file name is '%s'.", lockFile);
    debug("When determining whether the server is running, the lock file name is '%s'.",
        lockFile);
    fd = _open(lockFile, _O_RDWR);
    if (fd != -1)
@@ -469,7 +474,8 @@
    }
    else
    {
      debug("Could not open lock file '%s', which means the server is not running.", lockFile);
      debug("Could not open lock file '%s', which means the server is not running.",
          lockFile);
      *running = FALSE;
      returnValue = SERVICE_RETURN_ERROR;
    }
@@ -499,7 +505,7 @@
  debug("doStartApplication called.");
  if (strlen(relativePath)+strlen(_instanceDir)+1 < COMMAND_SIZE)
  {
    sprintf(command, "\"%s%s\" --windowsNetStart", _instanceDir, relativePath);
@@ -511,8 +517,10 @@
      // Try to see if server is really running
      int nTries = 10;
      BOOL running = FALSE;
      debug("doStartApplication: the spawn of the process worked.  Command: '%s'", command);
      debug(
          "doStartApplication: the spawn of the process worked.  Command: '%s'",
          command);
      // Wait to be able to launch the java process in order it to free the lock
      // on the file.
      debug("Sleeping for 3 seconds to allow the process to free the lock.");
@@ -526,7 +534,8 @@
        }
        if (!running)
        {
          debug("Sleeping for 2 seconds to allow the process to free the lock.  %d tries remaining.", nTries);
          debug("Sleeping for 2 seconds to allow the process to free the lock.  %d tries remaining.",
              nTries);
          Sleep(2000);
        }
      }
@@ -543,7 +552,7 @@
    }
    else
    {
      returnValue = SERVICE_RETURN_ERROR;
      debug("doStartApplication: spawn failed.  Sent command: '%s'", command);
    }
@@ -577,9 +586,9 @@
      // Try to see if server is really stopped
      int nTries = 10;
      BOOL running = TRUE;
      debug("doStopApplication: the spawn of the process worked.");
      // Wait to be able to launch the java process in order it to free the lock
      // on the file.
      Sleep(3000);
@@ -625,7 +634,7 @@
// serviceBinPath  the path to the service binary.
// instanceDir the instanceDirectory.
// The string stored in serviceBinPath looks like
// <SERVER_ROOT>/lib/service.exe start <_instanceDir>
// <SERVER_ROOT>/lib/opends_service.exe start <_instanceDir>
// It is up to the caller of the function to allocate
// at least COMMAND_SIZE bytes in serviceBinPath.
// The function returns SERVICE_RETURN_OK if we could create the binary
@@ -652,7 +661,9 @@
  }
  else
  {
    debug("When determining the service bin path, the module file name is '%s'.", fileName);
    debug(
        "When determining the service bin path, the module file name is '%s'.",
        fileName);
    if (result == MAX_PATH)
    {
@@ -662,15 +673,16 @@
    }
    else
    {
      if ((strlen(fileName) + strlen(" start ") + strlen(_instanceDir) + 2 * strlen("\"\""))
        < COMMAND_SIZE)
      if ((strlen(fileName) + strlen(" start ") + strlen(_instanceDir) +
          2 * strlen("\"\"")) < COMMAND_SIZE)
      {
        sprintf(serviceBinPath, "\"%s\" start \"%s\"", fileName,
        _instanceDir);
      }
      else
      {
        char * msg = "The name of the resulting windows service command is too long.\n";
        char * msg =
          "The name of the resulting windows service command is too long.\n";
        debug(msg);
        // buffer was too small, executable name is probably not valid
        returnValue = SERVICE_RETURN_ERROR;
@@ -704,7 +716,8 @@
  strcpy(serviceName, "");
  debug("Attempting to get the service name assuming command to run is '%s'.", cmdToRun);
  debug("Attempting to get the service name assuming command to run is '%s'.",
      cmdToRun);
  returnValue = getServiceList(&serviceList, &nbServices);
@@ -733,7 +746,8 @@
            }
            else
            {
              debug("The service name found is too long: '%s'", curService.serviceName);
              debug("The service name found is too long: '%s'",
                  curService.serviceName);
            }
            break;
          }
@@ -748,7 +762,7 @@
  }
  debug("The service name was found to be '%s'.", serviceName);
  return returnValue;
}  // getServiceName
@@ -801,7 +815,7 @@
  debug("Updating the service status.  statusToSet=%d win32ExitCode=%d serviceExitCode=%d checkPoint=%d waitHint=%d",
        statusToSet, win32ExitCode, serviceExitCode,
        checkPoint, waitHint);
  if (statusToSet == SERVICE_START_PENDING)
  {
    debug("Service start pending.");
@@ -835,7 +849,8 @@
  if (!success)
  {
    debugError("Failed to set the service status.  Last error = %d.", GetLastError());
    debugError("Failed to set the service status.  Last error = %d.",
        GetLastError());
    returnValue = SERVICE_RETURN_ERROR;
  }
  else
@@ -872,7 +887,7 @@
  // __debugbreak();
  debug("serviceMain called.");
  code = createServiceBinPath(cmdToRun);
  if (code == SERVICE_RETURN_OK)
@@ -1170,8 +1185,8 @@
//
// scm is the SCM handler (must not be NULL)
// serviceName  the name of the service.
// It is up to the caller of the function to allocate at least COMMAND_SIZE bytes
// in binPathName.
// It is up to the caller of the function to allocate at least COMMAND_SIZE
// bytes in binPathName.
// The function returns SERVICE_RETURN_OK if we could create the binary
// path name and SERVICE_RETURN_ERROR otherwise.
// ---------------------------------------------------------------
@@ -1232,7 +1247,8 @@
        }
        else
        {
          debug("getBinaryPath: error calling QueryServiceConfig. Code [%d]", errCode);
          debug("getBinaryPath: error calling QueryServiceConfig. Code [%d]",
              errCode);
          break;
        }
      }
@@ -1245,7 +1261,8 @@
        }
        else
        {
          debug("getBinaryPath: the length of the binary path name is too big. serviceName='%s', binaryPath='%s'", serviceName, serviceConfig->lpBinaryPathName);
          debug("getBinaryPath: the length of the binary path name is too big. serviceName='%s', binaryPath='%s'",
              serviceName, serviceConfig->lpBinaryPathName);
        }
      }
    }
@@ -1330,7 +1347,8 @@
          if (lastError != ERROR_MORE_DATA)
          {
            returnValue = SERVICE_RETURN_ERROR;
            debug("getServiceList: second try generic error. Code [%d]", lastError);
            debug("getServiceList: second try generic error. Code [%d]",
                lastError);
          }
          else
          {
@@ -1384,7 +1402,8 @@
        }
        else
        {
          debug("Error getting binary path name of service: %s", l[i].serviceName);
          debug("Error getting binary path name of service: %s",
              l[i].serviceName);
        }
        curService++;
      }
@@ -1425,7 +1444,7 @@
  int i;
  debug("Determining if service name '%s' is in use.", serviceName);
  // go through the list of services and search for the service name
  if (getServiceList(&serviceList, &nbServices) == SERVICE_RETURN_OK)
  {
@@ -1456,7 +1475,8 @@
  }
  else
  {
    debugError("Could not determine if the service name '%s' is in use because listing the services failed.", serviceName);
    debugError("Could not determine if the service name '%s' is in use because listing the services failed.",
        serviceName);
    returnValue = SERVICE_RETURN_ERROR;
  }
  return returnValue;
@@ -1513,7 +1533,7 @@
  }
  debug("createServiceName returning serviceName='%s' and returnValue=%d",
        serviceName, returnValue);
        serviceName, returnValue);
  return returnValue;
} // createServiceName
@@ -1547,7 +1567,7 @@
  // create the service
  if (returnValue == SERVICE_RETURN_OK)
  {
    if (openScm(GENERIC_WRITE, &scm) != SERVICE_RETURN_OK)
    if (openScm(SC_MANAGER_ALL_ACCESS, &scm) != SERVICE_RETURN_OK)
    {
      returnValue = SERVICE_RETURN_ERROR;
      debug("createServiceInScm: openScm did not work.");
@@ -1583,7 +1603,8 @@
  if ((returnValue == SERVICE_RETURN_OK) && (myService == NULL))
  {
    DWORD errCode = GetLastError();
    debugError("Failed to create the service '%s'.  Last error = %d.", serviceName, errCode);
    debugError("Failed to create the service '%s'.  Last error = %d.",
        serviceName, errCode);
    if (errCode == ERROR_DUPLICATE_SERVICE_NAME)
    {
      returnValue = DUPLICATED_SERVICE_NAME;
@@ -1594,6 +1615,10 @@
    }
    else
    {
      if (errCode == ERROR_INVALID_HANDLE)
      {
        debugError("The handle seems to be invalid.");
      }
      returnValue = SERVICE_RETURN_ERROR;
    }
  }
@@ -1612,7 +1637,9 @@
    if (!success)
    {
      debugError("Failed to add a description to the service '%s'.  Last error = %d.", serviceName, GetLastError());
      debugError(
          "Failed to add a description to the service '%s'.  Last error = %d.",
          serviceName, GetLastError());
      returnValue = SERVICE_RETURN_ERROR;
    }
  }
@@ -1635,7 +1662,7 @@
  }
  debug("createServiceInScm returning %d.", returnValue);
  return returnValue;
} // createServiceInScm
@@ -1656,7 +1683,7 @@
  SERVICE_STATUS serviceStatus;
  debug("Removing service '%s' from the Service Control Manager.", serviceName);
  returnValue = openScm(GENERIC_WRITE, &scm);
  // open the service
@@ -1671,7 +1698,8 @@
    debug("After opening service myService=%d.", myService);
    if (myService == NULL)
    {
      debugError("Failed to open the service '%s'. Last error = %d", serviceName, GetLastError());
      debugError("Failed to open the service '%s'. Last error = %d",
          serviceName, GetLastError());
      returnValue = SERVICE_RETURN_ERROR;
    }
  }
@@ -1686,7 +1714,8 @@
    );
    if (!success)
    {
      debugError("Failed to query the status for service '%s'. Last error = %d", serviceName, GetLastError());
      debugError("Failed to query the status for service '%s'. Last error = %d",
          serviceName, GetLastError());
      returnValue = SERVICE_RETURN_ERROR;
    }
  }
@@ -1707,7 +1736,8 @@
      if (!success)
      {
        DWORD errCode = GetLastError();
        debugError("Failed to stop the service '%s'.  Last error = %d.", serviceName, errCode);
        debugError("Failed to stop the service '%s'.  Last error = %d.",
            serviceName, errCode);
        if (errCode == ERROR_SERVICE_MARKED_FOR_DELETE)
        {
          returnValue = SERVICE_MARKED_FOR_DELETION;
@@ -1733,7 +1763,8 @@
    if (!success)
    {
      DWORD errCode = GetLastError();
      debugError("Failed to delete the service '%s'.  Last error = %d.", serviceName, errCode);
      debugError("Failed to delete the service '%s'.  Last error = %d.",
          serviceName, errCode);
      if (errCode == ERROR_SERVICE_MARKED_FOR_DELETE)
      {
        returnValue = SERVICE_MARKED_FOR_DELETION;
@@ -1778,7 +1809,8 @@
  char cmdToRun[COMMAND_SIZE];
  ServiceReturnCode code;
  debug("Creating service displayName='%s' description='%s'.", displayName, description);
  debug("Creating service displayName='%s' description='%s'.", displayName,
      description);
  code = createServiceBinPath(cmdToRun);
  if (code == SERVICE_RETURN_OK)
@@ -1858,12 +1890,13 @@
  strcpy(serviceName, "");
  debug("Getting service state.");
  code = createServiceBinPath(cmdToRun);
  debug("Created the service bin path. code=%d.  cmdToRun='%s'.", code, cmdToRun);
  debug("Created the service bin path. code=%d.  cmdToRun='%s'.", code,
      cmdToRun);
  if (code == SERVICE_RETURN_OK)
  {
    code = getServiceName(cmdToRun, serviceName);
    if (code == SERVICE_RETURN_OK)
    {
      // There is a valid serviceName for the command to run, so
@@ -1875,7 +1908,7 @@
    else
    {
      returnCode = 1;
      debug("Service '%s' is disabled enabled.", serviceName);
      debug("Service '%s' is disabled.", serviceName);
    }
  }
  else
@@ -2072,7 +2105,7 @@
  char* subcommand;
  int returnCode = 0;
  int i;
  updateDebugFlag(argv, argc);
  debug("main called.");
@@ -2201,7 +2234,7 @@
  }
  debug("main returning %d.", returnCode);
  return returnCode;
} // main