/** * Description * * @param * @param * * @return * **/ function getPortIDfromDeviceIP($IP, $ifDescr) { global $DB; $pfiud = new PluginFusioninventoryUnknownDevice(); $np = new Netport(); $PortID = ""; $query = "SELECT *\n FROM `glpi_plugin_fusioninventory_networking_ifaddr`\n WHERE `ifaddr`='" . $IP . "';"; $result = $DB->query($query); if ($DB->numrows($result) == "1") { $data = $DB->fetch_assoc($result); $queryPort = "SELECT *\n FROM `glpi_plugin_fusioninventory_networking_ports`\n LEFT JOIN `glpi_networking_ports`\n ON `glpi_plugin_fusioninventory_networking_ports`.`FK_networking_ports`=\n `glpi_networking_ports`.`ID`\n WHERE (`ifdescr`='" . $ifDescr . "'\n OR `glpi_networking_ports`.`name`='" . $ifDescr . "')\n AND `glpi_networking_ports`.`on_device`='" . $data["FK_networking"] . "'\n AND `glpi_networking_ports`.`device_type`='2';"; $resultPort = $DB->query($queryPort); $dataPort = $DB->fetch_assoc($resultPort); if ($DB->numrows($resultPort) == "0") { // Search in other devices $queryPort = "SELECT *\n FROM `glpi_networking_ports`\n WHERE `ifaddr`='" . $IP . "'\n ORDER BY `device_type`\n LIMIT 0,1;"; $resultPort = $DB->query($queryPort); $dataPort = $DB->fetch_assoc($resultPort); $PortID = $dataPort["ID"]; } else { $PortID = $dataPort["FK_networking_ports"]; } } else { $query = "SELECT * FROM `glpi_plugin_fusioninventory_unknown_device`\n WHERE `ifaddr`='" . $IP . "'\n LIMIT 1"; $result = $DB->query($query); if ($DB->numrows($result) == "1") { $data = $DB->fetch_assoc($result); // Search port and add if required $query1 = "SELECT *\n FROM `glpi_networking_ports`\n WHERE `device_type`='" . PLUGIN_FUSIONINVENTORY_MAC_UNKNOWN . "'\n AND `on_device`='" . $data['ID'] . "'\n AND `name`='" . $ifDescr . "'\n LIMIT 1"; $result1 = $DB->query($query1); if ($DB->numrows($result1) == "1") { $data1 = $DB->fetch_assoc($result1); $PortID = $data1['ID']; } else { // Add port $input = array(); $input['on_device'] = $data['ID']; $input['device_type'] = PLUGIN_FUSIONINVENTORY_MAC_UNKNOWN; $input['ifaddr'] = $IP; $input['name'] = $ifDescr; $PortID = $np->add($input); } return $PortID; } $query = "SELECT *\n FROM `glpi_networking_ports`\n WHERE `device_type`='" . PLUGIN_FUSIONINVENTORY_MAC_UNKNOWN . "'\n AND`ifaddr`='" . $IP . "'\n LIMIT 1"; $result = $DB->query($query); if ($DB->numrows($result) == "1") { $data = $DB->fetch_assoc($result); if ($pfiud->convertUnknownToUnknownNetwork($data['on_device'])) { // Add port $input = array(); $input['on_device'] = $data['on_device']; $input['device_type'] = PLUGIN_FUSIONINVENTORY_MAC_UNKNOWN; $input['ifaddr'] = $IP; $input['name'] = $ifDescr; $PortID = $np->add($input); return $PortID; } } // Add unknown device $input = array(); $input['ifaddr'] = $IP; $unkonwn_id = $pfiud->add($input); // Add port $input = array(); $input['on_device'] = $unkonwn_id; $input['device_type'] = PLUGIN_FUSIONINVENTORY_MAC_UNKNOWN; $input['ifaddr'] = $IP; $input['name'] = $ifDescr; $PortID = $np->add($input); return $PortID; } return $PortID; }
/** * Manage connection to unknown device * *@param $p_mac MAC address *@param $p_ip IP address *@return nothing **/ function PortUnknownConnection($p_mac, $p_ip) { $ptud = new PluginFusioninventoryUnknownDevice(); $unknown_infos["name"] = ''; $newID = $ptud->add($unknown_infos); // Add networking_port $np = new Netport(); $port_add["on_device"] = $newID; $port_add["device_type"] = PLUGIN_FUSIONINVENTORY_MAC_UNKNOWN; $port_add["ifaddr"] = $p_ip; $port_add['ifmac'] = $p_mac; $dport = $np->add($port_add); $ptsnmp = new PluginFusioninventorySNMP(); $this->connectDB($dport); }
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with GLPI; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA ------------------------------------------------------------------------ */ // Original Author of file: David DURIEUX // Purpose of file: // ---------------------------------------------------------------------- $NEEDED_ITEMS = array("setup", "rulesengine", "fusioninventory", "search", "device", "networking", "computer", "infocom", "printer", "peripheral"); define('GLPI_ROOT', '../../..'); include GLPI_ROOT . "/inc/includes.php"; PluginFusioninventoryAuth::checkRight("snmp_networking", "r"); $ptud = new PluginFusioninventoryUnknownDevice(); $ptt = new PluginFusioninventoryTask(); $ptcm = new PluginFusioninventoryConfigModules(); commonHeader($LANG['plugin_fusioninventory']["title"][0], $_SERVER["PHP_SELF"], "plugins", "fusioninventory", "unknown"); PluginFusioninventoryDisplay::mini_menu(); $ID = ""; if (isset($_GET["ID"])) { $ID = $_GET["ID"]; } if (isset($_POST["delete"])) { $ptud->check($_POST['ID'], 'w'); $ptud->delete($_POST, 1); // logEvent($_POST["ID"], "computers", 4, "inventory", $_SESSION["glpiname"]." ".$LANG['log'][22]); glpi_header($CFG_GLPI["root_doc"] . "plugins/fusioninventory/front/unknown.php"); } else { if (isset($_POST["restore"])) {
function import_netdiscovery($p_xml, $agentKey) { global $DB, $LANG; $test = ''; $p_criteria = array(); $walks = new PluginFusioninventoryWalk(); $ptap = new PluginFusioninventoryAgentsProcesses(); $pta = new PluginFusioninventoryAgents(); $config_discovery = new PluginFusioninventoryConfig(); $np = new Netport(); $ptud = new PluginFusioninventoryUnknownDevice(); if (isset($p_xml->AGENT->START)) { $ptap->updateProcess($p_xml->PROCESSNUMBER, array('start_time_discovery' => date("Y-m-d H:i:s"))); } else { if (isset($p_xml->AGENT->END)) { $ptap->updateProcess($p_xml->PROCESSNUMBER, array('end_time_discovery' => date("Y-m-d H:i:s"))); } else { if (isset($p_xml->AGENT->EXIT)) { $ptap->endProcess($p_xml->PROCESSNUMBER, date("Y-m-d H:i:s")); } else { if (isset($p_xml->AGENT->NBIP)) { $ptap->updateProcess($p_xml->PROCESSNUMBER, array('discovery_nb_ip' => $p_xml->AGENT->NBIP)); } } } } if (isset($p_xml->AGENT->AGENTVERSION)) { $agent = $pta->InfosByKey($agentKey); $agent['fusioninventory_agent_version'] = $p_xml->AGENT->AGENTVERSION; $agent['last_agent_update'] = date("Y-m-d H:i:s"); $pta->update($agent); } $walkdata = ''; $count_discovery_devices = 0; foreach ($p_xml->DEVICE as $discovery) { $count_discovery_devices++; } $ptap->updateProcess($_SESSION['glpi_plugin_fusioninventory_processnumber'], array('discovery_nb_found' => $count_discovery_devices)); foreach ($p_xml->DEVICE as $discovery) { if ($discovery->MODELSNMP != "") { $query = "SELECT *\n FROM `glpi_plugin_fusioninventory_model_infos`\n WHERE `discovery_key`='" . $discovery->MODELSNMP . "'\n LIMIT 0,1;"; $result = $DB->query($query); $data = $DB->fetch_assoc($result); $FK_model = $data['ID']; } else { $FK_model = 0; } $discovery->MAC = strtolower($discovery->MAC); if (empty($FK_model)) { $FK_model = 0; } unset($p_criteria); $p_criteria['ip'] = $discovery->IP; if (!empty($discovery->NETBIOSNAME)) { $p_criteria['name'] = $discovery->NETBIOSNAME; } else { if (!empty($discovery->SNMPHOSTNAME)) { $p_criteria['name'] = $discovery->SNMPHOSTNAME; } } $p_criteria['serial'] = $discovery->SERIAL; $p_criteria['macaddr'] = $discovery->MAC; $discovery_criteria = PluginFusioninventoryDiscovery::criteria($p_criteria); if (!$discovery_criteria) { $ptap->updateProcess($_SESSION['glpi_plugin_fusioninventory_processnumber'], array('discovery_nb_import' => '1')); // Add in unknown device $ptud->getEmpty(); if (!empty($discovery->NETBIOSNAME)) { $ptud->fields['name'] = $discovery->NETBIOSNAME; } else { if (!empty($discovery->SNMPHOSTNAME)) { $ptud->fields['name'] = $discovery->SNMPHOSTNAME; } } $ptud->fields['dnsname'] = $discovery->DNSHOSTNAME; $ptud->fields['FK_entities'] = $discovery->ENTITY; $ptud->fields['serial'] = $discovery->SERIAL; $ptud->fields['contact'] = $discovery->USERSESSION; if (!empty($discovery->WORKGROUP)) { $ptud->fields['domain'] = Dropdown::importExternal("Domain", $discovery->WORKGROUP, $discovery->ENTITY); } $ptud->fields['comments'] = $discovery->DESCRIPTION; $ptud->fields['type'] = $discovery->TYPE; $ptud->fields['FK_model_infos'] = $FK_model; $ptud->fields['FK_snmp_connection'] = $discovery->AUTHSNMP; if ($discovery->AUTHSNMP != "") { $ptud->fields['snmp'] = 1; } $ptud->fields['location'] = 0; $ptud->fields['deleted'] = 0; if ($ptud->fields['domain'] == '') { $ptud->fields['domain'] = 0; } if ($ptud->fields['type'] == '') { $ptud->fields['type'] = 0; } if ($ptud->fields['snmp'] == '') { $ptud->fields['snmp'] = 0; } if ($ptud->fields['FK_model_infos'] == '') { $ptud->fields['FK_model_infos'] = 0; } if ($ptud->fields['FK_snmp_connection'] == '') { $ptud->fields['FK_snmp_connection'] = 0; } if ($ptud->fields['accepted'] == '') { $ptud->fields['accepted'] = 0; } $explodeprocess = explode("/", $_SESSION['glpi_plugin_fusioninventory_processnumber']); $ptud->fields['FK_agent'] = intval($explodeprocess[1]); $ptud->fields['hub'] = 0; $data = $ptud->fields; unset($data['ID']); $newID = $ptud->add($data); unset($data); // Add networking_port $port_add["on_device"] = $newID; $port_add["device_type"] = PLUGIN_FUSIONINVENTORY_MAC_UNKNOWN; $port_add["ifaddr"] = $discovery->IP; $port_add['ifmac'] = $discovery->MAC; $port_add['name'] = $discovery->NETPORTVENDOR; $port_ID = $np->add($port_add); unset($port_add); } else { # Update device //echo "discovery_criteria :".$discovery_criteria; $a_device = explode("||", $discovery_criteria); // $a_device[0] == id, $a_device[1] = type $ci = new commonitem(); $ci->getFromDB($a_device[1], $a_device[0]); $a_lockable = PluginFusioninventoryLock::getLockFields($a_device[1], $a_device[0]); $data = array(); $data['ID'] = $ci->getField('ID'); if ($a_device[1] == PLUGIN_FUSIONINVENTORY_MAC_UNKNOWN) { $data['FK_snmp_connection'] = 0; if ($ci->getField('name') && !in_array('name', $a_lockable)) { if (!empty($discovery->NETBIOSNAME)) { $data['name'] = $discovery->NETBIOSNAME; } else { if (!empty($discovery->SNMPHOSTNAME)) { $data['name'] = $discovery->SNMPHOSTNAME; } } } if ($ci->getField('dnsname') && !in_array('dnsname', $a_lockable)) { $data['dnsname'] = $discovery->DNSHOSTNAME; } if ($ci->getField('FK_entities') && !in_array('FK_entities', $a_lockable)) { $data['FK_entities'] = $discovery->ENTITY; } if ($ci->getField('serial') && !in_array('serial', $a_lockable)) { $data['serial'] = $discovery->SERIAL; } if ($ci->getField('contact') && !in_array('contact', $a_lockable)) { $data['contact'] = $discovery->USERSESSION; } if ($ci->getField('domain') && !in_array('domain', $a_lockable)) { $data['domain'] = 0; if (!empty($discovery->WORKGROUP)) { $data['domain'] = Dropdown::importExternal("Domain", $discovery->WORKGROUP, $discovery->ENTITY); } } if ($ci->getField('FK_snmp_connection') && !in_array('FK_snmp_connection', $a_lockable)) { $data['FK_snmp_connection'] = $discovery->AUTHSNMP; } if ($ci->getField('snmp') && !in_array('snmp', $a_lockable)) { $data['snmp'] = 0; if ($discovery->AUTHSNMP != "") { $data['snmp'] = 1; } } $data['type'] = $discovery->TYPE; $explodeprocess = explode("/", $_SESSION['glpi_plugin_fusioninventory_processnumber']); $data['FK_agent'] = intval($explodeprocess[1]); } if ($ci->getField('FK_model_infos') && !in_array('FK_model_infos', $a_lockable)) { $data['FK_model_infos'] = $FK_model; } if ($ci->getField('comments') && !in_array('comments', $a_lockable)) { $data['comments'] = $discovery->DESCRIPTION; } if ($a_device[1] == NETWORKING_TYPE) { if (!in_array('ifaddr', $a_lockable)) { $data["ifaddr"] = $discovery->IP; } if (!in_array('ifmac', $a_lockable)) { $data['ifmac'] = $discovery->MAC; } } else { // TODO: manage ports $np = new Netport(); $query = "SELECT ID FROM glpi_networking_ports\n WHERE (on_device = '" . $a_device[0] . "' AND device_type = '" . $a_device[1] . "')\n AND `ifaddr` NOT IN ('', '127.0.0.1')\n ORDER BY name, logical_number"; if ($result = $DB->query($query)) { if ($DB->numrows($result) == 1) { $data2 = $DB->fetch_assoc($result); $np->getFromDB($data2["ID"]); $port = array(); $port['ID'] = $data2["ID"]; $port["ifaddr"] = $discovery->IP; $port['ifmac'] = $discovery->MAC; $port['name'] = $discovery->NETPORTVENDOR; $np->update($port); } else { if ($DB->numrows($result) > 1) { $ptae = new PluginFusioninventoryAgentsErrors(); $error_input['ID'] = $a_device[0]; $error_input['TYPE'] = $a_device[1]; $error_input['MESSAGE'] = 'Unable to determine network port of device to update with values : ' . $discovery->IP . '(ip), ' . $discovery->MAC . '(mac), ' . $discovery->NETPORTVENDOR . '(name)'; $error_input['agent_type'] = 'NETDISCOVERY'; $ptae->addError($error_input); } } } } $ci->obj->update($data); $ptap->updateProcess($_SESSION['glpi_plugin_fusioninventory_processnumber'], array('discovery_nb_exists' => '1')); } } }
/** * Import CONNECTIONS *@param $p_connections CONNECTIONS code to import *@param $p_oPort Port object to connect * *@return errors string to be alimented if import ko / '' if ok **/ function importConnections($p_connections, $p_oPort) { global $LANG; $this->addLog('Function importConnections().'); $errors = ''; if (isset($p_connections->CDP)) { $cdp = $p_connections->CDP; if ($cdp == 1) { $p_oPort->setCDP(); } else { $errors .= $LANG['plugin_fusioninventory']["errors"][22] . ' CONNECTIONS : CDP=' . $cdp . "\n"; } } else { $cdp = 0; } $count = 0; foreach ($p_connections->children() as $name => $child) { switch ($child->getName()) { case 'CDP': // already managed break; case 'CONNECTION': $count++; $errors .= $this->importConnection($child, $p_oPort, $cdp); break; default: $errors .= $LANG['plugin_fusioninventory']["errors"][22] . ' CONNECTIONS : ' . $child->getName() . "\n"; } } if ($p_oPort->getValue('trunk') != 1) { if ($count > 1) { // MultipleMac $p_oPort->setNoTrunk(); $pfiud = new PluginFusioninventoryUnknownDevice(); $pfiud->hubNetwork($p_oPort); } else { if (!$p_oPort->getNoTrunk()) { $p_oPort->setValue('trunk', 0); } } // } else { // if ($p_oPort->getValue('trunk') == '-1') { // $p_oPort->setValue('trunk', '0'); // } } return $errors; }