Bläddra i källkod

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

Bob Mottram 7 år sedan
förälder
incheckning
6791362368

+ 2
- 2
src/freedombone-app-gogs Visa fil

655
         echo $'No Tor installation found. Gogs onion site cannot be configured.'
655
         echo $'No Tor installation found. Gogs onion site cannot be configured.'
656
         exit 877367
656
         exit 877367
657
     fi
657
     fi
658
-    if ! grep -q "hidden_service_gogs" $ONION_SERVICES_FILE; then
658
+    if ! grep -q "hidden_service_gogs" "$ONION_SERVICES_FILE"; then
659
         { echo 'HiddenServiceDir /var/lib/tor/hidden_service_gogs/';
659
         { echo 'HiddenServiceDir /var/lib/tor/hidden_service_gogs/';
660
           echo 'HiddenServiceVersion 3';
660
           echo 'HiddenServiceVersion 3';
661
           echo "HiddenServicePort 80 127.0.0.1:${GIT_ONION_PORT}";
661
           echo "HiddenServicePort 80 127.0.0.1:${GIT_ONION_PORT}";
662
-          echo "HiddenServicePort 9418 127.0.0.1:9418"; } >> $ONION_SERVICES_FILE
662
+          echo "HiddenServicePort 9418 127.0.0.1:9418"; } >> "$ONION_SERVICES_FILE"
663
         echo $'Added onion site for Gogs'
663
         echo $'Added onion site for Gogs'
664
     fi
664
     fi
665
 
665
 

+ 2
- 2
src/freedombone-app-keyserver Visa fil

656
 
656
 
657
     chown debian-sks: $sksconf_file
657
     chown debian-sks: $sksconf_file
658
 
658
 
659
-    if ! grep -q "hidden_service_sks" $ONION_SERVICES_FILE; then
659
+    if ! grep -q "hidden_service_sks" "$ONION_SERVICES_FILE"; then
660
         { echo 'HiddenServiceDir /var/lib/tor/hidden_service_sks/';
660
         { echo 'HiddenServiceDir /var/lib/tor/hidden_service_sks/';
661
           echo 'HiddenServiceVersion 3';
661
           echo 'HiddenServiceVersion 3';
662
           echo "HiddenServicePort 11370 127.0.0.1:11370";
662
           echo "HiddenServicePort 11370 127.0.0.1:11370";
663
           echo "HiddenServicePort 11373 127.0.0.1:11371";
663
           echo "HiddenServicePort 11373 127.0.0.1:11371";
664
-          echo "HiddenServicePort 11372 127.0.0.1:11372"; } >> $ONION_SERVICES_FILE
664
+          echo "HiddenServicePort 11372 127.0.0.1:11372"; } >> "$ONION_SERVICES_FILE"
665
         echo $'Added onion site for sks'
665
         echo $'Added onion site for sks'
666
     fi
666
     fi
667
 
667
 

+ 1
- 1
src/freedombone-app-matrix Visa fil

702
 
702
 
703
     #MATRIX_ONION_HOSTNAME=$(add_onion_service matrix ${MATRIX_PORT} ${MATRIX_ONION_PORT})
703
     #MATRIX_ONION_HOSTNAME=$(add_onion_service matrix ${MATRIX_PORT} ${MATRIX_ONION_PORT})
704
     add_onion_service matrix ${MATRIX_PORT} ${MATRIX_ONION_PORT}
704
     add_onion_service matrix ${MATRIX_PORT} ${MATRIX_ONION_PORT}
705
-    echo "HiddenServicePort ${MATRIX_HTTP_PORT} 127.0.0.1:${MATRIX_FEDERATION_ONION_PORT}" >> $ONION_SERVICES_FILE
705
+    echo "HiddenServicePort ${MATRIX_HTTP_PORT} 127.0.0.1:${MATRIX_FEDERATION_ONION_PORT}" >> "$ONION_SERVICES_FILE"
706
     systemctl restart tor
706
     systemctl restart tor
707
 
707
 
708
     if [ ! "${MATRIX_PASSWORD}" ]; then
708
     if [ ! "${MATRIX_PASSWORD}" ]; then

