Compare commits

..

178 Commits
1.740 ... 1.760

Author SHA1 Message Date
Jamie Cameron
3430c74fe2 New version bump 2015-06-20 10:31:56 -07:00
Jamie Cameron
16949927d6 Remove dupe string 2015-06-20 10:30:26 -07:00
Jamie Cameron
a8cf0a8e78 Fix missing var 2015-06-19 17:10:02 -07:00
Jamie Cameron
3d5802bcaf Fix missing var 2015-06-19 17:09:06 -07:00
Jamie Cameron
fa3a61c5a7 CLean up todo notes 2015-06-19 16:59:48 -07:00
Jamie Cameron
5d55867393 Completed ACL option to control allowed views for zones: 2015-06-19 16:18:22 -07:00
Jamie Cameron
81f657fa15 UI for selecting views the user can edit domains in 2015-06-18 17:41:36 -07:00
Jamie Cameron
41b8d4da9a changes for 1.750 2015-06-18 13:10:42 -07:00
Jamie Cameron
450264d182 Button to make a zone the default 2015-06-17 20:29:17 -07:00
Jamie Cameron
be4da986ec Use perl to filter out unwanted tables, as _ is a special character in SQL likes https://sourceforge.net/p/webadmin/bugs/4614/ 2015-06-17 19:55:13 -07:00
Jamie Cameron
98c2a76499 German translation updates from Raymond Vetter 2015-06-15 15:53:53 -07:00
Jamie Cameron
f1e2287b3a German translation updates from Raymond Vetter 2015-06-15 15:53:49 -07:00
Jamie Cameron
dfdacb3a26 Finished off zone creation 2015-06-14 19:17:58 -07:00
Jamie Cameron
9924f44c05 Button and script to delete a zone 2015-06-14 19:11:14 -07:00
Jamie Cameron
d055e86901 Form for adding a zone 2015-06-14 17:01:42 -07:00
Jamie Cameron
d9d94fd394 Use the new open-ports command 2015-06-14 16:01:32 -07:00
Jamie Cameron
d35cffade9 Add script to open ports on the command line 2015-06-14 14:23:40 -07:00
Jamie Cameron
cd6939bf8a Detect if firewalld is in use 2015-06-14 13:53:23 -07:00
Jamie Cameron
5672b61358 Script to update zone interfaces 2015-06-14 11:13:34 -07:00
Jamie Cameron
8b564f10e3 German translation updates from Raymond Vetter 2015-06-14 10:39:44 -07:00
Jamie Cameron
39b80ee1ec Function for updating a zone's interface 2015-06-13 17:22:10 -07:00
Jamie Cameron
7e1b9071e1 Logging script 2015-06-13 15:41:19 -07:00
Jamie Cameron
7930a03763 Show interfaces for zone 2015-06-12 20:42:06 -07:00
Jamie Cameron
ae23abc827 German translation updates from Raymond Vetter 2015-06-12 19:50:18 -07:00
Jamie Cameron
f71283ae40 Sometimes the ip command is used to add extra addresses http://virtualmin.com/node/37237 2015-06-10 23:00:50 -07:00
Jamie Cameron
0832cd40a1 Address and netmask could be on the same line http://virtualmin.com/node/37237 2015-06-10 22:57:25 -07:00
Jamie Cameron
aa4532ff1b Start and stop scripts 2015-06-09 22:55:11 -07:00
Jamie Cameron
adecd320f5 initial module changelog 2015-06-09 22:34:27 -07:00
Jamie Cameron
8ec0c144d2 Prepare module for inclusion in standard distribution 2015-06-09 22:32:37 -07:00
Jamie Cameron
b2620accf8 German translation updates from Raymond Vetter 2015-06-09 20:24:43 -07:00
Jamie Cameron
f2d77a7bee Button to apply saved rules 2015-06-08 22:50:34 -07:00
Jamie Cameron
f4bb5a843a CGI to delete firewalld rules 2015-06-08 22:38:01 -07:00
Jamie Cameron
5090c85338 German translation updates from Raymond Vetter 2015-06-08 15:23:41 -07:00
Jamie Cameron
f145fb02cf Script to enable or diosable at boot 2015-06-07 23:10:21 -07:00
Jamie Cameron
cdc89c352a Add module usability check script 2015-06-07 23:02:04 -07:00
Jamie Cameron
4c537d0fd8 Firewall service creation 2015-06-07 22:57:40 -07:00
Jamie Cameron
95a4c2c956 German translation updates from Raymond Vetter 2015-06-07 18:40:51 -07:00
Jamie Cameron
1a4d536351 German translation updates from Raymond Vetter 2015-06-07 18:40:50 -07:00
Jamie Cameron
4e4f82713e Handle zones with no ports 2015-06-07 16:36:47 -07:00
Jamie Cameron
6434f896dc Merge branch 'master' of git@github.com:webmin/webmin 2015-06-07 16:35:26 -07:00
Jamie Cameron
4a3dfb308b Functions for service management 2015-06-07 16:34:08 -07:00
Jamie Cameron
cb2eb0c95d Merge pull request #222 from stuchy3/master
Czech language update
2015-06-07 10:54:10 -07:00
Jan Štourač
b134e9e0d7 Added Czech translation for Gray framed theme 2015-06-07 13:33:48 +02:00
Jan Štourač
28b90e1b37 Added czech language for system-info 2015-06-07 13:24:21 +02:00
Jan Štourač
e9c0383a3c Czech language updated 2015-06-07 13:00:26 +02:00
Jamie Cameron
1118c2bb2f Scripts for saving, creating and deleting firewalld ports 2015-06-06 20:50:05 -07:00
Jamie Cameron
caea0eee60 Add refer checking to xmlrpc.cgi, while still allowing direct access 2015-06-06 10:26:37 -07:00
Jamie Cameron
573d39e146 Fix appending of version to package name https://github.com/webmin/webmin/issues/221 2015-06-06 10:16:03 -07:00
Jamie Cameron
3c41e0e816 Re-factor referer checking code to make it more readable 2015-06-06 07:19:24 -07:00
Jamie Cameron
eb950ff47d Generate new SHA2 key at install time 2015-06-05 20:48:34 -07:00
Jamie Cameron
c9bde07cfd API for listing services 2015-06-04 23:23:43 -07:00
Jamie Cameron
44a1b68426 UI for adding or editing a service 2015-06-04 23:23:15 -07:00
Jamie Cameron
d0ebb3783e Catalan update from Jaume Badiella 2015-06-04 19:29:32 -07:00
Jamie Cameron
f8a9353408 Catalan update from Jaume Badiella 2015-06-04 19:29:18 -07:00
Jamie Cameron
0eae027dbc German translation updates from Raymond Vetter 2015-06-04 19:27:08 -07:00
Jamie Cameron
278ec5cd76 Firewalld edit port page 2015-06-02 21:52:44 -07:00
Jamie Cameron
a6a20642fb Don't autoreply to spam https://sourceforge.net/p/webadmin/usermin-bugs/440/ 2015-06-02 19:48:26 -07:00
Jamie Cameron
7efe201a27 German translation updates from Raymond Vetter 2015-06-02 19:40:23 -07:00
Jamie Cameron
39bb0a681c No need to check deps on an upgrade 2015-06-01 22:55:01 -07:00
Jamie Cameron
2d896443eb Show zones and rules on the first page 2015-06-01 22:54:21 -07:00
Jamie Cameron
a6d1f74f1f German translation updates from Raymond Vetter 2015-05-31 14:12:32 -07:00
Jamie Cameron
8ab1cc4abc skeleton of firewalld module 2015-05-31 10:20:27 -07:00
Jamie Cameron
269bc80ec3 Postfix mail queue function can call error https://github.com/webmin/webmin/issues/218 2015-05-31 09:37:36 -07:00
Jamie Cameron
9871556169 remove un-necessary ports from link https://github.com/webmin/webmin/issues/217 2015-05-31 09:21:51 -07:00
Jamie Cameron
e3ef1b9fce Merge branch 'master' of git@github.com:webmin/webmin 2015-05-30 16:43:53 -07:00
Jamie Cameron
ad9bc2701d Also wrap icons in a div for use by authentic theme https://github.com/webmin/webmin/pull/216 2015-05-30 16:43:39 -07:00
Jamie Cameron
2468ea1001 Merge pull request #216 from qooob/patch-1
Important addition to make icons work with Authentic Theme
2015-05-30 16:41:55 -07:00
Ilia Rostovtsev
cef1b1332a Important addition to make icons work with Authentic Theme
Jamie, ok! It's very complicated to make things work in all possible situations. At the moment it doesn't work as in 90% of cases the certain rules are used. Those are that container for `&generate_icon` should be `<div class="row icons-row></div>`. In case it's done in funky way like in this module, I add extra class `inline-row` to make things work. For example, latest update 13.03 does great with style, that is used in Webmin Servers Index module. You can test it. Try using right mouse clicks for selects.

I strongly recommend, to try to recall all funky ways of using `&generate_icon` like in this module and add  `<div class="row icons-row></div>` wrapper.

It will not affect neither your nor Joe's themes.

Thanks!
2015-05-30 22:01:15 +03:00
Jamie Cameron
ed11ba25c6 fix expansion of IP range https://sourceforge.net/p/webadmin/bugs/4606/ 2015-05-29 17:26:07 -07:00
Jamie Cameron
efae515c1f Russian translations from 2015-05-28 22:13:17 -07:00
Jamie Cameron
a4412fcbe8 Handle case where no skip list is given https://sourceforge.net/p/webadmin/bugs/4609/ 2015-05-28 20:09:20 -07:00
Jamie Cameron
eba13b74c9 German translation updates from Raymond Vetter 2015-05-27 21:46:52 -07:00
Jamie Cameron
3548188c38 Mysqldump can print warnings even if it doesn't fail http://virtualmin.com/node/37195 2015-05-27 19:56:56 -07:00
Jamie Cameron
36968f5362 Add options to disable TLS 1.0, 1.1 and 1.2 in Usermin too https://sourceforge.net/p/webadmin/bugs/4590/ 2015-05-26 21:20:50 -07:00
Jamie Cameron
2b77e8f020 Add options to disable TLS 1.0, 1.1 and 1.2 https://sourceforge.net/p/webadmin/bugs/4590/ 2015-05-26 21:06:06 -07:00
Jamie Cameron
700b4f696e No / is needed 2015-05-26 18:04:01 -07:00
Jamie Cameron
bb24d89ddb Force through the upgrade even if there are missing dependencies 2015-05-25 14:39:44 -07:00
Jamie Cameron
f0c0efb411 Show a nicer message if no entries were found in /etc/inittab https://github.com/webmin/webmin/issues/211 2015-05-23 07:30:44 -07:00
Jamie Cameron
ea7d904d90 If the runlevel couldn't be detected any other way, assume 3 http://virtualmin.com/node/37100 2015-05-22 13:52:34 -07:00
Jamie Cameron
deed37b482 Chrome 43 throws and exception on this line https://github.com/webmin/webmin/issues/210 2015-05-21 17:30:07 -07:00
Jamie Cameron
5cd13920a8 Fix selection of current shared network https://sourceforge.net/p/webadmin/bugs/4601/ 2015-05-20 20:57:59 -07:00
Jamie Cameron
8227e56084 Tell boot systems like systemd that webmin's start script forks into the background 2015-05-19 21:57:20 -07:00
Jamie Cameron
57efdd9a28 use common function 2015-05-18 20:30:25 -07:00
Jamie Cameron
b36d0f955c Don't offer to upgrade when using bukkit 2015-05-18 20:29:46 -07:00
Jamie Cameron
5e5f6cd916 Re-factor jar getting code 2015-05-18 20:16:27 -07:00
Jamie Cameron
4e81ecb659 German translation updates from Raymond Vetter 2015-05-13 21:43:02 -07:00
Jamie Cameron
88679cff5a Fix perl warning https://github.com/webmin/webmin/issues/207 2015-05-12 14:42:15 -07:00
Jamie Cameron
a6901947c2 New version bump 2015-05-10 13:42:47 -07:00
Jamie Cameron
8912154c0b New Postfix version 2015-05-10 13:40:53 -07:00
Jamie Cameron
6b34d179bb changelog for pkgsrc support 2015-05-10 11:00:48 -07:00
Jamie Cameron
bb2f091a17 pkgsrc has no local install mode 2015-05-10 10:50:47 -07:00
Jamie Cameron
dfd337009f Translation function for pkgsrc package names 2015-05-10 10:41:07 -07:00
Jamie Cameron
554cba6eba MacOS is supported now, with pkgsrc 2015-05-10 10:28:46 -07:00
Jamie Cameron
9d3e0e85ba Correct version and description display for packages not installed yet 2015-05-10 10:25:29 -07:00
Jamie Cameron
7d670cc449 More work on MacOS pkgsrc support 2015-05-10 09:57:25 -07:00
Jamie Cameron
0cc0a893a2 Get list of files in a package on MacOS 2015-05-09 21:55:38 -07:00
Jamie Cameron
b7190b1927 Start of work on pkgsrc support 2015-05-09 15:36:55 -07:00
Jamie Cameron
68890d8f2b Remove from the distribution modules for ancient software 2015-05-07 16:50:00 -07:00
Jamie Cameron
03f4c9fd56 Dev version bump 2015-05-05 19:55:50 -07:00
Jamie Cameron
c813b1c068 Allow multiple comma-separated IPs 2015-05-05 18:42:38 -07:00
Jamie Cameron
aafb66e45c changelog for launchd support 2015-05-03 10:23:05 -07:00
Jamie Cameron
8f0d32b764 More changes needed to support launchd 2015-05-03 10:14:03 -07:00
Jamie Cameron
62bf3b6cd4 Change the usermin boot script slightly to work with launchd 2015-05-03 10:10:20 -07:00
Jamie Cameron
58a454dc23 Change the webmin boot script slightly to work with launchd 2015-05-03 10:08:10 -07:00
Jamie Cameron
5a74498b87 Mailcap module needs to access the user's config 2015-05-03 10:07:21 -07:00
Jamie Cameron
ac238e37d1 More work on launchd support for MacOS X 2015-05-02 15:33:36 -07:00
Jamie Cameron
9e4269ebae Add command line option to not fork 2015-05-02 15:09:53 -07:00
Jamie Cameron
dfb0db593d New Debian versions 2015-04-29 19:52:55 -07:00
Jamie Cameron
79e2bf69b4 Show at-boot setting 2015-04-28 21:34:52 -07:00
Jamie Cameron
c153fae3d8 Suppress warnings when gpg doesn't output anything http://virtualmin.com/node/36979 2015-04-28 20:57:18 -07:00
Jamie Cameron
c1105d0ac5 Add support for deleting launchd agents 2015-04-26 17:22:38 -07:00
Jamie Cameron
fdffa9ee42 Use consistent comment type 2015-04-26 16:52:34 -07:00
Jamie Cameron
cb008888bf Launchd action creation now working 2015-04-26 16:30:27 -07:00
Jamie Cameron
86ce05ec3b UI for adding a launchd agent 2015-04-26 15:35:31 -07:00
Jamie Cameron
a42fbc5bd0 Param for MAC address is actually hwaddress https://sourceforge.net/p/webadmin/bugs/4589/ 2015-04-26 15:28:09 -07:00
Jamie Cameron
441b9f1502 Show detailed CPU information on MacOS 2015-04-26 10:19:09 -07:00
Jamie Cameron
1e0100b424 Show memory usage in bytes too 2015-04-26 10:03:05 -07:00
Jamie Cameron
288a377e71 Collect RAM and swap usage on macos 2015-04-26 09:50:50 -07:00
Jamie Cameron
12e2aecbda Give credit for translations 2015-04-26 09:23:44 -07:00
Jamie Cameron
2d83ca6cdf Catalan update from Jaume Badiella 2015-04-26 09:23:16 -07:00
Jamie Cameron
f498f36bef Catalan update from Jaume Badiella 2015-04-26 09:23:04 -07:00
Jamie Cameron
2eb957fc04 German translation updates from Raymond Vetter 2015-04-26 09:21:06 -07:00
Jamie Cameron
9cff0de208 Correct function's documented return type 2015-04-25 22:00:29 -07:00
Jamie Cameron
4b2ba48e58 Work on launchd support 2015-04-25 22:00:07 -07:00
Jamie Cameron
d47ee41c32 Fix remote host to run command on after failure in the case where there are multiple hosts http://virtualmin.com/node/36948 2015-04-25 21:54:38 -07:00
Jamie Cameron
22f3d49e5c Show password DB type 2015-04-25 15:02:00 -07:00
Jamie Cameron
a10dd02a49 New Mint versions 2015-04-23 17:03:37 -07:00
Jamie Cameron
52196635a3 Use reload command by default to avoid cache re-read https://sourceforge.net/p/webadmin/bugs/4588/ 2015-04-21 14:52:10 -07:00
Jamie Cameron
59efd239ea Devel version bump 2015-04-17 12:39:51 -07:00
Jamie Cameron
1a1deef64a UNit names can have spaces or funny characters at the start 2015-04-16 19:04:25 -07:00
Jamie Cameron
132ea695bc UNit names can have spaces or funny characters at the start 2015-04-16 19:03:50 -07:00
Jamie Cameron
743d0d59ad Multi-part TXT records are not automatically joined by a space, so when creating an SPF record this has to be explicitly added 2015-04-15 21:19:52 -07:00
Jamie Cameron
7162dbaa8e Detect more IPsec variants 2015-04-15 18:47:25 -07:00
Jamie Cameron
c378e60ec7 Show process sizes using sensible units https://github.com/webmin/webmin/issues/202 2015-04-13 22:34:02 -07:00
Jamie Cameron
9612e05536 give credit for norwegian 2015-04-10 22:31:09 -07:00
Jamie Cameron
f38442bbae Sort users by login 2015-04-08 17:18:22 -07:00
Jamie Cameron
cf0ddafbe0 German translation updates from Raymond Vetter 2015-04-07 20:31:04 -07:00
Jamie Cameron
1727c9917d German translation updates from Raymond Vetter 2015-04-07 20:30:57 -07:00
Jamie Cameron
18d16d7639 Don't append the architecture un-necessarily, as this breaks upgrades that change it http://virtualmin.com/node/36740 2015-04-05 16:19:53 -07:00
Jamie Cameron
3d20f8c56e Jails can apparently have no actions http://virtualmin.com/node/36768 2015-04-05 14:45:13 -07:00
Jamie Cameron
d4264be5fd A max tick time of -1 means unlimited 2015-04-05 12:05:32 -07:00
Jamie Cameron
6d553a10ad Allow max ticks time to be edited 2015-04-05 12:02:40 -07:00
Jamie Cameron
5f4180cf13 Update docs to modern day 2015-04-02 21:08:27 -07:00
Jamie Cameron
4aedfdb006 Update docs to modern day 2015-04-02 21:07:28 -07:00
Jamie Cameron
a3658ff653 fix wording 2015-04-02 20:59:39 -07:00
Jamie Cameron
d040242a7e Also use yum updateinfo to get security updates 2015-04-02 19:12:50 -07:00
Jamie Cameron
019e5e15e6 Semicolon can be a comment character too 2015-04-02 16:57:38 -07:00
Jamie Cameron
2a8797c49c Merge pull request #199 from tandrup/httpOnly-cookies
Add httpOnly to cookies on login page. Solves #4565.
2015-04-01 21:03:44 -07:00
Jamie Cameron
ab1095e529 Disallow TRACE requests, which we don't even support 2015-04-01 16:54:38 -07:00
Mads Mætzke Tandrup
30168f57bb Add httpOnly to cookies on login page. Solves #4565.
Add httpOnly to pam_login and session_login to avoid security scans reporting false positives on cookies without httpOnly
2015-04-01 14:37:02 +02:00
Jamie Cameron
0a2eb1d520 --to-source can be followed by just a :port 2015-03-29 21:47:13 -07:00
Jamie Cameron
ec4f05ec5f Use correct permissions for MH format too 2015-03-29 18:09:18 -07:00
Jamie Cameron
7a9b4d0b2b Use correct permissions when moving email between users http://virtualmin.com/node/36696 2015-03-29 18:07:40 -07:00
Jamie Cameron
b7b6624ee8 Fix escaping of % in commands http://virtualmin.com/node/36673 2015-03-27 15:06:42 -07:00
Jamie Cameron
f455c24054 Make Net::SSLeay mandatory 2015-03-26 20:30:52 -07:00
Jamie Cameron
ee94c220da German translation updates from Raymond Vetter 2015-03-26 20:30:08 -07:00
Jamie Cameron
615f97f47e German translation updates from Raymond Vetter 2015-03-26 20:29:51 -07:00
Jamie Cameron
1ef26769b6 IPfilter live output can contain inet before 'from' http://virtualmin.com/node/36645 2015-03-26 17:22:29 -07:00
Jamie Cameron
04ed6406e7 Add separate command before/after blacklist refresh http://virtualmin.com/node/36643 2015-03-25 23:10:09 -07:00
Jamie Cameron
882dcb7384 Don't wrap regexps unexpectedly http://virtualmin.com/node/36656 2015-03-25 10:26:33 -07:00
Jamie Cameron
f29f13f817 Fix enabling of command block 2015-03-24 20:23:25 -07:00
Jamie Cameron
0a8abc529b German translation updates from Raymond Vetter 2015-03-23 20:22:53 -07:00
Jamie Cameron
72e2faa5b6 Dev version bump 2015-03-21 20:17:35 -07:00
Jamie Cameron
8291e1c98d Under NSLCD, scope and filter are separate directives 2015-03-21 20:09:06 -07:00
Jamie Cameron
df3fa20d6f Add button to restart LDAP client daemon, which is needed to apply settings 2015-03-21 18:01:08 -07:00
Jamie Cameron
4f532659b3 changelog for ldap fixes 2015-03-21 17:20:42 -07:00
Jamie Cameron
e1f086944d Permissions fix 2015-03-21 17:17:53 -07:00
Jamie Cameron
a13bce59e3 Fixes needed for CentOS 7 support 2015-03-21 17:17:39 -07:00
Jamie Cameron
ad46361cb0 for systemd services, the name may have .service appended 2015-03-21 17:11:19 -07:00
Jamie Cameron
fd5f09a816 Add Net::SSLeay as optional dependency to the Webmin RPM 2015-03-21 16:44:51 -07:00
Jamie Cameron
c38570cb9d In some cases, RPM mamay not list the file in the rpm --dump output if there are multiple hard links to it 2015-03-21 13:39:33 -07:00
Jamie Cameron
324732d948 Norwegian update from Stein-Aksel Basma 2015-03-20 15:45:13 -07:00
Jamie Cameron
78c5892c6a Handle different format for base directive in NSLCD http://virtualmin.com/node/36531 2015-03-18 21:53:55 -07:00
Jamie Cameron
a1e74e6659 Deal with long user/group names by requesting UIDs instead 2015-03-17 22:34:15 -07:00
Jamie Cameron
4caa56aa80 Deal with long user/group names by requesting UIDs instead 2015-03-17 22:33:31 -07:00
Jamie Cameron
95c494d9fc Handle un-formatted MAC addresses 2015-03-16 19:01:14 -07:00
Jamie Cameron
2dd92dc2b7 Allow default match mode to be configured 2015-03-16 18:59:29 -07:00
Jamie Cameron
f5580c4046 Exclude release scripts from modules 2015-03-15 11:49:39 -07:00
205 changed files with 7499 additions and 2423 deletions

View File

@@ -217,3 +217,12 @@ More German translation updates, thanks to Raymond Vetter.
Norwegian updates, thanks to Stein-Aksel Basma.
The awesome new Authentic Theme by Ilia Rostovtsev is now included in the Webmin package.
Catalan translation updates from Jaume Badiella.
---- Changes since 1.740 ----
Norwegian updates, thanks to Stein-Aksel Basma.
Catalan translation updates from Jaume Badiella.
More German translation updates, thanks to Raymond Vetter.
---- Changes since 1.750 ----
Norwegian updates, thanks to Stein-Aksel Basma.
Catalan translation updates from Jaume Badiella.
More German translation updates, thanks to Raymond Vetter.
Fixed an XSS bug that allowed xmlrpc.cgi to be abused by a malicious link.

2
README
View File

@@ -1,4 +1,4 @@
Webmin Version 1.740
Webmin Version 1.760
--------------------
Webmin is a web-based interface for system administration for Unix.
Using any browser that supports tables and forms, you can setup user

View File

