bool CheckExternalScripts::commandLineExec(const int target_mode, const Plugin::ExecuteRequestMessage::Request &request, Plugin::ExecuteResponseMessage::Response *response, const Plugin::ExecuteRequestMessage &request_message) { std::string command = request.command(); if (command == "ext-scr" && request.arguments_size() > 0) command = request.arguments(0); else if (command.empty() && target_mode == NSCAPI::target_module && request.arguments_size() > 0) command = request.arguments(0); else if (command.empty() && target_mode == NSCAPI::target_module) command = "help"; try { if (command == "add") add_script(request, response); else if (command == "install") configure(request, response); else if (command == "list") list(request, response); else if (command == "help") { nscapi::protobuf::functions::set_response_bad(*response, "Usage: nscp ext-scr [add|list|install] --help"); } else return false; return true; } catch (const std::exception &e) { nscapi::protobuf::functions::set_response_bad(*response, "Error: " + utf8::utf8_from_native(e.what())); } catch (...) { nscapi::protobuf::functions::set_response_bad(*response, "Error: "); } return false; }
bool CheckExternalScripts::commandLineExec(const int target_mode, const Plugin::ExecuteRequestMessage::Request &request, Plugin::ExecuteResponseMessage::Response *response, const Plugin::ExecuteRequestMessage &request_message) { std::string command = request.command(); if (command == "ext-scr" && request.arguments_size() > 0) command = request.arguments(0); else if (command.empty() && target_mode == NSCAPI::target_module && request.arguments_size() > 0) command = request.arguments(0); else if (command.empty() && target_mode == NSCAPI::target_module) command = "help"; try { if (command == "help") { nscapi::protobuf::functions::set_response_bad(*response, "Usage: nscp ext-scr [add|list|show|install|delete] --help"); return true; } else { if (!provider_) { nscapi::protobuf::functions::set_response_bad(*response, "Failed to create provider"); } extscr_cli client(provider_); return client.run(command, request, response); } } catch (const std::exception &e) { nscapi::protobuf::functions::set_response_bad(*response, "Error: " + utf8::utf8_from_native(e.what())); return true; } catch (...) { nscapi::protobuf::functions::set_response_bad(*response, "Error: "); return true; } return false; }
bool CheckExternalScripts::commandLineExec(const Plugin::ExecuteRequestMessage::Request &request, Plugin::ExecuteResponseMessage::Response *response, const Plugin::ExecuteRequestMessage &request_message) { try { if (request.arguments_size() > 0 && request.arguments(0) == "add") add_script(request, response); else if (request.arguments_size() > 0 && request.arguments(0) == "install") configure(request, response); else if (request.arguments_size() > 0 && request.arguments(0) == "help") { nscapi::protobuf::functions::set_response_bad(*response, "Usage: nscp ext-scr add --help"); } else return false; } catch (const std::exception &e) { nscapi::protobuf::functions::set_response_bad(*response, "Error: " + utf8::utf8_from_native(e.what())); } catch (...) { nscapi::protobuf::functions::set_response_bad(*response, "Error: "); } return true; }
void lua::lua_runtime::on_exec(std::string command, script_information *information, lua::lua_traits::function_type function, bool simple, const Plugin::ExecuteRequestMessage::Request &request, Plugin::ExecuteResponseMessage::Response *response, const Plugin::ExecuteRequestMessage &request_message) { lua_wrapper lua(prep_function(information, function)); int args = 2; if (function.object_ref != 0) args = 3; if (simple) { std::list<std::string> argslist; for (int i=0;i<request.arguments_size();i++) argslist.push_back(request.arguments(i)); lua.push_string(command); lua.push_array(argslist); if (lua.pcall(args, 3, 0) != 0) return nscapi::protobuf::functions::set_response_bad(*response, "Failed to handle command: " + command + ": " + lua.pop_string()); NSCAPI::nagiosReturn ret = NSCAPI::returnUNKNOWN; if (lua.size() < 3) { NSC_LOG_ERROR_STD("Invalid return: " + lua.dump_stack()); nscapi::protobuf::functions::append_simple_exec_response_payload(response, command, NSCAPI::returnUNKNOWN, "Invalid return"); return; } std::string msg, perf; msg = lua.pop_string(); ret = lua.pop_code(); lua.gc(LUA_GCCOLLECT, 0); nscapi::protobuf::functions::append_simple_exec_response_payload(response, command, ret, msg); } else { lua.push_string(command); lua.push_raw_string(request.SerializeAsString()); lua.push_raw_string(request_message.SerializeAsString()); args++; if (lua.pcall(args, 1, 0) != 0) return nscapi::protobuf::functions::set_response_bad(*response, "Failed to handle command: " + command + ": " + lua.pop_string()); if (lua.size() < 1) { NSC_LOG_ERROR_STD("Invalid return: " + lua.dump_stack()); nscapi::protobuf::functions::append_simple_exec_response_payload(response, command, NSCAPI::returnUNKNOWN, "Invalid return data"); return; } Plugin::QueryResponseMessage local_response; std::string data = lua.pop_raw_string(); response->ParseFromString(data); lua.gc(LUA_GCCOLLECT, 0); } }