GNU General Public License for more details. You should have received a copy of the GNU General Public License along with shellcommands. If not, see <http://www.gnu.org/licenses/>. -------------------------------------------------------------------------- */ include '../../../inc/includes.php'; Html::header(PluginShellcommandsShellcommand::getTypeName(2), '', "plugins", "shellcommands"); $plugin_shellcommands_shellcommands_id = $_GET['plugin_shellcommands_shellcommands_id']; $itemtype = $_SESSION["plugin_shellcommands"]["itemtype"]; unset($_SESSION["plugin_shellcommands"]["itemtype"]); $tab_id = unserialize($_SESSION["plugin_shellcommands"]["tab_id"]); unset($_SESSION["plugin_shellcommands"]["tab_id"]); $command = new PluginShellcommandsShellcommand(); $command_item = new PluginShellcommandsShellcommand_Item(); $command->getFromDBbyName($plugin_shellcommands_shellcommands_id); $path = Dropdown::getDropdownName("glpi_plugin_shellcommands_shellcommandpaths", $command->fields["plugin_shellcommands_shellcommandpaths_id"]); $parameters = $command->fields["parameters"]; $link = $command->fields["link"]; echo "<div align='center'>"; echo "<table class='tab_cadre_fixe' cellpadding='5'>"; echo "<tr><th>" . __('Command', 'shellcommands'); echo "</th></tr>"; foreach ($tab_id as $key => $ID) { $item = new $itemtype(); $item->getFromDB($ID); if ($plugin_shellcommands_shellcommands_id == "Wake on Lan" || $plugin_shellcommands_shellcommands_id == "Ping") { $ipmac = array(); $i = 0; $query = "SELECT `glpi_networkports`.*, `glpi_ipaddresses`.`name` as ip, `glpi_ipnetworks`.`netmask`\n FROM `glpi_networkports`\n LEFT JOIN `glpi_networknames`\n ON (`glpi_networknames`.`items_id`=`glpi_networkports`.`id`) \n LEFT JOIN `glpi_ipaddresses`\n ON (`glpi_networknames`.`id`=`glpi_ipaddresses`.`items_id`)\n LEFT JOIN `glpi_ipaddresses_ipnetworks`\n ON (`glpi_ipaddresses`.`id`=`glpi_ipaddresses_ipnetworks`.`ipaddresses_id`) \n LEFT JOIN `glpi_ipnetworks`\n ON (`glpi_ipaddresses_ipnetworks`.`ipnetworks_id`=`glpi_ipnetworks`.`id`)\n WHERE `glpi_networkports`.`items_id` = '{$ID}' \n AND `glpi_networkports`.`itemtype` = '" . $item->getType() . "' \n ORDER BY `glpi_networkports`.`logical_number`"; $result = $DB->query($query);
static function lauchCommand($values) { $host = $values['value']; $id = $values['plugin_shellcommands_shellcommands_id']; $command = new PluginShellcommandsShellcommand(); $command_item = new PluginShellcommandsShellcommand_Item(); $command->getFromDBbyName($id); $path = Dropdown::getDropdownName("glpi_plugin_shellcommands_shellcommandpaths", $command->fields["plugin_shellcommands_shellcommandpaths_id"]); $parameters = $command->fields["parameters"]; echo "<div align='center'>"; echo "<table class='tab_cadrehov' cellpadding='5'>"; echo "<tr><th>" . __('Command', 'shellcommands'); echo "</th></tr>"; echo "<tr class='tab_bg_2'><td>"; echo "<p><b>{$id} -> " . $host . "</b><br>"; if ($id == "Wake on Lan") { $command = $command_item->sendMagicPacket($host); } else { $command = $path . " " . $parameters . " " . $host; } $ouput[] = null; if ($id != "Wake on Lan") { exec($command, $ouput); $cmd = count($ouput); echo "<font color=blue>"; for ($i = 0; $i < $cmd; $i++) { echo Toolbox::encodeInUtf8($ouput[$i]) . "<br>"; } echo "</font>"; echo "</p>" . $command; } echo "</td></tr></table></div>"; }
/** * Launch a command * * @param array $values * * @return void */ static function lauchCommand($values) { global $CFG_GLPI; $targetParam = $values['value']; $commandName = Dropdown::getDropdownName("glpi_plugin_shellcommands_shellcommands", $values['id']); $shellcommands = new PluginShellcommandsShellcommand(); $shellcommands->getFromDBbyName($commandName); list($error, $message) = self::execCommand($shellcommands->fields['id'], $targetParam); echo "<div class='center'>"; echo "<table class='tab_cadre_fixe center'>"; echo "<tr class='tab_bg_1'>"; echo "<th colspan='4'>" . __('Result details') . "</th>"; echo "</tr>"; PluginShellcommandsShellcommand::displayCommandResult($shellcommands, $targetParam, $message, $error); echo "</table>"; echo "</div>"; }
/** * Method to run shellcommands by webservice * * @param array $params Options * @param string $protocol Communication protocol used * * @return array or error value */ static function methodRun($params, $protocol) { global $DB; if (isset($params['help'])) { return array('command_id' => 'integer,optional,multiple', 'command_name' => 'string,optional,multiple', 'target_type' => 'string,mandatory', 'target_id' => 'integer,optional,multiple', 'target_name' => 'string,optional', 'help' => 'bool,optional'); } if (!Session::getLoginUserID()) { return PluginWebservicesMethodCommon::Error($protocol, WEBSERVICES_ERROR_NOTAUTHENTICATED); } $executionOutputs = array(); $invalidCommands = array(); $invalidTargets = array(); /** Parameters check **/ if ((!isset($params['command_id']) || empty($params['command_id'])) && (!isset($params['command_name']) || empty($params['command_name']))) { return PluginWebservicesMethodCommon::Error($protocol, WEBSERVICES_ERROR_MISSINGPARAMETER, '', 'one among "command_id" and "command_name"'); } //Post-relation: Either Shellcommand ID or name is given if (!isset($params['target_type']) || empty($params['target_type']) || (!isset($params['target_id']) || empty($params['target_id'])) && (!isset($params['target_name']) || empty($params['target_name']))) { return PluginWebservicesMethodCommon::Error($protocol, WEBSERVICES_ERROR_MISSINGPARAMETER, '', 'must specify "target_type" and one among "target_id" and "target_name"'); } //Post-relation: Either Target ID or name is given $possibleTargetTypes = PluginShellcommandsShellcommand_Item::getClasses(true); if (!in_array($params['target_type'], $possibleTargetTypes) || !class_exists($params['target_type'])) { return PluginWebservicesMethodCommon::Error($protocol, WEBSERVICES_ERROR_BADPARAMETER, '', '"target_type" is "' . $params['target_type'] . '" must be one of: ' . implode(', ', $possibleTargetTypes) . ''); } //Post-relation: Given target type ($params['target_type']) is valid /** /Parameters check **/ /** Command determination **/ $commandIds = array(); if (isset($params['command_id']) && !empty($params['command_id'])) { // ID(s) given $commandIds = (array) $params['command_id']; } else { // Name(s) given $command_names = (array) $params['command_name']; foreach ($command_names as $currentCommandName) { $command = new PluginShellcommandsShellcommand(); if ($command->getFromDBbyName($currentCommandName)) { $commandIds[] = $command->fields['id']; } else { $invalidCommands[] = $currentCommandName; } } } //Post-relation: $commandIds is an array containing either provided or found (via given name) shellcommand IDs /** /Command determination **/ /** Target determination **/ $targetIds = array(); if (isset($params['target_id']) && !empty($params['target_id'])) { // ID(s) given $targetIds = (array) $params['target_id']; } else { // Name(s) given $target_names = (array) $params['target_name']; foreach ($target_names as $currentTargetName) { $target = new $params['target_type'](); if ($found = $target->find("`name` LIKE '" . $DB->escape($currentTargetName) . "'")) { $targetIds = array_merge($targetIds, array_keys($found)); } else { $invalidTargets[] = $currentTargetName; } } } //Post-relation: $targetIds is an array containing either provided or found (via given name) targets IDs (of type $params['target_type']) /** /Target determination **/ $commandIds = array_unique($commandIds); $targetIds = array_unique($targetIds); foreach ($targetIds as $currentTargetId) { $item = new $params['target_type'](); $targetFound = $item->getFromDB($currentTargetId); if (!$targetFound) { $invalidTargets[] = $currentTargetId; } foreach ($commandIds as $currentCommandId) { $targetParams = PluginShellcommandsShellcommand_Item::resolveLinkOfCommand($currentCommandId, $item); if ($targetParams !== false) { foreach ((array) $targetParams as $currentTargetParam) { list($error, $executionOutput) = PluginShellcommandsShellcommand_Item::execCommand($currentCommandId, $currentTargetParam); $executionOutputs[] = trim($executionOutput); } } else { $invalidCommands[] = $currentCommandId; } } } return array('callResults' => implode(PHP_EOL, $executionOutputs), 'invalidCommands' => $invalidCommands, 'invalidTargets' => $invalidTargets); }