Changeset View
Changeset View
Standalone View
Standalone View
files/vpnc-script
| Show First 20 Lines • Show All 110 Lines • ▼ Show 20 Lines | |||||
| if [ "$OS" = "SunOS" ]; then | if [ "$OS" = "SunOS" ]; then | ||||
| route_syntax_interface="-interface" | route_syntax_interface="-interface" | ||||
| ifconfig_syntax_ptpv6="$INTERNAL_IP6_ADDRESS" | ifconfig_syntax_ptpv6="$INTERNAL_IP6_ADDRESS" | ||||
| else | else | ||||
| route_syntax_interface="" | route_syntax_interface="" | ||||
| ifconfig_syntax_ptpv6="" | ifconfig_syntax_ptpv6="" | ||||
| fi | fi | ||||
| grep ^hosts /etc/nsswitch.conf|grep resolve >/dev/null 2>&1 | |||||
| if [ $? = 0 ];then | |||||
| RESOLVEDENABLED=1 | |||||
| else | |||||
| RESOLVEDENABLED=0 | |||||
| fi | |||||
| if [ -r /etc/openwrt_release ] && [ -n "$OPENWRT_INTERFACE" ]; then | if [ -r /etc/openwrt_release ] && [ -n "$OPENWRT_INTERFACE" ]; then | ||||
| . /etc/functions.sh | . /etc/functions.sh | ||||
| include /lib/network | include /lib/network | ||||
| MODIFYRESOLVCONF=modify_resolvconf_openwrt | MODIFYRESOLVCONF=modify_resolvconf_openwrt | ||||
| RESTORERESOLVCONF=restore_resolvconf_openwrt | RESTORERESOLVCONF=restore_resolvconf_openwrt | ||||
| elif [ -x /usr/bin/busctl ] && [ ${RESOLVEDENABLED} = 1 ]; then # For systemd-resolved (version 229 and above) | |||||
| MODIFYRESOLVCONF=modify_resolved_manager | |||||
| RESTORERESOLVCONF=restore_resolved_manager | |||||
| elif [ -x /sbin/resolvconf ]; then # Optional tool on Debian, Ubuntu, Gentoo and FreeBSD | elif [ -x /sbin/resolvconf ]; then # Optional tool on Debian, Ubuntu, Gentoo and FreeBSD | ||||
| MODIFYRESOLVCONF=modify_resolvconf_manager | MODIFYRESOLVCONF=modify_resolvconf_manager | ||||
| RESTORERESOLVCONF=restore_resolvconf_manager | RESTORERESOLVCONF=restore_resolvconf_manager | ||||
| elif [ -x /sbin/netconfig ]; then # tool on Suse after 11.1 | elif [ -x /sbin/netconfig ]; then # tool on Suse after 11.1 | ||||
| MODIFYRESOLVCONF=modify_resolvconf_suse_netconfig | MODIFYRESOLVCONF=modify_resolvconf_suse_netconfig | ||||
| RESTORERESOLVCONF=restore_resolvconf_suse_netconfig | RESTORERESOLVCONF=restore_resolvconf_suse_netconfig | ||||
| elif [ -x /sbin/modify_resolvconf ]; then # Mandatory tool on Suse earlier than 11.1 | elif [ -x /sbin/modify_resolvconf ]; then # Mandatory tool on Suse earlier than 11.1 | ||||
| MODIFYRESOLVCONF=modify_resolvconf_suse | MODIFYRESOLVCONF=modify_resolvconf_suse | ||||
| ▲ Show 20 Lines • Show All 232 Lines • ▼ Show 20 Lines | |||||
| # =========== resolv.conf handling for any OS ========================= | # =========== resolv.conf handling for any OS ========================= | ||||
| modify_resolvconf_generic() { | modify_resolvconf_generic() { | ||||
| grep '^#@VPNC_GENERATED@' /etc/resolv.conf > /dev/null 2>&1 || cp -- /etc/resolv.conf "$RESOLV_CONF_BACKUP" | grep '^#@VPNC_GENERATED@' /etc/resolv.conf > /dev/null 2>&1 || cp -- /etc/resolv.conf "$RESOLV_CONF_BACKUP" | ||||
| NEW_RESOLVCONF="#@VPNC_GENERATED@ -- this file is generated by vpnc | NEW_RESOLVCONF="#@VPNC_GENERATED@ -- this file is generated by vpnc | ||||
| # and will be overwritten by vpnc | # and will be overwritten by vpnc | ||||
| # as long as the above mark is intact" | # as long as the above mark is intact" | ||||
| # Remember the original value of CISCO_DEF_DOMAIN we need it later | DOMAINS="$CISCO_DEF_DOMAIN" | ||||
| CISCO_DEF_DOMAIN_ORIG="$CISCO_DEF_DOMAIN" | |||||
| # Don't step on INTERNAL_IP4_DNS value, use a temporary variable | |||||
| INTERNAL_IP4_DNS_TEMP="$INTERNAL_IP4_DNS" | |||||
| exec 6< "$RESOLV_CONF_BACKUP" | exec 6< "$RESOLV_CONF_BACKUP" | ||||
| while read LINE <&6 ; do | while read LINE <&6 ; do | ||||
| case "$LINE" in | case "$LINE" in | ||||
| nameserver*) | # omit; we will overwrite these | ||||
| if [ -n "$INTERNAL_IP4_DNS_TEMP" ]; then | nameserver*) ;; | ||||
| read ONE_NAMESERVER INTERNAL_IP4_DNS_TEMP <<-EOF | # extract listed domains and prepend to list | ||||
| $INTERNAL_IP4_DNS_TEMP | domain* | search*) DOMAINS="${LINE#* } $DOMAINS" ;; | ||||
| EOF | # retain other lines | ||||
| LINE="nameserver $ONE_NAMESERVER" | *) NEW_RESOLVCONF="$NEW_RESOLVCONF | ||||
| else | $LINE" ;; | ||||
| LINE="" | |||||
| fi | |||||
| ;; | |||||
| search*) | |||||
| if [ -n "$CISCO_DEF_DOMAIN" ]; then | |||||
| LINE="$LINE $CISCO_DEF_DOMAIN" | |||||
| CISCO_DEF_DOMAIN="" | |||||
| fi | |||||
| ;; | |||||
| domain*) | |||||
| if [ -n "$CISCO_DEF_DOMAIN" ]; then | |||||
| LINE="domain $CISCO_DEF_DOMAIN" | |||||
| CISCO_DEF_DOMAIN="" | |||||
| fi | |||||
| ;; | |||||
| esac | esac | ||||
| NEW_RESOLVCONF="$NEW_RESOLVCONF | |||||
| $LINE" | |||||
| done | done | ||||
| exec 6<&- | exec 6<&- | ||||
| for i in $INTERNAL_IP4_DNS_TEMP ; do | for i in $INTERNAL_IP4_DNS ; do | ||||
| NEW_RESOLVCONF="$NEW_RESOLVCONF | NEW_RESOLVCONF="$NEW_RESOLVCONF | ||||
| nameserver $i" | nameserver $i" | ||||
| done | done | ||||
| if [ -n "$CISCO_DEF_DOMAIN" ]; then | # note that "search" is mutually exclusive with "domain"; | ||||
| # "search" allows multiple domains to be listed, so use that | |||||
| if [ -n "$DOMAINS" ]; then | |||||
| NEW_RESOLVCONF="$NEW_RESOLVCONF | NEW_RESOLVCONF="$NEW_RESOLVCONF | ||||
| search $CISCO_DEF_DOMAIN" | search $DOMAINS" | ||||
| fi | fi | ||||
| echo "$NEW_RESOLVCONF" > /etc/resolv.conf | echo "$NEW_RESOLVCONF" > /etc/resolv.conf | ||||
| if [ "$OS" = "Darwin" ]; then | if [ "$OS" = "Darwin" ]; then | ||||
| case "`uname -r`" in | case "`uname -r`" in | ||||
| # Skip for pre-10.4 systems | # Skip for pre-10.4 systems | ||||
| 4.*|5.*|6.*|7.*) | 4.*|5.*|6.*|7.*) | ||||
| ;; | ;; | ||||
| Show All 25 Lines | case "`uname -r`" in | ||||
| else | else | ||||
| # No split routing. Override default gateway | # No split routing. Override default gateway | ||||
| OVERRIDE_GATEWAY="d.add Router $INTERNAL_IP4_ADDRESS" | OVERRIDE_GATEWAY="d.add Router $INTERNAL_IP4_ADDRESS" | ||||
| fi | fi | ||||
| # Uncomment the following if/fi pair to use multiple | # Uncomment the following if/fi pair to use multiple | ||||
| # DNS matching when available. When multiple DNS matching | # DNS matching when available. When multiple DNS matching | ||||
| # is present, anything reading the /etc/resolv.conf file | # is present, anything reading the /etc/resolv.conf file | ||||
| # directly will probably not work as intended. | # directly will probably not work as intended. | ||||
| #if [ -z "$CISCO_DEF_DOMAIN_ORIG" ]; then | #if [ -z "$CISCO_DEF_DOMAIN" ]; then | ||||
| # Cannot use multiple DNS matching without a domain | # Cannot use multiple DNS matching without a domain | ||||
| OVERRIDE_PRIMARY='d.add OverridePrimary # 1' | OVERRIDE_PRIMARY='d.add OverridePrimary # 1' | ||||
| #fi | #fi | ||||
| scutil >/dev/null 2>&1 <<-EOF | scutil >/dev/null 2>&1 <<-EOF | ||||
| open | open | ||||
| d.init | d.init | ||||
| d.add ServerAddresses * $INTERNAL_IP4_DNS | d.add ServerAddresses * $INTERNAL_IP4_DNS | ||||
| set State:/Network/Service/$TUNDEV/DNS | set State:/Network/Service/$TUNDEV/DNS | ||||
| d.init | d.init | ||||
| $OVERRIDE_GATEWAY | $OVERRIDE_GATEWAY | ||||
| d.add Addresses * $INTERNAL_IP4_ADDRESS | d.add Addresses * $INTERNAL_IP4_ADDRESS | ||||
| d.add SubnetMasks * 255.255.255.255 | d.add SubnetMasks * 255.255.255.255 | ||||
| d.add InterfaceName $TUNDEV | d.add InterfaceName $TUNDEV | ||||
| $OVERRIDE_PRIMARY | $OVERRIDE_PRIMARY | ||||
| set State:/Network/Service/$TUNDEV/IPv4 | set State:/Network/Service/$TUNDEV/IPv4 | ||||
| close | close | ||||
| EOF | EOF | ||||
| if [ -n "$CISCO_DEF_DOMAIN_ORIG" ]; then | if [ -n "$CISCO_DEF_DOMAIN" ]; then | ||||
| scutil >/dev/null 2>&1 <<-EOF | scutil >/dev/null 2>&1 <<-EOF | ||||
| open | open | ||||
| get State:/Network/Service/$TUNDEV/DNS | get State:/Network/Service/$TUNDEV/DNS | ||||
| d.add DomainName $CISCO_DEF_DOMAIN_ORIG | d.add DomainName $CISCO_DEF_DOMAIN | ||||
| d.add SearchDomains * $CISCO_DEF_DOMAIN_ORIG | d.add SearchDomains * $CISCO_DEF_DOMAIN | ||||
| d.add SupplementalMatchDomains * $CISCO_DEF_DOMAIN_ORIG | d.add SupplementalMatchDomains * $CISCO_DEF_DOMAIN | ||||
| set State:/Network/Service/$TUNDEV/DNS | set State:/Network/Service/$TUNDEV/DNS | ||||
| close | close | ||||
| EOF | EOF | ||||
| fi | fi | ||||
| ;; | ;; | ||||
| esac | esac | ||||
| fi | fi | ||||
| } | } | ||||
| ▲ Show 20 Lines • Show All 100 Lines • ▼ Show 20 Lines | domain $CISCO_DEF_DOMAIN" | ||||
| fi | fi | ||||
| echo "$NEW_RESOLVCONF" | /sbin/resolvconf -a $TUNDEV | echo "$NEW_RESOLVCONF" | /sbin/resolvconf -a $TUNDEV | ||||
| } | } | ||||
| restore_resolvconf_manager() { | restore_resolvconf_manager() { | ||||
| /sbin/resolvconf -d $TUNDEV | /sbin/resolvconf -d $TUNDEV | ||||
| } | } | ||||
| AF_INET=2 | |||||
| get_if_index() { | |||||
| local link | |||||
| link="$(ip link show dev "$1")" || return $? | |||||
| echo ${link} | awk -F: '{print $1}' | |||||
| } | |||||
| busctl_call() { | |||||
| local dest node | |||||
| dest=org.freedesktop.resolve1 | |||||
| node=/org/freedesktop/resolve1 | |||||
| busctl call "$dest" "${node}" "${dest}.Manager" "$@" | |||||
| } | |||||
| busctl_set_nameservers() { | |||||
| local if_index addresses args addr | |||||
| if_index=$1 | |||||
| shift | |||||
| addresses="$@" | |||||
| args="$if_index $#" | |||||
| for addr in ${addresses}; do | |||||
| args="$args ${AF_INET} 4 $(echo $addr | sed 's/[.]/ /g')" | |||||
| done | |||||
| busctl_call SetLinkDNS 'ia(iay)' ${args} | |||||
| } | |||||
| busctl_set_search() { | |||||
| local if_index domains args domain | |||||
| if_index=$1 | |||||
| shift | |||||
| domains="$@" | |||||
| args="$if_index $#" | |||||
| for domain in ${domains}; do | |||||
| args="$args ${domain} false" | |||||
| done | |||||
| busctl_call SetLinkDomains 'ia(sb)' ${args} | |||||
| } | |||||
| modify_resolved_manager() { | |||||
| local if_index | |||||
| if_index=$(get_if_index $TUNDEV) | |||||
| busctl_set_nameservers $if_index $INTERNAL_IP4_DNS | |||||
| if [ -n "$CISCO_DEF_DOMAIN" ]; then | |||||
| busctl_set_search $if_index $CISCO_DEF_DOMAIN | |||||
| fi | |||||
| } | |||||
| restore_resolved_manager() { | |||||
| local if_index | |||||
| if_index=$(get_if_index $TUNDEV) | |||||
| busctl_call RevertLink 'i' $if_index | |||||
| } | |||||
| # === resolv.conf handling via unbound ========= | # === resolv.conf handling via unbound ========= | ||||
| modify_resolvconf_unbound() { | modify_resolvconf_unbound() { | ||||
| if [ -n "$CISCO_DEF_DOMAIN" ]; then | if [ -n "$CISCO_DEF_DOMAIN" ]; then | ||||
| /usr/sbin/unbound-control forward_add +i ${CISCO_DEF_DOMAIN} ${INTERNAL_IP4_DNS} | /usr/sbin/unbound-control forward_add +i ${CISCO_DEF_DOMAIN} ${INTERNAL_IP4_DNS} | ||||
| /usr/sbin/unbound-control flush_requestlist | /usr/sbin/unbound-control flush_requestlist | ||||
| /usr/sbin/unbound-control flush_zone ${CISCO_DEF_DOMAIN} | /usr/sbin/unbound-control flush_zone ${CISCO_DEF_DOMAIN} | ||||
| fi | fi | ||||
| Show All 17 Lines | case `uname -r` in | ||||
| *) | *) | ||||
| return 0 | return 0 | ||||
| ;; | ;; | ||||
| esac | esac | ||||
| } | } | ||||
| do_pre_init() { | do_pre_init() { | ||||
| if [ "$OS" = "Linux" ]; then | if [ "$OS" = "Linux" ]; then | ||||
| if (exec 6<> /dev/net/tun) > /dev/null 2>&1 ; then | if (exec 6< /dev/net/tun) > /dev/null 2>&1 ; then | ||||
| : | : | ||||
| else # can't open /dev/net/tun | else # can't open /dev/net/tun | ||||
| test -e /proc/sys/kernel/modprobe && `cat /proc/sys/kernel/modprobe` tun 2>/dev/null | test -e /proc/sys/kernel/modprobe && `cat /proc/sys/kernel/modprobe` tun 2>/dev/null | ||||
| # fix for broken devfs in kernel 2.6.x | # fix for broken devfs in kernel 2.6.x | ||||
| if [ "`readlink /dev/net/tun`" = misc/net/tun \ | if [ "`readlink /dev/net/tun`" = misc/net/tun \ | ||||
| -a ! -e /dev/net/misc/net/tun -a -e /dev/misc/net/tun ] ; then | -a ! -e /dev/net/misc/net/tun -a -e /dev/misc/net/tun ] ; then | ||||
| ln -sf /dev/misc/net/tun /dev/net/tun | ln -sf /dev/misc/net/tun /dev/net/tun | ||||
| fi | fi | ||||
| ▲ Show 20 Lines • Show All 201 Lines • Show Last 20 Lines | |||||
Copyright © 2015-2021 Solus Project. The Solus logo is Copyright © 2016-2021 Solus Project. All Rights Reserved.