19 | This software encrypts and authenticates DNS packets between your computer
20 | and a DNS resolver using DNSCrypt.
21 |
22 |
23 | Tips:
24 |
25 |
26 | If you have a firewall, open TCP and UDP ports 53 and 443.
27 | These are the most common ports used for DNSCrypt.
28 |
29 |
30 | WiFi captive portals dont work if they can't intercept DNS queries
31 | and often block DNSCrypt.
32 | So on public WiFi network, disable DNSCrypt, log in, then you can
33 | enable it again.
34 |
35 |
36 | Using Little Snitch? There are a few rules you need to establish,
37 | which Little Snitch should prompt for when trying to
38 | activate this application:
39 |
40 |
Allow any outgoing connection for system processes (dnscrypt-proxy)
41 |
Allow any incoming connection for system process (dnscrypt-proxy)
42 |
Allow any outgoing connection for system processes (dig)
43 |
For automatic updates, allow outgoing TCP connections to port 80 (http) of updates.dnscrypt.org and download.dnscrypt.org, as well as to port 443 (https) of github.com and download.dnscrypt.org for system process (curl)
44 |
45 | (Thanks to @cavemandaveman and @TraderStf)
46 |
47 |
48 |
49 |
50 |
51 |
--------------------------------------------------------------------------------
/DNSCrypt-Preference-Pane/DNSCrypt/extra/html/help.haml:
--------------------------------------------------------------------------------
1 | !!! 5
2 | %html{lang: "en"}
3 | %head
4 | %meta{charset: "utf-8"}
5 | %title Help (advanced settings)
6 | :sass
7 | body
8 | font:
9 | family: arial, helvetica, sans-serif
10 | size: 14px
11 | margin: 1em
12 | h1
13 | margin: 0
14 | %body
15 | %h1 Help (advanced settings)
16 | %section
17 | %h2 Static DNS servers
18 | %p
19 | If you are not using DHCP and want a statically configured set
20 | of default DNS resolvers, enter their IP addresses in this box.
21 | %p
22 | Separate them with spaces.
23 | %section
24 | %h2 Log DNS queries
25 | %p
26 | As a tool designed to protect your privacy, the DNSCrypt proxy does
27 | not log anything about your DNS queries. Nothing about them will be
28 | saved to disk ever, and log messages are intentionally kept as generic
29 | as possible.
30 | %p
31 | However, you still may want to look at the DNS queries sent by
32 | your system. This can be useful in order to spot suspicious
33 | activity and to refine your domain blacklists and whitelists.
34 | %p
35 | Checking the "Log DNS queries" box dumps all DNS queries sent
36 | by your computer to a file named /var/log/dnscrypt-query.log
37 | %p
38 | Blocked queries can also go to a log file. The file is named
39 | /var/log/dnscrypt-blocked-query.log
40 | %p
41 | The "View log" button opens it with the log viewer application
42 | so that you can watch it in real time. The other button shows
43 | the blocked queries.
44 | %section
45 | %h2 IP addresses blocking
46 | %p
47 | A response to a query containing at least one IP address
48 | listed here will be blocked.
49 | %p
50 | This make it easy to block spam sources, hosting services and content
51 | providers using a lot of different domain names for a single service.
52 | %p
53 | This can also be useful in order to block DNS rebinding
54 | attacks, even for non-private network spaces.
55 | %p
56 | IP addresses can be IPv4 and IPv6 addresses, and must be
57 | separated with spaces.
58 | %section
59 | %h2 Names blocking
60 | %p
61 | This is a list of domain names to be blocked.
62 | %p
63 | "example.com" will match "example.com" and "www.example.com".
64 | %p
65 | But wildcards are also supported. "ads.*" will match any name
66 | beginning with "ads."
67 | %p
68 | Wildcards can also perform substring matching. "*xxx*" will
69 | match any name containing the string "xxx".
70 | %p
71 | Patterns to be blocked should be separated with spaces or new
72 | lines. Flushing your DNS cache is not required.
73 | %p
74 | This feature is only enabled when using DNSCrypt.
75 | %section
76 | %h2 Exceptions - bypassing DNSCrypt for some specific names
77 | %p
78 | Some domain names should not be resolved by a third-party DNS
79 | resolver, that may not know about them.
80 | %p
81 | This includes local domain names provided by home routers
82 | (like "routerlogin.net"), local domain names provided by
83 | operating systems and applications (like ".local" or ".lan"),
84 | local domain names served by appliances like set-top boxes, and
85 | internal domains used in corporate networks.
86 | %p
87 | Domains listed here will bypass DNSCrypt in order to be sent
88 | to the default resolvers.
89 | %p
90 | Do
91 | %strong not
92 | use a tool like hostip(8), drill(1), unbound-host(1), dig(1) or host(1)
93 | in order to check that an exception rule works.
94 | %p
95 | These tools use their own resolution mechanisms that have nothing
96 | to do with how others apps on your system are resolving names.
97 | %p
98 | They don't use the OSX-specific stub resolver, they don't use
99 | the system-wide DNS cache, they have bugs and limitations that the OS
100 | doesn't have (and the opposite is also true), and they don't know a
101 | thing about specific resolvers that have to be used for specific
102 | domains.
103 | %p
104 | Use actual apps, or even a command such as ping(8).
105 |
--------------------------------------------------------------------------------
/DNSCrypt-Preference-Pane/DNSCrypt/extra/html/help.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | Help (advanced settings)
6 |
15 |
16 |
17 |
Help (advanced settings)
18 |
19 |
Static DNS servers
20 |
21 | If you are not using DHCP and want a statically configured set
22 | of default DNS resolvers, enter their IP addresses in this box.
23 |
24 |
25 | Separate them with spaces.
26 |
27 |
28 |
29 |
Log DNS queries
30 |
31 | As a tool designed to protect your privacy, the DNSCrypt proxy does
32 | not log anything about your DNS queries. Nothing about them will be
33 | saved to disk ever, and log messages are intentionally kept as generic
34 | as possible.
35 |
36 |
37 | However, you still may want to look at the DNS queries sent by
38 | your system. This can be useful in order to spot suspicious
39 | activity and to refine your domain blacklists and whitelists.
40 |
41 |
42 | Checking the "Log DNS queries" box dumps all DNS queries sent
43 | by your computer to a file named /var/log/dnscrypt-query.log
44 |
45 |
46 | Blocked queries can also go to a log file. The file is named
47 |
48 |
49 |
50 | The "View log" button opens it with the log viewer application
51 | so that you can watch it in real time. The other button shows
52 | the blocked queries.
53 |
54 |
55 |
56 |
IP addresses blocking
57 |
58 | A response to a query containing at least one IP address
59 | listed here will be blocked.
60 |
61 |
62 | This make it easy to block spam sources, hosting services and content
63 | providers using a lot of different domain names for a single service.
64 |
65 |
66 | This can also be useful in order to block DNS rebinding
67 | attacks, even for non-private network spaces.
68 |
69 |
70 | IP addresses can be IPv4 and IPv6 addresses, and must be
71 | separated with spaces.
72 |
73 |
74 |
75 |
Names blocking
76 |
77 | This is a list of domain names to be blocked.
78 |
79 |
80 | "example.com" will match "example.com" and "www.example.com".
81 |
82 |
83 | But wildcards are also supported. "ads.*" will match any name
84 | beginning with "ads."
85 |
86 |
87 | Wildcards can also perform substring matching. "*xxx*" will
88 | match any name containing the string "xxx".
89 |
90 |
91 | Patterns to be blocked should be separated with spaces or new
92 | lines. Flushing your DNS cache is not required.
93 |
94 |
95 | This feature is only enabled when using DNSCrypt.
96 |
97 |
98 |
99 |
Exceptions - bypassing DNSCrypt for some specific names
100 |
101 | Some domain names should not be resolved by a third-party DNS
102 | resolver, that may not know about them.
103 |
104 |
105 | This includes local domain names provided by home routers
106 | (like "routerlogin.net"), local domain names provided by
107 | operating systems and applications (like ".local" or ".lan"),
108 | local domain names served by appliances like set-top boxes, and
109 | internal domains used in corporate networks.
110 |
111 |
112 | Domains listed here will bypass DNSCrypt in order to be sent
113 | to the default resolvers.
114 |
115 |
116 | Do
117 | not
118 | use a tool like hostip(8), drill(1), unbound-host(1), dig(1) or host(1)
119 | in order to check that an exception rule works.
120 |
121 |
122 | These tools use their own resolution mechanisms that have nothing
123 | to do with how others apps on your system are resolving names.
124 |
125 |
126 | They don't use the OSX-specific stub resolver, they don't use
127 | the system-wide DNS cache, they have bugs and limitations that the OS
128 | doesn't have (and the opposite is also true), and they don't know a
129 | thing about specific resolvers that have to be used for specific
130 | domains.
131 |
132 |
133 | Use actual apps, or even a command such as ping(8).
134 |
135 |
136 |
137 |
138 |
--------------------------------------------------------------------------------
/DNSCrypt-Preference-Pane/DNSCrypt/extra/html/releasenotes.haml:
--------------------------------------------------------------------------------
1 | !!! 5
2 | %html{lang: "en"}
3 | %head
4 | %meta{charset: "utf-8"}
5 | %title Release notes
6 | :sass
7 | body
8 | font:
9 | family: arial, helvetica, sans-serif
10 | size: 14px
11 | margin: 0
12 | h1, h2
13 | margin: 0
14 | time
15 | font:
16 | style: italic
17 | %body
18 | %article
19 | %h2 Version 1.0.14
20 | %time Sat, Feb 11 2017
21 | %p
22 | The previous version (1.0.13) required a recent version of
23 | openssl to be present on the system (plugins need ldns, ldns
24 | needed this). The dependency has been removed.
25 |
26 | %body
27 | %article
28 | %h2 Version 1.0.13
29 | %time Thu, Feb 09 2017
30 | %p
31 | No more "automatic fallback". We trust users to know when they
32 | must disable DNSCrypt.
33 | %p
34 | DNS caching for improved speed.
35 | %p
36 | New buttons to log and view blocked queries.
37 | %p
38 | New system to bypass DNSCrypt using dnscrypt-proxy forwarding
39 | module.
40 | %p
41 | Many bug fixes because old code was removed.
42 | %p
43 | dnscrypt-proxy 1.9.0 with support for the new ChaCha20 encryption.
44 | %p
45 | libsodium 1.0.11.
46 |
47 | %article
48 | %h2 Version 1.0.12
49 | %time Sun, Jul 31 2016
50 | %p
51 | Compatibility with OSX 10.12
52 | %p
53 | dnscrypt-proxy 1.7.0
54 | %p
55 | libsodium 1.0.9
56 | %p
57 | Fixed a regression in the automatic updater for the resolvers list
58 |
59 | %article
60 | %h2 Version 1.0.11
61 | %time Thu, Mar 3 2016
62 | %p
63 | Compatibility with OSX 10.11
64 | %p
65 | dnscrypt-proxy 1.6.1
66 | %p
67 | libsodium 1.0.8
68 |
69 | %article
70 | %h2 Version 1.0.10
71 | %time Tue, 23 Jul 2015
72 | %p
73 | Compatibility with OSX 10.11 beta 4
74 | %p
75 | dnscrypt-proxy 1.6.0
76 |
77 | %article
78 | %h2 Version 1.0.9
79 | %time Tue, 12 Jul 2015
80 | %p
81 | Fixed an issue with libsodium not being found by minisign-verify
82 |
83 | %article
84 | %h2 Version 1.0.8
85 | %time Tue, 12 Jul 2015
86 | %p
87 | New versions are automatically downloaded
88 |
89 | %article
90 | %h2 Version 1.0.7
91 | %time Tue, 1 Jul 2015
92 | %p
93 | Fixed a bug in the automatic updater for the resolvers list
94 |
95 | %article
96 | %h2 Version 1.0.6
97 | %time Tue, 10 Jun 2015
98 | %p
99 | Updated DNSCrypt proxy to version 1.5.0
100 | %p
101 | Updated libsodium to 1.0.3-minimal
102 | %p
103 | The list of available resolvers is automatically updated
104 | %p
105 | Improved privacy: ephemeral keys have been turned on
106 | %p
107 | Improved privacy: if no resolvers have been configured, a new one
108 | is randomly chosen after each reboot
109 |
110 | %article
111 | %h2 Version 1.0.5
112 | %time Tue, 06 Jan 2015
113 | %p
114 | Updated DNSCrypt proxy to version 1.4.3
115 | %p
116 | Updated libsodium to 1.0.1-minimal
117 |
--------------------------------------------------------------------------------
/DNSCrypt-Preference-Pane/DNSCrypt/extra/html/releasenotes.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | Release notes
6 |
18 |
19 |
20 |
21 |
Version 1.0.14
22 |
23 |
24 | The previous version (1.0.13) required a recent version of
25 | openssl to be present on the system (plugins need ldns, ldns
26 | needed this). The dependency has been removed.
27 |
28 |
29 |
30 |
31 |
32 |
Version 1.0.13
33 |
34 |
35 | No more "automatic fallback". We trust users to know when they
36 | must disable DNSCrypt.
37 |
38 |
39 | DNS caching for improved speed.
40 |
41 |
42 | New buttons to log and view blocked queries.
43 |
44 |
45 | New system to bypass DNSCrypt using dnscrypt-proxy forwarding
46 | module.
47 |
48 |
49 | Many bug fixes because old code was removed.
50 |
51 |
52 | dnscrypt-proxy 1.9.0 with support for the new ChaCha20 encryption.
53 |
54 |
55 | libsodium 1.0.11.
56 |
57 |
58 |
59 |
Version 1.0.12
60 |
61 |
62 | Compatibility with OSX 10.12
63 |
64 |
65 | dnscrypt-proxy 1.7.0
66 |
67 |
68 | libsodium 1.0.9
69 |
70 |
71 | Fixed a regression in the automatic updater for the resolvers list
72 |
73 |
74 |
75 |
Version 1.0.11
76 |
77 |
78 | Compatibility with OSX 10.11
79 |
80 |
81 | dnscrypt-proxy 1.6.1
82 |
83 |
84 | libsodium 1.0.8
85 |
86 |
87 |
88 |
Version 1.0.10
89 |
90 |
91 | Compatibility with OSX 10.11 beta 4
92 |
93 |
94 | dnscrypt-proxy 1.6.0
95 |
96 |
97 |
98 |
Version 1.0.9
99 |
100 |
101 | Fixed an issue with libsodium not being found by minisign-verify
102 |
103 |
104 |
105 |
Version 1.0.8
106 |
107 |
108 | New versions are automatically downloaded
109 |
110 |
111 |
112 |
Version 1.0.7
113 |
114 |
115 | Fixed a bug in the automatic updater for the resolvers list
116 |
117 |
118 |
119 |
Version 1.0.6
120 |
121 |
122 | Updated DNSCrypt proxy to version 1.5.0
123 |
124 |
125 | Updated libsodium to 1.0.3-minimal
126 |
127 |
128 | The list of available resolvers is automatically updated
129 |
130 |
131 | Improved privacy: ephemeral keys have been turned on
132 |
133 |
134 | Improved privacy: if no resolvers have been configured, a new one
135 | is randomly chosen after each reboot
136 |
137 |
138 |
139 |
Version 1.0.5
140 |
141 |
142 | Updated DNSCrypt proxy to version 1.4.3
143 |
144 |
145 | Updated libsodium to 1.0.1-minimal
146 |
147 |
148 |
149 |
150 |
--------------------------------------------------------------------------------
/DNSCrypt-Preference-Pane/DNSCrypt/extra/html/update.sh:
--------------------------------------------------------------------------------
1 | #! /bin/sh
2 |
3 | for f_in in *.haml; do
4 | echo "$f_in"
5 | f_out=$(echo "$f_in" | sed -e 's/.haml/.html/')
6 | haml < "$f_in" > "$f_out"
7 | done
8 |
--------------------------------------------------------------------------------
/DNSCrypt-Preference-Pane/DNSCrypt/extra/usr/bin/Uninstall.app/Contents/Info.plist:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | CFBundleAllowMixedLocalizations
6 |
7 | CFBundleDevelopmentRegion
8 | English
9 | CFBundleExecutable
10 | applet
11 | CFBundleIconFile
12 | applet
13 | CFBundleIdentifier
14 | com.apple.ScriptEditor.id.Uninstall
15 | CFBundleInfoDictionaryVersion
16 | 6.0
17 | CFBundleName
18 | Uninstall
19 | CFBundlePackageType
20 | APPL
21 | CFBundleShortVersionString
22 | 1.0
23 | CFBundleSignature
24 | aplt
25 | LSMinimumSystemVersionByArchitecture
26 |
27 | x86_64
28 | 10.6
29 |
30 | LSRequiresCarbon
31 |
32 | WindowState
33 |
34 | dividerCollapsed
35 |
36 | eventLogLevel
37 | -1
38 | name
39 | ScriptWindowState
40 | positionOfDivider
41 | 370
42 | savedFrame
43 | 85 77 1202 655 0 0 1366 746
44 | selectedTabView
45 | result
46 |
47 |
48 |
49 |
--------------------------------------------------------------------------------
/DNSCrypt-Preference-Pane/DNSCrypt/extra/usr/bin/Uninstall.app/Contents/MacOS/applet:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/stammy/dnscrypt-osx-client/69fdd9c44cc7e19c05608cfd463e55829de43416/DNSCrypt-Preference-Pane/DNSCrypt/extra/usr/bin/Uninstall.app/Contents/MacOS/applet
--------------------------------------------------------------------------------
/DNSCrypt-Preference-Pane/DNSCrypt/extra/usr/bin/Uninstall.app/Contents/PkgInfo:
--------------------------------------------------------------------------------
1 | APPLaplt
--------------------------------------------------------------------------------
/DNSCrypt-Preference-Pane/DNSCrypt/extra/usr/bin/Uninstall.app/Contents/Resources/Scripts/main.scpt:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/stammy/dnscrypt-osx-client/69fdd9c44cc7e19c05608cfd463e55829de43416/DNSCrypt-Preference-Pane/DNSCrypt/extra/usr/bin/Uninstall.app/Contents/Resources/Scripts/main.scpt
--------------------------------------------------------------------------------
/DNSCrypt-Preference-Pane/DNSCrypt/extra/usr/bin/Uninstall.app/Contents/Resources/applet.icns:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/stammy/dnscrypt-osx-client/69fdd9c44cc7e19c05608cfd463e55829de43416/DNSCrypt-Preference-Pane/DNSCrypt/extra/usr/bin/Uninstall.app/Contents/Resources/applet.icns
--------------------------------------------------------------------------------
/DNSCrypt-Preference-Pane/DNSCrypt/extra/usr/bin/Uninstall.app/Contents/Resources/applet.rsrc:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/stammy/dnscrypt-osx-client/69fdd9c44cc7e19c05608cfd463e55829de43416/DNSCrypt-Preference-Pane/DNSCrypt/extra/usr/bin/Uninstall.app/Contents/Resources/applet.rsrc
--------------------------------------------------------------------------------
/DNSCrypt-Preference-Pane/DNSCrypt/extra/usr/bin/Uninstall.app/Contents/Resources/description.rtfd/TXT.rtf:
--------------------------------------------------------------------------------
1 | {\rtf1\ansi\ansicpg1252\cocoartf1265\cocoasubrtf200
2 | {\fonttbl}
3 | {\colortbl;\red255\green255\blue255;}
4 | }
--------------------------------------------------------------------------------
/DNSCrypt-Preference-Pane/DNSCrypt/extra/usr/bin/alarmer:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/stammy/dnscrypt-osx-client/69fdd9c44cc7e19c05608cfd463e55829de43416/DNSCrypt-Preference-Pane/DNSCrypt/extra/usr/bin/alarmer
--------------------------------------------------------------------------------
/DNSCrypt-Preference-Pane/DNSCrypt/extra/usr/bin/hostip:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/stammy/dnscrypt-osx-client/69fdd9c44cc7e19c05608cfd463e55829de43416/DNSCrypt-Preference-Pane/DNSCrypt/extra/usr/bin/hostip
--------------------------------------------------------------------------------
/DNSCrypt-Preference-Pane/DNSCrypt/extra/usr/bin/lockfile:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/stammy/dnscrypt-osx-client/69fdd9c44cc7e19c05608cfd463e55829de43416/DNSCrypt-Preference-Pane/DNSCrypt/extra/usr/bin/lockfile
--------------------------------------------------------------------------------
/DNSCrypt-Preference-Pane/DNSCrypt/extra/usr/bin/minisign-verify:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/stammy/dnscrypt-osx-client/69fdd9c44cc7e19c05608cfd463e55829de43416/DNSCrypt-Preference-Pane/DNSCrypt/extra/usr/bin/minisign-verify
--------------------------------------------------------------------------------
/DNSCrypt-Preference-Pane/DNSCrypt/extra/usr/lib/libldns.1.dylib:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/stammy/dnscrypt-osx-client/69fdd9c44cc7e19c05608cfd463e55829de43416/DNSCrypt-Preference-Pane/DNSCrypt/extra/usr/lib/libldns.1.dylib
--------------------------------------------------------------------------------
/DNSCrypt-Preference-Pane/DNSCrypt/extra/usr/lib/libldns.dylib:
--------------------------------------------------------------------------------
1 | libldns.2.dylib
--------------------------------------------------------------------------------
/DNSCrypt-Preference-Pane/DNSCrypt/extra/usr/scripts/afterboot.sh:
--------------------------------------------------------------------------------
1 | #! /bin/sh
2 |
3 | . ./common.inc
4 |
5 | rm -f "$BLOCKED_QUERY_LOG_FILE"
6 | rm -f "$QUERY_LOG_FILE"
7 | rm -f "$DEBUG_LOG_FILE"
8 | find -x "$RESOLVERS_LIST_STATE" -type f -mtime +1 -exec rm -f {} \; 2>/dev/null
9 | find -x "$APP_UPDATES_STATE" -type f -mtime +1 -exec rm -f {} \; 2>/dev/null
10 | find -x "$STATES_DIR" -type f -exec rm -f {} -exec rm -f {} \; 2>/dev/null
11 |
12 | ./clear-fw.sh
13 |
14 | exec ./handle-control-change.sh --boot
15 |
--------------------------------------------------------------------------------
/DNSCrypt-Preference-Pane/DNSCrypt/extra/usr/scripts/check-network-change.sh:
--------------------------------------------------------------------------------
1 | #! /bin/sh
2 |
3 | . ./common.inc
4 |
5 | NETWORK_STATE_FILE="${STATES_DIR}/network-state"
6 | DHCP_DNS_FILE="${STATES_DIR}/dhcp-dns"
7 | AIRPORT_TOOL="/System/Library/PrivateFrameworks/Apple80211.framework/Versions/A/Resources/airport"
8 |
9 | mkdir -p "$STATES_DIR" || exit 1
10 | ips=$(./get-dhcp-resolvers.sh)
11 | echo "$ips" > "$DHCP_DNS_FILE"
12 |
13 | ssid=$("$AIRPORT_TOOL" -I 2>&1 | fgrep '[^B]SSID: ')
14 | bssid=$("$AIRPORT_TOOL" -I 2>&1 | fgrep 'BSSID: ')
15 | if [ -f "$NETWORK_STATE_FILE" ]; then
16 | if echo "$ifs $ips $ssid $bssid" | \
17 | cmp -- "$NETWORK_STATE_FILE" - >/dev/null; then
18 | exit 1
19 | fi
20 | fi
21 | echo "$ifs $ips $ssid $bssid" > "$NETWORK_STATE_FILE"
22 |
--------------------------------------------------------------------------------
/DNSCrypt-Preference-Pane/DNSCrypt/extra/usr/scripts/clear-fw.sh:
--------------------------------------------------------------------------------
1 | #! /bin/sh
2 |
3 | . ./common.inc
4 |
5 | exec >/dev/null
6 | exec 2>&1
7 |
8 | SOCKETFILTERFW='/usr/libexec/ApplicationFirewall/socketfilterfw'
9 | [ -x "$SOCKETFILTERFW" ] || exit 0
10 |
11 | "$SOCKETFILTERFW" --add "${DNSCRYPT_USR_BASE_DIR}/sbin/dnscrypt-proxy"
12 | "$SOCKETFILTERFW" --unblockapp "${DNSCRYPT_USR_BASE_DIR}/sbin/dnscrypt-proxy"
13 |
14 | "$SOCKETFILTERFW" --add "${DNSCRYPT_USR_BASE_DIR}/bin/hostip"
15 | "$SOCKETFILTERFW" --unblockapp "${DNSCRYPT_USR_BASE_DIR}/bin/hostip"
16 |
--------------------------------------------------------------------------------
/DNSCrypt-Preference-Pane/DNSCrypt/extra/usr/scripts/common.inc:
--------------------------------------------------------------------------------
1 |
2 | CURRENT_VERSION=8
3 |
4 | DNSCRYPT_USR_BASE_DIR='/Library/PreferencePanes/DNSCrypt.prefPane/Contents/Resources/usr'
5 | DNSCRYPT_VAR_BASE_DIR='/Library/Application Support/DNSCrypt'
6 | DNSCRYPT_LOG_BASE_DIR='/var/log'
7 | DNSCRYPT_VAR_RUN_BASE_DIR='/var/run'
8 |
9 | cd -- "${DNSCRYPT_USR_BASE_DIR}/scripts" || exit 1
10 |
11 | CONTROL_DIR="${DNSCRYPT_VAR_BASE_DIR}/control"
12 | TICKETS_DIR="${DNSCRYPT_VAR_BASE_DIR}/tickets"
13 | DNSCRYPT_PROXY_BASE_DIR="${DNSCRYPT_VAR_BASE_DIR}/dnscrypt-proxy"
14 | PROXY_PID_FILE="${DNSCRYPT_VAR_RUN_BASE_DIR}/dnscrypt-proxy.pid"
15 | STATES_DIR="${DNSCRYPT_VAR_BASE_DIR}/states"
16 |
17 | DNSCRYPT_RESOLVER_NAME_FILE="${CONTROL_DIR}/dnscrypt-resolver-name"
18 | DNSCRYPT_FILE="${CONTROL_DIR}/dnscrypt"
19 | HIDE_MENUBAR_ICON_FILE="${CONTROL_DIR}/hide-menubar-icon"
20 | HANDLERS_LOCK_FILE="${DNSCRYPT_VAR_RUN_BASE_DIR}/dnscrypt-handlers.lock"
21 | DNSCRYPT_PROXY_PLUGINS_BASE_FILE="${CONTROL_DIR}/plugin"
22 | STATIC_RESOLVERS_FILE="${CONTROL_DIR}/static-resolvers"
23 | BLOCKED_QUERY_LOGGING_FILE="${CONTROL_DIR}/blocked-query-logging"
24 |
25 | DEBUG_ENABLED_FILE="${CONTROL_DIR}/debug.enabled"
26 |
27 | PLUGINS_ENABLED_FILE="${CONTROL_DIR}/plugins.enabled"
28 | CACHE_FILE="${CONTROL_DIR}/plugin-cache.enabled"
29 | QUERY_LOGGING_FILE="${CONTROL_DIR}/plugin-query-logging.enabled"
30 | BLOCKING_FILE="${CONTROL_DIR}/plugin-blocking.enabled"
31 | AAAA_BLOCKING_FILE="${CONTROL_DIR}/plugin-aaaa-blocking.enabled"
32 | FORWARDING_FILE="${CONTROL_DIR}/plugin-forwarding.enabled"
33 |
34 | BLOCKED_QUERY_LOG_FILE="${DNSCRYPT_LOG_BASE_DIR}/dnscrypt-blocked-query.log"
35 | QUERY_LOG_FILE="${DNSCRYPT_LOG_BASE_DIR}/dnscrypt-query.log"
36 | DEBUG_LOG_FILE="${DNSCRYPT_LOG_BASE_DIR}/dnscrypt-osxclient-debug.log"
37 | DEBUG_LOG_FILE_LOCK="${DEBUG_LOG_FILE}.lock"
38 |
39 | BLACKLIST_IPS_FILE="${CONTROL_DIR}/blacklist-ips"
40 | BLACKLIST_IPS_TMP_FILE="${BLACKLIST_IPS_FILE}.tmp"
41 | BLACKLIST_DOMAINS_FILE="${CONTROL_DIR}/blacklist-domains"
42 | BLACKLIST_DOMAINS_TMP_FILE="${BLACKLIST_DOMAINS_FILE}.tmp"
43 | EXCEPTIONS_FILE="${CONTROL_DIR}/exceptions"
44 | EXCEPTIONS_TMP_FILE="${EXCEPTIONS_FILE}.tmp"
45 |
46 | APP_UPDATES_BASE_URL="http://updates.dnscrypt.org/updates/dnscrypt-osx-client"
47 | APP_UPDATES_DIR="${DNSCRYPT_VAR_BASE_DIR}/updates"
48 | APP_UPDATES_PUBLIC_KEY="RWRvw8aArS/yEI3In0/zQSb9+qfWonLxjjEYG17cXt6zct6GLKtEvUfk"
49 | APP_UPDATES_STATE="${APP_UPDATES_DIR}/app-updated"
50 |
51 | RESOLVERS_UPDATES_BASE_URL="http://updates.dnscrypt.org/dnscrypt-proxy"
52 | RESOLVERS_LIST_BASE_DIR="${DNSCRYPT_USR_BASE_DIR}/share/dnscrypt-proxy"
53 | RESOLVERS_LIST_PUBLIC_KEY="RWQf6LRCGA9i53mlYecO4IzT51TGPpvWucNSCh1CBM0QTaLn73Y7GFO3"
54 | RESOLVERS_LIST_STATE="${STATES_DIR}/resolvers-updated"
55 |
56 | INTERFACE_PROXY="127.0.0.54"
57 | INTERFACE_PROXY_MASK="24"
58 |
59 | export PATH="${DNSCRYPT_USR_BASE_DIR}/sbin:${DNSCRYPT_USR_BASE_DIR}/bin:${DNSCRYPT_USR_BASE_DIR}/scripts:$PATH"
60 |
61 | init_interfaces() {
62 | /sbin/ifconfig lo0 alias ${INTERFACE_PROXY}/${INTERFACE_PROXY_MASK}
63 | }
64 |
65 | logger_debug() {
66 | [ -f "$DEBUG_ENABLED_FILE" ] || return
67 | lockfile -1 -r 1 "$DEBUG_LOG_FILE_LOCK" > /dev/null 2>&1
68 | echo "$(date) - $1" >> "$DEBUG_LOG_FILE"
69 | rm -f "$DEBUG_LOG_FILE_LOCK" 2> /dev/null
70 | }
71 |
--------------------------------------------------------------------------------
/DNSCrypt-Preference-Pane/DNSCrypt/extra/usr/scripts/create-ticket.sh:
--------------------------------------------------------------------------------
1 | #! /bin/sh
2 |
3 | . ./common.inc
4 |
5 | ticket_file=$(mktemp "$TICKETS_DIR/ticket-XXXXXXXXXX")
6 | [ -e "$ticket_file" ] || exit 1
7 | basename "$ticket_file"
8 |
--------------------------------------------------------------------------------
/DNSCrypt-Preference-Pane/DNSCrypt/extra/usr/scripts/get-aaaa-blocking-status.sh:
--------------------------------------------------------------------------------
1 | #! /bin/sh
2 |
3 | . ./common.inc
4 |
5 | if [ -e "$AAAA_BLOCKING_FILE" ]; then
6 | echo 'yes'
7 | else
8 | echo 'no'
9 | fi
10 |
--------------------------------------------------------------------------------
/DNSCrypt-Preference-Pane/DNSCrypt/extra/usr/scripts/get-blocked-query-logging-status.sh:
--------------------------------------------------------------------------------
1 | #! /bin/sh
2 |
3 | . ./common.inc
4 |
5 | if [ -e "$BLOCKED_QUERY_LOGGING_FILE" ]; then
6 | echo 'yes'
7 | else
8 | echo 'no'
9 | fi
10 |
--------------------------------------------------------------------------------
/DNSCrypt-Preference-Pane/DNSCrypt/extra/usr/scripts/get-current-default-domain.sh:
--------------------------------------------------------------------------------
1 | #! /bin/ksh
2 |
3 | . ./common.inc
4 |
5 | [ -r /etc/resolv.conf ] || exit 0
6 | domain=""
7 | while read line; do
8 | case "$line" in
9 | domain\ *)
10 | domain=$(echo "$line" | sed -e 's/domain *//' -e 's/ *//')
11 | break
12 | ;;
13 | esac
14 | done < /etc/resolv.conf
15 |
16 | echo "$domain"
17 |
--------------------------------------------------------------------------------
/DNSCrypt-Preference-Pane/DNSCrypt/extra/usr/scripts/get-current-resolvers.sh:
--------------------------------------------------------------------------------
1 | #! /bin/ksh
2 |
3 | . ./common.inc
4 |
5 | [ -r /etc/resolv.conf ] || exit 0
6 | ips_i=""
7 | while read line; do
8 | case "$line" in
9 | nameserver\ *)
10 | ip=$(echo "$line" | sed -e 's/nameserver *//' -e 's/ *//')
11 | ips_i="$ips_i $ip"
12 | ;;
13 | esac
14 | done < /etc/resolv.conf
15 |
16 | typeset -A found
17 | ips=""
18 | for ip_i in $ips_i; do
19 | if [ ! ${found["$ip_i"]} ]; then
20 | if [ "$ips" ]; then
21 | ips="$ips "
22 | fi
23 | ips="$ips$ip_i"
24 | found["$ip_i"]=1
25 | fi
26 | done
27 |
28 | echo "$ips"
29 |
--------------------------------------------------------------------------------
/DNSCrypt-Preference-Pane/DNSCrypt/extra/usr/scripts/get-dhcp-resolvers.sh:
--------------------------------------------------------------------------------
1 | #! /bin/ksh
2 |
3 | . ./common.inc
4 |
5 | get_ifs() {
6 | ifs_save="$IFS"
7 | IFS=''
8 | ifconfig -a | while read line; do
9 | nif=$(echo "$line" | egrep -i '^[^ ]+:\s+flags' | sed 's/:.*$//')
10 | isact=$(echo "$line" | egrep -i 'status:\s*active')
11 | if [ -n "$nif" ]; then
12 | cif="$nif"
13 | elif [ -n "$isact" -a -n "$cif" ]; then
14 | echo $cif
15 | fi
16 | done
17 | IFS="$ifs_save"
18 | }
19 |
20 | ifs=$(get_ifs)
21 |
22 | typeset -A found
23 | ips=""
24 | for i in $ifs; do
25 | ips_i=$(ipconfig getpacket "$i" 2> /dev/null | fgrep 'domain_name_server' | \
26 | sed -e 's/^.*{//' -e 's/,/ /g' -e 's/}//' )
27 | for ip_i in $ips_i; do
28 | if [ ! ${found["$ip_i"]} ]; then
29 | if [ "$ips" ]; then
30 | ips="$ips "
31 | fi
32 | ips="$ips$ip_i"
33 | found["$ip_i"]=1
34 | fi
35 | done
36 | done
37 |
38 | echo "$ips"
39 |
--------------------------------------------------------------------------------
/DNSCrypt-Preference-Pane/DNSCrypt/extra/usr/scripts/get-dnscrypt-resolver-name.sh:
--------------------------------------------------------------------------------
1 | #! /bin/sh
2 |
3 | . ./common.inc
4 |
5 | [ -r "$DNSCRYPT_RESOLVER_NAME_FILE" ] && \
6 | sed 's/[^a-zA-Z0-9.-]/_/g' < "$DNSCRYPT_RESOLVER_NAME_FILE" && exit 0
7 |
8 | exec ./get-random-resolver.sh
9 |
--------------------------------------------------------------------------------
/DNSCrypt-Preference-Pane/DNSCrypt/extra/usr/scripts/get-dnscrypt-status.sh:
--------------------------------------------------------------------------------
1 | #! /bin/sh
2 |
3 | . ./common.inc
4 |
5 | if [ -e "$DNSCRYPT_FILE" ]; then
6 | echo 'yes'
7 | else
8 | echo 'no'
9 | fi
10 |
--------------------------------------------------------------------------------
/DNSCrypt-Preference-Pane/DNSCrypt/extra/usr/scripts/get-hide-menubar-icon-status.sh:
--------------------------------------------------------------------------------
1 | #! /bin/sh
2 |
3 | . ./common.inc
4 |
5 | if [ -e "$HIDE_MENUBAR_ICON_FILE" ]; then
6 | echo 'yes'
7 | else
8 | echo 'no'
9 | fi
10 |
--------------------------------------------------------------------------------
/DNSCrypt-Preference-Pane/DNSCrypt/extra/usr/scripts/get-query-logging-status.sh:
--------------------------------------------------------------------------------
1 | #! /bin/sh
2 |
3 | . ./common.inc
4 |
5 | if [ -e "$QUERY_LOGGING_FILE" ]; then
6 | echo 'yes'
7 | else
8 | echo 'no'
9 | fi
10 |
--------------------------------------------------------------------------------
/DNSCrypt-Preference-Pane/DNSCrypt/extra/usr/scripts/get-random-resolver.sh:
--------------------------------------------------------------------------------
1 | #! /bin/sh
2 |
3 | . ./common.inc
4 |
5 | (read header; fgrep -v :: | cut -d, -f1 | egrep -v '^\s*$') \
6 | < "${RESOLVERS_LIST_BASE_DIR}/dnscrypt-resolvers.csv" | \
7 | perl -MList::Util=shuffle -e 'print shuffle();' | \
8 | head -n1
9 |
--------------------------------------------------------------------------------
/DNSCrypt-Preference-Pane/DNSCrypt/extra/usr/scripts/get-resolvers-description.sh:
--------------------------------------------------------------------------------
1 | #! /bin/sh
2 |
3 | . ./common.inc
4 |
5 | if [ -e "${STATES_DIR}/updating" ]; then
6 | echo 'Updating'
7 | exit 0
8 | fi
9 | name='None'
10 | level=0
11 | while read resolver; do
12 | case "$resolver" in
13 | 127.0.0.5*)
14 | if [ $level -le 80 ]; then
15 | name='DNSCrypt'
16 | level=80
17 | fi
18 | ;;
19 | 127.0.0.1)
20 | if [ $level -le 20 ]; then
21 | name='Localhost'
22 | level=20
23 | fi
24 | ;;
25 | ::1)
26 | if [ $level -le 30 ]; then
27 | name='Localhost IPv6'
28 | level=30
29 | fi
30 | ;;
31 | *)
32 | if [ $level -le 10 ]; then
33 | name='Default'
34 | level=10
35 | fi
36 | ;;
37 | esac
38 | done
39 | echo "$name"
40 |
--------------------------------------------------------------------------------
/DNSCrypt-Preference-Pane/DNSCrypt/extra/usr/scripts/get-static-resolvers.sh:
--------------------------------------------------------------------------------
1 | #! /bin/sh
2 |
3 | . ./common.inc
4 |
5 | [ -r "$STATIC_RESOLVERS_FILE" ] && cat "$STATIC_RESOLVERS_FILE" && exit 0
6 | exit 1
7 |
8 |
--------------------------------------------------------------------------------
/DNSCrypt-Preference-Pane/DNSCrypt/extra/usr/scripts/get-tickets-count.sh:
--------------------------------------------------------------------------------
1 | #! /bin/sh
2 |
3 | . ./common.inc
4 |
5 | exec find "$TICKETS_DIR" -type f -name 'ticket-*' | wc -l | sed 's/ *//g'
6 |
7 |
--------------------------------------------------------------------------------
/DNSCrypt-Preference-Pane/DNSCrypt/extra/usr/scripts/get-upstream-resolvers.sh:
--------------------------------------------------------------------------------
1 | #! /bin/sh
2 |
3 | . ./common.inc
4 |
5 | dnscrypt_proxy_used='no'
6 | upstream_resolvers=''
7 | while read resolver; do
8 | case "$resolver" in
9 | 127.0.0.5*)
10 | dnscrypt_proxy_used='yes'
11 | ;;
12 | esac
13 | if [ x"$upstream_resolvers" = 'x' ]; then
14 | upstream_resolvers="$resolver"
15 | else
16 | upstream_resolvers="${upstream_resolvers} $resolver"
17 | fi
18 | done
19 |
20 | if [ "$dnscrypt_proxy_used" = 'yes' \
21 | -a -r "${STATES_DIR}/dnscrypt-proxy-description" ]; then
22 | cat "${STATES_DIR}/dnscrypt-proxy-description" && exit 0
23 | fi
24 | echo "$upstream_resolvers"
25 | exit 0
26 |
27 |
--------------------------------------------------------------------------------
/DNSCrypt-Preference-Pane/DNSCrypt/extra/usr/scripts/gui-pop-conf-change.sh:
--------------------------------------------------------------------------------
1 | #! /bin/sh
2 |
3 | . ./common.inc
4 |
5 | [ $# != 1 ] && exit 1
6 |
7 | pname="$1"
8 | case "$pname" in
9 | menubar) ;;
10 | prefpane) ;;
11 | *) exit 1;;
12 | esac
13 |
14 | changed='no'
15 | if [ -e "${TICKETS_DIR}/gui-change-${pname}" ]; then
16 | rm -f "${TICKETS_DIR}/gui-change-${pname}"
17 | changed='yes'
18 | fi
19 |
20 | echo "$changed"
21 |
--------------------------------------------------------------------------------
/DNSCrypt-Preference-Pane/DNSCrypt/extra/usr/scripts/gui-push-conf-change.sh:
--------------------------------------------------------------------------------
1 | #! /bin/sh
2 |
3 | . ./common.inc
4 |
5 | [ $# != 1 ] && exit 1
6 |
7 | pname="$1"
8 | case "$pname" in
9 | menubar) ;;
10 | prefpane) ;;
11 | *) exit 1;;
12 | esac
13 |
14 | touch "${TICKETS_DIR}/gui-change-${pname}"
15 |
--------------------------------------------------------------------------------
/DNSCrypt-Preference-Pane/DNSCrypt/extra/usr/scripts/handle-console-change.sh:
--------------------------------------------------------------------------------
1 | #! /bin/sh
2 |
3 | . ./common.inc
4 |
5 | eval $(stat -s '/dev/console') || exit 1
6 |
7 | logger_debug "OSX console ownership changed"
8 |
9 | wanted_uid="$st_uid"
10 | if [ ! -d "$DNSCRYPT_VAR_BASE_DIR" ]; then
11 | mkdir -p "$DNSCRYPT_VAR_BASE_DIR" || exit 1
12 | chown -R 0:0 "$DNSCRYPT_VAR_BASE_DIR"
13 | chmod 755 "$DNSCRYPT_VAR_BASE_DIR"
14 | fi
15 | mkdir -m 755 -p "$TICKETS_DIR" || exit 1
16 | chown -R "${wanted_uid}:0" "$TICKETS_DIR"
17 |
18 | mkdir -m 755 -p "$APP_UPDATES_DIR" || exit 1
19 | chown -R "${wanted_uid}:0" "$APP_UPDATES_DIR"
20 |
21 | eval $(stat -s "$CONTROL_DIR") || exit 1
22 | if [ $? != 0 ]; then
23 | mkdir -m 755 -p "$CONTROL_DIR" || exit 1
24 | current_uid='nonexistent'
25 | else
26 | current_uid="$st_uid"
27 | fi
28 |
29 | [ x"$current_uid" != x"$wanted_uid" ] && \
30 | chown -R "${wanted_uid}:0" "$CONTROL_DIR"
31 |
32 | exec sleep 1
33 |
--------------------------------------------------------------------------------
/DNSCrypt-Preference-Pane/DNSCrypt/extra/usr/scripts/handle-control-change.sh:
--------------------------------------------------------------------------------
1 | #! /bin/sh
2 |
3 | . ./common.inc
4 |
5 | PROCESSED_TICKETS_FILE="${STATES_DIR}/processed-tickets"
6 |
7 | logger_debug handle_control_change
8 |
9 | update() {
10 | lockfile -1 -r 30 "$HANDLERS_LOCK_FILE" || exit 1
11 |
12 | if [ -e "$DNSCRYPT_FILE" ]; then
13 | ./switch-to-dnscrypt-if-required.sh
14 | else
15 | ./stop-dnscrypt-proxy.sh
16 | ./switch-to-dhcp-if-required.sh
17 | fi
18 |
19 | rm -f "$HANDLERS_LOCK_FILE"
20 | }
21 |
22 | touch "${STATES_DIR}/updating"
23 |
24 | updated='no'
25 | while :; do
26 | find "$TICKETS_DIR" -type f -name 'ticket-*' > "$PROCESSED_TICKETS_FILE"
27 | if [ ! -s "$PROCESSED_TICKETS_FILE" -a "$updated" = 'yes' ]; then
28 | break
29 | fi
30 | logger_debug "New tickets found"
31 | find "$CONTROL_DIR" -type f -name '[a-zA-Z0-9]*' \! -name '*.tmp' \
32 | -exec md5 {} \; > "${STATES_DIR}/controls.cksum.new"
33 | if cmp -s "${STATES_DIR}/controls.cksum.new" "${STATES_DIR}/controls.cksum"; then
34 | logger_debug "Content of the controls dir actually didn't change"
35 | else
36 | update
37 | mv -f "${STATES_DIR}/controls.cksum.new" "${STATES_DIR}/controls.cksum"
38 | fi
39 | updated='yes'
40 | while read ticket_file; do
41 | rm -f "$ticket_file"
42 | done < "$PROCESSED_TICKETS_FILE"
43 | done
44 |
45 | rm -f "${STATES_DIR}/updating"
46 | rm -f "${STATES_DIR}/update-request"
47 |
--------------------------------------------------------------------------------
/DNSCrypt-Preference-Pane/DNSCrypt/extra/usr/scripts/handle-network-change.sh:
--------------------------------------------------------------------------------
1 | #! /bin/sh
2 |
3 | . ./common.inc
4 |
5 | tickets_count=$(./get-tickets-count.sh)
6 | [ "$tickets_count" != '0' ] && exit 0
7 |
8 | if [ x"$1" != 'x--boot' ]; then
9 | ./check-network-change.sh || exit 0
10 | fi
11 |
12 | logger_debug "Network configuration changed"
13 |
14 | lockfile -1 -r 30 "$HANDLERS_LOCK_FILE" || exit 1
15 | ./set-dns-to-dhcp.sh
16 | if [ ! -e "$DNSCRYPT_FILE" ]; then
17 | rm -f "$HANDLERS_LOCK_FILE"
18 | exit 0
19 | fi
20 |
21 | rm -f "${STATES_DIR}/controls.cksum"
22 |
23 | ./switch-to-dnscrypt-if-required.sh
24 | rm -f "$HANDLERS_LOCK_FILE"
25 |
--------------------------------------------------------------------------------
/DNSCrypt-Preference-Pane/DNSCrypt/extra/usr/scripts/set-dns-to-dhcp.sh:
--------------------------------------------------------------------------------
1 | #! /bin/sh
2 |
3 | . ./common.inc
4 |
5 | servers='empty'
6 |
7 | logger_debug "Changing the DNS configuration to use the default DNS resolvers"
8 |
9 | if [ -r "$STATIC_RESOLVERS_FILE" ]; then
10 | servers=''
11 | while read server; do
12 | case "$server" in
13 | [0-9a-fA-F:.]*) servers="${servers} ${server}" ;;
14 | esac
15 | done < "$STATIC_RESOLVERS_FILE"
16 | [ -z "$servers" ] && servers='empty'
17 | logger_debug "Static list of DNS resolvers: [$servers]"
18 | fi
19 |
20 | exec networksetup -listallnetworkservices 2>/dev/null | \
21 | fgrep -v '*' | while read x ; do
22 | networksetup -setdnsservers "$x" $servers > /dev/null
23 | done
24 |
25 | logger_debug "Flushing the local DNS cache"
26 |
27 | dscacheutil -flushcache 2> /dev/null
28 | killall -HUP mDNSResponder 2> /dev/null
29 | exit 0
30 |
--------------------------------------------------------------------------------
/DNSCrypt-Preference-Pane/DNSCrypt/extra/usr/scripts/set-dns.sh:
--------------------------------------------------------------------------------
1 | #! /bin/sh
2 |
3 | . ./common.inc
4 |
5 | servers="$*"
6 |
7 | [ $# -lt 1 ] && exit 1
8 |
9 | logger_debug "Setting DNS resolvers to [$servers]"
10 |
11 | exec networksetup -listallnetworkservices 2>/dev/null | \
12 | fgrep -v '*' | while read x ; do
13 | networksetup -setdnsservers "$x" $servers
14 | done
15 |
16 | logger_debug "Flushing local DNS cache"
17 |
18 | dscacheutil -flushcache 2> /dev/null
19 | killall -HUP mDNSResponder 2> /dev/null
20 | exit 0
21 |
--------------------------------------------------------------------------------
/DNSCrypt-Preference-Pane/DNSCrypt/extra/usr/scripts/set-dnscrypt-resolver-name.sh:
--------------------------------------------------------------------------------
1 | #! /bin/sh
2 |
3 | . ./common.inc
4 |
5 | [ $# -lt 1 ] && exit 1
6 |
7 | resolver_name="$1"
8 |
9 | if [ "$resolver_name" = "" ]; then
10 | rm -f "$DNSCRYPT_RESOLVER_NAME_FILE"
11 | else
12 | echo "$resolver_name" | sed 's/^ *//;s/ *$//' \
13 | > "$DNSCRYPT_RESOLVER_NAME_FILE"
14 | fi
15 |
--------------------------------------------------------------------------------
/DNSCrypt-Preference-Pane/DNSCrypt/extra/usr/scripts/set-static-resolvers.sh:
--------------------------------------------------------------------------------
1 | #! /bin/sh
2 |
3 | . ./common.inc
4 |
5 | args="$*"
6 |
7 | [ $# -lt 1 ] && exit 1
8 |
9 | servers=''
10 | for server in $args; do
11 | servers="${servers} ${server}"
12 | done
13 | if [ "$servers" = "" ]; then
14 | rm -f "$STATIC_RESOLVERS_FILE"
15 | else
16 | echo "$servers" | sed 's/^ *//;s/ *$//' > "$STATIC_RESOLVERS_FILE"
17 | fi
18 |
19 | exec ./switch-exceptions-on.sh
20 |
--------------------------------------------------------------------------------
/DNSCrypt-Preference-Pane/DNSCrypt/extra/usr/scripts/start-dnscrypt-proxy.sh:
--------------------------------------------------------------------------------
1 | #! /bin/sh
2 |
3 | . ./common.inc
4 |
5 | CERTIFICATE_MIN_VALIDITY=60
6 |
7 | DNSCRYPT_LIB_BASE_DIR="${DNSCRYPT_USR_BASE_DIR}/lib"
8 | export DYLD_LIBRARY_PATH="${DNSCRYPT_LIB_BASE_DIR}:${DYLD_LIBRARY_PATH}"
9 |
10 | init_interfaces
11 |
12 | mkdir -p -- "$DNSCRYPT_VAR_BASE_DIR" || exit 1
13 |
14 | PROBES_BASE_DIR="${DNSCRYPT_VAR_BASE_DIR}/probes"
15 | rm -fr "$PROBES_BASE_DIR" || exit 1
16 | mkdir -p -- "$PROBES_BASE_DIR" || exit 1
17 |
18 | RES_DIR="${PROBES_BASE_DIR}/results" || exit 1
19 | mkdir -p -- "$RES_DIR" || exit 1
20 |
21 | DESCRIPTIONS_DIR="${PROBES_BASE_DIR}/results-descriptions" || exit 1
22 | mkdir -p -- "$DESCRIPTIONS_DIR" || exit 1
23 |
24 | PID_DIR="${PROBES_BASE_DIR}/pids" || exit 1
25 | mkdir -p -- "$PID_DIR" || exit 1
26 |
27 | RESOLVER_NAME=$(./get-dnscrypt-resolver-name.sh) || exit 1
28 |
29 | try_resolver() {
30 | local priority="$1"
31 | shift
32 | local description="$1"
33 | shift
34 | local args="$*"
35 | local pid_file="${PID_DIR}/${priority}.pid"
36 |
37 | logger_debug "Running a test dnscrypt proxy for [$description]"
38 | rm -f "${RES_DIR}/${priority}"
39 | alarmer 3 dnscrypt-proxy --pid="$pid_file" \
40 | --resolver-name="$RESOLVER_NAME" \
41 | --test="$CERTIFICATE_MIN_VALIDITY" $args
42 | if [ $? = 0 ]; then
43 | logger_debug "Certificate for [$description] received"
44 | echo "$args" > "${RES_DIR}/${priority}"
45 | echo "$description" > "${DESCRIPTIONS_DIR}/${priority}"
46 | fi
47 | rm -f "$pid_file"
48 | }
49 |
50 | get_plugin_args() {
51 | cat "$DNSCRYPT_PROXY_PLUGINS_BASE_FILE"[s-]*.enabled | { \
52 | local plugin_args=''
53 | local quoted_line
54 |
55 | while read line; do
56 | case "$line" in
57 | libdcplugin_*) plugin_args="${plugin_args} --plugin=${line}" ;;
58 | esac
59 | done
60 | logger_debug "Plugins to be used: [$plugin_args]"
61 | echo "$plugin_args"
62 | }
63 | }
64 |
65 | logger_debug "dnscrypt-proxy should be (re)started, stopping previous instance if needed"
66 | ./stop-dnscrypt-proxy.sh
67 |
68 | wait_pids=""
69 |
70 | try_resolver 1 "${RESOLVER_NAME} using DNSCrypt over UDP" \
71 | "--resolver-name=$RESOLVER_NAME" &
72 | wait_pids="$wait_pids $!"
73 |
74 | try_resolver 2 "${RESOLVER_NAME} using DNSCrypt over TCP" \
75 | "--resolver-name=$RESOLVER_NAME --tcp-only" &
76 | wait_pids="$wait_pids $!"
77 |
78 | for pid in $wait_pids; do
79 | wait
80 | best_file=$(ls "$RES_DIR" | head -n 1)
81 | [ x"$best_file" != "x" ] && break
82 | if [ ! -e "$DNSCRYPT_FILE" ]; then
83 | logger_debug "Aborted by user"
84 | exit 1
85 | fi
86 | done
87 |
88 | if [ x"$best_file" = "x" ]; then
89 | logger_debug "No usable proxy configuration has been found"
90 | exit 1
91 | fi
92 |
93 | ./switch-cache-on.sh
94 |
95 | plugins_args=''
96 | if [ -r "${DNSCRYPT_PROXY_PLUGINS_BASE_FILE}s.enabled" ]; then
97 | plugin_args=$(get_plugin_args)
98 | fi
99 |
100 | best_args=$(cat "${RES_DIR}/${best_file}")
101 |
102 | logger_debug "Starting dnscrypt-proxy $best_args"
103 | eval dnscrypt-proxy $best_args --local-address="$INTERFACE_PROXY" \
104 | --resolver-name="$RESOLVER_NAME" --ephemeral-keys \
105 | --pidfile="$PROXY_PID_FILE" --user=daemon --daemonize $plugin_args
106 |
107 | if [ $? != 0 ]; then
108 | [ -r "$PROXY_PID_FILE" ] && kill $(cat -- "$PROXY_PID_FILE")
109 | logger_debug "dnscrypt-proxy $best_args command failed, retrying"
110 | sleep 1
111 | killall dnscrypt-proxy
112 | sleep 1
113 | rm -f "$PROXY_PID_FILE"
114 | killall -9 dnscrypt-proxy
115 | sleep 1
116 | eval dnscrypt-proxy $best_args --local-address="$INTERFACE_PROXY" \
117 | --resolver-name="$RESOLVER_NAME" \
118 | --pidfile="$PROXY_PID_FILE" --user=daemon --daemonize $plugin_args || \
119 | exit 1
120 | logger_debug "dnscrypt-proxy $best_args worked after a retry"
121 | fi
122 |
123 | mv "${DESCRIPTIONS_DIR}/${best_file}" \
124 | "${STATES_DIR}/dnscrypt-proxy-description" 2>/dev/null || exit 0
125 |
126 | [ -e "$RESOLVERS_LIST_STATE" ] && exit 0
127 | touch "$RESOLVERS_LIST_STATE"
128 | exec ./update-resolvers-list.sh
129 |
--------------------------------------------------------------------------------
/DNSCrypt-Preference-Pane/DNSCrypt/extra/usr/scripts/stop-dnscrypt-proxy.sh:
--------------------------------------------------------------------------------
1 | #! /bin/sh
2 |
3 | . ./common.inc
4 |
5 | logger_debug "Stopping dnscrypt-proxy"
6 |
7 | if [ -x /usr/bin/pgrep ]; then
8 | pgrep -x dnscrypt-proxy | egrep '[0-9]+' > /dev/null || exit 0
9 | fi
10 |
11 | [ ! -r "$PROXY_PID_FILE" ] && exit 0
12 | pid=$(cat "$PROXY_PID_FILE")
13 | [ $pid -lt 2 ] && exit 0
14 |
15 | logger_debug "Trying to stop dnscrypt-proxy by killing pid [$pid]"
16 | kill $pid
17 |
18 | i=0
19 | while [ $i -lt 30 ]; do
20 | [ ! -r "$PROXY_PID_FILE" ] && exit 0
21 | sleep 0.1
22 | i=$((i + 1))
23 | done
24 |
25 | rm -f "$PROXY_PID_FILE"
26 | kill -9 $pid
27 |
28 | logger_debug "Killed dnscrypt-proxy with kill -9 pid [$pid]"
29 |
--------------------------------------------------------------------------------
/DNSCrypt-Preference-Pane/DNSCrypt/extra/usr/scripts/switch-aaaa-blocking-off.sh:
--------------------------------------------------------------------------------
1 | #! /bin/sh
2 |
3 | . ./common.inc
4 |
5 | rm -f "$AAAA_BLOCKING_FILE"
6 |
--------------------------------------------------------------------------------
/DNSCrypt-Preference-Pane/DNSCrypt/extra/usr/scripts/switch-aaaa-blocking-on.sh:
--------------------------------------------------------------------------------
1 | #! /bin/sh
2 |
3 | . ./common.inc
4 |
5 | echo "libdcplugin_example_ldns_aaaa_blocking.la" > "$AAAA_BLOCKING_FILE"
6 |
7 | touch "$PLUGINS_ENABLED_FILE"
8 |
--------------------------------------------------------------------------------
/DNSCrypt-Preference-Pane/DNSCrypt/extra/usr/scripts/switch-blacklists-off.sh:
--------------------------------------------------------------------------------
1 | #! /bin/sh
2 |
3 | . ./common.inc
4 |
5 | exec rm -f "$BLOCKING_FILE"
6 |
--------------------------------------------------------------------------------
/DNSCrypt-Preference-Pane/DNSCrypt/extra/usr/scripts/switch-blacklists-on.sh:
--------------------------------------------------------------------------------
1 | #! /bin/sh
2 |
3 | . ./common.inc
4 |
5 | plugin_args=''
6 |
7 | [ -s "$BLACKLIST_IPS_FILE" ] && \
8 | plugin_args="${plugin_args},--ips='${BLACKLIST_IPS_FILE}'"
9 |
10 | [ -s "$BLACKLIST_DOMAINS_FILE" ] && \
11 | plugin_args="${plugin_args},--domains='${BLACKLIST_DOMAINS_FILE}'"
12 |
13 | [ -e "$BLOCKED_QUERY_LOGGING_FILE" ] && \
14 | plugin_args="${plugin_args},--logfile='${BLOCKED_QUERY_LOG_FILE}'"
15 |
16 | [ -z "$plugin_args" ] && exec ./switch-blacklists-off.sh
17 |
18 | echo "libdcplugin_example_ldns_blocking.la${plugin_args}" > \
19 | "$BLOCKING_FILE"
20 | touch "$PLUGINS_ENABLED_FILE"
21 |
--------------------------------------------------------------------------------
/DNSCrypt-Preference-Pane/DNSCrypt/extra/usr/scripts/switch-blocked-query-logging-off.sh:
--------------------------------------------------------------------------------
1 | #! /bin/sh
2 |
3 | . ./common.inc
4 |
5 | rm -f "$BLOCKED_QUERY_LOGGING_FILE"
6 |
7 | exec ./switch-blacklists-on.sh
8 |
9 |
10 |
--------------------------------------------------------------------------------
/DNSCrypt-Preference-Pane/DNSCrypt/extra/usr/scripts/switch-blocked-query-logging-on.sh:
--------------------------------------------------------------------------------
1 | #! /bin/sh
2 |
3 | . ./common.inc
4 |
5 | touch "$BLOCKED_QUERY_LOGGING_FILE"
6 |
7 | exec ./switch-blacklists-on.sh
8 |
--------------------------------------------------------------------------------
/DNSCrypt-Preference-Pane/DNSCrypt/extra/usr/scripts/switch-cache-off.sh:
--------------------------------------------------------------------------------
1 | #! /bin/sh
2 |
3 | . ./common.inc
4 |
5 | rm -f "$CACHE_FILE"
6 |
7 |
--------------------------------------------------------------------------------
/DNSCrypt-Preference-Pane/DNSCrypt/extra/usr/scripts/switch-cache-on.sh:
--------------------------------------------------------------------------------
1 | #! /bin/sh
2 |
3 | . ./common.inc
4 |
5 | echo "libdcplugin_example_cache.la" > \
6 | "$CACHE_FILE"
7 |
8 | touch "$PLUGINS_ENABLED_FILE"
9 |
--------------------------------------------------------------------------------
/DNSCrypt-Preference-Pane/DNSCrypt/extra/usr/scripts/switch-exceptions-off.sh:
--------------------------------------------------------------------------------
1 | #! /bin/sh
2 |
3 | . ./common.inc
4 |
5 | rm -f "$FORWARDING_FILE"
6 |
--------------------------------------------------------------------------------
/DNSCrypt-Preference-Pane/DNSCrypt/extra/usr/scripts/switch-exceptions-on.sh:
--------------------------------------------------------------------------------
1 | #! /bin/sh
2 |
3 | . ./common.inc
4 |
5 | get_gw() {
6 | route -n get default | while read line; do
7 | case "$line" in
8 | gateway:\ *)
9 | echo "$line" | sed 's/ *gateway: *//'
10 | return
11 | ;;
12 | esac
13 | done
14 | }
15 |
16 | get_dhcp_dns() {
17 | cat "$DHCP_DNS_FILE" 2> /dev/null | egrep -i '^[0-9a-f:.]+$'
18 | }
19 |
20 | [ -s "$EXCEPTIONS_FILE" ] || exec ./switch-exceptions-off.sh
21 |
22 | domains=''
23 | while read domain; do
24 | domains="${domain} ${domains}"
25 | done < "$EXCEPTIONS_FILE"
26 |
27 | [ -z "$domains" ] && exec ./switch-exceptions-off.sh
28 |
29 | resolvers=$(./get-static-resolvers.sh || get_dhcp_dns || get_gw)
30 |
31 | [ -z "$resolvers" ] && exec ./switch-exceptions-off.sh
32 |
33 | plugin_args=''
34 | plugin_args="${plugin_args},--domains='${domains}'"
35 | plugin_args="${plugin_args},--resolvers='${resolvers}'"
36 |
37 | echo "libdcplugin_example_ldns_forwarding.la${plugin_args}" > \
38 | "$FORWARDING_FILE"
39 | touch "$PLUGINS_ENABLED_FILE"
40 |
--------------------------------------------------------------------------------
/DNSCrypt-Preference-Pane/DNSCrypt/extra/usr/scripts/switch-hide-menubar-icon-off.sh:
--------------------------------------------------------------------------------
1 | #! /bin/sh
2 |
3 | . ./common.inc
4 |
5 | rm -f "$HIDE_MENUBAR_ICON_FILE"
6 |
--------------------------------------------------------------------------------
/DNSCrypt-Preference-Pane/DNSCrypt/extra/usr/scripts/switch-hide-menubar-icon-on.sh:
--------------------------------------------------------------------------------
1 | #! /bin/sh
2 |
3 | . ./common.inc
4 |
5 | touch "$HIDE_MENUBAR_ICON_FILE"
6 |
--------------------------------------------------------------------------------
/DNSCrypt-Preference-Pane/DNSCrypt/extra/usr/scripts/switch-query-logging-off.sh:
--------------------------------------------------------------------------------
1 | #! /bin/sh
2 |
3 | . ./common.inc
4 |
5 | rm -f "$QUERY_LOGGING_FILE"
6 |
7 |
--------------------------------------------------------------------------------
/DNSCrypt-Preference-Pane/DNSCrypt/extra/usr/scripts/switch-query-logging-on.sh:
--------------------------------------------------------------------------------
1 | #! /bin/sh
2 |
3 | . ./common.inc
4 |
5 | echo "libdcplugin_example_logging.la,${QUERY_LOG_FILE}" > \
6 | "$QUERY_LOGGING_FILE"
7 |
8 | touch "$PLUGINS_ENABLED_FILE"
9 |
--------------------------------------------------------------------------------
/DNSCrypt-Preference-Pane/DNSCrypt/extra/usr/scripts/switch-to-dhcp-if-required.sh:
--------------------------------------------------------------------------------
1 | #! /bin/sh
2 |
3 | . ./common.inc
4 |
5 | [ -e "$DNSCRYPT_FILE" ] && exit 0
6 |
7 | ./exceptions-remove.sh
8 | exec ./set-dns-to-dhcp.sh
9 |
--------------------------------------------------------------------------------
/DNSCrypt-Preference-Pane/DNSCrypt/extra/usr/scripts/switch-to-dhcp.sh:
--------------------------------------------------------------------------------
1 | #! /bin/sh
2 |
3 | . ./common.inc
4 |
5 | rm -f "$DNSCRYPT_FILE"
6 |
7 |
--------------------------------------------------------------------------------
/DNSCrypt-Preference-Pane/DNSCrypt/extra/usr/scripts/switch-to-dnscrypt-if-required.sh:
--------------------------------------------------------------------------------
1 | #! /bin/ksh
2 |
3 | . ./common.inc
4 |
5 | PAUSE_MAX=50
6 | PAUSE_UNIT=0.1
7 | PAUSE_INCREMENT=1
8 |
9 | [ ! -e "$DNSCRYPT_FILE" ] && exit 0
10 |
11 | logger_debug "DNSCrypt has been requested"
12 |
13 | pause=0
14 | while [ -e "$DNSCRYPT_FILE" ]; do
15 | logger_debug "Switching to dnscrypt if required (pause=$pause)"
16 | current_resolvers=$(./get-current-resolvers.sh)
17 | if [ "$current_resolvers" = "$INTERFACE_PROXY" ]; then
18 | if [ ! -e "$PROXY_PID_FILE" ]; then
19 | rm -f "${STATES_DIR}/controls.cksum"
20 | logger_debug "The proxy should be running but it isn't."
21 | ./switch-to-dhcp.sh
22 | fi
23 | fi
24 | pause_counter=0
25 | while [ -e "$DNSCRYPT_FILE" -a $pause_counter -lt $pause ]; do
26 | sleep $PAUSE_UNIT
27 | pause_counter=$((pause_counter + 1))
28 | done
29 | [ $pause -lt $PAUSE_MAX ] && pause=$((pause + 1))
30 | [ ! -e "$DNSCRYPT_FILE" ] && break
31 | ./start-dnscrypt-proxy.sh || continue
32 | ./set-dns.sh "$INTERFACE_PROXY"
33 | if [ $? != 0 ]; then
34 | logger_debug "Setting the DNS to [$INTERFACE_PROXY] didn't work"
35 | ./set-dns-to-dhcp.sh
36 | continue
37 | fi
38 | break
39 | done
40 |
41 | if [ ! -e "$DNSCRYPT_FILE" ]; then
42 | touch "$CONTROL_DIR"
43 | exit 0
44 | fi
45 |
46 | exec ./exceptions-add.sh
47 |
--------------------------------------------------------------------------------
/DNSCrypt-Preference-Pane/DNSCrypt/extra/usr/scripts/switch-to-dnscrypt.sh:
--------------------------------------------------------------------------------
1 | #! /bin/sh
2 |
3 | . ./common.inc
4 |
5 | touch "$DNSCRYPT_FILE"
6 |
--------------------------------------------------------------------------------
/DNSCrypt-Preference-Pane/DNSCrypt/extra/usr/scripts/update-blacklist-domains.sh:
--------------------------------------------------------------------------------
1 | #! /bin/sh
2 |
3 | . ./common.inc
4 |
5 | if [ ! -s "$BLACKLIST_DOMAINS_TMP_FILE" ]; then
6 | rm -f "$BLACKLIST_DOMAINS_FILE" "$BLACKLIST_DOMAINS_TMP_FILE"
7 | exec ./switch-blacklists-on.sh
8 | fi
9 |
10 | tr -s '[:blank:]' '\n' < "$BLACKLIST_DOMAINS_TMP_FILE" | \
11 | egrep -i '^[*]?[.]?[^.][a-z0-9_.-]+[*]?$' > \
12 | "${BLACKLIST_DOMAINS_TMP_FILE}~" &&
13 | mv "${BLACKLIST_DOMAINS_TMP_FILE}~" "$BLACKLIST_DOMAINS_FILE"
14 |
15 | exec ./switch-blacklists-on.sh
16 |
--------------------------------------------------------------------------------
/DNSCrypt-Preference-Pane/DNSCrypt/extra/usr/scripts/update-blacklist-ips.sh:
--------------------------------------------------------------------------------
1 | #! /bin/sh
2 |
3 | . ./common.inc
4 |
5 | if [ ! -s "$BLACKLIST_IPS_TMP_FILE" ]; then
6 | rm -f "$BLACKLIST_IPS_FILE" "$BLACKLIST_IPS_TMP_FILE"
7 | exec ./switch-blacklists-on.sh
8 | fi
9 |
10 | tr -s '[:blank:]' '\n' < "$BLACKLIST_IPS_TMP_FILE" | \
11 | egrep -i '^[0-9a-fA-F:.]+([.][*])?$' > \
12 | "${BLACKLIST_IPS_TMP_FILE}~" &&
13 | mv "${BLACKLIST_IPS_TMP_FILE}~" "$BLACKLIST_IPS_FILE"
14 |
15 | exec ./switch-blacklists-on.sh
16 |
--------------------------------------------------------------------------------
/DNSCrypt-Preference-Pane/DNSCrypt/extra/usr/scripts/update-dnscrypt-app.sh:
--------------------------------------------------------------------------------
1 | #! /bin/sh
2 |
3 | . ./common.inc
4 |
5 | DNSCRYPT_LIB_BASE_DIR="${DNSCRYPT_USR_BASE_DIR}/lib"
6 | export DYLD_LIBRARY_PATH="${DNSCRYPT_LIB_BASE_DIR}:${DYLD_LIBRARY_PATH}"
7 |
8 | TARGET_DIR=~/Desktop
9 |
10 | [ -e "$APP_UPDATES_STATE" ] && exit 0
11 | touch "$APP_UPDATES_STATE" || exit 1
12 |
13 | [ -d "$TARGET_DIR" ] || exit 1
14 | mkdir -p "$APP_UPDATES_DIR" || exit 1
15 |
16 | curl -L --max-redirs 5 -4 -m 30 --connect-timeout 30 -s \
17 | "${APP_UPDATES_BASE_URL}/versions.txt" > "${APP_UPDATES_DIR}/versions.txt" || exit 1
18 |
19 | CURRENT_HASH=$(shasum -a 512 "${APP_UPDATES_DIR}/versions.txt")
20 | OLD_HASH=$(cat "${APP_UPDATES_DIR}/versions_hash" 2> /dev/null)
21 | [ "x$CURRENT_HASH" = "x$OLD_HASH" ] && exit 0
22 |
23 | curl -L --max-redirs 5 -4 -m 30 --connect-timeout 30 -s \
24 | "${APP_UPDATES_BASE_URL}/versions.txt.minisig" > "${APP_UPDATES_DIR}/versions.txt.minisig" || exit 1
25 |
26 | minisign-verify -q -V -P "$APP_UPDATES_PUBLIC_KEY" -m "${APP_UPDATES_DIR}/versions.txt" || exit 1
27 | rm -f "${APP_UPDATES_DIR}/versions.txt.minisig"
28 |
29 | OS_VERSION=$(sw_vers -productVersion | sed 's/[^0-9.]$//' | cut -d. -f1-2) || exit 0
30 | AVAILABLE=$(egrep "^${OS_VERSION} " "${APP_UPDATES_DIR}/versions.txt") || exit 0
31 | rm -f "${APP_UPDATES_DIR}/versions.txt"
32 | AVAILABLE_VERSION=$(echo "$AVAILABLE" | cut -d' ' -f2 | sed 's/[^0-9]//g')
33 | DOWNLOAD_URL=$(echo "$AVAILABLE" | cut -d' ' -f3 | sed 's/ //g')
34 | DOWNLOADED_FILE="${TARGET_DIR}/dnscrypt-update-${AVAILABLE_VERSION}.dmg"
35 | [ -f "$DOWNLOADED_FILE" ] && exit 0
36 | [ -z "$AVAILABLE_VERSION" -o -z "$DOWNLOAD_URL" ] && exit 1
37 | [ "$AVAILABLE_VERSION" -gt "$CURRENT_VERSION" ] || exit 0
38 | SIG_DOWNLOAD_URL="${DOWNLOAD_URL}.minisig"
39 |
40 | curl -L --max-redirs 5 -4 -m 30 --connect-timeout 30 -s \
41 | "$SIG_DOWNLOAD_URL" > "${APP_UPDATES_DIR}/update.tmp.minisig" || exit 1
42 |
43 | curl -L --max-redirs 5 -4 -m 300 --connect-timeout 30 -s --compress \
44 | "$DOWNLOAD_URL" > "${APP_UPDATES_DIR}/update.tmp" || exit 1
45 |
46 | minisign-verify -q -V -P "$APP_UPDATES_PUBLIC_KEY" -m "${APP_UPDATES_DIR}/update.tmp" || exit 1
47 | rm -f "${APP_UPDATES_DIR}/update.tmp.minisig"
48 |
49 | mv -f "${APP_UPDATES_DIR}/update.tmp" "$DOWNLOADED_FILE" || exit 1
50 | echo "$CURRENT_HASH" > "${APP_UPDATES_DIR}/versions_hash"
51 |
52 | osascript -e "display notification \"A new version of DNSCrypt has been downloaded and saved on your desktop. Install it whenever you want!\" with title \"A new version of DNSCrypt is available!\" sound name \"Hero\""
53 |
--------------------------------------------------------------------------------
/DNSCrypt-Preference-Pane/DNSCrypt/extra/usr/scripts/update-exceptions.sh:
--------------------------------------------------------------------------------
1 | #! /bin/sh
2 |
3 | . ./common.inc
4 |
5 | if [ ! -s "$EXCEPTIONS_TMP_FILE" ]; then
6 | rm -f "$EXCEPTIONS_FILE" "$EXCEPTIONS_TMP_FILE"
7 | exec ./switch-exceptions-off.sh
8 | fi
9 |
10 | tr -s '[:blank:]' '\n' < "$EXCEPTIONS_TMP_FILE" | \
11 | sed -e 's/^ *[*]*[.]*//' -e 's/ *$//' | \
12 | egrep -i '^\s*[0-9a-z_.-]+\s*$' > "${EXCEPTIONS_TMP_FILE}~" &&
13 | mv "${EXCEPTIONS_TMP_FILE}~" "$EXCEPTIONS_FILE"
14 |
15 | exec ./switch-exceptions-on.sh
16 |
--------------------------------------------------------------------------------
/DNSCrypt-Preference-Pane/DNSCrypt/extra/usr/scripts/update-resolvers-list.sh:
--------------------------------------------------------------------------------
1 | #! /bin/sh
2 |
3 | . ./common.inc
4 |
5 | DNSCRYPT_LIB_BASE_DIR="${DNSCRYPT_USR_BASE_DIR}/lib"
6 | export DYLD_LIBRARY_PATH="${DNSCRYPT_LIB_BASE_DIR}:${DYLD_LIBRARY_PATH}"
7 |
8 | logger_debug "Checking if updates to the resolvers list are available"
9 |
10 | curl -L --max-redirs 5 -4 -m 30 --connect-timeout 30 -s \
11 | "${RESOLVERS_UPDATES_BASE_URL}/dnscrypt-resolvers.csv" > \
12 | "${RESOLVERS_LIST_BASE_DIR}/dnscrypt-resolvers.csv.tmp" &&
13 | curl -L --max-redirs 5 -4 -m 30 --connect-timeout 30 -s \
14 | "${RESOLVERS_UPDATES_BASE_URL}/dnscrypt-resolvers.csv.minisig" > \
15 | "${RESOLVERS_LIST_BASE_DIR}/dnscrypt-resolvers.csv.minisig" &&
16 | minisign-verify -Vm ${RESOLVERS_LIST_BASE_DIR}/dnscrypt-resolvers.csv.tmp \
17 | -x "${RESOLVERS_LIST_BASE_DIR}/dnscrypt-resolvers.csv.minisig" \
18 | -P "$RESOLVERS_LIST_PUBLIC_KEY" -q &&
19 | mv -f ${RESOLVERS_LIST_BASE_DIR}/dnscrypt-resolvers.csv.tmp \
20 | ${RESOLVERS_LIST_BASE_DIR}/dnscrypt-resolvers.csv
21 |
22 | logger_debug "Resolvers list is up to date"
23 |
--------------------------------------------------------------------------------
/DNSCrypt-Preference-Pane/DNSCrypt/led_green.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/stammy/dnscrypt-osx-client/69fdd9c44cc7e19c05608cfd463e55829de43416/DNSCrypt-Preference-Pane/DNSCrypt/led_green.png
--------------------------------------------------------------------------------
/DNSCrypt-Preference-Pane/DNSCrypt/led_red.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/stammy/dnscrypt-osx-client/69fdd9c44cc7e19c05608cfd463e55829de43416/DNSCrypt-Preference-Pane/DNSCrypt/led_red.png
--------------------------------------------------------------------------------
/DNSCrypt-Preference-Pane/DNSCrypt/led_yellow.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/stammy/dnscrypt-osx-client/69fdd9c44cc7e19c05608cfd463e55829de43416/DNSCrypt-Preference-Pane/DNSCrypt/led_yellow.png
--------------------------------------------------------------------------------
/DNSCrypt-Preference-Pane/DNSCrypt/shield_green.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/stammy/dnscrypt-osx-client/69fdd9c44cc7e19c05608cfd463e55829de43416/DNSCrypt-Preference-Pane/DNSCrypt/shield_green.png
--------------------------------------------------------------------------------
/DNSCrypt-Preference-Pane/DNSCrypt/shield_red.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/stammy/dnscrypt-osx-client/69fdd9c44cc7e19c05608cfd463e55829de43416/DNSCrypt-Preference-Pane/DNSCrypt/shield_red.png
--------------------------------------------------------------------------------
/DNSCrypt-Preference-Pane/DNSCrypt/shield_yellow.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/stammy/dnscrypt-osx-client/69fdd9c44cc7e19c05608cfd463e55829de43416/DNSCrypt-Preference-Pane/DNSCrypt/shield_yellow.png
--------------------------------------------------------------------------------
/DNSCrypt-Preference-Pane/DNSCrypt/update.sh:
--------------------------------------------------------------------------------
1 | #! /bin/sh
2 |
3 | mkdir -p extra/usr/bin
4 | cp /Library/PreferencePanes/DNSCrypt.prefPane/Contents/Resources/usr/bin/hostip \
5 | extra/usr/bin/
6 |
7 | nd=$(otool -L /Library/PreferencePanes/DNSCrypt.prefPane/Contents/Resources/usr/sbin/dnscrypt-proxy | wc -l)
8 | if [ $nd -gt 2 ]; then
9 | echo '*** dnscrypt-proxy may have more dependencies than libSystem.B.dylib'
10 | echo '*** make sure that libsodium was statically linked'
11 | sleep 10
12 | fi
13 |
14 | nd=$(otool -L /Library/PreferencePanes/DNSCrypt.prefPane/Contents/Resources/usr/lib/dnscrypt-proxy/libdcplugin_example_ldns_aaaa_blocking.so | wc -l)
15 | if [ $nd -gt 3 ]; then
16 | echo '*** plugins may have more dependencies than libSystem.B.dylib and ldns'
17 | echo '*** make sure that they were linked against ldns compiled without SSL'
18 | sleep 10
19 | fi
20 |
21 | mkdir -p extra/usr/sbin
22 | cp /Library/PreferencePanes/DNSCrypt.prefPane/Contents/Resources/usr/sbin/dnscrypt-proxy \
23 | extra/usr/sbin/
24 |
25 | mkdir -p extra/usr/lib
26 |
27 | cp /opt/ldns/lib/libldns.2.dylib \
28 | extra/usr/lib/
29 | ( cd extra/usr/lib &&
30 | rm -f libldns.dylib &&
31 | ln -fs libldns.2.dylib libldns.dylib )
32 |
33 | if [ -f /usr/local/lib/libsodium.18.dylib ]; then
34 | echo '*** /usr/local/lib/libsodium.{dylib,la} found'
35 | echo '*** Compile dnscrypt-proxy without them to get a static build'
36 | echo '*** Then reinstall them'
37 | sleep 10
38 | fi
39 |
40 | cp /usr/local/lib/libsodium.18.dylib \
41 | extra/usr/lib/
42 | ( cd extra/usr/lib &&
43 | rm -f libsodium.dylib &&
44 | ln -fs libsodium.18.dylib libsodium.dylib )
45 |
46 | mkdir -p extra/usr/lib/dnscrypt-proxy
47 |
48 | cp /Library/PreferencePanes/DNSCrypt.prefPane/Contents/Resources/usr/lib/dnscrypt-proxy/* \
49 | extra/usr/lib/dnscrypt-proxy/
50 |
51 | mkdir -p extra/usr/share/dnscrypt-proxy
52 |
53 | cp /Library/PreferencePanes/DNSCrypt.prefPane/Contents/Resources/usr/share/dnscrypt-proxy/dnscrypt-resolvers.csv \
54 | extra/usr/share/dnscrypt-proxy/
55 |
56 | cp /Library/PreferencePanes/DNSCrypt.prefPane/Contents/Resources/usr/share/dnscrypt-proxy/minisign.pub \
57 | extra/usr/share/dnscrypt-proxy/
58 |
--------------------------------------------------------------------------------
/DNSCrypt-Uninstaller/Uninstall.scpt:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/stammy/dnscrypt-osx-client/69fdd9c44cc7e19c05608cfd463e55829de43416/DNSCrypt-Uninstaller/Uninstall.scpt
--------------------------------------------------------------------------------
/FAQ.md:
--------------------------------------------------------------------------------
1 | # Possible answsers to Frequently Asked Questions
2 |
3 | ## "It doesn't work"
4 |
5 | Sorry to hear that this application doesn't behave as expected.
6 |
7 | Let's go through a few steps that may solve the issues you are experiencing.
8 |
9 | 1. **Uninstall previous versions.**
10 | In order to do so, open the DNSCrypt OSXClient preferences pane, and click the `Uninstall` button in the `About` tab.
11 | 2. **Download the latest official version.**
12 | The package can be installed with `brew cask` or downloaded directly from GitHub: [DNSCrypt OSXClient](https://github.com/alterstep/dnscrypt-osxclient/releases/latest).
13 | Do **not** download this app from unauthorized sources such as MacUpdate or a different GitHub repository. The file you would download from an unauthorized source may be delivered insecurely, may be old, or may contain malware.
14 | 3. **Optional:** if you want to double check the authenticity of the file you downloaded, also download the `.minisig` file and use [Minisign](https://jedisct1.github.io/minisign/) to verify the digital signature.
15 | 4. **Open the OSXClient preference pane**, select a resolver and try enabling DNSCrypt.
16 | 5. Still no joy? **Try a different resolver.** Some of them might experience a temporary outage, or may be blocked by your ISP.
17 | 6. **Turn off your VPN.** A VPN already encrypts your data, including DNS data.
18 | 7. **Disable antiviruses**, local and remote (router) firewalls, Little Snitch, Little Flocker and other agents preventing applications from working normally.
19 | These can be reenabled later, but we need to make sure that their interaction with OSXClient is not the root cause of the problems you are trying to solve.
20 | 8. **Activate logging** by creating a file named `debug.enabled` in the `/Library/Application Support/DNSCrypt/control` directory. The content of that file is not important; only its presence will be checked so an empty file is fine.
21 | When this file is present, OSXClient logs its activity in `/var/log/dnscrypt-osxclient-debug.log`. Reviewing the content of that file while trying to turn DNSCrypt on and off may be very useful in order to understand why things don't work as expected.
22 | 9. **Update your operating system** if possible. This user interface, as well as the underlying proxy, have been written for the latest stable major version of MacOS. Apple doesn't make it simple to ensure that an application works on a specific OS version without having a dedicated test device, so the developers can only guess what changes may be required to make these applications also run on older systems.
23 | 10. **Report resolver-specific issues to the resolver operator**. OSXClient, Simple DNSCrypt, dnscrypt-proxy, dnsdist, dnscrypt-wrapper are pieces of software, not services. None of the authors work at Yandex or OpenDNS, so we can't help you with your Yandex or OpenDNS account, or with issues specific to a resolver such as a name that cannot be resolved. Please report these issues to the companies and individuals running these services instead. These issues have probably nothing to do with the DNSCrypt protocol itself.
24 |
25 | After trying all these steps, open a ticket on the [OSXClient issue tracker](https://github.com/alterstep/dnscrypt-osxclient/issues).
26 |
27 | Here are a few hints to maximize the chances for your issue to be addressed as quickly as possible:
28 |
29 | 1. **Do not post screenshots** unless the bug is specifically about a graphic element of the user interface. Screenshots are not indexed by search engines (not great to helper other users with similar issues), can be hard to read, can be incomplete, don't allow copy/paste, don't play well with command-line tools developers use, and finding what to look for in a screenshot is now always intuitive. Instead, copy/paste relevant information. If that information is short, include it in the description of the issue. If that information is 15 lines or more, save it to a file, and attach the file to the ticket. Or use a GitHub [gist](https://gist.github.com/) or [zerobin](https://zerobin.net/). Short and clear descriptions are always appreciated.
30 | 2. **Make sure that you went through the steps above** before filing an issue.
31 | 3. **Include some information**: the OSX version you are running, the OSXClient version you installed, and a snippet of the `dnscrypt-osxclient-debug.log` file (not inline, see above). Details such as the model of your computer and the brand of your router are not required.
32 | 4. **Summarize your problem**: what you did, what should have happened, and what actually happened. Bugs can be fixed very quickly if the developer can duplicate your problem. But they are very unlikely to be fixed if the developper struggles at understanding why something happens on your machine and not elsewhere. Use a short and meaningful summary as the title of your ticket: this will be immensely useful to other users that look for a solution to the same problem.
33 | 5. **Do not write "doesn't work"**: explain exactly what doesn't behave as expected. See the previous point.
34 | 6. **Do not hide information**: if you are running an old MacOS version, if didn't try without your antivirus, if you are blocking specific ports and protocols, if you altered the software, if you customized your environment in some way, please mention it.
35 | 7. **Share your solution**: did you eventually manage to fix the issue? Fantastic! Before closing the ticket, writing a short description of what you did will be very appreciated by other users!
36 |
37 | If the command-line doesn't scare you, you may consider running [dnscrypt-proxy](https://github.com/jedisct1/dnscrypt-proxy/wiki) directly instead of OSXClient.
38 |
--------------------------------------------------------------------------------
/Pages/feedback.haml:
--------------------------------------------------------------------------------
1 | !!! 5
2 | %html{lang: "en"}
3 | %head
4 | %meta{charset: "utf-8"}
5 | %title DNSCrypt feedback form
6 | %style{type: "text/css"}
7 | :sass
8 | body
9 | font:
10 | family: arial, helvetica, sans-serif
11 | margin: 0
12 | h1
13 | margin: 0
14 | form
15 | margin: 0 auto
16 | width: 500px
17 | p
18 | margin: 0.25em 0
19 | .error
20 | background: #fbb
21 | color: #000
22 | fieldset
23 | border: none
24 | padding: 0
25 | label
26 | float: left
27 | width: 100px
28 | text-align: right
29 | padding-right: 1em
30 | input
31 | width: 200px
32 | input[type=submit]
33 | width: auto
34 | textarea
35 | width: 300px
36 | height: 170px
37 | #submit
38 | text-align: center
39 | %body
40 | %form{action: "feedback.php", method: "post", action: "{{form_url}}"}
41 | %h1 Feedback
42 | %fieldset
43 | %p
44 | %label{for: "name"} Name:
45 | %input{type: "text", name: "name", autofocus: true,
46 | required: true, value: "{{name}}", class: "{{class_name}}"}
47 | %p
48 | %label{for: "email"} Email:
49 | %input{type: "email", name: "email",
50 | placeholder: "email@example.com", required: true,
51 | value: "{{email}}", class: "{{class_email}}"}
52 | %p
53 | %label{for: "feedback"} Feedback:
54 | %textarea{name: "feedback", class: "{{class_feedback}}"} {{feedback}}
55 | %fieldset#submit
56 | %input{type: "submit"}
57 |
--------------------------------------------------------------------------------
/Pages/feedback.php:
--------------------------------------------------------------------------------
1 | ');
6 | define('FEEDBACK_SUBJECT', 'DNSCrypt Feedback');
7 |
8 | function strip_slashes_from_user_data(&$array) {
9 | foreach($array as $k => $v) {
10 | if (is_array($v)) {
11 | strip_slashes_from_user_data($array[$k]);
12 | continue;
13 | }
14 | $array[$k] = stripslashes($v);
15 | }
16 | }
17 |
18 | function disable_magic_quotes() {
19 | if (get_magic_quotes_gpc()) {
20 | strip_slashes_from_user_data($_GET);
21 | strip_slashes_from_user_data($_POST);
22 | strip_slashes_from_user_data($_COOKIE);
23 | }
24 | }
25 |
26 | function render_headers() {
27 | header('X-Frame-Options: sameorigin');
28 | header('X-XSS-Protection: 1; mode=block');
29 | header('X-Content-Security-Policy: allow \'self\'');
30 | header('Cache-Control: private, max-age=3600');
31 | header('Expires: ' . date('r', time() + 3600));
32 | }
33 |
34 | function render_tpl($template, $vars) {
35 | $tpl = @file_get_contents($template);
36 | if (empty($tpl)) {
37 | throw new Exception('template');
38 | }
39 | foreach ($vars as $key => $value) {
40 | foreach (array_keys($vars) as $key_) {
41 | if (strstr($value, '{{' . $key . '}}') !== FALSE) {
42 | $value = '';
43 | }
44 | }
45 | $tpl = str_replace('{{' . $key . '}}', htmlspecialchars($value), $tpl);
46 | }
47 | echo $tpl;
48 | }
49 |
50 | function redirect_to_sent_page($uri) {
51 | header('HTTP/1.1 303 See other');
52 | header('Location: ' . $uri);
53 | exit;
54 | }
55 |
56 | function _send_email($name, $email, $feedback) {
57 | $from = mb_encode_mimeheader($name, 'UTF-8') . '<' . $email . '>';
58 | $to = FEEDBACK_RECIPIENT;
59 | $subject = mb_encode_mimeheader(FEEDBACK_SUBJECT, 'UTF-8');
60 | $body = addslashes($feedback);
61 |
62 | return send_email($from, $to, $subject, $body);
63 | }
64 |
65 | function send_form($name, $email, $feedback) {
66 | if (_send_email($name, $email, $feedback) !== TRUE) {
67 | redirect_to_sent_page($_SERVER['SCRIPT_NAME']);
68 | }
69 | redirect_to_sent_page('sent.html');
70 | }
71 |
72 | function process_feedback(&$errors, &$name, &$email, &$feedback) {
73 | $name = trim(isset($_POST['name']) ? (string) $_POST['name'] : '');
74 | $email = trim(isset($_POST['email']) ? (string) $_POST['email'] : '');
75 | $feedback = trim(isset($_POST['feedback']) ?
76 | (string) $_POST['feedback'] : '');
77 | if (empty($name)) {
78 | array_push($errors, 'name');
79 | }
80 | if (! filter_var($email, FILTER_VALIDATE_EMAIL)) {
81 | array_push($errors, 'email');
82 | }
83 | if (empty($feedback)) {
84 | array_push($errors, 'feedback');
85 | }
86 | if (! empty($errors)) {
87 | return;
88 | }
89 | session_start();
90 | if (empty($_SESSION['authenticity_token']) ||
91 | $_GET['authenticity_token'] !== $_SESSION['authenticity_token']) {
92 | return;
93 | }
94 | send_form($name, $email, $feedback);
95 | unset($_SESSION['authenticity_token']);
96 | }
97 |
98 | disable_magic_quotes();
99 |
100 | render_headers();
101 |
102 | $errors = array();
103 | $name = $email = $feedback = '';
104 |
105 | if ($_SERVER['REQUEST_METHOD'] === 'POST' &&
106 | !empty($_GET['authenticity_token'])) {
107 | process_feedback($errors, $name, $email, $feedback);
108 | }
109 |
110 | if (session_id() === '') {
111 | session_start();
112 | }
113 | $authenticity_token = md5(uniqid(__FILE__, TRUE));
114 | $_SESSION['authenticity_token'] = $authenticity_token;
115 |
116 | $form_url = $_SERVER['SCRIPT_NAME'] . '?' .
117 | http_build_query(array('authenticity_token' => $authenticity_token));
118 |
119 | $vars = array('name' => $name,
120 | 'email' => $email,
121 | 'feedback' => $feedback,
122 | 'form_url' => $form_url);
123 |
124 | foreach ($errors as $error) {
125 | $vars['class_' . $error] = 'error';
126 | }
127 |
128 | render_tpl('feedback.tpl', $vars + $errors);
129 |
--------------------------------------------------------------------------------
/Pages/feedback.tpl:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | DNSCrypt feedback form
6 |
46 |
47 |
48 |
68 |
69 |
70 |
--------------------------------------------------------------------------------
/Pages/sent.haml:
--------------------------------------------------------------------------------
1 | !!! 5
2 | %html{lang: "en"}
3 | %head
4 | %meta{charset: "utf-8"}
5 | %meta{"http-equiv" => "refresh", content: "5; url=feedback.php"}
6 | %title DNSCrypt feedback sent
7 | %style{type: "text/css"}
8 | :sass
9 | body
10 | font:
11 | family: arial, helvetica, sans-serif
12 | %body
13 | %h1 Feedback sent!
14 |
--------------------------------------------------------------------------------
/README.markdown:
--------------------------------------------------------------------------------
1 | OSX client for managing the DNSCrypt Proxy
2 | ==========================================
3 |
4 | The purpose of this application is to allow the user to have a better experience controlling the DNSCrypt Proxy on OSX.
5 |
6 | [Download dnscrypt-osxclient.dmg](https://github.com/alterstep/dnscrypt-osxclient/releases/latest)
7 | for macOS 10.10 (Yosemite), macOS 10.11 (El Capitan) and macOS 10.12 (Sierra).
8 |
9 | Compatible with all the DNS servers with DNSCrypt enabled.
10 |
11 | Packages are signed with [Minisign](https://jedisct1.github.io/minisign/) and can be verified with:
12 |
13 | minisign -V -P RWRvw8aArS/yEI3In0/zQSb9+qfWonLxjjEYG17cXt6zct6GLKtEvUfk -m dnscrypt-osxclient-*.dmg
14 |
15 | You can also install this application using Homebrew Cask:
16 |
17 | ```
18 | brew cask install dnscrypt
19 | ```
20 |
21 | 
22 | 
23 |
--------------------------------------------------------------------------------
/alterstep-pgp-key.pub:
--------------------------------------------------------------------------------
1 | My PGP public key, to verify the releases:
2 |
3 | -----BEGIN PGP PUBLIC KEY BLOCK-----
4 | Version: GnuPG v1
5 |
6 | mQENBFV3cvYBCACmUwWPeGbnzEsBzdsq+15a9td4RjuJsUEAxhCkXAp36Hn0lVJB
7 | Bz1Mcjqoo3Im6S/ec6EEQQrLuZBvuL4LnSWaIa+6HfPQiEr3mD/kyKp371jvrKkl
8 | lIRqa4fZWKoasRhLBqo4lTUsrR3wblbmnFRjTNMBB3ltfi8VMmr//KEHJx8hkgpQ
9 | udJoBF5fZ8RQZsFjbqxncE2/pwYmOE+rO7hEkULx6KnkxqUkpxjnPkAmf+7G3bpS
10 | K+l4ZIakOFwRELvqU9pX6T4mx5/GpMv5F+gJGjRHOMUeSQLhzLTKihBpHa1OnMGC
11 | zD0fB24Msn+0g2rsReccuFo9qLkCc3IvaGAHABEBAAG0CkFsdGVyIFN0ZXCJATgE
12 | EwECACIFAlV3cvYCGwMGCwkIBwMCBhUIAgkKCwQWAgMBAh4BAheAAAoJEGm4VoCb
13 | 8nqtAEEH/A31A04X51I6gEiEsd1Il310GWF/SD1r9G2B64zAenlfQo8yY1qeCRZi
14 | Sh5TGVpXmnv4IK+BbuAZLxr5X8fs5UtX+otrgGbiS9cJSsIhffHyeCiRZyNgcPuQ
15 | ZCRLjNx9zt3as/TZUBKEudzOiCRvTFGm7mZHgmV1NTY62qy/lDl+fNWK9nBea0/W
16 | Tvv3rDNyL6ic4aoEeYBbFsHzdcEFpVtLEeOpB2n8z8aA/7yvXKSQNf5nkFwytPmd
17 | 5gIMons58jwDjiWpkTxhzHYpwegMkqkEpizA82lHNt2q/IeLxNFeIkUIOPTsij7K
18 | RitethBvVU5bhRCgur6V/6qy8kJX92G5AQ0EVXdy9gEIAL4qJzGDAl28z50vob6D
19 | h2Ime9nIZohm0Fw4jk/bae2LQPnv/VMcCjleJ0VOZfjs3X4FYzv5gCKMz+Jcn1Q2
20 | 6kOqct/AO8XWBXXrlAd3z6Kf19IkrWtjeG9G2nN047R0l1xLj9+VAWhTK29aDkt8
21 | oLUMZBkQXmYcK+caQfrc2KR1Ok0JQ4qGa4hRqnnTTODZJ56iHIx0c68BWl0DlU69
22 | t4E+7KreiPxH43dx6mmC3DXfZcOMJnKXJelf2gCQfO0j1wHLen+7uT4/YY1jMKec
23 | jhDgTTFJR26iMw+XdoWjJWThBwlZ+0CqoHDEYBEs3dSgtipaMNS69NR7bzUzrPUl
24 | 1vMAEQEAAYkBHwQYAQIACQUCVXdy9gIbDAAKCRBpuFaAm/J6raWYB/9YalFKgnnu
25 | a3r3tcGkPnYgGDf8s1upG5kgcaROXmhuWq6CCsk3WyvGRGLnafMXi6mE+rBDKgij
26 | GSJ+C+kgvXgGU1QRl9XL0hJLT9O0QrHt6TAfqJsDY1kHR0M8WaYj0RTr+3OAyJhg
27 | kM1oEvabhrCbPNVxznCAMmT9z5U1i1NYqacjAQfnR8nHr3C6oHnj/gaQQOTO3xJg
28 | rBMymDhBVoWMkoaoXYNqJNpgCuAAhmmUM1AtMA+RkWeSIzCUD+1GhO5VQyjtsdHZ
29 | aC08CMLzjpG+VI+LgaU2pHUwwCLNEiA701AwSg4RMRj2ARjKWtOh6tqIN1UgTp1N
30 | tg4DrEN2CFSW
31 | =TN6d
32 | -----END PGP PUBLIC KEY BLOCK-----
33 |
--------------------------------------------------------------------------------
/minisign.pub:
--------------------------------------------------------------------------------
1 | untrusted comment: alterstep minisign public key 10F22FAD80C6C36F
2 | RWRvw8aArS/yEI3In0/zQSb9+qfWonLxjjEYG17cXt6zct6GLKtEvUfk
3 |
--------------------------------------------------------------------------------
/updates/versions.txt:
--------------------------------------------------------------------------------
1 | 10.8 8 https://github.com/alterstep/dnscrypt-osxclient/releases/download/1.0.14/dnscrypt-osxclient-1.0.14.dmg
2 | 10.9 8 https://github.com/alterstep/dnscrypt-osxclient/releases/download/1.0.14/dnscrypt-osxclient-1.0.14.dmg
3 | 10.10 8 https://github.com/alterstep/dnscrypt-osxclient/releases/download/1.0.14/dnscrypt-osxclient-1.0.14.dmg
4 | 10.11 8 https://github.com/alterstep/dnscrypt-osxclient/releases/download/1.0.14/dnscrypt-osxclient-1.0.14.dmg
5 | 10.12 8 https://github.com/alterstep/dnscrypt-osxclient/releases/download/1.0.14/dnscrypt-osxclient-1.0.14.dmg
6 |
--------------------------------------------------------------------------------
/updates/versions.txt.minisig:
--------------------------------------------------------------------------------
1 | untrusted comment: signature from minisign secret key
2 | RWRvw8aArS/yEC0KSUJzl/E1pNue3BhV6XHpINFPjWAQxxgoA5tL8+JOqqhC6vtdgG/9K4Iq8OZeWEWiriwZj0rmshQVpcB9ZQU=
3 | trusted comment: timestamp:1486847028 file:versions.txt
4 | j2By6+I+aOudtAInQZWqMamAqk4AJyjWhTMMNjF0kmelQfuImLZO09vNcuzPrnTM0M+jFiQdzHRLbQA0Fud6AA==
5 |
--------------------------------------------------------------------------------