Browse Source

Merge branch 'stretch' of https://github.com/bashrc/freedombone

Bob Mottram 6 years ago
parent
commit
ac0b5304e4
4 changed files with 288 additions and 163 deletions
  1. 10
    158
      src/freedombone-config
  2. 7
    5
      src/freedombone-controlpanel
  3. 214
    0
      src/freedombone-ddns
  4. 57
    0
      src/freedombone-utils-dns

+ 10
- 158
src/freedombone-config View File

@@ -38,7 +38,7 @@ export TEXTDOMAIN=${PROJECT_NAME}-config
38 38
 export TEXTDOMAINDIR="/usr/share/locale"
39 39
 
40 40
 # Web site
41
-FREEDOMBONE_WEBSITE="https://freedombone.net or http://4fvfozz6g3zmvf76.onion"
41
+FREEDOMBONE_WEBSITE="https://freedombone.net or http://yjxlc3imv7obva4grjae6u3qw527koaytrgjgdp364hmthrst3jodiid.onion"
42 42
 
43 43
 # Minimum number of characters in a password
44 44
 MINIMUM_PASSWORD_LENGTH=$(grep 'MINIMUM_PASSWORD_LENGTH=' "/usr/share/${PROJECT_NAME}/utils/${PROJECT_NAME}-utils-passwords" | head -n 1 | awk -F '=' '{print $2}')
