From 8cb6b1dc4ddc9234bc3313ddfe8d171a597df9c2 Mon Sep 17 00:00:00 2001 From: Christian Schoenebeck Date: Sat, 13 Jan 2018 11:58:17 +0100 Subject: [PATCH] ddns-scripts: multiple fixes Write *.ip file with current registered IP, whenever "get_registered_IP" is called (used by next luci-app-ddns version) Changed detection of cURL proxy support #3876 Reread data from ubus if "get_local_ip" from "ip_network" #5004 #3338 Fix godaddy_com_v1 #5285 Implement "param_opt" for "cloudflare_com_v4" #5097 Inside logfile "*password*" printed in stead of real password #5281 and others Add ipv4 service "dnsever.com" #5178 Add ipv4 service "myip.co.ua" #5199 Signed-off-by: Christian Schoenebeck --- net/ddns-scripts/Makefile | 4 ++-- .../files/dynamic_dns_functions.sh | 14 +++++++++---- .../files/dynamic_dns_lucihelper.sh | 3 ++- net/ddns-scripts/files/dynamic_dns_updater.sh | 3 ++- net/ddns-scripts/files/services | 4 ++++ net/ddns-scripts/files/services_ipv6 | 2 +- .../files/update_cloudflare_com_v4.sh | 21 ++++++++++++------- .../files/update_godaddy_com_v1.sh | 3 ++- 8 files changed, 37 insertions(+), 17 deletions(-) diff --git a/net/ddns-scripts/Makefile b/net/ddns-scripts/Makefile index fbc716e8f..ce695b647 100755 --- a/net/ddns-scripts/Makefile +++ b/net/ddns-scripts/Makefile @@ -1,5 +1,5 @@ # -# Copyright (C) 2008-2017 OpenWrt.org +# Copyright (C) 2008-2018 OpenWrt.org # # This is free software, licensed under the GNU General Public License v2. # @@ -12,7 +12,7 @@ PKG_NAME:=ddns-scripts PKG_VERSION:=2.7.7 # Release == build # increase on changes of services files or tld_names.dat -PKG_RELEASE:=1 +PKG_RELEASE:=2 PKG_LICENSE:=GPL-2.0 PKG_MAINTAINER:=Christian Schoenebeck diff --git a/net/ddns-scripts/files/dynamic_dns_functions.sh b/net/ddns-scripts/files/dynamic_dns_functions.sh index c8b3962aa..a64167f54 100755 --- a/net/ddns-scripts/files/dynamic_dns_functions.sh +++ b/net/ddns-scripts/files/dynamic_dns_functions.sh @@ -6,7 +6,7 @@ # (Loosely) based on the script on the one posted by exobyte in the forums here: # http://forum.openwrt.org/viewtopic.php?id=14040 # extended and partial rewritten -#.2014-2017 Christian Schoenebeck +#.2014-2018 Christian Schoenebeck # # function timeout # copied from http://www.ict.griffith.edu.au/anthony/software/timeout.sh @@ -21,7 +21,7 @@ . /lib/functions/network.sh # GLOBAL VARIABLES # -VERSION="2.7.6-13" +VERSION="2.7.7-2" SECTION_ID="" # hold config's section name VERBOSE=0 # default mode is log to console, but easily changed with parameter MYPROG=$(basename $0) # my program call name @@ -31,6 +31,7 @@ PIDFILE="" # pid file UPDFILE="" # store UPTIME of last update DATFILE="" # save stdout data of WGet and other external programs called ERRFILE="" # save stderr output of WGet and other external programs called +IPFILE="" # store registered IP for read by LuCI status TLDFILE=/usr/share/public_suffix_list.dat.gz # TLD file used by split_FQDN CHECK_SECONDS=0 # calculated seconds out of given @@ -81,7 +82,7 @@ CURL=$(which curl) # CURL_SSL not empty then SSL support available CURL_SSL=$($(which curl) -V 2>/dev/null | grep "Protocols:" | grep -F "https") # CURL_PROXY not empty then Proxy support available -CURL_PROXY=$(find /lib /usr/lib -name libcurl.so* -exec grep -i "all_proxy" {} 2>/dev/null \;) +CURL_PROXY=$(find /lib /usr/lib -name libcurl.so* -exec strings {} 2>/dev/null \; | grep -im1 "all_proxy") UCLIENT_FETCH=$(which uclient-fetch) # UCLIENT_FETCH_SSL not empty then SSL support available @@ -261,7 +262,9 @@ write_log() { [ $VERBOSE -gt 0 -o $__EXIT -gt 0 ] && echo -e "$__MSG" # write to logfile if [ ${use_logfile:-1} -eq 1 -o $VERBOSE -gt 1 ]; then - echo -e "$__MSG" >> $LOGFILE + printf "%s\n" "$__MSG" | \ + sed -e "s/$password/*password*/g; \ + s/$URL_PASS/*URL_PASS*/g" >> $LOGFILE # VERBOSE > 1 then NO loop so NO truncate log to $ddns_loglines lines [ $VERBOSE -gt 1 ] || sed -i -e :a -e '$q;N;'$ddns_loglines',$D;ba' $LOGFILE fi @@ -894,6 +897,7 @@ get_local_ip () { while : ; do if [ -n "$ip_network" ]; then # set correct program + network_flush_cache # force re-read data from ubus [ $use_ipv6 -eq 0 ] && __RUNPROG="network_get_ipaddr" \ || __RUNPROG="network_get_ipaddr6" eval "$__RUNPROG __DATA $ip_network" || \ @@ -1140,12 +1144,14 @@ get_registered_ip() { fi [ -n "$__DATA" ] && { write_log 7 "Registered IP '$__DATA' detected" + echo "$__DATA" > $IPFILE eval "$1=\"$__DATA\"" # valid data found return 0 # leave here } write_log 4 "NO valid IP found" __ERR=127 fi + echo "" > $IPFILE [ -n "$LUCI_HELPER" ] && return $__ERR # no retry if called by LuCI helper script [ -n "$2" ] && return $__ERR # $2 is given -> no retry diff --git a/net/ddns-scripts/files/dynamic_dns_lucihelper.sh b/net/ddns-scripts/files/dynamic_dns_lucihelper.sh index 4948e9815..ab3eb78e7 100755 --- a/net/ddns-scripts/files/dynamic_dns_lucihelper.sh +++ b/net/ddns-scripts/files/dynamic_dns_lucihelper.sh @@ -2,7 +2,7 @@ # /usr/lib/ddns/dynamic_dns_lucihelper.sh # #.Distributed under the terms of the GNU General Public License (GPL) version 2.0 -#.2014-2017 Christian Schoenebeck +#.2014-2018 Christian Schoenebeck # This script is used by luci-app-ddns # # variables in small chars are read from /etc/config/ddns as parameter given here @@ -104,6 +104,7 @@ case "$1" in get_registered_ip) [ -z "$lookup_host" ] && usage_err "command 'get_registered_ip': 'lookup_host' not set" write_log 7 "-----> get_registered_ip IP" + [ -z "$SECTION" ] || IPFILE="$ddns_rundir/$SECTION.ip" IP="" get_registered_ip IP __RET=$? diff --git a/net/ddns-scripts/files/dynamic_dns_updater.sh b/net/ddns-scripts/files/dynamic_dns_updater.sh index 46e584290..b2baae231 100755 --- a/net/ddns-scripts/files/dynamic_dns_updater.sh +++ b/net/ddns-scripts/files/dynamic_dns_updater.sh @@ -6,7 +6,7 @@ # (Loosely) based on the script on the one posted by exobyte in the forums here: # http://forum.openwrt.org/viewtopic.php?id=14040 # extended and partial rewritten -#.2014-2017 Christian Schoenebeck +#.2014-2018 Christian Schoenebeck # # variables in small chars are read from /etc/config/ddns # variables in big chars are defined inside these scripts as global vars @@ -101,6 +101,7 @@ PIDFILE="$ddns_rundir/$SECTION_ID.pid" # Process ID file UPDFILE="$ddns_rundir/$SECTION_ID.update" # last update successful send (system uptime) DATFILE="$ddns_rundir/$SECTION_ID.dat" # save stdout data of WGet and other extern programs called ERRFILE="$ddns_rundir/$SECTION_ID.err" # save stderr output of WGet and other extern programs called +IPFILE="$ddns_rundir/$SECTION_ID.ip" # LOGFILE="$ddns_logdir/$SECTION_ID.log" # log file # VERBOSE > 1 delete logfile if exist to create an empty one diff --git a/net/ddns-scripts/files/services b/net/ddns-scripts/files/services index d84dfc5ab..a5e43b3a4 100644 --- a/net/ddns-scripts/files/services +++ b/net/ddns-scripts/files/services @@ -67,6 +67,8 @@ "dnsdynamic.org" "http://[USERNAME]:[PASSWORD]@www.dnsdynamic.org/api/?hostname=[DOMAIN]&myip=[IP]" "good|nochg" +"dnsever.com" "http://[USERNAME]:[PASSWORD]@dyna.dnsever.com/update.php?host[[DOMAIN]]" + "dnsexit.com" "http://update.dnsexit.com/RemoteUpdate.sv?login=[USERNAME]&password=[PASSWORD]&host=[DOMAIN]&myip=[IP]" "dnshome.de" "http://[USERNAME]:[PASSWORD]@www.dnshome.de/dyndns.php?hostname=[DOMAIN]&ip=[IP]" @@ -122,6 +124,8 @@ "mydns.jp" "http://www.mydns.jp/directip.html?MID=[USERNAME]&PWD=[PASSWORD]&IPV4ADDR=[IP]" +"myip.co.ua" "http://[USERNAME]:[PASSWORD]@myip.co.ua/update?hostname=[DOMAIN]&myip=[IP]" "good" + "myonlineportal.net" "http://[USERNAME]:[PASSWORD]@myonlineportal.net/updateddns?hostname=[DOMAIN]&ip=[IP]" "good|nochg" "mythic-beasts.com" "http://dnsapi4.mythic-beasts.com/?domain=[USERNAME]&password=[PASSWORD]&command=REPLACE%20[DOMAIN]%2060%20A%20DYNAMIC_IP&origin=." diff --git a/net/ddns-scripts/files/services_ipv6 b/net/ddns-scripts/files/services_ipv6 index 1a2ffee5f..409aea376 100644 --- a/net/ddns-scripts/files/services_ipv6 +++ b/net/ddns-scripts/files/services_ipv6 @@ -66,7 +66,7 @@ "dyn.com" "http://[USERNAME]:[PASSWORD]@members.dyndns.org/nic/update?hostname=[DOMAIN]&myip=[IP]" "good|nochg" "dyndns.org" "http://[USERNAME]:[PASSWORD]@members.dyndns.org/nic/update?hostname=[DOMAIN]&myip=[IP]" "good|nochg" -"dynu.com" "http://api.dynu.com/nic/update?hostname=[DOMAIN]&myipv6=[IP]&username=[USERNAME]&password=[PASSWORD]" +"dynu.com" "http://api.dynu.com/nic/update?hostname=[DOMAIN]&myipv6=[IP]&username=[USERNAME]&password=[PASSWORD]" "dynv6.com" "http://dynv6.com/api/update?hostname=[DOMAIN]&token=[PASSWORD]&ipv6=[IP]" "updated|unchanged" diff --git a/net/ddns-scripts/files/update_cloudflare_com_v4.sh b/net/ddns-scripts/files/update_cloudflare_com_v4.sh index aef3b7327..0c77e8b2b 100755 --- a/net/ddns-scripts/files/update_cloudflare_com_v4.sh +++ b/net/ddns-scripts/files/update_cloudflare_com_v4.sh @@ -5,15 +5,16 @@ # script for sending updates to cloudflare.com #.based on Ben Kulbertis cloudflare-update-record.sh found at http://gist.github.com/benkulbertis #.and on George Johnson's cf-ddns.sh found at https://github.com/gstuartj/cf-ddns.sh -#.2016-2017 Christian Schoenebeck +#.2016-2018 Christian Schoenebeck # CloudFlare API documentation at https://api.cloudflare.com/ # # This script is parsed by dynamic_dns_functions.sh inside send_update() function # # using following options from /etc/config/ddns -# option username - your cloudflare e-mail -# option password - cloudflare api key, you can get it from cloudflare.com/my-account/ -# option domain - "hostname@yourdomain.TLD" # syntax changed to remove split_FQDN() function and tld_names.dat.gz +# option username - your cloudflare e-mail +# option password - cloudflare api key, you can get it from cloudflare.com/my-account/ +# option domain - "hostname@yourdomain.TLD" # syntax changed to remove split_FQDN() function and tld_names.dat.gz +# option param_opt - Whether the record is receiving the performance and security benefits of Cloudflare (not empty => false) # # variable __IP already defined with the ip-address to use for update # @@ -25,7 +26,7 @@ [ $use_https -eq 0 ] && use_https=1 # force HTTPS # used variables -local __HOST __DOMAIN __TYPE __URLBASE __PRGBASE __RUNPROG __DATA __IPV6 __ZONEID __RECID +local __HOST __DOMAIN __TYPE __URLBASE __PRGBASE __RUNPROG __DATA __IPV6 __ZONEID __RECID __PROXIED local __URLBASE="https://api.cloudflare.com/client/v4" # split __HOST __DOMAIN from $domain @@ -174,10 +175,16 @@ __DATA=$(grep -o '"content":"[^"]*' $DATFILE | grep -o '[^"]*$' | head -1) } # update is needed -# let's build data to send, +# let's build data to send +# set proxied parameter (default "true") +[ -z "$param_opt" ] && __PROXIED="true" || { + __PROXIED="false" + write_log 7 "Cloudflare 'proxied' disabled" +} + # use file to work around " needed for json cat > $DATFILE << EOF -{"id":"$__ZONEID","type":"$__TYPE","name":"$__HOST","content":"$__IP"} +{"id":"$__ZONEID","type":"$__TYPE","name":"$__HOST","content":"$__IP","proxied":$__PROXIED} EOF # let's complete transfer command diff --git a/net/ddns-scripts/files/update_godaddy_com_v1.sh b/net/ddns-scripts/files/update_godaddy_com_v1.sh index 9633b4e24..9845d20a0 100755 --- a/net/ddns-scripts/files/update_godaddy_com_v1.sh +++ b/net/ddns-scripts/files/update_godaddy_com_v1.sh @@ -4,7 +4,7 @@ # # script for sending updates to godaddy.com #.based on GoDaddy.sh v1.0 by Nazar78 @ TeaNazaR.com -#.2017 Christian Schoenebeck +#.2017-2018 Christian Schoenebeck # GoDaddy Documentation at https://developer.godaddy.com/doc # # This script is parsed by dynamic_dns_functions.sh inside send_update() function @@ -85,6 +85,7 @@ godaddy_transfer() { write_log 7 "$(cat $DATFILE)" return 1 } + return 0 } # Build base command to use