6in4: add missing colon when setting default ca_path
[openwrt/openwrt.git] / package / network / ipv6 / 6in4 / files / 6in4.sh
index af2ddca1d7959a56e0cc6d71e3e769acab3cabc2..786f37fc14c81d8f58d0da32626eb91082192c15 100755 (executable)
@@ -11,7 +11,7 @@
 
 proto_6in4_update() {
        sh -c '
-               local timeout=5
+               timeout=5
 
                (while [ $((timeout--)) -gt 0 ]; do
                        sleep 1
@@ -27,8 +27,8 @@ proto_6in4_setup() {
        local iface="$2"
        local link="6in4-$cfg"
 
-       local mtu ttl tos ipaddr peeraddr ip6addr ip6prefix tunnelid username password updatekey
-       json_get_vars mtu ttl tos ipaddr peeraddr ip6addr ip6prefix tunnelid username password updatekey
+       local mtu ttl tos ipaddr peeraddr ip6addr ip6prefix tunlink tunnelid username password updatekey
+       json_get_vars mtu ttl tos ipaddr peeraddr ip6addr ip6prefix tunlink tunnelid username password updatekey
 
        [ -z "$peeraddr" ] && {
                proto_notify_error "$cfg" "MISSING_ADDRESS"
@@ -36,11 +36,16 @@ proto_6in4_setup() {
                return
        }
 
-       ( proto_add_host_dependency "$cfg" "$peeraddr" )
+       ( proto_add_host_dependency "$cfg" "$peeraddr" "$tunlink" )
 
        [ -z "$ipaddr" ] && {
-               local wanif
-               if ! network_find_wan wanif || ! network_get_ipaddr ipaddr "$wanif"; then
+               local wanif="$tunlink"
+               if [ -z "$wanif" ] && ! network_find_wan wanif; then
+                       proto_notify_error "$cfg" "NO_WAN_LINK"
+                       return
+               fi
+
+               if ! network_get_ipaddr ipaddr "$wanif"; then
                        proto_notify_error "$cfg" "NO_WAN_LINK"
                        return
                fi
@@ -68,6 +73,7 @@ proto_6in4_setup() {
        [ -n "$tos" ] && json_add_string tos "$tos"
        json_add_string local "$ipaddr"
        json_add_string remote "$peeraddr"
+       [ -n "$tunlink" ] && json_add_string link "$tunlink"
        proto_close_tunnel
 
        proto_send_update "$cfg"
@@ -76,40 +82,23 @@ proto_6in4_setup() {
                [ -n "$updatekey" ] && password="$updatekey"
 
                local http="http"
-               local urlget="wget"
+               local urlget="uclient-fetch"
                local urlget_opts="-qO-"
-               local ca_path="${SSL_CERT_DIR-/etc/ssl/certs}"
-
-               if [ -n "$(which curl)" ]; then
-                       urlget="curl"
-                       urlget_opts="-s -S"
-                       if curl -V | grep "Protocols:" | grep -qF "https"; then
-                               http="https"
-                               urlget_opts="$urlget_opts --capath $ca_path"
-                       fi
-               fi
-               if [ "$http" = "http" ] &&
-                       wget --version 2>&1 | grep -qF "+https"; then
-                       urlget="wget"
-                       urlget_opts="-qO- --ca-directory=$ca_path"
-                       http="https"
-               fi
+               local ca_path="${SSL_CERT_DIR:-/etc/ssl/certs}"
+
+               [ -f /lib/libustream-ssl.so ] && http=https
                [ "$http" = "https" -a -z "$(find $ca_path -name "*.0" 2>/dev/null)" ] && {
-                       if [ "$urlget" = "curl" ]; then
-                               urlget_opts="$urlget_opts -k"
-                       else
-                               urlget_opts="$urlget_opts --no-check-certificate"
-                       fi
+                       urlget_opts="$urlget_opts --no-check-certificate"
                }
 
-               local url="$http://ipv4.tunnelbroker.net/nic/update?username=$username&password=$password&hostname=$tunnelid"
+               local url="$http://ipv4.tunnelbroker.net/nic/update?hostname=$tunnelid"
                local try=0
                local max=3
 
                (
                        set -o pipefail
                        while [ $((++try)) -le $max ]; do
-                               if proto_6in4_update $urlget $urlget_opts "$url" 2>&1 | \
+                               if proto_6in4_update $urlget $urlget_opts --user="$username" --password="$password" "$url" 2>&1 | \
                                        sed -e 's,^Killed$,timeout,' -e "s,^,update $try/$max: ," | \
                                        logger -t "$link";
                                then
@@ -135,6 +124,7 @@ proto_6in4_init_config() {
        proto_config_add_string "ip6addr"
        proto_config_add_string "ip6prefix"
        proto_config_add_string "peeraddr"
+       proto_config_add_string "tunlink"
        proto_config_add_string "tunnelid"
        proto_config_add_string "username"
        proto_config_add_string "password"