@@ -184,7 +184,7 @@ function choose_social_instance_domain_name {
184 184
     while [ ! $DEFAULT_DOMAIN_DETAILS_COMPLETE ]
185 185
     do
186 186
         data=$(mktemp 2>/dev/null)
187
-        if [[ $DDNS_PROVIDER == "default@freedns.afraid.org" ]]; then
187
+        if [[ "$DDNS_PROVIDER" == "default@freedns.afraid.org" ]]; then
188 188
             dialog --backtitle $"Freedombone Configuration" \
189 189
                    --title $"Instance domain" \
190 190
                    --form $"\\nEnter your instance domain name and its FreeDNS code:" 11 55 3 \
@@ -247,9 +247,9 @@ function choose_default_domain_name {
247 247
         while [ ! $DEFAULT_DOMAIN_DETAILS_COMPLETE ]
248 248
         do
249 249
             data=$(mktemp 2>/dev/null)
250
-            if [[ $DDNS_PROVIDER == "default@freedns.afraid.org" ]]; then
250
+            if [[ "$DDNS_PROVIDER" == "default@freedns.afraid.org" ]]; then
251 251
                 dialog --backtitle $"Freedombone Configuration" \
252
-                       --title $"Your main domain name" \
252
+                       --title $"Your main domain name on FreeDNS" \
253 253
                        --form $"\nWhich domain name should your email/XMPP/IRC/Mumble be associated with?" 13 55 5 \
254 254
                        $"Domain:" 1 1 "$(grep 'DEFAULT_DOMAIN_NAME' temp.cfg | awk -F '=' '{print $2}')" 1 24 33 40 \
255 255
                        $"Code:" 2 1 "$(grep 'DEFAULT_DOMAIN_CODE' temp.cfg | awk -F '=' '{print $2}')" 2 24 33 255 \
@@ -320,159 +320,6 @@ function choose_default_domain_name {
320 320
     save_configuration_values
321 321
 }
322 322
 
323
-function dynamic_dns_setup {
324
-    W=(1 freedns.afraid.org
325
-       2 dyn.com
326
-       3 zoneedit.com
327
-       4 no-ip.com
328
-       5 easydns.com
329
-       6 dnsomatic.com
330
-       7 dns.he.net
331
-       8 tunnelbroker.net
332
-       9 sitelutions.com
333
-       10 dnsexit.com
334
-       11 changeip.com
335
-       12 zerigo.com
336
-       13 dhis.org
337
-       14 nsupdate.info
338
-       15 loopia.com
339
-       16 namecheap.com
340
-       17 ovh.com
341
-       18 dtdns.com
342
-       19 giradns.com
343
-       20 duiadns.net
344
-       21 ddnss.de
345
-       22 dynv6.com
346
-       23 ipv4.dynv6.com
347
-       24 spdyn.de
348
-       25 freemyip.com
349
-       26 cloudxns.net)
350
-
351
-    # shellcheck disable=SC2068
352
-    selection=$(dialog --backtitle $"Freedombone Configuration" --title $"Dynamic DNS" --menu $"Choose Dynamic DNS provider, or ESC for none:" 24 60 32 "${W[@]}" 3>&2 2>&1 1>&3)
353
-
354
-    if [ ! "$selection" ]; then
355
-        if [ -f /etc/systemd/system/inadyn.service ]; then
356
-            systemctl stop inadyn
357
-            systemctl disable inadyn
358
-        fi
359
-        return
360
-    fi
361
-
362
-    case $selection in
363
-        1) DDNS_PROVIDER="default@freedns.afraid.org";;
364
-        2) DDNS_PROVIDER="default@www.dyn.com";;
365
-        3) DDNS_PROVIDER="default@www.zoneedit.com";;
366
-        4) DDNS_PROVIDER="default@www.no-ip.com";;
367
-        5) DDNS_PROVIDER="default@www.easydns.com";;
368
-        6) DDNS_PROVIDER="default@www.dnsomatic.com";;
369
-        7) DDNS_PROVIDER="default@dns.he.net";;
370
-        8) DDNS_PROVIDER="default@www.tunnelbroker.net";;
371
-        9) DDNS_PROVIDER="default@www.sitelutions.com";;
372
-        10) DDNS_PROVIDER="default@www.dnsexit.com";;
373
-        11) DDNS_PROVIDER="default@www.changeip.com";;
374
-        12) DDNS_PROVIDER="default@www.zerigo.com";;
375
-        13) DDNS_PROVIDER="default@www.dhis.org";;
376
-        14) DDNS_PROVIDER="default@nsupdate.info";;
377
-        15) DDNS_PROVIDER="default@www.loopia.com";;
378
-        16) DDNS_PROVIDER="default@www.namecheap.com";;
379
-        17) DDNS_PROVIDER="default@www.ovh.com";;
380
-        18) DDNS_PROVIDER="default@www.dtdns.com";;
381
-        19) DDNS_PROVIDER="default@giradns.com";;
382
-        20) DDNS_PROVIDER="default@www.duiadns.net";;
383
-        21) DDNS_PROVIDER="default@ddnss.de";;
384
-        22) DDNS_PROVIDER="default@dynv6.com";;
385
-        23) DDNS_PROVIDER="default@ipv4.dynv6.com";;
386
-        24) DDNS_PROVIDER="default@spdyn.de";;
387
-        25) DDNS_PROVIDER="default@freemyip.com";;
388
-        26) DDNS_PROVIDER="default@www.cloudxns.net";;
389
-    esac
390
-    save_configuration_values
391
-
392
-    valid_ddns_username=
393
-    valid_ddns_password=
394
-    if [[ "$DDNS_PROVIDER" == "none" ]]; then
395
-        if [ -f /etc/systemd/system/inadyn.service ]; then
396
-            systemctl stop inadyn
397
-            systemctl disable inadyn
398
-        fi
399
-    else
400
-        while [ ! $valid_ddns_username ]
401
-        do
402
-            data=$(mktemp 2>/dev/null)
403
-            dialog --backtitle $"Freedombone Configuration" \
404
-                   --inputbox $"Dynamic DNS provider username" 10 30 "$(grep 'DDNS_USERNAME' temp.cfg | awk -F '=' '{print $2}')" 2> "$data"
405
-            sel=$?
406
-            case $sel in
407
-                0)  possible_username=$(cat "$data")
408
-                    if [ "$possible_username" ]; then
409
-                        if [ ${#possible_username} -gt 1 ]; then
410
-                            valid_ddns_username=$(cat "$data")
411
-                            # shellcheck disable=SC2034
412
-                            DDNS_USERNAME="$valid_ddns_username"
413
-                            rm -f "$data"
414
-                            break;
415
-                        fi
416
-                    fi
417
-                    ;;
418
-                1) rm -f "$data"
419
-                   exit 1;;
420
-                255) rm -f "$data"
421
-                     exit 1;;
422
-            esac
423
-            rm -f "$data"
424
-        done
425
-        save_configuration_values
426
-
427
-        while [ ! $valid_ddns_password ]
428
-        do
429
-            data=$(mktemp 2>/dev/null)
430
-            dialog --backtitle $"Freedombone Configuration" \
431
-                   --clear \
432
-                   --insecure \
433
-                   --passwordbox $"Dynamic DNS provider password" 10 30 "$(grep 'DDNS_PASSWORD' temp.cfg | awk -F '=' '{print $2}')" 2> "$data"
434
-            sel=$?
435
-            case $sel in
436
-                0)  possible_password=$(cat "$data")
437
-                    if [ "$possible_password" ]; then
438
-                        if [ ${#possible_password} -gt 1 ]; then
439
-                            valid_ddns_password=$(cat "$data")
440
-                            DDNS_PASSWORD=$valid_ddns_password
441
-                            break;
442
-                        fi
443
-                    fi
444
-                    ;;
445
-                1) rm -f "$data"
446
-                   exit 1;;
447
-                255) rm -f "$data"
448
-                     exit 1;;
449
-            esac
450
-            rm -f "$data"
451
-            if [ ${#DDNS_PASSWORD} -lt "$MINIMUM_PASSWORD_LENGTH" ]; then
452
-                dialog --title $"Password quality check" --msgbox $"The password given was too short. It must be at least $MINIMUM_PASSWORD_LENGTH characters. You may need to change your password on the dynamic DNS provider's web site." 10 40
453
-                DDNS_PASSWORD=""
454
-            fi
455
-        done
456
-        save_configuration_values
457
-    fi
458
-}
459
-
460
-function choose_dynamic_dns {
461
-    DDNS_PROVIDER="none"
462
-
463
-    if [[ "$SYSTEM_TYPE" != "mesh"* && "$ONION_ONLY" == "no" ]]; then
464
-        dialog --title $"Dynamic DNS" \
465
-               --backtitle $"Freedombone Configuration" \
466
-               --yesno $"\\nConfigure a dynamic DNS service?\\n\\nIf it is already handled by your internet router then select 'no'." 10 50
467
-        sel=$?
468
-        case $sel in
469
-            0) dynamic_dns_setup;;
470
-            255) exit 1;;
471
-        esac
472
-    fi
473
-    save_configuration_values
474
-}
475
-
476 323
 function choose_debian_repo {
477 324
     if [[ "$MINIMAL_INSTALL" == "no" ]]; then
478 325
 
@@ -1100,7 +947,12 @@ function interactive_config {
1100 947
     choose_rng
1101 948
     choose_debian_repo
1102 949
     "${PROJECT_NAME}-wifi" --networksinteractive "$WIFI_NETWORKS_FILE"
1103
-    choose_dynamic_dns
950
+
951
+    "${PROJECT_NAME}-ddns"
952
+    read_config_param DDNS_PROVIDER
953
+    read_config_param DDNS_USERNAME
954
+    read_config_param DDNS_PASSWORD
955
+
1104 956
     choose_default_domain_name
1105 957
     choose_email_address
1106 958
     interactive_key_recovery

+ 7
- 5
src/freedombone-controlpanel View File

@@ -1981,11 +1981,12 @@ function menu_top_level {
1981 1981
            13 $"Add Clacks"
1982 1982
            14 $"Check for updates"
1983 1983
            15 $"Performance Benchmarks"
1984
-           16 $"Power off the system"
1985
-           17 $"Restart the system")
1984
+           16 $"Change Dynamic DNS settings"
1985
+           17 $"Power off the system"
1986
+           18 $"Restart the system")
1986 1987
 
1987 1988
         # shellcheck disable=SC2068
1988
-        selection=$(dialog --backtitle $"Freedombone Administrator Control Panel" --title $"Administrator Control Panel" --menu $"Choose an operation, or ESC to exit:" 24 60 24 "${W[@]}" 3>&2 2>&1 1>&3)
1989
+        selection=$(dialog --backtitle $"Freedombone Administrator Control Panel" --title $"Administrator Control Panel" --menu $"Choose an operation, or ESC to exit:" 25 60 25 "${W[@]}" 3>&2 2>&1 1>&3)
1989 1990
 
1990 1991
         if [ ! "$selection" ]; then
1991 1992
             break
@@ -2012,8 +2013,9 @@ function menu_top_level {
2012 2013
             13) add_clacks;;
2013 2014
             14) check_for_updates;;
