You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

98 lines
3.3 KiB

10 years ago
10 years ago
10 years ago
10 years ago
10 years ago
10 years ago
10 years ago
10 years ago
10 years ago
10 years ago
10 years ago
10 years ago
10 years ago
10 years ago
10 years ago
  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. proto_config_add_string "password2"
  13. proto_config_add_string "token_mode"
  14. proto_config_add_string "token_secret"
  15. proto_config_add_string "interface"
  16. proto_config_add_string "os"
  17. proto_config_add_string "csd_wrapper"
  18. no_device=1
  19. available=1
  20. }
  21. proto_openconnect_setup() {
  22. local config="$1"
  23. json_get_vars server port username serverhash authgroup password password2 interface token_mode token_secret os csd_wrapper
  24. grep -q tun /proc/modules || insmod tun
  25. logger -t openconnect "initializing..."
  26. serv_addr=
  27. for ip in $(resolveip -t 10 "$server"); do
  28. ( proto_add_host_dependency "$config" "$ip" $interface )
  29. serv_addr=1
  30. done
  31. [ -n "$serv_addr" ] || {
  32. logger -t openconnect "Could not resolve server address: '$server'"
  33. sleep 60
  34. proto_setup_failed "$config"
  35. exit 1
  36. }
  37. [ -n "$port" ] && port=":$port"
  38. cmdline="$server$port -i vpn-$config --non-inter --syslog --script /lib/netifd/vpnc-script"
  39. # migrate to standard config files
  40. [ -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"
  41. [ -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"
  42. [ -f "/etc/config/openconnect-ca-vpn-$config.pem" ] && mv "/etc/config/openconnect-ca-vpn-$config.pem" "/etc/openconnect/ca-vpn-$config.pem"
  43. [ -f /etc/openconnect/user-cert-vpn-$config.pem ] && append cmdline "-c /etc/openconnect/user-cert-vpn-$config.pem"
  44. [ -f /etc/openconnect/user-key-vpn-$config.pem ] && append cmdline "--sslkey /etc/openconnect/user-key-vpn-$config.pem"
  45. [ -f /etc/openconnect/ca-vpn-$config.pem ] && {
  46. append cmdline "--cafile /etc/openconnect/ca-vpn-$config.pem"
  47. append cmdline "--no-system-trust"
  48. }
  49. [ -n "$serverhash" ] && {
  50. append cmdline " --servercert=$serverhash"
  51. append cmdline "--no-system-trust"
  52. }
  53. [ -n "$authgroup" ] && append cmdline "--authgroup $authgroup"
  54. [ -n "$username" ] && append cmdline "-u $username"
  55. [ -n "$password" ] && {
  56. umask 077
  57. mkdir -p /var/etc
  58. pwfile="/var/etc/openconnect-$config.passwd"
  59. echo "$password" > "$pwfile"
  60. [ -n "$password2" ] && echo "$password2" >> "$pwfile"
  61. append cmdline "--passwd-on-stdin"
  62. }
  63. [ -n "$token_mode" ] && append cmdline "--token-mode=$token_mode"
  64. [ -n "$token_secret" ] && append cmdline "--token-secret=$token_secret"
  65. [ -n "$os" ] && append cmdline "--os=$os"
  66. [ -n "$csd_wrapper" ] && [ -x "$csd_wrapper" ] && append cmdline "--csd-wrapper=$csd_wrapper"
  67. proto_export INTERFACE="$config"
  68. logger -t openconnect "executing 'openconnect $cmdline'"
  69. if [ -f "$pwfile" ]; then
  70. proto_run_command "$config" /usr/sbin/openconnect-wrapper $pwfile $cmdline
  71. else
  72. proto_run_command "$config" /usr/sbin/openconnect $cmdline
  73. fi
  74. }
  75. proto_openconnect_teardown() {
  76. local config="$1"
  77. pwfile="/var/etc/openconnect-$config.passwd"
  78. rm -f $pwfile
  79. logger -t openconnect "bringing down openconnect"
  80. proto_kill_command "$config" 2
  81. }
  82. add_protocol openconnect