diff --git a/CHANGELOG.md b/CHANGELOG.md index 0f1e7f2..a3b4433 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,6 +2,7 @@ --- develop --- +* issue#277: Add shared helper for loading XML import payload from text input or upload * issue: Making changes to support Cacti 1.3 * issue: Don't use MyISAM for non-analytical tables * issue: The install advisor for Syslog was broken in current Cacti releases diff --git a/functions.php b/functions.php index 9bd3223..573f54b 100644 --- a/functions.php +++ b/functions.php @@ -126,6 +126,52 @@ function syslog_sendemail($to, $from, $subject, $message, $smsmessage = '') { } } +function syslog_get_import_xml_payload($redirect_url) { + if (trim(get_nfilter_request_var('import_text')) != '') { + /* textbox input */ + return get_nfilter_request_var('import_text'); + } + + if (isset($_FILES['import_file']['tmp_name']) && + $_FILES['import_file']['tmp_name'] != 'none' && + $_FILES['import_file']['tmp_name'] != '') { + /* file upload */ + $tmp_name = $_FILES['import_file']['tmp_name']; + + if (!isset($_FILES['import_file']['error']) || $_FILES['import_file']['error'] !== UPLOAD_ERR_OK) { + header('Location: ' . $redirect_url); + exit; + } + + if (!is_uploaded_file($tmp_name)) { + header('Location: ' . $redirect_url); + exit; + } + + $fp = fopen($tmp_name, 'rb'); + + if ($fp === false) { + cacti_log('SYSLOG ERROR: Failed to open uploaded import file', false, 'SYSTEM'); + header('Location: ' . $redirect_url); + exit; + } + + $xml_data = fread($fp, filesize($tmp_name)); + fclose($fp); + + if ($xml_data === false) { + cacti_log('SYSLOG ERROR: Failed to read uploaded import file', false, 'SYSTEM'); + header('Location: ' . $redirect_url); + exit; + } + + return $xml_data; + } + + header('Location: ' . $redirect_url); + exit; +} + function syslog_is_partitioned() { global $syslogdb_default; @@ -2421,4 +2467,3 @@ function alert_replace_variables($alert, $results, $hostname = '') { return $command; } - diff --git a/syslog_alerts.php b/syslog_alerts.php index 74c49b9..9e7a04e 100644 --- a/syslog_alerts.php +++ b/syslog_alerts.php @@ -939,18 +939,7 @@ function import() { } function alert_import() { - if (trim(get_nfilter_request_var('import_text') != '')) { - /* textbox input */ - $xml_data = get_nfilter_request_var('import_text'); - } elseif (($_FILES['import_file']['tmp_name'] != 'none') && ($_FILES['import_file']['tmp_name'] != '')) { - /* file upload */ - $fp = fopen($_FILES['import_file']['tmp_name'],'r'); - $xml_data = fread($fp, filesize($_FILES['import_file']['tmp_name'])); - fclose($fp); - } else { - header('Location: syslog_alerts.php?header=false'); - exit; - } + $xml_data = syslog_get_import_xml_payload('syslog_alerts.php?header=false'); $xml_array = xml2array($xml_data); @@ -1009,4 +998,3 @@ function alert_import() { header('Location: syslog_alerts.php'); } - diff --git a/syslog_removal.php b/syslog_removal.php index f7b5e94..4ac9333 100644 --- a/syslog_removal.php +++ b/syslog_removal.php @@ -739,18 +739,7 @@ function import() { } function removal_import() { - if (trim(get_nfilter_request_var('import_text') != '')) { - /* textbox input */ - $xml_data = get_nfilter_request_var('import_text'); - } elseif (($_FILES['import_file']['tmp_name'] != 'none') && ($_FILES['import_file']['tmp_name'] != '')) { - /* file upload */ - $fp = fopen($_FILES['import_file']['tmp_name'],'r'); - $xml_data = fread($fp, filesize($_FILES['import_file']['tmp_name'])); - fclose($fp); - } else { - header('Location: syslog_removal.php?header=false'); - exit; - } + $xml_data = syslog_get_import_xml_payload('syslog_removal.php?header=false'); /* obtain debug information if it's set */ $xml_array = xml2array($xml_data); @@ -810,4 +799,3 @@ function removal_import() { header('Location: syslog_removal.php'); } - diff --git a/syslog_reports.php b/syslog_reports.php index f0caec2..d0a4683 100644 --- a/syslog_reports.php +++ b/syslog_reports.php @@ -801,18 +801,7 @@ function import() { } function report_import() { - if (trim(get_nfilter_request_var('import_text') != '')) { - /* textbox input */ - $xml_data = get_nfilter_request_var('import_text'); - } elseif (($_FILES['import_file']['tmp_name'] != 'none') && ($_FILES['import_file']['tmp_name'] != '')) { - /* file upload */ - $fp = fopen($_FILES['import_file']['tmp_name'],'r'); - $xml_data = fread($fp, filesize($_FILES['import_file']['tmp_name'])); - fclose($fp); - } else { - header('Location: syslog_reports.php?header=false'); - exit; - } + $xml_data = syslog_get_import_xml_payload('syslog_reports.php?header=false'); /* obtain debug information if it's set */ $xml_array = xml2array($xml_data); @@ -872,4 +861,3 @@ function report_import() { header('Location: syslog_reports.php'); } - diff --git a/tests/regression/issue277_import_payload_loader_test.php b/tests/regression/issue277_import_payload_loader_test.php new file mode 100644 index 0000000..d36b4a9 --- /dev/null +++ b/tests/regression/issue277_import_payload_loader_test.php @@ -0,0 +1,68 @@ +