%PDF- %PDF-
| Direktori : /proc/self/root/home/infra/fusioninventory/scripts/ |
| Current File : //proc/self/root/home/infra/fusioninventory/scripts/import_ip_ranges.php |
<?php
/**
* FusionInventory
*
* Copyright (C) 2010-2023 by the FusionInventory Development Team.
*
* http://www.fusioninventory.org/
* https://github.com/fusioninventory/fusioninventory-for-glpi
* http://forge.fusioninventory.org/
*
* ------------------------------------------------------------------------
*
* LICENSE
*
* This file is part of FusionInventory project.
*
* FusionInventory is free software: you can redistribute it and/or modify
* it under the terms of the GNU Affero General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* FusionInventory is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Affero General Public License for more details.
*
* You should have received a copy of the GNU Affero General Public License
* along with FusionInventory. If not, see <http://www.gnu.org/licenses/>.
*
* ------------------------------------------------------------------------
*
* This file is used to manage the agents
*
* ------------------------------------------------------------------------
*
* @package FusionInventory
* @author Frédéric Mohier
* @copyright Copyright (c) 2010-2023 FusionInventory team
* @license AGPL License 3.0 or (at your option) any later version
* http://www.gnu.org/licenses/agpl-3.0-standalone.html
* @link http://www.fusioninventory.org/
* @link https://github.com/fusioninventory/fusioninventory-for-glpi
*
*/
include ("../../../inc/includes.php");
$db_cfg_sec = new PluginFusioninventoryConfigSecurity();
$db_ip_range = new PluginFusioninventoryIPRange();
$db_ip_range_snmp = new PluginFusioninventoryIPRange_ConfigSecurity();
$db_agent = new PluginFusioninventoryAgent();
$db_entity = new Entity();
$file = './import_ip_ranges.csv';
// CVS default file format
$DELIMITER = "\t";
$ENCLOSURE = '"';
/**
* Script for importing SNMP credentials into the GLPI Fusion Inventory
* - search and open a CSV file
* - import found IP ranges and relations with SNMP credentials
*/
$row = 1;
if (($handle = fopen($file, "r")) !== false) {
while (($data = fgetcsv($handle, 0, $DELIMITER, $ENCLOSURE)) !== false) {
$data[0] = trim($data[0]);
if (strtolower($data[0]) == 'nom') {
// File header
echo "File header: " . serialize($data) . "\n";
continue;
}
// Check fields count
if (count($data) < 4) {
// Skip empty line...
echo "-> skipping empty line!\n";
continue;
}
// Clean name field
$name = trim($data[0]);
if ($name == '') {
// Skip empty name...
echo "-> skipping empty name!\n";
continue;
}
// echo "Data: " . serialize($data) . "\n";
echo "\n-----\nNew IP range: $name:\n";
// Clean and check Entity field
$entity = trim($data[1]);
if ($entity != '') {
$db_entities = $db_entity->find(['completename' => $entity], [], 1);
if (count($db_entities) > 0) {
$found_entity = current($db_entities);
$entity_id = $found_entity["id"];
echo "-> found " . count($db_entities) . " matching entity: " . $found_entity["completename"] . "\n";
} else {
echo "-> skipping not found entity: '$name / $entity'!\n";
continue;
}
}
// Clean and check range start
$range_start = trim($data[2]);
if ($range_start == '' OR (! check_valid_ip($range_start))) {
// Skip invalid data...
echo "-> skipping empty or invalid IP range start: '$name / $range_start'!\n";
continue;
}
// Clean and check range stop
$range_stop = trim($data[3]);
if ($range_stop == '' OR (! check_valid_ip($range_stop))) {
// Skip invalid data...
echo "-> skipping empty or invalid IP range stop: '$name / $range_stop'!\n";
continue;
}
echo "-> IP range from: $range_start to $range_stop\n";
// Clean and check SNMP credentials fields
$i = 4;
$ar_snmp_auth = [];
while ($i < count($data)) {
$snmp_auth = trim($data[$i]);
if ($snmp_auth != '') {
$snmp_auths = $db_cfg_sec->find("`name`='".$snmp_auth."'", '', 1);
if (count($snmp_auths) > 0) {
$snmp = current($snmp_auths);
echo "-> found " . count($snmp_auths) . " matching SNMP credentials: " . $snmp["name"] . "\n";
array_push($ar_snmp_auth, $snmp["id"]);
} else {
echo "-> skipping missing SNMP credentials: '$name / $snmp_auth'!\n";
continue;
}
} else {
// No SNMP credentials for this IP range
echo "-> empty SNMP credentials: '$name'!\n";
}
$i++;
}
/* If some more SNMP credentials are needed...
// Clean and check SNMP credentials field #2
$snmp_auth = trim($data[4]);
if ($snmp_auth != '') {
$snmp_auths = $db_cfg_sec->find(['name' => $snmp_auth], [], 1);
if (count($snmp_auths) > 0) {
$snmp = current($snmp_auths);
$snmp_auth = $snmp["id"];
echo "-> found " . count($snmp_auths) . " matching SNMP credentials: " . $snmp["name"] . "\n";
} else {
echo "-> skipping missing SNMP credentials: '$name / $snmp_auth'!\n";
continue;
}
}
if ($snmp_auth == '') {
$snmp_auth = 0;
}
$snmp_auth2 = $snmp_auth;
// Clean and check SNMP credentials field #3
$snmp_auth = trim($data[5]);
if ($snmp_auth != '') {
$snmp_auths = $db_cfg_sec->find(['name' => $snmp_auth], [], 1);
if (count($snmp_auths) > 0) {
$snmp = current($snmp_auths);
$snmp_auth = $snmp["id"];
echo "-> found " . count($snmp_auths) . " matching SNMP credentials: " . $snmp["name"] . "\n";
} else {
echo "-> skipping missing SNMP credentials: '$name / $snmp_auth'!\n";
continue;
}
}
if ($snmp_auth == '') {
$snmp_auth = 0;
}
$snmp_auth3 = $snmp_auth;
*/
/*
* Now we have all the fields to create a new IP range
*/
$input = [
'name' => $name,
'entities_id' => $entity_id,
'ip_start' => $range_start,
'ip_end' => $range_stop
];
$ipranges_id = -1;
$ipranges = $db_ip_range->find(['name' => $name], [], 1);
if (count($ipranges) > 0) {
// Update an existing IP range
$range = current($ipranges);
$ipranges_id = $range["id"];
$input['id'] = $ipranges_id;
echo "-> updating an existing IP addresses range: '$name'...";
$db_ip_range->update($input);
echo " updated.\n";
} else {
// Create a new IP range
echo "-> creating a new IP addresses range: '$name'...";
$ipranges_id = $db_ip_range->add($input);
if (! $ipranges_id) {
echo " error when adding an IP range!\n";
print_r($input);
} else {
echo " created.\n";
}
}
foreach ($ar_snmp_auth as $snmp_auth_id) {
// Relation between IP range and SNMP credentials (if it exists...)
$input = [
'plugin_fusioninventory_ipranges_id' => $ipranges_id,
'plugin_fusioninventory_configsecurities_id' => $snmp_auth_id
];
if ($ipranges_id != -1) {
$ipranges_snmp = $db_ip_range_snmp->find(['plugin_fusioninventory_ipranges_id' => $ipranges_id]);
if (count($ipranges_snmp) > 0) {
if ($snmp_auth_id == -1) {
echo "-> deleting an existing IP addresses range / SNMP credentials relation...";
$range_snmp = current($ipranges_snmp);
$db_ip_range_snmp->getFromDB($range_snmp['id']);
$db_ip_range_snmp->deleteFromDB();
echo " deleted.\n";
continue;
} else {
// Update an existing IP range / SNMP relation
$range_snmp = current($ipranges_snmp);
$input['id'] = $range_snmp["id"];
echo "-> updating an existing IP addresses range / SNMP credentials relation...";
$db_ip_range_snmp->update($input);
echo " updated.\n";
}
} else {
if ($snmp_auth_id != -1) {
// Create a new IP range / SNMP relation
echo "-> creating a new IP addresses range / SNMP credentials relation...";
$ipranges_snmp_id = $db_ip_range_snmp->add($input);
if (! $ipranges_snmp_id) {
echo " error when adding an IP range / SNMP relation!\n";
print_r($input);
} else {
echo " created.\n";
}
}
}
}
}
}
fclose($handle);
}
function check_valid_ip($ip_address) {
$valid_address = true;
$ip_fields = explode(".", $ip_address);
if (count($ip_fields) < 4) {
return false;
}
foreach ($ip_fields as $ip_field) {
if (!is_numeric($ip_field) OR $ip_field > 255) {
$valid_address = false;
break;
}
}
return $valid_address;
}