6in4: detect curl and busybox wget
authorSteven Barth <cyrus@openwrt.org>
Sun, 9 Nov 2014 13:46:29 +0000 (13:46 +0000)
committerSteven Barth <cyrus@openwrt.org>
Sun, 9 Nov 2014 13:46:29 +0000 (13:46 +0000)
b52053b 6in4: https support for he.net tunnel api
introduced HTTPS support using wget.
The busybox version of wget, however, doesn't support the -V option,
thus poluting logfiles with a full invalid-parameter-output.
Redirect stderr to fix that.
As libcurl and curl support selecting the SSL library of your choice,
also add support for curl which is more commonly used on OpenWrt than
"real" wget which needs libopenssl.
Also make sure to respect SSL_CERT_DIR and increase timeouts.

Signed-off-by: Daniel Golle <daniel@makrotopia.org>
SVN-Revision: 43228

package/network/ipv6/6in4/files/6in4.sh

index 7ffd40dc06150888864ce7170daac6ee786ee2ab..f639a5de8e035a7de45ebe4bf2a157ef10115a96 100755 (executable)
@@ -67,23 +67,42 @@ proto_6in4_setup() {
                [ -n "$updatekey" ] && password="$updatekey"
 
                local http="http"
                [ -n "$updatekey" ] && password="$updatekey"
 
                local http="http"
-               local wget_opts="-qO/dev/null"
-               if wget --version | grep -qF "+https"; then
+               local urlget="wget"
+               local urlget_opts="-qO/dev/stdout"
+               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/dev/stdout --ca-directory=$ca_path"
                        http="https"
                        http="https"
-                       [ -z "$(find ${SSL_CERT_DIR-/etc/ssl/certs} -name "*.0" 2>/dev/null)" ] && {
-                               wget_opts="$wget_opts --no-check-certificate"
-                       }
                fi
                fi
+               [ "$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
+               }
 
                local url="$http://ipv4.tunnelbroker.net/nic/update?username=$username&password=$password&hostname=$tunnelid"
                local try=0
                local max=3
 
                while [ $((++try)) -le $max ]; do
 
                local url="$http://ipv4.tunnelbroker.net/nic/update?username=$username&password=$password&hostname=$tunnelid"
                local try=0
                local max=3
 
                while [ $((++try)) -le $max ]; do
-                       ( exec wget $wget_opts "$url" 2>/dev/null ) &
+                       ( exec $urlget $urlget_opts "$url" | logger -t "$link" ) &
                        local pid=$!
                        local pid=$!
-                       ( sleep 5; kill $pid 2>/dev/null ) &
+                       ( sleep 20; kill $pid 2>/dev/null ) &
                        wait $pid && break
                        wait $pid && break
+                       sleep 20;
                done
        }
 }
                done
        }
 }
@@ -93,7 +112,7 @@ proto_6in4_teardown() {
 }
 
 proto_6in4_init_config() {
 }
 
 proto_6in4_init_config() {
-       no_device=1             
+       no_device=1
        available=1
 
        proto_config_add_string "ipaddr"
        available=1
 
        proto_config_add_string "ipaddr"