update-resolv-conf 1.3 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758
  1. #!/bin/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 and Chris Hanson.
  9. # Licensed under the GNU GPL. See /usr/share/common-licenses/GPL.
  10. #
  11. # Example envs set from openvpn:
  12. #
  13. # foreign_option_1='dhcp-option DNS 193.43.27.132'
  14. # foreign_option_2='dhcp-option DNS 193.43.27.133'
  15. # foreign_option_3='dhcp-option DOMAIN be.bnc.ch'
  16. #
  17. [ -x /sbin/resolvconf ] || exit 0
  18. [ "$script_type" ] || exit 0
  19. [ "$dev" ] || exit 0
  20. split_into_parts()
  21. {
  22. part1="$1"
  23. part2="$2"
  24. part3="$3"
  25. }
  26. case "$script_type" in
  27. up)
  28. NMSRVRS=""
  29. SRCHS=""
  30. for optionvarname in ${!foreign_option_*} ; do
  31. option="${!optionvarname}"
  32. echo "$option"
  33. split_into_parts $option
  34. if [ "$part1" = "dhcp-option" ] ; then
  35. if [ "$part2" = "DNS" ] ; then
  36. NMSRVRS="${NMSRVRS:+$NMSRVRS }$part3"
  37. elif [ "$part2" = "DOMAIN" ] ; then
  38. SRCHS="${SRCHS:+$SRCHS }$part3"
  39. fi
  40. fi
  41. done
  42. R=""
  43. [ "$SRCHS" ] && R="search $SRCHS
  44. "
  45. for NS in $NMSRVRS ; do
  46. R="${R}nameserver $NS
  47. "
  48. done
  49. echo -n "$R" | /sbin/resolvconf -a "${dev}.openvpn"
  50. ;;
  51. down)
  52. /sbin/resolvconf -d "${dev}.openvpn"
  53. ;;
  54. esac