Sisyphus repository
Last update: 1 october 2023 | SRPMs: 18631 | Visits: 37512326
en ru br
ALT Linux repos
S:0.5.3-alt7
5.0: 0.5.3-alt2
4.1: 0.4.0-alt1
4.0: 0.4.0-alt1

Group :: Networking/Remote access
RPM: vpnc

 Main   Changelog   Spec   Patches   Sources   Download   Gear   Bugs and FR  Repocop 

Patch: vpnc-0.5.3-update-script.patch
Download


diff -ur vpnc-0.5.3/vpnc-script.in vpnc-0.5.3.new/vpnc-script.in
--- vpnc-0.5.3/vpnc-script.in	2008-11-19 23:55:51 +0300
+++ vpnc-0.5.3.new/vpnc-script.in	2010-01-17 01:16:12 +0300
@@ -50,8 +50,7 @@
 
 DEFAULT_ROUTE_FILE=/var/run/vpnc/defaultroute
 RESOLV_CONF_BACKUP=/var/run/vpnc/resolv.conf-backup
-FULL_SCRIPTNAME=@PREFIX@/sbin/vpnc
-SCRIPTNAME=`basename $FULL_SCRIPTNAME`
+SCRIPTNAME=`basename $0`
 
 # some systems, eg. Darwin & FreeBSD, prune /var/run on boot
 if [ ! -d "/var/run/vpnc" ]; then
@@ -72,6 +71,13 @@
 	route_syntax_del="delete"
 	route_syntax_netmask="-netmask"
 fi
+if [ "$OS" = "SunOS" ]; then
+    route_syntax_interface="-interface"
+    route_syntax_plumb="plumb"
+else
+    route_syntax_interface=""
+    route_syntax_plumb=""
+fi
 
 if [ -x /sbin/resolvconf ]; then # Optional tool on Debian, Ubuntu, Gentoo
 	MODIFYRESOLVCONF=modify_resolvconf_manager
@@ -90,8 +96,7 @@
 	if [ -n "$INTERNAL_IP4_MTU" ]; then
 		MTU=$INTERNAL_IP4_MTU
 	elif [ -n "$IPROUTE" ]; then
-		DEV=$($IPROUTE route | grep ^default | sed 's/^.* dev \([[:alnum:]-]\+\).*$/\1/')
-		MTU=$(($($IPROUTE link show "$DEV" | grep mtu | sed 's/^.* mtu \([[:digit:]]\+\).*$/\1/') - 88))
+		MTU=$(($($IPROUTE route get "$VPNGATEWAY" | sed -ne 's/^.*mtu \([[:digit:]]\+\).*$/\1/p') - 88))
 	else
 		MTU=1412
 	fi
@@ -102,13 +107,31 @@
 	if [ -n "$INTERNAL_IP4_NETMASK" ]; then
 		set_network_route $INTERNAL_IP4_NETADDR $INTERNAL_IP4_NETMASK $INTERNAL_IP4_NETMASKLEN
 	fi
+
+	# If the netmask is provided, it contains the address _and_ netmask
+	if [ -n "$IPROUTE" ]; then
+	    if [ -n "$INTERNAL_IP6_NETMASK" ]; then
+		$IPROUTE -6 addr add $INTERNAL_IP6_NETMASK dev $TUNDEV
+	    elif [ -n "$INTERNAL_IP6_ADDRESS" ]; then
+		$IPROUTE -6 addr add $INTERNAL_IP6_ADDRESS/128 dev $TUNDEV
+	    fi
+	else
+	    if [ -n "$INTERNAL_IP6_ADDRESS" ]; then
+	        ifconfig "$TUNDEV" inet6 $route_syntax_plumb $INTERNAL_IP6_ADDRESS/128 $ifconfig_syntax_ptp $INTERNAL_IP6_ADDRESS mtu $MTU up
+	    fi
+	fi
 }
 
 destroy_tun_device() {
 	case "$OS" in
-	NetBSD) # and probably others...
+	NetBSD|FreeBSD) # and probably others...
 		ifconfig "$TUNDEV" destroy
 		;;
+        SunOS)
+		if [ -n "$INTERNAL_IP6_ADDRESS" ]; then
+		    ifconfig "$TUNDEV" inet6 unplumb
+		fi
+		;;
 	esac
 }
 
@@ -123,18 +146,18 @@
 		$IPROUTE route add `$IPROUTE route get "$VPNGATEWAY" | fix_ip_get_output`
 		$IPROUTE route flush cache
 	}
-	
+
 	del_vpngateway_route() {
 		$IPROUTE route $route_syntax_del "$VPNGATEWAY"
 		$IPROUTE route flush cache
 	}
-	
+
 	set_default_route() {
 		$IPROUTE route | grep '^default' | fix_ip_get_output > "$DEFAULT_ROUTE_FILE"
 		$IPROUTE route replace default dev "$TUNDEV"
 		$IPROUTE route flush cache
 	}