@@ -257,7 +257,11 @@ else{ /* end IE initialization, try to deal with real browsers now ;-) */
/**
* <p>Emulate IE's onreadystatechange attribute</p>
*/
XMLDocument.prototype.onreadystatechange = null;
try {
XMLDocument.prototype.onreadystatechange = null;
} catch(err) {
// May fail on Chrome 43+
}
/**
* <p>Emulates IE's readyState property, which always gives an integer from 0 to 4:</p>
* <ul><li>1 == LOADING,</li>

View File

@@ -220,6 +220,8 @@ foreach $v (@virt) {
if (&find_vdirective("SSLEngine", $vm, $conf, 1) eq "on") {
$prot = "https";
}
$sp = undef if ($sp == 80 && $prot eq "http" ||
$sp == 443 && $prot eq "https");
push(@vurl, $sp ? "$prot://$sn:$sp/" : "$prot://$sn/");
}
@@ -368,10 +370,12 @@ else {
print "<table width=100% cellpadding=5>\n";
for($i=0; $i<@vname; $i++) {
print "<tr class='mainbody ".($i % 2 ? 'row0' : 'row1')."'> <td valign=top align=center nowrap>";
print '<div class="row icons-row inline-row">';
&generate_icon("images/virt.gif", $vname[$i], $vlink[$i],
undef, undef, undef,
$vidx[$i] && $access{'vaddr'} ?
&ui_checkbox("d", $vidx[$i]) : "");
print "</div>\n";
print "</td> <td valign=top>\n";
print "$vdesc[$i]<br>\n";
print "<table width=100%><tr>\n";

1001
apache/lang/ru.UTF-8 Normal file

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@@ -35,6 +35,7 @@ edit_schedyes=S
edit_mods=Mòduls a copiar
edit_dest=Destinació de la còpia
edit_mods2=Mòduls a restaurar
edit_other2=Altres fitxers a restaurar
edit_dest2=Restaura de
edit_what=Inclou en la còpia
edit_webmin=Fitxers de configuració dels mòduls Webmin
@@ -83,6 +84,7 @@ backup_failed=... ha fallat! $1
backup_done=... completa. La mida final de la còpia és de $1 i conté $2 fitxers.
restore_err=La restauració ha fallat
restore_emods=No has seleccionat cap mòdul ni cap altre fitxer
restore_title=Configuració de Restauració
restore_doing=S'està començant la restauració dels fitxers de configuració de mòduls de $1...
restore_testing=S'està extraient el contingut de la còpia de $1...

View File

@@ -43,6 +43,7 @@ edit_mods=Moduler som skal sikkerhetskopieres
edit_mods2=Moduler som skal gjenopprettes
edit_nofiles=Tjener konfigurasjonsfiler
edit_other=Andre listede filer ..
edit_other2=Andre filer &#229; gjenopprette
edit_post=Post-sikkerhetskopi kommando
edit_pre=Pre-sikkerhetskopi kommando
edit_return=backup skjema
@@ -99,6 +100,7 @@ nice_upload=lastet opp fil
restore_doing=Starter gjenoppretting av modulkonfigurasjonsfiler fra $1 ..
restore_done=.. fullf&#248;rt. $1 filer ble gjenopprettet.
restore_done2=.. filer i sikkerhetskopien er :
restore_emods=Ingen moduler eller andre filer valgt
restore_err=Gjenoppretting feilet
restore_failed=.. feilet! $1
restore_testing=Pakker ut innhold av sikkerhetskopi fra $1 ..

View File

@@ -42,6 +42,26 @@ foreach $v (sort { $a->{'value'} cmp $b->{'value'} } @views) {
}
print "</select></td> </tr></table></td></tr>\n";
if (@views) {
print "<tr> <td valign=top><b>$text{'acl_inviews'}</b></td>\n";
print "<td colspan=3>\n";
print &ui_radio("inviews_def", $_[0]->{'inviews'} eq "*" ? 1 : 0,
[ [ 1, $text{'acl_vall'} ],
[ 0, $text{'acl_vsel'} ] ]),"<br>\n";
print "<select name=inviews multiple size=4 width=150>\n";
local ($v, %vcan);
map { $vcan{$_}++ } split(/\s+/, $_[0]->{'inviews'});
printf "<option value='%s' %s>%s</option>\n",
"_", $vcan{"_"} ? "selected" : "",
"&lt;".$text{'acl_toplevel'}."&gt;";
foreach $v (sort { $a->{'value'} cmp $b->{'value'} } @views) {
printf "<option value='%s' %s>%s</option>\n",
$v->{'value'},
$vcan{$v->{'value'}} ? "selected" : "", $v->{'value'};
}
print "</select></td></tr>\n";
}
print "<tr> <td><b>$text{'acl_types'}</b></td> <td colspan=3>\n";
printf "<input type=radio name=types_def value=1 %s> %s\n",
$_[0]->{'types'} ? "" : "checked", $text{'acl_types1'};
@@ -204,6 +224,8 @@ elsif ($in{'zones_def'} == 2) {
else {
$_[0]->{'zones'} = join(" ", split(/\0/, $in{'zones'}));
}
$_[0]->{'inviews'} = $in{'inviews_def'} ? "*" :
join(" ", split(/\0/, $in{'inviews'}));
$_[0]->{'types'} = $in{'types_def'} ? undef : $in{'types'};
$_[0]->{'master'} = $in{'master'} || 0;
$_[0]->{'slave'} = $in{'slave'} || 0;

View File

@@ -879,8 +879,20 @@ elsif ($access{'zones'} =~ /^\!/) {
else {
# List of allowed zones
local $ok;
foreach (split(/\s+/, $access{'zones'})) {
$ok++ if ($_ eq $zn || ($vn && $_ eq $vn));
foreach my $z (split(/\s+/, $access{'zones'})) {
$ok++ if ($z eq $zn || ($vn && $z eq $vn));
}
return 0 if (!$ok);
}
# Check allowed view
if ($access{'inviews'} eq '*') {
# All views are OK
}
else {
local $ok;
foreach my $v (split(/\s+/, $access{'inviews'})) {
$ok++ if ($v eq ($vn || "_"));
}
return 0 if (!$ok);
}

View File

@@ -294,7 +294,10 @@ edit_espfinclude='$1' no
edit_espfredirect='$1' no és un nom de domini alternatiu vàlid
edit_espfexp='$1' és un nom de registre vàlid per a un missatge de rebuig
edit_ensec3value2=Hi falfa el nombre d'iteracions o bé no és numèric
edit_ensec3value2=Hi falta la sal o bé no és base64
edit_ensec3value3=Hi falta la sal no base64 o bé és incorrecta
edit_edmarcpct=El percentatge de missatges ha de ser un enter entre 0 i 100
edit_edmarcrua=Hi falta l'adreça de la informació agregada
edit_edmarcruf=Hi falta l'adreça de la informació forense
text_title=Edició del Fitxer de Registres
text_title2=Visualització del Fitxer de Registres
@@ -374,6 +377,7 @@ type_HINFO=Informaci
type_NSEC3PARAM=Paràmetres DNSSEC
type_TXT=Text
type_SPF=Remitent Permès des de
type_DMARC=DMARC
type_WKS=Servei Conegut (WKS)
type_RP=Persona Responsable
type_PTR=Adreça Inversa
@@ -390,6 +394,7 @@ edit_MX=Servidor de Correu
edit_HINFO=Informació del Host
edit_TXT=Text
edit_SPF=Remitent Permès des de
edit_DMARC=DMARC
edit_WKS=Servei Conegut (WKS)
edit_RP=Persona Responsable
edit_PTR=Adreça Inversa
@@ -407,6 +412,7 @@ recs_MX=Servidor de Correu
recs_HINFO=Informació del Host
recs_TXT=Text
recs_SPF=Remitent Permès des de
recs_DMARC=DMARC
recs_WKS=Servei Conegut (WKS)
recs_RP=Persona Responsable
recs_PTR=Adreça Inversa
@@ -442,6 +448,7 @@ value_KEY2=Protocol
value_KEY3=Algoritme
value_KEY4=Dades de la clau
value_SPF1=Especificació SPF
value_DMARC1=Especificació DMARC
value_NSEC3PARAM1=Algoritme de hash
value_NSEC3PARAM2=Banderes NSEC3
value_NSEC3PARAM3=Nombre d'iteracions del hash
@@ -468,6 +475,18 @@ value_spfredirect=Utilitza un registre SPF d'un domini alternatiu
value_spfnoredirect=Utilitza el registre d'aquest domini
value_spfexp=Registre TXT pel al motiu del rebuig
value_spfnoexp=Cap
value_dmarcnone=No prenguis cap acció
value_dmarcquar=Posa el coreu en quarantena
value_dmarcreject=Rebutja el correu
value_dmarcp=Política per als correus que no passen SPF o DKIM
value_dmarcpct=Percentatge de missatges a aplicar-hi la política
value_dmarcrua=Envia la informació agregada a
value_dmarcruf=Envia la informació forense a
value_dmarcsp=Política dels subdominis
value_dmarcnop=Igual que aquest domini
value_dmarcaspf=Requereix alineació SPF estricta
value_dmarcadkim=Requereix alineació DKIM estricta
value_dmarcnor=No ho enviïs
warn=Avisa
fail=Falla
@@ -805,6 +824,9 @@ log_dnssec=S'ha canviat la resignatura de la clau
convert_err=No s'ha pogut convertir la zona
convert_efile=Cal especificar un fitxer de registres abans de poder convertir una zona esclava a una de mestra.
convert_efilesize=El fitxer de resistres $1 no existeix o bé està buit
convert_ebinary=L'ordre necessària per convertir una zona esclava binària a format text mestre no està instal·lada
convert_ecompile=La conversió de format binari a text ha fallat: $1
whois_title=Informació WHOIS
whois_header=Resultat de l'ordre $1...
@@ -864,9 +886,9 @@ vdelete_move=Despla
gen_title=Generadors de Registres
gen_desc=Aquesta pàgina permet definir generadors, cadascun dels quals crearà múltiples registres en aquesta zona utilitzant un comptador incremental. Això pot ser útil per a delegar parts de la zona inversa a un altre servidor.
gen_range=Abast
gen_name=Patró d'adreça
gen_name=Patró del nom de registre
gen_type=Tipus
gen_value=Patró de nom de host
gen_value=Patró del valor de registre
gen_cmt=Comentari
gen_skip=cada
gen_show=Mostra els registres generats

View File

@@ -506,6 +506,8 @@ acl_zones=Domains this user can edit
acl_zall=All zones
acl_zsel=Selected zones..
acl_znsel=All except selected..
acl_inviews=Views this user can edit domains in
acl_toplevel=Outside any view
acl_master=Can create master zones?
acl_slave=Can create slave/stub zones?
acl_forward=Can create forward zones?

View File

@@ -749,6 +749,7 @@ local $rvword;
while(@rv) {
my $w = shift(@rv);
if (length($rvword)+length($w)+1 >= 255) {
$rvword .= " ";
push(@rvwords, $rvword);
$rvword = "";
}

View File

@@ -28,6 +28,7 @@ edit_cmdowner=Ausf&#252;hren als Benutzer
edit_cmdtimeout=Timeout
edit_controlall=Alle Adressen
edit_controlallow=Erlaube Verbindungen von
edit_controlauto=Befehl, um nach Zeitplan auszuf&#252;hren
edit_controldef=Globale Definitionen
edit_controldeny=Verbiete Verbindungen von
edit_controldom=Dom&#228;nenname
@@ -81,6 +82,7 @@ edit_files_create=Erstelle Datei
edit_files_fixall=Behebe alle Dateien
edit_files_fixdirs=Behebe Verzeichnisse
edit_files_fixplain=Behebe normale Dateien
edit_files_linkchildren=Verlinke Kinder
edit_files_touch=Erstelle Dateien
edit_files_warnall=Warnungen &#252;ber alle Dateien
edit_files_warndirs=Warne &#252;ber Verzeichnisse
@@ -98,6 +100,7 @@ edit_filesowner=Setze Besitzer auf
edit_filesrec=Rekursionstiefe
edit_grant=$edit_admit
edit_grantdir=Verzeichnis
edit_granthosts=Hosts und Host-Muster
edit_groupmems=Mitglieder
edit_groupname=Gruppenname
edit_groups=Gruppendefinitionen
@@ -140,6 +143,7 @@ edit_tidyage=Altersbeschr&#228;nkung
edit_tidyage0=$1 ist mehr als $2 Tage
edit_tidyage1=Jedes Alter
edit_tidyatime=Zugriffszeit
edit_tidyctime=Inhalt Zeit
edit_tidydir=Verzeichnis zum s&#228;ubern
edit_tidymtime=&#196;nderungszeit
edit_tidynew=F&#252;ge ein Verzeichnis zum s&#228;ubern hinzu

View File

@@ -4,7 +4,6 @@ category=cluster
desc_ca=Motor de Configuració
desc_es=Motor de Configuración
desc_de=Konfigurations-Automat
longdesc=Configure the CFengine program, for checking and maintaining various system-administration settings.
desc_fr=Moteur de configuration
os_support=!windows
desc_sv=Konfigurations Motor
@@ -12,6 +11,5 @@ desc_cz=Konfigura
desc_nl=Configuratie Engine
desc_cz.UTF-8=KonfiguraÄ<61>­ stroj
desc_pl=Konfiguracja silnika
longdesc_ms_MY=Konfigurasi program CFengine, untuk memeriksa dan mengekalkan tetapan sistem pentadbiran pelbagai
desc_ms_MY=Enjin Konfigurasi
desc_no=Konfigurasjonsmotor

View File

@@ -1,6 +1,6 @@
index_title=Canvi d'Idioma i Tema
index_lang=Idioma de la interfície d'usuari de Webmin
index_langglobal=Idioma global ($1)
index_langglobal=Idioma global ... $1 ($2)
index_langset=Tria personal...
index_theme=Tema de la interfície d'usuari de Webmin
index_overlay=Capa del tema

View File

@@ -20,7 +20,7 @@ index_dlang=spr&#229;ket modulene vises i
index_dpass=passordet brukt til &#229; logge inn p&#229;
index_dtheme=temaet som kontrollerer Webmins utseende
index_lang=Webmin UI spr&#229;k
index_langglobal=Globalt spr&#229;k ($1)
index_langglobal2=Globalt spr&#229;k .. $1 ($2)
index_langset=Personlig valg
index_ok=Lagre endringer
index_overlay=Tema overstyring

View File

@@ -65,6 +65,7 @@ foreach $m (@ARGV) {
$flags = !-r $file ? "chf" : "rhf";
system("cd /tmp/create-module && find . -name .svn | xargs rm -rf");
system("cd /tmp/create-module && find . -name '*~' -o -name '*.rej' -o -name '*.orig' -o -name '.*.swp' | xargs rm -rf");
system("cd /tmp/create-module && find . -name RELEASE -o -name RELEASE.sh | xargs rm -rf");
unlink("/tmp/create-module/$subdir/IDEAS");
system("cd /tmp/create-module && find . -name \\*.svn-work | xargs rm -rf");
system("cd /tmp/create-module && find . -name \\*.svn-base | xargs rm -rf");

View File

@@ -1407,8 +1407,8 @@ sub extract_input
local ($cmd) = @_;
$cmd =~ s/\\%/\0/g;
local ($cmd, $input) = split(/\%/, $cmd, 2);
$cmd =~ s/\0/%/g;
$input =~ s/\0/%/g;
$cmd =~ s/\0/\\%/g;
$input =~ s/\0/\\%/g;
return ($cmd, $input);
}

View File

@@ -79,6 +79,8 @@ else {
&convert_range($job);
$rangeable = 1;
($command, $input) = &extract_input($job->{'command'});
$command =~ s/\\%/%/g;
$input =~ s/\\%/%/g;
@lines = split(/%/, $input);
print &ui_table_row($text{'edit_command'},
&ui_textbox("cmd", $command, 60));

View File

@@ -122,6 +122,8 @@ foreach $u (@ulist) {
local $max = $config{'max_len'} || 10000;
local ($cmd, $input) =
&extract_input($job->{'command'});
$cmd =~ s/\\%/%/g;
$input =~ s/\\%/%/g;
$cmd = length($cmd) > $max ?
&html_escape(substr($cmd, 0, $max))." ..." :
$cmd !~ /\S/ ? "BLANK" : &html_escape($cmd);

View File

@@ -964,17 +964,13 @@ return $file || $config{'pid_file'};
sub expand_ip_range
{
local ($s, $e) = @_;
local @rs = split(/\./, $s);
local @re = split(/\./, $e);
&foreign_require("net");
local $si = &net::ip_to_integer($s);
local $ei = &net::ip_to_integer($e);
return ( ) if ($si > $ei);
local @rv;
for(my $i=$rs[0]; $i<=$re[0]; $i++) {
for(my $j=$rs[1]; $j<=$re[1]; $j++) {
for(my $k=$rs[2]; $k<=$re[2]; $k++) {
for(my $l=$rs[3]; $l<=$re[3]; $l++) {
push(@rv, "$i.$j.$k.$l");
}
}
}
for(my $i=$si; $i<=$ei; $i++) {
push(@rv, &net::integer_to_ip($i));
}
return @rv;
}

View File

@@ -72,12 +72,12 @@ print "</td></tr>\n";
if (!defined($in{'ret'})) {
print "<tr><td valign=middle><b>$text{'esub_shnet'}</b></td>\n";
print "<td valign=middle>";
my @shn;
push(@shn, [ "", "&lt;$text{'esub_none'}&gt;", ( $s_parent ? "" : "selected" ) ]);
foreach $s (&find("shared-network", $conf)) {
push(@shn, [ $s->{'index'}, ( &can('rw', \%access, $s) ? $s->{'values'}->[0] : "" ), ( $s eq $s_parent ? "" : "selected" ) ]);
}
print &ui_select("parent", undef, \@shn);
my @shn;
push(@shn, [ "", "&lt;$text{'esub_none'}&gt;" ]);
foreach $s (&find("shared-network", $conf)) {
push(@shn, [ $s->{'index'}, ( &can('rw', \%access, $s) ? $s->{'values'}->[0] : "" ) ]);
}
print &ui_select("parent", $s_parent ? $s_parent->{'index'} : "", \@shn);
print "</td>\n";
}
else {

View File

@@ -72,9 +72,10 @@ if ($st[7] != $config{'dhcpd_size'} || $st[9] != $config{'dhcpd_mtime'}) {
# Create lookup type HTML
# XXX change text, add to lookup_*
$matches = ui_select("match", undef, [ [0,$text{'index_match0'},"selected"],
[1,$text{'index_match1'},""],
[2,$text{'index_match2'},""] ]);
$matches = ui_select("match", $config{'match_default'} || 0,
[ [0, $text{'index_match0'} ],
[1, $text{'index_match1'} ],
[2, $text{'index_match2'} ] ]);
# get top-level hosts
foreach $h (&find("host", $conf)) {

View File

@@ -80,6 +80,10 @@ else {
if ($in{'hardware'} =~ /^([0-9a-f]{2})([0-9a-f]{2}).([0-9a-f]{2})([0-9a-f]{2}).([0-9a-f]{2})([0-9a-f]{2}).([0-9a-f]{2})([0-9a-f]{2})$/i) {
$in{'hardware'} = "$1:$2:$3:$4:$5:$6";
}
# Handle an Ethernet address with no formatting at all
if ($in{'hardware'} =~ /^([0-9a-f]{2})([0-9a-f]{2})([0-9a-f]{2})([0-9a-f]{2})([0-9a-f]{2})([0-9a-f]{2})$/i) {
$in{'hardware'} = "$1:$2:$3:$4:$5:$6";
}
$in{'hardware'} =~ /^([0-9a-f]{1,2}:)*[0-9a-f]{1,2}$/i ||
&error(&text('shost_invalidhwa', $in{'hardware'},
$in{'hardware_type'}) );

View File

@@ -18,7 +18,6 @@ desc_ja_JP.euc=BIND 4 DNS
depends=bind8
desc_ru_RU=BIND 4 DNS Ñåðâåð
desc_ca=Servidor DNS BIND 4
longdesc=Create and edit domains and DNS records.
desc_zh_TW.UTF-8=BIND 4 DNS 伺æœ<C3A6>器
desc_zh_CN.UTF-8=BIND 4 DNS æœ<C3A6>务器
desc_ja_JP.UTF-8=BIND 4 DNS ãµãƒ¼ãƒ<C3A3>

View File

@@ -42,13 +42,13 @@ else {
# Regexp to match
my $fail = &find_value("failregex", $def);
print &ui_table_row($text{'filter_fail'},
&ui_textarea("fail", $fail, 5, 80, "hard")."<br>\n".
&ui_textarea("fail", $fail, 5, 80, "off")."<br>\n".
$text{'filter_desc'});
# Regexp to not match
my $ignore = &find_value("ignoreregex", $def);
print &ui_table_row($text{'filter_ignore'},
&ui_textarea("ignore", $ignore, 5, 80, "hard"));
&ui_textarea("ignore", $ignore, 5, 80, "off"));
print &ui_table_end();
if ($in{'new'}) {

View File

@@ -116,6 +116,7 @@ my @rv;
while(<$fh>) {
s/\r|\n//g;
s/^\s*#.*$//;
s/^\s;.*$//;
if (/^\[([^\]]+)\]/) {
# Start of a section
$sect = { 'name' => $1,

View File

@@ -74,7 +74,6 @@ else {
push(@opts, split(/\s+/, $in{"others_$i"}));
push(@actions, $in{"action_$i"}."[".join(", ", @opts)."]");
}
@actions || &error($text{'jail_eactions'});
# Split and validate log file paths
my @logpaths = split(/\r?\n/, $in{'logpath'});
@@ -110,7 +109,8 @@ else {
# Save directives within the section
&save_directive("enabled", $in{'enabled'} ? 'true' : 'false', $jail);
&save_directive("filter", $in{'filter'}, $jail);
&save_directive("action", join("\n", @actions), $jail);
&save_directive("action", @actions ? join("\n", @actions)
: undef, $jail);
&save_directive("logpath", join("\n", @logpaths), $jail);
foreach my $f ("maxretry", "findtime", "bantime") {
&save_directive($f, $in{$f."_def"} ? undef : $in{$f}, $jail);

View File

@@ -87,6 +87,7 @@ else {
$ucount > $config{'max_users'});
}
endpwent() if ($gconfig{'os_type'} ne 'hpux');
@users = sort { $a->[1]->[0] cmp $b->[1]->[0] } @users;
if (!@users) {
# None found
print "<br><b>$text{'index_none'}</b><p>\n";

View File

@@ -1,5 +1,5 @@
virtualmin_spam=Camí complet del programa de consulta de spam d'usuaris de Virtualmin,3,No està instal·lat,40
virtualmin_config=Camí complet del directori de configuració de Virtualmin,3,No instal·lat
virtualmin_config=Camí complet del directori de configuracio de Virtualmin,3,No instal·lat
virtualmin_spam=Camí complet del programa de consulta d'usuaris de spam de Virtualmin,3,No instal·lat,40
warn_procmail=Mostra un avís si Procmail no està instal·lat,1,1-Sí,0-No
forward_procmail=Crea fitxer .forward per executar procmail,1,1-Sí,0-No
alias_files=Camí complet dels fitxers d'àlies globals,9,40,3,\t

View File

@@ -155,7 +155,7 @@ if (($table->{'name'} eq 'nat' && $rule->{'chain'} ne 'PREROUTING' &&
&can_jump("SNAT")) {
if ($rule->{'j'}->[1] eq 'SNAT') {
if ($rule->{'to-source'}->[1] =~
/^([0-9\.]+)(\-([0-9\.]+))?(:(\d+)(\-(\d+))?)?$/) {
/^([0-9\.]+)?(\-([0-9\.]+))?(:(\d+)(\-(\d+))?)?$/) {
$sipfrom = $1;
$sipto = $3;
$spfrom = $5;

View File

@@ -49,6 +49,7 @@ if (!$config{'direct'} && &foreign_check("init")) {
# rules, and offer to create a save file from them
@livetables = &get_iptables_save("iptables-save 2>/dev/null |");
&shorewall_message(\@livetables);
&firewalld_message(\@livetables);
if (!$config{'direct'} &&
(!-s $iptables_save_file || $in{'reset'}) && $access{'setup'}) {
@tables = @livetables;
@@ -420,3 +421,13 @@ if ($filter->{'defaults'}->{'shorewall'}) {
}
}
sub firewalld_message
{
local ($filter) = grep { $_->{'name'} eq 'filter' } @{$_[0]};
if ($filter->{'defaults'}->{'INPUT_ZONES'}) {
print "<b><center>",
&text('index_firewalld', "$gconfig{'webprefix'}/firewalld/"),
"</b></center><p>\n";
}
}

View File

@@ -23,6 +23,7 @@ apply_err=Fehlgeschlagen die Konfiguration anzuwenden
apply_remote=Fehler von $1 : $2
bootup_ecannot=Es ist Ihnen nicht erlaubt die Firewall beim Booten zu aktivieren oder zu deaktivieren
clear_ecannot=Es ist Ihnen nicht erlaubt die Regeln zu leeren
clear_rusure=Sind Sie sicher, dass Sie alle $2 Regeln von Kette $1 l&#246;schen m&#246;chten?
clear_title=Regeln leeren
cluster_add=F&#252;ge Server hinzu
cluster_delete=Ausgew&#228;hltes l&#246;schen
@@ -36,6 +37,7 @@ cluster_return=Cluster Server
cluster_title=Cluster Firewall Server
delete_ecannot=Es ist Ihnen nicht erlaubt die Regeln zu l&#246;schen
delete_ok=L&#246;sche jetzt
delete_rusure=Sind Sie sicher, dass Sie die Kette $1 l&#246;schen m&#246;chten? $2 Regeln werden in ihr gel&#246;scht.
delete_title=L&#246;sche Regel
desc_always=Immer
desc_and=und
@@ -170,6 +172,7 @@ index_auto5=Blockiere alles ausgenommen Ports die f&#252;r virtuelles Hosting be
index_bootup=Aktiviere beim Booten
index_bootupdesc=&#196;ndert die Option, um zu kontrollieren, ob Ihre Firewall beim Booten aktiviert ist oder nicht.
index_cclear=L&#246;sche alle Regeln
index_cdelete=L&#246;sche Kette
index_cdeletesel=L&#246;sches ausgew&#228;hltes
index_chain=Regel $1
index_chain_forward=Weitergeleitete Pakete (FORWARD) - Gilt nur f&#252;r Pakete, die dieser Host weitergeleitet hat
@@ -182,11 +185,13 @@ index_cluster=Cluster Server
index_clusterdesc=Klicken Sie auf diese Schaltfl&#228;che, um zus&#228;tzliche Webmin-Server einzurichten, mit denen die Firewall-Konfiguration automatisch kopiert werden.
index_cmovesel=Verschiebe ausgew&#228;hlte
index_comm=Kommentar
index_crename=Benenne Kette um
index_desc=Bedingung
index_ecommand=Der Befehl $1 wurde nicht auf Ihrem System gefunden. Webmin ben&#246;tigt diesen Befehl um IPtables zu konfigurieren.
index_editing=Regel Datei $1
index_ekernel=Ein Fehler ist beim &#220;berpr&#252;fen Ihrer aktuellen IPtables-Konfiguration aufgetreten : $1 Dies k&#246;nnte darauf hindeuten, dass Ihr Kernel IPtables nicht unterst&#252;tzt.
index_existing=Webmin hat erkannt, dass $1 IPtables Firewall-Regel(n) derzeit in Benutzung sind, die nicht in der Datei $2 gespeichert wurden. Diese Regeln wurden vermutlich von einem Skript einrichtet, jedoch dieses Modul nicht in der Lage ist, dieses zu lesen und zu bearbeiten.<p>Wenn Sie dieses Modul benutzen wollen, um Ihre IPtables-Firewall verwalten zu lassen, klicken Sie auf die Schaltfl&#228;che unten, um die bestehenden Regeln zu einer Sicherungsdatei zu konvertieren und anschlie&#223;end Ihr bestehendes Firewall-Skript zu deaktivieren.
index_firewalld=Warnung! Es scheint, dass FirewallD verwendet wird, um das Firewall-System zu generieren. Vielleicht sollten Sie die <a href='$1'>FirewallD Firewall-Modul</a> verwenden.
index_header=Firewall Konfiguration von $1
index_headerex=Bestehende Firewall Konfiguration
index_jump=F&#252;hre Regel $1 aus
@@ -199,6 +204,7 @@ index_jump_masquerade=Maskieren
index_jump_queue=<font color=#0000ff>Userspace</font>
index_jump_redirect=Leite um
index_jump_reject=<font color=#ff4400>Zur&#252;ckweisen</font>
index_jump_return=Beende Kette
index_jump_snat=Quell NAT
index_move=Verschieben
index_policy=Setze Standard-Aktion auf:
@@ -227,17 +233,24 @@ log_bootdown=Firewall beim Booten deaktiviert
log_bootup=Firewall beim Booten aktiviert
log_convert=Bestehende Firewall konvertiert
log_openports=Firewallports $1 ge&#246;ffnet
log_rename_chain=Kette $1 in Tabelle $2 umbenannt
log_setup=Firewall eingerichtet
log_unapply=Konfiguration zur&#252;ckgesetzt
move_chain=Aktuelle &#196;nderung
move_count=Regeln ausgew&#228;hlt
move_dest=Ziel-Kette
move_header=Regel Verschiebe-Optionen
move_ok=Verschiebe jetzt
move_title=Verschiebe Regeln
new_ecannot=Es ist Ihnen nicht erlaubt Ketten zu erstellen
new_ename=Fehlender oder ung&#252;ltiger Ketten-Name
new_err=Fehlgeschlagen eine Regel zu erstellen
new_etaken=Eine Regeln mit diesem Namen existiert bereits
redhat_einstalled=Kein <tt>iptables</tt> Systemstart Aktion wurde festgestellt, was darauf hinweist, dass das IPtables-Paket nicht auf Ihrem System installiert ist.
redhat_eoutput=Ein Fehler ist beim Abrufen des IPtables Status von dem Befehl $1 aufgetreten. Dies ist wahrscheinlich darauf zur&#252;ckzuf&#252;hren, dass Ihr System so konfiguriert wurde, IPchains anstelle von IPtables zu benutzen.
rename_chain=Aktueller Name
rename_count=Regel in Kette
rename_ecannot=Es ist Ihnen nicht erlaubt Ketten umzubenennen
rename_name=Neuer Name
rename_none=Nichts
rename_ok=Umbenenne jetzt

View File

@@ -68,6 +68,7 @@ index_auto5=Block all except ports used for virtual hosting, on interface:
index_auto=Setup Firewall
index_add=Add
index_shorewall=Warning! It appears that Shorewall is being used to generate your system's firewall. Maybe you should use the <a href='$1'>Shoreline Firewall module</a> instead.
index_firewalld=Warning! It appears that FirewallD is being used to generate your system's firewall. Maybe you should use the <a href='$1'>FirewallD module</a> instead.
index_reset=Reset Firewall
index_resetdesc=Click this button to clear all existing firewall rules and set up new rules for a basic initial configuration.
index_cluster=Cluster Servers

View File

@@ -21,3 +21,4 @@ desc_no=Linux brannmur
desc_hu=Linux tûzfal (Iptables)
longdesc_ms_MY=Mengkonfigurasi firewall linux menggunakan iptables. Membenarkan untuk mengubah kesemua jadual, kunci, aturan dan pilihan.
desc_ms_MY=Firewall Linux
longdesc_de=Konfiguriert eine Linux-Firewall mit iptables. Erm&#246;glicht die Bearbeitung aller Tabellen, Ketten, Regeln und Optionen.

View File

@@ -116,7 +116,8 @@ else {
if ($table->{'name'} eq 'nat' && $rule->{'chain'} ne 'PREROUTING' &&
$rule->{'chain'} ne 'OUTPUT') {
if ($rule->{'j'}->[1] eq 'SNAT' && !$in{'snatdef'}) {
&check_ipaddress($in{'sipfrom'}) ||
(!$in{'sipfrom'} && !$in{'sipto'}) ||
&check_ipaddress($in{'sipfrom'}) ||
&error($text{'save_esipfrom'});
!$in{'sipto'} || &check_ipaddress($in{'sipto'}) ||
&error($text{'save_esipto'});
@@ -406,9 +407,13 @@ else {
sub check_ipmask
{
return &to_ipaddress($_[0]) ||
$_[0] =~ /^([0-9\.]+)\/([0-9\.]+)$/ &&
&to_ipaddress("$1") &&
(&check_ipaddress("$2") || ($2 =~ /^\d+$/ && $2 <= 32));
foreach my $w (split(/,/, $_[0])) {
my $ok = &to_ipaddress($w) ||
$w =~ /^([0-9\.]+)\/([0-9\.]+)$/ &&
&to_ipaddress("$1") &&
(&check_ipaddress("$2") || ($2 =~ /^\d+$/ && $2 <= 32));
return 0 if (!$ok);
}
return 1;
}

2
firewalld/CHANGELOG Normal file
View File

@@ -0,0 +1,2 @@
---- Changes since 1.750 ----
First version of this module, for configuring allowed ports and services in FirewallD.

18
firewalld/bootup.cgi Executable file
View File

@@ -0,0 +1,18 @@
#!/usr/local/bin/perl
# Enable or disable firewalld at boot time
use strict;
use warnings;
require './firewalld-lib.pl';
our (%in, %config);
&ReadParse();
&foreign_require("init");
if ($in{'boot'}) {
&init::enable_at_boot($config{'init_name'});
}
else {
&init::disable_at_boot($config{'init_name'});
}
&webmin_log($in{'boot'} ? "bootup" : "bootdown");
&redirect("index.cgi?zone=".&urlize($in{'zone'}));

2
firewalld/config Normal file
View File

@@ -0,0 +1,2 @@
firewall_cmd=firewall-cmd
init_name=firewalld

2
firewalld/config.info Normal file
View File

@@ -0,0 +1,2 @@
firewall_cmd=Full path to firewall-cmd program,0
init_name=FirewallD init script name,0

2
firewalld/config.info.de Normal file
View File

@@ -0,0 +1,2 @@
firewall_cmd=Voller Pfad zum firewall-cmd Programm,0
init_name=FirewallD init&#45;script&#45;Name,0

77
firewalld/create_zone.cgi Normal file
View File

@@ -0,0 +1,77 @@
#!/usr/local/bin/perl
# Create a new zone, and add some allowed ports to it
use strict;
use warnings;
require 'firewalld-lib.pl';
our (%text, %in);
&ReadParse();
&error_setup($text{'zone_err'});
# Validate inputs
$in{'name'} =~ /^[a-z0-9\.\_\-]+$/i || &error($text{'zone_ename'});
my @zones = &list_firewalld_zones();
my ($clash) = grep { $_->{'name'} eq $in{'name'} } @zones;
$clash && &error($text{'zone_eclash'});
# Add the zone
my $err = &create_firewalld_zone($in{'name'});
&error($err) if ($err);
# Find the Webmin port
my @webminports;
if (&foreign_installed("webmin")) {
&foreign_require("webmin");
my @socks = &webmin::get_miniserv_sockets();
@webminports = &unique(map { $_->[1] } @webminports);
}
else {
@webminports = ( $ENV{'SERVER_PORT'} || 10000 );
}
# Work out which ports to allow
my (@addports, @addservs);
if ($in{'mode'} == 1) {
# Copy from another zone
my ($source) = grep { $_->{'name'} eq $in{'source'} } @zones;
@addports = @{$source->{'ports'}};
@addservs = @{$source->{'services'}};
}
elsif ($in{'mode'} >= 2) {
# SSH, Webmin and Ident
push(@addports, "ssh/tcp", "auth/tcp");
foreach my $webminport (@webminports) {
push(@addports, $webminport."-".($webminport+10)."/tcp");
}
if ($in{'mode'} >= 3) {
# High ports
push(@addports, "1024-65535/tcp");
}
if ($in{'mode'} >= 4) {
# Other virtual hosting ports
push(@addports, "53/tcp", "53/udp"); # DNS
push(@addports, "80/tcp", "443/tcp"); # HTTP
push(@addports, "25/tcp", "587/tcp"); # SMTP
push(@addports, "20/tcp", "21/tcp"); # FTP
push(@addports, "110/tcp", "995/tcp"); # POP3
push(@addports, "143/tcp", "220/tcp", "993/tcp"); # IMAP
push(@addports, "20000/tcp"); # Usermin
}
}
# Add the ports and services
my $zone = { 'name' => $in{'name'} };
foreach my $p (@addports) {
my $err = &create_firewalld_port($zone, split(/\//, $p));
&error($err) if ($err);
}
foreach my $s (@addservs) {
my $err = &create_firewalld_service($zone, $s);
&error($err) if ($err);
}
&webmin_log("create", "zone", $in{'name'});
&redirect("index.cgi?zone=".&urlize($in{'name'}));

View File

@@ -0,0 +1,21 @@
#!/usr/local/bin/perl
# Make a zone the default
use strict;
use warnings;
require 'firewalld-lib.pl';
our (%text, %in);
&ReadParse();
&error_setup($text{'defzone_err'});
# Get the zone
my @zones = &list_firewalld_zones();
my ($zone) = grep { $_->{'name'} eq $in{'zone'} } @zones;
$zone || &error($text{'port_ezone'});
# Make the default
my $err = &default_firewalld_zone($zone);
&error($err) if ($err);
&webmin_log("default", "zone", $zone->{'name'});
&redirect("index.cgi?zone=".&urlize($zone->{'name'}));

View File

@@ -0,0 +1,32 @@
#!/usr/local/bin/perl
# Delete multiple ports or services
use strict;
use warnings;
require 'firewalld-lib.pl';
our (%in, %text);
&error_setup($text{'delete_err'});
&ReadParse();
my @d = split(/\0/, $in{'d'});
@d || &error($text{'delete_enone'});
my @zones = &list_firewalld_zones();
my ($zone) = grep { $_->{'name'} eq $in{'zone'} } @zones;
$zone || &error($text{'port_ezone'});
foreach my $d (@d) {
my @w = split(/\//, $d);
my $err;
if ($w[0] eq "port") {
$err = &delete_firewalld_port($zone, $w[1], $w[2]);
}
elsif ($w[0] eq "service") {
$err = &delete_firewalld_service($zone, $w[1]);
}
else {
next;
}
&error(&text('delete_edel', $d, $err)) if ($err);
}
&webmin_log("delete", "rules", scalar(@d));
&redirect("index.cgi?zone=".&urlize($zone->{'name'}));

39
firewalld/delete_zone.cgi Normal file
View File

@@ -0,0 +1,39 @@
#!/usr/local/bin/perl
# Delete a zone, after asking for confirmation
use strict;
use warnings;
require 'firewalld-lib.pl';
our (%text, %in);
&ReadParse();
&error_setup($text{'delzone_err'});
# Get the zone
my @zones = &list_firewalld_zones();
my ($zone) = grep { $_->{'name'} eq $in{'zone'} } @zones;
$zone || &error($text{'port_ezone'});
$zone->{'default'} && &error($text{'delzone_edefault'});
if ($in{'confirm'}) {
# Just do it
my $err = &delete_firewalld_zone($zone);
&error($err) if ($err);
&webmin_log("delete", "zone", $zone->{'name'});
&redirect("index.cgi");
}
else {
# Ask first
&ui_print_header(undef, $text{'delzone_title'}, "");
print &ui_confirmation_form("delete_zone.cgi",
&text('delzone_rusure', "<tt>$zone->{'name'}</tt>",
scalar(@{$zone->{'ports'}}),
scalar(@{$zone->{'services'}})),
[ [ 'zone', $zone->{'name'} ] ],
[ [ 'confirm', $text{'delete'} ] ],
);
&ui_print_footer("index.cgi?zone=".&urlize($in{'zone'}),
$text{'index_return'});
}

68
firewalld/edit_port.cgi Normal file
View File

@@ -0,0 +1,68 @@
#!/usr/local/bin/perl
# Show a form to edit one port or port range
use strict;
use warnings;
require 'firewalld-lib.pl';
our (%in, %text);
&ReadParse();
# Get the zone and rule
my @zones = &list_firewalld_zones();
my ($zone) = grep { $_->{'name'} eq $in{'zone'} } @zones;
$zone || &error($text{'port_ezone'});
my ($mode, $ports, $proto, $port, $portlow, $porthigh);
if (!$in{'new'}) {
&ui_print_header(undef, $text{'port_edit'}, "");
($ports, $proto) = split(/\//, $in{'id'});
if ($ports =~ /^(\d+)\-(\d+)$/) {
$mode = 1;
($portlow, $porthigh) = ($1, $2);
}
else {
$mode = 0;
$port = $ports;
}
}
else {
&ui_print_header(undef, $text{'port_create'}, "");
$mode = 0;
$proto = "tcp";
}
print &ui_form_start("save_port.cgi", "post");
print &ui_hidden("zone", $in{'zone'});
print &ui_hidden("id", $in{'id'});
print &ui_hidden("new", $in{'new'});
print &ui_table_start($text{'port_header'}, undef, 2);
# Zone name
print &ui_table_row($text{'port_zone'},
"<tt>".&html_escape($zone->{'name'})."</tt>");
# Port number or range
print &ui_table_row($text{'port_port'},
&ui_radio_table("mode", $mode,
[ [ 0, $text{'port_mode0'},
&ui_textbox("port", $port, 6) ],
[ 1, $text{'port_mode1'},
&ui_textbox("portlow", $portlow, 6)." - ".
&ui_textbox("porthigh", $porthigh, 6) ] ]));
# Protocol name
print &ui_table_row($text{'port_proto'},
&ui_select("proto", $proto,
[ [ "tcp", "TCP" ],
[ "udp", "UDP" ] ], 1, 0, 1));
print &ui_table_end();
if ($in{'new'}) {
print &ui_form_end([ [ undef, $text{'create'} ] ]);
}
else {
print &ui_form_end([ [ undef, $text{'save'} ],
[ 'delete', $text{'delete'} ] ]);
}
&ui_print_footer("index.cgi?zone=".&urlize($zone->{'name'}),
$text{'index_return'});

47
firewalld/edit_serv.cgi Normal file
View File

@@ -0,0 +1,47 @@
#!/usr/local/bin/perl
# Show a form to edit one service
use strict;
use warnings;
require 'firewalld-lib.pl';
our (%in, %text);
&ReadParse();
# Get the zone and rule
my @zones = &list_firewalld_zones();
my ($zone) = grep { $_->{'name'} eq $in{'zone'} } @zones;
$zone || &error($text{'port_ezone'});
my $serv;
if (!$in{'new'}) {
&ui_print_header(undef, $text{'serv_edit'}, "");
$serv = $in{'id'};
}
else {
&ui_print_header(undef, $text{'serv_create'}, "");
}
print &ui_form_start("save_serv.cgi", "post");
print &ui_hidden("zone", $in{'zone'});
print &ui_hidden("id", $in{'id'});
print &ui_hidden("new", $in{'new'});
print &ui_table_start($text{'serv_header'}, undef, 2);
# Zone name
print &ui_table_row($text{'port_zone'},
"<tt>".&html_escape($zone->{'name'})."</tt>");
# Service name
print &ui_table_row($text{'serv_name'},
&ui_select("serv", $serv, [ &list_firewalld_services() ]));
print &ui_table_end();
if ($in{'new'}) {
print &ui_form_end([ [ undef, $text{'create'} ] ]);
}
else {
print &ui_form_end([ [ undef, $text{'save'} ],
[ 'delete', $text{'delete'} ] ]);
}
&ui_print_footer("index.cgi?zone=".&urlize($zone->{'name'}),
$text{'index_return'});

220
firewalld/firewalld-lib.pl Normal file
View File

@@ -0,0 +1,220 @@
# Functions for managing firewalld
BEGIN { push(@INC, ".."); };
use strict;
use warnings;
use WebminCore;
&init_config();
do 'md5-lib.pl';
our ($module_root_directory, %text, %config, %gconfig);
our %access = &get_module_acl();
# check_firewalld()
# Returns an error message if firewalld is not installed, undef if all is OK
sub check_firewalld
{
&has_command($config{'firewall_cmd'}) ||
return &text('check_ecmd', "<tt>".$config{'firewall_cmd'}."</tt>");
return undef;
}
# is_firewalld_running()
# Returns 1 if the server is running, 0 if not
sub is_firewalld_running
{
my $ex = system("$config{'firewall_cmd'} --state >/dev/null 2>&1 </dev/null");
return $ex ? 0 : 1;
}
# list_firewalld_zones([active-only])
# Returns an array of firewalld zones, each of which is a hash ref with fields
# like services and ports
sub list_firewalld_zones
{
my ($active) = @_;
my @rv;
my $out = &backquote_command("$config{'firewall_cmd'} --list-all-zones ".
($active ? "" : "--permanent ")."</dev/null 2>&1");
if ($?) {
&error("Failed to list zones : $out");
}
my $zone;
foreach my $l (split(/\r?\n/, $out)) {
if ($l =~ /^(\S+)(\s+\(.*\))?/) {
# New zone
$zone = { 'name' => $1,
'default' => $2 ? 1 : 0 };
push(@rv, $zone);
}
elsif ($l =~ /^\s+(\S+):\s*(.*)/ && $zone) {
# Option in some zone
$zone->{$1} = [ split(/\s+/, $2) ];
}
}
return @rv;
}
# list_firewalld_services()
# Returns an array of known service names
sub list_firewalld_services
{
my $out = &backquote_command("$config{'firewall_cmd'} --get-services </dev/null 2>&1");
if ($?) {
&error("Failed to list services : $out");
}
$out =~ s/\r|\n//g;
return split(/\s+/, $out);
}
# create_firewalld_port(&zone, port|range, proto)
# Adds a new allowed port to a zone. Returns undef on success or an error
# message on failure
sub create_firewalld_port
{
my ($zone, $port, $proto) = @_;
my $out = &backquote_logged("$config{'firewall_cmd'} ".
"--zone ".quotemeta($zone->{'name'})." ".
"--permanent --add-port ".
quotemeta($port)."/".quotemeta($proto)." 2>&1");
return $? ? $out : undef;
}
# delete_firewalld_port(&zone, port|range, proto)
# Delete one existing port from a zone. Returns undef on success or an error
# message on failure
sub delete_firewalld_port
{
my ($zone, $port, $proto) = @_;
my $out = &backquote_logged("$config{'firewall_cmd'} ".
"--zone ".quotemeta($zone->{'name'})." ".
"--permanent --remove-port ".
quotemeta($port)."/".quotemeta($proto)." 2>&1");
return $? ? $out : undef;
}
# create_firewalld_service(&zone, service)
# Adds a new allowed service to a zone. Returns undef on success or an error
# message on failure
sub create_firewalld_service
{
my ($zone, $service) = @_;
my $out = &backquote_logged("$config{'firewall_cmd'} ".
"--zone ".quotemeta($zone->{'name'})." ".
"--permanent --add-service ".
quotemeta($service)." 2>&1");
return $? ? $out : undef;
}
# delete_firewalld_service(&zone, service)
# Delete one existing service from a zone. Returns undef on success or an error
# message on failure
sub delete_firewalld_service
{
my ($zone, $service) = @_;
my $out = &backquote_logged("$config{'firewall_cmd'} ".
"--zone ".quotemeta($zone->{'name'})." ".
"--permanent --remove-service ".
quotemeta($service)." 2>&1");
return $? ? $out : undef;
}
# apply_firewalld()
# Make the current saved config active
sub apply_firewalld
{
my $out = &backquote_logged("$config{'firewall_cmd'} --reload 2>&1");
return $? ? $out : undef;
}
# stop_firewalld()
# Shut down the firewalld service
sub stop_firewalld
{
&foreign_require("init");
my ($ok, $err) = &init::stop_action($config{'init_name'});
return $ok ? undef : $err;
}
# start_firewalld()
# Shut down the firewalld service
sub start_firewalld
{
&foreign_require("init");
my ($ok, $err) = &init::start_action($config{'init_name'});
return $ok ? undef : $err;
}
# list_system_interfaces()
# Returns the list of all interfaces on the system
sub list_system_interfaces
{
&foreign_require("net");
my @rv = map { $_->{'name'} } &net::active_interfaces();
push(@rv, map { $_->{'name'} } &net::boot_interfaces());
return &unique(@rv);
}
# update_zone_interfaces(&zone, &interface-list)
# Update the interfaces a zone applies to
sub update_zone_interfaces
{
my ($zone, $newifaces) = @_;
my $oldifaces = $zone->{'interfaces'};
foreach my $i (&list_system_interfaces()) {
my $inold = &indexof($i, @$oldifaces) >= 0;
my $innew = &indexof($i, @$newifaces) >= 0;
my $args;
if ($inold && !$innew) {
# Remove from this zone
$args = "--remove-interface ".quotemeta($i);
}
elsif (!$inold && $innew) {
# Add to from this zone
$args = "--add-interface ".quotemeta($i);
}
else {
next;
}
my $cmd = "$config{'firewall_cmd'} ".
"--zone ".quotemeta($zone->{'name'})." ".
"--permanent ".$args;
my $out = &backquote_logged($cmd." 2>&1 </dev/null");
return $out if ($?);
}
return undef;
}
# create_firewalld_zone(name)
# Add a new zone with the given name
sub create_firewalld_zone
{
my ($name) = @_;
my $cmd = "$config{'firewall_cmd'} --permanent --new-zone ".quotemeta($name);
my $out = &backquote_logged($cmd." 2>&1 </dev/null");
return $? ? $out : undef;
}
# delete_firewalld_zone(&zone)
# Removes the specified zone
sub delete_firewalld_zone
{
my ($zone) = @_;
my $cmd = "$config{'firewall_cmd'} --permanent --delete-zone ".
quotemeta($zone->{'name'});
my $out = &backquote_logged($cmd." 2>&1 </dev/null");
return $? ? $out : undef;
}
# default_firewalld_zone(&zone)
# Makes the specified zone the default
sub default_firewalld_zone
{
my ($zone) = @_;
my $cmd = "$config{'firewall_cmd'} --set-default-zone ".
quotemeta($zone->{'name'});
my $out = &backquote_logged($cmd." 2>&1 </dev/null");
return $? ? $out : undef;
}
1;

BIN
firewalld/images/icon.gif Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.8 KiB

147
firewalld/index.cgi Normal file
View File

@@ -0,0 +1,147 @@
#!/usr/local/bin/perl
# Show all firewalld rules and zones
use strict;
use warnings;
require 'firewalld-lib.pl';
our (%in, %text, %config, %access, $base_remote_user);
&ReadParse();
if ($in{'addzone'}) {
# Redirect to zone creation form
&redirect("zone_form.cgi?zone=".&urlize($in{'zone'}));
return;
}
if ($in{'delzone'}) {
# Redirect to zone deletion form
&redirect("delete_zone.cgi?zone=".&urlize($in{'zone'}));
return;
}
if ($in{'defzone'}) {
# Make a zone the default
&redirect("default_zone.cgi?zone=".&urlize($in{'zone'}));
return;
}
&ui_print_header(undef, $text{'index_title'}, "", undef, 1, 1);
# Is firewalld working?
my $err = &check_firewalld();
if ($err) {
&ui_print_endpage(&text('index_cerr', $err));
return;
}
# Get rules and zones
my @zones = &list_firewalld_zones();
@zones || &error($text{'index_ezones'});
my $zone;
if ($in{'zone'}) {
($zone) = grep { $_->{'name'} eq $in{'zone'} } @zones;
}
else {
($zone) = grep { $_->{'default'} } @zones;
}
$zone ||= $zones[0];
my @azones = &list_firewalld_zones(1);
my ($azone) = grep { $_->{'name'} eq $zone->{'name'} } @azones;
# Show zone selector
print &ui_form_start("index.cgi");
print "<b>$text{'index_zone'}</b> ",
&ui_select("zone", $zone->{'name'},
[ map { [ $_->{'name'},
$_->{'name'}.($_->{'default'} ? ' (default)' : '') ]}
@zones ], 1, 0, 0, 0,
"onChange='form.submit()'")," ",
&ui_submit($text{'index_zoneok'})," &nbsp; ",
&ui_submit($text{'index_zonedef'}, "defzone")," ",
&ui_submit($text{'index_zonedel'}, "delzone")," &nbsp; ",
&ui_submit($text{'index_zoneadd'}, "addzone")," ",
"<p>\n";
print &ui_form_end();
# Show allowed ports and services in this zone
my @links = ( &ui_link("edit_port.cgi?new=1&zone=".&urlize($zone->{'name'}),
$text{'index_padd'}),
&ui_link("edit_serv.cgi?new=1&zone=".&urlize($zone->{'name'}),
$text{'index_sadd'}) );
if (@{$zone->{'services'}} || @{$zone->{'ports'}}) {
my @tds = ( "width=5" );
unshift(@links, &select_all_link("d", 1),
&select_invert_link("d", 1));
print &ui_form_start("delete_rules.cgi", "post");
print &ui_hidden("zone", $zone->{'name'});
print &ui_links_row(\@links);
print &ui_columns_start([ "", $text{'index_type'}, $text{'index_port'},
$text{'index_proto'} ], 100, 0, \@tds);
foreach my $s (@{$zone->{'services'}}) {
my $url = "edit_serv.cgi?id=".&urlize($s).
"&zone=".&urlize($zone->{'name'});
print &ui_checked_columns_row([
&ui_link($url, $text{'index_tservice'}),
&ui_link($url, $s),
"",
], \@tds, "d", "service/".$s);
}
foreach my $p (@{$zone->{'ports'}}) {
my $url = "edit_port.cgi?id=".&urlize($p).
"&zone=".&urlize($zone->{'name'});
my ($port, $proto) = split(/\//, $p);
print &ui_checked_columns_row([
&ui_link($url, $text{'index_tport'}),
&ui_link($url, $port),
&ui_link($url, uc($proto)),
], \@tds, "d", "port/".$p);
}
print &ui_columns_end();
print &ui_links_row(\@links);
print &ui_form_end([ [ undef, $text{'index_delete'} ] ]);
}
else {
print "<b>$text{'index_none'}</b> <p>\n";
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";
}
print &ui_submit($text{'save'});
print &ui_form_end();
# Show start/apply buttons
print &ui_hr();
print &ui_buttons_start();
my $ok = &is_firewalld_running();
if ($ok) {
print &ui_buttons_row("restart.cgi", $text{'index_restart'},
$text{'index_restartdesc'},
[ [ "zone", $zone->{'name'} ] ]);
print &ui_buttons_row("stop.cgi", $text{'index_stop'},
$text{'index_stopdesc'},
[ [ "zone", $zone->{'name'} ] ]);
}
else {
print &ui_buttons_row("start.cgi", $text{'index_start'},
$text{'index_startdesc'},
[ [ "zone", $zone->{'name'} ] ]);
}
# Enable at boot
&foreign_require("init");
my $st = &init::action_status($config{'init_name'});
if ($st) {
my $atboot = $st == 2 ? 1 : 0;
print &ui_buttons_row("bootup.cgi", $text{'index_bootup'},
$text{'index_bootupdesc'},
[ [ "zone", $zone->{'name'} ] ],
&ui_yesno_radio("boot", $atboot));
}
print &ui_buttons_end();
&ui_print_footer("/", $text{'index'});

20
firewalld/install_check.pl Executable file
View File

@@ -0,0 +1,20 @@
# install_check.pl
use strict;
use warnings;
do 'firewalld-lib.pl';
# is_installed(mode)
# For mode 1, returns 2 if the server is installed and configured for use by
# Webmin, 1 if installed but not configured, or 0 otherwise.
# For mode 0, returns 1 if installed, 0 if not
sub is_installed
{
my ($mode) = @_;
return 0 if (&check_firewalld());
if ($mode) {
return &is_firewalld_running() ? 2 : 1;
}
return 1;
}

86
firewalld/lang/de Normal file
View File

@@ -0,0 +1,86 @@
check_ecmd=Der FirewallD Steuer-Befehl $1 wurde auf Ihrem System nicht gefunden
delete_edel=Entfernen von $1 fehlgeschlagen : $2
delete_enone=Nichts ausgew&#228;hlt!
delete_err=Fehlgeschlagen Regel zu l&#246;schen
delzone_edefault=Die Standardzone kann nicht entfernt werden
delzone_err=Fehlgeschlagen Zone zu l&#246;schen
delzone_rusure=Sind Sie sich sicher die Zone $1, welche $2 Ports und $3 Dienste enth&#228;lt, zu l&#246;schen?
delzone_title=L&#246;sche Zone
index_apply=Konfiguration anwenden
index_applydesc=Klicken auf diese Schaltfl&#228;che, um die Firewall-Konfiguration, welche oben aufgef&#252;hrt ist, aktiv zu stellen. Alle Firewall-Regeln, welche derzeit aktiv sind, werden verworfen und ersetzt
index_atboot=Aktiviere firewall beim Booten?
index_bootup=Aktiviere beim Booten
index_bootupdesc=&#196;ndere diese Option, um zu kontrollieren, ob Ihre Firewall beim Systemstart aktiviert wird oder nicht.
index_cerr=Das FirewallD Module kann nicht benutzt werden : $1
index_delete=L&#246;sche ausgew&#228;hlte Regeln
index_ezones=Keine FirewallD Zonen gefunden!
index_ifaces=Wende Regeln an Schnittstelle an:
index_none=Diese Zone hat bisher keine erlaubten Ports oder Dienste.
index_padd=F&#252;ge erlaubten Port hinzu.
index_port=Port oder Dienst
index_proto=Protokoll
index_restart=Konfiguration anwenden
index_restartdesc=Aktiviert alle erlaubten Dienste und Ports, die oben aufgef&#252;hrt sind, in allen Zonen. Alle aktiven Regeln, die nicht dauerhaft erstellt wurden, werden ersetzt.
index_return=Liste an Zonen
index_sadd=F&#252;ge erlaubten Dienst hinzu.
index_start=Starte FirewallD
index_startdesc=Starte den FirewallD Server und wende alle oben aufgef&#252;hrten Regeln an.
index_stop=Stoppe FirewallD
index_stopdesc=Fahre den FirewallD Server herunter und entferne alle oben aufgef&#252;hrten Regeln.
index_title=FirewallD
index_tport=Port
index_tservice=Dienst
index_type=Regel-Typ
index_zone=Zeige Regel in Zone:
index_zoneadd=F&#252;ge Zone hinzu..
index_zonedel=L&#246;sche Zone
index_zoneok=&#196;ndern
log_bootdown=FirewallD beim Booten deaktiviert
log_bootup=FirewallD beim Booten aktiviert
log_create_port=Erlaubter Port $1 hinzugef&#252;gt
log_create_serv=Erlaubter Dienst $1 hinzugef&#252;gt
log_create_zone=Zone $1 erstellt
log_delete_port=Erlaubter Dienst $1 gel&#246;scht
log_delete_rules=$1 erlaubte Ports gel&#246;scht
log_delete_serv=Erlaubter Dienst $1 gel&#246;scht
log_delete_zone=Zone $1 gel&#246;scht
log_ifaces_zone=Schnittstelle f&#252;r Zone $1 aktualisiert
log_restart=FirewallD Konfiguration angewendet
log_start=FirewallD gestartet
log_stop=FirewallD gestoppt
log_update_port=Erlaubten Port $1 aktualisiert
log_update_serv=Erlaubten Dienst $1 aktualisiert
port_create=F&#252;ge erlaubten Port hinzu
port_edit=Editiere erlaubten Port
port_eport=Fehlender oder ung&#252;ltiger Portnummer oder Name
port_eporthigh=Hoher Port muss eine Zahl sein
port_eportlow=Niedriger Port muss eine Zahl sein
port_eportrange=Niedriger Port muss unter dem hohen Port liegen
port_err=Fehlgeschlagen Port zu speichern
port_ezone=Zone existiert nicht!
port_header=Erlaubten Port Optionen
port_mode0=Einzelner Port
port_mode1=Port-Bereich
port_port=Port zu erlauben
port_proto=Netzwerkprotokoll
port_zone=Erlaubt in Zone
restart_err=Fehlgeschlagen Konfiguration anzuwenden
serv_create=F&#252;ge Dienst hinzu
serv_edit=Editiere Dienst
serv_err=Fehlgeschlagen Dienst zu speichern
serv_header=Erlaubte Dienste Optionen
serv_name=Dienste zu erlauben
start_err=Fehlgeschlagen FirewallD zu starten
stop_err=Fehlgeschlagen FirewallD zu stoppen
zone_eclash=Eine Zone mit dem gleichen Namen ist bereits vorhanden
zone_ename=Fehlender oder ung&#252;ltiger Zonen-Name
zone_err=Fehlgeschlagen Zonen zu erstellen
zone_header=Neue Zonen Optionen
zone_mode=Erlaubte Ports und Dienste
zone_mode0=Keine (gesamter Traffic wird blockiert)
zone_mode1=Kopiere von ZOne
zone_mode2=nur SSH, IDENT und Webmin
zone_mode3=SSH, IDENT, Webmin und hohe Ports
zone_mode4=Port, welche f&#252;r das virtuelle Hosting verwendet werden
zone_name=Zonen-Namen
zone_title=Erstelle Zone

98
firewalld/lang/en Normal file
View File

@@ -0,0 +1,98 @@
index_title=FirewallD
index_atboot=Enable firewall at boot time?
index_bootup=Activate at boot
index_bootupdesc=Change this option to control whether your firewall is activated at boot time or not.
index_apply=Apply Configuration
index_applydesc=Click this button to make the firewall configuration listed above active. Any firewall rules currently in effect will be flushed and replaced
index_restart=Apply Configuration
index_restartdesc=Activate all the allowed services and ports listed above, in all zones. Any active rules that were not permanently created will be replaced.
index_start=Start FirewallD
index_startdesc=Start the FirewallD server and apply the rules listed above.
index_stop=Stop FirewallD
index_stopdesc=Shut down the FirewallD server and remove all the rules listed above.
index_cerr=The FirewallD module cannot be used : $1
index_zone=Show rules in zone:
index_zoneok=Change
index_zoneadd=Add Zone..
index_zonedel=Delete Zone
index_zonedef=Make Default
index_type=Rule type
index_port=Port or service
index_proto=Protocol
index_tservice=Service
index_tport=Port
index_padd=Add allowed port.
index_sadd=Add allowed service.
index_delete=Delete Selected Rules
index_return=list of zones
index_ezones=No FirewallD zones found!
index_none=This zone does not have any allowed ports or services yet.
index_ifaces=Apply rules to interfaces:
port_edit=Edit Port
port_create=Add Port
port_header=Allowed port options
port_zone=Allowed in zone
port_port=Port to allow
port_mode0=Single port
port_mode1=Port range
port_proto=Network protocol
port_ezone=Zone does not exist!
port_err=Failed to save port
port_eport=Missing or invalid port number or name
port_eportlow=Low port must be a number
port_eporthigh=High port must be a number
port_eportrange=Low port must be below the high port
serv_edit=Edit Service
serv_create=Add Service
serv_header=Allowed service options
serv_name=Service to allow
serv_err=Failed to save service
check_ecmd=The FirewallD control command $1 was not found on your system
delete_err=Failed to delete rules
delete_enone=None selected!
delete_edel=Removal of $1 failed : $2
zone_title=Create Zone
zone_header=New zone options
zone_name=Zone name
zone_mode=Allowed ports and services
zone_mode0=None (all traffic will be blocked)
zone_mode1=Copy from zone
zone_mode2=SSH, IDENT and Webmin only
zone_mode3=SSH, IDENT, Webmin and high ports
zone_mode4=Ports used for virtual hosting
zone_err=Failed to create zone
zone_ename=Missing or invalid zone name
zone_eclash=A zone with the same name already exists
delzone_title=Delete Zone
delzone_err=Failed to delete zone
delzone_edefault=The default zone cannot be removed
delzone_rusure=Are you sure you want to delete the zone $1, which contains $2 ports and $3 services?
defzone_err=Failed to make zone the default
restart_err=Failed to apply configuration
stop_err=Failed to stop FirewallD
start_err=Failed to start FirewallD
log_stop=Stopped FirewallD
log_start=Started FirewallD
log_restart=Applied FirewallD configuration
log_bootup=Enabled FirewallD at boot
log_bootdown=Disabled FirewallD at boot
log_create_port=Added allowed port $1
log_delete_port=Removed allowed port $1
log_update_port=Updated allowed port $1
log_create_serv=Added allowed service $1
log_delete_serv=Removed allowed service $1
log_update_serv=Updated allowed service $1
log_delete_rules=Removed $1 allowed ports
log_ifaces_zone=Updated interfaces for zone $1
log_create_zone=Created zone $1
log_delete_zone=Deleted zone $1
log_default_zone=Made zone $1 the default

29
firewalld/log_parser.pl Executable file
View File

@@ -0,0 +1,29 @@
# log_parser.pl
# Functions for parsing this module's logs
use strict;
use warnings;
do 'firewalld-lib.pl';
our (%text);
# parse_webmin_log(user, script, action, type, object, &params)
# Converts logged information from this module into human-readable form
sub parse_webmin_log
{
my ($user, $script, $action, $type, $object, $p) = @_;
if ($type eq "port" || $type eq "serv") {
return &text("log_${action}_${type}",
"<tt>".&html_escape($object)."</tt>");
}
elsif ($type eq "rules") {
return &text("log_${action}_${type}", &html_escape($object));
}
elsif ($type eq "zone") {
return &text("log_${action}_${type}",
"<tt>".&html_escape($object)."</tt>");
}
else {
return $text{"log_${action}"};
}
}

7
firewalld/module.info Normal file
View File

@@ -0,0 +1,7 @@
desc=FirewallD
os_support=*-linux
depends=net init
category=net
desc_de=FirewallD
longdesc=Configure a Linux firewall using FirewallD, by editing allowed services and ports.
longdesc_de=Konfiguriert eine Linux-Firewall mit FirewallD, indem es erlaubte Dienste und Ports editiert.

107
firewalld/open-ports.pl Executable file
View File

@@ -0,0 +1,107 @@
#!/usr/local/bin/perl
# Open some ports on the firewall. Exit statuses are :
# 0 - Nothing needed to be done
# 1 - Given ports were opened up
# 2 - IPtables is not installed or supported
# 3 - No firewall is active
# 4 - Could not apply configuration
# 5 - Bad args
use strict;
use warnings;
our ($module_name, $no_acl_check);
$no_acl_check++;
$ENV{'WEBMIN_CONFIG'} = "/etc/webmin";
$ENV{'WEBMIN_VAR'} = "/var/webmin";
if ($0 =~ /^(.*\/)[^\/]+$/) {
chdir($1);
}
require './firewalld-lib.pl';
if ($module_name ne 'firewalld') {
print STDERR "Command must be run with full path\n";
exit(5);
}
# Parse args
my $no_apply = 0;
if ($ARGV[0] eq "--no-apply") {
$no_apply = 1;
shift(@ARGV);
}
if (!@ARGV) {
print STDERR "Missing ports to open\n";
exit(5);
}
foreach my $p (@ARGV) {
if ($p !~ /^\d+$/ && $p !~ /^\d+:\d+$/ && $p !~ /^\d+(,\d+)*$/) {
print STDERR "Port $p must be number or start:end range\n";
exit(5);
}
}
# Check Firewalld support
if (&foreign_installed($module_name, 1) != 2) {
print STDERR "Firewalld is not available\n";
exit(2);
}
if (!&is_firewalld_running()) {
print STDERR "Firewalld is not running\n";
exit(2);
}
# Check if any zones are active
my @azones = &list_firewalld_zones(1);
if (!@azones) {
print STDERR "No active FirewallD zones found\n";
exit(3);
}
# Get the default zone
my @zones = &list_firewalld_zones();
my ($zone) = grep { $_->{'default'} } @zones;
if (!$zone) {
print STDERR "Default FirewallD zone not found\n";
exit(3);
}
my @added = ( );
foreach my $p (@ARGV) {
# For each port, find existing rules
$p =~ s/^(\d+):(\d+)/$1-$2/;
print STDERR "Checking for port $p ..\n";
if (&indexof($p."/tcp", @{$zone->{'ports'}}) >= 0) {
print STDERR ".. already allowed\n";
}
else {
# Need to add
my $err = &create_firewalld_port($zone, $p, "tcp");
if ($err) {
print STDERR ".. failed : $err\n";
}
else {
push(@added, $p);
}
}
}
if (@added) {
# Added some ports - apply them
print STDERR "Opened ports ",join(" ", @added),"\n";
my $ex = 1;
if (!$no_apply) {
my $err = &apply_firewalld();
if ($err) {
print "Failed to apply configuration : $err\n";
$ex = 4;
}
else {
print "Applied configuration successfully\n";
}
}
&webmin_log("openports", undef, undef, { 'ports' => \@added });
exit($ex);
}
else {
print STDERR "All ports are already open\n";
exit(0);
}

12
firewalld/restart.cgi Normal file
View File

@@ -0,0 +1,12 @@
#!/usr/local/bin/perl
# Activate all saved firewalld rules
use strict;
use warnings;
require './firewalld-lib.pl';
our (%text, %in);
&error_setup($text{'restart_err'});
my $err = &apply_firewalld();
&error($err) if ($err);
&webmin_log("restart");
&redirect("index.cgi?zone=".&urlize($in{'zone'}));

21
firewalld/save_ifaces.cgi Normal file
View File

@@ -0,0 +1,21 @@
#!/usr/local/bin/perl
# Update interface ports
use strict;
use warnings;
require 'firewalld-lib.pl';
our (%in, %text);
&error_setup($text{'ifaces_err'});
&ReadParse();
# Get the zone
my @zones = &list_firewalld_zones();
my ($zone) = grep { $_->{'name'} eq $in{'zone'} } @zones;
$zone || &error($text{'port_ezone'});
# Update the interfaces list
my $err = &update_zone_interfaces($zone, [ split(/\0/, $in{'iface'}) ]);
&error($err) if ($err);
&webmin_log("ifaces", "zone", $zone->{'name'});
&redirect("index.cgi?zone=".&urlize($zone->{'name'}));

61
firewalld/save_port.cgi Normal file
View File

@@ -0,0 +1,61 @@
#!/usr/local/bin/perl
# Create, update or delete a port
use strict;
use warnings;
require 'firewalld-lib.pl';
our (%in, %text);
&error_setup($text{'port_err'});
&ReadParse();
# Get the zone and rule
my @zones = &list_firewalld_zones();
my ($zone) = grep { $_->{'name'} eq $in{'zone'} } @zones;
$zone || &error($text{'port_ezone'});
my ($oldport, $oldproto);
if ($in{'id'}) {
($oldport, $oldproto) = split(/\//, $in{'id'});
}
my $logport;
if ($in{'delete'}) {
# Just remove the existing rule
my $err = &delete_firewalld_port($zone, $oldport, $oldproto);
&error($err) if ($err);
$logport = $oldport;
}
else {
# Validate inputs
my $port;
if ($in{'mode'} == 0) {
$in{'port'} =~ /^\d+$/ &&
$in{'port'} > 0 && $in{'port'} < 65536 ||
getservbyname($in{'port'}, $in{'proto'}) ||
&error($text{'port_eport'});
$port = $in{'port'};
}
else {
$in{'portlow'} =~ /^\d+$/ &&
$in{'portlow'} > 0 && $in{'portlow'} < 65536 ||
&error($text{'port_eportlow'});
$in{'porthigh'} =~ /^\d+$/ &&
$in{'porthigh'} > 0 && $in{'porthigh'} < 65536 ||
&error($text{'port_eporthigh'});
$in{'portlow'} < $in{'porthigh'} ||
&error($text{'port_eportrange'});
$port = $in{'portlow'}."-".$in{'porthigh'};
}
my $proto = $in{'proto'};
# Create or update allowed port
if (!$in{'new'}) {
my $err = &delete_firewalld_port($zone, $oldport, $oldproto);
&error($err) if ($err);
}
my $err = &create_firewalld_port($zone, $port, $proto);
&error($err) if ($err);
$logport = $port;
}
&webmin_log($in{'delete'} ? 'delete' : $in{'new'} ? 'create' : 'update',
'port', $logport);
&redirect("index.cgi?zone=".&urlize($zone->{'name'}));

42
firewalld/save_serv.cgi Normal file
View File

@@ -0,0 +1,42 @@
#!/usr/local/bin/perl
# Create, update or delete a service
use strict;
use warnings;
require 'firewalld-lib.pl';
our (%in, %text);
&error_setup($text{'serv_err'});
&ReadParse();
# Get the zone and rule
my @zones = &list_firewalld_zones();
my ($zone) = grep { $_->{'name'} eq $in{'zone'} } @zones;
$zone || &error($text{'port_ezone'});
my $oldserv;
if ($in{'id'}) {
$oldserv = $in{'id'};
}
my $logserv;
if ($in{'delete'}) {
# Just remove the existing rule
my $err = &delete_firewalld_service($zone, $oldserv);
&error($err) if ($err);
$logserv = $oldserv;
}
else {
# Validate inputs
my $serv = $in{'serv'};
# Create or update allowed port
if (!$in{'new'}) {
my $err = &delete_firewalld_service($zone, $oldserv);
&error($err) if ($err);
}
my $err = &create_firewalld_service($zone, $serv);
&error($err) if ($err);
$logserv = $serv;
}
&webmin_log($in{'delete'} ? 'delete' : $in{'new'} ? 'create' : 'update',
'serv', $logserv);
&redirect("index.cgi?zone=".&urlize($zone->{'name'}));

12
firewalld/start.cgi Normal file
View File

@@ -0,0 +1,12 @@
#!/usr/local/bin/perl
# Start up firewalld
use strict;
use warnings;
require './firewalld-lib.pl';
our (%text, %in);
&error_setup($text{'start_err'});
my $err = &start_firewalld();
&error($err) if ($err);
&webmin_log("start");
&redirect("index.cgi?zone=".&urlize($in{'zone'}));

12
firewalld/stop.cgi Normal file
View File

@@ -0,0 +1,12 @@
#!/usr/local/bin/perl
# Shut down firewalld
use strict;
use warnings;
require './firewalld-lib.pl';
our (%text, %in);
&error_setup($text{'stop_err'});
my $err = &stop_firewalld();
&error($err) if ($err);
&webmin_log("stop");
&redirect("index.cgi?zone=".&urlize($in{'zone'}));

33
firewalld/zone_form.cgi Normal file
View File

@@ -0,0 +1,33 @@
#!/usr/local/bin/perl
# Show a form for creating a new zone, with some default rules
use strict;
use warnings;
require 'firewalld-lib.pl';
our (%text, %in);
&ReadParse();
&ui_print_header(undef, $text{'zone_title'}, "");
print &ui_form_start("create_zone.cgi", "post");
print &ui_table_start($text{'zone_header'}, undef, 2);
# New zone name
print &ui_table_row($text{'zone_name'},
&ui_textbox("name", undef, 20));
# Initial ruleset
print &ui_table_row($text{'zone_mode'},
&ui_radio_table("mode", 0,
[ [ 0, $text{'zone_mode0'} ],
[ 1, $text{'zone_mode1'},
&ui_select("source", $in{'zone'},
[ map { $_->{'name'} } &list_firewalld_zones() ]) ],
[ 2, $text{'zone_mode2'} ],
[ 3, $text{'zone_mode3'} ],
[ 4, $text{'zone_mode4'} ] ]));
print &ui_table_end();
print &ui_form_end([ [ undef, $text{'create'} ] ]);
&ui_print_footer("index.cgi?zone=".&urlize($in{'zone'}),
$text{'index_return'});

View File

@@ -1,7 +1,6 @@
desc=Frox FTP Proxy
category=servers
os_support=*-linux freebsd
longdesc=Configure Frox, a transparent proxy for FTP clients.
desc_de=Frox FTP-Proxyserver
desc_ca=Proxy FTP Frox
desc_es=Frox - Proxy FTP
@@ -10,4 +9,3 @@ desc_nl=Frox FTP Proxy-server
desc_cz.UTF-8=Frox FTP-Proxy server
desc_no=Frox FTP proxy tjener
desc_ms_MY=Proksi FTP Frox
longdesc_ms_MY=Mengkonfigurasi Frox, proksi telus untuk klien FTP.

View File

@@ -2,9 +2,8 @@
Això pot ser o bé el camí d'un fitxer al qual s'escriurà la còpia, o bé
el camí d'una unitat de cinta (com ara <tt>/dev/st0</tt>), o un fitxer o
dispositiu d'un host remot. Per tal que les còpies a un host remot funcionin,
aquest ha de suportar el protocol <tt>rsh</tt>, que normalment no està
activat per raons de seguretat. <p>
dispositiu d'un host remot. Les còpies contra un host es fan via el protocol SSH,
o bé opcionalment via l'antic protocol RSH, més insegur. <p>
<hr>

View File

@@ -2,9 +2,8 @@
This can either be the path to a file to which the backup will be written,
the path to a tape drive device (like <tt>/dev/st0</tt>), or a file or device
on a remote host. For backups to a remote host to work, it must support the
<tt>rsh</tt> protocol, which is not usually turned on by default for security
reasons. <p>
on a remote host. Backups to a remote system are done via the SSH protocol,
or optionally the older insecure RSH protocol. <p>
<hr>

View File

@@ -3,9 +3,7 @@
Per defecte, l'ordre <tt>dump</tt> utilitzarà l'ordre i el protocol
<tt>rsh</tt> per restaurar des d'altres servidors. No obstant, aquest camp
es pot utilitzar per seleccionar una ordre diferent com ara <tt>ssh</tt>,
que és més segura i més generalment utilitzada. SSH només funcionará si la
configuració SSH de l'usuari <tt>root</tt> permet entrades sense contrasenya
des d'aquest sistema al servidor remot. <p>
que és més segura i més generalment utilitzada. <p>
En sistemes Linux i BSD, també pots seleccionar l'opció <tt>FTP</tt>, que
utilitzarà el programa client FTP integrat de Webmini per transferir la còpia

View File

@@ -3,8 +3,7 @@
By default, the <tt>dump</tt> command will use the <tt>rsh</tt> command and
protocol to backup to other servers. However, this field can be used to select
a different command such as <tt>ssh</tt>, which is more secure and more
commonly used. SSH will only work if the <tt>root</tt> user's SSH configuration
allows passwordless logins from this system to the remote server. <p>
commonly used. <p>
On Linux and BSD systems, you can also select the <tt>FTP</tt> option, which will
use Webmin's built-in FTP client program to transfer the backup to or from

View File

@@ -117,7 +117,7 @@ edit_header=$1 Dateisystemsicherungsdetails
edit_header2=Backup-Zeitplan
edit_header3=Backup-Optionen
edit_restore=Wiederherstellung
edit_return=dump
edit_return=Sicherung
edit_savenow=Speichern und jetzt sichern
edit_special=Backup-Zeitplan
edit_subject=Betreff der E-Mail

View File

@@ -123,7 +123,7 @@ edit_enabled_yes=Enabled, at times chosen below..
edit_enabled_af=Enabled, after:
edit_savenow=Save and Backup Now
edit_createnow=Create and Backup Now
edit_return=dump
edit_return=backup
edit_email=Email scheduled output to
edit_subject=Email message subject
edit_restore=Restore ..

10
gray-theme/lang/cz Normal file
View File

@@ -0,0 +1,10 @@
left_login=Login: $1
left_home=Informace o systému
left_oc=Sponzorováno OpenCountry
left_feedback=Zaslat zpìtnou vazbu
left_search_webmin=Hledat ve Webminu:
left_search_usermin=Hledat v Userminu:
left_search=Hledat:
left_logs=Prohlédnout logy modulù
left_others=Ostatní

View File

@@ -22,3 +22,5 @@ Updated the API used by other modules to allow new actions to be created on MacO
Converted commands in the module's API file to POD format, and added more details about each function.
---- Changes since 1.540 ----
Added support for the Upstart boot system, seen on Ubuntu 10 and later.
---- Changes since 1.740 ----
Added support for Launchd, as seen on newer MacOS X systems.

View File

@@ -126,6 +126,11 @@ elsif ($init_mode eq "rc" || $init_mode eq "upstart" ||
{ 'fork' => 1,
'pidfile' => $var_directory."/miniserv.pid" });
}
elsif ($init_mode eq "launchd") {
# Create launchd script
&create_launchd_agent(&launchd_name($product),
"$config_directory/start --nofork", 1);
}
$config{'atboot_product'} = $product;
&save_module_config();

77
init/edit_launchd.cgi Executable file
View File

@@ -0,0 +1,77 @@
#!/usr/local/bin/perl
# Show a form for creating or editing a launchd agent
require './init-lib.pl';
$access{'bootup'} || &error($text{'edit_ecannot'});
&ReadParse();
if ($in{'new'}) {
&ui_print_header(undef, $text{'launchd_title1'}, "");
$u = { };
}
else {
&ui_print_header(undef, $text{'launchd_title2'}, "");
@systemds = &list_launchd_agents();
($u) = grep { $_->{'name'} eq $in{'name'} } @systemds;
$u || &error($text{'launchd_egone'});
}
print &ui_form_start("save_launchd.cgi", "post");
print &ui_hidden("new", $in{'new'});
print &ui_hidden("name", $in{'name'}) if (!$in{'new'});
print &ui_table_start($text{'launchd_header'}, undef, 2);
if ($in{'new'}) {
# Service name
print &ui_table_row($text{'launchd_name'},
&ui_textbox("name", undef, 30));
# Server command and args
print &ui_table_row($text{'launchd_start'},
&ui_textarea("atstart", undef, 5, 80));
# Start at boot?
print &ui_table_row($text{'upstart_boot'},
&ui_yesno_radio("boot", 1));
}
else {
# Service name (non-editable)
print &ui_table_row($text{'launchd_name'},
"<tt>$in{'name'}</tt>");
# Config file location
print &ui_table_row($text{'launchd_file'},
$u->{'file'} ? "<tt>$u->{'file'}</tt>"
: "<i>$text{'launchd_nofile'}</i>");
if ($u->{'file'}) {
# Config file contents
$conf = &read_file_contents($u->{'file'});
print &ui_table_row($text{'launchd_conf'},
&ui_textarea("conf", $conf, 20, 80));
}
# Current status
print &ui_table_row($text{'launchd_status'},
$u->{'status'} && $u->{'pid'} ?
&text('systemd_status1', $u->{'pid'}) :
$u->{'status'} ?
$text{'systemd_status2'} :
$text{'systemd_status0'});
}
print &ui_table_end();
if ($in{'new'}) {
print &ui_form_end([ [ undef, $text{'create'} ] ]);
}
else {
print &ui_form_end([ [ undef, $text{'save'} ],
[ 'start', $text{'edit_startnow'} ],
[ 'restart', $text{'edit_restartnow'} ],
[ 'stop', $text{'edit_stopnow'} ],
[ 'reload', $text{'edit_reloadnow2'} ],
[ 'delete', $text{'delete'} ] ]);
}
&ui_print_footer("", $text{'index_return'});

View File

@@ -379,6 +379,41 @@ elsif ($init_mode eq "systemd" && $access{'bootup'}) {
]);
}
elsif ($init_mode eq "launchd" && $access{'bootup'}) {
# Show launchd agents
print &ui_form_start("mass_launchd.cgi", "post");
@links = ( &select_all_link("d"),
&select_invert_link("d"),
&ui_link("edit_launchd.cgi?new=1", $text{'index_ladd'}) );
print &ui_links_row(\@links);
print &ui_columns_start([ "", $text{'index_lname'},
$text{'index_uboot'},
$text{'index_ustatus'}, ]);
foreach $u (&list_launchd_agents()) {
$l = "edit_launchd.cgi?name=".&urlize($u->{'name'});
print &ui_columns_row([
&ui_checkbox("d", $u->{'name'}, undef),
&ui_link($l, $u->{'name'}),
$u->{'boot'} ? $text{'yes'} :
"<font color=#ff0000>$text{'no'}</font>",
$u->{'status'} ? $text{'yes'} :
"<font color=#ff0000>$text{'no'}</font>",
]);
}
print &ui_columns_end();
print &ui_links_row(\@links);
print &ui_form_end([ [ "start", $text{'index_start'} ],
[ "stop", $text{'index_stop'} ],
[ "restart", $text{'index_restart'} ],
undef,
[ "addboot", $text{'index_addboot'} ],
[ "delboot", $text{'index_delboot'} ],
undef,
[ "addboot_start", $text{'index_addboot_start'} ],
[ "delboot_stop", $text{'index_delboot_stop'} ],
]);
}
# reboot/shutdown buttons
print &ui_hr();

View File

@@ -28,7 +28,9 @@ use WebminCore;
This variable is set based on the bootup system in use. Possible values are :
=item osx - MacOSX hostconfig files
=item osx - MacOSX hostconfig files, for older versions
=item launchd - MacOS Launchd, for newer versions
=item rc - FreeBSD 6+ RC files
@@ -38,14 +40,17 @@ This variable is set based on the bootup system in use. Possible values are :
=item win32 - Windows services
=item upstart - Upstart, seend on Ubuntu 11
=item upstart - Upstart, seen on Ubuntu 11
=item systemd - SystemD, as seen on Fedora 16
=item systemd - SystemD, seen on Fedora 16
=cut
if ($config{'init_mode'}) {
$init_mode = $config{'init_mode'};
}
elsif (&has_command("launchd")) {
$init_mode = "launchd";
}
elsif ($config{'hostconfig'}) {
$init_mode = "osx";
}
@@ -390,8 +395,13 @@ elsif (&has_command("who")) {
}
}
# Last ditch fallback - assume runlevel 3
if (!@rv && !$config{'inittab_extra'}) {
push(@rv, 3);
}
# Add statically configured runlevels
if ($config{"inittab_rl_$rv[0]"}) {
if (@rv && $config{"inittab_rl_$rv[0]"}) {
@rv = split(/,/, $config{"inittab_rl_$rv[0]"});
}
push(@rv, $config{'inittab_extra'});
@@ -507,12 +517,13 @@ such as init.d, OSX and FreeBSD.
=cut
sub action_status
{
my ($name) = @_;
if ($init_mode eq "upstart") {
# Check upstart service status
local $out = &backquote_command("initctl status ".
quotemeta($_[0])." 2>&1");
quotemeta($name)." 2>&1");
if (!$?) {
my $cfile = "/etc/init/$_[0].conf";
my $cfile = "/etc/init/$name.conf";
open(CONF, $cfile);
while(<CONF>) {
if (/^(#*)\s*start/) {
@@ -525,7 +536,7 @@ if ($init_mode eq "upstart") {
}
elsif ($init_mode eq "systemd") {
# Check systemd service status
local $unit = $_[0];
local $unit = $name;
$unit .= ".service" if ($unit !~ /\.service$/);
local $out = &backquote_command("systemctl show ".
quotemeta($unit)." 2>&1");
@@ -541,7 +552,7 @@ if ($init_mode eq "init" || $init_mode eq "upstart" ||
local ($a, $exists, $starting, %daemon);
foreach $a (&list_actions()) {
local @a = split(/\s+/, $a);
if ($a[0] eq $_[0]) {
if ($a[0] eq $name) {
$exists++;
local @boot = &get_inittab_runlevel();
foreach $s (&action_levels("S", $a[0])) {
@@ -551,14 +562,14 @@ if ($init_mode eq "init" || $init_mode eq "upstart" ||
}
}
if ($starting && $config{'daemons_dir'} &&
&read_env_file("$config{'daemons_dir'}/$_[0]", \%daemon)) {
&read_env_file("$config{'daemons_dir'}/$name", \%daemon)) {
$starting = lc($daemon{'ONBOOT'}) eq 'yes' ? 1 : 0;
}
return !$exists ? 0 : $starting ? 2 : 1;
}
elsif ($init_mode eq "local") {
# Look for entry in rc.local
local $fn = "$module_config_directory/$_[0].sh";
local $fn = "$module_config_directory/$name.sh";
local $cmd = "$fn start";
open(LOCAL, $config{'local_script'});
while(<LOCAL>) {
@@ -570,25 +581,31 @@ elsif ($init_mode eq "local") {
}
elsif ($init_mode eq "win32") {
# Look for a win32 service, enabled at boot
local ($svc) = &list_win32_services($_[0]);
local ($svc) = &list_win32_services($name);
return !$svc ? 0 :
$svc->{'boot'} == 2 ? 2 : 1;
}
elsif ($init_mode eq "rc") {
# Look for an RC script
local @rcs = &list_rc_scripts();
local ($rc) = grep { $_->{'name'} eq $_[0] } @rcs;
local ($rc) = grep { $_->{'name'} eq $name } @rcs;
return !$rc ? 0 :
$rc->{'enabled'} ? 2 : 1;
}
elsif ($init_mode eq "osx") {
# Look for a hostconfig entry
local $ucname = uc($_[0]);
local $ucname = uc($name);
local %hc;
&read_env_file($config{'hostconfig'}, \%hc);
return $hc{$ucname} eq '-YES-' ? 2 :
$hc{$ucname} eq '-NO-' ? 1 : 0;
}
elsif ($init_mode eq "launchd") {
local @agents = &list_launchd_agents();
local ($agent) = grep { $_->{'name'} eq &launchd_name($name) } @agents;
return !$agent ? 0 :
$agent->{'boot'} ? 2 : 1;
}
}
=head2 enable_at_boot(action, description, startcode, stopcode, statuscode, &opts)
@@ -970,6 +987,31 @@ elsif ($init_mode eq "osx") {
&write_env_file($config{'hostconfig'}, \%hc);
&unlock_file($config{'hostconfig'});
}
elsif ($init_mode eq "launchd") {
# Create and if necessary enable a launchd agent
my $name = &launchd_name($_[0]);
my @agents = &list_launchd_agents();
my ($agent) = grep { $_->{'name'} eq $name } @agents;
if (!$agent) {
# Need to create script
&create_launchd_agent($name, $_[1], 1);
}
else {
# Just enable at boot
my $out = &read_file_contents($agent->{'file'});
if ($out =~ /<key>RunAtLoad<\/key>/i) {
# Just fix setting
$out =~ s/<key>RunAtLoad<\/key>\s*<(true|false)\/>/<key>RunAtLoad<\/key>\n<true\/>/;
}
else {
# Defaults to false, so need to add before </plist>
$out =~ s/<\/plist>/<key>RunAtLoad<\/key>\n<true\/>\n<\/plist>/;
}
&open_lock_tempfile(PLIST, ">$agent->{'file'}");
&print_tempfile(PLIST, $out);
&close_tempfile(PLIST);
}
}
}
=head2 disable_at_boot(action)
@@ -981,6 +1023,7 @@ touched, so it can be re-enabled with the enable_at_boot function.
=cut
sub disable_at_boot
{
my ($name) = @_;
local $st = &action_status($_[0]);
return if ($st != 2); # not currently starting
local $unit = $_[0];
@@ -1102,6 +1145,18 @@ elsif ($init_mode eq "osx") {
}
&unlock_file($config{'hostconfig'});
}
elsif ($init_mode eq "launchd") {
# Adjust plist file to not run at boot
my @agents = &list_launchd_agents();
my ($a) = grep { $_->{'name'} eq &launchd_name($name) } @agents;
if ($a && $a->{'file'}) {
my $out = &read_file_contents($a->{'file'});
$out =~ s/<key>RunAtLoad<\/key>\s*<(true|false)\/>/<key>RunAtLoad<\/key>\n<false\/>/;
&open_lock_tempfile(PLIST, ">$a->{'file'}");
&print_tempfile(PLIST, $out);
&close_tempfile(PLIST);
}
}
}
=head2 delete_at_boot(name)
@@ -1122,6 +1177,10 @@ elsif ($mode eq "upstart") {
# Delete upstart service
&delete_upstart_service($name);
}
elsif ($mode eq "launchd") {
# Delete launchd service
&delete_launchd_agent(&launchd_name($name));
}
elsif ($mode eq "init") {
# Delete init script links and init.d file
foreach my $a (&action_levels('S', $name)) {
@@ -1204,6 +1263,10 @@ elsif ($action_mode eq "systemd") {
# Start systemd service
return &start_systemd_service($name);
}
elsif ($action_mode eq "launchd") {
# Start launchd service
return &start_launchd_agent(&launchd_name($name));
}
else {
return (0, "Bootup mode $action_mode not supported");
}
@@ -1248,6 +1311,10 @@ elsif ($action_mode eq "systemd") {
# Stop systemd service
return &stop_systemd_service($name);
}
elsif ($action_mode eq "launchd") {
# Stop launchd service
return &stop_launchd_agent(&launchd_name($name));
}
else {
return (0, "Bootup mode $action_mode not supported");
}
@@ -1302,7 +1369,13 @@ 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 } @systemds;
my ($u) = grep { $_->{'name'} eq $name ||
$_->{'name'} eq $name.".service" } @systemds;
return !$u ? -1 : $u->{'status'} ? 1 : 0;
}
elsif ($action_mode eq "launchd") {
my @agents = &list_launchd_agents();
my ($a) = grep { $_->{'name'} eq &launchd_name($name) } @agents;
return !$u ? -1 : $u->{'status'} ? 1 : 0;
}
else {
@@ -1934,6 +2007,7 @@ sub list_systemd_services
my $out = &backquote_command("systemctl list-units --full --all");
&error("Failed to list systemd units : $out") if ($?);
foreach my $l (split(/\r?\n/, $out)) {
$l =~ s/^[^a-z0-9\-\_\.]+//i;
my ($unit, $loaded, $active, $sub, $desc) = split(/\s+/, $l, 5);
my $a = $unit;
$a =~ s/\.service$//;
@@ -2191,9 +2265,12 @@ sub shutdown_system
&system_logged("$config{'shutdown_command'} >$null_file 2>$null_file");
}
# get_action_args(filename)
# Returns the args that this action script appears to support, like stop, start
# and status.
=head2 get_action_args(filename)
Returns the args that this action script appears to support, like stop, start
and status.
=cut
sub get_action_args
{
my ($file) = @_;
@@ -2208,9 +2285,12 @@ close(FILE);
return \%hasarg;
}
# action_running(filename)
# Assuming some init.d action supports the status parameter, returns a 1 if
# running, 0 if not, or -1 if unknown
=head2 action_running(filename)
Assuming some init.d action supports the status parameter, returns a 1 if
running, 0 if not, or -1 if unknown
=cut
sub action_running
{
my ($file) = @_;
@@ -2233,4 +2313,147 @@ elsif ($out =~ /stopped/i) {
return -1;
}
=head2 list_launchd_agents()
Returns an array of hash refs, each of which is a launchd daemon/agent
=cut
sub list_launchd_agents
{
my @rv;
# Get the initial list of actions
my $out = &backquote_command("launchctl list");
&error("Failed to list launchd agents : $out") if ($?);
foreach my $l (split(/\r?\n/, $out)) {
next if ($l =~ /^PID/); # Header line
my ($pid, $status, $label) = split(/\s+/, $l);
next if ($label =~ /^0x/); # Not really a launchd job
next if ($label =~ /\.peruser\./); # Skip user-owned actions
push(@rv, { 'name' => $label,
'status' => $pid eq "-" ? 0 : 1,
'pid' => $pid eq "-" ? undef : $pid, });
}
# Build map from plist files to agents
my @dirs = ("/Library/LaunchAgents",
"/Library/LaunchDaemons",
"/System/Library/LaunchAgents",
"/System/Library/LaunchDaemons");
my (%pmap, %runatload);
foreach my $dir (@dirs) {
foreach my $file (glob("$dir/*.plist")) {
my $plist = &read_file_contents($file);
if ($plist =~ /<key>Label<\/key>\s*<string>([^<]+)/i) {
$pmap{$1} = $file;
}
if ($plist =~ /<key>RunAtLoad<\/key>\s*<(true|false)\/>/i) {
$runatload{$file} = $1;
}
}
}
# Get details on each one
foreach my $a (@rv) {
my $out = &backquote_command("launchctl list ".quotemeta($a->{'name'}));
my %attrs;
foreach my $l (split(/\r?\n/, $out)) {
if ($l =~ /"(\S+)"\s*=\s*"([^"]*)";/ ||
$l =~ /"(\S+)"\s*=\s*(\S+);/) {
$attrs{lc($1)} = $2;
}
}
$a->{'start'} = $attrs{'program'};
$a->{'file'} = $pmap{$a->{'name'}};
$a->{'boot'} = $runatload{$a->{'file'}} eq 'true';
}
return @rv;
}
=head2 create_launchd_agent(name, start-script, boot-flag)
Creates a new local launchd agent
=cut
sub create_launchd_agent
{
my ($name, $start, $boot) = @_;
my $file = "/Library/LaunchDaemons/".$name.".plist";
my $plist = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n".
"<!DOCTYPE plist PUBLIC \"-//Apple//DTD PLIST 1.0//EN\" \"http://www.apple.com/DTDs/PropertyList-1.0.dtd\">\n".
"<plist version=\"1.0\">\n".
"<dict>\n".
"<key>Label</key>\n";
$plist .= "<string>$name</string>\n";
$plist .= "<key>ProgramArguments</key>\n";
$plist .= "<array>\n";
foreach my $a (&split_quoted_string($start)) {
$plist .= "<string>$a</string>\n";
}
$plist .= "</array>\n";
$plist .= "<key>RunAtLoad</key>\n";
$plist .= ($boot ? "<true/>\n" : "<false/>\n");
$plist .= "<key>KeepAlive</key>\n";
$plist .= "<false/>\n";
$plist .= "</dict>\n";
$plist .= "</plist>\n";
&open_lock_tempfile(PLIST, ">$file");
&print_tempfile(PLIST, $plist);
&close_tempfile(PLIST);
my $out = &backquote_logged("launchctl load ".quotemeta($file)." 2>&1");
&error("Failed to load plist : $out") if ($?);
}
=head2 delete_launchd_agent(name)
Stop and remove the agent with some name
=cut
sub delete_launchd_agent
{
my ($name) = @_;
&system_logged("launchctl stop ".quotemeta($name)." 2>&1");
&system_logged("launchctl remove ".quotemeta($name)." 2>&1");
my ($a) = grep { $_->{'name'} eq $name } &list_launchd_agents();
if ($a && $a->{'file'} && -f $a->{'file'}) {
&system_logged("launchctl unload ".quotemeta($a->{'file'})." 2>&1");
&unlink_logged($a->{'file'});
}
}
=head2 stop_launchd_agent(name)
Kill the launchd daemon with some name
=cut
sub stop_launchd_agent
{
my ($name) = @_;
my $out = &backquote_logged(
"launchctl stop ".quotemeta($name)." 2>&1 </dev/null");
return (!$?, $out);
}
=head2 start_launchd_agent(name)
Startup the launchd daemon with some name
=cut
sub start_launchd_agent
{
my ($name) = @_;
my $out = &backquote_logged(
"launchctl start ".quotemeta($name)." 2>&1 </dev/null");
return (!$?, $out);
}
# launchd_name(name)
# If an action name isn't fully qualified, prepend com.webmin to it
sub launchd_name
{
my ($name) = @_;
return $name =~ /\./ ? $name : "com.webmin.".$name;
}
1;

View File

@@ -50,6 +50,8 @@ index_ustatus=En execuci
index_uadd=Crea un nou servei d'inici.
index_sadd=Crea un nou servei <i>systemd</i>.
index_always=Sempre
index_ladd=Crea un nou agent launchd.
index_lname=Nom de l'agent
edit_title=Edició d'Acció
create_title=Creació d'Acció
@@ -77,6 +79,7 @@ edit_stopat=Atura-la a
edit_startnow=Inicia-la ara
edit_stopnow=Atura-la ara
edit_restartnow=Reinicia-la ara
edit_reloadnow2=Rellegeix el Fitxer de Configuració
edit_condrestartnow=Reinicia-la Si Cal
edit_reloadnow=Recarrega-la Ara
edit_statusnow=Mostra l'Estat
@@ -187,6 +190,7 @@ mode_win32=Serveis Windows
mode_rc=Scripts RC FreeBSD RC
mode_upstart=Upstart
mode_systemd=Systemd
mode_launchd=LaunchD
upstart_title1=Creació de Servei <i>Upstart</i>
upstart_title2=Edició de Servei <i>Upstart</i>
@@ -236,4 +240,24 @@ systemd_return=al servei systemd
systemd_econf=No has introduït cap configuració de systemd
systemd_estart=Hi falten les ordres a executar en iniciar
launchd_title1=Creació d'Agent Launchd
launchd_title2=Edició d'Agent Launchd
launchd_egone=L'agent ja no existeix!
launchd_header=Detalls dels servei launchd
launchd_name=Nom de l'agent
launchd_file=Fitxer de configuració
launchd_nofile=No s'ha trobat!
launchd_start=Ordre del servidor
launchd_conf=Configuració de launchd
launchd_boot=Inicia'l en engegar el sistema
launchd_status=Estat actual
launchd_status0=No està en execució
launchd_status1=En execució amb PID $1
launchd_status2=En execució
launchd_err=No s'ha pogut desar l'agent launchd
launchd_ename=Hi falta el nom de l'agent launchd o bé sembla invàlid
launchd_eclash=Ja existeix un agent amb el mateix nom
launchd_return=a l'agent launchd
launchd_econf=No has introduït la configuració de l'agent launchd
launchd_estart=Hi falta l'ordre del servidor
__norefs=1

View File

@@ -62,7 +62,9 @@ index_delboot_stop=Jetzt stoppen &amp; zur Bootzeit deaktivieren
index_desc=Beschreibung
index_downscript=Gleichfalls wird das Skript $1, welches unten aufgef&#252;hrt ist, beim Herunterfahren des Rechners ausgef&#252;hrt. Sie k&#246;nnen hier eigene Kommandos einf&#252;gen um beispielsweise sicher zu stellen, da&#223; bestimmte Daemons oder Server sauber gestoppt werden.
index_editconfig=Bearbeite die $1 Datei manuell
index_ladd=Erstelle einen neuen launchd Agenten.
index_levels=Starte in Runlevels
index_lname=Agentname
index_mode=Boot-System : $1
index_order=Reihenfolge
index_provides=bietet
@@ -143,6 +145,7 @@ mass_ustarting=Starte Dienst $1 ..
mass_ustop=Stoppe Dienste
mass_ustopping=Stoppe Dienst $1 ..
mode_init=SysV init
mode_launchd=LaunchD
mode_local=Single Boot Skript
mode_osx=Mac OS X
mode_rc=FreeBSD RC Skripte

View File

@@ -50,6 +50,8 @@ index_ustatus=Running now?
index_uadd=Create a new upstart service.
index_sadd=Create a new systemd service.
index_always=Always
index_ladd=Create a new launchd agent.
index_lname=Agent name
edit_title=Edit Action
create_title=Create Action
@@ -77,6 +79,7 @@ edit_stopat=Stop at
edit_startnow=Start Now
edit_stopnow=Stop Now
edit_restartnow=Restart Now
edit_reloadnow2=Re-Read Config File
edit_condrestartnow=Restart If Needed
edit_reloadnow=Reload Now
edit_statusnow=Show Status
@@ -187,6 +190,7 @@ mode_win32=Windows services
mode_rc=FreeBSD RC scripts
mode_upstart=Upstart
mode_systemd=Systemd
mode_launchd=LaunchD
upstart_title1=Create Upstart Service
upstart_title2=Edit Upstart Service
@@ -236,4 +240,25 @@ systemd_return=systemd service
systemd_econf=No systemd configuration entered
systemd_estart=Missing commands to run on startup
launchd_title1=Create Launchd Agent
launchd_title2=Edit Launchd Agent
launchd_egone=Agent no longer exists!
launchd_header=Launchd service details
launchd_name=Agent name
launchd_file=Configuration file
launchd_nofile=Not found!
launchd_start=Server command
launchd_conf=Launchd configuration
launchd_boot=Start at boot time?
launchd_status=Current status
launchd_status0=Not running
launchd_status1=Running with PID $1
launchd_status2=Running
launchd_err=Failed to save launchd agent
launchd_ename=Missing or invalid-lookup launchd agent name
launchd_eclash=An agent with the same name already exists
launchd_return=launchd agent
launchd_econf=No launchd configuration entered
launchd_estart=Missing server command
__norefs=1

69
init/mass_launchd.cgi Executable file
View File

@@ -0,0 +1,69 @@
#!/usr/local/bin/perl
# Start or stop a bunch of launchd services
require './init-lib.pl';
&ReadParse();
@sel = split(/\0/, $in{'d'});
@sel || &error($text{'mass_enone'});
$start = 1 if ($in{'start'} || $in{'addboot_start'});
$stop = 1 if ($in{'stop'} || $in{'delboot_stop'});
$restart = 1 if ($in{'restart'} || $in{'delboot_restart'});
$enable = 1 if ($in{'addboot'} || $in{'addboot_start'});
$disable = 1 if ($in{'delboot'} || $in{'delboot_stop'});
&ui_print_unbuffered_header(undef, $start || $enable ? $text{'mass_ustart'}
: $text{'mass_ustop'}, "");
if ($start || $stop || $restart) {
# Starting or stopping a bunch of services
$access{'bootup'} || &error($text{'ss_ecannot'});
foreach $s (@sel) {
if ($start) {
print &text('mass_ustarting', "<tt>$s</tt>"),"<p>\n";
($ok, $out) = &start_action($s);
}
elsif ($stop) {
print &text('mass_ustopping', "<tt>$s</tt>"),"<p>\n";
($ok, $out) = &stop_action($s);
}
elsif ($restart) {
print &text('mass_urestarting', "<tt>$s</tt>"),"<p>\n";
($ok, $out) = &restart_action($s);
}
print "<pre>$out</pre>";
if (!$ok) {
print $text{'mass_failed'},"<p>\n";
}
else {
print $text{'mass_ok'},"<p>\n";
}
}
&webmin_log($start ? 'massstart' : $stop ? 'massstop' : 'massrestart',
'launchd', join(" ", @sel));
}
if ($enable || $disable) {
# Enable or disable at boot
$access{'bootup'} == 1 || &error($text{'edit_ecannot'});
foreach $b (@sel) {
if ($enable) {
print &text('mass_uenable', "<tt>$b</tt>"),"<p>\n";
&enable_at_boot($b);
}
else {
print &text('mass_udisable', "<tt>$b</tt>"),"<p>\n";
&disable_at_boot($b);
}
}
&webmin_log($enable ? 'massenable' : 'massdisable', 'launchd',
join(" ", @sel));
}
if ($in{'return'}) {
&ui_print_footer("edit_launchd.cgi?name=".&urlize($in{'return'}),
$text{'launchd_return'});
}
else {
&ui_print_footer("", $text{'index_return'});
}

59
init/save_launchd.cgi Executable file
View File

@@ -0,0 +1,59 @@
#!/usr/local/bin/perl
# Create, update or delete a launchd service
require './init-lib.pl';
&error_setup($text{'launchd_err'});
$access{'bootup'} || &error($text{'edit_ecannot'});
&ReadParse();
@launchds = &list_launchd_agents();
# Get the service
if (!$in{'new'}) {
($u) = grep { $_->{'name'} eq $in{'name'} } @launchds;
$u || &error($text{'launchd_egone'});
}
if ($in{'start'} || $in{'stop'} || $in{'restart'}) {
# Just redirect to the start page
&redirect("mass_launchd.cgi?d=".&urlize($in{'name'})."&".
($in{'start'} ? "start=1" :
$in{'restart'} ? "restart=1" : "stop=1").
"&return=".&urlize($in{'name'}));
exit;
}
if ($in{'delete'}) {
# Delete the service
&delete_launchd_agent($in{'name'});
&webmin_log("delete", "launchd", $in{'name'});
}
elsif ($in{'reload'}) {
# Re-load the service from its config file
&system_logged("launchctl unload ".quotemeta($u->{'file'})." 2>&1");
&system_logged("launchctl load ".quotemeta($u->{'file'})." 2>&1");
&webmin_log("reload", "launchd", $in{'name'});
}
elsif ($in{'new'}) {
# Validate inputs and check for clash
$in{'name'} =~ /^[a-z0-9\.\_\-]+$/i ||
&error($text{'launchd_ename'});
($clash) = grep { $_->{'name'} eq $in{'name'} } @launchds;
$clash && &error($text{'launchd_eclash'});
$in{'atstart'} =~ /\S/ || &error($text{'launchd_estart'});
# Create the config file
&create_launchd_agent($in{'name'}, $in{'atstart'}, $in{'boot'});
&webmin_log("create", "launchd", $in{'name'});
}
else {
# Just save the config file
$in{'conf'} =~ /\S/ || &error($text{'launchd_econf'});
$in{'conf'} =~ s/\r//g;
&open_lock_tempfile(CONF, ">$u->{'file'}");
&print_tempfile(CONF, $in{'conf'});
&close_tempfile(CONF);
&webmin_log("modify", "launchd", $in{'name'});
}
&redirect("");

View File

@@ -7,36 +7,44 @@ require './inittab-lib.pl';
&ui_print_header(undef, $module_info{'desc'}, "", "index", 1, 1, 0,
&help_search_link("inittab", "man"));
print &ui_form_start("delete.cgi", "post");
@links = ( &select_all_link("d"),
&select_invert_link("d"),
&ui_link("edit_inittab.cgi?new=1", $text{'inittab_new'}) );
print &ui_links_row(\@links);
@tds = ( "width=5" );
print &ui_columns_start([ "",
&hlink( $text{ 'inittab_id' }, "id" ),
&hlink( $text{ 'inittab_active' }, "active" ),
&hlink( $text{ 'inittab_runlevels' }, "runlevels" ),
&hlink( $text{ 'inittab_action' }, "action" ),
&hlink( $text{ 'inittab_process' }, "process" ) ],
100, 0, \@tds);
foreach $i (&parse_inittab()) {
local @cols;
push(@cols, &ui_link("edit_inittab.cgi?id=".&urlize($i->{'id'}),
&html_escape($i->{'id'})) );
push(@cols, $i->{'comment'} ? "<font color=#ff0000>$text{'no'}</font>"
: $text{'yes'});
local @rls = @{$i->{'levels'}};
push(@cols, @rls ? &html_escape(join(", ", @rls))
: $text{'inittab_none'});
push(@cols, $text{"inittab_".$i->{'action'}} ||
"<tt>".&html_escape($i->{'action'})."</tt>");
push(@cols, &html_escape($i->{'process'}));
print &ui_checked_columns_row(\@cols, \@tds, "d", $i->{'id'});
@inittab = &parse_inittab();
if (@inittab) {
print &ui_form_start("delete.cgi", "post");
@links = ( &select_all_link("d"),
&select_invert_link("d"),
&ui_link("edit_inittab.cgi?new=1", $text{'inittab_new'}) );
print &ui_links_row(\@links);
@tds = ( "width=5" );
print &ui_columns_start(
[ "",
&hlink( $text{ 'inittab_id' }, "id" ),
&hlink( $text{ 'inittab_active' }, "active" ),
&hlink( $text{ 'inittab_runlevels' }, "runlevels" ),
&hlink( $text{ 'inittab_action' }, "action" ),
&hlink( $text{ 'inittab_process' }, "process" ) ],
100, 0, \@tds);
foreach $i (@inittab) {
local @cols;
push(@cols, &ui_link("edit_inittab.cgi?id=".&urlize($i->{'id'}),
&html_escape($i->{'id'})) );
push(@cols, $i->{'comment'} ? "<font color=#ff0000>$text{'no'}</font>"
: $text{'yes'});
local @rls = @{$i->{'levels'}};
push(@cols, @rls ? &html_escape(join(", ", @rls))
: $text{'inittab_none'});
push(@cols, $text{"inittab_".$i->{'action'}} ||
"<tt>".&html_escape($i->{'action'})."</tt>");
push(@cols, &html_escape($i->{'process'}));
print &ui_checked_columns_row(\@cols, \@tds, "d", $i->{'id'});
}
print &ui_columns_end();
print &ui_links_row(\@links);
print &ui_form_end([ [ "delete", $text{'index_delete'} ] ]);
}
else {
print "<b>$text{'inittab_none2'}</b><p>\n";
print &ui_link("edit_inittab.cgi?new=1", $text{'inittab_new'}),"<p>\n";
}
print &ui_columns_end();
print &ui_links_row(\@links);
print &ui_form_end([ [ "delete", $text{'index_delete'} ] ]);
print &ui_hr();
print "<table width=100%><tr>\n";

View File

@@ -1,47 +1,48 @@
inittab_action=Aktion
inittab_powerwait=Bei Stromausfall
save_inittab_err=Sie haben keine Berechtigung, einen Prozess zu speichern
log_rename=Init-Prozess $1 nach $2 umbenannt
inittab_new=Neuen Init-Prozess erstellen.
inittab_process=Prozess
edit_inittab_title=Prozess $1 bearbeiten
log_create=Init-Prozess $1 erzeugt
apply_err=Fehler beim Anwenden der Konfiguration
save_inittab_noid=Fehler, es wurde kein Name f&#252;r den Prozess eingegeben
inittab_off=Nichts tun
inittab_wait=Warten
inittab_sysinit=W&#228;hrend des Systemstarts
inittab_powerokwait=Stromversorgung ist wiederhergestellt
inittab_kbdrequest=Spezielle Schl&#252;sselkombination
delete_err=Fehlgeschlagen Prozesse zu l&#246;schen
inittab_applymsg=Dr&#252;cken Sie diese Schaltfl&#228;che, um die aktuelle SysV-Init-Konfiguration durch den Befehl <tt>telinit q</tt> anzuwenden. Seien Sie sich bewusst, dass jegliche Fehler in Ihrer Konfiguration das System unbrauchbar machen k&#246;nnen, wenn dieser Befehl ausgef&#252;hrt wird.
log_modify=Init-Prozess $1 ge&#228;ndert
new_inittab_err=Sie haben keine Berechtigung, einen neuen Prozess zu erstellen
edit_inittab_details=Prozessdetails
inittab_once=Einmal im Level
inittab_ondemand=Immer wenn in A, B, C
inittab_active=Aktiviert?
inittab_kbrequest=Spezielle Tastenkombination
log_apply=Konfiguration angewandt
__norefs=1
index_delete=L&#246;sche ausgew&#228;hlte Prozesse
edit_inittab_err=Sie haben keine Berechtigung, einen Prozess zu bearbeiten
inittab_id=ID&nbsp;
inittab_boot=Beim Booten
inittab_none=Keine
apply_err=Fehler beim Anwenden der Konfiguration
delete_enone=Nichts ausgew&#228;hlt
delete_err=Fehlgeschlagen Prozesse zu l&#246;schen
edit_inittab_del=L&#246;schen
inittab_return=Inittab-Index
log_delete=Init-Prozess $1 gel&#246;scht
log_deletes=Gel&#246;schte $1 Init-Prozesse
edit_inittab_details=Prozessdetails
edit_inittab_err=Sie haben keine Berechtigung, einen Prozess zu bearbeiten
edit_inittab_save=Speichern
edit_inittab_title=Prozess $1 bearbeiten
index_delete=L&#246;sche ausgew&#228;hlte Prozesse
inittab_action=Aktion
inittab_active=Aktiviert?
inittab_apply=Init-Konfiguration anwenden
inittab_applymsg=Dr&#252;cken Sie diese Schaltfl&#228;che, um die aktuelle SysV-Init-Konfiguration durch den Befehl <tt>telinit q</tt> anzuwenden. Seien Sie sich bewusst, dass jegliche Fehler in Ihrer Konfiguration das System unbrauchbar machen k&#246;nnen, wenn dieser Befehl ausgef&#252;hrt wird.
inittab_boot=Beim Booten
inittab_bootwait=Beim Booten, warten bis Beendigung
inittab_ctrlaltdel=Strg-Alt-Entf
inittab_id=ID&nbsp;
inittab_initdefault=Nach dem Systemstart
new_inittab_title=Neuer Prozess
edit_inittab_save=Speichern
delete_enone=Nichts ausgew&#228;hlt
inittab_powerfailnow=Stromausfall
inittab_runlevels=Ausf&#252;hrungs-Level
inittab_apply=Init-Konfiguration anwenden
inittab_respawn=Neu starten
inittab_kbdrequest=Spezielle Schl&#252;sselkombination
inittab_kbrequest=Spezielle Tastenkombination
inittab_new=Neuen Init-Prozess erstellen.
inittab_none=Keine
inittab_none2=Keine bootup Prozesse auf Ihrem System gefunden. Dies zeigt an, dass es wahrscheinlich nicht die SysV init Konfigurationsdatei nutzt.
inittab_off=Nichts tun
inittab_once=Einmal im Level
inittab_ondemand=Immer wenn in A, B, C
inittab_powerfail=Bei Stromausfall ohne Warten
inittab_powerfailnow=Stromausfall
inittab_powerokwait=Stromversorgung ist wiederhergestellt
inittab_powerwait=Bei Stromausfall
inittab_process=Prozess
inittab_respawn=Neu starten
inittab_return=Inittab-Index
inittab_runlevels=Ausf&#252;hrungs-Level
inittab_sysinit=W&#228;hrend des Systemstarts
inittab_wait=Warten
log_apply=Konfiguration angewandt
log_create=Init-Prozess $1 erzeugt
log_delete=Init-Prozess $1 gel&#246;scht
log_deletes=Gel&#246;schte $1 Init-Prozesse
log_modify=Init-Prozess $1 ge&#228;ndert
log_rename=Init-Prozess $1 nach $2 umbenannt
new_inittab_err=Sie haben keine Berechtigung, einen neuen Prozess zu erstellen
new_inittab_title=Neuer Prozess
save_inittab_already=Fehler, der angegebene Prozessname ist bereits vergeben
save_inittab_err=Sie haben keine Berechtigung, einen Prozess zu speichern
save_inittab_noid=Fehler, es wurde kein Name f&#252;r den Prozess eingegeben

View File

@@ -25,6 +25,7 @@ inittab_return=process list
inittab_apply=Apply Init Configuration
inittab_applymsg=Click this button to apply the current SysV Init Configuration by running the command <tt>telinit q</tt>. Be aware that any mistakes in your configuration may make the system unusable when this command is run.
index_delete=Delete Selected Processes
inittab_none2=No bootup processes were found on your system. This probably indicates that it does not use the SysV init configuration file.
edit_inittab_err=Your not allowed to edit a process
edit_inittab_title=Edit Process $1

View File

@@ -186,6 +186,11 @@ while(<FILE>) {
$rule->{'proto'} = shift(@w);
}
# Skip inet keyword, which as far as I know does nothing
if ($w[0] eq "inet") {
shift(@w);
}
# Parse from/to section
if ($w[0] eq "all") {
shift(@w);

View File

@@ -284,7 +284,7 @@ sub get_ipsec_version
{
local $out = `$config{'ipsec'} --version 2>&1`;
${$_[0]} = $out;
return $out =~ /(FreeS\/WAN|Openswan|StrongSWAN)\s+([^ \n\(]+)/i ? ($2,$1) : (undef);
return $out =~ /(FreeS\/WAN|Openswan|StrongSWAN|Libreswan)\s+([^ \n\(]+)/i ? ($2,$1) : (undef);
}
# got_secret()

View File

@@ -123,10 +123,10 @@ help_eexec=$1 ha fallat: $2
referer_title=Avís de Seguretat
referer_warn=<b>Atenció!</b> Webmin ha detectat que el programa $2 és un enllaç a l'URL $1, que sembla ser que queda fora del servidor Webmin. Això pot ser un intent d'enganyar el servidor per tal que executi una ordre perillosa.
referer_warn_unknown=<b>Atenció!</b> Webmin ha detectat que el programa $1 és un enllaç a un URL desconegut, que sembla ser que queda fora del servidor Webmin. Això pot ser un intent d'enganyar el servidor per tal que executi una ordre perillosa.
referer_ok=Continua executant el programa Webmin
referer_again=No tornis a mostrar aquest avís
referer_eurl=URL original invàlid!
referer_eself=referer_save.cgi no es pot enllaçar directament!
referer_fix1=Si això és un enllaç legítim, pots permetre els enllaços des d'aquest URL tal i com segueix:<ul><li>Entra a Webmin normalment.<li>Ves al mòdul de <b>Configuració de Webmin</b>.<li>Fes clic a la icona de Referenciadors Fiables.<li>Introdueix el nom de host $1 al camp <b>Llocs Web fiables</b>, i fes clic a <b>Desa</b>.</ul>
referer_fix2=Alternativament, pots configurar Webmin per que permeti aquest enllaç des de la línia d'ordres:<ul><li>Entra com a <tt>root</tt> i edita el fitxer <tt>/etc/webmin/config</tt>.<li>Afegeix-hi la línia <tt>referers=$1</tt> al final o, si ja existeix una línia <tt>referers</tt>, afegeix-hi <tt>$1</tt>.<li>Desa el fitxer.</ul>
referer_fix3u=Assegura't que el teu navegador està configurat per enviar la informació del referenciador per tal que Webmin ho pugui verificar.
referer_fix2u=Alternativament, pots configurar Webmin per permetre enllaços des de referenciadors desconeguts:<ul><li>Entra com a <tt>root</tt> i edita el fitxer <tt>/etc/webmin/config</tt>.<li>Busca la línia <tt>referers_none=1</tt> i canvia-la per <tt>referers_none=0</tt>.<li>Desa el fitxer.</ul>
session_header=Entrada a Webmin
session_mesg=Per entrar al servidor Webmin de $1, has d'introduir un nom d'usuari i una contrasenya.

564
lang/cz
View File

@@ -1,164 +1,187 @@
acl_feedback=Lze poslat zpětný email?
acl_feedback0=Ne
acl_feedback1=Ano, ale ne s konfiguračními soubory
acl_feedback2=Ano
acl_feedback3=Ano, s konfiguračními soubory
acl_fileunix=Prohlížet soubory pod Unix uživatelem
acl_gedit=Uživatelé, kteří se zobrazují v manažeru skupin
acl_gedit_all=AVšechny skupiny
acl_gedit_except=Všechny skupiny kromě
acl_gedit_gid=Skupiny s GID v rozsahu
acl_gedit_none=Žádné skupiny
acl_gedit_only=Pouze skupiny
acl_home=Domovský adresář uživatele
acl_nodot=Skrýt tečkované soubory v souborovém prohlížeči?
acl_otherdirs=Jiné viditelné adresáře v souborovém prohlížeči
acl_readonly=Uživatel je v demo modu?<br>(Některé moduly nemusí být k dispozici)
acl_root=Kořenový adresář pro souborový manažer
acl_rpc=Lze akceptovat RPC volání?
acl_rpc0=Ne
acl_rpc1=Ano
acl_rpc2=Pouze pro <tt>root</tt> nebo <tt>admin</tt>
acl_sameunix=Stejné přihlášení jako ve Webminu
acl_uedit=Uživatelé, kteří se zobrazují v manažeru uživatelů
acl_uedit_all=Všichni uživatelé
acl_uedit_except=Všichni uživatelé kromě
acl_uedit_group=Uživatelé se skupinou
acl_uedit_none=Žádní uživatele
acl_uedit_only=Pouze uživatelé
acl_uedit_uid=Uživatelé s UID v rozsahu
cancel=Storno
category_=Ostatní
category_cluster=Cluster
category_hardware=Hardware
category_info=Informace
category_net=Sítě
category_servers=Servery
category_syslet=Systémové hlášky
category_system=Systém
category_webmin=Webmin
chooser_date=Změnit datum
chooser_dir=Adresář $1
chooser_eopen=Chyba v seznamu : $1
chooser_ok=Ok
chooser_title1=Vybrat soubor..
chooser_title2=Vybrat adresář..
config_dir=Pro modul $1
config_eaccess=Nemáte oprávnění pro přístup k tomuto modulu
config_ecannot=Nemáte oprávnění pro konfiguraci tohoto modulu
config_err=Chyba při ukládání konfigurace
config_ewebmin=Parametru typu 14 pracuje jen ve Webminu
config_header=Konfigurační nastavení pro $1
config_nochange=Neměňte
config_none=Nic
config_setto=Nastavit na
config_title=Konfigurace
create=Vytvořit
day_0=Neděle
day_1=Pondělí
day_2=Úterý
day_3=Středa
day_4=Čtvrtek
day_5=Pátek
day_6=Sobota
default=Výchozí
delete=Smazat
efileclose=Chyba při zápisu do $1 v momentě uzavírání : $2
efileopen=Chyba při otevření $1 pro zápis : $2
efilewrite=Chyba při zápisu do $1 : $2
elock_tries=Chyba při uzamčení souboru $1 po $2 minutách
emodule=Přístup zamítnut : Uživatel $1 nemá oprávnění použít $2 modul
emodulecheck=Modul $1 není ve vašem systému k dispozici
error=Chyba
error_file=Soubor
error_line=Řádek
error_previous=předchozí stránka
error_stack=Vyvolat zpětné chyby
error_stackline=V souboru $1 v řádku $2 vyvoláno $3
error_sub=Funkce
feedback_all=Všechny moduly
feedback_attach=Další přílohy
feedback_config=Zahrnout konfiguraci modulu?
feedback_configdesc=Pokud je tato volba vybrána, ohlášení bude obsahovat konfiguraci daného modulu a obsah konfiguračních souborů, které modul využívá. Například, pokud se ohlášení týká modulu <i>Uživatelé a Skupiny</i>, bude přiložen váš <tt>/etc/passwd</tt> a <tt>/etc/shadow</tt>.
feedback_desc=Tento formulář umožňuje oznamovat nesrovnalosti a tím přimět Webmin vývojáře zabývat se problémy či chybějícími rysy, které jste nalezli. V momentě, kdy klepnete na tlačítko Send, údaje z formuláře budou odeslány na email $1.
feedback_desc2=Toto ohlášení bude odesláno vývojáři Userminu, nikoliv system administratorovi, ISP nepo společnosti poskytující webhosting. Pište prosím vaše ohlášení v angličtině, pokud Webmin běží v jiném jazyce.
feedback_ecannot=Nemáte oprávnění odesílat ohlášení
feedback_ecannot2=Nemáte oprávnění odesílat ohlášení s připojením konfiguračních souborů
feedback_econfig=Nemáte plná přístupová práva ke zvolenému modulu.
feedback_email=Váš email
feedback_emodule=Zvolili jste připojení konfigurace modulu, ale nevybrali jste si modul.
feedback_emodule2=Zvolený modul neexistuje
feedback_enoto=Nebyly vloženy žádné adresy pro odeslání ohlášení na
feedback_err=Chyba při odeslání ohlášení
feedback_esend=Chyba při odeslání ohlášení prostřednictvím sendmail programu or místního SMTP serveru.
feedback_header=Detaily ohlášení
feedback_mailserver=Poslat prostřednictvím SMTP serveru
feedback_mailserver_def=Místní sendmail program
feedback_module=Modul, kterého se ohlášení týká
feedback_name=Vaše jméno
feedback_os=Zahrnout informace o operačním systému?
feedback_osdesc=Pokud je tato volba vybrána, ohlášení bude obsahovat název operačního systému a jeho verzi.
feedback_prog=Odeslané ohlášení na $1 využitím sendmail programu $2
feedback_send=Odeslát ohlášení
feedback_text=Popis chyby nebo připomínky
feedback_title=Webmin ohlášení
feedback_to=Odeslat ohlášení na adresy
feedback_via=Odeslané ohlášení na $1 prostřednictvím SMTP serveru $2
find=Najít
groups_all=Všechny skupiny
groups_cancel=Storno
groups_clear=Vyčistit
groups_ok=Ok
groups_sel=Vybrané skupiny
groups_title1=Vybrat skupiny..
groups_title2=Vybrat skupinu..
header_config=Konfigurace modulu
header_help=Nápověda..
header_module=Úvodní stránka Modulu
header_servers=Servery Webminu
header_statusmsg=$1 logováno do $2 $3 na $4 ($5)
header_webmin=Úvodní stránka Webminu
help_eexec=$1 chyba : $2
help_efile=Chyba při čtení souboru nápovědy $1
help_eheader=Chybějící &lt;header&gt; section
help_eif=$1 chyba : $2
help_einclude=Nemohu vložit $1
help_epath=Chybějící cesta k souboru nápovědy
help_err=Nemohu zobrazit nápovědu
helpsearch=Hledat v Docs..
index=seznam
link_essl=Pro HTTPS připojení je potřeba modul Perlu Net::SSLeay Perl, ten však není ve vašem systému nainstalován.
longcategory_=Moduly, které nenáleží do žádné kategorie
longcategory_cluster=Moduly, které umožňují správu vícero serverů pod jedním rozhraním
longcategory_hardware=Moduly pro tiskárnu, disk a konfiguraci podobných zařízení
longcategory_info=Moduly, které zobrazují informaci o vašem systému
longcategory_net=Moduly, které konfigurují sítě a síťová zařízení
longcategory_servers=Moduly pro konfiguraci webu, emailu, FTP a podobných serverů
longcategory_system=Moduly pro uživatele, souborové systémy, crony a podobná nastavení systému
longcategory_webmin=Moduly pro konfiguraci samotného Webminu
main_feedback=Feedback..
main_homepage=Hlavní strana
main_feedback=Zpětná vazba..
main_switch=Přepnout uživatele..
main_logout=Odhlásit
main_none=Nemáte přístup na žádný Webmin modul.
main_readonly=(Mod Pouze ke čtení)
main_return=Zpět na $1
main_skill=ůrověň dovednosti
main_switch=Přepnout uživatele ..
main_version=Verze $1 na $2 ($3)
main_title=Webmin $1 na $2 ($3)
main_title2=Webmin
main_version=Verze $1 na $2 ($3)
main_title3=Webmin $1 ($2)
main_none=Nemáte přístup na žádný Webmin modul.
main_skill=ůrověň dovednosti
main_readonly=(Mód Pouze ke čtení)
main_return=Zpět na $1
main_unused=Nepoužité moduly
main_refreshmods=Obnovit moduly
link_essl=Pro HTTPS připojení je potřeba modul Perlu Net::SSLeay Perl, ten však není ve vašem systému nainstalován.
category_servers=Servery
category_hardware=Hardware
category_system=Systém
category_webmin=Webmin
category_net=Sítě
category_syslet=Systémové hlášky
category_cluster=Cluster
category_info=Informace
category_=Ostatní
longcategory_servers=Moduly pro konfiguraci webu, emailu, FTP a podobných serverů
longcategory_hardware=Moduly pro tiskárnu, disk a konfiguraci podobných zařízení
longcategory_system=Moduly pro uživatele, souborové systémy, crony a podobná nastavení systému
longcategory_webmin=Moduly pro konfiguraci samotného Webminu
longcategory_net=Moduly, které konfigurují sítě a síťová zařízení
longcategory_cluster=Moduly, které umožňují správu více serverů pod jedním rozhraním
longcategory_info=Moduly, které zobrazují informaci o vašem systému
longcategory_=Moduly, které nenáleží do žádné kategorie
header_webmin=Úvodní stránka Webminu
header_module=Úvodní stránka Modulu
header_help=Nápověda..
header_config=Konfigurace modulu
header_servers=Servery Webminu
index=seznam
yes=Ano
no=Ne
save=Zapsat
create=Vytvořit
delete=Smazat
find=Najít
error=Chyba
error_previous=předchozí stránka
error_stack=Vyvolat zpětné chyby
error_file=Soubor
error_line=Řádek
error_sub=Funkce
error_stackline=V souboru $1 v řádku $2 vyvoláno $3
efilewrite=Chyba při zápisu do $1 : $2
efileclose=Chyba při zápisu do $1 v momentě uzavírání : $2
efileopen=Chyba při otevření $1 pro zápis : $2
default=Výchozí
modify=Změnit
reset=Reset
ok=OK
cancel=Storno
helpsearch=Hledat v Docs..
switch_remote_euser=Unix uživatel $1 neexistuje.
programname=Webmin
euserdbacl=Nepodařilo se získat ACL uživatele : $1
euserdbacl2=Nepodařilo se aktualizovat ACL uživatele : $1
egroupdbacl=Nepodařilo se získat ACL skupiny : $1
egroupdbacl2=Nepodařilo se aktualizovat ACL pro skupinu : $1
chooser_title1=Vybrat soubor..
chooser_title2=Vybrat adresář..
chooser_dir=Adresář $1
chooser_ok=Ok
chooser_date=Změnit datum
chooser_eopen=Chyba výběru : $1
users_title1=Vybrat více uživatelů..
users_title2=Vybrat uživatele..
users_sel=Vybraní uživatelé
users_all=Všichni uživatelé
users_ok=Ok
users_cancel=Storno
users_clear=Vyčistit
groups_title1=Vybrat skupiny..
groups_title2=Vybrat skupinu..
groups_all=Všechny skupiny
groups_sel=Vybrané skupiny
groups_ok=Ok
groups_cancel=Storno
groups_clear=Vyčistit
modules_title1=Vybrat moduly..
modules_title2=Vybrat modul..
modules_sel=Vybrané moduly
modules_all=Všechny moduly
modules_ok=Ok
modules_cancel=Opustit
modules_clear=Vyčistit
modules_ok=Ok
modules_sel=Vybrané moduly
modules_title1=Vybrané moduly..
modules_title2=Vybrat moduly..
config_ecannot=Nemáte oprávnění pro konfiguraci tohoto modulu
config_title=Konfigurace
config_dir=Pro modul $1
config_header=Konfigurační nastavení pro $1
config_none=Nic
config_eaccess=Nemáte oprávnění pro přístup k tomuto modulu
config_err=Chyba při ukládání konfigurace
config_nochange=Neměňte
config_setto=Nastavit na
config_ewebmin=Parametru typu 14 pracuje jen ve Webminu
help_err=Nemohu zobrazit nápovědu
help_epath=Chybějící/nesprávná cesta k souboru nápovědy
help_efile=Chyba při čtení souboru nápovědy $1
help_eheader=Chybějící &lt;header&gt; section
help_einclude=Nemohu vložit $1
help_eexec=$1 chyba : $2
help_eif=$1 chyba : $2
referer_title=Bezpečnostní varování
referer_warn=<b>Pozor!</b> Webmin zjistil, že program $2 byl nalinkován z URL $1 a tudíž mimo Webmin server. Tento postup může vést ke snaze spouštět nebezpečné příkazy.
referer_warn_unknown=<b>Pozor!</b> Webmin zjistil, že program $2 byl nalinkován z neznámé URL a tudíž mimo Webmin server. Tento postup může vést ke snaze spouštět nebezpečné příkazy.
referer_fix1=Je-li to legitimní odkaz, můžete použít odkazy z tohoto URL následovně:<ul><li>Přihlásit se do Webminu normálním způsobem.<li>Přejít do modulu <b>Konfigurace Webminu</b>.<li>Klepnout na ikonu důvěryhodné zdroje.<li>Vložit hostname $1 do pole <b>Důvěryhodných webových sídel</b> a klepnout na <b>Uložit</b>.</ul>
referer_fix2=Alternativně, můžete nastavit Webmin, aby povolil tento odkaz z příkazové řádky a to následovně:<ul><li>Přihlaste pod <tt>rootem</tt> a upravte soubor <tt>/etc/webmin/config</tt>.<li>Přidejte řádek <tt>referers=$1</tt> na konec nebo existuje-li již řádek <tt>zdroje</tt> přidejte <tt>$1</tt> do něj.<li>Uložte soubor.</ul>
referer_fix3u=Ujistěte se, že má váš prohlížeč nastavené odesílání hlavičky <tt>Referer</tt>, kterou může Webmin ověřit.
referer_fix2u=Alternativně, můžete nastavit Webmin, aby povolil odkazy z neznámých zdrojů a to následovně:<ul><li>Přihlaste pod uživatelem <tt>root</tt> a upravte soubor <tt>/etc/webmin/config</tt>.<li>Najděte řádek <tt>referers_none=1</tt> a odstraňte jej.<li>Uložte soubor.</ul>
session_header=Přihlášení do Webminu
session_mesg=Pokud se chcete přihlásit k Webmin serveru na $1, musíte zadat jméno a heslo.
session_mesg2=Pokud se chcete přihlásit, musíte zadat jméno a heslo.
session_user=Uživatelské jméno
session_pass=Heslo
session_twofactor=Dvou-faktorový token
session_login=Přihlásit
session_clear=Vyčistit
session_failed=Chybné přihlášení. Zkuste to znovu.
session_twofailed=Dvou-faktorová autentizace selhala : $1
session_logout=Odhlášení bylo úspěšné. Můžete použít níže uvedený formulář pro opětovné přihlášení.
session_timed_out=Relace byla odpojena po $1 minutách nečinnosti.
session_save=Trvale si zapamatovat přihlášení?
pam_header=Přihlásit do Webminu
pam_mesg=Chcete-li se přihlásit do Webminu na $1, musíte odpovědět na níže uvedenou otázku.
pam_mesg2=Chcete-li se přihlásit, musíte odpovědět na níže uvedenou otázku.
pam_login=Pokračovat
pam_restart=Restartovat
acl_root=Kořenový adresář pro souborový manažer
acl_otherdirs=Jiné viditelné adresáře v souborovém prohlížeči
acl_nodot=Skrýt tečkované soubory v souborovém prohlížeči?
acl_home=Domovský adresář uživatele
acl_uedit=Uživatelé, kteří se zobrazují v manažeru uživatelů
acl_uedit_all=Všichni uživatelé
acl_uedit_none=Žádní uživatele
acl_uedit_only=Pouze uživatelé
acl_uedit_except=Všichni uživatelé kromě
acl_uedit_uid=Uživatelé s UID v rozsahu
acl_uedit_group=Uživatelé se skupinou
acl_gedit=Uživatelé, kteří se zobrazují v manažeru skupin
acl_gedit_all=AVšechny skupiny
acl_gedit_none=Žádné skupiny
acl_gedit_only=Pouze skupiny
acl_gedit_gid=Skupiny s GID v rozsahu
acl_gedit_except=Všechny skupiny kromě
acl_feedback=Lze poslat zpětný email?
acl_feedback2=Ano
acl_feedback1=Ano, ale ne s konfiguračními soubory
acl_feedback0=Ne
acl_feedback3=Ano, s konfiguračními soubory
acl_rpc=Lze akceptovat RPC volání?
acl_rpc2=Pouze pro uživatele <tt>root</tt> nebo <tt>admin</tt>
acl_rpc1=Ano
acl_rpc0=Ne
acl_readonly2=Uživatel je v Demo módu?
acl_readonlyyes=Ano (Některé moduly nemusí být dostupné)
acl_negative=Povolit uživateli práva k novým modulům?
acl_fileunix=Prohlížet soubory pod Unix uživatelem
acl_sameunix=Stejné přihlášení jako ve Webminu
acl_webminsearch=Zobrazit vyhledávací pole?
month_1=Leden
month_10=Říjen
month_11=Listopad
month_12=Prosinec
month_2=Únor
month_3=Březen
month_4=Duben
@@ -167,74 +190,19 @@ month_6=
month_7=Červenec
month_8=Srpen
month_9=Září
no=Ne
ok=OK
pam_header=Přihlásit do Webminu
pam_login=Pokračovat
pam_mesg=Chcete-li se přihlásit do Webminu na $1, musíte odpovědět na níže uvedenou otázku.
pam_mesg2=Chcete-li se přihlásit, musíte odpovědět na níže uvedenou otázku.
pam_restart=Restartovat
password_clear=Vyčistit
password_done=Vaše heslo bylo úspěšně změněno. Nyní se musíte <a href='$1'>opětovně přihlásit</a>, přičemž využijete nové heslo.
password_emodpam=Pro změnu hesla je nutné mít nainstalovaný modul Perlu Authen::PAM!
password_enew1=Nebylo vloženo žádné nové heslo
password_enew2=Vámi zapsaná nová hesla se neshodují
password_enewpass=Nové heslo není povoleno : $1
password_eold=Nové heslo nebylo zapsáno správně
password_epam=PAM chyba : $1
password_err=Chyba při změně hesla
password_euser=Vaše přihlašovací jméno nebylo nalezeno v souboru hesel!
password_expired=Vaše heslo vypršelo, takže jej budete muset změnit.
password_header=Vybrat nové heslo
password_new1=Nové heslo
password_new2=Zopakování nového hesla
password_ok=Změnit
password_old=Platné heslo
password_user=Uživatelské jméno
programname=Webmin
progress_data=Přijato $1 bytů ($2 %)
progress_data2=Přijato $1 bytů
progress_done=.. Stahování dokončeno.
progress_incache=Nalezeno $1 v cache ..
progress_nosize=Stahování $1 ..
progress_size=Stahování $1 ($2 bytů) ..
readparse_cdheader=Chybějící hlavička Content-Disposition
readparse_enc=Očekává se kódování form-data, přičemž byla doručena data v normálním kódování
readparse_max=Data překročila maximální velikost o $1 bytů
referer_fix1=Je-li to legitimní odkaz, můžete použít odkazy z tohoto URL následovně:<ul><li>Přihlásit se do Webminu normálním způsobem.<li>Přejít do modulu <b>Konfigurace Webminu</b>.<li>Klepnout na ikonu důvěryhodné zdroje.<li>Vložit hostname $1 do pole <b>Důvěryhodných webových sídel</b> a klepnout na <b>Uložit</b>.</ul>
referer_fix1u=Jestliže nemůže váš prohlížeč odeslat potřebou hlavičku <tt>Referer</tt>, můžete vypnout tuto volbu následovně:<ul><li>Přihlásit se do Webminu normálním způsobem.<li>Přejít do modulu <b>Konfigurace Webminu</b>.<li>Klepnout na ikonu důvěryhodné zdroje.<li>Zkontrolovat pole <b>Důvěryhodné odkazy z neznámých zdrojů</b> a klepnout na <b>Uložit</b>.</ul>
referer_fix2=Alternativně, můžete nastavit Webmin, aby povolil tento odkaz z příkazové řádky a to následovně:<ul><li>Přihlaste pod <tt>rootem</tt> a upravte soubor <tt>/etc/webmin/config</tt>.<li>Přidejte řádek <tt>referers=$1</tt> na konec nebo existuje-li již řádek <tt>zdroje</tt> přidejte <tt>$1</tt> do něj.<li>Uložte soubor.</ul>
referer_fix2u=Alternativně, můžete nastavit Webmin, aby povolil odkazy z neznámých zdrojů a to následovně:<ul><li>Přihlaste pod <tt>rootem</tt> a upravte soubor <tt>/etc/webmin/config</tt>.<li>Najděte řádek <tt>referers_none=1</tt> a odstraňte jej.<li>Uložte soubor.</ul>
referer_title=Bezpečnostní varování
referer_warn=<b>Pozor!</b> Webmin zjistil, že program $2 byl nalinkován z URL $1 a tudíž mimo Webmin server. Tento postup může vést ke snaze spouštět nebezpečné příkazy.
referer_warn_unknown=<b>Pozor!</b> Webmin zjistil, že program $2 byl nalinkován z neznámé URL a tudíž mimo Webmin server. Tento postup může vést ke snaze spouštět nebezpečné příkazy.
reset=Reset
save=Zapsat
sday_0=Ne
sday_1=Po
sday_2=Út
sday_3=St
sday_4=Čt
sday_5=Pá
sday_6=So
session_clear=Vyčistit
session_failed=Chybné přihlášení. Zkuste to znovu.
session_header=Přihlášení do Webminu
session_login=Přihlásit
session_logout=Odhlášení bylo úspěšné. Můžete použít níže uvedený formulář pro opětovné přihlášení.
session_mesg=Pokud se chcete přihlásit k Webmin serveru na $1, musíte zadat jméno a heslo.
session_mesg2=Pokud se chcete přihlásit, musíte zadat jméno a heslo.
session_pass=Heslo
session_save=Trvale si zapamatovat přihlášení?
session_timed_out=Relace byla odpojena po $1 minutách nečinnosti.
session_user=Uživatelské jméno
skill_high=Expert
skill_low=Začátečník
skill_medium=Pokročilý
month_10=Říjen
month_11=Listopad
month_12=Prosinec
day_0=Neděle
day_1=Pondělí
day_2=Úterý
day_3=Středa
day_4=Čtvrtek
day_5=Pátek
day_6=Sobota
smonth_1=Led
smonth_10=Říj
smonth_11=Lis
smonth_12=Pro
smonth_2=Úno
smonth_3=Bře
smonth_4=Dub
@@ -243,45 +211,145 @@ smonth_6=
smonth_7=Črc
smonth_8=Srp
smonth_9=Zář
switch_remote_euser=Unix uživatel $1 neexistuje.
ui_checkmandatory=Nebylo nic vybráno
ui_edate=Neplatné datum
ui_errors=Bylo nalezeno více chyb :
ui_etime=Neplatný čas :
smonth_10=Říj
smonth_11=Lis
smonth_12=Pro
sday_0=Ne
sday_1=Po
sday_2=Út
sday_3=St
sday_4=Čt
sday_5=Pá
sday_6=So
emodule=Přístup zamítnut : Uživatel $1 nemá oprávnění použít $2 modul
emodulecheck=Modul $1 není ve vašem systému k dispozici
elock_tries2=Nepodařilo se uzamčít soubor $1 po $2 minutách. Poslední chyba: $3
skill_high=Expert
skill_medium=Pokročilý
skill_low=Začátečník
feedback_title=Webmin ohlášení
feedback_desc=Tento formulář umožňuje oznamovat nesrovnalosti a tím přimět Webmin vývojáře zabývat se problémy či chybějícími rysy, které jste nalezli. V momentě, kdy klepnete na tlačítko Send, údaje z formuláře budou odeslány na email $1.
feedback_desc2=Toto ohlášení bude odesláno vývojáři Userminu, nikoliv system administratorovi, ISP nepo společnosti poskytující webhosting. Pište prosím vaše ohlášení v angličtině, pokud Webmin běží v jiném jazyce.
feedback_header=Detaily ohlášení
feedback_name=Vaše jméno
feedback_email=Váš email
feedback_module=Modul, kterého se ohlášení týká
feedback_all=Všechny moduly
feedback_text=Popis chyby nebo připomínky
feedback_os=Zahrnout informace o operačním systému?
feedback_osdesc=Pokud je tato volba vybrána, ohlášení bude obsahovat název operačního systému a jeho verzi.
feedback_config=Zahrnout konfiguraci modulu?
feedback_configdesc=Pokud je tato volba vybrána, ohlášení bude obsahovat konfiguraci daného modulu a obsah konfiguračních souborů, které modul využívá. Například, pokud se ohlášení týká modulu <i>Uživatelé a Skupiny</i>, bude přiložen váš <tt>/etc/passwd</tt> a <tt>/etc/shadow</tt>.
feedback_attach=Další přílohy
feedback_send=Odeslát ohlášení
feedback_mailserver=Poslat prostřednictvím SMTP serveru
feedback_mailserver_def=Místní sendmail program
feedback_err=Chyba při odeslání ohlášení
feedback_emodule=Zvolili jste připojení konfigurace modulu, ale nevybrali jste si modul.
feedback_emodule2=Zvolený modul neexistuje
feedback_econfig=Nemáte plná přístupová práva ke zvolenému modulu.
feedback_via=Odeslané ohlášení na $1 prostřednictvím SMTP serveru $2
feedback_prog=Odeslané ohlášení na $1 využitím sendmail programu $2
feedback_esend=Chyba při odeslání ohlášení prostřednictvím sendmail programu or místního SMTP serveru.
feedback_to=Odeslat ohlášení na adresy
feedback_enoto=Nebyly vloženy žádné adresy pro odeslání ohlášení na
feedback_ecannot=Nemáte oprávnění odesílat ohlášení
feedback_ecannot2=Nemáte oprávnění odesílat ohlášení s připojením konfiguračních souborů
progress_size2=Stahování $1 ($2) ..
progress_nosize=Stahování $1 ..
progress_datan=Přijato $1 ($2 %)
progress_data2n=Přijato $1
progress_done=.. Stahování dokončeno.
progress_incache=Nalezeno $1 v mezipaměti ..
readparse_cdheader=Chybějící hlavička Content-Disposition
readparse_enc=Očekává se kódování form-data, přičemž byla doručena data v normálním kódování
readparse_max=Data překročila maximální velikost o $1 bytů
password_expired=Vaše heslo vypršelo, takže jej budete muset změnit.
password_temp=Musíte zadat nové heslo, abyste zrušil dočasné přihlášení.
password_header=Vybrat nové heslo
password_user=Uživatelské jméno
password_old=Platné heslo
password_new1=Nové heslo
password_new2=Zopakování nového hesla
password_ok=Změnit
password_clear=Vyčistit
password_done=Vaše heslo bylo úspěšně změněno. Nyní se musíte <a href='$1'>opětovně přihlásit</a>, přičemž využijete nové heslo.
password_err=Chyba při změně hesla
password_euser=Vaše přihlašovací jméno nebylo nalezeno v souboru hesel!
password_eold=Nové heslo nebylo zapsáno správně
password_enew1=Nebylo vloženo žádné nové heslo
password_enew2=Vámi zapsaná nová hesla se neshodují
password_epam=PAM chyba : $1
password_emodpam=Pro změnu hesla je nutné mít nainstalovaný modul Perlu Authen::PAM!
password_enewpass=Nové heslo není povoleno : $1
ui_mandatory=Toto pole je povinné
ui_checkmandatory=Nebylo nic vybráno
ui_errors=Bylo nalezeno více chyb :
ui_nothing=Nebylo nic vloženo
ui_paging=Zobrazené řádky $1 do $2 z $3
ui_rowlabel=$2 v řádku $1 :
ui_searchcol=Najít řádky, kde
ui_searchfor=Obsahuje text
ui_searchok=Hledat
ui_selall=Vybrat vše.
ui_selinv=Obrátit výběr.
ui_edate=Neplatné datum
ui_etime=Neplatný čas :
ui_paging=Zobrazené řádky $1 do $2 z $3
ui_rowlabel=$2 v řádku $1 :
ui_filterbox=Typ k filtrování..
header_statusmsg=$1 logováno do $2 $3 na $4 ($5)
uptracker_title=Nahrávaný soubor
uptracker_file=Název souboru
uptracker_size=Velikost
uptracker_pc=Právě běží
uptracker_eid=Nebylo uvedeno ID uploadu specifikované
uptracker_eid2=ID uploadu je neplatné!
uptracker_file=Název souboru
uptracker_of=$1 z $2
uptracker_pc=Právě běží
uptracker_size=Velikost
uptracker_title=Nahrávaný soubor
users_all=Všichni uživatelé
users_cancel=Storno
users_clear=Vyčistit
users_ok=Ok
users_sel=Vybraní uživatelé
users_title1=Vybrat více uživatelů..
users_title2=Vybrat uživatele..
wsearch_config_usermin=Nastavení Userminu
wsearch_config_webmin=Modul pro konfiguraci Webminu
wsearch_enone=Žádný Webmin modul nebo stránka nevyhovuje $1.
wsearch_esearch=Nebylo vloženo nic, co má být vyhledáno.
wsearch_help=Stránka pro pomoc
wsearch_inmod=V $1
wsearch_mod=$1 modul
wsearch_title=Hledat $1
wsearch_modt=Modul
wsearch_mtitle=Název modulu
wsearch_text=Text pro uživatelské rozhraní
wsearch_title=Hledat $1
wsearch_type=Odpovídající typ
wsearch_what=Odpovídající stránka
yes=Ano
wsearch_type=Odpovídající typ
wsearch_mod=$1 modul
wsearch_config_webmin=Modul pro konfiguraci Webminu
wsearch_config_usermin=Nastavení Userminu
wsearch_help=Stránka pro pomoc
wsearch_inmod=V $1
wsearch_text=Text pro uživatelské rozhraní
wsearch_esearch=Nebylo vloženo nic, co má být vyhledáno.
wsearch_enone=Žádný Webmin modul nebo stránka nevyhovuje $1.
wsearch_on=(V $1)
wsearch_helpfor=Nápověda pro <i>$1</i>
wsearch_htext=Shodující se text
wsearch_htype=Zdroje
wsearch_hcgis=Reference
wsearch_type_mod=Název Modulu
wsearch_type_config=Konfigurace
wsearch_type_help=Nápověda
wsearch_type_text=Uživatelské rozhraní
wsearch_type_dir=URL modulu
wsearch_hmod=Modul
wsearch_moddir=URL cesta /$1/
wsearch_searching=Hledám $1 . .
wsearch_found=Nalezeno $1 výsledků:
sql_emysqldriver=Nepodařilo se nahrát ovladač MySQL DBI
sql_emysqlconnect=Nepodařilo se připojit k MySQL databázi : $1
sql_epostgresqldriver=Nepodařilo se nahrát ovladač PostgreSQL DBI
sql_epostgresqlconnect=Nepodařilo se připojit k PostgreSQL databázi : $1
sql_eldapdriver=Nepodařilo se nahrát Perlový modul pro LDAP
sql_eldapconnect=Nepodařilo se připojit k LDAP serveru $1
sql_eldaptls=Nepodařilo se navázat TLS šifrování pro LDAP : $1
sql_eldaplogin=Nepodařilo se přihlásit k LDAP serveru jako uživatel $1 : $2

View File

@@ -214,9 +214,9 @@ readparse_cdheader=Manglende Content-Disposition header
readparse_enc=Forventet form-data tegnkoding, men mottok normal tegnkoding
readparse_max=Data overskred maksimumsstørrelse på $1 bytes
referer_fix1=Dersom dette er en gyldig lenke, kan du tillate lenker fra denne URLen på følgende måte:<ul><li>Logg inn på Webmin på vanlig måte.<li>Gå til <b>Webmin konfigurasjon</b> modulen.<li>Klikk på ikonet Betrodde referenter.<li>Skriv inn vertsnavnet $1 inn i feltet <b>Betrodde nettsteder</b>, og klikk <b>Lagre</b>.</ul>
referer_fix1u=Dersom nettleseren din ikke sender den nødvendige <tt>Referer</tt> headeren, kan du slå av denne sjekken på følgende måte :<ul><li>Logg inn på Webmin på vanlig måte.<li>Gå til <b>Webmin konfigurasjon</b> modulen.<li>Klikk på ikonet Betrodde Referenter.<li>Kryss av i boksen <b>Stol på lenker fra ukjente referenter</b>, og klikk <b>Lagre</b>.</ul>
referer_fix2=Alternativt kan du konfigurere Webmin til å tillate denne lenken fra kommandolinjen ved å:<ul><li>Logge inn som <tt>root</tt>, og redigere filen <tt>/etc/webmin/config</tt>.<li>Legg til linjen <tt>referers=$1</tt> på slutten, eller dersom en <tt>referers</tt> linje allerede finnes legger du til <tt>$1</tt> til den.<li>Lagre filen.</ul>
referer_fix2u=Alternativt kan du konfigurere Webmin til å tillate lenker fra ukjente referenter ved å :<ul><li>Logge inn som <tt>root</tt>, og redigere filen <tt>/etc/webmin/config</tt>.<li>Finn linjen <tt>referers_none=1</tt> og endre den til <tt>referers_none=0</tt>.<li>Lagre filen.</ul>
referer_fix3u=Forsikre deg om at nettleseren din er konfigurert til å sende referer-informasjon slik at den kan verifiseres av Webmin
referer_title=Sikkerhetsadvarsel
referer_warn=<b>Advarsel!</b> Webmin har oppdaget at URL $1 linken til programmet $2, ser ut til å vare utenfor Webmin serveren. Dette kan vare ett forsøk på å lure din server til å utføre ett farligt kommando.
referer_warn_unknown=<b>Advarsel!</b> Webmin har oppdaget at programmet $1 ble lenket til fra en ukjent URL, som ser ut til å ligge utenfor Webmin serveren. Dette kan være ett forsøk på å lure din server til å utføre en farlig kommando.

View File

@@ -15,3 +15,5 @@ Improved support for older versions of Net::LDAP without the hosts() function.
If a TLS certificate and key are defined in the LDAP client configuration file, they will be used by Webmin when connecting to the LDAP database.
---- Changes since 1.690 ----
Added support for nslcd as seen on CentOS 6 and above.
---- Changes since 1.740 ----
Various fixes needed to support the new NSLCD LDAP client used by CentOS 7.

View File

@@ -8,8 +8,24 @@ $conf = &get_config();
print &ui_form_start("save_base.cgi", "post");
print &ui_table_start($text{'base_header'}, "width=100%", 2);
@bases = &find_value("base", $conf);
@scopes = &find_value("scope", $conf);
@filters = &find_value("filter", $conf);
if (&get_ldap_client() eq "nss") {
# Base is just one directive
$base = $bases[0];
$scope = $scopes[0];
$filter = $filters[0];
}
else {
# Default base, scope and filter are the ones with no DB
($base) = grep { /^\S+$/ } @bases;
($scope) = grep { /^\S+$/ } @scopes;
($filter) = grep { /^\S+$/ } @filters;
}
print &ui_table_row($text{'base_base'},
&ui_textbox("base", &find_svalue("base", $conf), 50)."\n".
&ui_textbox("base", $base, 50)."\n".
&base_chooser_button("base", 0));
$scopes = [ [ "", $text{'default'} ],
@@ -17,7 +33,7 @@ $scopes = [ [ "", $text{'default'} ],
[ "one", $text{'base_sone'} ],
[ "base", $text{'base_sbase'} ] ];
print &ui_table_row($text{'base_scope'},
&ui_select("scope", &find_svalue("scope", $conf), $scopes));
&ui_select("scope", $scope, $scopes));
print &ui_table_row($text{'base_timelimit'},
&ui_opt_textbox("timelimit", &find_svalue("timelimit", $conf), 5,
@@ -25,16 +41,29 @@ print &ui_table_row($text{'base_timelimit'},
$sp = "&nbsp;" x 5;
foreach $b (@base_types) {
local $base = &find_svalue("nss_base_".$b, $conf);
local ($scope, $filter);
if ($base =~ /^(.*)\?(.*)\?(.*)$/) {
$base = $1;
$scope = $2;
$filter = $3;
local ($base, $scope, $filter);
if (&get_ldap_client() eq "nss") {
# Older LDAP config uses directives like nss_base_passwd, with
# the scope and filter separated by ?
$base = &find_svalue("nss_base_".$b, $conf);
if ($base =~ /^(.*)\?(.*)\?(.*)$/) {
$base = $1;
$scope = $2;
$filter = $3;
}
elsif ($base =~ /^(.*)\?(.*)$/) {
$base = $1;
$scope = $2;
}
}
elsif ($base =~ /^(.*)\?(.*)$/) {
$base = $1;
$scope = $2;
else {
# Newer LDAP config uses
($base) = map { /^\S+\s+(\S+)/; $1 }
grep { /^\Q$b\E\s/ } @bases;
($scope) = map { /^\S+\s+(\S+)/; $1 }
grep { /^\Q$b\E\s/ } @scopes;
($filter) = map { /^\S+\s+(\S+)/; $1 }
grep { /^\Q$b\E\s/ } @filters;
}
print &ui_table_row($text{'base_'.$b},
&ui_opt_textbox("base_$b", $base, 50, $text{'base_global'})." ".

View File

@@ -50,6 +50,8 @@ if ($config{'init_name'} &&
($st = &init::action_status($config{'init_name'}))) {
# Start or stop
if (&init::status_action($config{'init_name'}) == 1) {
print &ui_buttons_row("restart.cgi", $text{'index_restart'},
$text{'index_restartdesc'});
print &ui_buttons_row("stop.cgi", $text{'index_stop'},
$text{'index_stopdesc'});
}

View File

@@ -10,6 +10,8 @@ index_stop=Atura el Dimoni Client LDAP
index_stopdesc=Tanca el dimoni client LDAP local, cosa que és necessària per consultar el servidor LDAP remot.
index_start=Inicia el Dimoni Client LDAP
index_startdesc=Inicia el dimoni client LDAP local, cosa que és necessària per a consultar el servidor LDAP remot. Fins que no s'hagi iniciat, els usuaris i grups LDAP no seran accessibles.
index_restart=Reinicia el Dimoni Client LDAP
index_restartdesc=Aplica la configuració actual reiniciant el dimoni client LDAP local.
index_atboot=Inicia el Client LDAP Client En Engegar
index_atbootdesc=Canvia si el dimoni client LDAP s'ha diniciar en engegar el sistema o no.
@@ -212,6 +214,7 @@ log_atboot=S'ha activat el dimoni client LDAP en engegar el sistema
log_delboot=S'ha desactivat el dimoni client LDAP en engegar el sistema
log_start=S'ha iniciat el dimoni client LDAP
log_stop=S'ha aturat el dimoni client LDAP
log_restart=S'ha reiniciar el dimoni client LDAP
check_title=Validació de Configuració LDAP
check_base=S'està buscant la base LDAP dels usuaris...

View File

@@ -1,24 +1,60 @@
__norefs=1
base_aliases=Basis f&#252;r E-Mail-Aliase
base_base=Globale Suchbasis
base_bfilter=Suchfilter
base_bscope=Suchtiefe
base_ealiases=Fehlende Basis f&#252;r E-Mail-Aliase
base_ebase=Fehlende globale Suchbasis
base_egroup=Fehlende Basis f&#252;r Unix Gruppen
base_ehosts=Fehlende Basis f&#252;r Hostnamen
base_enetgroup=Fehlende Basis f&#252;r Netzgruppen
base_enetmasks=Fehlende Basis f&#252;r Netzwerknamen
base_enetworks=Fehlende Basis f&#252;r Netzwerknamen
base_epasswd=Fehlende Basis f&#252;r Unix Benutzer
base_eprotocols=Fehlende Basis f&#252;r Protokolle
base_err=Fehlgeschlagen LDAP Suchbasen zu speichern
base_eservices=Fehlende Basis f&#252;r Netzwerkdienste
base_eshadow=Fehlende Basis f&#252;r Unix Passw&#246;rter
base_etimelimit=Fehlende oder ung&#252;ltige Suchfrist
base_global=Globale Basis
base_group=Basis f&#252;r Unix Gruppen
base_header=LDAP Verzeichnis Suchorte
base_hosts=Basis f&#252;r Hostnamen
base_netgroup=Basis f&#252;r Netzgruppen
base_netmasks=Basis f&#252;r Netzwerknamen
base_networks=Basis f&#252;r Netzwerknamen
base_passwd=Basis f&#252;r Unix Benutzer
base_protocols=Basis f&#252;r Protokolle
base_sbase=Nur Basis
base_scope=Suchtiefe
base_secs=Sekunden
base_services=Basis f&#252;r Netzwerkdienste
base_shadow=Basis f&#252;r Unix Passw&#246;rter
base_sone=Eine Level
base_ssub=Kompletter Teilbaum
base_timelimit=Such-Frist
base_title=LDAP Such-Basen
browser_attrs=Objektattribute
browser_base=Browse:
browser_econn=Der LDAP-Browser k&#246;nnen nicht verwendet werden : $1
browser_esearch=LDAP-Suche fehlgeschlagen : $1
browser_none=Keine
browser_ok=Zeigen
browser_parent=Durchsuche &#220;bergeordnetes
browser_sel=OK
browser_subs=Untergeordnete Objekte
browser_title=LDAP Browser
check_base=Finde LDAP Basis f&#252;r Benutzer ..
check_based=...Basis gefunden $1.
check_connect=Verbinde zu LDAP Server ..
check_connected=.. verbunden mit $1
check_done=Ihr System wurde erfolgreich als LDAP-Client konfiguriert!
check_ebase=.. keine Basis in Client Konfiguration gefunden!
check_econnect=...Verbindung fehlgeschlagen : $1
check_ematch=...Benutzer existiert nicht.
check_enss=.. Dienst ist nicht eingestellt LDAP zu benutzen.
check_esearch=...Suche fehlgeschlagen : $1
check_eusers=.. keine Benutzer bei der Basis $1 gefunden.
check_found=.. $1 Benutzer gefunden.
check_match=Schaue nach Unix Benutzer $1 ..
check_matched=.. Benutzer erfolgreich gefunden.
@@ -85,9 +121,12 @@ index_atbootdesc=&#196;ndert, ob der LDAP-Client D&#228;mon beim Booten gestarte
index_check=&#220;berpr&#252;fe Konfiguration
index_checkdesc=Klicken Sie auf diese Schaltfl&#228;che, um Webmin ver veranlassen Ihren LDAP-Server-Konfiguration zu validieren, indem sichergestellt wird, dass der Server kontaktiert werden kann und dass dieser Benutzer und Gruppen enth&#228;lt.
index_econf=Der NSS-LDAP-Konfigurationsdatei $1 wurde auf Ihrem System nicht gefunden. Vielleicht ist die LDAP-Client-Unterst&#252;tzung nicht installiert, oder die <a href='$2'>Modulkonfiguration</a> ist falsch.
index_fix=Behebe durch Linken von Dateien
index_fixpam=<b>Warnung</b> - Webmin hat zwei separaten LDAP-Konfigurations-Dateien auf Ihrem System erkannt. NSS-LDAP ist konfiguriert $1 zu nutzen, w&#228;hrend PAM-LDAP verwendet $2 nutzt. Dies kann Unstimmigkeiten zwischen den beiden Diensten f&#252;hren.
index_ignore=Zeige diese Nachricht nicht
index_ldapmod=LDAP Client
index_restart=LDAP Client Daemon neu gestartet
index_restartdesc=&#220;bernehme die aktuelle Konfiguration durch den Neustart des lokalen LDAP-Client-Daemons.
index_return=Modul Index
index_start=Starte LDAP Client D&#228;mon
index_startdesc=Startet den lokalen LDAP-Client D&#228;mon herunter, welcher ben&#246;tigt wird um den entfernten LDAP-Server abzufragen. Bis dieser gestartet ist k&#246;nnen Benutzer und Gruppen in LDAP nicht zugreifen.
@@ -103,9 +142,11 @@ ldap_emodule2=Das Perl-Modul $1, welche zum Kommunizieren mit dem LDAP-Server be
ldap_eparse=Konnte nicht den LDAP-Server URI $1 analysieren
ldap_etls=Fehlgeschlagen zum TLS-Modus zu wechseln : $1
log_atboot=LDAP Client beim Booten aktiviert
log_base=LDAP Such Basis modifiziert
log_delboot=LDAP Client beim Booten deaktviert
log_modify_switch=&#196;ndere Dienst $1
log_pam=Authentifizierungsoptionen ge&#228;ndert
log_restart=LDAP Client Daemon neu gestartet
log_server=LDAP Server Konfiguration modifiziert
log_start=LDAP Client D&#228;mon gestartet
log_stop=LDAP Client D&#228;mon gestoppt

View File

@@ -10,6 +10,8 @@ index_stop=Stop LDAP Client Daemon
index_stopdesc=Shut down the local LDAP client daemon, which is needed to query the remote LDAP server.
index_start=Start LDAP Client Daemon
index_startdesc=Start up the local LDAP client daemon, which is needed to query the remote LDAP server. Until it is started, users and groups in LDAP will not be accessible.
index_restart=Restart LDAP Client Daemon
index_restartdesc=Apply the current configuration by restarting the local LDAP client daemon.
index_atboot=Start LDAP Client At Boot
index_atbootdesc=Changes whether the LDAP client daemon is started when the system boots up or not.
@@ -212,6 +214,7 @@ log_atboot=Enabled LDAP client daemon at boot time
log_delboot=Disabled LDAP client daemon at boot time
log_start=Started LDAP client daemon
log_stop=Stopped LDAP client daemon
log_restart=Restarted LDAP client daemon
check_title=Validating LDAP Configuration
check_base=Finding LDAP base for users ..

View File

@@ -45,6 +45,7 @@ return \@get_config_cache;
}
# find(name, &conf, disabled-mode)
# Returns the directive objects with some name
sub find
{
local ($name, $conf, $dis) = @_;
@@ -60,7 +61,8 @@ elsif ($dis == 1) {
return wantarray ? @rv : $rv[0];
}
# find_value(name, &conf)
# find_value(name, &conf, [disabled])
# Finds the value or values of a directive
sub find_value
{
local ($name, $conf, $dis) = @_;
@@ -68,51 +70,61 @@ local @rv = map { $_->{'value'} } &find($name, $conf, $dis);
return wantarray ? @rv : $rv[0];
}
# find_svalue(name, &conf, [disabled])
# Like find_value, but only returns a single value
sub find_svalue
{
local $rv = &find_value(@_);
return $rv;
}
# save_directive(&conf, name, [value])
# save_directive(&conf, name, [value|&values])
# Update one or more directives with some name
sub save_directive
{
local ($conf, $name, $value) = @_;
local $old = &find($name, $conf);
local $oldcmt = &find($name, $conf, 1);
local ($conf, $name, $valuez) = @_;
local @values = ref($valuez) ? @$valuez : ( $valuez );
local @old = &find($name, $conf);
local @oldcmt = &find($name, $conf, 1);
local $deffile = &get_ldap_config_file();
local $lref = &read_file_lines($old ? $old->{'file'} :
$oldcmt ? $oldcmt->{'file'} :
$deffile);
if (defined($value) && $old) {
# Just update value
$old->{'value'} = $value;
$lref->[$old->{'line'}] = "$name $value";
}
elsif (defined($value) && $oldcmt) {
# Add value after commented version
splice(@$lref, $oldcmt->{'line'}+1, 0, "$name $value");
&renumber($conf, $oldcmt->{'line'}+1, $oldcmt->{'file'}, 1);
push(@$conf, { 'name' => $name,
'value' => $value,
'enabled' => 1,
'line' => $oldcmt->{'line'}+1,
'file' => $oldcmt->{'file'} });
}
elsif (!defined($value) && $old) {
# Delete current value
splice(@$lref, $old->{'line'}, 1);
&renumber($conf, $old->{'line'}, $old->{'file'}, -1);
@$conf = grep { $_ ne $old } @$conf;
}
elsif ($value) {
# Add value at end of file
push(@$conf, { 'name' => $name,
'value' => $value,
'enabled' => 1,
'line' => scalar(@$lref),
'file' => $deffile });
push(@$lref, "$name $value");
for(my $i=0; $i<@old || $i<@values; $i++) {
local $old = $old[$i];
local $oldcmt = $oldcmt[$i];
local $value = $values[$i];
local $lref = &read_file_lines($old ? $old->{'file'} :
$oldcmt ? $oldcmt->{'file'} :
$deffile);
if (defined($value) && $old) {
# Just update value
$old->{'value'} = $value;
$lref->[$old->{'line'}] = "$name $value";
}
elsif (defined($value) && $oldcmt) {
# Add value after commented version
splice(@$lref, $oldcmt->{'line'}+1, 0, "$name $value");
&renumber($conf, $oldcmt->{'line'}+1, $oldcmt->{'file'}, 1);
push(@$conf, { 'name' => $name,
'value' => $value,
'enabled' => 1,
'line' => $oldcmt->{'line'}+1,
'file' => $oldcmt->{'file'} });
}
elsif (!defined($value) && $old) {
# Delete current value
splice(@$lref, $old->{'line'}, 1);
&renumber($conf, $old->{'line'}, $old->{'file'}, -1);
@$conf = grep { $_ ne $old } @$conf;
}
elsif ($value) {
# Add value at end of file
push(@$conf, { 'name' => $name,
'value' => $value,
'enabled' => 1,
'line' => scalar(@$lref),
'file' => $deffile });
push(@$lref, "$name $value");
}
}
}
@@ -434,5 +446,12 @@ if ($changed) {
&unlock_file($afile);
}
# get_ldap_client()
# Returns either "nss" or "nslcd" depending on the LDAP client being used
sub get_ldap_client
{
return $config{'auth_ldap'} =~ /nslcd/ ? 'nslcd' : 'nss';
}
1;

15
ldap-client/restart.cgi Executable file
View File

@@ -0,0 +1,15 @@
#!/usr/local/bin/perl
# Re-start the LDAP client daemon
require './ldap-client-lib.pl';
&error_setup($text{'start_err'});
&fix_ldap_authconfig();
&foreign_require("init");
&init::stop_action($config{'init_name'});
($ok, $out) = &init::start_action($config{'init_name'});
$ok || &error($out);
&webmin_log("restart");
&redirect("");

View File

@@ -10,10 +10,11 @@ $conf = &get_config();
# Validate and save inputs, starting with global base
$in{'base'} =~ /\S/ || &error($text{'base_ebase'});
&save_directive($conf, "base", $in{'base'});
@bases = ( $in{'base'} );
# Save scope
&save_directive($conf, "scope", $in{'scope'} || undef);
@scopes = ( );
push(@scopes, $in{'scope'}) if ($in{'scope'});
# Save time limit
if ($in{'timelimit_def'}) {
@@ -26,21 +27,50 @@ else {
# Save per-service bases
foreach $b (@base_types) {
local $base;
if ($in{"base_".$b."_def"}) {
&save_directive($conf, "nss_base_".$b, undef);
$base = undef;
}
else {
local $base = $in{"base_".$b};
$base = $in{"base_".$b};
$base =~ /\S/ || &error($text{'base_e'.$b});
if ($in{'scope_'.$b}) {
$base .= "?".$in{'scope_'.$b};
if (&get_ldap_client() eq "nss") {
# Scope is appended to the base
$base .= "?".$in{'scope_'.$b};
}
else {
# Scopes are saved separately
push(@scopes, $b." ".$in{'scope_'.$b});
}
}
if ($in{'filter_'.$b}) {
$base .= "?" if ($in{'scope_'.$b});
$file .= "?".$in{'filter_'.$b};
if (&get_ldap_client() eq "nss") {
# Filter is appended to the base
$base .= "?" if ($in{'scope_'.$b});
$file .= "?".$in{'filter_'.$b};
}
else {
# Filters are saved separately
push(@filters, $b." ".$in{'filter_'.$b});
}
}
}
if (&get_ldap_client() eq "nss") {
# Update DB-specific directive
&save_directive($conf, "nss_base_".$b, $base);
}
else {
# Add to list of base directives to save
push(@bases, $b." ".$base) if ($base);
}
}
# Save all base, scope and filter directives
&save_directive($conf, "base", \@bases);
&save_directive($conf, "scope", \@scopes);
if (&get_ldap_client() eq "nslcd") {
&save_directive($conf, "filter", \@filters);
}
# Write out config

View File

@@ -75,7 +75,7 @@ sub list_switch_sources
if ($gconfig{'os_type'} =~ /-linux$/) {
# All Linux variants
return ( [ 'files', 'nisplus', 'nis', 'compat', 'dns', 'db',
'hesiod', 'ldap' ],
'hesiod', 'ldap', 'sss' ],
{ 'dns' => [ 'hosts' ],
'compat' => [ 'passwd', 'shadow', 'group' ] } );
}

Some files were not shown because too many files have changed in this diff Show More