2014-06-03 16:18:17 +00:00
#!/bin/sh
. /lib/functions.sh
. ../netifd-proto.sh
init_proto " $@ "
proto_openconnect_init_config( ) {
proto_config_add_string "server"
proto_config_add_int "port"
2017-05-08 05:07:23 +00:00
proto_config_add_int "mtu"
2017-11-07 10:11:34 +00:00
proto_config_add_int "juniper"
2017-11-22 02:10:22 +00:00
proto_config_add_string "interface"
2014-06-03 16:18:17 +00:00
proto_config_add_string "username"
2014-06-04 21:17:54 +00:00
proto_config_add_string "serverhash"
proto_config_add_string "authgroup"
2014-06-03 16:18:17 +00:00
proto_config_add_string "password"
2015-06-18 20:40:25 +00:00
proto_config_add_string "password2"
2015-02-06 19:54:39 +00:00
proto_config_add_string "token_mode"
proto_config_add_string "token_secret"
2017-11-28 07:04:31 +00:00
proto_config_add_string "token_script"
2015-04-04 19:31:49 +00:00
proto_config_add_string "os"
2015-04-04 19:32:59 +00:00
proto_config_add_string "csd_wrapper"
2019-12-02 16:26:55 +00:00
proto_config_add_array 'form_entry:regex("[^:]+:[^=]+=.*")'
2014-06-03 16:18:17 +00:00
no_device = 1
available = 1
}
2019-12-02 16:26:55 +00:00
proto_openconnect_add_form_entry( ) {
[ -n " $1 " ] && append cmdline " --form-entry $1 "
}
2014-06-03 16:18:17 +00:00
proto_openconnect_setup( ) {
local config = " $1 "
2019-12-02 16:26:55 +00:00
json_get_vars server port interface username serverhash authgroup password password2 token_mode token_secret token_script os csd_wrapper mtu juniper form_entry
2014-06-03 16:18:17 +00:00
grep -q tun /proc/modules || insmod tun
2015-07-07 20:48:44 +00:00
ifname = " vpn- $config "
2014-06-03 16:18:17 +00:00
2014-06-04 21:17:54 +00:00
logger -t openconnect "initializing..."
2016-05-22 15:42:22 +00:00
logger -t "openconnect" " adding host dependency for $server at $config "
for ip in $( resolveip -t 10 " $server " ) ; do
logger -t "openconnect" " adding host dependency for $ip at $config "
2017-11-22 02:10:22 +00:00
proto_add_host_dependency " $config " " $ip " " $interface "
2016-05-22 15:42:22 +00:00
done
2014-06-03 16:18:17 +00:00
[ -n " $port " ] && port = " : $port "
2015-07-07 20:48:44 +00:00
cmdline = " $server $port -i " $ifname " --non-inter --syslog --script /lib/netifd/vpnc-script"
2017-05-08 05:07:23 +00:00
[ -n " $mtu " ] && cmdline = " $cmdline --mtu $mtu "
2014-06-03 16:18:17 +00:00
2015-01-19 21:46:12 +00:00
# migrate to standard config files
[ -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 "
[ -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 "
[ -f " /etc/config/openconnect-ca-vpn- $config .pem " ] && mv " /etc/config/openconnect-ca-vpn- $config .pem " " /etc/openconnect/ca-vpn- $config .pem "
2015-01-19 21:37:43 +00:00
[ -f /etc/openconnect/user-cert-vpn-$config .pem ] && append cmdline " -c /etc/openconnect/user-cert-vpn- $config .pem "
[ -f /etc/openconnect/user-key-vpn-$config .pem ] && append cmdline " --sslkey /etc/openconnect/user-key-vpn- $config .pem "
[ -f /etc/openconnect/ca-vpn-$config .pem ] && {
2015-01-19 21:37:29 +00:00
append cmdline " --cafile /etc/openconnect/ca-vpn- $config .pem "
2014-12-05 19:27:45 +00:00
append cmdline "--no-system-trust"
2014-12-20 15:56:53 +00:00
}
2017-11-07 10:11:34 +00:00
if [ " ${ juniper :- 0 } " -gt 0 ] ; then
append cmdline "--juniper"
fi
2014-12-20 15:56:53 +00:00
[ -n " $serverhash " ] && {
2014-12-05 19:27:45 +00:00
append cmdline " --servercert= $serverhash "
append cmdline "--no-system-trust"
2014-12-20 15:56:53 +00:00
}
2014-06-04 21:17:54 +00:00
[ -n " $authgroup " ] && append cmdline " --authgroup $authgroup "
2014-06-03 16:18:17 +00:00
[ -n " $username " ] && append cmdline " -u $username "
2017-11-28 07:04:31 +00:00
[ -n " $password " ] || [ " $token_mode " = "script" ] && {
2014-06-03 16:18:17 +00:00
umask 077
2015-02-06 19:54:39 +00:00
mkdir -p /var/etc
pwfile = " /var/etc/openconnect- $config .passwd "
2017-11-28 07:04:31 +00:00
[ -n " $password " ] && {
echo " $password " > " $pwfile "
[ -n " $password2 " ] && echo " $password2 " >> " $pwfile "
}
[ " $token_mode " = "script" ] && {
$token_script > " $pwfile " 2> /dev/null || {
logger -t openconenct " Cannot get password from script ' $token_script ' "
proto_setup_failed " $config "
}
}
2014-06-03 16:18:17 +00:00
append cmdline "--passwd-on-stdin"
}
2017-11-28 07:04:31 +00:00
[ -n " $token_mode " -a " $token_mode " != "script" ] && append cmdline " --token-mode= $token_mode "
2014-12-05 06:51:45 +00:00
[ -n " $token_secret " ] && append cmdline " --token-secret= $token_secret "
2015-04-04 19:31:49 +00:00
[ -n " $os " ] && append cmdline " --os= $os "
2015-04-04 19:32:59 +00:00
[ -n " $csd_wrapper " ] && [ -x " $csd_wrapper " ] && append cmdline " --csd-wrapper= $csd_wrapper "
2014-12-05 06:51:45 +00:00
2019-12-02 16:26:55 +00:00
json_for_each_item proto_openconnect_add_form_entry form_entry
2014-06-03 16:18:17 +00:00
proto_export INTERFACE = " $config "
2014-06-04 21:17:54 +00:00
logger -t openconnect " executing 'openconnect $cmdline ' "
2014-12-20 15:56:53 +00:00
if [ -f " $pwfile " ] ; then
2014-08-31 21:57:47 +00:00
proto_run_command " $config " /usr/sbin/openconnect-wrapper $pwfile $cmdline
2014-06-04 21:17:54 +00:00
else
proto_run_command " $config " /usr/sbin/openconnect $cmdline
fi
2014-06-03 16:18:17 +00:00
}
proto_openconnect_teardown( ) {
2014-08-31 21:57:47 +00:00
local config = " $1 "
2015-02-06 19:54:39 +00:00
pwfile = " /var/etc/openconnect- $config .passwd "
2014-06-04 21:17:54 +00:00
rm -f $pwfile
logger -t openconnect "bringing down openconnect"
2014-10-28 11:31:48 +00:00
proto_kill_command " $config " 2
2014-06-03 16:18:17 +00:00
}
add_protocol openconnect