-	
+
 	set_network_route() {
 		NETWORK="$1"
 		NETMASK="$2"
@@ -142,7 +165,7 @@
 		$IPROUTE route replace "$NETWORK/$NETMASKLEN" dev "$TUNDEV"
 		$IPROUTE route flush cache
 	}
-	
+
 	reset_default_route() {
 		if [ -s "$DEFAULT_ROUTE_FILE" ]; then
 			$IPROUTE route replace `cat "$DEFAULT_ROUTE_FILE"`
@@ -150,14 +173,39 @@
 			rm -f -- "$DEFAULT_ROUTE_FILE"
 		fi
 	}
-	
+
 	del_network_route() {
 		NETWORK="$1"
 		NETMASK="$2"
 		NETMASKLEN="$3"
-		$IPROUTE route $route_syntax_del "$NETWORK/$NETMASKLEN" dev "$TUNDEV" 
+		$IPROUTE route $route_syntax_del "$NETWORK/$NETMASKLEN" dev "$TUNDEV"
+		$IPROUTE route flush cache
+	}
+
+	set_ipv6_default_route() {
+		# We don't save/restore IPv6 default route; just add a higher-priority one.
+		$IPROUTE -6 route add default dev "$TUNDEV" metric 1
+		$IPROUTE -6 route flush cache
+	}
+
+	set_ipv6_network_route() {
+		NETWORK="$1"
+		NETMASKLEN="$2"
+		$IPROUTE -6 route replace "$NETWORK/$NETMASKLEN" dev "$TUNDEV"
 		$IPROUTE route flush cache
 	}
+
+	reset_ipv6_default_route() {
+		$IPROUTE -6 route del default dev "$TUNDEV"
+		$IPROUTE route flush cache
+	}
+
+	del_ipv6_network_route() {
+		NETWORK="$1"
+		NETMASKLEN="$2"
+		$IPROUTE -6 route del "$NETWORK/$NETMASKLEN" dev "$TUNDEV"
+		$IPROUTE -6 route flush cache
+	}
 else # use route command
 	get_default_gw() {
 		# isn't -n supposed to give --numeric output?
@@ -165,41 +213,42 @@
 		# Get rid of lines containing IPv6 addresses (':')
 		netstat -r -n | awk '/:/ { next; } /^(default|0\.0\.0\.0)/ { print $2; }'
 	}
-	
+
 	set_vpngateway_route() {
 		route add -host "$VPNGATEWAY" $route_syntax_gw "`get_default_gw`"
 	}
 
 	del_vpngateway_route() {
-		route $route_syntax_del -host "$VPNGATEWAY"
+	        vpngw_route=`netstat -r -n | awk '/:/ { next; } /^(default|0\.0\.0\.0)/ { print $2; }'`
+		route $route_syntax_del -host "$VPNGATEWAY" $route_syntax_gw "$vpngw_route"
 	}
-	
+
 	set_default_route() {
 		DEFAULTGW="`get_default_gw`"
 		echo "$DEFAULTGW" > "$DEFAULT_ROUTE_FILE"
-		route $route_syntax_del default
-		route add default $route_syntax_gw "$INTERNAL_IP4_ADDRESS"
+		route $route_syntax_del default $route_syntax_gw "`get_default_gw`"
+		route add default $route_syntax_gw "$INTERNAL_IP4_ADDRESS" $route_syntax_interface
 	}
-	
+
 	set_network_route() {
 		NETWORK="$1"
 		NETMASK="$2"
 		NETMASKLEN="$3"
 		del_network_route "$NETWORK" "$NETMASK" "$NETMASKLEN"
-		route add -net "$NETWORK" $route_syntax_netmask "$NETMASK" $route_syntax_gw "$INTERNAL_IP4_ADDRESS"
+		route add -net "$NETWORK" $route_syntax_netmask "$NETMASK" $route_syntax_gw "$INTERNAL_IP4_ADDRESS" $route_syntax_interface
 	}
-	
+
 	reset_default_route() {
 		if [ -s "$DEFAULT_ROUTE_FILE" ]; then
-			route $route_syntax_del default
+			route $route_syntax_del default $route_syntax_gw "`get_default_gw`" $route_syntax_interface
 			route add default $route_syntax_gw `cat "$DEFAULT_ROUTE_FILE"`
 			rm -f -- "$DEFAULT_ROUTE_FILE"
 		fi
 	}
-	
+
 	del_network_route() {
 		case "$OS" in
-		Linux|NetBSD|Darwin) # and probably others...
+		Linux|NetBSD|Darwin|SunOS) # and probably others...
 			# routes are deleted automatically on device shutdown
 			return
 			;;
@@ -209,6 +258,30 @@
 		NETMASKLEN="$3"
 		route $route_syntax_del -net "$NETWORK" $route_syntax_netmask "$NETMASK" $route_syntax_gw "$INTERNAL_IP4_ADDRESS"
 	}
