From ac68a0be0c402431183e94b4f2ac4d5b74b6e1cb Mon Sep 17 00:00:00 2001 From: Joe Cooper Date: Mon, 23 Mar 2026 21:36:29 -0500 Subject: [PATCH 1/3] Fix bind8 undefined warnings --- bind8/bind8-lib.pl | 16 ++++++++++------ bind8/conf_servers.cgi | 4 ++-- bind8/edit_recs.cgi | 1 + bind8/save_record.cgi | 1 + 4 files changed, 14 insertions(+), 8 deletions(-) diff --git a/bind8/bind8-lib.pl b/bind8/bind8-lib.pl index 8cf06ce01..18d31967a 100755 --- a/bind8/bind8-lib.pl +++ b/bind8/bind8-lib.pl @@ -700,7 +700,7 @@ if ($v && $v->{'members'}) { push(@av, join(" ", $av->{'name'}, @{$av->{'values'}})); } } -if ($_[3] == 0) { +if (!$_[3]) { # text area return &ui_table_row($_[0], &ui_textarea($_[1], join("\n", @av), 3, 50)); @@ -805,14 +805,14 @@ my $v = &find($_[1], $_[2]); my $n; ($n = $_[1]) =~ s/[^A-Za-z0-9_]/_/g; return &ui_table_row($_[0], - &ui_opt_textbox($n, $v ? $v->{'value'} : "", $_[4], $_[3])." ".$_[5], + &ui_opt_textbox($n, $v ? $v->{'value'} : "", $_[4], $_[3])." ".($_[5] // ""), $_[4] > 30 ? 3 : 1); } sub save_opt { my ($dir, $n, $err); -($n = $_[0]) =~ s/[^A-Za-z0-9_]/_/g; +($n = ($_[0] // "")) =~ s/[^A-Za-z0-9_]/_/g; if ($in{"${n}_def"}) { &save_directive($_[2], $_[0], [ ], $_[3]); } elsif ($err = &{$_[1]}($in{$n})) { &error($err); @@ -906,7 +906,7 @@ my ($fwdconf, $fwdfile, $fwdrec, $ipv6); # find forward domain my $host = $_[0]; $host =~ s/\.$//; my @zl = grep { $_->{'type'} ne 'view' } &list_zone_names(); -if ($_[1] ne '' && $_[1] ne 'any') { +if ($_[1] && $_[1] ne 'any') { @zl = grep { $_->{'view'} && $_->{'viewindex'} == $_[1] } @zl; } else { @@ -968,6 +968,7 @@ else { # Returns 1 if some zone can be edited sub can_edit_zone { +$access{'zones'} //= '*'; my %zcan; my ($zn, $vn, $file); if ($_[0]->{'members'}) { @@ -2405,7 +2406,7 @@ return undef; sub is_bind_running { my $pidfile = &get_pid_file(); -my $rv = &check_pid_file(&make_chroot($pidfile, 1)); +my $rv = &check_pid_file(&make_chroot($pidfile, 1)) || 0; if (!$rv && $gconfig{'os_type'} eq 'windows') { # Fall back to checking for process $rv = &find_byname("named"); @@ -2536,6 +2537,7 @@ if ($changed || !$znc{'version'} || next if (!$type); $type = lc($type); my $file = &find_value("file", $z->{'members'}); + $file //= ""; my $up = &find("update-policy", $z->{'members'}); my $au = &find("allow-update", $z->{'members'}); my $dynamic = $up || $au || $gau ? 1 : 0; @@ -3198,6 +3200,7 @@ else { $zonename = $zone->{'name'}; $zonefile = $zone->{'file'}; } +return () if (!$zonename || !$zonefile); my $out = &backquote_command( $config{'checkzone'}." ".quotemeta($zonename)." ". quotemeta(&make_chroot(&absolute_path($zonefile)))." 2>&1 {'name'}; $zonefile = $zone->{'file'}; } +return () if (!$zonename || !$zonefile); my $absfile = &make_chroot(&absolute_path($zonefile)); my $out = &backquote_command( $config{'checkzone'}." ".quotemeta($zonename)." ". @@ -3934,7 +3938,7 @@ if (&find_byname("nscd")) { sub transfer_slave_records { my ($dom, $masters, $file, $source, $sourceport) = @_; -my $sourcearg; +my $sourcearg = ""; if ($source && $source ne "*") { $sourcearg = "-t ".$source; if ($sourceport) { diff --git a/bind8/conf_servers.cgi b/bind8/conf_servers.cgi index 07ded0843..1b33fc3d3 100755 --- a/bind8/conf_servers.cgi +++ b/bind8/conf_servers.cgi @@ -28,12 +28,12 @@ for(my $i=0; $i<@servers; $i++) { my @cols = ( ); push(@cols, &ui_textbox("ip_$i", $s->{'value'}, 30)); - my $bogus = &find_value("bogus", $s->{'members'}); + my $bogus = &find_value("bogus", $s->{'members'}) // ""; push(@cols, &ui_radio("bogus_$i", lc($bogus) eq 'yes' ? 1 : 0, [ [ 1, $text{'yes'} ], [ 0, $text{'no'} ] ])); - my $format = &find_value("transfer-format", $s->{'members'}); + my $format = &find_value("transfer-format", $s->{'members'}) // ""; push(@cols, &ui_radio("format_$i", lc($format), [ [ 'one-answer', $text{'servers_one'} ], [ 'many-answers', $text{'servers_many'} ], diff --git a/bind8/edit_recs.cgi b/bind8/edit_recs.cgi index f0fd5f825..dde047222 100755 --- a/bind8/edit_recs.cgi +++ b/bind8/edit_recs.cgi @@ -172,6 +172,7 @@ for(my $i=0; $i<@_; $i++) { else { $name = $r->{'name'}; } + $name //= ""; my @cols; $name = &html_escape($name); my $id = &record_id($r); diff --git a/bind8/save_record.cgi b/bind8/save_record.cgi index 4a3b660e3..dc3eed0d7 100755 --- a/bind8/save_record.cgi +++ b/bind8/save_record.cgi @@ -488,6 +488,7 @@ else { } else { # For other record types, just save the lines + $in{'values'} //= ""; $in{'values'} =~ s/\r//g; my @vlines = split(/\n/, $in{'values'}); $vals = join(" ",map { $_ =~ /\s|;/ ? "\"$_\"" : $_ } @vlines); From 1f1a7e45624e1807cae5ad3c24e87c10ef20259e Mon Sep 17 00:00:00 2001 From: Joe Cooper Date: Mon, 23 Mar 2026 21:54:18 -0500 Subject: [PATCH 2/3] Fix sort/splice bug --- bind8/delete_recs.cgi | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/bind8/delete_recs.cgi b/bind8/delete_recs.cgi index eba5c04bd..1a751643a 100755 --- a/bind8/delete_recs.cgi +++ b/bind8/delete_recs.cgi @@ -45,7 +45,7 @@ else { my %bumpedrev; my @delr; - foreach my $d (sort { $b <=> $a } @d) { + foreach my $d (sort { ($b =~ /^(\d+)/)[0] <=> ($a =~ /^(\d+)/)[0] } @d) { my ($num, $id) = split(/\//, $d, 2); my $r = &find_record_by_id(\@recs, $id, $num); next if (!$r); @@ -77,7 +77,7 @@ else { # Delete the actual record &lock_file(&make_chroot($r->{'file'})); &delete_record($r->{'file'}, $r); - splice(@recs, $d, 1); + splice(@recs, $num, 1); push(@delr, $r); } &bump_soa_record($zone->{'file'}, \@recs); From 916d22b55b82f9151bb5139c60e51f26fe418634 Mon Sep 17 00:00:00 2001 From: Joe Cooper Date: Mon, 23 Mar 2026 22:22:31 -0500 Subject: [PATCH 3/3] One more undefined --- bind8/bind8-lib.pl | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/bind8/bind8-lib.pl b/bind8/bind8-lib.pl index 18d31967a..c81ee4304 100755 --- a/bind8/bind8-lib.pl +++ b/bind8/bind8-lib.pl @@ -3367,7 +3367,7 @@ if (!$access{'ro'} && $access{'apply'}) { if ($zone && ($access{'apply'} == 1 || $access{'apply'} == 2)) { # Apply this zone my $link = "restart_zone.cgi?return=$r&". - "view=$zone->{'viewindex'}&". + "view=".($zone->{'viewindex'} // "")."&". "zone=$zone->{'name'}"; push(@rv, &ui_link($link, $text{'links_apply'}) ); }