Changeset 2018659 in nscp
- Timestamp:
- 01/31/10 11:45:02 (3 years ago)
- Branches:
- master, 0.4.0, 0.4.1, 0.4.2
- Children:
- 920626f
- Parents:
- c4d4219
- Files:
-
- 3 added
- 27 edited
-
CMakeLists.txt (modified) (3 diffs)
-
build.cmake (modified) (1 diff)
-
changelog (modified) (1 diff)
-
cmake/NSCPPBuffer.cmake (added)
-
include/NSCHelper.cpp (modified) (12 diffs)
-
include/NSCHelper.h (modified) (4 diffs)
-
include/nsc_module_wrapper.hpp (modified) (5 diffs)
-
include/strEx.h (modified) (3 diffs)
-
modules/CheckHelpers/CMakeLists.txt (modified) (3 diffs)
-
modules/CheckHelpers/CheckHelpers.cpp (modified) (3 diffs)
-
modules/CheckHelpers/CheckHelpers.def (modified) (1 diff)
-
modules/CheckHelpers/CheckHelpers.h (modified) (2 diffs)
-
modules/NRPEClient/CMakeLists.txt (modified) (3 diffs)
-
modules/NRPEClient/NRPEClient.cpp (modified) (2 diffs)
-
modules/NRPEClient/NRPEClient.def (modified) (1 diff)
-
modules/NRPEClient/NRPEClient.h (modified) (2 diffs)
-
modules/NRPEServer/CMakeLists.txt (modified) (3 diffs)
-
modules/NRPEServer/NRPEServer.def (added)
-
modules/Scheduler/CMakeLists.txt (modified) (3 diffs)
-
modules/Scheduler/Scheduler.cpp (modified) (1 diff)
-
modules/Scheduler/Scheduler.def (modified) (1 diff)
-
proto/plugin.proto (added)
-
service/CMakeLists.txt (modified) (4 diffs)
-
service/NSCPlugin.cpp (modified) (3 diffs)
-
service/NSCPlugin.h (modified) (3 diffs)
-
service/NSClient++.cpp (modified) (7 diffs)
-
service/NSClient++.h (modified) (2 diffs)
-
service/core_api.cpp (modified) (3 diffs)
-
service/core_api.h (modified) (2 diffs)
-
service/simple_client.hpp (modified) (1 diff)
Legend:
- Unmodified
- Added
- Removed
-
CMakeLists.txt
r9b3f53c r2018659 26 26 27 27 SET(NSCP_INCLUDE_PATH "${NSCP_SOURCE_DIR}/include" CACHE PATH "directory containing NSCP specific includes") 28 SET(PBUF_INCLUDE_PATH "${NSCP_SOURCE_DIR}/proto" CACHE PATH "directory containing NSCP specific protocol buffer files") 28 29 INCLUDE_DIRECTORIES(${NSCP_INCLUDE_PATH}) 30 INCLUDE_DIRECTORIES(${PBUF_INCLUDE_PATH}) 29 31 30 32 SET(BOOST_LIBRARYDIR ${BOOST_LIBRARYDIR} CACHE PATH "") … … 82 84 endif(Boost_FOUND) 83 85 86 INCLUDE(cmake/NSCPPBuffer.cmake) 87 88 if(PROTOBUF_FOUND) 89 message(STATUS, "Found proto in: ${PROTOBUF_LIBRARY}") 90 INCLUDE_DIRECTORIES(${PROTOBUF_INCLUDE_DIR}) 91 #LINK_DIRECTORIES(${BOOST_LIB_DIRS}) 92 else(PROTOBUF_FOUND) 93 message(FATAL_ERROR, "Protocol buffers NOT found (${PROTOBUF_LIBRARYDIR}, )") 94 endif(PROTOBUF_FOUND) 95 96 84 97 #INCLUDE(cmake/WtFindAsio.txt) 85 98 #INCLUDE(cmake/WtFindSsl.txt) 86 99 #INCLUDE(cmake/FindICU.cmake) 87 88 100 89 101 … … 135 147 ENDIF(NOT CMAKE_BUILD_TYPE) 136 148 149 150 SET(NSCP_DEF_PLUGIN_CPP 151 ${NSCP_INCLUDE_PATH}/NSCHelper.cpp 152 ${NSCP_INCLUDE_PATH}/arrayBuffer.cpp 153 ${NSCP_INCLUDE_PATH}/simpleini/ConvertUTF.c 154 ${NSCP_INCLUDE_PATH}/b64/b64.c 155 ${PBUF_INCLUDE_PATH}/plugin.pb.cc 156 ${NSCP_INCLUDE_PATH}/utils.cpp 157 ) 158 159 SET(NSCP_DEF_PLUGIN_HPP 160 ${PBUF_INCLUDE_PATH}/plugin.pb.h 161 ${NSCP_INCLUDE_PATH}/NSCHelper.h 162 ${NSCP_INCLUDE_PATH}/strEx.h 163 ${NSCP_INCLUDE_PATH}/config.h 164 ${NSCP_INCLUDE_PATH}/utils.h 165 ${NSCP_INCLUDE_PATH}/NSCAPI.h 166 ${NSCP_INCLUDE_PATH}/NSCHelper.h 167 ${NSCP_INCLUDE_PATH}/nsc_module_wrapper.hpp 168 ) 169 170 SET(NSCP_DEF_PLUGIN_LIB 171 ${Boost_LIBRARIES} 172 ${CMAKE_THREAD_LIBS_INIT} 173 ${EXTRA_LIBS} 174 ${PROTOBUF_LIBRARY} 175 ) 176 177 137 178 # Compile time constants & make sure our build finds it 138 179 CONFIGURE_FILE( -
build.cmake
r79e734f r2018659 12 12 SET(OPENSSL_INCLUDE_DIR c:/src/include/) 13 13 SET(CMAKE_LIBRARY_PATH c:/src/lib/x86/) 14 15 SET(PROTOBUF_INCLUDE_DIR d:/source/protobuf-2.3.0/src) 16 SET(PROTOBUF_LIBRARYDIR d:/source/protobuf-2.3.0/vsprojects/Debug) 17 SET(PROTOBUF_BINARYDIR d:/source/protobuf-2.3.0/vsprojects/Debug) 18 -
changelog
r5da0459 r2018659 6 6 * Fixa dependonservice LanManWorkStation (old win) 7 7 * Fix RtlStringFromGUID problem on NT4 8 8 9 2010-01-31 MickeM 10 + Added google protocol buffers 11 ! Changed internal handle command logic (now uses protocol buffers) 12 - Removed (temporarily) performance data (due to protocol buffer changes) 13 14 2010-01-19 MickeM 15 + Rename NRPEListener to NRPEServer 16 + Added NRPEServer to CMake build 17 18 2010-01-xx MickeM 19 + Added Scheduling module 20 9 21 2009-10-11 MickeM 10 22 + Added argument support to NRPE Client -
include/NSCHelper.cpp
r50a5db2 r2018659 28 28 #include <strEx.h> 29 29 30 #include <boost/foreach.hpp> 31 #include <boost/tokenizer.hpp> 32 30 33 #ifdef DEBUG 31 34 /** … … 205 208 lpNSAPIExit fNSAPIExit = NULL; 206 209 lpNSAPIInject fNSAPIInject = NULL; 210 lpNSAPIDestroyBuffer fNSAPIDestroyBuffer = NULL; 207 211 lpNSAPINotify fNSAPINotify = NULL; 208 212 lpNSAPICheckLogMessages fNSAPICheckLogMessages = NULL; … … 274 278 * @return The returned status of the command 275 279 */ 276 NSCAPI::nagiosReturn NSCModuleHelper::InjectCommandRAW(const wchar_t* command, const unsigned int argLen, wchar_t **argument, wchar_t *returnMessageBuffer, unsigned int returnMessageBufferLen, wchar_t *returnPerfBuffer, unsigned int returnPerfBufferLen)280 NSCAPI::nagiosReturn NSCModuleHelper::InjectCommandRAW(const wchar_t* command, const char *request, const unsigned int request_len, char **response, unsigned int *response_len) 277 281 { 278 282 if (!fNSAPIInject) 279 283 throw NSCMHExcpetion(_T("NSCore has not been initiated...")); 280 return fNSAPIInject(command, argLen, argument, returnMessageBuffer, returnMessageBufferLen, returnPerfBuffer, returnPerfBufferLen); 284 return fNSAPIInject(command, request, request_len, response, response_len); 285 } 286 287 void NSCModuleHelper::DestroyBuffer(char**buffer) { 288 if (!fNSAPIDestroyBuffer) 289 throw NSCMHExcpetion(_T("NSCore has not been initiated...")); 290 return fNSAPIDestroyBuffer(buffer); 281 291 } 282 292 … … 296 306 * @return The return of the command 297 307 */ 298 NSCAPI::nagiosReturn NSCModuleHelper::InjectCommand(const wchar_t* command, const unsigned int argLen, wchar_t **argument, std::wstring & message, std::wstring & perf) 308 /* 309 NSCAPI::nagiosReturn NSCModuleHelper::InjectSimpleCommand(const wchar_t* command, const unsigned int argLen, wchar_t **argument, std::wstring & message, std::wstring & perf) 299 310 { 300 311 if (!fNSAPIInject) … … 329 340 return retC; 330 341 } 331 342 */ 332 343 /** 333 344 * Inject a request command in the core (this will then be sent to the plug-in stack for processing) … … 339 350 * @return The return of the command 340 351 */ 341 NSCAPI::nagiosReturn NSCModuleHelper::Inject Command(const wchar_t* command, std::list<std::wstring> argument, std::wstring & message, std::wstring & perf)352 NSCAPI::nagiosReturn NSCModuleHelper::InjectSimpleCommand(const std::wstring command, const std::list<std::wstring> argument, std::wstring & msg, std::wstring & perf) 342 353 { 343 354 if (!fNSAPIInject) 344 355 throw NSCMHExcpetion(_T("NSCore has not been initiated...")); 345 unsigned int buf_len = getBufferLength(); 346 347 348 unsigned int argLen; 349 wchar_t ** aBuffer = arrayBuffer::list2arrayBuffer(argument, argLen); 350 wchar_t *msgBuffer = new wchar_t[buf_len+1]; 351 wchar_t *perfBuffer = new wchar_t[buf_len+1]; 352 msgBuffer[0] = 0; 353 perfBuffer[0] = 0; 354 NSCAPI::nagiosReturn retC = InjectCommandRAW(command, argLen, aBuffer, msgBuffer, buf_len, perfBuffer, buf_len); 355 arrayBuffer::destroyArrayBuffer(aBuffer, argLen); 356 357 358 PluginCommand::RequestMessage message; 359 PluginCommand::Header *hdr = message.mutable_header(); 360 hdr->set_type(PluginCommand::Header_Type_REQUEST); 361 hdr->set_version(PluginCommand::Header_Version_VERSION_1); 362 363 PluginCommand::Request *req = message.add_payload(); 364 req->set_command(to_string(command)); 365 req->set_version(PluginCommand::Request_Version_VERSION_1); 366 367 BOOST_FOREACH(std::wstring s, argument) 368 req->add_arguments(to_string(s)); 369 370 std::string request; 371 message.SerializeToString(&request); 372 373 char *buffer = NULL; 374 unsigned int buffer_size = 0; 375 376 NSCAPI::nagiosReturn retC = InjectCommandRAW(command.c_str(), request.c_str(), request.size(), &buffer, &buffer_size); 377 378 if (buffer_size > 0 && buffer != NULL) { 379 PluginCommand::ResponseMessage rsp_msg; 380 std::string response(buffer, buffer_size); 381 rsp_msg.ParseFromString(response); 382 if (rsp_msg.payload_size() != 1) { 383 NSC_LOG_ERROR_STD(_T("Failed to extract return message not 1 payload: ") + strEx::itos(rsp_msg.payload_size())); 384 return NSCAPI::returnUNKNOWN; 385 } 386 msg = to_wstring(rsp_msg.payload(0).message()); 387 } 388 389 DestroyBuffer(&buffer); 356 390 switch (retC) { 357 391 case NSCAPI::returnIgnored: 358 392 NSC_LOG_MESSAGE_STD(_T("No handler for command '") + command + _T("'.")); 359 break;360 case NSCAPI::returnInvalidBufferLen:361 NSC_LOG_ERROR(_T("Inject buffer to small, increase the value of: string_length."));362 393 break; 363 394 case NSCAPI::returnOK: … … 365 396 case NSCAPI::returnWARN: 366 397 case NSCAPI::returnUNKNOWN: 367 message = msgBuffer;368 perf = perfBuffer;369 398 break; 370 399 default: 371 delete [] msgBuffer;372 delete [] perfBuffer;373 400 throw NSCMHExcpetion(_T("Unknown return code when injecting: ") + std::wstring(command)); 374 401 } 375 delete [] msgBuffer;376 delete [] perfBuffer;377 402 return retC; 378 403 } … … 392 417 if (!fNSAPIInject) 393 418 throw NSCMHExcpetion(_T("NSCore has not been initiated...")); 394 unsigned int argLen = 0; 395 wchar_t ** aBuffer; 396 if (buffer) 397 aBuffer= arrayBuffer::split2arrayBuffer(buffer, splitChar, argLen); 398 else 399 aBuffer= arrayBuffer::createEmptyArrayBuffer(argLen); 400 NSCAPI::nagiosReturn ret = InjectCommand(command, argLen, aBuffer, message, perf); 401 arrayBuffer::destroyArrayBuffer(aBuffer, argLen); 402 return ret; 419 420 std::wstring args = std::wstring(buffer); 421 boost::tokenizer<boost::escaped_list_separator<wchar_t>, std::wstring::const_iterator, std::wstring > tok(args, boost::escaped_list_separator<wchar_t>(L'\\', splitChar, L'\"')); 422 std::list<std::wstring> arglist; 423 BOOST_FOREACH(wstring s, tok) 424 arglist.push_back(s); 425 return InjectSimpleCommand(command, arglist, message, perf); 403 426 } 404 427 /** … … 416 439 if (!fNSAPIInject) 417 440 throw NSCMHExcpetion(_T("NSCore has not been initiated...")); 418 unsigned int argLen = 0; 419 wchar_t ** aBuffer; 420 if (buffer.empty()) 421 aBuffer= arrayBuffer::createEmptyArrayBuffer(argLen); 422 else 423 aBuffer= arrayBuffer::split2arrayBuffer(buffer, spliwchar_t, argLen, escape); 424 NSCAPI::nagiosReturn ret = InjectCommand(command.c_str(), argLen, aBuffer, message, perf); 425 arrayBuffer::destroyArrayBuffer(aBuffer, argLen); 426 return ret; 441 boost::tokenizer<boost::escaped_list_separator<wchar_t>, std::wstring::const_iterator, std::wstring > tok(buffer, boost::escaped_list_separator<wchar_t>(L'\\', spliwchar_t, L'\"')); 442 std::list<std::wstring> arglist; 443 BOOST_FOREACH(wstring s, tok) 444 arglist.push_back(s); 445 return InjectSimpleCommand(command.c_str(), arglist, message, perf); 427 446 } 428 447 } … … 796 815 //NSCModuleHelper::fNSAPIExit = (NSCModuleHelper::lpNSAPIExit)f(_T("NSAPIExit")); 797 816 NSCModuleHelper::fNSAPIInject = (NSCModuleHelper::lpNSAPIInject)f(_T("NSAPIInject")); 817 NSCModuleHelper::fNSAPIDestroyBuffer = (NSCModuleHelper::lpNSAPIDestroyBuffer)f(_T("NSAPIDestroyBuffer")); 798 818 NSCModuleHelper::fNSAPINotify = (NSCModuleHelper::lpNSAPINotify)f(_T("NSAPINotify")); 799 819 NSCModuleHelper::fNSAPIGetBasePath = (NSCModuleHelper::lpNSAPIGetBasePath)f(_T("NSAPIGetBasePath")); … … 882 902 * @return the return code 883 903 */ 884 NSCAPI::nagiosReturn NSCModuleWrapper::wrapHandleCommand(NSCAPI::nagiosReturn retResult, const std::wstring retMessage, const std::wstring retPerformance, wchar_t *returnBufferMessage, unsigned int returnBufferMessageLen, wchar_t *returnBufferPerf, unsigned int returnBufferPerfLen) { 885 if (retMessage.empty()) 886 return NSCAPI::returnIgnored; 887 NSCAPI::nagiosReturn ret = NSCHelper::wrapReturnString(returnBufferMessage, returnBufferMessageLen, retMessage, retResult); 888 if (!NSCHelper::isMyNagiosReturn(ret)) { 904 NSCAPI::nagiosReturn NSCModuleWrapper::wrapHandleCommand(NSCAPI::nagiosReturn retResult, const std::string &reply, char **reply_buffer, unsigned int *size) { 905 // TODO: Make this global to allow remote deletion!!! 906 unsigned int buf_len = reply.size(); 907 *reply_buffer = new char[buf_len + 10]; 908 memcpy(*reply_buffer, reply.c_str(), buf_len+1); 909 (*reply_buffer)[buf_len] = 0; 910 (*reply_buffer)[buf_len+1] = 0; 911 *size = buf_len; 912 if (!NSCHelper::isMyNagiosReturn(retResult)) { 889 913 NSC_LOG_ERROR(_T("A module returned an invalid return code")); 890 914 } 891 return NSCHelper::wrapReturnString(returnBufferPerf, returnBufferPerfLen, retPerformance, ret);915 return retResult; 892 916 } 893 917 … … 912 936 return NSCAPI::hasFailed; 913 937 } 914 915 916 938 void NSCModuleWrapper::wrapDeleteBuffer(char**buffer) { 939 delete [] *buffer; 940 } 941 942 -
include/NSCHelper.h
r1bfe6f0 r2018659 29 29 #include <arrayBuffer.h> 30 30 #include <types.hpp> 31 32 #include <unicode_char.hpp> 33 #include <strEx.h> 34 35 #include "../proto/plugin.pb.h" 36 31 37 #ifdef WIN32 32 38 //#include <windows.h> … … 129 135 typedef NSCAPI::errorReturn (*lpNSAPIStopServer)(void); 130 136 typedef NSCAPI::errorReturn (*lpNSAPIExit)(void); 131 typedef NSCAPI::nagiosReturn (*lpNSAPIInject)(const wchar_t*, const unsigned int, wchar_t **, wchar_t *, unsigned int, wchar_t *, unsigned int); 137 typedef NSCAPI::nagiosReturn (*lpNSAPIInject)(const wchar_t* command, const char *request, const unsigned int request_len, char **response, unsigned int *response_len); 138 typedef void (*lpNSAPIDestroyBuffer)(char**); 132 139 133 140 typedef NSCAPI::errorReturn (*lpNSAPINotify)(const wchar_t*, const wchar_t*, NSCAPI::nagiosReturn, const wchar_t*, const wchar_t*); … … 163 170 164 171 void Message(int msgType, std::wstring file, int line, std::wstring message); 165 NSCAPI::nagiosReturn InjectCommandRAW(const wchar_t* command, const unsigned int argLen, wchar_t **argument, wchar_t *returnMessageBuffer, unsigned int returnMessageBufferLen, wchar_t *returnPerfBuffer, unsigned int returnPerfBufferLen);166 NSCAPI::nagiosReturn InjectCommand(const wchar_t* command, const unsigned int argLen, wchar_t **argument, std::wstring & message, std::wstring & perf);167 NSCAPI::nagiosReturn Inject Command(const wchar_t* command,std::list<std::wstring> argument, std::wstring & message, std::wstring & perf);172 NSCAPI::nagiosReturn InjectCommandRAW(const wchar_t* command, const char *request, const unsigned int request_len, char **response, unsigned int *response_len); 173 void DestroyBuffer(char**buffer); 174 NSCAPI::nagiosReturn InjectSimpleCommand(const std::wstring command, const std::list<std::wstring> argument, std::wstring & message, std::wstring & perf); 168 175 NSCAPI::errorReturn NotifyChannel(std::wstring channel, std::wstring command, NSCAPI::nagiosReturn code, std::wstring message, std::wstring perf); 169 176 NSCAPI::nagiosReturn InjectSplitAndCommand(const wchar_t* command, wchar_t* buffer, wchar_t splitChar, std::wstring & message, std::wstring & perf); … … 187 194 void registerCommand(std::wstring command, std::wstring description); 188 195 unsigned int getBufferLength(); 196 197 198 class SimpleCommand { 199 200 public: 201 NSCAPI::nagiosReturn handleRAWCommand(const wchar_t* char_command, const std::string &request, std::string &response) { 202 203 std::wstring command = char_command; 204 PluginCommand::RequestMessage request_message; 205 request_message.ParseFromString(request); 206 207 if (request_message.payload_size() != 1) { 208 //NSC_LOG_ERROR_STD(_T("Unsupported payload size: ") + to_wstring(request_message.payload_size())); 209 return NSCAPI::returnIgnored; 210 } 211 ::PluginCommand::Request payload = request_message.payload().Get(0); 212 std::list<std::wstring> args; 213 for (int i=0;i<payload.arguments_size();i++) { 214 args.push_back(to_wstring(payload.arguments(i))); 215 } 216 std::wstring msg, perf; 217 NSCAPI::nagiosReturn ret = handleCommand(command, args, msg, perf); 218 219 PluginCommand::ResponseMessage response_message; 220 ::PluginCommand::Header* hdr = response_message.mutable_header(); 221 222 hdr->set_type(PluginCommand::Header_Type_RESPONSE); 223 hdr->set_version(PluginCommand::Header_Version_VERSION_1); 224 225 PluginCommand::Response *resp = response_message.add_payload(); 226 resp->set_command(to_string(command)); 227 resp->set_message(to_string(msg)); 228 resp->set_version(PluginCommand::Response_Version_VERSION_1); 229 if (ret == NSCAPI::returnOK) 230 resp->set_result(PluginCommand::Response_Code_OK); 231 else if (ret == NSCAPI::returnWARN) 232 resp->set_result(PluginCommand::Response_Code_WARNING); 233 else if (ret == NSCAPI::returnCRIT) 234 resp->set_result(PluginCommand::Response_Code_CRITCAL); 235 else 236 resp->set_result(PluginCommand::Response_Code_UNKNOWN); 237 238 response_message.SerializeToString(&response); 239 return ret; 240 } 241 242 virtual NSCAPI::nagiosReturn handleCommand(const std::wstring command, std::list<std::wstring> arguments, std::wstring &msg, std::wstring &perf) = 0; 243 //(const strEx::blindstr command, const unsigned int argLen, TCHAR **char_args, std::wstring &msg, std::wstring &perf) = 0; 244 //(const std::wstring command, const std::list<std::wstring> arguments) = 0; 245 246 }; 189 247 }; 190 248 -
include/nsc_module_wrapper.hpp
r031acbf r2018659 24 24 NSCAPI::boolReturn wrapHasMessageHandler(bool has); 25 25 int wrapUnloadModule(bool success); 26 NSCAPI::nagiosReturn wrapHandleCommand(NSCAPI::nagiosReturn retResult, const std::wstring retMessage, const std::wstring retPerformance, wchar_t *returnBufferMessage, unsigned int returnBufferMessageLen, wchar_t *returnBufferPerf, unsigned int returnBufferPerfLen); 26 NSCAPI::nagiosReturn wrapHandleCommand(NSCAPI::nagiosReturn retResult, const std::string &reply, char **reply_buffer, unsigned int *size); 27 void wrapDeleteBuffer(char**buffer); 27 28 } 28 29 … … 32 33 extern "C" int NSModuleHelperInit(unsigned int id, NSCModuleHelper::lpNSAPILoader f); \ 33 34 extern "C" int NSLoadModule(int mode); \ 35 extern "C" void NSDeleteBuffer(char**buffer); \ 34 36 extern "C" int NSGetModuleName(wchar_t* buf, int buflen); \ 35 37 extern "C" int NSGetModuleDescription(wchar_t* buf, int buflen); \ … … 38 40 extern "C" NSCAPI::boolReturn NSHasMessageHandler(); \ 39 41 extern "C" void NSHandleMessage(int msgType, wchar_t* file, int line, wchar_t* message); \ 40 extern "C" NSCAPI::nagiosReturn NSHandleCommand(const wchar_t* IN_cmd, const unsigned int IN_argsLen, wchar_t **IN_args, \ 41 wchar_t *OUT_retBufMessage, unsigned int IN_retBufMessageLen, wchar_t *OUT_retBufPerf, unsigned int IN_retBufPerfLen); \ 42 extern "C" NSCAPI::nagiosReturn NSHandleCommand(const wchar_t* command, const char* request_buffer, const unsigned int request_buffer_len, char** reply_buffer, unsigned int *reply_buffer_len); \ 42 43 extern "C" int NSUnloadModule(); \ 43 44 extern "C" int NSGetConfigurationMeta(int IN_retBufLen, wchar_t *OUT_retBuf) … … 139 140 return NSCAPI::hasFailed; \ 140 141 } \ 142 } \ 143 extern void NSDeleteBuffer(char**buffer) { \ 144 try { \ 145 NSCModuleWrapper::wrapDeleteBuffer(buffer); \ 146 } catch (...) { \ 147 NSC_LOG_CRITICAL(_T("Unknown exception in: wrapModuleHelperInit(...)")); \ 148 } \ 141 149 } 142 150 #define NSC_WRAPPERS_HANDLE_MSG_DEF(toObject) \ … … 160 168 extern NSCAPI::boolReturn NSHasMessageHandler() { return NSCAPI::isfalse; } 161 169 #define NSC_WRAPPERS_HANDLE_CMD_DEF(toObject) \ 162 extern NSCAPI::nagiosReturn NSHandleCommand(const wchar_t* IN_cmd, const unsigned int IN_argsLen, wchar_t **IN_args, \ 163 wchar_t *OUT_retBufMessage, unsigned int IN_retBufMessageLen, wchar_t *OUT_retBufPerf, unsigned int IN_retBufPerfLen) \ 170 extern NSCAPI::nagiosReturn NSHandleCommand(const wchar_t* command, const char* request_buffer, const unsigned int request_buffer_len, char** reply_buffer, unsigned int *reply_buffer_len) \ 164 171 { \ 165 172 try { \ 166 std:: wstring message, perf; \167 NSCAPI::nagiosReturn retCode = toObject.handleCommand(IN_cmd, IN_argsLen, IN_args, message, perf); \168 return NSCModuleWrapper::wrapHandleCommand(retCode, message, perf, OUT_retBufMessage, IN_retBufMessageLen, OUT_retBufPerf, IN_retBufPerfLen); \173 std::string request(request_buffer, request_buffer_len), reply; \ 174 NSCAPI::nagiosReturn retCode = (&toObject)->handleRAWCommand(command, request, reply); \ 175 return NSCModuleWrapper::wrapHandleCommand(retCode, reply, reply_buffer, reply_buffer_len); \ 169 176 } catch (...) { \ 170 177 NSC_LOG_CRITICAL(_T("Unknown exception in: wrapHandleCommand(...)")); \ -
include/strEx.h
r1bfe6f0 r2018659 20 20 ***************************************************************************/ 21 21 #pragma once 22 #include <unicode_char.hpp> 22 #include <types.hpp> 23 24 #include <string> 23 25 #include <sstream> 24 26 #include <iomanip> 25 #include <string>26 27 #include <utility> 27 28 #include <list> … … 31 32 #include <locale> 32 33 #include <iostream> 33 #include <string> 34 35 #include <unicode_char.hpp> 36 34 37 #include <boost/lexical_cast.hpp> 35 38 #include <boost/date_time.hpp> 36 #include <boost/lexical_cast.hpp>37 39 #include <boost/algorithm/string.hpp> 40 #include <boost/foreach.hpp> 38 41 //#include <boost/date_time/local_time/local_date_time.hpp> 39 42 //#include <boost/date_time/gregorian/conversion.hpp> … … 101 104 return ss.str(); 102 105 } 106 } 107 108 inline std::wstring strip_hex(std::wstring str) { 109 std::wstring ret; ret.reserve(str.size()); 110 BOOST_FOREACH(wchar_t c, str) 111 { 112 if (c==0||c==7||c==10||c==11||c==12||c==13||c==127) 113 ret.push_back(L'?'); 114 else 115 ret.push_back(c); 116 } 117 return ret; 103 118 } 104 119 -
modules/CheckHelpers/CMakeLists.txt
rd05c3f0 r2018659 6 6 stdafx.cpp 7 7 CheckHelpers.cpp 8 ${NSCP_INCLUDE_PATH}/NSCHelper.cpp 9 ${NSCP_INCLUDE_PATH}/arrayBuffer.cpp 8 ${NSCP_DEF_PLUGIN_CPP} 10 9 ) 11 10 … … 15 14 SET(CheckHelpers_SRCS ${CheckHelpers_SRCS} 16 15 stdafx.h 17 ${NSCP_INCLUDE_PATH}/strEx.h18 ${NSCP_INCLUDE_PATH}/config.h19 ${NSCP_INCLUDE_PATH}/utils.h20 ${NSCP_INCLUDE_PATH}/NSCAPI.h21 ${NSCP_INCLUDE_PATH}/NSCHelper.h22 ${NSCP_INCLUDE_PATH}/nsc_module_wrapper.hpp23 16 CheckHelpers.def 17 ${NSCP_DEF_PLUGIN_HPP} 18 24 19 ) 25 20 ENDIF(WIN32) … … 28 23 29 24 target_link_libraries(CheckHelpers 30 ${Boost_FILESYSTEM_LIBRARY} 31 ${Boost_LIBRARIES} 32 ${CMAKE_THREAD_LIBS_INIT} 33 ${EXTRA_LIBS} 25 ${Boost_FILESYSTEM_LIBRARY} 26 ${NSCP_DEF_PLUGIN_LIB} 34 27 ) 35 28 -
modules/CheckHelpers/CheckHelpers.cpp
r50a5db2 r2018659 68 68 return false; 69 69 } 70 NSCAPI::nagiosReturn CheckHelpers::checkSimpleStatus(NSCAPI::nagiosReturn status, const unsigned int argLen, TCHAR **char_args, std::wstring &msg, std::wstring &perf)70 NSCAPI::nagiosReturn CheckHelpers::checkSimpleStatus(NSCAPI::nagiosReturn status, const std::list<std::wstring> arguments, std::wstring &message, std::wstring &perf) 71 71 { 72 72 NSCAPI::nagiosReturn returnCode = NSCAPI::returnOK; 73 std::list<std::wstring> args = arrayBuffer::arrayBuffer2list(argLen, char_args); 74 if (args.empty()) { 75 msg = NSCHelper::translateReturn(status) + _T(": Lets pretend everything is going to be ok."); 73 if (arguments.empty()) { 74 message = NSCHelper::translateReturn(status) + _T(": Lets pretend everything is going to be ok."); 76 75 return status; 77 76 } 78 77 std::list<std::wstring>::const_iterator cit; 79 for (cit=arg s.begin();cit!=args.end();++cit)80 m sg+= *cit;78 for (cit=arguments.begin();cit!=arguments.end();++cit) 79 message += *cit; 81 80 return status; 82 81 } 83 82 84 NSCAPI::nagiosReturn CheckHelpers::handleCommand(const strEx::blindstr command, const unsigned int argLen, TCHAR **char_args, std::wstring &msg, std::wstring &perf) { 85 if (command == _T("CheckAlwaysOK")) { 86 if (argLen < 2) { 87 msg = _T("ERROR: Missing arguments."); 83 NSCAPI::nagiosReturn CheckHelpers::handleCommand(const std::wstring command, std::list<std::wstring> arguments, std::wstring &message, std::wstring &perf) { 84 if (command == _T("CheckVersion")) { 85 message = NSCModuleHelper::getApplicationVersionString(); 86 return NSCAPI::returnOK; 87 } else if (command == _T("CheckAlwaysOK")) { 88 if (arguments.size() < 1) { 89 message = _T("ERROR: Missing arguments."); 88 90 return NSCAPI::returnUNKNOWN; 89 91 } 90 NSCModuleHelper::InjectCommand(char_args[0], argLen-1, &char_args[1], msg, perf); 92 std::wstring new_command = arguments.front(); arguments.pop_front(); 93 NSCModuleHelper::InjectSimpleCommand(new_command, arguments, message, perf); 91 94 return NSCAPI::returnOK; 92 } else if (command == _T("CheckVersion")) {93 msg = NSCModuleHelper::getApplicationVersionString();94 return NSCAPI::returnOK;95 } else if (command == _T("CheckOK")) {96 return checkSimpleStatus(NSCAPI::returnOK, argLen, char_args, msg, perf);97 } else if (command == _T("check_ok")) {98 return checkSimpleStatus(NSCAPI::returnOK, argLen, char_args, msg, perf);99 } else if (command == _T("CheckWARNING")) {100 return checkSimpleStatus(NSCAPI::returnWARN, argLen, char_args, msg, perf);101 } else if (command == _T("CheckCRITICAL")) {102 return checkSimpleStatus(NSCAPI::returnCRIT, argLen, char_args, msg, perf);103 95 } else if (command == _T("CheckAlwaysCRITICAL")) { 104 if (arg Len < 2) {105 m sg= _T("ERROR: Missing arguments.");96 if (arguments.size() < 1) { 97 message = _T("ERROR: Missing arguments."); 106 98 return NSCAPI::returnUNKNOWN; 107 99 } 108 NSCModuleHelper::InjectCommand(char_args[0], argLen-1, &char_args[1], msg, perf); 100 std::wstring new_command = arguments.front(); arguments.pop_front(); 101 NSCModuleHelper::InjectSimpleCommand(new_command, arguments, message, perf); 109 102 return NSCAPI::returnCRIT; 110 103 } else if (command == _T("CheckAlwaysWARNING")) { 111 if (arg Len < 2) {112 m sg= _T("ERROR: Missing arguments.");104 if (arguments.size() < 1) { 105 message = _T("ERROR: Missing arguments."); 113 106 return NSCAPI::returnUNKNOWN; 114 107 } 115 NSCModuleHelper::InjectCommand(char_args[0], argLen-1, &char_args[1], msg, perf); 108 std::wstring new_command = arguments.front(); arguments.pop_front(); 109 NSCModuleHelper::InjectSimpleCommand(new_command, arguments, message, perf); 116 110 return NSCAPI::returnWARN; 111 } else if (command == _T("CheckOK")) { 112 return checkSimpleStatus(NSCAPI::returnOK, arguments, message, perf); 113 } else if (command == _T("check_ok")) { 114 return checkSimpleStatus(NSCAPI::returnOK, arguments, message, perf); 115 } else if (command == _T("CheckWARNING")) { 116 return checkSimpleStatus(NSCAPI::returnWARN, arguments, message, perf); 117 } else if (command == _T("CheckCRITICAL")) { 118 return checkSimpleStatus(NSCAPI::returnCRIT, arguments, message, perf); 117 119 } else if (command == _T("CheckMultiple")) { 118 return checkMultiple(arg Len, char_args, msg, perf);120 return checkMultiple(arguments, message, perf); 119 121 } 120 122 return NSCAPI::returnIgnored; 121 123 } 122 NSCAPI::nagiosReturn CheckHelpers::checkMultiple(const unsigned int argLen, TCHAR **char_args, std::wstring &msg, std::wstring &perf)124 NSCAPI::nagiosReturn CheckHelpers::checkMultiple(const std::list<std::wstring> arguments, std::wstring &message, std::wstring &perf) 123 125 { 124 126 NSCAPI::nagiosReturn returnCode = NSCAPI::returnOK; 125 std::list<std::wstring> args = arrayBuffer::arrayBuffer2list(argLen, char_args); 126 if (args.empty()) { 127 msg = _T("Missing argument(s)."); 127 if (arguments.empty()) { 128 message = _T("Missing argument(s)."); 128 129 return NSCAPI::returnCRIT; 129 130 } … … 132 133 sub_command currentCommand; 133 134 std::list<std::wstring>::const_iterator cit; 134 for (cit=arg s.begin();cit!=args.end();++cit) {135 for (cit=arguments.begin();cit!=arguments.end();++cit) { 135 136 std::wstring arg = *cit; 136 137 std::pair<std::wstring,std::wstring> p = strEx::split(arg,_T("=")); … … 148 149 std::list<sub_command>::iterator cit2; 149 150 for (cit2 = commands.begin(); cit2 != commands.end(); ++cit2) { 150 unsigned int length = 0; 151 TCHAR ** args = arrayBuffer::list2arrayBuffer((*cit2).second, length); 151 std::list<std::wstring> sub_args; 152 152 std::wstring tMsg, tPerf; 153 NSCAPI::nagiosReturn tRet = NSCModuleHelper::InjectCommand((*cit2).first.c_str(), length, args, tMsg, tPerf); 154 arrayBuffer::destroyArrayBuffer(args, length); 153 NSCAPI::nagiosReturn tRet = NSCModuleHelper::InjectSimpleCommand((*cit2).first.c_str(), (*cit2).second, tMsg, tPerf); 155 154 returnCode = NSCHelper::maxState(returnCode, tRet); 156 if (!m sg.empty())157 m sg+= _T(", ");158 m sg+= tMsg;155 if (!message.empty()) 156 message += _T(", "); 157 message += tMsg; 159 158 perf += tPerf; 160 159 } -
modules/CheckHelpers/CheckHelpers.def
re26cfe0 r2018659 12 12 NSUnloadModule 13 13 NSGetModuleDescription 14 NSDeleteBuffer -
modules/CheckHelpers/CheckHelpers.h
r739db5a r2018659 23 23 #include <strEx.h> 24 24 25 class CheckHelpers {25 class CheckHelpers : public NSCModuleHelper::SimpleCommand { 26 26 private: 27 27 … … 47 47 bool hasCommandHandler(); 48 48 bool hasMessageHandler(); 49 NSCAPI::nagiosReturn handleCommand(const st rEx::blindstr command, const unsigned int argLen, TCHAR **char_args, std::wstring &message, std::wstring &perf);49 NSCAPI::nagiosReturn handleCommand(const std::wstring command, std::list<std::wstring> arguments, std::wstring &message, std::wstring &perf); 50 50 51 51 // Check commands 52 NSCAPI::nagiosReturn checkMultiple(const unsigned int argLen, TCHAR **char_args, std::wstring &message, std::wstring &perf);53 NSCAPI::nagiosReturn checkSimpleStatus(NSCAPI::nagiosReturn status, const unsigned int argLen, TCHAR **char_args, std::wstring &msg, std::wstring &perf);52 NSCAPI::nagiosReturn checkMultiple(const std::list<std::wstring> arguments, std::wstring &message, std::wstring &perf); 53 NSCAPI::nagiosReturn checkSimpleStatus(NSCAPI::nagiosReturn status, const std::list<std::wstring> arguments, std::wstring &message, std::wstring &perf); 54 54 }; -
modules/NRPEClient/CMakeLists.txt
r9b3f53c r2018659 8 8 stdafx.cpp 9 9 "${TARGET}.cpp" 10 ${NSCP_INCLUDE_PATH}/NSCHelper.cpp11 ${NSCP_INCLUDE_PATH}/arrayBuffer.cpp12 ${NSCP_INCLUDE_PATH}/utils.cpp13 10 ${NSCP_INCLUDE_PATH}/nrpe/nrpepacket.cpp 11 12 ${NSCP_DEF_PLUGIN_CPP} 14 13 ) 15 14 … … 20 19 stdafx.h 21 20 "${TARGET}.h" 22 ${NSCP_INCLUDE_PATH}/strEx.h23 ${NSCP_INCLUDE_PATH}/config.h24 ${NSCP_INCLUDE_PATH}/utils.h25 ${NSCP_INCLUDE_PATH}/NSCAPI.h26 ${NSCP_INCLUDE_PATH}/NSCHelper.h27 ${NSCP_INCLUDE_PATH}/nsc_module_wrapper.hpp28 21 ${NSCP_INCLUDE_PATH}/nrpe/nrpepacket.hpp 29 22 ${NSCP_INCLUDE_PATH}/socket_helpers.hpp 30 23 "${TARGET}.def" 24 25 ${NSCP_DEF_PLUGIN_HPP} 31 26 ) 32 27 ENDIF(WIN32) … … 35 30 36 31 target_link_libraries(${TARGET} 37 ${Boost_FILESYSTEM_LIBRARY} 38 ${Boost_LIBRARIES} 39 ${CMAKE_THREAD_LIBS_INIT} 40 ${OPENSSL_LIBRARIES} 41 ${EXTRA_LIBS} 32 ${Boost_FILESYSTEM_LIBRARY} 33 ${PROTOBUF_LIBRARY} 34 ${OPENSSL_LIBRARIES} 42 35 ) 43 36 -
modules/NRPEClient/NRPEClient.cpp
r79e734f r2018659 129 129 return false; 130 130 } 131 NSCAPI::nagiosReturn NRPEClient::handleCommand(const st rEx::blindstr command, const unsigned int argLen, TCHAR **char_args, std::wstring &message, std::wstring &perf)132 { 133 command_list::const_iterator cit = commands.find( command);131 NSCAPI::nagiosReturn NRPEClient::handleCommand(const std::wstring command, std::list<std::wstring> arguments, std::wstring &message, std::wstring &perf) 132 { 133 command_list::const_iterator cit = commands.find(strEx::blindstr(command.c_str())); 134 134 if (cit == commands.end()) 135 135 return NSCAPI::returnIgnored; … … 137 137 std::wstring args = (*cit).second.arguments; 138 138 if (SETTINGS_GET_BOOL(nrpe::ALLOW_ARGS) == 1) { 139 arrayBuffer::arrayList arr = arrayBuffer::arrayBuffer2list(argLen, char_args);140 arrayBuffer::arrayList::const_iterator cit2 = arr.begin();141 139 int i=1; 142 143 for (;cit2!=arr.end();cit2++,i++){140 BOOST_FOREACH(wstring arg, arguments) 141 { 144 142 if (SETTINGS_GET_INT(nrpe::ALLOW_NASTY) == 0) { 145 if ( (*cit2).find_first_of(NASTY_METACHARS) != std::wstring::npos) {143 if (arg.find_first_of(NASTY_METACHARS) != std::wstring::npos) { 146 144 NSC_LOG_ERROR(_T("Request string contained illegal metachars!")); 147 145 return NSCAPI::returnIgnored; 148 146 } 149 147 } 150 strEx::replace(args, _T("$ARG") + strEx::itos(i ) + _T("$"), (*cit2));148 strEx::replace(args, _T("$ARG") + strEx::itos(i++) + _T("$"), arg); 151 149 } 152 150 } -
modules/NRPEClient/NRPEClient.def
r394f7a1 r2018659 14 14 NSGetModuleDescription 15 15 NSCommandLineExec 16 NSDeleteBuffer -
modules/NRPEClient/NRPEClient.h
r9b3f53c r2018659 25 25 26 26 27 class NRPEClient {27 class NRPEClient : public NSCModuleHelper::SimpleCommand { 28 28 private: 29 29 typedef enum { … … 117 117 bool hasCommandHandler(); 118 118 bool hasMessageHandler(); 119 NSCAPI::nagiosReturn handleCommand(const st rEx::blindstr command, const unsigned int argLen, TCHAR **char_args, std::wstring &message, std::wstring &perf);119 NSCAPI::nagiosReturn handleCommand(const std::wstring command, std::list<std::wstring> arguments, std::wstring &message, std::wstring &perf); 120 120 int commandLineExec(const unsigned int argLen,TCHAR** args); 121 121 std::wstring getConfigurationMeta(); -
modules/NRPEServer/CMakeLists.txt
rf029bc2 r2018659 11 11 nrpe_connection.cpp 12 12 nrpe_handler.cpp 13 ${NSCP_INCLUDE_PATH}/NSCHelper.cpp14 ${NSCP_INCLUDE_PATH}/arrayBuffer.cpp15 ${NSCP_INCLUDE_PATH}/utils.cpp16 13 ${NSCP_INCLUDE_PATH}/nrpe/nrpepacket.cpp 14 15 ${NSCP_DEF_PLUGIN_CPP} 17 16 ) 18 17 … … 27 26 nrpe_handler.hpp 28 27 nrpe_parser.hpp 29 ${NSCP_INCLUDE_PATH}/strEx.h30 ${NSCP_INCLUDE_PATH}/config.h31 ${NSCP_INCLUDE_PATH}/utils.h32 ${NSCP_INCLUDE_PATH}/NSCAPI.h33 ${NSCP_INCLUDE_PATH}/NSCHelper.h34 ${NSCP_INCLUDE_PATH}/nsc_module_wrapper.hpp35 28 ${NSCP_INCLUDE_PATH}/nrpe/nrpepacket.hpp 36 29 ${NSCP_INCLUDE_PATH}/socket_helpers.hpp 37 30 "${TARGET}.def" 31 32 ${NSCP_DEF_PLUGIN_HPP} 38 33 ) 39 34 ENDIF(WIN32) … … 42 37 43 38 target_link_libraries(${TARGET} 44 ${Boost_FILESYSTEM_LIBRARY} 45 ${Boost_LIBRARIES} 46 ${CMAKE_THREAD_LIBS_INIT} 47 ${OPENSSL_LIBRARIES} 48 ${EXTRA_LIBS} 39 ${Boost_FILESYSTEM_LIBRARY} 40 ${PROTOBUF_LIBRARY} ${Boost_LIBRARIES} 41 ${OPENSSL_LIBRARIES} 49 42 ) 50 43 -
modules/Scheduler/CMakeLists.txt
r031acbf r2018659 7 7 Scheduler.cpp 8 8 simple_scheduler.cpp 9 ${NSCP_INCLUDE_PATH}/NSCHelper.cpp 10 ${NSCP_INCLUDE_PATH}/arrayBuffer.cpp 9 ${NSCP_DEF_PLUGIN_CPP} 11 10 ) 12 11 … … 17 16 stdafx.h 18 17 simple_scheduler.hpp 19 ${NSCP_INCLUDE_PATH}/strEx.h 20 ${NSCP_INCLUDE_PATH}/config.h 21 ${NSCP_INCLUDE_PATH}/utils.h 22 ${NSCP_INCLUDE_PATH}/NSCAPI.h 23 ${NSCP_INCLUDE_PATH}/NSCHelper.h 24 ${NSCP_INCLUDE_PATH}/nsc_module_wrapper.hpp 25 Scheduler.def 18 ${NSCP_DEF_PLUGIN_HPP} 26 19 ) 27 20 ENDIF(WIN32) … … 30 23 31 24 target_link_libraries(Scheduler 32 ${Boost_FILESYSTEM_LIBRARY} 33 ${Boost_LIBRARIES} 34 ${CMAKE_THREAD_LIBS_INIT} 35 ${EXTRA_LIBS} 25 ${Boost_FILESYSTEM_LIBRARY} 26 ${NSCP_DEF_PLUGIN_LIB} 36 27 ) -
modules/Scheduler/Scheduler.cpp
ref0e24b r2018659 122 122 try { 123 123 std::wstring msg, perf; 124 NSCAPI::nagiosReturn code = NSCModuleHelper::Inject Command(item.command.c_str(), item.arguments, msg, perf);124 NSCAPI::nagiosReturn code = NSCModuleHelper::InjectSimpleCommand(item.command.c_str(), item.arguments, msg, perf); 125 125 if (NSCHelper::report::matches(item.report, code)) { 126 126 NSCModuleHelper::NotifyChannel(item.channel, item.alias, code, msg, perf); -
modules/Scheduler/Scheduler.def
r031acbf r2018659 12 12 NSUnloadModule 13 13 NSGetModuleDescription 14 NSDeleteBuffer -
service/CMakeLists.txt
r753ea6d r2018659 15 15 settings_manager_impl.cpp 16 16 17 ${NSCP_ INCLUDE_PATH}/NSCHelper.cpp18 ${NSCP_INCLUDE_PATH}/arrayBuffer.cpp 17 ${NSCP_DEF_PLUGIN_CPP} 18 19 19 ${NSCP_INCLUDE_PATH}/simpleini/ConvertUTF.c 20 20 ${NSCP_INCLUDE_PATH}/b64/b64.c … … 49 49 ${NSCP_INCLUDE_PATH}/settings/settings_registry.hpp 50 50 ${NSCP_INCLUDE_PATH}/settings/Settings.h 51 ${NSCP_INCLUDE_PATH}/NSCHelper.h52 51 ${NSCP_INCLUDE_PATH}/com_helpers.hpp 53 52 ${NSCP_INCLUDE_PATH}/dll/dll.hpp … … 58 57 ${NSCP_INCLUDE_PATH}/service/system_service.hpp 59 58 ${NSCP_INCLUDE_PATH}/service/win32_service.hpp 59 60 ${NSCP_DEF_PLUGIN_HPP} 61 60 62 ) 61 63 SET(service_SRCS ${service_SRCS} … … 70 72 71 73 target_link_libraries(nsclient++ 72 ${Boost_FILESYSTEM_LIBRARY} 73 ${Boost_LIBRARIES} 74 ${CMAKE_THREAD_LIBS_INIT} 75 ${EXTRA_LIBS} 74 ${Boost_FILESYSTEM_LIBRARY} 75 ${PROTOBUF_LIBRARY} 76 76 ) 77 77 -
service/NSCPlugin.cpp
r753ea6d r2018659 41 41 ,fHasMessageHandler(NULL) 42 42 ,fHandleMessage(NULL) 43 ,fDeleteBuffer(NULL) 43 44 ,fGetDescription(NULL) 44 45 ,fGetConfigurationMeta(NULL) … … 220 221 * @throws NSPluginException if the module is not loaded. 221 222 */ 222 NSCAPI::nagiosReturn NSCPlugin::handleCommand(const wchar_t* command, const unsigned int argLen, wchar_t **arguments, wchar_t* returnMessageBuffer, unsigned int returnMessageBufferLen, wchar_t* returnPerfBuffer, unsigned int returnPerfBufferLen) {223 NSCAPI::nagiosReturn NSCPlugin::handleCommand(const wchar_t* command, const char* dataBuffer, unsigned int dataBuffer_len, char** returnBuffer, unsigned int *returnBuffer_len) { 223 224 if (!isLoaded()) 224 225 throw NSPluginException(module_, _T("Library is not loaded")); 225 226 try { 226 return fHandleCommand(command, argLen, arguments, returnMessageBuffer, returnMessageBufferLen, returnPerfBuffer, returnPerfBufferLen);227 return fHandleCommand(command, dataBuffer, dataBuffer_len, returnBuffer, returnBuffer_len); 227 228 } catch (...) { 228 229 throw NSPluginException(module_, _T("Unhandled exception in handleCommand.")); 229 230 } 230 231 } 232 233 234 void NSCPlugin::deleteBuffer(char** buffer) { 235 if (!isLoaded()) 236 throw NSPluginException(module_, _T("Library is not loaded")); 237 try { 238 fDeleteBuffer(buffer); 239 } catch (...) { 240 throw NSPluginException(module_, _T("Unhandled exception in deleteBuffer.")); 241 } 242 } 243 NSCAPI::nagiosReturn NSCPlugin::handleCommand(const wchar_t *command, std::string &request, std::string &reply) { 244 char *buffer = NULL; 245 unsigned int len = 0; 246 NSCAPI::nagiosReturn ret = handleCommand(command, request.c_str(), request.size(), &buffer, &len); 247 if (buffer != NULL) { 248 reply = std::string(buffer, len); 249 deleteBuffer(&buffer); 250 } 251 return ret; 252 } 253 231 254 /** 232 255 * Handle a message from the core (or any other (or even potentially self) plug in). … … 349 372 throw NSPluginException(module_, _T("Could not load NSHandleCommand")); 350 373 374 fDeleteBuffer = (lpDeleteBuffer)module_.load_proc("NSDeleteBuffer"); 375 if (!fDeleteBuffer) 376 throw NSPluginException(module_, _T("Could not load NSDeleteBuffer")); 377 351 378 fHandleMessage = (lpHandleMessage)module_.load_proc("NSHandleMessage"); 352 379 if (!fHandleMessage) -
service/NSCPlugin.h
r1e0bbec r2018659 118 118 typedef int (*lpHasCommandHandler)(); 119 119 typedef int (*lpHasMessageHandler)(); 120 typedef NSCAPI::nagiosReturn (*lpHandleCommand)(const wchar_t*,const unsigned int, wchar_t**,wchar_t*,unsigned int,wchar_t *,unsigned int); 120 typedef NSCAPI::nagiosReturn (*lpHandleCommand)(const wchar_t*,const char*,const unsigned int,char**,unsigned int*); 121 typedef int (*lpDeleteBuffer)(char**); 121 122 typedef int (*lpCommandLineExec)(const unsigned int,wchar_t**); 122 123 typedef int (*lpHandleMessage)(int,const wchar_t*,const int,const wchar_t*); … … 135 136 lpHasMessageHandler fHasMessageHandler; 136 137 lpHandleCommand fHandleCommand; 138 lpDeleteBuffer fDeleteBuffer; 137 139 lpHandleMessage fHandleMessage; 138 140 lpUnLoadModule fUnLoadModule; … … 156 158 bool hasCommandHandler(void); 157 159 bool hasMessageHandler(void); 158 NSCAPI::nagiosReturn handleCommand(const wchar_t *command, const unsigned int argLen, wchar_t **arguments, wchar_t* returnMessageBuffer, unsigned int returnMessageBufferLen, wchar_t* returnPerfBuffer, unsigned int returnPerfBufferLen); 160 NSCAPI::nagiosReturn handleCommand(const wchar_t *command, const char* dataBuffer, const unsigned int dataBuffer_len, char** returnBuffer, unsigned int *returnBuffer_len); 161 NSCAPI::nagiosReturn handleCommand(const wchar_t* command, std::string &request, std::string &reply); 162 void deleteBuffer(char**buffer); 159 163 void handleMessage(int msgType, const wchar_t* file, const int line, const wchar_t *message); 160 164 void unload(void); -
service/NSClient++.cpp
r50a5db2 r2018659 39 39 #include "settings_client.hpp" 40 40 #include "service_manager.hpp" 41 42 #include "../proto/plugin.pb.h" 41 43 42 44 NSClient mainClient(SZSERVICENAME); // Global core instance. … … 373 375 args += argv[i]; 374 376 } 375 nRetCode = mainClient.inject(command, args, L' ', true,msg, perf);377 nRetCode = mainClient.inject(command, args, msg, perf); 376 378 std::wcout << msg << _T("|") << perf << std::endl; 377 379 mainClient.exitCore(true); … … 1022 1024 } 1023 1025 1024 NSCAPI::nagiosReturn NSClientT::inject(std::wstring command, std::wstring arguments, wchar_t splitter, bool escape,std::wstring &msg, std::wstring & perf) {1026 NSCAPI::nagiosReturn NSClientT::inject(std::wstring command, std::wstring arguments, std::wstring &msg, std::wstring & perf) { 1025 1027 /*if (shared_client_.get() != NULL && shared_client_->hasMaster()) { 1026 1028 try { … … 1034 1036 } 1035 1037 } else */{ 1036 unsigned int aLen = 0; 1037 wchar_t ** aBuf = arrayBuffer::split2arrayBuffer(arguments, splitter, aLen, escape); 1038 unsigned int buf_len = getBufferLength(); 1039 wchar_t * mBuf = new wchar_t[buf_len+1]; mBuf[0] = '\0'; 1040 wchar_t * pBuf = new wchar_t[buf_len+1]; pBuf[0] = '\0'; 1041 NSCAPI::nagiosReturn ret = injectRAW(command.c_str(), aLen, aBuf, mBuf, buf_len, pBuf, buf_len); 1042 arrayBuffer::destroyArrayBuffer(aBuf, aLen); 1038 PluginCommand::RequestMessage message; 1039 PluginCommand::Header *hdr = message.mutable_header(); 1040 hdr->set_type(PluginCommand::Header_Type_REQUEST); 1041 hdr->set_version(PluginCommand::Header_Version_VERSION_1); 1042 1043 PluginCommand::Request *req = message.add_payload(); 1044 req->set_command(to_string(command)); 1045 req->set_version(PluginCommand::Request_Version_VERSION_1); 1046 1047 std::string args = to_string(arguments); 1048 boost::tokenizer<boost::escaped_list_separator<char> > tok(args, boost::escaped_list_separator<char>('\\', ' ', '\"')); 1049 BOOST_FOREACH(string s, tok) 1050 req->add_arguments(s); 1051 1052 std::string request, response; 1053 message.SerializeToString(&request); 1054 1055 1056 1057 NSCAPI::nagiosReturn ret = injectRAW(command.c_str(), request, response); 1058 if (response.empty()) { 1059 LOG_ERROR(_T("No data retutned from command")); 1060 return NSCAPI::returnUNKNOWN; 1061 } 1062 1063 PluginCommand::ResponseMessage rsp_msg; 1064 rsp_msg.ParseFromString(response); 1065 if (rsp_msg.payload_size() != 1) { 1066 LOG_ERROR_STD(_T("Failed to extract return message not 1 payload: ") + strEx::itos(rsp_msg.payload_size())); 1067 return NSCAPI::returnUNKNOWN; 1068 } 1069 msg = to_wstring(rsp_msg.payload(0).message()); 1043 1070 if ( (ret == NSCAPI::returnInvalidBufferLen) || (ret == NSCAPI::returnIgnored) ) { 1044 delete [] mBuf;1045 delete [] pBuf;1046 1071 return ret; 1047 1072 } 1048 msg = mBuf;1049 perf = pBuf;1050 delete [] mBuf;1051 delete [] pBuf;1052 1073 return ret; 1053 1074 } … … 1066 1087 * @return The command status 1067 1088 */ 1068 NSCAPI::nagiosReturn NSClientT::injectRAW(const wchar_t* command, const unsigned int argLen, wchar_t **argument, wchar_t *returnMessageBuffer, unsigned int returnMessageBufferLen, wchar_t *returnPerfBuffer, unsigned int returnPerfBufferLen) {1089 NSCAPI::nagiosReturn NSClientT::injectRAW(const wchar_t* command, std::string &request, std::string &response) { 1069 1090 if (logDebug()) { 1070 LOG_DEBUG_STD(_T("Injecting: ") + (std::wstring) command + _T(": ") + arrayBuffer::arrayBuffer2string(argument, argLen, _T(", ")));1091 LOG_DEBUG_STD(_T("Injecting: ") + std::wstring(command) + _T(": {{{") + strEx::strip_hex(to_wstring(request)) + _T("}}}")); 1071 1092 } 1072 1093 /*if (shared_client_.get() != NULL && shared_client_->hasMaster()) { … … 1093 1114 for (pluginList::size_type i = 0; i < commandHandlers_.size(); i++) { 1094 1115 try { 1095 NSCAPI::nagiosReturn c = commandHandlers_[i]->handleCommand(command, argLen, argument, returnMessageBuffer, returnMessageBufferLen, returnPerfBuffer, returnPerfBufferLen);1116 NSCAPI::nagiosReturn c = commandHandlers_[i]->handleCommand(command, request, response); 1096 1117 switch (c) { 1097 1118 case NSCAPI::returnInvalidBufferLen: … … 1104 1125 case NSCAPI::returnCRIT: 1105 1126 case NSCAPI::returnUNKNOWN: 1106 LOG_DEBUG_STD(_T("Injected Result: ") + NSCHelper::translateReturn(c) + _T(" '") + (std::wstring)(returnMessageBuffer) + _T("'")); 1107 LOG_DEBUG_STD(_T("Injected Performance Result: '") +(std::wstring)(returnPerfBuffer) + _T("'")); 1127 LOG_DEBUG_STD(_T("Result ") + std::wstring(command) + _T(": ") + NSCHelper::translateReturn(c) + _T(" {{{") + strEx::strip_hex(to_wstring(response)) + _T("}}}")); 1108 1128 return c; 1109 1129 default: -
service/NSClient++.h
rcc2efd6 r2018659 163 163 // Member functions 164 164 boost::filesystem::wpath getBasePath(void); 165 NSCAPI::nagiosReturn injectRAW(const wchar_t* command, const unsigned int argLen, wchar_t **argument, wchar_t *returnMessageBuffer, unsigned int returnMessageBufferLen, wchar_t *returnPerfBuffer, unsigned int returnPerfBufferLen);166 NSCAPI::nagiosReturn inject(std::wstring command, std::wstring arguments, wchar_t splitter, bool escape,std::wstring &msg, std::wstring & perf);165 NSCAPI::nagiosReturn injectRAW(const wchar_t* command, std::string &request, std::string &response); 166 NSCAPI::nagiosReturn inject(std::wstring command, std::wstring arguments, std::wstring &msg, std::wstring & perf); 167 167 // std::wstring inject(const std::wstring buffer); 168 168 std::wstring execute(std::wstring password, std::wstring cmd, std::list<std::wstring> args); … … 193 193 } 194 194 int session_inject(std::wstring command, std::wstring arguments, wchar_t splitter, bool escape, std::wstring &msg, std::wstring & perf) { 195 return inject(command, arguments, splitter, escape, msg, perf);195 return 0; // TODO: Readd this!!! inject(command, arguments, splitter, escape, msg, perf); 196 196 } 197 197 std::pair<std::wstring,std::wstring> session_get_name() { -
service/core_api.cpp
r1bfe6f0 r2018659 82 82 #endif 83 83 } 84 NSCAPI::nagiosReturn NSAPIInject(const wchar_t* command, const unsigned int argLen, wchar_t **argument, wchar_t *returnMessageBuffer, unsigned int returnMessageBufferLen, wchar_t *returnPerfBuffer, unsigned int returnPerfBufferLen) { 85 return mainClient.injectRAW(command, argLen, argument, returnMessageBuffer, returnMessageBufferLen, returnPerfBuffer, returnPerfBufferLen); 84 NSCAPI::nagiosReturn NSAPIInject(const wchar_t* command, const char *request_buffer, const unsigned int request_buffer_len, char **response_buffer, unsigned int *response_buffer_len) { 85 std::string request (request_buffer, request_buffer_len), response; 86 NSCAPI::nagiosReturn ret = mainClient.injectRAW(command, request, response); 87 *response_buffer_len = response.size(); 88 if (response.empty()) 89 *response_buffer = NULL; 90 else { 91 *response_buffer = new char[*response_buffer_len + 10]; 92 memcpy(*response_buffer, response.c_str(), *response_buffer_len); 93 } 94 return ret; 86 95 } 87 96 NSCAPI::errorReturn NSAPIGetSettingsSection(const wchar_t* section, wchar_t*** aBuffer, unsigned int * bufLen) { … … 415 424 if (wcscasecmp(buffer, _T("NSAPINotify")) == 0) 416 425 return reinterpret_cast<LPVOID>(&NSAPINotify); 426 if (wcscasecmp(buffer, _T("NSAPIDestroyBuffer")) == 0) 427 return reinterpret_cast<LPVOID>(&NSAPIDestroyBuffer); 417 428 418 429 LOG_ERROR_STD(_T("Function not found: ") + buffer); … … 425 436 } 426 437 438 void NSAPIDestroyBuffer(char**buffer) { 439 delete [] *buffer; 440 } -
service/core_api.h
r1bfe6f0 r2018659 38 38 void NSAPIMessage(int msgType, const wchar_t* file, const int line, const wchar_t* message); 39 39 void NSAPIStopServer(void); 40 NSCAPI::nagiosReturn NSAPIInject(const wchar_t* command, const unsigned int argLen, wchar_t **argument, wchar_t *returnMessageBuffer, unsigned int returnMessageBufferLen, wchar_t *returnPerfBuffer, unsigned int returnPerfBufferLen);40 NSCAPI::nagiosReturn NSAPIInject(const wchar_t* command, const char *request_buffer, const unsigned int request_buffer_len, char **response_buffer, unsigned int *response_buffer_len); 41 41 NSCAPI::errorReturn NSAPIGetSettingsSection(const wchar_t*, wchar_t***, unsigned int *); 42 42 NSCAPI::errorReturn NSAPIReleaseSettingsSectionBuffer(wchar_t*** aBuffer, unsigned int * bufLen); … … 59 59 NSCAPI::errorReturn NSAPISettingsSave(void); 60 60 NSCAPI::errorReturn NSAPINotify(const wchar_t*, const wchar_t*, NSCAPI::nagiosReturn, const wchar_t*, const wchar_t*); 61 void NSAPIDestroyBuffer(char**); -
service/simple_client.hpp
r031acbf r2018659 55 55 strEx::token t = strEx::getToken(buff, ' '); 56 56 std::wstring msg, perf; 57 NSCAPI::nagiosReturn ret = core_->inject(t.first, t.second, ' ', true,msg, perf);57 NSCAPI::nagiosReturn ret = core_->inject(t.first, t.second, msg, perf); 58 58 if (ret == NSCAPI::returnIgnored) { 59 59 std::wcout << _T("No handler for command: ") << t.first << std::endl;
Note: See TracChangeset
for help on using the changeset viewer.