+
+	set_ipv6_default_route() {
+		route add -inet6 default "$INTERNAL_IP6_ADDRESS" $route_syntax_interface
+	}
+
+	set_ipv6_network_route() {
+		NETWORK="$1"
+		NETMASK="$2"
+		route add -inet6 -net "$NETWORK/$NETMASK" "$INTERNAL_IP6_ADDRESS" $route_syntax_interface
+		:
+	}
+
+	reset_ipv6_default_route() {
+		route $route_syntax_del -inet6 default "$INTERNAL_IP6_ADDRESS"
+		:
+	}
+
+	del_ipv6_network_route() {
+		NETWORK="$1"
+		NETMASK="$2"
+		route $route_syntax_del -inet6 "$NETWORK/$NETMASK" "$INTERNAL_IP6_ADDRESS"
+		:
+	}
+
 fi
 
 # =========== resolv.conf handling ====================================
@@ -255,7 +328,7 @@
 $LINE"
 	done
 	exec 6<&-
-	
+
 	for i in $INTERNAL_IP4_DNS_TEMP ; do
 		NEW_RESOLVCONF="$NEW_RESOLVCONF
 nameserver $i"
@@ -351,6 +424,7 @@
 
 modify_resolvconf_suse()
 {
+	FULL_SCRIPTNAME=`readlink -f $0`
 	RESOLV_OPTS=''
 	test -n "$INTERNAL_IP4_DNS" && RESOLV_OPTS="-n \"$INTERNAL_IP4_DNS\""
 	test -n "$CISCO_DEF_DOMAIN" && RESOLV_OPTS="$RESOLV_OPTS -d $CISCO_DEF_DOMAIN"
@@ -360,6 +434,7 @@
 # Restore resolv.conf to old contents on Suse
 restore_resolvconf_suse()
 {
+	FULL_SCRIPTNAME=`readlink -f $0`
 	/sbin/modify_resolvconf restore -s vpnc -p $SCRIPTNAME -f $FULL_SCRIPTNAME -e $TUNDEV
 }
 
@@ -444,7 +519,7 @@
 		echo "$CISCO_BANNER" | while read LINE ; do echo "|" "$LINE" ; done
 		echo
 	fi
-	
+
 	do_ifconfig
 	set_vpngateway_route
 	if [ -n "$CISCO_SPLIT_INC" ]; then
@@ -461,12 +536,34 @@
 			i=`expr $i + 1`
 		done
 		for i in $INTERNAL_IP4_DNS ; do
-			set_network_route "$i" "255.255.255.255" "32"
+			if ! echo "$i" | grep : >/dev/null; then
+				set_network_route "$i" "255.255.255.255" "32"
+			fi
 		done
-	else
+	elif [ -n "$INTERNAL_IP4_ADDRESS" ]; then
 		set_default_route
 	fi
-	
+	if [ -n "$CISCO_IPV6_SPLIT_INC" ]; then
+		i=0
+		while [ $i -lt $CISCO_IPV6_SPLIT_INC ] ; do
+			eval NETWORK="\${CISCO_IPV6_SPLIT_INC_${i}_ADDR}"
+			eval NETMASKLEN="\${CISCO_IPV6_SPLIT_INC_${i}_MASKLEN}"
+			if [ $NETMASKLEN -lt 128 ]; then
+				set_ipv6_network_route "$NETWORK" "$NETMASKLEN"
+			else
+				set_ipv6_default_route
+			fi
+			i=`expr $i + 1`
+		done
+		for i in $INTERNAL_IP4_DNS ; do
+			if echo "$i" | grep : >/dev/null; then
+				set_ipv6_network_route "$i" "128"
+			fi
+		done
+	elif [ -n "$INTERNAL_IP6_NETMASK" -o -n "$INTERNAL_IP6_ADDRESS" ]; then
+		set_ipv6_default_route
+	fi
+
 	if [ -n "$INTERNAL_IP4_DNS" ]; then
 		$MODIFYRESOLVCONF
 	fi
@@ -494,9 +591,27 @@
 	else
 		reset_default_route
 	fi
-	
+	if [ -n "$CISCO_IPV6_SPLIT_INC" ]; then
+		i=0
+		while [ $i -lt $CISCO_IPV6_SPLIT_INC ] ; do
+			eval NETWORK="\${CISCO_IPV6_SPLIT_INC_${i}_ADDR}"
+			eval NETMASKLEN="\${CISCO_IPV6_SPLIT_INC_${i}_MASKLEN}"
+			if [ $NETMASKLEN -eq 0 ]; then
+				reset_ipv6_default_route
+			else
+				del_ipv6_network_route "$NETWORK" "$NETMASKLEN"
+			fi
+			i=`expr $i + 1`
+		done
+		for i in $INTERNAL_IP6_DNS ; do
+			del_ipv6_network_route "$i" "128"
+		done
+	else
+		reset_ipv6_default_route
+	fi
+
 	del_vpngateway_route
-	
+
 	if [ -n "$INTERNAL_IP4_DNS" ]; then
 		$RESTORERESOLVCONF
 	fi
 
design & coding: Vladimir Lettiev aka crux © 2004-2005, Andrew Avramenko aka liks © 2007-2008
current maintainer: Michael Shigorin