Compare commits

..

278 Commits
1.840 ... 1.850

Author SHA1 Message Date
Jamie Cameron
9dc7367dd6 Don't set bridge options that aren't defined 2017-06-24 15:39:12 -07:00
Jamie Cameron
1e8caabc50 Merge branch 'master' of git@github.com:webmin/webmin 2017-06-24 14:03:41 -07:00
Jamie Cameron
64720c97ab Don't overwrite old repo name https://github.com/webmin/webmin/issues/603 2017-06-24 14:01:30 -07:00
Jamie Cameron
94cdddf447 Merge pull request #602 from Jaybus2/master
certmgr: Updated view/manage to work with openssl > 0.9.8
2017-06-22 20:01:16 -07:00
Josh Fisher
460ea14a24 Updated view/manage to work with openssl > 0.9.8 2017-06-22 12:11:54 -04:00
Jamie Cameron
dcd0daac42 Error is not a valid warning level 2017-06-21 15:41:57 -07:00
Jamie Cameron
2ae5345117 Remove dupe string 2017-06-21 10:14:25 -07:00
Jamie Cameron
c87b5c6e3d New major version 2017-06-18 17:17:56 -07:00
Jamie Cameron
4fa781805f Further updates for Debian 9 stable 2017-06-18 16:46:52 -07:00
Jamie Cameron
95180b7f9d Completed port forwarding support 2017-06-17 16:23:23 -07:00
Jamie Cameron
379f7aaf0b Creation and deletion of forwards now working 2017-06-17 15:43:47 -07:00
Jamie Cameron
f79d1040f3 More work on firewalld forwarding support 2017-06-17 14:59:51 -07:00
Jamie Cameron
9c0d9268e1 Merge branch 'master' of git@github.com:webmin/webmin 2017-06-17 12:24:54 -07:00
Jamie Cameron
1cbe773f6f Also parse jail.d/*.local files https://github.com/webmin/webmin/issues/599 2017-06-17 12:24:22 -07:00
Jamie Cameron
27c09c00ec Merge pull request #600 from gnadelwartz/master
firewall: minimal support for ipset rules
2017-06-17 11:44:21 -07:00
Kay Marquardt (Gnadelwartz)
e69c6699ac update lang/en lang/de 2017-06-17 20:35:41 +02:00
Kay Marquardt (Gnadelwartz)
c419c339db locallizaion of ipset output 2017-06-17 20:22:08 +02:00
Kay Marquardt (Gnadelwartz)
835175b098 display ipset name, type, number, size 2017-06-17 19:58:01 +02:00
Kay Marquardt (Gnadelwartz)
7ebd6ae4fe read in ipset sets 2017-06-17 19:37:11 +02:00
Kay Marquardt (Gnadelwartz)
89b8c53666 list active ipsets in index.cgi 2017-06-17 18:05:36 +02:00
Kay Marquardt (Gnadelwartz)
94e8f32e47 generalize args processing and localize src dest 2017-06-17 17:26:11 +02:00
Kay Marquardt (Gnadelwartz)
1456de9649 lang string for source and destination 2017-06-17 16:58:44 +02:00
Kay Marquardt (Gnadelwartz)
9a445e00b9 display description for IP-Set Rules 2017-06-17 15:06:11 +02:00
Kay Marquardt (Gnadelwartz)
771050ba7c display description for IP-Set Rules 2017-06-17 15:05:10 +02:00
Jamie Cameron
2de661cfd7 Start of work on port forwarding 2017-06-16 19:47:53 -07:00
Jamie Cameron
0e774af597 Support GPT fdisk partitions 2017-06-16 19:47:28 -07:00
Jamie Cameron
c22e70a0d1 Merge branch 'master' of git@github.com:webmin/webmin 2017-06-16 19:14:17 -07:00
Jamie Cameron
0ee9cd2808 Use /proc/filesystems to check for support https://sourceforge.net/p/webadmin/bugs/4972/ 2017-06-16 18:48:41 -07:00
Joe Cooper
2b92ba535e Merge pull request #598 from swelljoe/master
Fix default zone detection

Merging to insure it makes it into the next release, as it's needed for VM6.
2017-06-15 13:45:36 -05:00
Joe cooper
0a765063c3 Probably don't need to fail if no default 2017-06-15 13:41:56 -05:00
Jamie Cameron
911f9fd46d Use correct zone even for cleanup 2017-06-15 13:30:21 -05:00
Jamie Cameron
c67c945e58 escape some params 2017-06-15 13:30:20 -05:00
Jamie Cameron
91f03a2109 Escape untrusted params 2017-06-15 13:30:20 -05:00
Jamie Cameron
5aed345808 Handle xz compressed files https://sourceforge.net/p/webadmin/bugs/4970/ 2017-06-15 13:30:20 -05:00
Kay Marquardt (Gnadelwartz)
34468b5eed display wrapper config-test results in check_inst.cgi 2017-06-15 13:30:20 -05:00
Kay Marquardt (Gnadelwartz)
6f581fb0f1 more transl check_inst.cgi 2017-06-15 13:30:20 -05:00
Kay Marquardt (Gnadelwartz)
4f497ea7b8 fix index_emdomdir=.. 2017-06-15 13:30:20 -05:00
Jamie Cameron
30577a4161 Use correct zone even for cleanup 2017-06-14 15:10:39 -07:00
Jamie Cameron
c2d4a90639 escape some params 2017-06-12 14:12:39 -07:00
Jamie Cameron
f6706036b9 Merge branch 'master' of git@github.com:webmin/webmin 2017-06-12 14:06:54 -07:00
Jamie Cameron
a330e913ee Escape untrusted params 2017-06-12 14:01:10 -07:00
Jamie Cameron
4b6df81888 Merge pull request #596 from gnadelwartz/master
majordomo: finish check_install-cgi tests
2017-06-11 14:18:27 -07:00
Joe cooper
ff42df7647 Fix default zone detection 2017-06-11 15:38:01 -05:00
Jamie Cameron
cca627a50e Merge branch 'master' of git@github.com:webmin/webmin 2017-06-11 13:29:09 -07:00
Jamie Cameron
6ca8341261 Handle xz compressed files https://sourceforge.net/p/webadmin/bugs/4970/ 2017-06-11 13:28:14 -07:00
Joe Cooper
591981563a Merge pull request #597 from swelljoe/master
More strict/warn fixes
2017-06-11 15:04:04 -05:00
Kay Marquardt (Gnadelwartz)
7737685835 display wrapper config-test results in check_inst.cgi 2017-06-11 21:00:09 +02:00
Kay Marquardt (Gnadelwartz)
efe00dc8e3 more transl check_inst.cgi 2017-06-11 18:52:07 +02:00
Kay Marquardt (Gnadelwartz)
cae85a9ce8 fix index_emdomdir=.. 2017-06-11 17:21:57 +02:00
Jamie Cameron
0ce2ce7236 Merge pull request #592 from gnadelwartz/master
Majordomo: add check_inst.cgi to provide hints about missing/wrong config/installation
2017-06-10 18:49:59 -07:00
Jamie Cameron
041ed3ace4 Fix perl warnings 2017-06-10 12:46:33 -07:00
Kay Marquardt (Gnadelwartz)
375436621e add check config buton to edit_global 2017-06-10 00:31:40 +02:00
Kay Marquardt (Gnadelwartz)
019b0f0625 start translation check_inst.cgi 2017-06-09 19:14:34 +02:00
Kay Marquardt (Gnadelwartz)
24b2bcd81b make some checks only if majordomo is installed 2017-06-09 18:59:33 +02:00
Kay Marquardt (Gnadelwartz)
b7ede39420 add script check_inst.cgi to provide hints what can be wrong 2017-06-09 16:48:25 +02:00
Kay Marquardt (Gnadelwartz)
d41b963859 add fail=Failed to webmin lang file 2017-06-09 13:52:42 +02:00
Kay Marquardt (Gnadelwartz)
fd857573ee index.cgi: ucfirst listname, maito:listname 2017-06-09 13:46:47 +02:00
Jamie Cameron
6389fe1787 Merge pull request #591 from Jaybus2/master
certmgr: Fix signcsr not using configured openssl.cnf
2017-06-08 22:21:24 -07:00
Joe cooper
b67b98f6b5 More strict/warn fixes 2017-06-08 21:26:44 -05:00
Josh Fisher
2ca5006c6c Fix certmgr/signcsr not using configured openssl.cnf 2017-06-08 11:07:26 -04:00
Kay Marquardt (Gnadelwartz)
d7652f88db move check_mdom_conf() to mdom-lib.pl 2017-06-08 14:17:49 +02:00
Jamie Cameron
873519e64e Merge pull request #590 from gnadelwartz/master
majordomo: allow edit and save multi line globals
2017-06-07 15:08:04 -07:00
Kay Marquardt (Gnadelwartz)
e44934a153 remove debug use Data:dump 2017-06-07 17:24:48 +02:00
Kay Marquardt (Gnadelwartz)
8c3ccb1503 fix get_list_config offset 2017-06-07 17:22:26 +02:00
Kay Marquardt (Gnadelwartz)
0e77146a48 allow edit and save multi line globals 2017-06-07 14:58:01 +02:00
Jamie Cameron
1ed3f58598 Handle new quoting of colors in webmin 1.840 https://sourceforge.net/p/webadmin/bugs/4968/ 2017-06-05 18:54:44 -07:00
Jamie Cameron
23873a5c2b Ensure that the most recent cert file is used 2017-06-04 14:36:34 -07:00
Jamie Cameron
a6052e1ae9 Remove tags thhat will be escaped 2017-06-04 12:31:44 -07:00
Jamie Cameron
122c573f94 Also try common cert locations 2017-06-02 16:41:17 -07:00
Jamie Cameron
0de4ab8c29 Merge branch 'master' of git@github.com:webmin/webmin 2017-06-02 15:32:18 -07:00
Jamie Cameron
2ba05ab405 Don't delete temp file for download if it was pre-created in /tmp/.webmin https://virtualmin.com/node/52315 2017-06-02 15:31:51 -07:00
Jamie Cameron
0916b7ad99 Merge pull request #588 from swelljoe/master
Roll back amp change, as HTML5 allows it
2017-06-02 16:36:40 -04:00
Joe cooper
c43c6a4e27 Roll back amp change, as HTML5 allows it 2017-06-02 15:19:47 -05:00
Jamie Cameron
00abf8494a New dev version 2017-06-02 08:55:44 -07:00
Jamie Cameron
529112cd7a German translation updates from Raymond Vetter 2017-06-01 23:16:52 -07:00
Jamie Cameron
6365b6bdcd German translation updates from Raymond Vetter 2017-06-01 23:16:52 -07:00
Jamie Cameron
a395c32ec6 Slave master IPs can contain "key" https://sourceforge.net/p/webadmin/bugs/4966/ 2017-06-01 21:45:04 -04:00
Jamie Cameron
06387a59fa Merge pull request #587 from gnadelwartz/master
german module.info (again and correct)
2017-06-01 21:16:19 -04:00
Jamie Cameron
4cc65beacc Restart FPM server after updating an FPM config file 2017-06-01 12:45:41 -07:00
Jamie Cameron
a2de217c25 Merge pull request #586 from ymulleneers/master
Various minor corrections
2017-06-01 15:13:40 -04:00
Jamie Cameron
f6320c27e2 Merge pull request #563 from qooob/patch-17
`en.UTF8` -> `en` for the upcoming 1.841 to satisfy compiler
2017-06-01 14:49:06 -04:00
Kay Marquardt (Gnadelwartz)
d625028e8f german module.info (again and correct) 2017-06-01 17:39:48 +02:00
Jamie Cameron
7da8c4dd66 Deal with zero-sized filesystems 4c19095949 2017-06-01 07:14:53 -07:00
Jamie Cameron
7b272988e8 Add missed error message 2017-05-31 22:28:14 -07:00
Jamie Cameron
4d47bc8442 Russian fix 2017-05-31 22:27:06 -07:00
Jamie Cameron
2ea940145b Start of work on FPM format support 2017-05-31 22:26:46 -07:00
MUY
377bcacff8 Update web-lib-funcs.pl
quote_escape - usually used to concatenate to string, so the function should always return a string, even if first argument is undef.  The usage of the eq operator on an undef variable cause a warning, in addition '' is evaluated to 'false' in conditions.
2017-06-01 06:43:59 +02:00
MUY
1379d2cc35 Update web-lib-funcs.pl
html_escape hang if first argument is not defined (ex: text('not_defined')) + usually used to concatenate to string, so the function should always returns a string.
2017-06-01 06:37:34 +02:00
MUY
37a5504f51 Update switch_user.cgi
Only ask once the password in Mozilla Firefox 31.
2017-06-01 06:29:57 +02:00
Jamie Cameron
ea8b2fc1bf New dev version bump 2017-05-31 18:57:45 -07:00
Jamie Cameron
2ee32e71cf Code cleanups 2017-05-31 18:52:38 -07:00
Jamie Cameron
08a1f3db74 If speed is reported as Unknown, don't use it 2017-05-31 18:19:27 -07:00
Jamie Cameron
5b0606c9fc Set correct ownership on compressed files 2017-05-31 15:05:20 -07:00
Jamie Cameron
06752583db Add some missing escaping 2017-05-31 14:43:10 -07:00
Jamie Cameron
0d1f01d511 Upload new files with correct ownership, and fix some formatting errors 2017-05-31 14:29:28 -07:00
Jamie Cameron
4f6b28f95c Merge pull request #585 from gnadelwartz/majordomo2
majordomo: fix subs closed, add quotes around tag values
2017-05-31 11:05:59 -04:00
Kay Marquardt (Gnadelwartz)
32ecbaaf02 fix subs closed, add quotes around tag values 2017-05-31 11:05:13 +02:00
Jamie Cameron
f93251569b Clean up code, and set correct owner on downloaded files 2017-05-30 21:56:39 -07:00
Jamie Cameron
3176c4cd45 Merge branch 'master' of git@github.com:webmin/webmin 2017-05-30 20:03:47 -07:00
Jamie Cameron
7ed31959e4 Use correct zone file for www. record 2017-05-30 19:58:49 -07:00
Jamie Cameron
72234a7669 Merge pull request #581 from gnadelwartz/master
convert majordomo final part
2017-05-30 19:32:50 -07:00
Joe Cooper
44822d651a Merge pull request #584 from swelljoe/master
Use escaped ampersand
2017-05-30 21:15:02 -05:00
Joe cooper
cde3eb1bb1 Merge remote-tracking branch 'upstream/master' 2017-05-30 21:13:53 -05:00
Joe cooper
f1c000d1e5 When in doubt, nest more tables 2017-05-30 21:12:53 -05:00
Joe cooper
4f564b9e2a Use escaped ampersand 2017-05-30 20:36:12 -05:00
Joe Cooper
2215ee4cf8 Merge pull request #583 from swelljoe/master
Get rid of about half of validation errors
2017-05-30 20:17:12 -05:00
Joe cooper
483a9a7c5f One last literal quoted 2017-05-30 20:13:36 -05:00
Joe cooper
7e75fdfa16 More validation fixes 2017-05-30 20:08:34 -05:00
Joe cooper
086e38676e Use quoted literals in tag style 2017-05-30 19:33:16 -05:00
Joe Cooper
54c1f071fc Merge pull request #582 from swelljoe/master
HTML 4.01 transitional until we get rid of in-tag styling
2017-05-30 17:56:04 -05:00
Joe cooper
72a6acb7ef HTML 4.01 transitional until we get rid of in-tag styling 2017-05-30 17:54:57 -05:00
Kay Marquardt
abe3a4858b Merge pull request #4 from gnadelwartz/majordomo2
majordomo final part
2017-05-30 17:59:58 +02:00
Kay Marquardt (Gnadelwartz)
a41915611e show subscription rules in edit list 2017-05-30 17:58:12 +02:00
Kay Marquardt (Gnadelwartz)
e4cb1a4af5 fix set_alias 2017-05-30 17:09:30 +02:00
Kay Marquardt (Gnadelwartz)
cf4c57e947 save/load owner from list.owner file 2017-05-30 16:55:26 +02:00
Kay Marquardt (Gnadelwartz)
d5f9824741 first aid: provide download link of patched majordomo version 2017-05-30 14:22:18 +02:00
Kay Marquardt (Gnadelwartz)
5129dfbe79 fix missing dynamic in config.info.de 2017-05-30 12:56:53 +02:00
Kay Marquardt (Gnadelwartz)
4b6f58eac8 config option for save list owner in listname.owner 2017-05-30 12:51:44 +02:00
Kay Marquardt (Gnadelwartz)
e34875ec0b more options for create list 2017-05-30 12:33:06 +02:00
Jamie Cameron
40db0575f6 Create new files with same ownership as parent (and add some missing escaping) 2017-05-29 16:16:14 -07:00
Jamie Cameron
74d463be57 Merge branch 'master' of git@github.com:webmin/webmin 2017-05-29 16:08:44 -07:00
Jamie Cameron
1a99e197dc Create new dirs with same ownership as parent 2017-05-29 16:07:03 -07:00
Jamie Cameron
19e4df6f0e Merge pull request #575 from gnadelwartz/majordomo2
majordomo: finish index, delete_list, edit_members (Part 3)
2017-05-28 22:14:54 -07:00
Jamie Cameron
49d4e0f4f3 Version bump for dev release 2017-05-28 12:11:34 -07:00
Jamie Cameron
504a7d78c7 Merge branch 'master' of git@github.com:webmin/webmin 2017-05-28 12:09:18 -07:00
Jamie Cameron
3ecc241b54 Also check certifate altnames https://sourceforge.net/p/webadmin/bugs/4963/ 2017-05-28 12:08:45 -07:00
Joe Cooper
8160e5f777 Merge pull request #579 from swelljoe/master
default val for $user
2017-05-28 14:06:24 -05:00
Joe cooper
3df2f306f7 default val for 2017-05-28 14:04:45 -05:00
Joe Cooper
3027952e0d Merge pull request #564 from swelljoe/master
Some more cleanups to make deb and rpm
2017-05-28 14:01:48 -05:00
Joe cooper
505d380fbb Merge remote-tracking branch 'upstream/master' 2017-05-28 13:57:00 -05:00
Jamie Cameron
65c28ad2ab Merge branch 'master' of git@github.com:webmin/webmin 2017-05-27 21:42:32 -07:00
Jamie Cameron
da6b642778 Fix saving of usermin category names https://github.com/webmin/usermin/issues/23 2017-05-27 21:41:52 -07:00
Kay Marquardt (Gnadelwartz)
2d49c19716 fix remote(sendmail), convert all <input submit> to &ui_submit() 2017-05-28 00:21:24 +02:00
Kay Marquardt (Gnadelwartz)
b7c85e32c7 edit button for mail settings 2017-05-26 23:37:46 +02:00
Kay Marquardt (Gnadelwartz)
d2283223c3 template for list.info, use sendmail to subscribe, use archive if exist 2017-05-26 23:32:10 +02:00
Kay Marquardt (Gnadelwartz)
10881d9171 move majordomo default list config to /template 2017-05-26 18:25:11 +02:00
Kay Marquardt (Gnadelwartz)
770cc24f57 create majordomo default config template 2017-05-26 18:19:42 +02:00
Kay Marquardt (Gnadelwartz)
7b4f8f5b40 remove wrong lang/edit_list copy 2017-05-26 16:53:39 +02:00
Kay Marquardt (Gnadelwartz)
e5fe901147 finish converting index, delete_list and edit_member 2017-05-26 16:46:34 +02:00
Kay Marquardt (Gnadelwartz)
017e6585b6 convert new list to &ui_button 2017-05-26 14:33:54 +02:00
Kay Marquardt (Gnadelwartz)
81d70f5cc9 adjust headers for edit and delete 2017-05-26 14:14:27 +02:00
Kay Marquardt (Gnadelwartz)
72283092da add file list.owner 2017-05-26 13:21:33 +02:00
Jamie Cameron
0e98b4a40a Merge pull request #574 from gnadelwartz/master
Majordomo conversion Part2
2017-05-25 19:48:44 -07:00
Jamie Cameron
b52d5c9986 Merge branch 'master' of git@github.com:webmin/webmin 2017-05-25 16:48:15 -07:00
Kay Marquardt
47b5ee31c0 Merge pull request #3 from gnadelwartz/majordomo2
Majordomo conversion Part2
2017-05-26 00:12:08 +02:00
Kay Marquardt (Gnadelwartz)
37fe61d6f3 floating buttons and edit icons 2017-05-25 23:57:23 +02:00
Kay Marquardt (Gnadelwartz)
fcaf0ffb35 /usr/local/bin 2017-05-25 23:48:46 +02:00
Kay Marquardt (Gnadelwartz)
cd2cb0f5d6 majordomo conversion part2 2017-05-25 23:43:48 +02:00
Kay Marquardt (Gnadelwartz)
8bb3e372ba adjust lang/de 2017-05-25 18:27:06 +02:00
Kay Marquardt (Gnadelwartz)
581ddd1491 new design for edit list 2017-05-25 18:26:12 +02:00
Jamie Cameron
14610a77f1 Underlying default cannot be switched yet 2017-05-25 08:00:49 -07:00
Joe cooper
c7285f5d11 move t/ removal to the right place 2017-05-24 23:04:33 -05:00
Joe cooper
f1e5428e50 Autoprov to avoid pretending to provide perl modules 2017-05-24 22:53:01 -05:00
Joe cooper
c9a9fdeedf Merge remote-tracking branch 'upstream/master' 2017-05-24 22:50:13 -05:00
Jamie Cameron
7482794f07 Merge pull request #573 from gnadelwartz/master
correct soltion for missing col when chain is filtered
2017-05-24 17:18:34 -07:00
Jamie Cameron
675e9ec513 Remove comment 2017-05-24 16:14:55 -07:00
Jamie Cameron
133b511a75 Encourage use of utf-8 languages 2017-05-24 16:14:20 -07:00
Kay Marquardt
0b1fac9f51 Merge pull request #2 from gnadelwartz/majordomo2
fix: fix missing col, no morelinebraks because of <b> in cell
2017-05-24 09:51:40 +02:00
Kay Marquardt (Gnadelwartz)
989c759036 /usr/LOCAL/bin/perl 2017-05-24 09:48:46 +02:00
Kay Marquardt (Gnadelwartz)
2afd4a1dc5 remove forgotten debug 2017-05-24 09:47:31 +02:00
Kay Marquardt (Gnadelwartz)
e46c7ceb44 replace <b> with <strong> => no <br> in table row 2017-05-24 09:44:28 +02:00
Kay Marquardt (Gnadelwartz)
d9cc4509d2 correct solution for missing 1st col 2017-05-24 09:43:11 +02:00
Jamie Cameron
faa65976d7 Merge branch 'master' of git@github.com:webmin/webmin 2017-05-23 21:54:18 -07:00
Jamie Cameron
53e306860e Version bump 2017-05-23 21:53:39 -07:00
Jamie Cameron
c64c04d3e0 Merge pull request #572 from gnadelwartz/master
majordomo change index view from buttons to list (part 1)
2017-05-23 17:28:01 -07:00
Kay Marquardt
e7c4c3abd9 Merge pull request #1 from gnadelwartz/majordomo2
display list values in overview
2017-05-23 20:52:00 +02:00
Kay Marquardt (Gnadelwartz)
194d48bd9e display list values in overview 2017-05-23 20:48:51 +02:00
Kay Marquardt (Gnadelwartz)
75efeb1d16 remove config.de.UTF-8 2017-05-23 17:08:13 +02:00
Kay Marquardt (Gnadelwartz)
99a63d9295 add postfix config mode to all config.info.* 2017-05-23 17:04:20 +02:00
Kay
ef7e2cd933 change index view from buttons to list (part 1) 2017-05-23 14:05:01 +02:00
Jamie Cameron
ad043d235e Norwegian update from Stein-Aksel Basma 2017-05-22 17:20:43 -07:00
Jamie Cameron
678cc38013 Merge pull request #570 from gnadelwartz/master
add update-from-repo to dist
2017-05-21 18:19:44 -07:00
Jamie Cameron
f6090947ba Merge branch 'master' of git@github.com:webmin/webmin 2017-05-21 11:26:22 -07:00
Jamie Cameron
d53ce67174 Filter out ANY onX= tags in HTML, as the number of possible ways Javascript can be called is unbounded 2017-05-21 11:25:58 -07:00
Kay Marquardt (Gnadelwartz)
0cfb09e436 add update-from-repo to dist 2017-05-21 19:45:08 +02:00
Jamie Cameron
1a4d525ef2 Merge pull request #569 from gnadelwartz/master
add some sanity checks to update-from-repo if alternate repo is given
2017-05-21 10:05:02 -07:00
Kay
8bfaf2b488 fix REPO for sanity check 2017-05-21 15:29:36 +02:00
Kay Marquardt (Gnadelwartz)
af8d5d24a1 add sanity checks if alternate repo given 2017-05-21 15:23:52 +02:00
Kay
af65582191 fix indention and setup.sh not copied in usermin 2017-05-21 14:26:36 +02:00
Jamie Cameron
87fe720d04 Merge pull request #567 from gnadelwartz/master
Update webmin/usermin in place from github.com repo
2017-05-20 12:55:05 -07:00
Jamie Cameron
c74a867652 Fix typo 888b0f27f5 2017-05-20 12:48:07 -07:00
Kay Marquardt
e4738380e1 Update edit_file.cgi 2017-05-20 18:05:06 +02:00
Kay Marquardt
7df549f91d Update edit_file.cgi 2017-05-20 18:04:45 +02:00
Kay Marquardt
7e9905ce3c revert edit-file.cgi wrong repo 2017-05-20 18:04:23 +02:00
Kay Marquardt (Gnadelwartz)
594a874a4b on iso-8859 try a second guess 2017-05-20 17:58:58 +02:00
Kay Marquardt (Gnadelwartz)
b047220417 check for additional standard modules eg majordomo 2017-05-20 10:26:43 +02:00
Kay Marquardt
01165959d3 remove obsolete redirect to file 2017-05-19 17:12:19 +02:00
Jamie Cameron
888b0f27f5 Deal with CPU info that doesn't contact mhz https://github.com/webmin/webmin/pull/565 2017-05-19 07:50:39 -07:00
Kay Marquardt
5e5a7b9cc3 forgot lang and ulang when updateing lang files only 2017-05-19 16:05:15 +02:00
Kay Marquardt
0c25d52a6d shorten version nuber created from last commit date 2017-05-19 15:05:09 +02:00
Kay Marquardt (Gnadelwartz)
d220823080 Update webmin/usermin in place from github.com repo 2017-05-19 14:45:57 +02:00
Jamie Cameron
fa1929966c Put free space in a more consistent location 2017-05-18 21:09:23 -07:00
Jamie Cameron
0effafd397 Catalan updates from Jaume Badiella 2017-05-18 21:07:52 -07:00
Jamie Cameron
01b0a01f90 Catalan updates from Jaume Badiella 2017-05-18 21:07:26 -07:00
Jamie Cameron
9da01f6a70 Ignore missing deps on upgrade https://sourceforge.net/p/webadmin/bugs/4960/ 2017-05-18 17:50:13 -07:00
Jamie Cameron
aafbe392ba Filter out some more javascript 2017-05-17 22:15:01 -07:00
Jamie Cameron
8ca3de3c28 Use safe write function, and simplify error handling 2017-05-16 23:16:46 -07:00
Jamie Cameron
817244241a Filename needs escaping 2017-05-16 23:11:36 -07:00
Joe Cooper
7316d87049 Merge branch 'master' into master 2017-05-16 23:49:07 -05:00
Joe cooper
368d7e0297 handle undefined vars 2017-05-16 23:45:58 -05:00
Joe cooper
721a1f47b3 marge upstream changes to makemodulerpm 2017-05-16 23:27:29 -05:00
Joe cooper
4e668e19cb Merge remote-tracking branch 'upstream/master' 2017-05-16 23:25:55 -05:00
Jamie Cameron
509e01eb90 Move version logic to more comprehensible place 2017-05-16 12:58:20 -07:00
Jamie Cameron
2c1f20fb1d Support exclude flag and set version in .info files 2017-05-16 12:57:18 -07:00
Jamie Cameron
703802065f The uptime command has changed its wording https://github.com/webmin/webmin/issues/498 2017-05-16 12:39:24 -07:00
Jamie Cameron
6243d45f3f Respect check-SSL setting 2017-05-16 12:25:24 -07:00
Ilia Rostovtsev
de2a5e9ff2 en.UTF8 -> en for the upcoming 1.841 to satisfy compiler 2017-05-16 18:19:07 +03:00
Joe cooper
43afab0d84 don't warn on uninitialized 2017-05-16 04:18:13 -05:00
Joe cooper
8d013ec69c More strict/warn fixes 2017-05-16 03:44:59 -05:00
Jamie Cameron
7face4b2be Add flag to exclude files. Also, update version in module.info to match command line, if given 2017-05-15 21:46:07 -07:00
Jamie Cameron
26d05f0437 Add --exclude flag 2017-05-15 18:21:59 -07:00
Jamie Cameron
f7da281d72 Allow disabling of the SSL name check 2017-05-15 16:54:07 -07:00
Jamie Cameron
af33c38d17 Merge branch 'master' of git@github.com:webmin/webmin 2017-05-15 16:35:07 -07:00
Jamie Cameron
5abc9b538b Include SNI host in hostname to check 2017-05-15 16:34:13 -07:00
Jamie Cameron
34781fd651 German translation updates from Raymond Vetter 2017-05-14 21:01:53 -07:00
Jamie Cameron
ea69c0978b German translation updates from Raymond Vetter 2017-05-14 21:01:50 -07:00
Jamie Cameron
7f2c27df29 Merge pull request #561 from gnadelwartz/master
tarnslation adjustements like for usermin
2017-05-14 14:16:07 -07:00
Kay Marquardt
034a3e9f8c adjust trans 2017-05-14 19:57:17 +02:00
Jamie Cameron
fdc689ad5d Merge branch 'master' of git@github.com:webmin/webmin 2017-05-14 10:52:56 -07:00
Kay Marquardt
07c560cdf6 de de.UTF longgdesc 2017-05-14 19:51:37 +02:00
Jamie Cameron
586af08e08 Get and show thin pool usage percentage 2017-05-14 10:49:04 -07:00
Jamie Cameron
7ba6250482 Merge pull request #560 from gnadelwartz/master
german translations converted from UTF-8
2017-05-14 10:05:40 -07:00
Kay Marquardt
f814546239 adjust german translation 2017-05-14 15:09:54 +02:00
Kay Marquardt
191827e425 Create config.info.de.UTF-8 2017-05-14 15:08:38 +02:00
Kay Marquardt
9fef0d060b german translation 2017-05-14 15:06:06 +02:00
Kay Marquardt
acc9f93fef german translations converted from UTF-8 2017-05-14 14:03:38 +02:00
Jamie Cameron
527b8b1467 software packages isn't supported on macos 2017-05-13 15:26:58 -07:00
Jamie Cameron
bf4e69bc54 software packages isn't supported on macos 2017-05-13 15:26:10 -07:00
Jamie Cameron
60351e59c7 Add monitor type for fail2ban https://sourceforge.net/p/webadmin/bugs/4956/ 2017-05-13 15:13:43 -07:00
Jamie Cameron
c031ac4b76 Merge branch 'master' of git@github.com:webmin/webmin 2017-05-12 21:59:22 -07:00
Jamie Cameron
4ffd3753a2 Handle FreeBSD vmstat output https://github.com/webmin/webmin/issues/498 2017-05-12 21:45:56 -07:00
Jamie Cameron
b6a5b4b230 Merge pull request #559 from gnadelwartz/patch-1
ajdust filemin german translations
2017-05-12 17:25:27 -07:00
Jamie Cameron
5a21764743 Warn if saved config is invald 2017-05-12 17:10:15 -07:00
Kay Marquardt
ca6739cda3 Merge pull request #1 from gnadelwartz/patch-2
fix my typos
2017-05-12 22:54:58 +02:00
Kay Marquardt
add5d65a6b Merge branch 'patch-1' into patch-2 2017-05-12 22:54:42 +02:00
Kay Marquardt
55db94413b fix my typos 2017-05-12 22:52:51 +02:00
Kay Marquardt
f21e731422 adjust translations to autehtic-theme translations 2017-05-12 22:50:27 +02:00
Joe cooper
5030fab70e Remove test directory 2017-05-11 23:30:34 -05:00
Joe cooper
0b70e3676e use 5.010 for defined-or 2017-05-11 23:23:36 -05:00
Joe cooper
5f6fe082e2 Even more strict/warn 2017-05-11 23:20:33 -05:00
Joe cooper
6a953d9670 Some more strict/warn cleanups 2017-05-11 23:10:35 -05:00
Jamie Cameron
766ccf57de Deal wth missing findmnt command gracefully https://sourceforge.net/p/webadmin/bugs/4955/ 2017-05-11 20:42:22 -07:00
Jamie Cameron
4e02a9823d Fix incorrect string https://sourceforge.net/p/webadmin/bugs/4953/ 2017-05-10 22:31:39 -07:00
Jamie Cameron
da43d7185c changelog for disk free display 2017-05-10 14:41:44 -07:00
Jamie Cameron
4c19095949 Show filesystems that are almost full 2017-05-10 14:40:12 -07:00
Jamie Cameron
c07dd3cddf Merge branch 'master' of git@github.com:webmin/webmin 2017-05-10 12:54:11 -07:00
Jamie Cameron
9fe942e958 Return list of per-filesystem stats too 2017-05-10 12:53:14 -07:00
Jamie Cameron
7ba14d9de4 Merge pull request #558 from gnadelwartz/add-warning-about-not-active-direct
Add warnings about not active direct and disable edit for filtered rules
2017-05-10 10:52:30 -07:00
Jamie Cameron
c455b93573 Merge pull request #557 from gnadelwartz/hofix-filter_chain
hotfix filter chain #555
2017-05-10 10:49:03 -07:00
Kay Marquardt
ba263882a6 disable edit/delete for filtered rules, unified firewall_message
because we must hold jump to chain rules even if filtered to statisfy iptables-restore, edit and delet these rules is disabled.

replaced shorewall_message, firewalld_message and fail2ban_message by one sub external_firewall_message
2017-05-10 17:39:42 +02:00
Kay Marquardt
f5927981a6 keep -j CHAIN to statisfy iptables-restore 2017-05-10 14:28:54 +02:00
Kay Marquardt
7dcce2a64f Warning about external Firewall programm and no direct mode 2017-05-10 12:18:06 +02:00
Kay Marquardt
f9d1278a00 Warning about external Firewall programm and no direct mode 2017-05-10 12:10:33 +02:00
Kay Marquardt
771e303e37 filter_chain does now work without direct
BUT only if no external firewall configuration is detected, i.e. fail2ban.
In this case a Warning is diplayed to activate direct.
2017-05-10 12:05:44 +02:00
Kay Marquardt
18e165e925 filter_chain works now also without direct
filter_chain works now also without direct but its recommended.
a waning is displayed if you use it with fail2ban detected and without direct mode
2017-05-10 12:02:37 +02:00
Kay Marquardt
09c125ad9a prevent modifiying of filtered chains 2017-05-10 11:54:46 +02:00
Kay Marquardt
7127ac2072 add warning aubout using filter_chain without direct 2017-05-10 11:51:10 +02:00
Kay Marquardt
b9507b0d77 adjust description direct must be active 2017-05-10 10:37:41 +02:00
Kay Marquardt
fe265aa65b add description to mention direct must be active 2017-05-10 10:36:58 +02:00
Kay Marquardt
f003b029b6 hotfix for filter_chain: use only with direct 2017-05-10 10:07:05 +02:00
Jamie Cameron
41c5bd30ea Merge pull request #551 from gnadelwartz/master
filter out chains not managed by firewall and add warning if fail2ban detected
2017-05-09 10:30:53 -07:00
Jamie Cameron
f5549dbe39 Merge branch 'master' of git@github.com:webmin/webmin 2017-05-09 09:17:51 -07:00
Kay Marquardt
0b416e09e8 Merge pull request #1 from gnadelwartz/firewall-f2b-warn
merge branch wadd arning about fail2ban firewalll rules detected
2017-05-09 13:24:55 +02:00
Kay Marquardt
e01770a0a1 adjust translation 2017-05-09 13:23:48 +02:00
Kay Marquardt
bcec484ebf adjust description 2017-05-09 13:22:08 +02:00
Kay Marquardt
314489fae7 more secure matching against chains to filter out 2017-05-09 13:13:43 +02:00
Kay Marquardt
87854875b7 remove default for filter_chain 2017-05-09 13:09:06 +02:00
Kay Marquardt
da0b587b2b add index_fail2ban 2017-05-09 12:31:46 +02:00
Kay Marquardt
3290f4c11f index_fail2ban translation 2017-05-09 12:29:57 +02:00
Kay Marquardt
7a3782a680 detect fail2ban usage 2017-05-09 12:26:33 +02:00
Jamie Cameron
e1d7fc3c14 Don't check fields that don't exist https://github.com/webmin/webmin/issues/553 2017-05-08 19:16:00 -07:00
Kay Marquardt
b5d1826ef7 Update config 2017-05-07 21:14:43 +02:00
Kay Marquardt
41908574ee Update config.info.de 2017-05-07 21:01:14 +02:00
Kay Marquardt
46f5f9715f Update config.info 2017-05-07 20:59:43 +02:00
Kay Marquardt
e9a5ea229c firewall-lib.pl regex to filter out chains
add regex filter to filter out chains not managed by firewall, i.e. fail2ban,
in get_iptables_save()
2017-05-07 20:58:31 +02:00
Jamie Cameron
f8a2f9595d Merge pull request #549 from ymulleneers/master
Indentation
2017-05-06 19:19:16 -07:00
MUY
f046efed20 Merge pull request #1 from ymulleneers/ymulleneers-patch-1
Update sorttable.js
2017-05-05 20:33:52 +02:00
MUY
d7a9fdb431 Update sorttable.js
Indentation
2017-05-05 20:33:19 +02:00
206 changed files with 3963 additions and 1501 deletions

2
README
View File

@@ -1,4 +1,4 @@
Webmin Version 1.840
Webmin Version 1.850
--------------------
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

@@ -52,11 +52,11 @@ else {
# Validate username, and check for a clash
$in{'name'} =~ /^[A-z0-9\-\_\.\@]+$/ && $in{'name'} !~ /^\@/ ||
&error(&text('save_ename', $in{'name'}));
&error(&text('save_ename', &html_escape($in{'name'})));
$in{'name'} eq 'webmin' && &error($text{'save_enamewebmin'});
if (!$in{'old'} || $in{'old'} ne $in{'name'}) {
my $clash = &get_user($in{'name'});
$clash && &error(&text('save_edup', $in{'name'}));
$clash && &error(&text('save_edup', &html_escape($in{'name'})));
}
!$access{'logouttime'} || $in{'logouttime_def'} ||
$in{'logouttime'} =~ /^\d+$/ || &error($text{'save_elogouttime'});

View File

@@ -81,4 +81,5 @@ syslog_syslog-ng=Syslog-NG
rotate_title=Actualització d'Estadístiques
rotate_doing=S'està processant el trànsit de xarxa registrat...
rotate_done=...fet.
__norefs=1

View File

@@ -658,10 +658,17 @@ else {
# save_port_address(name, portname, &config, indent)
sub save_port_address {
my ($port, @vals, $dir, $n);
foreach my $addr (split(/\s+/, $in{$_[0]})) {
$addr =~ /^\S+$/ || &error(&text('eipacl', $addr));
push(@vals, { 'name' => $addr });
}
my @sp = split(/\s+/, $in{$_[0]});
for(my $i=0; $i<@sp; $i++) {
$sp[$i] =~ /^\S+$/ || &error(&text('eipacl', $sp[$i]));
if (lc($sp[$i+1]) eq "key") {
push(@vals, { 'name' => $sp[$i++],
'values' => [ "key", $sp[++$i] ] });
}
else {
push(@vals, { 'name' => $sp[$i] });
}
}
$dir = { 'name' => $_[0], 'type' => 1, 'members' => \@vals };
($n = $_[1]) =~ s/[^A-Za-z0-9_]/_/g;
$dir->{'values'} = [ $_[1], $in{$_[1]} ] if (!$in{"${n}_def"});
@@ -2174,7 +2181,7 @@ return undef;
sub start_bind
{
my $chroot = &get_chroot();
my $user;
my $user = "";
my $cmd;
if ($config{'named_user'}) {
$user = "-u $config{'named_user'}";

View File

@@ -271,6 +271,10 @@ edit_eloc=Hi falta la latitud i la longitud
edit_eweight='$1' no és un pes de servei vàlid
edit_eport='$1' no és un número de port vàlid
edit_etarget='$1' no és un nom de servidor ni una adreça vàlida
edit_eusage='$1' no és un número d'ús TLSA vàlid
edit_eselector='$1' no és un número de selector TLSA vàlid
edit_ematch='$1' no és un número de coincidència TLSA vàlid
edit_etlsa=El certificat codificat amb TLSA és invàlid - només pot contenir bytes hexadecimals de dos dígits
edit_return=als registres
edit_ecname1=No pots crear un registre d'àlies de nom amb el mateix nom que un d'existent.
edit_ecname2=No pots crear un registre amb el mateix nom que un d'existent.
@@ -285,6 +289,9 @@ edit_dtitle=Suprimeix el Registre
edit_rusure=Segur que vols suprimir el registre $1 del domini $2, i possiblement qualsevol registre invers o de reenviament que hi coincideixi?
edit_dok=Sí, Suprimeix-lo
edit_eptr='$1' no és un nom de host de registre d'adreça inversa vàlid
edit_ealg2='$1' no és un número d'algoritme de certificat vàlid
edit_efp='$1' no és un tipus d'empremta digital de certificat vàlid
edit_esshfp=Hi falten les dades de la clau pública codificades en base 64 o bé no són vàlides
edit_espfa='$1' no és un host destinació vàlid
edit_espfa2='$1' ha de ser un nom de host, no una adreça IP
edit_espfmx='$1' no és un nom de domini destinació vàlid
@@ -378,6 +385,8 @@ type_HINFO=Informaci
type_NSEC3PARAM=Paràmetres DNSSEC
type_TXT=Text
type_SPF=Remitent Permès des de
type_TLSA=Certificat SSL
type_SSHFP=Clau Pública SSH
type_DMARC=DMARC
type_WKS=Servei Conegut (WKS)
type_RP=Persona Responsable
@@ -408,6 +417,8 @@ recs_defttl=TTL per defecte
recs_A=Adreça
recs_AAAA=Adreça IPv6
recs_NS=Servidor de Noms
edit_TLSA=Certificat SSL
edit_SSHFP=Clau Pública SSH
recs_CNAME=Àlies del Nom
recs_MX=Servidor de Correu
recs_HINFO=Informació del Host
@@ -427,6 +438,8 @@ recs_delete=Suprimeix els Seleccionats
value_A1=Adreça
value_AAAA1=Adreça IPv6
value_NS1=Servidor de Noms
recs_TLSA=Certificat SSL
recs_SSHFP=Clau Pública SSH
value_CNAME1=Nom Real
value_MX1=Prioritat
value_MX2=Servidor de Correu
@@ -444,6 +457,13 @@ value_SRV1=Prioritat
value_SRV2=Pes
value_SRV3=Port
value_SRV4=Servidor
value_TLSA1=Ús del certificat
value_TLSA2=Selector del certificat
value_TLSA3=Coincidència del certificat
value_TLSA4=Dades del certificat
value_SSHFP1=Algoritme de la clau pública
value_SSHFP2=Empremta digital de la clau pública
value_SSHFP3=Dades de la clau pública
value_KEY1=Banderes
value_KEY2=Protocol
value_KEY3=Algoritme
@@ -489,6 +509,23 @@ value_dmarcaspf=Requereix alineaci
value_dmarcadkim=Requereix alineació DKIM estricta
value_dmarcnor=No ho enviïs
tlsa_usage0=Autoritat certificadora
tlsa_usage1=Acaba l'entitat
tlsa_usage2=Ancora de confiança
tlsa_usage3=Domini emès
tlsa_selector0=Certificat complet
tlsa_selector1=Info de la clau pública
tlsa_match0=Contingut sense hash
tlsa_match1=amb hash SHA-256
tlsa_match2=amb hash SHA-512
sshfp_alg1=RSA
sshfp_alg2=DSA
sshfp_alg3=ECDSA
sshfp_alg4=Ed25519
sshfp_fp1=SHA-1
sshfp_fp2=SHA-256
warn=Avisa
fail=Falla
ignore=Ignora

192
certmgr/certmgr-lib.pl Executable file → Normal file
View File

@@ -60,7 +60,8 @@ sub print_sign_form {
print &ui_table_start($text{'signcsr_header'}, undef, 2);
print &ui_table_row($text{'signcsr_csrfile'}, &ui_textbox("csrfile", $in{'csrfile'}, 40), undef, $valign_middle);
print &ui_table_row($text{'signcsr_signfile'}, &ui_textbox("signfile", $in{'signfile'}, 40), undef, $valign_middle);
print &ui_table_row($text{'signcsr_keyfile'}, &ui_textbox("keycertfile", $in{'keycertfile'}, 40), undef, $valign_middle);
print &ui_table_row($text{'signcsr_keycertfile'}, &ui_textbox("cacertfile", $in{'cacertfile'}, 40), undef, $valign_middle);
print &ui_table_row($text{'signcsr_keyfile'}, &ui_textbox("cakeyfile", $in{'cakeyfile'}, 40), undef, $valign_middle);
print &ui_table_row(&ui_link("/help.cgi/certmgr/signcsr_ca_pass",
"<b>$text{'signcsr_ca_passphrase'}</b>", undef,
"onClick='window.open(\"/help.cgi/certmgr/signcsr_ca_pass\", \"help\", \"toolbar=no,menubar=no,scrollbars=yes,width=400,height=300,resizable=yes\"); return false;'"),
@@ -77,9 +78,12 @@ sub show_cert_info {
my $certdata=$_[1];
my %issuer;
my %subject;
my %v3ext;
my $isreq=0;
my @gr;
my @fields=('CN','O','OU','L','ST','C');
my $field;
my $rv = "";
if ($certdata=~/^\s*Certificate\s+Request:.*$/mi) {$isreq=1;}
foreach $field (@fields){
if ($certdata=~/^\s*Issuer:.*?\s+$field=(.*?)(, [A-Z]{1,2}|\/\w+=|$)/m) { $issuer{$field}=$1; }
if ($certdata=~/^\s*Subject:.*?\s+$field=(.*?)(, [A-Z]{1,2}|\/\w+=|$)/m) { $subject{$field}=$1; }
@@ -89,10 +93,19 @@ sub show_cert_info {
if ($certdata=~/^\s*Subject:.*?\/Email=(\S*?)(,\s*|$)/m) { $subject{'emailAddress'}=$1;}
if ($certdata=~/^\s*Not\s*After\s*:\s*(.*?)\s*$/m) { $subject{'expires'}=$1;}
if ($certdata=~/^\s*Not\s*Before\s*:\s*(.*?)\s*$/m) { $subject{'issued'}=$1;}
if ($certdata=~/^\s*MD5\s*Fingerprint=(.*?)\s*$/m) { $subject{'md5fingerprint'}=$1;}
if ($certdata=~/^\s*(\S*)\s*Public\s*Key:\s*\((.*?)\s*bit\)\s*$/m) { $subject{'keytype'}=$1; $subject{'keysize'}=$2;}
if ($certdata=~/^\s*Modulus\s*\(\d*\s*bit\):\s*((([0-9a-fA-F]{2}:)*\s*)*[0-9a-fA-F]{2})/ms) { $subject{'modulus'}=$1; }
if ($certdata=~/^\s*MD5\s+Fingerprint=(.*?)\s*$/m) { $subject{'md5fingerprint'}=$1;}
if ($certdata=~/^\s*SHA1\s+Fingerprint=(.*?)\s*$/m) { $subject{'sha1fingerprint'}=$1;}
if ($certdata=~/^\s*SHA256\s+Fingerprint=(.*?)\s*$/m) { $subject{'sha256fingerprint'}=$1;}
if ($certdata=~/^\s*Public\s+Key\s+Algorithm:\s*(.*?)\s*$/mi) { $subject{'keytype'}=$1;}
if ($certdata=~/^\s*Public-Key:\s*\(\s*(\S*?)\s*bit\s*\)\s*$/m) { $subject{'keysize'}=$1;}
if ($certdata=~/^\s*Modulus:\s*((([0-9a-fA-F]{2}:)*\s*)*[0-9a-fA-F]{2})/ms) { $subject{'modulus'}=$1; }
if ($certdata=~/^\s*Exponent:\s*(.*?)\s*?$/m) { $subject{'exponent'}=$1; }
if ($certdata=~/^\s*X509v3 Subject Alternative Name:\s*(.*?)\s*?$/m) { $v3ext{'san'}=$1; }
if ($certdata=~/^\s*Serial\s+Number:\s*((([0-9a-fA-F]{2}:)*\s*)*[0-9a-fA-F]{2})\s+/ms) { $subject{'serial'}=$1;}
if (!$subject{'serial'}) {
if ($certdata=~/^\s*Serial\s+Number:\s*([0-9]+)\s*\(/ms) { $subject{'serial'}=$1;}
}
if ($certdata=~/^\s*Signature\s+Algorithm:\s*(.*)$/mi) { $subject{'sigalgorithm'}=$1;}
if ($subject{'L'} && ($subject{'ST'} || $subject{'C'})) {$subject{'L'}.=',';} #Append commas
if ($subject{'ST'} && $subject{'C'}) {$subject{'ST'}.=',';} #Append commas
if ($issuer{'L'} && ($issuer{'ST'} || $issuer{'C'})) {$issuer{'L'}.=',';} #Append commas
@@ -100,30 +113,86 @@ sub show_cert_info {
$subject{'modulus'}=~s/$/<\/code><br>/msg;
$subject{'modulus'}=~s/^/<code>/msg;
$subject{'modulus'}=~s/\s+//msg;
$rv .= "<table width=100%>\n";
$rv .= "<tr><td width=50%><b>$text{'certmgrlib_subject'}</b></td><td width=50%><b>$text{'certmgrlib_issuer'}</b></td></tr>\n";
$rv .= "<tr><td>$subject{'CN'}</td><td>$issuer{'CN'}</td></tr>\n";
$rv .= "<tr><td>$subject{'O'}</td><td>$issuer{'O'}</td></tr>\n";
$rv .= "<tr><td>$subject{'OU'}</td><td>$issuer{'OU'}</td></tr>\n";
$rv .= "<tr><td>$subject{'L'} $subject{'ST'} $subject{'C'}</td><td>$issuer{'L'} $issuer{'ST'} $issuer{'C'}</td></tr>\n";
$rv .= "<tr><td>$subject{'emailAddress'}</td><td>$issuer{'emailAddress'}</td></tr>\n";
push(@gr, '<span style="font-weight:bold;">'.$text{'certmgrlib_subject'}.'</span>');
push(@gr, '');
push(@gr, $text{'view_cn'});
push(@gr, $subject{'CN'});
if ($subject{'O'}) {
push(@gr, $text{'view_o'});
push(@gr, $subject{'O'});
}
if ($subject{'OU'}){
push(@gr, $text{'view_ou'});
push(@gr, $subject{'OU'});
}
if ($subject{'L'} || $subject{'ST'} || $subject{'C'}) {
push(@gr, $text{'view_location'});
push(@gr, $subject{'L'}.$subject{'ST'}.$subject{'C'});
}
if ($subject{'emailAddress'}){
push(@gr, $text{'view_email'});
push(@gr, $subject{'emailAddress'});
}
if ($v3ext{'san'}){
push(@gr, "subjectAltName");
push(@gr, $v3ext{'san'});
}
if ($subject{'issued'}){
$rv .= "<tr><td colspan=2>$text{'issued_on'} $subject{'issued'}</td></tr>\n";
$rv .= "<tr><td colspan=2>$text{'expires_on'} $subject{'expires'}</td></tr>\n";
}
if ($full){
$rv .= "<tr><td>$text{'keysize'}</td><td>$subject{'keysize'}</td></tr>\n";
$rv .= "<tr><td>$text{'keytype'}</td><td>$subject{'keytype'}</td></tr>\n";
}
if ($full){
$rv .= "<tr><td>$text{'publicExponent'}</td><td>$subject{'exponent'}</td></tr>\n";
$rv .= "<tr><td colspan=2>$text{'modulus'}:<br>$subject{'modulus'}</td></tr>\n";
push(@gr, $text{'issued_on'});
push(@gr, $subject{'issued'});
push(@gr, $text{'expires_on'});
push(@gr, $subject{'expires'});
}
if ($subject{'md5fingerprint'}){
$rv .= "<tr><td colspan=2>$text{'md5fingerprint'}:<br>$subject{'md5fingerprint'}</td></tr>\n";
push(@gr, $text{'md5fingerprint'});
push(@gr, $subject{'md5fingerprint'});
}
$rv .= "</table>\n";
return $rv;
if ($subject{'sha1fingerprint'}){
push(@gr, $text{'sha1fingerprint'});
push(@gr, $subject{'sha1fingerprint'});
}
if ($subject{'sha256fingerprint'}){
push(@gr, $text{'sha256fingerprint'});
push(@gr, $subject{'sha256fingerprint'});
}
if ($full) {
if ($subject{'serial'}) {
push(@gr, $text{'view_serial'});
push(@gr, $subject{'serial'});
}
if ($subject{'sigalgorithm'}) {
push(@gr, $text{'view_sig_algorithm'});
push(@gr, $subject{'sigalgorithm'});
}
push(@gr, $text{'keysize'});
push(@gr, $subject{'keysize'});
push(@gr, $text{'keytype'});
push(@gr, $subject{'keytype'});
push(@gr, $text{'publicExponent'});
push(@gr, $subject{'exponent'});
push(@gr, $text{'modulus'});
push(@gr, $subject{'modulus'});
}
if (!$isreq) {
push(@gr, '<br /><span style="font-weight:bold;">'.$text{'certmgrlib_issuer'}.'</span>');
push(@gr, '');
push(@gr, $text{'view_cn'});
push(@gr, $issuer{'CN'});
if ($issuer{'O'}) {
push(@gr, $text{'view_o'});
push(@gr, $issuer{'O'});
}
if ($issuer{'OU'}){
push(@gr, $text{'view_ou'});
push(@gr, $issuer{'OU'});
}
if ($issuer{'L'} || $issuer{'ST'} || $issuer{'C'}) {
push(@gr, $text{'view_location'});
push(@gr, $issuer{'L'}.$issuer{'ST'}.$issuer{'C'});
}
}
return &ui_grid_table(\@gr, 2, undef, ['style="padding:0;"', 'style="padding:0 0 0.5% 3%;width:75%;"']);
}
sub show_key_info {
@@ -155,6 +224,79 @@ sub show_key_info {
return $rv;
}
sub show_crl_info {
my $full=$_[0];
my $crldata=$_[1];
my %issuer;
my %v3ext;
my ($ndx, $pos);
my $isreq=0;
my @gr;
my @fields=('CN','O','OU','L','ST','C');
my $field;
foreach $field (@fields){
if ($crldata=~/^\s*Issuer:.*?\/$field=(.*?)(, [A-Z]{1,2}|\/\w+=|$)/m) { $issuer{$field}=$1; }
}
if ($crldata=~/^\s*Signature\s+Algorithm:\s*(.*)$/mi) { $issuer{'sigalgorithm'}=$1;}
if ($crldata=~/^\s*Last\s+Update:\s*(.*?)\s*?$/m) { $v3ext{'lastupdate'}=$1; }
if ($crldata=~/^\s*Next\s+Update:\s*(.*?)\s*?$/m) { $v3ext{'nextupdate'}=$1; }
if ($crldata=~/^\s*X509v3 CRL Number:\s*(.*?)\s*?$/m) { $v3ext{'crlnum'}=$1; }
if ($issuer{'L'} && ($issuer{'ST'} || $issuer{'C'})) {$issuer{'L'}.=',';} #Append commas
if ($issuer{'ST'} && $issuer{'C'}) {$issuer{'ST'}.=',';} #Append commas
push(@gr, '<span style="font-weight:bold;">'.$text{'crl'}.'</span>');
push(@gr, '');
push(@gr, $text{'view_cn'});
push(@gr, $issuer{'CN'});
if ($issuer{'O'}) {
push(@gr, $text{'view_o'});
push(@gr, $issuer{'O'});
}
if ($issuer{'OU'}){
push(@gr, $text{'view_ou'});
push(@gr, $issuer{'OU'});
}
if ($issuer{'L'} || $issuer{'ST'} || $issuer{'C'}) {
push(@gr, $text{'view_location'});
push(@gr, $issuer{'L'}.$issuer{'ST'}.$issuer{'C'});
}
if ($issuer{'sigalgorithm'}) {
push(@gr, $text{'view_sig_algorithm'});
push(@gr, $issuer{'sigalgorithm'});
}
if ($v3ext{'lastupdate'}) {
push(@gr, $text{'view_last_update'});
push(@gr, $v3ext{'lastupdate'});
}
if ($v3ext{'nextupdate'}) {
push(@gr, $text{'view_next_update'});
push(@gr, $v3ext{'nextupdate'});
}
if ($v3ext{'crlnum'}) {
push(@gr, $text{'view_crl_number'});
push(@gr, $v3ext{'crlnum'});
}
if ($full) {
push(@gr, "$text{'view_revoked_certs'}:");
push(@gr, "");
$ndx = index($crldata, "Serial Number:");
while ($ndx gt 0) {
$crldata = substr($crldata, $ndx);
$crldata=~/^\s*Serial Number:\s*(.*)$/mi;
push(@gr, "<span style=\"padding-left:10%;\">$text{'view_serial'}</span>");
push(@gr, $1);
$crldata=~/^\s*Revocation Date:\s*(.*)$/mi;
push(@gr, "<span style=\"padding-left:10%;\">$text{'view_revoke_date'}</span>");
push(@gr, $1);
$crldata=~/^\s*X509v3 CRL Reason Code:\s*(.*)$/mi;
push(@gr, "<span style=\"padding-left:10%;\">$text{'view_revoke_reason'}</span>");
push(@gr, $1);
$ndx = index($crldata, "Serial Number:", $ndx + 1);
}
}
return &ui_grid_table(\@gr, 2, undef, ['style="padding:0;"', 'style="padding:0 0 0.5% 3%;width:65%;"']);
}
sub pem_or_der{
my $filename=$_[0];
my $filetype=$_[1];

View File

@@ -103,12 +103,15 @@ prime1=Primzahl 1
prime2=Primzahl 2
privateExponent=Privater Exponent
publicExponent=&#214;ffentlicher Exponent
sha1fingerprint=SHA-1 Fingerprint
sha256fingerprint=SHA-256 Fingerprint
signcsr_ca_passphrase=CA Passphrase
signcsr_csrfile=CSR Dateiname
signcsr_days=Anzahl der Tage der Zertifizierung f&#252;r
signcsr_desc=Auf dieser Seite k&#246;nnen Sie eine signiertes CSR von jemand anderem mit einem eigenen privaten Schl&#252;ssel signieren.
signcsr_e_nocsrfile=Keinen CSR Dateinamen eingegeben
signcsr_e_nokeyfile=Kein CA privater Schl&#252;ssel oder Zertifikats-Datei eingegeben
signcsr_e_nopassword=Es wurde kein CA-Kennwort eingegeben
signcsr_e_nosignfile=Kein signiertes Zertifikats-Dateiname eingegeben
signcsr_e_signfailed=Fehler, signiertes Zertifikat nicht generiert
signcsr_generate=Signiere Zertifikat
@@ -121,13 +124,26 @@ signcsr_title=Signiere Certificate Signing Request
signcsr_worked=Signiere Zertifikat generiert
st=Staat oder Provinz (vollst&#228;ndiger Name)
view_choose=W&#228;hle
view_cn=Common Name
view_crl_number=CRL Nummer
view_delete=L&#246;sche
view_deleted=Datei erfolgreich gel&#246;scht
view_download=Download
view_e_nofile=Datei nicht gefunden oder ist keine normale Datei
view_e_not_deleted=Fehler: Problem beim L&#246;schen der Datei
view_email=E-Mail-Adresse
view_last_update=Letztes Update
view_location=Lokalit&#228;t
view_next_update=Weiter Update
view_o=Organisationsname
view_ou=Organisationseinheit Name
view_pkcs12=Als PKCS12, mit Passwort:
view_revoke_date=Widerrufsdatum
view_revoke_reason=Widerrufsgrund
view_revoked_certs=Widerrufsbescheinigungen
view_select=Bitte w&#228;hle eine Datei zum Anzeigen
view_serial=Ordnungsnummer
view_sig_algorithm=Signaturalgorithmus
view_title=Zeige Zertifikat/CSR/Schl&#252;ssel
view_update=Aktualisieren
view_view=Zeige

16
certmgr/lang/en Executable file → Normal file
View File

@@ -20,6 +20,8 @@ keytype=Key Type
issued_on=Issued on
expires_on=Expires on
md5fingerprint=MD5 Fingerprint
sha1fingerprint=SHA-1 Fingerprint
sha256fingerprint=SHA-256 Fingerprint
modulus=Modulus (from public key)
publicExponent=Public Exponent
@@ -102,6 +104,19 @@ view_deleted=File deleted sucessfully
view_e_not_deleted=Error: Problem deleting file
view_e_nofile=File not found or not a regular file
view_wildcard=File Wildcard
view_cn=Common Name
view_o=Organization
view_ou=Organization Unit
view_email=Email Address
view_location=Location
view_serial=Serial Number
view_sig_algorithm=Signature Algorithm
view_last_update=Last Update
view_next_update=Next Update
view_revoked_certs=Revoked Certificates
view_revoke_date=Revocation Date
view_revoke_reason=Revocation Reason
view_crl_number=CRL Number
import_title=Import Key or Signed Certificate
import_e_nodir=No directory selected
@@ -135,6 +150,7 @@ signcsr_generate=Sign Certificate
signcsr_e_nocsrfile=No CSR filename entered
signcsr_e_nosignfile=No signed certificate filename entered
signcsr_e_nokeyfile=No CA private key file or certificate file entered
signcsr_e_nopassword=No CA private key password entered
signcsr_e_signfailed=Error, signed certificate not generated
signcsr_worked=Signed certificate generated
signcsr_saved_cert=The certificate was saved as

39
certmgr/lang/es Executable file → Normal file
View File

@@ -20,6 +20,8 @@ keytype=Tipo de llave
issued_on=Fecha de certificación
expires_on=Fecha de vencimiento
md5fingerprint=Huella dactilar MD5
sha1fingerprint=Huella dactilar SHA-1
sha256fingerprint=Huella dactilar SHA-256
modulus=Modulus (del llave publico)
publicExponent=Exponente Publico
@@ -86,17 +88,30 @@ manage_decrypt=Decrypt Private Key
manage_changepw=Change Password of Private Key
manage_delete=Delete Certificate
view_title=View Certificate/CSR/Key
view_view=View
view_update=Update
view_download=Download
view_delete=Delete
view_select=Please select a file to view
view_choose=Choose
view_deleted=File deleted sucessfully
view_e_not_deleted=Error: Problem deleting file
view_e_nofile=File not found or not a regular file
view_wildcard=File Wildcard
view_title=Ver el Certificado/CSR/Key
view_view=Ver
view_update=Actualizar
view_download=Descargar
view_delete=Borrar
view_select=Por favor seleccione un archivo para ver
view_choose=Escoger
view_deleted=Archivo eliminado correctamente
view_e_not_deleted=Error: Problema al eliminar el archivo
view_e_nofile=Archivo no encontrado o no es un archivo regular
view_wildcard=Archivo comod&#237;n
view_cn=Nombre Com&#250;n
view_o=Organizaci&#243;n
view_ou=Unidad de Organizaci&#243;n
view_email=Direcci&#243;n de email
view_location=Locaci&#243;n
view_serial=número de serie
view_sig_algorithm=Algoritmo de firma
view_last_update=&#250;ltima actualizaci&#243;n
view_next_update=Siguiente actualizaci&#243;n
view_revoked_certs=Certificados revocados
view_revoke_date=Fecha de revocaci&#243;n
view_revoke_reason=Raz&#243;n de revocaci&#243;n
view_crl_number=N&#250;mero CRL
import_title=Import Key or Signed Certificate
import_e_nodir=No directory selected
@@ -114,3 +129,5 @@ import_upload_cert=Upload Certificate
import_key_file=Key file to upload
import_key_destination=Destination directory of key
import_upload_key=Upload Key
signcsr_e_nopassword=No CA private key password entered

View File

@@ -4,3 +4,4 @@ desc=PKI Certificate and Key Management
name=certmgr
version=1.8
desc_de=PKI-Zertifikat und Schl&#252;ssel-Management
desc_no=PKI Sertifikater og n&#248;kler

36
certmgr/signcsr.cgi Executable file → Normal file
View File

@@ -15,7 +15,10 @@ if ($in{'submitted'} eq "sign") {
if (!$in{'signfile'}) {
$error.=$text{'signcsr_e_nosignfile'}."<br>\n";
}
if (!$in{'keyfile'} || !$in{'keycertfile'}) {
if (!$in{'cakeyfile'}) {
$error.=$text{'signcsr_e_nokeyfile'}."<br>\n";
}
if (!$in{'cacertfile'}) {
$error.=$text{'signcsr_e_nokeyfile'}."<br>\n";
}
if (!$error) {
@@ -27,8 +30,8 @@ if ($in{'submitted'} eq "sign") {
$config{'incsr_filename'}; }
if (!$in{'signfile'}) { $in{'signfile'}=$config{'ssl_cert_dir'}."/".
$config{'sign_filename'}; }
if (!$in{'keyfile'}) { $in{'keyfile'}=$config{'cakey_path'}; }
if (!$in{'keycertfile'}) { $in{'keycertfile'}=$config{'cacert_path'};}
if (!$in{'cacertfile'}) { $in{'cacertfile'}=$config{'cacert_path'}; }
if (!$in{'cakeyfile'}) { $in{'cakeyfile'}=$config{'cakey_path'}; }
if (!$in{'days'}) { $in{'days'}=$config{'default_days'}; }
}
@@ -45,10 +48,12 @@ print &ui_hr();
sub process{
&foreign_require("webmin", "webmin-lib.pl");
local %miniserv;
local ($tempdir, $des, $out, $url);
local $error=0;
&get_miniserv_config(\%miniserv);
if (!$miniserv{'ca'}) {
&webmin::setup_ca();
}
}
if ((-e $in{'signfile'})&&($in{'overwrite'} ne "yes")) {
&overwriteprompt();
print &ui_hr();
@@ -57,11 +62,19 @@ sub process{
}
$tempdir = &tempname();
mkdir($tempdir, 0700);
if ($in{'password'}){ $des="-passin pass:".quotemeta($in{'password'}); }
$out = `yes | $config{'openssl_cmd'} ca -in $in{'csrfile'} -out $in{'signfile'} -cert $in{'keycertfile'} -keyfile $in{'keyfile'} -outdir $tempdir -days $in{'days'} -config $config_directory/acl/openssl.cnf $des 2>&1`;
if (keyfile_is_encrypted($in{'cakeyfile'})) {
if ($in{'password'}) { $des="-passin pass:".quotemeta($in{'password'}); }
else {
print "<b>$text{'signcsr_e_signfailed'}</b>\n<pre>$text{'signcsr_e_nopassword'}</pre>\n";
print &ui_hr();
&footer("", $text{'index_return'});
exit;
}
}
$out = `yes | $config{'openssl_cmd'} ca -in $in{'csrfile'} -out $in{'signfile'} -cert $in{'cacertfile'} -keyfile $in{'cakeyfile'} -outdir $tempdir -days $in{'days'} -config $config{'ssl_cnf_file'} $des 2>&1`;
system("rm -rf $tempdir");
if (!-e $in{'csrfile'}) {
if ($out =~ /^ERROR(.*$)/mi || $out =~ /:error:/mi) {
$error=$out;
} else{
$error=0;
@@ -109,3 +122,12 @@ sub overwriteprompt{
print &ui_table_end();
}
sub keyfile_is_encrypted{
my $key=$_[0];
my $encrypted=0;
open(KFILE,$key)||return(0);
while(<KFILE>){ if (/^Proc.*ENCRYPTED.*$/mi) { $encrypted=1; last; } }
close(KFILE);
return($encrypted);
}

36
certmgr/view.cgi Executable file → Normal file
View File

@@ -38,12 +38,15 @@ if (($in{'filename'}) && ($in{'view'} eq $text{'view_view'})) {
}
while(<FILE>){ $buffer.=$_;}
if ($buffer=~/^\s*-+BEGIN\s*RSA\s*PRIVATE\s*KEY-*\s*$/mi) { $key=1; }
if ($buffer=~/^\s*-+BEGIN\s*PRIVATE\s*KEY-*\s*$/mi) { $key=1; }
if ($buffer=~/^\s*-+BEGIN\s*CERTIFICATE-*\s*$/mi) { $cert=1; }
if ($buffer=~/^\s*-+BEGIN\s*CERTIFICATE\s*REQUEST-*\s*$/mi) { $csr=1; }
if ($buffer=~/^\s*-+BEGIN\s*X509\s*CRL-*\s*$/mi) { $crl=1; }
if (($key)&&($cert)) {$in{'keycertfile'}=$in{'filename'};}
elsif ($key) {$in{'keyfile'}=$in{'filename'};}
elsif ($cert) {$in{'certfile'}=$in{'filename'};}
elsif ($csr) {$in{'csrfile'}=$in{'filename'};}
elsif ($crl) {$in{'crlfile'}=$in{'filename'};}
else {
print "$text{'e_file'}<br>\n$text{'e_notcert'}\n<p>\n";
&footer("", $text{'index_return'});
@@ -135,6 +138,25 @@ if ($in{'keycertfile'}) {
exit;
}
if ($in{'crlfile'}) {
if ($in{'dl'} eq 'yes') {
# Just output in PEM format
&output_cert($in{'crlfile'});
}
open(OPENSSL,"$config{'openssl_cmd'} crl -in $in{'crlfile'} -text -noout|");
while(<OPENSSL>){ $buffer.=$_; }
close(OPENSSL);
print &ui_table_start($in{'crlfile'}, "width=60%", 2);
print &ui_table_row(undef, (!$buffer ? $text{'e_file'} : show_crl_info(1,$buffer) ) );
print &ui_table_end()."<br>";
&download_form("crlfile", $in{'crlfile'}, "CRL");
print &ui_hr();
&footer("", $text{'index_return'});
exit;
}
print &ui_form_start("view.cgi", "post");
print &ui_table_start($text{'view_select'}, undef, 2);
print &ui_table_row($text{'view_wildcard'}.": ".&ui_textbox("wildcard", $in{'wildcard'}), &ui_submit($text{'view_update'},"update"), undef, $valign_middle);
@@ -194,12 +216,14 @@ $rv1 .= &ui_hidden($mode, $keyfile);
$rv1 .= &ui_submit("$text{'view_download'} $suffix");
$rv1 .= "</form>";
$rv2 = "<form id='view_p12filename' action='view.cgi/$p12filename' method=post>";
$rv2 .= &ui_hidden("pkcs12", "yes");
$rv2 .= &ui_hidden($mode, $keyfile);
$rv2 .= &ui_submit("$text{'view_download'} $suffix $text{'view_pkcs12'}");
$rv2 .= &ui_password("pass","",20);
$rv2 .= "</form>";
if ($mode ne "crlfile") {
$rv2 = "<form id='view_p12filename' action='view.cgi/$p12filename' method=post>";
$rv2 .= &ui_hidden("pkcs12", "yes");
$rv2 .= &ui_hidden($mode, $keyfile);
$rv2 .= &ui_submit("$text{'view_download'} $suffix $text{'view_pkcs12'}");
$rv2 .= &ui_password("pass","",20);
$rv2 .= "</form>";
}
$rv3 = "<form id='view' action='view.cgi' method=post>";
$rv3 .= &ui_hidden("delete", "yes");

View File

@@ -23,8 +23,8 @@ print &ui_table_start(undef, undef, 2);
if ($access{'lang'}) {
# Show personal language
my @langs = &list_languages();
my $glang = $gconfig{"lang"} || $default_lang;
my @langs = &list_languages($user->{'lang'} || $glang);
my ($linfo) = grep { $_->{'lang'} eq $glang } @langs;
print &ui_table_row($text{'index_lang'},
&ui_radio("lang_def", $user->{'lang'} ? 0 : 1,

View File

@@ -1,2 +1,11 @@
line1=Opcions de Mostra,11
sort_mode=Ordena els hosts per,1,1-Nom de host,0-Ordre d'addició,2-Descripció
table_mode=Mostra els hosts com a,1,1-Taula,0-Icones
conf_host_links=Proporciona un enllaç per modificar el host,1,1-Sí,0-No
line2=Opcions d'Usuaris i Grups,11
conf_add_user=Permet afegir usuaris,1,1-Sí,0-No
conf_add_group=Permet afegir grups,1,1-Sí,0-No
conf_find_user=Permet cercar a la base de dades d'usuaris,1,1-Sí,0-No
conf_find_group=Permet cercar a la base de dades de grups,1,1-Sí,0-No
conf_allow_refresh=Permet refrescar les llistes d'usuaris i grups,1,1-Sí,0-No
conf_allow_sync=Permet la sincronització del servidor,1,1-Sí,0-No

View File

@@ -338,7 +338,7 @@ foreach $h (@hosts) {
# Can just run RPM command
# XXX doesn't actually check output!
&remote_eval($s->{'host'}, "webmin", "system(\"rpm --import \$root_directory/webmin/jcameron-key.asc >/dev/null 2>&1\")");
($out, $ex) = &remote_eval($s->{'host'}, "webmin", "\$out = `rpm -U --ignoreos --ignorearch '$rfile' >/dev/null 2>&1 </dev/null`; (\$out, \$?)");
($out, $ex) = &remote_eval($s->{'host'}, "webmin", "\$out = `rpm -U --ignoreos --ignorearch --nodeps '$rfile' >/dev/null 2>&1 </dev/null`; (\$out, \$?)");
&remote_eval($s->{'host'}, "webmin", "unlink('$rfile')")
if ($host_need_unlink);
if ($ex) {

View File

@@ -5,9 +5,11 @@
@ARGV >= 2 || die "usage: create-module.pl [--dir name] <file.wbm> <module>[/version] ..";
my $pwd;
chop($pwd = `pwd`);
# Parse command-line options
my @exclude;
while(@ARGV) {
if ($ARGV[0] eq "--dir") {
shift(@ARGV);
@@ -17,17 +19,21 @@ while(@ARGV) {
shift(@ARGV);
$createsig = 1;
}
elsif ($ARGV[0] eq "--exclude") {
shift(@ARGV);
push(@exclude, shift(@ARGV));
}
else {
last;
}
}
$file = shift(@ARGV);
my $file = shift(@ARGV);
if ($file !~ /^\//) {
$file = "$pwd/$file";
}
unlink($file);
foreach $m (@ARGV) {
foreach my $m (@ARGV) {
# Parse module and forced version
$m =~ s/\/$//;
if ($m =~ /^(.*)\/(.*)$/) {
@@ -46,6 +52,9 @@ foreach $m (@ARGV) {
$copydir = "/tmp/create-module/$subdir";
system("rm -rf $copydir");
system("cp -r -L $mod $copydir 2>/dev/null || cp -R -L $mod $copydir");
foreach my $e (@exclude) {
system("find $copydir -name ".quotemeta($e)." | xargs rm -rf");
}
# Find type from .info file
undef(%minfo);

View File

@@ -1,26 +1,26 @@
line1=Konfigurierbare Einstellungen,11
max_len=Maximale Kommandozeilenanzahl die angezeigt wird,3,Unbegrenzt
max_jobs=Maximale Anzahl von Cronjobs anzeigen,3,Unbegrenzt
show_time=Zeige Prozess&#45;Zeiten?,1,1-Ja,0-Nein
max_len=Maximale Anzahl der anzuzeigenden Befehlszeilen,3,Unbegrenzt
max_jobs=Maximale Anzahl der anzuzeigenden Cronjobs,3,Unbegrenzt
show_time=Zeige Prozess-Zeiten?,1,1-Ja,0-Nein
show_comment=Job Kommentare anzeigen?,1,1-Ja,0-Nein
show_run=Zeige den Status aller Auftr&#228;ge an?,1,2-Ja&#44; und erlaube Start und Stop der Auftr&#228;ge,1-Ja,0-Nein
show_run=Status aller Auftr&#228;ge anzeigen?,1,2-Ja&#44; und erlaube Start und Stop der Auftr&#228;ge,1-Ja,0-Nein
match_mode=Finde Prozesse durch,1,1-Kommando,0-Kommando und Argumente
match_user=Benutzernamen zus&#228;tzlich ermitteln beim Finden von Prozessen?,1,1-Ja,0-Nein
kill_subs=Alle Unterprozesse zus&#228;tzlich zum Prozess selbst t&#246;ten?,1,1-Ja,0-Nein
match_user=Benutzernamen ermitteln beim Finden von Prozessen?,1,1-Ja,0-Nein
kill_subs=Alle Unterprozesse des Prozesses t&#246;ten?,1,1-Ja,0-Nein
hourly_only=Cronjobs auf 1x pro Stunde begrenzen?,1,0-Nein,1-Ja
add_file=F&#252;gt neue Jobs zu Datei hinzu,3,Regul&#228;re crontab-Datei
line2=Systemkonfiguration,11
cron_dir=Crontab&#45;Verzeichnis,0
cron_get_command=Befehl zum Lesen der Cron&#45;Auftr&#228;ge eines Benutzers,0
cron_edit_command=Befehl zum Bearbeiten der Cron&#45;Auftr&#228;ge eines Benutzers,0
cron_copy_command=Befehl zum Akzeptieren eines Cron&#45;Auftrags eines Benutzers auf stdin,0
cron_delete_command=Befehl zum L&#246;schen eines Cron&#45;Auftrages eines Benutzers,0
cron_input=Cron unterst&#252;tzt Eingaben zu Cron&#45;Auftr&#228;gen,1,1-Ja,0-Nein
cron_dir=Crontab-Verzeichnis,0
cron_get_command=Befehl zum Lesen der Cron-Auftr&#228;ge eines Benutzers,0
cron_edit_command=Befehl zum Bearbeiten der Cron-Auftr&#228;ge eines Benutzers,0
cron_copy_command=Befehl zum Akzeptieren eines Cron-Auftrags eines Benutzers auf stdin,0
cron_delete_command=Befehl zum L&#246;schen eines Cron-Auftrages eines Benutzers,0
cron_input=Cron unterst&#252;tzt Eingaben zu Cron-Auftr&#228;gen,1,1-Ja,0-Nein
cron_allow_file=Datei die erlaubte Benutzer enth&#228;lt,0
cron_deny_file=Datei die abgelehnte Benutzer enth&#228;lt,0
cron_deny_all=Rechte ohne Allow&#45; oder Deny&#45;Dateien,1,0-Verweigere alle,1-Verweigere alle au&#223;er ROOT,2-Erlaube alle
vixie_cron=Unterst&#252;tzt Vixie&#45;Cron&#45;Erweiterungen,1,1-Ja,0-Nein
system_crontab=Pfad zur Vixie&#45;Cron System Crontab&#45;Datei,0
cron_deny_all=Rechte ohne Allow- oder Deny-Dateien,1,0-Verweigere alle,1-Verweigere alle au&#223;er ROOT,2-Erlaube alle
vixie_cron=Unterst&#252;tzt Vixie-Cron-Erweiterungen,1,1-Ja,0-Nein
system_crontab=Pfad zur Vixie-Cron System Crontab-Datei,0
single_file=Pfad zur Single-User-crontab-Datei,0
cronfiles_dir=Pfad zum Verzeichnis mit zus&#228;tzlichen Cron&#45;Dateien,3,Keiner
run_parts=run&#45;parts Befehl,0
cronfiles_dir=Pfad zum Verzeichnis mit zus&#228;tzlichen Cron-Dateien,3,Keiner
run_parts=run-parts Befehl,0

View File

@@ -10,6 +10,7 @@ index_none3=Encara no tens cap treball cron.
index_create=Crea una nou treball planificat amb cron.
index_ecreate=Crea una nova variable d'entorn.
index_allow=Controla l'accés dels usuaris als treballs cron.
index_manual=Edita manualment els treballs cron.
index_return=a la llista de cron
index_env=Variable d'entorn
index_move=Desplaça
@@ -180,4 +181,12 @@ range_eend=Hi falta la data final de l'interval o b
delete_err=No s'han pogut suprimir els treballs Cron
delete_enone=No has seleccionat res
manual_title=Edició Manual de Treballs Cron
manual_edit=Fitxer cron a editar:
manual_ok=Edita
manual_editing=Utilitza la caixa de text de sota per editar el treballs Cronde $1. Ves amb compte, perquè Webmin no en farà cap validació!
manual_efile=El fitxer seleccionat no és vàlid!
manual_ecannot=No tens permís per editar manualment els treballs cron
__norefs=1

View File

@@ -1,43 +1,43 @@
desc_nl=Geplande Cron Taken
desc_ko_KR.euc=¿¹¾àµÈ Cron ÀÛ¾÷
risk=low medium high
desc_ru_SU=òÁÓÐÉÓÁÎÉÅ ÚÁÄÁÎÉÊ Cron
desc_zh_TW.Big5=©w®É°õ¦æ¤u§@ (Cron)
desc_pl=Harmonogram zadañ Cron
desc_de=Geplante Auftr&#228;ge (Cron)
name=Cron Manager
desc_zh_CN=Cron ÈÎÎñµ÷¶È
desc_pt=Tarefas Agendadas (Cron)
category=system
desc_tr=Zamanlandýrýlmýþ Görevler
os_support=solaris slackware-linux redhat-linux mandrake-linux debian-linux suse-linux united-linux hpux freebsd osf1 irix unixware openserver macos open-linux turbo-linux openbsd corel-linux cobalt-linux aix netbsd msc-linux generic-linux gentoo-linux trustix-linux sol-linux coherent-linux openmamba-linux windows pardus-linux
desc=Scheduled Cron Jobs
desc_es=Tareas Planificadas (Cron)
desc_sv=Schemalagda cronjobb
desc_fr=Tâches Cron
desc_ja_JP.euc=ͽÄêºÑ¤ß Cron ºî¶È
desc_hu=Idõzitett futtatások (Cron)
desc_ru_RU=Ðàñïèñàíèå çàäàíèé Cron
desc_ca=Treballs Planificats Cron
longdesc=Create, edit and delete Cron jobs.
depends=proc
readonly=1
desc_zh_TW.UTF-8=定時執行工作 (Cron)
desc_zh_CN.UTF-8=Cron 任务调度
desc_ja_JP.UTF-8=予定済ã<CB86>¿ Cron 作業
desc_ko_KR.UTF-8=예약ë<C2BD>œ Cron 작업
desc_sk=Cron Plánovaè úloh
risk=low medium high
desc=Scheduled Cron Jobs
longdesc=Create, edit and delete Cron jobs.
desc_nl=Geplande Cron Taken
desc_ko_KR.euc=¿¹¾àµÈ Cron ÀÛ¾÷
desc_ru_SU=òÃ<C2B2>ÓÃ<E2809C>ÉÓÃ<E2809C>ÎÉÅ ÚÃ<C5A1>ÄÃ<E2809E>ÎÉÊ Cron
desc_zh_TW.Big5=©w®É°õ¦æ¤u§@ (Cron)
desc_pl=Harmonogram zadañ Cron
desc_zh_CN=Cron ÈÎÎñµ÷¶È
desc_pt=Tarefas Agendadas (Cron)
desc_tr=Zamanlandýrýlmýþ Görevler
desc_es=Tareas Planificadas (Cron)
desc_sv=Schemalagda cronjobb
desc_fr=Tâches Cron
desc_ja_JP.euc=Ã<>½ÄêºÃ¤ß Cron ºî¶È
desc_hu=Idõzitett futtatások (Cron)
desc_ru_RU=ö²ö<C2B2>ö“ö<E2809C>ö‰ö“ö<E2809C>öŽö‰ö… öšö<C5A1>ö„ö<E2809E>öŽö‰öŠ Cron
desc_ca=Treballs Planificats Cron
desc_zh_TW.UTF-8=定時執行工作 (Cron)
desc_zh_CN.UTF-8=Cron 任务调度
desc_ja_JP.UTF-8=予定済ãÂ<C2A3>¿ Cron 作業
desc_ko_KR.UTF-8=예약ëÂ<C2AB>Å“ Cron 작업
desc_sk=Cron Plánovaè úloh
desc_it=Pianificazione Cron Job
desc_cz=Cron Plánovaè úloh
desc_ru.UTF-8=РаÑ<EFBFBD>пиÑ<EFBFBD>ание заданий Cron
desc_hu.UTF-8=Tervezett Cron munkák
desc_cz.UTF-8=Cron PlánovaÄ<EFBFBD> úloh
desc_pl.UTF-8=Harmonogram zadań crona
desc_sk.UTF-8=Cron PlánovaÄ<EFBFBD> úloh
desc_cz=Cron Plánovaè úloh
desc_ru.UTF-8=Ã<EFBFBD> Ã<EFBFBD>°ÃÂ<EFBFBD>Ã<EFBFBD>¿Ã<EFBFBD>¸ÃÂ<EFBFBD>Ã<EFBFBD>°Ã<EFBFBD>½Ã<EFBFBD>¸Ã<EFBFBD>µ Ã<>·Ã<C2B7>°Ã<C2B0>´Ã<C2B4>°Ã<C2B0>½Ã<C2BD>¸Ã<C2B8>¹ Cron
desc_hu.UTF-8=Tervezett Cron munkák
desc_cz.UTF-8=Cron PlánovaÄÂ<EFBFBD> úloh
desc_pl.UTF-8=Harmonogram zadań crona
desc_sk.UTF-8=Cron PlánovaÄÂ<EFBFBD> úloh
desc_no=Tidsplanlagte Cron jobber
longdesc_hu=Idõzitett futtatások létrehozása, módosítása és törlése
longdesc_hu=Idõzitett futtatások létrehozása, módosítása és törlése
longdesc_ms_MY=Cipta, Ubah dan padam Tugas Cron.
desc_ms_MY=Tugas Cron Berjadual
longdesc_de=Erstellt, editiert und l&#246;scht Cron-Auftr&#228;ge.
longdesc_pl=Twórz, edytuj i usuwaj zadania Cron.
longdesc_pl=Twórz, edytuj i usuwaj zadania Cron.
longdesc_ca=Crea, edita i suprimeix treballs Cron.
longdesc_de=Erzeugen und Bearbeiten von wiederkehrenden CRON-Auftr&#228;gen.
longdesc_de.UTF-8=Erzeugen und Bearbeiten von wiederkehrenden CRON-Aufträgen.

View File

@@ -53,7 +53,7 @@ ssl_title=Configuraci
ssl_header=Opcions d'IMAP i POP3 en mode SSL
ssl_key=Fitxer de claus privades SSL
ssl_cert=Fitxer de certificats SSL
ssl_ca=Fitxer de certificat CA SSL CA
ssl_ca=Fitxer de certificat CA client SSL
ssl_pass=Contrasenya del fitxer de claus
ssl_prompt=No en cal cap
ssl_regen=Interval entre regeneracions de paràmetres SSL
@@ -63,7 +63,7 @@ ssl_plain=Desactiva l'autenticaci
ssl_err=No s'ha pogut desar la configuració SSL
ssl_ekey=Hi falta el fitxer de claus privades o bé no existeix
ssl_ecert=Hi falta el fitxer de certificats o bé no existeix
ssl_eca=Hi falta el fitxer de certificat CA o bé no existeix
ssl_eca=Hi falta el fitxer de certificat CA client o bé no existeix
ssl_eregen=Hi falta l'interval de regeneració de paràmetres o bé no és numèric
ssl_epass=No has introduït la contrasenya del fitxer de claus SSL

View File

@@ -80,6 +80,7 @@ save_pfs='$1' ja est
save_create_dir=No es pot crear el directori '$1'
save_eanonuid=L'usuari d'accès anònim és invàlid
save_eanongid=El grup d'accés anònim és invàlid
exports_webnfs=Clients&nbsp;WebNFS
exports_ngroup=Grup de xarxa&nbsp;$1
exports_net=Xarxa&nbsp;$1

View File

@@ -1,4 +1,4 @@
config_dir=Directori de configuració de Fail2Ban,0
client_cmd=Camí complet de l'ordre <tt>fail2ban-client</tt>,0
server_cmd=Camí complet de l'ordre <tt>fail2ban-server</tt>,0
init_script=Nom de l'acció d'engegada,3,No n'hi ha cap de configurat
init_script=Noms de l'acció d'engegada,3,No n'hi ha cap de configurat

View File

@@ -90,6 +90,17 @@ if (-d $jdir) {
foreach my $f (glob("$jdir/*.conf")) {
push(@rv, &parse_config_file($f));
}
# Add jails from .local files that aren't directive-level overrides
my %names = map { $_->{'name'}, $_ } @rv;
foreach my $f (glob("$jdir/*.local")) {
my @lrv = &parse_config_file($f);
foreach my $j (@lrv) {
if (!$names{$j->{'name'}}) {
push(@rv, $j);
}
}
}
}
return @rv;
}

View File

@@ -441,7 +441,7 @@ while(<FDISK>) {
$disk->{'size'} = $disk->{'cylinders'} * $disk->{'cylsize'};
}
elsif (/(\/dev\/\S+?(\d+))[ \t*]+\d+\s+(\d+)\s+(\d+)\s+(\S+)\s+(\S{1,2})\s+(.*)/ || /(\/dev\/\S+?(\d+))[ \t*]+(\d+)\s+(\d+)\s+(\S+)\s+(\S{1,2})\s+(.*)/) {
# Partition within the current disk from fdisk
# Partition within the current disk from fdisk (msdos format)
local $part = { 'number' => $2,
'device' => $1,
'type' => $6,
@@ -456,6 +456,21 @@ while(<FDISK>) {
$disk->{'cylsize'};
push(@{$disk->{'parts'}}, $part);
}
elsif (/(\/dev\/\S+?(\d+))\s+(\d+)\s+(\d+)\s+(\d+)\s+([0-9\.]+[kMGTP])\s+(\S.*)/) {
# Partition within the current disk from fdisk (gpt format)
local $part = { 'number' => $2,
'device' => $1,
'type' => $7,
'start' => $3,
'end' => $4,
'blocks' => $5,
'index' => scalar(@{$disk->{'parts'}}),
'edittype' => 1, };
$part->{'desc'} = &partition_description($part->{'device'});
$part->{'size'} = ($part->{'end'} - $part->{'start'} + 1) *
$disk->{'cylsize'};
push(@{$disk->{'parts'}}, $part);
}
elsif (/^\s*(\d+)\s+(\d+)cyl\s+(\d+)cyl\s+(\d+)cyl\s+(primary|logical|extended)\s*(\S*)\s*(\S*)/) {
# Partition within the current disk from parted (msdos format)
local $part = { 'number' => $1,
@@ -522,7 +537,11 @@ while(<FDISK>) {
push(@{$disk->{'parts'}}, $part);
}
elsif (/Partition\s+Table:\s+(\S+)/) {
# Parted partition table type
# Parted partition table type (from parted)
$disk->{'table'} = $1;
}
elsif (/Disklabel\s+type:\s+(\S+)/) {
# Parted partition table type (from fdisk)
$disk->{'table'} = $1;
}
}

View File

@@ -295,4 +295,5 @@ relabel_ok=Neteja i Reetiqueta
table_msdos=MS-DOS (Format estàndard de particions)
table_gpt=GPT (Per a discs de 2T o més grans)
__norefs=1

View File

@@ -15,4 +15,4 @@ $bookmarks = &read_file_lines($confdir.'/.bookmarks');
push @$bookmarks, $path;
&flush_file_lines("$confdir/.bookmarks");
&redirect("index.cgi?path=$path");
&redirect("index.cgi?path=".&urlize($path));

View File

@@ -43,6 +43,6 @@ else {
print_errors(@errors);
}
else {
&redirect("index.cgi?path=$path");
&redirect("index.cgi?path=".&urlize($path));
}
}

View File

@@ -42,6 +42,6 @@ else {
print_errors(@errors);
}
else {
&redirect("index.cgi?path=$path");
&redirect("index.cgi?path=".&urlize($path));
}
}

View File

@@ -74,5 +74,5 @@ if($in{'applyto'} eq '5') {
if (scalar(@errors) > 0) {
print_errors(@errors);
} else {
&redirect("index.cgi?path=$path");
&redirect("index.cgi?path=".&urlize($path));
}

View File

@@ -7,7 +7,7 @@ require './filemin-lib.pl';
get_paths();
if(!$in{'owner'} or !$in{'group'}) {
&redirect("index.cgi?path=$path");
&redirect("index.cgi?path=".&urlize($path));
}
(my $login, my $pass, my $uid, my $gid) = getpwnam($in{'owner'});
@@ -37,6 +37,6 @@ if (scalar(@errors) > 0) {
if (scalar(@errors) > 0) {
print_errors(@errors);
} else {
&redirect("index.cgi?path=$path");
&redirect("index.cgi?path=".&urlize($path));
}
}

View File

@@ -5,25 +5,33 @@ require './filemin-lib.pl';
get_paths();
if(!$in{'arch'}) {
&redirect("index.cgi?path=$path");
}
&redirect("index.cgi?path=".&urlize($path));
return;
}
my $command;
if($in{'method'} eq 'tar') {
$command = "tar czf ".quotemeta("$cwd/$in{'arch'}.tar.gz").
" -C ".quotemeta($cwd);
} elsif($in{'method'} eq 'zip') {
$command = "cd ".quotemeta($cwd)." && zip -r ".
quotemeta("$cwd/$in{'arch'}.zip");
}
if ($in{'method'} eq 'tar') {
$full = "$cwd/$in{'arch'}.tar.gz";
$command = "tar czf ".quotemeta($full)." -C ".quotemeta($cwd);
}
elsif ($in{'method'} eq 'zip') {
$full = "$cwd/$in{'arch'}.zip";
$command = "cd ".quotemeta($cwd)." && zip -r ".quotemeta($full);
}
else {
&error("Unknown method!");
}
$newfile = !-e $full;
foreach my $name(split(/\0/, $in{'name'}))
{
$name =~ s/$in{'cwd'}\///ig;
$command .= " ".quotemeta($name);
}
foreach my $name (split(/\0/, $in{'name'})) {
$command .= " ".quotemeta($name);
}
system_logged($command);
my @st = stat($cwd);
&system_logged($command);
if ($newfile) {
&set_ownership_permissions($st[4], $st[5], undef, $full);
}
&redirect("index.cgi?path=$path");
&redirect("index.cgi?path=".&urlize($path));

View File

@@ -46,4 +46,4 @@ print &ui_hidden('path', $path);
print &ui_form_end([ [ save, $text{'save'} ] ]);
&ui_print_footer("index.cgi?path=$path", $text{'previous_page'});
&ui_print_footer("index.cgi?path=".&urlize($path), $text{'previous_page'});

View File

@@ -1,2 +1,2 @@
allowed_paths=Verzeichnisse zug&#228;nglich f&#252;r Usermin Benutzer,9,60,5,\t
max=Maximale Gr&#246;&#223;e f&#252;r hochgeladene Dateien,3,Unbegrenzt
allowed_paths=Verzeichnisse auf die Usermin Benutzer zugreifen d&#252;rfen,9,60,5,\t
max=Maximale Gr&#246;&#223;e f&#252;r hochzuladende Dateien,3,Unbegrenzt

View File

@@ -0,0 +1,2 @@
allowed_paths=Verzeichnisse auf die Usermin Benutzer zugreifen dürfen,9,60,5,\t
max=Maximale Größe für hochzuladende Dateien,3,Unbegrenzt

View File

@@ -16,4 +16,4 @@ foreach $name (split(/\0/, $in{'name'})) {
close($fh);
&redirect("index.cgi?path=$path");
&redirect("index.cgi?path=".&urlize($path));

View File

@@ -5,17 +5,25 @@ require './filemin-lib.pl';
get_paths();
if(!$in{'name'}) {
&redirect("index.cgi?path=$path");
}
if (!$in{'name'}) {
&redirect("index.cgi?path=".&urlize($path));
return;
}
my $full = "$cwd/$in{'name'}";
if (-e $full) {
print_errors(&html_escape($in{'name'})." ".$text{'error_exists'});
}
else {
my @st = stat($cwd);
if (open(my $fh, ">$full")) {
close($fh);
&set_ownership_permissions($st[4], $st[5], undef, $full);
&redirect("index.cgi?path=".&urlize($path));
}
else {
print_errors($text{'error_create'}." ".
&html_escape($in{'name'})." : ".$!);
}
}
if (-f "$cwd/$in{'name'}") {
print_errors("$in{'name'} $text{'error_exists'}");
} else {
if (open my $fh, "> $cwd/$in{'name'}") {
close($fh);
&redirect("index.cgi?path=$path");
} else {
print_errors("$in{'name'} - $text{'error_create'} $!");
}
}

View File

@@ -5,16 +5,24 @@ require './filemin-lib.pl';
get_paths();
if(!$in{'name'}) {
&redirect("index.cgi?path=$path");
}
if (!$in{'name'}) {
&redirect("index.cgi?path=".&urlize($path));
return;
}
my $full = "$cwd/$in{'name'}";
if (-e $full) {
print_errors(&html_escape($in{'name'})." ".$text{'error_exists'});
}
else {
my @st = stat($cwd);
if (&make_dir($full, oct(755)) ) {
&set_ownership_permissions($st[4], $st[5], undef, $full);
&redirect("index.cgi?path=".&urlize($path));
}
else {
print_errors($text{'error_create'}." ".
&html_escape($in{'name'})." : ".$!);
}
}
if (-d "$cwd/$in{'name'}") {
print_errors("$in{'name'} $text{'error_exists'}");
} else {
if( mkdir ("$cwd/$in{'name'}", oct(755)) ) {
&redirect("index.cgi?path=$path");
} else {
print_errors("$text{'error_create'} $in{'name'}: $!");
}
}

View File

@@ -16,4 +16,4 @@ foreach $name (split(/\0/, $in{'name'})) {
close($fh);
&redirect("index.cgi?path=$path");
&redirect("index.cgi?path=".&urlize($path));

View File

@@ -16,5 +16,5 @@ foreach $name (split(/\0/, $in{'name'})) {
if (scalar(@errors) > 0) {
print_errors(@errors);
} else {
&redirect("index.cgi?path=$path");
&redirect("index.cgi?path=".&urlize($path));
}

View File

@@ -39,7 +39,7 @@ if ( $current_theme ne 'authentic-theme' ) {
print $head;
print ui_table_start( "$path/$in{'file'}", undef, 1 );
print ui_table_start(&html_escape("$path/$in{'file'}"), undef, 1 );
print &ui_form_start( "save_file.cgi", "post", undef, "data-encoding=\"$encoding_name\"" );
print &ui_hidden( "file", $in{'file'} ), "\n";
@@ -55,4 +55,4 @@ print "<script type='text/javascript'>\$(document).ready( function() { change('"
. $in{'file'}
. "'); });</script>";
&ui_print_footer( "index.cgi?path=$path", $text{'previous_page'} );
&ui_print_footer( "index.cgi?path=".&urlize($path), $text{'previous_page'} );

View File

@@ -10,41 +10,44 @@ get_paths();
$archive_type = mimetype($cwd.'/'.$in{'file'});
if ($archive_type =~ /x-bzip/) {
$cmd = "tar xvjfp ".quotemeta("$cwd/$in{'file'}").
" -C ".quotemeta($cwd);
}
elsif ($archive_type =~ /x-tar|\/gzip|x-xz|x-compressed-tar/) {
$cmd = "tar xfp ".quotemeta("$cwd/$in{'file'}").
" -C ".quotemeta($cwd);
}
elsif ($archive_type =~ /x-7z/) {
$cmd = "7z x ".quotemeta("$cwd/$in{'file'}")." -o" .quotemeta($cwd);
}
elsif ($archive_type =~ /\/zip/) {
$cmd = "unzip ".quotemeta("$cwd/$in{'file'}")." -d ".quotemeta($cwd);
}
elsif ($archive_type =~ /\/x-rar/) {
$cmd = "unrar x -r -y ".quotemeta("$cwd/$in{'file'}").
" ".quotemeta($cwd);
}
elsif ($archive_type =~ /(\/x-rpm|\/x-deb)/) {
my $dir = fileparse( "$cwd/$name", qr/\.[^.]*/ );
my $path = quotemeta("$cwd/$dir");
&make_dir($path, 0755);
if ($archive_type =~ /\/x-rpm/) {
$cmd = "(rpm2cpio ".quotemeta("$cwd/$name").
" | (cd ".quotemeta($path)."; cpio -idmv))";
}
else {
$cmd = "dpkg -x ".quotemeta("$cwd/$name")." ".quotemeta($path);
}
}
else {
&error($text{'extract_etype'});
}
if ( index( $archive_type, "x-bzip" ) != -1 ) {
&backquote_logged( "tar xvjfp " . quotemeta("$cwd/$in{'file'}") . " -C " . quotemeta($cwd) );
&redirect("index.cgi?path=$path");
}
elsif (index( $archive_type, "x-tar" ) != -1
|| index( $archive_type, "/gzip" ) != -1
|| index( $archive_type, "x-xz" ) != -1
|| index( $archive_type, "x-compressed-tar" ) != -1 )
{
&backquote_logged( "tar xfp " . quotemeta("$cwd/$in{'file'}") . " -C " . quotemeta($cwd) );
&redirect("index.cgi?path=$path");
}
elsif ( index( $archive_type, "x-7z" ) != -1 ) {
&backquote_logged( "7z x " . quotemeta("$cwd/$in{'file'}") . " -o" . quotemeta($cwd) );
&redirect("index.cgi?path=$path");
}
elsif ( index( $archive_type, "/zip" ) != -1 ) {
&backquote_logged( "unzip " . quotemeta("$cwd/$in{'file'}") . " -d " . quotemeta($cwd) );
&redirect("index.cgi?path=$path");
}
elsif ( index( $archive_type, "/x-rar" ) != -1 ) {
&backquote_logged( "unrar x -r -y " . quotemeta("$cwd/$in{'file'}") . " " . quotemeta($cwd) );
&redirect("index.cgi?path=$path");
}
elsif ( index( $archive_type, "/x-rpm" ) != -1 || index( $archive_type, "/x-deb" ) != -1 ) {
my $dir = fileparse( "$cwd/$name", qr/\.[^.]*/ );
my $path = quotemeta("$cwd/$dir");
&backquote_logged("mkdir $path");
if ( index( $archive_type, "/x-rpm" ) != -1 ) {
&backquote_logged(
"(rpm2cpio " . quotemeta("$cwd/$name") . " | (cd " . $path . "; cpio -idmv))" );
}
else {
&backquote_logged( "dpkg -x " . quotemeta("$cwd/$name") . " " . $path );
}
}
# Run the extraction command
$out = &backquote_logged("$cmd 2>&1 >/dev/null </dev/null");
if ($?) {
&error(&html_escape($out));
}
&redirect("index.cgi?path=".&urlize($path));