2014 2015
             15) performance_benchmarks;;
2015
-            16) shut_down_system;;
2016
-            17) restart_system;;
2016
+            16) "${PROJECT_NAME}-ddns";;
2017
+            17) shut_down_system;;
2018
+            18) restart_system;;
2017 2019
         esac
2018 2020
     done
2019 2021
 }

+ 214
- 0
src/freedombone-ddns View File

@@ -0,0 +1,214 @@
1
+#!/bin/bash
2
+#  _____               _           _
3
+# |   __|___ ___ ___ _| |___ _____| |_ ___ ___ ___
4
+# |   __|  _| -_| -_| . | . |     | . | . |   | -_|
5
+# |__|  |_| |___|___|___|___|_|_|_|___|___|_|_|___|
6
+#
7
+#                              Freedom in the Cloud
8
+#
9
+# Change dynamic dns settings
10
+#
11
+# License
12
+# =======
13
+#
14
+# Copyright (C) 2018 Bob Mottram <bob@freedombone.net>
15
+#
16
+# This program is free software: you can redistribute it and/or modify
17
+# it under the terms of the GNU Affero General Public License as published by
18
+# the Free Software Foundation, either version 3 of the License, or
19
+# (at your option) any later version.
20
+#
21
+# This program is distributed in the hope that it will be useful,
22
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
23
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
24
+# GNU Affero General Public License for more details.
25
+#
26
+# You should have received a copy of the GNU Affero General Public License
27
+# along with this program.  If not, see <http://www.gnu.org/licenses/>.
28
+
29
+PROJECT_NAME='freedombone'
30
+
31
+export TEXTDOMAIN=${PROJECT_NAME}-ddns
32
+export TEXTDOMAINDIR="/usr/share/locale"
33
+
34
+source "/usr/share/${PROJECT_NAME}/utils/${PROJECT_NAME}-utils-config"
35
+source "/usr/share/${PROJECT_NAME}/utils/${PROJECT_NAME}-utils-dns"
36
+
37
+DDNS_PROVIDER="none"
38
+DDNS_USERNAME=
39
+DDNS_PASSWORD=
40
+
41
+function dynamic_dns_setup {
42
+    DDNS_PROVIDER='none'
43
+
44
+    W=(1 freedns.afraid.org
45
+       2 dyn.com
46
+       3 zoneedit.com
47
+       4 no-ip.com
48
+       5 easydns.com
49
+       6 dnsomatic.com
50
+       7 dns.he.net
51
+       8 tunnelbroker.net
52
+       9 sitelutions.com
53
+       10 dnsexit.com
54
+       11 changeip.com
55
+       12 zerigo.com
56
+       13 dhis.org
57
+       14 nsupdate.info
58
+       15 loopia.com
59
+       16 namecheap.com
60
+       17 ovh.com
61
+       18 dtdns.com
62
+       19 giradns.com
63
+       20 duiadns.net
64
+       21 ddnss.de
65
+       22 dynv6.com
66
+       23 ipv4.dynv6.com
67
+       24 spdyn.de
68
+       25 freemyip.com
69
+       26 cloudxns.net)
70
+
71
+    # shellcheck disable=SC2068
72
+    selection=$(dialog --backtitle $"Freedombone Configuration" --title $"Dynamic DNS" --menu $"Choose Dynamic DNS provider, or ESC for none:" 24 60 32 "${W[@]}" 3>&2 2>&1 1>&3)
73
+
74
+    if [ ! "$selection" ]; then
75
+        if [ -f /etc/systemd/system/inadyn.service ]; then
76
+            systemctl stop inadyn
77
+            systemctl disable inadyn
78
+        fi
79
+        return
80
+    fi
81
+
82
+    case $selection in
83
+        1) DDNS_PROVIDER="default@freedns.afraid.org";;
84
+        2) DDNS_PROVIDER="default@www.dyn.com";;
85
+        3) DDNS_PROVIDER="default@www.zoneedit.com";;
86
+        4) DDNS_PROVIDER="default@www.no-ip.com";;
87
+        5) DDNS_PROVIDER="default@www.easydns.com";;
88
+        6) DDNS_PROVIDER="default@www.dnsomatic.com";;
89
+        7) DDNS_PROVIDER="default@dns.he.net";;
90
+        8) DDNS_PROVIDER="default@www.tunnelbroker.net";;
91
+        9) DDNS_PROVIDER="default@www.sitelutions.com";;
92
+        10) DDNS_PROVIDER="default@www.dnsexit.com";;
93
+        11) DDNS_PROVIDER="default@www.changeip.com";;
94
+        12) DDNS_PROVIDER="default@www.zerigo.com";;
95
+        13) DDNS_PROVIDER="default@www.dhis.org";;
96
+        14) DDNS_PROVIDER="default@nsupdate.info";;
97
+        15) DDNS_PROVIDER="default@www.loopia.com";;
98
+        16) DDNS_PROVIDER="default@www.namecheap.com";;
99
+        17) DDNS_PROVIDER="default@www.ovh.com";;
100
+        18) DDNS_PROVIDER="default@www.dtdns.com";;
101
+        19) DDNS_PROVIDER="default@giradns.com";;
102
+        20) DDNS_PROVIDER="default@www.duiadns.net";;
103
+        21) DDNS_PROVIDER="default@ddnss.de";;
104
+        22) DDNS_PROVIDER="default@dynv6.com";;
105
+        23) DDNS_PROVIDER="default@ipv4.dynv6.com";;
106
+        24) DDNS_PROVIDER="default@spdyn.de";;
107
+        25) DDNS_PROVIDER="default@freemyip.com";;
108
+        26) DDNS_PROVIDER="default@www.cloudxns.net";;
109
+    esac
110
+    save_configuration_values
111
+
112
+    valid_ddns_username=
113
+    valid_ddns_password=
114
+    if [[ "$DDNS_PROVIDER" == "none" ]]; then
115
+        if [ -f /etc/systemd/system/inadyn.service ]; then
116
+            systemctl stop inadyn
117
+            systemctl disable inadyn
118
+        fi
119
+    else
120
+        while [ ! $valid_ddns_username ]
121
+        do
122
+            data=$(mktemp 2>/dev/null)
123
+            dialog --backtitle $"Freedombone Configuration" \
124
+                   --inputbox $"Dynamic DNS provider username" 10 30 "$(grep 'DDNS_USERNAME' temp.cfg | awk -F '=' '{print $2}')" 2> "$data"
125
+            sel=$?
126
+            case $sel in
127
+                0)  possible_username=$(cat "$data")
128
+                    if [ "$possible_username" ]; then
129
+                        if [ ${#possible_username} -gt 1 ]; then
130
+                            valid_ddns_username=$(cat "$data")
131
+                            # shellcheck disable=SC2034
132
+                            DDNS_USERNAME="$valid_ddns_username"
133
+                            rm -f "$data"
134
+                            break;
135
+                        fi
136
+                    fi
137
+                    ;;
138
+                1) rm -f "$data"
139
+                   clear
140
+                   exit 1;;
141
+                255) rm -f "$data"
142
+                     clear
143
+                     exit 1;;
144
+            esac
145
+            rm -f "$data"
146
+        done
147
+        save_configuration_values
148
+
149
+        while [ ! $valid_ddns_password ]
150
+        do
151
+            data=$(mktemp 2>/dev/null)
152
+            dialog --backtitle $"Freedombone Configuration" \
153
+                   --clear \
154
+                   --insecure \
155
+                   --passwordbox $"Dynamic DNS provider password" 10 30 "$(grep 'DDNS_PASSWORD' temp.cfg | awk -F '=' '{print $2}')" 2> "$data"
156
+            sel=$?
157
+            case $sel in
158
+                0)  possible_password=$(cat "$data")
159
+                    if [ "$possible_password" ]; then
160
+                        if [ ${#possible_password} -gt 1 ]; then
161
+                            valid_ddns_password=$(cat "$data")
162
+                            DDNS_PASSWORD=$valid_ddns_password
163
+                            break;
164
+                        fi
165
+                    fi
166
+                    ;;
167
+                1) rm -f "$data"
168
+                   clear
169
+                   exit 1;;
170
+                255) rm -f "$data"
171
+                     clear
172
+                     exit 1;;
173
+            esac
174
+            rm -f "$data"
175
+            if [ ${#DDNS_PASSWORD} -lt "$MINIMUM_PASSWORD_LENGTH" ]; then
176
+                dialog --title $"Password quality check" --msgbox $"The password given was too short. It must be at least $MINIMUM_PASSWORD_LENGTH characters. You may need to change your password on the dynamic DNS provider's web site." 10 40
177
+                DDNS_PASSWORD=""
178
+            fi
179
+        done
180
+        save_configuration_values
181
+        update_inadyn_config
182
+    fi
183
+}
184
+
185
+function choose_dynamic_dns {
186
+    if [[ "$SYSTEM_TYPE" != "mesh"* && "$ONION_ONLY" == "no" ]]; then
187
+        dialog --title $"Dynamic DNS" \
188
+               --backtitle $"Freedombone Configuration" \
189
+               --yesno $"\\nConfigure a dynamic DNS service?\\n\\nIf it is already handled by your internet router then select 'no'." 10 50
190
+        sel=$?
191
+        case $sel in
192
+            0) dynamic_dns_setup
193
+               ;;
194
+            255) clear
195
+                 exit 1
196
+                 ;;
197
+        esac
198
+    fi
199
+}
200
+
201
+if [ ! "$CONFIGURATION_FILE" ]; then
202
+    CONFIGURATION_FILE=$HOME/${PROJECT_NAME}.cfg
203
+fi
204
+
205
+read_configuration_values
206
+
207
+if [[ "$ONION_ONLY" != 'no' ]]; then
208
+    exit 0
209
+fi
210
+
211
+choose_dynamic_dns
212
+clear
213
+
214
+exit 0

