From: Jason Cooper <cyanogen at lakedaemon.net> Signed-off-by: Jason Cooper <cyanogen at lakedaemon.net> --- prebuilt/common/xbin/openconnect-up.sh | 62 ++++++++++++++++++++++++++------ 1 files changed, 51 insertions(+), 11 deletions(-) diff --git a/prebuilt/common/xbin/openconnect-up.sh b/prebuilt/common/xbin/openconnect-up.sh index e0140c5..035a325 100644 --- a/prebuilt/common/xbin/openconnect-up.sh +++ b/prebuilt/common/xbin/openconnect-up.sh @@ -1,4 +1,4 @@ -#!/bin/sh +#!/system/bin/sh #* reason -- why this script was called, one of: pre-init connect disconnect #* VPNGATEWAY -- vpn gateway address (always present) #* TUNDEV -- tunnel device (always present) @@ -44,17 +44,17 @@ # =========== script (variable) setup ==================================== -PATH=/sbin:/usr/sbin:$PATH +PATH=/system/xbin:/system/sbin:/system/bin:$PATH OS="`uname -s`" -DEFAULT_ROUTE_FILE=/var/run/vpnc/defaultroute -RESOLV_CONF_BACKUP=/var/run/vpnc/resolv.conf-backup +DEFAULT_ROUTE_FILE=/sdcard/openconnect/defaultroute +RESOLV_CONF_BACKUP=/sdcard/openconnect/resolv.conf-backup SCRIPTNAME=`basename $0` -# some systems, eg. Darwin & FreeBSD, prune /var/run on boot -if [ ! -d "/var/run/vpnc" ]; then - mkdir -p /var/run/vpnc +# Is this the first time running openconnect script? +if [ ! -d "/sdcard/openconnect" ]; then + mkdir -p /sdcard/openconnect fi # stupid SunOS: no blubber in /usr/local/bin ... (on stdout) @@ -85,11 +85,29 @@ if [ -x /sbin/resolvconf ]; then # Optional tool on Debian, Ubuntu, Gentoo elif [ -x /sbin/modify_resolvconf ]; then # Mandatory tool on Suse earlier than 11.1 MODIFYRESOLVCONF=modify_resolvconf_suse RESTORERESOLVCONF=restore_resolvconf_suse +elif [ -x /system/bin/setprop ]; then # Mandatory tool on Android + MODIFYRESOLVCONF=modify_resolvconf_android + RESTORERESOLVCONF=restore_resolvconf_android else # Generic for any OS MODIFYRESOLVCONF=modify_resolvconf_generic RESTORERESOLVCONF=restore_resolvconf_generic fi +# =========== android logging ============================================== + +andlog() { + prio=$1 + shift + tag="${0##*/}" + case $prio in + [vdiwe]) + ;; + *) + log -p e -t $tag "INVALID PRIO to andlog()!" + esac + log -p $prio -t $tag "$*" +} + # =========== tunnel interface handling ==================================== do_ifconfig() { @@ -286,6 +304,23 @@ fi # =========== resolv.conf handling ==================================== +# =========== resolv.conf handling for Android ======================== + +modify_resolvconf_android() { + c=1 + for dns in $INTERNAL_IP4_DNS; do + setprop vpn.dns${c} "$dns" + c=$((c+1)) + done + + setprop vpn.dns.search "$CISCO_DEF_DOMAIN" +} + +restore_resolvconf_android() { + # Android auto switches between dns servers, nothing to do. + : +} + # =========== resolv.conf handling for any OS ========================= modify_resolvconf_generic() { @@ -472,9 +507,9 @@ kernel_is_2_6_or_above() { do_pre_init() { if [ "$OS" = "Linux" ]; then - if (exec 6<> /dev/net/tun) > /dev/null 2>&1 ; then + if (exec 6<> /dev/tun) > /dev/null 2>&1 ; then : - else # can't open /dev/net/tun + else # can't open /dev/tun test -e /proc/sys/kernel/modprobe && `cat /proc/sys/kernel/modprobe` tun 2>/dev/null # fix for broken devfs in kernel 2.6.x if [ "`readlink /dev/net/tun`" = misc/net/tun \ @@ -621,7 +656,12 @@ do_disconnect() { #### Main if [ -z "$reason" ]; then - echo "this script must be called from vpnc" 1>&2 + andlog e "this script must be called from openconnect" + exit 1 +fi + +if [ "`whoami`" != "root" ]; then + andlog e "this script must be run as root." exit 1 fi @@ -636,7 +676,7 @@ case "$reason" in do_disconnect ;; *) - echo "unknown reason '$reason'. Maybe vpnc-script is out of date" 1>&2 + andlog e "unknown reason '$reason'. Maybe vpnc-script is out of date" exit 1 ;; esac -- 1.7.0.4