View File

@@ -6,42 +6,55 @@ use lib './lib';
&ReadParse();
get_paths();
if(!$in{'link'}) {
&redirect("index.cgi?path=$path");
}
if (!$in{'link'}) {
&redirect("index.cgi?path=".&urlize($path));
return;
}
my $mode;
my @errors;
my ($host, $port, $page, $ssl) = &parse_http_url($in{'link'});
if (!$host) {
# Not an HTTP or FTP URL
push @errors, $text{'error_invalid_uri'};
} else {
# Looks like a valid URL
my $file = $page;
$file =~ s/^.*\///;
$file ||= "index.html";
if(-e "$cwd/$file") {
push @errors, "<i>$file</i> $text{'file_already_exists'} <i>$path</i>";
} else {
&ui_print_header(undef, "$text{'http_downloading'} $file", "");
if ($ssl == 0 || $ssl == 1) {
# HTTP or HTTPS download
&http_download($host, $port, $page, "$cwd/$file", undef,
\&progress_callback, $ssl,
$in{'username'}, $in{'password'});
} else {
# Actually an FTP download
&ftp_download($host, $page, "$cwd/$file", undef,
\&progress_callback,
$in{'username'}, $in{'password'}, $port);
# Not an HTTP or FTP URL
push(@errors, $text{'error_invalid_uri'});
}
else {
# Looks like a valid URL
my $file = $page;
$file =~ s/^.*\///;
$file ||= "index.html";
$full = "$cwd/$file";
if (-e $full) {
push @errors, "<i>$file</i> $text{'file_already_exists'} <i>$path</i>";
}
else {
&ui_print_header(undef, $text{'http_downloading'}, "");
$progress_callback_url = $in{'link'};
my @st = stat($cwd);
if ($ssl == 0 || $ssl == 1) {
# HTTP or HTTPS download
&http_download($host, $port, $page, $full, undef,
\&progress_callback, $ssl,
$in{'username'}, $in{'password'});
}
else {
# Actually an FTP download
&ftp_download($host, $page, $full, undef,
\&progress_callback,
$in{'username'}, $in{'password'}, $port);
}
&set_ownership_permissions($st[4], $st[5], undef, $full);
@st = stat($cwd);
print &text('http_done', &nice_size($st[7]),
"<tt>".&html_escape($full)."</tt>"),"<p>\n";
&ui_print_footer("index.cgi?path=".&urlize($path),
$text{'previous_page'});
}
}
&ui_print_footer("index.cgi?path=$path", $text{'previous_page'});
}
}
if (scalar(@errors) > 0) {
print_errors(@errors);
}
print_errors(@errors);
}

