mirror of
https://github.com/webmin/webmin.git
synced 2026-06-09 22:40:23 +01:00
*Note: Removes Kea-specific ACL wrapper helpers and switches ACL editor/runtime checks to standard Webmin handling with direct supplied ACL values and get_module_acl checks.
103 lines
4.2 KiB
Perl
Executable File
103 lines
4.2 KiB
Perl
Executable File
#!/usr/local/bin/perl
|
|
# Edit settings for the Kea DHCP-DDNS daemon.
|
|
|
|
use strict;
|
|
use warnings;
|
|
require './kea-dhcp-lib.pl'; ## no critic
|
|
&ReadParse();
|
|
our (%in, %text);
|
|
&error_setup($text{'eacl_aviol'});
|
|
my %access = &get_module_acl();
|
|
&error("$text{'eacl_np'} $text{'eacl_peditddns'}")
|
|
if (!$access{'editddns'});
|
|
|
|
my $c = &kea_component('ddns');
|
|
my ($root, $err) = &kea_read_component_config($c);
|
|
&error($err) if ($err);
|
|
|
|
# D2 is a separate daemon shared by DHCPv4 and DHCPv6, so keep its settings
|
|
# outside the protocol-specific global DHCP pages.
|
|
&ui_print_header(undef, $text{'ddns_title'}, "", undef, 1, 1);
|
|
print &kea_comment_loss_warning($c);
|
|
print &ui_form_start("save_ddns.cgi", "post");
|
|
|
|
my @tabs = (
|
|
[ 'listener', $text{'tab_listener'} ],
|
|
[ 'zones', $text{'tab_zones'} ],
|
|
[ 'tsig', $text{'tab_tsig'} ],
|
|
[ 'logging', $text{'tab_logging'} ],
|
|
);
|
|
print &ui_tabs_start(\@tabs, "mode", $in{'mode'} || "listener", 1);
|
|
|
|
# The listener receives name-change requests from DHCPv4/DHCPv6 and exposes a
|
|
# local control socket for daemon management.
|
|
print &ui_tabs_start_tab("mode", "listener");
|
|
print &ui_div($text{'ddns_listener_desc'});
|
|
print &ui_alert_box($text{'ddns_listener_warn'}, "warn", undef, undef, "")
|
|
if (&kea_ddns_listener_non_loopback($root));
|
|
print &ui_alert_box($text{'ddns_listener_warn_loopback'}, "warn", undef, undef, "")
|
|
if (!&kea_ddns_listener_non_loopback($root) &&
|
|
&kea_ddns_listener_non_default_loopback($root));
|
|
print &ui_table_start($text{'ddns_listener'}, "width=100%", 4);
|
|
print &ui_table_row(&kea_field_hlink('ddns-ip-address',
|
|
$text{'ddns_ip_address'}),
|
|
&ui_textbox("ip_address", $root->{'ip-address'} || "", 24));
|
|
print &ui_table_row(&kea_field_hlink('ddns-port', $text{'ddns_port'}),
|
|
&ui_textbox("port", defined($root->{'port'}) ? $root->{'port'} : "",
|
|
8));
|
|
print &ui_table_row(&kea_field_hlink('ddns-timeout', $text{'ddns_timeout'}),
|
|
&ui_textbox("dns_server_timeout",
|
|
defined($root->{'dns-server-timeout'}) ?
|
|
$root->{'dns-server-timeout'} : "", 8));
|
|
print &ui_table_row(&kea_field_hlink('ncr-protocol',
|
|
$text{'ddns_ncr_protocol'}),
|
|
&ui_select("ncr_protocol", $root->{'ncr-protocol'} || "UDP",
|
|
&kea_select_options($root->{'ncr-protocol'}, $text{'socket_default'},
|
|
'UDP')));
|
|
print &ui_table_row(&kea_field_hlink('ncr-format', $text{'ddns_ncr_format'}),
|
|
&ui_select("ncr_format", $root->{'ncr-format'} || "JSON",
|
|
&kea_select_options($root->{'ncr-format'}, $text{'socket_default'},
|
|
'JSON')));
|
|
print &ui_table_end();
|
|
|
|
my $socket = ref($root->{'control-socket'}) eq 'HASH' ?
|
|
$root->{'control-socket'} : { };
|
|
print &ui_table_start($text{'control_socket'}, "width=100%", 4);
|
|
print &ui_table_row(&kea_field_hlink('control-socket-type',
|
|
$text{'control_socket_type'}),
|
|
&ui_select("control_socket_type", $socket->{'socket-type'} || "",
|
|
[ [ "", $text{'socket_default'} ],
|
|
[ "unix", "Unix" ] ]));
|
|
print &ui_table_row(&kea_field_hlink('control-socket-name',
|
|
$text{'control_socket_name'}),
|
|
&ui_textbox("control_socket_name", $socket->{'socket-name'} || "", 50));
|
|
print &ui_table_end();
|
|
print &ui_tabs_end_tab("mode", "listener");
|
|
|
|
# Forward and reverse DDNS domains tell D2 where to send DNS updates.
|
|
print &ui_tabs_start_tab("mode", "zones");
|
|
print &ui_div($text{'ddns_zones_desc'});
|
|
print &ui_subheading($text{'ddns_forward'});
|
|
&kea_ddns_domain_rows(&kea_ddns_domains($root, 'forward-ddns'), "fwd_");
|
|
print &ui_subheading($text{'ddns_reverse'});
|
|
&kea_ddns_domain_rows(&kea_ddns_domains($root, 'reverse-ddns'), "rev_");
|
|
print &ui_tabs_end_tab("mode", "zones");
|
|
|
|
# TSIG keys are referenced by update domains using key-name.
|
|
print &ui_tabs_start_tab("mode", "tsig");
|
|
print &ui_div($text{'ddns_tsig_desc'});
|
|
print &ui_subheading($text{'ddns_tsig_keys'});
|
|
&kea_tsig_key_rows($root->{'tsig-keys'}, "key_");
|
|
print &ui_tabs_end_tab("mode", "tsig");
|
|
|
|
# D2 uses the same Kea logger format as the DHCP daemons.
|
|
print &ui_tabs_start_tab("mode", "logging");
|
|
print &ui_div($text{'logging_desc'});
|
|
print &ui_subheading($text{'logging_loggers'});
|
|
&kea_logger_rows($root->{'loggers'}, "log_");
|
|
print &ui_tabs_end_tab("mode", "logging");
|
|
print &ui_tabs_end();
|
|
|
|
print &ui_form_end([ [ "save", $text{'save'} ] ]);
|
|
&ui_print_footer("index.cgi?mode=ddns", $text{'index_return'});
|