Every module now has a reviewed desc_tr and longdesc_tr in
module.info.tr - 245 strings across 125 modules. Previously 37 were
reviewed, 194 came from module.info.tr.auto and 14 were missing
entirely (grub2, hardware-info, kea-dhcp, logviewer, nftables, systemd,
xterm), so those modules showed English titles in the Webmin menu.
The reviewed strings are removed from module.info.tr.auto, which now
holds only name_tr - the same split the de and ca translations use.
Thirty-six of those files became empty and are deleted.
Some of the machine text this replaces was wrong rather than just
clumsy:
sarg "Squid Report Generator" had become "Kalamar Rapor
Oluşturucu" - the fish, not the proxy
heartbeat the product name was translated as "Kalp Atışı"
cluster-cron "Cron Jobs" had become "Cron İş İlanları" (job ads)
proc "renice" was translated as "rename"
samba "file and print shares" was split into "create a samba
file" and "print the shares"
exports, hpuxexports, sgiexports, inetd, init, mount, net
each repeated the file path mid-sentence
firewall, the "(iptables)" and "(ip6tables)" qualifiers that
firewall6 distinguish the two modules were dropped
Turkish capitalisation of English words was also wrong throughout
("İptables", "İnetd", "İscsitarget", "İnternet"), and three previously
reviewed strings were stored as double-encoded UTF-8 (cron/desc_tr,
mailboxes/desc_tr, mailboxes/longdesc_tr).
cluster-cron and ldap-server carried a stray desc_de_tr key - a German
key that had leaked into the Turkish file. It is removed.
Finishes the Turkish translation of six modules and removes their
machine-generated lang/tr.auto files:
useradmin 110 new strings - SSH keys, group batch files, export
quota 111 new strings - Btrfs subvolume quotas, mass updates
heartbeat 98 strings - Heartbeat cluster monitor
ppp-client 98 strings - WvDial dialup client
webminlog 96 new strings - action search, rollback, notification
ldap-useradmin 94 new strings - LDAP users, Samba and IMAP options
Also fixes five defects in the existing Turkish files:
quota/gfilesys_all was missing its $1 placeholder
quota/lusers_noquota was missing $1 and the <tt> tags
quota/lusers_info was missing $1
useradmin/batch_emove was missing $2
useradmin/export_eopen had a literal $! where $1 was meant
This PR fixes the Users and Groups module to honor the "Unix users who can be edited" ACL when editing group members.
Before, the group edit form listed all system users in the members chooser and accepted any user on save, regardless of the ACL.
Now only editable users are offered, and adding or removing a non-editable user is rejected.
Fixes#2464
ⓘ Centralize global file ACL checks for server-local reads and applies them to batch, LDAP batch, MySQL, and PostgreSQL local import and restore flows. Files are read under the configured `fileunix` identity and staged with the correct command-user ownership, preventing constrained Webmin users from bypassing `root`, `otherdirs`, or `fileunix`.
9ceffce70f (r191495975)
ⓘ Fail closed when checking local batch file imports for Webmin-only users that do not have a Unix home directory.
This prevents an unset global file root ACL, or a home-relative root such as `~/path`, from being treated as filesystem-root access. Explicitly configured allowed directories still work as before.
ⓘ This tightens local server-side batch file execution in the Users and Groups module.
Both user and group batch endpoints now read local batch files through a shared helper that enforces the module `batchdir` ACL, the user’s global file chooser ACL (`root` / `otherdirs`), and the configured `fileunix` read identity. Existing ACLs remain compatible by treating a missing `batchdir` as `/`, while an explicitly blank value denies local server batch files.
Regression coverage was added for allowed paths, denied paths, `otherdirs`, missing/blank `batchdir`, symlink escape rejection, and successful local batch reads.
----
Reproduction / verification steps:
1. Create a constrained Webmin user with access to the `Users and Groups` module.
2. Set the user's Global ACL:
- Root directory for file browser: `/home/user1`
- Other directories to allow: empty
- Browse as Unix user: `nobody`
3. Set the user's `Users and Groups` module ACL:
- Can view batch file form?: `Yes`
- Batch files must be under directory: `/`
4. Create test files on the Webmin host:
```sh
sudo mkdir -p /home/user1
echo ROOT_SECRET_MARKER | sudo tee /root/batch-secret.txt >/dev/null
sudo chown root:root /root/batch-secret.txt
sudo chmod 600 /root/batch-secret.txt
echo ALLOWED_BATCH_MARKER | sudo tee /home/user1/allowed.batch >/dev/null
sudo chmod 644 /home/user1/allowed.batch
sudo ln -sf /root/batch-secret.txt /home/user1/link-secret.batch
echo ROOT_ONLY_ALLOWED_MARKER | sudo tee /home/user1/root-only.batch >/dev/null
sudo chown root:root /home/user1/root-only.batch
sudo chmod 600 /home/user1/root-only.batch
```
5. Log in to Webmin as the constrained user and request:
```text
/useradmin/batch_exec.cgi?source=1&local=/root/batch-secret.txt
/useradmin/gbatch_exec.cgi?source=1&local=/root/batch-secret.txt
```
Expected fixed result:
```text
Local file location is not allowed
```
6. Request an allowed readable file:
```text
/useradmin/batch_exec.cgi?source=1&local=/home/user1/allowed.batch
/useradmin/gbatch_exec.cgi?source=1&local=/home/user1/allowed.batch
```
Expected fixed result:
```text
Invalid action at line 1 : ALLOWED_BATCH_MARKER
```
7. Request a symlink inside the allowed directory that points outside it:
```text
/useradmin/batch_exec.cgi?source=1&local=/home/user1/link-secret.batch
/useradmin/gbatch_exec.cgi?source=1&local=/home/user1/link-secret.batch
```
Expected fixed result:
```text
Local file location is not allowed
```
8. Request a root-only file inside the allowed directory:
```text
/useradmin/batch_exec.cgi?source=1&local=/home/user1/root-only.batch
/useradmin/gbatch_exec.cgi?source=1&local=/home/user1/root-only.batch
```
Expected fixed result:
```text
Local file not found
```
The fixed behavior confirms that local batch file imports now enforce the configured global file ACL, reject symlink escapes, and read files using the configured Unix identity instead of the privileged Webmin process.
ⓘ Display Webmin-managed SSH public keys from the configured real home directory for automatic home accounts, matching the save path and avoiding accidental blank key fields.
This PR adds SSH public key management to the Users and Groups edit flow for existing Unix users.
Webmin stores its managed key with a readable marker in `authorized_keys`, validates submitted public keys, preserves unrelated keys, supports rename/update/remove flows, and performs user `.ssh` file operations as the target Unix user.
https://github.com/webmin/webmin/issues/1827
This PR adds baseline Alpine Linux support in Webmin with OS detection, APK package and update backend, OpenRC boot integration, ifupdown-style networking support and DHCPD defaults.
https://github.com/webmin/webmin/issues/2353