Compare commits

..

234 Commits
2.100 ... 2.103

Author SHA1 Message Date
Jamie Cameron
4d4468e907 Prevent password change when it makes no sense https://github.com/virtualmin/virtualmin-gpl/issues/648 2023-10-07 08:51:50 -07:00
Jamie Cameron
fc5a638e24 Merge branch 'master' of github.com:webmin/webmin 2023-10-05 21:22:33 -07:00
Jamie Cameron
cf6a14b7a6 Version bump 2023-10-05 21:22:19 -07:00
Ilia Ross
6ddde41728 Revert "Wait a bit longer for DNS propogation"
This reverts commit 45845b8ca6.
2023-10-04 13:01:43 +03:00
Ilia Ross
5114308d0d Fix to never double escape HTML in display 2023-10-04 00:51:49 +03:00
Ilia Ross
2c325b1ee4 Add support for numbered list hotkey 2023-10-03 19:04:29 +03:00
Ilia Ross
e087bb718c Add support for bullet list hotkey 2023-10-03 18:55:38 +03:00
Ilia Ross
51bdd0d07e Fix to remove old Webmin repo in sources.list file
https://github.com/webmin/webmin/issues/1969#issuecomment-1742141240
2023-10-02 21:14:18 +03:00
Jamie Cameron
74fec8b171 Merge pull request #2013 from webmin/dev/theme-switcher
Add theme switcher using hotkeys
2023-10-01 15:21:47 -07:00
Ilia Ross
9d360f1c24 Fix not to enable on error_stack option 2023-10-01 21:34:50 +03:00
Jamie Cameron
148743894f The rm command should always be available 2023-10-01 11:15:23 -07:00
Ilia Ross
6b935f980c Fix to use ACL modify_user to change theme
https://github.com/webmin/webmin/pull/2013#discussion_r1342020745
2023-10-01 14:36:56 +03:00
Jamie Cameron
e751836684 Revert "Fix to use full path [build]"
This reverts commit b9449c213b.
2023-09-30 21:40:53 -07:00
Ilia Ross
b9449c213b Fix to use full path [build] 2023-10-01 03:04:27 +03:00
Jamie Cameron
a3c9770d4f Merge branch 'master' of github.com:webmin/webmin 2023-09-29 20:43:28 -07:00
Jamie Cameron
3c971dacc1 Copy allow-transfer directives up from global, because they aren't merged 2023-09-29 20:40:31 -07:00
Ilia Ross
ac1a73c154 Update CHANGELOG.md for 2.103 2023-09-29 17:23:52 +03:00
Ilia Ross
3a099fabec Fix to consider stand alone option as well 2023-09-29 15:32:07 +03:00
Ilia Ross
9a1e869a82 Fix to only enable theme switcher in debug mode 2023-09-29 12:56:23 +03:00
Ilia Ross
5c54c614e3 Fix comments to update hotkeys 2023-09-29 03:40:32 +03:00
Ilia Ross
cbdc843500 Add theme switcher using hotkeys 2023-09-29 03:24:14 +03:00
Ilia Ross
82fbca20e4 Merge branch 'master' of github.com:webmin/webmin 2023-09-29 00:22:13 +03:00
Ilia Ross
ef7dbb1f77 Fix to support hiding dot-files in File Manager 2023-09-29 00:21:50 +03:00
Jamie Cameron
4f15106fa9 Merge branch 'master' of github.com:webmin/webmin 2023-09-27 16:45:11 -07:00
Jamie Cameron
96bfc34247 Clean up code to set per-domain allow-transfer and also-notify 2023-09-27 16:36:21 -07:00
Ilia Ross
0289ceed5b Fix indent [build] 2023-09-26 21:24:12 +03:00
Ilia Ross
4e54ce3f85 Fix to correctly cache cloned locale with military time 2023-09-26 21:22:44 +03:00
Ilia Ross
73b2322597 Add English (United States) (military time) locale
https://github.com/webmin/authentic-theme/issues/1676#issuecomment-1735466651
2023-09-26 19:19:21 +03:00
Ilia Ross
05c7b6c3a3 Fix locale as sv isn't se
https://github.com/webmin/authentic-theme/issues/1676
2023-09-26 15:22:57 +03:00
Jamie Cameron
1bb70effea Use proper page flipper API 2023-09-25 20:04:11 -07:00
Jamie Cameron
590c27d202 Make option a bit nicer 2023-09-25 19:58:09 -07:00
Jamie Cameron
846dff2636 Clean up page flipper 2023-09-25 19:56:26 -07:00
Ilia Ross
b339c76fc7 Fix to always escape & by default 2023-09-25 19:19:52 +03:00
Ilia Ross
fbabecbe9e Fix support for new ZSTD and XZ formats 2023-09-24 22:12:59 +03:00
Ilia Ross
7706c0795e Add XZ and ZSTD compression ; add plain TAR archives 2023-09-24 21:21:08 +03:00
Ilia Ross
4be368c523 Fix elements overflow in shell module [build]
https://forum.virtualmin.com/t/webmin-command-shell-module-oddity-the-text-input-field-extends-past-screens-end/122741/9?u=ilia
2023-09-23 13:08:18 +03:00
Ilia Ross
b268c1bb66 Fix to import missing $bind_version vars 2023-09-20 19:33:41 +03:00
Jamie Cameron
b2f18fb784 dnssec-enabled has been obsoleted in new version https://github.com/virtualmin/virtualmin-gpl/issues/645 2023-09-19 21:13:38 -07:00
Jamie Cameron
34e3b4c027 Fix core vs cores https://github.com/webmin/webmin/issues/2008 2023-09-19 16:15:30 -07:00
Jamie Cameron
3c5edcf184 Merge branch 'master' of github.com:webmin/webmin 2023-09-18 22:04:15 -07:00
Jamie Cameron
33f4d7a008 Re-check OS after reboot https://github.com/webmin/webmin/issues/2004 2023-09-18 22:04:04 -07:00
Ilia Ross
2d182a2eea Fix ProFTPd config path 2023-09-19 01:07:41 +03:00
Jamie Cameron
7f06ccaf53 Merge pull request #2003 from webmin/dev/die-handler
Add die handler that stores the error from eval message
2023-09-17 22:26:05 -07:00
Jamie Cameron
d8fa7f26af Use proper function to compare versions https://github.com/virtualmin/virtualmin-gpl/issues/641 2023-09-17 19:39:40 -07:00
Jamie Cameron
aa6edf6c55 Preserve original permissions, ownership and file times after gunzipping 2023-09-17 19:20:26 -07:00
Ilia Ross
4333435739 Fix indent 2023-09-17 13:44:03 +03:00
Ilia Ross
f01197df71 Add die handler that stores the error from eval message 2023-09-17 13:42:30 +03:00
Jamie Cameron
cb41eff450 Fix decompression of folders 2023-09-16 18:44:42 -07:00
Jamie Cameron
352326f574 Return decompression status 2023-09-16 18:44:16 -07:00
Jamie Cameron
410fd07287 Merge branch 'master' of github.com:webmin/webmin 2023-09-16 09:29:49 -07:00
Jamie Cameron
faededeb77 Fix variable name 2023-09-16 09:29:42 -07:00
Ilia Ross
f0f8dc2850 Fix to correctly escape content in editor mode
https://forum.virtualmin.com/t/webmins-file-managers-editor-converting-html-special-characters-making-the-next-save-detrimental/122606/18?u=ilia

