Merge branch 'master' of github.com:webmin/webmin

This commit is contained in:
Jamie Cameron
2025-08-29 15:29:32 -07:00
14 changed files with 137 additions and 19 deletions

View File

@@ -1,12 +1,43 @@
## Changelog
#### 2.403 (June 30, 2025)
#### 2.500 (September, 2025)
* Add support for the Webmin webserver to work in both HTTP and HTTPS modes at the same time
* Add distinct warning to the login page if the connection is not secure
* Add support for timeouts in temporary rules in FirewallD module
* Add support for the new Dovecot version 2.4
* Add support for MariaDB version 12 #2522
* Add support for IMAP through a local command for Usermin
* Add latest SSLeay support for redirects to SSL work
* Add improvements to "Bootup and Shutdown" module for _systemd_ systems
* Add field for secondary server key in BIND module
* Add reversible encryption helpers API
* Add API to display relative dates
* Add API to mask sensitive text, like displayed passwords, unless hovered over
* Add status monitor for PHP FPM #2499
* Add support for DNF5 format in the "Software Packages" module
* Add support for redirecting to the enforced domain when the `musthost_redirect` directive is set
* Add a UI API to mask sensitive text—like displayed passwords, unless hovered over container
* Add option to customize the SMTP login for scheduled background monitoring in the "System and Server Status" module
* Change to show relative dates in "Webmin Users: Current Login Sessions" and "Webmin Actions Log: Search Results" pages
* Change "Last Logins" on the dashboard to show usernames, relative dates, and all users from the past 3 days
* Change to always enable HSTS by default
* Fix MySQL/MariaDB to remove obsolete `set-variable` options that break modern config files #2497
* Fix download link in table rows in MySQL/MariaDB module
* Fix module not to fail on old MySQL 5.5
* Update the Authentic theme to the latest version with various improvements and fixes:
- Add support to automatically set the color palette based on OS or browser preferences
- Add improvements to tooltips in dark palette
- Change the default shortcut key for toggling the light/dark palette
- Change the default shortcut key for toggling right slider
- Change wording to use "shortcut" instead of "hotkey"
- Change the default maximum column width
- Fix navigation menu load in proxy mode #2502
- Fix navigation menu to always stay in sync with the product switch
- Fix sporadic issue where the navigation menu disappeared and the content page was shifted
- Fix info alert text color and button color in the dark palette
- Fix styling of checkboxes and radios for backup and restore pages in Virtualmin
- Fix styling for extra backup destinations in Virtualmin
- Fix advanced schedule display in the cron chooser in Virtualmin
[More details...](https://github.com/webmin/authentic-theme/releases/tag/25.00)
#### 2.402 (June 16, 2025)
* Update the Authentic theme to the latest version with various fixes and improvements
@@ -131,7 +162,7 @@
* Update the Authentic theme to the latest version with various fixes and improvements
#### 2.201 (July 24, 2024)
* Fix real-time monitoring not updating graphs in the Dashboard [#2222](https://github.com/webmin/webmin/issues/2222)
* Fix real-time monitoring not updating graphs in the dashboard [#2222](https://github.com/webmin/webmin/issues/2222)
* Fix Terminal module to work correctly with _sudo_-capable users [#2223](https://github.com/webmin/webmin/issues/2223)
#### 2.200 (July 21, 2024)
@@ -244,7 +275,7 @@
* Add support for editing ACLs in File Manager
* Add support to configure SSL connection for MySQL/MariaDB module
* Add support for compressed backups in PostgreSQL module
* Add support for displaying inodes too in Disk Usage in the Dashboard
* Add support for displaying inodes too in Disk Usage in the dashboard
* Add better support for CloudLinux
* Fix to always default to RSA key type in Let's Encrypt requests
* Fix setup repository script for Oracle
@@ -252,7 +283,7 @@
* Fix support for SpamAssassin 4
* Fix to use system default hashing format for `htpasswd` file
* Fix FastRPC issues
* Update the Authentic theme to the latest version, with sped-up Dashboard performance
* Update the Authentic theme to the latest version, with sped-up dashboard performance
#### 2.013 (January 19, 2023)
* Fix Authentic theme issue with error handling

File diff suppressed because one or more lines are too long

View File

@@ -355,6 +355,7 @@ unix_utable=Allowed Unix users
sessions_title=Current Login Sessions
sessions_id=Session ID
sessions_user=Webmin user
sessions_login_ago=Last active ago
sessions_login=Last active at
sessions_host=IP address
sessions_lview=View logs..

View File

@@ -28,7 +28,7 @@ print &ui_columns_start([ $text{'sessions_id'},
$text{'sessions_state'},
$text{'sessions_user'},
$text{'sessions_host'},
$text{'sessions_login'},
$text{'sessions_login_ago'},
$text{'sessions_actions'},
], 100);
foreach my $k (sort { my @a = split(/\s+/, $sessiondb{$a});
@@ -68,7 +68,8 @@ foreach my $k (sort { my @a = split(/\s+/, $sessiondb{$a});
push(@cols, $user);
}
push(@cols, $lip);
push(@cols, &make_date($ltime));
push(@cols, &make_date_relative($ltime).
" ".&ui_help(&make_date($ltime)));
my @links;
if ($haslog) {
push(@links, ui_link("../webminlog/search.cgi?uall=1&mall=1&tall=1&wall=1&fall=1&sid=$k", $text{'sessions_lview'}));

View File

@@ -20,7 +20,12 @@ foreach my $k (keys %sessiondb) {
next if ($k =~ /^1111111/);
next if (!$sessiondb{$k});
my ($user, $ltime, $lip) = split(/\s+/, $sessiondb{$k});
next if ($user ne $remote_user && $user ne "!".$remote_user);
next if (&webmin_user_is_admin()
? ($user eq "!" ||
($user ne $remote_user &&
# Show all logins for past 3 days for admin
$ltime && $ltime < time() - 3*24*60*60))
: ($user ne $remote_user && $user ne "!".$remote_user));
push(@logins, [ $user, $ltime, $lip, $k ]);
}
if (@logins) {
@@ -29,7 +34,8 @@ if (@logins) {
@logins = @logins[0..4];
}
my $html = &ui_columns_start([ $text{'sessions_host'},
$text{'sessions_login'},
$text{'sessions_user'},
$text{'sessions_login_ago'},
$text{'sessions_state'},
$text{'sessions_action'} ]);
my $open = 0;
@@ -62,9 +68,13 @@ if (@logins) {
&ui_link("@{[&get_webprefix()]}/acl/delete_session.cgi?id=$l->[3]&redirect_ref=1",
$text{'sessions_kill'}))
}
my $user = $l->[0];
$user =~ s/^\!//;
$html .= &ui_columns_row([
$l->[2],
&make_date($l->[1]),
$user,
&make_date_relative($l->[1]).
"&nbsp;".&ui_help(&make_date($l->[1])),
$state,
&ui_links_row(\@links) ]);
}

View File

@@ -1356,7 +1356,7 @@ xfer_done=.. from $1 : Completed OK
xfer_count=Test transfer successfully fetched $1 records from at least one nameserver. Actual transfers by BIND should also succeed.
xfer_none=Test transfer appeared to succeed, but didn't actually fetch any records!
tls_title=SSL Keys And Certificates
tls_title=SSL Keys and Certificates
tls_ecannot=You are not allowed to edit SSL keys and certificates
tls_esupport=SSL keys and certificates are not supported on this system
tls_name=Key name

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.4 KiB

After

Width:  |  Height:  |  Size: 4.3 KiB

31
lang/en
View File

@@ -438,6 +438,37 @@ file_truncated_message=fetched $1 of data, truncated $2 out of $3
file_truncated_message_head=fetched beginning $1 of data, truncated $2 out of $3
file_truncated_message_tail=fetched ending $1 of data, truncated $2 out of $3
time_ago_col=Time ago
time_ago_year=$1 year ago
time_ago_years=$1 years ago
time_ago_month=$1 month ago
time_ago_months=$1 months ago
time_ago_week=$1 week ago
time_ago_weeks=$1 weeks ago
time_ago_day=$1 day ago
time_ago_days=$1 days ago
time_ago_hour=$1 hour ago
time_ago_hours=$1 hours ago
time_ago_min=$1 minute ago
time_ago_mins=$1 minutes ago
time_ago_sec=$1 second ago
time_ago_secs=$1 seconds ago
time_in_year=In $1 year
time_in_years=In $1 years
time_in_month=In $1 month
time_in_months=In $1 months
time_in_week=In $1 week
time_in_weeks=In $1 weeks
time_in_day=In $1 day
time_in_days=In $1 days
time_in_hour=In $1 hour
time_in_hours=In $1 hours
time_in_min=In $1 minute
time_in_mins=In $1 minutes
time_in_sec=In $1 second
time_in_secs=In $1 seconds
time_now=Just now
defcert_error=Default $1 bundled SSL certificate is being used. It is highly advised to update default <tt>$2</tt> certificate before proceeding with login.
main_error_details=Error details

View File

@@ -20,6 +20,7 @@ journal_journalctl_unit=Messages for specific unit
journal_since0=Latest available
journal_since1=Real-time follow
journal_since2=Current boot
journal_since2-1=Last boot
journal_since3=7 days ago
journal_since4=24 hours ago
journal_since5=8 hours ago

View File

@@ -35,6 +35,7 @@ return [
{ "" => $text{'journal_since0'} },
{ "--follow" => $text{'journal_since1'} },
{ "--boot" => $text{'journal_since2'} },
{ "--boot -1" => $text{'journal_since2-1'} },
{ "--since '7 days ago'" => $text{'journal_since3'} },
{ "--since '24 hours ago'" => $text{'journal_since4'} },
{ "--since '8 hours ago'" => $text{'journal_since5'} },

View File

@@ -200,11 +200,9 @@ if (!$?) {
my @lines = split(/\r?\n/, $out);
my @last_line = split(/\s+/, $lines[$#lines]);
shift(@last_line) if ($last_line[0] eq '');
if (@last_line >= 6) {
$user_time = $last_line[3]; # us
$system_time = $last_line[4]; # sy
$idle_time = $last_line[5]; # id
}
$user_time = $last_line[-6]; # us
$system_time = $last_line[-5]; # sy
$idle_time = $last_line[-4]; # id
}
# Get disk I/O
my ($bi, $bo) = (0, 0);

View File

@@ -2409,6 +2409,47 @@ if (ref($only) || !$only) {
return $date;
}
# make_date_relative(timestamp)
# Return localized relative time from now or to the future
# for a given timestamp, or undef if not a valid timestamp
sub make_date_relative
{
my $ts = shift;
return undef unless(defined($ts) && $ts =~ /^-?\d+(?:\.\d+)?$/);
$ts = 0 + $ts;
my $last_login;
my $now = time();
my $diff = $ts - $now; # >0 future, <0 past
my $abs = abs($diff);
return $text{'time_now'} if ($abs < 10); # within ±10 seconds is now
my @units = (
[ 31536000, 'year', 'years' ],
[ 2592000, 'month', 'months' ],
[ 604800, 'week', 'weeks' ],
[ 86400, 'day', 'days' ],
[ 3600, 'hour', 'hours' ],
[ 60, 'min', 'mins' ],
[ 1, 'sec', 'secs' ],
);
my ($val, $sing, $plur);
foreach my $unit (@units) {
my ($secs, $s, $p) = @$unit;
next if ($abs < $secs);
$val = int($abs / $secs);
($sing, $plur) = ($s, $p);
last;
}
if (defined($val) && $val > 0) {
my $key = ($diff > 0 ? 'time_in_' : 'time_ago_').
($val == 1 ? $sing : $plur);
$last_login = &text($key, $val);
}
else {
$last_login = $text{'time_now'};
}
return $last_login;
}
=head2 file_chooser_button(input, type, [form], [chroot], [addmode])
Return HTML for a button that pops up a file chooser when clicked, and places

View File

@@ -197,6 +197,7 @@ elsif (@match) {
$text{'search_user'},
$text{'search_host'},
$config{'host_search'} ? ( $text{'search_webmin'} ) : ( ),
$text{'time_ago_col'},
$text{'search_datetime'} ], "100");
foreach my $act (sort { $b->{'time'} <=> $a->{'time'} } @match) {
my @tm = localtime($act->{'time'});
@@ -231,6 +232,7 @@ elsif (@match) {
if ($config{'host_search'}) {
push(@cols, $act->{'webmin'});
}
push(@cols, &make_date_relative($act->{'time'}));
push(@cols, &make_date($act->{'time'}));
print &ui_columns_row(\@cols);
}

View File

@@ -59,7 +59,8 @@ if ($act->{'sid'} ne '-') {
&urlize($in{'returndesc'}), $act->{'sid'}) );
}
print &ui_table_row($text{'view_time'}, &make_date($act->{'time'}));
print &ui_table_row($text{'view_time'}, &make_date($act->{'time'}).
" (".&make_date_relative($act->{'time'}).")");
if ($act->{'webmin'}) {
print &ui_table_row($text{'view_host'},