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 PKG_NAME:=isc-dhcp
UPSTREAM_NAME:=dhcp UPSTREAM_NAME:=dhcp
PKG_VERSION:=4.4.1 PKG_VERSION:=4.4.1
PKG_RELEASE:=14 PKG_RELEASE:=15
PKG_LICENSE:=BSD-3-Clause PKG_LICENSE:=BSD-3-Clause
PKG_LICENSE_FILES:=LICENSE PKG_LICENSE_FILES:=LICENSE

View file

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