[package] ppp: introduce "authfail" option which specifies whether pppd should attemp...
[openwrt.git] / package / ppp / files / ppp.sh
index 98099db..7e9b8dd 100755 (executable)
@@ -19,6 +19,7 @@ ppp_generic_init_config() {
        proto_config_add_boolean "defaultroute"
        proto_config_add_boolean "peerdns"
        proto_config_add_boolean "ipv6"
+       proto_config_add_boolean "authfail"
        proto_config_add_int "mtu"
 }
 
@@ -70,7 +71,10 @@ ppp_generic_teardown() {
        case "$ERROR" in
                11|19)
                        proto_notify_error "$interface" AUTH_FAILED
-                       proto_block_restart "$interface"
+                       json_get_var authfail authfail
+                       if [ "${authfail:-0}" -gt 0 ]; then
+                               proto_block_restart "$interface"
+                       fi
                ;;
                2)
                        proto_notify_error "$interface" INVALID_OPTIONS
@@ -166,9 +170,53 @@ proto_pppoa_teardown() {
        ppp_generic_teardown "$@"
 }
 
+proto_pptp_init_config() {
+       ppp_generic_init_config
+       proto_config_add_string "server"
+       available=1
+       no_device=1
+}
+
+proto_pptp_setup() {
+       local config="$1"
+       local iface="$2"
+
+       local ip serv_addr server
+       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
+       }
+
+       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
+
+       ppp_generic_setup "$config" \
+               plugin pptp.so \
+               pptp_server $server \
+               file /etc/ppp/options.pptp
+}
+
+proto_pptp_teardown() {
+       ppp_generic_teardown "$@"
+}
+
 [ -n "$INCLUDE_ONLY" ] || {
        add_protocol ppp
        [ -f /usr/lib/pppd/*/rp-pppoe.so ] && add_protocol pppoe
        [ -f /usr/lib/pppd/*/pppoatm.so ] && add_protocol pppoa
+       [ -f /usr/lib/pppd/*/pptp.so ] && add_protocol pptp
 }