101 lines
3.4 KiB
Perl
Executable File
101 lines
3.4 KiB
Perl
Executable File
# log_parser.pl
|
|
# Functions for parsing this module's logs
|
|
|
|
use strict;
|
|
use warnings;
|
|
|
|
require 'systemd-lib.pl'; ## no critic
|
|
|
|
our %text;
|
|
|
|
# parse_webmin_log(user, script, action, type, object, params)
|
|
# Converts logged information from this module into escaped HTML fragments.
|
|
sub parse_webmin_log
|
|
{
|
|
my ($user, $script, $action, $type, $object, $p) = @_;
|
|
|
|
# This parser returns HTML fragments, so escape log values before wrapping them
|
|
# in UI tags or translated strings.
|
|
if ($type eq 'systemd-user' &&
|
|
($action eq 'modify' || $action eq 'create' || $action eq 'delete' ||
|
|
$action eq 'override' || $action eq 'deleteoverride' ||
|
|
$action eq 'status' || $action eq 'props' || $action eq 'deps' ||
|
|
$action eq 'logs' ||
|
|
$action eq 'massstart' || $action eq 'massstop' ||
|
|
$action eq 'massrestart' || $action eq 'massenable' ||
|
|
$action eq 'massdisable' || $action eq 'massmask' ||
|
|
$action eq 'massunmask' || $action eq 'massdelete' ||
|
|
$action eq 'linger' ||
|
|
$action eq 'manual' || $action eq 'reload')) {
|
|
|
|
# Linger logs describe the user rather than one or more unit names.
|
|
if ($action eq 'linger') {
|
|
return text('log_user_linger',
|
|
ui_tag('tt', html_escape($p->{'user'})),
|
|
$p->{'enabled'} ? $text{'yes'} : $text{'no'});
|
|
}
|
|
if ($action eq 'manual') {
|
|
return text('log_user_manual',
|
|
ui_tag('tt', html_escape($object)),
|
|
ui_tag('tt', html_escape($p->{'user'})));
|
|
}
|
|
if ($action eq 'reload') {
|
|
return text('log_user_reload',
|
|
ui_tag('tt', html_escape($p->{'user'})));
|
|
}
|
|
|
|
# User-unit actions include both escaped unit names and the owner.
|
|
return text('log_user_'.$action,
|
|
join(", ", map { ui_tag('tt', html_escape($_)) }
|
|
split(/\s+/, $object)),
|
|
ui_tag('tt', html_escape($p->{'user'})));
|
|
}
|
|
|
|
# System-unit messages use the same escaping as user units because unit names
|
|
# can be shown directly in the Webmin log viewer.
|
|
elsif ($type eq 'systemd' && $action eq 'modify') {
|
|
return text('log_modify', ui_tag('tt', html_escape($object)));
|
|
}
|
|
elsif ($type eq 'systemd' && $action eq 'create') {
|
|
return text('log_create', ui_tag('tt', html_escape($object)));
|
|
}
|
|
elsif ($type eq 'systemd' && $action eq 'delete') {
|
|
return text('log_delete', ui_tag('tt', html_escape($object)));
|
|
}
|
|
elsif ($type eq 'systemd' && $action eq 'override') {
|
|
return text('log_override', ui_tag('tt', html_escape($object)));
|
|
}
|
|
elsif ($type eq 'systemd' && $action eq 'deleteoverride') {
|
|
return text('log_deleteoverride',
|
|
ui_tag('tt', html_escape($object)));
|
|
}
|
|
elsif ($type eq 'systemd' && $action eq 'manual') {
|
|
return text('log_manual', ui_tag('tt', html_escape($object)));
|
|
}
|
|
elsif ($type eq 'systemd' && $action eq 'reload') {
|
|
return $text{'log_reload'};
|
|
}
|
|
elsif ($type eq 'systemd' &&
|
|
($action eq 'status' || $action eq 'props' || $action eq 'deps' ||
|
|
$action eq 'logs')) {
|
|
return text('log_'.$action,
|
|
join(", ", map { ui_tag('tt', html_escape($_)) }
|
|
split(/\s+/, $object)));
|
|
}
|
|
|
|
# Mass-action logs contain space-separated unit names.
|
|
elsif ($type eq 'systemd' &&
|
|
($action eq 'massstart' || $action eq 'massstop' ||
|
|
$action eq 'massrestart' ||
|
|
$action eq 'massenable' || $action eq 'massdisable' ||
|
|
$action eq 'massmask' || $action eq 'massunmask')) {
|
|
return text('log_'.$action,
|
|
join(", ", map { ui_tag('tt', html_escape($_)) }
|
|
split(/\s+/, $object)));
|
|
}
|
|
else {
|
|
# Unknown log records fall back to Webmin's default rendering.
|
|
return;
|
|
}
|
|
}
|