openconnect.sh (3334B)
1 #!/bin/sh 2 . /lib/functions.sh 3 . ../netifd-proto.sh 4 init_proto "$@" 5 6 proto_openconnect_init_config() { 7 proto_config_add_string "server" 8 proto_config_add_int "port" 9 proto_config_add_string "username" 10 proto_config_add_string "serverhash" 11 proto_config_add_string "authgroup" 12 proto_config_add_string "password" 13 proto_config_add_string "password2" 14 proto_config_add_string "token_mode" 15 proto_config_add_string "token_secret" 16 proto_config_add_string "interface" 17 proto_config_add_string "os" 18 proto_config_add_string "csd_wrapper" 19 no_device=1 20 available=1 21 } 22 23 proto_openconnect_setup() { 24 local config="$1" 25 26 json_get_vars server port username serverhash authgroup password password2 interface token_mode token_secret os csd_wrapper 27 28 grep -q tun /proc/modules || insmod tun 29 ifname="vpn-$config" 30 31 logger -t openconnect "initializing..." 32 33 logger -t "openconnect" "adding host dependency for $server at $config" 34 for ip in $(resolveip -t 10 "$server"); do 35 logger -t "openconnect" "adding host dependency for $ip at $config" 36 proto_add_host_dependency "$config" "$ip" 37 done 38 39 [ -n "$port" ] && port=":$port" 40 41 cmdline="$server$port -i "$ifname" --non-inter --syslog --script /lib/netifd/vpnc-script" 42 43 # migrate to standard config files 44 [ -f "/etc/config/openconnect-user-cert-vpn-$config.pem" ] && mv "/etc/config/openconnect-user-cert-vpn-$config.pem" "/etc/openconnect/user-cert-vpn-$config.pem" 45 [ -f "/etc/config/openconnect-user-key-vpn-$config.pem" ] && mv "/etc/config/openconnect-user-key-vpn-$config.pem" "/etc/openconnect/user-key-vpn-$config.pem" 46 [ -f "/etc/config/openconnect-ca-vpn-$config.pem" ] && mv "/etc/config/openconnect-ca-vpn-$config.pem" "/etc/openconnect/ca-vpn-$config.pem" 47 48 [ -f /etc/openconnect/user-cert-vpn-$config.pem ] && append cmdline "-c /etc/openconnect/user-cert-vpn-$config.pem" 49 [ -f /etc/openconnect/user-key-vpn-$config.pem ] && append cmdline "--sslkey /etc/openconnect/user-key-vpn-$config.pem" 50 [ -f /etc/openconnect/ca-vpn-$config.pem ] && { 51 append cmdline "--cafile /etc/openconnect/ca-vpn-$config.pem" 52 append cmdline "--no-system-trust" 53 } 54 [ -n "$serverhash" ] && { 55 append cmdline " --servercert=$serverhash" 56 append cmdline "--no-system-trust" 57 } 58 [ -n "$authgroup" ] && append cmdline "--authgroup $authgroup" 59 [ -n "$username" ] && append cmdline "-u $username" 60 [ -n "$password" ] && { 61 umask 077 62 mkdir -p /var/etc 63 pwfile="/var/etc/openconnect-$config.passwd" 64 echo "$password" > "$pwfile" 65 [ -n "$password2" ] && echo "$password2" >> "$pwfile" 66 append cmdline "--passwd-on-stdin" 67 } 68 69 [ -n "$token_mode" ] && append cmdline "--token-mode=$token_mode" 70 [ -n "$token_secret" ] && append cmdline "--token-secret=$token_secret" 71 [ -n "$os" ] && append cmdline "--os=$os" 72 [ -n "$csd_wrapper" ] && [ -x "$csd_wrapper" ] && append cmdline "--csd-wrapper=$csd_wrapper" 73 74 proto_export INTERFACE="$config" 75 logger -t openconnect "executing 'openconnect $cmdline'" 76 77 if [ -f "$pwfile" ]; then 78 proto_run_command "$config" /usr/sbin/openconnect-wrapper $pwfile $cmdline 79 else 80 proto_run_command "$config" /usr/sbin/openconnect $cmdline 81 fi 82 } 83 84 proto_openconnect_teardown() { 85 local config="$1" 86 87 pwfile="/var/etc/openconnect-$config.passwd" 88 89 rm -f $pwfile 90 logger -t openconnect "bringing down openconnect" 91 proto_kill_command "$config" 2 92 } 93 94 add_protocol openconnect