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() { - $data .= $_; - } - close(FILE); - local $ct = &guess_mime_type($f); - push(@attach, - { 'type' => $ct, - 'idx' => scalar(@attach), - 'header' => - { 'content-type' => $ct }, - 'headers' => - [ [ 'Content-Type', $ct ] ], - 'filename' => $f, - 'data' => $data }); - } - closedir(DIR); - unlink(glob("$tempdir/*"), $tempfile); - rmdir($tempdir); + $attach->{'error'} = $terror || + "failed to decode winmail.dat"; } } last if ($l >= $max || $lines[$l] eq "$bound--"); @@ -3194,12 +3268,13 @@ return 0; # Returns the getpw* function array for the user to switch to sub get_switch_user_info { -if ($main::mail_open_user =~ /^\d+$/) { +my $user = @_ ? $_[0] : $main::mail_open_user; +if ($user =~ /^\d+$/) { # Could be by UID .. but fall back to by name if there is no such UID - my @rv = getpwuid($main::mail_open_user); + my @rv = getpwuid($user); return @rv if (@rv > 0); } -return getpwnam($main::mail_open_user); +return getpwnam($user); } # is_ascii() diff --git a/mailboxes/folders-lib.pl b/mailboxes/folders-lib.pl index b735d5e06..a699ce1fa 100755 --- a/mailboxes/folders-lib.pl +++ b/mailboxes/folders-lib.pl @@ -310,6 +310,10 @@ elsif ($_[2]->{'type'} == 7) { print DEBUG "listing MBX $_[2]->{'file'}\n"; @mail = &list_mbxfile($_[2]->{'file'}, $_[0], $_[1]); } +foreach my $mail (@mail) { + $mail->{'open_user'} ||= $_[2]->{'user'} + if ($mail && $_[2]->{'user'}); + } &switch_from_folder_user($_[2]); return @mail; } @@ -559,6 +563,9 @@ elsif ($folder->{'type'} == 7) { # MBX folder @mail = &select_mbxfile($folder->{'file'}, $ids, $headersonly); } +foreach my $mail (@mail) { + $mail->{'open_user'} ||= $folder->{'user'} if ($mail && $folder->{'user'}); + } &switch_from_folder_user($_[0]); return @mail; } diff --git a/nftables/apply.cgi b/nftables/apply.cgi new file mode 100755 index 000000000..be53676f3 --- /dev/null +++ b/nftables/apply.cgi @@ -0,0 +1,16 @@ +#!/usr/bin/perl +# apply.cgi +# Apply the current configuration + +require './nftables-lib.pl'; ## no critic +use strict; +use warnings; +our (%in, %text); +ReadParse(); +error_setup($text{'apply_err'}); + +my @tables = get_nftables_save(); +my $err = apply_restore(); +error($err) if ($err); + +redirect("index.cgi"); diff --git a/nftables/config.info b/nftables/config.info new file mode 100644 index 000000000..2c5b4ca98 --- /dev/null +++ b/nftables/config.info @@ -0,0 +1,12 @@ +line0=Configurable global options,11 +perpage=Number of rules to display per page,3,Default (50) +view_condition=Display condition in rules list?,1,1-Yes,0-No +view_comment=Display comment in rules list?,1,1-Yes,0-No +before_cmd=Command to run before changing rules,3,None +after_cmd=Command to run after changing rules,3,None +before_apply_cmd=Command to run before applying configuration,3,None +after_apply_cmd=Command to run after applying configuration,3,None +line2=NFTables configuration,11 +nft_cmd=Full path to nft command,0 +save_file=File to save/edit NFTables rules,3,Use operating system or Webmin default +direct=Directly edit firewall rules instead of save file?,1,1-Yes,0-No diff --git a/nftables/create_table.cgi b/nftables/create_table.cgi new file mode 100755 index 000000000..8b90fca18 --- /dev/null +++ b/nftables/create_table.cgi @@ -0,0 +1,55 @@ +#!/usr/bin/perl +# create_table.cgi +# Create a new nftables table + +require './nftables-lib.pl'; ## no critic +use strict; +use warnings; +our (%in, %text); +ReadParse(); +error_setup($text{'create_err'}); + +my @families = qw(ip ip6 inet arp bridge netdev); +my %family_ok = map { $_ => 1 } @families; + +if ($in{'create'}) { + my $name = $in{'name'}; + my $family = $in{'family'}; + + $name =~ /^\w[\w-]*$/ || error($text{'create_ename'}); + $family_ok{$family} || error($text{'create_efamily'}); + + my @tables = get_nftables_save(); + foreach my $t (@tables) { + if ($t->{'name'} eq $name && $t->{'family'} eq $family) { + error($text{'create_edup'}); + } + } + + push(@tables, { 'name' => $name, + 'family' => $family, + 'rules' => [], + 'chains' => {}, + 'sets' => {} }); + my $err = save_configuration(@tables); + error(text('create_failed', $err)) if ($err); + webmin_log("create", "table", $name, { 'family' => $family }); + + my $idx = $#tables; + redirect("index.cgi?table=$idx"); +} + +ui_print_header(undef, $text{'create_title'}, "", "intro", 1, 1); +print ui_form_start("create_table.cgi"); +print ui_hidden("create", 1); + +print ui_table_start($text{'create_header'}, "width=100%", 2); +print ui_table_row($text{'create_family'}, + ui_select("family", $in{'family'} || "inet", + [ map { [ $_, $_ ] } @families ])); +print ui_table_row($text{'create_name'}, + ui_textbox("name", $in{'name'}, 20)); +print ui_table_end(); + +print ui_form_end([ [ undef, $text{'create_ok'} ] ]); +ui_print_footer("index.cgi", $text{'index_return'}); diff --git a/nftables/delete_chain.cgi b/nftables/delete_chain.cgi new file mode 100644 index 000000000..e609240ee --- /dev/null +++ b/nftables/delete_chain.cgi @@ -0,0 +1,54 @@ +#!/usr/bin/perl +# delete_chain.cgi +# Delete an existing nftables chain + +require './nftables-lib.pl'; ## no critic +use strict; +use warnings; +our (%in, %text); +ReadParse(); +error_setup($text{'delete_chain_err'}); + +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'}); + +my @refs = grep { + ($_->{'jump'} && $_->{'jump'} eq $in{'chain'}) || + ($_->{'goto'} && $_->{'goto'} eq $in{'chain'}) +} @{$table->{'rules'}}; + +if ($in{'confirm'}) { + @refs && error(text('delete_chain_inuse', $in{'chain'}, scalar(@refs))); + + @{$table->{'rules'}} = grep { $_->{'chain'} ne $in{'chain'} } @{$table->{'rules'}}; + delete($table->{'chains'}->{$in{'chain'}}); + + my $err = save_configuration(@tables); + error(text('delete_chain_failed', $err)) if ($err); + webmin_log("delete", "chain", $in{'chain'}, + { 'table' => $table->{'name'}, 'family' => $table->{'family'} }); + redirect("index.cgi?table=$in{'table'}"); +} + +ui_print_header(undef, $text{'delete_chain_title'}, "", "intro", 1, 1); +print ui_form_start("delete_chain.cgi"); +print ui_hidden("table", $in{'table'}); +print ui_hidden("chain", $in{'chain'}); +print "

", + text('delete_chain_confirm', + "$in{'chain'}", + "$table->{'family'} $table->{'name'}"), + ""; +if (@refs) { + print "

", text('delete_chain_inuse', $in{'chain'}, scalar(@refs)); +} +print "

\n"; +print ui_submit($text{'delete'}, "confirm"); +print "

\n"; +print ui_form_end(); +ui_print_footer("index.cgi?table=$in{'table'}", $text{'index_return'}); + diff --git a/nftables/delete_set.cgi b/nftables/delete_set.cgi new file mode 100755 index 000000000..82747b457 --- /dev/null +++ b/nftables/delete_set.cgi @@ -0,0 +1,48 @@ +#!/usr/bin/perl +# delete_set.cgi +# Delete an existing nftables set + +require './nftables-lib.pl'; ## no critic +use strict; +use warnings; +our (%in, %text); +ReadParse(); +error_setup($text{'delete_set_err'}); + +my @tables = get_nftables_save(); +my $table = $tables[$in{'table'}]; +$table || error($text{'set_notable'}); + +my $set = $table->{'sets'}->{$in{'set'}}; +$set || error($text{'set_noset'}); + +my $refs = count_set_references($table, $in{'set'}); + +if ($in{'confirm'}) { + $refs && error(text('delete_set_inuse', $in{'set'}, $refs)); + + delete($table->{'sets'}->{$in{'set'}}); + my $err = save_configuration(@tables); + error(text('delete_set_failed', $err)) if ($err); + webmin_log("delete", "set", $in{'set'}, + { 'table' => $table->{'name'}, 'family' => $table->{'family'} }); + redirect("index.cgi?table=$in{'table'}"); +} + +ui_print_header(undef, $text{'delete_set_title'}, "", "intro", 1, 1); +print ui_form_start("delete_set.cgi"); +print ui_hidden("table", $in{'table'}); +print ui_hidden("set", $in{'set'}); +print "
", + text('delete_set_confirm', + "$in{'set'}", + "$table->{'family'} $table->{'name'}"), + ""; +if ($refs) { + print "

", text('delete_set_inuse', $in{'set'}, $refs); +} +print "

\n"; +print ui_submit($text{'delete'}, "confirm"); +print "

\n"; +print ui_form_end(); +ui_print_footer("index.cgi?table=$in{'table'}", $text{'index_return'}); diff --git a/nftables/delete_table.cgi b/nftables/delete_table.cgi new file mode 100755 index 000000000..0621e0d50 --- /dev/null +++ b/nftables/delete_table.cgi @@ -0,0 +1,36 @@ +#!/usr/bin/perl +# delete_table.cgi +# Delete an existing nftables table + +require './nftables-lib.pl'; ## no critic +use strict; +use warnings; +our (%in, %text); +ReadParse(); +error_setup($text{'delete_err'}); + +my @tables = get_nftables_save(); +my $table = $tables[$in{'table'}]; +$table || error($text{'delete_notable'}); + +if ($in{'confirm'}) { + splice(@tables, $in{'table'}, 1); + my $err = save_configuration(@tables); + error(text('delete_failed', $err)) if ($err); + webmin_log("delete", "table", $table->{'name'}, + { 'family' => $table->{'family'} }); + redirect("index.cgi"); +} + +ui_print_header(undef, $text{'delete_title'}, "", "intro", 1, 1); +print ui_form_start("delete_table.cgi"); +print ui_hidden("table", $in{'table'}); +print "
", + text('delete_confirm', + "$table->{'family'} $table->{'name'}"), + "

\n"; +print ui_submit($text{'delete'}, "confirm"); +print "

\n"; +print ui_form_end(); +ui_print_footer("index.cgi?table=$in{'table'}", $text{'index_return'}); + diff --git a/nftables/edit_chain.cgi b/nftables/edit_chain.cgi new file mode 100644 index 000000000..f7580b69e --- /dev/null +++ b/nftables/edit_chain.cgi @@ -0,0 +1,87 @@ +#!/usr/bin/perl +# edit_chain.cgi +# Display a form for creating or editing a 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 = { }; +my $chain_name = ""; +my $is_new = $in{'new'} ? 1 : 0; + +if ($is_new) { + ui_print_header(undef, $text{'chain_title_new'}, "", "intro", 1, 1); +} else { + $chain_name = $in{'chain'}; + $chain = $table->{'chains'}->{$chain_name}; + $chain || error($text{'chain_nochain'}); + ui_print_header(undef, $text{'chain_title_edit'}, "", "intro", 1, 1); +} + +my @type_opts = ( + [ "", $text{'chain_type_none'} ], + map { [ $_, $_ ] } qw(filter nat route) +); +my @hook_opts = ( + [ "", $text{'chain_hook_none'} ], + map { [ $_, $_ ] } qw(prerouting input forward output postrouting ingress) +); +my @policy_opts = ( + [ "", $text{'chain_policy_none'} ], + map { [ $_, $_ ] } qw(accept drop reject return queue continue) +); + +print ui_form_start("save_chain.cgi"); +print ui_hidden("table", $in{'table'}); +print ui_hidden("new", $is_new); + +print ui_table_start($text{'chain_header'}, "width=100%", 2); + +my $name_tags = $is_new ? undef : "readonly"; +print ui_table_row(hlink($text{'chain_name'}, "chain_name"), + ui_textbox("chain_name", $chain_name, 20, 0, undef, $name_tags)); + +print ui_table_row(hlink($text{'chain_type'}, "chain_type"), + ui_select("chain_type", $chain->{'type'}, \@type_opts, 1, 0, 1, 0, + "onchange='toggle_chain_base()'")); +print ui_table_row(hlink($text{'chain_hook'}, "chain_hook"), + ui_select("chain_hook", $chain->{'hook'}, \@hook_opts, 1, 0, 1)); +print ui_table_row(hlink($text{'chain_priority'}, "chain_priority"), + ui_textbox("chain_priority", $chain->{'priority'}, 10)); +print ui_table_row(hlink($text{'chain_policy'}, "chain_policy"), + ui_select("chain_policy", $chain->{'policy'}, \@policy_opts, 1, 0, 1)); + +print ui_table_end(); + +print ui_form_end([ [ undef, $text{$is_new ? 'create' : 'save'} ] ]); + +print <<'EOF'; + +EOF + +ui_print_footer("index.cgi?table=$in{'table'}", $text{'index_return'}); + diff --git a/nftables/edit_rule.cgi b/nftables/edit_rule.cgi new file mode 100755 index 000000000..5fb0688a7 --- /dev/null +++ b/nftables/edit_rule.cgi @@ -0,0 +1,646 @@ +#!/usr/bin/perl +# edit_rule.cgi +# Display a form for creating or editing a rule + +require './nftables-lib.pl'; ## no critic +use strict; +use warnings; +our (%in, %text, %config); +ReadParse(); +my @tables = get_nftables_save(); +my $table = $tables[$in{'table'}]; +my $rule; +my $chain_def; +my $chain_hook; +my $action_sel; +my $proto_sel; +my $icmp_type; +my $log_enabled; +my $raw_extra = ""; +my $ct_state_sel; +my $tcp_flags_sel; +my $advanced_open; +my $saddr_set; +my $daddr_set; +my $sport_set; +my $dport_set; +my $saddr_val; +my $daddr_val; +my $sport_val; +my $dport_val; +my @addr_set_opts; +my @port_set_opts; +my %set_families; + +sub split_multi_value +{ + my ($v) = @_; + return if (!defined($v) || $v eq ''); + $v =~ s/^\s*\{//; + $v =~ s/\}\s*$//; + $v =~ s/^\s+//; + $v =~ s/\s+$//; + return if ($v eq ''); + my @vals = split(/\s*,\s*/, $v); + @vals = grep { $_ ne '' } @vals; + return \@vals; +} + +if ($in{'new'}) { + ui_print_header(undef, $text{'edit_title_new'}, "", "intro", 1, 1); + $rule = { 'chain' => $in{'chain'} }; +} else { + ui_print_header(undef, $text{'edit_title_edit'}, "", "intro", 1, 1); + $rule = $table->{'rules'}->[$in{'idx'}]; +} +if ($table && $rule->{'chain'}) { + $chain_def = $table->{'chains'}->{$rule->{'chain'}}; + $chain_hook = $chain_def ? $chain_def->{'hook'} : undef; +} +if ($rule) { + if ($rule->{'exprs'} && ref($rule->{'exprs'}) eq 'ARRAY') { + my @raw = map { $_->{'text'} } + grep { $_->{'type'} && $_->{'type'} eq 'raw' } + @{$rule->{'exprs'}}; + $raw_extra = join(" ", @raw); + } + if ($rule->{'jump'}) { + $action_sel = 'jump'; + } + elsif ($rule->{'goto'}) { + $action_sel = 'goto'; + } + else { + $action_sel = $rule->{'action'}; + } + $action_sel ||= 'accept'; + $proto_sel = $rule->{'proto'} || $rule->{'l4proto'}; + if (!$proto_sel) { + $proto_sel = 'icmp' if ($rule->{'icmp_type'}); + $proto_sel = 'icmpv6' if ($rule->{'icmpv6_type'}); + } + $proto_sel ||= 'tcp' if ($in{'new'}); + $icmp_type = $rule->{'icmp_type'} || $rule->{'icmpv6_type'}; + $ct_state_sel = split_multi_value($rule->{'ct_state'}); + $tcp_flags_sel = split_multi_value($rule->{'tcp_flags'}); + $log_enabled = $rule->{'log'} || $rule->{'log_prefix'} || $rule->{'log_level'}; +} +$saddr_set = set_name_from_value($rule->{'saddr'}); +$daddr_set = set_name_from_value($rule->{'daddr'}); +$sport_set = set_name_from_value($rule->{'sport'}); +$dport_set = set_name_from_value($rule->{'dport'}); +$saddr_val = $saddr_set ? "" : $rule->{'saddr'}; +$daddr_val = $daddr_set ? "" : $rule->{'daddr'}; +$sport_val = $sport_set ? "" : $rule->{'sport'}; +$dport_val = $dport_set ? "" : $rule->{'dport'}; + +@addr_set_opts = ( [ "", $text{'edit_set_none'} ] ); +@port_set_opts = ( [ "", $text{'edit_set_none'} ] ); +my %addr_set_seen; +my %port_set_seen; +if ($table && $table->{'sets'} && ref($table->{'sets'}) eq 'HASH') { + foreach my $s (sort keys %{$table->{'sets'}}) { + my $set = $table->{'sets'}->{$s} || { }; + my $label = $s; + $label .= " ($set->{'type'})" if ($set->{'type'}); + my $kind = set_type_kind($set->{'type'}); + if (!$kind || $kind eq 'addr') { + push(@addr_set_opts, [ $s, $label ]); + $addr_set_seen{$s} = 1; + } + if (!$kind || $kind eq 'port') { + push(@port_set_opts, [ $s, $label ]); + $port_set_seen{$s} = 1; + } + my $fam = set_type_family($set->{'type'}); + $set_families{$s} = $fam if ($fam); + } +} +if ($saddr_set && !$addr_set_seen{$saddr_set}) { + push(@addr_set_opts, [ $saddr_set, $saddr_set ]); +} +if ($daddr_set && !$addr_set_seen{$daddr_set}) { + push(@addr_set_opts, [ $daddr_set, $daddr_set ]); +} +if ($sport_set && !$port_set_seen{$sport_set}) { + push(@port_set_opts, [ $sport_set, $sport_set ]); +} +if ($dport_set && !$port_set_seen{$dport_set}) { + push(@port_set_opts, [ $dport_set, $dport_set ]); +} +$advanced_open = 1 if ($action_sel && ($action_sel eq 'jump' || $action_sel eq 'goto')); +$advanced_open = 1 if ($rule && ( + $rule->{'jump'} || $rule->{'goto'} || + $rule->{'iif'} || $rule->{'oif'} || + $icmp_type || + $rule->{'ct_state'} || + $rule->{'tcp_flags'} || $rule->{'tcp_flags_mask'} || + $rule->{'limit_rate'} || $rule->{'limit_burst'} || + $log_enabled || + $rule->{'counter'} +)); + +my @icmp_types = qw( + 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 +); +my @icmpv6_types = qw( + 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 +); +my %icmp_seen; +my @icmp_type_opts = ( [ "", $text{'edit_proto_any'} ] ); +foreach my $t (@icmp_types, @icmpv6_types) { + next if ($icmp_seen{$t}++); + push(@icmp_type_opts, [ $t, $t ]); +} +my @ct_state_opts = ( + [ "", $text{'edit_proto_any'} ], + map { [ $_, $_ ] } qw(invalid new established related untracked), +); +my @tcp_flags_opts = ( + [ "", $text{'edit_proto_any'} ], + map { [ $_, $_ ] } qw(fin syn rst psh ack urg ecn cwr), +); + +print ui_form_start("save_rule.cgi"); +print ui_hidden("table", $in{'table'}); +print ui_hidden("idx", $in{'idx'}); +print ui_hidden("chain", $rule->{'chain'}); +print ui_hidden("new", $in{'new'}); +print ui_hidden("raw_extra", $raw_extra); + +print ui_table_start($text{'edit_header'}, "width=100%", 2); + +# Rule comment +print ui_table_row(hlink($text{'edit_comment'}, "comment"), + ui_textbox("comment", $rule->{'comment'}, 50)); + +# Action +print ui_table_row(hlink($text{'edit_action'}, "action"), + ui_select("action", $action_sel, + [ + [ "accept", $text{'index_accept'} ], + [ "drop", $text{'index_drop'} ], + [ "reject", $text{'index_reject'} ], + [ "return", $text{'edit_return'} ], + [ "jump", $text{'edit_jump_action'} ], + [ "goto", $text{'edit_goto_action'} ], + ])); + +# Addresses +my $saddr_row = ui_textbox("saddr", $saddr_val, 30); +if (@addr_set_opts > 1) { + $saddr_row .= "
".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 @@ +
Action
+

Verdict or control action for matching packets.

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

Base chain hook point, such as prerouting, input, forward, output, postrouting, or ingress.

+ diff --git a/nftables/help/chain_name.html b/nftables/help/chain_name.html new file mode 100644 index 000000000..bcc7e69e2 --- /dev/null +++ b/nftables/help/chain_name.html @@ -0,0 +1,3 @@ +
Chain name
+

Unique name for the chain within this table. Use letters, numbers, underscores, and dashes.

+ diff --git a/nftables/help/chain_policy.html b/nftables/help/chain_policy.html new file mode 100644 index 000000000..c0397985d --- /dev/null +++ b/nftables/help/chain_policy.html @@ -0,0 +1,3 @@ +
Policy
+

Default action for this base chain, such as accept, drop, reject, queue, or continue.

+ diff --git a/nftables/help/chain_priority.html b/nftables/help/chain_priority.html new file mode 100644 index 000000000..1b09c3730 --- /dev/null +++ b/nftables/help/chain_priority.html @@ -0,0 +1,3 @@ +
Priority
+

Priority for this base chain. Lower values run earlier. Common values include -300, -150, 0, or 100.

+ diff --git a/nftables/help/chain_type.html b/nftables/help/chain_type.html new file mode 100644 index 000000000..0279d9871 --- /dev/null +++ b/nftables/help/chain_type.html @@ -0,0 +1,3 @@ +
Chain type
+

Base chain type, such as filter, nat, or route. Leave blank to create a regular chain with no hook.

