From e6ffbf72371479f557e482b92c77114019913c3a Mon Sep 17 00:00:00 2001 From: slerena Date: Wed, 2 Sep 2009 17:44:41 +0000 Subject: [PATCH] 2009-09-02 Sancho Lerena * attachment/plugin: New directory to place console uploaded server plugins (from the new extension). * extensions/plugin_registration.php: New extension to upload and register using a new format of packaged plugins (.pspz) files who register automatically the plugin and add network components defined to use that plugin. .pspz format are defined in our wiki at http://openideas.info/wiki/index.php?title=Pandora_3.0:New_options_in_development_version git-svn-id: https://svn.code.sf.net/p/pandora/code/trunk@1910 c3f86ba8-e40f-0410-aaad-9ba5e7f4b01f --- pandora_console/ChangeLog | 13 ++ pandora_console/extensions/hello.php | 7 +- .../extensions/plugin_registration.php | 137 ++++++++++++++++++ pandora_console/general/footer.php | 1 + pandora_console/include/styles/pandora.css | 8 + 5 files changed, 163 insertions(+), 3 deletions(-) create mode 100644 pandora_console/extensions/plugin_registration.php diff --git a/pandora_console/ChangeLog b/pandora_console/ChangeLog index 55edf58fb5..788bad91af 100644 --- a/pandora_console/ChangeLog +++ b/pandora_console/ChangeLog @@ -1,3 +1,16 @@ +2009-09-02 Sancho Lerena + + * attachment/plugin: New directory to place console uploaded server + plugins (from the new extension). + + * extensions/plugin_registration.php: New extension to upload and register + using a new format of packaged plugins (.pspz) files who register + automatically the plugin and add network components defined to use that + plugin. .pspz format are defined in our wiki at + http://openideas.info/wiki/index.php?title=Pandora_3.0:New_options_in_development_version + + * include/styles/pandora.css: Adjusted notify text format. + 2009-09-02 Ramon Novoa * include/help/en/help_alert_macros.php, diff --git a/pandora_console/extensions/hello.php b/pandora_console/extensions/hello.php index 61c183d733..870204654a 100644 --- a/pandora_console/extensions/hello.php +++ b/pandora_console/extensions/hello.php @@ -17,11 +17,12 @@ function hello_extension_main () { /* Here you can do almost all you want! */ echo "

Hello world!

"; - echo "This is a sample of minimal extension"; + echo "This is a sample of minimal extension in the operation view"; } function test() { - echo "

TEST

"; + echo "

Hello administration world

"; + echo "This is a sample of minimal extension in the godmode view"; } /* This adds a option in the operation menu */ @@ -36,5 +37,5 @@ add_operation_menu_option(__('Hello plugin'), 'estado',"hello/icon.png"); /* This sets the function to be called when the extension is selected in the operation menu */ add_extension_main_function ('hello_extension_main'); -add_extension_godmode_function('prueba'); +add_extension_godmode_function('test'); ?> diff --git a/pandora_console/extensions/plugin_registration.php b/pandora_console/extensions/plugin_registration.php new file mode 100644 index 0000000000..d90929134d --- /dev/null +++ b/pandora_console/extensions/plugin_registration.php @@ -0,0 +1,137 @@ +Plugin registration"; + + echo "
"; + echo __("This extension makes registration of server plugins more easy. Here you can upload a server plugin in Pandora FMS 3.x zipped format (.pspz). Please refer to documentation on how to obtain and use Pandora FMS Server Plugins.

You can get more plugins in our Public Resource Library"); + echo "
"; + + echo "

"; + + if (!isset ($_FILES['plugin_upload']['tmp_name'])){ + // Upload form + echo "
"; + echo ''; + echo "
"; + echo ""; + echo "
"; + return; + } + + $config["plugin_store"] = $config["attachment_store"] . "/plugin"; + $zip = zip_open($_FILES['plugin_upload']['tmp_name']); + + if ($zip) { + while ($zip_entry = zip_read($zip)) { + if (zip_entry_open($zip, $zip_entry, "r")) { + if (zip_entry_name($zip_entry) == "plugin_definition.ini"){ + $basepath = $config["attachment_store"]; + } else { + $basepath = $config["plugin_store"]; + } + $filename = $basepath . "/". zip_entry_name($zip_entry); + $fp = fopen($filename, 'w'); + $buf = zip_entry_read($zip_entry, zip_entry_filesize($zip_entry)); + fwrite($fp, $buf); + fclose($fp); + chmod ($filename, 0755); + zip_entry_close($zip_entry); + } + } + zip_close($zip); + } + + // Parse with sections + if (! $ini_array = parse_ini_file($config["attachment_store"] . "/plugin_definition.ini", true)){ + echo "

