| package/base-files/files/lib/network/config.sh |
| 70 | 70 | add_dns() { |
| 71 | 71 | local cfg="$1"; shift |
| 72 | 72 | |
| 73 | remove_dns "$cfg" |
| 74 | |
| 75 | # We may be called by pppd's ip-up which has a nonstandard umask set. |
| 76 | # Create an empty file here and force its permission to 0644, otherwise |
| 77 | # dnsmasq will not be able to re-read the resolv.conf.auto . |
| 78 | [ ! -f /tmp/resolv.conf.auto ] && { |
| 79 | touch /tmp/resolv.conf.auto |
| 80 | chmod 0644 /tmp/resolv.conf.auto |
| 81 | } |
| 82 | |
| 73 | 83 | local dns |
| 74 | 84 | local add |
| 75 | 85 | for dns in "$@"; do |
| ... | ... | |
| 79 | 89 | } |
| 80 | 90 | done |
| 81 | 91 | |
| 82 | | uci_set_state network "$cfg" dns "$add" |
| 92 | [ -n "$cfg" ] && { |
| 93 | uci_set_state network "$cfg" dns "$add" |
| 94 | uci_set_state network "$cfg" resolv_dns "$add" |
| 95 | } |
| 83 | 96 | } |
| 84 | 97 | |
| 85 | 98 | # remove dns entries of the given iface |
| 86 | 99 | remove_dns() { |
| 87 | 100 | local cfg="$1" |
| 88 | 101 | |
| 89 | | local dns |
| 90 | | config_get dns "$cfg" dns |
| 91 | | for dns in $dns; do |
| 92 | | sed -i -e "/^nameserver $dns$/d" /tmp/resolv.conf.auto |
| 93 | | done |
| 102 | [ -n "$cfg" ] && { |
| 103 | [ -f /tmp/resolv.conf.auto ] && { |
| 104 | local dns=$(uci_get_state network "$cfg" resolv_dns) |
| 105 | for dns in $dns; do |
| 106 | sed -i -e "/^nameserver $dns$/d" /tmp/resolv.conf.auto |
| 107 | done |
| 108 | } |
| 94 | 109 | |
| 95 | | uci_revert_state network "$cfg" dns |
| 110 | uci_revert_state network "$cfg" dns |
| 111 | uci_revert_state network "$cfg" resolv_dns |
| 112 | } |
| 96 | 113 | } |
| 97 | 114 | |
| 98 | 115 | # sort the device list, drop duplicates |
| ... | ... | |
| 212 | 229 | [ -z "$ip6addr" ] || $DEBUG ifconfig "$iface" add "$ip6addr" |
| 213 | 230 | [ -z "$gateway" ] || $DEBUG route add default gw "$gateway" dev "$iface" |
| 214 | 231 | [ -z "$ip6gw" ] || $DEBUG route -A inet6 add default gw "$ip6gw" dev "$iface" |
| 215 | | [ -z "$dns" ] || { |
| 216 | | for ns in $dns; do |
| 217 | | grep "$ns" /tmp/resolv.conf.auto 2>/dev/null >/dev/null || { |
| 218 | | echo "nameserver $ns" >> /tmp/resolv.conf.auto |
| 219 | | } |
| 220 | | done |
| 221 | | } |
| 232 | [ -z "$dns" ] || add_dns "$config" $dns |
| 222 | 233 | |
| 223 | 234 | config_get type "$config" TYPE |
| 224 | 235 | [ "$type" = "alias" ] && return 0 |
| ... | ... | |
| 363 | 374 | stop_interface_dhcp() { |
| 364 | 375 | local config="$1" |
| 365 | 376 | |
| 366 | | local iface |
| 377 | local ifname |
| 367 | 378 | config_get ifname "$config" ifname |
| 368 | 379 | |
| 369 | 380 | local lock="/var/lock/dhcp-${ifname}" |
| 370 | 381 | [ -f "$lock" ] && lock -u "$lock" |
| 371 | 382 | |
| 383 | remove_dns "$config" |
| 384 | |
| 372 | 385 | local pidfile="/var/run/dhcp-${ifname}.pid" |
| 373 | 386 | local pid="$(cat "$pidfile" 2>/dev/null)" |
| 374 | 387 | [ -d "/proc/$pid" ] && { |
| package/base-files/files/usr/share/udhcpc/default.script |
| 139 | 139 | } |
| 140 | 140 | |
| 141 | 141 | # DNS |
| 142 | | config_get old_dns "$ifc" dns |
| 142 | old_dns=$(uci_get_state network "$ifc" dns) |
| 143 | old_domain=$(uci_get_state network "$ifc" dnsdomain) |
| 143 | 144 | user_dns=$(uci_get "network.$ifc.dns") |
| 144 | 145 | [ -n "$user_dns" ] && dns="$user_dns" |
| 145 | 146 | |
| 146 | | [ -n "$dns" ] && [ ! -s "${RESOLV_CONF}" -o "$dns" != "$old_dns" ] && { |
| 147 | [ -n "$dns" ] && [ "$dns" != "$old_dns" -o -n "$user_dns" ] && { |
| 147 | 148 | echo "udhcpc: setting dns servers: $dns" |
| 148 | | echo -n > "${RESOLV_CONF}.tmp" |
| 149 | | for i in $dns ; do |
| 150 | | echo "nameserver $i" >> "${RESOLV_CONF}.tmp" |
| 151 | | done |
| 152 | | ${domain:+echo search $domain} >> "${RESOLV_CONF}.tmp" |
| 153 | | mv "${RESOLV_CONF}.tmp" "$RESOLV_CONF" |
| 154 | | |
| 155 | | change_state network "$ifc" dnsdomain "$domain" |
| 156 | | change_state network "$ifc" dns "$dns" |
| 149 | add_dns "$ifc" $dns |
| 150 | |
| 151 | [ -n "$domain" ] && [ "$domain" != "$old_domain" ] && { |
| 152 | echo "udhcpc: setting dns domain: $domain" |
| 153 | sed -i -e "${old_domain:+/^search $old_domain$/d; }/^search $domain$/d" "${RESOLV_CONF}" |
| 154 | echo "search $domain" >> "${RESOLV_CONF}" |
| 155 | change_state network "$ifc" dnsdomain "$domain" |
| 156 | } |
| 157 | 157 | } |
| 158 | 158 | |
| 159 | 159 | [ -n "$ifc" ] || return |