Compare commits

..

96 Commits
1.910 ... 1.930

Author SHA1 Message Date
Jamie Cameron
9a0f3c0f73 Fix readme file path 2019-08-17 17:21:31 -07:00
Jamie Cameron
e89ffcfa69 This script is in the root directory 2019-08-17 16:44:54 -07:00
Jamie Cameron
c98d49b198 New version bump 2019-08-17 15:39:17 -07:00
Jamie Cameron
eaf74d1385 Merge pull request #1087 from chrisstaite/master
Freeze and thaw zone when re-signing.
2019-08-11 22:41:02 -07:00
Jamie Cameron
57cfc150dd Merge branch 'master' of github.com:webmin/webmin 2019-08-11 16:10:17 -07:00
Jamie Cameron
ab0c84eed5 Support noprefixroute option https://www.virtualmin.com/node/66738 2019-08-11 16:09:40 -07:00
Ilia Rostovtsev
d3d1cc1737 Fix typo 2019-08-11 17:15:16 +03:00
Ilia Rostovtsev
2a0fe13317 Prevent reflected XSS by escaping path (coming from user) 2019-08-11 17:12:05 +03:00
Jamie Cameron
1e2545b06e Call footer after referer error 2019-08-10 16:27:27 -07:00
Jamie Cameron
3ef0e979d6 Never use theme for referrer check error, to limit the attack surface 2019-08-10 16:26:02 -07:00
Jamie Cameron
1feaa18d99 Prevent a malicious request from including an XSS in the x-forwarded-for header 2019-08-10 16:16:01 -07:00
Jamie Cameron
882c8152e5 Merge branch 'master' of github.com:webmin/webmin 2019-08-10 16:13:59 -07:00
Jamie Cameron
6230f9e9fc Just in case IP contains special characters 2019-08-10 16:12:55 -07:00
Ilia Rostovtsev
55cfbd140c Fix HTML to avoid undesirable nested forms in output 2019-08-10 22:33:51 +03:00
Chris
47a1013472 Freeze and thaw zone when re-signing. 2019-08-06 23:03:23 +01:00
Jamie Cameron
1eecef7ab9 MySQL vars like tmpdir need quoting 2019-08-04 15:09:28 -07:00
Jamie Cameron
771a4a413c Fix double-slashes 2019-08-04 15:05:51 -07:00
Jamie Cameron
cdac858567 Add unzip as a dependency f0a190276c 2019-08-04 12:23:21 -07:00
Jamie Cameron
332d71dcd6 Fix spaces in public key 2019-08-04 12:18:06 -07:00
Jamie Cameron
df8a43fb4b Object names cannot contact special characters 2019-08-03 22:41:37 -07:00
Jamie Cameron
8cf71f5b3a Only hide SSL option for sites definitely on port 80 https://github.com/webmin/webmin/issues/1085 2019-08-03 21:11:14 -07:00
Jamie Cameron
0da2af51c6 Reject null bytes early https://github.com/webmin/webmin/issues/945 2019-08-03 11:15:17 -07:00
Jamie Cameron
f0a190276c Add debs used by file manager 2019-08-03 10:54:21 -07:00
Jamie Cameron
e581097113 Show start time nicely formatted https://github.com/authentic-theme/authentic-theme/issues/1387 2019-07-30 23:05:07 -07:00
Jamie Cameron
c6dedff679 Translation updates 2019-07-28 18:00:54 -07:00
Jamie Cameron
8b4b053222 Fix version bump 2019-07-23 23:01:22 -07:00
Jamie Cameron
9635f6a744 New version bump 2019-07-23 22:54:48 -07:00
Jamie Cameron
fd265242d1 Records with ; need to be quoted https://www.virtualmin.com/node/66527 2019-07-21 22:51:45 -07:00
Jamie Cameron
8d874344a1 Use a consistent certificate name https://www.virtualmin.com/node/65664 2019-07-15 18:54:45 -07:00
Ilia Rostovtsev
cbe670e664 Fix to properly test if reboot is required
Current version of 'needs-restarting' command only has '-r' switch on CentOS 7 distros. What is worse, for latest RHEL versions (like Fedora), this command dropped '-r' switch, which makes impossible making it easy to determine if reboot is required. Any version of this command on CentOS 6 or Fedora Server, would return false positive output. The only way to test, if new kernel was installed, is to compare currently running kernel, with latest installed (excluding custom) kernel, along with latest reboot time and latest kernel install time.

https://sourceforge.net/p/webadmin/bugs/5280/
https://github.com/authentic-theme/authentic-theme/issues/1381
2019-07-12 18:50:51 +03:00
Ilia Rostovtsev
090ed9f1d8 Update CHANGELOG.md 2019-07-06 19:39:32 +03:00
Jamie Cameron
b1349bfc27 New version bump 2019-07-03 02:06:55 -07:00
Jamie Cameron
1b1579ad1b Allow commenting out of hosts file entries 2019-07-03 01:35:33 -07:00
Jamie Cameron
9d54424523 Add missing string 2019-07-01 01:51:10 -07:00
Jamie Cameron
aac36ae5fc New feature log 2019-06-30 19:43:05 -07:00
Jamie Cameron
6aca4b6fd3 Monitor type for init scripts 2019-06-30 18:35:07 -07:00
Jamie Cameron
031aded040 API for listing action names generically 2019-06-30 18:33:36 -07:00
Jamie Cameron
3f73bd8f1c Use single command to get status 2019-06-30 17:22:10 -07:00
Jamie Cameron
ef4213df55 Handle case where some paths are listed twice https://github.com/Real-Gecko/Filemin/issues/144 2019-06-30 16:04:46 -07:00
Jamie Cameron
e0c2b84913 Merge branch 'master' of github.com:webmin/webmin 2019-06-23 18:02:53 -07:00
Ilia Rostovtsev
b79d78a9ba Don't perform such redirects
It not only breaks Authentic Theme (and would break any SPA theme) but also doesn't let user to see output after reporting spam/ham.
2019-06-21 21:06:48 +03:00
Jamie Cameron
bf3e179429 run-parts only runs executable alpha-numeric files https://github.com/authentic-theme/authentic-theme/issues/1339 2019-06-16 18:35:55 -07:00
Jamie Cameron
3efa74f29a Properly escape packages to update 2019-06-11 11:33:12 -07:00
Jamie Cameron
ffc08b399a Merge branch 'master' of github.com:webmin/webmin 2019-06-08 16:18:27 -07:00
Jamie Cameron
7b958daef9 Don't show low disk space on CDs 2019-06-08 16:17:54 -07:00
Ilia Rostovtsev
9dc50476ba Update LICENCE 2019-06-04 19:02:06 +03:00
Ilia Rostovtsev
0df56f2896 Delete LICENSE 2019-06-04 19:01:47 +03:00
Ilia Rostovtsev
9a4d7c400a Create LICENSE 2019-06-04 19:00:50 +03:00
Ilia Rostovtsev
382d8d1033 Update README.md 2019-06-04 18:57:07 +03:00
Ilia Rostovtsev
017972b8e7 Update LICENCE 2019-06-04 18:56:48 +03:00
Ilia Rostovtsev
49e5e7ef43 Create CHANGELOG.md 2019-06-04 18:49:08 +03:00
Ilia Rostovtsev
4655b89dd2 Rename README to README.md 2019-06-04 18:48:06 +03:00
Ilia Rostovtsev
cf86d9794f Update README 2019-06-04 18:47:27 +03:00
Jamie Cameron
6ed15902f1 Catalan update 2019-06-02 23:22:28 -07:00
Jamie Cameron
c8bc89976d Catalan update 2019-06-02 23:19:24 -07:00
Jamie Cameron
a2d31aa7a4 Fix locking function 2019-06-01 18:24:05 -07:00
Jamie Cameron
7b4be20934 Break out of infinite loop in malformed procmail config https://sourceforge.net/p/webadmin/usermin-bugs/473/ 2019-06-01 17:14:21 -07:00
Ilia Rostovtsev
a7cc1f1d90 Fix to check if element exists 2019-05-31 12:07:08 +03:00
Ilia Rostovtsev
0cb86127e8 Print buttons consistently 2019-05-28 13:01:06 +03:00
Ilia Rostovtsev
f293c3199e Print buttons consistently 2019-05-28 12:37:51 +03:00
Jamie Cameron
d52b4a440f Dev version bump 2019-05-27 21:37:33 -07:00
Jamie Cameron
cd9c15b996 Fix encoding 2019-05-27 19:18:39 -07:00
Jamie Cameron
85803b5778 Merge branch 'master' of github.com:webmin/webmin 2019-05-27 19:15:54 -07:00
Jamie Cameron
5414422319 Fix encoding 2019-05-27 19:15:46 -07:00
Ilia Rostovtsev
8e11dfccfb Add pointer 2019-05-27 16:09:26 +03:00
Jamie Cameron
13939b4475 Sometimes -P is a valid flag, but not the flag we want 2019-05-26 16:59:58 -07:00
Jamie Cameron
7249e646e8 Allow en* interface names https://github.com/webmin/webmin/issues/930 2019-05-26 09:37:02 -07:00
Jamie Cameron
e2a2334611 Merge branch 'master' of github.com:webmin/webmin 2019-05-25 12:53:19 -07:00
Jamie Cameron
f71a66e60b Fix config option to use custom ipv6 save file https://github.com/webmin/webmin/issues/1062 2019-05-25 12:53:13 -07:00
Ilia Rostovtsev
a60ffc8372 Don't use monospace font for SELinux attrs 2019-05-23 13:40:50 +03:00
Jamie Cameron
e0ae7426cf German translation updates from Raymont Vetter 2019-05-19 18:26:41 -07:00
Jamie Cameron
de24b412d0 Fix webprefix removal to take / into account https://github.com/webmin/webmin/issues/1051 2019-05-19 18:14:09 -07:00
Jamie Cameron
909cb57bf2 Use needs-restarting command to check if a reboot is needed 2019-05-19 17:45:07 -07:00
Jamie Cameron
76de50edf5 Merge branch 'master' of github.com:webmin/webmin 2019-05-19 17:28:53 -07:00
Jamie Cameron
8f851e5cc6 Handle case where YAML already contains network: block https://github.com/webmin/webmin/issues/930 2019-05-19 17:28:33 -07:00
Ilia Rostovtsev
accbcfd4d4 Fix typo 2019-05-19 13:01:06 +03:00
Jamie Cameron
2ab5ff1b7e Small fix to previous patch 2019-05-18 18:00:37 -07:00
Jamie Cameron
81f9d1239b Handle another ip addr output line https://www.virtualmin.com/node/65844 2019-05-18 17:57:55 -07:00
Jamie Cameron
017fdeb690 Function to list themes that can be used 2019-05-18 17:30:47 -07:00
Jamie Cameron
d109e256c8 Permission fix 2019-05-18 17:29:50 -07:00
Jamie Cameron
c3275fd05a Respect show next run time 2019-05-18 11:00:09 -07:00
Ilia Rostovtsev
aaeab928b0 Print number of cols to prevent breaking layout 2019-05-16 16:10:10 +03:00
Ilia Rostovtsev
7dc35af03b Fix to print less information while extracting 2019-05-15 14:09:21 +03:00
Ilia Rostovtsev
0f3521b995 Check for -UU option explicitly 2019-05-15 14:02:21 +03:00
Ilia Rostovtsev
64e797ea2e Non GNU unzip don't have -UU switch 2019-05-15 12:29:40 +03:00
Ilia Rostovtsev
9a57de5d1c Fix extracting with correct bytes in file names
6aa3d5306a
2019-05-14 22:56:32 +03:00
Jamie Cameron
828fd37c82 Gracefully handle case where firewalld isn't running or active rules can't be fetched https://www.virtualmin.com/node/65795 2019-05-13 20:12:29 -07:00
Jamie Cameron
a88a9de113 Merge branch 'master' of github.com:webmin/webmin 2019-05-12 16:33:51 -07:00
Jamie Cameron
90b759e644 Handle a zero-sized step https://github.com/authentic-theme/authentic-theme/issues/1339 2019-05-12 16:33:05 -07:00
Jamie Cameron
5b8a3fb3bf Merge pull request #1055 from t-offline/patch-1
Update update_sched.cgi
2019-05-12 13:33:55 -07:00
Jamie Cameron
5794174f05 Handle word 'dynamic' in ip addr output https://www.virtualmin.com/node/65844 2019-05-12 11:42:28 -07:00
Jamie Cameron
baabbfd4ab Fix perl warning https://sourceforge.net/p/webadmin/bugs/5259/ 2019-05-12 11:27:03 -07:00
Christian Pacher
4565a3ff4d Update update_sched.cgi
Fix for:
Failed to update modules : You must enter an email address if only showing what would be updated.
Usermin Configuration ->Upgrade Usermin -> Scheduled update
2019-05-10 17:34:01 +02:00
Jamie Cameron
805ae75c20 Merge branch 'master' of github.com:webmin/webmin 2019-05-08 20:42:52 -07:00
Jamie Cameron
794dab045a Don't try to compute time for a reboot job https://github.com/authentic-theme/authentic-theme/issues/13390 2019-05-08 20:40:48 -07:00
Ilia Rostovtsev
f6c2f11dc3 Fix Illegal division by zero error 2019-05-07 00:09:12 +03:00
98 changed files with 719 additions and 335 deletions

37
CHANGELOG.md Normal file
View File

@@ -0,0 +1,37 @@
## Changelog
#### Version 1.920 (July 04, 2019)
This update includes the latest theme version, translation updates, the ability to disable hosts file entries, easier monitoring of bootup actions, and a bunch of bugfixes.
#### Version 1.910 (May 09, 2019)
This release includes theme and translation updates, a page for editing package repositories, cron and status module improvements, and a bunch of other bugfixes and small improvements.
#### Version 1.900 (November 19, 2018)
This version includes wildcard Let's Encrypt SSL cert support, theme and translation updates, support for announcements to Webmin users, and a bunch of other bugfixes and small improvements.
#### Version 1.890 (July 19, 2018)
This version includes Ubuntu 18 network config support, translation updates, multiple theme and file manager updates, BIND freeze/thaw support, support for more Linux distributuions, and a bunch of other bugfixes and small improvements.
#### Version 1.880 (March 16, 2018)
This version includes German, Catalan and Bulgarian translation updates, a new version of the Authentic Theme, support for directly editing the MySQL and PostgreSQL config files, Let's Encrypt bugfixes, more control over system status email notifications, and more.
#### Version 1.870 (December 08, 2018)
This release includes many translation updates, fixes for Let's Encrypt support, UI cleanups, and most importantly a new major version of the Authentic Theme.
#### Version 1.860 (October 10, 2017)
This release includes Let's Encrypt DNS fixes, Majordomo module improvements, XSS security bugfixes, translation updates, a new version of the theme, and more.
#### Version 1.850 (June 28, 2017)
This release includes Let's Encrypt fixes, Majordomo module improvements, FirewallD forwarding support, translation updates, an update to the Authentic theme, and a bunch of other bugfixes.
#### Version 1.840 (May 08, 2017)
This major release includes a large theme update, XSS security fixes, per-domain SSL cert support, thin-provisioned LVM support, Let's Encrypt improvements, translation updates, and the usual gang of bugfixes. Also available is Usermin 1.710, which contains many of the same updates.
#### Version 1.830 (December 29, 2016)
This is mainly a bugfix release, but also contains some translation updates, the latest version of the Authentic Theme, fixes related to Let's Encrypt and LDAP client support, and SElinux and file attribute support in the file manager.
#### Version 1.820 (October 3, 2016)
This updated includes a bunch of bugfixes (particularly in the BIND module), translation updates, the ability to download a MySQL backup, Let's Encrypt improvements, and more.
#### Version 1.810 (August 8, 2016)
This updated includes the latest Authentic Theme, a new IPv6 Firewall module for Linux, Webmin actions logging improvements, Let's Encrypt API fixes and a bunch of other small updates and bugfixes.

53
LICENCE
View File

