diff --git a/CHANGELOG.md b/CHANGELOG.md index e02c15d7b..5a3894ea3 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,10 +1,18 @@ ## Changelog -#### 2.400 (May 24, 2025) -* Added built-in support for forgotten password recovery -* Fixed bugs with IPv6 interface creation on systems using Network Manager -* Improved security of single-use login links -* Added support for SSL certificates and DNS over TLS in the BIND module +#### 2.400 (May 25, 2025) +* Add built-in support for forgotten password recovery +* Add support for SSL certificates and DNS over TLS in the BIND module +* Add support to configure listen for any type of address in Dovecot module +* Add display of the PHP binary and its version in the PHP Configuration module +* Add TOML as editable format in the File Manager module +* Add support for template variables in help pages +* Improve security of single-use login links +* Fix Linux systems to show human-readable timestamps in the System Logs module +* Fix to prefer JSON::XS over JSON::PP if available for better performance +* Fix bugs with IPv6 interface creation on systems using Network Manager +* Fix to address the security issue in the System Documentation module + #### 2.303 (March 14, 2025) * Fix permissions error when attempting to open a temp file for writing diff --git a/phpini/delete_pkgs.cgi b/phpini/delete_pkgs.cgi index 282a7d0c1..c15fc324e 100755 --- a/phpini/delete_pkgs.cgi +++ b/phpini/delete_pkgs.cgi @@ -31,6 +31,7 @@ foreach my $name (@d) { if (!$in{'confirm'}) { # Find the packages first + print "
\n"; print &ui_form_start("delete_pkgs.cgi"); foreach my $d (@d) { print &ui_hidden("d", $d); @@ -42,6 +43,7 @@ if (!$in{'confirm'}) { print &text('dpkgs_rusure', join(" ", map { "$_" } @alldel)),"

\n"; print &ui_form_end([ [ 'confirm', $text{'pkgs_delete'} ] ]); + print "

