Compare commits

..

147 Commits

Author SHA1 Message Date
Jamie Cameron
5aa69015f6 New version bump
Some checks failed
Tests / prove (push) Has been cancelled
Package and upload artifacts / build (push) Has been cancelled
Close inactive / close-inactive (push) Has been cancelled
2026-06-25 16:08:32 -07:00
Ilia Ross
061a4ae0d3 Update changelog for 2.650
Some checks failed
Tests / prove (push) Has been cancelled
Package and upload artifacts / build (push) Has been cancelled
Close inactive / close-inactive (push) Has been cancelled
2026-06-25 00:56:03 +02:00
Jamie Cameron
031a8b8261 Merge pull request #2775 from webmin/dev/fix-miniserv-restart-loop
Fix to recover from a stale PID file whose PID was reused
2026-06-25 08:23:26 +12:00
Ilia Ross
18296d3a55 Fix to simply skip stale PID file check
https://github.com/webmin/webmin/pull/2775#issuecomment-4792905755
2026-06-24 22:13:14 +02:00
Ilia Ross
18bf94af6a Fix possible startup loop with stale PID file after PID reuse
This PR fixes an issue where, after an unclean exit, Webmin can leave `miniserv.pid` behind.

If the kernel later reuses that PID for an unrelated process, the startup guard only checked that the PID was alive and refused to start with “Webmin is already running”.

With systemd restart handling, this can leave Webmin permanently down until the PID file is manually removed.

This change verifies that the live PID actually belongs to `miniserv.pl` running the same config before treating it as an active Webmin instance.

On Linux, it reads `/proc/<pid>/cmdline`, checks the miniserv script, and compares the config file by inode so symlinked paths still match and Usermin is correctly distinguished.

If the PID is confirmed unrelated, the stale PID file is removed and startup continues. If the process cannot be inspected, the previous conservative behavior is preserved.

Also hardens PID-file parsing with chomp and numeric validation, and adds tests for unrelated PID reuse, matching config, symlinked config, different miniserv config, and unreadable command-line fallback.
2026-06-24 17:37:02 +02:00
Jamie Cameron
d2f9e339f2 Merge pull request #2774 from webmin/dev/miniserv-harden-ws-rw
Some checks failed
Tests / prove (push) Has been cancelled
Package and upload artifacts / build (push) Has been cancelled
Fix to harden WebSocket backend writes
2026-06-24 17:35:52 +12:00
Ilia Ross
1a2046b1e3 Fix to harden WebSocket backend writes
This PR ensure proxied WebSocket backend writes complete the full buffer for both TLS and plain TCP connections.

Fail backend handshakes cleanly if writes cannot be completed, preventing truncated headers or frames from corrupting linked WebSocket tunnels.

Originally hinted by this code review: d1d1bad4ae (r189931785)
2026-06-24 01:14:32 +02:00
Ilia Ross
db8e34e528 Fix to read SSH key from real home path
Some checks failed
Tests / prove (push) Has been cancelled
Package and upload artifacts / build (push) Has been cancelled
Close inactive / close-inactive (push) Has been cancelled
ⓘ 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.
2026-06-24 00:54:26 +02:00
Ilia Ross
6a1200bc03 Fix to pass request with header if required 2026-06-24 00:30:06 +02:00
Ilia Ross
c94ddc5ec8 Fix to delete selected unit files safely
ⓘ Make system unit deletion operate on the selected unit file, preserve vendor deletion policy, and reject invalid/stale delete targets before any stop or disable side effects.

https://github.com/webmin/webmin/actions/runs/28058126464/job/83065504870
2026-06-24 00:09:43 +02:00
Ilia Ross
0290ec16a5 Fix to make packaged unit edits opt-in
ⓘ Default packaged unit files to read-only, keep drop-ins as the safe override path, hide boot controls for protected base units, and reject [Install] sections in drop-in overrides.
2026-06-23 23:24:44 +02:00
Ilia Ross
41b476c87a Fix to gate packaged unit deletion behind config
ⓘ Add a disabled-by-default module option for deleting packaged systemd unit files, while keeping local unit deletion allowed and enforcing the policy in both UI and backend paths.
2026-06-23 23:24:43 +02:00
Jamie Cameron
7a68b1b994 Merge pull request #2771 from webmin/dev/useradmin-edit-ssh-keys
Add editable SSH public keys for existing Unix users
2026-06-23 14:15:13 -07:00
Ilia Ross
0dbb5d2f89 Fix to share ifupdown parser with network detection
Some checks failed
Tests / prove (push) Has been cancelled
Package and upload artifacts / build (push) Has been cancelled
2026-06-23 15:00:32 +02:00
Ilia Ross
27dcd2db4a Fix to validate SSH public keys without root privileges 2026-06-23 12:41:58 +02:00
Jamie Cameron
147e53e5db Merge pull request #2769 from webmin/dev/add-deb-dhcpcd-support-1607
Some checks failed
Tests / prove (push) Has been cancelled
Package and upload artifacts / build (push) Has been cancelled
Close inactive / close-inactive (push) Has been cancelled
Add dhcpcd network backend for Debian and Raspberry Pi OS
2026-06-22 21:21:33 -07:00
Jamie Cameron
a970bce5a5 Merge pull request #2760 from webmin/systemd
Add Systemd Services and Units module
2026-06-22 21:11:22 -07:00
Jamie Cameron
d1d1bad4ae Merge pull request #2772 from webmin/dev/miniserv-proxy-websockets
Add support to proxy linked-server WebSockets
2026-06-22 21:06:11 -07:00
Ilia Ross
7878ef466f Fix to expire abandoned linked websocket routes
ⓘ Use the existing scheduled websocket cleanup path for linked-server ws-link routes and expire unopened temporary routes after five minutes.

This limits how long credential-bearing proxy routes can remain in `miniserv.conf` while leaving active and normal websocket cleanup behavior unchanged.
2026-06-23 02:24:17 +02:00
Ilia Ross
14c8d9b61e Fix to clean up consumed linked websocket routes
ⓘ Remove single-use ws-link routes when backend setup fails or after the backend handshake is consumed, with final loop cleanup kept as a fallback.

This prevents failed linked websocket retries from leaving temporary credential-bearing routes in `miniserv.conf`.
2026-06-23 01:30:29 +02:00
Ilia Ross
fa09b191b9 Fix to avoid storing browser sessions for xterm websockets
ⓘ Only store `backend_session` for xterm websocket routes when there is no real browser session and a one-time backend key is needed. Normal xterm sessions continue using the browser session directly.
2026-06-23 01:12:44 +02:00
Ilia Ross
c72d232e2f Fix to restrict Basic auth for websocket routes
ⓘ Require websocket routes to opt in with allow_basic_ws before Basic auth is accepted in session mode. Mark linked ws-link routes and no-cookie backend-session routes as allowed, while leaving normal session-backed routes unmarked.
2026-06-23 01:09:43 +02:00
Ilia Ross
6091f08e37 Fix comment 2026-06-22 23:01:58 +02:00
Ilia Ross
d42a6dc725 Fix parent-prefixed linked websocket rewrites
ⓘ Correct linked-server WebSocket proxy registration for parent-prefixed URLs, rebuild backend Host/Origin from the child server, and prevent duplicate rewrites from invalidating tokens.
2026-06-22 23:01:46 +02:00
Ilia Ross
fac6b478b5 Fix to drain pending SSL data in websocket proxy
ⓘ Check OpenSSL's pending buffer before `select()` in the websocket forwarding loop so TLS-backed linked websocket streams do not stall during bursty backend output.
2026-06-22 21:47:16 +02:00
Ilia Ross
a0b67db65b Fix to simplify Miniserv config lock handling
ⓘ Remove the obsolete eval around `flock` in the `miniserv` config lock helper and report lock, write, and close failures explicitly.
2026-06-22 20:41:02 +02:00
Ilia Ross
26311baab9 Fix to use Webmin config locking for ws-link cleanup
ⓘ Make linked websocket teardown use the same `miniserv.conf.lock` convention as `link.cgi`, release the lock safely on cleanup errors
2026-06-22 20:34:00 +02:00
Ilia Ross
7ba1a39271 Fix parent route cleanup work 2026-06-22 20:02:56 +02:00
Ilia Ross
45ca170c20 Add support to proxy linked-server WebSockets
This PR adds general WebSocket proxying for linked Webmin servers, allowing modules such as `xterm` to work when opened through `servers/link.cgi`.

As requested in https://github.com/webmin/webmin/issues/1866.
2026-06-22 16:19:33 +02:00
Ilia Ross
4064f0675c Fix noisy warning
Some checks failed
Tests / prove (push) Has been cancelled
Package and upload artifacts / build (push) Has been cancelled
Close inactive / close-inactive (push) Has been cancelled
2026-06-22 12:52:32 +02:00
Ilia Ross
886352c6e8 Fix changelog
Some checks failed
Tests / prove (push) Has been cancelled
Package and upload artifacts / build (push) Has been cancelled
2026-06-22 02:23:29 +02:00
Ilia Ross
f2fe6c930f Fix to change systemd ACL helper calls
https://github.com/webmin/webmin/pull/2760#discussion_r3449183293
2026-06-22 02:14:10 +02:00
Ilia Ross
762e400156 Add editable SSH public keys for existing Unix users
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
2026-06-22 01:34:40 +02:00
Ilia Ross
f5bf2be07b Add Apache process limit directive help 2026-06-21 23:25:15 +02:00
Ilia Ross
57d650cf9f Add help files for new Apache options
https://github.com/webmin/webmin/issues/1821
2026-06-21 23:03:19 +02:00
Ilia Ross
859169bbae Update changelog 2026-06-21 23:02:34 +02:00
Ilia Ross
3f48d37e7a Add Apache 2.4 MPM process limit directives
Expose missing prefork, worker, and event MPM tuning directives under Apache Processes and Limits, including MaxRequestWorkers, ServerLimit, ThreadLimit, ThreadsPerChild, and spare-thread controls.

https://github.com/webmin/webmin/issues/1821
2026-06-21 22:52:13 +02:00
Ilia Ross
d3be11911e Add to accept CPU fan speed sensor labels
Allow dashboard CPU fan detection to recognize lm-sensors labels like “cpu fan speed” while leaving non-CPU fan labels ignored.

https://github.com/webmin/webmin/issues/1737
2026-06-21 21:11:58 +02:00
Ilia Ross
65f5beeb11 Add hardware RAID passthrough devices config
Some checks failed
Tests / prove (push) Has been cancelled
Package and upload artifacts / build (push) Has been cancelled
Add an opt-in SMART module config option for manually listing hardware RAID passthrough devices, expose configured physical disks to smartctl, and document the option.

https://github.com/webmin/webmin/issues/1704
2026-06-21 19:47:19 +02:00
Ilia Ross
8ba6a02122 Merge branch 'master' into dev/add-deb-dhcpcd-support-1607 2026-06-21 00:00:06 +02:00
Ilia Ross
74fd072551 Fix to drop unnecessary parens 2026-06-20 20:23:36 +02:00
Ilia Ross
b75a95dd42 Fix missing space after if 2026-06-20 20:22:08 +02:00
Jamie Cameron
8c631bceeb Merge pull request #2770 from webmin/dev/net-module-fixes
Some checks failed
Tests / prove (push) Has been cancelled
Package and upload artifacts / build (push) Has been cancelled
Close inactive / close-inactive (push) Has been cancelled
Fix network module edge cases
2026-06-20 08:59:53 -07:00
Ilia Ross
0cf6654fd9 Fix Postfix localhost destination after hostname domain change
- When the system hostname domain changes, update `localhost.<old-domain>` in Postfix `mydestination` to `localhost.<new-domain>`.

- This sits alongside the existing hostname/FQDN updates for Postfix destinations.

Previous behavior:

`save_dns.cgi` only updated Postfix `mydestination` entries that exactly matched:

- the old short hostname, like `host`
- the old FQDN, like `host.old-domain.test`

It did **not** update:

- `localhost.old-domain.test`

So if you changed:

```text
host.old-domain.test
```

to:

```text
host.new-domain.test
```

Postfix could become:

```text
mydestination = host.new-domain.test, host, localhost.old-domain.test
```

After this hunk, it also updates that localhost domain entry:

```text
localhost.old-domain.test
```

to:

```text
localhost.new-domain.test
```
2026-06-20 15:33:22 +02:00
Ilia Ross
c08468ec48 Fix network config spacing preservation
- Preserve existing spacing and inline comments when rewriting `/etc/nsswitch.conf` `hosts:` lines.

- Preserve indentation, comment prefix, inline comments, and field separators when rewriting `/etc/hosts` rows.

- Add tests for the `nsswitch.conf` spacing/comment behavior.
2026-06-20 15:27:28 +02:00
Ilia Ross
cb4a322042 Fix active virtual interface handling
ⓘ Treat Linux active virtual interfaces as secondary IP addresses instead of independent links, fixing alias parsing, hiding invalid status controls, rejecting down-state creation, and removing existing aliases with ip addr del when needed.

Reproduce path:

Example repro before this fix:

1. Go to **Network Configuration → Network Interfaces → Active Now**.
2. Click **Add a new interface**.
3. Enter:

```text
Name: enp0s5:1
IPv4 address: 10.211.55.21
Netmask: 255.255.255.0
Status: Down
```

4. Click **Create**.

Before the fix, Webmin could still create the alias or handle it inconsistently, because `enp0s5:1` is not a real link that can be “down”. It is just an extra IP address on `enp0s5`.

Expected after the fix:

- The UI should not offer `Status` for active virtual aliases.
- If someone submits `up=0` manually anyway, Webmin rejects it with:
  `Virtual interfaces cannot be created with down status`
- If an existing active virtual alias is saved as down through lower-level code, Webmin removes the IP using something like:

```bash
ip addr del 10.211.55.21/24 dev enp0s5
```
2026-06-20 15:23:09 +02:00
Ilia Ross
f2782073ce Fix to remove factored-out virtual alias changes 2026-06-20 15:09:31 +02:00
Ilia Ross
090aed60df Fix to remove unrelated network formatting cleanups 2026-06-20 14:44:51 +02:00
Ilia Ross
b53ca5b618 Add API helper for dependent form field state
Some checks failed
Tests / prove (push) Has been cancelled
Package and upload artifacts / build (push) Has been cancelled
Close inactive / close-inactive (push) Has been cancelled
ⓘ API is ui_form_field_state_javascript
2026-06-20 03:29:29 +02:00
Ilia Ross
7ebe3f7dfa Add dhcpcd network backend for Debian and Raspberry Pi OS
This PR adds dhcpcd backend support for Debian and Raspberry Pi OS network configuration. It detects dhcpcd only as a final fallback after Netplan, NetworkManager, and ifupdown, preventing Webmin from incorrectly falling back to `/etc/network/interfaces` on dhcpcd-managed systems.

The new backend reads and writes `/etc/dhcpcd.conf`, including DHCP and static IPv4/IPv6 configuration, gateways, static routes, DNS servers, search domains, MTU, and virtual IPv4 aliases. It also supports implicit DHCP-managed interfaces for default dhcpcd setups with no explicit interface blocks, and handles `allowinterfaces` / `denyinterfaces` behavior.

This PR also fixes apply/delete flows for dhcpcd-managed interfaces and virtual aliases, avoids rewriting generated `/etc/resolv.conf`, preserves spacing/comments in touched hosts and nsswitch files, and tightens Active Now handling so virtual aliases are treated as IP addresses rather than independent links.

https://github.com/webmin/webmin/issues/1607
2026-06-20 01:57:50 +02:00
Jamie Cameron
fc546e1e65 Fix key field in new slave zones
https://github.com/webmin/webmin/issues/2767
2026-06-19 15:42:13 -07:00
Jamie Cameron
29c14acf98 Merge pull request #2749 from webmin/dev/tmp-dir-auto
Fix Webmin temp directory setup in Advanced Options
2026-06-19 12:52:18 -07:00
Jamie Cameron
ea02aeb04a Merge pull request #2768 from webmin/dev/miniserv-ipv6-cidr-1570
Some checks failed
Tests / prove (push) Has been cancelled
Package and upload artifacts / build (push) Has been cancelled
Fix IPv6 CIDR access control matching
2026-06-19 10:04:04 -07:00
Jamie Cameron
d306a63744 Merge pull request #2766 from bob7123/fix-sni-callback-all-contexts
Register SNI callback on all SSL contexts, not just the default
2026-06-19 09:59:07 -07:00
Ilia Ross
a9c6fe724a Fix IPv6 CIDR access control matching
This PR fixes Webmin IP access control handling for IPv6 CIDR prefixes that are not divisible by 8, such as `/29` as mentioned in this https://github.com/webmin/webmin/issues/1570 ticket.

Before Webmin validation rejected non-byte-aligned IPv6 network sizes, and the runtime matcher compared IPv6 networks only by whole bytes. This meant valid IPv6 CIDR prefixes could not be used safely in access control rules.

Changes:
- Allow IPv6 access-control prefixes from `/0` through `/128`, without requiring divisibility by 8.
- Add bit-accurate IPv6 prefix matching for ACL checks.
- Apply the same matching behavior in both `miniserv.pl` and `webmin/webmin-lib.pl`.
- Fix IPv6 canonicalization for `::` and trailing `::` forms used by the matcher.
- Add regression tests for `/0`, `/29`, `/32`, `/63`, `/64`, `/127`, and `/128`.
2026-06-19 14:50:24 +02:00
Ilia Ross
7fd89fb350 Fix to clarify Postfix virtual alias map labels
Some checks failed
Tests / prove (push) Has been cancelled
Package and upload artifacts / build (push) Has been cancelled
Close inactive / close-inactive (push) Has been cancelled
ⓘ The Postfix module’s “Virtual Domains” page actually manages `virtual_alias_maps`, not `virtual_mailbox_domains`.

This updates the UI labels, help text, ACL wording, and log message to call the feature "Virtual Alias Maps", reducing confusion without changing behavior.

https://github.com/webmin/webmin/issues/1541
2026-06-19 11:41:08 +02:00
Ilia Ross
ccd2b13942 Fix to enforce private basename for Webmin temp dirs
ⓘ Adds hidden `tempdirname` support and normalizes custom temp paths so Webmin always uses a private final directory like `.webmin`, while keeping the existing permission checks.
2026-06-18 20:48:47 +02:00
bob7123
74bd78ae35 Fix indentation inside foreach loop per review 2026-06-18 08:23:45 +00:00
Ilia Ross
74fd0ca12d Fix XML-RPC CGI execution under miniserv
Some checks failed
Tests / prove (push) Has been cancelled
Package and upload artifacts / build (push) Has been cancelled
Close inactive / close-inactive (push) Has been cancelled
ⓘ Allow xmlrpc.cgi to run when invoked through Webmin's internal CGI do() path while preserving require-safe helper tests, and add regression coverage for CGI header emission.

https://github.com/webmin/webmin/pull/2763#issuecomment-4726296870
2026-06-17 15:06:18 +02:00
Jamie Cameron
8157ff60d2 Merge pull request #2732 from swelljoe/ui-lib-tests-and-quote-escapes
Some checks failed
Tests / prove (push) Has been cancelled
Package and upload artifacts / build (push) Has been cancelled
Close inactive / close-inactive (push) Has been cancelled
Add some ui-lib tests and fix quote escapes
2026-06-16 22:29:23 -07:00
Jamie Cameron
104b353476 Merge pull request #2763 from webmin/xmlrpc-strict-etc
xmlrpc.cgi strict, warnings, critic, tests, and security audit
2026-06-16 22:13:59 -07:00
Jamie Cameron
bd051635fb Merge branch 'master' of github.com:webmin/webmin
Some checks failed
Tests / prove (push) Has been cancelled
Package and upload artifacts / build (push) Has been cancelled
2026-06-16 13:16:46 -07:00
bob7123
8574c70d6b Register SNI callback on all SSL contexts, not just the default
setup_ssl_contexts() registers CTX_set_tlsext_servername_callback only
on the default (*) context. Per-IP contexts from ipcert entries do not
get the callback. When a client connects to a dedicated IP, the per-IP
context is used directly, the SNI callback never fires, and the wrong
certificate is served regardless of the requested hostname.

Fix: register the same SNI callback on every context in %ssl_contexts.
The callback function is unchanged. Clients without SNI still receive
the per-IP certificate. Clients with SNI get the correct certificate
matched by hostname.

Related: https://github.com/virtualmin/virtualmin-gpl/pull/1229

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-06-16 16:18:12 +00:00
Ilia Ross
845f4a40e4 Fix not to print last extra line
Some checks failed
Tests / prove (push) Has been cancelled
Package and upload artifacts / build (push) Has been cancelled
2026-06-16 13:24:37 +02:00
Joe Cooper
b97756b9fb Escape every < 2026-06-15 22:49:27 -05:00
Ilia Ross
8cca3a117f Fix IP address support for Webmin Let’s Encrypt certificates
Some checks failed
Tests / prove (push) Has been cancelled
Package and upload artifacts / build (push) Has been cancelled
Close inactive / close-inactive (push) Has been cancelled
ⓘ Support IPv4/IPv6 identifiers in Webmin Let’s Encrypt requests, add days/months renewal scheduling, and enforce safe automatic renewal defaults for short-lived IP certificates.

a56748a3fc (r188893457)
2026-06-16 03:15:02 +02:00
Ilia Ross
e580dcdd40 Fix to add missing changelog entry
Some checks failed
Tests / prove (push) Has been cancelled
Package and upload artifacts / build (push) Has been cancelled
[no-build]
2026-06-16 00:56:42 +02:00
Ilia Ross
f4b121c059 Update changelog for 2.650 2026-06-16 00:47:03 +02:00
Joe Cooper
25fea8f568 Fix incorrect ui_select callers 2026-06-15 16:38:34 -05:00
Joe Cooper
69548c4bb8 Escape in ui_select, too 2026-06-15 16:35:42 -05:00
Joe Cooper
29f35302ae Potential fix for pull request finding
Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com>
2026-06-15 14:58:47 -04:00
Ilia Ross
baad7081d3 Merge pull request #2765 from webmin/pr/2764
Some checks failed
Tests / prove (push) Has been cancelled
Package and upload artifacts / build (push) Has been cancelled
Fix issues in PR #2764
2026-06-15 16:03:50 +02:00
Ilia Ross
7105021e80 Merge pull request #2764 from DandelionSprout/patch-1
Hotfixes for Norwegian translations.
2026-06-15 16:03:35 +02:00
Ilia Ross
30fb29a300 Fix bugs in translations 2026-06-15 15:51:18 +02:00
Ilia Ross
a1c88df428 Fix to explicitly allow only string 0 or 1 2026-06-15 14:35:24 +02:00
Ilia Ross
cbebe22a14 Update comment 2026-06-15 14:15:52 +02:00
Imre Eilertsen
5f72e2e97e Update no 2026-06-15 13:50:04 +02:00
Ilia Ross
9fb08dd8f0 Fix to rename function name for clarity
3c77f7e3a6
2026-06-15 13:49:44 +02:00
Imre Eilertsen
13a1021661 Update no 2026-06-15 13:48:13 +02:00
Imre Eilertsen
4add8b2e0f Update no 2026-06-15 13:46:03 +02:00
Imre Eilertsen
7884e5f413 Update no 2026-06-15 13:43:45 +02:00
Imre Eilertsen
2187f96d21 Update no 2026-06-15 13:40:56 +02:00
Imre Eilertsen
899c8e270e Update no 2026-06-15 13:39:32 +02:00
Imre Eilertsen
3d26bc80b7 Update no 2026-06-15 13:34:28 +02:00
Imre Eilertsen
841c3e0442 Update no 2026-06-15 13:32:24 +02:00
Ilia Ross
5577c1d50f Add comments for clarity 2026-06-15 13:31:25 +02:00
Imre Eilertsen
e62ee2bb4d Update no 2026-06-15 13:30:56 +02:00
Imre Eilertsen
2007354f27 Update no 2026-06-15 13:24:46 +02:00
Imre Eilertsen
bf397eac7b Update no 2026-06-15 13:23:03 +02:00
Imre Eilertsen
3325cc717e Update no 2026-06-15 13:21:47 +02:00
Imre Eilertsen
305b228c0e Update config.info.no 2026-06-15 13:19:06 +02:00
Joe Cooper
7ca3819d2b xmlrpc.cgi strict, warnings, critic, tests, and security audit 2026-06-15 01:16:09 -05:00
Ilia Ross
162a103c45 Merge branch 'master' into systemd 2026-06-14 23:42:05 +02:00
Ilia Ross
605e575908 Fix to escape select label 2026-06-14 23:37:30 +02:00
Jamie Cameron
1445cd7641 Check permission to delete home dirs in batch operations 2026-06-14 13:29:54 -07:00
Ilia Ross
5b0b6fbf1f Add nftables module to the core too
Some checks failed
Tests / prove (push) Has been cancelled
Package and upload artifacts / build (push) Has been cancelled
Close inactive / close-inactive (push) Has been cancelled
2026-06-14 17:51:30 +02:00
Ilia Ross
de57c42f4a Fix to update nested group module access in parent order
Some checks failed
Tests / prove (push) Has been cancelled
Package and upload artifacts / build (push) Has been cancelled
2026-06-14 16:14:21 +02:00
Ilia Ross
ce998ac478 Add module access helpers 2026-06-14 16:00:41 +02:00
Ilia Ross
f65554cec1 Fix to drop breaks 2026-06-14 14:20:21 +02:00
Ilia Ross
8953add81e Fix it to properly retire and exclude nftables for now
ⓘ Move "custom" and "postgresql" into the core Webmin package and add Debian/RPM package metadata so upgrades retire the old standalone module packages cleanly.
2026-06-14 14:06:18 +02:00
Ilia Ross
630de14410 Add custom nftables postgresql modules
https://forum.virtualmin.com/t/custom-commands-module-has-gone/137403/65?u=ilia
2026-06-14 12:46:43 +02:00
Jamie Cameron
804591f892 Merge branch 'master' of github.com:webmin/webmin
Some checks failed
Tests / prove (push) Has been cancelled
Package and upload artifacts / build (push) Has been cancelled
Close inactive / close-inactive (push) Has been cancelled
2026-06-13 18:51:30 -07:00
Jamie Cameron
a56748a3fc Add support for IP-based lets encrypt certs, with version 5.3 of certbot 2026-06-13 18:49:12 -07:00
Jamie Cameron
854b8e8c2b Merge pull request #2759 from mckaygerhard/master-alpine-mysql-mariadb
Some checks failed
Tests / prove (push) Has been cancelled
Package and upload artifacts / build (push) Has been cancelled
Improve alpine mysql/mariadb default support
2026-06-13 15:38:45 -07:00
Jamie Cameron
b0fbe87592 Merge pull request #2762 from webmin/dev/fix-systemd-unit
Don't fork. systemd prefers one process.
2026-06-13 15:33:41 -07:00
Joe Cooper
bf722a658d Ah, I guess keep 5 minute TimeoutStopSec 2026-06-13 15:59:45 -05:00
Joe Cooper
02bdfc20db Type simple for compat with old systems 2026-06-13 15:43:24 -05:00
Joe Cooper
7d6af20741 Don't need ExecStop if systemd is managing process directly 2026-06-13 15:42:53 -05:00
Герхард PICCORO Lenz McKAY
ebbbf7cecb Update CHANGELOG for software module on Alpine Linux
* Update CHANGELOG for software pointing that alpine linux mysql package is supported for sure since  v 3.16
2026-06-13 10:20:44 -04:00
Joe Cooper
da12554998 Don't fork. systemd prefers one process. 2026-06-13 05:34:03 -05:00
Jamie Cameron
84943943fc Merge pull request #2761 from webmin/dev/init-simplify
Some checks failed
Tests / prove (push) Has been cancelled
Package and upload artifacts / build (push) Has been cancelled
Close inactive / close-inactive (push) Has been cancelled
Fix init module
2026-06-12 22:07:38 -07:00
Ilia Ross
8dd06e3c34 Add ability to hide services table if dedicated module is avail 2026-06-13 00:52:47 +02:00
Ilia Ross
8f8199a4bf Fix to simplify and show only systemd services 2026-06-13 00:14:08 +02:00
Ilia Ross
53c3ee1c5d Fix to show only related config options for current boot system 2026-06-12 23:59:36 +02:00
Ilia Ross
d94000afbd Add Systemd Services and Units module
This PR adds a standalone Systemd Services and Units module for managing systemd units across system and user scopes.

The module keeps systemd-specific behavior separate from the legacy Bootup and Shutdown module and is implemented as standalone `strict`/`warnings` Perl code rather than depending on its existing init helpers. Those helpers intentionally smooth over multiple init systems, while this module keeps systemd-specific file handling, user-manager behavior, ACL checks, and control operations explicit, scoped, and easier to audit.

It includes:

- Tabbed views for services, timers, sockets, paths, targets, storage, resources, devices, and user units
- Guided creation and editing for common unit types, with contextual fields, validation, and help
- User-scoped unit management with linger support and safe handling of home-directory unit files
- Runtime actions for start, stop, restart, enable, disable, status, logs, properties, dependencies, and system-unit mask/unmask
- Drop-in override inventory plus create, edit, and delete flows
- Manual unit-file editing with daemon reload reminders and actions
- Configurable module behavior, visible tabs, display options, and post-create navigation
- Comprehensive ACL controls for system/user scopes, actions, manual edits, drop-ins, linger, reload, backup, and user filters
- Safe Webmin user support through a scoped safe ACL preset
- Virtualmin integration for granting domain owners access to their own systemd user units
- Tests for unit generation, safety checks, ACL behavior, user-unit handling, backup coverage, and Perl::Critic compatibility

