Merge pull request #250 from openwrt-es/luci-next2
[project/luci.git] / applications / luci-ddns / root / usr / lib / ddns / dynamic_dns_lucihelper.sh
1 #!/bin/sh
2 # /usr/lib/ddns/luci_dns_helper.sh
3 #
4 # Written in August 2014
5 # by Christian Schoenebeck <christian dot schoenebeck at gmail dot com>
6 # This script is used by luci-app-ddns
7 # - getting registered IP
8 # - check if possible to get local IP
9 # - verifing given DNS- or Proxy-Server
10 #
11 # variables in small chars are read from /etc/config/ddns as parameter given here
12 # variables in big chars are defined inside these scripts as gloval vars
13 # variables in big chars beginning with "__" are local defined inside functions only
14 # set -vx       #script debugger
15
16 [ $# -lt 2 ] && exit 1
17
18 . /usr/lib/ddns/dynamic_dns_functions.sh        # global vars are also defined here
19
20 # set -vx       #script debugger
21
22 # preset some variables, wrong or not set in dynamic_dns_functions.sh
23 SECTION_ID="lucihelper"
24 LOGFILE="$LOGDIR/$SECTION_ID.log"
25 VERBOSE_MODE=0          # no console logging
26 # global variables normally set by reading DDNS UCI configuration
27 use_syslog=0            # no syslog
28 use_logfile=0           # by default no logfile, can be changed here
29
30 case "$1" in
31         get_registered_ip)
32                 local IP
33                 domain=$2                       # Hostname/Domain
34                 use_ipv6=${3:-"0"}              # Use IPv6 - default IPv4
35                 force_ipversion=${4:-"0"}       # Force IP Version - default 0 - No
36                 force_dnstcp=${5:-"0"}          # Force TCP on DNS - default 0 - No
37                 dns_server=${6:-""}             # DNS server - default No DNS
38                 write_log 7 "-----> get_registered_ip IP"
39                 get_registered_ip IP
40                 [ $? -ne 0 ] && IP=""
41                 echo -n "$IP"                   # suppress LF
42                 ;;
43         verify_dns)
44                 # $2 : dns-server to verify     # no need for force_dnstcp because
45                                                 # verify with nc (netcat) uses tcp anyway
46                 use_ipv6=${3:-"0"}              # Use IPv6 - default IPv4
47                 force_ipversion=${4:-"0"}       # Force IP Version - default 0 - No
48                 write_log 7 "-----> verify_dns '$2'"
49                 verify_dns "$2"
50                 ;;
51         verify_proxy)
52                 # $2 : proxy string to verify
53                 use_ipv6=${3:-"0"}              # Use IPv6 - default IPv4
54                 force_ipversion=${4:-"0"}       # Force IP Version - default 0 - No
55                 write_log 7 "-----> verify_proxy '$2'"
56                 verify_proxy "$2"
57                 ;;
58         get_local_ip)
59                 local IP
60                 use_ipv6="$2"                   # Use IPv6
61                 ip_source="$3"                  # IP source
62                 ip_network="$4"                 # set if source = "network" otherwise "-"
63                 ip_url="$5"                     # set if source = "web" otherwise "-"
64                 ip_interface="$6"               # set if source = "interface" itherwiase "-"
65                 ip_script="$7"                  # set if source = "script" otherwise "-"
66                 proxy="$8"                      # proxy if set
67                 force_ipversion="0"             # not needed but must be set
68                 use_https="0"                   # not needed but must be set
69                 [ -n "$proxy" -a "$ip_source" = "web" ] && {
70                         # proxy defined, used for ip_source=web
71                         export HTTP_PROXY="http://$proxy"
72                         export HTTPS_PROXY="http://$proxy"
73                         export http_proxy="http://$proxy"
74                         export https_proxy="http://$proxy"
75                 }
76                 # don't need IP only the return code
77                 [ "$ip_source" = "web" -o  "$ip_source" = "script" ] && {
78                         # we wait only 3 seconds for an
79                         # answer from "web" or "script"
80                         write_log 7 "-----> timeout 3 -- get_local_ip IP"
81                         timeout 3 -- get_local_ip IP
82                 } || {
83                         write_log 7 "-----> get_local_ip IP"
84                         get_local_ip IP
85                 }
86                 ;;
87         *)
88                 return 255
89                 ;;
90 esac