605a32f87d
2023-09-16 16:57:08 +03:00
Jamie Cameron
184e8d627d Deal with case where all configs are under /opt 2023-09-15 20:52:23 -07:00
Jamie Cameron
fd2b7c1fc7 Merge pull request #2002 from webmin/dev/protocols-save-to-global
Fix to save protocols to global config file
2023-09-15 20:50:34 -07:00
Jamie Cameron
98192ca099 Fix variable name 2023-09-15 18:54:43 -07:00
Jamie Cameron
05a93a5e3d Merge branch 'master' of github.com:webmin/webmin 2023-09-15 18:53:00 -07:00
Jamie Cameron
50a2820a97 remove typo 2023-09-15 18:52:54 -07:00
Ilia Ross
87f2640ee3 Update CHANGELOG.md 2023-09-16 00:21:59 +03:00
Ilia Ross
4180e3d3ee Fix to always include vendor_perl for 2FA to work [build]
https://forum.virtualmin.com/t/added-two-factor-authentication-i-think-last-access-but-not-100-anyway-2fa-is-failing-about-authen-oath/122538/60?u=ilia
2023-09-16 00:03:45 +03:00
Ilia Ross
b7d7ea5d8d Fix to simplify code 2023-09-15 22:34:32 +03:00
Ilia Ross
4e09cf0b55 Fix sent folder name ; update translations 2023-09-15 21:14:43 +03:00
Ilia Ross
3f0ab3fb92 Fix missing line increment 2023-09-15 19:21:08 +03:00
Ilia Ross
836647525a Fix to save protocols to global config file 2023-09-15 17:50:39 +03:00
Ilia Ross
8b68eac561 Fix how errors are handled when $main::error_last_eval is set
Note: If `$main::error_last_eval` was set, then display full error message using HTML accordion, otherwise display a bubble showing a file name and line which failed
2023-09-15 15:37:33 +03:00
Ilia Ross
0503299773 Fix to correctly set last caller (file:line) in error 2023-09-15 14:16:58 +03:00
Jamie Cameron
2e8000d191 Show full error if Authen::OATH cannot be loaded 2023-09-14 18:50:39 -07:00
Jamie Cameron
65ffcea0db Merge branch 'master' of github.com:webmin/webmin 2023-09-14 18:47:44 -07:00
Jamie Cameron
45845b8ca6 Wait a bit longer for DNS propogation 2023-09-14 17:07:04 -07:00
Ilia Ross
fead9b108d Fix to print errors to STDERR nicely 2023-09-15 01:13:54 +03:00
Ilia Ross
db1c9679ba Fix to revert previous patch 2023-09-15 00:40:16 +03:00
Ilia Ross
d753fa7a8d Fix to actually print the error 2023-09-15 00:11:06 +03:00
Ilia Ross
f6d7e05b14 Fix to remove unused config title 2023-09-13 22:53:32 +03:00
Ilia Ross
a9288423cc Fix to remove unused config title 2023-09-12 16:08:25 +03:00
Ilia Ross
ac9e54afba Update CHANGELOG.md for 2.103 2023-09-11 21:34:42 +03:00
Jamie Cameron
f7cf6419d2 Use taqbs 2023-09-06 16:23:40 -07:00
Jamie Cameron
a9097cbb42 Also support passing in the key ID and hmac for non-standard servers 2023-09-05 20:28:21 -07:00
Jamie Cameron
6f84ca1c9d Merge branch 'master' of github.com:webmin/webmin 2023-09-04 19:09:58 -07:00
Ilia Ross
dff70c3349 Fix Postfix check options page 2023-09-04 22:38:47 +03:00
Jamie Cameron
fe8f3f8494 Use standard buffer size 2023-09-04 11:13:45 -07:00
Ilia Ross
f5f3510a59 Fix default download buffer (once more) as 1 MiB should be just fine 2023-09-04 14:09:55 +03:00
Ilia Ross
1e375b4740 Fix indent one more time
c573496914
2023-09-04 13:14:31 +03:00
Jamie Cameron
c573496914 Fix indenting 2023-09-03 22:54:28 -07:00
Jamie Cameron
73e731722d Use packages with new key for upgrading 2023-09-02 21:44:29 -07:00
Jamie Cameron
6186376b6b Use packages with new key for upgrading 2023-09-02 21:43:58 -07:00
Ilia Ross
31e0151804 Fix to use help UI lib for showing explanatory message 2023-09-02 16:11:02 +03:00
Ilia Ross
872ca66b07 Add UI option to control network buffer size for downloads 2023-09-02 15:49:47 +03:00
Ilia Ross
088aba8cec Fix to use safer default buffer 2023-09-02 15:19:11 +03:00
Ilia Ross
99b8959559 Fix to send a file in chunks
https://forum.virtualmin.com/t/upgrade-2-102-killed-download-from-server-feature/122413/7?u=ilia
2023-09-02 15:18:49 +03:00
Jamie Cameron
94f23e63e7 Hide ps command in output 2023-08-31 22:44:44 -07:00
Jamie Cameron
7c449cf4a3 Merge branch 'master' of github.com:webmin/webmin 2023-08-31 22:40:06 -07:00
Jamie Cameron
2db507e5e8 Use proper UI functions for CPU and RAM modes 2023-08-31 22:39:45 -07:00
Ilia Ross
bdeb908df0 Fix to add --no-reuse-key as well
https://forum.virtualmin.com/t/unable-to-switch-ssl-certificate-into-elliptic-curve/122383?u=ilia
2023-08-31 17:15:24 +03:00
Jamie Cameron
a133cdfdef Also uncompress sub-folders 2023-08-30 22:54:25 -07:00
Jamie Cameron
fe2656acd8 Add flag for the key name 2023-08-30 20:15:41 -07:00
Jamie Cameron
64a44a667e Merge branch 'master' of github.com:webmin/webmin 2023-08-30 20:10:39 -07:00
Jamie Cameron
59cef9a04f Add flag for the default GPG key 2023-08-30 20:10:01 -07:00
Ilia Ross
af629fe3cd Fix code indent 2023-08-28 16:08:28 +03:00
Ilia Ross
80368e2a04 Merge branch 'master' of github.com:webmin/webmin 2023-08-28 16:05:39 +03:00
Ilia Ross
5237ae8ea2 Fix bug when backend isn't saved correctly #1992 2023-08-28 16:05:33 +03:00
Jamie Cameron
54ad4f7f74 Work on function to uncompress mail folders 2023-08-27 21:54:18 -07:00
Jamie Cameron
0dd94f5957 Merge branch 'master' of github.com:webmin/webmin 2023-08-26 18:51:08 -07:00
Jamie Cameron
5b2b3f0790 Add flag for ACME service URL 2023-08-26 18:51:01 -07:00
Jamie Cameron
ac05a0c43a Merge pull request #1991 from webmin/dev/cache-system-hostname-using-state
Fix to use a new way for clearing hostname cache
2023-08-26 15:34:26 -07:00
Ilia Ross
18f3e1273f Fix to use a new param to clear cache 2023-08-27 01:27:05 +03:00
Ilia Ross
710829c16a Fix to send headers unless already done in var_dump 2023-08-26 21:45:44 +03:00
Ilia Ross
8ced23d027 Fix to use a new way for clearing hostname cache 2023-08-26 21:26:03 +03:00
Ilia Ross
d834bb6da0 Fix to use state instead of globals in get_system_hostname sub 2023-08-26 21:17:57 +03:00
Jamie Cameron
cc560b00e5 Merge pull request #1990 from webmin/dev/hostname-detection-with-hostnamectl
Add hostname detection using `hostnamectl` command
2023-08-25 13:59:47 -07:00
Jamie Cameron
3e4668715a Merge branch 'master' of github.com:webmin/webmin 2023-08-25 11:25:51 -07:00
Jamie Cameron
053e8dcf22 Remove double HTML escape https://github.com/webmin/usermin/issues/105 2023-08-25 11:25:25 -07:00
Ilia Ross
2d7e57c7e1 Add hostname detection using hostnamectl command 2023-08-25 18:59:03 +03:00
Ilia Ross
30e6360fa2 Update CHANGELOG.md 2023-08-24 00:58:40 +03:00
Jamie Cameron
dda9290ff5 minor version bump 2023-08-23 11:53:53 -07:00
Jamie Cameron
15a00d8119 Remove perl module dependency and just use glob instead 2023-08-23 11:49:00 -07:00
Jamie Cameron
9289083171 No need for BEGIN block 2023-08-23 10:54:20 -07:00
Jamie Cameron
3d482d2bf5 Support CF-Connecting-IPv6 header 2023-08-22 18:46:43 -07:00
Jamie Cameron
318150e6b0 Merge branch 'master' of github.com:webmin/webmin 2023-08-21 17:18:53 -07:00
Jamie Cameron
8939b060b4 Clean up diff dirs so they don't get package up https://forum.virtualmin.com/t/debian-upgrade-nwe-directories-in-root-and-orig-directories-left-after-upgrade-completed/122241/8 2023-08-21 17:18:46 -07:00
Ilia Ross
4709ff6adf Add support for odd Amazon Linux interface names 2023-08-22 01:52:22 +03:00
Jamie Cameron
31af9f996c Also support CF-Connecting-IP https://github.com/webmin/webmin/issues/1956 2023-08-21 10:04:16 -07:00
Jamie Cameron
c716443737 Merge branch 'master' of github.com:webmin/webmin 2023-08-20 21:22:15 -07:00
Jamie Cameron
fd06605f51 Add support for True-Client-IP header as used by Cloudflare https://github.com/webmin/webmin/issues/1956 2023-08-20 21:22:08 -07:00
Ilia Ross
c8f6b05987 Add Config::IniFiles to vendor_perl [build]
* Amazon Linux doesn't have it available anywhere
2023-08-20 15:24:12 +03:00
Ilia Ross
a90dbc5f33 Fix not to print HTML in stdout 2023-08-20 14:08:31 +03:00
Ilia Ross
7fc16f8948 Update CHANGELOG.md 2023-08-19 18:22:16 +03:00
Ilia Ross
a2f1f24a95 Fix Apache graceful restart
https://github.com/virtualmin/virtualmin-gpl/issues/613
2023-08-18 16:15:36 +03:00
Ilia Ross
825b928168 Fix not to escape HTML unless sent to UI 2023-08-18 12:57:43 +03:00
Jamie Cameron
de648c24bd Expand range of versions 2023-08-17 18:28:11 -07:00
Ilia Ross
907818d2a4 Fix SpamAssassin config for Debian 12 2023-08-17 22:45:14 +03:00
Jamie Cameron
60a79e67d4 Merge branch 'master' of github.com:webmin/webmin 2023-08-16 20:41:14 -07:00
Jamie Cameron
04a3b8b5e6 Suppress output from monitor.pl https://github.com/webmin/webmin/issues/1984 2023-08-16 20:41:04 -07:00
Ilia Ross
dd1b4bc77b Fix to also set UCF_FORCE_CONFFOLD variable
https://github.com/virtualmin/virtualmin-gpl/issues/612
2023-08-16 15:12:18 +03:00
Ilia Ross
5156a472be Fix a bug in regex to correctly grep wack [build]
https://sourceforge.net/p/webadmin/discussion/55377/thread/78e5aa05f3
2023-08-16 13:48:54 +03:00
Ilia Ross
185e7db58d Revert "Revert "Fix to priorities ip command usage""
This reverts commit f8ec917bc5.
2023-08-16 13:03:51 +03:00
Ilia Ross
f8ec917bc5 Revert "Fix to priorities ip command usage"
This reverts commit 3b36dfa8ad.
2023-08-16 13:01:17 +03:00
Jamie Cameron
1016ec5f1d HTML escape more fields 2023-08-15 22:16:09 -07:00
Jamie Cameron
8a6d4cfefd Escape some more inputs 2023-08-15 22:15:10 -07:00
Jamie Cameron
7cbbdc898a More HTML escaping 2023-08-15 22:13:14 -07:00
Jamie Cameron
8db4074d4d HTML escape more stuff 2023-08-15 21:18:50 -07:00
Jamie Cameron
f6c48e7a11 Merge branch 'master' of github.com:webmin/webmin 2023-08-15 21:14:14 -07:00
Jamie Cameron
9ae54e61bd Escape search input 2023-08-15 21:13:53 -07:00
Ilia Ross
e917f33e09 Fix to correctly compare Webmin version being semantic version 2023-08-15 17:15:13 +03:00
Jamie Cameron
38aa06b8c6 Merge branch 'master' of github.com:webmin/webmin 2023-08-14 23:03:00 -07:00
Jamie Cameron
57e710e8a6 Small code cleanup 2023-08-14 23:02:35 -07:00
Ilia Ross
0d9d978f72 Fix APT repos
https://forum.virtualmin.com/t/switch-to-new-webmin-repository-url-doesnt-work/121851/5?u=ilia
2023-08-12 11:17:33 +03:00
Jamie Cameron
196b886ddb Merge branch 'master' of github.com:webmin/webmin 2023-08-11 20:36:22 -07:00
Jamie Cameron
4197e61772 Allow use of proxied SSL client name even when in non-SSL mode https://github.com/webmin/webmin/issues/1962 2023-08-11 20:35:57 -07:00
Ilia Ross
6dc87705d9 Fix to always fix Debian repo in the new format 2023-08-11 14:05:08 +03:00
Jamie Cameron
4b59570a82 Merge branch 'master' of github.com:webmin/webmin 2023-08-10 08:14:37 -07:00
Ilia Ross
33927e07ae Fix missing semicolon 2023-08-10 15:10:04 +03:00
Ilia Ross
65444b8865 Fix Terminal focus bug 2023-08-10 14:25:00 +03:00
Jamie Cameron
5357b084af Deal with case where there is no address https://sourceforge.net/p/webadmin/bugs/5630/ 2023-08-09 22:58:31 -07:00
Ilia Ross
862bbc36df Fix to address XSS issues #4 2023-08-09 19:07:13 +03:00
Ilia Ross
e6105bb757 Fix to address XSS issues #1 2023-08-09 16:49:40 +03:00
Ilia Ross
864e0c4918 Fix Cron edit files manually page not display directories #1978 [build] 2023-08-09 14:23:41 +03:00
Ilia Ross
115c5763a3 Fix Postfix edit files manually page not display directories #1978 [build] 2023-08-09 12:46:21 +03:00
Ilia Ross
d6e307d59a Fix not to use new lines to avoid color overflow 2023-08-08 23:19:34 +03:00
iliajie
9dc21ace2d Fix CHANGELOG.md 2023-08-08 14:24:06 +03:00
iliajie
c500759d83 Fix to simplify the code 2023-08-07 21:52:22 +03:00
iliajie
736d30ef76 Fix to display error message cleanly #1975 2023-08-07 19:44:47 +03:00
Jamie Cameron
a27095f40f Merge branch 'master' of github.com:webmin/webmin 2023-08-06 09:51:06 -07:00
Jamie Cameron
60a3b3b4a9 Make sure NSEC3PARAM record is always deleted https://github.com/virtualmin/virtualmin-gpl/issues/604 2023-08-06 09:50:43 -07:00
iliajie
f932925b29 Fix support for Amazon Linux release 2023 OS [build] 2023-08-06 15:45:57 +03:00
iliajie
21e8940860 Update CHANGELOG.md [build] 2023-08-05 23:46:51 +03:00
Jamie Cameron
944794aeac Fix duplicate string 2023-08-05 13:03:12 -07:00
Jamie Cameron
00bd6cf27f Merge branch 'master' of github.com:webmin/webmin 2023-08-05 12:28:52 -07:00
Jamie Cameron
1fb3bfa6ef Update webmin from repository if a package is available 2023-08-05 12:28:06 -07:00
iliajie
da14ecbe46 Update install command to use recommends 2023-08-05 20:19:36 +03:00
Jamie Cameron
1c48f3761e Merge branch 'master' of github.com:webmin/webmin 2023-08-04 17:06:32 -07:00
Jamie Cameron
246b0018eb Hack around IMAP not supporting regexps in searches https://forum.virtualmin.com/t/usermin-email-filters/121844/4 2023-08-04 17:06:01 -07:00
iliajie
2e97b09d10 Fix to show correct locale for sudo-capable user https://github.com/webmin/authentic-theme/issues/1663
f3cc268f0c
2023-08-04 12:58:39 +03:00
iliajie
f3cc268f0c Fix to show correct locale for sudo-capable user #1663 [build] 2023-08-04 12:54:17 +03:00
iliajie
8c3973c68f Update CHANGELOG [build] 2023-08-04 00:58:02 +03:00
Jamie Cameron
33b591dfac Also check if hash format is valid for yescrypt 2023-08-03 14:49:04 -07:00
Jamie Cameron
ec0ab05782 Merge branch 'master' of github.com:webmin/webmin 2023-08-03 14:41:02 -07:00
Jamie Cameron
4b03b80912 Generate new salt if salt isn't valid for SHA 2023-08-03 14:40:16 -07:00
iliajie
d312c3e318 Add support for Amazon Linux 2023 [build] 2023-08-03 23:20:28 +03:00
iliajie
9439ba0450 Add container class 2023-08-03 21:57:03 +03:00
iliajie
bea827c0b7 Fix various XSS related issues 2023-08-03 17:21:40 +03:00
iliajie
b1ee7cbf53 Move Encode::Detect to recommends [build] 2023-08-03 14:09:13 +03:00
iliajie
f56807c023 Fix to make build conditional and test against message 2023-08-03 14:00:50 +03:00
iliajie
7b34282488 Fix to remove building on schedule 2023-08-03 13:49:20 +03:00
iliajie
31b48f8dd6 Add nightly warning 2023-08-03 13:27:18 +03:00
Jamie Cameron
8c1a74d245 More escaping of folder names 2023-08-02 23:21:25 -07:00
Jamie Cameron
6ae1061900 Escape category name 2023-08-02 21:10:35 -07:00
Jamie Cameron
7de3647f0d Escape all the places where the module description is displayed 2023-08-02 17:28:24 -07:00
iliajie
76389ea06c Fix to do more filtering to address reported XSS issue 2023-08-03 00:05:23 +03:00
iliajie
8ae4364ee1 Fix let caller do filtering 2023-08-02 23:42:17 +03:00
iliajie
054f0a254e Fix to do a bit more filtering to prevent root user XSS itself 2023-08-02 23:31:59 +03:00
iliajie
02a5982ff9 Fix for Usermin to clone Webmin repos too 2023-08-02 20:31:26 +03:00
iliajie
a835742293 webmin.dev: Deploy Webmin package 2023-08-02 20:05:55 +03:00
iliajie
2d7f299419 Fix workflows location 2023-08-02 20:04:51 +03:00
iliajie
3bd37be97b Add builds 2023-08-02 20:02:54 +03:00
iliajie
62e1b4c785 Add script to setup development repos with signing keys 2023-08-02 01:48:13 +03:00
Jamie Cameron
3671a76333 Ubuntu 23 has renamed the SSH systemd service to ssh 2023-08-01 15:39:59 -07:00
iliajie
f3652c7a87 Fix wording https://github.com/webmin/webmin/issues/1971#issuecomment-1659864264 2023-08-01 11:50:52 +03:00
Jamie Cameron
980c4c834c Merge branch 'master' of github.com:webmin/webmin 2023-07-31 11:01:35 -07:00
Jamie Cameron
df438c59ed Prevent incompatible option setting https://github.com/webmin/webmin/issues/1971 2023-07-31 11:01:27 -07:00
iliajie
932f2464bc Update CHANGELOG.md date 2023-07-31 16:52:19 +03:00
iliajie
d9ea914889 Fix to always upload to user home directory if possible 2023-07-31 03:10:00 +03:00
iliajie
1730540764 Fix to always download to user home directory if possible 2023-07-31 03:05:39 +03:00
iliajie
9454cb4a2b Merge branch 'master' of github.com:webmin/webmin 2023-07-31 02:50:57 +03:00
iliajie
355d7b5404 Fix to update CHANGELOG.md 2023-07-31 02:50:11 +03:00
iliajie
9f93c29c5f Fix more of those useless XSS 2023-07-31 02:43:25 +03:00
Jamie Cameron
43e671497a New version bump 2023-07-30 16:37:45 -07:00
iliajie
b14c1c07dc Fix to also discard any command output
Ref.: f4ad3293bf (diff-9801c20c5b4becfcc428783737908ea507bfa6387e42710a174992124d267912R64)
2023-07-30 12:23:33 +03:00
Jamie Cameron
f4ad3293bf No need to log a command that we're already capturing the output for 2023-07-29 17:51:41 -07:00
iliajie
e809329ca0 Fix to revert the fix "don't just blindly write the new key" ; fix logging 2023-07-29 22:45:44 +03:00
iliajie
3cc16bb120 Fix not to print section name if there is only one 2023-07-29 17:17:03 +03:00
iliajie
1eb43eafd2 Update key email 2023-07-29 14:28:58 +03:00
iliajie
f652def98d Merge branch 'master' of github.com:webmin/webmin 2023-07-29 11:49:44 +03:00
Jamie Cameron
392fb41a24 Make sure gzip and gunzip are installed 2023-07-28 23:30:13 -07:00
Jamie Cameron
c14b100845 Merge branch 'master' of github.com:webmin/webmin 2023-07-28 18:33:57 -07:00
Jamie Cameron
b3b5fff0dc If trusting the remote IP, also trust the proxied SSL client cert https://github.com/webmin/webmin/issues/1962 2023-07-28 18:33:48 -07:00
iliajie
ef0a48d83a Fix not to print empty section 2023-07-28 23:37:24 +03:00
iliajie
58a15dafc7 Fix fix repo script when there are multiple sources configured 2023-07-28 17:24:51 +03:00
iliajie
79f78d5e28 Fit to simplify message text for updating repo URL 2023-07-28 17:19:19 +03:00
Jamie Cameron
51e1c7bef3 Unix permission fixes 2023-07-26 21:51:05 -07:00
Jamie Cameron
5b5af3eb20 Merge branch 'master' of github.com:webmin/webmin 2023-07-26 21:50:16 -07:00
Jamie Cameron
2e93819c1b If a mail file is compressed, read it via gzip 2023-07-26 21:50:09 -07:00
iliajie
d3a10de65d Update CHANGELOG.md 2023-07-27 00:46:39 +03:00
iliajie
8ef754b477 Add error_stderr API 2023-07-26 22:38:28 +03:00
Jamie Cameron
4cbda407f9 Merge pull request #1142 from seabres/multiple_ldap_server
Allow multiple LDAP server for userdb
2023-07-25 17:17:37 -07:00
Jamie Cameron
71cce5c580 Merge branch 'master' of github.com:webmin/webmin 2023-07-25 16:04:03 -07:00
Jamie Cameron
360c27add5 Don't just blindly write the new key 2023-07-25 16:03:55 -07:00
iliajie
753290b95a Fix Squid package name 2023-07-25 21:11:38 +03:00
iliajie
ae579a2047 Fix headers names be in teletype text 2023-07-25 19:45:09 +03:00
iliajie
9746f7ea9e Add facility to check for Webmin module menu link 2023-07-24 01:01:02 +03:00
Jamie Cameron
e599e0206a Can only use ifup if innstalled 2023-07-23 08:40:27 -07:00
iliajie
f37dbd4c3d Fix to simplify wording 2023-07-22 22:22:54 +03:00
iliajie
ff42c66129 Fix to drop using official word 2023-07-22 22:20:47 +03:00
iliajie
d384e696f7 Fix to add support setting repos without human input #1961 2023-07-22 14:24:48 +03:00
iliajie
3b36dfa8ad Fix to priorities ip command usage 2023-07-22 13:31:20 +03:00
BRESTAN Rainer
fad1201240 Allow multiple LDAP server for userdb 2019-11-18 18:44:55 +01:00
225 changed files with 5653 additions and 555 deletions