@@ -1,29 +1,30 @@
---------------------------------------------------------
Copyright (c) Jamie Cameron
All rights reserved.
BSD 3-Clause License
Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions
are met:
1. Redistributions of source code must retain the above copyright
notice, this list of conditions and the following disclaimer.
2. Redistributions in binary form must reproduce the above copyright
notice, this list of conditions and the following disclaimer in the
documentation and/or other materials provided with the distribution.
3. Neither the name of the developer nor the names of contributors
may be used to endorse or promote products derived from this software
without specific prior written permission.
Copyright (c) Jamie Cameron
THIS SOFTWARE IS PROVIDED BY THE DEVELOPER ``AS IS'' AND
ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
ARE DISCLAIMED. IN NO EVENT SHALL THE DEVELOPER OR CONTRIBUTORS BE LIABLE
FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
SUCH DAMAGE.
---------------------------------------------------------
All rights reserved.
Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions are met:
1. Redistributions of source code must retain the above copyright notice, this
list of conditions and the following disclaimer.
2. Redistributions in binary form must reproduce the above copyright notice,
this list of conditions and the following disclaimer in the documentation
and/or other materials provided with the distribution.
3. Neither the name of the copyright holder nor the names of its
contributors may be used to endorse or promote products derived from
this software without specific prior written permission.
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.

56
README
View File

@@ -1,56 +0,0 @@
Webmin Version 1.910
--------------------
Webmin is a web-based interface for system administration for Unix.
Using any browser that supports tables and forms, you can setup user
accounts, Apache, internet services, DNS, file sharing and so on.
Webmin consists of a simple web server, and a number of CGI programs
which directly update system files like /etc/inetd.conf and /etc/passwd.
The web server and all CGI programs are written in Perl version 5, and use
only the standard perl modules.
Webmin can be installed in two different ways :
1) By just running the setup.sh script in the same directory as this README
file, with no arguments. You will be asked a series of questions such as
the configuration directory, your chosen login name and password, and
possibly your operating system. For questions where a default is shown
in square brackets, you can just hit enter to accept the default (which
is usually correct).
If the configuration directory you enter is the same as that used by
a previous install of Webmin, it will be automatically upgraded with all
configurable settings preserved.
This will set up Webmin to run directly from this directory. After running
setup.sh, do not delete the directory as it contains all the scripts and
programs that will be used by Webmin when it is running. Unlike in the second
installation method, the Webmin scripts do not get copied to another
location when installing.
2) By running the setup.sh script in this directory, but with a command-line
argument such as /usr/local/webmin . When a directory like this is provided,
Webmin's scripts will be copied to the chosen directory and it will be
configured to run from that location.
The exact same questions will be asked by setup.sh when it is run with
a directory argument, and upgrading will work in the same way. If you
are upgrading an old install, you should enter the same directory argument
so that the new files overwrite the old in order to save disk space.
After Webmin has been installed to a specific directory using this method,
the directory extracted from the tar.gz file can be safely deleted.
If you are installing Webmin on a Windows system, you must run the command
perl setup.pl instead, as shell scripts will not typically run on a Windows
system. The Windows version depends on several programs and modules that may
not be part of the standard distribution. You will need the process.exe
commmand, the sc.exe command and the Win32::Daemon Perl module.
For more information, see http://www.webmin.com/
For documentation, see http://doxfer.webmin.com/
Jamie Cameron
jcameron@webmin.com

53
README.md Normal file
View File