View File

@@ -20,6 +20,7 @@ name=Nom
type=Tipus
actions=Accions
size=Mida
ownership=Propietari
owner_user=Usuari
owner_group=Grup
permissions=Permisos
@@ -113,6 +114,7 @@ refresh=Refresca
http_downloading=S'està descarregant
uploading=S'està pujant, espera si et plau...
acl_allowed_paths=Permet l'accés als directoris
acl_allowed_paths2=(Per a usuaris no root)
acl_allowed_for_edit=Tipus MIME permesos per a editar amb l'editor integrat
acl_work_as=Accedeix als fitxers com l'usuari Unix
acl_root=Root (compte amb els usuaris no fiables!)

View File

@@ -1,150 +1,152 @@
about_to_delete=Sie sind dabei folgende Elemente zu l&#246;schen:
acl_allowed_for_edit=Mimetypen erlaubt f&#252;r Editierungen vom eingebautem Editor
acl_allowed_paths=Erlaube Zugriff auf Verzeichnisse
acl_allowed_paths2=(F&#252;r Nicht-Root-Benutzer)
acl_bytes=bytes
about_to_delete=Sie sind dabei, folgendes zu l&#246;schen:
acl_allowed_for_edit=Mimetypen erlaubt zum Editieren von engebautenEditor
acl_allowed_paths=Zugang zu Verzeichnissen erlauben
acl_allowed_paths2=(Nur f&#252;r root-Benutzer
acl_bytes=Bytes
acl_epath=Pfad $1 existiert nicht
acl_euser=Ausgew&#228;hter Unix Benutzer existiert nicht!
acl_max=Die maximale Gr&#246;&#223;e f&#252;r hochgeladene Dateien
acl_root=Root (gew&#228;hre mit Vorsicht an nicht vertrauensw&#252;rdige Benutzer!)
acl_same=Gleiche wie Webmin Login
acl_euser=Ausgew&#228;hlter System-Benutzer existiert nicht!
acl_max=Maximale Gr&#246;&#223;e f&#252;r hochgeladene Dateien
acl_root=Root (nicht vertrauensw&#252;rdigen Benutzern mit Vorsicht zu gew&#228;hren!)
acl_same=Wie bei Webmin-Login
acl_unlimited=Unlimitiert
acl_user=Spezifischer Unix Benutzer
acl_work_as=Erlaube Dateien als Unix Benutzer
acl_user=Spezifischer Syetm-Benutzer
acl_work_as=Auf Dateien als System-Benutzer zugreifen
actions=Aktionen
archive_name=Archiv-Name
are_you_sure=Sind Sie sich sicher?
bookmark_folder=Lesezeichen des aktuellen Verzeichnisses setzen
browse_for_upload=Nach Upload suchen
archive_name=Archiv Name
are_you_sure=Sind Sie sicher?
bookmark_folder=Setze Lesezeichen f&#252;r aktuellen Ordner
browse_for_upload=Durchsuchen zum Hochladen
chmod_additional=Zus&#228;tzlich
chmod_all=Alle (rekursiv)
chmod_apply_to=Anwenden an
chmod_dir_and_its_files=Ausgew&#228;hlte Dateien und Verzeichnisse und Dateien in ausgew&#228;hlten Verzeichnissen
chmod_apply_to=Anwenden auf
chmod_dir_and_its_files=Ausgew&#228;hlte Dateien und Verzeichnisse, sowie Dateien in ausgew&#228;hlten Verzeichnissen
chmod_dir_and_subs=Ausgew&#228;hlte Verzeichnisse und Unterverzeichnisse
chmod_dir_files_and_subs_files=Ausgew&#228;hlte Dateien und Dateien unter ausgew&#228;hlten Verzeichnissen und Unterverzeichnissen
chmod_dir_files_and_subs_files=Ausgew&#228;hlte Dateien und Dateien in ausgew&#228;hlten Verzeichnissen und Unterverzeichnissen
chmod_dir_only=Nur ausgew&#228;hlte Verzeichnisse und Dateien
chmod_execute=Ausf&#252;hren
chmod_group=Gruppe
chmod_others=Andere
chmod_owner=Besitzer
chmod_owner=Benutzer
chmod_read=Lesen
chmod_selected=Chmod w&#228;hlen
chmod_selected=Rechte der ausgew&#228;hlten Elemente &#228;ndern
chmod_setgid=Setgid
chmod_sticky=Sticky bit
chmod_write=Schreiben
chown_selected=Chmod w&#228;hlen
compress_selected=Komprimiere ausgew&#228;hlte
config_bookmarks=Bookmarks
config_columns_to_display=Spalten zu angezeigen
config_disable_pagination=Deaktiviert Paginierung (nur f&#252;r Authentic Theme-Benutzer)
config_per_page=Artikel pro Seite zum anzeigen (nur f&#252;r alte Themes)
config_toolbar_style=Setzt Symbolleisten-Stil auf Men&#252;-&#228;hnliche Ansicht,<br>mit Dropdowns ... und Cookies (nur f&#252;r Authentic Theme Benutzer)
copy_selected=Kopiere Ausgew&#228;hltes
count_uploads=Datei(en) ausgew&#228;hlt zum hochladen
create=Erstellen
create_file=Erstelle Datei
create_folder=Erstelle Ordner
cut_selected=Schneide Ausgew&#228;hltes aus
delete=L&#246;sche
chown_selected=Besitzer der ausgegew&#228;hlten Elemente &#228;ndern
compress_selected=Komprimiere ausgew&#228;hlte Elemente
config_bookmarks=Lesezeichen
config_columns_to_display=Anzuzeigende Spalten
config_disable_pagination=Seitennummerierung deaktivieren (nur f&#252;r Authentic Theme-Benutzer)
config_per_page=Eintr&#228;ge zum Anzeigen pro Seite (nur f&#252;r alte Themes)
config_toolbar_style=Setze 'toolbar style' f&#252;r Men&#252;,<br>mit Dropdowns ... und Cookies (nur f&#252;r Authentic Theme-Benutzer)
copy_selected=Ausgew&#228;hlte Elemente kopieren
count_uploads=Datei(en) ausgew&#228;hlt zum Hochladen
create=Erstelle
create_file=Datei erstellen
create_folder=Ordner erstellen
cut_selected=Ausgew&#228;hlte Elemente ausschneiden
delete=L&#246;schen
dialog_cancel=Abbrechen
dialog_change=&#196;ndern
dialog_change=&#228;ndere
dialog_compress=Komprimieren
dialog_download=Download
dialog_file_url=URL der Datei zum Download
dialog_download=Herunterladen
dialog_file_url=URL der Datei zum Herunterladen
dialog_ok=OK
dialog_recursive=Rekursiv
dialog_user_name=Entferne Server Benutzername (falls einer ben&#246;tigt wird)
dialog_user_pass=Entferne Server Passwort (falls eins ben&#246;tigt wird)
edit=Editieren
edit_file=Editiere Datei
error_archive_type_not_supported=Archivtyp wird bisher nicht unterst&#252;tzt
error_chmod=Fehlgeschlagen Rechte zu &#228;ndern
error_chown=Fehlgeschlagen Eigent&#252;mer zu wechseln
error_copy=Kopieren fehlgeschlagen mit Fehler:
error_create=fehlgeschlagen zu erstellen:
error_creating_conf=Fehler beim Erstellen des Konfigurations-Verzeichnis
error_cut=Verschieben fehlgeschlagen mit Fehler:
error_delete=nicht m&#246;glich zu l&#246;schen
error_exists=existiert bereits, &#252;berspringe
error_group_not_found=Gruppe existiert nicht auf diesem System
error_invalid_uri=Fehler: keine g&#252;ltige URL zur Verf&#252;gung gestellt
error_load_template=Fehler laden Template Datei
error_numeric=Muss numerisch sein!
error_opendir=Fehler beim &#214;ffnen des Verzeichnis
error_opening_file_for_writing=Kann Datei nicht zum schreiben &#246;ffnen
error_pasting_nonsence=Einf&#252;gen in das selbe Verzeichnis macht keinen Sinn
error_rename=Fehlgeschlagen das Umbenennen
dialog_user_name=Benutzername f&#252;r entfernten Server (falls erforderlich)
dialog_user_pass=Passwort f&#252;r entfernten Server (falls erforderlich)
edit=Bearbeiten
edit_file=Datei bearbeiten
error_archive_type_not_supported=Archivtyp nicht unterst&#252;tzt
error_chmod=Rechte&#228;nderung fehlgeschlagen
error_chown=Benutzer &#228;ndern fehlgeschlagen
error_copy=kopieren fehlgeschlagen mit Fehler:
error_create=erstellen fehlgeschlagen:
error_creating_conf=Fehler beim Erstellen des Konfigurationsverzeichnisses
error_cut=verschieben fehlgeschlagen mit Fehler:
error_delete=l&#246;schen nicht m&#246;glich
error_exists=existiert bereits, abgebrochen
error_group_not_found=Gruppe nicht im System gefunden
error_invalid_uri=Fehler: Keine g&#252;ltige URL angegeben!!!
error_load_template=Fehler beim Laden der Template-Datei
error_numeric=muss ein Zahlenwert sein!
error_opendir=Fehler beim &#246;ffnen des Verzeichnisses
error_opening_file_for_writing=Datei kann nicht zum schreiben ge&#246;fnet werden:
error_pasting_nonsence=Kopieren in das selbe Verzeichnis macht keinen Sinn
error_rename=umbenennen fehlgeschlagen
error_saving_file=Fehler beim Speichern der Datei
error_title=Fehler!!!
error_upload_emax=Hochzuladende Datei ist gr&#246;&#223;er als das Limit von $1
error_user_not_found=Benutzer nicht auf diesem System gefunden
error_writing_file=Fehler beim Schreiben von Datei:
errors_occured=Folgende Fehler traten bei der Ausf&#252;hrung auf
extract_archive=Archive extrahieren
error_upload_emax=Die hochgeladene Datei ist gr&#246;&#223;er als die Grenze von $1
error_user_not_found=Benutzer nicht im System gefunden
error_writing_file=Fehler beim Schreiben der Datei:
errors_occured=Folgende Fehler sind beim Ausf&#252;hren der Aktion aufgetreten
extract_archive=Entpacke Archiv
extract_etype=Nicht unterst&#252;tzter Archivdateityp
file_already_exists=existiert bereits in
files_ready_for_upload=Zeige ausgew&#228;hlte Dateien an
get_from_url=Erhalte von URL
goto_folder=Gehe zu beinhaltetes Verzeichnis
group_name=Gruppen-Name
hint_chmod=&#196;nder Berechtigungen f&#252;r ausgew&#228;hlte Dateien und Verzeichnisse
hint_chown=&#196;ndere den Besitzer von ausgew&#228;hlten Dateien und Verzeichnissen
hint_compress=Komprimiere ausgew&#228;hlte Dateien und Verzeichnisse in tar.gz-Archiv
hint_copy=Kopiere ausgew&#228;hlte Dateien und Verzeichnisse zum Puffer
hint_create_file=Erstelle neue Datei im aktuellem Pfad
hint_create_folder=Erzeuge neues Verzeichnis im aktuellem Pfad
hint_cut=Schneide ausgew&#228;hlte Dateien und Verzeichnisse zum Puffer aus
hint_from_url=Erhalte Datei von entfernter URL
hint_paste=F&#252;ge Dateien und Verzeichnisse vom Puffer ein
hint_remove=Entferne ausgew&#228;hlte Dateien und Verzeichnisse
hint_upload=Hochladen von Dateien in das aktuelle Verzeichnis
http_downloading=Herunterladen
files_ready_for_upload=Ausgew&#228;hlte Dateien:
get_from_url=Herunterladen von URL
goto_folder=Gehe zum enthaltenden Ordner
group_name=Gruppenname
hint_chmod=Rechte f&#252;r ausgew&#228;hlte Dateien und Ordner &#228;ndern
hint_chown=Benutzer f&#252;r die ausgew&#228;hlten Dateien und Ordner &#228;ndern
hint_compress=Ausgew&#228;hlte Dateien und Ordner zu einem tar.gz Archiv komprimieren
hint_copy=Ausgew&#228;hlte Dateien und Ordner in den Zwischenspeicher kopieren
hint_create_file=Neue Datei im aktuellen Verzeichnis erstellen
hint_create_folder=Neuen Ordner im aktuellen Verzeichnis erstellen
hint_cut=Ausgew&#228;hlte Dateien und Ordner in den Zwischenspeicher ausschneiden
hint_from_url=Datei von entfernter URL herunterladen
hint_paste=F&#252;ge Dateien und Ordner aus dem Zwischenspeicher in das aktuelle Verzeichnis ein
hint_remove=Ausgew&#228;hlte Dateien und Ordner l&#246;schen
hint_upload=Dateien in das aktuelle Verzeichnis hochladen
http_done=$1 von $2 heruntergeladen.
http_downloading=Wird heruntergeladen
index=Index
info_total1=Total: $1 Datei und $2 Verzeichnis
info_total2=Total: $1 Dateien und $2 Verzeichnis
info_total3=Total: $1 Datei und $2 Verzeichnisse
info_total4=Total: $1 Dateien und $2 Verzeichnisse
info_total1=Gesamt: $1 Datei und $2 Verzeichnis
info_total2=Gesamt: $1 Dateien und $2 Verzeichnis
info_total3=Gesamt: $1 Datei und $2 Verzeichnisse
info_total4=Gesamt: $1 Dateien und $2 Verzeichnisse
invert_selection=Auswahl umkehren
last_mod_time=Zeitpunkt der letzten &#196;nderung
menu_bookmarks=Bookmarks
menu_edit=Editieren
last_mod_time=Letzte &#228;nderung
menu_bookmarks=Lesezeichen
menu_edit=Bearbeiten
menu_file=Datei
menu_tools=Tools
module_config=Modulkonfiguration
menu_tools=Werkzeuge
module_config=Modul-Konfiguration
name=Name
new_file_name=Neuer Datei-Name
new_folder_name=Neuer Ordner-Name
new_file_name=Neuer Dateiname
new_folder_name=Neuer Ordnername
new_name=Neuer Name
no_bookmarks=Keine Bookmarks bisher
notallowed=Sie sind nicht berechtigt auf $1 zuzugreifen. Erlaubte Verzeichnisse sind : $2
no_bookmarks=Noch keine Lesezeichen
notallowed=Sie haben keine Erlaubnis, auf $1 zuzugreifen. Die erlaubten Verzeichnisse sind: $2
nothing_selected=Nichts ausgew&#228;hlt
owner_group=Eigent&#252;mer-Gruppe
owner_user=Eigent&#252;mer-Benutzer
ownership=Eigent&#252;mer
owner_group=Gruppe
owner_user=Benutzer
ownership=Besitzer
paste=Einf&#252;gen
permissions=Rechte
previous_page=vorherige Seite
provide_file_name=Vergebe Dateiname
provide_folder_name=Vergebe Verzeichnisname
provide_group_name=Vergebe Gruppenname
provide_new_file_name=Vergebe neuen Dateiname
provide_search_query=Gebe Suchanfrage
provide_url=Gebe URL der entfernten Datei an
provide_user_name=Provider Benutzername
refresh=Aktualisieren
remove_selected=L&#246;sche Ausgew&#228;hltes
previous_page=vorherigen Seite
provide_file_name=Dateinamen angeben
provide_folder_name=Ordnernamen angeben
provide_group_name=Gruppennamen angeben
provide_new_file_name=Neuen Dateinamen angeben
provide_search_query=Suchanfrage angeben
provide_url=URL der entfernten Datei angeben
provide_user_name=Benutzernamen angeben
refresh=Neu laden
remove_selected=Ausgew&#228;hlte Elemente l&#246;schen
rename=Umbenennen
save=Speichern
save_close=Speichern und schlie&#223;en
save_file=Speichere Datei
save_file=Datei speichern
search=Suche
search_go=Finden
search_insensitive=Gro&#223;- und Kleinschreibung Suche
search_go=Finden!
search_insensitive=Gro&#223;- und Kleinschreibung bei Suche beachten
search_label=Suchanfrage
search_results=Suchresultate f&#252;r
select_all=Alle w&#228;hlen
search_results=Suchergebnisse f&#252;r
select_all=Alle ausw&#228;hlen
size=Gr&#246;&#223;e
type=Typ
upload_files=Dateien hochladen
uploading=Hochladen, bitte warten...
uploading=Hochladen, bitte warten ...
user_name=Benutzername
warning_title=Warnung!!!

View File

@@ -3,15 +3,15 @@ error_opendir=Fehler beim Öffnen des Verzeichnisses
error_creating_conf=Fehler beim Erstellen des Konfigurationsverzeichnisses
select_all=Alle auswählen
invert_selection=Auswahl umkehren
copy_selected=Ausgewählte Objekte kopieren
cut_selected=Ausgewählte Objekte ausschneiden
copy_selected=Ausgewählte Elemente kopieren
cut_selected=Ausgewählte Elemente ausschneiden
paste=Einfügen
create_folder=Ordner erstellen
create_file=Datei erstellen
compress_selected=Komprimiere gewählte Objekte
chmod_selected=Chmod gewählte Objekte
chown_selected=Chown gewählte Objekte
remove_selected=Lösche gewählte Objekte
compress_selected=Komprimiere ausgewählte Elemente
chmod_selected=Rechte der ausgewählten Elemente ändern
chown_selected=Besitzer der ausgegewählten Elemente ändern
remove_selected=Ausgewählte Elemente löschen
browse_for_upload=Durchsuchen zum Hochladen
upload_files=Dateien hochladen
get_from_url=Herunterladen von URL
@@ -26,8 +26,8 @@ permissions=Rechte
last_mod_time=Letzte Änderung
rename=Umbenennen
edit=Bearbeiten
extract_archive=Extrahiere Archiv
edit_file=Bearbeite Datei
extract_archive=Entpacke Archiv
edit_file=Datei bearbeiten
save=Speichern
save_close=Speichern und schließen
delete=Löschen
@@ -44,7 +44,7 @@ new_file_name=Neuer Dateiname
new_name=Neuer Name
dialog_ok=OK
dialog_cancel=Abbrechen
archive_name=Archivname
archive_name=Archiv Name
dialog_compress=Komprimieren
about_to_delete=Sie sind dabei, folgendes zu löschen:
are_you_sure=Sind Sie sicher?
@@ -62,7 +62,7 @@ chmod_setgid=Setgid
chmod_additional=Zusätzlich
chmod_apply_to=Anwenden auf
chmod_dir_only=Nur ausgewählte Verzeichnisse und Dateien
chmod_dir_and_its_files=Ausgewählte Dateien und Verzeichnisse und Dateien in ausgewählten Verzeichnissen
chmod_dir_and_its_files=Ausgewählte Dateien und Verzeichnisse, sowie Dateien in ausgewählten Verzeichnissen
chmod_all=Alle (rekursiv)
chmod_dir_files_and_subs_files=Ausgewählte Dateien und Dateien in ausgewählten Verzeichnissen und Unterverzeichnissen
chmod_dir_and_subs=Ausgewählte Verzeichnisse und Unterverzeichnisse
@@ -71,36 +71,38 @@ dialog_user_name=Benutzername für entfernten Server (falls erforderlich)
dialog_user_pass=Passwort für entfernten Server (falls erforderlich)
dialog_download=Herunterladen
error_invalid_uri=Fehler: Keine gültige URL angegeben!!!
file_already_exists=existiert schon in
file_already_exists=existiert bereits in
files_ready_for_upload=Ausgewählte Dateien:
errors_occured=Folgende Fehler sind beim Ausführen der Operation aufgetreten
errors_occured=Folgende Fehler sind beim Ausführen der Aktion aufgetreten
error_pasting_nonsence=Kopieren in das selbe Verzeichnis macht keinen Sinn
error_exists=existiert bereits, abgebrochen
error_copy=kopieren fehlgeschlagen mit Fehler:
error_cut=verschieben fehlgeschlagen mit Fehler:
error_create=gescheitert zu erstellen:
error_rename=gescheitert umzubenennen
error_chmod=Rechteänderung gescheitert
error_chown=Gescheitert den Benutzer zu ändern
error_create=erstellen fehlgeschlagen:
error_rename=umbenennen fehlgeschlagen
error_chmod=Rechteänderung fehlgeschlagen
error_chown=Benutzer ändern fehlgeschlagen
error_delete=löschen nicht möglich
error_user_not_found=Benutzer nicht gefunden in diesen System
error_group_not_found=Gruppe existiert nicht in diesen System
error_archive_type_not_supported= Archivtyp noch nicht unterstützt
error_opening_file_for_writing=Konnte Datei nicht öffnen zum Schreiben:
error_user_not_found=Benutzer nicht im System gefunden
error_group_not_found=Gruppe nicht im System gefunden
error_archive_type_not_supported= Archivtyp nicht unterstützt
error_opening_file_for_writing=Datei kann nicht zum schreiben geöfnet werden:
error_writing_file=Fehler beim Schreiben der Datei:
error_numeric=muss nummerisch sein!
error_numeric=muss ein Zahlenwert sein!
error_saving_file=Fehler beim Speichern der Datei
hint_copy=Ausgewählte Dateien und Ordner in den Puffer kopieren
hint_cut=Ausgewählte Dateien und Ordner in den Puffer ausschneiden
hint_paste=Füge Dateien und Ordner aus dem Puffer in das aktuelle Verzeichnis ein
hint_create_folder=Erstelle neuen Ordner im aktuellen Verzeichnis
hint_create_file=Erstelle neue Datei im aktuellen Verzeichnis
hint_compress=Komprimiere ausgewählte Dateien und Ordner zu einem tar.gz Archiv
hint_chmod=Ändere die Rechte für die ausgewählten Dateien und Ordner
hint_chown=Ändere den Benutzer für die ausgewählten Dateien und Ordner
hint_remove=Lösche ausgewählte Dateien und Ordner
hint_upload=Dateien hochladen in das aktuelle Verzeichnis
hint_from_url=Datei herunterladen von entfernter URL
hint_copy=Ausgewählte Dateien und Ordner in den Zwischenspeicher kopieren
hint_cut=Ausgewählte Dateien und Ordner in den Zwischenspeicher ausschneiden
hint_paste=Füge Dateien und Ordner aus dem Zwischenspeicher in das aktuelle Verzeichnis ein
hint_create_folder=Neuen Ordner im aktuellen Verzeichnis erstellen
hint_create_file=Neue Datei im aktuellen Verzeichnis erstellen
hint_compress=Ausgewählte Dateien und Ordner zu einem tar.gz Archiv komprimieren
hint_chmod=Rechte für ausgewählte Dateien und Ordner ändern
hint_chown=Benutzer für die ausgewählten Dateien und Ordner ändern
hint_remove=Ausgewählte Dateien und Ordner löschen
hint_upload=Dateien in das aktuelle Verzeichnis hochladen
hint_from_url=Datei von entfernter URL herunterladen
provide_folder_name=Ordnernamen angeben
provide_file_name=Dateinamen angeben
provide_user_name=Benutzernamen angeben
@@ -110,29 +112,29 @@ provide_new_file_name=Neuen Dateinamen angeben
provide_search_query=Suchanfrage angeben
dialog_recursive=Rekursiv
refresh=Neu laden
http_downloading=Es wird heruntergeladen
http_downloading=Wird heruntergeladen
uploading=Hochladen, bitte warten ...
acl_allowed_paths=Erlaube Zugang zu Verzeichnissen
acl_work_as=Zugriff auf Dateien als Unix-Benutzer
acl_allowed_paths=Zugang zu Verzeichnissen erlauben
acl_work_as=Auf Dateien als System-Benutzer zugreifen
acl_root=Root (nicht vertrauenswürdigen Benutzern mit Vorsicht zu gewähren!)
acl_same=Wie bei Webmin-Login
acl_user=Spezifischer Unix-Benutzer
acl_euser=Ausgewählter Unix-Benutzer existiert nicht!
acl_user=Spezifischer Syetm-Benutzer
acl_euser=Ausgewählter System-Benutzer existiert nicht!
acl_epath=Pfad $1 existiert nicht
search=Suche
search_label=Suchanfrage
search_go=Shake it, baby!
search_go=Finden!
search_results=Suchergebnisse für
goto_folder=Gehe zum enthaltenden Ordner
module_config=Modul-Konfiguration
config_columns_to_display=Spalten zum Anzeigen
config_columns_to_display=Anzuzeigende Spalten
config_per_page=Einträge zum Anzeigen pro Seite (nur für alte Themes)
config_disable_pagination=Seitennummerierung deaktivieren (nur für Authentic Theme-Benutzer)
config_toolbar_style=Setze 'toolbar style' für Menü,<br>mit Dropdowns ... und Cookies (nur für Authentic Theme-Benutzer)
config_bookmarks=Lesezeichen
no_bookmarks=Noch keine Lesezeichen
menu_file=Datei
menu_edit=Bearbeite
menu_edit=Bearbeiten
menu_tools=Werkzeuge
menu_bookmarks=Lesezeichen
notallowed=Sie haben keine Erlaubnis, auf $1 zuzugreifen. Die erlaubten Verzeichnisse sind: $2
@@ -141,14 +143,14 @@ notallowed=Sie haben keine Erlaubnis, auf $1 zuzugreifen. Die erlaubten Verzeich
chcon_selected=Chcon Selected
chattr_selected=Chattr Selected
selinux=Security context
attributes=Attributes
selinux=Sicherheits Kontext
attributes=Eigenschaften
context_label=Context to apply
context_label_error=Security context can not be blank
context_label_error_proc=Failed to change security context
attr_label=Attributes to apply
attr_label_error=Attributes must be specified
attr_label_error_proc=Failed to change attributes
context_label=Anzuwendender Kontext
context_label_error=Sicherheits Kontext kann nicht leer sein
context_label_error_proc=Änderung des Sicherheits Kontext fehlgeschlagen
attr_label=Anzuwendende Eigenschaften
attr_label_error=Eigenschaften erforderlich
attr_label_error_proc=Änderung der Eigenschaften fehlgeschlagen
ownership=Ownership
ownership=Besitzer

View File

@@ -11,6 +11,8 @@ create_file=Create File
compress_selected=Compress Selected
chmod_selected=Chmod Selected
chown_selected=Chown Selected
chcon_selected=Chcon Selected
chattr_selected=Chattr Selected
remove_selected=Remove Selected
browse_for_upload=Browse for Upload
upload_files=Upload Files
@@ -20,11 +22,12 @@ name=Name
type=Type
actions=Actions
size=Size
ownership=Owner
owner_user=Owner User
owner_group=Owner Group
owner_user=Owner user
owner_group=Owner group
permissions=Permissions
last_mod_time=Last Modification Time
selinux=Security context
attributes=Attributes
last_mod_time=Last modification time
rename=Rename
edit=Edit
extract_archive=Extract Archive
@@ -35,8 +38,8 @@ delete=Delete
save_file=Save file
previous_page=previous page
count_uploads=file(s) selected for upload
error_title=Error!!!
warning_title=Warning!!!
error_title=Error!
warning_title=Warning!
nothing_selected=Nothing selected
error_load_template=Error loading template file
create=Create
@@ -49,6 +52,12 @@ archive_name=Archive name
dialog_compress=Compress
about_to_delete=You're about to delete following items:
are_you_sure=Are you sure?
context_label=Context to apply
context_label_error=Security context can not be blank
context_label_error_proc=Failed to change security context
attr_label=Attributes to apply
attr_label_error=Attributes must be specified
attr_label_error_proc=Failed to change attributes
user_name=User name
group_name=Group name
dialog_change=Change
@@ -71,10 +80,10 @@ dialog_file_url=URL of file to download
dialog_user_name=Remote server username(if any required)
dialog_user_pass=Remote server password(if any required)
dialog_download=Download
error_invalid_uri=Error: No valid URL supplied!!!
error_invalid_uri=Error: No valid URL supplied!
file_already_exists=already exists in
files_ready_for_upload=View selected files
errors_occured=Following errors occurred while performing operation
errors_occured=Following errors occured while performing operation
error_pasting_nonsence=Pasting to the same directory makes no sense
error_exists=already exists, skipping
error_copy=copying failed with error:
@@ -88,7 +97,7 @@ error_user_not_found=user not found on this system
error_group_not_found=group does not exist on this system
error_archive_type_not_supported= archive type not supported yet
error_opening_file_for_writing=Could not open file for writing:
error_writing_file=Error writing file:
error_writing_file=Error writing file:
error_numeric=must be numeric!
error_saving_file=Error saving file
hint_copy=Copy selected files and directories to buffer
@@ -112,6 +121,7 @@ provide_search_query=Provide search query
dialog_recursive=Recursive
refresh=Refresh
http_downloading=Downloading
http_done=Downloaded $1 to $2.
uploading=Uploading, please wait...
acl_allowed_paths=Allow access to directories
acl_allowed_paths2=(For non-root users)
@@ -144,8 +154,11 @@ menu_tools=Tools
menu_bookmarks=Bookmarks
notallowed=You are not allowed to access $1. The allowed directories are : $2
error_upload_emax=Uploaded file is larger than the limit of $1
extract_etype=Unsupported archive file type
info_total1=Total: $1 file and $2 directory
info_total2=Total: $1 files and $2 directory
info_total3=Total: $1 file and $2 directories
info_total4=Total: $1 files and $2 directories
ownership=Ownership

View File

@@ -6,3 +6,7 @@ desc_no=Filbehandling
desc=File Manager
desc_ca=Gestor de Fitxers
longdesc_ca=Gestor de fitxers lleuger i ràpid escrit en perl.
desc_de=Datei Manager
longdesc=Schneller, kleiner Datei Manager geschrieben in Perl.
desc_de.UTF-8=Datei Manager
longdesc_de.UTF-8=Schneller, kleiner Datei Manager geschrieben in Perl.

View File

@@ -40,6 +40,6 @@ if ($cwd eq $from) {
if (scalar(@errors) > 0) {
print_errors(@errors);
} else {
&redirect("index.cgi?path=$path");
&redirect("index.cgi?path=".&urlize($path));
}
}

View File

@@ -4,7 +4,7 @@ require './filemin-lib.pl';
&ReadParse();
if(!$in{'name'}) {
&redirect("index.cgi?path=$path");
&redirect("index.cgi?path=".&urlize($path));
}
get_paths();
@@ -12,7 +12,7 @@ if (-e "$cwd/$in{'name'}") {
print_errors("$in{'name'} $text{'error_exists'}");
} else {
if(&rename_file($cwd.'/'.$in{'file'}, $cwd.'/'.$in{'name'})) {
&redirect("index.cgi?path=$path");
&redirect("index.cgi?path=".&urlize($path));
} else {
print_errors("$text{'error_rename'} $in{'file'}: $!");
}

View File

@@ -23,4 +23,4 @@ open(BOOK, ">", "$confdir/.bookmarks") or $info = $!;
print BOOK $bookmarks;
close BOOK;
&redirect("index.cgi?path=$path");
&redirect("index.cgi?path=".&urlize($path));

View File

@@ -16,21 +16,13 @@ $data =~ s/\r\n/\n/g;
if ( $in{'encoding'} && lc( $in{'encoding'} ) ne "utf-8" ) {
eval { $data = Encode::encode( $in{'encoding'}, Encode::decode( 'utf-8', $data ) ) };
}
open(SAVE, ">", $file) or push @errors, "$text{'error_saving_file'} - $!";
print SAVE $data;
close SAVE;
&open_tempfile(SAVE, ">$file") || &error("$text{'error_saving_file'} : $!");
&print_tempfile(SAVE, $data);
&close_tempfile(SAVE);
if (scalar(@errors) > 0) {
&ui_print_header(undef, $module_info{'name'}, "");
print $text{'errors_occured'};
print "<ul>";
foreach $error(@errors) {
print("<li>$error</li>");
}
print "<ul>";
&ui_print_footer("javascript:history.back();", $text{'previous_page'});
} elsif ($in{'save_close'}) {
&redirect("index.cgi?path=$path");
if ($in{'save_close'}) {
&redirect("index.cgi?path=".&urlize($path));
} else {
&redirect("edit_file.cgi?path=$path&file=$in{'file'}");
&redirect("edit_file.cgi?path=".&urlize($path).
"&file=".&urlize($in{'file'}));
}

View File

@@ -25,4 +25,4 @@ if($in{'caseins'}) {
print_interface();
&ui_print_footer("index.cgi?path=$path", $text{'previous_page'});
&ui_print_footer("index.cgi?path=".&urize($path), $text{'previous_page'});

View File

@@ -17,93 +17,105 @@ $cbfunc = \&read_parse_mime_callback;
$ENV{'CONTENT_TYPE'} =~ /boundary=(.*)$/ || &error($text{'readparse_enc'});
$boundary = $1;
# Comment right now
#if ($ENV{'CONTENT_LENGTH'} && $max && $ENV{'CONTENT_LENGTH'} > $max) {
# &error($err);
#}
# Initialize progress tracker
&$cbfunc(0, $ENV{'CONTENT_LENGTH'}, undef, $in{'id'});
#Read the data
MAINLOOP: while(index($line,"$boundary--") == -1) {
#reset vars on each loop
$file = undef;
$rest = undef;
$prevline = undef;
$header = undef;
$line = <STDIN>;
$got += length($line);
if ($upload_max && $got > $upload_max) {
&error(&text('error_upload_emax', &nice_size($upload_max)));
}
# Reset vars on each loop
$file = undef;
$rest = undef;
$prevline = undef;
$header = undef;
$line = <STDIN>;
$got += length($line);
if ($upload_max && $got > $upload_max) {
&error(&text('error_upload_emax', &nice_size($upload_max)));
}
&$cbfunc($got, $ENV{'CONTENT_LENGTH'}, undef, $in{'id'});
if ($line =~ /(\S+):\s*form-data(.*)$/) {
$rest = $2; # We found form data definition, let`s check it
} else {
next;
}
# Check if current form data part is file
while ($rest =~ /([a-zA-Z]*)=\"([^\"]*)\"(.*)/) {
if ($1 eq 'filename') {
$file = $2;
}
$rest = $3;
}
if ($line =~ /(\S+):\s*form-data(.*)$/) {
$rest = $2; # We found form data definition, let`s check it
}
else {
next;
}
# Check if current form data part is file
while ($rest =~ /([a-zA-Z]*)=\"([^\"]*)\"(.*)/) {
if ($1 eq 'filename') {
$file = $2;
}
$rest = $3;
}
if(defined($file)){
# OK, we have a file, let`s save it
if (!open(OUTFILE, ">$cwd/$file")) {
push @errors, "$text{'error_opening_file_for_writing'} $path/$file - $!"; #die "Can't open $cwd/$file for writing - $!";
next;
} else {
binmode(OUTFILE);
# Skip "content-type" as we work in binmode anyway and skip empty line
<STDIN>; <STDIN>;
# Read all lines until next boundary or form data end
while(1) {
$line = <STDIN>;
if (!defined($line)) {
push @errors, "Unexpected end of input";
last MAINLOOP;
}
# Inform progress tracker about our actions
$got += length($line);
&$cbfunc($got, $ENV{'CONTENT_LENGTH'}, $file, $in{'id'});
# Some brainf###ing to deal with last CRLF
if(index($line,"$boundary") != -1 ||
index($line,"$boundary--") != -1) {
chop($prevline);
chop($prevline);
if (!print OUTFILE $prevline) {
push @errors, "text{'error_writing_file'} $path/$file";
last MAINLOOP;
}
last;
} else {
if (!print OUTFILE $prevline) {
push @errors, "text{'error_writing_file'} $path/$file";
last MAINLOOP;
}
$prevline = $line;
}
}
# File saved, let`s go further
close(OUTFILE);
}
} else {
# Just skip everything until next boundary or form data end
while(index($line, "$boundary") == -1 ||
index($line, "$boundary--") == -1) {
$line = <STDIN>;
}
}
}
if (defined($file)) {
# OK, we have a file, let`s save it
my $full = "$cwd/$file";
my $newfile = !-e $full;
my @st = stat($cwd);
if (!open(OUTFILE, ">$full")) {
push @errors, "$text{'error_opening_file_for_writing'} $path/$file - $!";
next;
}
else {
binmode(OUTFILE);
if ($newfile) {
# Copy ownership from parent dir
&set_ownership_permissions($st[4], $st[5], undef,$full);
}
# Skip "content-type" as we work in binmode anyway and
# skip empty line
<STDIN>;
<STDIN>;
# Read all lines until next boundary or form data end
while(1) {
$line = <STDIN>;
if (!defined($line)) {
push @errors, "Unexpected end of input";
last MAINLOOP;
}
# Inform progress tracker about our actions
$got += length($line);
&$cbfunc($got, $ENV{'CONTENT_LENGTH'}, $file, $in{'id'});
# Some brainf###ing to deal with last CRLF
if (index($line,"$boundary") != -1 ||
index($line,"$boundary--") != -1) {
chop($prevline);
chop($prevline);
if (!print OUTFILE $prevline) {
push @errors, "text{'error_writing_file'} $path/$file";
last MAINLOOP;
}
last;
}
else {
if (!print OUTFILE $prevline) {
push @errors, "text{'error_writing_file'} $path/$file";
last MAINLOOP;
}
$prevline = $line;
}
}
# File saved, let`s go further
close(OUTFILE);
}
}
else {
# Just skip everything until next boundary or form end
while (index($line, "$boundary") == -1 ||
index($line, "$boundary--") == -1) {
$line = <STDIN>;
}
}
}
# Everything finished, inform progress tracker
&$cbfunc(-1, $ENV{'CONTENT_LENGTH'}, undef, $in{'id'});
#&ui_print_footer("index.cgi?path=$path", $text{'previous_page'});
if (scalar(@errors) > 0) {
print_errors(@errors);
} else {
&redirect("index.cgi?path=$path");
}
print_errors(@errors);
}
else {
&redirect("index.cgi?path=".&urlize($path));
}

View File

@@ -21,3 +21,5 @@ longdesc_de=Erstellt Regeln, Filtern und Weiterleiten von eingehende E-Mail.
desc_pl=Filtry i przekierowanie e-maili
longdesc_pl=Twórz regu³y filtrów i przekierowania przychodz±cych e-maili.
longdesc_ca=Crea regles per filtrar i reenviar el correu d'entrada.
desc_de.UTF-8=Filter und Mailweiterleitung
longdesc_de.UTF-8=Erstellt Regeln, Filtern und Weiterleiten von eingehende E-Mail.

View File

@@ -11,3 +11,4 @@ after_apply_cmd=Command to run after applying configuration,3,None
line1=System configuration,11
save_file=IPtables save file to edit,3,Use operating system or Webmin default
direct=Directly edit firewall rules instead of save file?,1,1-Yes,0-No
filter_chain=Comma sepeated list of regexes to filter out chains not managed by firewall,0

View File

@@ -11,3 +11,4 @@ after_apply_cmd=Befehle zum Anwendung der Konfiguration,3,Keiner
line1=System Konfiguration,11
save_file=IPtables Speicherdatei zum Bearbeiten,3,Verwendung des Betriebssystems oder Webmin Standard
direct=Direktes Bearbeiten der Firewall-Regeln anstatt von gespeicherter Datei?,1,1-Ja,0-Nein
filter_chain=Komma getrennte Liste von Regex zum Ausfiltern von Ketten die nicht von Firewall verwaltet werden,0

View File

@@ -53,9 +53,21 @@ local $lnum = 0;
open(FILE, $_[0] || ($config{'direct'} ? "iptables-save 2>/dev/null |"
: $iptables_save_file));
local $cmt;
LINE:
while(<FILE>) {
local $read_comment;
s/\r|\n//g;
s/\r|\n//g;
# regex to filter out chains not managed by firewall, i.e. fail2ban
if ($config{'direct'} && $config{'filter_chain'}) {
foreach $filter (split(',', $config{'filter_chain'})) {
# NOTE: keep ":chain ..." as reference to avoid error when rebuild active config
# -A|-I chain ... -j chain -> skip line if machtes filter_chain
if (/^.?-(A|I)\s+(\S+).*\s+-j\s+(.*)/) {
next LINE if($2 =~ /^$filter$/);
#next LINE if($3 =~ /^$filter$/);
}
}
}
if (s/#\s*(.*)$//) {
$cmt .= " " if ($cmt);
$cmt .= $1;
@@ -194,6 +206,30 @@ else {
}
}
# get_ipsets_active()
# return a list of active ipsets
sub get_ipsets_active
{
local @rv, $name, $set={};
open(FILE, "ipset list -t 2>/dev/null |");
LINE:
while(<FILE>) {
# remove newlines, get arg and value
s/\r|\n//g;
local ($n, $v) = split(/: /, $_);
($n) = $n =~ /(\S+)/;
# get values from name to number
$name=$v if ($n eq "Name");
$set->{$n}=$v;
if ($n eq "Number") {
push(@rv, $set);
$set={};
}
}
return @rv;
}
# describe_rule(&rule)
# Returns a human-readable description of some rule conditions
sub describe_rule
@@ -204,13 +240,25 @@ foreach $d ('p', 's', 'd', 'i', 'o', 'f', 'dport',
'icmp-type', 'mac-source', 'limit', 'limit-burst',
'ports', 'uid-owner', 'gid-owner',
'pid-owner', 'sid-owner', 'state', 'tos',
'dports', 'sports', 'physdev-in', 'physdev-out') {
'dports', 'sports', 'physdev-in', 'physdev-out', 'args') {
if ($_[0]->{$d}) {
# get name and values
local ($n, @v) = @{$_[0]->{$d}};
# with additional args
if ($d eq 'args') {
# get args
@v = grep {/\S/} split(/ / , $_[0]->{$d});
# first arg is name, next are values
$n=shift(@v);
# translate src and dest parameter for ipset
push(@v, &text("desc_". pop(@v))) if ($n eq "--match-set");
}
# uppercase for p
@v = map { uc($_) } @v if ($d eq 'p');
@v = map { join(", ", split(/,/, $_)) } @v
if ($d eq 's' || $d eq 'd');
local $txt = &text("desc_$d$n", map { "<b>$_</b>" } @v);
# merge all in one for s and d
@v = map { join(", ", split(/,/, $_)) } @v if ($d eq 's' || $d eq 'd' );
# compose desc_$n$d to get localized message, provide values as $1, ..., $n
local $txt = &text("desc_$d$n", map { "<strong>$_</strong>" } @v);
push(@c, $txt) if ($txt);
}
}
@@ -488,5 +536,16 @@ foreach $s (&list_cluster_servers()) {
return undef;
}
# validate_iptables_config()
# Tests that the rules file can be parsed
sub validate_iptables_config
{
my $out = &backquote_command(
"iptables-restore --test <$iptables_save_file 2>&1");
return undef if (!$?);
$out =~ s/Try\s.*more\s+information.*//;
return $out;
}
1;

View File

@@ -48,8 +48,9 @@ if (!$config{'direct'} && &foreign_check("init")) {
# Check if the save file exists. If not, check for any existing firewall
# 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);
# Display warnings about active external firewalls!
&external_firewall_message(\@livetables);
if (!$config{'direct'} &&
(!-s $iptables_save_file || $in{'reset'}) && $access{'setup'}) {
@tables = @livetables;
@@ -127,6 +128,15 @@ else {
@tables = &get_iptables_save() if ($need_reload);
}
# Check if the current config is valid
if (!$config{'direct'}) {
my $err = &validate_iptables_config();
if ($err) {
print "<b>",&text('index_evalid',
&html_escape($err)),"</b><p>\n";
}
}
# Work out the default table
if (!defined($in{'table'})) {
foreach $t (@tables) {
@@ -171,16 +181,30 @@ else {
$form++;
}
# Display a table of rules for each chain
foreach $c (sort by_string_for_iptables keys %{$table->{'defaults'}}) {
print &ui_hr();
@rules = grep { lc($_->{'chain'}) eq lc($c) }
@{$table->{'rules'}};
print "<b>",$text{"index_chain_".lc($c)} ||
&text('index_chain', "<tt>$c</tt>"),"</b><br>\n";
print "<form action=save_policy.cgi>\n";
print &ui_hidden("table", $in{'table'});
print &ui_hidden("chain", $c);
# Display a table of rules for each chain
CHAIN:
foreach $c (sort by_string_for_iptables keys %{$table->{'defaults'}}) {
print &ui_hr();
@rules = grep { lc($_->{'chain'}) eq lc($c) }
@{$table->{'rules'}};
print "<b>",$text{"index_chain_".lc($c)} ||
&text('index_chain', "<tt>$c</tt>"),"</b><br>\n";
# check if chain is filtered out
if ($config{'filter_chain'}) {
foreach $filter (split(',', $config{'filter_chain'})) {
if($c =~ /^$filter$/) {
# not managed by firewall, do not dispaly or modify
print "<em>".$text{'index_filter_chain'}."</em><br>\n";
next CHAIN;
}
}
}
print "<form action=save_policy.cgi>\n";
print &ui_hidden("table", $in{'table'});
print &ui_hidden("chain", $c);
if (@rules) {
@links = ( &select_all_link("d", $form),
&select_invert_link("d", $form) );
@@ -189,10 +213,10 @@ else {
# Generate the header
local (@hcols, @tds);
push(@hcols, "", $text{'index_action'});
push(@tds, "width=5", "width=10% nowrap");
push(@tds, "width=5", "width=20% nowrap");
if ($config{'view_condition'}) {
push(@hcols, $text{'index_desc'});
push(@tds, "");
push(@tds, "nowrap");
}
if ($config{'view_comment'}) {
push(@hcols, $text{'index_comm'});
@@ -209,11 +233,24 @@ else {
local $act =
$text{"index_jump_".lc($r->{'j'}->[1])} ||
&text('index_jump', $r->{'j'}->[1]);
if ($edit) {
# check if chain jump TO is filtered out
local $chain_filtered;
if ($config{'filter_chain'}) {
foreach $filter (split(',', $config{'filter_chain'})) {
if($r->{'j'}->[1] =~ /^$filter$/) {
$chain_filtered=&text('index_filter_chain');
$act=$act."<br><em>$chain_filtered</em>";
}
}
}
# chain to jump to is filtered, switch of edit
if ($edit && !$chain_filtered) {
push(@cols, &ui_link("edit_rule.cgi?table=".&urlize($in{'table'})."&idx=$r->{'index'}",$act));
}
else {
push(@cols, $act);
# add col for not visible checkmark
push(@cols, "", $act);
}
if ($config{'view_condition'}) {
push(@cols, &describe_rule($r));
@@ -261,16 +298,16 @@ else {
"&chain=".&urlize($c)."&new=1&".
"before=$r->{'index'}'><img src=".
"images/before.gif border=0></a>";
push(@cols, $adder);
if ($edit) {
print &ui_checked_columns_row(
\@cols, \@tds, "d", $r->{'index'});
}
else {
print &ui_columns_row(\@cols, \@tds);
}
}
push(@cols, $adder);
# chain to jump to is filtered, switch of edit
if ($edit && !$chain_filtered) {
print &ui_checked_columns_row(
\@cols, \@tds, "d", $r->{'index'});
}
else {
print &ui_columns_row(\@cols, \@tds);
}
}
print &ui_columns_end();
print &ui_links_row(\@links);
}
@@ -345,6 +382,28 @@ else {
$form++;
}
# Show ipset overview if ipsets are availibe
# may need to check if they are used by firewall rules
@ipsets = &get_ipsets_active();
if (@ipsets) {
print &ui_hr();
print "<b>$text{'index_ipset_title'}</b>";
# Generate the header
local (@hcols, @tds);
push(@hcols, $text{'index_ipset'}, $text{'index_ipset_name'}, $text{'index_ipset_type'},
$text{'index_ipset_elem'}, $text{'index_ipset_size'});
push(@tds, "", "", "", "", "");
print &ui_columns_start(\@hcols, 100, 0, \@tds);
# Generate a row for each rule
foreach $s (@ipsets) {
local @cols;
push(@cols, "", "<b>$s->{'Name'}</b>", $s->{'Type'},$s->{'Number'},$s->{'Size'});
print &ui_columns_row(\@cols, \@tds);
}
print &ui_columns_end();
}
# Display buttons for applying and un-applying the configuration,
# and for creating an init script if possible
print &ui_hr();
@@ -411,23 +470,32 @@ else {
&ui_print_footer("/", $text{'index'});
sub shorewall_message
{
local ($filter) = grep { $_->{'name'} eq 'filter' } @{$_[0]};
if ($filter->{'defaults'}->{'shorewall'}) {
print "<b><center>",
&text('index_shorewall', "$gconfig{'webprefix'}/shorewall/"),
"</b></center><p>\n";
}
}
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";
}
}
sub external_firewall_message
{
local $fwname="";
local $fwconfig="$gconfig{'webprefix'}/config.cgi?firewall";
# detect external firewalls
local ($filter) = grep { $_->{'name'} eq 'filter' } @{$_[0]};
if ($filter->{'defaults'}->{'shorewall'}) {
$fwname+='shorewall ';
}
if ($filter->{'defaults'}->{'INPUT_ZONES'}) {
$fwname+='firewalld ';
}
if ($filter->{'defaults'} ~~ /^f2b-|^fail2ban-/) {
$fwname+='fail2ban ';
}
# warning about not using direct
if($fwname && !$config{'direct'}) {
print "<b><center>",
&text('index_filter_nodirect', $fwconfig),
"</b></center><p>\n";
}
# naming the detected firewall modules
foreach my $word (split ' ', $fwname) {
print "<center>",
&text("index_$word", "$gconfig{'webprefix'}/$word/", $fwconfig),
"</center><p>\n";
}
}

View File

@@ -41,6 +41,10 @@ delete_rusure=Sind Sie sicher, dass Sie die Kette $1 l&#246;schen m&#246;chten?
delete_title=L&#246;sche Regel
desc_always=Immer
desc_and=und
desc_args--match-set=$2 in IP-Set $1 enthalten ist
desc_src=Quelle
desc_dest=Ziel
desc_conds=Wenn $1
desc_d=Ziel ist $1
desc_d!=Ziel ist nicht $1
@@ -143,8 +147,9 @@ edit_sport=Quell TCP oder UDP Port
edit_state=Verbindungsstatus
edit_state_established=Bestehende Verbindung
edit_state_invalid=Kein Teil einer Verbindung
edit_state_related=Teil einer Verbindung
edit_state_new=Neue Verbindung
edit_state_untracked=Nicht getrackt
edit_state_untracked=Nicht verfolgt
edit_tcpflags=TCP flag gesetzt
edit_tcpoption=TCP Option Nummer nicht gesetzt
edit_title1=Regel hinzuf&#252;gen
@@ -190,8 +195,12 @@ 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_evalid=WARNUNG! Ihre aktuelle IPtables-Konfiguration ist ung&#252;ltig : $1
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_fail2ban=Hinweis! Verwendung von Fail2Ban wurde erkannt. Verwalten sie Fail2Ban mit dem <a href='$1'>Fail2Ban Modul</a> und filtern nach <a href=$2>f2b-.*</a> bzw. <a href=$2>fail2ban-.*</a>
index_filter_chain=wird nicht von Linux-Firewall verwaltet.
index_filter_nodirect=Warnung! Extern verwaltete Regeln erkannt. Bitte aktiveren sie die Option "<a href=$1>Direkte Bearbeitung von Firewall-Regeln"</a>.
index_firewalld=Hinweis! 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
@@ -217,15 +226,21 @@ index_return=Regelliste
index_rsetup=Die IPtables-Firewall-Konfiguration auf Ihrem System ist dabei neu eingerichtet zu werden. Webmin richtet neue Standard-Regeln ein, die in der Datei $1 gespeichert werden, mit den initialen Einstellungen basierend Ihrer Firewall-Typ-Auswahl unten ..
index_saveex=Speichere Firewall Regeln
index_setup=Keine IPtables-Firewall wurde bisher auf Ihrem System eingerichtet. Webmin kann das f&#252;r Sie erledigen und dies in der Datei $1, mit den initialen Einstellungen basierend Ihre Firewall-Typ Auswahl unten, speichern..
index_shorewall=Warnung! Es scheint, dass Shorewall verwendet wird, um das Firewall-System zu generieren. Vielleicht sollten Sie die <a href='$1'>Shoreline Firewall-Modul</a> verwenden.
index_shorewall=Hinweis! Es scheint, dass Shorewall verwendet wird, um das Firewall-System zu generieren. Vielleicht sollten Sie die <a href='$1'>Shoreline Firewall-Modul</a> verwenden.
index_table_filter=Packet filtering (filter)
index_table_mangle=Packet alteration (mangle)
index_table_nat=Network address translation (nat)
index_table_nat=Netzwerk Adress Translation (NAT)
index_title=Linux Firewall
index_unapply=Konfiguration zur&#252;cksetzen
index_unapply2=Speichere Konfiguration
index_unapply2desc=Klicke auf diese Schaltfl&#228;che, um die Konfiguration oben in die permanente Firewall-Konfigurationsdatei zu speichern.
index_unapplydesc=Klicke auf diese Schaltfl&#228;che, um die Konfiguration die oben aufgef&#252;hrt ist, auf die gerade aktive, zur&#252;ckzusetzen.
index_ipset=IP-Set
index_ipset_title=Aktive IP-Sets die von der Firewall verwendet werden k&ouml;nnen
index_ipset_name=Name
index_ipset_type=Typ
index_ipset_elem=# Elemente
index_ipset_size=Gr&ouml;&szlig;e
log_add_group=Cluster-Server von Gruppe $1 hinzugef&#252;gt
log_add_host=Cluster Server $1 hinzugef&#252;gt
log_apply=Angewandte Konfiguration

View File

@@ -3,6 +3,7 @@ index_editing=Rules file $1
index_ecommand=The command $1 was not found on your system. Webmin needs this command to configure IPtables.
index_ekernel=An error occured when checking your current IPtables configuration : $1 This may indicate that your kernel does not support IPtables.
index_header=Firewall configuration from $1
index_evalid=WARNING! Your current IPtables configuration is invalid : $1
index_change=Showing IPtable:
index_chain_input=Incoming packets (INPUT) - Only applies to packets addressed to this host
index_chain_output=Outgoing packets (OUTPUT) - Only applies to packets originated by this host
@@ -67,12 +68,21 @@ index_auto4=Block all except SSH, IDENT, ping and high ports on interface:
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_shorewall=Note! 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=Note! 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_fail2ban=Note! It appears that Fail2Ban is being used to manage some firewall rules. You should modify them with <a href='$1'>Fail2Ban module</a> and filter <a href=$2>f2b-.*</a> or <a href=$2>fail2ban-.*</a>.
index_filter_chain=is not managed by firewall.
index_filter_nodirect=Warning! External managed rules detected. Activate "<a href=$1>Directly edit firewall rules"</a> or your firewall rules may break.
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
index_clusterdesc=Click this button to set up additional Webmin servers to which the firewall configuration will be automatically copied.
index_ipset=IP-set
index_ipset_title=Active IP-sets which can be used by firewall rules
index_ipset_name=Name
index_ipset_type=Type
index_ipset_elem=# Elements
index_ipset_size=Size
desc_p=protocol is $1
desc_p!=protocol is not $1
@@ -127,6 +137,9 @@ desc_physdev-out!=output physical interface is not $1
desc_conds=If $1
desc_and=and
desc_always=Always
desc_args--match-set=$2 is contained in IP-set $1
desc_src=source
desc_dest=destination
redhat_einstalled=No <tt>iptables</tt> bootup action was found, indicating that the IPtables package is not installed on your system
redhat_eoutput=An error occured getting IPtables status from the command $1. This probably indicates that your system has been configured to use IPchains instead of IPtables.

View File

@@ -73,6 +73,7 @@ index_reset=Reinicia el Tallafocs
index_resetdesc=Fes clic sobre aquest botó per eliminar totes les regles existents del tallafocs i establir-ne de noves per a una configuració inicial bàsica.
index_cluster=Servidors del Cluster
index_clusterdesc=Fes clic sobre aquest botó per configurar servidors Webmin addicionals als quals es copiarà automàticament la configuració del tallafocs.
index_position=Regles $1 a $2 de $3
desc_p=el protocol és $1
desc_p!=el protocol no és $1

View File

@@ -1,2 +1,4 @@
---- Changes since 1.750 ----
First version of this module, for configuring allowed ports and services in FirewallD.
---- Changes since 1.840 ----
Added support for creating and editing port forwards.

View File

@@ -1,2 +1,2 @@
firewall_cmd=Camí complet del programa firewall-cmd,0
firewall_cmd=Camí complet del programa firewall-cmd,0
init_name=Nom del script d'inici de FirewallD,0

View File

@@ -23,6 +23,9 @@ foreach my $d (@d) {
elsif ($w[0] eq "service") {
$err = &delete_firewalld_service($zone, $w[1]);
}
elsif ($w[0] eq "forward") {
$err = &delete_firewalld_forward($zone, @w[1..4]);
}
else {
next;
}

92
firewalld/edit_forward.cgi Executable file
View File

@@ -0,0 +1,92 @@
#!/usr/local/bin/perl
# Show a form to edit one port forward
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,
$dstmode, $dstports, $dstport, $dstportlow, $dstporthigh, $dstaddr);
if (!$in{'new'}) {
&ui_print_header(undef, $text{'forward_edit'}, "");
($ports, $proto, $dstports, $dstaddr) = split(/\//, $in{'id'});
if ($ports =~ /^(\d+)\-(\d+)$/) {
$mode = 1;
($portlow, $porthigh) = ($1, $2);
}
else {
$mode = 0;
$port = $ports;
}
if ($dstports =~ /^(\d+)\-(\d+)$/) {
$dstmode = 1;
($dstportlow, $dstporthigh) = ($1, $2);
}
else {
$dstmode = 0;
$dstport = $dstports;
}
}
else {
&ui_print_header(undef, $text{'forward_create'}, "");
$mode = 0;
$dstmode = 0;
$proto = "tcp";
}
print &ui_form_start("save_forward.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{'forward_header'}, undef, 2);
# Zone name
print &ui_table_row($text{'forward_zone'},
"<tt>".&html_escape($zone->{'name'})."</tt>");
# Port number or range
print &ui_table_row($text{'forward_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));
# Destination port number or range
print &ui_table_row($text{'forward_dstport'},
&ui_radio_table("dstmode", $dstmode,
[ [ 0, $text{'port_mode0'},
&ui_textbox("dstport", $dstport, 6) ],
[ 1, $text{'port_mode1'},
&ui_textbox("dstportlow", $dstportlow, 6)." - ".
&ui_textbox("dstporthigh", $dstporthigh, 6) ],
[ 2, $text{'port_mode2'} ] ]));
# Destination address
print &ui_table_row($text{'forward_dstaddr'},
&ui_opt_textbox("dstaddr", $dstaddr, 40, $text{'forward_dstlocal'}));
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'});

View File

@@ -38,12 +38,15 @@ my $out = &backquote_command("$config{'firewall_cmd'} --list-all-zones ".
if ($?) {
&error("Failed to list zones : $out");
}
my $default_zone = backquote_command(
"$config{'firewall_cmd'} --get-default-zone</dev/null 2>&1");
chomp($default_zone);
my $zone;
foreach my $l (split(/\r?\n/, $out)) {
if ($l =~ /^(\S+)(\s+\(.*\))?/) {
# New zone
$zone = { 'name' => $1,
'default' => $2 ? 1 : 0 };
'default' => $default_zone eq $1 ? 1 : 0 };
push(@rv, $zone);
}
elsif ($l =~ /^\s+(\S+):\s*(.*)/ && $zone) {
@@ -118,6 +121,49 @@ my $out = &backquote_logged("$config{'firewall_cmd'} ".
return $? ? $out : undef;
}
# create_firewalld_forward(&zone, src-port, src-proto, dst-port, dst-addr)
# Create a new forwarding rule in some zone. Returns undef on success or an
# error message on failure
sub create_firewalld_forward
{
my ($zone, $srcport, $srcproto, $dstport, $dstaddr) = @_;
my $out = &backquote_logged(
$config{'firewall_cmd'}." ".
"--zone ".quotemeta($zone->{'name'})." ".
"--permanent ".
"--add-forward-port=port=$srcport:proto=$srcproto".
($dstport ? ":toport=$dstport" : "").
($dstaddr ? ":toaddr=$dstaddr" : "").
" 2>&1");
return $? ? $out : undef;
}
# delete_firewalld_forward(&zone, src-port, src-proto, dst-port, dst-addr)
# Deletes a forwarding rule in some zone. Returns undef on success or an
# error message on failure
sub delete_firewalld_forward
{
my ($zone, $srcport, $srcproto, $dstport, $dstaddr) = @_;
my $out = &backquote_logged(
$config{'firewall_cmd'}." ".
"--zone ".quotemeta($zone->{'name'})." ".
"--permanent ".
"--remove-forward-port=port=$srcport:proto=$srcproto".
($dstport ? ":toport=$dstport" : "").
($dstaddr ? ":toaddr=$dstaddr" : "").
" 2>&1");
return $? ? $out : undef;
}
# parse_firewalld_forward(str)
# Parses a forward string into port, proto, dstport and dstaddr
sub parse_firewalld_forward
{
my ($str) = @_;
my %w = map { split(/=/, $_) } split(/:/, $str);
return ($w{'port'}, $w{'proto'}, $w{'toport'}, $w{'toaddr'});
}
# apply_firewalld()
# Make the current saved config active
sub apply_firewalld
@@ -216,5 +262,33 @@ my $out = &backquote_logged($cmd." 2>&1 </dev/null");
return $? ? $out : undef;
}
1;
# parse_port_field(&in, name)
# Either returns a port expression, or calls error
sub parse_port_field
{
my ($in, $pfx) = @_;
if ($in->{$pfx.'mode'} == 0) {
$in->{$pfx.'port'} =~ /^\d+$/ &&
$in->{$pfx.'port'} > 0 && $in->{$pfx.'port'} < 65536 ||
getservbyname($in->{$pfx.'port'}, $in->{'proto'}) ||
&error($text{'port_eport'});
return $in->{$pfx.'port'};
}
elsif ($in->{$pfx.'mode'} == 1) {
$in->{$pfx.'portlow'} =~ /^\d+$/ &&
$in->{$pfx.'portlow'} > 0 && $in->{$pfx.'portlow'} < 65536 ||
&error($text{'port_eportlow'});
$in->{$pfx.'porthigh'} =~ /^\d+$/ &&
$in->{$pfx.'porthigh'} > 0 && $in->{$pfx.'porthigh'} < 65536 ||
&error($text{'port_eporthigh'});
$in->{$pfx.'portlow'} < $in->{$pfx.'porthigh'} ||
&error($text{'port_eportrange'});
return $in->{$pfx.'portlow'}."-".$in->{$pfx.'porthigh'};
}
else {
# No port chosen
return undef;
}
}
1;

View File

@@ -63,7 +63,10 @@ print &ui_form_end();
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'}) );
$text{'index_sadd'}),
&ui_link("edit_forward.cgi?new=1&zone=".&urlize($zone->{'name'}),
$text{'index_fadd'}),
);
if (@{$zone->{'services'}} || @{$zone->{'ports'}}) {
my @tds = ( "width=5" );
unshift(@links, &select_all_link("d", 1),
@@ -92,6 +95,18 @@ if (@{$zone->{'services'}} || @{$zone->{'ports'}}) {
&ui_link($url, uc($proto)),
], \@tds, "d", "port/".$p);
}
foreach my $f (@{$zone->{'forward-ports'}}) {
my ($port, $proto, $dstport, $dstaddr) =
&parse_firewalld_forward($f);
my $p = join("/", $port, $proto, $dstport, $dstaddr);
my $url = "edit_forward.cgi?id=".&urlize($p).
"&zone=".&urlize($zone->{'name'});
print &ui_checked_columns_row([
&ui_link($url, $text{'index_tforward'}),
&ui_link($url, $port),
&ui_link($url, uc($proto)),
], \@tds, "d", "forward/".$p);
}
print &ui_columns_end();
print &ui_links_row(\@links);
print &ui_form_end([ [ undef, $text{'index_delete'} ] ]);

View File

@@ -21,8 +21,10 @@ index_port=Port or service
index_proto=Protocol
index_tservice=Service
index_tport=Port
index_tforward=Forward
index_padd=Add allowed port.
index_sadd=Add allowed service.
index_fadd=Add port forward.
index_delete=Delete Selected Rules
index_return=list of zones
index_ezones=No FirewallD zones found!
@@ -36,6 +38,7 @@ port_zone=Allowed in zone
port_port=Port to allow
port_mode0=Single port
port_mode1=Port range
port_mode2=Same as original port
port_proto=Network protocol
port_ezone=Zone does not exist!
port_err=Failed to save port
@@ -50,6 +53,18 @@ serv_header=Allowed service options
serv_name=Service to allow
serv_err=Failed to save service
forward_edit=Edit Forward
forward_create=Create Forward
forward_header=Port forwarding options
forward_zone=Forward for zone
forward_err=Failed to save forward
forward_port=Source port
forward_dstport=Desintation port
forward_dstaddr=Destination address
forward_dstlocal=This system
forward_edstaddr=Invalid IPv4 destination address
forward_eneither=Either a destination address or port or both must be entered
check_ecmd=The FirewallD control command $1 was not found on your system
delete_err=Failed to delete rules
@@ -91,6 +106,9 @@ 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_create_forward=Added forward $1
log_delete_forward=Removed forward $1
log_update_forward=Updated forward $1
log_delete_rules=Removed $1 allowed ports
log_ifaces_zone=Updated interfaces for zone $1
log_create_zone=Created zone $1

View File

@@ -11,7 +11,7 @@ our (%text);
sub parse_webmin_log
{
my ($user, $script, $action, $type, $object, $p) = @_;
if ($type eq "port" || $type eq "serv") {
if ($type eq "port" || $type eq "serv" || $type eq "forward") {
return &text("log_${action}_${type}",
"<tt>".&html_escape($object)."</tt>");
}

55
firewalld/save_forward.cgi Executable file
View File

@@ -0,0 +1,55 @@
#!/usr/local/bin/perl
# Create, update or delete a forwarding rule
use strict;
use warnings;
require 'firewalld-lib.pl';
our (%in, %text);
&error_setup($text{'forward_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, $olddstport, $olddstaddr);
if ($in{'id'}) {
($oldport, $oldproto, $olddstport, $olddstaddr) =
split(/\//, $in{'id'});
}
my $logport;
if ($in{'delete'}) {
# Just remove the existing rule
my $err = &delete_firewalld_forward($zone, $oldport, $oldproto,
$olddstport, $olddstaddr);
&error($err) if ($err);
$logport = $oldport;
}
else {
# Validate inputs
my $port = &parse_port_field(\%in, '');
my $proto = $in{'proto'};
my $dstport = &parse_port_field(\%in, 'dst');
my $dstaddr;
if (!$in{'dstaddr_def'}) {
&check_ipaddress($in{'dstaddr'}) ||
&error($text{'forward_edstaddr'});
$dstaddr = $in{'dstaddr'};
}
$dstport || $dstaddr || &error($text{'forward_eneither'});
# Create or update forward
if (!$in{'new'}) {
my $err = &delete_firewalld_forward($zone, $oldport, $oldproto,
$olddstport, $olddstaddr);
&error($err) if ($err);
}
my $err = &create_firewalld_forward($zone, $port, $proto,
$dstport, $dstaddr);
&error($err) if ($err);
$logport = $port;
}
&webmin_log($in{'delete'} ? 'delete' : $in{'new'} ? 'create' : 'update',
'forward', $logport);
&redirect("index.cgi?zone=".&urlize($zone->{'name'}));

View File

@@ -26,25 +26,7 @@ if ($in{'delete'}) {
}
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 $port = &parse_port_field(\%in, '');
my $proto = $in{'proto'};
# Create or update allowed port

View File

@@ -115,6 +115,7 @@ edit_edir=Hi falta el directori a copiar
edit_efs=Els sistemes de fitxers de tipus $1 no es poden copiar amb aquest mòdul
edit_title=Addició de Nova Còpia
edit_title2=Edició de Còpia
edit_title3=Clonació de Còpia
edit_header=Detalls de la còpia del sistema de fitxers $1
edit_header2=Planificació de la còpia
edit_header3=Opcions de la còpia
@@ -232,4 +233,5 @@ email_failed=La c
newtape_subject=Canvi de la cinta $1 per a la còpia de $2 a $3
newtape_body=La còpia de $2 a $3 ha atès la quantitat màxima de dades permesa a la cinta $1. Has de posar una nova cinta i prémer l'enllaç 'Cinta carregada' al mòdul de Còpia de Sistemes de Fitxers de Webmin per seguir amb la còpia.
edit_clone=Clona
__norefs=1

View File

@@ -1,5 +1,7 @@
cs_header=D0E0FC class='maintitle'
cs_table=f5f5f5 class='mainbody'
cs_header=D0E0FC
tb=class='maintitle'
cs_table=f5f5f5
cb=class='mainbody'
cs_link=376ebd
texttitles=1
functions=theme.pl

View File

@@ -3,15 +3,15 @@ addEvent(window, "load", sortables_init);
var SORT_COLUMN_INDEX;
function sortables_init() {
var lastAssignedId = 0;
var lastAssignedId = 0;
// Find all tables with class sortable and make them sortable
if (!document.getElementsByTagName) return;
tbls = document.getElementsByTagName("table");
for (ti=0;ti<tbls.length;ti++) {
thisTbl = tbls[ti];
if (!thisTbl.id) {
thisTbl.id = 'sortableTable'+(lastAssignedId++);
}
if (!thisTbl.id) {
thisTbl.id = 'sortableTable'+(lastAssignedId++);
}
if (((' '+thisTbl.className+' ').indexOf("sortable") != -1) && (thisTbl.id)) {
//initTable(thisTbl.id);
ts_makeSortable(thisTbl);
@@ -76,7 +76,7 @@ function ts_resortTable(lnk,clid) {
if (itm.match(/^\d\d[\/-]\d\d[\/-]\d\d\d\d$/)) sortfn = ts_sort_date;
if (itm.match(/^\d\d[\/-]\S\S\S[\/-]\d\d\d\d$/)) sortfn = ts_sort_date;
if (itm.match(/^\d\d[\/-]\d\d[\/-]\d\d$/)) sortfn = ts_sort_date;
if (itm.match(/^[£$]/)) sortfn = ts_sort_currency;
if (itm.match(/^[£$]/)) sortfn = ts_sort_currency;
if (itm.match(/^[\d\.]+\s*(bytes|b|kb|tb|gb|mb)$/i)) sortfn = ts_sort_filesize;
// Special cases for our mailbox lists
if (itm.match(/^(Empty|Unlimited)$/)) sortfn = ts_sort_filesize;

View File

@@ -122,4 +122,5 @@ search_already=S'est
search_noprot=S'està ometent el fitxer d'opcions Apache, ja que no protegeix el directori.
search_open=No es pot obrir el fitxer d'opcions $1 d'Apache: $2
search_done=...fet
__norefs=1

View File

@@ -260,4 +260,5 @@ 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

@@ -51,4 +51,5 @@ apply_err=No s'ha pogut aplicar la configuraci
delete_err=No s'han pogut suprimir els processos
delete_enone=No has seleccionat cap procés
__norefs=1

View File

@@ -126,7 +126,7 @@ referer_warn_unknown=<b>Atenci
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>
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><p>ATENCIÓ - això té l'efecte secundari d'obrir el sistema a atacs XSS reflectits i per tant no és recomanable!!
session_header=Entrada a Webmin
session_mesg=Per entrar al servidor Webmin de $1, has d'introduir un nom d'usuari i una contrasenya.

View File

@@ -169,7 +169,7 @@ main_title2=Webmin
main_title3=Webmin $1 ($2)
main_unused=Nicht benutzte Module
main_version=Version $1 auf $2 ($3)
modify=Modifizieren
modify=Anpassen
modules_all=Alle Module
modules_cancel=Abbrechen
modules_clear=Löschen
@@ -191,6 +191,7 @@ month_8=August&nbsp;
month_9=September&nbsp;
no=Nein
ok=OK
fail=Problem
pam_header=Anmelden an Webmin
pam_login=Fortsetzen
pam_mesg=Sie müssen auf die Frage unten antworten um sich am Webmin-Server $1 anmelden zu können.

View File

@@ -62,6 +62,7 @@ modify=Modify
reset=Reset
ok=OK
cancel=Cancel
fail=Failed
helpsearch=Search Docs..
switch_remote_euser=The Unix user $1 does not exist.
programname=Webmin

View File

@@ -314,4 +314,5 @@ add_echeck=El servidor $1 no t
add_ediff=El servidor $1 està utilitzant un sistema d'impressió ($2) diferent del d'aquest servidor
add_ediff2=El servidor $1 està utilitzant un controlador d'impressió ($2) diferent del d'aquest servidor
add_ok=S'ha afegit $1, amb $2 impressores.
__norefs=1

View File

@@ -1,2 +1,2 @@
show_table=Mostra els volums els grups com a,1,1-Taula,0-Icones
lvm_conf=Camí del fitxer de configuració de LVM,8
lvm_conf=Camí del fitxer de configuració de LVM,8

View File

@@ -254,6 +254,12 @@ if ($in{'lv'}) {
# Show thin pool users
if ($in{'lv'} && $lv->{'thin'}) {
print &ui_table_row($text{'lv_thinused'},
&nice_size($lv->{'thin_used'} * 1024));
print &ui_table_row($text{'lv_thinpercent'},
$lv->{'thin_percent'}."%");
@thinc = grep { $_->{'thin_in'} eq $lv->{'name'} } @lvs;
if (@thinc) {
foreach $t (@thinc) {

View File

@@ -12,6 +12,7 @@ index_addpv=Afegeix un nou volum f
index_addpv2=Afegeix un volum físic a <tt>$1</tt>.
index_addlv2=Crea un volum lògic a <tt>$1</tt>.
index_addlv2s=Crea una instantània a <tt>$1</tt>.
index_addlv3=Crea un pool prim a <tt>$1</tt>.
index_addlv=Crea un nou volum lògic.
index_addsnap=Crea una nova instantània.
index_return=als grups de volums
@@ -38,6 +39,7 @@ index_lvsize=Mida
index_lvused=Espai utilitzat
index_lvuse=Utilitzat per a
index_snapof=(Instantània de $1)
index_thin=Pool prrim LVM per als VLs de $1
lv_edit=Edita Volum Lògic
lv_edit_snap=Edita la instantània
@@ -46,6 +48,9 @@ lv_create_snap=Crea una Instant
lv_vg=En el grup de volums $1
lv_header=Detalls del volum lògic
lv_name=Nom del volum
lv_thin=Crea com a VL prim al pool
lv_thin2=Prims proveït al pool
lv_nothin=Cap (crea com a VL regular)
lv_size=Mida del volum
lv_size0=Mida absoluta
lv_size1=Percentatge de la mida del GV
@@ -92,6 +97,7 @@ lv_snaprollback=Reverteix l'Instant
lv_rusure=Segur que vols suprimir el volum lògic $1? Totes les dades del sistema de fitxers d'aquest volum lògic es perdran per sempre!
lv_rusnap=Segur que vols suprimir la instantània $1?
lv_rusnaprb=Segur que vols revertir la instantània $1?
lv_delthin=ATENCIÓ! Aquest VL és un pool prim per a $1 volums lògics proveïts prims, que també es perdran si s'esborra!
lv_deleteok=Suprimeix-ho Ara
lv_snaprollbackok=Reverteix-la Ara
lv_err2=No s'ha pogut suprimir el volum lògic
@@ -111,12 +117,14 @@ lv_mountmsg=Munta aquest VL en un directori nou del sistema, de manera que es pu
lv_free=Percentage lliure
lv_freedisk=Espai lliure
lv_pvs=Volums físics allotjats
lv_thincs=VLs d'aquest pool prim
lv_snapusage=Percentatge d'ús d'instantànies
lv_egone=El volum lògic ja no existeix!
lv_moveheader=Retira el volum físic
lv_pvfrom=Desplaça blocs del volum físic
lv_pvto=Al volum físic
lv_moveok=Desplaça els Blocs
lv_return=al volum lògic
mkfs_title=Creació de Sistema de Fitxers
mkfs_desc=Aquest formulari permet crear un nou sistema de fitxers $2 ($1) a volum lògic $3. Totes les dades existents s'esborraran.
@@ -188,6 +196,18 @@ pvmove_title=Despla
pvmove_start=S'està desplaçant el volum lògic $1 de $2 a $3...
pvmove_failed=...el desplaçament ha fallat!
pvmove_done=...desplaçament completat
thin_title=Creació de Pool Prim
thin_desc=UN pool prim és un aparella de VLs que es pot utilitzar per crear VLs addicionals que poden ser més grans que l'espai disponible. L'espai només es consumeix quan es necessita, en lloc de fer-ho quan es creen els VLs dins del pool. ATENCIÓ - Es perdran totes les dades dels VLs seleccionats!
thin_header=Detalls del nou pool prim
thin_datalv=LV existent per a les dades
thin_metadatalv=LV existent per a les metadades
thin_ok=Converteix LVs A Pool Prim
thin_elvs=No s'ha trobat cap LV que encara no estigui en ús en aquest GV!
thin_err=No s'ha pogut crear el pool prim
thin_esame=Els dos LVs seleccionats són el mateix
thin_edata=El VL de dades seleccionat ja està en ús
thin_emetadata=El VL de metadades seleccionat ja està en ús
log_create_vg=S'ha creat el grup de volums $1
log_modify_vg=S'ha modificat el grup de volums $1

View File

@@ -118,6 +118,8 @@ lv_free=Free percentage
lv_freedisk=Free space
lv_pvs=Physical volumes allocated
lv_thincs=LVs in this thin pool
lv_thinpercent=Thin pool use percentage
lv_thinused=Thin pool space used
lv_snapusage=Snapshot use percentage
lv_egone=Logical volume no longer exists!
lv_moveheader=Move off physical volume

View File

@@ -370,6 +370,10 @@ else {
elsif (/LV\s+Pool\s+name\s+(\S+)/) {
$lv->{'thin_in'} = $1;
}
elsif (/Allocated\s+pool\s+data\s+(\S+)%/) {
$lv->{'thin_percent'} = $1;
$lv->{'thin_used'} = $1 / 100.0 * $lv->{'size'};
}
}
close(DISPLAY);
@rv = grep { $_->{'vg'} eq $_[0] } @rv;

View File

@@ -3314,7 +3314,7 @@ foreach my $a (@$attach) {
}
else {
# No filename
push(@files, "<i>$text{'view_anofile'}</i>");
push(@files, $text{'view_anofile'});
$fn = "file.".&type_to_extension($a->{'type'});
push(@detach, [ $a->{'idx'}, $fn ]);
}

View File

@@ -20,6 +20,6 @@ if ($in{'owner_a'}) {
$email = { 'enabled' => 1,
'name' => $in{'email_a'},
'values' => [ "|$wrapper_path majordomo" ] };
&foreign_call("sendmail", "create_alias", $email, $aliases_files);
&foreign_call($aliases_module, "create_alias", $email, $aliases_files);
&redirect("");

125
majordomo/check_inst.cgi Executable file
View File

@@ -0,0 +1,125 @@
#!/usr/local/bin/perl
# check_inst.cgi
# check majordomo options and installation
require './majordomo-lib.pl';
use Fcntl ':mode';
%access = &get_module_acl();
$conf = &get_config();
eval { require "$config{'program_dir'}/majordomo_version.pl"; };
&ui_print_header(undef, $text{'check_title'}, "", undef, 1, 0, 0,
&mdom_help(),
undef, undef, &text('index_version', $majordomo_version));
$aliases_files = &get_aliases_file();
$email = &find_value("whoami", $conf); $email =~ s/\@.*$//g;
$owner = &find_value("whoami_owner", $conf); $owner =~ s/\@.*$//g;
# predefined values
local $cdiv='<div style="margin-left: 20%;">', $ediv='</div>';
local $ok="<div style=\"padding: .3em;\"><font color=\"green\">".&text('ok')."</font></div>";
local $fail="<div style=\"padding: .3em;\"><font color=\"red\">".&text('fail')."</font></div>";
local $possible="<div style=\"padding: .3em;\"><font color=\"orange\">".&text('check_possible')."</font></div>";
local $res=$ok, $tocheck, $sec;
# init / start table
local @tds;
push(@tds, "width=0", "width=30% nowrap", "width=60%", "");
print &ui_columns_start(["",&text('check_test'), &text('check_result'), &text('check_status')], 100, 0, \@tds);
# Check mailer / aliaes / config file
local $aliases=$aliases_files->[0], $mailer=$config{'aliases_file'};
$mailer="sendmail" if ($mailer eq '');
print &ui_checked_columns_row(["<b>Autodetect aliases file from mailer</b>", ucfirst($mailer), $res],
\@tds,undef, undef, 0,1);
$res=$ok;
$tocheck=$aliases;
if (!-r $tocheck) { $res=$fail; $tocheck = &text('index_esendmail', 'Sendmail alias file', $tocheck,
"$gconfig{'webprefix'}/config.cgi?$module_name"); }
print &ui_checked_columns_row(["<b>Aliases file used for majordomo</b>", $tocheck, $res],
\@tds,undef, undef, 0,1);
$res=$ok;
$tocheck=$config{'majordomo_cf'};
if (!-r $tocheck) { $res=$fail; $tocheck = &text('index_econfig', "<tt>$tocheck</tt>",
"$gconfig{'webprefix'}/config.cgi?$module_name"); }
print &ui_checked_columns_row(["<b>Majordomo configuration file</b>", $tocheck, $res],
\@tds,undef, undef, 0,1);
# config files exist?
if ( $res eq $ok) {
# Check program dir / version
$res=$ok;
local $progdir, $progdirok;
$tocheck= $progdir = $config{'program_dir'};
if (!-d $tocheck ) { $res=$fail; $tocheck = &text('index_eprograms', "<tt>$tocheck</tt>",
"$gconfig{'webprefix'}/config.cgi?$module_name"); }
print &ui_checked_columns_row(["<b>Majordomo programm dir</b>", $tocheck, $res],
\@tds,undef, undef, 0,1);
if ($res eq $ok) {
$progdirok=1;
$res=$ok;
$sec=$cdiv.&text('check_perm').":";
$tocheck=$config{'program_dir'};
if (((stat($tocheck)) [2] & S_IXOTH) != 0) { $res=$fail; $sec .= " ".&text('check_exec'); }
if (((stat($tocheck)) [2] & S_IROTH) != 0) { $res=$fail; $sec .= " ".&text('check_read'); }
if (((stat($tocheck)) [2] & S_IWOTH) != 0) { $res=$fail; $sec .= " ".&text('check_write'); }
print &ui_checked_columns_row(["", $sec.$ediv, $res] , \@tds,undef, undef, 0,1);
$res=$ok;
$tocheck=$majordomo_version;
if ($tocheck eq "" || $tocheck < 1.94 || $tocheck >= 2) { $res=$fail; $tocheck .= ": ".$text{'index_eversion'}; }
print &ui_checked_columns_row(["<b>".&text('index_version',"")."</b>", $tocheck, $res],
\@tds,undef, undef, 0,1);
}
# Check home / list / archive dir from majordomo.cf
$res=$ok;
local $home=&find_value("homedir", $conf);
$tocheck=$home;
if ($tocheck ne $progdir) { $res=$fail; $tocheck = &text('index_emdomdir',
'$homedir'." (should be ".$progdir."!)", $tocheck); }
print &ui_checked_columns_row(["<b>Majordomo script HOME dir</b>", $tocheck, $res],
\@tds,undef, undef, 0,1);
$res=$ok;
local $home=&find_value("homedir2", $conf);
$tocheck=$home;
if (! -d $tocheck) { $res=$fail; $tocheck = &text('index_emdomdir', '$homedir2', $home); }
print &ui_checked_columns_row(["<b>Majordomo list HOME2 dir</b>", $tocheck, $res],
\@tds,undef, undef, 0,1);
if ($res eq $ok) {
$res=$ok;
$sec=$cdiv.&text('check_perm').":";
$tocheck=$home;
if (((stat($tocheck)) [2] & S_IXOTH) != 0) { $res=$possible; $sec .= " ".&text('check_exec'); }
if (((stat($tocheck)) [2] & S_IROTH) != 0) { $res=$possible; $sec .= " ".&text('check_read'); }
if (((stat($tocheck)) [2] & S_IWOTH) != 0) { $res=$possible; $sec .= " ".&text('check_write'); }
print &ui_checked_columns_row(["", $sec.$ediv, $res] , \@tds,undef, undef, 0,1);
}
$res=$ok;
$tocheck = &perl_var_replace(&find_value("listdir", $conf), $conf);
if (!-d $tocheck) { $res=$fail; $tocheck = &text('index_emdomdir', '$listdir', $tocheck); }
print &ui_checked_columns_row(["<b>Majordomo LIST directory</b>", $tocheck, $res],
\@tds,undef, undef, 0,1);
$res=$ok;
$tocheck = &perl_var_replace(&find_value("filedir", $conf), $conf);
if (!-d $tocheck) { $res=$fail; $tocheck = &text('index_emdomdir', '$filedir', $tocheck); }
print &ui_checked_columns_row(["<b>Majordomo ARCHIVE directory</b>", $tocheck, $res],
\@tds,undef, undef, 0,1);
# run wrapper config-test
if ($progdirok == 1) {
local $cmd="$progdir/wrapper config-test";
local $realcmd="cd $progdir; echo n | $cmd 2>&1";
local $text=`$realcmd`;
$text =~ s/(^|\n)[\n\s]*/$1/g;
$text =~ s/Nothing bad found!.*/Nothing bad found!/s;
if ($? != 0) {$res=$fail;}
print &ui_checked_columns_row(["<b>Run Majormomo internal test</b>", $cmd, $res] ,
\@tds,undef, undef, 0,1);
print "<td></td><td></td>";
print "<td colspan=\"2\"><pre>$text</pre></td>";
}
}
print &ui_columns_end();
&ui_print_footer("index.cgi", $text{'index'});

View File

@@ -3,3 +3,4 @@ program_dir=/usr/local/majordomo
dynamic=0
sort_mode=0
perms=0
owner_file=0

View File

@@ -1,5 +1,6 @@
line1=Configurable options,11
dynamic=Use random number for list alias?,1,1-Yes,0-No
owner_file=Save list owner in <tt>list.owner</tt> instead of aliases file,1,1-Yes,0-No
sort_mode=Sort mailing lists by,1,1-Name,0-Order created
perms=Permissions for majordomo files,1,1-User writable,0-User and group writable
line2=System configuration,11
@@ -8,3 +9,4 @@ program_dir=Directory containing majordomo programs,0
wrapper_path=Path to majordomo wrapper,3,In programs directory
aliases_file=Path to aliases file,10,postfix-Get from Postfix,-Get from Sendmail,Other file
smrsh_program_dir=Directory containing sendmail safe programs,3,Anywhere
download=First Aid<br><br>If majordomo is not supported by your distribution or is not compatible with the installed version of perl: <a href="http://files1.directadmin.com/services/es_7.0_64/majordomo-1.94.5-patched.tar.gz">download a patched version here ...</a><br>&nbsp;,11

View File

@@ -6,5 +6,5 @@ line2=Konfigurace syst
majordomo_cf=Úplůná cesta ke konfiguračnímu souboru majordomu,0
program_dir=Adresář obsahující majordomo programy,0
wrapper_path=Cesta k majordomo wrapper,3,V adresáři programů
aliases_file=Soubor aliasů Sendmail-stylu,3,Vzít z sendmail.cf
smrsh_program_dir=Adresář obsahující bezpečnostní programy uložení Sendmailu,3,Kdekoliv
aliases_file=Soubor aliasů Sendmail-stylu,10,postfix-Get from Postfix,-Get from Sendmail,Other file

View File

@@ -1,4 +1,4 @@
line1=Konfigurierbare Optionen,11
line1=Konfigurierbare Einstellungen,11
dynamic=Benutze zuf&#228;llige Zahl als Listen&#45;Alias,1,1-Ja,0-Nein
sort_mode=Sortiere Mailinglisten nach,1,1-Name,0-Erzeugter Reihenfolge
perms=Berechtigungen f&#252;r die Majordomo&#45;Dateien,1,1-Beschreibbar durch Benutzer,0-Beschreibbar f&#252;r Benutzer und Gruppen
@@ -6,5 +6,7 @@ line2=Systemkonfiguration,11
majordomo_cf=Absoluter Pfad zur Majordomo&#45;Konfigurationsdatei,0
program_dir=Verzeichnis&#44; das die Majordomo&#45;Programme enth&#228;lt,0
wrapper_path=Pfad zum Majordomo&#45;Wrapper,3,Im Programm&#45;Verzeichnis
aliases_file=Alias&#45;Datei in Sendmail&#45;Form,3,Ermittle aus sendmail.cf
aliases_file=Alias-Datei in Sendmail-Form,10,postfix-Von Postfix Konfiguration,-Von Sendmail,Andere Datei
owner_file=Speichere Listen Owner in <tt>list.owner</tt> statt in Alias-Datei,1,1-Ja,0-Nein
smrsh_program_dir=Verzeichnis&#44; das die Sendmail&#45;"Safe"&#45;Programme enth&#228;lt,3,Beliebig
download=Erste Hilfe<br><br>Falls Majordomo nicht in ihrer Distribution enthalten ist oder Probleme mit der installierten Perl Version hat: <a href="http://files1.directadmin.com/services/es_7.0_64/majordomo-1.94.5-patched.tar.gz">Laden sie eine angepaste Version von hier ...</a><br>&nbsp;,11

View File

@@ -0,0 +1,12 @@
wrapper_path=Pfad zum Majordomo-Wrapper,3,Im Programm-Verzeichnis
program_dir=Verzeichnis&#44; das die Majordomo&#45;Programme enthält,0
dynamic=Benutze zufällige Zahl als Listen&#45;Alias,1,1-Ja,0-Nein
line1=Konfigurierbare Optionen,11
line2=Systemkonfiguration,11
smrsh_program_dir=Verzeichnis&#44; das die Sendmail"Safe" Programme enthält,3,Beliebig
majordomo_cf=Absoluter Pfad zur Majordomo Konfigurationsdatei,0
aliases_file=Alias Datei in Sendmail-Form,10,postfix-Von Postfix,-Von Sendmail,Andere Datei
owner_file=Speichere Listen Owner in <tt>list.owner</tt> statt in Alias-Datei,1,1-Ja,0-Nein
perms=Berechtigungen für die Majordomo Dateien,1,1-Beschreibbar durch Benutzer,0-Beschreibbar für Benutzer und Gruppen
sort_mode=Sortiere Mailinglisten nach,1,1-Name,0-Erzeugter Reihenfolge
download=Erste Hilfe<br><br>Falls Majordomo nicht in ihrer Distribution enthalten ist oder Probleme mit der installierten Perl Version hat: <a href="http://files1.directadmin.com/services/es_7.0_64/majordomo-1.94.5-patched.tar.gz">Laden sie eine angepaste Version von hier ...</a><br>&nbsp;,11

View File

@@ -6,5 +6,5 @@ line2=Configuraci&#243;n del sistema,11
majordomo_cf=Trayectoria completa a archivo de configuraci&#243;n de majordomo,0
program_dir=Directorio que contiene los programas de majordomo,0
wrapper_path=Trayectoria a wrapper de majordomo,3,En directorio de programas
aliases_file=Archivo de alias con estilo-Sendmail,3,Obtener de sendmail.cf
smrsh_program_dir=Directorio que contiene los programas seguros de sendmail,3,Cualquier sitio
aliases_file=Archivo de alias con estilo-Sendmail,10,postfix-Get from Postfix,-Get from Sendmail,Other file

View File

@@ -1,3 +1,3 @@
majordomo_cf=Chemin du fichier de configuration de majordomo,0
program_dir=Répertoire du programme majordomo,0
aliases_file=Fichier d'aliases de style Sendmail,3,Prendre de sendmail.cf
aliases_file=Fichier d'aliases de style Sendmail,10,postfix-Get from Postfix,-Get from Sendmail,Other file

View File

@@ -1,7 +1,7 @@
majordomo_cf=Pełna ścieżka do pliku konfiguracyjnego majordomo,0
program_dir=Katalog zawierający programy majordomo,0
wrapper_path=Ścieżka do wrappera majordomo,3,W&nbsp;katalogu programów
aliases_file=Plik aliasów w stylu Sendmaila,3,Pobierz z sendmail.cf
dynamic=Używać losowych aliasów list,1,1-Tak,0-Nie
sort_mode=Porządkuj listy według,1,1-Nazwy,0-Kolejności utworzenia
smrsh_program_dir=Katalog zawierający bezpieczne programy sendmail,3,Gdziekolwiek
aliases_file=Plik aliasów w stylu Sendmaila,10,postfix-Get from Postfix,-Get from Sendmail,Other file

View File

@@ -1,6 +1,6 @@
majordomo_cf=Fullständig sökväg till inställningsfil för majordomo,0
program_dir=Katalog för majordomo-program,0
aliases_file=Aliasfil för sendmail-style ,3,Hämta från sendmail.cf
dynamic=Använda slumptal för listalias,1,1-Ja,0-Nej
sort_mode=Sortera mailinglistor efter,1,1-Namn,0-Ordning de skapades i
smrsh_program_dir=Katalog med sendmail-säkerhetsprogram,3,Var som helst
aliases_file=Aliasfil för sendmail-style ,10,postfix-Get from Postfix,-Get from Sendmail,Other file

View File

@@ -1,6 +1,6 @@
majordomo_cf=Majordomo yapılandırma dosyasının tam yolu,0
program_dir=Majordomo programlarını içeren dizin,0
aliases_file=Sendmail stili takma adlar dosyası,3,sendmail.cf'den al
dynamic=Takma isimleri listemek için rastgele sayılar kullan,1,1-Evet,0-Hayır
sort_mode=Posta listelerini sıralam,1,1-İsim,0-Oluşturulma sırasıyla
smrsh_program_dir=Sendmail güvenli programlarını içeren dizin,3,Herhangi bir yer
aliases_file=Sendmail stili takma adlar dosyası,10,postfix-Get from Postfix,-Get from Sendmail,Other file

View File

@@ -6,46 +6,55 @@ require './majordomo-lib.pl';
%access = &get_module_acl();
$access{'create'} || &error($text{'create_ecannot'});
&ui_print_header(undef, $text{'create_title'}, "");
local $cspan=' colspan="3"',$bcss=' style="display: box; float: left; padding: 10px;"';
print <<EOF;
<form action=create_list.cgi method=post>
<table border width=100%>
<table border width=\"100%\">
<tr $tb> <td><b>$text{'create_header'}</b></td> </tr>
<tr $cb> <td><table width=100%>
<tr $cb> <td><table width=\"100%\">
<tr> <td><b>$text{'create_name'} *</b></td>
<td $cspan><input name=\"name\" size=\"20\"></td> </tr>
EOF
<tr> <td><b>$text{'create_name'}</b></td>
<td><input name=name size=15></td> </tr>
<tr> <td><b>$text{'create_owner'}</b></td>
<td><input name=owner size=30></td> </tr>
<tr> <td><b>$text{'create_password'}</b></td>
<td><input name=password type=password size=10></td> </tr>
print "<tr>". &opt_input("reply_to", $text{'mesg_reply'},
$conf, $text{'mesg_none'}, 20);
print &opt_input("subject_prefix", $text{'mesg_subject'},
$conf, $text{'default'}, 20) ."</tr>\n";
print <<EOF;
<tr> <td><b>$text{'create_owner'} *</b></td>
<td width=\"30%\"><input name=\"owner\" size=\"30\"></td>
<td><b>$text{'create_password'} *</b></td>
<td><input name=\"password\" type=\"password\" size=\"30\"></td> </tr>
<tr> <td><b>$text{'create_desc'}</b></td>
<td><input name=desc size=50></td> </tr>
<td $cspan><input name=\"desc\" size=\"60\"></td> </tr>
<tr> <td valign=top><b>$text{'create_info'}</b></td>
<td><textarea name=info rows=5 cols=60></textarea></td> </tr>
<td $cspan><textarea name=\"info\" rows=\"5\" cols=\"50\"></textarea></td> </tr>
<tr> <td valign=top><b>$text{'create_footer'}</b></td>
<td><textarea name=footer rows=3 cols=60></textarea></td> </tr>
<td $cspan><textarea name=\"footer\" rows=\"3\" cols=\"60\"></textarea></td> </tr>
<tr> <td><b>$text{'create_moderate'}</b></td>
<td><input type=radio name=moderate value=yes> $text{'yes'}
<input type=radio name=moderate value=no checked> $text{'no'}
<td><input type=\"radio\" name=\"moderate\" value=\"yes\"> $text{'yes'}
<input type=\"radio\" name=\"moderate\" value=\"no\" checked> $text{'no'}
</td> </tr>
<tr> <td><b>$text{'create_moderator'}</b></td>
<td><input type=radio name=moderator_def value=1 checked>
<td $cspan nowrap=""><input type=\"radio\" name=\"moderator_def\" value=\"1\" checked>
$text{'create_same'}
<input type=radio name=moderator_def value=0>
<input name=moderator size=20></td> </tr>
<input type=\"radio\" name=\"moderator_def\" value=\"0\">
<input name=\"moderator\" size=\"20\"></td> </tr>
<tr> <td><b>$text{'create_archive'}</b></td>
<td><select name=archive>
<option value='' selected>$text{'no'}</option>
<option value=Y>$text{'create_archiveyear'}</option>
<option value=M>$text{'create_archivemonth'}</option>
<option value=D>$text{'create_archiveday'}</option>
<td $cspan><select name=\"archive\">
<option value=\"\"$text{'no'}</option>
<option value=\"Y\" selected>$text{'create_archiveyear'}</option>
<option value=\"M\">$text{'create_archivemonth'}</option>
<option value=\"D\">$text{'create_archiveday'}</option>
</select></td> </tr>
</table></td></tr></table>
<input type=submit value="$text{'create'}"></form>
EOF
print "<div $bcss>".&ui_submit($text{'create'})."</form>&nbsp&nbsp;* $text{'create_minimum'}</div>";
&ui_print_footer("", $text{'index_return'});

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