mirror of
https://github.com/webmin/webmin.git
synced 2026-02-03 22:23:28 +00:00
Compare commits
34 Commits
2.104
...
dev/config
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
3885773f6e | ||
|
|
dc3ed53c43 | ||
|
|
24ca182b18 | ||
|
|
54c7856672 | ||
|
|
9b3fb73aea | ||
|
|
692c9cc5e1 | ||
|
|
62bcd25eb9 | ||
|
|
a6d23844ce | ||
|
|
a9cd02aa6d | ||
|
|
46238ef7a1 | ||
|
|
059b47f84d | ||
|
|
62b6b32719 | ||
|
|
02eb35d622 | ||
|
|
4d5b4ef697 | ||
|
|
b3c8706690 | ||
|
|
283fe2e440 | ||
|
|
8e586e6f14 | ||
|
|
7ad30bdc8c | ||
|
|
81ead590c9 | ||
|
|
48b0912cf6 | ||
|
|
e0d743076d | ||
|
|
91c2facff9 | ||
|
|
8e71cfa73a | ||
|
|
9cade51106 | ||
|
|
d0691f273c | ||
|
|
ef41362b57 | ||
|
|
6942ce7f0f | ||
|
|
97d1624bb0 | ||
|
|
a85fa2f8c2 | ||
|
|
c0e20f024a | ||
|
|
1c13b29aa6 | ||
|
|
ba623246a1 | ||
|
|
e36f2051e3 | ||
|
|
c0bc9daff3 |
1
.gitignore
vendored
1
.gitignore
vendored
@@ -21,3 +21,4 @@ core
|
||||
tarballs/
|
||||
minimal/
|
||||
.DS_Store
|
||||
.vscode/settings.json
|
||||
|
||||
@@ -449,6 +449,9 @@ for(my $i=0; $i<@oldv || $i<@newv; $i++) {
|
||||
$newv[$i]->{'line'} = $_[0]->{'eline'};
|
||||
$newv[$i]->{'eline'} =
|
||||
$_[0]->{'eline'} + scalar(@nl) - 1;
|
||||
if (!defined($newv[$i]->{'index'})) {
|
||||
$newv[$i]->{'index'} = @$pm ? $pm->[@$pm - 1]->{'index'} + 1 : 0;
|
||||
}
|
||||
&renumber($parent, $_[0]->{'eline'}-1,
|
||||
$_[0]->{'file'}, scalar(@nl));
|
||||
}
|
||||
@@ -469,6 +472,9 @@ for(my $i=0; $i<@oldv || $i<@newv; $i++) {
|
||||
$newv[$i]->{'line'} = $_[0]->{'line'}+1;
|
||||
$newv[$i]->{'eline'} =
|
||||
$_[0]->{'line'} + scalar(@nl);
|
||||
if (!defined($newv[$i]->{'index'})) {
|
||||
$newv[$i]->{'index'} = 0;
|
||||
}
|
||||
&renumber($parent, $_[0]->{'line'},
|
||||
$_[0]->{'file'}, scalar(@nl));
|
||||
}
|
||||
|
||||
@@ -407,5 +407,89 @@ if (-r $module_prefs_conf) {
|
||||
}
|
||||
}
|
||||
|
||||
# read_config_params(url, insert-prefix)
|
||||
# Parses the URL parameters from a URL, and returns a hash ref
|
||||
sub read_config_params
|
||||
{
|
||||
my ($url, $pref) = @_;
|
||||
# Extract the part of the URL after the question mark
|
||||
my ($query_string) = $url =~ /\?(.*)$/;
|
||||
my %params;
|
||||
|
||||
# Split the query string on '&' to get the individual key-value pairs
|
||||
for my $pair (split(/&/, $query_string)) {
|
||||
my ($key, $value) = split /=/, $pair;
|
||||
$value = &un_urlize($value);
|
||||
my $param_prefix = $pref ? "_cparam-" : "";
|
||||
$params{"$param_prefix$key"} = $value;
|
||||
}
|
||||
return \%params;
|
||||
}
|
||||
|
||||
# print_config_posted_params()
|
||||
# Prints hidden fields for all the parameters in the referrer URL
|
||||
sub print_config_posted_params
|
||||
{
|
||||
my $env_referer = $ENV{'HTTP_REFERER'};
|
||||
my $params_referer = &read_config_params($env_referer);
|
||||
my $params_url = &read_config_params($ENV{'REQUEST_URI'});
|
||||
my $params = { %$params_referer, %$params_url };
|
||||
my @params;
|
||||
if (%$params) {
|
||||
foreach my $param (keys %{$params}) {
|
||||
my $param_prefix = "_cparam-";
|
||||
if ($param =~ /section|module|mode|section_next|nnext|nprev|xnavigation/ ||
|
||||
!$params->{$param} || $env_referer =~ /$param_prefix$param=/ ||
|
||||
$params_url =~ /$param_prefix$param=/ || &indexof($param, @params) > -1) {
|
||||
next;
|
||||
}
|
||||
$param_prefix = "" if ($param =~ /^$param_prefix/);
|
||||
push(@params, $param);
|
||||
print &ui_hidden("$param_prefix$param", $params->{$param}), "\n";
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
# get_query_config_posted_params(url)
|
||||
# Returns the currently posted parameters from the URL
|
||||
sub get_query_config_posted_params
|
||||
{
|
||||
my ($url) = @_;
|
||||
foreach my $key (keys %in) {
|
||||
if ($key =~ /^_cparam-/) {
|
||||
my $value = $in{$key};
|
||||
if ($value) {
|
||||
my $delimiter = ($url =~ /\?/) ? "&" : '?';
|
||||
$url .= "$delimiter$key=$value"
|
||||
}
|
||||
}
|
||||
}
|
||||
return $url;
|
||||
}
|
||||
|
||||
# get_config_posted_params(target)
|
||||
# Returns the referrer URL with all the parameters from the POST request
|
||||
sub get_config_posted_params
|
||||
{
|
||||
my ($target) = @_;
|
||||
my $param_prefix = "_cparam-";
|
||||
my $env_referer = $ENV{'HTTP_REFERER'};
|
||||
my $env_referer_prefixed = ($env_referer =~ /$param_prefix/ ? 1 : 0);
|
||||
my $params_referer = &read_config_params($env_referer, !$env_referer_prefixed);
|
||||
my %keys = (%in, %$params_referer);
|
||||
foreach my $key (keys %keys) {
|
||||
if ($key =~ /^$param_prefix(.*)/) {
|
||||
my $k = $1;
|
||||
my $v = $keys{$key};
|
||||
if ($v && $target !~ /$k=/) {
|
||||
my $delimiter = ($target =~ /\?/) ? "&" : '?';
|
||||
$v = &urlize($v) if ($v =~ /^\//);
|
||||
$target .= "$delimiter$k=$v"
|
||||
}
|
||||
}
|
||||
}
|
||||
return $target;
|
||||
}
|
||||
|
||||
1;
|
||||
|
||||
|
||||
@@ -25,6 +25,7 @@ else {
|
||||
|
||||
print &ui_form_start("config_save.cgi", "post");
|
||||
print &ui_hidden("module", $m),"\n";
|
||||
&print_config_posted_params();
|
||||
print &ui_table_start(&text('config_header', $module_info{'desc'}),
|
||||
"width=100%", 2);
|
||||
&read_file("$config_directory/$m/config", \%newconfig);
|
||||
@@ -51,5 +52,5 @@ if (!$func) {
|
||||
print &ui_table_end();
|
||||
print &ui_form_end([ [ "save", $text{'save'} ] ]);
|
||||
|
||||
&ui_print_footer("/$m", $text{'index'});
|
||||
&ui_print_footer(&get_config_posted_params("/$m/"), $text{'index'});
|
||||
|
||||
|
||||
@@ -56,5 +56,5 @@ if (&foreign_check("webmin")) {
|
||||
}
|
||||
|
||||
&webmin_log("_config_", undef, undef, \%in, $m);
|
||||
&redirect("/$m/");
|
||||
&redirect(&get_config_posted_params("/$m/"));
|
||||
|
||||
|
||||
@@ -14,7 +14,7 @@ index_manual=Editiere manuell Cron-Aufträge.
|
||||
index_return=Cron-Aufträge
|
||||
index_env=Umgebungsvariable
|
||||
index_move=Verschieben
|
||||
index_next=Nächte Ausfürung
|
||||
index_next=Nächste Ausführung
|
||||
index_nunknown=Unbekannt
|
||||
index_run=Läuft?
|
||||
index_ecmd=Das Kommando $1 um Cron Benutzer Konfigurationen zu bearbeiten wurde nicht gefunden. Vielleicht ist Cron nicht auf Ihrem System installiert?
|
||||
|
||||
@@ -270,21 +270,21 @@ if ($show_subnet_delete) {
|
||||
if ($show_subnet_shared) {
|
||||
if (@ulinks >= $display_max) {
|
||||
# Could not show all subnets, so show lookup form
|
||||
print &ui_form_start("lookup_subnet.cgi", "get");
|
||||
print &ui_table_start(undef, undef, 2);
|
||||
print &ui_table_row($text{'index_subtoomany'}, &ui_submit($text{'index_sublook2'}));
|
||||
print &ui_table_row($matches, &ui_textbox("subnet", "", 30));
|
||||
print &ui_table_end();
|
||||
print &ui_form_end(undef,undef,1);
|
||||
print &ui_form_start("lookup_subnet.cgi", "get");
|
||||
print &ui_table_start(undef, undef, 2);
|
||||
print &ui_table_row($text{'index_subtoomany'}, &ui_submit($text{'index_sublook2'}));
|
||||
print &ui_table_row($matches, &ui_textbox("subnet", "", 30));
|
||||
print &ui_table_end();
|
||||
print &ui_form_end(undef,undef,1);
|
||||
}
|
||||
if (@slinks >= $display_max) {
|
||||
# Could not show all shared nets, so show lookup form
|
||||
print &ui_form_start("lookup_shared.cgi", "get");
|
||||
print &ui_table_start(undef, undef, 2);
|
||||
print &ui_table_row($text{'index_shatoomany'}, &ui_submit($text{'index_shalook2'}));
|
||||
print &ui_table_row($matches, &ui_textbox("shared", "", 30));
|
||||
print &ui_table_end();
|
||||
print &ui_form_end(undef,undef,1);
|
||||
print &ui_form_start("lookup_shared.cgi", "get");
|
||||
print &ui_table_start(undef, undef, 2);
|
||||
print &ui_table_row($text{'index_shatoomany'}, &ui_submit($text{'index_shalook2'}));
|
||||
print &ui_table_row($matches, &ui_textbox("shared", "", 30));
|
||||
print &ui_table_end();
|
||||
print &ui_form_end(undef,undef,1);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -62,6 +62,7 @@ if (@sections > 1) {
|
||||
print &ui_form_start("config.cgi");
|
||||
print &ui_hidden("module", $m),"\n";
|
||||
print $text{'config_section'},"\n";
|
||||
&print_config_posted_params();
|
||||
print &ui_select("section", $in{'section'}, \@sections,
|
||||
1, 0, 0, 0, "onChange='form.submit()'");
|
||||
print &ui_submit($text{'config_change'});
|
||||
@@ -76,6 +77,7 @@ if (@sections > 1) {
|
||||
print &ui_form_start("config_save.cgi", "post");
|
||||
print &ui_hidden("module", $m),"\n";
|
||||
print &ui_hidden("section", $in{'section'}),"\n";
|
||||
&print_config_posted_params();
|
||||
if ($s) {
|
||||
# Find next section
|
||||
$idx = &indexof($s, @sections);
|
||||
@@ -122,6 +124,6 @@ if ($m eq "virtual-server") {
|
||||
&ui_print_footer("/right.cgi", $text{'config_return'});
|
||||
}
|
||||
else {
|
||||
&ui_print_footer("/$m", $text{'index'});
|
||||
&ui_print_footer(&get_config_posted_params("/$m/"), $text{'index'});
|
||||
}
|
||||
|
||||
|
||||
@@ -41,13 +41,14 @@ if (&foreign_require($m) &&
|
||||
}
|
||||
|
||||
&webmin_log("_config_", undef, undef, \%in, $m);
|
||||
my $redirect_url;
|
||||
if ($in{'save_next'}) {
|
||||
&redirect("config.cgi?module=$in{'module'}§ion=$in{'section_next'}");
|
||||
$redirect_url = &get_query_config_posted_params("config.cgi?module=$in{'module'}§ion=$in{'section_next'}");
|
||||
}
|
||||
elsif ($m eq "virtual-server") {
|
||||
&redirect("/right.cgi");
|
||||
$redirect_url = "/right.cgi";
|
||||
}
|
||||
else {
|
||||
&redirect("/$m/");
|
||||
$redirect_url = &get_config_posted_params("/$m/");
|
||||
}
|
||||
|
||||
&redirect($redirect_url);
|
||||
|
||||
@@ -710,3 +710,30 @@ body > .mode > b[data-mode="server-manager"] > a > .ff-cloudmin {
|
||||
.shell select[name="pcmd"] {
|
||||
max-width: 65vw;
|
||||
}
|
||||
|
||||
[data-pro-disabled$="-link"] {
|
||||
filter: grayscale(1) contrast(0.1);
|
||||
opacity: 1;
|
||||
}
|
||||
[data-pro-disabled="cell"],
|
||||
[data-pro-disabled$="-elem"] {
|
||||
filter:grayscale(1);
|
||||
opacity: .73;
|
||||
}
|
||||
[data-pro-disabled$="-elem"] input:not([type="radio"]):not([type="checkbox"]) {
|
||||
filter: grayscale(1) contrast(0.9);
|
||||
}
|
||||
[data-pro-disabled$="-elem"] input {
|
||||
cursor: not-allowed !important;
|
||||
}
|
||||
.linkwithicon.inactive a,
|
||||
.linkindented.inactive a,
|
||||
[data-pro-disabled$="-link"] a {
|
||||
cursor: alias;
|
||||
}
|
||||
[data-pro-disabled$="-elem"] a {
|
||||
filter: grayscale(1) contrast(0.5);
|
||||
}
|
||||
[data-pro-disabled$="-elem"] a:hover {
|
||||
filter: grayscale(1) contrast(1);
|
||||
}
|
||||
|
||||
6
logrotate/config.info.ru
Normal file
6
logrotate/config.info.ru
Normal file
@@ -0,0 +1,6 @@
|
||||
line1=Настраиваемые параметры,11
|
||||
sort_mode=Сортировать файлы журналов по:,1,1-имени файла журнала,0-порядку в файле конфигурации
|
||||
add_file=Добавьте новые разделы logrotate в,3,основной файл конфигурации
|
||||
line2=Конфигурация системы,11
|
||||
logrotate_conf=Путь к файлу конфигурации logrotate,0
|
||||
logrotate=Путь к программе logrotate,0
|
||||
118
logrotate/lang/ru
Normal file
118
logrotate/lang/ru
Normal file
@@ -0,0 +1,118 @@
|
||||
index_title=Ротация файлов журналов
|
||||
index_econf=Файл конфигурации ротации журналов $1 не найден в вашей системе. Возможно, logrotate не установлен или <a href='$2'>конфигурация модуля</a> неверна.
|
||||
index_ecmd=Программа ротации журналов $1 не найдена в вашей системе. Возможно, она не установлена или <a href='$2'>конфигурация модуля</a> неверна.
|
||||
index_eversion=Не удалось получить версию logrotate с помощью команды $1: $2
|
||||
index_version=Logrotate версия $1
|
||||
index_add=Добавьте новый файл журнала для ротации.
|
||||
index_file=Файл журнала
|
||||
index_period=Период ротации
|
||||
index_post=Команда после ротации
|
||||
index_none=Файлы журналов еще не определены.
|
||||
index_global=Редактировать глобальные параметры
|
||||
index_globaldesc=Нажмите эту кнопку, чтобы изменить настройки, применимые ко всем файлам журналов, и определить значения по умолчанию для журналов.
|
||||
index_sched=Изменить расписание
|
||||
index_scheddesc=Нажмите эту кнопку, чтобы изменить расписание, по которому cron запускает logrotate, а также включить или отключить его.
|
||||
index_nocmd=Ничего
|
||||
index_notset=Не задано
|
||||
index_return=списку файлов журналов
|
||||
index_force=Принудительная ротация журналов
|
||||
index_forcedesc=Принудительно выполнить немедленную ротацию всех файлов журналов, даже если время еще не пришло.
|
||||
index_logrotate=Logrotate
|
||||
index_delete=Удалить выбранную ротацию журналов
|
||||
|
||||
period_daily=Ежедневно
|
||||
period_weekly=Еженедельно
|
||||
period_monthly=Ежемесячно
|
||||
period_never=Никогда
|
||||
period_bytes=байт
|
||||
|
||||
edit_title1=Редактирование настройки ротации
|
||||
edit_title2=Создать файл журнала
|
||||
edit_header=Настройка ротации журнала
|
||||
edit_file=Пути к файлам журналов
|
||||
edit_sched=Расписание ротации
|
||||
edit_rotate=Количество старых журналов, которые нужно сохранить
|
||||
edit_compress=Сжать старые файлы журналов?
|
||||
edit_delaycompress=Отложить сжатие до следующего цикла?
|
||||
edit_copytruncate=Усечь файл журнала?
|
||||
edit_ifempty=Ротировать, даже если файл журнала пуст?
|
||||
edit_missingok=Игнорировать файл журнала, если он отсутствует?
|
||||
edit_size=Максимальный размер до ротации
|
||||
edit_always=Игнорируется
|
||||
edit_minsize=Минимальный размер для ротации
|
||||
edit_nominsize=Всегда
|
||||
edit_ext=Расширение для ротированных имен файлов
|
||||
edit_dateext=Использовать расширение даты для ротированных файлов
|
||||
edit_mail=Отправить файл журнала по электронной почте перед удалением?
|
||||
edit_mailto=Да, на адрес
|
||||
edit_mailno=Нет, не отправлять
|
||||
edit_mailfl=Файл журнала на электронную почту
|
||||
edit_mailfirst=Самый новый, который только что был ротирован
|
||||
edit_maillast=Самый старый, который скоро будет удален
|
||||
edit_create=Пересоздать файл журнала после ротации?
|
||||
edit_createas=Да, с правами $1, принадлежит пользователю $2 и группе $3.
|
||||
edit_createno=Нет, не создавать заново
|
||||
edit_createsame=Да, со старыми разрешениями
|
||||
edit_olddir=Хранить старые ротированные журналы в
|
||||
edit_olddirto=В каталоге
|
||||
edit_olddirsame=Каталог с тем же именем, что и файл журнала
|
||||
edit_errors=Сообщения об ошибках по электронной почте
|
||||
edit_errorsno=Никто
|
||||
edit_errorsto=Адрес или пользователь
|
||||
edit_post=Команды, выполняемые после ротации
|
||||
edit_pre=Команды, выполняемые перед ротацией
|
||||
edit_default=По умолчанию ($1)
|
||||
edit_sharedscripts=Запускать сценарии только один раз для всех файлов?
|
||||
edit_now=Ротировать сейчас
|
||||
edit_clone=Клонировать
|
||||
|
||||
global_title=Глобальные параметры
|
||||
global_header=Параметры по умолчанию для всех файлов журналов
|
||||
|
||||
save_err=Failed to save log
|
||||
save_efile=Не удалось сохранить журнал
|
||||
save_esize=Отсутствует или недействителен максимальный размер
|
||||
save_eminsize=Отсутствует или недействителен минимальный размер
|
||||
save_erotate=Отсутствует или неверно указано максимальное количество старых журналов для хранения
|
||||
save_ecreatemode=Отсутствует или недействителен режим создания 3- или 4-значного восьмеричного числа.
|
||||
save_ecreateuser=Отсутствует или недействителен созданный пользователь
|
||||
save_ecreategroup=Группа создания отсутствует или недействительна
|
||||
save_emust1=При входе в режим создания необходимо войти под соответствующим пользователем
|
||||
save_emust2=При входе в режим создания необходимо войти под соответствующей группой
|
||||
save_eolddirto=Отсутствует или неверен каталог для старых ротированных журналов
|
||||
save_eext=Отсутствует расширение для имен файлов ротированных журналов
|
||||
save_emailto=Отсутствует адрес электронной почты для ротируемых журналов
|
||||
save_eerrors=Отсутствует адрес электронной почты для сообщений об ошибках
|
||||
save_epre=Сценарий перед ротацией не может содержать строку <tt>endscript</tt> или <tt>endrotate</tt>
|
||||
save_epost=Сценарий после ротации не может содержать строку <tt>endscript</tt> или <tt>endrotate</tt>
|
||||
save_enofiles=Файлы для ротации не указаны
|
||||
|
||||
log_modify_sched=Изменено задание Cron по ротации журналов
|
||||
log_create_sched=Создано задание Cron по ротации журналов
|
||||
log_delete_sched=Удалено задание Cron по ротации журналов
|
||||
log_global=Измененные глобальные параметры
|
||||
log_create=Добавлена ротация файла журнала $1
|
||||
log_modify=Изменена ротация для файла журнала $1
|
||||
log_delete=Удалена ротация для файла журнала $1
|
||||
log_delete_logs=Удалена ротация файлов журналов $1
|
||||
|
||||
sched_title=График ротации журналов
|
||||
sched_desc=Для выполнения ротации журналов, настроенной с помощью этого модуля, команда $1 должна запускаться Cron по регулярному расписанию (обычно ежедневно).
|
||||
sched_runparts=В настоящее время команда ротации журналов запускается из сценария $1 $2 и не может быть изменена.
|
||||
sched_sched=Задание Cron по ротации журналов
|
||||
sched_disabled=Отключено
|
||||
sched_enabled=Включено, по времени ..
|
||||
sched_save=Обновить задание Cron
|
||||
sched_err=Не удалось сохранить задание для ротации
|
||||
sched_when=Время запуска
|
||||
|
||||
force_title=Принудительная ротация журнала
|
||||
force_doing=Принудительная немедленная ротация всех файлов журналов ..
|
||||
force_doingone=Принудительная немедленная ротация одного файла журнала ..
|
||||
force_done=.. выполнено.
|
||||
force_failed=.. не выполнено! Смотрите вывод выше, чтобы понять причину.
|
||||
|
||||
delete_err=Не удалось удалить журналы
|
||||
delete_enone=Ничего не выбрано
|
||||
|
||||
__norefs=1
|
||||
@@ -0,0 +1,3 @@
|
||||
name_ru=Ротация файлов журналов
|
||||
longdesc_ru=Настройте автоматическую ротацию Apache, Squid, Syslog и других файлов журналов.
|
||||
desc_ru=Ротация файлов журналов
|
||||
|
||||
6
logviewer/config.info.ru
Normal file
6
logviewer/config.info.ru
Normal file
@@ -0,0 +1,6 @@
|
||||
line1=Настраиваемые параметры,11
|
||||
lines=Количество отображаемых строк по умолчанию,0,6
|
||||
refresh=Интервал обновлениями просмотра журнала (сек.),3,Никогда
|
||||
others=Показать логи других модулей?,1,1-Да,0-Нет
|
||||
extras=Дополнительные файлы журналов для отображения,9,50,4,\t
|
||||
reverse=Порядок отображения журнала,1,1-Самые новые вверху,0-Самые новые внизу
|
||||
41
logviewer/lang/ru
Normal file
41
logviewer/lang/ru
Normal file
@@ -0,0 +1,41 @@
|
||||
index_title=Просмотр системных журналов
|
||||
index_elogs=Журналы для отображения не найдены
|
||||
index_to=Журнал
|
||||
index_rule=Описание
|
||||
index_file=Файл $1
|
||||
index_cmd=Вывод из $1
|
||||
index_return=списку журналов
|
||||
index_view=Просмотр..
|
||||
index_viewfile=Просмотреть файл журнала:
|
||||
index_viewok=Просмотр
|
||||
|
||||
journal_journalctl=Все сообщения
|
||||
journal_expla_journalctl=Все сообщения с пояснениями
|
||||
journal_journalctl_dmesg=Сообщения ядра
|
||||
journal_journalctl_debug_info=Отладочные и информационные сообщения
|
||||
journal_journalctl_notice_warning=Уведомления и предупреждающие сообщения
|
||||
journal_journalctl_err_crit=Ошибки и критические сообщения
|
||||
journal_journalctl_alert_emerg=Оповещения и экстренные сообщения
|
||||
|
||||
view_title=Просмотр файла журнала
|
||||
view_header=Последние $1 строк из $2
|
||||
view_header2=Последние $1 строк из $2 файла
|
||||
view_empty=Пустой журнал
|
||||
view_refresh=Обновить
|
||||
view_filter=Фильтровать строки с текстом $1
|
||||
|
||||
save_efile='$1' не является допустимым именем файла : $2
|
||||
save_ecannot2=Вам не разрешено просматривать этот журнал
|
||||
save_ecannot6=Вам не разрешено просматривать произвольные журналы
|
||||
save_ecannot7=Вам не разрешено просматривать этот дополнительный журнал
|
||||
save_emissing=Отсутствует файл журнала для просмотра
|
||||
|
||||
acl_any=Можно ли просмотреть любой файл как журнал?
|
||||
acl_logs=Может просматривать и настраивать файлы журналов
|
||||
acl_all=Все журналы
|
||||
acl_sel=Только перечисленные файлы и файлы, находящиеся в перечисленных каталогах ..
|
||||
acl_extra=Дополнительные файлы журналов для этого пользователя
|
||||
acl_syslog=Можно ли просматривать журналы syslog?
|
||||
acl_others=Можно ли просматривать логи других модулей?
|
||||
|
||||
__norefs=1
|
||||
3
logviewer/module.info.ru
Normal file
3
logviewer/module.info.ru
Normal file
@@ -0,0 +1,3 @@
|
||||
longdesc_ru=Просмотр и поиск всех журналов, доступных в системе
|
||||
name_ru=Системные журналы
|
||||
desc_ru=Cистемные журналы
|
||||
@@ -2583,14 +2583,14 @@ return @rv;
|
||||
# Read a single message from a file
|
||||
sub read_mail_file
|
||||
{
|
||||
local (@headers, $mail);
|
||||
my ($file, $headersonly) = @_;
|
||||
|
||||
# Open and read the mail file
|
||||
&open_as_mail_user(MAIL, $_[0]) || return undef;
|
||||
$mail = &read_mail_fh(MAIL, 0, $_[1]);
|
||||
$mail->{'file'} = $_[0];
|
||||
&open_as_mail_user(MAIL, $file) || return undef;
|
||||
my $mail = &read_mail_fh(MAIL, 0, $headersonly);
|
||||
$mail->{'file'} = $file;
|
||||
close(MAIL);
|
||||
local @st = stat($_[0]);
|
||||
local @st = stat($file);
|
||||
$mail->{'size'} = $st[7];
|
||||
$mail->{'time'} = $st[9];
|
||||
|
||||
@@ -2613,14 +2613,15 @@ return $mail;
|
||||
# higher = number of bytes
|
||||
sub read_mail_fh
|
||||
{
|
||||
local ($fh, $endmode, $headeronly) = @_;
|
||||
local (@headers, $mail);
|
||||
my ($fh, $endmode, $headersonly) = @_;
|
||||
my @headers;
|
||||
my $mail = { };
|
||||
|
||||
# Read the headers
|
||||
local $lnum = 0;
|
||||
my $lnum = 0;
|
||||
while(1) {
|
||||
$lnum++;
|
||||
local $line = <$fh>;
|
||||
my $line = <$fh>;
|
||||
$mail->{'size'} += length($line);
|
||||
$line =~ s/\r|\n//g;
|
||||
last if ($line eq '');
|
||||
|
||||
@@ -1553,7 +1553,7 @@ if ($folder->{'type'} == 1 || $folder->{'type'} == 3) {
|
||||
&get_maildir_files($folder->{'file'}) :
|
||||
&get_mhdir_files($folder->{'file'});
|
||||
if ($folder->{'type'} == 1) {
|
||||
foreach my $sf (glob("$folder->{'file'}/.??*")) {
|
||||
foreach my $sf (glob("\"$folder->{'file'}\"/.??*")) {
|
||||
push(@files, &get_maildir_files($sf));
|
||||
}
|
||||
}
|
||||
@@ -3643,7 +3643,7 @@ if (!%hasattach) {
|
||||
}
|
||||
else {
|
||||
$hasattach_file = "$module_config_directory/attach";
|
||||
if (!glob($hasattach_file."*")) {
|
||||
if (!glob("\"$hasattach_file\".*")) {
|
||||
$hasattach_file = "$module_var_directory/attach";
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1122,7 +1122,7 @@ foreach my $folder (&list_user_folders($user)) {
|
||||
&unlink_file($ifile);
|
||||
}
|
||||
else {
|
||||
&unlink_file(glob("$ifile.{dir,pag,db}"));
|
||||
&unlink_file(glob("\"$ifile\".{dir,pag,db}"));
|
||||
}
|
||||
&unlink_file("$ifile.ids");
|
||||
}
|
||||
@@ -1136,7 +1136,7 @@ foreach my $folder (&list_user_folders($user)) {
|
||||
&unlink_file($ifile);
|
||||
}
|
||||
else {
|
||||
&unlink_file(glob("$ifile.{dir,pag,db}"));
|
||||
&unlink_file(glob("\"$ifile\".{dir,pag,db}"));
|
||||
}
|
||||
}
|
||||
# Remove read file
|
||||
@@ -1145,7 +1145,7 @@ if (-r $read) {
|
||||
&unlink_file($read);
|
||||
}
|
||||
else {
|
||||
&unlink_file(glob("$read.{dir,pag,db}"));
|
||||
&unlink_file(glob("\"$read\".{dir,pag,db}"));
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1280,7 +1280,7 @@ sub user_read_dbm_file
|
||||
{
|
||||
my ($user) = @_;
|
||||
my $rv = "$module_config_directory/$user.read";
|
||||
if (!glob($rv."*")) {
|
||||
if (!glob("\"$rv\".*")) {
|
||||
$rv = "$module_var_directory/$user.read";
|
||||
}
|
||||
return $rv;
|
||||
|
||||
@@ -1028,25 +1028,26 @@ sub execute_sql_file
|
||||
if (&is_readonly_mode()) {
|
||||
return (0, undef);
|
||||
}
|
||||
local ($db, $file, $user, $pass) = @_;
|
||||
local $authstr = &make_authstr($user, $pass);
|
||||
local $cs = $sql_charset ? "--default-character-set=".quotemeta($sql_charset)
|
||||
my ($db, $file, $user, $pass) = @_;
|
||||
-r $file || return (1, "$file does not exist");
|
||||
my $authstr = &make_authstr($user, $pass);
|
||||
my $cs = $sql_charset ? "--default-character-set=".quotemeta($sql_charset)
|
||||
: "";
|
||||
local $temp = &transname();
|
||||
my $temp = &transname();
|
||||
$file = &fix_collation($file);
|
||||
&open_tempfile(TEMP, ">$temp");
|
||||
&print_tempfile(TEMP, "source ".&fix_collation($file).";\n");
|
||||
&print_tempfile(TEMP, "source ".$file.";\n");
|
||||
&close_tempfile(TEMP);
|
||||
&set_ownership_permissions(undef, undef, 0644, $temp);
|
||||
&set_authstr_env();
|
||||
local $cmd = "$config{'mysql'} $authstr -t ".quotemeta($db)." ".$cs.
|
||||
my $cmd = "$config{'mysql'} $authstr -t ".quotemeta($db)." ".$cs.
|
||||
" <".quotemeta($temp);
|
||||
-r $file || return (1, "$file does not exist");
|
||||
if ($_[4] && $_[4] ne 'root' && $< == 0) {
|
||||
# Restoring as a Unix user
|
||||
$cmd = &command_as_user($_[4], 0, $cmd);
|
||||
}
|
||||
local $out = &backquote_logged("$cmd 2>&1");
|
||||
local @rv;
|
||||
my $out = &backquote_logged("$cmd 2>&1");
|
||||
my @rv;
|
||||
if ($?) {
|
||||
# Total failure
|
||||
@rv = ($?, $out || "$cmd failed");
|
||||
|
||||
@@ -500,7 +500,7 @@ my @cpu;
|
||||
my @fans;
|
||||
my @cputhermisters;
|
||||
if (&has_command("sensors")) {
|
||||
my ($cpu, $cpu_aux, $cpu_package, $cpu_broadcom, $cpu_amd);
|
||||
my ($cpu, $cpu_aux, $cpu_unnamed, $cpu_package, $cpu_broadcom, $cpu_amd);
|
||||
my $fh = "SENSORS";
|
||||
|
||||
# Examples https://gist.github.com/547451c9ca376b2d18f9bb8d3748276c
|
||||
@@ -563,7 +563,7 @@ if (&has_command("sensors")) {
|
||||
else {
|
||||
|
||||
# Auxiliary CPU temperature and fans were already captured
|
||||
next if ($cpu_aux);
|
||||
next if ($cpu_aux && !$cpu_unnamed);
|
||||
|
||||
# CPU types
|
||||
($cpu_broadcom) = $_ =~ /cpu_thermal-virtual-[\d]+/i if (!$cpu_broadcom);
|
||||
@@ -598,6 +598,13 @@ if (&has_command("sensors")) {
|
||||
'temp' => int($2)
|
||||
});
|
||||
}
|
||||
elsif (/cpu\s+temp(.*?):\s+([\+\-][0-9\.]+)/i) {
|
||||
$cpu_unnamed++;
|
||||
push(@cpu,
|
||||
{ 'core' => $cpu_unnamed,
|
||||
'temp' => int($2)
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
# AMD
|
||||
|
||||
@@ -1826,7 +1826,7 @@ sub error_stderr
|
||||
{
|
||||
my ($err, $ret) = @_;
|
||||
my (@tm, @month, @gmt, $days, $hours, $mins, $timezone,
|
||||
$make_datestr, $remove_host, $page);
|
||||
$make_datestr, $remote_host, $page);
|
||||
@tm = localtime(time());
|
||||
@month = ( "Jan", "Feb", "Mar", "Apr", "May", "Jun",
|
||||
"Jul", "Aug", "Sep", "Oct", "Nov", "Dec" );
|
||||
@@ -1842,14 +1842,14 @@ $make_datestr =
|
||||
sprintf("%2.2d/%s/%4.4d:%2.2d:%2.2d:%2.2d %s",
|
||||
$tm[3], $month[$tm[4]], $tm[5]+1900,
|
||||
$tm[2], $tm[1], $tm[0], $timezone);
|
||||
$remove_host = $ENV{"REMOTE_HOST"};
|
||||
$remote_host = $ENV{"REMOTE_HOST"};
|
||||
$page = $ENV{"REQUEST_URI"};
|
||||
$err = &html_strip($err);
|
||||
$err =~ s/[\n\r]+/ /g;
|
||||
$err =~ s/\s\?$//g;
|
||||
$err =
|
||||
"[$make_datestr] " .
|
||||
($remove_host ? ( "[$remove_host] " ) : ( )) .
|
||||
($remote_host ? ( "[$remote_host] " ) : ( )) .
|
||||
($page ? ( "$page : " ) : ( )) . "$err\n";
|
||||
return $err if ($ret);
|
||||
print STDERR $err;
|
||||
|
||||
@@ -62,13 +62,14 @@ if (@locks) {
|
||||
[ 'kill', $text{'lock_kill'} ] ]);
|
||||
print &ui_details({
|
||||
'title' => $text{'lock_files'},
|
||||
'class' => 'warning',
|
||||
'class' => 'default',
|
||||
'content' => "$text{'lock_msg'}<br>" . $locked_content,
|
||||
'html' => 1}, 1);
|
||||
}
|
||||
else {
|
||||
print &ui_details({
|
||||
'title' => $text{'lock_nfiles'},
|
||||
'class' => 'default',
|
||||
'content' => $text{'lock_noneopen'},
|
||||
'html' => 1});
|
||||
}
|
||||
|
||||
@@ -189,6 +189,7 @@ if ($letsencrypt_cmd) {
|
||||
else {
|
||||
$reuse_flags = " --no-reuse-key";
|
||||
}
|
||||
$reuse_flags = "" if ($reuse_key && $reuse_key == -1);
|
||||
if ($server) {
|
||||
$server_flags = " --server ".quotemeta($server);
|
||||
if ($server_key) {
|
||||
|
||||
Reference in New Issue
Block a user