mirror of
https://github.com/webmin/webmin.git
synced 2026-02-03 14:13:29 +00:00
Compare commits
789 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
4d4468e907 | ||
|
|
fc5a638e24 | ||
|
|
cf6a14b7a6 | ||
|
|
6ddde41728 | ||
|
|
5114308d0d | ||
|
|
2c325b1ee4 | ||
|
|
e087bb718c | ||
|
|
51bdd0d07e | ||
|
|
74fec8b171 | ||
|
|
9d360f1c24 | ||
|
|
148743894f | ||
|
|
6b935f980c | ||
|
|
e751836684 | ||
|
|
b9449c213b | ||
|
|
a3c9770d4f | ||
|
|
3c971dacc1 | ||
|
|
ac1a73c154 | ||
|
|
3a099fabec | ||
|
|
9a1e869a82 | ||
|
|
5c54c614e3 | ||
|
|
cbdc843500 | ||
|
|
82fbca20e4 | ||
|
|
ef7dbb1f77 | ||
|
|
4f15106fa9 | ||
|
|
96bfc34247 | ||
|
|
0289ceed5b | ||
|
|
4e54ce3f85 | ||
|
|
73b2322597 | ||
|
|
05c7b6c3a3 | ||
|
|
1bb70effea | ||
|
|
590c27d202 | ||
|
|
846dff2636 | ||
|
|
b339c76fc7 | ||
|
|
fbabecbe9e | ||
|
|
7706c0795e | ||
|
|
4be368c523 | ||
|
|
b268c1bb66 | ||
|
|
b2f18fb784 | ||
|
|
34e3b4c027 | ||
|
|
3c5edcf184 | ||
|
|
33f4d7a008 | ||
|
|
2d182a2eea | ||
|
|
7f06ccaf53 | ||
|
|
d8fa7f26af | ||
|
|
aa6edf6c55 | ||
|
|
4333435739 | ||
|
|
f01197df71 | ||
|
|
cb41eff450 | ||
|
|
352326f574 | ||
|
|
410fd07287 | ||
|
|
faededeb77 | ||
|
|
f0f8dc2850 | ||
|
|
184e8d627d | ||
|
|
fd2b7c1fc7 | ||
|
|
98192ca099 | ||
|
|
05a93a5e3d | ||
|
|
50a2820a97 | ||
|
|
87f2640ee3 | ||
|
|
4180e3d3ee | ||
|
|
b7d7ea5d8d | ||
|
|
4e09cf0b55 | ||
|
|
3f0ab3fb92 | ||
|
|
836647525a | ||
|
|
8b68eac561 | ||
|
|
0503299773 | ||
|
|
2e8000d191 | ||
|
|
65ffcea0db | ||
|
|
45845b8ca6 | ||
|
|
fead9b108d | ||
|
|
db1c9679ba | ||
|
|
d753fa7a8d | ||
|
|
f6d7e05b14 | ||
|
|
a9288423cc | ||
|
|
ac9e54afba | ||
|
|
f7cf6419d2 | ||
|
|
a9097cbb42 | ||
|
|
6f84ca1c9d | ||
|
|
dff70c3349 | ||
|
|
fe8f3f8494 | ||
|
|
f5f3510a59 | ||
|
|
1e375b4740 | ||
|
|
c573496914 | ||
|
|
73e731722d | ||
|
|
6186376b6b | ||
|
|
31e0151804 | ||
|
|
872ca66b07 | ||
|
|
088aba8cec | ||
|
|
99b8959559 | ||
|
|
94f23e63e7 | ||
|
|
7c449cf4a3 | ||
|
|
2db507e5e8 | ||
|
|
bdeb908df0 | ||
|
|
a133cdfdef | ||
|
|
fe2656acd8 | ||
|
|
64a44a667e | ||
|
|
59cef9a04f | ||
|
|
af629fe3cd | ||
|
|
80368e2a04 | ||
|
|
5237ae8ea2 | ||
|
|
54ad4f7f74 | ||
|
|
0dd94f5957 | ||
|
|
5b2b3f0790 | ||
|
|
ac05a0c43a | ||
|
|
18f3e1273f | ||
|
|
710829c16a | ||
|
|
8ced23d027 | ||
|
|
d834bb6da0 | ||
|
|
cc560b00e5 | ||
|
|
3e4668715a | ||
|
|
053e8dcf22 | ||
|
|
2d7e57c7e1 | ||
|
|
30e6360fa2 | ||
|
|
dda9290ff5 | ||
|
|
15a00d8119 | ||
|
|
9289083171 | ||
|
|
3d482d2bf5 | ||
|
|
318150e6b0 | ||
|
|
8939b060b4 | ||
|
|
4709ff6adf | ||
|
|
31af9f996c | ||
|
|
c716443737 | ||
|
|
fd06605f51 | ||
|
|
c8f6b05987 | ||
|
|
a90dbc5f33 | ||
|
|
7fc16f8948 | ||
|
|
a2f1f24a95 | ||
|
|
825b928168 | ||
|
|
de648c24bd | ||
|
|
907818d2a4 | ||
|
|
60a79e67d4 | ||
|
|
04a3b8b5e6 | ||
|
|
dd1b4bc77b | ||
|
|
5156a472be | ||
|
|
185e7db58d | ||
|
|
f8ec917bc5 | ||
|
|
1016ec5f1d | ||
|
|
8a6d4cfefd | ||
|
|
7cbbdc898a | ||
|
|
8db4074d4d | ||
|
|
f6c48e7a11 | ||
|
|
9ae54e61bd | ||
|
|
e917f33e09 | ||
|
|
38aa06b8c6 | ||
|
|
57e710e8a6 | ||
|
|
0d9d978f72 | ||
|
|
196b886ddb | ||
|
|
4197e61772 | ||
|
|
6dc87705d9 | ||
|
|
4b59570a82 | ||
|
|
33927e07ae | ||
|
|
65444b8865 | ||
|
|
5357b084af | ||
|
|
862bbc36df | ||
|
|
e6105bb757 | ||
|
|
864e0c4918 | ||
|
|
115c5763a3 | ||
|
|
d6e307d59a | ||
|
|
9dc21ace2d | ||
|
|
c500759d83 | ||
|
|
736d30ef76 | ||
|
|
a27095f40f | ||
|
|
60a3b3b4a9 | ||
|
|
f932925b29 | ||
|
|
21e8940860 | ||
|
|
944794aeac | ||
|
|
00bd6cf27f | ||
|
|
1fb3bfa6ef | ||
|
|
da14ecbe46 | ||
|
|
1c48f3761e | ||
|
|
246b0018eb | ||
|
|
2e97b09d10 | ||
|
|
f3cc268f0c | ||
|
|
8c3973c68f | ||
|
|
33b591dfac | ||
|
|
ec0ab05782 | ||
|
|
4b03b80912 | ||
|
|
d312c3e318 | ||
|
|
9439ba0450 | ||
|
|
bea827c0b7 | ||
|
|
b1ee7cbf53 | ||
|
|
f56807c023 | ||
|
|
7b34282488 | ||
|
|
31b48f8dd6 | ||
|
|
8c1a74d245 | ||
|
|
6ae1061900 | ||
|
|
7de3647f0d | ||
|
|
76389ea06c | ||
|
|
8ae4364ee1 | ||
|
|
054f0a254e | ||
|
|
02a5982ff9 | ||
|
|
a835742293 | ||
|
|
2d7f299419 | ||
|
|
3bd37be97b | ||
|
|
62e1b4c785 | ||
|
|
3671a76333 | ||
|
|
f3652c7a87 | ||
|
|
980c4c834c | ||
|
|
df438c59ed | ||
|
|
932f2464bc | ||
|
|
d9ea914889 | ||
|
|
1730540764 | ||
|
|
9454cb4a2b | ||
|
|
355d7b5404 | ||
|
|
9f93c29c5f | ||
|
|
43e671497a | ||
|
|
b14c1c07dc | ||
|
|
f4ad3293bf | ||
|
|
e809329ca0 | ||
|
|
3cc16bb120 | ||
|
|
1eb43eafd2 | ||
|
|
f652def98d | ||
|
|
392fb41a24 | ||
|
|
c14b100845 | ||
|
|
b3b5fff0dc | ||
|
|
ef0a48d83a | ||
|
|
58a15dafc7 | ||
|
|
79f78d5e28 | ||
|
|
51e1c7bef3 | ||
|
|
5b5af3eb20 | ||
|
|
2e93819c1b | ||
|
|
d3a10de65d | ||
|
|
8ef754b477 | ||
|
|
4cbda407f9 | ||
|
|
71cce5c580 | ||
|
|
360c27add5 | ||
|
|
753290b95a | ||
|
|
ae579a2047 | ||
|
|
9746f7ea9e | ||
|
|
e599e0206a | ||
|
|
f37dbd4c3d | ||
|
|
ff42c66129 | ||
|
|
d384e696f7 | ||
|
|
3b36dfa8ad | ||
|
|
2d900e88c8 | ||
|
|
ba25fba714 | ||
|
|
44fe8dd676 | ||
|
|
143fb86567 | ||
|
|
dc721b2e4e | ||
|
|
91a0e71d6f | ||
|
|
30770eae4a | ||
|
|
b355fafe0d | ||
|
|
076e3577ba | ||
|
|
6493bc6564 | ||
|
|
27c6a003d8 | ||
|
|
e9ecd9c09e | ||
|
|
9135fa916b | ||
|
|
8d392af6d3 | ||
|
|
da5b0d2411 | ||
|
|
cae06a79a0 | ||
|
|
1a807f5f58 | ||
|
|
c56ea21638 | ||
|
|
36095d04f8 | ||
|
|
8efeb1c86c | ||
|
|
582549ddb6 | ||
|
|
04e14cc979 | ||
|
|
0cd5feb0a3 | ||
|
|
fd762c2f47 | ||
|
|
9aeab55a88 | ||
|
|
3fb71fb569 | ||
|
|
f4d83f5ebf | ||
|
|
b2f4dd4fe8 | ||
|
|
0c575c5266 | ||
|
|
acc47ce0e7 | ||
|
|
81e5120fc4 | ||
|
|
281cb21cce | ||
|
|
ad084a1ceb | ||
|
|
4b436c2f16 | ||
|
|
51e672b87d | ||
|
|
f21650971e | ||
|
|
eccb7a169c | ||
|
|
77c9d1fa9c | ||
|
|
fb0b6b4044 | ||
|
|
deb172ca82 | ||
|
|
f7dc0add11 | ||
|
|
915781d381 | ||
|
|
dca48f4f00 | ||
|
|
8e47199147 | ||
|
|
437bdd2528 | ||
|
|
bedb091e56 | ||
|
|
323f0cc043 | ||
|
|
df7bf3af4a | ||
|
|
94d3727b41 | ||
|
|
510c7153e4 | ||
|
|
389d061972 | ||
|
|
ad5e279231 | ||
|
|
f9bccb3853 | ||
|
|
3c21733d57 | ||
|
|
0d45d61edc | ||
|
|
eb79f4c169 | ||
|
|
48eb29e547 | ||
|
|
3fe5aa8887 | ||
|
|
50e058d2b6 | ||
|
|
2d85a2951c | ||
|
|
21e4debf24 | ||
|
|
486b323990 | ||
|
|
4b89587726 | ||
|
|
f24fa4af6a | ||
|
|
dda33af768 | ||
|
|
cc05c62609 | ||
|
|
3c113c9278 | ||
|
|
8b09edc5d3 | ||
|
|
643ace4777 | ||
|
|
097e24a7b1 | ||
|
|
f797d29b81 | ||
|
|
aca381b118 | ||
|
|
195ea913df | ||
|
|
7232db4b57 | ||
|
|
f688f29029 | ||
|
|
057f10d868 | ||
|
|
086ebe845a | ||
|
|
3e47779858 | ||
|
|
39132506e8 | ||
|
|
71dc51523a | ||
|
|
93a853f95f | ||
|
|
c0edba233a | ||
|
|
368dacd028 | ||
|
|
b49d4f8147 | ||
|
|
8f3fb71b68 | ||
|
|
01e4a5145d | ||
|
|
f3bc8c9061 | ||
|
|
9e58110854 | ||
|
|
2b2ead4d7d | ||
|
|
827c77c960 | ||
|
|
9db9582f4a | ||
|
|
20f0538c64 | ||
|
|
a026b69736 | ||
|
|
5b760082d9 | ||
|
|
487b11e9be | ||
|
|
8c236004c9 | ||
|
|
1025f8c657 | ||
|
|
14ad4cbf85 | ||
|
|
0a1f12c22b | ||
|
|
a9070e4bc3 | ||
|
|
679a590b0c | ||
|
|
797dd6a59c | ||
|
|
0b72f7f895 | ||
|
|
6472213dcc | ||
|
|
80df962012 | ||
|
|
944236d454 | ||
|
|
43dc4a479e | ||
|
|
9355b4969d | ||
|
|
0cd1d43fef | ||
|
|
44b06c8908 | ||
|
|
d78b8e0e1d | ||
|
|
312f55fe11 | ||
|
|
87b54273ff | ||
|
|
dedfaa49ae | ||
|
|
944400a136 | ||
|
|
d3cdbbcc4b | ||
|
|
ef9e525bd6 | ||
|
|
0754367f48 | ||
|
|
3a7145b2e3 | ||
|
|
8dd96e2aca | ||
|
|
f49539ad96 | ||
|
|
739411a07e | ||
|
|
ea8c76b5b8 | ||
|
|
d191f1ba92 | ||
|
|
444c101d19 | ||
|
|
9017d290bc | ||
|
|
2733f945c5 | ||
|
|
231df9c37f | ||
|
|
dbde3d370b | ||
|
|
1e07f0c93a | ||
|
|
9ed3fd2237 | ||
|
|
629ca21a3a | ||
|
|
0f898b161b | ||
|
|
de53c330d6 | ||
|
|
d9401ff1b7 | ||
|
|
e33c5aa630 | ||
|
|
8ac62d43bd | ||
|
|
c2c3533e4e | ||
|
|
bfe966f6cf | ||
|
|
75b1401e62 | ||
|
|
f1159015ed | ||
|
|
9c348f7909 | ||
|
|
c80d854054 | ||
|
|
f6299b4e29 | ||
|
|
b91e25aa6f | ||
|
|
a268373550 | ||
|
|
8d595a7ac5 | ||
|
|
2065602494 | ||
|
|
d27e37efbf | ||
|
|
85f9402bfe | ||
|
|
6bb6a0de01 | ||
|
|
081dfbe373 | ||
|
|
8d330a95de | ||
|
|
ac5f974d5c | ||
|
|
3f1306e9cf | ||
|
|
8bd7c32c10 | ||
|
|
cf7165ffaa | ||
|
|
dd4c7e6fe1 | ||
|
|
5aa1986a30 | ||
|
|
ff09a096cb | ||
|
|
ca74a730ee | ||
|
|
e208907db1 | ||
|
|
83c0cb66e5 | ||
|
|
675dd4d269 | ||
|
|
f49f068cdc | ||
|
|
f39282e0d0 | ||
|
|
b66a2ac0c2 | ||
|
|
2bc982127d | ||
|
|
21e76d19bf | ||
|
|
5ec3664397 | ||
|
|
be449d6fe2 | ||
|
|
1248c603e6 | ||
|
|
1ba3cdcbc9 | ||
|
|
3e5b68507e | ||
|
|
d11257cf84 | ||
|
|
a2204e46e0 | ||
|
|
61197c485f | ||
|
|
3f39df4203 | ||
|
|
6386ece898 | ||
|
|
ead4e97574 | ||
|
|
209ee473de | ||
|
|
4e06d22d85 | ||
|
|
a70a0de807 | ||
|
|
2788697c25 | ||
|
|
126b96730b | ||
|
|
c24c544225 | ||
|
|
7373913b0b | ||
|
|
90a21972ad | ||
|
|
17c3dbcf81 | ||
|
|
2ae51b03fd | ||
|
|
a353a11653 | ||
|
|
61e80f5d9f | ||
|
|
f931b6dc01 | ||
|
|
2ae5317946 | ||
|
|
50e4738f61 | ||
|
|
46a6379510 | ||
|
|
a0ede6b7e9 | ||
|
|
f27277c4eb | ||
|
|
d53bace45c | ||
|
|
1b689c4eb9 | ||
|
|
5677804487 | ||
|
|
e70d5ce764 | ||
|
|
45d6c8d235 | ||
|
|
a95ccc006b | ||
|
|
9bcf02a9b0 | ||
|
|
8c5a479d3a | ||
|
|
6872d8b6d6 | ||
|
|
036c08bb1d | ||
|
|
61805cee73 | ||
|
|
665c867601 | ||
|
|
3509d76a8c | ||
|
|
e55f6d0908 | ||
|
|
b00f24f0b5 | ||
|
|
07a46ff561 | ||
|
|
5954e40808 | ||
|
|
3e9a0e84fc | ||
|
|
a837b21013 | ||
|
|
a38229817a | ||
|
|
90c36605e8 | ||
|
|
e552c68f7e | ||
|
|
7708bc240c | ||
|
|
f6a3381682 | ||
|
|
fffe6fad63 | ||
|
|
cd1345cf30 | ||
|
|
e8264986af | ||
|
|
472bd9c0e4 | ||
|
|
18552ad5ab | ||
|
|
1bdcc54f21 | ||
|
|
ca5c75785d | ||
|
|
d0e84297eb | ||
|
|
df3b10c449 | ||
|
|
72c5e39121 | ||
|
|
cdd01e41bb | ||
|
|
5fc5fea30a | ||
|
|
a276ca7c14 | ||
|
|
a58fcffcb3 | ||
|
|
12bca2adb8 | ||
|
|
33fd258c71 | ||
|
|
9a69913ccb | ||
|
|
3d67e17cef | ||
|
|
61a40022d7 | ||
|
|
5a7dd1a458 | ||
|
|
74202c964f | ||
|
|
dc7d517989 | ||
|
|
b662f8d0c3 | ||
|
|
191ea97ea7 | ||
|
|
b0f33b6156 | ||
|
|
98b67cd60e | ||
|
|
edffeba60b | ||
|
|
88ae0b68f0 | ||
|
|
303b5ee31a | ||
|
|
f694b01535 | ||
|
|
37857ceeed | ||
|
|
5b8239c239 | ||
|
|
8e3fdf43b0 | ||
|
|
c7198232f5 | ||
|
|
3855a5f480 | ||
|
|
37a03e720c | ||
|
|
58229c1653 | ||
|
|
4ee13f0e20 | ||
|
|
8d66b62fce | ||
|
|
eae51d8492 | ||
|
|
1a0dec8f1e | ||
|
|
991e10a266 | ||
|
|
ec21297448 | ||
|
|
b97acb1e21 | ||
|
|
02236da8bc | ||
|
|
b3ab3f65a8 | ||
|
|
a5ba7ebe05 | ||
|
|
0e93560003 | ||
|
|
35922c6da6 | ||
|
|
71267fb601 | ||
|
|
6a079198bd | ||
|
|
88bd2825ab | ||
|
|
13da04673f | ||
|
|
68d6d831a1 | ||
|
|
23bd2fbe3f | ||
|
|
e56298f55b | ||
|
|
f19acd68b2 | ||
|
|
57df3868b5 | ||
|
|
ff140aab1b | ||
|
|
754f1efc66 | ||
|
|
2d9ddefe50 | ||
|
|
aa01bc8231 | ||
|
|
add8a4eff6 | ||
|
|
11e3fcc3a6 | ||
|
|
87c087dda9 | ||
|
|
605a32f87d | ||
|
|
7988abf900 | ||
|
|
08141fae66 | ||
|
|
2be85afce9 | ||
|
|
e77b97bc5f | ||
|
|
adbd30bacc | ||
|
|
e7a769ccf8 | ||
|
|
349a1f5873 | ||
|
|
f7a13c9f9e | ||
|
|
62d3c08fbd | ||
|
|
9296b12a71 | ||
|
|
2e06ab94b6 | ||
|
|
8938680044 | ||
|
|
ece9d2af52 | ||
|
|
185d2b546e | ||
|
|
d6e21f43ce | ||
|
|
3f470a4bcd | ||
|
|
9e714d7f57 | ||
|
|
8cd0b8ab49 | ||
|
|
1f339f2085 | ||
|
|
385d006c08 | ||
|
|
5db29277e4 | ||
|
|
21f4a9b368 | ||
|
|
121cbc4a95 | ||
|
|
93cc86315d | ||
|
|
76bf9ffd62 | ||
|
|
8319033bfa | ||
|
|
cb6e110f40 | ||
|
|
48abceeebd | ||
|
|
dc530e2faa | ||
|
|
3191805a88 | ||
|
|
d19809b79b | ||
|
|
ed1b7e862c | ||
|
|
d33b1e2681 | ||
|
|
d62f474d12 | ||
|
|
8df605cb15 | ||
|
|
10a56c13b5 | ||
|
|
820e128c14 | ||
|
|
39ef3f8c65 | ||
|
|
ada885ef41 | ||
|
|
6f7e322349 | ||
|
|
1f46918693 | ||
|
|
e29bb0eb53 | ||
|
|
102da88262 | ||
|
|
1f28b054fe | ||
|
|
79426c6aec | ||
|
|
d08d4a22d1 | ||
|
|
c66c078bde | ||
|
|
ec1501b329 | ||
|
|
4bf101d988 | ||
|
|
58a7faa684 | ||
|
|
4ac9d06f3a | ||
|
|
2c93a3c694 | ||
|
|
51595a6a92 | ||
|
|
9d382df56d | ||
|
|
79be97bbe4 | ||
|
|
cbc3078125 | ||
|
|
12822f97e5 | ||
|
|
fab2a1c871 | ||
|
|
c4fdb9524f | ||
|
|
8ffaf20d58 | ||
|
|
9b15a63781 | ||
|
|
fc0efe9ed5 | ||
|
|
c4866735ba | ||
|
|
ee1c42960a | ||
|
|
fb947920ef | ||
|
|
b9c154911a | ||
|
|
95f31ab26b | ||
|
|
e504bd7e8e | ||
|
|
9ecfb06187 | ||
|
|
27d8eea869 | ||
|
|
69d359c4fe | ||
|
|
1df55f32eb | ||
|
|
e92a82142a | ||
|
|
6eb3e42e17 | ||
|
|
146e4d0899 | ||
|
|
8a7abe98f2 | ||
|
|
338df27457 | ||
|
|
76c7ca743a | ||
|
|
3aa58e4523 | ||
|
|
74373af3de | ||
|
|
3996ff205f | ||
|
|
794ca0f651 | ||
|
|
e288f1b955 | ||
|
|
f22bada12c | ||
|
|
6af198b2f1 | ||
|
|
3de93296a9 | ||
|
|
29bb158ef4 | ||
|
|
7b37cedaf6 | ||
|
|
18392aab61 | ||
|
|
702fc7d584 | ||
|
|
cc15a65c47 | ||
|
|
377c64ef47 | ||
|
|
43edaacada | ||
|
|
b1f0c46059 | ||
|
|
6a693e3dc7 | ||
|
|
2436c25a46 | ||
|
|
352e3855db | ||
|
|
46e8076793 | ||
|
|
d308aa8ae8 | ||
|
|
96132e28d6 | ||
|
|
b0731f6e35 | ||
|
|
a4f7cb1f8c | ||
|
|
953c4ed020 | ||
|
|
d5a3eebe85 | ||
|
|
c92395176f | ||
|
|
ab44aa8023 | ||
|
|
152414d631 | ||
|
|
5e9f137adf | ||
|
|
f29d01a7be | ||
|
|
87aa2576c2 | ||
|
|
728ae07eed | ||
|
|
cfd66281eb | ||
|
|
e8526e00b4 | ||
|
|
b5b6c44d5f | ||
|
|
8f1a5a6376 | ||
|
|
9f58118635 | ||
|
|
d34994b5c0 | ||
|
|
07f8f1df4e | ||
|
|
04d75bc526 | ||
|
|
cf9e00060b | ||
|
|
a21ad361d9 | ||
|
|
873c324d0d | ||
|
|
3504c3f389 | ||
|
|
5f17149189 | ||
|
|
baf8a643bb | ||
|
|
1236027445 | ||
|
|
2160a3d47a | ||
|
|
9077922c57 | ||
|
|
a27ae8b7be | ||
|
|
d572edb7ed | ||
|
|
d4dcf6314c | ||
|
|
c7367e0f46 | ||
|
|
8ae1c01b5e | ||
|
|
996227d197 | ||
|
|
2081cf7002 | ||
|
|
3ec090f222 | ||
|
|
7e417a84e8 | ||
|
|
5d955fe3c8 | ||
|
|
117c97fcb9 | ||
|
|
a8748f3e97 | ||
|
|
8f46fbf836 | ||
|
|
1e97b55c9d | ||
|
|
26935dcda6 | ||
|
|
7188b3581a | ||
|
|
e63defe0d3 | ||
|
|
9eb2624deb | ||
|
|
bd2339aae4 | ||
|
|
cfa2e38162 | ||
|
|
3fa50f7222 | ||
|
|
696199033c | ||
|
|
05a34b099f | ||
|
|
b9b2546060 | ||
|
|
fa265c094b | ||
|
|
d915a3aacd | ||
|
|
c145c117af | ||
|
|
f42bb4ef1b | ||
|
|
550c21bca7 | ||
|
|
cc24384fea | ||
|
|
17d4090c45 | ||
|
|
2bbf06af99 | ||
|
|
699c9b9696 | ||
|
|
52450a7b3b | ||
|
|
2be0169902 | ||
|
|
295d3275bb | ||
|
|
7e8788cec3 | ||
|
|
5f46f05ba4 | ||
|
|
c68ffa8eb7 | ||
|
|
9b42e6d92a | ||
|
|
a698576f59 | ||
|
|
9d081e49d9 | ||
|
|
9a1da695cd | ||
|
|
913e326a71 | ||
|
|
1b3db94b73 | ||
|
|
0dc11e7385 | ||
|
|
c03fefd36d | ||
|
|
15c81e8ace | ||
|
|
3683c0e06c | ||
|
|
8c15fc9fdb | ||
|
|
25e5b2f4fc | ||
|
|
41a7d61df4 | ||
|
|
ad93a7cc53 | ||
|
|
7edccbe38b | ||
|
|
6310521982 | ||
|
|
ae544ec580 | ||
|
|
c2bbb27de4 | ||
|
|
797c38b9e6 | ||
|
|
2a1c5ce79c | ||
|
|
e260a96d93 | ||
|
|
4e96552b03 | ||
|
|
9a29c6f98e | ||
|
|
fae07aed8a | ||
|
|
62a3c9f237 | ||
|
|
cdf715ad2e | ||
|
|
33a8c5c8af | ||
|
|
06ae7b8582 | ||
|
|
9cf714d014 | ||
|
|
d1fe5d1bae | ||
|
|
f9c4cacd6c | ||
|
|
ce7e966c1a | ||
|
|
625f4ac93c | ||
|
|
fa311d5288 | ||
|
|
fa42a98acb | ||
|
|
81a8607628 | ||
|
|
2626d01005 | ||
|
|
1e5032c7a3 | ||
|
|
5dc2281e66 | ||
|
|
70fce1f97e | ||
|
|
da1ee58a7c | ||
|
|
4b3ef986bf | ||
|
|
14a07d4959 | ||
|
|
e3d4d2427c | ||
|
|
9bcee57c7c | ||
|
|
896fedf590 | ||
|
|
12e6b19586 | ||
|
|
3f322bee84 | ||
|
|
20d07a17a8 | ||
|
|
24b59c5b85 | ||
|
|
e5249a6e3b | ||
|
|
a3140c03da | ||
|
|
d154935e8f | ||
|
|
db8d712d83 | ||
|
|
d500367bdd | ||
|
|
03d245384d | ||
|
|
a89415739b | ||
|
|
e81c869531 | ||
|
|
690005a04f | ||
|
|
47043a41c5 | ||
|
|
5aaa81eeb6 | ||
|
|
b9ed596e3e | ||
|
|
e07db9663b | ||
|
|
48078357a3 | ||
|
|
9098936fc2 | ||
|
|
b425bdfbb7 | ||
|
|
392c010840 | ||
|
|
91a20d4b08 | ||
|
|
1db77e36eb | ||
|
|
a927647a07 | ||
|
|
0cc62bf748 | ||
|
|
37abb2707b | ||
|
|
31b2f92b88 | ||
|
|
850030ed17 | ||
|
|
c94e5d9aa0 | ||
|
|
215bfe083b | ||
|
|
af11d17cbd | ||
|
|
60141efc8e | ||
|
|
7ea1236eb6 | ||
|
|
a6597f6ebe | ||
|
|
31d69174fc | ||
|
|
364c37d755 | ||
|
|
c9c672a6a7 | ||
|
|
042e7de2f7 | ||
|
|
4b64ef0073 | ||
|
|
db869203db | ||
|
|
36f2e5d077 | ||
|
|
eaaa470818 | ||
|
|
e9f6ab278d | ||
|
|
764533a6e5 | ||
|
|
0f0e6ba516 | ||
|
|
8c0107f241 | ||
|
|
e0738d301b | ||
|
|
c7393d6e17 | ||
|
|
8694adcf93 | ||
|
|
483fb9074b | ||
|
|
a2adf19b80 | ||
|
|
0b8611b4fd | ||
|
|
8c50a2d147 | ||
|
|
03606c8214 | ||
|
|
fad1201240 |
221
.github/build/deb.sh
vendored
Executable file
221
.github/build/deb.sh
vendored
Executable file
@@ -0,0 +1,221 @@
|
||||
#!/usr/bin/env bash
|
||||
#
|
||||
# Copyright @iliajie <ilia@webmin.dev>
|
||||
#
|
||||
# Automatically builds and updates a repo metadata.
|
||||
# Pulls latest changes from GitHub, detects release
|
||||
# version based on what's available in the repo
|
||||
#
|
||||
# (Debian)
|
||||
#
|
||||
# Usage:
|
||||
#
|
||||
# # Pull and build production versions
|
||||
# # of both Webmin and Usermin
|
||||
# ./deb.sh
|
||||
#
|
||||
# # Pull and build devel versions
|
||||
# # of both Webmin and Usermin
|
||||
# ./deb.sh --devel
|
||||
#
|
||||
# # Pull and build production Webmin version 2.101, forcing
|
||||
# # release version 3, displaying detailed output
|
||||
# ./deb.sh webmin 2.101 3 --debug
|
||||
#
|
||||
# # Pull and build production Usermin version 2.000,
|
||||
# # automatically setting release version to minimal
|
||||
# ./deb.sh usermin 2.000
|
||||
#
|
||||
|
||||
# shellcheck disable=SC1091
|
||||
# Source build variables
|
||||
source ./vars.sh || exit 1
|
||||
|
||||
# Source build init
|
||||
source ./init.sh || exit 1
|
||||
|
||||
# Source general build functions
|
||||
source ./funcs.sh || exit 1
|
||||
|
||||
# Build product func
|
||||
build_prod() {
|
||||
|
||||
# Pack with English only in devel builds
|
||||
local english_only=0
|
||||
if [[ "'$*'" == *"--devel"* ]]; then
|
||||
english_only=1
|
||||
fi
|
||||
|
||||
# Always return back to root directory
|
||||
cd "$root" || exit 1
|
||||
|
||||
# Define root
|
||||
local ver=""
|
||||
local prod=$1
|
||||
root_prod="$root/$prod"
|
||||
root_apt="$root_prod/deb"
|
||||
|
||||
# Print build actual date
|
||||
date=$(get_current_date)
|
||||
|
||||
# Print opening header
|
||||
echo "************************************************************************"
|
||||
echo " build start date: $date "
|
||||
echo " package format: DEB "
|
||||
echo " product: $prod "
|
||||
(make_prod_repos "$root_prod") &
|
||||
spinner " package output version:"
|
||||
|
||||
# Pull main project first to get the latest tag
|
||||
cd "$root_prod" || exit 1
|
||||
cmd="git pull $verbosity_level"
|
||||
eval "$cmd"
|
||||
rs1=$?
|
||||
# Clean and try again
|
||||
if [ "$rs1" != "0" ]; then
|
||||
cmd="git checkout \"*\" $verbosity_level && git clean -f -d $verbosity_level && git pull $verbosity_level"
|
||||
eval "$cmd"
|
||||
rs1=$?
|
||||
fi
|
||||
|
||||
# Descend to theme dir
|
||||
cd "authentic-theme" || exit 1
|
||||
cmd="git pull $verbosity_level"
|
||||
eval "$cmd"
|
||||
rs2=$?
|
||||
# Clean and try again
|
||||
if [ "$rs2" != "0" ]; then
|
||||
cmd="git checkout \"*\" $verbosity_level && git clean -f -d $verbosity_level && git pull $verbosity_level"
|
||||
eval "$cmd"
|
||||
rs2=$?
|
||||
fi
|
||||
if [ "$rs1" != "0" ] || [ "$rs2" != "0" ]; then
|
||||
rs=1
|
||||
else
|
||||
rs=0
|
||||
fi
|
||||
|
||||
# Build number
|
||||
date_version=$(get_latest_commit_date_version)
|
||||
|
||||
# Handle other params
|
||||
cd "$root_prod" || exit 1
|
||||
if [[ "'$2'" != *"--"* ]]; then
|
||||
ver=$2
|
||||
fi
|
||||
if [[ "'$3'" != *"--"* ]] && [[ -n "$3" ]]; then
|
||||
rel=$3
|
||||
relval="-$3"
|
||||
else
|
||||
rel=1
|
||||
relval=""
|
||||
fi
|
||||
if [ -z "$ver" ]; then
|
||||
ver=$(get_current_repo_tag)
|
||||
fi
|
||||
if [[ "'$*'" == *"--devel"* ]]; then
|
||||
ver="$ver.$date_version"
|
||||
# Set actual product version
|
||||
echo "${ver}" >"version"
|
||||
fi
|
||||
printf "$ver-$rel\n"
|
||||
echo "************************************************************************"
|
||||
|
||||
echo "Pulling latest changes.."
|
||||
# We need to pull first to get the latest tag,
|
||||
# so here we only report an error if any
|
||||
postcmd $rs
|
||||
echo
|
||||
|
||||
echo "Pre-clean up .."
|
||||
# Make sure directories exist
|
||||
make_dir "$root_repos/"
|
||||
make_dir "$root_apt/"
|
||||
make_dir "$root_prod/newkey/deb/"
|
||||
make_dir "$root_prod/umodules/"
|
||||
make_dir "$root_prod/minimal/"
|
||||
make_dir "$root_prod/tarballs/"
|
||||
|
||||
# Re-create legacy link
|
||||
rm -rf "$root/webadmin"
|
||||
ln -s "$root/webmin" "$root/webadmin"
|
||||
|
||||
# Purge old files
|
||||
purge_dir "$root_prod/newkey/deb"
|
||||
purge_dir "$root_prod/umodules"
|
||||
purge_dir "$root_prod/minimal"
|
||||
purge_dir "$root_prod/tarballs"
|
||||
if [ "$prod" != "" ]; then
|
||||
# XXXX Need to check for
|
||||
# product name exactly
|
||||
rm -f "$root_repos/$prod-latest"*
|
||||
fi
|
||||
postcmd $?
|
||||
echo
|
||||
|
||||
# Descend to project dir
|
||||
cd "$root_prod" || exit 1
|
||||
|
||||
if [ "$english_only" = "1" ]; then
|
||||
echo "Cleaning languages .."
|
||||
cmd="./bin/language-manager --mode=clean --yes $verbosity_level_with_input"
|
||||
eval "$cmd"
|
||||
postcmd $?
|
||||
echo
|
||||
else
|
||||
# Force restore build directory
|
||||
if [ ! -f "lang/ja" ]; then
|
||||
echo "Restoring languages .."
|
||||
cmd="git checkout \"*\" $verbosity_level && git clean -f -d $verbosity_level && git pull $verbosity_level"
|
||||
eval "$cmd"
|
||||
postcmd $?
|
||||
echo
|
||||
fi
|
||||
fi
|
||||
|
||||
echo "Pre-building package .."
|
||||
eval "$cmd"
|
||||
cmd="./makedist.pl \"${ver}${relval}\" $verbosity_level"
|
||||
eval "$cmd"
|
||||
postcmd $?
|
||||
echo
|
||||
|
||||
echo "Building package .."
|
||||
if [ "$relval" == "" ]; then
|
||||
cmd="./makedebian.pl \"$ver\" $verbosity_level"
|
||||
else
|
||||
cmd="./makedebian.pl \"$ver\" \"$rel\" $verbosity_level"
|
||||
fi
|
||||
eval "$cmd"
|
||||
postcmd $?
|
||||
echo
|
||||
|
||||
cd "$root" || exit 1
|
||||
echo "Preparing built files for upload .."
|
||||
cmd="cp -f $root_prod/tarballs/${prod}-${ver}*\.tar.gz $root_repos/${prod}-latest.tar.gz $verbosity_level"
|
||||
eval "$cmd"
|
||||
cmd="echo $ver-$rel \($date\) > $root_repos/${prod}-latest.version $verbosity_level_to_file"
|
||||
eval "$cmd"
|
||||
cmd="find $root_apt -name ${prod}_${ver}${relval}*\.deb -exec mv '{}' $root_repos \; $verbosity_level"
|
||||
eval "$cmd"
|
||||
cmd="mv -f $root_repos/${prod}_${ver}${relval}*\.deb $root_repos/${prod}-latest.deb $verbosity_level"
|
||||
eval "$cmd"
|
||||
postcmd $?
|
||||
}
|
||||
|
||||
if [ -n "$1" ] && [[ "'$1'" != *"--"* ]]; then
|
||||
build_prod $@
|
||||
|
||||
cloud_upload_list_upload=("$root_repos/$1*")
|
||||
cloud_upload cloud_upload_list_upload
|
||||
|
||||
cloud_repo_sign_and_update
|
||||
else
|
||||
build_prod webmin $@
|
||||
build_prod usermin $@
|
||||
|
||||
cloud_upload_list_upload=("$root_repos/*")
|
||||
cloud_upload cloud_upload_list_upload
|
||||
|
||||
cloud_repo_sign_and_update
|
||||
fi
|
||||
163
.github/build/funcs.sh
vendored
Executable file
163
.github/build/funcs.sh
vendored
Executable file
@@ -0,0 +1,163 @@
|
||||
#!/usr/bin/env bash
|
||||
#
|
||||
# Copyright @iliajie <ilia@webmin.dev>
|
||||
#
|
||||
# General build functions
|
||||
#
|
||||
#
|
||||
|
||||
# Upload to cloud
|
||||
# Usage:
|
||||
# cloud_upload_list_delete=("$cloud_upload_ssh_dir/repodata")
|
||||
# cloud_upload_list_upload=("$root_repos/*" "$root_repos/repodata")
|
||||
# cloud_upload cloud_upload_list_upload cloud_upload_list_delete
|
||||
cloud_upload() {
|
||||
# Print new block only if definded
|
||||
local ssh_args="-o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null"
|
||||
if [ -n "$1" ]; then
|
||||
echo
|
||||
fi
|
||||
# Delete files on remote if needed
|
||||
if [ -n "$2" ]; then
|
||||
echo "Deleting given files in $cloud_upload_ssh_host .."
|
||||
local -n arr_del=$2
|
||||
local err=0
|
||||
for d in "${arr_del[@]}"; do
|
||||
if [ -n "$d" ]; then
|
||||
local cmd1="ssh $ssh_args $cloud_upload_ssh_user@$cloud_upload_ssh_host \"rm -rf $d\" $verbosity_level"
|
||||
eval "$cmd1"
|
||||
if [ "$?" != "0" ]; then
|
||||
err=1
|
||||
fi
|
||||
fi
|
||||
done
|
||||
postcmd $err
|
||||
echo
|
||||
fi
|
||||
|
||||
# Upload files to remote
|
||||
if [ -n "$1" ]; then
|
||||
echo "Uploading built files to $cloud_upload_ssh_host .."
|
||||
local -n arr_upl=$1
|
||||
local err=0
|
||||
for u in "${arr_upl[@]}"; do
|
||||
if [ -n "$u" ]; then
|
||||
local cmd2="scp $ssh_args -r $u $cloud_upload_ssh_user@$cloud_upload_ssh_host:$cloud_upload_ssh_dir/ $verbosity_level"
|
||||
eval "$cmd2"
|
||||
if [ "$?" != "0" ]; then
|
||||
err=1
|
||||
fi
|
||||
fi
|
||||
done
|
||||
postcmd $err
|
||||
echo
|
||||
fi
|
||||
}
|
||||
|
||||
# Sign and update repos metadata in remote
|
||||
cloud_repo_sign_and_update() {
|
||||
echo "Signing and updating repos metadata in $cloud_upload_ssh_host .."
|
||||
local ssh_args="-o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null"
|
||||
local remote_cmd="cd ~/.scripts && ./update-repo-packages-signature.bash $cloud_upload_gpg_passphrase"
|
||||
local cmd1="ssh $ssh_args $cloud_upload_ssh_user@$cloud_upload_ssh_host \"$remote_cmd\" $verbosity_level"
|
||||
eval "$cmd1"
|
||||
postcmd $?
|
||||
echo
|
||||
}
|
||||
|
||||
# Post command func
|
||||
postcmd() {
|
||||
if [ "$1" != "0" ]; then
|
||||
echo ".. failed"
|
||||
exit 1
|
||||
else
|
||||
echo ".. done"
|
||||
fi
|
||||
}
|
||||
|
||||
# Get max number from array
|
||||
max() {
|
||||
local -n arr_nums=$1
|
||||
IFS=$'\n'
|
||||
echo "${arr_nums[*]}" | sort -nr | head -n1
|
||||
}
|
||||
|
||||
# Mkdir and children dirs
|
||||
make_dir() {
|
||||
if [ ! -d "$1" ]; then
|
||||
mkdir -p "$1"
|
||||
fi
|
||||
}
|
||||
|
||||
# Remove all content in dir
|
||||
purge_dir() {
|
||||
for file in "$1"/*; do
|
||||
rm -rf "$file"
|
||||
done
|
||||
}
|
||||
|
||||
# Get latest tag version
|
||||
get_current_repo_tag() {
|
||||
cd "$root_prod" || exit 1
|
||||
tg=$(git rev-list --tags --max-count=1)
|
||||
ds=$(git describe --tags "$tg")
|
||||
echo "$ds" | sed 's/v//'
|
||||
}
|
||||
|
||||
# Get latest commit date
|
||||
get_current_date() {
|
||||
echo $(date +'%Y-%m-%d %H:%M:%S %z')
|
||||
}
|
||||
|
||||
# Get latest commit date version
|
||||
get_latest_commit_date_version() {
|
||||
local theme_version
|
||||
local prod_version
|
||||
local max_prod
|
||||
local highest_version
|
||||
|
||||
theme_version=$(git log -n1 --pretty='format:%cd' --date=format:'%Y%m%d%H%M')
|
||||
cd "$root_prod" || exit 1
|
||||
prod_version=$(git log -n1 --pretty='format:%cd' --date=format:'%Y%m%d%H%M')
|
||||
max_prod=("$theme_version" "$prod_version")
|
||||
highest_version=$(max max_prod)
|
||||
echo "$highest_version"
|
||||
}
|
||||
|
||||
# Pull project repo and theme
|
||||
make_prod_repos() {
|
||||
# Webmin or Usermin
|
||||
if [ ! -d "$1" ]; then
|
||||
local repo="webmin/$prod.git"
|
||||
cmd="git clone https://github.com/$repo $verbosity_level"
|
||||
eval "$cmd"
|
||||
if [ ! -d "webmin" ]; then
|
||||
cmd="git clone --depth 1 https://github.com/webmin/webmin $verbosity_level"
|
||||
eval "$cmd"
|
||||
fi
|
||||
fi
|
||||
# Theme
|
||||
theme="authentic-theme"
|
||||
if [ ! -d "$1/$theme" ]; then
|
||||
cd "$1" || exit 1
|
||||
local repo="webmin/$theme.git"
|
||||
cmd="git clone --depth 1 https://github.com/$repo $verbosity_level"
|
||||
eval "$cmd"
|
||||
fi
|
||||
}
|
||||
|
||||
spinner() {
|
||||
local msg=$1
|
||||
local pid=$!
|
||||
local spin='-\|/'
|
||||
local i=0
|
||||
printf "$msg "
|
||||
while kill -0 $pid 2>/dev/null; do
|
||||
(( i = (i + 1) % 4 ))
|
||||
# No spinner if not an interactive shell
|
||||
if [ -n "$PS1" ]; then
|
||||
printf '%c\b' "${spin:i:1}"
|
||||
fi
|
||||
sleep .1
|
||||
done
|
||||
}
|
||||
29
.github/build/init.sh
vendored
Normal file
29
.github/build/init.sh
vendored
Normal file
@@ -0,0 +1,29 @@
|
||||
#!/usr/bin/env bash
|
||||
#
|
||||
# Copyright @iliajie <ilia@webmin.dev>
|
||||
#
|
||||
# Build init
|
||||
#
|
||||
#
|
||||
|
||||
# Set up SSH dev keys
|
||||
if [ -n "$WEBMIN_DEV__SSH_PRV_KEY" ] && [ -n "$WEBMIN_DEV__SSH_PUB_KEY" ]; then
|
||||
# Generate new pair with right permissions
|
||||
cmd="ssh-keygen -t rsa -q -f \"$HOME/.ssh/id_rsa\" -N \"\"$verbosity_level"
|
||||
eval "$cmd"
|
||||
# Import SSH keys from secrets to be able to connect to the remote host
|
||||
echo "$WEBMIN_DEV__SSH_PRV_KEY" > "$HOME/.ssh/id_rsa"
|
||||
echo "$WEBMIN_DEV__SSH_PUB_KEY" > "$HOME/.ssh/id_rsa.pub"
|
||||
|
||||
# Set up SSH production keys
|
||||
elif [ -n "$WEBMIN_PROD__SSH_PRV_KEY" ] && [ -n "$WEBMIN_PROD__SSH_PUB_KEY" ]; then
|
||||
# Generate new pair with right permissions
|
||||
cmd="ssh-keygen -t rsa -q -f \"$HOME/.ssh/id_rsa\" -N \"\"$verbosity_level"
|
||||
eval "$cmd"
|
||||
# Import SSH keys from secrets to be able to connect to the remote host
|
||||
echo "$WEBMIN_PROD__SSH_PRV_KEY" > "$HOME/.ssh/id_rsa"
|
||||
echo "$WEBMIN_PROD__SSH_PUB_KEY" > "$HOME/.ssh/id_rsa.pub"
|
||||
fi
|
||||
|
||||
# Create symlink to Perl
|
||||
ln -fs /usr/bin/perl /usr/local/bin/perl
|
||||
243
.github/build/rpm.sh
vendored
Executable file
243
.github/build/rpm.sh
vendored
Executable file
@@ -0,0 +1,243 @@
|
||||
#!/usr/bin/env bash
|
||||
#
|
||||
# Copyright @iliajie <ilia@webmin.dev>
|
||||
#
|
||||
# Automatically builds and updates a repo metadata.
|
||||
# Pulls latest changes from GitHub, detects release
|
||||
# version based on what's available in the repo
|
||||
#
|
||||
# (RHEL)
|
||||
#
|
||||
# Usage:
|
||||
#
|
||||
# # Pull and build production versions
|
||||
# # of both Webmin and Usermin
|
||||
# ./rpm.sh
|
||||
#
|
||||
# # Pull and build devel versions
|
||||
# # of both Webmin and Usermin
|
||||
# ./rpm.sh --devel
|
||||
#
|
||||
# # Pull and build production Webmin version 2.101, forcing
|
||||
# # release version 3, displaying detailed output
|
||||
# ./rpm.sh webmin 2.101 3 --debug
|
||||
#
|
||||
# # Pull and build production Usermin version 2.000,
|
||||
# # automatically setting release version to minimal
|
||||
# ./rpm.sh usermin 2.000
|
||||
#
|
||||
|
||||
# shellcheck disable=SC1091
|
||||
# Source build variables
|
||||
source ./vars.sh || exit 1
|
||||
|
||||
# Source build init
|
||||
source ./init.sh || exit 1
|
||||
|
||||
# Source general build functions
|
||||
source ./funcs.sh || exit 1
|
||||
|
||||
# Build product func
|
||||
build_prod() {
|
||||
|
||||
# Pack with English only in devel builds
|
||||
local english_only=0
|
||||
if [[ "'$*'" == *"--devel"* ]]; then
|
||||
english_only=1
|
||||
fi
|
||||
|
||||
# Always return back to root directory
|
||||
cd "$root" || exit 1
|
||||
|
||||
# Define root
|
||||
local ver=""
|
||||
local prod=$1
|
||||
root_prod="$root/$prod"
|
||||
|
||||
# Print build actual date
|
||||
date=$(get_current_date)
|
||||
|
||||
# Print opening header
|
||||
echo "************************************************************************"
|
||||
echo " build start date: $date "
|
||||
echo " package format: RPM "
|
||||
echo " product: $prod "
|
||||
(make_prod_repos "$root_prod") &
|
||||
spinner " package output version:"
|
||||
|
||||
# Pull main project first to get the latest tag
|
||||
cd "$root_prod" || exit 1
|
||||
cmd="git pull $verbosity_level"
|
||||
eval "$cmd"
|
||||
rs1=$?
|
||||
# Clean and try again
|
||||
if [ "$rs1" != "0" ]; then
|
||||
cmd="git checkout \"*\" $verbosity_level && git clean -f -d $verbosity_level && git pull $verbosity_level"
|
||||
eval "$cmd"
|
||||
rs1=$?
|
||||
fi
|
||||
|
||||
# Pull theme to theme dir
|
||||
cd "authentic-theme" || exit 1
|
||||
cmd="git pull $verbosity_level"
|
||||
eval "$cmd"
|
||||
rs2=$?
|
||||
# Clean and try again
|
||||
if [ "$rs2" != "0" ]; then
|
||||
cmd="git checkout \"*\" $verbosity_level && git clean -f -d $verbosity_level && git pull $verbosity_level"
|
||||
eval "$cmd"
|
||||
rs2=$?
|
||||
fi
|
||||
if [ "$rs1" != "0" ] || [ "$rs2" != "0" ]; then
|
||||
rs=1
|
||||
else
|
||||
rs=0
|
||||
fi
|
||||
|
||||
# Build number
|
||||
date_version=$(get_latest_commit_date_version)
|
||||
|
||||
# Handle other params
|
||||
cd "$root_prod" || exit 1
|
||||
if [[ "'$2'" != *"--"* ]]; then
|
||||
ver=$2
|
||||
fi
|
||||
if [[ "'$3'" != *"--"* ]] && [[ -n "$3" ]]; then
|
||||
rel=$3
|
||||
else
|
||||
rel=1
|
||||
fi
|
||||
if [ -z "$ver" ]; then
|
||||
ver=$(get_current_repo_tag)
|
||||
fi
|
||||
if [[ "'$*'" == *"--devel"* ]]; then
|
||||
ver="$ver.$date_version"
|
||||
# Set actual product version
|
||||
echo "${ver}" >"version"
|
||||
fi
|
||||
|
||||
printf "$ver-$rel\n"
|
||||
echo "************************************************************************"
|
||||
|
||||
echo "Pulling latest changes.."
|
||||
# We need to pull first to get the latest tag,
|
||||
# so here we only report an error if any
|
||||
postcmd $rs
|
||||
echo
|
||||
|
||||
echo "Pre-clean up .."
|
||||
# Make sure directories exist
|
||||
make_dir "$root_prod/newkey/rpm/"
|
||||
make_dir "$root_prod/umodules/"
|
||||
make_dir "$root_prod/minimal/"
|
||||
make_dir "$root_prod/tarballs/"
|
||||
make_dir "$root_build/BUILD/"
|
||||
make_dir "$root_build/BUILDROOT/"
|
||||
make_dir "$root_build/RPMS/"
|
||||
make_dir "$root_build/SOURCES/"
|
||||
make_dir "$root_build/SPECS/"
|
||||
make_dir "$root_build/SRPMS/"
|
||||
make_dir "$root_repos/"
|
||||
|
||||
# Re-create legacy link
|
||||
rm -rf "$root/webadmin"
|
||||
ln -s "$root/webmin" "$root/webadmin"
|
||||
|
||||
# Purge old files
|
||||
purge_dir "$root_prod/newkey/rpm"
|
||||
purge_dir "$root_prod/umodules"
|
||||
purge_dir "$root_prod/minimal"
|
||||
purge_dir "$root_prod/tarballs"
|
||||
purge_dir "$root_build/BUILD"
|
||||
purge_dir "$root_build/BUILDROOT"
|
||||
purge_dir "$root_build/RPMS"
|
||||
purge_dir "$root_build/SOURCES"
|
||||
purge_dir "$root_build/SPECS"
|
||||
purge_dir "$root_build/SRPMS"
|
||||
rm -rf "$root_repos/repodata"
|
||||
if [ "$prod" != "" ]; then
|
||||
# XXXX Need to check for
|
||||
# product name exactly
|
||||
rm -f "$root_repos/$prod-latest"*
|
||||
fi
|
||||
postcmd $?
|
||||
make_dir "$root_build/RPMS/noarch"
|
||||
echo
|
||||
|
||||
# Descend to project dir
|
||||
cd "$root_prod" || exit 1
|
||||
|
||||
if [ "$english_only" = "1" ]; then
|
||||
echo "Cleaning languages .."
|
||||
cmd="./bin/language-manager --mode=clean --yes $verbosity_level_with_input"
|
||||
eval "$cmd"
|
||||
postcmd $?
|
||||
echo
|
||||
else
|
||||
# Force restore build directory
|
||||
if [ ! -f "lang/ja" ]; then
|
||||
echo "Restoring languages .."
|
||||
cmd="git checkout \"*\" $verbosity_level && git clean -f -d $verbosity_level && git pull $verbosity_level"
|
||||
eval "$cmd"
|
||||
postcmd $?
|
||||
echo
|
||||
fi
|
||||
fi
|
||||
echo "Pre-building package .."
|
||||
eval "$cmd"
|
||||
if [ "$rel" = "1" ]; then
|
||||
args="$ver"
|
||||
else
|
||||
args="$ver-$rel"
|
||||
fi
|
||||
|
||||
cmd="./makedist.pl \"$args\" $verbosity_level"
|
||||
eval "$cmd"
|
||||
postcmd $?
|
||||
echo
|
||||
|
||||
echo "Building package .."
|
||||
cmd="./makerpm.pl \"$ver\" \"$rel\" $verbosity_level"
|
||||
eval "$cmd"
|
||||
postcmd $?
|
||||
echo
|
||||
|
||||
cd "$root" || exit 1
|
||||
echo "Preparing built files for upload .."
|
||||
cmd="cp -f $root_prod/tarballs/$prod-$ver*\.tar.gz $root_repos/${prod}-latest.tar.gz $verbosity_level"
|
||||
eval "$cmd"
|
||||
cmd="echo $ver-$rel \($date\) > $root_repos/$prod-latest.version"
|
||||
eval "$cmd"
|
||||
cmd="find $root_rpms -name $prod-$ver-$rel*\.rpm -exec mv '{}' $root_repos \; $verbosity_level"
|
||||
eval "$cmd"
|
||||
cmd="mv -f $root_repos/$prod-$ver-$rel*\.rpm $root_repos/${prod}-latest.rpm $verbosity_level"
|
||||
eval "$cmd"
|
||||
postcmd $?
|
||||
echo
|
||||
|
||||
echo "Post-clean up .."
|
||||
cd "$root_build" || exit 1
|
||||
for dir in *; do
|
||||
cmd="rm -rf \"$dir/*\" $verbosity_level"
|
||||
eval "$cmd"
|
||||
done
|
||||
postcmd $?
|
||||
}
|
||||
|
||||
if [ -n "$1" ] && [[ "'$1'" != *"--"* ]]; then
|
||||
build_prod $@
|
||||
|
||||
cloud_upload_list_upload=("$root_repos/$1*")
|
||||
cloud_upload cloud_upload_list_upload
|
||||
|
||||
cloud_repo_sign_and_update
|
||||
|
||||
else
|
||||
build_prod webmin $@
|
||||
build_prod usermin $@
|
||||
|
||||
cloud_upload_list_upload=("$root_repos/*")
|
||||
cloud_upload cloud_upload_list_upload
|
||||
|
||||
cloud_repo_sign_and_update
|
||||
fi
|
||||
27
.github/build/vars.sh
vendored
Executable file
27
.github/build/vars.sh
vendored
Executable file
@@ -0,0 +1,27 @@
|
||||
#!/usr/bin/env bash
|
||||
#
|
||||
# Copyright @iliajie <ilia@webmin.dev>
|
||||
#
|
||||
# Build variables
|
||||
#
|
||||
#
|
||||
|
||||
# Set defaults
|
||||
root="${ENV_BUILD__ROOT:-$HOME}"
|
||||
root_repos="${ENV_BUILD__ROOT_REPOS:-$root/repo}"
|
||||
root_build="${ENV_BUILD__ROOT_BUILD:-$root/rpmbuild}"
|
||||
root_rpms="${ENV_BUILD__ROOT_RPMS:-$root_build/RPMS/noarch}"
|
||||
|
||||
# Cloud upload config
|
||||
cloud_upload_ssh_user="${ENV_BUILD__CLOUD_UPLOAD_SSH_USER:-webmin.dev}"
|
||||
cloud_upload_ssh_host="${ENV_BUILD__CLOUD_UPLOAD_SSH_HOST:-webmin.dev}"
|
||||
cloud_upload_ssh_dir="${ENV_BUILD__CLOUD_UPLOAD_SSH_DIR:-~/domains/builds.webmin.dev/public_html}"
|
||||
cloud_upload_gpg_passphrase="${WEBMIN_DEV__GPG_PH}"
|
||||
|
||||
# Define verbosity level
|
||||
verbosity_level=' >/dev/null 2>&1 </dev/null'
|
||||
verbosity_level_to_file='2> /dev/null'
|
||||
verbosity_level_with_input=' >/dev/null 2>&1'
|
||||
if [[ "'$*'" == *"--debug"* ]]; then
|
||||
unset verbosity_level verbosity_level_to_file verbosity_level_with_input
|
||||
fi
|
||||
30
.github/workflows/webmin.dev-deploy-webmin-package.yml
vendored
Normal file
30
.github/workflows/webmin.dev-deploy-webmin-package.yml
vendored
Normal file
@@ -0,0 +1,30 @@
|
||||
name: "webmin.dev: Deploy Webmin package"
|
||||
|
||||
on:
|
||||
push:
|
||||
branches:
|
||||
- master
|
||||
|
||||
jobs:
|
||||
build:
|
||||
runs-on: ubuntu-22.04
|
||||
if: contains(github.event.head_commit.message, '[build]')
|
||||
steps:
|
||||
- uses: actions/checkout@v3
|
||||
- uses: awalsh128/cache-apt-pkgs-action@latest
|
||||
with:
|
||||
packages: git tar gzip openssl curl openssh-client rpm perl libdigest-sha-perl liblist-moreutils-perl libencode-detect-perl
|
||||
version: 1.0
|
||||
- uses: szenius/set-timezone@v1.2
|
||||
with:
|
||||
timezoneLinux: "Europe/Nicosia"
|
||||
- name: Build and upload packages
|
||||
env:
|
||||
WEBMIN_DEV__SSH_PRV_KEY: ${{ secrets.WEBMIN_DEV__SSH_PRV_KEY }}
|
||||
WEBMIN_DEV__SSH_PUB_KEY: ${{ secrets.WEBMIN_DEV__SSH_PUB_KEY }}
|
||||
WEBMIN_DEV__GPG_PH: ${{ secrets.WEBMIN_DEV__GPG_PH }}
|
||||
ENV_BUILD__CLOUD_UPLOAD_SSH_HOST: ${{ secrets.WEBMIN_DEV__IP_ADDR }}
|
||||
working-directory: ./.github/build
|
||||
run: |-
|
||||
./deb.sh webmin --devel
|
||||
./rpm.sh webmin --devel
|
||||
43
CHANGELOG.md
43
CHANGELOG.md
@@ -1,5 +1,48 @@
|
||||
## Changelog
|
||||
|
||||
#### 2.103 (September 30, 2023)
|
||||
* Add support for hostname detection using `hostnamectl` command
|
||||
* Add support for other ACME services
|
||||
* Add ability to hide dotfiles in File Manager [#1578](https://github.com/webmin/authentic-theme/issues/1578)
|
||||
* Add `xz`, `zstd` and plain `tar` support when creating archives in File Manager [#2009](https://github.com/webmin/webmin/issues/2009)
|
||||
* Add support for English (United States) (military time) locale
|
||||
* Fix to correctly switch key hash type with ACME services
|
||||
* Fix bug when `backend` wasn't saved correctly in Fail2Ban module [#1992](https://github.com/webmin/webmin/issues/1992)
|
||||
* Fix large files download in Upload and Download module
|
||||
* Fix Google Authentication on RHEL systems derivatives
|
||||
* Update the Authentic theme to the latest version with various fixes and improvements
|
||||
|
||||
#### 2.102 (August 23, 2023)
|
||||
* Add support for Amazon Linux 2023
|
||||
* Fix a bug in Network Configuration module when parsing network size [sourceforge.net/discussion#55377]( https://sourceforge.net/p/webadmin/discussion/55377/thread/78e5aa05f3)
|
||||
* Fix Netplan related bugs in Network Configuration module
|
||||
* Fix Terminal focus bug
|
||||
* Fix to correctly compare Webmin semantic versions
|
||||
* Fix to suppress output from `monitor.pl` command [#1984](https://github.com/webmin/webmin/issues/1984)
|
||||
|
||||
#### 2.101 (August 5, 2023)
|
||||
* Add support for reading gzipped email messages
|
||||
* Add `error_stderr` API
|
||||
* Fix to show correct locale for sudo-capable users [webmin/authentic-theme#1663](https://github.com/webmin/authentic-theme/issues/1663)
|
||||
* Fix new signing key import on Debian and derivatives
|
||||
* Fix to check if password hash format is valid for `yescrypt` and `SHA512`
|
||||
* Fix various XSS related issues
|
||||
* Fix updating Webmin from repository if a package is available
|
||||
|
||||
#### 2.100 (July 22, 2023)
|
||||
* Add support for showing defaults for options in PHP Configuration module
|
||||
* Add significant improvements to email display, reply and compose
|
||||
* Add support for WebGL in the Terminal module
|
||||
* Add screen reader support in Terminal module
|
||||
* Add full support for NetworkManager in Network Configuration module
|
||||
* Fix correctly displaying bridges with Netplan in Network Configuration module
|
||||
* Fix displaying active network interfaces in Network Configuration module
|
||||
* Fix to consider current drive temperature in `smartctl` output #1881
|
||||
* Fix to properly stop Usermin https://github.com/webmin/usermin/issues/89
|
||||
* Fix no to add hashed password to the old password list if it's already in there https://github.com/virtualmin/virtualmin-pro/issues/35
|
||||
* Fix displaying placeholder on input to reflect strftime-style format
|
||||
* Update the Authentic theme to the latest version adding new vertical column layout
|
||||
|
||||
#### 2.021 (March 19, 2023)
|
||||
* Add ability to set locale in Webmin Users module for consistency
|
||||
* Fix an error when `make_date` is called on undefined value #1860
|
||||
|
||||
File diff suppressed because one or more lines are too long
@@ -774,14 +774,16 @@ if ($oldpass ne $user->{'pass'} &&
|
||||
my $nolock = $oldpass;
|
||||
$nolock =~ s/^\!//;
|
||||
$user->{'olds'} ||= [];
|
||||
unshift(@{$user->{'olds'}}, $nolock);
|
||||
if ($miniserv->{'pass_oldblock'}) {
|
||||
while(scalar(@{$user->{'olds'}}) >
|
||||
$miniserv->{'pass_oldblock'}) {
|
||||
pop(@{$user->{'olds'}});
|
||||
if (&indexof($nolock, @{$user->{'olds'}}) < 0) {
|
||||
unshift(@{$user->{'olds'}}, $nolock);
|
||||
if ($miniserv->{'pass_oldblock'}) {
|
||||
while(scalar(@{$user->{'olds'}}) >
|
||||
$miniserv->{'pass_oldblock'}) {
|
||||
pop(@{$user->{'olds'}});
|
||||
}
|
||||
}
|
||||
$user->{'lastchange'} = time();
|
||||
}
|
||||
$user->{'lastchange'} = time();
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -207,7 +207,7 @@ if ($access{'lang'}) {
|
||||
if ($access{'locale'}) {
|
||||
# Current locale
|
||||
eval "use DateTime; use DateTime::Locale; use DateTime::TimeZone;";
|
||||
if (!$@) {
|
||||
if (!$@ && $] > 5.011) {
|
||||
my $locales = &list_locales();
|
||||
my %localesrev = reverse %{$locales};
|
||||
my $locale_auto = &parse_accepted_language();
|
||||
|
||||
@@ -38,7 +38,9 @@ if ($module_name ne 'htaccess') {
|
||||
# Need to build list of supported modules
|
||||
local ($ver, $mods, $fullver) = &httpd_info($httpd);
|
||||
if ($ver) {
|
||||
local @mods = map { "$_/$ver" } &configurable_modules();
|
||||
my @allmods = &available_modules();
|
||||
local @mods = map { "$_/$ver" }
|
||||
&configurable_modules(\@allmods);
|
||||
foreach my $m (@mods) {
|
||||
if ($m =~ /(\S+)\/(\S+)/) {
|
||||
$httpd_modules{$1} = $2;
|
||||
@@ -47,10 +49,14 @@ if ($module_name ne 'htaccess') {
|
||||
# Call again now that known modules have been set, as
|
||||
# sometimes there are dependencies due to LoadModule
|
||||
# statements in an IfModule block
|
||||
@mods = map { "$_/$ver" } &configurable_modules();
|
||||
undef(@get_config_cache);
|
||||
@allmods = &available_modules();
|
||||
@mods = map { "$_/$ver" }
|
||||
&configurable_modules(\@allmods);
|
||||
local %site = ( 'size' => $st[7],
|
||||
'path' => $httpd,
|
||||
'modules' => join(' ', @mods),
|
||||
'allmodules' => join(' ', @allmods),
|
||||
'version' => $ver,
|
||||
'fullversion' => $fullver,
|
||||
'webmin' => &get_webmin_version() );
|
||||
@@ -72,6 +78,9 @@ if (&read_file($site_file, \%site)) {
|
||||
$httpd_modules{$1} = $2;
|
||||
}
|
||||
}
|
||||
foreach $m (split(/\s+/, $site{'allmodules'})) {
|
||||
$all_httpd_modules{$m} = $site{'version'};
|
||||
}
|
||||
foreach $m (keys %httpd_modules) {
|
||||
if (!-r "$module_root_directory/$m.pl") {
|
||||
delete($httpd_modules{$m});
|
||||
@@ -1825,46 +1834,46 @@ for(my $i=0; $i<$secs; $i++) {
|
||||
return 0;
|
||||
}
|
||||
|
||||
# configurable_modules()
|
||||
# configurable_modules([&all-mods])
|
||||
# Returns a list of Apaches that are compiled in or dynamically loaded, and
|
||||
# supported by Webmin.
|
||||
sub configurable_modules
|
||||
{
|
||||
local ($ver, $mods) = &httpd_info(&find_httpd());
|
||||
local @rv;
|
||||
local $m;
|
||||
my ($allmods) = @_;
|
||||
$allmods ||= [ &available_modules() ];
|
||||
return grep { -r "$module_root_directory/$_.pl" } @$allmods;
|
||||
}
|
||||
|
||||
# available_modules()
|
||||
# Returns a list of Apaches that are compiled in or dynamically loaded
|
||||
sub available_modules
|
||||
{
|
||||
my ($ver, $mods) = &httpd_info(&find_httpd());
|
||||
my @rv;
|
||||
|
||||
# Add compiled-in modules
|
||||
foreach $m (@$mods) {
|
||||
if (-r "$module_root_directory/$m.pl") {
|
||||
push(@rv, $m);
|
||||
}
|
||||
}
|
||||
push(@rv, @$mods);
|
||||
|
||||
# Add dynamically loaded modules
|
||||
local $conf = &get_config();
|
||||
foreach $l (&find_directive_struct("LoadModule", $conf)) {
|
||||
if ($l->{'words'}->[1] =~ /(mod_\S+)\.(so|dll)/ &&
|
||||
-r "$module_root_directory/$1.pl") {
|
||||
my $conf = &get_config();
|
||||
foreach my $l (&find_directive_struct("LoadModule", $conf)) {
|
||||
if ($l->{'words'}->[1] =~ /(mod_\S+)\.(so|dll)/) {
|
||||
push(@rv, $1);
|
||||
}
|
||||
elsif ($l->{'words'}->[1] =~ /libssl\.so/ &&
|
||||
-r "$module_root_directory/mod_apachessl.pl") {
|
||||
elsif ($l->{'words'}->[1] =~ /libssl\.so/) {
|
||||
push(@rv, "mod_apachessl");
|
||||
}
|
||||
elsif ($l->{'words'}->[1] =~ /lib([^\/\s]+)\.(so|dll)/ &&
|
||||
-r "$module_root_directory/mod_$1.pl") {
|
||||
elsif ($l->{'words'}->[1] =~ /lib([^\/\s]+)\.(so|dll)/) {
|
||||
push(@rv, "mod_$1");
|
||||
}
|
||||
}
|
||||
undef(@get_config_cache); # Cache is no longer valid
|
||||
|
||||
# Add dynamically loaded modules
|
||||
if ($config{'apachectl_path'}) {
|
||||
&open_execute_command(APACHE,
|
||||
"$config{'apachectl_path'} -M 2>/dev/null", 1);
|
||||
while(<APACHE>) {
|
||||
if (/(\S+)_module/ && -r "$module_root_directory/mod_${1}.pl") {
|
||||
if (/(\S+)_module/) {
|
||||
push(@rv, "mod_${1}");
|
||||
}
|
||||
}
|
||||
|
||||
19
apache/config-freebsd-11.0-ALL
Normal file
19
apache/config-freebsd-11.0-ALL
Normal file
@@ -0,0 +1,19 @@
|
||||
show_list=0
|
||||
httpd_dir=/usr/local
|
||||
httpd_path=/usr/local/sbin/httpd
|
||||
apachectl_path=/usr/local/sbin/apachectl
|
||||
httpd_conf=/usr/local/etc/apache24/httpd.conf
|
||||
mime_types=/usr/local/etc/apache24/mime.types
|
||||
srm_conf=/usr/local/etc/apache24/srm.conf
|
||||
access_conf=/usr/local/etc/apache24/access.conf
|
||||
show_order=0
|
||||
max_servers=100
|
||||
test_config=1
|
||||
test_manual=0
|
||||
test_always=0
|
||||
test_apachectl=1
|
||||
auto_mods=1
|
||||
pid_file=/var/run/httpd.pid
|
||||
show_names=0
|
||||
allow_virtualmin=0
|
||||
format_config=1
|
||||
@@ -5,7 +5,7 @@ mime_types=/etc/apache2/mime.types
|
||||
httpd_path=/usr/sbin/httpd
|
||||
start_cmd=systemctl start apache2
|
||||
stop_cmd=systemctl stop apache2
|
||||
apply_cmd=systemctl restart apache2
|
||||
apply_cmd=systemctl reload apache2
|
||||
show_order=0
|
||||
max_servers=100
|
||||
test_config=1
|
||||
|
||||
@@ -1,11 +1,11 @@
|
||||
show_list=0
|
||||
httpd_dir=/usr/apache2/2.2
|
||||
httpd_conf=/etc/apache2/2.2/httpd.conf
|
||||
httpd_path=/usr/apache2/2.2/bin/httpd
|
||||
apachectl_path=/usr/apache2/2.2/bin/apachectl
|
||||
pid_file=/var/run/apache2/2.2/httpd.pid
|
||||
start_cmd=svcadm enable svc:/network/http:apache22
|
||||
stop_cmd=svcadm disable svc:/network/http:apache22
|
||||
httpd_dir=/usr/apache2/2.4
|
||||
httpd_conf=/etc/apache2/2.4/httpd.conf
|
||||
httpd_path=/usr/apache2/2.4/bin/httpd
|
||||
apachectl_path=/usr/apache2/2.4/bin/apachectl
|
||||
pid_file=/var/run/apache2/2.4/httpd.pid
|
||||
start_cmd=svcadm enable svc:/network/http:apache24
|
||||
stop_cmd=svcadm disable svc:/network/http:apache24
|
||||
mime_types=
|
||||
srm_conf=
|
||||
access_conf=
|
||||
|
||||
@@ -779,11 +779,23 @@ local(@po, $po, @rv);
|
||||
if ($in{'Options_def'}) { return ( [ ] ); }
|
||||
@po = ("ExecCGI", "FollowSymLinks", "Includes", "IncludesNOEXEC",
|
||||
"Indexes", "MultiViews", "SymLinksIfOwnerMatch");
|
||||
my $abscount = 0;
|
||||
my $pluscount = 0;
|
||||
foreach $po (@po) {
|
||||
if ($in{$po} == 1) { push(@rv, $po); }
|
||||
elsif ($in{$po} == 2) { push(@rv, "+$po"); }
|
||||
elsif ($in{$po} == 3) { push(@rv, "-$po"); }
|
||||
if ($in{$po} == 1) {
|
||||
push(@rv, $po);
|
||||
$abscount++;
|
||||
}
|
||||
elsif ($in{$po} == 2) {
|
||||
push(@rv, "+$po");
|
||||
$pluscount++;
|
||||
}
|
||||
elsif ($in{$po} == 3) {
|
||||
push(@rv, "-$po");
|
||||
$pluscount++;
|
||||
}
|
||||
}
|
||||
$abscount && $pluscount && &error($text{'core_eoptionsboth'});
|
||||
return @rv ? ( [ join(' ', @rv) ] ) : ( [ "None" ] );
|
||||
}
|
||||
|
||||
@@ -1041,7 +1053,7 @@ sub edit_LimitRequestBody
|
||||
{
|
||||
return (1, $text{'core_maxbody'},
|
||||
&opt_input($_[0]->{'value'}, "LimitRequestBody", $text{'core_default'}, 8)
|
||||
.$text{'bytes'});
|
||||
.&ui_space(2).$text{'bytes'});
|
||||
}
|
||||
sub save_LimitRequestBody
|
||||
{
|
||||
@@ -1052,7 +1064,7 @@ sub edit_LimitXMLRequestBody
|
||||
{
|
||||
return (1, $text{'core_maxxml'},
|
||||
&opt_input($_[0]->{'value'}, "LimitXMLRequestBody",
|
||||
$text{'core_default'}, 8).$text{'bytes'});
|
||||
$text{'core_default'}, 8).&ui_space(2).$text{'bytes'});
|
||||
}
|
||||
sub save_LimitXMLRequestBody
|
||||
{
|
||||
|
||||
@@ -501,6 +501,7 @@ core_actmod=Active modules
|
||||
core_option=Option
|
||||
core_setdir=Set for directory
|
||||
core_merge=Merge with parent
|
||||
core_eoptionsboth=Directory options : Active options must be all either Set For Directory or Merged With Parent, but not both
|
||||
core_users=Only these users
|
||||
core_groups=Only these groups
|
||||
core_allusers=All valid users
|
||||
|
||||
@@ -577,10 +577,10 @@ mod_proxy_netbit=Sottorete (Network/bits)
|
||||
mod_proxy_maxfw=Numero massimo di proxy nella catena di richiesta
|
||||
mod_proxy_emaxfs=Il Numero massimo di proxy nella catena di richiesta deve essere un intero
|
||||
mod_proxy_preserve=Preserva originale l'header Host:
|
||||
|
||||
mod_proxy_timeout=Timeout delle richieste proxy in secondi
|
||||
mod_proxy_etimeout=Il timeout delle richieste proxy deve essere un numero di secondi
|
||||
mod_proxy_via=Setta header Via:
|
||||
|
||||
mod_log_agent_default=Default
|
||||
mod_log_agent_file=File..
|
||||
mod_log_agent_program=Programma..
|
||||
|
||||
@@ -566,10 +566,10 @@ mod_proxy_netbit=Мережа/біт
|
||||
mod_proxy_maxfw=Максимальна кількість проксі в ланцюжку запитів
|
||||
mod_proxy_emaxfs=Максимальна кількість проксі в ланцюжку запитів належний бути цілої числом
|
||||
mod_proxy_preserve=Зарезервувати оригінальний вузол: заголовок
|
||||
|
||||
mod_proxy_timeout=Час чекання виконання запиту проксі в секундах
|
||||
mod_proxy_etimeout=Час чекання виконання запиту проксі повинне бути числом секунд
|
||||
mod_proxy_via=Установити через: заголовки
|
||||
|
||||
mod_log_agent_default=За замовчуванням
|
||||
mod_log_agent_file=Файл..
|
||||
mod_log_agent_program=Програма..
|
||||
|
||||
@@ -573,10 +573,10 @@ mod_proxy_netbit=网络/位
|
||||
mod_proxy_maxfw=请求链中最大的代理数
|
||||
mod_proxy_emaxfs=请求链中最大的代理数必须是整数
|
||||
mod_proxy_preserve=保持原来的主机:文件头
|
||||
|
||||
mod_proxy_timeout=代理请求超时秒数
|
||||
mod_proxy_etimeout=代理请求超时必须是一个有效的秒数
|
||||
mod_proxy_via=设置通过:头
|
||||
|
||||
mod_log_agent_default=默认
|
||||
mod_log_agent_file=文件…
|
||||
mod_log_agent_program=程序…
|
||||
|
||||
@@ -583,10 +583,10 @@ mod_proxy_netbit=網路/位元
|
||||
mod_proxy_maxfw=請求鏈中最大的代理數
|
||||
mod_proxy_emaxfs=請求鏈中最大的代理數必須是整數
|
||||
mod_proxy_preserve=保留原始主機: 檔頭
|
||||
|
||||
mod_proxy_timeout=Proxy回應逾時秒數
|
||||
mod_proxy_etimeout=Proxy回應逾時秒數必須是個秒數數字
|
||||
mod_proxy_via=設定經由: 檔頭
|
||||
|
||||
mod_log_agent_default=預設
|
||||
mod_log_agent_file=檔案..
|
||||
mod_log_agent_program=程式..
|
||||
|
||||
@@ -25,6 +25,7 @@ $rv = [ [ 'ProxyRequests', 0, 13, 'virtual', undef, 11 ],
|
||||
[ 'ProxyMaxForwards', 0, 13, 'virtual', 2.0 ],
|
||||
[ 'ProxyPreserveHost', 0, 13, 'virtual', 2.031 ],
|
||||
[ 'ProxyTimeout', 0, 13, 'virtual', 2.031 ],
|
||||
[ 'ProxyPreserveHost', 0, 13, 'virtual', 2.3 ],
|
||||
[ 'ProxyVia', 0, 13, 'virtual', 2.0 ] ];
|
||||
return &make_directives($rv, $_[0], "mod_proxy");
|
||||
}
|
||||
@@ -291,7 +292,16 @@ sub save_ProxyVia
|
||||
return &parse_choice("ProxyVia", "");
|
||||
}
|
||||
|
||||
|
||||
sub edit_ProxyPreserveHost
|
||||
{
|
||||
return (1, $text{'mod_proxy_preserve'},
|
||||
&choice_input($_[0]->{'value'}, "ProxyPreserveHost", "",
|
||||
"$text{'yes'},on", "$text{'no'},off", "$text{'default'},"));
|
||||
}
|
||||
sub save_ProxyPreserveHost
|
||||
{
|
||||
return &parse_choice("ProxyPreserveHost", "");
|
||||
}
|
||||
|
||||
1;
|
||||
|
||||
|
||||
@@ -13,6 +13,7 @@ sub edit_SuexecUserGroup
|
||||
local $rv;
|
||||
$rv .= sprintf "<input type=radio name=SuexecUserGroup_def value=1 %s> %s\n",
|
||||
$_[0] ? "" : "checked", $text{'suexec_none'};
|
||||
$rv .= &ui_newline();
|
||||
$rv .= sprintf "<input type=radio name=SuexecUserGroup_def value=0 %s>\n",
|
||||
$_[0] ? "checked" : "";
|
||||
$rv .= sprintf "%s <input name=SuexecUserGroup_u size=8 value='%s'> %s\n",
|
||||
|
||||
@@ -159,7 +159,9 @@ $rv .= "<table id='show_backup_destination' cellpadding=1 cellspacing=0>";
|
||||
# Local file field
|
||||
$rv .= "<tr><td>".&ui_oneradio("$_[0]_mode", 0, undef, $mode == 0)."</td>\n";
|
||||
$rv .= "<td>$text{'backup_mode0'} </td><td colspan='3'>".
|
||||
&ui_textbox("$_[0]_file", $mode == 0 ? $path : "", 60).
|
||||
&ui_textbox("$_[0]_file", $mode == 0 ? $path : "", 60, undef, undef,
|
||||
($_[2] != 1 && $config{'date_subs'}) ?
|
||||
'placeholder="/backups/configs-%y-%m-%d-%H-%M-%S.tar.gz"' : undef).
|
||||
" ".&file_chooser_button("$_[0]_file")."</td> </tr>\n";
|
||||
|
||||
# FTP file fields
|
||||
|
||||
@@ -1,3 +1,3 @@
|
||||
date_subs=0
|
||||
date_subs=1
|
||||
webmin_subs=0
|
||||
apply=1
|
||||
|
||||
@@ -48,13 +48,12 @@ if (@backups) {
|
||||
print &ui_columns_end();
|
||||
}
|
||||
else {
|
||||
print "<b>$text{'index_none'}</b><p>\n";
|
||||
print "<strong>$text{'index_none'}</strong><br>\n";
|
||||
}
|
||||
print &ui_link("edit.cgi?new=1", $text{'index_add'});
|
||||
print "<p>\n";
|
||||
print "\n";
|
||||
if ($using_strftime && !$config{'date_subs'}) {
|
||||
print "<font color=#ff0000><b>$text{'index_nostrftime'}",
|
||||
"</b></font><p>\n";
|
||||
print &ui_alert_box($text{'index_nostrftime'}, 'warn'),"\n";
|
||||
}
|
||||
print &ui_tabs_end_tab();
|
||||
|
||||
|
||||
@@ -16,7 +16,7 @@ index_now2=Restore Now
|
||||
index_apply=Apply configurations?
|
||||
index_test=Just show what will be restored?
|
||||
index_jobs=Scheduled Backups
|
||||
index_nostrftime=Warning - some backup jobs use % in their filenames, but strftime substitution is not enabled on the Module Config page.
|
||||
index_nostrftime=Some backup jobs use % in their filenames, but strftime substitution is not enabled on the Module Config page.
|
||||
index_tabsched=Scheduled backups
|
||||
index_tabbackup=Backup now
|
||||
index_tabrestore=Restore now
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
# Returns a list of files and directories under some directory
|
||||
|
||||
$trust_unknown_referers = 1;
|
||||
BEGIN { require './bacula-backup-lib.pl'; }
|
||||
require './bacula-backup-lib.pl';
|
||||
&ReadParse();
|
||||
|
||||
# Input sanitization
|
||||
|
||||
@@ -11,7 +11,7 @@ use File::Basename;
|
||||
use File::Find;
|
||||
use JSON::PP;
|
||||
use HTTP::Tiny;
|
||||
use HTML::Entities;
|
||||
eval "use HTML::Entities";
|
||||
use List::MoreUtils qw(any uniq);
|
||||
use Cwd qw(cwd);
|
||||
use Encode qw/encode decode/;
|
||||
@@ -61,7 +61,8 @@ sub main
|
||||
'allow-symlinks|as!' => \$opt{'allow-symlinks'},
|
||||
'git-commit|gc!' => \$opt{'git-commit'},
|
||||
'log|l:s' => \$opt{'log'},
|
||||
'verbose|v:i' => \$opt{'verbose'});
|
||||
'verbose|v:i' => \$opt{'verbose'},
|
||||
'yes|y:i' => \$opt{'assumeyes'});
|
||||
|
||||
# Print help and exit
|
||||
pod2usage(0) if ($opt{'help'});
|
||||
@@ -70,6 +71,11 @@ sub main
|
||||
if (!defined($opt{'verbose'})) {
|
||||
$opt{'verbose'} = 1;
|
||||
}
|
||||
|
||||
# Enforce yes for all questions
|
||||
if (defined($opt{'assumeyes'})) {
|
||||
$opt{'assumeyes'} = 1;
|
||||
}
|
||||
|
||||
# Get current path
|
||||
my $path = cwd;
|
||||
@@ -232,7 +238,7 @@ sub main
|
||||
# Just run tests, and exit, without writing anything
|
||||
if (@{ $opt{'keys-test'} }) {
|
||||
say CYAN, "Translation testing for selected keys is about to start ..", RESET;
|
||||
if (prompt('next')) {
|
||||
if (prompt('next', \%opt)) {
|
||||
go(\%opt, \%data);
|
||||
}
|
||||
} else {
|
||||
@@ -245,11 +251,20 @@ sub main
|
||||
talk('affected', \%opt, \%data);
|
||||
|
||||
# Run in overwrite mode
|
||||
if ($opt{'mode'} eq 'full') {
|
||||
if ($opt{'mode'} eq 'clean') {
|
||||
# # Execute clean
|
||||
talk('clean-pre', \%opt, \%data);
|
||||
if (prompt('next', \%opt)) {
|
||||
go(\%opt, \%data);
|
||||
}
|
||||
}
|
||||
|
||||
# Run in overwrite mode
|
||||
elsif ($opt{'mode'} eq 'full') {
|
||||
|
||||
# Execute force transcode/translate
|
||||
talk('overwrite-pre', \%opt, \%data);
|
||||
if (prompt('next')) {
|
||||
if (prompt('next', \%opt)) {
|
||||
go(\%opt, \%data);
|
||||
}
|
||||
}
|
||||
@@ -274,7 +289,7 @@ sub main
|
||||
talk('sync-pre', \%opt, \%data);
|
||||
}
|
||||
|
||||
if (prompt('next')) {
|
||||
if (prompt('next', \%opt)) {
|
||||
go(\%opt, \%data);
|
||||
}
|
||||
}
|
||||
@@ -537,7 +552,7 @@ sub language_transcode
|
||||
eval {$string = decode($encoding, $string)};
|
||||
if ($@) {
|
||||
say "Error found: $@";
|
||||
if (!prompt('next')) {
|
||||
if (!prompt('next', $opt)) {
|
||||
exit;
|
||||
}
|
||||
}
|
||||
@@ -949,6 +964,7 @@ sub go
|
||||
my $verbose = $opt->{'verbose'} || @{$keys_test};
|
||||
my $mode_sync = $opt->{'mode'} ne 'full';
|
||||
my $mode_transcode = $opt->{'mode'} eq 'transcode';
|
||||
my $mode_clean = $opt->{'mode'} eq 'clean';
|
||||
my $allow_symlinks = $opt->{'allow-symlinks'};
|
||||
my $verbose_silent_mode = $mode_sync && $verbose != 2;
|
||||
|
||||
@@ -965,6 +981,12 @@ sub go
|
||||
|
||||
# Check if there has been something to process, if not print a message
|
||||
my $output;
|
||||
|
||||
# If cleaning called in this mode, throw an error
|
||||
if ($mode_clean) {
|
||||
say RED, "Error: Cleaning can only be performed when the target type is unset!", RESET;
|
||||
exit;
|
||||
}
|
||||
|
||||
# Build targets first
|
||||
talk_log(("Transcoding/translating " . CYAN BOLD, $module, RESET . " module's help .."), $data, 1);
|
||||
@@ -1200,6 +1222,7 @@ sub go
|
||||
# Set message type
|
||||
my $message_type_s1 = 'Transcoding/translating';
|
||||
$message_type_s1 = 'Searching/replacing in' if (@{$values_fix});
|
||||
$message_type_s1 = 'Cleaning in' if ($mode_clean);
|
||||
|
||||
talk_log(("$message_type_s1 " . BLUE BOLD, $module, RESET . " module .."), $data, 1);
|
||||
foreach $language (@{ $data->{'languages_source_list'} }) {
|
||||
@@ -1223,6 +1246,51 @@ sub go
|
||||
my %language;
|
||||
my %language_auto;
|
||||
|
||||
# If in clean mode delete the file and go next
|
||||
if ($mode_clean) {
|
||||
|
||||
# Language files
|
||||
my $cfile = "$mpath/$code";
|
||||
my $cfileauto = "$cfile.auto";
|
||||
unlink($cfile);
|
||||
unlink($cfileauto);
|
||||
|
||||
# Module files
|
||||
foreach ('module', 'config', 'uconfig') {
|
||||
my %mdata = %{$data};
|
||||
$mdata{'type'} = $_;
|
||||
my (undef, undef, $ffile) = source_data($module, \%mdata, $opt);
|
||||
$ffile =~ s/\/$_\//\//;
|
||||
my $cxfile = "$ffile.$code";
|
||||
my $cxfileauto = "$cxfile.auto";
|
||||
unlink($cxfile);
|
||||
unlink($cxfileauto);
|
||||
}
|
||||
|
||||
# Help files
|
||||
my %hdata = %{$data};
|
||||
$hdata{'type'} = 'help';
|
||||
my (undef, $hpath) = source_data($module, \%hdata, $opt);
|
||||
my @hdelete_targets;
|
||||
if (-d $hpath) {
|
||||
find(
|
||||
{
|
||||
wanted => sub {
|
||||
my $found = $File::Find::name;
|
||||
if ($found =~ /\.$code\./) {
|
||||
push(@hdelete_targets, $found);
|
||||
}
|
||||
},
|
||||
},
|
||||
$hpath);
|
||||
unlink(@hdelete_targets);
|
||||
}
|
||||
|
||||
# Go next, don't translate
|
||||
$output++;
|
||||
next;
|
||||
}
|
||||
|
||||
my $message_type_s2 = "Processing";
|
||||
$message_type_s2 = "Testing translations for selected keys with" if (@{$keys_test});
|
||||
|
||||
@@ -1630,8 +1698,10 @@ sub get_google_translate_token
|
||||
|
||||
sub prompt
|
||||
{
|
||||
my ($q) = @_;
|
||||
|
||||
my ($q, $opt) = @_;
|
||||
if ($opt->{'assumeyes'}) {
|
||||
return 1;
|
||||
}
|
||||
if ($q eq 'next') {
|
||||
return prompt("Do you want to proceed?");
|
||||
}
|
||||
@@ -1732,6 +1802,10 @@ sub talk
|
||||
say GREEN, "Affected languages" . RESET, DARK . " [$languages_count]" . RESET . ": ", YELLOW BOLD,
|
||||
"" . $languages . "", RESET;
|
||||
}
|
||||
if ($what eq 'clean-pre') {
|
||||
say RED, "Danger! ", RESET, WHITE,
|
||||
"The following operation will delete all files related to the affected lang-\nuage, including machine-translated files in all the mentioned modules listed above.",
|
||||
}
|
||||
if ($what eq 'overwrite-pre') {
|
||||
say RED, "Warning! ", RESET, WHITE,
|
||||
"The following operation will force-translate and overwrite mentioned\nlanguages in all mentioned modules listed above, using ",
|
||||
@@ -1829,9 +1903,13 @@ Test translations for "index_stopmsg,trusted_warning" keys, in Russian and Germa
|
||||
|
||||
- webmin language-manager -m=bind8 -t=ru,de -kt=index_stopmsg,trusted_warning
|
||||
|
||||
Clean build directory by removing all kind of language files except English.
|
||||
|
||||
- webmin language-manager --mode=clean
|
||||
|
||||
=item --mode, -x <sync|full|transcode>
|
||||
|
||||
Mode can be either <sync> or <full> or <transcode>. Default is set to "sync" and will only keep the keys found on template language file, while missing keys in target languages (translations), will be deleted, and newly added keys to template language file, will be translated. Mode "full" is meant to perform full translation, keeping human translated strings and overwriting all machine translations done in the past (not recommended to run). Mode "transcode" is useful to fix human translated language files, which stored in "utf-8" encoding already, while still having "í" or "é" HTML entities.
|
||||
Mode can be either <sync> or <full> or <transcode> or <clean>. Default is set to "sync" and will only keep the keys found on template language file, while missing keys in target languages (translations), will be deleted, and newly added keys to template language file, will be translated. Mode "full" is meant to perform full translation, keeping human translated strings and overwriting all machine translations done in the past (not recommended to run). Mode "transcode" is useful to fix human translated language files, which stored in "utf-8" encoding already, while still having "í" or "é" HTML entities. Mode "clean" is useful to clean build package by removing all kind of language files except source language.
|
||||
|
||||
=item --type, -w <lang|ulang|help|config|uconfig|module>
|
||||
|
||||
@@ -1917,4 +1995,4 @@ Verbosely print processed files and provide detailed output. By detault, verbose
|
||||
|
||||
=head1 LICENSE AND COPYRIGHT
|
||||
|
||||
Copyright 2022 Ilia Rostovtsev <ilia@virtualmin.com>
|
||||
Copyright 2020 Ilia Rostovtsev <ilia@virtualmin.com>
|
||||
|
||||
@@ -65,10 +65,10 @@ our @dnssec_dlv_key = ( 257, 3, 5, '"BEAAAAPHMu/5onzrEE7z1egmhg/WPO0+juoZrW3euWE
|
||||
|
||||
my $rand_flag;
|
||||
if ($gconfig{'os_type'} =~ /-linux$/ &&
|
||||
$config{'force_random'} eq '0' &&
|
||||
-r "/dev/urandom" &&
|
||||
!$config{'force_random'} &&
|
||||
$bind_version &&
|
||||
&compare_version_numbers($bind_version, '9.14') < 0) {
|
||||
$bind_version =~ /^9\./ &&
|
||||
&compare_version_numbers($bind_version, '<', '9.14.2')) {
|
||||
# Version: 9.14.2 deprecated the use of -r option
|
||||
# in favor of using /dev/random [bugs:#5370]
|
||||
$rand_flag = "-r /dev/urandom";
|
||||
@@ -376,9 +376,22 @@ return @rv ? wantarray ? @rv : $rv[0]
|
||||
sub find_value
|
||||
{
|
||||
my @v = &find($_[0], $_[1]);
|
||||
if (!@v) { return undef; }
|
||||
elsif (wantarray) { return map { $_->{'value'} } @v; }
|
||||
else { return $v[0]->{'value'}; }
|
||||
if (!@v) {
|
||||
return undef;
|
||||
}
|
||||
elsif (wantarray) {
|
||||
return map { &extract_value($_) } @v;
|
||||
}
|
||||
else {
|
||||
return &extract_value($v[0]);
|
||||
}
|
||||
}
|
||||
|
||||
sub extract_value
|
||||
{
|
||||
my ($dir) = @_;
|
||||
return defined($dir->{'value'}) ? $dir->{'value'} :
|
||||
defined($dir->{'values'}) && @{$dir->{'values'}} ? $dir->{'values'}->[0] : undef;
|
||||
}
|
||||
|
||||
# base_directory([&config], [no-cache])
|
||||
@@ -500,9 +513,8 @@ for(my $i=0; $i<@oldv || $i<@newv; $i++) {
|
||||
sub recursive_set_value
|
||||
{
|
||||
my ($dir) = @_;
|
||||
if ($dir->{'values'}) {
|
||||
my @v = @{$dir->{'values'}};
|
||||
$dir->{'value'} = @v ? $v[0] : undef;
|
||||
if (!defined($dir->{'value'})) {
|
||||
$dir->{'value'} = &extract_value($dir);
|
||||
}
|
||||
if ($dir->{'type'} && $dir->{'type'} == 1 && $dir->{'members'}) {
|
||||
foreach my $m (@{$dir->{'members'}}) {
|
||||
@@ -1964,22 +1976,32 @@ if (!$file) {
|
||||
push(@{$dir->{'members'}}, { 'name' => 'file',
|
||||
'values' => [ $file ] } );
|
||||
|
||||
# Add slave IPs
|
||||
if (@$slaves) {
|
||||
# Allow transfer from slave IPs
|
||||
my (@notify, @transfer);
|
||||
foreach my $s (@$slaves) {
|
||||
push(@notify, { 'name' => $s });
|
||||
push(@transfer, { 'name' => $s });
|
||||
}
|
||||
if (@transfer) {
|
||||
my $gat = &find("allow-transfer", $opts->{'members'});
|
||||
if ($gat) {
|
||||
push(@transfer, @{$gat->{'members'}});
|
||||
}
|
||||
}
|
||||
if (@notify) {
|
||||
my $also = { 'name' => 'also-notify',
|
||||
'type' => 1,
|
||||
'members' => [ ] };
|
||||
my $allow = { 'name' => 'allow-transfer',
|
||||
'type' => 1,
|
||||
'members' => [ ] };
|
||||
foreach my $s (@$slaves) {
|
||||
push(@{$also->{'members'}}, { 'name' => $s });
|
||||
push(@{$allow->{'members'}}, { 'name' => $s });
|
||||
}
|
||||
push(@{$dir->{'members'}}, $also, $allow);
|
||||
'members' => \@notify};
|
||||
push(@{$dir->{'members'}}, $also);
|
||||
push(@{$dir->{'members'}}, { 'name' => 'notify',
|
||||
'values' => [ 'yes' ] });
|
||||
}
|
||||
if (@transfer) {
|
||||
my $allow = { 'name' => 'allow-transfer',
|
||||
'type' => 1,
|
||||
'members' => \@transfer };
|
||||
push(@{$dir->{'members'}}, $allow);
|
||||
}
|
||||
|
||||
# Create the zone file, with records
|
||||
my $ZONE;
|
||||
@@ -3010,7 +3032,7 @@ my %on = map { $_, 1 } @{$_[0]};
|
||||
&remote_error_setup(\&slave_error_handler);
|
||||
my @slaveerrs;
|
||||
foreach my $slave (&list_slave_servers()) {
|
||||
next if (%on && !$on{$slave->{'host'}});
|
||||
next if (%on && !$on{$slave->{'nsname'}} && !$on{$slave->{'host'}});
|
||||
|
||||
# Find the PID file
|
||||
$slave_error = undef;
|
||||
@@ -3579,7 +3601,7 @@ for(my $i=$#recs; $i>=0; $i--) {
|
||||
if ($recs[$i]->{'type'} eq 'NSEC' ||
|
||||
$recs[$i]->{'type'} eq 'NSEC3' ||
|
||||
$recs[$i]->{'type'} eq 'RRSIG' ||
|
||||
$recs[$i]->{'type'} eq 'NSEC3PARAM' && $tools ||
|
||||
$recs[$i]->{'type'} eq 'NSEC3PARAM' ||
|
||||
$recs[$i]->{'type'} eq 'DNSKEY') {
|
||||
&delete_record($fn, $recs[$i]);
|
||||
}
|
||||
|
||||
@@ -5,7 +5,7 @@ use warnings;
|
||||
no warnings 'redefine';
|
||||
no warnings 'uninitialized';
|
||||
# Globals
|
||||
our (%access, %text);
|
||||
our (%access, %text, $bind_version);
|
||||
our $dnssec_dlv_zone;
|
||||
|
||||
require './bind8-lib.pl';
|
||||
@@ -24,10 +24,12 @@ $tkeys ||= { 'members' => [ ] };
|
||||
print &ui_form_start("save_trusted.cgi", "post");
|
||||
print &ui_table_start($text{'trusted_header'}, undef, 2);
|
||||
|
||||
# DNSSEC enabled?
|
||||
print &choice_input($text{'trusted_dnssec'}, 'dnssec-enable', $mems,
|
||||
$text{'yes'}, 'yes', $text{'no'}, 'no',
|
||||
$text{'default'}, undef);
|
||||
if (&compare_version_numbers($bind_version, '<', '9.16.0')) {
|
||||
# DNSSEC enabled?
|
||||
print &choice_input($text{'trusted_dnssec'}, 'dnssec-enable', $mems,
|
||||
$text{'yes'}, 'yes', $text{'no'}, 'no',
|
||||
$text{'default'}, undef);
|
||||
}
|
||||
if (&supports_dnssec_client() == 2) {
|
||||
print &choice_input($text{'trusted_validation'},
|
||||
'dnssec-validation', $mems,
|
||||
|
||||
@@ -17,6 +17,14 @@ my $dom = $zone->{'name'};
|
||||
&ui_print_header(&zone_subhead($zone), $text{'master_title'}, "",
|
||||
undef, undef, undef, undef, &restart_links($zone));
|
||||
|
||||
my $d = &get_virtualmin_domains($dom);
|
||||
if ($d && $d->{'alias'}) {
|
||||
print &ui_alert_box($text{'master_vminalias'}, 'danger');
|
||||
}
|
||||
elsif ($d) {
|
||||
print &ui_alert_box($text{'master_vmin'}, 'warn');
|
||||
}
|
||||
|
||||
# Find the record types
|
||||
my (@rcodes, @recs);
|
||||
if (!$config{'largezones'}) {
|
||||
|
||||
@@ -147,6 +147,8 @@ master_defttl=Standaard lewendige tyd vir rekords
|
||||
master_edefttl='$1' is nie 'n geldige standaardtyd vir lewering van rekords nie
|
||||
master_esoagone=Geen SOA-rekord gevind nie!
|
||||
master_einclude=Bykomende sjabloonlêer bestaan nie
|
||||
master_vmin=Hierdie sone word deur Virtualmin bestuur. Rekords moet geredigeer word met behulp van die Virtualmin UI, om te verseker dat dit ooreenstem met ander virtuele bediener instellings.
|
||||
master_vminalias=Hierdie sone is 'n alias van 'n Virtualmin-domein, wat gesinchroniseer word met sy teiken. Rekords moet nooit hier geredigeer word nie, aangesien enige veranderinge oorgeskryf sal word!
|
||||
|
||||
delete_title=Vee sone uit
|
||||
delete_mesg=Is u seker dat u die sone $1 wil verwyder? Alle rekords en die sone-lêer sal uitgevee word.
|
||||
|
||||
@@ -147,6 +147,8 @@ master_defttl=الوقت الافتراضي للعيش للسجلات
|
||||
master_edefttl='$1' is not a valid default time-to-live for records
|
||||
master_esoagone=لم يتم العثور على سجل الخدمية!
|
||||
master_einclude=ملف القالب الإضافي غير موجود
|
||||
master_vmin=تتم إدارة هذه المنطقة بواسطة Virtualmin. يجب تحرير السجلات باستخدام Virtualmin UI ، للتأكد من أنها متوافقة مع إعدادات الخادم الظاهري الأخرى.
|
||||
master_vminalias=هذه المنطقة هي اسم مستعار لنطاق Virtualmin ، والذي يتم الاحتفاظ به متزامنًا مع هدفه. يجب عدم تحرير السجلات هنا مطلقًا ، حيث سيتم الكتابة فوق أي تغييرات!
|
||||
|
||||
delete_title=حذف المنطقة
|
||||
delete_mesg=Are you sure you want to delete the zone $1 ? All records and the zone file will be deleted.
|
||||
|
||||
@@ -147,6 +147,8 @@ master_defttl=Час жыць да запісаў па змаўчанні
|
||||
master_edefttl="$1" не з'яўляецца дапушчальным да запісу часу для запісу па змаўчанні
|
||||
master_esoagone=Запіс SOA не знойдзены!
|
||||
master_einclude=Дадатковы файл шаблону не існуе
|
||||
master_vmin=Гэта зона кіруецца Virtualmin. Запісы трэба рэдагаваць з дапамогай інтэрфейсу Virtualmin, каб пераканацца, што яны адпавядаюць наладам іншых віртуальных сервераў.
|
||||
master_vminalias=Гэтая зона з'яўляецца псеўданімам дамена Virtualmin, які падтрымліваецца ў сінхранізацыі з мэтай. Запісы ніколі не павінны рэдагавацца тут, бо любыя змены будуць перазапісаны!
|
||||
|
||||
delete_title=Выдаліць зону
|
||||
delete_mesg=Вы ўпэўнены, што хочаце выдаліць зону $1? Усе запісы і файл зоны будуць выдаленыя.
|
||||
|
||||
@@ -1,4 +1,6 @@
|
||||
master_inview=$1 с оглед $2
|
||||
master_vmin=Тази зона се управлява от Virtualmin. Записите трябва да се редактират с помощта на потребителския интерфейс на Virtualmin, за да се гарантира, че са съвместими с други настройки на виртуален сървър.
|
||||
master_vminalias=Тази зона е псевдоним на домейн Virtualmin, който се поддържа в синхрон със своята цел. Записите никога не трябва да се редактират тук, тъй като всички промени ще бъдат презаписани!
|
||||
|
||||
delete_vwarn=Тази зона е свързана с домейна Virtualmin $1 и затова не трябва да се изтрива тук!
|
||||
|
||||
|
||||
@@ -1,4 +1,6 @@
|
||||
master_inview=$1 a la vista $2
|
||||
master_vmin=Aquesta zona està gestionada per Virtualmin. Els registres s'han d'editar mitjançant la interfície d'usuari de Virtualmin, per assegurar-se que són coherents amb altres configuracions del servidor virtual.
|
||||
master_vminalias=Aquesta zona és un àlies d'un domini Virtualmin, que es manté sincronitzat amb el seu objectiu. Els registres no s'han d'editar mai aquí, ja que qualsevol canvi es sobreescriurà!
|
||||
|
||||
delete_onslave=També voleu suprimir-lo dels servidors esclaus?
|
||||
delete_errslave=La zona mestra ha suprimit bé, però s'han produït els errors següents en esclaus : $1
|
||||
|
||||
@@ -24,6 +24,8 @@ master_movedesc=Přesune tuto zónu do jiného zobrazení a přitom zachová vš
|
||||
master_applymsg2=Klepnutím na toto tlačítko použijete změny pouze pro tuto zónu. Toto bude fungovat, pouze pokud byly změny provedeny pro celý server alespoň jednou od vytvoření zóny.
|
||||
master_esoagone=Nebyl nalezen žádný záznam SOA!
|
||||
master_einclude=Další soubor šablony neexistuje
|
||||
master_vmin=Tuto zónu spravuje Virtualmin. Záznamy by měly být upravovány pomocí uživatelského rozhraní Virtualmin, aby bylo zajištěno, že budou konzistentní s ostatními nastaveními virtuálního serveru.
|
||||
master_vminalias=Tato zóna je alias domény Virtualmin, která je synchronizována s jejím cílem. Záznamy by zde nikdy neměly být upravovány, protože jakékoli změny budou přepsány!
|
||||
|
||||
delete_mesg3=Opravdu chcete odstranit zónu $1?
|
||||
delete_vwarn=Tato zóna je přidružena k doméně Virtualmin $1, a proto by zde neměla být odstraněna!
|
||||
|
||||
@@ -147,6 +147,8 @@ master_defttl=Standard tid til live for poster
|
||||
master_edefttl='$1' er ikke en gyldig standard-tid-til-live for poster
|
||||
master_esoagone=Ingen SOA-registrering fundet!
|
||||
master_einclude=Yderligere skabelonfil findes ikke
|
||||
master_vmin=Denne zone administreres af Virtualmin. Records bør redigeres ved hjælp af Virtualmin UI for at sikre, at de stemmer overens med andre virtuelle serverindstillinger.
|
||||
master_vminalias=Denne zone er et alias for et Virtualmin-domæne, som holdes synkroniseret med dets mål. Optegnelser bør aldrig redigeres her, da eventuelle ændringer vil blive overskrevet!
|
||||
|
||||
delete_title=Slet zone
|
||||
delete_mesg=Er du sikker på, at du vil slette zonen $1? Alle poster og zonefilen vil blive slettet.
|
||||
|
||||
@@ -1,4 +1,6 @@
|
||||
master_inview=$1 im Blick $2
|
||||
master_vmin=Diese Zone wird von Virtualmin verwaltet. Datensätze sollten über die Virtualmin-Benutzeroberfläche bearbeitet werden, um sicherzustellen, dass sie mit anderen Einstellungen des virtuellen Servers konsistent sind.
|
||||
master_vminalias=Diese Zone ist ein Alias einer Virtualmin-Domäne, die mit ihrem Ziel synchron gehalten wird. Datensätze sollten hier niemals bearbeitet werden, da alle Änderungen überschrieben werden!
|
||||
|
||||
delete_vwarn=Diese Zone ist der Virtualmin-Domäne $1 zugeordnet und sollte daher hier nicht gelöscht werden!
|
||||
|
||||
|
||||
@@ -147,6 +147,8 @@ master_defttl=Προεπιλεγμένος χρόνος ζωής για αρχε
|
||||
master_edefttl=Το '$1' δεν είναι έγκυρη προεπιλεγμένη ώρα για ζωντανή εγγραφή
|
||||
master_esoagone=Δεν βρέθηκε αρχείο SOA!
|
||||
master_einclude=Δεν υπάρχει πρόσθετο αρχείο προτύπου
|
||||
master_vmin=Αυτή η ζώνη διαχειρίζεται το Virtualmin. Οι εγγραφές θα πρέπει να επεξεργάζονται χρησιμοποιώντας το Virtualmin UI, για να διασφαλιστεί ότι είναι συνεπείς με άλλες ρυθμίσεις εικονικού διακομιστή.
|
||||
master_vminalias=Αυτή η ζώνη είναι ένα ψευδώνυμο ενός τομέα Virtualmin, ο οποίος διατηρείται σε συγχρονισμό με τον στόχο του. Οι εγγραφές δεν πρέπει ποτέ να επεξεργάζονται εδώ, καθώς τυχόν αλλαγές θα αντικατασταθούν!
|
||||
|
||||
delete_title=Διαγραφή Ζώνης
|
||||
delete_mesg=Είστε βέβαιοι ότι θέλετε να διαγράψετε τη ζώνη $1; Όλες οι εγγραφές και το αρχείο ζώνης θα διαγραφούν.
|
||||
|
||||
@@ -147,6 +147,8 @@ master_defttl=Default time-to-live for records
|
||||
master_edefttl='$1' is not a valid default time-to-live for records
|
||||
master_esoagone=No SOA record found!
|
||||
master_einclude=Additional template file does not exist
|
||||
master_vmin=This zone is managed by Virtualmin. Records should be edited using the Virtualmin UI, to ensure they are consistent with other virtual server settings.
|
||||
master_vminalias=This zone is an alias of a Virtualmin domain, which is kept in sync with it's target. Records should never be edited here, as any changes will be overwritten!
|
||||
|
||||
delete_title=Delete Zone
|
||||
delete_mesg=Are you sure you want to delete the zone $1 ? All records and the zone file will be deleted.
|
||||
|
||||
@@ -37,6 +37,8 @@ master_defttl=Tiempo de vida predeterminado para registros
|
||||
master_edefttl='$1' no es un tiempo de vida predeterminado válido para los registros
|
||||
master_esoagone=¡No se ha encontrado el registro SOA!
|
||||
master_einclude=El archivo de plantilla adicional no existe
|
||||
master_vmin=Esta zona es administrada por Virtualmin. Los registros deben editarse mediante la interfaz de usuario de Virtualmin para garantizar que sean coherentes con otras configuraciones del servidor virtual.
|
||||
master_vminalias=Esta zona es un alias de un dominio de Virtualmin, que se mantiene sincronizado con su objetivo. Los registros nunca deben editarse aquí, ya que cualquier cambio se sobrescribirá
|
||||
|
||||
delete_mesg3=¿Está seguro de que desea eliminar la zona $1?
|
||||
delete_vwarn=Esta zona está asociada con el dominio Virtualmin $1, por lo que no debe eliminarse aquí.
|
||||
|
||||
@@ -147,6 +147,8 @@ master_defttl=Erregistroen bizitzeko denbora lehenetsia
|
||||
master_edefttl='$1' ez da erregistroen denbora bizitzeko balio lehenetsia
|
||||
master_esoagone=Ez da SOA erregistrorik aurkitu!
|
||||
master_einclude=Ez da txantiloi fitxategi gehigarririk existitzen
|
||||
master_vmin=Zona hau Virtualmin-ek kudeatzen du. Erregistroak Virtualmin UI erabiliz editatu behar dira, zerbitzari birtualeko beste ezarpen batzuekin bat datozela ziurtatzeko.
|
||||
master_vminalias=Zona hau Virtualmin domeinu baten alias bat da, zeina helbururekin sinkronizatuta mantentzen dena. Erregistroak ez dira inoiz hemen editatu behar, edozein aldaketa gainidatzi egingo baita!
|
||||
|
||||
delete_title=Ezabatu zona
|
||||
delete_mesg=Ziur $1 zona ezabatu nahi duzula? Erregistro guztiak eta zona fitxategia ezabatuko dira.
|
||||
|
||||
@@ -30,6 +30,8 @@ master_movedesc=این منطقه را به یک نمای دیگر منتقل م
|
||||
master_applymsg2=برای اعمال تغییرات فقط در این منطقه ، روی این دکمه کلیک کنید. این کار فقط در صورتی انجام می شود که حداقل یک بار از زمان ایجاد منطقه ، برای کل سرور اعمال شود.
|
||||
master_esoagone=هیچ سابقه SOA یافت نشد!
|
||||
master_einclude=پرونده الگوی اضافی وجود ندارد
|
||||
master_vmin=این منطقه توسط Virtualmin مدیریت می شود. رکوردها باید با استفاده از Virtualmin UI ویرایش شوند تا اطمینان حاصل شود که با سایر تنظیمات سرور مجازی سازگار هستند.
|
||||
master_vminalias=این منطقه نام مستعار یک دامنه Virtualmin است که با هدف خود هماهنگ می شود. سوابق هرگز نباید در اینجا ویرایش شوند، زیرا هر تغییری بازنویسی می شود!
|
||||
|
||||
delete_mesg3=Are you sure you want to delete the zone $1 ?
|
||||
delete_vwarn=این منطقه با دامنه Virtualmin $1 همراه است و بنابراین نباید در اینجا حذف شود!
|
||||
|
||||
@@ -147,6 +147,8 @@ master_defttl=Tietueiden oletusaika-aika
|
||||
master_edefttl='$1' ei ole kelvollinen oletusarvoinen elinaika tietueille
|
||||
master_esoagone=SOA-tietuetta ei löytynyt!
|
||||
master_einclude=Muuta mallitiedostoa ei ole
|
||||
master_vmin=Tätä vyöhykettä hallinnoi Virtualmin. Tietueita tulee muokata Virtualmin-käyttöliittymällä, jotta ne ovat yhdenmukaisia muiden virtuaalipalvelinasetusten kanssa.
|
||||
master_vminalias=Tämä vyöhyke on Virtualmin-verkkotunnuksen alias, joka pidetään synkronoituna kohteensa kanssa. Tietueita ei saa koskaan muokata täällä, sillä kaikki muutokset korvataan!
|
||||
|
||||
delete_title=Poista vyöhyke
|
||||
delete_mesg=Haluatko varmasti poistaa vyöhykkeen $1? Kaikki tietueet ja vyöhyketiedosto poistetaan.
|
||||
|
||||
@@ -1,3 +1,6 @@
|
||||
master_vmin=Cette zone est gérée par Virtualmin. Les enregistrements doivent être modifiés à l'aide de l'interface utilisateur Virtualmin, pour s'assurer qu'ils sont cohérents avec les autres paramètres du serveur virtuel.
|
||||
master_vminalias=Cette zone est un alias d'un domaine Virtualmin, qui est synchronisé avec sa cible. Les enregistrements ne doivent jamais être modifiés ici, car toute modification sera écrasée !
|
||||
|
||||
slave_format=Format de fichier de zone
|
||||
slave_raw=Binaire brut
|
||||
slave_text=Texte brut
|
||||
|
||||
@@ -147,6 +147,8 @@ master_defttl=זמן ברירת המחדל לחיים עבור רשומות
|
||||
master_edefttl='$1' אינו זמן ברירת מחדל תקף לחיות עבור רשומות
|
||||
master_esoagone=לא נמצאה רשומת SOA!
|
||||
master_einclude=קובץ תבנית נוסף אינו קיים
|
||||
master_vmin=אזור זה מנוהל על ידי Virtualmin. יש לערוך את הרשומות באמצעות ממשק המשתמש של Virtualmin, כדי להבטיח שהן עולות בקנה אחד עם הגדרות שרת וירטואלי אחרות.
|
||||
master_vminalias=אזור זה הוא כינוי של דומיין Virtualmin, אשר נשמר מסונכרן עם היעד שלו. לעולם אין לערוך רשומות כאן, מכיוון שכל השינויים יוחלפו!
|
||||
|
||||
delete_title=מחק אזור
|
||||
delete_mesg=האם אתה בטוח שברצונך למחוק את האזור $1 ? כל הרשומות וקובץ האזור יימחקו.
|
||||
|
||||
@@ -147,6 +147,8 @@ master_defttl=Zadano vrijeme za snimanje uživo
|
||||
master_edefttl="$1" nije valjano zadano vrijeme za izradu zapisa
|
||||
master_esoagone=Nije pronađen SOA zapis!
|
||||
master_einclude=Dodatna datoteka predloška ne postoji
|
||||
master_vmin=Ovom zonom upravlja Virtualmin. Zapise treba uređivati pomoću korisničkog sučelja Virtualmin kako bi se osiguralo da su u skladu s drugim postavkama virtualnog poslužitelja.
|
||||
master_vminalias=Ova zona je pseudonim Virtualmin domene, koja je sinkronizirana sa svojim ciljem. Zapisi se nikada ne smiju uređivati ovdje, jer će sve promjene biti prebrisane!
|
||||
|
||||
delete_title=Izbriši zonu
|
||||
delete_mesg=Jeste li sigurni da želite izbrisati zonu $1? Svi zapisi i zonska datoteka bit će izbrisani.
|
||||
|
||||
@@ -10,6 +10,8 @@ master_inview=$1 a $2 nézetben
|
||||
master_egone=A $1 zóna egyetlen nézetben sem létezik
|
||||
master_egone2=A $1 zóna nem létezik!
|
||||
master_egone3=A $1 zóna a $2 nézetben nem létezik!
|
||||
master_vmin=Ezt a zónát a Virtualmin kezeli. A rekordokat a Virtualmin UI használatával kell szerkeszteni, hogy konzisztensek legyenek a többi virtuális szerver beállításával.
|
||||
master_vminalias=Ez a zóna egy Virtualmin tartomány álneve, amely szinkronban van a céljával. A rekordokat soha nem szabad itt szerkeszteni, mert az esetleges változtatások felülíródnak!
|
||||
|
||||
delete_vwarn=Ez a zóna a $1 Virtualmin domainhez van társítva, ezért itt nem szabad törölni!
|
||||
|
||||
|
||||
@@ -47,6 +47,8 @@ master_defttl=Tempo di vita predefinito per i record
|
||||
master_edefttl='$1' non è un time-to-live predefinito valido per i record
|
||||
master_esoagone=Nessun record SOA trovato!
|
||||
master_einclude=Non esiste un file modello aggiuntivo
|
||||
master_vmin=Questa zona è gestita da Virtualmin. I record devono essere modificati utilizzando l'interfaccia utente di Virtualmin, per garantire che siano coerenti con le altre impostazioni del server virtuale.
|
||||
master_vminalias=Questa zona è un alias di un dominio Virtualmin, che viene mantenuto sincronizzato con la sua destinazione. I record non dovrebbero mai essere modificati qui, poiché qualsiasi modifica verrà sovrascritta!
|
||||
|
||||
delete_mesg3=Sei sicuro di voler eliminare la zona $1?
|
||||
delete_onslave=Eliminare anche dai server slave?
|
||||
|
||||
@@ -13,6 +13,8 @@ master_inview=ビュー $2の $1
|
||||
master_egone=ゾーン$1はどのビューにも存在しません
|
||||
master_egone2=ゾーン$1は存在しません!
|
||||
master_egone3=ビュー$2のゾーン$1は存在しません!
|
||||
master_vmin=このゾーンは Virtualmin によって管理されます。レコードは、他の仮想サーバー設定との一貫性を確保するために、Virtualmin UI を使用して編集する必要があります。
|
||||
master_vminalias=このゾーンは Virtualmin ドメインのエイリアスであり、ターゲットとの同期が保たれます。変更が上書きされるため、ここでレコードを編集しないでください。
|
||||
|
||||
delete_vwarn=このゾーンはVirtualminドメイン $1に関連付けられているため、ここで削除しないでください!
|
||||
delete_vwarn2=このゾーンはVirtualminドメイン $1および $2に関連付けられているため、ここで削除しないでください!
|
||||
|
||||
@@ -71,6 +71,8 @@ master_defttl=레코드의 기본 수명
|
||||
master_edefttl='$1'은 (는) 유효한 기본 유효 기간이 아닙니다.
|
||||
master_esoagone=SOA 레코드가 없습니다!
|
||||
master_einclude=추가 템플릿 파일이 없습니다
|
||||
master_vmin=이 영역은 Virtualmin에서 관리합니다. 다른 가상 서버 설정과 일관성을 유지하려면 Virtualmin UI를 사용하여 레코드를 편집해야 합니다.
|
||||
master_vminalias=이 영역은 대상과 동기화된 상태로 유지되는 Virtualmin 도메인의 별칭입니다. 모든 변경 사항을 덮어쓰게 되므로 여기에서 레코드를 편집하면 안 됩니다!
|
||||
|
||||
delete_mesg2=루트 영역을 삭제 하시겠습니까? DNS 서버가 더 이상 인터넷에서 주소를 조회하지 못할 수 있습니다.
|
||||
delete_mesg3=영역 $1을 삭제 하시겠습니까?
|
||||
|
||||
@@ -147,6 +147,8 @@ master_defttl=Numatytasis įrašų gyvavimo laikas
|
||||
master_edefttl=„$1“ nėra tinkamas numatytasis įrašų gyvavimo laikas
|
||||
master_esoagone=Nerastas SOA įrašas.
|
||||
master_einclude=Papildomo šablono failo nėra
|
||||
master_vmin=Šią zoną valdo „Virtualmin“. Įrašai turi būti redaguojami naudojant „Virtualmin“ vartotojo sąsają, siekiant užtikrinti, kad jie atitiktų kitus virtualaus serverio nustatymus.
|
||||
master_vminalias=Ši zona yra „Virtualmin“ domeno slapyvardis, kuris yra sinchronizuojamas su savo taikiniu. Įrašai čia niekada neturėtų būti redaguojami, nes bet kokie pakeitimai bus perrašyti!
|
||||
|
||||
delete_title=Ištrinti zoną
|
||||
delete_mesg=Ar tikrai norite ištrinti $1 zoną? Visi įrašai ir zonos failai bus ištrinti.
|
||||
|
||||
@@ -147,6 +147,8 @@ master_defttl=Noklusētais ierakstu dzīves laiks
|
||||
master_edefttl='$1' nav derīgs ierakstu noklusējuma dzīves laiks
|
||||
master_esoagone=Nav atrasts neviens SOA ieraksts.
|
||||
master_einclude=Papildu veidnes fails neeksistē
|
||||
master_vmin=Šo zonu pārvalda Virtualmin. Ieraksti ir jārediģē, izmantojot Virtualmin UI, lai nodrošinātu to atbilstību citiem virtuālā servera iestatījumiem.
|
||||
master_vminalias=Šī zona ir Virtualmin domēna aizstājvārds, kas tiek sinhronizēts ar tā mērķi. Ierakstus nekad nevajadzētu rediģēt šeit, jo visas izmaiņas tiks pārrakstītas!
|
||||
|
||||
delete_title=Dzēst zonu
|
||||
delete_mesg=Vai tiešām vēlaties izdzēst zonu $1? Visi ieraksti un zonas fails tiks izdzēsti.
|
||||
|
||||
@@ -147,6 +147,8 @@ master_defttl=Waktu untuk hidup untuk rekod lalai
|
||||
master_edefttl='$1' bukan masa lalai yang sah untuk rekod
|
||||
master_esoagone=Tiada rekod SOA ditemui!
|
||||
master_einclude=Fail templat tambahan tidak wujud
|
||||
master_vmin=Zon ini diuruskan oleh Virtualmin. Rekod hendaklah diedit menggunakan UI Virtualmin, untuk memastikan ia konsisten dengan tetapan pelayan maya yang lain.
|
||||
master_vminalias=Zon ini ialah alias domain Virtualmin, yang disimpan selari dengan sasarannya. Rekod tidak boleh diedit di sini, kerana sebarang perubahan akan ditimpa!
|
||||
|
||||
delete_title=Padamkan Zon
|
||||
delete_mesg=Adakah anda pasti mahu memadamkan zon $1? Semua rekod dan fail zon akan dihapuskan.
|
||||
|
||||
@@ -147,6 +147,8 @@ master_defttl=Żmien tal-għajxien awtomatiku għar-rekords
|
||||
master_edefttl="$1" m'huwiex il-ħin ta 'l-għajxien validu għar-rekords
|
||||
master_esoagone=Ma nstab l-ebda rekord SOA!
|
||||
master_einclude=Fajl mudell addizzjonali ma jeżistix
|
||||
master_vmin=Din iż-żona hija mmexxija minn Virtualmin. Ir-rekords għandhom jiġu editjati bl-użu ta' Virtualmin UI, biex jiġi żgurat li jkunu konsistenti ma' settings oħra ta' server virtwali.
|
||||
master_vminalias=Din iż-żona hija alias ta' dominju Virtualmin, li jinżamm sinkronizzat mal-mira tiegħu. Ir-rekords m'għandhom qatt jiġu editjati hawn, peress li kwalunkwe tibdil se jinkiteb fuqhom!
|
||||
|
||||
delete_title=Ħassar Żona
|
||||
delete_mesg=Int żgur li trid tħassar iż-żona $1? Ir-rekords kollha u l-fajl taż-żona se jitħassru.
|
||||
|
||||
@@ -9,6 +9,8 @@ master_inview=$1 in zicht $2
|
||||
master_egone=Zone $1 bestaat in geen enkele weergave
|
||||
master_egone2=Zone $1 bestaat niet!
|
||||
master_egone3=Zone $1 in zicht $2 bestaat niet!
|
||||
master_vmin=Deze zone wordt beheerd door Virtualmin. Records moeten worden bewerkt met behulp van de gebruikersinterface van Virtualmin, om ervoor te zorgen dat ze consistent zijn met andere virtuele serverinstellingen.
|
||||
master_vminalias=Deze zone is een alias van een Virtualmin-domein, dat synchroon wordt gehouden met zijn doel. Records mogen hier nooit worden bewerkt, omdat eventuele wijzigingen worden overschreven!
|
||||
|
||||
delete_vwarn=Deze zone is gekoppeld aan het Virtualmin-domein $1 en mag hier dus niet worden verwijderd!
|
||||
|
||||
|
||||
@@ -1,3 +1,6 @@
|
||||
master_vmin=Denne sonen administreres av Virtualmin. Oppføringer bør redigeres ved hjelp av Virtualmin-grensesnittet for å sikre at de stemmer overens med andre virtuelle serverinnstillinger.
|
||||
master_vminalias=Denne sonen er et alias for et Virtualmin-domene, som holdes synkronisert med målet. Poster bør aldri redigeres her, da eventuelle endringer vil bli overskrevet!
|
||||
|
||||
slave_format=Sone filformat
|
||||
slave_raw=Rå binær
|
||||
slave_text=Ren tekst
|
||||
|
||||
@@ -3,6 +3,8 @@ index_eexpired_conf=Automatyczne podpisywanie powinno zostać ponownie włączon
|
||||
index_eexpired_mod=Użyj modułu $1, aby wyłączyć DNSSEC dla tych domen lub sprawdzić, dlaczego podpisywanie kończy się niepowodzeniem.
|
||||
|
||||
master_inview=$1 w widoku $2
|
||||
master_vmin=Tą strefą zarządza Virtualmin. Rekordy należy edytować za pomocą interfejsu użytkownika Virtualmin, aby zapewnić ich spójność z innymi ustawieniami serwera wirtualnego.
|
||||
master_vminalias=Ta strefa jest aliasem domeny Virtualmin, która jest synchronizowana z celem. Rekordów nigdy nie należy tutaj edytować, ponieważ wszelkie zmiany zostaną nadpisane!
|
||||
|
||||
delete_vwarn=Ta strefa jest powiązana z domeną Virtualmin $1, dlatego nie należy jej tutaj usuwać!
|
||||
|
||||
|
||||
@@ -88,6 +88,8 @@ master_defttl=Tempo de vida padrão para registros
|
||||
master_edefttl='$1' não é um tempo de vida padrão válido para registros
|
||||
master_esoagone=Nenhum registro SOA encontrado!
|
||||
master_einclude=Arquivo de modelo adicional não existe
|
||||
master_vmin=Esta zona é gerenciada pelo Virtualmin. Os registros devem ser editados usando a IU do Virtualmin, para garantir que sejam consistentes com outras configurações do servidor virtual.
|
||||
master_vminalias=Esta zona é um alias de um domínio Virtualmin, que é mantido em sincronia com seu alvo. Os registros nunca devem ser editados aqui, pois quaisquer alterações serão substituídas!
|
||||
|
||||
delete_title=Excluir zona
|
||||
delete_mesg=Tem certeza de que deseja excluir a zona $1? Todos os registros e o arquivo de zona serão excluídos.
|
||||
|
||||
@@ -11,6 +11,8 @@ master_inview=$1 na visualização $2
|
||||
master_egone=A zona $1 não existe em nenhuma visualização
|
||||
master_egone2=A zona $1 não existe!
|
||||
master_egone3=A zona $1 na exibição $2 não existe!
|
||||
master_vmin=Esta zona é gerenciada pelo Virtualmin. Os registros devem ser editados usando a IU do Virtualmin, para garantir que sejam consistentes com outras configurações do servidor virtual.
|
||||
master_vminalias=Esta zona é um alias de um domínio Virtualmin, que é mantido em sincronia com seu destino. Os registros nunca devem ser editados aqui, pois quaisquer alterações serão substituídas!
|
||||
|
||||
delete_vwarn=Esta zona está associada ao domínio Virtualmin $1 e, portanto, não deve ser excluída aqui!
|
||||
|
||||
|
||||
@@ -147,6 +147,8 @@ master_defttl=Timp de viață implicit pentru înregistrări
|
||||
master_edefttl=„$1” nu este o durată de viață implicită valabilă pentru înregistrări
|
||||
master_esoagone=Nu a fost găsită nicio înregistrare SOA!
|
||||
master_einclude=Fișierul șablon suplimentar nu există
|
||||
master_vmin=Această zonă este gestionată de Virtualmin. Înregistrările trebuie editate utilizând interfața de utilizare Virtualmin, pentru a se asigura că sunt în concordanță cu alte setări ale serverului virtual.
|
||||
master_vminalias=Această zonă este un alias al unui domeniu Virtualmin, care este menținut în sincronizare cu ținta sa. Înregistrările nu trebuie niciodată editate aici, deoarece orice modificări vor fi suprascrise!
|
||||
|
||||
delete_title=Ștergeți Zona
|
||||
delete_mesg=Sigur doriți să ștergeți zona $1? Toate înregistrările și fișierul de zonă vor fi șterse.
|
||||
|
||||
@@ -48,6 +48,8 @@ master_defttl=Время жизни по умолчанию для записе
|
||||
master_edefttl=«$1» не является допустимым временем жизни по умолчанию для записей
|
||||
master_esoagone=Запись SOA не найдена!
|
||||
master_einclude=Дополнительный файл шаблона не существует
|
||||
master_vmin=Эта зона управляется Virtualmin. Записи следует редактировать с помощью пользовательского интерфейса Virtualmin, чтобы обеспечить их соответствие другим настройкам виртуального сервера.
|
||||
master_vminalias=Эта зона является псевдонимом домена Virtualmin, который синхронизируется со своей целью. Записи никогда не должны редактироваться здесь, так как любые изменения будут перезаписаны!
|
||||
|
||||
delete_mesg3=Вы уверены, что хотите удалить зону $1?
|
||||
delete_onslave=Также удалить с подчиненных серверов?
|
||||
|
||||
@@ -147,6 +147,8 @@ master_defttl=Predvolený čas dožívania záznamov
|
||||
master_edefttl='$1' nie je platný predvolený čas do života záznamov
|
||||
master_esoagone=Nenašli sa žiadne záznamy SOA!
|
||||
master_einclude=Dodatočný súbor šablóny neexistuje
|
||||
master_vmin=Túto zónu spravuje Virtualmin. Záznamy by sa mali upravovať pomocou používateľského rozhrania Virtualmin, aby sa zabezpečilo, že budú konzistentné s ostatnými nastaveniami virtuálneho servera.
|
||||
master_vminalias=Táto zóna je alias domény Virtualmin, ktorá je synchronizovaná s jej cieľom. Záznamy by sa tu nikdy nemali upravovať, pretože akékoľvek zmeny budú prepísané!
|
||||
|
||||
delete_title=Odstrániť zónu
|
||||
delete_mesg=Naozaj chcete odstrániť zónu $1? Všetky záznamy a súbor zóny budú vymazané.
|
||||
|
||||
@@ -147,6 +147,8 @@ master_defttl=Privzeti čas za življenje za zapise
|
||||
master_edefttl='$1' ni veljaven privzeti čas za življenje za zapise
|
||||
master_esoagone=Ni SOA zapisa!
|
||||
master_einclude=Dodatna datoteka predloge ne obstaja
|
||||
master_vmin=To območje upravlja Virtualmin. Zapise je treba urejati z uporabniškim vmesnikom Virtualmin, da se zagotovi skladnost z drugimi nastavitvami virtualnega strežnika.
|
||||
master_vminalias=To območje je vzdevek domene Virtualmin, ki je sinhronizirana s svojim ciljem. Zapisov nikoli ne urejajte tukaj, saj bodo vse spremembe prepisane!
|
||||
|
||||
delete_title=Zbriši cono
|
||||
delete_mesg=Ali ste prepričani, da želite izbrisati cono $1? Vsi zapisi in zonska datoteka bodo izbrisani.
|
||||
|
||||
@@ -27,6 +27,8 @@ master_movedesc=Flyttar denna zon till en annan vy, samtidigt som alla poster oc
|
||||
master_applymsg2=Klicka på den här knappen för att endast tillämpa ändringar för denna zon. Detta fungerar bara om ändringar har tillämpats för hela servern minst en gång sedan zonen skapades.
|
||||
master_esoagone=Ingen SOA-post hittades!
|
||||
master_einclude=Ytterligare mallfil finns inte
|
||||
master_vmin=Denna zon hanteras av Virtualmin. Poster bör redigeras med Virtualmin-gränssnittet för att säkerställa att de överensstämmer med andra virtuella serverinställningar.
|
||||
master_vminalias=Denna zon är ett alias för en Virtualmin-domän, som hålls synkroniserad med dess mål. Poster bör aldrig redigeras här, eftersom alla ändringar kommer att skrivas över!
|
||||
|
||||
delete_mesg3=Är du säker på att du vill ta bort zonen $1?
|
||||
delete_vwarn=Denna zon är associerad med Virtualmin-domänen $1, och bör därför inte tas bort här!
|
||||
|
||||
@@ -147,6 +147,8 @@ master_defttl=ค่าเริ่มต้นเวลาอยู่เพื
|
||||
master_edefttl='$1' ไม่ใช่เวลาเริ่มต้นที่ถูกต้องสำหรับบันทึก
|
||||
master_esoagone=ไม่พบบันทึก SOA!
|
||||
master_einclude=ไม่มีไฟล์เทมเพลตเพิ่มเติม
|
||||
master_vmin=โซนนี้จัดการโดย Virtualmin ควรแก้ไขบันทึกโดยใช้ Virtualmin UI เพื่อให้แน่ใจว่าสอดคล้องกับการตั้งค่าเซิร์ฟเวอร์เสมือนอื่นๆ
|
||||
master_vminalias=โซนนี้เป็นนามแฝงของโดเมน Virtualmin ซึ่งซิงค์กับเป้าหมาย ไม่ควรแก้ไขบันทึกที่นี่ เนื่องจากการเปลี่ยนแปลงใดๆ จะถูกเขียนทับ!
|
||||
|
||||
delete_title=ลบโซน
|
||||
delete_mesg=คุณแน่ใจหรือว่าต้องการลบโซน $1 ระเบียนทั้งหมดและไฟล์โซนจะถูกลบ
|
||||
|
||||
@@ -29,6 +29,8 @@ master_movedesc=Tüm kayıtları ve diğer seçenekleri korurken bu bölgeyi ba
|
||||
master_applymsg2=Yalnızca bu bölge için değişiklik uygulamak üzere bu düğmeyi tıklayın. Bu, yalnızca bölge oluşturulduğundan bu yana en az bir kez tüm sunucu için değişiklikler uygulandığında çalışır.
|
||||
master_esoagone=SOA kaydı bulunamadı!
|
||||
master_einclude=Ek şablon dosyası yok
|
||||
master_vmin=Bu bölge Virtualmin tarafından yönetilmektedir. Diğer sanal sunucu ayarlarıyla tutarlı olduklarından emin olmak için kayıtlar Virtualmin UI kullanılarak düzenlenmelidir.
|
||||
master_vminalias=Bu bölge, hedefiyle senkronize tutulan bir Virtualmin etki alanının takma adıdır. Herhangi bir değişikliğin üzerine yazılacağı için kayıtlar burada asla düzenlenmemelidir!
|
||||
|
||||
delete_mesg3=$1 bölgesini silmek istediğinizden emin misiniz?
|
||||
delete_vwarn=Bu bölge $1 Virtualmin etki alanı ile ilişkilidir ve buradan silinmemelidir!
|
||||
|
||||
@@ -48,6 +48,8 @@ master_defttl=Час життя для записів за замовчуван
|
||||
master_edefttl='$1' не є дійсним за замовчуванням для прослуховування записів за замовчуванням
|
||||
master_esoagone=Запис SOA не знайдено!
|
||||
master_einclude=Додатковий файл шаблону не існує
|
||||
master_vmin=Цією зоною керує Virtualmin. Записи слід редагувати за допомогою інтерфейсу користувача Virtualmin, щоб переконатися, що вони відповідають іншим налаштуванням віртуального сервера.
|
||||
master_vminalias=Ця зона є псевдонімом домену Virtualmin, який синхронізується з цільовим доменом. Тут ніколи не можна редагувати записи, оскільки будь-які зміни будуть перезаписані!
|
||||
|
||||
delete_mesg3=Ви впевнені, що хочете видалити зону $1?
|
||||
delete_onslave=Видалити також з підлеглого серверів?
|
||||
|
||||
@@ -147,6 +147,8 @@ master_defttl=پہلے سے طے شدہ ریکارڈوں کے لئے وقت رہ
|
||||
master_edefttl='$1' is not a valid default time-to-live for records
|
||||
master_esoagone=ایس او اے کا کوئی ریکارڈ نہیں ملا!
|
||||
master_einclude=اضافی ٹیمپلیٹ فائل موجود نہیں ہے
|
||||
master_vmin=یہ زون Virtualmin کے زیر انتظام ہے۔ Virtualmin UI کا استعمال کرتے ہوئے ریکارڈز میں ترمیم کی جانی چاہیے، تاکہ یہ یقینی بنایا جا سکے کہ وہ دیگر ورچوئل سرور کی ترتیبات کے ساتھ مطابقت رکھتے ہیں۔
|
||||
master_vminalias=یہ زون ورچوئل مین ڈومین کا ایک عرف ہے، جسے اس کے ہدف کے ساتھ ہم آہنگ رکھا جاتا ہے۔ یہاں ریکارڈز میں کبھی بھی ترمیم نہیں کی جانی چاہیے، کیونکہ کوئی بھی تبدیلی اوور رائٹ ہو جائے گی!
|
||||
|
||||
delete_title=زون کو حذف کریں
|
||||
delete_mesg=Are you sure you want to delete the zone $1 ? All records and the zone file will be deleted.
|
||||
|
||||
@@ -147,6 +147,8 @@ master_defttl=Thời gian tồn tại mặc định cho hồ sơ
|
||||
master_edefttl='$1' không phải là thời gian tồn tại mặc định hợp lệ cho các bản ghi
|
||||
master_esoagone=Không tìm thấy bản ghi SOA!
|
||||
master_einclude=Tệp mẫu bổ sung không tồn tại
|
||||
master_vmin=Vùng này được quản lý bởi Virtualmin. Các bản ghi phải được chỉnh sửa bằng giao diện người dùng Virtualmin để đảm bảo chúng nhất quán với các cài đặt máy chủ ảo khác.
|
||||
master_vminalias=Vùng này là bí danh của miền Virtualmin, được giữ đồng bộ với mục tiêu của nó. Các bản ghi không bao giờ được chỉnh sửa ở đây, vì mọi thay đổi sẽ bị ghi đè!
|
||||
|
||||
delete_title=Xóa vùng
|
||||
delete_mesg=Bạn có chắc chắn muốn xóa vùng $1? Tất cả các hồ sơ và các tập tin khu vực sẽ bị xóa.
|
||||
|
||||
@@ -48,6 +48,8 @@ master_defttl=记录的默认生存时间
|
||||
master_edefttl='$1'不是记录的有效默认生存时间
|
||||
master_esoagone=找不到SOA记录!
|
||||
master_einclude=附加模板文件不存在
|
||||
master_vmin=该区域由 Virtualmin 管理。应使用 Virtualmin UI 编辑记录,以确保它们与其他虚拟服务器设置一致。
|
||||
master_vminalias=该区域是 Virtualmin 域的别名,与其目标保持同步。切勿在此处编辑记录,因为任何更改都将被覆盖!
|
||||
|
||||
delete_mesg3=您确定要删除区域$1吗?
|
||||
delete_onslave=还要从从服务器删除吗?
|
||||
|
||||
@@ -77,6 +77,8 @@ master_defttl=記錄的默認生存時間
|
||||
master_edefttl='$1'不是記錄的有效默認生存時間
|
||||
master_esoagone=找不到SOA記錄!
|
||||
master_einclude=附加模板文件不存在
|
||||
master_vmin=該區域由 Virtualmin 管理。應使用 Virtualmin UI 編輯記錄,以確保它們與其他虛擬服務器設置一致。
|
||||
master_vminalias=該區域是 Virtualmin 域的別名,與其目標保持同步。切勿在此處編輯記錄,因為任何更改都將被覆蓋!
|
||||
|
||||
delete_mesg2=您確定要刪除根區域嗎?您的DNS服務器可能不再能夠在Internet上查找地址。
|
||||
delete_mesg3=您確定要刪除區域$1嗎?
|
||||
|
||||
@@ -495,11 +495,10 @@ return $name.
|
||||
# Increase the serial number in some SOA record by 1
|
||||
sub bump_soa_record
|
||||
{
|
||||
my($r, $v, $vals);
|
||||
for(my $i=0; $i<@{$_[1]}; $i++) {
|
||||
$r = $_[1]->[$i];
|
||||
my ($file, $recs) = @_;
|
||||
foreach my $r (@$recs) {
|
||||
if ($r->{'type'} eq "SOA") {
|
||||
$v = $r->{'values'};
|
||||
my $v = $r->{'values'};
|
||||
# already set serial if no acl allow it to update or update
|
||||
# is disabled
|
||||
my $serial = $v->[2];
|
||||
@@ -507,8 +506,8 @@ for(my $i=0; $i<@{$_[1]}; $i++) {
|
||||
# automatically handle serial numbers ?
|
||||
$serial = &compute_serial($v->[2]);
|
||||
}
|
||||
$vals = "$v->[0] $v->[1] (\n\t\t\t$serial\n\t\t\t$v->[3]\n".
|
||||
"\t\t\t$v->[4]\n\t\t\t$v->[5]\n\t\t\t$v->[6] )";
|
||||
my $vals = "$v->[0] $v->[1] (\n\t\t\t$serial\n\t\t\t$v->[3]\n".
|
||||
"\t\t\t$v->[4]\n\t\t\t$v->[5]\n\t\t\t$v->[6] )";
|
||||
&modify_record($r->{'file'}, $r, $r->{'realname'}, $r->{'ttl'},
|
||||
$r->{'class'}, $r->{'type'}, $vals);
|
||||
}
|
||||
|
||||
@@ -4,7 +4,7 @@ use strict;
|
||||
use warnings;
|
||||
no warnings 'redefine';
|
||||
no warnings 'uninitialized';
|
||||
our (%access, %text, %in, %config);
|
||||
our (%access, %text, %in, %config, $bind_version);
|
||||
|
||||
require './bind8-lib.pl';
|
||||
$access{'defaults'} || &error($text{'trusted_ecannot'});
|
||||
@@ -17,7 +17,9 @@ my $conf = $parent->{'members'};
|
||||
my $options = &find("options", $conf);
|
||||
|
||||
# DNSSEC enabled
|
||||
&save_choice("dnssec-enable", $options, 1);
|
||||
if (&compare_version_numbers($bind_version, '<', '9.16.0')) {
|
||||
&save_choice("dnssec-enable", $options, 1);
|
||||
}
|
||||
if (&supports_dnssec_client() == 2) {
|
||||
&save_choice("dnssec-validation", $options, 1);
|
||||
}
|
||||
|
||||
@@ -59,9 +59,9 @@ if ($access{'lang'}) {
|
||||
|
||||
# Old datetime format or a new locale
|
||||
if ($access{'locale'}) {
|
||||
eval "use DateTime; use DateTime::Locale; use DateTime::TimeZone;";
|
||||
&foreign_require('webmin');
|
||||
if (!$@) {
|
||||
eval "use DateTime; use DateTime::Locale; use DateTime::TimeZone;";
|
||||
if (!$@ && $] > 5.011) {
|
||||
my $locales = &list_locales();
|
||||
my %localesrev = reverse %{$locales};
|
||||
my $locale = $locale_auto || $gconfig{'locale'} || &get_default_system_locale();
|
||||
|
||||
@@ -233,25 +233,32 @@ print "<p><b>$text{'do_done'}</b><p>\n";
|
||||
# Show details of installed packages, where we have them
|
||||
for($i=0; $i<@names; $i++) {
|
||||
next if (!$pinfo[$i]);
|
||||
print "<table border width=100%>\n";
|
||||
print "<tr $tb> <td><b>$text{'do_details'}</b></td> </tr>\n";
|
||||
print "<tr $cb> <td><table width=100%>\n";
|
||||
print &ui_table_start($text{'do_details'}, "width=100%", 4);
|
||||
|
||||
if ($pinfo[$i]->[2]) {
|
||||
print "<tr> <td valign=top width=20%><b>$text{'do_desc'}</b></td>\n";
|
||||
print "<td colspan=3><pre>$pinfo[$i]->[2]</pre></td> </tr>\n";
|
||||
print &ui_table_row($text{'do_desc'},
|
||||
"<pre>".&html_escape($pinfo[$i]->[2])."</pre>", 3);
|
||||
}
|
||||
|
||||
print "<tr> <td width=20%><b>$text{'do_pack'}</b></td> <td>$pinfo[$i]->[0]</td>\n";
|
||||
print "<td width=20%><b>$text{'do_class'}</b></td> <td>",
|
||||
$pinfo[$i]->[1] ? $pinfo[$i]->[1] : $text{'do_none'},"</td> </tr>\n";
|
||||
print &ui_table_row($text{'do_pack'},
|
||||
$pinfo[$i]->[0]);
|
||||
|
||||
print "<tr> <td width=20%><b>$text{'do_ver'}</b></td> <td>$pinfo[$i]->[4]</td>\n";
|
||||
print "<td width=20%><b>$text{'do_vend'}</b></td> <td>$pinfo[$i]->[5]</td> </tr>\n";
|
||||
print &ui_table_row($text{'do_class'},
|
||||
$pinfo[$i]->[1] || $text{'do_none'});
|
||||
|
||||
print "<tr> <td width=20%><b>$text{'do_arch'}</b></td> <td>$pinfo[$i]->[3]</td>\n";
|
||||
print "<td width=20%><b>$text{'do_inst'}</b></td> <td>$pinfo[$i]->[6]</td> </tr>\n";
|
||||
print "</table></td></tr></table><p>\n";
|
||||
print &ui_table_row($text{'do_ver'},
|
||||
$pinfo[$i]->[4]);
|
||||
|
||||
print &ui_table_row($text{'do_vend'},
|
||||
$pinfo[$i]->[5]);
|
||||
|
||||
print &ui_table_row($text{'do_arch'},
|
||||
$pinfo[$i]->[3]);
|
||||
|
||||
print &ui_table_row($text{'do_inst'},
|
||||
$pinfo[$i]->[6]);
|
||||
|
||||
print &ui_table_end();
|
||||
}
|
||||
|
||||
&remote_finished();
|
||||
|
||||
@@ -22,10 +22,12 @@ else {
|
||||
|
||||
if ($in{source} == 0) {
|
||||
# installing from local file (or maybe directory)
|
||||
if (!$in{'local'})
|
||||
{ &install_error($text{'install_elocal'}); }
|
||||
if (!-r $in{'local'})
|
||||
{ &install_error(&text('install_elocal2', $in{'local'})); }
|
||||
if (!$in{'local'}) {
|
||||
&install_error($text{'install_elocal'});
|
||||
}
|
||||
if (!-r $in{'local'}) {
|
||||
&install_error(&text('install_elocal2', &html_escape($in{'local'})));
|
||||
}
|
||||
$source = $in{'local'};
|
||||
$pfile = $in{'local'};
|
||||
$filename = $in{'local'};
|
||||
@@ -177,7 +179,7 @@ print &ui_form_end([ [ undef, $text{'install_ok'} ] ]);
|
||||
|
||||
sub install_error
|
||||
{
|
||||
print "<b>$main::whatfailed : $_[0]</b> <p>\n";
|
||||
print "<b>$main::whatfailed : @{[&html_escape($_[0])]}</b> <p>\n";
|
||||
&ui_print_footer("", $text{'index_return'});
|
||||
exit;
|
||||
}
|
||||
|
||||
@@ -29,7 +29,7 @@ if (@match == 1) {
|
||||
&ui_print_header(undef, $text{'search_title'}, "", "search");
|
||||
if (@match) {
|
||||
@match = sort { lc($a->{'name'}) cmp lc($b->{'name'}) } @match;
|
||||
print "<b>",&text('search_match', "<tt>$s</tt>"),"</b><br>\n";
|
||||
print "<b>",&text('search_match', "<tt>".&html_escape($s)."</tt>"),"</b><br>\n";
|
||||
|
||||
print &ui_form_start("delete_packs.cgi", "post");
|
||||
print &ui_hidden("search", $in{'search'}),"\n";
|
||||
@@ -43,8 +43,8 @@ if (@match) {
|
||||
$text{'search_desc'} ], 100, 0, \@tds);
|
||||
foreach $i (@match) {
|
||||
local @cols;
|
||||
push(@cols, "<a href=\"edit_pack.cgi?search=$s&package=".
|
||||
&urlize($i->{'name'})."\">$i->{'name'}</a>");
|
||||
push(@cols, "<a href=\"edit_pack.cgi?search=".&urlize($s).
|
||||
"&package=".&urlize($i->{'name'})."\">$i->{'name'}</a>");
|
||||
$c = $i->{'class'};
|
||||
push(@cols, $i->{'class'} || $text{'search_none'});
|
||||
push(@cols, $i->{'desc'});
|
||||
@@ -62,7 +62,7 @@ if (@match) {
|
||||
print &ui_form_end();
|
||||
}
|
||||
else {
|
||||
print "<b>",&text('search_nomatch', "<tt>$s</tt>"),"</b>\n";
|
||||
print "<b>",&text('search_nomatch', "<tt>".&html_escape($s)."</tt>"),"</b>\n";
|
||||
}
|
||||
|
||||
&ui_print_footer("", $text{'index_return'});
|
||||
|
||||
@@ -16,10 +16,12 @@ else {
|
||||
|
||||
if ($in{source} == 0) {
|
||||
# installing from local file (or maybe directory)
|
||||
if (!$in{'local'})
|
||||
{ &download_error($text{'install_elocal'}); }
|
||||
if (!-r $in{'local'})
|
||||
{ &download_error(&text('install_elocal2', $in{'local'})); }
|
||||
if (!$in{'local'}) {
|
||||
&download_error($text{'install_elocal'});
|
||||
}
|
||||
if (!-r $in{'local'}) {
|
||||
&download_error(&text('install_elocal2', &html_escape($in{'local'})));
|
||||
}
|
||||
$source = $in{'local'};
|
||||
$pfile = $in{'local'};
|
||||
$need_unlink = 0;
|
||||
@@ -55,7 +57,9 @@ elsif ($in{source} == 2) {
|
||||
&ftp_download($host, $file, $pfile, \$error,
|
||||
\&progress_callback);
|
||||
}
|
||||
else { &download_error(&text('install_eurl', $in{'url'})); }
|
||||
else {
|
||||
&download_error(&text('install_eurl', &html_escape($in{'url'})));
|
||||
}
|
||||
&download_error($error) if ($error);
|
||||
$source = $in{'url'};
|
||||
$need_unlink = 1;
|
||||
|
||||
@@ -16,10 +16,12 @@ else {
|
||||
|
||||
if ($in{source} == 0) {
|
||||
# installing from local file (or maybe directory)
|
||||
if (!$in{'local'})
|
||||
{ &download_error($text{'install_elocal'}); }
|
||||
if (!-r $in{'local'})
|
||||
{ &download_error(&text('install_elocal2', $in{'local'})); }
|
||||
if (!$in{'local'}) {
|
||||
&download_error($text{'install_elocal'});
|
||||
}
|
||||
if (!-r $in{'local'}) {
|
||||
&download_error(&text('install_elocal2', &html_escape($in{'local'})));
|
||||
}
|
||||
$source = $in{'local'};
|
||||
$pfile = $in{'local'};
|
||||
$need_unlink = 0;
|
||||
@@ -55,7 +57,9 @@ elsif ($in{source} == 2) {
|
||||
&ftp_download($host, $file, $pfile, \$error,
|
||||
\&progress_callback);
|
||||
}
|
||||
else { &download_error(&text('install_eurl', $in{'url'})); }
|
||||
else {
|
||||
&download_error(&text('install_eurl', &html_escape($in{'url'})));
|
||||
}
|
||||
&download_error($error) if ($error);
|
||||
$source = $in{'url'};
|
||||
$need_unlink = 1;
|
||||
|
||||
@@ -389,7 +389,7 @@ print &ui_form_end([ [ undef, $text{'download_cont'} ],
|
||||
|
||||
sub install_error
|
||||
{
|
||||
print "<br><b>$main::whatfailed : $_[0]</b> <p>\n";
|
||||
print "<br><b>$main::whatfailed : @{[&html_escape($_[0])]}</b> <p>\n";
|
||||
&ui_print_footer($in{'return'},
|
||||
$in{'returndesc'} || $text{'index_return'});
|
||||
exit;
|
||||
|
||||
@@ -19,6 +19,10 @@ while(@ARGV) {
|
||||
shift(@ARGV);
|
||||
$createsig = 1;
|
||||
}
|
||||
elsif ($ARGV[0] eq "--key") {
|
||||
shift(@ARGV);
|
||||
$keyname = shift(@ARGV);
|
||||
}
|
||||
elsif ($ARGV[0] eq "--exclude") {
|
||||
shift(@ARGV);
|
||||
push(@exclude, shift(@ARGV));
|
||||
@@ -98,7 +102,8 @@ if ($file =~ /^(.*)\.gz$/i) {
|
||||
}
|
||||
if ($createsig) {
|
||||
system("rm -f $file-sig.asc");
|
||||
system("gpg --armor --output $file-sig.asc --detach-sig $file");
|
||||
system("gpg ".($keyname ? " --default-key $keyname" : "").
|
||||
" --armor --output $file-sig.asc --detach-sig $file");
|
||||
}
|
||||
|
||||
# read_file(file, &assoc, [&order], [lowercase])
|
||||
|
||||
111
cron/cron-lib.pl
111
cron/cron-lib.pl
@@ -925,7 +925,7 @@ $table .= &ui_columns_row(\@cols, [ "valign=top", "valign=top", "valign=top",
|
||||
"valign=top", "valign=top" ]);
|
||||
$table .= &ui_columns_end();
|
||||
$table .= $text{'edit_ctrl'};
|
||||
$rv .= &ui_table_row(undef, $table, $width);
|
||||
$rv .= &ui_table_row(undef, $table, $width, undef, ['data-schedule-tr']);
|
||||
return $rv;
|
||||
}
|
||||
|
||||
@@ -1209,63 +1209,6 @@ foreach $w (@wds) {
|
||||
$_[0]->{'weekdays'} = join(",", @wds);
|
||||
}
|
||||
|
||||
=head2 create_wrapper(wrapper-path, module, script)
|
||||
|
||||
Creates a wrapper script which calls a script in some module's directory
|
||||
with the proper webmin environment variables set. This should always be used
|
||||
when setting up a cron job, instead of attempting to run a command in the
|
||||
module directory directly.
|
||||
|
||||
The parameters are :
|
||||
|
||||
=item wrapper-path - Full path to the wrapper to create, like /etc/webmin/yourmodule/foo.pl
|
||||
|
||||
=item module - Module containing the real script to call.
|
||||
|
||||
=item script - Program within that module for the wrapper to run.
|
||||
|
||||
=cut
|
||||
sub create_wrapper
|
||||
{
|
||||
local $perl_path = &get_perl_path();
|
||||
&open_tempfile(CMD, ">$_[0]");
|
||||
&print_tempfile(CMD, <<EOF
|
||||
#!$perl_path
|
||||
open(CONF, "<$config_directory/miniserv.conf") || die "Failed to open $config_directory/miniserv.conf : \$!";
|
||||
while(<CONF>) {
|
||||
\$root = \$1 if (/^root=(.*)/);
|
||||
}
|
||||
close(CONF);
|
||||
\$root || die "No root= line found in $config_directory/miniserv.conf";
|
||||
\$ENV{'PERLLIB'} = "\$root";
|
||||
\$ENV{'WEBMIN_CONFIG'} = "$ENV{'WEBMIN_CONFIG'}";
|
||||
\$ENV{'WEBMIN_VAR'} = "$ENV{'WEBMIN_VAR'}";
|
||||
delete(\$ENV{'MINISERV_CONFIG'});
|
||||
EOF
|
||||
);
|
||||
if ($gconfig{'os_type'} eq 'windows') {
|
||||
# On windows, we need to chdir to the drive first, and use system
|
||||
&print_tempfile(CMD, "if (\$root =~ /^([a-z]:)/i) {\n");
|
||||
&print_tempfile(CMD, " chdir(\"\$1\");\n");
|
||||
&print_tempfile(CMD, " }\n");
|
||||
&print_tempfile(CMD, "chdir(\"\$root/$_[1]\");\n");
|
||||
&print_tempfile(CMD, "exit(system(\"\$root/$_[1]/$_[2]\", \@ARGV));\n");
|
||||
}
|
||||
else {
|
||||
# Can use exec on Unix systems
|
||||
if ($_[1]) {
|
||||
&print_tempfile(CMD, "chdir(\"\$root/$_[1]\");\n");
|
||||
&print_tempfile(CMD, "exec(\"\$root/$_[1]/$_[2]\", \@ARGV) || die \"Failed to run \$root/$_[1]/$_[2] : \$!\";\n");
|
||||
}
|
||||
else {
|
||||
&print_tempfile(CMD, "chdir(\"\$root\");\n");
|
||||
&print_tempfile(CMD, "exec(\"\$root/$_[2]\", \@ARGV) || die \"Failed to run \$root/$_[2] : \$!\";\n");
|
||||
}
|
||||
}
|
||||
&close_tempfile(CMD);
|
||||
chmod(0755, $_[0]);
|
||||
}
|
||||
|
||||
=head2 cron_file(&job)
|
||||
|
||||
Returns the file that a cron job is in, or will be in when it is created
|
||||
@@ -1285,34 +1228,53 @@ Returns a human-readable text string describing when a cron job is run.
|
||||
=cut
|
||||
sub when_text
|
||||
{
|
||||
local $pfx = $_[1] ? "uc" : "";
|
||||
if ($_[0]->{'interval'}) {
|
||||
return &text($pfx.'when_interval', $_[0]->{'interval'});
|
||||
my ($job, $ucfirst) = @_;
|
||||
my $pfx = $ucfirst ? "uc" : "";
|
||||
if ($job->{'interval'}) {
|
||||
return &text($pfx.'when_interval', $job->{'interval'});
|
||||
}
|
||||
elsif ($_[0]->{'special'}) {
|
||||
elsif ($job->{'special'}) {
|
||||
$pfx = $_[1] ? "" : "lc";
|
||||
return $text{$pfx.'edit_special_'.$_[0]->{'special'}};
|
||||
return $text{$pfx.'edit_special_'.$job->{'special'}};
|
||||
}
|
||||
elsif ($_[0]->{'boot'}) {
|
||||
elsif ($job->{'boot'}) {
|
||||
return &text($pfx.'when_boot');
|
||||
}
|
||||
elsif ($_[0]->{'mins'} eq '*' && $_[0]->{'hours'} eq '*' && $_[0]->{'days'} eq '*' && $_[0]->{'months'} eq '*' && $_[0]->{'weekdays'} eq '*') {
|
||||
elsif ($job->{'mins'} eq '*' && $job->{'hours'} eq '*' &&
|
||||
$job->{'days'} eq '*' && $job->{'months'} eq '*' &&
|
||||
$job->{'weekdays'} eq '*') {
|
||||
return $text{$pfx.'when_min'};
|
||||
}
|
||||
elsif ($_[0]->{'mins'} =~ /^\d+$/ && $_[0]->{'hours'} eq '*' && $_[0]->{'days'} eq '*' && $_[0]->{'months'} eq '*' && $_[0]->{'weekdays'} eq '*') {
|
||||
return &text($pfx.'when_hour', $_[0]->{'mins'});
|
||||
elsif ($job->{'mins'} =~ /^\d+$/ && $job->{'hours'} eq '*' &&
|
||||
$job->{'days'} eq '*' && $job->{'months'} eq '*' &&
|
||||
$job->{'weekdays'} eq '*') {
|
||||
return &text($pfx.'when_hour', $job->{'mins'});
|
||||
}
|
||||
elsif ($_[0]->{'mins'} =~ /^\d+$/ && $_[0]->{'hours'} =~ /^\d+$/ && $_[0]->{'days'} eq '*' && $_[0]->{'months'} eq '*' && $_[0]->{'weekdays'} eq '*') {
|
||||
return &text($pfx.'when_day', sprintf("%2.2d", $_[0]->{'mins'}), $_[0]->{'hours'});
|
||||
elsif ($job->{'mins'} =~ /^\d+$/ && $job->{'hours'} =~ /^\d+$/ &&
|
||||
$job->{'days'} eq '*' && $job->{'months'} eq '*' &&
|
||||
$job->{'weekdays'} eq '*') {
|
||||
return &text($pfx.'when_day',
|
||||
sprintf("%2.2d", $job->{'mins'}),
|
||||
sprintf("%2.2d", $job->{'hours'}));
|
||||
}
|
||||
elsif ($_[0]->{'mins'} =~ /^\d+$/ && $_[0]->{'hours'} =~ /^\d+$/ && $_[0]->{'days'} =~ /^\d+$/ && $_[0]->{'months'} eq '*' && $_[0]->{'weekdays'} eq '*') {
|
||||
return &text($pfx.'when_month', sprintf("%2.2d", $_[0]->{'mins'}), $_[0]->{'hours'}, $_[0]->{'days'});
|
||||
elsif ($job->{'mins'} =~ /^\d+$/ && $job->{'hours'} =~ /^\d+$/ &&
|
||||
$job->{'days'} =~ /^\d+$/ && $job->{'months'} eq '*' &&
|
||||
$job->{'weekdays'} eq '*') {
|
||||
return &text($pfx.'when_month',
|
||||
sprintf("%2.2d", $job->{'mins'}),
|
||||
sprintf("%2.2d", $job->{'hours'}),
|
||||
$job->{'days'});
|
||||
}
|
||||
elsif ($_[0]->{'mins'} =~ /^\d+$/ && $_[0]->{'hours'} =~ /^\d+$/ && $_[0]->{'days'} eq '*' && $_[0]->{'months'} eq '*' && $_[0]->{'weekdays'} =~ /^\d+$/) {
|
||||
return &text($pfx.'when_weekday', sprintf("%2.2d", $_[0]->{'mins'}), $_[0]->{'hours'}, $text{"day_".$_[0]->{'weekdays'}});
|
||||
elsif ($job->{'mins'} =~ /^\d+$/ && $job->{'hours'} =~ /^\d+$/ &&
|
||||
$job->{'days'} eq '*' && $job->{'months'} eq '*' &&
|
||||
$job->{'weekdays'} =~ /^\d+$/) {
|
||||
return &text($pfx.'when_weekday',
|
||||
sprintf("%2.2d", $job->{'mins'}),
|
||||
sprintf("%2.2d", $job->{'hours'}),
|
||||
$text{"day_".$job->{'weekdays'}});
|
||||
}
|
||||
else {
|
||||
return &text($pfx.'when_cron', join(" ", $_[0]->{'mins'}, $_[0]->{'hours'}, $_[0]->{'days'}, $_[0]->{'months'}, $_[0]->{'weekdays'}));
|
||||
return &text($pfx.'when_cron', join(" ", $job->{'mins'}, $job->{'hours'}, $job->{'days'}, $job->{'months'}, $job->{'weekdays'}));
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1641,6 +1603,7 @@ if ($config{'system_crontab'}) {
|
||||
}
|
||||
if ($config{'cronfiles_dir'}) {
|
||||
push(@files, glob(&translate_filename($config{'cronfiles_dir'})."/*"));
|
||||
@files = grep { -f $_ } @files;
|
||||
}
|
||||
return &unique(@files);
|
||||
}
|
||||
|
||||
@@ -108,7 +108,7 @@ foreach $u (@ulist) {
|
||||
$cmdidx = scalar(@cols);
|
||||
push(@cols, &ui_link("edit_env.cgi?idx=".$idx,
|
||||
"<i>$text{'index_env'}</i> ".
|
||||
"<tt>$job->{'name'} = $job->{'value'}</tt>") );
|
||||
"<tt>@{[&html_escape($job->{'name'})]} = @{[&html_escape($job->{'value'})]}</tt>") );
|
||||
$donelink = 1;
|
||||
}
|
||||
elsif (@exp && $access{'command'}) {
|
||||
@@ -156,7 +156,7 @@ foreach $u (@ulist) {
|
||||
|
||||
# Show comment
|
||||
if ($config{'show_comment'} || $userconfig{'show_comment'}) {
|
||||
push(@cols, $job->{'comment'});
|
||||
push(@cols, &html_escape($job->{'comment'}));
|
||||
}
|
||||
|
||||
# Show next run time
|
||||
|
||||
@@ -1,146 +0,0 @@
|
||||
index_when=Запустить время от времени
|
||||
index_comment=Описание
|
||||
index_none2=Нет заданий cron, к которым у вас есть доступ.
|
||||
index_none3=У вас пока нет работы cron.
|
||||
index_ecreate=Создайте новую переменную среды.
|
||||
index_manual=Ручное редактирование заданий cron.
|
||||
index_env=Переменная среды
|
||||
index_move=Переехать
|
||||
index_next=Следующий прогон
|
||||
index_nunknown=неизвестный
|
||||
index_run=Бег?
|
||||
index_ecmd=Команда $1 для управления пользовательскими настройками Cron не найдена. Может быть, Cron не установлен в этой системе?
|
||||
index_esingle=Файл $1, в котором перечислены задания Cron, не существует. Может быть, Cron не установлен в этой системе?
|
||||
index_ecrondir=Каталог заданий Cron $1 не существует. Может быть, конфигурация модуля неверна, или Cron не установлен?
|
||||
index_ecrondir_create=Попробуйте создать каталог заданий $1 ?
|
||||
index_delete=Удалить выбранные вакансии
|
||||
index_disable=Отключить выбранные вакансии
|
||||
index_enable=Включить выбранные вакансии
|
||||
index_esearch=По вашему запросу $1 не найдено ни одной вакансии.
|
||||
index_toomany2=Есть слишком много рабочих мест, чтобы показать. Используйте форму поиска выше, чтобы ограничить список.
|
||||
index_search=Найти подходящие вакансии Cron
|
||||
index_ok=Поиск
|
||||
index_searchres=Задания Cron, соответствующие $1 ..
|
||||
index_reset=Сбросить поиск.
|
||||
index_econfigcheck=Заданиями Cron нельзя управлять в вашей системе, так как недопустимая конфигурация модуля : $1
|
||||
index_stop=Остановить демона Крон
|
||||
index_stopdesc=Остановите фоновый серверный процесс <tt>crond</tt>, выполняющий запланированные задания cron. Это предотвратит выполнение команд в указанное время.
|
||||
index_start=Запустить крон-демон
|
||||
index_startdesc=Запустите фоновый серверный процесс <tt>crond</tt>, который запускает запланированные задания cron. <font color=red><b>Это необходимо для выполнения команд в указанное время.</font></font>
|
||||
index_boot=Запустить загрузку Cron Daemon?
|
||||
index_bootdesc=Измените этот параметр, чтобы включить или отключить запуск демона запланированных заданий cron во время загрузки системы.
|
||||
|
||||
edit_next=Время следующего запуска
|
||||
edit_comment=Описание
|
||||
edit_range=Диапазон дат для выполнения
|
||||
edit_saverun=Сохранить и запустить сейчас
|
||||
edit_clone=Клон Работа
|
||||
edit_special1=Простой график ..
|
||||
edit_special0=Время и даты выбраны ниже ..
|
||||
edit_special_hourly=почасовой
|
||||
edit_special_daily=Ежедневно (в полночь)
|
||||
edit_special_weekly=Еженедельно (в воскресенье)
|
||||
edit_special_monthly=Ежемесячно (1-го числа)
|
||||
edit_special_yearly=Ежегодно (1 января)
|
||||
edit_special_reboot=Когда система загружается
|
||||
lcedit_special_hourly=почасовой
|
||||
lcedit_special_daily=ежедневно (в полночь)
|
||||
lcedit_special_weekly=еженедельно (в воскресенье)
|
||||
lcedit_special_monthly=ежемесячно (1-го числа)
|
||||
lcedit_special_yearly=ежегодно (1 января)
|
||||
lcedit_special_reboot=когда система загружается
|
||||
|
||||
save_ecannot2=Вам не разрешено создавать рабочие места cron
|
||||
save_eidx=Задание Cron было успешно сохранено, но не может быть запущено, поскольку оно не было найдено!
|
||||
|
||||
env_title1=Изменить переменную среды
|
||||
env_title2=Создать переменную среды
|
||||
env_user=Для пользователя
|
||||
env_active=Активный?
|
||||
env_details=Детали переменных среды
|
||||
env_err=Не удалось сохранить переменную среды
|
||||
env_order=Примечание. Этот параметр переменной среды будет применяться только к заданиям Cron после него в списке заданий на главной странице модуля.
|
||||
env_where=Добавить переменную среды
|
||||
env_where2=Переместить переменную среды
|
||||
env_top=Перед всеми заданиями Cron для пользователя
|
||||
env_bot=После всех работ Cron
|
||||
env_leave=Текущая позиция
|
||||
|
||||
exec_cmdbg=Выполнение команды $1 в качестве фонового процесса.
|
||||
|
||||
acl_command=Можно просматривать и редактировать команды Cron?
|
||||
acl_create=Можно ли создавать рабочие места в Cron?
|
||||
acl_delete=Можно ли удалить задания Cron?
|
||||
acl_move=Может перенести работу Cron?
|
||||
acl_kill=Может прекратить работу Cron?
|
||||
acl_hourly=Ограничить количество рабочих мест максимум до почасовой?
|
||||
acl_hourlydef=Как установлено в модуле Config
|
||||
acl_stop=Может ли остановить и запустить демон Cron?
|
||||
|
||||
log_kill=Прекращено задание Cron для $1
|
||||
log_kill_l=Прекращено задание Cron "$2" для $1
|
||||
log_env_create=Создана переменная среды для $1
|
||||
log_env_modify=Измененная переменная среды для $1
|
||||
log_env_delete=Удаленная переменная среды для $1
|
||||
log_move=Задание Cron перемещено для $1
|
||||
log_crons_delete=Удалено $1 заданий Cron
|
||||
log_crons_disable=Отключено $1 заданий Cron
|
||||
log_crons_enable=Включено $1 заданий Cron
|
||||
log_stop=Остановленный демон cron
|
||||
log_start=Запущен демон cron
|
||||
log_bootup=Включен демон cron при загрузке
|
||||
log_bootdown=Отключенный демон cron при загрузке
|
||||
|
||||
ecopy=Обнаружена ошибка в новой конфигурации Cron: $1 $2
|
||||
|
||||
when_min=каждую минуту
|
||||
when_hour=каждый час в $1 за час
|
||||
when_day=каждый день на $2:$1
|
||||
when_month=в день $3 каждый месяц в $2:$1
|
||||
when_weekday=каждый $3 на $2:$1
|
||||
when_cron=в момент времени $1
|
||||
when_interval=каждые $1 секунды
|
||||
when_boot=во время запуска
|
||||
|
||||
ucwhen_min=Каждую минуту
|
||||
ucwhen_hour=Каждый час в $1 за час
|
||||
ucwhen_day=Каждый день в $2:$1
|
||||
ucwhen_month=В день $3 каждый месяц в $2:$1
|
||||
ucwhen_weekday=Каждый $3 на $2:$1
|
||||
ucwhen_cron=Время cron $1
|
||||
ucwhen_interval=Каждые $1 секунды
|
||||
ucwhen_boot=Во время запуска
|
||||
|
||||
move_err=Не удалось переместить работу Cron
|
||||
move_etype=Эта работа не может быть перемещена
|
||||
|
||||
kill_err=Не удалось завершить работу Cron
|
||||
kill_ecannot=Вы не можете прекратить эту работу
|
||||
kill_egone=Больше не работает
|
||||
kill_ekill=Убить не удалось : $1
|
||||
kill_title=Завершить работу Cron
|
||||
kill_rusure=Вы уверены, что хотите завершить процесс $1 с PID $2 ?
|
||||
kill_rusure2=Вы уверены, что хотите завершить процесс $1 с PID $2 и всеми его подпроцессами?
|
||||
kill_ok=Да, прекратить это
|
||||
|
||||
range_all=Беги на любую дату
|
||||
range_start=Запускать только с $1
|
||||
range_end=в $1
|
||||
range_estart=Отсутствует или неверная дата начала в диапазоне для запуска
|
||||
range_eend=Отсутствует или недействительная дата окончания в диапазоне для запуска
|
||||
|
||||
delete_err=Не удалось удалить задания Cron
|
||||
delete_enone=Не выбрано, ничего не выбрано
|
||||
|
||||
manual_title=Редактировать Cron Jobs вручную
|
||||
manual_edit=Cron файл для редактирования:
|
||||
manual_ok=редактировать
|
||||
manual_editing=Используйте текстовое поле ниже для редактирования заданий Cron в $1. Будьте осторожны, так как Webmin не будет выполнять проверку!
|
||||
manual_efile=Выбранный файл недействителен!
|
||||
manual_ecannot=Вы не можете вручную редактировать задания cron
|
||||
|
||||
stop_err=Не удалось остановить демон
|
||||
start_err=Не удалось запустить демон
|
||||
stop_ecannot=Вам не разрешено останавливать демона
|
||||
start_ecannot=Вам не разрешено запускать демон
|
||||
bootup_ecannot=Вам не разрешено включать демон при загрузке
|
||||
@@ -74,12 +74,12 @@ open(FILE, "<".$_[0]);
|
||||
while($line = <FILE>) {
|
||||
# strip comments
|
||||
$line =~ s/\r|\n//g;
|
||||
$line =~ s/([^\\])\\"/$1\\042/g; # convert escaped quotes to \042
|
||||
$line =~ s/^([^"#]*)#.*$/$1/g;
|
||||
$line =~ s/^([^"]*)\/\/.*$/$1/g;
|
||||
$line =~ s/^([^"]*)\s+#.*$/$1/g; # remove stuff after #, unless
|
||||
$line =~ s/^(.*".*".*)\s+#.*$/$1/g; # it is inside quotes
|
||||
$line =~ s/\\\\/\\134/g; # convert \\ into \134
|
||||
$line =~ s/([^\\])\\"/$1\\042/g; # convert escaped quotes to \042
|
||||
while(1) {
|
||||
if (!$cmode && $line =~ /\/\*/ && $line !~ /\".*\/\*.*\"/) {
|
||||
# start of a C-style comment
|
||||
|
||||
@@ -216,6 +216,11 @@ return wantarray ? @rv : $rv[0];
|
||||
sub save_directive
|
||||
{
|
||||
local ($conf, $name, $value, $sname, $svalue) = @_;
|
||||
$newconf = [ grep { $_->{'file'} !~ /^\/usr\/share\/dovecot/ &&
|
||||
$_->{'file'} !~ /^\/opt/ } @$conf ];
|
||||
if (@$newconf) {
|
||||
$conf = $newconf;
|
||||
}
|
||||
local $dir;
|
||||
if (ref($name)) {
|
||||
# Old directive given
|
||||
@@ -577,5 +582,4 @@ else {
|
||||
}
|
||||
|
||||
1;
|
||||
r
|
||||
|
||||
|
||||
@@ -1,4 +1,3 @@
|
||||
line2=System configuration,11
|
||||
exports_file=Exported filesystems file,0
|
||||
apply_cmd=Command to apply configuration,3,None
|
||||
restart_command=Command to restart export server,0
|
||||
|
||||
@@ -51,9 +51,11 @@ print &ui_table_row($text{'jail_ignoreip'},
|
||||
my $backend = &find_value("backend", $jail);
|
||||
print &ui_table_row($text{'jail_backend'},
|
||||
&ui_select("backend", $backend || "auto",
|
||||
[ [ "auto", $text{'jail_auto'} ],
|
||||
[ "gamin", $text{'jail_gamin'} ],
|
||||
[ "polling", $text{'jail_polling'} ] ]));
|
||||
[ [ "auto", $text{'jail_auto'} ],
|
||||
[ "systemd", $text{'jail_systemd'} ],
|
||||
[ "polling", $text{'jail_polling'} ],
|
||||
[ "gamin", $text{'jail_gamin'} ],
|
||||
[ "pyinotify", $text{'jail_pyinotify'} ] ]));
|
||||
|
||||
# Email destination
|
||||
my $destemail = &find_value("destemail", $jail);
|
||||
|
||||
@@ -566,4 +566,15 @@ if ($?) {
|
||||
}
|
||||
}
|
||||
|
||||
# Unblock all IPs in given jail
|
||||
sub unblock_jail
|
||||
{
|
||||
my ($jail) = @_;
|
||||
my $cmd = "$config{'client_cmd'} reload --unban ".quotemeta($jail)." 2>&1 </dev/null";
|
||||
my $out = &backquote_logged($cmd);
|
||||
if ($?) {
|
||||
&error(&text('status_err_unbanjail', &html_escape($jail)) . " : $out");
|
||||
}
|
||||
}
|
||||
|
||||
1;
|
||||
|
||||
72
fail2ban/jail_blocks.cgi
Executable file
72
fail2ban/jail_blocks.cgi
Executable file
@@ -0,0 +1,72 @@
|
||||
#!/usr/local/bin/perl
|
||||
# Show a status of all active jails
|
||||
|
||||
use strict;
|
||||
use warnings;
|
||||
no warnings 'redefine';
|
||||
no warnings 'uninitialized';
|
||||
require './fail2ban-lib.pl';
|
||||
our (%in, %text, %config);
|
||||
|
||||
&ReadParse();
|
||||
|
||||
my $jail = $in{'jail'};
|
||||
my $out = &backquote_logged("$config{'client_cmd'} status 2>&1 </dev/null");
|
||||
my ($jail_list) = $out =~ /jail\s+list:\s*(.*)/im;
|
||||
my @jails = split(/,\s*/, $jail_list);
|
||||
&indexof($jail, @jails) > -1 || error($text{'status_err_unknownjail'});
|
||||
|
||||
&ui_print_header("$jail", $text{'status_title3'}, "");
|
||||
my $fh = 'jailinfo';
|
||||
my @jail_blocks;
|
||||
&open_execute_command($fh, "$config{'client_cmd'} get @{[quotemeta($jail)]} banip --with-time 2>&1 </dev/null", 1);
|
||||
while(<$fh>) {
|
||||
if (/^(?<ip>.*?)\s+(?<start>.*?\s+.*?)\s+.*?\s+.*?\s+=\s+(?<end>.*)$/) {
|
||||
my $ip = $+{ip};
|
||||
my $start = $+{start};
|
||||
my $end = $+{end};
|
||||
if ($ip && $start && $end) {
|
||||
push(@jail_blocks, [$ip, $start, $end]);
|
||||
}
|
||||
}
|
||||
}
|
||||
close($fh);
|
||||
|
||||
if (@jail_blocks) {
|
||||
my $popts = \%in;
|
||||
$popts->{'paginations'}->{'form'} = { 'jail' => $jail };
|
||||
my $pagination = &ui_paginations(\@jail_blocks, $popts);
|
||||
my @links = ( &select_all_link("ip"),
|
||||
&select_invert_link("ip"));
|
||||
print $pagination->{'search'}->{'form-data'};
|
||||
print &ui_form_start("unblock_jailed_ip.cgi", "post");
|
||||
print &ui_links_row(\@links);
|
||||
print &ui_columns_start([ "",
|
||||
$text{'status_head_blocks_ip'},
|
||||
$text{'status_head_blocks_stime'},
|
||||
$text{'status_head_blocks_etime'} ]);
|
||||
if (@jail_blocks) {
|
||||
foreach my $r (@jail_blocks) {
|
||||
print &ui_checked_columns_row($r, [ 'width=5' ], "ip", $r->[0]);
|
||||
}
|
||||
}
|
||||
else {
|
||||
print $pagination->{'search'}->{'no-results'};
|
||||
}
|
||||
print &ui_columns_end();
|
||||
print $pagination->{'paginator'}->{'form-data'};
|
||||
print $pagination->{'paginator'}->{'form-scripts'};
|
||||
print &ui_hidden("jail", $jail);
|
||||
print &ui_hidden("return", 1);
|
||||
print $pagination->{'form'};
|
||||
print &ui_links_row(\@links);
|
||||
print &ui_form_end([ [ undef, $text{'status_jail_unblock_ips'} ] ]);
|
||||
print $pagination->{'search'}->{'form'};
|
||||
print $pagination->{'paginator'}->{'form'};
|
||||
}
|
||||
else {
|
||||
print &text('status_jail_noactiveips', $jail);
|
||||
}
|
||||
|
||||
&ui_print_footer("list_status.cgi", $text{'status_return'},
|
||||
"", $text{'index_return'});
|
||||
@@ -171,21 +171,30 @@ manual_err=Konfiglêer kon nie gewysig word nie
|
||||
manual_edata=Geen config-lêerinhoud ingevoer nie
|
||||
|
||||
status_title=Tronkstatus en aksies
|
||||
status_title2=Tronkstatus
|
||||
status_head_jail_name=Tronk naam
|
||||
status_title3=Tronkblokke
|
||||
status_return=tronke status
|
||||
status_head_jail_blocks=Tronk blokke
|
||||
status_head_currently_failed=Tans misluk
|
||||
status_head_total_failed=Totaal het misluk
|
||||
status_head_file_list=Lêer lys
|
||||
status_head_currently_banned=Tans verban
|
||||
status_head_total_banned=Totaal verban
|
||||
status_head_banned_ip_list=Verbode IP-lys
|
||||
status_head_blocks_ip=IP
|
||||
status_head_blocks_stime=Begin Tyd
|
||||
status_head_blocks_etime=Eind tyd
|
||||
status_rules_plus_more=+ $1 meer
|
||||
status_jail_unblock_ip=Verwyder $1 van verbode lys
|
||||
status_jail_unblock=Deblokkeer alle IP's vir geselekteerde tronke
|
||||
status_jail_unblock_ips=Deblokkeer geselekteerde IP
|
||||
status_jail_noactive=Daar is nog geen aktiewe tronke geaktiveer nie.
|
||||
status_jail_noactiveips=Daar is geen geblokkeerde inskrywings in die tronk <tt>$1</tt> gevind nie.
|
||||
status_err_set=Kon nie stel handeling nie
|
||||
status_err_unblock=Kon nie handeling deblokkeer nie
|
||||
status_err_nojail=Geen tronke is gekies nie
|
||||
status_err_noips=Geen IP is gekies nie
|
||||
status_err_unban=Kan nie $1 IP-adres ontban nie
|
||||
status_err_unbanjail=Kan nie $1 tronk de-ban nie
|
||||
status_err_unknownjail=Onbekende tronk
|
||||
|
||||
syslog_logtarget=Fail2Ban aksie log
|
||||
|
||||
@@ -171,21 +171,30 @@ manual_err=فشل في تحرير ملف التكوين
|
||||
manual_edata=لم يتم إدخال محتويات ملف التكوين
|
||||
|
||||
status_title=حالة السجون والإجراءات
|
||||
status_title2=حالة السجون
|
||||
status_head_jail_name=اسم السجن
|
||||
status_title3=كتل السجن
|
||||
status_return=حالة السجون
|
||||
status_head_jail_blocks=كتل السجن
|
||||
status_head_currently_failed=فشل حاليا
|
||||
status_head_total_failed=مجموع فشل
|
||||
status_head_file_list=قائمة الملفات
|
||||
status_head_currently_banned=محظور حاليا
|
||||
status_head_total_banned=مجموع المحظورة
|
||||
status_head_banned_ip_list=قائمة IP المحظورة
|
||||
status_head_blocks_ip=IP
|
||||
status_head_blocks_stime=وقت البدء
|
||||
status_head_blocks_etime=وقت النهاية
|
||||
status_rules_plus_more=+$1 آخرين
|
||||
status_jail_unblock_ip=قم بإزالة$1 من القائمة المحظورة
|
||||
status_jail_unblock=قم بإلغاء حظر جميع عناوين IP للسجون المختارة
|
||||
status_jail_unblock_ips=إلغاء حظر IP المحدد
|
||||
status_jail_noactive=لا توجد سجون نشطة ممكّنة حتى الآن.
|
||||
status_jail_noactiveips=لا توجد إدخالات محظورة في السجن تم العثور على <tt>$1</tt>.
|
||||
status_err_set=فشل تعيين الإجراء
|
||||
status_err_unblock=فشل في إلغاء حظر الإجراء
|
||||
status_err_nojail=لم يتم اختيار أي سجون
|
||||
status_err_noips=لم يتم تحديد IP
|
||||
status_err_unban=لا يمكن إلغاء حظر عنوان IP لـ$1
|
||||
status_err_unbanjail=لا يمكن إلغاء حظر سجن$1
|
||||
status_err_unknownjail=سجن مجهول
|
||||
|
||||
syslog_logtarget=سجل العمل Fail2Ban
|
||||
|
||||
@@ -171,21 +171,30 @@ manual_err=Не атрымалася рэдагаваць канфігурацы
|
||||
manual_edata=Не ўводзіцца змесціва канфігурацыйнага файла
|
||||
|
||||
status_title=Статус і дзеянні турмы
|
||||
status_title2=Статус турмы
|
||||
status_head_jail_name=Назва турмы
|
||||
status_title3=Турэмныя блокі
|
||||
status_return=статус турмы
|
||||
status_head_jail_blocks=Турэмныя блокі
|
||||
status_head_currently_failed=У цяперашні час не атрымалася
|
||||
status_head_total_failed=Усяго не атрымалася
|
||||
status_head_file_list=Спіс файлаў
|
||||
status_head_currently_banned=У цяперашні час забаронены
|
||||
status_head_total_banned=Поўная забарона
|
||||
status_head_banned_ip_list=Спіс забароненых IP
|
||||
status_head_blocks_ip=IP
|
||||
status_head_blocks_stime=Час пачатку
|
||||
status_head_blocks_etime=Час заканчэння
|
||||
status_rules_plus_more=+ яшчэ $1
|
||||
status_jail_unblock_ip=Выдаліць $1 са спісу забароненых
|
||||
status_jail_unblock=Разблакіраваць усе IP-адрасы для выбраных турмаў
|
||||
status_jail_unblock_ips=Разблакіраваць выбраны IP
|
||||
status_jail_noactive=Пакуль няма актыўных турмаў.
|
||||
status_jail_noactiveips=Заблакіраваных запісаў у турме <tt>$1</tt> не знойдзена.
|
||||
status_err_set=Не атрымалася ўсталяваць дзеянне
|
||||
status_err_unblock=Не ўдалося разблакіраваць дзеянне
|
||||
status_err_nojail=СІЗА не выбрана
|
||||
status_err_noips=IP не выбраны
|
||||
status_err_unban=Немагчыма разбаніць $1 IP-адрас
|
||||
status_err_unbanjail=Немагчыма зняць бан з турмы $1
|
||||
status_err_unknownjail=Невядомая турма
|
||||
|
||||
syslog_logtarget=Журнал дзеянняў Fail2Ban
|
||||
|
||||
@@ -171,21 +171,30 @@ manual_err=Конфигурационният файл не можа да се
|
||||
manual_edata=Не е въведено съдържание на конфигурационен файл
|
||||
|
||||
status_title=Състояние и действия на затворите
|
||||
status_title2=Статус на затворите
|
||||
status_head_jail_name=Име на затвора
|
||||
status_title3=Затворнически блокове
|
||||
status_return=състояние на затворите
|
||||
status_head_jail_blocks=Затворнически блокове
|
||||
status_head_currently_failed=В момента неуспешно
|
||||
status_head_total_failed=Общо неуспешно
|
||||
status_head_file_list=Списък с файлове
|
||||
status_head_currently_banned=В момента е забранено
|
||||
status_head_total_banned=Тотално забранено
|
||||
status_head_banned_ip_list=Списък с забранени IP адреси
|
||||
status_head_blocks_ip=IP
|
||||
status_head_blocks_stime=Начален час
|
||||
status_head_blocks_etime=Крайно време
|
||||
status_rules_plus_more=+ още $1
|
||||
status_jail_unblock_ip=Премахнете $1 от списъка с забранени
|
||||
status_jail_unblock=Деблокирайте всички IP адреси за избрани затвори
|
||||
status_jail_unblock_ips=Деблокиране на избрания IP
|
||||
status_jail_noactive=Все още няма активирани активни затвори.
|
||||
status_jail_noactiveips=Няма намерени блокирани записи в затвора <tt>$1</tt>.
|
||||
status_err_set=Неуспешно зададено действие
|
||||
status_err_unblock=Деблокирането на действието не бе успешно
|
||||
status_err_nojail=Не са избрани затвори
|
||||
status_err_noips=Не е избрано IP
|
||||
status_err_unban=Не може да се отмени забрана на $1 IP адрес
|
||||
status_err_unbanjail=Не може да се отмени забраната на $1 затвор
|
||||
status_err_unknownjail=Неизвестен затвор
|
||||
|
||||
syslog_logtarget=Fail2Ban дневник на действията
|
||||
|
||||
@@ -3,20 +3,28 @@ log_update_action=Acció modificada $1
|
||||
log_update_jail=Presó modificada $1
|
||||
|
||||
status_title=Estat i accions de les presons
|
||||
status_title2=Estat de les presons
|
||||
status_head_jail_name=Nom de la presó
|
||||
|
||||
status_title3=Blocs de la presó
|
||||
status_return=estat de presons
|
||||
status_head_jail_blocks=Blocs de presó
|
||||
status_head_currently_failed=Actualment fallat
|
||||
status_head_total_failed=Total fallit
|
||||
status_head_file_list=Llista de fitxers
|
||||
status_head_currently_banned=Prohibit actualment
|
||||
status_head_total_banned=Total prohibit
|
||||
status_head_banned_ip_list=Llista d'IP prohibides
|
||||
status_head_blocks_ip=IP
|
||||
status_head_blocks_stime=L'hora d'inici
|
||||
status_head_blocks_etime=Fi del temps
|
||||
status_rules_plus_more=+ $1 més
|
||||
status_jail_unblock_ip=Elimina $1 de la llista prohibida
|
||||
status_jail_unblock=Desbloquegeu totes les IP de les presons seleccionades
|
||||
status_jail_unblock_ips=Desbloqueja la IP seleccionada
|
||||
status_jail_noactive=Encara no hi ha presons actives activades.
|
||||
status_jail_noactiveips=No s'ha trobat cap entrada bloquejada a la presó <tt>$1</tt>.
|
||||
status_err_set=No s'ha pogut establir l'acció
|
||||
status_err_unblock=No s'ha pogut desbloquejar l'acció
|
||||
status_err_nojail=No s'ha seleccionat cap presó
|
||||
status_err_noips=No s'ha seleccionat cap IP
|
||||
status_err_unban=No es pot desbloquejar l'adreça IP de $1
|
||||
status_err_unbanjail=No es pot desactivar la presó $1
|
||||
status_err_unknownjail=Presó desconeguda
|
||||
|
||||
@@ -171,21 +171,30 @@ manual_err=Nepodařilo se upravit konfigurační soubor
|
||||
manual_edata=Nebyl zadán žádný obsah konfiguračního souboru
|
||||
|
||||
status_title=Stav vězení a akce
|
||||
status_title2=Stav vězení
|
||||
status_head_jail_name=Jméno vězení
|
||||
status_title3=Vězeňské bloky
|
||||
status_return=stav věznic
|
||||
status_head_jail_blocks=Vězeňské bloky
|
||||
status_head_currently_failed=Aktuálně neúspěšné
|
||||
status_head_total_failed=Celkem se nezdařilo
|
||||
status_head_file_list=Seznam souborů
|
||||
status_head_currently_banned=Aktuálně zakázáno
|
||||
status_head_total_banned=Úplně zakázáno
|
||||
status_head_banned_ip_list=Seznam zakázaných IP adres
|
||||
status_head_blocks_ip=IP
|
||||
status_head_blocks_stime=Doba spuštění
|
||||
status_head_blocks_etime=Čas ukončení
|
||||
status_rules_plus_more=+ $1 dalšího
|
||||
status_jail_unblock_ip=Odebrat $1 ze seznamu zakázaných
|
||||
status_jail_unblock=Odblokujte všechny IP adresy pro vybraná vězení
|
||||
status_jail_unblock_ips=Odblokovat vybranou IP
|
||||
status_jail_noactive=Zatím nejsou povoleny žádné aktivní vězení.
|
||||
status_jail_noactiveips=Ve vězení <tt>$1</tt> nebyly nalezeny žádné blokované záznamy.
|
||||
status_err_set=Akce nastavení se nezdařila
|
||||
status_err_unblock=Akci se nepodařilo odblokovat
|
||||
status_err_nojail=Nebyla vybrána žádná vězení
|
||||
status_err_noips=Nebyla vybrána žádná IP
|
||||
status_err_unban=Nelze zrušit zákaz $1 IP adresy
|
||||
status_err_unbanjail=Nelze zrušit zákaz $1 vězení
|
||||
status_err_unknownjail=Neznámé vězení
|
||||
|
||||
syslog_logtarget=Protokol akcí Fail2Ban
|
||||
|
||||
@@ -171,21 +171,30 @@ manual_err=Kunne ikke redigere konfigurationsfilen
|
||||
manual_edata=Intet indtastet indhold af konfigurationsfil
|
||||
|
||||
status_title=Fængselsstatus og handlinger
|
||||
status_title2=Fængselsstatus
|
||||
status_head_jail_name=Navn på fængsel
|
||||
status_title3=Fængselsblokke
|
||||
status_return=fængselsstatus
|
||||
status_head_jail_blocks=Fængselsblokeringer
|
||||
status_head_currently_failed=I øjeblikket mislykkedes
|
||||
status_head_total_failed=Total mislykkedes
|
||||
status_head_file_list=Filliste
|
||||
status_head_currently_banned=I øjeblikket forbudt
|
||||
status_head_total_banned=Totalt forbudt
|
||||
status_head_banned_ip_list=Liste over forbudte IP-adresser
|
||||
status_head_blocks_ip=IP
|
||||
status_head_blocks_stime=Starttidspunkt
|
||||
status_head_blocks_etime=Sluttidspunkt
|
||||
status_rules_plus_more=+ $1 mere
|
||||
status_jail_unblock_ip=Fjern $1 fra forbudt liste
|
||||
status_jail_unblock=Fjern blokering af alle IP'er for udvalgte fængsler
|
||||
status_jail_unblock_ips=Fjern blokering af valgt IP
|
||||
status_jail_noactive=Der er endnu ingen aktive jails aktiveret.
|
||||
status_jail_noactiveips=Der er ingen blokerede poster i fængslet <tt>$1</tt> fundet.
|
||||
status_err_set=Handlingen kunne ikke indstilles
|
||||
status_err_unblock=Kunne ikke fjerne blokeringen af handlingen
|
||||
status_err_nojail=Ingen fængsler er blevet valgt
|
||||
status_err_noips=Der er ikke valgt nogen IP
|
||||
status_err_unban=Kan ikke ophæve udelukkelse af $1 IP-adresse
|
||||
status_err_unbanjail=Kan ikke ophæve ban $1 fængsel
|
||||
status_err_unknownjail=Ukendt fængsel
|
||||
|
||||
syslog_logtarget=Fail2Ban handling log
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user