isc-dhcp: treat 'config host' like superset of 'config domain'

Not including an A record mapping will cause nsupdate to balk at
CNAME and MX records (and probably SRV as well) because the target
will be unknown at the time of parsing, until the lease gets
activated.

We need these RR's to be in place well before the servers even
come up.

Signed-off-by: Philip Prindeville <philipp@redfish-solutions.com>
This commit is contained in:
Philip Prindeville 2021-02-04 14:55:30 -07:00
parent d8a1db00b0
commit 0c360d1c6b
2 changed files with 25 additions and 14 deletions

View File

@ -10,7 +10,7 @@ include $(TOPDIR)/rules.mk
PKG_NAME:=isc-dhcp
UPSTREAM_NAME:=dhcp
PKG_VERSION:=4.4.1
PKG_RELEASE:=14
PKG_RELEASE:=15
PKG_LICENSE:=BSD-3-Clause
PKG_LICENSE_FILES:=LICENSE

View File

@ -82,7 +82,8 @@ update() {
local lhs="$1" family="$2" type="$3"
shift 3
echo -e "$PREFIX" "$lhs $family $type $@\nsend"
[ $dynamicdns -eq 1 ] && \
echo -e "$PREFIX" "$lhs $family $type $@\nsend" >> $dyn_file
}
explode() {
@ -245,7 +246,7 @@ static_srvhosts() {
static_host_add() {
local cfg="$1"
local broadcast hostid macn macs mac name ip leasetime
local broadcast hostid macn macs mac name ip ips revip leasetime
config_get macs "$cfg" "mac"
[ -n "$macs" ] || return 0
@ -302,6 +303,14 @@ static_host_add() {
config_list_foreach "$cfg" "dhcp_option" append_dhcp_options
echo "}"
done
ips="$ip"
for ip in $ips; do
revip="$(rev_str "$ip" ".")"
update "$name.$domain." IN A "$ip"
update "$revip.in-addr.arpa." IN PTR "$name.$domain."
done
}
static_hosts() {
@ -396,7 +405,7 @@ dhcpd_add() {
gateway="$IP"
fi
gen_dhcp_subnet "$cfg" >> $config_file
gen_dhcp_subnet "$cfg"
}
general_config() {
@ -540,12 +549,6 @@ start_service() {
general_config > $config_file
rfc1918_nets=
config_foreach dhcpd_add dhcp 1
static_hosts >> $config_file
if [ $dynamicdns -eq 1 ]; then
cat <<EOF > $dyn_file
; Generated by /etc/init.d/dhcpd at $(date)
@ -553,15 +556,23 @@ start_service() {
ttl $TTL
EOF
fi
static_cnames >> $dyn_file
rfc1918_nets=
static_domains >> $dyn_file
config_foreach dhcpd_add dhcp 1 >> $config_file
static_mxhosts >> $dyn_file
static_hosts >> $config_file
static_srvhosts >> $dyn_file
static_cnames >> $config_file
static_domains >> $config_file
static_mxhosts >> $config_file
static_srvhosts >> $config_file
if [ $dynamicdns -eq 1 ]; then
nsupdate -l -v $dyn_file
rm -f $dyn_file