+ 44
- 1
src/freedombone-app-pleroma Visa fil

36
 PLEROMA_PORT=4000
36
 PLEROMA_PORT=4000
37
 PLEROMA_ONION_PORT=8011
37
 PLEROMA_ONION_PORT=8011
38
 PLEROMA_REPO="https://git.pleroma.social/pleroma/pleroma.git"
38
 PLEROMA_REPO="https://git.pleroma.social/pleroma/pleroma.git"
39
-PLEROMA_COMMIT='fc6f5bcad3ad94eefbfcb24ca361e818ed0319d6'
39
+PLEROMA_COMMIT='5b6d6d7f2d9363c494642bfda4d6e4d12daa53c7'
40
 PLEROMA_ADMIN_PASSWORD=
40
 PLEROMA_ADMIN_PASSWORD=
41
 PLEROMA_DIR=/etc/pleroma
41
 PLEROMA_DIR=/etc/pleroma
42
 PLEROMA_SECRET_KEY=""
42
 PLEROMA_SECRET_KEY=""
62
                    MY_EMAIL_ADDRESS
62
                    MY_EMAIL_ADDRESS
63
                    MY_USERNAME)
63
                    MY_USERNAME)
64
 
64
 
65
+function pleroma_add_filtering {
66
+    if grep -q "# begin filtering" $pleroma_secret; then
67
+        return
68
+    fi
69
+    sed -i '/pbkdf2_rounds/a reject: []' $pleroma_secret
70
+    sed -i '/pbkdf2_rounds/a federated_timeline_removal: [],' $pleroma_secret
71
+    sed -i '/pbkdf2_rounds/a media_nsfw: [],' $pleroma_secret
72
+    sed -i '/pbkdf2_rounds/a media_removal: [],' $pleroma_secret
73
+    sed -i '/pbkdf2_rounds/a config :pleroma, :mrf_simple,' $pleroma_secret
74
+    sed -i '/pbkdf2_rounds/a # begin filtering' $pleroma_secret
75
+
76
+    sed -i 's|reject: |  reject: |g' $pleroma_secret
77
+    sed -i 's|federated_timeline_removal: |  federated_timeline_removal: |g' $pleroma_secret
78
+    sed -i 's|media_nsfw: |  media_nsfw: |g' $pleroma_secret
79
+    sed -i 's|media_removal: |  media_removal: |g' $pleroma_secret
80
+    create_pleroma_blocklist
81
+}
82
+
65
 function pleroma_enable_chat {
83
 function pleroma_enable_chat {
66
     if [[ "$1" == 't'* || "$1" == 'y'* || "$1" == 'T'* || "$1" == 'Y'* ]]; then
84
     if [[ "$1" == 't'* || "$1" == 'y'* || "$1" == 'T'* || "$1" == 'Y'* ]]; then
67
         sed -i 's|"chatDisabled":.*|"chatDisabled": false,|g' $PLEROMA_DIR/priv/static/static/config.json
85
         sed -i 's|"chatDisabled":.*|"chatDisabled": false,|g' $PLEROMA_DIR/priv/static/static/config.json
91
       echo 'users_query="DELETE FROM users WHERE"';
109
       echo 'users_query="DELETE FROM users WHERE"';
92
       echo 'websub_server_subscriptions_query="DELETE FROM websub_server_subscriptions WHERE"';
110
       echo 'websub_server_subscriptions_query="DELETE FROM websub_server_subscriptions WHERE"';
93
       echo 'websub_server_subscriptions_updated=';
111
       echo 'websub_server_subscriptions_updated=';
112
+      echo 'filter_str=';
94
       echo 'while read blocked; do';
113
       echo 'while read blocked; do';
95
       echo "    if [[ \"\$blocked\" == *\".\"* || \"\$blocked\" == *\"@\"* ]]; then";
114
       echo "    if [[ \"\$blocked\" == *\".\"* || \"\$blocked\" == *\"@\"* ]]; then";
96
       echo "        if [ \${#blocked} -gt 4 ]; then";
115
       echo "        if [ \${#blocked} -gt 4 ]; then";
102
       echo "            users_query=\"\${users_query} nickname ilike '%\${blocked}%'\"";
121
       echo "            users_query=\"\${users_query} nickname ilike '%\${blocked}%'\"";
103
       echo '            objects_updated=1';
122
       echo '            objects_updated=1';
104
       echo "            if [[ \"\$blocked\" != *\"@\"* ]]; then";
123
       echo "            if [[ \"\$blocked\" != *\"@\"* ]]; then";
124
+      echo '                # Create a filter string for the pleroma configuration';
125
+      echo "                if [ \"\$filter_str\" ]; then";
126
+      echo "                    filter_str=\"\${filter_str}, \\\"\$blocked\\\"\"";
127
+      echo '                else';
128
+      echo "                    filter_str=\"\\\"\${blocked}\\\"\"";
129
+      echo '                fi';
130
+      echo '';
105
       echo "                if ! grep -q \"127.0.0.1  \$blocked\" /etc/hosts; then";
131
       echo "                if ! grep -q \"127.0.0.1  \$blocked\" /etc/hosts; then";
106
       echo "                    echo \"127.0.0.1  \$blocked\" >> /etc/hosts";
132
       echo "                    echo \"127.0.0.1  \$blocked\" >> /etc/hosts";
107
       echo '                fi';
133
       echo '                fi';
115
       echo '    fi';
141
       echo '    fi';
116
       echo 'done </root/freedombone-firewall-domains.cfg';
142
       echo 'done </root/freedombone-firewall-domains.cfg';
117
       echo '';
143
       echo '';
144
+      echo "if [ \"\$filter_str\" ]; then";
145
+      echo "    if ! grep -q \" \$filter_str \" $pleroma_secret; then";
146
+      echo "        sed -i \"s| media_removal:.*| media_removal: [ \$filter_str ],|g\" $pleroma_secret";
147
+      echo "        sed -i \"s| federated_timeline_removal:.*| federated_timeline_removal: [ \$filter_str ],|g\" $pleroma_secret";
148
+      echo "        sed -i \"s| reject:.*| reject: [ \$filter_str ]|g\" $pleroma_secret";
149
+      echo "        chown -R pleroma:pleroma $PLEROMA_DIR";
150
+      echo '        sudo -u pleroma mix clean';
151
+      echo '        sudo -u pleroma mix deps.compile';
152
+      echo '        sudo -u pleroma mix compile';
153
+      echo '        systemctl restart pleroma';
154
+      echo '    fi';
155
+      echo 'fi';
156
+      echo '';
118
       echo 'cd /etc/postgresql';
157
       echo 'cd /etc/postgresql';
119
       echo "if [ \$objects_updated ]; then";
158
       echo "if [ \$objects_updated ]; then";
120
       echo "    sudo -u postgres psql -d pleroma -c \"\$objects_query\"";
159
       echo "    sudo -u postgres psql -d pleroma -c \"\$objects_query\"";
755
     read_config_param PLEROMA_DOMAIN_NAME
794
     read_config_param PLEROMA_DOMAIN_NAME
756
     read_config_param PLEROMA_EXPIRE_MONTHS
795
     read_config_param PLEROMA_EXPIRE_MONTHS
757
 
796
 
797
+    pleroma_add_filtering
798
+
758
     if ! grep -q "/media/" /etc/cron.daily/pleroma-expire; then
799
     if ! grep -q "/media/" /etc/cron.daily/pleroma-expire; then
759
         rm $pleroma_expire_posts_script
800
         rm $pleroma_expire_posts_script
760
     fi
801
     fi
1308
     fi
1349
     fi
1309
     sed -i 's|"chatDisabled":.*|"chatDisabled": true,|g' $PLEROMA_DIR/priv/static/static/config.json
1350
     sed -i 's|"chatDisabled":.*|"chatDisabled": true,|g' $PLEROMA_DIR/priv/static/static/config.json
1310
 
1351
 
1352
+    pleroma_add_filtering
1353
+
1311
     systemctl daemon-reload
1354
     systemctl daemon-reload
1312
     systemctl enable pleroma
1355
     systemctl enable pleroma
1313
     systemctl start pleroma
1356
     systemctl start pleroma

+ 1
- 0
src/freedombone-app-scuttlebot Visa fil

376
 }
376
 }
