annotate hooks/20-resolv.conf @ 5572:aae13416e9b7 draft

20-resolv.conf: Don't call resolvconf -c if we didn't call -C This solves the warnings on all OS other than Linux who don't have a supporting resolvconf for deprecating DNS because they never emit the NOCARRIER_ROAMING reason.
author Roy Marples <roy@marples.name>
date Sun, 27 Dec 2020 22:31:02 +0000
parents 4fe5c2a71254
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
3936
98da4513d0af Move dhcpcd-hooks dir to hooks
Roy Marples <roy@marples.name>
parents:
diff changeset
1 # Generate /etc/resolv.conf
98da4513d0af Move dhcpcd-hooks dir to hooks
Roy Marples <roy@marples.name>
parents:
diff changeset
2 # Support resolvconf(8) if available
98da4513d0af Move dhcpcd-hooks dir to hooks
Roy Marples <roy@marples.name>
parents:
diff changeset
3 # We can merge other dhcpcd resolv.conf files into one like resolvconf,
98da4513d0af Move dhcpcd-hooks dir to hooks
Roy Marples <roy@marples.name>
parents:
diff changeset
4 # but resolvconf is preferred as other applications like VPN clients
98da4513d0af Move dhcpcd-hooks dir to hooks
Roy Marples <roy@marples.name>
parents:
diff changeset
5 # can readily hook into it.
98da4513d0af Move dhcpcd-hooks dir to hooks
Roy Marples <roy@marples.name>
parents:
diff changeset
6 # Also, resolvconf can configure local nameservers such as bind
98da4513d0af Move dhcpcd-hooks dir to hooks
Roy Marples <roy@marples.name>
parents:
diff changeset
7 # or dnsmasq. This is important as the libc resolver isn't that powerful.
98da4513d0af Move dhcpcd-hooks dir to hooks
Roy Marples <roy@marples.name>
parents:
diff changeset
8
98da4513d0af Move dhcpcd-hooks dir to hooks
Roy Marples <roy@marples.name>
parents:
diff changeset
9 resolv_conf_dir="$state_dir/resolv.conf"
5572
aae13416e9b7 20-resolv.conf: Don't call resolvconf -c if we didn't call -C
Roy Marples <roy@marples.name>
parents: 5567
diff changeset
10 nocarrier_roaming_dir="$state_dir/roaming"
3936
98da4513d0af Move dhcpcd-hooks dir to hooks
Roy Marples <roy@marples.name>
parents:
diff changeset
11 NL="
98da4513d0af Move dhcpcd-hooks dir to hooks
Roy Marples <roy@marples.name>
parents:
diff changeset
12 "
98da4513d0af Move dhcpcd-hooks dir to hooks
Roy Marples <roy@marples.name>
parents:
diff changeset
13 : ${resolvconf:=resolvconf}
5567
4fe5c2a71254 hooks: add NOCARRIER_ROAMING reason
Roy Marples <roy@marples.name>
parents: 5535
diff changeset
14 if type "$resolvconf" >/dev/null 2>&1; then
4fe5c2a71254 hooks: add NOCARRIER_ROAMING reason
Roy Marples <roy@marples.name>
parents: 5535
diff changeset
15 have_resolvconf=true
4fe5c2a71254 hooks: add NOCARRIER_ROAMING reason
Roy Marples <roy@marples.name>
parents: 5535
diff changeset
16 else
4fe5c2a71254 hooks: add NOCARRIER_ROAMING reason
Roy Marples <roy@marples.name>
parents: 5535
diff changeset
17 have_resolvconf=false
4fe5c2a71254 hooks: add NOCARRIER_ROAMING reason
Roy Marples <roy@marples.name>
parents: 5535
diff changeset
18 fi
3936
98da4513d0af Move dhcpcd-hooks dir to hooks
Roy Marples <roy@marples.name>
parents:
diff changeset
19
98da4513d0af Move dhcpcd-hooks dir to hooks
Roy Marples <roy@marples.name>
parents:
diff changeset
20 build_resolv_conf()
98da4513d0af Move dhcpcd-hooks dir to hooks
Roy Marples <roy@marples.name>
parents:
diff changeset
21 {
4215
e323d30f279e dhcpcd-run-hooks: POSIX shell does not require the local builtin
Roy Marples <roy@marples.name>
parents: 3936
diff changeset
22 cf="$state_dir/resolv.conf.$ifname"
3936
98da4513d0af Move dhcpcd-hooks dir to hooks
Roy Marples <roy@marples.name>
parents:
diff changeset
23
98da4513d0af Move dhcpcd-hooks dir to hooks
Roy Marples <roy@marples.name>
parents:
diff changeset
24 # Build a list of interfaces
98da4513d0af Move dhcpcd-hooks dir to hooks
Roy Marples <roy@marples.name>
parents:
diff changeset
25 interfaces=$(list_interfaces "$resolv_conf_dir")
98da4513d0af Move dhcpcd-hooks dir to hooks
Roy Marples <roy@marples.name>
parents:
diff changeset
26
98da4513d0af Move dhcpcd-hooks dir to hooks
Roy Marples <roy@marples.name>
parents:
diff changeset
27 # Build the resolv.conf
4552
d62e5b96b66e hooks: Ensure header is empty before populating it.
Roy Marples <roy@marples.name>
parents: 4530
diff changeset
28 header=
3936
98da4513d0af Move dhcpcd-hooks dir to hooks
Roy Marples <roy@marples.name>
parents:
diff changeset
29 if [ -n "$interfaces" ]; then
98da4513d0af Move dhcpcd-hooks dir to hooks
Roy Marples <roy@marples.name>
parents:
diff changeset
30 # Build the header
98da4513d0af Move dhcpcd-hooks dir to hooks
Roy Marples <roy@marples.name>
parents:
diff changeset
31 for x in ${interfaces}; do
98da4513d0af Move dhcpcd-hooks dir to hooks
Roy Marples <roy@marples.name>
parents:
diff changeset
32 header="$header${header:+, }$x"
98da4513d0af Move dhcpcd-hooks dir to hooks
Roy Marples <roy@marples.name>
parents:
diff changeset
33 done
98da4513d0af Move dhcpcd-hooks dir to hooks
Roy Marples <roy@marples.name>
parents:
diff changeset
34
98da4513d0af Move dhcpcd-hooks dir to hooks
Roy Marples <roy@marples.name>
parents:
diff changeset
35 # Build the search list
98da4513d0af Move dhcpcd-hooks dir to hooks
Roy Marples <roy@marples.name>
parents:
diff changeset
36 domain=$(cd "$resolv_conf_dir"; \
98da4513d0af Move dhcpcd-hooks dir to hooks
Roy Marples <roy@marples.name>
parents:
diff changeset
37 key_get_value "domain " ${interfaces})
98da4513d0af Move dhcpcd-hooks dir to hooks
Roy Marples <roy@marples.name>
parents:
diff changeset
38 search=$(cd "$resolv_conf_dir"; \
98da4513d0af Move dhcpcd-hooks dir to hooks
Roy Marples <roy@marples.name>
parents:
diff changeset
39 key_get_value "search " ${interfaces})
98da4513d0af Move dhcpcd-hooks dir to hooks
Roy Marples <roy@marples.name>
parents:
diff changeset
40 set -- ${domain}
98da4513d0af Move dhcpcd-hooks dir to hooks
Roy Marples <roy@marples.name>
parents:
diff changeset
41 domain="$1"
98da4513d0af Move dhcpcd-hooks dir to hooks
Roy Marples <roy@marples.name>
parents:
diff changeset
42 [ -n "$2" ] && search="$search $*"
98da4513d0af Move dhcpcd-hooks dir to hooks
Roy Marples <roy@marples.name>
parents:
diff changeset
43 [ -n "$search" ] && search="$(uniqify $search)"
98da4513d0af Move dhcpcd-hooks dir to hooks
Roy Marples <roy@marples.name>
parents:
diff changeset
44 [ "$domain" = "$search" ] && search=
98da4513d0af Move dhcpcd-hooks dir to hooks
Roy Marples <roy@marples.name>
parents:
diff changeset
45 [ -n "$domain" ] && domain="domain $domain$NL"
98da4513d0af Move dhcpcd-hooks dir to hooks
Roy Marples <roy@marples.name>
parents:
diff changeset
46 [ -n "$search" ] && search="search $search$NL"
98da4513d0af Move dhcpcd-hooks dir to hooks
Roy Marples <roy@marples.name>
parents:
diff changeset
47
98da4513d0af Move dhcpcd-hooks dir to hooks
Roy Marples <roy@marples.name>
parents:
diff changeset
48 # Build the nameserver list
98da4513d0af Move dhcpcd-hooks dir to hooks
Roy Marples <roy@marples.name>
parents:
diff changeset
49 srvs=$(cd "$resolv_conf_dir"; \
98da4513d0af Move dhcpcd-hooks dir to hooks
Roy Marples <roy@marples.name>
parents:
diff changeset
50 key_get_value "nameserver " ${interfaces})
5108
b2ea9faab536 resolv.conf: Uniquify contents
Roy Marples <roy@marples.name>
parents: 4552
diff changeset
51 for x in $(uniqify $srvs); do
3936
98da4513d0af Move dhcpcd-hooks dir to hooks
Roy Marples <roy@marples.name>
parents:
diff changeset
52 servers="${servers}nameserver $x$NL"
98da4513d0af Move dhcpcd-hooks dir to hooks
Roy Marples <roy@marples.name>
parents:
diff changeset
53 done
98da4513d0af Move dhcpcd-hooks dir to hooks
Roy Marples <roy@marples.name>
parents:
diff changeset
54 fi
98da4513d0af Move dhcpcd-hooks dir to hooks
Roy Marples <roy@marples.name>
parents:
diff changeset
55 header="$signature_base${header:+ $from }$header"
98da4513d0af Move dhcpcd-hooks dir to hooks
Roy Marples <roy@marples.name>
parents:
diff changeset
56
98da4513d0af Move dhcpcd-hooks dir to hooks
Roy Marples <roy@marples.name>
parents:
diff changeset
57 # Assemble resolv.conf using our head and tail files
98da4513d0af Move dhcpcd-hooks dir to hooks
Roy Marples <roy@marples.name>
parents:
diff changeset
58 [ -f "$cf" ] && rm -f "$cf"
98da4513d0af Move dhcpcd-hooks dir to hooks
Roy Marples <roy@marples.name>
parents:
diff changeset
59 [ -d "$resolv_conf_dir" ] || mkdir -p "$resolv_conf_dir"
98da4513d0af Move dhcpcd-hooks dir to hooks
Roy Marples <roy@marples.name>
parents:
diff changeset
60 echo "$header" > "$cf"
98da4513d0af Move dhcpcd-hooks dir to hooks
Roy Marples <roy@marples.name>
parents:
diff changeset
61 if [ -f /etc/resolv.conf.head ]; then
98da4513d0af Move dhcpcd-hooks dir to hooks
Roy Marples <roy@marples.name>
parents:
diff changeset
62 cat /etc/resolv.conf.head >> "$cf"
98da4513d0af Move dhcpcd-hooks dir to hooks
Roy Marples <roy@marples.name>
parents:
diff changeset
63 else
98da4513d0af Move dhcpcd-hooks dir to hooks
Roy Marples <roy@marples.name>
parents:
diff changeset
64 echo "# /etc/resolv.conf.head can replace this line" >> "$cf"
98da4513d0af Move dhcpcd-hooks dir to hooks
Roy Marples <roy@marples.name>
parents:
diff changeset
65 fi
98da4513d0af Move dhcpcd-hooks dir to hooks
Roy Marples <roy@marples.name>
parents:
diff changeset
66 printf %s "$domain$search$servers" >> "$cf"
98da4513d0af Move dhcpcd-hooks dir to hooks
Roy Marples <roy@marples.name>
parents:
diff changeset
67 if [ -f /etc/resolv.conf.tail ]; then
98da4513d0af Move dhcpcd-hooks dir to hooks
Roy Marples <roy@marples.name>
parents:
diff changeset
68 cat /etc/resolv.conf.tail >> "$cf"
98da4513d0af Move dhcpcd-hooks dir to hooks
Roy Marples <roy@marples.name>
parents:
diff changeset
69 else
98da4513d0af Move dhcpcd-hooks dir to hooks
Roy Marples <roy@marples.name>
parents:
diff changeset
70 echo "# /etc/resolv.conf.tail can replace this line" >> "$cf"
98da4513d0af Move dhcpcd-hooks dir to hooks
Roy Marples <roy@marples.name>
parents:
diff changeset
71 fi
98da4513d0af Move dhcpcd-hooks dir to hooks
Roy Marples <roy@marples.name>
parents:
diff changeset
72 if change_file /etc/resolv.conf "$cf"; then
98da4513d0af Move dhcpcd-hooks dir to hooks
Roy Marples <roy@marples.name>
parents:
diff changeset
73 chmod 644 /etc/resolv.conf
98da4513d0af Move dhcpcd-hooks dir to hooks
Roy Marples <roy@marples.name>
parents:
diff changeset
74 fi
98da4513d0af Move dhcpcd-hooks dir to hooks
Roy Marples <roy@marples.name>
parents:
diff changeset
75 rm -f "$cf"
98da4513d0af Move dhcpcd-hooks dir to hooks
Roy Marples <roy@marples.name>
parents:
diff changeset
76 }
98da4513d0af Move dhcpcd-hooks dir to hooks
Roy Marples <roy@marples.name>
parents:
diff changeset
77
98da4513d0af Move dhcpcd-hooks dir to hooks
Roy Marples <roy@marples.name>
parents:
diff changeset
78 # Extract any ND DNS options from the RA
4530
999c0c21711d RA: expire RDNSS and DNSSL entries
Roy Marples <roy@marples.name>
parents: 4322
diff changeset
79 # Obey the lifetimes
3936
98da4513d0af Move dhcpcd-hooks dir to hooks
Roy Marples <roy@marples.name>
parents:
diff changeset
80 eval_nd_dns()
98da4513d0af Move dhcpcd-hooks dir to hooks
Roy Marples <roy@marples.name>
parents:
diff changeset
81 {
4530
999c0c21711d RA: expire RDNSS and DNSSL entries
Roy Marples <roy@marples.name>
parents: 4322
diff changeset
82
999c0c21711d RA: expire RDNSS and DNSSL entries
Roy Marples <roy@marples.name>
parents: 4322
diff changeset
83 eval rdnsstime=\$nd${i}_rdnss${j}_lifetime
999c0c21711d RA: expire RDNSS and DNSSL entries
Roy Marples <roy@marples.name>
parents: 4322
diff changeset
84 [ -z "$rdnsstime" ] && return 1
999c0c21711d RA: expire RDNSS and DNSSL entries
Roy Marples <roy@marples.name>
parents: 4322
diff changeset
85 ltime=$(($rdnsstime - $offset))
999c0c21711d RA: expire RDNSS and DNSSL entries
Roy Marples <roy@marples.name>
parents: 4322
diff changeset
86 if [ "$ltime" -gt 0 ]; then
3936
98da4513d0af Move dhcpcd-hooks dir to hooks
Roy Marples <roy@marples.name>
parents:
diff changeset
87 eval rdnss=\$nd${i}_rdnss${j}_servers
4530
999c0c21711d RA: expire RDNSS and DNSSL entries
Roy Marples <roy@marples.name>
parents: 4322
diff changeset
88 [ -n "$rdnss" ] && new_rdnss="$new_rdnss${new_rdnss:+ }$rdnss"
3936
98da4513d0af Move dhcpcd-hooks dir to hooks
Roy Marples <roy@marples.name>
parents:
diff changeset
89 fi
98da4513d0af Move dhcpcd-hooks dir to hooks
Roy Marples <roy@marples.name>
parents:
diff changeset
90
4530
999c0c21711d RA: expire RDNSS and DNSSL entries
Roy Marples <roy@marples.name>
parents: 4322
diff changeset
91 eval dnssltime=\$nd${i}_dnssl${j}_lifetime
999c0c21711d RA: expire RDNSS and DNSSL entries
Roy Marples <roy@marples.name>
parents: 4322
diff changeset
92 [ -z "$dnssltime" ] && return 1
999c0c21711d RA: expire RDNSS and DNSSL entries
Roy Marples <roy@marples.name>
parents: 4322
diff changeset
93 ltime=$(($dnssltime - $offset))
999c0c21711d RA: expire RDNSS and DNSSL entries
Roy Marples <roy@marples.name>
parents: 4322
diff changeset
94 if [ "$ltime" -gt 0 ]; then
999c0c21711d RA: expire RDNSS and DNSSL entries
Roy Marples <roy@marples.name>
parents: 4322
diff changeset
95 eval dnssl=\$nd${i}_dnssl${j}_search
999c0c21711d RA: expire RDNSS and DNSSL entries
Roy Marples <roy@marples.name>
parents: 4322
diff changeset
96 [ -n "$dnssl" ] && new_dnssl="$new_dnssl${new_dnssl:+ }$dnssl"
999c0c21711d RA: expire RDNSS and DNSSL entries
Roy Marples <roy@marples.name>
parents: 4322
diff changeset
97 fi
3936
98da4513d0af Move dhcpcd-hooks dir to hooks
Roy Marples <roy@marples.name>
parents:
diff changeset
98
98da4513d0af Move dhcpcd-hooks dir to hooks
Roy Marples <roy@marples.name>
parents:
diff changeset
99 j=$(($j + 1))
98da4513d0af Move dhcpcd-hooks dir to hooks
Roy Marples <roy@marples.name>
parents:
diff changeset
100 return 0
98da4513d0af Move dhcpcd-hooks dir to hooks
Roy Marples <roy@marples.name>
parents:
diff changeset
101 }
98da4513d0af Move dhcpcd-hooks dir to hooks
Roy Marples <roy@marples.name>
parents:
diff changeset
102
98da4513d0af Move dhcpcd-hooks dir to hooks
Roy Marples <roy@marples.name>
parents:
diff changeset
103 add_resolv_conf()
98da4513d0af Move dhcpcd-hooks dir to hooks
Roy Marples <roy@marples.name>
parents:
diff changeset
104 {
4215
e323d30f279e dhcpcd-run-hooks: POSIX shell does not require the local builtin
Roy Marples <roy@marples.name>
parents: 3936
diff changeset
105 conf="$signature$NL"
e323d30f279e dhcpcd-run-hooks: POSIX shell does not require the local builtin
Roy Marples <roy@marples.name>
parents: 3936
diff changeset
106 warn=true
3936
98da4513d0af Move dhcpcd-hooks dir to hooks
Roy Marples <roy@marples.name>
parents:
diff changeset
107
98da4513d0af Move dhcpcd-hooks dir to hooks
Roy Marples <roy@marples.name>
parents:
diff changeset
108 # Loop to extract the ND DNS options using our indexed shell values
98da4513d0af Move dhcpcd-hooks dir to hooks
Roy Marples <roy@marples.name>
parents:
diff changeset
109 i=1
98da4513d0af Move dhcpcd-hooks dir to hooks
Roy Marples <roy@marples.name>
parents:
diff changeset
110 j=1
98da4513d0af Move dhcpcd-hooks dir to hooks
Roy Marples <roy@marples.name>
parents:
diff changeset
111 while true; do
4530
999c0c21711d RA: expire RDNSS and DNSSL entries
Roy Marples <roy@marples.name>
parents: 4322
diff changeset
112 eval acquired=\$nd${i}_acquired
999c0c21711d RA: expire RDNSS and DNSSL entries
Roy Marples <roy@marples.name>
parents: 4322
diff changeset
113 [ -z "$acquired" ] && break
999c0c21711d RA: expire RDNSS and DNSSL entries
Roy Marples <roy@marples.name>
parents: 4322
diff changeset
114 eval now=\$nd${i}_now
999c0c21711d RA: expire RDNSS and DNSSL entries
Roy Marples <roy@marples.name>
parents: 4322
diff changeset
115 [ -z "$now" ] && break
999c0c21711d RA: expire RDNSS and DNSSL entries
Roy Marples <roy@marples.name>
parents: 4322
diff changeset
116 offset=$(($now - $acquired))
3936
98da4513d0af Move dhcpcd-hooks dir to hooks
Roy Marples <roy@marples.name>
parents:
diff changeset
117 while true; do
98da4513d0af Move dhcpcd-hooks dir to hooks
Roy Marples <roy@marples.name>
parents:
diff changeset
118 eval_nd_dns || break
98da4513d0af Move dhcpcd-hooks dir to hooks
Roy Marples <roy@marples.name>
parents:
diff changeset
119 done
98da4513d0af Move dhcpcd-hooks dir to hooks
Roy Marples <roy@marples.name>
parents:
diff changeset
120 i=$(($i + 1))
98da4513d0af Move dhcpcd-hooks dir to hooks
Roy Marples <roy@marples.name>
parents:
diff changeset
121 j=1
98da4513d0af Move dhcpcd-hooks dir to hooks
Roy Marples <roy@marples.name>
parents:
diff changeset
122 done
98da4513d0af Move dhcpcd-hooks dir to hooks
Roy Marples <roy@marples.name>
parents:
diff changeset
123 [ -n "$new_rdnss" ] && \
98da4513d0af Move dhcpcd-hooks dir to hooks
Roy Marples <roy@marples.name>
parents:
diff changeset
124 new_domain_name_servers="$new_domain_name_servers${new_domain_name_servers:+ }$new_rdnss"
98da4513d0af Move dhcpcd-hooks dir to hooks
Roy Marples <roy@marples.name>
parents:
diff changeset
125 [ -n "$new_dnssl" ] && \
98da4513d0af Move dhcpcd-hooks dir to hooks
Roy Marples <roy@marples.name>
parents:
diff changeset
126 new_domain_search="$new_domain_search${new_domain_search:+ }$new_dnssl"
98da4513d0af Move dhcpcd-hooks dir to hooks
Roy Marples <roy@marples.name>
parents:
diff changeset
127
98da4513d0af Move dhcpcd-hooks dir to hooks
Roy Marples <roy@marples.name>
parents:
diff changeset
128 # Derive a new domain from our various hostname options
98da4513d0af Move dhcpcd-hooks dir to hooks
Roy Marples <roy@marples.name>
parents:
diff changeset
129 if [ -z "$new_domain_name" ]; then
98da4513d0af Move dhcpcd-hooks dir to hooks
Roy Marples <roy@marples.name>
parents:
diff changeset
130 if [ "$new_dhcp6_fqdn" != "${new_dhcp6_fqdn#*.}" ]; then
98da4513d0af Move dhcpcd-hooks dir to hooks
Roy Marples <roy@marples.name>
parents:
diff changeset
131 new_domain_name="${new_dhcp6_fqdn#*.}"
98da4513d0af Move dhcpcd-hooks dir to hooks
Roy Marples <roy@marples.name>
parents:
diff changeset
132 elif [ "$new_fqdn" != "${new_fqdn#*.}" ]; then
98da4513d0af Move dhcpcd-hooks dir to hooks
Roy Marples <roy@marples.name>
parents:
diff changeset
133 new_domain_name="${new_fqdn#*.}"
98da4513d0af Move dhcpcd-hooks dir to hooks
Roy Marples <roy@marples.name>
parents:
diff changeset
134 elif [ "$new_host_name" != "${new_host_name#*.}" ]; then
98da4513d0af Move dhcpcd-hooks dir to hooks
Roy Marples <roy@marples.name>
parents:
diff changeset
135 new_domain_name="${new_host_name#*.}"
98da4513d0af Move dhcpcd-hooks dir to hooks
Roy Marples <roy@marples.name>
parents:
diff changeset
136 fi
98da4513d0af Move dhcpcd-hooks dir to hooks
Roy Marples <roy@marples.name>
parents:
diff changeset
137 fi
98da4513d0af Move dhcpcd-hooks dir to hooks
Roy Marples <roy@marples.name>
parents:
diff changeset
138
98da4513d0af Move dhcpcd-hooks dir to hooks
Roy Marples <roy@marples.name>
parents:
diff changeset
139 # If we don't have any configuration, remove it
4322
0b2abe4e9d2e hooks: shell [ ] only supports 4 parameters
Roy Marples <roy@marples.name>
parents: 4215
diff changeset
140 if [ -z "$new_domain_name_servers" ] &&
0b2abe4e9d2e hooks: shell [ ] only supports 4 parameters
Roy Marples <roy@marples.name>
parents: 4215
diff changeset
141 [ -z "$new_domain_name" ] &&
0b2abe4e9d2e hooks: shell [ ] only supports 4 parameters
Roy Marples <roy@marples.name>
parents: 4215
diff changeset
142 [ -z "$new_domain_search" ]; then
3936
98da4513d0af Move dhcpcd-hooks dir to hooks
Roy Marples <roy@marples.name>
parents:
diff changeset
143 remove_resolv_conf
98da4513d0af Move dhcpcd-hooks dir to hooks
Roy Marples <roy@marples.name>
parents:
diff changeset
144 return $?
98da4513d0af Move dhcpcd-hooks dir to hooks
Roy Marples <roy@marples.name>
parents:
diff changeset
145 fi
98da4513d0af Move dhcpcd-hooks dir to hooks
Roy Marples <roy@marples.name>
parents:
diff changeset
146
98da4513d0af Move dhcpcd-hooks dir to hooks
Roy Marples <roy@marples.name>
parents:
diff changeset
147 if [ -n "$new_domain_name" ]; then
98da4513d0af Move dhcpcd-hooks dir to hooks
Roy Marples <roy@marples.name>
parents:
diff changeset
148 set -- $new_domain_name
98da4513d0af Move dhcpcd-hooks dir to hooks
Roy Marples <roy@marples.name>
parents:
diff changeset
149 if valid_domainname "$1"; then
98da4513d0af Move dhcpcd-hooks dir to hooks
Roy Marples <roy@marples.name>
parents:
diff changeset
150 conf="${conf}domain $1$NL"
98da4513d0af Move dhcpcd-hooks dir to hooks
Roy Marples <roy@marples.name>
parents:
diff changeset
151 else
98da4513d0af Move dhcpcd-hooks dir to hooks
Roy Marples <roy@marples.name>
parents:
diff changeset
152 syslog err "Invalid domain name: $1"
98da4513d0af Move dhcpcd-hooks dir to hooks
Roy Marples <roy@marples.name>
parents:
diff changeset
153 fi
98da4513d0af Move dhcpcd-hooks dir to hooks
Roy Marples <roy@marples.name>
parents:
diff changeset
154 # If there is no search this, make this one
98da4513d0af Move dhcpcd-hooks dir to hooks
Roy Marples <roy@marples.name>
parents:
diff changeset
155 if [ -z "$new_domain_search" ]; then
98da4513d0af Move dhcpcd-hooks dir to hooks
Roy Marples <roy@marples.name>
parents:
diff changeset
156 new_domain_search="$new_domain_name"
98da4513d0af Move dhcpcd-hooks dir to hooks
Roy Marples <roy@marples.name>
parents:
diff changeset
157 [ "$new_domain_name" = "$1" ] && warn=true
98da4513d0af Move dhcpcd-hooks dir to hooks
Roy Marples <roy@marples.name>
parents:
diff changeset
158 fi
98da4513d0af Move dhcpcd-hooks dir to hooks
Roy Marples <roy@marples.name>
parents:
diff changeset
159 fi
98da4513d0af Move dhcpcd-hooks dir to hooks
Roy Marples <roy@marples.name>
parents:
diff changeset
160 if [ -n "$new_domain_search" ]; then
5108
b2ea9faab536 resolv.conf: Uniquify contents
Roy Marples <roy@marples.name>
parents: 4552
diff changeset
161 new_domain_search=$(uniqify $new_domain_search)
3936
98da4513d0af Move dhcpcd-hooks dir to hooks
Roy Marples <roy@marples.name>
parents:
diff changeset
162 if valid_domainname_list $new_domain_search; then
98da4513d0af Move dhcpcd-hooks dir to hooks
Roy Marples <roy@marples.name>
parents:
diff changeset
163 conf="${conf}search $new_domain_search$NL"
98da4513d0af Move dhcpcd-hooks dir to hooks
Roy Marples <roy@marples.name>
parents:
diff changeset
164 elif ! $warn; then
98da4513d0af Move dhcpcd-hooks dir to hooks
Roy Marples <roy@marples.name>
parents:
diff changeset
165 syslog err "Invalid domain name in list:" \
98da4513d0af Move dhcpcd-hooks dir to hooks
Roy Marples <roy@marples.name>
parents:
diff changeset
166 "$new_domain_search"
98da4513d0af Move dhcpcd-hooks dir to hooks
Roy Marples <roy@marples.name>
parents:
diff changeset
167 fi
98da4513d0af Move dhcpcd-hooks dir to hooks
Roy Marples <roy@marples.name>
parents:
diff changeset
168 fi
5108
b2ea9faab536 resolv.conf: Uniquify contents
Roy Marples <roy@marples.name>
parents: 4552
diff changeset
169 new_domain_name_servers=$(uniqify $new_domain_name_servers)
3936
98da4513d0af Move dhcpcd-hooks dir to hooks
Roy Marples <roy@marples.name>
parents:
diff changeset
170 for x in ${new_domain_name_servers}; do
98da4513d0af Move dhcpcd-hooks dir to hooks
Roy Marples <roy@marples.name>
parents:
diff changeset
171 conf="${conf}nameserver $x$NL"
98da4513d0af Move dhcpcd-hooks dir to hooks
Roy Marples <roy@marples.name>
parents:
diff changeset
172 done
5567
4fe5c2a71254 hooks: add NOCARRIER_ROAMING reason
Roy Marples <roy@marples.name>
parents: 5535
diff changeset
173 if $have_resolvconf; then
3936
98da4513d0af Move dhcpcd-hooks dir to hooks
Roy Marples <roy@marples.name>
parents:
diff changeset
174 [ -n "$ifmetric" ] && export IF_METRIC="$ifmetric"
98da4513d0af Move dhcpcd-hooks dir to hooks
Roy Marples <roy@marples.name>
parents:
diff changeset
175 printf %s "$conf" | "$resolvconf" -a "$ifname"
98da4513d0af Move dhcpcd-hooks dir to hooks
Roy Marples <roy@marples.name>
parents:
diff changeset
176 return $?
98da4513d0af Move dhcpcd-hooks dir to hooks
Roy Marples <roy@marples.name>
parents:
diff changeset
177 fi
98da4513d0af Move dhcpcd-hooks dir to hooks
Roy Marples <roy@marples.name>
parents:
diff changeset
178
98da4513d0af Move dhcpcd-hooks dir to hooks
Roy Marples <roy@marples.name>
parents:
diff changeset
179 if [ -e "$resolv_conf_dir/$ifname" ]; then
98da4513d0af Move dhcpcd-hooks dir to hooks
Roy Marples <roy@marples.name>
parents:
diff changeset
180 rm -f "$resolv_conf_dir/$ifname"
98da4513d0af Move dhcpcd-hooks dir to hooks
Roy Marples <roy@marples.name>
parents:
diff changeset
181 fi
98da4513d0af Move dhcpcd-hooks dir to hooks
Roy Marples <roy@marples.name>
parents:
diff changeset
182 [ -d "$resolv_conf_dir" ] || mkdir -p "$resolv_conf_dir"
98da4513d0af Move dhcpcd-hooks dir to hooks
Roy Marples <roy@marples.name>
parents:
diff changeset
183 printf %s "$conf" > "$resolv_conf_dir/$ifname"
98da4513d0af Move dhcpcd-hooks dir to hooks
Roy Marples <roy@marples.name>
parents:
diff changeset
184 build_resolv_conf
98da4513d0af Move dhcpcd-hooks dir to hooks
Roy Marples <roy@marples.name>
parents:
diff changeset
185 }
98da4513d0af Move dhcpcd-hooks dir to hooks
Roy Marples <roy@marples.name>
parents:
diff changeset
186
98da4513d0af Move dhcpcd-hooks dir to hooks
Roy Marples <roy@marples.name>
parents:
diff changeset
187 remove_resolv_conf()
98da4513d0af Move dhcpcd-hooks dir to hooks
Roy Marples <roy@marples.name>
parents:
diff changeset
188 {
5567
4fe5c2a71254 hooks: add NOCARRIER_ROAMING reason
Roy Marples <roy@marples.name>
parents: 5535
diff changeset
189 if $have_resolvconf; then
3936
98da4513d0af Move dhcpcd-hooks dir to hooks
Roy Marples <roy@marples.name>
parents:
diff changeset
190 "$resolvconf" -d "$ifname" -f
98da4513d0af Move dhcpcd-hooks dir to hooks
Roy Marples <roy@marples.name>
parents:
diff changeset
191 else
98da4513d0af Move dhcpcd-hooks dir to hooks
Roy Marples <roy@marples.name>
parents:
diff changeset
192 if [ -e "$resolv_conf_dir/$ifname" ]; then
98da4513d0af Move dhcpcd-hooks dir to hooks
Roy Marples <roy@marples.name>
parents:
diff changeset
193 rm -f "$resolv_conf_dir/$ifname"
98da4513d0af Move dhcpcd-hooks dir to hooks
Roy Marples <roy@marples.name>
parents:
diff changeset
194 fi
98da4513d0af Move dhcpcd-hooks dir to hooks
Roy Marples <roy@marples.name>
parents:
diff changeset
195 build_resolv_conf
98da4513d0af Move dhcpcd-hooks dir to hooks
Roy Marples <roy@marples.name>
parents:
diff changeset
196 fi
98da4513d0af Move dhcpcd-hooks dir to hooks
Roy Marples <roy@marples.name>
parents:
diff changeset
197 }
98da4513d0af Move dhcpcd-hooks dir to hooks
Roy Marples <roy@marples.name>
parents:
diff changeset
198
98da4513d0af Move dhcpcd-hooks dir to hooks
Roy Marples <roy@marples.name>
parents:
diff changeset
199 # For ease of use, map DHCP6 names onto our DHCP4 names
98da4513d0af Move dhcpcd-hooks dir to hooks
Roy Marples <roy@marples.name>
parents:
diff changeset
200 case "$reason" in
98da4513d0af Move dhcpcd-hooks dir to hooks
Roy Marples <roy@marples.name>
parents:
diff changeset
201 BOUND6|RENEW6|REBIND6|REBOOT6|INFORM6)
98da4513d0af Move dhcpcd-hooks dir to hooks
Roy Marples <roy@marples.name>
parents:
diff changeset
202 new_domain_name_servers="$new_dhcp6_name_servers"
98da4513d0af Move dhcpcd-hooks dir to hooks
Roy Marples <roy@marples.name>
parents:
diff changeset
203 new_domain_search="$new_dhcp6_domain_search"
98da4513d0af Move dhcpcd-hooks dir to hooks
Roy Marples <roy@marples.name>
parents:
diff changeset
204 ;;
98da4513d0af Move dhcpcd-hooks dir to hooks
Roy Marples <roy@marples.name>
parents:
diff changeset
205 esac
98da4513d0af Move dhcpcd-hooks dir to hooks
Roy Marples <roy@marples.name>
parents:
diff changeset
206
5535
a0d828e25482 Add --noconfigure option
Roy Marples <roy@marples.name>
parents: 5108
diff changeset
207 if $if_configured; then
5567
4fe5c2a71254 hooks: add NOCARRIER_ROAMING reason
Roy Marples <roy@marples.name>
parents: 5535
diff changeset
208 if $have_resolvconf && [ "$reason" = NOCARRIER_ROAMING ]; then
5572
aae13416e9b7 20-resolv.conf: Don't call resolvconf -c if we didn't call -C
Roy Marples <roy@marples.name>
parents: 5567
diff changeset
209 # avoid calling resolvconf -c on CARRIER unless we roam
aae13416e9b7 20-resolv.conf: Don't call resolvconf -c if we didn't call -C
Roy Marples <roy@marples.name>
parents: 5567
diff changeset
210 mkdir -p "$nocarrier_roaming_dir"
aae13416e9b7 20-resolv.conf: Don't call resolvconf -c if we didn't call -C
Roy Marples <roy@marples.name>
parents: 5567
diff changeset
211 echo " " >"$nocarrier_roaming_dir/$interface"
5567
4fe5c2a71254 hooks: add NOCARRIER_ROAMING reason
Roy Marples <roy@marples.name>
parents: 5535
diff changeset
212 "$resolvconf" -C "$interface.*"
4fe5c2a71254 hooks: add NOCARRIER_ROAMING reason
Roy Marples <roy@marples.name>
parents: 5535
diff changeset
213 elif $have_resolvconf && [ "$reason" = CARRIER ]; then
5572
aae13416e9b7 20-resolv.conf: Don't call resolvconf -c if we didn't call -C
Roy Marples <roy@marples.name>
parents: 5567
diff changeset
214 # Not all resolvconf implementations support -c
aae13416e9b7 20-resolv.conf: Don't call resolvconf -c if we didn't call -C
Roy Marples <roy@marples.name>
parents: 5567
diff changeset
215 if [ -e "$nocarrier_roaming_dir/$interface" ]; then
aae13416e9b7 20-resolv.conf: Don't call resolvconf -c if we didn't call -C
Roy Marples <roy@marples.name>
parents: 5567
diff changeset
216 rm -f "$nocarrier_roaming_dir/$interface"
aae13416e9b7 20-resolv.conf: Don't call resolvconf -c if we didn't call -C
Roy Marples <roy@marples.name>
parents: 5567
diff changeset
217 "$resolvconf" -c "$interface.*"
aae13416e9b7 20-resolv.conf: Don't call resolvconf -c if we didn't call -C
Roy Marples <roy@marples.name>
parents: 5567
diff changeset
218 fi
5567
4fe5c2a71254 hooks: add NOCARRIER_ROAMING reason
Roy Marples <roy@marples.name>
parents: 5535
diff changeset
219 elif $if_up || [ "$reason" = ROUTERADVERT ]; then
5535
a0d828e25482 Add --noconfigure option
Roy Marples <roy@marples.name>
parents: 5108
diff changeset
220 add_resolv_conf
a0d828e25482 Add --noconfigure option
Roy Marples <roy@marples.name>
parents: 5108
diff changeset
221 elif $if_down; then
a0d828e25482 Add --noconfigure option
Roy Marples <roy@marples.name>
parents: 5108
diff changeset
222 remove_resolv_conf
a0d828e25482 Add --noconfigure option
Roy Marples <roy@marples.name>
parents: 5108
diff changeset
223 fi
3936
98da4513d0af Move dhcpcd-hooks dir to hooks
Roy Marples <roy@marples.name>
parents:
diff changeset
224 fi