mirror of
https://github.com/webmin/webmin.git
synced 2026-02-03 22:23:28 +00:00
Compare commits
404 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
d5227e85af | ||
|
|
af2219d128 | ||
|
|
1a8d138a38 | ||
|
|
dcb3a602f2 | ||
|
|
9239327440 | ||
|
|
a9bd221f94 | ||
|
|
a10c475218 | ||
|
|
7733dc758e | ||
|
|
90a331fb33 | ||
|
|
b6dfa03e3c | ||
|
|
12ab7cc722 | ||
|
|
6382bc8f7e | ||
|
|
6a86fb1e3f | ||
|
|
cc2bcd3894 | ||
|
|
9367695b64 | ||
|
|
579d31935f | ||
|
|
824cfd0488 | ||
|
|
6bfc7e4a2a | ||
|
|
a950ad1a5b | ||
|
|
c52ff9184c | ||
|
|
04086f4304 | ||
|
|
e2525d7299 | ||
|
|
2759ca72e5 | ||
|
|
921121be60 | ||
|
|
4b1a2d5eb4 | ||
|
|
d7592cede9 | ||
|
|
ba38d23c6b | ||
|
|
cbcae848df | ||
|
|
6dc5f419c9 | ||
|
|
f254a8ca33 | ||
|
|
fdde4f23a2 | ||
|
|
5e9321336d | ||
|
|
161fa33de3 | ||
|
|
943df27553 | ||
|
|
54365d56d1 | ||
|
|
e1e84b498b | ||
|
|
082acf915e | ||
|
|
aa010454a5 | ||
|
|
33356c95d5 | ||
|
|
fa94a90216 | ||
|
|
15c0e96acb | ||
|
|
fd3ad0c8f4 | ||
|
|
49e94bc897 | ||
|
|
9c351640d5 | ||
|
|
03044aae9f | ||
|
|
333d8cf6f1 | ||
|
|
65e40fc4ca | ||
|
|
a589ea9799 | ||
|
|
781722c168 | ||
|
|
c383ac2f39 | ||
|
|
2c8a828259 | ||
|
|
35e3f001ea | ||
|
|
0f2e469c09 | ||
|
|
deb752f734 | ||
|
|
3fc70e2fea | ||
|
|
ce38e064ca | ||
|
|
844ffa5c04 | ||
|
|
48df0aaab3 | ||
|
|
2fb8433684 | ||
|
|
1d270ee1b8 | ||
|
|
b5ceeb4515 | ||
|
|
ff87ba9c8c | ||
|
|
72db1df466 | ||
|
|
54a5fc9907 | ||
|
|
7ba8e6ac92 | ||
|
|
a822a34d1f | ||
|
|
30c5428b9b | ||
|
|
6fc0cedcc4 | ||
|
|
bffb79fba4 | ||
|
|
28d3962d1c | ||
|
|
a357ee9941 | ||
|
|
1ad74d9573 | ||
|
|
10e89b1fe1 | ||
|
|
958eb32639 | ||
|
|
8eb9b8f0a4 | ||
|
|
2d71cdfd34 | ||
|
|
a381969d4b | ||
|
|
19bda9c5b4 | ||
|
|
2e3303aba3 | ||
|
|
d467ac443f | ||
|
|
ee91c93526 | ||
|
|
78a988a014 | ||
|
|
40ab4e24c2 | ||
|
|
7e703715de | ||
|
|
32be084c0d | ||
|
|
2942b6ec14 | ||
|
|
9c77028942 | ||
|
|
46c117ce24 | ||
|
|
ee3ae0195e | ||
|
|
3878388b37 | ||
|
|
8375804861 | ||
|
|
95c473d91f | ||
|
|
f2fb64c2b0 | ||
|
|
9c6f59c1bc | ||
|
|
a7c905c815 | ||
|
|
06e6756c90 | ||
|
|
fecb78c333 | ||
|
|
46ae2feaf6 | ||
|
|
029455ce00 | ||
|
|
7076897b3e | ||
|
|
74e8c79aee | ||
|
|
6fd2720736 | ||
|
|
ae77e7a50d | ||
|
|
43862866c9 | ||
|
|
3e20e3c9f8 | ||
|
|
f943290a72 | ||
|
|
12c693eddc | ||
|
|
2c41fcee8e | ||
|
|
07626caf03 | ||
|
|
51c8379638 | ||
|
|
04b95f4dc8 | ||
|
|
63dddcb481 | ||
|
|
b17a218841 | ||
|
|
82edaee5fd | ||
|
|
c55c5729bf | ||
|
|
e6c34329ce | ||
|
|
bbda7ba5f9 | ||
|
|
45af5d9205 | ||
|
|
92e68dfc65 | ||
|
|
32cc1b058d | ||
|
|
e48e8f2d29 | ||
|
|
46174c0743 | ||
|
|
ed44531bf7 | ||
|
|
e3c9501173 | ||
|
|
b29b821305 | ||
|
|
e3a4158f23 | ||
|
|
d3faa589a8 | ||
|
|
b95e63a5b4 | ||
|
|
f947f4cd1d | ||
|
|
1e3d5ba450 | ||
|
|
0acc6ca542 | ||
|
|
5933cc98ad | ||
|
|
4d0202fd67 | ||
|
|
192b3504ce | ||
|
|
9f409d725d | ||
|
|
ef91a50639 | ||
|
|
6e97ba1219 | ||
|
|
c1c9daa212 | ||
|
|
b60a74a4ad | ||
|
|
c98a42d36c | ||
|
|
a7cf237836 | ||
|
|
18cc0d16ad | ||
|
|
11b7cbc929 | ||
|
|
4d37f20e22 | ||
|
|
b72e71f599 | ||
|
|
2075fffe70 | ||
|
|
2e8156060c | ||
|
|
f6b554a247 | ||
|
|
ef37f01d6b | ||
|
|
cd80bcae09 | ||
|
|
dd54463213 | ||
|
|
bd2d50441f | ||
|
|
1c15d42fdc | ||
|
|
5cfbbcf32a | ||
|
|
4ba881400e | ||
|
|
b55b3fdd0a | ||
|
|
3b28c79e34 | ||
|
|
9e7997cf8f | ||
|
|
c7f2733666 | ||
|
|
68facdd18f | ||
|
|
683e42225e | ||
|
|
4d5a2ab87b | ||
|
|
9f09904749 | ||
|
|
32d49e99ef | ||
|
|
98dd2c0a11 | ||
|
|
3b49dc2ee0 | ||
|
|
4c0c3a4a5f | ||
|
|
00561c3ac2 | ||
|
|
6f4cc0d508 | ||
|
|
e5dbd8e46c | ||
|
|
585f8db549 | ||
|
|
0548c8d752 | ||
|
|
1e5029baa0 | ||
|
|
81b7cb0609 | ||
|
|
8de9921320 | ||
|
|
50d8b18e31 | ||
|
|
c107838ed8 | ||
|
|
a85efb80fe | ||
|
|
e3465d36d3 | ||
|
|
894a3093a8 | ||
|
|
7aeb518a89 | ||
|
|
9cdd5349d4 | ||
|
|
1bf72b035d | ||
|
|
d6af912e6b | ||
|
|
9d7c88bf0f | ||
|
|
49fdd7342b | ||
|
|
dbb888b9e4 | ||
|
|
cdfb0e8843 | ||
|
|
959530af7f | ||
|
|
17daad6c89 | ||
|
|
b8b7e2aad8 | ||
|
|
eead9a5a88 | ||
|
|
8d1a3e50ad | ||
|
|
01c6694fb0 | ||
|
|
3c97d71574 | ||
|
|
277db70498 | ||
|
|
7d9334c03f | ||
|
|
7be6ca734a | ||
|
|
c7fb9c9b8d | ||
|
|
4813ee1fb5 | ||
|
|
df0fe63adb | ||
|
|
dcb64db053 | ||
|
|
8efedabeea | ||
|
|
d392852b8d | ||
|
|
5affc13406 | ||
|
|
2f71de2522 | ||
|
|
b5302d6451 | ||
|
|
f8b96e3ccc | ||
|
|
1c1f6b4ffb | ||
|
|
2d4ae90954 | ||
|
|
3fed9e95f2 | ||
|
|
e975c8bd37 | ||
|
|
ef85abd9f6 | ||
|
|
b89d50bea6 | ||
|
|
7b2a873998 | ||
|
|
c284a78214 | ||
|
|
1bf4b1e8ce | ||
|
|
eb412a1084 | ||
|
|
6701e9f756 | ||
|
|
5866463772 | ||
|
|
7078bed4c2 | ||
|
|
771be1a754 | ||
|
|
33c04bdbcd | ||
|
|
fca5f936b6 | ||
|
|
8a81277731 | ||
|
|
acdf5c4519 | ||
|
|
091359746b | ||
|
|
d4cb26a5a5 | ||
|
|
62b079358d | ||
|
|
c40001880c | ||
|
|
2e948ad2a1 | ||
|
|
62ee59efe6 | ||
|
|
fbcbcd0525 | ||
|
|
e122629c02 | ||
|
|
37db318b92 | ||
|
|
86a2e3a240 | ||
|
|
8e9d0b3d88 | ||
|
|
6b62d7be44 | ||
|
|
e4d4ed51de | ||
|
|
a1c9fa94fc | ||
|
|
79433069fe | ||
|
|
8faabd6d22 | ||
|
|
bb133c06c7 | ||
|
|
d8bf92b6ae | ||
|
|
4810b7a02b | ||
|
|
f0ab457cc5 | ||
|
|
daa12e4677 | ||
|
|
d38bb8ed8a | ||
|
|
8d04bd2b3f | ||
|
|
9ffb6a51eb | ||
|
|
162e2c55f6 | ||
|
|
03d77c5703 | ||
|
|
57daa0c1d8 | ||
|
|
bb07dcd060 | ||
|
|
0c693e43f4 | ||
|
|
94fe1805c0 | ||
|
|
6196880718 | ||
|
|
0024d3d5a0 | ||
|
|
506155090b | ||
|
|
68bb6bc9f5 | ||
|
|
3bacac8880 | ||
|
|
82759475c2 | ||
|
|
03b5106a7d | ||
|
|
64d60374ad | ||
|
|
053a2189f9 | ||
|
|
eb5c9038cf | ||
|
|
160e6f3612 | ||
|
|
e71c17ced7 | ||
|
|
b31758739a | ||
|
|
ccffcb55f7 | ||
|
|
0aff791cb9 | ||
|
|
a4c6d0752a | ||
|
|
726247cc4d | ||
|
|
4f8c0449f6 | ||
|
|
4654e37492 | ||
|
|
9da1f5ac99 | ||
|
|
6066a3f6b7 | ||
|
|
a6d69ee7a9 | ||
|
|
6fbec6c4ac | ||
|
|
423120a721 | ||
|
|
1563915e68 | ||
|
|
99de0dcfe4 | ||
|
|
8199f3212e | ||
|
|
5691042e1a | ||
|
|
2148cb9588 | ||
|
|
fd3b2efa3d | ||
|
|
33f1b66d8d | ||
|
|
cae4b45d2a | ||
|
|
7bac622a2b | ||
|
|
b66fe4daa6 | ||
|
|
2d2c4ee08d | ||
|
|
44f587f973 | ||
|
|
5e2f906766 | ||
|
|
740d836499 | ||
|
|
cdfd3f16ea | ||
|
|
a5933e3056 | ||
|
|
1f5600967f | ||
|
|
129933a8e1 | ||
|
|
d425e02302 | ||
|
|
84fce2f4d0 | ||
|
|
8fc9ad32c9 | ||
|
|
10989a5c63 | ||
|
|
2c2c035c38 | ||
|
|
d6ff157597 | ||
|
|
4853a46dee | ||
|
|
b58ff873ce | ||
|
|
b33a07acac | ||
|
|
9fab2604f1 | ||
|
|
9a0f3c0f73 | ||
|
|
e89ffcfa69 | ||
|
|
c98d49b198 | ||
|
|
eaf74d1385 | ||
|
|
57cfc150dd | ||
|
|
ab0c84eed5 | ||
|
|
d3d1cc1737 | ||
|
|
2a0fe13317 | ||
|
|
1e2545b06e | ||
|
|
3ef0e979d6 | ||
|
|
1feaa18d99 | ||
|
|
882c8152e5 | ||
|
|
6230f9e9fc | ||
|
|
55cfbd140c | ||
|
|
47a1013472 | ||
|
|
1eecef7ab9 | ||
|
|
771a4a413c | ||
|
|
cdac858567 | ||
|
|
332d71dcd6 | ||
|
|
df8a43fb4b | ||
|
|
8cf71f5b3a | ||
|
|
0da2af51c6 | ||
|
|
f0a190276c | ||
|
|
e581097113 | ||
|
|
c6dedff679 | ||
|
|
8b4b053222 | ||
|
|
9635f6a744 | ||
|
|
fd265242d1 | ||
|
|
8d874344a1 | ||
|
|
cbe670e664 | ||
|
|
090ed9f1d8 | ||
|
|
b1349bfc27 | ||
|
|
1b1579ad1b | ||
|
|
9d54424523 | ||
|
|
aac36ae5fc | ||
|
|
6aca4b6fd3 | ||
|
|
031aded040 | ||
|
|
3f73bd8f1c | ||
|
|
ef4213df55 | ||
|
|
e0c2b84913 | ||
|
|
b79d78a9ba | ||
|
|
bf3e179429 | ||
|
|
3efa74f29a | ||
|
|
ffc08b399a | ||
|
|
7b958daef9 | ||
|
|
9dc50476ba | ||
|
|
0df56f2896 | ||
|
|
9a4d7c400a | ||
|
|
382d8d1033 | ||
|
|
017972b8e7 | ||
|
|
49e5e7ef43 | ||
|
|
4655b89dd2 | ||
|
|
cf86d9794f | ||
|
|
6ed15902f1 | ||
|
|
c8bc89976d | ||
|
|
a2d31aa7a4 | ||
|
|
7b4be20934 | ||
|
|
a7cc1f1d90 | ||
|
|
0cb86127e8 | ||
|
|
f293c3199e | ||
|
|
d52b4a440f | ||
|
|
cd9c15b996 | ||
|
|
85803b5778 | ||
|
|
5414422319 | ||
|
|
8e11dfccfb | ||
|
|
13939b4475 | ||
|
|
7249e646e8 | ||
|
|
e2a2334611 | ||
|
|
f71a66e60b | ||
|
|
a60ffc8372 | ||
|
|
e0ae7426cf | ||
|
|
de24b412d0 | ||
|
|
909cb57bf2 | ||
|
|
76de50edf5 | ||
|
|
8f851e5cc6 | ||
|
|
accbcfd4d4 | ||
|
|
2ab5ff1b7e | ||
|
|
81f9d1239b | ||
|
|
017fdeb690 | ||
|
|
d109e256c8 | ||
|
|
c3275fd05a | ||
|
|
aaeab928b0 | ||
|
|
7dc35af03b | ||
|
|
0f3521b995 | ||
|
|
64e797ea2e | ||
|
|
9a57de5d1c | ||
|
|
828fd37c82 | ||
|
|
a88a9de113 | ||
|
|
90b759e644 | ||
|
|
5b8a3fb3bf | ||
|
|
5794174f05 | ||
|
|
baabbfd4ab | ||
|
|
4565a3ff4d | ||
|
|
805ae75c20 | ||
|
|
794dab045a | ||
|
|
f6c2f11dc3 |
49
.gitattributes
vendored
49
.gitattributes
vendored
@@ -2,57 +2,8 @@
|
||||
# webmin .gitattribues file
|
||||
# help git / github to know the encoding of webmin (lang) files
|
||||
|
||||
# set default encoding to iso-8859-1 aka ASCII
|
||||
* working-tree-encoding=iso8859-1 git-encoding=iso8859-1
|
||||
|
||||
# force module.info to iso-8859-1 even it contains other encodings
|
||||
*/module.info working-tree-encoding=iso8859-1 git-encoding=iso8859-1
|
||||
|
||||
# set all .UTF-8 to UTF-8
|
||||
*.UTF-8 working-tree-encoding=UTF-8 git-encoding=UTF-8
|
||||
|
||||
# set all non iso8859-1 lang files to correct encoding
|
||||
**/lang/ru_SU working-tree-encoding=koi8-r git-encoding=koi8-r
|
||||
**/lang/ru_RU working-tree-encoding=windows-1251 git-encoding=windows-1251
|
||||
**/lang/zh_TW.Big5 working-tree-encoding=Big5 git-encoding=Big5
|
||||
**/lang/zh_CN working-tree-encoding=GB2312 git-encoding=GB2312
|
||||
**/lang/hu working-tree-encoding=iso-8859-2 git-encoding=iso-8859-2
|
||||
**/lang/he working-tree-encoding=iso-8859-8-I git-encoding=iso-8859-8-I
|
||||
**/lang/tr working-tree-encoding=iso-8859-9 git-encoding=iso-8859-9
|
||||
**/lang/pl working-tree-encoding=iso-8859-2 git-encoding=iso-8859-2
|
||||
**/lang/ja_JP.euc working-tree-encoding=EUC-JP git-encoding=EUC-JP
|
||||
**/lang/si working-tree-encoding=iso-8859-2 git-encoding=iso-8859-2
|
||||
**/lang/ko_KR.euc working-tree-encoding=EUC-KR git-encoding=EUC-KR
|
||||
**/lang/cz working-tree-encoding=iso-8859-2 git-encoding=iso-8859-2
|
||||
**/lang/th working-tree-encoding=tis-620 git-encoding=tis-620
|
||||
**/lang/no working-tree-encoding=iso-8859-15 git-encoding=iso-8859-15
|
||||
**/lang/sk working-tree-encoding=iso-8859-2 git-encoding=iso-8859-2
|
||||
**/lang/lt working-tree-encoding=windows-1257 git-encoding=windows-1257
|
||||
**/lang/bg working-tree-encoding=windows-1251 git-encoding=windows-1251
|
||||
**/lang/el working-tree-encoding=iso-8859-7 git-encoding=iso-8859-7
|
||||
**/lang/uk_UA working-tree-encoding=windows-1251 git-encoding=windows-1251
|
||||
**/lang/ar working-tree-encoding=iso-8859-6-I git-encoding=iso-8859-6-I
|
||||
**/lang/fa working-tree-encoding=UTF-8 git-encoding=UTF-8
|
||||
|
||||
# set all non iso8859-1 config.info files to correct encoding
|
||||
*/config.info.ru_SU working-tree-encoding=koi8-r git-encoding=koi8-r
|
||||
*/lconfig.info.ru_RU working-tree-encoding=windows-1251 git-encoding=windows-1251
|
||||
*/config.info.zh_TW.Big5 working-tree-encoding=Big5 git-encoding=Big5
|
||||
*/config.info.zh_CN working-tree-encoding=GB2312 git-encoding=GB2312
|
||||
*/lconfig.info.hu working-tree-encoding=iso-8859-2 git-encoding=iso-8859-2
|
||||
*/config.info.he working-tree-encoding=iso-8859-8-I git-encoding=iso-8859-8-I
|
||||
*/config.info.tr working-tree-encoding=iso-8859-9 git-encoding=iso-8859-9
|
||||
*/config.info.pl working-tree-encoding=iso-8859-2 git-encoding=iso-8859-2
|
||||
*/config.info.ja_JP.euc working-tree-encoding=EUC-JP git-encoding=EUC-JP
|
||||
*/config.info.si working-tree-encoding=iso-8859-2 git-encoding=iso-8859-2
|
||||
*/config.info.ko_KR.euc working-tree-encoding=EUC-KR git-encoding=EUC-KR
|
||||
*/lconfig.info.cz working-tree-encoding=iso-8859-2 git-encoding=iso-8859-2
|
||||
*/lconfig.info.th working-tree-encoding=tis-620 git-encoding=tis-620
|
||||
*/config.info.no working-tree-encoding=iso-8859-15 git-encoding=iso-8859-15
|
||||
*/config.info.sk working-tree-encoding=iso-8859-2 git-encoding=iso-8859-2
|
||||
*/config.info.lt working-tree-encoding=windows-1257 git-encoding=windows-1257
|
||||
*/lconfig.info.bg working-tree-encoding=windows-1251 git-encoding=windows-1251
|
||||
*/config.info.el working-tree-encoding=iso-8859-7 git-encoding=iso-8859-7
|
||||
*/config.info.uk_UA working-tree-encoding=windows-1251 git-encoding=windows-1251
|
||||
*/config.info.ar working-tree-encoding=iso-8859-6-I git-encoding=iso-8859-6-I
|
||||
*/config.info.fa working-tree-encoding=UTF-8 git-encoding=UTF-8
|
||||
|
||||
40
CHANGELOG.md
Normal file
40
CHANGELOG.md
Normal file
@@ -0,0 +1,40 @@
|
||||
## Changelog
|
||||
|
||||
#### Version 1.930 (August 18, 2019)
|
||||
These updates fix a [security vulnerability](http://webmin.com/security.html) and should be installed IMMEDIATELY by all users. Although it is not exploitable in a Webmin install with the default configuration, upgrading is strongly recommended.
|
||||
|
||||
#### Version 1.920 (July 04, 2019)
|
||||
This update includes the latest theme version, translation updates, the ability to disable hosts file entries, easier monitoring of bootup actions, and a bunch of bugfixes.
|
||||
|
||||
#### Version 1.910 (May 09, 2019)
|
||||
This release includes theme and translation updates, a page for editing package repositories, cron and status module improvements, and a bunch of other bugfixes and small improvements.
|
||||
|
||||
#### Version 1.900 (November 19, 2018)
|
||||
This version includes wildcard Let's Encrypt SSL cert support, theme and translation updates, support for announcements to Webmin users, and a bunch of other bugfixes and small improvements.
|
||||
|
||||
#### Version 1.890 (July 19, 2018)
|
||||
This version includes Ubuntu 18 network config support, translation updates, multiple theme and file manager updates, BIND freeze/thaw support, support for more Linux distributuions, and a bunch of other bugfixes and small improvements.
|
||||
|
||||
#### Version 1.880 (March 16, 2018)
|
||||
This version includes German, Catalan and Bulgarian translation updates, a new version of the Authentic Theme, support for directly editing the MySQL and PostgreSQL config files, Let's Encrypt bugfixes, more control over system status email notifications, and more.
|
||||
|
||||
#### Version 1.870 (December 08, 2018)
|
||||
This release includes many translation updates, fixes for Let's Encrypt support, UI cleanups, and most importantly a new major version of the Authentic Theme.
|
||||
|
||||
#### Version 1.860 (October 10, 2017)
|
||||
This release includes Let's Encrypt DNS fixes, Majordomo module improvements, XSS security bugfixes, translation updates, a new version of the theme, and more.
|
||||
|
||||
#### Version 1.850 (June 28, 2017)
|
||||
This release includes Let's Encrypt fixes, Majordomo module improvements, FirewallD forwarding support, translation updates, an update to the Authentic theme, and a bunch of other bugfixes.
|
||||
|
||||
#### Version 1.840 (May 08, 2017)
|
||||
This major release includes a large theme update, XSS security fixes, per-domain SSL cert support, thin-provisioned LVM support, Let's Encrypt improvements, translation updates, and the usual gang of bugfixes. Also available is Usermin 1.710, which contains many of the same updates.
|
||||
|
||||
#### Version 1.830 (December 29, 2016)
|
||||
This is mainly a bugfix release, but also contains some translation updates, the latest version of the Authentic Theme, fixes related to Let's Encrypt and LDAP client support, and SElinux and file attribute support in the file manager.
|
||||
|
||||
#### Version 1.820 (October 3, 2016)
|
||||
This updated includes a bunch of bugfixes (particularly in the BIND module), translation updates, the ability to download a MySQL backup, Let's Encrypt improvements, and more.
|
||||
|
||||
#### Version 1.810 (August 8, 2016)
|
||||
This updated includes the latest Authentic Theme, a new IPv6 Firewall module for Linux, Webmin actions logging improvements, Let's Encrypt API fixes and a bunch of other small updates and bugfixes.
|
||||
29
IDEAS
29
IDEAS
@@ -1,29 +0,0 @@
|
||||
- DHCP class support
|
||||
- Jump to page support in sendmail mailq and other mailqs
|
||||
- Common functionality between sendmail, qmail and postfix?
|
||||
- Clean up mailq code in sendmail module!
|
||||
- Update all code which uses remote_ functions to pass in server object
|
||||
- Function to open a file in read mode, which checks for < or > characters
|
||||
- Ties into common callback for modifying file, based on file and module
|
||||
- Foreign_require should allow a different package name to be specified,
|
||||
for zone clones with different behaviour
|
||||
- Change all open() calls to use new API, and mention in module docs
|
||||
- Bandwidth modules should use some kind of logging socket instead of
|
||||
syslog, which writes to a daemon.
|
||||
- reset session timeout every time a key is pressed, to prevent timeouts
|
||||
when composing mail. Do on all pages.
|
||||
- covert more modules to readonly support (init first)
|
||||
- perhaps need untranslate_file function? call in software/*-lib.pl
|
||||
- writes to temp files should be allowed
|
||||
- all firewall modules need ability to setup port redirection
|
||||
- for calling from squid and frox modules, polymorphically
|
||||
- better support for includes in samba module
|
||||
- need to expand inline
|
||||
- keep track of file and line for each directive
|
||||
- allow copying from view_mail.cgi in mailboxes module (for subs too)
|
||||
- Support IPFW tables
|
||||
- integrate venu's file manager
|
||||
- clone user in useradmin / ldap-useradmin
|
||||
- improved NFS export support on OSX
|
||||
- Use CPAN to install Perl modules
|
||||
- FS#5583
|
||||
53
LICENCE
53
LICENCE
@@ -1,29 +1,30 @@
|
||||
---------------------------------------------------------
|
||||
Copyright (c) Jamie Cameron
|
||||
All rights reserved.
|
||||
BSD 3-Clause License
|
||||
|
||||
Redistribution and use in source and binary forms, with or without
|
||||
modification, are permitted provided that the following conditions
|
||||
are met:
|
||||
1. Redistributions of source code must retain the above copyright
|
||||
notice, this list of conditions and the following disclaimer.
|
||||
2. Redistributions in binary form must reproduce the above copyright
|
||||
notice, this list of conditions and the following disclaimer in the
|
||||
documentation and/or other materials provided with the distribution.
|
||||
3. Neither the name of the developer nor the names of contributors
|
||||
may be used to endorse or promote products derived from this software
|
||||
without specific prior written permission.
|
||||
Copyright (c) Jamie Cameron
|
||||
|
||||
THIS SOFTWARE IS PROVIDED BY THE DEVELOPER ``AS IS'' AND
|
||||
ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||||
IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
||||
ARE DISCLAIMED. IN NO EVENT SHALL THE DEVELOPER OR CONTRIBUTORS BE LIABLE
|
||||
FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
||||
DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
|
||||
OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
|
||||
HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
|
||||
LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
|
||||
OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
|
||||
SUCH DAMAGE.
|
||||
---------------------------------------------------------
|
||||
All rights reserved.
|
||||
|
||||
Redistribution and use in source and binary forms, with or without
|
||||
modification, are permitted provided that the following conditions are met:
|
||||
|
||||
1. Redistributions of source code must retain the above copyright notice, this
|
||||
list of conditions and the following disclaimer.
|
||||
|
||||
2. Redistributions in binary form must reproduce the above copyright notice,
|
||||
this list of conditions and the following disclaimer in the documentation
|
||||
and/or other materials provided with the distribution.
|
||||
|
||||
3. Neither the name of the copyright holder nor the names of its
|
||||
contributors may be used to endorse or promote products derived from
|
||||
this software without specific prior written permission.
|
||||
|
||||
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
|
||||
AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||||
IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
||||
DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
|
||||
FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
||||
DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
|
||||
SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
|
||||
CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
|
||||
OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
||||
OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
|
||||
56
README
56
README
@@ -1,56 +0,0 @@
|
||||
Webmin Version 1.910
|
||||
--------------------
|
||||
Webmin is a web-based interface for system administration for Unix.
|
||||
Using any browser that supports tables and forms, you can setup user
|
||||
accounts, Apache, internet services, DNS, file sharing and so on.
|
||||
|
||||
Webmin consists of a simple web server, and a number of CGI programs
|
||||
which directly update system files like /etc/inetd.conf and /etc/passwd.
|
||||
The web server and all CGI programs are written in Perl version 5, and use
|
||||
only the standard perl modules.
|
||||
|
||||
Webmin can be installed in two different ways :
|
||||
|
||||
1) By just running the setup.sh script in the same directory as this README
|
||||
file, with no arguments. You will be asked a series of questions such as
|
||||
the configuration directory, your chosen login name and password, and
|
||||
possibly your operating system. For questions where a default is shown
|
||||
in square brackets, you can just hit enter to accept the default (which
|
||||
is usually correct).
|
||||
|
||||
If the configuration directory you enter is the same as that used by
|
||||
a previous install of Webmin, it will be automatically upgraded with all
|
||||
configurable settings preserved.
|
||||
|
||||
This will set up Webmin to run directly from this directory. After running
|
||||
setup.sh, do not delete the directory as it contains all the scripts and
|
||||
programs that will be used by Webmin when it is running. Unlike in the second
|
||||
installation method, the Webmin scripts do not get copied to another
|
||||
location when installing.
|
||||
|
||||
2) By running the setup.sh script in this directory, but with a command-line
|
||||
argument such as /usr/local/webmin . When a directory like this is provided,
|
||||
Webmin's scripts will be copied to the chosen directory and it will be
|
||||
configured to run from that location.
|
||||
|
||||
The exact same questions will be asked by setup.sh when it is run with
|
||||
a directory argument, and upgrading will work in the same way. If you
|
||||
are upgrading an old install, you should enter the same directory argument
|
||||
so that the new files overwrite the old in order to save disk space.
|
||||
|
||||
After Webmin has been installed to a specific directory using this method,
|
||||
the directory extracted from the tar.gz file can be safely deleted.
|
||||
|
||||
If you are installing Webmin on a Windows system, you must run the command
|
||||
perl setup.pl instead, as shell scripts will not typically run on a Windows
|
||||
system. The Windows version depends on several programs and modules that may
|
||||
not be part of the standard distribution. You will need the process.exe
|
||||
commmand, the sc.exe command and the Win32::Daemon Perl module.
|
||||
|
||||
For more information, see http://www.webmin.com/
|
||||
|
||||
For documentation, see http://doxfer.webmin.com/
|
||||
|
||||
Jamie Cameron
|
||||
jcameron@webmin.com
|
||||
|
||||
53
README.md
Normal file
53
README.md
Normal file
@@ -0,0 +1,53 @@
|
||||
## Contents
|
||||
* [Changelog](https://github.com/webmin/webmin/blob/master/CHANGELOG.md)
|
||||
* [About](#about)
|
||||
* [Installation](#installation)[<img src="https://github.com/webmin-devel/webmin/blob/master/media/download-23x14-stable.png?raw=true" title="Stable Versions">](http://webmin.com/download.html)[<img src="https://github.com/webmin-devel/webmin/blob/master/media/download-23x14-devel.png?raw=true" title="Development Versions">](http://webmin.com/devel.html)
|
||||
* [Documentation](#documentation)
|
||||
* [Development](#development)
|
||||
* [License](#license)
|
||||
|
||||
## About
|
||||
|
||||
**Webmin** is a web-based system administration tool for Unix-like servers, and services with over _1,000,000_ installations worldwide. Using it, it is possible to configure operating system internals, such as users, disk quotas, services or configuration files, as well as modify, and control open-source apps, such as BIND DNS Server, Apache HTTP Server, PHP, MySQL, and [many more](https://doxfer.webmin.com/Webmin/Introduction).
|
||||
|
||||

|
||||
|
||||
Usability can be expanded by installing modules, which can be custom made. Aside from this, there are two other major projects that extend its functionality:
|
||||
|
||||
* [Virtualmin](https://www.virtualmin.com) is a powerful, flexible, most popular, and most comprehensive web-hosting control panel for Linux, and BSD systems, with over _100,000_ installations worldwide. It is available in an open-source community-supported version, and a more feature-filled version with premium support;
|
||||
* [Usermin](https://github.com/webmin/usermin) presents and controls a subset of user-centred features, rather than administrator-level tasks.
|
||||
|
||||
Webmin includes _116_ [standard modules](https://doxfer.webmin.com/Webmin/Webmin_Modules), and there are at least as many third-party modules.
|
||||
|
||||
|
||||
### Requirements
|
||||
Perl 5.10 or higher.
|
||||
|
||||
## Installation
|
||||
Webmin can be installed in two different ways:
|
||||
|
||||
1. By downloading a pre-built package, available for different distributions (CentOS, Fedora, SuSE, Mandriva, Debian, Ubuntu, Solaris and [other](http://www.webmin.com/support.html)) from our [download page](http://webmin.com/download.html);
|
||||
<kbd>Note: It is highly recommended to [add repository](https://doxfer.webmin.com/Webmin/Installation) to your system for having automatic updates.</kbd>
|
||||
|
||||
2. By downloading, extracting [source file](https://prdownloads.sourceforge.net/webadmin/webmin-1.941.tar.gz), and running [_setup.sh_](http://www.webmin.com/tgz.html) script, with no arguments, which will setup to run it directly from this directory, or with a command-line argument, such as targeted directory.
|
||||
<kbd>Note: If you are installing Webmin [on Windows](http://www.webmin.com/windows.html) system, you must run the command `perl setup.pl` instead. The Windows version depends on several programs, and modules that may not be part of the standard distribution. You will need _process.exe_ commmand, _sc.exe_ command, and _Win32::Daemon_ Perl module.</kbd>
|
||||
|
||||
## Documentation
|
||||
Complete set of documentation for Webmin and all of its modules can be found at out [Wiki page](https://doxfer.webmin.com/Webmin/Main_Page).
|
||||
|
||||
## Development
|
||||
|
||||
### Lead developer
|
||||
|
||||
* [Jamie Cameron](http://www.webmin.com/about.html) [](https://www.linkedin.com/in/jamiecameron2)
|
||||
|
||||
### Contributors
|
||||
|
||||
* [Joe Cooper](https://github.com/swelljoe)
|
||||
* [Ilia Rostovtsev](https://github.com/rostovtsev)
|
||||
* [Kay Marquardt](https://github.com/gnadelwartz)
|
||||
* [Nawawi Jamili](https://github.com/nawawi) + [57 more..](https://github.com/webmin/webmin/graphs/contributors)
|
||||
|
||||
## License
|
||||
|
||||
Webmin is released under the [BSD License](https://github.com/webmin/webmin/blob/master/LICENCE).
|
||||
104
RELEASE
104
RELEASE
@@ -1,104 +0,0 @@
|
||||
Release Checklist
|
||||
-----------------
|
||||
|
||||
x Check all .cgi and .pl files for syntax errors!
|
||||
find . -name "*.cgi" | grep -v shellinabox.cgi | grep -v thirdparty-cgi-scripts | grep -v ipweb | grep -v ipcache | grep -v thejax-theme | xargs -l1 perl -c |& grep -v OK
|
||||
find . -name "*.pl" | grep -v config.info | grep -v makemodulerpm.pl | grep -v ipcache | grep -v swell-tsunami-theme | grep -v Authen-SolarisRBAC-0.1 | grep -v virtualmin-nuvola | grep -v win32.pl | grep -v asterisk | grep -v server-manager | grep -v thejax-theme | grep -v exim | grep -v Webmin-API-1.0 | xargs -l1 perl -c |& grep -v OK
|
||||
|
||||
x Make sure all cgi programs are executable
|
||||
find . -name "*.cgi" | xargs chmod +x
|
||||
|
||||
x Make sure all files are world-readable, but not world-writable
|
||||
find . -type f | grep -v shellinabox | grep -v asterisk | xargs chmod +r
|
||||
find . -type f | grep -v shellinabox | grep -v asterisk | xargs chmod o-w
|
||||
find . -type d | grep -v shellinabox | grep -v asterisk | xargs chmod +rx
|
||||
find . -type d | grep -v shellinabox | grep -v asterisk | xargs chmod o-w
|
||||
|
||||
x Delete all ~, .rej and .orig files
|
||||
find . -name "*~" -o -name "*.rej" -o -name "*.orig" -o -name ".*.swp" | xargs rm
|
||||
|
||||
x Create and check in UTF-8 translations
|
||||
./chinese-to-utf8.pl
|
||||
find . -name '*.UTF-8*' | grep -v sccb- | xargs -l1 git add
|
||||
git commit ; git push
|
||||
|
||||
x Check language files for clashes
|
||||
langcheck.pl lang/en */lang/en | grep -v asterisk/lang | grep -v rae-mpp/lang
|
||||
|
||||
x Update README and version files
|
||||
|
||||
x Run Virtualmin tests
|
||||
x fudu
|
||||
x lentor
|
||||
x xencentos
|
||||
|
||||
x Build .tar.gz, minimal.tar.gz and Solaris, RPM and Debian packages
|
||||
|
||||
x Install on test system
|
||||
vm2 create-system --type kvm --host webmintest --kvm-host fudu.home --ssh-pass smeg --image kvm-centos5.4-base --desc "Webmin install test" --kvm-memory 256
|
||||
vm2 upload-file --host webmintest.home --source /usr/local/webadmin/rpm/webmin-$ver-1.noarch.rpm --dest /tmp/webmin.rpm
|
||||
vm2 run-command --host webmintest.home "/etc/init.d/iptables stop ; chkconfig iptables off"
|
||||
vm2 run-command --host webmintest.home "rpm -U /tmp/webmin.rpm"
|
||||
vm2 refresh-systems --host webmintest.home
|
||||
vm2 reboot-system --host webmintest.home
|
||||
vm2 refresh-systems --host webmintest.home
|
||||
vm2 run-command --host webmintest.home "rpm -U --force /tmp/webmin.rpm"
|
||||
vm2 refresh-systems --host webmintest.home
|
||||
vm2 delete-system --host webmintest.home
|
||||
|
||||
x Upload files to sourceforge
|
||||
/usr/local/webadmin/copy-devels.sh
|
||||
Create new dir at https://sourceforge.net/projects/webadmin/files/webmin/
|
||||
scp /tmp/devel/*/*$ver* jcameron,webadmin@frs.sourceforge.net:/home/frs/project/w/we/webadmin/webmin/$ver/
|
||||
Set default downloads for files at https://sourceforge.net/projects/webadmin/files/webmin/
|
||||
|
||||
x Upload signatures to sourceforge (with copy-sigs.sh)
|
||||
|
||||
x Update .htaccess redirects in download directory on sourceforge
|
||||
scp .htaccess web.sourceforge.net:htdocs/.htaccess
|
||||
|
||||
x Copy module .wbm files to sourceforge (with modules-release.sh)
|
||||
|
||||
x Upload Debian files to site, with :
|
||||
scp deb/webmin_*.dsc deb/webmin_*.diff webadmin@download.webmin.com:domains/download.webmin.com/public_html/download/deb/
|
||||
|
||||
x Generate MD5 checksums with :
|
||||
cd ~/webmin.com ; ./make-md5.pl $ver >md5.html
|
||||
|
||||
x Update and upload website HTML, including lang.html, support.html
|
||||
and standard.html
|
||||
Need to run makestandard.pl, makesupport.pl and lang_table.pl
|
||||
|
||||
x Update freshmeat.net entry
|
||||
|
||||
x Send to mailing list
|
||||
|
||||
x Add new modules to thirdpartymodules.com
|
||||
|
||||
x Update versions on thirdpartymodules.com at https://mysql-w.sourceforge.net/
|
||||
- w30065admin / 1diamond
|
||||
- update webminmodules set version = XXX where standard = 'Y'
|
||||
|
||||
x Add version to bug tracker
|
||||
- https://sourceforge.net/tracker/admin/?group_id=17457
|
||||
|
||||
x Add new modules to bug tracker
|
||||
|
||||
n Notify mirror site owners at webmin-mirrors@webmin.com
|
||||
|
||||
x Copy APT repository with commands (on lentor)
|
||||
/usr/local/download/deb/repository/make-repo.sh
|
||||
rsync -rv --rsh=ssh --delete /usr/local/download/deb/repository webadmin@download.webmin.com:domains/download.webmin.com/public_html/download
|
||||
|
||||
x Create YUM repository with commands
|
||||
/usr/local/download/rpm/yum/make-repo.sh
|
||||
rsync -rv --rsh=ssh /usr/local/download/rpm/yum webadmin@download.webmin.com:domains/download.webmin.com/public_html/download
|
||||
|
||||
- Tell Joe
|
||||
|
||||
x Facebook
|
||||
|
||||
x Update Cloudmin repos
|
||||
x RPM
|
||||
x .wbm
|
||||
x Debian
|
||||
File diff suppressed because one or more lines are too long
@@ -64,3 +64,5 @@ Converted all pages to use the common Webmin UI library for a more consistent in
|
||||
Made all code Perl strict and warnings compliant.
|
||||
---- Changes since 1.670 ----
|
||||
Added a button for adding multiple Webmin users to a group.
|
||||
---- Changes since 1.930 ----
|
||||
Added support for creating "safe-mode" Webmin users who have access only to modules and permissions that don't grant root access.
|
||||
|
||||
@@ -755,9 +755,9 @@ my ($user, $oldpass, $miniserv) = @_;
|
||||
if ($oldpass ne $user->{'pass'} &&
|
||||
"!".$oldpass ne $user->{'pass'} &&
|
||||
$oldpass ne "!".$user->{'pass'} &&
|
||||
$user->{'pass'} ne 'x' &&
|
||||
$user->{'pass'} ne 'e' &&
|
||||
$user->{'pass'} ne '*LK*') {
|
||||
$oldpass ne 'x' &&
|
||||
$oldpass ne 'e' &&
|
||||
$oldpass ne '*LK*') {
|
||||
# Password change detected .. update change time
|
||||
# and save the old one
|
||||
my $nolock = $oldpass;
|
||||
@@ -2167,5 +2167,16 @@ foreach $a (split(/\s+/, $miniserv{'anonymous'})) {
|
||||
return @rv;
|
||||
}
|
||||
|
||||
# get_safe_acl(module)
|
||||
# Returns the safe ACL hash ref for a module, if there is one, or undef
|
||||
sub get_safe_acl
|
||||
{
|
||||
my ($m) = @_;
|
||||
my $mdir = &module_root_directory($m);
|
||||
my %rv;
|
||||
&read_file_cached("$mdir/safeacl", \%rv) || return undef;
|
||||
return \%rv;
|
||||
}
|
||||
|
||||
1;
|
||||
|
||||
|
||||
@@ -54,17 +54,26 @@ if ($in{'mod'} && $in{'user'} && &supports_rbac($in{'mod'}) &&
|
||||
[ 0, $text{'no'} ] ]), 3);
|
||||
}
|
||||
|
||||
if ($in{'mod'}) {
|
||||
# Load custom ACL library
|
||||
my $mdir = &module_root_directory($in{'mod'});
|
||||
if (-r "$mdir/acl_security.pl") {
|
||||
&foreign_require($in{'mod'}, "acl_security.pl");
|
||||
}
|
||||
|
||||
my $shown_config = 0;
|
||||
if ($in{'mod'} && -r "$mdir/config.info" &&
|
||||
(!&foreign_defined($in{'mod'}, "acl_security_noconfig") ||
|
||||
!&foreign_call($in{'mod'}, "acl_security_noconfig"))) {
|
||||
# Show module config editing option
|
||||
print &ui_table_row($text{'acl_config'},
|
||||
&ui_radio("noconfig", $maccess{'noconfig'} ? 1 : 0,
|
||||
[ [ 0, $text{'yes'} ], [ 1, $text{'no'} ] ]), 3);
|
||||
$shown_config = 1;
|
||||
}
|
||||
|
||||
my $mdir = &module_root_directory($in{'mod'});
|
||||
# Show custom ACL form
|
||||
if (-r "$mdir/acl_security.pl") {
|
||||
print &ui_table_hr() if ($in{'mod'});
|
||||
&foreign_require($in{'mod'}, "acl_security.pl");
|
||||
print &ui_table_hr() if ($shown_config);
|
||||
&foreign_call($in{'mod'}, "load_theme_library");
|
||||
&foreign_call($in{'mod'}, "acl_security_form", \%maccess);
|
||||
}
|
||||
|
||||
@@ -9,7 +9,7 @@ our (%in, %text, %config, %access, $config_directory, $base_remote_user);
|
||||
&foreign_require("webmin", "webmin-lib.pl");
|
||||
|
||||
&ReadParse();
|
||||
my ($u, %user);
|
||||
my ($u, %user, $safe);
|
||||
if ($in{'user'}) {
|
||||
# Editing an existing user
|
||||
&can_edit_user($in{'user'}) || &error($text{'edit_euser'});
|
||||
@@ -17,20 +17,27 @@ if ($in{'user'}) {
|
||||
$u = &get_user($in{'user'});
|
||||
$u || &error($text{'edit_egone'});
|
||||
%user = %$u;
|
||||
my %gacl = &get_module_acl($in{'user'}, '');
|
||||
$safe = $gacl{'_safe'};
|
||||
}
|
||||
else {
|
||||
# Creating a new user
|
||||
$access{'create'} || &error($text{'edit_ecreate'});
|
||||
&ui_print_header(undef, $text{'edit_title2'}, "");
|
||||
if ($in{'clone'}) {
|
||||
# Initial settings come from clone
|
||||
$u = &get_user($in{'clone'});
|
||||
%user = %$u;
|
||||
delete($user{'name'});
|
||||
my %gacl = &get_module_acl($in{'clone'}, '');
|
||||
$safe = $gacl{'_safe'};
|
||||
}
|
||||
else {
|
||||
# User starts out empty
|
||||
%user = ( );
|
||||
$safe = $in{'safe'};
|
||||
}
|
||||
&ui_print_header(undef, $safe ? $text{'edit_title3'}
|
||||
: $text{'edit_title2'}, "");
|
||||
}
|
||||
my $me = &get_user($base_remote_user);
|
||||
|
||||
@@ -51,6 +58,7 @@ if ($in{'user'}) {
|
||||
if ($in{'clone'}) {
|
||||
print &ui_hidden("clone", $in{'clone'});
|
||||
}
|
||||
print &ui_hidden("safe", $safe);
|
||||
print &ui_hidden_table_start($text{'edit_rights'}, "width=100%", 2, "rights",
|
||||
1, [ "width=30%" ]);
|
||||
|
||||
@@ -155,6 +163,17 @@ if ($in{'user'}) {
|
||||
$text{'edit_proto_'.($user{'proto'} || '')});
|
||||
}
|
||||
|
||||
# Safe or not?
|
||||
my $smsg;
|
||||
if ($in{'user'} && $safe) {
|
||||
$smsg = &ui_radio("unsafe", 0, [ [ 0, $text{'edit_safe1'} ],
|
||||
[ 1, $text{'edit_safe0'} ] ]);
|
||||
}
|
||||
else {
|
||||
$smsg = $safe ? $text{'edit_safe1'} : $text{'edit_safe0'};
|
||||
}
|
||||
print &ui_table_row($text{'edit_safe'}, $smsg);
|
||||
|
||||
print &ui_hidden_table_end("rights");
|
||||
|
||||
# Start of UI options section
|
||||
@@ -332,9 +351,16 @@ my @groups = &list_groups();
|
||||
print &ui_hidden_table_start(@groups ? $text{'edit_modsg'} : $text{'edit_mods'},
|
||||
"width=100%", 2, "mods");
|
||||
|
||||
# Build list of modules, based on safe mode
|
||||
my @allmods = &list_module_infos();
|
||||
if ($safe) {
|
||||
@allmods = grep { $has{$_->{'dir'}} ||
|
||||
&get_safe_acl($_->{'dir'}) } @allmods;
|
||||
}
|
||||
|
||||
# Show available modules, under categories
|
||||
my @mlist = grep { $access{'others'} || $has{$_->{'dir'}} ||
|
||||
$mcan{$_->{'dir'}} } &list_module_infos();
|
||||
$mcan{$_->{'dir'}} } @allmods;
|
||||
my @links = ( &select_all_link("mod", 0, $text{'edit_selall'}),
|
||||
&select_invert_link("mod", 0, $text{'edit_invert'}) );
|
||||
my @cats = &unique(map { $_->{'category'} || '' } @mlist);
|
||||
@@ -359,7 +385,7 @@ foreach my $c (sort { $b cmp $a } @cats) {
|
||||
}
|
||||
elsif ($mcan{$md}) {
|
||||
my $label;
|
||||
if ($access{'acl'} && $in{'user'}) {
|
||||
if ($access{'acl'} && $in{'user'} && !$safe) {
|
||||
# Show link for editing ACL
|
||||
$label = ui_link("edit_acl.cgi?" .
|
||||
"mod=" . urlize($m->{'dir'}) .
|
||||
@@ -387,7 +413,7 @@ print &ui_hidden_table_end("mods");
|
||||
|
||||
# Add global ACL section, but only if not set from the group
|
||||
my $groupglobal = $memg && -r "$config_directory/$memg->{'name'}.acl";
|
||||
if ($access{'acl'} && !$groupglobal && $in{'user'}) {
|
||||
if ($access{'acl'} && !$groupglobal && $in{'user'} && !$safe) {
|
||||
print &ui_hidden_table_start($text{'edit_global'}, "width=100%", 2,
|
||||
"global", 0, [ "width=30%" ]);
|
||||
my %uaccess;
|
||||
|
||||
@@ -54,7 +54,10 @@ if (!@canulist) {
|
||||
print &ui_subheading($text{'index_users'})
|
||||
if (!$config{'display'});
|
||||
print "<b>$text{'index_nousers'}</b><p>\n";
|
||||
print ui_link("edit_user.cgi", $text{'index_create'}) . "\n";
|
||||
print &ui_links_row([
|
||||
&ui_link("edit_user.cgi", $text{'index_create'}),
|
||||
&ui_link("edit_user.cgi?ssfe=1", $text{'index_screate'})
|
||||
]);
|
||||
$shown_users = 1;
|
||||
}
|
||||
}
|
||||
@@ -64,7 +67,8 @@ elsif ($config{'display'}) {
|
||||
print &ui_form_start("delete_users.cgi", "post");
|
||||
&show_name_table(\@canulist, "edit_user.cgi",
|
||||
$access{'create'} ? $text{'index_create'} : undef,
|
||||
$text{'index_users'}, "user");
|
||||
$text{'index_users'}, "user",
|
||||
$access{'create'} ? $text{'index_screate'} : undef);
|
||||
print &ui_form_end([ [ "delete", $text{'index_delete'} ],
|
||||
@gbut ]);
|
||||
$shown_users = 1;
|
||||
@@ -77,7 +81,8 @@ else {
|
||||
print &ui_form_start("delete_users.cgi", "post");
|
||||
push(@rowlinks, &select_all_link("d", $form),
|
||||
&select_invert_link("d", $form));
|
||||
push(@rowlinks, ui_link("edit_user.cgi", $text{'index_create'}))
|
||||
push(@rowlinks, ui_link("edit_user.cgi", $text{'index_create'}),
|
||||
ui_link("edit_user.cgi?safe=1", $text{'index_screate'}))
|
||||
if ($access{'create'});
|
||||
print &ui_links_row(\@rowlinks);
|
||||
|
||||
@@ -251,20 +256,24 @@ $rv .= &ui_grid_table(\@grid, 3, 100,
|
||||
return $rv;
|
||||
}
|
||||
|
||||
# show_name_table(&users|&groups, cgi, create-text, header-text, param)
|
||||
# show_name_table(&users|&groups, cgi, create-text, header-text, param,
|
||||
# safe-text)
|
||||
sub show_name_table
|
||||
{
|
||||
my ($users, $cgi, $ctext, $htext, $param, $stext) = @_;
|
||||
|
||||
# Show table of users, and maybe create links
|
||||
my @rowlinks = ( &select_all_link("d", $form),
|
||||
&select_invert_link("d", $form) );
|
||||
push(@rowlinks, ui_link("$_[1]", $_[2])) if ($_[2]);
|
||||
push(@rowlinks, ui_link($cgi, $ctext)) if ($ctext);
|
||||
push(@rowlinks, ui_link($cgi."?safe=1", $stext)) if ($stext);
|
||||
print &ui_links_row(\@rowlinks);
|
||||
my @links;
|
||||
for(my $i=0; $i<@{$_[0]}; $i++) {
|
||||
push(@links, &user_link($_[0]->[$i], $_[1], $_[4]));
|
||||
for(my $i=0; $i<@$users; $i++) {
|
||||
push(@links, &user_link($users->[$i], $cgi, $param));
|
||||
}
|
||||
print &ui_grid_table(\@links, 4, 100,
|
||||
[ "width=25%", "width=25%", "width=25%", "width=25%" ], undef, $_[3]);
|
||||
[ "width=25%", "width=25%", "width=25%", "width=25%" ], undef, $htext);
|
||||
print &ui_links_row(\@rowlinks);
|
||||
}
|
||||
|
||||
|
||||
@@ -466,3 +466,10 @@ unix_to=Als Webminbenutzer
|
||||
unix_user=Unixbenutzer ..
|
||||
unix_utable=Erlaubte Unix Benutzer
|
||||
unix_who=Benutzer oder Gruppe
|
||||
index_screate=Erzeuge neuen sicheren Benutzer.
|
||||
edit_title3=Erzeuge sicheren Webmin Benutzer
|
||||
edit_safe=Privileg Stufe
|
||||
edit_safe0=Unbeschränkt
|
||||
edit_safe1=Nur Sichere Module
|
||||
edit_unsafe=Zurücksetzen auf unbeschränkt
|
||||
save_eunixname='$1' ist kein System Benuter und kann daher nicht im sicheren Modus genutzt werden
|
||||
|
||||
10
acl/lang/en
10
acl/lang/en
@@ -1,8 +1,8 @@
|
||||
index_title=Webmin Users
|
||||
index_user=User
|
||||
index_modules=Modules
|
||||
index_create=Create a new Webmin user.
|
||||
index_rcreate=Create a new risk-level user.
|
||||
index_create=Create a new privileged user.
|
||||
index_screate=Create a new safe user.
|
||||
index_convert=Convert Unix To Webmin Users
|
||||
index_cert=Request an SSL Certificate
|
||||
index_twofactor=Two-Factor Authentication
|
||||
@@ -30,6 +30,7 @@ index_eglist=Failed to list groups : $1
|
||||
|
||||
edit_title=Edit Webmin User
|
||||
edit_title2=Create Webmin User
|
||||
edit_title3=Create Safe Webmin User
|
||||
edit_readonly=This Webmin user should not be edited as it is managed by the $1 module. <a href='$2'>Click here</a> to bypass this warning and edit the user anyway - but beware that any manual changes may be over-written!
|
||||
edit_rights=Webmin user access rights
|
||||
edit_user=Username
|
||||
@@ -111,9 +112,14 @@ edit_proto_mysql=MySQL database
|
||||
edit_proto_postgresql=PostgreSQL database
|
||||
edit_proto_ldap=LDAP server
|
||||
edit_proto_=Local files
|
||||
edit_safe=Privilege level
|
||||
edit_safe0=Unrestricted
|
||||
edit_safe1=Safe modules only
|
||||
edit_unsafe=Reset to unrestricted
|
||||
|
||||
save_err=Failed to save user
|
||||
save_ename='$1' is not a valid username
|
||||
save_eunixname=The username '$1' is not a Unix user, and so cannot be used in safe mode
|
||||
save_enamewebmin=The username 'webmin' is reserved for internal use
|
||||
save_edup=The username '$1' is already in use
|
||||
save_eoverlay=A theme overlay cannot be selected unless a theme is
|
||||
|
||||
@@ -1,4 +1,3 @@
|
||||
risk=high
|
||||
name=AdminUsers
|
||||
category=webmin
|
||||
desc=Webmin Users
|
||||
|
||||
@@ -49,7 +49,9 @@ else {
|
||||
# Validate and store ACL settings
|
||||
&error_setup($text{'acl_err'});
|
||||
my %maccess;
|
||||
$maccess{'noconfig'} = $in{'noconfig'};
|
||||
if (defined($in{'noconfig'})) {
|
||||
$maccess{'noconfig'} = $in{'noconfig'};
|
||||
}
|
||||
if ($in{'rbac'}) {
|
||||
# RBAC overrides everything
|
||||
$maccess{'rbac'} = 1;
|
||||
|
||||
@@ -62,6 +62,10 @@ if (!$in{'old'} || $in{'old'} ne $in{'name'}) {
|
||||
$in{'logouttime'} =~ /^\d+$/ || &error($text{'save_elogouttime'});
|
||||
!$access{'minsize'} || $in{'minsize_def'} ||
|
||||
$in{'minsize'} =~ /^\d+$/ || &error($text{'save_eminsize'});
|
||||
if ($in{'safe'} && !$in{'unsafe'}) {
|
||||
getpwnam($in{'name'}) ||
|
||||
&error(&text('save_eunixname', &html_escape($in{'name'})));
|
||||
}
|
||||
|
||||
# Validate password
|
||||
if ($in{'pass_def'} == 0) {
|
||||
@@ -359,18 +363,41 @@ else {
|
||||
}
|
||||
}
|
||||
|
||||
if ($in{'old'} && $in{'acl_security_form'} && !$newgroup) {
|
||||
my $aclfile = "$config_directory/$in{'name'}.acl";
|
||||
if ($in{'old'} && $in{'acl_security_form'} && !$newgroup && !$in{'safe'}) {
|
||||
# Update user's global ACL
|
||||
&foreign_require("", "acl_security.pl");
|
||||
my %uaccess;
|
||||
&foreign_call("", "acl_security_save", \%uaccess, \%in);
|
||||
my $aclfile = "$config_directory/$in{'name'}.acl";
|
||||
&lock_file($aclfile);
|
||||
&save_module_acl(\%uaccess, $in{'name'}, "", 1);
|
||||
&set_ownership_permissions(undef, undef, 0640, $aclfile);
|
||||
&unlock_file($aclfile);
|
||||
}
|
||||
|
||||
# Clear safe setting
|
||||
if ($in{'unsafe'}) {
|
||||
&lock_file($aclfile);
|
||||
my %uaccess = &get_module_acl($in{'name'}, "", 1, 1);
|
||||
delete($uaccess{'_safe'});
|
||||
&save_module_acl(\%uaccess, $in{'name'}, "", 1);
|
||||
&unlock_file($aclfile);
|
||||
}
|
||||
|
||||
# If the user is in safe mode, set ACLs on all new modules
|
||||
if ($in{'safe'}) {
|
||||
foreach my $m ("", @mods) {
|
||||
my %macl = &get_module_acl($in{'name'}, $m, 0, 1);
|
||||
my $safe = &get_safe_acl($m);
|
||||
if (!%macl && $safe) {
|
||||
%macl = %$safe;
|
||||
$macl{'_safe'} = 1;
|
||||
$macl{'noconfig'} = 1;
|
||||
&save_module_acl(\%macl, $in{'name'}, $m);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
# Log the event
|
||||
delete($in{'pass'});
|
||||
delete($in{'oldpass'});
|
||||
|
||||
@@ -46,6 +46,7 @@ if (@logins) {
|
||||
$state = "<font color=orange>$state</font>";
|
||||
}
|
||||
}
|
||||
$main::theme_allow_make_date = 1;
|
||||
$html .= &ui_columns_row([ $l->[2],
|
||||
&make_date($l->[1]),
|
||||
$state ]);
|
||||
|
||||
@@ -942,6 +942,7 @@ sub parse_opt
|
||||
{
|
||||
local($i, $re);
|
||||
local $v = $in{$_[0]};
|
||||
$v =~ /\r|\n|\0/ && &error($text{'enewline'});
|
||||
if ($in{"$_[0]_def"}) { return ( [ ] ); }
|
||||
for($i=1; $i<@_; $i+=2) {
|
||||
$re = $_[$i];
|
||||
@@ -979,8 +980,13 @@ return $rv;
|
||||
# parse_choice(name, default)
|
||||
sub parse_choice
|
||||
{
|
||||
if (lc($in{$_[0]}) eq lc($_[1])) { return ( [ ] ); }
|
||||
else { return ( [ $in{$_[0]} ] ); }
|
||||
if (lc($in{$_[0]}) eq lc($_[1])) {
|
||||
return ( [ ] );
|
||||
}
|
||||
else {
|
||||
$in{$_[0]} =~ /\r|\n|\0/ && &error($text{'enewline'});
|
||||
return ( [ $in{$_[0]} ] );
|
||||
}
|
||||
}
|
||||
|
||||
# select_input(value, name, default, [choice]+)
|
||||
@@ -1027,8 +1033,13 @@ return &ui_select($_[1], undef, \@sel, 1);
|
||||
# parse_handler(name)
|
||||
sub parse_handler
|
||||
{
|
||||
if ($in{$_[0]} eq "") { return ( [ ] ); }
|
||||
else { return ( [ $in{$_[0]} ] ); }
|
||||
if ($in{$_[0]} eq "") {
|
||||
return ( [ ] );
|
||||
}
|
||||
else {
|
||||
$in{$_[0]} =~ /\r|\n|\0/ && &error($text{'enewline'});
|
||||
return ( [ $in{$_[0]} ] );
|
||||
}
|
||||
}
|
||||
|
||||
# filters_input(&values, name)
|
||||
@@ -1054,6 +1065,7 @@ return $rv;
|
||||
# parse_filters(name)
|
||||
sub parse_filters
|
||||
{
|
||||
$in{$_[0]} =~ /\r|\n|\0/ && &error($text{'enewline'});
|
||||
local @f = split(/\0/, $in{$_[0]});
|
||||
return @f ? ( [ join(";", @f) ] ) : ( [ ] );
|
||||
}
|
||||
|
||||
@@ -1068,3 +1068,4 @@ worker_ethreads=Anzahl der Threads pro Kindprozess muss eine Ganzzahl sein
|
||||
worker_maxspare=Maximale spare Threads
|
||||
worker_minspare=Minimale spare Threads
|
||||
worker_threads=Threads pro Kindprozess
|
||||
enewline=Ungueltiges Zeichen in der Eingabe
|
||||
|
||||
@@ -81,6 +81,7 @@ auth_return=access control
|
||||
default_serv=default server
|
||||
bytes=bytes
|
||||
eafter=Configuration verification failed : $1 Changes have not been saved.
|
||||
enewline=Invalid character in value
|
||||
|
||||
global_ecannot=You are not allowed to edit global options
|
||||
global_mime=Global MIME types list
|
||||
|
||||
@@ -40,6 +40,9 @@ my @sslprotos = ("SSLv2", "SSLv3", "TLSv1" );
|
||||
if ($httpd_modules{'core'} >= 2.215) {
|
||||
push(@sslprotos, "TLSv1.1", "TLSv1.2");
|
||||
}
|
||||
if ($httpd_modules{'core'} >= 2.437) {
|
||||
push(@sslprotos, "TLSv1.3");
|
||||
}
|
||||
return @sslprotos;
|
||||
}
|
||||
|
||||
|
||||
@@ -1,4 +1,3 @@
|
||||
risk=low medium high
|
||||
name=Apache
|
||||
category=servers
|
||||
os_support=solaris *-linux aix hpux freebsd osf1 irix unixware openserver macos openbsd netbsd windows
|
||||
|
||||
@@ -5,6 +5,7 @@
|
||||
require './apache-lib.pl';
|
||||
&ReadParse();
|
||||
($conf, $v) = &get_virtual_config($in{'virt'});
|
||||
&can_edit_virt($v) || &error($text{'virt_ecannot'});
|
||||
$desc = &text('virt_header', &virtual_name($v));
|
||||
&ui_print_header($desc, $text{'show_title'}, "");
|
||||
|
||||
|
||||
@@ -18,7 +18,7 @@ if ($in{'virt'} && $access{'types'} eq '*') {
|
||||
"name" => $text{'virt_edit'},
|
||||
"link" => "manual_form.cgi?virt=$in{'virt'}" };
|
||||
}
|
||||
if ($v->{'value'} =~ /:80/ && $v->{'value'} !~ /:443/) {
|
||||
if ($v->{'value'} =~ /:80$/ || $v->{'value'} !~ /:/) {
|
||||
# Hide SSL icon for non-SSL sites
|
||||
$access_types{14} = 0;
|
||||
}
|
||||
|
||||
@@ -7,7 +7,7 @@ index_efiresys=Keine der unterstützen Firewalls (IPtables, IPFW, IPFilter o
|
||||
index_efiresys2=Das konfigurierte Firewall-System $1 wurde auf Ihrem System nicht gefunden. Überprüfen Sie die <a href='$2'>Modulkonfiguration</a> um die richtige Firewall einzustellen.
|
||||
index_efrom=Ungültige(s) Startdatum und -zeit
|
||||
index_ehost=Fehlender oder ungültiger Host
|
||||
index_ehour=Ungültige Zeitangabe - Format JJJJ-MM-DD SS:MM
|
||||
index_ehour=Ungültige Zeitangabe - Format JJJJ-MM-TT SS:MM
|
||||
index_eiptables=Warnung - Ihre IPtables-Konfiguration hat einen Fehler : $1. Das Einrichten der Überwachung wird alle vorhandenen Regeln löschen!
|
||||
index_elog=Die Datei $1 wird für die Bandbreitenmessung benutzt und loggt derzeit Daten auf Ihrem Dateisystem. Benutzen Sie die <a href='$2'>Modulkonfiguration</a> um einen anderen Pfad einzustellen.
|
||||
index_emod=Das Webminmodul $1 ist nicht installiert oder wird auf diesem System nicht unterstützt. Ohne jenes Modul kann dieses Modul nicht arbeiten.
|
||||
|
||||
@@ -152,3 +152,5 @@ Added support for editing TLSA (SSL Certificate) records.
|
||||
Added support for editing SSHFP (SSH Public Key) records.
|
||||
---- Changes since 1.880 ----
|
||||
Before a zone is updated, BIND will be told to freeze it and thaw afterwards. This ensures that dynamic updates are preserved.
|
||||
---- Changes since 1.930 ----
|
||||
Added support for CAA records.
|
||||
|
||||
@@ -1047,11 +1047,13 @@ if ($config{'short_names'} && defined($_[5])) {
|
||||
}
|
||||
|
||||
# TTL field
|
||||
if ($rec{'ttl'} =~ /^(\d+)([SMHDW]?)$/i) {
|
||||
$ttl = $1; $ttlunit = $2;
|
||||
if ($rec{'ttl'} && $rec{'ttl'} =~ /^(\d+)([SMHDW]?)$/i) {
|
||||
$ttl = $1;
|
||||
$ttlunit = $2;
|
||||
}
|
||||
else {
|
||||
$ttl = $rec{'ttl'}; $ttlunit = "";
|
||||
$ttl = $rec{'ttl'} || '';
|
||||
$ttlunit = "";
|
||||
}
|
||||
print &ui_table_row($text{'edit_ttl'},
|
||||
&ui_opt_textbox("ttl", $ttl, 8, $text{'default'})." ".
|
||||
@@ -1063,7 +1065,7 @@ if ($rec{'values'}) {
|
||||
@v = @{$rec{'values'}};
|
||||
}
|
||||
else {
|
||||
@v = undef;
|
||||
@v = ( );
|
||||
}
|
||||
if ($type eq "A" || $type eq "AAAA") {
|
||||
print &ui_table_row($text{'value_A1'},
|
||||
@@ -1292,10 +1294,24 @@ elsif ($type eq "NSEC3PARAM") {
|
||||
print &ui_table_row($text{'value_NSEC3PARAM3'},
|
||||
&ui_textbox("value2", $v[2], 4));
|
||||
|
||||
print &ui_table_row($text{'value_NSEC3PARAM5'},
|
||||
&ui_textbox("value4", $v[4], 20));
|
||||
print &ui_table_row($text{'value_NSEC3PARAM4'},
|
||||
&ui_textbox("value3", $v[3], 20));
|
||||
|
||||
}
|
||||
elsif ($type eq "CAA") {
|
||||
# CAA records have a flag, tag and issuer domain
|
||||
print &ui_table_row($text{'value_CAA0'},
|
||||
&ui_yesno_radio("value0", $v[0] || 0));
|
||||
|
||||
print &ui_table_row($text{'value_CAA1'},
|
||||
&ui_select("value1", $v[1],
|
||||
[ [ "issue", $text{'value_caa_issue'} ],
|
||||
[ "issuewild", $text{'value_caa_issuewild'} ],
|
||||
[ "iodef", $text{'value_caa_iodef'} ] ]));
|
||||
|
||||
print &ui_table_row($text{'value_CAA2'},
|
||||
&ui_textbox("value2", $v[2], 40));
|
||||
}
|
||||
else {
|
||||
# All other types just have a text box
|
||||
print &ui_table_row($text{'value_other'},
|
||||
@@ -2147,7 +2163,7 @@ my ($zone) = @_;
|
||||
if (!$freeze_zone_count{$zone->{'name'}}) {
|
||||
my ($out, $ok) = &try_cmd(
|
||||
"freeze ".quotemeta($zone->{'name'})." IN ".
|
||||
quotemeta($zone->{'view'} || "")." 2>&1 </dev/null");
|
||||
quotemeta($zone->{'view'} || ""));
|
||||
if ($ok) {
|
||||
$freeze_zone_count{$zone->{'name'}}++;
|
||||
®ister_error_handler(\&after_editing, $zone);
|
||||
@@ -2162,9 +2178,8 @@ sub after_editing
|
||||
my ($zone) = @_;
|
||||
if ($freeze_zone_count{$zone->{'name'}}) {
|
||||
$freeze_zone_count{$zone->{'name'}}--;
|
||||
&try_cmd(
|
||||
"thaw ".quotemeta($zone->{'name'})." IN ".
|
||||
quotemeta($zone->{'view'} || "")." 2>&1 </dev/null");
|
||||
&try_cmd("thaw ".quotemeta($zone->{'name'})." IN ".
|
||||
quotemeta($zone->{'view'} || ""));
|
||||
}
|
||||
}
|
||||
|
||||
@@ -2177,20 +2192,17 @@ my ($dom, $view) = @_;
|
||||
my ($out, $ex);
|
||||
if ($view) {
|
||||
# Reload a zone in a view
|
||||
&try_cmd("freeze ".quotemeta($dom)." IN ".quotemeta($view).
|
||||
" 2>&1 </dev/null");
|
||||
$out = &try_cmd("reload ".quotemeta($dom)." IN ".quotemeta($view).
|
||||
" 2>&1 </dev/null");
|
||||
&try_cmd("freeze ".quotemeta($dom)." IN ".quotemeta($view));
|
||||
$out = &try_cmd("reload ".quotemeta($dom)." IN ".quotemeta($view));
|
||||
$ex = $?;
|
||||
&try_cmd("thaw ".quotemeta($dom)." IN ".quotemeta($view).
|
||||
" 2>&1 </dev/null");
|
||||
&try_cmd("thaw ".quotemeta($dom)." IN ".quotemeta($view));
|
||||
}
|
||||
else {
|
||||
# Just reload one top-level zone
|
||||
&try_cmd("freeze ".quotemeta($dom)." 2>&1 </dev/null");
|
||||
$out = &try_cmd("reload ".quotemeta($dom)." 2>&1 </dev/null");
|
||||
&try_cmd("freeze ".quotemeta($dom));
|
||||
$out = &try_cmd("reload ".quotemeta($dom));
|
||||
$ex = $?;
|
||||
&try_cmd("thaw ".quotemeta($dom)." 2>&1 </dev/null");
|
||||
&try_cmd("thaw ".quotemeta($dom));
|
||||
}
|
||||
if ($out =~ /not found/i) {
|
||||
# Zone is not known to BIND yet - do a total reload
|
||||
@@ -2389,7 +2401,7 @@ foreach my $k (keys %znc) {
|
||||
$filecount++;
|
||||
$donefile{$1}++;
|
||||
my @fst = stat($1);
|
||||
if ($fst[9] > $st[9]) {
|
||||
if (!@st || !@fst || $fst[9] > $st[9]) {
|
||||
$changed = 1;
|
||||
}
|
||||
}
|
||||
@@ -2966,7 +2978,7 @@ $slave_error = $_[0];
|
||||
|
||||
sub get_forward_record_types
|
||||
{
|
||||
return ("A", "NS", "CNAME", "MX", "HINFO", "TXT", "SPF", "DMARC", "WKS", "RP", "PTR", "LOC", "SRV", "KEY", "TLSA", "SSHFP", "NSEC3PARAM", $config{'support_aaaa'} ? ( "AAAA" ) : ( ), @extra_forward);
|
||||
return ("A", "NS", "CNAME", "MX", "HINFO", "TXT", "SPF", "DMARC", "WKS", "RP", "PTR", "LOC", "SRV", "KEY", "TLSA", "SSHFP", "CAA", "NSEC3PARAM", $config{'support_aaaa'} ? ( "AAAA" ) : ( ), @extra_forward);
|
||||
}
|
||||
|
||||
sub get_reverse_record_types
|
||||
@@ -2978,15 +2990,16 @@ return ("PTR", "NS", "CNAME", @extra_reverse);
|
||||
# Try calling rndc and ndc with the same args, to see which one works
|
||||
sub try_cmd
|
||||
{
|
||||
my $args = $_[0];
|
||||
my $rndc_args = $_[1] || $_[0];
|
||||
my ($args, $rndc_args) = @_;
|
||||
$rndc_args ||= $args;
|
||||
my $out = "";
|
||||
my $ex;
|
||||
if (&has_ndc() == 2) {
|
||||
# Try with rndc
|
||||
my $conf = $config{'rndc_conf'} && -r $config{'rndc_conf'} ?
|
||||
" -c $config{'rndc_conf'}" : "";
|
||||
$out = &backquote_logged(
|
||||
$config{'rndc_cmd'}.
|
||||
($config{'rndc_conf'} ? " -c $config{'rndc_conf'}" : "").
|
||||
$config{'rndc_cmd'}.$conf.
|
||||
" ".$rndc_args." 2>&1 </dev/null");
|
||||
$ex = $?;
|
||||
}
|
||||
@@ -3046,12 +3059,13 @@ my ($file) = @_;
|
||||
$file ||= &make_chroot($config{'named_conf'});
|
||||
my $chroot = &get_chroot();
|
||||
my $out = &backquote_command("$config{'checkconf'} -h 2>&1 </dev/null");
|
||||
my $zflag = $out =~ /\[-z\]/ ? "-z" : "";
|
||||
my $zflag = $out =~ /\[-z\]|\[-\S*z\S*\]/ ? "-z" : "";
|
||||
$out = &backquote_command(
|
||||
$config{'checkconf'}.
|
||||
($chroot && $chroot ne "/" ? " -t ".quotemeta($chroot) : "").
|
||||
" $zflag 2>&1 </dev/null");
|
||||
return $? ? grep { !/loaded\s+serial/ } split(/\r?\n/, $out) : ( );
|
||||
return $? ? &unique(grep { !/loaded\s+serial|already\s+exists/ }
|
||||
split(/\r?\n/, $out)) : ( );
|
||||
}
|
||||
|
||||
# delete_records_file(file)
|
||||
@@ -3086,6 +3100,7 @@ sub move_zone_button
|
||||
{
|
||||
my ($conf, $view, $zonename) = @_;
|
||||
my @views = grep { &can_edit_view($_) } &find("view", $conf);
|
||||
$view = '' if (!defined($view));
|
||||
if ($view eq '' && @views || $view ne '' && @views > 1) {
|
||||
return &ui_buttons_row("move_zone.cgi",
|
||||
$text{'master_move'},
|
||||
@@ -3150,9 +3165,9 @@ if (!$access{'ro'} && $access{'apply'}) {
|
||||
if (&is_bind_running()) {
|
||||
if ($zone && ($access{'apply'} == 1 || $access{'apply'} == 2)) {
|
||||
# Apply this zone
|
||||
my $link = "restart_zone.cgi?return=$r&".
|
||||
"view=$zone->{'viewindex'}&".
|
||||
"zone=$zone->{'name'}";
|
||||
my $link = "restart_zone.cgi?return=$r&".
|
||||
"view=$zone->{'viewindex'}&".
|
||||
"zone=$zone->{'name'}";
|
||||
push(@rv, &ui_link($link, $text{'links_apply'}) );
|
||||
}
|
||||
# Apply whole config
|
||||
@@ -3464,6 +3479,10 @@ while($tries++ < 10) {
|
||||
" -f ".quotemeta($signed)." ".
|
||||
quotemeta($chrootfn)." 2>&1");
|
||||
last if (!$?);
|
||||
if ($out =~ /out\s+of\s+range/i) {
|
||||
# Journal files are out of sync
|
||||
&try_cmd("sync -clean");
|
||||
}
|
||||
}
|
||||
return $out if ($tries >= 10);
|
||||
|
||||
@@ -3782,7 +3801,7 @@ sub schedule_dnssec_cronjob
|
||||
'active' => 1,
|
||||
'command' => $dnssec_cron_cmd,
|
||||
'mins' => int(rand()*60),
|
||||
'hours' => int(rand()*24),
|
||||
'hours' => '*',
|
||||
'days' => '*',
|
||||
'months' => '*',
|
||||
'weekdays' => '*' };
|
||||
|
||||
@@ -8,7 +8,7 @@ our (%access, %text, %in, %config, %is_extra);
|
||||
require './bind8-lib.pl';
|
||||
&ReadParse();
|
||||
our $ipv6revzone;
|
||||
$in{'view'} = 'any' if ($in{'view'} eq '');
|
||||
$in{'view'} = 'any' if (!$in{'view'} || $in{'view'} eq '');
|
||||
my $zone = &get_zone_name_or_error($in{'zone'}, $in{'view'});
|
||||
my $dom = $zone->{'name'};
|
||||
&can_edit_zone($zone) || &error($text{'master_ecannot'});
|
||||
|
||||
@@ -89,7 +89,7 @@ else {
|
||||
my %hmap;
|
||||
if (@recs) {
|
||||
@recs = &sort_records(@recs);
|
||||
foreach my $v (keys %text) {
|
||||
foreach my $v (sort { $a cmp $b } keys %text) {
|
||||
if ($v =~ /^value_([A-Z0-9]+)(\d+)/) {
|
||||
$hmap{$1}->[$2-1] = $text{$v};
|
||||
}
|
||||
@@ -180,7 +180,7 @@ for(my $i=0; $i<@_; $i++) {
|
||||
if ($in{'type'} eq 'ALL') {
|
||||
push(@cols, $r->{'type'});
|
||||
}
|
||||
if ($r->{'ttl'} =~ /(\d+)([SMHDW]?)/i) {
|
||||
if ($r->{'ttl'} && $r->{'ttl'} =~ /(\d+)([SMHDW]?)/i) {
|
||||
$r->{'ttl'} =~ s/S//i;
|
||||
if ($r->{'ttl'} =~ s/M//i) { $r->{'ttl'} *= 60; }
|
||||
if ($r->{'ttl'} =~ s/H//i) { $r->{'ttl'} *= 3600; }
|
||||
@@ -238,6 +238,14 @@ for(my $i=0; $i<@_; $i++) {
|
||||
$v = $v ? $v." (".$r->{'values'}->[$j].")"
|
||||
: $r->{'values'}->[$j];
|
||||
}
|
||||
elsif ($in{'type'} eq "CAA") {
|
||||
if ($j == 0) {
|
||||
$v = $v ? $text{'yes'} : $text{'no'};
|
||||
}
|
||||
elsif ($j == 1) {
|
||||
$v = $text{'value_caa_'.$v} || $v;
|
||||
}
|
||||
}
|
||||
}
|
||||
if (length($v) > 80) {
|
||||
$v = substr($v, 0, 80)." ...";
|
||||
|
||||
@@ -38,7 +38,8 @@ if (@keyrecs) {
|
||||
my ($keyrec) = grep { $_->{'values'}->[0] ==
|
||||
($key->{'ksk'} ? 257 : 256) } @keyrecs;
|
||||
my $keyline = join(" ", $keyrec->{'name'}, $keyrec->{'class'},
|
||||
$keyrec->{'type'}, @{$keyrec->{'values'}});
|
||||
$keyrec->{'type'},
|
||||
join("", @{$keyrec->{'values'}}));
|
||||
print &ui_hidden_start($text{'zonekey_expand'.$kt},
|
||||
$kt, 0, "edit_zonekey.cgi?$in");
|
||||
print $text{'zonekey_public'},"<br>\n";
|
||||
|
||||
@@ -316,7 +316,7 @@ elsif (@zones && (!@views || !$config{'by_view'})) {
|
||||
@{$ztree{$par}} = &unique(@{$ztree{$par}}, $ch);
|
||||
}
|
||||
}
|
||||
print "<table>\n";
|
||||
print "<table data-recursive_tree>\n";
|
||||
&recursive_tree("");
|
||||
print "</table>\n";
|
||||
}
|
||||
|
||||
@@ -1191,3 +1191,42 @@ zonekey_size=Schlüssel-Größe
|
||||
zonekey_strong=Stärkste erlaubt
|
||||
zonekey_title=Setup DNSSEC-Schlüssel
|
||||
zonekey_webmin=Webmin wird die Zone automatisch neu signieren, wenn Änderungen vorgenommen werden.
|
||||
index_eexpired=Warning : The following zones have expired DNSSEC signatures : $1
|
||||
index_eexpired_conf=Automatic signing should be re-enabled on the $1 page.
|
||||
index_eexpired_mod=Use the $1 module to either disable DNSSEC for these domains, or check why signing is failing.
|
||||
edit_eselector='$1' is not a valid TLSA selector number
|
||||
edit_esshfp=Missing or invalid base-64 encoded public key data
|
||||
edit_ensec3value3=Missing or non-base64 salt
|
||||
edit_ecaavalue2=Missing or invalid-looking domain name
|
||||
type_CAA=Certificate Authority
|
||||
edit_CAA=Certificate Authority
|
||||
recs_CAA=Certificate Authority
|
||||
value_TLSA2=Certificate selector
|
||||
value_TLSA3=Certificate match
|
||||
value_TLSA4=Certificate data
|
||||
value_dmarcadkim=Require strict DKIM alignment
|
||||
value_CAA1=Require enforcement?
|
||||
value_CAA2=Authorization type
|
||||
value_CAA3=CA domain name
|
||||
value_caa_issue=Single domain cert
|
||||
value_caa_issuewild=Wildcard cert
|
||||
value_caa_iodef=Policy violation URL
|
||||
tlsa_usage1=End entity
|
||||
tlsa_usage2=Trust anchor
|
||||
tlsa_usage3=Domain issued
|
||||
acl_inviews=Views this user can edit domains in
|
||||
acl_toplevel=Outside any view
|
||||
zonedef_dne=Authenticated Denial of Existence Using
|
||||
dt_zone_erollctl=Could not notify the rollover manager of rollover event
|
||||
dt_zone_resign=Re-Sign Zone
|
||||
dt_zone_zskrolldesc=Force rollover of the zone's zone signing key
|
||||
dt_zone_kskrolldesc=Force rollover of the zone's key signing key
|
||||
dt_zone_rrf_updating=Updating rollrec entry for zone $1 ...
|
||||
zonekey_eprivate=The private key associated with this zone could not be read : $1
|
||||
zonekey_signdesc=Immediately re-sign this zone, so that any changes to records made manually will be included in the signing records.
|
||||
zonekey_resign=Re-Sign Zone
|
||||
resign_err=Failed to re-sign zone
|
||||
trusted_dlvs=Additional trust anchors
|
||||
trusted_anchor=Anchor zone
|
||||
trusted_eanchor=Missing or invalid anchor zone in row $1
|
||||
trusted_setup=For DNSSEC to be useful to verify the majority of signed zones on the Internet, BIND must be configured to use a DLV server. Webmin can set this up for you, using the ICS DLV server at $1.
|
||||
|
||||
@@ -310,6 +310,7 @@ edit_ensec3value3=Missing or non-base64 salt
|
||||
edit_edmarcpct=Percentage of messages must be an integer between 0 and 100
|
||||
edit_edmarcrua=Missing aggregate feedback address
|
||||
edit_edmarcruf=Missing forensic information address
|
||||
edit_ecaavalue2=Missing or invalid-looking domain name
|
||||
|
||||
text_title=Edit Records File
|
||||
text_title2=View Records File
|
||||
@@ -399,6 +400,7 @@ type_LOC=Location
|
||||
type_SRV=Service Address
|
||||
type_ALL=All Record Types
|
||||
type_KEY=Public Key
|
||||
type_CAA=Certificate Authority
|
||||
|
||||
edit_A=Address
|
||||
edit_AAAA=IPv6 Address
|
||||
@@ -418,6 +420,7 @@ edit_KEY=Public Key
|
||||
edit_NSEC3PARAM=DNSSEC Parameters
|
||||
edit_TLSA=SSL Certificate
|
||||
edit_SSHFP=SSH Public Key
|
||||
edit_CAA=Certificate Authority
|
||||
|
||||
recs_defttl=Default TTL
|
||||
recs_A=Address
|
||||
@@ -439,6 +442,7 @@ recs_KEY=Public Key
|
||||
recs_NSEC3PARAM=DNSSEC Parameters
|
||||
recs_TLSA=SSL Certificate
|
||||
recs_SSHFP=SSH Public Key
|
||||
recs_CAA=Certificate Authority
|
||||
recs_delete=Delete Selected
|
||||
|
||||
value_A1=Address
|
||||
@@ -477,8 +481,7 @@ value_DMARC1=DMARC specification
|
||||
value_NSEC3PARAM1=Hash algorithm
|
||||
value_NSEC3PARAM2=NSEC3 flags
|
||||
value_NSEC3PARAM3=Number of hash iterations
|
||||
value_NSEC3PARAM4=Length of salt
|
||||
value_NSEC3PARAM5=Salt string
|
||||
value_NSEC3PARAM4=Salt string
|
||||
value_delegated=Delegated zone
|
||||
value_notdelegated=Other zone
|
||||
value_other=Values (one per line)
|
||||
@@ -512,6 +515,12 @@ value_dmarcnop=Same as this domain
|
||||
value_dmarcaspf=Require strict SPF alignment
|
||||
value_dmarcadkim=Require strict DKIM alignment
|
||||
value_dmarcnor=Don't send
|
||||
value_CAA1=Require enforcement?
|
||||
value_CAA2=Authorization type
|
||||
value_CAA3=CA domain name
|
||||
value_caa_issue=Single domain cert
|
||||
value_caa_issuewild=Wildcard cert
|
||||
value_caa_iodef=Policy violation URL
|
||||
|
||||
tlsa_usage0=Certificate authority
|
||||
tlsa_usage1=End entity
|
||||
@@ -1224,7 +1233,6 @@ zonekey_other=Other size (in bits)
|
||||
zonekey_enable=Create and Add Key
|
||||
zonekey_err=Failed to create DNSSEC key
|
||||
zonekey_esize=Key size must be a number of bits between $1 and $2
|
||||
zonekey_efactor=Key size must be a multiple of $1
|
||||
zonekey_creating=Creating DNSSEC key for $1 ..
|
||||
zonekey_ecreate=.. creation failed : $1
|
||||
zonekey_done=.. done
|
||||
|
||||
@@ -36,7 +36,7 @@ else {
|
||||
}
|
||||
my $i = 0;
|
||||
foreach my $g (@gens, { }) {
|
||||
my @gv = $g->{'generate'};
|
||||
my @gv = @{$g->{'generate'}};
|
||||
my @cols = ( );
|
||||
my @r = $gv[0] =~ /^(\d+)-(\d+)(\/(\d+))?$/ ? ( $1, $2, $4 ) : ( );
|
||||
push(@cols, &ui_select("type_$i", uc($gv[2]),
|
||||
|
||||
@@ -1,4 +1,3 @@
|
||||
risk=low medium high
|
||||
name=BIND
|
||||
category=servers
|
||||
os_support=*-linux solaris hpux freebsd osf1 irix unixware openserver macos openbsd aix netbsd windows
|
||||
@@ -7,5 +6,3 @@ depends=servers
|
||||
longdesc=Create and edit domains, DNS records, BIND options and views.
|
||||
readonly=1
|
||||
syslog=1
|
||||
desc_bg=BIND DNS Server
|
||||
longdesc_bg=Ñúçäàâàíå è ðåäàêòèðàíå íà äîìåéíè, DNS çàïèñè, îïöèè íà BIND è èçãëåäè.
|
||||
|
||||
@@ -824,7 +824,7 @@ sub join_dmarc
|
||||
{
|
||||
my ($dmarc) = @_;
|
||||
my @rv = ( "v=DMARC1" );
|
||||
foreach my $s ("pct", "ruf", "rua", "p", "sp", "adkim", "aspf") {
|
||||
foreach my $s ("p", "pct", "ruf", "rua", "sp", "adkim", "aspf") {
|
||||
if ($dmarc->{$s} && $dmarc->{$s} ne '') {
|
||||
push(@rv, $s."=".$dmarc->{$s});
|
||||
}
|
||||
@@ -863,7 +863,7 @@ else {
|
||||
# All one one line
|
||||
my @rv;
|
||||
foreach my $v (@{$r->{'values'}}) {
|
||||
push(@rv, $v =~ /\s/ ? "\"$v\"" : $v);
|
||||
push(@rv, $v =~ /\s|;/ ? "\"$v\"" : $v);
|
||||
}
|
||||
return join(" ", @rv);
|
||||
}
|
||||
|
||||
@@ -67,7 +67,9 @@ foreach my $z (@zones) {
|
||||
print STDERR " Age in days $old\n" if ($debug);
|
||||
if ($old > $period) {
|
||||
# Too old .. signing
|
||||
before_editing($z);
|
||||
my $err = &resign_dnssec_key($z);
|
||||
after_editing($z);
|
||||
if ($err) {
|
||||
print STDERR " Re-signing of $z->{'name'} failed : $err\n";
|
||||
$errcount++;
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
#!/usr/local/bin/perl
|
||||
# save_gen.cgi
|
||||
# Save $generate records
|
||||
|
||||
use strict;
|
||||
use warnings;
|
||||
our (%access, %text, %in);
|
||||
@@ -17,7 +18,7 @@ my $dom = $zone->{'name'};
|
||||
|
||||
my $file = $zone->{'file'};
|
||||
if (!$in{'show'}) {
|
||||
&lock_all_files();
|
||||
&lock_file(&make_chroot(&absolute_path($zone->{'file'})));
|
||||
&before_editing($zone);
|
||||
}
|
||||
my @recs = &read_zone_file($file, $dom);
|
||||
@@ -118,7 +119,7 @@ for(my $i=0; defined($in{"type_$i"}); $i++) {
|
||||
&bump_soa_record($file, \@recs);
|
||||
&sign_dnssec_zone_if_key($zone, \@recs);
|
||||
&after_editing($zone);
|
||||
&unlock_all_files();
|
||||
&unlock_file(&make_chroot(&absolute_path($zone->{'file'})));
|
||||
&redirect("edit_master.cgi?zone=$in{'zone'}&view=$in{'view'}");
|
||||
|
||||
sub expand_mods
|
||||
|
||||
@@ -421,17 +421,23 @@ else {
|
||||
# Save DNSSEC parameters
|
||||
$in{'value2'} =~ /^\d+$/ ||
|
||||
&error($text{'edit_ensec3value2'});
|
||||
$in{'value4'} =~ /^[a-zA-Z0-9\+\/]+$/ ||
|
||||
$in{'value3'} =~ /^[a-zA-Z0-9\+\/]+$/ ||
|
||||
&error($text{'edit_ensec3value2'});
|
||||
$vals = join(" ", "(", $in{'value0'}, $in{'value1'},
|
||||
$in{'value2'}, length($in{'value4'}),
|
||||
$in{'value4'}, ")");
|
||||
$in{'value2'},
|
||||
$in{'value3'}, ")");
|
||||
}
|
||||
elsif ($in{'type'} eq 'CAA') {
|
||||
$in{'value2'} =~ /^\S+$/ ||
|
||||
&error($text{'edit_ecaavalue2'});
|
||||
$vals = join(" ", $in{'value0'}, $in{'value1'},
|
||||
"\"$in{'value2'}\"");
|
||||
}
|
||||
else {
|
||||
# For other record types, just save the lines
|
||||
$in{'values'} =~ s/\r//g;
|
||||
my @vlines = split(/\n/, $in{'values'});
|
||||
$vals = join(" ",map { $_ =~ /^\S+$/ ? $_ : "\"$_\"" } @vlines);
|
||||
$vals = join(" ",map { $_ =~ /\s|;/ ? "\"$_\"" : $_ } @vlines);
|
||||
}
|
||||
$fullname = &convert_to_absolute($in{'name'}, $in{'origin'});
|
||||
if ($config{'short_names'}) {
|
||||
|
||||
@@ -24,7 +24,7 @@ my $src = &find("transfer-source", $options->{'members'});
|
||||
my $masters = &find("masters", $zconf);
|
||||
my @ips;
|
||||
foreach my $av (@{$masters->{'members'}}) {
|
||||
push(@ips, join(" ", @{$av->{'values'}}));
|
||||
push(@ips, join(" ", $av->{'name'}, @{$av->{'values'}}));
|
||||
}
|
||||
print &text('xfer_doing', join(" ", @ips)),"<br>\n";
|
||||
my $temp = &transname();
|
||||
|
||||
@@ -1,4 +1,3 @@
|
||||
risk=low medium high
|
||||
name=BSDexports
|
||||
category=net
|
||||
os_support=freebsd openbsd macos netbsd openserver
|
||||
|
||||
@@ -359,3 +359,29 @@ this_server=dieser Server
|
||||
type_classes=$type_group
|
||||
type_disks=$type_required
|
||||
type_grant=$type_admit
|
||||
index_details=Action summary for classes
|
||||
edit_controlskip=Skip reverse IP address lookup for
|
||||
edit_filesinclude=Only check files matching
|
||||
edit_filesexclude=Don't check files matching
|
||||
save_econtrolskip=No addresses to skip reverse lookups on entered
|
||||
run_desc=This page can be used to run the Configuration Engine on this host. When run, all the actions that you have configured will be carried out where necessary.
|
||||
push_pushdesc=Click this button to run the Configuration Engine on each of the hosts listed above, using the command $1. The local configuration from each host will be used for processing, unless you have arranged for the master configuration to be distributed to each host.
|
||||
type_control_0=The field below lists the actions that are executed when the configuration engine runs, in the order that they will be executed. Actions which are not listed will not be processed, even if they are listed on the main page.
|
||||
type_control_1=The options below control the global behaviour of the background process that accepts requests to execute the configuration on this host when requested by a remote host, or on a fixed schedule.
|
||||
type_directories=The directories listed below will be created with the given ownership and permissions when they do not exist. The owner, group and permissions fields are optional.
|
||||
type_links=The symbolic links listed below will be created where they do not currently exist. If a link already exists but points to a different destination, it will not normally be changed.
|
||||
type_admit=The configuration engine daemon will only grant access to directory listed below by the hosts listed next to each directory. Hosts can be entered as an IP address, hostname or host pattern (like <tt>*.foo.com</tt>).
|
||||
type_deny=Directories listed below will be denied access to by the hosts listed next to each directory, even if they are listed in an Allowed directories action. Hosts can be entered as an IP address, hostname or host pattern (like <tt>*.foo.com</tt>).
|
||||
type_groups=Use the table below to define additional groups of hosts that can be used elsewhere in the configuration as class names. Groups can also contain shell commands in quotes that are executed to determine if the group evaluates to true or false.
|
||||
type_copy=Each of the files or directories (and their contents) listed below will be copied to the chosen destination, when necessary. You can also choose to copy from a remote host, as long as that host is running the configuration engine daemon and allows this host to copy files.
|
||||
type_disable=The files listed below will be checked to see if it exists and meets the selected size and type criteria, and if so disabled by either renaming or truncation.
|
||||
type_editfiles=The text area below can be used to enter a script that edits the selected file, adding, deleting or updating lines where necessary. For the syntax of this script language, see the full CFengine documentation.
|
||||
type_ignore=Any files or directories entered below will be ignored by all 'Copy files', 'Set permissions' and 'Tidy up directories' actions. Each entry can be a full path, a shell-style regular expression or a filename.
|
||||
type_processes=Use the field below to search for processes matching the given pattern, and optionally send them a signal to kill them. When a process is killed, you can also specify a command to be run to restart it.
|
||||
type_shellcommands=The commands listed below will be executed every time the configuration engine is run. The user and group fields are optional - if nothing is entered, the command will be executed as root. The timeout field is also optional - if no timeout is given, CFengine will wait forever until the command is complete.
|
||||
type_tidy=The directories listed below will be scanned for files matching the selected name, age and time criteria each time CFengine is run. Any files found will be deleted, with no backup made.
|
||||
type_miscmounts=NFS filesystem mounts listed below will be checked and mounted if necessary when CFengine is run. The NFS server and path field must be entered in the standard form of <tt>servername:/path/name</tt>. The mount options must be in the same format as used in the <tt>/etc/fstab</tt> file, and are optional.
|
||||
type_resolve=The DNS server IP addresses that you enter below will be used to update the <tt>/etc/resolv.conf</tt> file when this action is run, by adding lines for any listed nameservers that are not yet in the file.
|
||||
type_defaultroute=When this action is run, the configuration engine will check the current default route against the gateway specified below.
|
||||
type_required=The filesystems listed below will be checked when this action is run to verify that they are mounted, and if not a warning message will be displayed. Each filesystem will also be checked to see if its free space has fallen below the set minimum, if any.
|
||||
hosts_copydesc=Click this button to have the CFengine configuration from this server copied to all the servers above, and immediately executed.
|
||||
|
||||
3
change-user/safeacl
Normal file
3
change-user/safeacl
Normal file
@@ -0,0 +1,3 @@
|
||||
lang=1
|
||||
theme=1
|
||||
pass=1
|
||||
@@ -1,10 +1,8 @@
|
||||
#!/usr/local/bin/perl
|
||||
# Create zh_TW.UTF-8 files from zh_TW.Big5 files, and zh_CN.UTF-8 files from
|
||||
# zh_CN files, ja_JP.UTF-8 from ja_JP.euc, and ko_KR.UTF-8 from ko_KR.euc
|
||||
#
|
||||
# Also creates ru.UTF-8 from ru_SU files
|
||||
# Creates UTF-8 encoded language files from their native encodings
|
||||
|
||||
chdir($ARGV[0] || "/usr/local/webadmin");
|
||||
@ARGV == 1 || die "Usage: $0 <directory>";
|
||||
chdir($ARGV[0]) || die "Failed to chdir to $ARGV[0] : $!";
|
||||
@modules = ( "." );
|
||||
opendir(DIR, ".");
|
||||
foreach $d (readdir(DIR)) {
|
||||
@@ -41,41 +39,76 @@ close(LANG);
|
||||
foreach $m (@modules) {
|
||||
# Translate the lang/* files
|
||||
if (-r "$m/lang/zh_TW.Big5") {
|
||||
system("iconv -f Big5 -t UTF-8 - <$m/lang/zh_TW.Big5 >$m/lang/zh_TW.UTF-8");
|
||||
system("iconv -c -f Big5 -t UTF-8 - <$m/lang/zh_TW.Big5 >$m/lang/zh_TW.UTF-8");
|
||||
}
|
||||
if (-r "$m/lang/zh_CN") {
|
||||
system("iconv -f GB2312 -t UTF-8 - <$m/lang/zh_CN >$m/lang/zh_CN.UTF-8");
|
||||
system("iconv -c -f GB2312 -t UTF-8 - <$m/lang/zh_CN >$m/lang/zh_CN.UTF-8");
|
||||
}
|
||||
if (-r "$m/lang/ja_JP.euc") {
|
||||
system("iconv -f EUC-JP -t UTF-8 - <$m/lang/ja_JP.euc >$m/lang/ja_JP.UTF-8");
|
||||
system("iconv -c -f EUC-JP -t UTF-8 - <$m/lang/ja_JP.euc >$m/lang/ja_JP.UTF-8");
|
||||
}
|
||||
if (-r "$m/lang/ko_KR.euc") {
|
||||
system("iconv -f EUC-KR -t UTF-8 - <$m/lang/ko_KR.euc >$m/lang/ko_KR.UTF-8");
|
||||
system("iconv -c -f EUC-KR -t UTF-8 - <$m/lang/ko_KR.euc >$m/lang/ko_KR.UTF-8");
|
||||
}
|
||||
if (-r "$m/lang/ru_SU") {
|
||||
system("iconv -f KOI8-R -t UTF-8 - <$m/lang/ru_SU >$m/lang/ru.UTF-8");
|
||||
system("iconv -c -f KOI8-R -t UTF-8 - <$m/lang/ru_SU >$m/lang/ru.UTF-8");
|
||||
}
|
||||
foreach $l (@fiveone_langs) {
|
||||
if (-r "$m/lang/$l") {
|
||||
system("iconv -f windows-1251 -t UTF-8 - <$m/lang/$l >$m/lang/$l.UTF-8");
|
||||
system("iconv -c -f windows-1251 -t UTF-8 - <$m/lang/$l >$m/lang/$l.UTF-8");
|
||||
}
|
||||
}
|
||||
foreach $l (@fivenine_langs) {
|
||||
if (-r "$m/lang/$l") {
|
||||
system("iconv -f iso-8859-2 -t UTF-8 - <$m/lang/$l >$m/lang/$l.UTF-8");
|
||||
system("iconv -c -f iso-8859-2 -t UTF-8 - <$m/lang/$l >$m/lang/$l.UTF-8");
|
||||
}
|
||||
}
|
||||
foreach $l (@fifteen_langs) {
|
||||
if (-r "$m/lang/$l") {
|
||||
system("iconv -f iso-8859-15 -t UTF-8 - <$m/lang/$l >$m/lang/$l.UTF-8");
|
||||
system("iconv -c -f iso-8859-15 -t UTF-8 - <$m/lang/$l >$m/lang/$l.UTF-8");
|
||||
}
|
||||
}
|
||||
foreach $l (@default_langs) {
|
||||
if (-r "$m/lang/$l") {
|
||||
system("iconv -f iso-8859-1 -t UTF-8 - <$m/lang/$l >$m/lang/$l.UTF-8");
|
||||
system("iconv -c -f iso-8859-1 -t UTF-8 - <$m/lang/$l >$m/lang/$l.UTF-8");
|
||||
}
|
||||
}
|
||||
# Translate the ulang/* files
|
||||
if (-r "$m/ulang/zh_TW.Big5") {
|
||||
system("iconv -c -f Big5 -t UTF-8 - <$m/ulang/zh_TW.Big5 >$m/ulang/zh_TW.UTF-8");
|
||||
}
|
||||
if (-r "$m/ulang/zh_CN") {
|
||||
system("iconv -c -f GB2312 -t UTF-8 - <$m/ulang/zh_CN >$m/ulang/zh_CN.UTF-8");
|
||||
}
|
||||
if (-r "$m/ulang/ja_JP.euc") {
|
||||
system("iconv -c -f EUC-JP -t UTF-8 - <$m/ulang/ja_JP.euc >$m/ulang/ja_JP.UTF-8");
|
||||
}
|
||||
if (-r "$m/ulang/ko_KR.euc") {
|
||||
system("iconv -c -f EUC-KR -t UTF-8 - <$m/ulang/ko_KR.euc >$m/ulang/ko_KR.UTF-8");
|
||||
}
|
||||
if (-r "$m/ulang/ru_SU") {
|
||||
system("iconv -c -f KOI8-R -t UTF-8 - <$m/ulang/ru_SU >$m/ulang/ru.UTF-8");
|
||||
}
|
||||
foreach $l (@fiveone_langs) {
|
||||
if (-r "$m/ulang/$l") {
|
||||
system("iconv -c -f windows-1251 -t UTF-8 - <$m/ulang/$l >$m/ulang/$l.UTF-8");
|
||||
}
|
||||
}
|
||||
foreach $l (@fivenine_langs) {
|
||||
if (-r "$m/ulang/$l") {
|
||||
system("iconv -c -f iso-8859-2 -t UTF-8 - <$m/ulang/$l >$m/ulang/$l.UTF-8");
|
||||
}
|
||||
}
|
||||
foreach $l (@fifteen_langs) {
|
||||
if (-r "$m/ulang/$l") {
|
||||
system("iconv -c -f iso-8859-15 -t UTF-8 - <$m/ulang/$l >$m/ulang/$l.UTF-8");
|
||||
}
|
||||
}
|
||||
foreach $l (@default_langs) {
|
||||
if (-r "$m/ulang/$l") {
|
||||
system("iconv -c -f iso-8859-1 -t UTF-8 - <$m/ulang/$l >$m/ulang/$l.UTF-8");
|
||||
}
|
||||
}
|
||||
|
||||
# Translate the module.info.LANG files
|
||||
local %minfo;
|
||||
if (&read_file("$m/module.info.zh_TW.Big5", \%minfo)) {
|
||||
@@ -354,7 +387,7 @@ local $temp = "/tmp/$$.big5";
|
||||
open(TEMP, ">$temp");
|
||||
print TEMP $str;
|
||||
close(TEMP);
|
||||
local $out = `iconv -f Big5 -t UTF-8 - <$temp`;
|
||||
local $out = `iconv -c -f Big5 -t UTF-8 - <$temp`;
|
||||
unlink($temp);
|
||||
return $out;
|
||||
}
|
||||
@@ -366,7 +399,7 @@ local $temp = "/tmp/$$.cn";
|
||||
open(TEMP, ">$temp");
|
||||
print TEMP $str;
|
||||
close(TEMP);
|
||||
local $out = `iconv -f GB2312 -t UTF-8 - <$temp`;
|
||||
local $out = `iconv -c -f GB2312 -t UTF-8 - <$temp`;
|
||||
unlink($temp);
|
||||
return $out;
|
||||
}
|
||||
@@ -378,7 +411,7 @@ local $temp = "/tmp/$$.cn";
|
||||
open(TEMP, ">$temp");
|
||||
print TEMP $str;
|
||||
close(TEMP);
|
||||
local $out = `iconv -f EUC-JP -t UTF-8 - <$temp`;
|
||||
local $out = `iconv -c -f EUC-JP -t UTF-8 - <$temp`;
|
||||
unlink($temp);
|
||||
return $out;
|
||||
}
|
||||
@@ -390,7 +423,7 @@ local $temp = "/tmp/$$.cn";
|
||||
open(TEMP, ">$temp");
|
||||
print TEMP $str;
|
||||
close(TEMP);
|
||||
local $out = `iconv -f EUC-KR -t UTF-8 - <$temp`;
|
||||
local $out = `iconv -c -f EUC-KR -t UTF-8 - <$temp`;
|
||||
unlink($temp);
|
||||
return $out;
|
||||
}
|
||||
@@ -402,7 +435,7 @@ local $temp = "/tmp/$$.cn";
|
||||
open(TEMP, ">$temp");
|
||||
print TEMP $str;
|
||||
close(TEMP);
|
||||
local $out = `iconv -f KOI8-R -t UTF-8 - <$temp`;
|
||||
local $out = `iconv -c -f KOI8-R -t UTF-8 - <$temp`;
|
||||
unlink($temp);
|
||||
return $out;
|
||||
}
|
||||
@@ -414,7 +447,7 @@ local $temp = "/tmp/$$.cn";
|
||||
open(TEMP, ">$temp");
|
||||
print TEMP $str;
|
||||
close(TEMP);
|
||||
local $out = `iconv -f windows-1251 -t UTF-8 - <$temp`;
|
||||
local $out = `iconv -c -f windows-1251 -t UTF-8 - <$temp`;
|
||||
unlink($temp);
|
||||
return $out;
|
||||
}
|
||||
@@ -426,7 +459,7 @@ local $temp = "/tmp/$$.cn";
|
||||
open(TEMP, ">$temp");
|
||||
print TEMP $str;
|
||||
close(TEMP);
|
||||
local $out = `iconv -f iso-8859-2 -t UTF-8 - <$temp`;
|
||||
local $out = `iconv -c -f iso-8859-2 -t UTF-8 - <$temp`;
|
||||
unlink($temp);
|
||||
return $out;
|
||||
}
|
||||
@@ -438,7 +471,7 @@ local $temp = "/tmp/$$.cn";
|
||||
open(TEMP, ">$temp");
|
||||
print TEMP $str;
|
||||
close(TEMP);
|
||||
local $out = `iconv -f iso-8859-15 -t UTF-8 - <$temp`;
|
||||
local $out = `iconv -c -f iso-8859-15 -t UTF-8 - <$temp`;
|
||||
unlink($temp);
|
||||
return $out;
|
||||
}
|
||||
@@ -450,7 +483,7 @@ local $temp = "/tmp/$$.cn";
|
||||
open(TEMP, ">$temp");
|
||||
print TEMP $str;
|
||||
close(TEMP);
|
||||
local $out = `iconv -f iso-8859-1 -t UTF-8 - <$temp`;
|
||||
local $out = `iconv -c -f iso-8859-1 -t UTF-8 - <$temp`;
|
||||
unlink($temp);
|
||||
return $out;
|
||||
}
|
||||
|
||||
@@ -46,6 +46,9 @@ if (&supports_users()) {
|
||||
# ACL determines
|
||||
$fileunix = $access{'fileunix'} || $remote_user;
|
||||
@uinfo = getpwnam($fileunix);
|
||||
if (!@uinfo && !$access{'fileunix'}) {
|
||||
@uinfo = getpwnam("nobody");
|
||||
}
|
||||
if (@uinfo) {
|
||||
&switch_to_unix_user(\@uinfo);
|
||||
}
|
||||
|
||||
@@ -1 +0,0 @@
|
||||
../chooser.cgi
|
||||
@@ -3,6 +3,7 @@ create_title=Erzeuge einen Cluster-Cron-Auftrag
|
||||
delete_enone=Keine ausgewählt
|
||||
delete_err=Fehlgeschlagen Cluster-Cron-Aufträge zu löschen
|
||||
edit_all=<Alle Hosts>
|
||||
edit_emissing=Cron-Job existiert nicht mehr!
|
||||
edit_group=Mitglieder von $1
|
||||
edit_servers=Auf Server ausführen
|
||||
edit_this=diesem Server
|
||||
@@ -25,7 +26,7 @@ log_create_l=Cluster-Cron-Auftrag $2 für $1 erzeugt
|
||||
log_delete=Cluster-Cron-Auftrag für $1 gelöscht
|
||||
log_delete_l=Cluster-Cron-Auftrag $2 für $1 gelöscht
|
||||
log_deletes=$1 Cluster-Cron-Aufträge gelöscht
|
||||
log_modify=Cluster-Cron-Auftrag für $1 bearbeitet
|
||||
log_modify=Cluster-Cron-Auftrag für $1 bearbeitet
|
||||
log_modify_l=Cluster-Cron-Auftrag $2 für $1 bearbeitet
|
||||
log_run=$1 ist auf $2 Servern ausgeführt
|
||||
log_run_l=$1 auf $2 ausgeführt
|
||||
|
||||
@@ -3,3 +3,4 @@ category=cluster
|
||||
os_support=solaris *-linux hpux freebsd osf1 irix unixware openserver macos openbsd aix netbsd
|
||||
depends=cron
|
||||
longdesc=Create scheduled Cron jobs that run on multiple servers simultaneously.
|
||||
desc_de=Cluster Cron-Jobs
|
||||
|
||||
@@ -43,11 +43,8 @@ if ($access{'others'} == 2) {
|
||||
&ui_checkbox("others", 1, $passwd::text{'passwd_others'}, 1), 2);
|
||||
}
|
||||
|
||||
print &ui_table_row(undef,
|
||||
&ui_submit($passwd::text{'passwd_change'})."\n".
|
||||
&ui_reset($passwd::text{'passwd_reset'}), 2);
|
||||
print &ui_table_end();
|
||||
print &ui_form_end();
|
||||
print &ui_form_end([ [ undef, $passwd::text{'passwd_change'} ] ]);
|
||||
|
||||
&ui_print_footer($in{'one'} ? ( "/", $text{'index'} )
|
||||
: ( "", $passwd::text{'index_return'} ));
|
||||
|
||||
@@ -27,7 +27,7 @@ foreach $p (@packs) {
|
||||
}
|
||||
$found || &error($text{'deletes_enone'});
|
||||
|
||||
&ui_print_header(undef, $text{'deletes_title'}, "", "delete");
|
||||
&ui_print_header(undef, $text{'deletes_title'}, "", undef);
|
||||
|
||||
if ($in{'sure'}) {
|
||||
# do the deletion
|
||||
|
||||
@@ -20,7 +20,7 @@ print "<tr $cb> <td><table width=100%>\n";
|
||||
print "<tr> <td><b>$text{'host_name'}</b></td>\n";
|
||||
if ($server->{'id'}) {
|
||||
$h = $server->{'realhost'} || $server->{'host'};
|
||||
printf &ui_link("/servers/link.cgi/%s/","%s")."</td>\n",
|
||||
printf "<td>". &ui_link("/servers/link.cgi/%s/","%s")."</td>\n",
|
||||
$server->{'id'}, $server->{'desc'} ? "$server->{'desc'} ($h:$server->{'port'})" : "$h:$server->{'port'}";
|
||||
}
|
||||
else {
|
||||
@@ -44,14 +44,14 @@ print "<td>$host->{'real_os_type'} $host->{'real_os_version'}</td> </tr>\n";
|
||||
|
||||
print "<tr> <td><b>$text{'host_system'}</b></td>\n";
|
||||
$system = $host->{'package_system'} || $software::config{'package_system'};
|
||||
print "<td>",uc($system),"</td>\n";
|
||||
print "<td colspan=3>",uc($system),"</td>\n";
|
||||
|
||||
print "</tr>\n";
|
||||
|
||||
print "</table></td></tr></table>\n";
|
||||
|
||||
# Show delete and refresh buttons
|
||||
print "<table width=100%><tr>\n";
|
||||
print "<p></p><table width=100%><tr>\n";
|
||||
|
||||
print "<td><form action=delete_host.cgi>\n";
|
||||
print "<input type=hidden name=id value=$in{'id'}>\n";
|
||||
@@ -91,6 +91,7 @@ print "<table width=100%>\n";
|
||||
&traverse("", 0);
|
||||
print "</table>\n";
|
||||
if ($hasclasses) {
|
||||
print "<p></p>";
|
||||
print &ui_link("closeall.cgi?id=$in{'id'}",$text{'host_close'}),"\n";
|
||||
print &ui_link("openall.cgi?id=$in{'id'}",$text{'host_open'}),"<p>\n";
|
||||
}
|
||||
@@ -100,7 +101,7 @@ if ($hasclasses) {
|
||||
sub traverse
|
||||
{
|
||||
local($s, $act, $i);
|
||||
print "<tr> <td>", $spacer x $_[1];
|
||||
print "<tr style='border-top: 1px solid #aaaaaa28'> <td>", $spacer x $_[1];
|
||||
if ($_[0]) {
|
||||
print "<a name=\"$_[0]\"></a>\n";
|
||||
$act = $heiropen{$_[0]} ? "close" : "open";
|
||||
@@ -114,7 +115,7 @@ if ($heiropen{$_[0]}) {
|
||||
# print sub-folders followed by packages
|
||||
foreach $i (@packages) {
|
||||
if ($i->{'class'} eq $_[0]) {
|
||||
print "<tr> <td>", $spacer x ($_[1]+1);
|
||||
print "<tr style='border-top: 1px solid #aaaaaa28'> <td>", $spacer x ($_[1]+1);
|
||||
print "<img border=0 src=images/pack.gif></a> \n";
|
||||
print "<a href=\"edit_pack.cgi?package=",
|
||||
&urlize($i->{'name'}),"\">$i->{'name'}</a></td>\n";
|
||||
|
||||
@@ -36,9 +36,9 @@ print "<tr $cb> <td><table width=100%>\n";
|
||||
# Description, if we have one
|
||||
if ($pinfo[2]) {
|
||||
print "<tr> <td valign=top width=20%><b>$text{'edit_desc'}</b></td>\n";
|
||||
print "<td colspan=3><pre>",
|
||||
print "<td colspan=3>",
|
||||
&html_escape(&entities_to_ascii($pinfo[2])),
|
||||
"</pre></td> </tr>\n";
|
||||
"</td> </tr>\n";
|
||||
}
|
||||
|
||||
print "<tr> <td width=20%><b>$text{'edit_pack'}</b></td> <td>$pinfo[0]</td>\n";
|
||||
@@ -91,6 +91,7 @@ print &ui_subheading($text{'edit_hosts'});
|
||||
"$_->{'host'}:$_->{'port'}").
|
||||
($version{$_} ? "<br>$text{'edit_ver'} $version{$_}" : "") } @got;
|
||||
&icons_table(\@links, \@titles, \@icons);
|
||||
print "<br>";
|
||||
|
||||
&remote_finished();
|
||||
if ($in{'search'}) {
|
||||
|
||||
@@ -69,7 +69,7 @@ $formno++;
|
||||
print "<table width=100%><tr>\n";
|
||||
@addservers = grep { !$gothost{$_->{'id'}} } @servers;
|
||||
if (@addservers && $access{'add'}) {
|
||||
print "<td width=33%><form action=add.cgi>\n";
|
||||
print "<td><form action=add.cgi>\n";
|
||||
print "<input type=submit name=add value='$text{'index_add'}'>\n";
|
||||
print "<select name=server>\n";
|
||||
foreach $s (sort { $a->{'host'} cmp $b->{'host'} } @addservers) {
|
||||
@@ -82,7 +82,7 @@ if (@addservers && $access{'add'}) {
|
||||
|
||||
# Show button for compare form
|
||||
if (@hosts) {
|
||||
print "<td align=center width=33%>\n";
|
||||
print "<td align=right>\n";
|
||||
print "<form action=compare_form.cgi>\n";
|
||||
print "<input type=submit value='$text{'index_compare'}'>\n";
|
||||
print "</form>\n";
|
||||
|
||||
@@ -12,20 +12,20 @@ require './cluster-software-lib.pl';
|
||||
|
||||
print &ui_subheading(&text('list_files', "<tt>$in{'package'}</tt>",
|
||||
$s->{'desc'} ? $s->{'desc'} : $s->{'host'}));
|
||||
print "<table border width=100%>\n";
|
||||
print "<tr $tb> <td><b>$text{'list_path'}</b></td> ",
|
||||
"<td><b>$text{'list_owner'}</b></td> ",
|
||||
"<td><b>$text{'list_group'}</b></td> ",
|
||||
"<td><b>$text{'list_type'}</b></td> ",
|
||||
"<td><b>$text{'list_size'}</b></td> ",
|
||||
"<td><b>$text{'list_status'}</b></td> </tr>\n";
|
||||
print "<table class='table table-striped table-hover table-condensed' width=100%>\n";
|
||||
print "<thead><tr><th>$text{'list_path'}</th> ",
|
||||
"<th>$text{'list_owner'}</th> ",
|
||||
"<th>$text{'list_group'}</th> ",
|
||||
"<th>$text{'list_type'}</th> ",
|
||||
"<th>$text{'list_size'}</th> ",
|
||||
"<th>$text{'list_status'}</th> </tr></thead><tbody>\n";
|
||||
$n = &remote_foreign_call($s->{'host'}, "software",
|
||||
"check_files", $in{'package'});
|
||||
$files = &remote_eval($s->{'host'}, "software", "\\%files");
|
||||
for($i=0; $i<$n; $i++) {
|
||||
$sz = $files->{$i,'size'};
|
||||
$ty = $files->{$i,'type'};
|
||||
print "<tr $cb>\n";
|
||||
print "<tr>\n";
|
||||
if ($ty == 3 || $ty == 4) {
|
||||
print "<td valign=top>$files->{$i,'path'} -> ",
|
||||
"$files->{$i,'link'}</td>\n";
|
||||
@@ -59,7 +59,7 @@ for($i=0; $i<$n; $i++) {
|
||||
else { print "<td valign=top>$text{'list_ok'}</td>\n"; }
|
||||
print "</tr>\n";
|
||||
}
|
||||
print "</table><p>\n";
|
||||
print "</tbody></table><p>\n";
|
||||
|
||||
&remote_finished();
|
||||
&ui_print_footer("edit_pack.cgi?package=".&urlize($in{'package'})."&search=".&urlize($in{'search'}), $text{'edit_return'});
|
||||
|
||||
@@ -35,7 +35,7 @@ print "<tr $tb> <td><b>$text{'gedit_details'}</b></td> </tr>\n";
|
||||
print "<tr $cb> <td><table width=100%>\n";
|
||||
|
||||
print "<tr> <td valign=top><b>$text{'gedit_group'}</b></td>\n";
|
||||
print "<td valign=top><font size=+1><i>$ginfo{'group'}</i></font></td>\n";
|
||||
print "<td valign=top><font size=3><i>$ginfo{'group'}</i></font></td>\n";
|
||||
|
||||
print "<td valign=top><b>$text{'gedit_gid'}</b></td>\n";
|
||||
printf "<td><input type=radio name=gid_def value=1 checked> %s (%s)\n",
|
||||
@@ -77,11 +77,11 @@ print "<td><input type=radio name=chgid value=2> $text{'gedit_allfiles'}</td> </
|
||||
|
||||
print "<tr> <td><b>$text{'uedit_servs'}</b></td>\n";
|
||||
print "<td><input type=radio name=servs value=1> $text{'uedit_mall'}</td>\n";
|
||||
print "<td><input type=radio name=servs value=0 checked> $text{'uedit_mthis'}</td> </tr>\n";
|
||||
print "<td colspan=2><input type=radio name=servs value=0 checked> $text{'uedit_mthis'}</td> </tr>\n";
|
||||
|
||||
print "<tr> <td><b>$text{'gedit_mothers'}</b></td>\n";
|
||||
print "<td><input type=radio name=others value=1 checked> $text{'yes'}</td>\n";
|
||||
print "<td><input type=radio name=others value=0> $text{'no'}</td> </tr>\n";
|
||||
print "<td colspan=2><input type=radio name=others value=0> $text{'no'}</td> </tr>\n";
|
||||
|
||||
print "</table></td> </tr></table><p>\n";
|
||||
|
||||
@@ -111,10 +111,10 @@ if (@icons < @hosts) {
|
||||
"value=\"$text{'uedit_sync'}\"></td>\n";
|
||||
}
|
||||
|
||||
print "</form><form action=\"delete_group.cgi\">\n";
|
||||
print "</tr></table></form><p><form action=\"delete_group.cgi\">\n";
|
||||
print "<input type=hidden name=group value=\"$ginfo{'group'}\">\n";
|
||||
print "<td align=right><input type=submit value=\"$text{'delete'}\"></td> </tr>\n";
|
||||
print "</form></table><p>\n";
|
||||
print "<input type=submit value=\"$text{'delete'}\">\n";
|
||||
print "</form><p>\n";
|
||||
|
||||
print &ui_hr();
|
||||
print &ui_subheading($text{'uedit_hosts'});
|
||||
@@ -142,6 +142,7 @@ if ($config{'table_mode'}) {
|
||||
else {
|
||||
# Show as icons
|
||||
&icons_table(\@links, \@titles, \@icons);
|
||||
print "<br>";
|
||||
}
|
||||
|
||||
&ui_print_footer("", $text{'index_return'});
|
||||
|
||||
@@ -27,7 +27,7 @@ if ($server->{'id'}) {
|
||||
print "</td>";
|
||||
}
|
||||
else {
|
||||
print "<td><a href=/>$text{'this_server'}</a></td>\n";
|
||||
print "<td colspan=3><a href=/>$text{'this_server'}</a></td>\n";
|
||||
}
|
||||
|
||||
if ($server->{'id'}) {
|
||||
@@ -48,7 +48,7 @@ printf "<td>%d</td> </tr>\n", scalar(@{$host->{'groups'}});
|
||||
print "</table></td></tr></table>\n";
|
||||
|
||||
# Show delete and refresh buttons
|
||||
print "<table width=100%><tr>\n";
|
||||
print "<p><table width=100%><tr>\n";
|
||||
|
||||
print "<td><form action=delete_host.cgi>\n";
|
||||
print "<input type=hidden name=id value=$in{'id'}>\n";
|
||||
|
||||
@@ -202,7 +202,7 @@ elsif ($pft == 2) {
|
||||
}
|
||||
else { print "$text{'uedit_unknown'}\n"; }
|
||||
if ($uinfo{'max'}) {
|
||||
print "<input type=checkbox name=forcechange value=1> ",
|
||||
print " <input type=checkbox name=forcechange value=1> ",
|
||||
"$text{'uedit_forcechange'}\n";
|
||||
}
|
||||
print "</td> </tr>\n";
|
||||
@@ -374,7 +374,7 @@ print "<tr $cb> <td><table>\n";
|
||||
|
||||
print "<tr> <td><b>$text{'uedit_movehome'}</b></td>\n";
|
||||
print "<td><input type=radio name=movehome value=1 checked> $text{'yes'}</td>\n";
|
||||
print "<td><input type=radio name=movehome value=0> $text{'no'}</td> </tr>\n";
|
||||
print "<td colspan=2><input type=radio name=movehome value=0> $text{'no'}</td> </tr>\n";
|
||||
|
||||
print "<tr> <td><b>$text{'uedit_chuid'}</b></td>\n";
|
||||
print "<td><input type=radio name=chuid value=0> $text{'no'}</td>\n";
|
||||
@@ -392,11 +392,11 @@ print "<td><input type=radio name=chgid value=2> ",
|
||||
|
||||
print "<tr> <td><b>$text{'uedit_servs'}</b></td>\n";
|
||||
print "<td><input type=radio name=servs value=1> $text{'uedit_mall'}</td>\n";
|
||||
print "<td><input type=radio name=servs value=0 checked> $text{'uedit_mthis'}</td> </tr>\n";
|
||||
print "<td colspan=2><input type=radio name=servs value=0 checked> $text{'uedit_mthis'}</td> </tr>\n";
|
||||
|
||||
print "<tr> <td><b>$text{'uedit_mothers'}</b></td>\n";
|
||||
print "<td><input type=radio name=others value=1 checked> $text{'yes'}</td>\n";
|
||||
print "<td><input type=radio name=others value=0> $text{'no'}</td> </tr>\n";
|
||||
print "<td colspan=2><input type=radio name=others value=0> $text{'no'}</td> </tr>\n";
|
||||
|
||||
print "</table></td> </tr></table><p>\n";
|
||||
|
||||
@@ -429,11 +429,11 @@ if (@icons < @hosts) {
|
||||
"value=\"$text{'uedit_sync'}\"></td>\n";
|
||||
}
|
||||
|
||||
print "</form><form action=\"delete_user.cgi\">\n";
|
||||
print "</tr></table></form><p><form action=\"delete_user.cgi\">\n";
|
||||
print "<input type=hidden name=user value=\"$uinfo{'user'}\">\n";
|
||||
print "<td align=right><input type=submit ",
|
||||
"value=\"$text{'delete'}\"></td> </tr>\n";
|
||||
print "</form></table><p>\n";
|
||||
print "<input type=submit ",
|
||||
"value=\"$text{'delete'}\">\n";
|
||||
print "</form><p>\n";
|
||||
|
||||
print &ui_hr();
|
||||
print &ui_subheading($text{'uedit_hosts'});
|
||||
@@ -461,6 +461,7 @@ if ($config{'table_mode'}) {
|
||||
else {
|
||||
# Show as icons
|
||||
&icons_table(\@links, \@titles, \@icons);
|
||||
print "<br>";
|
||||
}
|
||||
|
||||
&ui_print_footer("", $text{'index_return'});
|
||||
|
||||
@@ -4,7 +4,7 @@
|
||||
|
||||
require './cluster-useradmin-lib.pl';
|
||||
&ReadParse();
|
||||
&ui_print_header(undef, $text{'gedit_title2'}, "", "create_group");
|
||||
&ui_print_header(undef, $text{'gedit_title2'}, "", undef);
|
||||
@hosts = &list_useradmin_hosts();
|
||||
@servers = &list_servers();
|
||||
|
||||
@@ -37,9 +37,8 @@ print "<input type=radio name=passmode value=2> $text{'clear'}\n";
|
||||
print "<input name=pass size=15></td>\n";
|
||||
|
||||
print "<td valign=top><b>$text{'gedit_members'}</b></td>\n";
|
||||
print "<td><table><tr><td><textarea wrap=auto name=members rows=5 cols=10>",
|
||||
"</textarea></td>\n";
|
||||
print "<td valign=top><input type=button onClick='ifield = document.forms[0].members; chooser = window.open(\"/useradmin/my_user_chooser.cgi?multi=1&user=\"+escape(ifield.value), \"chooser\", \"toolbar=no,menubar=no,scrollbars=yes,width=500,height=200\"); chooser.ifield = ifield' value=\"...\"></td></tr></table></td> </tr>\n";
|
||||
print "<td valign=top><input name=members size=14>",
|
||||
"<input type=button onClick='ifield = document.forms[0].members; chooser = window.open(\"/useradmin/my_user_chooser.cgi?multi=1&user=\"+escape(ifield.value), \"chooser\", \"toolbar=no,menubar=no,scrollbars=yes,width=500,height=200\"); chooser.ifield = ifield' value=\"...\"></td> </tr>\n";
|
||||
print "</table></td></tr></table><p>\n";
|
||||
|
||||
print "<table border width=100%>\n";
|
||||
@@ -53,9 +52,8 @@ print "<td><input type=radio name=others value=0> $text{'no'}</td> </tr>\n";
|
||||
# Show server selection input
|
||||
&create_on_input($text{'uedit_servers'});
|
||||
|
||||
print "</table></td> </tr></table><p>\n";
|
||||
print "</table></td> </tr></table><p></p><p></p>\n";
|
||||
|
||||
print "<input type=submit value=\"$text{'create'}\"></form><p>\n";
|
||||
|
||||
&ui_print_footer("", $text{'index_return'});
|
||||
|
||||
|
||||
@@ -68,7 +68,7 @@ else {
|
||||
print "<b>$text{'index_nohosts'}</b><p>\n";
|
||||
}
|
||||
$formno++;
|
||||
print "<form action=add.cgi>\n";
|
||||
print "<form data-post-icon-row-submit action=add.cgi>\n";
|
||||
print "<table width=100%><tr>\n";
|
||||
@addservers = grep { !$gothost{$_->{'id'}} } @servers;
|
||||
if (@addservers) {
|
||||
|
||||
@@ -8,7 +8,7 @@ require './cluster-useradmin-lib.pl';
|
||||
|
||||
print "$text{'sync_desc'}<p>\n";
|
||||
print "<form action=sync.cgi>\n";
|
||||
print "<table>\n";
|
||||
print "<table width='100%'>\n";
|
||||
|
||||
print "<tr> <td valign=top><b>$text{'sync_hosts'}</b></td> <td>\n";
|
||||
&create_on_input(undef, 1, 1);
|
||||
@@ -67,7 +67,7 @@ print "<tr> <td><b>$text{'sync_others'}</b></td>\n";
|
||||
print "<td><input type=radio name=others value=1 checked> $text{'yes'}\n";
|
||||
print "<input type=radio name=others value=0> $text{'no'}</td> </tr>\n";
|
||||
|
||||
print "</table>\n";
|
||||
print "</table><p></p><p></p>\n";
|
||||
print "<input type=submit value='$text{'sync_ok'}'></form>\n";
|
||||
|
||||
&ui_print_footer("", $text{'index_return'});
|
||||
|
||||
@@ -96,8 +96,8 @@ foreach (1 .. 15) {
|
||||
$random_password .= $random_password_chars[
|
||||
rand(scalar(@random_password_chars))];
|
||||
}
|
||||
print "<td valign=top rowspan=4><b>$text{'pass'}</b>",
|
||||
"</td> <td rowspan=4 valign=top>\n";
|
||||
print "<td valign=top rowspan=3><b>$text{'pass'}</b>",
|
||||
"</td> <td rowspan=3 valign=top>\n";
|
||||
printf "<input type=radio name=passmode value=0> %s<br>\n",
|
||||
$uconfig{'empty_mode'} ? $text{'none1'} : $text{'none2'};
|
||||
printf "<input type=radio name=passmode value=1 checked> %s<br>\n",
|
||||
@@ -129,8 +129,8 @@ if ($pft == 1 || $pft == 6) {
|
||||
print " <input name=changeh size=3>";
|
||||
print ":<input name=changemi size=3></td>\n";
|
||||
|
||||
print "<td><b>$text{'expire2'}</b></td>\n";
|
||||
print "<td>";
|
||||
print "<td colspan=1><b>$text{'expire2'}</b></td>\n";
|
||||
print "<td colspan=3>";
|
||||
&date_input("", "", "", 'expire');
|
||||
print " <input name=expireh size=3>";
|
||||
print ":<input name=expiremi size=3></td> </tr>\n";
|
||||
@@ -147,8 +147,8 @@ elsif ($pft == 2) {
|
||||
print "<tr $tb> <td><b>$text{'uedit_passopts'}</b></td> </tr>\n";
|
||||
print "<tr $cb> <td><table width=100%>\n";
|
||||
|
||||
print "<td><b>$text{'expire'}</b></td>\n";
|
||||
print "<td>";
|
||||
print "<td colspan=1><b>$text{'expire'}</b></td>\n";
|
||||
print "<td colspan=3>";
|
||||
&date_input($eday, $emon, $eyear, 'expire');
|
||||
print "</td> </tr>\n";
|
||||
|
||||
@@ -204,7 +204,7 @@ print "<table border width=100%>\n";
|
||||
print "<tr $tb> <td><b>$text{'uedit_gmem'}</b></td> </tr>\n";
|
||||
print "<tr $cb> <td><table width=100%>\n";
|
||||
print "<tr> <td valign=top><b>$text{'group'}</b></td> <td valign=top>\n";
|
||||
printf "<input name=gid size=8 value=\"%s\">\n",
|
||||
printf "<input name=gid size=15 value=\"%s\">\n",
|
||||
$uconfig{'default_group'};
|
||||
print "<input type=button onClick='ifield = document.forms[0].gid; chooser = window.open(\"/useradmin/my_group_chooser.cgi?multi=0&group=\"+escape(ifield.value), \"chooser\", \"toolbar=no,menubar=no,scrollbars=yes,width=300,height=200\"); chooser.ifield = ifield' value=\"...\"></td>\n";
|
||||
|
||||
@@ -248,9 +248,9 @@ print "<td><input type=radio name=others value=0> $text{'no'}</td> </tr>\n";
|
||||
# Show selector for hosts to create on
|
||||
&create_on_input($text{'uedit_servers'});
|
||||
|
||||
print "</table></td> </tr></table><p>\n";
|
||||
print "</table></td> </tr></table><p></p><p></p>\n";
|
||||
|
||||
print "<input type=submit value=\"$text{'create'}\"></form><p>\n";
|
||||
print "<input type=submit value=\"$text{'create'}\"></form>\n";
|
||||
|
||||
&ui_print_footer("", $text{'index_return'});
|
||||
|
||||
|
||||
@@ -53,27 +53,36 @@ printf "<td>%s</td> </tr>\n", $host->{'version'};
|
||||
print "</table></td></tr></table>\n";
|
||||
|
||||
# Show delete and refresh buttons
|
||||
print "<table width=100%><tr>\n";
|
||||
print "<form action=delete_host.cgi>\n";
|
||||
print "<p></p><table width=100%><tr>\n";
|
||||
print "<td><form action=delete_host.cgi>\n";
|
||||
print "<input type=hidden name=id value=$in{'id'}>\n";
|
||||
print "<td><input type=submit value='$text{'host_delete'}'></td>\n";
|
||||
print "</form>\n";
|
||||
print "<input type=submit value='$text{'host_delete'}'>\n";
|
||||
print "</form></td>\n";
|
||||
|
||||
print "<form action=refresh.cgi>\n";
|
||||
print "<td align=right><form action=refresh.cgi>\n";
|
||||
print "<input type=hidden name=id value=$in{'id'}>\n";
|
||||
print "<td align=right><input type=submit value='$text{'host_refresh'}'></td>\n";
|
||||
print "</form>\n";
|
||||
print "<input type=submit value='$text{'host_refresh'}'>\n";
|
||||
print "</form></td>\n";
|
||||
print "</tr></table>\n";
|
||||
|
||||
# Show table of modules and themes
|
||||
print "<table border width=100%>\n";
|
||||
print "<p></p><table border width=100%>\n";
|
||||
print "<tr $tb> <td><b>$text{'host_header_m'}</b></td> </tr>\n";
|
||||
print "<tr $cb> <td><table width=100%>\n";
|
||||
|
||||
$i = 0;
|
||||
my $total_cells = scalar(@modules);
|
||||
foreach $m (sort { $a->{'desc'} cmp $b->{'desc'} } @modules) {
|
||||
my $colspan = '';
|
||||
if ($total_cells == $i + 1 && $total_cells%$i == 1) {
|
||||
if ($i%3 == 0) {
|
||||
$colspan = " colspan=3 ";
|
||||
} elsif($i%3 == 1) {
|
||||
$colspan = " colspan=2 ";
|
||||
}
|
||||
}
|
||||
print "<tr>\n" if ($i%3 == 0);
|
||||
print "<td width=33%><a href='edit_mod.cgi?mod=$m->{'dir'}&host=$in{'id'}'>",$m->{'desc'},"</td>\n";
|
||||
print "<td $colspan width=33%><a href='edit_mod.cgi?mod=$m->{'dir'}&host=$in{'id'}'>",$m->{'desc'},"</td>\n";
|
||||
print "</tr>\n" if ($i%3 == 2);
|
||||
$i++;
|
||||
}
|
||||
@@ -82,9 +91,18 @@ if (@themes) {
|
||||
print "</table></td></tr>\n";
|
||||
print "<tr $tb> <td><b>$text{'host_header_t'}</b></td> </tr>\n";
|
||||
print "<tr $cb> <td><table width=100%>\n";
|
||||
my $total_cells_themes = scalar(@themes);
|
||||
foreach $t (sort { $a->{'desc'} cmp $b->{'desc'} } @themes) {
|
||||
my $colspan = '';
|
||||
if ($total_cells_themes == $i + 1 && $total_cells_themes%$i == 1) {
|
||||
if ($i%3 == 0) {
|
||||
$colspan = " colspan=3 ";
|
||||
} elsif($i%3 == 1) {
|
||||
$colspan = " colspan=2 ";
|
||||
}
|
||||
}
|
||||
print "<tr>\n" if ($i%3 == 0);
|
||||
print "<td width=33%><a href='edit_mod.cgi?theme=$t->{'dir'}$in{'id'}'>",$t->{'desc'},"</td>\n";
|
||||
print "<td $colspan width=33%><a href='edit_mod.cgi?theme=$t->{'dir'}$in{'id'}'>",$t->{'desc'},"</td>\n";
|
||||
print "</tr>\n" if ($i%3 == 2);
|
||||
$i++;
|
||||
}
|
||||
|
||||
@@ -170,16 +170,16 @@ else {
|
||||
print "</table></td></tr></table><p>\n";
|
||||
|
||||
print "<table width=100%><tr>\n";
|
||||
print "<form action=delete_mod.cgi>\n";
|
||||
print "<td><form action=delete_mod.cgi>\n";
|
||||
print "<input type=hidden name=type value=\"$type\">\n";
|
||||
print "<input type=hidden name=mod value=\"$name\">\n";
|
||||
print "<td><input type=submit value='",$text{"edit_uninst_$type"},"'>\n";
|
||||
print "<input type=submit value='",$text{"edit_uninst_$type"},"'>\n";
|
||||
print "<select name=server>\n";
|
||||
print "<option value=-1>$text{'edit_all'}</option>\n";
|
||||
foreach $s (@got) {
|
||||
print "<option value='$s->{'id'}'>",&server_name($s),"</option>\n";
|
||||
}
|
||||
print "</select></td></form>\n";
|
||||
print "</select></form></td>\n";
|
||||
|
||||
print "</tr></table>\n";
|
||||
|
||||
@@ -191,6 +191,7 @@ print &ui_subheading($text{'edit_hosts'});
|
||||
@titles = map { &server_name($_).
|
||||
($_->{'module'}->{'version'} ? " ($text{'host_version2'} $_->{'module'}->{'version'})" : "") } @got;
|
||||
&icons_table(\@links, \@titles, \@icons);
|
||||
print "<br>";
|
||||
|
||||
&remote_finished();
|
||||
&ui_print_footer("", $text{'index_return'});
|
||||
|
||||
@@ -75,10 +75,10 @@ foreach $t (&all_themes(\@hosts)) {
|
||||
$themesel .= "</select>\n";
|
||||
|
||||
# Show button for adding server
|
||||
print "<table width=100%><tr>\n";
|
||||
print "<table data-post-icon-row-submit width=100%><tr>\n";
|
||||
@addservers = grep { !$gothost{$_->{'id'}} } @servers;
|
||||
if (@addservers) {
|
||||
print "<td><form action=add.cgi><td>\n";
|
||||
print "<td><form action=add.cgi>\n";
|
||||
print "<input type=submit name=add value='$text{'index_add'}'>\n";
|
||||
print "<select name=server>\n";
|
||||
foreach $s (@addservers) {
|
||||
|
||||
@@ -169,14 +169,15 @@ return sort { $a->{'name'} cmp $b->{'name'} }
|
||||
map { @{$_->{'users'}} } @{$_[0]};
|
||||
}
|
||||
|
||||
# create_on_input(desc, [no-donthave], [no-have], [multiple])
|
||||
# create_on_input(desc, [no-donthave], [no-have], [multiple], [colspan])
|
||||
sub create_on_input
|
||||
{
|
||||
local @hosts = &list_webmin_hosts();
|
||||
local @servers = &list_servers();
|
||||
if ($_[0]) {
|
||||
print "<tr> <td><b>$_[0]</b></td>\n";
|
||||
print "<td>\n";
|
||||
my $colspan = "colspan=$_[4]" if ($_[4]);
|
||||
print "<td $colspan>\n";
|
||||
}
|
||||
if ($_[3]) {
|
||||
print "<select name=server size=5 multiple>\n";
|
||||
|
||||
@@ -53,7 +53,7 @@ printf "<td>%s</td> </tr>\n", $host->{'version'};
|
||||
print "</table></td></tr></table>\n";
|
||||
|
||||
# Show delete and refresh buttons
|
||||
print "<table width=100%><tr>\n";
|
||||
print "<p></p><table width=100%><tr>\n";
|
||||
|
||||
print "<td><form action=delete_host.cgi>\n";
|
||||
print "<input type=hidden name=id value=$in{'id'}>\n";
|
||||
@@ -68,14 +68,23 @@ print "</form></td>\n";
|
||||
print "</tr></table>\n";
|
||||
|
||||
# Show table of modules and themes
|
||||
print "<table border width=100%>\n";
|
||||
print "<p></p><table border width=100%>\n";
|
||||
print "<tr $tb> <td><b>$text{'host_header_m'}</b></td> </tr>\n";
|
||||
print "<tr $cb> <td><table width=100%>\n";
|
||||
|
||||
$i = 0;
|
||||
my $total_cells = scalar(@modules);
|
||||
foreach $m (sort { $a->{'desc'} cmp $b->{'desc'} } @modules) {
|
||||
my $colspan = '';
|
||||
if ($total_cells == $i + 1 && $total_cells%$i == 1) {
|
||||
if ($i%3 == 0) {
|
||||
$colspan = " colspan=3 ";
|
||||
} elsif($i%3 == 1) {
|
||||
$colspan = " colspan=2 ";
|
||||
}
|
||||
}
|
||||
print "<tr>\n" if ($i%3 == 0);
|
||||
print "<td width=33%><a href='edit_mod.cgi?mod=$m->{'dir'}&host=$in{'id'}'>",$m->{'desc'},"</td>\n";
|
||||
print "<td $colspan width=33%><a href='edit_mod.cgi?mod=$m->{'dir'}&host=$in{'id'}'>",$m->{'desc'},"</td>\n";
|
||||
print "</tr>\n" if ($i%3 == 2);
|
||||
$i++;
|
||||
}
|
||||
@@ -84,9 +93,18 @@ if (@themes) {
|
||||
print "</table></td></tr>\n";
|
||||
print "<tr $tb> <td><b>$text{'host_header_t'}</b></td> </tr>\n";
|
||||
print "<tr $cb> <td><table width=100%>\n";
|
||||
my $total_cells_themes = scalar(@themes);
|
||||
foreach $t (sort { $a->{'desc'} cmp $b->{'desc'} } @themes) {
|
||||
my $colspan = '';
|
||||
if ($total_cells_themes == $i + 1 && $total_cells_themes%$i == 1) {
|
||||
if ($i%3 == 0) {
|
||||
$colspan = " colspan=3 ";
|
||||
} elsif($i%3 == 1) {
|
||||
$colspan = " colspan=2 ";
|
||||
}
|
||||
}
|
||||
print "<tr>\n" if ($i%3 == 0);
|
||||
print "<td width=33%><a href='edit_mod.cgi?theme=$t->{'dir'}$in{'id'}'>",$t->{'desc'},"</td>\n";
|
||||
print "<td $colspan width=33%><a href='edit_mod.cgi?theme=$t->{'dir'}$in{'id'}'>",$t->{'desc'},"</td>\n";
|
||||
print "</tr>\n" if ($i%3 == 2);
|
||||
$i++;
|
||||
}
|
||||
@@ -94,7 +112,7 @@ if (@themes) {
|
||||
print "</table></td></tr></table><br>\n";
|
||||
|
||||
# Show table of users and groups
|
||||
print "<table border width=100%>\n";
|
||||
print "<p></p><table border width=100%>\n";
|
||||
print "<tr $tb> <td><b>$text{'host_header_u'}</b></td> </tr>\n";
|
||||
print "<tr $cb> <td><table width=100%>\n";
|
||||
$i = 0;
|
||||
|
||||
@@ -177,33 +177,33 @@ print "</table></td></tr></table><p>\n";
|
||||
print "<table width=100%><tr>\n";
|
||||
|
||||
# Show button to delete module
|
||||
print "<form action=delete_mod.cgi>\n";
|
||||
print "<td><form action=delete_mod.cgi>\n";
|
||||
print "<input type=hidden name=type value=\"$type\">\n";
|
||||
print "<input type=hidden name=mod value=\"$name\">\n";
|
||||
print "<td><input type=submit value='",$text{"edit_uninst_$type"},"'>\n";
|
||||
print "<input type=submit value='",$text{"edit_uninst_$type"},"'>\n";
|
||||
print "<select name=server>\n";
|
||||
print "<option value=-1>$text{'edit_all'}</option>\n";
|
||||
foreach $s (@got) {
|
||||
print "<option value='$s->{'id'}'>",&server_name($s),"</option>\n";
|
||||
}
|
||||
print "</select></td></form>\n";
|
||||
print "</select></form></td>\n";
|
||||
|
||||
if ($type eq 'mod') {
|
||||
# Show button to edit config
|
||||
print "<form action=edit_config.cgi>\n";
|
||||
print "<td><form action=edit_config.cgi>\n";
|
||||
print "<input type=hidden name=type value=\"$type\">\n";
|
||||
print "<input type=hidden name=mod value=\"$name\">\n";
|
||||
print "<td><input type=submit value='$text{'edit_config'}'>\n";
|
||||
print "<input type=submit value='$text{'edit_config'}'>\n";
|
||||
&create_on_input(undef, 1, 0, 0);
|
||||
print "</td></form>\n";
|
||||
print "</form></td>\n";
|
||||
}
|
||||
|
||||
if ($type eq 'mod') {
|
||||
# Show user/group ACL selector
|
||||
print "<form action=edit_acl.cgi>\n";
|
||||
print "<td align=right><form action=edit_acl.cgi>\n";
|
||||
print "<input type=hidden name=mod value=\"$name\">\n";
|
||||
print "<input type=hidden name=host value=\"$checkonh->{'id'}\">\n";
|
||||
print "<td align=right><input type=submit value='$text{'edit_acl'}'>\n";
|
||||
print "<input type=submit value='$text{'edit_acl'}'>\n";
|
||||
print "<select name=whohost>\n";
|
||||
for($i=0; $i<@goth; $i++) {
|
||||
$h = $goth[$i];
|
||||
@@ -227,7 +227,7 @@ if ($type eq 'mod') {
|
||||
if (&indexof($name, @m) >= 0);
|
||||
}
|
||||
}
|
||||
print "</select></td></form>\n";
|
||||
print "</select></form></td>\n";
|
||||
}
|
||||
|
||||
print "</tr></table>\n";
|
||||
@@ -240,6 +240,7 @@ print &ui_subheading($text{'edit_hosts'});
|
||||
@titles = map { &server_name($_).
|
||||
($_->{'module'}->{'version'} ? " ($text{'host_version2'} $_->{'module'}->{'version'})" : "") } @got;
|
||||
&icons_table(\@links, \@titles, \@icons);
|
||||
print "<br>";
|
||||
|
||||
&remote_finished();
|
||||
&ui_print_footer("", $text{'index_return'});
|
||||
|
||||
@@ -45,15 +45,15 @@ for($i=$mp*2; $i<@mods; $i++) {
|
||||
print "</select>\n";
|
||||
|
||||
print "<br>\n";
|
||||
print "<a href='' onClick='for(i=0; i<document.forms[0].mods1.options.length; i++) { document.forms[0].mods1.options[i].selected = true; } for(i=0; i<document.forms[0].mods2.options.length; i++) { document.forms[0].mods2.options[i].selected = true; } for(i=0; i<document.forms[0].mods3.options.length; i++) { document.forms[0].mods3.options[i].selected = true; } return false'>$text{'user_sall'}</a> \n";
|
||||
print "<a href='' onClick='for(i=0; i<document.forms[0].mods1.options.length; i++) { document.forms[0].mods1.options[i].selected = false; } for(i=0; i<document.forms[0].mods2.options.length; i++) { document.forms[0].mods2.options[i].selected = false; } for(i=0; i<document.forms[0].mods3.options.length; i++) { document.forms[0].mods3.options[i].selected = false; } return false'>$text{'user_snone'}</a> \n";
|
||||
print "<a href='' onClick='for(i=0; i<document.forms[0].mods1.options.length; i++) { document.forms[0].mods1.options[i].selected = !document.forms[0].mods1.options[i].selected; } for(i=0; i<document.forms[0].mods2.options.length; i++) { document.forms[0].mods2.options[i].selected = !document.forms[0].mods2.options[i].selected; } for(i=0; i<document.forms[0].mods3.options.length; i++) { document.forms[0].mods3.options[i].selected = !document.forms[0].mods3.options[i].selected; } return false'>$text{'user_sinvert'}</a><br>\n";
|
||||
print "<button class='btn btn-tiny' type='button' onClick='for(i=0; i<this.form.mods1.options.length; i++) { this.form.mods1.options[i].selected = true; } for(i=0; i<this.form.mods2.options.length; i++) { this.form.mods2.options[i].selected = true; } for(i=0; i<this.form.mods3.options.length; i++) { this.form.mods3.options[i].selected = true; } return false'>$text{'user_sall'}</button>\n";
|
||||
print "<button class='btn btn-tiny' type='button' onClick='for(i=0; i<this.form.mods1.options.length; i++) { this.form.mods1.options[i].selected = false; } for(i=0; i<this.form.mods2.options.length; i++) { this.form.mods2.options[i].selected = false; } for(i=0; i<this.form.mods3.options.length; i++) { this.form.mods3.options[i].selected = false; } return false'>$text{'user_snone'}</button>\n";
|
||||
print "<button class='btn btn-tiny' type='button' onClick='for(i=0; i<this.form.mods1.options.length; i++) { this.form.mods1.options[i].selected = !this.form.mods1.options[i].selected; } for(i=0; i<this.form.mods2.options.length; i++) { this.form.mods2.options[i].selected = !this.form.mods2.options[i].selected; } for(i=0; i<this.form.mods3.options.length; i++) { this.form.mods3.options[i].selected = !this.form.mods3.options[i].selected; } return false'>$text{'user_sinvert'}</a><br>\n";
|
||||
|
||||
print "</td> </tr>\n";
|
||||
|
||||
&create_on_input($text{'group_servers'}, 0, 1);
|
||||
&create_on_input($text{'group_servers'}, 0, 1, undef, 3);
|
||||
|
||||
print "</table></td></tr></table><br>\n";
|
||||
print "</table></td></tr></table><p></p><p></p>\n";
|
||||
print "<input type=submit value='$text{'create'}'></form>\n";
|
||||
|
||||
&ui_print_footer("", $text{'index_return'});
|
||||
|
||||
@@ -87,7 +87,7 @@ foreach $u (@wgroups) {
|
||||
}
|
||||
$groupsel .= "</select>\n";
|
||||
|
||||
print "<table width=100%><tr>\n";
|
||||
print "<table data-post-icon-row-submit width=100%><tr>\n";
|
||||
@addservers = grep { !$gothost{$_->{'id'}} } @servers;
|
||||
if (@addservers) {
|
||||
print "<td><form action=add.cgi>\n";
|
||||
|
||||
@@ -8,7 +8,7 @@ require './cluster-webmin-lib.pl';
|
||||
|
||||
print "$text{'sync_desc'}<p>\n";
|
||||
print "<form action=sync.cgi>\n";
|
||||
print "<table>\n";
|
||||
print "<table width='100%'>\n";
|
||||
|
||||
print "<tr> <td valign=top><b>$text{'sync_hosts'}</b></td> <td>\n";
|
||||
&create_on_input(undef, 1, 1, 1);
|
||||
@@ -44,7 +44,7 @@ print "<tr> <td><b>$text{'sync_test'}</b></td>\n";
|
||||
print "<td><input type=radio name=test value=1> $text{'yes'}\n";
|
||||
print "<input type=radio name=test value=0 checked> $text{'no'}</td> </tr>\n";
|
||||
|
||||
print "</table>\n";
|
||||
print "</table><p></p><p></p>\n";
|
||||
print "<input type=submit value='$text{'sync_ok'}'></form>\n";
|
||||
|
||||
&ui_print_footer("", $text{'index_return'});
|
||||
|
||||
@@ -27,12 +27,12 @@ foreach $g (@wgroups) {
|
||||
print "</select></td> </tr>\n";
|
||||
|
||||
print "<tr> <td><b>$text{'user_pass'}</b></td> <td colspan=3>\n";
|
||||
print "<select name=pass_def>\n";
|
||||
print "<select class='ui_select margined-bottom-1' name=pass_def>\n";
|
||||
print "<option value=0 selected>$text{'user_set'} ..</option>\n";
|
||||
print "<option value=3>$text{'user_unix'}</option>\n";
|
||||
print "<option value=4>$text{'user_lock'}</option>\n";
|
||||
print "<option value=5>$text{'user_extauth'}</option>\n";
|
||||
print "</select><input type=password name=pass size=25></td> </tr>\n";
|
||||
print "</select> <input type=password name=pass size=25></td> </tr>\n";
|
||||
|
||||
print "<tr> <td><b>$text{'user_lang'}</b></td> <td>\n";
|
||||
print "<select name=lang>\n";
|
||||
@@ -81,15 +81,15 @@ for($i=$mp*2; $i<@mods; $i++) {
|
||||
print "</select>\n";
|
||||
|
||||
print "<br>\n";
|
||||
print "<a href='' onClick='for(i=0; i<document.forms[0].mods1.options.length; i++) { document.forms[0].mods1.options[i].selected = true; } for(i=0; i<document.forms[0].mods2.options.length; i++) { document.forms[0].mods2.options[i].selected = true; } for(i=0; i<document.forms[0].mods3.options.length; i++) { document.forms[0].mods3.options[i].selected = true; } return false'>$text{'user_sall'}</a> \n";
|
||||
print "<a href='' onClick='for(i=0; i<document.forms[0].mods1.options.length; i++) { document.forms[0].mods1.options[i].selected = false; } for(i=0; i<document.forms[0].mods2.options.length; i++) { document.forms[0].mods2.options[i].selected = false; } for(i=0; i<document.forms[0].mods3.options.length; i++) { document.forms[0].mods3.options[i].selected = false; } return false'>$text{'user_snone'}</a> \n";
|
||||
print "<a href='' onClick='for(i=0; i<document.forms[0].mods1.options.length; i++) { document.forms[0].mods1.options[i].selected = !document.forms[0].mods1.options[i].selected; } for(i=0; i<document.forms[0].mods2.options.length; i++) { document.forms[0].mods2.options[i].selected = !document.forms[0].mods2.options[i].selected; } for(i=0; i<document.forms[0].mods3.options.length; i++) { document.forms[0].mods3.options[i].selected = !document.forms[0].mods3.options[i].selected; } return false'>$text{'user_sinvert'}</a><br>\n";
|
||||
print "<button class='btn btn-tiny' type='button' onClick='for(i=0; i<this.form.mods1.options.length; i++) { this.form.mods1.options[i].selected = true; } for(i=0; i<this.form.mods2.options.length; i++) { this.form.mods2.options[i].selected = true; } for(i=0; i<this.form.mods3.options.length; i++) { this.form.mods3.options[i].selected = true; } return false'>$text{'user_sall'}</button>\n";
|
||||
print "<button class='btn btn-tiny' type='button' onClick='for(i=0; i<this.form.mods1.options.length; i++) { this.form.mods1.options[i].selected = false; } for(i=0; i<this.form.mods2.options.length; i++) { this.form.mods2.options[i].selected = false; } for(i=0; i<this.form.mods3.options.length; i++) { this.form.mods3.options[i].selected = false; } return false'>$text{'user_snone'}</button>\n";
|
||||
print "<button class='btn btn-tiny' type='button' onClick='for(i=0; i<this.form.mods1.options.length; i++) { this.form.mods1.options[i].selected = !this.form.mods1.options[i].selected; } for(i=0; i<this.form.mods2.options.length; i++) { this.form.mods2.options[i].selected = !this.form.mods2.options[i].selected; } for(i=0; i<this.form.mods3.options.length; i++) { this.form.mods3.options[i].selected = !this.form.mods3.options[i].selected; } return false'>$text{'user_sinvert'}</button><br>\n";
|
||||
|
||||
print "</td> </tr>\n";
|
||||
|
||||
&create_on_input($text{'user_servers'}, 0, 1);
|
||||
&create_on_input($text{'user_servers'}, 0, 1, undef, 3);
|
||||
|
||||
print "</table></td></tr></table><br>\n";
|
||||
print "</table></td></tr></table><p></p><p></p>\n";
|
||||
print "<input type=submit value='$text{'create'}'></form>\n";
|
||||
|
||||
&ui_print_footer("", $text{'index_return'});
|
||||
|
||||
47
compare_lang.sh
Executable file
47
compare_lang.sh
Executable file
@@ -0,0 +1,47 @@
|
||||
#!/bin/bash
|
||||
#
|
||||
# compare_lang.sh
|
||||
# quick and dirty script to find missing lang strings in webmin lang files
|
||||
#
|
||||
# (c) https://github.com/gnadelwartz, 2020
|
||||
#
|
||||
# DISPLAY mising strings from one langfile:
|
||||
#
|
||||
# ./compare_lang.sh module/lang/xx
|
||||
#
|
||||
# UPDATE one langfile of a module with missing strings:
|
||||
#
|
||||
# ./compare_lang.sh module/lang/xx >>module/lang/xx
|
||||
#
|
||||
# UPDATE one langfile in ALL modules with missing strings:
|
||||
#
|
||||
# for FILE in webmin/*/lang/xx; do
|
||||
# ./compare_lang.sh $FILE >>$FILE
|
||||
# done
|
||||
|
||||
|
||||
|
||||
# $1 = lang file to check for missing strings against en
|
||||
|
||||
ENGLISH="$(dirname "$1")/en"
|
||||
|
||||
if [ "$1" == "" -o ! -f "$1" ]
|
||||
then
|
||||
echo "file does not exist or no file given ..."
|
||||
echo "usage: $0 file"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
while read message
|
||||
do
|
||||
# skip empty lines
|
||||
[ "$message" == "" ] && continue
|
||||
# skip comments, __noref and log_* messsages
|
||||
if [[ "$message" == "#"* ]] || [[ "$message" == "__norefs"* ]] || [[ "$message" == "log_"* ]]; then
|
||||
echo "skip $message" 1>&2
|
||||
continue
|
||||
fi
|
||||
# output missing lines
|
||||
key="${message%%=*}"; [ "$key" == "$message" ] && continue
|
||||
grep -e "^${key}=" "$1" >/dev/null || echo "${message}"
|
||||
done < "${ENGLISH}"
|
||||
@@ -8,11 +8,12 @@ require './config-lib.pl';
|
||||
&init_config();
|
||||
&ReadParse();
|
||||
$m = $in{'module'} || $ARGV[0];
|
||||
%module_info = &get_module_info($m);
|
||||
%module_info || &error($text{'config_emodule'});
|
||||
&foreign_available($m) || &error($text{'config_eaccess'});
|
||||
%access = &get_module_acl(undef, $m);
|
||||
$access{'noconfig'} &&
|
||||
&error($text{'config_ecannot'});
|
||||
%module_info = &get_module_info($m);
|
||||
if (-r &help_file($m, "config_intro")) {
|
||||
$help = [ "config_intro", $m ];
|
||||
}
|
||||
|
||||
@@ -9,6 +9,8 @@ require './config-lib.pl';
|
||||
&ReadParse();
|
||||
$m = $in{'module'};
|
||||
&error_setup($text{'config_err'});
|
||||
%module_info = &get_module_info($m);
|
||||
%module_info || &error($text{'config_emodule'});
|
||||
&foreign_available($m) || &error($text{'config_eaccess'});
|
||||
%access = &get_module_acl(undef, $m);
|
||||
$access{'noconfig'} && &error($text{'config_ecannot'});
|
||||
|
||||
@@ -1,4 +1,3 @@
|
||||
risk=high
|
||||
desc=Perl Modules
|
||||
name=CPAN
|
||||
longdesc=Install new Perl modules on your system, and view those already installed.
|
||||
|
||||
@@ -2,7 +2,7 @@ line1=Configurable options,11
|
||||
max_len=Maximum command length to display,3,Unlimited
|
||||
max_jobs=Maximum Cron jobs to show,3,Unlimited
|
||||
show_time=Show job schedules?,1,1-Yes,0-No
|
||||
show_comment=Show job comments?,1,1-Yes,0-No
|
||||
show_comment=Show job description?,1,1-Yes,0-No
|
||||
show_run=Display running status of jobs?,1,2-Yes, and allow starting and stopping,1-Yes,0-No
|
||||
show_next=Show next time each job will run?,1,1-Yes,0-No
|
||||
match_mode=Find job processes by,1,1-Command only,0-Command and arguments
|
||||
|
||||
@@ -4,6 +4,7 @@ max_jobs=Nombre m
|
||||
show_time=Mostra la planificació dels treballs,1,1-Sí,0-No
|
||||
show_comment=Mostra els comentaris dels treballs,1,1-Sí,0-No
|
||||
show_run=Mostra l'estat actual dels treballs,1,2-Sí, i permet l'inici i l'aturada,1-Sí,0-No
|
||||
show_next=Mostra-ho la propera vegada que s'executi cada treball,1,1-Sí,0-No
|
||||
match_mode=Busca els processos dels treballs per,1,1-Només l'ordre,0-L'ordre i els arguments
|
||||
match_user=Fes coincidir els noms d'usuaris en buscar processos de treballs,1,1-Sí,0-No
|
||||
kill_subs=Mata els subprocessos en matar els treballs,1,1-Sí,0-No
|
||||
|
||||
@@ -726,8 +726,9 @@ $dir = "$config{'run_parts_dir'}/$dir"
|
||||
opendir(DIR, &translate_filename($dir));
|
||||
local @rv = readdir(DIR);
|
||||
closedir(DIR);
|
||||
@rv = grep { !/^\./ } @rv;
|
||||
@rv = grep { /^[a-zA-Z0-9\_\-]+$/ } @rv;
|
||||
@rv = map { $dir."/".$_ } @rv;
|
||||
@rv = grep { -x $_ } @rv;
|
||||
return @rv;
|
||||
}
|
||||
|
||||
@@ -813,8 +814,10 @@ change_special_mode(form, 0);
|
||||
|
||||
function change_special_mode(form, special)
|
||||
{
|
||||
form.special_def[0].checked = special;
|
||||
form.special_def[1].checked = !special;
|
||||
if(form.special_def) {
|
||||
form.special_def[0].checked = special;
|
||||
form.special_def[1].checked = !special;
|
||||
}
|
||||
}
|
||||
</script>
|
||||
EOF
|
||||
@@ -971,8 +974,10 @@ change_special_mode(form, 0);
|
||||
|
||||
function change_special_mode(form, special)
|
||||
{
|
||||
form.special_def[0].checked = special;
|
||||
form.special_def[1].checked = !special;
|
||||
if(form.special_def) {
|
||||
form.special_def[0].checked = special;
|
||||
form.special_def[1].checked = !special;
|
||||
}
|
||||
}
|
||||
</script>
|
||||
EOF
|
||||
@@ -1672,6 +1677,9 @@ elsif ($job->{'special'} eq 'yearly') {
|
||||
'months' => 1,
|
||||
'weekdays' => '*' };
|
||||
}
|
||||
elsif ($job->{'special'} eq 'reboot') {
|
||||
return undef;
|
||||
}
|
||||
my @mins = &cron_all_ranges($job->{'mins'}, 0, 59);
|
||||
my @hours = &cron_all_ranges($job->{'hours'}, 0, 23);
|
||||
my @days = &cron_all_ranges($job->{'days'}, 1, 31);
|
||||
@@ -1714,11 +1722,13 @@ if ($w eq "*") {
|
||||
}
|
||||
elsif ($w =~ /^\*\/(\d+)$/) {
|
||||
# only every Nth
|
||||
for($j=$min; $j<=$max; $j+=$1) { $inuse{$j}++; }
|
||||
my $step = $1 || 1;
|
||||
for($j=$min; $j<=$max; $j+=$step) { $inuse{$j}++; }
|
||||
}
|
||||
elsif ($w =~ /^(\d+)-(\d+)\/(\d+)$/) {
|
||||
# only every Nth of some range
|
||||
for($j=$1; $j<=$2; $j+=$3) { $inuse{int($j)}++; }
|
||||
my $step = $3 || 1;
|
||||
for($j=$1; $j<=$2; $j+=$step) { $inuse{int($j)}++; }
|
||||
}
|
||||
elsif ($w =~ /^(\d+)-(\d+)$/) {
|
||||
# all of some range
|
||||
|
||||
@@ -62,7 +62,7 @@ print &ui_table_row($text{'edit_active'},
|
||||
&ui_yesno_radio("active", $job->{'active'} ? 1 : 0));
|
||||
|
||||
# Next run time
|
||||
if (!$in{'new'}) {
|
||||
if (!$in{'new'} && ($config{'show_next'} || $userconfig{'show_next'})) {
|
||||
$n = &next_run($job);
|
||||
print &ui_table_row($text{'edit_next'},
|
||||
$n ? &make_date($n) : "<i>$text{'index_nunknown'}</i>");
|
||||
|
||||
@@ -14,6 +14,8 @@ index_manual=Edita manualment els treballs cron.
|
||||
index_return=a la llista de cron
|
||||
index_env=Variable d'entorn
|
||||
index_move=Desplaça
|
||||
index_next=Propera execució
|
||||
index_nunknown=Desconeguda
|
||||
index_run=En execució
|
||||
index_ecmd=No s'ha trobat l'ordre $1 en gestionar les configuracions d'usuari de Cron. Pot ser que Cron no estigui instal·lat en aquest sistema?
|
||||
index_esingle=El fitxer $1 que llista els treballs Cron no existeix. Pot ser que Cron no estigui instal·lat en aquest sistema?
|
||||
@@ -36,6 +38,7 @@ edit_ecannot=No tens perm
|
||||
edit_details=Detalls del treball
|
||||
edit_user=Executa el treball cron com
|
||||
edit_active=Activa
|
||||
edit_next=Hora de la ropera execució
|
||||
edit_commands=Ordres
|
||||
edit_command=Ordre
|
||||
edit_comment=Descripció
|
||||
|
||||
@@ -175,3 +175,8 @@ when_interval=jede $1 Sekunde
|
||||
when_min=jede Minute
|
||||
when_month=jeden $3. eines jeden Monates um $2:$1
|
||||
when_weekday=jeden $3 um $2:$1
|
||||
index_next=Nächte Ausfürung
|
||||
index_nunknown=Unbekannt
|
||||
edit_next=Zeit der nächten Ausfürung
|
||||
when_boot=beim Systemstart
|
||||
ucwhen_boot=Beim Systemstart
|
||||
|
||||
19
cron/lang/hu
19
cron/lang/hu
@@ -40,6 +40,7 @@ edit_hours=
|
||||
edit_input=Adatbevitel a parancshoz
|
||||
edit_mins=Percek
|
||||
edit_months=Hónapok
|
||||
edit_next=Következő futtatás ideje
|
||||
edit_range=Dátum határok a futtatáshoz
|
||||
edit_return=cron munka
|
||||
edit_run=Futtatás most
|
||||
@@ -85,15 +86,21 @@ index_create=
|
||||
index_delete=Kiválasztott munka törlése
|
||||
index_disable=Kiválasztott munka letiltása
|
||||
index_ecmd=A $1 Cron parancsot amit a felhasználónak állítani szeretne nem találom. Talán a Cron nincs telepítve a rendszerbe?
|
||||
index_econfigcheck=A Cron munkákat nem tudjuk kezelni az ön rendszerén, mivel a modul beállítások nem megfelelőek: $1
|
||||
index_ecreate=Új környezeti változó létrehozása
|
||||
index_ecrondir=A Cron munka könyvtár ( $1 ) nem létezik. Előfordulhat, hogy a modul beállításai nem pontosak vagy a Cron nincs telepítve?
|
||||
index_ecrondir_create=Megpróbálja létrehozni $1 könyvtárat a munkáknak?
|
||||
index_enable=Kiválasztott munka engedélyezése
|
||||
index_env=Környezeti változó
|
||||
index_esearch=Nem található a keresett $1
|
||||
index_esingle=Ez a fájl $1 a Cron munkák listájában nem létezik. Talán a Cron nincs telepítve a rendszerbe?
|
||||
index_manual=Beállítások kézi szerkesztése.
|
||||
index_move=Mozgatás
|
||||
index_next=Következő futtatás
|
||||
index_none=Ezen a rendszeren nincsenek cron munkák
|
||||
index_none2=Jelenleg nincs olyan crom munka, amihez Önnek joga lenne.
|
||||
index_none3=Önnek nincs semmilyen cron munkája jelenleg.
|
||||
index_nunknown=Ismeretlen
|
||||
index_ok=Keresés
|
||||
index_reset=Keresés visszaállítása.
|
||||
index_return=a cron listához
|
||||
@@ -101,6 +108,7 @@ index_run=Fut?
|
||||
index_search=Időzített feladat (Cron munka) keresése:
|
||||
index_searchres=Egyező Cron munkák: $1 ..
|
||||
index_title=Időzitett futtatások (Cron munkák)
|
||||
index_toomany2=Túl sok megjelenítendő munka. Használja a keresési mezőt a lista szűrésére!
|
||||
index_user=Felhasználó
|
||||
index_when=Futtatás megadott időben
|
||||
kill_ecannot=Önnek nincs joga megszakítani ezt a munkát
|
||||
@@ -134,6 +142,12 @@ log_kill_l="$2" Cron munka megszak
|
||||
log_modify=Cron munka módosítása $1 -nek
|
||||
log_modify_l="$2" Cron munka módosítása $1-nek
|
||||
log_move=Cron munka mozgatása $1 -nak
|
||||
manual_ecannot=Nincs engedélye kézzel szerkeszteni a Cron munkákat
|
||||
manual_edit=Szerkesztendő Cron állomány:
|
||||
manual_editing=Használja az alábbi szövegdobozt a $1 Cron munkáinak szerkesztésére. Legyen óvatos, a Webmin nem végez rajta ellenőrzést!
|
||||
manual_efile=A kiválasztott állomány érvénytelen!
|
||||
manual_ok=Szerkesztés
|
||||
manual_title=Cron munkák kézi szerkesztése
|
||||
move_err=Nem lehet mozgatni a Cron munkát
|
||||
move_etype=Ezt a munkát nem lehet mozgatni
|
||||
range_all=Fussán bármilyen dátumnál
|
||||
@@ -145,19 +159,24 @@ save_eallow=A(z) '$1' felhaszn
|
||||
save_ecannot=Önnek nincs jogosultsága létrehozni '$1' cron munkáit.
|
||||
save_ecannot2=Önnek nincs joga cron munkákat létrehozni
|
||||
save_ecmd=Ön nem adott meg futtatandó parancsot.
|
||||
save_eidx=A Cron állomány sikeresen mentésre került, azonban nem került futtatásra mivel nem találta meg a rendszer!
|
||||
save_enone=Semmilyen $1 nem lett kiválasztva végrehajtáshoz.
|
||||
save_err=A cron munka elmentése nem sikerült.
|
||||
save_euser=Egy felhasználót muszáj kiválasztani.
|
||||
save_euser2=A $1 felhasználó nem létezik
|
||||
ucwhen_boot=Rendszerindításkor
|
||||
ucwhen_cron=A cron időben $1
|
||||
ucwhen_day=Minden nap $2:$1 időben
|
||||
ucwhen_hour=Minden órában $1 óra után
|
||||
ucwhen_interval=Minden $1 másodpercben
|
||||
ucwhen_min=Minden percben
|
||||
ucwhen_month=A $napokon minden hónapban $2:$1
|
||||
ucwhen_weekday=Minden $3 -ban $2:$1 időben
|
||||
when_boot=rendszerindításkor
|
||||
when_cron=a cron időben $1
|
||||
when_day=minden nap $2:$1 időben
|
||||
when_hour=minden órában $1 után óránként
|
||||
when_interval=minden $1 másodpercben
|
||||
when_min=minden percben
|
||||
when_month=a $3 napon minden hónapban $2:$1
|
||||
when_weekday=minden $3 a $2:$1
|
||||
|
||||
@@ -3,6 +3,5 @@ category=system
|
||||
os_support=solaris *-linux hpux freebsd osf1 irix unixware openserver macos openbsd aix netbsd windows
|
||||
depends=proc
|
||||
readonly=1
|
||||
risk=low medium high
|
||||
desc=Scheduled Cron Jobs
|
||||
longdesc=Create, edit and delete Cron jobs.
|
||||
|
||||
@@ -1 +1 @@
|
||||
desc_fr=Tâches Cron
|
||||
desc_fr=Tâches Cron
|
||||
|
||||
8
cron/safeacl
Normal file
8
cron/safeacl
Normal file
@@ -0,0 +1,8 @@
|
||||
mode=3
|
||||
allow=0
|
||||
command=1
|
||||
create=1
|
||||
delete=1
|
||||
move=1
|
||||
kill=1
|
||||
hourly=0
|
||||
@@ -164,3 +164,4 @@ view_efile=Schreiben von $1 fehlgeschlagen : $2
|
||||
view_err=Fehler beim Bearbeiten der Datei
|
||||
view_header=Editiere Datei $1
|
||||
view_title=Datei bearbeiten
|
||||
run_failed=Befehl mit Fehercode $1 fehlgeschlagen
|
||||
|
||||
@@ -1,4 +1,3 @@
|
||||
risk=medium high
|
||||
name=Custom
|
||||
desc=Custom Commands
|
||||
depends=proc
|
||||
|
||||
@@ -1 +0,0 @@
|
||||
noconfig=1
|
||||
@@ -1 +0,0 @@
|
||||
noconfig=1
|
||||
@@ -1,4 +1,3 @@
|
||||
risk=low medium high
|
||||
name=DFSadmin
|
||||
category=net
|
||||
os_support=solaris unixware
|
||||
|
||||
@@ -95,7 +95,7 @@ my $val;
|
||||
if (&foreign_check("net")) {
|
||||
%got = map { $_, 1 } split(/\s+/, $iface);
|
||||
&foreign_require("net", "net-lib.pl");
|
||||
@ifaces = grep { $_->{'virtual'} eq '' } &net::active_interfaces();
|
||||
@ifaces = &net::active_interfaces();
|
||||
$sz = scalar(@ifaces);
|
||||
my @iface_sel;
|
||||
foreach $i (@ifaces) {
|
||||
|
||||
@@ -40,9 +40,9 @@ index_horder1=Estructura de fitxers
|
||||
index_horder2=Nom
|
||||
index_horder3=Adreça del maquinari
|
||||
index_horder4=Adreça IP
|
||||
index_togroup=Grup
|
||||
index_tosubnet=Subxarxa
|
||||
index_toshared=Xarxa
|
||||
index_togroup=Grup:
|
||||
index_tosubnet=Subxarxa:
|
||||
index_toshared=Xarxa:
|
||||
index_ndisplay=Mostra les xarxes i subxarxes per:
|
||||
index_norder0=Assignació
|
||||
index_norder1=Estructura de fitxers
|
||||
|
||||
@@ -1,4 +1,3 @@
|
||||
risk=low medium high
|
||||
name=DHCPD
|
||||
category=servers
|
||||
os_support=debian-linux freebsd osf1 redhat-linux mandrake-linux slackware-linux solaris suse-linux united-linux unixware openserver open-linux turbo-linux openbsd corel-linux cobalt-linux irix netbsd msc-linux generic-linux gentoo-linux hpux trustix-linux macos sol-linux coherent-linux openmamba-linux pardus-linux
|
||||
|
||||
@@ -1,4 +1,3 @@
|
||||
risk=low medium high
|
||||
name=DNSadmin
|
||||
category=servers
|
||||
os_support=slackware-linux{-r "/etc/named.boot"} coherent-linux{-r "/etc/named.boot"} redhat-linux{-r "/etc/named.boot"} mandrake-linux{-r "/etc/named.boot"} solaris{-r "/etc/named.boot"} debian-linux{-r "/etc/named.boot" || -r "/etc/bind/named.boot"} suse-linux{-r "/etc/named.boot"} united-linux{-r "/etc/named.boot"} hpux{-r "/etc/named.boot" || -x "/usr/sbin/named"} freebsd{-r "/etc/named.boot" || -r "/etc/namedb/named.boot"} osf1{-r "/etc/named.boot" || -r "/etc/namedb/named.boot"} irix unixware{-r "/etc/named.boot"} openserver{-r "/etc/named.boot"} turbo-linux{-r "/etc/named.boot"} openbsd{-r "/etc/named.boot" || -r "/var/named/named.boot"} aix{-r "/etc/named.boot"} cobalt-linux/2.2{-r "/etc/named.boot"} cobalt-linux/4.0{-r "/etc/named.boot"} aix{-r "/etc/named.boot"} msc-linux{-r "/etc/named.boot"} openmamba-linux{-r "/etc/named.boot"}
|
||||
|
||||
@@ -1 +0,0 @@
|
||||
noconfig=1
|
||||
@@ -1 +0,0 @@
|
||||
noconfig=1
|
||||
@@ -1,4 +1,3 @@
|
||||
risk=low medium high
|
||||
longdesc=Edit NFS v4 file shares defined in /etc/exports.
|
||||
name=Export Manager
|
||||
category=net
|
||||
|
||||
@@ -1 +0,0 @@
|
||||
noconfig=1
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user