| OLD | NEW | 
|---|
|  | (Empty) | 
| 1 # Generate /etc/resolv.conf |  | 
| 2 # Support resolvconf(8) if available |  | 
| 3 # We can merge other dhcpcd resolv.conf files into one like resolvconf, |  | 
| 4 # but resolvconf is preferred as other applications like VPN clients |  | 
| 5 # can readily hook into it. |  | 
| 6 # Also, resolvconf can configure local nameservers such as bind |  | 
| 7 # or dnsmasq. This is important as the libc resolver isn't that powerful. |  | 
| 8 |  | 
| 9 resolv_conf_dir="$state_dir/resolv.conf" |  | 
| 10 |  | 
| 11 build_resolv_conf() |  | 
| 12 { |  | 
| 13         local cf="$state_dir/resolv.conf.$interface" |  | 
| 14         local interfaces= header= search= srvs= servers= x= |  | 
| 15 |  | 
| 16         # Build a list of interfaces |  | 
| 17         interfaces=$(list_interfaces "$resolv_conf_dir") |  | 
| 18 |  | 
| 19         # Build the resolv.conf |  | 
| 20         if [ -n "$interfaces" ]; then |  | 
| 21                 # Build the header |  | 
| 22                 for x in ${interfaces}; do |  | 
| 23                         header="$header${header:+, }$x" |  | 
| 24                 done |  | 
| 25 |  | 
| 26                 # Build the search list |  | 
| 27                 domain=$(cd "$resolv_conf_dir"; \ |  | 
| 28                         key_get_value "domain " ${interfaces}) |  | 
| 29                 search=$(cd "$resolv_conf_dir"; \ |  | 
| 30                         key_get_value "search " ${interfaces}) |  | 
| 31                 set -- ${domain} |  | 
| 32                 unset domain |  | 
| 33                 if [ -n "$2" ]; then |  | 
| 34                         search="$search $@" |  | 
| 35                 elif [ -n "$1" ]; then |  | 
| 36                         domain="domain $1\n" |  | 
| 37                 fi |  | 
| 38                 [ -n "$search" ] && search="search $(uniqify $search)\n" |  | 
| 39 |  | 
| 40                 # Build the nameserver list |  | 
| 41                 srvs=$(cd "$resolv_conf_dir"; \ |  | 
| 42                         key_get_value "nameserver " ${interfaces}) |  | 
| 43                 for x in $(uniqify ${srvs}); do |  | 
| 44                         servers="${servers}nameserver $x\n" |  | 
| 45                 done |  | 
| 46         fi |  | 
| 47         header="$signature_base${header:+ $from }$header" |  | 
| 48 |  | 
| 49         # Assemble resolv.conf using our head and tail files |  | 
| 50         [ -f "$cf" ] && rm -f "$cf" |  | 
| 51         [ -d "$resolv_conf_dir" ] || mkdir -p "$resolv_conf_dir" |  | 
| 52         echo "$header" > "$cf" |  | 
| 53         if [ -f /etc/resolv.conf.head ]; then |  | 
| 54                 cat /etc/resolv.conf.head >> "$cf" |  | 
| 55         else |  | 
| 56                 echo "# /etc/resolv.conf.head can replace this line" >> "$cf" |  | 
| 57         fi |  | 
| 58         printf "$domain$search$servers" >> "$cf" |  | 
| 59         if [ -f /etc/resolv.conf.tail ]; then |  | 
| 60                 cat /etc/resolv.conf.tail >> "$cf" |  | 
| 61         else |  | 
| 62                 echo "# /etc/resolv.conf.tail can replace this line" >> "$cf" |  | 
| 63         fi |  | 
| 64         cat "$cf" > /etc/resolv.conf |  | 
| 65         chmod 644 /etc/resolv.conf |  | 
| 66         rm -f "$cf" |  | 
| 67 } |  | 
| 68 |  | 
| 69 add_resolv_conf() |  | 
| 70 { |  | 
| 71         local x= conf="$signature\n" |  | 
| 72 |  | 
| 73         # If we don't have any configuration, remove it |  | 
| 74         if [ -z "$new_domain_name_servers" -a \ |  | 
| 75                 -z "$new_domain_name" -a \ |  | 
| 76                 -z "$new_domain_search" ]; then |  | 
| 77                 remove_resolv_conf |  | 
| 78                 return $? |  | 
| 79         fi |  | 
| 80 |  | 
| 81         if [ -n "$new_domain_name" ]; then |  | 
| 82                 set -- $new_domain_name |  | 
| 83                 new_domain_name="$1" |  | 
| 84                 conf="${conf}domain $new_domain_name\n" |  | 
| 85                 # Support RFC violating search in domain |  | 
| 86                 if [ -z "$new_domain_search" -a -n "$2" ]; then |  | 
| 87                         new_domain_search="$@" |  | 
| 88                 fi |  | 
| 89         fi |  | 
| 90         if [ -n "$new_domain_search" ]; then |  | 
| 91                 conf="${conf}search $new_domain_search\n" |  | 
| 92         fi |  | 
| 93         for x in ${new_domain_name_servers}; do |  | 
| 94                 conf="${conf}nameserver $x\n" |  | 
| 95         done |  | 
| 96         if type resolvconf >/dev/null 2>&1; then |  | 
| 97                 [ -n "$metric" ] && export IF_METRIC="$metric" |  | 
| 98                 printf "$conf" | resolvconf -a "$interface" |  | 
| 99                 return $? |  | 
| 100         fi |  | 
| 101 |  | 
| 102         if [ -e "$resolv_conf_dir/$interface" ]; then |  | 
| 103                 rm -f "$resolv_conf_dir/$interface" |  | 
| 104         fi |  | 
| 105         [ -d "$resolv_conf_dir" ] || mkdir -p "$resolv_conf_dir" |  | 
| 106         printf "$conf" > "$resolv_conf_dir/$interface" |  | 
| 107         build_resolv_conf |  | 
| 108 } |  | 
| 109 |  | 
| 110 remove_resolv_conf() |  | 
| 111 { |  | 
| 112         if type resolvconf >/dev/null 2>&1; then |  | 
| 113                 resolvconf -d "$interface" -f |  | 
| 114         else |  | 
| 115                 if [ -e "$resolv_conf_dir/$interface" ]; then |  | 
| 116                         rm -f "$resolv_conf_dir/$interface" |  | 
| 117                 fi |  | 
| 118                 build_resolv_conf |  | 
| 119         fi |  | 
| 120 } |  | 
| 121 |  | 
| 122 case "$reason" in |  | 
| 123 BOUND|INFORM|REBIND|REBOOT|RENEW|TIMEOUT|STATIC)        add_resolv_conf;; |  | 
| 124 PREINIT|EXPIRE|FAIL|IPV4LL|NAK|NOCARRIER|RELEASE|STOP)  remove_resolv_conf;; |  | 
| 125 esac |  | 
| OLD | NEW | 
|---|