377
 
377
 
378
 function mesh_install_scuttlebot {
378
 function mesh_install_scuttlebot {
379
+    #shellcheck disable=SC2153
379
     if [[ "$VARIANT" != "meshclient" && "$VARIANT" != "meshusb" ]]; then
380
     if [[ "$VARIANT" != "meshclient" && "$VARIANT" != "meshusb" ]]; then
380
         return
381
         return
381
     fi
382
     fi

+ 55
- 3
src/freedombone-app-xmpp Visa fil

51
 # From https://hg.prosody.im/prosody-modules
51
 # From https://hg.prosody.im/prosody-modules
52
 prosody_modules_filename='prosody-modules-20180322.tar.gz'
52
 prosody_modules_filename='prosody-modules-20180322.tar.gz'
53
 prosody_modules_hash='982d0dfcef98e9cb9cee4cc3801b8ce9a503a32e44c32b99df6fe94545b90072'
53
 prosody_modules_hash='982d0dfcef98e9cb9cee4cc3801b8ce9a503a32e44c32b99df6fe94545b90072'
54
+xmpp_encryption_warning=$"For security reasons, OMEMO or PGP encryption is required for conversations on this server."
54
 
55
 
55
 xmpp_variables=(ONION_ONLY
56
 xmpp_variables=(ONION_ONLY
56
                 INSTALLED_WITHIN_DOCKER
57
                 INSTALLED_WITHIN_DOCKER
62
                 DEFAULT_DOMAIN_NAME
63
                 DEFAULT_DOMAIN_NAME
63
                 XMPP_DOMAIN_CODE)
64
                 XMPP_DOMAIN_CODE)
64
 
65
 
66
+function xmpp_update_e2e_policy {
67
+    filename="$1"
68
+
69
+    read_config_param DEFAULT_DOMAIN_NAME
70
+    read_config_param ONION_ONLY
71
+
72
+    if ! grep -q "e2e_policy_muc" "$filename"; then
73
+        echo "e2e_policy_muc = \"none\"" >> "$filename"
74
+    else
75
+        sed -i 's|e2e_policy_muc.*|e2e_policy_muc = "none"|g' "$filename"
76
+    fi
77
+    if ! grep -q "e2e_policy_chat" "$filename"; then
78
+        echo "e2e_policy_chat = \"required\"" >> "$filename"
79
+    else
80
+        sed -i 's|e2e_policy_chat.*|e2e_policy_chat = "required"|g' "$filename"
81
+    fi
82
+    if ! grep -q "e2e_policy_message_required_chat" "$filename"; then
83
+        echo "e2e_policy_message_required_chat = \"$xmpp_encryption_warning\"" >> "$filename"
84
+    else
85
+        sed -i "s|e2e_policy_message_required_chat.*|e2e_policy_message_required_chat = \"$xmpp_encryption_warning\"|g" "$filename"
86
+    fi
87
+
88
+    if [[ "$ONION_ONLY" != 'no' ]]; then
89
+        XMPP_ONION_HOSTNAME=$(cat /var/lib/tor/hidden_service_xmpp/hostname)
90
+        sed -i "s|VirtualHost \".*.onion.*|VirtualHost \"${XMPP_ONION_HOSTNAME}\"|g" "$filename"
91
+        # TLS is not strictly needed for onion transport security
92
+        sed -i 's|c2s_require_encryption =.*|c2s_require_encryption = false|g' "$filename"
93
+        sed -i 's|s2s_require_encryption =.*|s2s_require_encryption = false|g' "$filename"
94
+    fi
95
+}
96
+
65
 function logging_on_xmpp {
97
 function logging_on_xmpp {
66
     if [ -d /etc/prosody ]; then
98
     if [ -d /etc/prosody ]; then
67
         if [ ! -d /var/log/prosody ]; then
99
         if [ ! -d /var/log/prosody ]; then
425
             usermod -a -G ssl-cert prosody
457
             usermod -a -G ssl-cert prosody
426
         fi
458
         fi
427
     fi
459
     fi
460
+
461
+    xmpp_update_e2e_policy /etc/prosody/conf.avail/xmpp.cfg.lua
462
+    xmpp_update_e2e_policy /etc/prosody/prosody.cfg.lua
463
+
428
     prosody_daemon_restart_script
464
     prosody_daemon_restart_script
429
     function_check update_prosody_modules
465
     function_check update_prosody_modules
430
     update_prosody_modules
466
     update_prosody_modules
608
 
644
 
609
     function_check remove_onion_service
645
     function_check remove_onion_service
610
     remove_onion_service xmpp 5222 5223 5269
646
     remove_onion_service xmpp 5222 5223 5269
611
-    sed -i '/HiddenServiceVersion 2/d' $ONION_SERVICES_FILE
647
+    sed -i '/HiddenServiceVersion 2/d' "$ONION_SERVICES_FILE"
612
 
648
 
613
     apt-mark -q unhold prosody
649
     apt-mark -q unhold prosody
614
     apt-get -yq remove --purge prosody
650
     apt-get -yq remove --purge prosody
818
     else
854
     else
819
         echo "    dhparam = \"/etc/ssl/certs/xmpp.dhparam\";" >> /etc/prosody/prosody.cfg.lua
855
         echo "    dhparam = \"/etc/ssl/certs/xmpp.dhparam\";" >> /etc/prosody/prosody.cfg.lua
820
     fi
856
     fi
857
+
821
     { echo '}';
858
     { echo '}';
822
       echo '';
859
       echo '';
823
       echo 'c2s_require_encryption = true';
860
       echo 'c2s_require_encryption = true';
824
       echo 's2s_require_encryption = true';
861
       echo 's2s_require_encryption = true';
825
       echo '';
862
       echo '';
863
+      echo 'e2e_policy_muc = "none"';
864
+      echo 'e2e_policy_chat = "required"';
865
+      echo "e2e_policy_message_required_chat = \"$xmpp_encryption_warning\"";
866
+      echo '';
826
       echo 's2s_secure_auth = false';
867
       echo 's2s_secure_auth = false';
827
       echo '';
868
       echo '';
828
       echo 'authentication = "internal_hashed"';
869
       echo 'authentication = "internal_hashed"';
838
       echo ''; } >> /etc/prosody/prosody.cfg.lua
879
       echo ''; } >> /etc/prosody/prosody.cfg.lua
839
     if [[ "$ONION_ONLY" != 'no' ]]; then
880
     if [[ "$ONION_ONLY" != 'no' ]]; then
840
         echo "VirtualHost \"${XMPP_ONION_HOSTNAME}\"" >> /etc/prosody/prosody.cfg.lua
881
         echo "VirtualHost \"${XMPP_ONION_HOSTNAME}\"" >> /etc/prosody/prosody.cfg.lua
882
+        # TLS is not needed for onion transport security
883
+        sed -i 's|s2s_require_encryption =.*|s2s_require_encryption = false|g' /etc/prosody/prosody.cfg.lua
884
+        sed -i 's|c2s_require_encryption =.*|c2s_require_encryption = false|g' /etc/prosody/prosody.cfg.lua
841
     else
885
     else
842
         echo "VirtualHost \"${DEFAULT_DOMAIN_NAME}\"" >> /etc/prosody/prosody.cfg.lua
886
         echo "VirtualHost \"${DEFAULT_DOMAIN_NAME}\"" >> /etc/prosody/prosody.cfg.lua
843
     fi
887
     fi
1068
     else
1112
     else
1069
         sed -i 's|s2s_require_encryption.*|s2s_require_encryption = true|g' /etc/prosody/conf.avail/xmpp.cfg.lua
1113
         sed -i 's|s2s_require_encryption.*|s2s_require_encryption = true|g' /etc/prosody/conf.avail/xmpp.cfg.lua
1070
     fi
1114
     fi
1115
+
1116
+    if [[ "$ONION_ONLY" != 'no' ]]; then
1117
+        sed -i 's|c2s_require_encryption.*|c2s_require_encryption = false|g' /etc/prosody/conf.avail/xmpp.cfg.lua
1118
+        sed -i 's|s2s_require_encryption.*|s2s_require_encryption = false|g' /etc/prosody/conf.avail/xmpp.cfg.lua
1119
+    fi
1120
+
1121
+    xmpp_update_e2e_policy /etc/prosody/conf.avail/xmpp.cfg.lua
1122
+
1071
     if ! grep -q "allow_unencrypted_plain_auth" /etc/prosody/conf.avail/xmpp.cfg.lua; then
1123
     if ! grep -q "allow_unencrypted_plain_auth" /etc/prosody/conf.avail/xmpp.cfg.lua; then
1072
         echo 'allow_unencrypted_plain_auth = false' >> /etc/prosody/conf.avail/xmpp.cfg.lua
1124
         echo 'allow_unencrypted_plain_auth = false' >> /etc/prosody/conf.avail/xmpp.cfg.lua
1073
     else
1125
     else
1079
         echo $'No Tor installation found. xmpp onion site cannot be configured.'
1131
         echo $'No Tor installation found. xmpp onion site cannot be configured.'
1080
         exit 877367
1132
         exit 877367
1081
     fi
1133
     fi
1082
-    if ! grep -q "hidden_service_xmpp" $ONION_SERVICES_FILE; then
1134
+    if ! grep -q "hidden_service_xmpp" "$ONION_SERVICES_FILE"; then
1083
         { echo 'HiddenServiceDir /var/lib/tor/hidden_service_xmpp/';
1135
         { echo 'HiddenServiceDir /var/lib/tor/hidden_service_xmpp/';
1084
           echo 'HiddenServiceVersion 2';
1136
           echo 'HiddenServiceVersion 2';
1085
           echo "HiddenServicePort 5222 127.0.0.1:5222";
1137
           echo "HiddenServicePort 5222 127.0.0.1:5222";
1086
-          echo "HiddenServicePort 5269 127.0.0.1:5269"; } >> $ONION_SERVICES_FILE
1138
+          echo "HiddenServicePort 5269 127.0.0.1:5269"; } >> "$ONION_SERVICES_FILE"
1087
         echo $'Added onion site for xmpp chat'
1139
         echo $'Added onion site for xmpp chat'
1088
     fi
1140
     fi
1089
 
1141
 

+ 16
- 16
src/freedombone-utils-onion Visa fil

34
 ONION_SERVICES_FILE=/etc/torrc.d/${PROJECT_NAME}
34
 ONION_SERVICES_FILE=/etc/torrc.d/${PROJECT_NAME}
35
 
35
 
36
 function torrc_migrate {
36
 function torrc_migrate {
37
-    if [ -f $ONION_SERVICES_FILE ]; then
37
+    if [ -f "$ONION_SERVICES_FILE" ]; then
38
         if grep -q "#%include /etc/torrc.d" /etc/tor/torrc; then
38
         if grep -q "#%include /etc/torrc.d" /etc/tor/torrc; then
39
             sed -i 's|#%include /etc/torrc.d|%include /etc/torrc.d|g' /etc/tor/torrc
39
             sed -i 's|#%include /etc/torrc.d|%include /etc/torrc.d|g' /etc/tor/torrc
40
             systemctl restart tor
40
             systemctl restart tor
45
 
45
 
46
     mkdir /etc/torrc.d
46
     mkdir /etc/torrc.d
47
 
47
 
48
-    grep "HiddenServiceDir\\|HiddenServiceVersion\\|HiddenServicePort" /etc/tor/torrc | grep -v "#HiddenServiceDir" >> $ONION_SERVICES_FILE
48
+    grep "HiddenServiceDir\\|HiddenServiceVersion\\|HiddenServicePort" /etc/tor/torrc | grep -v "#HiddenServiceDir" >> "$ONION_SERVICES_FILE"
49
 
49
 
50
-    if ! grep "HiddenServiceVersion" $ONION_SERVICES_FILE; then
50
+    if ! grep "HiddenServiceVersion" "$ONION_SERVICES_FILE"; then
51
         systemctl restart tor
51
         systemctl restart tor
52
         return
52
         return
53
     fi
53
     fi
121
     nick="$3"
121
     nick="$3"
122
 
122
 
123
     if [ ${#nick} -gt 0 ]; then
123
     if [ ${#nick} -gt 0 ]; then
124
-        sed -i "/stealth ${nick}/d" $ONION_SERVICES_FILE
124
+        sed -i "/stealth ${nick}/d" "$ONION_SERVICES_FILE"
125
     fi
125
     fi
126
-    sed -i "/hidden_service_${onion_service_name}/,+1 d" $ONION_SERVICES_FILE
127
-    sed -i "/hidden_service_${onion_service_name}_mobile/,+1 d" $ONION_SERVICES_FILE
128
-    sed -i "/127.0.0.1:${onion_service_port_to}/d" $ONION_SERVICES_FILE
126
+    sed -i "/hidden_service_${onion_service_name}/,+1 d" "$ONION_SERVICES_FILE"
127
+    sed -i "/hidden_service_${onion_service_name}_mobile/,+1 d" "$ONION_SERVICES_FILE"
128
+    sed -i "/127.0.0.1:${onion_service_port_to}/d" "$ONION_SERVICES_FILE"
129
     if [ "$3" ]; then
129
     if [ "$3" ]; then
130
-        sed -i "/127.0.0.1:${3}/d" $ONION_SERVICES_FILE
130
+        sed -i "/127.0.0.1:${3}/d" "$ONION_SERVICES_FILE"
131
         if [ "$4" ]; then
131
         if [ "$4" ]; then
132
-            sed -i "/127.0.0.1:${4}/d" $ONION_SERVICES_FILE
132
+            sed -i "/127.0.0.1:${4}/d" "$ONION_SERVICES_FILE"
133
             if [ "$5" ]; then
133
             if [ "$5" ]; then
134
-                sed -i "/127.0.0.1:${5}/d" $ONION_SERVICES_FILE
134
+                sed -i "/127.0.0.1:${5}/d" "$ONION_SERVICES_FILE"
135
             fi
135
             fi
136
         fi
136
         fi
137
     fi
137
     fi
164
         USE_V2_ONION_ADDRESS=
164
         USE_V2_ONION_ADDRESS=
165
         exit 877367
165
         exit 877367
166
     fi
166
     fi
167
-    if ! grep -q "hidden_service_${onion_service_name}" $ONION_SERVICES_FILE; then
168
-        echo "HiddenServiceDir ${HIDDEN_SERVICE_PATH}${onion_service_name}/" >> $ONION_SERVICES_FILE
167
+    if ! grep -q "hidden_service_${onion_service_name}" "$ONION_SERVICES_FILE"; then
168
+        echo "HiddenServiceDir ${HIDDEN_SERVICE_PATH}${onion_service_name}/" >> "$ONION_SERVICES_FILE"
169
         if [ ! $USE_V2_ONION_ADDRESS ]; then
169
         if [ ! $USE_V2_ONION_ADDRESS ]; then
170
-            echo 'HiddenServiceVersion 3' >> $ONION_SERVICES_FILE
170
+            echo 'HiddenServiceVersion 3' >> "$ONION_SERVICES_FILE"
171
         else
171
         else
172
-            echo 'HiddenServiceVersion 2' >> $ONION_SERVICES_FILE
172
+            echo 'HiddenServiceVersion 2' >> "$ONION_SERVICES_FILE"
173
         fi
173
         fi
174
-        echo "HiddenServicePort ${onion_service_port_from} 127.0.0.1:${onion_service_port_to}" >> $ONION_SERVICES_FILE
174
+        echo "HiddenServicePort ${onion_service_port_from} 127.0.0.1:${onion_service_port_to}" >> "$ONION_SERVICES_FILE"
175
         if [ ${#onion_stealth_name} -gt 0 ]; then
175
         if [ ${#onion_stealth_name} -gt 0 ]; then
176
-            echo "HiddenServiceAuthorizeClient stealth ${onion_stealth_name}" >> $ONION_SERVICES_FILE
176
+            echo "HiddenServiceAuthorizeClient stealth ${onion_stealth_name}" >> "$ONION_SERVICES_FILE"
177
         fi
177
         fi
178
     fi
178
     fi
179
 
179