[packages] /etc/functions.sh => /lib/functions.sh
[packages.git] / net / openconnect / files / openconnect.sh
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 "cookie"
11         proto_config_add_string "password"
12         no_device=1
13         available=1
14 }
15
16 proto_openconnect_setup() {
17         local config="$1"
18
19         json_get_vars server port username cookie password
20
21         grep -q tun /proc/modules || insmod tun
22
23         serv_addr=
24         for ip in $(resolveip -t 5 "$server"); do
25                 proto_add_host_dependency "$config" "$server"
26                 serv_addr=1
27         done
28         [ -n "$serv_addr" ] || {
29                 echo "Could not resolve server address"
30                 sleep 5
31                 proto_setup_failed "$config"
32                 exit 1
33         }
34
35         [ -n "$port" ] && port=":$port"
36
37         cmdline="$server$port -i vpn-$config --no-cert-check --non-inter --syslog --script /lib/netifd/vpnc-script"
38
39         [ -n "$cookie" ] && append cmdline "-C $cookie"
40         [ -n "$username" ] && append cmdline "-u $username"
41         [ -n "$password" ] && {
42                 umask 077
43                 pwfile="/var/run/openconnect-$config.passwd"
44                 echo "$password" > "$pwfile"
45                 append cmdline "--passwd-file=$pwfile"
46         }
47
48         proto_export INTERFACE="$config"
49         proto_run_command "$config" /usr/sbin/openconnect $cmdline
50 }
51
52 proto_openconnect_teardown() {
53         proto_kill_command "$config"
54 }
55
56 add_protocol openconnect