+ 57
- 0
src/freedombone-utils-dns View File

@@ -94,6 +94,60 @@ EXTERNAL_IP_SERVICES=( \
94 94
         'http://ipinfo.io/' \
95 95
         'http://httpbin.org/ip')
96 96
 
97
+function update_inadyn_config {
98
+    if [ ! -f /etc/inadyn.conf ]; then
99
+        return
100
+    fi
101
+
102
+    if [[ "$DDNS_PROVIDER" == *'freedns'* ]]; then
103
+        return
104
+    fi
105
+
106
+    if ! grep -q "$DDNS_PROVIDER" /etc/inadyn.conf; then
107
+        # store any previous aliases
108
+        grep 'alias ' /etc/inadyn.conf > /tmp/inadyn_aliases
109
+
110
+        # remove entry for any previous ddns
111
+        sed -i '/system /,$d' /etc/inadyn.conf
112
+
113
+        # add the new provider
114
+        { echo '';
115
+          echo "system $DDNS_PROVIDER";
116
+          echo '  ssl';
117
+          echo "  checkip-url $GET_IP_ADDRESS_URL /"; } >> /etc/inadyn.conf
118
+        if [ "$DDNS_USERNAME" ]; then
119
+            echo "  username $DDNS_USERNAME" >> /etc/inadyn.conf
120
+        fi
121
+        if [ "$DDNS_PASSWORD" ]; then
122
+            echo "  password $DDNS_PASSWORD" >> /etc/inadyn.conf
123
+        fi
124
+
125
+        if [ -f /tmp/inadyn_aliases ]; then
126
+            cat /tmp/inadyn_aliases >> /etc/inadyn.conf
127
+            rm /tmp/inadyn_aliases
128
+        fi
129
+    else
130
+        # change username/password for an existing provider
131
+        if [ "$DDNS_USERNAME" ]; then
132
+            if grep -q "  username " /etc/inadyn.conf; then
133
+                sed -i "s|  username .*|  username $DDNS_USERNAME|g" /etc/inadyn.conf
134
+            else
135
+                echo "  username $DDNS_USERNAME" >> /etc/inadyn.conf
136
+            fi
137
+        fi
138
+        if [ "$DDNS_PASSWORD" ]; then
139
+            if grep -q "  password " /etc/inadyn.conf; then
140
+                sed -i "s|  password .*|  password $DDNS_PASSWORD|g" /etc/inadyn.conf
141
+            else
142
+                echo "  password $DDNS_PASSWORD" >> /etc/inadyn.conf
143
+            fi
144
+        fi
145
+    fi
146
+
147
+    systemctl enable inadyn
148
+    systemctl restart inadyn
149
+}
150
+
97 151
 function create_freedns_updater {
98 152
     if [[ $ONION_ONLY != "no" ]]; then
99 153
         return
@@ -137,6 +191,9 @@ function add_ddns_domain {
137 191
     if [[ $ONION_ONLY != "no" ]]; then
138 192
         return
139 193
     fi
194
+    if [ ! "$DDNS_PROVIDER" ]; then
195
+        return
196
+    fi
140 197
     if [[ "$DDNS_PROVIDER" == 'none' ]]; then
141 198
         return
142 199
     fi