mirror of
https://github.com/webmin/webmin.git
synced 2026-02-03 22:23:28 +00:00
Compare commits
55 Commits
dev/doveco
...
stable
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
825d54adc4 | ||
|
|
cbaff19725 | ||
|
|
ece2ff6a1e | ||
|
|
6b71562abf | ||
|
|
a73210adc9 | ||
|
|
c6d9d0338f | ||
|
|
5066534a40 | ||
|
|
84a417bd6e | ||
|
|
90c31af379 | ||
|
|
1453508592 | ||
|
|
35455f04e6 | ||
|
|
220d3124ef | ||
|
|
8b88034335 | ||
|
|
e5bff8f31b | ||
|
|
ba4e72dfc2 | ||
|
|
45eaad6eff | ||
|
|
cd113a468a | ||
|
|
4c6ffd19a4 | ||
|
|
92e71e9ba3 | ||
|
|
e56ea150fe | ||
|
|
e191220178 | ||
|
|
097ef22bbc | ||
|
|
66be8e9c20 | ||
|
|
cf6b79b740 | ||
|
|
81aa781bc9 | ||
|
|
69b707e945 | ||
|
|
1424e248ff | ||
|
|
249dabde7e | ||
|
|
443883d364 | ||
|
|
156cb80104 | ||
|
|
0885a17f55 | ||
|
|
0ffaed090a | ||
|
|
55013abadc | ||
|
|
83a85aed93 | ||
|
|
81b0bee9ee | ||
|
|
b53504dd01 | ||
|
|
c2c99e3305 | ||
|
|
671c62289d | ||
|
|
d296b83192 | ||
|
|
1d898d83fb | ||
|
|
90fa7fede0 | ||
|
|
415e7116f9 | ||
|
|
033d94483f | ||
|
|
69035e0a34 | ||
|
|
bab8d7a0f0 | ||
|
|
9e6ae753e0 | ||
|
|
42b6cac7b4 | ||
|
|
6ca908cf80 | ||
|
|
3be8a327ad | ||
|
|
16110e3e3e | ||
|
|
8f508724e4 | ||
|
|
e2646af3ab | ||
|
|
ef55f007a4 | ||
|
|
613b9e5ffa | ||
|
|
06744537d6 |
55
CHANGELOG.md
55
CHANGELOG.md
@@ -1,12 +1,49 @@
|
||||
## Changelog
|
||||
|
||||
#### 2.403 (June 30, 2025)
|
||||
* Add support for the Webmin webserver to work in both HTTP and HTTPS modes at the same time
|
||||
* Add status monitor for PHP FPM #2499
|
||||
* 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
|
||||
* Fix MySQL/MariaDB to remove obsolete `set-variable` options that break modern config files #2497
|
||||
#### 2.501 (September 10, 2025)
|
||||
* Add support for Raspberry Pi sensors #2539 #2517
|
||||
* Add Squid 7 support
|
||||
* Update the Authentic theme to the latest version with the following fixes:
|
||||
- Fix broken editor in "Bootup and Shutdown" module
|
||||
|
||||
#### 2.500 (September 4, 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 DNS Server" 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 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 Database Server" 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 +168,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 +281,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 +289,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
|
||||
|
||||
@@ -44,7 +44,7 @@ Webmin 可以两种方法安装:
|
||||
### 贡献者
|
||||
|
||||
* [Joe Cooper](https://github.com/swelljoe)
|
||||
* [Ilia Rostovtsev](https://github.com/iliajie)
|
||||
* [Ilia Rostovtsev](https://github.com/iliaross)
|
||||
* [Kay Marquardt](https://github.com/gnadelwartz)
|
||||
* [Nawawi Jamili](https://github.com/nawawi) + [其他无偿奉献的开发者](https://github.com/webmin/webmin/graphs/contributors)
|
||||
|
||||
|
||||
@@ -48,13 +48,13 @@ For detailed installation instructions check our guide on [webmin.com/download](
|
||||
* [Jamie Cameron](https://www.webmin.com/about.html) [](https://www.linkedin.com/in/jamiecameron2)
|
||||
|
||||
### Developers
|
||||
* [Ilia Rostovtsev](https://github.com/iliajie)
|
||||
* [Ilia Rostovtsev](https://github.com/iliaross)
|
||||
* [Joe Cooper](https://github.com/swelljoe)
|
||||
|
||||
### Contributors
|
||||
* [Kay Marquardt](https://github.com/gnadelwartz)
|
||||
* [Nawawi Jamili](https://github.com/nawawi)
|
||||
* [unknown10777](https://github.com/unknown10777) + [90 more..](https://github.com/webmin/webmin/graphs/contributors)
|
||||
* [unknown10777](https://github.com/unknown10777) + [90 more...](https://github.com/webmin/webmin/graphs/contributors)
|
||||
|
||||
## License
|
||||
|
||||
|
||||
File diff suppressed because one or more lines are too long
@@ -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..
|
||||
|
||||
@@ -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'}));
|
||||
|
||||
@@ -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]).
|
||||
" ".&ui_help(&make_date($l->[1])),
|
||||
$state,
|
||||
&ui_links_row(\@links) ]);
|
||||
}
|
||||
|
||||
@@ -116,4 +116,4 @@ Name of the user to disable two-factor authentication for.
|
||||
|
||||
Copyright 2018 Jamie Cameron <jcameron@webmin.com>
|
||||
Joe Cooper <joe@virtualmin.com>
|
||||
Ilia Rostovtsev <ilia@virtualmin.com>
|
||||
Ilia Ross <ilia@virtualmin.com>
|
||||
|
||||
@@ -260,5 +260,5 @@ Set new user password. Using this option may be unsecure.
|
||||
|
||||
Copyright 2018 Jamie Cameron <jcameron@webmin.com>
|
||||
Joe Cooper <joe@virtualmin.com>
|
||||
Ilia Rostovtsev <ilia@virtualmin.com>
|
||||
Ilia Ross <ilia@virtualmin.com>
|
||||
|
||||
|
||||
@@ -174,5 +174,5 @@ sub root
|
||||
|
||||
Copyright 2018 Jamie Cameron <jcameron@webmin.com>
|
||||
Joe Cooper <joe@virtualmin.com>
|
||||
Ilia Rostovtsev <ilia@virtualmin.com>
|
||||
Ilia Ross <ilia@virtualmin.com>
|
||||
|
||||
|
||||
@@ -457,5 +457,5 @@ Returns Webmin and other modules and themes versions installed (only those for w
|
||||
|
||||
Copyright 2018 Jamie Cameron <jcameron@webmin.com>
|
||||
Joe Cooper <joe@virtualmin.com>
|
||||
Ilia Rostovtsev <ilia@virtualmin.com>
|
||||
Ilia Ross <ilia@virtualmin.com>
|
||||
|
||||
|
||||
@@ -1135,6 +1135,10 @@ elsif ($type eq "CNAME") {
|
||||
print &ui_table_row($text{'value_CNAME1'},
|
||||
&ui_textbox("value0", $v[0], 30)." ($text{'edit_cnamemsg'})", 3);
|
||||
}
|
||||
elsif ($type eq "ALIAS") {
|
||||
print &ui_table_row($text{'value_ALIAS1'},
|
||||
&ui_textbox("value0", $v[0], 30)." ($text{'edit_cnamemsg'})", 3);
|
||||
}
|
||||
elsif ($type eq "MX") {
|
||||
print &ui_table_row($text{'value_MX2'},
|
||||
&ui_textbox("value1", $v[1], 30));
|
||||
@@ -3117,7 +3121,11 @@ $slave_error = $_[0];
|
||||
|
||||
sub get_forward_record_types
|
||||
{
|
||||
return ("A", "NS", "CNAME", "MX", "HINFO", "TXT", "SPF", "DMARC", "WKS", "RP", "PTR", "LOC", "SRV", "KEY", "TLSA", "SSHFP", "CAA", "NAPTR", "NSEC3PARAM", $config{'support_aaaa'} ? ( "AAAA" ) : ( ), @extra_forward);
|
||||
return ("A", "NS", "CNAME",
|
||||
$config{'allow_alias'} ? ( "ALIAS" ) : ( ),
|
||||
"MX", "HINFO", "TXT", "SPF", "DMARC", "WKS", "RP", "PTR", "LOC",
|
||||
"SRV", "KEY", "TLSA", "SSHFP", "CAA", "NAPTR", "NSEC3PARAM",
|
||||
$config{'support_aaaa'} ? ( "AAAA" ) : ( ), @extra_forward);
|
||||
}
|
||||
|
||||
sub get_reverse_record_types
|
||||
|
||||
@@ -52,3 +52,4 @@ stop_cmd=systemctl stop named
|
||||
restart_cmd=systemctl reload named
|
||||
chroot=
|
||||
auto_chroot=
|
||||
allow_alias=0
|
||||
|
||||
@@ -52,3 +52,4 @@ spf_record=0
|
||||
dnssec_info=1
|
||||
chroot=
|
||||
auto_chroot=
|
||||
allow_alias=0
|
||||
|
||||
@@ -52,3 +52,4 @@ stop_cmd=systemctl stop named
|
||||
restart_cmd=systemctl reload named
|
||||
chroot=
|
||||
auto_chroot=
|
||||
allow_alias=0
|
||||
|
||||
@@ -52,3 +52,4 @@ stop_cmd=systemctl stop named
|
||||
restart_cmd=systemctl reload named
|
||||
chroot=
|
||||
auto_chroot=
|
||||
allow_alias=0
|
||||
|
||||
@@ -52,3 +52,4 @@ stop_cmd=systemctl stop named
|
||||
restart_cmd=systemctl reload named
|
||||
chroot=
|
||||
auto_chroot=
|
||||
allow_alias=0
|
||||
|
||||
@@ -52,3 +52,4 @@ stop_cmd=systemctl stop named
|
||||
restart_cmd=systemctl reload named
|
||||
chroot=
|
||||
auto_chroot=
|
||||
allow_alias=0
|
||||
|
||||
@@ -50,3 +50,4 @@ tmpl_dnssec_dt=1
|
||||
force_random=0
|
||||
spf_record=0
|
||||
dnssec_info=1
|
||||
allow_alias=0
|
||||
|
||||
@@ -52,3 +52,4 @@ stop_cmd=systemctl stop named
|
||||
restart_cmd=systemctl reload named
|
||||
chroot=
|
||||
auto_chroot=
|
||||
allow_alias=0
|
||||
|
||||
@@ -52,3 +52,4 @@ stop_cmd=systemctl stop named
|
||||
restart_cmd=systemctl reload named
|
||||
chroot=
|
||||
auto_chroot=
|
||||
allow_alias=0
|
||||
|
||||
@@ -47,3 +47,4 @@ restart_cmd=service named restart
|
||||
force_random=0
|
||||
spf_record=0
|
||||
dnssec_info=1
|
||||
allow_alias=0
|
||||
|
||||
@@ -48,3 +48,4 @@ start_cmd=systemctl start bind9.service
|
||||
stop_cmd=systemctl stop bind9.service
|
||||
restart_cmd=systemctl reload bind9.service
|
||||
dnssec_period=21
|
||||
allow_alias=0
|
||||
|
||||
@@ -48,3 +48,4 @@ start_cmd=systemctl start named.service
|
||||
stop_cmd=systemctl stop named.service
|
||||
restart_cmd=systemctl reload named.service
|
||||
dnssec_period=21
|
||||
allow_alias=0
|
||||
|
||||
@@ -38,3 +38,4 @@ other_slaves=1
|
||||
force_random=0
|
||||
spf_record=0
|
||||
dnssec_info=1
|
||||
allow_alias=0
|
||||
|
||||
@@ -40,3 +40,4 @@ other_slaves=1
|
||||
force_random=0
|
||||
spf_record=0
|
||||
dnssec_info=1
|
||||
allow_alias=0
|
||||
|
||||
@@ -44,3 +44,4 @@ other_slaves=1
|
||||
force_random=0
|
||||
spf_record=0
|
||||
dnssec_info=1
|
||||
allow_alias=0
|
||||
|
||||
@@ -40,3 +40,4 @@ other_slaves=1
|
||||
force_random=0
|
||||
spf_record=0
|
||||
dnssec_info=1
|
||||
allow_alias=0
|
||||
|
||||
@@ -40,3 +40,4 @@ other_slaves=1
|
||||
force_random=0
|
||||
spf_record=0
|
||||
dnssec_info=1
|
||||
allow_alias=0
|
||||
|
||||
@@ -48,3 +48,4 @@ start_cmd=systemctl start bind9.service
|
||||
stop_cmd=systemctl stop bind9.service
|
||||
restart_cmd=systemctl reload bind9.service
|
||||
dnssec_period=21
|
||||
allow_alias=0
|
||||
|
||||
@@ -48,3 +48,4 @@ start_cmd=systemctl start named.service
|
||||
stop_cmd=systemctl stop named.service
|
||||
restart_cmd=systemctl reload named.service
|
||||
dnssec_period=21
|
||||
allow_alias=0
|
||||
|
||||
@@ -40,3 +40,4 @@ other_slaves=1
|
||||
force_random=0
|
||||
spf_record=0
|
||||
dnssec_info=1
|
||||
allow_alias=0
|
||||
|
||||
@@ -43,3 +43,4 @@ other_slaves=1
|
||||
force_random=0
|
||||
spf_record=0
|
||||
dnssec_info=1
|
||||
allow_alias=0
|
||||
|
||||
@@ -44,3 +44,4 @@ other_slaves=1
|
||||
force_random=0
|
||||
spf_record=0
|
||||
dnssec_info=1
|
||||
allow_alias=0
|
||||
|
||||
@@ -41,3 +41,4 @@ force_random=0
|
||||
spf_record=0
|
||||
pid_file=/var/run/named/pid
|
||||
dnssec_info=1
|
||||
allow_alias=0
|
||||
|
||||
@@ -40,3 +40,4 @@ other_slaves=1
|
||||
force_random=0
|
||||
spf_record=0
|
||||
dnssec_info=1
|
||||
allow_alias=0
|
||||
|
||||
@@ -40,3 +40,4 @@ other_slaves=1
|
||||
force_random=0
|
||||
spf_record=0
|
||||
dnssec_info=1
|
||||
allow_alias=0
|
||||
|
||||
@@ -40,3 +40,4 @@ other_slaves=1
|
||||
force_random=0
|
||||
spf_record=0
|
||||
dnssec_info=1
|
||||
allow_alias=0
|
||||
|
||||
@@ -41,3 +41,4 @@ force_random=0
|
||||
spf_record=0
|
||||
pid_file=/var/run/named/pid
|
||||
dnssec_info=1
|
||||
allow_alias=0
|
||||
|
||||
@@ -41,3 +41,4 @@ other_slaves=1
|
||||
force_random=0
|
||||
spf_record=0
|
||||
dnssec_info=1
|
||||
allow_alias=0
|
||||
|
||||
@@ -43,3 +43,4 @@ other_slaves=1
|
||||
force_random=0
|
||||
spf_record=0
|
||||
dnssec_info=1
|
||||
allow_alias=0
|
||||
|
||||
@@ -40,3 +40,4 @@ other_slaves=1
|
||||
force_random=0
|
||||
spf_record=0
|
||||
dnssec_info=1
|
||||
allow_alias=0
|
||||
|
||||
@@ -40,3 +40,4 @@ other_slaves=1
|
||||
force_random=0
|
||||
spf_record=0
|
||||
dnssec_info=1
|
||||
allow_alias=0
|
||||
|
||||
@@ -40,3 +40,4 @@ other_slaves=1
|
||||
force_random=0
|
||||
spf_record=0
|
||||
dnssec_info=1
|
||||
allow_alias=0
|
||||
|
||||
@@ -41,3 +41,4 @@ pid_file=/var/run/named/named.pid /private/var/run/named/named.pid
|
||||
force_random=0
|
||||
spf_record=0
|
||||
dnssec_info=1
|
||||
allow_alias=0
|
||||
|
||||
@@ -43,3 +43,4 @@ other_slaves=1
|
||||
force_random=0
|
||||
spf_record=0
|
||||
dnssec_info=1
|
||||
allow_alias=0
|
||||
|
||||
@@ -43,3 +43,4 @@ other_slaves=1
|
||||
force_random=0
|
||||
spf_record=0
|
||||
dnssec_info=1
|
||||
allow_alias=0
|
||||
|
||||
@@ -42,3 +42,4 @@ other_slaves=1
|
||||
force_random=0
|
||||
spf_record=0
|
||||
dnssec_info=1
|
||||
allow_alias=0
|
||||
|
||||
@@ -40,3 +40,4 @@ other_slaves=1
|
||||
force_random=0
|
||||
spf_record=0
|
||||
dnssec_info=1
|
||||
allow_alias=0
|
||||
|
||||
@@ -42,3 +42,4 @@ other_slaves=1
|
||||
force_random=0
|
||||
spf_record=0
|
||||
dnssec_info=1
|
||||
allow_alias=0
|
||||
|
||||
@@ -48,3 +48,4 @@ other_slaves=1
|
||||
force_random=0
|
||||
spf_record=0
|
||||
dnssec_info=1
|
||||
allow_alias=0
|
||||
|
||||
@@ -40,3 +40,4 @@ other_slaves=1
|
||||
force_random=0
|
||||
spf_record=0
|
||||
dnssec_info=1
|
||||
allow_alias=0
|
||||
|
||||
@@ -41,3 +41,4 @@ other_slaves=1
|
||||
force_random=0
|
||||
spf_record=0
|
||||
dnssec_info=1
|
||||
allow_alias=0
|
||||
|
||||
@@ -42,3 +42,4 @@ other_slaves=1
|
||||
force_random=0
|
||||
spf_record=0
|
||||
dnssec_info=1
|
||||
allow_alias=0
|
||||
|
||||
@@ -40,3 +40,4 @@ other_slaves=1
|
||||
force_random=0
|
||||
spf_record=0
|
||||
dnssec_info=1
|
||||
allow_alias=0
|
||||
|
||||
@@ -40,3 +40,4 @@ other_slaves=1
|
||||
force_random=0
|
||||
spf_record=0
|
||||
dnssec_info=1
|
||||
allow_alias=0
|
||||
|
||||
@@ -45,3 +45,4 @@ other_slaves=1
|
||||
force_random=0
|
||||
spf_record=0
|
||||
dnssec_info=1
|
||||
allow_alias=0
|
||||
|
||||
@@ -52,3 +52,4 @@ stop_cmd=systemctl stop named
|
||||
restart_cmd=systemctl reload named
|
||||
chroot=
|
||||
auto_chroot=
|
||||
allow_alias=0
|
||||
|
||||
@@ -52,3 +52,4 @@ spf_record=0
|
||||
dnssec_info=1
|
||||
chroot=
|
||||
auto_chroot=
|
||||
allow_alias=0
|
||||
|
||||
@@ -40,3 +40,4 @@ other_slaves=1
|
||||
force_random=0
|
||||
spf_record=0
|
||||
dnssec_info=1
|
||||
allow_alias=0
|
||||
|
||||
@@ -41,3 +41,4 @@ other_slaves=1
|
||||
force_random=0
|
||||
spf_record=0
|
||||
dnssec_info=1
|
||||
allow_alias=0
|
||||
|
||||
@@ -43,3 +43,4 @@ other_slaves=1
|
||||
force_random=0
|
||||
spf_record=0
|
||||
dnssec_info=1
|
||||
allow_alias=0
|
||||
|
||||
@@ -41,3 +41,4 @@ other_slaves=1
|
||||
force_random=0
|
||||
spf_record=0
|
||||
dnssec_info=1
|
||||
allow_alias=0
|
||||
|
||||
@@ -41,3 +41,4 @@ other_slaves=1
|
||||
force_random=0
|
||||
spf_record=0
|
||||
dnssec_info=1
|
||||
allow_alias=0
|
||||
|
||||
@@ -40,3 +40,4 @@ other_slaves=1
|
||||
force_random=0
|
||||
spf_record=0
|
||||
dnssec_info=1
|
||||
allow_alias=0
|
||||
|
||||
@@ -40,3 +40,4 @@ other_slaves=1
|
||||
force_random=0
|
||||
spf_record=0
|
||||
dnssec_info=1
|
||||
allow_alias=0
|
||||
|
||||
@@ -45,3 +45,4 @@ other_slaves=1
|
||||
force_random=0
|
||||
spf_record=0
|
||||
dnssec_info=1
|
||||
allow_alias=0
|
||||
|
||||
@@ -46,3 +46,4 @@ other_slaves=1
|
||||
force_random=0
|
||||
spf_record=0
|
||||
dnssec_info=1
|
||||
allow_alias=0
|
||||
|
||||
@@ -48,3 +48,4 @@ other_slaves=1
|
||||
force_random=0
|
||||
spf_record=0
|
||||
dnssec_info=1
|
||||
allow_alias=0
|
||||
|
||||
@@ -35,3 +35,4 @@ other_slaves=1
|
||||
updserial_man=1
|
||||
master_ttl=1
|
||||
dnssec_info=1
|
||||
allow_alias=0
|
||||
|
||||
@@ -47,3 +47,4 @@ other_slaves=1
|
||||
force_random=0
|
||||
spf_record=0
|
||||
dnssec_info=1
|
||||
allow_alias=0
|
||||
|
||||
@@ -47,3 +47,4 @@ other_slaves=1
|
||||
force_random=0
|
||||
spf_record=0
|
||||
dnssec_info=1
|
||||
allow_alias=0
|
||||
|
||||
@@ -47,3 +47,4 @@ other_slaves=1
|
||||
force_random=0
|
||||
spf_record=0
|
||||
dnssec_info=1
|
||||
allow_alias=0
|
||||
|
||||
@@ -40,3 +40,4 @@ other_slaves=1
|
||||
force_random=0
|
||||
spf_record=0
|
||||
dnssec_info=1
|
||||
allow_alias=0
|
||||
|
||||
@@ -43,3 +43,4 @@ other_slaves=1
|
||||
force_random=0
|
||||
spf_record=0
|
||||
dnssec_info=1
|
||||
allow_alias=0
|
||||
|
||||
@@ -41,3 +41,4 @@ other_slaves=1
|
||||
force_random=0
|
||||
spf_record=0
|
||||
dnssec_info=1
|
||||
allow_alias=0
|
||||
|
||||
@@ -58,3 +58,4 @@ other_slaves=1
|
||||
force_random=0
|
||||
spf_record=0
|
||||
dnssec_info=1
|
||||
allow_alias=0
|
||||
|
||||
@@ -19,6 +19,7 @@ support_aaaa=Support DNS for IPv6 addresses,1,1-Yes,0-No
|
||||
allow_comments=Allow comments for records,1,1-Yes,0-No
|
||||
allow_wild=Allow wildcards?,1,1-Yes,0-No
|
||||
allow_underscore=Allow underscores in record names?,1,1-Yes,0-No
|
||||
allow_alias=Allow ALIAS records?,1,1-Yes,0-No
|
||||
short_names=Convert record names to canonical form?,1,0-Yes,1-No
|
||||
extra_forward=Extra record types for forward zones,0
|
||||
extra_reverse=Extra record types for reverse zones,0
|
||||
|
||||
@@ -398,6 +398,7 @@ type_A=Address
|
||||
type_AAAA=IPv6 Address
|
||||
type_NS=Name Server
|
||||
type_CNAME=Name Alias
|
||||
type_ALIAS=Address Alias
|
||||
type_MX=Mail Server
|
||||
type_HINFO=Host Information
|
||||
type_NSEC3PARAM=DNSSEC Parameters
|
||||
@@ -420,6 +421,7 @@ edit_A=Address
|
||||
edit_AAAA=IPv6 Address
|
||||
edit_NS=Name Server
|
||||
edit_CNAME=Name Alias
|
||||
edit_ALIAS=Address Alias
|
||||
edit_MX=Mail Server
|
||||
edit_HINFO=Host Information
|
||||
edit_TXT=Text
|
||||
@@ -442,6 +444,7 @@ recs_A=Address
|
||||
recs_AAAA=IPv6 Address
|
||||
recs_NS=Name Server
|
||||
recs_CNAME=Name Alias
|
||||
recs_ALIAS=Address Alias
|
||||
recs_MX=Mail Server
|
||||
recs_HINFO=Host Information
|
||||
recs_TXT=Text
|
||||
@@ -465,6 +468,7 @@ value_A1=Address
|
||||
value_AAAA1=IPv6 Address
|
||||
value_NS1=Name Server
|
||||
value_CNAME1=Real Name
|
||||
value_ALIAS1=Copy Address From
|
||||
value_MX1=Priority
|
||||
value_MX2=Mail Server
|
||||
value_HINFO1=Hardware
|
||||
@@ -1356,7 +1360,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
|
||||
@@ -1364,8 +1368,6 @@ tls_key=Key file
|
||||
tls_cert=Certificate file
|
||||
tls_ca=CA certificate file
|
||||
tls_ca_def=None required
|
||||
tls_ecannot=You are not allowed to edit SSL keys and certificates
|
||||
tls_esupport=DNS over SSL is not supported on this system
|
||||
tls_none=No SSL keys have been added yet.
|
||||
tls_add=Add a new SSL key.
|
||||
tls_desc=The SSL keys and certificates listed on this page can be used to enable DNS over SSL/TLS.
|
||||
|
||||
@@ -216,6 +216,13 @@ else {
|
||||
$vals .= ".";
|
||||
}
|
||||
}
|
||||
elsif ($in{'type'} eq "ALIAS") {
|
||||
&valname($vals) ||
|
||||
&error(&text('edit_ecname', $vals));
|
||||
if ($vals =~ /\.\Q$in{'origin'}\E$/) {
|
||||
$vals .= ".";
|
||||
}
|
||||
}
|
||||
elsif ($in{'type'} eq "MX") {
|
||||
&valname($in{'value1'}) ||
|
||||
&error(&text('edit_emx', $in{'value1'}));
|
||||
|
||||
@@ -4,9 +4,9 @@ BEGIN { push(@INC, ".."); };
|
||||
use WebminCore;
|
||||
&init_config();
|
||||
|
||||
@supported_auths = ( "anonymous", "plain", "digest-md5", "cram-md5", "apop",
|
||||
"scram-sha-1", "scram-sha-256", "ntlm", "gss-spnego",
|
||||
"gssapi", "rpa", "otp", "skey", "external",
|
||||
@supported_auths = ( "anonymous", "plain", "login", "digest-md5", "cram-md5",
|
||||
"apop", "scram-sha-1", "scram-sha-256", "ntlm",
|
||||
"gss-spnego", "gssapi", "rpa", "otp", "skey", "external",
|
||||
"oauthbearer", "xoauth2" );
|
||||
@mail_envs = ( undef, "maildir:~/Maildir", "mbox:~/mail/:INBOX=/var/mail/%u",
|
||||
"maildir:~/Maildir:mbox:~/mail/" );
|
||||
@@ -555,6 +555,16 @@ return 0 if (!$ver);
|
||||
return &compare_version_numbers($ver, $wantver) >= 0;
|
||||
}
|
||||
|
||||
# version_below(ver)
|
||||
# Returns 1 if running below some version
|
||||
sub version_below
|
||||
{
|
||||
local ($wantver) = @_;
|
||||
local $ver = &get_dovecot_version();
|
||||
return 0 if (!$ver);
|
||||
return &compare_version_numbers($ver, $wantver) < 0;
|
||||
}
|
||||
|
||||
sub list_lock_methods
|
||||
{
|
||||
local ($forindex) = @_;
|
||||
|
||||
@@ -14,7 +14,11 @@ print &ui_table_row($text{'login_realms'},
|
||||
&ui_opt_textbox("realms", $realms, 40, $text{'login_none'}), 3);
|
||||
|
||||
# Default authentication realm
|
||||
$realm = &find_value("auth_default_realm", $conf);
|
||||
$realm = &find_value(
|
||||
&version_atleast("2.4")
|
||||
? "auth_default_domain"
|
||||
: "auth_default_realm",
|
||||
$conf);
|
||||
print &ui_table_row($text{'login_realm'},
|
||||
&ui_opt_textbox("realm", $realm, 10, $text{'default'}));
|
||||
|
||||
@@ -87,25 +91,27 @@ elsif ($userdb =~ /^sql\s+(.*)/) {
|
||||
else {
|
||||
$other = $userdb;
|
||||
}
|
||||
print &ui_table_row($text{'login_userdb'},
|
||||
&ui_radio("usermode", $usermode,
|
||||
[ [ "passwd", $text{'login_passwd'}."<br>" ],
|
||||
[ "passwd-file", &text('login_passwdfile',
|
||||
&ui_textbox("passwdfile", $passwdfile, 30))."<br>" ],
|
||||
[ "static", &text('login_static',
|
||||
&ui_textbox("uid", $uid, 6),
|
||||
&ui_textbox("gid", $gid, 6),
|
||||
&ui_textbox("home", $home, 20))."<br>" ],
|
||||
[ "vpopmail", $text{'login_vpopmail'}."<br>" ],
|
||||
[ "ldap", &text('login_ldap',
|
||||
&ui_textbox("ldap", $ldap, 30))."<br>" ],
|
||||
[ "pgsql", &text('login_pgsql',
|
||||
&ui_textbox("pgsql", $pgsql, 30))."<br>" ],
|
||||
[ "sql", &text('login_sql',
|
||||
&ui_textbox("sql", $sql, 30))."<br>" ],
|
||||
[ "", &text('login_other',
|
||||
&ui_textbox("other", $other, 30))."<br>" ],
|
||||
]), 3);
|
||||
if (&version_below("2.4")) {
|
||||
print &ui_table_row($text{'login_userdb'},
|
||||
&ui_radio("usermode", $usermode,
|
||||
[ [ "passwd", $text{'login_passwd'}."<br>" ],
|
||||
[ "passwd-file", &text('login_passwdfile',
|
||||
&ui_textbox("passwdfile", $passwdfile, 30))."<br>" ],
|
||||
[ "static", &text('login_static',
|
||||
&ui_textbox("uid", $uid, 6),
|
||||
&ui_textbox("gid", $gid, 6),
|
||||
&ui_textbox("home", $home, 20))."<br>" ],
|
||||
[ "vpopmail", $text{'login_vpopmail'}."<br>" ],
|
||||
[ "ldap", &text('login_ldap',
|
||||
&ui_textbox("ldap", $ldap, 30))."<br>" ],
|
||||
[ "pgsql", &text('login_pgsql',
|
||||
&ui_textbox("pgsql", $pgsql, 30))."<br>" ],
|
||||
[ "sql", &text('login_sql',
|
||||
&ui_textbox("sql", $sql, 30))."<br>" ],
|
||||
[ "", &text('login_other',
|
||||
&ui_textbox("other", $other, 30))."<br>" ],
|
||||
]), 3);
|
||||
}
|
||||
|
||||
# Password authentication system
|
||||
if (&find("auth_passdb", $conf, 2)) {
|
||||
@@ -174,46 +180,49 @@ elsif ($passdb =~ /^checkpassword\s+(.*)$/) {
|
||||
else {
|
||||
$pother = $passdb;
|
||||
}
|
||||
print &ui_table_row($text{'login_passdb'},
|
||||
&ui_radio("passmode", $passmode,
|
||||
[ [ "passwd", $text{'login_passwd2'}."<br>" ],
|
||||
[ "shadow", $text{'login_shadow'}."<br>" ],
|
||||
[ "dpam", &text('login_dpam')."<br>" ],
|
||||
$alpha_opts ?
|
||||
( [ "pam", &text('login_pam2',
|
||||
&ui_textbox("ppam", $ppam, 10),
|
||||
&ui_checkbox("ppam_session", 1,
|
||||
$text{'login_session'}, $psession),
|
||||
&ui_opt_textbox("ppam_ckey", $pckey, 10,
|
||||
$text{'login_none'}))."<br>" ]
|
||||
) :
|
||||
( [ "pam", &text('login_pam',
|
||||
&ui_textbox("ppam", $ppam, 10))."<br>" ]
|
||||
),
|
||||
[ "passwd-file", &text('login_passwdfile',
|
||||
&ui_textbox("ppasswdfile", $ppasswdfile, 30))."<br>" ],
|
||||
[ "vpopmail", $text{'login_vpopmail'}."<br>" ],
|
||||
[ "ldap", &text('login_ldap',
|
||||
&ui_textbox("pldap", $pldap, 30))."<br>" ],
|
||||
[ "pgsql", &text('login_pgsql',
|
||||
&ui_textbox("ppgsql", $ppgsql, 30))."<br>" ],
|
||||
[ "sql", &text('login_sql',
|
||||
&ui_textbox("psql", $psql, 30))."<br>" ],
|
||||
$alpha_opts ?
|
||||
( [ "bsdauth",
|
||||
&text('login_bsdauth',
|
||||
&ui_opt_textbox("bsdauth_ckey", $pbckey, 10,
|
||||
$text{'login_none'}))."<br>" ],
|
||||
[ "checkpassword",
|
||||
&text('login_checkpassword',
|
||||
&ui_textbox("checkpassword", $checkpassword, 40))."<br>" ],
|
||||
) :
|
||||
( ),
|
||||
[ "", &text('login_other',
|
||||
&ui_textbox("pother", $pother, 30))."<br>" ],
|
||||
]), 3);
|
||||
|
||||
print &ui_table_hr();
|
||||
if (&version_below("2.4")) {
|
||||
print &ui_table_row($text{'login_passdb'},
|
||||
&ui_radio("passmode", $passmode,
|
||||
[ [ "passwd", $text{'login_passwd2'}."<br>" ],
|
||||
[ "shadow", $text{'login_shadow'}."<br>" ],
|
||||
[ "dpam", &text('login_dpam')."<br>" ],
|
||||
$alpha_opts ?
|
||||
( [ "pam", &text('login_pam2',
|
||||
&ui_textbox("ppam", $ppam, 10),
|
||||
&ui_checkbox("ppam_session", 1,
|
||||
$text{'login_session'}, $psession),
|
||||
&ui_opt_textbox("ppam_ckey", $pckey, 10,
|
||||
$text{'login_none'}))."<br>" ]
|
||||
) :
|
||||
( [ "pam", &text('login_pam',
|
||||
&ui_textbox("ppam", $ppam, 10))."<br>" ]
|
||||
),
|
||||
[ "passwd-file", &text('login_passwdfile',
|
||||
&ui_textbox("ppasswdfile", $ppasswdfile, 30))."<br>" ],
|
||||
[ "vpopmail", $text{'login_vpopmail'}."<br>" ],
|
||||
[ "ldap", &text('login_ldap',
|
||||
&ui_textbox("pldap", $pldap, 30))."<br>" ],
|
||||
[ "pgsql", &text('login_pgsql',
|
||||
&ui_textbox("ppgsql", $ppgsql, 30))."<br>" ],
|
||||
[ "sql", &text('login_sql',
|
||||
&ui_textbox("psql", $psql, 30))."<br>" ],
|
||||
$alpha_opts ?
|
||||
( [ "bsdauth",
|
||||
&text('login_bsdauth',
|
||||
&ui_opt_textbox("bsdauth_ckey", $pbckey, 10,
|
||||
$text{'login_none'}))."<br>" ],
|
||||
[ "checkpassword",
|
||||
&text('login_checkpassword',
|
||||
&ui_textbox("checkpassword", $checkpassword, 40))."<br>" ],
|
||||
) :
|
||||
( ),
|
||||
[ "", &text('login_other',
|
||||
&ui_textbox("pother", $pother, 30))."<br>" ],
|
||||
]), 3);
|
||||
|
||||
print &ui_table_hr();
|
||||
}
|
||||
|
||||
$fuid = &find_value("first_valid_uid", $conf);
|
||||
print &ui_table_row($text{'login_fuid'},
|
||||
@@ -232,7 +241,11 @@ $lgid = &find_value("last_valid_gid", $conf);
|
||||
print &ui_table_row($text{'login_lgid'},
|
||||
&ui_opt_textbox("lgid", $lgid, 6, &getdef("last_valid_gid", \@mmap)));
|
||||
|
||||
$extra = &find_value("mail_extra_groups", $conf);
|
||||
$extra = &find_value(&version_atleast("2")
|
||||
? "mail_access_groups"
|
||||
: "mail_extra_groups",
|
||||
$conf);
|
||||
|
||||
print &ui_table_row($text{'login_extra'},
|
||||
&ui_opt_textbox("extra", $extra, 50, $text{'login_none'})."\n".
|
||||
&group_chooser_button("extra", 1), 3);
|
||||
|
||||
@@ -13,25 +13,49 @@ $envmode = 4;
|
||||
if (&find("default_mail_env", $conf, 2)) {
|
||||
$env = &find_value("default_mail_env", $conf);
|
||||
}
|
||||
elsif (&find("mail_path", $conf, 2)) {
|
||||
$env = &find_value("mail_path", $conf);
|
||||
}
|
||||
else {
|
||||
$env = &find_value("mail_location", $conf);
|
||||
}
|
||||
if ($env =~ s/:INDEX=([^:]+)//) {
|
||||
$index = $1;
|
||||
}
|
||||
elsif (&find("mail_index_path", $conf, 2)) {
|
||||
$index = &find_value("mail_index_path", $conf);
|
||||
}
|
||||
if ($env =~ s/:CONTROL=([^:]+)//) {
|
||||
$control = $1;
|
||||
}
|
||||
elsif (&find("mail_control_path", $conf, 2)) {
|
||||
$control = &find_value("mail_control_path", $conf);
|
||||
}
|
||||
for($i=0; $i<@mail_envs; $i++) {
|
||||
$envmode = $i if ($mail_envs[$i] eq $env);
|
||||
}
|
||||
print &ui_table_row($text{'mail_env'},
|
||||
&ui_radio("envmode", $envmode,
|
||||
[ ( map { [ $_, $text{'mail_env'.$_}."<br>" ] } (0.. 3) ),
|
||||
[ ( map { [ $_, $text{'mail_env'.$_}."<br>" ] } (
|
||||
&version_atleast("2.4") ? (0) : (0 .. 3)) ),
|
||||
[ 4, &text('mail_env4',
|
||||
&ui_textbox("other", $envmode == 4 ? $env : undef, 40)) ] ],
|
||||
), 3);
|
||||
|
||||
# Mail file format
|
||||
if (&version_atleast("2.4")) {
|
||||
$driver = &find_value("mail_driver", $conf);
|
||||
print &ui_table_row($text{'mail_driver'},
|
||||
&ui_radio("driver", $driver,
|
||||
[ [ "", $text{'mail_driver_def'} ],
|
||||
[ "auto", $text{'mail_driver_auto'} ],
|
||||
[ "mbox", $text{'mail_driver_mbox'} ],
|
||||
[ "maildir", $text{'mail_driver_maildir'} ],
|
||||
[ "dbox", $text{'mail_driver_dbox'} ],
|
||||
[ "imapc", $text{'mail_driver_imapc'} ],
|
||||
[ "pop3c", $text{'mail_driver_auto'} ] ]));
|
||||
}
|
||||
|
||||
# Index files location
|
||||
$indexmode = $index eq 'MEMORY' ? 1 :
|
||||
$index ? 2 : 0;
|
||||
@@ -89,26 +113,10 @@ print &ui_table_row($text{'mail_change'},
|
||||
[ "", &getdef($dirty, \@opts) ] ]), 3);
|
||||
|
||||
# Permissions on files
|
||||
$umask = &find_value("umask", $conf);
|
||||
print &ui_table_row($text{'mail_umask'},
|
||||
&ui_opt_textbox("umask", $umask, 5, &getdef("umask")), 3);
|
||||
|
||||
# UIDL format
|
||||
if (&find("pop3_uidl_format", $conf, 2)) {
|
||||
$uidl = &find_value("pop3_uidl_format", $conf);
|
||||
@opts = ( $uidl ? ( ) : ( [ "", $text{'mail_uidl_none'} ] ),
|
||||
[ "%v.%u", $text{'mail_uidl_dovecot'} ],
|
||||
[ "%08Xv%08Xu", $text{'mail_uidl_uw'} ],
|
||||
[ "%f", $text{'mail_uidl_courier0'} ],
|
||||
[ "%u", $text{'mail_uidl_courier1'} ],
|
||||
[ "%v-%u", $text{'mail_uidl_courier2'} ],
|
||||
[ "%Mf", $text{'mail_uidl_tpop3d'} ] );
|
||||
($got) = grep { $_->[0] eq $uidl } @opts;
|
||||
print &ui_table_row($text{'mail_uidl'},
|
||||
&ui_select("pop3_uidl_format", $got ? $uidl : "*",
|
||||
[ @opts, [ "*", $text{'mail_uidl_other'} ] ])."\n".
|
||||
&ui_textbox("pop3_uidl_format_other", $got ? "" : $uidl, 10),
|
||||
3);
|
||||
if (&version_below("2")) {
|
||||
$umask = &find_value("umask", $conf);
|
||||
print &ui_table_row($text{'mail_umask'},
|
||||
&ui_opt_textbox("umask", $umask, 5, &getdef("umask")), 3);
|
||||
}
|
||||
|
||||
# Allow POP3 last command
|
||||
|
||||
@@ -9,7 +9,11 @@ print &ui_form_start("save_ssl.cgi", "post");
|
||||
print &ui_table_start($text{'ssl_header'}, "width=100%", 4);
|
||||
|
||||
# SSL cert and key files
|
||||
if (&find_value("ssl_cert", $conf, 2) || &version_atleast("2.2")) {
|
||||
if (&version_atleast("2.4")) {
|
||||
$cert = &find_value('ssl_server_cert_file', $conf, 0, "");
|
||||
$cert =~ s/^<//;
|
||||
}
|
||||
elsif (&find_value("ssl_cert", $conf, 2) || &version_atleast("2.2")) {
|
||||
$cert = &find_value("ssl_cert", $conf, 0, "");
|
||||
$cert =~ s/^<//;
|
||||
}
|
||||
@@ -20,7 +24,11 @@ print &ui_table_row($text{'ssl_cert'},
|
||||
&ui_opt_textbox("cert", $cert, 40, &getdef("ssl_cert_file")), 3,
|
||||
[ undef, "nowrap" ]);
|
||||
|
||||
if (&find_value("ssl_key", $conf, 2) || &version_atleast("2.2")) {
|
||||
if (&version_atleast("2.4")) {
|
||||
$key = &find_value('ssl_server_key_file', $conf, 0, "");
|
||||
$key =~ s/^<//;
|
||||
}
|
||||
elsif (&find_value("ssl_key", $conf, 2) || &version_atleast("2.2")) {
|
||||
$key = &find_value("ssl_key", $conf, 0, "");
|
||||
$key =~ s/^<//;
|
||||
}
|
||||
@@ -31,14 +39,12 @@ print &ui_table_row($text{'ssl_key'},
|
||||
&ui_opt_textbox("key", $key, 40, &getdef("ssl_key_file")), 3,
|
||||
[ undef, "nowrap" ]);
|
||||
|
||||
# SSL key password
|
||||
$pass = &find_value("ssl_key_password", $conf);
|
||||
print &ui_table_row($text{'ssl_pass'},
|
||||
&ui_opt_textbox("pass", $pass, 20, $text{'ssl_prompt'}), 3,
|
||||
[ undef, "nowrap" ]);
|
||||
|
||||
# SSL CA file
|
||||
if (&find_value("ssl_ca", $conf, 2) || &version_atleast("2.2")) {
|
||||
if (&version_atleast("2.4")) {
|
||||
$ca = &find_value('ssl_server_ca_file', $conf, 0, "");
|
||||
$ca =~ s/^<//;
|
||||
}
|
||||
elsif (&find_value("ssl_ca", $conf, 2) || &version_atleast("2.2")) {
|
||||
$ca = &find_value("ssl_ca", $conf, 0, "");
|
||||
$ca =~ s/^<//;
|
||||
}
|
||||
@@ -50,20 +56,41 @@ print &ui_table_row($text{'ssl_ca'},
|
||||
&getdef("ssl_ca_file", [ [ "", $text{'ssl_none'} ] ])), 3,
|
||||
[ undef, "nowrap" ]);
|
||||
|
||||
# SSL key password
|
||||
my $passdir = &version_atleast("2.4")
|
||||
? "ssl_server_key_password"
|
||||
: "ssl_key_password";
|
||||
$pass = &find_value($passdir, $conf);
|
||||
print &ui_table_row($text{'ssl_pass'},
|
||||
&ui_opt_textbox("pass", $pass, 20, $text{'ssl_prompt'}), 3,
|
||||
[ undef, "nowrap" ]);
|
||||
|
||||
# Parameter regen time
|
||||
$regen = &find_value("ssl_parameters_regenerate", $conf);
|
||||
print &ui_table_row($text{'ssl_regen'},
|
||||
&ui_opt_textbox("regen", $regen, 5,
|
||||
&getdef("ssl_parameters_regenerate")).
|
||||
" ".$text{'ssl_hours'}, 3);
|
||||
if (&version_below("2.4")) {
|
||||
$regen = &find_value("ssl_parameters_regenerate", $conf);
|
||||
print &ui_table_row($text{'ssl_regen'},
|
||||
&ui_opt_textbox("regen", $regen, 5,
|
||||
&getdef("ssl_parameters_regenerate")).
|
||||
" ".$text{'ssl_hours'}, 3);
|
||||
}
|
||||
|
||||
# Disable plaintext passwords when not SSL
|
||||
@opts = ( [ 'yes', $text{'yes'} ], [ 'no', $text{'no'} ] );
|
||||
$plain = &find_value("disable_plaintext_auth", $conf);
|
||||
print &ui_table_row($text{'ssl_plain'},
|
||||
&ui_radio("plain", $plain,
|
||||
[ @opts,
|
||||
[ '', &getdef("disable_plaintext_auth", \@opts) ] ]), 3);
|
||||
if (&find_value("auth_allow_cleartext", $conf, 2)) {
|
||||
@opts = ( [ 'yes', $text{'yes'} ], [ 'no', $text{'no'} ] );
|
||||
$plain = &find_value("auth_allow_cleartext", $conf);
|
||||
print &ui_table_row($text{'ssl_plain2'},
|
||||
&ui_radio("plain", $plain,
|
||||
[ @opts,
|
||||
[ '', "$text{'default'} (No)" ] ]), 3);
|
||||
}
|
||||
else {
|
||||
@opts = ( [ 'yes', $text{'yes'} ], [ 'no', $text{'no'} ] );
|
||||
$plain = &find_value("disable_plaintext_auth", $conf);
|
||||
print &ui_table_row($text{'ssl_plain'},
|
||||
&ui_radio("plain", $plain,
|
||||
[ @opts,
|
||||
[ '', &getdef("disable_plaintext_auth", \@opts) ] ]), 3);
|
||||
}
|
||||
|
||||
print &ui_table_end();
|
||||
print &ui_form_end([ [ "save", $text{'save'} ] ]);
|
||||
|
||||
@@ -56,6 +56,7 @@ ssl_regen=Interval between SSL parameter regeneration
|
||||
ssl_hours=hours
|
||||
ssl_none=None
|
||||
ssl_plain=Disallow plaintext authentication in non-SSL mode?
|
||||
ssl_plain2=Allow plaintext authentication in non-SSL mode?
|
||||
ssl_err=Failed to save SSL configuration
|
||||
ssl_ekey=Missing or non-existent private key file
|
||||
ssl_ecert=Missing or non-existent certificate file
|
||||
@@ -134,6 +135,14 @@ mail_env1=Inbox and folders in <tt>~/Maildir</tt>
|
||||
mail_env2=Inbox under <tt>/var/mail</tt>, folders in <tt>~/mail</tt>
|
||||
mail_env3=Inbox in <tt>~/Maildir</tt>, folders in <tt>~/mail</tt>
|
||||
mail_env4=Other Dovecot location $1
|
||||
mail_driver=Mail file format
|
||||
mail_driver_def=Dovecot default
|
||||
mail_driver_auto=Detect automatically
|
||||
mail_driver_mbox=mbox (one file per folder)
|
||||
mail_driver_maildir=Maildir (one file per message)
|
||||
mail_driver_dbox=Dbox (Dovecot's custom format)
|
||||
mail_driver_imapc=Remote IMAP server
|
||||
mail_driver_pop3c=Remote POP3 server
|
||||
mail_index=Index files location
|
||||
mail_index0=Default (in Maildir directory)
|
||||
mail_index1=In memory only
|
||||
@@ -152,16 +161,6 @@ mail_eenv=Missing or invalid-looking mail location
|
||||
mail_echeck=Missing or non-numeric number of seconds between checks
|
||||
mail_eidle=Missing or non-numeric number of seconds between checks when idle
|
||||
mail_eumask=Missing or invalid four-digit octal Umask
|
||||
mail_uidl=UIDL format
|
||||
mail_uidl_other=Other..
|
||||
mail_uidl_none=Not set (WARNING - Dove may not start)
|
||||
mail_uidl_dovecot=Old Dovecot, new Cyrus
|
||||
mail_uidl_uw=UW ipop3d
|
||||
mail_uidl_courier0=Courier version 0
|
||||
mail_uidl_courier1=Courier version 1, old Cyrus
|
||||
mail_uidl_courier2=Courier version 2
|
||||
mail_uidl_tpop3d=tpop3d
|
||||
mail_euidl=Missing or invalid UIDL format
|
||||
mail_last=Allow use of POP3 LAST command?
|
||||
mail_lock=Index files locking method
|
||||
mail_fcntl=fcntl function
|
||||
|
||||
@@ -10,144 +10,151 @@ $conf = &get_config();
|
||||
# Allowed and default realm
|
||||
&save_directive($conf, "auth_realms",
|
||||
$in{'realms_def'} ? undef : $in{'realms'});
|
||||
&save_directive($conf, "auth_default_realm",
|
||||
&save_directive($conf,
|
||||
&version_atleast("2.4")
|
||||
? "auth_default_domain"
|
||||
: "auth_default_realm",
|
||||
$in{'realm_def'} ? undef : $in{'realm'});
|
||||
|
||||
# Authentication mechanisms
|
||||
if (&find("auth_mechanisms", $conf, 2)) {
|
||||
&save_directive($conf, "auth_mechanisms",
|
||||
join(" ", split(/\0/, $in{'mechs'})));
|
||||
$in{'mechs'}
|
||||
? join(" ", split(/\0/, $in{'mechs'}))
|
||||
: undef);
|
||||
}
|
||||
else {
|
||||
&save_directive($conf, "mechanisms",
|
||||
join(" ", split(/\0/, $in{'mechs'})), "auth","default");
|
||||
}
|
||||
|
||||
# User database
|
||||
$userdb = $in{'usermode'};
|
||||
if ($in{'usermode'} eq 'passwd-file') {
|
||||
-r $in{'passwdfile'} || &error($text{'login_epasswdfile'});
|
||||
$userdb .= " ".$in{'passwdfile'};
|
||||
}
|
||||
elsif ($in{'usermode'} eq 'static') {
|
||||
$in{'uid'} =~ /^\d+$/ || &error($text{'login_euid'});
|
||||
$in{'gid'} =~ /^\d+$/ || &error($text{'login_egid'});
|
||||
$in{'home'} || &error($text{'login_ehome'});
|
||||
$userdb .= " uid=".$in{'uid'}." gid=".$in{'gid'}.
|
||||
" home=".$in{'home'};
|
||||
}
|
||||
elsif ($in{'usermode'} eq 'ldap') {
|
||||
-r $in{'ldap'} || &error($text{'login_eldap'});
|
||||
$userdb .= " ".$in{'ldap'};
|
||||
}
|
||||
elsif ($in{'usermode'} eq 'pgsql') {
|
||||
-r $in{'pgsql'} || &error($text{'login_epgsql'});
|
||||
$userdb .= " ".$in{'pgsql'};
|
||||
}
|
||||
elsif ($in{'usermode'} eq 'sql') {
|
||||
-r $in{'sql'} || &error($text{'login_esql'});
|
||||
$userdb .= " ".$in{'sql'};
|
||||
}
|
||||
elsif ($in{'usermode'} eq '') {
|
||||
$userdb = $in{'other'};
|
||||
}
|
||||
if ($usec = &find_section("userdb", $conf, undef, "auth", "default")) {
|
||||
# Version 1.0.alpha format, which has a userdb *section*
|
||||
($svalue, $args) = split(/\s+/, $userdb, 2);
|
||||
$usec->{'value'} = $svalue;
|
||||
$usec->{'members'} = [ grep { $_->{'name'} ne 'args' }
|
||||
@{$usec->{'members'}} ];
|
||||
if ($args) {
|
||||
$usec->{'members'} = [ { 'name' => 'args',
|
||||
'value' => $args } ];
|
||||
if (&version_below("2.4")) {
|
||||
# User database
|
||||
$userdb = $in{'usermode'};
|
||||
if ($in{'usermode'} eq 'passwd-file') {
|
||||
-r $in{'passwdfile'} || &error($text{'login_epasswdfile'});
|
||||
$userdb .= " ".$in{'passwdfile'};
|
||||
}
|
||||
elsif ($in{'usermode'} eq 'static') {
|
||||
$in{'uid'} =~ /^\d+$/ || &error($text{'login_euid'});
|
||||
$in{'gid'} =~ /^\d+$/ || &error($text{'login_egid'});
|
||||
$in{'home'} || &error($text{'login_ehome'});
|
||||
$userdb .= " uid=".$in{'uid'}." gid=".$in{'gid'}.
|
||||
" home=".$in{'home'};
|
||||
}
|
||||
elsif ($in{'usermode'} eq 'ldap') {
|
||||
-r $in{'ldap'} || &error($text{'login_eldap'});
|
||||
$userdb .= " ".$in{'ldap'};
|
||||
}
|
||||
elsif ($in{'usermode'} eq 'pgsql') {
|
||||
-r $in{'pgsql'} || &error($text{'login_epgsql'});
|
||||
$userdb .= " ".$in{'pgsql'};
|
||||
}
|
||||
elsif ($in{'usermode'} eq 'sql') {
|
||||
-r $in{'sql'} || &error($text{'login_esql'});
|
||||
$userdb .= " ".$in{'sql'};
|
||||
}
|
||||
elsif ($in{'usermode'} eq '') {
|
||||
$userdb = $in{'other'};
|
||||
}
|
||||
if ($usec = &find_section("userdb", $conf, undef, "auth", "default")) {
|
||||
# Version 1.0.alpha format, which has a userdb *section*
|
||||
($svalue, $args) = split(/\s+/, $userdb, 2);
|
||||
$usec->{'value'} = $svalue;
|
||||
$usec->{'members'} = [ grep { $_->{'name'} ne 'args' }
|
||||
@{$usec->{'members'}} ];
|
||||
if ($args) {
|
||||
$usec->{'members'} = [ { 'name' => 'args',
|
||||
'value' => $args } ];
|
||||
}
|
||||
&save_section($conf, $usec);
|
||||
}
|
||||
elsif (&find("auth_userdb", $conf, 2)) {
|
||||
# Version 0.99 format
|
||||
&save_directive($conf, "auth_userdb", $userdb);
|
||||
}
|
||||
elsif (&find_value("driver", $conf, 2, "userdb")) {
|
||||
# Version 2.0 format
|
||||
$args = $userdb =~ s/\s+(\S.*)$// ? $1 : undef;
|
||||
&save_directive($conf, "driver", $userdb, "userdb");
|
||||
&save_directive($conf, "args", $args, "userdb");
|
||||
}
|
||||
else {
|
||||
# Version 1.0 format
|
||||
&save_directive($conf, "userdb", $userdb, "auth", "default");
|
||||
}
|
||||
&save_section($conf, $usec);
|
||||
}
|
||||
elsif (&find("auth_userdb", $conf, 2)) {
|
||||
# Version 0.99 format
|
||||
&save_directive($conf, "auth_userdb", $userdb);
|
||||
}
|
||||
elsif (&find_value("driver", $conf, 2, "userdb")) {
|
||||
# Version 2.0 format
|
||||
$args = $userdb =~ s/\s+(\S.*)$// ? $1 : undef;
|
||||
&save_directive($conf, "driver", $userdb, "userdb");
|
||||
&save_directive($conf, "args", $args, "userdb");
|
||||
}
|
||||
else {
|
||||
# Version 1.0 format
|
||||
&save_directive($conf, "userdb", $userdb, "auth", "default");
|
||||
}
|
||||
|
||||
# Password mode
|
||||
$passdb = $in{'passmode'};
|
||||
if ($in{'passmode'} eq 'dpam') {
|
||||
$passdb = "pam";
|
||||
}
|
||||
elsif ($in{'passmode'} eq 'pam') {
|
||||
$in{'ppam'} =~ /^\S+$/ || &error($text{'login_edpam'});
|
||||
if (defined($in{'ppam_ckey'}) && !$in{'ppam_ckey_def'}) {
|
||||
$ckey = $in{'ppam_ckey'};
|
||||
$ckey =~ /^\S+$/ || &error($text{'login_eckey'});
|
||||
# Password mode
|
||||
$passdb = $in{'passmode'};
|
||||
if ($in{'passmode'} eq 'dpam') {
|
||||
$passdb = "pam";
|
||||
}
|
||||
$passdb .= ($in{'ppam_session'} ? " -session" : "").
|
||||
($ckey ? " cache_key=$ckey" : "").
|
||||
" ".$in{'ppam'};
|
||||
}
|
||||
elsif ($in{'passmode'} eq 'passwd-file') {
|
||||
-r $in{'ppasswdfile'} || &error($text{'login_epasswdfile'});
|
||||
$passdb .= " ".$in{'ppasswdfile'};
|
||||
}
|
||||
elsif ($in{'passmode'} eq 'ldap') {
|
||||
-r $in{'pldap'} || &error($text{'login_eldap'});
|
||||
$passdb .= " ".$in{'pldap'};
|
||||
}
|
||||
elsif ($in{'passmode'} eq 'pgsql') {
|
||||
-r $in{'ppgsql'} || &error($text{'login_epgsql'});
|
||||
$passdb .= " ".$in{'ppgsql'};
|
||||
}
|
||||
elsif ($in{'passmode'} eq 'sql') {
|
||||
-r $in{'psql'} || &error($text{'login_esql'});
|
||||
$passdb .= " ".$in{'psql'};
|
||||
}
|
||||
elsif ($in{'passmode'} eq 'bsdauth') {
|
||||
$in{'bsdauth_ckey_def'} || $in{'bsdauth_ckey'} =~ /^\S+$/ ||
|
||||
&error($text{'login_eckey'});
|
||||
$passdb .= " cache_key=$in{'bsdauth_ckey'}"
|
||||
if (!$in{'bsdauth_ckey_def'});
|
||||
}
|
||||
elsif ($in{'passmode'} eq 'checkpassword') {
|
||||
-x $in{'checkpassword'} || &error($text{'login_echeckpassword'});
|
||||
$passdb .= " ".$in{'checkpassword'};
|
||||
}
|
||||
elsif ($in{'passmode'} eq '') {
|
||||
$passdb = $in{'other'};
|
||||
}
|
||||
# XXX other modes
|
||||
if ($psec = &find_section("passdb", $conf, undef, "auth", "default")) {
|
||||
# Version 1.0.alpha format
|
||||
($svalue, $args) = split(/\s+/, $passdb, 2);
|
||||
$psec->{'value'} = $svalue;
|
||||
$psec->{'members'} = [ grep { $_->{'name'} ne 'args' }
|
||||
@{$psec->{'members'}} ];
|
||||
if ($args) {
|
||||
$psec->{'members'} = [ { 'name' => 'args',
|
||||
'value' => $args } ];
|
||||
elsif ($in{'passmode'} eq 'pam') {
|
||||
$in{'ppam'} =~ /^\S+$/ || &error($text{'login_edpam'});
|
||||
if (defined($in{'ppam_ckey'}) && !$in{'ppam_ckey_def'}) {
|
||||
$ckey = $in{'ppam_ckey'};
|
||||
$ckey =~ /^\S+$/ || &error($text{'login_eckey'});
|
||||
}
|
||||
$passdb .= ($in{'ppam_session'} ? " -session" : "").
|
||||
($ckey ? " cache_key=$ckey" : "").
|
||||
" ".$in{'ppam'};
|
||||
}
|
||||
elsif ($in{'passmode'} eq 'passwd-file') {
|
||||
-r $in{'ppasswdfile'} || &error($text{'login_epasswdfile'});
|
||||
$passdb .= " ".$in{'ppasswdfile'};
|
||||
}
|
||||
elsif ($in{'passmode'} eq 'ldap') {
|
||||
-r $in{'pldap'} || &error($text{'login_eldap'});
|
||||
$passdb .= " ".$in{'pldap'};
|
||||
}
|
||||
elsif ($in{'passmode'} eq 'pgsql') {
|
||||
-r $in{'ppgsql'} || &error($text{'login_epgsql'});
|
||||
$passdb .= " ".$in{'ppgsql'};
|
||||
}
|
||||
elsif ($in{'passmode'} eq 'sql') {
|
||||
-r $in{'psql'} || &error($text{'login_esql'});
|
||||
$passdb .= " ".$in{'psql'};
|
||||
}
|
||||
elsif ($in{'passmode'} eq 'bsdauth') {
|
||||
$in{'bsdauth_ckey_def'} || $in{'bsdauth_ckey'} =~ /^\S+$/ ||
|
||||
&error($text{'login_eckey'});
|
||||
$passdb .= " cache_key=$in{'bsdauth_ckey'}"
|
||||
if (!$in{'bsdauth_ckey_def'});
|
||||
}
|
||||
elsif ($in{'passmode'} eq 'checkpassword') {
|
||||
-x $in{'checkpassword'} || &error($text{'login_echeckpassword'});
|
||||
$passdb .= " ".$in{'checkpassword'};
|
||||
}
|
||||
elsif ($in{'passmode'} eq '') {
|
||||
$passdb = $in{'other'};
|
||||
}
|
||||
# XXX other modes
|
||||
if ($psec = &find_section("passdb", $conf, undef, "auth", "default")) {
|
||||
# Version 1.0.alpha format
|
||||
($svalue, $args) = split(/\s+/, $passdb, 2);
|
||||
$psec->{'value'} = $svalue;
|
||||
$psec->{'members'} = [ grep { $_->{'name'} ne 'args' }
|
||||
@{$psec->{'members'}} ];
|
||||
if ($args) {
|
||||
$psec->{'members'} = [ { 'name' => 'args',
|
||||
'value' => $args } ];
|
||||
}
|
||||
&save_section($conf, $psec);
|
||||
}
|
||||
elsif (&find("auth_passdb", $conf, 2)) {
|
||||
# Version 0.99 format
|
||||
&save_directive($conf, "auth_passdb", $passdb);
|
||||
}
|
||||
elsif (&find_value("driver", $conf, 2, "passdb")) {
|
||||
# Version 2.0 format
|
||||
$args = $passdb =~ s/\s+(\S.*)$// ? $1 : undef;
|
||||
&save_directive($conf, "driver", $passdb, "passdb");
|
||||
&save_directive($conf, "args", $args, "passdb");
|
||||
}
|
||||
else {
|
||||
# Version 1.0 format
|
||||
&save_directive($conf, "passdb", $passdb, "auth", "default");
|
||||
}
|
||||
&save_section($conf, $psec);
|
||||
}
|
||||
elsif (&find("auth_passdb", $conf, 2)) {
|
||||
# Version 0.99 format
|
||||
&save_directive($conf, "auth_passdb", $passdb);
|
||||
}
|
||||
elsif (&find_value("driver", $conf, 2, "passdb")) {
|
||||
# Version 2.0 format
|
||||
$args = $passdb =~ s/\s+(\S.*)$// ? $1 : undef;
|
||||
&save_directive($conf, "driver", $passdb, "passdb");
|
||||
&save_directive($conf, "args", $args, "passdb");
|
||||
}
|
||||
else {
|
||||
# Version 1.0 format
|
||||
&save_directive($conf, "passdb", $passdb, "auth", "default");
|
||||
}
|
||||
|
||||
# Allowed UIDs and GIDs
|
||||
@@ -167,7 +174,10 @@ $in{'lgid_def'} || $in{'lgid'} =~ /^\d+$/ || &error($text{'login_elgid'});
|
||||
&save_directive($conf, "last_valid_gid",
|
||||
$in{'lgid_def'} ? undef : $in{'lgid'});
|
||||
|
||||
&save_directive($conf, "mail_extra_groups",
|
||||
&save_directive($conf,
|
||||
&version_atleast("2")
|
||||
? "mail_access_groups"
|
||||
: "mail_extra_groups",
|
||||
$in{'extra_def'} ? undef : $in{'extra'});
|
||||
|
||||
$in{'chroot_def'} || -d $in{'chroot'} || &error($text{'login_echroot'});
|
||||
|
||||
@@ -17,27 +17,59 @@ else {
|
||||
}
|
||||
|
||||
# Add index file location
|
||||
$env || !$in{'indexmode'} || &error($text{'mail_eindexmode'});
|
||||
$env || !$in{'controlmode'} || &error($text{'mail_econtrolmode'});
|
||||
if ($in{'indexmode'} == 1) {
|
||||
$env .= ":INDEX=MEMORY";
|
||||
if (&version_below("2.4")) {
|
||||
$env || !$in{'indexmode'} || &error($text{'mail_eindexmode'});
|
||||
$env || !$in{'controlmode'} || &error($text{'mail_econtrolmode'});
|
||||
if ($in{'indexmode'} == 1) {
|
||||
$env .= ":INDEX=MEMORY";
|
||||
}
|
||||
elsif ($in{'indexmode'} == 2) {
|
||||
$in{'index'} =~ /^\/\S+$/ || &error($text{'mail_eindex'});
|
||||
$env .= ":INDEX=".$in{'index'};
|
||||
}
|
||||
if ($in{'controlmode'}) {
|
||||
$in{'control'} =~ /^\/\S+$/ || &error($text{'mail_econtrol'});
|
||||
$env .= ":CONTROL=".$in{'control'};
|
||||
}
|
||||
}
|
||||
elsif ($in{'indexmode'} == 2) {
|
||||
$in{'index'} =~ /^\/\S+$/ || &error($text{'mail_eindex'});
|
||||
$env .= ":INDEX=".$in{'index'};
|
||||
}
|
||||
if ($in{'controlmode'}) {
|
||||
$in{'control'} =~ /^\/\S+$/ || &error($text{'mail_econtrol'});
|
||||
$env .= ":CONTROL=".$in{'control'};
|
||||
else {
|
||||
# Parse index and control first
|
||||
if ($in{'indexmode'} == 1) {
|
||||
$index = "MEMORY";
|
||||
}
|
||||
elsif ($in{'indexmode'} == 2) {
|
||||
$in{'index'} =~ /^\/\S+$/ || $in{'index'} =~ /^~\S+$/ ||
|
||||
&error($text{'mail_eindex'});
|
||||
$index = $in{'index'};
|
||||
}
|
||||
if ($in{'controlmode'}) {
|
||||
$in{'control'} =~ /^\/\S+$/ || $in{'control'} =~ /^~\S+$/ ||
|
||||
&error($text{'mail_econtrol'});
|
||||
$control = $in{'control'};
|
||||
}
|
||||
# Directly save dedicated mail_index_path and mail_control_path
|
||||
&save_directive($conf, "mail_index_path",
|
||||
$index eq "" ? undef : $index);
|
||||
&save_directive($conf, "mail_control_path",
|
||||
$control eq "" ? undef : $control);
|
||||
}
|
||||
|
||||
if (&find("default_mail_env", $conf, 2)) {
|
||||
&save_directive($conf, "default_mail_env", $env eq "" ? undef : $env);
|
||||
}
|
||||
elsif (&find("mail_path", $conf, 2)) {
|
||||
&save_directive($conf, "mail_path", $env eq "" ? undef : $env);
|
||||
}
|
||||
else {
|
||||
&save_directive($conf, "mail_location", $env eq "" ? undef : $env);
|
||||
}
|
||||
|
||||
# Mail file format
|
||||
if (&version_atleast("2.4")) {
|
||||
my $driver = $in{'driver'};
|
||||
&save_directive($conf, "mail_driver", $driver eq "" ? undef : $driver);
|
||||
}
|
||||
|
||||
# Idle intervals
|
||||
$in{'idle'} != 2 || $in{'idlei'} =~ /^\d+$/ || &error($text{'mail_eidle'});
|
||||
&save_directive($conf, "mailbox_idle_check_interval",
|
||||
@@ -57,17 +89,12 @@ else {
|
||||
$in{'change'} ? $in{'change'} : undef);
|
||||
}
|
||||
|
||||
# Umask
|
||||
$in{'umask_def'} || $in{'umask'} =~ /^[0-7]{4}$/ ||&error($text{'mail_eumask'});
|
||||
&save_directive($conf, "umask",
|
||||
$in{'umask_def'} ? undef : $in{'umask'});
|
||||
|
||||
# UIDL format
|
||||
if (&find("pop3_uidl_format", $conf, 2)) {
|
||||
$uidl = $in{'pop3_uidl_format'} eq '*' ?
|
||||
$in{'pop3_uidl_format_other'} : $in{'pop3_uidl_format'};
|
||||
$uidl =~ /^\S+$/ || &error($text{'mail_euidl'});
|
||||
&save_directive($conf, "pop3_uidl_format", $uidl);
|
||||
if (&version_below("2")) {
|
||||
# Umask
|
||||
$in{'umask_def'} || $in{'umask'} =~ /^[0-7]{4}$/ ||
|
||||
&error($text{'mail_eumask'});
|
||||
&save_directive($conf, "umask",
|
||||
$in{'umask_def'} ? undef : $in{'umask'});
|
||||
}
|
||||
|
||||
# LAST command
|
||||
|
||||
@@ -7,10 +7,14 @@ require './dovecot-lib.pl';
|
||||
$conf = &get_config();
|
||||
&lock_dovecot_files($conf);
|
||||
|
||||
# Save SSL cert and key
|
||||
# Save SSL cert
|
||||
$in{'cert_def'} || -r $in{'cert'} || $in{'cert'} =~ /^[<>\|]/ ||
|
||||
&error($text{'ssl_ecert'});
|
||||
if (&find_value("ssl_cert", $conf, 2) || &version_atleast("2.2")) {
|
||||
if (&version_atleast("2.4")) {
|
||||
&save_directive($conf, "ssl_server_cert_file",
|
||||
$in{'cert_def'} ? undef : $in{'cert'}, "");
|
||||
}
|
||||
elsif (&find_value("ssl_cert", $conf, 2) || &version_atleast("2.2")) {
|
||||
$in{'cert'} = "<".$in{'cert'} if ($in{'cert'} =~ /^\//);
|
||||
&save_directive($conf, "ssl_cert",
|
||||
$in{'cert_def'} ? undef : $in{'cert'}, "");
|
||||
@@ -20,9 +24,14 @@ else {
|
||||
$in{'cert_def'} ? undef : $in{'cert'});
|
||||
}
|
||||
|
||||
# Save SSL key
|
||||
$in{'key_def'} || -r $in{'key'} || $in{'key'} =~ /^[<>\|]/ ||
|
||||
&error($text{'ssl_ekey'});
|
||||
if (&find_value("ssl_key", $conf, 2) || &version_atleast("2.2")) {
|
||||
if (&version_atleast("2.4")) {
|
||||
&save_directive($conf, "ssl_server_key_file",
|
||||
$in{'key_def'} ? undef : $in{'key'}, "");
|
||||
}
|
||||
elsif (&find_value("ssl_key", $conf, 2) || &version_atleast("2.2")) {
|
||||
$in{'key'} = "<".$in{'key'} if ($in{'key'} =~ /^\//);
|
||||
&save_directive($conf, "ssl_key",
|
||||
$in{'key_def'} ? undef : $in{'key'}, "");
|
||||
@@ -35,7 +44,11 @@ else {
|
||||
# Save SSL CA cert
|
||||
$in{'ca_def'} || -r $in{'ca'} || $in{'ca'} =~ /^[<>\|]/ ||
|
||||
&error($text{'ssl_eca'});
|
||||
if (&find_value("ssl_ca", $conf, 2) || &version_atleast("2.2")) {
|
||||
if (&version_atleast("2.4")) {
|
||||
&save_directive($conf, "ssl_server_ca_file",
|
||||
$in{'ca_def'} ? undef : $in{'ca'}, "");
|
||||
}
|
||||
elsif (&find_value("ssl_ca", $conf, 2) || &version_atleast("2.2")) {
|
||||
$in{'ca'} = "<".$in{'ca'} if ($in{'ca'} =~ /^\//);
|
||||
&save_directive($conf, "ssl_ca",
|
||||
$in{'ca_def'} ? undef : $in{'ca'}, "");
|
||||
@@ -47,15 +60,29 @@ else {
|
||||
|
||||
# Save SSL key password
|
||||
$in{'pass_def'} || $in{'pass'} =~ /\S/ || &error($text{'ssl_epass'});
|
||||
&save_directive($conf, "ssl_key_password",
|
||||
$in{'pass_def'} ? undef : $in{'pass'});
|
||||
&save_directive($conf,
|
||||
&version_atleast("2.4")
|
||||
? "ssl_server_key_password"
|
||||
: "ssl_key_password",
|
||||
$in{'pass_def'} ? undef : $in{'pass'});
|
||||
|
||||
$in{'regen_def'} || $in{'regen'} =~ /^\d+$/ || &error($text{'ssl_eregen'});
|
||||
&save_directive($conf, "ssl_parameters_regenerate",
|
||||
$in{'regen_def'} ? undef : $in{'regen'});
|
||||
# Save SSL parameter regeneration time
|
||||
if (&version_below("2.4")) {
|
||||
$in{'regen_def'} || $in{'regen'} =~ /^\d+$/ ||
|
||||
&error($text{'ssl_eregen'});
|
||||
&save_directive($conf, "ssl_parameters_regenerate",
|
||||
$in{'regen_def'} ? undef : $in{'regen'});
|
||||
}
|
||||
|
||||
&save_directive($conf, "disable_plaintext_auth",
|
||||
$in{'plain'} ? $in{'plain'} : undef);
|
||||
# Save plaintext password setting
|
||||
if (&find_value("auth_allow_cleartext", $conf, 2)) {
|
||||
&save_directive($conf, "auth_allow_cleartext",
|
||||
$in{'plain'} ? $in{'plain'} : undef);
|
||||
}
|
||||
else {
|
||||
&save_directive($conf, "disable_plaintext_auth",
|
||||
$in{'plain'} ? $in{'plain'} : undef);
|
||||
}
|
||||
|
||||
&flush_file_lines();
|
||||
&unlock_dovecot_files($conf);
|
||||
|
||||
Binary file not shown.
|
Before Width: | Height: | Size: 2.4 KiB After Width: | Height: | Size: 4.3 KiB |
31
lang/en
31
lang/en
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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'} },
|
||||
|
||||
@@ -2073,7 +2073,8 @@ if (!$h && $folder->{'server'} eq '*') {
|
||||
}
|
||||
}
|
||||
$imapcmd || return (0, "Dovecot imap command not found");
|
||||
$imapcmd .= " -u ".($folder->{'user'} eq "*" ? $remote_user : $folder->{'user'});
|
||||
$imapcmd .= " -u ".($folder->{'user'} eq "*" ||
|
||||
!$folder->{'user'} ? $remote_user : $folder->{'user'});
|
||||
print DEBUG "Running IMAP server $imapcmd\n";
|
||||
eval "use IPC::Open3";
|
||||
if ($@) {
|
||||
|
||||
@@ -25,23 +25,61 @@ my $changelog_file = "$debian_dir/changelog";
|
||||
my $files_file = "$debian_dir/files";
|
||||
|
||||
# Parse command-line args
|
||||
my ($force_theme, $url, $upstream, $debdepends, $debrecommends,
|
||||
my ($force_theme, $url, $upstream,
|
||||
$no_prefix, $force_usermin, $release, $allow_overwrite, $final_mod,
|
||||
$dsc_file, $dir, $ver, @exclude);
|
||||
$dsc_file, $dir, $ver, @exclude,
|
||||
|
||||
$debdepends, $nodebdepends, $debrecommends, $nodebrecommends,
|
||||
$no_requires, $no_recommends, $no_suggests, $no_conflicts, $no_replaces,
|
||||
$no_breaks, $no_provides, $no_obsoletes);
|
||||
|
||||
my $mod_list = 'full';
|
||||
|
||||
while(@ARGV) {
|
||||
my $a = shift(@ARGV);
|
||||
if ($a eq "--deb-depends") {
|
||||
if ($a eq "--deb-depends" || $a eq "--mod-depends") {
|
||||
$debdepends = 1;
|
||||
}
|
||||
elsif ($a eq "--deb-recommends") {
|
||||
elsif ($a eq "--no-mod-depends") {
|
||||
$nodebdepends = 1;
|
||||
}
|
||||
elsif ($a eq "--deb-recommends" || $a eq "--mod-recommends") {
|
||||
$debrecommends = 1;
|
||||
}
|
||||
elsif ($a eq "--no-mod-recommends") {
|
||||
$nodebrecommends = 1;
|
||||
}
|
||||
# --recommends, --suggests, --conflicts, --provides and --obsoletes are
|
||||
# not for Webmin modules, and not meant to have prefix, and populated
|
||||
# from module.info automatically
|
||||
# --no-requires, --no-recommends, --no-suggests,
|
||||
# --no-conflicts, --no-replaces, --no-breaks, --no-provides,
|
||||
# --no-obsoletes can be used to disable the automatic population of
|
||||
# these fields from module.info
|
||||
elsif ($a eq "--no-requires") {
|
||||
$no_requires = 1;
|
||||
}
|
||||
elsif ($a eq "--no-recommends") {
|
||||
$no_recommends = 1;
|
||||
}
|
||||
elsif ($a eq "--no-suggests") {
|
||||
$no_suggests = 1;
|
||||
}
|
||||
elsif ($a eq "--no-conflicts") {
|
||||
$no_conflicts = 1;
|
||||
}
|
||||
elsif ($a eq "--no-replaces") {
|
||||
$no_replaces = 1;
|
||||
}
|
||||
elsif ($a eq "--no-breaks") {
|
||||
$no_breaks = 1;
|
||||
}
|
||||
elsif ($a eq "--no-provides") {
|
||||
$no_provides = 1;
|
||||
}
|
||||
elsif ($a eq "--no-obsoletes") {
|
||||
$no_obsoletes = 1;
|
||||
}
|
||||
elsif ($a eq "--no-prefix") {
|
||||
$no_prefix = 1;
|
||||
}
|
||||
@@ -98,13 +136,24 @@ while(@ARGV) {
|
||||
}
|
||||
}
|
||||
|
||||
# Disable module's depends and recommends if set in extra flags
|
||||
$debdepends = 0 if ($nodebdepends);
|
||||
$debrecommends = 0 if ($nodebrecommends);
|
||||
|
||||
# Validate args
|
||||
if (!$dir) {
|
||||
print "usage: ", CYAN, "makemoduledeb.pl ";
|
||||
print CYAN, "<module> [version]";
|
||||
print YELLOW, "\n";
|
||||
print " [--deb-depends]\n";
|
||||
print " [--deb-recommends]\n";
|
||||
print " [--mod-depends] [--no-mod-depends]\n";
|
||||
print " [--mod-recommends] [--no-mod-recommends]\n";
|
||||
print " [--no-requires]\n";
|
||||
print " [--no-suggests]\n";
|
||||
print " [--no-conflicts]\n";
|
||||
print " [--no-replaces]\n";
|
||||
print " [--no-breaks]\n";
|
||||
print " [--no-provides]\n";
|
||||
print " [--no-obsoletes]\n";
|
||||
print " [--no-prefix]\n";
|
||||
print " [--licence name]\n";
|
||||
print " [--email 'name <address>']\n";
|
||||
@@ -281,7 +330,7 @@ if ($debrecommends && defined($minfo{'recommends'})) {
|
||||
|
||||
# Build (append) list of required packages (not Webmin modules)
|
||||
my @rrequires = ( );
|
||||
if (exists($minfo{'deb_requires'})) {
|
||||
if (!$no_requires && exists($minfo{'deb_requires'})) {
|
||||
foreach my $debrequire (split(/\s+/, $minfo{'deb_requires'})) {
|
||||
push(@rrequires, $debrequire);
|
||||
}
|
||||
@@ -290,7 +339,7 @@ if (exists($minfo{'deb_requires'})) {
|
||||
|
||||
# Build (append) list of recommended packages (not Webmin modules)
|
||||
my @rrecommends = ( );
|
||||
if (exists($minfo{'deb_recommends'})) {
|
||||
if (!$no_recommends && exists($minfo{'deb_recommends'})) {
|
||||
foreach my $debrecommend (split(/\s+/, $minfo{'deb_recommends'})) {
|
||||
push(@rrecommends, $debrecommend);
|
||||
}
|
||||
@@ -300,7 +349,7 @@ if (exists($minfo{'deb_recommends'})) {
|
||||
|
||||
# Build (standalone) list of suggested packages (not Webmin modules)
|
||||
my @rsuggests = ( );
|
||||
if (exists($minfo{'deb_suggests'})) {
|
||||
if (!$no_suggests && exists($minfo{'deb_suggests'})) {
|
||||
foreach my $debsuggest (split(/\s+/, $minfo{'deb_suggests'})) {
|
||||
push(@rsuggests, $debsuggest);
|
||||
}
|
||||
@@ -308,7 +357,7 @@ if (exists($minfo{'deb_suggests'})) {
|
||||
|
||||
# Build (standalone) list of conflicts (not Webmin modules)
|
||||
my @rconflicts = ( );
|
||||
if (exists($minfo{'deb_conflicts'})) {
|
||||
if (!$no_conflicts && exists($minfo{'deb_conflicts'})) {
|
||||
foreach my $debconflict (split(/\s+/, $minfo{'deb_conflicts'})) {
|
||||
push(@rconflicts, $debconflict);
|
||||
}
|
||||
@@ -316,7 +365,7 @@ if (exists($minfo{'deb_conflicts'})) {
|
||||
|
||||
# Build (standalone) list of replaces (not Webmin modules)
|
||||
my @rreplaces = ( );
|
||||
if (exists($minfo{'deb_replaces'})) {
|
||||
if (!$no_replaces && exists($minfo{'deb_replaces'})) {
|
||||
foreach my $debreplace (split(/\s+/, $minfo{'deb_replaces'})) {
|
||||
push(@rreplaces, $debreplace);
|
||||
}
|
||||
@@ -324,14 +373,14 @@ if (exists($minfo{'deb_replaces'})) {
|
||||
|
||||
# Build (standalone) list of breaks (not Webmin modules)
|
||||
my @rbreaks = ( );
|
||||
if (exists($minfo{'deb_breaks'})) {
|
||||
if (!$no_breaks && exists($minfo{'deb_breaks'})) {
|
||||
foreach my $debbreak (split(/\s+/, $minfo{'deb_breaks'})) {
|
||||
push(@rbreaks, $debbreak);
|
||||
}
|
||||
}
|
||||
|
||||
# Build (standalone) list of obsoletes (replaces+conflicts) (not Webmin modules)
|
||||
if (exists($minfo{'deb_obsoletes'})) {
|
||||
if (!$no_obsoletes && exists($minfo{'deb_obsoletes'})) {
|
||||
foreach my $debobsolete (split(/\s+/, $minfo{'deb_obsoletes'})) {
|
||||
push(@rconflicts, $debobsolete);
|
||||
push(@rreplaces, $debobsolete);
|
||||
@@ -340,7 +389,7 @@ if (exists($minfo{'deb_obsoletes'})) {
|
||||
|
||||
# Build (standalone) list of provides (not Webmin modules)
|
||||
my @rprovides = ( );
|
||||
if (exists($minfo{'deb_provides'})) {
|
||||
if (!$no_provides && exists($minfo{'deb_provides'})) {
|
||||
foreach my $debprovide (split(/\s+/, $minfo{'deb_provides'})) {
|
||||
push(@rprovides, $debprovide);
|
||||
}
|
||||
|
||||
@@ -32,9 +32,13 @@ my $release = 1;
|
||||
$ENV{'PATH'} = "/bin:/usr/bin:/usr/local/bin:/sbin:/usr/sbin";
|
||||
my $allow_overwrite = 0;
|
||||
|
||||
my ($force_theme, $rpmdepends, $rpmrecommends, $no_prefix, $set_prefix,
|
||||
my ($force_theme, $no_prefix, $set_prefix,
|
||||
$obsolete_wbm, $vendor, $url, $force_usermin, $final_mod, $sign, $keyname,
|
||||
$epoch, $dir, $ver, @exclude);
|
||||
$epoch, $dir, $ver, @exclude,
|
||||
|
||||
$rpmdepends, $norpmdepends, $rpmrecommends, $norpmrecommends,
|
||||
$no_requires, $no_recommends, $no_suggests, $no_conflicts, $no_provides,
|
||||
$no_obsoletes);
|
||||
|
||||
my $mod_list = 'full';
|
||||
|
||||
@@ -42,15 +46,42 @@ my $mod_list = 'full';
|
||||
while(@ARGV) {
|
||||
# XXX Untainting isn't needed when running as non-root?
|
||||
my $a = &untaint(shift(@ARGV));
|
||||
if ($a eq "--rpm-depends") {
|
||||
if ($a eq "--rpm-depends" || $a eq "--mod-depends") {
|
||||
$rpmdepends = 1;
|
||||
}
|
||||
elsif ($a eq "--rpm-recommends") {
|
||||
elsif ($a eq "--no-mod-depends") {
|
||||
$norpmdepends = 1;
|
||||
}
|
||||
elsif ($a eq "--rpm-recommends" || $a eq "--mod-recommends") {
|
||||
$rpmrecommends = 1;
|
||||
}
|
||||
# --recommends, --suggests, --conflicts, --provides and --obsoletes are
|
||||
# not for Webmin modules, and not meant to have prefix, and populated
|
||||
# from module.info automatically
|
||||
elsif ($a eq "--no-mod-recommends") {
|
||||
$norpmrecommends = 1;
|
||||
}
|
||||
# --requires, --recommends, --suggests, --conflicts, --provides and
|
||||
# --obsoletes are not for Webmin modules, and not meant to have prefix,
|
||||
# and populated from module.info automatically
|
||||
# --no-requires, --no-recommends, --no-suggests,
|
||||
# --no-conflicts, --no-provides, --no-obsoletes can be used
|
||||
# to disable the automatic population of these fields from module.info
|
||||
elsif ($a eq "--no-requires") {
|
||||
$no_requires = 1;
|
||||
}
|
||||
elsif ($a eq "--no-recommends") {
|
||||
$no_recommends = 1;
|
||||
}
|
||||
elsif ($a eq "--no-suggests") {
|
||||
$no_suggests = 1;
|
||||
}
|
||||
elsif ($a eq "--no-conflicts") {
|
||||
$no_conflicts = 1;
|
||||
}
|
||||
elsif ($a eq "--no-provides") {
|
||||
$no_provides = 1;
|
||||
}
|
||||
elsif ($a eq "--no-obsoletes") {
|
||||
$no_obsoletes = 1;
|
||||
}
|
||||
elsif ($a eq "--no-prefix") {
|
||||
$no_prefix = 1;
|
||||
}
|
||||
@@ -119,13 +150,22 @@ while(@ARGV) {
|
||||
}
|
||||
}
|
||||
|
||||
# Disable module's depends and recommends if set in extra flags
|
||||
$rpmdepends = 0 if ($norpmdepends);
|
||||
$rpmrecommends = 0 if ($norpmrecommends);
|
||||
|
||||
# Validate args
|
||||
if (!$dir) {
|
||||
print "usage: ";
|
||||
print CYAN, "makemodulerpm.pl <module> [version]", RESET;
|
||||
print YELLOW, "\n";
|
||||
print " [--rpm-depends]\n";
|
||||
print " [--rpm-recommends]\n";
|
||||
print " [--mod-depends] [--no-mod-depends]\n";
|
||||
print " [--mod-recommends] [--no-mod-recommends]\n";
|
||||
print " [--no-requires]\n";
|
||||
print " [--no-suggests]\n";
|
||||
print " [--no-conflicts]\n";
|
||||
print " [--no-provides]\n";
|
||||
print " [--no-obsoletes]\n";
|
||||
print " [--rpm-dir directory]\n";
|
||||
print " [--no-prefix]\n";
|
||||
print " [--prefix prefix]\n";
|
||||
@@ -308,7 +348,7 @@ if ($rpmrecommends && defined($minfo{'recommends'})) {
|
||||
|
||||
# Build (append) list of required packages (not Webmin modules)
|
||||
my @rrequires = ( );
|
||||
if (exists($minfo{'rpm_requires'})) {
|
||||
if (!$no_requires && exists($minfo{'rpm_requires'})) {
|
||||
foreach my $rpmrequire (split(/\s+/, $minfo{'rpm_requires'})) {
|
||||
push(@rrequires, $rpmrequire);
|
||||
}
|
||||
@@ -317,7 +357,7 @@ if (exists($minfo{'rpm_requires'})) {
|
||||
|
||||
# Build (append) list of recommended packages (not Webmin modules)
|
||||
my @rrecommends = ( );
|
||||
if (exists($minfo{'rpm_recommends'})) {
|
||||
if (!$no_recommends && exists($minfo{'rpm_recommends'})) {
|
||||
foreach my $rpmrecommend (split(/\s+/, $minfo{'rpm_recommends'})) {
|
||||
push(@rrecommends, $rpmrecommend);
|
||||
}
|
||||
@@ -327,7 +367,7 @@ if (exists($minfo{'rpm_recommends'})) {
|
||||
|
||||
# Build (standalone) list of suggested packages (not Webmin modules)
|
||||
my @rsuggests = ( );
|
||||
if (exists($minfo{'rpm_suggests'})) {
|
||||
if (!$no_suggests && exists($minfo{'rpm_suggests'})) {
|
||||
foreach my $rpmsuggest (split(/\s+/, $minfo{'rpm_suggests'})) {
|
||||
push(@rsuggests, $rpmsuggest);
|
||||
}
|
||||
@@ -335,7 +375,7 @@ if (exists($minfo{'rpm_suggests'})) {
|
||||
|
||||
# Build (standalone) list of conflicts (not Webmin modules)
|
||||
my @rconflicts = ( );
|
||||
if (exists($minfo{'rpm_conflicts'})) {
|
||||
if (!$no_conflicts && exists($minfo{'rpm_conflicts'})) {
|
||||
foreach my $rpmconflict (split(/\s+/, $minfo{'rpm_conflicts'})) {
|
||||
push(@rconflicts, $rpmconflict);
|
||||
}
|
||||
@@ -343,7 +383,7 @@ if (exists($minfo{'rpm_conflicts'})) {
|
||||
|
||||
# Build (standalone) list of provides (not Webmin modules)
|
||||
my @rprovides = ( );
|
||||
if (exists($minfo{'rpm_provides'})) {
|
||||
if (!$no_provides && exists($minfo{'rpm_provides'})) {
|
||||
foreach my $rpmprovide (split(/\s+/, $minfo{'rpm_provides'})) {
|
||||
push(@rprovides, $rpmprovide);
|
||||
}
|
||||
@@ -351,7 +391,7 @@ if (exists($minfo{'rpm_provides'})) {
|
||||
|
||||
# Build (standalone) list of obsoletes (not Webmin modules)
|
||||
my @robsoletes = ( );
|
||||
if (exists($minfo{'rpm_obsoletes'})) {
|
||||
if (!$no_obsoletes && exists($minfo{'rpm_obsoletes'})) {
|
||||
foreach my $rpmobsolete (split(/\s+/, $minfo{'rpm_obsoletes'})) {
|
||||
push(@robsoletes, $rpmobsolete);
|
||||
}
|
||||
|
||||
@@ -229,6 +229,11 @@ if [ "\$tempdir" = "" ]; then
|
||||
fi
|
||||
export config_dir var_dir perl autoos port login crypt host ssl nochown autothird noperlpath nouninstall nostart allow atboot makeboot nostop nodepsmsg
|
||||
./setup.sh >\$tempdir/webmin-setup.out 2>&1
|
||||
grep sudo= /etc/webmin/miniserv.conf >/dev/null 2>&1
|
||||
if [ "\$?" = 1 ]; then
|
||||
# Allow sudo-based logins
|
||||
echo sudo=1 >>/etc/webmin/miniserv.conf
|
||||
fi
|
||||
chmod 600 \$tempdir/webmin-setup.out
|
||||
rm -f /var/lock/subsys/webmin
|
||||
cd /usr/libexec/webmin
|
||||
|
||||
24
mysql/config-debian-linux-13.0-ALL
Normal file
24
mysql/config-debian-linux-13.0-ALL
Normal file
@@ -0,0 +1,24 @@
|
||||
access=*: *
|
||||
add_mode=1
|
||||
blob_mode=0
|
||||
date_subs=0
|
||||
login=root
|
||||
max_dbs=50
|
||||
max_text=1000
|
||||
my_cnf=/etc/mysql/my.cnf
|
||||
mysql=/usr/bin/mariadb
|
||||
mysql_data=/var/lib/mysql
|
||||
mysql_libs=
|
||||
mysqladmin=/usr/bin/mariadb-admin
|
||||
mysqldump=/usr/bin/mariadb-dump
|
||||
mysqlimport=/usr/bin/mariadb-import
|
||||
mysqlshow=/usr/bin/mariadb-show
|
||||
nodbi=0
|
||||
nopwd=0
|
||||
passwd_mode=0
|
||||
perpage=25
|
||||
ssl=0
|
||||
start_cmd=systemctl start mariadb
|
||||
stop_cmd=systemctl stop mariadb
|
||||
style=1
|
||||
webmin_subs=0
|
||||
@@ -76,15 +76,19 @@ sub postfix_module_version
|
||||
}
|
||||
|
||||
# is_postfix_running()
|
||||
# returns 1 if running, 0 if stopped, calls error() if problem
|
||||
# returns 1 if running, 0 if stopped
|
||||
sub is_postfix_running
|
||||
{
|
||||
my $queuedir = get_current_value("queue_directory");
|
||||
my $processid = get_current_value("process_id_directory");
|
||||
my $pid = 0;
|
||||
eval {
|
||||
local $main::error_must_die = 1;
|
||||
my $queuedir = get_current_value("queue_directory");
|
||||
my $processid = get_current_value("process_id_directory");
|
||||
|
||||
my $pid_file = $queuedir."/".$processid."/master.pid";
|
||||
my $pid = &check_pid_file($pid_file);
|
||||
return $pid ? 1 : 0;
|
||||
my $pid_file = $queuedir."/".$processid."/master.pid";
|
||||
$pid = &check_pid_file($pid_file) ? 1 : 0;
|
||||
};
|
||||
return $pid;
|
||||
}
|
||||
|
||||
|
||||
@@ -762,7 +766,7 @@ sub regenerate_dependent_table
|
||||
sub regenerate_any_table
|
||||
{
|
||||
my ($name, $force, $after, $base64) = @_;
|
||||
$base64 = 0 if ($postfix_version < 3.4);
|
||||
$base64 = 0 if (&compare_version_numbers($postfix_version, 3.4) < 0);
|
||||
my @files;
|
||||
if ($force) {
|
||||
@files = map { [ "hash", $_ ] } @$force;
|
||||
@@ -1604,7 +1608,7 @@ sub get_real_value
|
||||
{
|
||||
my ($name) = @_;
|
||||
my $v = &get_current_value($name);
|
||||
if ($postfix_version >= 2.1 && $v =~ /\$/) {
|
||||
if (&compare_version_numbers($postfix_version, 2.1) >= 0 && $v =~ /\$/) {
|
||||
# Try to use the built-in command to expand the param
|
||||
my $out = &backquote_command("$config{'postfix_config_command'} -c $config_dir -x -h ".
|
||||
quotemeta($name)." 2>/dev/null", 1);
|
||||
|
||||
@@ -501,6 +501,13 @@ my @fans;
|
||||
my @fans_all;
|
||||
my @cpu_thermisters;
|
||||
my $cpu_broadcoms;
|
||||
my @sensors;
|
||||
my $ceil = sub {
|
||||
my $x = shift;
|
||||
$x //= 0;
|
||||
my $i = int($x);
|
||||
return $i + ($x > $i);
|
||||
};
|
||||
if (&has_command("sensors")) {
|
||||
my ($cpu, $cpu_aux, $cpu_unnamed, $cpu_package, $cpu_broadcom, $cpu_amd);
|
||||
my $fh = "SENSORS";
|
||||
@@ -510,9 +517,10 @@ if (&has_command("sensors")) {
|
||||
&open_execute_command($fh, "sensors </dev/null 2>/dev/null", 1);
|
||||
|
||||
while (<$fh>) {
|
||||
|
||||
# Buffer output for later use
|
||||
push(@sensors, $_);
|
||||
# CPU full output must have either voltage or fan data
|
||||
my ($cpu_volt) = $_ =~ /(?|in[\d+]\s*:\s+([\+\-0-9\.]+)\s+V|cpu\s+core\s+voltage\s*:\s+([0-9\.]+)\s+V)/i;
|
||||
my ($cpu_volt) = $_ =~ /(?|in\d+\s*:\s+([\+\-0-9\.]+)\s+V|cpu\s+core\s+voltage\s*:\s+([0-9\.]+)\s+V)/i;
|
||||
# CPU fans should be always labeled as 'cpu fan' or 'cpu_fan' or 'cpufan'
|
||||
# and/or 'cpu fan 1', 'cpu_fan1', 'cpufan1', 'cpu_fan 2', 'cpu_fan2',
|
||||
# 'cpufan2' etc.
|
||||
@@ -535,7 +543,7 @@ if (&has_command("sensors")) {
|
||||
|
||||
# AMD CPU Thermisters #1714
|
||||
if ($cpu && /thermistor\s+[\d]+:\s+[+-]([\d]+)/i) {
|
||||
my $temp = int($1);
|
||||
my $temp = $ceil->($1);
|
||||
push(@cpu_thermisters,
|
||||
{ 'core' => scalar(@cpu_thermisters) + 1,
|
||||
'temp' => $temp
|
||||
@@ -552,13 +560,13 @@ if (&has_command("sensors")) {
|
||||
# Common CPU multi
|
||||
if (/Core\s+(\d+):\s+([\+\-][0-9\.]+)/) {
|
||||
|
||||
# Prioritise package core temperature
|
||||
# Prioritize package core temperature
|
||||
# data over motherboard but keep fans
|
||||
@cpu = (), $cpu_aux++
|
||||
if ($cpu_aux & 1 && grep { $_->{'core'} eq $1 } @cpu);
|
||||
push(@cpu,
|
||||
{ 'core' => $1,
|
||||
'temp' => int($2)
|
||||
'temp' => $ceil->($2)
|
||||
});
|
||||
}
|
||||
|
||||
@@ -566,7 +574,7 @@ if (&has_command("sensors")) {
|
||||
elsif (/CPU:\s+([\+\-][0-9\.]+)/) {
|
||||
push(@cpu,
|
||||
{ 'core' => 0,
|
||||
'temp' => int($1)
|
||||
'temp' => $ceil->($1)
|
||||
});
|
||||
}
|
||||
}
|
||||
@@ -588,7 +596,7 @@ if (&has_command("sensors")) {
|
||||
if (/temp(\d+):\s+([\+][0-9\.]+).*?[Cc]\s+.*?[=+].*?\)/) {
|
||||
push(@cpu,
|
||||
{ 'core' => (int($1) - 1),
|
||||
'temp' => int($2)
|
||||
'temp' => $ceil->($2)
|
||||
});
|
||||
}
|
||||
|
||||
@@ -597,7 +605,7 @@ if (&has_command("sensors")) {
|
||||
/(cpu\s+temperature)\s*:\s+([\+][0-9\.]+).*?[Cc]/i) {
|
||||
push(@cpu,
|
||||
{ 'core' => 0,
|
||||
'temp' => int($2)
|
||||
'temp' => $ceil->($2)
|
||||
});
|
||||
}
|
||||
}
|
||||
@@ -606,8 +614,8 @@ if (&has_command("sensors")) {
|
||||
elsif ($cpu_broadcom) {
|
||||
if (/temp(\d+):\s+([\+\-][0-9\.]+)/) {
|
||||
push(@cpu,
|
||||
{ 'core' => $1,
|
||||
'temp' => int($2)
|
||||
{ 'core' => int($1),
|
||||
'temp' => $ceil->($2)
|
||||
});
|
||||
$cpu_broadcoms++;
|
||||
}
|
||||
@@ -615,7 +623,7 @@ if (&has_command("sensors")) {
|
||||
$cpu_unnamed++;
|
||||
push(@cpu,
|
||||
{ 'core' => $cpu_unnamed,
|
||||
'temp' => int($2)
|
||||
'temp' => $ceil->($2)
|
||||
});
|
||||
$cpu_broadcoms++;
|
||||
}
|
||||
@@ -628,15 +636,15 @@ if (&has_command("sensors")) {
|
||||
if (/Tdie:\s+([\+\-][0-9\.]+)/) {
|
||||
push(@cpu,
|
||||
{ 'core' => 0,
|
||||
'temp' => int($1),
|
||||
'temp' => $ceil->($1),
|
||||
});
|
||||
}
|
||||
|
||||
# Like in #1481 #1484
|
||||
elsif (/temp(\d+):\s+([\+\-][0-9\.]+).*?[Cc]\s+.*?[=+].*?\)/) {
|
||||
push(@cpu,
|
||||
{ 'core' => (int($1) - 1),
|
||||
'temp' => int($2),
|
||||
{ 'core' => ($ceil->($1) - 1),
|
||||
'temp' => $ceil->($2),
|
||||
});
|
||||
}
|
||||
|
||||
@@ -644,7 +652,7 @@ if (&has_command("sensors")) {
|
||||
elsif (/Tctl:\s*([\+\-][0-9\.]+)/) {
|
||||
push(@cpu,
|
||||
{ 'core' => 0,
|
||||
'temp' => int($1),
|
||||
'temp' => $ceil->($1),
|
||||
});
|
||||
}
|
||||
}
|
||||
@@ -690,6 +698,58 @@ if (!@fans && @cpu && @fans_all &&
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
# Fall back logic for CPU temperature and fans spread over multiple
|
||||
# devices like Raspberry Pi #2517 and #2539
|
||||
if (@cpu || !@fans) {
|
||||
# - Look for least two ISA voltage rails anywhere
|
||||
# - See a CPU temp under cpu_thermal
|
||||
# - Optionally grab a fan RPM under pwmfan-isa-*
|
||||
my $can_fallback =
|
||||
(!@cpu && (grep { /^\s*cpu_thermal/i } @sensors)) ||
|
||||
(@cpu && !@fans && (grep { /^\s*pwmfan-isa-/i } @sensors));
|
||||
return (\@cpu, \@fans) if (!$can_fallback);
|
||||
my ($chip, $bus); # isa|pci|platform|virtual
|
||||
my $isa_volt;
|
||||
my ($cpu_temp, $fan_rpm);
|
||||
for (@sensors) {
|
||||
# Chip header
|
||||
if (/^([A-Za-z0-9_+\-]+)-(isa|pci|platform|virtual)-[\w:]+\s*$/) {
|
||||
$chip = lc $1;
|
||||
$bus = lc $2;
|
||||
next;
|
||||
}
|
||||
|
||||
# Count real voltage rails
|
||||
if (defined $bus && $bus eq 'isa' &&
|
||||
/\bin\d+\s*:\s*([+\-]?[0-9]+(?:\.[0-9]+)?)\s*V\b/i) {
|
||||
$isa_volt++;
|
||||
next;
|
||||
}
|
||||
|
||||
# CPU temperature
|
||||
if (defined $chip && $chip =~ /^cpu_thermal/i &&
|
||||
/\b(?:CPU(?:\s*Temp)?|temp\d+)\s*:\s*([+\-]?[0-9]+(?:\.[0-9]+)?)\s*°?C\b/i) {
|
||||
$cpu_temp //= $1;
|
||||
next;
|
||||
}
|
||||
|
||||
# Fan RPM
|
||||
if (defined $chip && $chip =~ /^pwmfan/i &&
|
||||
/\b(?:cpu[_ ]?fan(?:\s*\d+)?|fan\d+)\s*:\s*(\d+)\s*rpm\b/i) {
|
||||
my $rpm = $1 + 0;
|
||||
$fan_rpm = $rpm if (!$fan_rpm || $rpm > $fan_rpm);
|
||||
next;
|
||||
}
|
||||
}
|
||||
|
||||
# Update only what's missing
|
||||
push(@cpu, { 'core' => 1, 'temp' => $ceil->($cpu_temp) })
|
||||
if (!@cpu && defined $cpu_temp && $isa_volt >= 2);
|
||||
push(@fans, { 'fan' => 1, 'rpm' => $fan_rpm })
|
||||
if (!@fans && defined $fan_rpm);
|
||||
}
|
||||
|
||||
return (\@cpu, \@fans);
|
||||
}
|
||||
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user