annotate hooks/20-resolv.conf @ 5535:a0d828e25482 draft

Add --noconfigure option With this set dhcpcd will not configure anything on the host. The expectation is that a 3rd party script will instead.
author Roy Marples <roy@marples.name>
date Wed, 04 Nov 2020 14:18:48 +0000
parents b2ea9faab536
children 4fe5c2a71254
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"
98da4513d0af Move dhcpcd-hooks dir to hooks
Roy Marples <roy@marples.name>
parents:
diff changeset
10 NL="
98da4513d0af Move dhcpcd-hooks dir to hooks
Roy Marples <roy@marples.name>
parents:
diff changeset
11 "
98da4513d0af Move dhcpcd-hooks dir to hooks
Roy Marples <roy@marples.name>
parents:
diff changeset
12 : ${resolvconf:=resolvconf}
98da4513d0af Move dhcpcd-hooks dir to hooks
Roy Marples <roy@marples.name>
parents:
diff changeset
13
98da4513d0af Move dhcpcd-hooks dir to hooks
Roy Marples <roy@marples.name>
parents:
diff changeset
14 build_resolv_conf()
98da4513d0af Move dhcpcd-hooks dir to hooks
Roy Marples <roy@marples.name>
parents:
diff changeset
15 {
4215
e323d30f279e dhcpcd-run-hooks: POSIX shell does not require the local builtin
Roy Marples <roy@marples.name>
parents: 3936
diff changeset
16 cf="$state_dir/resolv.conf.$ifname"
3936
98da4513d0af Move dhcpcd-hooks dir to hooks
Roy Marples <roy@marples.name>
parents:
diff changeset
17
98da4513d0af Move dhcpcd-hooks dir to hooks
Roy Marples <roy@marples.name>
parents:
diff changeset
18 # Build a list of interfaces
98da4513d0af Move dhcpcd-hooks dir to hooks
Roy Marples <roy@marples.name>
parents:
diff changeset
19 interfaces=$(list_interfaces "$resolv_conf_dir")
98da4513d0af Move dhcpcd-hooks dir to hooks
Roy Marples <roy@marples.name>
parents:
diff changeset
20
98da4513d0af Move dhcpcd-hooks dir to hooks
Roy Marples <roy@marples.name>
parents:
diff changeset
21 # Build the resolv.conf
4552
d62e5b96b66e hooks: Ensure header is empty before populating it.
Roy Marples <roy@marples.name>
parents: 4530
diff changeset
22 header=
3936
98da4513d0af Move dhcpcd-hooks dir to hooks
Roy Marples <roy@marples.name>
parents:
diff changeset
23 if [ -n "$interfaces" ]; then
98da4513d0af Move dhcpcd-hooks dir to hooks
Roy Marples <roy@marples.name>
parents:
diff changeset
24 # Build the header
98da4513d0af Move dhcpcd-hooks dir to hooks
Roy Marples <roy@marples.name>
parents:
diff changeset
25 for x in ${interfaces}; do
98da4513d0af Move dhcpcd-hooks dir to hooks
Roy Marples <roy@marples.name>
parents:
diff changeset
26 header="$header${header:+, }$x"
98da4513d0af Move dhcpcd-hooks dir to hooks
Roy Marples <roy@marples.name>
parents:
diff changeset
27 done
98da4513d0af Move dhcpcd-hooks dir to hooks
Roy Marples <roy@marples.name>
parents:
diff changeset
28
98da4513d0af Move dhcpcd-hooks dir to hooks
Roy Marples <roy@marples.name>
parents:
diff changeset
29 # Build the search list
98da4513d0af Move dhcpcd-hooks dir to hooks
Roy Marples <roy@marples.name>
parents:
diff changeset
30 domain=$(cd "$resolv_conf_dir"; \
98da4513d0af Move dhcpcd-hooks dir to hooks
Roy Marples <roy@marples.name>
parents:
diff changeset
31 key_get_value "domain " ${interfaces})
98da4513d0af Move dhcpcd-hooks dir to hooks
Roy Marples <roy@marples.name>
parents:
diff changeset
32 search=$(cd "$resolv_conf_dir"; \
98da4513d0af Move dhcpcd-hooks dir to hooks
Roy Marples <roy@marples.name>
parents:
diff changeset
33 key_get_value "search " ${interfaces})
98da4513d0af Move dhcpcd-hooks dir to hooks
Roy Marples <roy@marples.name>
parents:
diff changeset
34 set -- ${domain}
98da4513d0af Move dhcpcd-hooks dir to hooks
Roy Marples <roy@marples.name>
parents:
diff changeset
35 domain="$1"
98da4513d0af Move dhcpcd-hooks dir to hooks
Roy Marples <roy@marples.name>
parents:
diff changeset
36 [ -n "$2" ] && search="$search $*"
98da4513d0af Move dhcpcd-hooks dir to hooks
Roy Marples <roy@marples.name>
parents:
diff changeset
37 [ -n "$search" ] && search="$(uniqify $search)"
98da4513d0af Move dhcpcd-hooks dir to hooks
Roy Marples <roy@marples.name>
parents:
diff changeset
38 [ "$domain" = "$search" ] && search=
98da4513d0af Move dhcpcd-hooks dir to hooks
Roy Marples <roy@marples.name>
parents:
diff changeset
39 [ -n "$domain" ] && domain="domain $domain$NL"
98da4513d0af Move dhcpcd-hooks dir to hooks
Roy Marples <roy@marples.name>
parents:
diff changeset
40 [ -n "$search" ] && search="search $search$NL"
98da4513d0af Move dhcpcd-hooks dir to hooks
Roy Marples <roy@marples.name>
parents:
diff changeset
41
98da4513d0af Move dhcpcd-hooks dir to hooks
Roy Marples <roy@marples.name>
parents:
diff changeset
42 # Build the nameserver list
98da4513d0af Move dhcpcd-hooks dir to hooks
Roy Marples <roy@marples.name>
parents:
diff changeset
43 srvs=$(cd "$resolv_conf_dir"; \
98da4513d0af Move dhcpcd-hooks dir to hooks
Roy Marples <roy@marples.name>
parents:
diff changeset
44 key_get_value "nameserver " ${interfaces})
5108
b2ea9faab536 resolv.conf: Uniquify contents
Roy Marples <roy@marples.name>
parents: 4552
diff changeset
45 for x in $(uniqify $srvs); do
3936
98da4513d0af Move dhcpcd-hooks dir to hooks
Roy Marples <roy@marples.name>
parents:
diff changeset
46 servers="${servers}nameserver $x$NL"
98da4513d0af Move dhcpcd-hooks dir to hooks
Roy Marples <roy@marples.name>
parents:
diff changeset
47 done
98da4513d0af Move dhcpcd-hooks dir to hooks
Roy Marples <roy@marples.name>
parents:
diff changeset
48 fi
98da4513d0af Move dhcpcd-hooks dir to hooks
Roy Marples <roy@marples.name>
parents:
diff changeset
49 header="$signature_base${header:+ $from }$header"
98da4513d0af Move dhcpcd-hooks dir to hooks
Roy Marples <roy@marples.name>
parents:
diff changeset
50
98da4513d0af Move dhcpcd-hooks dir to hooks
Roy Marples <roy@marples.name>
parents:
diff changeset
51 # Assemble resolv.conf using our head and tail files
98da4513d0af Move dhcpcd-hooks dir to hooks
Roy Marples <roy@marples.name>
parents:
diff changeset
52 [ -f "$cf" ] && rm -f "$cf"
98da4513d0af Move dhcpcd-hooks dir to hooks
Roy Marples <roy@marples.name>
parents:
diff changeset
53 [ -d "$resolv_conf_dir" ] || mkdir -p "$resolv_conf_dir"
98da4513d0af Move dhcpcd-hooks dir to hooks
Roy Marples <roy@marples.name>
parents:
diff changeset
54 echo "$header" > "$cf"
98da4513d0af Move dhcpcd-hooks dir to hooks
Roy Marples <roy@marples.name>
parents:
diff changeset
55 if [ -f /etc/resolv.conf.head ]; then
98da4513d0af Move dhcpcd-hooks dir to hooks
Roy Marples <roy@marples.name>
parents:
diff changeset
56 cat /etc/resolv.conf.head >> "$cf"
98da4513d0af Move dhcpcd-hooks dir to hooks
Roy Marples <roy@marples.name>
parents:
diff changeset
57 else
98da4513d0af Move dhcpcd-hooks dir to hooks
Roy Marples <roy@marples.name>
parents:
diff changeset
58 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
59 fi
98da4513d0af Move dhcpcd-hooks dir to hooks
Roy Marples <roy@marples.name>
parents:
diff changeset
60 printf %s "$domain$search$servers" >> "$cf"
98da4513d0af Move dhcpcd-hooks dir to hooks
Roy Marples <roy@marples.name>
parents:
diff changeset
61 if [ -f /etc/resolv.conf.tail ]; then
98da4513d0af Move dhcpcd-hooks dir to hooks
Roy Marples <roy@marples.name>
parents:
diff changeset
62 cat /etc/resolv.conf.tail >> "$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.tail 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 if change_file /etc/resolv.conf "$cf"; then
98da4513d0af Move dhcpcd-hooks dir to hooks
Roy Marples <roy@marples.name>
parents:
diff changeset
67 chmod 644 /etc/resolv.conf
98da4513d0af Move dhcpcd-hooks dir to hooks
Roy Marples <roy@marples.name>
parents:
diff changeset
68 fi
98da4513d0af Move dhcpcd-hooks dir to hooks
Roy Marples <roy@marples.name>
parents:
diff changeset
69 rm -f "$cf"
98da4513d0af Move dhcpcd-hooks dir to hooks
Roy Marples <roy@marples.name>
parents:
diff changeset
70 }
98da4513d0af Move dhcpcd-hooks dir to hooks
Roy Marples <roy@marples.name>
parents:
diff changeset
71
98da4513d0af Move dhcpcd-hooks dir to hooks
Roy Marples <roy@marples.name>
parents:
diff changeset
72 # 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
73 # Obey the lifetimes
3936
98da4513d0af Move dhcpcd-hooks dir to hooks
Roy Marples <roy@marples.name>
parents:
diff changeset
74 eval_nd_dns()
98da4513d0af Move dhcpcd-hooks dir to hooks
Roy Marples <roy@marples.name>
parents:
diff changeset
75 {
4530
999c0c21711d RA: expire RDNSS and DNSSL entries
Roy Marples <roy@marples.name>
parents: 4322
diff changeset
76
999c0c21711d RA: expire RDNSS and DNSSL entries
Roy Marples <roy@marples.name>
parents: 4322
diff changeset
77 eval rdnsstime=\$nd${i}_rdnss${j}_lifetime
999c0c21711d RA: expire RDNSS and DNSSL entries
Roy Marples <roy@marples.name>
parents: 4322
diff changeset
78 [ -z "$rdnsstime" ] && return 1
999c0c21711d RA: expire RDNSS and DNSSL entries
Roy Marples <roy@marples.name>
parents: 4322
diff changeset
79 ltime=$(($rdnsstime - $offset))
999c0c21711d RA: expire RDNSS and DNSSL entries
Roy Marples <roy@marples.name>
parents: 4322
diff changeset
80 if [ "$ltime" -gt 0 ]; then
3936
98da4513d0af Move dhcpcd-hooks dir to hooks
Roy Marples <roy@marples.name>
parents:
diff changeset
81 eval rdnss=\$nd${i}_rdnss${j}_servers
4530
999c0c21711d RA: expire RDNSS and DNSSL entries
Roy Marples <roy@marples.name>
parents: 4322
diff changeset
82 [ -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
83 fi
98da4513d0af Move dhcpcd-hooks dir to hooks
Roy Marples <roy@marples.name>
parents:
diff changeset
84
4530
999c0c21711d RA: expire RDNSS and DNSSL entries
Roy Marples <roy@marples.name>
parents: 4322
diff changeset
85 eval dnssltime=\$nd${i}_dnssl${j}_lifetime
999c0c21711d RA: expire RDNSS and DNSSL entries
Roy Marples <roy@marples.name>
parents: 4322
diff changeset
86 [ -z "$dnssltime" ] && return 1
999c0c21711d RA: expire RDNSS and DNSSL entries
Roy Marples <roy@marples.name>
parents: 4322
diff changeset
87 ltime=$(($dnssltime - $offset))
999c0c21711d RA: expire RDNSS and DNSSL entries
Roy Marples <roy@marples.name>
parents: 4322
diff changeset
88 if [ "$ltime" -gt 0 ]; then
999c0c21711d RA: expire RDNSS and DNSSL entries
Roy Marples <roy@marples.name>
parents: 4322
diff changeset
89 eval dnssl=\$nd${i}_dnssl${j}_search
999c0c21711d RA: expire RDNSS and DNSSL entries
Roy Marples <roy@marples.name>
parents: 4322
diff changeset
90 [ -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
91 fi
3936
98da4513d0af Move dhcpcd-hooks dir to hooks
Roy Marples <roy@marples.name>
parents:
diff changeset
92
98da4513d0af Move dhcpcd-hooks dir to hooks
Roy Marples <roy@marples.name>
parents:
diff changeset
93 j=$(($j + 1))
98da4513d0af Move dhcpcd-hooks dir to hooks
Roy Marples <roy@marples.name>
parents:
diff changeset
94 return 0
98da4513d0af Move dhcpcd-hooks dir to hooks
Roy Marples <roy@marples.name>
parents:
diff changeset
95 }
98da4513d0af Move dhcpcd-hooks dir to hooks
Roy Marples <roy@marples.name>
parents:
diff changeset
96
98da4513d0af Move dhcpcd-hooks dir to hooks
Roy Marples <roy@marples.name>
parents:
diff changeset
97 add_resolv_conf()
98da4513d0af Move dhcpcd-hooks dir to hooks
Roy Marples <roy@marples.name>
parents:
diff changeset
98 {
4215
e323d30f279e dhcpcd-run-hooks: POSIX shell does not require the local builtin
Roy Marples <roy@marples.name>
parents: 3936
diff changeset
99 conf="$signature$NL"
e323d30f279e dhcpcd-run-hooks: POSIX shell does not require the local builtin
Roy Marples <roy@marples.name>
parents: 3936
diff changeset
100 warn=true
3936
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 # 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
103 i=1
98da4513d0af Move dhcpcd-hooks dir to hooks
Roy Marples <roy@marples.name>
parents:
diff changeset
104 j=1
98da4513d0af Move dhcpcd-hooks dir to hooks
Roy Marples <roy@marples.name>
parents:
diff changeset
105 while true; do
4530
999c0c21711d RA: expire RDNSS and DNSSL entries
Roy Marples <roy@marples.name>
parents: 4322
diff changeset
106 eval acquired=\$nd${i}_acquired
999c0c21711d RA: expire RDNSS and DNSSL entries
Roy Marples <roy@marples.name>
parents: 4322
diff changeset
107 [ -z "$acquired" ] && break
999c0c21711d RA: expire RDNSS and DNSSL entries
Roy Marples <roy@marples.name>
parents: 4322
diff changeset
108 eval now=\$nd${i}_now
999c0c21711d RA: expire RDNSS and DNSSL entries
Roy Marples <roy@marples.name>
parents: 4322
diff changeset
109 [ -z "$now" ] && break
999c0c21711d RA: expire RDNSS and DNSSL entries
Roy Marples <roy@marples.name>
parents: 4322
diff changeset
110 offset=$(($now - $acquired))
3936
98da4513d0af Move dhcpcd-hooks dir to hooks
Roy Marples <roy@marples.name>
parents:
diff changeset
111 while true; do
98da4513d0af Move dhcpcd-hooks dir to hooks
Roy Marples <roy@marples.name>
parents:
diff changeset
112 eval_nd_dns || break
98da4513d0af Move dhcpcd-hooks dir to hooks
Roy Marples <roy@marples.name>
parents:
diff changeset
113 done
98da4513d0af Move dhcpcd-hooks dir to hooks
Roy Marples <roy@marples.name>
parents:
diff changeset
114 i=$(($i + 1))
98da4513d0af Move dhcpcd-hooks dir to hooks
Roy Marples <roy@marples.name>
parents:
diff changeset
115 j=1
98da4513d0af Move dhcpcd-hooks dir to hooks
Roy Marples <roy@marples.name>
parents:
diff changeset
116 done
98da4513d0af Move dhcpcd-hooks dir to hooks
Roy Marples <roy@marples.name>
parents:
diff changeset
117 [ -n "$new_rdnss" ] && \
98da4513d0af Move dhcpcd-hooks dir to hooks
Roy Marples <roy@marples.name>
parents:
diff changeset
118 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
119 [ -n "$new_dnssl" ] && \
98da4513d0af Move dhcpcd-hooks dir to hooks
Roy Marples <roy@marples.name>
parents:
diff changeset
120 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
121
98da4513d0af Move dhcpcd-hooks dir to hooks
Roy Marples <roy@marples.name>
parents:
diff changeset
122 # Derive a new domain from our various hostname options
98da4513d0af Move dhcpcd-hooks dir to hooks
Roy Marples <roy@marples.name>
parents:
diff changeset
123 if [ -z "$new_domain_name" ]; then
98da4513d0af Move dhcpcd-hooks dir to hooks
Roy Marples <roy@marples.name>
parents:
diff changeset
124 if [ "$new_dhcp6_fqdn" != "${new_dhcp6_fqdn#*.}" ]; then
98da4513d0af Move dhcpcd-hooks dir to hooks
Roy Marples <roy@marples.name>
parents:
diff changeset
125 new_domain_name="${new_dhcp6_fqdn#*.}"
98da4513d0af Move dhcpcd-hooks dir to hooks
Roy Marples <roy@marples.name>
parents:
diff changeset
126 elif [ "$new_fqdn" != "${new_fqdn#*.}" ]; then
98da4513d0af Move dhcpcd-hooks dir to hooks
Roy Marples <roy@marples.name>
parents:
diff changeset
127 new_domain_name="${new_fqdn#*.}"
98da4513d0af Move dhcpcd-hooks dir to hooks
Roy Marples <roy@marples.name>
parents:
diff changeset
128 elif [ "$new_host_name" != "${new_host_name#*.}" ]; then
98da4513d0af Move dhcpcd-hooks dir to hooks
Roy Marples <roy@marples.name>
parents:
diff changeset
129 new_domain_name="${new_host_name#*.}"
98da4513d0af Move dhcpcd-hooks dir to hooks
Roy Marples <roy@marples.name>
parents:
diff changeset
130 fi
98da4513d0af Move dhcpcd-hooks dir to hooks
Roy Marples <roy@marples.name>
parents:
diff changeset
131 fi
98da4513d0af Move dhcpcd-hooks dir to hooks
Roy Marples <roy@marples.name>
parents:
diff changeset
132
98da4513d0af Move dhcpcd-hooks dir to hooks
Roy Marples <roy@marples.name>
parents:
diff changeset
133 # 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
134 if [ -z "$new_domain_name_servers" ] &&
0b2abe4e9d2e hooks: shell [ ] only supports 4 parameters
Roy Marples <roy@marples.name>
parents: 4215
diff changeset
135 [ -z "$new_domain_name" ] &&
0b2abe4e9d2e hooks: shell [ ] only supports 4 parameters
Roy Marples <roy@marples.name>
parents: 4215
diff changeset
136 [ -z "$new_domain_search" ]; then
3936
98da4513d0af Move dhcpcd-hooks dir to hooks
Roy Marples <roy@marples.name>
parents:
diff changeset
137 remove_resolv_conf
98da4513d0af Move dhcpcd-hooks dir to hooks
Roy Marples <roy@marples.name>
parents:
diff changeset
138 return $?
98da4513d0af Move dhcpcd-hooks dir to hooks
Roy Marples <roy@marples.name>
parents:
diff changeset
139 fi
98da4513d0af Move dhcpcd-hooks dir to hooks
Roy Marples <roy@marples.name>
parents:
diff changeset
140
98da4513d0af Move dhcpcd-hooks dir to hooks
Roy Marples <roy@marples.name>
parents:
diff changeset
141 if [ -n "$new_domain_name" ]; then
98da4513d0af Move dhcpcd-hooks dir to hooks
Roy Marples <roy@marples.name>
parents:
diff changeset
142 set -- $new_domain_name
98da4513d0af Move dhcpcd-hooks dir to hooks
Roy Marples <roy@marples.name>
parents:
diff changeset
143 if valid_domainname "$1"; then
98da4513d0af Move dhcpcd-hooks dir to hooks
Roy Marples <roy@marples.name>
parents:
diff changeset
144 conf="${conf}domain $1$NL"
98da4513d0af Move dhcpcd-hooks dir to hooks
Roy Marples <roy@marples.name>
parents:
diff changeset
145 else
98da4513d0af Move dhcpcd-hooks dir to hooks
Roy Marples <roy@marples.name>
parents:
diff changeset
146 syslog err "Invalid domain name: $1"
98da4513d0af Move dhcpcd-hooks dir to hooks
Roy Marples <roy@marples.name>
parents:
diff changeset
147 fi
98da4513d0af Move dhcpcd-hooks dir to hooks
Roy Marples <roy@marples.name>
parents:
diff changeset
148 # If there is no search this, make this one
98da4513d0af Move dhcpcd-hooks dir to hooks
Roy Marples <roy@marples.name>
parents:
diff changeset
149 if [ -z "$new_domain_search" ]; then
98da4513d0af Move dhcpcd-hooks dir to hooks
Roy Marples <roy@marples.name>
parents:
diff changeset
150 new_domain_search="$new_domain_name"
98da4513d0af Move dhcpcd-hooks dir to hooks
Roy Marples <roy@marples.name>
parents:
diff changeset
151 [ "$new_domain_name" = "$1" ] && warn=true
98da4513d0af Move dhcpcd-hooks dir to hooks
Roy Marples <roy@marples.name>
parents:
diff changeset
152 fi
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 [ -n "$new_domain_search" ]; then
5108
b2ea9faab536 resolv.conf: Uniquify contents
Roy Marples <roy@marples.name>
parents: 4552
diff changeset
155 new_domain_search=$(uniqify $new_domain_search)
3936
98da4513d0af Move dhcpcd-hooks dir to hooks
Roy Marples <roy@marples.name>
parents:
diff changeset
156 if valid_domainname_list $new_domain_search; then
98da4513d0af Move dhcpcd-hooks dir to hooks
Roy Marples <roy@marples.name>
parents:
diff changeset
157 conf="${conf}search $new_domain_search$NL"
98da4513d0af Move dhcpcd-hooks dir to hooks
Roy Marples <roy@marples.name>
parents:
diff changeset
158 elif ! $warn; then
98da4513d0af Move dhcpcd-hooks dir to hooks
Roy Marples <roy@marples.name>
parents:
diff changeset
159 syslog err "Invalid domain name in list:" \
98da4513d0af Move dhcpcd-hooks dir to hooks
Roy Marples <roy@marples.name>
parents:
diff changeset
160 "$new_domain_search"
98da4513d0af Move dhcpcd-hooks dir to hooks
Roy Marples <roy@marples.name>
parents:
diff changeset
161 fi
98da4513d0af Move dhcpcd-hooks dir to hooks
Roy Marples <roy@marples.name>
parents:
diff changeset
162 fi
5108
b2ea9faab536 resolv.conf: Uniquify contents
Roy Marples <roy@marples.name>
parents: 4552
diff changeset
163 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
164 for x in ${new_domain_name_servers}; do
98da4513d0af Move dhcpcd-hooks dir to hooks
Roy Marples <roy@marples.name>
parents:
diff changeset
165 conf="${conf}nameserver $x$NL"
98da4513d0af Move dhcpcd-hooks dir to hooks
Roy Marples <roy@marples.name>
parents:
diff changeset
166 done
98da4513d0af Move dhcpcd-hooks dir to hooks
Roy Marples <roy@marples.name>
parents:
diff changeset
167 if type "$resolvconf" >/dev/null 2>&1; then
98da4513d0af Move dhcpcd-hooks dir to hooks
Roy Marples <roy@marples.name>
parents:
diff changeset
168 [ -n "$ifmetric" ] && export IF_METRIC="$ifmetric"
98da4513d0af Move dhcpcd-hooks dir to hooks
Roy Marples <roy@marples.name>
parents:
diff changeset
169 printf %s "$conf" | "$resolvconf" -a "$ifname"
98da4513d0af Move dhcpcd-hooks dir to hooks
Roy Marples <roy@marples.name>
parents:
diff changeset
170 return $?
98da4513d0af Move dhcpcd-hooks dir to hooks
Roy Marples <roy@marples.name>
parents:
diff changeset
171 fi
98da4513d0af Move dhcpcd-hooks dir to hooks
Roy Marples <roy@marples.name>
parents:
diff changeset
172
98da4513d0af Move dhcpcd-hooks dir to hooks
Roy Marples <roy@marples.name>
parents:
diff changeset
173 if [ -e "$resolv_conf_dir/$ifname" ]; then
98da4513d0af Move dhcpcd-hooks dir to hooks
Roy Marples <roy@marples.name>
parents:
diff changeset
174 rm -f "$resolv_conf_dir/$ifname"
98da4513d0af Move dhcpcd-hooks dir to hooks
Roy Marples <roy@marples.name>
parents:
diff changeset
175 fi
98da4513d0af Move dhcpcd-hooks dir to hooks
Roy Marples <roy@marples.name>
parents:
diff changeset
176 [ -d "$resolv_conf_dir" ] || mkdir -p "$resolv_conf_dir"
98da4513d0af Move dhcpcd-hooks dir to hooks
Roy Marples <roy@marples.name>
parents:
diff changeset
177 printf %s "$conf" > "$resolv_conf_dir/$ifname"
98da4513d0af Move dhcpcd-hooks dir to hooks
Roy Marples <roy@marples.name>
parents:
diff changeset
178 build_resolv_conf
98da4513d0af Move dhcpcd-hooks dir to hooks
Roy Marples <roy@marples.name>
parents:
diff changeset
179 }
98da4513d0af Move dhcpcd-hooks dir to hooks
Roy Marples <roy@marples.name>
parents:
diff changeset
180
98da4513d0af Move dhcpcd-hooks dir to hooks
Roy Marples <roy@marples.name>
parents:
diff changeset
181 remove_resolv_conf()
98da4513d0af Move dhcpcd-hooks dir to hooks
Roy Marples <roy@marples.name>
parents:
diff changeset
182 {
98da4513d0af Move dhcpcd-hooks dir to hooks
Roy Marples <roy@marples.name>
parents:
diff changeset
183 if type "$resolvconf" >/dev/null 2>&1; then
98da4513d0af Move dhcpcd-hooks dir to hooks
Roy Marples <roy@marples.name>
parents:
diff changeset
184 "$resolvconf" -d "$ifname" -f
98da4513d0af Move dhcpcd-hooks dir to hooks
Roy Marples <roy@marples.name>
parents:
diff changeset
185 else
98da4513d0af Move dhcpcd-hooks dir to hooks
Roy Marples <roy@marples.name>
parents:
diff changeset
186 if [ -e "$resolv_conf_dir/$ifname" ]; then
98da4513d0af Move dhcpcd-hooks dir to hooks
Roy Marples <roy@marples.name>
parents:
diff changeset
187 rm -f "$resolv_conf_dir/$ifname"
98da4513d0af Move dhcpcd-hooks dir to hooks
Roy Marples <roy@marples.name>
parents:
diff changeset
188 fi
98da4513d0af Move dhcpcd-hooks dir to hooks
Roy Marples <roy@marples.name>
parents:
diff changeset
189 build_resolv_conf
98da4513d0af Move dhcpcd-hooks dir to hooks
Roy Marples <roy@marples.name>
parents:
diff changeset
190 fi
98da4513d0af Move dhcpcd-hooks dir to hooks
Roy Marples <roy@marples.name>
parents:
diff changeset
191 }
98da4513d0af Move dhcpcd-hooks dir to hooks
Roy Marples <roy@marples.name>
parents:
diff changeset
192
98da4513d0af Move dhcpcd-hooks dir to hooks
Roy Marples <roy@marples.name>
parents:
diff changeset
193 # 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
194 case "$reason" in
98da4513d0af Move dhcpcd-hooks dir to hooks
Roy Marples <roy@marples.name>
parents:
diff changeset
195 BOUND6|RENEW6|REBIND6|REBOOT6|INFORM6)
98da4513d0af Move dhcpcd-hooks dir to hooks
Roy Marples <roy@marples.name>
parents:
diff changeset
196 new_domain_name_servers="$new_dhcp6_name_servers"
98da4513d0af Move dhcpcd-hooks dir to hooks
Roy Marples <roy@marples.name>
parents:
diff changeset
197 new_domain_search="$new_dhcp6_domain_search"
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 esac
98da4513d0af Move dhcpcd-hooks dir to hooks
Roy Marples <roy@marples.name>
parents:
diff changeset
200
5535
a0d828e25482 Add --noconfigure option
Roy Marples <roy@marples.name>
parents: 5108
diff changeset
201 if $if_configured; then
a0d828e25482 Add --noconfigure option
Roy Marples <roy@marples.name>
parents: 5108
diff changeset
202 if $if_up || [ "$reason" = ROUTERADVERT ]; then
a0d828e25482 Add --noconfigure option
Roy Marples <roy@marples.name>
parents: 5108
diff changeset
203 add_resolv_conf
a0d828e25482 Add --noconfigure option
Roy Marples <roy@marples.name>
parents: 5108
diff changeset
204 elif $if_down; then
a0d828e25482 Add --noconfigure option
Roy Marples <roy@marples.name>
parents: 5108
diff changeset
205 remove_resolv_conf
a0d828e25482 Add --noconfigure option
Roy Marples <roy@marples.name>
parents: 5108
diff changeset
206 fi
3936
98da4513d0af Move dhcpcd-hooks dir to hooks
Roy Marples <roy@marples.name>
parents:
diff changeset
207 fi