\n"; } else { # Actually do the deletion diff --git a/phpini/index.cgi b/phpini/index.cgi index 1d38bf387..00aa73312 100755 --- a/phpini/index.cgi +++ b/phpini/index.cgi @@ -3,22 +3,35 @@ require './phpini-lib.pl'; +# Get install button +my $install_button = &show_php_install_button(); + +# Do we have PHP installed? +my @pkgs = &list_php_base_packages(); +if (!@pkgs && $install_button) { + &ui_print_header(undef, $text{'index_title'}, "", undef, 1, 1); + &ui_print_endpage($text{'pkgs_none2'}."
".$install_button); + } + # Get editable files @files = &list_php_configs(); if (!@files) { # User doesn't have access to any &ui_print_header(undef, $text{'index_title'}, "", undef, 1, 1); - &ui_print_endpage($text{'index_eaccess'}); + &ui_print_endpage($text{'index_eaccess'}."
". + $install_button); } @files = grep { -r $_->[0] } @files; if (!@files) { &ui_print_header(undef, $text{'index_title'}, "", undef, 1, 1); if ($access{'noconfig'}) { - &ui_print_endpage($text{'index_efiles'}); + &ui_print_endpage($text{'index_efiles'}."
". + $install_button); } else { &ui_print_endpage(&text('index_efiles2', - "../config.cgi?$module_name")); + "../config.cgi?$module_name")."
". + $install_button); } } @@ -37,7 +50,7 @@ else { 100, 0, \@tds); foreach $f (@files) { local @acts = ( "$text{'index_edit'}" ); + &urlize($f->[0])."'>$text{'index_medit'}" ); if ($access{'manual'}) { push(@acts, "$text{'index_manual'}"); @@ -57,20 +70,29 @@ else { print "$text{'index_anyfile'}  \n"; print &ui_textbox("file", undef, 40)." ". &file_chooser_button("file")." ". - &ui_submit($text{'index_edit'})."\n"; + &ui_submit($text{'index_medit'})."\n"; print &ui_form_end(); } # Show button to install PHP versions - if ($access{'global'} && &foreign_available("software")) { - print &ui_hr(); - print &ui_buttons_start(); - print &ui_buttons_row("list_pkgs.cgi", - $text{'index_pkgs'}, - $text{'index_pkgsdesc'}); - print &ui_buttons_end(); - } + print &show_php_install_button(); &ui_print_footer("/", $text{'index'}); } +# Print PHP install button if available +# Returns a button to install new PHP versions +sub show_php_install_button +{ +&load_theme_library(); +my $rv = ''; +if ($access{'global'} && &foreign_available("software")) { + $rv .= &ui_hr(); + $rv .= &ui_buttons_start(); + $rv .= &ui_buttons_row("list_pkgs.cgi", + $text{'index_pkgs'}, + $text{'index_pkgsdesc'}); + $rv .= &ui_buttons_end(); + } +return $rv; +} diff --git a/phpini/lang/ar.auto b/phpini/lang/ar.auto index cba6edc04..6b25aa9e7 100644 --- a/phpini/lang/ar.auto +++ b/phpini/lang/ar.auto @@ -5,7 +5,7 @@ index_efiles2=لم يتم العثور على ملفات تهيئة PHP. اضب index_file=ملف الضبط index_desc=هدف index_actions=أجراءات -index_edit=يدير +index_medit=يدير index_manual=تحرير يدوي index_anyfile=تعديل ملف تكوين PHP الآخر index_return=ملفات التكوين diff --git a/phpini/lang/bg.auto b/phpini/lang/bg.auto index 859e8710b..4f40e84ab 100644 --- a/phpini/lang/bg.auto +++ b/phpini/lang/bg.auto @@ -5,7 +5,7 @@ index_efiles2=Не бяха намерени конфигурационни фа index_file=Конфигурационен файл index_desc=Предназначение index_actions=мерки -index_edit=управлявам +index_medit=управлявам index_manual=Редактирайте ръчно index_anyfile=Редактирайте друг PHP конфигурационен файл index_return=конфигурационни файлове diff --git a/phpini/lang/ca b/phpini/lang/ca index a3c31e206..a802502ac 100644 --- a/phpini/lang/ca +++ b/phpini/lang/ca @@ -5,7 +5,7 @@ index_efiles2=No s'ha trobat cap fitxer de configuració de PHP. Ajusta la mod index_file=Konfigurationsfil index_desc=Formål index_actions=Handlinger -index_edit=Styre +index_medit=Styre index_manual=Rediger manuelt index_anyfile=Rediger anden PHP-konfigurationsfil index_return=konfigurationsfiler diff --git a/phpini/lang/de b/phpini/lang/de index d62cf25e1..e1515c16c 100644 --- a/phpini/lang/de +++ b/phpini/lang/de @@ -5,7 +5,7 @@ index_efiles2=Es wurden keine PHP-Konfigurationsdateien gefunden. Passen Sie die index_file=Konfigurationsdatei index_desc=Verwendungszweck index_actions=Aktionen -index_edit=Verwalten +index_medit=Verwalten index_manual=Manuell bearbeiten index_anyfile=Andere PHP-Konfigurationsdatei bearbeiten index_return=Konfigurationsdateien @@ -230,7 +230,7 @@ pkgs_ecannot=Sie haben keine Berechtigung, PHP-Pakete zu verwalten! pkgs_ecannot2=Softwarepakete können auf diesem System nicht verwaltet werden pkgs_nousers=Keine Domains pkgs_ucount=$1 Domains -pkgs_newver=Zu installierendes PHP-Paket: +pkgs_newver=Zu installierendes PHP-Paket pkgs_install=Jetzt installieren pkgs_return=PHP-Pakete diff --git a/phpini/lang/el.auto b/phpini/lang/el.auto index fadadcf97..b50a8720d 100644 --- a/phpini/lang/el.auto +++ b/phpini/lang/el.auto @@ -5,7 +5,7 @@ index_efiles2=Δεν βρέθηκαν αρχεία ρυθμίσεων PHP. Ρυ index_file=Αρχείο ρυθμίσεων index_desc=Σκοπός index_actions=Ενέργειες -index_edit=Διαχειρίζονται +index_medit=Διαχειρίζονται index_manual=Επεξεργασία Μη αυτόματα index_anyfile=Επεξεργαστείτε άλλο αρχείο διαμόρφωσης PHP index_return=αρχεία διαμόρφωσης diff --git a/phpini/lang/en b/phpini/lang/en index 983299e46..ffad4c04d 100644 --- a/phpini/lang/en +++ b/phpini/lang/en @@ -5,7 +5,7 @@ index_efiles2=No PHP configuration files were found. Adjust the mod index_file=Configuration file index_desc=Purpose index_actions=Actions -index_edit=Manage +index_medit=Manage index_manual=Edit Manually index_anyfile=Edit other PHP configuration file index_return=configuration files @@ -226,11 +226,12 @@ pkgs_shortver=Short version pkgs_users=Used by pkgs_delete=Delete Selected Packages pkgs_none=No PHP packages were found on your system! +pkgs_none2=No PHP versions were found on your system. Click the button below to install one, if available in your software package repository. pkgs_ecannot=You are not allowed to manage PHP packages! pkgs_ecannot2=Software packages cannot be managed on this system pkgs_nousers=No domains pkgs_ucount=$1 domains -pkgs_newver=PHP package to install: +pkgs_newver=PHP package to install pkgs_install=Install Now pkgs_return=PHP packages diff --git a/phpini/lang/es.auto b/phpini/lang/es.auto index d071eefad..2dd23ed85 100644 --- a/phpini/lang/es.auto +++ b/phpini/lang/es.auto @@ -5,7 +5,7 @@ index_efiles2=No se encontraron archivos de configuración de PHP. Ajuste la index_file=Konfigurazio fitxategia index_desc=helburua index_actions=Ekintzak -index_edit=kudeatu +index_medit=kudeatu index_manual=Editatu eskuz index_anyfile=Editatu beste PHP konfigurazio fitxategia index_return=konfigurazio fitxategiak diff --git a/phpini/lang/fa.auto b/phpini/lang/fa.auto index a5d51d688..bdde900cf 100644 --- a/phpini/lang/fa.auto +++ b/phpini/lang/fa.auto @@ -5,7 +5,7 @@ index_efiles2=هیچ پرونده پیکربندی PHP یافت نشد. تنظی index_file=فایل پیکربندی index_desc=هدف index_actions=اقدامات -index_edit=مدیریت کنید +index_medit=مدیریت کنید index_manual=ویرایش دستی index_anyfile=سایر فایل های پیکربندی PHP را ویرایش کنید index_return=پرونده های پیکربندی diff --git a/phpini/lang/fi.auto b/phpini/lang/fi.auto index 87f5ccc63..bdc3a47a3 100644 --- a/phpini/lang/fi.auto +++ b/phpini/lang/fi.auto @@ -5,7 +5,7 @@ index_efiles2=PHP-määritystiedostoja ei löytynyt. Säädä moduu index_file=Asetustiedosto index_desc=Tarkoitus index_actions=Toiminnot -index_edit=hoitaa +index_medit=hoitaa index_manual=Muokkaa manuaalisesti index_anyfile=Muokkaa muuta PHP-asetustiedostoa index_return=kokoonpanotiedostot diff --git a/phpini/lang/fr b/phpini/lang/fr index 959ff02d6..5c2151ea6 100644 --- a/phpini/lang/fr +++ b/phpini/lang/fr @@ -5,7 +5,7 @@ index_efiles2=Aucun fichier de configuration PHP n'a été trouvé. Ajustez la < index_file=Fichier de configuration index_desc=Objectif index_actions=Actions -index_edit=Gérer +index_medit=Gérer index_manual=Modifier manuellement index_return=fichiers de configuration diff --git a/phpini/lang/hr.auto b/phpini/lang/hr.auto index ebcdf2fdb..2ac6a7189 100644 --- a/phpini/lang/hr.auto +++ b/phpini/lang/hr.auto @@ -5,7 +5,7 @@ index_efiles2=Nisu pronađene PHP konfiguracijske datoteke. Podesite konfiguraci index_file=Konfiguracijska datoteka index_desc=Svrha index_actions=akcije -index_edit=Upravljati +index_medit=Upravljati index_manual=Ručno uređivanje index_anyfile=Uredite drugu PHP konfiguracijsku datoteku index_return=konfiguracijske datoteke diff --git a/phpini/lang/hu b/phpini/lang/hu index 91d00c9df..0bdf5ba6a 100644 --- a/phpini/lang/hu +++ b/phpini/lang/hu @@ -2,7 +2,7 @@ index_title=PHP konfiguráció index_file=Konfigurációs fájl index_desc=Cél index_actions=Művelet -index_edit=Beállítás +index_medit=Beállítás index_manual=Kézi szerkesztés index_return=Konfigurációs fájlok diff --git a/phpini/lang/it b/phpini/lang/it index eccc6adc9..d7a7b604d 100644 --- a/phpini/lang/it +++ b/phpini/lang/it @@ -5,7 +5,7 @@ index_efiles2=Non è stato trovato alcun file di configurazione di PHP. Modifica index_file=File di configurazione index_desc=Tipologia index_actions=Azioni -index_edit=Modifica +index_medit=Modifica index_manual=Modifica manualmente index_return=file di configurazione diff --git a/phpini/lang/ja.auto b/phpini/lang/ja.auto index 7ebe780bf..46817d827 100644 --- a/phpini/lang/ja.auto +++ b/phpini/lang/ja.auto @@ -5,7 +5,7 @@ index_efiles2=PHP構成ファイルが見つかりませんでした。 모듈 index_file=설정 파일 index_desc=사용처 index_actions=작동 -index_edit=관리 +index_medit=관리 index_manual=수동 편집 index_return=설정 파일 diff --git a/phpini/lang/ms.auto b/phpini/lang/ms.auto index 498bb059f..7e827a56d 100644 --- a/phpini/lang/ms.auto +++ b/phpini/lang/ms.auto @@ -5,7 +5,7 @@ index_efiles2=Tiada fail konfigurasi PHP ditemui. Laraskan konfigur index_file=Fail konfigurasi index_desc=Tujuan index_actions=Tindakan -index_edit=Mengurus +index_medit=Mengurus index_manual=Edit secara manual index_anyfile=Edit fail konfigurasi PHP lain index_return=fail konfigurasi diff --git a/phpini/lang/nl b/phpini/lang/nl index 2d4631c51..6bffaac54 100644 --- a/phpini/lang/nl +++ b/phpini/lang/nl @@ -5,7 +5,7 @@ index_efiles2=Geen PHP configuratie files zijn gevonden. Verander de modulkonfi index_file=Konfigurasjonsfil index_desc=Hensikt index_actions=Handlinger -index_edit=Vedlikehold +index_medit=Vedlikehold index_manual=Rediger manuelt index_return=konfigurasjonsfiler diff --git a/phpini/lang/pl b/phpini/lang/pl index b22883f35..077fe0569 100644 --- a/phpini/lang/pl +++ b/phpini/lang/pl @@ -5,7 +5,7 @@ index_efiles2=Nie znaleziono plików konfiguracji PHP. Ustaw poprawne ścieżki index_file=Plik konfiguracyjny index_desc=Przeznaczenie index_actions=Działania -index_edit=Zarządzaj +index_medit=Zarządzaj index_manual=Edytuj ręcznie index_return=plików konfiguracyjnych diff --git a/phpini/lang/pt.auto b/phpini/lang/pt.auto index bd406b4ef..0f7445180 100644 --- a/phpini/lang/pt.auto +++ b/phpini/lang/pt.auto @@ -5,7 +5,7 @@ index_efiles2=Nenhum arquivo de configuração PHP foi encontrado. Ajuste a modulk index_file=Konfigurationsfil index_desc=Ändamål index_actions=Handlingar -index_edit=Klara av +index_medit=Klara av index_manual=Redigera manuellt index_anyfile=Redigera annan PHP-konfigurationsfil index_return=konfigurationsfiler diff --git a/phpini/lang/tr.auto b/phpini/lang/tr.auto index 90e088f6c..cc2e5256b 100644 --- a/phpini/lang/tr.auto +++ b/phpini/lang/tr.auto @@ -5,7 +5,7 @@ index_efiles2=PHP yapılandırma dosyası bulunamadı. Genel PHP yapılandırma index_file=Yapılandırma dosyası index_desc=amaç index_actions=Hareketler -index_edit=yönetme +index_medit=yönetme index_manual=Manuel Olarak Düzenle index_anyfile=Diğer PHP yapılandırma dosyasını düzenle index_return=yapılandırma dosyaları diff --git a/phpini/lang/uk.auto b/phpini/lang/uk.auto index da65ec006..74fba246e 100644 --- a/phpini/lang/uk.auto +++ b/phpini/lang/uk.auto @@ -5,7 +5,7 @@ index_efiles2=Файлів конфігурації PHP не знайдено. index_file=Файл конфігурації index_desc=Призначення index_actions=Дії -index_edit=Управління +index_medit=Управління index_manual=Редагувати вручну index_anyfile=Відредагуйте інший файл конфігурації PHP index_return=файли конфігурації diff --git a/phpini/lang/zh.auto b/phpini/lang/zh.auto index 9f1d066f3..a1ae7168a 100644 --- a/phpini/lang/zh.auto +++ b/phpini/lang/zh.auto @@ -5,7 +5,7 @@ index_efiles2=找不到PHP配置文件。调整模块配置, index_file=配置文件 index_desc=目的 index_actions=动作 -index_edit=管理 +index_medit=管理 index_manual=手动编辑 index_anyfile=编辑其他 PHP 配置文件 index_return=配置文件 diff --git a/phpini/lang/zh_TW.auto b/phpini/lang/zh_TW.auto index f66a0b600..f11416730 100644 --- a/phpini/lang/zh_TW.auto +++ b/phpini/lang/zh_TW.auto @@ -5,7 +5,7 @@ index_efiles2=找不到PHP配置文件。調整模塊配置, index_file=配置文件 index_desc=目的 index_actions=動作 -index_edit=管理 +index_medit=管理 index_manual=手動編輯 index_anyfile=編輯其他 PHP 設定檔 index_return=配置文件 diff --git a/phpini/list_pkgs.cgi b/phpini/list_pkgs.cgi index e3b1d5046..e8919e605 100755 --- a/phpini/list_pkgs.cgi +++ b/phpini/list_pkgs.cgi @@ -25,11 +25,15 @@ if (@pkgs) { my $users; if ($vmap) { my $ulist = $vmap->{$pkg->{'shortver'}}; + my $details = + &ui_details({ + class => 'inline', + html => 1, + title => &text('pkgs_ucount', scalar(@$ulist)), + content => join("
", + map { "$_->{'dom'}" } @$ulist)}); $users = !$ulist || !@$ulist ? $text{'pkgs_nousers'} : - @$ulist > 5 ? &text('pkgs_ucount', - scalar(@$ulist)) : - join(", ", map { "$_->{'dom'}" } - @$ulist); + $details; } print &ui_checked_columns_row([ $pkg->{'name'}, @@ -53,10 +57,10 @@ if (&foreign_installed("package-updates")) { print &ui_hr(); print &ui_form_start( &get_webprefix()."/package-updates/update.cgi", "post"); - print "$text{'pkgs_newver'}\n"; + print "$text{'pkgs_newver'} \n"; print &ui_select("u", undef, [ map { [ $_->{'name'}, - $_->{'name'}." (".$_->{'ver'}.")" ] } @newpkgs ]); + "PHP $_->{'shortver'}" ] } @newpkgs ]); print &ui_hidden( "redir", &get_webprefix()."/$module_name/list_pkgs.cgi"); print &ui_hidden("redirdesc", $text{'pkgs_title'}); diff --git a/phpini/phpini-lib.pl b/phpini/phpini-lib.pl index 7c6fa0dca..ed661a495 100755 --- a/phpini/phpini-lib.pl +++ b/phpini/phpini-lib.pl @@ -1010,7 +1010,8 @@ my ($pkg) = @_; foreach my $p (&list_all_php_version_packages($pkg)) { my @info = &software::package_info($p); next if (!@info); - my $err = &software::delete_package($p, { 'nodeps' => 1 }); + my $err = &software::delete_package($p, + { 'nodeps' => 1, 'depstoo' => 1 }); if ($err) { return &html_strip($err); } diff --git a/usermin/lang/de b/usermin/lang/de index 8e3a9717e..154185fb1 100644 --- a/usermin/lang/de +++ b/usermin/lang/de @@ -18,7 +18,7 @@ index_restart=Usermin neu starten index_restartmsg=Klicken Sie auf diese Schaltfläche, um den Usermin-Serverprozess neu zu starten. Dies kann notwendig sein, wenn Sie kürzlich Perl aktualisiert haben. access_title=IP-Zugangskontrolle -access_desc=Usermin kann so konfiguriert werden, dass der Zugriff nur von bestimmten IP-Adressen erlaubt oder verweigert wird. Hostnamen (wie foo.bar.com) und IP-Netzwerke (wie 10.254.3.0 oder 10.254.1.0/255.255.255.128 oder 10.254.1.0/25 oder 10.254.1.5-10.254.97.127) können ebenfalls eingegeben werden. Der Zugriff auf Usermin sollte auf vertrauenswürdige Adressen beschränkt werden, insbesondere wenn der Dienst über das Internet erreichbar ist. Andernfalls erhält jede:r, der:die das Passwort errät, vollständige Kontrolle über das System. +access_desc=Usermin kann so konfiguriert werden, dass der Zugriff nur von bestimmten IP-Adressen erlaubt oder verweigert wird. Hostnamen (wie foo.bar.com) und IP-Netzwerke (wie 10.254.3.0 oder 10.254.1.0/255.255.255.128 oder 10.254.1.0/25 oder 10.254.1.5-10.254.97.127) können ebenfalls eingegeben werden. Der Zugriff auf Usermin sollte auf vertrauenswürdige Adressen beschränkt werden, insbesondere wenn der Dienst über das Internet erreichbar ist. Andernfalls erhält jeder, der das Passwort errät, vollständige Kontrolle über das System. bind_title=Ports und Adressen bind_desc2=Dieses Formular kann verwendet werden, um die Portnummer zu ändern, auf der Usermin lauscht, oder es so zu konfigurieren, dass es nur auf einer einzigen IP-Adresse auf Ihrem System lauscht. Sie können es auch so konfigurieren, dass es Verbindungen auf mehreren Ports akzeptiert oder auf mehreren IP-Adressen lauscht. Hinweis: Ihr Webbrowser fordert Sie möglicherweise auf, sich nach der Änderung des Ports oder der Bindungsadresse erneut anzumelden.