From 5441bafc8100ac66c0d0d888ced8212868a5fd0b Mon Sep 17 00:00:00 2001 From: Zmegolaz Date: Sat, 2 Sep 2017 20:45:31 +0200 Subject: [PATCH] fix: Fixed IPv6 host renaming (#7275) * Fixed IPv6 host renaming * Added get_rrd_dir() and modified other files to use it where appropriate. * rrd_name() now uses the new function get_rrd_dir(), to make it simpler to modify the escaping in the future. * Wrong function name in rrdstep.php --- .../graphs/application/nfs-stats.inc.php | 2 +- .../graphs/application/nfs-v3-stats_fh.inc.php | 2 +- .../graphs/application/nfs-v3-stats_io.inc.php | 2 +- .../application/nfs-v3-stats_net.inc.php | 2 +- .../graphs/application/nfs-v3-stats_ra.inc.php | 2 +- .../graphs/application/nfs-v3-stats_rc.inc.php | 2 +- .../application/nfs-v3-stats_rpc.inc.php | 2 +- .../application/nfs-v3-stats_stats.inc.php | 2 +- html/includes/graphs/sla-jitter-jitter.inc.php | 2 +- html/pages/device/edit/device.inc.php | 2 +- includes/functions.php | 4 ++-- includes/rrdtool.inc.php | 18 ++++++++++++++++-- scripts/rrdstep.php | 3 +-- 13 files changed, 29 insertions(+), 16 deletions(-) diff --git a/html/includes/graphs/application/nfs-stats.inc.php b/html/includes/graphs/application/nfs-stats.inc.php index 944b579af7..fd29a9a1fc 100644 --- a/html/includes/graphs/application/nfs-stats.inc.php +++ b/html/includes/graphs/application/nfs-stats.inc.php @@ -8,7 +8,7 @@ $bigdescrlen = 15; $smalldescrlen = 15; $dostack = 0; $printtotal = 0; -$rrd_filename = $config['rrd_dir'].'/'.$device['hostname'].'/app-nfsstats-'.$app['app_id'].'.rrd'; +$rrd_filename = get_rrd_dir($device['hostname']).'/app-nfsstats-'.$app['app_id'].'.rrd'; $array = array( 'total' => array( 'descr' => 'Total', diff --git a/html/includes/graphs/application/nfs-v3-stats_fh.inc.php b/html/includes/graphs/application/nfs-v3-stats_fh.inc.php index a70749aeb6..13cb803688 100644 --- a/html/includes/graphs/application/nfs-v3-stats_fh.inc.php +++ b/html/includes/graphs/application/nfs-v3-stats_fh.inc.php @@ -10,7 +10,7 @@ $dostack = 0; $printtotal = 0; $addarea = 1; $transparency = 33; -$rrd_filename = $config['rrd_dir'].'/'.$device['hostname'].'/app-nfs-stats-'.$app['app_id'].'.rrd'; +$rrd_filename = get_rrd_dir($device['hostname']).'/app-nfs-stats-'.$app['app_id'].'.rrd'; $array = array( 'fh_lookup' => array('descr' => 'lookup','colour' => '136421',), 'fh_anon' => array('descr' => 'anon','colour' => 'B2C945',), diff --git a/html/includes/graphs/application/nfs-v3-stats_io.inc.php b/html/includes/graphs/application/nfs-v3-stats_io.inc.php index 9652bf438f..bbc929774c 100644 --- a/html/includes/graphs/application/nfs-v3-stats_io.inc.php +++ b/html/includes/graphs/application/nfs-v3-stats_io.inc.php @@ -10,7 +10,7 @@ $dostack = 0; $printtotal = 0; $addarea = 1; $transparency = 33; -$rrd_filename = $config['rrd_dir'].'/'.$device['hostname'].'/app-nfs-stats-'.$app['app_id'].'.rrd'; +$rrd_filename = get_rrd_dir($device['hostname']).'/app-nfs-stats-'.$app['app_id'].'.rrd'; $array = array( 'io_read' => array('descr' => 'read','colour' => '2B9220',), 'io_write' => array('descr' => 'write','colour' => 'B0262D',), diff --git a/html/includes/graphs/application/nfs-v3-stats_net.inc.php b/html/includes/graphs/application/nfs-v3-stats_net.inc.php index ef7a9c4494..156ebd3b79 100644 --- a/html/includes/graphs/application/nfs-v3-stats_net.inc.php +++ b/html/includes/graphs/application/nfs-v3-stats_net.inc.php @@ -10,7 +10,7 @@ $dostack = 0; $printtotal = 0; $addarea = 1; $transparency = 33; -$rrd_filename = $config['rrd_dir'].'/'.$device['hostname'].'/app-nfs-stats-'.$app['app_id'].'.rrd'; +$rrd_filename = get_rrd_dir($device['hostname']).'/app-nfs-stats-'.$app['app_id'].'.rrd'; $array = array( 'net_all' => array('descr' => 'total','colour' => '000000',), 'net_udp' => array('descr' => 'udp','colour' => 'AA3F39',), diff --git a/html/includes/graphs/application/nfs-v3-stats_ra.inc.php b/html/includes/graphs/application/nfs-v3-stats_ra.inc.php index 663c6004db..24e7fdc621 100644 --- a/html/includes/graphs/application/nfs-v3-stats_ra.inc.php +++ b/html/includes/graphs/application/nfs-v3-stats_ra.inc.php @@ -10,7 +10,7 @@ $dostack = 0; $printtotal = 0; $addarea = 1; $transparency = 33; -$rrd_filename = $config['rrd_dir'].'/'.$device['hostname'].'/app-nfs-stats-'.$app['app_id'].'.rrd'; +$rrd_filename = get_rrd_dir($device['hostname']).'/app-nfs-stats-'.$app['app_id'].'.rrd'; $array = array( 'ra_size' => array('descr' => 'size','colour' => '091B40',), 'ra_range01' => array('descr' => '0-10','colour' => '8293B3',), diff --git a/html/includes/graphs/application/nfs-v3-stats_rc.inc.php b/html/includes/graphs/application/nfs-v3-stats_rc.inc.php index c7a3331fa0..70560a51ca 100644 --- a/html/includes/graphs/application/nfs-v3-stats_rc.inc.php +++ b/html/includes/graphs/application/nfs-v3-stats_rc.inc.php @@ -10,7 +10,7 @@ $dostack = 0; $printtotal = 0; $addarea = 1; $transparency = 33; -$rrd_filename = $config['rrd_dir'].'/'.$device['hostname'].'/app-nfs-stats-'.$app['app_id'].'.rrd'; +$rrd_filename = get_rrd_dir($device['hostname']).'/app-nfs-stats-'.$app['app_id'].'.rrd'; $array = array( 'rc_hits' => array('descr' => 'hits','colour' => '2B9220',), 'rc_misses' => array('descr' => 'misses','colour' => 'B36326',), diff --git a/html/includes/graphs/application/nfs-v3-stats_rpc.inc.php b/html/includes/graphs/application/nfs-v3-stats_rpc.inc.php index fd95c3839e..95b84fe477 100644 --- a/html/includes/graphs/application/nfs-v3-stats_rpc.inc.php +++ b/html/includes/graphs/application/nfs-v3-stats_rpc.inc.php @@ -10,7 +10,7 @@ $dostack = 0; $printtotal = 0; $addarea = 1; $transparency = 33; -$rrd_filename = $config['rrd_dir'].'/'.$device['hostname'].'/app-nfs-stats-'.$app['app_id'].'.rrd'; +$rrd_filename = get_rrd_dir($device['hostname']).'/app-nfs-stats-'.$app['app_id'].'.rrd'; $array = array( 'rpc_calls' => array('descr' => 'calls','colour' => '000000',), 'rpc_badcalls' => array('descr' => 'bad calls','colour' => '600604',), diff --git a/html/includes/graphs/application/nfs-v3-stats_stats.inc.php b/html/includes/graphs/application/nfs-v3-stats_stats.inc.php index c8a320b64f..92c3cc6a2f 100644 --- a/html/includes/graphs/application/nfs-v3-stats_stats.inc.php +++ b/html/includes/graphs/application/nfs-v3-stats_stats.inc.php @@ -10,7 +10,7 @@ $dostack = 0; $printtotal = 0; $addarea = 1; $transparency = 33; -$rrd_filename = $config['rrd_dir'].'/'.$device['hostname'].'/app-nfs-stats-'.$app['app_id'].'.rrd'; +$rrd_filename = get_rrd_dir($device['hostname']).'/app-nfs-stats-'.$app['app_id'].'.rrd'; $array = array( 'proc3_null' => array('descr' => 'Null','colour' => '630606',), 'proc3_getattr' => array('descr' => 'Get attributes','colour' => '50C150',), diff --git a/html/includes/graphs/sla-jitter-jitter.inc.php b/html/includes/graphs/sla-jitter-jitter.inc.php index 02daa1707e..405a648d9a 100644 --- a/html/includes/graphs/sla-jitter-jitter.inc.php +++ b/html/includes/graphs/sla-jitter-jitter.inc.php @@ -15,7 +15,7 @@ $sla = dbFetchRow('SELECT `sla_nr` FROM `slas` WHERE `sla_id` = ?', array($vars[ require 'includes/graphs/common.inc.php'; $rrd_options .= ' -l 0 -E '; -$rrd_filename = $config['rrd_dir']."/".$device['hostname']."/".safename('sla-'.$sla['sla_nr'].'-jitter.rrd'); +$rrd_filename = get_rrd_dir($device['hostname'])."/".safename('sla-'.$sla['sla_nr'].'-jitter.rrd'); if (rrdtool_check_rrd_exists($rrd_filename)) { $rrd_options .= " COMMENT:' Cur Min Max\\n'"; diff --git a/html/pages/device/edit/device.inc.php b/html/pages/device/edit/device.inc.php index bdea2734f1..df5b6e1087 100644 --- a/html/pages/device/edit/device.inc.php +++ b/html/pages/device/edit/device.inc.php @@ -213,7 +213,7 @@ if ($updated && $update_message) { " . formatStorage($sizeondisk) . " in " . $numrrds . " RRD files."); print_optionbar_end(); ?> diff --git a/includes/functions.php b/includes/functions.php index 20ae9575eb..6d5a45b486 100644 --- a/includes/functions.php +++ b/includes/functions.php @@ -318,7 +318,7 @@ function renamehost($id, $new, $source = 'console') global $config; $host = dbFetchCell("SELECT `hostname` FROM `devices` WHERE `device_id` = ?", array($id)); - if (!is_dir($config['rrd_dir']."/$new") && rename($config['rrd_dir']."/$host", $config['rrd_dir']."/$new") === true) { + if (!is_dir(get_rrd_dir($new)) && rename(get_rrd_dir($host), get_rrd_dir($new)) === true) { dbUpdate(array('hostname' => $new), 'devices', 'device_id=?', array($id)); log_event("Hostname changed -> $new ($source)", $id, 'system', 3); } else { @@ -374,7 +374,7 @@ function delete_device($id) } } - $ex = shell_exec("bash -c '( [ ! -d ".trim($config['rrd_dir'])."/".$host." ] || rm -vrf ".trim($config['rrd_dir'])."/".$host." 2>&1 ) && echo -n OK'"); + $ex = shell_exec("bash -c '( [ ! -d ".trim(get_rrd_dir($host))." ] || rm -vrf ".trim(get_rrd_dir($host))." 2>&1 ) && echo -n OK'"); $tmp = explode("\n", $ex); if ($tmp[sizeof($tmp)-1] != "OK") { $ret .= "Could not remove files:\n$ex\n"; diff --git a/includes/rrdtool.inc.php b/includes/rrdtool.inc.php index a261ff08e0..b9b2838b9f 100644 --- a/includes/rrdtool.inc.php +++ b/includes/rrdtool.inc.php @@ -300,10 +300,24 @@ function rrd_name($host, $extra, $extension = ".rrd") { global $config; $filename = safename(is_array($extra) ? implode("-", $extra) : $extra); - $host = str_replace(':', '_', trim($host, '[]')); - return implode("/", array($config['rrd_dir'], $host, $filename.$extension)); + return implode("/", array(get_rrd_dir($host), $filename.$extension)); } // rrd_name + +/** + * Generates a path based on the hostname (or IP) + * + * @param string $host Host name + * @return string the name of the rrd directory for $host + */ +function get_rrd_dir($host) +{ + global $config; + $host = str_replace(':', '_', trim($host, '[]')); + return implode("/", array($config['rrd_dir'], $host)); +} // rrd_dir + + /** * Generates a filename for a proxmox cluster rrd * diff --git a/scripts/rrdstep.php b/scripts/rrdstep.php index 9d8179a3fc..8a10b4140c 100755 --- a/scripts/rrdstep.php +++ b/scripts/rrdstep.php @@ -51,14 +51,13 @@ if (empty($hostname)) { $step = $config['rrd']['step']; $heartbeat = $config['rrd']['heartbeat']; -$rrd_path = $config['rrd_dir']; $rrdtool = $config['rrdtool']; $tmp_path = $config['temp_dir']; if ($hostname === 'all') { $hostname = '*'; } -$files = glob($rrd_path . '/' . $hostname . '/*.rrd'); +$files = glob(get_rrd_dir($hostname) . '/*.rrd'); $run = readline("Are you sure you want to run this command [N/y]: "); if (!($run == 'y' || $run == 'Y')) {