wg-quick: darwin: restore DNS on down
Signed-off-by: Jason A. Donenfeld <Jason@zx2c4.com>
This commit is contained in:
		
							parent
							
								
									9c18c70da6
								
							
						
					
					
						commit
						699777da8c
					
				
					 1 changed files with 25 additions and 13 deletions
				
			
		| 
						 | 
					@ -233,30 +233,42 @@ set_endpoint_direct_route() {
 | 
				
			||||||
	ENDPOINTS=( "${added[@]}" )
 | 
						ENDPOINTS=( "${added[@]}" )
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
set_dns() {
 | 
					declare -A SERVICE_DNS
 | 
				
			||||||
	# TODO: this should use scutil and be slightly more clever. But for now
 | 
					collect_new_service_dns() {
 | 
				
			||||||
	# we simply overwrite any _manually set_ DNS servers for all network
 | 
						# TODO: switch to scutil for all DNS modification
 | 
				
			||||||
	# services. This means we get into trouble if the user doesn't actually
 | 
						local service get_response
 | 
				
			||||||
	# want DNS via DHCP when setting this back to "empty". Because macOS is
 | 
						local -A found_services
 | 
				
			||||||
	# so horrible to deal with here, we'll simply wait for irate users to
 | 
					 | 
				
			||||||
	# provide a patch themselves.
 | 
					 | 
				
			||||||
	local service response
 | 
					 | 
				
			||||||
	{ read -r _; while read -r service; do
 | 
						{ read -r _; while read -r service; do
 | 
				
			||||||
		[[ $service == "*"* ]] && service="${service:1}"
 | 
							[[ $service == "*"* ]] && service="${service:1}"
 | 
				
			||||||
 | 
							found_services["$service"]=1
 | 
				
			||||||
 | 
							[[ -n ${SERVICE_DNS["$service"]} ]] && continue
 | 
				
			||||||
 | 
							get_response="$(cmd networksetup -getdnsservers "$service")"
 | 
				
			||||||
 | 
							[[ $get_response == *" "* ]] && get_response="Empty"
 | 
				
			||||||
 | 
							[[ -n $get_response ]] && SERVICE_DNS["$service"]="$get_response"
 | 
				
			||||||
 | 
						done; } < <(networksetup -listallnetworkservices)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						for service in "${!SERVICE_DNS[@]}"; do
 | 
				
			||||||
 | 
							[[ ${found_services["$service"]} == 1 ]] || unset SERVICE_DNS["$service"]
 | 
				
			||||||
 | 
						done
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					set_dns() {
 | 
				
			||||||
 | 
						collect_new_service_dns
 | 
				
			||||||
 | 
						local service response
 | 
				
			||||||
 | 
						for service in "${!SERVICE_DNS[@]}"; do
 | 
				
			||||||
		while read -r response; do
 | 
							while read -r response; do
 | 
				
			||||||
			[[ $response == *Error* ]] && echo "$response" >&2
 | 
								[[ $response == *Error* ]] && echo "$response" >&2
 | 
				
			||||||
		done < <(cmd networksetup -setdnsservers "$service" "${DNS[@]}")
 | 
							done < <(cmd networksetup -setdnsservers "$service" "${DNS[@]}")
 | 
				
			||||||
	done; } < <(networksetup -listallnetworkservices)
 | 
						done
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
del_dns() {
 | 
					del_dns() {
 | 
				
			||||||
	local service response
 | 
						local service response
 | 
				
			||||||
	{ read -r _; while read -r service; do
 | 
						for service in "${!SERVICE_DNS[@]}"; do
 | 
				
			||||||
		[[ $service == "*"* ]] && service="${service:1}"
 | 
					 | 
				
			||||||
		while read -r response; do
 | 
							while read -r response; do
 | 
				
			||||||
			[[ $response == *Error* ]] && echo "$response" >&2
 | 
								[[ $response == *Error* ]] && echo "$response" >&2
 | 
				
			||||||
		done < <(cmd networksetup -setdnsservers "$service" Empty)
 | 
							done < <(cmd networksetup -setdnsservers "$service" ${SERVICE_DNS["$service"]} || true)
 | 
				
			||||||
	done; } < <(networksetup -listallnetworkservices)
 | 
						done
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
monitor_daemon() {
 | 
					monitor_daemon() {
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
		Reference in a new issue