No Description

openconnect.sh 2.2KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980
  1. #!/bin/sh
  2. . /lib/functions.sh
  3. . ../netifd-proto.sh
  4. init_proto "$@"
  5. proto_openconnect_init_config() {
  6. proto_config_add_string "server"
  7. proto_config_add_int "port"
  8. proto_config_add_string "username"
  9. proto_config_add_string "serverhash"
  10. proto_config_add_string "authgroup"
  11. proto_config_add_string "password"
  12. no_device=1
  13. available=1
  14. }
  15. proto_openconnect_setup() {
  16. local config="$1"
  17. json_get_vars server port username serverhash authgroup password vgroup
  18. grep -q tun /proc/modules || insmod tun
  19. logger -t openconnect "initializing..."
  20. serv_addr=
  21. for ip in $(resolveip -t 10 "$server"); do
  22. ( proto_add_host_dependency "$config" "$ip" )
  23. serv_addr=1
  24. done
  25. [ -n "$serv_addr" ] || {
  26. logger -t openconnect "Could not resolve server address: '$server'"
  27. sleep 60
  28. proto_setup_failed "$config"
  29. exit 1
  30. }
  31. [ -n "$port" ] && port=":$port"
  32. cmdline="$server$port -i vpn-$config --non-inter --syslog --script /lib/netifd/vpnc-script"
  33. [ -f /etc/openconnect/user-cert-vpn-$config.pem ] && append cmdline "-c /etc/openconnect/user-cert-vpn-$config.pem"
  34. [ -f /etc/openconnect/user-key-vpn-$config.pem ] && append cmdline "--sslkey /etc/openconnect/user-key-vpn-$config.pem"
  35. if test -f /etc/openconnect/ca-vpn-$config.pem;then
  36. append cmdline "--cafile /etc/openconnect/ca-vpn-$config.pem"
  37. append cmdline "--no-system-trust"
  38. fi
  39. if test -n "$serverhash";then
  40. append cmdline " --servercert=$serverhash"
  41. append cmdline "--no-system-trust"
  42. fi
  43. [ -n "$authgroup" ] && append cmdline "--authgroup $authgroup"
  44. [ -n "$username" ] && append cmdline "-u $username"
  45. [ -n "$password" ] && {
  46. umask 077
  47. pwfile="/var/run/openconnect-$config.passwd"
  48. echo "$password" > "$pwfile"
  49. append cmdline "--passwd-on-stdin"
  50. }
  51. proto_export INTERFACE="$config"
  52. logger -t openconnect "executing 'openconnect $cmdline'"
  53. if [ -f "$pwfile" ];then
  54. proto_run_command "$config" /usr/sbin/openconnect-wrapper $pwfile $cmdline
  55. else
  56. proto_run_command "$config" /usr/sbin/openconnect $cmdline
  57. fi
  58. }
  59. proto_openconnect_teardown() {
  60. local config="$1"
  61. pwfile="/var/run/openconnect-$config.passwd"
  62. rm -f $pwfile
  63. logger -t openconnect "bringing down openconnect"
  64. proto_kill_command "$config" 2
  65. }
  66. add_protocol openconnect