A companion Virtualmin PR adds template integration so domain owners can be granted scoped access to their own systemd user units when this module is installed.
2026-06-12 20:55:28 +02:00
itamarperdomo
ed5bc3e4b6 Improve alpine mysql/mariadb default support
* The MySQL module in Alpine it lacks default values. This change
uses the necessary values ​​for the module to function.
* These values ​​work for any version of Alpine Linux from 3.8
to Edge, since MariaDB is and always has been the default package.
* The tools server package was included in the package instalation
* Missing changelog entries were included
2026-06-11 11:50:56 -04:00
Ilia Ross
2024a48acf Fix job name
Some checks failed
Tests / prove (push) Has been cancelled
Package and upload artifacts / build (push) Has been cancelled
Close inactive / close-inactive (push) Has been cancelled
2026-06-10 20:11:24 +02:00
Jamie Cameron
db38923b20 Merge pull request #2753 from webmin/dev/add-alpine-initial-support
Some checks failed
Tests / prove (push) Has been cancelled
Build / build (push) Has been cancelled
Close inactive / close-inactive (push) Has been cancelled
Add minimal Alpine Linux compatibility
2026-06-08 21:17:38 -07:00
Ilia Ross
0d4c65ec04 Fix to create custom temp dirs after validation 2026-06-08 18:53:57 +02:00
Ilia Ross
3215c0d0a3 Fix to rename OpenRC init template
ⓘ Rename webmin-gentoo-init to webmin-openrc-init and update setup/distribution references to use the generic OpenRC template name.
2026-06-08 12:24:28 +02:00
Ilia Ross
c11d67d989 Add support for alternate module descriptions
Some checks failed
Tests / prove (push) Has been cancelled
Build / build (push) Has been cancelled
Close inactive / close-inactive (push) Has been cancelled
2026-06-07 16:26:37 +02:00
Ilia Ross
6457a1d7d1 Fix missing install commands for Xterm.js
Some checks failed
Tests / prove (push) Has been cancelled
Build / build (push) Has been cancelled
Close inactive / close-inactive (push) Has been cancelled
2026-06-07 00:21:44 +02:00
Ilia Ross
91c9f6b4ce Update Xterm.js to fix Control-C on iPadOS/Safari terminals
The issue is a known xterm.js/iPadOS Safari hardware-keyboard bug where Ctrl+C may be reported like Enter/newline instead of terminal interrupt input; it has been fixed upstream in xterm.js.

https://github.com/xtermjs/xterm.js/issues/5721
2026-06-07 00:12:58 +02:00
Ilia Ross
ad06644617 Add minimal Alpine Linux compatibility
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
2026-06-06 23:11:25 +02:00
Ilia Ross
d788bbe9c2 Fix to add a placeholder to tempdir field 2026-06-06 22:49:37 +02:00
Ilia Ross
9577737aeb Fix to harden Webmin temp directory validation
https://github.com/webmin/webmin/pull/2749#discussion_r3368028469
2026-06-06 22:40:52 +02:00
Jamie Cameron
ee50fa41cd Merge pull request #2752 from webmin/dev/fix-broken-renewals
Some checks failed
Tests / prove (push) Has been cancelled
Build / build (push) Has been cancelled
Fix LE renewal to schedule by elapsed interval
2026-06-06 08:37:54 -07:00
Ilia Ross
80497c60b9 Update comment 2026-06-06 12:59:44 +02:00
Ilia Ross
6026a20424 Fix LE renewal to schedule by elapsed interval
The Webmin SSL LE renewal setting is labeled as "Months between automatic renewal", but it was previously saved as a calendar-style cron month expression like `*/N`.

That is not the same as an elapsed renewal interval. Webmin’s cron matcher evaluates month schedules against calendar month numbers, so values like `*/5`, `*/12`, or values above `12` do not reliably mean “renew every N months”. This could cause uneven or dangerously late renewal timing.

This changes the renewal job to use Webmin cron’s elapsed `interval` support instead of calendar-month matching.

- Saves automatic renewal as `renew * 30 * 24 * 60 * 60` seconds.
- Clears the cron time fields so the scheduler uses the interval path only.
- Keeps `months => '*/N'` so the SSL UI can continue to display the saved renewal value.
- Resets the renewal timer only after a newly issued certificate.
- Preserves the existing renewal timer for settings-only saves.
- Migrates existing month-based Let's Encrypt renewal jobs during postinstall.
2026-06-06 00:22:19 +02:00
Ilia Ross
501bddabc8 Fix to make temp dir perms message translatable 2026-06-05 22:13:48 +02:00
Ilia Ross
e434d0b138 Fix to use a variable for default perms 2026-06-05 22:06:49 +02:00
Ilia Ross
42a5838d9e Fix not to expect option saved in config
Some checks failed
Tests / prove (push) Has been cancelled
Build / build (push) Has been cancelled
Close inactive / close-inactive (push) Has been cancelled
2026-06-04 22:35:42 +02:00
Ilia Ross
e10b9eeb40 Fix to treat Dovecot add_config as a single file 2026-06-04 22:29:47 +02:00
Ilia Ross
1e5f3dbb83 Fix to create extra config file on save
https://github.com/virtualmin/virtualmin-gpl/issues/324#issuecomment-4619300683
2026-06-04 22:28:27 +02:00
Ilia Ross
e8a3d9d21b Fix to handle missing user input better
Some checks failed
Tests / prove (push) Has been cancelled
Build / build (push) Has been cancelled
Close inactive / close-inactive (push) Has been cancelled
https://github.com/webmin/webmin/issues/2750
2026-06-04 11:36:41 +02:00
Jamie Cameron
4e6204f774 Merge branch 'master' of github.com:webmin/webmin 2026-06-03 22:33:55 -07:00
Jamie Cameron
95197bb0af Respect option to add new configs to a different file
https://github.com/virtualmin/virtualmin-gpl/issues/324
2026-06-03 22:33:47 -07:00
Ilia Ross
80da8d1915 Fix Webmin temp directory setup in Advanced Options
This fixes saving a custom Webmin temp directory from Webmin Configuration → Advanced Options.

Previously, setting a path like /var/webmin/tmp failed if the directory did not already exist. Users had to create it manually, and it was easy to end up with a bad parent directory such as /var/webmin with 0700, which made the saved temp path unusable.

This change makes Webmin handle the safe parts automatically:

- Creates missing temp directories and parents as 0755

- Validates existing parent directories are traversable by group/other

- Requires the final Webmin temp directory to be root-owned with mode 0755

- Allows shared temp dirs like /var/tmp when root-owned and 1777

- Shows a clear error when existing permissions must be fixed manually
2026-06-04 01:44:32 +02:00
Ilia Ross
f7b8ef379f Fix terminal mode handling
Some checks failed
Tests / prove (push) Has been cancelled
Build / build (push) Has been cancelled
ⓘ Avoid forcing xterm shell PTYs into IO::Stty raw/noecho mode, which can leave interactive shells with broken echo, line editing, and control-key behavior. Keep the existing stty logic for other PTY callers, but add an opt-out flag so xterm can let the shell manage terminal mode normally.

https://github.com/webmin/webmin/issues/2452
2026-06-03 18:43:53 +02:00
Jamie Cameron
758aa4a9f7 Merge pull request #2744 from webmin/dev/fix-stale-mb
Some checks failed
Tests / prove (push) Has been cancelled
Build / build (push) Has been cancelled
Close inactive / close-inactive (push) Has been cancelled
Fix stale mailbox entries after deleted or moved
2026-06-02 21:37:54 -07:00
Jamie Cameron
b2dc27c063 Merge pull request #2747 from webmin/dev/deb-nm
Fix to detect NetworkManager networking on Debian
2026-06-02 21:04:04 -07:00
Ilia Ross
8dfee31542 Fix not to hardcode colors
Some checks failed
Tests / prove (push) Has been cancelled
Build / build (push) Has been cancelled
2026-06-02 20:32:26 +02:00
Ilia Ross
a113309310 Add form grouped buttons API for responsive button
Some checks failed
Tests / prove (push) Has been cancelled
Build / build (push) Has been cancelled
2026-06-02 13:34:31 +02:00
Ilia Ross
1eb4eb85a7 Fix to check empty mail files before opening 2026-05-30 21:22:38 +02:00
Ilia Ross
034d0a09ce Fix to skip unusable Maildir entries
* Note: Ignore zero-byte or unreadable Maildir files when listing messages, log skipped entries, and treat cached zero-byte reads as missing to avoid blank rows and inflated counts.
2026-05-30 16:13:55 +02:00
Ilia Ross
c68d03b211 Fix stale mailbox entries after deleted or moved
Refresh stale Maildir and sorted mailbox indexes when messages disappear, avoid rendering missing messages, and keep IMAP sort indexes in sync with mailbox count changes.
2026-05-29 21:12:58 +02:00
Joe Cooper
76833b9e68 Add some ui-lib tests and fix quote escapes 2026-05-21 23:32:14 -05:00
370 changed files with 18193 additions and 1326 deletions

View File

@@ -1,4 +1,4 @@
name: Build name: Package and upload artifacts
on: on:
push: push:

View File

@@ -1,5 +1,53 @@
## Changelog ## Changelog
#### 2.650 (June 25, 2026)
* Add new Systemd Services and Units module
* Add new GRUB 2 Boot Loader module
* Add new Kea DHCP Server module
* Add WebSocket proxy support to the Webmin Servers Index module
* Add basic Alpine Linux support
* Add IP-based Let's Encrypt certificate support with Certbot 5.3
* Add editable SSH public keys for newly added Unix users in Users and Groups module
* Add improvements to custom Webmin temporary directory handling
* Add quick service and port forwarding controls to the nftables module
* Add optional pre- and post-scripts for scheduled package updates
* Add option to control when scheduled package update email is sent
* Add per-user RPC/API-only access option to the Webmin Users module
* Add Apache 2.4 MPM process limit directives [#1821](https://github.com/webmin/webmin/issues/1821)
* Add dhcpcd network backend for Debian and Raspberry Pi OS [#1607](https://github.com/webmin/webmin/issues/1607)
* Add hardware RAID passthrough devices config in the SMART Status module [#1704](https://github.com/webmin/webmin/issues/1704)
* Update Xterm.js to fix Control-C handling on iPadOS/Safari terminals
* Update Webmin systemd service unit to run without forking
* Fix IPv6 CIDR access control matching [#1570](https://github.com/webmin/webmin/issues/1570)
* Fix Bootup and Shutdown module to show only services and not all units on systemd systems
* Fix Let's Encrypt renewal scheduling to count from the last successful request
* Fix NetworkManager detection on Debian and IPv6 DNS nameserver saving
* Fix Dovecot configuration file handling when saving extra configs
* Fix mailbox listing to skip unusable Maildir entries and remove stale deleted or moved entries
* Fix Postfix module labels to identify virtual alias maps instead of virtual mailbox domains #1541
* Fix Apache module to hide disabled default virtual hosts from the active server list
* Fix Netplan DNS saving to preserve YAML structure
* Fix BIND DNS handling of underscores, trailing dots, and mass record length checks
* Fix MariaDB user creation when using auth plugin syntax
* Fix PHP-FPM monitor on EL systems when using `/etc/php.ini` as the config file
* Fix RPC-only accounts to block browser/module access before module ACL checks
* Fix reflected XSS in Webmin status messages
* Fix authentication state handling for SSL certificate logins and proxied keep-alive requests
* Fix path validation in File Manager, package delete helpers, and Apache virtual host files
* Update the Authentic theme to the latest version with various improvements and fixes:
- Add zooming to stats history graphs by holding shift and scrolling in the dashboard
- Add support for saving live stats history for up to 24 hours without performance impact
- Add better support for the new Nginx, nftables, and upcoming systemd, Kea-DHCP, and GRUB 2 Webmin modules
- Add ability to always show available dashboard panels in theme configuration
- Add support for live stats and terminal WebSocket connections through Webmin Servers Index proxy links
- Fix proxying when Webmin is accessed with a webprefix using Webmin Servers Index module
- Fix theme UI helpers to escape generated markup more safely
- Fix iOS terminal viewport sizing
- Fix editor save handling, clean-state indication and dirty reload guard
- Fix popover positioning, z-index and border color for help bubbles
- Fix the active product switch border in the navigation menu for the dark palette
- Fix to validate password reset return URLs
#### 2.641 (May 10, 2026) #### 2.641 (May 10, 2026)
* Fixed a bug when editing monitors in the System and Server Status module * Fixed a bug when editing monitors in the System and Server Status module
* Fix Fail2Ban default jail options * Fix Fail2Ban default jail options
@@ -912,4 +960,3 @@ This updated includes the latest Authentic theme, a new IPv6 Firewall module for
#### Version 1.140 #### Version 1.140
* Fixed a security hole that allowed any user to view the configuration of any module, even those that they should not have access to. * Fixed a security hole that allowed any user to view the configuration of any module, even those that they should not have access to.
* Fixed a security hole that could allow an attacker to lock valid users by sending a bogus username or password. * Fixed a security hole that could allow an attacker to lock valid users by sending a bogus username or password.

File diff suppressed because one or more lines are too long

View File

@@ -1433,6 +1433,148 @@ dbmclose(%sessiondb);
return $sid; return $sid;
} }
=head2 set_module_access(&modules, enabled, [&users-groups])
Grants or revokes Webmin module access for users and groups. The modules
parameter must be an array ref of module names. The enabled flag should be
1 to grant access, or 0 to revoke access. If the users-groups parameter is
not given, all users and groups are updated. Otherwise, it must be an array
ref of usernames and group names. Group names may be prefixed with @ to
target only a group.
Returns the number of directly updated user and group records.
=cut
sub set_module_access
{
my ($mods, $enabled, $usersgroups) = @_;
$mods ||= [];
return 0 if (!@$mods);
my $set_module_access_list = sub {
my ($obj, $key, $addmods) = @_;
$addmods ||= $mods;
my @old = @{$obj->{$key} || []};
my @new;
if ($enabled) {
@new = &unique(@old, @$addmods);
}
else {
my %remove = map { $_, 1 } @$mods;
@new = grep { !$remove{$_} } @old;
}
return 0 if (join("\0", @old) eq join("\0", @new));
$obj->{$key} = \@new;
return 1;
};
my $own_module_updates = sub {
my ($obj, $inherited) = @_;
return $mods if (!$enabled);
return [] if (!@{$obj->{'ownmods'} || []} && !@$inherited);
return [ grep { &indexof($_, @$inherited) < 0 } @$mods ];
};
my @users = &list_users();
my @groups = &list_groups();
my $all = !defined($usersgroups);
my (%target_user, %target_group);
if (!$all) {
foreach my $ug (@$usersgroups) {
if ($ug =~ /^\@(.*)$/) {
$target_group{$1} = 1;
}
else {
$target_user{$ug} = 1;
$target_group{$ug} = 1;
}
}
}
my $changed = 0;
my (%user_group, %group_parent);
foreach my $g (@groups) {
foreach my $m (@{$g->{'members'} || []}) {
if ($m =~ /^\@(.*)$/) {
$group_parent{$1} = $g;
}
else {
$user_group{$m} = $g;
}
}
}
my (@ordered_groups, %ordered_group, %ordering_group);
my $add_ordered_group;
$add_ordered_group = sub {
my ($g) = @_;
return if (!$g || $ordered_group{$g->{'name'}});
return if ($ordering_group{$g->{'name'}}++);
$add_ordered_group->($group_parent{$g->{'name'}});
delete($ordering_group{$g->{'name'}});
push(@ordered_groups, $g);
$ordered_group{$g->{'name'}}++;
};
foreach my $g (@groups) {
$add_ordered_group->($g);
}
# Update groups first, so member users and sub-groups inherit the new set
foreach my $g (@ordered_groups) {
next if (!$all && !$target_group{$g->{'name'}});
my $gchanged = 0;
my $parent = $group_parent{$g->{'name'}};
my $ownmods = $own_module_updates->(
$g, [ @{$parent ? $parent->{'modules'} || [] : []} ]);
$gchanged += $set_module_access_list->($g, "modules");
$gchanged += $set_module_access_list->($g, "ownmods", $ownmods);
if ($gchanged) {
&modify_group($g->{'name'}, $g);
&update_members(\@users, \@groups, $g->{'modules'},
$g->{'members'});
$changed++;
}
}
# Update directly targeted users
foreach my $u (@users) {
next if (!$all && !$target_user{$u->{'name'}});
my $uchanged = 0;
my $group = $user_group{$u->{'name'}};
my $ownmods = $own_module_updates->(
$u, [ @{$group ? $group->{'modules'} || [] : []} ]);
$uchanged += $set_module_access_list->($u, "modules");
$uchanged += $set_module_access_list->($u, "ownmods", $ownmods);
if ($uchanged) {
&modify_user($u->{'name'}, $u);
$changed++;
}
}
if ($changed) {
undef(%main::acl_hash_cache);
undef(%main::acl_array_cache);
}
return $changed;
}
=head2 enable_module_access(&modules, [&users-groups])
Grants users and groups access to one or more modules. This is a wrapper
around set_module_access.
=cut
sub enable_module_access
{
return &set_module_access($_[0], 1, $_[1]);
}
=head2 disable_module_access(&modules, [&users-groups])
Revokes users and groups access to one or more modules. This is a wrapper
around set_module_access.
=cut
sub disable_module_access
{
return &set_module_access($_[0], 0, $_[1]);
}
=head2 update_members(&allusers, &allgroups, &modules, &members) =head2 update_members(&allusers, &allgroups, &modules, &members)
Update the modules for members users and groups of some group. The parameters Update the modules for members users and groups of some group. The parameters
@@ -2368,4 +2510,3 @@ return $mailbox."\@".join(".", @doms);
} }
1; 1;

View File

@@ -1,9 +1,9 @@
index_title=Webmin Brukere index_title=Webmin Brukere
index_user=Brukere index_user=Brukere
index_modules=Moduler index_modules=Moduler
index_create=Opprett ny Webmin bruker index_create=Opprett ny Webmin-bruker
index_screate=Opprett ny sikker bruker index_screate=Opprett ny sikker bruker
index_convert=Konverter Unix til Webmin brukere index_convert=Konverter Unix til Webmin-brukere
index_cert=Krever SSL sertifikat index_cert=Krever SSL sertifikat
index_twofactor=To-faktor autentisering index_twofactor=To-faktor autentisering
index_certmsg=Klikk på denne knappen for å spørre etter et SSL sertifikat som vil gi deg sikker login i Webmin uten å måtte skrive brukernavn og passord. index_certmsg=Klikk på denne knappen for å spørre etter et SSL sertifikat som vil gi deg sikker login i Webmin uten å måtte skrive brukernavn og passord.
@@ -14,7 +14,7 @@ index_global=Global ACL
index_users=Webmin Brukere index_users=Webmin Brukere
index_groups=Webmin Grupper index_groups=Webmin Grupper
index_group=Gruppe index_group=Gruppe
index_nousers=Ingen editerbar Webmin bruker er definert. index_nousers=Ingen editerbar Webmin-bruker er definert.
index_nogroups=Ingen editerbar Webmin gruppe er definert. index_nogroups=Ingen editerbar Webmin gruppe er definert.
index_gcreate=Lag en ny Webmin gruppe index_gcreate=Lag en ny Webmin gruppe
index_members=Medlemmer index_members=Medlemmer
@@ -30,11 +30,11 @@ index_eglist=Kunne ikke liste grupper : $1
edit_title=Rediger Webmin Bruker edit_title=Rediger Webmin Bruker
edit_title2=Lag Webmin Bruker edit_title2=Lag Webmin Bruker
edit_title3=Opprett sikker Webmin bruker edit_title3=Opprett sikker Webmin-bruker
edit_readonly=Denne Webmin brukeren bør ikke redigeres siden den vedlikeholdes av modulen $1. <a href='$2'>Klikk her</a> for å ignorere denne advarselen og redigere brukeren allikevel - men vær oppmerksom på at manuelle endringer kan bli overskrevet! edit_readonly=Denne Webmin-brukeren bør ikke redigeres siden den vedlikeholdes av modulen $1. <a href='$2'>Klikk her</a> for å ignorere denne advarselen og redigere brukeren allikevel - men vær oppmerksom på at manuelle endringer kan bli overskrevet!
edit_rights=Tilgangsrettigheter for Webmin bruker edit_rights=Tilgangsrettigheter for Webmin-bruker
edit_user=Brukernavn edit_user=Brukernavn
edit_cloneof=Klober Webmin bruker edit_cloneof=Klober Webmin-bruker
edit_real=Virkelig navn edit_real=Virkelig navn
edit_group=Medlem av gruppe edit_group=Medlem av gruppe
edit_pass=Passord edit_pass=Passord
@@ -89,7 +89,7 @@ edit_selall=Velg alle
edit_invert=Inverter valg edit_invert=Inverter valg
edit_hide=Skjul ubrukte edit_hide=Skjul ubrukte
edit_switch=Bytt til bruker edit_switch=Bytt til bruker
edit_return=Webmin bruker edit_return=Webmin-bruker
edit_return2=Webmin gruppe edit_return2=Webmin gruppe
edit_rbacdeny=RBAC tilgangsmodus edit_rbacdeny=RBAC tilgangsmodus
edit_rbacdeny0=RBAC kontrollerer valgte modul ACLer edit_rbacdeny0=RBAC kontrollerer valgte modul ACLer
@@ -126,21 +126,21 @@ save_eoverlay=Et tema-overlegg kan ikke velges med mindre et tema er
save_edeny=Du kan ikke nekte deg selv tilgang til Webmin Bruker modulen save_edeny=Du kan ikke nekte deg selv tilgang til Webmin Bruker modulen
save_eos=Det samme som Unix passord opsjonen er ikke støttet på ditt operativsystem. save_eos=Det samme som Unix passord opsjonen er ikke støttet på ditt operativsystem.
save_emd5=Det samme som Unix passord opsjonen kan ikke brukes på systemer med MD5 kryptering save_emd5=Det samme som Unix passord opsjonen kan ikke brukes på systemer med MD5 kryptering
save_eunix=Unix bruker '$1' eksisterer ikke save_eunix=Unix-brukeren '$1' eksisterer ikke
save_emod=Du kan ikke bevilge tilgang til modul '$1' save_emod=Du kan ikke bevilge tilgang til modul '$1'
save_ecreate=Du har ikke tilgang til å opprette brukere save_ecreate=Du har ikke tilgang til å opprette brukere
save_euser=Du har ikke tilgang til å editere denne brukeren save_euser=Du har ikke tilgang til å redigere denne brukeren
save_ecolon=Passord kan ikke inneholde : karakteren save_ecolon=Passord kan ikke inneholde : karakteren
save_epass=Passord er ikke gyldig : $1 save_epass=Passord er ikke gyldig : $1
save_eself=Din vanlige IP adresse ($1) vil bli nektet save_eself=Din vanlige IP-adresse ($1) vil bli nektet
save_epam=PAM autentisering er ikke tilgjengelig fordi <tt>Authen::PAM</tt> Perl modulen ikke er installert eller ikke virker ordentlig. save_epam=PAM autentisering er ikke tilgjengelig fordi <tt>Authen::PAM</tt> Perl modulen ikke er installert eller ikke virker ordentlig.
save_epam2=Du kan bruke Webmin's Perl Modules modul til <a href='$1'>laste ned å installere Authen::PAM</a> nå. save_epam2=Du kan bruke Webmin's Perl Modules modul til <a href='$1'>laste ned å installere Authen::PAM</a> nå.
save_egroup=Du har ikke rettigheter til å tildele til den gruppen save_egroup=Du har ikke rettigheter til å tildele til den gruppen
save_enone=Ingen adresse er tastet inn save_enone=Ingen adresse er tastet inn
save_enet='$1' er ikke en gyldig nettverks adresse save_enet='$1' er ikke en gyldig nettverksadresse
save_emask='$1' er ikke en gyldig nettmaske save_emask='$1' er ikke en gyldig nettmaske
save_eip='$1' er ikke en komplett IP eller nettverks adresse save_eip='$1' er ikke en komplett IP eller nettverksadresse
save_ehost=Kunne ikke finne IP adresse for '$1' save_ehost=Kunne ikke finne IP-adresse for '$1'
save_elogouttime=Manglende eller ikke-numerisk tid for utlogging ved inaktivitet save_elogouttime=Manglende eller ikke-numerisk tid for utlogging ved inaktivitet
save_eminsize=Manglende eller ikke-numerisk minimum passordlengde save_eminsize=Manglende eller ikke-numerisk minimum passordlengde
save_edays=Ingen tillatte dager valgt save_edays=Ingen tillatte dager valgt
@@ -223,11 +223,11 @@ acl_times=Kan endre tillatte innloggings-tider?
acl_pass=Kan endre passord-begrensinger? acl_pass=Kan endre passord-begrensinger?
acl_sql=Kan konfigurere databasen for brukere og grupper? acl_sql=Kan konfigurere databasen for brukere og grupper?
log_modify=Modifisert Webmin bruker $1 log_modify=Modifisert Webmin-bruker $1
log_rename=Skiftet navn på Webmin bruker $1 til $2 log_rename=Skiftet navn på Webmin-bruker $1 til $2
log_create=Opprettet Webmin bruker $1 log_create=Opprettet Webmin-bruker $1
log_clone=Klonet Webmin bruker $1 til $2 log_clone=Klonet Webmin-bruker $1 til $2
log_delete=Slettet Webmin bruker $1 log_delete=Slettet Webmin-bruker $1
log_acl=Oppdatert tilgang for $1 i $2 log_acl=Oppdatert tilgang for $1 i $2
log_reset=Tilbakestilte tilgang for $1 i $2 log_reset=Tilbakestilte tilgang for $1 i $2
log_cert=Utlevert sertifikat for bruker $1 log_cert=Utlevert sertifikat for bruker $1
@@ -235,10 +235,10 @@ log_modify_g=Modifisert Webmin gruppe $1
log_rename_g=Forandret navn på Webmin gruppe $1 til $2 log_rename_g=Forandret navn på Webmin gruppe $1 til $2
log_create_g=Opprettet Webmin gruppe $1 log_create_g=Opprettet Webmin gruppe $1
log_delete_g=Slettet Webmin gruppe $1 log_delete_g=Slettet Webmin gruppe $1
log_switch=Byttet til Webmin bruker $1 log_switch=Byttet til Webmin-bruker $1
log_delete_users=Slettet $1 Webmin brukere log_delete_users=Slettet $1 Webmin-brukere
log_delete_groups=Slettet $1 Webmin grupper log_delete_groups=Slettet $1 Webmin grupper
log_joingroup=La til $1 Webmin brukere i gruppe $2 log_joingroup=La til $1 Webmin-brukere i gruppe $2
log_pass=Endret passord-begrensinger log_pass=Endret passord-begrensinger
log_unix=Endret unix bruker-autentisering log_unix=Endret unix bruker-autentisering
log_sync=Endret unix bruker-synkronisering log_sync=Endret unix bruker-synkronisering
@@ -273,7 +273,7 @@ gsave_edesc=Ugyldig beskrivelse - tegnet : er ikke tillatt
convert_title=Konverter Brukere convert_title=Konverter Brukere
convert_ecannot=Du har ikke tilgang til å konvertere Unix brukere convert_ecannot=Du har ikke tilgang til å konvertere Unix brukere
convert_nogroups=Ingen Webmin gruppe er definert på ditt system. Du må i det minste lage en gruppe før du konverterer brukere, dette for å kunne sette rettigheter for konverterte brukere. convert_nogroups=Ingen Webmin gruppe er definert på ditt system. Du må i det minste lage en gruppe før du konverterer brukere, dette for å kunne sette rettigheter for konverterte brukere.
convert_desc=Denne Dette feltet lar deg konvertere eksisterende Unix brukere til Webmin brukere. Rettighetene til hver nye Webmin bruker vil bestemmes av rettighetene til gruppen som valgt over. convert_desc=Denne Dette feltet lar deg konvertere eksisterende Unix-brukere til Webmin-brukere. Rettighetene til hver nye Webmin-bruker vil bestemmes av rettighetene til gruppen som valgt over.
convert_0=Alle brukere convert_0=Alle brukere
convert_1=Bare brukere convert_1=Bare brukere
convert_2=Alle unntagen brukere convert_2=Alle unntagen brukere
@@ -284,43 +284,43 @@ convert_sync2=Synk. passord med Unix-bruker i fremtiden?
convert_ok=Konverter nå convert_ok=Konverter nå
convert_err=Kunne ikke konvertere brukere convert_err=Kunne ikke konvertere brukere
convert_eusers=Ingen brukere inntastet convert_eusers=Ingen brukere inntastet
convert_egroup=Unix gruppe eksisterer ikke convert_egroup=Unix-gruppen eksisterer ikke
convert_emin=Ugyldig minimum bruker ID (UID) convert_emin=Ugyldig minimum bruker-ID (UID)
convert_emax=Ugyldig maksimum bruker ID (UID) convert_emax=Ugyldig maksimum bruker-ID (UID)
convert_ewgroup=Ingen sånn Webmin gruppe convert_ewgroup=Ingen sånn Webmin gruppe
convert_ewgroup2=Du har ikke rettigheter til å tilordne nye brukere til denne gruppen convert_ewgroup2=Du har ikke rettigheter til å tilordne nye brukere til denne gruppen
convert_skip=Hoppet over $1 convert_skip=Hoppet over $1
convert_exists=$1 Eksisterer allerede convert_exists=$1 Eksisterer allerede
convert_invalid=$1 er ikke et gyldig Webmin brukernavn convert_invalid=$1 er ikke et gyldig Webmin-brukernavn
convert_added=$1 er lagt til convert_added=$1 er lagt til
convert_msg=Konverterer Unix brukere... convert_msg=Konverterer Unix-brukere...
convert_user=Unix-bruker convert_user=Unix-bruker
convert_action=Handling utført convert_action=Handling utført
convert_done=$1 brukere konvertert, $2 ugyldig, $3 finnes allerede, $4 ekskludert. convert_done=$1 brukere konvertert, $2 ugyldig, $3 finnes allerede, $4 ekskludert.
convert_users=Brukere som skal konverteres convert_users=Brukere som skal konverteres
sync_title=Unix Bruker Synkronisering sync_title=Unix-brukersynkronisering
sync_desc=Dette feltet lar deg konfigurere automatisk synkronisering av Unix brukere laget via Webmin og brukere i denne modulen. sync_desc=Dette feltet lar deg konfigurere automatisk synkronisering av Unix-brukere laget via Webmin og brukere i denne modulen.
sync_nogroups=Ingen Webmin gruppe er definert på ditt system. Du må i det minste lage en gruppe før du konverterer brukere, dette for å kunne sette rettigheter for konverterte brukere. sync_nogroups=Ingen Webmin gruppe er definert på ditt system. Du må i det minste lage en gruppe før du konverterer brukere, dette for å kunne sette rettigheter for konverterte brukere.
sync_when=Synkroniser når sync_when=Synkroniser når
sync_create=Opprett Webmin bruker når en Unix bruker blir laget. sync_create=Opprett Webmin-bruker når en Unix bruker blir laget.
sync_update=Oppdater passende Webmin bruker når Unix brukere blir oppdatert. sync_update=Oppdater passende Webmin-bruker når Unix-brukere blir oppdatert.
sync_delete=Slett passende Webmin bruker når Unix brukere blir slettet. sync_delete=Slett passende Webmin-bruker når Unix-brukere blir slettet.
sync_group=Tilordne ny bruker til Webmin gruppe sync_group=Tilordne ny bruker til Webmin gruppe
sync_unix=Sett passord for nye brukere til Unix autentisering sync_unix=Sett passord for nye brukere til Unix autentisering
sync_ecannot=Du har ikke rettigheter til å konfigurere bruker synkronisering. sync_ecannot=Du har ikke rettigheter til å konfigurere bruker synkronisering.
unix_title=Unix Bruker Autentisering unix_title=Unix-brukerautentisering
unix_err=Kunne ikke lagre Unix autentisering unix_err=Kunne ikke lagre Unix autentisering
unix_desc=Denne siden lar deg konfigurere Webmin til verifisere login forsøk med systemets bruker liste og PAM. Dette kan være nyttig hvis du har mange eksisterende Unix brukere som du ønsker å gi tilgang til Webmin. unix_desc=Denne siden lar deg konfigurere Webmin til verifisere login forsøk med systemets bruker liste og PAM. Dette kan være nyttig hvis du har mange eksisterende Unix-brukere som du ønsker å gi tilgang til Webmin.
unix_def=Tillat bare login av Webmin brukere unix_def=Tillat bare login av Webmin-brukere
unix_sel=Tillat Unix brukere i listen nedenfor å logge inn .. unix_sel=Tillat Unix-brukere i listen nedenfor å logge inn ..
unix_mode=Tillat unix_mode=Tillat
unix_mall=Alle brukere unix_mall=Alle brukere
unix_group=Medlemmer i gruppen.. unix_group=Medlemmer i gruppen..
unix_user=Tillat alle Unix brukere login med rettigheter som Users unix_user=Tillat alle Unix-brukere login med rettigheter som Users
unix_who=Bruker eller gruppe unix_who=Bruker eller gruppe
unix_to=Som Webmin bruker unix_to=Som Webmin-bruker
unix_ecannot=Du har ikke rettigheter til å konfigurere Unix bruker autentisering unix_ecannot=Du har ikke rettigheter til å konfigurere Unix bruker autentisering
unix_epam=Unix autentisering er ikke tilgjengelig fordi <tt>Authen::PAM</tt> Perl modul ikke er installert eller ikke virker som den skal. unix_epam=Unix autentisering er ikke tilgjengelig fordi <tt>Authen::PAM</tt> Perl modul ikke er installert eller ikke virker som den skal.
unix_all=Tillat alle Unix brukere unix_all=Tillat alle Unix brukere
@@ -329,12 +329,12 @@ unix_deny=Nekt listede Unix brukere
unix_none=Ingen brukere angitt unix_none=Ingen brukere angitt
unix_euser='$1' er ikke et gyldig brukernavn unix_euser='$1' er ikke et gyldig brukernavn
unix_egroup='$1' er ikke et gyldig gruppenavn unix_egroup='$1' er ikke et gyldig gruppenavn
unix_shells=Nekt Unix brukere hvis skall ikke finnes i filen unix_shells=Nekt Unix-brukere hvis skall ikke finnes i filen
unix_eshells=Manglende eller ikke-eksisterende shells fil unix_eshells=Manglende eller ikke-eksisterende shells fil
unix_restrict2=Ekstra restriksjoner unix_restrict2=Ekstra restriksjoner
unix_ewhogroup=Manglende tillatt gruppe i rad $1 unix_ewhogroup=Manglende tillatt gruppe i rad $1
unix_ewhouser=Manglende tilllatt bruker i rad $1 unix_ewhouser=Manglende tilllatt bruker i rad $1
unix_enone=Ingen tillatte Unix brukere og grupper ble angitt unix_enone=Ingen tillatte Unix-brukere og grupper ble angitt
unix_same=&lt;Samme bruker eller gruppe&gt; unix_same=&lt;Samme bruker eller gruppe&gt;
unix_sudo=TIllatt brukere som kan kjøre alle kommandoer via <tt>sudo</tt> å logge inn som <tt>root</tt> unix_sudo=TIllatt brukere som kan kjøre alle kommandoer via <tt>sudo</tt> å logge inn som <tt>root</tt>
unix_pamany=Behandle brukere som bare sender PAM validering som $1 unix_pamany=Behandle brukere som bare sender PAM validering som $1
@@ -345,9 +345,9 @@ unix_utable=Tillatte Unix brukere
sessions_title=Aktuell Login Session sessions_title=Aktuell Login Session
sessions_id=Sessions ID sessions_id=Sessions ID
sessions_user=Webmin bruker sessions_user=Webmin-bruker
sessions_login=Innlogget sessions_login=Innlogget
sessions_host=IP adresse sessions_host=IP-adresse
sessions_lview=Se logger.. sessions_lview=Se logger..
sessions_actions=Handlinger.. sessions_actions=Handlinger..
sessions_logouts=Vis også utloggede sesjoner.. sessions_logouts=Vis også utloggede sesjoner..
@@ -357,7 +357,7 @@ sessions_in=Innlogget
sessions_out=Logget ut sessions_out=Logget ut
sessions_kill=Koble fra.. sessions_kill=Koble fra..
logins_title=Siste Webmin innlogginger logins_title=Siste Webmin-innlogginger
hide_title=Skjul ubrukte moduler hide_title=Skjul ubrukte moduler
hide_desc=Følgende moduler vil bli fjernet fra modul tilgangslisten for $1 siden deres tilhørende tjenere ikke er installert på systemet ditt .. hide_desc=Følgende moduler vil bli fjernet fra modul tilgangslisten for $1 siden deres tilhørende tjenere ikke er installert på systemet ditt ..
@@ -374,7 +374,7 @@ rbac_desc=Webmin's RBAC integration provides a way for user module and ACL permi
rbac_esolaris=RBAC støttes bare på Solaris systemer for øyeblikket, og kan derfor ikke brukes på dette $1 systemet. rbac_esolaris=RBAC støttes bare på Solaris systemer for øyeblikket, og kan derfor ikke brukes på dette $1 systemet.
rbac_eperl=Perl-modulen $1, som behøves for RBAC integrasjon, er ikke installert. <a href='$2'>Klikk her</a> for å installere den nå. rbac_eperl=Perl-modulen $1, som behøves for RBAC integrasjon, er ikke installert. <a href='$2'>Klikk her</a> for å installere den nå.
rbac_ecpan=Du har ikke tilgang til Webmins Perl Moduler side for å kunne installere den nødvendige $1 modulen for RBAC integrasjon. rbac_ecpan=Du har ikke tilgang til Webmins Perl Moduler side for å kunne installere den nødvendige $1 modulen for RBAC integrasjon.
rbac_ok=RBAC integrasjon er tilgjengelig for dette systemet, og kan aktiveres per bruker på siden Rediger Webmin bruker. rbac_ok=RBAC integrasjon er tilgjengelig for dette systemet, og kan aktiveres per bruker på siden Rediger Webmin-bruker.
udeletes_err=Kunne ikke slette brukere udeletes_err=Kunne ikke slette brukere
udeletes_jerr=Kunne ikke legg til brukere i gruppe udeletes_jerr=Kunne ikke legg til brukere i gruppe
@@ -391,7 +391,7 @@ gdeletes_rusure=Er du sikker på at du ønsker å slette de $1 valgte gruppene o
gdeletes_users=Valgte grupper: $1 gdeletes_users=Valgte grupper: $1
gdeletes_ok=Slett grupper gdeletes_ok=Slett grupper
pass_title=Passord begrensinger pass_title=Passordbegrensinger
pass_ecannot=Du har ikke lov til å redigere passord-begrensinger pass_ecannot=Du har ikke lov til å redigere passord-begrensinger
pass_header=Innstillinger for Webmin passord begrensinger pass_header=Innstillinger for Webmin passord begrensinger
pass_minsize=Minimum passordlengde pass_minsize=Minimum passordlengde
@@ -424,7 +424,7 @@ cpass_old=Gamle passord kan ikke brukes på nytt
sql_title=Bruker- og gruppe-database sql_title=Bruker- og gruppe-database
sql_ecannot=Du har ikke lov til å konfigurere bruker- og gruppedatabasen sql_ecannot=Du har ikke lov til å konfigurere bruker- og gruppedatabasen
sql_header=Instillinger for database backend for brukere og grupper sql_header=Innstillinger for database backend for brukere og grupper
sql_host=Vertsnavn sql_host=Vertsnavn
sql_user=Brukernavn sql_user=Brukernavn
sql_pass=Passord sql_pass=Passord
@@ -456,7 +456,7 @@ sql_edb=Ugyldig databasenavn (mellomrom ikke tillatt)
sql_eprefix=Manglende eller ugyldig base DN (mellomrom ikke tillatt) sql_eprefix=Manglende eller ugyldig base DN (mellomrom ikke tillatt)
sql_eprefix2=Ugyldig-utseende base DN - skal være på formen <tt>dc=mittdomene,dc=no</tt> sql_eprefix2=Ugyldig-utseende base DN - skal være på formen <tt>dc=mittdomene,dc=no</tt>
sql_title2=Opprett manglende tabeller sql_title2=Opprett manglende tabeller
sql_tableerr=Instillinger for bruker- og gruppedatabase er gyldig, men noen tabeller som Webmin trenger, mangler : $1 sql_tableerr=Innstillinger for bruker- og gruppedatabase er gyldig, men noen tabeller som Webmin trenger, mangler : $1
sql_tableerr2=Klikk på knappen <b>Opprett tabeller</b> nedenfor, for å få opprettet dem automatisk, eller du kan kjøre SQL uttrykket nedenfor manuelt. sql_tableerr2=Klikk på knappen <b>Opprett tabeller</b> nedenfor, for å få opprettet dem automatisk, eller du kan kjøre SQL uttrykket nedenfor manuelt.
sql_make=Opprett tabeller sql_make=Opprett tabeller
sql_title3=Opprett manglende DN sql_title3=Opprett manglende DN
@@ -489,7 +489,7 @@ twofactor_title=To-faktor autentisering
twofactor_disable=Deaktiver to-faktor autentisering twofactor_disable=Deaktiver to-faktor autentisering
twofactor_already=Din Webmin-bruker har allerede to-faktor autentisering aktivert med leverandør %1 og konto ID %2. twofactor_already=Din Webmin-bruker har allerede to-faktor autentisering aktivert med leverandør %1 og konto ID %2.
twofactor_already2=Webmin-brukeren %3 har allerede to-faktor autentisering aktivert med leverandør %1 og konto ID %2. twofactor_already2=Webmin-brukeren %3 har allerede to-faktor autentisering aktivert med leverandør %1 og konto ID %2.
twofactor_desc=Denne siden lar deg aktivere to-faktor autentisering for din Webmin bruker vha. <a href='$2' target=_blank>$1</a>. Når denne er aktivert kreves det et ekstra autentiserings-token når du logger inn på Webmin. twofactor_desc=Denne siden lar deg aktivere to-faktor autentisering for din Webmin-bruker vha. <a href='$2' target=_blank>$1</a>. Når denne er aktivert kreves det et ekstra autentiserings-token når du logger inn på Webmin.
twofactor_desc2=Denne siden lar deg aktivere to-faktor autentisering for Webmin-brukeren $1 vha. <a href='$2' target=_blank>$1</a>. Når denne er aktivert vil det kreves et ekstra autentiserings-token for å logge inn på Webmin. twofactor_desc2=Denne siden lar deg aktivere to-faktor autentisering for Webmin-brukeren $1 vha. <a href='$2' target=_blank>$1</a>. Når denne er aktivert vil det kreves et ekstra autentiserings-token for å logge inn på Webmin.
twofactor_enable=Meld inn til to-faktor autentisering twofactor_enable=Meld inn til to-faktor autentisering
twofactor_header=Detaljer for innmelding til to-faktor autentisering twofactor_header=Detaljer for innmelding til to-faktor autentisering

