diff options
| author | Shubham Saini <pryr@pryr.xyz> | 2020-12-01 20:21:04 +0000 |
|---|---|---|
| committer | Shubham Saini <pryr@pryr.xyz> | 2020-12-01 20:21:04 +0000 |
| commit | 1ff834e2b06761b083df9959d6c3d6bd2a94d2de (patch) | |
| tree | abb8ff13bab1c6b5a0c0b17f2d29c058358d2135 /bin/.bin/update-resolv-conf.sh | |
| parent | 90e96958f919df1f914381e93a97d77506fdcf03 (diff) | |
mah thinkpad
Diffstat (limited to 'bin/.bin/update-resolv-conf.sh')
| -rwxr-xr-x | bin/.bin/update-resolv-conf.sh | 71 |
1 files changed, 71 insertions, 0 deletions
diff --git a/bin/.bin/update-resolv-conf.sh b/bin/.bin/update-resolv-conf.sh new file mode 100755 index 0000000..16622a1 --- /dev/null +++ b/bin/.bin/update-resolv-conf.sh | |||
| @@ -0,0 +1,71 @@ | |||
| 1 | #!/usr/bin/env bash | ||
| 2 | # | ||
| 3 | # Parses DHCP options from openvpn to update resolv.conf | ||
| 4 | # To use set as 'up' and 'down' script in your openvpn *.conf: | ||
| 5 | # up /etc/openvpn/update-resolv-conf | ||
| 6 | # down /etc/openvpn/update-resolv-conf | ||
| 7 | # | ||
| 8 | # Used snippets of resolvconf script by Thomas Hood <jdthood@yahoo.co.uk> | ||
| 9 | # and Chris Hanson | ||
| 10 | # Licensed under the GNU GPL. See /usr/share/common-licenses/GPL. | ||
| 11 | # 07/2013 colin@daedrum.net Fixed intet name | ||
| 12 | # 05/2006 chlauber@bnc.ch | ||
| 13 | # | ||
| 14 | # Example envs set from openvpn: | ||
| 15 | # foreign_option_1='dhcp-option DNS 193.43.27.132' | ||
| 16 | # foreign_option_2='dhcp-option DNS 193.43.27.133' | ||
| 17 | # foreign_option_3='dhcp-option DOMAIN be.bnc.ch' | ||
| 18 | # foreign_option_4='dhcp-option DOMAIN-SEARCH bnc.local' | ||
| 19 | |||
| 20 | ## The 'type' builtins will look for file in $PATH variable, so we set the | ||
| 21 | ## PATH below. You might need to directly set the path to 'resolvconf' | ||
| 22 | ## manually if it still doesn't work, i.e. | ||
| 23 | ## RESOLVCONF=/usr/sbin/resolvconf | ||
| 24 | export PATH=$PATH:/sbin:/usr/sbin:/bin:/usr/bin | ||
| 25 | RESOLVCONF=$(type -p resolvconf) | ||
| 26 | |||
| 27 | case $script_type in | ||
| 28 | |||
| 29 | up) | ||
| 30 | for optionname in ${!foreign_option_*} ; do | ||
| 31 | option="${!optionname}" | ||
| 32 | echo $option | ||
| 33 | part1=$(echo "$option" | cut -d " " -f 1) | ||
| 34 | if [ "$part1" == "dhcp-option" ] ; then | ||
| 35 | part2=$(echo "$option" | cut -d " " -f 2) | ||
| 36 | part3=$(echo "$option" | cut -d " " -f 3) | ||
| 37 | if [ "$part2" == "DNS" ] ; then | ||
| 38 | IF_DNS_NAMESERVERS="$IF_DNS_NAMESERVERS $part3" | ||
| 39 | fi | ||
| 40 | if [[ "$part2" == "DOMAIN" || "$part2" == "DOMAIN-SEARCH" ]] ; then | ||
| 41 | IF_DNS_SEARCH="$IF_DNS_SEARCH $part3" | ||
| 42 | fi | ||
| 43 | fi | ||
| 44 | done | ||
| 45 | R="" | ||
| 46 | if [ "$IF_DNS_SEARCH" ]; then | ||
| 47 | R="search " | ||
| 48 | for DS in $IF_DNS_SEARCH ; do | ||
| 49 | R="${R} $DS" | ||
| 50 | done | ||
| 51 | R="${R} | ||
| 52 | " | ||
| 53 | fi | ||
| 54 | |||
| 55 | for NS in $IF_DNS_NAMESERVERS ; do | ||
| 56 | R="${R}nameserver $NS | ||
| 57 | " | ||
| 58 | done | ||
| 59 | #echo -n "$R" | $RESOLVCONF -x -p -a "${dev}" | ||
| 60 | echo -n "$R" | $RESOLVCONF -x -a "${dev}.inet" | ||
| 61 | ;; | ||
| 62 | down) | ||
| 63 | $RESOLVCONF -d "${dev}.inet" | ||
| 64 | ;; | ||
| 65 | esac | ||
| 66 | |||
| 67 | # Workaround / jm@epiclabs.io | ||
| 68 | # force exit with no errors. Due to an apparent conflict with the Network Manager | ||
| 69 | # $RESOLVCONF sometimes exits with error code 6 even though it has performed the | ||
| 70 | # action correctly and OpenVPN shuts down. | ||
| 71 | exit 0 | ||