221
.github/build/deb.sh vendored Executable file
View 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
View 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
View 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
View 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
View 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

View 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

View File

@@ -1,6 +1,35 @@
## Changelog
#### 2.100 (July, 2023)
#### 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

File diff suppressed because one or more lines are too long

View File

@@ -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

View File

@@ -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" ] );
}

View File

@@ -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
@@ -637,7 +638,6 @@ mod_proxy_preserve=Preserve original Host: header
mod_proxy_timeout=Proxy request timeout in seconds
mod_proxy_etimeout=Proxy request timeout must be a number of seconds
mod_proxy_via=Set Via: headers
mod_proxy_preserve=Preserve original HTTP host
mod_proxy_not=None
mod_log_agent_default=Default

View File

@@ -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

View File

@@ -1976,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;
@@ -3591,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]);
}

View File

@@ -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,

View File

@@ -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);
}

View File

@@ -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();

View File

@@ -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;
}

View File

@@ -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'});

View File

@@ -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;

View File

@@ -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;

View File

@@ -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;

View File

@@ -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])

View File

@@ -1603,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);
}

View File

@@ -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

View File

@@ -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

View File

@@ -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

View File

@@ -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);

0
fail2ban/jail_blocks.cgi Normal file → Executable file
View File

View File

@@ -114,8 +114,10 @@ jail_efindtime=Delay between matches must be a number greater than zero
jail_ebantime=Time to ban an IP must be a number greater than zero
jail_backend=Check for log file updates using
jail_auto=Decide automatically
jail_gamin=Gamin file alteration monitor
jail_polling=Background polling
jail_systemd=systemd
jail_polling=polling
jail_gamin=gamin
jail_pyinotify=pyinotify
jail_destemail=Default notification email
jail_none=None set
jail_banaction=Default action to apply

