From: Jean Flach Date: Fri, 14 Nov 2014 12:54:29 +0000 (+0100) Subject: Clean up check_services X-Git-Tag: v2.2.0~20 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=3d52acfe5d8f8c67688f4ec1fdde584489f9d0f3;p=icinga2 Clean up check_services fixes #7666 #7665 #7664 --- diff --git a/plugins/check_service.cpp b/plugins/check_service.cpp index 4824cd2f6..885e14442 100644 --- a/plugins/check_service.cpp +++ b/plugins/check_service.cpp @@ -22,7 +22,7 @@ #include "thresholds.h" -#include "boost\program_options.hpp" +#include "boost/program_options.hpp" #define VERSION 1.0 @@ -117,7 +117,7 @@ int parseArguments(int ac, wchar_t **av, po::variables_map& vm, printInfoStruct& L"%s' thresholds work differently, since a service is either running or not\n" L"all \"-w\" and \"-c\" do is say whether a not running service is a warning\n" L"or critical state respectively.\n" - , progName); + , progName, progName); cout << endl; return 0; } @@ -169,20 +169,16 @@ int ServiceStatus(const printInfoStruct& printInfo) if (service_api == NULL) goto die; - LPBYTE lpServices = NULL; DWORD cbBufSize = 0; - DWORD *pcbBytesNeeded = (LPDWORD)malloc(sizeof(DWORD)); - DWORD *lpServicesReturned = (LPDWORD)malloc(sizeof(DWORD)); - DWORD *lpResumeHandle = (LPDWORD)malloc(sizeof(DWORD)); - *lpResumeHandle = 0; + DWORD *pcbBytesNeeded = NULL, *lpServicesReturned = NULL, *lpResumeHandle = NULL; if (!EnumServicesStatusEx(service_api, SC_ENUM_PROCESS_INFO, SERVICE_WIN32, SERVICE_STATE_ALL, lpServices, cbBufSize, pcbBytesNeeded, lpServicesReturned, lpResumeHandle, NULL) && GetLastError() != ERROR_MORE_DATA) goto die; - lpServices = (LPBYTE)malloc(*pcbBytesNeeded); + lpServices = new BYTE[*pcbBytesNeeded]; cbBufSize = *pcbBytesNeeded; if (!EnumServicesStatusEx(service_api, SC_ENUM_PROCESS_INFO, SERVICE_WIN32, SERVICE_STATE_ALL, @@ -192,11 +188,15 @@ int ServiceStatus(const printInfoStruct& printInfo) LPENUM_SERVICE_STATUS_PROCESS pInfo = (LPENUM_SERVICE_STATUS_PROCESS)lpServices; for (DWORD i = 0; i< *lpServicesReturned; i++) { - if (!wcscmp(printInfo.service.c_str(), pInfo[i].lpServiceName)) + if (!wcscmp(printInfo.service.c_str(), pInfo[i].lpServiceName)) { + delete lpServices; return pInfo[i].ServiceStatusProcess.dwCurrentState; + } } die: + if (lpServices) + delete lpServices; wcout << L"Service " << printInfo.service << L" could not be found" << endl; return -1; }