+ diff --git a/nftables/help/comment.html b/nftables/help/comment.html new file mode 100644 index 000000000..95e4f5b42 --- /dev/null +++ b/nftables/help/comment.html @@ -0,0 +1,6 @@ +
Comment
+ +Optional note stored with the rule.

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

Add a counter to track packets and bytes.

+ diff --git a/nftables/help/counter_1.html b/nftables/help/counter_1.html new file mode 100644 index 000000000..555c93459 --- /dev/null +++ b/nftables/help/counter_1.html @@ -0,0 +1,3 @@ +
Counter
+

Add a counter to track packets and bytes.

+ diff --git a/nftables/help/ct_state.html b/nftables/help/ct_state.html new file mode 100644 index 000000000..778aad89b --- /dev/null +++ b/nftables/help/ct_state.html @@ -0,0 +1,10 @@ +
Conntrack state
+

Select one or more states to match.

+ + 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 @@ +
Destination address
+

IPv4/IPv6 address or CIDR (e.g., 2001:db8::/32).

+ diff --git a/nftables/help/dport.html b/nftables/help/dport.html new file mode 100644 index 000000000..45089e007 --- /dev/null +++ b/nftables/help/dport.html @@ -0,0 +1,3 @@ +
Destination port
+

TCP/UDP destination port number or range (e.g., 80 or 1000-2000).

+ diff --git a/nftables/help/edit_direct.html b/nftables/help/edit_direct.html new file mode 100644 index 000000000..f3e055a2d --- /dev/null +++ b/nftables/help/edit_direct.html @@ -0,0 +1,4 @@ +
Edit directly
+

Disable structured fields and edit the raw rule line.

+

Validation occurs on save.

+ diff --git a/nftables/help/edit_direct_1.html b/nftables/help/edit_direct_1.html new file mode 100644 index 000000000..f3e055a2d --- /dev/null +++ b/nftables/help/edit_direct_1.html @@ -0,0 +1,4 @@ +
Edit directly
+

Disable structured fields and edit the raw rule line.

+

Validation occurs on save.

+ diff --git a/nftables/help/goto.html b/nftables/help/goto.html new file mode 100644 index 000000000..359d15aad --- /dev/null +++ b/nftables/help/goto.html @@ -0,0 +1,4 @@ +
Goto target chain
+

Name of the chain to transfer control to.

+

Does not return to the calling chain.

+ diff --git a/nftables/help/icmp_type.html b/nftables/help/icmp_type.html new file mode 100644 index 000000000..5075fc230 --- /dev/null +++ b/nftables/help/icmp_type.html @@ -0,0 +1,5 @@ +
ICMP/ICMPv6 type
+

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.

+ diff --git a/nftables/help/iif.html b/nftables/help/iif.html new file mode 100644 index 000000000..ec848034c --- /dev/null +++ b/nftables/help/iif.html @@ -0,0 +1,3 @@ +
Incoming interface
+

Match the incoming interface name (e.g., eth0).

+ diff --git a/nftables/help/intro.html b/nftables/help/intro.html new file mode 100644 index 000000000..c3f054d6f --- /dev/null +++ b/nftables/help/intro.html @@ -0,0 +1,4 @@ +
Introduction
+

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.

+ diff --git a/nftables/help/jump.html b/nftables/help/jump.html new file mode 100644 index 000000000..606eb6b4c --- /dev/null +++ b/nftables/help/jump.html @@ -0,0 +1,4 @@ +
Jump target chain
+

Name of the chain to call.

+

Control returns to the next rule after the jump.

+ diff --git a/nftables/help/limit_burst.html b/nftables/help/limit_burst.html new file mode 100644 index 000000000..ae69c8c5f --- /dev/null +++ b/nftables/help/limit_burst.html @@ -0,0 +1,3 @@ +
Limit burst
+

Optional burst size in packets.

+ diff --git a/nftables/help/limit_rate.html b/nftables/help/limit_rate.html new file mode 100644 index 000000000..a97dbf28f --- /dev/null +++ b/nftables/help/limit_rate.html @@ -0,0 +1,3 @@ +
Limit rate
+

Rate limit (e.g., 10/second, 5/minute, 100/hour).

+ diff --git a/nftables/help/log.html b/nftables/help/log.html new file mode 100644 index 000000000..883acd066 --- /dev/null +++ b/nftables/help/log.html @@ -0,0 +1,4 @@ +
Logging
+

Add a log statement before the verdict.

+

Use prefix and level to customize.

+ diff --git a/nftables/help/log_1.html b/nftables/help/log_1.html new file mode 100644 index 000000000..883acd066 --- /dev/null +++ b/nftables/help/log_1.html @@ -0,0 +1,4 @@ +
Logging
+

Add a log statement before the verdict.

+

Use prefix and level to customize.

+ diff --git a/nftables/help/log_level.html b/nftables/help/log_level.html new file mode 100644 index 000000000..31aedcdcc --- /dev/null +++ b/nftables/help/log_level.html @@ -0,0 +1,3 @@ +
Log level
+

Common values: emerg, alert, crit, err, warning, notice, info, debug.

+ diff --git a/nftables/help/log_prefix.html b/nftables/help/log_prefix.html new file mode 100644 index 000000000..11a47084a --- /dev/null +++ b/nftables/help/log_prefix.html @@ -0,0 +1,3 @@ +
Log prefix
+

String prepended to the log message.

+ diff --git a/nftables/help/oif.html b/nftables/help/oif.html new file mode 100644 index 000000000..866acf123 --- /dev/null +++ b/nftables/help/oif.html @@ -0,0 +1,3 @@ +
Outgoing interface
+

Match the outgoing interface name (e.g., eth1).

+ diff --git a/nftables/help/proto.html b/nftables/help/proto.html new file mode 100644 index 000000000..1334a17b1 --- /dev/null +++ b/nftables/help/proto.html @@ -0,0 +1,7 @@ +
Protocol
+

Select a protocol to match.

+ +

Ports apply to TCP/UDP; ICMP uses the type field.

+ diff --git a/nftables/help/raw_rule.html b/nftables/help/raw_rule.html new file mode 100644 index 000000000..f2355b172 --- /dev/null +++ b/nftables/help/raw_rule.html @@ -0,0 +1,4 @@ +
Raw rule
+

Generated rule line.

+

In Edit directly mode, this is the rule that will be saved.

+ diff --git a/nftables/help/saddr.html b/nftables/help/saddr.html new file mode 100644 index 000000000..0fe37c0fd --- /dev/null +++ b/nftables/help/saddr.html @@ -0,0 +1,3 @@ +
Source address
+

IPv4/IPv6 address or CIDR (e.g., 192.168.1.0/24).

+ diff --git a/nftables/help/set_elements.html b/nftables/help/set_elements.html new file mode 100644 index 000000000..b6525d8d3 --- /dev/null +++ b/nftables/help/set_elements.html @@ -0,0 +1,3 @@ +
Set elements
+

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.

+ diff --git a/nftables/help/set_flags.html b/nftables/help/set_flags.html new file mode 100644 index 000000000..a42ef9e25 --- /dev/null +++ b/nftables/help/set_flags.html @@ -0,0 +1,3 @@ +
Set flags
+

Optional flags for the set, like interval or timeout. Use the same syntax as nftables, separated by spaces if multiple.

+ diff --git a/nftables/help/set_name.html b/nftables/help/set_name.html new file mode 100644 index 000000000..7dd30a64f --- /dev/null +++ b/nftables/help/set_name.html @@ -0,0 +1,3 @@ +
Set name
+

Unique name for the set within the table. Use letters, numbers, underscores, or dashes. Rules reference a set as @name.

+ diff --git a/nftables/help/set_type.html b/nftables/help/set_type.html new file mode 100644 index 000000000..3e952c2ce --- /dev/null +++ b/nftables/help/set_type.html @@ -0,0 +1,3 @@ +
Set type
+

Type of elements stored in the set, such as ipv4_addr, ipv6_addr, or inet_service. This must match the elements you enter.

+ diff --git a/nftables/help/sport.html b/nftables/help/sport.html new file mode 100644 index 000000000..ee9c8730e --- /dev/null +++ b/nftables/help/sport.html @@ -0,0 +1,3 @@ +
Source port
+

TCP/UDP source port number or range (e.g., 22 or 1000-2000).

+ diff --git a/nftables/help/tcp_flags.html b/nftables/help/tcp_flags.html new file mode 100644 index 000000000..4c591b2e4 --- /dev/null +++ b/nftables/help/tcp_flags.html @@ -0,0 +1,14 @@ +
TCP flags
+

Select one or more TCP flags to match.

+ +

Use the mask field for a bitmask match.

+ diff --git a/nftables/help/tcp_flags_mask.html b/nftables/help/tcp_flags_mask.html new file mode 100644 index 000000000..8857d6b18 --- /dev/null +++ b/nftables/help/tcp_flags_mask.html @@ -0,0 +1,4 @@ +
TCP flags mask
+

Optional mask used with tcp flags & mask == value.

+

Example mask: syn|rst.

+ diff --git a/nftables/images/icon.gif b/nftables/images/icon.gif new file mode 100644 index 000000000..650a15379 Binary files /dev/null and b/nftables/images/icon.gif differ diff --git a/nftables/index.cgi b/nftables/index.cgi new file mode 100755 index 000000000..545eb585f --- /dev/null +++ b/nftables/index.cgi @@ -0,0 +1,206 @@ +#!/usr/bin/perl +# index.cgi +# Display current nftables configuration + +require './nftables-lib.pl'; ## no critic +use strict; +use warnings; +our (%in, %text, %config); +ReadParse(); +my $partial = $in{'partial'}; +if (!$partial) { + ui_print_header(undef, $text{'index_title'}, "", "intro", 1, 1); +} + +# Check for nft command +my $cmd = $config{'nft_cmd'} || has_command("nft"); +if (!$cmd) { + print text('index_ecommand', "nft"); + if (!$partial) { + ui_print_footer("/", $text{'index'}); + } + exit; +} + +# Check if kernel supports it (basic check) +my $out = backquote_command("$cmd list ruleset 2>&1"); +if ($? && $out !~ /no ruleset/i) { + # If it fails and not just empty + print text('index_ekernel', "
$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"; + $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 "

\n"; + print text('index_change')," "; + print ui_select("table", $in{'table'}, \@table_opts, 1, 0, 1, 0, + "onchange='this.form.querySelector(\"[name=nft_submit]\").click()'"); + print ui_submit("", "nft_submit", 0, "style='display:none'"); + print "
\n"; + print ui_form_end(); + } + + # Identify current table + my $curr = $tables[$in{'table'}]; + + if ($curr) { + # Show sets + $rules_html .= ui_hr(); + $rules_html .= "$text{'index_sets'}
\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 .= "". + "\n"; + $ri++; + } + $rules_html_row .= "\n"; + $rules_html_row .= "
$rule_link$move
". + ui_link("edit_rule.cgi?table=$in{'table'}&chain=". + urlize($c)."&new=1", $text{'index_radd'}). + "
"; + } else { + $rules_html_row = "$text{'index_rules_none'}"; + $rules_html_row .= "
". + 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 "
\n"; +print $rules_html; +print "
\n"; + +if (@tables) { + print ui_hr(); + print ui_buttons_start(); + print ui_buttons_row("create_table.cgi", $text{'index_table_create'}, + $text{'index_table_createdesc'}); + print ui_buttons_row("apply.cgi", $text{'index_apply'}, $text{'index_applydesc'}); + print ui_buttons_end(); +} + +ui_print_footer("/", $text{'index'}); diff --git a/nftables/install_check.pl b/nftables/install_check.pl new file mode 100644 index 000000000..78dd5a6f9 --- /dev/null +++ b/nftables/install_check.pl @@ -0,0 +1,18 @@ +# install_check.pl +use strict; +use warnings; + +our %config; +do './nftables-lib.pl'; + +# is_installed(mode) +# For mode 1, returns 2 if the server is installed and configured for use by +# Webmin, 1 if installed but not configured, or 0 otherwise. +# For mode 0, returns 1 if installed, 0 if not +sub is_installed { + my ($mode) = @_; + +# Available config file in the default location? + return 0 if (!-x $config{'nft_cmd'}); + return $mode ? 2 : 0; +} diff --git a/nftables/lang/en b/nftables/lang/en new file mode 100644 index 000000000..de701347f --- /dev/null +++ b/nftables/lang/en @@ -0,0 +1,222 @@ +index_title=NFTables Firewall +index_editing=Rules file $1 +index_ecommand=The NFTables command $1 was not found on your system. +index_ekernel=An error occurred checking your current NFTables configuration: $1 +index_header=Existing NFTables Rules +index_change=Show table: +index_table_filter=Packet filtering +index_table_nat=Network address translation +index_table_mangle=Packet alteration +index_table_ok=Display table +index_chain=Chain $1 +index_action=Action +index_desc=Condition +index_comm=Comment +index_move=Move +index_add=Add +index_none=No rules defined for this chain. +index_policy=Set default action: +index_policy_accept=Accept +index_policy_drop=Drop +index_policy_queue=Userspace +index_policy_return=Return +index_chain_col=Chain +index_type=Type +index_hook=Hook +index_priority=Priority +index_policy_col=Policy +index_rules=Rules +index_rules_none=No rules +index_actions=Actions +index_sets=Sets +index_sets_none=No sets defined. +index_set_name=Name +index_set_type=Type +index_set_flags=Flags +index_set_elements=Elements +index_set_actions=Actions +index_set_create=Create set +index_set_createdesc=Add a new set to this table. +index_set_edit=Edit set +index_set_delete=Delete set +index_chain_create=Create chain +index_chain_createdesc=Add a new chain to this table. +index_cedit=Edit Chain +index_cdelete=Delete Chain +index_crename=Rename Chain +index_cclear=Clear All Rules +index_cdeletesel=Delete Selected +index_cmovesel=Move Selected +index_radd=Add Rule +index_apply=Apply Configuration +index_applydesc=Click this button to make the firewall configuration listed above active. Any current firewall rules will be flushed and replaced +index_unapply=Revert Configuration +index_unapplydesc=Click this button to reset the configuration listed above to the one that is currently active. +index_bootup=Activate at Boot +index_bootupdesc=Change whether this firewall is activated at boot time or not. +index_return=rules list +edit_title=Edit Rule +edit_header=Rule Details +edit_rule=Rule definition +create=Create +save=Save +delete=Delete +save_err=Failed to save rule +apply_err=Failed to apply configuration +setup_title=Setup Default Ruleset +setup_header=Create Default Ruleset +setup_desc=This page allows you to create a default nftables ruleset. Select one of the options below and click 'Create'. +setup_deny_note=Deny options will still allow SSH (port 22), Webmin (port $1), and localhost (loopback). +setup_allow_all=Allow all traffic +setup_deny_incoming=Deny all incoming traffic (except SSH and Webmin), allow all outgoing +setup_deny_all=Deny all traffic (except SSH and Webmin) +setup_create=Create +setup_invalid_type=Invalid ruleset type selected. +setup_failed=Failed to create default ruleset:
$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 "

$text{'setup_desc'}

"; +print "

",text('setup_deny_note', $webmin_port),"

