diff --git a/.gitignore b/.gitignore index 17b4b514e..69da9a791 100644 --- a/.gitignore +++ b/.gitignore @@ -22,3 +22,4 @@ tarballs/ minimal/ .DS_Store .vscode/settings.json +debug.cgi diff --git a/apache/edit_defines.cgi b/apache/edit_defines.cgi index f10176283..0b6859e30 100755 --- a/apache/edit_defines.cgi +++ b/apache/edit_defines.cgi @@ -11,7 +11,8 @@ print $text{'defines_desc'},"
\n"; @defs = &get_httpd_defines(1); if (@defs) { print &text('defines_config', - "".join(" ", @defs).""),"
\n"; + "".&html_escape(join(" ", @defs)).""), + "
\n"; } print &ui_form_start("save_defines.cgi", "post"); diff --git a/apache/edit_global.cgi b/apache/edit_global.cgi index 5b5adb1e6..93df0561b 100755 --- a/apache/edit_global.cgi +++ b/apache/edit_global.cgi @@ -28,7 +28,7 @@ if ($in{'type'} == 6) { print &ui_hr(); print &ui_subheading($text{'global_mime'}); print "$text{'global_mimedesc'}
\n";
- @links = ( &ui_link("edit_gmime_type.cgi?file=$mfile",
+ @links = ( &ui_link("edit_gmime_type.cgi?file=".&urlize($mfile),
$text{'global_add'}) );
print &ui_links_row(\@links);
print &ui_columns_start([ $text{'global_type'},
@@ -41,7 +41,8 @@ if ($in{'type'} == 6) {
if (/^\s*(\S+)\s*(.*)$/) {
print &ui_columns_row([
&ui_link("edit_gmime_type.cgi?line=$line".
- "&file=$mfile", $1), $2 ]);
+ "&file=".&urlize($mfile), &html_escape($1)),
+ &html_escape($2) ]);
}
$line++;
}
diff --git a/filemin/defaultacl b/filemin/defaultacl
index b7e4d11ae..97cc88e44 100644
--- a/filemin/defaultacl
+++ b/filemin/defaultacl
@@ -1,3 +1,3 @@
allowed_paths=$HOME
work_as_root=1
-allowed_for_edit=application-x-php application-x-ruby application-xml application-xslt+xml application-javascript application-x-shellscript application-x-perl application-x-yaml application-x-toml application-json application-x-x509-ca-cert application-pkix-cert application-x-sql application-x-asp application-x-aspx application-xhtml+xml
+allowed_for_edit=application-x-php application-x-ruby application-xml application-xslt+xml application-javascript application-x-shellscript application-x-perl application-x-yaml application-x-toml application-json application-x-x509-ca-cert application-pkix-cert application-x-sql application-x-asp application-x-aspx application-xhtml+xml application-mathml+xml
diff --git a/filemin/images/icons/mime/application-mathml+xml.png b/filemin/images/icons/mime/application-mathml+xml.png
new file mode 100644
index 000000000..8ac3f7be4
Binary files /dev/null and b/filemin/images/icons/mime/application-mathml+xml.png differ
diff --git a/filemin/images/icons/mime/text-mathml+xml.png b/filemin/images/icons/mime/text-mathml+xml.png
new file mode 100644
index 000000000..8ac3f7be4
Binary files /dev/null and b/filemin/images/icons/mime/text-mathml+xml.png differ
diff --git a/filemin/images/icons/mime/text-xhtml+xml.png b/filemin/images/icons/mime/text-xhtml+xml.png
index a56f11ddb..8ac3f7be4 100644
Binary files a/filemin/images/icons/mime/text-xhtml+xml.png and b/filemin/images/icons/mime/text-xhtml+xml.png differ
diff --git a/mailboxes/boxes-lib.pl b/mailboxes/boxes-lib.pl
index db960595a..ac413b75e 100755
--- a/mailboxes/boxes-lib.pl
+++ b/mailboxes/boxes-lib.pl
@@ -15,6 +15,111 @@ use Time::Local;
$dbm_index_min = 1000000;
$dbm_index_version = 3;
+# supports_tnef_module()
+# Returns 1 if the Convert::TNEF module is available for decoding winmail.dat
+my $supports_tnef_module;
+sub supports_tnef_module
+{
+if (!defined($supports_tnef_module)) {
+ $supports_tnef_module = eval { require Convert::TNEF; 1; } ? 1 : 0;
+ }
+return $supports_tnef_module;
+}
+
+# decode_tnef_attachment(&attach)
+# Expands a TNEF attachment into a list of normal attachments, or returns
+# an error string if decoding is not possible
+sub decode_tnef_attachment
+{
+my ($attach) = @_;
+my @rv;
+return (undef, "Convert::TNEF module not installed")
+ if (!&supports_tnef_module());
+
+my $tempdir = &transname();
+mkdir($tempdir, 0700) || return (undef, $!);
+
+# Only try to de-privilege the parser when we are currently fully root;
+# In Usermin or already-switched contexts, just decode as the current user
+my $parse_user = !$< && !$> ? &get_mail_parse_user($attach) : undef;
+my $tnef;
+if ($parse_user) {
+ # Convert::TNEF may create temp files under output_dir, so hand it a
+ # private directory owned by the mailbox user and run the parser as
+ # that user instead of root
+ local $main::mail_open_user = $parse_user;
+ my @uinfo = &get_switch_user_info();
+ @uinfo || return (undef, "Mail open user $parse_user does not exist");
+ &set_ownership_permissions($uinfo[2], $uinfo[3], 0700, $tempdir);
+ my $switched = &switch_to_mail_user();
+ my $io;
+ my $ok = eval {
+ open($io, "<", \$attach->{'data'}) || die "$!";
+ binmode($io);
+ $tnef = Convert::TNEF->read($io,
+ { 'output_dir' => $tempdir,
+ 'buffer_size' => &get_buffer_size() });
+ close($io) || die "$!";
+ 1;
+ };
+ if ($switched) {
+ # Restore root after decoding so the rest of the mailbox code
+ # keeps running with its original privileges
+ $) = 0;
+ $> = 0;
+ }
+ return (undef, $@) if (!$ok);
+ }
+else {
+ my $io;
+ if (!open($io, "<", \$attach->{'data'})) {
+ return (undef, $!);
+ }
+ binmode($io);
+ $tnef = eval {
+ Convert::TNEF->read($io,
+ { 'output_dir' => $tempdir,
+ 'buffer_size' => &get_buffer_size() })
+ };
+ close($io);
+ }
+if ($@) {
+ return (undef, $@);
+ }
+if (!$tnef) {
+ return (undef, $Convert::TNEF::errstr ||
+ "failed to decode winmail.dat");
+ }
+foreach my $ta ($tnef->attachments) {
+ my $fn = $ta->longname() || $ta->name();
+ $fn =~ s/\x00+$// if (defined($fn));
+ my $data = $ta->data();
+ next if (!defined($data));
+ my $ct = $fn ? &guess_mime_type($fn)
+ : "application/octet-stream";
+ push(@rv,
+ { 'type' => $ct,
+ 'header' => { 'content-type' => $ct },
+ 'headers' => [ [ 'Content-Type', $ct ] ],
+ 'filename' => $fn,
+ 'data' => $data });
+ }
+$tnef->purge();
+return (\@rv, undef);
+}
+
+# get_mail_parse_user(&mail-or-attach)
+# Returns the Unix user, if any, that should be used for unsafe mail parsing
+sub get_mail_parse_user
+{
+my ($obj) = @_;
+while ($obj) {
+ return $obj->{'open_user'} if ($obj->{'open_user'});
+ $obj = $obj->{'parent'};
+ }
+return undef;
+}
+
# list_mails(user|file, [start], [end])
# Returns a subset of mail from a mbox format file
sub list_mails
@@ -540,49 +645,18 @@ if ($ct =~ /boundary="([^"]+)"/i || $ct =~ /boundary=([^;\s]+)/i) {
elsif (lc($attach->{'type'}) eq 'application/ms-tnef') {
# This attachment is a winmail.dat file, which may
# contain multiple other attachments!
- local ($opentnef, $tnef);
- if (!($opentnef = &has_command("opentnef")) &&
- !($tnef = &has_command("tnef"))) {
- $attach->{'error'} = "tnef command not installed";
+ local ($tattach, $terror) =
+ &decode_tnef_attachment($attach);
+ if ($tattach && @{$tattach}) {
+ pop(@attach); # lose winmail.dat
+ foreach my $ta (@{$tattach}) {
+ $ta->{'idx'} = scalar(@attach);
+ push(@attach, $ta);
+ }
}
else {
- # Can actually decode
- local $tempfile = &transname();
- open(TEMPFILE, ">$tempfile");
- print TEMPFILE $attach->{'data'};
- close(TEMPFILE);
- local $tempdir = &transname();
- mkdir($tempdir, 0700);
- if ($opentnef) {
- system("$opentnef -d $tempdir -i $tempfile >/dev/null 2>&1");
- }
- else {
- system("$tnef -C $tempdir -f $tempfile >/dev/null 2>&1");
- }
- pop(@attach); # lose winmail.dat
- opendir(DIR, $tempdir);
- while($f = readdir(DIR)) {
- next if ($f eq '.' || $f eq '..');
- local $data;
- open(FILE, "<$tempdir/$f");
- while( \n";
+print ui_submit($text{'delete'}, "confirm");
+print " \n";
+print ui_submit($text{'delete'}, "confirm");
+print " \n";
+print ui_submit($text{'delete'}, "confirm");
+print " Verdict or control action for matching packets. Base chain hook point, such as prerouting, input, forward, output, postrouting, or ingress. Unique name for the chain within this table. Use letters, numbers, underscores, and dashes. Default action for this base chain, such as accept, drop, reject, queue, or continue. Priority for this base chain. Lower values run earlier. Common values include -300, -150, 0, or 100. Base chain type, such as filter, nat, or route. Leave blank to create a regular chain with no hook.
+Saved as comment "text"; quotes and backslashes are escaped.
+
+
diff --git a/nftables/help/counter.html b/nftables/help/counter.html
new file mode 100644
index 000000000..555c93459
--- /dev/null
+++ b/nftables/help/counter.html
@@ -0,0 +1,3 @@
+ Add a counter to track packets and bytes. Add a counter to track packets and bytes. Select one or more states to match. IPv4/IPv6 address or CIDR (e.g., 2001:db8::/32). TCP/UDP destination port number or range (e.g., 80 or 1000-2000). Disable structured fields and edit the raw rule line. Validation occurs on save. Disable structured fields and edit the raw rule line. Validation occurs on save. Name of the chain to transfer control to. Does not return to the calling chain. Select a type name (or leave blank for any). The valid names depend on the protocol. ICMP types: echo-reply, destination-unreachable, source-quench, redirect, echo-request, router-advertisement, router-solicitation, time-exceeded, parameter-problem, timestamp-request, timestamp-reply, info-request, info-reply, address-mask-request, address-mask-reply. ICMPv6 types: destination-unreachable, packet-too-big, time-exceeded, parameter-problem, echo-request, echo-reply, mld-listener-query, mld-listener-report, mld-listener-done, mld-listener-reduction, nd-router-solicit, nd-router-advert, nd-neighbor-solicit, nd-neighbor-advert, nd-redirect, router-renumbering, ind-neighbor-solicit, ind-neighbor-advert, mld2-listener-report. Match the incoming interface name (e.g., eth0). nftables stores firewall rules in tables. Each table belongs to a family (such as inet, ip, or ip6) and contains one or more chains. Chains contain rules, and each rule is a sequence of tests (matches) followed by an action like accept, drop, jump, or log. Named sets can group addresses or services for reuse in multiple rules. To get started, use the Setup page to create a default ruleset, or create a table and chain manually. Then add rules (and sets) from the table view. When you are ready to activate your changes, click Apply Configuration to load the ruleset into the kernel. Name of the chain to call. Control returns to the next rule after the jump. Optional burst size in packets. Rate limit (e.g., 10/second, 5/minute, 100/hour). Add a log statement before the verdict. Use prefix and level to customize. Add a log statement before the verdict. Use prefix and level to customize. Common values: emerg, alert, crit, err, warning, notice, info, debug. String prepended to the log message. Match the outgoing interface name (e.g., eth1). Select a protocol to match. Ports apply to TCP/UDP; ICMP uses the type field. Generated rule line. In Edit directly mode, this is the rule that will be saved. IPv4/IPv6 address or CIDR (e.g., 192.168.1.0/24). Elements to store in the set. Separate entries with commas or newlines. Use nftables syntax, such as IPs/CIDR for address sets or ports for service sets. Optional flags for the set, like interval or timeout. Use the same syntax as nftables, separated by spaces if multiple. Unique name for the set within the table. Use letters, numbers, underscores, or dashes. Rules reference a set as @name. Type of elements stored in the set, such as ipv4_addr, ipv6_addr, or inet_service. This must match the elements you enter. TCP/UDP source port number or range (e.g., 22 or 1000-2000). Select one or more TCP flags to match. Use the mask field for a bitmask match. Optional mask used with tcp flags & mask == value. Example mask: syn|rst. \n";
+ $rules_html .= ui_buttons_start();
+ $rules_html .= ui_buttons_row("setup.cgi", $text{'index_setup'}, $text{'index_setupdesc'});
+ $rules_html .= ui_buttons_row("create_table.cgi", $text{'index_table_create'},
+ $text{'index_table_createdesc'});
+ $rules_html .= ui_buttons_end();
+} else {
+ # Select table
+ if (!defined($in{'table'}) || $in{'table'} !~ /^\d+$/ ||
+ $in{'table'} > $#tables) {
+ $in{'table'} = 0;
+ }
+ my @table_opts;
+ for (my $i = 0; $i <= $#tables; $i++) {
+ my $t = $tables[$i];
+ push(@table_opts, [ $i, $t->{'family'}." ".$t->{'name'} ]);
+ }
+
+ if (!$partial) {
+ print ui_form_start("index.cgi");
+ print " $text{'setup_desc'} ",text('setup_deny_note', $webmin_port)," \n";
my ($ok, $cert, $key, $chain) = &request_letsencrypt_cert(
\@doms, $webroot, undef, $size, $mode, $in{'staging'},
- undef, undef, undef, undef, undef, undef, $in{'subset'});
+ undef, undef, undef, $in{'directory_url'},
+ $in{'eab_kid'}, $in{'eab_hmac'}, $in{'subset'});
if (!$ok) {
print &text('letsencrypt_failed', $cert)," \n";
}
@@ -113,7 +130,9 @@ else {
# Save the renewal schedule
&save_renewal_only(\@doms, $webroot, $mode,
- $size, $in{'subset'}, $in{'use'});
+ $size, $in{'subset'}, $in{'use'},
+ $in{'directory_url'},
+ $in{'eab_kid'}, $in{'eab_hmac'});
# Copy cert, key and chain to Webmin
if ($in{'use'}) {
@@ -162,17 +181,37 @@ else {
&ui_print_footer("", $text{'index_return'});
}
-# save_renewal_only(&doms, webroot, mode, size, subset-mode, used-by-webmin)
+# save_renewal_only(&doms, webroot, mode, size, subset-mode, used-by-webmin,
+# directory-url, eab-kid, eab-hmac)
# Save for future renewals
sub save_renewal_only
{
-my ($doms, $webroot, $mode, $size, $subset, $usewebmin) = @_;
+my ($doms, $webroot, $mode, $size, $subset, $usewebmin, $directory_url,
+ $eab_kid, $eab_hmac) = @_;
$config{'letsencrypt_doms'} = join(" ", @$doms);
$config{'letsencrypt_webroot'} = $webroot;
$config{'letsencrypt_mode'} = $mode;
$config{'letsencrypt_size'} = $size;
$config{'letsencrypt_subset'} = $subset;
$config{'letsencrypt_nouse'} = $usewebmin ? 0 : 1;
+if ($directory_url) {
+ $config{'letsencrypt_directory_url'} = $directory_url;
+ }
+else {
+ delete($config{'letsencrypt_directory_url'});
+ }
+if ($directory_url && $eab_kid) {
+ $config{'letsencrypt_eab_kid'} = $eab_kid;
+ }
+else {
+ delete($config{'letsencrypt_eab_kid'});
+ }
+if ($directory_url && $eab_hmac) {
+ $config{'letsencrypt_eab_hmac'} = $eab_hmac;
+ }
+else {
+ delete($config{'letsencrypt_eab_hmac'});
+ }
&save_module_config();
if (&foreign_check("webmincron")) {
my $job = &find_letsencrypt_cron_job();
diff --git a/webmin/webmin-lib.pl b/webmin/webmin-lib.pl
index 1a567c4ed..0e74543a7 100755
--- a/webmin/webmin-lib.pl
+++ b/webmin/webmin-lib.pl
@@ -2720,20 +2720,26 @@ my $webroot = $config{'letsencrypt_webroot'};
my $mode = $config{'letsencrypt_mode'} || "web";
my $size = $config{'letsencrypt_size'};
my $usewebmin = !$config{'letsencrypt_nouse'};
+my $directory_url = $config{'letsencrypt_directory_url'};
+my $eab_kid = $config{'letsencrypt_eab_kid'};
+my $eab_hmac = $config{'letsencrypt_eab_hmac'};
if (!@doms) {
print "No domains saved to renew cert for!\n";
return;
}
-if (!$webroot) {
+if ($mode eq "web" && !$webroot) {
print "No webroot saved to renew cert for!\n";
return;
}
-elsif (!-d $webroot) {
+elsif ($mode eq "web" && !-d $webroot) {
print "Webroot $webroot does not exist!\n";
return;
}
my ($ok, $cert, $key, $chain) = &request_letsencrypt_cert(\@doms, $webroot,
- undef, $size, $mode);
+ undef, $size, $mode,
+ undef, undef, undef,
+ undef, $directory_url,
+ $eab_kid, $eab_hmac);
if (!$ok) {
print "Failed to renew certificate : $cert\n";
return;
", text('delete_chain_inuse', $in{'chain'}, scalar(@refs));
+}
+print "
", text('delete_set_inuse', $in{'set'}, $refs);
+}
+print "
".text('edit_saddr_set',
+ ui_select("saddr_set", $saddr_set, \@addr_set_opts, 1, 0, 1));
+}
+print ui_table_row(hlink($text{'edit_saddr'}, "saddr"), $saddr_row);
+
+my $daddr_row = ui_textbox("daddr", $daddr_val, 30);
+if (@addr_set_opts > 1) {
+ $daddr_row .= "
".text('edit_daddr_set',
+ ui_select("daddr_set", $daddr_set, \@addr_set_opts, 1, 0, 1));
+}
+print ui_table_row(hlink($text{'edit_daddr'}, "daddr"), $daddr_row);
+
+# Protocol
+print ui_table_row(hlink($text{'edit_proto'}, "proto"),
+ ui_select("proto", $proto_sel,
+ [
+ [ "", $text{'edit_proto_any'} ],
+ [ "tcp", "TCP" ],
+ [ "udp", "UDP" ],
+ [ "icmp", "ICMP" ],
+ [ "icmpv6", "ICMPv6" ],
+ ]));
+
+# Ports
+my $sport_row = ui_textbox("sport", $sport_val, 10);
+if (@port_set_opts > 1) {
+ $sport_row .= "
".text('edit_sport_set',
+ ui_select("sport_set", $sport_set, \@port_set_opts, 1, 0, 1));
+}
+print ui_table_row(hlink($text{'edit_sport'}, "sport"), $sport_row);
+
+my $dport_row = ui_textbox("dport", $dport_val, 10);
+if (@port_set_opts > 1) {
+ $dport_row .= "
".text('edit_dport_set',
+ ui_select("dport_set", $dport_set, \@port_set_opts, 1, 0, 1));
+}
+print ui_table_row(hlink($text{'edit_dport'}, "dport"), $dport_row);
+
+print ui_table_end();
+
+print ui_hidden_table_start($text{'edit_advanced'}, "width=100%", 2,
+ "advanced", $advanced_open ? 1 : 0);
+
+# Jump/Goto target chain
+print ui_table_row(hlink($text{'edit_jump'}, "jump"),
+ ui_textbox("jump", $rule->{'jump'}, 20));
+print ui_table_row(hlink($text{'edit_goto'}, "goto"),
+ ui_textbox("goto", $rule->{'goto'}, 20));
+
+# Interfaces
+if ($chain_hook && $chain_hook eq 'input') {
+ # Incoming interface
+ print ui_table_row(hlink($text{'edit_iif'}, "iif"),
+ interface_choice("iif", $rule->{'iif'}, $text{'edit_if_any'}));
+}
+elsif ($chain_hook && $chain_hook eq 'output') {
+ # Outgoing interface
+ print ui_table_row(hlink($text{'edit_oif'}, "oif"),
+ interface_choice("oif", $rule->{'oif'}, $text{'edit_if_any'}));
+}
+else {
+ # Forward or unknown chain - allow both
+ print ui_table_row(hlink($text{'edit_iif'}, "iif"),
+ interface_choice("iif", $rule->{'iif'}, $text{'edit_if_any'}));
+ print ui_table_row(hlink($text{'edit_oif'}, "oif"),
+ interface_choice("oif", $rule->{'oif'}, $text{'edit_if_any'}));
+}
+
+# ICMP type
+print ui_table_row(hlink($text{'edit_icmp_type'}, "icmp_type"),
+ ui_select("icmp_type", $icmp_type, \@icmp_type_opts, 1, 0, 1));
+
+# Conntrack state
+print ui_table_row(hlink($text{'edit_ct_state'}, "ct_state"),
+ ui_select("ct_state", $ct_state_sel, \@ct_state_opts, 5, 1, 1));
+
+# TCP flags
+print ui_table_row(hlink($text{'edit_tcp_flags'}, "tcp_flags"),
+ ui_select("tcp_flags", $tcp_flags_sel, \@tcp_flags_opts, 8, 1, 1));
+print ui_table_row(hlink($text{'edit_tcp_flags_mask'}, "tcp_flags_mask"),
+ ui_textbox("tcp_flags_mask", $rule->{'tcp_flags_mask'}, 20));
+
+# Limit
+print ui_table_row(hlink($text{'edit_limit_rate'}, "limit_rate"),
+ ui_textbox("limit_rate", $rule->{'limit_rate'}, 20));
+print ui_table_row(hlink($text{'edit_limit_burst'}, "limit_burst"),
+ ui_textbox("limit_burst", $rule->{'limit_burst'}, 10));
+
+# Log
+my $log_row = ui_checkbox("log", 1, hlink($text{'edit_log_enable'}, "log_enable"), $log_enabled);
+$log_row .= "
".text('edit_log_prefix', ui_textbox("log_prefix", $rule->{'log_prefix'}, 20));
+$log_row .= " ".text('edit_log_level', ui_textbox("log_level", $rule->{'log_level'}, 10));
+print ui_table_row($text{'edit_log'}, $log_row);
+
+# Counter
+print ui_table_row(hlink($text{'edit_counter'}, "counter"),
+ ui_checkbox("counter", 1, $text{'edit_counter_enable'}, $rule->{'counter'}));
+
+print ui_hidden_table_end("advanced");
+
+print ui_table_start($text{'edit_rule'}, "width=100%", 2);
+
+# Raw rule (read-only unless edit direct is checked)
+my $raw_controls = ui_checkbox("edit_direct", 1, $text{'edit_raw_rule_direct'}, 0);
+my $raw_area = ui_textarea("raw_rule", $rule->{'text'}, 4, 60, undef, undef,
+ "readonly='true'");
+print ui_table_row(hlink($text{'edit_raw_rule'}, "raw_rule"), $raw_controls."
".$raw_area,
+ undef, undef, ["data-column-span='all' data-column-locked='1'"]);
+
+print ui_table_end();
+my @buttons;
+if ($in{'new'}) {
+ push(@buttons, [ undef, $text{'create'} ]);
+} else {
+ push(@buttons, [ undef, $text{'save'} ]);
+ push(@buttons, [ 'delete', $text{'delete'} ]);
+}
+print ui_form_end(\@buttons);
+
+sub js_array
+{
+ my (@vals) = @_;
+ return "[".join(",", map {
+ my $v = $_;
+ $v =~ s/\\/\\\\/g;
+ $v =~ s/"/\\"/g;
+ "\"$v\"";
+ } @vals)."]";
+}
+
+sub js_object
+{
+ my (%vals) = @_;
+ return "{".join(",", map {
+ my $k = $_;
+ my $v = $vals{$k};
+ $k =~ s/\\/\\\\/g;
+ $k =~ s/"/\\"/g;
+ $v =~ s/\\/\\\\/g if (defined($v));
+ $v =~ s/"/\\"/g if (defined($v));
+ "\"$k\":\"$v\"";
+ } sort keys %vals)."}";
+}
+
+my $icmp_js = js_array(@icmp_types);
+my $icmpv6_js = js_array(@icmpv6_types);
+my $icmp_any = $text{'edit_proto_any'};
+$icmp_any =~ s/\\/\\\\/g;
+$icmp_any =~ s/"/\\"/g;
+my $set_fam_js = js_object(%set_families);
+
+print "
+EOF
+
+ui_print_footer("index.cgi?table=$in{'table'}", $text{'index_return'});
diff --git a/nftables/edit_set.cgi b/nftables/edit_set.cgi
new file mode 100755
index 000000000..9158afbac
--- /dev/null
+++ b/nftables/edit_set.cgi
@@ -0,0 +1,86 @@
+#!/usr/bin/perl
+# edit_set.cgi
+# Display a form for creating or editing a set
+
+require './nftables-lib.pl'; ## no critic
+use strict;
+use warnings;
+our (%in, %text);
+ReadParse();
+
+my @tables = get_nftables_save();
+my $table = $tables[$in{'table'}];
+$table || error($text{'set_notable'});
+
+my $set = { };
+my $set_name = "";
+my $is_new = $in{'new'} ? 1 : 0;
+
+if ($is_new) {
+ ui_print_header(undef, $text{'set_title_new'}, "", "intro", 1, 1);
+}
+else {
+ $set_name = $in{'set'};
+ $set = $table->{'sets'}->{$set_name};
+ $set || error($text{'set_noset'});
+ ui_print_header(undef, $text{'set_title_edit'}, "", "intro", 1, 1);
+}
+
+my $elements_text = set_elements_text($set);
+my @type_opts = (
+ [ "", $text{'set_type_select'} ],
+ [ "ipv4_addr", "ipv4_addr" ],
+ [ "ipv6_addr", "ipv6_addr" ],
+ [ "ether_addr", "ether_addr" ],
+ [ "inet_proto", "inet_proto" ],
+ [ "inet_service", "inet_service" ],
+ [ "mark", "mark" ],
+);
+my %type_seen = map { $_->[0] => 1 } @type_opts;
+if ($set->{'type'} && !$type_seen{$set->{'type'}}) {
+ push(@type_opts, [ $set->{'type'}, $set->{'type'} ]);
+}
+my @flag_opts = (
+ [ "constant", "constant" ],
+ [ "dynamic", "dynamic" ],
+ [ "interval", "interval" ],
+ [ "timeout", "timeout" ],
+);
+my @flags_sel;
+my $flags_sel;
+if ($set->{'flags'}) {
+ @flags_sel = split(/\s+|,\s*/, $set->{'flags'});
+ @flags_sel = grep { $_ ne '' } @flags_sel;
+ my %flag_seen = map { $_->[0] => 1 } @flag_opts;
+ foreach my $f (@flags_sel) {
+ push(@flag_opts, [ $f, $f ]) if (!$flag_seen{$f}++);
+ }
+}
+$flags_sel = @flags_sel ? \@flags_sel : undef;
+
+print ui_form_start("save_set.cgi");
+print ui_hidden("table", $in{'table'});
+print ui_hidden("new", $is_new);
+print ui_hidden("set", $set_name) if (!$is_new);
+
+print ui_table_start($text{'set_header'}, "width=100%", 2);
+
+my $name_tags = $is_new ? undef : "readonly";
+print ui_table_row(hlink($text{'set_name'}, "set_name"),
+ ui_textbox("set_name", $set_name, 20, 0, undef, $name_tags));
+
+print ui_table_row(hlink($text{'set_type'}, "set_type"),
+ ui_select("set_type", $set->{'type'}, \@type_opts, 1, 0, 1));
+
+print ui_table_row(hlink($text{'set_flags'}, "set_flags"),
+ ui_select("set_flags", $flags_sel, \@flag_opts, 5, 1, 1));
+
+my $elem_field = ui_textarea("set_elements", $elements_text, 6, 60);
+$elem_field .= "
$text{'set_elements_desc'}";
+print ui_table_row(hlink($text{'set_elements'}, "set_elements"),
+ $elem_field);
+
+print ui_table_end();
+
+print ui_form_end([ [ undef, $text{$is_new ? 'create' : 'save'} ] ]);
+ui_print_footer("index.cgi?table=$in{'table'}", $text{'index_return'});
diff --git a/nftables/help/action.html b/nftables/help/action.html
new file mode 100644
index 000000000..c5ca866f7
--- /dev/null
+++ b/nftables/help/action.html
@@ -0,0 +1,7 @@
+
+
+
diff --git a/nftables/help/chain_hook.html b/nftables/help/chain_hook.html
new file mode 100644
index 000000000..4ba86aec1
--- /dev/null
+++ b/nftables/help/chain_hook.html
@@ -0,0 +1,3 @@
+
+
+
diff --git a/nftables/help/daddr.html b/nftables/help/daddr.html
new file mode 100644
index 000000000..fbd242cf6
--- /dev/null
+++ b/nftables/help/daddr.html
@@ -0,0 +1,3 @@
+
+
+
+
+$out
");
+ if (!$partial) {
+ ui_print_footer("/", $text{'index'});
+ }
+ exit;
+}
+
+# Load tables
+my @tables = get_nftables_save();
+my $rules_html = "";
+
+if (!@tables) {
+ $rules_html .= "$text{'index_none'}
\n";
+ if ($curr->{'sets'} && ref($curr->{'sets'}) eq 'HASH' &&
+ keys %{$curr->{'sets'}}) {
+ $rules_html .= ui_columns_start(
+ [ $text{'index_set_name'}, $text{'index_set_type'},
+ $text{'index_set_flags'}, $text{'index_set_elements'},
+ $text{'index_set_actions'} ], 100);
+ foreach my $s (sort keys %{$curr->{'sets'}}) {
+ my $set = $curr->{'sets'}->{$s} || { };
+ my $actions_html =
+ ui_link("edit_set.cgi?table=$in{'table'}&set=".
+ urlize($s), $text{'index_set_edit'})."
".
+ ui_link("delete_set.cgi?table=$in{'table'}&set=".
+ urlize($s), $text{'index_set_delete'});
+ $rules_html .= ui_columns_row([
+ $s,
+ $set->{'type'} || "-",
+ $set->{'flags'} || "-",
+ set_elements_summary($set),
+ $actions_html
+ ]);
+ }
+ $rules_html .= ui_columns_end();
+ }
+ else {
+ $rules_html .= "$text{'index_sets_none'}
\n";
+ }
+ $rules_html .= ui_buttons_start();
+ $rules_html .= ui_buttons_row(
+ "edit_set.cgi?table=$in{'table'}&new=1",
+ $text{'index_set_create'},
+ $text{'index_set_createdesc'});
+ $rules_html .= ui_buttons_end();
+
+ # Show chains and rules
+ $rules_html .= ui_hr();
+ $rules_html .= ui_columns_start(
+ [ $text{'index_chain_col'}, $text{'index_type'},
+ $text{'index_hook'}, $text{'index_priority'},
+ $text{'index_policy_col'}, $text{'index_rules'},
+ $text{'index_actions'} ], 100);
+
+ foreach my $c (sort keys %{$curr->{'chains'}}) {
+ my $chain_def = $curr->{'chains'}->{$c} || { };
+ my $policy = $chain_def->{'policy'};
+ my $policy_label = $policy ?
+ ($text{'index_policy_'.lc($policy)} || uc($policy)) : "-";
+ my @rules = grep { $_->{'chain'} eq $c } @{$curr->{'rules'}};
+ my $rules_html_row;
+ if (@rules) {
+ my $ri = 0;
+ $rules_html_row = "\n";
+ foreach my $r (@rules) {
+ my $desc = describe_rule($r);
+ my $rule_link = ui_link(
+ "edit_rule.cgi?table=$in{'table'}&chain=".
+ urlize($c)."&idx=$r->{'index'}",
+ $desc);
+ my $move = ui_up_down_arrows(
+ "move_rule.cgi?table=$in{'table'}&chain=".
+ urlize($c)."&idx=$r->{'index'}&dir=up",
+ "move_rule.cgi?table=$in{'table'}&chain=".
+ urlize($c)."&idx=$r->{'index'}&dir=down",
+ $ri > 0,
+ $ri < $#rules);
+ $rules_html_row .= "
";
+ } else {
+ $rules_html_row = "$text{'index_rules_none'}";
+ $rules_html_row .= " \n";
+ $ri++;
+ }
+ $rules_html_row .= "$rule_link ".
+ "$move \n";
+ $rules_html_row .= "".
+ ui_link("edit_rule.cgi?table=$in{'table'}&chain=".
+ urlize($c)."&new=1", $text{'index_radd'}).
+ "
".
+ ui_link("edit_rule.cgi?table=$in{'table'}&chain=".
+ urlize($c)."&new=1", $text{'index_radd'});
+ }
+
+ my $actions_html =
+ ui_link("edit_chain.cgi?table=$in{'table'}&chain=".
+ urlize($c), $text{'index_cedit'})."
".
+ ui_link("rename_chain.cgi?table=$in{'table'}&chain=".
+ urlize($c), $text{'index_crename'})."
".
+ ui_link("delete_chain.cgi?table=$in{'table'}&chain=".
+ urlize($c), $text{'index_cdelete'});
+ $rules_html .= ui_columns_row([
+ $c,
+ $chain_def->{'type'} || "-",
+ $chain_def->{'hook'} || "-",
+ defined($chain_def->{'priority'}) ? $chain_def->{'priority'} : "-",
+ $policy_label,
+ $rules_html_row,
+ $actions_html
+ ]);
+ }
+ $rules_html .= ui_columns_end();
+ $rules_html .= ui_hr();
+ $rules_html .= ui_buttons_start();
+ $rules_html .= ui_buttons_row(
+ "edit_chain.cgi?table=$in{'table'}&new=1",
+ $text{'index_chain_create'},
+ $text{'index_chain_createdesc'});
+ $rules_html .= ui_buttons_row("delete_table.cgi?table=$in{'table'}",
+ $text{'index_table_delete'},
+ $text{'index_table_deletedesc'});
+ $rules_html .= ui_buttons_end();
+ }
+}
+
+if ($partial) {
+ print $rules_html;
+ exit;
+}
+
+print "$1
+index_setup=Create Default Ruleset
+index_setupdesc=Create a default set of rules, for example to allow all traffic.
+index_table_create=Create table
+index_table_createdesc=Add a new nftables table.
+index_table_delete=Delete table
+index_table_deletedesc=Remove the currently selected table.
+index_rule_desc=Action $1 for protocol $2 and destination port $3
+index_rule_desc2=Action $1 for outgoing interface $2
+index_rule_desc3=Action $1 for incoming interface $2
+index_rule_desc4=Action $1 for incoming interface $2 and outgoing interface $3
+index_rule_desc_generic=Action $1 for $2
+index_rule_desc_action=Action $1
+index_rule_iif=Incoming interface $1
+index_rule_oif=Outgoing interface $1
+index_rule_saddr=Source $1
+index_rule_daddr=Destination $1
+index_rule_proto=Protocol $1
+index_rule_sport=Source port $1
+index_rule_dport=Destination port $1
+index_rule_icmp=ICMP type $1
+index_rule_icmpv6=ICMPv6 type $1
+index_rule_ct=Conntrack state $1
+index_rule_tcpflags=TCP flags $1
+index_rule_limit=Limit $1
+index_rule_log=Log
+index_rule_log_prefix=Log prefix $1
+index_rule_log_level=Log level $1
+index_rule_counter=Counter
+index_rule_jump=Jump $1
+index_rule_goto=Goto $1
+index_accept=Accept
+index_drop=Drop
+index_reject=Reject
+index_return_action=Return
+edit_title_new=Create Rule
+edit_title_edit=Edit Rule
+edit_comment=Comment
+edit_action=Action
+edit_return=Return
+edit_jump_action=Jump
+edit_goto_action=Goto
+edit_jump=Jump target chain
+edit_goto=Goto target chain
+edit_proto=Protocol
+edit_proto_any=Any
+edit_saddr=Source address
+edit_daddr=Destination address
+edit_sport=Source Port
+edit_dport=Destination Port
+edit_set_none=None
+edit_saddr_set=Use set $1
+edit_daddr_set=Use set $1
+edit_sport_set=Use set $1
+edit_dport_set=Use set $1
+edit_icmp_type=ICMP/ICMPv6 type
+edit_ct_state=Conntrack state
+edit_tcp_flags=TCP flags
+edit_tcp_flags_mask=TCP flags mask
+edit_limit_rate=Limit rate
+edit_limit_burst=Limit burst
+edit_log=Logging
+edit_log_enable=Enable logging
+edit_log_prefix=Prefix $1
+edit_log_level=Level $1
+edit_counter=Counter
+edit_counter_enable=Enable counter
+edit_raw_rule=Raw rule
+edit_raw_rule_direct=Edit directly
+edit_advanced=Advanced options
+edit_oif=Outgoing Interface
+edit_iif=Incoming Interface
+edit_if_any=Any
+chain_title_new=Create chain
+chain_title_edit=Edit chain
+chain_header=Chain Details
+chain_name=Chain name
+chain_type=Type
+chain_hook=Hook
+chain_priority=Priority
+chain_policy=Policy
+chain_type_none=Regular (no hook)
+chain_hook_none=None
+chain_policy_none=None
+chain_err=Failed to save chain
+chain_failed=Failed to save chain: $1
+chain_ename=Chain name is invalid
+chain_edup=A chain with that name already exists
+chain_notable=No such table selected
+chain_nochain=No such chain selected
+chain_ebase=Base chains require type, hook, priority, and policy.
+delete_chain_title=Delete chain
+delete_chain_err=Failed to delete chain
+delete_chain_failed=Failed to delete chain: $1
+delete_chain_confirm=Are you sure you want to delete chain $1 from table $2?
+delete_chain_inuse=Chain $1 is referenced by $2 rule(s) via jump/goto. Remove those rules first.
+rename_chain_title=Rename chain
+rename_chain_header=Rename chain
+rename_chain_old=Current name
+rename_chain_new=New name
+rename_chain_ok=Rename
+rename_chain_failed=Failed to rename chain: $1
+create_title=Create table
+create_header=Create a new table
+create_family=Table family
+create_name=Table name
+create_ok=Create
+create_err=Failed to create table
+create_failed=Failed to create table: $1
+create_ename=Table name is invalid
+create_edup=A table with that name and family already exists
+create_efamily=Invalid table family selected
+delete_title=Delete table
+delete_err=Failed to delete table
+delete_failed=Failed to delete table: $1
+delete_confirm=Are you sure you want to delete table $1?
+delete_notable=No such table selected
+save_failed=Failed to save rule: $1
+save_raw_empty=Raw rule cannot be empty.
+save_raw_multiline=Raw rule must be a single line.
+save_invalid_rule=Raw rule is invalid: $1
+save_set_missing=Selected set $1 does not exist.
+move_err=Failed to move rule
+move_failed=Failed to move rule: $1
+move_notable=No such table selected
+move_nochain=No such chain selected
+move_norule=No such rule selected
+set_title_new=Create set
+set_title_edit=Edit set
+set_header=Set Details
+set_name=Set name
+set_type=Type
+set_type_select=Select type
+set_flags=Flags
+set_elements=Elements
+set_elements_desc=Separate elements with commas or newlines.
+set_err=Failed to save set
+set_failed=Failed to save set: $1
+set_ename=Set name is invalid
+set_edup=A set with that name already exists
+set_etype=Set type is required
+set_notable=No such table selected
+set_noset=No such set selected
+delete_set_title=Delete set
+delete_set_err=Failed to delete set
+delete_set_failed=Failed to delete set: $1
+delete_set_confirm=Are you sure you want to delete set $1 from table $2?
+delete_set_inuse=Set $1 is referenced by $2 rule(s). Remove those rules first.
diff --git a/nftables/module.info b/nftables/module.info
new file mode 100644
index 000000000..3aeb690fe
--- /dev/null
+++ b/nftables/module.info
@@ -0,0 +1,5 @@
+name=Nftables
+desc=NFTables Firewall
+os_support=*-linux
+category=net
+longdesc=Configure a Linux firewall using NFTables. Allows the editing of all tables, chains, and rules.
diff --git a/nftables/move_rule.cgi b/nftables/move_rule.cgi
new file mode 100755
index 000000000..456bc26de
--- /dev/null
+++ b/nftables/move_rule.cgi
@@ -0,0 +1,40 @@
+#!/usr/bin/perl
+# move_rule.cgi
+# Move a rule up or down within a chain
+
+require './nftables-lib.pl'; ## no critic
+use strict;
+use warnings;
+our (%in, %text);
+ReadParse();
+error_setup($text{'move_err'});
+
+my @tables = get_nftables_save();
+my $table = $tables[$in{'table'}];
+$table || error($text{'move_notable'});
+
+my $chain = $in{'chain'};
+$chain || error($text{'move_nochain'});
+
+my $dir = $in{'dir'};
+$dir = '' if (!defined($dir));
+
+my $idx = $in{'idx'};
+$idx =~ /^\d+$/ || error($text{'move_norule'});
+
+my $rv = move_rule_in_chain($table, $chain, $idx, $dir);
+if (!defined($rv)) {
+ error($text{'move_norule'});
+}
+
+if ($rv) {
+ my $err = save_configuration(@tables);
+ error(text('move_failed', $err)) if ($err);
+ webmin_log("move", "rule", undef,
+ { 'table' => $table->{'name'},
+ 'family' => $table->{'family'},
+ 'chain' => $chain,
+ 'dir' => $dir });
+}
+
+redirect("index.cgi?table=$in{'table'}");
diff --git a/nftables/nftables-lib.pl b/nftables/nftables-lib.pl
new file mode 100644
index 000000000..7ac1ac977
--- /dev/null
+++ b/nftables/nftables-lib.pl
@@ -0,0 +1,1140 @@
+# nftables-lib.pl
+# Functions for reading and writing nftables rules
+
+BEGIN { push(@INC, ".."); }; ## no critic
+use WebminCore;
+use strict;
+use warnings;
+our (%config, $module_config_directory);
+init_config();
+
+# get_nftables_save([file])
+# Returns a list of tables and their chains/rules
+sub get_nftables_save
+{
+my ($file) = @_;
+my $cmd = $config{'nft_cmd'} || has_command("nft");
+if (!$file) {
+ if ($config{'direct'}) {
+ $file = "$cmd list ruleset |";
+ } else {
+ $file = $config{'save_file'} || "$module_config_directory/nftables.conf";
+ }
+}
+return ( ) if (!$file);
+
+my @rv;
+my $table;
+my $chain;
+my $set;
+my $set_depth = 0;
+my $set_elem_open = 0;
+my $set_elem_buf = '';
+my $lnum = 0;
+my $content;
+my $fh;
+if ($file =~ /\|\s*$/) {
+ (my $pipe_cmd = $file) =~ s/\|\s*$//;
+ open($fh, '-|', $pipe_cmd);
+} else {
+ open($fh, '<', $file);
+}
+$content = do { local $/; <$fh> };
+close($fh);
+
+my @lines = split /\r?\n/, $content;
+for(my $i=0; $i<@lines; $i++) {
+ my $line = $lines[$i];
+ $lnum++;
+ $line =~ s/#.*$//; # Ignore comments for now
+
+ if ($set) {
+ my $sline = $line;
+ $sline =~ s/^\s+//;
+ $sline =~ s/\s+$//;
+ if ($set_elem_open) {
+ if ($sline =~ /(.*)\}/) {
+ $set_elem_buf .= " ".$1;
+ $set_elem_open = 0;
+ $set_elem_buf =~ s/;\s*$//;
+ $set->{'elements'} = parse_set_elements_string($set_elem_buf);
+ $set_elem_buf = '';
+ }
+ else {
+ $set_elem_buf .= " ".$sline if ($sline ne '');
+ }
+ }
+ else {
+ if ($sline =~ /^type\s+(\S+)\s*;?$/) {
+ $set->{'type'} = $1;
+ $set->{'type'} =~ s/;\s*$//;
+ }
+ elsif ($sline =~ /^flags\s+(.+?)\s*;?$/) {
+ $set->{'flags'} = $1;
+ }
+ elsif ($sline =~ /^elements\s*=\s*\{(.*)$/) {
+ my $rest = $1;
+ if ($rest =~ /(.*)\}/) {
+ my $content = $1;
+ $content =~ s/;\s*$//;
+ $set->{'elements'} = parse_set_elements_string($content);
+ }
+ else {
+ $set_elem_open = 1;
+ $set_elem_buf = $rest;
+ }
+ }
+ elsif ($sline ne '' && $sline ne '}') {
+ push(@{$set->{'raw_lines'}}, $sline);
+ }
+ }
+
+ my $opens = () = $line =~ /\{/g;
+ my $closes = () = $line =~ /\}/g;
+ $set_depth += $opens - $closes;
+ if ($set_depth <= 0) {
+ $set = undef;
+ $set_depth = 0;
+ $set_elem_open = 0;
+ $set_elem_buf = '';
+ }
+ next;
+ }
+
+ if ($line =~ /^table\s+(\S+)\s+(\S+)\s+\{/) {
+ # Start of a table
+ $table = { 'name' => $2,
+ 'family' => $1,
+ 'line' => $lnum,
+ 'rules' => [ ],
+ 'chains' => { },
+ 'sets' => { } };
+ push(@rv, $table);
+ $chain = undef;
+ }
+ elsif ($line =~ /^\s*set\s+(\S+)\s+\{/) {
+ # Start of a set
+ if ($table) {
+ my $setname = $1;
+ $set = {
+ 'name' => $setname,
+ 'line' => $lnum,
+ 'elements' => [ ],
+ 'raw_lines' => [ ],
+ };
+ $table->{'sets'}->{$setname} = $set;
+ $set_depth = () = $line =~ /\{/g;
+ $set_depth -= () = $line =~ /\}/g;
+ $set_elem_open = 0;
+ $set_elem_buf = '';
+ }
+ }
+ elsif ($line =~ /^\s*chain\s+(\S+)\s+\{/) {
+ # Start of a chain
+ if ($table) {
+ $chain = $1;
+ $table->{'chains'}->{$chain} = { };
+
+ # Look at next line for chain definition
+ if ($lines[$i+1] =~ /^\s*type\s+(\S+)\s+hook\s+(\S+)\s+priority\s+([a-zA-Z0-9_-]+);\s+policy\s+(\S+);/) {
+ $table->{'chains'}->{$chain}->{'type'} = $1;
+ $table->{'chains'}->{$chain}->{'hook'} = $2;
+ $table->{'chains'}->{$chain}->{'priority'} = $3;
+ $table->{'chains'}->{$chain}->{'policy'} = $4;
+ $i++; # Skip next line
+ }
+ }
+ }
+ elsif ($line =~ /^\s*(.*?)$/ && $table && $chain && $1 ne "}") {
+ # A rule
+ my $rule_str = $1;
+ if ($rule_str =~ /\S/) {
+ my $rule = {
+ 'text' => $rule_str,
+ 'chain' => $chain,
+ 'index' => scalar(@{$table->{'rules'}}),
+ 'line' => $lnum
+ };
+ my $parsed = parse_rule_text($rule_str);
+ if ($parsed) {
+ foreach my $k (keys %$parsed) {
+ $rule->{$k} = $parsed->{$k};
+ }
+ }
+ push(@{$table->{'rules'}}, $rule);
+ }
+ }
+}
+
+return @rv;
+}
+
+sub tokenize_nft_rule
+{
+my ($line) = @_;
+my @tokens;
+my $i = 0;
+my $len = length($line);
+while ($i < $len) {
+ my $ch = substr($line, $i, 1);
+ if ($ch =~ /\s/) {
+ $i++;
+ next;
+ }
+ if ($ch eq '"' || $ch eq "'") {
+ my $q = $ch;
+ my $j = $i + 1;
+ my $esc = 0;
+ while ($j < $len) {
+ my $c = substr($line, $j, 1);
+ if ($esc) {
+ $esc = 0;
+ }
+ elsif ($c eq "\\") {
+ $esc = 1;
+ }
+ elsif ($c eq $q) {
+ $j++;
+ last;
+ }
+ $j++;
+ }
+ push(@tokens, substr($line, $i, $j-$i));
+ $i = $j;
+ next;
+ }
+ if ($ch eq '{') {
+ my $j = $i + 1;
+ my $depth = 1;
+ while ($j < $len && $depth > 0) {
+ my $c = substr($line, $j, 1);
+ if ($c eq '{') {
+ $depth++;
+ }
+ elsif ($c eq '}') {
+ $depth--;
+ }
+ $j++;
+ }
+ push(@tokens, substr($line, $i, $j-$i));
+ $i = $j;
+ next;
+ }
+ my $j = $i;
+ while ($j < $len && substr($line, $j, 1) !~ /\s/) {
+ $j++;
+ }
+ push(@tokens, substr($line, $i, $j-$i));
+ $i = $j;
+}
+return @tokens;
+}
+
+sub unquote_nft_string
+{
+my ($s) = @_;
+return $s if (!defined($s));
+if ($s =~ /^"(.*)"$/s) {
+ $s = $1;
+ $s =~ s/\\(["\\])/$1/g;
+}
+elsif ($s =~ /^'(.*)'$/s) {
+ $s = $1;
+ $s =~ s/\\(['\\])/$1/g;
+}
+return $s;
+}
+
+sub escape_nft_string
+{
+my ($s) = @_;
+return "" if (!defined($s));
+$s =~ s/\\/\\\\/g;
+$s =~ s/"/\\"/g;
+return $s;
+}
+
+sub guess_addr_family
+{
+my ($addr, $fallback) = @_;
+return $fallback if ($fallback);
+return "ip6" if (defined($addr) && $addr =~ /:/);
+return "ip";
+}
+
+sub validate_chain_base
+{
+my ($type, $hook, $priority, $policy) = @_;
+if (defined($type) || defined($hook) || defined($priority) || defined($policy)) {
+ return 0 if (!defined($type) || !defined($hook) ||
+ !defined($priority) || !defined($policy));
+}
+return 1;
+}
+
+sub move_rule_in_chain
+{
+my ($table, $chain, $idx, $dir) = @_;
+return if (!defined($table) || ref($table) ne 'HASH');
+return if (!defined($idx) || $idx !~ /^\d+$/);
+return if (!defined($chain) || $chain eq '');
+return if (!$table->{'rules'} || ref($table->{'rules'}) ne 'ARRAY');
+return if ($idx > $#{$table->{'rules'}});
+my $rule = $table->{'rules'}->[$idx];
+return if (!$rule || $rule->{'chain'} ne $chain);
+
+my @chain_idxs;
+for (my $i = 0; $i < @{$table->{'rules'}}; $i++) {
+ my $r = $table->{'rules'}->[$i];
+ next if (!$r || ref($r) ne 'HASH');
+ push(@chain_idxs, $i) if ($r->{'chain'} && $r->{'chain'} eq $chain);
+}
+my $pos;
+for (my $i = 0; $i <= $#chain_idxs; $i++) {
+ if ($chain_idxs[$i] == $idx) {
+ $pos = $i;
+ last;
+ }
+}
+return if (!defined($pos));
+
+my $swap;
+if ($dir eq 'up') {
+ return 0 if ($pos == 0);
+ $swap = $chain_idxs[$pos-1];
+}
+elsif ($dir eq 'down') {
+ return 0 if ($pos == $#chain_idxs);
+ $swap = $chain_idxs[$pos+1];
+}
+else {
+ return;
+}
+
+($table->{'rules'}->[$idx], $table->{'rules'}->[$swap]) =
+ ($table->{'rules'}->[$swap], $table->{'rules'}->[$idx]);
+
+for (my $i = 0; $i < @{$table->{'rules'}}; $i++) {
+ my $r = $table->{'rules'}->[$i];
+ $r->{'index'} = $i if ($r && ref($r) eq 'HASH');
+}
+
+return 1;
+}
+
+sub format_addr_expr
+{
+my ($dir, $rule) = @_;
+my $val = $rule->{$dir};
+return if (!defined($val) || $val eq '');
+my $fam = guess_addr_family($val, $rule->{$dir."_family"});
+return $fam." ".$dir." ".$val;
+}
+
+sub format_l4proto_expr
+{
+my ($rule) = @_;
+my $proto = $rule->{'l4proto'};
+return if (!defined($proto) || $proto eq '');
+my $fam = $rule->{'l4proto_family'} || 'meta';
+if ($fam eq 'ip' || $fam eq 'ip6') {
+ return $fam." protocol ".$proto;
+}
+return "meta l4proto ".$proto;
+}
+
+sub format_port_expr
+{
+my ($dir, $rule) = @_;
+my $val = $rule->{$dir};
+return if (!defined($val) || $val eq '');
+my $proto;
+if ($dir eq 'sport') {
+ $proto = $rule->{'sport_proto'} || $rule->{'proto'} || $rule->{'l4proto'};
+}
+else {
+ $proto = $rule->{'proto'} || $rule->{'l4proto'};
+}
+return if (!defined($proto) || $proto eq '');
+return $proto." ".$dir." ".$val;
+}
+
+sub format_tcp_flags_expr
+{
+my ($rule) = @_;
+return if (!defined($rule->{'tcp_flags'}) || $rule->{'tcp_flags'} eq '');
+my $val = $rule->{'tcp_flags'};
+if (defined($rule->{'tcp_flags_mask'}) && $rule->{'tcp_flags_mask'} ne '') {
+ return "tcp flags & ".$rule->{'tcp_flags_mask'}." == ".$val;
+}
+return "tcp flags ".$val;
+}
+
+sub format_limit_expr
+{
+my ($rule) = @_;
+return if (!defined($rule->{'limit_rate'}) || $rule->{'limit_rate'} eq '');
+my $out = "limit rate ".$rule->{'limit_rate'};
+if (defined($rule->{'limit_burst'}) && $rule->{'limit_burst'} ne '') {
+ my $burst = $rule->{'limit_burst'};
+ $out .= " burst ".$burst;
+ $out .= " packets" if ($burst =~ /^\d+$/);
+}
+return $out;
+}
+
+sub format_log_expr
+{
+my ($rule) = @_;
+return if (!$rule->{'log'} && !$rule->{'log_prefix'} && !$rule->{'log_level'});
+my @p = ("log");
+if (defined($rule->{'log_prefix'}) && $rule->{'log_prefix'} ne '') {
+ my $pfx = escape_nft_string($rule->{'log_prefix'});
+ push(@p, "prefix", "\"".$pfx."\"");
+}
+if (defined($rule->{'log_level'}) && $rule->{'log_level'} ne '') {
+ push(@p, "level", $rule->{'log_level'});
+}
+return join(" ", @p);
+}
+
+sub parse_rule_text
+{
+my ($line) = @_;
+return { } if (!defined($line));
+my %rule;
+my @tokens = tokenize_nft_rule($line);
+my @exprs;
+my $i = 0;
+while ($i < @tokens) {
+ my $tok = $tokens[$i];
+
+ if ($tok eq 'comment' && $i+1 < @tokens) {
+ my $raw = $tokens[$i]." ".$tokens[$i+1];
+ $rule{'comment'} = unquote_nft_string($tokens[$i+1]);
+ push(@exprs, { 'type' => 'comment', 'text' => $raw });
+ $i += 2;
+ next;
+ }
+ if (($tok eq 'iif' || $tok eq 'iifname') && $i+1 < @tokens) {
+ my $raw = $tok." ".$tokens[$i+1];
+ $rule{'iif'} = unquote_nft_string($tokens[$i+1]);
+ $rule{'iif_type'} = $tok;
+ push(@exprs, { 'type' => 'iif', 'text' => $raw });
+ $i += 2;
+ next;
+ }
+ if (($tok eq 'oif' || $tok eq 'oifname') && $i+1 < @tokens) {
+ my $raw = $tok." ".$tokens[$i+1];
+ $rule{'oif'} = unquote_nft_string($tokens[$i+1]);
+ $rule{'oif_type'} = $tok;
+ push(@exprs, { 'type' => 'oif', 'text' => $raw });
+ $i += 2;
+ next;
+ }
+ if (($tok eq 'ip' || $tok eq 'ip6') && $i+2 < @tokens &&
+ ($tokens[$i+1] eq 'saddr' || $tokens[$i+1] eq 'daddr')) {
+ my $which = $tokens[$i+1];
+ my $val = $tokens[$i+2];
+ my $raw = $tok." ".$which." ".$val;
+ $rule{$which} = $val;
+ $rule{$which."_family"} = $tok;
+ push(@exprs, { 'type' => $which, 'text' => $raw });
+ $i += 3;
+ next;
+ }
+ if (($tok eq 'ip' || $tok eq 'ip6') && $i+2 < @tokens &&
+ $tokens[$i+1] eq 'protocol') {
+ my $val = $tokens[$i+2];
+ my $raw = $tok." protocol ".$val;
+ $rule{'l4proto'} = $val;
+ $rule{'l4proto_family'} = $tok;
+ push(@exprs, { 'type' => 'l4proto', 'text' => $raw });
+ $i += 3;
+ next;
+ }
+ if ($tok eq 'meta' && $i+2 < @tokens &&
+ $tokens[$i+1] eq 'l4proto') {
+ my $val = $tokens[$i+2];
+ my $raw = "meta l4proto ".$val;
+ $rule{'l4proto'} = $val;
+ $rule{'l4proto_family'} = 'meta';
+ push(@exprs, { 'type' => 'l4proto', 'text' => $raw });
+ $i += 3;
+ next;
+ }
+ if ($tok eq 'tcp' && $i+1 < @tokens && $tokens[$i+1] eq 'flags') {
+ my $j = $i + 2;
+ my $mask;
+ my $val;
+ if ($j < @tokens && $tokens[$j] eq '&' && $j+1 < @tokens) {
+ $mask = $tokens[$j+1];
+ $j += 2;
+ }
+ if ($j < @tokens && $tokens[$j] eq '==' && $j+1 < @tokens) {
+ $val = $tokens[$j+1];
+ $j += 2;
+ }
+ elsif ($j < @tokens) {
+ $val = $tokens[$j];
+ $j++;
+ }
+ my $raw = join(" ", @tokens[$i..($j-1)]);
+ $rule{'tcp_flags'} = $val if (defined($val));
+ $rule{'tcp_flags_mask'} = $mask if (defined($mask));
+ push(@exprs, { 'type' => 'tcp_flags', 'text' => $raw });
+ $i = $j;
+ next;
+ }
+ if (($tok eq 'tcp' || $tok eq 'udp') && $i+2 < @tokens &&
+ ($tokens[$i+1] eq 'dport' || $tokens[$i+1] eq 'sport')) {
+ my $dir = $tokens[$i+1];
+ my $val = $tokens[$i+2];
+ my $raw = $tok." ".$dir." ".$val;
+ if ($dir eq 'dport') {
+ $rule{'proto'} = $tok;
+ $rule{'dport'} = $val;
+ }
+ else {
+ $rule{'sport'} = $val;
+ $rule{'sport_proto'} = $tok;
+ }
+ push(@exprs, { 'type' => $dir, 'text' => $raw, 'proto' => $tok });
+ $i += 3;
+ next;
+ }
+ if (($tok eq 'icmp' || $tok eq 'icmpv6') && $i+2 < @tokens &&
+ $tokens[$i+1] eq 'type') {
+ my $val = $tokens[$i+2];
+ my $raw = $tok." type ".$val;
+ if ($tok eq 'icmp') {
+ $rule{'icmp_type'} = $val;
+ }
+ else {
+ $rule{'icmpv6_type'} = $val;
+ }
+ push(@exprs, { 'type' => $tok, 'text' => $raw });
+ $i += 3;
+ next;
+ }
+ if ($tok eq 'ct' && $i+2 < @tokens && $tokens[$i+1] eq 'state') {
+ my $val = $tokens[$i+2];
+ my $raw = "ct state ".$val;
+ $rule{'ct_state'} = $val;
+ push(@exprs, { 'type' => 'ct_state', 'text' => $raw });
+ $i += 3;
+ next;
+ }
+ if ($tok eq 'limit') {
+ my $j = $i + 1;
+ my @lt = ($tok);
+ if ($j < @tokens && $tokens[$j] eq 'rate' && $j+1 < @tokens) {
+ push(@lt, $tokens[$j], $tokens[$j+1]);
+ $rule{'limit_rate'} = $tokens[$j+1];
+ $j += 2;
+ if ($j < @tokens && $tokens[$j] eq 'burst' && $j+1 < @tokens) {
+ push(@lt, $tokens[$j], $tokens[$j+1]);
+ $rule{'limit_burst'} = $tokens[$j+1];
+ $j += 2;
+ if ($j < @tokens && $tokens[$j] eq 'packets') {
+ push(@lt, $tokens[$j]);
+ $j++;
+ }
+ }
+ }
+ my $raw = join(" ", @lt);
+ push(@exprs, { 'type' => 'limit', 'text' => $raw });
+ $i = $j;
+ next;
+ }
+ if ($tok eq 'log') {
+ my $j = $i + 1;
+ my @lt = ($tok);
+ while ($j < @tokens) {
+ if ($tokens[$j] eq 'prefix' && $j+1 < @tokens) {
+ $rule{'log_prefix'} = unquote_nft_string($tokens[$j+1]);
+ push(@lt, $tokens[$j], $tokens[$j+1]);
+ $j += 2;
+ next;
+ }
+ if ($tokens[$j] eq 'level' && $j+1 < @tokens) {
+ $rule{'log_level'} = $tokens[$j+1];
+ push(@lt, $tokens[$j], $tokens[$j+1]);
+ $j += 2;
+ next;
+ }
+ last;
+ }
+ $rule{'log'} = 1;
+ my $raw = join(" ", @lt);
+ push(@exprs, { 'type' => 'log', 'text' => $raw });
+ $i = $j;
+ next;
+ }
+ if ($tok eq 'counter') {
+ $rule{'counter'} = 1;
+ push(@exprs, { 'type' => 'counter', 'text' => $tok });
+ $i++;
+ next;
+ }
+ if ($tok =~ /^(accept|drop|reject|return)$/) {
+ $rule{'action'} = $tok;
+ push(@exprs, { 'type' => 'action', 'text' => $tok });
+ $i++;
+ next;
+ }
+ if (($tok eq 'jump' || $tok eq 'goto') && $i+1 < @tokens) {
+ my $raw = $tok." ".$tokens[$i+1];
+ $rule{$tok} = $tokens[$i+1];
+ push(@exprs, { 'type' => $tok, 'text' => $raw });
+ $i += 2;
+ next;
+ }
+
+ push(@exprs, { 'type' => 'raw', 'text' => $tok });
+ $i++;
+}
+$rule{'exprs'} = \@exprs;
+return \%rule;
+}
+
+sub format_rule_text
+{
+my ($rule) = @_;
+return "" if (!$rule || ref($rule) ne 'HASH');
+my @parts;
+my %used;
+my $exprs = $rule->{'exprs'};
+if ($exprs && ref($exprs) eq 'ARRAY' && @$exprs) {
+ foreach my $e (@$exprs) {
+ my $type = $e->{'type'} || 'raw';
+ if ($type eq 'action' || $type eq 'comment') {
+ next;
+ }
+ if ($type eq 'iif') {
+ if (!$used{'iif'} && defined($rule->{'iif'}) && $rule->{'iif'} ne '') {
+ my $iftype = $rule->{'iif_type'} || 'iif';
+ my $ival = escape_nft_string($rule->{'iif'});
+ push(@parts, $iftype." \"".$ival."\"");
+ $used{'iif'} = 1;
+ }
+ next;
+ }
+ if ($type eq 'oif') {
+ if (!$used{'oif'} && defined($rule->{'oif'}) && $rule->{'oif'} ne '') {
+ my $oftype = $rule->{'oif_type'} || 'oif';
+ my $oval = escape_nft_string($rule->{'oif'});
+ push(@parts, $oftype." \"".$oval."\"");
+ $used{'oif'} = 1;
+ }
+ next;
+ }
+ if ($type eq 'saddr') {
+ if (!$used{'saddr'}) {
+ my $addr = format_addr_expr('saddr', $rule);
+ if ($addr) {
+ push(@parts, $addr);
+ $used{'saddr'} = 1;
+ }
+ }
+ next;
+ }
+ if ($type eq 'daddr') {
+ if (!$used{'daddr'}) {
+ my $addr = format_addr_expr('daddr', $rule);
+ if ($addr) {
+ push(@parts, $addr);
+ $used{'daddr'} = 1;
+ }
+ }
+ next;
+ }
+ if ($type eq 'l4proto') {
+ if (!$used{'l4proto'}) {
+ my $lp = format_l4proto_expr($rule);
+ if ($lp) {
+ push(@parts, $lp);
+ $used{'l4proto'} = 1;
+ }
+ }
+ next;
+ }
+ if ($type eq 'sport') {
+ if (!$used{'sport'}) {
+ my $sp = format_port_expr('sport', $rule);
+ if ($sp) {
+ push(@parts, $sp);
+ $used{'sport'} = 1;
+ }
+ }
+ next;
+ }
+ if ($type eq 'dport') {
+ if (!$used{'dport'} && $rule->{'proto'} && $rule->{'dport'}) {
+ my $dp = format_port_expr('dport', $rule);
+ if ($dp) {
+ push(@parts, $dp);
+ $used{'dport'} = 1;
+ }
+ }
+ next;
+ }
+ if ($type eq 'icmp') {
+ if (!$used{'icmp'} && $rule->{'icmp_type'}) {
+ push(@parts, "icmp type ".$rule->{'icmp_type'});
+ $used{'icmp'} = 1;
+ }
+ next;
+ }
+ if ($type eq 'icmpv6') {
+ if (!$used{'icmpv6'} && $rule->{'icmpv6_type'}) {
+ push(@parts, "icmpv6 type ".$rule->{'icmpv6_type'});
+ $used{'icmpv6'} = 1;
+ }
+ next;
+ }
+ if ($type eq 'ct_state') {
+ if (!$used{'ct_state'} && $rule->{'ct_state'}) {
+ push(@parts, "ct state ".$rule->{'ct_state'});
+ $used{'ct_state'} = 1;
+ }
+ next;
+ }
+ if ($type eq 'tcp_flags') {
+ if (!$used{'tcp_flags'}) {
+ my $tf = format_tcp_flags_expr($rule);
+ if ($tf) {
+ push(@parts, $tf);
+ $used{'tcp_flags'} = 1;
+ }
+ }
+ next;
+ }
+ if ($type eq 'limit') {
+ if (!$used{'limit'}) {
+ my $lim = format_limit_expr($rule);
+ if ($lim) {
+ push(@parts, $lim);
+ $used{'limit'} = 1;
+ }
+ }
+ next;
+ }
+ if ($type eq 'log') {
+ if (!$used{'log'}) {
+ my $lg = format_log_expr($rule);
+ if ($lg) {
+ push(@parts, $lg);
+ $used{'log'} = 1;
+ }
+ }
+ next;
+ }
+ if ($type eq 'counter') {
+ if (!$used{'counter'} && $rule->{'counter'}) {
+ push(@parts, "counter");
+ $used{'counter'} = 1;
+ }
+ next;
+ }
+ if ($type eq 'jump') {
+ if (!$used{'jump'} && $rule->{'jump'}) {
+ push(@parts, "jump ".$rule->{'jump'});
+ $used{'jump'} = 1;
+ }
+ next;
+ }
+ if ($type eq 'goto') {
+ if (!$used{'goto'} && $rule->{'goto'}) {
+ push(@parts, "goto ".$rule->{'goto'});
+ $used{'goto'} = 1;
+ }
+ next;
+ }
+ push(@parts, $e->{'text'}) if ($e->{'text'});
+ }
+}
+if (!$used{'iif'} && defined($rule->{'iif'}) && $rule->{'iif'} ne '') {
+ my $iftype = $rule->{'iif_type'} || 'iif';
+ my $ival = escape_nft_string($rule->{'iif'});
+ push(@parts, $iftype." \"".$ival."\"");
+}
+if (!$used{'oif'} && defined($rule->{'oif'}) && $rule->{'oif'} ne '') {
+ my $oftype = $rule->{'oif_type'} || 'oif';
+ my $oval = escape_nft_string($rule->{'oif'});
+ push(@parts, $oftype." \"".$oval."\"");
+}
+if (!$used{'saddr'}) {
+ my $addr = format_addr_expr('saddr', $rule);
+ push(@parts, $addr) if ($addr);
+}
+if (!$used{'daddr'}) {
+ my $addr = format_addr_expr('daddr', $rule);
+ push(@parts, $addr) if ($addr);
+}
+if (!$used{'l4proto'}) {
+ my $lp = format_l4proto_expr($rule);
+ push(@parts, $lp) if ($lp);
+}
+if (!$used{'sport'}) {
+ my $sp = format_port_expr('sport', $rule);
+ push(@parts, $sp) if ($sp);
+}
+if (!$used{'dport'}) {
+ my $dp = format_port_expr('dport', $rule);
+ push(@parts, $dp) if ($dp);
+}
+if (!$used{'icmp'} && $rule->{'icmp_type'}) {
+ push(@parts, "icmp type ".$rule->{'icmp_type'});
+}
+if (!$used{'icmpv6'} && $rule->{'icmpv6_type'}) {
+ push(@parts, "icmpv6 type ".$rule->{'icmpv6_type'});
+}
+if (!$used{'tcp_flags'}) {
+ my $tf = format_tcp_flags_expr($rule);
+ push(@parts, $tf) if ($tf);
+}
+if (!$used{'ct_state'} && $rule->{'ct_state'}) {
+ push(@parts, "ct state ".$rule->{'ct_state'});
+}
+if (!$used{'limit'}) {
+ my $lim = format_limit_expr($rule);
+ push(@parts, $lim) if ($lim);
+}
+if (!$used{'log'}) {
+ my $lg = format_log_expr($rule);
+ push(@parts, $lg) if ($lg);
+}
+if (!$used{'counter'} && $rule->{'counter'}) {
+ push(@parts, "counter");
+}
+if (!$used{'jump'} && $rule->{'jump'}) {
+ push(@parts, "jump ".$rule->{'jump'});
+}
+if (!$used{'goto'} && $rule->{'goto'}) {
+ push(@parts, "goto ".$rule->{'goto'});
+}
+if ($rule->{'action'} && !$rule->{'jump'} && !$rule->{'goto'}) {
+ push(@parts, $rule->{'action'});
+}
+if (defined($rule->{'comment'}) && $rule->{'comment'} ne '') {
+ my $c = escape_nft_string($rule->{'comment'});
+ push(@parts, "comment \"".$c."\"");
+}
+my $text = join(" ", grep { defined($_) && $_ ne '' } @parts);
+$text =~ s/^\s+//;
+$text =~ s/\s+$//;
+return $text;
+}
+
+sub parse_set_elements_string
+{
+my ($text) = @_;
+return [ ] if (!defined($text));
+$text =~ s/^\s+//;
+$text =~ s/\s+$//;
+return [ ] if ($text eq '');
+my @vals = split(/\s*,\s*/, $text);
+@vals = grep { defined($_) && $_ ne '' } @vals;
+return \@vals;
+}
+
+sub parse_set_elements_input
+{
+my ($text) = @_;
+return [ ] if (!defined($text));
+$text =~ s/\r//g;
+$text =~ s/^\s+//;
+$text =~ s/\s+$//;
+return [ ] if ($text eq '');
+$text =~ s/\n/,/g;
+return parse_set_elements_string($text);
+}
+
+sub set_elements_text
+{
+my ($set) = @_;
+return "" if (!$set || ref($set) ne 'HASH');
+return "" if (!$set->{'elements'} || ref($set->{'elements'}) ne 'ARRAY');
+return join("\n", @{$set->{'elements'}});
+}
+
+sub set_elements_summary
+{
+my ($set) = @_;
+return "-" if (!$set || ref($set) ne 'HASH');
+return "-" if (!$set->{'elements'} || ref($set->{'elements'}) ne 'ARRAY');
+my @elems = @{$set->{'elements'}};
+return "-" if (!@elems);
+my $max = 3;
+my $preview = join(", ", @elems[0 .. ($#elems < $max-1 ? $#elems : $max-1)]);
+if (@elems > $max) {
+ $preview .= ", ...";
+}
+return $preview;
+}
+
+sub set_type_kind
+{
+my ($type) = @_;
+return if (!defined($type));
+return 'addr' if ($type =~ /addr$/);
+return 'port' if ($type =~ /(service|port)$/);
+return;
+}
+
+sub set_type_family
+{
+my ($type) = @_;
+return if (!defined($type));
+return 'ip6' if ($type eq 'ipv6_addr');
+return 'ip' if ($type eq 'ipv4_addr');
+return;
+}
+
+sub set_name_from_value
+{
+my ($val) = @_;
+return if (!defined($val));
+return $1 if ($val =~ /^\@(\S+)$/);
+return;
+}
+
+sub rule_uses_set
+{
+my ($rule, $setname) = @_;
+return 0 if (!$rule || !$setname);
+foreach my $k (qw(saddr daddr sport dport)) {
+ return 1 if (defined($rule->{$k}) && $rule->{$k} eq '@'.$setname);
+}
+return 1 if ($rule->{'text'} && $rule->{'text'} =~ /\@\Q$setname\E\b/);
+return 0;
+}
+
+sub count_set_references
+{
+my ($table, $setname) = @_;
+return 0 if (!$table || ref($table) ne 'HASH' || !$setname);
+return 0 if (!$table->{'rules'} || ref($table->{'rules'}) ne 'ARRAY');
+my $count = 0;
+foreach my $r (@{$table->{'rules'}}) {
+ next if (!$r || ref($r) ne 'HASH');
+ $count++ if (rule_uses_set($r, $setname));
+}
+return $count;
+}
+
+
+# dump_nftables_save(@tables)
+# Returns a string representation of the firewall rules
+sub dump_nftables_save
+{
+my (@tables) = @_;
+my $rv;
+foreach my $t (@tables) {
+ if ($t->{'family'}) {
+ $rv .= "table $t->{'family'} $t->{'name'} {\n";
+ } else {
+ $rv .= "table $t->{'name'} {\n";
+ }
+
+ if ($t->{'sets'} && ref($t->{'sets'}) eq 'HASH') {
+ foreach my $s (sort keys %{$t->{'sets'}}) {
+ my $set = $t->{'sets'}->{$s};
+ next if (!$set || ref($set) ne 'HASH');
+ $rv .= "\tset $s {\n";
+ $rv .= "\t\ttype $set->{'type'};\n" if ($set->{'type'});
+ $rv .= "\t\tflags $set->{'flags'};\n" if ($set->{'flags'});
+ if ($set->{'raw_lines'} && ref($set->{'raw_lines'}) eq 'ARRAY') {
+ foreach my $l (@{$set->{'raw_lines'}}) {
+ next if (!defined($l) || $l eq '');
+ $rv .= "\t\t$l\n";
+ }
+ }
+ if ($set->{'elements'} && ref($set->{'elements'}) eq 'ARRAY' &&
+ @{$set->{'elements'}}) {
+ my $el = join(", ", @{$set->{'elements'}});
+ $rv .= "\t\telements = { $el }\n";
+ }
+ $rv .= "\t}\n";
+ }
+ }
+
+ foreach my $c (keys %{$t->{'chains'}}) {
+ my $chain = $t->{'chains'}->{$c};
+ $rv .= "\tchain $c {\n";
+ if ($chain->{'type'}) {
+ $rv .= "\t\ttype $chain->{'type'} hook $chain->{'hook'} priority $chain->{'priority'}; policy $chain->{'policy'};\n";
+ }
+
+ # Add rules for this chain
+ my @rules = sort { $a->{'index'} <=> $b->{'index'} }
+ grep { ref($_) eq 'HASH' && $_->{'chain'} eq $c } @{$t->{'rules'}};
+ foreach my $r (@rules) {
+ $rv .= "\t\t$r->{'text'}\n";
+ }
+ $rv .= "\t}\n";
+ }
+ $rv .= "}\n";
+}
+return $rv;
+}
+
+# save_table(&table)
+# Saves a single table to the save file or applies it
+sub save_table
+{
+my ($table) = @_;
+# Re-read all tables to ensure we have the full picture if we are overwriting the file
+# But here we probably just want to update the specific table in the list of tables we have.
+# Since we usually operate on a list of tables, we might need to pass the full list or
+# re-read the state.
+# For simplicity, we usually load all, modify one, and save all.
+}
+
+# save_configuration(@tables)
+# Writes the configuration to the save file. If direct mode is on, applies it.
+sub save_configuration
+{
+my (@tables) = @_;
+my $out = dump_nftables_save(@tables);
+my $file = $config{'save_file'} || "$module_config_directory/nftables.conf";
+
+# Write to file
+open_tempfile(my $fh, ">$file");
+print_tempfile($fh, $out);
+close_tempfile($fh);
+
+if ($config{'direct'}) {
+ return apply_restore($file);
+}
+return;
+}
+
+# apply_restore([file])
+# Applies the configuration from the save file
+sub apply_restore
+{
+my ($file) = @_;
+$file ||= $config{'save_file'} || "$module_config_directory/nftables.conf";
+my $cmd = $config{'nft_cmd'} || has_command("nft");
+my $out = backquote_logged("$cmd -f $file 2>&1");
+if ($?) {
+ return "$out
";
+}
+return;
+}
+
+# describe_rule(&rule)
+sub describe_rule
+{
+my ($r) = @_;
+my @conds;
+if ($r->{'iif'}) {
+ push(@conds, text('index_rule_iif', html_escape($r->{'iif'})));
+}
+if ($r->{'oif'}) {
+ push(@conds, text('index_rule_oif', html_escape($r->{'oif'})));
+}
+if ($r->{'saddr'}) {
+ push(@conds, text('index_rule_saddr', html_escape($r->{'saddr'})));
+}
+if ($r->{'daddr'}) {
+ push(@conds, text('index_rule_daddr', html_escape($r->{'daddr'})));
+}
+if ($r->{'l4proto'} || ($r->{'proto'} && !$r->{'dport'} && !$r->{'sport'})) {
+ my $p = $r->{'l4proto'} || $r->{'proto'};
+ push(@conds, text('index_rule_proto', html_escape($p)));
+}
+if ($r->{'sport'}) {
+ push(@conds, text('index_rule_sport', html_escape($r->{'sport'})));
+}
+if ($r->{'dport'}) {
+ push(@conds, text('index_rule_dport', html_escape($r->{'dport'})));
+}
+if ($r->{'icmp_type'}) {
+ push(@conds, text('index_rule_icmp', html_escape($r->{'icmp_type'})));
+}
+if ($r->{'icmpv6_type'}) {
+ push(@conds, text('index_rule_icmpv6', html_escape($r->{'icmpv6_type'})));
+}
+if ($r->{'ct_state'}) {
+ push(@conds, text('index_rule_ct', html_escape($r->{'ct_state'})));
+}
+if ($r->{'tcp_flags'}) {
+ my $tf = $r->{'tcp_flags'};
+ if ($r->{'tcp_flags_mask'}) {
+ $tf = $r->{'tcp_flags_mask'}."==".$r->{'tcp_flags'};
+ }
+ push(@conds, text('index_rule_tcpflags', html_escape($tf)));
+}
+if ($r->{'limit_rate'}) {
+ my $lim = $r->{'limit_rate'};
+ if ($r->{'limit_burst'}) {
+ $lim .= " burst ".$r->{'limit_burst'};
+ }
+ push(@conds, text('index_rule_limit', html_escape($lim)));
+}
+if ($r->{'log_prefix'}) {
+ push(@conds, text('index_rule_log_prefix', html_escape($r->{'log_prefix'})));
+}
+if ($r->{'log_level'}) {
+ push(@conds, text('index_rule_log_level', html_escape($r->{'log_level'})));
+}
+if ($r->{'log'} && !$r->{'log_prefix'} && !$r->{'log_level'}) {
+ push(@conds, text('index_rule_log'));
+}
+if ($r->{'counter'}) {
+ push(@conds, text('index_rule_counter'));
+}
+
+my $action_label;
+if ($r->{'jump'}) {
+ $action_label = text('index_rule_jump', html_escape($r->{'jump'}));
+}
+elsif ($r->{'goto'}) {
+ $action_label = text('index_rule_goto', html_escape($r->{'goto'}));
+}
+elsif ($r->{'action'}) {
+ if ($r->{'action'} eq 'return') {
+ $action_label = text('index_return_action');
+ }
+ else {
+ $action_label = text('index_'.lc($r->{'action'}));
+ }
+}
+if ($action_label) {
+ if (@conds) {
+ return text('index_rule_desc_generic', $action_label, join(", ", @conds));
+ }
+ return text('index_rule_desc_action', $action_label);
+}
+return html_escape($r->{'text'});
+}
+
+# interface_choice(name, value, blanktext)
+# Returns HTML for an interface chooser menu
+sub interface_choice
+{
+my ($name, $value, $blanktext) = @_;
+if (foreign_check("net")) {
+ foreign_require("net", "net-lib.pl");
+ return net::interface_choice($name, $value, $blanktext, 0, 1);
+}
+else {
+ return ui_textbox($name, $value, 20);
+}
+}
+
+# get_webmin_port()
+# Returns the configured Webmin port, or 10000 if unknown
+sub get_webmin_port
+{
+my %miniserv;
+if (get_miniserv_config(\%miniserv) && $miniserv{'port'} =~ /^\d+$/) {
+ return $miniserv{'port'};
+}
+return 10000;
+}
+
+1;
diff --git a/nftables/rename_chain.cgi b/nftables/rename_chain.cgi
new file mode 100644
index 000000000..4c82e21c3
--- /dev/null
+++ b/nftables/rename_chain.cgi
@@ -0,0 +1,33 @@
+#!/usr/bin/perl
+# rename_chain.cgi
+# Rename an existing chain
+
+require './nftables-lib.pl'; ## no critic
+use strict;
+use warnings;
+our (%in, %text);
+ReadParse();
+
+my @tables = get_nftables_save();
+my $table = $tables[$in{'table'}];
+$table || error($text{'chain_notable'});
+
+my $chain = $table->{'chains'}->{$in{'chain'}};
+$chain || error($text{'chain_nochain'});
+
+ui_print_header(undef, $text{'rename_chain_title'}, "", "intro", 1, 1);
+print ui_form_start("save_chain.cgi");
+print ui_hidden("table", $in{'table'});
+print ui_hidden("rename", 1);
+print ui_hidden("chain_old", $in{'chain'});
+
+print ui_table_start($text{'rename_chain_header'}, "width=100%", 2);
+print ui_table_row($text{'rename_chain_old'},
+ "".html_escape($in{'chain'})."");
+print ui_table_row(hlink($text{'rename_chain_new'}, "chain_name"),
+ ui_textbox("chain_name", $in{'chain'}, 20));
+print ui_table_end();
+
+print ui_form_end([ [ undef, $text{'rename_chain_ok'} ] ]);
+ui_print_footer("index.cgi?table=$in{'table'}", $text{'index_return'});
+
diff --git a/nftables/save_chain.cgi b/nftables/save_chain.cgi
new file mode 100644
index 000000000..d5808f074
--- /dev/null
+++ b/nftables/save_chain.cgi
@@ -0,0 +1,99 @@
+#!/usr/bin/perl
+# save_chain.cgi
+# Save a new or existing chain
+
+require './nftables-lib.pl'; ## no critic
+use strict;
+use warnings;
+our (%in, %text);
+ReadParse();
+error_setup($text{'chain_err'});
+
+my @tables = get_nftables_save();
+my $table = $tables[$in{'table'}];
+$table || error($text{'chain_notable'});
+
+my $is_new = $in{'new'} ? 1 : 0;
+my $is_rename = $in{'rename'} ? 1 : 0;
+my $name = $in{'chain_name'};
+$name =~ s/^\s+// if (defined($name));
+$name =~ s/\s+$// if (defined($name));
+$name =~ /^\w[\w-]*$/ || error($text{'chain_ename'});
+
+my $old = $is_rename ? $in{'chain_old'} : $name;
+$old =~ s/^\s+// if (defined($old));
+$old =~ s/\s+$// if (defined($old));
+
+if ($is_new) {
+ $table->{'chains'}->{$name} && error($text{'chain_edup'});
+} elsif ($is_rename) {
+ $table->{'chains'}->{$old} || error($text{'chain_nochain'});
+ if ($name ne $old && $table->{'chains'}->{$name}) {
+ error($text{'chain_edup'});
+ }
+} else {
+ $table->{'chains'}->{$name} || error($text{'chain_nochain'});
+}
+
+if ($is_rename) {
+ if ($name eq $old) {
+ redirect("index.cgi?table=$in{'table'}");
+ }
+ if ($name ne $old) {
+ $table->{'chains'}->{$name} = $table->{'chains'}->{$old};
+ delete($table->{'chains'}->{$old});
+
+ foreach my $r (@{$table->{'rules'}}) {
+ $r->{'chain'} = $name if ($r->{'chain'} && $r->{'chain'} eq $old);
+ my $changed = 0;
+ if ($r->{'jump'} && $r->{'jump'} eq $old) {
+ $r->{'jump'} = $name;
+ $changed = 1;
+ }
+ if ($r->{'goto'} && $r->{'goto'} eq $old) {
+ $r->{'goto'} = $name;
+ $changed = 1;
+ }
+ $r->{'text'} = format_rule_text($r) if ($changed);
+ }
+ }
+
+ my $err = save_configuration(@tables);
+ error(text('rename_chain_failed', $err)) if ($err);
+ webmin_log("rename", "chain", $old,
+ { 'new' => $name,
+ 'table' => $table->{'name'},
+ 'family' => $table->{'family'} });
+ redirect("index.cgi?table=$in{'table'}");
+}
+
+my $type = $in{'chain_type'};
+my $hook = $in{'chain_hook'};
+my $priority = $in{'chain_priority'};
+my $policy = $in{'chain_policy'};
+
+for my $v (\$type, \$hook, \$priority, \$policy) {
+ $$v =~ s/^\s+// if (defined($$v));
+ $$v =~ s/\s+$// if (defined($$v));
+}
+$type = undef if (!defined($type) || $type eq '');
+$hook = undef if (!defined($hook) || $hook eq '');
+$priority = undef if (!defined($priority) || $priority eq '');
+$policy = undef if (!defined($policy) || $policy eq '');
+
+validate_chain_base($type, $hook, $priority, $policy) ||
+ error($text{'chain_ebase'});
+
+my $chain = $table->{'chains'}->{$name} || { };
+$chain->{'type'} = $type;
+$chain->{'hook'} = $hook;
+$chain->{'priority'} = $priority;
+$chain->{'policy'} = $policy;
+$table->{'chains'}->{$name} = $chain;
+
+my $err = save_configuration(@tables);
+error(text('chain_failed', $err)) if ($err);
+
+webmin_log($is_new ? "create" : "modify", "chain", $name,
+ { 'table' => $table->{'name'}, 'family' => $table->{'family'} });
+redirect("index.cgi?table=$in{'table'}");
diff --git a/nftables/save_rule.cgi b/nftables/save_rule.cgi
new file mode 100755
index 000000000..04d083233
--- /dev/null
+++ b/nftables/save_rule.cgi
@@ -0,0 +1,180 @@
+#!/usr/bin/perl
+# save_rule.cgi
+# Save a new or existing rule
+
+require './nftables-lib.pl'; ## no critic
+use strict;
+use warnings;
+our (%in, %text, %config);
+ReadParse();
+error_setup($text{'save_err'});
+my @tables = get_nftables_save();
+my $table = $tables[$in{'table'}];
+
+foreach my $sfield (qw(saddr_set daddr_set sport_set dport_set)) {
+ if ($in{$sfield}) {
+ $table->{'sets'}->{$in{$sfield}} ||
+ error(text('save_set_missing', $in{$sfield}));
+ }
+}
+
+sub join_multi_value
+{
+ my ($v) = @_;
+ return if (!defined($v) || $v eq '');
+ my @vals = split(/\0/, $v);
+ @vals = grep { defined($_) && $_ ne '' } @vals;
+ return if (!@vals);
+ return join(",", @vals);
+}
+
+if ($in{'delete'}) {
+ # Delete the rule
+ my $rule = $table->{'rules'}->[$in{'idx'}];
+ splice(@{$table->{'rules'}}, $in{'idx'}, 1);
+ webmin_log("delete", "rule", $rule ? $rule->{'text'} : undef);
+} else {
+ my $rule = {};
+ if ($in{'new'}) {
+ $rule->{'chain'} = $in{'chain'};
+ $rule->{'index'} = scalar(@{$table->{'rules'}});
+ } else {
+ $rule = $table->{'rules'}->[$in{'idx'}];
+ }
+
+ if ($in{'edit_direct'}) {
+ my $raw = $in{'raw_rule'};
+ $raw =~ s/\r//g if (defined($raw));
+ $raw =~ s/^\s+// if (defined($raw));
+ $raw =~ s/\s+$// if (defined($raw));
+ error($text{'save_raw_empty'}) if (!defined($raw) || $raw eq '');
+ error($text{'save_raw_multiline'}) if ($raw =~ /[\r\n]/);
+ $rule->{'text'} = $raw;
+ }
+ else {
+ $rule->{'comment'} = $in{'comment'};
+ my $action = $in{'action'} || 'accept';
+ $rule->{'action'} = undef;
+ $rule->{'jump'} = undef;
+ $rule->{'goto'} = undef;
+ if ($action eq 'jump') {
+ $rule->{'jump'} = $in{'jump'};
+ }
+ elsif ($action eq 'goto') {
+ $rule->{'goto'} = $in{'goto'};
+ }
+ else {
+ $rule->{'action'} = $action;
+ }
+
+ my $saddr = $in{'saddr'};
+ my $daddr = $in{'daddr'};
+ $saddr = '@'.$in{'saddr_set'} if ($in{'saddr_set'});
+ $daddr = '@'.$in{'daddr_set'} if ($in{'daddr_set'});
+ $rule->{'saddr'} = (defined($saddr) && $saddr ne '') ? $saddr : undef;
+ $rule->{'daddr'} = (defined($daddr) && $daddr ne '') ? $daddr : undef;
+ $rule->{'saddr_family'} = $rule->{'saddr'} ? guess_addr_family($rule->{'saddr'}) : undef;
+ $rule->{'daddr_family'} = $rule->{'daddr'} ? guess_addr_family($rule->{'daddr'}) : undef;
+ if ($rule->{'saddr'} && $rule->{'saddr'} =~ /^\@(\S+)/) {
+ my $fam = set_type_family($table->{'sets'}->{$1}->{'type'});
+ $rule->{'saddr_family'} = $fam if ($fam);
+ }
+ if ($rule->{'daddr'} && $rule->{'daddr'} =~ /^\@(\S+)/) {
+ my $fam = set_type_family($table->{'sets'}->{$1}->{'type'});
+ $rule->{'daddr_family'} = $fam if ($fam);
+ }
+
+ my $proto = $in{'proto'};
+ $proto = undef if (defined($proto) && $proto eq '');
+ my $sport = $in{'sport'};
+ my $dport = $in{'dport'};
+ $sport = '@'.$in{'sport_set'} if ($in{'sport_set'});
+ $dport = '@'.$in{'dport_set'} if ($in{'dport_set'});
+ $rule->{'sport'} = (defined($sport) && $sport ne '') ? $sport : undef;
+ $rule->{'dport'} = (defined($dport) && $dport ne '') ? $dport : undef;
+ if (!$proto && ($rule->{'sport'} || $rule->{'dport'})) {
+ $proto = 'tcp';
+ }
+ $rule->{'l4proto'} = undef;
+ $rule->{'l4proto_family'} = undef;
+ $rule->{'proto'} = undef;
+ $rule->{'sport_proto'} = undef;
+ if ($proto && ($proto eq 'tcp' || $proto eq 'udp')) {
+ $rule->{'proto'} = $proto if ($rule->{'sport'} || $rule->{'dport'});
+ $rule->{'sport_proto'} = $proto if ($rule->{'sport'});
+ }
+ elsif ($proto && $proto !~ /^(tcp|udp)$/) {
+ $rule->{'sport'} = undef;
+ $rule->{'dport'} = undef;
+ }
+ if ($proto) {
+ if (($proto eq 'tcp' || $proto eq 'udp') && ($rule->{'sport'} || $rule->{'dport'})) {
+ # L4 proto implied by port match
+ }
+ else {
+ $rule->{'l4proto'} = $proto;
+ $rule->{'l4proto_family'} = 'meta';
+ }
+ }
+
+ my $icmp_type = $in{'icmp_type'};
+ $rule->{'icmp_type'} = undef;
+ $rule->{'icmpv6_type'} = undef;
+ if ($proto && $proto eq 'icmp') {
+ $rule->{'icmp_type'} = $icmp_type if (defined($icmp_type) && $icmp_type ne '');
+ }
+ elsif ($proto && $proto eq 'icmpv6') {
+ $rule->{'icmpv6_type'} = $icmp_type if (defined($icmp_type) && $icmp_type ne '');
+ }
+ elsif (!$proto && defined($icmp_type) && $icmp_type ne '') {
+ $rule->{'icmp_type'} = $icmp_type;
+ $rule->{'l4proto'} = 'icmp';
+ $rule->{'l4proto_family'} = 'meta';
+ }
+
+ my $ct_state = join_multi_value($in{'ct_state'});
+ my $tcp_flags = join_multi_value($in{'tcp_flags'});
+ $rule->{'ct_state'} = defined($ct_state) ? $ct_state : undef;
+ $rule->{'tcp_flags'} = defined($tcp_flags) ? $tcp_flags : undef;
+ $rule->{'tcp_flags_mask'} = (defined($in{'tcp_flags_mask'}) && $in{'tcp_flags_mask'} ne '') ? $in{'tcp_flags_mask'} : undef;
+ $rule->{'limit_rate'} = (defined($in{'limit_rate'}) && $in{'limit_rate'} ne '') ? $in{'limit_rate'} : undef;
+ $rule->{'limit_burst'} = (defined($in{'limit_burst'}) && $in{'limit_burst'} ne '') ? $in{'limit_burst'} : undef;
+
+ my $log_enabled = $in{'log'} || $in{'log_prefix'} || $in{'log_level'};
+ $rule->{'log'} = $log_enabled ? 1 : undef;
+ $rule->{'log_prefix'} = $log_enabled && defined($in{'log_prefix'}) && $in{'log_prefix'} ne '' ? $in{'log_prefix'} : undef;
+ $rule->{'log_level'} = $log_enabled && defined($in{'log_level'}) && $in{'log_level'} ne '' ? $in{'log_level'} : undef;
+ $rule->{'counter'} = $in{'counter'} ? 1 : undef;
+
+ my $iif = $in{'iif'};
+ my $oif = $in{'oif'};
+ $iif = $in{'iif_other'} if (defined($iif) && $iif eq 'other');
+ $oif = $in{'oif_other'} if (defined($oif) && $oif eq 'other');
+ $rule->{'iif'} = (defined($iif) && $iif ne '') ? $iif : undef;
+ $rule->{'oif'} = (defined($oif) && $oif ne '') ? $oif : undef;
+
+ $rule->{'text'} = format_rule_text($rule);
+ }
+
+ if ($in{'new'}) {
+ push(@{$table->{'rules'}}, $rule);
+ }
+
+ if ($in{'edit_direct'}) {
+ my $cmd = $config{'nft_cmd'} || has_command("nft");
+ if ($cmd) {
+ my $tmp = tempname();
+ open_tempfile(my $fh, ">$tmp");
+ print_tempfile($fh, dump_nftables_save(@tables));
+ close_tempfile($fh);
+ my $out = backquote_logged("$cmd -c -f $tmp 2>&1");
+ unlink_file($tmp);
+ error(text('save_invalid_rule', "$out
")) if ($?);
+ }
+ }
+
+ webmin_log("save", $in{'new'} ? "create" : "modify", $rule->{'text'});
+}
+my $err = save_configuration(@tables);
+error(text('save_failed', $err)) if ($err);
+redirect("index.cgi?table=$in{'table'}");
diff --git a/nftables/save_set.cgi b/nftables/save_set.cgi
new file mode 100755
index 000000000..f12556229
--- /dev/null
+++ b/nftables/save_set.cgi
@@ -0,0 +1,62 @@
+#!/usr/bin/perl
+# save_set.cgi
+# Save a new or existing set
+
+require './nftables-lib.pl'; ## no critic
+use strict;
+use warnings;
+our (%in, %text);
+ReadParse();
+error_setup($text{'set_err'});
+
+my @tables = get_nftables_save();
+my $table = $tables[$in{'table'}];
+$table || error($text{'set_notable'});
+
+my $is_new = $in{'new'} ? 1 : 0;
+my $name = $in{'set_name'};
+$name =~ /^\w[\w-]*$/ || error($text{'set_ename'});
+
+if ($is_new && $table->{'sets'}->{$name}) {
+ error($text{'set_edup'});
+}
+
+my $type = $in{'set_type'};
+$type = undef if (defined($type) && $type =~ /^\s*$/);
+error($text{'set_etype'}) if (!$type);
+
+my $flags = $in{'set_flags'};
+if (defined($flags) && $flags ne '') {
+ my @vals = split(/\0/, $flags);
+ @vals = grep { defined($_) && $_ ne '' } @vals;
+ $flags = @vals ? join(" ", @vals) : undef;
+}
+$flags = undef if (defined($flags) && $flags =~ /^\s*$/);
+
+my $elements = parse_set_elements_input($in{'set_elements'});
+
+my $set;
+if ($is_new) {
+ $set = { 'name' => $name, 'raw_lines' => [ ] };
+}
+else {
+ my $orig = $in{'set'};
+ $set = $table->{'sets'}->{$orig};
+ $set || error($text{'set_noset'});
+ $name = $orig;
+}
+
+$set->{'name'} = $name;
+$set->{'type'} = $type;
+$set->{'flags'} = $flags;
+$set->{'elements'} = $elements;
+$set->{'raw_lines'} ||= [ ];
+
+$table->{'sets'}->{$name} = $set;
+
+my $err = save_configuration(@tables);
+error(text('set_failed', $err)) if ($err);
+
+webmin_log($is_new ? "create" : "save", "set", $name,
+ { 'table' => $table->{'name'}, 'family' => $table->{'family'} });
+redirect("index.cgi?table=$in{'table'}");
diff --git a/nftables/setup.cgi b/nftables/setup.cgi
new file mode 100644
index 000000000..206a826b1
--- /dev/null
+++ b/nftables/setup.cgi
@@ -0,0 +1,197 @@
+#!/usr/bin/perl
+# setup.cgi
+# Create a default nftables ruleset
+
+require './nftables-lib.pl'; ## no critic
+use strict;
+use warnings;
+our (%in, %text, %config);
+ReadParse();
+if ($in{'action'} eq 'create') {
+ my $type = $in{'type'};
+ my @tables;
+ if ($type eq 'allow_all') {
+ @tables = create_allow_all_ruleset();
+ }
+ elsif ($type eq 'deny_incoming') {
+ @tables = create_deny_incoming_ruleset();
+ }
+ elsif ($type eq 'deny_all') {
+ @tables = create_deny_all_ruleset();
+ }
+ else {
+ error($text{'setup_invalid_type'});
+ }
+
+ my $error = save_configuration(@tables);
+ if ($error) {
+ error(text('setup_failed', $error));
+ }
+ $error = apply_restore();
+ if ($error) {
+ error(text('setup_failed', $error));
+ }
+ webmin_log("setup", "create", $type);
+ redirect("index.cgi");
+}
+
+ui_print_header(undef, $text{'setup_title'}, "", "intro", 1, 1);
+
+print "$text{'setup_header'}
";
+my $webmin_port = get_webmin_port();
+print "
" ],
+ [ 'deny_incoming', $text{'setup_deny_incoming'} . "
" ],
+ [ 'deny_all', $text{'setup_deny_all'} ],
+);
+print ui_radio("type", "allow_all", \@type_opts);
+
+print ui_form_end([ [ undef, $text{'setup_create'} ] ]);
+
+sub create_allow_all_ruleset
+{
+ my @tables;
+ my $table = {
+ 'name' => 'inet_filter',
+ 'family' => 'inet',
+ 'rules' => [],
+ 'sets' => {},
+ 'chains' => {
+ 'input' => {
+ 'type' => 'filter',
+ 'hook' => 'input',
+ 'priority' => 0,
+ 'policy' => 'accept'
+ },
+ 'forward' => {
+ 'type' => 'filter',
+ 'hook' => 'forward',
+ 'priority' => 0,
+ 'policy' => 'accept'
+ },
+ 'output' => {
+ 'type' => 'filter',
+ 'hook' => 'output',
+ 'priority' => 0,
+ 'policy' => 'accept'
+ }
+ }
+ };
+ push(@tables, $table);
+ return @tables;
+}
+
+sub create_deny_incoming_ruleset
+{
+ my @tables;
+ my $webmin_port = get_webmin_port();
+ my $table = {
+ 'name' => 'inet_filter',
+ 'family' => 'inet',
+ 'rules' => [
+ {
+ 'text' => 'ct state established,related accept',
+ 'chain' => 'input'
+ },
+ {
+ 'text' => 'iif "lo" accept',
+ 'chain' => 'input'
+ },
+ {
+ 'text' => 'tcp dport 22 accept',
+ 'chain' => 'input'
+ },
+ {
+ 'text' => "tcp dport $webmin_port accept",
+ 'chain' => 'input'
+ }
+ ],
+ 'sets' => {},
+ 'chains' => {
+ 'input' => {
+ 'type' => 'filter',
+ 'hook' => 'input',
+ 'priority' => 0,
+ 'policy' => 'drop'
+ },
+ 'forward' => {
+ 'type' => 'filter',
+ 'hook' => 'forward',
+ 'priority' => 0,
+ 'policy' => 'accept'
+ },
+ 'output' => {
+ 'type' => 'filter',
+ 'hook' => 'output',
+ 'priority' => 0,
+ 'policy' => 'accept'
+ }
+ }
+ };
+ push(@tables, $table);
+ return @tables;
+}
+
+sub create_deny_all_ruleset
+{
+ my @tables;
+ my $webmin_port = get_webmin_port();
+ my $table = {
+ 'name' => 'inet_filter',
+ 'family' => 'inet',
+ 'rules' => [],
+ 'sets' => {},
+ 'chains' => {
+ 'input' => {
+ 'type' => 'filter',
+ 'hook' => 'input',
+ 'priority' => 0,
+ 'policy' => 'drop'
+ },
+ 'forward' => {
+ 'type' => 'filter',
+ 'hook' => 'forward',
+ 'priority' => 0,
+ 'policy' => 'drop'
+ },
+ 'output' => {
+ 'type' => 'filter',
+ 'hook' => 'output',
+ 'priority' => 0,
+ 'policy' => 'drop'
+ }
+ }
+ };
+ $table->{'rules'} = [
+ {
+ 'text' => 'ct state established,related accept',
+ 'chain' => 'output'
+ },
+ {
+ 'text' => 'iif "lo" accept',
+ 'chain' => 'input'
+ },
+ {
+ 'text' => 'oif "lo" accept',
+ 'chain' => 'output'
+ },
+ {
+ 'text' => 'tcp dport 22 accept',
+ 'chain' => 'input'
+ },
+ {
+ 'text' => "tcp dport $webmin_port accept",
+ 'chain' => 'input'
+ }
+ ];
+ push(@tables, $table);
+ return @tables;
+}
+
+ui_print_footer("/", $text{'index'});
diff --git a/nftables/t/perlcritic.t b/nftables/t/perlcritic.t
new file mode 100644
index 000000000..b1b91c3af
--- /dev/null
+++ b/nftables/t/perlcritic.t
@@ -0,0 +1,61 @@
+#!/usr/bin/perl
+use strict;
+use warnings;
+use Test::More;
+
+BEGIN {
+ eval { require Perl::Critic; 1 }
+ or plan skip_all => 'Perl::Critic not installed';
+}
+
+use File::Find;
+
+sub script_dir
+{
+ my $path = $0;
+ if ($path =~ m{^/}) {
+ $path =~ s{/[^/]+$}{};
+ return $path;
+ }
+ my $cwd = `pwd`;
+ chomp($cwd);
+ if ($path =~ m{/}) {
+ $path =~ s{/[^/]+$}{};
+ return $cwd.'/'.$path;
+ }
+ return $cwd;
+}
+
+my $bindir = script_dir();
+my $module_dir = "$bindir/..";
+chdir($module_dir) or die "chdir: $!";
+
+my @files;
+find(
+ sub {
+ return if -d;
+ return unless /\.(pl|cgi)\z/;
+ push(@files, $File::Find::name);
+ },
+ '.'
+);
+
+@files = sort @files;
+if (!@files) {
+ plan skip_all => 'no perl files to check';
+}
+
+my $critic = Perl::Critic->new(
+ -severity => 5,
+ -profile => '',
+);
+
+foreach my $file (@files) {
+ my @violations = $critic->critique($file);
+ is(scalar @violations, 0, "$file perlcritic");
+ if (@violations) {
+ diag join("", @violations);
+ }
+}
+
+done_testing();
diff --git a/nftables/t/rulesets/basic.nft b/nftables/t/rulesets/basic.nft
new file mode 100644
index 000000000..2d43483b6
--- /dev/null
+++ b/nftables/t/rulesets/basic.nft
@@ -0,0 +1,8 @@
+table inet filter {
+ chain input {
+ type filter hook input priority 0; policy drop;
+ iif "lo" accept
+ ip saddr 192.168.1.0/24 tcp dport 22 accept comment "ssh"
+ ct state established,related accept
+ }
+}
diff --git a/nftables/t/rulesets/sets.nft b/nftables/t/rulesets/sets.nft
new file mode 100644
index 000000000..16c6c0572
--- /dev/null
+++ b/nftables/t/rulesets/sets.nft
@@ -0,0 +1,18 @@
+table inet filter {
+ set trusted_v4 {
+ type ipv4_addr;
+ flags interval;
+ elements = { 192.168.1.0/24, 10.0.0.1 }
+ }
+ set web_ports {
+ type inet_service;
+ elements = {
+ 80,
+ 443
+ }
+ }
+ chain input {
+ type filter hook input priority 0; policy drop;
+ ip saddr @trusted_v4 tcp dport @web_ports accept
+ }
+}
diff --git a/nftables/t/run-tests.t b/nftables/t/run-tests.t
new file mode 100755
index 000000000..9b5c612dd
--- /dev/null
+++ b/nftables/t/run-tests.t
@@ -0,0 +1,185 @@
+#!/usr/bin/perl
+use strict;
+use warnings;
+use Test::More;
+use File::Temp qw(tempdir);
+
+sub script_dir
+{
+ my $path = $0;
+ if ($path =~ m{^/}) {
+ $path =~ s{/[^/]+$}{};
+ return $path;
+ }
+ my $cwd = `pwd`;
+ chomp($cwd);
+ if ($path =~ m{/}) {
+ $path =~ s{/[^/]+$}{};
+ return $cwd.'/'.$path;
+ }
+ return $cwd;
+}
+
+my $bindir = script_dir();
+
+my $confdir = tempdir(CLEANUP => 1);
+my $vardir = tempdir(CLEANUP => 1);
+open(my $cfh, ">", "$confdir/config") or die "config: $!";
+print $cfh "os_type=linux\nos_version=0\n";
+close($cfh);
+open(my $vfh, ">", "$confdir/var-path") or die "var-path: $!";
+print $vfh "$vardir\n";
+close($vfh);
+$ENV{'WEBMIN_CONFIG'} = $confdir;
+$ENV{'WEBMIN_VAR'} = $vardir;
+$ENV{'FOREIGN_MODULE_NAME'} = 'nftables';
+$ENV{'FOREIGN_ROOT_DIRECTORY'} = '/usr/libexec/webmin';
+
+chdir("$bindir/..") or die "chdir: $!";
+
+require "$bindir/../nftables-lib.pl";
+
+sub check_fields
+{
+ my ($name, $got, $expect) = @_;
+ foreach my $k (sort keys %$expect) {
+ is($got->{$k}, $expect->{$k}, "$name $k");
+ }
+}
+
+my @cases = (
+ {
+ name => 'tcp dport accept',
+ line => 'tcp dport 22 accept',
+ expect => { proto => 'tcp', dport => '22', action => 'accept' },
+ },
+ {
+ name => 'iif oif drop',
+ line => 'iif "eth0" oif "eth1" drop',
+ expect => { iif => 'eth0', oif => 'eth1', action => 'drop' },
+ },
+ {
+ name => 'comment with quotes',
+ line => 'tcp dport 80 accept comment "a \\"quote\\""',
+ expect => { proto => 'tcp', dport => '80', action => 'accept', comment => 'a "quote"' },
+ },
+ {
+ name => 'ct state',
+ line => 'ct state established,related accept',
+ expect => { ct_state => 'established,related', action => 'accept' },
+ },
+ {
+ name => 'icmp type',
+ line => 'icmp type echo-request accept',
+ expect => { icmp_type => 'echo-request', action => 'accept' },
+ },
+ {
+ name => 'limit log counter',
+ line => 'tcp dport 22 limit rate 10/second burst 20 packets log prefix "ssh" level info counter accept',
+ expect => {
+ proto => 'tcp',
+ dport => '22',
+ limit_rate => '10/second',
+ limit_burst => '20',
+ log_prefix => 'ssh',
+ log_level => 'info',
+ counter => 1,
+ action => 'accept',
+ },
+ },
+ {
+ name => 'unknown tokens preserved',
+ line => 'tcp dport 22 meta skgid 1000 accept',
+ expect => { proto => 'tcp', dport => '22', action => 'accept' },
+ preserve => 'meta skgid 1000',
+ },
+);
+
+foreach my $c (@cases) {
+ my $r = parse_rule_text($c->{line});
+ ok($r && ref($r) eq 'HASH', "$c->{name} parse hash");
+ check_fields($c->{name}, $r, $c->{expect});
+
+ my $out = format_rule_text($r);
+ ok($out =~ /\S/, "$c->{name} formatted non-empty");
+ if ($c->{preserve}) {
+ like($out, qr/\Q$c->{preserve}\E/, "$c->{name} preserves unknowns");
+ }
+
+ my $r2 = parse_rule_text($out);
+ check_fields($c->{name}.' roundtrip', $r2, $c->{expect});
+}
+
+my $ruleset = "$bindir/rulesets/basic.nft";
+my @tables = get_nftables_save($ruleset);
+ok(@tables == 1, 'ruleset table count');
+my $t = $tables[0];
+is($t->{family}, 'inet', 'ruleset family');
+is($t->{name}, 'filter', 'ruleset name');
+my $chain = $t->{chains}->{input};
+ok($chain, 'input chain present');
+is($chain->{type}, 'filter', 'chain type');
+is($chain->{hook}, 'input', 'chain hook');
+is($chain->{priority}, '0', 'chain priority');
+is($chain->{policy}, 'drop', 'chain policy');
+
+my @rules = @{$t->{rules}};
+check_fields('ruleset r1', $rules[0], { iif => 'lo', action => 'accept' });
+check_fields('ruleset r2', $rules[1], { saddr => '192.168.1.0/24', proto => 'tcp', dport => '22', action => 'accept', comment => 'ssh' });
+check_fields('ruleset r3', $rules[2], { ct_state => 'established,related', action => 'accept' });
+
+my $ruleset_sets = "$bindir/rulesets/sets.nft";
+my @tables_sets = get_nftables_save($ruleset_sets);
+ok(@tables_sets == 1, 'sets ruleset table count');
+my $ts = $tables_sets[0];
+ok($ts->{sets} && $ts->{sets}->{trusted_v4}, 'trusted_v4 set present');
+is($ts->{sets}->{trusted_v4}->{type}, 'ipv4_addr', 'trusted_v4 type');
+is($ts->{sets}->{trusted_v4}->{flags}, 'interval', 'trusted_v4 flags');
+is_deeply($ts->{sets}->{trusted_v4}->{elements},
+ [ '192.168.1.0/24', '10.0.0.1' ],
+ 'trusted_v4 elements');
+ok($ts->{sets}->{web_ports}, 'web_ports set present');
+is($ts->{sets}->{web_ports}->{type}, 'inet_service', 'web_ports type');
+is_deeply($ts->{sets}->{web_ports}->{elements},
+ [ '80', '443' ],
+ 'web_ports elements');
+
+my $rset = $ts->{rules}->[0];
+check_fields('set rule', $rset,
+ { saddr => '@trusted_v4', proto => 'tcp', dport => '@web_ports', action => 'accept' });
+my $rset_out = format_rule_text($rset);
+like($rset_out, qr/\@trusted_v4/, 'set rule format preserves address set');
+like($rset_out, qr/\@web_ports/, 'set rule format preserves port set');
+
+ok(validate_chain_base('filter', 'input', '0', 'accept'),
+ 'chain base allows zero priority');
+ok(!validate_chain_base('filter', 'input', undef, 'accept'),
+ 'chain base missing priority invalid');
+ok(validate_chain_base(undef, undef, undef, undef),
+ 'chain base none set valid');
+
+my $table_move = {
+ rules => [
+ { chain => 'input', index => 0, text => 'r0' },
+ { chain => 'input', index => 1, text => 'r1' },
+ { chain => 'forward', index => 2, text => 'r2' },
+ { chain => 'input', index => 3, text => 'r3' },
+ ],
+};
+ok(move_rule_in_chain($table_move, 'input', 1, 'down'),
+ 'move rule down returns true');
+is($table_move->{rules}->[1]->{text}, 'r3', 'rule moved down in array');
+is($table_move->{rules}->[3]->{text}, 'r1', 'rule swapped down in array');
+is($table_move->{rules}->[1]->{index}, 1, 'moved rule index updated');
+is($table_move->{rules}->[3]->{index}, 3, 'swapped rule index updated');
+
+my $table_move2 = {
+ rules => [
+ { chain => 'input', index => 0, text => 'r0' },
+ { chain => 'input', index => 1, text => 'r1' },
+ ],
+};
+is(move_rule_in_chain($table_move2, 'input', 0, 'up'), 0,
+ 'top rule cannot move up');
+
+done_testing();
diff --git a/useradmin/md5-lib.pl b/useradmin/md5-lib.pl
index dab213764..f2eda313b 100755
--- a/useradmin/md5-lib.pl
+++ b/useradmin/md5-lib.pl
@@ -209,7 +209,8 @@ return $newhash eq $hash;
# Returns undef if SHA512 hashing is supported, or an error message if not
sub check_sha512
{
-return &unix_crypt_supports_sha512() ? undef : 'Crypt::SHA';
+return &unix_crypt_supports_sha512() ? undef :
+ 'SHA512 is not supported by the system crypt() function';
}
# encrypt_sha512(password, [salt])
@@ -234,7 +235,8 @@ return $newhash eq $hash;
# Returns undef if yescrypt hashing is supported, or an error message if not
sub check_yescrypt
{
-return &unix_crypt_supports_yescrypt() ? undef : 'Crypt::NaCl::Sodium';
+return &unix_crypt_supports_yescrypt() ? undef :
+ 'yescrypt is not supported by the system crypt() function';
}
# encrypt_yescrypt(password, [salt])
@@ -328,4 +330,3 @@ return 0;
}
1;
-
diff --git a/vendor_perl/Convert/TNEF.pm b/vendor_perl/Convert/TNEF.pm
new file mode 100644
index 000000000..5a0e36b04
--- /dev/null
+++ b/vendor_perl/Convert/TNEF.pm
@@ -0,0 +1,735 @@
+# Convert::TNEF.pm
+#
+# Copyright (c) 1999 Douglas Wilson
(για αλυσιδωτά πιστοποιητικά)
+ssl_enforce=Επιβολή SSL
ssl_hsts=Επιβολή SSL με κεφαλίδα HSTS
ssl_redirect=Εναλλαγή αιτήσεων SSL σε λειτουργία SSL;
ssl_extracasdef=Ίδια με τις ρυθμίσεις SSL σε παγκόσμιο επίπεδο
@@ -410,7 +410,7 @@ ssl_tabcreate=Πιστοποιητικό αυτοελέγχου
ssl_tabcsr=Αίτημα υπογραφής πιστοποιητικού
ssl_tabupload=Αποστολή πιστοποιητικού
ssl_tabcurrent=Τρέχον πιστοποιητικό
-ssl_tablets=Ας κρυπτογραφήσουμε
+ssl_tablets=Πάροχος SSL
ssl_cheader=Λεπτομέρειες σχετικά με το τρέχον πιστοποιητικό
ssl_typeself=Αυτο-υπογράφηκε
ssl_typereal=Υπογράφηκε από την CA
@@ -422,14 +422,14 @@ ssl_edownload=Αποτυχία εξαγωγής δεδομένων PEM από π
ssl_csralready=Δείτε το πιο πρόσφατο κλειδί και την ΕΚΕ ..
ssl_already1=Προσωρινά δημιουργημένο ιδιωτικό κλειδί :
ssl_already2=Προηγούμενο αίτημα υπογραφής πιστοποιητικού :
-ssl_letsdesc=Το Let's Encrypt είναι μια ελεύθερη, αυτοματοποιημένη και ανοιχτή αρχή πιστοποιητικού που μπορεί να χρησιμοποιηθεί για τη δημιουργία ενός πιστοποιητικού SSL για χρήση από το Webmin.
-ssl_letserr=Δυστυχώς, η κρυπτογράφηση Let's δεν μπορεί να χρησιμοποιηθεί στο σύστημά σας: $1.
-ssl_letserr2=Εναλλακτικά, ελέγξτε τη σελίδα διαμόρφωση μονάδας για να βεβαιωθείτε ότι χρησιμοποιείτε τη σωστή διαδρομή στην εντολή letsencrypt.
-ssl_letsdesc2=Αυτή η σελίδα μπορεί να χρησιμοποιηθεί για να ζητήσει ένα νέο πιστοποιητικό, το οποίο θα αντικαταστήσει τυχόν άλλες που έχουν ρυθμιστεί στο Webmin. Ωστόσο, η υπηρεσία "Ας κρυπτογραφήσουμε" απαιτεί την επικύρωση της ιδιοκτησίας σας στον τομέα των πιστοποιητικών, ελέγχοντας ότι αυτό το σύστημα φιλοξενεί τον ιστότοπο για τον τομέα. Αυτό γίνεται τοποθετώντας ένα μικρό προσωρινό αρχείο στον κατάλογο εγγράφων του ιστότοπου.
+ssl_letsdesc=Αυτή η φόρμα σάς επιτρέπει να ζητήσετε ένα αξιόπιστο πιστοποιητικό SSL για το Webmin από έναν πάροχο συμβατό με ACME, όπως το Let's Encrypt.
+ssl_letserr=Δυστυχώς, αυτό το σύστημα δεν μπορεί να ζητήσει πιστοποιητικά από έναν πάροχο SSL: $1.
+ssl_letserr2=Εναλλακτικά, ελέγξτε τη σελίδα ρύθμισης λειτουργικής μονάδας για να βεβαιωθείτε ότι χρησιμοποιείτε τη σωστή διαδρομή προς την διαμορφωμένη εντολή προγράμματος-πελάτη ACME.
+ssl_letsdesc2=Το νέο πιστοποιητικό θα αντικαταστήσει αυτό που έχει ρυθμιστεί αυτήν τη στιγμή στο Webmin. Πριν από την έκδοσή του, ο πάροχος ACME πρέπει να επαληθεύσει τον έλεγχο κάθε ονόματος κεντρικού υπολογιστή χρησιμοποιώντας είτε ένα προσωρινό αρχείο στον κατάλογο εγγράφων του ιστότοπου είτε μια προσωρινή εγγραφή DNS TXT.
ssl_letsheader=Επιλογές για νέο πιστοποιητικό SSL
ssl_letsdoms=Ονόματα κεντρικών υπολογιστών για πιστοποιητικά
ssl_subset=Παράβλεψη μη επαληθεύσιμων ονομάτων κεντρικού υπολογιστή;
-ssl_letsmode=Ας κρυπτογραφήσουμε τη μέθοδο επικύρωσης
+ssl_letsmode=Μέθοδος επικύρωσης τομέα
ssl_letsmode0=Ο εικονικός κεντρικός υπολογιστής Apache ταιριάζει με το όνομα κεντρικού υπολογιστή
ssl_letsmode1=Επιλεγμένος εικονικός κεντρικός υπολογιστής Apache
ssl_letsmode2=Άλλος κατάλογος εγγράφων διακομιστή ιστού
@@ -440,9 +440,17 @@ ssl_letsonly=Απλά ανανεώστε την ανανέωση
ssl_usewebmin=Αντιγράψτε το νέο κλειδί και το πιστοποιητικό στο Webmin;
ssl_letsrenew=Μήνες μεταξύ αυτόματης ανανέωσης
ssl_letsnotrenew=Ανανεώνεται μόνο χειροκίνητα
-ssl_staging=Ας κρυπτογραφήσουμε το διακομιστή
-ssl_staging0=Πραγματικός
-ssl_staging1=Στάδιο (μόνο για δοκιμή)
+ssl_staging=Διακομιστής παρόχου
+ssl_staging0=Παραγωγή
+ssl_staging1=Σταδιοποίηση (μόνο δοκιμή)
+ssl_acmeopts=Ρυθμίσεις παρόχου
+ssl_acmeextra=Εμφάνιση σύνθετων ρυθμίσεων
+ssl_acmedir=Προσαρμοσμένη διεύθυνση URL καταλόγου ACME
+ssl_acmedirdesc=Εάν οριστεί, αυτό παρακάμπτει τον προεπιλεγμένο διακομιστή παρόχου παραπάνω.
+ssl_acmekid=Αναγνωριστικό κλειδιού σύνδεσης εξωτερικού λογαριασμού
+ssl_acmekiddesc=Προαιρετικό. Ορισμένοι πάροχοι ACME το απαιτούν αυτό επιπλέον της διεύθυνσης URL του καταλόγου.
+ssl_acmehmac=Κλειδί HMAC σύνδεσης εξωτερικού λογαριασμού
+ssl_acmehmacdesc=Προαιρετικό. Απαιτείται το εγγενές πρόγραμμα-πελάτη Certbot όταν χρησιμοποιείται.
newkey_err=Αποτυχία δημιουργίας κλειδιού SSL
newkey_ecn=Λείπει ή μη έγκυρο όνομα διακομιστή
@@ -664,13 +672,14 @@ session_pmode0=Πάντα να απορρίπτετε τους χρήστες μ
session_pmode1=Να επιτρέπεται πάντα στους χρήστες κωδικοί που έχουν λήξει
session_pmode2=Προτρέψτε τους χρήστες με κωδικούς που έχουν λήξει για να εισαγάγετε έναν νέο
session_md5=Webmin μορφή hashing κωδικό πρόσβασης
+session_rpc_timeout=Χρονικό όριο συνεδρίας RPC
+session_erpc_timeout=Λείπει το χρονικό όριο της περιόδου λειτουργίας RPC ή πρέπει να είναι αριθμός μεγαλύτερος από 0
session_md5off=Προσδιορίστε αυτόματα
session_md5on=Χρησιμοποιήστε τη μορφή κατακερματισμού MD5
session_sha512=Χρησιμοποιήστε τη μορφή κατακερματισμού SHA512
session_yescrypt=Χρησιμοποιήστε τη μορφή κατακερματισμού yescrypt
session_emd5mod=Η μορφή κατακερματισμού MD5 δεν μπορεί να χρησιμοποιηθεί, καθώς η μονάδα Perl $1 δεν είναι εγκατεστημένη
-session_esha512mod=Η μορφή κατακερματισμού SHA512 δεν μπορεί να χρησιμοποιηθεί, καθώς η μονάδα Perl $1 δεν είναι εγκατεστημένη
-session_eyescrypt=Η μορφή κατακερματισμού yescrypt δεν μπορεί να χρησιμοποιηθεί, καθώς η μονάδα Perl $1 δεν είναι εγκατεστημένη
+session_edigestcrypt=Η μορφή κατακερματισμού $1 δεν μπορεί να χρησιμοποιηθεί, επειδή η συνάρτηση crypt του συστήματος δεν την υποστηρίζει
session_blocklock=Επίσης, κλειδώστε τους χρήστες με αποτυχημένες συνδέσεις
session_passapi=Ενεργοποίηση απομακρυσμένου API αλλαγής κωδικού πρόσβασης;
session_passapi0=Απενεργοποιημένο το API
@@ -746,13 +755,14 @@ log_delete_webmincron=Διαγραμμένες προγραμματισμένε
log_run_webmincron=Ran $1 προγραμματισμένες λειτουργίες
log_save_webmincron=Ενημερώθηκε προγραμματισμένη λειτουργία στην ενότητα $1
log_onedelete_webmincron=Διαγραμμένη προγραμματισμένη λειτουργία στην ενότητα $1
-log_letsencrypt=Ζητήθηκε νέο πιστοποιητικό SSL από το Let's Encrypt
-log_letsencryptdns=Δημιουργήθηκε Ας κρυπτογραφήσουμε την εγγραφή DNS για $1
-log_letsencryptcleanup=Καταργήθηκε Να κρυπτογραφήσουμε την εγγραφή DNS για $1
+log_letsencrypt=Αίτημα νέου πιστοποιητικού SSL από πάροχο ACME
+log_letsencryptdns=Δημιουργήθηκεεγγραφή ACME DNS για το $1
+log_letsencryptcleanup=Αφαιρέθηκε η εγγραφή ACME DNS για το $1
themes_title=Webmin Θέματα
themes_desc=Τα θέματα ελέγχουν την εμφάνιση του διεπαφή χρήστη Webmin, συμπεριλαμβανομένων των εικονιδίων, των χρωμάτων, των φόνων και της διάταξης των σελίδων. Το παρακάτω πλαίσιο επιλογής μπορεί να χρησιμοποιηθεί για να επιλέξετε ένα από τα θέματα που είναι εγκατεστημένα στο σύστημά σας.
themes_sel=Τρέχον θέμα :
+themes_configure=Άνοιγμα σελίδας διαμόρφωσης θέματος
themes_default=Παλιό θέμα Webmin
themes_none=Κανένα - αφήστε το θέμα να αποφασίσει
themes_change=Αλλαγή
@@ -1104,6 +1114,7 @@ sendmail_authdef=Προεπιλογή (προς το παρόν Cram-MD5)
sendmail_from=Από τη διεύθυνση ηλεκτρονικού ταχυδρομείου από το Webmin
sendmail_fromdef=Προεπιλογή ($1)
sendmail_fromaddr=Διεύθυνση
+sendmail_name=Εμφανιζόμενο όνομα
sendmail_toaddr=Προεπιλεγμένη διεύθυνση προορισμού για ειδοποιήσεις
sendmail_to_def=Κανένα σετ
sendmail_etoaddr=Λείπει ή έχει μορφοποιηθεί εσφαλμένα η διεύθυνση προορισμού
@@ -1205,6 +1216,7 @@ twofactor_enrolllink=Τώρα μπορείτε να εγγραφείτε για
twofactor_url=Για να μάθετε περισσότερα σχετικά με το $1, ανατρέξτε στον ιστότοπό του στο $2.
twofactor_etotpmodule=Δεν απαιτείται η υπομονάδα Perl $1 που απαιτείται για τον έλεγχο ταυτότητας δύο παραγόντων. Χρησιμοποιήστε τη σελίδα Perl Modules στο Webmin για να την εγκαταστήσετε.
twofactor_qrcode=Εισαγάγετε τον μυστικό κωδικό $1 στην εφαρμογή TOTP ή σαρώστε τον κωδικό QR παρακάτω.
+twofactor_qrcode_manual=Εισαγάγετε τον μυστικό κωδικό $1 στην εφαρμογή TOTP και ρυθμίστε τον χειροκίνητα, καθώς η δημιουργία κωδικού QR δεν υποστηρίζεται σε αυτό το σύστημα.
twofactor_etotpid=Μη έγκυρο μυστικό κωδικοποίησης βασικής βάσης 32 TOTP
twofactor_etotptoken=Το διακριτικό TOTP πρέπει να είναι αριθμός
twofactor_etotpmatch=Λανθασμένος κώδικας OTP
@@ -1214,9 +1226,9 @@ twofactor_secret0=Χρησιμοποιήστε το πλήκτρο 16 χαρακ
twofactor_esecret=Το μυστικό κλειδί πρέπει να έχει μήκος 16 χαρακτήρων και να περιέχει μόνο γράμματα και αριθμούς
twofactor_esession=Ο έλεγχος ταυτότητας δύο παραγόντων δεν μπορεί να χρησιμοποιηθεί εκτός εάν είναι ενεργός ο έλεγχος ταυτότητας βάσει περιόδου σύνδεσης
-letsencrypt_title=Ας κρυπτογραφήσουμε το αίτημα πιστοποιητικού
-letsencrypt_err=Αποτυχία αίτησης πιστοποιητικού
-letsencrypt_ecmds=Δεν βρέθηκε στο σύστημα σας η εντολή Κρυπτογράφηση αιτήματος του πελάτη certbot ή η εντολή python
+letsencrypt_title=Αίτημα Πιστοποιητικού Παρόχου SSL
+letsencrypt_err=Αποτυχία αιτήματος πιστοποιητικού
+letsencrypt_ecmds=Ούτε η εγγενής certbot του προγράμματος-πελάτη ACME ούτε η εντολή python βρέθηκαν στο σύστημά σας
letsencrypt_epythonmod=Η μονάδα Python $1 που απαιτείται από το ενσωματωμένο πρόγραμμα κρυπτογράφησης Let's δεν έχει εγκατασταθεί
letsencrypt_epythonver=Αποτυχία λήψης της έκδοσης Python : $1
letsencrypt_epythonver2=Η έκδοση Python $1 ή παραπάνω είναι απαραίτητη, αλλά έχετε μόνο την έκδοση $2.
@@ -1224,6 +1236,10 @@ letsencrypt_certbot=Certbot
letsencrypt_edroot=Ο εικονικός κεντρικός υπολογιστής Apache $1 δεν έχει κατάλογο εγγράφων!
letsencrypt_edom=Λείπει ή μη έγκυρο όνομα τομέα
letsencrypt_erenew=Λείπει ή μη αριθμητικό διάστημα ανανέωσης
+letsencrypt_eacmedir=Λείπει ή δεν είναι έγκυρη η διεύθυνση URL του καταλόγου ACME
+letsencrypt_eeabdir=Πρέπει να εισαχθεί μια διεύθυνση URL καταλόγου ACME κατά τη χρήση της σύνδεσης εξωτερικού λογαριασμού
+letsencrypt_eeabpair=Πρέπει να εισαχθεί τόσο το αναγνωριστικό κλειδιού σύνδεσης εξωτερικού λογαριασμού όσο και το κλειδί HMAC
+letsencrypt_eeabnative=Η σύνδεση εξωτερικού λογαριασμού μπορεί να χρησιμοποιηθεί μόνο όταν είναι εγκατεστημένο το εγγενές πρόγραμμα-πελάτης ACME
letsencrypt_ewebroot=Ο κατάλογος εγγράφων για τον ιστότοπο δεν υπάρχει
letsencrypt_evhost=Δεν βρέθηκε εικονικός κεντρικός υπολογιστής που να ταιριάζει $1
letsencrypt_efull=Το αναμενόμενο αρχείο πλήρους πιστοποιητικού $1 δεν βρέθηκε
@@ -1246,9 +1262,9 @@ letsencrypt_echain=Αποτυχία λήψης του αλυσιδωτού πι
letsencrypt_echain2=Το αλυσιδωτό πιστοποιητικό που λήφθηκε από το $1 είναι κενό
letsencrypt_ecsr=Αποτυχία δημιουργίας CSR : $1
letsencrypt_ekeygen=Αποτυχία δημιουργίας ιδιωτικού κλειδιού : $1
-letsencrypt_enative=Ο εγγεγραμμένος χρήστης Let's Encrypt (certbot) χρησιμοποιήθηκε στο παρελθόν σε αυτό το σύστημα και πρέπει να χρησιμοποιηθεί για όλα τα μελλοντικά αιτήματα πιστοποιητικών
-letsencrypt_eacmedns=Μόνο ο επίσημος πελάτης Let's Encrypt υποστηρίζει επικύρωση βάσει DNS
-letsencrypt_eacmecertbot=Μόνο ο επίσημος πελάτης Let's Encrypt υποστηρίζει την επικύρωση Certbot
+letsencrypt_enative=Ο εγγενής υπολογιστής-πελάτης ACME (certbot) χρησιμοποιήθηκε προηγουμένως σε αυτό το σύστημα και πρέπει να χρησιμοποιείται για όλα τα μελλοντικά αιτήματα πιστοποιητικών
+letsencrypt_eacmedns=Μόνο ο εγγενής πελάτης ACME υποστηρίζει επικύρωση που βασίζεται σε DNS
+letsencrypt_eacmecertbot=Μόνο ο εγγενής πελάτης ACME υποστηρίζει την επικύρωση Certbot
announce_hide=Απόκρυψη της Ανακοίνωσης
alert_hide=Απόκρυψη ειδοποίησης
diff --git a/webmin/lang/en b/webmin/lang/en
index cf55942ef..0ee714317 100644
--- a/webmin/lang/en
+++ b/webmin/lang/en
@@ -410,7 +410,7 @@ ssl_tabcreate=Self-Signed Certificate
ssl_tabcsr=Certificate Signing Request
ssl_tabupload=Upload Certificate
ssl_tabcurrent=Current Certificate
-ssl_tablets=Let's Encrypt
+ssl_tablets=SSL Provider
ssl_cheader=Details of current certificate
ssl_typeself=Self-signed
ssl_typereal=Signed by CA
@@ -422,27 +422,36 @@ ssl_edownload=Failed to extract PEM data from certificate
ssl_csralready=View most recent key and CSR ..
ssl_already1=Previously generated private key :
ssl_already2=Previously generated certificate signing request :
-ssl_letsdesc=Let's Encrypt is a free, automated, and open certificate authority that can be used to generate an SSL certificate for use by Webmin.
-ssl_letserr=Unfortunately, Let's Encrypt cannot be used on your system : $1.
-ssl_letserr2=Alternately, check the module configuration page to ensure you are using the correct path to the letsencrypt command.
-ssl_letsdesc2=This page can be used to request a new certificate, which will overwrite any other currently have configured in Webmin. However, the Let's Encrypt service requires that your ownership of the certificate domain be validated by checking that this system hosts the website for the domain. This is done by placing a small temporary file in the website's document directory.
-ssl_letsheader=Options for new SSL certificate
+ssl_letsdesc=This form lets you request a trusted SSL certificate for Webmin from an ACME-compatible provider such as Let's Encrypt.
+ssl_letserr=Unfortunately, this system cannot request certificates from an SSL provider : $1.
+ssl_letserr2=Alternately, check the module configuration page to ensure you are using the correct path to the configured ACME client command.
+ssl_letsdesc2=The new certificate will replace the one currently configured in Webmin. Before it can be issued, the ACME provider must verify control of each hostname using either a temporary file in the website's document directory or a temporary DNS TXT record.
+ssl_letsheader=Certificate request options
ssl_letsdoms=Hostnames for certificate
ssl_subset=Skip unverifiable hostnames?
-ssl_letsmode=Let's Encrypt validation method
+ssl_letsmode=Domain validation method
ssl_letsmode0=Apache virtual host matching hostname
ssl_letsmode1=Selected Apache virtual host
ssl_letsmode2=Other webserver document directory
ssl_letsmode3=DNS validation using BIND
ssl_letsmode4=Certbot built-in webserver
+ssl_certbotprehook=Nevertheless, this warning can be ignored if the pre-request command stops the service using port 80 before Certbot runs.
ssl_letsok=Request Certificate
ssl_letsonly=Just Update Renewal
ssl_usewebmin=Copy new key and certificate to Webmin?
ssl_letsrenew=Months between automatic renewal
ssl_letsnotrenew=Only renew manually
-ssl_staging=Let's Encrypt server
-ssl_staging0=Real
+ssl_staging=Provider server
+ssl_staging0=Production
ssl_staging1=Staging (test only)
+ssl_acmeopts=Provider settings
+ssl_acmeextra=Show advanced settings
+ssl_acmedir=Custom ACME directory URL
+ssl_acmedirdesc=If set, this overrides the default provider server above.
+ssl_acmekid=External Account Binding key ID
+ssl_acmekiddesc=Optional. Some ACME providers require this in addition to the directory URL.
+ssl_acmehmac=External Account Binding HMAC key
+ssl_acmehmacdesc=Optional. Requires the native Certbot client when used.
newkey_err=Failed to create SSL key
newkey_ecn=Missing or invalid server name
@@ -671,8 +680,7 @@ session_md5on=Use MD5 hashing format
session_sha512=Use SHA512 hashing format
session_yescrypt=Use yescrypt hashing format
session_emd5mod=MD5 hashing format cannot be used, as Perl $1 module is not installed
-session_esha512mod=SHA512 hashing format cannot be used, as Perl $1 module is not installed
-session_eyescrypt=yescrypt hashing format cannot be used, as Perl $1 module is not installed
+session_edigestcrypt=$1 hashing format cannot be used, because the system crypt function does not support it
session_blocklock=Also lock users with failed logins
session_passapi=Enable remote password change API?
session_passapi0=API disabled
@@ -748,9 +756,9 @@ log_delete_webmincron=Deleted $1 scheduled functions
log_run_webmincron=Ran $1 scheduled functions
log_save_webmincron=Updated scheduled function in module $1
log_onedelete_webmincron=Deleted scheduled function in module $1
-log_letsencrypt=Requested new SSL certificate from Let's Encrypt
-log_letsencryptdns=Created Let's Encrypt DNS record for $1
-log_letsencryptcleanup=Removed Let's Encrypt DNS record for $1
+log_letsencrypt=Requested new SSL certificate from an ACME provider
+log_letsencryptdns=Created ACME DNS record for $1
+log_letsencryptcleanup=Removed ACME DNS record for $1
themes_title=Webmin Themes
themes_desc=Themes control the appearance of the Webmin user interface, including icons, colours, backgrounds and the layout of pages. The selection box below can be used to choose one of the themes installed on your system.
@@ -1219,16 +1227,22 @@ twofactor_secret0=Use 16-character key
twofactor_esecret=Secret key must be exactly 16 characters long and contain only letters and numbers
twofactor_esession=Two-factor authentication cannot be used unless session-based authentication is active
-letsencrypt_title=Let's Encrypt Certificate Request
+letsencrypt_title=SSL Provider Certificate Request
letsencrypt_err=Failed to request certificate
-letsencrypt_ecmds=Neither the Let's Encrypt client command certbot or the python command were found on your system
-letsencrypt_epythonmod=The Python module $1 needed by the built-in Let's Encrypt client is not installed
+letsencrypt_ecmds=Neither the native ACME client command certbot nor the python command were found on your system
+letsencrypt_epythonmod=The Python module $1 needed by the built-in ACME client is not installed
letsencrypt_epythonver=Failed to get the Python version : $1
letsencrypt_epythonver2=Python version $1 or above is required, but you only have version $2.
letsencrypt_certbot=Certbot
letsencrypt_edroot=The Apache virtual host $1 has no document directory!
letsencrypt_edom=Missing or invalid domain name
letsencrypt_erenew=Missing or non-numeric renewal interval
+letsencrypt_eacmedir=Missing or invalid ACME directory URL
+letsencrypt_eeabdir=An ACME directory URL must be entered when using External Account Binding
+letsencrypt_eeabpair=Both the External Account Binding key ID and HMAC key must be entered
+letsencrypt_eeabnative=External Account Binding can only be used when the native ACME client is installed
+letsencrypt_ecertbotport=Certbot validation requires TCP port 80 to be free, but it is already in use by another service. Stop that service temporarily, or use webroot or DNS validation instead.
+letsencrypt_ecertbotwebmin=Certbot validation cannot be used while Webmin is listening on TCP port 80. Use webroot or DNS validation instead, or move Webmin to another port.
letsencrypt_ewebroot=Website document directory does not exist
letsencrypt_evhost=No virtual host matching $1 was found
letsencrypt_efull=Expected full certificate file $1 was not found
@@ -1251,9 +1265,9 @@ letsencrypt_echain=Failed to download chained certificate : $1
letsencrypt_echain2=Chained certificate downloaded from $1 is empty
letsencrypt_ecsr=Failed to generate CSR : $1
letsencrypt_ekeygen=Failed to generate private key : $1
-letsencrypt_enative=The native Let's Encrypt client (certbot) was used previously on this system, and must be used for all future certificate requests
-letsencrypt_eacmedns=Only the official Let's Encrypt client supports DNS-based validation
-letsencrypt_eacmecertbot=Only the official Let's Encrypt client supports Certbot validation
+letsencrypt_enative=The native ACME client (certbot) was used previously on this system, and must be used for all future certificate requests
+letsencrypt_eacmedns=Only the native ACME client supports DNS-based validation
+letsencrypt_eacmecertbot=Only the native ACME client supports Certbot validation
announce_hide=Hide This Announcement
alert_hide=Hide Alert
diff --git a/webmin/lang/es b/webmin/lang/es
index 9a27a8ed7..0b9d19866 100644
--- a/webmin/lang/es
+++ b/webmin/lang/es
@@ -228,7 +228,6 @@ ssl_essl=El módulo de perl The Net::SSLeay parece no estar instalado en su sist
ssl_cpan=Como alternativa, puede hacer que Webmin descarge e instale el módulo Perl necesario Net::SSLeay
ssl_emessage=El mensaje de error de Perl fue : $1
ssl_desc1=La máquina en que Webmin se está ejecutando parece tener el módulo SSLeay de Perl instalado. Usándolo, Webmin soporta comunicaciones SSL encriptadas entre el navegador y el servidor. Si está accediendo a su servidor Webmin a través de Internet, debe de considerar de manera definitiva el utilizar SSL para prevenir que cualquiera capture su clave de acceso a Webmin.
-ssl_desc2=Aviso - active el soporte SSL sólo si tiene un navegador que lo soporte a su vez (como p.ej. Netscape o IE), y no tiene un cortafuegos bloqueando las peticiones https entre su navegador y la máquina de Webmin
ssl_header=Soporte SSL
ssl_on=¿Habilitar SSL si está disponible?
ssl_key=Archivo de clave privada
diff --git a/webmin/lang/es.auto b/webmin/lang/es.auto
index 5266f2c40..cd22e21e4 100644
--- a/webmin/lang/es.auto
+++ b/webmin/lang/es.auto
@@ -122,6 +122,7 @@ lang_dateformat_yyyy/mm/dd=aaaa/mm/dd (es decir, 2001/09/16)
ssl_deny=Versiones de protocolo SSL para rechazar
ssl_compression=¿Permitir conexiones SSL comprimidas?
ssl_honorcipherorder=¿Forzar el uso del orden de cifrado definido por el servidor?
+ssl_enforce=Aplicar SSL
ssl_hsts=Hacer cumplir SSL con el encabezado HSTS
ssl_extracasdef=Igual que la configuración global de SSL
ssl_extracasnone=Ninguno para esta dirección IP
@@ -156,7 +157,7 @@ ssl_tabcreate=Certificado autofirmado
ssl_tabcsr=Solicitud de firma de certificado
ssl_tabupload=Subir certificado
ssl_tabcurrent=Certificado Actual
-ssl_tablets=Encriptemos
+ssl_tablets=Proveedor de SSL
ssl_cheader=Detalles del certificado actual
ssl_typeself=Autofirmado
ssl_typereal=Firmado por CA
@@ -168,15 +169,15 @@ ssl_edownload=Error al extraer datos de PEM del certificado
ssl_csralready=Ver clave más reciente y CSR ..
ssl_already1=Clave privada generada previamente :
ssl_already2=Solicitud de firma de certificado generada previamente :
-ssl_letsdesc=Let's Encrypt es una autoridad de certificación gratuita, automatizada y abierta que se puede usar para generar un certificado SSL para uso de Webmin.
-ssl_letserr=Desafortunadamente, Let's Encrypt no se puede usar en su sistema: $1.
-ssl_letserr2=Alternativamente, revise la página de configuración del módulo para asegurarse de que está utilizando la ruta correcta al comando letsencrypt.
+ssl_letsdesc=Este formulario le permite solicitar un certificado SSL de confianza para Webmin a un proveedor compatible con ACME, como Let's Encrypt.
+ssl_letserr=Lamentablemente, este sistema no puede solicitar certificados a un proveedor SSL: $1.
+ssl_letserr2=Alternativamente, compruebe la página configuración del módulo para asegurarse de que está utilizando la ruta correcta al comando de cliente ACME configurado.
-ssl_letsdesc2=Esta página se puede usar para solicitar un nuevo certificado, que sobrescribirá cualquier otro que haya configurado actualmente en Webmin. Sin embargo, el servicio Let's Encrypt requiere que su propiedad del dominio del certificado sea validada verificando que este sistema aloje el sitio web para el dominio. Esto se hace colocando un pequeño archivo temporal en el directorio de documentos del sitio web.
+ssl_letsdesc2=El nuevo certificado sustituirá al que está configurado actualmente en Webmin. Antes de su emisión, el proveedor ACME debe verificar el control de cada nombre de host mediante un archivo temporal en el directorio de documentos del sitio web o un registro DNS TXT temporal.
ssl_letsheader=Opciones para el nuevo certificado SSL
ssl_letsdoms=Nombres de host para el certificado
ssl_subset=¿Omitir nombres de host no verificables?
-ssl_letsmode=Método de validación Let's Encrypt
+ssl_letsmode=Método de validación de dominio
ssl_letsmode0=Host virtual Apache que coincide con el nombre de host
ssl_letsmode1=Host virtual Apache seleccionado
ssl_letsmode2=Otro directorio de documentos del servidor web
@@ -187,9 +188,17 @@ ssl_letsonly=Solo actualiza la renovación
ssl_usewebmin=Copiar nueva clave y certificado a Webmin?
ssl_letsrenew=Meses entre renovación automática
ssl_letsnotrenew=Solo renueve manualmente
-ssl_staging=Encriptemos el servidor
-ssl_staging0=Real
-ssl_staging1=Estadificación (solo prueba)
+ssl_staging=Servidor del proveedor
+ssl_staging0=Producción
+ssl_staging1=Etapas (solo prueba)
+ssl_acmeopts=Configuración del proveedor
+ssl_acmeextra=Mostrar configuración avanzada
+ssl_acmedir=URL de directorio ACME personalizada
+ssl_acmedirdesc=Si se configura, esta opción anula el servidor proveedor predeterminado mencionado anteriormente.
+ssl_acmekid=ID de clave de enlace de cuenta externa
+ssl_acmekiddesc=Opcional. Algunos proveedores de ACME requieren esto además de la URL del directorio.
+ssl_acmehmac=Clave HMAC de vinculación de cuenta externa
+ssl_acmehmacdesc=Opcional. Requiere el cliente nativo de Certbot para su uso.
newkey_ecns=No se ingresaron nombres de servidores
newkey_ecountry=El código del país debe tener dos letras
@@ -260,13 +269,14 @@ session_ecmd=Comando de cambio de contraseña faltante o no válido
session_banner=Banner previo al inicio de sesión
session_pmodedesc3=Política de caducidad de contraseña
session_md5=Formato de hash de contraseña de Webmin
+session_rpc_timeout=Tiempo de espera de la sesión RPC
+session_erpc_timeout=Falta el tiempo de espera de la sesión RPC o debe ser un número mayor que 0
session_md5off=Determinar automáticamente
session_md5on=Utilice el formato hash MD5
session_sha512=Utilice el formato hash SHA512
session_yescrypt=Utilice el formato hash yescrypt
session_emd5mod=No se puede usar el formato hash MD5, ya que el módulo Perl $1 no está instalado
-session_esha512mod=No se puede usar el formato hash SHA512, ya que el módulo Perl $1 no está instalado
-session_eyescrypt=No se puede usar el formato hash yescrypt, ya que el módulo Perl $1 no está instalado
+session_edigestcrypt=El formato de hash $1 no se puede utilizar porque la función crypt del sistema no lo admite
session_blocklock=También bloquea usuarios con inicios de sesión fallidos
session_passapi=¿Habilitar API de cambio de contraseña remota?
session_passapi0=API deshabilitada
@@ -301,10 +311,11 @@ log_delete_webmincron=$1 funciones programadas eliminadas
log_run_webmincron=Ejecutó $1 funciones programadas
log_save_webmincron=Función programada actualizada en el módulo $1
log_onedelete_webmincron=Función programada eliminada en el módulo $1
-log_letsencrypt=Nuevo certificado SSL solicitado de Let's Encrypt
-log_letsencryptdns=Se creó el registro DNS de Let's Encrypt para $1
-log_letsencryptcleanup=Se eliminó el registro de Let's Encrypt DNS para $1
+log_letsencrypt=Solicité un nuevo certificado SSL a un proveedor de ACME
+log_letsencryptdns=Se creó un registro DNS ACME para $1
+log_letsencryptcleanup=Se eliminó el registro DNS de ACME para $1
+themes_configure=Abrir la página de configuración del tema
themes_none=Ninguno: deje que el tema decida
themes_overdesc=Las superposiciones modifican la apariencia de un tema cambiando los colores, fondos e íconos. No cambian el diseño.
themes_overlay=Superposición actual :
@@ -558,6 +569,7 @@ sendmail_authdef=Predeterminado (actualmente Cram-MD5)
sendmail_from=De la dirección de correo electrónico de Webmin
sendmail_fromdef=Predeterminado ($1)
sendmail_fromaddr=Habla a
+sendmail_name=Nombre para mostrar
sendmail_toaddr=Dirección de destino predeterminada para notificaciones
sendmail_to_def=Ninguno establecido
sendmail_etoaddr=Dirección de destino faltante o con formato incorrecto
@@ -659,6 +671,7 @@ twofactor_enrolllink=Ahora puede inscribirse para la autenticación de dos facto
twofactor_url=Para obtener más información sobre $1, consulte su sitio web en $2.
twofactor_etotpmodule=El módulo Perl $1 necesario para la autenticación de dos factores no está instalado. Use la página Módulos Perl en Webmin para instalarlo.
twofactor_qrcode=Ingrese el código secreto $1 en la aplicación TOTP o escanee el código QR a continuación.
+twofactor_qrcode_manual=Introduce el código secreto $1 en la aplicación TOTP y configúralo manualmente, ya que la generación de códigos QR no es compatible con este sistema.
twofactor_etotpid=Secreto codificado en base32 TOTP no válido
twofactor_etotptoken=El token TOTP debe ser un número
twofactor_etotpmatch=Código OTP incorrecto
@@ -668,9 +681,9 @@ twofactor_secret0=Usar clave de 16 caracteres
twofactor_esecret=La clave secreta debe tener exactamente 16 caracteres y contener solo letras y números
twofactor_esession=La autenticación de dos factores no se puede usar a menos que la autenticación basada en sesión esté activa
-letsencrypt_title=Cifremos la solicitud de certificado
-letsencrypt_err=Error al solicitar el certificado
-letsencrypt_ecmds=Ni el comando de cliente Let's Encrypt certbot o el comando python se encontraron en su sistema
+letsencrypt_title=Solicitud de certificado de proveedor SSL
+letsencrypt_err=No se pudo solicitar el certificado
+letsencrypt_ecmds=Ni el comando cliente nativo ACME certbot ni el comando python se encontraron en su sistema
letsencrypt_epythonmod=El módulo Python $1 que necesita el cliente integrado Let's Encrypt no está instalado
letsencrypt_epythonver=Error al obtener la versión de Python : $1
letsencrypt_epythonver2=Se requiere la versión de Python $1 o superior, pero solo tiene la versión $2.
@@ -678,6 +691,10 @@ letsencrypt_certbot=Certbot
letsencrypt_edroot=El servidor virtual Apache $1 no tiene directorio de documentos.
letsencrypt_edom=Nombre de dominio faltante o inválido
letsencrypt_erenew=Intervalo de renovación faltante o no numérico
+letsencrypt_eacmedir=URL del directorio ACME faltante o no válida
+letsencrypt_eeabdir=Se debe introducir una URL de directorio ACME al utilizar la vinculación de cuenta externa
+letsencrypt_eeabpair=Se deben introducir tanto el ID de clave de enlace de cuenta externa como la clave HMAC
+letsencrypt_eeabnative=La vinculación de cuentas externas solo se puede utilizar cuando el cliente ACME nativo está instalado
letsencrypt_ewebroot=El directorio de documentos del sitio web no existe
letsencrypt_evhost=No se encontró ninguna coincidencia de host virtual $1
letsencrypt_efull=No se encontró el archivo de certificado completo esperado $1
@@ -700,9 +717,9 @@ letsencrypt_echain=Error al descargar el certificado encadenado : $1
letsencrypt_echain2=El certificado encadenado descargado de $1 está vacío
letsencrypt_ecsr=Error al generar CSR : $1
letsencrypt_ekeygen=Error al generar la clave privada : $1
-letsencrypt_enative=El cliente nativo Let's Encrypt (certbot) se usó anteriormente en este sistema y debe usarse para todas las solicitudes de certificados futuras
-letsencrypt_eacmedns=Solo el cliente oficial Let's Encrypt admite la validación basada en DNS
-letsencrypt_eacmecertbot=Solo el cliente oficial Let's Encrypt admite la validación de Certbot
+letsencrypt_enative=El cliente nativo de ACME (certbot) se utilizó anteriormente en este sistema y debe utilizarse para todas las solicitudes de certificados futuras
+letsencrypt_eacmedns=Solo el cliente nativo de ACME admite la validación basada en DNS
+letsencrypt_eacmecertbot=Solo el cliente nativo de ACME admite la validación de Certbot
announce_hide=Ocultar este anuncio
alert_hide=Ocultar alerta
diff --git a/webmin/lang/eu.auto b/webmin/lang/eu.auto
index df73840bc..c7a635cac 100644
--- a/webmin/lang/eu.auto
+++ b/webmin/lang/eu.auto
@@ -340,7 +340,6 @@ ssl_essl=Ez dirudi Net::SSLeay perl modulua zure sisteman instalatuta dagoela. O
ssl_cpan=Bestela, Webmin deskargatu eta instalatu dezakezu behar duzun Net::SSLeay Perl modulua zuretzat.
ssl_emessage=Perl-en akats mezua honakoa zen : $1
ssl_desc1=Webmin exekutatzen ari den ostalariak SSLeay Perl modulua instalatuta duela dirudi. Hori erabiliz, Webminek SSL enkriptatutako komunikazioa onartzen du zure arakatzailearen eta zerbitzariaren artean. Zure webmin zerbitzaria Interneten sartzen ari bazara, zalantzarik gabe SSL erabiltzea kontuan hartu beharko duzu erasotzaileari zure Webmin pasahitza harrapatzea ekiditeko.
-ssl_desc2=Abisua: SSL laguntza soilik aktibatu SSL onartzen duen arakatzailea baldin baduzu eta https eskaerak zure arakatzailearen eta Webmin ostalariaren artean ez dago blokeorik.
ssl_header=SSL laguntza
ssl_on=SSL gaitu?
ssl_key=Gako fitxategi pribatua
@@ -351,6 +350,7 @@ ssl_deny=SSL protokoloaren bertsioak baztertzeko
ssl_compression=Baimendu konprimitutako SSL konexioak?
ssl_honorcipherorder=Zerbitzari definitutako zifratze agindua erabiltzera behartu?
ssl_extracas=Ziurtagiri fitxategi osagarriak
(kateatutako ziurtagirientzat)
+ssl_enforce=Betearazi SSL
ssl_hsts=Indartu SSL HSTS goiburuarekin
ssl_redirect=SSL ez diren SSL eskaerak birbideratu SSL modura?
ssl_extracasdef=SSL ezarpen globalen berdina
@@ -410,7 +410,7 @@ ssl_tabcreate=Sinatutako ziurtagiria
ssl_tabcsr=Ziurtagiria sinatzeko eskaera
ssl_tabupload=Kargatu ziurtagiria
ssl_tabcurrent=Egungo ziurtagiria
-ssl_tablets=Zifratu dezagun
+ssl_tablets=SSL hornitzailea
ssl_cheader=Uneko ziurtagiriaren xehetasunak
ssl_typeself=Norberak sinatutako
ssl_typereal=CA-k sinatuta
@@ -422,14 +422,14 @@ ssl_edownload=Ezin izan da PEM datuak ziurtagiririk atera
ssl_csralready=Ikusi azken gakoa eta EGE ..
ssl_already1=Aurretik sortutako gako pribatua :
ssl_already2=Aurretik sortutako ziurtagiria sinatzeko eskaera :
-ssl_letsdesc=Let's Encrypt Webmin-ek SSL ziurtagiria sortzeko erabil dezakeen ziurtagiri librea, automatizatua eta irekia da.
-ssl_letserr=Zoritxarrez, Dezagun Encrypt ezin da zure sisteman erabili: $1.
-ssl_letserr2=Bestela, egiaztatu moduluaren konfigurazioa orria letsencrypt komandoari bide zuzena erabiltzen ari zarela ziurtatzeko.
-ssl_letsdesc2=Orrialde hau Ziurtagiri berri bat eskatzeko erabil daiteke. Webmin konfiguratuta dagoen beste edozein gainidatziko du. Hala ere, Letrak enkriptatu zerbitzuak eskatzen du ziurtagiriaren domeinuaren titulartasuna balioztatzea sistema honek domeinuaren webgunea ostatatzen duela egiaztatuz. Hori egiten da aldi baterako fitxategi txiki bat webgunearen dokumentuen direktorioan jarriz.
+ssl_letsdesc=Inprimaki honek Webmin-erako SSL ziurtagiri fidagarri bat eskatzeko aukera ematen dizu ACME-rekin bateragarria den hornitzaile batetik, hala nola Let's Encrypt-etik.
+ssl_letserr=Zoritxarrez, sistema honek ezin ditu ziurtagiriak eskatu SSL hornitzaile batetik: $1.
+ssl_letserr2=Bestela, egiaztatu moduluaren konfigurazioa orria konfiguratutako ACME bezero komandoaren bide zuzena erabiltzen ari zarela ziurtatzeko.
+ssl_letsdesc2=Ziurtagiri berriak Webminen konfiguratuta dagoena ordezkatuko du. Jaulki aurretik, ACME hornitzaileak ostalari-izen bakoitzaren kontrola egiaztatu behar du webgunearen dokumentu-direktorioko aldi baterako fitxategi bat edo aldi baterako DNS TXT erregistro bat erabiliz.
ssl_letsheader=SSL ziurtagiri berrirako aukerak
ssl_letsdoms=Ziurtagiriaren ostalariaren izenak
ssl_subset=Egiaztaezinak ostalari-izenak saltatu nahi dituzu?
-ssl_letsmode=Enkriptatu dezagun baliozkotze metodoa
+ssl_letsmode=Domeinuaren balidazio metodoa
ssl_letsmode0=Apache ostalari birtuala bat datorren ostalari-izena
ssl_letsmode1=Aukeratutako Apache ostalari birtuala
ssl_letsmode2=Webzerbitzariaren beste dokumentuen direktorioa
@@ -440,9 +440,17 @@ ssl_letsonly=Eguneratu berritzea
ssl_usewebmin=Kopiatu gako berria eta ziurtagiria Webmin-en?
ssl_letsrenew=Berritze automatikoaren arteko hilabeteak
ssl_letsnotrenew=Eskuz bakarrik berritu
-ssl_staging=Dezagun enkriptatu zerbitzaria
-ssl_staging0=Real
+ssl_staging=Hornitzaile zerbitzaria
+ssl_staging0=Ekoizpena
ssl_staging1=Eszenaratzea (proba bakarrik)
+ssl_acmeopts=Hornitzailearen ezarpenak
+ssl_acmeextra=Erakutsi ezarpen aurreratuak
+ssl_acmedir=ACME direktorio pertsonalizatuaren URLa
+ssl_acmedirdesc=Ezartuta badago, honek goiko hornitzaile lehenetsiaren zerbitzaria gainidazten du.
+ssl_acmekid=Kanpoko kontuaren lotura-gakoaren IDa
+ssl_acmekiddesc=Aukerakoa. ACME hornitzaile batzuek direktorioko URLaz gain, hau eskatzen dute.
+ssl_acmehmac=Kanpoko kontuaren lotura HMAC gakoa
+ssl_acmehmacdesc=Aukerakoa. Erabiltzean, Certbot bezero natiboa behar du.
newkey_err=Huts egin du SSL gakoa sortzerakoan
newkey_ecn=Zerbitzariaren izen falta edo baliogabea
@@ -664,13 +672,14 @@ session_pmode0=Erabiltzaileei iraungitako pasahitzak ukatu beti
session_pmode1=Beti baimendu pasahitz iraungitako erabiltzaileekin
session_pmode2=Eskatu erabiltzaileei iraungitako pasahitzak dituztela berri bat sartzeko
session_md5=Webmin pasahitza hashing formatua
+session_rpc_timeout=RPC saioaren denbora-muga
+session_erpc_timeout=RPC saioaren denbora-muga falta da edo 0 baino handiagoa den zenbakia izan behar du
session_md5off=Zehaztu automatikoki
session_md5on=Erabili MD5 hashing formatua
session_sha512=Erabili SHA512 hashing formatua
session_yescrypt=Erabili yescrypt hashing formatua
session_emd5mod=MD5 hashing formatua ezin da erabili, Perl $1 modulua ez baitago instalatuta
-session_esha512mod=SHA512 hashing formatua ezin da erabili, Perl $1 modulua ez baitago instalatuta
-session_eyescrypt=yescrypt hashing formatua ezin da erabili, Perl $1 modulua ez baitago instalatuta
+session_edigestcrypt=Ezin da $1 hashing formatua erabili, sistemaren crypt funtzioak ez duelako onartzen
session_blocklock=Era berean, blokeatu erabiltzaileek huts egin duten saioak
session_passapi=Urruneko pasahitza aldatzeko APIa gaitu nahi duzu?
session_passapi0=APIa desgaituta dago
@@ -746,13 +755,14 @@ log_delete_webmincron=$1 ezarritako funtzioak ezabatu ditu
log_run_webmincron=Rango $1 programatutako funtzioak
log_save_webmincron=Eguneratutako funtzio eguneratua $1 moduluan
log_onedelete_webmincron=Programatutako funtzioa ezabatu da $1 moduluan
-log_letsencrypt=SSL ziurtagiri berria eskatu dugu Let's Encrypt-en
-log_letsencryptdns=Sortu dezagun DNS erregistroa $1 -rako
-log_letsencryptcleanup=Kendu Dezagun enkriptatu DNS erregistroa $1 -rentzat
+log_letsencrypt=ACME hornitzaile bati SSL ziurtagiri berria eskatu diot
+log_letsencryptdns=$1-erako ACME DNS erregistroa sortu da
+log_letsencryptcleanup=$1-erako ACME DNS erregistroa kendu da
themes_title=Webmin Gaiak
themes_desc=Gaiek Webmin erabiltzailearen interfazearen itxura kontrolatzen dute, ikonoak, koloreak, atzeko planoak eta orrien diseinua barne. Beheko hautatutako laukia zure sisteman instalatutako gairen bat aukeratzeko erabil daiteke.
themes_sel=Oraingo gaia :
+themes_configure=Ireki gaiaren konfigurazio orria
themes_default=Webmin zaharreko gaia
themes_none=Bat ere ez - utzi gaia erabakitzen
themes_change=Aldaketa
@@ -1104,6 +1114,7 @@ sendmail_authdef=Lehenespenez (gaur egun Cram-MD5)
sendmail_from=Webmin helbide elektronikoa lortzeko
sendmail_fromdef=Lehenespenez ($1)
sendmail_fromaddr=Helbidea
+sendmail_name=Bistaratzeko izena
sendmail_toaddr=Jakinarazpenetarako helmuga lehenetsia
sendmail_to_def=Ez dago ezarrita
sendmail_etoaddr=Helmuga helbidea falta da edo formateatu okerra
@@ -1205,6 +1216,7 @@ twofactor_enrolllink=Bi faktoreren autentikazioan izena eman dezakezu $2 webgunean.
twofactor_etotpmodule=Ez da instalatu bi faktoreen autentikaziorako behar den $1. Erabili Perl moduluak orria Webmin-en instalatzeko.
twofactor_qrcode=Sartu $1 kode sekretua TOTP aplikazioan edo eskaneatu beheko QR kodea.
+twofactor_qrcode_manual=Sartu $1 kode sekretua TOTP aplikazioan eta konfiguratu eskuz, sistema honek ez baitu QR kodeen sorrera onartzen.
twofactor_etotpid=TOTP base32 kodetutako sekretu baliogabea
twofactor_etotptoken=TOTP tokenak zenbaki bat izan behar du
twofactor_etotpmatch=OTP kode okerra
@@ -1214,9 +1226,9 @@ twofactor_secret0=Erabili 16 karaktere gakoa
twofactor_esecret=Gako sekretuak 16 karaktere luze izan behar ditu eta letrak eta zenbakiak bakarrik eduki behar ditu
twofactor_esession=Bi faktoreren autentikazioa ezin da erabili saioan oinarritutako autentikazioa aktibatuta egon ezean
-letsencrypt_title=Zifratu Ziurtagiri Eskaera
-letsencrypt_err=Ezin izan da ziurtagiria eskatu
-letsencrypt_ecmds=Ez ditzagun zure sistemako Letrak enkriptatu certbot edo python komandoa
+letsencrypt_title=SSL hornitzailearen ziurtagiri eskaera
+letsencrypt_err=Ziurtagiria eskatzea huts egin da
+letsencrypt_ecmds=Ez da aurkitu zure sisteman ez ACME bezeroaren certbot komando natiboa ezta python komandoa ere
letsencrypt_epythonmod=Python modulua $1 Dezagun enkriptatutako bezeroak behar duenean ez dago instalatuta
letsencrypt_epythonver=Ezin izan da Python bertsioa eskuratu : $1
letsencrypt_epythonver2=Python bertsioa $1 edo berria beharrezkoa da, baina $2 bertsioa baino ez duzu.
@@ -1224,6 +1236,10 @@ letsencrypt_certbot=Certbot
letsencrypt_edroot=$1 Apache ostalari birtualak ez du dokumentuen direktoriorik!
letsencrypt_edom=Domeinu izen falta edo baliogabea
letsencrypt_erenew=Falta edo zenbakizko berritze-tartea
+letsencrypt_eacmedir=ACME direktorioko URLa falta da edo baliogabea da
+letsencrypt_eeabdir=ACME direktorioko URL bat sartu behar da Kanpoko Kontuen Lotura erabiltzean
+letsencrypt_eeabpair=Kanpoko Kontuaren Lotura-gakoaren IDa eta HMAC gakoa sartu behar dira
+letsencrypt_eeabnative=Kanpoko kontuen lotura ACME bezero natiboa instalatuta dagoenean bakarrik erabil daiteke
letsencrypt_ewebroot=Webgunearen dokumentuen direktoriorik ez dago
letsencrypt_evhost=Ez da aurkitu $1 bat datorren ostalari birtualik
letsencrypt_efull=Ez da espero ziurtagiri osoa $1 fitxategia
@@ -1246,9 +1262,9 @@ letsencrypt_echain=Ezin izan da kateatutako ziurtagiria deskargatu : $1
letsencrypt_echain2=$1 tik kargatutako ziurtagiri kateatua hutsik dago
letsencrypt_ecsr=Huts egin du CSR sortzen denean : $1
letsencrypt_ekeygen=Ezin izan da gako pribatua sortzen : $1
-letsencrypt_enative=Let's Encrypt bezero jatorria (certbot) lehenago erabili zen sistema honetan eta etorkizunean ziurtagiri-eskaera guztietarako erabili behar da
-letsencrypt_eacmedns=Letrak Encrypt bezero ofizialak soilik onartzen ditu DNSetan oinarritutako balioztapena
-letsencrypt_eacmecertbot=Let's Encrypt bezero ofizialak soilik onartzen du Certbot baliozkotzea
+letsencrypt_enative=ACME bezero natiboa (certbot) sistema honetan lehenago erabili izan da, eta etorkizuneko ziurtagiri eskaera guztietarako erabili behar da
+letsencrypt_eacmedns=ACME bezero natiboak bakarrik onartzen du DNS oinarritutako balidazioa
+letsencrypt_eacmecertbot=ACME bezero natiboak bakarrik onartzen du Certbot balidazioa
announce_hide=Ezkutatu iragarki hau
alert_hide=Alerta ezkutatu
diff --git a/webmin/lang/fa b/webmin/lang/fa
index 51ff9f863..c2bb71a5b 100644
--- a/webmin/lang/fa
+++ b/webmin/lang/fa
@@ -211,7 +211,6 @@ ssl_essl=پيمانه Net::SSLeay پرل به نظر ميرسد که در س
ssl_cpan=شما ميتوانيد وب راداشته باشيد و پيمانههاي پرل Net::SSLeay مورد نياز خود را بارگيري و نصب کنيد.
ssl_emessage=پيام خطاي مربوط به پرل $1 بود.
ssl_desc1=به نظر ميرسد پيمانه SSLeay پرل در ميزبان وبمين شما نصب شده باشد. با استفاده از اين وبمين ميتواند از ارتباط رمزگذاري شده SSL بين مرورگر شما و کارساز پشتيباني کند. اگر شما به کارساز وبمين از طريق اينترنت دستيابي داريد، شما بايد براي جلوگيري از ضبط اسمرمز وبمين توسط حمله کنندگان از SSLاستفاده کنيد.
-ssl_desc2=هشدار-فقط زماني پشتيباني SSL را فعال کنيد که مرورگري داشته باشيد که از SSL پشتيباني کند (مانند Netscape يا IE(، و هيچ دروازه آتشي جهت مسدود کردن درخواستهاي
(ketjutettuihin varmenteisiin)
+ssl_enforce=Pakota SSL-suojaus
ssl_hsts=Pakota SSL HSTS-otsikolla
ssl_redirect=Ohjaavatko muut kuin SSL-pyynnöt SSL-tilaan?
ssl_extracasdef=Sama kuin globaalit SSL-asetukset
@@ -410,7 +410,7 @@ ssl_tabcreate=Itse allekirjoitettu todistus
ssl_tabcsr=Varmenteen allekirjoituspyyntö
ssl_tabupload=Lataa varmenne
ssl_tabcurrent=Nykyinen varmenne
-ssl_tablets=Salatkoon
+ssl_tablets=SSL-palveluntarjoaja
ssl_cheader=Tiedot nykyisestä varmenteesta
ssl_typeself=Itse allekirjoitetun
ssl_typereal=CA: n allekirjoittama
@@ -422,14 +422,14 @@ ssl_edownload=PEM-tietojen nouto sertifikaatista epäonnistui
ssl_csralready=Näytä viimeisin avain ja CSR ..
ssl_already1=Aiemmin luotu yksityinen avain :
ssl_already2=Aikaisemmin luotu varmenteen allekirjoituspyyntö :
-ssl_letsdesc=Let's Encrypt on ilmainen, automatisoitu ja avoin varmenteen myöntäjä, jota voidaan käyttää luomaan SSL-varmenne Webminin käyttöön.
-ssl_letserr=Valitettavasti Let's Encrypt -sovellusta ei voi käyttää järjestelmässäsi: $1.
-ssl_letserr2=Tarkista vaihtoehtoisesti moduulin kokoonpano -sivu varmistaaksesi, että käytät oikeaa polkua letsencrypt -komentoon.
-ssl_letsdesc2=Tätä sivua voidaan käyttää uuden varmenteen pyytämiseen, joka korvaa kaikki muut, jotka Webminissä on tällä hetkellä määritetty. Let's Encrypt -palvelu edellyttää kuitenkin, että omistajasi varmennealueelle vahvistetaan tarkistamalla, että tämä järjestelmä isännöi verkkotunnuksen verkkosivustoa. Tämä tehdään sijoittamalla pieni väliaikainen tiedosto verkkosivuston asiakirjahakemistoon.
+ssl_letsdesc=Tämän lomakkeen avulla voit pyytää luotettavaa SSL-varmennetta Webminille ACME-yhteensopivalta tarjoajalta, kuten Let's Encryptiltä.
+ssl_letserr=Valitettavasti tämä järjestelmä ei voi pyytää varmenteita SSL-palveluntarjoajalta: $1.
+ssl_letserr2=Vaihtoehtoisesti voit tarkistaa moduulin määrityssivulta, että käytät oikeaa polkua määritettyyn ACME-asiakaskomentoon.
+ssl_letsdesc2=Uusi varmenne korvaa Webminissä tällä hetkellä määritetyn varmenteen. Ennen kuin se voidaan myöntää, ACME-tarjoajan on vahvistettava jokaisen isäntänimen hallinta joko verkkosivuston dokumenttihakemistossa olevan väliaikaisen tiedoston tai väliaikaisen DNS TXT -tietueen avulla.
ssl_letsheader=Uuden SSL-varmenteen vaihtoehdot
ssl_letsdoms=Varmenteen isäntänimet
ssl_subset=Ohitetaanko varmentamattomat isäntänimet?
-ssl_letsmode=Salataan vahvistusmenetelmä
+ssl_letsmode=Verkkotunnuksen validointimenetelmä
ssl_letsmode0=Apache-virtuaaliisäntä, joka vastaa isäntänimeä
ssl_letsmode1=Valittu Apache-virtuaaliisäntä
ssl_letsmode2=Muu verkkopalvelimen asiakirjahakemisto
@@ -440,9 +440,17 @@ ssl_letsonly=Päivitä vain uusinta
ssl_usewebmin=Kopioidaanko uusi avain ja varmenne Webminiin?
ssl_letsrenew=Kuukaudet automaattisen uusimisen välillä
ssl_letsnotrenew=Uusi vain manuaalisesti
-ssl_staging=Salatkoon palvelin
-ssl_staging0=Todellinen
-ssl_staging1=Vaihe (vain testi)
+ssl_staging=Palveluntarjoajapalvelin
+ssl_staging0=Tuotanto
+ssl_staging1=Vaiheistus (vain testi)
+ssl_acmeopts=Palveluntarjoajan asetukset
+ssl_acmeextra=Näytä lisäasetukset
+ssl_acmedir=Mukautettu ACME-hakemiston URL-osoite
+ssl_acmedirdesc=Jos tämä on asetettu, tämä ohittaa yllä olevan oletusarvoisen palvelinpalvelimen.
+ssl_acmekid=Ulkoisen tilin sidonta-avaimen tunnus
+ssl_acmekiddesc=Valinnainen. Jotkin ACME-palveluntarjoajat vaativat tätä hakemiston URL-osoitteen lisäksi.
+ssl_acmehmac=Ulkoisen tilin sitova HMAC-avain
+ssl_acmehmacdesc=Valinnainen. Vaatii Certbotin alkuperäisen asiakasohjelman käytettäessä.
newkey_err=SSL-avaimen luominen epäonnistui
newkey_ecn=Puuttuva tai virheellinen palvelimen nimi
@@ -664,13 +672,14 @@ session_pmode0=Kieltää käyttäjät aina vanhentuneet salasanat
session_pmode1=Salli aina käyttäjät, joilla on vanhentuneet salasanat
session_pmode2=Pyydä käyttäjiä, joiden salasanat ovat vanhentuneet, antamaan uusi
session_md5=Webmin-salasanan hajautusmuoto
+session_rpc_timeout=RPC-istunnon aikakatkaisu
+session_erpc_timeout=RPC-istunnon aikakatkaisu puuttuu tai sen on oltava suurempi kuin 0
session_md5off=Määritä automaattisesti
session_md5on=Käytä MD5-tiivistemuotoa
session_sha512=Käytä SHA512-tiivistemuotoa
session_yescrypt=Käytä yescrypt-tiivistemuotoa
session_emd5mod=MD5-tiivistysmuotoa ei voi käyttää, koska Perl $1 -moduulia ei ole asennettu
-session_esha512mod=SHA512-tiivistysmuotoa ei voi käyttää, koska Perl $1 -moduulia ei ole asennettu
-session_eyescrypt=yescrypt-hajautusmuotoa ei voi käyttää, koska Perl $1 -moduulia ei ole asennettu
+session_edigestcrypt=$1-hajautusmuotoa ei voida käyttää, koska järjestelmän crypt-funktio ei tue sitä
session_blocklock=Lukitse myös käyttäjät, joilla epäonnistuneet kirjautumiset
session_passapi=Otetaanko salasanan etäkäyttöliittymä käyttöön?
session_passapi0=API poistettu käytöstä
@@ -746,13 +755,14 @@ log_delete_webmincron=Poistetut $1 ajoitetut toiminnot
log_run_webmincron=Suoritti $1 ajoitettuja toimintoja
log_save_webmincron=Päivitetty ajoitettu toiminto moduulissa $1
log_onedelete_webmincron=Poistettu ajoitettu toiminto moduulista $1
-log_letsencrypt=Pyysi uutta SSL-varmennetta Let's Encryptiltä
-log_letsencryptdns=Luotu salattiin DNS-tietue $1
-log_letsencryptcleanup=Poistettiin salaamaan $1 DNS-tietue
+log_letsencrypt=Pyysin uutta SSL-varmennetta ACME-palveluntarjoajalta
+log_letsencryptdns=Luotu ACME DNS -tietue kohteelle $1
+log_letsencryptcleanup=ACME DNS -tietue poistettiin kohteelle $1
themes_title=Webmin-teemat
themes_desc=Teemat ohjaavat Webmin-käyttöliittymän ulkonäköä, mukaan lukien kuvakkeet, värit, taustat ja sivujen asettelu. Alla olevaa valintaruutua voidaan käyttää valitsemalla yksi järjestelmään asennetuista teemoista.
themes_sel=Nykyinen teema :
+themes_configure=Avaa teeman määrityssivu
themes_default=Vanha Webmin-teema
themes_none=Ei mitään - anna teema päättää
themes_change=Muuttaa
@@ -1104,6 +1114,7 @@ sendmail_authdef=Oletus (tällä hetkellä Cram-MD5)
sendmail_from=Webminin sähköpostiosoitteesta
sendmail_fromdef=Oletus ($1)
sendmail_fromaddr=Osoite
+sendmail_name=Näyttönimi
sendmail_toaddr=Ilmoitusten oletuskohdeosoite
sendmail_to_def=Ei asetettu
sendmail_etoaddr=Puuttuva tai väärin muotoiltu kohdeosoite
@@ -1205,6 +1216,7 @@ twofactor_enrolllink=Voit nyt ilmoittautua kaksifaktoriseen todennukseen $2.
twofactor_etotpmodule=Kaksitekijäiseen todennukseen tarvittavaa Perl-moduulia $1 ei ole asennettu. Asenna se Webminin Perl-moduulit -sivulla.
twofactor_qrcode=Kirjoita salainen koodi $1 TOTP-sovellukseen tai skannaa alla oleva QR-koodi.
+twofactor_qrcode_manual=Syötä salainen koodi $1 TOTP-sovellukseen ja määritä se manuaalisesti, koska QR-koodien luontia ei tueta tässä järjestelmässä.
twofactor_etotpid=Virheellinen TOTP base32-koodattu salaisuus
twofactor_etotptoken=TOTP-tunnuksen on oltava numero
twofactor_etotpmatch=Väärä OTP-koodi
@@ -1214,9 +1226,9 @@ twofactor_secret0=Käytä 16-merkkistä näppäintä
twofactor_esecret=Salaisen avaimen tulee olla tarkalleen 16 merkkiä pitkä ja sisältää vain kirjaimia ja numeroita
twofactor_esession=Kaksikerroista todennusta ei voida käyttää, ellei istuntopohjainen todennus ole aktiivinen
-letsencrypt_title=Salatkaamme varmennepyyntö
+letsencrypt_title=SSL-palveluntarjoajan varmennepyyntö
letsencrypt_err=Varmenteen pyytäminen epäonnistui
-letsencrypt_ecmds=Järjestelmästä ei löytynyt Let's Encrypt client -komentoa certbot tai python -komentoa.
+letsencrypt_ecmds=Järjestelmästäsi ei löytynyt ACME-asiakasohjelman natiivia certbot certbot komentoa eikä python -komentoa
letsencrypt_epythonmod=Sisäänrakennetun Let's Encrypt -asiakkaan tarvitsemaa Python-moduulia $1 ei ole asennettu
letsencrypt_epythonver=Python-version hankkiminen epäonnistui : $1
letsencrypt_epythonver2=Python-versio $1 tai uudempi vaaditaan, mutta sinulla on vain versio $2.
@@ -1224,6 +1236,10 @@ letsencrypt_certbot=Certbot
letsencrypt_edroot=Apache-virtuaalikoneella $1 ei ole asiakirjahakemistoa!
letsencrypt_edom=Puuttuva tai virheellinen verkkotunnus
letsencrypt_erenew=Puuttuva tai ei-numeerinen uusimisväli
+letsencrypt_eacmedir=Puuttuva tai virheellinen ACME-hakemiston URL-osoite
+letsencrypt_eeabdir=ACME-hakemiston URL-osoite on annettava, kun käytetään ulkoista tilin sidontaa
+letsencrypt_eeabpair=Sekä ulkoisen tilin sidonta-avaimen tunnus että HMAC-avain on annettava
+letsencrypt_eeabnative=Ulkoista tilien sidontaa voidaan käyttää vain, kun natiivi ACME-asiakasohjelma on asennettu
letsencrypt_ewebroot=Verkkosivun asiakirjahakemistoa ei ole
letsencrypt_evhost=Virtuaalista isäntää, joka vastasi $1, ei löytynyt
letsencrypt_efull=Odotettua täydellistä varmennetiedostoa $1 ei löytynyt
@@ -1246,9 +1262,9 @@ letsencrypt_echain=Ketjutun varmenteen lataus epäonnistui : $1
letsencrypt_echain2=Ketjutettu sertifikaatti, joka on ladattu osoitteesta $1, on tyhjä
letsencrypt_ecsr=CSR: n luominen epäonnistui : $1
letsencrypt_ekeygen=Yksityisen avaimen luonti epäonnistui : $1
-letsencrypt_enative=Alkuperäistä Let's Encrypt -asiakasta (certbot) käytettiin aiemmin tässä järjestelmässä, ja sitä on käytettävä kaikkiin tuleviin varmennepyyntöihin
-letsencrypt_eacmedns=Vain virallinen Let's Encrypt -asiakas tukee DNS-pohjaista validointia
-letsencrypt_eacmecertbot=Vain virallinen Let's Encrypt -asiakas tukee Certbotin validointia
+letsencrypt_enative=Tässä järjestelmässä on aiemmin käytetty alkuperäistä ACME-asiakasohjelmaa (certbot), ja sitä on käytettävä kaikissa tulevissa varmennepyynnöissä
+letsencrypt_eacmedns=Vain natiivi ACME-asiakasohjelma tukee DNS-pohjaista validointia
+letsencrypt_eacmecertbot=Vain ACME:n natiivi asiakasohjelma tukee Certbot-validointia
announce_hide=Piilota tämä ilmoitus
alert_hide=Piilota hälytys
diff --git a/webmin/lang/fr b/webmin/lang/fr
index 7a8135d12..6144ba898 100644
--- a/webmin/lang/fr
+++ b/webmin/lang/fr
@@ -308,7 +308,6 @@ ssl_essl=Le module perl Net :: SSLeay ne semble pas être installé sur votre sy
ssl_cpan=Vous pouvez également demander à Webmin de télécharger et d'installer le module Net::SSLeay Perl requis pour vous.
ssl_emessage=Le message d'erreur de Perl était : $1
ssl_desc1=L'hôte sur lequel Webmin s'exécute semble avoir installé le module SSLeay Perl. Grâce à cela, Webmin prend en charge la communication cryptée SSL entre votre navigateur et le serveur. Si vous accédez à votre serveur Webmin via Internet, vous devez absolument envisager d'utiliser SSL pour empêcher un attaquant de capturer votre mot de passe Webmin.
-ssl_desc2=Attention - n'activez la prise en charge SSL que si votre navigateur prend en charge SSL et qu'il n'y a pas de requêtes de blocage de pare-feu https entre votre navigateur et l'hôte Webmin.
ssl_header=Prise en charge SSL
ssl_on=Activer SSL?
ssl_key=Fichier de clé privée
@@ -377,7 +376,6 @@ ssl_tabcreate=Certificat auto-signé
ssl_tabcsr=Demande de signature de certificat
ssl_tabupload=Télécharger le certificat
ssl_tabcurrent=Certificat actuel
-ssl_tablets=Permet de chiffrer
ssl_cheader=Détails du certificat actuel
ssl_typeself=Auto-signé
ssl_typereal=Signé par CA
@@ -389,10 +387,6 @@ ssl_edownload=Échec de l'extraction des données PEM du certificat
ssl_csralready=Afficher la clé et le CSR les plus récents ...
ssl_already1=Clé privée précédemment générée :
ssl_already2=Demande de signature de certificat précédemment générée :
-ssl_letsdesc=Let's Encrypt est une autorité de certification gratuite, automatisée et ouverte qui peut être utilisée pour générer un certificat SSL à utiliser par Webmin.
-ssl_letserr=Malheureusement, Let's Encrypt ne peut pas être utilisé sur votre système : $1.
-ssl_letserr2=Vous pouvez également consulter la page de configuration du module pour vous assurer que vous utilisez le chemin correct vers la commande letsencrypt.
-ssl_letsdesc2=Cette page peut être utilisée pour demander un nouveau certificat, qui écrasera tout autre déjà configuré dans Webmin. Cependant, le service Let's Encrypt nécessite que votre propriété du domaine de certificat soit validée en vérifiant que ce système héberge le site Web du domaine. Pour ce faire, placez un petit fichier temporaire dans le répertoire de documents du site Web.
ssl_letsheader=Options pour le nouveau certificat SSL
ssl_letsdoms=Noms d'hôte pour le certificat
ssl_letsok=Demander un certificat
@@ -400,9 +394,6 @@ ssl_letsonly=Il suffit de mettre à jour le renouvellement
ssl_usewebmin=Copier la nouvelle clé et le nouveau certificat dans Webmin?
ssl_letsrenew=Mois entre le renouvellement automatique
ssl_letsnotrenew=Renouveler uniquement manuellement
-ssl_staging=Serveur Let's Encrypt
-ssl_staging0=Réel
-ssl_staging1=Mise en scène (test uniquement)
newkey_err=Échec de la création de la clé SSL
newkey_ecn=Nom de serveur manquant ou non valide
@@ -679,9 +670,6 @@ log_delete_webmincron=Fonctions planifiées à $1 supprimées
log_run_webmincron=Ran $1 fonctions programmées
log_save_webmincron=Mise à jour de la fonction programmée dans le module $1
log_onedelete_webmincron=Fonction programmée supprimée dans le module $1
-log_letsencrypt=Nouveau certificat SSL demandé à Let's Encrypt
-log_letsencryptdns=Création d'un enregistrement DNS Let's Encrypt pour $1
-log_letsencryptcleanup=Suppression de l'enregistrement DNS Let's Encrypt pour $1
themes_title=Thèmes Webmin
themes_desc=Les thèmes contrôlent l'apparence de l'interface utilisateur Webmin, y compris les icônes, les couleurs, les arrière-plans et la disposition des pages. La boîte de sélection ci-dessous peut être utilisée pour choisir l'un des thèmes installés sur votre système.
@@ -1085,9 +1073,6 @@ twofactor_secret0=Utiliser une clé à 16 caractères
twofactor_esecret=La clé secrète doit contenir exactement 16 caractères et ne contenir que des lettres et des chiffres
twofactor_esession=L'authentification à deux facteurs ne peut être utilisée que si l'authentification basée sur la session est active
-letsencrypt_title=Let's Encrypt Certificate Request
-letsencrypt_err=Échec de la demande de certificat
-letsencrypt_ecmds=Ni la commande client Let's Encrypt certbot ni la commande python n’ont été trouvées sur votre système
letsencrypt_epythonmod=Le module Python $1 requis par le client Let's Encrypt intégré n'est pas installé
letsencrypt_epythonver=Impossible d'obtenir la version Python : $1
letsencrypt_epythonver2=La version Python $1 ou supérieure est requise, mais vous n'avez que la version $2.
@@ -1116,8 +1101,6 @@ letsencrypt_echain=Échec du téléchargement du certificat chaîné : $1
letsencrypt_echain2=Le certificat chaîné téléchargé à partir de $1 est vide
letsencrypt_ecsr=Échec de la génération du CSR : $1
letsencrypt_ekeygen=Échec de la génération de la clé privée : $1
-letsencrypt_enative=Le client natif Let's Encrypt (certbot) a été utilisé précédemment sur ce système et doit être utilisé pour toutes les futures demandes de certificat
-letsencrypt_eacmedns=Seul le client officiel Let's Encrypt prend en charge la validation DNS
announce_hide=Cacher cette annonce
alert_hide=Masquer l'alerte
diff --git a/webmin/lang/fr.auto b/webmin/lang/fr.auto
index 1c6b4bfa2..8bed7fd59 100644
--- a/webmin/lang/fr.auto
+++ b/webmin/lang/fr.auto
@@ -35,14 +35,32 @@ lang_dateformat_dd/mm/yyyy=jj/mm/aaaa (c'est-à-dire 16/09/2001)
lang_dateformat_mm/dd/yyyy=jj/mm/aaaa (c'est-à-dire 16/09/2001)
lang_dateformat_yyyy/mm/dd=aaaa/mm/jj (c.-à-d. 2001/09/16)
+ssl_enforce=Imposer le SSL
ssl_hsts=Appliquer SSL avec l'en-tête HSTS
+ssl_tablets=Fournisseur SSL
+ssl_letsdesc=Ce formulaire vous permet de demander un certificat SSL de confiance pour Webmin auprès d'un fournisseur compatible ACME tel que Let's Encrypt.
+ssl_letserr=Malheureusement, ce système ne peut pas demander de certificats à un fournisseur SSL : $1.
+ssl_letserr2=Vous pouvez également consulter la page configuration du module pour vous assurer que vous utilisez le chemin correct vers la commande client ACME configurée.
+
+ssl_letsdesc2=Le nouveau certificat remplacera celui actuellement configuré dans Webmin. Avant son émission, le fournisseur ACME doit vérifier le contrôle de chaque nom d'hôte à l'aide d'un fichier temporaire dans le répertoire des documents du site web ou d'un enregistrement DNS TXT temporaire.
ssl_subset=Ignorer les noms d’hôtes non vérifiables ?
-ssl_letsmode=Méthode de validation Let's Encrypt
+ssl_letsmode=méthode de validation de domaine
ssl_letsmode0=Hôte virtuel Apache correspondant au nom d'hôte
ssl_letsmode1=Hôte virtuel Apache sélectionné
ssl_letsmode2=Autre répertoire de documents du serveur Web
ssl_letsmode3=Validation DNS à l'aide de BIND
ssl_letsmode4=Serveur Web intégré Certbot
+ssl_staging=Serveur fournisseur
+ssl_staging0=Production
+ssl_staging1=Mise en scène (test uniquement)
+ssl_acmeopts=Paramètres du fournisseur
+ssl_acmeextra=Afficher les paramètres avancés
+ssl_acmedir=URL de répertoire ACME personnalisée
+ssl_acmedirdesc=Si cette option est activée, elle remplace le serveur fournisseur par défaut indiqué ci-dessus.
+ssl_acmekid=ID de clé de liaison de compte externe
+ssl_acmekiddesc=Facultatif. Certains fournisseurs ACME exigent cette information en plus de l'URL du répertoire.
+ssl_acmehmac=Clé HMAC de liaison de compte externe
+ssl_acmehmacdesc=Optionnel. Nécessite le client Certbot natif lorsqu'il est utilisé.
upgrade_repo=Dernière version du référentiel $1
upgrade_setup=Exécution du script setup.sh pour mettre à niveau Webmin ..
@@ -52,20 +70,20 @@ upgrade_setuppackage=Exécution de pkgadd pour mettre à niveau Webmin
session_blockhost=Bloquer les adresses IP client avec plus de $1 échecs de connexion pendant $2 secondes.
session_utmp=Enregistrer les connexions et les déconnexions dans utmp ?
+session_rpc_timeout=Délai d'expiration de la session RPC
+session_erpc_timeout=Le délai d'expiration de la session RPC est manquant ou doit être supérieur à 0
session_md5off=Déterminer automatiquement
session_md5on=Utiliser le format de hachage MD5
session_sha512=Utiliser le format de hachage SHA512
session_yescrypt=Utiliser le format de hachage yescrypt
session_emd5mod=Le format de hachage MD5 ne peut pas être utilisé car le module Perl $1 n'est pas installé
-session_esha512mod=Le format de hachage SHA512 ne peut pas être utilisé car le module Perl $1 n'est pas installé
-session_eyescrypt=Le format de hachage yescrypt ne peut pas être utilisé car le module Perl $1 n'est pas installé
+session_edigestcrypt=Le format de hachage $1 ne peut pas être utilisé, car la fonction crypt du système ne le prend pas en charge
session_passapi=Activer l'API de changement de mot de passe à distance ?
session_passapi0=API désactivée
session_passapi1=API activée pour les utilisateurs Unix
session_passurl=Lorsqu'il est activé, les mots de passe utilisateur peuvent être modifiés via une requête POST à $1
session_forgot=Autoriser la récupération du mot de passe oublié ?
session_eforgot=La récupération de mot de passe oublié ne peut être activée que si le module d'extension Récupération de mot de passe Virtualmin est préalablement supprimé. Cette opération est possible sur la page Modules Webmin.
-
session_passresetdesc=Limitation de la récupération du mot de passe
session_passreset=Bloquer les clients avec plus de $1 requêtes pendant $2 minutes
session_epassreset_failures=Demandes de blocage manquantes ou invalides
@@ -74,6 +92,11 @@ session_passtimeout=Le lien de réinitialisation du mot de passe expire dans $1
session_epassreset_timeout=Délai de réinitialisation du mot de passe manquant ou non valide
log_fixrepo=Référentiel Webmin fixe
+log_letsencrypt=J'ai demandé un nouveau certificat SSL à un fournisseur ACME
+log_letsencryptdns=Création d'un enregistrement DNS ACME pour $1
+log_letsencryptcleanup=Enregistrement DNS ACME supprimé pour $1
+
+themes_configure=Ouvrir la page de configuration du thème
themes_ok=Le thème a été modifié avec succès et la redirection est maintenant terminée ..
themes_ok2=La superposition de thème a été modifiée avec succès, la redirection est désormais effectuée ..
@@ -122,6 +145,7 @@ status_temp2=Collecter les températures du processeur et la vitesse des ventila
status_err=Échec de l'enregistrement de la collection d'états en arrière-plan
status_einterval=L'intervalle de collecte doit être un entier
+sendmail_name=Nom d'affichage
sendmail_toaddr=Adresse de destination par défaut pour les notifications
sendmail_to_def=Aucun ensemble
sendmail_etoaddr=Adresse de destination manquante ou mal formatée
@@ -143,10 +167,20 @@ web_redirssl=Rediriger SSL
twofactor_totp=Authentificateur TOTP
twofactor_qrcode=Saisissez le code secret $1 dans l'application TOTP ou scannez le code QR ci-dessous.
+twofactor_qrcode_manual=Saisissez le code secret $1 dans l'application TOTP et configurez-le manuellement, car la génération de code QR n'est pas prise en charge sur ce système.
twofactor_etotptoken=Le jeton TOTP doit être un nombre
+letsencrypt_title=Demande de certificat de fournisseur SSL
+letsencrypt_err=Échec de la demande de certificat
+letsencrypt_ecmds=Ni la commande client ACME native certbot ni la commande python n'ont été trouvées sur votre système
+letsencrypt_eacmedir=URL du répertoire ACME manquante ou invalide
+letsencrypt_eeabdir=Une URL d'annuaire ACME doit être saisie lors de l'utilisation de la liaison de compte externe
+letsencrypt_eeabpair=L'identifiant de la clé de liaison du compte externe et la clé HMAC doivent tous deux être saisis
+letsencrypt_eeabnative=La liaison de compte externe ne peut être utilisée que lorsque le client ACME natif est installé
letsencrypt_doingcertbot=Demande d'un nouveau certificat pour $1, à l'aide du serveur Web Certbot ..
-letsencrypt_eacmecertbot=Seul le client officiel Let's Encrypt prend en charge la validation Certbot
+letsencrypt_enative=Le client ACME natif (certbot) était utilisé précédemment sur ce système et doit être utilisé pour toutes les futures demandes de certificats
+letsencrypt_eacmedns=Seul le client ACME natif prend en charge la validation basée sur le DNS
+letsencrypt_eacmecertbot=Seul le client ACME natif prend en charge la validation Certbot
os_eol=Notification du compte à rebours du système d'exploitation EOL
os_eol_countdown=des mois avant
diff --git a/webmin/lang/hr.auto b/webmin/lang/hr.auto
index 388456dfc..2412ea703 100644
--- a/webmin/lang/hr.auto
+++ b/webmin/lang/hr.auto
@@ -340,7 +340,6 @@ ssl_essl=Čini se da perl modul Net::SSLeay nije instaliran na vašem sustavu. D
ssl_cpan=Alternativno, možete Webmin preuzeti i instalirati potreban Net::SSLeay Perl modul za vas.
ssl_emessage=Poruka pogreške Perla bila je : $1
ssl_desc1=Čini se da je domaćin na kojem radi Webmin instaliran SSLeay Perl modul. Koristeći to, Webmin podržava SSL šifriranu komunikaciju između preglednika i poslužitelja. Ako pristupate svom Webmin poslužitelju putem Interneta, tada bi svakako trebali razmotriti korištenje SSL-a kako biste spriječili da napadač uhvati vašu Webmin lozinku.
-ssl_desc2=Upozorenje - uključite SSL podršku samo ako imate preglednik koji podržava SSL i ako između preglednika i domaćina Webmin nema vatrozid koji blokira https zahtjeve.
ssl_header=SSL podrška
ssl_on=Želite li omogućiti SSL?
ssl_key=Datoteka privatnog ključa
@@ -351,6 +350,7 @@ ssl_deny=Verzije SSL protokola odbiti
ssl_compression=Dopuštate komprimirane SSL veze?
ssl_honorcipherorder=Prisilno korištenje poslužiteljski definiranog šifriranog reda?
ssl_extracas=Dodatne datoteke certifikata
(za lančane certifikate)
+ssl_enforce=Provođenje SSL-a
ssl_hsts=Nametnite SSL s HSTS zaglavljem
ssl_redirect=Preusmjeriti non-SSL zahtjeve na SSL način?
ssl_extracasdef=Isto je kao i globalne SSL postavke
@@ -410,7 +410,7 @@ ssl_tabcreate=Potvrdu o vlastitom potpisu
ssl_tabcsr=Zahtjev za potpisivanje potvrde
ssl_tabupload=Pošaljite potvrdu
ssl_tabcurrent=Trenutni certifikat
-ssl_tablets=Idemo Šifrirati
+ssl_tablets=Pružatelj SSL-a
ssl_cheader=Pojedinosti o trenutnom certifikatu
ssl_typeself=Samopotpisan
ssl_typereal=Potpisao CA
@@ -422,14 +422,14 @@ ssl_edownload=Nije uspjelo izdvajanje PEM podataka iz certifikata
ssl_csralready=Pogledajte najnoviji ključ i CSR ..
ssl_already1=Prethodno generirani privatni ključ :
ssl_already2=Prethodno generirani zahtjev za potpisivanje potvrde :
-ssl_letsdesc=Let's Encrypt je besplatno, automatizirano i otvoreno tijelo certifikata koje se može koristiti za generiranje SSL certifikata za korištenje od strane Webmin-a.
-ssl_letserr=Nažalost, Let's Encrypt ne može se koristiti u vašem sustavu: $1.
-ssl_letserr2=Alternativno, provjerite stranicu konfiguracije modula da biste osigurali da koristite ispravan put do naredbe letsencrypt.
-ssl_letsdesc2=Ova se stranica može koristiti za traženje novog certifikata, koji će prebrisati sve ostale trenutno konfigurirane u Webminu. Međutim, usluga Let's Encrypt zahtijeva da se vaše vlasništvo nad domenom certifikata potvrdi provjerom da li ovaj sustav ugošćuje web mjesto za domenu. To se postiže postavljanjem male privremene datoteke u direktorij dokumenata web mjesta.
+ssl_letsdesc=Ovaj obrazac vam omogućuje da zatražite pouzdani SSL certifikat za Webmin od ACME-kompatibilnog pružatelja usluga kao što je Let's Encrypt.
+ssl_letserr=Nažalost, ovaj sustav ne može zatražiti certifikate od SSL davatelja usluga: $1.
+ssl_letserr2=Alternativno, provjerite stranicu za konfiguraciju modula kako biste bili sigurni da koristite ispravnu putanju do konfigurirane naredbe ACME klijenta.
+ssl_letsdesc2=Novi certifikat zamijenit će onaj koji je trenutno konfiguriran u Webminu. Prije nego što se može izdati, ACME davatelj usluga mora provjeriti kontrolu nad svakim nazivom hosta koristeći privremenu datoteku u direktoriju dokumenata web-mjesta ili privremeni DNS TXT zapis.
ssl_letsheader=Opcije za novi SSL certifikat
ssl_letsdoms=Imena hosta za certifikat
ssl_subset=Preskočiti imena hostova koja se ne mogu provjeriti?
-ssl_letsmode=Metoda provjere valjanosti Let's Encrypt
+ssl_letsmode=Metoda validacije domene
ssl_letsmode0=Apache virtualni host koji odgovara nazivu hosta
ssl_letsmode1=Odabrani Apache virtualni host
ssl_letsmode2=Ostali direktorij dokumenata web poslužitelja
@@ -440,9 +440,17 @@ ssl_letsonly=Samo ažurirajte obnovu
ssl_usewebmin=Kopirate novi ključ i certifikat u Webmin?
ssl_letsrenew=Mjeseci između automatske obnove
ssl_letsnotrenew=Obnavljajte samo ručno
-ssl_staging=Hajde da šifriramo poslužitelj
-ssl_staging0=Stvaran
-ssl_staging1=Snimanje (samo test)
+ssl_staging=Poslužitelj davatelja usluga
+ssl_staging0=Proizvodnja
+ssl_staging1=Priprema (samo za testiranje)
+ssl_acmeopts=Postavke pružatelja usluga
+ssl_acmeextra=Prikaži napredne postavke
+ssl_acmedir=Prilagođeni URL ACME direktorija
+ssl_acmedirdesc=Ako je postavljeno, ovo poništava gore navedeni zadani poslužitelj pružatelja usluga.
+ssl_acmekid=ID ključa za povezivanje vanjskog računa
+ssl_acmekiddesc=Neobavezno. Neki ACME pružatelji usluga zahtijevaju ovo uz URL direktorija.
+ssl_acmehmac=HMAC ključ za povezivanje vanjskog računa
+ssl_acmehmacdesc=Neobavezno. Zahtijeva izvorni Certbot klijent prilikom korištenja.
newkey_err=Izrada SSL ključa nije uspjela
newkey_ecn=Nedostaje ili nevaljano ime poslužitelja
@@ -664,13 +672,14 @@ session_pmode0=Uvijek odbijajte korisnike s istečenim zaporkama
session_pmode1=Uvijek dopustite korisnicima kojima su lozinke istekle
session_pmode2=Zatražite korisnike s istečenim zaporkama da uđu novu
session_md5=Format kreiranja zaporke za Webmin
+session_rpc_timeout=Vremensko ograničenje RPC sesije
+session_erpc_timeout=Nedostaje vrijeme isteka RPC sesije ili mora biti broj veći od 0
session_md5off=Odredite automatski
session_md5on=Koristite MD5 format raspršivanja
session_sha512=Koristite SHA512 format raspršivanja
session_yescrypt=Koristite yescrypt format raspršivanja
session_emd5mod=MD5 format raspršivanja ne može se koristiti jer Perl $1 modul nije instaliran
-session_esha512mod=SHA512 format raspršivanja ne može se koristiti jer Perl $1 modul nije instaliran
-session_eyescrypt=yescrypt format raspršivanja ne može se koristiti jer Perl $1 modul nije instaliran
+session_edigestcrypt=Format hashiranja $1 ne može se koristiti jer ga sistemska funkcija crypt ne podržava
session_blocklock=Zaključajte i korisnike s neuspjelim prijavama
session_passapi=Omogućiti API za daljinsku promjenu lozinke?
session_passapi0=API onemogućen
@@ -746,13 +755,14 @@ log_delete_webmincron=Izbrisane su $1 zakazane funkcije
log_run_webmincron=Ran $1 zakazane funkcije
log_save_webmincron=Ažurirana zakazana funkcija u modulu $1
log_onedelete_webmincron=Izbrisana zakazana funkcija u modulu $1
-log_letsencrypt=Zatražen je novi SSL certifikat od Let's Encrypt
-log_letsencryptdns=Napravljeno šifrirajmo DNS zapis za $1
-log_letsencryptcleanup=Uklonjeno je Šifriraj DNS zapis za $1
+log_letsencrypt=Zatražen je novi SSL certifikat od ACME pružatelja usluga
+log_letsencryptdns=Izrađen ACME DNS zapis za $1
+log_letsencryptcleanup=Uklonjen ACME DNS zapis za $1
themes_title=Webmin teme
themes_desc=Teme kontroliraju izgled webminsog korisničkog sučelja, uključujući ikone, boje, pozadinu i izgled stranica. Okvir za odabir u nastavku može se koristiti za odabir jedne od tema instaliranih na vašem sustavu.
themes_sel=Trenutna tema :
+themes_configure=Otvori stranicu za konfiguraciju teme
themes_default=Stara tema Webmina
themes_none=Ništa - neka tema odluči
themes_change=Promijeniti
@@ -1104,6 +1114,7 @@ sendmail_authdef=Zadano (trenutno Cram-MD5)
sendmail_from=S adrese za e-poštu od Webmin-a
sendmail_fromdef=Zadano ($1)
sendmail_fromaddr=Adresa
+sendmail_name=Prikazni naziv
sendmail_toaddr=Zadana odredišna adresa za obavijesti
sendmail_to_def=Nije postavljeno
sendmail_etoaddr=Odredišna adresa nedostaje ili je pogrešno oblikovana
@@ -1205,6 +1216,7 @@ twofactor_enrolllink=Sada se možete prijaviti za dvofaktornu provjeru autentič
twofactor_url=Da biste saznali više o $1, pogledajte web stranicu na $2.
twofactor_etotpmodule=Perl modul $1 potreban za dvofaktorsku provjeru identiteta nije instaliran. Upotrijebite stranicu Perl moduli u Webminu kako biste je instalirali.
twofactor_qrcode=Unesite tajni kod $1 u TOTP aplikaciju ili skenirajte QR kod ispod.
+twofactor_qrcode_manual=Unesite tajni kod $1 u TOTP aplikaciju i postavite ga ručno jer generiranje QR koda nije podržano na ovom sustavu.
twofactor_etotpid=Nevaljana tajna TOTP kodirana na bazi32
twofactor_etotptoken=TOTP token mora biti broj
twofactor_etotpmatch=Neispravan OTP kôd
@@ -1214,9 +1226,9 @@ twofactor_secret0=Upotrijebite tipku od 16 znakova
twofactor_esecret=Tajni ključ mora biti tačan 16 znakova i sadrži samo slova i brojeve
twofactor_esession=Dvofaktorska provjera autentičnosti ne može se koristiti ako nije aktivna provjera autentičnosti na sesiji
-letsencrypt_title=Idemo šifrirati zahtjev certifikata
-letsencrypt_err=Zatraživanje certifikata nije uspjelo
-letsencrypt_ecmds=U vašem sustavu nisu pronađene naredba Let's Encrypt client certbot niti naredba python.
+letsencrypt_title=Zahtjev za SSL certifikat pružatelja usluga
+letsencrypt_err=Zahtjev za certifikat nije uspio
+letsencrypt_ecmds=Ni izvorna ACME klijentska naredba certbot ni naredba python nisu pronađene na vašem sustavu
letsencrypt_epythonmod=Python modul $1 potreban ugrađenom klijentu Encrypt klijent nije instaliran
letsencrypt_epythonver=Nije uspjelo nabaviti verziju Pythona : $1
letsencrypt_epythonver2=Potrebna je inačica Pythona $1 ili novije verzije, ali imate samo verziju $2.
@@ -1224,6 +1236,10 @@ letsencrypt_certbot=Certbot
letsencrypt_edroot=Apacheov virtualni domaćin $1 nema direktorij dokumenata!
letsencrypt_edom=Nedostaje ili nevažeće ime domene
letsencrypt_erenew=Nedostaje ili ne-numerički interval obnove
+letsencrypt_eacmedir=Nedostaje ili je nevažeći URL ACME direktorija
+letsencrypt_eeabdir=Prilikom korištenja povezivanja vanjskog računa potrebno je unijeti URL ACME direktorija
+letsencrypt_eeabpair=Moraju se unijeti i ID ključa za povezivanje vanjskog računa i HMAC ključ
+letsencrypt_eeabnative=Povezivanje vanjskog računa može se koristiti samo kada je instaliran izvorni ACME klijent
letsencrypt_ewebroot=Imenik dokumenata web stranice ne postoji
letsencrypt_evhost=Nije pronađen nijedan virtualni host podudaranja $1
letsencrypt_efull=Očekivana potpuna datoteka certifikata $1 nije pronađena
@@ -1246,9 +1262,9 @@ letsencrypt_echain=Preuzimanje mrežnog certifikata nije uspjelo : $1
letsencrypt_echain2=Lančani certifikat preuzet s $1 je prazan
letsencrypt_ecsr=Generiranje CSR-a nije uspjelo : $1
letsencrypt_ekeygen=Generiranje privatnog ključa nije uspjelo : $1
-letsencrypt_enative=Izvorni klijent Let's Encrypt klijent (certbot) prethodno se koristio u ovom sustavu i mora se koristiti za sve buduće zahtjeve certifikata.
-letsencrypt_eacmedns=Samo službeni klijent Let's Encrypt klijent podržava provjeru utemeljenu na DNS-u
-letsencrypt_eacmecertbot=Samo službeni Let's Encrypt klijent podržava Certbot provjeru valjanosti
+letsencrypt_enative=Izvorni ACME klijent (certbot) prethodno je korišten na ovom sustavu i mora se koristiti za sve buduće zahtjeve za certifikatom
+letsencrypt_eacmedns=Samo izvorni ACME klijent podržava validaciju temeljenu na DNS-u
+letsencrypt_eacmecertbot=Samo izvorni ACME klijent podržava Certbot validaciju
announce_hide=Sakrij ovu najavu
alert_hide=Sakrij upozorenje
diff --git a/webmin/lang/hu b/webmin/lang/hu
index 02c7fa5f4..0fc4bc5bc 100644
--- a/webmin/lang/hu
+++ b/webmin/lang/hu
@@ -95,7 +95,6 @@ lang_ok=Nyelvezet változtatása
ssl_title=SSL titkosítás
ssl_desc1=A hoszton, amelyen a Webmin fut, fellelhető az SSLeay Perl modul telepített változata. Ennek használatával a Webmin támogatni fogja a titkosított kommunikációt a böngésző és a kiszolgáló között. Ha Ön a Webmin kiszolgálóját az Internet-en keresztül haszálja, akkor különösen ajánlott az SSL használata, mellyel megakadályozható egy esetleges támadó abban, hogy elcsípje az Ön Webmin jelszavát.
-ssl_desc2=Figyelem! Csak akkor kapcsolja be az SSL támogatást, ha van olyan böngészője, amely támogatja az SSL-t (mint például a Netscape vagy az Internet Explorer), és nincs olyan tűzfal, amely blokkolja a https kéréseket az Ön böngészője és a Webmin hosztja között.
ssl_header=SSL támogatás
startpage_title=Index oldali opciók
diff --git a/webmin/lang/hu.auto b/webmin/lang/hu.auto
index 0928eb929..4b3724dd6 100644
--- a/webmin/lang/hu.auto
+++ b/webmin/lang/hu.auto
@@ -263,6 +263,7 @@ ssl_deny=Az elutasítandó SSL protokoll verziók
ssl_compression=Engedélyezi a tömörített SSL-kapcsolatokat?
ssl_honorcipherorder=Kényszeríti a kiszolgáló által definiált titkosítási sorrend használatát?
ssl_extracas=További tanúsítványfájlok
(láncolt tanúsítványokhoz)
+ssl_enforce=SSL-kód kikényszerítése
ssl_hsts=SSL kényszerítése HSTS fejléccel
ssl_redirect=Nem SSL kéréseket átirányítani SSL módba?
ssl_extracasdef=Ugyanaz, mint a globális SSL-beállítások
@@ -322,7 +323,7 @@ ssl_tabcreate=Önaláírt tanúsítvány
ssl_tabcsr=Tanúsítvány aláírási igény
ssl_tabupload=Töltse fel a tanúsítványt
ssl_tabcurrent=Jelenlegi tanúsítvány
-ssl_tablets=Titkosítsuk
+ssl_tablets=SSL-szolgáltató
ssl_cheader=A jelenlegi tanúsítvány részletei
ssl_typeself=Önaláíró
ssl_typereal=CA aláírása
@@ -334,14 +335,14 @@ ssl_edownload=Nem sikerült kivonni a PEM-adatokat a tanúsítványból
ssl_csralready=A legfrissebb kulcs és a CSR megtekintése.
ssl_already1=Korábban generált privát kulcs :
ssl_already2=Korábban generált tanúsítvány aláírási kérelem :
-ssl_letsdesc=A Let's Encrypt egy ingyenes, automatizált és nyílt tanúsítási jogosultság, amely felhasználható SSL tanúsítvány előállítására a Webmin számára.
-ssl_letserr=Sajnos a Let's Encrypt nem használható a rendszerén: $1.
-ssl_letserr2=Alternatív megoldásként ellenőrizze a modulkonfiguráció oldalt, hogy megbizonyosodjon arról, hogy a letsencrypt parancs helyes elérési útját használja-e.
-ssl_letsdesc2=Ez az oldal felhasználható új tanúsítvány igénylésére, amely felülírja a Webminben jelenleg konfigurált összes többi felhasználót. A Let's Encrypt szolgáltatás azonban megköveteli, hogy a tanúsítási tartomány tulajdonjogát ellenőrizze annak ellenőrzésével, hogy ez a rendszer üzemelteti-e a domain webhelyét. Ez úgy történik, hogy egy kis ideiglenes fájlt helyez a weboldal dokumentumkönyvtárába.
+ssl_letsdesc=Ez az űrlap lehetővé teszi, hogy megbízható SSL-tanúsítványt igényeljen a Webminhez egy ACME-kompatibilis szolgáltatótól, például a Let's Encrypt-től.
+ssl_letserr=Sajnos ez a rendszer nem tud tanúsítványokat kérni a következő SSL-szolgáltatótól: $1.
+ssl_letserr2=Másik lehetőségként ellenőrizze a modulkonfiguráció oldalt, és győződjön meg arról, hogy a konfigurált ACME kliensparancs helyes elérési útját használja.
+ssl_letsdesc2=Az új tanúsítvány felülírja a Webminben jelenleg konfiguráltat. A kibocsátás előtt az ACME-szolgáltatónak ellenőriznie kell az egyes hostnevek feletti felügyeletet a webhely dokumentumkönyvtárában található ideiglenes fájl vagy egy ideiglenes DNS TXT rekord segítségével.
ssl_letsheader=Új SSL tanúsítvány lehetőségei
ssl_letsdoms=A tanúsítvány gazdanevei
ssl_subset=Kihagyja az ellenőrizhetetlen gazdagépneveket?
-ssl_letsmode=Titkosítsuk az érvényesítési módszert
+ssl_letsmode=Domain-érvényesítési módszer
ssl_letsmode0=Apache virtuális gazdagép megfelel a gazdagépnévnek
ssl_letsmode1=Kiválasztott Apache virtuális gazdagép
ssl_letsmode2=Egyéb webszerver dokumentumkönyvtár
@@ -352,9 +353,17 @@ ssl_letsonly=Csak frissítse a megújítást
ssl_usewebmin=Másolja az új kulcsot és a tanúsítványt a Webminbe?
ssl_letsrenew=Az automatikus megújítás közötti hónapok
ssl_letsnotrenew=Csak manuálisan kell megújítani
-ssl_staging=Titkosítsuk a szervert
-ssl_staging0=Igazi
-ssl_staging1=Szakasz (csak teszt)
+ssl_staging=Szolgáltatói szerver
+ssl_staging0=Termelés
+ssl_staging1=Beállítás (csak teszt)
+ssl_acmeopts=Szolgáltatói beállítások
+ssl_acmeextra=Speciális beállítások megjelenítése
+ssl_acmedir=Egyéni ACME könyvtár URL-címe
+ssl_acmedirdesc=Ha be van állítva, ez felülírja a fenti alapértelmezett szolgáltatói szervert.
+ssl_acmekid=Külső fiók kötési kulcs azonosítója
+ssl_acmekiddesc=Opcionális. Néhány ACME-szolgáltató ezt a könyvtár URL-címe mellett megköveteli.
+ssl_acmehmac=Külső fiókhoz kötés HMAC-kulcs
+ssl_acmehmacdesc=Opcionális. Használatához a natív Certbot kliens szükséges.
newkey_err=Nem sikerült létrehozni az SSL kulcsot
newkey_ecn=Hiányzó vagy érvénytelen szervernév
@@ -571,13 +580,14 @@ session_pmode0=Mindig tagadja meg a lejárt jelszavakkal rendelkező felhasznál
session_pmode1=Mindig engedélyezze a lejárt jelszavakkal rendelkező felhasználókat
session_pmode2=A lejárt jelszavakkal rendelkező felhasználókat kérjen új beírására
session_md5=Webmin jelszó-kivonási formátum
+session_rpc_timeout=RPC munkamenet időtúllépése
+session_erpc_timeout=Az RPC munkamenet időkorlátja hiányzik, vagy 0-nál nagyobb számnak kell lennie
session_md5off=Határozza meg automatikusan
session_md5on=Használjon MD5 kivonatformátumot
session_sha512=Használjon SHA512 kivonatformátumot
session_yescrypt=Használjon yescrypt kivonatolási formátumot
session_emd5mod=Az MD5 kivonatolási formátum nem használható, mivel a Perl $1 modul nincs telepítve
-session_esha512mod=Az SHA512 kivonatformátum nem használható, mivel a Perl $1 modul nincs telepítve
-session_eyescrypt=A yescrypt kivonatformátum nem használható, mivel a Perl $1 modul nincs telepítve
+session_edigestcrypt=A(z) $1 hashelési formátum nem használható, mert a rendszer crypt függvénye nem támogatja
session_blocklock=Zárja be a sikertelen bejelentkezéssel rendelkező felhasználókat is
session_passapi=Engedélyezi a távoli jelszó -módosító API -t?
session_passapi0=Az API letiltva
@@ -653,13 +663,14 @@ log_delete_webmincron=Törölt $1 ütemezett függvények
log_run_webmincron=A $1 ütemezett függvényeket futtatta
log_save_webmincron=Frissített ütemezett funkció a $1 modulban
log_onedelete_webmincron=Törölt ütemezett funkció a $1 modulból
-log_letsencrypt=Új SSL tanúsítványt kért a Let's Encrypttől
-log_letsencryptdns=Létrehoztuk a Encrypt DNS rekordot a $1 számára
-log_letsencryptcleanup=Eltávolítva Titkosítsuk a $1 DNS-rekordját
+log_letsencrypt=Új SSL-tanúsítványt kértem egy ACME-szolgáltatótól
+log_letsencryptdns=ACME DNS-rekord létrehozva ehhez: $1
+log_letsencryptcleanup=ACME DNS rekord eltávolítva ehhez: $1
themes_title=Webmin témák
themes_desc=A témák szabályozzák a Webmin felhasználói felületének megjelenését, beleértve az ikonokat, a színeket, a hátteret és az oldalak elrendezését. Az alábbi választómező segítségével kiválaszthatja a rendszerre telepített témákat.
themes_sel=Aktuális téma :
+themes_configure=Téma konfigurációs oldalának megnyitása
themes_default=Régi Webmin téma
themes_none=Nincs - hagyja, hogy a téma döntsön
themes_change=változás
@@ -1011,6 +1022,7 @@ sendmail_authdef=Alapértelmezett (jelenleg Cram-MD5)
sendmail_from=A Webmin e-mail címétől
sendmail_fromdef=Alapértelmezett ($1)
sendmail_fromaddr=Cím
+sendmail_name=Megjelenített név
sendmail_toaddr=Az értesítések alapértelmezett célcíme
sendmail_to_def=Nincs beállítva
sendmail_etoaddr=Hiányzó vagy helytelenül formázott célcím
@@ -1112,6 +1124,7 @@ twofactor_enrolllink=Most regisztrálhat kétfaktoros hitelesítésre a $2 webhelyen.
twofactor_etotpmodule=A két tényezőhitelesítéshez szükséges $1 Perl modul nincs telepítve. A Webmin Perl-modulok oldalával telepítse.
twofactor_qrcode=Írja be a titkos kódot $1 a TOTP alkalmazásban, vagy olvassa be az alábbi QR-kódot.
+twofactor_qrcode_manual=Írd be a $1 titkos kódot a TOTP alkalmazásba, és állítsd be manuálisan, mivel a QR-kód generálása nem támogatott ezen a rendszeren.
twofactor_etotpid=Érvénytelen TOTP base32-kódolású titok
twofactor_etotptoken=A TOTP tokennek számnak kell lennie
twofactor_etotpmatch=Helytelen OTP kód
@@ -1121,9 +1134,9 @@ twofactor_secret0=Használjon 16 karakterből álló billentyűt
twofactor_esecret=A titkos kulcsnak pontosan 16 karakter hosszúnak kell lennie, és csak betűket és számokat tartalmazhat
twofactor_esession=Két tényezős hitelesítés csak akkor használható, ha a munkamenet-alapú hitelesítés aktív
-letsencrypt_title=Titkosítsuk a tanúsítványkérést
+letsencrypt_title=SSL-szolgáltatói tanúsítványigénylés
letsencrypt_err=Nem sikerült tanúsítványt kérni
-letsencrypt_ecmds=Sem a certbot, sem a python parancsot nem titkosítottuk az ügyfélnek a rendszeren.
+letsencrypt_ecmds=Sem a natív ACME kliensparancs, certbot, sem a python parancs nem található a rendszeren
letsencrypt_epythonmod=A beépített Let's Encrypt kliens számára szükséges $1 Python modul nincs telepítve
letsencrypt_epythonver=Nem sikerült beolvasni a Python verziót : $1
letsencrypt_epythonver2=A $1 vagy újabb Python verzióra van szükség, de csak a $2 verzióval rendelkezik.
@@ -1131,6 +1144,10 @@ letsencrypt_certbot=Certbot
letsencrypt_edroot=Az Apache virtuális gazdagépen $1 nincs dokumentum könyvtár!
letsencrypt_edom=Hiányzó vagy érvénytelen domain név
letsencrypt_erenew=Hiányzó vagy nem numerikus megújítási intervallum
+letsencrypt_eacmedir=Hiányzó vagy érvénytelen ACME könyvtár URL-címe
+letsencrypt_eeabdir=Külső fiókkötés használatakor ACME könyvtár URL-címét kell megadni
+letsencrypt_eeabpair=Mind a külső fiókhoz kötési kulcs azonosítóját, mind a HMAC kulcsot meg kell adni
+letsencrypt_eeabnative=A külső fiókkötés csak akkor használható, ha a natív ACME kliens telepítve van
letsencrypt_ewebroot=A webhely dokumentumkönyvtára nem létezik
letsencrypt_evhost=Nem található a $1 megfelelő virtuális gazdagép
letsencrypt_efull=A várt teljes tanúsítványfájl $1 nem található
@@ -1153,9 +1170,9 @@ letsencrypt_echain=Nem sikerült letölteni a láncolott tanúsítványt : $1
letsencrypt_echain2=A $1 oldalról letöltött láncolt tanúsítvány üres
letsencrypt_ecsr=A CSR létrehozása nem sikerült : $1
letsencrypt_ekeygen=Nem sikerült létrehozni a privát kulcsot : $1
-letsencrypt_enative=A natív Let's Encrypt klienst (certbot) korábban használták a rendszerben, és azt minden jövőbeli tanúsítványkéréshez használni kell
-letsencrypt_eacmedns=Csak a hivatalos Let's Encrypt kliens támogatja a DNS-alapú érvényesítést
-letsencrypt_eacmecertbot=Csak a hivatalos Let's Encrypt kliens támogatja a Certbot érvényesítését
+letsencrypt_enative=A natív ACME klienst (certbot) korábban ezen a rendszeren használták, és minden jövőbeli tanúsítványkérésnél ezt kell használni
+letsencrypt_eacmedns=Csak a natív ACME kliens támogatja a DNS-alapú validációt
+letsencrypt_eacmecertbot=Csak a natív ACME kliens támogatja a Certbot validációt
announce_hide=Elrejteni ezt a bejelentést
alert_hide=Alert elrejtése
diff --git a/webmin/lang/it b/webmin/lang/it
index 3780a68e0..c9a5818b0 100644
--- a/webmin/lang/it
+++ b/webmin/lang/it
@@ -284,7 +284,6 @@ ssl_essl=Il modulo Perl Net::SSLeay non sembra essere installato. E' possibile i
ssl_cpan=Alternativamente è possibile consentire a Webmin di scaricare e installare il modulo Perl Net:SSLeay richiesto.
ssl_emessage=Il messaggio di errore da Perl è: $1
ssl_desc1=Sull'host su cui Webmin sta girando sembra essere installato il modulo Perl SSLeay. Utilizzandolo, Webmin supporta la comunicazione crittata tra il tuo browser ed il server. Se stai utilizzando il tuo server Webmin su Internet, dovresti decisamente considerare questa opzione per impedire ad un malintenzionatodi scoprire la tua password per accedere a Webmin.
-ssl_desc2=Attenzione - abilita il supporto SSL solo se il tuo browser lo prevede ( come ad esempio Netscape o IE), e se non è presente un firewall che impedisce le richieste https tra il tuo browser e l'host Webmin.
ssl_header=Supporto SSL
ssl_on=Abilitare SSL se disponibile?
ssl_key=File della chiave privata:
diff --git a/webmin/lang/it.auto b/webmin/lang/it.auto
index fb08df8c9..b0f77f474 100644
--- a/webmin/lang/it.auto
+++ b/webmin/lang/it.auto
@@ -65,6 +65,7 @@ lang_dateformat_yyyy/mm/dd=aaaa/mm/gg (ovvero 16/09/2001)
ssl_deny=Versioni del protocollo SSL da rifiutare
ssl_compression=Consenti connessioni SSL compresse?
ssl_honorcipherorder=Forzare l'uso dell'ordine di cifratura definito dal server?
+ssl_enforce=Applicare SSL
ssl_hsts=Applica SSL con intestazione HSTS
ssl_extracasdef=Come le impostazioni SSL globali
ssl_extracasnone=Nessuno per questo indirizzo IP
@@ -86,19 +87,19 @@ ssl_privchain=Testo certificato incatenato
ssl_nochain=Nessun certificato incatenato
ssl_leavechain=Usa certificato incatenato esistente
ssl_tabcsr=Richiesta di firma del certificato
-ssl_tablets=Crittografiamo
+ssl_tablets=Fornitore SSL
ssl_csralready=Visualizza la chiave e il CSR più recenti.
ssl_already1=Chiave privata precedentemente generata :
ssl_already2=Richiesta di firma del certificato generata in precedenza :
-ssl_letsdesc=Let's Encrypt è un'autorità di certificazione libera, automatizzata e aperta che può essere utilizzata per generare un certificato SSL per l'utilizzo da parte di Webmin.
-ssl_letserr=Sfortunatamente, Let's Encrypt non può essere usato sul tuo sistema: $1.
-ssl_letserr2=In alternativa, controlla la pagina configurazione del modulo per assicurarti di utilizzare il percorso corretto al comando letsencrypt.
+ssl_letsdesc=Questo modulo consente di richiedere un certificato SSL affidabile per Webmin da un provider compatibile con ACME, come ad esempio Let's Encrypt.
+ssl_letserr=Purtroppo, questo sistema non può richiedere certificati a un provider SSL: $1.
+ssl_letserr2=In alternativa, controlla la pagina configurazione del modulo per assicurarti di utilizzare il percorso corretto per il comando client ACME configurato.
-ssl_letsdesc2=Questa pagina può essere utilizzata per richiedere un nuovo certificato, che sovrascriverà qualsiasi altro attualmente configurato in Webmin. Tuttavia, il servizio Let's Encrypt richiede che la proprietà del dominio del certificato sia convalidata controllando che questo sistema ospita il sito Web per il dominio. Questo viene fatto inserendo un piccolo file temporaneo nella directory dei documenti del sito Web.
+ssl_letsdesc2=Il nuovo certificato sostituirà quello attualmente configurato in Webmin. Prima di poterlo emettere, il provider ACME deve verificare il controllo di ciascun hostname utilizzando un file temporaneo nella directory dei documenti del sito web oppure un record DNS TXT temporaneo.
ssl_letsheader=Opzioni per il nuovo certificato SSL
ssl_letsdoms=Nomi host per certificato
ssl_subset=Vuoi ignorare i nomi host non verificabili?
-ssl_letsmode=Crittifichiamo il metodo di convalida
+ssl_letsmode=Metodo di convalida del dominio
ssl_letsmode0=Host virtuale Apache corrispondente al nome host
ssl_letsmode1=Host virtuale Apache selezionato
ssl_letsmode2=Altra directory di documenti del server web
@@ -109,9 +110,17 @@ ssl_letsonly=Basta aggiornare il rinnovo
ssl_usewebmin=Copia nuova chiave e certificato su Webmin?
ssl_letsrenew=Mesi tra il rinnovo automatico
ssl_letsnotrenew=Rinnova solo manualmente
-ssl_staging=Let's Encrypt server
-ssl_staging0=Vero
-ssl_staging1=Staging (solo test)
+ssl_staging=Server del fornitore
+ssl_staging0=Produzione
+ssl_staging1=Fase di test (solo prova)
+ssl_acmeopts=Impostazioni del provider
+ssl_acmeextra=Mostra le impostazioni avanzate
+ssl_acmedir=URL di directory ACME personalizzato
+ssl_acmedirdesc=Se impostato, questo parametro sovrascrive il server provider predefinito indicato sopra.
+ssl_acmekid=ID chiave di associazione account esterno
+ssl_acmekiddesc=Facoltativo. Alcuni provider ACME richiedono questa informazione in aggiunta all'URL della directory.
+ssl_acmehmac=Chiave HMAC per l'associazione dell'account esterno
+ssl_acmehmacdesc=Opzionale. Richiede il client nativo di Certbot quando utilizzato.
newkey_ecns=Nessun nome di server inserito
@@ -162,13 +171,14 @@ session_cmddef0=Cambia password con comando:
session_ecmd=Comando di modifica password mancante o non valido
session_banner=Banner pre-login
session_md5=Formato di hashing della password di Webmin
+session_rpc_timeout=Timeout della sessione RPC
+session_erpc_timeout=Il timeout della sessione RPC non è presente oppure deve essere un numero maggiore di 0
session_md5off=Determina automaticamente
session_md5on=Usa il formato hash MD5
session_sha512=Usa il formato hash SHA512
session_yescrypt=Usa il formato hash yescrypt
session_emd5mod=Impossibile utilizzare il formato hash MD5, poiché il modulo Perl $1 non è installato
-session_esha512mod=Impossibile utilizzare il formato hash SHA512, poiché il modulo Perl $1 non è installato
-session_eyescrypt=Il formato hash yescrypt non può essere utilizzato, poiché il modulo Perl $1 non è installato
+session_edigestcrypt=Il formato di hashing $1 non può essere utilizzato perché la funzione crypt del sistema non lo supporta
session_blocklock=Blocca anche gli utenti con accessi non riusciti
session_passapi=Abilitare l'API per la modifica della password remota?
session_passapi0=API disabilitata
@@ -195,10 +205,11 @@ log_delete_webmincron=Eliminate le funzioni pianificate $1
log_run_webmincron=Ran $1 funzioni pianificate
log_save_webmincron=Funzione pianificata aggiornata nel modulo $1
log_onedelete_webmincron=Funzione pianificata eliminata nel modulo $1
-log_letsencrypt=Richiesto nuovo certificato SSL da Let's Encrypt
-log_letsencryptdns=Creato Crittografiamo il record DNS per $1
-log_letsencryptcleanup=Rimosso Let's Encrypt record DNS per $1
+log_letsencrypt=Richiesta di un nuovo certificato SSL a un provider ACME
+log_letsencryptdns=Creato record DNS ACME per $1
+log_letsencryptcleanup=Record DNS ACME rimosso per $1
+themes_configure=Apri la pagina di configurazione del tema
themes_none=Nessuno: lascia decidere il tema
themes_overdesc=Le sovrapposizioni modificano l'aspetto di un tema, cambiando i colori, gli sfondi e le icone. Non cambiano il layout.
themes_overlay=Sovrapposizione corrente :
@@ -375,6 +386,7 @@ sendmail_authdef=Predefinito (attualmente Cram-MD5)
sendmail_from=Dall'indirizzo per e-mail da Webmin
sendmail_fromdef=Predefinito ($1)
sendmail_fromaddr=Indirizzo
+sendmail_name=Nome da visualizzare
sendmail_toaddr=Indirizzo di destinazione predefinito per le notifiche
sendmail_to_def=Nessuno impostato
sendmail_etoaddr=Indirizzo di destinazione mancante o formattato in modo errato
@@ -476,6 +488,7 @@ twofactor_enrolllink=Ora puoi registrarti per l'autenticazione a due fattori nel
twofactor_url=Per ulteriori informazioni su $1, consulta il sito Web $2.
twofactor_etotpmodule=Il modulo Perl $1 necessario per l'autenticazione a due fattori non è installato. Utilizzare la pagina moduli Perl in Webmin per installarlo.
twofactor_qrcode=Inserisci il codice segreto $1 nell'app TOTP oppure scansiona il codice QR qui sotto.
+twofactor_qrcode_manual=Inserisci il codice segreto $1 nell'app TOTP e configuralo manualmente, poiché la generazione di codici QR non è supportata su questo sistema.
twofactor_etotpid=Segreto codificato TOTP base32 non valido
twofactor_etotptoken=Il token TOTP deve essere un numero
twofactor_etotpmatch=Codice OTP errato
@@ -485,9 +498,9 @@ twofactor_secret0=Utilizzare un tasto di 16 caratteri
twofactor_esecret=La chiave segreta deve contenere esattamente 16 caratteri e contenere solo lettere e numeri
twofactor_esession=L'autenticazione a due fattori non può essere utilizzata se non è attiva l'autenticazione basata sulla sessione
-letsencrypt_title=Crittografiamo la richiesta di certificato
-letsencrypt_err=Richiesta del certificato non riuscita
-letsencrypt_ecmds=Né il comando client Let's Encrypt certbot né il comando python sono stati trovati sul tuo sistema
+letsencrypt_title=Richiesta di certificato del provider SSL
+letsencrypt_err=Impossibile richiedere il certificato
+letsencrypt_ecmds=Sul tuo sistema non sono stati trovati né il comando client nativo ACME certbot né il comando python
letsencrypt_epythonmod=Il modulo Python $1 necessario al client Let's Encrypt integrato non è installato
letsencrypt_epythonver=Impossibile ottenere la versione di Python : $1
letsencrypt_epythonver2=È richiesta la versione Python $1 o successiva, ma hai solo la versione $2.
@@ -495,6 +508,10 @@ letsencrypt_certbot=Certbot
letsencrypt_edroot=L'host virtuale Apache $1 non ha directory di documenti!
letsencrypt_edom=Nome di dominio mancante o non valido
letsencrypt_erenew=Intervallo di rinnovo mancante o non numerico
+letsencrypt_eacmedir=URL della directory ACME mancante o non valido
+letsencrypt_eeabdir=Quando si utilizza il collegamento ad account esterni, è necessario inserire l'URL della directory ACME
+letsencrypt_eeabpair=Sia l'ID della chiave di associazione dell'account esterno che la chiave HMAC devono essere inseriti
+letsencrypt_eeabnative=Il collegamento ad account esterni può essere utilizzato solo quando è installato il client ACME nativo
letsencrypt_ewebroot=La directory dei documenti del sito Web non esiste
letsencrypt_evhost=Nessun host virtuale corrispondente $1 trovato
letsencrypt_efull=Il file di certificato completo previsto $1 non è stato trovato
@@ -517,9 +534,9 @@ letsencrypt_echain=Impossibile scaricare il certificato incatenato : $1
letsencrypt_echain2=Il certificato concatenato scaricato da $1 è vuoto
letsencrypt_ecsr=Generazione CSR non riuscita : $1
letsencrypt_ekeygen=Generazione della chiave privata non riuscita : $1
-letsencrypt_enative=Il client Let's Encrypt nativo (certbot) è stato utilizzato in precedenza su questo sistema e deve essere utilizzato per tutte le richieste di certificati future
-letsencrypt_eacmedns=Solo il client Let's Encrypt ufficiale supporta la convalida basata su DNS
-letsencrypt_eacmecertbot=Solo il client ufficiale Let's Encrypt supporta la convalida Certbot
+letsencrypt_enative=Il client ACME nativo (certbot) è stato utilizzato in precedenza su questo sistema e deve essere utilizzato per tutte le future richieste di certificati
+letsencrypt_eacmedns=Solo il client ACME nativo supporta la convalida basata su DNS
+letsencrypt_eacmecertbot=Solo il client nativo ACME supporta la convalida Certbot
announce_hide=Nascondi questo annuncio
alert_hide=Nascondi avviso
diff --git a/webmin/lang/ja b/webmin/lang/ja
index 84c190156..1f0e8500a 100644
--- a/webmin/lang/ja
+++ b/webmin/lang/ja
@@ -315,7 +315,6 @@ ssl_essl=Perl モジュール Net::SSLeay がインストールされていま
ssl_cpan=または、Webmin から Net::SSLeay をダウンロードとインストールすることもできます。
ssl_emessage=Perl からのエラーメッセージ : $1
ssl_desc1=Webmin が実行されているこのホストには、SSLeay という Perl モジュールがインストールされているようです。このモジュールを使用すると、Webmin はブラウザとサーバ間の TLS/SSL (暗号化)通信をサポートします。インターネット経由で Webmin サーバにアクセスしている場合は、攻撃者が Webmin のパスワードの取得を防ぐために TLS を使用すべきです。
-ssl_desc2=警告 - 暗号化通信をサポートするブラウザを使用していて、ブラウザと Webmin ホスト間の https リクエストをブロックするファイアウォールがない場合にのみ、暗号化通信をオンにしてください。
ssl_header=SSL のサポート
ssl_on=SSL を使用
ssl_key=秘密鍵ファイル
@@ -384,7 +383,6 @@ ssl_tabcreate=自己署名証明書
ssl_tabcsr=証明書署名リクエスト
ssl_tabupload=証明書のアップロード
ssl_tabcurrent=証明書の表示
-ssl_tablets=Let's Encrypt
ssl_cheader=現在の証明書情報
ssl_typeself=自己署名 (self-signed)
ssl_typereal=CAによる署名
@@ -396,10 +394,6 @@ ssl_edownload=証明書から PEM データの変換に失敗しました
ssl_csralready=最新の鍵と CSR を表示…
ssl_already1=前回生成した秘密鍵 :
ssl_already2=前回生成した証明書署名要求 :
-ssl_letsdesc=Let's Encrypt は無料で利用できる自動化されたオープンな認証局であり、Webmin で使用する SSL 証明書を生成できます。
-ssl_letserr=残念ながら、このシステムでは Let's Encrypt を使用する事ができません : $1
-ssl_letserr2=モジュールの設定を開き、letsencrypt コマンドのパスが正しく設定されているか確認してください。
-ssl_letsdesc2=新しい証明書を要求できますが、取得した証明書を使って、現在 Webmin で設定されている他の証明書を上書きします。また、Let's Encrypt が証明書を発行する際は、ドメインの所有権を検証する作業として、対象のWebサイトをホストしていることを確認します。これは、確認用のディレクトリと小さな一時ファイルを配置してWebサイトから閲覧できることで検証されます。
ssl_letsheader=Let's Encrypt の設定
ssl_letsdoms=証明書に記載するホスト名
ssl_letsok=証明書を要求
@@ -407,9 +401,6 @@ ssl_letsonly=今すぐ更新
ssl_usewebmin=新しい鍵と証明書を Webmin にコピーする
ssl_letsrenew=自動更新(月)
ssl_letsnotrenew=手動で更新
-ssl_staging=Let's Encrypt サーバ
-ssl_staging0=通常
-ssl_staging1=ステージング(開発・テスト用)
newkey_err=SSL 鍵の作成に失敗しました
newkey_ecn=使用できないサーバ名です
@@ -690,9 +681,6 @@ log_delete_webmincron=$1 スケジュール機能を削除しました
log_run_webmincron=$1 スケジュールされた関数を実行しました
log_save_webmincron=モジュール $1 のスケジュールされた機能を変更しました
log_onedelete_webmincron=モジュール $1 のスケジュールされた関数を削除しました
-log_letsencrypt=Let's Encrypt に新しい SSL 証明書を要求しました
-log_letsencryptdns=Let's Encrypt の検証に利用する DNS レコード $1 を作成しました
-log_letsencryptcleanup=Let's Encrypt の検証に利用する DNS レコード $1 を削除しました
themes_title=Webmin テーマ
themes_desc=テーマは、アイコンや色、背景、ページのレイアウトなど、Webmin ユーザインターフェースの外観を制御します。以下の選択ボックスを使って、システムにインストールされているテーマの中から 1 つ選ぶことができます。
@@ -1104,9 +1092,6 @@ twofactor_secret0=16 文字のキーを使用
twofactor_esecret=秘密鍵は正確に 16 文字の英数字で組み合わせる必要があります
twofactor_esession=セッション認証が有効になっていない場合は、2 ファクタ認証は使用できません
-letsencrypt_title=Let's Encrypt 証明書リクエスト
-letsencrypt_err=証明書の要求ができませんでした
-letsencrypt_ecmds=Let's Encrypt クライアントコマンド certbot と python コマンドが見つかりませんでした
letsencrypt_epythonmod=組み込みの Let's Encrypt クライアントに必要な Python モジュール $1 がインストールされていません
letsencrypt_epythonver=Python のバージョン取得ができませんでした : $1
letsencrypt_epythonver2=Python のバージョン $1 以上が必要ですが、バージョン $2 しかありません。
@@ -1135,8 +1120,6 @@ letsencrypt_echain=チェーン証明書のダウンロードができません
letsencrypt_echain2=$1 からダウンロードしたチェーン証明書は空です
letsencrypt_ecsr=CSR の生成ができませんでした : $1
letsencrypt_ekeygen=秘密鍵の生成ができませんでした : $1
-letsencrypt_enative=このシステムでは、以前から Let's Encrypt のネイティブクライアント ( certbot ) が使用されています。引き続きすべての証明書要求でネイティブクライアントを使用する必要があります
-letsencrypt_eacmedns=DNS ベースの検証は公式の Let's Encrypt クライアントのみサポートしています。
announce_hide=このお知らせを非表示
alert_hide=アラートを非表示
diff --git a/webmin/lang/ja.auto b/webmin/lang/ja.auto
index 97f71d847..11a79bc96 100644
--- a/webmin/lang/ja.auto
+++ b/webmin/lang/ja.auto
@@ -28,14 +28,32 @@ lang_dateformat_dd/mm/yyyy=dd/mm/yyyy (つまり、2001/09/16)
lang_dateformat_mm/dd/yyyy=mm/dd/yyyy (つまり、2001 年 9 月 16 日)
lang_dateformat_yyyy/mm/dd=yyyy/mm/dd (例: 2001/09/16)
+ssl_enforce=SSLを強制する
ssl_hsts=HSTS ヘッダーで SSL を強制する
+ssl_tablets=SSLプロバイダー
+ssl_letsdesc=このフォームを使用すると、Let's EncryptなどのACME互換プロバイダーからWebmin用の信頼できるSSL証明書をリクエストできます。
+ssl_letserr=残念ながら、このシステムはSSLプロバイダーから証明書を要求することができません:$1。
+ssl_letserr2=または、モジュール設定ページを確認して、設定済みのACMEクライアントコマンドへの正しいパスを使用していることを確認してください。
+
+ssl_letsdesc2=新しい証明書は、現在Webminに設定されている証明書と置き換えられます。発行前に、ACMEプロバイダーは、ウェブサイトのドキュメントディレクトリ内の一時ファイル、または一時的なDNS TXTレコードを使用して、各ホスト名の所有権を確認する必要があります。
ssl_subset=検証できないホスト名をスキップしますか?
-ssl_letsmode=Let's Encryptの検証方法
+ssl_letsmode=ドメイン検証方法
ssl_letsmode0=ホスト名に一致する Apache 仮想ホスト
ssl_letsmode1=選択された Apache 仮想ホスト
ssl_letsmode2=その他のウェブサーバードキュメントディレクトリ
ssl_letsmode3=BINDを使用したDNS検証
ssl_letsmode4=Certbot 組み込みウェブサーバー
+ssl_staging=プロバイダーサーバー
+ssl_staging0=生産
+ssl_staging1=ステージング(テスト専用)
+ssl_acmeopts=プロバイダー設定
+ssl_acmeextra=詳細設定を表示する
+ssl_acmedir=カスタムACMEディレクトリURL
+ssl_acmedirdesc=設定すると、上記のデフォルトのプロバイダーサーバー設定が上書きされます。
+ssl_acmekid=外部アカウントバインディングキーID
+ssl_acmekiddesc=オプション。一部のACMEプロバイダーは、ディレクトリURLに加えてこの情報も必要とします。
+ssl_acmehmac=外部アカウントバインディングHMACキー
+ssl_acmehmacdesc=オプション。使用する場合は、Certbotのネイティブクライアントが必要です。
upgrade_repo=$1 リポジトリからの最新バージョン
upgrade_setup=setup.shスクリプトを実行して Webmin をアップグレードしています ..
@@ -45,16 +63,16 @@ upgrade_setuppackage=pkgadd を実行して Webmin をアップグレ
session_blockhost=$1 回以上のログイン失敗があるクライアント IP を $2 秒間ブロックします。
session_utmp=ログインとログアウトをutmpに記録しますか?
+session_rpc_timeout=RPCセッションタイムアウト
+session_erpc_timeout=RPCセッションタイムアウトが指定されていないか、0より大きい数値を指定する必要があります。
session_md5off=自動判定
session_md5on=MD5 ハッシュ形式を使用
session_sha512=SHA512 ハッシュ形式を使用
session_yescrypt=yescrypt ハッシュ形式を使用する
session_emd5mod=Perl $1 モジュールがインストールされていないため、MD5 ハッシュ形式は使用できません
-session_esha512mod=Perl $1 モジュールがインストールされていないため、SHA512 ハッシュ形式は使用できません
-session_eyescrypt=Perl $1 モジュールがインストールされていないため、yescrypt ハッシュ形式は使用できません
+session_edigestcrypt=$1 ハッシュ形式は使用できません。システム crypt 関数がそれをサポートしていないためです。
session_forgot=忘れたパスワードの回復を許可しますか?
session_eforgot=パスワードを忘れた場合の回復機能は、Virtualmin Password Recovery プラグインモジュールを削除しないと有効になりません。これは Webmin モジュール ページで実行できます。
-
session_passresetdesc=パスワード回復のスロットリング
session_passreset=$1 件を超えるリクエストを持つクライアントを $2 分間ブロックします
session_epassreset_failures=ブロック要求が見つからないか無効です
@@ -63,6 +81,11 @@ session_passtimeout=パスワードリセットリンクは$1分後に期限切
session_epassreset_timeout=パスワードリセットのタイムアウトが見つからないか無効です
log_fixrepo=Webmin リポジトリを修正
+log_letsencrypt=ACMEプロバイダーに新しいSSL証明書を要求しました
+log_letsencryptdns=$1 の ACME DNS レコードを作成しました
+log_letsencryptcleanup=$1 の ACME DNS レコードを削除しました
+
+themes_configure=テーマ設定ページを開く
themes_ok=テーマが正常に変更され、リダイレクト中です。
themes_ok2=テーマオーバーレイが正常に変更され、リダイレクト中です。
@@ -107,6 +130,7 @@ notif_fixreponow=Webmin リポジトリを更新する
status_temp2=CPU 温度とファン速度を収集しますか?
+sendmail_name=表示名
sendmail_toaddr=通知のデフォルトの宛先アドレス
sendmail_to_def=設定なし
sendmail_etoaddr=宛先アドレスが欠落しているか、形式が正しくありません
@@ -124,10 +148,20 @@ web_redirssl=SSLをリダイレクトする
twofactor_totp=TOTP 認証システム
twofactor_qrcode=TOTP アプリに秘密コード $1 を入力するか、下の QR コードをスキャンしてください。
+twofactor_qrcode_manual=このシステムではQRコードの生成がサポートされていないため、TOTPアプリに秘密コード$1を入力して手動で設定してください。
twofactor_etotptoken=TOTPトークンは数字でなければなりません
+letsencrypt_title=SSLプロバイダー証明書要求
+letsencrypt_err=証明書の要求に失敗しました
+letsencrypt_ecmds=ネイティブのACMEクライアントコマンドcertbotもpythonコマンドも、システム上で見つかりませんでした。
+letsencrypt_eacmedir=ACMEディレクトリのURLが欠落しているか無効です。
+letsencrypt_eeabdir=外部アカウントバインディングを使用する場合は、ACMEディレクトリのURLを入力する必要があります。
+letsencrypt_eeabpair=外部アカウントバインディングキーIDとHMACキーの両方を入力する必要があります。
+letsencrypt_eeabnative=外部アカウントバインディングは、ネイティブのACMEクライアントがインストールされている場合にのみ使用できます。
letsencrypt_doingcertbot=Certbot Web サーバーを使用して、$1 の新しい証明書を要求しています。
-letsencrypt_eacmecertbot=公式のLet's EncryptクライアントのみがCertbot検証をサポートしています
+letsencrypt_enative=このシステムでは以前、ネイティブのACMEクライアント(certbot)が使用されており、今後のすべての証明書要求にもこれを使用する必要があります。
+letsencrypt_eacmedns=DNSベースの検証をサポートするのは、ネイティブのACMEクライアントのみです。
+letsencrypt_eacmecertbot=ネイティブのACMEクライアントのみがCertbot検証をサポートしています。
os_eol=OS EOL カウントダウン通知
os_eol_countdown=数か月前
diff --git a/webmin/lang/ko b/webmin/lang/ko
index bdb085dd6..f83ce86e4 100644
--- a/webmin/lang/ko
+++ b/webmin/lang/ko
@@ -284,7 +284,6 @@ ssl_essl=펄 모듈 Net::SSLeay 를 시스템에서 찾을 수 없거나 설치
ssl_cpan=대신, 필요한 펄 모듈 Net::SSLeay 는 Webmin 다운로드와 설치에서 구할 수 있습니다.
ssl_emessage=펄 에러 메시지 : $1
ssl_desc1=Webmin을 실행 중인 호스트에 SSLeay Perl 모듈이 설치되어 있습니다. 이 모듈을 사용하려면 Webmin이 브라우저와 서버 사이의 SSL 암호화 통신을 지원해야 합니다. 인터넷을 통해 Webmin 서버에 접근할 경우에는 침입자가 Webmin 패스워드를 알아내지 못하게 SSL을 사용해야 합니다.
-ssl_desc2=경고 - 브라우저가 SSL(예: Netscape 또는 IE)을 지원하고 브라우저와 Webmin 호스트 사이에 https 요청을 차단하는 방화벽이 없는 경우에만 SSL 지원 기능을 사용하십시오
ssl_header=SSL 지원
ssl_on=가능하다면 SSL 을 사용
ssl_key=비밀키 파일
diff --git a/webmin/lang/ko.auto b/webmin/lang/ko.auto
index c67aa3705..4b97fbb2a 100644
--- a/webmin/lang/ko.auto
+++ b/webmin/lang/ko.auto
@@ -65,6 +65,7 @@ lang_dateformat_yyyy/mm/dd=yyyy/mm/dd(예: 2001/09/16)
ssl_deny=거부 할 SSL 프로토콜 버전
ssl_compression=압축 SSL 연결을 허용 하시겠습니까?
ssl_honorcipherorder=서버 정의 암호 순서를 강제로 사용 하시겠습니까?
+ssl_enforce=SSL 강제 적용
ssl_hsts=HSTS 헤더로 SSL 시행
ssl_extracasdef=글로벌 SSL 설정과 동일
ssl_extracasnone=이 IP 주소에 대해서는 없음
@@ -86,19 +87,19 @@ ssl_privchain=체인 인증서 텍스트
ssl_nochain=체인 인증서가 없습니다
ssl_leavechain=기존 체인 인증서 사용
ssl_tabcsr=인증서 서명 요청
-ssl_tablets=암호화하자
+ssl_tablets=SSL 제공업체
ssl_csralready=최신 키 및 CSR보기 ..
ssl_already1=이전에 생성 된 개인 키 :
ssl_already2=이전에 생성 된 인증서 서명 요청 :
-ssl_letsdesc=Let 's Encrypt는 Webmin에서 사용할 SSL 인증서를 생성하는 데 사용할 수있는 무료의 자동화 된 공개 인증 기관입니다.
-ssl_letserr=불행히도, Let 's Encrypt는 시스템에서 사용할 수 없습니다 : $1.
-ssl_letserr2=또는 모듈 구성 페이지에서 letsencrypt 명령의 올바른 경로를 사용하고 있는지 확인하십시오.
+ssl_letsdesc=이 양식을 사용하면 Let's Encrypt와 같은 ACME 호환 제공업체로부터 Webmin용 신뢰할 수 있는 SSL 인증서를 요청할 수 있습니다.
+ssl_letserr=유감스럽게도 이 시스템은 SSL 제공업체로부터 인증서를 요청할 수 없습니다 : $1.
+ssl_letserr2=또는 모듈 구성 페이지를 확인하여 구성된 ACME 클라이언트 명령에 대한 올바른 경로를 사용하고 있는지 확인하십시오.
-ssl_letsdesc2=이 페이지는 새 인증서를 요청하는 데 사용될 수 있으며 현재 Webmin에 구성된 다른 인증서를 덮어 씁니다. 그러나 Let 's Encrypt 서비스에서는이 시스템이 도메인의 웹 사이트를 호스트하는지 확인하여 인증서 도메인의 소유권을 확인해야합니다. 웹 사이트의 문서 디렉토리에 작은 임시 파일을 배치하면됩니다.
+ssl_letsdesc2=새 인증서는 현재 Webmin에 구성된 인증서를 대체합니다. 새 인증서가 발급되기 전에 ACME 제공업체는 웹사이트 문서 디렉터리의 임시 파일 또는 임시 DNS TXT 레코드를 사용하여 각 호스트 이름에 대한 제어 권한을 확인해야 합니다.
ssl_letsheader=새 SSL 인증서 옵션
ssl_letsdoms=인증서의 호스트 이름
ssl_subset=검증할 수 없는 호스트 이름을 건너뛰시겠습니까?
-ssl_letsmode=Let's Encrypt 검증 방법
+ssl_letsmode=도메인 유효성 검사 방법
ssl_letsmode0=호스트 이름과 일치하는 Apache 가상 호스트
ssl_letsmode1=선택된 Apache 가상 호스트
ssl_letsmode2=기타 웹서버 문서 디렉토리
@@ -109,9 +110,17 @@ ssl_letsonly=그냥 갱신 갱신
ssl_usewebmin=Webmin에 새 키와 인증서를 복사 하시겠습니까?
ssl_letsrenew=자동 갱신 사이의 달
ssl_letsnotrenew=수동으로 만 갱신
-ssl_staging=서버를 암호화하자
-ssl_staging0=레알
-ssl_staging1=스테이징 (테스트 전용)
+ssl_staging=공급자 서버
+ssl_staging0=생산
+ssl_staging1=스테이징(테스트 전용)
+ssl_acmeopts=공급자 설정
+ssl_acmeextra=고급 설정 표시
+ssl_acmedir=사용자 지정 ACME 디렉토리 URL
+ssl_acmedirdesc=이 설정이 적용되면 위의 기본 제공자 서버를 재정의합니다.
+ssl_acmekid=외부 계정 바인딩 키 ID
+ssl_acmekiddesc=선택 사항입니다. 일부 ACME 제공업체는 디렉토리 URL 외에 이 정보를 추가로 요구합니다.
+ssl_acmehmac=외부 계정 바인딩 HMAC 키
+ssl_acmehmacdesc=선택 사항입니다. 사용 시 Certbot 네이티브 클라이언트가 필요합니다.
newkey_ecns=서버 이름이 입력되지 않았습니다
@@ -162,13 +171,14 @@ session_cmddef0=다음 명령으로 비밀번호를 변경하십시오.
session_ecmd=비밀번호 변경 명령이 없거나 잘못되었습니다
session_banner=사전 로그인 배너
session_md5=Webmin 비밀번호 해싱 형식
+session_rpc_timeout=RPC 세션 시간 초과
+session_erpc_timeout=RPC 세션 시간 초과가 누락되었거나 0보다 큰 숫자여야 합니다
session_md5off=자동으로 결정
session_md5on=MD5 해싱 형식 사용
session_sha512=SHA512 해싱 형식 사용
session_yescrypt=yescrypt 해싱 형식 사용
session_emd5mod=Perl $1 모듈이 설치되어 있지 않으므로 MD5 해싱 형식을 사용할 수 없습니다
-session_esha512mod=Perl $1 모듈이 설치되어 있지 않으므로 SHA512 해싱 형식을 사용할 수 없습니다
-session_eyescrypt=Perl $1 모듈이 설치되어 있지 않으므로 yescrypt 해싱 형식을 사용할 수 없습니다
+session_edigestcrypt=시스템의 crypt 함수가 $1 해싱 형식을 지원하지 않으므로 $1 해싱 형식을 사용할 수 없습니다
session_passapi=원격 비밀번호 변경 API를 사용하시겠습니까?
session_passapi0=API 사용 중지됨
session_passapi1=Unix 사용자를 위해 활성화된 API
@@ -194,10 +204,11 @@ log_delete_webmincron=예약 된 $1 함수 삭제
log_run_webmincron=실행 된 $1 함수
log_save_webmincron=$1 모듈에서 업데이트 된 예약 기능
log_onedelete_webmincron=$1 모듈에서 예약 된 기능을 삭제했습니다.
-log_letsencrypt=Let 's Encrypt에서 새 SSL 인증서를 요청했습니다.
-log_letsencryptdns=$1에 대한 DNS 레코드를 암호화합시다.
-log_letsencryptcleanup=$1에 대한 DNS 레코드를 암호화합시다.
+log_letsencrypt=ACME 제공업체에 새 SSL 인증서를 요청했습니다
+log_letsencryptdns=$1에 대한 ACME DNS 레코드를 생성했습니다
+log_letsencryptcleanup=$1에 대한 ACME DNS 레코드를 제거했습니다
+themes_configure=테마 설정 페이지를 엽니다
themes_none=없음-테마로 결정
themes_overdesc=오버레이는 색상, 배경 및 아이콘을 변경하여 테마의 모양을 수정합니다. 레이아웃을 변경하지 않습니다.
themes_overlay=현재 오버레이 :
@@ -368,6 +379,7 @@ sendmail_authdef=기본값 (현재 Cram-MD5)
sendmail_from=Webmin의 이메일 주소
sendmail_fromdef=기본값 ($1)
sendmail_fromaddr=주소
+sendmail_name=표시 이름
sendmail_toaddr=알림에 대한 기본 대상 주소
sendmail_to_def=설정 안됨
sendmail_etoaddr=목적지 주소가 누락되었거나 형식이 잘못되었습니다
@@ -469,6 +481,7 @@ twofactor_enrolllink=Webmin Users 모듈에서 2 단계 인증
twofactor_url=$1에 대한 자세한 내용은 웹 사이트 $2를 참조하십시오.
twofactor_etotpmodule=이중 인증에 필요한 Perl 모듈 $1이 설치되지 않았습니다. Webmin의 Perl Modules 페이지를 사용하여 설치하십시오.
twofactor_qrcode=TOTP 앱에 비밀 코드 $1을 입력하거나, 아래의 QR 코드를 스캔하세요.
+twofactor_qrcode_manual=TOTP 앱에 비밀 코드 $1을 입력하고 수동으로 설정하십시오. 이 시스템에서는 QR 코드 생성이 지원되지 않습니다.
twofactor_etotpid=잘못된 TOTP base32로 인코딩 된 비밀
twofactor_etotptoken=TOTP 토큰은 숫자여야 합니다
twofactor_etotpmatch=잘못된 OTP 코드
@@ -478,9 +491,9 @@ twofactor_secret0=16 자 키 사용
twofactor_esecret=비밀 키는 정확히 16 자 여야하며 문자와 숫자 만 포함해야합니다.
twofactor_esession=세션 기반 인증이 활성화되어 있지 않으면 2 단계 인증을 사용할 수 없습니다
-letsencrypt_title=인증서 요청을 암호화하자
-letsencrypt_err=인증서를 요청하지 못했습니다
-letsencrypt_ecmds=시스템에서 클라이언트의 클라이언트 암호화 명령 certbot 또는 python 명령을 찾을 수 없습니다.
+letsencrypt_title=SSL 제공업체 인증서 요청
+letsencrypt_err=인증서 요청에 실패했습니다
+letsencrypt_ecmds=시스템에서 ACME 클라이언트 기본 명령인 certbot 이나 python 명령을 찾을 수 없습니다
letsencrypt_epythonmod=내장 된 Let 's Encrypt 클라이언트에 필요한 Python 모듈 $1이 설치되지 않았습니다.
letsencrypt_epythonver=파이썬 버전을 가져 오지 못했습니다 : $1
letsencrypt_epythonver2=Python 버전 $1 이상이 필요하지만 $2 버전 만 있습니다.
@@ -488,6 +501,10 @@ letsencrypt_certbot=Certbot
letsencrypt_edroot=Apache 가상 호스트 $1에 문서 디렉토리가 없습니다!
letsencrypt_edom=도메인 이름이 없거나 잘못되었습니다
letsencrypt_erenew=누락되거나 숫자가 아닌 갱신 간격
+letsencrypt_eacmedir=ACME 디렉토리 URL이 없거나 잘못되었습니다
+letsencrypt_eeabdir=외부 계정 바인딩을 사용할 때는 ACME 디렉터리 URL을 입력해야 합니다
+letsencrypt_eeabpair=외부 계정 바인딩 키 ID와 HMAC 키를 모두 입력해야 합니다
+letsencrypt_eeabnative=외부 계정 바인딩은 ACME 네이티브 클라이언트가 설치된 경우에만 사용할 수 있습니다
letsencrypt_ewebroot=웹 사이트 문서 디렉토리가 존재하지 않습니다
letsencrypt_evhost=$1와 일치하는 가상 호스트가 없습니다.
letsencrypt_efull=전체 인증서 파일 $1을 찾을 수 없습니다.
@@ -510,9 +527,9 @@ letsencrypt_echain=체인 인증서를 다운로드하지 못했습니다 : $1
letsencrypt_echain2=$1에서 다운로드 한 체인 인증서가 비어 있습니다
letsencrypt_ecsr=CSR을 생성하지 못했습니다 : $1
letsencrypt_ekeygen=개인 키를 생성하지 못했습니다 : $1
-letsencrypt_enative=기본 Let 's Encrypt 클라이언트 (certbot)는이 시스템에서 이전에 사용되었으며 향후 모든 인증서 요청에 사용해야합니다.
-letsencrypt_eacmedns=공식적인 Let 's Encrypt 클라이언트 만이 DNS 기반 유효성 검사를 지원합니다
-letsencrypt_eacmecertbot=공식 Let's Encrypt 클라이언트만 Certbot 검증을 지원합니다
+letsencrypt_enative=이 시스템에서는 이전에 ACME 네이티브 클라이언트(certbot)가 사용되었으므로, 향후 모든 인증서 요청에도 반드시 이 클라이언트를 사용해야 합니다
+letsencrypt_eacmedns=ACME 네이티브 클라이언트만 DNS 기반 유효성 검사를 지원합니다
+letsencrypt_eacmecertbot=ACME 네이티브 클라이언트만 Certbot 유효성 검사를 지원합니다
announce_hide=이 공지 숨기기
alert_hide=경고 숨기기
diff --git a/webmin/lang/ms b/webmin/lang/ms
index d17f7e540..801d830df 100644
--- a/webmin/lang/ms
+++ b/webmin/lang/ms
@@ -300,7 +300,6 @@ ssl_essl=Modul perl Net :: SSLeay tidak ada untuk dipasang pada sistem anda. Unt
ssl_cpan=Cara lain, anda boleh gunakan muat turun dan pasang pada Webmin bagi modul Perl Net :: SSLeay untuk anda.
ssl_emessage=Mesej ralat dari Perl adalah : $1
ssl_desc1=Hos yang menjalankan Webmin nampaknya telah dipasang modul Perl SSLeay. Oleh itu, Webmin menyokong komunikasi penyulitan SSL antara pelayar anda dan pelayan. Sekiranya anda mencapai pelayan Webmin anda melalui Internet, maka anda perlu mempertimbangkan untuk menggunakan SSL bagi mengelakkan penyerang mengintip kata laluan Webmin anda.
-ssl_desc2=Amaran - hanya aktifkan sokongan SSL jika anda mempunyai pelayar yang menyokong SSL, dan tidak ada firewall yang menyekat permintaan https antara pelayar anda dan hos Webmin.
ssl_header=Sokongan SSL
ssl_on=Aktifkan SSL jika ada?
ssl_key=Fail kunci peribadi
diff --git a/webmin/lang/ms.auto b/webmin/lang/ms.auto
index f3e573e7a..2b2bc2177 100644
--- a/webmin/lang/ms.auto
+++ b/webmin/lang/ms.auto
@@ -46,21 +46,22 @@ lang_dateformat_mm/dd/yyyy=mm/hr/tttt (iaitu 16/09/2001)
lang_dateformat_yyyy/mm/dd=tttt/mm/dd (iaitu 2001/09/16)
ssl_deny=Versi protokol SSL untuk menolak
+ssl_enforce=Kuatkuasakan SSL
ssl_hsts=Kuatkuasakan SSL dengan pengepala HSTS
ssl_ekey2=Fail kunci peribadi SSL $1 tidak mengandungi kekunci format PEM
ssl_ecert2=Fail sijil SSL $1 tidak mengandungi sijil format PEM
ssl_edhparams=Gagal untuk menjana fail Parameter DH PFS : $1
ssl_epfsversion=PFS memerlukan versi Bersih::SSLeay $2, tetapi sistem ini hanya mempunyai versi $1
-ssl_tablets=Let's Encrypt
-ssl_letsdesc=Let's Encrypt adalah pihak berkuasa sijil percuma, automatik dan terbuka yang boleh digunakan untuk menghasilkan sijil SSL untuk digunakan oleh Webmin.
-ssl_letserr=Malangnya, Let's Encrypt tidak boleh digunakan pada sistem anda: $1.
-ssl_letserr2=Selalunya, semak halaman konfigurasi untuk memastikan anda menggunakan laluan yang betul untuk arahan letsencrypt.
+ssl_tablets=Pembekal SSL
+ssl_letsdesc=Borang ini membolehkan anda meminta sijil SSL yang dipercayai untuk Webmin daripada pembekal yang serasi dengan ACME seperti Let's Encrypt.
+ssl_letserr=Malangnya, sistem ini tidak boleh meminta sijil daripada pembekal SSL: $1.
+ssl_letserr2=Secara alternatif, semak halaman konfigurasi modul untuk memastikan anda menggunakan laluan yang betul kepada arahan klien ACME yang dikonfigurasikan.
-ssl_letsdesc2=Halaman ini boleh digunakan untuk meminta sijil baru, yang akan menimpa mana-mana yang sedang dikonfigurasikan pada Webmin yang lain. Walau bagaimanapun, perkhidmatan Encrypt Letakkan pemilikan domain sijil anda disahkan dengan memeriksa bahawa sistem ini menjadi tuan rumah laman web untuk domain tersebut. Ini dilakukan dengan meletakkan fail sementara kecil di direktori dokumen laman web.
+ssl_letsdesc2=Sijil baharu ini akan menggantikan sijil yang sedang dikonfigurasikan dalam Webmin. Sebelum ia boleh dikeluarkan, penyedia ACME mesti mengesahkan kawalan setiap nama hos menggunakan sama ada fail sementara dalam direktori dokumen laman web atau rekod TXT DNS sementara.
ssl_letsheader=Pilihan untuk sijil SSL baru
ssl_letsdoms=Nama hos untuk sijil
ssl_subset=Langkau nama hos yang tidak boleh disahkan?
-ssl_letsmode=Kaedah pengesahan Mari Sulitkan
+ssl_letsmode=Kaedah pengesahan domain
ssl_letsmode0=Nama hos padanan hos maya Apache
ssl_letsmode1=Hos maya Apache yang dipilih
ssl_letsmode2=Direktori dokumen pelayan web lain
@@ -71,9 +72,17 @@ ssl_letsonly=Kemas kini Pembaharuan
ssl_usewebmin=Salin kunci dan sijil baru ke Webmin?
ssl_letsrenew=Bulan antara pembaharuan automatik
ssl_letsnotrenew=Hanya memperbaharui secara manual
-ssl_staging=Mari kita Sulitkan pelayan
-ssl_staging0=Real
+ssl_staging=Pelayan pembekal
+ssl_staging0=Pengeluaran
ssl_staging1=Pementasan (ujian sahaja)
+ssl_acmeopts=Tetapan pembekal
+ssl_acmeextra=Tunjukkan tetapan lanjutan
+ssl_acmedir=URL direktori ACME tersuai
+ssl_acmedirdesc=Jika ditetapkan, ini akan mengatasi pelayan pembekal lalai di atas.
+ssl_acmekid=ID kunci Pengikatan Akaun Luaran
+ssl_acmekiddesc=Pilihan. Sesetengah penyedia ACME memerlukan ini sebagai tambahan kepada URL direktori.
+ssl_acmehmac=Kunci HMAC Pengikatan Akaun Luaran
+ssl_acmehmacdesc=Pilihan. Memerlukan klien Certbot asli apabila digunakan.
newkey_ecns=Tiada nama pelayan yang dimasukkan
@@ -100,13 +109,14 @@ session_popts=Pilihan kata laluan
session_cmddef=Perubahan kata laluan yang telah tamat tempoh
session_banner=Spanduk pra-masuk
session_md5=Format hashing kata laluan Webmin
+session_rpc_timeout=Tamat masa sesi RPC
+session_erpc_timeout=Tamat masa sesi RPC tiada atau mestilah nombor yang lebih besar daripada 0
session_md5off=Tentukan secara automatik
session_md5on=Gunakan format pencincangan MD5
session_sha512=Gunakan format pencincangan SHA512
session_yescrypt=Gunakan format pencincangan yescrypt
session_emd5mod=Format pencincangan MD5 tidak boleh digunakan, kerana modul Perl $1 tidak dipasang
-session_esha512mod=Format pencincangan SHA512 tidak boleh digunakan, kerana modul Perl $1 tidak dipasang
-session_eyescrypt=format pencincangan yescrypt tidak boleh digunakan, kerana modul Perl $1 tidak dipasang
+session_edigestcrypt=Format hashing $1 tidak boleh digunakan, kerana fungsi crypt sistem tidak menyokongnya
session_passapi=Dayakan API pertukaran kata laluan jauh?
session_passapi0=API dilumpuhkan
session_passapi1=API diaktifkan untuk pengguna Unix
@@ -121,9 +131,11 @@ session_passtimeout=Pautan tetapan semula kata laluan tamat tempoh dalam $1 mini
session_epassreset_timeout=Tamat masa tetapan semula kata laluan tiada atau tidak sah
log_fixrepo=Repositori Webmin tetap
-log_letsencrypt=Meminta sijil SSL baru dari Let's Encrypt
-log_letsencryptdns=Diciptakan Letakkan rekod DNS untuk $1
-log_letsencryptcleanup=Dikeluarkan Sambungkan rekod DNS untuk $1
+log_letsencrypt=Meminta sijil SSL baharu daripada penyedia ACME
+log_letsencryptdns=Rekod DNS ACME telah dicipta untuk $1
+log_letsencryptcleanup=Rekod DNS ACME untuk $1 telah dialih keluar
+
+themes_configure=Buka halaman konfigurasi tema
themes_ok=Tema berjaya diubah hala sekarang ..
themes_ok2=Tindanan tema berjaya diubah hala sekarang ..
@@ -192,6 +204,7 @@ sendmail_ssl0=Jangan sekali-kali menyulitkan
sendmail_ssl1=Sentiasa gunakan TLS
sendmail_ssl2=Tukar dengan STARTTLS
sendmail_authdef=Lalai (kini Cram-MD5)
+sendmail_name=Nama paparan
sendmail_toaddr=Alamat destinasi lalai untuk pemberitahuan
sendmail_to_def=Tiada set
sendmail_etoaddr=Alamat destinasi tiada atau salah format
@@ -214,11 +227,12 @@ web_redirssl=Ubah hala SSL
twofactor_totp=Pengesah TOTP
twofactor_eusers=Pengesahan dua faktor tidak boleh dilumpuhkan, kerana pengguna berikut kini mendaftar : $1
twofactor_qrcode=Masukkan kod rahsia $1 dalam apl TOTP, atau imbas kod QR di bawah.
+twofactor_qrcode_manual=Masukkan kod rahsia $1 dalam aplikasi TOTP dan sediakannya secara manual, kerana penjanaan kod QR tidak disokong pada sistem ini.
twofactor_etotptoken=Token TOTP mestilah nombor
-letsencrypt_title=Let's Encrypt Request Certificate
+letsencrypt_title=Permintaan Sijil Penyedia SSL
letsencrypt_err=Gagal meminta sijil
-letsencrypt_ecmds=Sama ada perintah klien Encrypt Let certbot atau perintah python tidak terdapat pada sistem anda
+letsencrypt_ecmds=Perintah klien ACME asli certbot mahupun perintah python tidak ditemui pada sistem anda
letsencrypt_epythonmod=Modul Python $1 diperlukan oleh terbina dalam Let's Encrypt client tidak dipasang
letsencrypt_epythonver=Gagal mendapatkan versi Python : $1
letsencrypt_epythonver2=Versi Python $1 atau lebih tinggi diperlukan, tetapi anda hanya mempunyai versi $2.
@@ -226,6 +240,10 @@ letsencrypt_certbot=Certbot
letsencrypt_edroot=Hos maya Apache $1 tidak mempunyai direktori dokumen!
letsencrypt_edom=Nama domain yang hilang atau tidak sah
letsencrypt_erenew=Selang pembaharuan yang hilang atau bukan nombor
+letsencrypt_eacmedir=URL direktori ACME tiada atau tidak sah
+letsencrypt_eeabdir=URL direktori ACME mesti dimasukkan apabila menggunakan Pengikatan Akaun Luaran
+letsencrypt_eeabpair=Kedua-dua ID kunci Pengikatan Akaun Luaran dan kunci HMAC mesti dimasukkan
+letsencrypt_eeabnative=Pengikatan Akaun Luaran hanya boleh digunakan apabila klien ACME asli dipasang
letsencrypt_ewebroot=Direktori dokumen tapak web tidak wujud
letsencrypt_evhost=Tiada pencocokan tuan rumah maya $1 telah dijumpai
letsencrypt_efull=Dikehendaki fail sijil penuh $1 tidak dijumpai
@@ -248,9 +266,9 @@ letsencrypt_echain=Gagal memuat turun sijil rantai : $1
letsencrypt_echain2=Sijil rantai yang dimuat turun daripada $1 kosong
letsencrypt_ecsr=Gagal untuk menjana CSR : $1
letsencrypt_ekeygen=Gagal menjana kunci peribadi : $1
-letsencrypt_enative=Native Encrypt native (certbot) asli digunakan sebelum ini pada sistem ini, dan mesti digunakan untuk semua permintaan sijil masa depan
-letsencrypt_eacmedns=Hanya klien Let's Encrypt yang sah yang menyokong pengesahan berasaskan DNS
-letsencrypt_eacmecertbot=Hanya klien Let's Encrypt rasmi menyokong pengesahan Certbot
+letsencrypt_enative=Klien ACME asli (certbot) telah digunakan sebelum ini pada sistem ini dan mesti digunakan untuk semua permintaan sijil pada masa hadapan
+letsencrypt_eacmedns=Hanya klien ACME asli yang menyokong pengesahan berasaskan DNS
+letsencrypt_eacmecertbot=Hanya klien ACME asli yang menyokong pengesahan Certbot
announce_hide=Sembunyikan Pengumuman Ini
alert_hide=Sembunyikan Makluman
diff --git a/webmin/lang/nl b/webmin/lang/nl
index 63086a74f..28395a9d5 100644
--- a/webmin/lang/nl
+++ b/webmin/lang/nl
@@ -296,7 +296,6 @@ ssl_essl=De Net::SSLeay Perl module lijkt niet op uw systeem geinstalleerd te zi
ssl_cpan=Als alternatief kunt u ook Webmin de vereiste Net::SSLeay Perl module voor u laten downloaden en installeren.
ssl_emessage=De foutmelding van Perl was : $1
ssl_desc1=De host waarop Webmin wordt uitgevoerd blijkt de SSLeay Perl module geinstalleerd te hebben. Hier gebruik van makend, ondersteunt Webmin SSL gecodeerde communicatie tussen uw browser en de server. Als u uw Webmin server via het Internet benaderd, dan zou u zeker het gebruik van SSL moeten overwegen om het bemachtigen van uw Webmin wachtwoord door een aanvaller te voorkomen.
-ssl_desc2=Waarschuwing - zet de SSL ondersteuning alleen aan als u een browser met SSL ondersteuning gebruikt, en er zich geen firewall tussen uw browser en uw Webmin host bevind die HTTPS verzoeken blokkeert.
ssl_header=SSL Ondersteuning
ssl_on=SSL inschakelen indien beschikbaar?
ssl_key=Prive sleutel file
diff --git a/webmin/lang/nl.auto b/webmin/lang/nl.auto
index 65d4910fa..fd358c02b 100644
--- a/webmin/lang/nl.auto
+++ b/webmin/lang/nl.auto
@@ -52,22 +52,23 @@ lang_dateformat_yyyy/mm/dd=jjjj/mm/dd (d.w.z. 2001/09/16)
ssl_deny=Te weigeren SSL-protocolversies
ssl_compression=Gecomprimeerde SSL-verbindingen toestaan?
ssl_honorcipherorder=Gebruik van door de server gedefinieerde codeervolgorde forceren?
+ssl_enforce=SSL afdwingen
ssl_hsts=SSL afdwingen met HSTS-header
ssl_ekey2=Het SSL-sleutelbestand $1 bevat geen sleutel in PEM-indeling
ssl_ecert2=Het SSL-certificaatbestand $1 bevat geen certificaat in PEM-formaat
ssl_pfs=Alleen sterke cijfers met perfecte voorwaartse geheimhouding
ssl_edhparams=Kan PFS DH-params-bestand niet genereren : $1
ssl_epfsversion=PFS vereist Net::SSLeay-versie $2, maar dit systeem heeft alleen versie $1
-ssl_tablets=Laten we coderen
-ssl_letsdesc=Let's Encrypt is een gratis, geautomatiseerde en open certificaatautoriteit die kan worden gebruikt om een SSL-certificaat te genereren voor gebruik door Webmin.
-ssl_letserr=Helaas kan Let's Encrypt niet op uw systeem worden gebruikt: $1.
-ssl_letserr2=U kunt ook de pagina moduleconfiguratie controleren om te controleren of u het juiste pad gebruikt naar de opdracht letsencrypt.
+ssl_tablets=SSL-provider
+ssl_letsdesc=Met dit formulier kunt u een vertrouwd SSL-certificaat voor Webmin aanvragen bij een ACME-compatibele provider zoals Let's Encrypt.
+ssl_letserr=Helaas kan dit systeem geen certificaten aanvragen bij een SSL-provider: $1.
+ssl_letserr2=U kunt ook de pagina moduleconfiguratie raadplegen om er zeker van te zijn dat u het juiste pad naar de geconfigureerde ACME-clientopdracht gebruikt.
-ssl_letsdesc2=Deze pagina kan worden gebruikt om een nieuw certificaat aan te vragen, dat een ander certificaat overschrijft dat momenteel in Webmin is geconfigureerd. De Let's Encrypt-service vereist echter dat uw eigendom van het certificaatdomein wordt gevalideerd door te controleren of dit systeem de website voor het domein host. Dit doet u door een klein tijdelijk bestand in de documentenmap van de website te plaatsen.
+ssl_letsdesc2=Het nieuwe certificaat vervangt het certificaat dat momenteel in Webmin is geconfigureerd. Voordat het kan worden uitgegeven, moet de ACME-provider de controle over elke hostnaam verifiëren met behulp van een tijdelijk bestand in de documentmap van de website of een tijdelijk DNS TXT-record.
ssl_letsheader=Opties voor nieuw SSL-certificaat
ssl_letsdoms=Hostnamen voor certificaat
ssl_subset=Niet-verifieerbare hostnamen overslaan?
-ssl_letsmode=Laten we de validatiemethode coderen
+ssl_letsmode=Domeinvalidatiemethode
ssl_letsmode0=Apache virtuele host die overeenkomt met de hostnaam
ssl_letsmode1=Geselecteerde virtuele Apache-host
ssl_letsmode2=Andere webserverdocumentmap
@@ -78,9 +79,17 @@ ssl_letsonly=Vernieuw gewoon de vernieuwing
ssl_usewebmin=Nieuwe sleutel en certificaat naar Webmin kopiëren?
ssl_letsrenew=Maanden tussen automatische verlenging
ssl_letsnotrenew=Alleen handmatig vernieuwen
-ssl_staging=Laten we de server versleutelen
-ssl_staging0=echt
-ssl_staging1=Staging (alleen test)
+ssl_staging=Aanbiederserver
+ssl_staging0=Productie
+ssl_staging1=Fasebepaling (alleen test)
+ssl_acmeopts=Aanbiederinstellingen
+ssl_acmeextra=Geavanceerde instellingen weergeven
+ssl_acmedir=Aangepaste ACME-directory-URL
+ssl_acmedirdesc=Indien ingesteld, overschrijft dit de standaard provider-server hierboven.
+ssl_acmekid=Externe accountkoppelingssleutel-ID
+ssl_acmekiddesc=Optioneel. Sommige ACME-providers vereisen dit naast de directory-URL.
+ssl_acmehmac=Externe accountkoppeling HMAC-sleutel
+ssl_acmehmacdesc=Optioneel. Vereist de native Certbot-client bij gebruik.
newkey_ecns=Geen servernamen ingevoerd
@@ -112,13 +121,14 @@ session_popts=Wachtwoord opties
session_cmddef=Verlopen wachtwoordwijziging
session_banner=Pre-login banner
session_md5=Webmin wachtwoord hashing-formaat
+session_rpc_timeout=RPC-sessietime-out
+session_erpc_timeout=De RPC-sessietime-out ontbreekt of moet een getal groter dan 0 zijn
session_md5off=Automatisch bepalen
session_md5on=Gebruik MD5 hash-indeling
session_sha512=Gebruik SHA512 hash-indeling
session_yescrypt=Gebruik yescrypt hash-indeling
session_emd5mod=MD5-hash-indeling kan niet worden gebruikt, omdat de Perl $1-module niet is geïnstalleerd
-session_esha512mod=SHA512 hash-indeling kan niet worden gebruikt, omdat de Perl $1-module niet is geïnstalleerd
-session_eyescrypt=yescrypt hash-formaat kan niet worden gebruikt, omdat de Perl $1-module niet is geïnstalleerd
+session_edigestcrypt=Het $1-hashformaat kan niet worden gebruikt, omdat de systeemfunctie crypt dit niet ondersteunt
session_passapi=API voor wachtwoordwijziging op afstand inschakelen?
session_passapi0=API uitgeschakeld
session_passapi1=API ingeschakeld voor Unix-gebruikers
@@ -140,9 +150,11 @@ log_delete_webmincron=Geplande $1 geplande functies verwijderd
log_run_webmincron=Ran $1 geplande functies
log_save_webmincron=Geplande functie bijgewerkt in module $1
log_onedelete_webmincron=Geplande functie verwijderd in module $1
-log_letsencrypt=Gevraagd nieuw SSL-certificaat van Let's Encrypt
-log_letsencryptdns=Gemaakt Laten we DNS-record coderen voor $1
-log_letsencryptcleanup=Verwijderd Laten we DNS-record coderen voor $1
+log_letsencrypt=Een nieuw SSL-certificaat aangevraagd bij een ACME-provider
+log_letsencryptdns=ACME DNS-record aangemaakt voor $1
+log_letsencryptcleanup=ACME DNS-record voor $1 verwijderd
+
+themes_configure=Open de thema-configuratiepagina
themes_ok=Thema is succesvol gewijzigd, omleiden is nu ..
themes_ok2=Thema-overlay is succesvol gewijzigd. Omleiden is nu mogelijk ..
@@ -216,6 +228,7 @@ sendmail_ssl0=Versleutel nooit
sendmail_ssl1=Gebruik altijd TLS
sendmail_ssl2=Schakel over met STARTTLS
sendmail_authdef=Standaard (momenteel Cram-MD5)
+sendmail_name=Weergavenaam
sendmail_toaddr=Standaardbestemmingsadres voor meldingen
sendmail_to_def=Geen ingesteld
sendmail_etoaddr=Ontbrekend of onjuist geformatteerd bestemmingsadres
@@ -301,6 +314,7 @@ twofactor_enrolllink=U kunt zich nu aanmelden voor tweefactorauthenticatie in de
twofactor_url=Ga voor meer informatie over $1 naar de website op $2.
twofactor_etotpmodule=De Perl-module $1 die nodig is voor tweefactorauthenticatie is niet geïnstalleerd. Gebruik de pagina Perl-modules in Webmin om deze te installeren.
twofactor_qrcode=Voer de geheime code $1 in de TOTP-app in of scan de onderstaande QR-code.
+twofactor_qrcode_manual=Voer de geheime code $1 in de TOTP-app in en stel deze handmatig in, aangezien het genereren van QR-codes niet wordt ondersteund op dit systeem.
twofactor_etotpid=Ongeldig TOTP base32-gecodeerd geheim
twofactor_etotptoken=TOTP-token moet een nummer zijn
twofactor_etotpmatch=Onjuiste OTP-code
@@ -310,9 +324,9 @@ twofactor_secret0=Gebruik een sleutel van 16 tekens
twofactor_esecret=De geheime sleutel moet exact 16 tekens lang zijn en mag alleen letters en cijfers bevatten
twofactor_esession=Tweefactorauthenticatie kan niet worden gebruikt tenzij op sessie gebaseerde authenticatie actief is
-letsencrypt_title=Laten we het certificaatverzoek coderen
-letsencrypt_err=Aanvraag certificaat mislukt
-letsencrypt_ecmds=Noch de opdracht Let's Encrypt client certbot of de opdracht python zijn op uw systeem gevonden
+letsencrypt_title=Aanvraag SSL-providercertificaat
+letsencrypt_err=Certificaataanvraag mislukt
+letsencrypt_ecmds=Noch het native ACME-clientcommando certbot, noch het python -commando zijn op uw systeem gevonden
letsencrypt_epythonmod=De Python-module $1 nodig voor de ingebouwde Let's Encrypt-client is niet geïnstalleerd
letsencrypt_epythonver=Kan de Python-versie niet ophalen : $1
letsencrypt_epythonver2=Python-versie $1 of hoger is vereist, maar u hebt alleen versie $2.
@@ -320,6 +334,10 @@ letsencrypt_certbot=Certbot
letsencrypt_edroot=De virtuele host van Apache $1 heeft geen documentmap!
letsencrypt_edom=Ontbrekende of ongeldige domeinnaam
letsencrypt_erenew=Ontbrekend of niet-numeriek verlengingsinterval
+letsencrypt_eacmedir=Ontbrekende of ongeldige ACME-directory-URL
+letsencrypt_eeabdir=Bij gebruik van externe accountkoppeling moet een ACME-directory-URL worden ingevoerd
+letsencrypt_eeabpair=Zowel de sleutel-ID voor de externe accountbinding als de HMAC-sleutel moeten worden ingevoerd
+letsencrypt_eeabnative=Externe accountkoppeling kan alleen worden gebruikt wanneer de native ACME-client is geïnstalleerd
letsencrypt_ewebroot=Documentdocumentatie website bestaat niet
letsencrypt_evhost=Er is geen virtuele host gevonden die overeenkomt met $1
letsencrypt_efull=Het verwachte volledige certificaatbestand $1 is niet gevonden
@@ -342,9 +360,9 @@ letsencrypt_echain=Kan het geketende certificaat niet downloaden : $1
letsencrypt_echain2=Geketend certificaat gedownload van $1 is leeg
letsencrypt_ecsr=Kan CSR niet genereren : $1
letsencrypt_ekeygen=Kan privésleutel niet genereren : $1
-letsencrypt_enative=De native Let's Encrypt-client (certbot) werd eerder op dit systeem gebruikt en moet worden gebruikt voor alle toekomstige certificaataanvragen
-letsencrypt_eacmedns=Alleen de officiële Let's Encrypt-client ondersteunt DNS-validatie
-letsencrypt_eacmecertbot=Alleen de officiële Let's Encrypt-client ondersteunt Certbot-validatie
+letsencrypt_enative=De native ACME-client (certbot) werd voorheen op dit systeem gebruikt en moet voor alle toekomstige certificaataanvragen worden gebruikt
+letsencrypt_eacmedns=Alleen de native ACME-client ondersteunt DNS-gebaseerde validatie
+letsencrypt_eacmecertbot=Alleen de native ACME-client ondersteunt Certbot-validatie
announce_hide=Deze aankondiging verbergen
alert_hide=Melding verbergen
diff --git a/webmin/lang/no b/webmin/lang/no
index 88111c2e2..93a381c1e 100644
--- a/webmin/lang/no
+++ b/webmin/lang/no
@@ -308,7 +308,6 @@ ssl_essl=The Net::SSLeay perl modul ser ikke ut til å være installert i ditt s
ssl_cpan=Alternativt kan du la Webmin laste ned og installere Net::SSLeay Perl for deg.
ssl_emessage=Feilmeldingen fra Perl var : $1
ssl_desc1=Verten Webmin kjører på ser ut til å ha SSLeay Perl modulen installert. Ved å bruke denne, støtter Webmin SSL kryptert kommunikasjon mellom nettleseren din og tjeneren. Hvis du kobler til Webmin over internett, burde du utvilsomt bruke SSL for å minske muligheten for at "hackere" får tak i Webmin passordet ditt.
-ssl_desc2=NB!!!! - hver sikker på at nettleseren din støtter SSL (som Netscape or IE) og at det ikke er noen firewall som blokkerer https forespørsel mellom nettleseren og Webmin verten før du aktiverer SSL
ssl_header=SSL Støtte
ssl_on=Bruk SSL hvis tilgjengelig?
ssl_key=Privat nøkkel fil
@@ -377,7 +376,6 @@ ssl_tabcreate=Opprett sertifikat
ssl_tabcsr=Sertifikatforespørsel
ssl_tabupload=Last opp sertifikat
ssl_tabcurrent=Gjeldende sertifikat
-ssl_tablets=Let's Encrypt
ssl_cheader=Detaljer for gjeldende sertifikat
ssl_typeself=Selv-signert
ssl_typereal=Signert av CA
@@ -389,10 +387,6 @@ ssl_edownload=Kunne ikke trekke ut PEM data fra sertifikat
ssl_csralready=Vis nyeste nøkkel og CSR ..
ssl_already1=Tidligere generert privat nøkkel :
ssl_already2=Tidligere generert sertifikatforespørsel :
-ssl_letsdesc=Let's Encrypt er en gratis, automatisert, og åpen sertifikatautoritet som kan brukes til å generere et SSL sertifikat som kan brukes av Webmin.
-ssl_letserr=Let's Encrypt kan dessverre ikke brukes på systemet ditt : $1.
-ssl_letserr2=Sjekk modulkonfigurasjonen for å være sikker på at du bruker riktig sti til letsencrypt eller letsencrypt-auto kommandoen.
-ssl_letsdesc2=Denne siden kan brukes til å be om et nytt sertifikat, som vil overskrive andre sertifikater som er konfiguert i Webmin. Vær imidlertid oppmerksom på at Let's Encrypt tjenesten kreves at ditt eierskap til domenet valideres ved å sjekke at dette systemet inneholder nettstedet for domenet. Dette gjøres ved å plassere en liten midlertidig fil i nettstedets dokument-katalog.
ssl_letsheader=Innstillinger for nytt SSL sertifikat
ssl_letsdoms=Vertsnavn for sertifikat
ssl_letsok=Be om sertifikat
@@ -400,9 +394,6 @@ ssl_letsonly=Bare oppdater fornyelse
ssl_usewebmin=Kopier ny nøkkel og sertifikat til Webmin?
ssl_letsrenew=Måneder mellom automatisk fornyelse
ssl_letsnotrenew=Forny kun manuelt
-ssl_staging=Let's Encrypt server
-ssl_staging0=Faktisk
-ssl_staging1=Staging (bare test)
newkey_err=Kunne ikke opprette SSL nøkkel
newkey_ecn=Manglende eller ugyldig tjenernavn
@@ -679,9 +670,6 @@ log_delete_webmincron=Slettet $1 tidsplanlagte funksjoner
log_run_webmincron=Kjørte $1 tidsplanlagte funksjoner
log_save_webmincron=Oppdaterte tidsplanlagt funksjon i modul $1
log_onedelete_webmincron=Slettet tidsplanlagt funksjon i modul $1
-log_letsencrypt=Forespurt nytt SSL sertifikat fra Let's Encrypt
-log_letsencryptdns=Opprettet Let's Encrypt DNS oppføring for $1
-log_letsencryptcleanup=Fjernet Let's Encrypt DNS oppføring for $1
themes_title=Webmin temaer
themes_desc=Themene kontrollerer utseende på Webmin's bruker grensesnitt, inkludert ikon, farger, bakgrunn, og muligens layouten på sidene. I boksen under kan du velge en av de installerte themene.
@@ -1085,9 +1073,6 @@ twofactor_secret0=Bruk 16-tegns nøkkel
twofactor_esecret=Hemmelig nøkkel må være eksakt 16 tegn, og kan kun inneholde bokstaver og tall
twofactor_esession=To-faktor autentisering kan ikke brukes med mindre sesjons-basert autentisering er aktiv
-letsencrypt_title=Let's Encrypt sertifikatforespørsel
-letsencrypt_err=Kunne ikke be om sertifikat
-letsencrypt_ecmds=Hverken Let's Encrypt klient-kommandoen letsencrypt-auto eller python kommandoen ble funnet på systemet ditt
letsencrypt_epythonmod=Python modulen $1 som kreves av den innebygde Let's Encrypt klienten, er ikke installert
letsencrypt_epythonver=Kunne ikke hente Python versjon: $1
letsencrypt_epythonver2=Python-versjon $1 eller nyere kreves, men du har bare versjon $2.
@@ -1116,8 +1101,6 @@ letsencrypt_echain=Kunne ikke laste ned kjedet sertifikat : $1
letsencrypt_echain2=Kjedet sertifikat nedlastet fra $1 er tomt
letsencrypt_ecsr=Kunne ikke generere CSR : $1
letsencrypt_ekeygen=Kunne ikke generere privat nøkkel : $1
-letsencrypt_enative=Den innebygde Let's Encrypt klienten ble brukt tidligere på dette systemet, og må brukes for alle fremtidige sertifikat-forespørsler
-letsencrypt_eacmedns=Bare den offisielle Let's Encrypt-klienten støtter DNS-basert validering
announce_hide=Skjul denne kunngjøringen
alert_hide=Skjul varsel
diff --git a/webmin/lang/no.auto b/webmin/lang/no.auto
index ef09ed5a0..4ed62109c 100644
--- a/webmin/lang/no.auto
+++ b/webmin/lang/no.auto
@@ -35,14 +35,32 @@ lang_dateformat_dd/mm/yyyy=dd/mm/åååå (dvs. 16.09.2001)
lang_dateformat_mm/dd/yyyy=mm/dd/åååå (dvs. 16.09.2001)
lang_dateformat_yyyy/mm/dd=åååå/mm/dd (dvs. 2001/09/16)
+ssl_enforce=Håndhev SSL
ssl_hsts=Håndhev SSL med HSTS-header
+ssl_tablets=SSL-leverandør
+ssl_letsdesc=Dette skjemaet lar deg be om et pålitelig SSL-sertifikat for Webmin fra en ACME-kompatibel leverandør, for eksempel Let's Encrypt.
+ssl_letserr=Dessverre kan ikke dette systemet be om sertifikater fra en SSL-leverandør: $1.
+ssl_letserr2=Alternativt kan du sjekke modulkonfigurasjonssiden for å sikre at du bruker riktig bane til den konfigurerte ACME-klientkommandoen.
+
+ssl_letsdesc2=Det nye sertifikatet vil erstatte det som for øyeblikket er konfigurert i Webmin. Før det kan utstedes, må ACME-leverandøren bekrefte kontrollen over hvert vertsnavn ved hjelp av enten en midlertidig fil i nettstedets dokumentkatalog eller en midlertidig DNS TXT-oppføring.
ssl_subset=Vil du hoppe over vertsnavn som ikke kan bekreftes?
-ssl_letsmode=La oss kryptere valideringsmetoden
+ssl_letsmode=Domenevalideringsmetode
ssl_letsmode0=Apache virtuell vert som samsvarer med vertsnavn
ssl_letsmode1=Valgt virtuell Apache-vert
ssl_letsmode2=Annen webserver dokumentkatalog
ssl_letsmode3=DNS-validering med BIND
ssl_letsmode4=Certbot innebygd webserver
+ssl_staging=Leverandørserver
+ssl_staging0=Produksjon
+ssl_staging1=Staging (kun test)
+ssl_acmeopts=Leverandørinnstillinger
+ssl_acmeextra=Vis avanserte innstillinger
+ssl_acmedir=Tilpasset ACME-katalog-URL
+ssl_acmedirdesc=Hvis dette er angitt, overstyrer dette standardleverandørserveren ovenfor.
+ssl_acmekid=Nøkkel-ID for ekstern kontobinding
+ssl_acmekiddesc=Valgfritt. Noen ACME-leverandører krever dette i tillegg til katalog-URL-en.
+ssl_acmehmac=HMAC-nøkkel for ekstern kontobinding
+ssl_acmehmacdesc=Valgfritt. Krever den innebygde Certbot-klienten når den brukes.
upgrade_repo=Siste versjon fra $1-depotet
upgrade_setup=Kjører setup.sh skript for å oppgradere Webmin ..
@@ -52,20 +70,20 @@ upgrade_setuppackage=Kjører pkgadd for å oppgradere Webmin ..
session_blockhost=Blokker klient-IP-er med mer enn $1 mislykkede pålogginger i $2 sekunder.
session_utmp=Registrere pålogginger og utlogginger i utmp?
+session_rpc_timeout=RPC-øktens tidsavbrudd
+session_erpc_timeout=RPC-øktens tidsavbrudd mangler eller må være et tall større enn 0
session_md5off=Bestem automatisk
session_md5on=Bruk MD5 hashing-format
session_sha512=Bruk SHA512 hashing-format
session_yescrypt=Bruk yescrypt hashing-format
session_emd5mod=MD5-hash-format kan ikke brukes, siden Perl $1-modulen ikke er installert
-session_esha512mod=SHA512 hashing-format kan ikke brukes, siden Perl $1-modulen ikke er installert
-session_eyescrypt=yescrypt hashing-format kan ikke brukes, siden Perl $1-modulen ikke er installert
+session_edigestcrypt=$1 hashingformat kan ikke brukes, fordi systemets crypt-funksjon ikke støtter det
session_passapi=Vil du aktivere eksternt passordendrings -API?
session_passapi0=API deaktivert
session_passapi1=API aktivert for Unix -brukere
session_passurl=Når den er aktivert, kan brukerpassord endres via en POST -forespørsel til $1
session_forgot=Tillate gjenoppretting av glemt passord?
session_eforgot=Gjenoppretting av glemt passord kan ikke aktiveres med mindre plugin-modulen Virtualmin Password Recovery først fjernes. Dette kan gjøres på siden Webmin-moduler.
-
session_passresetdesc=Begrensning av passordgjenoppretting
session_passreset=Blokker klienter med mer enn $1 forespørsler i $2 minutter
session_epassreset_failures=Manglende eller ugyldige blokkeringsforespørsler
@@ -74,6 +92,11 @@ session_passtimeout=Koblingen for tilbakestilling av passord utløper om $1 minu
session_epassreset_timeout=Manglende eller ugyldig tidsavbrudd for tilbakestilling av passord
log_fixrepo=Fikset Webmin-depot
+log_letsencrypt=Forespurte nytt SSL-sertifikat fra en ACME-leverandør
+log_letsencryptdns=Opprettet ACME DNS-oppføring for $1
+log_letsencryptcleanup=Fjernet ACME DNS-oppføring for $1
+
+themes_configure=Åpne temakonfigurasjonssiden
themes_ok=Tema endret vellykket omdirigering nå ..
themes_ok2=Temaoverlegg endret og omdirigerer nå ..
@@ -122,6 +145,7 @@ status_temp2=Samle CPU-temperaturer og viftehastighet?
status_err=Kunne ikke lagre samling av bakgrunnsstatus
status_einterval=Samlingsintervallet må være et helt tall
+sendmail_name=Visningsnavn
sendmail_toaddr=Standard destinasjonsadresse for varsler
sendmail_to_def=Ingen satt
sendmail_etoaddr=Manglende eller feil formatert destinasjonsadresse
@@ -143,10 +167,20 @@ web_redirssl=Omdiriger SSL
twofactor_totp=TOTP-autentisering
twofactor_qrcode=Skriv inn den hemmelige koden $1 i TOTP-appen, eller skann QR-koden nedenfor.
+twofactor_qrcode_manual=Skriv inn den hemmelige koden $1 i TOTP-appen og konfigurer den manuelt, ettersom generering av QR-koder ikke støttes på dette systemet.
twofactor_etotptoken=TOTP-token må være et tall
+letsencrypt_title=Forespørsel om SSL-leverandørsertifikat
+letsencrypt_err=Kunne ikke be om sertifikat
+letsencrypt_ecmds=Verken den innebygde ACME-klientkommandoen certbot eller python kommandoen ble funnet på systemet ditt
+letsencrypt_eacmedir=Manglende eller ugyldig URL-adresse for ACME-katalogen
+letsencrypt_eeabdir=En ACME-katalog-URL må angis når du bruker ekstern kontobinding
+letsencrypt_eeabpair=Både nøkkel-ID-en for den eksterne kontobindingen og HMAC-nøkkelen må oppgis
+letsencrypt_eeabnative=Ekstern kontobinding kan bare brukes når den innebygde ACME-klienten er installert
letsencrypt_doingcertbot=Ber om et nytt sertifikat for $1 ved å bruke Certbot-nettserveren ..
-letsencrypt_eacmecertbot=Bare den offisielle Let's Encrypt-klienten støtter Certbot-validering
+letsencrypt_enative=Den innebygde ACME-klienten (certbot) ble brukt tidligere på dette systemet, og må brukes for alle fremtidige sertifikatforespørsler
+letsencrypt_eacmedns=Bare den innebygde ACME-klienten støtter DNS-basert validering
+letsencrypt_eacmecertbot=Bare den innebygde ACME-klienten støtter Certbot-validering
os_eol=OS EOL nedtellingsvarsling
os_eol_countdown=måneder før
diff --git a/webmin/lang/pl b/webmin/lang/pl
index eb98552d9..83c6edf5d 100644
--- a/webmin/lang/pl
+++ b/webmin/lang/pl
@@ -300,7 +300,6 @@ ssl_essl=Moduł Perla Net:SSLeay nie jest zainstalowany w Twoim systemie.Aby zai
ssl_cpan=Możesz użyć Webmina aby pobrać i zainstalować wymagany moduł Perla Net::SSLeay
ssl_emessage=Błąd Perla : $1
ssl_desc1=Komputer, na którym działa Webmin posiada zainstalowany moduł SSLeay Perl-a. Webmin potrafi przy jego pomocy ustanowić zaszyfrowane SSL połączenia pomiędzy Twoją przeglądarką a serwerem. Jeśli łączysz się z serwerem Webmina poprzez Internet, zdecydowanie powinieneś rozważyć użycie SSL, aby zapobiec przechwyceniu przez napastnika Twojego hasła do Webmina.
-ssl_desc2=Uwaga - włącz obsługę SSL tylko jeśli Twoja przeglądarka ma obsługę SSL (jak np. Netscape czy IE) i nie ma pomiędzy Twoją przeglądarką a komputerem z Webminem firewalla blokującego zapytania https
ssl_header=Obsługa SSL
ssl_on=Używać SSL jeśli dostępne?
ssl_key=Plik klucza prywatnego
diff --git a/webmin/lang/pl.auto b/webmin/lang/pl.auto
index db173c6a6..aa57faea3 100644
--- a/webmin/lang/pl.auto
+++ b/webmin/lang/pl.auto
@@ -45,21 +45,22 @@ lang_dateformat_dd/mm/yyyy=dd/mm/rrrr (tj. 16.09.2001)
lang_dateformat_mm/dd/yyyy=mm/dd/rrrr (tj. 16.09.2001)
lang_dateformat_yyyy/mm/dd=rrrr/mm/dd (tj. 2001/09/16)
+ssl_enforce=Wymuś SSL
ssl_hsts=Wymuszaj SSL za pomocą nagłówka HSTS
ssl_ekey2=Plik klucza prywatnego SSL $1 nie zawiera klucza formatu PEM
ssl_ecert2=Plik certyfikatu SSL $1 nie zawiera certyfikatu formatu PEM
ssl_edhparams=Nie udało się wygenerować pliku parametrów PFS DH : $1
ssl_epfsversion=PFS wymaga wersji Net::SSLeay $2, ale ten system ma tylko wersję $1
-ssl_tablets=Szyfrujmy
-ssl_letsdesc=Let's Encrypt to bezpłatny, zautomatyzowany i otwarty urząd certyfikacji, którego można użyć do wygenerowania certyfikatu SSL do użytku przez Webmin.
-ssl_letserr=Niestety, Let's Encrypt nie może być używany w twoim systemie: $1.
-ssl_letserr2=Alternatywnie sprawdź stronę konfiguracji modułu, aby upewnić się, że używasz poprawnej ścieżki do polecenia letsencrypt.
+ssl_tablets=Dostawca SSL
+ssl_letsdesc=Ten formularz umożliwia złożenie wniosku o zaufany certyfikat SSL dla Webmin u dostawcy zgodnego ze standardem ACME, takiego jak Let's Encrypt.
+ssl_letserr=Niestety, ten system nie może zażądać certyfikatów od dostawcy SSL: $1.
+ssl_letserr2=Alternatywnie sprawdź stronę konfiguracji modułu, aby upewnić się, że używasz prawidłowej ścieżki do skonfigurowanego polecenia klienta ACME.
-ssl_letsdesc2=Na tej stronie można zażądać nowego certyfikatu, który zastąpi inne skonfigurowane obecnie w Webmin. Jednak usługa Let's Encrypt wymaga potwierdzenia własności domeny certyfikatu przez sprawdzenie, czy ten system obsługuje witrynę internetową dla domeny. Odbywa się to poprzez umieszczenie małego pliku tymczasowego w katalogu dokumentów witryny.
+ssl_letsdesc2=Nowy certyfikat zastąpi ten obecnie skonfigurowany w Webminie. Przed jego wydaniem dostawca ACME musi zweryfikować kontrolę nad każdą nazwą hosta, używając pliku tymczasowego w katalogu dokumentów witryny lub tymczasowego rekordu DNS TXT.
ssl_letsheader=Opcje nowego certyfikatu SSL
ssl_letsdoms=Nazwy hostów dla certyfikatu
ssl_subset=Pominąć niemożliwe do zweryfikowania nazwy hostów?
-ssl_letsmode=Metoda sprawdzania poprawności Let's Encrypt
+ssl_letsmode=Metoda walidacji domeny
ssl_letsmode0=Host wirtualny Apache pasujący do nazwy hosta
ssl_letsmode1=Wybrany wirtualny host Apache
ssl_letsmode2=Inny katalog dokumentów serwera WWW
@@ -70,9 +71,17 @@ ssl_letsonly=Po prostu zaktualizuj odnowienie
ssl_usewebmin=Skopiować nowy klucz i certyfikat do Webmina?
ssl_letsrenew=Miesiące między automatycznym przedłużeniem
ssl_letsnotrenew=Odnów tylko ręcznie
-ssl_staging=Zaszyfrujmy serwer
-ssl_staging0=Real
+ssl_staging=Serwer dostawcy
+ssl_staging0=Produkcja
ssl_staging1=Inscenizacja (tylko test)
+ssl_acmeopts=Ustawienia dostawcy
+ssl_acmeextra=Pokaż ustawienia zaawansowane
+ssl_acmedir=Niestandardowy adres URL katalogu ACME
+ssl_acmedirdesc=Jeśli ustawione, zastępuje domyślny serwer dostawcy powyżej.
+ssl_acmekid=Identyfikator klucza powiązania konta zewnętrznego
+ssl_acmekiddesc=Opcjonalnie. Niektórzy dostawcy ACME wymagają tego dodatkowo oprócz adresu URL katalogu.
+ssl_acmehmac=Klucz HMAC powiązania konta zewnętrznego
+ssl_acmehmacdesc=Opcjonalnie. Wymaga natywnego klienta Certbot w przypadku użycia.
newkey_ecns=Nie wprowadzono nazw serwerów
@@ -86,13 +95,14 @@ ca_alt=Dodatkowe domeny
session_blockhost=Blokuj adresy IP klientów z więcej niż $1 nieudanymi logowaniami przez $2 sekundy.
session_utmp=Zapisywać loginy i wylogowania w utmp?
+session_rpc_timeout=Przekroczono limit czasu sesji RPC
+session_erpc_timeout=Brak limitu czasu sesji RPC lub musi to być liczba większa niż 0
session_md5off=Określ automatycznie
session_md5on=Użyj formatu mieszającego MD5
session_sha512=Użyj formatu mieszającego SHA512
session_yescrypt=Użyj formatu mieszającego yescrypt
session_emd5mod=Nie można użyć formatu mieszającego MD5, ponieważ moduł Perl $1 nie jest zainstalowany
-session_esha512mod=Nie można użyć formatu skrótu SHA512, ponieważ moduł Perl $1 nie jest zainstalowany
-session_eyescrypt=Nie można użyć formatu haszującego yescrypt, ponieważ moduł Perl $1 nie jest zainstalowany
+session_edigestcrypt=Nie można użyć formatu haszującego $1, ponieważ funkcja systemowa crypt go nie obsługuje
session_passapi=Włączyć interfejs API zdalnej zmiany hasła?
session_passapi0=API wyłączone
session_passapi1=API włączone dla użytkowników Uniksa
@@ -107,9 +117,11 @@ session_passtimeout=Link do resetowania hasła wygasa za $1 minut
session_epassreset_timeout=Brak lub nieprawidłowy limit czasu resetowania hasła
log_fixrepo=Naprawiono repozytorium Webmina
-log_letsencrypt=Zażądałem nowego certyfikatu SSL od Let's Encrypt
-log_letsencryptdns=Utworzono Let's Encrypt DNS record dla $1
-log_letsencryptcleanup=Usunięto Let's Encrypt DNS record dla $1
+log_letsencrypt=Zażądano nowego certyfikatu SSL od dostawcy ACME
+log_letsencryptdns=Utworzono rekord DNS ACME dla $1
+log_letsencryptcleanup=Usunięto rekord DNS ACME dla $1
+
+themes_configure=Otwórz stronę konfiguracji motywu
themes_ok=Motyw został pomyślnie zmieniony, przekierowanie zostało zakończone pomyślnie ..
themes_ok2=Nakładka motywu została pomyślnie zmieniona, przekierowanie zostało zakończone pomyślnie ..
@@ -169,6 +181,7 @@ sendmail_port=Port SMTP
sendmail_ssl0=Nigdy nie szyfruj
sendmail_ssl1=Zawsze używaj TLS
sendmail_ssl2=Przełącz za pomocą STARTTLS
+sendmail_name=Nazwa wyświetlana
sendmail_toaddr=Domyślny adres docelowy powiadomień
sendmail_to_def=Nie ustawiono
sendmail_etoaddr=Brakujący lub nieprawidłowo sformatowany adres docelowy
@@ -191,11 +204,12 @@ web_redirssl=Przekieruj SSL
twofactor_totp=Uwierzytelniacz TOTP
twofactor_eusers=Nie można wyłączyć uwierzytelniania dwuskładnikowego, ponieważ obecnie zarejestrowani są następujący użytkownicy : $1
twofactor_qrcode=Wprowadź tajny kod $1 w aplikacji TOTP lub zeskanuj poniższy kod QR.
+twofactor_qrcode_manual=Wprowadź kod tajny $1 w aplikacji TOTP i skonfiguruj go ręcznie, ponieważ generowanie kodów QR nie jest obsługiwane w tym systemie.
twofactor_etotptoken=Token TOTP musi być liczbą
-letsencrypt_title=Zaszyfrujmy żądanie certyfikatu
-letsencrypt_err=Nie można poprosić o certyfikat
-letsencrypt_ecmds=W systemie nie znaleziono ani polecenia klienta Let's Encrypt certbot, ani python
+letsencrypt_title=Żądanie certyfikatu dostawcy SSL
+letsencrypt_err=Nie udało się zażądać certyfikatu
+letsencrypt_ecmds=W systemie nie znaleziono ani natywnego polecenia klienta ACME certbot, ani polecenia python
letsencrypt_epythonmod=Moduł Pythona $1 wymagany przez wbudowanego klienta Let's Encrypt nie jest zainstalowany
letsencrypt_epythonver=Nie udało się pobrać wersji Pythona : $1
letsencrypt_epythonver2=Wymagana jest wersja Python $1 lub wyższa, ale masz tylko wersję $2.
@@ -203,6 +217,10 @@ letsencrypt_certbot=Certbot
letsencrypt_edroot=Wirtualny host Apache $1 nie ma katalogu dokumentów!
letsencrypt_edom=Brakująca lub nieprawidłowa nazwa domeny
letsencrypt_erenew=Brakujący lub nienumeryczny interwał odnawiania
+letsencrypt_eacmedir=Brakujący lub nieprawidłowy adres URL katalogu ACME
+letsencrypt_eeabdir=W przypadku korzystania z funkcji zewnętrznego powiązania konta należy wprowadzić adres URL katalogu ACME
+letsencrypt_eeabpair=Należy wprowadzić zarówno identyfikator klucza zewnętrznego powiązania konta, jak i klucz HMAC
+letsencrypt_eeabnative=Powiązanie konta zewnętrznego można wykorzystać wyłącznie po zainstalowaniu natywnego klienta ACME
letsencrypt_ewebroot=Katalog dokumentów witryny nie istnieje
letsencrypt_evhost=Nie znaleziono hosta wirtualnego pasującego $1
letsencrypt_efull=Oczekiwany pełny plik certyfikatu $1 nie został znaleziony
@@ -225,9 +243,9 @@ letsencrypt_echain=Nie udało się pobrać powiązanego certyfikatu : $1
letsencrypt_echain2=Łańcuch certyfikatu pobrany z $1 jest pusty
letsencrypt_ecsr=Nie udało się wygenerować CSR : $1
letsencrypt_ekeygen=Nie udało się wygenerować klucza prywatnego : $1
-letsencrypt_enative=Natywny klient Let's Encrypt (certbot) był wcześniej używany w tym systemie i musi być używany do wszystkich przyszłych żądań certyfikatów
-letsencrypt_eacmedns=Tylko oficjalny klient Let's Encrypt obsługuje sprawdzanie poprawności na podstawie DNS
-letsencrypt_eacmecertbot=Tylko oficjalny klient Let's Encrypt obsługuje weryfikację Certbot
+letsencrypt_enative=Natywny klient ACME (certbot) był wcześniej używany w tym systemie i musi być używany w przypadku wszystkich przyszłych żądań certyfikatów
+letsencrypt_eacmedns=Tylko natywny klient ACME obsługuje walidację opartą na DNS
+letsencrypt_eacmecertbot=Tylko natywny klient ACME obsługuje walidację Certbot
announce_hide=Ukryj to ogłoszenie
alert_hide=Ukryj alert
diff --git a/webmin/lang/pt b/webmin/lang/pt
index 10bd5e8a1..6e6a166cd 100644
--- a/webmin/lang/pt
+++ b/webmin/lang/pt
@@ -206,7 +206,6 @@ ssl_essl=O módulo Perl Net::SSLeay não parece estar instalado no seu sistema.
ssl_cpan=Ou como alternativa, pode usar o Webmin para descarregar e instalar o módulo Perl Net::SSLeay necessário por si.
ssl_emessage=A mensagem de erro do Perl foi : $1
ssl_desc1=O anfitrião no qual o Webmin está a correr parece ter o módulo Perl SSLeay instalado. Ao usá-lo, o Webmin suporta comunicação SSL cifrada entre o seu navegador e o servidor. Se está a aceder ao seu servidor Webmin através da Internet, então deve considerar seriamente a utilização de SSL para prevenir que um atacante consiga capturar a sua password do Webmin.
-ssl_desc2=Aviso - ligue o suporte SSL só no caso de ter um navegador que suporte SSL (como o Mozilla Firefox ou o Internet Explorer), e se não existir nenhum bloqueio a pedidos https (por exemplo devido a uma firewall) entre o seu navegadore o anfitrião Webmin.
ssl_header=Suporte SSL
ssl_on=Usar SSL se disponível?
ssl_key=Ficheiro de chave privada
diff --git a/webmin/lang/pt.auto b/webmin/lang/pt.auto
index 50b4f6ea3..9b342ed3f 100644
--- a/webmin/lang/pt.auto
+++ b/webmin/lang/pt.auto
@@ -144,6 +144,7 @@ lang_dateformat_yyyy/mm/dd=aaaa/mm/dd (ou seja, 2001/09/16)
ssl_deny=Versões do protocolo SSL a serem rejeitadas
ssl_compression=Permitir conexões SSL compactadas?
ssl_honorcipherorder=Forçar o uso da ordem de cifra definida pelo servidor?
+ssl_enforce=Impor SSL
ssl_hsts=Aplicar SSL com cabeçalho HSTS
ssl_extracasdef=O mesmo que configurações SSL globais
ssl_extracasnone=Nenhum para este endereço IP
@@ -186,7 +187,7 @@ ssl_tabcreate=Certificado autoassinado
ssl_tabcsr=Solicitação de assinatura de certificado
ssl_tabupload=Carregar certificado
ssl_tabcurrent=Certificado atual
-ssl_tablets=Vamos criptografar
+ssl_tablets=Provedor SSL
ssl_cheader=Detalhes do certificado atual
ssl_typeself=Autoassinado
ssl_typereal=Assinado pela CA
@@ -198,15 +199,15 @@ ssl_edownload=Falha ao extrair dados do PEM do certificado
ssl_csralready=Exibir chave e CSR mais recentes.
ssl_already1=Chave privada gerada anteriormente :
ssl_already2=Solicitação de assinatura de certificado gerada anteriormente :
-ssl_letsdesc=Let's Encrypt é uma autoridade de certificação gratuita, automatizada e aberta que pode ser usada para gerar um certificado SSL para uso pelo Webmin.
-ssl_letserr=Infelizmente, o Let's Encrypt não pode ser usado no seu sistema: $1.
-ssl_letserr2=Como alternativa, verifique a página de configuração do módulo para garantir que você esteja usando o caminho correto para o comando letsencrypt.
+ssl_letsdesc=Este formulário permite que você solicite um certificado SSL confiável para o Webmin de um provedor compatível com ACME, como o Let's Encrypt.
+ssl_letserr=Infelizmente, este sistema não pode solicitar certificados de um provedor SSL: $1.
+ssl_letserr2=Alternativamente, verifique a página de configuração do módulo para garantir que você esteja usando o caminho correto para o comando do cliente ACME configurado.
-ssl_letsdesc2=Esta página pode ser usada para solicitar um novo certificado, que substituirá qualquer outro atualmente configurado no Webmin. No entanto, o serviço Let's Encrypt exige que sua propriedade do domínio de certificado seja validada, verificando se este sistema hospeda o site do domínio. Isso é feito colocando um pequeno arquivo temporário no diretório de documentos do site.
+ssl_letsdesc2=O novo certificado substituirá o atualmente configurado no Webmin. Antes de ser emitido, o provedor ACME deve verificar o controle de cada nome de host usando um arquivo temporário no diretório de documentos do site ou um registro TXT de DNS temporário.
ssl_letsheader=Opções para novo certificado SSL
ssl_letsdoms=Nomes de host para certificado
ssl_subset=Ignorar nomes de host não verificáveis?
-ssl_letsmode=Vamos criptografar o método de validação
+ssl_letsmode=Método de validação de domínio
ssl_letsmode0=Host virtual Apache correspondente ao nome do host
ssl_letsmode1=Host virtual Apache selecionado
ssl_letsmode2=Outro diretório de documentos do servidor web
@@ -217,9 +218,17 @@ ssl_letsonly=Just Update Renewal
ssl_usewebmin=Copiar nova chave e certificado para o Webmin?
ssl_letsrenew=Meses entre renovação automática
ssl_letsnotrenew=Renove apenas manualmente
-ssl_staging=Vamos criptografar o servidor
-ssl_staging0=Real
-ssl_staging1=Preparo (somente teste)
+ssl_staging=Servidor provedor
+ssl_staging0=Produção
+ssl_staging1=Estágios (somente para teste)
+ssl_acmeopts=Configurações do provedor
+ssl_acmeextra=Mostrar configurações avançadas
+ssl_acmedir=URL personalizada do diretório ACME
+ssl_acmedirdesc=Se configurado, isso substitui o servidor provedor padrão acima.
+ssl_acmekid=ID da chave de vinculação da conta externa
+ssl_acmekiddesc=Opcional. Alguns provedores da ACME exigem isso além do URL do diretório.
+ssl_acmehmac=Chave HMAC de vinculação de conta externa
+ssl_acmehmacdesc=Opcional. Requer o cliente Certbot nativo quando utilizado.
newkey_ecns=Nenhum nome de servidor digitado
newkey_ecountry=O código do país deve ter duas letras
@@ -295,13 +304,14 @@ session_ecmd=Comando de alteração de senha ausente ou inválido
session_banner=Banner de pré-login
session_pmodedesc3=Política de expiração de senha
session_md5=Formato de hash de senha do Webmin
+session_rpc_timeout=tempo limite da sessão RPC
+session_erpc_timeout=O tempo limite da sessão RPC está ausente ou deve ser um número maior que 0
session_md5off=Determinar automaticamente
session_md5on=Use o formato de hash MD5
session_sha512=Use o formato de hash SHA512
session_yescrypt=Use o formato de hash yescrypt
session_emd5mod=O formato de hash MD5 não pode ser usado, pois o módulo Perl $1 não está instalado
-session_esha512mod=O formato de hash SHA512 não pode ser usado, pois o módulo Perl $1 não está instalado
-session_eyescrypt=o formato hash yescrypt não pode ser usado, pois o módulo Perl $1 não está instalado
+session_edigestcrypt=O formato de hash $1 não pode ser usado, pois a função crypt do sistema não o suporta
session_blocklock=Também bloqueia usuários com logins com falha
session_passapi=Ativar API de alteração de senha remota?
session_passapi0=API desativada
@@ -339,10 +349,11 @@ log_delete_webmincron=Funções agendadas $1 excluídas
log_run_webmincron=Ran $1 funções agendadas
log_save_webmincron=Função agendada atualizada no módulo $1
log_onedelete_webmincron=Função programada excluída no módulo $1
-log_letsencrypt=Solicitou novo certificado SSL da Let's Encrypt
-log_letsencryptdns=Criou o registro DNS Let's Encrypt para DNS para $1
-log_letsencryptcleanup=Removido Vamos criptografar o registro DNS para $1
+log_letsencrypt=Solicitei um novo certificado SSL de um provedor ACME
+log_letsencryptdns=Registro DNS ACME criado para $1
+log_letsencryptcleanup=Registro DNS ACME removido para $1
+themes_configure=Abra a página de configuração do tema
themes_none=Nenhum - deixe o tema decidir
themes_overdesc=As sobreposições modificam a aparência de um tema, alterando as cores, os planos de fundo e os ícones. Eles não alteram o layout.
themes_overlay=Sobreposição atual :
@@ -616,6 +627,7 @@ sendmail_authdef=Padrão (atualmente Cram-MD5)
sendmail_from=Endereço do email para Webmin
sendmail_fromdef=Padrão ($1)
sendmail_fromaddr=Endereço
+sendmail_name=Nome de exibição
sendmail_toaddr=Endereço de destino padrão para notificações
sendmail_to_def=Nenhum definido
sendmail_etoaddr=Endereço de destino ausente ou formatado incorretamente
@@ -717,6 +729,7 @@ twofactor_enrolllink=Agora você pode se inscrever para autenticação de dois f
twofactor_url=Para saber mais sobre $1, consulte o site em $2.
twofactor_etotpmodule=O módulo Perl $1 necessário para autenticação de dois fatores não está instalado. Use a página Perl Modules no Webmin para instalá-lo.
twofactor_qrcode=Digite o código secreto $1 no aplicativo TOTP ou escaneie o código QR abaixo.
+twofactor_qrcode_manual=Insira o código secreto $1 no aplicativo TOTP e configure-o manualmente, pois a geração de código QR não é compatível com este sistema.
twofactor_etotpid=Segredo codificado em base32 TOTP inválido
twofactor_etotptoken=O token TOTP deve ser um número
twofactor_etotpmatch=Código OTP incorreto
@@ -726,9 +739,9 @@ twofactor_secret0=Use chave de 16 caracteres
twofactor_esecret=A chave secreta deve ter exatamente 16 caracteres e conter apenas letras e números
twofactor_esession=A autenticação de dois fatores não pode ser usada, a menos que a autenticação baseada em sessão esteja ativa
-letsencrypt_title=Vamos criptografar a solicitação de certificado
-letsencrypt_err=Falha ao solicitar certificado
-letsencrypt_ecmds=Nem o comando do cliente Let's Encrypt certbot nem o python foram encontrados em seu sistema
+letsencrypt_title=Solicitação de certificado de provedor SSL
+letsencrypt_err=Falha ao solicitar o certificado
+letsencrypt_ecmds=Nem o comando nativo do cliente ACME, certbot, nem o comando python foram encontrados no seu sistema
letsencrypt_epythonmod=O módulo Python $1 necessário pelo cliente Let's Encrypt criptografado não está instalado
letsencrypt_epythonver=Falha ao obter a versão do Python : $1
letsencrypt_epythonver2=A versão Python $1 ou superior é necessária, mas você só possui a versão $2.
@@ -736,6 +749,10 @@ letsencrypt_certbot=Certbot
letsencrypt_edroot=O host virtual do Apache $1 não possui diretório de documentos!
letsencrypt_edom=Nome de domínio ausente ou inválido
letsencrypt_erenew=Intervalo de renovação ausente ou não numérico
+letsencrypt_eacmedir=URL do diretório ACME ausente ou inválida
+letsencrypt_eeabdir=É necessário inserir um URL de diretório ACME ao usar a vinculação de conta externa
+letsencrypt_eeabpair=É necessário inserir tanto o ID da chave de vinculação da conta externa quanto a chave HMAC
+letsencrypt_eeabnative=A vinculação de conta externa só pode ser usada quando o cliente ACME nativo estiver instalado
letsencrypt_ewebroot=O diretório de documentos do site não existe
letsencrypt_evhost=Nenhum host virtual correspondente a $1 foi encontrado
letsencrypt_efull=O arquivo de certificado completo esperado $1 não foi encontrado
@@ -758,9 +775,9 @@ letsencrypt_echain=Falha ao baixar o certificado encadeado : $1
letsencrypt_echain2=O certificado encadeado baixado de $1 está vazio
letsencrypt_ecsr=Falha ao gerar o CSR : $1
letsencrypt_ekeygen=Falha ao gerar a chave privada : $1
-letsencrypt_enative=O cliente Let's Encrypt criptografado (certbot) foi usado anteriormente neste sistema e deve ser usado para todas as solicitações futuras de certificado
-letsencrypt_eacmedns=Somente o cliente oficial Let's Encrypt suporta validação baseada em DNS
-letsencrypt_eacmecertbot=Somente o cliente oficial Let's Encrypt oferece suporte à validação Certbot
+letsencrypt_enative=O cliente nativo do ACME (certbot) era usado anteriormente neste sistema e deve ser usado para todas as solicitações de certificado futuras
+letsencrypt_eacmedns=Somente o cliente ACME nativo oferece suporte à validação baseada em DNS
+letsencrypt_eacmecertbot=Somente o cliente nativo do ACME oferece suporte à validação do Certbot
announce_hide=Ocultar este anúncio
alert_hide=Ocultar alerta
diff --git a/webmin/lang/pt_BR b/webmin/lang/pt_BR
index 363666823..1ed97d737 100644
--- a/webmin/lang/pt_BR
+++ b/webmin/lang/pt_BR
@@ -288,7 +288,6 @@ ssl_essl=O módulo perl Net:SSLeay não parece estar instalado em seu sistema. P
ssl_cpan=Alternativamente, você pode ter deixar o Webmin baixar e instalar o módulo requerido do Pearl Net::SSLeay para você.
ssl_emessage=A mensagem de erro do Pearl foi : $1
ssl_desc1=O host no qual o Webmin está sendo executado parece possuir o módulo Perl SSLeay instalado. Usando-o o Webmin suporta criptografia de comunicação SSL entre seu navegador e o servidor. Caso você esteja acessando seu servidor Webmin através da Internet você deveria definitivamente considerar usar SSL para prevenir que um invasor possa capturar sua senha do Webmin.
-ssl_desc2=Aviso - somente habilite o suporte SSL caso você possua um navegador que suporte SSL (como o Firefox ou Epiphany) e não exista um firewall bloqueando requisições https entre seu navegador e o host Webmin
ssl_header=Suporte SSL
ssl_on=Habilitar SSL se disponível ?
ssl_key=Arquivo de chave privada
diff --git a/webmin/lang/pt_BR.auto b/webmin/lang/pt_BR.auto
index e9ae82479..dad6aea27 100644
--- a/webmin/lang/pt_BR.auto
+++ b/webmin/lang/pt_BR.auto
@@ -60,6 +60,7 @@ lang_dateformat_yyyy/mm/dd=aaaa/mm/dd (ou seja, 2001/09/16)
ssl_deny=Versões do protocolo SSL a serem rejeitadas
ssl_compression=Permitir conexões SSL compactadas?
ssl_honorcipherorder=Forçar o uso da ordem de cifra definida pelo servidor?
+ssl_enforce=Impor SSL
ssl_hsts=Aplicar SSL com cabeçalho HSTS
ssl_extracasdef=O mesmo que configurações SSL globais
ssl_extracasnone=Nenhum para este endereço IP
@@ -79,19 +80,19 @@ ssl_privchain=Texto do certificado encadeado
ssl_nochain=Nenhum certificado encadeado
ssl_leavechain=Usar certificado encadeado existente
ssl_tabcsr=Solicitação de assinatura de certificado
-ssl_tablets=Vamos criptografar
+ssl_tablets=Provedor SSL
ssl_csralready=Exibir chave e CSR mais recentes.
ssl_already1=Chave privada gerada anteriormente :
ssl_already2=Solicitação de assinatura de certificado gerada anteriormente :
-ssl_letsdesc=Let's Encrypt é uma autoridade de certificação gratuita, automatizada e aberta que pode ser usada para gerar um certificado SSL para uso pelo Webmin.
-ssl_letserr=Infelizmente, o Let's Encrypt não pode ser usado no seu sistema: $1.
-ssl_letserr2=Como alternativa, verifique a página de configuração do módulo para garantir que você esteja usando o caminho correto para o comando letsencrypt.
+ssl_letsdesc=Este formulário permite que você solicite um certificado SSL confiável para o Webmin de um provedor compatível com ACME, como o Let's Encrypt.
+ssl_letserr=Infelizmente, este sistema não pode solicitar certificados de um provedor SSL: $1.
+ssl_letserr2=Alternativamente, verifique a página de configuração do módulo para garantir que você esteja usando o caminho correto para o comando do cliente ACME configurado.
-ssl_letsdesc2=Esta página pode ser usada para solicitar um novo certificado, que substituirá qualquer outro atualmente configurado no Webmin. No entanto, o serviço Let's Encrypt exige que sua propriedade do domínio de certificado seja validada, verificando se este sistema hospeda o site do domínio. Isso é feito colocando um pequeno arquivo temporário no diretório de documentos do site.
+ssl_letsdesc2=O novo certificado substituirá o atualmente configurado no Webmin. Antes de ser emitido, o provedor ACME deve verificar o controle de cada nome de host usando um arquivo temporário no diretório de documentos do site ou um registro TXT de DNS temporário.
ssl_letsheader=Opções para novo certificado SSL
ssl_letsdoms=Nomes de host para certificado
ssl_subset=Ignorar nomes de host não verificáveis?
-ssl_letsmode=Vamos criptografar o método de validação
+ssl_letsmode=Método de validação de domínio
ssl_letsmode0=Host virtual Apache correspondente ao nome do host
ssl_letsmode1=Host virtual Apache selecionado
ssl_letsmode2=Outro diretório de documentos do servidor web
@@ -102,9 +103,17 @@ ssl_letsonly=Just Update Renewal
ssl_usewebmin=Copiar nova chave e certificado para o Webmin?
ssl_letsrenew=Meses entre renovação automática
ssl_letsnotrenew=Renove apenas manualmente
-ssl_staging=Vamos criptografar o servidor
-ssl_staging0=Real
-ssl_staging1=Preparo (somente teste)
+ssl_staging=Servidor provedor
+ssl_staging0=Produção
+ssl_staging1=Estágios (somente para teste)
+ssl_acmeopts=Configurações do provedor
+ssl_acmeextra=Mostrar configurações avançadas
+ssl_acmedir=URL personalizada do diretório ACME
+ssl_acmedirdesc=Se configurado, isso substitui o servidor provedor padrão acima.
+ssl_acmekid=ID da chave de vinculação da conta externa
+ssl_acmekiddesc=Opcional. Alguns provedores da ACME exigem isso além do URL do diretório.
+ssl_acmehmac=Chave HMAC de vinculação de conta externa
+ssl_acmehmacdesc=Opcional. Requer o cliente Certbot nativo quando utilizado.
newkey_ecns=Nenhum nome de servidor digitado
@@ -146,13 +155,14 @@ session_pamend=Passar o status do PAM para outros módulos?
session_cmddef=Alteração de senha expirada
session_banner=Banner de pré-login
session_md5=Formato de hash de senha do Webmin
+session_rpc_timeout=tempo limite da sessão RPC
+session_erpc_timeout=O tempo limite da sessão RPC está ausente ou deve ser um número maior que 0
session_md5off=Determinar automaticamente
session_md5on=Use o formato de hash MD5
session_sha512=Use o formato de hash SHA512
session_yescrypt=Use o formato de hash yescrypt
session_emd5mod=O formato de hash MD5 não pode ser usado, pois o módulo Perl $1 não está instalado
-session_esha512mod=O formato de hash SHA512 não pode ser usado, pois o módulo Perl $1 não está instalado
-session_eyescrypt=o formato hash yescrypt não pode ser usado, pois o módulo Perl $1 não está instalado
+session_edigestcrypt=O formato de hash $1 não pode ser usado, pois a função crypt do sistema não o suporta
session_passapi=Ativar API de alteração de senha remota?
session_passapi0=API desativada
session_passapi1=API habilitada para usuários Unix
@@ -178,9 +188,11 @@ log_delete_webmincron=Funções agendadas $1 excluídas
log_run_webmincron=Ran $1 funções agendadas
log_save_webmincron=Função agendada atualizada no módulo $1
log_onedelete_webmincron=Função programada excluída no módulo $1
-log_letsencrypt=Solicitou novo certificado SSL da Let's Encrypt
-log_letsencryptdns=Criou o registro DNS Let's Encrypt para DNS para $1
-log_letsencryptcleanup=Removido Vamos criptografar o registro DNS para $1
+log_letsencrypt=Solicitei um novo certificado SSL de um provedor ACME
+log_letsencryptdns=Registro DNS ACME criado para $1
+log_letsencryptcleanup=Registro DNS ACME removido para $1
+
+themes_configure=Abra a página de configuração do tema
themes_ok=Tema alterado com sucesso redirecionando agora ..
themes_ok2=Sobreposição de tema alterada, redirecionando agora com sucesso ..
@@ -290,6 +302,7 @@ sendmail_authdef=Padrão (atualmente Cram-MD5)
sendmail_from=Endereço do email para Webmin
sendmail_fromdef=Padrão ($1)
sendmail_fromaddr=Endereço
+sendmail_name=Nome de exibição
sendmail_toaddr=Endereço de destino padrão para notificações
sendmail_to_def=Nenhum definido
sendmail_etoaddr=Endereço de destino ausente ou formatado incorretamente
@@ -391,6 +404,7 @@ twofactor_enrolllink=Agora você pode se inscrever para autenticação de dois f
twofactor_url=Para saber mais sobre $1, consulte o site em $2.
twofactor_etotpmodule=O módulo Perl $1 necessário para autenticação de dois fatores não está instalado. Use a página Perl Modules no Webmin para instalá-lo.
twofactor_qrcode=Digite o código secreto $1 no aplicativo TOTP ou escaneie o código QR abaixo.
+twofactor_qrcode_manual=Insira o código secreto $1 no aplicativo TOTP e configure-o manualmente, pois a geração de código QR não é compatível com este sistema.
twofactor_etotpid=Segredo codificado em base32 TOTP inválido
twofactor_etotptoken=O token TOTP deve ser um número
twofactor_etotpmatch=Código OTP incorreto
@@ -400,9 +414,9 @@ twofactor_secret0=Use chave de 16 caracteres
twofactor_esecret=A chave secreta deve ter exatamente 16 caracteres e conter apenas letras e números
twofactor_esession=A autenticação de dois fatores não pode ser usada, a menos que a autenticação baseada em sessão esteja ativa
-letsencrypt_title=Vamos criptografar a solicitação de certificado
-letsencrypt_err=Falha ao solicitar certificado
-letsencrypt_ecmds=Nem o comando do cliente Let's Encrypt certbot nem o python foram encontrados em seu sistema
+letsencrypt_title=Solicitação de certificado de provedor SSL
+letsencrypt_err=Falha ao solicitar o certificado
+letsencrypt_ecmds=Nem o comando nativo do cliente ACME, certbot, nem o comando python foram encontrados no seu sistema
letsencrypt_epythonmod=O módulo Python $1 necessário pelo cliente Let's Encrypt criptografado não está instalado
letsencrypt_epythonver=Falha ao obter a versão do Python : $1
letsencrypt_epythonver2=A versão Python $1 ou superior é necessária, mas você só possui a versão $2.
@@ -410,6 +424,10 @@ letsencrypt_certbot=Certbot
letsencrypt_edroot=O host virtual do Apache $1 não possui diretório de documentos!
letsencrypt_edom=Nome de domínio ausente ou inválido
letsencrypt_erenew=Intervalo de renovação ausente ou não numérico
+letsencrypt_eacmedir=URL do diretório ACME ausente ou inválida
+letsencrypt_eeabdir=É necessário inserir um URL de diretório ACME ao usar a vinculação de conta externa
+letsencrypt_eeabpair=É necessário inserir tanto o ID da chave de vinculação da conta externa quanto a chave HMAC
+letsencrypt_eeabnative=A vinculação de conta externa só pode ser usada quando o cliente ACME nativo estiver instalado
letsencrypt_ewebroot=O diretório de documentos do site não existe
letsencrypt_evhost=Nenhum host virtual correspondente a $1 foi encontrado
letsencrypt_efull=O arquivo de certificado completo esperado $1 não foi encontrado
@@ -432,9 +450,9 @@ letsencrypt_echain=Falha ao baixar o certificado encadeado : $1
letsencrypt_echain2=O certificado encadeado baixado de $1 está vazio
letsencrypt_ecsr=Falha ao gerar o CSR : $1
letsencrypt_ekeygen=Falha ao gerar a chave privada : $1
-letsencrypt_enative=O cliente Let's Encrypt criptografado (certbot) foi usado anteriormente neste sistema e deve ser usado para todas as solicitações futuras de certificado
-letsencrypt_eacmedns=Somente o cliente oficial Let's Encrypt suporta validação baseada em DNS
-letsencrypt_eacmecertbot=Somente o cliente oficial Let's Encrypt oferece suporte à validação Certbot
+letsencrypt_enative=O cliente nativo do ACME (certbot) era usado anteriormente neste sistema e deve ser usado para todas as solicitações de certificado futuras
+letsencrypt_eacmedns=Somente o cliente ACME nativo oferece suporte à validação baseada em DNS
+letsencrypt_eacmecertbot=Somente o cliente nativo do ACME oferece suporte à validação do Certbot
announce_hide=Ocultar este anúncio
alert_hide=Ocultar alerta
diff --git a/webmin/lang/ru b/webmin/lang/ru
index a407c7afe..fec9b7dd0 100644
--- a/webmin/lang/ru
+++ b/webmin/lang/ru
@@ -283,7 +283,6 @@ ssl_title=Шифрование SSL
ssl_essl=Модуль Net::SSLeay perl в вашей системе не установлен. Чтобы установить библиотеку OpenSSL и модуль Net::SSLeay, следуйте этим указаниям с сайта Webmin.
ssl_emessage=Perl вернул следующее сообщение об ошибке : $1
ssl_desc1=На компьютере, на котором запущен Webmin, установлен модуль SSLeay для Perl. С его помощью Webmin может установить защищенное соединение с вашим браузером. Если вы подключаетесь к вашему серверу Webmin через Интернет, то вы должны всерьез задуматься об использовании SSL для предотвращения перехвата вашего пароля Webmin хакерами.
-ssl_desc2=Внимание - включайте поддержку SSL только если ваш браузер поддерживает SSL (например Netscape или IE), а также если между вашим браузером и сервером Webmin нет сетевого экрана (firewall), блокирующего запросы https.
ssl_header=Поддержка SSL
ssl_on=Разрешить поддержку SSL, если она доступна?
ssl_key=Файл личного ключа
diff --git a/webmin/lang/ru.auto b/webmin/lang/ru.auto
index bfd40dd88..5f9c5ca31 100644
--- a/webmin/lang/ru.auto
+++ b/webmin/lang/ru.auto
@@ -67,6 +67,7 @@ ssl_cpan=Кроме того, Webmin может загрузить
ssl_deny=Версии протокола SSL для отклонения
ssl_compression=Разрешить сжатые SSL-соединения?
ssl_honorcipherorder=Принудительно использовать серверный порядок шифров?
+ssl_enforce=Принудительное использование SSL
ssl_hsts=Использовать SSL с заголовком HSTS
ssl_extracasdef=То же, что глобальные настройки SSL
ssl_extracasnone=Нет для этого IP-адреса
@@ -86,18 +87,18 @@ ssl_privchain=Связанный текст сертификата
ssl_nochain=Нет цепного сертификата
ssl_leavechain=Использовать существующий цепочечный сертификат
ssl_tabcsr=Запрос на подпись сертификата
-ssl_tablets=Давайте зашифруем
+ssl_tablets=Поставщик SSL
ssl_csralready=Просмотреть самый последний ключ и CSR.
ssl_already1=Ранее сгенерированный закрытый ключ :
ssl_already2=Ранее сгенерированный запрос на подпись сертификата :
-ssl_letsdesc=Let's Encrypt - это бесплатный, автоматизированный и открытый центр сертификации, который можно использовать для создания сертификата SSL для использования Webmin.
-ssl_letserr=К сожалению, Let's Encrypt не может быть использован в вашей системе: $1.
-ssl_letserr2=Кроме того, проверьте страницу конфигурации модуля, чтобы убедиться, что вы используете правильный путь к команде letsencrypt.
-ssl_letsdesc2=Эта страница может использоваться для запроса нового сертификата, который перезапишет любой другой, настроенный в данный момент в Webmin. Однако служба Let's Encrypt требует подтверждения вашего права собственности на домен сертификата, проверив, что в этой системе размещается веб-сайт для домена. Это делается путем размещения небольшого временного файла в каталоге документов на веб-сайте.
+ssl_letsdesc=Эта форма позволяет запросить доверенный SSL-сертификат для Webmin у провайдера, совместимого с ACME, например, Let's Encrypt.
+ssl_letserr=К сожалению, эта система не может запрашивать сертификаты у SSL-провайдера: $1.
+ssl_letserr2=В качестве альтернативы, проверьте страницу конфигурация модуля, чтобы убедиться, что вы используете правильный путь к настроенной команде клиента ACME.
+ssl_letsdesc2=Новый сертификат заменит тот, который в настоящее время настроен в Webmin. Прежде чем он будет выдан, поставщик ACME должен подтвердить контроль над каждым именем хоста, используя либо временный файл в каталоге документов веб-сайта, либо временную запись DNS TXT.
ssl_letsheader=Параметры для нового SSL-сертификата
ssl_letsdoms=Имена хостов для сертификата
ssl_subset=Пропускать непроверяемые имена хостов?
-ssl_letsmode=Метод проверки Let's Encrypt
+ssl_letsmode=Метод проверки предметной области
ssl_letsmode0=Виртуальный хост Apache, соответствующий имени хоста
ssl_letsmode1=Выбранный виртуальный хост Apache
ssl_letsmode2=Другой каталог документов веб-сервера
@@ -108,9 +109,17 @@ ssl_letsonly=Просто обновить продление
ssl_usewebmin=Скопировать новый ключ и сертификат в Webmin?
ssl_letsrenew=Месяцы между автоматическим продлением
ssl_letsnotrenew=Обновлять только вручную
-ssl_staging=Давайте зашифруем сервер
-ssl_staging0=реальный
-ssl_staging1=Постановка (только тест)
+ssl_staging=Сервер-провайдер
+ssl_staging0=Производство
+ssl_staging1=Этапирование (только для тестирования)
+ssl_acmeopts=Настройки поставщика
+ssl_acmeextra=Показать расширенные настройки
+ssl_acmedir=Пользовательский URL-адрес каталога ACME
+ssl_acmedirdesc=Если этот параметр задан, он переопределяет сервер-провайдер по умолчанию, указанный выше.
+ssl_acmekid=Идентификатор ключа привязки внешней учетной записи
+ssl_acmekiddesc=Необязательно. Некоторые поставщики ACME требуют этого в дополнение к URL-адресу каталога.
+ssl_acmehmac=Ключ HMAC для привязки внешней учетной записи
+ssl_acmehmacdesc=Необязательно. При использовании требуется встроенный клиент Certbot.
newkey_ecns=Не введены имена серверов
@@ -160,13 +169,14 @@ session_pamend=Передать статус PAM другим модулям?
session_cmddef=Смена пароля истекла
session_banner=Баннер перед входом в систему
session_md5=Формат хэширования пароля Webmin
+session_rpc_timeout=Таймаут сессии RPC
+session_erpc_timeout=Отсутствует значение параметра timeout RPC session out или оно должно быть больше 0
session_md5off=Определить автоматически
session_md5on=Использовать формат хеширования MD5
session_sha512=Использовать формат хеширования SHA512
session_yescrypt=Использовать формат хеширования yescrypt
session_emd5mod=Невозможно использовать формат хеширования MD5, так как модуль Perl $1 не установлен
-session_esha512mod=Невозможно использовать формат хеширования SHA512, так как модуль Perl $1 не установлен
-session_eyescrypt=Невозможно использовать формат хеширования yescrypt, так как модуль Perl $1 не установлен
+session_edigestcrypt=Формат хеширования $1 использовать нельзя, поскольку функция системы crypt его не поддерживает
session_passapi=Включить API удаленной смены пароля?
session_passapi0=API отключен
session_passapi1=API включен для пользователей Unix
@@ -192,9 +202,11 @@ log_delete_webmincron=Удалены $1 запланированные функ
log_run_webmincron=Выполнено $1 запланированных функций
log_save_webmincron=Обновлена запланированная функция в модуле $1
log_onedelete_webmincron=Удаленная запланированная функция в модуле $1
-log_letsencrypt=Запрошен новый сертификат SSL от Let's Encrypt
-log_letsencryptdns=Создана запись «Зашифруем DNS» для $1
-log_letsencryptcleanup=Удалена запись «Зашифровать DNS» для $1
+log_letsencrypt=Запросил новый SSL-сертификат у провайдера ACME
+log_letsencryptdns=Создана DNS-запись ACME для $1
+log_letsencryptcleanup=Удалена DNS-запись ACME для $1
+
+themes_configure=Открыть страницу настроек темы
themes_ok=Тема успешно изменена, сейчас идет перенаправление ..
themes_ok2=Тема наложения успешно изменена, сейчас выполняется перенаправление ..
@@ -307,6 +319,7 @@ sendmail_authdef=По умолчанию (в настоящее время Cram-
sendmail_from=С адреса для электронной почты от Webmin
sendmail_fromdef=По умолчанию ($1)
sendmail_fromaddr=Адрес
+sendmail_name=Отображаемое имя
sendmail_toaddr=Адрес назначения по умолчанию для уведомлений
sendmail_to_def=Не установлено
sendmail_etoaddr=Отсутствует или неправильно отформатирован адрес назначения
@@ -408,6 +421,7 @@ twofactor_enrolllink=Теперь вы можете зарегистрирова
twofactor_url=Чтобы узнать больше о $1, посетите его веб-сайт по адресу $2.
twofactor_etotpmodule=Модуль Perl $1, необходимый для двухфакторной аутентификации, не установлен. Используйте Perl Modules в Webmin, чтобы установить его.
twofactor_qrcode=Введите секретный код $1 в приложении TOTP или отсканируйте QR-код ниже.
+twofactor_qrcode_manual=Введите секретный код $1 в приложении TOTP и настройте его вручную, поскольку генерация QR-кодов в этой системе не поддерживается.
twofactor_etotpid=Неверный TOTP base32-закодированный секрет
twofactor_etotptoken=Токен TOTP должен быть числом
twofactor_etotpmatch=Неверный код OTP
@@ -417,9 +431,9 @@ twofactor_secret0=Используйте 16-символьную клавишу
twofactor_esecret=Секретный ключ должен быть ровно 16 символов и содержать только буквы и цифры
twofactor_esession=Двухфакторная аутентификация не может быть использована, если активна сеансовая аутентификация
-letsencrypt_title=Давайте зашифруем запрос сертификата
+letsencrypt_title=Запрос на сертификат поставщика SSL
letsencrypt_err=Не удалось запросить сертификат
-letsencrypt_ecmds=Ни ваша клиентская команда Let's Encrypt certbot, ни команда python не были найдены в вашей системе
+letsencrypt_ecmds=В вашей системе не были обнаружены ни встроенная команда клиента ACME certbot, ни команда python
letsencrypt_epythonmod=Модуль Python $1, необходимый для встроенного клиента Let's Encrypt, не установлен
letsencrypt_epythonver=Не удалось получить версию Python : $1
letsencrypt_epythonver2=Требуется версия Python $1 или выше, но у вас есть только версия $2.
@@ -427,6 +441,10 @@ letsencrypt_certbot=Certbot
letsencrypt_edroot=Виртуальный хост Apache $1 не имеет каталога документов!
letsencrypt_edom=Отсутствующее или неверное доменное имя
letsencrypt_erenew=Пропущенный или нечисловой интервал обновления
+letsencrypt_eacmedir=Отсутствует или недействителен URL-адрес каталога ACME
+letsencrypt_eeabdir=При использовании привязки внешней учетной записи необходимо указать URL-адрес каталога ACME
+letsencrypt_eeabpair=Необходимо ввести как идентификатор ключа привязки внешней учетной записи, так и ключ HMAC
+letsencrypt_eeabnative=Привязка внешних учетных записей может использоваться только при установленном собственном клиенте ACME
letsencrypt_ewebroot=Каталог документов сайта не существует
letsencrypt_evhost=Не найдено виртуального хоста, соответствующего $1
letsencrypt_efull=Ожидаемый полный файл сертификата $1 не найден
@@ -449,9 +467,9 @@ letsencrypt_echain=Не удалось загрузить связанный с
letsencrypt_echain2=Цепной сертификат, загруженный из $1, пуст
letsencrypt_ecsr=Не удалось сгенерировать CSR : $1
letsencrypt_ekeygen=Не удалось сгенерировать закрытый ключ : $1
-letsencrypt_enative=Собственный клиент Let's Encrypt (certbot) ранее использовался в этой системе и должен использоваться для всех будущих запросов на сертификат
-letsencrypt_eacmedns=Только официальный клиент Let's Encrypt поддерживает проверку на основе DNS
-letsencrypt_eacmecertbot=Только официальный клиент Let's Encrypt поддерживает проверку Certbot
+letsencrypt_enative=Ранее в этой системе использовался встроенный клиент ACME (certbot), и его необходимо использовать для всех будущих запросов на получение сертификатов
+letsencrypt_eacmedns=Только встроенный клиент ACME поддерживает проверку на основе DNS
+letsencrypt_eacmecertbot=Проверка подлинности Certbot поддерживается только встроенным клиентом ACME
announce_hide=Скрыть это объявление
alert_hide=Скрыть оповещение
diff --git a/webmin/lang/sk b/webmin/lang/sk
index 43767c120..802debde3 100644
--- a/webmin/lang/sk
+++ b/webmin/lang/sk
@@ -257,7 +257,6 @@ ssl_essl=Perlovský modul Net:SSLeay nie je pravdepodobne nainštalovaný na Va
ssl_cpan=Webmin môže stiahnuť a nainštalovať potrebný Net::SSLeay Perl modul.
ssl_emessage=Chybové hlásenie z Perlu : $1
ssl_desc1=Počítač na ktorom beží Webmin pravdepodobne má nainštalovaný Perlovský modul SSLeay, vďaka ktorému môže Webmin použiť SSL šifrovanie komunikácie medzi prehliadačom a serverom. Pri používaní Webmin servera z internetu by ste mali bezpodmienečne používať SSL aby nedošlo k odchyteniu Vašich hesiel.
-ssl_desc2=Upozornenie - podpora SSL je dostupná vo väčšine prehliadačov, no nezapínajte ju, pokiaľ si nie ste istý, že Váš prehliadač SSL podporuje a pokiaľ nie ste za firewalom blokujúcim https požiadavky.
ssl_header=Podpora SSL
ssl_on=Ak je dostupné SSL použiť ho?
ssl_key=Súbor súkromného kľúča
diff --git a/webmin/lang/sk.auto b/webmin/lang/sk.auto
index 02c0215af..fa812054d 100644
--- a/webmin/lang/sk.auto
+++ b/webmin/lang/sk.auto
@@ -93,6 +93,7 @@ lang_dateformat_yyyy/mm/dd=rrrr/mm/dd (t. j. 2001/09/16)
ssl_deny=Verzie protokolu SSL, ktoré sa majú odmietnuť
ssl_compression=Povoliť komprimované pripojenia SSL?
ssl_honorcipherorder=Vynútiť použitie serverom definovanej objednávky šifry?
+ssl_enforce=Vynútiť SSL
ssl_hsts=Vynútiť SSL s hlavičkou HSTS
ssl_extracasdef=Rovnaké ako globálne nastavenie SSL
ssl_extracasnone=Žiadne pre túto IP adresu
@@ -119,20 +120,20 @@ ssl_leavechain=Použite existujúci pripútaný certifikát
ssl_upload=Alebo z nahraného súboru
ssl_below=Zadané nižšie ..
ssl_tabcsr=Žiadosť o podpísanie certifikátu
-ssl_tablets=Poďme šifrovať
+ssl_tablets=Poskytovateľ SSL
ssl_current=Táto časť zobrazuje podrobnosti o aktuálnom certifikáte SSL Webmin a umožňuje jeho stiahnutie, aby ho váš prehliadač mohol akceptovať.
ssl_csralready=Zobraziť posledný kľúč a CSR.
ssl_already1=Predtým vygenerovaný súkromný kľúč :
ssl_already2=Doteraz vygenerovaná žiadosť o podpísanie certifikátu :
-ssl_letsdesc=Poďme šifrovať je bezplatná, automatizovaná a otvorená certifikačná autorita, ktorú je možné použiť na vygenerovanie certifikátu SSL pre použitie serverom Webmin.
-ssl_letserr=Bohužiaľ, poďme šifrovať nie je možné použiť vo vašom systéme: $1.
-ssl_letserr2=Prípadne si pozrite stránku Konfigurácia modulu a uistite sa, že používate správnu cestu k príkazu letsencrypt.
+ssl_letsdesc=Tento formulár vám umožňuje požiadať o dôveryhodný SSL certifikát pre Webmin od poskytovateľa kompatibilného s ACME, ako je napríklad Let's Encrypt.
+ssl_letserr=Tento systém bohužiaľ nemôže vyžiadať certifikáty od poskytovateľa SSL: $1.
+ssl_letserr2=Prípadne skontrolujte stránku konfigurácie modulu, aby ste sa uistili, že používate správnu cestu k nakonfigurovanému príkazu klienta ACME.
-ssl_letsdesc2=Táto stránka sa dá použiť na vyžiadanie nového certifikátu, ktorý prepíše všetky ostatné, ktoré sú momentálne nakonfigurované v aplikácii Webmin. Služba Let's Encrypt však vyžaduje, aby bolo vaše vlastníctvo domény certifikátov overené kontrolou, či tento systém je hostiteľom webovej stránky pre túto doménu. To sa dosiahne umiestnením malého dočasného súboru do adresára dokumentov webovej stránky.
+ssl_letsdesc2=Nový certifikát nahradí certifikát, ktorý je momentálne nakonfigurovaný vo Webmine. Pred jeho vydaním musí poskytovateľ ACME overiť kontrolu nad každým názvom hostiteľa pomocou dočasného súboru v adresári dokumentov webovej stránky alebo dočasného TXT záznamu DNS.
ssl_letsheader=Možnosti pre nový certifikát SSL
ssl_letsdoms=Názvy hostiteľov pre certifikát
ssl_subset=Preskočiť neoveriteľné názvy hostiteľov?
-ssl_letsmode=Overovacia metóda Let's Encrypt
+ssl_letsmode=Metóda overenia domény
ssl_letsmode0=Virtuálny hostiteľ Apache zodpovedá názvu hostiteľa
ssl_letsmode1=Vybraný virtuálny hostiteľ Apache
ssl_letsmode2=Iný adresár dokumentov webového servera
@@ -143,9 +144,17 @@ ssl_letsonly=Iba aktualizujte obnovenie
ssl_usewebmin=Kopírovať nový kľúč a certifikát do Webmin?
ssl_letsrenew=Mesiace medzi automatickým obnovením
ssl_letsnotrenew=Obnoviť iba ručne
-ssl_staging=Poďme šifrovať server
-ssl_staging0=Reálny
-ssl_staging1=Staging (iba test)
+ssl_staging=Server poskytovateľa
+ssl_staging0=Produkcia
+ssl_staging1=Stanovenie štádia (iba test)
+ssl_acmeopts=Nastavenia poskytovateľa
+ssl_acmeextra=Zobraziť rozšírené nastavenia
+ssl_acmedir=Vlastná adresa URL adresára ACME
+ssl_acmedirdesc=Ak je nastavené, prepíše predvolený server poskytovateľa uvedený vyššie.
+ssl_acmekid=ID kľúča väzby externého účtu
+ssl_acmekiddesc=Voliteľné. Niektorí poskytovatelia ACME to vyžadujú okrem adresárovej adresy.
+ssl_acmehmac=Kľúč HMAC pre väzbu externého účtu
+ssl_acmehmacdesc=Voliteľné. Pri použití je potrebný natívny klient Certbot.
newkey_ecns=Neboli zadané žiadne názvy serverov
@@ -205,13 +214,14 @@ session_ecmd=Chýbajúci alebo neplatný príkaz na zmenu hesla
session_banner=Banner pred prihlásením
session_pmodedesc3=Zásady vypršania platnosti hesla
session_md5=Formát hashovania hesla webmin
+session_rpc_timeout=Časový limit relácie RPC
+session_erpc_timeout=Časový limit relácie RPC chýba alebo musí byť číslo väčšie ako 0
session_md5off=Automaticky určiť
session_md5on=Použite formát hash MD5
session_sha512=Použite formát hash SHA512
session_yescrypt=Použite formát hash yescrypt
session_emd5mod=Formát hash MD5 nemožno použiť, pretože nie je nainštalovaný modul Perl $1
-session_esha512mod=Formát hash SHA512 nemožno použiť, pretože nie je nainštalovaný modul Perl $1
-session_eyescrypt=Formát hash yescrypt nemožno použiť, pretože nie je nainštalovaný modul Perl $1
+session_edigestcrypt=Formát hašovania $1 nie je možné použiť, pretože systémová funkcia crypt ho nepodporuje
session_blocklock=Zamknite tiež používateľov, ktorým sa nepodarilo prihlásiť
session_passapi=Povoliť API na vzdialenú zmenu hesla?
session_passapi0=API zakázané
@@ -240,10 +250,11 @@ log_delete_webmincron=Odstránené $1 naplánované funkcie
log_run_webmincron=Spustil naplánované funkcie $1
log_save_webmincron=Aktualizovaná naplánovaná funkcia v module $1
log_onedelete_webmincron=Odstránená naplánovaná funkcia v module $1
-log_letsencrypt=Vyžiadaný nový certifikát SSL od Poďme šifrovať
-log_letsencryptdns=Vytvorené Poďme šifrovať záznam DNS pre $1
-log_letsencryptcleanup=Odstránil sa Šifrujme záznam DNS pre $1
+log_letsencrypt=Požiadali ste o nový SSL certifikát od poskytovateľa ACME
+log_letsencryptdns=Vytvorený záznam ACME DNS pre $1
+log_letsencryptcleanup=Odstránený záznam ACME DNS pre $1
+themes_configure=Otvoriť stránku konfigurácie témy
themes_none=Žiadne - nech sa rozhodne téma
themes_overdesc=Prekrývky upravujú vzhľad témy zmenou farieb, pozadia a ikon. Nemenia rozloženie.
themes_overlay=Aktuálne prekrytie :
@@ -449,6 +460,7 @@ sendmail_authdef=Predvolené (momentálne Cram-MD5)
sendmail_from=Z adresy pre e-mail od Webmin
sendmail_fromdef=Predvolené ($1)
sendmail_fromaddr=adresa
+sendmail_name=Zobrazovaný názov
sendmail_toaddr=Predvolená cieľová adresa pre upozornenia
sendmail_to_def=Žiadne nastavené
sendmail_etoaddr=Chýbajúca alebo nesprávne naformátovaná cieľová adresa
@@ -550,6 +562,7 @@ twofactor_enrolllink=Teraz sa môžete zaregistrovať na dvojfaktorové overenie
twofactor_url=Ak sa chcete dozvedieť viac o $1, navštívte webovú stránku na adrese $2.
twofactor_etotpmodule=Modul Perl $1 potrebný na dvojfaktorové overenie nie je nainštalovaný. Na inštaláciu použite Perl moduly vo Webmin.
twofactor_qrcode=Zadajte tajný kód $1 v aplikácii TOTP alebo naskenujte QR kód nižšie.
+twofactor_qrcode_manual=Zadajte tajný kód $1 do aplikácie TOTP a nastavte ho manuálne, pretože tento systém nepodporuje generovanie QR kódov.
twofactor_etotpid=Neplatné tajomstvo kódované TOTP bázou32
twofactor_etotptoken=Token TOTP musí byť číslo
twofactor_etotpmatch=Nesprávny kód OTP
@@ -559,9 +572,9 @@ twofactor_secret0=Použite 16-znakový kláves
twofactor_esecret=Tajný kľúč musí mať presne 16 znakov a musí obsahovať iba písmená a čísla
twofactor_esession=Dvojfaktorové overenie nie je možné použiť, pokiaľ nie je aktívne overovanie založené na relácii
-letsencrypt_title=Poďme zašifrovať žiadosť o certifikát
+letsencrypt_title=Žiadosť o certifikát poskytovateľa SSL
letsencrypt_err=Nepodarilo sa vyžiadať certifikát
-letsencrypt_ecmds=Vo vašom systéme sa nenašiel príkaz Poďme šifrovať klienta certbot ani príkaz python
+letsencrypt_ecmds=Vo vašom systéme sa nenašiel ani natívny príkaz klienta ACME certbot, ani príkaz python
letsencrypt_epythonmod=Modul Python $1 potrebný pre vstavaného klienta Let's Encrypt nie je nainštalovaný
letsencrypt_epythonver=Nepodarilo sa získať verziu Pythonu : $1
letsencrypt_epythonver2=Vyžaduje sa verzia Python $1 alebo vyššia, ale máte iba verziu $2.
@@ -569,6 +582,10 @@ letsencrypt_certbot=Certbot
letsencrypt_edroot=Virtuálny hostiteľ Apache $1 nemá adresár dokumentov!
letsencrypt_edom=Chýba alebo je neplatný názov domény
letsencrypt_erenew=Chýbajúci alebo nečíselný interval obnovy
+letsencrypt_eacmedir=Chýbajúca alebo neplatná adresa URL adresára ACME
+letsencrypt_eeabdir=Pri použití väzby externého účtu je potrebné zadať URL adresu adresára ACME
+letsencrypt_eeabpair=Musíte zadať ID kľúča pre väzbu externého účtu aj kľúč HMAC
+letsencrypt_eeabnative=Väzba externého účtu je možná iba vtedy, keď je nainštalovaný natívny klient ACME
letsencrypt_ewebroot=Adresár dokumentu webovej stránky neexistuje
letsencrypt_evhost=Nenašiel sa žiadny virtuálny hostiteľ zodpovedajúci $1
letsencrypt_efull=Očakávaný úplný súbor certifikátov $1 nebol nájdený
@@ -591,9 +608,9 @@ letsencrypt_echain=Nepodarilo sa stiahnuť reťazený certifikát : $1
letsencrypt_echain2=Reťazový certifikát stiahnutý z $1 je prázdny
letsencrypt_ecsr=Nepodarilo sa vygenerovať CSR : $1
letsencrypt_ekeygen=Nepodarilo sa vygenerovať súkromný kľúč : $1
-letsencrypt_enative=Natívny klient šifrovania Let (Encyptuj) (certbot) bol predtým použitý v tomto systéme a musí byť použitý pre všetky budúce žiadosti o certifikáty
-letsencrypt_eacmedns=Iba oficiálny klient Poďme šifrovať podporuje overovanie založené na DNS
-letsencrypt_eacmecertbot=Overenie Certbot podporuje iba oficiálny klient Let's Encrypt
+letsencrypt_enative=Natívny klient ACME (certbot) sa v tomto systéme používal už predtým a musí sa použiť pre všetky budúce žiadosti o certifikát
+letsencrypt_eacmedns=Iba natívny klient ACME podporuje overovanie založené na DNS
+letsencrypt_eacmecertbot=Iba natívny klient ACME podporuje overovanie Certbotom
announce_hide=Skryť toto oznámenie
alert_hide=Skryť upozornenie
diff --git a/webmin/lang/sv b/webmin/lang/sv
index a533d9c37..934e2e12d 100644
--- a/webmin/lang/sv
+++ b/webmin/lang/sv
@@ -123,7 +123,6 @@ lang_ok=Byt språk
ssl_title=SSL-kryptering
ssl_desc1=Datorn som Webmin körs på verkar ha SSLeay Perl-modulen installerad. Med hjälp av den kan Webmin stödja SSL-krypterad kommunikation mellan din browser och servern. Om du kopplar upp dig mot Webmin-servern via Internet, bör du definitivt använda SSL för att undvika att någon annan kan få tag på ditt Webmin-lösenord.
-ssl_desc2=Varning! Slå endast på SSL-stöd om din browser stödjer SSL (t ex Netscape eller IE) och om det inte finns någon brandvägg som spärrar https-förfrågningar mellan din browser och Webmin-datorn.
ssl_header=SSL-stöd
startpage_title=Inställningar för indexsida
diff --git a/webmin/lang/sv.auto b/webmin/lang/sv.auto
index 00a051f5f..e6cc5d79b 100644
--- a/webmin/lang/sv.auto
+++ b/webmin/lang/sv.auto
@@ -235,6 +235,7 @@ ssl_deny=SSL-protokollversioner att avvisa
ssl_compression=Tillåt komprimerade SSL-anslutningar?
ssl_honorcipherorder=Tvinga användning av serverdefinierad chifferordning?
ssl_extracas=Ytterligare certifikatfiler
(för kedjade certifikat)
+ssl_enforce=Tillämpa SSL
ssl_hsts=Framtvinga SSL med HSTS-huvud
ssl_redirect=Omdirigera icke-SSL-förfrågningar till SSL-läge?
ssl_extracasdef=Samma som globala SSL-inställningar
@@ -294,7 +295,7 @@ ssl_tabcreate=Självsignerat certifikat
ssl_tabcsr=Certifikatssigneringsbegäran
ssl_tabupload=Ladda upp certifikat
ssl_tabcurrent=Aktuellt certifikat
-ssl_tablets=Låt oss kryptera
+ssl_tablets=SSL-leverantör
ssl_cheader=Detaljer om aktuellt certifikat
ssl_typeself=Självsignerade
ssl_typereal=Signerad av CA
@@ -306,14 +307,14 @@ ssl_edownload=Det gick inte att extrahera PEM-data från certifikatet
ssl_csralready=Visa senaste nyckel och CSR ..
ssl_already1=Tidigare genererad privat nyckel :
ssl_already2=Tidigare genererad begäran om certifikatsignering :
-ssl_letsdesc=Let's Encrypt är en gratis, automatiserad och öppen certifikatutfärdare som kan användas för att generera ett SSL-certifikat för användning av Webmin.
-ssl_letserr=Tyvärr kan Let's Encrypt inte användas på ditt system: $1.
-ssl_letserr2=Alternativt kan du kontrollera sidan modulkonfiguration för att se till att du använder rätt sökväg till kommandot letsencrypt.
-ssl_letsdesc2=Denna sida kan användas för att begära ett nytt certifikat, som kommer att skriva över alla andra som för närvarande har konfigurerats i Webmin. Let's Encrypt-tjänsten kräver dock att ditt ägande av certifikatdomänen valideras genom att kontrollera att det här systemet är värd för webbplatsen för domänen. Detta görs genom att placera en liten tillfällig fil i webbplatsens dokumentkatalog.
+ssl_letsdesc=Med det här formuläret kan du begära ett betrott SSL-certifikat för Webmin från en ACME-kompatibel leverantör som Let's Encrypt.
+ssl_letserr=Tyvärr kan det här systemet inte begära certifikat från en SSL-leverantör: $1.
+ssl_letserr2=Alternativt kan du kontrollera sidan modulkonfiguration för att säkerställa att du använder rätt sökväg till det konfigurerade ACME-klientkommandot.
+ssl_letsdesc2=Det nya certifikatet kommer att ersätta det som för närvarande är konfigurerat i Webmin. Innan det kan utfärdas måste ACME-leverantören verifiera kontrollen över varje värdnamn med hjälp av antingen en tillfällig fil i webbplatsens dokumentkatalog eller en tillfällig DNS TXT-post.
ssl_letsheader=Alternativ för nytt SSL-certifikat
ssl_letsdoms=Värdnamn för certifikat
ssl_subset=Vill du hoppa över ej verifierbara värdnamn?
-ssl_letsmode=Låt oss kryptera valideringsmetod
+ssl_letsmode=Domänvalideringsmetod
ssl_letsmode0=Apache virtuell värd som matchar värdnamn
ssl_letsmode1=Vald virtuell Apache-värd
ssl_letsmode2=Annan webbserverdokumentkatalog
@@ -324,9 +325,17 @@ ssl_letsonly=Uppdatera bara förnyelse
ssl_usewebmin=Kopiera ny nyckel och certifikat till Webmin?
ssl_letsrenew=Månader mellan automatisk förnyelse
ssl_letsnotrenew=Förny endast manuellt
-ssl_staging=Låt oss kryptera servern
-ssl_staging0=Verklig
-ssl_staging1=Iscensättning (endast test)
+ssl_staging=Leverantörsserver
+ssl_staging0=Produktion
+ssl_staging1=Staging (endast test)
+ssl_acmeopts=Leverantörsinställningar
+ssl_acmeextra=Visa avancerade inställningar
+ssl_acmedir=Anpassad ACME-katalog-URL
+ssl_acmedirdesc=Om detta är inställt åsidosätter detta standardleverantörsservern ovan.
+ssl_acmekid=Externt kontobindningsnyckel-ID
+ssl_acmekiddesc=Valfritt. Vissa ACME-leverantörer kräver detta utöver katalogens URL.
+ssl_acmehmac=Extern kontobindnings-HMAC-nyckel
+ssl_acmehmacdesc=Valfritt. Kräver den inbyggda Certbot-klienten när den används.
newkey_err=Det gick inte att skapa SSL-nyckel
newkey_ecn=Saknat eller ogiltigt servernamn
@@ -481,13 +490,14 @@ session_pmode0=Neka alltid användare med lösenord som löpt ut
session_pmode1=Tillåt alltid användare med lösenord som löpt ut
session_pmode2=Be användare med lösenord som löpt ut att ange ett nytt
session_md5=Webmin-lösenord hashingformat
+session_rpc_timeout=RPC-sessionstimeout
+session_erpc_timeout=RPC-sessionstimeout saknas eller måste vara ett tal större än 0
session_md5off=Bestäm automatiskt
session_md5on=Använd MD5 hash-format
session_sha512=Använd SHA512 hashformat
session_yescrypt=Använd yescrypt hash-format
session_emd5mod=MD5-hash-format kan inte användas, eftersom Perl $1-modulen inte är installerad
-session_esha512mod=SHA512 hashformat kan inte användas, eftersom Perl $1-modulen inte är installerad
-session_eyescrypt=yescrypt hashing-format kan inte användas, eftersom Perl $1-modulen inte är installerad
+session_edigestcrypt=Hashformatet $1 kan inte användas eftersom systemets crypt-funktion inte stöder det
session_blocklock=Lås också användare med misslyckade inloggningar
session_passapi=Aktivera fjärranslutet lösenordsbyte -API?
session_passapi0=API inaktiverat
@@ -536,10 +546,11 @@ log_delete_webmincron=Raderade $1 schemalagda funktioner
log_run_webmincron=Ran $1 schemalagda funktioner
log_save_webmincron=Uppdaterad schemalagd funktion i modulen $1
log_onedelete_webmincron=Raderad schemalagd funktion i modulen $1
-log_letsencrypt=Begärde nytt SSL-certifikat från Let's Encrypt
-log_letsencryptdns=Skapade Let's Encrypt DNS-post för $1
-log_letsencryptcleanup=Borttagit låt oss kryptera DNS-post för $1
+log_letsencrypt=Begärde nytt SSL-certifikat från en ACME-leverantör
+log_letsencryptdns=Skapade ACME DNS-post för $1
+log_letsencryptcleanup=Tog bort ACME DNS-post för $1
+themes_configure=Öppna temakonfigurationssidan
themes_none=Inget - låt tema bestämma
themes_overdesc=Överlägg ändrar utseendet på ett tema genom att ändra färger, bakgrunder och ikoner. De ändrar inte layouten.
themes_overlay=Nuvarande överlägg :
@@ -847,6 +858,7 @@ sendmail_authdef=Standard (för närvarande Cram-MD5)
sendmail_from=Från adress för e-post från Webmin
sendmail_fromdef=Standard ($1)
sendmail_fromaddr=Adress
+sendmail_name=Visningsnamn
sendmail_toaddr=Standarddestinationsadress för aviseringar
sendmail_to_def=Ingen inställd
sendmail_etoaddr=Destinationsadress saknas eller är felaktigt formaterad
@@ -948,6 +960,7 @@ twofactor_enrolllink=Du kan nu registrera dig för tvåfaktorautentisering i $2.
twofactor_etotpmodule=Perl-modulen $1 som behövs för tvåfaktorautentisering är inte installerad. Använd sidan Perl Modules i Webmin för att installera den.
twofactor_qrcode=Ange den hemliga koden $1 i TOTP-appen eller skanna QR-koden nedan.
+twofactor_qrcode_manual=Ange den hemliga koden $1 i TOTP-appen och konfigurera den manuellt, eftersom QR-kodgenerering inte stöds på det här systemet.
twofactor_etotpid=Ogiltig TOTP-bas32-kodad hemlighet
twofactor_etotptoken=TOTP-token måste vara ett nummer
twofactor_etotpmatch=Felaktig OTP-kod
@@ -957,9 +970,9 @@ twofactor_secret0=Använd en tangent med 16 tecken
twofactor_esecret=Den hemliga nyckeln måste vara exakt 16 tecken lång och endast innehålla bokstäver och siffror
twofactor_esession=Tvåfaktorsautentisering kan inte användas om inte sessionbaserad autentisering är aktiv
-letsencrypt_title=Låt oss kryptera certifikatbegäran
-letsencrypt_err=Det gick inte att begära certifikat
-letsencrypt_ecmds=Varken kommandot Let's Encrypt-klient certbot eller python hittades i ditt system
+letsencrypt_title=Begäran om SSL-leverantörscertifikat
+letsencrypt_err=Kunde inte begära certifikat
+letsencrypt_ecmds=Varken det inbyggda ACME-klientkommandot certbot eller python kommandot hittades på ditt system
letsencrypt_epythonmod=Python-modulen $1 som behövs av den inbyggda Let's Encrypt-klienten är inte installerad
letsencrypt_epythonver=Det gick inte att få Python-versionen : $1
letsencrypt_epythonver2=Python version $1 eller högre krävs, men du har bara version $2.
@@ -967,6 +980,10 @@ letsencrypt_certbot=Certbot
letsencrypt_edroot=Den virtuella Apache-värden $1 har ingen dokumentkatalog!
letsencrypt_edom=Saknat eller ogiltigt domännamn
letsencrypt_erenew=Förlängningsintervall saknas eller inte
+letsencrypt_eacmedir=ACME-katalogens URL saknas eller är ogiltig
+letsencrypt_eeabdir=En ACME-katalog-URL måste anges när extern kontobindning används
+letsencrypt_eeabpair=Både ID för extern kontobindningsnyckel och HMAC-nyckel måste anges
+letsencrypt_eeabnative=Extern kontobindning kan endast användas när den inbyggda ACME-klienten är installerad
letsencrypt_ewebroot=Webbplatsdokumentkatalog finns inte
letsencrypt_evhost=Ingen virtuell värd matchande $1 hittades
letsencrypt_efull=Förväntad fullständig certifikatfil $1 hittades inte
@@ -989,9 +1006,9 @@ letsencrypt_echain=Det gick inte att ladda ner kedjat certifikat : $1
letsencrypt_echain2=Kedjat certifikat nedladdat från $1 är tomt
letsencrypt_ecsr=Det gick inte att generera CSR : $1
letsencrypt_ekeygen=Det gick inte att generera privat nyckel : $1
-letsencrypt_enative=Den ursprungliga Let's Encrypt-klienten (certbot) användes tidigare i detta system och måste användas för alla framtida certifikatbegäranden
-letsencrypt_eacmedns=Endast den officiella Let's Encrypt-klienten stöder DNS-baserad validering
-letsencrypt_eacmecertbot=Endast den officiella Let's Encrypt-klienten stöder Certbot-validering
+letsencrypt_enative=Den inbyggda ACME-klienten (certbot) användes tidigare på det här systemet och måste användas för alla framtida certifikatförfrågningar
+letsencrypt_eacmedns=Endast den inbyggda ACME-klienten stöder DNS-baserad validering
+letsencrypt_eacmecertbot=Endast den inbyggda ACME-klienten stöder Certbot-validering
announce_hide=Dölj detta tillkännagivande
alert_hide=Dölj varning
diff --git a/webmin/lang/tr b/webmin/lang/tr
index dbc9a008d..8c6f6d372 100644
--- a/webmin/lang/tr
+++ b/webmin/lang/tr
@@ -202,7 +202,6 @@ ssl_essl=Net::SSLeay perl modülü sisteminizde kurulu gibi görünmüyor. OpenS
ssl_cpan=Alternatif olarak, gerekli Net::SSLeay Perl modülünü indirip kurmak için Webmin'i kullanabilirsin.
ssl_emessage=Perl'den gelen hata mesajı : $1
ssl_desc1=Webmin'in çalışması için SSLeay Perl modülünün kurulu olması gerekmektedir. Bunu kullandığınızda Webmin, tarayıcı ve sunucu arasında SSL tabanlı şifreli iletişim kurmaktadır. Eğer Webmin sunucunuza internetten ulaşacaksanız, Webmin şifrenizin çalınma olasılığına karşı korunmak için MUTLAKA SSL kullanmalısınız.
-ssl_desc2=Uyarı! SSL desteğini sadece tarayıcınız destekliyorsa ve tarayıcınızla Webmin sunucu arasında https firewall koruması yoksa aktif hale getiriniz.
ssl_header=SSL Support
ssl_on=Mümkün ise SSL kullanılsın mı?
ssl_key=Özel anahtar dosyası
diff --git a/webmin/lang/tr.auto b/webmin/lang/tr.auto
index 51a60b121..37a7b7601 100644
--- a/webmin/lang/tr.auto
+++ b/webmin/lang/tr.auto
@@ -150,6 +150,7 @@ lang_dateformat_yyyy/mm/dd=yyyy/aa/gg (yani 2001/09/16)
ssl_deny=Reddedilecek SSL protokolü sürümleri
ssl_compression=Sıkıştırılmış SSL bağlantılarına izin verilsin mi?
ssl_honorcipherorder=Sunucu tanımlı şifre sırasını kullanmaya zorlanıyor musunuz?
+ssl_enforce=SSL'yi zorunlu kıl
ssl_hsts=HSTS başlığıyla SSL'yi uygula
ssl_extracasdef=Global SSL ayarlarıyla aynı
ssl_extracasnone=Bu IP adresi için yok
@@ -192,7 +193,7 @@ ssl_tabcreate=Kendinden İmzalı Sertifika
ssl_tabcsr=Sertifika İmzalama İsteği
ssl_tabupload=Sertifika Yükle
ssl_tabcurrent=Mevcut Sertifika
-ssl_tablets=Şifreleyelim
+ssl_tablets=SSL Sağlayıcısı
ssl_cheader=Mevcut sertifikanın ayrıntıları
ssl_typeself=Kendinden imzalı
ssl_typereal=CA tarafından imzalandı
@@ -204,14 +205,14 @@ ssl_edownload=Sertifikadan PEM verileri alınamadı
ssl_csralready=En son anahtar ve CSR'yi görüntüleyin ..
ssl_already1=Önceden oluşturulan özel anahtar :
ssl_already2=Önceden oluşturulan sertifika imzalama isteği :
-ssl_letsdesc=Let's Encrypt, Webmin tarafından kullanılmak üzere bir SSL sertifikası oluşturmak için kullanılabilen ücretsiz, otomatik ve açık bir sertifika yetkilisidir.
-ssl_letserr=Maalesef, Şifrelenelim sisteminizde kullanılamaz: $1.
-ssl_letserr2=Alternatif olarak, letsencrypt komutunun doğru yolunu kullandığınızdan emin olmak için modül yapılandırması sayfasını kontrol edin.
-ssl_letsdesc2=Bu sayfa, Webmin'de yapılandırılmış olan diğer herhangi birinin üzerine yazacak yeni bir sertifika istemek için kullanılabilir. Ancak, Let's Encrypt hizmeti, bu sistemin etki alanı için web sitesini barındırdığını kontrol ederek sertifika etki alanı sahipliğinizin doğrulanmasını gerektirir. Bu, web sitesinin belge dizinine küçük bir geçici dosya yerleştirerek yapılır.
+ssl_letsdesc=Bu form, Let's Encrypt gibi ACME uyumlu bir sağlayıcıdan Webmin için güvenilir bir SSL sertifikası talep etmenizi sağlar.
+ssl_letserr=Maalesef bu sistem bir SSL sağlayıcısından sertifika talep edemiyor: $1.
+ssl_letserr2=Alternatif olarak, yapılandırılmış ACME istemci komutuna giden doğru yolu kullandığınızdan emin olmak için modül yapılandırması sayfasını kontrol edin.
+ssl_letsdesc2=Yeni sertifika, Webmin'de şu anda yapılandırılmış olanın yerini alacaktır. Sertifika verilmeden önce, ACME sağlayıcısının, web sitesinin belge dizinindeki geçici bir dosya veya geçici bir DNS TXT kaydı kullanarak her bir ana bilgisayar adının kontrolünü doğrulaması gerekir.
ssl_letsheader=Yeni SSL sertifikası seçenekleri
ssl_letsdoms=Sertifika için ana bilgisayar adları
ssl_subset=Doğrulanamayan ana bilgisayar adları atlansın mı?
-ssl_letsmode=Doğrulama yöntemini şifreleyelim
+ssl_letsmode=Alan doğrulama yöntemi
ssl_letsmode0=Ana bilgisayar adıyla eşleşen Apache sanal ana bilgisayarı
ssl_letsmode1=Seçilen Apache sanal konağı
ssl_letsmode2=Diğer web sunucusu belge dizini
@@ -222,9 +223,17 @@ ssl_letsonly=Sadece Yenilemeyi Güncelle
ssl_usewebmin=Yeni anahtar ve sertifika Webmin'e kopyalansın mı?
ssl_letsrenew=Otomatik yenileme arasındaki aylar
ssl_letsnotrenew=Yalnızca manuel olarak yenile
-ssl_staging=Hadi sunucuyu şifreleyelim
-ssl_staging0=Gerçek
-ssl_staging1=Evreleme (yalnızca test)
+ssl_staging=Sağlayıcı sunucu
+ssl_staging0=Üretme
+ssl_staging1=Hazırlık aşaması (sadece test amaçlı)
+ssl_acmeopts=Sağlayıcı ayarları
+ssl_acmeextra=Gelişmiş ayarları göster
+ssl_acmedir=Özel ACME dizin URL'si
+ssl_acmedirdesc=Ayarlanırsa, yukarıdaki varsayılan sağlayıcı sunucusunu geçersiz kılar.
+ssl_acmekid=Harici Hesap Bağlama anahtar kimliği
+ssl_acmekiddesc=İsteğe bağlı. Bazı ACME sağlayıcıları, dizin URL'sine ek olarak bunu da gerektirir.
+ssl_acmehmac=Harici Hesap Bağlama HMAC anahtarı
+ssl_acmehmacdesc=İsteğe bağlı. Kullanıldığında yerel Certbot istemcisi gereklidir.
newkey_ecns=Hiçbir sunucu adı girilmedi
newkey_ecountry=Ülke kodu iki harf olmalıdır
@@ -304,13 +313,14 @@ session_ecmd=Eksik veya geçersiz şifre değiştirme komutu
session_banner=Giriş öncesi banner
session_pmodedesc3=Şifre geçerlilik süresi politikası
session_md5=Webmin şifre karma formatı
+session_rpc_timeout=RPC oturum zaman aşımı
+session_erpc_timeout=RPC oturum zaman aşımı değeri eksik veya 0'dan büyük bir sayı olmalıdır
session_md5off=Otomatik olarak belirle
session_md5on=MD5 karma biçimini kullanın
session_sha512=SHA512 karma biçimini kullanın
session_yescrypt=yescrypt karma biçimini kullanın
session_emd5mod=Perl $1 modülü kurulu olmadığı için MD5 karma formatı kullanılamaz
-session_esha512mod=Perl $1 modülü kurulu olmadığı için SHA512 karma formatı kullanılamaz
-session_eyescrypt=Perl $1 modülü kurulu olmadığı için yescrypt karma formatı kullanılamaz
+session_edigestcrypt=$1 karma biçimi kullanılamaz, çünkü sistemdeki crypt fonksiyonu bunu desteklemiyor
session_blocklock=Ayrıca oturum açma başarısız olan kullanıcıları da kilitle
session_passapi=Uzaktan şifre değiştirme API'si etkinleştirilsin mi?
session_passapi0=API devre dışı
@@ -348,10 +358,11 @@ log_delete_webmincron=$1 zamanlanmış işlevi silindi
log_run_webmincron=$1 zamanlanmış işlevleri koştu
log_save_webmincron=$1 modülünde zamanlanmış işlev güncellendi
log_onedelete_webmincron=$1 modülünde zamanlanmış işlev silindi
-log_letsencrypt=Let's Encrypt'ten yeni SSL sertifikası istendi
-log_letsencryptdns=$1 için DNS kaydını şifreleyelim
-log_letsencryptcleanup=$1 için DNS kaydını şifreleyelim
+log_letsencrypt=ACME sağlayıcısından yeni bir SSL sertifikası talep edildi
+log_letsencryptdns=$1 için ACME DNS kaydı oluşturuldu
+log_letsencryptcleanup=$1 için ACME DNS kaydı kaldırıldı
+themes_configure=Tema yapılandırma sayfasını açın
themes_none=Yok - temanın karar vermesine izin ver
themes_overdesc=Kaplamalar renkleri, arka planları ve simgeleri değiştirerek temanın görünümünü değiştirir. Düzeni değiştirmezler.
themes_overlay=Geçerli yer paylaşımı :
@@ -627,6 +638,7 @@ sendmail_authdef=Varsayılan (şu anda Cram-MD5)
sendmail_from=Webmin'den gelen e-posta adresi
sendmail_fromdef=Varsayılan ($1)
sendmail_fromaddr=Adres
+sendmail_name=Ekran adı
sendmail_toaddr=Bildirimler için varsayılan hedef adresi
sendmail_to_def=Hiçbiri ayarlanmadı
sendmail_etoaddr=Eksik veya yanlış biçimlendirilmiş hedef adresi
@@ -728,6 +740,7 @@ twofactor_enrolllink=Artık Webmin Users modülüne iki öğeli
twofactor_url=$1 hakkında daha fazla bilgi edinmek için $2 adresindeki web sitesine bakın.
twofactor_etotpmodule=İki faktörlü kimlik doğrulaması için gereken Pertt modülü $1 kurulu değil. Yüklemek için Webmin'deki Perl Modülleri sayfasını kullanın.
twofactor_qrcode=TOTP uygulamasına $1 gizli kodunu girin veya aşağıdaki QR kodunu tarayın.
+twofactor_qrcode_manual=Bu sistemde QR kod oluşturma desteklenmediğinden, TOTP uygulamasında gizli kod olan $1'i girin ve manuel olarak ayarlayın.
twofactor_etotpid=TOTP base32 kodlu gizli geçersiz
twofactor_etotptoken=TOTP belirteci bir sayı olmalıdır
twofactor_etotpmatch=Yanlış OTP kodu
@@ -737,9 +750,9 @@ twofactor_secret0=16 karakterli anahtar kullanın
twofactor_esecret=Gizli anahtar tam olarak 16 karakter uzunluğunda olmalı ve yalnızca harf ve rakam içermelidir
twofactor_esession=Oturum tabanlı kimlik doğrulama etkin olmadığı sürece iki faktörlü kimlik doğrulama kullanılamaz
-letsencrypt_title=Sertifika İsteğini Şifreleyelim
-letsencrypt_err=Sertifika istenemedi
-letsencrypt_ecmds=Sisteminizde certbot istemcisini şifreleyelim veya python komutu bulunamadı
+letsencrypt_title=SSL Sağlayıcı Sertifikası Talebi
+letsencrypt_err=Sertifika talebi başarısız oldu
+letsencrypt_ecmds=Sisteminizde ne yerel ACME istemci komutu certbot ne de python komutu bulunamadı
letsencrypt_epythonmod=Yerleşik Let's Encrypt istemcisinin ihtiyaç duyduğu Python modülü $1 kurulu değil
letsencrypt_epythonver=Python sürümü alınamadı : $1
letsencrypt_epythonver2=Python sürümü $1 veya üstü gerekir, ancak yalnızca $2 sürümüne sahipsiniz.
@@ -747,6 +760,10 @@ letsencrypt_certbot=Certbot
letsencrypt_edroot=Apache sanal ana bilgisayarının $1 belge dizini yok!
letsencrypt_edom=Eksik veya geçersiz alan adı
letsencrypt_erenew=Eksik veya sayısal olmayan yenileme aralığı
+letsencrypt_eacmedir=ACME dizin URL'si eksik veya geçersiz
+letsencrypt_eeabdir=Harici Hesap Bağlama kullanılırken bir ACME dizin URL'si girilmelidir
+letsencrypt_eeabpair=Hem Harici Hesap Bağlama anahtar kimliği hem de HMAC anahtarı girilmelidir
+letsencrypt_eeabnative=Harici Hesap Bağlama özelliği yalnızca yerel ACME istemcisi yüklü olduğunda kullanılabilir
letsencrypt_ewebroot=Web sitesi belge dizini mevcut değil
letsencrypt_evhost=$1 ile eşleşen sanal ana bilgisayar bulunamadı
letsencrypt_efull=Beklenen tam sertifika dosyası $1 bulunamadı
@@ -769,9 +786,9 @@ letsencrypt_echain=Zincirleme sertifika indirilemedi : $1
letsencrypt_echain2=$1 adresinden indirilen zincirleme sertifika boş
letsencrypt_ecsr=CSR oluşturulamadı : $1
letsencrypt_ekeygen=Özel anahtar oluşturulamadı : $1
-letsencrypt_enative=Yerel Let's Encrypt istemcisi (certbot) daha önce bu sistemde kullanıldı ve gelecekteki tüm sertifika istekleri için kullanılmalıdır
-letsencrypt_eacmedns=Yalnızca resmi Let's Encrypt istemcisi DNS tabanlı doğrulamayı destekler
-letsencrypt_eacmecertbot=Yalnızca resmi Let's Encrypt istemcisi Certbot doğrulamasını destekler
+letsencrypt_enative=Bu sistemde daha önce yerel ACME istemcisi (certbot) kullanılıyordu ve bundan sonraki tüm sertifika talepleri için de bu istemci kullanılmalıdır
+letsencrypt_eacmedns=Yalnızca yerel ACME istemcisi DNS tabanlı doğrulamayı destekler
+letsencrypt_eacmecertbot=Yalnızca yerel ACME istemcisi Certbot doğrulamasını destekler
announce_hide=Bu Duyuruyu Gizle
alert_hide=Uyarıyı Gizle
diff --git a/webmin/lang/uk b/webmin/lang/uk
index 4b0ffc4dc..598875a52 100644
--- a/webmin/lang/uk
+++ b/webmin/lang/uk
@@ -150,7 +150,6 @@ ssl_title=Шифрование SSL
ssl_essl=Модуль Net::SSLeay perl в вашей системе не установлен. Чтобы установить библиотеку OpenSSL и модуль Net::SSLeay, следуйте этим указаниям с сайта Webmin.
ssl_emessage=Perl вернул следующее сообщение об ошибке : $1
ssl_desc1=На компьютере, на котором запущен Webmin, установлен модуль SSLeay для Perl. С его помощью Webmin может установить защищенное соединение с вашим браузером. Если вы подключаетесь к вашему серверу Webmin через Интернет, то вы должны всерьез задуматься об использовании SSL для предотвращения перехвата вашего пароля Webmin хакерами.
-ssl_desc2=Внимание - включайте поддержку SSL только если ваш браузер поддерживает SSL (например Netscape или IE), а также если между вашим браузером и сервером Webmin нет сетевого экрана (firewall), блокирующего запросы https.
ssl_header=Поддержка SSL
ssl_on=Разрешить поддержку SSL, если она доступна?
ssl_key=Файл личного ключа
diff --git a/webmin/lang/uk.auto b/webmin/lang/uk.auto
index 464dcbacb..0f0958f61 100644
--- a/webmin/lang/uk.auto
+++ b/webmin/lang/uk.auto
@@ -203,6 +203,7 @@ ssl_deny=Версії протоколу SSL відхилити
ssl_compression=Дозволити стислі SSL-з'єднання?
ssl_honorcipherorder=Примусово використовувати визначений сервером порядок шифрування?
ssl_extracas=Додаткові файли сертифікатів
(для ланцюжкових сертифікатів)
+ssl_enforce=Застосувати SSL
ssl_hsts=Застосуйте SSL із заголовком HSTS
ssl_redirect=Перенаправити не-SSL запити на режим SSL?
ssl_extracasdef=Те саме, що глобальні налаштування SSL
@@ -251,7 +252,7 @@ ssl_tabcreate=Свідоцтво про самопідпис
ssl_tabcsr=Запит на підписання довідки
ssl_tabupload=Завантажити сертифікат
ssl_tabcurrent=Поточний сертифікат
-ssl_tablets=Давайте шифруємо
+ssl_tablets=Постачальник SSL-доступу
ssl_cheader=Інформація про поточний сертифікат
ssl_typeself=Самопідписаний
ssl_typereal=Підписано ЦА
@@ -263,14 +264,14 @@ ssl_edownload=Не вдалося отримати дані PEM із серти
ssl_csralready=Перегляньте останній ключ та КСВ ..
ssl_already1=Раніше створений приватний ключ :
ssl_already2=Раніше створений запит на підписання сертифікату :
-ssl_letsdesc=Let's Encrypt - це вільний, автоматизований та відкритий сертифікат, який може бути використаний для створення сертифіката SSL для використання Webmin.
-ssl_letserr=На жаль, Let's Encrypt не можна використовувати у вашій системі: $1.
-ssl_letserr2=Крім того, перевірте сторінку конфігурації модуля , щоб переконатися, що ви використовуєте правильний шлях до команди letsencrypt.
-ssl_letsdesc2=Ця сторінка може використовуватися для запиту нового сертифіката, який замінить будь-який інший на даний момент налаштований у Webmin. Однак сервіс Let Encrypt вимагає підтвердити ваше право власності на домен сертифікатів, перевіривши, чи ця система розміщує веб-сайт для домену. Це робиться, помістивши невеликий тимчасовий файл у каталог документів веб-сайту.
+ssl_letsdesc=Ця форма дозволяє вам запросити надійний SSL-сертифікат для Webmin від ACME-сумісного постачальника, такого як Let's Encrypt.
+ssl_letserr=На жаль, ця система не може запитувати сертифікати від постачальника SSL: $1.
+ssl_letserr2=Або перевірте сторінку конфігурації модуля, щоб переконатися, що ви використовуєте правильний шлях до налаштованої команди клієнта ACME.
+ssl_letsdesc2=Новий сертифікат замінить той, що налаштований у Webmin. Перш ніж його можна буде випустити, постачальник ACME повинен перевірити контроль над кожним іменем хоста, використовуючи тимчасовий файл у каталозі документів веб-сайту або тимчасовий TXT-запис DNS.
ssl_letsheader=Параметри нового сертифіката SSL
ssl_letsdoms=Імена хостів для сертифіката
ssl_subset=Пропустити неперевірені імена хостів?
-ssl_letsmode=Метод перевірки Let's Encrypt
+ssl_letsmode=Метод перевірки домену
ssl_letsmode0=Віртуальний хост Apache, що відповідає імені хосту
ssl_letsmode1=Вибраний віртуальний хост Apache
ssl_letsmode2=Інший каталог документів веб-сервера
@@ -281,9 +282,17 @@ ssl_letsonly=Просто оновіть оновлення
ssl_usewebmin=Скопіювати новий ключ та сертифікат на Webmin?
ssl_letsrenew=Місяці між автоматичним оновленням
ssl_letsnotrenew=Поновлюйте лише вручну
-ssl_staging=Давайте шифруємо сервер
-ssl_staging0=Справжній
-ssl_staging1=Постановка (лише тест)
+ssl_staging=Сервер постачальника
+ssl_staging0=Виробництво
+ssl_staging1=Поетапне тестування (лише для тестування)
+ssl_acmeopts=Налаштування постачальника
+ssl_acmeextra=Показати розширені налаштування
+ssl_acmedir=URL-адреса каталогу ACME
+ssl_acmedirdesc=Якщо встановлено, це замінює сервер постачальника за замовчуванням, вказаний вище.
+ssl_acmekid=Ідентифікатор ключа прив’язки до зовнішнього облікового запису
+ssl_acmekiddesc=Необов’язково. Деякі постачальники ACME вимагають цього на додаток до URL-адреси каталогу.
+ssl_acmehmac=Ключ HMAC для прив'язки до зовнішнього облікового запису
+ssl_acmehmacdesc=Необов'язково. Під час використання потрібен вбудований клієнт Certbot.
newkey_ecns=Не введено імен сервера
newkey_esize=Відсутній або недійсний розмір ключа
@@ -376,13 +385,14 @@ session_pmode0=Завжди відмовляйте користувачам із
session_pmode1=Завжди дозвольте користувачам із паролями з минулим терміном
session_pmode2=Запропонуйте користувачам із паролями з минулим терміном ввести новий
session_md5=Формат хешування паролів Webmin
+session_rpc_timeout=Тайм-аут сеансу RPC
+session_erpc_timeout=Тайм-аут сеансу RPC відсутній або має бути числом, більшим за 0
session_md5off=Визначити автоматично
session_md5on=Використовуйте формат хешування MD5
session_sha512=Використовуйте формат хешування SHA512
session_yescrypt=Використовуйте формат хешування yescrypt
session_emd5mod=Формат хешування MD5 не можна використовувати, оскільки модуль Perl $1 не встановлено
-session_esha512mod=Формат хешування SHA512 не можна використовувати, оскільки модуль Perl $1 не встановлено
-session_eyescrypt=Формат хешування yescrypt не можна використовувати, оскільки модуль Perl $1 не встановлено
+session_edigestcrypt=Формат хешування $1 не можна використовувати, оскільки системна функція crypt його не підтримує
session_blocklock=Також заблокуйте користувачів із помилкою входу
session_passapi=Увімкнути API віддаленої зміни пароля?
session_passapi0=API вимкнено
@@ -420,10 +430,11 @@ log_delete_webmincron=Видалено $1 заплановані функції
log_run_webmincron=Ran $1 заплановані функції
log_save_webmincron=Оновлена планова функція в модулі $1
log_onedelete_webmincron=Видалена планова функція в модулі $1
-log_letsencrypt=Запросили новий сертифікат SSL від Let's Encrypt
-log_letsencryptdns=Створено Давайте шифруємо запис DNS для $1
-log_letsencryptcleanup=Видалено Зашифруємо запис DNS для $1
+log_letsencrypt=Запит на новий SSL-сертифікат від постачальника ACME
+log_letsencryptdns=Створено DNS-запис ACME для $1
+log_letsencryptcleanup=Видалено запис ACME DNS для $1
+themes_configure=Відкрити сторінку налаштування теми
themes_none=Ні - нехай вирішує тема
themes_overdesc=Накладки змінюють зовнішній вигляд теми, змінюючи кольори, фони та значки. Вони не змінюють макет.
themes_overlay=Поточний наклад :
@@ -718,6 +729,7 @@ sendmail_authdef=За замовчуванням (зараз Cram-MD5)
sendmail_from=З адреси електронної пошти від Webmin
sendmail_fromdef=За замовчуванням ($1)
sendmail_fromaddr=Адреса
+sendmail_name=Відображуване ім'я
sendmail_toaddr=Адреса призначення за замовчуванням для сповіщень
sendmail_to_def=Не встановлено
sendmail_etoaddr=Відсутня або неправильно відформатована адреса призначення
@@ -819,6 +831,7 @@ twofactor_enrolllink=Тепер ви можете записатись на дв
twofactor_url=Щоб дізнатися більше про $1, перегляньте веб-сайт за адресою $2.
twofactor_etotpmodule=Модуль Perl $1, необхідний для двофакторної аутентифікації, не встановлений. Використовуйте сторінку Perl Modules у Webmin, щоб встановити її.
twofactor_qrcode=Введіть секретний код $1 у програмі TOTP або відскануйте QR-код нижче.
+twofactor_qrcode_manual=Введіть секретний код $1 у застосунку TOTP та налаштуйте його вручну, оскільки генерація QR-кодів не підтримується в цій системі.
twofactor_etotpid=Недійсний секрет, закодований базовою версією TOTP
twofactor_etotptoken=Маркер TOTP має бути числом
twofactor_etotpmatch=Неправильний код OTP
@@ -828,9 +841,9 @@ twofactor_secret0=Використовуйте 16-символьний ключ
twofactor_esecret=Секретний ключ повинен містити рівно 16 символів і містити лише букви та цифри
twofactor_esession=Двофакторну автентифікацію не можна використовувати, якщо активна автентифікація на основі сеансу
-letsencrypt_title=Давайте зашифруємо запит на сертифікат
-letsencrypt_err=Помилка запиту довідки
-letsencrypt_ecmds=Ні вашій команді Let's Encrypt client certbot, ні команді python не знайдено у вашій системі
+letsencrypt_title=Запит на сертифікат постачальника SSL
+letsencrypt_err=Не вдалося запитувати сертифікат
+letsencrypt_ecmds=У вашій системі не знайдено ні рідної команди клієнта ACME certbot, ні команди python
letsencrypt_epythonmod=Модуль Python $1, необхідний вбудованому клієнту Let's Encrypt, не встановлений
letsencrypt_epythonver=Не вдалося отримати версію Python : $1
letsencrypt_epythonver2=Версія Python $1 або вище потрібна, але у вас є лише версія $2.
@@ -838,6 +851,10 @@ letsencrypt_certbot=Сертбот
letsencrypt_edroot=У віртуального хоста Apache $1 немає каталогу документів!
letsencrypt_edom=Відсутнє або недійсне доменне ім’я
letsencrypt_erenew=Відсутній або нечисловий інтервал відновлення
+letsencrypt_eacmedir=Відсутня або недійсна URL-адреса каталогу ACME
+letsencrypt_eeabdir=Під час використання прив’язки до зовнішнього облікового запису необхідно ввести URL-адресу каталогу ACME
+letsencrypt_eeabpair=Потрібно ввести ідентифікатор ключа прив’язки зовнішнього облікового запису, і ключ HMAC
+letsencrypt_eeabnative=Прив'язку зовнішнього облікового запису можна використовувати лише тоді, коли встановлено власний клієнт ACME
letsencrypt_ewebroot=Каталог документів веб-сайту не існує
letsencrypt_evhost=Не знайдено віртуального хоста, що відповідає $1
letsencrypt_efull=Очікуваний повний файл сертифіката $1 не знайдено
@@ -860,9 +877,9 @@ letsencrypt_echain=Не вдалося завантажити ланцюгови
letsencrypt_echain2=Прикутий сертифікат, завантажений з $1, порожній
letsencrypt_ecsr=Не вдалося створити CSR : $1
letsencrypt_ekeygen=Не вдалося генерувати приватний ключ : $1
-letsencrypt_enative=Рідний клієнт Let's Encrypt клієнт (certbot) раніше використовувався в цій системі і повинен використовуватися для всіх майбутніх запитів сертифікатів
-letsencrypt_eacmedns=Тільки офіційний клієнт Let's Encrypt підтримує перевірку на основі DNS
-letsencrypt_eacmecertbot=Тільки офіційний клієнт Let's Encrypt підтримує перевірку Certbot
+letsencrypt_enative=Вбудований клієнт ACME (certbot) використовувався раніше в цій системі та має використовуватися для всіх майбутніх запитів на сертифікати
+letsencrypt_eacmedns=Тільки власний клієнт ACME підтримує перевірку на основі DNS
+letsencrypt_eacmecertbot=Тільки власний клієнт ACME підтримує перевірку Certbot
announce_hide=Сховати це оголошення
alert_hide=Сховати сповіщення
diff --git a/webmin/lang/zh b/webmin/lang/zh
index 83862fded..f6585fe1b 100644
--- a/webmin/lang/zh
+++ b/webmin/lang/zh
@@ -332,7 +332,6 @@ ssl_essl=您的系统中似乎没有安装 Net::SSLeay perl 模块。要安装 O
ssl_cpan=或者,您可以让 Webmin 为您 下载并安装 所需的 Net::SSLeay Perl 模块。
ssl_emessage=来自 Perl 的错误消息:$1
ssl_desc1=运行 Webmin 的主机似乎已安装有 SSLeay Perl 模块。使用该模块,Webmin 支持在您的浏览器和服务器之间的 SSL 加密通讯。如果您通过 Internet 访问 Webmin 服务器,那么您应该考虑使用 SSL 来预防入侵者窃取您的 Webmin 口令。
-ssl_desc2=警告 -- 只有当您的浏览器支持 SSL (例如 Netscape 或 IE),而且浏览器和 Webmin 主机之间没有防火墙堵塞 https 请求时,您才能使用 SSL 支持。
ssl_header=SSL 支持
ssl_on=启用 SSL?
ssl_key=私钥文件
@@ -402,7 +401,6 @@ ssl_tabcreate=自签名证书
ssl_tabcsr=证书签名请求
ssl_tabupload=上传证书
ssl_tabcurrent=当前证书
-ssl_tablets=Let的 Encrypt证书
ssl_cheader=当前证书的详细信息
ssl_typeself=自签名
ssl_typereal=由 CA 签署
@@ -414,14 +412,9 @@ ssl_edownload=无法从证书中提取 PEM 数据
ssl_csralready=查看最新密钥和 CSR .
ssl_already1=以前生成的私钥 :
ssl_already2=以前生成的证书签名请求 :.
-ssl_letsdesc=Let Encrypt 是一个免费,自动和开放的证书颁发机构,可用于生成供 Webmin 使用的 SSL 证书。
-ssl_letserr=不幸的是,此加密算法无法在您的系统上使用:$1。
-ssl_letserr2=或者,检查 模块配置 页面,以确保您使用的是 letsencrypt 命令的正确路径。
-ssl_letsdesc2=该页面可用于请求新证书,该证书将覆盖 Webmin 中当前配置的任何其他证书。但是,CA 服务要求通过检查此系统是否托管该域的网站来验证您对证书域的所有权。这是通过在网站的文档目录中放置一个小的临时文件来完成的。
ssl_letsheader=新 SSL 证书的选项
ssl_letsdoms=证书的主机名
ssl_subset=跳过无法验证的主机名?
-ssl_letsmode=Let Encrypt 验证方法
ssl_letsmode0=匹配主机名的Apache虚拟主机
ssl_letsmode1=选定的Apache虚拟主机
ssl_letsmode2=其他Web服务器文档目录
@@ -432,9 +425,6 @@ ssl_letsonly=仅更新续订
ssl_usewebmin=将新的密钥和证书复制到 Webmin?
ssl_letsrenew=自动续订之间的月数
ssl_letsnotrenew=仅手动续订
-ssl_staging=Let Encrypt 服务器
-ssl_staging0=确认
-ssl_staging1=Staging (仅测试)
newkey_err=无法创建 SSL 密钥
newkey_ecn=未设定或无效的服务器名称
@@ -660,8 +650,6 @@ session_md5on=使用 MD5 哈希格式
session_sha512=使用 SHA512 哈希格式
session_yescrypt=使用 yescrypt 哈希格式
session_emd5mod=MD5 哈希格式无法使用,因为未安装 Perl $1 模块
-session_esha512mod=SHA512 哈希格式无法使用,因为未安装 Perl $1 模块
-session_eyescrypt=yescrypt 哈希格式无法使用,因为未安装 Perl $1 模块
session_blocklock=同时锁定登录失败的用户
session_passapi=启用远程密码更改API?
session_passapi0=禁用API
@@ -729,9 +717,6 @@ log_delete_webmincron=删除 $1 调度函数
log_run_webmincron=运行 $1 调度函数
log_save_webmincron=更新了模块 $1 中的计划函数
log_onedelete_webmincron=模块 $1 中已删除的预定函数
-log_letsencrypt=从 Let Encrypt 申请了新的SSL证书
-log_letsencryptdns=为 $1 创建了 Let Encrypt DNS 记录
-log_letsencryptcleanup=删除了 Let Encrypt $1 的 DNS记录
themes_title=Webmin 主题
themes_desc=主题控制 Webmin 用户界面的外观,包括图标、颜色、背景,可能还包括页面的布局。下面的选择框可用来选择安装在您系统上的主题。
@@ -1189,9 +1174,6 @@ twofactor_secret0=使用 16 个字符的密钥
twofactor_esecret=密钥长度必须恰好为 16 个字符,并且只能包含字母和数字
twofactor_esession=除非基于会话的身份验证处于活动状态,否则不能使用双因素身份验证
-letsencrypt_title=Let Encrypt 认证请求
-letsencrypt_err=请求证书失败
-letsencrypt_ecmds=在您的系统上找不到 Let Encrypt 客户端命令 certbot 或 python 命令
letsencrypt_epythonmod=内置的 Let Encrypt 客户端所需的 Python 模块 $1
letsencrypt_epythonver=无法获取 Python 版本:$1
letsencrypt_epythonver2=需要 Python 版本 $1 或更高版本,但是您只有版本 $2。
@@ -1221,9 +1203,6 @@ letsencrypt_echain=下载链式证书失败 : $1
letsencrypt_echain2=从 $1 下载的链接证书为空
letsencrypt_ecsr=无法生成 CSR:$1
letsencrypt_ekeygen=生成私钥失败 : $1
-letsencrypt_enative=本地的 Let Encrypt 客户端(certbot)先前在此系统上使用,并且必须用于以后的所有证书请求
-letsencrypt_eacmedns=仅官方的 Let Encrypt 客户端支持基于 DNS 的验证
-letsencrypt_eacmecertbot=只有官方的Let Encrypt客户端支持Certbot验证
announce_hide=隐藏此告示
alert_hide=隐藏警告
diff --git a/webmin/lang/zh.auto b/webmin/lang/zh.auto
index befdbb911..67d3978ad 100644
--- a/webmin/lang/zh.auto
+++ b/webmin/lang/zh.auto
@@ -10,11 +10,33 @@ os_fix=确认检测到的变化
lang_chardef=由语言决定
+ssl_enforce=强制执行 SSL
+ssl_tablets=SSL 提供商
+ssl_letsdesc=此表单允许您从 ACME 兼容提供商(例如 Let's Encrypt)为 Webmin 请求受信任的 SSL 证书。
+ssl_letserr=很遗憾,该系统无法从 SSL 提供商请求证书:$1。
+ssl_letserr2=或者,检查模块配置页面,以确保您使用的是已配置的 ACME 客户端命令的正确路径。
+
+ssl_letsdesc2=新证书将替换 Webmin 中当前配置的证书。在颁发新证书之前,ACME 提供商必须使用网站文档目录中的临时文件或临时 DNS TXT 记录来验证对每个主机名的控制权。
+ssl_letsmode=域验证方法
+ssl_staging=提供商服务器
+ssl_staging0=生产
+ssl_staging1=测试阶段(仅供测试)
+ssl_acmeopts=提供商设置
+ssl_acmeextra=显示高级设置
+ssl_acmedir=自定义 ACME 目录 URL
+ssl_acmedirdesc=如果设置此项,则会覆盖上述默认提供商服务器。
+ssl_acmekid=外部帐户绑定密钥 ID
+ssl_acmekiddesc=可选。部分 ACME 提供商除了目录 URL 外,还需要此信息。
+ssl_acmehmac=外部帐户绑定 HMAC 密钥
+ssl_acmehmacdesc=可选。使用时需要 Certbot 原生客户端。
+
startpage_title=索引页选项
+session_rpc_timeout=RPC会话超时
+session_erpc_timeout=RPC 会话超时时间缺失或必须大于 0 的数字。
+session_edigestcrypt=$1 哈希格式无法使用,因为系统 crypt 函数不支持它。
session_forgot=允许恢复忘记的密码吗?
session_eforgot=除非先删除 Virtualmin 密码恢复 插件模块,否则无法启用忘记密码恢复功能。您可以在 Webmin 模块 页面上完成此操作。
-
session_passresetdesc=密码恢复限制
session_passreset=阻止请求数超过 $1 的客户端 $2 分钟
session_epassreset_failures=拦截请求缺失或无效
@@ -22,16 +44,35 @@ session_passtimeoutdesc=密码重置链接已过期
session_passtimeout=密码重置链接将在 $1 分钟后过期
session_epassreset_timeout=密码重置超时缺失或无效
+log_letsencrypt=已向 ACME 提供商请求新的 SSL 证书
+log_letsencryptdns=为 $1 创建了 ACME DNS 记录
+log_letsencryptcleanup=已删除 ACME DNS 记录 $1
+
+themes_configure=打开主题配置页面
+
themes_ok=主题更改已成功重定向现在 ..
themes_ok2=主题覆盖已成功更改,现在重定向 ..
+sendmail_name=显示名称
sendmail_toaddr=通知的默认目标地址
sendmail_to_def=未设置
sendmail_etoaddr=目的地地址缺失或格式不正确
twofactor_totp=TOTP 认证器
twofactor_qrcode=在 TOTP 应用程序中输入密码 $1,或者扫描下面的二维码。
+twofactor_qrcode_manual=请在 TOTP 应用中输入秘密代码 $1 并手动设置,因为该系统不支持生成二维码。
twofactor_etotptoken=TOTP 令牌必须是数字
+letsencrypt_title=SSL 提供商证书请求
+letsencrypt_err=申请证书失败
+letsencrypt_ecmds=您的系统中未找到 ACME 原生客户端命令certbot或python命令。
+letsencrypt_eacmedir=ACME 目录 URL 缺失或无效
+letsencrypt_eeabdir=使用外部帐户绑定时,必须输入 ACME 目录 URL。
+letsencrypt_eeabpair=必须同时输入外部帐户绑定密钥 ID 和 HMAC 密钥。
+letsencrypt_eeabnative=只有在安装了原生 ACME 客户端后才能使用外部帐户绑定。
+letsencrypt_enative=该系统之前使用的是原生 ACME 客户端 (certbot),以后所有证书请求都必须使用该客户端。
+letsencrypt_eacmedns=只有原生 ACME 客户端支持基于 DNS 的验证
+letsencrypt_eacmecertbot=只有原生 ACME 客户端支持 Certbot 验证
+
qr_err=无法生成二维码
qr_estr=缺少二维码字符串!
diff --git a/webmin/lang/zh_TW b/webmin/lang/zh_TW
index 04cdb3330..c884e15f1 100644
--- a/webmin/lang/zh_TW
+++ b/webmin/lang/zh_TW
@@ -186,7 +186,6 @@ lang_echarset=無效或錯誤的字元設定
ssl_title=SSL 加密
ssl_essl=Net::SSLeay perl 模組似乎沒有安裝在您的系統上,要安裝OpenSSL函數庫和Net::SSLeay,遵循此資訊 頁面 在Webmin網站
ssl_desc1=這個 Webmin 所使用的主機似乎有安裝 SSLeay Perl 模組。使用這個的話,Webmin 將支援在瀏覽器和伺服器間的 SSL 加密通訊。如果您透過 Internet 存取您的 Webmin 主機,應該要使用 SSL 以防止駭客擷取到您的 Webmin 密碼。
-ssl_desc2=警告,只有在您的瀏覽器支援 SSL(例如 Netscape 或 IE),而且沒有防火牆阻攔瀏覽器和 Webmin 主機之間的https要求時,才能打開 SSL 支援。
ssl_header=SSL支援
ssl_on=如果可用 SSL 的話啟用?
ssl_key=私人金鑰檔案
diff --git a/webmin/lang/zh_TW.auto b/webmin/lang/zh_TW.auto
index b20ee4e7e..6569c74c3 100644
--- a/webmin/lang/zh_TW.auto
+++ b/webmin/lang/zh_TW.auto
@@ -167,6 +167,7 @@ ssl_deny=拒絕的SSL協議版本
ssl_compression=允許壓縮的SSL連接?
ssl_honorcipherorder=強制使用服務器定義的密碼順序?
ssl_extracas=附加證書文件
(用於鏈接證書)
+ssl_enforce=強制執行 SSL
ssl_hsts=使用 HSTS 標頭強制 SSL
ssl_extracasdef=與全局SSL設置相同
ssl_extracasnone=此IP地址無
@@ -214,7 +215,7 @@ ssl_tabcreate=自簽名證書
ssl_tabcsr=證書籤名請求
ssl_tabupload=上傳證書
ssl_tabcurrent=當前證書
-ssl_tablets=讓我們加密
+ssl_tablets=SSL 提供者
ssl_cheader=當前證書的詳細信息
ssl_typeself=自簽名
ssl_typereal=由CA簽署
@@ -226,14 +227,14 @@ ssl_edownload=無法從證書中提取PEM數據
ssl_csralready=查看最新密鑰和CSR ..
ssl_already1=先前生成的私鑰:
ssl_already2=先前生成的證書籤名請求:
-ssl_letsdesc=讓我們加密是一個免費,自動和開放的證書頒發機構,可用於生成供Webmin使用的SSL證書。
-ssl_letserr=不幸的是,Let's Encrypt無法在您的系統上使用:$1。
-ssl_letserr2=或者,檢查模塊配置頁面,以確保使用正確的letsencrypt命令路徑。
-ssl_letsdesc2=此頁面可用於請求新證書,該證書將覆蓋Webmin中當前配置的任何其他證書。但是,“加密”服務要求通過檢查此系統是否託管該域的網站來驗證您對證書域的所有權。這是通過在網站的文檔目錄中放置一個小的臨時文件來完成的。
+ssl_letsdesc=此表單可讓您從 ACME 相容提供者(例如 Let's Encrypt)為 Webmin 要求受信任的 SSL 憑證。
+ssl_letserr=很遺憾,該系統無法從 SSL 提供者請求憑證:$1。
+ssl_letserr2=或者,檢查模組配置頁面,以確保您使用的是已配置的 ACME 用戶端命令的正確路徑。
+ssl_letsdesc2=新憑證將取代 Webmin 中目前配置的憑證。在頒發新憑證之前,ACME 提供者必須使用網站文件目錄中的暫存檔案或暫存 DNS TXT 記錄來驗證對每個主機名稱的控制權。
ssl_letsheader=新SSL證書的選項
ssl_letsdoms=證書的主機名
ssl_subset=跳過無法驗證的主機名稱?
-ssl_letsmode=讓我們加密驗證方法
+ssl_letsmode=網域驗證方法
ssl_letsmode0=Apache 虛擬主機比對主機名
ssl_letsmode1=選定的 Apache 虛擬主機
ssl_letsmode2=其他網頁伺服器文件目錄
@@ -244,9 +245,17 @@ ssl_letsonly=只是更新續訂
ssl_usewebmin=將新的密鑰和證書複製到Webmin?
ssl_letsrenew=自動續訂之間的月數
ssl_letsnotrenew=僅手動續訂
-ssl_staging=讓我們加密服務器
-ssl_staging0=真實
-ssl_staging1=暫存(僅測試)
+ssl_staging=提供者伺服器
+ssl_staging0=生產
+ssl_staging1=測試階段(僅供測試)
+ssl_acmeopts=提供者設定
+ssl_acmeextra=顯示進階設定
+ssl_acmedir=自訂 ACME 目錄 URL
+ssl_acmedirdesc=如果設定此項,則會覆蓋上述預設提供者伺服器。
+ssl_acmekid=外部帳戶綁定金鑰 ID
+ssl_acmekiddesc=可選。部分 ACME 提供者除了目錄 URL 外,還需要此資訊。
+ssl_acmehmac=外部帳戶綁定 HMAC 金鑰
+ssl_acmehmacdesc=可選。使用時需要 Certbot 原生客戶端。
newkey_ecns=沒有輸入服務器名稱
newkey_ecat=寫入新密鑰文件時發生錯誤:
@@ -337,13 +346,14 @@ session_banner=登錄前橫幅
session_extauth=外部魷魚式身份驗證程序
session_pmodedesc3=密碼過期政策
session_md5=Webmin密碼哈希格式
+session_rpc_timeout=RPC會話逾時
+session_erpc_timeout=RPC 會話逾時時間缺失或必須大於 0 的數字。
session_md5off=自動確定
session_md5on=使用 MD5 散列格式
session_sha512=使用 SHA512 散列格式
session_yescrypt=使用 yescrypt 散列格式
session_emd5mod=不能使用 MD5 散列格式,因為沒有安裝 Perl $1 模塊
-session_esha512mod=無法使用 SHA512 散列格式,因為未安裝 Perl $1 模塊
-session_eyescrypt=無法使用 yescrypt 散列格式,因為未安裝 Perl $1 模塊
+session_edigestcrypt=$1 雜湊格式無法使用,因為系統 crypt 函數不支援它。
session_blocklock=同時鎖定登錄失敗的用戶
session_passapi=啟用遠程密碼更改 API?
session_passapi0=API 已禁用
@@ -381,10 +391,11 @@ log_delete_webmincron=刪除$1調度函數
log_run_webmincron=跑$1調度函數
log_save_webmincron=更新了模塊$1中的計劃函數
log_onedelete_webmincron=模塊$1中已刪除的預定函數
-log_letsencrypt=從“加密”請求新的SSL證書
-log_letsencryptdns=為$1創建了“讓我們加密DNS記錄”
-log_letsencryptcleanup=刪除了讓我們加密$1的DNS記錄
+log_letsencrypt=已向 ACME 提供者請求新的 SSL 憑證
+log_letsencryptdns=為 $1 建立了 ACME DNS 記錄
+log_letsencryptcleanup=已刪除 ACME DNS 記錄 $1
+themes_configure=開啟主題配置頁面
themes_none=無-由主題決定
themes_overdesc=覆蓋層通過更改顏色,背景和圖標來修改主題的外觀。它們不會更改佈局。
themes_overlay=當前疊加:
@@ -661,6 +672,7 @@ sendmail_authdef=默認(當前為Cram-MD5)
sendmail_from=來自Webmin的電子郵件的發件人地址
sendmail_fromdef=默認值($1)
sendmail_fromaddr=地址
+sendmail_name=顯示名稱
sendmail_toaddr=通知的預設目標位址
sendmail_to_def=未設定
sendmail_etoaddr=目標地址缺失或格式不正確
@@ -762,6 +774,7 @@ twofactor_enrolllink=現在,您可以在Webmin用戶模塊中
twofactor_url=要了解有關$1的更多信息,請參見其網站,網址為$2。
twofactor_etotpmodule=未安裝兩因素身份驗證所需的Perl模塊$1。使用Webmin中的Perl模塊頁進行安裝。
twofactor_qrcode=在 TOTP 應用程式中輸入密碼 $1,或掃描下面的二維碼。
+twofactor_qrcode_manual=請在 TOTP 應用程式中輸入秘密代碼 $1 並手動設置,因為系統不支援產生二維碼。
twofactor_etotpid=無效的TOTP base32編碼的機密
twofactor_etotptoken=TOTP 令牌必須是數字
twofactor_etotpmatch=錯誤的OTP碼
@@ -771,9 +784,9 @@ twofactor_secret0=使用16個字符的密鑰
twofactor_esecret=密鑰長度必須恰好為16個字符,並且只能包含字母和數字
twofactor_esession=除非基於會話的身份驗證處於活動狀態,否則不能使用兩因素身份驗證
-letsencrypt_title=讓我們加密證書申請
+letsencrypt_title=SSL 提供者憑證請求
letsencrypt_err=申請證書失敗
-letsencrypt_ecmds=在您的系統上找不到“讓我們加密”客戶端命令certbot或python命令
+letsencrypt_ecmds=您的系統中找不到 ACME 原生客戶端指令certbot或python指令。
letsencrypt_epythonmod=內置的“讓我們加密”客戶端所需的Python模塊$1
letsencrypt_epythonver=無法獲取Python版本:$1
letsencrypt_epythonver2=需要Python版本$1或更高版本,但是您只有版本$2。
@@ -781,6 +794,10 @@ letsencrypt_certbot=Certbot
letsencrypt_edroot=Apache虛擬主機$1沒有文檔目錄!
letsencrypt_edom=域名缺失或無效
letsencrypt_erenew=缺少或非數字的續訂間隔
+letsencrypt_eacmedir=ACME 目錄 URL 缺失或無效
+letsencrypt_eeabdir=使用外部帳號綁定時,必須輸入 ACME 目錄 URL。
+letsencrypt_eeabpair=必須同時輸入外部帳戶綁定金鑰 ID 和 HMAC 金鑰。
+letsencrypt_eeabnative=只有在安裝了原生 ACME 用戶端後才能使用外部帳戶綁定。
letsencrypt_ewebroot=網站文件目錄不存在
letsencrypt_evhost=找不到與$1匹配的虛擬主機
letsencrypt_efull=找不到預期的完整證書文件$1
@@ -803,9 +820,9 @@ letsencrypt_echain=無法下載鏈接證書:$1
letsencrypt_echain2=從$1下載的鏈接證書為空
letsencrypt_ecsr=無法生成CSR:$1
letsencrypt_ekeygen=無法生成私鑰:$1
-letsencrypt_enative=本地的Let's Encrypt客戶端(certbot)先前在此系統上使用,並且必須用於以後的所有證書請求
-letsencrypt_eacmedns=僅官方的Let's Encrypt客戶端支持基於DNS的驗證
-letsencrypt_eacmecertbot=僅官方 Let's Encrypt 用戶端支援 Certbot 驗證
+letsencrypt_enative=在該系統之前使用的是原生 ACME 用戶端 (certbot),以後所有憑證要求都必須使用該客戶端。
+letsencrypt_eacmedns=只有原生 ACME 用戶端支援基於 DNS 的驗證
+letsencrypt_eacmecertbot=只有原生 ACME 用戶端支援 Certbot 驗證
announce_hide=隱藏此公告
alert_hide=隱藏警報
diff --git a/webmin/letsencrypt-lib.pl b/webmin/letsencrypt-lib.pl
index 80cce77f9..c863744cb 100755
--- a/webmin/letsencrypt-lib.pl
+++ b/webmin/letsencrypt-lib.pl
@@ -46,6 +46,61 @@ if ($ver < 2.5) {
return undef;
}
+# can_bind_tcp_port(port)
+# Returns 1 if a TCP port appears to be free for binding, or 0 if it is in use
+sub can_bind_tcp_port
+{
+my ($port) = @_;
+my $proto = getprotobyname('tcp');
+return 1 if (!$proto);
+my @tests = (
+ [ PF_INET(), sub { pack_sockaddr_in($port, INADDR_ANY) } ],
+ );
+push(@tests, [ PF_INET6(), sub { pack_sockaddr_in6($port, in6addr_any()) },
+ sub { setsockopt($_[0], 41, 26, pack("l", 1)) } ])
+ if (defined(&PF_INET6) && defined(&pack_sockaddr_in6) &&
+ defined(&in6addr_any));
+foreach my $t (@tests) {
+ my ($family, $pack_func, $setup_func) = @$t;
+ my $sock;
+ next if (!socket($sock, $family, SOCK_STREAM, $proto));
+ &$setup_func($sock) if ($setup_func);
+ setsockopt($sock, SOL_SOCKET, SO_REUSEADDR, pack("l", 1));
+ my $ok = bind($sock, &$pack_func());
+ my $inuse = !$ok && $!{'EADDRINUSE'};
+ close($sock);
+ return 0 if ($inuse);
+ }
+return 1;
+}
+
+# is_webmin_listening_on_port(port)
+# Returns 1 if Miniserv is configured to listen on a TCP port
+sub is_webmin_listening_on_port
+{
+my ($port) = @_;
+my %miniserv;
+&get_miniserv_config(\%miniserv);
+return 1 if ($miniserv{'port'} && $miniserv{'port'} == $port);
+foreach my $s (split(/\s+/, $miniserv{'sockets'} || '')) {
+ return 1 if ($s =~ /^\Q$port\E$/ ||
+ $s =~ /^\*:\Q$port\E$/ ||
+ $s =~ /^\S+:\Q$port\E$/);
+ }
+return 0;
+}
+
+# get_letsencrypt_certbot_port_error()
+# Returns an error if Certbot standalone mode cannot listen on port 80
+sub get_letsencrypt_certbot_port_error
+{
+return undef if (&can_bind_tcp_port(80));
+if (&is_webmin_listening_on_port(80)) {
+ return $text{'letsencrypt_ecertbotwebmin'};
+ }
+return $text{'letsencrypt_ecertbotport'};
+}
+
# get_letsencrypt_install_message(return-link, return-title)
# Returns a link or form to install Let's Encrypt
sub get_letsencrypt_install_message
@@ -59,7 +114,7 @@ return &software::missing_install_link(
# request_letsencrypt_cert(domain|&domains, webroot, [email], [keysize],
# [request-mode], [use-staging], [account-email],
# [key-type], [reuse-key],
-# [server-url, server-key, server-hmac],
+# [directory-url, server-key, server-hmac],
# [allow-subset])
# Attempt to request a cert using a generated key with the Let's Encrypt client
# command, and write it to the given path. Returns a status flag, and either
@@ -67,7 +122,8 @@ return &software::missing_install_link(
sub request_letsencrypt_cert
{
my ($dom, $webroot, $email, $size, $mode, $staging, $account_email,
- $key_type, $reuse_key, $server, $server_key, $server_hmac, $subset) = @_;
+ $key_type, $reuse_key, $directory_url, $server_key, $server_hmac,
+ $subset) = @_;
my @doms = ref($dom) ? @$dom : ($dom);
$email ||= "root\@$doms[0]";
$mode ||= "web";
@@ -82,9 +138,8 @@ foreach my $d (@doms) {
}
}
-if ($server && !$letsencrypt_cmd) {
- return (0, "A non-standard server can only be used when the native ".
- "Let's Encrypt client is installed");
+if (($server_key || $server_hmac) && !$letsencrypt_cmd) {
+ return (0, $text{'letsencrypt_eeabnative'});
}
if ($mode eq "web") {
@@ -203,8 +258,8 @@ if ($letsencrypt_cmd) {
&compare_version_numbers($cmd_ver, '<', '1.13.0')) {
$reuse_flags = ""
}
- if ($server) {
- $server_flags = " --server ".quotemeta($server);
+ if ($directory_url) {
+ $server_flags = " --server ".quotemeta($directory_url);
if ($server_key) {
$server_flags .= " --eab-kid ".quotemeta($server_key);
}
@@ -224,7 +279,7 @@ if ($letsencrypt_cmd) {
" --rsa-key-size ".quotemeta($size).
" --cert-name ".quotemeta($doms[0]).
" --no-autorenew".
- ($staging ? " --test-cert" : "");
+ (!$directory_url && $staging ? " --test-cert" : "");
if ($mode eq "web") {
# Webserver based validation
&clean_environment();
@@ -263,6 +318,11 @@ if ($letsencrypt_cmd) {
}
elsif ($mode eq "certbot") {
# Use certbot's own webserver
+ my $err = &get_letsencrypt_certbot_port_error();
+ if ($err) {
+ @rv = (0, $err);
+ goto FAILED;
+ }
&clean_environment();
$out = &backquote_logged(
"cd $dir && (echo A | $letsencrypt_cmd certonly".
@@ -325,13 +385,14 @@ if ($letsencrypt_cmd) {
$chain = undef if (!-r $chain);
&set_ownership_permissions(undef, undef, 0600, $cert);
&set_ownership_permissions(undef, undef, 0600, $key);
- &set_ownership_permissions(undef, undef, 0600, $chain);
+ &set_ownership_permissions(undef, undef, 0600, $chain) if ($chain);
if ($account_email) {
# Attempt to update the contact email on file with let's encrypt
&system_logged(
"$letsencrypt_cmd register --update-registration".
" --email ".quotemeta($account_email).
+ $server_flags.
" >/dev/null 2>&1 &1 >".quotemeta($cert));
&reset_environment();
@@ -433,25 +498,32 @@ else {
&close_tempfile($fh2);
}
else {
- # Download the fixed list chained cert files
- foreach my $url (@$letsencrypt_chain_urls) {
- my $cout;
- my ($host, $port, $page, $ssl) = &parse_http_url($url);
- my $err;
- &http_download($host, $port, $page, \$cout, \$err,
- undef, $ssl);
- if ($err) {
- @rv = (0, &text('letsencrypt_echain', $err));
- goto FAILED;
+ if (!$directory_url) {
+ # Download the fixed list chained cert files for
+ # Let's Encrypt when the ACME response doesn't
+ # include the chain.
+ foreach my $url (@$letsencrypt_chain_urls) {
+ my $cout;
+ my ($host, $port, $page, $ssl) =
+ &parse_http_url($url);
+ my $err;
+ &http_download($host, $port, $page, \$cout,
+ \$err, undef, $ssl);
+ if ($err) {
+ @rv = (0, &text('letsencrypt_echain',
+ $err));
+ goto FAILED;
+ }
+ if ($cout !~ /\S/ && !-r $chain) {
+ @rv = (0, &text('letsencrypt_echain2',
+ $url));
+ goto FAILED;
+ }
+ my $fh = "CHAIN";
+ &open_tempfile($fh, ">>$chain");
+ &print_tempfile($fh, $cout);
+ &close_tempfile($fh);
}
- if ($cout !~ /\S/ && !-r $chain) {
- @rv = (0, &text('letsencrypt_echain2', $url));
- goto FAILED;
- }
- my $fh = "CHAIN";
- &open_tempfile($fh, ">>$chain");
- &print_tempfile($fh, $cout);
- &close_tempfile($fh);
}
}
@@ -461,13 +533,18 @@ else {
my $chainfinal = "$module_config_directory/$doms[0].ca";
©_source_dest($cert, $certfinal, 1);
©_source_dest($key, $keyfinal, 1);
- ©_source_dest($chain, $chainfinal, 1);
&set_ownership_permissions(undef, undef, 0600, $certfinal);
&set_ownership_permissions(undef, undef, 0600, $keyfinal);
- &set_ownership_permissions(undef, undef, 0600, $chainfinal);
+ if ($chain) {
+ ©_source_dest($chain, $chainfinal, 1);
+ &set_ownership_permissions(undef, undef, 0600, $chainfinal);
+ }
+ else {
+ $chainfinal = undef;
+ }
&unlink_file($cert);
&unlink_file($key);
- &unlink_file($chain);
+ &unlink_file($chain) if ($chain);
@rv = (1, $certfinal, $keyfinal, $chainfinal);
}
diff --git a/webmin/letsencrypt.cgi b/webmin/letsencrypt.cgi
index ed78fc6f7..6aefb1bb4 100755
--- a/webmin/letsencrypt.cgi
+++ b/webmin/letsencrypt.cgi
@@ -13,6 +13,7 @@ our %in;
our $config_directory;
our %config;
our $module_name;
+our $letsencrypt_cmd;
&error_setup($text{'letsencrypt_err'});
# Re-check if let's encrypt is available
@@ -25,6 +26,19 @@ my @doms = split(/\s+/, $in{'dom'});
foreach my $dom (@doms) {
$dom =~ /^(\*\.)?[a-z0-9\-\.\_]+$/i || &error($text{'letsencrypt_edom'});
}
+$in{'directory_url'} = &trim($in{'directory_url'});
+$in{'eab_kid'} = &trim($in{'eab_kid'});
+$in{'eab_hmac'} = &trim($in{'eab_hmac'});
+if ($in{'directory_url'}) {
+ my ($host, $port, $page, $ssl) = &parse_http_url($in{'directory_url'});
+ $host && $ssl < 2 || &error($text{'letsencrypt_eacmedir'});
+ }
+if ($in{'eab_kid'} || $in{'eab_hmac'}) {
+ $in{'directory_url'} || &error($text{'letsencrypt_eeabdir'});
+ $in{'eab_kid'} && $in{'eab_hmac'} ||
+ &error($text{'letsencrypt_eeabpair'});
+ $letsencrypt_cmd || &error($text{'letsencrypt_eeabnative'});
+ }
$in{'renew_def'} || $in{'renew'} =~ /^[1-9][0-9]*$/ ||
&error($text{'letsencrypt_erenew'});
$in{'size_def'} || $in{'size'} =~ /^\d+$/ ||
@@ -89,8 +103,10 @@ else {
if ($in{'save'}) {
# Just update renewal
&save_renewal_only(\@doms, $webroot, $mode, $size,
- $in{'subset'}, $in{'use'});
- &redirect("edit_ssl.cgi");
+ $in{'subset'}, $in{'use'},
+ $in{'directory_url'},
+ $in{'eab_kid'}, $in{'eab_hmac'});
+ &redirect("edit_ssl.cgi?mode=lets");
}
else {
# Request the cert
@@ -103,7 +119,8 @@ else {
"".&html_escape($webroot).""),"