Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion INFO
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,7 @@

[info]
name = syslog
version = 4.6
version = 4.11
longname = Syslog Monitoring
author = The Cacti Group
email =
Expand Down
42 changes: 28 additions & 14 deletions includes/functions.php
Original file line number Diff line number Diff line change
Expand Up @@ -338,13 +338,31 @@ function syslog_strip_auto_dates(string $search, mixed $date1, mixed $date2): st
return $search;
}

/**
* Check a Syslog realm by its Cacti-assigned ID, not a filename mapping.
*/
function syslog_realm_allowed(string $display): bool {
$realms = db_fetch_assoc_prepared(
'SELECT id FROM plugin_realms WHERE plugin = ? AND display = ?',
['syslog', $display]
);

foreach (is_array($realms) ? $realms : [] as $realm) {
if (is_realm_allowed((int) $realm['id'] + 100)) {
return true;
}
}

return false;
}

/**
* Permission to make saved searches global and to manage other users' global searches.
*
* @return bool True if the user has admin permission.
*/
function syslog_saved_search_admin(): bool {
return api_plugin_user_realm_auth('syslog_saved_searches.php');
return syslog_realm_allowed('Syslog Administration');
}

/**
Expand All @@ -353,7 +371,7 @@ function syslog_saved_search_admin(): bool {
* @return bool True if the user has share permission.
*/
function syslog_saved_search_share(): bool {
return syslog_saved_search_admin() || api_plugin_user_realm_auth('syslog_saved_searches_share.php');
return syslog_saved_search_admin() || syslog_realm_allowed('Share Saved Templates');
}

/**
Expand All @@ -362,7 +380,7 @@ function syslog_saved_search_share(): bool {
* @return bool True if the user has dashboard admin permission.
*/
function syslog_dashboard_admin(): bool {
return api_plugin_user_realm_auth('syslog_alerts.php');
return syslog_realm_allowed('Syslog Administration');
}

/**
Expand All @@ -371,7 +389,7 @@ function syslog_dashboard_admin(): bool {
* @return bool True if the user has dashboard share permission.
*/
function syslog_dashboard_share(): bool {
return syslog_dashboard_admin() || api_plugin_user_realm_auth('syslog_dashboards_share.php');
return syslog_dashboard_admin() || syslog_realm_allowed('Share Dashboards');
}

/**
Expand Down Expand Up @@ -850,7 +868,7 @@ function syslog_allow_edits(): bool {
* @return bool True when rule edits are permitted for this user and poller.
*/
function syslog_allow_rule_edits(): bool {
return syslog_allow_edits() && api_plugin_user_realm_auth('syslog_rule_administrator.php');
return syslog_allow_edits() && syslog_realm_allowed('Rule Administrator');
}

/**
Expand Down Expand Up @@ -3234,10 +3252,8 @@ function syslog_rule_preview(array $rule, string $rule_type = 'alert', int $rows
* @return string A JSON document with the preview result, or an error.
*/
function syslog_rule_test_action(string $rule_type): string {
$realm_page = $rule_type === 'removal' ? 'syslog_removal.php' : 'syslog_alerts.php';

if (!api_plugin_user_realm_auth($realm_page) || !syslog_allow_rule_edits()) {
cacti_log("WARNING: syslog rule preview blocked -- missing realm for '$realm_page'", false, 'SYSLOG');
if (!syslog_realm_allowed('Rule Viewer') || !syslog_allow_rule_edits()) {
cacti_log('WARNING: syslog rule preview blocked -- missing rule realm', false, 'SYSLOG');

return (string) json_encode(['error' => __('Permission denied.', 'syslog')]);
}
Expand Down Expand Up @@ -6773,14 +6789,12 @@ function syslog_message_rule_links($id, $source, $received, $host = ''): array {
}

$query = http_build_query(['id' => $id, 'action' => 'newedit', 'type' => '0', 'date' => $received]);
if (syslog_allow_rule_edits()) {
if (syslog_realm_allowed('Rule Viewer') && syslog_allow_rule_edits()) {
foreach (['alarm' => 'syslog_alerts.php', 'removal' => 'syslog_removal.php'] as $action => $page) {
if (api_plugin_user_realm_auth($page)) {
$links[$action] = $page . '?' . $query;
}
$links[$action] = $page . '?' . $query;
}
}
if ($host !== '' && api_plugin_user_realm_auth('syslog_device_rules.php')) {
if ($host !== '' && syslog_allow_rule_edits()) {
$links['device'] = 'syslog_device_rules.php?' . http_build_query(['action' => 'edit', 'host' => $host]);
}
return $links;
Expand Down
23 changes: 22 additions & 1 deletion includes/installer.php
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,23 @@

/* Install and uninstall adviser UI. */

/** Confirm an existing plugin upgrade without sending it through Cacti's install action. */
function syslog_upgrade_advisor(string $installed, string $current): void {
top_header();
print "<table align='center' width='80%'><tr><td>";
html_start_box(__('Syslog Upgrade Advisor', 'syslog'), '100%', '', '3', 'center', '');
print '<tr><td>' . __('Upgrade Syslog from %s to %s? Existing messages and rules will be preserved. Schema changes may take time.', html_escape($installed), html_escape($current), 'syslog') . '</td></tr>';
html_end_box();
print "<form id='syslog_install' action='plugins.php' method='post'>";
form_hidden_box('mode', 'enable', '');
form_hidden_box('id', 'syslog', '');
form_hidden_box('syslog_upgrade_confirm', '1', '');
syslog_confirm_button('install', 'plugins.php', 1, true);
print '</td></tr></table>';
bottom_footer();
exit;
}

/**
* Display the install/upgrade advisor form.
*
Expand Down Expand Up @@ -268,7 +285,7 @@ function syslog_uninstall_advisor(): void {
*
* @return void
*/
function syslog_confirm_button(string $action, string $cancel_url, int $syslog_exists): void {
function syslog_confirm_button(string $action, string $cancel_url, int $syslog_exists, bool $full_page = false): void {
if ($action == 'install') {
if ($syslog_exists) {
$value = __('Upgrade', 'syslog');
Expand All @@ -289,6 +306,10 @@ function syslog_confirm_button(string $action, string $cancel_url, int $syslog_e
$(function() {
$('#syslog_install').submit(function(event) {
event.preventDefault();
<?php if ($full_page) { ?>
submitPageUsingPost('plugins.php?mode=enable&id=syslog&syslog_upgrade_confirm=1');
return;
<?php } ?>

/* set the URL */
var strURL = $(this).attr('action');
Expand Down
Loading
Loading