2
0
mirror of https://gitlab.isc.org/isc-projects/bind9 synced 2025-08-29 21:47:59 +00:00

Merge branch '3061-ifconfig-sh-down-messes-up-loopback-interfaces' into 'main'

Resolve "ifconfig.sh down messes up loopback interfaces"

Closes #3061

See merge request isc-projects/bind9!6408
This commit is contained in:
Mark Andrews 2022-07-07 00:10:15 +00:00
commit 49706c65f5
2 changed files with 210 additions and 190 deletions

View File

@ -1,3 +1,6 @@
5917. [bug] Update ifconfig.sh script as is miscomputed interface
identifiers when destroying interfaces. [GL #3061]
5916. [bug] When resolving a name, don't give up immediately if an 5916. [bug] When resolving a name, don't give up immediately if an
authoritative server returns FORMERR; try the other authoritative server returns FORMERR; try the other
servers first. [GL #3152] servers first. [GL #3152]

View File

@ -43,100 +43,81 @@ case "$sys" in
;; ;;
esac esac
case "$1" in up() {
start|up)
for i in 0 1 2
do
case $i in
0) ipv6="ff" ;;
1) ipv6="99" ;;
2) ipv6="00" ;;
*) ipv6="" ;;
esac
for ns in 1 2 3 4 5 6 7 8 9 10 11
do
[ $i -gt 0 -a $ns -gt 2 ] && break
int=`expr $i \* 10 + $ns`
case "$sys" in case "$sys" in
*-pc-solaris2.5.1) *-pc-solaris2.5.1)
ifconfig lo0:$int 10.53.$i.$ns \ [ "$a" ] && ifconfig lo0:$int $a netmask 0xffffffff up
netmask 0xffffffff up
;; ;;
*-sun-solaris2.[6-7]) *-sun-solaris2.[6-7])
ifconfig lo0:$int 10.53.$i.$ns \ [ "$a" ] && ifconfig lo0:$int $a netmask 0xffffffff up
netmask 0xffffffff up
;; ;;
*-*-solaris2.[8-9]|*-*-solaris2.1[0-9]) *-*-solaris2.[8-9]|*-*-solaris2.10)
[ "$a" ] && {
/sbin/ifconfig lo0:$int plumb /sbin/ifconfig lo0:$int plumb
/sbin/ifconfig lo0:$int 10.53.$i.$ns up /sbin/ifconfig lo0:$int $a up
/sbin/ifconfig lo0:$int mtu 1500 /sbin/ifconfig lo0:$int mtu 1500
}
[ "$aaaa" ] && {
/sbin/ifconfig lo0:$int inet6 plumb /sbin/ifconfig lo0:$int inet6 plumb
[ "$ipv6" ] && /sbin/ifconfig lo0:$int \ /sbin/ifconfig lo0:$int inet6 $aaaa up
inet6 fd92:7065:b8e:${ipv6}ff::$ns up }
;;
*-*-solaris2.1[1-9])
[ "$a" ] && {
/sbin/ipadm create-addr -t -T static \
-a $a lo0/bind9v4$int ||
echo failed lo0/bind9v4$int
}
[ "$aaaa" ] && {
/sbin/ipadm create-addr -t -T static \
-a $aaaa lo0/bind9v6$int ||
echo failed lo0/bind9v6$int
}
;; ;;
*-*-linux*) *-*-linux*)
if [ $use_ip ]; then if [ "$use_ip" ]; then
ip address add 10.53.$i.$ns/24 \ ip address add $a/24 dev lo:$int
dev lo:$int
ip link set dev lo:$int mtu 1500 ip link set dev lo:$int mtu 1500
[ "$ipv6" ] && ip address add \ [ "$aaaa" ] && ip address add $aaaa/64 dev lo
fd92:7065:b8e:${ipv6}ff::$ns/64 \
dev lo
else else
ifconfig lo:$int 10.53.$i.$ns up \ ifconfig lo:$int $a up netmask 255.255.255.0 mtu 1500
netmask 255.255.255.0 \ [ "$aaaa" ] && ifconfig lo inet6 add $aaaa/64
mtu 1500
[ "$ipv6" ] && ifconfig lo inet6 add \
fd92:7065:b8e:${ipv6}ff::$ns/64
fi fi
;; ;;
*-unknown-freebsd*) *-unknown-freebsd*)
ifconfig lo0 10.53.$i.$ns alias \ [ "$a" ] && ifconfig lo0 $a alias netmask 0xffffffff mtu 1500
netmask 0xffffffff \ [ "$aaaa" ] && ifconfig lo0 inet6 $aaaa alias
mtu 1500
[ "$ipv6" ] && ifconfig lo0 inet6 \
fd92:7065:b8e:${ipv6}ff::$ns alias
;; ;;
*-unknown-dragonfly*|*-unknown-netbsd*|*-unknown-openbsd*) *-unknown-dragonfly*|*-unknown-netbsd*|*-unknown-openbsd*)
ifconfig lo0 10.53.$i.$ns alias \ [ "$a" ] && ifconfig lo0 $a alias netmask 255.255.255.0 mtu 1500
netmask 255.255.255.0 \ [ "$aaaa" ] && ifconfig lo0 inet6 $aaaa alias
mtu 1500
[ "$ipv6" ] && ifconfig lo0 inet6 \
fd92:7065:b8e:${ipv6}ff::$ns alias
;; ;;
*-*-bsdi[3-5].*) *-*-bsdi[3-5].*)
ifconfig lo0 add 10.53.$i.$ns \ [ "$a" ] && ifconfig lo0 add $a netmask 255.255.255.0
netmask 255.255.255.0
;; ;;
*-dec-osf[4-5].*) *-dec-osf[4-5].*)
ifconfig lo0 alias 10.53.$i.$ns [ "$a" ] && ifconfig lo0 alias $a
;; ;;
*-sgi-irix6.*) *-sgi-irix6.*)
ifconfig lo0 alias 10.53.$i.$ns [ "$a" ] && ifconfig lo0 alias $a
;; ;;
*-*-sysv5uw7*|*-*-sysv*UnixWare*|*-*-sysv*OpenUNIX*) *-*-sysv5uw7*|*-*-sysv*UnixWare*|*-*-sysv*OpenUNIX*)
ifconfig lo0 10.53.$i.$ns alias \ [ "$a" ] && ifconfig lo0 $a alias netmask 0xffffffff
netmask 0xffffffff
;; ;;
*-ibm-aix4.*|*-ibm-aix5.*) *-ibm-aix4.*|*-ibm-aix5.*)
ifconfig lo0 alias 10.53.$i.$ns [ "$a" ] && ifconfig lo0 alias $a
[ "$ipv6" ] && ifconfig lo0 inet6 alias -dad \ [ "$aaaa" ] && ifconfig lo0 inet6 alias -dad $aaaa/64
fd92:7065:b8e:${ipv6}ff::$ns/64
;; ;;
hpux) hpux)
ifconfig lo0:$int 10.53.$i.$ns \ [ "$a" ] && ifconfig lo0:$int $a netmask 255.255.255.0 up
netmask 255.255.255.0 up [ "$aaaa" ] && ifconfig lo0:$int inet6 $aaaa up
[ "$ipv6" ] && ifconfig lo0:$int inet6 \
fd92:7065:b8e:${ipv6}ff::$ns up
;; ;;
*-sco3.2v*) *-sco3.2v*)
ifconfig lo0 alias 10.53.$i.$ns [ "$a" ] && ifconfig lo0 alias $a
;; ;;
*-darwin*) *-darwin*)
ifconfig lo0 alias 10.53.$i.$ns [ "$a" ] && ifconfig lo0 alias $a
[ "$ipv6" ] && ifconfig lo0 inet6 \ [ "$aaaa" ] && ifconfig lo0 inet6 $aaaa alias
fd92:7065:b8e:${ipv6}ff::$ns alias
;; ;;
*-cygwin*) *-cygwin*)
echo "Please run ifconfig.bat as Administrator." echo "Please run ifconfig.bat as Administrator."
@ -145,93 +126,86 @@ case "$1" in
*) *)
echo "Don't know how to set up interface. Giving up." echo "Don't know how to set up interface. Giving up."
exit 1 exit 1
esac
done
done
;; ;;
stop|down)
for i in 0 1 2
do
case $i in
0) ipv6="ff" ;;
1) ipv6="99" ;;
2) ipv6="00" ;;
*) ipv6="" ;;
esac esac
for ns in 11 10 9 8 7 6 5 4 3 2 1 }
do
[ $i -gt 0 -a $ns -gt 2 ] && continue down() {
int=`expr $i \* 10 + $ns - 1`
case "$sys" in case "$sys" in
*-pc-solaris2.5.1) *-pc-solaris2.5.1)
ifconfig lo0:$int 0.0.0.0 down [ "$a" ] && ifconfig lo0:$int 0.0.0.0 down
;; ;;
*-sun-solaris2.[6-7]) *-sun-solaris2.[6-7])
ifconfig lo0:$int 10.53.$i.$ns down [ "$a" ] && ifconfig lo0:$int $a down
;; ;;
*-*-solaris2.[8-9]|*-*-solaris2.1[0-9]) *-*-solaris2.[8-9]|*-*-solaris2.10)
ifconfig lo0:$int 10.53.$i.$ns down [ "$a" ] && {
ifconfig lo0:$int 10.53.$i.$ns unplumb ifconfig lo0:$int $a down
ifconfig lo0:$int $a unplumb
}
[ "$aaaa" ] && {
ifconfig lo0:$int inet6 down ifconfig lo0:$int inet6 down
ifconfig lo0:$int inet6 unplumb ifconfig lo0:$int inet6 unplumb
}
;; ;;
*-*-solaris2.1[1-9])
[ "$a" ] && {
ipadm delete-addr lo0/bind9v4$int ||
echo failed lo0/bind9v4$int
}
[ "$aaaa" ] && {
ipadm delete-addr lo0/bind9v6$int ||
echo failed lo0/bind9v6$int
}
;;
*-*-linux*) *-*-linux*)
if [ $use_ip ]; then if [ "$use_ip" ]; then
ip address del 10.53.$i.$ns/24 \ [ "$a" ] && ip address del $a/24 dev lo:$int
dev lo:$int [ "$aaaa" ] && ip address del $aaaa/64 dev lo
[ "$ipv6" ] && ip address del \
fd92:7065:b8e:${ipv6}ff::$ns/64 \
dev lo
else else
ifconfig lo:$int 10.53.$i.$ns down [ "$a" ] && ifconfig lo:$int $a down
[ "$ipv6" ] && ifconfig lo inet6 \ [ "$aaaa" ] && ifconfig lo inet6 del $aaaa/64
del fd92:7065:b8e:${ipv6}ff::$ns/64
fi fi
;; ;;
*-unknown-freebsd*) *-unknown-freebsd*)
ifconfig lo0 10.53.$i.$ns delete [ "$a" ] && ifconfig lo0 $a delete
[ "$ipv6" ] && ifconfig lo0 inet6 \ [ "$aaaa" ] && ifconfig lo0 inet6 $aaaa delete
fd92:7065:b8e:${ipv6}ff::$ns delete
;; ;;
*-unknown-netbsd*) *-unknown-netbsd*)
ifconfig lo0 10.53.$i.$ns delete [ "$a" ] && ifconfig lo0 $a delete
[ "$ipv6" ] && ifconfig lo0 inet6 \ [ "$aaaa" ] && ifconfig lo0 inet6 $aaaa delete
fd92:7065:b8e:${ipv6}ff::$ns delete
;; ;;
*-unknown-openbsd*) *-unknown-openbsd*)
ifconfig lo0 10.53.$i.$ns delete [ "$a" ] && ifconfig lo0 $a delete
[ "$ipv6" ] && ifconfig lo0 inet6 \ [ "$aaaa" ] && ifconfig lo0 inet6 $aaaa delete
fd92:7065:b8e:${ipv6}ff::$ns delete
;; ;;
*-*-bsdi[3-5].*) *-*-bsdi[3-5].*)
ifconfig lo0 remove 10.53.$i.$ns [ "$a" ] && ifconfig lo0 remove $a
;; ;;
*-dec-osf[4-5].*) *-dec-osf[4-5].*)
ifconfig lo0 -alias 10.53.$i.$ns [ "$a" ] && ifconfig lo0 -alias $a
;; ;;
*-sgi-irix6.*) *-sgi-irix6.*)
ifconfig lo0 -alias 10.53.$i.$ns [ "$a" ] && ifconfig lo0 -alias $a
;; ;;
*-*-sysv5uw7*|*-*-sysv*UnixWare*|*-*-sysv*OpenUNIX*) *-*-sysv5uw7*|*-*-sysv*UnixWare*|*-*-sysv*OpenUNIX*)
ifconfig lo0 -alias 10.53.$i.$ns [ "$a" ] && ifconfig lo0 -alias $a
;; ;;
*-ibm-aix4.*|*-ibm-aix5.*) *-ibm-aix4.*|*-ibm-aix5.*)
ifconfig lo0 delete 10.53.$i.$ns [ "$a" ] && ifconfig lo0 delete $a
[ "$ipv6" ] && ifconfig lo0 delete inet6 \ [ "$aaaa" ] && ifconfig lo0 delete inet6 $aaaa/64
fd92:7065:b8e:${ipv6}ff::$ns/64
;; ;;
hpux) hpux)
ifconfig lo0:$int 0.0.0.0 [ "$a" ] && ifconfig lo0:$int 0.0.0.0
ifconfig lo0:$int inet6 :: [ "$aaaa" ] && ifconfig lo0:$int inet6 ::
;; ;;
*-sco3.2v*) *-sco3.2v*)
ifconfig lo0 -alias 10.53.$i.$ns [ "$a" ] && ifconfig lo0 -alias $a
;; ;;
*darwin*) *darwin*)
ifconfig lo0 -alias 10.53.$i.$ns [ "$a" ] && ifconfig lo0 -alias $a
[ "$ipv6" ] && ifconfig lo0 inet6 \ [ "$aaaa" ] && ifconfig lo0 inet6 $aaaa delete
fd92:7065:b8e:${ipv6}ff::$ns delete
;; ;;
*-cygwin*) *-cygwin*)
echo "Please run ifconfig.bat as Administrator." echo "Please run ifconfig.bat as Administrator."
@ -240,12 +214,55 @@ case "$1" in
*) *)
echo "Don't know how to destroy interface. Giving up." echo "Don't know how to destroy interface. Giving up."
exit 1 exit 1
;;
esac
}
sequence() (
awk -v s=$1 -v e=$2 '
BEGIN {
for (i = s ; i <= e; i++) { print i; }
exit;
}'
)
#
# 'max', 'i' and 'ns' are used to compute the interface identifier for
# systems that need it and must be unique for each interface (e.g. lo:$int).
#
# int=$((i * max + ns))
#
# 'max' is the number of nameservers configured in the inner loop.
# 'i' is the outer loop counter.
# 'ns' in the namserver being configured.
# 'int' interface identifier.
#
max=11
case $1 in
start|up|stop|down)
for i in $(sequence 0 2)
do
case $i in
0) ipv6="ff" ;;
1) ipv6="99" ;;
2) ipv6="00" ;;
*) ipv6="" ;;
esac
for ns in $(sequence 1 $max)
do
[ $i -gt 0 -a $ns -gt 2 ] && break
int=$((i * max + ns))
a=10.53.$i.$ns
aaaa=fd92:7065:b8e:${ipv6}ff::$ns
case "$1" in
start|up) up;;
stop|down) down;;
esac esac
done done
done done
;; ;;
*) *)
echo "Usage: $0 { up | down }" echo "Usage: $0 { up | down }"
exit 1 exit 1
;;
esac esac