Created
July 12, 2022 16:00
-
-
Save PalinuroSec/a4a2fbc3ffcaff460babe027184c7729 to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
# | |
# Script fragment to make dhclient supply nameserver information to resolvconf | |
# | |
# Tips: | |
# * Be careful about changing the environment since this is sourced | |
# * This script fragment uses bash features | |
# * As of isc-dhcp-client 4.2 the "reason" (for running the script) can be one of the following. | |
# (Listed on man page:) MEDIUM(0) PREINIT(0) BOUND(M) RENEW(M) REBIND(M) REBOOT(M) EXPIRE(D) FAIL(D) RELEASE(D) STOP(D) NBI(-) TIMEOUT(M) | |
# (Also used in master script:) ARPCHECK(0), ARPSEND(0) | |
# (Also used in master script:) PREINIT6(0) BOUND6(M) RENEW6(M) REBIND6(M) DEPREF6(0) EXPIRE6(D) RELEASE6(D) STOP6(D) | |
# (0) = master script does not run make_resolv_conf | |
# (M) = master script runs make_resolv_conf | |
# (D) = master script downs interface | |
# (-) = master script does nothing with this | |
if [ -x /sbin/resolvconf ] ; then | |
# For safety, first undefine the nasty default make_resolv_conf() | |
make_resolv_conf() { : ; } | |
case "$reason" in | |
BOUND|RENEW|REBIND|REBOOT|TIMEOUT) | |
# Define a resolvconf-compatible m_r_c() function | |
# It gets run later (or, in the TIMEOUT case, MAY get run later) | |
make_resolv_conf() { | |
local R | |
local N | |
R="" | |
if [ "$new_domain_name_servers" ] && [ "$new_domain_name" ] ; then | |
R="${R}domain $new_domain_name | |
" | |
fi | |
if [ "$new_domain_name_servers" ] && [ "$new_domain_search" ] ; then | |
R="${R}search $new_domain_search | |
" | |
fi | |
for N in $new_domain_name_servers ; do | |
R="${R}nameserver $N | |
" | |
done | |
[ ! "$interface" ] || echo -n "$R" | /sbin/resolvconf -a "${interface}.dhclient" | |
} | |
;; | |
BOUND6|RENEW6|REBIND6) | |
# Define a resolvconf-compatible m_r_c() function | |
# It gets run later (or, in the TIMEOUT case, MAY get run later) | |
make_resolv_conf() { | |
local R | |
local N | |
local N_LOW | |
local ZONE_ID | |
R="" | |
if [ "$new_dhcp6_name_servers" ] && [ "$new_dhcp6_domain_search" ] ; then | |
R="${R}search $new_dhcp6_domain_search | |
" | |
fi | |
for N in $new_dhcp6_name_servers ; do | |
# If the nameserver has a link-local address | |
# then add a zone ID (interface name) to it. | |
N_LOW="$(echo "$N" | tr '[:upper:]' '[:lower:]')" | |
if expr "$N_LOW" : ^fe80:: >/dev/null ; then | |
ZONE_ID="%$interface" | |
else | |
ZONE_ID="" | |
fi | |
R="${R}nameserver $N$ZONE_ID | |
" | |
done | |
[ ! "$interface" ] || echo -n "$R" | /sbin/resolvconf -a "${interface}.ip6.dhclient" | |
} | |
;; | |
EXPIRE|FAIL|RELEASE|STOP) | |
# Delete resolv.conf info | |
[ ! "$interface" ] || /sbin/resolvconf -d "${interface}.dhclient" | |
;; | |
EXPIRE6|RELEASE6|STOP6) | |
# Delete resolv.conf info | |
[ ! "$interface" ] || /sbin/resolvconf -d "${interface}.ip6.dhclient" | |
;; | |
esac | |
fi |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment