2009-09-07 11:07:59 +00:00
< ? php
2015-06-14 08:00:21 +00:00
/*
* LibreNMS - Common Functions
*
* Original Observium version by : Adam Armstrong , Tom Laermans
* Copyright ( c ) 2009 - 2012 Adam Armstrong .
*
* Additions for LibreNMS by : Neil Lathwood , Paul Gear , Tim DuFrane
* Copyright ( c ) 2014 - 2015 Neil Lathwood < http :// www . lathwood . co . uk >
* Copyright ( c ) 2014 - 2015 Gear Consulting Pty Ltd < http :// libertysys . com . au />
*
* This program is free software : you can redistribute it and / or modify it
* under the terms of the GNU General Public License as published by the
* Free Software Foundation , either version 3 of the License , or ( at your
* option ) any later version . Please see LICENSE . txt at the top level of
* the source code distribution for details .
*/
2009-05-07 13:47:51 +00:00
2016-08-28 17:32:58 +00:00
function generate_priority_icon ( $priority )
{
2016-08-05 11:34:23 +00:00
$map = array (
" emerg " => " server_delete " ,
" alert " => " cancel " ,
" crit " => " application_lightning " ,
" err " => " application_delete " ,
" warning " => " application_error " ,
" notice " => " application_edit " ,
" info " => " application " ,
" debug " => " bug " ,
2016-08-30 21:16:17 +00:00
" " => " application " ,
2016-08-05 11:34:23 +00:00
);
2016-09-06 12:39:53 +00:00
$image = isset ( $map [ $priority ]) ? $map [ $priority ] : 'application' ;
return '<img src="images/16/' . $image . '.png" title="' . $priority . '">' ;
}
function generate_priority_status ( $priority )
{
$map = array (
" emerg " => 2 ,
" alert " => 2 ,
" crit " => 2 ,
" err " => 2 ,
" warning " => 1 ,
" notice " => 0 ,
" info " => 0 ,
" debug " => 3 ,
" " => 0 ,
);
return isset ( $map [ $priority ]) ? $map [ $priority ] : 0 ;
2016-08-05 11:34:23 +00:00
}
2016-08-28 17:32:58 +00:00
function external_exec ( $command )
{
2016-01-17 14:39:17 +00:00
global $debug , $vdebug ;
2016-09-22 16:36:33 +00:00
if ( $debug && ! $vdebug ) {
$debug_command = preg_replace ( '/-c [\S]+/' , '-c COMMUNITY' , $command );
$debug_command = preg_replace ( '/(udp|udp6|tcp|tcp6):([^:]+):([\d]+)/' , '\1:HOSTNAME:\3' , $debug_command );
c_echo ( 'SNMP[%c' . $debug_command . " %n] \n " );
} elseif ( $vdebug ) {
c_echo ( 'SNMP[%c' . $command . " %n] \n " );
2016-01-17 14:39:17 +00:00
}
2015-07-13 18:10:26 +00:00
$output = shell_exec ( $command );
2016-01-17 14:39:17 +00:00
2016-09-22 16:36:33 +00:00
if ( $debug && ! $vdebug ) {
$ip_regex = '/(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)/' ;
$debug_output = preg_replace ( $ip_regex , '*' , $output );
d_echo ( $debug_output . PHP_EOL );
} elseif ( $vdebug ) {
d_echo ( $output . PHP_EOL );
2016-01-17 14:39:17 +00:00
}
2011-09-22 18:28:00 +00:00
2015-07-13 18:10:26 +00:00
return $output ;
2011-09-22 18:28:00 +00:00
}
2016-08-28 17:32:58 +00:00
function shorthost ( $hostname , $len = 12 )
{
2015-07-13 18:10:26 +00:00
// IP addresses should not be shortened
2016-08-28 17:32:58 +00:00
if ( filter_var ( $hostname , FILTER_VALIDATE_IP )) {
2015-07-13 18:10:26 +00:00
return $hostname ;
2016-08-28 17:32:58 +00:00
}
2015-07-13 18:10:26 +00:00
$parts = explode ( " . " , $hostname );
$shorthost = $parts [ 0 ];
$i = 1 ;
while ( $i < count ( $parts ) && strlen ( $shorthost . '.' . $parts [ $i ]) < $len ) {
$shorthost = $shorthost . '.' . $parts [ $i ];
$i ++ ;
}
return ( $shorthost );
}
2016-08-28 17:32:58 +00:00
function isCli ()
{
2015-07-13 18:10:26 +00:00
if ( php_sapi_name () == 'cli' && empty ( $_SERVER [ 'REMOTE_ADDR' ])) {
return true ;
2016-08-28 17:32:58 +00:00
} else {
2015-07-13 18:10:26 +00:00
return false ;
}
2011-09-08 12:24:18 +00:00
}
2016-08-28 17:32:58 +00:00
function print_error ( $text )
{
2015-07-13 18:10:26 +00:00
if ( isCli ()) {
2016-08-17 00:52:36 +00:00
c_echo ( " %r " . $text . " %n \n " );
2016-08-28 17:32:58 +00:00
} else {
2016-09-21 19:00:17 +00:00
echo ( '<div class="alert alert-danger"><i class="fa fa-fw fa-exclamation-circle" aria-hidden="true"></i> ' . $text . '</div>' );
2015-07-13 18:10:26 +00:00
}
2011-09-08 12:24:18 +00:00
}
2016-08-28 17:32:58 +00:00
function print_message ( $text )
{
2015-07-13 18:10:26 +00:00
if ( isCli ()) {
2016-08-17 00:52:36 +00:00
c_echo ( " %g " . $text . " %n \n " );
2016-08-28 17:32:58 +00:00
} else {
2016-09-22 12:09:31 +00:00
echo ( '<div class="alert alert-success"><i class="fa fa-fw fa-check-circle" aria-hidden="true"></i> ' . $text . '</div>' );
2015-07-13 18:10:26 +00:00
}
2011-09-08 12:24:18 +00:00
}
2016-08-28 17:32:58 +00:00
function delete_port ( $int_id )
{
2015-07-13 18:10:26 +00:00
$interface = dbFetchRow ( " SELECT * FROM `ports` AS P, `devices` AS D WHERE P.port_id = ? AND D.device_id = P.device_id " , array ( $int_id ));
2011-05-13 15:05:29 +00:00
2016-10-15 23:42:56 +00:00
$interface_tables = array ( 'ipv4_addresses' , 'ipv4_mac' , 'ipv6_addresses' , 'juniAtmVp' , 'mac_accounting' , 'ospf_nbrs' , 'ospf_ports' , 'ports' , 'ports_adsl' , 'ports_perms' , 'ports_statistics' , 'ports_stp' , 'ports_vlans' , 'pseudowires' );
2011-05-13 15:05:29 +00:00
2015-07-13 18:10:26 +00:00
foreach ( $interface_tables as $table ) {
dbDelete ( $table , " `port_id` = ? " , array ( $int_id ));
}
2011-05-13 15:05:29 +00:00
2016-10-15 23:42:56 +00:00
dbDelete ( 'links' , " `local_port_id` = ? OR `remote_port_id` = ? " , array ( $int_id , $int_id ));
dbDelete ( 'ports_stack' , " `port_id_low` = ? OR `port_id_high` = ? " , array ( $int_id , $int_id ));
2011-05-13 15:05:29 +00:00
2016-08-28 17:32:58 +00:00
unlink ( get_port_rrdfile_path ( $interface [ 'hostname' ], $interface [ 'port_id' ]));
2011-05-13 15:05:29 +00:00
}
2016-08-28 17:32:58 +00:00
function sgn ( $int )
{
2015-07-13 18:10:26 +00:00
if ( $int < 0 ) {
return - 1 ;
2016-08-28 17:32:58 +00:00
} elseif ( $int == 0 ) {
2015-07-13 18:10:26 +00:00
return 0 ;
2016-08-28 17:32:58 +00:00
} else {
2015-07-13 18:10:26 +00:00
return 1 ;
}
2011-04-28 13:06:39 +00:00
}
2016-07-09 03:58:36 +00:00
function get_sensor_rrd ( $device , $sensor )
{
return rrd_name ( $device [ 'hostname' ], get_sensor_rrd_name ( $device , $sensor ));
}
2016-08-28 17:32:58 +00:00
function get_sensor_rrd_name ( $device , $sensor )
{
2015-07-13 18:10:26 +00:00
global $config ;
2011-04-26 15:07:52 +00:00
2015-07-13 18:10:26 +00:00
# For IPMI, sensors tend to change order, and there is no index, so we prefer to use the description as key here.
if ( $config [ 'os' ][ $device [ 'os' ]][ 'sensor_descr' ] || $sensor [ 'poller_type' ] == " ipmi " ) {
2016-07-09 03:58:36 +00:00
return array ( 'sensor' , $sensor [ 'sensor_class' ], $sensor [ 'sensor_type' ], $sensor [ 'sensor_descr' ]);
2016-07-07 06:33:43 +00:00
} else {
2016-07-09 03:58:36 +00:00
return array ( 'sensor' , $sensor [ 'sensor_class' ], $sensor [ 'sensor_type' ], $sensor [ 'sensor_index' ]);
2015-07-13 18:10:26 +00:00
}
2016-07-07 06:33:43 +00:00
}
2016-08-28 17:32:58 +00:00
function getPortRrdName ( $port_id , $suffix = '' )
2016-07-07 06:33:43 +00:00
{
2016-08-28 17:32:58 +00:00
if ( ! empty ( $suffix )) {
2016-07-07 06:33:43 +00:00
$suffix = '-' . $suffix ;
2015-07-13 18:10:26 +00:00
}
2011-04-26 15:07:52 +00:00
2016-07-07 06:33:43 +00:00
return " port-id $port_id $suffix " ;
2011-04-26 15:07:52 +00:00
}
2016-08-28 17:32:58 +00:00
function get_port_rrdfile_path ( $hostname , $port_id , $suffix = '' )
{
2016-07-07 06:33:43 +00:00
return rrd_name ( $hostname , getPortRrdName ( $port_id , $suffix ));
2016-01-26 12:49:30 +00:00
}
2016-08-28 17:32:58 +00:00
function get_port_by_index_cache ( $device_id , $ifIndex )
{
2015-07-13 18:10:26 +00:00
global $port_index_cache ;
2011-05-19 10:02:55 +00:00
2015-07-13 18:10:26 +00:00
if ( isset ( $port_index_cache [ $device_id ][ $ifIndex ]) && is_array ( $port_index_cache [ $device_id ][ $ifIndex ])) {
$port = $port_index_cache [ $device_id ][ $ifIndex ];
2016-08-28 17:32:58 +00:00
} else {
2015-07-13 18:10:26 +00:00
$port = get_port_by_ifIndex ( $device_id , $ifIndex );
$port_index_cache [ $device_id ][ $ifIndex ] = $port ;
}
2011-05-19 10:02:55 +00:00
2015-07-13 18:10:26 +00:00
return $port ;
2011-05-19 10:02:55 +00:00
}
2016-08-28 17:32:58 +00:00
function get_port_by_ifIndex ( $device_id , $ifIndex )
{
2015-07-13 18:10:26 +00:00
return dbFetchRow ( " SELECT * FROM `ports` WHERE `device_id` = ? AND `ifIndex` = ? " , array ( $device_id , $ifIndex ));
2011-05-19 10:02:55 +00:00
}
2016-08-28 17:32:58 +00:00
function get_all_devices ( $device , $type = " " )
{
2015-07-13 18:10:26 +00:00
global $cache ;
$devices = array ();
// FIXME needs access control checks!
// FIXME respect $type (server, network, etc) -- needs an array fill in topnav.
if ( isset ( $cache [ 'devices' ][ 'hostname' ])) {
$devices = array_keys ( $cache [ 'devices' ][ 'hostname' ]);
2016-08-28 17:32:58 +00:00
} else {
2015-07-13 18:10:26 +00:00
foreach ( dbFetchRows ( " SELECT `hostname` FROM `devices` " ) as $data ) {
$devices [] = $data [ 'hostname' ];
}
}
return $devices ;
}
2011-12-07 13:52:46 +00:00
2016-08-28 17:32:58 +00:00
function table_from_entity_type ( $type )
{
2015-07-13 18:10:26 +00:00
// Fuck you, english pluralisation.
if ( $type == " storage " ) {
return $type ;
2016-08-28 17:32:58 +00:00
} else {
2015-07-13 18:10:26 +00:00
return $type . " s " ;
}
2012-05-16 13:25:50 +00:00
}
2011-05-19 10:02:55 +00:00
2016-08-28 17:32:58 +00:00
function get_entity_by_id_cache ( $type , $id )
{
2015-07-13 18:10:26 +00:00
global $entity_cache ;
2012-05-16 13:25:50 +00:00
2015-07-13 18:10:26 +00:00
$table = table_from_entity_type ( $type );
2012-05-16 13:25:50 +00:00
2015-07-13 18:10:26 +00:00
if ( is_array ( $entity_cache [ $type ][ $id ])) {
$entity = $entity_cache [ $type ][ $id ];
2016-08-28 17:32:58 +00:00
} else {
2015-07-13 18:10:26 +00:00
$entity = dbFetchRow ( " SELECT * FROM ` " . $table . " ` WHERE ` " . $type . " _id` = ? " , array ( $id ));
$entity_cache [ $type ][ $id ] = $entity ;
}
return $entity ;
}
2012-05-16 13:25:50 +00:00
2016-08-28 17:32:58 +00:00
function get_port_by_id ( $port_id )
{
2015-07-13 18:10:26 +00:00
if ( is_numeric ( $port_id )) {
$port = dbFetchRow ( " SELECT * FROM `ports` WHERE `port_id` = ? " , array ( $port_id ));
if ( is_array ( $port )) {
return $port ;
2016-08-28 17:32:58 +00:00
} else {
return false ;
2015-07-13 18:10:26 +00:00
}
}
}
2011-05-19 10:02:55 +00:00
2016-08-28 17:32:58 +00:00
function get_application_by_id ( $application_id )
{
2015-07-13 18:10:26 +00:00
if ( is_numeric ( $application_id )) {
$application = dbFetchRow ( " SELECT * FROM `applications` WHERE `app_id` = ? " , array ( $application_id ));
if ( is_array ( $application )) {
return $application ;
2016-08-28 17:32:58 +00:00
} else {
return false ;
2015-07-13 18:10:26 +00:00
}
2015-02-22 19:28:09 +00:00
}
2010-08-01 14:17:06 +00:00
}
2010-07-28 19:43:02 +00:00
2016-08-28 17:32:58 +00:00
function get_sensor_by_id ( $sensor_id )
{
2015-07-13 18:10:26 +00:00
if ( is_numeric ( $sensor_id )) {
$sensor = dbFetchRow ( " SELECT * FROM `sensors` WHERE `sensor_id` = ? " , array ( $sensor_id ));
if ( is_array ( $sensor )) {
return $sensor ;
2016-08-28 17:32:58 +00:00
} else {
return false ;
2015-07-13 18:10:26 +00:00
}
2015-02-22 19:28:09 +00:00
}
2010-08-01 14:17:06 +00:00
}
2016-08-28 17:32:58 +00:00
function get_device_id_by_port_id ( $port_id )
{
2015-07-13 18:10:26 +00:00
if ( is_numeric ( $port_id )) {
$device_id = dbFetchCell ( " SELECT `device_id` FROM `ports` WHERE `port_id` = ? " , array ( $port_id ));
if ( is_numeric ( $device_id )) {
return $device_id ;
2016-08-28 17:32:58 +00:00
} else {
return false ;
2015-07-13 18:10:26 +00:00
}
2015-02-22 19:28:09 +00:00
}
2010-08-01 14:17:06 +00:00
}
2016-08-28 17:32:58 +00:00
function get_device_id_by_app_id ( $app_id )
{
2015-07-13 18:10:26 +00:00
if ( is_numeric ( $app_id )) {
$device_id = dbFetchCell ( " SELECT `device_id` FROM `applications` WHERE `app_id` = ? " , array ( $app_id ));
if ( is_numeric ( $device_id )) {
return $device_id ;
2016-08-28 17:32:58 +00:00
} else {
return false ;
2015-07-13 18:10:26 +00:00
}
2015-02-22 19:28:09 +00:00
}
2015-07-13 18:10:26 +00:00
}
2010-07-28 19:43:02 +00:00
2016-08-28 17:32:58 +00:00
function ifclass ( $ifOperStatus , $ifAdminStatus )
{
2015-07-13 18:10:26 +00:00
$ifclass = " interface-upup " ;
if ( $ifAdminStatus == " down " ) {
$ifclass = " interface-admindown " ;
}
if ( $ifAdminStatus == " up " && $ifOperStatus == " down " ) {
$ifclass = " interface-updown " ;
}
if ( $ifAdminStatus == " up " && $ifOperStatus == " up " ) {
$ifclass = " interface-upup " ;
2015-02-22 19:28:09 +00:00
}
2015-07-13 18:10:26 +00:00
return $ifclass ;
}
2016-08-28 17:32:58 +00:00
function device_by_name ( $name , $refresh = 0 )
{
2015-07-13 18:10:26 +00:00
// FIXME - cache name > id too.
return device_by_id_cache ( getidbyname ( $name ), $refresh );
2011-10-03 13:40:37 +00:00
}
2012-05-21 18:17:23 +00:00
2016-08-28 17:32:58 +00:00
function accesspoint_by_id ( $ap_id , $refresh = '0' )
{
2012-05-21 18:17:23 +00:00
2015-07-13 18:10:26 +00:00
$ap = dbFetchRow ( " SELECT * FROM `access_points` WHERE `accesspoint_id` = ? " , array ( $ap_id ));
2012-05-21 18:17:23 +00:00
2015-07-13 18:10:26 +00:00
return $ap ;
2012-05-21 18:17:23 +00:00
}
2016-08-28 17:32:58 +00:00
function device_by_id_cache ( $device_id , $refresh = '0' )
{
2015-07-13 18:10:26 +00:00
global $cache ;
2011-03-11 18:03:49 +00:00
2015-07-13 18:10:26 +00:00
if ( ! $refresh && isset ( $cache [ 'devices' ][ 'id' ][ $device_id ]) && is_array ( $cache [ 'devices' ][ 'id' ][ $device_id ])) {
$device = $cache [ 'devices' ][ 'id' ][ $device_id ];
2016-08-28 17:32:58 +00:00
} else {
2015-07-13 18:10:26 +00:00
$device = dbFetchRow ( " SELECT * FROM `devices` WHERE `device_id` = ? " , array ( $device_id ));
2016-08-28 17:32:58 +00:00
//order vrf_lite_cisco with context, this will help to get the vrf_name and instance_name all the time
$vrfs_lite_cisco = dbFetchRows ( " SELECT * FROM `vrf_lite_cisco` WHERE `device_id` = ? " , array ( $device_id ));
if ( ! empty ( $vrfs_lite_cisco )) {
$device [ 'vrf_lite_cisco' ] = array ();
foreach ( $vrfs_lite_cisco as $vrf ) {
$device [ 'vrf_lite_cisco' ][ $vrf [ 'context_name' ]] = $vrf ;
}
}
if ( ! empty ( $device [ 'ip' ])) {
2016-07-06 17:08:19 +00:00
$device [ 'ip' ] = inet6_ntop ( $device [ 'ip' ]);
}
2015-07-13 18:10:26 +00:00
$cache [ 'devices' ][ 'id' ][ $device_id ] = $device ;
}
return $device ;
2010-04-20 15:46:17 +00:00
}
2016-08-28 17:32:58 +00:00
function truncate ( $substring , $max = 50 , $rep = '...' )
{
2015-07-13 18:10:26 +00:00
if ( strlen ( $substring ) < 1 ) {
$string = $rep ;
2016-08-28 17:32:58 +00:00
} else {
2015-07-13 18:10:26 +00:00
$string = $substring ;
}
2016-08-28 17:32:58 +00:00
$leave = $max - strlen ( $rep );
2015-07-13 18:10:26 +00:00
if ( strlen ( $string ) > $max ) {
return substr_replace ( $string , $rep , $leave );
2016-08-28 17:32:58 +00:00
} else {
2015-07-13 18:10:26 +00:00
return $string ;
}
2009-10-28 13:49:37 +00:00
}
2016-08-28 17:32:58 +00:00
function mres ( $string )
{
2015-07-13 18:10:26 +00:00
// short function wrapper because the real one is stupidly long and ugly. aesthetics.
2016-11-11 01:40:53 +00:00
global $database_link ;
return mysqli_real_escape_string ( $database_link , $string );
2009-06-19 10:43:02 +00:00
}
2016-08-28 17:32:58 +00:00
function getifhost ( $id )
{
2015-07-13 18:10:26 +00:00
return dbFetchCell ( " SELECT `device_id` from `ports` WHERE `port_id` = ? " , array ( $id ));
2009-05-11 13:43:59 +00:00
}
2016-08-28 17:32:58 +00:00
function gethostbyid ( $id )
{
2015-07-13 18:10:26 +00:00
global $cache ;
2011-10-28 18:29:22 +00:00
2015-07-13 18:10:26 +00:00
if ( isset ( $cache [ 'devices' ][ 'id' ][ $id ][ 'hostname' ])) {
$hostname = $cache [ 'devices' ][ 'id' ][ $id ][ 'hostname' ];
2016-08-28 17:32:58 +00:00
} else {
2015-07-13 18:10:26 +00:00
$hostname = dbFetchCell ( " SELECT `hostname` FROM `devices` WHERE `device_id` = ? " , array ( $id ));
}
2011-10-28 18:29:22 +00:00
2015-07-13 18:10:26 +00:00
return $hostname ;
2009-05-07 13:47:51 +00:00
}
2016-08-28 17:32:58 +00:00
function strgen ( $length = 16 )
{
2015-07-13 18:10:26 +00:00
$entropy = array ( 0 , 1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 , 9 , 'a' , 'A' , 'b' , 'B' , 'c' , 'C' , 'd' , 'D' , 'e' ,
'E' , 'f' , 'F' , 'g' , 'G' , 'h' , 'H' , 'i' , 'I' , 'j' , 'J' , 'k' , 'K' , 'l' , 'L' , 'm' , 'M' , 'n' ,
'N' , 'o' , 'O' , 'p' , 'P' , 'q' , 'Q' , 'r' , 'R' , 's' , 'S' , 't' , 'T' , 'u' , 'U' , 'v' , 'V' , 'w' ,
'W' , 'x' , 'X' , 'y' , 'Y' , 'z' , 'Z' );
$string = " " ;
2011-03-11 18:03:49 +00:00
2015-07-13 18:10:26 +00:00
for ( $i = 0 ; $i < $length ; $i ++ ) {
2016-08-28 17:32:58 +00:00
$key = mt_rand ( 0 , 61 );
2015-07-13 18:10:26 +00:00
$string .= $entropy [ $key ];
}
2011-03-11 18:03:49 +00:00
2015-07-13 18:10:26 +00:00
return $string ;
2009-05-07 13:47:51 +00:00
}
2016-08-28 17:32:58 +00:00
function getpeerhost ( $id )
{
2015-07-13 18:10:26 +00:00
return dbFetchCell ( " SELECT `device_id` from `bgpPeers` WHERE `bgpPeer_id` = ? " , array ( $id ));
2009-05-07 13:47:51 +00:00
}
2016-08-28 17:32:58 +00:00
function getifindexbyid ( $id )
{
2015-07-13 18:10:26 +00:00
return dbFetchCell ( " SELECT `ifIndex` FROM `ports` WHERE `port_id` = ? " , array ( $id ));
2009-05-07 13:47:51 +00:00
}
2016-08-28 17:32:58 +00:00
function getifbyid ( $id )
{
2015-07-13 18:10:26 +00:00
return dbFetchRow ( " SELECT * FROM `ports` WHERE `port_id` = ? " , array ( $id ));
2010-01-08 23:09:25 +00:00
}
2016-08-28 17:32:58 +00:00
function getifdescrbyid ( $id )
{
2015-07-13 18:10:26 +00:00
return dbFetchCell ( " SELECT `ifDescr` FROM `ports` WHERE `port_id` = ? " , array ( $id ));
2009-05-07 13:47:51 +00:00
}
2016-08-28 17:32:58 +00:00
function getidbyname ( $hostname )
{
2015-07-13 18:10:26 +00:00
global $cache ;
2011-10-04 09:10:21 +00:00
2015-07-13 18:10:26 +00:00
if ( isset ( $cache [ 'devices' ][ 'hostname' ][ $hostname ])) {
$id = $cache [ 'devices' ][ 'hostname' ][ $hostname ];
2016-08-28 17:32:58 +00:00
} else {
2015-07-13 18:10:26 +00:00
$id = dbFetchCell ( " SELECT `device_id` FROM `devices` WHERE `hostname` = ? " , array ( $hostname ));
}
2011-10-05 16:18:15 +00:00
2015-07-13 18:10:26 +00:00
return $id ;
2009-05-07 13:47:51 +00:00
}
2016-08-28 17:32:58 +00:00
function gethostosbyid ( $id )
{
2015-07-13 18:10:26 +00:00
global $cache ;
2011-12-07 13:52:46 +00:00
2015-07-13 18:10:26 +00:00
if ( isset ( $cache [ 'devices' ][ 'id' ][ $id ][ 'os' ])) {
$os = $cache [ 'devices' ][ 'id' ][ $id ][ 'os' ];
2016-08-28 17:32:58 +00:00
} else {
2015-07-13 18:10:26 +00:00
$os = dbFetchCell ( " SELECT `os` FROM `devices` WHERE `device_id` = ? " , array ( $id ));
}
2011-10-04 09:10:21 +00:00
2015-07-13 18:10:26 +00:00
return $os ;
2009-05-07 13:47:51 +00:00
}
2016-08-28 17:32:58 +00:00
function safename ( $name )
{
2015-07-13 18:10:26 +00:00
return preg_replace ( '/[^a-zA-Z0-9,._\-]/' , '_' , $name );
2010-02-05 22:10:06 +00:00
}
2009-05-07 13:47:51 +00:00
2016-11-01 16:37:19 +00:00
/**
* Function format the rrdtool description text correctly .
* @ param $descr
* @ return mixed
*/
2016-10-24 21:40:39 +00:00
function safedescr ( $descr )
{
2016-10-25 13:19:48 +00:00
return preg_replace ( '/[^a-zA-Z0-9,._\-\/\ ]/' , ' ' , $descr );
2016-10-24 21:40:39 +00:00
}
2016-08-28 17:32:58 +00:00
function zeropad ( $num , $length = 2 )
{
2015-07-13 18:10:26 +00:00
while ( strlen ( $num ) < $length ) {
$num = '0' . $num ;
}
2011-03-28 20:29:34 +00:00
2015-07-13 18:10:26 +00:00
return $num ;
2011-03-28 20:29:34 +00:00
}
2016-08-28 17:32:58 +00:00
function set_dev_attrib ( $device , $attrib_type , $attrib_value )
{
2015-07-13 18:10:26 +00:00
if ( dbFetchCell ( " SELECT COUNT(*) FROM devices_attribs WHERE `device_id` = ? AND `attrib_type` = ? " , array ( $device [ 'device_id' ], $attrib_type ))) {
$return = dbUpdate ( array ( 'attrib_value' => $attrib_value ), 'devices_attribs' , 'device_id=? and attrib_type=?' , array ( $device [ 'device_id' ], $attrib_type ));
2016-08-28 17:32:58 +00:00
} else {
2015-07-13 18:10:26 +00:00
$return = dbInsert ( array ( 'device_id' => $device [ 'device_id' ], 'attrib_type' => $attrib_type , 'attrib_value' => $attrib_value ), 'devices_attribs' );
}
return $return ;
2011-03-31 17:19:54 +00:00
}
2016-08-28 17:32:58 +00:00
function get_dev_attribs ( $device )
{
2015-07-13 18:10:26 +00:00
$attribs = array ();
foreach ( dbFetchRows ( " SELECT * FROM devices_attribs WHERE `device_id` = ? " , array ( $device )) as $entry ) {
$attribs [ $entry [ 'attrib_type' ]] = $entry [ 'attrib_value' ];
}
return $attribs ;
2011-05-03 20:13:15 +00:00
}
2016-08-28 17:32:58 +00:00
function get_dev_entity_state ( $device )
{
2015-07-13 18:10:26 +00:00
$state = array ();
foreach ( dbFetchRows ( " SELECT * FROM entPhysical_state WHERE `device_id` = ? " , array ( $device )) as $entity ) {
$state [ 'group' ][ $entity [ 'group' ]][ $entity [ 'entPhysicalIndex' ]][ $entity [ 'subindex' ]][ $entity [ 'key' ]] = $entity [ 'value' ];
$state [ 'index' ][ $entity [ 'entPhysicalIndex' ]][ $entity [ 'subindex' ]][ $entity [ 'group' ]][ $entity [ 'key' ]] = $entity [ 'value' ];
}
return $state ;
2011-11-14 18:28:00 +00:00
}
2016-08-28 17:32:58 +00:00
function get_dev_attrib ( $device , $attrib_type , $attrib_value = '' )
{
2015-08-30 22:09:54 +00:00
$sql = '' ;
2015-08-30 21:34:37 +00:00
$params = array ( $device [ 'device_id' ], $attrib_type );
if ( ! empty ( $attrib_value )) {
$sql = " AND `attrib_value`=? " ;
array_push ( $params , $attrib_value );
}
if ( $row = dbFetchRow ( " SELECT attrib_value FROM devices_attribs WHERE `device_id` = ? AND `attrib_type` = ? $sql " , $params )) {
2015-07-13 18:10:26 +00:00
return $row [ 'attrib_value' ];
2016-08-28 17:32:58 +00:00
} else {
return null ;
2015-07-13 18:10:26 +00:00
}
}
2011-03-31 17:19:54 +00:00
2016-08-28 17:32:58 +00:00
function is_dev_attrib_enabled ( $device , $attrib , $default = true )
{
2015-06-12 23:26:26 +00:00
$val = get_dev_attrib ( $device , $attrib );
2016-05-02 16:14:35 +00:00
if ( $val != null ) {
2015-06-12 23:26:26 +00:00
// attribute is set
return ( $val != 0 );
2016-08-28 17:32:58 +00:00
} else {
2015-06-12 23:26:26 +00:00
// attribute not set
return $default ;
}
}
2016-08-28 17:32:58 +00:00
function del_dev_attrib ( $device , $attrib_type )
{
2015-07-13 18:10:26 +00:00
return dbDelete ( 'devices_attribs' , " `device_id` = ? AND `attrib_type` = ? " , array ( $device [ 'device_id' ], $attrib_type ));
2011-03-31 17:19:54 +00:00
}
2011-03-28 20:29:34 +00:00
2016-08-28 17:32:58 +00:00
function formatRates ( $value , $round = '2' , $sf = '3' )
{
2015-07-13 18:10:26 +00:00
$value = format_si ( $value , $round , $sf ) . " bps " ;
return $value ;
2011-04-05 13:29:57 +00:00
}
2016-08-28 17:32:58 +00:00
function formatStorage ( $value , $round = '2' , $sf = '3' )
{
2015-07-13 18:10:26 +00:00
$value = format_bi ( $value , $round ) . " B " ;
return $value ;
2011-04-05 13:29:57 +00:00
}
2016-08-28 17:32:58 +00:00
function format_si ( $value , $round = '2' , $sf = '3' )
{
2015-07-13 18:10:26 +00:00
$neg = 0 ;
if ( $value < " 0 " ) {
$neg = 1 ;
$value = $value * - 1 ;
}
2011-12-01 12:29:52 +00:00
2015-07-13 18:10:26 +00:00
if ( $value >= " 0.1 " ) {
2016-08-28 17:32:58 +00:00
$sizes = array ( '' , 'k' , 'M' , 'G' , 'T' , 'P' , 'E' );
2015-07-13 18:10:26 +00:00
$ext = $sizes [ 0 ];
for ( $i = 1 ; (( $i < count ( $sizes )) && ( $value >= 1000 )); $i ++ ) {
$value = $value / 1000 ;
$ext = $sizes [ $i ];
}
2016-08-28 17:32:58 +00:00
} else {
$sizes = array ( '' , 'm' , 'u' , 'n' );
2015-07-13 18:10:26 +00:00
$ext = $sizes [ 0 ];
for ( $i = 1 ; (( $i < count ( $sizes )) && ( $value != 0 ) && ( $value <= 0.1 )); $i ++ ) {
$value = $value * 1000 ;
$ext = $sizes [ $i ];
}
}
2011-04-05 13:29:57 +00:00
2015-07-13 18:10:26 +00:00
if ( $neg == 1 ) {
$value = $value * - 1 ;
}
2011-12-01 12:29:52 +00:00
2017-01-01 09:37:15 +00:00
return number_format ( round ( $value , $round ), $sf , '.' , '' ) . $ext ;
2011-04-05 13:29:57 +00:00
}
2016-08-28 17:32:58 +00:00
function format_bi ( $value , $round = '2' , $sf = '3' )
{
2015-07-13 18:10:26 +00:00
if ( $value < " 0 " ) {
$neg = 1 ;
$value = $value * - 1 ;
}
2016-08-28 17:32:58 +00:00
$sizes = array ( '' , 'k' , 'M' , 'G' , 'T' , 'P' , 'E' );
2015-07-13 18:10:26 +00:00
$ext = $sizes [ 0 ];
for ( $i = 1 ; (( $i < count ( $sizes )) && ( $value >= 1024 )); $i ++ ) {
$value = $value / 1024 ;
$ext = $sizes [ $i ];
}
2011-12-07 13:52:46 +00:00
2015-07-13 18:10:26 +00:00
if ( $neg ) {
$value = $value * - 1 ;
}
2011-12-07 13:52:46 +00:00
2017-01-01 09:37:15 +00:00
return number_format ( round ( $value , $round ), $sf , '.' , '' ) . $ext ;
2011-04-05 13:29:57 +00:00
}
2016-08-28 17:32:58 +00:00
function format_number ( $value , $base = '1000' , $round = 2 , $sf = 3 )
{
2015-07-13 18:10:26 +00:00
if ( $base == '1000' ) {
return format_si ( $value , $round , $sf );
2016-08-28 17:32:58 +00:00
} else {
2015-07-13 18:10:26 +00:00
return format_bi ( $value , $round , $sf );
}
2011-12-06 22:17:37 +00:00
}
2016-08-28 17:32:58 +00:00
function is_valid_hostname ( $hostname )
{
2015-07-13 18:10:26 +00:00
// The Internet standards (Request for Comments) for protocols mandate that
// component hostname labels may contain only the ASCII letters 'a' through 'z'
// (in a case-insensitive manner), the digits '0' through '9', and the hyphen
// ('-'). The original specification of hostnames in RFC 952, mandated that
// labels could not start with a digit or with a hyphen, and must not end with
// a hyphen. However, a subsequent specification (RFC 1123) permitted hostname
// labels to start with digits. No other symbols, punctuation characters, or
// white space are permitted. While a hostname may not contain other characters,
// such as the underscore character (_), other DNS names may contain the underscore
2011-10-06 13:13:15 +00:00
2016-08-28 17:32:58 +00:00
return ctype_alnum ( str_replace ( '_' , '' , str_replace ( '-' , '' , str_replace ( '.' , '' , $hostname ))));
2011-10-06 13:13:15 +00:00
}
2015-06-13 12:50:37 +00:00
/*
* convenience function - please use this instead of 'if ($debug) { echo ...; }'
*/
2016-08-28 17:32:58 +00:00
function d_echo ( $text , $no_debug_text = null )
{
2016-09-14 09:05:49 +00:00
global $debug , $php_debug ;
2015-06-13 12:50:37 +00:00
if ( $debug ) {
2016-09-14 09:05:49 +00:00
if ( isset ( $php_debug )) {
$php_debug [] = $text ;
2016-08-28 17:32:58 +00:00
} else {
2016-09-14 09:05:49 +00:00
print_r ( $text );
2015-08-02 19:23:54 +00:00
}
2016-08-28 17:32:58 +00:00
} elseif ( $no_debug_text ) {
2015-06-13 12:50:37 +00:00
echo " $no_debug_text " ;
}
2015-11-15 08:18:13 +00:00
} // d_echo
2016-08-17 00:52:36 +00:00
/**
* Output using console color if possible
* https :// github . com / pear / Console_Color2 / blob / master / examples / documentation
*
* @ param string $string the string to print with console color
2016-08-17 21:00:43 +00:00
* @ param bool $enabled if set to false , this function does nothing
2016-08-17 00:52:36 +00:00
*/
2016-08-17 21:00:43 +00:00
function c_echo ( $string , $enabled = true )
2016-08-17 00:52:36 +00:00
{
2016-08-28 17:32:58 +00:00
if ( ! $enabled ) {
2016-08-17 21:00:43 +00:00
return ;
}
2016-08-17 00:52:36 +00:00
global $console_color ;
2016-08-28 17:32:58 +00:00
if ( $console_color ) {
2016-08-17 00:52:36 +00:00
echo $console_color -> convert ( $string );
} else {
echo preg_replace ( '/%((%)|.)/' , '' , $string );
}
}
2015-06-13 12:50:37 +00:00
/*
* @ return true if the given graph type is a dynamic MIB graph
*/
2016-08-28 17:32:58 +00:00
function is_mib_graph ( $type , $subtype )
{
2015-06-13 12:50:37 +00:00
global $config ;
2016-12-22 11:03:21 +00:00
return isset ( $config [ 'graph_types' ][ $type ][ $subtype ][ 'section' ]) &&
$config [ 'graph_types' ][ $type ][ $subtype ][ 'section' ] == 'mib' ;
2015-11-15 08:18:13 +00:00
} // is_mib_graph
2015-06-13 12:50:37 +00:00
/*
* @ return true if client IP address is authorized to access graphs
*/
2016-08-28 17:32:58 +00:00
function is_client_authorized ( $clientip )
{
2015-06-13 12:50:37 +00:00
global $config ;
2015-06-15 22:42:05 +00:00
2015-06-13 12:50:37 +00:00
if ( isset ( $config [ 'allow_unauth_graphs' ]) && $config [ 'allow_unauth_graphs' ]) {
d_echo ( " Unauthorized graphs allowed \n " );
return true ;
}
if ( isset ( $config [ 'allow_unauth_graphs_cidr' ])) {
foreach ( $config [ 'allow_unauth_graphs_cidr' ] as $range ) {
if ( Net_IPv4 :: ipInNetwork ( $clientip , $range )) {
d_echo ( " Unauthorized graphs allowed from $range\n " );
return true ;
}
}
}
return false ;
2015-11-15 08:18:13 +00:00
} // is_client_authorized
2015-06-13 12:50:37 +00:00
2015-06-13 12:55:18 +00:00
/*
* @ return an array of all graph subtypes for the given type
*/
2016-01-17 05:00:15 +00:00
function get_graph_subtypes ( $type , $device = null )
{
2015-06-13 12:55:18 +00:00
global $config ;
$types = array ();
// find the subtypes defined in files
if ( $handle = opendir ( $config [ 'install_dir' ] . " /html/includes/graphs/ $type / " )) {
while ( false !== ( $file = readdir ( $handle ))) {
if ( $file != " . " && $file != " .. " && $file != " auth.inc.php " && strstr ( $file , " .inc.php " )) {
$types [] = str_replace ( " .inc.php " , " " , $file );
}
}
closedir ( $handle );
}
2016-09-15 07:45:45 +00:00
if ( $device != null ) {
// find the MIB subtypes
$graphs = get_device_graphs ( $device );
foreach ( $config [ 'graph_types' ] as $type => $unused1 ) {
foreach ( $config [ 'graph_types' ][ $type ] as $subtype => $unused2 ) {
2016-12-22 11:03:21 +00:00
if ( is_mib_graph ( $type , $subtype ) && in_array ( $subtype , $graphs )) {
2016-09-15 07:45:45 +00:00
$types [] = $subtype ;
}
2015-06-13 12:55:18 +00:00
}
}
}
sort ( $types );
return $types ;
2015-11-15 08:18:13 +00:00
} // get_graph_subtypes
2016-09-15 07:45:45 +00:00
function get_device_graphs ( $device )
2016-01-17 05:00:15 +00:00
{
2016-09-15 07:45:45 +00:00
$query = 'SELECT `graph` FROM `device_graphs` WHERE `device_id` = ?' ;
return dbFetchColumn ( $query , array ( $device [ 'device_id' ]));
}
2016-01-17 05:00:15 +00:00
2016-08-28 17:32:58 +00:00
function get_smokeping_files ( $device )
{
2015-06-24 10:41:10 +00:00
global $config ;
2015-07-16 15:01:51 +00:00
$smokeping_files = array ();
2015-06-24 10:41:10 +00:00
if ( isset ( $config [ 'smokeping' ][ 'dir' ])) {
2015-07-12 18:47:50 +00:00
$smokeping_dir = generate_smokeping_file ( $device );
2015-06-24 10:41:10 +00:00
if ( $handle = opendir ( $smokeping_dir )) {
while ( false !== ( $file = readdir ( $handle ))) {
2015-07-16 15:01:51 +00:00
if ( $file != '.' && $file != '..' ) {
2016-04-24 06:05:14 +00:00
if ( stripos ( $file , '.rrd' ) !== false ) {
if ( strpos ( $file , '~' ) !== false ) {
2015-07-16 15:01:51 +00:00
list ( $target , $slave ) = explode ( '~' , str_replace ( '.rrd' , '' , $file ));
$target = str_replace ( '_' , '.' , $target );
2015-06-24 10:41:10 +00:00
$smokeping_files [ 'in' ][ $target ][ $slave ] = $file ;
$smokeping_files [ 'out' ][ $slave ][ $target ] = $file ;
2016-08-28 17:32:58 +00:00
} else {
2015-07-16 15:01:51 +00:00
$target = str_replace ( '.rrd' , '' , $file );
$target = str_replace ( '_' , '.' , $target );
2015-06-24 10:41:10 +00:00
$smokeping_files [ 'in' ][ $target ][ $config [ 'own_hostname' ]] = $file ;
$smokeping_files [ 'out' ][ $config [ 'own_hostname' ]][ $target ] = $file ;
}
}
}
}
}
}
return $smokeping_files ;
2015-07-23 16:51:24 +00:00
} // end get_smokeping_files
2015-07-10 15:10:35 +00:00
2015-11-15 08:18:13 +00:00
2016-08-28 17:32:58 +00:00
function generate_smokeping_file ( $device , $file = '' )
{
2015-07-10 15:10:35 +00:00
global $config ;
if ( $config [ 'smokeping' ][ 'integration' ] === true ) {
2015-07-13 08:37:48 +00:00
return $config [ 'smokeping' ][ 'dir' ] . '/' . $device [ 'type' ] . '/' . $file ;
2016-08-28 17:32:58 +00:00
} else {
2015-07-13 08:37:48 +00:00
return $config [ 'smokeping' ][ 'dir' ] . '/' . $file ;
2015-07-10 15:10:35 +00:00
}
2015-11-15 08:18:13 +00:00
} // generate_smokeping_file
2015-07-10 15:10:35 +00:00
2015-07-21 15:08:09 +00:00
/*
* @ return rounded value to 10 th / 100 th / 1000 th depending on input ( valid : 10 , 100 , 1000 )
*/
2016-08-28 17:32:58 +00:00
function round_Nth ( $val , $round_to )
{
2015-07-21 15:08:09 +00:00
if (( $round_to == " 10 " ) || ( $round_to == " 100 " ) || ( $round_to == " 1000 " )) {
$diff = $val % $round_to ;
if ( $diff >= ( $round_to / 2 )) {
$ret = $val + ( $round_to - $diff );
} else {
$ret = $val - $diff ;
}
return $ret ;
}
2016-08-28 17:32:58 +00:00
} // end round_Nth
2015-07-21 15:08:09 +00:00
2015-11-15 08:18:13 +00:00
2016-01-06 23:38:32 +00:00
/*
* @ return true if this device should be polled with MIB - based discovery
*/
function is_mib_poller_enabled ( $device )
{
2016-05-02 16:14:35 +00:00
$val = get_dev_attrib ( $device , 'poll_mib' );
if ( $val == null ) {
return is_module_enabled ( 'poller' , 'mib' );
2016-01-06 23:38:32 +00:00
}
2016-05-02 16:14:35 +00:00
return $val ;
2016-01-06 23:38:32 +00:00
} // is_mib_poller_enabled
2015-08-16 12:07:48 +00:00
/*
* FIXME : Dummy implementation
*/
2015-06-30 22:14:23 +00:00
function count_mib_mempools ( $device )
{
2016-01-06 23:25:59 +00:00
if ( is_mib_poller_enabled ( $device ) && $device [ 'os' ] == 'ruckuswireless' ) {
2015-06-30 22:14:23 +00:00
return 1 ;
}
return 0 ;
2015-11-15 08:18:13 +00:00
} // count_mib_mempools
2015-06-30 22:14:23 +00:00
2015-08-16 12:07:48 +00:00
/*
* FIXME : Dummy implementation
*/
2015-06-30 22:14:23 +00:00
function count_mib_processors ( $device )
{
2016-01-06 23:25:59 +00:00
if ( is_mib_poller_enabled ( $device ) && $device [ 'os' ] == 'ruckuswireless' ) {
2015-06-30 22:14:23 +00:00
return 1 ;
}
return 0 ;
2015-11-15 08:18:13 +00:00
} // count_mib_processors
2015-06-30 22:14:23 +00:00
function count_mib_health ( $device )
{
return count_mib_mempools ( $device ) + count_mib_processors ( $device );
2015-11-15 08:18:13 +00:00
} // count_mib_health
2015-06-30 22:14:23 +00:00
2015-12-02 09:40:21 +00:00
function get_mibval ( $device , $oid )
{
$sql = 'SELECT * FROM `device_oids` WHERE `device_id` = ? AND `oid` = ?' ;
return dbFetchRow ( $sql , array ( $device [ 'device_id' ], $oid ));
} // get_mibval
2015-06-30 22:14:23 +00:00
/*
2015-12-02 09:40:21 +00:00
* FIXME : Dummy implementation - needs an abstraction for each device
*/
function get_mib_mempools ( $device )
{
$mempools = array ();
2016-01-06 23:25:59 +00:00
if ( is_mib_poller_enabled ( $device ) && $device [ 'os' ] == 'ruckuswireless' ) {
2015-12-02 09:40:21 +00:00
$mempool = array ();
$mibvals = get_mibval ( $device , '.1.3.6.1.4.1.25053.1.2.1.1.1.15.14.0' );
$mempool [ 'mempool_descr' ] = $mibvals [ 'object_type' ];
$mempool [ 'mempool_id' ] = 0 ;
$mempool [ 'mempool_total' ] = 100 ;
$mempool [ 'mempool_used' ] = $mibvals [ 'numvalue' ];
$mempool [ 'mempool_free' ] = 100 - $mibvals [ 'numvalue' ];
$mempool [ 'percentage' ] = true ;
$mempools [] = $mempool ;
}
return $mempools ;
} // get_mib_mempools
/*
* FIXME : Dummy implementation - needs an abstraction for each device
*/
function get_mib_processors ( $device )
{
$processors = array ();
2016-01-06 23:25:59 +00:00
if ( is_mib_poller_enabled ( $device ) && $device [ 'os' ] == 'ruckuswireless' ) {
2015-12-02 09:40:21 +00:00
$proc = array ();
$mibvals = get_mibval ( $device , '.1.3.6.1.4.1.25053.1.2.1.1.1.15.13.0' );
$proc [ 'processor_descr' ] = $mibvals [ 'object_type' ];
$proc [ 'processor_id' ] = 0 ;
$proc [ 'processor_usage' ] = $mibvals [ 'numvalue' ];
$processors [] = $proc ;
}
return $processors ;
} // get_mib_processors
/*
* FIXME : Dummy implementation - needs an abstraction for each device
2015-06-30 22:14:23 +00:00
* @ return true if there is a custom graph defined for this type , subtype , and device
*/
function is_custom_graph ( $type , $subtype , $device )
{
2016-01-06 23:25:59 +00:00
if ( is_mib_poller_enabled ( $device ) && $device [ 'os' ] == 'ruckuswireless' && $type == 'device' ) {
2015-06-30 22:14:23 +00:00
switch ( $subtype ) {
2016-08-28 17:32:58 +00:00
case 'cpumem' :
case 'mempool' :
case 'processor' :
return true ;
2015-06-30 22:14:23 +00:00
}
}
return false ;
2015-11-15 08:18:13 +00:00
} // is_custom_graph
2015-06-30 22:14:23 +00:00
/*
2015-08-16 12:07:48 +00:00
* FIXME : Dummy implementation
2015-06-30 22:14:23 +00:00
* Set section / graph entries in $graph_enable for graphs specific to $os .
*/
function enable_os_graphs ( $os , & $graph_enable )
{
/*
foreach ( dbFetchRows ( " SELECT * FROM graph_conditions WHERE graph_type = 'device' AND condition_name = 'os' AND condition_value = ? " , array ( $os )) as $graph ) {
$graph_enable [ $graph [ 'graph_section' ]][ $graph [ 'graph_subtype' ]] = " device_ " . $graph [ 'graph_subtype' ];
}
*/
2015-11-15 08:18:13 +00:00
} // enable_os_graphs
2015-06-30 22:14:23 +00:00
/*
* For each os - based or global graph relevant to $device , set its section / graph entry in $graph_enable .
*/
function enable_graphs ( $device , & $graph_enable )
{
// These are standard graphs we should have for all systems
2016-01-24 02:43:59 +00:00
$graph_enable [ 'poller' ][ 'poller_perf' ] = 'device_poller_perf' ;
$graph_enable [ 'poller' ][ 'poller_modules_perf' ] = 'device_poller_modules_perf' ;
2015-12-06 08:07:51 +00:00
if ( can_ping_device ( $device ) === true ) {
2015-10-24 04:21:19 +00:00
$graph_enable [ 'poller' ][ 'ping_perf' ] = 'device_ping_perf' ;
}
2015-06-30 22:14:23 +00:00
enable_os_graphs ( $device [ 'os' ], $graph_enable );
2015-11-15 08:18:13 +00:00
} // enable_graphs
2015-06-30 22:14:23 +00:00
2015-07-20 04:02:16 +00:00
//
// maintain a simple cache of objects
//
function object_add_cache ( $section , $obj )
{
global $object_cache ;
$object_cache [ $section ][ $obj ] = true ;
2015-11-15 08:18:13 +00:00
} // object_add_cache
2015-07-20 04:02:16 +00:00
function object_is_cached ( $section , $obj )
{
global $object_cache ;
if ( array_key_exists ( $obj , $object_cache )) {
2015-12-06 08:07:51 +00:00
return $object_cache [ $section ][ $obj ];
2016-08-28 17:32:58 +00:00
} else {
2015-07-20 04:02:16 +00:00
return false ;
}
2015-11-15 08:18:13 +00:00
} // object_is_cached
2015-07-20 04:02:16 +00:00
2015-10-17 18:49:01 +00:00
/**
* Checks if config allows us to ping this device
* $attribs contains an array of all of this devices
* attributes
* @ param array $attribs Device attributes
* @ return bool
**/
2016-08-28 17:32:58 +00:00
function can_ping_device ( $attribs )
{
2015-10-17 18:49:01 +00:00
global $config ;
if ( $config [ 'icmp_check' ] === true && $attribs [ 'override_icmp_disable' ] != " true " ) {
return true ;
2016-08-28 17:32:58 +00:00
} else {
2015-10-17 18:49:01 +00:00
return false ;
}
} // end can_ping_device
2015-11-10 11:33:52 +00:00
2015-11-15 08:18:13 +00:00
2015-07-20 04:07:23 +00:00
/*
* @ return true if the requested module type & name is globally enabled
*/
function is_module_enabled ( $type , $module )
{
global $config ;
if ( isset ( $config [ $type . '_modules' ][ $module ])) {
return $config [ $type . '_modules' ][ $module ] == 1 ;
2016-08-28 17:32:58 +00:00
} else {
2015-07-20 04:07:23 +00:00
return false ;
}
} // is_module_enabled
2015-11-15 08:18:13 +00:00
2015-07-20 04:07:23 +00:00
/*
* @ return true if every string in $arr begins with $str
*/
function begins_with ( $str , $arr )
{
foreach ( $arr as $s ) {
$pos = strpos ( $s , $str );
if ( $pos === false || $pos > 0 ) {
return false ;
}
}
return true ;
} // begins_with
2015-11-15 08:18:13 +00:00
2015-07-20 04:07:23 +00:00
/*
* @ return the longest starting portion of $str that matches everything in $arr
*/
function longest_matching_prefix ( $str , $arr )
{
$len = strlen ( $str );
while ( $len > 0 ) {
$prefix = substr ( $str , 0 , $len );
if ( begins_with ( $prefix , $arr )) {
return $prefix ;
}
$len -= 1 ;
}
return '' ;
} // longest_matching_prefix
2015-11-15 08:18:13 +00:00
2015-12-06 08:07:51 +00:00
function search_phrase_column ( $c )
{
global $searchPhrase ;
return " $c LIKE '% $searchPhrase %' " ;
} // search_phrase_column
2016-08-28 17:32:58 +00:00
function print_mib_poller_disabled ()
{
2016-01-06 23:25:59 +00:00
echo ' < h4 > MIB polling is not enabled </ h4 >
< p >
Set < tt > $config [ \ ' poller_modules\ ' ][ \ ' mib\ ' ] = 1 ; </ tt > in < tt > config . php </ tt > to enable .
</ p > ' ;
} // print_mib_poller_disabled
2015-11-10 11:33:52 +00:00
/**
* Constructs the path to an RRD for the Ceph application
* @ param string $gtype The type of rrd we ' re looking for
* @ return string
**/
2016-08-28 17:32:58 +00:00
function ceph_rrd ( $gtype )
{
2015-11-10 11:33:52 +00:00
global $device ;
global $vars ;
if ( $gtype == " osd " ) {
$var = $vars [ 'osd' ];
2016-08-28 17:32:58 +00:00
} else {
2015-11-10 11:33:52 +00:00
$var = $vars [ 'pool' ];
}
2016-07-07 06:33:43 +00:00
return rrd_name ( $device [ 'hostname' ], array ( 'app' , 'ceph' , $vars [ 'id' ], $gtype , $var ));
2015-11-15 08:18:13 +00:00
} // ceph_rrd
2015-11-17 02:50:52 +00:00
/**
* Parse location field for coordinates
* @ param string location The location field to look for coords in .
* @ return array Containing the lat and lng coords
**/
2016-08-28 17:32:58 +00:00
function parse_location ( $location )
{
2015-11-30 20:00:22 +00:00
preg_match ( '/(\[)(-?[0-9\. ]+),[ ]*(-?[0-9\. ]+)(\])/' , $location , $tmp_loc );
2015-11-17 02:50:52 +00:00
if ( ! empty ( $tmp_loc [ 2 ]) && ! empty ( $tmp_loc [ 3 ])) {
return array ( 'lat' => $tmp_loc [ 2 ], 'lng' => $tmp_loc [ 3 ]);
}
} //end parse_location()
2016-01-06 00:14:35 +00:00
/**
* Returns version info
* @ return array
**/
2016-08-28 17:32:58 +00:00
function version_info ( $remote = true )
{
2016-01-06 00:14:35 +00:00
global $config ;
$output = array ();
if ( $remote === true && $config [ 'update_channel' ] == 'master' ) {
$api = curl_init ();
set_curl_proxy ( $api );
2016-08-28 17:32:58 +00:00
curl_setopt ( $api , CURLOPT_USERAGENT , 'LibreNMS' );
2016-01-06 00:14:35 +00:00
curl_setopt ( $api , CURLOPT_URL , $config [ 'github_api' ] . 'commits/master' );
curl_setopt ( $api , CURLOPT_RETURNTRANSFER , 1 );
2016-08-28 17:32:58 +00:00
$output [ 'github' ] = json_decode ( curl_exec ( $api ), true );
2016-01-06 00:14:35 +00:00
}
2016-07-31 21:41:39 +00:00
list ( $local_sha , $local_date ) = explode ( '|' , rtrim ( `git show --pretty='%H|%ct' -s HEAD` ));
2016-07-06 17:15:14 +00:00
$output [ 'local_sha' ] = $local_sha ;
$output [ 'local_date' ] = $local_date ;
2016-04-29 17:53:02 +00:00
$output [ 'local_branch' ] = rtrim ( `git rev-parse --abbrev-ref HEAD` );
2016-01-06 00:14:35 +00:00
$output [ 'db_schema' ] = dbFetchCell ( 'SELECT version FROM dbSchema' );
$output [ 'php_ver' ] = phpversion ();
$output [ 'mysql_ver' ] = dbFetchCell ( 'SELECT version()' );
$output [ 'rrdtool_ver' ] = implode ( ' ' , array_slice ( explode ( ' ' , shell_exec ( $config [ 'rrdtool' ] . ' --version |head -n1' )), 1 , 1 ));
2016-10-03 16:48:19 +00:00
$output [ 'netsnmp_ver' ] = str_replace ( 'version: ' , '' , rtrim ( shell_exec ( $config [ 'snmpget' ] . ' --version 2>&1' )));
2016-01-06 00:14:35 +00:00
return $output ;
} //end version_info()
2016-01-17 23:59:51 +00:00
/**
* Convert a MySQL binary v4 ( 4 - byte ) or v6 ( 16 - byte ) IP address to a printable string .
* @ param string $ip A binary string containing an IP address , as returned from MySQL ' s INET6_ATON function
* @ return string Empty if not valid .
*/
// Fuction is from http://uk3.php.net/manual/en/function.inet-ntop.php
2016-08-28 17:32:58 +00:00
function inet6_ntop ( $ip )
{
2016-01-17 23:59:51 +00:00
$l = strlen ( $ip );
if ( $l == 4 or $l == 16 ) {
return inet_ntop ( pack ( 'A' . $l , $ip ));
}
return '' ;
}
2016-01-19 09:00:18 +00:00
2016-01-17 22:01:09 +00:00
/**
* Convert IP to use sysName
* @ param array device
* @ param string ip address
* @ return string
**/
2016-08-28 17:32:58 +00:00
function ip_to_sysname ( $device , $ip )
{
2016-01-17 22:01:09 +00:00
global $config ;
if ( $config [ 'force_ip_to_sysname' ] === true ) {
if ( filter_var ( $ip , FILTER_VALIDATE_IP , FILTER_FLAG_IPV4 ) == true || filter_var ( $ip , FILTER_VALIDATE_IP , FILTER_FLAG_IPV6 ) == true ) {
$ip = $device [ 'sysName' ];
}
}
return $ip ;
} //end ip_to_sysname
2016-01-26 12:49:30 +00:00
/**
* Return valid port association modes
* @ param bool $no_cache No - Cache flag ( optional , default false )
* @ return array
*/
2016-08-28 17:32:58 +00:00
function get_port_assoc_modes ( $no_cache = false )
{
2016-01-26 12:49:30 +00:00
global $config ;
if ( $config [ 'memcached' ][ 'enable' ] && $no_cache === false ) {
2016-08-28 17:32:58 +00:00
$assoc_modes = $config [ 'memcached' ][ 'resource' ] -> get ( hash ( 'sha512' , " port_assoc_modes " ));
if ( ! empty ( $assoc_modes )) {
2016-01-26 12:49:30 +00:00
return $assoc_modes ;
2016-08-28 17:32:58 +00:00
}
2016-01-26 12:49:30 +00:00
}
2016-08-28 17:32:58 +00:00
$assoc_modes = null ;
foreach ( dbFetchRows ( " SELECT `name` FROM `port_association_mode` ORDER BY pom_id " ) as $row ) {
2016-01-26 12:49:30 +00:00
$assoc_modes [] = $row [ 'name' ];
2016-08-28 17:32:58 +00:00
}
2016-01-26 12:49:30 +00:00
2016-08-28 17:32:58 +00:00
if ( $config [ 'memcached' ][ 'enable' ] && $no_cache === false ) {
$config [ 'memcached' ][ 'resource' ] -> set ( hash ( 'sha512' , " port_assoc_modes " ), $assoc_modes , $config [ 'memcached' ][ 'ttl' ]);
}
2016-01-26 12:49:30 +00:00
return $assoc_modes ;
}
/**
* Validate port_association_mode
* @ param string $port_assoc_mode
* @ return bool
*/
2016-08-28 17:32:58 +00:00
function is_valid_port_assoc_mode ( $port_assoc_mode )
{
return in_array ( $port_assoc_mode , get_port_assoc_modes ());
2016-01-26 12:49:30 +00:00
}
/**
* Get DB id of given port association mode name
* @ param string $port_assoc_mode
* @ param bool $no_cache No - Cache flag ( optional , default false )
*/
2016-08-28 17:32:58 +00:00
function get_port_assoc_mode_id ( $port_assoc_mode , $no_cache = false )
{
2016-01-26 12:49:30 +00:00
global $config ;
if ( $config [ 'memcached' ][ 'enable' ] && $no_cache === false ) {
2016-08-28 17:32:58 +00:00
$id = $config [ 'memcached' ][ 'resource' ] -> get ( hash ( 'sha512' , " port_assoc_mode_id| $port_assoc_mode " ));
if ( ! empty ( $id )) {
2016-01-26 12:49:30 +00:00
return $id ;
2016-08-28 17:32:58 +00:00
}
2016-01-26 12:49:30 +00:00
}
2016-08-28 17:32:58 +00:00
$id = null ;
$row = dbFetchRow ( " SELECT `pom_id` FROM `port_association_mode` WHERE name = ? " , array ( $port_assoc_mode ));
2016-01-26 12:49:30 +00:00
if ( $row ) {
$id = $row [ 'pom_id' ];
2016-08-28 17:32:58 +00:00
if ( $config [ 'memcached' ][ 'enable' ] && $no_cache === false ) {
$config [ 'memcached' ][ 'resource' ] -> set ( hash ( 'sha512' , " port_assoc_mode_id| $port_assoc_mode " ), $id , $config [ 'memcached' ][ 'ttl' ]);
}
2016-01-26 12:49:30 +00:00
}
return $id ;
}
/**
* Get name of given port association_mode ID
* @ param int $port_assoc_mode_id Port association mode ID
* @ param bool $no_cache No - Cache flag ( optional , default false )
* @ return bool
*/
2016-08-28 17:32:58 +00:00
function get_port_assoc_mode_name ( $port_assoc_mode_id , $no_cache = false )
{
2016-01-26 12:49:30 +00:00
global $config ;
if ( $config [ 'memcached' ][ 'enable' ] && $no_cache === false ) {
2016-08-28 17:32:58 +00:00
$name = $config [ 'memcached' ][ 'resource' ] -> get ( hash ( 'sha512' , " port_assoc_mode_name| $port_assoc_mode_id " ));
if ( ! empty ( $name )) {
2016-01-26 12:49:30 +00:00
return $name ;
2016-08-28 17:32:58 +00:00
}
2016-01-26 12:49:30 +00:00
}
2016-08-28 17:32:58 +00:00
$name = null ;
$row = dbFetchRow ( " SELECT `name` FROM `port_association_mode` WHERE pom_id = ? " , array ( $port_assoc_mode_id ));
2016-01-26 12:49:30 +00:00
if ( $row ) {
$name = $row [ 'name' ];
2016-08-28 17:32:58 +00:00
if ( $config [ 'memcached' ][ 'enable' ] && $no_cache === false ) {
$config [ 'memcached' ][ 'resource' ] -> set ( hash ( 'sha512' , " port_assoc_mode_name| $port_assoc_mode_id " ), $name , $config [ 'memcached' ][ 'ttl' ]);
}
2016-01-26 12:49:30 +00:00
}
return $name ;
}
/**
* Query all ports of the given device ( by ID ) and build port array and
* port association maps for ifIndex , ifName , ifDescr . Query port stats
* if told to do so , too .
* @ param int $device_id ID of device to query ports for
* @ param bool $with_statistics Query port statistics , too . ( optional , default false )
* @ return array
*/
2016-08-28 17:32:58 +00:00
function get_ports_mapped ( $device_id , $with_statistics = false )
{
2016-01-30 10:05:46 +00:00
$ports = array ();
2016-01-30 10:10:16 +00:00
$maps = array (
2016-01-30 10:05:46 +00:00
'ifIndex' => array (),
'ifName' => array (),
'ifDescr' => array (),
);
2016-01-26 12:49:30 +00:00
if ( $with_statistics ) {
/* ... including any related ports_statistics if requested */
$query = 'SELECT *, `ports_statistics`.`port_id` AS `ports_statistics_port_id`, `ports`.`port_id` AS `port_id` FROM `ports` LEFT OUTER JOIN `ports_statistics` ON `ports`.`port_id` = `ports_statistics`.`port_id` WHERE `ports`.`device_id` = ? ORDER BY ports.port_id' ;
2016-10-15 01:03:26 +00:00
} else {
/* Query all information available for ports for this device ... */
$query = 'SELECT * FROM `ports` WHERE `device_id` = ? ORDER BY port_id' ;
2016-01-26 12:49:30 +00:00
}
// Query known ports in order of discovery to make sure the latest
// discoverd/polled port is in the mapping tables.
2016-08-28 17:32:58 +00:00
foreach ( dbFetchRows ( $query , array ( $device_id )) as $port ) {
2016-01-26 12:49:30 +00:00
// Store port information by ports port_id from DB
$ports [ $port [ 'port_id' ]] = $port ;
// Build maps from ifIndex, ifName, ifDescr to port_id
$maps [ 'ifIndex' ][ $port [ 'ifIndex' ]] = $port [ 'port_id' ];
$maps [ 'ifName' ][ $port [ 'ifName' ]] = $port [ 'port_id' ];
$maps [ 'ifDescr' ][ $port [ 'ifDescr' ]] = $port [ 'port_id' ];
}
2016-01-30 10:05:46 +00:00
return array (
2016-01-26 12:49:30 +00:00
'ports' => $ports ,
'maps' => $maps ,
2016-01-30 10:05:46 +00:00
);
2016-01-26 12:49:30 +00:00
}
/**
* Calculate port_id of given port using given devices port information and port association mode
* @ param array $ports_mapped Port information of device queried by get_ports_mapped ()
* @ param array $port Port information as fetched from DB
* @ param string $port_association_mode Port association mode to use for mapping
* @ return int port_id ( or Null )
*/
2016-08-28 17:32:58 +00:00
function get_port_id ( $ports_mapped , $port , $port_association_mode )
{
2016-01-26 12:49:30 +00:00
// Get port_id according to port_association_mode used for this device
2016-08-28 17:32:58 +00:00
$port_id = null ;
2016-01-26 12:49:30 +00:00
/*
* Information an all ports is available through $ports_mapped [ 'ports' ]
* This might come in handy sometime in the future to add you nifty new
* port mapping schema :
*
* $ports = $ports_mapped [ 'ports' ];
*/
$maps = $ports_mapped [ 'maps' ];
2016-08-28 17:32:58 +00:00
if ( in_array ( $port_association_mode , array ( 'ifIndex' , 'ifName' , 'ifDescr' , 'ifAlias' ))) {
2016-01-26 12:49:30 +00:00
$port_id = $maps [ $port_association_mode ][ $port [ $port_association_mode ]];
}
return $port_id ;
}
2016-06-22 08:42:48 +00:00
/**
* Create a glue - chain
* @ param array $tables Initial Tables to construct glue - chain
* @ param string $target Glue to find ( usual device_id )
* @ param int $x Recursion Anchor
* @ param array $hist History of processed tables
* @ param array $last Glues on the fringe
* @ return string | boolean
*/
2016-08-28 17:32:58 +00:00
function ResolveGlues ( $tables , $target , $x = 0 , $hist = array (), $last = array ())
{
if ( sizeof ( $tables ) == 1 && $x != 0 ) {
if ( dbFetchCell ( 'SELECT 1 FROM information_schema.COLUMNS WHERE TABLE_NAME = ? && COLUMN_NAME = ?' , array ( $tables [ 0 ], $target )) == 1 ) {
return array_merge ( $last , array ( $tables [ 0 ] . '.' . $target ));
} else {
2016-06-22 08:42:48 +00:00
return false ;
}
2016-08-28 17:32:58 +00:00
} else {
2016-06-22 08:42:48 +00:00
$x ++ ;
2016-08-28 17:32:58 +00:00
if ( $x > 30 ) {
2016-06-22 08:42:48 +00:00
//Too much recursion. Abort.
return false ;
}
2016-08-28 17:32:58 +00:00
foreach ( $tables as $table ) {
$glues = dbFetchRows ( 'SELECT COLUMN_NAME FROM information_schema.COLUMNS WHERE TABLE_NAME = ? && COLUMN_NAME LIKE "%\_id"' , array ( $table ));
if ( sizeof ( $glues ) == 1 && $glues [ 0 ][ 'COLUMN_NAME' ] != $target ) {
2016-06-22 08:42:48 +00:00
//Search for new candidates to expand
$ntables = array ();
2016-08-28 17:32:58 +00:00
list ( $tmp ) = explode ( '_' , $glues [ 0 ][ 'COLUMN_NAME' ], 2 );
2016-06-22 08:42:48 +00:00
$ntables [] = $tmp ;
$ntables [] = $tmp . 's' ;
2016-08-28 17:32:58 +00:00
$tmp = dbFetchRows ( 'SELECT TABLE_NAME FROM information_schema.TABLES WHERE TABLE_NAME LIKE "' . substr ( $table , 0 , - 1 ) . '_%" && TABLE_NAME != "' . $table . '"' );
foreach ( $tmp as $expand ) {
2016-06-22 08:42:48 +00:00
$ntables [] = $expand [ 'TABLE_NAME' ];
}
2016-08-28 17:32:58 +00:00
$tmp = ResolveGlues ( $ntables , $target , $x ++ , array_merge ( $tables , $ntables ), array_merge ( $last , array ( $table . '.' . $glues [ 0 ][ 'COLUMN_NAME' ])));
if ( is_array ( $tmp )) {
2016-06-22 08:42:48 +00:00
return $tmp ;
}
2016-08-28 17:32:58 +00:00
} else {
foreach ( $glues as $glue ) {
if ( $glue [ 'COLUMN_NAME' ] == $target ) {
return array_merge ( $last , array ( $table . '.' . $target ));
} else {
list ( $tmp ) = explode ( '_' , $glue [ 'COLUMN_NAME' ]);
2016-06-22 08:42:48 +00:00
$tmp .= 's' ;
2016-08-28 17:32:58 +00:00
if ( ! in_array ( $tmp , $tables ) && ! in_array ( $tmp , $hist )) {
2016-06-22 08:42:48 +00:00
//Expand table
2016-08-28 17:32:58 +00:00
$tmp = ResolveGlues ( array ( $tmp ), $target , $x ++ , array_merge ( $tables , array ( $tmp )), array_merge ( $last , array ( $table . '.' . $glue [ 'COLUMN_NAME' ])));
if ( is_array ( $tmp )) {
2016-06-22 08:42:48 +00:00
return $tmp ;
}
}
}
}
}
}
}
//You should never get here.
return false ;
}
2016-08-19 19:57:08 +00:00
/**
* Determine if a given string contains a given substring .
*
2016-08-31 05:11:04 +00:00
* @ param string $haystack
* @ param string | array $needles
* @ param bool $case_insensitive
2016-08-19 19:57:08 +00:00
* @ return bool
*/
2016-08-31 05:11:04 +00:00
function str_contains ( $haystack , $needles , $case_insensitive = false )
2016-08-19 19:57:08 +00:00
{
2016-08-31 05:11:04 +00:00
if ( $case_insensitive ) {
foreach (( array ) $needles as $needle ) {
if ( $needle != '' && stripos ( $haystack , $needle ) !== false ) {
return true ;
}
2016-08-30 16:55:24 +00:00
}
2016-08-31 05:11:04 +00:00
} else {
foreach (( array ) $needles as $needle ) {
if ( $needle != '' && strpos ( $haystack , $needle ) !== false ) {
return true ;
}
2016-08-19 19:57:08 +00:00
}
}
return false ;
}
/**
* Determine if a given string ends with a given substring .
*
* @ param string $haystack
* @ param string | array $needles
2016-08-31 05:11:04 +00:00
* @ param bool $case_insensitive
2016-08-19 19:57:08 +00:00
* @ return bool
*/
2016-08-31 05:11:04 +00:00
function ends_with ( $haystack , $needles , $case_insensitive = false )
2016-08-19 19:57:08 +00:00
{
2016-08-31 05:11:04 +00:00
if ( $case_insensitive ) {
$lower_haystack = strtolower ( $haystack );
foreach (( array ) $needles as $needle ) {
if ( strtolower ( $needle ) === substr ( $lower_haystack , - strlen ( $needle ))) {
return true ;
}
}
} else {
foreach (( array ) $needles as $needle ) {
if (( string ) $needle === substr ( $haystack , - strlen ( $needle ))) {
return true ;
}
2016-08-19 19:57:08 +00:00
}
}
return false ;
}
/**
* Determine if a given string starts with a given substring .
*
* @ param string $haystack
* @ param string | array $needles
2016-08-31 05:11:04 +00:00
* @ param bool $case_insensitive
2016-08-19 19:57:08 +00:00
* @ return bool
*/
2016-08-31 05:11:04 +00:00
function starts_with ( $haystack , $needles , $case_insensitive = false )
2016-08-19 19:57:08 +00:00
{
2016-08-31 05:11:04 +00:00
if ( $case_insensitive ) {
foreach (( array ) $needles as $needle ) {
if ( $needle != '' && stripos ( $haystack , $needle ) === 0 ) {
return true ;
}
}
} else {
foreach (( array ) $needles as $needle ) {
if ( $needle != '' && strpos ( $haystack , $needle ) === 0 ) {
return true ;
}
2016-08-19 19:57:08 +00:00
}
}
return false ;
}
2016-09-23 21:45:51 +00:00
function get_auth_ad_user_filter ( $username )
{
global $config ;
$user_filter = " (samaccountname= $username ) " ;
if ( $config [ 'auth_ad_user_filter' ]) {
$user_filter = " (& { $config [ 'auth_ad_user_filter' ] } $user_filter ) " ;
}
return $user_filter ;
}
function get_auth_ad_group_filter ( $groupname )
{
global $config ;
$group_filter = " (samaccountname= $groupname ) " ;
if ( $config [ 'auth_ad_group_filter' ]) {
$group_filter = " (& { $config [ 'auth_ad_group_filter' ] } $group_filter ) " ;
}
return $group_filter ;
}
2016-10-15 19:45:18 +00:00
2016-11-23 17:41:13 +00:00
/**
* Print a list of items up to a max amount
* If over that number , a line will print the total items
*
* @ param array $list
* @ param string $format format as consumed by printf ()
* @ param int $max the max amount of items to print , default 10
*/
function print_list ( $list , $format , $max = 10 )
{
foreach ( array_slice ( $list , 0 , $max ) as $item ) {
printf ( $format , $item );
}
$extra = count ( $list ) - $max ;
if ( $extra > 0 ) {
printf ( $format , " and $extra more... " );
}
}
2016-10-15 19:45:18 +00:00
/**
* @ param $value
* @ return string
*/
function clean ( $value )
{
return strip_tags ( mres ( $value ));
}
/**
* @ param $value
* @ return string
*/
function display ( $value )
{
2016-11-26 20:54:49 +00:00
$purifier = new HTMLPurifier (
HTMLPurifier_Config :: createDefault ()
);
return $purifier -> purify ( stripslashes ( $value ));
2016-10-15 19:45:18 +00:00
}
2016-12-23 17:53:19 +00:00
/**
* @ param $device
* @ return array | mixed
*/
function load_os ( $device )
{
global $config ;
if ( isset ( $device [ 'os' ])) {
return Symfony\Component\Yaml\Yaml :: parse (
file_get_contents ( $config [ 'install_dir' ] . '/includes/definitions/' . $device [ 'os' ] . '.yaml' )
);
}
}
function load_all_os ( $restricted = array ())
{
global $config ;
if ( ! empty ( $restricted )) {
$list = $restricted ;
} else {
$list = glob ( $config [ 'install_dir' ] . '/includes/definitions/*.yaml' );
}
foreach ( $list as $file ) {
$tmp = Symfony\Component\Yaml\Yaml :: parse (
file_get_contents ( $file )
);
$config [ 'os' ][ $tmp [ 'os' ]] = $tmp ;
}
}