0
fail2ban/unblock_jailed_ip.cgi Normal file → Executable file
View File

View File

@@ -11,7 +11,19 @@ if(!$in{'arch'}) {
my $command;
if ($in{'method'} eq 'tar') {
if ($in{'method'} eq 'plain-tar') {
$full = "$cwd/$in{'arch'}.tar";
$command = "tar cf ".quotemeta($full)." -C ".quotemeta($cwd);
}
elsif ($in{'method'} eq 'xz-tar') {
$full = "$cwd/$in{'arch'}.tar.xz";
$command = "tar cJf ".quotemeta($full)." -C ".quotemeta($cwd);
}
elsif ($in{'method'} eq 'zstd-tar') {
$full = "$cwd/$in{'arch'}.zst";
$command = "ZSTD_CLEVEL=19 tar --zstd -cf ".quotemeta($full)." -C ".quotemeta($cwd);
}
elsif ($in{'method'} eq 'tar') {
$full = "$cwd/$in{'arch'}.tar.gz";
$command = "tar czf ".quotemeta($full)." -C ".quotemeta($cwd);
}

View File

@@ -41,7 +41,8 @@ print &ui_table_row($text{'config_columns_to_display'},
&ui_checkbox('columns', 'last_mod_time', $text{'last_mod_time'}, $config{'columns'} =~ /last_mod_time/)
);
print &ui_table_row($text{'config_per_page'}, ui_textbox("per_page", $config{'per_page'}, 80));
print &ui_table_row($text{'file_detect_encoding'}, &ui_yesno_radio('config_portable_module_filemanager_editor_detect_encoding', $config{'config_portable_module_filemanager_editor_detect_encoding'}, 'true', 'false'));
print &ui_table_row($text{'file_detect_encoding'}, &ui_yesno_radio('config_portable_module_filemanager_editor_detect_encoding', $config{'config_portable_module_filemanager_editor_detect_encoding'} ne 'false' ? 'true' : 'false', 'true', 'false'));
print &ui_table_row($text{'file_showhiddenfiles'}, &ui_yesno_radio('config_portable_module_filemanager_show_dot_files', $config{'config_portable_module_filemanager_show_dot_files'} ne 'false' ? 'true' : 'false', 'true', 'false'));
print &ui_table_row($text{'config_bookmarks'}, &ui_textarea("bookmarks", $bookmarks, 5, 40));
print &ui_table_end();

View File

@@ -1,2 +1,3 @@
max=Maximum size for uploaded files,3,Unlimited
config_portable_module_filemanager_editor_detect_encoding=Fix to prevent encoding detection if forbidden,1,true-Yes,false-No
config_portable_module_filemanager_editor_detect_encoding=Fix to prevent encoding detection if forbidden,1,true-Yes,false-No
config_portable_module_filemanager_show_dot_files=Show hidden files,1,true-Yes,false-No

View File

@@ -1,3 +1,4 @@
columns=size,owner_user,permissions,last_mod_time
per_page=50
config_portable_module_filemanager_editor_detect_encoding=true
config_portable_module_filemanager_editor_detect_encoding=true
config_portable_module_filemanager_show_dot_files=true

View File

@@ -12,7 +12,7 @@ if ($archive_type =~ /x-bzip/) {
$cmd = "tar xvjfp ".quotemeta("$cwd/$in{'file'}").
" -C ".quotemeta($cwd);
}
elsif ($archive_type =~ /x-tar|\/gzip|x-xz|x-compressed-tar/) {
elsif ($archive_type =~ /x-tar|\/gzip|x-xz|zstd|x-compressed-tar/) {
$cmd = "tar xfp ".quotemeta("$cwd/$in{'file'}").
" -C ".quotemeta($cwd);
}

View File

@@ -397,6 +397,7 @@ sub print_interface {
index($type, "-x-tar") != -1 ||
(index($type, "-x-bzip") != -1 && has_command('bzip2')) ||
(index($type, "-gzip") != -1 && has_command('gzip')) ||
(index($type, "zstd") != -1 && has_command('zstd')) ||
(index($type, "-x-xz") != -1 && has_command('xz'))
) &&
has_command('tar')))

Binary file not shown.

After

Width:  |  Height:  |  Size: 764 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 764 B

View File

@@ -18,7 +18,8 @@ unless (opendir ( DIR, $cwd )) {
my %secontext;
# Push file names with full paths to array, filtering out "." and ".."
@list = map { &simplify_path("$cwd/$_") } grep { $_ ne '.' && $_ ne '..' } readdir(DIR);
my $show_dot_files = $userconfig{'config_portable_module_filemanager_show_dot_files'} ne 'false';
@list = map { &simplify_path("$cwd/$_") } grep { $_ ne '.' && $_ ne '..' && ($show_dot_files || ($_ !~ /^\./ && $_ !~ /\/\./)) } readdir(DIR);
closedir(DIR);
# Filter out not allowed paths

View File

@@ -173,6 +173,7 @@ acls_action=Action
acls_manual=Manual params
acls_error=<tt>setfacl</tt> command is not found on your system
file_detect_encoding=Automatically detect file encoding
file_showhiddenfiles=Show hidden files
index_return=file listing
upload_dirs=Directory Upload
extract_uploaded=Extract Compressed

View File

@@ -13,6 +13,7 @@ $columns =~ s/\0/,/g;
'columns' => $columns,
'per_page' => $in{'per_page'},
'config_portable_module_filemanager_editor_detect_encoding' => $in{'config_portable_module_filemanager_editor_detect_encoding'},
'config_portable_module_filemanager_show_dot_files' => $in{'config_portable_module_filemanager_show_dot_files'},
);
my $max_allowed = $in{'max_allowed'};
if($max_allowed) {

View File

@@ -102,7 +102,10 @@
<input name="filename" type="text" class="form-control" data-placement="right" data-content="$text{'provide_file_name'}" data-trigger="manual">
</div>
<select name="method">
<option value="tar">.tar.gz</option>
<option value="plain-tar">.tar</option>
<option value="xz-tar">.tar.xz</option>
<option selected value="tar">.tar.gz</option>
<option value="zstd-tar">.zstd</option>
<option value="zip">.zip</option>
</select>
</form>

View File

@@ -39,7 +39,10 @@
<label>$text{'archive_name'}</label>
<input name="filename" type="text">
<select name="method">
<option value="tar">.tar.gz</option>
<option value="plain-tar">.tar</option>
<option value="xz-tar">.tar.xz</option>
<option selected value="tar">.tar.gz</option>
<option value="zstd-tar">.zstd</option>
<option value="zip">.zip</option>
</select>
</div>

View File

@@ -180,7 +180,8 @@ else {
print &ui_table_row(
&ui_oneradio("amode", 0, $text{'edit_amode0'}, $amode == 0),
&ui_select("folder", $folder ? &mailbox::folder_name($folder) : "",
[ (map { [ &mailbox::folder_name($_), $_->{'name'} ] }
[ (map { [ &mailbox::folder_name($_),
&html_escape($_->{'name'}) ] }
@folders),
[ "", $text{'edit_file'} ] ],
1, 0, 0, 0,
@@ -276,7 +277,8 @@ else {
&ui_select("applyfrom",
$inbox ? &mailbox::folder_name($inbox) : "",
[ map { [ &mailbox::folder_name($_),
$_->{'name'} ] } @folders ]) ]);
&html_escape($_->{'name'}) ] }
@folders ]) ]);
}
if (($cmode == 4 || $cmode == 5 || $cmode == 6) && $amode == 0) {
# Add button to apply the action to matching emails
@@ -285,7 +287,8 @@ else {
&ui_select("movefrom",
$inbox ? &mailbox::folder_name($inbox) : "",
[ map { [ &mailbox::folder_name($_),
$_->{'name'} ] } @folders ]) ]);
&html_escape($_->{'name'}) ] }
@folders ]) ]);
}
}
print &ui_form_end(\@buts);