".__("Cannot load INI file")."

"; + return; + } + + $exec_path = $config["plugin_store"] . "/" . $ini_array["plugin_definition"]["filename"]; + if (!file_exists($exec_path)){ + echo "

".__("Plugin exec not found. Aborting!")."

"; + unlink ($config["attachment_store"] . "/plugin_definition.ini"); + return; + } + + // Verify if a plugin with the same name is already registered + + $sql0 = "SELECT COUNT(*) FROM tplugin WHERE name = '" . mysql_escape_string ($ini_array["plugin_definition"]["name"]) . "'"; + $result = get_db_sql ($sql0); + + + if ($result> 0) { + echo "

".__("Plugin already registered. Aborting!")."

"; + unlink ($config["attachment_store"] . "/plugin_definition.ini"); + return;; + } + + $sql1 = "INSERT INTO tplugin (name, description, max_timeout, execute, net_dst_opt, net_port_opt, user_opt, pass_opt, plugin_type) VALUES ( + '" . mysql_escape_string ($ini_array["plugin_definition"]["name"]) . "' , + '" . mysql_escape_string ($ini_array["plugin_definition"]["description"]) . "' , + '" . $ini_array["plugin_definition"]["timeout"] . "' , + '" . mysql_escape_string ($exec_path) . "' , + '" . $ini_array["plugin_definition"]["ip_opt"] . "' , + '" . $ini_array["plugin_definition"]["port_opt"] . "' , + '" . $ini_array["plugin_definition"]["user_opt"] . "' , + '" . $ini_array["plugin_definition"]["pass_opt"] . "' , + '" . $ini_array["plugin_definition"]["plugin_type"] . + "')"; + + $create_id = process_sql($sql1, "insert_id"); + + for ($ax=1; $ax <= $ini_array["plugin_definition"]["total_modules_provided"]; $ax++){ + $label = "module".$ax; + + $sql2 = "INSERT INTO tnetwork_component (name, description, id_group, type, max, min, module_interval, id_module_group, id_modulo, plugin_user, plugin_pass, plugin_parameter, max_timeout, history_data, min_warning, min_critical, min_ff_event, tcp_port, id_plugin) VALUES ( + + '".mysql_escape_string ($ini_array[$label]["name"])."', + '".mysql_escape_string ($ini_array[$label]["description"]) ."', + '".$ini_array[$label]["id_group"]."', + '".$ini_array[$label]["type"]."', + '".$ini_array[$label]["max"]."', + '".$ini_array[$label]["min"]."', + '".$ini_array[$label]["module_interval"]."', + '".$ini_array[$label]["id_module_group"]."', + '".$ini_array[$label]["id_modulo"]."', + '".mysql_escape_string ($ini_array[$label]["plugin_user"])."', + '".mysql_escape_string ($ini_array[$label]["plugin_pass"])."', + '".mysql_escape_string ($ini_array[$label]["plugin_parameter"])."', + '".$ini_array[$label]["max_timeout"]."', + '".$ini_array[$label]["history_data"]."', + '".$ini_array[$label]["min_warning"]."', + '".$ini_array[$label]["min_critical"]."', + '".$ini_array[$label]["min_ff_event"]."', + '".$ini_array[$label]["tcp_port"]."', + '".$create_id."')"; + + process_sql($sql2); + + echo "

".__("Module plugin registered"). " : ". $ini_array[$label]["name"] ."

"; + } + + echo "

".__("Plugin"). " ". $ini_array["plugin_definition"]["name"] . " ". __("Registered successfully")."

"; + unlink ($config["attachment_store"] . "/plugin_definition.ini"); + +} + +add_godmode_menu_option (__('Plugin register'), 'PM','gservers',''); +add_extension_godmode_function('pluginreg_extension_main'); + +?> diff --git a/pandora_console/general/footer.php b/pandora_console/general/footer.php index 863983544a..9bed384f93 100644 --- a/pandora_console/general/footer.php +++ b/pandora_console/general/footer.php @@ -28,4 +28,5 @@ echo ''; if (isset ($config['debug'])) { echo ' - Saved '.format_numeric ($sql_cache["saved"]).' Queries'; } + ?> diff --git a/pandora_console/include/styles/pandora.css b/pandora_console/include/styles/pandora.css index 5c8a507343..ef5dd4b7c2 100644 --- a/pandora_console/include/styles/pandora.css +++ b/pandora_console/include/styles/pandora.css @@ -761,7 +761,15 @@ a.big_data { text-align: center; font-weight: bold; padding: 8px; + width: 95% } + +.notify a { + color: #003a3a; + text-decoration: underline; +} +} + .listing { border-collapse: collapse; }