View File

@@ -701,6 +701,152 @@ is(group_line({ name => 'empty' }),
'delete_group removes the only group'); 'delete_group removes the only group');
} }
# set_module_access and wrappers: batch enable/disable module visibility for
# users and groups, while keeping ownmods in sync for future group refreshes.
{
_reset_fixture();
create_user({ name => 'alice',
pass => 'x',
modules => [ 'useradmin', 'apache' ],
ownmods => [ 'apache' ] });
create_group({ name => 'wheel',
members => [ 'alice' ],
modules => [ 'useradmin', 'apache' ],
desc => 'Sysadmins',
ownmods => [ 'apache' ] });
_clear_caches();
is(disable_module_access([ 'apache' ]), 2,
'disable_module_access without targets updates all users and groups');
my $alice = get_user('alice');
my $wheel = get_group('wheel');
is_deeply($alice->{'modules'}, [ 'useradmin' ],
'global disable removes module from user modules');
is_deeply($alice->{'ownmods'}, [],
'global disable removes module from user ownmods');
is_deeply($wheel->{'modules'}, [ 'useradmin' ],
'global disable removes module from group modules');
is_deeply($wheel->{'ownmods'}, [],
'global disable removes module from group ownmods');
}
{
_reset_fixture();
create_user({ name => 'alice',
pass => 'x',
modules => [ 'useradmin' ] });
create_group({ name => 'wheel',
members => [ 'alice' ],
modules => [ 'useradmin' ],
desc => 'Sysadmins' });
_clear_caches();
is(enable_module_access([ 'apache' ], [ '@wheel' ]), 1,
'enable_module_access can target one group by @name');
my $alice = get_user('alice');
my $wheel = get_group('wheel');
is_deeply($wheel->{'modules'}, [ 'useradmin', 'apache' ],
'targeted group enable adds module to group modules');
is_deeply($wheel->{'ownmods'}, [],
'targeted group enable leaves top-level group ownmods unchanged');
is_deeply($alice->{'modules'}, [ 'useradmin', 'apache' ],
'targeted group enable propagates to member user modules');
is_deeply($alice->{'ownmods'}, [],
'targeted group enable leaves member user ownmods unchanged');
is(disable_module_access([ 'apache' ], [ '@wheel' ]), 1,
'disable_module_access can target one group by @name');
$alice = get_user('alice');
$wheel = get_group('wheel');
is_deeply($wheel->{'modules'}, [ 'useradmin' ],
'targeted group disable removes module from group modules');
is_deeply($wheel->{'ownmods'}, [],
'targeted group disable removes module from group ownmods');
is_deeply($alice->{'modules'}, [ 'useradmin' ],
'targeted group disable propagates to member user modules');
}
{
_reset_fixture();
create_user({ name => 'carol',
pass => 'x',
modules => [ 'useradmin' ] });
create_group({ name => 'child',
members => [ 'carol' ],
modules => [ 'useradmin' ],
desc => 'Child group' });
create_group({ name => 'parent',
members => [ '@child' ],
modules => [ 'useradmin' ],
desc => 'Parent group' });
_clear_caches();
is(enable_module_access([ 'apache' ]), 1,
'enable_module_access handles all nested groups');
my $child = get_group('child');
my $carol = get_user('carol');
is_deeply($child->{'modules'}, [ 'useradmin', 'apache' ],
'child group inherits module from parent enabled later in file');
is_deeply($child->{'ownmods'}, [],
'child group does not record inherited module as ownmod');
is_deeply($carol->{'modules'}, [ 'useradmin', 'apache' ],
'child group member inherits module through nested groups');
is_deeply($carol->{'ownmods'}, [],
'child group member does not record inherited module as ownmod');
}
{
_reset_fixture();
create_user({ name => 'root',
pass => 'x',
modules => [ 'useradmin' ] });
_clear_caches();
is(enable_module_access([ 'apache' ], [ 'root' ]), 1,
'enable_module_access can target a standalone user');
my $root = get_user('root');
is_deeply($root->{'modules'}, [ 'useradmin', 'apache' ],
'standalone user enable adds module to user modules');
is_deeply($root->{'ownmods'}, [],
'standalone user enable does not create ownmods');
}
{
_reset_fixture();
create_user({ name => 'bob',
pass => 'x',
modules => [ 'useradmin' ] });
create_group({ name => 'wheel',
members => [ 'bob' ],
modules => [ 'useradmin' ],
desc => 'Sysadmins' });
_clear_caches();
is(enable_module_access([ 'apache' ], [ 'bob' ]), 1,
'enable_module_access can target one user by name');
my $bob = get_user('bob');
is_deeply($bob->{'modules'}, [ 'useradmin', 'apache' ],
'targeted user enable adds module to user modules');
is_deeply($bob->{'ownmods'}, [ 'apache' ],
'targeted user enable records explicit user ownmod');
# A later group refresh must not erase a directly granted user module.
my @users = list_users();
my @groups = list_groups();
my ($wheel) = grep { $_->{'name'} eq 'wheel' } @groups;
update_members(\@users, \@groups, $wheel->{'modules'},
$wheel->{'members'});
_clear_caches();
$bob = get_user('bob');
is_deeply($bob->{'modules'}, [ 'useradmin', 'apache' ],
'targeted user enable survives later group refresh');
}
# copy_acl_files (file mode): copy a module ACL file from one name to another. # copy_acl_files (file mode): copy a module ACL file from one name to another.
{ {
_reset_fixture(); _reset_fixture();

View File

@@ -109,7 +109,7 @@ return ();
sub edit_MaxClients sub edit_MaxClients
{ {
return (1, return (1,
$text{'core_maxconc'}, &hlink($text{'core_maxconc'}, "MaxClients"),
&opt_input($_[0]->{'value'}, "MaxClients", $text{'core_default'}, 4)); &opt_input($_[0]->{'value'}, "MaxClients", $text{'core_default'}, 4));
} }
sub save_MaxClients sub save_MaxClients
@@ -118,6 +118,19 @@ return &parse_opt("MaxClients", '^\d+$',
$text{'core_emaxconc'}); $text{'core_emaxconc'});
} }
sub edit_MaxRequestWorkers
{
return (1,
&hlink($text{'core_maxconc'}, "MaxRequestWorkers"),
&opt_input($_[0]->{'value'}, "MaxRequestWorkers",
$text{'core_default'}, 4));
}
sub save_MaxRequestWorkers
{
return &parse_opt("MaxRequestWorkers", '^\d+$',
$text{'core_emaxconc'});
}
sub edit_MaxKeepAliveRequests sub edit_MaxKeepAliveRequests
{ {
return (1, return (1,
@@ -133,7 +146,7 @@ return &parse_opt("MaxKeepAliveRequests", '^\d+$',
sub edit_MaxRequestsPerChild sub edit_MaxRequestsPerChild
{ {
return (1, return (1,
$text{'core_maxreq'}, &hlink($text{'core_maxreq'}, "MaxRequestsPerChild"),
&opt_input($_[0]->{'value'}, "MaxRequestsPerChild", $text{'core_default'}, 5)); &opt_input($_[0]->{'value'}, "MaxRequestsPerChild", $text{'core_default'}, 5));
} }
sub save_MaxRequestsPerChild sub save_MaxRequestsPerChild
@@ -145,7 +158,7 @@ return &parse_opt("MaxRequestsPerChild", '^\d+$',
sub edit_MinSpareServers sub edit_MinSpareServers
{ {
return (1, return (1,
$text{'core_minspare'}, &hlink($text{'core_minspare'}, "MinSpareServers"),
&opt_input($_[0]->{'value'},"MinSpareServers",$text{'core_default'}, 4)); &opt_input($_[0]->{'value'},"MinSpareServers",$text{'core_default'}, 4));
} }
sub save_MinSpareServers sub save_MinSpareServers
@@ -157,7 +170,7 @@ return &parse_opt("MinSpareServers", '^\d+$',
sub edit_MaxSpareServers sub edit_MaxSpareServers
{ {
return (1, return (1,
$text{'core_maxspare'}, &hlink($text{'core_maxspare'}, "MaxSpareServers"),
&opt_input($_[0]->{'value'},"MaxSpareServers",$text{'core_default'}, 4)); &opt_input($_[0]->{'value'},"MaxSpareServers",$text{'core_default'}, 4));
} }
sub save_MaxSpareServers sub save_MaxSpareServers
@@ -169,7 +182,7 @@ return &parse_opt("MaxSpareServers", '^\d+$',
sub edit_StartServers sub edit_StartServers
{ {
return (1, return (1,
$text{'core_initial'}, &hlink($text{'core_initial'}, "StartServers"),
&opt_input($_[0]->{'value'}, "StartServers", $text{'core_default'}, 4)); &opt_input($_[0]->{'value'}, "StartServers", $text{'core_default'}, 4));
} }
sub save_StartServers sub save_StartServers
@@ -178,9 +191,70 @@ return &parse_opt("StartServers", '^\d+$',
$text{'core_einitial'}); $text{'core_einitial'});
} }
sub edit_ServerLimit
{
return (1,
&hlink($text{'core_serverlimit'}, "ServerLimit"),
&opt_input($_[0]->{'value'}, "ServerLimit", $text{'core_default'}, 4));
}
sub save_ServerLimit
{
return &parse_opt("ServerLimit", '^\d+$',
$text{'core_eserverlimit'});
}
sub edit_MinSpareThreads
{
return (1,
&hlink($text{'worker_minspare'}, "MinSpareThreads"),
&opt_input($_[0]->{'value'},"MinSpareThreads",$text{'core_default'}, 4));
}
sub save_MinSpareThreads
{
return &parse_opt("MinSpareThreads", '^\d+$',
$text{'worker_eminspare'});
}
sub edit_MaxSpareThreads
{
return (1,
&hlink($text{'worker_maxspare'}, "MaxSpareThreads"),
&opt_input($_[0]->{'value'},"MaxSpareThreads",$text{'core_default'}, 4));
}
sub save_MaxSpareThreads
{
return &parse_opt("MaxSpareThreads", '^\d+$',
$text{'worker_emaxspare'});
}
sub edit_ThreadLimit
{
return (1,
&hlink($text{'worker_threadlimit'}, "ThreadLimit"),
&opt_input($_[0]->{'value'},"ThreadLimit",$text{'core_default'}, 4));
}
sub save_ThreadLimit
{
return &parse_opt("ThreadLimit", '^\d+$',
$text{'worker_ethreadlimit'});
}
sub edit_ThreadsPerChild
{
return (1,
&hlink($text{'worker_threads'}, "ThreadsPerChild"),
&opt_input($_[0]->{'value'},"ThreadsPerChild",$text{'core_default'}, 4));
}
sub save_ThreadsPerChild
{
return &parse_opt("ThreadsPerChild", '^\d+$',
$text{'worker_ethreads'});
}
sub edit_RLimitCPU sub edit_RLimitCPU
{ {
return &rlimit_input("RLimitCPU", $text{'core_cpulimit'}, $_[0]); return &rlimit_input("RLimitCPU",
&hlink($text{'core_cpulimit'}, "RLimitCPU"), $_[0]);
} }
sub save_RLimitCPU sub save_RLimitCPU
{ {
@@ -189,7 +263,8 @@ return &parse_rlimit("RLimitCPU", $text{'core_cpulimit2'});
sub edit_RLimitMEM sub edit_RLimitMEM
{ {
return &rlimit_input("RLimitMEM", $text{'core_memlimit'}, $_[0]); return &rlimit_input("RLimitMEM",
&hlink($text{'core_memlimit'}, "RLimitMEM"), $_[0]);
} }
sub save_RLimitMEM sub save_RLimitMEM
{ {
@@ -198,7 +273,8 @@ return &parse_rlimit("RLimitMEM", $text{'core_memlimit2'});
sub edit_RLimitNPROC sub edit_RLimitNPROC
{ {
return &rlimit_input("RLimitNPROC", $text{'core_proclimit'}, $_[0]); return &rlimit_input("RLimitNPROC",
&hlink($text{'core_proclimit'}, "RLimitNPROC"), $_[0]);
} }
sub save_RLimitNPROC sub save_RLimitNPROC
{ {
@@ -1280,7 +1356,7 @@ return &parse_opt("LockFile", '^\S+', $text{'core_elock'});
sub edit_LimitRequestBody sub edit_LimitRequestBody
{ {
return (1, $text{'core_maxbody'}, return (1, &hlink($text{'core_maxbody'}, "LimitRequestBody"),
&opt_input($_[0]->{'value'}, "LimitRequestBody", $text{'core_default'}, 8) &opt_input($_[0]->{'value'}, "LimitRequestBody", $text{'core_default'}, 8)
.&ui_space(2).$text{'bytes'}); .&ui_space(2).$text{'bytes'});
} }
@@ -1291,7 +1367,7 @@ return &parse_opt("LimitRequestBody", '^\d+$', $text{'core_ebody'});
sub edit_LimitXMLRequestBody sub edit_LimitXMLRequestBody
{ {
return (1, $text{'core_maxxml'}, return (1, &hlink($text{'core_maxxml'}, "LimitXMLRequestBody"),
&opt_input($_[0]->{'value'}, "LimitXMLRequestBody", &opt_input($_[0]->{'value'}, "LimitXMLRequestBody",
$text{'core_default'}, 8).&ui_space(2).$text{'bytes'}); $text{'core_default'}, 8).&ui_space(2).$text{'bytes'});
} }
@@ -1304,7 +1380,7 @@ return &parse_opt("LimitXMLRequestBody", '^\d+$', $text{'core_exml'});
sub edit_LimitRequestFields sub edit_LimitRequestFields
{ {
return (1, $text{'core_maxhead'}, return (1, &hlink($text{'core_maxhead'}, "LimitRequestFields"),
&opt_input($_[0]->{'value'}, "LimitRequestFields", $text{'core_default'}, 6)); &opt_input($_[0]->{'value'}, "LimitRequestFields", $text{'core_default'}, 6));
} }
sub save_LimitRequestFields sub save_LimitRequestFields
@@ -1314,7 +1390,7 @@ return &parse_opt("LimitRequestFields", '^\d+$', $text{'core_ehead'});
sub edit_LimitRequestFieldsize sub edit_LimitRequestFieldsize
{ {
return (1, $text{'core_maxshead'}, return (1, &hlink($text{'core_maxshead'}, "LimitRequestFieldsize"),
&opt_input($_[0]->{'value'}, "LimitRequestFieldsize", $text{'core_default'}, 6)); &opt_input($_[0]->{'value'}, "LimitRequestFieldsize", $text{'core_default'}, 6));
} }
sub save_LimitRequestFieldsize sub save_LimitRequestFieldsize
@@ -1324,7 +1400,7 @@ return &parse_opt("LimitRequestFieldsize", '^\d+$', $text{'core_eshead'});
sub edit_LimitRequestLine sub edit_LimitRequestLine
{ {
return (1, $text{'core_maxline'}, return (1, &hlink($text{'core_maxline'}, "LimitRequestLine"),
&opt_input($_[0]->{'value'}, "LimitRequestLine", $text{'core_default'}, 6)); &opt_input($_[0]->{'value'}, "LimitRequestLine", $text{'core_default'}, 6));
} }
sub save_LimitRequestLine sub save_LimitRequestLine
@@ -1631,4 +1707,3 @@ else { return ( [ ], [ ] ); }
} }
1; 1;

View File

@@ -0,0 +1,7 @@
<header>Tie virtual to child process</header>
The <tt>AssignUserId</tt> directive assigns a virtual host to a child process
running with the selected user ID and group ID for the legacy perchild MPM.
<p>
This directive is only available for Apache versions and MPMs that support
perchild.
<p><footer>

View File

@@ -0,0 +1,7 @@
<header>Child process UID assignments</header>
The <tt>ChildPerUserId</tt> directive defines how many child processes should
run for a selected user ID and group ID in the legacy perchild MPM.
<p>
This directive is only available for Apache versions and MPMs that support
perchild.
<p><footer>

View File

@@ -0,0 +1,7 @@
<header>Maximum request body size</header>
The <tt>LimitRequestBody</tt> directive sets the maximum allowed size of an HTTP
request body in bytes.
<p>
This can be used to limit upload or form submission size for the server,
virtual host, directory, or location where the directive is applied.
<p><footer>

View File

@@ -0,0 +1,7 @@
<header>Maximum headers in request</header>
The <tt>LimitRequestFields</tt> directive sets the maximum number of HTTP
request header fields that Apache will accept.
<p>
Lowering this limit can reduce exposure to unusually large requests, but values
that are too low can reject legitimate clients.
<p><footer>

View File

@@ -0,0 +1,7 @@
<header>Maximum request header size</header>
The <tt>LimitRequestFieldSize</tt> directive sets the maximum size of each HTTP
request header field in bytes.
<p>
Lowering this limit can reject oversized request headers, but values that are
too low can break clients that send larger cookies or authorization headers.
<p><footer>

View File

@@ -0,0 +1,7 @@
<header>Maximum request line size</header>
The <tt>LimitRequestLine</tt> directive sets the maximum size of the HTTP
request line in bytes.
<p>
This line contains the method, requested URI, and HTTP protocol version. Values
that are too low can reject legitimate long URLs.
<p><footer>

View File

@@ -0,0 +1,6 @@
<header>Maximum XML request body size</header>
The <tt>LimitXMLRequestBody</tt> directive sets the maximum allowed size of an
XML request body in bytes.
<p>
It is mainly used by modules that parse XML request bodies, such as WebDAV.
<p><footer>

View File

@@ -0,0 +1,8 @@
<header>Maximum simultaneous requests</header>
The <tt>MaxClients</tt> directive is the old Apache name for the maximum number
of requests that can be served at the same time. On Apache 2.4 and newer, the
equivalent directive is <tt>MaxRequestWorkers</tt>.
<p>
For prefork MPM, this limits child server processes. For threaded MPMs, it
limits the total number of worker threads across all child processes.
<p><footer>

View File

@@ -0,0 +1,9 @@
<header>Maximum simultaneous requests</header>
The <tt>MaxRequestWorkers</tt> directive sets the maximum number of requests
that Apache can serve at the same time. Requests above this limit wait until an
existing worker is free.
<p>
For prefork MPM, this limits child server processes. For threaded MPMs, it
limits the total number of worker threads across all child processes. Raising
this value may also require increasing <tt>ServerLimit</tt>.
<p><footer>

View File

@@ -0,0 +1,8 @@
<header>Maximum requests per child process</header>
The <tt>MaxRequestsPerChild</tt> directive sets how many requests an Apache
child process will handle before it exits and is replaced. A value of
<tt>0</tt> means the process is not recycled because of this limit.
<p>
Recycling can help contain memory growth in long-running processes, but setting
this too low can create unnecessary process churn.
<p><footer>

View File

@@ -0,0 +1,8 @@
<header>Maximum idle server processes</header>
The <tt>MaxSpareServers</tt> directive sets the maximum number of idle child
server processes Apache tries to keep when using prefork-style process
handling.
<p>
If more idle child processes are available, Apache stops some of them to avoid
keeping unnecessary processes running.
<p><footer>

View File

@@ -0,0 +1,7 @@
<header>Maximum idle worker threads</header>
The <tt>MaxSpareThreads</tt> directive sets the maximum number of idle worker
threads Apache tries to keep when using a threaded MPM such as worker or event.
<p>
If more idle threads are available, Apache can reduce the number of running
workers instead of keeping excess capacity open.
<p><footer>

View File

@@ -0,0 +1,6 @@
<header>Maximum threads per child process</header>
The <tt>MaxThreadsPerChild</tt> directive sets the maximum number of worker
threads allowed in each child process for the legacy perchild MPM.
<p>
This directive only appears for Apache versions and MPMs that support perchild.
<p><footer>

View File

@@ -0,0 +1,8 @@
<header>Minimum idle server processes</header>
The <tt>MinSpareServers</tt> directive sets the minimum number of idle child
server processes Apache tries to keep ready when using prefork-style process
handling.
<p>
If fewer idle child processes are available, Apache starts more so new
connections can be accepted without waiting for a process to be created.
<p><footer>

View File

@@ -0,0 +1,8 @@
<header>Minimum idle worker threads</header>
The <tt>MinSpareThreads</tt> directive sets the minimum number of idle worker
threads Apache tries to keep ready when using a threaded MPM such as worker or
event.
<p>
If fewer idle threads are available, Apache starts or adjusts child processes
so new connections can be accepted without waiting for threads to become free.
<p><footer>

View File

@@ -0,0 +1,6 @@
<header>Number of child processes</header>
The <tt>NumServers</tt> directive sets the number of child server processes for
the legacy perchild MPM.
<p>
This directive only appears for Apache versions and MPMs that support perchild.
<p><footer>

View File

@@ -0,0 +1,8 @@
<header>CPU resource limit</header>
The <tt>RLimitCPU</tt> directive sets a CPU time resource limit for processes
started by Apache in this context, such as CGI programs where supported by the
operating system.
<p>
The soft limit is applied first. If a hard limit is also set, it is the maximum
value that the process can raise the soft limit to.
<p><footer>

View File

@@ -0,0 +1,8 @@
<header>Memory resource limit</header>
The <tt>RLimitMEM</tt> directive sets a memory resource limit for processes
started by Apache in this context, such as CGI programs where supported by the
operating system.
<p>
The soft limit is applied first. If a hard limit is also set, it is the maximum
value that the process can raise the soft limit to.
<p><footer>

View File

@@ -0,0 +1,8 @@
<header>Process limit</header>
The <tt>RLimitNPROC</tt> directive sets a process count resource limit for
processes started by Apache in this context, such as CGI programs where
supported by the operating system.
<p>
The soft limit is applied first. If a hard limit is also set, it is the maximum
value that the process can raise the soft limit to.
<p><footer>

View File

@@ -0,0 +1,9 @@
<header>Server process limit</header>
The <tt>ServerLimit</tt> directive sets the hard upper limit on the number of
Apache child server processes. It caps values such as
<tt>MaxRequestWorkers</tt> for prefork MPM, and works with
<tt>ThreadsPerChild</tt> for threaded MPMs.
<p>
Increasing this value may require a full Apache stop and start before it takes
effect.
<p><footer>

View File

@@ -0,0 +1,7 @@
<header>Server processes at startup</header>
The <tt>StartServers</tt> directive sets how many child server processes Apache
starts when the server first launches.
<p>
Apache adjusts the number of child processes after startup based on traffic and
the spare process or spare thread limits.
<p><footer>

View File

@@ -0,0 +1,7 @@
<header>Initial threads per child process</header>
The <tt>StartThreads</tt> directive sets how many worker threads are created at
startup for legacy threaded MPMs that support this directive.
<p>
Apache may adjust the number of running workers after startup based on traffic
and the configured spare thread limits.
<p><footer>

View File

@@ -0,0 +1,7 @@
<header>Thread limit per child process</header>
The <tt>ThreadLimit</tt> directive sets the hard upper limit for the number of
worker threads that can be configured in each child process.
<p>
It must be high enough for <tt>ThreadsPerChild</tt>. Increasing this value may
require a full Apache stop and start before it takes effect.
<p><footer>

View File

@@ -0,0 +1,7 @@
<header>Worker threads per child process</header>
The <tt>ThreadsPerChild</tt> directive sets how many worker threads Apache
creates in each child process when using a threaded MPM.
<p>
The total request capacity for threaded MPMs is controlled by this value
together with <tt>ServerLimit</tt> and <tt>MaxRequestWorkers</tt>.
<p><footer>

View File

@@ -346,13 +346,15 @@ core_maxkeep=Maximum keepalives per connection
core_maxreq=Maximum requests per server process core_maxreq=Maximum requests per server process
core_minspare=Minimum spare server processes core_minspare=Minimum spare server processes
core_maxspare=Maximum spare server processes core_maxspare=Maximum spare server processes
core_initial=Initial server processes core_initial=Server processes at startup
core_serverlimit=Server process limit
core_emaxconc=Maximum concurrent requests must be an integer core_emaxconc=Maximum concurrent requests must be an integer
core_emaxkeep=Maximum keepalives per connection must be an integer core_emaxkeep=Maximum keepalives per connection must be an integer
core_emaxreq=Maximum requests per server process must be an integer core_emaxreq=Maximum requests per server process must be an integer
core_eminspare=Minimum spare server processes must be an integer core_eminspare=Minimum spare server processes must be an integer
core_emaxspare=Maximum spare server processes must be an integer core_emaxspare=Maximum spare server processes must be an integer
core_einitial=Initial server processes must be an integer core_einitial=Server processes at startup must be an integer
core_eserverlimit=Server process limit must be an integer
core_default=Default core_default=Default
core_cpulimit=CPU resource limit core_cpulimit=CPU resource limit
core_memlimit=Memory resource limit core_memlimit=Memory resource limit
@@ -1064,6 +1066,8 @@ worker_eminspare=Minimum spare threads must be an integer
worker_emaxspare=Maximum spare threads must be an integer worker_emaxspare=Maximum spare threads must be an integer
worker_threads=Threads per child process worker_threads=Threads per child process
worker_ethreads=Number of threads per child process must be an integer worker_ethreads=Number of threads per child process must be an integer
worker_threadlimit=Thread limit per child process
worker_ethreadlimit=Thread limit per child process must be an integer
perchild_sthreads=Initial threads per child process perchild_sthreads=Initial threads per child process
perchild_esthreads=Number of threads per child process must be an integer perchild_esthreads=Number of threads per child process must be an integer

View File

@@ -32,8 +32,8 @@ index_addr=Adresse
index_nv=Legg til adresse for navnebasert virtuell server (hvis nødvendig) index_nv=Legg til adresse for navnebasert virtuell server (hvis nødvendig)
index_listen=Lytt på adresse (hvis nødvendig) index_listen=Lytt på adresse (hvis nødvendig)
index_port=Port index_port=Port
index_name=Tjener Navn index_name=Tjenernavn
index_root=Dokument Rot index_root=Dokumentrot
index_url=URL index_url=URL
index_view=Åpne.. index_view=Åpne..
index_adddir=Gi tilgang til denne katalogen index_adddir=Gi tilgang til denne katalogen
@@ -243,8 +243,8 @@ htfile_header2=$1 for $2
reconfig_title=Rekonfigurer kjente moduler reconfig_title=Rekonfigurer kjente moduler
reconfig_ecannot=Du har ikke lov til å rekonfigurere apache reconfig_ecannot=Du har ikke lov til å rekonfigurere apache
reconfig_ever=Kunne ikke hente versjonsnummer på Apache server programmet $1. Sjekk din <a href='$2'>modul konfigurasjon</a> for å forsikre deg om at dette er riktig sti. reconfig_ever=Kunne ikke hente versjonsnummer på Apache server programmet $1. Sjekk din <a href='$2'>modul konfigurasjon</a> for å forsikre deg om at dette er riktig sti.
reconfig_desc1=Din Apache konfigurasjon er endret, eller har ikke blit undersøkt av Webmin enda. Nedenfor finner du en liste over alle Apache moduler som støttes av Webmin, med de installerte modulene avmerket. Du kan velge eller velge bort moduler dersom listen ikke er korrekt. reconfig_desc1=Din Apache konfigurasjon er endret, eller har ikke blit undersøkt av Webmin enda. Nedenfor finner du en liste over alle Apache-moduler som støttes av Webmin, med de installerte modulene avmerket. Du kan velge eller velge bort moduler dersom listen ikke er korrekt.
reconfig_desc2=Nedenfor finner du en liste over alle Apache moduler som støttes av Webmin, med de installerte modulene avmerket. Dersom du benytter dynamisk lastede moduler kan det være nødvendig å velge de modulene som er dynamisk lastet. reconfig_desc2=Nedenfor finner du en liste over alle Apache-moduler som støttes av Webmin, med de installerte modulene avmerket. Dersom du benytter dynamisk lastede moduler kan det være nødvendig å velge de modulene som er dynamisk lastet.
reconfig_desc3=Dersom du er usikker på hvilke moduler som støttes av Apache på ditt system, kan du klikke Konfigurer, siden Webmin normalt autmatisk vil kunne finne ut hvilke moduler som er støttet. reconfig_desc3=Dersom du er usikker på hvilke moduler som støttes av Apache på ditt system, kan du klikke Konfigurer, siden Webmin normalt autmatisk vil kunne finne ut hvilke moduler som er støttet.
reconfig_ok=Konfigurer reconfig_ok=Konfigurer
@@ -272,9 +272,9 @@ authu_euser=Ikke noe brukernavn oppgitt
authu_euser2=Brukernavn kan ikke inneholde en : authu_euser2=Brukernavn kan ikke inneholde en :
authu_edup=En bruker ved navn '$1' finnes allerede authu_edup=En bruker ved navn '$1' finnes allerede
authu_sync=Innstillingene nedenfor lar deg konfigurerer Webmin til å automatisk legge til, oppdatere eller slette en bruker fra denne passordfilen når en bruker er lagt til, endret eller fjernet i modulen <tt>Brukere og grupper</tt>. authu_sync=Innstillingene nedenfor lar deg konfigurerer Webmin til å automatisk legge til, oppdatere eller slette en bruker fra denne passordfilen når en bruker er lagt til, endret eller fjernet i modulen <tt>Brukere og grupper</tt>.
authu_screate=Legg til en bruker når en Unix bruker blir lagt til authu_screate=Legg til en bruker når en Unix-bruker blir lagt til
authu_sdelete=Slett brukeren når en Unix bruker slettes authu_sdelete=Slett brukeren når en Unix-bruker slettes
authu_smodify=Endre brukeren når en Unix bruker endres authu_smodify=Endre brukeren når en Unix-bruker endres
authg_ecannot='$1' er ikke en tillatt grupper tekstfil authg_ecannot='$1' er ikke en tillatt grupper tekstfil
authg_title=Gruppeliste authg_title=Gruppeliste
@@ -465,8 +465,8 @@ core_group=Gruppenavn
core_gid=Gruppe ID core_gid=Gruppe ID
core_user=Brukernavn core_user=Brukernavn
core_uid=Bruker ID core_uid=Bruker ID
core_asgroup=Kjør som Unix gruppe core_asgroup=Kjør som Unix-gruppe
core_asuser=Kjør som Unix bruker core_asuser=Kjør som Unix-bruker
core_euid='$1' er ikke en gyldig gruppe ID core_euid='$1' er ikke en gyldig gruppe ID
core_egid='$1' er ikke en gyldig bruker ID core_egid='$1' er ikke en gyldig bruker ID
core_tourl=Gå til URL.. core_tourl=Gå til URL..
@@ -990,7 +990,7 @@ log_mime_modify=Endret MIME type $1
log_mime_create=Lagt til MIME type $1 log_mime_create=Lagt til MIME type $1
log_defines=Endret definerte parametere log_defines=Endret definerte parametere
log_reconfig=Rekonfigurert kjente moduler log_reconfig=Rekonfigurert kjente moduler
log_mods=Endret konfigurerte Apache moduler log_mods=Endret konfigurerte Apache-moduler
log_start=Startet webserver log_start=Startet webserver
log_stop=Stoppet webserver log_stop=Stoppet webserver
log_apply=Endringer lagret log_apply=Endringer lagret
@@ -1063,7 +1063,7 @@ cache_emaxoc=Antall objekter å cache i minne må være et heltall
suexec_su=Kjør CGI programmer som suexec_su=Kjør CGI programmer som
suexec_none=Bruker fra global konfigurasjon suexec_none=Bruker fra global konfigurasjon
suexec_user=Unix bruker suexec_user=Unix-bruker
suexec_group=og gruppe suexec_group=og gruppe
suexec_euser=Manglende eller ugyldig bruker å kjøre CGI programmer som suexec_euser=Manglende eller ugyldig bruker å kjøre CGI programmer som
suexec_egroup=Manglende eller ugyldig gruppe å kjøre CGI programmer som suexec_egroup=Manglende eller ugyldig gruppe å kjøre CGI programmer som
@@ -1078,8 +1078,8 @@ filter_out=Output Filter definisjoner
filter_ename=Ugyldig filter navn '$1' filter_ename=Ugyldig filter navn '$1'
filter_ecmd=Mangler kommando for filter '$1' filter_ecmd=Mangler kommando for filter '$1'
cdir_err=Kunne ikke opprette per-directory instillinger cdir_err=Kunne ikke opprette per-mappe-innstillinger
cdir_err2=Kunne ikke lagre per-directory innstillinger cdir_err2=Kunne ikke lagre per-mappe-innstillinger
cdir_epath=Manglende sti cdir_epath=Manglende sti
cdir_eproxy=Proxy innstillinger kan ikke opprettes med match regexp innstillingen slått på cdir_eproxy=Proxy innstillinger kan ikke opprettes med match regexp innstillingen slått på
cdir_ecannot=Du har ikke tilgang til å opprette per-katalog innstillinger for den angitte stien cdir_ecannot=Du har ikke tilgang til å opprette per-katalog innstillinger for den angitte stien
@@ -1126,12 +1126,12 @@ mod_auth_digest_al=Hashing algoritme
mod_auth_digest_domain=URLer og stier i samme domene mod_auth_digest_domain=URLer og stier i samme domene
mod_auth_digest_edomain=Manglende URLer og stier i samme domene mod_auth_digest_edomain=Manglende URLer og stier i samme domene
mods_title=Konfigurer Apache moduler mods_title=Konfigurer Apache-moduler
mods_mod=Modul mods_mod=Modul
mods_state=Gjeldende tilstand mods_state=Gjeldende tilstand
mods_enabled=Slått på mods_enabled=Slått på
mods_disabled=Slått av mods_disabled=Slått av
mods_available=Tilgjengelig for installasjon mods_available=Tilgjengelig for installasjon
mods_ecannot=Du har ikke tilgang til å konfigurere Apache moduler mods_ecannot=Du har ikke tilgang til å konfigurere Apache-moduler
mods_save=Slå på valgte moduler mods_save=Slå på valgte moduler
mods_desc=Denne siden lar deg velge hvilke valgfrie Apache moduler som er slått på, ved å bruke sjekkboksen ved siden av hvert modulnavn. Vær forsiktig når du slår av en modul, siden alle eksisterende direktiver for den modulen, ikke lenger vil gjenkjennes. mods_desc=Denne siden lar deg velge hvilke valgfrie Apache-moduler som er slått på, ved å bruke sjekkboksen ved siden av hvert modulnavn. Vær forsiktig når du slår av en modul, siden alle eksisterende direktiver for den modulen, ikke lenger vil gjenkjennes.

View File

@@ -1,5 +1,5 @@
# mod_mpm_event.pl # mod_mpm_event.pl
# Defines editors for the pre-forking module in apache 2.4. # Defines editors for the event MPM module in apache 2.4.
# The actual functions for all of these are still in core.pl # The actual functions for all of these are still in core.pl
sub mod_mpm_event_directives sub mod_mpm_event_directives
@@ -9,13 +9,17 @@ $rv = [ [ 'CoreDumpDirectory', 0, 9, 'global', 2.0 ],
[ 'BindAddress Listen Port', 1, 1, 'global', 2.0, 10 ], [ 'BindAddress Listen Port', 1, 1, 'global', 2.0, 10 ],
[ 'ListenBacklog', 0, 1, 'global', 2.0 ], [ 'ListenBacklog', 0, 1, 'global', 2.0 ],
[ 'LockFile', 0, 9, 'global', 2.0 ], [ 'LockFile', 0, 9, 'global', 2.0 ],
[ 'MaxRequestWorkers', 0, 0, 'global', 2.313 ],
[ 'MaxRequestsPerChild', 0, 0, 'global', 2.0 ], [ 'MaxRequestsPerChild', 0, 0, 'global', 2.0 ],
[ 'MinSpareServers', 0, 0, 'global', 2.0 ], [ 'MinSpareThreads', 0, 0, 'global', 2.0 ],
[ 'MaxSpareServers', 0, 0, 'global', 2.0 ], [ 'MaxSpareThreads', 0, 0, 'global', 2.0 ],
[ 'PidFile', 0, 9, 'global', 2.0 ], [ 'PidFile', 0, 9, 'global', 2.0 ],
[ 'ScoreBoardFile', 0, 9, 'global', 2.0 ], [ 'ScoreBoardFile', 0, 9, 'global', 2.0 ],
[ 'SendBufferSize', 0, 1, 'global', 2.0 ], [ 'SendBufferSize', 0, 1, 'global', 2.0 ],
[ 'ServerLimit', 0, 0, 'global', 2.0 ],
[ 'StartServers', 0, 0, 'global', 2.0 ], [ 'StartServers', 0, 0, 'global', 2.0 ],
[ 'ThreadLimit', 0, 0, 'global', 2.0 ],
[ 'ThreadsPerChild', 0, 0, 'global', 2.0 ],
[ 'Group', 0, 8, 'global', 2.0 ], [ 'Group', 0, 8, 'global', 2.0 ],
[ 'User', 0, 8, 'global', 2.0, 10 ] ]; [ 'User', 0, 8, 'global', 2.0, 10 ] ];
return &make_directives($rv, $_[0], "mod_mpm_event"); return &make_directives($rv, $_[0], "mod_mpm_event");

View File

@@ -9,12 +9,14 @@ $rv = [ [ 'CoreDumpDirectory', 0, 9, 'global', 2.0 ],
[ 'BindAddress Listen Port', 1, 1, 'global', 2.0, 10 ], [ 'BindAddress Listen Port', 1, 1, 'global', 2.0, 10 ],
[ 'ListenBacklog', 0, 1, 'global', 2.0 ], [ 'ListenBacklog', 0, 1, 'global', 2.0 ],
[ 'LockFile', 0, 9, 'global', 2.0 ], [ 'LockFile', 0, 9, 'global', 2.0 ],
[ 'MaxRequestWorkers', 0, 0, 'global', 2.313 ],
[ 'MaxRequestsPerChild', 0, 0, 'global', 2.0 ], [ 'MaxRequestsPerChild', 0, 0, 'global', 2.0 ],
[ 'MinSpareServers', 0, 0, 'global', 2.0 ], [ 'MinSpareServers', 0, 0, 'global', 2.0 ],
[ 'MaxSpareServers', 0, 0, 'global', 2.0 ], [ 'MaxSpareServers', 0, 0, 'global', 2.0 ],
[ 'PidFile', 0, 9, 'global', 2.0 ], [ 'PidFile', 0, 9, 'global', 2.0 ],
[ 'ScoreBoardFile', 0, 9, 'global', 2.0 ], [ 'ScoreBoardFile', 0, 9, 'global', 2.0 ],
[ 'SendBufferSize', 0, 1, 'global', 2.0 ], [ 'SendBufferSize', 0, 1, 'global', 2.0 ],
[ 'ServerLimit', 0, 0, 'global', 2.0 ],
[ 'StartServers', 0, 0, 'global', 2.0 ], [ 'StartServers', 0, 0, 'global', 2.0 ],
[ 'Group', 0, 8, 'global', 2.0 ], [ 'Group', 0, 8, 'global', 2.0 ],
[ 'User', 0, 8, 'global', 2.0, 10 ] ]; [ 'User', 0, 8, 'global', 2.0, 10 ] ];

27
apache/mod_mpm_worker.pl Normal file
View File

@@ -0,0 +1,27 @@
# mod_mpm_worker.pl
# Defines editors for the worker MPM module in apache 2.4.
# The actual functions for all of these are still in core.pl
sub mod_mpm_worker_directives
{
local $rv;
$rv = [ [ 'CoreDumpDirectory', 0, 9, 'global', 2.0 ],
[ 'BindAddress Listen Port', 1, 1, 'global', 2.0, 10 ],
[ 'ListenBacklog', 0, 1, 'global', 2.0 ],
[ 'LockFile', 0, 9, 'global', 2.0 ],
[ 'MaxRequestWorkers', 0, 0, 'global', 2.313 ],
[ 'MaxRequestsPerChild', 0, 0, 'global', 2.0 ],
[ 'MinSpareThreads', 0, 0, 'global', 2.0 ],
[ 'MaxSpareThreads', 0, 0, 'global', 2.0 ],
[ 'PidFile', 0, 9, 'global', 2.0 ],
[ 'ScoreBoardFile', 0, 9, 'global', 2.0 ],
[ 'SendBufferSize', 0, 1, 'global', 2.0 ],
[ 'ServerLimit', 0, 0, 'global', 2.0 ],
[ 'StartServers', 0, 0, 'global', 2.0 ],
[ 'ThreadLimit', 0, 0, 'global', 2.0 ],
[ 'ThreadsPerChild', 0, 0, 'global', 2.0 ],
[ 'Group', 0, 8, 'global', 2.0 ],
[ 'User', 0, 8, 'global', 2.0, 10 ] ];
return &make_directives($rv, $_[0], "mod_mpm_worker");
}

View File

@@ -18,7 +18,7 @@ return &make_directives($rv, $_[0], "mpm_netware");
sub edit_MinSpareThreads sub edit_MinSpareThreads
{ {
return (1, return (1,
$text{'worker_minspare'}, &hlink($text{'worker_minspare'}, "MinSpareThreads"),
&opt_input($_[0]->{'value'},"MinSpareThreads",$text{'default'}, 4)); &opt_input($_[0]->{'value'},"MinSpareThreads",$text{'default'}, 4));
} }
sub save_MinSpareThreads sub save_MinSpareThreads
@@ -30,7 +30,7 @@ return &parse_opt("MinSpareThreads", '^\d+$',
sub edit_MaxSpareThreads sub edit_MaxSpareThreads
{ {
return (1, return (1,
$text{'worker_maxspare'}, &hlink($text{'worker_maxspare'}, "MaxSpareThreads"),
&opt_input($_[0]->{'value'},"MaxSpareThreads",$text{'default'}, 4)); &opt_input($_[0]->{'value'},"MaxSpareThreads",$text{'default'}, 4));
} }
sub save_MaxSpareThreads sub save_MaxSpareThreads
@@ -42,7 +42,7 @@ return &parse_opt("MaxSpareThreads", '^\d+$',
sub edit_StartThreads sub edit_StartThreads
{ {
return (1, return (1,
$text{'perchild_sthreads'}, &hlink($text{'perchild_sthreads'}, "StartThreads"),
&opt_input($_[0]->{'value'},"StartThreads",$text{'default'}, 4)); &opt_input($_[0]->{'value'},"StartThreads",$text{'default'}, 4));
} }
sub save_StartThreads sub save_StartThreads
@@ -51,4 +51,3 @@ return &parse_opt("StartThreads", '^\d+$',
$text{'perchild_esthreads'}); $text{'perchild_esthreads'});
} }

View File

@@ -18,7 +18,7 @@ return &make_directives($rv, $_[0], "mpm_winnt");
sub edit_ThreadsPerChild sub edit_ThreadsPerChild
{ {
return (1, return (1,
$text{'worker_threads'}, &hlink($text{'worker_threads'}, "ThreadsPerChild"),
&opt_input($_[0]->{'value'},"ThreadsPerChild",$text{'default'}, 4)); &opt_input($_[0]->{'value'},"ThreadsPerChild",$text{'default'}, 4));
} }
sub save_ThreadsPerChild sub save_ThreadsPerChild
@@ -26,4 +26,3 @@ sub save_ThreadsPerChild
return &parse_opt("ThreadsPerChild", '^\d+$', return &parse_opt("ThreadsPerChild", '^\d+$',
$text{'worker_ethreads'}); $text{'worker_ethreads'});
} }

View File

@@ -35,7 +35,7 @@ $rv .= sprintf "<input type=radio name=AssignUserId_def value=0 %s>\n",
$rv .= &text('perchild_assignug', $rv .= &text('perchild_assignug',
"<input name=AssignUserId_uid size=8 value='$_[0]->{'words'}->[0]'>", "<input name=AssignUserId_uid size=8 value='$_[0]->{'words'}->[0]'>",
"<input name=AssignUserId_gid size=8 value='$_[0]->{'words'}->[1]'>"); "<input name=AssignUserId_gid size=8 value='$_[0]->{'words'}->[1]'>");
return (2, $text{'perchild_assign'}, $rv); return (2, &hlink($text{'perchild_assign'}, "AssignUserId"), $rv);
} }
sub save_AssignUserId sub save_AssignUserId
{ {
@@ -66,7 +66,7 @@ foreach $c (@{$_[0]}, undef) {
$i++; $i++;
} }
$rv .= "</table>\n"; $rv .= "</table>\n";
return (2, $text{'perchild_child'}, $rv); return (2, &hlink($text{'perchild_child'}, "ChildPerUserId"), $rv);
} }
sub save_ChildPerUserId sub save_ChildPerUserId
{ {
@@ -88,7 +88,7 @@ return ( \@rv );
sub edit_MinSpareThreads sub edit_MinSpareThreads
{ {
return (1, return (1,
$text{'worker_minspare'}, &hlink($text{'worker_minspare'}, "MinSpareThreads"),
&opt_input($_[0]->{'value'},"MinSpareThreads",$text{'default'}, 4)); &opt_input($_[0]->{'value'},"MinSpareThreads",$text{'default'}, 4));
} }
sub save_MinSpareThreads sub save_MinSpareThreads
@@ -100,7 +100,7 @@ return &parse_opt("MinSpareThreads", '^\d+$',
sub edit_MaxSpareThreads sub edit_MaxSpareThreads
{ {
return (1, return (1,
$text{'worker_maxspare'}, &hlink($text{'worker_maxspare'}, "MaxSpareThreads"),
&opt_input($_[0]->{'value'},"MaxSpareThreads",$text{'default'}, 4)); &opt_input($_[0]->{'value'},"MaxSpareThreads",$text{'default'}, 4));
} }
sub save_MaxSpareThreads sub save_MaxSpareThreads
@@ -112,7 +112,7 @@ return &parse_opt("MaxSpareThreads", '^\d+$',
sub edit_StartThreads sub edit_StartThreads
{ {
return (1, return (1,
$text{'perchild_sthreads'}, &hlink($text{'perchild_sthreads'}, "StartThreads"),
&opt_input($_[0]->{'value'},"StartThreads",$text{'default'}, 4)); &opt_input($_[0]->{'value'},"StartThreads",$text{'default'}, 4));
} }
sub save_StartThreads sub save_StartThreads
@@ -124,7 +124,7 @@ return &parse_opt("StartThreads", '^\d+$',
sub edit_NumServers sub edit_NumServers
{ {
return (1, return (1,
$text{'perchild_numservers'}, &hlink($text{'perchild_numservers'}, "NumServers"),
&opt_input($_[0]->{'value'},"NumServers",$text{'default'}, 4)); &opt_input($_[0]->{'value'},"NumServers",$text{'default'}, 4));
} }
sub save_NumServers sub save_NumServers
@@ -136,7 +136,7 @@ return &parse_opt("NumServers", '^\d+$',
sub edit_MaxThreadsPerChild sub edit_MaxThreadsPerChild
{ {
return (1, return (1,
$text{'perchild_maxthreads'}, &hlink($text{'perchild_maxthreads'}, "MaxThreadsPerChild"),
&opt_input($_[0]->{'value'},"MaxThreadsPerChild",$text{'default'}, 4)); &opt_input($_[0]->{'value'},"MaxThreadsPerChild",$text{'default'}, 4));
} }
sub save_MaxThreadsPerChild sub save_MaxThreadsPerChild

View File

@@ -9,12 +9,15 @@ $rv = [ [ 'CoreDumpDirectory', 0, 9, 'global', 2.0 ],
[ 'BindAddress Listen Port', 1, 1, 'global', 2.0, 10 ], [ 'BindAddress Listen Port', 1, 1, 'global', 2.0, 10 ],
[ 'ListenBacklog', 0, 1, 'global', 2.0 ], [ 'ListenBacklog', 0, 1, 'global', 2.0 ],
[ 'LockFile', 0, 9, 'global', 2.0 ], [ 'LockFile', 0, 9, 'global', 2.0 ],
[ 'MaxClients', 0, 0, 'global', '2.0-2.313' ],
[ 'MaxRequestWorkers', 0, 0, 'global', 2.313 ],
[ 'MaxRequestsPerChild', 0, 0, 'global', 2.0 ], [ 'MaxRequestsPerChild', 0, 0, 'global', 2.0 ],
[ 'MinSpareServers', 0, 0, 'global', 2.0 ], [ 'MinSpareServers', 0, 0, 'global', 2.0 ],
[ 'MaxSpareServers', 0, 0, 'global', 2.0 ], [ 'MaxSpareServers', 0, 0, 'global', 2.0 ],
[ 'PidFile', 0, 9, 'global', 2.0 ], [ 'PidFile', 0, 9, 'global', 2.0 ],
[ 'ScoreBoardFile', 0, 9, 'global', 2.0 ], [ 'ScoreBoardFile', 0, 9, 'global', 2.0 ],
[ 'SendBufferSize', 0, 1, 'global', 2.0 ], [ 'SendBufferSize', 0, 1, 'global', 2.0 ],
[ 'ServerLimit', 0, 0, 'global', 2.0 ],
[ 'StartServers', 0, 0, 'global', 2.0 ], [ 'StartServers', 0, 0, 'global', 2.0 ],
[ 'Group', 0, 8, 'global', 2.0 ], [ 'Group', 0, 8, 'global', 2.0 ],
[ 'User', 0, 8, 'global', 2.0, 10 ] ]; [ 'User', 0, 8, 'global', 2.0, 10 ] ];

View File

@@ -9,14 +9,17 @@ $rv = [ [ 'CoreDumpDirectory', 0, 9, 'global', 2.0 ],
[ 'BindAddress Listen Port', 1, 1, 'global', 2.0, 10 ], [ 'BindAddress Listen Port', 1, 1, 'global', 2.0, 10 ],
[ 'ListenBacklog', 0, 1, 'global', 2.0 ], [ 'ListenBacklog', 0, 1, 'global', 2.0 ],
[ 'LockFile', 0, 9, 'global', 2.0 ], [ 'LockFile', 0, 9, 'global', 2.0 ],
[ 'MaxClients', 0, 0, 'global', 2.0 ], [ 'MaxClients', 0, 0, 'global', '2.0-2.313' ],
[ 'MaxRequestWorkers', 0, 0, 'global', 2.313 ],
[ 'MaxRequestsPerChild', 0, 0, 'global', 2.0 ], [ 'MaxRequestsPerChild', 0, 0, 'global', 2.0 ],
[ 'MinSpareThreads', 0, 0, 'global', 2.0 ], [ 'MinSpareThreads', 0, 0, 'global', 2.0 ],
[ 'MaxSpareThreads', 0, 0, 'global', 2.0 ], [ 'MaxSpareThreads', 0, 0, 'global', 2.0 ],
[ 'PidFile', 0, 9, 'global', 2.0 ], [ 'PidFile', 0, 9, 'global', 2.0 ],
[ 'ScoreBoardFile', 0, 9, 'global', 2.0 ], [ 'ScoreBoardFile', 0, 9, 'global', 2.0 ],
[ 'SendBufferSize', 0, 1, 'global', 2.0 ], [ 'SendBufferSize', 0, 1, 'global', 2.0 ],
[ 'ServerLimit', 0, 0, 'global', 2.0 ],
[ 'StartServers', 0, 0, 'global', 2.0 ], [ 'StartServers', 0, 0, 'global', 2.0 ],
[ 'ThreadLimit', 0, 0, 'global', 2.0 ],
[ 'ThreadsPerChild', 0, 0, 'global', 2.0 ], [ 'ThreadsPerChild', 0, 0, 'global', 2.0 ],
[ 'Group', 0, 8, 'global', 2.0 ], [ 'Group', 0, 8, 'global', 2.0 ],
[ 'User', 0, 8, 'global', 2.0, 10 ] ]; [ 'User', 0, 8, 'global', 2.0, 10 ] ];
@@ -26,7 +29,7 @@ return &make_directives($rv, $_[0], "worker");
sub edit_MinSpareThreads sub edit_MinSpareThreads
{ {
return (1, return (1,
$text{'worker_minspare'}, &hlink($text{'worker_minspare'}, "MinSpareThreads"),
&opt_input($_[0]->{'value'},"MinSpareThreads",$text{'default'}, 4)); &opt_input($_[0]->{'value'},"MinSpareThreads",$text{'default'}, 4));
} }
sub save_MinSpareThreads sub save_MinSpareThreads
@@ -38,7 +41,7 @@ return &parse_opt("MinSpareThreads", '^\d+$',
sub edit_MaxSpareThreads sub edit_MaxSpareThreads
{ {
return (1, return (1,
$text{'worker_maxspare'}, &hlink($text{'worker_maxspare'}, "MaxSpareThreads"),
&opt_input($_[0]->{'value'},"MaxSpareThreads",$text{'default'}, 4)); &opt_input($_[0]->{'value'},"MaxSpareThreads",$text{'default'}, 4));
} }
sub save_MaxSpareThreads sub save_MaxSpareThreads
@@ -50,7 +53,7 @@ return &parse_opt("MaxSpareThreads", '^\d+$',
sub edit_ThreadsPerChild sub edit_ThreadsPerChild
{ {
return (1, return (1,
$text{'worker_threads'}, &hlink($text{'worker_threads'}, "ThreadsPerChild"),
&opt_input($_[0]->{'value'},"ThreadsPerChild",$text{'default'}, 4)); &opt_input($_[0]->{'value'},"ThreadsPerChild",$text{'default'}, 4));
} }
sub save_ThreadsPerChild sub save_ThreadsPerChild
@@ -58,4 +61,3 @@ sub save_ThreadsPerChild
return &parse_opt("ThreadsPerChild", '^\d+$', return &parse_opt("ThreadsPerChild", '^\d+$',
$text{'worker_ethreads'}); $text{'worker_ethreads'});
} }

View File

@@ -1,6 +1,6 @@
name=At name=At
desc=Scheduled Commands desc=Scheduled Commands
os_support=solaris slackware-linux redhat-linux mandrake-linux debian-linux suse-linux united-linux open-linux turbo-linux corel-linux msc-linux freebsd netbsd openbsd generic-linux openserver macos gentoo-linux irix sol-linux coherent-linux openmamba-linux syno-linux os_support=solaris slackware-linux redhat-linux mandrake-linux debian-linux suse-linux united-linux open-linux turbo-linux corel-linux msc-linux freebsd netbsd openbsd generic-linux alpine-linux openserver macos gentoo-linux irix sol-linux coherent-linux openmamba-linux syno-linux
category=system category=system
longdesc=Schedule the execution of one-off commands or scripts. longdesc=Schedule the execution of one-off commands or scripts.
depends=proc depends=proc

View File

@@ -100,16 +100,21 @@ if ($file) {
} }
# Create the structure # Create the structure
my @mdirs = map { { 'name' => $_ } } @masters; my @mdirs;
foreach my $m (@masters) {
my $mdir = { 'name' => $m,
'values' => [ ] };
if ($masterkey) {
push(@{$mdir->{'values'}}, 'key', $masterkey);
}
push(@mdirs, $mdir);
}
my $masters = { 'name' => 'masters', my $masters = { 'name' => 'masters',
'type' => 1, 'type' => 1,
'members' => \@mdirs }; 'members' => \@mdirs };
if (defined($masterport)) { if (defined($masterport)) {
$masters->{'values'} = [ 'port', $masterport ]; $masters->{'values'} = [ 'port', $masterport ];
} }
if ($masterkey) {
$masters->{'values'} = [ 'key', $masterkey ];
}
my $dir = { 'name' => 'zone', my $dir = { 'name' => 'zone',
'values' => [ $in{'zone'} ], 'values' => [ $in{'zone'} ],
'type' => 1, 'type' => 1,

View File

@@ -1,6 +1,6 @@
name=Cluster Software name=Cluster Software
desc=Cluster Software Packages desc=Cluster Software Packages
os_support=cobalt-linux mandrake-linux redhat-linux open-linux msc-linux suse-linux united-linux turbo-linux debian-linux solaris openserver gentoo-linux trustix-linux coherent-linux slackware-linux windows pardus-linux os_support=cobalt-linux mandrake-linux redhat-linux open-linux msc-linux suse-linux united-linux turbo-linux debian-linux solaris openserver gentoo-linux alpine-linux trustix-linux coherent-linux slackware-linux windows pardus-linux
depends=software servers depends=software servers
category=cluster category=cluster
longdesc=Install RPMs, debian and solaris packages across multiple servers from one source. longdesc=Install RPMs, debian and solaris packages across multiple servers from one source.

View File

@@ -1,11 +1,11 @@
index_title=Perl moduler index_title=Perl-moduler
index_name=Modul index_name=Modul
index_sub=Undermoduler index_sub=Undermoduler
index_version=Versjon index_version=Versjon
index_desc=Beskrivelse index_desc=Beskrivelse
index_ver=Versjon index_ver=Versjon
index_date=Installert index_date=Installert
index_installmsg=Velg en ny Perl modul som skal kompileres og installeres på systemet ditt. index_installmsg=Velg en ny Perl-modul som skal kompileres og installeres på systemet ditt.
index_cpan=Fra CPAN, med navn index_cpan=Fra CPAN, med navn
index_refresh=Oppfrisk modulliste fra CPAN index_refresh=Oppfrisk modulliste fra CPAN
index_forcecpan=Installer alltid siste versjon fra kilde index_forcecpan=Installer alltid siste versjon fra kilde
@@ -20,9 +20,9 @@ index_upgrade=Oppgrader moduler
index_recs=Følgende Perl moduler anbefales for installasjon av Webmin: index_recs=Følgende Perl moduler anbefales for installasjon av Webmin:
index_user=$1 (brukt av $2) index_user=$1 (brukt av $2)
index_recsok=Installer valgte moduler index_recsok=Installer valgte moduler
index_recsgot=Alle følgende Perl moduler anbefalt av Webmin er installert : $1 index_recsgot=Alle følgende Perl-moduler anbefalt av Webmin er installert : $1
index_ezone=Det ser ut til at Perl deles med den globale sonen, så du kan ikke installere moduler her. Du må installere moduler i den globale sonen i stedet. index_ezone=Det ser ut til at Perl deles med den globale sonen, så du kan ikke installere moduler her. Du må installere moduler i den globale sonen i stedet.
index_none=Ingen installerte Perl moduler ble funnet på systemet ditt. index_none=Ingen installerte Perl-moduler ble funnet på systemet ditt.
index_tabmods=Eksisterende moduler index_tabmods=Eksisterende moduler
index_tabinstall=Installer modul index_tabinstall=Installer modul
index_tabsuggest=Foreslåtte moduler index_tabsuggest=Foreslåtte moduler
@@ -38,7 +38,7 @@ download_edir=Ikke en gyldig $1 katalog
download_etar=Kunne ikke pakke ut tar fil : $1 download_etar=Kunne ikke pakke ut tar fil : $1
download_emod=Ikke en gyldig Perl modul download_emod=Ikke en gyldig Perl modul
download_title=Installer modul download_title=Installer modul
download_header=Instillinger for installasjon av Perl modul download_header=Innstillinger for installasjon av Perl-modul
download_mod=Modul navn download_mod=Modul navn
download_mods=Modulnavn download_mods=Modulnavn
download_ver=Versjon download_ver=Versjon

17
dhcpd/config-alpine-linux Normal file
View File

@@ -0,0 +1,17 @@
dhcpd_conf=/etc/dhcp/dhcpd.conf
pid_file=/var/run/dhcp/dhcpd.pid
dhcpd_path=/usr/sbin/dhcpd
lease_file=/var/lib/dhcp/dhcpd.leases
lease_sort=0
dhcpd_nocols=5
lease_tz=0
start_cmd=/etc/init.d/dhcpd start
stop_cmd=/etc/init.d/dhcpd stop
restart_cmd=/etc/init.d/dhcpd restart
show_ip=0
show_mac=0
group_name=0
display_max=100
desc_name=0
interfaces_type=alpine
lease_vendor=0

View File

@@ -19,5 +19,5 @@ restart_cmd=Command to apply configuration,3,Kill and re-start
stop_cmd=Command to stop DHCP server,3,Kill process stop_cmd=Command to stop DHCP server,3,Kill process
pid_file=Path to DHCP server PID file,3,None pid_file=Path to DHCP server PID file,3,None
lease_file=DHCP server lease file,0 lease_file=DHCP server lease file,0
interfaces_type=Interfaces file type,4,redhat-Redhat,mandrake-Mandrake,suse-SuSE,debian-Debian,caldera-Caldera,gentoo-Gentoo,freebsd-FreeBSD,-Webmin interfaces_type=Interfaces file type,4,redhat-Redhat,mandrake-Mandrake,suse-SuSE,debian-Debian,caldera-Caldera,gentoo-Gentoo,alpine-Alpine,freebsd-FreeBSD,-Webmin
version=DHCP server version,3,Work out automatically version=DHCP server version,3,Work out automatically

View File

@@ -73,6 +73,11 @@ elsif ($config{'interfaces_type'} eq 'gentoo') {
&read_env_file("/etc/conf.d/dhcp", \%dhcp); &read_env_file("/etc/conf.d/dhcp", \%dhcp);
$iface = $dhcp{'IFACE'}; $iface = $dhcp{'IFACE'};
} }
elsif ($config{'interfaces_type'} eq 'alpine') {
# Interfaces are set in a file on Alpine
&read_env_file("/etc/conf.d/dhcpd", \%dhcp);
$iface = $dhcp{'DHCPD_IFACE'};
}
elsif ($config{'interfaces_type'} eq 'freebsd') { elsif ($config{'interfaces_type'} eq 'freebsd') {
# From FreeBSD rc.conf file # From FreeBSD rc.conf file
&foreign_require("init"); &foreign_require("init");
@@ -114,4 +119,3 @@ print &ui_submit($text{'save'});
print &ui_form_end(undef,undef,1); print &ui_form_end(undef,undef,1);
&ui_print_footer("", $text{'listl_return'}); &ui_print_footer("", $text{'listl_return'});

View File

@@ -1,5 +1,5 @@
name=DHCPD name=DHCPD
category=servers category=servers
os_support=debian-linux freebsd osf1 redhat-linux mandrake-linux slackware-linux solaris suse-linux united-linux unixware openserver open-linux turbo-linux openbsd corel-linux cobalt-linux irix netbsd msc-linux generic-linux gentoo-linux hpux trustix-linux macos sol-linux coherent-linux openmamba-linux pardus-linux os_support=debian-linux freebsd osf1 redhat-linux mandrake-linux slackware-linux solaris suse-linux united-linux unixware openserver open-linux turbo-linux openbsd corel-linux cobalt-linux irix netbsd msc-linux generic-linux alpine-linux gentoo-linux hpux trustix-linux macos sol-linux coherent-linux openmamba-linux pardus-linux
desc=DHCP Server desc=DHCP Server
longdesc=Manage shared networks, subnets, hosts and groups for ISC DHCPD. longdesc=Manage shared networks, subnets, hosts and groups for ISC DHCPD.

View File

@@ -103,6 +103,12 @@ elsif ($config{'interfaces_type'} eq 'gentoo') {
$dhcp{'IFACE'} = $iface; $dhcp{'IFACE'} = $iface;
&write_env_file("/etc/conf.d/dhcp", \%dhcp); &write_env_file("/etc/conf.d/dhcp", \%dhcp);
} }
elsif ($config{'interfaces_type'} eq 'alpine') {
# Interfaces are set in a file on Alpine
&read_env_file("/etc/conf.d/dhcpd", \%dhcp);
$dhcp{'DHCPD_IFACE'} = $iface;
&write_env_file("/etc/conf.d/dhcpd", \%dhcp);
}
elsif ($config{'interfaces_type'} eq 'freebsd') { elsif ($config{'interfaces_type'} eq 'freebsd') {
# Update FreeBSD rc.conf file # Update FreeBSD rc.conf file
&foreign_require("init"); &foreign_require("init");
@@ -110,4 +116,3 @@ elsif ($config{'interfaces_type'} eq 'freebsd') {
} }
&redirect(""); &redirect("");

16
dovecot/config_info.pl Normal file
View File

@@ -0,0 +1,16 @@
require 'dovecot-lib.pl';
# config_post_save(&newconfig, &oldconfig)
# Called after the module's configuration has been saved
sub config_post_save
{
my ($newconfig, $oldconfig) = @_;
my $f = $newconfig->{'add_config'};
$f =~ s/^\s+|\s+$//g;
if ($f && $f =~ /^\// && !-r $f && !-e $f && !-l $f) {
&open_lock_tempfile(ADDCONF, ">$f");
&close_tempfile(ADDCONF);
}
}
1;

View File

@@ -26,7 +26,9 @@ return undef;
# directives # directives
sub get_add_config_file sub get_add_config_file
{ {
foreach my $f (split(/\s+/, $config{'add_config'})) { my $f = $config{'add_config'} || "";
$f =~ s/^\s+|\s+$//g;
if ($f) {
return $f if (-r $f); return $f if (-r $f);
} }
return &get_config_file(); return &get_config_file();
@@ -364,7 +366,7 @@ if ($parent) {
} }
else { else {
# Add to the global config file # Add to the global config file
$file = &get_config_file(); $file = $before ? $before->{'file'} : &get_add_config_file();
$lref = &read_file_lines($file); $lref = &read_file_lines($file);
if ($before) { if ($before) {
# Add before another block # Add before another block

View File

@@ -1,15 +1,15 @@
index_ecmd=Fant ikke Dovecot tjenerprogrammet $1 på systemet ditt. Kanskje det ikke er installert, eller så er <a href='$2'>modulkonfigurasjonen</a> feil. index_ecmd=Fant ikke Dovecot-tjenerprogrammet $1 på systemet ditt. Kanskje det ikke er installert, eller så er <a href='$2'>modulkonfigurasjonen</a> feil.
index_econf=Fant ikke Dovecot konfigurasjonsfilen $1 på systemet ditt. Kanskjer den ikke er installert, eller så er <a href='$2'>modulkonfigurasjonen</a> feil. index_econf=Fant ikke Dovecot-konfigurasjonsfilen $1 på systemet ditt. Kanskje den ikke er installert, eller så er <a href='$2'>modulkonfigurasjonen</a> feil.
index_dovecot=Dovecot index_dovecot=Dovecot
index_stop=Stopp Dovecot tjener index_stop=Stopp Dovecot tjener
index_stopdesc=Steng ned den kjørende Dovecot IMAP/POP3 tjenerprosessen. Dette vil hindre brukere i å laste ned e-posten sin. index_stopdesc=Steng ned den kjørende Dovecot IMAP/POP3-tjenerprosessen. Dette vil hindre brukere i å laste ned e-posten sin.
index_start=Start Dovecot tjener index_start=Start Dovecot tjener
index_startdesc=Start Dovecot IMAP/POP3 tjenerprosessen, slik at brukere kan laste ned e-posten sin. index_startdesc=Start Dovecot IMAP/POP3-tjenerprosessen, slik at brukere kan laste ned e-posten sin.
index_apply=Bruk konfigurasjon index_apply=Bruk konfigurasjon
index_applydesc=Aktiver gjeldende Dovecot konfigurasjon ved å stoppe og omstarte tjener prosessen. index_applydesc=Aktiver gjeldende Dovecot konfigurasjon ved å stoppe og omstarte tjener prosessen.
index_boot=Start ved systemetoppstart? index_boot=Start ved systemetoppstart?
index_bootdesc=Endre denne innstillingen for å aktivere eller deaktivere oppstart av Dovecot tjeneren ved systemoppstart. index_bootdesc=Endre denne innstillingen for å aktivere eller deaktivere oppstart av Dovecot tjeneren ved systemoppstart.
index_return=modul indeks index_return=modulindeks
index_version=Versjon $1 index_version=Versjon $1
stop_err=Kunne ikke stoppe Dovecot stop_err=Kunne ikke stoppe Dovecot
@@ -19,52 +19,52 @@ apply_err=Kunne ikke ta i bruk konfigurasjon
net_title=Nettverk og protokoller net_title=Nettverk og protokoller
net_header=Innstillinger for Dovecot nettverk og protokoller net_header=Innstillinger for Dovecot nettverk og protokoller
net_protocols=Betjen e-post protokoller net_protocols=Betjen e-postprotokoller
net_pop3=POP3 net_pop3=POP3
net_imap=IMAP net_imap=IMAP
net_pop3s=POP3 (SSL) net_pop3s=POP3 (SSL)
net_imaps=IMAP (SSL) net_imaps=IMAP (SSL)
net_lmtp=LMTP net_lmtp=LMTP
net_ssl_disable=Godta SSL tilkoblinger? net_ssl_disable=Godta SSL-tilkoblinger?
net_imap_listen=Grensesnitt for IMAP tilkoblinger net_imap_listen=Grensesnitt for IMAP-tilkoblinger
net_pop3_listen=Grensesnitt for POP3 tilkoblinger net_pop3_listen=Grensesnitt for POP3-tilkoblinger
net_imaps_listen=Grensesnitt for IMAP SSL tilkoblinger net_imaps_listen=Grensesnitt for IMAP SSL-tilkoblinger
net_pop3s_listen=Grensesnitt for POP3 SSL tilkoblinger net_pop3s_listen=Grensesnitt for POP3 SSL-tilkoblinger
net_listen=Grensesnitt for ikke-SSL tilkoblinger net_listen=Grensesnitt for ikke-SSL-tilkoblinger
net_ssl_listen=Grensesnitt for SSL tilkoblinger net_ssl_listen=Grensesnitt for SSL-tilkoblinger
net_listen0=Standard net_listen0=Standard
net_listen1=Alle IPv4 og IPv6 net_listen1=Alle IPv4 og IPv6
net_listen2=Alle IPv4 net_listen2=Alle IPv4
net_listen3=IP adresse net_listen3=IP adresse
net_err=Kunne ikke lagre nettverksinnstillinger net_err=Kunne ikke lagre nettverksinnstillinger
net_eimap_listen=Ugyldig IP adresse for IMAP tilkoblinger net_eimap_listen=Ugyldig IP adresse for IMAP-tilkoblinger
net_epop3_listen=Ugyldig IP adresse for POP3 tilkoblinger net_epop3_listen=Ugyldig IP adresse for POP3-tilkoblinger
net_eimaps_listen=Ugyldig IP adresse for IMAP SSL tilkoblinger net_eimaps_listen=Ugyldig IP adresse for IMAP SSL-tilkoblinger
net_epop3s_listen=Ugyldig IP adresse for POP3 SSL tilkoblinger net_epop3s_listen=Ugyldig IP adresse for POP3 SSL-tilkoblinger
net_elisten=Ugyldig IP adresse for ikke-SSL tilkoblinger net_elisten=Ugyldig IP adresse for ikke-SSL-tilkoblinger
net_essl_listen=Ugyldig IP adresse for SSL tilkoblinger net_essl_listen=Ugyldig IP adresse for SSL-tilkoblinger
imap_title=IMAP innstillinger imap_title=IMAP innstillinger
pop3_title=POP3 innstillinger pop3_title=POP3 innstillinger
ssl_title=SSL Konfigurasjon ssl_title=SSL Konfigurasjon
ssl_header=Instillinger for IMAP og POP3 SSL modus ssl_header=Innstillinger for IMAP og POP3 SSL modus
ssl_key=Fil med SSL privat nøkkel ssl_key=Fil med SSL privat nøkkel
ssl_cert=SSL sertifikatfil ssl_cert=SSL-sertifikatfil
ssl_ca=SSL CA sertifikatfil ssl_ca=SSL CA-sertifikatfil
ssl_pass=Passord for nøkkelfil ssl_pass=Passord for nøkkelfil
ssl_prompt=Ingen nødvendig ssl_prompt=Ingen nødvendig
ssl_regen=Intervall mellom regenerering av SSL parametere ssl_regen=Intervall mellom regenerering av SSL parametere
ssl_hours=timer ssl_hours=timer
ssl_none=Ingen ssl_none=Ingen
ssl_plain=Forby vanlig-tekst autentisering i ikke-SSL modus? ssl_plain=Forby vanlig-tekst autentisering i ikke-SSL modus?
ssl_err=Kunne ikke lagre SSL konfigurasjon ssl_err=Kunne ikke lagre SSL-konfigurasjon
ssl_ekey=Manglende eller ikke-eksisterende fil med privat nøkkel ssl_ekey=Manglende eller ikke-eksisterende privat nøkkelfil
ssl_ecert=Manglende eller ikke-eksisterende sertifikat fil ssl_ecert=Manglende eller ikke-eksisterende sertifikatfil
ssl_eca=Manglende eller ikke-eksisterende CA sertifikat fil ssl_eca=Manglende eller ikke-eksisterende CA-sertifikatfil
ssl_eregen=Manglende eller ikke-numerisk intervall for regenerering av parametere ssl_eregen=Manglende eller ikke-numerisk intervall for regenerering av parametere
ssl_epass=Ingen passord for SSL nøkkel-fil angitt ssl_epass=Ingen passord for SSL-nøkkelfil angitt
misc_title=Andre innstillinger misc_title=Andre innstillinger
@@ -87,7 +87,7 @@ login_realms=SASL autentiseringsområde
login_realm=Standard autentiseringsområde login_realm=Standard autentiseringsområde
login_mechs=Autentiserings-metoder login_mechs=Autentiserings-metoder
login_anonymous=Anonym login_anonymous=Anonym
login_plain=Vanlig-tekst login_plain=Vanlig tekst
login_digest-md5=Digest-MD5 login_digest-md5=Digest-MD5
login_cram-md5=Cram-MD5 login_cram-md5=Cram-MD5
login_apop=APOP login_apop=APOP
@@ -105,19 +105,19 @@ login_shadow=Unix <tt>shadow</tt> fil
login_dpam=Standard PAM tjeneste (<tt>dovecot</tt>) login_dpam=Standard PAM tjeneste (<tt>dovecot</tt>)
login_pam=PAM tjeneste $1 login_pam=PAM tjeneste $1
login_session=Åpne og lukk PAM sesjoner login_session=Åpne og lukk PAM sesjoner
login_pam2=PAM tjeneste $1<br>  $2<br>  Bruk cache nøkkel $3 login_pam2=PAM tjeneste $1<br>  $2<br>  Bruk cache-nøkkel $3
login_other=Annen Dovecot innstilling $1 login_other=Annen Dovecot innstilling $1
login_epasswdfile=Manglende eller ikke-eksisterende egendefinert passordfil login_epasswdfile=Manglende eller ikke-eksisterende egendefinert passordfil
login_euid=Manglende eller ikke-numerisk UID login_euid=Manglende eller ikke-numerisk UID
login_egid=Manglende eller ikke-numerisk GID login_egid=Manglende eller ikke-numerisk GID
login_ehome=Manglende hjemmekatalog login_ehome=Manglende hjemmekatalog
login_eldap=Manglende eller ikke-eksisterende KDAP konfigurasjonsfil login_eldap=Manglende eller ikke-eksisterende LDAP-konfigurasjonsfil
login_epgsql=Manglende eller ikke-eksisterende PortgreSQL konfigurasjonsfil login_epgsql=Manglende eller ikke-eksisterende PostgreSQL-konfigurasjonsfil
login_esql=Manglende eller ikke-eksisterende SQL konfigurasjonsfil login_esql=Manglende eller ikke-eksisterende SQL-konfigurasjonsfil
login_eppam=Manglende eller ugyldig PAM tjeneste login_eppam=Manglende eller ugyldig PAM-tjeneste
login_bsdauth=BSD autentisering<br>  Bruk cache nøkkel $1 login_bsdauth=BSD-autentisering<br> Bruk cache-nøkkel $1
login_checkpassword=Eksternt program $1 login_checkpassword=Eksternt program $1
login_eckey=Manglende eller ugyldig cache nøkkel login_eckey=Manglende eller ugyldig cache-nøkkel
login_echeckpassword=Manglende eller ugyldig eksternt passord-sjekk program login_echeckpassword=Manglende eller ugyldig eksternt passord-sjekk program
login_procs=Maks. antall innloggingsprosesser login_procs=Maks. antall innloggingsprosesser
login_count=Innledende innloggingsprosesser login_count=Innledende innloggingsprosesser
@@ -180,10 +180,10 @@ mail_econtrol=Manglende eller ugyldig absolutt sti for kontrollfiler
log_net=Endrett nettverk og protokoller log_net=Endrett nettverk og protokoller
log_login=Endret bruker og innloggingsinnstillinger log_login=Endret bruker og innloggingsinnstillinger
log_mail=Endret e-post filer log_mail=Endret e-post filer
log_ssl=Endret SSL konfigurasjon log_ssl=Endret SSL-konfigurasjon
log_apply=Tok i bruk konfigurasjon log_apply=Tok i bruk konfigurasjon
log_start=Startet Dovecot tjener log_start=Startet Dovecot-tjener
log_stop=Stoppet Dovecot tjener log_stop=Stoppet Dovecot-tjener
log_bootup=Aktiverte Dovecot ved oppstart log_bootup=Aktiverte Dovecot ved oppstart
log_bootdown=Deaktiverte Dovecot ved oppstart log_bootdown=Deaktiverte Dovecot ved oppstart
log_manual=Redigerte konfigfilen $1 manuelt log_manual=Redigerte konfigfilen $1 manuelt

View File

@@ -1,14 +1,14 @@
index_title=Fetchmail e-post henting index_title=Fetchmail e-posthenting
index_poll=Tjener som skal sjekkes index_poll=Tjener som skal sjekkes
index_proto=Protokoll index_proto=Protokoll
index_active=Aktiv? index_active=Aktiv?
index_users=Eksterne og lokale brukere index_users=Eksterne og lokale brukere
index_add=Legg til ny tjener. index_add=Legg til ny tjener.
index_run=Sjekk alle tjenere index_run=Sjekk alle tjenere
index_global=Rediger standard innstillinger. index_global=Rediger standardinnstillinger.
index_user=Unix bruker index_user=Unix-bruker
index_conf=Fetchmail konfigurasjon index_conf=Fetchmail-konfigurasjon
index_file=Fetchmail konfigurasjon i $1 index_file=Fetchmail-konfigurasjon i $1
index_return=tjenerliste index_return=tjenerliste
index_start=Start Fetchmail Daemon index_start=Start Fetchmail Daemon
index_stop=Stopp Fetchmail Daemon index_stop=Stopp Fetchmail Daemon
@@ -17,24 +17,24 @@ index_stopmsg=Klikk på denne knappen for å stoppe fetchmail daemon som for øy
index_efetchmail=Fant ikke fetchmail programmet $1. Kanskje fetchmail ikke er installert på systemet ditt, eller så er ikke <a href='$2'>modulkonfigurasjonen</a> korrekt. index_efetchmail=Fant ikke fetchmail programmet $1. Kanskje fetchmail ikke er installert på systemet ditt, eller så er ikke <a href='$2'>modulkonfigurasjonen</a> korrekt.
index_none=Ingen Unix brukere har <tt>.fetchmailrc</tt> filer. index_none=Ingen Unix brukere har <tt>.fetchmailrc</tt> filer.
index_cron=Tidsplanlagt sjekking index_cron=Tidsplanlagt sjekking
index_crondesc=Klikk på denne knappen for å opprette, endre eller fjerne en Cronjobb som kjører Fettchmail ihht. en tidsplan for å se etter og laste ned e-post vha. konfigurasjonen ovenfor. index_crondesc=Klikk på denne knappen for å opprette, endre eller fjerne en Cronjobb som kjører Fetchmail ihht. en tidsplan for å se etter og laste ned e-post vha. konfigurasjonen ovenfor.
index_crondesc2=Klikk på denne knappen for å opprette, endre eller fjerne en Cronjobb som kjører Fetchmail automatisk ihht tidsplan, og ser etter og laster ned e-post for alle angitte brukere. index_crondesc2=Klikk på denne knappen for å opprette, endre eller fjerne en Cronjobb som kjører Fetchmail automatisk ihht tidsplan, og ser etter og laster ned e-post for alle angitte brukere.
index_version=Fetchmail versjon $1 index_version=Fetchmail versjon $1
index_header=Brukere med Fatchmail konfigurasjoner index_header=Brukere med Fatchmail-konfigurasjoner
index_search=Vis Fetchmail konfigurasjon for: index_search=Vis Fetchmail-konfigurasjon for:
index_show=Vis index_show=Vis
index_toomany=Det er for mange brukere på systemet ditt til å vises. index_toomany=Det er for mange brukere på systemet ditt til å vises.
poll_create=Legg til tjener poll_create=Legg til tjener
poll_edit=Rediger tjener poll_edit=Rediger tjener
poll_header=Innstillinger for e-post tjener poll_header=Innstillinger for e-posttjener
poll_poll=Tjener navn poll_poll=Tjenernavn
poll_auth=Autentiseringsmetode poll_auth=Autentiseringsmetode
poll_skip=Spørring aktivert? poll_skip=Spørring aktivert?
poll_via=E-post tjener som skal kontaktes poll_via=E-posttjener som skal kontaktes
poll_via_def=Samme som tjener navn poll_via_def=Samme som tjenernavn
poll_proto=Protokoll poll_proto=Protokoll
poll_port=Tjener port poll_port=Tjenerport
poll_uheader=Brukerdetaljer for e-post tjener poll_uheader=Brukerdetaljer for e-post tjener
poll_user=Ekstern bruker poll_user=Ekstern bruker
poll_pass=Eksternt passord poll_pass=Eksternt passord
@@ -42,7 +42,7 @@ poll_is=Lokal(e) bruker(e)
poll_keep=La meldinger være igjen på tjener? poll_keep=La meldinger være igjen på tjener?
poll_fetchall=Alltid hent alle meldinger? poll_fetchall=Alltid hent alle meldinger?
poll_usually=Vanligvis nei poll_usually=Vanligvis nei
poll_ssl=Koble til i SSL modus? poll_ssl=Koble til i SSL-modus?
poll_err=Kunne ikke lagre tjener poll_err=Kunne ikke lagre tjener
poll_epoll=Manglende eller ugyldig tjenernavn poll_epoll=Manglende eller ugyldig tjenernavn
poll_evia=Ugyldig e-posttjener navn poll_evia=Ugyldig e-posttjener navn
@@ -109,7 +109,7 @@ acl_daemon=Kan konfigurere Fetchmail daemon?
cron_title=Tidsplanlagt sjekking cron_title=Tidsplanlagt sjekking
cron_desc=Denne siden kan brukes til å aktivere og deaktivere Cronjobben som sjekker e-post tjenerne i din Fetchmail konfigurasjon ihht tidsplan. Det er bedre å bruke en Cron jobb enn å bruke Fetchmail daemon siden den ikke behøver å omstartes ved oppstart av systemet. cron_desc=Denne siden kan brukes til å aktivere og deaktivere Cronjobben som sjekker e-post tjenerne i din Fetchmail konfigurasjon ihht tidsplan. Det er bedre å bruke en Cron jobb enn å bruke Fetchmail daemon siden den ikke behøver å omstartes ved oppstart av systemet.
cron_header=Instillinger for tidsplanlagt Fetchmail cron_header=Innstillinger for tidsplanlagt Fetchmail
cron_enabled=Tidsplanlagt sjekking aktivert? cron_enabled=Tidsplanlagt sjekking aktivert?
cron_yes=Ja, på tidspunktene angitt nedenfor .. cron_yes=Ja, på tidspunktene angitt nedenfor ..
cron_output=Måt for utdata fra FetchMail cron_output=Måt for utdata fra FetchMail
@@ -120,9 +120,9 @@ cron_cron=Output til cron
cron_owner=Send e-post til den brukeren som får konfigurasjonen sjekket cron_owner=Send e-post til den brukeren som får konfigurasjonen sjekket
cron_user=Kjør Fetchmail som brukeren cron_user=Kjør Fetchmail som brukeren
cron_err=Kunne ikke lagre tidsplanlagt sjekking cron_err=Kunne ikke lagre tidsplanlagt sjekking
cron_efile=Manglende eller ugyldig output filnavn cron_efile=Manglende eller ugyldig utdatafilnavn
cron_email=Manglende eller ugyldig e-post adresse cron_email=Manglende eller ugyldig e-postadresse
cron_euser=Manglende eller ugyldig Unix bruker cron_euser=Manglende eller ugyldig Unix-bruker
cron_errors=Vis bare utdata dersom det oppstår en feil? cron_errors=Vis bare utdata dersom det oppstår en feil?
cron_ecannot2=Du har ikke lov til å konfigurere tidsplanlagt sjekking cron_ecannot2=Du har ikke lov til å konfigurere tidsplanlagt sjekking

View File

@@ -1,11 +1,11 @@
index_title=Filsystem sikkerhetskopi index_title=Filsystem-sikkerhetskopi
index_add=Legg til en ny sikkerhetskopi av katalog: index_add=Legg til en ny sikkerhetskopi av katalog:
index_none=Det er ikke opprettet noen konfigurasjoner for sikkerhetskopier av filsystemer enda. index_none=Det er ikke opprettet noen konfigurasjoner for sikkerhetskopier av filsystemer enda.
index_none2=Det finnes ingen konfigurasjoner for sikkerhetskopiering av filsystemer som du har tilgang til. index_none2=Det finnes ingen konfigurasjoner for sikkerhetskopiering av filsystemer som du har tilgang til.
index_restore=Gjenopprett sikkerhetskopi av filsystem type: index_restore=Gjenopprett sikkerhetskopi av filsystemtype:
index_restoremsg=Velg filsystemtype og klikk på denne knappen for å begynne prosessen med å velge en filsystem-sikkerhetskopi som skal gjenopprettes. index_restoremsg=Velg filsystemtype og klikk på denne knappen for å begynne prosessen med å velge en filsystem-sikkerhetskopi som skal gjenopprettes.
index_restore2=Gjenopprett sikkerhetskopi av filsystem index_restore2=Gjenopprett sikkerhetskopi av filsystem
index_restoremsg2=Klikk på denne knappen for å starte prosessen med å velge en filsyste,-sikkerhetskopi som skal gjenopprettes. index_restoremsg2=Klikk på denne knappen for å starte prosessen med å velge en filsystem-sikkerhetskopi som skal gjenopprettes.
index_ecommands=Ingen av kommandoene for sikkerhetskopiering av filsystemer (som f.eks. $1) som er nødvendige for denne modulen, ble funnet på systemet ditt. Kanskje de ikke er installert. index_ecommands=Ingen av kommandoene for sikkerhetskopiering av filsystemer (som f.eks. $1) som er nødvendige for denne modulen, ble funnet på systemet ditt. Kanskje de ikke er installert.
index_return=liste med sikkerhetskopier index_return=liste med sikkerhetskopier
index_running=Kjørende sikkerhetskopi jobber index_running=Kjørende sikkerhetskopi jobber
@@ -20,7 +20,7 @@ index_newtape=Tape lastet
index_noact=Ingen tilgjengelig index_noact=Ingen tilgjengelig
index_now=Sikkerhetskopi.. index_now=Sikkerhetskopi..
index_follow=Etter $1 index_follow=Etter $1
index_forcetar=I TAR format index_forcetar=I TAR-format
index_delete=Slett valgte sikkerhetskopier index_delete=Slett valgte sikkerhetskopier
index_nostrftime=Advarsel - noen sikkerhetskopi-jobber bruker % i filnavn, men strftime erstatning er ikke aktivert på modulens konfig.side. index_nostrftime=Advarsel - noen sikkerhetskopi-jobber bruker % i filnavn, men strftime erstatning er ikke aktivert på modulens konfig.side.
@@ -30,7 +30,7 @@ dump_fs=Filsystem
dump_sched=Tidsplanlagt? dump_sched=Tidsplanlagt?
dump_when=På tidspunktene dump_when=På tidspunktene
dump_dest=Sikkerhetskopier til dump_dest=Sikkerhetskopier til
dump_file=Fil eller tape enhet dump_file=Fil eller tape-enhet
dump_host=Vert $1 som bruker $2 i fil eller enhet $3 dump_host=Vert $1 som bruker $2 i fil eller enhet $3
dump_level=Dump nivå dump_level=Dump nivå
dump_level_0=0 (Full sikkerhetskopi) dump_level_0=0 (Full sikkerhetskopi)
@@ -51,7 +51,7 @@ dump_ebsize=Manglende eller ugyldig blokkstørrelse for dump record
dump_max=Maks. filstørrelse som skal tas med dump_max=Maks. filstørrelse som skal tas med
dump_unlimited=Ubegrenset dump_unlimited=Ubegrenset
dump_attribs=Ta med fil-attributter? dump_attribs=Ta med fil-attributter?
dump_over=Spø før tape overskrives? dump_over=Spør før tape overskrives?
dump_overwrite=Skirv alltid over sikkerhetskopi? dump_overwrite=Skirv alltid over sikkerhetskopi?
dump_invent=Loggfør sikkerhetskopi i inventar? dump_invent=Loggfør sikkerhetskopi i inventar?
dump_emax=Manglende eller ugyldig maksimum filstørrelse dump_emax=Manglende eller ugyldig maksimum filstørrelse
@@ -71,12 +71,12 @@ dump_after=Kommando som skal kjøres etter sikkerhetskopiering
dump_fok=Stopp dersom kommando feiler dump_fok=Stopp dersom kommando feiler
dump_fok2=Rapporter feil dersom kommando feiler dump_fok2=Rapporter feil dersom kommando feiler
dump_aok=Hopp over kommando selv om backup feiler dump_aok=Hopp over kommando selv om backup feiler
dump_extra=Ekstra kommando-linje parametere dump_extra=Ekstra kommandolinjeparametere
dump_rsh=Ekstern sikkerhetskopieringskommando dump_rsh=Ekstern sikkerhetskopieringskommando
dump_rsh0=Standard (RSH) dump_rsh0=Standard (RSH)
dump_rsh1=SSH dump_rsh1=SSH
dump_rsh3=FTP dump_rsh3=FTP
dump_rsh2=Annen kommando .. dump_rsh2=Annen kommando ...
dump_pass=Passord for SSH innlogging dump_pass=Passord for SSH innlogging
dump_pass2=Passord for SSH/FTP innlogging dump_pass2=Passord for SSH/FTP innlogging
dump_ersh=Manglende eller ugyldig ekstern sikkerhetskopieringskommando dump_ersh=Manglende eller ugyldig ekstern sikkerhetskopieringskommando
@@ -98,9 +98,9 @@ dump_ignoreread=Ignorer lese-feil på filer?
dump_notape=Spør etter ny tape hvis nødvendig? dump_notape=Spør etter ny tape hvis nødvendig?
dump_rmt=Sti til <tt>rms</tt> på eksternt system dump_rmt=Sti til <tt>rms</tt> på eksternt system
dump_links=Følg symbolske lenker? dump_links=Følg symbolske lenker?
dump_egzip=Instillingen for gzip komprimering er ikke kompatibel med innstillingen for tape størrelse dump_egzip=Innstillingen for gzip-komprimering er ikke kompatibel med innstillingen for tape størrelse
dump_egzip2=Instillingen for gzip komprimering er ikke kompatibel med innstillingen for fler-filers sikkerhetskopi dump_egzip2=Innstillingen for gzip-komprimering er ikke kompatibel med innstillingen for fler-filers sikkerhetskopi
dump_egzip3=Instillingen for gzip komprimering er ikke kompatibel med innstillingen for kun å legge til nye filer i arkivet dump_egzip3=Innstillingen for gzip-komprimering er ikke kompatibel med innstillingen for kun å legge til nye filer i arkivet
dump_emulti=Fler-filers sikkerhetskopiering kan ikke kjøres mot en tape-enhet dump_emulti=Fler-filers sikkerhetskopiering kan ikke kjøres mot en tape-enhet
dump_emulti2=Fler-filers sikkerhetskopiering kan ikke kjøres mot en ekstern tjener dump_emulti2=Fler-filers sikkerhetskopiering kan ikke kjøres mot en ekstern tjener
dump_ermt=Manglende eller ugyldig sti til <tt>rmt</tt> programmet dump_ermt=Manglende eller ugyldig sti til <tt>rmt</tt> programmet
@@ -219,7 +219,7 @@ acl_cmds=Kan redigere før og etter kommandoer?
acl_extra=Kan redigere ekstra kommando-linje parametere? acl_extra=Kan redigere ekstra kommando-linje parametere?
acl_dirs=Tillatte kataloger for sikkerhetskopiering acl_dirs=Tillatte kataloger for sikkerhetskopiering
acl_all=Alle kataloger acl_all=Alle kataloger
acl_list=Bare i listen .. acl_list=Bare i listen ...
delete_err=Kunne ikke slette sikkerhetskopier delete_err=Kunne ikke slette sikkerhetskopier
delete_enone=Ingen valgt delete_enone=Ingen valgt

View File

@@ -2,6 +2,6 @@ name=Dump
desc=Filesystem Backup desc=Filesystem Backup
category=system category=system
depends=mount cron proc mailboxes depends=mount cron proc mailboxes
os_support=redhat-linux mandrake-linux slackware-linux debian-linux suse-linux united-linux open-linux turbo-linux corel-linux cobalt-linux msc-linux generic-linux solaris freebsd macos gentoo-linux irix trustix-linux coherent-linux pardus-linux os_support=redhat-linux mandrake-linux slackware-linux debian-linux suse-linux united-linux open-linux turbo-linux corel-linux cobalt-linux msc-linux generic-linux alpine-linux solaris freebsd macos gentoo-linux irix trustix-linux coherent-linux pardus-linux
longdesc=Backup and restore filesystems using the dump and restore family of commands. longdesc=Backup and restore filesystems using the dump and restore family of commands.
readonly=1 readonly=1

File diff suppressed because one or more lines are too long

View File

@@ -124,6 +124,15 @@ elsif ($init_mode eq "systemd") {
# Create systemd # Create systemd
# See updateboot.pl # See updateboot.pl
} }
elsif ($init_mode eq "openrc") {
# Create OpenRC script, if missing
&enable_at_boot($product, $ucproduct,
"$config_directory/.start-init",
"$config_directory/.stop-init",
undef,
{ 'fork' => 1,
'pidfile' => $var_directory."/miniserv.pid" });
}
elsif ($init_mode eq "rc" || $init_mode eq "upstart") { elsif ($init_mode eq "rc" || $init_mode eq "upstart") {
# Create RC or upstart script # Create RC or upstart script
&enable_at_boot($product, $ucproduct, &enable_at_boot($product, $ucproduct,
@@ -141,4 +150,3 @@ elsif ($init_mode eq "launchd") {
$config{'atboot_product'} = $product; $config{'atboot_product'} = $product;
&save_module_config(); &save_module_config();

11
init/config-alpine-linux Normal file
View File

@@ -0,0 +1,11 @@
init_mode=openrc
init_base=/etc/runlevels
init_dir=/etc/init.d
reboot_command=reboot
shutdown_command=poweroff
expert=0
desc=1
status_check=1
order=0
sort_mode=0
boot_levels=default

View File

@@ -1,11 +1,12 @@
line1=Configurable options,11 line1=Configurable options,11
expert=Allow selection of individual runlevels?,1,1-Yes,0-No expert=Allow selection of individual runlevels?,1,1-Yes,0-No
desc=Display actions with descriptions,1,2-Yes&#44; and show all runlevels,1-Yes,0-No desc=Display actions with descriptions,1,2-Yes&#44; and show all runlevels,1-Yes,0-No
systemd_dedicated=Hide systemd services table?,1,-No,1-Yes
order=Show boot order of actions?,1,1-Yes,0-No order=Show boot order of actions?,1,1-Yes,0-No
status_check=Show current status of actions,1,2-On index and action pages,1-On action page only,0-No status_check=Show current status of actions,1,2-On index and action pages,1-On action page only,0-No
sort_mode=Sort actions by,1,1-Boot order,0-Name sort_mode=Sort actions by,1,1-Boot order,0-Name
line2=System configuration,11 line2=System configuration,11
init_mode=Boot system,4,-Detect automatically,init-SysV init,upstart-Upstart,systemd-Systemd,osx-MacOS,rc-FreeBSD RC scripts,win32-Windows services,local-Single boot script init_mode=Boot system,4,-Detect automatically,systemd-Systemd,init-SysV init,openrc-OpenRC,upstart-Upstart,local-Single boot script,rc-FreeBSD RC scripts,launchd-macOS launchd,osx-Legacy macOS StartupItems,win32-Windows services
init_base=Directory in which runlevel directories are located,0 init_base=Directory in which runlevel directories are located,0
init_dir=Directory containing master init scripts,0 init_dir=Directory containing master init scripts,0
order_digits=Number of digits in action order,0 order_digits=Number of digits in action order,0
@@ -17,8 +18,8 @@ shutdown_command=Command to shutdown the system,0
inittab_id=inittab ID for bootup runlevel,0 inittab_id=inittab ID for bootup runlevel,0
rc_dir=FreeBSD rc scripts directories,3,None rc_dir=FreeBSD rc scripts directories,3,None
rc_conf=FreeBSD configuration files,3,None rc_conf=FreeBSD configuration files,3,None
line3=OSX system configuration,11 line3=macOS StartupItems configuration,11
startup_dirs=Darwin StartupItems directories,0 startup_dirs=macOS StartupItems directories,0
darwin_setup=Directory for custom StartupItems,0 darwin_setup=Directory for custom StartupItems,0
hostconfig=Darwin hostconfig file,0 hostconfig=Legacy hostconfig file,0
plist=Name of plist in a StartupItems directory,0 plist=Name of plist in a StartupItems directory,0

View File

@@ -5,7 +5,7 @@ order=Mostra l'ordre d'engegada de les accions,1,1-Sí,0-No
status_check=Mostra l'estat actual de les accions,1,2-A les pàgines d'índex i de l'acció,1-Només a la pàgina de l'acció,0-No status_check=Mostra l'estat actual de les accions,1,2-A les pàgines d'índex i de l'acció,1-Només a la pàgina de l'acció,0-No
sort_mode=Ordena les accions per,1,1-Ordre d'engegada,0-Nom sort_mode=Ordena les accions per,1,1-Ordre d'engegada,0-Nom
line2=Configuració del sistema,11 line2=Configuració del sistema,11
init_mode=Engegada del sistema,4,-Detecta-ho automàticament,init-Init de SysV,upstart-Upstart,systemd-Systemd,osx-MacOS,rc-Scripts RC de FreeBSD,win32-Serveis Windows,local-Script únic d'engegada init_mode=Engegada del sistema,4,-Detecta-ho automàticament,systemd-Systemd,init-Init de SysV,openrc-OpenRC,upstart-Upstart,local-Script únic d'engegada,rc-Scripts RC de FreeBSD,launchd-macOS launchd,osx-Legacy macOS StartupItems,win32-Serveis Windows
init_base=Directori on s'allotgen els directoris de nivells d'execució,0 init_base=Directori on s'allotgen els directoris de nivells d'execució,0
init_dir=Directori que conté els scripts init mestres,0 init_dir=Directori que conté els scripts init mestres,0
order_digits=Nombre de dígits de l'ordre de l'acció,0 order_digits=Nombre de dígits de l'ordre de l'acció,0

View File

@@ -5,7 +5,7 @@ order=Zeige die Aktionen in Reihenfolge des Starts an?,1,1-Ja,0-Nein
status_check=Zeige aktuellen Status der Aktionen,1,2-Auf Index&#45; und Aktionen&#45;Seite,1-Nur auf der Aktionen&#45;Seite,0-Nein status_check=Zeige aktuellen Status der Aktionen,1,2-Auf Index&#45; und Aktionen&#45;Seite,1-Nur auf der Aktionen&#45;Seite,0-Nein
sort_mode=Sortiere Aktionen nach,1,1-Boot&#45;Reihenfolge,0-Name sort_mode=Sortiere Aktionen nach,1,1-Boot&#45;Reihenfolge,0-Name
line2=Systemkonfiguration,11 line2=Systemkonfiguration,11
init_mode=Boot&#45;System,4,-automatisch erkennen,init-SysV init,upstart-Upstart,systemd-Systemd,osx-MacOS,rc-FreeBSD RC Script,win32-Windows&#45;Dienste,local-Single Bootskript init_mode=Boot&#45;System,4,-automatisch erkennen,systemd-Systemd,init-SysV init,openrc-OpenRC,upstart-Upstart,local-Single Bootskript,rc-FreeBSD RC Script,launchd-macOS launchd,osx-Legacy macOS StartupItems,win32-Windows&#45;Dienste
init_base=Verzeichnis&#44; in dem die Runlevel-Verzeichnisse liegen,0 init_base=Verzeichnis&#44; in dem die Runlevel-Verzeichnisse liegen,0
init_dir=Verzeichnis&#44; in dem das Haupt-Skript liegt,0 init_dir=Verzeichnis&#44; in dem das Haupt-Skript liegt,0
order_digits=Anzahl Ziffern in Aktionsreihenfolge,0 order_digits=Anzahl Ziffern in Aktionsreihenfolge,0

View File

@@ -5,7 +5,7 @@ order=Vis handlingenes oppstartsrekkefølge?1,1-Ja,0-Nei
status_check=Vis handlingenes gjeldende status,1,2-På indeks- og handlingssider,1-Bare på handlingssider,0-Nei status_check=Vis handlingenes gjeldende status,1,2-På indeks- og handlingssider,1-Bare på handlingssider,0-Nei
sort_mode=Sorter handlinger etter,1,1-Oppstartrekkefølge,0-Navn sort_mode=Sorter handlinger etter,1,1-Oppstartrekkefølge,0-Navn
line2=System konfigurasjon,11 line2=System konfigurasjon,11
init_mode=Oppstartssystem,4,-Oppdag automatisk,init-SysV init,upstart-Upstart,systemd-Systemd,osx-MacOS,rc-FreeBSD RC scripts,win32-Windows tjenester,local-Enkelt oppstartsscript init_mode=Oppstartssystem,4,-Oppdag automatisk,systemd-Systemd,init-SysV init,openrc-OpenRC,upstart-Upstart,local-Enkelt oppstartsscript,rc-FreeBSD RC scripts,launchd-macOS launchd,osx-Legacy macOS StartupItems,win32-Windows tjenester
init_base=Katalog hvor kjøretids-kataloger finnes,0 init_base=Katalog hvor kjøretids-kataloger finnes,0
init_dir=Katalog som inneholder master init scripts,0 init_dir=Katalog som inneholder master init scripts,0
order_digits=Antall sifre i handlingssortering,0 order_digits=Antall sifre i handlingssortering,0

View File

@@ -329,70 +329,74 @@ elsif ($init_mode eq "upstart" && $access{'bootup'}) {
} }
elsif ($init_mode eq "systemd" && $access{'bootup'}) { elsif ($init_mode eq "systemd" && $access{'bootup'}) {
# Show systemd actions if (!&init_show_systemd_services()) {
print &ui_form_start("mass_systemd.cgi", "post"); my $systemd_link = &ui_tag('a',
@links = ( &select_all_link("d"), $text{'index_systemd_module'},
&select_invert_link("d"), { 'href' => '../systemd/' });
&ui_link("edit_systemd.cgi?new=1", $text{'index_sadd'}) ); print &ui_alert_box(
print &ui_links_row(\@links); &text('index_systemd_dedicated', $systemd_link),
print &ui_columns_start([ "", $text{'systemd_name'}, 'info', undef, undef, ""),"\n";
$config{'desc'} ? $text{'systemd_desc'} : (),
$text{'systemd_type'},
$text{'systemd_status'},
$text{'systemd_boot'},
$text{'index_ustatus'} ]);
my $units_piped = join('|', map { quotemeta } &get_systemd_unit_types());
foreach $u (&list_systemd_services()) {
if ($u->{'legacy'}) {
$l = "edit_action.cgi?0+".&urlize($u->{'name'});
}
else {
$l = "edit_systemd.cgi?name=".&urlize($u->{'name'});
}
my $sname = $u->{'name'};
my ($type) = $sname =~ /\.([^.]+)$/;
if (defined($type) && $type =~ /^(?:$units_piped)$/) {
$sname =~ s/\.$type$//;
}
else {
$type = '';
}
my $title = ($u->{'boot'} == -1 ?
&html_escape($sname) :
&ui_link($l, &html_escape($sname)));
my $desc = $config{'desc'} ? &html_escape($u->{'desc'}) : undef;
print &ui_columns_row([
&ui_checkbox("d", $u->{'name'}, undef),
$title,
$desc // (),
$type,
$u->{'fullstatus'} || "<i>$text{'index_unknown'}</i>",
$u->{'boot'} == 1 ?
&ui_text_color("$text{'yes'}", 'success') :
$u->{'boot'} == 2 ?
&ui_text_color("$text{'index_sboot6'}", 'success') :
$u->{'boot'} == -1 ?
&ui_text_color("$text{'index_sboot5'}", 'warn') :
&ui_text_color("$text{'no'}", 'warn'),
$u->{'status'} == 1 ? &ui_text_color("$text{'yes'}", 'success') :
$u->{'status'} == 0 ?
&ui_text_color("$text{'no'}", 'warn') :
"<i>$text{'index_unknown'}</i>",
]);
} }
print &ui_columns_end(); else {
print &ui_links_row(\@links); # Show systemd actions
print &ui_form_end([ [ "start", $text{'index_start'} ], print &ui_form_start("mass_systemd.cgi", "post");
[ "stop", $text{'index_stop'} ], @links = ( &select_all_link("d"),
[ "restart", $text{'index_restart'} ], &select_invert_link("d"),
undef, &ui_link("edit_systemd.cgi?new=1",
[ "addboot", $text{'index_addboot'} ], $text{'index_sadd'}) );
[ "delboot", $text{'index_delboot'} ], print &ui_links_row(\@links);
undef, print &ui_columns_start([ "", $text{'systemd_name'},
[ "addboot_start", $text{'index_addboot_start'} ], $config{'desc'} ?
[ "delboot_stop", $text{'index_delboot_stop'} ], $text{'systemd_desc'} : (),
]); $text{'systemd_status'},
$text{'systemd_boot'},
$text{'index_ustatus'} ]);
foreach $u (&list_systemd_services()) {
if ($u->{'legacy'}) {
$l = "edit_action.cgi?0+".&urlize($u->{'name'});
}
else {
$l = "edit_systemd.cgi?name=".&urlize($u->{'name'});
}
my $sname = $u->{'name'};
$sname =~ s/\.service$//;
my $title = ($u->{'boot'} == -1 ?
&html_escape($sname) :
&ui_link($l, &html_escape($sname)));
my $desc = $config{'desc'} ?
&html_escape($u->{'desc'}) : undef;
print &ui_columns_row([
&ui_checkbox("d", $u->{'name'}, undef),
$title,
$desc // (),
$u->{'fullstatus'} || "<i>$text{'index_unknown'}</i>",
$u->{'boot'} == 1 ?
&ui_text_color("$text{'yes'}", 'success') :
$u->{'boot'} == 2 ?
&ui_text_color("$text{'index_sboot6'}", 'success') :
$u->{'boot'} == -1 ?
&ui_text_color("$text{'index_sboot5'}", 'warn') :
&ui_text_color("$text{'no'}", 'warn'),
$u->{'status'} == 1 ? &ui_text_color("$text{'yes'}", 'success') :
$u->{'status'} == 0 ?
&ui_text_color("$text{'no'}", 'warn') :
"<i>$text{'index_unknown'}</i>",
]);
}
print &ui_columns_end();
print &ui_links_row(\@links);
print &ui_form_end([ [ "start", $text{'index_start'} ],
[ "stop", $text{'index_stop'} ],
[ "restart", $text{'index_restart'} ],
undef,
[ "addboot", $text{'index_addboot'} ],
[ "delboot", $text{'index_delboot'} ],
undef,
[ "addboot_start", $text{'index_addboot_start'} ],
[ "delboot_stop", $text{'index_delboot_stop'} ],
]);
}
} }
elsif ($init_mode eq "launchd" && $access{'bootup'}) { elsif ($init_mode eq "launchd" && $access{'bootup'}) {
# Show launchd agents # Show launchd agents
@@ -449,4 +453,3 @@ if ($access{'shutdown'}) {
print &ui_buttons_end(); print &ui_buttons_end();
&ui_print_footer("/", $text{'index'}); &ui_print_footer("/", $text{'index'});

View File

@@ -28,9 +28,9 @@ use WebminCore;
This variable is set based on the bootup system in use. Possible values are : This variable is set based on the bootup system in use. Possible values are :
=item osx - MacOSX hostconfig files, for older versions =item osx - Legacy macOS StartupItems and hostconfig files
=item launchd - MacOS Launchd, for newer versions =item launchd - macOS launchd, for newer versions
=item rc - FreeBSD 6+ RC files =item rc - FreeBSD 6+ RC files
@@ -44,6 +44,8 @@ This variable is set based on the bootup system in use. Possible values are :
=item systemd - SystemD, seen on Fedora 16 =item systemd - SystemD, seen on Fedora 16
=item openrc - OpenRC, seen on Alpine Linux and Gentoo
=cut =cut
if ($config{'init_mode'}) { if ($config{'init_mode'}) {
$init_mode = $config{'init_mode'}; $init_mode = $config{'init_mode'};
@@ -100,6 +102,14 @@ local($dir, $f, @stbuf, @rv);
$dir = &runlevel_dir($_[0]); $dir = &runlevel_dir($_[0]);
opendir(DIR, $dir); opendir(DIR, $dir);
foreach $f (readdir(DIR)) { foreach $f (readdir(DIR)) {
if ($init_mode eq "openrc") {
next if ($_[1] ne "S" || $f eq "." || $f eq "..");
next if (-d "$dir/$f");
if (@stbuf = stat("$dir/$f")) {
push(@rv, "00 $f $stbuf[1]");
}
next;
}
if ($f !~ /^([A-Z])(\d+)(.*)$/ || $1 ne $_[1]) { next; } if ($f !~ /^([A-Z])(\d+)(.*)$/ || $1 ne $_[1]) { next; }
if (!(@stbuf = stat("$dir/$f"))) { next; } if (!(@stbuf = stat("$dir/$f"))) { next; }
push(@rv, "$2 $3 $stbuf[1]"); push(@rv, "$2 $3 $stbuf[1]");
@@ -120,7 +130,11 @@ sub list_runlevels
local(@rv); local(@rv);
opendir(DIR, $config{init_base}); opendir(DIR, $config{init_base});
foreach (readdir(DIR)) { foreach (readdir(DIR)) {
if (/^rc([A-z0-9])\.d$/ || /^(boot)\.d$/) { if ($init_mode eq "openrc") {
push(@rv, $_) if ($_ ne "." && $_ ne ".." &&
-d "$config{init_base}/$_");
}
elsif (/^rc([A-z0-9])\.d$/ || /^(boot)\.d$/) {
push(@rv, $1); push(@rv, $1);
} }
} }
@@ -174,6 +188,16 @@ foreach $rl (&list_runlevels()) {
$dir = &runlevel_dir($rl); $dir = &runlevel_dir($rl);
opendir(DIR, $dir); opendir(DIR, $dir);
foreach $f (readdir(DIR)) { foreach $f (readdir(DIR)) {
if ($init_mode eq "openrc") {
next if ($_[0] ne "S" || $f eq "." || $f eq "..");
next if (-d "$dir/$f");
@stbuf2 = stat("$dir/$f");
if ($stbuf[1] == $stbuf2[1]) {
push(@rv, "$rl 00 $f");
last;
}
next;
}
if ($f =~ /^([A-Z])(\d+)(.*)$/ && $1 eq $_[0]) { if ($f =~ /^([A-Z])(\d+)(.*)$/ && $1 eq $_[0]) {
@stbuf2 = stat("$dir/$f"); @stbuf2 = stat("$dir/$f");
if ($stbuf[1] == $stbuf2[1]) { if ($stbuf[1] == $stbuf2[1]) {
@@ -242,6 +266,14 @@ Add some existing action to a runlevel. The parameters are :
=cut =cut
sub add_rl_action sub add_rl_action
{ {
if ($init_mode eq "openrc") {
return if ($_[2] ne "S");
my $file = &runlevel_dir($_[1])."/$_[0]";
&lock_file($file);
&symlink_file(&action_filename($_[0]), $file) if (!-e $file);
&unlock_file($file);
return;
}
$file = &runlevel_filename($_[1], $_[2], $_[3], $_[0]); $file = &runlevel_filename($_[1], $_[2], $_[3], $_[0]);
while(-r $file) { while(-r $file) {
if ($file =~ /^(.*)_(\d+)$/) { $file = "$1_".($2+1); } if ($file =~ /^(.*)_(\d+)$/) { $file = "$1_".($2+1); }
@@ -269,6 +301,11 @@ sub delete_rl_action
local(@stbuf, $dir, $f, @stbuf2); local(@stbuf, $dir, $f, @stbuf2);
@stbuf = stat(&action_filename($_[0])); @stbuf = stat(&action_filename($_[0]));
$dir = &runlevel_dir($_[1]); $dir = &runlevel_dir($_[1]);
if ($init_mode eq "openrc") {
my $file = "$dir/$_[0]";
&unlink_logged($file) if ($_[2] eq "S" && -e $file);
return;
}
opendir(DIR, $dir); opendir(DIR, $dir);
foreach $f (readdir(DIR)) { foreach $f (readdir(DIR)) {
if ($f =~ /^([A-Z])(\d+)(.+)$/ && $1 eq $_[2]) { if ($f =~ /^([A-Z])(\d+)(.+)$/ && $1 eq $_[2]) {
@@ -565,6 +602,11 @@ elsif ($init_mode eq "systemd") {
return 1 if ($out eq "disabled"); return 1 if ($out eq "disabled");
} }
} }
elsif ($init_mode eq "openrc") {
my $exists = -r &action_filename($name);
my @boot = &action_levels("S", $name);
return !$exists ? 0 : @boot ? 2 : 1;
}
if ($init_mode eq "init" || $init_mode eq "upstart" || if ($init_mode eq "init" || $init_mode eq "upstart" ||
$init_mode eq "systemd") { $init_mode eq "systemd") {
# Look for init script # Look for init script
@@ -710,6 +752,48 @@ if ($init_mode eq "systemd" && (!-r "$config{'init_dir'}/$action" ||
quotemeta($unit)." >/dev/null 2>&1"); quotemeta($unit)." >/dev/null 2>&1");
return; return;
} }
if ($init_mode eq "openrc") {
if ($st == 0) {
$start || $stop || &error("OpenRC service $action does not exist");
my $fn = &action_filename($action);
my $qdesc = $desc || "";
$qdesc =~ s/\\/\\\\/g;
$qdesc =~ s/"/\\"/g;
&lock_file($fn);
&open_tempfile(ACTION, ">$fn");
&print_tempfile(ACTION, "#!/sbin/openrc-run\n\n");
&print_tempfile(ACTION, "description=\"$qdesc\"\n\n") if ($desc);
&print_tempfile(ACTION, "start() {\n");
&print_tempfile(ACTION, &tab_indent($start));
&print_tempfile(ACTION, "}\n\n");
if ($stop) {
&print_tempfile(ACTION, "stop() {\n");
&print_tempfile(ACTION, &tab_indent($stop));
&print_tempfile(ACTION, "}\n\n");
}
if ($status) {
&print_tempfile(ACTION, "status() {\n");
&print_tempfile(ACTION, &tab_indent($status));
&print_tempfile(ACTION, "}\n");
}
&close_tempfile(ACTION);
chmod(0755, $fn);
&unlock_file($fn);
}
my @levels = &get_start_runlevels();
if (&has_command("rc-update")) {
foreach my $level (@levels) {
&system_logged("rc-update add ".quotemeta($action)." ".
quotemeta($level)." >/dev/null 2>&1");
}
}
else {
foreach my $level (@levels) {
&add_rl_action($action, $level, "S", 0);
}
}
return;
}
if ($init_mode eq "init" || $init_mode eq "local" || $init_mode eq "upstart" || if ($init_mode eq "init" || $init_mode eq "local" || $init_mode eq "upstart" ||
$init_mode eq "systemd") { $init_mode eq "systemd") {
# In these modes, we create a script to run # In these modes, we create a script to run
@@ -1087,6 +1171,18 @@ elsif ($init_mode eq "systemd") {
&system_logged("systemctl disable ".quotemeta($unit). &system_logged("systemctl disable ".quotemeta($unit).
" >/dev/null 2>&1"); " >/dev/null 2>&1");
} }
elsif ($init_mode eq "openrc") {
if (&has_command("rc-update")) {
&system_logged("rc-update del ".quotemeta($_[0]).
" >/dev/null 2>&1");
}
else {
foreach my $a (&action_levels('S', $_[0])) {
$a =~ /^(\S+)\s+(\S+)\s+(\S+)$/ &&
&delete_rl_action($_[0], $1, 'S');
}
}
}
if ($init_mode eq "init" || $init_mode eq "upstart" || if ($init_mode eq "init" || $init_mode eq "upstart" ||
$init_mode eq "systemd") { $init_mode eq "systemd") {
# Unlink or disable init script # Unlink or disable init script
@@ -1251,6 +1347,11 @@ elsif ($mode eq "init") {
my $fn = &action_filename($name); my $fn = &action_filename($name);
&unlink_logged($fn); &unlink_logged($fn);
} }
elsif ($mode eq "openrc") {
&disable_at_boot($name);
my $fn = &action_filename($name);
&unlink_logged($fn);
}
elsif ($mode eq "win32") { elsif ($mode eq "win32") {
# Delete windows service # Delete windows service
&delete_win32_service($name); &delete_win32_service($name);
@@ -1303,6 +1404,16 @@ if ($action_mode eq "init" || $action_mode eq "local") {
my $ex = $?; my $ex = $?;
return (!$ex, $out); return (!$ex, $out);
} }
elsif ($action_mode eq "openrc") {
my $cmd = &has_command("rc-service") ?
"rc-service ".quotemeta($name)." start" :
&action_filename($name)." start";
&clean_environment();
my $out = &backquote_logged("$cmd 2>&1 </dev/null");
&reset_environment();
my $ex = $?;
return (!$ex, $out);
}
elsif ($action_mode eq "rc") { elsif ($action_mode eq "rc") {
# Run FreeBSD RC script # Run FreeBSD RC script
return &start_rc_script($name); return &start_rc_script($name);
@@ -1351,6 +1462,14 @@ if ($action_mode eq "init" || $action_mode eq "local") {
my $ex = $?; my $ex = $?;
return (!$ex, $out); return (!$ex, $out);
} }
elsif ($action_mode eq "openrc") {
my $cmd = &has_command("rc-service") ?
"rc-service ".quotemeta($name)." stop" :
&action_filename($name)." stop";
my $out = &backquote_logged("$cmd 2>&1 </dev/null");
my $ex = $?;
return (!$ex, $out);
}
elsif ($action_mode eq "rc") { elsif ($action_mode eq "rc") {
# Run FreeBSD RC script # Run FreeBSD RC script
return &stop_rc_script($name); return &stop_rc_script($name);
@@ -1392,6 +1511,11 @@ if ($action_mode eq "upstart") {
elsif ($action_mode eq "systemd") { elsif ($action_mode eq "systemd") {
return &restart_systemd_service($name); return &restart_systemd_service($name);
} }
elsif ($action_mode eq "openrc" && &has_command("rc-service")) {
my $out = &backquote_logged("rc-service ".quotemeta($name).
" restart 2>&1 </dev/null");
return $? ? (0, $out) : (1, $out);
}
else { else {
&stop_action($name); &stop_action($name);
return &start_action($name); return &start_action($name);
@@ -1413,6 +1537,11 @@ if ($action_mode eq "upstart") {
elsif ($action_mode eq "systemd") { elsif ($action_mode eq "systemd") {
return &reload_systemd_service($name); return &reload_systemd_service($name);
} }
elsif ($action_mode eq "openrc" && &has_command("rc-service")) {
my $out = &backquote_logged("rc-service ".quotemeta($name).
" reload 2>&1 </dev/null");
return $? ? (0, $out) : (1, $out);
}
elsif ($action_mode eq "init") { elsif ($action_mode eq "init") {
my $file = &action_filename($name); my $file = &action_filename($name);
my $hasarg = &get_action_args($file); my $hasarg = &get_action_args($file);
@@ -1438,6 +1567,13 @@ if ($action_mode eq "init") {
# Run init script to get status # Run init script to get status
return &action_running(&action_filename($name)); return &action_running(&action_filename($name));
} }
elsif ($action_mode eq "openrc") {
my $cmd = &has_command("rc-service") ?
"rc-service ".quotemeta($name)." status" :
&action_filename($name)." status";
my $out = &backquote_command("$cmd 2>&1 </dev/null");
return $? == 0 ? 1 : $out =~ /stopped|inactive/i ? 0 : -1;
}
elsif ($action_mode eq "win32") { elsif ($action_mode eq "win32") {
# Check with Windows if it is running # Check with Windows if it is running
my ($w) = &list_win32_services($name); my ($w) = &list_win32_services($name);
@@ -1519,6 +1655,9 @@ elsif ($init_mode eq "systemd") {
elsif ($init_mode eq "init") { elsif ($init_mode eq "init") {
return map { my @w = split(/\s+/, $_); $w[0] } &list_actions(); return map { my @w = split(/\s+/, $_); $w[0] } &list_actions();
} }
elsif ($init_mode eq "openrc") {
return map { my @w = split(/\s+/, $_); $w[0] } &list_actions();
}
elsif ($init_mode eq "win32") { elsif ($init_mode eq "win32") {
return map { $_->{'name'} } &list_win32_services(); return map { $_->{'name'} } &list_win32_services();
} }
@@ -1595,7 +1734,10 @@ like /etc/rc2.d.
=cut =cut
sub runlevel_dir sub runlevel_dir
{ {
if ($_[0] eq "boot") { if ($init_mode eq "openrc") {
return "$config{init_base}/$_[0]";
}
elsif ($_[0] eq "boot") {
return "$config{init_base}/boot.d"; return "$config{init_base}/boot.d";
} }
else { else {
@@ -2169,16 +2311,15 @@ if (@list_systemd_services_cache && !$noinit) {
return @list_systemd_services_cache; return @list_systemd_services_cache;
} }
my $units_piped = join('|', &get_systemd_unit_types());
# Get all systemd unit names # Get all systemd unit names
my $out = &backquote_command("systemctl list-units --full --all -t service --no-legend"); my $out = &backquote_command("systemctl list-units --full --all -t service --no-legend");
my $ex = $?; my $ex = $?;
foreach my $l (split(/\r?\n/, $out)) { foreach my $l (split(/\r?\n/, $out)) {
$l =~ s/^[^a-z0-9\-\_\.]+//i; $l =~ s/^[^a-z0-9\-\_\.]+//i;
my ($unit, $loaded, $active, $sub, $desc) = split(/\s+/, $l, 5); my ($unit, $loaded, $active, $sub, $desc) = split(/\s+/, $l, 5);
next if ($unit !~ /\.service$/);
my $a = $unit; my $a = $unit;
$a =~ s/\.($units_piped)$//; $a =~ s/\.service$//;
my $f = &action_filename($a); my $f = &action_filename($a);
if ($unit ne "UNIT" && $loaded eq "loaded" && !-r $f) { if ($unit ne "UNIT" && $loaded eq "loaded" && !-r $f) {
push(@units, $unit); push(@units, $unit);
@@ -2190,29 +2331,26 @@ foreach my $l (split(/\r?\n/, $out)) {
# and so don't show up in systemctl list-units # and so don't show up in systemctl list-units
my $root = &get_systemd_root(undef, 1); my $root = &get_systemd_root(undef, 1);
opendir(UNITS, $root); opendir(UNITS, $root);
push(@units, grep { !/\.wants$/ && !/^\./ && !-d "$root/$_" } readdir(UNITS)); push(@units, grep { /\.service$/ && !-d "$root/$_" } readdir(UNITS));
closedir(UNITS); closedir(UNITS);
# Also add units from list-unit-files that also don't show up # Also add units from list-unit-files that also don't show up
$out = &backquote_command("systemctl list-unit-files -t service --no-legend"); $out = &backquote_command("systemctl list-unit-files -t service --no-legend");
foreach my $l (split(/\r?\n/, $out)) { foreach my $l (split(/\r?\n/, $out)) {
if ($l =~ /^(\S+\.($units_piped))\s+disabled/ || if ($l =~ /^(\S+\.service)\s+disabled/) {
$l =~ /^(\S+)\s+disabled/) {
push(@units, $1); push(@units, $1);
} }
} }
# Skip useless units # Skip useless units
@units = grep { !/^sys-devices-/ && @units = grep { !/^sys-devices-/ &&
!/^\-\.mount/ &&
!/^\-\.slice/ &&
!/^dev-/ && !/^dev-/ &&
!/^systemd-/ } @units; !/^systemd-/ } @units;
@units = &unique(@units); @units = &unique(@units);
# Filter out templates # Filter out templates
my @templates = grep { /\@$/ || /\@\.($units_piped)$/ } @units; my @templates = grep { /\@$/ || /\@\.service$/ } @units;
@units = grep { !/\@$/ && !/\@\.($units_piped)$/ } @units; @units = grep { !/\@$/ && !/\@\.service$/ } @units;
# Dump state of all of them, 100 at a time # Dump state of all of them, 100 at a time
my %info; my %info;
@@ -3000,11 +3138,90 @@ return $name =~ /\./ ? $name : "com.webmin.".$name;
} }
# config_pre_load(mod-info, [mod-order]) # config_pre_load(mod-info, [mod-order])
# Check if some config options are conditional # Hides config options that do not apply to the detected boot system.
sub config_pre_load sub config_pre_load
{ {
my ($modconf_info, $modconf_order) = @_; my ($modconf_info, $modconf_order) = @_;
$modconf_info->{'desc'} =~ s/2-[^,]+,// if ($init_mode eq "systemd"); return if (ref($modconf_info) ne 'HASH');
if ($init_mode eq "systemd" && $modconf_info->{'desc'}) {
# Systemd has no runlevels, so keep only the plain yes/no choices.
$modconf_info->{'desc'} =~ s/2-[^,]+,//;
}
my %keep = map { $_, 1 } &init_config_options_for_mode($init_mode);
foreach my $key (keys %$modconf_info) {
delete($modconf_info->{$key}) if (!$keep{$key});
}
if (ref($modconf_order) eq 'ARRAY') {
@$modconf_order = grep { $keep{$_} } @$modconf_order;
}
&hide_single_init_config_section($modconf_info, $modconf_order);
}
# init_config_options_for_mode(mode)
# Returns config.info keys that should be visible for a boot system.
sub init_config_options_for_mode
{
my ($mode) = @_;
my @display = ( 'expert', 'desc', 'order', 'status_check', 'sort_mode' );
my @common = ( 'init_mode', 'reboot_command', 'shutdown_command' );
my @sysv = ( @common, 'init_base', 'init_dir', 'order_digits',
'boot_levels', 'local_script', 'local_down', 'inittab_id' );
my @systemd_display = ( 'desc' );
push(@systemd_display, 'systemd_dedicated')
if (&init_dedicated_systemd_module_available());
return ( 'line1', @systemd_display, 'line2', @common )
if ($mode eq 'systemd');
return ( 'line1', @display, 'line2', @sysv )
if ($mode eq 'init' || $mode eq 'upstart' || $mode eq 'openrc');
return ( 'line2', @common, 'local_script', 'local_down',
'rc_dir', 'rc_conf' )
if ($mode eq 'rc');
return ( 'line2', @common, 'local_script', 'local_down' )
if ($mode eq 'local');
return ( 'line2', @common, 'line3', 'startup_dirs', 'darwin_setup',
'hostconfig', 'plist' )
if ($mode eq 'osx');
return ( 'line2', @common )
if ($mode eq 'launchd' || $mode eq 'win32');
return ( 'line1', @display, 'line2', @sysv, 'rc_dir', 'rc_conf',
'line3', 'startup_dirs', 'darwin_setup', 'hostconfig', 'plist' );
}
# hide_single_init_config_section(&config-info, [&config-order])
# Removes the lone section header when filtering leaves only one group.
sub hide_single_init_config_section
{
my ($modconf_info, $modconf_order) = @_;
my @sections = grep {
exists($modconf_info->{$_}) &&
(split(/,/, $modconf_info->{$_}))[1] == 11
} keys %$modconf_info;
return if (@sections != 1);
delete($modconf_info->{$sections[0]});
if (ref($modconf_order) eq 'ARRAY') {
@$modconf_order = grep { $_ ne $sections[0] } @$modconf_order;
}
}
# init_dedicated_systemd_module_available()
# Returns 1 if the standalone Systemd module can be used by this Webmin user.
sub init_dedicated_systemd_module_available
{
return &foreign_available("systemd") && &foreign_installed("systemd");
}
# init_show_systemd_services()
# Returns 1 if this module should show its legacy systemd service table.
sub init_show_systemd_services
{
return 1 if (!&init_dedicated_systemd_module_available());
return 0 if ($config{'systemd_dedicated'} &&
$config{'systemd_dedicated'} eq '1');
return 1;
} }
1; 1;

View File

@@ -188,13 +188,14 @@ change_title=Switch Runlevel
change_cmd=Switching to runlevel $1 with command $2. This may take some time, and Webmin might not be available anymore after switching. change_cmd=Switching to runlevel $1 with command $2. This may take some time, and Webmin might not be available anymore after switching.
mode_init=SysV init mode_init=SysV init
mode_osx=MacOS mode_osx=Legacy macOS StartupItems
mode_local=Single boot script mode_local=Single boot script
mode_win32=Windows services mode_win32=Windows services
mode_rc=FreeBSD RC scripts mode_rc=FreeBSD RC scripts
mode_upstart=Upstart mode_upstart=Upstart
mode_systemd=Systemd mode_systemd=Systemd
mode_launchd=LaunchD mode_launchd=macOS launchd
mode_openrc=OpenRC
upstart_title1=Create Upstart Service upstart_title1=Create Upstart Service
upstart_title2=Edit Upstart Service upstart_title2=Edit Upstart Service
@@ -246,6 +247,8 @@ systemd_edesc=Missing unit description
systemd_return=systemd unit systemd_return=systemd unit
systemd_econf=No systemd unit configuration entered systemd_econf=No systemd unit configuration entered
systemd_estart=Missing commands to run on startup systemd_estart=Missing commands to run on startup
index_systemd_module=Systemd Services and Units
index_systemd_dedicated=Use the dedicated $1 module to manage systemd services and units. This page now shows only system reboot and shutdown controls.
launchd_title1=Create Launchd Agent launchd_title1=Create Launchd Agent
launchd_title2=Edit Launchd Agent launchd_title2=Edit Launchd Agent

View File

@@ -56,6 +56,26 @@ if ($product) {
quotemeta($product).".service >/dev/null 2>&1"); quotemeta($product).".service >/dev/null 2>&1");
} }
} }
elsif ($init_mode eq "openrc") {
my $status = &action_status($product);
my %miniserv;
&get_miniserv_config(\%miniserv);
my $want_boot = $miniserv{'atboot'} ? 1 : 0;
my $temp = &transname();
$ENV{'WEBMIN_KILLCMD'} = &has_command('kill');
&copy_source_dest("$root_directory/webmin-openrc-init", "$temp");
my $lref = &read_file_lines($temp);
foreach my $l (@{$lref}) {
$l =~ s/(WEBMIN_[A-Z]+)/$ENV{$1}/g;
}
&flush_file_lines($temp);
&copy_source_dest($temp, "/etc/init.d/$product");
chmod(0755, "/etc/init.d/$product");
&unlink_file($temp);
if ($status == 2 || $want_boot) {
&enable_at_boot($product);
}
}
elsif ($init_mode eq "launchd") { elsif ($init_mode eq "launchd") {
# Update or create launchd agent to use start init wrapper # Update or create launchd agent to use start init wrapper
my $name = &launchd_name($product); my $name = &launchd_name($product);

View File

@@ -1,6 +1,6 @@
name=lpadmin name=lpadmin
category=hardware category=hardware
os_support=solaris coherent-linux redhat-linux mandrake-linux slackware-linux suse-linux united-linux debian-linux freebsd hpux unixware macos open-linux turbo-linux openbsd corel-linux irix netbsd msc-linux generic-linux gentoo-linux trustix-linux openmamba-linux aix pardus-linux os_support=solaris coherent-linux redhat-linux mandrake-linux slackware-linux suse-linux united-linux debian-linux freebsd hpux unixware macos open-linux turbo-linux openbsd corel-linux irix netbsd msc-linux generic-linux alpine-linux gentoo-linux trustix-linux openmamba-linux aix pardus-linux
desc=Printer Administration desc=Printer Administration
longdesc=Create and edit local and remote printers. Supports Windows print servers and Ghostscript print drivers. longdesc=Create and edit local and remote printers. Supports Windows print servers and Ghostscript print drivers.
readonly=1 readonly=1

View File

@@ -2087,10 +2087,20 @@ foreach $f (@files) {
$i++; $i++;
next; next;
} }
local $idx = $i++;
local $mail = &read_mail_file($f, $_[3]); local $mail = &read_mail_file($f, $_[3]);
$mail->{'idx'} = $i++; if (!$mail && !$_[4]) {
$mail->{'id'} = $f; # ID is relative path, like cur/4535534 # The cached Maildir file list can be stale if another client
$mail->{'id'} = substr($mail->{'id'}, length($_[0])+1); # deleted or moved a message. Re-read it once before returning
# blank entries to the caller.
&flush_maildir_cachefile($_[0]);
return &list_maildir($_[0], $_[1], $_[2], $_[3], 1);
}
if ($mail) {
$mail->{'idx'} = $idx;
$mail->{'id'} = $f; # ID is relative path, like cur/4535534
$mail->{'id'} = substr($mail->{'id'}, length($_[0])+1);
}
push(@rv, $mail); push(@rv, $mail);
} }
return @rv; return @rv;
@@ -2110,9 +2120,11 @@ return map { substr($_, length($file)+1) } &get_maildir_files($file);
sub select_maildir sub select_maildir
{ {
local ($file, $ids, $headersonly) = @_; local ($file, $ids, $headersonly) = @_;
local $retried = $_[3];
&mark_read_maildir($file); &mark_read_maildir($file);
local @files = &get_maildir_files($file); local @files = &get_maildir_files($file);
local @rv; local @rv;
local $missing;
foreach my $i (@$ids) { foreach my $i (@$ids) {
local $path = "$file/$i"; local $path = "$file/$i";
local $mail = &read_mail_file($path, $headersonly); local $mail = &read_mail_file($path, $headersonly);
@@ -2139,8 +2151,15 @@ foreach my $i (@$ids) {
# Get index in directory # Get index in directory
$mail->{'idx'} = &indexof($path, @files); $mail->{'idx'} = &indexof($path, @files);
} }
else {
$missing = 1;
}
push(@rv, $mail); push(@rv, $mail);
} }
if ($missing && !$retried) {
&flush_maildir_cachefile($file);
return &select_maildir($file, $ids, $headersonly, 1);
}
return @rv; return @rv;
} }
@@ -2167,7 +2186,7 @@ else {
# Check the on-disk cache file # Check the on-disk cache file
local $cachefile = &get_maildir_cachefile($_[0]); local $cachefile = &get_maildir_cachefile($_[0]);
local @cst = $cachefile ? stat($cachefile) : ( ); local @cst = $cachefile ? stat($cachefile) : ( );
if ($cst[9] >= $newest) { if ($cst[9] > $newest) {
# Can read the cache # Can read the cache
open(CACHE, "<", $cachefile); open(CACHE, "<", $cachefile);
while(<CACHE>) { while(<CACHE>) {
@@ -2188,6 +2207,32 @@ else {
# Flagged as deleted by IMAP .. skip # Flagged as deleted by IMAP .. skip
next; next;
} }
# Skip entries that cannot be read as messages.
local $path = "$_[0]/$d/$f";
local @fst = stat($path);
if (!@fst) {
&error_stderr("Skipping Maildir file ".
"$path : stat failed : ".
"$!");
next;
}
if (!$fst[7]) {
&error_stderr("Skipping Maildir file ".
"$path : file is zero ".
"bytes");
next;
}
if (!-r _) {
my $m = sprintf("%04o",$fst[2] & 07777);
my $o = getpwuid($fst[4]) || $fst[4];
my $g = getgrgid($fst[5]) || $fst[5];
&error_stderr("Skipping Maildir file ".
"$path : not readable by".
" current user, owner=".
"$o($fst[4]):$g($fst[5])".
" mode=$m");
next;
}
push(@shorts, "$d/$f") push(@shorts, "$d/$f")
} }
closedir(DIR); closedir(DIR);
@@ -2661,11 +2706,13 @@ sub read_mail_file
my ($file, $headersonly) = @_; my ($file, $headersonly) = @_;
# Open and read the mail file # Open and read the mail file
local @st = stat($file);
return undef if (@st && !$st[7]);
&open_as_mail_user(MAIL, $file) || return undef; &open_as_mail_user(MAIL, $file) || return undef;
my $mail = &read_mail_fh(MAIL, 0, $headersonly); my $mail = &read_mail_fh(MAIL, 0, $headersonly);
$mail->{'file'} = $file;
close(MAIL); close(MAIL);
local @st = stat($file);
$mail->{'file'} = $file;
$mail->{'size'} = $st[7]; $mail->{'size'} = $st[7];
$mail->{'time'} = $st[9]; $mail->{'time'} = $st[9];
$mail->{'ctime'} = $st[10]; $mail->{'ctime'} = $st[10];

View File

@@ -174,6 +174,7 @@ elsif ($_[2]->{'type'} == 4) {
local $count = $rv[2]; local $count = $rv[2];
return () if (!$count); return () if (!$count);
$_[2]->{'lastchange'} = $rv[3] if ($rv[3]); $_[2]->{'lastchange'} = $rv[3] if ($rv[3]);
$_[2]->{'mailcount'} = $count;
# Work out what range we want # Work out what range we want
local ($start, $end) = &compute_start_end($_[0], $_[1], $count); local ($start, $end) = &compute_start_end($_[0], $_[1], $count);
@@ -458,6 +459,7 @@ elsif ($folder->{'type'} == 4) {
} }
local $h = $irv[1]; local $h = $irv[1];
local $count = $irv[2]; local $count = $irv[2];
$folder->{'mailcount'} = $count;
return () if (!$count); return () if (!$count);
$folder->{'lastchange'} = $irv[3] if ($irv[3]); $folder->{'lastchange'} = $irv[3] if ($irv[3]);
@@ -637,8 +639,9 @@ elsif ($folder->{'type'} == 4) {
} }
local $h = $rv[1]; local $h = $rv[1];
local $count = $rv[2]; local $count = $rv[2];
$folder->{'mailcount'} = $count;
return () if (!$count); return () if (!$count);
$folder->{'lastchange'} = $irv[3] if ($irv[3]); $folder->{'lastchange'} = $rv[3] if ($rv[3]);
@rv = &imap_command($h, "FETCH 1:$count UID"); @rv = &imap_command($h, "FETCH 1:$count UID");
foreach my $uid (@{$rv[1]}) { foreach my $uid (@{$rv[1]}) {
@@ -708,6 +711,8 @@ else {
sub mailbox_list_mails_sorted sub mailbox_list_mails_sorted
{ {
local ($start, $end, $folder, $headersonly, $error, $field, $dir) = @_; local ($start, $end, $folder, $headersonly, $error, $field, $dir) = @_;
local ($requested_start, $requested_end) = ($start, $end);
local $retried = $_[7];
print DEBUG "mailbox_list_mails_sorted from $start to $end\n"; print DEBUG "mailbox_list_mails_sorted from $start to $end\n";
if (!$field) { if (!$field) {
# Default to current ordering # Default to current ordering
@@ -738,11 +743,25 @@ local @rv = map { undef } (0 .. scalar(@sorter)-1);
local @wantids = map { $sorter[$_] } ($start .. $end); local @wantids = map { $sorter[$_] } ($start .. $end);
print DEBUG "wantids = ",scalar(@wantids),"\n"; print DEBUG "wantids = ",scalar(@wantids),"\n";
local @mails = &mailbox_select_mails($folder, \@wantids, $headersonly); local @mails = &mailbox_select_mails($folder, \@wantids, $headersonly);
local @missing;
for(my $i=0; $i<@mails; $i++) { for(my $i=0; $i<@mails; $i++) {
if (!$mails[$i]) {
push(@missing, $wantids[$i]);
next;
}
$rv[$start+$i] = $mails[$i]; $rv[$start+$i] = $mails[$i];
print DEBUG "setting $start+$i to ",$mails[$i]," id ",$wantids[$i],"\n"; print DEBUG "setting $start+$i to ",$mails[$i]," id ",$wantids[$i],"\n";
$mails[$i]->{'sortidx'} = $start+$i; $mails[$i]->{'sortidx'} = $start+$i;
} }
if (@missing && !$retried) {
# A sorted IMAP list can contain UIDs for messages that were
# expunged or moved by another client. Force one rebuild so stale
# entries don't render as blank 1969/no-subject rows.
&force_new_index_recheck($folder);
return &mailbox_list_mails_sorted($requested_start, $requested_end,
$folder, $headersonly, $error,
$field, $dir, 1);
}
print DEBUG "rv = ",scalar(@rv),"\n"; print DEBUG "rv = ",scalar(@rv),"\n";
return @rv; return @rv;
} }
@@ -808,7 +827,9 @@ local $ifile = &folder_new_sort_index_file($folder);
&open_dbm_db($index, $ifile, 0600); &open_dbm_db($index, $ifile, 0600);
print DEBUG "indexchange=$index->{'lastchange'} folderchange=$folder->{'lastchange'}\n"; print DEBUG "indexchange=$index->{'lastchange'} folderchange=$folder->{'lastchange'}\n";
if ($index->{'lastchange'} != $folder->{'lastchange'} || if ($index->{'lastchange'} != $folder->{'lastchange'} ||
!$folder->{'lastchange'}) { !$folder->{'lastchange'} ||
(defined($folder->{'mailcount'}) &&
$index->{'mailcount'} != $folder->{'mailcount'})) {
# The mail file has changed .. get IDs and update the index with any # The mail file has changed .. get IDs and update the index with any
# that are missing # that are missing
local @ids = &mailbox_idlist($folder); local @ids = &mailbox_idlist($folder);
@@ -823,6 +844,7 @@ if ($index->{'lastchange'} != $folder->{'lastchange'} ||
local @mails = scalar(@newids) ? local @mails = scalar(@newids) ?
&mailbox_select_mails($folder, \@newids, 1) : ( ); &mailbox_select_mails($folder, \@newids, 1) : ( );
foreach my $mail (@mails) { foreach my $mail (@mails) {
next if (!$mail || !defined($mail->{'id'}));
foreach my $f (@index_fields) { foreach my $f (@index_fields) {
if ($f eq "date") { if ($f eq "date") {
# Convert date to Unix time # Convert date to Unix time

View File

@@ -17,7 +17,7 @@ index_find=العثور على المستخدمين حيث اسم المستخد
index_equals=يساوي index_equals=يساوي
index_contains=يحتوي على index_contains=يحتوي على
index_eperl=The Perl module $1 needed for the selected SMTP authentication mode is not installed or is missing a dependent module. <a href='$2'>Click here</a> to install it now. index_eperl=The Perl module $1 needed for the selected SMTP authentication mode is not installed or is missing a dependent module. <a href='$2'>Click here</a> to install it now.
index_file=قراءة البريد في ملف أو Maildir: index_file=قراءة البريد في ملف أو Maildir
index_nousers=لم يتم العثور على المستخدمين! index_nousers=لم يتم العثور على المستخدمين!
index_nousersmail=لم يتم العثور على المستخدمين الذين لديهم بريد إلكتروني. index_nousersmail=لم يتم العثور على المستخدمين الذين لديهم بريد إلكتروني.

View File

@@ -17,7 +17,7 @@ index_find=Намерете потребители, където потреби
index_equals=се равнява index_equals=се равнява
index_contains=съдържа index_contains=съдържа
index_eperl=Модулът Perl $1, необходим за избрания режим за удостоверяване на SMTP, не е инсталиран или липсва зависим модул. <a href='$2'>Кликнете тук</a>, за да го инсталирате сега. index_eperl=Модулът Perl $1, необходим за избрания режим за удостоверяване на SMTP, не е инсталиран или липсва зависим модул. <a href='$2'>Кликнете тук</a>, за да го инсталирате сега.
index_file=Прочетете пощата във файл или Maildir: index_file=Прочетете пощата във файл или Maildir
index_nousers=Не са намерени потребители! index_nousers=Не са намерени потребители!
index_nousersmail=Не бяха намерени потребители с имейл. index_nousersmail=Не бяха намерени потребители с имейл.

View File

@@ -16,7 +16,7 @@ index_find=Busca usuaris tals que el nom d'usuari
index_equals=sigui igual que index_equals=sigui igual que
index_contains=contingui index_contains=contingui
index_eperl=El mòdul Perl $1 necessari per al mode d'autenticació SMTP seleccionat no està instal·lat o està mancat d'un mòdul dependent. <a href='$2'>Fes clic aquí</a> per instal·lar-lo ara. index_eperl=El mòdul Perl $1 necessari per al mode d'autenticació SMTP seleccionat no està instal·lat o està mancat d'un mòdul dependent. <a href='$2'>Fes clic aquí</a> per instal·lar-lo ara.
index_file=Llegeix el Correu del Fitxer o Directori: index_file=Llegeix el Correu del Fitxer o Directori
index_nousers=No s'ha trobat cap usuari! index_nousers=No s'ha trobat cap usuari!
index_nousersmail=No s'ha trobat cap usuari amb correu. index_nousersmail=No s'ha trobat cap usuari amb correu.

View File

@@ -13,7 +13,7 @@ index_find=Najít uživatele, kdy uživatelské jméno
index_equals=odpovídá index_equals=odpovídá
index_contains=obsahuje index_contains=obsahuje
index_eperl=Perlový podul $1 potřebný pro vybraný mód ověření SMTP není instalován nebo chybí závislý modul. <a href='$2'>Klikněte zde</a> pro instalaci. index_eperl=Perlový podul $1 potřebný pro vybraný mód ověření SMTP není instalován nebo chybí závislý modul. <a href='$2'>Klikněte zde</a> pro instalaci.
index_file=Čtení pošty ze souboru: index_file=Čtení pošty ze souboru
index_nousers=Žádní uživatelé nenalezeni! index_nousers=Žádní uživatelé nenalezeni!
index_nousersmail=V e-mailu nebyli nalezeni žádní uživatelé. index_nousersmail=V e-mailu nebyli nalezeni žádní uživatelé.

View File

@@ -17,7 +17,7 @@ index_find=Find brugere, hvor brugernavn
index_equals=lige med index_equals=lige med
index_contains=indeholder index_contains=indeholder
index_eperl=Det Perl-modul $1, der kræves til den valgte SMTP-godkendelsestilstand, er ikke installeret eller mangler et afhængigt modul. <a href='$2'>Klik her</a> for at installere det nu. index_eperl=Det Perl-modul $1, der kræves til den valgte SMTP-godkendelsestilstand, er ikke installeret eller mangler et afhængigt modul. <a href='$2'>Klik her</a> for at installere det nu.
index_file=Læs Mail i File eller Maildir: index_file=Læs Mail i File eller Maildir
index_nousers=Ingen brugere blev fundet! index_nousers=Ingen brugere blev fundet!
index_nousersmail=Ingen brugere med e-mail blev fundet. index_nousersmail=Ingen brugere med e-mail blev fundet.

View File

@@ -17,7 +17,7 @@ index_find=Finde Benutzer, bei denen der Benutzername
index_equals=gleich ist index_equals=gleich ist
index_contains=enthält index_contains=enthält
index_eperl=Das benötigte Perl-Modul $1 für den ausgewählten SMTP-Authentifizierungsmodus ist nicht installiert oder es fehlt ein abhängiges Modul. <a href='$2'>Klicken Sie hier</a>, um es jetzt zu installieren. index_eperl=Das benötigte Perl-Modul $1 für den ausgewählten SMTP-Authentifizierungsmodus ist nicht installiert oder es fehlt ein abhängiges Modul. <a href='$2'>Klicken Sie hier</a>, um es jetzt zu installieren.
index_file=E-Mails in Datei oder Maildir lesen: index_file=E-Mails in Datei oder Maildir lesen
index_nousers=Keine Benutzer gefunden! index_nousers=Keine Benutzer gefunden!
index_nousersmail=Keine Benutzer mit E-Mail gefunden. index_nousersmail=Keine Benutzer mit E-Mail gefunden.

View File

@@ -13,7 +13,7 @@ index_find=Έυρεση χρηστών όπου το όνομα χρήστη
index_equals=ισούται με index_equals=ισούται με
index_contains=περιέχει index_contains=περιέχει
index_eperl=Το Perl module $1 που χρειάζεται για την επιλεγμένη πιστοποίηση SMTP δεν είναι εγκατεστημένο ή του λείπει κάποιο εξαρτώμενο module. <a href='$2'>Πατήστε εδώ</a> για να το εγκαταστήσετε τώρα. index_eperl=Το Perl module $1 που χρειάζεται για την επιλεγμένη πιστοποίηση SMTP δεν είναι εγκατεστημένο ή του λείπει κάποιο εξαρτώμενο module. <a href='$2'>Πατήστε εδώ</a> για να το εγκαταστήσετε τώρα.
index_file=Ανάγνωση Mail από το Αρχείο: index_file=Ανάγνωση Mail από το Αρχείο
index_nousers=Κανένας χρήστης δεν βρέθηκε! index_nousers=Κανένας χρήστης δεν βρέθηκε!
index_nousersmail=Κανένας χρήστης με email δεν βρέθηκε. index_nousersmail=Κανένας χρήστης με email δεν βρέθηκε.

View File

@@ -17,10 +17,11 @@ index_find=Find users where username
index_equals=equals index_equals=equals
index_contains=contains index_contains=contains
index_eperl=The Perl module $1 needed for the selected SMTP authentication mode is not installed or is missing a dependent module. <a href='$2'>Click here</a> to install it now. index_eperl=The Perl module $1 needed for the selected SMTP authentication mode is not installed or is missing a dependent module. <a href='$2'>Click here</a> to install it now.
index_file=Read Mail in File or Maildir: index_file=Read Mail in File or Maildir
index_nousers=No users were found! index_nousers=No users were found!
index_nousersmail=No users with email were found. index_nousersmail=No users with email were found.
mail_eopen=Failed to open mailbox
mail_title=User Email mail_title=User Email
mail_from=From mail_from=From
mail_date=Date mail_date=Date
@@ -70,6 +71,7 @@ mail_black=Block Senders
mail_white=Allow Senders mail_white=Allow Senders
mail_whitemove=Allow Senders and Inbox mail_whitemove=Allow Senders and Inbox
mail_efile=Mail file does not exist mail_efile=Mail file does not exist
mail_euser=Missing user, file or Maildir
mail_fromsrch=Find email with same sender mail_fromsrch=Find email with same sender
mail_subsrch=Find email with same subject mail_subsrch=Find email with same subject
mail_tosrch=Find email with recipient mail_tosrch=Find email with recipient

View File

@@ -17,7 +17,7 @@ index_find=Encuentra usuarios donde nombre de usuario
index_equals=es igual index_equals=es igual
index_contains=contiene index_contains=contiene
index_eperl=El módulo Perl $1 necesario para el modo de autenticación SMTP seleccionado no está instalado o le falta un módulo dependiente. <a href='$2'>Haga clic aquí</a> para instalarlo ahora. index_eperl=El módulo Perl $1 necesario para el modo de autenticación SMTP seleccionado no está instalado o le falta un módulo dependiente. <a href='$2'>Haga clic aquí</a> para instalarlo ahora.
index_file=Leer correo en archivo o Maildir: index_file=Leer correo en archivo o Maildir
index_nousers=¡No se encontraron usuarios! index_nousers=¡No se encontraron usuarios!
index_nousersmail=No se encontraron usuarios con correo electrónico. index_nousersmail=No se encontraron usuarios con correo electrónico.

View File

@@ -17,7 +17,7 @@ index_find=Erabiltzaile izena erabiltzaileak aurkitu
index_equals=berdinen index_equals=berdinen
index_contains=dauka index_contains=dauka
index_eperl=Hautatutako SMTP autentifikazio moduan beharrezkoa den Perl modulua $1 ez dago instalatuta edo ez dago menpeko modulurik. <a href='$2'>Egin klik hemen</a> orain instalatzeko. index_eperl=Hautatutako SMTP autentifikazio moduan beharrezkoa den Perl modulua $1 ez dago instalatuta edo ez dago menpeko modulurik. <a href='$2'>Egin klik hemen</a> orain instalatzeko.
index_file=Irakurri Posta Fitxategian edo Maildir-en: index_file=Irakurri Posta Fitxategian edo Maildir-en
index_nousers=Ez da erabiltzailerik aurkitu! index_nousers=Ez da erabiltzailerik aurkitu!
index_nousersmail=Ez da mezu elektronikorik aurkitu erabiltzaileak. index_nousersmail=Ez da mezu elektronikorik aurkitu erabiltzaileak.

View File

@@ -17,7 +17,7 @@ index_find=کاربرانی را پیدا کنید که در آن نام کار
index_equals=برابر است index_equals=برابر است
index_contains=حاوی index_contains=حاوی
index_eperl=The Perl module $1 needed for the selected SMTP authentication mode is not installed or is missing a dependent module. <a href='$2'>Click here</a> to install it now. index_eperl=The Perl module $1 needed for the selected SMTP authentication mode is not installed or is missing a dependent module. <a href='$2'>Click here</a> to install it now.
index_file=نامه را در پرونده یا Maildir بخوانید: index_file=نامه را در پرونده یا Maildir بخوانید
index_nousers=هیچ کاربر یافت نشد! index_nousers=هیچ کاربر یافت نشد!
index_nousersmail=هیچ کاربر با ایمیل یافت نشد. index_nousersmail=هیچ کاربر با ایمیل یافت نشد.

View File

@@ -6,7 +6,7 @@ index_system2=Sähköpostipalvelin: Qmail
index_system1=Sähköpostipalvelin: Sendmail index_system1=Sähköpostipalvelin: Sendmail
index_system0=Sähköpostipalvelin: Postfix index_system0=Sähköpostipalvelin: Postfix
index_contains=Sisältää index_contains=Sisältää
index_file=Luo sähköposti tiedostosta: index_file=Luo sähköposti tiedostosta
index_nousers=Käyttäjiä ei löytynyt! index_nousers=Käyttäjiä ei löytynyt!
index_nousersmail=Yhtään sähköpostikäyttäjää ei löytynyt. index_nousersmail=Yhtään sähköpostikäyttäjää ei löytynyt.

View File

@@ -17,7 +17,7 @@ index_find=Trouver utilisateurs où nom
index_equals=égale index_equals=égale
index_contains=contient index_contains=contient
index_eperl=Le module Perl $1 nécessaire pour le mode d'authentification SMTP sélectionné n'est pas installé ou manque un module dépend. <a href='$2'>Cliquez ici</a> pour l'installer maintenant. index_eperl=Le module Perl $1 nécessaire pour le mode d'authentification SMTP sélectionné n'est pas installé ou manque un module dépend. <a href='$2'>Cliquez ici</a> pour l'installer maintenant.
index_file=Lire le courrier du Fichier: index_file=Lire le courrier du Fichier
index_nousers=Aucun membre n'a été trouvé! index_nousers=Aucun membre n'a été trouvé!
index_nousersmail=Aucun membre avec email ont été trouvés. index_nousersmail=Aucun membre avec email ont été trouvés.

View File

@@ -17,7 +17,7 @@ index_find=Pronađi korisnike gdje je korisničko ime
index_equals=jednaki index_equals=jednaki
index_contains=sadrži index_contains=sadrži
index_eperl=Perl modul $1 potreban za odabrani način provjere identiteta SMTP nije instaliran ili nedostaje ovisni modul. <a href='$2'>Kliknite ovdje</a> da biste ga sada instalirali. index_eperl=Perl modul $1 potreban za odabrani način provjere identiteta SMTP nije instaliran ili nedostaje ovisni modul. <a href='$2'>Kliknite ovdje</a> da biste ga sada instalirali.
index_file=Pročitajte poštu u datoteci ili maildiru: index_file=Pročitajte poštu u datoteci ili maildiru
index_nousers=Nisu pronađeni korisnici! index_nousers=Nisu pronađeni korisnici!
index_nousersmail=Nije pronađen nijedan korisnik s e-poštom. index_nousersmail=Nije pronađen nijedan korisnik s e-poštom.

View File

@@ -8,7 +8,7 @@ index_system2=Levelező szerver: Qmail
index_system1=Levelező szerver: Sendmail index_system1=Levelező szerver: Sendmail
index_system0=Levelező szerver: Postfix index_system0=Levelező szerver: Postfix
index_contains=tartalom index_contains=tartalom
index_file=Levél olvasása fájlból: index_file=Levél olvasása fájlból
mail_title=Levelek mail_title=Levelek
mail_from=Feladó mail_from=Feladó

View File

@@ -16,7 +16,7 @@ index_find=Cerca utenti con nome utente
index_equals=uguale index_equals=uguale
index_contains=contiene index_contains=contiene
index_eperl=Il modulo Perl $1 necessario per la modalità di autenticazione SMTP selezionata non è installato, o manca un modulo da cui dipende. <a href='$2'>Clicca qui</a> per installarlo adesso. index_eperl=Il modulo Perl $1 necessario per la modalità di autenticazione SMTP selezionata non è installato, o manca un modulo da cui dipende. <a href='$2'>Clicca qui</a> per installarlo adesso.
index_file=Leggi la posta nel file: index_file=Leggi la posta nel file
index_nousers=Nessun utente trovato! index_nousers=Nessun utente trovato!
index_nousersmail=Nessun utente con messaggi trovato. index_nousersmail=Nessun utente con messaggi trovato.

View File

@@ -13,7 +13,7 @@ index_find=Find users where username
index_equals=equals index_equals=equals
index_contains=contains index_contains=contains
index_eperl=The Perl module $1 needed for the selected SMTP authentication mode is not installed or is missing a dependent module. <a href='$2'>Click here</a> to install it now. index_eperl=The Perl module $1 needed for the selected SMTP authentication mode is not installed or is missing a dependent module. <a href='$2'>Click here</a> to install it now.
index_file=このファイルのメールを読む: index_file=このファイルのメールを読む
index_nousers=No users were found! index_nousers=No users were found!
index_nousersmail=No users with email were found. index_nousersmail=No users with email were found.

View File

@@ -12,7 +12,7 @@ index_toomany=시스템의 사용자가 너무 많아서 한 페이지에 모두
index_find=유저이름에서 유저 찾기 index_find=유저이름에서 유저 찾기
index_contains=포함 index_contains=포함
index_eperl=SMTP 인증 모드를 위한 $1 펄모듈이 설치되어 있지 않거나, 의존성이 걸려있는 도뮬이 설치되어 있지 않습니다. 지금 설치 하려면 <a href='$2'>여기를 클릭</a>하십시오. index_eperl=SMTP 인증 모드를 위한 $1 펄모듈이 설치되어 있지 않거나, 의존성이 걸려있는 도뮬이 설치되어 있지 않습니다. 지금 설치 하려면 <a href='$2'>여기를 클릭</a>하십시오.
index_file=파일의 메일 읽기: index_file=파일의 메일 읽기
index_nousers=유저를 찾을 수 없습니다! index_nousers=유저를 찾을 수 없습니다!
index_nousersmail=이메일을 가지고 있는 유저가 존재하지 않습니다. index_nousersmail=이메일을 가지고 있는 유저가 존재하지 않습니다.

View File

@@ -17,7 +17,7 @@ index_find=Cari pengguna di mana nama pengguna
index_equals=sama dengan index_equals=sama dengan
index_contains=mengandungi index_contains=mengandungi
index_eperl=Mod Perl $1 diperlukan untuk mod pengesahan SMTP yang dipilih tidak dipasang atau tiada modul yang bergantung. <a href='$2'>Klik di sini</a> untuk memasangnya sekarang. index_eperl=Mod Perl $1 diperlukan untuk mod pengesahan SMTP yang dipilih tidak dipasang atau tiada modul yang bergantung. <a href='$2'>Klik di sini</a> untuk memasangnya sekarang.
index_file=Baca Mel dalam Fail atau Maildir: index_file=Baca Mel dalam Fail atau Maildir
index_nousers=Tiada pengguna dijumpai! index_nousers=Tiada pengguna dijumpai!
index_nousersmail=Tiada pengguna dengan e-mel yang ditemui. index_nousersmail=Tiada pengguna dengan e-mel yang ditemui.

View File

@@ -16,7 +16,7 @@ index_find=Vind gebruikers met de naam
index_equals=gelijken index_equals=gelijken
index_contains=bevat index_contains=bevat
index_eperl=De Perl module $1 die nodig is voor de geselecteerde SMTP authenticatie mode is niet geinstalleerd of mist een afhankelijke module. <a href='$2'>Klik hier</a> om het nu te installeren. index_eperl=De Perl module $1 die nodig is voor de geselecteerde SMTP authenticatie mode is niet geinstalleerd of mist een afhankelijke module. <a href='$2'>Klik hier</a> om het nu te installeren.
index_file=Lees Email in File : index_file=Lees Email in File
index_nousers=Geen gebruikers gevonden! index_nousers=Geen gebruikers gevonden!
index_nousersmail=Geen gebruikers met email gevonden. index_nousersmail=Geen gebruikers met email gevonden.

View File

@@ -17,7 +17,7 @@ index_find=Finn brukere hvor brukernavnet
index_equals=er lik index_equals=er lik
index_contains=inneholder index_contains=inneholder
index_eperl=Perl modulen $1 som er nødvendig for den valgte SMTP autentiseringsmodusen er ikke installert eller den mangler an modul den er avhangig av. <a href='$2'>Klikk her</a> for å installere den nå. index_eperl=Perl modulen $1 som er nødvendig for den valgte SMTP autentiseringsmodusen er ikke installert eller den mangler an modul den er avhangig av. <a href='$2'>Klikk her</a> for å installere den nå.
index_file=Les e-post i fil: index_file=Les e-post i fil
index_nousers=Ingen brukere funnet! index_nousers=Ingen brukere funnet!
index_nousersmail=Ingen brukere med e-post ble funnet. index_nousersmail=Ingen brukere med e-post ble funnet.

View File

@@ -17,7 +17,7 @@ index_find=Wyszukaj użytkowników, gdzie nazwa użytkownika
index_equals=jest równa index_equals=jest równa
index_contains=zawiera index_contains=zawiera
index_eperl=Moduł Perl $1 wymagany dla wybranego trybu uwierzytelniania SMTP nie jest zainstalowany lub brakuje zależnego modułu. <a href='$2'>Kliknij tutaj</a>, aby go teraz zainstalować. index_eperl=Moduł Perl $1 wymagany dla wybranego trybu uwierzytelniania SMTP nie jest zainstalowany lub brakuje zależnego modułu. <a href='$2'>Kliknij tutaj</a>, aby go teraz zainstalować.
index_file=Odczytaj pocztę z pliku lub Maildir: index_file=Odczytaj pocztę z pliku lub Maildir
index_nousers=Nie znaleziono żadnych użytkowników! index_nousers=Nie znaleziono żadnych użytkowników!
index_nousersmail=Nie znaleziono użytkowników z pocztą. index_nousersmail=Nie znaleziono użytkowników z pocztą.

View File

@@ -17,7 +17,7 @@ index_find=Encontre usuários onde nome de usuário
index_equals=é igual a index_equals=é igual a
index_contains=contém index_contains=contém
index_eperl=O módulo Perl $1 necessário para o modo de autenticação SMTP selecionado não está instalado ou está faltando um módulo dependente. <a href='$2'>Clique aqui</a> para instalá-lo agora. index_eperl=O módulo Perl $1 necessário para o modo de autenticação SMTP selecionado não está instalado ou está faltando um módulo dependente. <a href='$2'>Clique aqui</a> para instalá-lo agora.
index_file=Leia o Mail no arquivo ou no Maildir: index_file=Leia o Mail no arquivo ou no Maildir
index_nousers=Nenhum usuário foi encontrado! index_nousers=Nenhum usuário foi encontrado!
index_nousersmail=Nenhum usuário com email foi encontrado. index_nousersmail=Nenhum usuário com email foi encontrado.

View File

@@ -17,7 +17,7 @@ index_find=Encontre usuários onde nome de usuário
index_equals=é igual a index_equals=é igual a
index_contains=contém index_contains=contém
index_eperl=O módulo Perl $1 necessário para o modo de autenticação SMTP selecionado não está instalado ou está faltando um módulo dependente. <a href='$2'>Clique aqui</a> para instalá-lo agora. index_eperl=O módulo Perl $1 necessário para o modo de autenticação SMTP selecionado não está instalado ou está faltando um módulo dependente. <a href='$2'>Clique aqui</a> para instalá-lo agora.
index_file=Leia o Mail no arquivo ou no Maildir: index_file=Leia o Mail no arquivo ou no Maildir
index_nousers=Nenhum usuário foi encontrado! index_nousers=Nenhum usuário foi encontrado!
index_nousersmail=Nenhum usuário com email foi encontrado. index_nousersmail=Nenhum usuário com email foi encontrado.

View File

@@ -17,7 +17,7 @@ index_find=Найти пользователей, где имя пользова
index_equals=равно index_equals=равно
index_contains=содержит index_contains=содержит
index_eperl=Модуль Perl $1, необходимый для выбранного режима аутентификации SMTP, не установлен или отсутствует зависимый модуль. <a href='$2'>Нажмите здесь</a>, чтобы установить его сейчас. index_eperl=Модуль Perl $1, необходимый для выбранного режима аутентификации SMTP, не установлен или отсутствует зависимый модуль. <a href='$2'>Нажмите здесь</a>, чтобы установить его сейчас.
index_file=Читать почту в файле или Maildir: index_file=Читать почту в файле или Maildir
index_nousers=Пользователи не найдены! index_nousers=Пользователи не найдены!
index_nousersmail=Пользователи с электронной почтой не найдены. index_nousersmail=Пользователи с электронной почтой не найдены.

View File

@@ -17,7 +17,7 @@ index_find=Nájdite používateľov, kde je používateľské meno
index_equals=rovní index_equals=rovní
index_contains=obsahuje index_contains=obsahuje
index_eperl=Nie je nainštalovaný modul Perl $1 potrebný pre vybratý režim autentifikácie SMTP alebo chýba závislý modul. <a href='$2'>Kliknite sem</a> a nainštalujte ho teraz. index_eperl=Nie je nainštalovaný modul Perl $1 potrebný pre vybratý režim autentifikácie SMTP alebo chýba závislý modul. <a href='$2'>Kliknite sem</a> a nainštalujte ho teraz.
index_file=Čítanie správ v súbore alebo v pošte: index_file=Čítanie správ v súbore alebo v pošte
index_nousers=Nenašli sa žiadni používatelia! index_nousers=Nenašli sa žiadni používatelia!
index_nousersmail=Nenašli sa žiadni používatelia s e-mailom. index_nousersmail=Nenašli sa žiadni používatelia s e-mailom.

View File

@@ -17,7 +17,7 @@ index_find=Hitta användare där användarnamn
index_equals=jämlikar index_equals=jämlikar
index_contains=innehåller index_contains=innehåller
index_eperl=Perl-modulen $1 som behövs för det valda SMTP-autentiseringsläget är inte installerat eller saknas en beroende modul. <a href='$2'>Klicka här</a> för att installera det nu. index_eperl=Perl-modulen $1 som behövs för det valda SMTP-autentiseringsläget är inte installerat eller saknas en beroende modul. <a href='$2'>Klicka här</a> för att installera det nu.
index_file=Läs Mail i File eller Maildir: index_file=Läs Mail i File eller Maildir
index_nousers=Inga användare hittades! index_nousers=Inga användare hittades!
index_nousersmail=Inga användare med e-post hittades. index_nousersmail=Inga användare med e-post hittades.

View File

@@ -16,7 +16,7 @@ index_find=Kullanıcıları bul
index_equals=Eşitlik index_equals=Eşitlik
index_contains=içeriyor index_contains=içeriyor
index_eperl=Seçilen STMP doğrulama modu için $1 Perl modülüne ihtiyaç. <a href='$2'>buraya tıklayara yükleyebilirsiniz</a> index_eperl=Seçilen STMP doğrulama modu için $1 Perl modülüne ihtiyaç. <a href='$2'>buraya tıklayara yükleyebilirsiniz</a>
index_file=Dosyadaki postayı oku: index_file=Dosyadaki postayı oku
index_nousers=Hiçbir kullanıcı bulunamadı' index_nousers=Hiçbir kullanıcı bulunamadı'
index_nousersmail=E-posta'sı olan hiçbir kullanıcı bulunamadı. index_nousersmail=E-posta'sı olan hiçbir kullanıcı bulunamadı.

View File

@@ -17,7 +17,7 @@ index_find=Знайдіть користувачів, де ім’я корис
index_equals=дорівнює index_equals=дорівнює
index_contains=містить index_contains=містить
index_eperl=Модуль Perl $1, необхідний для вибраного режиму автентифікації SMTP, не встановлений або відсутній залежний модуль. <a href='$2'>Клацніть тут</a>, щоб встановити його зараз. index_eperl=Модуль Perl $1, необхідний для вибраного режиму автентифікації SMTP, не встановлений або відсутній залежний модуль. <a href='$2'>Клацніть тут</a>, щоб встановити його зараз.
index_file=Читайте пошту у файлі чи Maildir: index_file=Читайте пошту у файлі чи Maildir
index_nousers=Користувачів не знайдено! index_nousers=Користувачів не знайдено!
index_nousersmail=Користувачів з електронною поштою не знайдено. index_nousersmail=Користувачів з електронною поштою не знайдено.

View File

@@ -17,7 +17,7 @@ index_find=查找用户名所在的用户
index_equals=等于 index_equals=等于
index_contains=包含 index_contains=包含
index_eperl=所选SMTP身份验证模式所需的Perl模块$1未安装或缺少从属模块。 <a href='$2'>单击此处</a>立即安装。 index_eperl=所选SMTP身份验证模式所需的Perl模块$1未安装或缺少从属模块。 <a href='$2'>单击此处</a>立即安装。
index_file=读取文件或Maildir中的邮件 index_file=读取文件或Maildir中的邮件
index_nousers=找不到用户! index_nousers=找不到用户!
index_nousersmail=找不到使用电子邮件的用户。 index_nousersmail=找不到使用电子邮件的用户。

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