mirror of
https://github.com/librenms/librenms.git
synced 2024-10-07 16:52:45 +00:00
Keeps the look more in line with the navigation bar icons. In the future with Bootstrap 4, Glyphicons will not be included, so this starts the transistions away.
1358 lines
40 KiB
PHP
1358 lines
40 KiB
PHP
<?php
|
|
|
|
/**
|
|
* LibreNMS
|
|
*
|
|
* This file is part of LibreNMS
|
|
*
|
|
* @package librenms
|
|
* @subpackage functions
|
|
* @author LibreNMS Contributors <librenms-project@google.groups.com>
|
|
* @copyright (C) 2006 - 2012 Adam Armstrong (as Observium)
|
|
* @copyright (C) 2013 LibreNMS Group
|
|
*/
|
|
|
|
/**
|
|
* Compare $t with the value of $vars[$v], if that exists
|
|
* @param string $v Name of the var to test
|
|
* @param string $t Value to compare $vars[$v] to
|
|
* @return boolean true, if values are the same, false if $vars[$v] is unset or values differ
|
|
*/
|
|
function var_eq($v, $t)
|
|
{
|
|
global $vars;
|
|
if (isset($vars[$v]) && $vars[$v] == $t) {
|
|
return true;
|
|
}
|
|
|
|
return false;
|
|
}
|
|
|
|
/**
|
|
* Get the value of $vars[$v], if it exists
|
|
* @param string $v Name of the var to get
|
|
* @return string|boolean The value of $vars[$v] if it exists, false if it does not exist
|
|
*/
|
|
function var_get($v)
|
|
{
|
|
global $vars;
|
|
if (isset($vars[$v])) {
|
|
return $vars[$v];
|
|
}
|
|
|
|
return false;
|
|
}
|
|
|
|
|
|
function data_uri($file, $mime)
|
|
{
|
|
$contents = file_get_contents($file);
|
|
$base64 = base64_encode($contents);
|
|
return ('data:'.$mime.';base64,'.$base64);
|
|
}//end data_uri()
|
|
|
|
|
|
function nicecase($item)
|
|
{
|
|
switch ($item) {
|
|
case 'dbm':
|
|
return 'dBm';
|
|
|
|
case 'mysql':
|
|
return ' MySQL';
|
|
|
|
case 'powerdns':
|
|
return 'PowerDNS';
|
|
|
|
case 'bind':
|
|
return 'BIND';
|
|
|
|
case 'nfs-stats':
|
|
return 'NFS Stats';
|
|
|
|
case 'nfs-v3-stats':
|
|
return 'NFS v3 Stats';
|
|
|
|
case 'ntp-client':
|
|
return 'NTP Client';
|
|
|
|
case 'ntp-server':
|
|
return 'NTP Server';
|
|
|
|
case 'os-updates':
|
|
return 'OS Updates';
|
|
|
|
case 'powerdns-recursor':
|
|
return 'PowerDNS Recursor';
|
|
|
|
case 'dhcp-stats':
|
|
return 'DHCP Stats';
|
|
|
|
case 'ups-nut':
|
|
return 'UPS nut';
|
|
|
|
default:
|
|
return ucfirst($item);
|
|
}
|
|
}//end nicecase()
|
|
|
|
|
|
function toner2colour($descr, $percent)
|
|
{
|
|
$colour = get_percentage_colours(100 - $percent);
|
|
|
|
if (substr($descr, -1) == 'C' || stripos($descr, 'cyan') !== false) {
|
|
$colour['left'] = '55D6D3';
|
|
$colour['right'] = '33B4B1';
|
|
}
|
|
|
|
if (substr($descr, -1) == 'M' || stripos($descr, 'magenta') !== false) {
|
|
$colour['left'] = 'F24AC8';
|
|
$colour['right'] = 'D028A6';
|
|
}
|
|
|
|
if (substr($descr, -1) == 'Y' || stripos($descr, 'yellow') !== false
|
|
|| stripos($descr, 'giallo') !== false
|
|
|| stripos($descr, 'gul') !== false
|
|
) {
|
|
$colour['left'] = 'FFF200';
|
|
$colour['right'] = 'DDD000';
|
|
}
|
|
|
|
if (substr($descr, -1) == 'K' || stripos($descr, 'black') !== false
|
|
|| stripos($descr, 'nero') !== false
|
|
) {
|
|
$colour['left'] = '000000';
|
|
$colour['right'] = '222222';
|
|
}
|
|
|
|
return $colour;
|
|
}//end toner2colour()
|
|
|
|
|
|
function generate_link($text, $vars, $new_vars = array())
|
|
{
|
|
return '<a href="'.generate_url($vars, $new_vars).'">'.$text.'</a>';
|
|
}//end generate_link()
|
|
|
|
|
|
function generate_url($vars, $new_vars = array())
|
|
{
|
|
$vars = array_merge($vars, $new_vars);
|
|
|
|
$url = $vars['page'].'/';
|
|
unset($vars['page']);
|
|
|
|
foreach ($vars as $var => $value) {
|
|
if ($value == '0' || $value != '' && strstr($var, 'opt') === false && is_numeric($var) === false) {
|
|
$url .= $var.'='.urlencode($value).'/';
|
|
}
|
|
}
|
|
|
|
return ($url);
|
|
}//end generate_url()
|
|
|
|
|
|
function escape_quotes($text)
|
|
{
|
|
return str_replace('"', "\'", str_replace("'", "\'", $text));
|
|
}//end escape_quotes()
|
|
|
|
|
|
function generate_overlib_content($graph_array, $text)
|
|
{
|
|
global $config;
|
|
|
|
$overlib_content = '<div class=overlib><span class=overlib-text>'.$text.'</span><br />';
|
|
foreach (array('day', 'week', 'month', 'year') as $period) {
|
|
$graph_array['from'] = $config['time'][$period];
|
|
$overlib_content .= escape_quotes(generate_graph_tag($graph_array));
|
|
}
|
|
|
|
$overlib_content .= '</div>';
|
|
|
|
return $overlib_content;
|
|
}//end generate_overlib_content()
|
|
|
|
|
|
function get_percentage_colours($percentage)
|
|
{
|
|
$background = array();
|
|
if ($percentage > '90') {
|
|
$background['left'] = 'c4323f';
|
|
$background['right'] = 'C96A73';
|
|
} elseif ($percentage > '75') {
|
|
$background['left'] = 'bf5d5b';
|
|
$background['right'] = 'd39392';
|
|
} elseif ($percentage > '50') {
|
|
$background['left'] = 'bf875b';
|
|
$background['right'] = 'd3ae92';
|
|
} elseif ($percentage > '25') {
|
|
$background['left'] = '5b93bf';
|
|
$background['right'] = '92b7d3';
|
|
} else {
|
|
$background['left'] = '9abf5b';
|
|
$background['right'] = 'bbd392';
|
|
}
|
|
|
|
return ($background);
|
|
}//end get_percentage_colours()
|
|
|
|
|
|
function generate_minigraph_image($device, $start, $end, $type, $legend = 'no', $width = 275, $height = 100, $sep = '&', $class = 'minigraph-image', $absolute_size = 0)
|
|
{
|
|
return '<img class="'.$class.'" width="'.$width.'" height="'.$height.'" src="graph.php?'.implode($sep, array('device='.$device['device_id'], "from=$start", "to=$end", "width=$width", "height=$height", "type=$type", "legend=$legend", "absolute=$absolute_size")).'">';
|
|
}//end generate_minigraph_image()
|
|
|
|
|
|
function generate_device_url($device, $vars = array())
|
|
{
|
|
return generate_url(array('page' => 'device', 'device' => $device['device_id']), $vars);
|
|
}//end generate_device_url()
|
|
|
|
|
|
function generate_device_link($device, $text = null, $vars = array(), $start = 0, $end = 0, $escape_text = 1, $overlib = 1)
|
|
{
|
|
global $config;
|
|
|
|
if (!$start) {
|
|
$start = $config['time']['day'];
|
|
}
|
|
|
|
if (!$end) {
|
|
$end = $config['time']['now'];
|
|
}
|
|
|
|
$class = devclass($device);
|
|
if (!$text) {
|
|
$text = $device['hostname'];
|
|
}
|
|
|
|
$text = ip_to_sysname($device, $text);
|
|
|
|
if (isset($config['os'][$device['os']]['over'])) {
|
|
$graphs = $config['os'][$device['os']]['over'];
|
|
} elseif (isset($device['os_group']) && isset($config['os'][$device['os_group']]['over'])) {
|
|
$graphs = $config['os'][$device['os_group']]['over'];
|
|
} else {
|
|
$graphs = $config['os']['default']['over'];
|
|
}
|
|
|
|
$url = generate_device_url($device, $vars);
|
|
|
|
// beginning of overlib box contains large hostname followed by hardware & OS details
|
|
$contents = '<div><span class="list-large">'.$device['hostname'].'</span>';
|
|
if ($device['hardware']) {
|
|
$contents .= ' - '.$device['hardware'];
|
|
}
|
|
|
|
if ($device['os']) {
|
|
$contents .= ' - '.mres($config['os'][$device['os']]['text']);
|
|
}
|
|
|
|
if ($device['version']) {
|
|
$contents .= ' '.mres($device['version']);
|
|
}
|
|
|
|
if ($device['features']) {
|
|
$contents .= ' ('.mres($device['features']).')';
|
|
}
|
|
|
|
if (isset($device['location'])) {
|
|
$contents .= ' - '.htmlentities($device['location']);
|
|
}
|
|
|
|
$contents .= '</div>';
|
|
|
|
foreach ($graphs as $entry) {
|
|
$graph = $entry['graph'];
|
|
$graphhead = $entry['text'];
|
|
$contents .= '<div class="overlib-box">';
|
|
$contents .= '<span class="overlib-title">'.$graphhead.'</span><br />';
|
|
$contents .= generate_minigraph_image($device, $start, $end, $graph);
|
|
$contents .= generate_minigraph_image($device, $config['time']['week'], $end, $graph);
|
|
$contents .= '</div>';
|
|
}
|
|
|
|
if ($escape_text) {
|
|
$text = htmlentities($text);
|
|
}
|
|
|
|
if ($overlib == 0) {
|
|
$link = $contents;
|
|
} else {
|
|
$link = overlib_link($url, $text, escape_quotes($contents), $class);
|
|
}
|
|
|
|
if (device_permitted($device['device_id'])) {
|
|
return $link;
|
|
} else {
|
|
return $device['hostname'];
|
|
}
|
|
}//end generate_device_link()
|
|
|
|
|
|
function overlib_link($url, $text, $contents, $class)
|
|
{
|
|
global $config;
|
|
|
|
$contents = "<div style=\'background-color: #FFFFFF;\'>".$contents.'</div>';
|
|
$contents = str_replace('"', "\'", $contents);
|
|
$output = '<a class="'.$class.'" href="'.$url.'"';
|
|
if ($config['web_mouseover'] === false) {
|
|
$output .= '>';
|
|
} else {
|
|
$output .= " onmouseover=\"return overlib('".$contents."'".$config['overlib_defaults'].",WRAP,HAUTO,VAUTO); \" onmouseout=\"return nd();\">";
|
|
}
|
|
|
|
$output .= $text.'</a>';
|
|
|
|
return $output;
|
|
}//end overlib_link()
|
|
|
|
|
|
function generate_graph_popup($graph_array)
|
|
{
|
|
global $config;
|
|
|
|
// Take $graph_array and print day,week,month,year graps in overlib, hovered over graph
|
|
$original_from = $graph_array['from'];
|
|
|
|
$graph = generate_graph_tag($graph_array);
|
|
$content = '<div class=list-large>'.$graph_array['popup_title'].'</div>';
|
|
$content .= "<div style=\'width: 850px\'>";
|
|
$graph_array['legend'] = 'yes';
|
|
$graph_array['height'] = '100';
|
|
$graph_array['width'] = '340';
|
|
$graph_array['from'] = $config['time']['day'];
|
|
$content .= generate_graph_tag($graph_array);
|
|
$graph_array['from'] = $config['time']['week'];
|
|
$content .= generate_graph_tag($graph_array);
|
|
$graph_array['from'] = $config['time']['month'];
|
|
$content .= generate_graph_tag($graph_array);
|
|
$graph_array['from'] = $config['time']['year'];
|
|
$content .= generate_graph_tag($graph_array);
|
|
$content .= '</div>';
|
|
|
|
$graph_array['from'] = $original_from;
|
|
|
|
$graph_array['link'] = generate_url($graph_array, array('page' => 'graphs', 'height' => null, 'width' => null, 'bg' => null));
|
|
|
|
// $graph_array['link'] = "graphs/type=" . $graph_array['type'] . "/id=" . $graph_array['id'];
|
|
return overlib_link($graph_array['link'], $graph, $content, null);
|
|
}//end generate_graph_popup()
|
|
|
|
|
|
function print_graph_popup($graph_array)
|
|
{
|
|
echo generate_graph_popup($graph_array);
|
|
}//end print_graph_popup()
|
|
|
|
|
|
function permissions_cache($user_id)
|
|
{
|
|
$permissions = array();
|
|
foreach (dbFetchRows("SELECT * FROM devices_perms WHERE user_id = '".$user_id."'") as $device) {
|
|
$permissions['device'][$device['device_id']] = 1;
|
|
}
|
|
|
|
foreach (dbFetchRows("SELECT * FROM ports_perms WHERE user_id = '".$user_id."'") as $port) {
|
|
$permissions['port'][$port['port_id']] = 1;
|
|
}
|
|
|
|
foreach (dbFetchRows("SELECT * FROM bill_perms WHERE user_id = '".$user_id."'") as $bill) {
|
|
$permissions['bill'][$bill['bill_id']] = 1;
|
|
}
|
|
|
|
return $permissions;
|
|
}//end permissions_cache()
|
|
|
|
|
|
function bill_permitted($bill_id)
|
|
{
|
|
global $permissions;
|
|
|
|
if ($_SESSION['userlevel'] >= '5') {
|
|
$allowed = true;
|
|
} elseif ($permissions['bill'][$bill_id]) {
|
|
$allowed = true;
|
|
} else {
|
|
$allowed = false;
|
|
}
|
|
|
|
return $allowed;
|
|
}//end bill_permitted()
|
|
|
|
|
|
function port_permitted($port_id, $device_id = null)
|
|
{
|
|
global $permissions;
|
|
|
|
if (!is_numeric($device_id)) {
|
|
$device_id = get_device_id_by_port_id($port_id);
|
|
}
|
|
|
|
if ($_SESSION['userlevel'] >= '5') {
|
|
$allowed = true;
|
|
} elseif (device_permitted($device_id)) {
|
|
$allowed = true;
|
|
} elseif ($permissions['port'][$port_id]) {
|
|
$allowed = true;
|
|
} else {
|
|
$allowed = false;
|
|
}
|
|
|
|
return $allowed;
|
|
}//end port_permitted()
|
|
|
|
|
|
function application_permitted($app_id, $device_id = null)
|
|
{
|
|
global $permissions;
|
|
|
|
if (is_numeric($app_id)) {
|
|
if (!$device_id) {
|
|
$device_id = get_device_id_by_app_id($app_id);
|
|
}
|
|
|
|
if ($_SESSION['userlevel'] >= '5') {
|
|
$allowed = true;
|
|
} elseif (device_permitted($device_id)) {
|
|
$allowed = true;
|
|
} elseif ($permissions['application'][$app_id]) {
|
|
$allowed = true;
|
|
} else {
|
|
$allowed = false;
|
|
}
|
|
} else {
|
|
$allowed = false;
|
|
}
|
|
|
|
return $allowed;
|
|
}//end application_permitted()
|
|
|
|
|
|
function device_permitted($device_id)
|
|
{
|
|
global $permissions;
|
|
|
|
if ($_SESSION['userlevel'] >= '5') {
|
|
$allowed = true;
|
|
} elseif ($permissions['device'][$device_id]) {
|
|
$allowed = true;
|
|
} else {
|
|
$allowed = false;
|
|
}
|
|
|
|
return $allowed;
|
|
}//end device_permitted()
|
|
|
|
|
|
function print_graph_tag($args)
|
|
{
|
|
echo generate_graph_tag($args);
|
|
}//end print_graph_tag()
|
|
|
|
|
|
function generate_graph_tag($args)
|
|
{
|
|
$urlargs = array();
|
|
foreach ($args as $key => $arg) {
|
|
$urlargs[] = $key.'='.urlencode($arg);
|
|
}
|
|
|
|
return '<img src="graph.php?'.implode('&', $urlargs).'" border="0" />';
|
|
}//end generate_graph_tag()
|
|
|
|
function generate_lazy_graph_tag($args)
|
|
{
|
|
global $config;
|
|
$urlargs = array();
|
|
$w = 0;
|
|
$h = 0;
|
|
foreach ($args as $key => $arg) {
|
|
switch (strtolower($key)) {
|
|
case 'width':
|
|
$w = $arg;
|
|
break;
|
|
case 'height':
|
|
$h = $arg;
|
|
break;
|
|
case 'lazy_w':
|
|
$lazy_w = $arg;
|
|
break;
|
|
}
|
|
$urlargs[] = $key."=".urlencode($arg);
|
|
}
|
|
|
|
if (isset($lazy_w)) {
|
|
$w=$lazy_w;
|
|
}
|
|
|
|
if ($config['enable_lazy_load'] === true) {
|
|
return '<img class="lazy img-responsive" data-original="graph.php?' . implode('&', $urlargs).'" border="0" />';
|
|
} else {
|
|
return '<img class="img-responsive" src="graph.php?' . implode('&', $urlargs).'" border="0" />';
|
|
}
|
|
}//end generate_lazy_graph_tag()
|
|
|
|
|
|
function generate_graph_js_state($args)
|
|
{
|
|
// we are going to assume we know roughly what the graph url looks like here.
|
|
// TODO: Add sensible defaults
|
|
$from = (is_numeric($args['from']) ? $args['from'] : 0);
|
|
$to = (is_numeric($args['to']) ? $args['to'] : 0);
|
|
$width = (is_numeric($args['width']) ? $args['width'] : 0);
|
|
$height = (is_numeric($args['height']) ? $args['height'] : 0);
|
|
$legend = str_replace("'", '', $args['legend']);
|
|
|
|
$state = <<<STATE
|
|
<script type="text/javascript" language="JavaScript">
|
|
document.graphFrom = $from;
|
|
document.graphTo = $to;
|
|
document.graphWidth = $width;
|
|
document.graphHeight = $height;
|
|
document.graphLegend = '$legend';
|
|
</script>
|
|
STATE;
|
|
|
|
return $state;
|
|
}//end generate_graph_js_state()
|
|
|
|
|
|
function print_percentage_bar($width, $height, $percent, $left_text, $left_colour, $left_background, $right_text, $right_colour, $right_background)
|
|
{
|
|
if ($percent > '100') {
|
|
$size_percent = '100';
|
|
} else {
|
|
$size_percent = $percent;
|
|
}
|
|
|
|
$output = '
|
|
<div class="container" style="width:'.$width.'px; height:'.$height.'px;">
|
|
<div class="progress" style="min-width: 2em; background-color:#'.$right_background.'; height:'.$height.'px;">
|
|
<div class="progress-bar" role="progressbar" aria-valuenow="'.$size_percent.'" aria-valuemin="0" aria-valuemax="100" style="min-width: 2em; width:'.$size_percent.'%; background-color: #'.$left_background.';">
|
|
</div>
|
|
</div>
|
|
<b class="pull-left" style="padding-left: 4px; height: '.$height.'px;margin-top:-'.($height * 2).'px; color:#'.$left_colour.';">'.$left_text.'</b>
|
|
<b class="pull-right" style="padding-right: 4px; height: '.$height.'px;margin-top:-'.($height * 2).'px; color:#'.$right_colour.';">'.$right_text.'</b>
|
|
</div>
|
|
';
|
|
|
|
return $output;
|
|
}//end print_percentage_bar()
|
|
|
|
|
|
function generate_entity_link($type, $entity, $text = null, $graph_type = null)
|
|
{
|
|
global $config, $entity_cache;
|
|
|
|
if (is_numeric($entity)) {
|
|
$entity = get_entity_by_id_cache($type, $entity);
|
|
}
|
|
|
|
switch ($type) {
|
|
case 'port':
|
|
$link = generate_port_link($entity, $text, $graph_type);
|
|
break;
|
|
|
|
case 'storage':
|
|
if (empty($text)) {
|
|
$text = $entity['storage_descr'];
|
|
}
|
|
|
|
$link = generate_link($text, array('page' => 'device', 'device' => $entity['device_id'], 'tab' => 'health', 'metric' => 'storage'));
|
|
break;
|
|
|
|
default:
|
|
$link = $entity[$type.'_id'];
|
|
}
|
|
|
|
return ($link);
|
|
}//end generate_entity_link()
|
|
|
|
|
|
function generate_port_link($port, $text = null, $type = null, $overlib = 1, $single_graph = 0)
|
|
{
|
|
global $config;
|
|
|
|
$graph_array = array();
|
|
$port = ifNameDescr($port);
|
|
if (!$text) {
|
|
$text = fixifName($port['label']);
|
|
}
|
|
|
|
if ($type) {
|
|
$port['graph_type'] = $type;
|
|
}
|
|
|
|
if (!isset($port['graph_type'])) {
|
|
$port['graph_type'] = 'port_bits';
|
|
}
|
|
|
|
$class = ifclass($port['ifOperStatus'], $port['ifAdminStatus']);
|
|
|
|
if (!isset($port['hostname'])) {
|
|
$port = array_merge($port, device_by_id_cache($port['device_id']));
|
|
}
|
|
|
|
$content = '<div class=list-large>'.$port['hostname'].' - '.fixifName($port['label']).'</div>';
|
|
if ($port['ifAlias']) {
|
|
$content .= escape_quotes($port['ifAlias']).'<br />';
|
|
}
|
|
|
|
$content .= "<div style=\'width: 850px\'>";
|
|
$graph_array['type'] = $port['graph_type'];
|
|
$graph_array['legend'] = 'yes';
|
|
$graph_array['height'] = '100';
|
|
$graph_array['width'] = '340';
|
|
$graph_array['to'] = $config['time']['now'];
|
|
$graph_array['from'] = $config['time']['day'];
|
|
$graph_array['id'] = $port['port_id'];
|
|
$content .= generate_graph_tag($graph_array);
|
|
if ($single_graph == 0) {
|
|
$graph_array['from'] = $config['time']['week'];
|
|
$content .= generate_graph_tag($graph_array);
|
|
$graph_array['from'] = $config['time']['month'];
|
|
$content .= generate_graph_tag($graph_array);
|
|
$graph_array['from'] = $config['time']['year'];
|
|
$content .= generate_graph_tag($graph_array);
|
|
}
|
|
|
|
$content .= '</div>';
|
|
|
|
$url = generate_port_url($port);
|
|
|
|
if ($overlib == 0) {
|
|
return $content;
|
|
} elseif (port_permitted($port['port_id'], $port['device_id'])) {
|
|
return overlib_link($url, $text, $content, $class);
|
|
} else {
|
|
return fixifName($text);
|
|
}
|
|
}//end generate_port_link()
|
|
|
|
|
|
function generate_port_url($port, $vars = array())
|
|
{
|
|
return generate_url(array('page' => 'device', 'device' => $port['device_id'], 'tab' => 'port', 'port' => $port['port_id']), $vars);
|
|
}//end generate_port_url()
|
|
|
|
|
|
function generate_peer_url($peer, $vars = array())
|
|
{
|
|
return generate_url(array('page' => 'device', 'device' => $peer['device_id'], 'tab' => 'routing', 'proto' => 'bgp'), $vars);
|
|
}//end generate_peer_url()
|
|
|
|
|
|
function generate_bill_url($bill, $vars = array())
|
|
{
|
|
return generate_url(array('page' => 'bill', 'bill_id' => $bill['bill_id']), $vars);
|
|
}//end generate_bill_url()
|
|
|
|
|
|
function generate_port_image($args)
|
|
{
|
|
if (!$args['bg']) {
|
|
$args['bg'] = 'FFFFFF';
|
|
}
|
|
|
|
return "<img src='graph.php?type=".$args['graph_type'].'&id='.$args['port_id'].'&from='.$args['from'].'&to='.$args['to'].'&width='.$args['width'].'&height='.$args['height'].'&bg='.$args['bg']."'>";
|
|
}//end generate_port_image()
|
|
|
|
|
|
function generate_port_thumbnail($port)
|
|
{
|
|
global $config;
|
|
$port['graph_type'] = 'port_bits';
|
|
$port['from'] = $config['time']['day'];
|
|
$port['to'] = $config['time']['now'];
|
|
$port['width'] = 150;
|
|
$port['height'] = 21;
|
|
return generate_port_image($port);
|
|
}//end generate_port_thumbnail()
|
|
|
|
|
|
function print_port_thumbnail($args)
|
|
{
|
|
echo generate_port_link($args, generate_port_image($args));
|
|
}//end print_port_thumbnail()
|
|
|
|
|
|
function print_optionbar_start($height = 0, $width = 0, $marginbottom = 5)
|
|
{
|
|
echo '
|
|
<div class="well well-sm">
|
|
';
|
|
}//end print_optionbar_start()
|
|
|
|
|
|
function print_optionbar_end()
|
|
{
|
|
echo ' </div>';
|
|
}//end print_optionbar_end()
|
|
|
|
|
|
function geteventicon($message)
|
|
{
|
|
if ($message == 'Device status changed to Down') {
|
|
$icon = 'server_connect.png';
|
|
}
|
|
|
|
if ($message == 'Device status changed to Up') {
|
|
$icon = 'server_go.png';
|
|
}
|
|
|
|
if ($message == 'Interface went down' || $message == 'Interface changed state to Down') {
|
|
$icon = 'if-disconnect.png';
|
|
}
|
|
|
|
if ($message == 'Interface went up' || $message == 'Interface changed state to Up') {
|
|
$icon = 'if-connect.png';
|
|
}
|
|
|
|
if ($message == 'Interface disabled') {
|
|
$icon = 'if-disable.png';
|
|
}
|
|
|
|
if ($message == 'Interface enabled') {
|
|
$icon = 'if-enable.png';
|
|
}
|
|
|
|
if (isset($icon)) {
|
|
return $icon;
|
|
} else {
|
|
return false;
|
|
}
|
|
}//end geteventicon()
|
|
|
|
|
|
function overlibprint($text)
|
|
{
|
|
return "onmouseover=\"return overlib('".$text."');\" onmouseout=\"return nd();\"";
|
|
}//end overlibprint()
|
|
|
|
|
|
function humanmedia($media)
|
|
{
|
|
global $rewrite_iftype;
|
|
array_preg_replace($rewrite_iftype, $media);
|
|
return $media;
|
|
}//end humanmedia()
|
|
|
|
|
|
function humanspeed($speed)
|
|
{
|
|
$speed = formatRates($speed);
|
|
if ($speed == '') {
|
|
$speed = '-';
|
|
}
|
|
|
|
return $speed;
|
|
}//end humanspeed()
|
|
|
|
|
|
function devclass($device)
|
|
{
|
|
if (isset($device['status']) && $device['status'] == '0') {
|
|
$class = 'list-device-down';
|
|
} else {
|
|
$class = 'list-device';
|
|
}
|
|
|
|
if (isset($device['ignore']) && $device['ignore'] == '1') {
|
|
$class = 'list-device-ignored';
|
|
if (isset($device['status']) && $device['status'] == '1') {
|
|
$class = 'list-device-ignored-up';
|
|
}
|
|
}
|
|
|
|
if (isset($device['disabled']) && $device['disabled'] == '1') {
|
|
$class = 'list-device-disabled';
|
|
}
|
|
|
|
return $class;
|
|
}//end devclass()
|
|
|
|
|
|
function getlocations()
|
|
{
|
|
$locations = array();
|
|
|
|
// Fetch regular locations
|
|
if ($_SESSION['userlevel'] >= '5') {
|
|
$rows = dbFetchRows('SELECT D.device_id,location FROM devices AS D GROUP BY location ORDER BY location');
|
|
} else {
|
|
$rows = dbFetchRows('SELECT D.device_id,location FROM devices AS D, devices_perms AS P WHERE D.device_id = P.device_id AND P.user_id = ? GROUP BY location ORDER BY location', array($_SESSION['user_id']));
|
|
}
|
|
|
|
foreach ($rows as $row) {
|
|
// Only add it as a location if it wasn't overridden (and not already there)
|
|
if ($row['location'] != '') {
|
|
if (!in_array($row['location'], $locations)) {
|
|
$locations[] = $row['location'];
|
|
}
|
|
}
|
|
}
|
|
|
|
sort($locations);
|
|
return $locations;
|
|
}//end getlocations()
|
|
|
|
|
|
function foldersize($path)
|
|
{
|
|
$total_size = 0;
|
|
$files = scandir($path);
|
|
$total_files = 0;
|
|
|
|
foreach ($files as $t) {
|
|
if (is_dir(rtrim($path, '/').'/'.$t)) {
|
|
if ($t <> '.' && $t <> '..') {
|
|
$size = foldersize(rtrim($path, '/').'/'.$t);
|
|
$total_size += $size;
|
|
}
|
|
} else {
|
|
$size = filesize(rtrim($path, '/').'/'.$t);
|
|
$total_size += $size;
|
|
$total_files++;
|
|
}
|
|
}
|
|
|
|
return array(
|
|
$total_size,
|
|
$total_files,
|
|
);
|
|
}//end foldersize()
|
|
|
|
|
|
function generate_ap_link($args, $text = null, $type = null)
|
|
{
|
|
global $config;
|
|
|
|
$args = ifNameDescr($args);
|
|
if (!$text) {
|
|
$text = fixIfName($args['label']);
|
|
}
|
|
|
|
if ($type) {
|
|
$args['graph_type'] = $type;
|
|
}
|
|
|
|
if (!isset($args['graph_type'])) {
|
|
$args['graph_type'] = 'port_bits';
|
|
}
|
|
|
|
if (!isset($args['hostname'])) {
|
|
$args = array_merge($args, device_by_id_cache($args['device_id']));
|
|
}
|
|
|
|
$content = '<div class=list-large>'.$args['text'].' - '.fixifName($args['label']).'</div>';
|
|
if ($args['ifAlias']) {
|
|
$content .= $args['ifAlias'].'<br />';
|
|
}
|
|
|
|
$content .= "<div style=\'width: 850px\'>";
|
|
$graph_array = array();
|
|
$graph_array['type'] = $args['graph_type'];
|
|
$graph_array['legend'] = 'yes';
|
|
$graph_array['height'] = '100';
|
|
$graph_array['width'] = '340';
|
|
$graph_array['to'] = $config['time']['now'];
|
|
$graph_array['from'] = $config['time']['day'];
|
|
$graph_array['id'] = $args['accesspoint_id'];
|
|
$content .= generate_graph_tag($graph_array);
|
|
$graph_array['from'] = $config['time']['week'];
|
|
$content .= generate_graph_tag($graph_array);
|
|
$graph_array['from'] = $config['time']['month'];
|
|
$content .= generate_graph_tag($graph_array);
|
|
$graph_array['from'] = $config['time']['year'];
|
|
$content .= generate_graph_tag($graph_array);
|
|
$content .= '</div>';
|
|
|
|
$url = generate_ap_url($args);
|
|
if (port_permitted($args['interface_id'], $args['device_id'])) {
|
|
return overlib_link($url, $text, $content, null);
|
|
} else {
|
|
return fixifName($text);
|
|
}
|
|
}//end generate_ap_link()
|
|
|
|
|
|
function generate_ap_url($ap, $vars = array())
|
|
{
|
|
return generate_url(array('page' => 'device', 'device' => $ap['device_id'], 'tab' => 'accesspoint', 'ap' => $ap['accesspoint_id']), $vars);
|
|
}//end generate_ap_url()
|
|
|
|
function report_this_text($message)
|
|
{
|
|
global $config;
|
|
return $message.'\nPlease report this to the '.$config['project_name'].' developers at '.$config['project_issues'].'\n';
|
|
}//end report_this_text()
|
|
|
|
|
|
// Find all the files in the given directory that match the pattern
|
|
|
|
|
|
function get_matching_files($dir, $match = '/\.php$/')
|
|
{
|
|
global $config;
|
|
|
|
$list = array();
|
|
if ($handle = opendir($dir)) {
|
|
while (false !== ($file = readdir($handle))) {
|
|
if ($file != '.' && $file != '..' && preg_match($match, $file) === 1) {
|
|
$list[] = $file;
|
|
}
|
|
}
|
|
|
|
closedir($handle);
|
|
}
|
|
|
|
return $list;
|
|
}//end get_matching_files()
|
|
|
|
|
|
// Include all the files in the given directory that match the pattern
|
|
|
|
|
|
function include_matching_files($dir, $match = '/\.php$/')
|
|
{
|
|
foreach (get_matching_files($dir, $match) as $file) {
|
|
include_once $file;
|
|
}
|
|
}//end include_matching_files()
|
|
|
|
|
|
function generate_pagination($count, $limit, $page, $links = 2)
|
|
{
|
|
$end_page = ceil($count / $limit);
|
|
$start = (($page - $links) > 0) ? ($page - $links) : 1;
|
|
$end = (($page + $links) < $end_page) ? ($page + $links) : $end_page;
|
|
$return = '<ul class="pagination">';
|
|
$link_class = ($page == 1) ? 'disabled' : '';
|
|
$return .= "<li><a href='' onClick='changePage(1,event);'>«</a></li>";
|
|
$return .= "<li class='$link_class'><a href='' onClick='changePage($page - 1,event);'><</a></li>";
|
|
|
|
if ($start > 1) {
|
|
$return .= "<li><a href='' onClick='changePage(1,event);'>1</a></li>";
|
|
$return .= "<li class='disabled'><span>...</span></li>";
|
|
}
|
|
|
|
for ($x = $start; $x <= $end; $x++) {
|
|
$link_class = ($page == $x) ? 'active' : '';
|
|
$return .= "<li class='$link_class'><a href='' onClick='changePage($x,event);'>$x </a></li>";
|
|
}
|
|
|
|
if ($end < $end_page) {
|
|
$return .= "<li class='disabled'><span>...</span></li>";
|
|
$return .= "<li><a href='' onClick='changePage($end_page,event);'>$end_page</a></li>";
|
|
}
|
|
|
|
$link_class = ($page == $end_page) ? 'disabled' : '';
|
|
$return .= "<li class='$link_class'><a href='' onClick='changePage($page + 1,event);'>></a></li>";
|
|
$return .= "<li class='$link_class'><a href='' onClick='changePage($end_page,event);'>»</a></li>";
|
|
$return .= '</ul>';
|
|
return ($return);
|
|
}//end generate_pagination()
|
|
|
|
|
|
function is_admin()
|
|
{
|
|
if ($_SESSION['userlevel'] >= '10') {
|
|
$allowed = true;
|
|
} else {
|
|
$allowed = false;
|
|
}
|
|
|
|
return $allowed;
|
|
}//end is_admin()
|
|
|
|
|
|
function is_read()
|
|
{
|
|
if ($_SESSION['userlevel'] == '5') {
|
|
$allowed = true;
|
|
} else {
|
|
$allowed = false;
|
|
}
|
|
|
|
return $allowed;
|
|
}//end is_read()
|
|
|
|
function is_demo_user()
|
|
{
|
|
|
|
if ($_SESSION['userlevel'] == 11) {
|
|
return true;
|
|
} else {
|
|
return false;
|
|
}
|
|
}// end is_demo_user();
|
|
|
|
function is_normal_user()
|
|
{
|
|
|
|
if (is_admin() === false && is_read() === false && is_demo_user() === false) {
|
|
return true;
|
|
} else {
|
|
return false;
|
|
}
|
|
}// end is_normal_user()
|
|
|
|
function demo_account()
|
|
{
|
|
print_error("You are logged in as a demo account, this page isn't accessible to you");
|
|
}//end demo_account()
|
|
|
|
|
|
function get_client_ip()
|
|
{
|
|
if (isset($_SERVER['HTTP_X_FORWARDED_FOR'])) {
|
|
$client_ip = $_SERVER['HTTP_X_FORWARDED_FOR'];
|
|
} else {
|
|
$client_ip = $_SERVER['REMOTE_ADDR'];
|
|
}
|
|
|
|
return $client_ip;
|
|
}//end get_client_ip()
|
|
|
|
|
|
function shorten_interface_type($string)
|
|
{
|
|
return str_ireplace(
|
|
array(
|
|
'FastEthernet',
|
|
'TenGigabitEthernet',
|
|
'GigabitEthernet',
|
|
'Port-Channel',
|
|
'Ethernet',
|
|
),
|
|
array(
|
|
'Fa',
|
|
'Te',
|
|
'Gi',
|
|
'Po',
|
|
'Eth',
|
|
),
|
|
$string
|
|
);
|
|
}//end shorten_interface_type()
|
|
|
|
|
|
function clean_bootgrid($string)
|
|
{
|
|
$output = str_replace(array("\r", "\n"), '', $string);
|
|
$output = addslashes($output);
|
|
return $output;
|
|
}//end clean_bootgrid()
|
|
|
|
|
|
// Insert new config items
|
|
function add_config_item($new_conf_name, $new_conf_value, $new_conf_type, $new_conf_desc)
|
|
{
|
|
if (dbInsert(array('config_name' => $new_conf_name, 'config_value' => $new_conf_value, 'config_default' => $new_conf_value, 'config_type' => $new_conf_type, 'config_desc' => $new_conf_desc, 'config_group' => '500_Custom Settings', 'config_sub_group' => '01_Custom settings', 'config_hidden' => '0', 'config_disabled' => '0'), 'config')) {
|
|
$db_inserted = 1;
|
|
} else {
|
|
$db_inserted = 0;
|
|
}
|
|
|
|
return ($db_inserted);
|
|
}//end add_config_item()
|
|
|
|
|
|
function get_config_by_group($group)
|
|
{
|
|
$group = array($group);
|
|
$items = array();
|
|
foreach (dbFetchRows("SELECT * FROM `config` WHERE `config_group` = '?'", array($group)) as $config_item) {
|
|
$val = $config_item['config_value'];
|
|
if (filter_var($val, FILTER_VALIDATE_INT)) {
|
|
$val = (int) $val;
|
|
} elseif (filter_var($val, FILTER_VALIDATE_FLOAT)) {
|
|
$val = (float) $val;
|
|
} elseif (filter_var($val, FILTER_VALIDATE_BOOLEAN)) {
|
|
$val = (boolean) $val;
|
|
}
|
|
|
|
if ($val === true) {
|
|
$config_item += array('config_checked' => 'checked');
|
|
}
|
|
|
|
$items[$config_item['config_name']] = $config_item;
|
|
}
|
|
|
|
return $items;
|
|
}//end get_config_by_group()
|
|
|
|
|
|
function get_config_like_name($name)
|
|
{
|
|
$name = array($name);
|
|
$items = array();
|
|
foreach (dbFetchRows("SELECT * FROM `config` WHERE `config_name` LIKE '%?%'", array($name)) as $config_item) {
|
|
$items[$config_item['config_id']] = $config_item;
|
|
}
|
|
|
|
return $items;
|
|
}//end get_config_like_name()
|
|
|
|
|
|
function get_config_by_name($name)
|
|
{
|
|
$config_item = dbFetchRow('SELECT * FROM `config` WHERE `config_name` = ?', array($name));
|
|
return $config_item;
|
|
}//end get_config_by_name()
|
|
|
|
|
|
function set_config_name($name, $config_value)
|
|
{
|
|
return dbUpdate(array('config_value' => $config_value), 'config', '`config_name`=?', array($name));
|
|
}//end set_config_name()
|
|
|
|
|
|
function get_url()
|
|
{
|
|
// http://stackoverflow.com/questions/2820723/how-to-get-base-url-with-php
|
|
// http://stackoverflow.com/users/184600/ma%C4%8Dek
|
|
return sprintf(
|
|
'%s://%s%s',
|
|
isset($_SERVER['HTTPS']) && $_SERVER['HTTPS'] != 'off' ? 'https' : 'http',
|
|
$_SERVER['SERVER_NAME'],
|
|
$_SERVER['REQUEST_URI']
|
|
);
|
|
}//end get_url()
|
|
|
|
|
|
function alert_details($details)
|
|
{
|
|
if (!is_array($details)) {
|
|
$details = json_decode(gzuncompress($details), true);
|
|
}
|
|
|
|
$fault_detail = '';
|
|
foreach ($details['rule'] as $o => $tmp_alerts) {
|
|
$fallback = true;
|
|
$fault_detail .= '#'.($o + 1).': ';
|
|
if ($tmp_alerts['bill_id']) {
|
|
$fault_detail .= '<a href="'.generate_bill_url($tmp_alerts).'">'.$tmp_alerts['bill_name'].'</a>; ';
|
|
$fallback = false;
|
|
}
|
|
|
|
if ($tmp_alerts['port_id']) {
|
|
$fault_detail .= generate_port_link($tmp_alerts).'; ';
|
|
$fallback = false;
|
|
}
|
|
|
|
if ($tmp_alerts['type'] && $tmp_alerts['label']) {
|
|
if ($tmp_alerts['error'] == "") {
|
|
$fault_detail .= ' '.$tmp_alerts['type'].' - '.$tmp_alerts['label'].'; ';
|
|
} else {
|
|
$fault_detail .= ' '.$tmp_alerts['type'].' - '.$tmp_alerts['label'].' - '.$tmp_alerts['error'].'; ';
|
|
}
|
|
$fallback = false;
|
|
}
|
|
|
|
if ($fallback === true) {
|
|
foreach ($tmp_alerts as $k => $v) {
|
|
if (!empty($v) && $k != 'device_id' && (stristr($k, 'id') || stristr($k, 'desc') || stristr($k, 'msg')) && substr_count($k, '_') <= 1) {
|
|
$fault_detail .= "$k => '$v', ";
|
|
}
|
|
}
|
|
|
|
$fault_detail = rtrim($fault_detail, ', ');
|
|
}
|
|
|
|
$fault_detail .= '<br>';
|
|
}//end foreach
|
|
|
|
return $fault_detail;
|
|
}//end alert_details()
|
|
|
|
function dynamic_override_config($type, $name, $device)
|
|
{
|
|
$attrib_val = get_dev_attrib($device, $name);
|
|
if ($attrib_val == 'true') {
|
|
$checked = 'checked';
|
|
} else {
|
|
$checked = '';
|
|
}
|
|
if ($type == 'checkbox') {
|
|
return '<input type="checkbox" id="override_config" name="override_config" data-attrib="'.$name.'" data-device_id="'.$device['device_id'].'" data-size="small" '.$checked.'>';
|
|
} elseif ($type == 'text') {
|
|
return '<input type="text" id="override_config_text" name="override_config_text" data-attrib="'.$name.'" data-device_id="'.$device['device_id'].'" value="'.$attrib_val.'">';
|
|
}
|
|
}//end dynamic_override_config()
|
|
|
|
function generate_dynamic_config_panel($title, $config_groups, $items = array(), $transport = '', $end_panel = true)
|
|
{
|
|
$anchor = md5($title);
|
|
$output = '
|
|
<div class="panel panel-default">
|
|
<div class="panel-heading">
|
|
<h4 class="panel-title">
|
|
<a data-toggle="collapse" data-parent="#accordion" href="#'.$anchor.'"><i class="fa fa-caret-down"></i> '.$title.'</a>
|
|
';
|
|
if (!empty($transport)) {
|
|
$output .= '<button name="test-alert" id="test-alert" type="button" data-transport="'.$transport.'" class="btn btn-primary btn-xs pull-right">Test transport</button>';
|
|
}
|
|
$output .= '
|
|
</h4>
|
|
</div>
|
|
<div id="'.$anchor.'" class="panel-collapse collapse">
|
|
<div class="panel-body">
|
|
';
|
|
|
|
if (!empty($items)) {
|
|
foreach ($items as $item) {
|
|
$output .= '
|
|
<div class="form-group has-feedback">
|
|
<label for="'.$item['name'].'"" class="col-sm-4 control-label">'.$item['descr'].' </label>
|
|
<div data-toggle="tooltip" title="'.$config_groups[$item['name']]['config_descr'].'" class="toolTip fa fa-fw fa-lg fa-question-circle"></div>
|
|
<div class="col-sm-4">
|
|
';
|
|
if ($item['type'] == 'checkbox') {
|
|
$output .= '<input id="'.$item['name'].'" type="checkbox" name="global-config-check" '.$config_groups[$item['name']]['config_checked'].' data-on-text="Yes" data-off-text="No" data-size="small" data-config_id="'.$config_groups[$item['name']]['config_id'].'">';
|
|
} elseif ($item['type'] == 'text') {
|
|
$output .= '
|
|
<input id="'.$item['name'].'" class="form-control" type="text" name="global-config-input" value="'.$config_groups[$item['name']]['config_value'].'" data-config_id="'.$config_groups[$item['name']]['config_id'].'">
|
|
<span class="form-control-feedback"><i class="fa" aria-hidden="true"></i></span>
|
|
';
|
|
} elseif ($item['type'] == 'select') {
|
|
$output .= '
|
|
<select id="'.$config_groups[$item['name']]['name'].'" class="form-control" name="global-config-select" data-config_id="'.$config_groups[$item['name']]['config_id'].'">
|
|
';
|
|
if (!empty($item['options'])) {
|
|
foreach ($item['options'] as $option) {
|
|
if (gettype($option) == 'string') {
|
|
/* for backwards-compatibility */
|
|
$tmp_opt = $option;
|
|
$option = array(
|
|
'value' => $tmp_opt,
|
|
'description' => $tmp_opt,
|
|
);
|
|
}
|
|
$output .= '<option value="'.$option['value'].'"';
|
|
if ($option['value'] == $config_groups[$item['name']]['config_value']) {
|
|
$output .= ' selected';
|
|
}
|
|
$output .= '>'.$option['description'].'</option>';
|
|
}
|
|
}
|
|
$output .='
|
|
</select>
|
|
<span class="form-control-feedback"><i class="fa" aria-hidden="true"></i></span>
|
|
';
|
|
}
|
|
$output .= '
|
|
</div>
|
|
</div>
|
|
';
|
|
}
|
|
}
|
|
|
|
if ($end_panel === true) {
|
|
$output .= '
|
|
</div>
|
|
</div>
|
|
</div>
|
|
';
|
|
}
|
|
return $output;
|
|
}//end generate_dynamic_config_panel()
|
|
|
|
function get_ripe_api_whois_data_json($ripe_data_param, $ripe_query_param)
|
|
{
|
|
$ripe_whois_url = 'https://stat.ripe.net/data/'. $ripe_data_param . '/data.json?resource=' . $ripe_query_param;
|
|
return json_decode(file_get_contents($ripe_whois_url), true);
|
|
}//end get_ripe_api_whois_data_json()
|
|
|
|
/**
|
|
* Return the rows from 'ports' for all ports of a certain type as parsed by port_descr_parser.
|
|
* One or an array of strings can be provided as an argument; if an array is passed, all ports matching
|
|
* any of the types in the array are returned.
|
|
* @param $types mixed String or strings matching 'port_descr_type's.
|
|
* @return array Rows from the ports table for matching ports.
|
|
*/
|
|
function get_ports_from_type($given_types)
|
|
{
|
|
global $config;
|
|
|
|
# Make the arg an array if it isn't, so subsequent steps only have to handle arrays.
|
|
if (!is_array($given_types)) {
|
|
$given_types = array($given_types);
|
|
}
|
|
|
|
# Check the config for a '_descr' entry for each argument. This is how a 'custom_descr' entry can
|
|
# be key/valued to some other string that's actually searched for in the DB. Merge or append the
|
|
# configured value if it's an array or a string. Or append the argument itself if there's no matching
|
|
# entry in config.
|
|
$search_types = array();
|
|
foreach ($given_types as $type) {
|
|
if (isset($config[$type.'_descr']) === true) {
|
|
if (is_array($config[$type.'_descr']) === true) {
|
|
$search_types = array_merge($search_types, $config[$type.'_descr']);
|
|
} else {
|
|
$search_types[] = $config[$type.'_descr'];
|
|
}
|
|
} else {
|
|
$search_types[] = $type;
|
|
}
|
|
}
|
|
|
|
# Using the full list of strings to search the DB for, build the 'where' portion of a query that
|
|
# compares 'port_descr_type' with entry in the list. Also, since '@' is the convential wildcard,
|
|
# replace it with '%' so it functions as a wildcard in the SQL query.
|
|
$type_where = ' (';
|
|
$or = '';
|
|
$type_param = array();
|
|
|
|
foreach ($search_types as $type) {
|
|
if (!empty($type)) {
|
|
$type = strtr($type, '@', '%');
|
|
$type_where .= " $or `port_descr_type` LIKE ?";
|
|
$or = 'OR';
|
|
$type_param[] = $type;
|
|
}
|
|
}
|
|
$type_where .= ') ';
|
|
|
|
# Run the query with the generated 'where' and necessary parameters, and send it back.
|
|
$ports = dbFetchRows("SELECT * FROM `ports` as I, `devices` AS D WHERE $type_where AND I.device_id = D.device_id ORDER BY I.ifAlias", $type_param);
|
|
return $ports;
|
|
}
|
|
|
|
function ipmiSensorName($hardwareId, $sensorIpmi, $rewriteArray)
|
|
{
|
|
if (count($rewriteArray[$hardwareId]) > 0) {
|
|
if ($rewriteArray[$hardwareId][$sensorIpmi] != "") {
|
|
return $rewriteArray[$hardwareId][$sensorIpmi];
|
|
} else {
|
|
return $sensorIpmi;
|
|
}
|
|
} else {
|
|
return $sensorIpmi;
|
|
}
|
|
}
|
|
|
|
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;
|
|
}
|