interfaces: nameserver can use same file format as others #5367

Also decouple searchdomain write from nameserver write in dhclient-script
and clear files properly.
This commit is contained in:
Franco Fichtner 2021-11-28 13:51:11 +01:00
parent c6c7e9854d
commit b28fa22d69
7 changed files with 32 additions and 28 deletions

View File

@ -1114,11 +1114,11 @@ function interface_bring_down($interface = "wan", $ifacecfg = false)
}
/* clear stale state files associated with this interface */
@unlink("/tmp/nameserver_v6{$realifv6}");
@unlink("/tmp/nameserver_{$realif}");
@unlink("/tmp/{$realifv6}_nameserverv6");
@unlink("/tmp/{$realifv6}_pdinfo");
@unlink("/tmp/{$realifv6}_routerv6");
@unlink("/tmp/{$realifv6}_searchdomainv6");
@unlink("/tmp/{$realif}_nameserver");
@unlink("/tmp/{$realif}_router");
@unlink("/tmp/{$realif}_searchdomain");
}

View File

@ -2,9 +2,9 @@
/sbin/pfctl -i ${1} -Fs
/bin/rm -f /tmp/${1}_nameserver
/bin/rm -f /tmp/${1}_nameserverv6
/bin/rm -f /tmp/${1}_router
/bin/rm -f /tmp/${1}_routerv6
/bin/rm -f /tmp/${1}_searchdomain
/bin/rm -f /tmp/${1}_searchdomainv6
/bin/rm -f /tmp/nameserver_${1}
/bin/rm -f /tmp/nameserver_v6${1}

View File

@ -335,17 +335,17 @@ function get_nameservers($interface = null)
global $config;
$master_list = array();
$dns_lists = glob('/tmp/nameserver_*');
$dns_lists = glob('/tmp/*_nameserver*');
$exclude_interfaces = array();
if (!empty($interface)) {
/* only acquire servers provided for this interface */
$realif = get_real_interface($interface);
$realifv6 = get_real_interface($interface, 'inet6');
$dns_lists = array(
"/tmp/nameserver_{$realif}",
"/tmp/nameserver_v6{$realifv6}",
);
$dns_lists = [
"/tmp/{$realif}_nameserver",
"/tmp/{$realifv6}_nameserverv6",
];
}
if (isset($config['system']['dnsallowoverride_exclude'])) {

View File

@ -76,7 +76,7 @@ if (!is_ipaddr($ip) && substr($interface_real, 0, 4) != 'ovpn') {
}
$searchdomain_file = "/tmp/{$interface_real}_searchdomainv6";
$nameserver_file = "/tmp/nameserver_v6{$interface_real}";
$nameserver_file = "/tmp/{$interface_real}_nameserverv6";
/* XXX from configd we don't get the caller's environment at all? */
$new_domain_name_servers = getenv('new_domain_name_servers');

View File

@ -215,25 +215,31 @@ add_new_routes() {
add_new_resolv_conf() {
$LOGGER "Creating resolv.conf"
if [ -f "/tmp/nameserver_$interface" ]; then
if [ -f "/tmp/${interface}_nameserver" ]; then
# Remove old entries
for nameserver in $(cat /tmp/nameserver_$interface); do
for nameserver in $(cat /tmp/${interface}_nameserver); do
route delete $nameserver >/dev/null 2>&1
done
fi
rm -f /tmp/${interface}_nameserver
if [ -n "$new_domain_name_servers" ]; then
rm -f /tmp/nameserver_$interface
ALLOWOVERRIDE=$(grep -c dnsallowoverride /conf/config.xml)
for nameserver in $new_domain_name_servers; do
# Add a route to the nameserver out the correct interface
# so that mulitple wans work correctly with multiple dns
# also backup the nameserver for later route removal
if [ $ALLOWOVERRIDE -gt 0 ]; then
echo $nameserver >> /tmp/nameserver_$interface
echo $nameserver >> /tmp/${interface}_nameserver
route add $nameserver -iface $interface
fi
done
fi
rm -f /tmp/${interface}_searchdomain
if [ -n "$new_domain_name" ]; then
echo $new_domain_name > /tmp/${interface}_searchdomain
fi

View File

@ -20,12 +20,12 @@ if [ "${AF}" = "inet" ]; then
route delete -${AF} default "${GW}"
fi
if [ -f "/tmp/nameserver_${IF}" ]; then
if [ -f "/tmp/${IF}_nameserver" ]; then
# Remove old entries
for nameserver in $(cat /tmp/nameserver_${IF}); do
for nameserver in $(cat /tmp/${IF}_nameserver); do
route delete ${nameserver}
done
rm -f /tmp/nameserver_${IF}
rm -f /tmp/${IF}_nameserver
fi
rm -f /tmp/${IF}_router
@ -39,11 +39,11 @@ elif [ "${AF}" = "inet6" ]; then
route delete -${AF} default "${GW}"
fi
if [ -f "/tmp/nameserver_v6${IF}" ]; then
for nameserver in $(cat /tmp/nameserver_v6${IF}); do
if [ -f "/tmp/${IF}_nameserverv6" ]; then
for nameserver in $(cat /tmp/${IF}_nameserverv6); do
route delete ${nameserver}
done
rm -f /tmp/nameserver_v6${IF}
rm -f /tmp/${IF}_nameserverv6
fi
rm -f /tmp/${IF}_routerv6

View File

@ -6,17 +6,16 @@ if [ "${2}" = "inet" ]; then
echo ${4} > /tmp/${1}_router
if grep -q dnsallowoverride /conf/config.xml; then
# write nameservers to file
: > /tmp/nameserver_${1}
: > /tmp/${1}_nameserver
if echo "${6}" | grep -q dns1; then
DNS1=$(echo "${6}" | awk '{print $2}')
echo "${DNS1}" >> /tmp/nameserver_${1}
echo "${DNS1}" >> /tmp/${1}_nameserver
route delete "${DNS1}" ${4}
route add "${DNS1}" ${4}
fi
if echo "${7}" | grep -q dns2; then
DNS2=$(echo "${7}" | awk '{print $2}')
echo "${DNS2}" >> /tmp/nameserver_${1}
echo "${DNS2}" >> /tmp/${1}_nameserverv6
route delete "${DNS2}" ${4}
route add "${DNS2}" ${4}
fi
@ -27,17 +26,16 @@ elif [ "${2}" = "inet6" ]; then
echo ${4} | cut -d% -f1 > /tmp/${1}_routerv6
if grep -q dnsallowoverride /conf/config.xml; then
# write nameservers to file
: > /tmp/nameserver_v6${1}
: > /tmp/${1}_nameserverv6
if echo "${6}" | grep -q dns1; then
DNS1=$(echo "${6}" | awk '{print $2}')
echo "${DNS1}" >> /tmp/nameserver_v6${1}
echo "${DNS1}" >> /tmp/${1}_nameserverv6
route delete -inet6 "${DNS1}" ${4}
route add -inet6 "${DNS1}" ${4}
fi
if echo "${7}" | grep -q dns2; then
DNS2=$(echo "${7}" | awk '{print $2}')
echo "${DNS2}" >> /tmp/nameserver_v6${1}
echo "${DNS2}" >> /tmp/${1}_nameserverv6
route delete -inet6 "${DNS2}" ${4}
route add -inet6 "${DNS2}" ${4}
fi