View File

@@ -49,6 +49,10 @@ if (&no_user_procmailrc()) {
}
@filters = &list_filters();
foreach my $filter (@filters) {
$filter->{'action'} = &html_escape($filter->{'action'})
if ($filter->{'action'});
}
@links = ( );
if (@filters) {
push(@links, &select_all_link("d"), &select_invert_link("d"));
@@ -96,12 +100,12 @@ if (@filters || &get_global_spamassassin()) {
$folder = &file_to_folder($spamfile, \@folders, 0, 1);
$id = &mailbox::folder_name($folder);
if ($folder->{'fake'}) {
$sflink = "<u>$folder->{'name'}</u>";
$sflink = "<u>".&html_escape($folder->{'name'})."</u>";
}
else {
$sflink =
"<a href='../mailbox/index.cgi?id=$id'>".
"$folder->{'name'}</a>";
&ui_link("../mailbox/index.cgi?id=$id",
&html_escape($folder->{'name'}));
}
print &ui_columns_row(
[ "", $text{'index_cspam'},
@@ -116,7 +120,7 @@ if (@filters || &get_global_spamassassin()) {
# Work out nice condition and action descriptions
local $cond;
($cond, $lastalways) = &describe_condition($f);
$cond = &ui_link("edit.cgi?idx=$f->{'index'}",$cond);
$cond = &ui_link("edit.cgi?idx=$f->{'index'}", $cond);
local $action = &describe_action($f, \@folders);
# Create mover links

View File

@@ -1,5 +1,5 @@
line0=Configurable global options,11
perpage=Number of rules to display per page,3,50
perpage=Number of rules to display per page,3,Default (50)
view_condition=Display condition in rules list?,1,1-Yes,0-No
view_comment=Display comment in rules list?,1,1-Yes,0-No
comment_mod=Store comments as,1,0-# comments in save file,1-&#45;&#45;comment option

View File

@@ -225,25 +225,17 @@ else {
print &ui_hidden("table", $in{'table'});
print &ui_hidden("chain", $c);
if (@rules > $config{'perpage'}) {
my $pp = $config{'perpage'};
if (@rules > $pp) {
# Need to show arrows
print "<center>\n";
$s = int($in{'start'});
$e = $in{'start'} + $config{'perpage'} - 1;
$e = $in{'start'} + $pp - 1;
$e = @rules-1 if ($e >= @rules);
if ($s) {
print &ui_link("?start=".
($s - $config{'perpage'}),
"<img src=/images/left.gif border=0 align=middle>");
}
print "<font size=+1>",&text('index_position', $s+1, $e+1,
scalar(@rules)),"</font>\n";
if ($e < @rules-1) {
print &ui_link("?start=".
($s + $config{'perpage'}),
"<img src=/images/right.gif border=0 align=middle>");
}
print "</center>\n";
print &ui_page_flipper(
&text('index_position', $s+1, $e+1, scalar(@rules)),
undef, undef,
$s ? "?start=".($s - $pp) : "",
$e < @rules-1 ? "?start=".($s + $pp) : "");
}
else {
# Can show them all

View File

@@ -1,6 +1,7 @@
index_title=Linux IPTables Firewall
index_title_v=IPv4 Firewall
index_title_v6=IPv6 Firewall
index_position=Showing rules $1 to $2 of $3
index_editing=rules file $1
index_ecommand=The command $1 was not found on your system. Webmin needs this command to configure IPtables.
index_ekernel=An error occured when checking your current IPtables configuration : $1 This may indicate that your kernel does not support IPtables.

0
firewalld/edit_manual.cgi Normal file → Executable file
View File

View File

@@ -501,18 +501,7 @@ return $? ? $out : undef;
sub get_config_files
{
my $conf_dir = $config{'config_dir'} || '/etc/firewalld';
my @conf_files;
my @dirpath = ($conf_dir);
eval "use File::Find;";
if (!$@) {
find(sub {
my $file = $File::Find::name;
push(@conf_files, $file)
if (-f $file && $file =~ /\.(conf|xml)$/);
}, @dirpath);
}
push(@conf_files, "$conf_dir/direct.xml");
return @conf_files;
return (glob("$conf_dir/*.xml"), glob("$conf_dir/*/*.xml"));
}
1;

0
firewalld/save_manual.cgi Normal file → Executable file
View File

View File

@@ -96,6 +96,7 @@ if ($current_lang_info->{'rtl'} || $current_lang eq "ar") {
# Page header
print "<html>\n";
print "<head>\n";
print &ui_switch_theme_javascript();
print "<title>$title</title>\n";
my $imgdir = "@{[&get_webprefix()]}/images";
my $prod = 'webmin';

View File

@@ -84,7 +84,7 @@ if (@has > 1) {
}
print "</div>";
}
print &ui_switch_theme_javascript();
print "<div class='wrapper leftmenu'>\n";
print "<table id='main' width='100%'><tbody><tr><td>\n";

File diff suppressed because one or more lines are too long

View File

@@ -22,6 +22,23 @@ our $ui_formcount;
$main::WRAPPER_OPEN = 0;
$main::COLUMNS_WRAPPER_OPEN = 0;
sub theme_ui_print_header
{
my ($text, @args) = @_;
&header(@args);
print <<EOL;
<script>
(function () {
const body = document.querySelector('body');
try {
body && body.classList.add('$module_name');
} catch (e) {}
})();
</script>
EOL
print &ui_post_header($text);
}
# theme_ui_post_header([subtext])
# Returns HTML to appear directly after a standard header() call
sub theme_ui_post_header

View File

@@ -697,4 +697,16 @@ body > .mode > b[data-mode="server-manager"] > a > .ff-cloudmin {
}
.ql-compose-container .ql-snow .ql-tooltip {
z-index: 99;
}
}
/* Shell module tweaks */
.shell pre {
overflow-x: auto;
overflow-y: hidden;
}
.shell input[name="cmd"] {
max-width: 64.5vw;
}
.shell select[name="pcmd"] {
max-width: 65vw;
}

View File

@@ -277,24 +277,51 @@ my $html_editor_init_script =
theme: 'snow'
});
// Google Mail editor like keybind for quoting
// Google Mail like key bind for creating numbered list (Ctrl+Shift+7)
editor.keyboard.addBinding({
key: '9',
shiftKey: true,
ctrlKey: !isMac,
metaKey: isMac,
format: ['blockquote'],
key: '7',
shiftKey: true,
ctrlKey: !isMac,
metaKey: isMac,
}, function(range, context) {
this.quill.format('blockquote', false);
const currentFormat = this.quill.getFormat(range.index);
if (currentFormat.list === 'ordered') {
this.quill.format('list', false);
} else {
this.quill.format('list', 'ordered');
}
});
// Google Mail like key bind for creating bullet list (Ctrl+Shift+8)
editor.keyboard.addBinding({
key: '9',
shiftKey: true,
ctrlKey: !isMac,
metaKey: isMac,
key: '8',
shiftKey: true,
ctrlKey: !isMac,
metaKey: isMac,
}, function(range, context) {
this.quill.format('blockquote', true);
const currentFormat = this.quill.getFormat(range.index);
if (currentFormat.list === 'bullet') {
this.quill.format('list', false);
} else {
this.quill.format('list', 'bullet');
}
});
// Google Mail like key bind for creating blockquote (Ctrl+Shift+9)
editor.keyboard.addBinding({
key: '9',
shiftKey: true,
ctrlKey: !isMac,
metaKey: isMac,
}, function(range, context) {
const currentFormat = this.quill.getFormat(range.index);
if (currentFormat.blockquote) {
this.quill.format('blockquote', false);
} else {
this.quill.format('blockquote', true);
}
});
editor.on('text-change', function() {
// This should most probably go to onSubmit event
targ.value = editor.root.innerHTML + "<br>";

View File

@@ -2459,10 +2459,8 @@ my $systemd_local_conf = "/etc/systemd/system";
my $systemd_unit_dir1 = "/usr/lib/systemd/system";
my $systemd_unit_dir2 = "/lib/systemd/system";
if ($name) {
foreach my $p (
$systemd_local_conf,
$systemd_unit_dir1,
$systemd_unit_dir2) {
foreach my $p ($systemd_local_conf, $systemd_unit_dir1,
$systemd_unit_dir2) {
if (-r "$p/$name.service" ||
-r "$p/$name" ||
-r "$p/$name.target" ||

View File

@@ -983,7 +983,7 @@ elsif ($mode == 3) {
{ 'headers' => [ [ 'Content-type', 'application/zip' ],
[ 'Content-Transfer-Encoding', 'base64' ] ],
'data' => $data } ] };
$main::errors_must_die = 1;
$main::error_must_die = 1;
if (&foreign_check("mailboxes")) {
&foreign_require("mailboxes", "mailboxes-lib.pl");
eval { &mailboxes::send_mail($mail); };

View File

@@ -111,7 +111,7 @@ elsif ($mode == 3) {
'data' => $body },
{ 'headers' => [ [ 'Content-type', 'text/plain' ] ],
'data' => $data } ] };
$main::errors_must_die = 1;
$main::error_must_die = 1;
if (&foreign_check("mailboxes")) {
&foreign_require("mailboxes", "mailboxes-lib.pl");
eval { &mailboxes::send_mail($mail); };

View File

@@ -1,2 +1 @@
line2=System configuration,11
krb5_conf=Path to kerberos5 configuration file,0

View File

@@ -392,4 +392,6 @@ file_truncated_message_tail=fetched ending $1 of data, truncated $2 out of $3
defcert_error=Default $1 bundled SSL certificate is being used. It is highly advised to update default <tt>$2</tt> certificate before proceeding with login.
main_error_details=Error details
__norefs=1

View File

@@ -2987,6 +2987,17 @@ if ($file =~ s/^(<|>>|>|\|)//) {
$mode = $1;
}
my $rv = open($fh, $mode, $file);
if ((!$mode || $mode eq "<") && $rv) {
# Is it compressed? If so, switch to reading via gzip
my $two;
read($fh, $two, 2);
seek($fh, 0, 0);
if ($two eq "\037\213") {
# Gzipped .. need to read-open
close($fh);
open($fh, "gunzip -c ".quotemeta($file)." |");
}
}
if ($switched) {
# Now that it is open, switch back to root
$) = 0;
@@ -2995,6 +3006,44 @@ if ($switched) {
return $rv;
}
# is_gzipped_file(file)
# Returns 1 if a file is gzip compressed
sub is_gzipped_file
{
my ($file) = @_;
my $fh;
my $rv = open($fh, "<", $file);
return 0 if (!$rv);
my $two;
read($fh, $two, 2);
close($fh);
return $two eq "\037\213" ? 1 : 0;
}
# gunzip_mail_file(file)
# Uncompress a mail file in place
sub gunzip_mail_file
{
my ($file) = @_;
my $switched = &switch_to_mail_user();
my $outfile = $file.".$$.uncompressed";
my @st = stat($file);
my $ex = system("gunzip -c ".quotemeta($file)."> ".quotemeta($outfile)." 2>/dev/null");
if ($ex) {
unlink($outfile);
}
else {
rename($outfile, $file);
&set_ownership_permissions($st[4], $st[5], $st[2], $file);
utime($st[8], $st[9], $file);
}
if ($switched) {
$) = 0;
$> = 0;
}
return !$ex;
}
# create_as_mail_user(fh, file)
# Creates a new file, but ensures that it does not yet exist first, and then
# sets the ownership to the mail user

View File

@@ -944,7 +944,7 @@ local ($fields, $andmode, $folder, $limit, $headersonly) = @_;
# an index, build a sort index and use that for
# the search, if it is simple enough (Subject, From and To only)
local @idxfields = grep { $_->[0] eq 'from' || $_->[0] eq 'to' ||
$_->[0] eq 'subject' } @{$_[0]};
$_->[0] eq 'subject' } @$fields;
if ($folder->{'type'} != 4 &&
$folder->{'type'} != 5 &&
$folder->{'type'} != 6 &&
@@ -1048,6 +1048,11 @@ elsif ($folder->{'type'} == 4) {
$f->[0] eq "all" ? "body" : $f->[0];
local $neg = ($field =~ s/^\!//);
local $what = $f->[1];
if ($f->[2]) {
$what =~ s/^\^//;
$what =~ s/\$$//;
$what =~ s/\.\*//g;
}
if ($field ne "size") {
$what = "\"".$what."\""
}
@@ -1538,6 +1543,33 @@ if ($src->{'sortable'}) {
}
}
# mailbox_uncompress_folder(&folder)
# If a folder or it's files are gzipped, uncompress them in place
sub mailbox_uncompress_folder
{
my ($folder) = @_;
if ($folder->{'type'} == 1 || $folder->{'type'} == 3) {
my @files = $folder->{'type'} == 1 ?
&get_maildir_files($folder->{'file'}) :
&get_mhdir_files($folder->{'file'});
if ($folder->{'type'} == 1) {
foreach my $sf (glob("$folder->{'file'}/.??*")) {
push(@files, &get_maildir_files($sf));
}
}
foreach my $f (@files) {
if (&is_gzipped_file($f)) {
&gunzip_mail_file($f);
}
}
}
elsif ($folder->{'type'} == 0) {
if (&is_gzipped_file($folder->{'file'})) {
&gunzip_mail_file($folder->{'file'});
}
}
}
# mailbox_copy_mail(&source, &dest, mail, ...)
# Copy mail from one folder to another
sub mailbox_copy_mail
@@ -3361,7 +3393,10 @@ local $dmail = {
[ 'Content-Transfer-Encoding' => '7bit' ] ],
'data' => $dsn }
] };
eval { local $main::errors_must_die = 1; &send_mail($dmail); };
eval {
local $main::error_must_die = 1;
&send_mail($dmail);
};
return $to;
}

View File

@@ -320,7 +320,7 @@ search_elatest=Ontbrekende of ongeldige aantal boodskappe om te soek
search_withstatus=, met status $1
folder_inbox=posbus
folder_sent=Gestuurde pos
folder_sent=Gestuur
folder_drafts=Drafts
folder_trash=asblik

View File

@@ -320,7 +320,7 @@ search_elatest=عدد الرسائل المفقودة أو غير الصحيحة
search_withstatus=, with status $1
folder_inbox=صندوق الوارد
folder_sent=البريد المرسل
folder_sent=مرسل
folder_drafts=المسودات
folder_trash=قمامة، يدمر، يهدم

View File

@@ -320,7 +320,7 @@ search_elatest=Адсутнічае альбо недапушчальная ко
search_withstatus=, са статусам $1
folder_inbox=Уваходныя
folder_sent=Даслана пошта
folder_sent=Адпраўлена
folder_drafts=Чарнавікі
folder_trash=Хлам

View File

@@ -320,7 +320,7 @@ search_elatest=Липсващ или невалиден брой съобщен
search_withstatus=, със статус $1
folder_inbox=Входящи
folder_sent=Изпратена поща
folder_sent=Изпратено
folder_drafts=дама
folder_trash=боклук

View File

@@ -319,7 +319,6 @@ search_elatest=Hi falta el nombre de missatges a buscar o bé és invàlid
search_withstatus=, amb estat $1
folder_inbox=Entrada
folder_sent=Enviat
folder_drafts=Drafts
folder_trash=Trash

View File

@@ -1,5 +1,7 @@
index_return=llista d'usuaris
folder_sent=Enviat
editor_heading=Encapçalament
editor_paragraph=Paràgraf
editor_fontfamily_default=Per defecte

View File

@@ -295,7 +295,6 @@ search_elatest=Chybějící nebo nevhodný počet zpráv k prohledání
search_withstatus=, se stavem $1
folder_inbox=Doručená pošta
folder_sent=Odesláné pošta
folder_drafts=Koncepty
folder_trash=Koš

View File

@@ -29,6 +29,8 @@ reply_html1=Vytvořte HTML
search_msg6=Výsledky hledání $1 v poli $2
search_attach=Musí mít přílohy?
folder_sent=Odesláno
left_mail=Pošta
left_search=Vyhledávání:
left_folders=Správa složek

View File

@@ -320,7 +320,7 @@ search_elatest=Manglende eller ugyldigt antal meddelelser til søgning
search_withstatus=, med status $1
folder_inbox=Indbakke
folder_sent=Sendt post
folder_sent=Sendt
folder_drafts=Kladder
folder_trash=Affald

View File

@@ -319,7 +319,6 @@ search_elatest=Fehlende oder ungültige Anzahl an Mails für die Suche
search_withstatus=, mit Status $1
folder_inbox=Posteingang
folder_sent=Versendete Mail
folder_drafts=Entwürfe
folder_trash=Papierkorb

View File

@@ -1,5 +1,7 @@
index_return=Benutzerliste
folder_sent=Gesendet
editor_heading=Überschrift
editor_paragraph=Absatz
editor_fontfamily_default=Standard

View File

@@ -268,7 +268,6 @@ search_elatest=Λείπει ή είναι άκυρος ο αριθμός των
search_withstatus=, με κατάσταση $1
folder_inbox=Εισερχόμενα
folder_sent=Απεσταλμένα
folder_drafts=Πρόχειρα
folder_trash=Απορρίματα

View File

@@ -60,6 +60,8 @@ confirm_warnallf=Είστε βέβαιοι ότι θέλετε να διαγρά
search_msg6=Αποτελέσματα αναζήτησης για $1 στο πεδίο $2
search_attach=Πρέπει να έχετε συνημμένα;
folder_sent=Απεσταλμένα
sform_header=Προηγμένες επιλογές αναζήτησης ηλεκτρονικού ταχυδρομείου
sform_andmode=Λειτουργία κριτηρίων
sform_folder2=Αναζήτηση σε φάκελο (-ες)

View File

@@ -320,7 +320,7 @@ search_elatest=Missing or invalid number of messages to search
search_withstatus=, with status $1
folder_inbox=Inbox
folder_sent=Sent mail
folder_sent=Sent
folder_drafts=Drafts
folder_trash=Trash

View File

@@ -238,7 +238,7 @@ search_elatest=Número de mensajes faltantes o no válidos para buscar
search_withstatus=, con estado $1
folder_inbox=Bandeja de entrada
folder_sent=Correo enviado
folder_sent=Enviado
folder_drafts=Borradores
folder_trash=Basura

View File

@@ -320,7 +320,7 @@ search_elatest=Bilatu beharreko mezu kopuru falta edo baliogabea
search_withstatus=, egoera $1 egoerarekin
folder_inbox=Sarrerako ontzia
folder_sent=Bidalitako mezuak
folder_sent=Bidali
folder_drafts=Turkiarrak
folder_trash=Trash

View File

@@ -320,7 +320,7 @@ search_elatest=تعداد پیام های نامعتبر یا نامعتبر ا
search_withstatus=, with status $1
folder_inbox=صندوق ورودی
folder_sent=نامه ارسال شده
folder_sent=ارسال شد
folder_drafts=پیش نویس
folder_trash=زباله ها

View File

@@ -205,7 +205,6 @@ search_nolatest=Kaikki kansiossa
search_latestnum=Vain viimeisimmät
search_elatest=Puuttuva tai virheellinen määrä etsittäviä viestejä
folder_sent=Lähetetyt
folder_drafts=Luonnokset
folder_trash=Roskakori

View File

@@ -125,6 +125,7 @@ search_onestatus=Vain tila
search_withstatus=, tila $1
folder_inbox=Saapuneet
folder_sent=Lähetetty
detach_err=Tiedoston irrottaminen epäonnistui
detach_edir=Ei tiedostoa tai hakemistoa tallennettavaksi syötettyyn

View File

@@ -320,7 +320,6 @@ search_elatest=nombre de messages à rechercher manquant ou invalide
search_withstatus=, avec statut $1
folder_inbox=Boite de Réception
folder_sent=Courriers Envoyés
folder_drafts=Brouillons
folder_trash=Corbeille

View File

@@ -1,3 +1,5 @@
folder_sent=Envoyé
editor_heading=Titre
editor_paragraph=Paragraphe
editor_fontfamily_default=Défaut

View File

@@ -320,7 +320,7 @@ search_elatest=מספר הודעות חסר או לא חוקי לחיפוש
search_withstatus=, with status $1
folder_inbox=תיבת הדואר הנכנס
folder_sent=שלח מייל
folder_sent=נשלח
folder_drafts=טיוטות
folder_trash=זבל

View File

@@ -320,7 +320,7 @@ search_elatest=Nedostaje ili nevažeći broj poruka za pretraživanje
search_withstatus=, sa statusom $1
folder_inbox=Ulazni spremnik
folder_sent=Poslana pošta
folder_sent=Poslano
folder_drafts=nacrti
folder_trash=Otpad

View File

@@ -147,7 +147,6 @@ search_attach=Szeretne csatolmányokat?
search_allstatus=Minden
folder_inbox=Bejövő levelek
folder_sent=Elküldött levelek
folder_drafts=Piszkozatok
folder_trash=Kuka

View File

@@ -181,6 +181,8 @@ search_latestnum=Csak a legújabb
search_elatest=Hiányzik vagy érvénytelen a keresett üzenetek száma
search_withstatus=, állapotával $1
folder_sent=Küldött
detach_err=A fájl leválasztása nem sikerült
detach_edir=Nincs fájl vagy könyvtár, amelyet menteni kellene a megadott fájlba
detach_eopen=A $1 megnyitása nem sikerült : $2

View File

@@ -316,7 +316,6 @@ search_elatest=Numero di messaggi da cercare mancante o non valido
search_withstatus=, con stato $1
folder_inbox=Posta in arrivo
folder_sent=Posta inviata
folder_drafts=Bozze
folder_trash=Cestino

View File

@@ -6,6 +6,8 @@ view_nobody=Questo messaggio non ha contenuti del corpo.
search_msg6=Risultati della ricerca per $1 nel campo $2
folder_sent=Inviato
left_mail=posta
left_search=Ricerca:
left_folders=Gestisci cartelle

View File

@@ -295,7 +295,6 @@ search_elatest=Missing or invalid number of messages to search
search_withstatus=, with status $1
folder_inbox=Inbox
folder_sent=Sent mail
folder_drafts=Drafts
folder_trash=Trash

View File

@@ -29,6 +29,8 @@ reply_html1=HTMLを作成
search_msg6=$2フィールドの$1の検索結果
search_attach=添付ファイルが必要ですか?
folder_sent=送信済み
left_mail=郵便物
left_search=探す:
left_folders=フォルダーを管理する

View File

@@ -285,7 +285,6 @@ search_elatest=검색 메시지수가 지정되지 않았거나 유효하지 않
search_withstatus=, 상태 $1로
folder_inbox=인박스
folder_sent=메일 보내기
folder_drafts=초안
folder_trash=휴지통

View File

@@ -40,6 +40,8 @@ search_ewhat=입력 된 행과 일치하는 텍스트가 없습니다 $1
search_msg6=$2 필드에서 $1에 대한 검색 결과
search_attach=첨부 파일이 있어야합니까?
folder_sent=전송된
sform_andmode=기준 모드
left_mail=우편

View File

@@ -320,7 +320,7 @@ search_elatest=Trūksta arba netinkamas ieškomų pranešimų skaičius
search_withstatus=, su būsena $1
folder_inbox=Pašto dėžutę
folder_sent=Išsiųsti laiškai
folder_sent=Išsiųsta
folder_drafts=Juodraščiai
folder_trash=Šiukšlių dėžė

View File

@@ -320,7 +320,7 @@ search_elatest=Trūkst vai nav derīgs meklējamo ziņojumu skaits
search_withstatus=, ar statusu $1
folder_inbox=Iesūtne
folder_sent=Nosūtītais pasts
folder_sent=Nosūtīts
folder_drafts=Melnraksti
folder_trash=Atkritumi

View File

@@ -320,7 +320,7 @@ search_elatest=Bilangan mesej yang hilang atau tidak sah untuk dicari
search_withstatus=, dengan status $1
folder_inbox=Peti masuk
folder_sent=Menghantar surat
folder_sent=Dihantar
folder_drafts=Draf
folder_trash=Sampah

View File

@@ -320,7 +320,7 @@ search_elatest=Numru ta 'messaġġi nieqsa jew invalidi biex tfittex
search_withstatus=, bi status $1
folder_inbox=Inbox
folder_sent=Intbagħat il-posta
folder_sent=Mibgħuta
folder_drafts=Abbozzi
folder_trash=Trash

View File

@@ -317,7 +317,6 @@ search_elatest=Ontbrekende of ongeldige aantal berichten om te zoeken
search_withstatus=, met status $1
folder_inbox=Inbox
folder_sent=Verstuur email
folder_drafts=Ontwerpen
folder_trash=Vuilnis

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