@@ -0,0 +1,53 @@
## Contents
* [Changelog](https://github.com/webmin/webmin/blob/master/CHANGELOG.md)
* [About](#about)
* [Installation](#installation)[<img src="https://github.com/webmin-devel/webmin/blob/master/media/download-23x14-stable.png?raw=true" title="Stable Versions">](http://webmin.com/download.html)[<img src="https://github.com/webmin-devel/webmin/blob/master/media/download-23x14-devel.png?raw=true" title="Development Versions">](http://webmin.com/devel.html)
* [Documentation](#documentation)
* [Development](#development)
* [License](#license)
## About
**Webmin** is a web-based system administration tool for Unix-like servers, and services with over _1,000,000_ installations worldwide. Using it, it is possible to configure operating system internals, such as users, disk quotas, services or configuration files, as well as modify, and control open-source apps, such as BIND DNS Server, Apache HTTP Server, PHP, MySQL, and [many more](https://doxfer.webmin.com/Webmin/Introduction).
![](https://github.com/webmin-devel/webmin/blob/master/media/webmin-demo-basic.gif?raw=true)
Usability can be expanded by installing modules, which can be custom made. Aside from this, there are two other major projects that extend its functionality:
* [Virtualmin](https://www.virtualmin.com) is a powerful, flexible, most popular, and most comprehensive web-hosting control panel for Linux, and BSD systems, with over _100,000_ installations worldwide. It is available in an open-source community-supported version, and a more feature-filled version with premium support;
* [Usermin](https://github.com/webmin/usermin) presents and controls a subset of user-centred features, rather than administrator-level tasks.
Webmin includes _116_ [standard modules](https://doxfer.webmin.com/Webmin/Webmin_Modules), and there are at least as many third-party modules.
### Requirements
Perl 5.10 or higher.
## Installation
Webmin can be installed in two different ways:
1. By downloading a pre-built package, available for different distributions (CentOS, Fedora, SuSE, Mandriva, Debian, Ubuntu, Solaris and [other](http://www.webmin.com/support.html)) from our [download page](http://webmin.com/download.html);
<kbd>Note: It is highly recommended to [add repository](https://doxfer.webmin.com/Webmin/Installation) to your system for having automatic updates.</kbd>
2. By downloading, extracting [source file](https://prdownloads.sourceforge.net/webadmin/webmin-1.930.tar.gz), and running [_setup.sh_](http://www.webmin.com/tgz.html) script, with no arguments, which will setup to run it directly from this directory, or with a command-line argument, such as targeted directory.
<kbd>Note: If you are installing Webmin [on Windows](http://www.webmin.com/windows.html) system, you must run the command `perl setup.pl` instead. The Windows version depends on several programs, and modules that may not be part of the standard distribution. You will need _process.exe_ commmand, _sc.exe_ command, and _Win32::Daemon_ Perl module.</kbd>
## Documentation
Complete set of documentation for Webmin and all of its modules can be found at out [Wiki page](https://doxfer.webmin.com/Webmin/Main_Page).
## Development
### Lead developer
* [Jamie Cameron](http://www.webmin.com/about.html) [![](https://github.com/webmin-devel/webmin/blob/master/media/linkedin-15x15.png?raw=true)](https://www.linkedin.com/in/jamiecameron2)
### Contributors
* [Joe Cooper](https://github.com/swelljoe)
* [Ilia Rostovtsev](https://github.com/rostovtsev)
* [Kay Marquardt](https://github.com/gnadelwartz)
* [Nawawi Jamili](https://github.com/nawawi) + [57 more..](https://github.com/webmin/webmin/graphs/contributors)
## License
Webmin is released under the [BSD License](https://github.com/webmin/webmin/blob/master/LICENCE).

View File

@@ -18,7 +18,7 @@ if ($in{'virt'} && $access{'types'} eq '*') {
"name" => $text{'virt_edit'},
"link" => "manual_form.cgi?virt=$in{'virt'}" };
}
if ($v->{'value'} =~ /:80/ && $v->{'value'} !~ /:443/) {
if ($v->{'value'} =~ /:80$/ || $v->{'value'} !~ /:/) {
# Hide SSL icon for non-SSL sites
$access_types{14} = 0;
}

View File

@@ -7,7 +7,7 @@ index_efiresys=Keine der unterst&#252;tzen Firewalls (IPtables, IPFW, IPFilter o
index_efiresys2=Das konfigurierte Firewall-System $1 wurde auf Ihrem System nicht gefunden. &#220;berpr&#252;fen Sie die <a href='$2'>Modulkonfiguration</a> um die richtige Firewall einzustellen.
index_efrom=Ung&#252;ltige(s) Startdatum und -zeit
index_ehost=Fehlender oder ung&#252;ltiger Host
index_ehour=Ung&#252;ltige Zeitangabe - Format JJJJ-MM-DD SS:MM
index_ehour=Ung&#252;ltige Zeitangabe - Format JJJJ-MM-TT SS:MM
index_eiptables=Warnung - Ihre IPtables-Konfiguration hat einen Fehler : $1. Das Einrichten der &#220;berwachung wird alle vorhandenen Regeln l&#246;schen!
index_elog=Die Datei $1 wird f&#252;r die Bandbreitenmessung benutzt und loggt derzeit Daten auf Ihrem Dateisystem. Benutzen Sie die <a href='$2'>Modulkonfiguration</a> um einen anderen Pfad einzustellen.
index_emod=Das Webminmodul $1 ist nicht installiert oder wird auf diesem System nicht unterst&#252;tzt. Ohne jenes Modul kann dieses Modul nicht arbeiten.

View File

@@ -38,7 +38,8 @@ if (@keyrecs) {
my ($keyrec) = grep { $_->{'values'}->[0] ==
($key->{'ksk'} ? 257 : 256) } @keyrecs;
my $keyline = join(" ", $keyrec->{'name'}, $keyrec->{'class'},
$keyrec->{'type'}, @{$keyrec->{'values'}});
$keyrec->{'type'},
join("", @{$keyrec->{'values'}}));
print &ui_hidden_start($text{'zonekey_expand'.$kt},
$kt, 0, "edit_zonekey.cgi?$in");
print $text{'zonekey_public'},"<br>\n";

View File

@@ -316,7 +316,7 @@ elsif (@zones && (!@views || !$config{'by_view'})) {
@{$ztree{$par}} = &unique(@{$ztree{$par}}, $ch);
}
}
print "<table>\n";
print "<table data-recursive_tree>\n";
&recursive_tree("");
print "</table>\n";
}

View File

@@ -863,7 +863,7 @@ else {
# All one one line
my @rv;
foreach my $v (@{$r->{'values'}}) {
push(@rv, $v =~ /\s/ ? "\"$v\"" : $v);
push(@rv, $v =~ /\s|;/ ? "\"$v\"" : $v);
}
return join(" ", @rv);
}

View File

@@ -67,7 +67,9 @@ foreach my $z (@zones) {
print STDERR " Age in days $old\n" if ($debug);
if ($old > $period) {
# Too old .. signing
before_editing($z);
my $err = &resign_dnssec_key($z);
after_editing($z);
if ($err) {
print STDERR " Re-signing of $z->{'name'} failed : $err\n";
$errcount++;

View File

@@ -1,6 +1,7 @@
#!/usr/local/bin/perl
# save_gen.cgi
# Save $generate records
use strict;
use warnings;
our (%access, %text, %in);
@@ -17,7 +18,7 @@ my $dom = $zone->{'name'};
my $file = $zone->{'file'};
if (!$in{'show'}) {
&lock_all_files();
&lock_file(&make_chroot(&absolute_path($zone->{'file'})));
&before_editing($zone);
}
my @recs = &read_zone_file($file, $dom);
@@ -118,7 +119,7 @@ for(my $i=0; defined($in{"type_$i"}); $i++) {
&bump_soa_record($file, \@recs);
&sign_dnssec_zone_if_key($zone, \@recs);
&after_editing($zone);
&unlock_all_files();
&unlock_file(&make_chroot(&absolute_path($zone->{'file'})));
&redirect("edit_master.cgi?zone=$in{'zone'}&view=$in{'view'}");
sub expand_mods

View File

@@ -431,7 +431,7 @@ else {
# For other record types, just save the lines
$in{'values'} =~ s/\r//g;
my @vlines = split(/\n/, $in{'values'});
$vals = join(" ",map { $_ =~ /^\S+$/ ? $_ : "\"$_\"" } @vlines);
$vals = join(" ",map { $_ =~ /\s|;/ ? "\"$_\"" : $_ } @vlines);
}
$fullname = &convert_to_absolute($in{'name'}, $in{'origin'});
if ($config{'short_names'}) {

View File

@@ -3,6 +3,7 @@ create_title=Erzeuge einen Cluster-Cron-Auftrag
delete_enone=Keine ausgew&#228;hlt
delete_err=Fehlgeschlagen Cluster-Cron-Auftr&#228;ge zu l&#246;schen
edit_all=&lt;Alle Hosts&gt;
edit_emissing=Cron-Job existiert nicht mehr!
edit_group=Mitglieder von $1
edit_servers=Auf Server ausf&#252;hren
edit_this=diesem Server
@@ -25,7 +26,7 @@ log_create_l=Cluster-Cron-Auftrag $2 f&#252;r $1 erzeugt
log_delete=Cluster-Cron-Auftrag f&#252;r $1 gel&#246;scht
log_delete_l=Cluster-Cron-Auftrag $2 f&#252;r $1 gel&#246;scht
log_deletes=$1 Cluster-Cron-Auftr&#228;ge gel&#246;scht
log_modify=Cluster-Cron-Auftrag f&#252;r $1 bearbeitet
log_modify=Cluster-Cron-Auftrag f&#252;r $1 bearbeitet
log_modify_l=Cluster-Cron-Auftrag $2 f&#252;r $1 bearbeitet
log_run=$1 ist auf $2 Servern ausgef&#252;hrt
log_run_l=$1 auf $2 ausgef&#252;hrt

View File

@@ -3,3 +3,4 @@ category=cluster
os_support=solaris *-linux hpux freebsd osf1 irix unixware openserver macos openbsd aix netbsd
depends=cron
longdesc=Create scheduled Cron jobs that run on multiple servers simultaneously.
desc_de=Cluster Cron-Jobs

View File

@@ -111,10 +111,10 @@ if (@icons < @hosts) {
"value=\"$text{'uedit_sync'}\"></td>\n";
}
print "</form><form action=\"delete_group.cgi\">\n";
print "</tr></table></form><p><form action=\"delete_group.cgi\">\n";
print "<input type=hidden name=group value=\"$ginfo{'group'}\">\n";
print "<td align=right><input type=submit value=\"$text{'delete'}\"></td> </tr>\n";
print "</form></table><p>\n";
print "<input type=submit value=\"$text{'delete'}\">\n";
print "</form><p>\n";
print &ui_hr();
print &ui_subheading($text{'uedit_hosts'});

View File

@@ -429,11 +429,11 @@ if (@icons < @hosts) {
"value=\"$text{'uedit_sync'}\"></td>\n";
}
print "</form><form action=\"delete_user.cgi\">\n";
print "</tr></table></form><p><form action=\"delete_user.cgi\">\n";
print "<input type=hidden name=user value=\"$uinfo{'user'}\">\n";
print "<td align=right><input type=submit ",
"value=\"$text{'delete'}\"></td> </tr>\n";
print "</form></table><p>\n";
print "<input type=submit ",
"value=\"$text{'delete'}\">\n";
print "</form><p>\n";
print &ui_hr();
print &ui_subheading($text{'uedit_hosts'});

View File

@@ -68,7 +68,7 @@ else {
print "<b>$text{'index_nohosts'}</b><p>\n";
}
$formno++;
print "<form action=add.cgi>\n";
print "<br><br><form action=add.cgi>\n";
print "<table width=100%><tr>\n";
@addservers = grep { !$gothost{$_->{'id'}} } @servers;
if (@addservers) {

View File

@@ -4,6 +4,7 @@ max_jobs=Nombre m
show_time=Mostra la planificació dels treballs,1,1-Sí,0-No
show_comment=Mostra els comentaris dels treballs,1,1-Sí,0-No
show_run=Mostra l'estat actual dels treballs,1,2-Sí&#44; i permet l'inici i l'aturada,1-Sí,0-No
show_next=Mostra-ho la propera vegada que s'executi cada treball,1,1-Sí,0-No
match_mode=Busca els processos dels treballs per,1,1-Només l'ordre,0-L'ordre i els arguments
match_user=Fes coincidir els noms d'usuaris en buscar processos de treballs,1,1-Sí,0-No
kill_subs=Mata els subprocessos en matar els treballs,1,1-Sí,0-No

View File

@@ -726,8 +726,9 @@ $dir = "$config{'run_parts_dir'}/$dir"
opendir(DIR, &translate_filename($dir));
local @rv = readdir(DIR);
closedir(DIR);
@rv = grep { !/^\./ } @rv;
@rv = grep { /^[a-zA-Z0-9\_\-]+$/ } @rv;
@rv = map { $dir."/".$_ } @rv;
@rv = grep { -x $_ } @rv;
return @rv;
}
@@ -813,8 +814,10 @@ change_special_mode(form, 0);
function change_special_mode(form, special)
{
form.special_def[0].checked = special;
form.special_def[1].checked = !special;
if(form.special_def) {
form.special_def[0].checked = special;
form.special_def[1].checked = !special;
}
}
</script>
EOF
@@ -971,8 +974,10 @@ change_special_mode(form, 0);
function change_special_mode(form, special)
{
form.special_def[0].checked = special;
form.special_def[1].checked = !special;
if(form.special_def) {
form.special_def[0].checked = special;
form.special_def[1].checked = !special;
}
}
</script>
EOF
@@ -1672,6 +1677,9 @@ elsif ($job->{'special'} eq 'yearly') {
'months' => 1,
'weekdays' => '*' };
}
elsif ($job->{'special'} eq 'reboot') {
return undef;
}
my @mins = &cron_all_ranges($job->{'mins'}, 0, 59);
my @hours = &cron_all_ranges($job->{'hours'}, 0, 23);
my @days = &cron_all_ranges($job->{'days'}, 1, 31);
@@ -1714,11 +1722,13 @@ if ($w eq "*") {
}
elsif ($w =~ /^\*\/(\d+)$/) {
# only every Nth
for($j=$min; $j<=$max; $j+=$1) { $inuse{$j}++; }
my $step = $1 || 1;
for($j=$min; $j<=$max; $j+=$step) { $inuse{$j}++; }
}
elsif ($w =~ /^(\d+)-(\d+)\/(\d+)$/) {
# only every Nth of some range
for($j=$1; $j<=$2; $j+=$3) { $inuse{int($j)}++; }
my $step = $3 || 1;
for($j=$1; $j<=$2; $j+=$step) { $inuse{int($j)}++; }
}
elsif ($w =~ /^(\d+)-(\d+)$/) {
# all of some range

View File

@@ -62,7 +62,7 @@ print &ui_table_row($text{'edit_active'},
&ui_yesno_radio("active", $job->{'active'} ? 1 : 0));
# Next run time
if (!$in{'new'}) {
if (!$in{'new'} && ($config{'show_next'} || $userconfig{'show_next'})) {
$n = &next_run($job);
print &ui_table_row($text{'edit_next'},
$n ? &make_date($n) : "<i>$text{'index_nunknown'}</i>");

View File

@@ -14,6 +14,8 @@ index_manual=Edita manualment els treballs cron.
index_return=a la llista de cron
index_env=Variable d'entorn
index_move=Desplaça
index_next=Propera execució
index_nunknown=Desconeguda
index_run=En execució
index_ecmd=No s'ha trobat l'ordre $1 en gestionar les configuracions d'usuari de Cron. Pot ser que Cron no estigui instal·lat en aquest sistema?
index_esingle=El fitxer $1 que llista els treballs Cron no existeix. Pot ser que Cron no estigui instal·lat en aquest sistema?
@@ -36,6 +38,7 @@ edit_ecannot=No tens perm
edit_details=Detalls del treball
edit_user=Executa el treball cron com
edit_active=Activa
edit_next=Hora de la ropera execució
edit_commands=Ordres
edit_command=Ordre
edit_comment=Descripció

View File

@@ -40,6 +40,7 @@ edit_hours=
edit_input=Adatbevitel a parancshoz
edit_mins=Percek
edit_months=Hónapok
edit_next=Következő futtatás ideje
edit_range=Dátum határok a futtatáshoz
edit_return=cron munka
edit_run=Futtatás most
@@ -85,15 +86,21 @@ index_create=
index_delete=Kiválasztott munka törlése
index_disable=Kiválasztott munka letiltása
index_ecmd=A $1 Cron parancsot amit a felhasználónak állítani szeretne nem találom. Talán a Cron nincs telepítve a rendszerbe?
index_econfigcheck=A Cron munkákat nem tudjuk kezelni az ön rendszerén, mivel a modul beállítások nem megfelelőek: $1
index_ecreate=Új környezeti változó létrehozása
index_ecrondir=A Cron munka könyvtár ( $1 ) nem létezik. Előfordulhat, hogy a modul beállításai nem pontosak vagy a Cron nincs telepítve?
index_ecrondir_create=Megpróbálja létrehozni $1 könyvtárat a munkáknak?
index_enable=Kiválasztott munka engedélyezése
index_env=Környezeti változó
index_esearch=Nem található a keresett $1
index_esingle=Ez a fájl $1 a Cron munkák listájában nem létezik. Talán a Cron nincs telepítve a rendszerbe?
index_manual=Beállítások kézi szerkesztése.
index_move=Mozgatás
index_next=Következő futtatás
index_none=Ezen a rendszeren nincsenek cron munkák
index_none2=Jelenleg nincs olyan crom munka, amihez Önnek joga lenne.
index_none3=Önnek nincs semmilyen cron munkája jelenleg.
index_nunknown=Ismeretlen
index_ok=Keresés
index_reset=Keresés visszaállítása.
index_return=a cron listához
@@ -101,6 +108,7 @@ index_run=Fut?
index_search=Időzített feladat (Cron munka) keresése:
index_searchres=Egyező Cron munkák: $1 ..
index_title=Időzitett futtatások (Cron munkák)
index_toomany2=Túl sok megjelenítendő munka. Használja a keresési mezőt a lista szűrésére!
index_user=Felhasználó
index_when=Futtatás megadott időben
kill_ecannot=Önnek nincs joga megszakítani ezt a munkát
@@ -134,6 +142,12 @@ log_kill_l="$2" Cron munka megszak
log_modify=Cron munka módosítása $1 -nek
log_modify_l="$2" Cron munka módosítása $1-nek
log_move=Cron munka mozgatása $1 -nak
manual_ecannot=Nincs engedélye kézzel szerkeszteni a Cron munkákat
manual_edit=Szerkesztendő Cron állomány:
manual_editing=Használja az alábbi szövegdobozt a $1 Cron munkáinak szerkesztésére. Legyen óvatos, a Webmin nem végez rajta ellenőrzést!
manual_efile=A kiválasztott állomány érvénytelen!
manual_ok=Szerkesztés
manual_title=Cron munkák kézi szerkesztése
move_err=Nem lehet mozgatni a Cron munkát
move_etype=Ezt a munkát nem lehet mozgatni
range_all=Fussán bármilyen dátumnál
@@ -145,19 +159,24 @@ save_eallow=A(z) '$1' felhaszn
save_ecannot=Önnek nincs jogosultsága létrehozni '$1' cron munkáit.
save_ecannot2=Önnek nincs joga cron munkákat létrehozni
save_ecmd=Ön nem adott meg futtatandó parancsot.
save_eidx=A Cron állomány sikeresen mentésre került, azonban nem került futtatásra mivel nem találta meg a rendszer!
save_enone=Semmilyen $1 nem lett kiválasztva végrehajtáshoz.
save_err=A cron munka elmentése nem sikerült.
save_euser=Egy felhasználót muszáj kiválasztani.
save_euser2=A $1 felhasználó nem létezik
ucwhen_boot=Rendszerindításkor
ucwhen_cron=A cron időben $1
ucwhen_day=Minden nap $2:$1 időben
ucwhen_hour=Minden órában $1 óra után
ucwhen_interval=Minden $1 másodpercben
ucwhen_min=Minden percben
ucwhen_month=A $napokon minden hónapban $2:$1
ucwhen_weekday=Minden $3 -ban $2:$1 időben
when_boot=rendszerindításkor
when_cron=a cron időben $1
when_day=minden nap $2:$1 időben
when_hour=minden órában $1 után óránként
when_interval=minden $1 másodpercben
when_min=minden percben
when_month=a $3 napon minden hónapban $2:$1
when_weekday=minden $3 a $2:$1

View File

@@ -1 +1 @@
desc_fr=Tâches Cron
desc_fr=Tâches Cron

View File

@@ -40,9 +40,9 @@ index_horder1=Estructura de fitxers
index_horder2=Nom
index_horder3=Adreça del maquinari
index_horder4=Adreça IP
index_togroup=Grup
index_tosubnet=Subxarxa
index_toshared=Xarxa
index_togroup=Grup:
index_tosubnet=Subxarxa:
index_toshared=Xarxa:
index_ndisplay=Mostra les xarxes i subxarxes per:
index_norder0=Assignació
index_norder1=Estructura de fitxers

View File

@@ -22,7 +22,9 @@ elsif ($archive_type =~ /x-7z/) {
$cmd = "7z x ".quotemeta("$cwd/$in{'file'}")." -o" .quotemeta($cwd);
}
elsif ($archive_type =~ /\/zip/) {
$cmd = "unzip ".quotemeta("$cwd/$in{'file'}")." -d ".quotemeta($cwd);
my $unzip_out = `unzip --help`;
my $uu = ($unzip_out =~ /-UU/ ? '-UU' : undef);
$cmd = "unzip $uu -q -o ".quotemeta("$cwd/$in{'file'}")." -d ".quotemeta($cwd);
}
elsif ($archive_type =~ /\/x-rar|\/vnd\.rar/) {
$cmd = "unrar x -r -y ".quotemeta("$cwd/$in{'file'}").

View File

@@ -67,6 +67,7 @@ sub get_paths {
@allowed_paths = map { $_ eq '$HOME' ? @remote_user_info[7] : $_ }
@allowed_paths;
@allowed_paths = map { s/\$USER/$remote_user/g; $_ } @allowed_paths;
@allowed_paths = &unique(@allowed_paths);
if (scalar(@allowed_paths) == 1) {
$base = $allowed_paths[0];
} else {
@@ -75,6 +76,9 @@ sub get_paths {
}
@allowed_paths = map { &simplify_path($_) } &unique(@allowed_paths);
$path = $in{'path'} || '';
$html_escaped_path = html_escape($path);
$urlized_path = urlize($path);
$cwd = &simplify_path($base.$path);
# Work out max upload size
@@ -377,7 +381,7 @@ sub print_interface {
print &ui_checked_columns_row(\@row_data, "", "name", $vlink);
}
print ui_columns_end();
print &ui_hidden("path", $path),"\n";
print &ui_hidden("path", $urlized_path),"\n";
print &ui_form_end();
}

View File

@@ -54,7 +54,7 @@ unless (opendir ( DIR, $cwd )) {
my $delimiter = ( $setype ? '\n' : ',' );
my @searray =
map { [ split( /\s+/, $_, 2 ) ] } split( /$delimiter/, $output );
%secontext = map { $_->[1] => ($_->[0] eq "?" ? undef : ('<span data-attributes="x">' . $_->[0] . '</span>') ) } @searray;
%secontext = map { $_->[1] => ($_->[0] eq "?" ? undef : ('<span>' . $_->[0] . '</span>') ) } @searray;
}
# Get info about directory entries

View File

@@ -24,7 +24,7 @@ actions=Accions
size=Mida
owner_user=Usuari
owner_group=Grup
permissions=Permisos
permissions=Mode
selinux=Context de seguretat
attributes=Atributs
last_mod_time=Modificat

View File

@@ -27,7 +27,7 @@
<div class="form-group">
<label>$text{'new_folder_name'}</label>
<input id="name" name="name" type="text" class="form-control" data-placement="right" data-content="$text{'provide_folder_name'}" data-trigger="manual">
<input type='hidden' name='path' value='$path'>
<input type='hidden' name='path' value='$urlized_path'>
</div>
</form>
</div>
@@ -51,7 +51,7 @@
<div class="form-group">
<label>$text{'new_file_name'}</label>
<input name="name" type="text" class="form-control" data-placement="right" data-content="$text{'provide_file_name'}" data-trigger="manual">
<input type='hidden' name='path' value='$path'>
<input type='hidden' name='path' value='$urlized_path'>
</div>
</form>
</div>
@@ -76,7 +76,7 @@
<label>$text{'new_name'}</label>
<input name="name" type="text" class="form-control" data-placement="right" data-content="$text{'provide_new_file_name'}" data-trigger="manual">
<input type='hidden' name='file' value='' required>
<input type='hidden' name='path' value='$path'>
<input type='hidden' name='path' value='$urlized_path'>
</div>
</form>
</div>
@@ -310,7 +310,7 @@
<label>$text{'dialog_user_pass'}</label>
<input name="password" type="password" class="form-control">
</div>
<input type='hidden' name='path' value='$path'>
<input type='hidden' name='path' value='$urlized_path'>
</form>
</div>
<div class="modal-footer">
@@ -329,9 +329,9 @@
<h4 class="warning">$text{'upload_files'}</h4>
</div>
<div class="modal-body">
<form id='upload-form' method='post' action='upload.cgi?path=$path&id=$upid' enctype='multipart/form-data' onsubmit='window.open("$gconfig{'webprefix'}/uptracker.cgi?id=$upid&uid=$uid", "uptracker", "toolbar=no, menubar=no, scrollbars=no, location=no, resizable=no, width=screen.width, height=screen.height")'>
<form id='upload-form' method='post' action='upload.cgi?path=$urlized_path&id=$upid' enctype='multipart/form-data' onsubmit='window.open("$gconfig{'webprefix'}/uptracker.cgi?id=$upid&uid=$uid", "uptracker", "toolbar=no, menubar=no, scrollbars=no, location=no, resizable=no, width=screen.width, height=screen.height")'>
<input type='file' id='upfiles' name='upfiles' multiple onchange='countUploads(this)'>
<input type='hidden' name='path' value='$path'>
<input type='hidden' name='path' value='$urlized_path'>
</form>
<div id="readyForUploadList" class="well">
</div>
@@ -357,7 +357,7 @@
<label>$text{'search_label'}</label>
<input id="query" name="query" type="text" class="form-control" data-placement="right" data-content="$text{'provide_search_query'}" data-trigger="manual"><br>
<input id="caseins" name="caseins" type="checkbox" checked="checked"> $text{'search_insensitive'}
<input type='hidden' name='path' value='$path'>
<input type='hidden' name='path' value='$urlized_path'>
</div>
</form>
</div>

View File

@@ -7,7 +7,7 @@
<div class="form-group">
<label>$text{'new_folder_name'}</label>
<input id="name" name="name" type="text" title="$text{'provide_folder_name'}">
<input type='hidden' name='path' value='$path'>
<input type='hidden' name='path' value='$urlized_path'>
</div>
</form>
</div>
@@ -17,7 +17,7 @@
<div class="form-group">
<label>$text{'new_file_name'}</label>
<input name="name" type="text">
<input type='hidden' name='path' value='$path'>
<input type='hidden' name='path' value='$urlized_path'>
</div>
</form>
</div>
@@ -28,7 +28,7 @@
<label>$text{'new_name'}</label>
<input name="name" type="text">
<input type='hidden' name='file' value='' required>
<input type='hidden' name='path' value='$path'>
<input type='hidden' name='path' value='$urlized_path'>
</div>
</form>
</div>
@@ -97,15 +97,15 @@
<input name="username" type="text"><br>
<label>$text{'dialog_user_pass'}</label>
<input name="password" type="password">
<input type='hidden' name='path' value='$path'>
<input type='hidden' name='path' value='$urlized_path'>
</div>
</form>
</div>
<div id="readyForUploadDialog" class="modal">
<form id='upload-form' method='post' action='upload.cgi?path=$path&id=$upid' enctype='multipart/form-data' onsubmit='window.open("$gconfig{'webprefix'}/uptracker.cgi?id=$upid&uid=$uid", "uptracker", "toolbar=no, menubar=no, scrollbars=no, location=no, resizable=no, width=screen.width, height=screen.height")'>
<form id='upload-form' method='post' action='upload.cgi?path=$urlized_path&id=$upid' enctype='multipart/form-data' onsubmit='window.open("$gconfig{'webprefix'}/uptracker.cgi?id=$upid&uid=$uid", "uptracker", "toolbar=no, menubar=no, scrollbars=no, location=no, resizable=no, width=screen.width, height=screen.height")'>
<input type='file' id='upfiles' name='upfiles' multiple onchange='countUploads(this)'>
<input type='hidden' name='path' value='$path'>
<input type='hidden' name='path' value='$urlized_path'>
</form>
<div id="readyForUploadList" class="well">
</div>
@@ -179,7 +179,7 @@
<label>$text{'search_label'}</label>
<input id="query" name="query" type="text" title="$text{'provide_search_query'}"><br>
<input id="caseins" name="caseins" type="checkbox" checked="checked"> $text{'search_insensitive'}
<input type='hidden' name='path' value='$path'>
<input type='hidden' name='path' value='$urlized_path'>
</div>
</form>
</div>

View File

@@ -1,6 +1,6 @@
<div id="quicks" style="float:right">
<a href="javascript:void(0)" onclick='searchDialog()' title="$text{'search'}"><img src='images/icons/quick/edit-find.png' alt="$text{'search'}" /></a>
<a href="bookmark.cgi?path=$path" title="$text{'bookmark_folder'}"><img src='images/icons/quick/bookmark-new.png' alt="$text{'bookmark_folder'}" /></a>
<a href="bookmark.cgi?path=$urlized_path" title="$text{'bookmark_folder'}"><img src='images/icons/quick/bookmark-new.png' alt="$text{'bookmark_folder'}" /></a>
<a tabindex="0" class="fg-button fg-button-icon-right ui-widget ui-state-default ui-corner-all" id="flat">
<img src="images/icons/quick/go-down.png" alt="$text{'config_bookmarks'}">
</a>
@@ -13,7 +13,7 @@
<a href="javascript:void(0)" onclick='invertSelection()' title="$text{'invert_selection'}"><img src='images/icons/quick/invert.png' alt="$text{'invert_selection'}" /></a>
<a href="javascript:void(0)" onclick='copySelected()' title="$text{'copy_selected'}"><img src='images/icons/quick/edit-copy.png' alt="$text{'copy_selected'}" /></a>
<a href="javascript:void(0)" onclick='cutSelected()' title="$text{'cut_selected'}"><img src='images/icons/quick/edit-cut.png' alt="$text{'cut_selected'}" /></a>
<a href='paste.cgi?path=$path' title="$text{'paste'}"><img src='images/icons/quick/edit-paste.png' alt="$text{'paste'}" /></a>
<a href='paste.cgi?path=$urlized_path' title="$text{'paste'}"><img src='images/icons/quick/edit-paste.png' alt="$text{'paste'}" /></a>
<a href="javascript:void(0)" onclick='createFolderDialog()' title="$text{'create_folder'}"><img src='images/icons/quick/folder-new.png' alt="$text{'create_folder'}" /></a>
<a href="javascript:void(0)" onclick='createFileDialog()' title="$text{'create_file'}"><img src='images/icons/quick/document-new.png' alt="$text{'create_file'}" /></a>
<a href="javascript:void(0)" onclick='compressDialog()' title="$text{'compress_selected'}"><img src='images/icons/quick/compress.png' alt="$text{'compress_selected'}" /></a>

View File

@@ -5,7 +5,7 @@
<button class="btn btn-inverse" onclick='invertSelection()' title="$text{'invert_selection'}" data-toggle="tooltip" data-placement="bottom" data-container="body">
<i class="fa fa-check-square" aria-hidden="true"></i>
</button>
<button class="btn btn-inverse" onclick='window.location.href="index.cgi?path=$path"' title="$text{'refresh'}" data-toggle="tooltip" data-placement="bottom" data-container="body">
<button class="btn btn-inverse" onclick='window.location.href="index.cgi?path=$urlized_path"' title="$text{'refresh'}" data-toggle="tooltip" data-placement="bottom" data-container="body">
<i class="fa fa-refresh" aria-hidden="true"></i>
</button>
<div class="btn-group">
@@ -50,7 +50,7 @@
</a>
</li>
<li>
<a onclick="location.href='paste.cgi?path=$path'">
<a onclick="location.href='paste.cgi?path=$urlized_path'">
<i class="fa fa-paste" aria-hidden="true"></i> $text{'paste'}
</a>
</li>
@@ -97,7 +97,7 @@
$text{'menu_bookmarks'} <span class="caret"></span></button>
<ul class="dropdown-menu pull-right" aria-labelledby="dropdownMenu1">
<li>
<a href="bookmark.cgi?path=$path">
<a href="bookmark.cgi?path=$urlized_path">
<i class="fa fa-bookmark-o" aria-hidden="true"></i> $text{'bookmark_folder'}
</a>
$bookmarks

View File

@@ -2,7 +2,7 @@
<button class="btn btn-inverse" onclick='searchDialog()' title="$text{'search'}" data-toggle="tooltip" data-placement="bottom" data-container="body">
<i class="fa fa-search" aria-hidden="true"></i>
</button>
<button class="btn btn-inverse" onclick="location.href='bookmark.cgi?path=$path'" title="$text{'bookmark_folder'}" data-toggle="tooltip" data-placement="bottom" data-container="body">
<button class="btn btn-inverse" onclick="location.href='bookmark.cgi?path=$urlized_path'" title="$text{'bookmark_folder'}" data-toggle="tooltip" data-placement="bottom" data-container="body">
<i class="fa fa-bookmark-o" aria-hidden="true"></i>
</button>
<div class="btn-group">
@@ -13,7 +13,7 @@
$bookmarks
</ul>
</div>
<button class="btn btn-inverse" onclick='window.location.href="index.cgi?path=$path"' title="$text{'refresh'}" data-toggle="tooltip" data-placement="bottom" data-container="body">
<button class="btn btn-inverse" onclick='window.location.href="index.cgi?path=$urlized_path"' title="$text{'refresh'}" data-toggle="tooltip" data-placement="bottom" data-container="body">
<i class="fa fa-refresh" aria-hidden="true"></i>
</button>
<button class="btn btn-inverse" onclick='selectAll()' title="$text{'select_all'}" data-toggle="tooltip" data-placement="bottom" data-container="body">
@@ -28,7 +28,7 @@
<button class="btn btn-inverse" onclick='cutSelected()' title="$text{'cut_selected'}" data-toggle="tooltip" data-placement="bottom" data-container="body">
<i class="fa fa-cut" aria-hidden="true"></i>
</button>
<button class="btn btn-inverse" onclick="location.href='paste.cgi?path=$path'" title="$text{'paste'}" data-toggle="tooltip" data-placement="bottom" data-container="body">
<button class="btn btn-inverse" onclick="location.href='paste.cgi?path=$urlized_path'" title="$text{'paste'}" data-toggle="tooltip" data-placement="bottom" data-container="body">
<i class="fa fa-paste" aria-hidden="true"></i>
</button>
<button class="btn btn-inverse" onclick='createFolderDialog()' title="$text{'create_folder'}" data-toggle="tooltip" data-placement="bottom" data-container="body">

View File

@@ -4,7 +4,7 @@
# ipv6 initialization
if ($config{'save_file6'}) {
# Force use of a different save file, and webmin's functions
$ip6tables_save_file = $config{'save6_file'};
$ip6tables_save_file = $config{'save_file6'};
}
else {
if (-r "$module_root_directory/$gconfig{'os_type'}-lib.pl") {

View File

@@ -41,8 +41,12 @@ else {
($zone) = grep { $_->{'default'} } @zones;
}
$zone ||= $zones[0];
my @azones = &list_firewalld_zones(1);
my ($azone) = grep { $_->{'name'} eq $zone->{'name'} } @azones;
my ($azone);
eval {
local $main::error_must_die = 1;
my @azones = &list_firewalld_zones(1);
($azone) = grep { $_->{'name'} eq $zone->{'name'} } @azones;
};
# Show zone selector
print &ui_form_start("index.cgi");
@@ -116,17 +120,19 @@ else {
print &ui_links_row(\@links);
}
# Show interfaces for this zone
print &ui_form_start("save_ifaces.cgi");
print &ui_hidden("zone", $zone->{'name'});
print "<b>$text{'index_ifaces'}</b>\n";
my %zifcs = map { $_, 1 } &unique(@{$azone->{'interfaces'}},
@{$zone->{'interfaces'}});
foreach my $i (&list_system_interfaces()) {
print &ui_checkbox("iface", $i, $i, $zifcs{$i}),"\n";
if ($azone) {
# Show interfaces for this zone
print &ui_form_start("save_ifaces.cgi");
print &ui_hidden("zone", $zone->{'name'});
print "<b>$text{'index_ifaces'}</b>\n";
my %zifcs = map { $_, 1 } &unique(@{$azone->{'interfaces'}},
@{$zone->{'interfaces'}});
foreach my $i (&list_system_interfaces()) {
print &ui_checkbox("iface", $i, $i, $zifcs{$i}),"\n";
}
print &ui_submit($text{'save'});
print &ui_form_end();
}
print &ui_submit($text{'save'});
print &ui_form_end();
# Show start/apply buttons
print &ui_hr();

View File

@@ -1371,10 +1371,11 @@ elsif ($action_mode eq "upstart") {
}
elsif ($action_mode eq "systemd") {
# Check with systemd if it is running
my @systemds = &list_systemd_services();
my ($u) = grep { $_->{'name'} eq $name ||
$_->{'name'} eq $name.".service" } @systemds;
return !$u ? -1 : $u->{'status'} ? 1 : 0;
my $out = &backquote_command(
"systemctl is-failed ".quotemeta($name)." 2>/dev/null");
$out =~ s/\r?\n//g;
return $out eq "active" ? 1 :
$out eq "inactive" || $out eq "failed" ? 0 : -1;
}
elsif ($action_mode eq "launchd") {
my @agents = &list_launchd_agents();
@@ -1386,6 +1387,34 @@ else {
}
}
=head2 list_action_names()
Returns a list of just action names
=cut
sub list_action_names
{
if ($init_mode eq "upstart") {
return map { $_->{'name'} } &list_upstart_services();
}
elsif ($init_mode eq "systemd") {
return map { $_->{'name'} } &list_systemd_services();
}
elsif ($init_mode eq "init") {
return map { my @w = split(/\s+/, $_); $w[0] } &list_actions();
}
elsif ($init_mode eq "win32") {
return map { $_->{'name'} } &list_win32_services();
}
elsif ($init_mode eq "rc") {
return map { $_->{'name'} } &list_rc_scripts();
}
elsif ($init_mode eq "launchd") {
return map { $_->{'name'} } &list_launchd_agents();
}
return ( );
}
=head2 get_action_mode(name)
Returns the init mode used by some action. May be different from the global

View File

@@ -8,8 +8,8 @@ change_cmd=Wechsel zum Runlevel $1 mit Befehl $2. Dies kann einige Zeit dauern u
change_err=Sie sind nicht berechtigt in einen anderen Runlevel zu wechseln
change_title=Wechsele Runlevel
create_title=Dienst erstellen
edit_badK=Weil dieser Dienst nicht richtig erstellt wurde wird er nur in Runlevel $1 gestoppt.
edit_badS=Weil dieser Dienst nicht richtig erstellt wurde wird er nur in Runlevel $1 gestartet.
edit_badK=Weil dieser Dienst nicht richtig erstellt wurde, wird er nur in Runlevel $1 gestoppt.
edit_badS=Weil dieser Dienst nicht richtig erstellt wurde, wird er nur in Runlevel $1 gestartet.
edit_boot=Start beim Systemstart?
edit_condrestartnow=Neustart wenn n&#246;tig
edit_desc=Beschreibung
@@ -220,6 +220,7 @@ systemd_status=Aktueller Status
systemd_status0=L&#228;uft nicht
systemd_status1=L&#228;uft mit PID $1
systemd_status2=L&#228;uft
systemd_status3=Unbekannt!
systemd_stop=Befehl zum Ausf&#252;hren beim Herunterfahren
systemd_title1=Erstelle Systemd-Dienst
systemd_title2=Editiere Systemd-Dienst

210
lang/fr
View File

@@ -1,35 +1,35 @@
main_return=Retourner à $1
main_return=Retourner à $1
main_homepage=Page d'accueil
main_feedback=Rapport...
main_switch=Changer d'utilisateur...
main_logout=Se déconnecter
main_logout=Se déconnecter
main_version=Version $1 sur $2 ($3)
main_title=Webmin $1 sur $2 ($3)
main_title2=Webmin
main_none=Vous n'avez accès à aucun modules Webmin.
main_skill=Niveau de compétence
main_none=Vous n'avez accès à aucun modules Webmin.
main_skill=Niveau de compétence
main_readonly=(Mode lecture seule)
link_essl=The Net::Le module SSLeay Perl requis pour créer des connections HTTPS n'est pas installé sur votre système.
link_essl=The Net::Le module SSLeay Perl requis pour créer des connections HTTPS n'est pas installé sur votre système.
category_servers=Serveurs
category_hardware=Matériel
category_system=Système
category_hardware=Matériel
category_system=Système
category_webmin=Webmin
category_net=Réseau
category_net=Réseau
category_syslet=Syslets
category_cluster=Cluster
category_info=Information
category_=Autres
longcategory_servers=Modules pour les configurations web, email, FTP et autres serveurs
longcategory_hardware=Modules pour les imprimantes, disques et autres configurations de matériel
longcategory_system=Modules pour les utilisateurs, fichiers système, tâches Cron et autres paramètres du système
longcategory_webmin=Modules pour configurer Webmin lui même
longcategory_net=Modules pour la configuration de gestion du réseau et des services réseau
longcategory_cluster=Modules permettant de contrôler de multiple serveurs à partir d'une seule interface
longcategory_info=Modules qui affichent des informations sur votre système
longcategory_=Modules qui ne vont pas dans les autres catégories
longcategory_hardware=Modules pour les imprimantes, disques et autres configurations de matériel
longcategory_system=Modules pour les utilisateurs, fichiers système, tâches Cron et autres paramètres du système
longcategory_webmin=Modules pour configurer Webmin lui même
longcategory_net=Modules pour la configuration de gestion du réseau et des services réseau
longcategory_cluster=Modules permettant de contrôler de multiple serveurs à partir d'une seule interface
longcategory_info=Modules qui affichent des informations sur votre système
longcategory_=Modules qui ne vont pas dans les autres catégories
header_webmin=Index de Webmin
header_module=Index du module
@@ -41,17 +41,17 @@ index=index
yes=Oui
no=Non
save=Sauvegarder
create=Créer
create=Créer
delete=Supprimer
find=Trouver
error=Erreur
error_previous=Page précédente
efilewrite=Échec d'écriture sur $1 : $2
efileclose=Échec d'écriture sur $1 lors de la fermeture : $2
efileopen=Échec de l'ouverture $1 pour l'écriture : $2
error_previous=Page précédente
efilewrite=Échec d'écriture sur $1 : $2
efileclose=Échec d'écriture sur $1 lors de la fermeture : $2
efileopen=Échec de l'ouverture $1 pour l'écriture : $2
default=Defaut
modify=Modifier
reset=Rétablir
reset=Rétablir
ok=OK
cancel=Annuler
helpsearch=Rechercher la documentation...
@@ -64,108 +64,108 @@ chooser_dir=Dossier de $1
chooser_ok=Ok
chooser_date=Choisir la date
users_title1=Sélectionner les utilisateurs...
users_title2=Sélectionner l'utilisateur...
users_sel=Utilisateurs sélectionnés
users_title1=Sélectionner les utilisateurs...
users_title2=Sélectionner l'utilisateur...
users_sel=Utilisateurs sélectionnés
users_all=Tous les utilisateurs
users_ok=Ok
users_cancel=Annuler
users_clear=Vider
groups_title1=Sélectionner les groupes...
groups_title2=Sélectionner le groupe...
groups_title1=Sélectionner les groupes...
groups_title2=Sélectionner le groupe...
groups_all=Tous les groupes
groups_sel=Groupes sélectionnés
groups_sel=Groupes sélectionnés
groups_ok=Ok
groups_cancel=Annuler
groups_clear=Vider
modules_title1=Sélectionner les modules...
modules_title2=Sélectionner le module...
modules_sel=Modules sélectionnés
modules_title1=Sélectionner les modules...
modules_title2=Sélectionner le module...
modules_sel=Modules sélectionnés
modules_all=Tous les modules
modules_ok=Ok
modules_cancel=Annuler
modules_clear=Vider
config_ecannot=Vous n'êtes pas autorisé à configurer ce module
config_ecannot=Vous n'êtes pas autorisé à configurer ce module
config_title=Configuration
config_dir=Pour le module $1
config_header=Options configurables pour $1
config_none=Aucun
config_eaccess=Vous n'êtes pas autorisé à accéder à ce module
config_err=Échec de la sauvegarde des configurations
config_eaccess=Vous n'êtes pas autorisé à accéder à ce module
config_err=Échec de la sauvegarde des configurations
config_nochange=Ne pas changer
config_setto=Placer à
config_ewebmin=Le type de paramètre 14 fonctionne uniquement dans Webmin
config_setto=Placer à
config_ewebmin=Le type de paramètre 14 fonctionne uniquement dans Webmin
help_err=Échec de l'affichage de l'aide
help_err=Échec de l'affichage de l'aide
help_epath=Chemin de destination de l'aide invalide ou manquant
help_efile=Échec de lecture du fichier $1
help_efile=Échec de lecture du fichier $1
help_eheader=Section &lt;header&gt; manquante
help_einclude=Échec de l'inclusion $1
help_eif=$1 échec : $2
help_eexec=$1 échec : $2
help_einclude=Échec de l'inclusion $1
help_eif=$1 échec : $2
help_eexec=$1 échec : $2
referer_title=Avertissement de sécurité
referer_warn=<b>Avertissement!</b> Webmin a détecté que le programme $2 a été relié à partir de l'adresse $1, il advient qu'elle se trouve en dehors du serveur Webmin. Ceci peut être une tentative de pieger votre serveur dans le but d'exécuter une commande dangereuse.
referer_warn_unknown=<b>Avertissement!</b> Webmin a détecté que le programme $1 a été relié à partir d'une adresse inconnue, il advient qu'elle se trouve en dehors du serveur Webmin. Ceci peut être une tentative de pieger votre serveur dans le but d'exécuter une commande dangereuse.
referer_ok=Continuer l'exécution du programme Webmin
referer_title=Avertissement de sécurité
referer_warn=<b>Avertissement!</b> Webmin a détecté que le programme $2 a été relié à partir de l'adresse $1, il advient qu'elle se trouve en dehors du serveur Webmin. Ceci peut être une tentative de pieger votre serveur dans le but d'exécuter une commande dangereuse.
referer_warn_unknown=<b>Avertissement!</b> Webmin a détecté que le programme $1 a été relié à partir d'une adresse inconnue, il advient qu'elle se trouve en dehors du serveur Webmin. Ceci peut être une tentative de pieger votre serveur dans le but d'exécuter une commande dangereuse.
referer_ok=Continuer l'exécution du programme Webmin
referer_again=Ne plus afficher cette avertissement.
session_header=Se connecter à Webmin
session_header=Se connecter à Webmin
session_mesg=Vous devez entrer un nom d'utilisateur et un mot de passe pour vous identifier sur le serveur Webmin.
session_mesg2=Vous devez entrer un nom d'utilisateur et un mot de passe pour vous identifier.
session_user=Nom d'utilisateur
session_pass=Mot de passe
session_login=Login
session_clear=Vider
session_failed=Identification échouée. Réessayez s'il vous plaît.
session_logout=Déconnecté avec succès. Utilisez le formulaire ci-dessous pour vous identifier une seconde fois.
session_timed_out=La session a expirée après $1 minutes d'inactivité.
session_save=Se souvenir de l'ouverture de manière permanente ?
session_failed=Identification échouée. Réessayez s'il vous plaît.
session_logout=Déconnecté avec succès. Utilisez le formulaire ci-dessous pour vous identifier une seconde fois.
session_timed_out=La session a expirée après $1 minutes d'inactivité.
session_save=Se souvenir de l'ouverture de manière permanente ?
pam_header=S'identifier à Webmin
pam_mesg=Vous devez répondre à la question ci-dessous pour vous identifier au serveur Webmin sur $1.
pam_mesg2=Vous devez répondre à la question ci-dessous pour vous identifier.
pam_header=S'identifier à Webmin
pam_mesg=Vous devez répondre à la question ci-dessous pour vous identifier au serveur Webmin sur $1.
pam_mesg2=Vous devez répondre à la question ci-dessous pour vous identifier.
pam_login=Continuer
pam_restart=Redémarrer
pam_restart=Redémarrer
acl_root=Répertoire racine pour le sélectionneur de fichiers
acl_nodot=Cacher les fichiers dot dans le sélectionneur de fichiers?
acl_home=Répertoire d'accueil de l'utilisateur
acl_uedit=Utilisateurs visibles dans le sélectionneur des utilisateurs
acl_root=Répertoire racine pour le sélectionneur de fichiers
acl_nodot=Cacher les fichiers dot dans le sélectionneur de fichiers?
acl_home=Répertoire d'accueil de l'utilisateur
acl_uedit=Utilisateurs visibles dans le sélectionneur des utilisateurs
acl_uedit_all=Tous les utilisateurs
acl_uedit_none=Aucun utilisateurs
acl_uedit_only=Seulement les utilisateurs
acl_uedit_except=Tous sauf les utilisateurs
acl_uedit_uid=Utilisateurs avec des UIDs dans la gamme
acl_uedit_group=Utilisateurs présents dans un groupe
acl_gedit=Groupes visibles dans le sélectionneur de groupe
acl_uedit_group=Utilisateurs présents dans un groupe
acl_gedit=Groupes visibles dans le sélectionneur de groupe
acl_gedit_all=Tous les groupes
acl_gedit_none=Aucun groupes
acl_gedit_only=Seulement les groupes
acl_gedit_except=Tous sauf les groupes
acl_gedit_gid=Groupes avec des GIDs dans la gamme
acl_feedback=Possibilité d'envoyer un email de rapport?
acl_feedback=Possibilité d'envoyer un email de rapport?
acl_feedback2=Oui
acl_feedback1=Oui, mais pas avec les fichiers de configuration
acl_feedback0=Non
acl_feedback3=Oui, avec les fichiers de configuration
acl_rpc=Possibilité d'accepter les appels RPC?
acl_rpc=Possibilité d'accepter les appels RPC?
acl_rpc2=Seulement pour <tt>root</tt> ou <tt>admin</tt>
acl_rpc1=Oui
acl_rpc0=Non
acl_readonly=Utilisateur dans le mode demo?<br>(Certains modules ne seront pas disponibles)
month_1=Janvier
month_2=Février
month_2=Février
month_3=Mars
month_4=Avril
month_5=Mai
month_6=Juin
month_7=Juillet
month_8=Août
month_8=Août
month_9=Septembre
month_10=Octobre
month_11=Novembre
@@ -200,53 +200,53 @@ sday_4=Je
sday_5=Ve
sday_6=Sa
emodule=Accès refusé : L'utilisateur $1 n'est pas autorisé à utiliser le module $2
elock_tries=Échec du blocage du fichier $1 après $2 minutes
emodule=Accès refusé : L'utilisateur $1 n'est pas autorisé à utiliser le module $2
elock_tries=Échec du blocage du fichier $1 après $2 minutes
skill_high=Expert
skill_medium=Intermédiaire
skill_medium=Intermédiaire
skill_low=Novice
feedback_title=Rapport Webmin
feedback_desc=Ce formulaire vous permet de rapporter les bugs présents et de soumettre des suggestions aux développeurs de Webmin concernant n'importe quel problème ou des dispositifs manquants que vous avez trouvé. Lorsque vous cliquerez sur le boutton d'envoi, les détails contenus dans le formulaire seront envoyés par mail à $2.
feedback_desc2=Ce rapport sera envoyé aux développeurs de Webmin, et non votre administrateur système, FAI ou votre fournisseur d'hébergement. Veuillez écrire en Anglais uniquement, même dans le cas où vous utilisez l'application sous un autre language.
feedback_header=Détails du rapport
feedback_desc=Ce formulaire vous permet de rapporter les bugs présents et de soumettre des suggestions aux développeurs de Webmin concernant n'importe quel problème ou des dispositifs manquants que vous avez trouvé. Lorsque vous cliquerez sur le boutton d'envoi, les détails contenus dans le formulaire seront envoyés par mail à $2.
feedback_desc2=Ce rapport sera envoyé aux développeurs de Webmin, et non votre administrateur système, FAI ou votre fournisseur d'hébergement. Veuillez écrire en Anglais uniquement, même dans le cas où vous utilisez l'application sous un autre language.
feedback_header=Détails du rapport
feedback_name=Votre nom
feedback_email=Votre adresse email
feedback_module=Module concerné
feedback_module=Module concerné
feedback_all=Tous les modules
feedback_text=Description du problème ou suggestion
feedback_os=Inclure les détails de votre système d'exploitation dans l'email?
feedback_osdesc=Si cette option est sélectionnée, l'email du rapport va inclure automatiquement le nom et la version de votre système d'exploitation.
feedback_text=Description du problème ou suggestion
feedback_os=Inclure les détails de votre système d'exploitation dans l'email?
feedback_osdesc=Si cette option est sélectionnée, l'email du rapport va inclure automatiquement le nom et la version de votre système d'exploitation.
feedback_config=Inclure la configuration du module dans l'email?
feedback_configdesc=Si cette option est sélectionnée, l'email du rapport va inclure automatiquement la configuration du module concerné ainsi que le contenu de tous les fichiers de configuration que le module utilise. Par exemple, si le rapport concerne le module <i>Utilisateurs et Groupes</i>, vos fichiers <tt>/etc/passwd</tt> et <tt>/etc/shadow</tt> vont être envoyés.
feedback_attach=Fichiers additionnels à joindre
feedback_configdesc=Si cette option est sélectionnée, l'email du rapport va inclure automatiquement la configuration du module concerné ainsi que le contenu de tous les fichiers de configuration que le module utilise. Par exemple, si le rapport concerne le module <i>Utilisateurs et Groupes</i>, vos fichiers <tt>/etc/passwd</tt> et <tt>/etc/shadow</tt> vont être envoyés.
feedback_attach=Fichiers additionnels à joindre
feedback_send=Envoyer le rapport
feedback_mailserver=Envoyer par le serveur SMTP
feedback_mailserver_def=Programme d'envoi d'email local
feedback_err=Échec de l'envoi du rapport
feedback_err=Échec de l'envoi du rapport
feedback_emodule=Vous avez choisi d'inclure vos configurations du module dans l'email, mais n'avez pas choisi de module.
feedback_emodule2=Le module sélectionné n'existe pas.
feedback_econfig=Vous n'avez pas un accès total au module sélectionné.
feedback_via=Rapport envoyé à $1 par le serveur SMTP $2
feedback_prog=Rapport envoyé à $1 en utilisant le programme d'envoi d'email $2
feedback_esend=Échec de l'envoi du rapport par le programme d'envoi d'email ou du serveur SMTP local.
feedback_to=Envoyer le rapport à des adresses
feedback_enoto=Aucune adresse n'a été entrée pour envoyer le rapport
feedback_ecannot=Vous n'êtes pas autorisé à envoyé un rapport
feedback_ecannot2=Vous n'êtes pas autorisé à envoyé un rapport contenant des fichiers de configuration
feedback_emodule2=Le module sélectionné n'existe pas.
feedback_econfig=Vous n'avez pas un accès total au module sélectionné.
feedback_via=Rapport envoyé à $1 par le serveur SMTP $2
feedback_prog=Rapport envoyé à $1 en utilisant le programme d'envoi d'email $2
feedback_esend=Échec de l'envoi du rapport par le programme d'envoi d'email ou du serveur SMTP local.
feedback_to=Envoyer le rapport à des adresses
feedback_enoto=Aucune adresse n'a été entrée pour envoyer le rapport
feedback_ecannot=Vous n'êtes pas autorisé à envoyé un rapport
feedback_ecannot2=Vous n'êtes pas autorisé à envoyé un rapport contenant des fichiers de configuration
progress_size=Téléchargement de $1 ($2 bytes) ..
progress_nosize=Téléchargement de $1 ..
progress_data=$1 bytes reçus ($2 %)
progress_data2=$1 bytes reçus
progress_done=.. téléchargement terminé.
progress_size=Téléchargement de $1 ($2 bytes) ..
progress_nosize=Téléchargement de $1 ..
progress_data=$1 bytes reçus ($2 %)
progress_data2=$1 bytes reçus
progress_done=.. téléchargement terminé.
readparse_cdheader=Header de Contenu-Diposition manquant
readparse_enc=Encodage de forme spécifique de données attendu, mais obtention d'un encode normal
readparse_max=Les données onty excédées la taille maximum de $1 bytes
readparse_enc=Encodage de forme spécifique de données attendu, mais obtention d'un encode normal
readparse_max=Les données onty excédées la taille maximum de $1 bytes
password_expired=Votre mot de passe a expiré, et un nouveau doit être choisi.
password_expired=Votre mot de passe a expiré, et un nouveau doit être choisi.
password_header=Choisissez un nouveau mot de passe
password_user=Nom d'utilisateurs
password_old=Mot de passe actuel
@@ -254,27 +254,27 @@ password_new1=Nouveau mot de passe
password_new2=Nouveau mot de passe (confirmation)
password_ok=Changer
password_clear=Vider
password_done=Votre mot de passe a été changé avec succès. Vous pouvez maintenant vous <a href='$1'>identifier une nouvelle fois</a> avec le nouveau mot de passe.
password_err=Échec du changement du mot de passe.
password_euser=Votre nom d'utiliateur n'a pas été trouvé dans le fichier des mots de passe!
password_done=Votre mot de passe a été changé avec succès. Vous pouvez maintenant vous <a href='$1'>identifier une nouvelle fois</a> avec le nouveau mot de passe.
password_err=Échec du changement du mot de passe.
password_euser=Votre nom d'utiliateur n'a pas été trouvé dans le fichier des mots de passe!
password_eold=Le mot de passe actuel est invalide
password_enew1=Aucun nouveau mot de passe n'a été saisi
password_enew1=Aucun nouveau mot de passe n'a été saisi
password_enew2=Les saisies de votre nouveau mot de passe ne correspondent pas
password_epam=Erreur PAM : $1
password_emodpam=The Authen::Le module PAM perl requis pour réaliser les changements de mot de passe n'est pas installé!
password_emodpam=The Authen::Le module PAM perl requis pour réaliser les changements de mot de passe n'est pas installé!
ui_mandatory=Ce champs est obligatoire
ui_checkmandatory=Rien n'a été sélectionné
ui_errors=Plusieurs erreurs ont été détectées :
ui_checkmandatory=Rien n'a été sélectionné
ui_errors=Plusieurs erreurs ont été détectées :
ui_nothing=Rien de saisie
ui_searchcol=Il y a des rangées où
ui_searchcol=Il y a des rangées où
ui_searchfor=Contient le texte
ui_searchok=Rechercher
ui_selall=Selectionner tout.
ui_selinv=Inverser la sélection.
ui_selinv=Inverser la sélection.
ui_edate=Date invalide
ui_etime=Heure invalide
ui_paging=Affichage des rangées $1 à $2 de $3
ui_rowlabel=$2 dans la rangée $1 :
ui_paging=Affichage des rangées $1 à $2 de $3
ui_rowlabel=$2 dans la rangée $1 :
header_statusmsg=$1 identifié dans $2 $3 sur $4 ($5)
header_statusmsg=$1 identifié dans $2 $3 sur $4 ($5)

View File

@@ -203,12 +203,14 @@ sdelete_edel=LDAP l&#246;schen von $1 fehlgeschlagen : $2
sdelete_edn=Objekt $1 wurde nicht gefunden
sdelete_err=Fehlgeschlagen Objekte zu l&#246;schen
slapd_allow=Zugriffskontrolle Optionen
slapd_bind_anon_cred=Erlaube anonymen Login mit Zugangsdaten
slapd_bind_anon_dn=Erlaube anonyme Anmeldung mit DN
slapd_bind_v2=Erlaube LDAP v2 Clients
slapd_ca=TLS CA-Zertifikatsdatei
slapd_cachesize=Index zum Cachen
slapd_cert=TLS-Zertifikat-Datei
slapd_dbcachesize=Datenbankeintr&#228;ge zum Zwischenspeichern
slapd_eca=Fehlende oder falsch formatierte TLS-CA-Zertifikatdatei
slapd_ecachesize=Fehlende oder nicht-numerische Index-Cache-Gr&#246;&#223;e
slapd_ecannot=Es ist Ihnen nicht erlaubt den LDAP-Server zu konfigurieren
slapd_ecert=Fehlende oder falsch formatierte TLS-Zertifikats-Datei

View File

@@ -3,3 +3,4 @@ longdesc=Manage the OpenLDAP server and objects in its database
category=servers
depends=ldap-client
perldepends=Net::LDAP
desc_de=LDAP Server

View File

@@ -26,7 +26,7 @@ index_emd5=Dieses Modul ist <a href='$1'>konfiguriert</a> um MD5-Passwortverschl
index_eperl=Das Perl Module $1 das ben&ouml;tigt wird ist nicht installiert oder funktioniert nicht korrekt.
index_eperl2=Die Fehlermeldung von Perl beim Laden des Modules war :
index_eschema=Webmin ist mit dem LDAP Server verbunden, konnte jedoch nicht das Schema holen. Stellen Sie sicher, dass der Zugriff nicht im <a href='$1'>LDAP Server</a> Module verweigert wird.
index_eslappasswd=Dieses Modul ist <a href='$1'>konfiguriert</a> um MD5-Passwortverschl&uuml;sselung zu benutzen, aber das Programm <tt>$2</tt> das f&uuml;r die Verschl&uuml;sselung benutzt wird ist nicht installiert.
index_eslappasswd=Dieses Modul ist <a href='$1'>konfiguriert</a> um LDAP MD5-Passwortverschl&uuml;sselung zu benutzen, aber das Programm <tt>$2</tt> das f&uuml;r die Verschl&uuml;sselung benutzt wird ist nicht installiert.
index_eusearch=Suche nach Benutzern unter $1 fehlgeschlagen: $2
index_gadd=Eine neue LDAP-Gruppe hinzuf&uuml;gen.
index_gnone=Es wurde keine LDAP-Gruppe unter $1 gefunden.
@@ -61,7 +61,7 @@ uedit_raw=LDAP-Attribute
uedit_return=Benutzer-Details
uedit_samba=Samba Login?
uedit_sambaacctflags=Konto-Flags
uedit_sambabadpasswordcount=Anzahl ung&#252;ltige Passw&#246;rter
uedit_sambabadpasswordcount=Anzahl ung&#252;ltige Passw&#246;rter
uedit_sambapassopts=Samba Passwort Optionen
uedit_sambapwdcanchange=Passwort kann ge&#228;ndert werden
uedit_sambapwdlastset=Letztes Passwort Update

View File

@@ -16,6 +16,9 @@ index_addlv3=Crea un pool prim a <tt>$1</tt>.
index_addlv=Crea un nou volum lògic.
index_addsnap=Crea una nova instantània.
index_return=als grups de volums
index_return2=als volums físics
index_return3=als volums lògics
index_init=Això pot ser perquè encara no has activat LVM. <a href='$1'>Activa'l ara</a> per veure tots els grups de volums.
index_eversion=Webmin només suporta les versions LVM 1.0 superiors. La sortida de $1 al sistema és: $2
index_version=LVM versió $1

View File

@@ -152,9 +152,6 @@ elsif ($in{'razor'} || $in{'ham'}) {
else {
print "<b>$text{'razor_done'}</b><p>\n";
}
print "<script>\n";
print "window.location = 'list_mail.cgi?folder=$in{'folder'}&user=$in{'user'}';\n";
print "</script>\n";
}
&ui_print_footer("list_mail.cgi?folder=$in{'folder'}&user=$in{'user'}&dom=$in{'dom'}", $text{'mail_return'}, &user_list_link(), $text{'index_return'});
}

View File

@@ -92,7 +92,7 @@ if ($< == 0) {
$size = int(`du -sk $tmp_dir`);
# Create the control file
@deps = ( "perl", "libnet-ssleay-perl", "openssl", "libauthen-pam-perl", "libpam-runtime", "libio-pty-perl", "apt-show-versions" );
@deps = ( "perl", "libnet-ssleay-perl", "openssl", "libauthen-pam-perl", "libpam-runtime", "libio-pty-perl", "apt-show-versions", "unzip", "shared-mime-info" );
if ($baseproduct eq "webmin") {
push(@deps, "python");
}

View File

@@ -15,9 +15,9 @@ $zipdir = "zips";
@files = ("config.cgi", "config-*-linux",
"config-solaris", "images", "index.cgi", "mime.types",
"miniserv.pl", "os_list.txt", "perlpath.pl", "setup.sh", "setup.pl", "setup.bat",
"version", "web-lib.pl", "web-lib-funcs.pl", "README",
"version", "web-lib.pl", "web-lib-funcs.pl",
"config_save.cgi", "chooser.cgi", "miniserv.pem",
"config-aix", "update-from-repo.sh",
"config-aix", "update-from-repo.sh", "README.md",
"newmods.pl", "copyconfig.pl", "config-hpux", "config-freebsd",
"changepass.pl", "help.cgi", "user_chooser.cgi",
"group_chooser.cgi", "config-irix", "config-osf1", "thirdparty.pl",

View File

@@ -74,7 +74,7 @@ Version: $ver
Release: $rel
Provides: %{name}-%{version} perl(WebminCore)
PreReq: /bin/sh /usr/bin/perl /bin/rm
Requires: /bin/sh /usr/bin/perl /bin/rm perl(Net::SSLeay) perl(Time::Local) perl(Encode::Detect) perl(Data::Dumper) openssl
Requires: /bin/sh /usr/bin/perl /bin/rm perl(Net::SSLeay) perl(Time::Local) perl(Encode::Detect) perl(Data::Dumper) openssl unzip
AutoReq: 0
License: Freeware
Group: System/Tools

View File

@@ -1451,6 +1451,11 @@ while(1) {
# for logging unless trust_real_ip is set
local $headerhost = $header{'x-forwarded-for'} ||
$header{'x-real-ip'};
if ($headerhost) {
# Only real IPs are allowed
$headerhost = undef if (!&check_ipaddress($headerhost) &&
!&check_ip6address($headerhost));
}
if ($config{'trust_real_ip'}) {
$acpthost = $headerhost || $acpthost;
if (&check_ipaddress($headerhost) || &check_ip6address($headerhost)) {

View File

@@ -5,6 +5,7 @@ long_fstypes=Utilitza tipus llargs de sistemes de fitxers,1,1-S
sort_mode=Ordena els sistemes de fitxers per,1,2-Punt de Muntatge,1-Tipus,0-Ordre en els fitxers
show_used=Mostra l'espai en disc utilitzat a les llistes de sistemes de fitxers,1,1-Sí,0-No
delete_under=Suprimeix el directori en desmuntar, si queda per sota,3,No el suprimeixis mai
sysinfo=Mostra les dades de disc disponibles al Tauler,1,1-Sí,0-No
line2=Configuració del sistema,11
fstab_file=Fitxer que llista els sistemes de fitxers muntats en engegar el sistema,0
auto_file=Fitxer de muntatges automàtics NFS,3

View File

@@ -495,4 +495,9 @@ freebsd_edevfile=El fitxer de dispositiu '$1' no existeix
cswap_file=El fitxer d'intercanvi $1 no existeix.
cswap_size=Crea i munta un fitxer d'intercanvi de mida
acl_sysinfo=Mostra les dades disponibles en disc al Tauler
sysinfo_total=Total
sysinfo_dev=ID de dispositiu
__norefs=1

View File

@@ -306,10 +306,12 @@ my %donedevno;
# Get list of zone pools
my %zpools = ( 'zones' => 1, 'zroot' => 1 );
if (&has_command("zpool")) {
my @out = &backquote_command("zpool list -P 2>/dev/null || zpool list -p 2>/dev/null");
foreach my $l (@out) {
if (/^(\S+)\s+(\d+)\s+(\d+)\s+(\d+)/) {
$zpools{$1} = [ $2 / 1024, $4 / 1024 ];
foreach my $flag ("-P", "-p") {
my @out = &backquote_command("zpool list $flag 2>/dev/null");
foreach my $l (@out) {
if (/^(\S+)\s+(\d+)\s+(\d+)\s+(\d+)/) {
$zpools{$1} = [ $2 / 1024, $4 / 1024 ];
}
}
}
}

View File

@@ -21,11 +21,12 @@ sub list_system_info
foreach my $disks (@disk_space) {
if (ref($disks)) {
foreach my $disk (@$disks) {
my $total = $disk->{'total'};
next if (!$total);
my $dev_id = $disk->{'device'};
my $dir = $disk->{'dir'};
my $type = $disk->{'type'};
my $total = $disk->{'total'};
my $total_nice = nice_size($disk->{'total'});
my $total_nice = nice_size($total);
my $free = $disk->{'free'};
my $free_nice = nice_size($disk->{'free'});
my $free_percent = 100 - int(($total - $free) / $total * 100);

View File

@@ -605,6 +605,9 @@ backup_header2=Altres opcions de c
backup_header3=Planificació de la còpia
backup_file=Aboca al fitxer
backup_file2=Aboca al directori
backup_prefix=Prefix de nom de fitxer
backup_eprefix=El prefix del nom de fitxer no pot contenir /
backup_noprefix=Cap
backup_download=Descarrega-ho al navegador
backup_path=Caní al servidor
backup_mkdir=Crea el directori destí
@@ -740,6 +743,8 @@ cnf_emyisam_sort_buffer_size=Hi falta la mida del buffer d'ordenaci
cnf_emax_connections=Hi falta el nombre màxim de connexions o bé és invàlid
cnf_restart=Desa-ho i Reinicia MySQL
cnf_fpt=Un fitxer separat per a cada taula InnoDB
cnf_ilt=Temps límit de blocatge InnoDB (en segons)
cnf_eilt=El temps límit de blocatge InnoDB ha de ser un enter
manual_title=Edició de Fitxers de Configuració
manual_file=Edita el fitxer de configuració:

View File

@@ -64,6 +64,7 @@ backup_efile2=Fehlendes oder ung&#252;ltiges Backup-Verzeichnis
backup_eisdir=Sicherungsziel $1 ist ein Verzeichnis
backup_email=Verschicke Backup Status E-Mail an
backup_epath=Ung&#252;ltiger Sicherungspfad
backup_eprefix=Dateinamenpr&#228;fix darf nicht enthalten /
backup_err=Datenbanksicherung fehlgeschlagen
backup_etables=Keine Tabellen zum Backup ausgew&#228;hlt
backup_eunder=Datensicherungen d&#252;rfen nur unter $1 erstellt werden
@@ -77,6 +78,7 @@ backup_header3=Backup-Zeitplan
backup_mkdir=Erstelle Zielverzeichnis?
backup_ncron=Sicherungsauftrag f&#252;r die Datenbank weiterhin deaktiviert.
backup_none=Alle Zeilen
backup_noprefix=Kein
backup_notify=Sende E-Mail f&#252;r
backup_notify0=Alle Backups
backup_notify1=Nur bei Fehler
@@ -86,6 +88,7 @@ backup_ok1=Speichern und jetzt Datensicherung durchf&#252;hren
backup_ok2=Speichern
backup_options=Strukturinformationen zu ausschlie&#223;en
backup_path=Pfad auf Server
backup_prefix=Dateinamenpr&#228;fix
backup_quick=Dump Zeilen eins nach dem anderen?
backup_sched=Sicherungsauftrag aktivieren?
backup_sched1=Ja, zu den unten gew&#228;hlten Zeitpunkten ..

View File

@@ -6,3 +6,5 @@ longdesc=Setup databases, tables and permissions in your MySQL database server.
readonly=1
syslog=1
cpan=1
longdesc_de=Richtet Datenbanken, Tabellen und Berechtigungen in Ihrem MySQL-Datenbankserver ein.
desc_de=MySQL-Datenbankserver

View File

@@ -1118,6 +1118,7 @@ foreach (@$lref) {
elsif (/^\s*\!includedir\s+(\S+)/) {
# Including sections from files in a directory
my $dir = $1;
$dir =~ s/\/$//;
opendir(DIR, $dir);
my @files = map { $dir."/".$_ } readdir(DIR);
closedir(DIR);

View File

@@ -12,7 +12,7 @@ if ($in{'save'} || !@d) {
foreach $v (keys %in) {
if ($v =~ /^value_(\S+)$/) {
&execute_sql_logged($master_db,
"set global $1 = $in{$v}");
"set global $1 = '$in{$v}'");
$first ||= $1;
$count++;
}

View File

@@ -77,3 +77,5 @@ Added support for IPv6, DHCP and new ethernet device names on FreeBSD.
Added support for configuring intefaces with the "ip" command, as seen on RHEL 7, CentOS 7 and other new Linux distributions.
---- Changes since 1.760 ----
On CentOS, Fedora and Redhat systems, the DNSn lines in ifcfg-* files are now updated in sync with resolv.conf.
---- Changes since 1.910 ----
Added an option to disable (comment out) hosts file entries.

View File

@@ -7,6 +7,7 @@ $access{'hosts'} == 2 || &error($text{'hosts_ecannot'});
&ReadParse();
if ($in{'new'}) {
&ui_print_header(undef, $text{'hosts_create'}, "");
$h = { 'active' => 1 };
}
else {
&ui_print_header(undef, $text{'hosts_edit'}, "");
@@ -20,6 +21,10 @@ print &ui_hidden("new", $in{'new'});
print &ui_hidden("idx", $in{'idx'});
print &ui_table_start($text{'hosts_detail'}, undef, 2);
# Active?
print &ui_table_row($text{'hosts_active'},
&ui_yesno_radio("active", $h->{'active'}));
# IP address
print &ui_table_row($text{'hosts_ip'},
&ui_textbox("address", $h->{'address'}, 30));

View File

@@ -221,6 +221,7 @@ dns_hoststoo=Update hostname in host addresses if changed?
dns_dhcp=Hostname is set by DHCP server?
hosts_title=Host Addresses
hosts_active=Enabled?
hosts_ip=IP Address
hosts_host=Hostnames
hosts_add=Add a new host address.

View File

@@ -26,13 +26,13 @@ if (&has_command("ip")) {
$l =~ /^\d+:\s+([^ \t\r\n\@]+):/ || next;
$ifc{'name'} = $1;
$ifc{'fullname'} = $1;
if ($l =~ /\sinet\s+([0-9\.]+)\s+peer\s+([0-9\.]+)\/(\d+)(\s+brd\s+([0-9\.]+))?\s+scope\s+global\s+(\S+)/ && $6 eq $ifc{'name'}) {
if ($l =~ /\sinet\s+([0-9\.]+)\s+peer\s+([0-9\.]+)\/(\d+)(\s+brd\s+([0-9\.]+))?\s+scope\s+global(\s+noprefixroute)?(\s+dynamic)?\s+(\S+)/ && $8 eq $ifc{'name'}) {
# Line like :
# inet 193.9.101.120 peer 193.9.101.104/32 brd 193.9.101.120 scope global eth0
$ifc{'address'} = $1;
$ifc{'netmask'} = &prefix_to_mask("$3");
}
elsif ($l =~ /\sinet\s+([0-9\.]+)\/(\d+)(\s+brd\s+(\S+))?\s+scope\s+global\s+(\S+)/ && $5 eq $ifc{'name'}) {
elsif ($l =~ /\sinet\s+([0-9\.]+)\/(\d+)(\s+brd\s+(\S+))?\s+scope\s+global(\s+noprefixroute)?(\s+dynamic)?\s+(\S+)/ && $7 eq $ifc{'name'}) {
# Line like :
# inet 193.9.101.120/24 brd 193.9.101.255 scope global br0
$ifc{'address'} = $1;
@@ -44,6 +44,12 @@ if (&has_command("ip")) {
$ifc{'address'} = $1;
$ifc{'netmask'} = &prefix_to_mask("$3");
}
elsif ($l =~ /\sinet\s+([0-9\.]+)\/(\d+)(\s+brd\s+(\S+))?\s+scope\s+host\s+(\S+)/ && $5 eq $ifc{'name'}) {
# Line like :
# inet 127.0.0.1/8 scope host lo
$ifc{'address'} = $1;
$ifc{'netmask'} = &prefix_to_mask("$2");
}
if ($l =~ /\sbrd\s+([0-9\.]+)/) {
$ifc{'broadcast'} = $1;
}

View File

@@ -16,16 +16,21 @@ if ($access{'hosts'} == 2) {
}
print &ui_columns_start([ $access{'hosts'} == 2 ? ( "" ) : ( ),
$text{'hosts_ip'},
$text{'hosts_active'},
$text{'hosts_host'} ], undef, 0, \@tds);
foreach $h (&list_hosts()) {
local @cols;
local $lnk;
if ($access{'hosts'} == 2) {
push(@cols, "<a href=\"edit_host.cgi?idx=$h->{'index'}\">".
&html_escape($h->{'address'})."</a>");
$lnk = &ui_link("edit_host.cgi?idx=$h->{'index'}",
&html_escape($h->{'address'}));
}
else {
push(@cols, &html_escape($h->{'address'}));
$lnk = &html_escape($h->{'address'});
}
push(@cols, $lnk);
push(@cols, $h->{'active'} ? $text{'yes'}
: "<font color=red>$text{'no'}</font>");
push(@cols, join(" , ", map { &html_escape($_) }
@{$h->{'hosts'}}));
if ($access{'hosts'} == 2) {

View File

@@ -39,14 +39,19 @@ local $line="";
&open_readfile(HOSTS, $config{'hosts_file'});
while($line=<HOSTS>) {
local $comment = 0;
$line =~ s/\r|\n//g;
if ($line =~ s/^\s*#+\s*//) {
$comment = 1;
}
$line =~ s/#.*$//g;
$line =~ s/\s+$//g;
local(@f)=split(/\s+/, $line);
local($ipaddr)=shift(@f);
local @f = split(/\s+/, $line);
local $ipaddr = shift(@f);
if (check_ipaddress_any($ipaddr)) {
push(@rv, { 'address' => $ipaddr,
'hosts' => [ @f ],
'active' => !$comment,
'line', $lnum,
'index', scalar(@rv) });
}
@@ -56,12 +61,22 @@ close(HOSTS);
return @rv;
}
# make_host_line(&host)
# Internal function to return a line for the hosts file
sub make_host_line
{
local ($host) = @_;
return ($host->{'active'} ? "" : "# ").
$host->{'address'}."\t".join(" ",@{$host->{'hosts'}})."\n";
}
# create_host(&host)
# Add a new host to /etc/hosts
sub create_host
{
local ($host) = @_;
&open_tempfile(HOSTS, ">>$config{'hosts_file'}");
&print_tempfile(HOSTS, $_[0]->{'address'},"\t",join(" ",@{$_[0]->{'hosts'}}),"\n");
&print_tempfile(HOSTS, &make_host_line($host));
&close_tempfile(HOSTS);
}
@@ -69,16 +84,17 @@ sub create_host
# Update the address and hosts of a line in /etc/hosts
sub modify_host
{
local ($host) = @_;
&replace_file_line($config{'hosts_file'},
$_[0]->{'line'},
$_[0]->{'address'}."\t".join(" ",@{$_[0]->{'hosts'}})."\n");
$_[0]->{'line'}, &make_host_line($host));
}
# delete_host(&host)
# Delete a host from /etc/hosts
sub delete_host
{
&replace_file_line($config{'hosts_file'}, $_[0]->{'line'});
local ($host) = @_;
&replace_file_line($config{'hosts_file'}, $host->{'line'});
}
# list_ipnodes()

View File

@@ -231,14 +231,25 @@ else {
&unlock_file($old->{'file'});
}
else {
# Adding a new one (to it's own file)
# Adding a new one (possibly to it's own file)
$iface->{'file'} = $netplan_dir."/".$iface->{'name'}.".yaml";
@lines = ( "network:",
" ethernets:",
@lines );
&lock_file($iface->{'file'});
my $lref = &read_file_lines($iface->{'file'});
push(@$lref, @lines);
my $nline = -1;
my $eline = -1;
for(my $i=0; $i<@$lref; $i++) {
$nline = $i if ($lref->[$i] =~ /^\s*network:/);
$eline = $i if ($lref->[$i] =~ /^\s*ethernets:/);
}
if ($nline < 0) {
$nline = scalar(@$lref);
push(@$lref, "network:");
}
if ($eline < 0) {
$eline = $nline + 1;
splice(@$lref, $nline+1, 0, " ethernets:");
}
splice(@$lref, $eline+1, 0, @lines);
&flush_file_lines($iface->{'file'});
&unlock_file($iface->{'file'});
}

View File

@@ -59,7 +59,8 @@ else {
&can_create_iface() || &error($text{'ifcs_ecannot'});
&can_iface($b) || &error($text{'ifcs_ecannot'});
}
elsif ($in{'name'} =~ /^([a-z]+\d*(s\d*)?(\.\d+)?):(\d+)$/) {
elsif ($in{'name'} =~ /^([a-z]+\d*(s\d*)?(\.\d+)?):(\d+)$/ ||
$in{'name'} =~ /^(en[0-9a-z]+(s\d*)?(\.\d+)?):(\d+)$/) {
# also creating a virtual interface
foreach $eb (@boot) {
if ($eb->{'name'} eq $2 &&
@@ -85,7 +86,8 @@ else {
$b->{'name'} = $b->{'fullname'} = "bond".$in{'name'};
$b->{'bond'} = 1;
}
elsif ($in{'name'} =~/^[a-z]+\d*(s\d*)?(\.\d+)?$/) {
elsif ($in{'name'} =~ /^[a-z]+\d*(s\d*)?(\.\d+)?$/ ||
$in{'name'} =~ /^en[0-9a-z]+(s\d*)?(\.\d+)?$/) {
# creating a real interface
$b->{'name'} = $in{'name'};
$b->{'fullname'} = $in{'name'};

View File

@@ -26,7 +26,8 @@ else {
if ($in{'new'}) {
# saving a host
$host = { 'address' => $in{'address'},
'hosts' => \@h };
'hosts' => \@h,
'active' => $in{'active'} };
&create_host($host);
}
else {
@@ -34,6 +35,7 @@ else {
$host = $hosts[$in{'idx'}];
$host->{'address'} = $in{'address'};
$host->{'hosts'} = \@h;
$host->{'active'} = $in{'active'};
&modify_host($host);
}
}

0
package-updates/create_repo.cgi Normal file → Executable file
View File

View File

@@ -45,6 +45,18 @@ index_manynew=Hi ha $1 paquets disponibles per a instal
index_search=Busca paquets que coincideixin amb:
index_searchok=Busca
index_clear=Mostra'ls Tots
index_tabpkgs=Actualitzacions de Paquets
index_tabscheds=Actualitzacions Planificades
index_tabsrepos=Repositoris de Paquets
index_scheddesc=Aquest formulari es pot utilitzar per instal·lar automàticament actualitzacions de paquets de forma periòdica.
index_reposdesc=Aquesta pàgina et permet de configurar quins repositoris s'utilitzarant per als paquets nous o actualitzats.
index_reposname=Nom del repositori
index_reposenabled=Activat
index_reposurl=URL del Paquet
index_reposdisable=Desactiva els Repositoris
index_reposenable=Activa els Repositoris
index_reposdelete=Suprimeix els Repositoris
index_repoheader=Opcions del nou repositori de paquets
update_title=Actualització de Paquets
update_title2=Instal·lació de Paquets
@@ -91,6 +103,13 @@ log_update=S'han instal
log_sched=S'han activat les actualitzacions periòdiques
log_unsched=S'han desactivat les actualitzacions periòdiques
log_refresh=S'han refrescat els paquets disponibles
log_enable_repos=S'han activat $1 repositoris de paquets
log_disable_repos=S'han desactivat $1 repositoris de paquets
log_delete_repos=S'han suprimit $1 repositoris de paquets
log_enable_repo=S'ha activat el repositori de paquets $1
log_disable_repo=S'ha desactivat el repositori de paquets $1
log_delete_repo=S'ha suprimit el repositori de paquets $1
log_create_repo=S'ha creat el repositori de paquets $1
refresh_title=Refresc de Paquets
refresh_clearing=S'estan buidant els caus del paquet...
@@ -118,4 +137,15 @@ system_csw=CSW (Blastwave)
system_webmin=Mòdul de Webmin
system_usermin=Mòdul d'Usermin
system_tgz=tar.gz de Webmin o Usermin
repos_err_disable=No s'han pogut desactivar els repositories
repos_err_enable=No s'han pogut activar els repositories
repos_err_delete=No s'han pogut suprimir els repositories
repos_err_create=No s'ha pogut crear el repositori
repos_ebutton=No has fet clic a cap botó!
repos_enone=No n'has seleccionat cap
repos_title=Supressió de Repositoris
> repos_rusure=Segur que vols suprimir els $1 repositoris de paquets seleccionats? Els paquets instal·lats d'aquests repositoris encara estaran disponibles, però potser no es podran actualitzar.
repos_ok=Suprimeix-los Ara
__norefs=1

View File

@@ -60,6 +60,7 @@ index_repoheader=New package repository options
update_title=Update Packages
update_title2=Install Packages
update_enone=No packages selected
update_pkg=Now updating $1 ..
update_pkg2=Now installing $1 ..
update_done=Installed package $1 $2.

View File

@@ -682,6 +682,48 @@ sub check_reboot_required
if ($gconfig{'os_type'} eq 'debian-linux') {
return -e "/var/run/reboot-required" ? 1 : 0;
}
elsif ($gconfig{'os_type'} eq 'redhat-linux') {
my $needs_restarting = has_command("needs-restarting");
my $needs_restarting_correct = 0;
if ($needs_restarting) {
($needs_restarting_correct) = `needs-restarting -h` =~ /reboothint/;
}
if ($needs_restarting && $needs_restarting_correct) {
my $ex = &execute_command(
"needs-restarting -r", undef, undef, undef, 0, 1);
return $ex ? 1 : 0;
}
else {
my ($new_kernel_install_time, $last_reboot_time, $new_kernel, $cur_kernel);
&execute_command('rpm -q kernel --qf "%{INSTALLTIME}\n"', undef, \$new_kernel_install_time);
$new_kernel_install_time =~ /(.*$)/;
$new_kernel_install_time = $1;
&execute_command("sed -n '/^btime /s///p' /proc/stat", undef, \$last_reboot_time);
&execute_command("rpm -q --last kernel", undef, \$new_kernel);
$new_kernel =~ /(kernel-\S+)/;
$new_kernel = $1;
$new_kernel =~ s/^\s+|\s+$//g;
&execute_command("uname -r", undef, \$cur_kernel);
$cur_kernel =~ /^(\S+)$/;
# make sure to prevent false positive alerts on custom kernels
&execute_command("rpm -q kernel-$cur_kernel", undef, \$cur_kernel);
$cur_kernel =~ s/^\s+|\s+$//g;
$cur_kernel = undef if ($cur_kernel =~ /not installed/);
if ($new_kernel_install_time && $last_reboot_time &&
$new_kernel_install_time > $last_reboot_time &&
$cur_kernel && $new_kernel && $cur_kernel ne $new_kernel) {
return 1;
}
else {
return 0;
}
}
}
return 0;
}

0
package-updates/save_repos.cgi Normal file → Executable file
View File

View File

@@ -2,7 +2,7 @@
# password_change.cgi
# Actually update a user's password by directly modifying /etc/shadow
BEGIN { push(@INC, ".."); };
BEGIN { push(@INC, "."); };
use WebminCore;
$ENV{'MINISERV_INTERNAL'} || die "Can only be called by miniserv.pl";

View File

@@ -25,7 +25,7 @@ print &ui_form_start("save_manual.cgi", "form-data");
print &ui_hidden("map_name", $in{'map_name'});
print &ui_hidden("file", $file);
print &text('manual_editing', "<tt>$file</tt>"),"<br>\n";
print &ui_table_start();
print &ui_table_start(undef, undef, 2);
print &ui_table_row(undef, &ui_textarea("data", $data, 20, 80), 2);
print &ui_table_end();
print &ui_form_end([ [ "save", $text{'save'} ] ] );

View File

@@ -16,7 +16,7 @@ foreach $pr (@procs) {
$procmap{$p} = $pr;
$argmap{$p} = $pr->{'args'};
$usermap{$p} = $pr->{'user'};
$stimemap{$p} = $pr->{'_stime'};
$stimemap{$p} = &format_stime($pr);
push(@{$children{$pp}}, $p);
$inlist{$pr->{'pid'}}++;
}

View File

@@ -30,7 +30,7 @@ foreach $u (@users) {
}
push(@cols, $pr->{'cpu'});
if ($info_arg_map{'_stime'}) {
push(@cols, $pr->{'_stime'});
push(@cols, &format_stime($pr));
}
push(@cols, &html_escape(&cut_string($pr->{'args'})));
print &ui_columns_row(\@cols);

View File

@@ -28,6 +28,7 @@ if ($ver >= 2) {
}
open(PS, "ps --cols 2048 -eo user$width,ruser$width,group$width,rgroup$width,pid,ppid,pgid,pcpu,vsz,nice,etime,time,stime,tty,args 2>/dev/null |");
$dummy = <PS>;
my @now = localtime(time());
for($i=0; $line=<PS>; $i++) {
chop($line);
$line =~ s/^\s+//g;
@@ -52,6 +53,17 @@ if ($ver >= 2) {
$plist[$i]->{"bytes"} = $w[8]*1024;
$plist[$i]->{"time"} = $w[11];
$plist[$i]->{"_stime"} = $w[12];
if ($w[12] =~ /^(\d+):(\d+)$/ ||
$w[12] =~ /^(\d+):(\d+):(\d+)$/) {
# Started today
$plist[$i]->{"_stime_unix"} =
timelocal($3 || 0, $2, $1, $now[3], $now[4], $now[5]);
}
elsif ($w[12] =~ /^(\S\S\S)\s*(\d+)$/) {
# Started on some other day
$plist[$i]->{"_stime_unix"} =
timelocal(0, 0, 0, $2, &month_to_number($1), $now[5]);
}
$plist[$i]->{"nice"} = $w[9];
$plist[$i]->{"args"} = @w<15 ? "defunct" : join(' ', @w[14..$#w]);
$plist[$i]->{"_group"} = $w[2];

View File

@@ -641,5 +641,21 @@ else {
}
}
# format_stime(&proc)
# Returns the process start time in human-readable format
sub format_stime
{
my ($p) = @_;
if (!$p->{'_stime_unix'}) {
return $p->{'_stime'}
}
elsif (time() - $p->{'_stime_unix'} > 86400) {
return &make_date($p->{'_stime_unix'}, 1);
}
else {
return &make_date($p->{'_stime_unix'});
}
}
1;

View File

@@ -35,6 +35,7 @@ while(<$fh>) {
s/\s+$//;
while(s/\\$//) {
local $cont = <$fh>;
last if (!$cont);
$cont =~ s/\s+$//;
$cont =~ s/^\s+//;
$_ .= $cont;
@@ -43,6 +44,7 @@ while(<$fh>) {
while(/^\s*([^\s=]+)\s*=([^"]*)"([^"]*)$/) {
# Quote in environment variable that is not ended!
local $cont = <$fh>;
last if (!$cont);
$cont =~ s/\r|\n//g;
$_ .= "\n".$cont;
$lnum++;

View File

@@ -8,7 +8,7 @@ acl_conf_misc=Darf erweiterte Einstellungen ver&#228;ndern?
acl_conf_net=Darf Unix Netzwerkoptionen ver&#228;ndern?
acl_conf_pass=Darf Authentifizierungseinstellungen ver&#228;ndern?
acl_conf_print=Darf Druckereinstellungen ver&#228;ndern?
acl_conf_smb=Darf Windows Einstellungen ver&#228;ndern?
acl_conf_smb=Darf Windows Netzwerk-Einstellungen ver&#228;ndern?
acl_copy=Darf Freigaben kopieren?
acl_edit=Bearbeiten
acl_enc_passwd_opts=Einstellungen f&#252;r verschl&#252;sselte Passw&#246;rter.
@@ -66,7 +66,7 @@ bind_users=Auflistung der Benutzer verbieten?
check_group1=$1 : Gruppen werden nur in Samba ab Version 3 unterst&#252;tzt.
check_group2=$1 : Weder der Pfad zu <i>smbgroupedit</i> oder <i>net</i> sind in der <a href='$2'>Modulkonfiguration</a> eingerichtet.
check_user1=$1 : Verschl&#252;sselte Passworte sind in der <a href='$2'>Authentifizierung</a> eingerichtet.
check_user2=$1 : Weder die <i>Samba Passwort-Datei</i> oder der Pfad zu <i>pdbedit</i> sind in der <a href='$2'>Modulkonfiguration</a> eingerichtet.
check_user2=$1 : Weder die <i>Samba Passwort-Datei</i> noch der Pfad zu <i>pdbedit</i> sind in der <a href='$2'>Modulkonfiguration</a> eingerichtet.
config_all=Alle
config_bytes=Bytes
config_mins=Min

View File

@@ -21,8 +21,8 @@ local (@rv, @newpacks);
# Build the command to run
$ENV{'DEBIAN_FRONTEND'} = 'noninteractive';
local $cmd = "$apt_get_command -y ".($force ? " -f" : "")." install $update";
$update = join(" ", map { quotemeta($_) } split(/\s+/, $update));
local $cmd = "$apt_get_command -y ".($force ? " -f" : "")." install $update";
print "<b>",&text('apt_install', "<tt>$cmd</tt>"),"</b><p>\n";
print "<pre>";
&additional_log('exec', undef, $cmd);

View File

@@ -83,12 +83,7 @@ if ($in{'filter'}) {
}
print "<table width=\"100%\">\n";
&traverse("", 0);
print "</table>\n";
print &ui_form_start("ipkg-tree.cgi");
print &ui_submit($text{'index_filter'});
print &ui_textbox("filter", $in{'filter'}, 50);
print &ui_form_end(),"<p>\n";
print "</table><p>\n";
print &ui_link("ipkg-tree.cgi?mode=closeall", $text{'index_close'});
print &ui_link("ipkg-tree.cgi?mode=openall", $text{'index_open'});
if ($in{'filter'}) {
@@ -96,6 +91,10 @@ if ($in{'filter'}) {
print "&nbsp;&nbsp;", &text('index_filtered',$n-$filter,$n+1), "\n";
}
print "<p>\n";
print &ui_form_start("ipkg-tree.cgi");
print &ui_submit($text{'index_filter'});
print &ui_textbox("filter", $in{'filter'}, 50);
print &ui_form_end(),"<p>\n";
&ui_print_footer("", $text{'index_return'});

View File

@@ -22,6 +22,9 @@ index_epackagecheck=El sistema de gesti
index_eupdatecheck=El sistema d'actualització seleccionat no és vàlid: $1.<br>Pot ser que hagis de seleccionar un mètode d'actualització diferent a la pàgina de <a href='$2'>configuració del mòdul</a>.
index_echeckpackage=No s'ha detectat cap sistema de paquets!
index_echeckupdate=No s'ha detectat cap sistema d'actualització!
index_filter=Filtra els Paquets
index_filterclear=Treu el Filtre
index_filtered=S'estan mostrant <tt>$1</tt> paquets de <tt>$2</tt>
search_title=Cerca de Paquet
search_nomatch=No hi ha cap paquet que coincideixi amb '$1'
@@ -237,6 +240,10 @@ apt_search=Busca els paquets que coincideixin amb:
apt_find=Busca a APT...
apt_title=Recerca a APT
apt_name=APT
apt_repo_url=URL base del repositori
apt_repo_path=Components del camí de distribució
apt_repo_eurl=Hi falta l'URL base o bé sembla invàlid
apt_repo_epath=Hi falta el camí de distribució
yum_input=Paquet de YUM
yum_install=S'esta(n) instal·lant el(s) paquet(s) amb l'ordre $1...
@@ -257,6 +264,17 @@ yum_title=Exploraci
yum_name=YUM
yum_enable=Activa el repositori:
yum_none=&lt;Cap&gt;
yum_repo_id=ID del repositori
yum_repo_name=Descripció del repositori
yum_repo_url=URL base dels paquets
yum_repo_gpg=Fitxer de certificat GPG
yum_repo_none=Sense signar
yum_repo_eid=Hi falta l'ID del repositori o bé és invàlid - només espermeten lletres i números
yum_repo_eidclash=L'ID de repositori ja està en ús
yum_repo_ename=Hi falta el nom del repositori
yum_repo_eurl=Hi falt al'URL del repositori o bé és invàlid
yum_repo_egpg=Hi falta el fitxer de certificat GPG o bé no existeix
yum_repo_efile=El fitxer del repositori ja existeix!
urpmi_name=URPMI
urpmi_input=Paquet d'URPMI
@@ -446,8 +464,5 @@ IPKG_install_package=Instal
IPKG_install_packagedesc=Instal·la aquest paquet al teu sistema
IPKG_noupgrade=No hi ha res per actualitzar
IPKG-edit_title=Gestiona el Paquet IPKG
index_filter=Filtra els Paquets
index_filterclear=Esborra el filtre
index_filtered=S'estan mostrant <tt>$1</tt> paquets de <tt>$2</tt>
IPKG_update_avail=Actualització disponible:
IPKG_not_installed=El paquet no està instal·lat

View File

@@ -83,12 +83,7 @@ if ($in{'filter'}) {
}
print "<table width=\"100%\">\n";
&traverse("", 0);
print "</table>\n";
print &ui_form_start("tree.cgi");
print &ui_submit($text{'index_filter'});
print &ui_textbox("filter", $in{'filter'}, 50);
print &ui_form_end(),"<p>\n";
print "</table><p>\n";
print &ui_link("tree.cgi?mode=closeall", $text{'index_close'});
print &ui_link("tree.cgi?mode=openall", $text{'index_open'});
if ($in{'filter'}) {
@@ -96,6 +91,10 @@ if ($in{'filter'}) {
print "&nbsp;&nbsp;", &text('index_filtered',$n-$filter,$n+1), "\n";
}
print "<p>\n";
print &ui_form_start("tree.cgi");
print &ui_submit($text{'index_filter'});
print &ui_textbox("filter", $in{'filter'}, 50);
print &ui_form_end(),"<p>\n";
&ui_print_footer("", $text{'index_return'});

View File

@@ -87,6 +87,7 @@ acl_eusers=Usuaris Auth Externs
acl_eusersall=Tots els usuaris
acl_euserssel=Només els llistats
acl_case=Ignora la caixa
acl_nodns=Desactiva les consultes
acl_eusersre=Expressions Regulars dels Usuaris Auth Externs
acl_asnum=Números AS
acl_rtime=Temps de Refresc

View File

@@ -90,3 +90,5 @@ Added a Module Config option to show the last collected status on the Webmin sys
Added a config option to set a minimum interval between notifications for each monitor.
---- Changes since 1.900 ----
Added support for file ownership and permission checks to the File or Directory monitor.
---- Changes since 1.910 ----
Added a monitor type to check if a bootup action is running or not.

26
status/init-monitor.pl Normal file
View File

@@ -0,0 +1,26 @@
# init-monitor.pl
# Check if a bootup service is running
sub get_init_status
{
return { 'up' => -1 } if (!&foreign_installed("init"));
&foreign_require("init");
local $st = &init::status_action($_[0]->{'action'});
return { 'up' => $st };
}
sub show_init_dialog
{
&foreign_require("init");
local @actions = &init::list_action_names();
print &ui_table_row($text{'init_action'},
&ui_select("action", $_[0]->{'action'}, \@actions));
}
sub parse_init_dialog
{
&depends_check($_[0], "init");
$in{'action'} || &error($text{'init_eaction'});
$_[0]->{'action'} = $in{'action'};
}

View File

@@ -255,6 +255,13 @@ file_efile=Hi falta el nom del fitxer o directori a verificar
file_esize=Mida de fitxer invàlida
file_elarge=Fitxers massa grans: $1
file_esmall=Fitxers massa petits: $1
file_eowner=Fitxers amb propietari incorrecte: $1
file_egroup=Fitxers amb grup incorrecte: $1
file_owner=El propietari del fitxer ha de ser
file_group=El grup del fitxer ha de ser
file_nocheck=Qualsevol cosa
file_perms=Els permisos octals han de ser
file_eperm=Fitxers amb permisos incorrectes: $1
traffic_iface=Interfície a monitoritzar
traffic_bytes=Nombre màxim de bytes/segon

View File

@@ -64,6 +64,7 @@ type_mailserver=Mailserver Response
type_sshd=SSH Server
type_raid=RAID Device Status
type_iface=Network Interface Status
type_init=Bootup Action
type_sensors=LM Sensor Status
type_nut=NUT UPS Value
type_mailq=Mail Queue Size
@@ -349,6 +350,9 @@ raid_other=Other..
iface_iface=Interface to check
init_action=Action to check
init_eaction=No action selected
refresh_title=Refresh Status
refresh_doing=Refreshing the status of all monitors ..
refresh_doing2=Refreshing the status of $1 selected monitors ..

View File

@@ -21,6 +21,7 @@ right_procs=Processos en execuci
right_disk=Espai local en disc
right_used=$1 total, $2 utilitzat
right_used2=$2 utilitzat, $1 garantit, $3 extra
right_used3=$2 utilitzat, $3 en cau, $1 total
right_out=$1&nbsp;de&nbsp;$2
right_fsfull=Atenció! El sistema de fitxers $2 muntat a $1 no té espai lliure al disc!
right_fsnearly=Atenció! El sistema de fitxers $2 muntat a $1 només té $3 d'espai lliure as disc

View File

@@ -223,6 +223,7 @@ if ($info->{'disk_total'} && &show_section('disk')) {
if ($info->{'disk_fs'} && &show_section('disk')) {
foreach my $fs (@{$info->{'disk_fs'}}) {
next if (!$fs->{'total'});
next if ($fs->{'type'} eq 'iso9660');
if ($fs->{'free'} == 0) {
my $msg = &text('right_fsfull',
"<tt>$fs->{'dir'}</tt>",

View File

@@ -30,8 +30,8 @@ if ($config{'cron_mode'} == 0) {
$config{'upshow'} = $in{'show'};
$config{'upmissing'} = $in{'missing'};
$config{'upquiet'} = $in{'quiet'};
$config{'upemail'} = $in{'email'};
!$in{'show'} || $in{'email'} || &error($text{'update_eemail'});
$config{'upemail'} = $in{'upemail'};
!$in{'show'} || $in{'upemail'} || &error($text{'update_eemail'});
&write_file("$module_config_directory/config", \%config);
&unlock_file("$module_config_directory/config");

View File

@@ -160,6 +160,28 @@ closedir(DIR);
return @rv;
}
=head2 list_visible_themes([current-theme])
Lists all themes the user should be able to use, possibly including their
current theme if one is set.
=cut
sub list_visible_themes
{
my ($curr) = @_;
my @rv;
my %done;
foreach my $theme (&list_themes()) {
my $iscurr = $curr && $theme->{'dir'} eq $curr;
next if (-l $root_directory."/".$theme->{'dir'} &&
$theme->{'dir'} =~ /\d+$/ &&
!$iscurr);
next if ($done{$theme->{'desc'}}++ && !$iscurr);
push(@rv, $theme);
}
return @rv;
}
=head2 list_modules
Returns a list of all usermin modules installed and supported on this system.

View File

@@ -1 +1 @@
1.910
1.930

View File

@@ -720,6 +720,7 @@ if ($ENV{'QUERY_STRING'}) {
}
@in = split(/\&/, $in);
foreach my $i (@in) {
$i =~ /\0/ && &error("Null byte in query string");
my ($k, $v) = split(/=/, $i, 2);
if (!$_[2]) {
$k =~ tr/\+/ /;
@@ -1271,11 +1272,11 @@ if (!$_[$i]) {
print "$postbody\n";
}
if ($tconfig{'postbodyinclude'}) {
my ($theme, $overlay) = split(' ', $gconfig{'theme'});
my $file_contents = read_file_contents("$root_directory/$overlay/$tconfig{'postbodyinclude'}");
$file_contents = replace_meta($file_contents);
print $file_contents;
}
my ($theme, $overlay) = split(' ', $gconfig{'theme'});
my $file_contents = read_file_contents("$root_directory/$overlay/$tconfig{'postbodyinclude'}");
$file_contents = replace_meta($file_contents);
print $file_contents;
}
if (defined(&theme_postbody)) {
&theme_postbody(@_);
}
@@ -2309,7 +2310,7 @@ while(1) {
return $anyneg;
}
=head2 http_download(host, port, page, destfile, [&error], [&callback], [sslmode], [user, pass], [timeout], [osdn-convert], [no-cache], [&headers])
=head2 http_download(host, port, page, destfile, [&error], [&callback], [sslmode], [user], [pass], [timeout], [osdn-convert], [no-cache], [&headers])
Downloads data from a HTTP url to a local file or string. The parameters are :
@@ -4592,7 +4593,7 @@ if (defined($ENV{'FOREIGN_MODULE_NAME'}) && $ENV{'FOREIGN_ROOT_DIRECTORY'}) {
}
elsif ($ENV{'SCRIPT_NAME'}) {
my $sn = $ENV{'SCRIPT_NAME'};
$sn =~ s/^$gconfig{'webprefix'}//
$sn =~ s/^$gconfig{'webprefix'}\//\//
if (!$gconfig{'webprefixnoredir'});
if ($sn =~ /^\/([^\/]+)\//) {
# Get module name from CGI path
@@ -4963,6 +4964,7 @@ if ($ENV{'HTTP_X_REQUESTED_WITH'} ne "XMLHttpRequest" &&
}
if (!$trust) {
# Looks like a link from elsewhere .. show an error
$current_theme = undef;
&header($text{'referer_title'}, "", undef, 0, 1, 1);
$prot = lc($ENV{'HTTPS'}) eq 'on' ? "https" : "http";
@@ -4983,6 +4985,7 @@ if (!$trust) {
}
print "<p>\n";
&footer();
exit;
}
$main::no_referers_check++;
@@ -7306,7 +7309,7 @@ elsif ($v[0] eq 'REF') {
elsif ($v[0] eq 'UNDEF') {
$rv = undef;
}
elsif ($v[0] =~ /^OBJECT\s+(.*)$/) {
elsif ($v[0] =~ /^OBJECT\s+([A-Za-z0-9_:]+)$/) {
# An object hash that we have to re-bless
my $cls = $1;
$rv = { };

View File

@@ -82,6 +82,7 @@ log_inmods=M
log_mall=Registra les accions de tots els mòduls
log_modules=Registra només les accions de...
log_global=&lt;Accions globals&gt;
log_sched=Registra les funcions planificades
log_files=Registra els canvis de cada acció fets a fitxers
log_fullfiles=Registra tots els fitxers modificats abans de les accions per a la seva reversió
log_err=No s'han pogut desar les opcions de registre
@@ -465,7 +466,7 @@ upgrade_descsun-pkg=Aquest formulari permet actualitzar tota la instal
upgrade_descgentoo=Aquest formulari et permet actualitzar tota la instal·lació de Webmin a una versió nova traient el paquet actual Gentoo Emerge i instal·lant-ne un de nou. Pots instal·lar-lo a partir d'un fitxer local, un fitxer pujat o a partir de la versió més recent del repositori de Gentoo. Igual que per a l'actualització manual, es conservaran tots els valors de configuració i tots els mòduls de terceres parts.
upgrade_local=Des d'un fitxer local
upgrade_uploaded=Des d'un fitxer pujat
upgrade_url=des d'un URL ftp o http
upgrade_url=des d'un URL FTP o HTTP
upgrade_delete=Suprimeix el directori de la versió anterior després de l'actualització
upgrade_ftp=Versió més recent de www.webmin.com
upgrade_emerge=Versió més recent del repositori Emerge
@@ -887,6 +888,8 @@ advanced_redir=Format de l'URL per a redireccions
advanced_redir1=Només el camí
advanced_redir0=Protocol, host, port i camí
advanced_listdir=Llista els directoris sense fitxer índex
advanced_headers=Capçaleres HTTP extra
advanced_eheader=Les capçaleres han d'estar formatades com a <tt>Header: Valor</tt>
syslog_errorlog=Registre d'errors de Webmin
@@ -1146,7 +1149,7 @@ letsencrypt_echain=No s'ha pogut baixar el certificat encadenat: $1
letsencrypt_echain2=El certificat encadenat descarregat des de $1 està buit
letsencrypt_ecsr=No s'ha pogut generar la petició CSR: $1
letsencrypt_ekeygen=No s'ha pogut generar la clau privada: $1
letsencrypt_enative=S'ha utilitzat anteriorment el client nadiu de Let's Encrypt en aquest sistema, i s'ha de seguir utilitzant per a totes les peticions futures de certificats
letsencrypt_enative=S'ha utilitzat anteriorment el client nadiu de Let's Encrypt (certbot) en aquest sistema, i s'ha de seguir utilitzant per a totes les peticions futures de certificats
announce_hide=Amaga Aquest Anunci

View File

@@ -161,6 +161,7 @@ if (($letsencrypt_cmd && -d "/etc/letsencrypt/accounts") || $wildcard) {
" --manual-public-ip-logging-ok".
" --config $temp".
" --rsa-key-size $size".
" --cert-name ".quotemeta($doms[0]).
($staging ? " --test-cert" : "").
" 2>&1)");
&reset_environment();
@@ -179,6 +180,7 @@ if (($letsencrypt_cmd && -d "/etc/letsencrypt/accounts") || $wildcard) {
" --manual-public-ip-logging-ok".
" --config $temp".
" --rsa-key-size $size".
" --cert-name ".quotemeta($doms[0]).
($staging ? " --test-cert" : "").
" 2>&1)");
&reset_environment();

View File

@@ -219,7 +219,9 @@ elsif (@match) {
if ($anno) {
$cols[$#cols] .= "&nbsp;<img src=images/star.gif>";
}
push(@cols, $minfo->{'desc'}, $act->{'user'}, $act->{'ip'});
push(@cols, $minfo->{'desc'},
&html_escape($act->{'user'}),
&html_escape($act->{'ip'}));
if ($config{'host_search'}) {
push(@cols, $act->{'webmin'});
}

View File

@@ -43,10 +43,10 @@ else {
}
print &ui_table_row($text{'view_user'},
$act->{'user'});
&html_escape($act->{'user'}));
print &ui_table_row($text{'view_ip'},
$act->{'ip'});
&html_escape($act->{'ip'}));
if ($act->{'sid'} ne '-') {
print &ui_table_row($text{'view_sid'},

View File

@@ -362,7 +362,7 @@ if (!glob($ifile."*")) {
}
dbmopen(%$index, $ifile, 0600);
my @st = stat($webmin_logfile);
if (@st && $st[9] > $index->{'lastchange'}) {
if (@st && (!$index->{'lastchange'} || $st[9] > $index->{'lastchange'})) {
# Log has changed .. perhaps need to rebuild
open(LOG, $webmin_logfile);
if ($index->{'lastsize'} && $st[7] >= $index->{'lastsize'}) {