$subnet = getSubnetDetailsById($request['subnetId']); $subnet['subnet'] = Transform2long($subnet['subnet']); $subnet = $subnet['subnet'] . "/" . $subnet['mask']; /* verify IP address and subnet */ $validIP = VerifyIpAddress($request['ip_addr'], $subnet); if (!empty($validIP)) { die('<div class="alert alert alert-danger">' . $validIP . '</div>'); } /* verify that it is not yet used */ if (checkDuplicate($request['ip_addr'], $subnet)) { die('<div class="alert alert alert-danger">' . _('IP address') . ' ' . $request['ip_addr'] . ' ' . _('already in use') . '!<br>* ' . _('First available IP address is') . ' <b>' . Transform2long(getFirstAvailableIPAddress($request['subnet'])) . '</a>!</div>'); } /* verify that it is not yet used */ if (checkDuplicate($request['ip_addr'], $request['subnetId'])) { die('<div class="alert alert alert-danger">' . _('IP address') . ' ' . $request['ip_addr'] . ' ' . _('already in use') . '!<br>* ' . _('First available IP address is') . ' <b>' . Transform2long(getFirstAvailableIPAddress($request['subnetId'])) . '</a>!</div>'); } /* transform IP address */ $request['ip_addr'] = Transform2decimal($request['ip_addr']); if (!acceptIPrequest($request)) { die('<div class="alert alert alert-danger">' . _('Cannot confirm IP address') . '!</div>'); updateLogTable('Cannot confirm IP address!', 'Cannot accept IP request for request id ' . Transform2long($request['requestId']) . '!', 2); } else { print '<div class="alert alert-success">' . _('IP address request confirmed and added to database') . '!</div>'; updateLogTable('IP address request confirmed and added to database!', 'IP request id ' . $request['requestId'] . ' (' . Transform2long($request['ip_addr']) . ') has been accepted!', 0); } } /* send email */ $subnet = getSubnetDetailsById($request['subnetId']); $subnet['subnet'] = Transform2long($subnet['subnet']); $subnet = $subnet['subnet'] . "/" . $subnet['mask']; include_once 'manageRequestResultMail.php';
/** * Reformat incomplete IPv6 address to decimal for search! */ function reformatIPv6forSearch($ip) { //split network and subnet part $ip = explode("/", $ip); //if subnet is not provided we are looking for host! if (sizeof($ip) < 2) { $return['low'] = Transform2decimal($ip[0]); $return['high'] = Transform2decimal($ip[0]); } //if network part ends with :: we must search the complete provided subnet! $lastChars = substr($ip[0], -2); if ($lastChars == "::") { $return['low'] = Transform2decimal($ip[0]); //set highest IP address $subnet = substr($ip[0], 0, -2); $subnet = Transform2decimal($subnet); //calculate all possible hosts in subnet mask $maskHosts = gmp_strval(gmp_sub(gmp_pow(2, 128 - $ip[1]), 1)); $return['high'] = gmp_strval(gmp_add($return['low'], $maskHosts)); } return $return; }
/** * CSV import IP address * * provided input is CSV line! */ function importCSVline($line, $subnetId) { global $database; /* get subnet details by Id */ $subnetDetails = getSubnetDetailsById($subnetId); $subnet = Transform2long($subnetDetails['subnet']) . "/" . $subnetDetails['mask']; /* verify! */ $err = VerifyIpAddress($line[0], $subnet); if ($err) { return _('Wrong IP address') . ' - ' . $err . ' - ' . $line[0]; } /* check for duplicates */ if (checkDuplicate($line[0], $subnetId)) { return _('IP address already exists') . ' - ' . $line[0]; } /* get custom fields */ $myFields = getCustomFields('ipaddresses'); if (sizeof($myFields) > 0) { $import['fieldName'] = ""; $import['fieldValue'] = ""; $m = 9; foreach ($myFields as $field) { //escape chars $line[$m] = mysqli_real_escape_string($database, $line[$m]); $import['fieldName'] .= ",`{$field['name']}`"; $import['fieldValue'] .= ",'{$line[$m]}'"; $m++; } } /* escape chars */ foreach ($line as $k => $l) { $line[$k] = mysqli_real_escape_string($database, $l); } /* all ok, set query */ $query = "insert into ipaddresses "; $query .= "(`subnetId`, `ip_addr`, `state`, `description`, `dns_name`, `mac`, `owner`, `switch`, `port`, `note` {$import['fieldName']} ) "; $query .= "values "; $query .= "('{$subnetId}','" . Transform2decimal($line[0]) . "', '{$line['1']}','{$line['2']}','{$line['3']}','{$line['4']}','{$line['5']}','{$line['6']}','{$line['7']}','{$line['8']}' {$import['fieldValue']});"; /* print "<pre>"; print_r($line); die('alert alert-danger'); */ /* set log details */ $log = prepareLogFromArray($line); /* execute */ try { $database->executeQuery($query); } catch (Exception $e) { $error = $e->getMessage(); } if (!isset($e)) { updateLogTable('CSV import of IP address ' . $line[1] . ' succeeded', $log, 0); return true; } else { updateLogTable('CSV import of IP address ' . $line[1] . ' failed', $log, 2); return $error; } }
print "' href='tools/search/{$dnsResolved['name']}' "; if (strlen($dnsResolved['name']) != 0) { print "rel='tooltip' data-container='body' title='" . _('Search same hostnames in db') . "'"; } print ">\t<i class='fa fa-gray fa-search'></i></a>"; print "<a class='mail_ipaddress btn btn-xs btn-default ' href='#' data-id='" . $ipaddress[$n]['id'] . "' rel='tooltip' data-container='body' title='" . _('Send mail notification') . "'>\t\t\t\t<i class='fa fa-gray fa-envelope-o'></i></a>"; print "<a class='delete_ipaddress btn btn-xs btn-default disabled' rel='tooltip' data-container='body' title='" . _('Delete IP address (disabled)') . "'>\t\t\t\t\t\t\t\t\t\t\t\t\t\t<i class='fa fa-gray fa-times'></i></a>"; } } print "\t</div>"; print "</td>"; print '</tr>' . "\n"; /* if last one return ip address and broadcast IP ****************************************************/ if ($n == $m) { $unused = FindUnusedIpAddresses($ipaddresses[$n]['ip_addr'], Transform2decimal($SubnetParsed['broadcast']), $type, 1, "broadcast", $SubnetDetails['mask']); if ($unused) { print '<tr class="th"><td></td><td colspan="' . $colspan['unused'] . '" class="unused">' . $unused['ip'] . ' (' . $unused['hosts'] . ')</td><td colspan=2></td></tr>' . "\n"; } } } /* next IP address for free check */ $n++; } $c++; } } ?> </table> <!-- end IP address table -->
/** * Write new changelog */ function writeChangelog($ctype, $action, $result, $old, $new) { /* set query, open db connection and fetch results */ global $database; # get settings $settings = getAllSettings(); if ($settings['enableChangelog'] == 1) { # get user details $cuser = getActiveUserDetails(); # unset unneeded values and format if ($ctype == "ip_addr") { unset($new['action'], $new['subnet'], $new['type']); } elseif ($ctype == "subnet") { $new['id'] = $new['subnetId']; unset($new['action'], $new['subnetId'], $new['location'], $new['vrfIdOld'], $new['permissions']); # if section does not change if ($new['sectionId'] == $new['sectionIdNew']) { unset($new['sectionIdNew']); unset($new['sectionId']); unset($old['sectionId']); } else { $old['sectionIdNew'] = $old['sectionId']; } //transform subnet if (strlen($new['subnet']) > 0) { $new['subnet'] = Transform2decimal(substr($new['subnet'], 0, strpos($new['subnet'], "/"))); } } elseif ($ctype == "section") { unset($new['action']); } # calculate diff if ($action == "edit") { //old - checkboxes foreach ($old as $k => $v) { if (!isset($new[$k]) && $v == 1) { $new[$k] = 0; } } foreach ($new as $k => $v) { //change if ($old[$k] != $v && $old[$k] != str_replace("\\'", "'", $v)) { //empty if (strlen(@$old[$k]) == 0) { $old[$k] = "NULL"; } if (strlen(@$v) == 0) { $v = "NULL"; } //state if ($k == 'state') { $old[$k] = reformatIPStateText($old[$k]); $v = reformatIPStateText($v); } elseif ($k == 'sectionIdNew') { //get old and new device if ($old[$k] != "NULL") { $dev = getSectionDetailsById($old[$k]); $old[$k] = $dev['name']; } if ($v != "NULL") { $dev = getSectionDetailsById($v); $v = $dev['name']; } } elseif ($k == "masterSubnetId") { if ($old[$k] == 0) { $old[$k] = "Root"; } else { $dev = getSubnetDetailsById($old[$k]); $old[$k] = transform2long($dev['subnet']) . "/{$dev['mask']} [{$dev['description']}]"; } if ($v == 0) { $v = "Root"; } else { $dev = getSubnetDetailsById($v); $v = transform2long($dev['subnet']) . "/{$dev['mask']} [{$dev['description']}]"; } } elseif ($k == 'switch') { if ($old[$k] == 0) { $old[$k] = "None"; } elseif ($old[$k] != "NULL") { $dev = getDeviceDetailsById($old[$k]); $old[$k] = $dev['hostname']; } if ($v == 0) { $v = "None"; } if ($v != "NULL") { $dev = getDeviceDetailsById($v); $v = $dev['hostname']; } } elseif ($k == 'vlanId') { //get old and new device if ($old[$k] == 0) { $old[$k] = "None"; } elseif ($old[$k] != "NULL") { $dev = getVLANById($old[$k]); $old[$k] = $dev['name'] . " [{$dev['number']}]"; } if ($v == 0) { $v = "None"; } elseif ($v != "NULL") { $dev = getVLANById($v); $v = $dev['name'] . " [{$dev['number']}]"; } } elseif ($k == 'vrfId') { //get old and new device if ($old[$k] == 0) { $old[$k] = "None"; } elseif ($old[$k] != "NULL") { $dev = getVRFDetailsById($old[$k]); $old[$k] = $dev['name'] . " [{$dev['description']}]"; } if ($v == 0) { $v = "None"; } elseif ($v != "NULL") { $dev = getVRFDetailsById($v); $v = $dev['name'] . " [{$dev['description']}]"; } } elseif ($k == 'masterSection') { if ($old[$k] == 0) { $old[$k] = "Root"; } else { $dev = getSectionDetailsById($old[$k]); $old[$k] = "{$dev['name']}"; } if ($v == 0) { $v = "Root"; } else { $dev = getSectionDetailsById($v); $v = "{$dev['name']}"; } } elseif ($k == "permissions") { # get old and compare $new['permissions'] = str_replace("\\", "", $new['permissions']); //Remove / # Get all groups: $groups = getAllGroups(); $groups = rekeyGroups($groups); # reformat: $newp = json_decode($new['permissions']); $v = ''; foreach ($newp as $ke => $p) { $v .= "<br>" . $groups[$ke]['g_name'] . " : " . parsePermissions($p); } $old[$k] = ""; } $log["[{$k}]"] = "{$old[$k]} => {$v}"; } } } elseif ($action == "add") { $log['[create]'] = "{$ctype} created"; } elseif ($action == "delete") { $log['[delete]'] = "{$ctype} deleted"; $new['id'] = $old['id']; } elseif ($action == "truncate") { $log['[truncate]'] = "Subnet truncated"; } elseif ($action == "resize") { $log['[resize]'] = "Subnet Resized"; $log['[New mask]'] = "/" . $new['mask']; } elseif ($action == "perm_change") { # get old and compare $new['permissions_change'] = str_replace("\\", "", $new['permissions_change']); //Remove / # Get all groups: $groups = getAllGroups(); $groups = rekeyGroups($groups); # reformat if ($new['permissions_change'] != "null") { $newp = json_decode($new['permissions_change']); foreach ($newp as $k => $p) { $log['[Permissions]'] .= "<br>" . $groups[$k]['g_name'] . " : " . parsePermissions($p); } } } //if change happened write it! if (isset($log)) { # format change foreach (@$log as $k => $l) { $changelog .= "{$k} {$l}\n"; } $changelog = $database->real_escape_string(trim($changelog)); # set insert query $query = "insert into `changelog` (`ctype`,`coid`,`cuser`,`caction`,`cresult`,`cdate`,`cdiff`) values ('{$ctype}', '{$new['id']}', '{$cuser['id']}', '{$action}', '{$result}', NOW(), '{$changelog}');"; # execute try { $database->executeQuery($query); } catch (Exception $e) { $error = $e->getMessage(); return true; } # mail it! # all good return true; } } else { return true; } }
/** * CSV import IP address * * provided input is CSV line! */ function importCSVline($line, $subnetId) { /* array */ $line = explode(",", $line); global $db; # get variables from config file $database = new database($db['host'], $db['user'], $db['pass'], $db['name']); /* get subnet details by Id */ $subnetDetails = getSubnetDetailsById($subnetId); $subnet = Transform2long($subnetDetails['subnet']) . "/" . $subnetDetails['mask']; /* verify! */ if (VerifyIpAddress($line[0], $subnet)) { return _('Wrong IP address') . ' - ' . $line[0]; } /* check for duplicates */ if (checkDuplicate($line[0], $subnetId)) { return _('IP address already exists') . ' - ' . $line[0]; } /* reformat state */ switch ($line[5]) { case "Active": $line[5] = "1"; break; case "active": $line[5] = "1"; break; case "Reserved": $line[5] = "2"; break; case "reserved": $line[5] = "2"; break; case "Offline": $line[5] = "0"; break; case "offline": $line[5] = "0"; break; } /* reformat switch! */ $switch = getSwitchDetailsByHostname($line[7]); /* get custom fields */ $myFields = getCustomIPaddrFields(); if (sizeof($myFields) > 0) { $import['fieldName'] = ""; $import['fieldValue'] = ""; $m = 9; foreach ($myFields as $field) { $import['fieldName'] .= ",`{$field['name']}`"; $import['fieldValue'] .= ",'{$line[$m]}'"; $m++; } } /* all ok, set query */ $query = "insert into ipaddresses "; $query .= "(`subnetId`, `ip_addr`, `state`, `description`, `dns_name`, `mac`, `owner`, `switch`, `port`, `note` {$import['fieldName']} ) "; $query .= "values "; $query .= "('{$subnetId}','" . Transform2decimal($line[0]) . "', '{$line['1']}','{$line['2']}','{$line['3']}','{$line['4']}','{$line['5']}','{$line['6']}','{$switch['id']}','{$line['8']}' {$import['fieldValue']});"; /* set log details */ $log = prepareLogFromArray($line); /* execute */ try { $database->executeQuery($query); } catch (Exception $e) { $error = $e->getMessage(); } if (!isset($e)) { updateLogTable('CSV import of IP address ' . $line[1] . ' succeeded', $log, 0); return true; } else { updateLogTable('CSV import of IP address ' . $line[1] . ' failed', $log, 2); return $error; } }
/** * set insert / update / delete query for adding IP address * based on provided array */ function SetInsertQuery($ip) { /* First we need to get custom fields! */ $myFields = getCustomIPaddrFields(); $myFieldsInsert['query'] = ''; $myFieldsInsert['values'] = ''; // <eNovance> // Finds the GLPI id of a new ip address. if ($ip['action'] == "add" and $ip['glpiId'] == '') { global $db; /* Find the glpiId of the newly added ip addresse */ $database = new database($db['glpi_host'], $db['glpi_user'], $db['glpi_pass'], $db['glpi_name']); $query = "SELECT DISTINCT glpi_networkports.items_id "; $query .= "FROM glpi_networkports "; $query .= "INNER JOIN glpi_computers ON glpi_networkports.ip = '" . $ip['ip_addr'] . "' "; $query .= "AND glpi_computers.is_deleted = 0 "; $query .= "AND glpi_networkports.items_id = glpi_computers.id;"; $glpiId = $database->getRow($query); if (count($glpiId > 0)) { $ip['glpiId'] = $glpiId[0]; } } // </eNovance> if (sizeof($myFields) > 0) { /* set inserts for custom */ foreach ($myFields as $myField) { $myFieldsInsert['query'] .= ', `' . $myField['name'] . '`'; $myFieldsInsert['values'] .= ", '" . $ip[$myField['name']] . "'"; } } /* insert */ if ($ip['action'] == "add") { $query = "insert into `ipaddresses` "; $query .= "(`subnetId`,`description`,`ip_addr`, `dns_name`,`mac`, `owner`, `state`, `switch`, `port`, `note`, `excludePing` " . $myFieldsInsert['query'] . ") "; $query .= "values "; $query .= "('" . $ip['subnetId'] . "', '" . $ip['description'] . "', '" . Transform2decimal($ip['ip_addr']) . "', " . "\n"; $query .= " '" . $ip['dns_name'] . "', '" . $ip['mac'] . "', '" . $ip['owner'] . "', '" . $ip['state'] . "', " . "\n"; $query .= " '" . $ip['switch'] . "', '" . $ip['port'] . "', '" . $ip['note'] . "', '" . @$ip['excludePing'] . "' " . $myFieldsInsert['values'] . ");"; } else { if ($ip['action'] == "edit" && $ip['type'] == "series") { $query = "update `ipaddresses` "; $query .= "set `ip_addr` = '" . Transform2decimal($ip['ip_addr']) . "', "; $query .= "`description` = '" . $ip['description'] . "', "; $query .= "`dns_name` = '" . $ip['dns_name'] . "' ,"; $query .= "`mac` = '" . $ip['mac'] . "' ,"; $query .= "`owner` = '" . $ip['owner'] . "' ,"; $query .= "`state` = '" . $ip['state'] . "',"; $query .= "`switch` = '" . $ip['switch'] . "',"; $query .= "`port` = '" . $ip['port'] . "',"; $query .= "`excludePing` = '" . @$ip['excludePing'] . "',"; # custom! foreach ($myFields as $myField) { $query .= "`" . $myField['name'] . "` = '" . $ip[$myField['name']] . "',"; } $query .= "`note` = '" . $ip['note'] . "' "; $query .= "where `subnetId` = '" . $ip['subnetId'] . "' and `ip_addr` = '" . Transform2decimal($ip['ip_addr']) . "';"; } else { if ($ip['action'] == "edit") { $query = "update ipaddresses "; $query .= "set `ip_addr` = '" . Transform2decimal($ip['ip_addr']) . "', `description` = '" . $ip['description'] . "', `dns_name` = '" . $ip['dns_name'] . "' , `mac` = '" . $ip['mac'] . "', " . "\n"; #custom! foreach ($myFields as $myField) { $query .= "`" . $myField['name'] . "` = '" . $ip[$myField['name']] . "',"; } $query .= "`owner` = '" . $ip['owner'] . "' , `state` = '" . $ip['state'] . "', `switch` = '" . $ip['switch'] . "', " . "\n"; $query .= "`port` = '" . $ip['port'] . "', `note` = '" . $ip['note'] . "', `excludePing` = '" . @$ip['excludePing'] . "' "; $query .= "where `id` = '" . $ip['id'] . "';"; } else { if ($ip['action'] == "delete" && $ip['type'] == "series") { $query = "delete from ipaddresses where `subnetId` = '" . $ip['subnetId'] . "' and `ip_addr` = '" . Transform2decimal($ip['ip_addr']) . "';"; } else { if ($ip['action'] == "delete") { $query = "delete from ipaddresses where `id` = '" . $ip['id'] . "';"; } else { if ($ip['action'] == "move") { $query = "update `ipaddresses` set `subnetId` = '{$ip['newSubnet']}' where `id` = '{$ip['id']}';"; } } } } } } /* return query */ return $query; }