mirror of
https://github.com/novatiq/packages.git
synced 2026-04-30 15:38:40 +01:00
[for-15.05] ddns-scripts: backport of 2.7.6-10
Backport of current version 2.7.6-10 - more services - more functionality - be prepared for next versions compiled ipk-packages available at https://github.com/chris5560/OpenWrt-Backports/tree/master/for-CC15.05.01/ddns-scripts_2.7.6-10 Signed-off-by: Christian Schoenebeck <christian.schoenebeck@gmail.com>
This commit is contained in:
@@ -1,77 +1,129 @@
|
||||
#!/bin/sh
|
||||
# /usr/lib/ddns/luci_dns_helper.sh
|
||||
# /usr/lib/ddns/dynamic_dns_lucihelper.sh
|
||||
#
|
||||
#.Distributed under the terms of the GNU General Public License (GPL) version 2.0
|
||||
#
|
||||
# Written in August 2014 by
|
||||
#.Christian Schoenebeck <christian dot schoenebeck at gmail dot com>
|
||||
#.2014-2017 Christian Schoenebeck <christian dot schoenebeck at gmail dot com>
|
||||
# This script is used by luci-app-ddns
|
||||
# - getting registered IP
|
||||
# - check if possible to get local IP
|
||||
# - verifing given DNS- or Proxy-Server
|
||||
#
|
||||
# variables in small chars are read from /etc/config/ddns as parameter given here
|
||||
# variables in big chars are defined inside these scripts as gloval vars
|
||||
# variables in big chars beginning with "__" are local defined inside functions only
|
||||
# set -vx #script debugger
|
||||
|
||||
[ $# -lt 2 ] && exit 1
|
||||
|
||||
. /usr/lib/ddns/dynamic_dns_functions.sh # global vars are also defined here
|
||||
|
||||
# preset some variables, wrong or not set in dynamic_dns_functions.sh
|
||||
usage() {
|
||||
cat << EOF
|
||||
|
||||
Usage:
|
||||
$MYPROG [options] -- command
|
||||
|
||||
Commands:
|
||||
get_local_ip using given INTERFACE or NETWORK or SCRIPT or URL
|
||||
get_registered_ip for given FQDN
|
||||
verify_dns given DNS-SERVER
|
||||
verify_proxy given PROXY
|
||||
start start given SECTION
|
||||
reload force running ddns processes to reload changed configuration
|
||||
restart restart all ddns processes
|
||||
|
||||
Parameters:
|
||||
-6 => use_ipv6=1 (default 0)
|
||||
-d DNS-SERVER => dns_server=SERVER[:PORT]
|
||||
-f => force_ipversion=1 (default 0)
|
||||
-g => is_glue=1 (default 0)
|
||||
-i INTERFACE => ip_interface=INTERFACE; ip_source="interface"
|
||||
-l FQDN => lookup_host=FQDN
|
||||
-n NETWORK => ip_network=NETWORK; ip_source="network"
|
||||
-p PROXY => proxy=[USER:PASS@]PROXY:PORT
|
||||
-s SCRIPT => ip_script=SCRIPT; ip_source="script"
|
||||
-t => force_dnstcp=1 (default 0)
|
||||
-u URL => ip_url=URL; ip_source="web"
|
||||
-S SECTION SECTION to start
|
||||
|
||||
-h => show this help and exit
|
||||
-L => use_logfile=1 (default 0)
|
||||
-v LEVEL => VERBOSE=LEVEL (default 0)
|
||||
-V => show version and exit
|
||||
|
||||
EOF
|
||||
}
|
||||
|
||||
usage_err() {
|
||||
printf %s\\n "$MYPROG: $@" >&2
|
||||
usage >&2
|
||||
exit 255
|
||||
}
|
||||
|
||||
# preset some variables, wrong or not set in ddns-functions.sh
|
||||
SECTION_ID="lucihelper"
|
||||
LOGFILE="$LOGDIR/$SECTION_ID.log"
|
||||
DATFILE="$RUNDIR/$SECTION_ID.$$.dat" # save stdout data of WGet and other extern programs called
|
||||
ERRFILE="$RUNDIR/$SECTION_ID.$$.err" # save stderr output of WGet and other extern programs called
|
||||
VERBOSE_MODE=0 # no console logging
|
||||
LOGFILE="$ddns_logdir/$SECTION_ID.log"
|
||||
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
|
||||
DDNSPRG="/usr/lib/ddns/dynamic_dns_updater.sh"
|
||||
VERBOSE=0 # no console logging
|
||||
# global variables normally set by reading DDNS UCI configuration
|
||||
use_syslog=0 # no syslog
|
||||
use_logfile=0 # by default no logfile, can be changed here
|
||||
use_logfile=0 # no logfile
|
||||
|
||||
use_ipv6=0 # Use IPv6 - default IPv4
|
||||
force_ipversion=0 # Force IP Version - default 0 - No
|
||||
force_dnstcp=0 # Force TCP on DNS - default 0 - No
|
||||
is_glue=0 # Is glue record - default 0 - No
|
||||
use_https=0 # not needed but must be set
|
||||
|
||||
while getopts ":6d:fghi:l:n:p:s:S:tu:Lv:V" OPT; do
|
||||
case "$OPT" in
|
||||
6) use_ipv6=1;;
|
||||
d) dns_server="$OPTARG";;
|
||||
f) force_ipversion=1;;
|
||||
g) is_glue=1;;
|
||||
i) ip_interface="$OPTARG"; ip_source="interface";;
|
||||
l) lookup_host="$OPTARG";;
|
||||
n) ip_network="$OPTARG"; ip_source="network";;
|
||||
p) proxy="$OPTARG";;
|
||||
s) ip_script="$OPTARG"; ip_source="script";;
|
||||
t) force_dnstcp=1;;
|
||||
u) ip_url="$OPTARG"; ip_source="web";;
|
||||
h) usage; exit 255;;
|
||||
L) use_logfile=1;;
|
||||
v) VERBOSE=$OPTARG;;
|
||||
S) SECTION=$OPTARG;;
|
||||
V) printf %s\\n "ddns-scripts $VERSION"; exit 255;;
|
||||
:) usage_err "option -$OPTARG missing argument";;
|
||||
\?) usage_err "invalid option -$OPTARG";;
|
||||
*) usage_err "unhandled option -$OPT $OPTARG";;
|
||||
esac
|
||||
done
|
||||
shift $((OPTIND - 1 )) # OPTIND is 1 based
|
||||
|
||||
[ $# -eq 0 ] && usage_err "missing command"
|
||||
|
||||
__RET=0
|
||||
case "$1" in
|
||||
get_registered_ip)
|
||||
local IP
|
||||
domain=$2 # Hostname/Domain
|
||||
use_ipv6=${3:-"0"} # Use IPv6 - default IPv4
|
||||
force_ipversion=${4:-"0"} # Force IP Version - default 0 - No
|
||||
force_dnstcp=${5:-"0"} # Force TCP on DNS - default 0 - No
|
||||
dns_server=${6:-""} # DNS server - default No DNS
|
||||
[ -z "$lookup_host" ] && usage_err "command 'get_registered_ip': 'lookup_host' not set"
|
||||
write_log 7 "-----> get_registered_ip IP"
|
||||
IP=""
|
||||
get_registered_ip IP
|
||||
__RET=$?
|
||||
[ $__RET -ne 0 ] && IP=""
|
||||
echo -n "$IP" # suppress LF
|
||||
printf "%s" "$IP"
|
||||
;;
|
||||
verify_dns)
|
||||
# $2 : dns-server to verify # no need for force_dnstcp because
|
||||
# verify with nc (netcat) uses tcp anyway
|
||||
use_ipv6=${3:-"0"} # Use IPv6 - default IPv4
|
||||
force_ipversion=${4:-"0"} # Force IP Version - default 0 - No
|
||||
write_log 7 "-----> verify_dns '$2'"
|
||||
verify_dns "$2"
|
||||
[ -z "$dns_server" ] && usage_err "command 'verify_dns': 'dns_server' not set"
|
||||
write_log 7 "-----> verify_dns '$dns_server'"
|
||||
verify_dns "$dns_server"
|
||||
__RET=$?
|
||||
;;
|
||||
verify_proxy)
|
||||
# $2 : proxy string to verify
|
||||
use_ipv6=${3:-"0"} # Use IPv6 - default IPv4
|
||||
force_ipversion=${4:-"0"} # Force IP Version - default 0 - No
|
||||
write_log 7 "-----> verify_proxy '$2'"
|
||||
verify_proxy "$2"
|
||||
[ -z "$proxy" ] && usage_err "command 'verify_proxy': 'proxy' not set"
|
||||
write_log 7 "-----> verify_proxy '$proxy'"
|
||||
verify_proxy "$proxy"
|
||||
__RET=$?
|
||||
;;
|
||||
get_local_ip)
|
||||
local IP
|
||||
use_ipv6="$2" # Use IPv6
|
||||
ip_source="$3" # IP source
|
||||
ip_network="$4" # set if source = "network" otherwise "-"
|
||||
ip_url="$5" # set if source = "web" otherwise "-"
|
||||
ip_interface="$6" # set if source = "interface" itherwiase "-"
|
||||
ip_script="$7" # set if source = "script" otherwise "-"
|
||||
proxy="$8" # proxy if set
|
||||
force_ipversion="0" # not needed but must be set
|
||||
use_https="0" # not needed but must be set
|
||||
[ -z "$ip_source" ] && usage_err "command 'get_local_ip': 'ip_source' not set"
|
||||
[ -n "$proxy" -a "$ip_source" = "web" ] && {
|
||||
# proxy defined, used for ip_source=web
|
||||
export HTTP_PROXY="http://$proxy"
|
||||
@@ -80,17 +132,34 @@ case "$1" in
|
||||
export https_proxy="http://$proxy"
|
||||
}
|
||||
# don't need IP only the return code
|
||||
[ "$ip_source" = "web" -o "$ip_source" = "script" ] && {
|
||||
IP=""
|
||||
if [ "$ip_source" = "web" -o "$ip_source" = "script" ]; then
|
||||
# we wait only 3 seconds for an
|
||||
# answer from "web" or "script"
|
||||
write_log 7 "-----> timeout 3 -- get_local_ip IP"
|
||||
timeout 3 -- get_local_ip IP
|
||||
} || {
|
||||
else
|
||||
write_log 7 "-----> get_local_ip IP"
|
||||
get_local_ip IP
|
||||
}
|
||||
fi
|
||||
__RET=$?
|
||||
;;
|
||||
start)
|
||||
[ -z "$SECTION" ] && usage_err "command 'start': 'SECTION' not set"
|
||||
if [ $VERBOSE -eq 0 ]; then # start in background
|
||||
$DDNSPRG -v 0 -S $SECTION -- start &
|
||||
else
|
||||
$DDNSPRG -v $VERBOSE -S $SECTION -- start
|
||||
fi
|
||||
;;
|
||||
reload)
|
||||
$DDNSPRG -- reload
|
||||
;;
|
||||
restart)
|
||||
$DDNSPRG -- stop
|
||||
sleep 1
|
||||
$DDNSPRG -- start
|
||||
;;
|
||||
*)
|
||||
__RET=255
|
||||
;;
|
||||
@@ -99,4 +168,4 @@ esac
|
||||
# remove out and err file
|
||||
[ -f $DATFILE ] && rm -f $DATFILE
|
||||
[ -f $ERRFILE ] && rm -f $ERRFILE
|
||||
return $__RET
|
||||
return $__RET
|
||||
|
||||
Reference in New Issue
Block a user