"; + +print ui_form_start("setup.cgi"); +print ui_hidden("action", "create"); + +my @type_opts = ( + [ 'allow_all', $text{'setup_allow_all'} . "
" ], + [ '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 . All rights reserved. +# This program is free software; you can redistribute it and/or +# modify it under the same terms as Perl itself. + +package Convert::TNEF; + +use strict; +use integer; +use vars qw( + $VERSION + $TNEF_SIGNATURE + $TNEF_PURE + $LVL_MESSAGE + $LVL_ATTACHMENT + $errstr + $g_file_cnt + %dflts + %atp + %att + %att_name +); + +use Carp; +use IO::Wrap; +use File::Spec; +use MIME::Body; + +$VERSION = '0.18'; + +# Set some TNEF constants. Everything turned +# out to be in little endian order, so I just added +# 'reverse' everywhere that I needed to +# instead of reversing the hex codes. +$TNEF_SIGNATURE = reverse pack( 'H*', '223E9F78' ); +$TNEF_PURE = reverse pack( 'H*', '00010000' ); + +$LVL_MESSAGE = pack( 'H*', '01' ); +$LVL_ATTACHMENT = pack( 'H*', '02' ); + +%atp = ( + Triples => pack( 'H*', '0000' ), + String => pack( 'H*', '0001' ), + Text => pack( 'H*', '0002' ), + Date => pack( 'H*', '0003' ), + Short => pack( 'H*', '0004' ), + Long => pack( 'H*', '0005' ), + Byte => pack( 'H*', '0006' ), + Word => pack( 'H*', '0007' ), + Dword => pack( 'H*', '0008' ), + Max => pack( 'H*', '0009' ), +); + +for ( keys %atp ) { + $atp{$_} = reverse $atp{$_}; +} + +sub _ATT { + my ( $att, $id ) = @_; + return reverse($id) . $att; +} + +# The side comments are 'MAPI' equivalents +%att = ( + Null => _ATT( pack( 'H*', '0000' ), pack( 'H4', '0000' ) ), + # PR_ORIGINATOR_RETURN_ADDRESS + From => _ATT( $atp{Triples}, pack( 'H*', '8000' ) ), + # PR_SUBJECT + Subject => _ATT( $atp{String}, pack( 'H*', '8004' ) ), + # PR_CLIENT_SUBMIT_TIME + DateSent => _ATT( $atp{Date}, pack( 'H*', '8005' ) ), + # PR_MESSAGE_DELIVERY_TIME + DateRecd => _ATT( $atp{Date}, pack( 'H*', '8006' ) ), + # PR_MESSAGE_FLAGS + MessageStatus => _ATT( $atp{Byte}, pack( 'H*', '8007' ) ), + # PR_MESSAGE_CLASS + MessageClass => _ATT( $atp{Word}, pack( 'H*', '8008' ) ), + # PR_MESSAGE_ID + MessageID => _ATT( $atp{String}, pack( 'H*', '8009' ) ), + # PR_PARENT_ID + ParentID => _ATT( $atp{String}, pack( 'H*', '800A' ) ), + # PR_CONVERSATION_ID + ConversationID => _ATT( $atp{String}, pack( 'H*', '800B' ) ), + Body => _ATT( $atp{Text}, pack( 'H*', '800C' ) ), # PR_BODY + # PR_IMPORTANCE + Priority => _ATT( $atp{Short}, pack( 'H*', '800D' ) ), + # PR_ATTACH_DATA_xxx + AttachData => _ATT( $atp{Byte}, pack( 'H*', '800F' ) ), + # PR_ATTACH_FILENAME + AttachTitle => _ATT( $atp{String}, pack( 'H*', '8010' ) ), + # PR_ATTACH_RENDERING + AttachMetaFile => _ATT( $atp{Byte}, pack( 'H*', '8011' ) ), + # PR_CREATION_TIME + AttachCreateDate => _ATT( $atp{Date}, pack( 'H*', '8012' ) ), + # PR_LAST_MODIFICATION_TIME + AttachModifyDate => _ATT( $atp{Date}, pack( 'H*', '8013' ) ), + # PR_LAST_MODIFICATION_TIME + DateModified => _ATT( $atp{Date}, pack( 'H*', '8020' ) ), + #PR_ATTACH_TRANSPORT_NAME + AttachTransportFilename => _ATT( $atp{Byte}, pack( 'H*', '9001' ) ), + AttachRenddata => _ATT( $atp{Byte}, pack( 'H*', '9002' ) ), + MAPIProps => _ATT( $atp{Byte}, pack( 'H*', '9003' ) ), + # PR_MESSAGE_RECIPIENTS + RecipTable => _ATT( $atp{Byte}, pack( 'H*', '9004' ) ), + Attachment => _ATT( $atp{Byte}, pack( 'H*', '9005' ) ), + TnefVersion => _ATT( $atp{Dword}, pack( 'H*', '9006' ) ), + OemCodepage => _ATT( $atp{Byte}, pack( 'H*', '9007' ) ), + # PR_ORIG_MESSAGE_CLASS + OriginalMessageClass => _ATT( $atp{Word}, pack( 'H*', '0006' ) ), + + # PR_RCVD_REPRESENTING_xxx or PR_SENT_REPRESENTING_xxx + Owner => _ATT( $atp{Byte}, pack( 'H*', '0000' ) ), + # PR_SENT_REPRESENTING_xxx + SentFor => _ATT( $atp{Byte}, pack( 'H*', '0001' ) ), + # PR_RCVD_REPRESENTING_xxx + Delegate => _ATT( $atp{Byte}, pack( 'H*', '0002' ) ), + # PR_DATE_START + DateStart => _ATT( $atp{Date}, pack( 'H*', '0006' ) ), + DateEnd => _ATT( $atp{Date}, pack( 'H*', '0007' ) ), # PR_DATE_END + # PR_OWNER_APPT_ID + AidOwner => _ATT( $atp{Long}, pack( 'H*', '0008' ) ), + # PR_RESPONSE_REQUESTED + RequestRes => _ATT( $atp{Short}, pack( 'H*', '0009' ) ), +); + +# Create reverse lookup table +%att_name = reverse %att; + +# Global counter for creating file names +$g_file_cnt = 0; + +# Set some package global defaults for new objects +# which can be overridden for any individual object. +%dflts = ( + debug => 0, + debug_max_display => 1024, + debug_max_line_size => 64, + ignore_checksum => 0, + display_after_err => 32, + output_to_core => 4096, + output_dir => File::Spec->curdir, + output_prefix => "tnef", + buffer_size => 1024, +); + +# Make a file name +sub _mk_fname { + my $parms = shift; + File::Spec->catfile( $parms->{output_dir}, + $parms->{output_prefix} . "-" . $$ . "-" + . ++$g_file_cnt . ".doc" ); +} + +sub _rtn_err { + my ( $errmsg, $fh, $parms ) = @_; + $errstr = $errmsg; + if ( $parms->{debug} ) { + my $read_size = $parms->{display_after_err} || 32; + my $data; + $fh->read( $data, $read_size ); + print "Error: $errstr\n"; + print "Data:\n"; + print $1, "\n" while $data =~ + /([^\r\n]{0,$parms->{debug_max_line_size}})\r?\n?/g; + print "HData:\n"; + my $hdata = unpack( "H*", $data ); + print $1, "\n" + while $hdata =~ /(.{0,$parms->{debug_max_line_size}})/g; + } + return undef; +} + +sub _read_err { + my ( $bytes, $fh, $errmsg ) = @_; + $errstr = + ( defined $bytes ) ? "Premature EOF" : "Read Error:" . $errmsg; + return undef; +} + +sub read_ent { + croak "Usage: Convert::TNEF->read_ent(entity, parameters) " + unless @_ == 2 or @_ == 3; + my $self = shift; + my ( $ent, $parms ) = @_; + my $io = $ent->open("r") or do { + $errstr = "Can't open entity: $!"; + return undef; + }; + my $tnef = $self->read( $io, $parms ); + $io->close or do { + $errstr = "Error closing handle: $!"; + return undef; + }; + return $tnef; +} + +sub read_in { + croak "Usage: Convert::TNEF->read_in(filename, parameters) " + unless @_ == 2 or @_ == 3; + my $self = shift; + my ( $fname, $parms ) = @_; + open( INFILE, "<$fname" ) or do { + $errstr = "Can't open $fname: $!"; + return undef; + }; + binmode INFILE; + my $tnef = $self->read( \*INFILE, $parms ); + close INFILE or do { + $errstr = "Error closing $fname: $!"; + return undef; + }; + return $tnef; +} + +sub read { + croak "Usage: Convert::TNEF->read(fh, parameters) " + unless @_ == 2 or @_ == 3; + my $self = shift; + my $class = ref($self) || $self; + $self = {}; + bless $self, $class; + my ( $fd, $parms ) = @_; + $fd = wraphandle($fd); + + my %parms = %dflts; + @parms{ keys %$parms } = values %$parms if defined $parms; + $parms = \%parms; + my $debug = $parms{debug}; + my $ignore_checksum = $parms{ignore_checksum}; + + # Start of TNEF stream + my $data; + my $num_bytes = $fd->read( $data, 4 ); + return _read_err( $num_bytes, $fd, $! ) unless $num_bytes == 4; + print "TNEF start: ", unpack( "H*", $data ), "\n" if $debug; + return _rtn_err( "Not TNEF-encapsulated", $fd, $parms ) + unless $data eq $TNEF_SIGNATURE; + + # Key + $num_bytes = $fd->read( $data, 2 ); + return _read_err( $num_bytes, $fd, $! ) unless $num_bytes == 2; + print "TNEF key: ", unpack( "H*", $data ), "\n" if $debug; + + # Start of First Object + $num_bytes = $fd->read( $data, 1 ); + return _read_err( $num_bytes, $fd, $! ) unless $num_bytes == 1; + + my $msg_att = ""; + + my $is_msg = ( $data eq $LVL_MESSAGE ); + my $is_att = ( $data eq $LVL_ATTACHMENT ); + print "TNEF object start: ", unpack( "H*", $data ), "\n" if $debug; + return _rtn_err( "Neither a message nor an attachment", $fd, + $parms ) + unless $is_msg or $is_att; + + my $msg = Convert::TNEF::Data->new; + my @atts; + + # Current message or attachment in loop + my $ent = $msg; + + # Read message and attachments + LOOP: { + my $type = $is_msg ? 'message' : 'attachment'; + print "Reading $type attribute\n" if $debug; + $num_bytes = $fd->read( $data, 4 ); + return _read_err( $num_bytes, $fd, $! ) unless $num_bytes == 4; + my $att_id = $data; + my $att_name = $att_name{$att_id}; + + print "TNEF $type attribute: ", unpack( "H*", $data ), "\n" + if $debug; + return _rtn_err( "Bad Attribute found in $type", $fd, $parms ) + unless $att_name{$att_id}; + if ( $att_id eq $att{TnefVersion} ) { + return _rtn_err( "Version attribute found in attachment", $fd, + $parms ) + if $is_att; + } elsif ( $att_id eq $att{MessageClass} ) { + return _rtn_err( "MessageClass attribute found in attachment", + $fd, $parms ) + if $is_att; + } elsif ( $att_id eq $att{AttachRenddata} ) { + return _rtn_err( "AttachRenddata attribute found in message", + $fd, $parms ) + if $is_msg; + push @atts, ( $ent = Convert::TNEF::Data->new ); + } else { + return _rtn_err( "AttachRenddata must be first attribute", $fd, + $parms ) + if $is_att + and !@atts + and $att_name ne "AttachRenddata"; + } + print "Got attribute:$att_name{$att_id}\n" if $debug; + + $num_bytes = $fd->read( $data, 4 ); + return _read_err( $num_bytes, $fd, $! ) unless $num_bytes == 4; + + print "HLength:", unpack( "H8", $data ), "\n" if $debug; + my $length = unpack( "V", $data ); + print "Length: $length\n" if $debug; + + # Get the attribute data (returns an object since data may + # actually end up in a file) + my $calc_chksum; + $data = _build_data( $fd, $length, \$calc_chksum, $parms ) + or return undef; + _debug_print( $length, $att_id, $data, $parms ) if $debug; + $ent->datahandle( $att_name, $data, $length ); + + $num_bytes = $fd->read( $data, 2 ); + return _read_err( $num_bytes, $fd, $! ) unless $num_bytes == 2; + my $file_chksum = $data; + if ($debug) { + print "Calc Chksum:", unpack( "H*", $calc_chksum ), "\n"; + print "File Chksum:", unpack( "H*", $file_chksum ), "\n"; + } + return _rtn_err( "Bad Checksum", $fd, $parms ) + unless $calc_chksum eq $file_chksum + or $ignore_checksum; + + my $num_bytes = $fd->read( $data, 1 ); + + # EOF (0 bytes) is ok + return _read_err( $num_bytes, $fd, $! ) unless defined $num_bytes; + last LOOP if $num_bytes < 1; + print "Next token:", unpack( "H2", $data ), "\n" if $debug; + $is_msg = ( $data eq $LVL_MESSAGE ); + return _rtn_err( "Found message data in attachment", $fd, $parms ) + if $is_msg and $is_att; + $is_att = ( $data eq $LVL_ATTACHMENT ); + redo LOOP if $is_msg or $is_att; + return _rtn_err( "Not a TNEF $type", $fd, $parms ); + } + + print "EOF\n" if $debug; + + $self->{TN_Message} = $msg; + $self->{TN_Attachments} = \@atts; + return $self; +} + +sub _debug_print { + my ( $length, $att_id, $data, $parms ) = @_; + if ( $length < $parms->{debug_max_display} ) { + $data = $data->data; + if ( $att_id eq $att{TnefVersion} ) { + $data = unpack( "L", $data ); + print "Version: $data\n"; + } elsif ( substr( $att_id, 2 ) eq $atp{Date} and $length == 14 ) { + my ( $yr, $mo, $day, $hr, $min, $sec, $dow ) = + unpack( "vvvvvvv", $data ); + my $date = join ":", $yr, $mo, $day, $hr, $min, $sec, $dow; + print "Date: $date\n"; + print "HDate:", unpack( "H*", $data ), "\n"; + } elsif ( $att_id eq $att{AttachRenddata} and $length == 14 ) { + my ( $atyp, $ulPosition, $dxWidth, $dyHeight, $dwFlags ) = + unpack( "vVvvV", $data ); + $data = join ":", $atyp, $ulPosition, $dxWidth, $dyHeight, + $dwFlags; + print "AttachRendData: $data\n"; + } else { + print "Data:\n"; + print $1, "\n" while $data =~ + /([^\r\n]{0,$parms->{debug_max_line_size}})\r?\n?/g; + print "HData:\n"; + my $hdata = unpack( "H*", $data ); + print $1, "\n" + while $hdata =~ /(.{0,$parms->{debug_max_line_size}})/g; + } + } else { + my $io = $data->open("r") + or croak "Error opening attachment data handle: $!"; + my $buffer; + $io->read( $buffer, $parms->{debug_max_display} ); + $io->close or croak "Error closing attachment data handle: $!"; + print "Data:\n"; + print $1, "\n" while $buffer =~ + /([^\r\n]{0,$parms->{debug_max_line_size}})\r?\n?/sg; + print "HData:\n"; + my $hdata = unpack( "H*", $buffer ); + print $1, "\n" + while $hdata =~ /(.{0,$parms->{debug_max_line_size}})/g; + } +} + +sub _build_data { + my ( $fd, $length, $chksumref, $parms ) = @_; + my $cutoff = $parms->{output_to_core}; + my $incore = do { + if ( $cutoff eq 'NONE' ) { 0 } #Everything to files + elsif ( $cutoff eq 'ALL' ) { 1 } #Everything in memory + elsif ( $cutoff < $length ) { 0 } #Large items in files + else { 1 } #Everything else in memory + }; + + # Just borrow some other objects for the attachment attribute data + my $body = + ($incore) + ? new MIME::Body::Scalar + : new MIME::Body::File _mk_fname($parms); + $body->binmode(1); + my $io = $body->open("w"); + my $bufsiz = $parms->{buffer_size}; + $bufsiz = $length if $length < $bufsiz; + my $buffer; + my $chksum = 0; + + while ( $length > 0 ) { + my $num_bytes = $fd->read( $buffer, $bufsiz ); + return _read_err( $num_bytes, $fd, $! ) + unless $num_bytes == $bufsiz; + $io->print($buffer); + $chksum += unpack( "%16C*", $buffer ); + $chksum %= 65536; + $length -= $bufsiz; + $bufsiz = $length if $length < $bufsiz; + } + $$chksumref = pack( "v", $chksum ); + $io->close; + return $body; +} + +sub purge { + my $self = shift; + my $msg = $self->{TN_Message}; + my @atts = $self->attachments; + for ( keys %$msg ) { + $msg->{$_}->purge if exists $att{$_}; + } + for my $attch (@atts) { + for ( keys %$attch ) { + $attch->{$_}->purge if exists $att{$_}; + } + } +} + +sub message { + my $self = shift; + $self->{TN_Message}; +} + +sub attachments { + my $self = shift; + return @{ $self->{TN_Attachments} } if wantarray; + $self->{TN_Attachments}; +} + +# This is for Messages or Attachments +# since they are essentially the same thing except +# for the leading attribute code +package Convert::TNEF::Data; + +sub new { + my $proto = shift; + my $class = ref($proto) || $proto; + my $self = {}; + $self->{TN_Size} = {}; + bless $self, $class; +} + +sub data { + my $self = shift; + my $attr = shift || 'AttachData'; + return $self->{$attr} && $self->{$attr}->as_string; +} + +sub name { + my $self = shift; + my $attr = shift || 'AttachTitle'; + my $name = $self->{$attr} && $self->{$attr}->data; + $name =~ s/\x00+$// if $name; + return $name; +} + +# Try to get the long filename out of the +# 'Attachment' attribute. +sub longname { + my $self = shift; + + my $data = $self->data("Attachment"); + return unless $data; + my $pos = index( $data, pack( "H*", "1e00013001" ) ); + $pos = index( $data, pack( "H*", "1e00073701" ) ) if ($pos < 0); + return $self->name unless $pos >= 0; + my $len = unpack( "V", substr( $data, $pos + 8, 4 ) ); + my $longname = substr( $data, $pos + 12, $len ); + $longname =~ s/\x00+$// if $longname; + return $longname || $self->name; +} + +sub datahandle { + my $self = shift; + my $attr = shift || 'AttachData'; + $self->{$attr} = shift if @_; + $self->size( $attr, shift ) if @_; + return $self->{$attr}; +} + +sub size { + my $self = shift; + my $attr = shift || 'AttachData'; + $self->{TN_Size}->{$attr} = shift if @_; + return $self->{TN_Size}->{$attr}; +} + +# Autoload methods go after =cut, and are processed by the autosplit program. + +1; +__END__ + + +=head1 NAME + + Convert::TNEF - Perl module to read TNEF files + +=head1 SYNOPSIS + + use Convert::TNEF; + + $tnef = Convert::TNEF->read($iohandle, \%parms) + or die Convert::TNEF::errstr; + + $tnef = Convert::TNEF->read_in($filename, \%parms) + or die Convert::TNEF::errstr; + + $tnef = Convert::TNEF->read_ent($mime_entity, \%parms) + or die Convert::TNEF::errstr; + + $tnef->purge; + + $message = $tnef->message; + + @attachments = $tnef->attachments; + + $attribute_value = $attachments[$i]->data($att_attribute_name); + $attribute_value_size = $attachments[$i]->size($att_attribute_name); + $attachment_name = $attachments[$i]->name; + $long_attachment_name = $attachments[$i]->longname; + + $datahandle = $attachments[$i]->datahandle($att_attribute_name); + +=head1 DESCRIPTION + + TNEF stands for Transport Neutral Encapsulation Format, and if you've + ever been unfortunate enough to receive one of these files as an email + attachment, you may want to use this module. + + read() takes as its first argument any file handle open + for reading. The optional second argument is a hash reference + which contains one or more of the following keys: + +=head2 + + output_dir - Path for storing TNEF attribute data kept in files + (default: current directory). + + output_prefix - File prefix for TNEF attribute data kept in files + (default: 'tnef'). + + output_to_core - TNEF attribute data will be saved in core memory unless + it is greater than this many bytes (default: 4096). May also be set to + 'NONE' to keep all data in files, or 'ALL' to keep all data in core. + + buffer_size - Buffer size for reading in the TNEF file (default: 1024). + + debug - If true, outputs all sorts of info about what the read() function + is reading, including the raw ascii data along with the data converted + to hex (default: false). + + display_after_err - If debug is true and an error is encountered, + reads and displays this many bytes of data following the error + (default: 32). + + debug_max_display - If debug is true then read and display at most + this many bytes of data for each TNEF attribute (default: 1024). + + debug_max_line_size - If debug is true then at most this many bytes of + data will be displayed on each line for each TNEF attribute + (default: 64). + + ignore_checksum - If true, will ignore checksum errors while parsing + data (default: false). + + read() returns an object containing the TNEF 'attributes' read from the + file and the data for those attributes. If all you want are the + attachments, then this is mostly garbage, but if you're interested then + you can see all the garbage by turning on debugging. If the garbage + proves useful to you, then let me know how I can maybe make it more + useful. + + If an error is encountered, an undefined value is returned and the + package variable $errstr is set to some helpful message. + + read_in() is a convienient front end for read() which takes a filename + instead of a handle. + + read_ent() is another convient front end for read() which can take a + MIME::Entity object (or any object with like methods, specifically + open("r"), read($buff,$num_bytes), and close ). + + purge() deletes any on-disk data that may be in the attachments of + the TNEF object. + + message() returns the message portion of the tnef object, if any. + The thing it returns is like an attachment, but its not an attachment. + For instance, it more than likely does not have a name or any + attachment data. + + attachments() returns a list of the attachments that the given TNEF + object contains. Returns a list ref if not called in array context. + + data() takes a TNEF attribute name, and returns a string value for that + attribute for that attachment. Its your own problem if the string is too + big for memory. If no argument is given, then the 'AttachData' attribute + is assumed, which is probably the attachment data you're looking for. + + name() is the same as data(), except the attribute 'AttachTitle' is + the default, which returns the 8 character + 3 character extension name + of the attachment. + + longname() returns the long filename and extension of an attachment. This + is embedded within a MAPI property of the 'Attachment' attribute data, so + we attempt to extract the name out of that. + + size() takes an TNEF attribute name, and returns the size in bytes for + the data for that attachment attribute. + + datahandle() is a method for attachments which takes a TNEF attribute + name, and returns the data for that attribute as a handle which is + the same as a MIME::Body handle. See MIME::Body for all the applicable + methods. If no argument is given, then 'AttachData' is assumed. + + +=head1 EXAMPLES + + # Here's a rather long example where mail is retrieved + # from a POP3 server based on header information, then + # it is MIME parsed, and then the TNEF contents + # are extracted and converted. + + use strict; + use Net::POP3; + use MIME::Parser; + use Convert::TNEF; + + my $mail_dir = "mailout"; + my $mail_prefix = "mail"; + + my $pop = new Net::POP3 ( "pop3server_name" ); + my $num_msgs = $pop->login("user_name","password"); + die "Can't login: $!" unless defined $num_msgs; + + # Get mail by sender and subject + my $mail_out_idx = 0; + MESSAGE: for ( my $i=1; $i<= $num_msgs; $i++ ) { + my $header = join "", @{$pop->top($i)}; + + for ($header) { + next MESSAGE unless + /^from:.*someone\@somewhere.net/im && + /^subject:\s*important stuff/im + } + + my $fname = $mail_prefix."-".$$.++$mail_out_idx.".doc"; + open (MAILOUT, ">$mail_dir/$fname") + or die "Can't open $mail_dir/$fname: $!"; + # If the get() complains, you need the new libnet bundle + $pop->get($i, \*MAILOUT) or die "Can't read mail"; + close MAILOUT or die "Error closing $mail_dir/$fname"; + # If you want to delete the mail on the server + # $pop->delete($i); + } + + close MAILOUT; + $pop->quit(); + + # Parse the mail message into separate mime entities + my $parser=new MIME::Parser; + $parser->output_dir("mimemail"); + + opendir(DIR, $mail_dir) or die "Can't open directory $mail_dir: $!"; + my @files = map { $mail_dir."/".$_ } sort + grep { -f "$mail_dir/$_" and /$mail_prefix-$$-/o } readdir DIR; + closedir DIR; + + for my $file ( @files ) { + my $entity=$parser->parse_in($file) or die "Couldn't parse mail"; + print_tnef_parts($entity); + # If you want to delete the working files + # $entity->purge; + } + + sub print_tnef_parts { + my $ent = shift; + + if ( $ent->parts ) { + for my $sub_ent ( $ent->parts ) { + print_tnef_parts($sub_ent); + } + } elsif ( $ent->mime_type =~ /ms-tnef/i ) { + + # Create a tnef object + my $tnef = Convert::TNEF->read_ent($ent,{output_dir=>"tnefmail"}) + or die $Convert::TNEF::errstr; + for ($tnef->attachments) { + print "Title:",$_->name,"\n"; + print "Data:\n",$_->data,"\n"; + } + + # If you want to delete the working files + # $tnef->purge; + } + } + +=head1 SEE ALSO + +perl(1), IO::Wrap(3), MIME::Parser(3), MIME::Entity(3), MIME::Body(3) + +=head1 CAVEATS + + The parsing may depend on the endianness (see perlport) and width of + integers on the system where the TNEF file was created. If this proves + to be the case (check the debug output), I'll see what I can do + about it. + +=head1 AUTHOR + + Douglas Wilson, dougw@cpan.org + +=cut + diff --git a/vendor_perl/MIME/Body.pm b/vendor_perl/MIME/Body.pm new file mode 100644 index 000000000..c4a84a91d --- /dev/null +++ b/vendor_perl/MIME/Body.pm @@ -0,0 +1,672 @@ +package MIME::Body; + +=head1 NAME + +MIME::Body - the body of a MIME message + + +=head1 SYNOPSIS + +Before reading further, you should see L to make sure that +you understand where this module fits into the grand scheme of things. +Go on, do it now. I'll wait. + +Ready? Ok... + + +=head2 Obtaining bodies + + ### Get the bodyhandle of a MIME::Entity object: + $body = $entity->bodyhandle; + + ### Create a body which stores data in a disk file: + $body = new MIME::Body::File "/path/to/file"; + + ### Create a body which stores data in an in-core array: + $body = new MIME::Body::InCore \@strings; + + +=head2 Opening, closing, and using IO handles + + ### Write data to the body: + $IO = $body->open("w") || die "open body: $!"; + $IO->print($message); + $IO->close || die "close I/O handle: $!"; + + ### Read data from the body (in this case, line by line): + $IO = $body->open("r") || die "open body: $!"; + while (defined($_ = $IO->getline)) { + ### do stuff + } + $IO->close || die "close I/O handle: $!"; + + +=head2 Other I/O + + ### Dump the ENCODED body data to a filehandle: + $body->print(\*STDOUT); + + ### Slurp all the UNENCODED data in, and put it in a scalar: + $string = $body->as_string; + + ### Slurp all the UNENCODED data in, and put it in an array of lines: + @lines = $body->as_lines; + + +=head2 Working directly with paths to underlying files + + ### Where's the data? + if (defined($body->path)) { ### data is on disk: + print "data is stored externally, in ", $body->path; + } + else { ### data is in core: + print "data is already in core, and is...\n", $body->as_string; + } + + ### Get rid of anything on disk: + $body->purge; + + +=head1 DESCRIPTION + +MIME messages can be very long (e.g., tar files, MPEGs, etc.) or very +short (short textual notes, as in ordinary mail). Long messages +are best stored in files, while short ones are perhaps best stored +in core. + +This class is an attempt to define a common interface for objects +which contain message data, regardless of how the data is +physically stored. The lifespan of a "body" object +usually looks like this: + +=over 4 + +=item 1. + +B +It's at this point that the actual MIME::Body subclass is chosen, +and new() is invoked. (For example: if the body data is going to +a file, then it is at this point that the class MIME::Body::File, +and the filename, is chosen). + +=item 2. + +B (usually by the MIME parser) like this: +The body is opened for writing, via C. This will trash any +previous contents, and return an "I/O handle" opened for writing. +Data is written to this I/O handle, via print(). +Then the I/O handle is closed, via close(). + +=item 3. + +B (usually by the user application) like this: +The body is opened for reading by a user application, via C. +This will return an "I/O handle" opened for reading. +Data is read from the I/O handle, via read(), getline(), or getlines(). +Then the I/O handle is closed, via close(). + +=item 4. + +B + +=back + +You can write your own subclasses, as long as they follow the +interface described below. Implementers of subclasses should assume +that steps 2 and 3 may be repeated any number of times, and in +different orders (e.g., 1-2-2-3-2-3-3-3-3-3-2-4). + +In any case, once a MIME::Body has been created, you ask to open it +for reading or writing, which gets you an "i/o handle": you then use +the same mechanisms for reading from or writing to that handle, no matter +what class it is. + +Beware: unless you know for certain what kind of body you have, you +should I assume that the body has an underlying filehandle. + + +=head1 PUBLIC INTERFACE + +=over 4 + +=cut + + +### Pragmas: +use strict; +use vars qw($VERSION); + +### System modules: +use Carp; +use IO::File; + +### The package version, both in 1.23 style *and* usable by MakeMaker: +$VERSION = "5.517"; + + +#------------------------------ + +=item new ARGS... + +I +Create a new body. Any ARGS are sent to init(). + +=cut + +sub new { + my $self = bless {}, shift; + $self->init(@_); + $self; +} + +#------------------------------ + +=item init ARGS... + +I +This is called automatically by C, with the arguments given +to C. The arguments are optional, and entirely up to the +subclass. The default method does nothing, + +=cut + +sub init { 1 } + +#------------------------------ + +=item as_lines + +I +Return the contents of the body as an array of lines (each terminated +by a newline, with the possible exception of the final one). +Returns empty on failure (NB: indistinguishable from an empty body!). + +Note: the default method gets the data via +repeated getline() calls; your subclass might wish to override this. + +=cut + +sub as_lines { + my $self = shift; + my @lines; + my $io = $self->open("r") || return (); + local $_; + push @lines, $_ while (defined($_ = $io->getline())); + $io->close; + @lines; +} + +#------------------------------ + +=item as_string + +I +Return the body data as a string (slurping it into core if necessary). +Best not to do this unless you're I that the body is reasonably small! +Returns empty string for an empty body, and undef on failure. + +Note: the default method uses print(), which gets the data via +repeated read() calls; your subclass might wish to override this. + +=cut + +sub as_string { + my $self = shift; + my $str = ''; + my $fh = IO::File->new(\$str, '>:') or croak("Cannot open in-memory file: $!"); + $self->print($fh); + close($fh); + return $str; +} +*data = \&as_string; ### silently invoke preferred usage + + +#------------------------------ + +=item binmode [ONOFF] + +I +With argument, flags whether or not open() should return an I/O handle +which has binmode() activated. With no argument, just returns the +current value. + +=cut + +sub binmode { + my ($self, $onoff) = @_; + $self->{MB_Binmode} = $onoff if (@_ > 1); + $self->{MB_Binmode}; +} + +#------------------------------ + +=item is_encoded [ONOFF] + +I +If set to yes, no decoding is applied on output. This flag is set +by MIME::Parser, if the parser runs in decode_bodies(0) mode, so the +content is handled unmodified. + +=cut + +sub is_encoded { + my ($self, $yesno) = @_; + $self->{MB_IsEncoded} = $yesno if (@_ > 1); + $self->{MB_IsEncoded}; +} + +#------------------------------ + +=item dup + +I +Duplicate the bodyhandle. + +I external data in bodyhandles is I copied to new files! +Changing the data in one body's data file, or purging that body, +I affect its duplicate. Bodies with in-core data probably need +not worry. + +=cut + +sub dup { + my $self = shift; + bless { %$self }, ref($self); ### shallow copy ok for ::File and ::Scalar +} + +#------------------------------ + +=item open READWRITE + +I +This should do whatever is necessary to open the body for either +writing (if READWRITE is "w") or reading (if mode is "r"). + +This method is expected to return an "I/O handle" object on success, +and undef on error. An I/O handle can be any object that supports a +small set of standard methods for reading/writing data. +See the IO::Handle class for an example. + +=cut + +sub open { + undef; +} + +#------------------------------ + +=item path [PATH] + +I +If you're storing the body data externally (e.g., in a disk file), you'll +want to give applications the ability to get at that data, for cleanup. +This method should return the path to the data, or undef if there is none. + +Where appropriate, the path I be a simple string, like a filename. +With argument, sets the PATH, which should be undef if there is none. + +=cut + +sub path { + my $self = shift; + $self->{MB_Path} = shift if @_; + $self->{MB_Path}; +} + +#------------------------------ + +=item print FILEHANDLE + +I +Output the body data to the given filehandle, or to the currently-selected +one if none is given. + +=cut + +sub print { + my ($self, $fh) = @_; + my $nread; + + ### Get output filehandle, and ensure that it's a printable object: + $fh ||= select; + + ### Write it: + my $buf = ''; + my $io = $self->open("r") || return undef; + $fh->print($buf) while ($nread = $io->read($buf, 8192)); + $io->close; + return defined($nread); ### how'd we do? +} + +#------------------------------ + +=item purge + +I +Remove any data which resides external to the program (e.g., in disk files). +Immediately after a purge(), the path() should return undef to indicate +that the external data is no longer available. + +=cut + +sub purge { + 1; +} + + + +=back + +=head1 SUBCLASSES + +The following built-in classes are provided: + + Body Stores body When open()ed, + class: data in: returns: + -------------------------------------------------------- + MIME::Body::File disk file IO::Handle + MIME::Body::Scalar scalar IO::Handle + MIME::Body::InCore scalar array IO::Handle + +=cut + + +#------------------------------------------------------------ +package MIME::Body::File; +#------------------------------------------------------------ + +=head2 MIME::Body::File + +A body class that stores the data in a disk file. Invoke the +constructor as: + + $body = new MIME::Body::File "/path/to/file"; + +In this case, the C method would return the given path, +so you I say: + + if (defined($body->path)) { + open BODY, $body->path or die "open: $!"; + while () { + ### do stuff + } + close BODY; + } + +But you're best off not doing this. + +=cut + + +### Pragmas: +use vars qw(@ISA); +use strict; + +### System modules: +use IO::File; + +### Kit modules: +use MIME::Tools qw(whine); + +@ISA = qw(MIME::Body); + + +#------------------------------ +# init PATH +#------------------------------ +sub init { + my ($self, $path) = @_; + $self->path($path); ### use it as-is + $self; +} + +#------------------------------ +# open READWRITE +#------------------------------ +sub open { + my ($self, $mode) = @_; + + my $path = $self->path; + + if( $mode ne 'r' && $mode ne 'w' ) { + die "bad mode: '$mode'"; + } + + my $IO = IO::File->new($path, $mode) || die "MIME::Body::File->open $path: $!"; + + $IO->binmode() if $self->binmode; + + return $IO; +} + +#------------------------------ +# purge +#------------------------------ +# Unlink the path (and undefine it). +# +sub purge { + my $self = shift; + if (defined($self->path)) { + unlink $self->path or whine "couldn't unlink ".$self->path.": $!"; + $self->path(undef); + } + 1; +} + + + + +#------------------------------------------------------------ +package MIME::Body::Scalar; +#------------------------------------------------------------ + +=head2 MIME::Body::Scalar + +A body class that stores the data in-core, in a simple scalar. +Invoke the constructor as: + + $body = new MIME::Body::Scalar \$string; + +A single scalar argument sets the body to that value, exactly as though +you'd opened for the body for writing, written the value, +and closed the body again: + + $body = new MIME::Body::Scalar "Line 1\nLine 2\nLine 3"; + +A single array reference sets the body to the result of joining all the +elements of that array together: + + $body = new MIME::Body::Scalar ["Line 1\n", + "Line 2\n", + "Line 3"]; + +=cut + +use vars qw(@ISA); +use strict; + +use Carp; + +@ISA = qw(MIME::Body); + + +#------------------------------ +# init DATA +#------------------------------ +sub init { + my ($self, $data) = @_; + $data = join('', @$data) if (ref($data) && (ref($data) eq 'ARRAY')); + $self->{MBS_Data} = (defined($data) ? $data : ''); + $self; +} + +#------------------------------ +# as_string +#------------------------------ +sub as_string { + shift->{MBS_Data}; +} + +#------------------------------ +# open READWRITE +#------------------------------ +sub open { + my ($self, $mode) = @_; + $self->{MBS_Data} = '' if ($mode eq 'w'); ### writing + + if ($mode eq 'w') { + $mode = '>:'; + } elsif ($mode eq 'r') { + $mode = '<:'; + } else { + die "bad mode: $mode"; + } + + return IO::File->new(\ $self->{MBS_Data}, $mode); +} + + + + + +#------------------------------------------------------------ +package MIME::Body::InCore; +#------------------------------------------------------------ + +=head2 MIME::Body::InCore + +A body class that stores the data in-core. +Invoke the constructor as: + + $body = new MIME::Body::InCore \$string; + $body = new MIME::Body::InCore $string; + $body = new MIME::Body::InCore \@stringarray + +A simple scalar argument sets the body to that value, exactly as though +you'd opened for the body for writing, written the value, +and closed the body again: + + $body = new MIME::Body::InCore "Line 1\nLine 2\nLine 3"; + +A single array reference sets the body to the concatenation of all +scalars that it holds: + + $body = new MIME::Body::InCore ["Line 1\n", + "Line 2\n", + "Line 3"]; + +=cut + +use vars qw(@ISA); +use strict; + +use Carp; + +@ISA = qw(MIME::Body::Scalar); + + +#------------------------------ +# init DATA +#------------------------------ +sub init { + my ($self, $data) = @_; + if (!defined($data)) { ### nothing + $self->{MBS_Data} = ''; + } + elsif (!ref($data)) { ### simple scalar + $self->{MBS_Data} = $data; + } + elsif (ref($data) eq 'SCALAR') { + $self->{MBS_Data} = $$data; + } + elsif (ref($data) eq 'ARRAY') { + $self->{MBS_Data} = join('', @$data); + } + else { + croak "I can't handle DATA which is a ".ref($data)."\n"; + } + $self; +} + +1; +__END__ + + +#------------------------------ + +=head2 Defining your own subclasses + +So you're not happy with files and scalar-arrays? +No problem: just define your own MIME::Body subclass, and make a subclass +of MIME::Parser or MIME::ParserBase which returns an instance of your +body class whenever appropriate in the C method. + +Your "body" class must inherit from MIME::Body (or some subclass of it), +and it must either provide (or inherit the default for) the following +methods... + +The default inherited method I for all these: + + new + binmode [ONOFF] + path + +The default inherited method I for these, but perhaps +there's a better implementation for your subclass. + + init ARGS... + as_lines + as_string + dup + print + purge + +The default inherited method I for these: + + open + + + +=head1 NOTES + +One reason I didn't just use IO::Handle objects for message bodies was +that I wanted a "body" object to be a form of completely encapsulated +program-persistent storage; that is, I wanted users to be able to write +code like this... + + ### Get body handle from this MIME message, and read its data: + $body = $entity->bodyhandle; + $IO = $body->open("r"); + while (defined($_ = $IO->getline)) { + print STDOUT $_; + } + $IO->close; + +...without requiring that they know anything more about how the +$body object is actually storing its data (disk file, scalar variable, +array variable, or whatever). + +Storing the body of each MIME message in a persistently-open +IO::Handle was a possibility, but it seemed like a bad idea, +considering that a single multipart MIME message could easily suck up +all the available file descriptors on some systems. This risk increases +if the user application is processing more than one MIME entity at a time. + +=head1 SEE ALSO + +L + +=head1 AUTHOR + +Eryq (F), ZeeGee Software Inc (F). +Dianne Skoll (F) + +All rights reserved. This program is free software; you can redistribute +it and/or modify it under the same terms as Perl itself. + +Thanks to Achim Bohnet for suggesting that MIME::Parser not be restricted +to the use of FileHandles. + +#------------------------------ +1; + diff --git a/vendor_perl/MIME/Tools.pm b/vendor_perl/MIME/Tools.pm new file mode 100644 index 000000000..e250a18a9 --- /dev/null +++ b/vendor_perl/MIME/Tools.pm @@ -0,0 +1,1043 @@ +package MIME::Tools; + +#------------------------------ +# Because the POD documentation is pretty extensive, it follows +# the __END__ statement below... +#------------------------------ + +use strict; +use vars (qw(@ISA %CONFIG @EXPORT_OK %EXPORT_TAGS $VERSION $ME + $M_DEBUG $M_WARNING $M_ERROR )); + +require Exporter; +use IO::File; +use File::Temp 0.18 (); +use Carp; + +$ME = "MIME-tools"; + +@ISA = qw(Exporter); + +# Exporting (importing should only be done by modules in this toolkit!): +%EXPORT_TAGS = ( + 'config' => [qw(%CONFIG)], + 'msgs' => [qw(usage debug whine error)], + 'msgtypes'=> [qw($M_DEBUG $M_WARNING $M_ERROR)], + 'utils' => [qw(textual_type tmpopen )], + ); +Exporter::export_ok_tags('config', 'msgs', 'msgtypes', 'utils'); + +# The TOOLKIT version, both in 1.23 style *and* usable by MakeMaker: +$VERSION = "5.517"; + +# Configuration (do NOT alter this directly)... +# All legal CONFIG vars *must* be in here, even if only to be set to undef: +%CONFIG = + ( + DEBUGGING => 0, + QUIET => 1, + ); + +# Message-logging constants: +$M_DEBUG = 'debug'; +$M_WARNING = 'warning'; +$M_ERROR = 'error'; + + + +#------------------------------ +# +# CONFIGURATION... (see below) +# +#------------------------------ + +sub config { + my $class = shift; + usage("config() is obsolete"); + + # No args? Just return list: + @_ or return keys %CONFIG; + my $method = lc(shift); + return $class->$method(@_); +} + +sub debugging { + my ($class, $value) = @_; + $CONFIG{'DEBUGGING'} = $value if (@_ > 1); + return $CONFIG{'DEBUGGING'}; +} + +sub quiet { + my ($class, $value) = @_; + $CONFIG{'QUIET'} = $value if (@_ > 1); + return $CONFIG{'QUIET'}; +} + +sub version { + my ($class, $value) = @_; + return $VERSION; +} + + + +#------------------------------ +# +# MESSAGES... +# +#------------------------------ + +#------------------------------ +# +# debug MESSAGE... +# +# Function, private. +# Output a debug message. +# +sub debug { + print STDERR "$ME: $M_DEBUG: ", @_, "\n" if $CONFIG{DEBUGGING}; +} + +#------------------------------ +# +# whine MESSAGE... +# +# Function, private. +# Something doesn't look right: issue a warning. +# Only output if $^W (-w) is true, and we're not being QUIET. +# +sub whine { + my $msg = "$ME: $M_WARNING: ".join('', @_)."\n"; + warn $msg if ($^W && !$CONFIG{QUIET}); + return (wantarray ? () : undef); +} + +#------------------------------ +# +# error MESSAGE... +# +# Function, private. +# Something failed, but not so badly that we want to throw an +# exception. Just report our general unhappiness. +# Only output if $^W (-w) is true, and we're not being QUIET. +# +sub error { + my $msg = "$ME: $M_ERROR: ".join('', @_)."\n"; + warn $msg if ($^W && !$CONFIG{QUIET}); + return (wantarray ? () : undef); +} + +#------------------------------ +# +# usage MESSAGE... +# +# Register unhappiness about usage. +# +sub usage { + my ( $p, $f, $l, $s) = caller(1); + my ($cp, $cf, $cl, $cs) = caller(2); + my $msg = join('', (($s =~ /::/) ? "$s() " : "${p}::$s() "), @_, "\n"); + my $loc = ($cf ? "\tin code called from $cf l.$cl" : ''); + + warn "$msg$loc\n" if ($^W && !$CONFIG{QUIET}); + return (wantarray ? () : undef); +} + + + +#------------------------------ +# +# UTILS... +# +#------------------------------ + +#------------------------------ +# +# textual_type MIMETYPE +# +# Function. Does the given MIME type indicate a textlike document? +# +sub textual_type { + ($_[0] =~ m{^(text|message)(/|\Z)}i); +} + +#------------------------------ +# +# tmpopen +# +# +sub tmpopen +{ + my ($args) = @_; + $args ||= {}; + return File::Temp->new( %{$args} ); +} + +#------------------------------ +1; +__END__ + + +=head1 NAME + +MIME-tools - modules for parsing (and creating!) MIME entities + + +=head1 SYNOPSIS + +Here's some pretty basic code for B and outputting +its decoded components to a given directory: + + use MIME::Parser; + + ### Create parser, and set some parsing options: + my $parser = new MIME::Parser; + $parser->output_under("$ENV{HOME}/mimemail"); + + ### Parse input: + $entity = $parser->parse(\*STDIN) or die "parse failed\n"; + + ### Take a look at the top-level entity (and any parts it has): + $entity->dump_skeleton; + + +Here's some code which B containing +three parts: a text file, an attached GIF, and some more text: + + use MIME::Entity; + + ### Create the top-level, and set up the mail headers: + $top = MIME::Entity->build(Type =>"multipart/mixed", + From => "me\@myhost.com", + To => "you\@yourhost.com", + Subject => "Hello, nurse!"); + + ### Part #1: a simple text document: + $top->attach(Path=>"./testin/short.txt"); + + ### Part #2: a GIF file: + $top->attach(Path => "./docs/mime-sm.gif", + Type => "image/gif", + Encoding => "base64"); + + ### Part #3: some literal text: + $top->attach(Data=>$message); + + ### Send it: + open MAIL, "| /usr/lib/sendmail -t -oi -oem" or die "open: $!"; + $top->print(\*MAIL); + close MAIL; + + +For more examples, look at the scripts in the B directory +of the MIME-tools distribution. + + + +=head1 DESCRIPTION + +MIME-tools is a collection of Perl5 MIME:: modules for parsing, decoding, +I single- or multipart (even nested multipart) MIME +messages. (Yes, kids, that means you can send messages with attached +GIF files). + + +=head1 REQUIREMENTS + +You will need the following installed on your system: + + File::Path + File::Spec + IPC::Open2 (optional) + MIME::Base64 + MIME::QuotedPrint + Net::SMTP + Mail::Internet, ... from the MailTools distribution. + +See the Makefile.PL in your distribution for the most-comprehensive +list of prerequisite modules and their version numbers. + + +=head1 A QUICK TOUR + +=head2 Overview of the classes + +Here are the classes you'll generally be dealing with directly: + + + (START HERE) results() .-----------------. + \ .-------->| MIME:: | + .-----------. / | Parser::Results | + | MIME:: |--' `-----------------' + | Parser |--. .-----------------. + `-----------' \ filer() | MIME:: | + | parse() `-------->| Parser::Filer | + | gives you `-----------------' + | a... | output_path() + | | determines + | | path() of... + | head() .--------. | + | returns... | MIME:: | get() | + V .-------->| Head | etc... | + .--------./ `--------' | + .---> | MIME:: | | + `-----| Entity | .--------. | + parts() `--------'\ | MIME:: | / + returns `-------->| Body |<---------' + sub-entities bodyhandle() `--------' + (if any) returns... | open() + | returns... + | + V + .--------. read() + | IO:: | getline() + | Handle | print() + `--------' etc... + + +To illustrate, parsing works this way: + +=over 4 + +=item * + +B +A parser is an instance of C. +You hand it an input stream (like a filehandle) to parse a message from: +if the parse is successful, the result is an "entity". + +=item * + +B +An entity is an instance of C (a subclass of C). +If the message had "parts" (e.g., attachments), then those parts +are "entities" as well, contained inside the top-level entity. +Each entity has a "head" and a "body". + +=item * + +B +A "head" is an instance of C (a subclass of C). +It contains information from the message header: content type, +sender, subject line, etc. + +=item * + +B +You can ask to "open" this data source for I or I, +and you will get back an "I/O handle". + +=item * + +B +This handle is an object that is basically like an IO::Handle... it +can be any class, so long as it supports a small, standard set of +methods for reading from or writing to the underlying data source. + +=back + +A typical multipart message containing two parts -- a textual greeting +and an "attached" GIF file -- would be a tree of MIME::Entity objects, +each of which would have its own MIME::Head. Like this: + + .--------. + | MIME:: | Content-type: multipart/mixed + | Entity | Subject: Happy Samhaine! + `--------' + | + `----. + parts | + | .--------. + |---| MIME:: | Content-type: text/plain; charset=us-ascii + | | Entity | Content-transfer-encoding: 7bit + | `--------' + | .--------. + |---| MIME:: | Content-type: image/gif + | Entity | Content-transfer-encoding: base64 + `--------' Content-disposition: inline; + filename="hs.gif" + + + +=head2 Parsing messages + +You usually start by creating an instance of B +and setting up certain parsing parameters: what directory to save +extracted files to, how to name the files, etc. + +You then give that instance a readable filehandle on which waits a +MIME message. If all goes well, you will get back a B +object (a subclass of B), which consists of... + +=over 4 + +=item * + +A B (a subclass of B) which holds the MIME +header data. + +=item * + +A B, which is a object that knows where the body data is. +You ask this object to "open" itself for reading, and it +will hand you back an "I/O handle" for reading the data: this could be +of any class, so long as it conforms to a subset of the B +interface. + +=back + +If the original message was a multipart document, the MIME::Entity +object will have a non-empty list of "parts", each of which is in +turn a MIME::Entity (which might also be a multipart entity, etc, +etc...). + +Internally, the parser (in MIME::Parser) asks for instances +of B whenever it needs to decode an encoded file. +MIME::Decoder has a mapping from supported encodings (e.g., 'base64') +to classes whose instances can decode them. You can add to this mapping +to try out new/experiment encodings. You can also use +MIME::Decoder by itself. + + +=head2 Composing messages + +All message composition is done via the B class. +For single-part messages, you can use the B +constructor to create MIME entities very easily. + +For multipart messages, you can start by creating a top-level +C entity with B, and then use +the similar B method to attach parts to +that message. I what most people think of as +"a text message with an attached GIF file" is I a multipart +message with 2 parts: the first being the text message, and the +second being the GIF file. + +When building MIME a entity, you'll have to provide two very important +pieces of information: the I and the +I. The type is usually easy, as it is directly +determined by the file format; e.g., an HTML file is C. +The encoding, however, is trickier... for example, some HTML files are +C<7bit>-compliant, but others might have very long lines and would need to be +sent C for reliability. + +See the section on encoding/decoding for more details, as well as +L<"A MIME PRIMER"> below. + + +=head2 Sending email + +Since MIME::Entity inherits directly from Mail::Internet, +you can use the normal Mail::Internet mechanisms to send +email. For example, + + $entity->smtpsend; + + + +=head2 Encoding/decoding support + +The B class can be used to I as well; this is done +when printing MIME entities. All the standard encodings are supported +(see L<"A MIME PRIMER"> below for details): + + Encoding: | Normally used when message contents are: + ------------------------------------------------------------------- + 7bit | 7-bit data with under 1000 chars/line, or multipart. + 8bit | 8-bit data with under 1000 chars/line. + binary | 8-bit data with some long lines (or no line breaks). + quoted-printable | Text files with some 8-bit chars (e.g., Latin-1 text). + base64 | Binary files. + +Which encoding you choose for a given document depends largely on +(1) what you know about the document's contents (text vs binary), and +(2) whether you need the resulting message to have a reliable encoding +for 7-bit Internet email transport. + +In general, only C and C guarantee reliable +transport of all data; the other three "no-encoding" encodings simply +pass the data through, and are only reliable if that data is 7bit ASCII +with under 1000 characters per line, and has no conflicts with the +multipart boundaries. + +I've considered making it so that the content-type and encoding +can be automatically inferred from the file's path, but that seems +to be asking for trouble... or at least, for Mail::Cap... + + + +=head2 Message-logging + +MIME-tools is a large and complex toolkit which tries to deal with +a wide variety of external input. It's sometimes helpful to see +what's really going on behind the scenes. +There are several kinds of messages logged by the toolkit itself: + +=over 4 + +=item Debug messages + +These are printed directly to the STDERR, with a prefix of +C<"MIME-tools: debug">. + +Debug message are only logged if you have turned +L on in the MIME::Tools configuration. + + +=item Warning messages + +These are logged by the standard Perl warn() mechanism +to indicate an unusual situation. +They all have a prefix of C<"MIME-tools: warning">. + +Warning messages are only logged if C<$^W> is set true +and MIME::Tools is not configured to be L. + + +=item Error messages + +These are logged by the standard Perl warn() mechanism +to indicate that something actually failed. +They all have a prefix of C<"MIME-tools: error">. + +Error messages are only logged if C<$^W> is set true +and MIME::Tools is not configured to be L. + + +=item Usage messages + +Unlike "typical" warnings above, which warn about problems processing +data, usage-warnings are for alerting developers of deprecated methods +and suspicious invocations. + +Usage messages are currently only logged if C<$^W> is set true +and MIME::Tools is not configured to be L. + +=back + +When a MIME::Parser (or one of its internal helper classes) +wants to report a message, it generally does so by recording +the message to the B object +immediately before invoking the appropriate function above. +That means each parsing run has its own trace-log which +can be examined for problems. + + +=head2 Configuring the toolkit + +If you want to tweak the way this toolkit works (for example, to +turn on debugging), use the routines in the B module. + +=over + +=item debugging + +Turn debugging on or off. +Default is false (off). + + MIME::Tools->debugging(1); + + +=item quiet + +Turn the reporting of warning/error messages on or off. +Default is true, meaning that these message are silenced. + + MIME::Tools->quiet(1); + + +=item version + +Return the toolkit version. + + print MIME::Tools->version, "\n"; + +=back + + + + + + + + +=head1 THINGS YOU SHOULD DO + + +=head2 Take a look at the examples + +The MIME-Tools distribution comes with an "examples" directory. +The scripts in there are basically just tossed-together, but +they'll give you some ideas of how to use the parser. + + +=head2 Run with warnings enabled + +I run your Perl script with C<-w>. +If you see a warning about a deprecated method, change your +code ASAP. This will ease upgrades tremendously. + + +=head2 Avoid non-standard encodings + +Don't try to MIME-encode using the non-standard MIME encodings. +It's just not a good practice if you want people to be able to +read your messages. + + +=head2 Plan for thrown exceptions + +For example, if your mail-handling code absolutely must not die, +then perform mail parsing like this: + + $entity = eval { $parser->parse(\*INPUT) }; + +Parsing is a complex process, and some components may throw exceptions +if seriously-bad things happen. Since "seriously-bad" is in the +eye of the beholder, you're better off I possible exceptions +instead of asking me to propagate C up the stack. Use of exceptions in +reusable modules is one of those religious issues we're never all +going to agree upon; thankfully, that's what C is good for. + + +=head2 Check the parser results for warnings/errors + +As of 5.3xx, the parser tries extremely hard to give you a +MIME::Entity. If there were any problems, it logs warnings/errors +to the underlying "results" object (see L). +Look at that object after each parse. +Print out the warnings and errors, I if messages don't +parse the way you thought they would. + + +=head2 Don't plan on printing exactly what you parsed! + +I +Because of things like ambiguities in base64-encoding, the following +is I going to spit out its input unchanged in all cases: + + $entity = $parser->parse(\*STDIN); + $entity->print(\*STDOUT); + +If you're using MIME::Tools to process email, remember to save +the data you parse if you want to send it on unchanged. +This is vital for things like PGP-signed email. + + +=head2 Understand how international characters are represented + +The MIME standard allows for text strings in headers to contain +characters from any character set, by using special sequences +which look like this: + + =?ISO-8859-1?Q?Keld_J=F8rn_Simonsen?= + +To be consistent with the existing Mail::Field classes, MIME::Tools +does I automatically unencode these strings, since doing so would +lose the character-set information and interfere with the parsing +of fields (see L for a full explanation). +That means you should be prepared to deal with these encoded strings. + +The most common question then is, B +The answer depends on what you want to decode them I: +ASCII, Latin1, UTF-8, etc. Be aware that your "target" representation +may not support all possible character sets you might encounter; +for example, Latin1 (ISO-8859-1) has no way of representing Big5 +(Chinese) characters. A common practice is to represent "untranslateable" +characters as "?"s, or to ignore them completely. + +To unencode the strings into some of the more-popular Western byte +representations (e.g., Latin1, Latin2, etc.), you can use the decoders +in MIME::WordDecoder (see L). +The simplest way is by using C, a function wrapped +around your "default" decoder, as follows: + + use MIME::WordDecoder; + ... + $subject = unmime $entity->head->get('subject'); + +One place this I done automatically is in extracting the recommended +filename for a part while parsing. That's why you should start by +setting up the best "default" decoder if the default target of Latin1 +isn't to your liking. + + + +=head1 THINGS I DO THAT YOU SHOULD KNOW ABOUT + + +=head2 Fuzzing of CRLF and newline on input + +RFC 2045 dictates that MIME streams have lines terminated by CRLF +(C<"\r\n">). However, it is extremely likely that folks will want to +parse MIME streams where each line ends in the local newline +character C<"\n"> instead. + +An attempt has been made to allow the parser to handle both CRLF +and newline-terminated input. + + +=head2 Fuzzing of CRLF and newline when decoding + +The C<"7bit"> and C<"8bit"> decoders will decode both +a C<"\n"> and a C<"\r\n"> end-of-line sequence into a C<"\n">. + +The C<"binary"> decoder (default if no encoding specified) +still outputs stuff verbatim... so a MIME message with CRLFs +and no explicit encoding will be output as a text file +that, on many systems, will have an annoying ^M at the end of +each line... I. + + +=head2 Fuzzing of CRLF and newline when encoding/composing + +TODO FIXME +All encoders currently output the end-of-line sequence as a C<"\n">, +with the assumption that the local mail agent will perform +the conversion from newline to CRLF when sending the mail. +However, there probably should be an option to output CRLF as per RFC 2045 + + +=head2 Inability to handle multipart boundaries with embedded newlines + +Let's get something straight: this is an evil, EVIL practice. +If your mailer creates multipart boundary strings that contain +newlines, give it two weeks notice and find another one. If your +mail robot receives MIME mail like this, regard it as syntactically +incorrect, which it is. + + +=head2 Ignoring non-header headers + +People like to hand the parser raw messages straight from +POP3 or from a mailbox. There is often predictable non-header +information in front of the real headers; e.g., the initial +"From" line in the following message: + + From - Wed Mar 22 02:13:18 2000 + Return-Path: + Subject: Hello + +The parser simply ignores such stuff quietly. Perhaps it +shouldn't, but most people seem to want that behavior. + + +=head2 Fuzzing of empty multipart preambles + +Please note that there is currently an ambiguity in the way +preambles are parsed in. The following message fragments I +are regarded as having an empty preamble (where C<\n> indicates a +newline character): + + Content-type: multipart/mixed; boundary="xyz"\n + Subject: This message (#1) has an empty preamble\n + \n + --xyz\n + ... + + Content-type: multipart/mixed; boundary="xyz"\n + Subject: This message (#2) also has an empty preamble\n + \n + \n + --xyz\n + ... + +In both cases, the I completely-empty line (after the "Subject") +marks the end of the header. + +But we should clearly ignore the I empty line in message #2, +since it fills the role of I<"the newline which is only there to make +sure that the boundary is at the beginning of a line">. +Such newlines are I part of the content preceding the boundary; +thus, there is no preamble "content" in message #2. + +However, it seems clear that message #1 I has no preamble +"content", and is in fact merely a compact representation of an +empty preamble. + + +=head2 Use of a temp file during parsing + +I +Although the amount of core available on even a modest home +system continues to grow, the size of attachments continues +to grow with it. I wanted to make sure that even users with small +systems could deal with decoding multi-megabyte sounds and movie files. +That means not being core-bound. + +As of the released 5.3xx, MIME::Parser gets by with only +one temp file open per parser. This temp file provides +a sort of infinite scratch space for dealing with the current +message part. It's fast and lightweight, but you should know +about it anyway. + + +=head2 Why do I assume that MIME objects are email objects? + +Achim Bohnet once pointed out that MIME headers do nothing more than +store a collection of attributes, and thus could be represented as +objects which don't inherit from Mail::Header. + +I agree in principle, but RFC 2045 says otherwise. +RFC 2045 [MIME] headers are a syntactic subset of RFC-822 [email] headers. +Perhaps a better name for these modules would have been RFC1521:: +instead of MIME::, but we're a little beyond that stage now. + +When I originally wrote these modules for the CPAN, I agonized for a long +time about whether or not they really should subclass from B +(then at version 1.17). Thanks to Graham Barr, who graciously evolved +MailTools 1.06 to be more MIME-friendly, unification was achieved +at MIME-tools release 2.0. +The benefits in reuse alone have been substantial. + + + + +=head1 A MIME PRIMER + +So you need to parse (or create) MIME, but you're not quite up on +the specifics? No problem... + + + +=head2 Glossary + +Here are some definitions adapted from RFC 1521 (predecessor of the +current RFC 204[56789] defining MIME) explaining the terminology we +use; each is accompanied by the equivalent in MIME:: module terms... + +=over 4 + +=item attachment + +An "attachment" is common slang for any part of a multipart message -- +except, perhaps, for the first part, which normally carries a user +message describing the attachments that follow (e.g.: "Hey dude, here's +that GIF file I promised you."). + +In our system, an attachment is just a B under the +top-level entity, probably one of its L. + +=item body + +The "body" of an L is that portion of the entity +which follows the L and which contains the real message +content. For example, if your MIME message has a GIF file attachment, +then the body of that attachment is the base64-encoded GIF file itself. + +A body is represented by an instance of B. You get the +body of an entity by sending it a L +message. + +=item body part + +One of the parts of the body of a multipart B. +A body part has a B and a B, so it makes sense to +speak about the body of a body part. + +Since a body part is just a kind of entity, it's represented by +an instance of B. + +=item entity + +An "entity" means either a B or a B. +All entities have a B and a B. + +An entity is represented by an instance of B. +There are instance methods for recovering the +L (a B) and the +L (a B). + +=item header + +This is the top portion of the MIME message, which contains the +"Content-type", "Content-transfer-encoding", etc. Every MIME entity has +a header, represented by an instance of B. You get the +header of an entity by sending it a head() message. + +=item message + +A "message" generally means the complete (or "top-level") message being +transferred on a network. + +There currently is no explicit package for "messages"; under MIME::, +messages are streams of data which may be read in from files or +filehandles. You can think of the B returned by the +B as representing the full message. + + +=back + + +=head2 Content types + +This indicates what kind of data is in the MIME message, usually +as I. The standard major types are shown below. +A more-comprehensive listing may be found in RFC-2046. + +=over 4 + +=item application + +Data which does not fit in any of the other categories, particularly +data to be processed by some type of application program. +C, C, C... + +=item audio + +Audio data. +C

\n"; print &ui_form_start("letsencrypt.cgi"); print &ui_table_start($text{'ssl_letsheader'}, undef, 2); @@ -287,10 +299,18 @@ else { # Apache vhost or other path my @opts; + my $certbot_by_webmin = $letsencrypt_cmd + ? &is_webmin_listening_on_port(80) + : 0; + my $certbot_warning = $letsencrypt_cmd + ? &get_letsencrypt_certbot_port_error() + : undef; my $webroot = $config{'letsencrypt_webroot'}; my $hasapache = &foreign_installed("apache"); - my $mode = $webroot eq 'dns' ? 3 : + my $saved_mode = $config{'letsencrypt_mode'} || "web"; + my $mode = $saved_mode eq 'dns' ? 3 : + $saved_mode eq 'certbot' ? 4 : $webroot ? 2 : $hasapache ? 0 : $letsencrypt_cmd ? 4 : 2; @@ -325,8 +345,23 @@ else { if ($letsencrypt_cmd) { push(@opts, [ 4, $text{'ssl_letsmode4'} ]); } + my $mode_html = &ui_radio_table("webroot_mode", $mode, \@opts); + if ($certbot_warning) { + # Keep the warning aligned with the validation options (hacky as + # we have no API for this yet) + $certbot_warning .= " ".$text{'ssl_certbotprehook'} + if (!$certbot_by_webmin && $config{'letsencrypt_before'}); + my $warning_note = &ui_note($certbot_warning, 0); + my $warning_html = + "". + &ui_tag('div', $warning_note, + { 'style' => 'padding-left: 19px; '. + 'margin-top: -8px !important' }). + "\n"; + $mode_html =~ s#\s*$#$warning_html#; + } print &ui_table_row($text{'ssl_letsmode'}, - &ui_radio_table("webroot_mode", $mode, \@opts)); + $mode_html); # Install in Webmin now? print &ui_table_row($text{'ssl_usewebmin'}, @@ -343,6 +378,32 @@ else { [ [ 0, $text{'ssl_staging0'} ], [ 1, $text{'ssl_staging1'} ] ])); + my $acme_extra = &ui_table_start(undef, undef, 2); + $acme_extra .= &ui_table_row($text{'ssl_acmedir'}, + &ui_textbox("directory_url", + $config{'letsencrypt_directory_url'}, 60)."
\n". + &ui_note($text{'ssl_acmedirdesc'}, 0)); + $acme_extra .= &ui_table_row($text{'ssl_acmekid'}, + &ui_textbox("eab_kid", + $config{'letsencrypt_eab_kid'}, 40)."
\n". + &ui_note($text{'ssl_acmekiddesc'}, 0)); + $acme_extra .= &ui_table_row($text{'ssl_acmehmac'}, + &ui_password("eab_hmac", + $config{'letsencrypt_eab_hmac'}, 50)."
\n". + &ui_note($text{'ssl_acmehmacdesc'}, 0)); + $acme_extra .= &ui_table_end(); + print &ui_table_row($text{'ssl_acmeopts'}, + &ui_details({ + 'class' => 'inline inlined', + 'html' => 1, + 'title' => $text{'ssl_acmeextra'}, + 'content' => $acme_extra, + })."\n". + &ui_tag('style', + "tr>td>details.inline>summary+span {\n". + "margin-left: 0;\n". + "}\n")); + # Renewal option my $job = &find_letsencrypt_cron_job(); my $renew = $job && $job->{'months'} =~ /^\*\/(\d+)$/ ? $1 : undef; @@ -359,4 +420,3 @@ print ui_tabs_end_tab(); print ui_tabs_end(1); ui_print_footer("", $text{'index_return'}); - diff --git a/webmin/lang/ar.auto b/webmin/lang/ar.auto index 13bb09bef..1fd0be278 100644 --- a/webmin/lang/ar.auto +++ b/webmin/lang/ar.auto @@ -250,7 +250,6 @@ ssl_essl=The Net::SSLeay perl module does not appear to be installed on your sys ssl_cpan=Alternately, you can have Webmin
download and install the required Net::SSLeay Perl module for you. ssl_emessage=The error message from Perl was : $1 ssl_desc1=يبدو أن المضيف الذي يتم تشغيل Webmin عليه تم تثبيت الوحدة النمطية SSLeay Perl. باستخدام هذا ، يدعم Webmin الاتصال المشفر SSL بين المستعرض والخادم. إذا كنت تقوم بالوصول إلى خادم Webmin عبر الإنترنت ، فعليك بالتأكيد التفكير في استخدام طبقة المقابس الآمنة لمنع مهاجم من التقاط كلمة مرور Webmin الخاصة بك. -ssl_desc2=Warning - only turn on SSL support if you have a browser that supports SSL, and there is no firewall blocking https requests between your browser and the Webmin host. ssl_header=دعم SSL ssl_on=تمكين SSL؟ ssl_key=ملف المفتاح الخاص @@ -261,6 +260,7 @@ ssl_deny=إصدارات بروتوكول SSL لرفض ssl_compression=هل تسمح باتصالات SSL المضغوطة؟ ssl_honorcipherorder=فرض استخدام ترتيب الشفرات المعرفة من قبل الخادم؟ ssl_extracas=Additional certificate files
(for chained certificates) +ssl_enforce=فرض استخدام بروتوكول SSL ssl_hsts=فرض SSL مع رأس HSTS ssl_redirect=إعادة توجيه طلبات SSL إلى وضع SSL؟ ssl_extracasdef=نفس إعدادات SSL العالمية @@ -320,7 +320,7 @@ ssl_tabcreate=شهادة موقعة ذاتيا ssl_tabcsr=طلب توقيع شهادة ssl_tabupload=تحميل الشهادة ssl_tabcurrent=الشهادة الحالية -ssl_tablets=دعونا تشفير +ssl_tablets=موفر شهادة SSL ssl_cheader=تفاصيل الشهادة الحالية ssl_typeself=موقعة ذاتيا ssl_typereal=وقعت من قبل كاليفورنيا @@ -332,14 +332,14 @@ ssl_edownload=فشل في استخراج بيانات PEM من الشهادة ssl_csralready=عرض آخر مفتاح و CSR .. ssl_already1=المفتاح الخاص الذي تم إنشاؤه مسبقًا : ssl_already2=طلب توقيع شهادة تم إنشاؤه مسبقًا : -ssl_letsdesc=Let's Encrypt هي المرجع المصدق المجاني والآلي والمفتوح والذي يمكن استخدامه لإنشاء شهادة SSL للاستخدام بواسطة 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=يمكن استخدام هذه الصفحة لطلب شهادة جديدة ، والتي ستقوم بالكتابة فوق أي أخرى تم تكوينها حاليًا في 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=دعونا تشفير طريقة التحقق من الصحة +ssl_letsmode=أسلوب التحقق من صحة المجال ssl_letsmode0=مضيف Apache الظاهري يطابق اسم المضيف ssl_letsmode1=تم تحديد مضيف افتراضي Apache ssl_letsmode2=دليل مستندات خادم الويب الآخر @@ -350,9 +350,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=اسم الخادم مفقود أو غير صالح @@ -571,13 +579,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، لأن دالة التشفير في النظام لا تدعمه session_blocklock=قفل المستخدمين أيضًا بتسجيل الدخول الفاشل session_passapi=تمكين API تغيير كلمة المرور عن بعد؟ session_passapi0=API تعطيل @@ -652,13 +661,14 @@ 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=طلب شهادة SSL جديدة من 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=طلب شهادة SSL جديدة من مزود ACME +log_letsencryptdns=تم إنشاء سجل ACME DNS لـ $1 +log_letsencryptcleanup=تمت إزالة سجل نظام أسماء النطاقات (DNS) الخاص بشركة ACME لـ $1 themes_title=Webmin المواضيع themes_desc=تتحكم السمات في مظهر واجهة مستخدم Webmin ، بما في ذلك الرموز والألوان والخلفيات وتخطيط الصفحات. يمكن استخدام مربع الاختيار أدناه لاختيار أحد السمات المثبتة على نظامك. themes_sel=الموضوع الحالي : +themes_configure=افتح صفحة إعدادات القالب themes_default=موضوع Webmin القديم themes_none=لا شيء - دع الموضوع يقرر themes_change=يتغيرون @@ -988,6 +998,7 @@ sendmail_authdef=الافتراضي (حاليًا Cram-MD5) sendmail_from=من عنوان البريد الإلكتروني من Webmin sendmail_fromdef=Default ($1) sendmail_fromaddr=عنوان +sendmail_name=اسم العرض sendmail_toaddr=عنوان الوجهة الافتراضي للإشعارات sendmail_to_def=لم يتم تحديد أي شيء sendmail_etoaddr=عنوان الوجهة مفقود أو منسق بشكل غير صحيح @@ -1089,6 +1100,7 @@ twofactor_enrolllink=You can now enroll for two-factor authentication in the $2. twofactor_etotpmodule=The Perl module $1 needed for two-factor authentication is not installed. Use the Perl Modules page in Webmin to install it. twofactor_qrcode=أدخل الرمز السري $1 في تطبيق TOTP، أو قم بمسح رمز الاستجابة السريعة QR أدناه. +twofactor_qrcode_manual=أدخل الرمز السري $1 في تطبيق TOTP وقم بإعداده يدويًا، حيث أن إنشاء رمز الاستجابة السريعة غير مدعوم في هذا النظام. twofactor_etotpid=سر TOP32 ترميز base32 غير صالح twofactor_etotptoken=يجب أن يكون رمز TOTP رقمًا twofactor_etotpmatch=رمز OTP غير صحيح @@ -1098,9 +1110,9 @@ twofactor_secret0=استخدام مفتاح 16 حرف twofactor_esecret=يجب أن يكون طول المفتاح السري 16 حرفًا تمامًا وأن يحتوي على أحرف وأرقام فقط twofactor_esession=لا يمكن استخدام المصادقة الثنائية ما لم تكن المصادقة المستندة إلى الجلسة نشطة -letsencrypt_title=دعونا تشفير طلب الشهادة +letsencrypt_title=طلب شهادة موفر SSL letsencrypt_err=فشل في طلب الشهادة -letsencrypt_ecmds=Neither the Let's Encrypt client command certbot or the python command were found on your system +letsencrypt_ecmds=لم يتم العثور على أمر عميل ACME الأصلي certbot ولا أمر python على نظامك letsencrypt_epythonmod=The Python module $1 needed by the built-in Let's Encrypt 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. @@ -1108,6 +1120,10 @@ letsencrypt_certbot=Certbot letsencrypt_edroot=The Apache virtual host $1 has no document directory! letsencrypt_edom=اسم مجال مفقود أو غير صالح letsencrypt_erenew=مفقود أو غير فاصل التجديد الرقمي +letsencrypt_eacmedir=عنوان URL لدليل ACME مفقود أو غير صالح +letsencrypt_eeabdir=يجب إدخال عنوان URL لدليل ACME عند استخدام ربط الحساب الخارجي +letsencrypt_eeabpair=يجب إدخال كل من معرّف مفتاح ربط الحساب الخارجي ومفتاح HMAC +letsencrypt_eeabnative=لا يمكن استخدام ربط الحساب الخارجي إلا عند تثبيت عميل ACME الأصلي letsencrypt_ewebroot=دليل وثيقة الموقع غير موجود letsencrypt_evhost=No virtual host matching $1 was found letsencrypt_efull=Expected full certificate file $1 was not found @@ -1130,9 +1146,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=تم استخدام عميل 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/bg.auto b/webmin/lang/bg.auto index bd513ee8d..4ec96cc72 100644 --- a/webmin/lang/bg.auto +++ b/webmin/lang/bg.auto @@ -340,7 +340,6 @@ ssl_essl=Perl модулът Net::SSLeay изглежда не е инстали ssl_cpan=Алтернативно, можете да имате Webmin изтегляне и инсталиране необходимия за вас модул Net::SSLeay Perl. ssl_emessage=Съобщението за грешка от Perl беше : $1 ssl_desc1=Хостът, на който работи Webmin, изглежда има инсталиран модул SSLeay Perl. Използвайки това, Webmin поддържа SSL криптирана комуникация между вашия браузър и сървъра. Ако осъществявате достъп до вашия сървър на Webmin през Интернет, тогава определено трябва да помислите да използвате SSL, за да предотвратите злоупотребата с нападателя да улови паролата ви за Webmin. -ssl_desc2=Предупреждение - включете поддръжката на SSL само ако имате браузър, който поддържа SSL и няма защитна стена, блокираща https заявки между вашия браузър и хост Webmin. ssl_header=SSL поддръжка ssl_on=Да се активира SSL? ssl_key=Файл с частен ключ @@ -351,6 +350,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 настройки @@ -410,7 +410,7 @@ ssl_tabcreate=Самоподписано удостоверение ssl_tabcsr=Заявка за подписване на сертификат ssl_tabupload=Качване на сертификат ssl_tabcurrent=Актуално удостоверение -ssl_tablets=Нека да шифроваме +ssl_tablets=Доставчик на SSL ssl_cheader=Подробности за текущия сертификат ssl_typeself=Самоподписаният ssl_typereal=Подписано от СА @@ -422,14 +422,14 @@ ssl_edownload=Неуспешно извличане на PEM данни от с ssl_csralready=Вижте най-новия ключ и CSR .. ssl_already1=По-рано генериран частен ключ : ssl_already2=Преди генерирана заявка за подписване на сертификат : -ssl_letsdesc=Нека Encrypt е безплатен, автоматизиран и отворен орган за сертифициране, който може да се използва за генериране на SSL сертификат за използване от Webmin. -ssl_letserr=За съжаление, Нека 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=Друга директория с документи на уеб сървъра @@ -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 +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=Изтрити $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=Създаден е 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=Невалидна тайна, кодирана от базата TOTP twofactor_etotptoken=Токенът TOTP трябва да е число twofactor_etotpmatch=Неправилен OTP код @@ -1214,9 +1226,9 @@ twofactor_secret0=Използвайте 16-знаков ключ twofactor_esecret=Тайният ключ трябва да е с дължина точно 16 знака и да съдържа само букви и цифри twofactor_esession=Двуфакторната автентификация не може да се използва, ако не е активна автентификация на базата на сесия -letsencrypt_title=Нека да шифроваме заявка за сертификат +letsencrypt_title=Заявка за SSL сертификат на доставчик letsencrypt_err=Заявката за сертификат не бе успешна -letsencrypt_ecmds=Нито командата Let's Encrypt client certbot, нито командата python не бяха намерени във вашата система +letsencrypt_ecmds=Нито оригиналната команда certbot на ACME клиента, нито командата python бяха открити във вашата система letsencrypt_epythonmod=Модулът Python $1, необходим на вградения клиент Let's Encrypt, не е инсталиран 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/ca b/webmin/lang/ca index 1f7f984f0..2bb295398 100644 --- a/webmin/lang/ca +++ b/webmin/lang/ca @@ -306,7 +306,6 @@ ssl_essl=Sembla que el mòdul Net::SSLeay de Perl no està instal·lat al sistem ssl_cpan=Alternativament, pots fer que Webmin descarregui i instal·li el mòdul Perl Net::SSLeay necessari per tu. ssl_emessage=El missatge d'error de Perl ha estat: $1 ssl_desc1=Sembla que el host on s'està executant Webmin té instal·lat el mòdul Perl SSLeay. Utilitzant-lo, Webmin suporta comunicació xifrada SSL entre el teu navegador i el servidor. Si estàs accedint el servidor Webmin a través d'Internet, llavors hauries de pensar seriosament en utilitzar SSL per evitar que algun atacant capturi la teva contrasenya de Webmin. -ssl_desc2=Atenció - activa el suport SSL només si tens un navegador que suporti SSL, i no hi ha cap tallafoc que bloquegi peticions https entre el teu navegador i el host Webmin. ssl_header=Suport SSL ssl_on=Activa SSL ssl_key=Fitxer de clau privada @@ -375,7 +374,6 @@ ssl_tabcreate=Creació de Certificat Auto-signat ssl_tabcsr=Petició de Signatura de Certificat ssl_tabupload=Puja de Certificat ssl_tabcurrent=Certificat Actual -ssl_tablets=Let's Encrypt ssl_cheader=Detalls del certificat actual ssl_typeself=Autosignat ssl_typereal=Signat per CA @@ -387,19 +385,12 @@ ssl_edownload=No s'han pogut extreure les dades PEM del certificat ssl_csralready=Visualitza la clau i CSR més recent... ssl_already1=Clau privada generada anteriorment: ssl_already2=Petició de signatura de certificat generada anteriorment: -ssl_letsdesc=Let's Encrypt és una autoritat de certificats oberta, automatitzada i lliure que es pot utilitzar per a generar un certificat SSL per a Webmin. -ssl_letserr=Desgraciadament, no es pot utilitzar Let's Encrypt al teu sistema: $1. -ssl_letserr2=Comprova la pàgina de configuració del mòdul per assegurar que estàs utilitzant el camí correcte de l'ordre letsencrypt o letsencrypt-auto. -ssl_letsdesc2=Aquesta pàgina es pot utilitzar per a demanar un nou certificat, que sobreescriurà qualsevol altre que estigui actualment configurat a Webmin. No obstant, el servei Let's Encrypt demana que la propietat del domini certificat sigui validada comprovant que aquests sistema allotja el lloc web del domini. Això es fa posant un petit fitxer temporal al directori de documents del lloc web. ssl_letsheader=Opcions del nou certificat SSL ssl_letsok=Demana el Certifica ssl_letsonly=Només Actualitza la Renovació ssl_usewebmin=Copia la nova clau i el nou certificat a Webmin ssl_letsrenew=Mesos entre renovació automàtica ssl_letsnotrenew=Només renovació automàtica -ssl_staging=Servidor Let's Encrypt -ssl_staging0=Real -ssl_staging1=Staging (només proves) newkey_err=No s'ha pogut crear la clau SSL newkey_ecn=Hi falta el nom del servidor o bé és invàlid @@ -674,9 +665,6 @@ log_delete_webmincron=S'han suprimit $1 funcions planificades log_run_webmincron=S'han executat $1 funcions planificades log_save_webmincron=S'ha actualitzat la funció planificada al mòdul $1 log_onedelete_webmincron=S'ha suprimit la funció planificada del mòdul $1 -log_letsencrypt=S'ha demanat un nou certificat SSL per part de Let's Encrypt -log_letsencryptdns=S'ha creat el registre DNS Let's Encrypt DNS de $1 -log_letsencryptcleanup=S'ha eliminat el registre DNS Let's Encrypt de $1 themes_title=Temes Webmin themes_desc=Temes controla l'aparença de la interfície d'usuari de Webmin, incloent-hi les icones, els colors, els fons i la disposició de les pàgines. La caixa de selecció de sota es pot utilitzar per triar un dels temes instal·lats al sistema. @@ -1074,9 +1062,6 @@ twofactor_secret0=Utilitza una clau de 16 caràcters twofactor_esecret=La clau secreta ha de tenir exactament 16 caràcters de llarg i ha de contenir només lletres i números twofactor_esession=L'autenticació de dos factors no es pot utilitzar si l'autenticació basada en sessió no està activa -letsencrypt_title=Petició de Certificat Let's Encrypt -letsencrypt_err=No s'ha pogut demanar el certificat -letsencrypt_ecmds=No s'ha trobat al sistema l'ordre client de Let's Encrypt letsencrypt-auto ni l'ordre python letsencrypt_epythonmod=El mòdul $1 de Python necessari per al client integrat de Let's Encrypt no està instal·lat letsencrypt_epythonver=No s'ha pogut obtenir la versió de Python: $1 letsencrypt_epythonver2=Cal la versió de Python $1 o superior, però només tens la versió $2. @@ -1104,6 +1089,5 @@ letsencrypt_echain=No s'ha pogut baixar el certificat encadenat: $1 letsencrypt_echain2=El certificat encadenat descarregat des de $1 està buit letsencrypt_ecsr=No s'ha pogut generar la petició CSR: $1 letsencrypt_ekeygen=No s'ha pogut generar la clau privada: $1 -letsencrypt_enative=S'ha utilitzat anteriorment el client nadiu de Let's Encrypt (certbot) en aquest sistema, i s'ha de seguir utilitzant per a totes les peticions futures de certificats announce_hide=Amaga Aquest Anunci diff --git a/webmin/lang/ca.auto b/webmin/lang/ca.auto index d4294894e..b560d6dc5 100644 --- a/webmin/lang/ca.auto +++ b/webmin/lang/ca.auto @@ -39,15 +39,33 @@ lang_dateformat_dd/mm/yyyy=dd/mm/aaaa (és a dir, 16/09/2001) lang_dateformat_mm/dd/yyyy=mm/dd/aaaa (és a dir, 16/09/2001) lang_dateformat_yyyy/mm/dd=aaaa/mm/dd (és a dir, 16/09/2001) +ssl_enforce=Aplicar SSL ssl_hsts=Apliqueu SSL amb la capçalera HSTS +ssl_tablets=Proveïdor SSL +ssl_letsdesc=Aquest formulari us permet sol·licitar un certificat SSL de confiança per a Webmin d'un proveïdor compatible amb ACME com ara Let's Encrypt. +ssl_letserr=Malauradament, aquest sistema no pot sol·licitar certificats d'un proveïdor SSL: $1. +ssl_letserr2=Alternativament, consulteu la pàgina de configuració del mòdul per assegurar-vos que esteu utilitzant la ruta correcta a l'ordre del client ACME configurat. + +ssl_letsdesc2=El nou certificat substituirà el que està configurat actualment a Webmin. Abans que es pugui emetre, el proveïdor ACME ha de verificar el control de cada nom d'amfitrió mitjançant un fitxer temporal al directori de documents del lloc web o un registre TXT DNS temporal. ssl_letsdoms=Noms d'amfitrió del certificat ssl_subset=Voleu saltar noms d'amfitrió no verificables? -ssl_letsmode=Anem a xifrar el mètode de validació +ssl_letsmode=Mètode de validació de domini ssl_letsmode0=L'amfitrió virtual d'Apache coincideix amb el nom d'amfitrió ssl_letsmode1=Amfitrió virtual Apache seleccionat ssl_letsmode2=Un altre directori de documents del servidor web ssl_letsmode3=Validació DNS mitjançant BIND ssl_letsmode4=Servidor web integrat Certbot +ssl_staging=servidor del proveïdor +ssl_staging0=Producció +ssl_staging1=Estadificació (només prova) +ssl_acmeopts=Configuració del proveïdor +ssl_acmeextra=Mostra la configuració avançada +ssl_acmedir=URL del directori ACME personalitzat +ssl_acmedirdesc=Si està definit, això substitueix el servidor proveïdor per defecte anterior. +ssl_acmekid=ID de clau de vinculació de compte extern +ssl_acmekiddesc=Opcional. Alguns proveïdors d'ACME requereixen això a més de l'URL del directori. +ssl_acmehmac=Clau HMAC de vinculació de compte extern +ssl_acmehmacdesc=Opcional. Requereix el client Certbot natiu quan s'utilitza. upgrade_repo=La darrera versió del repositori $1 upgrade_setup=S'està executant l'script setup.sh per actualitzar Webmin .. @@ -60,20 +78,20 @@ update_webmin=Actualització de webmin.com session_blockhost=Bloqueja les IP del client amb més de $1 inicis de sessió fallits durant $2 segons. session_utmp=Enregistrar els inicis de sessió i tancaments de sessió a utmp? session_pmodedesc3=Política de caducitat de contrasenya +session_rpc_timeout=Temps d'espera de la sessió RPC +session_erpc_timeout=Falta el temps d'espera de la sessió RPC o ha de ser un número superior a 0 session_md5off=Determinar automàticament session_md5on=Utilitzeu el format hashing MD5 session_sha512=Utilitzeu el format hashing SHA512 session_yescrypt=Utilitzeu el format hashing yescrypt session_emd5mod=El format hashing MD5 no es pot utilitzar, ja que el mòdul Perl $1 no està instal·lat -session_esha512mod=El format hashing SHA512 no es pot utilitzar, ja que el mòdul Perl $1 no està instal·lat -session_eyescrypt=El format hashing yescrypt no es pot utilitzar, ja que el mòdul Perl $1 no està instal·lat +session_edigestcrypt=El format de resum $1 no es pot utilitzar perquè la funció crypt del sistema no l'admet session_passapi=Voleu activar l'API de canvi de contrasenya remota? session_passapi0=API desactivada session_passapi1=API habilitada per als usuaris d'Unix session_passurl=Quan està activat, les contrasenyes d'usuari es poden canviar mitjançant una sol·licitud POST a $1 session_forgot=Permetre la recuperació de la contrasenya oblidada? session_eforgot=La recuperació de contrasenyes oblidades no es pot activar si no s'elimina primer el mòdul del complement Virtualmin Password Recovery. Això es pot fer a la pàgina Mòduls Webmin. - session_passresetdesc=Limitació de recuperació de contrasenya session_passreset=Bloqueja els clients amb més de $1 sol·licituds durant $2 minuts session_epassreset_failures=Sol·licituds de bloqueig perdudes o no vàlides @@ -82,6 +100,11 @@ session_passtimeout=L'enllaç de restabliment de contrasenya caduca en $1 minuts session_epassreset_timeout=Temps d'espera per restablir la contrasenya no vàlida o que falta log_fixrepo=S'ha solucionat el repositori Webmin +log_letsencrypt=He sol·licitat un nou certificat SSL a un proveïdor d'ACME +log_letsencryptdns=S'ha creat un registre DNS ACME per a $1 +log_letsencryptcleanup=S'ha eliminat el registre DNS ACME per a $1 + +themes_configure=Obre la pàgina de configuració del tema themes_ok=El tema s'ha canviat correctament redirigint-se ara. .. themes_ok2=La superposició del tema s'ha canviat correctament, redirigint-se ara. .. @@ -137,6 +160,7 @@ sendmail_port=Port SMTP sendmail_ssl0=Mai xifreu sendmail_ssl1=Utilitzeu sempre TLS sendmail_ssl2=Canvieu amb STARTTLS +sendmail_name=Nom de visualització sendmail_toaddr=Adreça de destinació predeterminada per a les notificacions sendmail_to_def=Cap establert sendmail_etoaddr=Falta l'adreça de destinació o amb un format incorrecte @@ -158,12 +182,21 @@ web_redirssl=Redirigeix SSL twofactor_totp=Autenticador TOTP twofactor_qrcode=Introduïu el codi secret $1 a l'aplicació TOTP o escanegeu el codi QR a continuació. +twofactor_qrcode_manual=Introduïu el codi secret $1 a l'aplicació TOTP i configureu-lo manualment, ja que aquest sistema no admet la generació de codis QR. twofactor_etotptoken=El testimoni TOTP ha de ser un número +letsencrypt_title=Sol·licitud de certificat de proveïdor SSL +letsencrypt_err=No s'ha pogut sol·licitar el certificat +letsencrypt_ecmds=No s'ha trobat ni l' certbot del client ACME natiu ni l'ordre python al sistema letsencrypt_certbot=Certbot +letsencrypt_eacmedir=URL del directori ACME que falta o que és no vàlid +letsencrypt_eeabdir=Cal introduir una URL de directori ACME quan s'utilitza la vinculació de comptes externs +letsencrypt_eeabpair=Cal introduir tant l'ID de clau de vinculació de compte extern com la clau HMAC +letsencrypt_eeabnative=La vinculació de comptes externs només es pot utilitzar quan el client ACME natiu està instal·lat letsencrypt_doingcertbot=Sol·licitant un certificat nou per a $1, utilitzant el servidor web Certbot .. -letsencrypt_eacmedns=Només el client Let's Encrypt oficial és compatible amb la validació basada en DNS -letsencrypt_eacmecertbot=Només el client oficial de Let's Encrypt admet la validació de Certbot +letsencrypt_enative=El client ACME natiu (certbot) s'ha utilitzat anteriorment en aquest sistema i s'ha d'utilitzar per a totes les futures sol·licituds de certificat +letsencrypt_eacmedns=Només el client ACME natiu admet la validació basada en DNS +letsencrypt_eacmecertbot=Només el client ACME natiu admet la validació de Certbot alert_hide=Amaga l'alerta diff --git a/webmin/lang/cs b/webmin/lang/cs index 369163eaa..7d177e1cd 100644 --- a/webmin/lang/cs +++ b/webmin/lang/cs @@ -284,7 +284,6 @@ ssl_essl=Vypadá to, že modul Perlu Net::SSLeay není ve vašem systému nainst ssl_cpan=Případně můžete Webmin nahrávat a instalovat s požadavkem na využití modulu Perlu Net::SSLeay. ssl_emessage=Chybová hláška z Perlu je : $1 ssl_desc1=Host, na kterém běží Webmin, umožňuje nainstalovat modul Perlu SSLe. Pokud toho využijete, Webmin umožní komunikací pomocí SSL kryptování mezi prohlížečem a serverem. Pokud přistupujete k serveru Webminu prostřednictvím Internetu, můžete použitím SSL zásadně vyřešit problém útoků prostřednictvím hesla ve Webminu. -ssl_desc2=POZOR - aktivace SSL je účinná pouze v případě, používáte-li prohlížeč, který podporuje SSL (jako Netscape nebo IE), a jestliže firewall neblokuje https požadavky mezi prohlížečem a hostem s Webminem. ssl_header=SSL podpora ssl_on=Zapnout SSL, je-li k dispozici? ssl_key=Soubor s primárním klíčem diff --git a/webmin/lang/cs.auto b/webmin/lang/cs.auto index e20c71e7b..ced631c5c 100644 --- a/webmin/lang/cs.auto +++ b/webmin/lang/cs.auto @@ -65,6 +65,7 @@ lang_dateformat_yyyy/mm/dd=rrrr/mm/dd (tj. 2001/09/16) ssl_deny=Verze protokolu SSL k odmítnutí ssl_compression=Povolit komprimované připojení SSL? ssl_honorcipherorder=Vynutit použití serveru definované šifrové objednávky? +ssl_enforce=Vynucení SSL ssl_hsts=Vynutit SSL s hlavičkou HSTS ssl_extracasdef=Stejné jako globální nastavení SSL ssl_extracasnone=Žádné pro tuto IP adresu @@ -86,19 +87,19 @@ ssl_privchain=Zřetězený text certifikátu ssl_nochain=Žádný zřetězený certifikát ssl_leavechain=Použijte existující zřetězený certifikát ssl_tabcsr=Žádost o podpis certifikátu -ssl_tablets=Pojďme se zašifrovat +ssl_tablets=Poskytovatel SSL ssl_csralready=Zobrazit poslední klíč a CSR .. ssl_already1=Dříve generovaný soukromý klíč : ssl_already2=Dříve vygenerovaná žádost o podpis certifikátu : -ssl_letsdesc=Pojďme šifrovat je bezplatná, automatizovaná a otevřená certifikační autorita, kterou lze použít k vygenerování certifikátu SSL pro použití serverem Webmin. -ssl_letserr=Bohužel, Pojďme se zašifrovat ve vašem systému nelze použít: $1. -ssl_letserr2=Alternativně zkontrolujte stránku konfigurace modulu a ujistěte se, že používáte správnou cestu k příkazu letsencrypt. +ssl_letsdesc=Tento formulář vám umožňuje požádat o důvěryhodný SSL certifikát pro Webmin od poskytovatele kompatibilního s ACME, jako je Let's Encrypt. +ssl_letserr=Tento systém bohužel nemůže vyžádat certifikáty od poskytovatele SSL: $1. +ssl_letserr2=Případně zkontrolujte stránku konfigurace modulu a ujistěte se, že používáte správnou cestu k nakonfigurovanému příkazu klienta ACME. -ssl_letsdesc2=Tuto stránku lze použít k vyžádání nového certifikátu, který přepíše všechny ostatní aktuálně nakonfigurované v systému Webmin. Služba Let's Encrypt však vyžaduje, aby bylo vaše vlastnictví domény certifikátů ověřeno kontrolou, zda tento systém hostuje web pro danou doménu. To se provádí umístěním malého dočasného souboru do adresáře dokumentů na webu. +ssl_letsdesc2=Nový certifikát nahradí certifikát aktuálně nakonfigurovaný ve Webminu. Před jeho vydáním musí poskytovatel ACME ověřit kontrolu nad každým názvem hostitele buď pomocí dočasného souboru v adresáři dokumentů webu, nebo dočasného TXT záznamu DNS. ssl_letsheader=Možnosti nového certifikátu SSL ssl_letsdoms=Názvy hostitelů pro certifikát ssl_subset=Přeskočit neověřitelné názvy hostitelů? -ssl_letsmode=Ověřovací metoda Let's Encrypt +ssl_letsmode=Metoda ověření domény ssl_letsmode0=Virtuální hostitel Apache odpovídá názvu hostitele ssl_letsmode1=Vybraný virtuální hostitel Apache ssl_letsmode2=Jiný adresář dokumentů webového serveru @@ -109,9 +110,17 @@ ssl_letsonly=Jen aktualizujte obnovení ssl_usewebmin=Kopírovat nový klíč a certifikát do Webmin? ssl_letsrenew=Měsíce mezi automatickou obnovou ssl_letsnotrenew=Obnovujte pouze ručně -ssl_staging=Pojďme šifrovat server -ssl_staging0=Nemovitý +ssl_staging=Server poskytovatele +ssl_staging0=Výroba ssl_staging1=Staging (pouze test) +ssl_acmeopts=Nastavení poskytovatele +ssl_acmeextra=Zobrazit pokročilá nastavení +ssl_acmedir=Vlastní adresa URL adresáře ACME +ssl_acmedirdesc=Pokud je nastaveno, přepíše výše uvedený výchozí server poskytovatele. +ssl_acmekid=ID klíče pro vazbu externího účtu +ssl_acmekiddesc=Volitelné. Někteří poskytovatelé ACME toto vyžadují kromě adresáře URL. +ssl_acmehmac=Klíč HMAC pro vazbu externího účtu +ssl_acmehmacdesc=Volitelné. Při použití vyžaduje nativního klienta Certbot. newkey_ecns=Nebyly zadány žádné názvy serverů @@ -162,13 +171,14 @@ session_cmddef0=Změna hesel pomocí příkazu: session_ecmd=Chybějící nebo neplatný příkaz ke změně hesla session_banner=Pre-login banner session_md5=Formát hashování hesla webmin +session_rpc_timeout=Časový limit relace RPC +session_erpc_timeout=Chybí časový limit relace RPC nebo musí být číslo větší než 0 session_md5off=Určit automaticky session_md5on=Použijte formát hash MD5 session_sha512=Použijte formát hash SHA512 session_yescrypt=Použijte formát hash yescrypt session_emd5mod=Formát hash MD5 nelze použít, protože není nainstalován modul Perl $1 -session_esha512mod=Formát hash SHA512 nelze použít, protože není nainstalován modul Perl $1 -session_eyescrypt=hashovací formát yescrypt nelze použít, protože není nainstalován modul Perl $1 +session_edigestcrypt=Formát hashování $1 nelze použít, protože systémová funkce crypt jej nepodporuje session_blocklock=Zamkněte také uživatele pomocí neúspěšných přihlášení session_passapi=Povolit vzdálenou změnu hesla API? session_passapi0=API deaktivováno @@ -195,10 +205,11 @@ log_delete_webmincron=Smazáno $1 naplánované funkce log_run_webmincron=Spustil naplánované funkce $1 log_save_webmincron=Aktualizovaná naplánovaná funkce v modulu $1 log_onedelete_webmincron=Odstraněná naplánovaná funkce v modulu $1 -log_letsencrypt=Požadovaný nový certifikát SSL od Let's Encrypt -log_letsencryptdns=Vytvořeno Pojďme šifrovat záznam DNS pro $1 -log_letsencryptcleanup=Odstraněn Pojďme šifrovat záznam DNS pro $1 +log_letsencrypt=Požádán nový SSL certifikát od poskytovatele ACME +log_letsencryptdns=Vytvořen záznam ACME DNS pro $1 +log_letsencryptcleanup=Odstraněn záznam ACME DNS pro $1 +themes_configure=Otevřít stránku s konfigurací motivu themes_none=Žádné - nechat se rozhodnout téma themes_overdesc=Překryvy upravují vzhled motivu změnou barev, pozadí a ikon. Nemění rozvržení. themes_overlay=Aktuální překrytí : @@ -375,6 +386,7 @@ sendmail_authdef=Výchozí (aktuálně Cram-MD5) sendmail_from=Z adresy pro e-mail od Webmin sendmail_fromdef=Výchozí ($1) sendmail_fromaddr=Adresa +sendmail_name=Zobrazovaný název sendmail_toaddr=Výchozí cílová adresa pro oznámení sendmail_to_def=Žádná nastavena sendmail_etoaddr=Chybějící nebo nesprávně naformátovaná cílová adresa @@ -476,6 +488,7 @@ twofactor_enrolllink=Nyní se můžete přihlásit k dvoufaktorové autentizaci twofactor_url=Další informace o $1 naleznete na webových stránkách $2. twofactor_etotpmodule=Modul Perl $1 potřebný pro dvoufaktorovou autentizaci není nainstalován. Chcete-li ji nainstalovat, použijte Perl moduly ve Webminu. twofactor_qrcode=Zadejte tajný kód $1 v aplikaci TOTP nebo naskenujte QR kód níže. +twofactor_qrcode_manual=Zadejte tajný kód $1 do aplikace TOTP a nastavte jej ručně, protože tento systém nepodporuje generování QR kódů. twofactor_etotpid=Neplatné tajné kódování TOTP base32 twofactor_etotptoken=TOTP token musí být číslo twofactor_etotpmatch=Nesprávný kód OTP @@ -485,9 +498,9 @@ twofactor_secret0=Použijte 16místný klíč twofactor_esecret=Tajný klíč musí mít přesně 16 znaků a musí obsahovat pouze písmena a čísla twofactor_esession=Dvoufaktorové ověřování nelze použít, pokud není aktivní ověřování založené na relacích -letsencrypt_title=Pojďme zašifrovat žádost o certifikát -letsencrypt_err=Nepodařilo se požádat o certifikát -letsencrypt_ecmds=Ve vašem systému nebyl nalezen příkaz Pojďme šifrovat klienta certbot ani příkaz python +letsencrypt_title=Žádost o certifikát poskytovatele SSL +letsencrypt_err=Nepodařilo se vyžádat si certifikát +letsencrypt_ecmds=Ve vašem systému nebyl nalezen ani nativní příkaz klienta ACME certbot, ani příkaz python letsencrypt_epythonmod=Modul Python $1, který potřebuje vestavěný klient Let's Encrypt, není nainstalován letsencrypt_epythonver=Nepodařilo se získat verzi Pythonu : $1 letsencrypt_epythonver2=Vyžaduje se verze Python $1 nebo vyšší, ale máte pouze verzi $2. @@ -495,6 +508,10 @@ letsencrypt_certbot=Certbot letsencrypt_edroot=Virtuální hostitel Apache $1 nemá adresář dokumentů! letsencrypt_edom=Chybí nebo je neplatný název domény letsencrypt_erenew=Chybějící nebo nečíselný interval obnovy +letsencrypt_eacmedir=Chybějící nebo neplatná adresa URL adresáře ACME +letsencrypt_eeabdir=Při použití vazby externího účtu je nutné zadat URL adresáře ACME +letsencrypt_eeabpair=Je nutné zadat ID klíče pro vazbu externího účtu i klíč HMAC +letsencrypt_eeabnative=Vazbu externího účtu lze použít pouze tehdy, je-li nainstalován nativní klient ACME letsencrypt_ewebroot=Adresář dokumentů webových stránek neexistuje letsencrypt_evhost=Nebyl nalezen žádný virtuální hostitel odpovídající $1 letsencrypt_efull=Očekávaný úplný soubor certifikátů $1 nebyl nalezen @@ -517,9 +534,9 @@ letsencrypt_echain=Nepodařilo se stáhnout zřetězený certifikát : $1 letsencrypt_echain2=Zřetězený certifikát stažený z $1 je prázdný letsencrypt_ecsr=Nepodařilo se vygenerovat CSR : $1 letsencrypt_ekeygen=Generování soukromého klíče se nezdařilo : $1 -letsencrypt_enative=V tomto systému byl dříve použit nativní klient Encrypt (certbot) a musí být použit pro všechny budoucí žádosti o certifikát -letsencrypt_eacmedns=Pouze oficiální klient Let's Encrypt podporuje ověření založené na DNS -letsencrypt_eacmecertbot=Ověření Certbot podporuje pouze oficiální klient Let's Encrypt +letsencrypt_enative=Nativní klient ACME (certbot) byl v tomto systému dříve používán a musí být použit pro všechny budoucí žádosti o certifikát +letsencrypt_eacmedns=Pouze nativní klient ACME podporuje ověřování založené na DNS +letsencrypt_eacmecertbot=Pouze nativní klient ACME podporuje validaci Certbotu announce_hide=Skrýt toto oznámení alert_hide=Skrýt upozornění diff --git a/webmin/lang/da.auto b/webmin/lang/da.auto index 8f486413d..8c3ced35f 100644 --- a/webmin/lang/da.auto +++ b/webmin/lang/da.auto @@ -340,7 +340,6 @@ ssl_essl=Net::SSLeay perl-modulet ser ikke ud til at være installeret på dit s ssl_cpan=Alternativt kan du få Webmin til at downloade og installere det krævede Net::SSLeay Perl-modul til dig. ssl_emessage=Fejlmeddelelsen fra Perl var : $1 ssl_desc1=Værten, som Webmin kører på, ser ud til at have SSLeay Perl-modulet installeret. Ved hjælp af dette understøtter Webmin SSL-krypteret kommunikation mellem din browser og serveren. Hvis du får adgang til din Webmin-server over internettet, skal du bestemt overveje at bruge SSL til at forhindre, at en angriber fanger din Webmin-adgangskode. -ssl_desc2=Advarsel - tænd kun for SSL-support, hvis du har en browser, der understøtter SSL, og der ikke er nogen firewall, der blokerer https anmodninger mellem din browser og Webmin-værten. ssl_header=SSL support ssl_on=Aktivér SSL? ssl_key=Privat nøglefil @@ -351,6 +350,7 @@ ssl_deny=SSL-protokollversioner, der skal afvises ssl_compression=Tillad komprimerede SSL-forbindelser? ssl_honorcipherorder=Tvinge brug af serverdefineret chifferordre? ssl_extracas=Yderligere certifikatfiler
(for kædede certifikater) +ssl_enforce=Håndhæv SSL ssl_hsts=Håndhæv SSL med HSTS-header ssl_redirect=Viderestille ikke-SSL-anmodninger til SSL-tilstand? ssl_extracasdef=Samme som globale SSL-indstillinger @@ -410,7 +410,7 @@ ssl_tabcreate=Selvunderskrevet certifikat ssl_tabcsr=Anmodning om certifikatsignering ssl_tabupload=Upload certifikat ssl_tabcurrent=Aktuelt certifikat -ssl_tablets=Lad os kryptere +ssl_tablets=SSL-udbyder ssl_cheader=Detaljer om det aktuelle certifikat ssl_typeself=Selvsigneret ssl_typereal=Signeret af CA @@ -422,14 +422,14 @@ ssl_edownload=Kunne ikke udtrække PEM-data fra certifikatet ssl_csralready=Se den nyeste nøgle og CSR .. ssl_already1=Tidligere genereret privat nøgle : ssl_already2=Tidligere genereret certifikatsigneringsanmodning : -ssl_letsdesc=Let's Encrypt er en gratis, automatiseret og åben certifikatmyndighed, der kan bruges til at generere et SSL-certifikat til brug af Webmin. -ssl_letserr=Desværre kan Let's Encrypt ikke bruges på dit system: $1. -ssl_letserr2=Kontroller alternativt siden modulkonfiguration for at sikre, at du bruger den rigtige sti til kommandoen letsencrypt. -ssl_letsdesc2=Denne side kan bruges til at anmode om et nyt certifikat, som vil overskrive alle andre aktuelt konfigurerede i Webmin. Let's Encrypt-tjenesten kræver dog, at dit ejerskab af certifikatdomænet valideres ved at kontrollere, at dette system er vært for webstedet for domænet. Dette gøres ved at placere en lille midlertidig fil i webstedets dokumentmappe. +ssl_letsdesc=Denne formular giver dig mulighed for at anmode om et betroet SSL-certifikat til Webmin fra en ACME-kompatibel udbyder, såsom Let's Encrypt. +ssl_letserr=Desværre kan dette system ikke anmode om certifikater fra en SSL-udbyder: $1. +ssl_letserr2=Alternativt kan du tjekke siden modulkonfiguration for at sikre, at du bruger den korrekte sti til den konfigurerede ACME-klientkommando. +ssl_letsdesc2=Det nye certifikat erstatter det, der i øjeblikket er konfigureret i Webmin. Før det kan udstedes, skal ACME-udbyderen verificere kontrollen over hvert værtsnavn ved hjælp af enten en midlertidig fil i webstedets dokumentmappe eller en midlertidig DNS TXT-post. ssl_letsheader=Indstillinger for nyt SSL-certifikat ssl_letsdoms=Værtsnavne til certifikat ssl_subset=Vil du springe ikke-verificerbare værtsnavne over? -ssl_letsmode=Lad os kryptere valideringsmetoden +ssl_letsmode=Domænevalideringsmetode ssl_letsmode0=Apache virtuel vært, der matcher værtsnavn ssl_letsmode1=Valgt virtuel Apache-vært ssl_letsmode2=Anden webserver dokumentmappe @@ -440,9 +440,17 @@ ssl_letsonly=Bare opdater fornyelse ssl_usewebmin=Kopiere ny nøgle og certifikat til Webmin? ssl_letsrenew=Måneder mellem automatisk fornyelse ssl_letsnotrenew=Forny kun manuelt -ssl_staging=Lad os kryptere server -ssl_staging0=Ægte +ssl_staging=Udbyderserver +ssl_staging0=Produktion ssl_staging1=Iscenesættelse (kun test) +ssl_acmeopts=Udbyderindstillinger +ssl_acmeextra=Vis avancerede indstillinger +ssl_acmedir=Brugerdefineret ACME-mappe-URL +ssl_acmedirdesc=Hvis den er indstillet, tilsidesætter dette standardudbyderserveren ovenfor. +ssl_acmekid=Nøgle-ID for ekstern kontobinding +ssl_acmekiddesc=Valgfrit. Nogle ACME-udbydere kræver dette ud over katalog-URL'en. +ssl_acmehmac=Ekstern kontobinding HMAC-nøgle +ssl_acmehmacdesc=Valgfrit. Kræver den indbyggede Certbot-klient, når den bruges. newkey_err=Kunne ikke oprette SSL-nøgle newkey_ecn=Manglende eller ugyldigt servernavn @@ -664,13 +672,14 @@ session_pmode0=Nægt altid brugere med udløbne adgangskoder session_pmode1=Tillad altid brugere med udløbne adgangskoder session_pmode2=Bed brugere med udløbne adgangskoder om at indtaste et nyt session_md5=Webmin adgangskode hashing format +session_rpc_timeout=RPC-sessionstimeout +session_erpc_timeout=RPC-sessionstimeout mangler eller skal være et tal større end 0 session_md5off=Bestem automatisk session_md5on=Brug MD5 hashing-format session_sha512=Brug SHA512 hashing-format session_yescrypt=Brug yescrypt hashing-format session_emd5mod=MD5-hash-format kan ikke bruges, da Perl $1-modulet ikke er installeret -session_esha512mod=SHA512 hashing-format kan ikke bruges, da Perl $1-modulet ikke er installeret -session_eyescrypt=yescrypt hashing-format kan ikke bruges, da Perl $1-modulet ikke er installeret +session_edigestcrypt=Hashingformatet $1 kan ikke bruges, fordi systemets crypt-funktion ikke understøtter det session_blocklock=Lås også brugere med mislykkede login session_passapi=Vil du aktivere fjernadgangskode til ændring af adgangskode? session_passapi0=API deaktiveret @@ -746,13 +755,14 @@ log_delete_webmincron=Slet $1 planlagte funktioner log_run_webmincron=Ran $1 planlagte funktioner log_save_webmincron=Opdateret planlagt funktion i modul $1 log_onedelete_webmincron=Slet planlagt funktion i modul $1 -log_letsencrypt=Anmodet om nyt SSL-certifikat fra Let's Encrypt -log_letsencryptdns=Oprettet Let's Encrypt DNS-post til $1 -log_letsencryptcleanup=Fjernet Lad os kryptere DNS-post for $1 +log_letsencrypt=Anmodede om nyt SSL-certifikat fra en ACME-udbyder +log_letsencryptdns=Oprettede ACME DNS-post for $1 +log_letsencryptcleanup=Fjernede ACME DNS-post for $1 themes_title=Webmin-temaer themes_desc=Temaer kontrollerer udseendet af Webmin-brugergrænsefladen, herunder ikoner, farver, baggrunde og layout af sider. Markeringsfeltet nedenfor kan bruges til at vælge et af de temaer, der er installeret på dit system. themes_sel=Aktuelt tema : +themes_configure=Åbn temakonfigurationssiden themes_default=Gamle Webmin-tema themes_none=Ingen - lad temaet bestemme themes_change=Lave om @@ -1104,6 +1114,7 @@ sendmail_authdef=Standard (i øjeblikket Cram-MD5) sendmail_from=Fra adresse til e-mail fra Webmin sendmail_fromdef=Standard ($1) sendmail_fromaddr=Adresse +sendmail_name=Vist navn sendmail_toaddr=Standard destinationsadresse for meddelelser sendmail_to_def=Ingen sæt sendmail_etoaddr=Manglende eller forkert formateret destinationsadresse @@ -1205,6 +1216,7 @@ twofactor_enrolllink=Du kan nu tilmelde dig tofaktorautentisering i $2. twofactor_etotpmodule=Perl-modulet $1 nødvendigt til tofaktorautentisering er ikke installeret. Brug siden Perl Modules i Webmin til at installere den. twofactor_qrcode=Indtast den hemmelige kode $1 i TOTP-appen, eller scan QR-koden nedenfor. +twofactor_qrcode_manual=Indtast den hemmelige kode $1 i TOTP-appen, og opsæt den manuelt, da generering af QR-koder ikke understøttes på dette system. twofactor_etotpid=Ugyldig TOTP base32-kodet hemmelighed twofactor_etotptoken=TOTP-token skal være et tal twofactor_etotpmatch=Forkert OTP-kode @@ -1214,9 +1226,9 @@ twofactor_secret0=Brug en tast på 16 tegn twofactor_esecret=Den hemmelige nøgle skal være nøjagtigt 16 tegn lang og kun indeholde bogstaver og tal twofactor_esession=To-faktor-godkendelse kan ikke bruges, medmindre session-baseret godkendelse er aktiv -letsencrypt_title=Lad os kryptere certifikatanmodning +letsencrypt_title=Anmodning om SSL-udbydercertifikat letsencrypt_err=Kunne ikke anmode om certifikat -letsencrypt_ecmds=Hverken kommandoen Let's Encrypt-klient certbot eller python blev fundet på dit system +letsencrypt_ecmds=Hverken den native ACME-klientkommando certbot eller python kommandoen blev fundet på dit system letsencrypt_epythonmod=Python-modulet $1 nødvendigt af den indbyggede Let's Encrypt-klient er ikke installeret letsencrypt_epythonver=Kunne ikke hente Python-versionen : $1 letsencrypt_epythonver2=Python version $1 eller derover er påkrævet, men du har kun version $2. @@ -1224,6 +1236,10 @@ letsencrypt_certbot=Certbot letsencrypt_edroot=Den virtuelle Apache-vært $1 har intet dokumentmappe! letsencrypt_edom=Manglende eller ugyldigt domænenavn letsencrypt_erenew=Manglende eller ikke-numerisk fornyelsesinterval +letsencrypt_eacmedir=Manglende eller ugyldig ACME-mappe-URL +letsencrypt_eeabdir=En ACME-mappe-URL skal indtastes, når der bruges ekstern kontobinding +letsencrypt_eeabpair=Både nøgle-ID'et for den eksterne kontobinding og HMAC-nøglen skal indtastes +letsencrypt_eeabnative=Ekstern kontobinding kan kun bruges, når den native ACME-klient er installeret letsencrypt_ewebroot=Webstedets dokumentmappe findes ikke letsencrypt_evhost=Der blev ikke fundet nogen virtuel vært, der matchede $1 letsencrypt_efull=Forventet fuld certifikatfil $1 blev ikke fundet @@ -1246,9 +1262,9 @@ letsencrypt_echain=Kunne ikke hente kædet certifikat : $1 letsencrypt_echain2=Kædet certifikat downloadet fra $1 er tomt letsencrypt_ecsr=Kunne ikke generere CSR : $1 letsencrypt_ekeygen=Kunne ikke generere privat nøgle : $1 -letsencrypt_enative=Den oprindelige Let's Encrypt-klient (certbot) blev tidligere brugt på dette system og skal bruges til alle fremtidige certifikatanmodninger -letsencrypt_eacmedns=Kun den officielle Let's Encrypt-klient understøtter DNS-baseret validering -letsencrypt_eacmecertbot=Kun den officielle Let's Encrypt-klient understøtter Certbot-validering +letsencrypt_enative=Den native ACME-klient (certbot) blev tidligere brugt på dette system og skal bruges til alle fremtidige certifikatanmodninger +letsencrypt_eacmedns=Kun den native ACME-klient understøtter DNS-baseret validering +letsencrypt_eacmecertbot=Kun den native ACME-klient understøtter Certbot-validering announce_hide=Skjul denne meddelelse alert_hide=Skjul advarsel diff --git a/webmin/lang/de b/webmin/lang/de index 06a1c5c3b..b2515e055 100644 --- a/webmin/lang/de +++ b/webmin/lang/de @@ -340,7 +340,6 @@ ssl_essl=Das Perl-Modul Net::SSLeay scheint auf Ihrem System nicht installiert z ssl_cpan=Alternativ kann Webmin das erforderliche Perl-Modul Net::SSLeay herunterladen und installieren. ssl_emessage=Die Fehlermeldung von Perl lautete: $1 ssl_desc1=Auf dem System, auf dem Webmin ausgeführt wird, scheint das Perl-Modul SSLeay installiert zu sein. Damit kann Webmin SSL-verschlüsselte Kommunikation zwischen Ihrem Browser und dem Server ermöglichen. Wenn Sie auf Webmin über das Internet zugreifen, sollten Sie unbedingt SSL aktivieren, um zu verhindern, dass Angreifer Ihr Webmin-Passwort abfangen. -ssl_desc2=Warnung – aktivieren Sie SSL nur, wenn Ihr Browser es unterstützt und keine Firewall https-Verbindungen zwischen Browser und Webmin-Host blockiert. ssl_header=SSL-Unterstützung ssl_on=SSL aktivieren? ssl_key=Private Schlüsseldatei @@ -410,7 +409,6 @@ ssl_tabcreate=Selbstsigniertes Zertifikat ssl_tabcsr=Zertifikatsanfrage ssl_tabupload=Zertifikat hochladen ssl_tabcurrent=Aktuelles Zertifikat -ssl_tablets=Let's Encrypt ssl_cheader=Details des aktuellen Zertifikats ssl_typeself=Selbstsigniert ssl_typereal=Von CA signiert @@ -422,14 +420,9 @@ ssl_edownload=Extraktion der PEM-Daten aus dem Zertifikat fehlgeschlagen ssl_csralready=Zuletzt erstellten Schlüssel und CSR anzeigen .. ssl_already1=Zuvor erstellter privater Schlüssel: ssl_already2=Zuvor erstellte Zertifikatsanfrage: -ssl_letsdesc=Let's Encrypt ist eine kostenlose, automatisierte und offene Zertifizierungsstelle, mit der ein SSL-Zertifikat für Webmin generiert werden kann. -ssl_letserr=Leider kann Let's Encrypt auf Ihrem System nicht verwendet werden: $1. -ssl_letserr2=Alternativ überprüfen Sie die Seite Modulkonfiguration, um sicherzustellen, dass der Pfad zum Befehl letsencrypt korrekt ist. -ssl_letsdesc2=Auf dieser Seite kann ein neues Zertifikat angefordert werden, das alle aktuell in Webmin konfigurierten ersetzt. Der Dienst Let's Encrypt erfordert jedoch die Validierung der Inhaberschaft der Domain durch Nachweis, dass dieses System die Website für die Domain hostet. Dies erfolgt durch Platzierung einer kleinen temporären Datei im Dokumentenverzeichnis der Website. ssl_letsheader=Optionen für neues SSL-Zertifikat ssl_letsdoms=Hostnamen für das Zertifikat ssl_subset=Nicht verifizierbare Hostnamen überspringen? -ssl_letsmode=Validierungsmethode von Let's Encrypt ssl_letsmode0=Apache-virtueller Host, passend zum Hostnamen ssl_letsmode1=Ausgewählter Apache-virtueller Host ssl_letsmode2=Dokumentenverzeichnis eines anderen Webservers @@ -440,9 +433,6 @@ ssl_letsonly=Nur Erneuerung aktualisieren ssl_usewebmin=Neuen Schlüssel und Zertifikat nach Webmin kopieren? ssl_letsrenew=Monate zwischen automatischer Erneuerung ssl_letsnotrenew=Nur manuell erneuern -ssl_staging=Let's-Encrypt-Server -ssl_staging0=Echt -ssl_staging1=Staging (nur Test) newkey_err=Erstellen des SSL-Schlüssels fehlgeschlagen newkey_ecn=Fehlender oder ungültiger Servername @@ -669,8 +659,6 @@ session_md5on=MD5-Hash-Format verwenden session_sha512=SHA512-Hash-Format verwenden session_yescrypt=yescrypt-Hash-Format verwenden session_emd5mod=MD5-Hash-Format kann nicht verwendet werden, da Perl-Modul $1 nicht installiert ist -session_esha512mod=SHA512-Hash-Format kann nicht verwendet werden, da Perl-Modul $1 nicht installiert ist -session_eyescrypt=yescrypt-Hash-Format kann nicht verwendet werden, da Perl-Modul $1 nicht installiert ist session_blocklock=Auch Benutzer mit fehlgeschlagenen Anmeldungen sperren session_passapi=Remote-Passwortänderungs-API aktivieren? session_passapi0=API deaktiviert @@ -746,9 +734,6 @@ log_delete_webmincron=$1 geplante Funktionen gelöscht log_run_webmincron=$1 geplante Funktionen ausgeführt log_save_webmincron=Geplante Funktion im Modul $1 aktualisiert log_onedelete_webmincron=Geplante Funktion im Modul $1 gelöscht -log_letsencrypt=Neues SSL-Zertifikat von Let's Encrypt angefordert -log_letsencryptdns=Let's-Encrypt-DNS-Eintrag für $1 erstellt -log_letsencryptcleanup=Let's-Encrypt-DNS-Eintrag für $1 entfernt themes_title=Webmin-Designs themes_desc=Designs steuern das Erscheinungsbild der Webmin-Oberfläche, einschließlich Symbole, Farben, Hintergründe und Seitenlayout. Mit dem Auswahlfeld unten können Sie eines der auf Ihrem System installierten Designs auswählen. @@ -1214,9 +1199,6 @@ twofactor_secret0=16-stelligen Schlüssel verwenden twofactor_esecret=Der geheime Schlüssel muss genau 16 Zeichen lang sein und darf nur Buchstaben und Zahlen enthalten twofactor_esession=Zwei-Faktor-Authentifizierung kann nur verwendet werden, wenn die sitzungsbasierte Authentifizierung aktiv ist -letsencrypt_title=Let's Encrypt-Zertifikatsanforderung -letsencrypt_err=Zertifikatsanforderung fehlgeschlagen -letsencrypt_ecmds=Weder der Let's Encrypt-Befehl certbot noch der Befehl python wurde auf Ihrem System gefunden letsencrypt_epythonmod=Das vom integrierten Let's Encrypt-Client benötigte Python-Modul $1 ist nicht installiert letsencrypt_epythonver=Abfrage der Python-Version fehlgeschlagen: $1 letsencrypt_epythonver2=Python-Version $1 oder neuer wird benötigt, aber auf Ihrem System ist nur Version $2 vorhanden. @@ -1246,9 +1228,6 @@ letsencrypt_echain=Herunterladen des verketteten Zertifikats fehlgeschlagen: $1 letsencrypt_echain2=Verkettetes Zertifikat von $1 ist leer letsencrypt_ecsr=Erzeugen der CSR fehlgeschlagen: $1 letsencrypt_ekeygen=Erzeugen des privaten Schlüssels fehlgeschlagen: $1 -letsencrypt_enative=Der native Let's Encrypt-Client (certbot) wurde zuvor auf diesem System verwendet und muss für alle zukünftigen Anfragen genutzt werden -letsencrypt_eacmedns=Nur der offizielle Let's Encrypt-Client unterstützt DNS-basierte Validierung -letsencrypt_eacmecertbot=Nur der offizielle Let's Encrypt-Client unterstützt Certbot-Validierung announce_hide=Diese Ankündigung ausblenden alert_hide=Benachrichtigung ausblenden diff --git a/webmin/lang/de.auto b/webmin/lang/de.auto new file mode 100644 index 000000000..612aa3932 --- /dev/null +++ b/webmin/lang/de.auto @@ -0,0 +1,44 @@ +ssl_enforce=SSL erzwingen +ssl_tablets=SSL-Anbieter +ssl_letsdesc=Mit diesem Formular können Sie ein vertrauenswürdiges SSL-Zertifikat für Webmin von einem ACME-kompatiblen Anbieter wie Let's Encrypt anfordern. +ssl_letserr=Leider kann dieses System keine Zertifikate von einem SSL-Anbieter anfordern: $1. +ssl_letserr2=Alternativ können Sie auf der Modulkonfigurationsseite überprüfen, ob Sie den richtigen Pfad zum konfigurierten ACME-Clientbefehl verwenden. + +ssl_letsdesc2=Das neue Zertifikat ersetzt das aktuell in Webmin konfigurierte. Bevor es ausgestellt werden kann, muss der ACME-Anbieter die Kontrolle über jeden Hostnamen entweder mithilfe einer temporären Datei im Dokumentenverzeichnis der Website oder eines temporären DNS-TXT-Eintrags überprüfen. +ssl_letsmode=Domänenvalidierungsmethode +ssl_staging=Provider-Server +ssl_staging0=Produktion +ssl_staging1=Staging (nur Test) +ssl_acmeopts=Anbietereinstellungen +ssl_acmeextra=Erweiterte Einstellungen anzeigen +ssl_acmedir=Benutzerdefinierte ACME-Verzeichnis-URL +ssl_acmedirdesc=Falls diese Option aktiviert ist, wird der oben genannte Standard-Provider-Server überschrieben. +ssl_acmekid=Schlüssel-ID für die externe Kontobindung +ssl_acmekiddesc=Optional. Einige ACME-Anbieter benötigen dies zusätzlich zur Verzeichnis-URL. +ssl_acmehmac=HMAC-Schlüssel für die externe Kontobindung +ssl_acmehmacdesc=Optional. Erfordert bei Verwendung den nativen Certbot-Client. + +session_rpc_timeout=RPC-Sitzungstimeout +session_erpc_timeout=Das Timeout für die RPC-Sitzung fehlt oder muss eine Zahl größer als 0 sein +session_edigestcrypt=Das Hash-Format $1 kann nicht verwendet werden, da die Systemfunktion crypt es nicht unterstützt + +log_letsencrypt=Neues SSL-Zertifikat von einem ACME-Anbieter angefordert +log_letsencryptdns=ACME-DNS-Eintrag für $1 erstellt +log_letsencryptcleanup=ACME-DNS-Eintrag für $1 entfernt + +themes_configure=Theme-Konfigurationsseite öffnen + +sendmail_name=Anzeigename + +twofactor_qrcode_manual=Geben Sie den Geheimcode $1 in der TOTP-App ein und richten Sie ihn manuell ein, da die QR-Code-Generierung auf diesem System nicht unterstützt wird. + +letsencrypt_title=SSL-Anbieterzertifikat anfordern +letsencrypt_err=Zertifikat konnte nicht angefordert werden +letsencrypt_ecmds=Weder der native ACME-Clientbefehl certbot noch der python -Befehl wurden auf Ihrem System gefunden +letsencrypt_eacmedir=Fehlende oder ungültige ACME-Verzeichnis-URL +letsencrypt_eeabdir=Bei Verwendung der externen Kontobindung muss eine ACME-Verzeichnis-URL eingegeben werden +letsencrypt_eeabpair=Sowohl die Schlüssel-ID für die externe Kontobindung als auch der HMAC-Schlüssel müssen eingegeben werden +letsencrypt_eeabnative=Die externe Kontobindung kann nur verwendet werden, wenn der native ACME-Client installiert ist +letsencrypt_enative=Der native ACME-Client (certbot) wurde zuvor auf diesem System verwendet und muss für alle zukünftigen Zertifikatsanforderungen verwendet werden +letsencrypt_eacmedns=Nur der native ACME-Client unterstützt die DNS-basierte Validierung +letsencrypt_eacmecertbot=Nur der native ACME-Client unterstützt die Certbot-Validierung diff --git a/webmin/lang/el.auto b/webmin/lang/el.auto index 445cd1baf..07565e856 100644 --- a/webmin/lang/el.auto +++ b/webmin/lang/el.auto @@ -340,7 +340,6 @@ ssl_essl=Η μονάδα Net::SSLeay perl δεν φαίνεται να είνα ssl_cpan=Εναλλακτικά, μπορείτε να κάνετε Webmin λήψη και εγκατάσταση της απαιτούμενης μονάδας Net::SSLeay Perl για εσάς. ssl_emessage=Το μήνυμα σφάλματος από το Perl ήταν : $1 ssl_desc1=Ο κεντρικός υπολογιστής στον οποίο εκτελείται το Webmin φαίνεται να έχει εγκαταστήσει τη μονάδα SSLEay Perl. Χρησιμοποιώντας αυτό το Webmin υποστηρίζει κρυπτογραφημένη επικοινωνία SSL μεταξύ του προγράμματος περιήγησης και του διακομιστή. Εάν έχετε πρόσβαση στο διακομιστή Webmin σας μέσω του Διαδικτύου, τότε σίγουρα θα πρέπει να εξετάσετε τη χρήση SSL για να αποτρέψετε έναν εισβολέα να καταγράψει τον κωδικό σας Webmin. -ssl_desc2=Προειδοποίηση - ενεργοποιήστε την υποστήριξη SSL μόνο εάν διαθέτετε πρόγραμμα περιήγησης που υποστηρίζει SSL και δεν υπάρχει κανένα τείχος προστασίας που να εμποδίζει αιτήσεις https μεταξύ του προγράμματος περιήγησης και του κεντρικού υπολογιστή Webmin. ssl_header=Υποστήριξη SSL ssl_on=Ενεργοποίηση SSL; ssl_key=Αρχείο ιδιωτικού κλειδιού @@ -351,6 +350,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 σε παγκόσμιο επίπεδο @@ -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(، و هيچ دروازه آتشي جهت مسدود کردن درخواستهاي بين مرورگر شما و ميزبان وب وجود نداشته باشد. ssl_header=پشتيباني از SSL ssl_on=آيا اگر SSL در دسترس است، فعال شود؟ ssl_key=پرونده کليد اختصاصي diff --git a/webmin/lang/fa.auto b/webmin/lang/fa.auto index f1e3271ca..653521c41 100644 --- a/webmin/lang/fa.auto +++ b/webmin/lang/fa.auto @@ -139,6 +139,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=SSL را با هدر HSTS اجرا کنید ssl_extracasdef=تنظیمات SSL جهانی ssl_extracasnone=هیچ یک برای این آدرس IP نیست @@ -176,7 +177,7 @@ ssl_tabcreate=گواهی خود امضا شده ssl_tabcsr=درخواست امضای گواهی ssl_tabupload=گواهی بارگذاری کنید ssl_tabcurrent=گواهی فعلی -ssl_tablets=بیایید رمزگذاری کنیم +ssl_tablets=ارائه دهنده SSL ssl_cheader=جزئیات گواهی فعلی ssl_typeself=خود امضا کرد ssl_typereal=امضا شده توسط CA @@ -188,15 +189,15 @@ ssl_edownload=استخراج داده های PEM از گواهی انجام نش ssl_csralready=مشاهده آخرین کلید و CSR .. ssl_already1=کلید خصوصی قبلی تولید شده : ssl_already2=درخواست امضای مجوز قبلاً تولید شده : -ssl_letsdesc=Let's Encrypt یک مجوز مجوز رایگان ، خودکار و باز است که می تواند برای تولید گواهینامه SSL برای استفاده توسط 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_letsdesc=این فرم به شما امکان می‌دهد یک گواهی SSL معتبر برای وب‌مین از یک ارائه‌دهنده سازگار با ACME مانند Let's Encrypt درخواست کنید. +ssl_letserr=متأسفانه، این سیستم نمی‌تواند از ارائه‌دهنده SSL درخواست گواهی کند: $1. +ssl_letserr2=همچنین، صفحه پیکربندی ماژول را بررسی کنید تا مطمئن شوید که از مسیر صحیح برای دستور پیکربندی‌شده‌ی کلاینت ACME استفاده می‌کنید. -ssl_letsdesc2=از این صفحه می توان برای درخواست گواهی جدید استفاده کرد ، که سایر موارد دیگری را که در حال حاضر در Webmin پیکربندی شده اند بازنویسی می کند. با این حال ، سرویس Let Encrypt نیاز دارد با بررسی اینکه این سیستم میزبان وب سایت دامنه است ، مالکیت شما در حوزه گواهی را تأیید کنید. این کار با قرار دادن یک پرونده موقت کوچک در فهرست اسناد وب سایت انجام می شود. +ssl_letsdesc2=گواهی جدید جایگزین گواهی فعلی پیکربندی‌شده در Webmin خواهد شد. قبل از صدور، ارائه‌دهنده ACME باید کنترل هر نام میزبان را با استفاده از یک فایل موقت در فهرست اسناد وب‌سایت یا یک رکورد موقت DNS TXT تأیید کند. ssl_letsheader=گزینه هایی برای گواهی SSL جدید ssl_letsdoms=نام میزبان برای گواهی ssl_subset=از نام‌های میزبان غیرقابل تأیید صرف نظر کنید؟ -ssl_letsmode=بیایید روش اعتبار سنجی را رمزگذاری کنیم +ssl_letsmode=روش اعتبارسنجی دامنه ssl_letsmode0=میزبان مجازی آپاچی مطابق با نام میزبان ssl_letsmode1=میزبان مجازی آپاچی انتخاب شده است ssl_letsmode2=دایرکتوری اسناد وب سرور دیگر @@ -207,9 +208,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 سفارشی +ssl_acmedirdesc=اگر تنظیم شود، این گزینه، سرور ارائه‌دهنده پیش‌فرض بالا را لغو می‌کند. +ssl_acmekid=شناسه کلید اتصال حساب خارجی +ssl_acmekiddesc=اختیاری. برخی از ارائه‌دهندگان ACME علاوه بر URL دایرکتوری، این را نیز الزامی می‌دانند. +ssl_acmehmac=کلید HMAC اتصال حساب خارجی +ssl_acmehmacdesc=اختیاری. در صورت استفاده، به کلاینت بومی Certbot نیاز دارد. newkey_ecns=هیچ نام سرور وارد نشده است newkey_ecountry=کد کشور باید دو حرف باشد @@ -281,13 +290,14 @@ session_ecmd=فرمان تغییر گذرواژه یا نامعتبر است session_banner=قبل از ورود بنر session_pmodedesc3=خط مشی انقضاء رمز ورود session_md5=قالب هشدار رمز عبور وبمین +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 غیرفعال شده است @@ -325,10 +335,11 @@ 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=گواهی SSL جدید را از Let Encrypt درخواست کردیم -log_letsencryptdns=Created Let's Encrypt DNS record for $1 -log_letsencryptcleanup=Removed Let's Encrypt DNS record for $1 +log_letsencrypt=درخواست گواهی SSL جدید از ارائه دهنده ACME +log_letsencryptdns=رکورد ACME DNS برای $1 ایجاد شد +log_letsencryptcleanup=رکورد ACME DNS برای $1 حذف شد +themes_configure=صفحه پیکربندی قالب را باز کنید themes_none=هیچ کدام - اجازه دهید موضوع تصمیم بگیرد themes_overdesc=پوشش ها با تغییر رنگ ها ، پس زمینه ها و نمادها ظاهر یک موضوع را تغییر می دهند. آنها طرح را تغییر نمی دهند. themes_overlay=پوشش فعلی : @@ -597,6 +608,7 @@ sendmail_authdef=پیش فرض (در حال حاضر Cram-MD5) sendmail_from=از آدرس ایمیل برای Webmin sendmail_fromdef=Default ($1) sendmail_fromaddr=نشانی +sendmail_name=نام نمایشی sendmail_toaddr=آدرس مقصد پیش‌فرض برای اعلان‌ها sendmail_to_def=هیچ کدام تنظیم نشده است sendmail_etoaddr=آدرس مقصد وجود ندارد یا فرمت نادرست است @@ -698,6 +710,7 @@ twofactor_enrolllink=You can now enroll for two-factor authentication in the $2. twofactor_etotpmodule=The Perl module $1 needed for two-factor authentication is not installed. Use the Perl Modules page in Webmin to install it. twofactor_qrcode=کد مخفی $1 را در برنامه TOTP وارد کنید، یا کد QR زیر را اسکن کنید. +twofactor_qrcode_manual=کد مخفی $1 را در برنامه TOTP وارد کنید و آن را به صورت دستی تنظیم کنید، زیرا تولید کد QR در این سیستم پشتیبانی نمی‌شود. twofactor_etotpid=راز رمزگذاری نشده TOTP base32 نامعتبر است twofactor_etotptoken=توکن TOTP باید یک عدد باشد twofactor_etotpmatch=کد OTP نادرست است @@ -707,9 +720,9 @@ twofactor_secret0=از کلید 16 کاراکتر استفاده کنید twofactor_esecret=کلید مخفی باید دقیقا 16 نویسه داشته باشد و فقط حروف و اعداد را در خود جای دهد twofactor_esession=احراز هویت دو عاملی نمی تواند مورد استفاده قرار گیرد مگر اینکه احراز هویت مبتنی بر جلسه فعال باشد -letsencrypt_title=بیایید درخواست گواهی را رمزگذاری کنیم -letsencrypt_err=درخواست گواهی انجام نشد -letsencrypt_ecmds=Neither the Let's Encrypt client command certbot or the python command were found on your system +letsencrypt_title=درخواست گواهی SSL از ارائه دهنده +letsencrypt_err=درخواست گواهی ناموفق بود +letsencrypt_ecmds=نه دستور certbot کلاینت ACME و نه دستور python هیچ‌کدام در سیستم شما یافت نشدند letsencrypt_epythonmod=The Python module $1 needed by the built-in Let's Encrypt 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. @@ -717,6 +730,10 @@ letsencrypt_certbot=گواهی نامه letsencrypt_edroot=The Apache virtual host $1 has no document directory! letsencrypt_edom=نام دامنه وجود ندارد یا نامعتبر است letsencrypt_erenew=فاصله تمدید یا غیر عددی فاصله +letsencrypt_eacmedir=نشانی اینترنتی دایرکتوری ACME موجود نیست یا نامعتبر است +letsencrypt_eeabdir=هنگام استفاده از اتصال حساب خارجی، باید یک آدرس اینترنتی دایرکتوری ACME وارد شود +letsencrypt_eeabpair=هم شناسه کلید اتصال حساب خارجی و هم کلید HMAC باید وارد شوند +letsencrypt_eeabnative=اتصال حساب خارجی فقط زمانی قابل استفاده است که کلاینت ACME بومی نصب شده باشد letsencrypt_ewebroot=فهرست اسناد وب سایت وجود ندارد letsencrypt_evhost=No virtual host matching $1 was found letsencrypt_efull=Expected full certificate file $1 was not found @@ -739,9 +756,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=مشتری بومی Let Encrypt (certbot) قبلاً در این سیستم استفاده شده بود ، و باید برای کلیه درخواست های گواهی آینده مورد استفاده قرار گیرد -letsencrypt_eacmedns=فقط مشتری رسمی Letry 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/fi.auto b/webmin/lang/fi.auto index 4c12d35eb..84861bf84 100644 --- a/webmin/lang/fi.auto +++ b/webmin/lang/fi.auto @@ -340,7 +340,6 @@ ssl_essl=Net::SSLeay perl -moduulia ei näytä olevan asennettuna järjestelmä ssl_cpan=Voit vaihtoehtoisesti antaa Webmin ladata ja asentaa vaaditun Net::SSLeay Perl -moduulin. ssl_emessage=Perlin virheviesti : $1 ssl_desc1=Isäntänä, jolla Webmin toimii, näyttää olevan asennettu SSLeay Perl -moduuli. Tätä käyttämällä Webmin tukee SSL-salattua tiedonsiirtoa selaimesi ja palvelimen välillä. Jos käytät Webmin-palvelinta Internetin kautta, sinun kannattaa ehdottomasti harkita SSL: n käyttöä estämään hyökkääjää sieppaamasta Webmin-salasanaasi. -ssl_desc2=Varoitus - ota SSL-tuki käyttöön vain, jos sinulla on SSL: tä tukeva selain, ja selaimesi ja Webmin-palvelimen välillä ei ole palomuurin estäviä https -pyyntöjä. ssl_header=SSL-tuki ssl_on=Ota SSL käyttöön? ssl_key=Yksityinen avaintiedosto @@ -351,6 +350,7 @@ ssl_deny=Hylättävät SSL-protokollaversiot ssl_compression=Sallitaanko pakatut SSL-yhteydet? ssl_honorcipherorder=Pakota palvelimen määrittämä salausjärjestys? ssl_extracas=Lisäsertifikaattitiedostot
(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 クライアントコマンド certbotpython コマンドが見つかりませんでした 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クライアントコマンドcertbotpythonコマンドも、システム上で見つかりませんでした。 +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 客户端命令 certbotpython 命令 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 原生客户端命令certbotpython命令。 +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=在您的系統上找不到“讓我們加密”客戶端命令certbotpython命令 +letsencrypt_ecmds=您的系統中找不到 ACME 原生客戶端指令certbotpython指令。 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).""),"

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