Add netifd script to control sstp connections.
authorHarvey Hu <magicdog20@gmail.com>
Mon, 1 Dec 2014 15:11:41 +0000 (10:11 -0500)
committerRobert Koszewski <rkkos@ROKOS-NOTEBOOK.europe.corp.microsoft.com>
Sun, 16 Jun 2019 16:43:15 +0000 (18:43 +0200)
net/sstp-client/Makefile
net/sstp-client/files/etc/ppp/chap-secrets [deleted file]
net/sstp-client/files/lib/netifd/proto/sstp.sh [new file with mode: 0755]

index feb7df1fe38ef3a7ad0e48e1cac2bb5b7bf01469..959e3fec4e71ebc6ca4d472fcfda1460b30ddfc7 100644 (file)
@@ -8,7 +8,7 @@
 include $(TOPDIR)/rules.mk
 
 PKG_NAME:=sstp-client
-PKG_VERSION:=1.0.12
+PKG_VERSION:=1.1.0
 PKG_RELEASE:=2
 
 PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.gz
@@ -24,7 +24,7 @@ define Package/sstp-client
   SECTION:=net
   CATEGORY:=Network
   SUBMENU:=VPN
-  DEPENDS=+libevent2 +libopenssl +ppp
+  DEPENDS=+libevent2 +libopenssl +ppp +resolveip
   TITLE:=SSTP-Client is a SSTP client for Linux.
   URL:=http://sstp-client.sourceforge.net/
   MAINTAINER:=Federico Di Marco <fededim@gmail.com>
@@ -53,9 +53,11 @@ define Package/sstp-client/install
        $(INSTALL_BIN) $(PKG_BUILD_DIR)/src/.libs/sstpc $(1)/usr/bin/
        $(CP) $(PKG_BUILD_DIR)/src/libsstp-api/.libs/*.so* $(1)/usr/lib/
        $(CP) $(PKG_BUILD_DIR)/src/pppd-plugin/.libs/*.so* $(1)/usr/lib/
-
+       
        $(INSTALL_DIR) $(1)/etc
        $(CP) files/etc $(1) 
+       $(INSTALL_DIR) $(1)/lib/netifd/proto
+       $(INSTALL_BIN) ./files/lib/netifd/proto/sstp.sh $(1)/lib/netifd/proto
 endef
 
 $(eval $(call BuildPackage,sstp-client))
diff --git a/net/sstp-client/files/etc/ppp/chap-secrets b/net/sstp-client/files/etc/ppp/chap-secrets
deleted file mode 100644 (file)
index 3b93768..0000000
+++ /dev/null
@@ -1,4 +0,0 @@
-# Secrets for authentication using CHAP
-# client (domain\\username)    server          secret (password)       acceptable local IP addresses
-# SSTP-TEST\\JonDoe            sstp-test       'testme1234!'           *
-
diff --git a/net/sstp-client/files/lib/netifd/proto/sstp.sh b/net/sstp-client/files/lib/netifd/proto/sstp.sh
new file mode 100755 (executable)
index 0000000..1419d08
--- /dev/null
@@ -0,0 +1,130 @@
+#!/bin/sh
+
+[ -x /usr/bin/sstpc ] || exit 0
+
+[ -n "$INCLUDE_ONLY" ] || {
+       . /lib/functions.sh
+       . ../netifd-proto.sh
+       init_proto "$@"
+}
+
+proto_sstp_init_config() {
+       proto_config_add_string "server"
+       proto_config_add_string "username"
+       proto_config_add_string "password"
+       proto_config_add_string "pppd_options"
+       proto_config_add_string "sstp_options"
+       proto_config_add_int "log_level"
+       proto_config_add_int "mtu"
+       proto_config_add_boolean "ipv6"
+       proto_config_add_boolean "defaultroute"
+       proto_config_add_boolean "peerdns"
+       available=1
+       no_device=1
+}
+
+proto_sstp_setup() {
+       local config="$1"; shift
+       local iface="$2"
+       local ifname="sstp-$config"
+
+       local ip serv_addr server ipv6 defaultroute peerdns
+       json_get_var server server && {
+               for ip in $(resolveip -t 5 "$server"); do
+                       ( proto_add_host_dependency "$config" "$ip" )
+                       serv_addr=1
+               done
+       }
+       [ -n "$serv_addr" ] || {
+               echo "Could not resolve server address"
+               sleep 5
+               proto_setup_failed "$config"
+               exit 1
+       }
+
+       json_get_vars username password pppd_options sstp_options log_level ipv6 defaultroute peerdns
+       if [ "$ipv6" = 1 ]; then
+               ipv6=1
+       else
+               ipv6=""
+       fi
+       if [ "$defaultroute" = 0 ]; then
+               defaultroute=""
+       else
+               defaultroute=1
+       fi
+
+       if [ "$peerdns" = 0 ]; then
+               peerdns=""
+       else
+               peerdns=1
+       fi
+
+       [ -n "$mtu" ] || json_get_var mtu mtu
+       [ -n "$log_level" ] || log_level=0
+
+       local load
+       for module in slhc ppp_generic ppp_async ppp_mppe ip_gre gre pptp; do
+               grep -q "^$module " /proc/modules && continue
+               /sbin/insmod $module 2>&- >&-
+               load=1
+       done
+       [ "$load" = "1" ] && sleep 1
+
+       proto_init_update "$ifname" 1
+       proto_send_update "$config"
+
+       proto_run_command "$config" sstpc \
+               --cert-warn \
+               --password $password \
+               --user $username \
+               --log-level $log_level \
+               --save-server-route \
+               --ipparam $config \
+               $sstp_options \
+               $server \
+               ifname $ifname \
+               require-mschap-v2 \
+               ${ipv6:++ipv6} \
+               refuse-pap \
+               noauth \
+               ${defaultroute:+replacedefaultroute defaultroute} \
+               ${peerdns:+usepeerdns} \
+               ip-up-script /lib/netifd/ppp-up \
+               ipv6-up-script /lib/netifd/ppp-up \
+               ip-down-script /lib/netifd/ppp-down \
+               ipv6-down-script /lib/netifd/ppp-down \
+               ${mtu:+mtu $mtu mru $mtu} \
+               $pppd_options
+
+       # WORKAROUND: Workaround to properly register the sstp interface (As seeen in: https://forum.archive.openwrt.org/viewtopic.php?id=58007)
+       # WORKAROUND: Start
+       sleep 10
+       proto_init_update "$ifname" 1
+       proto_send_update "$config"
+       # WORKAROUND: End
+       
+       # if use pppoe and sstp at same time , firewall need reload .
+       # but don't konw why
+       /etc/init.d/firewall reload 2>&- >&-
+}
+
+proto_sstp_teardown() {
+       local interface="$1"
+
+       case "$ERROR" in
+               11|19)
+                       proto_notify_error "$interface" AUTH_FAILED
+                       proto_block_restart "$interface"
+               ;;
+               2)
+                       proto_notify_error "$interface" INVALID_OPTIONS
+                       proto_block_restart "$interface"
+               ;;
+       esac
+       proto_kill_command "$interface"
+}
+
+[ -n "$INCLUDE_ONLY" ] || {
+       add_protocol sstp
+}