source: packages/net/ddns-scripts/files/usr/lib/ddns/dynamic_dns_functions.sh @ 21512

Last change on this file since 21512 was 21512, checked in by jow, 7 years ago

[packages] ddns-scripts: fix overriding ip_network (#7361)

File size: 2.7 KB
Line 
1# /usr/lib/dynamic_dns/dynamic_dns_functions.sh
2#
3# Written by Eric Paul Bishop, Janary 2008
4# Distributed under the terms of the GNU General Public License (GPL) version 2.0
5#
6# This script is (loosely) based on the one posted by exobyte in the forums here:
7# http://forum.openwrt.org/viewtopic.php?id=14040
8
9
10
11. /etc/functions.sh
12include /lib/network
13
14
15#loads all options for a given package and section
16#also, sets all_option_variables to a list of the variable names
17load_all_config_options()
18{
19        pkg_name="$1"
20        section_id="$2"
21
22        ALL_OPTION_VARIABLES=""
23        # this callback loads all the variables
24        # in the section_id section when we do
25        # config_load. We need to redefine
26        # the option_cb for different sections
27        # so that the active one isn't still active
28        # after we're done with it.  For reference
29        # the $1 variable is the name of the option
30        # and $2 is the name of the section
31        config_cb()
32        {
33                if [ ."$2" = ."$section_id" ]; then
34                        option_cb()
35                        {
36                                ALL_OPTION_VARIABLES="$ALL_OPTION_VARIABLES $1"
37                        }
38                else
39                        option_cb() { return 0; }
40                fi
41        }
42
43
44        config_load "$pkg_name"
45        for var in $ALL_OPTION_VARIABLES
46        do
47                config_get "$var" "$section_id" "$var"
48        done
49}
50
51
52get_current_ip()
53{
54
55        #if ip source is not defined, assume we want to get ip from wan
56        if [ "$ip_source" != "interface" ] && [ "$ip_source" != "web" ] && [ "$ip_source" != "script" ]
57        then
58                ip_source="network"
59        fi
60
61        if [ "$ip_source" = "network" ]
62        then
63                if [ -z "$ip_network" ]
64                then
65                        ip_network="wan"
66                fi
67                scan_interfaces
68                config_load /var/state/network
69                config_get ip_interface $ip_network ifname
70        fi
71
72        current_ip='';
73        if [ "$ip_source" = "network" ] || [ "$ip_source" = "interface" ]
74        then
75                current_ip=$(ifconfig $ip_interface | grep -o 'inet addr:[0-9.]*' | grep -o "$ip_regex")
76        elif [ "$ip_source" = "script" ]
77        then
78                # get ip from script
79                current_ip=$($ip_script)
80        else
81                # get ip from web
82                # we check each url in order in ip_url variable, and if no ips are found we use dyndns ip checker
83                # ip is set to FIRST expression in page that matches the ip_regex regular expression
84                for addr in $ip_url
85                do
86                        if [ -z "$current_ip" ]
87                        then
88                                current_ip=$(echo $( wget -O - $addr 2>/dev/null) | grep -o "$ip_regex")
89                        fi
90                done
91
92                #here we hard-code the dyndns checkip url in case no url was specified
93                if [ -z "$current_ip" ]
94                then
95                        current_ip=$(echo $( wget -O - http://checkip.dyndns.org 2>/dev/null) | grep -o "$ip_regex")
96                fi
97        fi
98
99        echo "$current_ip"
100}
101
102
103verbose_echo()
104{
105        if [ "$verbose_mode" = 1 ]
106        then
107                echo $1
108        fi
109}
110
111start_daemon_for_all_ddns_sections()
112{
113        SECTIONS=""
114        config_cb() 
115        {
116                SECTIONS="$SECTIONS $2"
117        }
118        config_load "ddns"
119
120        for section in $SECTIONS
121        do
122                /usr/lib/ddns/dynamic_dns_updater.sh $section 0 > /dev/null 2>&1 &
123        done
124}
Note: See TracBrowser for help on using the repository browser.