Files
webmin/kea-dhcp/edit_ddns.cgi
Ilia Ross 184887d365
Some checks failed
Tests / prove (push) Has been cancelled
Build / build (push) Has been cancelled
Close inactive / close-inactive (push) Has been cancelled
Fix to use direct ACL checks in Kea DHCP module
*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.
2026-05-30 02:53:48 +02:00

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'});