Compare commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
fccba1dfb8 | ||
|
|
63594470fd | ||
|
|
355b796d5c | ||
|
|
95925d9e2d | ||
|
|
1510319bb8 | ||
|
|
e9db17b111 | ||
|
|
3ec589a1ef | ||
|
|
ebeb963aa4 | ||
|
|
1b02a3dc77 | ||
|
|
7c7dadd464 | ||
|
|
7d66d1be60 | ||
|
|
d7df143702 | ||
|
|
8c9a6f09ff | ||
|
|
780380a1ef | ||
|
|
63065e55c8 | ||
|
|
7e6d44e2ab | ||
|
|
9acd96ceb7 | ||
|
|
8144efe612 | ||
|
|
c69fdc7519 | ||
|
|
1d2778e636 | ||
|
|
1bdc80b76b | ||
|
|
f971a7fe19 | ||
|
|
654ac623bb | ||
|
|
9530c272a3 | ||
|
|
5495b8b885 | ||
|
|
15dcfdbe02 | ||
|
|
da5f9b9ce8 | ||
|
|
17c48f58c1 | ||
|
|
5a42ae621a | ||
|
|
9b6fbab397 | ||
|
|
44908fa7de | ||
|
|
e268f23c3d | ||
|
|
f6aa7c2f8d | ||
|
|
217bdfba9a | ||
|
|
9f4a56f4e8 | ||
|
|
ea3b7e6f8e | ||
|
|
658e5ed2e6 | ||
|
|
f3687a2aa0 | ||
|
|
c90946bb04 | ||
|
|
4f1b2ec86e |
@@ -0,0 +1,17 @@
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
*****************************************************************************************************************
|
||||
|
||||
Before creating an issue, please read the FAQ: https://github.com/alterstep/dnscrypt-osxclient/blob/master/FAQ.md
|
||||
|
||||
Informations and debug logs as explained here are almost always more useful that screenshots!
|
||||
|
||||
Thank you!
|
||||
|
||||
*****************************************************************************************************************
|
||||
|
||||
|
||||
|
||||
@@ -1,16 +0,0 @@
|
||||
/*
|
||||
* Copyright (c) 2011-2014 OpenDNS, Inc.
|
||||
* Copyright (c) 2014 AlterStep
|
||||
*
|
||||
* Permission to use, copy, modify, and distribute this software for any
|
||||
* purpose with or without fee is hereby granted, provided that the above
|
||||
* copyright notice and this permission notice appear in all copies.
|
||||
*
|
||||
* THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
|
||||
* WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
|
||||
* MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
|
||||
* ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
|
||||
* WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
|
||||
* ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
|
||||
* OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
|
||||
*/
|
||||
@@ -34,5 +34,6 @@ typedef enum {
|
||||
|
||||
- (IBAction)preferencesMenuItemPushed:(NSMenuItem *)sender;
|
||||
- (IBAction)dnscryptMenuItemPushed:(NSMenuItem *)sender;
|
||||
- (IBAction)hideMenubarIconMenuItemPushed:(NSMenuItem *)sender;
|
||||
|
||||
@end
|
||||
|
||||
@@ -101,6 +101,14 @@ BOOL appUpdated = FALSE;
|
||||
}
|
||||
[self updateLedStatus];
|
||||
|
||||
NSString *hideMenuBar = [self fromCommand: @"/bin/csh" withArguments: [NSArray arrayWithObjects: @"-c", @"cd '" kDNSCRIPT_SCRIPTS_BASE_DIR @"' && ./get-hide-menubar-icon-status.sh | ./get-upstream-resolvers.sh", nil]];
|
||||
|
||||
if ([hideMenuBar isEqualToString: @"yes"]) {
|
||||
_statusItem.visible = FALSE;
|
||||
} else if ([hideMenuBar isEqualToString: @"no"]) {
|
||||
_statusItem.visible = TRUE;
|
||||
}
|
||||
|
||||
NSString *currentResolvers = [self fromCommand: @"/bin/csh" withArguments: [NSArray arrayWithObjects: @"-c", @"cd '" kDNSCRIPT_SCRIPTS_BASE_DIR @"' && ./get-current-resolvers.sh | ./get-upstream-resolvers.sh", nil]];
|
||||
_statusResolversMenuItem.title = currentResolvers;
|
||||
|
||||
@@ -213,4 +221,17 @@ BOOL appUpdated = FALSE;
|
||||
}
|
||||
}
|
||||
|
||||
- (BOOL) setHideMenubarIconOn {
|
||||
[self showSpinners];
|
||||
NSString *res = [self fromCommand: @"/bin/csh" withArguments: [NSArray arrayWithObjects: @"-c", @"cd '" kDNSCRIPT_SCRIPTS_BASE_DIR @"' && ./create-ticket.sh && ./switch-hide-menubar-icon-on.sh", nil]];
|
||||
(void) res;
|
||||
_statusItem.visible = FALSE;
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
- (IBAction)hideMenubarIconMenuItemPushed:(NSMenuItem *)sender
|
||||
{
|
||||
[self setHideMenubarIconOn];
|
||||
}
|
||||
|
||||
@end
|
||||
|
||||
@@ -17,11 +17,11 @@
|
||||
<key>CFBundlePackageType</key>
|
||||
<string>APPL</string>
|
||||
<key>CFBundleShortVersionString</key>
|
||||
<string>1.0.12</string>
|
||||
<string>1.0.14</string>
|
||||
<key>CFBundleSignature</key>
|
||||
<string>????</string>
|
||||
<key>CFBundleVersion</key>
|
||||
<string>1.0.12</string>
|
||||
<string>1.0.14</string>
|
||||
<key>LSApplicationCategoryType</key>
|
||||
<string>public.app-category.utilities</string>
|
||||
<key>LSMinimumSystemVersion</key>
|
||||
|
||||
@@ -1,8 +1,8 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<document type="com.apple.InterfaceBuilder3.Cocoa.XIB" version="3.0" toolsVersion="5056" systemVersion="13D45a" targetRuntime="MacOSX.Cocoa" propertyAccessControl="none">
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<document type="com.apple.InterfaceBuilder3.Cocoa.XIB" version="3.0" toolsVersion="13196" targetRuntime="MacOSX.Cocoa" propertyAccessControl="none">
|
||||
<dependencies>
|
||||
<deployment defaultVersion="1060" identifier="macosx"/>
|
||||
<plugIn identifier="com.apple.InterfaceBuilder.CocoaPlugin" version="5056"/>
|
||||
<deployment identifier="macosx"/>
|
||||
<plugIn identifier="com.apple.InterfaceBuilder.CocoaPlugin" version="13196"/>
|
||||
</dependencies>
|
||||
<objects>
|
||||
<customObject id="-2" userLabel="File's Owner" customClass="NSApplication">
|
||||
@@ -11,7 +11,7 @@
|
||||
</connections>
|
||||
</customObject>
|
||||
<customObject id="-1" userLabel="First Responder" customClass="FirstResponder"/>
|
||||
<customObject id="-3" userLabel="Application"/>
|
||||
<customObject id="-3" userLabel="Application" customClass="NSObject"/>
|
||||
<customObject id="494" customClass="AppDelegate">
|
||||
<connections>
|
||||
<outlet property="dnscryptMenu" destination="539" id="543"/>
|
||||
@@ -45,12 +45,18 @@
|
||||
<modifierMask key="keyEquivalentModifierMask"/>
|
||||
</menuItem>
|
||||
<menuItem isSeparatorItem="YES" id="554"/>
|
||||
<menuItem title="Hide from the menu bar" keyEquivalent="h" id="558">
|
||||
<menuItem title="Hide from the menu bar" keyEquivalent="h" id="yYW-Ye-NGW">
|
||||
<connections>
|
||||
<action selector="hideMenubarIconMenuItemPushed:" target="494" id="QDi-0b-iiy"/>
|
||||
</connections>
|
||||
</menuItem>
|
||||
<menuItem title="Quit" keyEquivalent="q" id="558">
|
||||
<connections>
|
||||
<action selector="terminate:" target="-1" id="560"/>
|
||||
</connections>
|
||||
</menuItem>
|
||||
</items>
|
||||
<point key="canvasLocation" x="139" y="175.5"/>
|
||||
</menu>
|
||||
</objects>
|
||||
</document>
|
||||
|
||||
@@ -539,7 +539,7 @@
|
||||
<key>USE_HFS+_COMPRESSION</key>
|
||||
<true/>
|
||||
<key>VERSION</key>
|
||||
<string>1.0.12</string>
|
||||
<string>1.0.13.1</string>
|
||||
</dict>
|
||||
<key>TYPE</key>
|
||||
<integer>0</integer>
|
||||
@@ -1032,7 +1032,7 @@
|
||||
<key>USE_HFS+_COMPRESSION</key>
|
||||
<true/>
|
||||
<key>VERSION</key>
|
||||
<string>1.0.12</string>
|
||||
<string>1.0.13</string>
|
||||
</dict>
|
||||
<key>TYPE</key>
|
||||
<integer>0</integer>
|
||||
@@ -1237,42 +1237,6 @@
|
||||
<dict>
|
||||
<key>LIST</key>
|
||||
<array>
|
||||
<dict>
|
||||
<key>BEHAVIOR</key>
|
||||
<integer>3</integer>
|
||||
<key>DICTIONARY</key>
|
||||
<dict>
|
||||
<key>IC_REQUIREMENT_CPU_ARCHITECTURE_FAMILY</key>
|
||||
<integer>2</integer>
|
||||
<key>IC_REQUIREMENT_CPU_INTEL_ARCHITECTURE_TYPE</key>
|
||||
<integer>0</integer>
|
||||
<key>IC_REQUIREMENT_CPU_MINIMUM_CPU_CORES_COUNT</key>
|
||||
<integer>1</integer>
|
||||
<key>IC_REQUIREMENT_CPU_MINIMUM_FREQUENCY</key>
|
||||
<integer>866666</integer>
|
||||
<key>IC_REQUIREMENT_CPU_POWERPC_ARCHITECTURE_TYPE</key>
|
||||
<integer>0</integer>
|
||||
</dict>
|
||||
<key>IC_REQUIREMENT_CHECK_TYPE</key>
|
||||
<integer>0</integer>
|
||||
<key>IDENTIFIER</key>
|
||||
<string>fr.whitebox.Packages.requirement.cpu</string>
|
||||
<key>MESSAGE</key>
|
||||
<array>
|
||||
<dict>
|
||||
<key>LANGUAGE</key>
|
||||
<string>English</string>
|
||||
<key>SECONDARY_VALUE</key>
|
||||
<string></string>
|
||||
<key>VALUE</key>
|
||||
<string>The DNSCrypt GUI for Mac currently requires at least an Intel Core CPU.</string>
|
||||
</dict>
|
||||
</array>
|
||||
<key>NAME</key>
|
||||
<string>Processor</string>
|
||||
<key>STATE</key>
|
||||
<true/>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>BEHAVIOR</key>
|
||||
<integer>3</integer>
|
||||
@@ -1281,7 +1245,7 @@
|
||||
<key>IC_REQUIREMENT_OS_DISK_TYPE</key>
|
||||
<integer>0</integer>
|
||||
<key>IC_REQUIREMENT_OS_DISTRIBUTION_TYPE</key>
|
||||
<integer>1</integer>
|
||||
<integer>0</integer>
|
||||
<key>IC_REQUIREMENT_OS_MINIMUM_VERSION</key>
|
||||
<integer>100800</integer>
|
||||
</dict>
|
||||
@@ -1482,6 +1446,11 @@
|
||||
<string>DNSCrypt</string>
|
||||
</dict>
|
||||
</dict>
|
||||
<key>SHARED_GLOBAL_DATA</key>
|
||||
<dict>
|
||||
<key>IC_REQUIREMENT_JAVASCRIPT_SHARED_SOURCE_CODE</key>
|
||||
<string></string>
|
||||
</dict>
|
||||
<key>TYPE</key>
|
||||
<integer>0</integer>
|
||||
<key>VERSION</key>
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
#! /bin/sh
|
||||
|
||||
VERSION='1.0.12'
|
||||
VERSION='1.0.14'
|
||||
|
||||
echo '*** Do not forget to increase CURRENT_VERSION in common.inc'
|
||||
sleep 10
|
||||
|
||||
@@ -1,21 +0,0 @@
|
||||
/*
|
||||
* Copyright (c) 2011-2014 OpenDNS, Inc.
|
||||
* Copyright (c) 2014-2015 AlterStep
|
||||
*
|
||||
* Permission to use, copy, modify, and distribute this software for any
|
||||
* purpose with or without fee is hereby granted, provided that the above
|
||||
* copyright notice and this permission notice appear in all copies.
|
||||
*
|
||||
* THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
|
||||
* WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
|
||||
* MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
|
||||
* ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
|
||||
* WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
|
||||
* ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
|
||||
* OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
|
||||
*/
|
||||
|
||||
The get-dhcp-resolvers.sh and check-network-change.sh scripts use code
|
||||
snippets from the dnssec-trigger project, by Wouter Wijngaards, NLnet
|
||||
Labs. (great and similar project, check it out:
|
||||
http://www.nlnetlabs.nl/projects/dnssec-trigger/)
|
||||
@@ -7,6 +7,7 @@
|
||||
objects = {
|
||||
|
||||
/* Begin PBXBuildFile section */
|
||||
0932D7F61E4B324A00E8F3FC /* NSPlaceHolderTextView.m in Sources */ = {isa = PBXBuildFile; fileRef = 0932D7F51E4B324A00E8F3FC /* NSPlaceHolderTextView.m */; };
|
||||
0946B0C613F47F53008277C6 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 0946B0C513F47F53008277C6 /* Cocoa.framework */; };
|
||||
0946B0C813F47F53008277C6 /* PreferencePanes.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 0946B0C713F47F53008277C6 /* PreferencePanes.framework */; };
|
||||
0946B0D213F47F53008277C6 /* InfoPlist.strings in Resources */ = {isa = PBXBuildFile; fileRef = 0946B0D013F47F53008277C6 /* InfoPlist.strings */; };
|
||||
@@ -29,6 +30,8 @@
|
||||
/* End PBXBuildFile section */
|
||||
|
||||
/* Begin PBXFileReference section */
|
||||
0932D7F51E4B324A00E8F3FC /* NSPlaceHolderTextView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = NSPlaceHolderTextView.m; sourceTree = "<group>"; };
|
||||
0932D7F71E4B327D00E8F3FC /* NSPlaceHolderTextView.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = NSPlaceHolderTextView.h; sourceTree = "<group>"; };
|
||||
0946B0C213F47F53008277C6 /* DNSCrypt.prefPane */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = DNSCrypt.prefPane; sourceTree = BUILT_PRODUCTS_DIR; };
|
||||
0946B0C513F47F53008277C6 /* Cocoa.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Cocoa.framework; path = System/Library/Frameworks/Cocoa.framework; sourceTree = SDKROOT; };
|
||||
0946B0C713F47F53008277C6 /* PreferencePanes.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = PreferencePanes.framework; path = System/Library/Frameworks/PreferencePanes.framework; sourceTree = SDKROOT; };
|
||||
@@ -124,6 +127,7 @@
|
||||
09AD019F15D2483500638DCE /* html */,
|
||||
09FB094315C9DE6400B8AAB6 /* usr */,
|
||||
0946B0CE13F47F53008277C6 /* Supporting Files */,
|
||||
096AF93A1E4B565A003C3D67 /* UI Additions */,
|
||||
);
|
||||
path = DNSCrypt;
|
||||
sourceTree = "<group>";
|
||||
@@ -139,6 +143,15 @@
|
||||
name = "Supporting Files";
|
||||
sourceTree = "<group>";
|
||||
};
|
||||
096AF93A1E4B565A003C3D67 /* UI Additions */ = {
|
||||
isa = PBXGroup;
|
||||
children = (
|
||||
0932D7F51E4B324A00E8F3FC /* NSPlaceHolderTextView.m */,
|
||||
0932D7F71E4B327D00E8F3FC /* NSPlaceHolderTextView.h */,
|
||||
);
|
||||
name = "UI Additions";
|
||||
sourceTree = "<group>";
|
||||
};
|
||||
09B1686F1906062E003FDBCC /* CHCSVParser */ = {
|
||||
isa = PBXGroup;
|
||||
children = (
|
||||
@@ -258,6 +271,7 @@
|
||||
buildActionMask = 2147483647;
|
||||
files = (
|
||||
09B168731906062E003FDBCC /* CHCSVParser.m in Sources */,
|
||||
0932D7F61E4B324A00E8F3FC /* NSPlaceHolderTextView.m in Sources */,
|
||||
0946B0D613F47F53008277C6 /* DNSCrypt.m in Sources */,
|
||||
);
|
||||
runOnlyForDeploymentPostprocessing = 0;
|
||||
|
||||
@@ -17,11 +17,11 @@
|
||||
<key>CFBundlePackageType</key>
|
||||
<string>BNDL</string>
|
||||
<key>CFBundleShortVersionString</key>
|
||||
<string>1.0.12</string>
|
||||
<string>1.0.14</string>
|
||||
<key>CFBundleSignature</key>
|
||||
<string>????</string>
|
||||
<key>CFBundleVersion</key>
|
||||
<string>1.0.12</string>
|
||||
<string>1.0.14</string>
|
||||
<key>NSHumanReadableCopyright</key>
|
||||
<string>BSD</string>
|
||||
<key>NSMainNibFile</key>
|
||||
|
||||
@@ -2,8 +2,11 @@
|
||||
#import <PreferencePanes/PreferencePanes.h>
|
||||
#import <WebKit/WebKit.h>
|
||||
#import "CHCSVParser/CHCSVParser.h"
|
||||
#import "NSPlaceHolderTextView.h"
|
||||
|
||||
#define kDNSCRYPT_PACKAGE_VERSION @"1.0.12"
|
||||
#define kDNSCRYPT_PACKAGE_VERSION @"1.0.14"
|
||||
|
||||
#define kDNSCRYPT_PROJECT_URL @"https://dnscrypt.org/osxclient"
|
||||
|
||||
#define kDNSCRYPT_PREFPANE_APP_PATH @"/Library/PreferencePanes/DNSCrypt.prefPane"
|
||||
#define kDNSCRYPT_USR_BASE_DIR kDNSCRYPT_PREFPANE_APP_PATH @"/Contents/Resources/usr"
|
||||
@@ -14,6 +17,8 @@
|
||||
#define kDNSCRYPT_CONTROL_DIR kDNSCRYPT_VAR_BASE_DIR @"/control"
|
||||
|
||||
#define kDNSCRYPT_QUERY_LOG_FILE @"/var/log/dnscrypt-query.log"
|
||||
#define kDNSCRYPT_BLOCKED_QUERY_LOG_FILE @"/var/log/dnscrypt-blocked-query.log"
|
||||
|
||||
#define kDNSCRYPT_BLACKLIST_IPS_TMP_FILE kDNSCRYPT_CONTROL_DIR @"/blacklist-ips.tmp"
|
||||
#define kDNSCRYPT_BLACKLIST_DOMAINS_TMP_FILE kDNSCRYPT_CONTROL_DIR @"/blacklist-domains.tmp"
|
||||
#define kDNSCRYPT_EXCEPTIONS_TMP_FILE kDNSCRYPT_CONTROL_DIR @"/exceptions.tmp"
|
||||
@@ -22,15 +27,14 @@
|
||||
|
||||
#define kRESOLVERS_LIST_FILE kDNSCRYPT_SHARE_BASE_DIR @"/dnscrypt-proxy/dnscrypt-resolvers.csv"
|
||||
|
||||
#define kREFRESH_DELAY 2.0
|
||||
#define kCHECKBOXES_AFTER_CHANGE_DELAY 8.0
|
||||
#define kREFRESH_DELAY 1.0
|
||||
#define kMAX_TRIES_AFTER_CHANGE (30 / kREFRESH_DELAY)
|
||||
|
||||
typedef enum {
|
||||
kDNS_CONFIGURATION_UNKNOWN, kDNS_CONFIGURATION_VANILLA, kDNS_CONFIGURATION_LOCALHOST
|
||||
} DNSConfigurationState;
|
||||
|
||||
@interface DNSCrypt : NSPreferencePane {
|
||||
@interface DNSCrypt : NSPreferencePane<NSTextViewDelegate, WebUIDelegate> {
|
||||
AuthorizationRef auth;
|
||||
|
||||
NSTabView *_tabView;
|
||||
@@ -38,7 +42,7 @@ typedef enum {
|
||||
NSTabViewItem *_releaseNotesTabViewItem;
|
||||
|
||||
NSButton *_dnscryptButton;
|
||||
NSButton *_fallbackButton;
|
||||
NSButton *_hideMenubarIcon;
|
||||
NSButton *_disableIPv6Button;
|
||||
|
||||
NSTextField *_currentResolverTextField;
|
||||
@@ -47,20 +51,22 @@ typedef enum {
|
||||
WebView *_releaseNotesWebView;
|
||||
WebView *_aboutWebView;
|
||||
NSTextFieldCell *_staticResolversTextField;
|
||||
NSTextField *_blacklistIPsTextField;
|
||||
NSTextField *_blacklistDomainsTextField;
|
||||
NSTextField *_exceptionsTextField;
|
||||
WebView *_helpWebView;
|
||||
NSPlaceHolderTextView *_blacklistIPsTextView;
|
||||
NSPlaceHolderTextView *_blacklistDomainsTextView;
|
||||
NSPlaceHolderTextView *_exceptionsTextView;
|
||||
NSButton *_viewLogButton;
|
||||
NSButton *_queryLoggingButton;
|
||||
NSButton *_viewBlockedLogButton;
|
||||
NSButton *_blockedQueryLoggingButton;
|
||||
NSPopUpButton *_resolverNamesButton;
|
||||
NSButton *_saveAndApplyChangesButton;
|
||||
}
|
||||
@property (nonatomic, strong) IBOutlet NSTabView *tabView;
|
||||
@property (nonatomic, strong) IBOutlet NSTabViewItem *aboutTabViewItem;
|
||||
@property (nonatomic, strong) IBOutlet NSTabViewItem *releaseNotesTabViewItem;
|
||||
|
||||
@property (nonatomic, strong) IBOutlet NSButton *dnscryptButton;
|
||||
@property (nonatomic, strong) IBOutlet NSButton *fallbackButton;
|
||||
@property (nonatomic, strong) IBOutlet NSButton *hideMenubarIcon;
|
||||
@property (nonatomic, strong) IBOutlet NSButton *disableIPv6Button;
|
||||
|
||||
@property (nonatomic, strong) IBOutlet NSTextField *currentResolverTextField;
|
||||
@@ -69,12 +75,12 @@ typedef enum {
|
||||
@property (nonatomic, strong) IBOutlet WebView *releaseNotesWebView;
|
||||
@property (nonatomic, strong) IBOutlet WebView *aboutWebView;
|
||||
@property (nonatomic, strong) IBOutlet NSTextFieldCell *staticResolversTextField;
|
||||
@property (nonatomic, strong) IBOutlet NSTextField *blacklistIPsTextField;
|
||||
@property (nonatomic, strong) IBOutlet NSTextField *blacklistDomainsTextField;
|
||||
@property (nonatomic, strong) IBOutlet NSTextField *exceptionsTextField;
|
||||
@property (nonatomic, strong) IBOutlet WebView *helpWebView;
|
||||
@property (nonatomic, strong) IBOutlet NSPlaceHolderTextView *blacklistIPsTextView;
|
||||
@property (nonatomic, strong) IBOutlet NSPlaceHolderTextView *blacklistDomainsTextView;
|
||||
@property (nonatomic, strong) IBOutlet NSPlaceHolderTextView *exceptionsTextView;
|
||||
@property (nonatomic, strong) IBOutlet NSButton *viewLogButton;
|
||||
@property (nonatomic, strong) IBOutlet NSButton *queryLoggingButton;
|
||||
@property (nonatomic, strong) IBOutlet NSButton *blockedQueryLoggingButton;
|
||||
|
||||
@property (nonatomic, strong) IBOutlet NSPopUpButton *resolverNamesButton;
|
||||
@property (nonatomic, strong) IBOutlet NSTextField *locationText;
|
||||
@@ -86,18 +92,17 @@ typedef enum {
|
||||
- (void) mainViewDidLoad;
|
||||
|
||||
- (IBAction)dnscryptButtonPressed:(NSButton *)sender;
|
||||
- (IBAction)fallbackButtonPressed:(NSButton *)sender;
|
||||
- (IBAction)hideMenubarIcon:(NSButton *)sender;
|
||||
- (IBAction)disableIPv6ButtonPressed:(NSButton *)sender;
|
||||
|
||||
- (IBAction)providerLinkPushed:(NSButton *)sender;
|
||||
- (IBAction)uninstallPushed:(NSButton *)sender;
|
||||
- (IBAction)staticResolversTextFieldChanged:(NSTextField *)sender;
|
||||
- (IBAction)queryLoggingButtonPressed:(NSButtonCell *)sender;
|
||||
- (IBAction)viewLogButtonPushed:(NSButton *)sender;
|
||||
- (IBAction)blacklistIPsUpdated:(NSTextField *)sender;
|
||||
- (IBAction)blacklistDomainsUpdated:(NSTextField *)sender;
|
||||
- (IBAction)exceptionsUpdated:(NSTextField *)sender;
|
||||
- (IBAction)helpButtonPressed:(NSButton *)sender;
|
||||
- (IBAction)blockedQueryLoggingButtonPressed:(NSButtonCell *)sender;
|
||||
- (IBAction)viewBlockedLogButtonPushed:(NSButton *)sender;
|
||||
- (IBAction)resolversNamesPopupButtonPressed:(NSPopUpButton *)sender;
|
||||
- (IBAction)saveAndApplyChangesButtonPressed:(NSButton *)sender;
|
||||
- (IBAction)helpButtonPressed:(NSButton *)sender;
|
||||
|
||||
@end
|
||||
|
||||
@@ -8,15 +8,15 @@
|
||||
@synthesize releaseNotesWebView = _releaseNotesWebView;
|
||||
@synthesize aboutWebView = _aboutWebView;
|
||||
@synthesize staticResolversTextField = _staticResolversTextField;
|
||||
@synthesize blacklistIPsTextField = _blacklistIPsTextField;
|
||||
@synthesize blacklistDomainsTextField = _blacklistDomainsTextField;
|
||||
@synthesize helpWebView = _helpWebView;
|
||||
@synthesize blacklistIPsTextView = _blacklistIPsTextView;
|
||||
@synthesize blacklistDomainsTextView = _blacklistDomainsTextView;
|
||||
@synthesize exceptionsTextView = _exceptionsTextView;
|
||||
@synthesize viewLogButton = _viewLogButton;
|
||||
@synthesize queryLoggingButton = _queryLoggingButton;
|
||||
@synthesize exceptionsTextField = _exceptionsTextField;
|
||||
@synthesize blockedQueryLoggingButton = _blockedQueryLoggingButton;
|
||||
@synthesize dnscryptButton = _dnscryptButton;
|
||||
@synthesize fallbackButton = _fallbackButton;
|
||||
@synthesize disableIPv6Button = _disableIPv6Button;
|
||||
@synthesize hideMenubarIcon = _hideMenubarIcon;
|
||||
@synthesize statusImageView = _statusImageView;
|
||||
@synthesize statusText = _statusText;
|
||||
@synthesize currentResolverTextField = _currentResolverTextField;
|
||||
@@ -24,11 +24,15 @@
|
||||
|
||||
DNSConfigurationState currentState = kDNS_CONFIGURATION_UNKNOWN;
|
||||
NSArray *resolversList;
|
||||
BOOL blacklistDomainsUpdated = FALSE;
|
||||
BOOL blacklistIPsUpdated = FALSE;
|
||||
BOOL exceptionsUpdated = FALSE;
|
||||
|
||||
|
||||
- (void) setCheckBoxesEnabled: (BOOL) enabled
|
||||
{
|
||||
[_dnscryptButton setEnabled: enabled];
|
||||
[_fallbackButton setEnabled: enabled];
|
||||
[_hideMenubarIcon setEnabled: enabled];
|
||||
[_disableIPv6Button setEnabled: enabled];
|
||||
[_resolverNamesButton setEnabled: enabled];
|
||||
}
|
||||
@@ -57,16 +61,20 @@ NSArray *resolversList;
|
||||
NSString *res;
|
||||
|
||||
_dnscryptButton.state = 0;
|
||||
_fallbackButton.state = 0;
|
||||
_hideMenubarIcon.state = 0;
|
||||
_disableIPv6Button.state = 0;
|
||||
|
||||
[_blacklistIPsTextView setPlaceHolderText: @"IP addresses to block.\n\nExamples:\n\n203.0.113.7\n198.51.100.*"];
|
||||
[_blacklistDomainsTextView setPlaceHolderText: @"Domains and patterns to block.\n\nExamples:\n\nexample.com\nads.*\n*sex*"];
|
||||
[_exceptionsTextView setPlaceHolderText: @"Domains bypassing DNSCrypt.\n\nExamples:\n\nlocal\nlocaldomain\nlan"];
|
||||
|
||||
res = [self fromCommand: @"/bin/csh" withArguments: [NSArray arrayWithObjects: @"-f", @"-c", @"cd '" kDNSCRYPT_SCRIPTS_BASE_DIR @"' && exec ./get-dnscrypt-status.sh", nil]];
|
||||
if ([res isEqualToString: @"yes"]) {
|
||||
[_dnscryptButton setState: 1];
|
||||
}
|
||||
res = [self fromCommand: @"/bin/csh" withArguments: [NSArray arrayWithObjects: @"-f", @"-c", @"cd '" kDNSCRYPT_SCRIPTS_BASE_DIR @"' && exec ./get-fallback-status.sh", nil]];
|
||||
res = [self fromCommand: @"/bin/csh" withArguments: [NSArray arrayWithObjects: @"-f", @"-c", @"cd '" kDNSCRYPT_SCRIPTS_BASE_DIR @"' && exec ./get-hide-menubar-icon-status.sh", nil]];
|
||||
if ([res isEqualToString: @"yes"]) {
|
||||
[_fallbackButton setState: 1];
|
||||
[_hideMenubarIcon setState: 1];
|
||||
}
|
||||
res = [self fromCommand: @"/bin/csh" withArguments: [NSArray arrayWithObjects: @"-f", @"-c", @"cd '" kDNSCRYPT_SCRIPTS_BASE_DIR @"' && exec ./get-aaaa-blocking-status.sh", nil]];
|
||||
if ([res isEqualToString: @"yes"]) {
|
||||
@@ -78,18 +86,22 @@ NSArray *resolversList;
|
||||
if ([res isEqualToString: @"yes"]) {
|
||||
[_queryLoggingButton setState: 1];
|
||||
}
|
||||
res = [self fromCommand: @"/bin/csh" withArguments: [NSArray arrayWithObjects: @"-f", @"-c", @"cd '" kDNSCRYPT_SCRIPTS_BASE_DIR @"' && exec ./get-blocked-query-logging-status.sh", nil]];
|
||||
if ([res isEqualToString: @"yes"]) {
|
||||
[_blockedQueryLoggingButton setState: 1];
|
||||
}
|
||||
NSString *fileContent;
|
||||
fileContent = [NSString stringWithContentsOfFile: kDNSCRYPT_BLACKLIST_IPS_TMP_FILE encoding:NSUTF8StringEncoding error: nil];
|
||||
if (fileContent != nil) {
|
||||
[_blacklistIPsTextField setStringValue: fileContent];
|
||||
[_blacklistIPsTextView setString: fileContent];
|
||||
}
|
||||
fileContent = [NSString stringWithContentsOfFile: kDNSCRYPT_BLACKLIST_DOMAINS_TMP_FILE encoding:NSUTF8StringEncoding error: nil];
|
||||
if (fileContent != nil) {
|
||||
[_blacklistDomainsTextField setStringValue: fileContent];
|
||||
[_blacklistDomainsTextView setString: fileContent];
|
||||
}
|
||||
fileContent = [NSString stringWithContentsOfFile: kDNSCRYPT_EXCEPTIONS_TMP_FILE encoding:NSUTF8StringEncoding error: nil];
|
||||
if (fileContent != nil) {
|
||||
[_exceptionsTextField setStringValue: fileContent];
|
||||
[_exceptionsTextView setString: fileContent];
|
||||
}
|
||||
|
||||
[_resolverNamesButton removeAllItems];
|
||||
@@ -196,16 +208,16 @@ NSArray *resolversList;
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
- (BOOL) setFallbackOn {
|
||||
- (BOOL) setHideMenubarIconOn {
|
||||
[self showSpinners];
|
||||
NSString *res = [self fromCommand: @"/bin/csh" withArguments: [NSArray arrayWithObjects: @"-f", @"-c", @"cd '" kDNSCRYPT_SCRIPTS_BASE_DIR @"' && ./create-ticket.sh && ./switch-fallback-on.sh", nil]];
|
||||
NSString *res = [self fromCommand: @"/bin/csh" withArguments: [NSArray arrayWithObjects: @"-f", @"-c", @"cd '" kDNSCRYPT_SCRIPTS_BASE_DIR @"' && ./create-ticket.sh && ./switch-hide-menubar-icon-on.sh", nil]];
|
||||
(void) res;
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
- (BOOL) setFallbackOff {
|
||||
- (BOOL) setHideMenubarIconOff {
|
||||
[self showSpinners];
|
||||
NSString *res = [self fromCommand: @"/bin/csh" withArguments: [NSArray arrayWithObjects: @"-f", @"-c", @"cd '" kDNSCRYPT_SCRIPTS_BASE_DIR @"' && ./create-ticket.sh && ./switch-fallback-off.sh", nil]];
|
||||
NSString *res = [self fromCommand: @"/bin/csh" withArguments: [NSArray arrayWithObjects: @"-f", @"-c", @"cd '" kDNSCRYPT_SCRIPTS_BASE_DIR @"' && ./create-ticket.sh && ./switch-hide-menubar-icon-off.sh", nil]];
|
||||
(void) res;
|
||||
return TRUE;
|
||||
}
|
||||
@@ -233,12 +245,12 @@ NSArray *resolversList;
|
||||
}
|
||||
}
|
||||
|
||||
- (IBAction)fallbackButtonPressed:(NSButton *)sender
|
||||
- (IBAction)hideMenubarIcon:(NSButton *)sender
|
||||
{
|
||||
if (sender.state != 0) {
|
||||
[self setFallbackOn];
|
||||
[self setHideMenubarIconOn];
|
||||
} else {
|
||||
[self setFallbackOff];
|
||||
[self setHideMenubarIconOff];
|
||||
}
|
||||
}
|
||||
|
||||
@@ -324,17 +336,6 @@ NSArray *resolversList;
|
||||
} else {
|
||||
[[_aboutWebView mainFrame] loadRequest:[NSURLRequest requestWithURL: aboutURL]];
|
||||
}
|
||||
|
||||
[_helpWebView setDrawsBackground:false];
|
||||
[_helpWebView setShouldUpdateWhileOffscreen:false];
|
||||
[_helpWebView setUIDelegate:self];
|
||||
NSURL *helpURL;
|
||||
NSString *helpURLPath = [[NSBundle bundleForClass: [self class]] pathForResource: @"help" ofType: @"html" inDirectory: @"html"];
|
||||
if (! helpURLPath || ! (helpURL = [NSURL fileURLWithPath: helpURLPath])) {
|
||||
assert(0);
|
||||
} else {
|
||||
[[_helpWebView mainFrame] loadRequest:[NSURLRequest requestWithURL: helpURL]];
|
||||
}
|
||||
}
|
||||
|
||||
- (NSArray *)webView:(WebView *)sender contextMenuItemsForElement:(NSDictionary *)element
|
||||
@@ -376,6 +377,20 @@ NSArray *resolversList;
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
- (BOOL) setBlockedQueryLoggingOn {
|
||||
[self showSpinners];
|
||||
NSString *res = [self fromCommand: @"/bin/csh" withArguments: [NSArray arrayWithObjects: @"-f", @"-c", @"cd '" kDNSCRYPT_SCRIPTS_BASE_DIR @"' && ./create-ticket.sh && ./switch-blocked-query-logging-on.sh", nil]];
|
||||
(void) res;
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
- (BOOL) setBlockedQueryLoggingOff {
|
||||
[self showSpinners];
|
||||
NSString *res = [self fromCommand: @"/bin/csh" withArguments: [NSArray arrayWithObjects: @"-f", @"-c", @"cd '" kDNSCRYPT_SCRIPTS_BASE_DIR @"' && ./create-ticket.sh && ./switch-blocked-query-logging-off.sh", nil]];
|
||||
(void) res;
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
- (IBAction)queryLoggingButtonPressed:(NSButtonCell *)sender {
|
||||
if (sender.state != 0) {
|
||||
[self setQueryLoggingOn];
|
||||
@@ -384,10 +399,23 @@ NSArray *resolversList;
|
||||
}
|
||||
}
|
||||
|
||||
- (IBAction)blockedQueryLoggingButtonPressed:(NSButtonCell *)sender {
|
||||
if (sender.state != 0) {
|
||||
[self setBlockedQueryLoggingOn];
|
||||
} else {
|
||||
[self setBlockedQueryLoggingOff];
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
- (IBAction)viewLogButtonPushed:(NSButton *)sender {
|
||||
[self fromCommand: @"/bin/csh" withArguments: [NSArray arrayWithObjects: @"-f", @"-c", @"open /Applications/Utilities/Console.app " kDNSCRYPT_QUERY_LOG_FILE " || open " kDNSCRYPT_QUERY_LOG_FILE, nil]];
|
||||
}
|
||||
|
||||
- (IBAction)viewBlockedLogButtonPushed:(NSButton *)sender {
|
||||
[self fromCommand: @"/bin/csh" withArguments: [NSArray arrayWithObjects: @"-f", @"-c", @"open /Applications/Utilities/Console.app " kDNSCRYPT_BLOCKED_QUERY_LOG_FILE " || open " kDNSCRYPT_BLOCKED_QUERY_LOG_FILE, nil]];
|
||||
}
|
||||
|
||||
- (BOOL) updateBlacklistIPs {
|
||||
[self showSpinners];
|
||||
NSString *res = [self fromCommand: @"/bin/csh" withArguments: [NSArray arrayWithObjects: @"-f", @"-c", @"cd '" kDNSCRYPT_SCRIPTS_BASE_DIR @"' && ./create-ticket.sh && ./update-blacklist-ips.sh", nil]];
|
||||
@@ -395,8 +423,8 @@ NSArray *resolversList;
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
- (IBAction)blacklistIPsUpdated:(NSTextField *)sender {
|
||||
NSString *content = sender.stringValue;
|
||||
- (IBAction)blacklistIPsUpdate:(NSPlaceHolderTextView *)sender {
|
||||
NSString *content = sender.string;
|
||||
if ([content writeToFile: kDNSCRYPT_BLACKLIST_IPS_TMP_FILE atomically: YES encoding: NSUTF8StringEncoding error: nil] != YES) {
|
||||
return;
|
||||
}
|
||||
@@ -410,8 +438,8 @@ NSArray *resolversList;
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
- (IBAction)blacklistDomainsUpdated:(NSTextField *)sender {
|
||||
NSString *content = sender.stringValue;
|
||||
- (IBAction)blacklistDomainsUpdate:(NSPlaceHolderTextView *)sender {
|
||||
NSString *content = sender.string;
|
||||
if ([content writeToFile: kDNSCRYPT_BLACKLIST_DOMAINS_TMP_FILE atomically: YES encoding: NSUTF8StringEncoding error: nil] != YES) {
|
||||
return;
|
||||
}
|
||||
@@ -425,28 +453,43 @@ NSArray *resolversList;
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
- (IBAction)exceptionsUpdated:(NSTextField *)sender {
|
||||
NSString *content = sender.stringValue;
|
||||
- (IBAction)exceptionsUpdate:(NSPlaceHolderTextView *)sender {
|
||||
NSString *content = sender.string;
|
||||
if ([content writeToFile: kDNSCRYPT_EXCEPTIONS_TMP_FILE atomically: YES encoding: NSUTF8StringEncoding error: nil] != YES) {
|
||||
return;
|
||||
}
|
||||
[self updateExceptions];
|
||||
}
|
||||
|
||||
- (IBAction)helpButtonPressed:(NSButton *)sender {
|
||||
if (_helpWebView.isHidden) {
|
||||
[_helpWebView.window makeFirstResponder: nil];
|
||||
[_helpWebView setHidden: NO];
|
||||
[_helpWebView setAlphaValue: 0.0F];
|
||||
[_helpWebView.animator setAlphaValue: 1.0F];
|
||||
[_helpWebView setDrawsBackground: TRUE];
|
||||
[_viewLogButton setHidden: YES];
|
||||
[_queryLoggingButton setHidden: YES];
|
||||
} else {
|
||||
[_helpWebView.window makeFirstResponder: nil];
|
||||
[_helpWebView setHidden: YES];
|
||||
[_queryLoggingButton setHidden: NO];
|
||||
- (IBAction)saveAndApplyChangesButtonPressed:(NSButton *)sender {
|
||||
[self showSpinners];
|
||||
if (blacklistDomainsUpdated) {
|
||||
[self blacklistDomainsUpdate: _blacklistDomainsTextView];
|
||||
}
|
||||
if (blacklistIPsUpdated) {
|
||||
[self blacklistIPsUpdate: _blacklistIPsTextView];
|
||||
}
|
||||
if (exceptionsUpdated) {
|
||||
[self exceptionsUpdate: _exceptionsTextView];
|
||||
}
|
||||
blacklistDomainsUpdated = FALSE;
|
||||
blacklistIPsUpdated = FALSE;
|
||||
exceptionsUpdated = FALSE;
|
||||
}
|
||||
|
||||
-(void)textDidChange:(NSNotification *)notification {
|
||||
if (notification.object == _blacklistDomainsTextView) {
|
||||
blacklistDomainsUpdated = TRUE;
|
||||
} else if (notification.object == _blacklistIPsTextView) {
|
||||
blacklistIPsUpdated = TRUE;
|
||||
} else if (notification.object == _exceptionsTextView) {
|
||||
exceptionsUpdated = TRUE;
|
||||
}
|
||||
}
|
||||
|
||||
-(void)helpButtonPressed:(NSButton *)sender {
|
||||
(void) sender;
|
||||
[[NSWorkspace sharedWorkspace] openURL:[NSURL URLWithString: kDNSCRYPT_PROJECT_URL]];
|
||||
}
|
||||
|
||||
@end
|
||||
|
||||
@@ -0,0 +1,15 @@
|
||||
#ifndef NSPlaceHolderTextView_h
|
||||
#define NSPlaceHolderTextView_h
|
||||
|
||||
#import <Foundation/Foundation.h>
|
||||
|
||||
IB_DESIGNABLE
|
||||
@interface NSPlaceHolderTextView : NSTextView
|
||||
|
||||
@property (nonatomic, retain) IBInspectable NSAttributedString *placeHolder;
|
||||
|
||||
- (void)setPlaceHolderText:(NSString *)txt;
|
||||
|
||||
@end
|
||||
|
||||
#endif /* NSPlaceHolderTextView_h */
|
||||
@@ -0,0 +1,33 @@
|
||||
#import "NSPlaceHolderTextView.h"
|
||||
|
||||
@implementation NSPlaceHolderTextView
|
||||
|
||||
@synthesize placeHolder = _placeHolder;
|
||||
|
||||
- (void)setPlaceHolderText:(NSString *)txt {
|
||||
NSColor *txtColor = [NSColor grayColor];
|
||||
NSDictionary *txtDict = [NSDictionary dictionaryWithObjectsAndKeys:txtColor, NSForegroundColorAttributeName, nil];
|
||||
_placeHolder = [[NSAttributedString alloc] initWithString:txt attributes:txtDict];
|
||||
}
|
||||
|
||||
- (BOOL)becomeFirstResponder
|
||||
{
|
||||
[self setNeedsDisplay:YES];
|
||||
return [super becomeFirstResponder];
|
||||
}
|
||||
|
||||
- (void)drawRect:(NSRect)rect
|
||||
{
|
||||
[super drawRect:rect];
|
||||
if ([[self string] isEqualToString:@""] && self != [[self window] firstResponder])
|
||||
[_placeHolder drawAtPoint:NSMakePoint(0,0)];
|
||||
}
|
||||
|
||||
- (BOOL)resignFirstResponder
|
||||
{
|
||||
[self setNeedsDisplay:YES];
|
||||
return [super resignFirstResponder];
|
||||
}
|
||||
|
||||
|
||||
@end
|
||||
@@ -1,9 +1,10 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<document type="com.apple.InterfaceBuilder3.Cocoa.XIB" version="3.0" toolsVersion="8191" systemVersion="15B17c" targetRuntime="MacOSX.Cocoa" propertyAccessControl="none">
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<document type="com.apple.InterfaceBuilder3.Cocoa.XIB" version="3.0" toolsVersion="13196" targetRuntime="MacOSX.Cocoa" propertyAccessControl="none">
|
||||
<dependencies>
|
||||
<deployment version="1070" identifier="macosx"/>
|
||||
<plugIn identifier="com.apple.InterfaceBuilder.CocoaPlugin" version="8191"/>
|
||||
<plugIn identifier="com.apple.WebKitIBPlugin" version="8191"/>
|
||||
<plugIn identifier="com.apple.InterfaceBuilder.CocoaPlugin" version="13196"/>
|
||||
<plugIn identifier="com.apple.WebKitIBPlugin" version="13196"/>
|
||||
<capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/>
|
||||
</dependencies>
|
||||
<objects>
|
||||
<customObject id="-2" userLabel="File's Owner" customClass="DNSCrypt">
|
||||
@@ -11,15 +12,15 @@
|
||||
<outlet property="_window" destination="12" id="26"/>
|
||||
<outlet property="aboutTabViewItem" destination="356" id="376"/>
|
||||
<outlet property="aboutWebView" destination="358" id="359"/>
|
||||
<outlet property="blacklistDomainsTextField" destination="404" id="446"/>
|
||||
<outlet property="blacklistIPsTextField" destination="402" id="444"/>
|
||||
<outlet property="currentResolverTextField" destination="174" id="296"/>
|
||||
<outlet property="blacklistDomainsTextView" destination="gRF-Cw-rp9" id="4B2-cK-eTz"/>
|
||||
<outlet property="blacklistIPsTextView" destination="Jos-8C-r8h" id="RN8-Gu-oPA"/>
|
||||
<outlet property="blockedQueryLoggingButton" destination="J2W-Uj-YcC" id="6K0-xb-DKk"/>
|
||||
<outlet property="currentResolverTextField" destination="Laq-Rf-7ph" id="IoP-Tf-apC"/>
|
||||
<outlet property="descriptionText" destination="2aF-7O-SkX" id="nM9-H2-22g"/>
|
||||
<outlet property="disableIPv6Button" destination="ESJ-Kf-yNj" id="xFL-L3-vLp"/>
|
||||
<outlet property="dnscryptButton" destination="179" id="363"/>
|
||||
<outlet property="exceptionsTextField" destination="406" id="452"/>
|
||||
<outlet property="fallbackButton" destination="281" id="365"/>
|
||||
<outlet property="helpWebView" destination="449" id="450"/>
|
||||
<outlet property="exceptionsTextView" destination="YvE-Lo-YVl" id="9u8-Sn-Poo"/>
|
||||
<outlet property="hideMenubarIcon" destination="Y6w-zv-NQr" id="t6p-SL-hiB"/>
|
||||
<outlet property="locationText" destination="e9H-pq-zb6" id="Elc-qh-Z8b"/>
|
||||
<outlet property="providerLink" destination="323" id="Riq-Cc-CLa"/>
|
||||
<outlet property="queryLoggingButton" destination="398" id="458"/>
|
||||
@@ -48,7 +49,6 @@
|
||||
<tabView initialItem="100" id="99">
|
||||
<rect key="frame" x="13" y="10" width="563" height="359"/>
|
||||
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
|
||||
<animations/>
|
||||
<font key="font" metaFont="system"/>
|
||||
<tabViewItems>
|
||||
<tabViewItem label="General" identifier="1" id="100">
|
||||
@@ -56,10 +56,9 @@
|
||||
<rect key="frame" x="10" y="33" width="543" height="313"/>
|
||||
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
|
||||
<subviews>
|
||||
<button toolTip="Use OpenDNS resolvers with the DNSCrypt protocol" id="179">
|
||||
<button toolTip="Use the DNSCrypt protocol" id="179">
|
||||
<rect key="frame" x="15" y="234" width="204" height="22"/>
|
||||
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
|
||||
<animations/>
|
||||
<buttonCell key="cell" type="check" title="Enable DNSCrypt" bezelStyle="regularSquare" imagePosition="left" alignment="left" inset="2" id="180">
|
||||
<behavior key="behavior" changeContents="YES" doesNotDimImage="YES" lightByContents="YES"/>
|
||||
<font key="font" metaFont="systemBold" size="14"/>
|
||||
@@ -69,54 +68,18 @@
|
||||
<action selector="dnscryptButtonPressed:" target="-2" id="368"/>
|
||||
</connections>
|
||||
</button>
|
||||
<button id="281">
|
||||
<rect key="frame" x="15" y="164" width="239" height="18"/>
|
||||
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
|
||||
<string key="toolTip">Only check this box if you often have to connect to public WiFi hotspots and you don't want to manually disable DNSCrypt in order to pass a captive portal.</string>
|
||||
<animations/>
|
||||
<buttonCell key="cell" type="check" title="Automatically disable if blocked" bezelStyle="regularSquare" imagePosition="left" alignment="left" inset="2" id="282">
|
||||
<behavior key="behavior" changeContents="YES" doesNotDimImage="YES" lightByContents="YES"/>
|
||||
<font key="font" metaFont="system" size="14"/>
|
||||
</buttonCell>
|
||||
<accessibility description="Fallback to insecure DNS"/>
|
||||
<connections>
|
||||
<action selector="fallbackButtonPressed:" target="-2" id="372"/>
|
||||
</connections>
|
||||
</button>
|
||||
<textField verticalHuggingPriority="750" id="162">
|
||||
<rect key="frame" x="14" y="96" width="173" height="19"/>
|
||||
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
|
||||
<animations/>
|
||||
<textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" sendsActionOnEndEditing="YES" title="Current DNS settings:" id="163">
|
||||
<font key="font" metaFont="system" size="16"/>
|
||||
<color key="textColor" name="controlTextColor" catalog="System" colorSpace="catalog"/>
|
||||
<color key="backgroundColor" name="controlColor" catalog="System" colorSpace="catalog"/>
|
||||
</textFieldCell>
|
||||
</textField>
|
||||
<textField verticalHuggingPriority="750" id="Wkj-kT-maK">
|
||||
<rect key="frame" x="278" y="208" width="70" height="19"/>
|
||||
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
|
||||
<animations/>
|
||||
<textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" sendsActionOnEndEditing="YES" title="Location:" id="GO7-P1-scE">
|
||||
<font key="font" metaFont="titleBar"/>
|
||||
<color key="textColor" name="controlTextColor" catalog="System" colorSpace="catalog"/>
|
||||
<color key="backgroundColor" name="controlColor" catalog="System" colorSpace="catalog"/>
|
||||
</textFieldCell>
|
||||
</textField>
|
||||
<textField verticalHuggingPriority="750" id="174">
|
||||
<rect key="frame" x="14" y="-3" width="240" height="83"/>
|
||||
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
|
||||
<animations/>
|
||||
<textFieldCell key="cell" sendsActionOnEndEditing="YES" alignment="left" title="..." placeholderString="" id="175">
|
||||
<font key="font" size="14" name="Monaco"/>
|
||||
<color key="textColor" white="0.2046370968" alpha="1" colorSpace="calibratedWhite"/>
|
||||
<color key="backgroundColor" name="controlColor" catalog="System" colorSpace="catalog"/>
|
||||
</textFieldCell>
|
||||
</textField>
|
||||
<textField verticalHuggingPriority="750" id="rnd-WE-K61">
|
||||
<rect key="frame" x="278" y="46" width="261" height="122"/>
|
||||
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
|
||||
<animations/>
|
||||
<textFieldCell key="cell" sendsActionOnEndEditing="YES" alignment="left" placeholderString="" id="2aF-7O-SkX">
|
||||
<font key="font" size="14" name="Monaco"/>
|
||||
<color key="textColor" white="0.2046370968" alpha="1" colorSpace="calibratedWhite"/>
|
||||
@@ -126,7 +89,6 @@
|
||||
<textField verticalHuggingPriority="750" id="274">
|
||||
<rect key="frame" x="55" y="283" width="219" height="19"/>
|
||||
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
|
||||
<animations/>
|
||||
<textFieldCell key="cell" sendsActionOnEndEditing="YES" alignment="left" title="..." placeholderString="" id="275">
|
||||
<font key="font" size="16" name="Monaco"/>
|
||||
<color key="textColor" white="0.2046370968" alpha="1" colorSpace="calibratedWhite"/>
|
||||
@@ -136,22 +98,16 @@
|
||||
<imageView id="270">
|
||||
<rect key="frame" x="17" y="277" width="32" height="32"/>
|
||||
<autoresizingMask key="autoresizingMask"/>
|
||||
<animations/>
|
||||
<imageCell key="cell" refusesFirstResponder="YES" alignment="left" animates="YES" imageAlignment="topLeft" imageScaling="proportionallyDown" image="ajax-loader" id="271"/>
|
||||
</imageView>
|
||||
<box horizontalHuggingPriority="750" title="Box" boxType="separator" titlePosition="noTitle" id="276">
|
||||
<box horizontalHuggingPriority="750" boxType="separator" id="276">
|
||||
<rect key="frame" x="270" y="2" width="4" height="300"/>
|
||||
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
|
||||
<animations/>
|
||||
<color key="borderColor" white="0.0" alpha="0.41999999999999998" colorSpace="calibratedWhite"/>
|
||||
<color key="fillColor" white="0.0" alpha="0.0" colorSpace="calibratedWhite"/>
|
||||
<font key="titleFont" metaFont="system"/>
|
||||
</box>
|
||||
<button verticalHuggingPriority="750" id="323">
|
||||
<rect key="frame" x="274" y="10" width="269" height="32"/>
|
||||
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
|
||||
<animations/>
|
||||
<buttonCell key="cell" type="push" title="http://www.dnscrypt.org" alternateTitle="Browse the OpenDNS web site" bezelStyle="rounded" alignment="center" borderStyle="border" imageScaling="proportionallyDown" inset="2" id="324">
|
||||
<buttonCell key="cell" type="push" title="http://www.dnscrypt.org" alternateTitle="Browse the provider website" bezelStyle="rounded" alignment="center" borderStyle="border" imageScaling="proportionallyDown" inset="2" id="324">
|
||||
<behavior key="behavior" pushIn="YES" lightByBackground="YES" lightByGray="YES"/>
|
||||
<font key="font" metaFont="cellTitle"/>
|
||||
</buttonCell>
|
||||
@@ -159,18 +115,13 @@
|
||||
<action selector="providerLinkPushed:" target="-2" id="HYc-qW-k00"/>
|
||||
</connections>
|
||||
</button>
|
||||
<box verticalHuggingPriority="750" title="Box" boxType="separator" titlePosition="noTitle" id="345">
|
||||
<box verticalHuggingPriority="750" boxType="separator" id="345">
|
||||
<rect key="frame" x="17" y="193" width="240" height="5"/>
|
||||
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
|
||||
<animations/>
|
||||
<color key="borderColor" white="0.0" alpha="0.41999999999999998" colorSpace="calibratedWhite"/>
|
||||
<color key="fillColor" white="0.0" alpha="0.0" colorSpace="calibratedWhite"/>
|
||||
<font key="titleFont" metaFont="system"/>
|
||||
</box>
|
||||
<textField verticalHuggingPriority="750" id="UQr-Gd-nzd">
|
||||
<rect key="frame" x="324" y="268" width="183" height="19"/>
|
||||
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
|
||||
<animations/>
|
||||
<textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" sendsActionOnEndEditing="YES" title="DNSCrypt name server:" id="ctO-Mw-4JZ">
|
||||
<font key="font" metaFont="system" size="16"/>
|
||||
<color key="textColor" name="controlTextColor" catalog="System" colorSpace="catalog"/>
|
||||
@@ -180,7 +131,6 @@
|
||||
<popUpButton toolTip="Select the resolver to use" verticalHuggingPriority="750" id="yY6-5S-StG">
|
||||
<rect key="frame" x="286" y="232" width="260" height="26"/>
|
||||
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
|
||||
<animations/>
|
||||
<popUpButtonCell key="cell" type="push" title="None selected" bezelStyle="rounded" alignment="left" lineBreakMode="truncatingTail" state="on" borderStyle="borderAndBezel" imageScaling="proportionallyDown" inset="2" selectedItem="zMy-SG-d4L" id="LPZ-wM-tAR">
|
||||
<behavior key="behavior" lightByBackground="YES" lightByGray="YES"/>
|
||||
<font key="font" metaFont="menu"/>
|
||||
@@ -197,10 +147,18 @@
|
||||
<action selector="resolversNamesPopupButtonPressed:" target="-2" id="fEP-TP-PCO"/>
|
||||
</connections>
|
||||
</popUpButton>
|
||||
<button toolTip="Do not try to resolve IPv6 records" id="ESJ-Kf-yNj">
|
||||
<rect key="frame" x="15" y="133" width="252" height="18"/>
|
||||
<textField verticalHuggingPriority="750" id="e9H-pq-zb6">
|
||||
<rect key="frame" x="278" y="182" width="267" height="27"/>
|
||||
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
|
||||
<textFieldCell key="cell" lineBreakMode="truncatingTail" sendsActionOnEndEditing="YES" alignment="left" placeholderString="-" id="q83-P7-DNW">
|
||||
<font key="font" size="12" name="Monaco"/>
|
||||
<color key="textColor" white="0.2046370968" alpha="1" colorSpace="calibratedWhite"/>
|
||||
<color key="backgroundColor" name="controlColor" catalog="System" colorSpace="catalog"/>
|
||||
</textFieldCell>
|
||||
</textField>
|
||||
<button toolTip="Do not try to resolve IPv6 records" misplaced="YES" id="ESJ-Kf-yNj">
|
||||
<rect key="frame" x="15" y="155" width="252" height="18"/>
|
||||
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
|
||||
<animations/>
|
||||
<buttonCell key="cell" type="check" title="Disable IPv6 to reduce IPv4 latency" bezelStyle="regularSquare" imagePosition="left" alignment="left" inset="2" id="cCj-X4-U6n">
|
||||
<behavior key="behavior" changeContents="YES" doesNotDimImage="YES" lightByContents="YES"/>
|
||||
<font key="font" metaFont="system" size="14"/>
|
||||
@@ -210,18 +168,38 @@
|
||||
<action selector="disableIPv6ButtonPressed:" target="-2" id="s7R-gl-0Fy"/>
|
||||
</connections>
|
||||
</button>
|
||||
<textField verticalHuggingPriority="750" id="e9H-pq-zb6">
|
||||
<rect key="frame" x="278" y="182" width="267" height="27"/>
|
||||
<textField verticalHuggingPriority="750" misplaced="YES" id="162">
|
||||
<rect key="frame" x="15" y="93" width="173" height="19"/>
|
||||
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
|
||||
<animations/>
|
||||
<textFieldCell key="cell" lineBreakMode="truncatingTail" sendsActionOnEndEditing="YES" alignment="left" placeholderString="-" id="q83-P7-DNW">
|
||||
<font key="font" size="12" name="Monaco"/>
|
||||
<color key="textColor" white="0.2046370968" alpha="1" colorSpace="calibratedWhite"/>
|
||||
<textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" sendsActionOnEndEditing="YES" title="Current DNS settings:" id="163">
|
||||
<font key="font" metaFont="system" size="16"/>
|
||||
<color key="textColor" name="controlTextColor" catalog="System" colorSpace="catalog"/>
|
||||
<color key="backgroundColor" name="controlColor" catalog="System" colorSpace="catalog"/>
|
||||
</textFieldCell>
|
||||
</textField>
|
||||
<textField identifier="currentResolver" verticalHuggingPriority="750" misplaced="YES" id="Laq-Rf-7ph">
|
||||
<rect key="frame" x="7" y="17" width="261" height="68"/>
|
||||
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
|
||||
<textFieldCell key="cell" sendsActionOnEndEditing="YES" alignment="left" placeholderString="" id="EEK-vb-MH8">
|
||||
<font key="font" size="14" name="Monaco"/>
|
||||
<color key="textColor" white="0.2046370968" alpha="1" colorSpace="calibratedWhite"/>
|
||||
<color key="backgroundColor" name="controlColor" catalog="System" colorSpace="catalog"/>
|
||||
</textFieldCell>
|
||||
<accessibility description="Current resolver IP addresses"/>
|
||||
</textField>
|
||||
<button toolTip="Use the DNSCrypt protocol" misplaced="YES" id="Y6w-zv-NQr">
|
||||
<rect key="frame" x="15" y="205" width="204" height="22"/>
|
||||
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
|
||||
<buttonCell key="cell" type="check" title="Hide menubar icon" bezelStyle="regularSquare" imagePosition="left" alignment="left" inset="2" id="yaC-i9-RQL">
|
||||
<behavior key="behavior" changeContents="YES" doesNotDimImage="YES" lightByContents="YES"/>
|
||||
<font key="font" metaFont="system" size="14"/>
|
||||
</buttonCell>
|
||||
<accessibility description="Enable DNSCrypt"/>
|
||||
<connections>
|
||||
<action selector="hideMenubarIcon:" target="-2" id="7kK-mO-czX"/>
|
||||
</connections>
|
||||
</button>
|
||||
</subviews>
|
||||
<animations/>
|
||||
</view>
|
||||
</tabViewItem>
|
||||
<tabViewItem label="Advanced" identifier="2" id="388">
|
||||
@@ -229,20 +207,18 @@
|
||||
<rect key="frame" x="10" y="33" width="543" height="313"/>
|
||||
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
|
||||
<subviews>
|
||||
<textField verticalHuggingPriority="750" id="390">
|
||||
<rect key="frame" x="5" y="236" width="406" height="17"/>
|
||||
<textField verticalHuggingPriority="750" misplaced="YES" id="390">
|
||||
<rect key="frame" x="5" y="256" width="406" height="17"/>
|
||||
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
|
||||
<animations/>
|
||||
<textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" sendsActionOnEndEditing="YES" title="When not using DNSCrypt, use the following static DNS servers:" id="391">
|
||||
<font key="font" metaFont="system"/>
|
||||
<color key="textColor" name="controlTextColor" catalog="System" colorSpace="catalog"/>
|
||||
<color key="backgroundColor" name="controlColor" catalog="System" colorSpace="catalog"/>
|
||||
</textFieldCell>
|
||||
</textField>
|
||||
<textField verticalHuggingPriority="750" id="392">
|
||||
<rect key="frame" x="8" y="206" width="526" height="22"/>
|
||||
<textField verticalHuggingPriority="750" misplaced="YES" id="392">
|
||||
<rect key="frame" x="8" y="226" width="526" height="22"/>
|
||||
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
|
||||
<animations/>
|
||||
<textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" selectable="YES" editable="YES" sendsActionOnEndEditing="YES" state="on" borderStyle="bezel" toolTip="Leave empty to use DHCP-provided servers" placeholderString="Space-separated list of IP addresses or leave blank for DHCP" drawsBackground="YES" usesSingleLineMode="YES" id="393">
|
||||
<font key="font" size="13" name="Courier"/>
|
||||
<color key="textColor" name="textColor" catalog="System" colorSpace="catalog"/>
|
||||
@@ -256,10 +232,9 @@
|
||||
<action selector="staticResolversTextFieldChanged:" target="-2" id="432"/>
|
||||
</connections>
|
||||
</textField>
|
||||
<button id="398">
|
||||
<rect key="frame" x="7" y="281" width="126" height="18"/>
|
||||
<button misplaced="YES" id="398">
|
||||
<rect key="frame" x="7" y="290" width="126" height="18"/>
|
||||
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
|
||||
<animations/>
|
||||
<buttonCell key="cell" type="check" title="Log DNS queries" bezelStyle="regularSquare" imagePosition="left" inset="2" id="399">
|
||||
<behavior key="behavior" changeContents="YES" doesNotDimImage="YES" lightByContents="YES"/>
|
||||
<font key="font" metaFont="system"/>
|
||||
@@ -269,11 +244,10 @@
|
||||
</buttonCell>
|
||||
<accessibility description="Log DNS queries"/>
|
||||
</button>
|
||||
<button verticalHuggingPriority="750" id="400">
|
||||
<rect key="frame" x="161" y="273" width="94" height="32"/>
|
||||
<button verticalHuggingPriority="750" misplaced="YES" id="400">
|
||||
<rect key="frame" x="127" y="282" width="94" height="32"/>
|
||||
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
|
||||
<animations/>
|
||||
<buttonCell key="cell" type="push" title="View log" bezelStyle="rounded" alignment="center" borderStyle="border" imageScaling="proportionallyDown" inset="2" id="401">
|
||||
<buttonCell key="cell" type="push" title="View query log" bezelStyle="rounded" alignment="center" borderStyle="border" imageScaling="proportionallyDown" inset="2" id="401">
|
||||
<behavior key="behavior" pushIn="YES" lightByBackground="YES" lightByGray="YES"/>
|
||||
<font key="font" metaFont="system"/>
|
||||
</buttonCell>
|
||||
@@ -282,94 +256,36 @@
|
||||
<action selector="viewLogButtonPushed:" target="-2" id="441"/>
|
||||
</connections>
|
||||
</button>
|
||||
<textField verticalHuggingPriority="750" horizontalCompressionResistancePriority="250" id="402">
|
||||
<rect key="frame" x="10" y="7" width="169" height="141"/>
|
||||
<textField verticalHuggingPriority="750" horizontalCompressionResistancePriority="250" misplaced="YES" setsMaxLayoutWidthAtFirstLayout="YES" id="408">
|
||||
<rect key="frame" x="7" y="180" width="175" height="34"/>
|
||||
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
|
||||
<animations/>
|
||||
<textFieldCell key="cell" selectable="YES" editable="YES" sendsActionOnEndEditing="YES" state="on" borderStyle="bezel" drawsBackground="YES" id="403">
|
||||
<font key="font" size="11" name="Courier"/>
|
||||
<string key="placeholderString">IP addresses (IPv4/IPv6) to block.
208.67.0.255
192.0.43.10
|
||||
::1</string>
|
||||
<color key="textColor" name="textColor" catalog="System" colorSpace="catalog"/>
|
||||
<color key="backgroundColor" name="textBackgroundColor" catalog="System" colorSpace="catalog"/>
|
||||
<allowedInputSourceLocales>
|
||||
<string>NSAllRomanInputSourcesLocaleIdentifier</string>
|
||||
</allowedInputSourceLocales>
|
||||
</textFieldCell>
|
||||
<connections>
|
||||
<action selector="blacklistIPsUpdated:" target="-2" id="445"/>
|
||||
</connections>
|
||||
</textField>
|
||||
<textField verticalHuggingPriority="750" horizontalCompressionResistancePriority="250" id="404">
|
||||
<rect key="frame" x="188" y="7" width="169" height="141"/>
|
||||
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
|
||||
<animations/>
|
||||
<textFieldCell key="cell" selectable="YES" editable="YES" sendsActionOnEndEditing="YES" state="on" borderStyle="bezel" drawsBackground="YES" id="405">
|
||||
<font key="font" size="11" name="Courier"/>
|
||||
<string key="placeholderString">Domain names to block.
|
||||
*sex*
|
||||
ads.*
|
||||
*.example.com
suspicious.example.net</string>
|
||||
<color key="textColor" name="textColor" catalog="System" colorSpace="catalog"/>
|
||||
<color key="backgroundColor" name="textBackgroundColor" catalog="System" colorSpace="catalog"/>
|
||||
<allowedInputSourceLocales>
|
||||
<string>NSAllRomanInputSourcesLocaleIdentifier</string>
|
||||
</allowedInputSourceLocales>
|
||||
</textFieldCell>
|
||||
<connections>
|
||||
<action selector="blacklistDomainsUpdated:" target="-2" id="447"/>
|
||||
</connections>
|
||||
</textField>
|
||||
<textField verticalHuggingPriority="750" horizontalCompressionResistancePriority="250" id="406">
|
||||
<rect key="frame" x="366" y="7" width="169" height="141"/>
|
||||
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
|
||||
<animations/>
|
||||
<textFieldCell key="cell" selectable="YES" editable="YES" sendsActionOnEndEditing="YES" state="on" borderStyle="bezel" placeholderString="Domain names to resolve through the default resolvers instead of DNSCrypt.
localdomain
mycompany.example.net" drawsBackground="YES" id="407">
|
||||
<font key="font" size="11" name="Courier"/>
|
||||
<color key="textColor" name="textColor" catalog="System" colorSpace="catalog"/>
|
||||
<color key="backgroundColor" name="textBackgroundColor" catalog="System" colorSpace="catalog"/>
|
||||
<allowedInputSourceLocales>
|
||||
<string>NSAllRomanInputSourcesLocaleIdentifier</string>
|
||||
</allowedInputSourceLocales>
|
||||
</textFieldCell>
|
||||
<connections>
|
||||
<action selector="exceptionsUpdated:" target="-2" id="453"/>
|
||||
</connections>
|
||||
</textField>
|
||||
<textField verticalHuggingPriority="750" horizontalCompressionResistancePriority="250" setsMaxLayoutWidthAtFirstLayout="YES" id="408">
|
||||
<rect key="frame" x="7" y="156" width="175" height="34"/>
|
||||
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
|
||||
<animations/>
|
||||
<textFieldCell key="cell" sendsActionOnEndEditing="YES" title="Block replies containing any of these IP addresses:" id="409">
|
||||
<font key="font" metaFont="system"/>
|
||||
<color key="textColor" name="controlTextColor" catalog="System" colorSpace="catalog"/>
|
||||
<color key="backgroundColor" name="controlColor" catalog="System" colorSpace="catalog"/>
|
||||
</textFieldCell>
|
||||
</textField>
|
||||
<textField verticalHuggingPriority="750" horizontalCompressionResistancePriority="250" setsMaxLayoutWidthAtFirstLayout="YES" id="410">
|
||||
<rect key="frame" x="186" y="156" width="175" height="34"/>
|
||||
<textField verticalHuggingPriority="750" horizontalCompressionResistancePriority="250" misplaced="YES" setsMaxLayoutWidthAtFirstLayout="YES" id="410">
|
||||
<rect key="frame" x="186" y="180" width="175" height="34"/>
|
||||
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
|
||||
<animations/>
|
||||
<textFieldCell key="cell" sendsActionOnEndEditing="YES" title="Block queries for the following domain names:" id="411">
|
||||
<font key="font" metaFont="system"/>
|
||||
<color key="textColor" name="controlTextColor" catalog="System" colorSpace="catalog"/>
|
||||
<color key="backgroundColor" name="controlColor" catalog="System" colorSpace="catalog"/>
|
||||
</textFieldCell>
|
||||
</textField>
|
||||
<textField verticalHuggingPriority="750" horizontalCompressionResistancePriority="250" setsMaxLayoutWidthAtFirstLayout="YES" id="412">
|
||||
<rect key="frame" x="363" y="156" width="175" height="34"/>
|
||||
<textField verticalHuggingPriority="750" horizontalCompressionResistancePriority="250" misplaced="YES" setsMaxLayoutWidthAtFirstLayout="YES" id="412">
|
||||
<rect key="frame" x="363" y="180" width="175" height="34"/>
|
||||
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
|
||||
<animations/>
|
||||
<textFieldCell key="cell" sendsActionOnEndEditing="YES" title="Bypass DNSCrypt to resolve these domains:" id="413">
|
||||
<font key="font" metaFont="system"/>
|
||||
<color key="textColor" name="controlTextColor" catalog="System" colorSpace="catalog"/>
|
||||
<color key="backgroundColor" name="controlColor" catalog="System" colorSpace="catalog"/>
|
||||
</textFieldCell>
|
||||
</textField>
|
||||
<button horizontalHuggingPriority="750" verticalHuggingPriority="750" id="416">
|
||||
<rect key="frame" x="503" y="277" width="25" height="25"/>
|
||||
<button horizontalHuggingPriority="750" verticalHuggingPriority="750" misplaced="YES" id="416">
|
||||
<rect key="frame" x="511" y="286" width="25" height="25"/>
|
||||
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
|
||||
<animations/>
|
||||
<buttonCell key="cell" type="help" bezelStyle="helpButton" alignment="center" borderStyle="border" imageScaling="proportionallyDown" inset="2" id="417">
|
||||
<behavior key="behavior" pushIn="YES" lightByBackground="YES" lightByGray="YES"/>
|
||||
<font key="font" metaFont="system"/>
|
||||
@@ -378,33 +294,145 @@ ads.*
|
||||
<action selector="helpButtonPressed:" target="-2" id="451"/>
|
||||
</connections>
|
||||
</button>
|
||||
<textField verticalHuggingPriority="750" id="423">
|
||||
<rect key="frame" x="467" y="284" width="33" height="17"/>
|
||||
<box verticalHuggingPriority="750" misplaced="YES" boxType="separator" id="425">
|
||||
<rect key="frame" x="9" y="279" width="526" height="5"/>
|
||||
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
|
||||
<animations/>
|
||||
<textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" sendsActionOnEndEditing="YES" title="Help" id="424">
|
||||
<font key="font" metaFont="system"/>
|
||||
<color key="textColor" name="controlTextColor" catalog="System" colorSpace="catalog"/>
|
||||
<color key="backgroundColor" name="controlColor" catalog="System" colorSpace="catalog"/>
|
||||
</textFieldCell>
|
||||
</textField>
|
||||
<box verticalHuggingPriority="750" title="Box" boxType="separator" titlePosition="noTitle" id="425">
|
||||
<rect key="frame" x="9" y="265" width="526" height="5"/>
|
||||
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
|
||||
<animations/>
|
||||
<color key="borderColor" white="0.0" alpha="0.41999999999999998" colorSpace="calibratedWhite"/>
|
||||
<color key="fillColor" white="0.0" alpha="0.0" colorSpace="calibratedWhite"/>
|
||||
<font key="titleFont" metaFont="system"/>
|
||||
</box>
|
||||
<webView hidden="YES" maintainsBackForwardList="NO" id="449">
|
||||
<rect key="frame" x="3" y="-3" width="536" height="278"/>
|
||||
<autoresizingMask key="autoresizingMask"/>
|
||||
<animations/>
|
||||
<webPreferences key="preferences" identifier="helpWebView" defaultFontSize="12" defaultFixedFontSize="12" minimumFontSize="2" plugInsEnabled="NO" javaEnabled="NO" javaScriptEnabled="NO" javaScriptCanOpenWindowsAutomatically="NO" loadsImagesAutomatically="NO" allowsAnimatedImages="NO" allowsAnimatedImageLooping="NO"/>
|
||||
<accessibility description="Static DNS resolvers"/>
|
||||
</webView>
|
||||
<scrollView misplaced="YES" horizontalLineScroll="10" horizontalPageScroll="10" verticalLineScroll="10" verticalPageScroll="10" hasHorizontalScroller="NO" usesPredominantAxisScrolling="NO" id="jMK-cV-G1F">
|
||||
<rect key="frame" x="7" y="31" width="173" height="141"/>
|
||||
<autoresizingMask key="autoresizingMask" heightSizable="YES"/>
|
||||
<clipView key="contentView" id="xbZ-5I-JUV">
|
||||
<rect key="frame" x="1" y="1" width="171" height="139"/>
|
||||
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
|
||||
<subviews>
|
||||
<textView importsGraphics="NO" richText="NO" verticallyResizable="YES" usesFontPanel="YES" selectionGranularity="word" findStyle="panel" incrementalSearchingEnabled="YES" allowsUndo="YES" usesRuler="YES" allowsNonContiguousLayout="YES" smartInsertDelete="YES" id="Jos-8C-r8h" customClass="NSPlaceHolderTextView">
|
||||
<rect key="frame" x="0.0" y="0.0" width="171" height="139"/>
|
||||
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
|
||||
<color key="backgroundColor" white="1" alpha="1" colorSpace="calibratedWhite"/>
|
||||
<size key="minSize" width="171" height="139"/>
|
||||
<size key="maxSize" width="463" height="10000000"/>
|
||||
<color key="insertionPointColor" name="controlTextColor" catalog="System" colorSpace="catalog"/>
|
||||
<allowedInputSourceLocales>
|
||||
<string>NSAllRomanInputSourcesLocaleIdentifier</string>
|
||||
</allowedInputSourceLocales>
|
||||
<connections>
|
||||
<outlet property="delegate" destination="-2" id="OZf-fp-jLv"/>
|
||||
</connections>
|
||||
</textView>
|
||||
</subviews>
|
||||
<color key="backgroundColor" white="1" alpha="1" colorSpace="calibratedWhite"/>
|
||||
</clipView>
|
||||
<scroller key="horizontalScroller" hidden="YES" verticalHuggingPriority="750" doubleValue="1" horizontal="YES" id="aEl-Zj-fOn">
|
||||
<rect key="frame" x="-100" y="-100" width="87" height="18"/>
|
||||
<autoresizingMask key="autoresizingMask"/>
|
||||
</scroller>
|
||||
<scroller key="verticalScroller" verticalHuggingPriority="750" doubleValue="1" horizontal="NO" id="TLo-RQ-0Ze">
|
||||
<rect key="frame" x="156" y="1" width="16" height="139"/>
|
||||
<autoresizingMask key="autoresizingMask"/>
|
||||
</scroller>
|
||||
</scrollView>
|
||||
<scrollView misplaced="YES" horizontalLineScroll="10" horizontalPageScroll="10" verticalLineScroll="10" verticalPageScroll="10" hasHorizontalScroller="NO" usesPredominantAxisScrolling="NO" id="Qko-q8-g0Z">
|
||||
<rect key="frame" x="186" y="31" width="173" height="141"/>
|
||||
<autoresizingMask key="autoresizingMask" heightSizable="YES"/>
|
||||
<clipView key="contentView" id="BQE-BC-kgC">
|
||||
<rect key="frame" x="1" y="1" width="171" height="139"/>
|
||||
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
|
||||
<subviews>
|
||||
<textView importsGraphics="NO" richText="NO" verticallyResizable="YES" usesFontPanel="YES" findStyle="panel" incrementalSearchingEnabled="YES" allowsUndo="YES" usesRuler="YES" allowsNonContiguousLayout="YES" spellingCorrection="YES" smartInsertDelete="YES" id="gRF-Cw-rp9" customClass="NSPlaceHolderTextView">
|
||||
<rect key="frame" x="0.0" y="0.0" width="171" height="139"/>
|
||||
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
|
||||
<color key="backgroundColor" white="1" alpha="1" colorSpace="calibratedWhite"/>
|
||||
<size key="minSize" width="171" height="139"/>
|
||||
<size key="maxSize" width="463" height="10000000"/>
|
||||
<color key="insertionPointColor" name="controlTextColor" catalog="System" colorSpace="catalog"/>
|
||||
<allowedInputSourceLocales>
|
||||
<string>NSAllRomanInputSourcesLocaleIdentifier</string>
|
||||
</allowedInputSourceLocales>
|
||||
<connections>
|
||||
<outlet property="delegate" destination="-2" id="bRg-GP-ktD"/>
|
||||
</connections>
|
||||
</textView>
|
||||
</subviews>
|
||||
<color key="backgroundColor" white="1" alpha="1" colorSpace="calibratedWhite"/>
|
||||
</clipView>
|
||||
<scroller key="horizontalScroller" hidden="YES" verticalHuggingPriority="750" doubleValue="1" horizontal="YES" id="F7U-rs-cjI">
|
||||
<rect key="frame" x="-100" y="-100" width="87" height="18"/>
|
||||
<autoresizingMask key="autoresizingMask"/>
|
||||
</scroller>
|
||||
<scroller key="verticalScroller" verticalHuggingPriority="750" doubleValue="1" horizontal="NO" id="I9u-BD-eBC">
|
||||
<rect key="frame" x="156" y="1" width="16" height="139"/>
|
||||
<autoresizingMask key="autoresizingMask"/>
|
||||
</scroller>
|
||||
</scrollView>
|
||||
<scrollView misplaced="YES" horizontalLineScroll="10" horizontalPageScroll="10" verticalLineScroll="10" verticalPageScroll="10" hasHorizontalScroller="NO" usesPredominantAxisScrolling="NO" id="sD4-mi-6fB">
|
||||
<rect key="frame" x="365" y="31" width="173" height="141"/>
|
||||
<autoresizingMask key="autoresizingMask" heightSizable="YES"/>
|
||||
<clipView key="contentView" id="UK5-2c-eqe">
|
||||
<rect key="frame" x="1" y="1" width="171" height="139"/>
|
||||
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
|
||||
<subviews>
|
||||
<textView importsGraphics="NO" richText="NO" verticallyResizable="YES" usesFontPanel="YES" findStyle="panel" incrementalSearchingEnabled="YES" allowsUndo="YES" usesRuler="YES" allowsNonContiguousLayout="YES" spellingCorrection="YES" smartInsertDelete="YES" id="YvE-Lo-YVl" customClass="NSPlaceHolderTextView">
|
||||
<rect key="frame" x="0.0" y="0.0" width="171" height="139"/>
|
||||
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
|
||||
<color key="backgroundColor" white="1" alpha="1" colorSpace="calibratedWhite"/>
|
||||
<size key="minSize" width="171" height="139"/>
|
||||
<size key="maxSize" width="463" height="10000000"/>
|
||||
<color key="insertionPointColor" name="controlTextColor" catalog="System" colorSpace="catalog"/>
|
||||
<allowedInputSourceLocales>
|
||||
<string>NSAllRomanInputSourcesLocaleIdentifier</string>
|
||||
</allowedInputSourceLocales>
|
||||
<connections>
|
||||
<outlet property="delegate" destination="-2" id="hUC-03-vFm"/>
|
||||
</connections>
|
||||
</textView>
|
||||
</subviews>
|
||||
<color key="backgroundColor" white="1" alpha="1" colorSpace="calibratedWhite"/>
|
||||
</clipView>
|
||||
<scroller key="horizontalScroller" hidden="YES" verticalHuggingPriority="750" doubleValue="1" horizontal="YES" id="Wuj-rd-fFa">
|
||||
<rect key="frame" x="-100" y="-100" width="87" height="18"/>
|
||||
<autoresizingMask key="autoresizingMask"/>
|
||||
</scroller>
|
||||
<scroller key="verticalScroller" verticalHuggingPriority="750" doubleValue="1" horizontal="NO" id="WdU-Ib-n7D">
|
||||
<rect key="frame" x="156" y="1" width="16" height="139"/>
|
||||
<autoresizingMask key="autoresizingMask"/>
|
||||
</scroller>
|
||||
</scrollView>
|
||||
<button verticalHuggingPriority="750" misplaced="YES" id="Ed0-Kd-FAT">
|
||||
<rect key="frame" x="179" y="-4" width="187" height="32"/>
|
||||
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
|
||||
<buttonCell key="cell" type="push" title="Save and apply changes" bezelStyle="rounded" alignment="center" borderStyle="border" imageScaling="proportionallyDown" inset="2" id="JSd-1Q-unh">
|
||||
<behavior key="behavior" pushIn="YES" lightByBackground="YES" lightByGray="YES"/>
|
||||
<font key="font" metaFont="system"/>
|
||||
</buttonCell>
|
||||
<connections>
|
||||
<action selector="saveAndApplyChangesButtonPressed:" target="-2" id="541-Cq-wgy"/>
|
||||
</connections>
|
||||
</button>
|
||||
<button misplaced="YES" id="J2W-Uj-YcC">
|
||||
<rect key="frame" x="246" y="290" width="145" height="18"/>
|
||||
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
|
||||
<buttonCell key="cell" type="check" title="Log blocked queries" bezelStyle="regularSquare" imagePosition="left" inset="2" id="wk0-j2-TT6">
|
||||
<behavior key="behavior" changeContents="YES" doesNotDimImage="YES" lightByContents="YES"/>
|
||||
<font key="font" metaFont="system"/>
|
||||
<connections>
|
||||
<action selector="blockedQueryLoggingButtonPressed:" target="-2" id="dEx-Cf-vKu"/>
|
||||
</connections>
|
||||
</buttonCell>
|
||||
<accessibility description="Log blocked DNS queries"/>
|
||||
</button>
|
||||
<button verticalHuggingPriority="750" misplaced="YES" id="aHY-xb-fdb">
|
||||
<rect key="frame" x="388" y="282" width="108" height="32"/>
|
||||
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
|
||||
<buttonCell key="cell" type="push" title="View blocked" bezelStyle="rounded" alignment="center" borderStyle="border" imageScaling="proportionallyDown" inset="2" id="ScZ-t3-c3e">
|
||||
<behavior key="behavior" pushIn="YES" lightByBackground="YES" lightByGray="YES"/>
|
||||
<font key="font" metaFont="system"/>
|
||||
</buttonCell>
|
||||
<accessibility description="View the DNS query log"/>
|
||||
<connections>
|
||||
<action selector="viewBlockedLogButtonPushed:" target="-2" id="PNq-Sc-lOb"/>
|
||||
</connections>
|
||||
</button>
|
||||
</subviews>
|
||||
<animations/>
|
||||
</view>
|
||||
</tabViewItem>
|
||||
<tabViewItem label="About" identifier="3" id="356">
|
||||
@@ -415,7 +443,6 @@ ads.*
|
||||
<webView maintainsBackForwardList="NO" id="358">
|
||||
<rect key="frame" x="17" y="31" width="509" height="279"/>
|
||||
<autoresizingMask key="autoresizingMask"/>
|
||||
<animations/>
|
||||
<webPreferences key="preferences" defaultFontSize="12" defaultFixedFontSize="12" plugInsEnabled="NO" javaEnabled="NO" javaScriptCanOpenWindowsAutomatically="NO" loadsImagesAutomatically="NO" allowsAnimatedImages="NO" allowsAnimatedImageLooping="NO">
|
||||
<nil key="identifier"/>
|
||||
</webPreferences>
|
||||
@@ -423,7 +450,6 @@ ads.*
|
||||
<button verticalHuggingPriority="750" id="385">
|
||||
<rect key="frame" x="437" y="-5" width="95" height="32"/>
|
||||
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
|
||||
<animations/>
|
||||
<buttonCell key="cell" type="push" title="Uninstall" bezelStyle="rounded" alignment="center" borderStyle="border" imageScaling="proportionallyDown" inset="2" id="386">
|
||||
<behavior key="behavior" pushIn="YES" lightByBackground="YES" lightByGray="YES"/>
|
||||
<font key="font" metaFont="system"/>
|
||||
@@ -433,7 +459,6 @@ ads.*
|
||||
</connections>
|
||||
</button>
|
||||
</subviews>
|
||||
<animations/>
|
||||
</view>
|
||||
</tabViewItem>
|
||||
<tabViewItem label="Release Notes" identifier="4" id="349">
|
||||
@@ -444,20 +469,18 @@ ads.*
|
||||
<webView maintainsBackForwardList="NO" id="354">
|
||||
<rect key="frame" x="17" y="17" width="509" height="293"/>
|
||||
<autoresizingMask key="autoresizingMask"/>
|
||||
<animations/>
|
||||
<webPreferences key="preferences" defaultFontSize="12" defaultFixedFontSize="12" plugInsEnabled="NO" javaEnabled="NO" javaScriptCanOpenWindowsAutomatically="NO" loadsImagesAutomatically="NO" allowsAnimatedImages="NO" allowsAnimatedImageLooping="NO">
|
||||
<nil key="identifier"/>
|
||||
</webPreferences>
|
||||
</webView>
|
||||
</subviews>
|
||||
<animations/>
|
||||
</view>
|
||||
</tabViewItem>
|
||||
</tabViewItems>
|
||||
</tabView>
|
||||
</subviews>
|
||||
<animations/>
|
||||
</view>
|
||||
<point key="canvasLocation" x="620.5" y="104.5"/>
|
||||
</window>
|
||||
<customObject id="263"/>
|
||||
</objects>
|
||||
|
||||
@@ -7,6 +7,7 @@
|
||||
body
|
||||
font:
|
||||
family: arial, helvetica, sans-serif
|
||||
size: 14px
|
||||
margin: 0
|
||||
h1
|
||||
margin: 0
|
||||
@@ -19,22 +20,13 @@
|
||||
Tips:
|
||||
%ul
|
||||
%li
|
||||
If you have a firewall, open TCP and UDP ports 53, 54, 443
|
||||
and 1053. These are the most common ports used for DNSCrypt.
|
||||
If you have a firewall, open TCP and UDP ports 53 and 443.
|
||||
These are the most common ports used for DNSCrypt.
|
||||
%li
|
||||
The "Automatically disable if blocked" feature automatically disables
|
||||
DNSCrypt when DNS queries are not able to reach the DNSCrypt
|
||||
resolver. This can
|
||||
happen on public WiFi networks that require going through a captive
|
||||
portal before you can access external networks.
|
||||
This function is only provided for conveniency.
|
||||
When enabled, the protocol can be easily downgraded by
|
||||
third-parties. In other words, when the "Automatically
|
||||
disable if blocked" feature is enabled, this software doesn't
|
||||
provide any security at all against active attackers, but it can
|
||||
still be useful against passive attackers and in order to bypass
|
||||
DNS censorship. Don't enable it unless you are frequently
|
||||
roaming and you don't want to manually disable/enable DNSCrypt.
|
||||
WiFi captive portals dont work if they can't intercept DNS queries
|
||||
and often block DNSCrypt.
|
||||
So on public WiFi network, disable DNSCrypt, log in, then you can
|
||||
enable it again.
|
||||
%li
|
||||
Using Little Snitch? There are a few rules you need to establish,
|
||||
which Little Snitch should prompt for when trying to
|
||||
@@ -43,6 +35,5 @@
|
||||
%li Allow any outgoing connection for system processes (dnscrypt-proxy)
|
||||
%li Allow any incoming connection for system process (dnscrypt-proxy)
|
||||
%li Allow any outgoing connection for system processes (dig)
|
||||
%li Allow outgoing TCP connections to port 80 (http) of www.apple.com for system process (curl)
|
||||
%li 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)
|
||||
(Thanks to @cavemandaveman and @TraderStf)
|
||||
|
||||
@@ -6,6 +6,7 @@
|
||||
<style>
|
||||
body {
|
||||
font-family: arial, helvetica, sans-serif;
|
||||
font-size: 14px;
|
||||
margin: 0; }
|
||||
|
||||
h1 {
|
||||
@@ -22,23 +23,14 @@
|
||||
Tips:
|
||||
<ul>
|
||||
<li>
|
||||
If you have a firewall, open TCP and UDP ports 53, 54, 443
|
||||
and 1053. These are the most common ports used for DNSCrypt.
|
||||
If you have a firewall, open TCP and UDP ports 53 and 443.
|
||||
These are the most common ports used for DNSCrypt.
|
||||
</li>
|
||||
<li>
|
||||
The "Automatically disable if blocked" feature automatically disables
|
||||
DNSCrypt when DNS queries are not able to reach the DNSCrypt
|
||||
resolver. This can
|
||||
happen on public WiFi networks that require going through a captive
|
||||
portal before you can access external networks.
|
||||
This function is only provided for conveniency.
|
||||
When enabled, the protocol can be easily downgraded by
|
||||
third-parties. In other words, when the "Automatically
|
||||
disable if blocked" feature is enabled, this software doesn't
|
||||
provide any security at all against active attackers, but it can
|
||||
still be useful against passive attackers and in order to bypass
|
||||
DNS censorship. Don't enable it unless you are frequently
|
||||
roaming and you don't want to manually disable/enable DNSCrypt.
|
||||
WiFi captive portals dont work if they can't intercept DNS queries
|
||||
and often block DNSCrypt.
|
||||
So on public WiFi network, disable DNSCrypt, log in, then you can
|
||||
enable it again.
|
||||
</li>
|
||||
<li>
|
||||
Using Little Snitch? There are a few rules you need to establish,
|
||||
@@ -48,7 +40,6 @@
|
||||
<li>Allow any outgoing connection for system processes (dnscrypt-proxy)</li>
|
||||
<li>Allow any incoming connection for system process (dnscrypt-proxy)</li>
|
||||
<li>Allow any outgoing connection for system processes (dig)</li>
|
||||
<li>Allow outgoing TCP connections to port 80 (http) of www.apple.com for system process (curl)</li>
|
||||
<li>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)</li>
|
||||
</ol>
|
||||
(Thanks to @cavemandaveman and @TraderStf)
|
||||
|
||||
@@ -4,11 +4,10 @@
|
||||
%meta{charset: "utf-8"}
|
||||
%title Help (advanced settings)
|
||||
:sass
|
||||
html
|
||||
background: #e4e4e4
|
||||
body
|
||||
font:
|
||||
family: arial, helvetica, sans-serif
|
||||
size: 14px
|
||||
margin: 1em
|
||||
h1
|
||||
margin: 0
|
||||
@@ -35,9 +34,13 @@
|
||||
%p
|
||||
Checking the "Log DNS queries" box dumps all DNS queries sent
|
||||
by your computer to a file named /var/log/dnscrypt-query.log
|
||||
%p
|
||||
Blocked queries can also go to a log file. The file is named
|
||||
/var/log/dnscrypt-blocked-query.log
|
||||
%p
|
||||
The "View log" button opens it with the log viewer application
|
||||
so that you can watch it in real time.
|
||||
so that you can watch it in real time. The other button shows
|
||||
the blocked queries.
|
||||
%section
|
||||
%h2 IP addresses blocking
|
||||
%p
|
||||
@@ -57,19 +60,16 @@
|
||||
%p
|
||||
This is a list of domain names to be blocked.
|
||||
%p
|
||||
"example.com" will only match this specific name, not
|
||||
"www.example.com".
|
||||
"example.com" will match "example.com" and "www.example.com".
|
||||
%p
|
||||
But wildcards are also supported. "*.example.com" will match
|
||||
any name ending with ".example.com" whereas "ads.*" will match
|
||||
any name beginning with "ads."
|
||||
But wildcards are also supported. "ads.*" will match any name
|
||||
beginning with "ads."
|
||||
%p
|
||||
Wildcards can also perform substring matching. "*xxx*" will
|
||||
match any name containing the string "xxx".
|
||||
%p
|
||||
Patterns to be blocked should be separated with spaces, and
|
||||
the blocking takes effect immediately after you hit the Return
|
||||
key. Flushing your DNS cache is not required.
|
||||
Patterns to be blocked should be separated with spaces or new
|
||||
lines. Flushing your DNS cache is not required.
|
||||
%p
|
||||
This feature is only enabled when using DNSCrypt.
|
||||
%section
|
||||
@@ -81,7 +81,7 @@
|
||||
This includes local domain names provided by home routers
|
||||
(like "routerlogin.net"), local domain names provided by
|
||||
operating systems and applications (like ".local" or ".lan"),
|
||||
local domain names served by appliances like st-top boxes, and
|
||||
local domain names served by appliances like set-top boxes, and
|
||||
internal domains used in corporate networks.
|
||||
%p
|
||||
Domains listed here will bypass DNSCrypt in order to be sent
|
||||
|
||||
@@ -4,11 +4,9 @@
|
||||
<meta charset='utf-8'>
|
||||
<title>Help (advanced settings)</title>
|
||||
<style>
|
||||
html {
|
||||
background: #e4e4e4; }
|
||||
|
||||
body {
|
||||
font-family: arial, helvetica, sans-serif;
|
||||
font-size: 14px;
|
||||
margin: 1em; }
|
||||
|
||||
h1 {
|
||||
@@ -44,9 +42,14 @@
|
||||
Checking the "Log DNS queries" box dumps all DNS queries sent
|
||||
by your computer to a file named /var/log/dnscrypt-query.log
|
||||
</p>
|
||||
<p>
|
||||
Blocked queries can also go to a log file. The file is named
|
||||
<!-- var/log/dnscrypt-blocked-query.log -->
|
||||
</p>
|
||||
<p>
|
||||
The "View log" button opens it with the log viewer application
|
||||
so that you can watch it in real time.
|
||||
so that you can watch it in real time. The other button shows
|
||||
the blocked queries.
|
||||
</p>
|
||||
</section>
|
||||
<section>
|
||||
@@ -74,22 +77,19 @@
|
||||
This is a list of domain names to be blocked.
|
||||
</p>
|
||||
<p>
|
||||
"example.com" will only match this specific name, not
|
||||
"www.example.com".
|
||||
"example.com" will match "example.com" and "www.example.com".
|
||||
</p>
|
||||
<p>
|
||||
But wildcards are also supported. "*.example.com" will match
|
||||
any name ending with ".example.com" whereas "ads.*" will match
|
||||
any name beginning with "ads."
|
||||
But wildcards are also supported. "ads.*" will match any name
|
||||
beginning with "ads."
|
||||
</p>
|
||||
<p>
|
||||
Wildcards can also perform substring matching. "*xxx*" will
|
||||
match any name containing the string "xxx".
|
||||
</p>
|
||||
<p>
|
||||
Patterns to be blocked should be separated with spaces, and
|
||||
the blocking takes effect immediately after you hit the Return
|
||||
key. Flushing your DNS cache is not required.
|
||||
Patterns to be blocked should be separated with spaces or new
|
||||
lines. Flushing your DNS cache is not required.
|
||||
</p>
|
||||
<p>
|
||||
This feature is only enabled when using DNSCrypt.
|
||||
@@ -105,7 +105,7 @@
|
||||
This includes local domain names provided by home routers
|
||||
(like "routerlogin.net"), local domain names provided by
|
||||
operating systems and applications (like ".local" or ".lan"),
|
||||
local domain names served by appliances like st-top boxes, and
|
||||
local domain names served by appliances like set-top boxes, and
|
||||
internal domains used in corporate networks.
|
||||
</p>
|
||||
<p>
|
||||
|
||||
@@ -2,26 +2,50 @@
|
||||
%html{lang: "en"}
|
||||
%head
|
||||
%meta{charset: "utf-8"}
|
||||
%title Release notes for DNSCrypt-OSXClient by AlterStep
|
||||
%title Release notes
|
||||
:sass
|
||||
body
|
||||
font:
|
||||
family: arial, helvetica, sans-serif
|
||||
size: 14px
|
||||
margin: 0
|
||||
h1, h2
|
||||
margin: 0
|
||||
h1
|
||||
border-bottom: 1px solid grey
|
||||
article
|
||||
padding-left: 1em
|
||||
time
|
||||
font:
|
||||
style: italic
|
||||
%body
|
||||
%h1 Release Notes for DNSCrypt-OSXclient by AlterStep
|
||||
%article
|
||||
%h2 Version 1.0.14
|
||||
%time Sat, Feb 11 2017
|
||||
%p
|
||||
The previous version (1.0.13) required a recent version of
|
||||
openssl to be present on the system (plugins need ldns, ldns
|
||||
needed this). The dependency has been removed.
|
||||
|
||||
%body
|
||||
%article
|
||||
%h2 Version 1.0.13
|
||||
%time Thu, Feb 09 2017
|
||||
%p
|
||||
No more "automatic fallback". We trust users to know when they
|
||||
must disable DNSCrypt.
|
||||
%p
|
||||
DNS caching for improved speed.
|
||||
%p
|
||||
New buttons to log and view blocked queries.
|
||||
%p
|
||||
New system to bypass DNSCrypt using dnscrypt-proxy forwarding
|
||||
module.
|
||||
%p
|
||||
Many bug fixes because old code was removed.
|
||||
%p
|
||||
dnscrypt-proxy 1.9.0 with support for the new ChaCha20 encryption.
|
||||
%p
|
||||
libsodium 1.0.11.
|
||||
|
||||
%article
|
||||
%h2 Version 1.0.12 by AlterStep
|
||||
%h2 Version 1.0.12
|
||||
%time Sun, Jul 31 2016
|
||||
%p
|
||||
Compatibility with OSX 10.12
|
||||
@@ -33,7 +57,7 @@
|
||||
Fixed a regression in the automatic updater for the resolvers list
|
||||
|
||||
%article
|
||||
%h2 Version 1.0.11 by AlterStep
|
||||
%h2 Version 1.0.11
|
||||
%time Thu, Mar 3 2016
|
||||
%p
|
||||
Compatibility with OSX 10.11
|
||||
@@ -43,7 +67,7 @@
|
||||
libsodium 1.0.8
|
||||
|
||||
%article
|
||||
%h2 Version 1.0.10 by AlterStep
|
||||
%h2 Version 1.0.10
|
||||
%time Tue, 23 Jul 2015
|
||||
%p
|
||||
Compatibility with OSX 10.11 beta 4
|
||||
@@ -51,25 +75,25 @@
|
||||
dnscrypt-proxy 1.6.0
|
||||
|
||||
%article
|
||||
%h2 Version 1.0.9 by AlterStep
|
||||
%h2 Version 1.0.9
|
||||
%time Tue, 12 Jul 2015
|
||||
%p
|
||||
Fixed an issue with libsodium not being found by minisign-verify
|
||||
|
||||
%article
|
||||
%h2 Version 1.0.8 by AlterStep
|
||||
%h2 Version 1.0.8
|
||||
%time Tue, 12 Jul 2015
|
||||
%p
|
||||
New versions are automatically downloaded
|
||||
|
||||
%article
|
||||
%h2 Version 1.0.7 by AlterStep
|
||||
%h2 Version 1.0.7
|
||||
%time Tue, 1 Jul 2015
|
||||
%p
|
||||
Fixed a bug in the automatic updater for the resolvers list
|
||||
|
||||
%article
|
||||
%h2 Version 1.0.6 by AlterStep
|
||||
%h2 Version 1.0.6
|
||||
%time Tue, 10 Jun 2015
|
||||
%p
|
||||
Updated DNSCrypt proxy to version 1.5.0
|
||||
@@ -84,67 +108,9 @@
|
||||
is randomly chosen after each reboot
|
||||
|
||||
%article
|
||||
%h2 Version 1.0.5 by AlterStep
|
||||
%h2 Version 1.0.5
|
||||
%time Tue, 06 Jan 2015
|
||||
%p
|
||||
Updated DNSCrypt proxy to version 1.4.3
|
||||
%p
|
||||
Updated libsodium to 1.0.1-minimal
|
||||
|
||||
%article
|
||||
%h2 Version 1.0.4 by AlterStep
|
||||
%time Thu, 19 Sep 2014
|
||||
%p
|
||||
Updated DNSCrypt proxy to version 1.4.1
|
||||
%p
|
||||
Updated libsodium to 0.7.0-minimal
|
||||
|
||||
%article
|
||||
%h2 Version 1.0.3 by AlterStep
|
||||
%time Thu, 18 Jun 2014
|
||||
%p
|
||||
Runs on OSX 10.8 (Mountain Lion), 10.9 (Mavericks) and 10.10 (Yosemite)
|
||||
%p
|
||||
New set of icons, contributed by Aaron VonderHaar
|
||||
|
||||
%article
|
||||
%h2 Version 1.0.2 by AlterStep
|
||||
%time Thu, 05 Jun 2014
|
||||
%p
|
||||
Improved installation scripts
|
||||
%p
|
||||
LDNS has been downgraded in order to work on systems without
|
||||
Homebrew.
|
||||
|
||||
%article
|
||||
%h2 Version 1.0.1 by AlterStep
|
||||
%time Mon, 28 Apr 2014
|
||||
%p
|
||||
Include the release version of dnscrypt-proxy 1.4, with a new
|
||||
OpenNIC resolver.
|
||||
%p
|
||||
Wait after dnscrypt-proxy has been turned on before sending a
|
||||
query. This actually makes state changes faster.
|
||||
%p
|
||||
Debug log, turned off by default and deleted after every
|
||||
reboot. In order to enable it, create an empty file named
|
||||
%code debug.enabled
|
||||
in
|
||||
%code /Library/Application Support/DNSCrypt/control
|
||||
and the debug log file itself is
|
||||
%code /var/log/dnscrypt-osxclient-debug.log
|
||||
%p
|
||||
Thanks a lot for your feedback on the first version!
|
||||
|
||||
%article
|
||||
%h2 Version 1.0.0 by AlterStep
|
||||
%time Thu, 21 Apr 2014
|
||||
%p
|
||||
This is my first release, based on the source code of the beta
|
||||
version written by OpenDNS.
|
||||
%p
|
||||
It has only been tested on OSX 10.9.
|
||||
%p
|
||||
It includes dnscrypt-proxy 1.4.0, libsodium 0.4.5, libldns 1.6.17.
|
||||
%p
|
||||
Contact me on Github: https://github.com/alterstep/dnscrypt-osx-client
|
||||
|
||||
@@ -2,29 +2,61 @@
|
||||
<html lang='en'>
|
||||
<head>
|
||||
<meta charset='utf-8'>
|
||||
<title>Release notes for DNSCrypt-OSXClient by AlterStep</title>
|
||||
<title>Release notes</title>
|
||||
<style>
|
||||
body {
|
||||
font-family: arial, helvetica, sans-serif;
|
||||
font-size: 14px;
|
||||
margin: 0; }
|
||||
|
||||
h1, h2 {
|
||||
margin: 0; }
|
||||
|
||||
h1 {
|
||||
border-bottom: 1px solid grey; }
|
||||
|
||||
article {
|
||||
padding-left: 1em; }
|
||||
|
||||
time {
|
||||
font-style: italic; }
|
||||
</style>
|
||||
</head>
|
||||
<body>
|
||||
<h1>Release Notes for DNSCrypt-OSXclient by AlterStep</h1>
|
||||
<article>
|
||||
<h2>Version 1.0.12 by AlterStep</h2>
|
||||
<h2>Version 1.0.14</h2>
|
||||
<time>Sat, Feb 11 2017</time>
|
||||
<p>
|
||||
The previous version (1.0.13) required a recent version of
|
||||
openssl to be present on the system (plugins need ldns, ldns
|
||||
needed this). The dependency has been removed.
|
||||
</p>
|
||||
</article>
|
||||
</body>
|
||||
<body>
|
||||
<article>
|
||||
<h2>Version 1.0.13</h2>
|
||||
<time>Thu, Feb 09 2017</time>
|
||||
<p>
|
||||
No more "automatic fallback". We trust users to know when they
|
||||
must disable DNSCrypt.
|
||||
</p>
|
||||
<p>
|
||||
DNS caching for improved speed.
|
||||
</p>
|
||||
<p>
|
||||
New buttons to log and view blocked queries.
|
||||
</p>
|
||||
<p>
|
||||
New system to bypass DNSCrypt using dnscrypt-proxy forwarding
|
||||
module.
|
||||
</p>
|
||||
<p>
|
||||
Many bug fixes because old code was removed.
|
||||
</p>
|
||||
<p>
|
||||
dnscrypt-proxy 1.9.0 with support for the new ChaCha20 encryption.
|
||||
</p>
|
||||
<p>
|
||||
libsodium 1.0.11.
|
||||
</p>
|
||||
</article>
|
||||
<article>
|
||||
<h2>Version 1.0.12</h2>
|
||||
<time>Sun, Jul 31 2016</time>
|
||||
<p>
|
||||
Compatibility with OSX 10.12
|
||||
@@ -40,7 +72,7 @@
|
||||
</p>
|
||||
</article>
|
||||
<article>
|
||||
<h2>Version 1.0.11 by AlterStep</h2>
|
||||
<h2>Version 1.0.11</h2>
|
||||
<time>Thu, Mar 3 2016</time>
|
||||
<p>
|
||||
Compatibility with OSX 10.11
|
||||
@@ -53,7 +85,7 @@
|
||||
</p>
|
||||
</article>
|
||||
<article>
|
||||
<h2>Version 1.0.10 by AlterStep</h2>
|
||||
<h2>Version 1.0.10</h2>
|
||||
<time>Tue, 23 Jul 2015</time>
|
||||
<p>
|
||||
Compatibility with OSX 10.11 beta 4
|
||||
@@ -63,28 +95,28 @@
|
||||
</p>
|
||||
</article>
|
||||
<article>
|
||||
<h2>Version 1.0.9 by AlterStep</h2>
|
||||
<h2>Version 1.0.9</h2>
|
||||
<time>Tue, 12 Jul 2015</time>
|
||||
<p>
|
||||
Fixed an issue with libsodium not being found by minisign-verify
|
||||
</p>
|
||||
</article>
|
||||
<article>
|
||||
<h2>Version 1.0.8 by AlterStep</h2>
|
||||
<h2>Version 1.0.8</h2>
|
||||
<time>Tue, 12 Jul 2015</time>
|
||||
<p>
|
||||
New versions are automatically downloaded
|
||||
</p>
|
||||
</article>
|
||||
<article>
|
||||
<h2>Version 1.0.7 by AlterStep</h2>
|
||||
<h2>Version 1.0.7</h2>
|
||||
<time>Tue, 1 Jul 2015</time>
|
||||
<p>
|
||||
Fixed a bug in the automatic updater for the resolvers list
|
||||
</p>
|
||||
</article>
|
||||
<article>
|
||||
<h2>Version 1.0.6 by AlterStep</h2>
|
||||
<h2>Version 1.0.6</h2>
|
||||
<time>Tue, 10 Jun 2015</time>
|
||||
<p>
|
||||
Updated DNSCrypt proxy to version 1.5.0
|
||||
@@ -104,7 +136,7 @@
|
||||
</p>
|
||||
</article>
|
||||
<article>
|
||||
<h2>Version 1.0.5 by AlterStep</h2>
|
||||
<h2>Version 1.0.5</h2>
|
||||
<time>Tue, 06 Jan 2015</time>
|
||||
<p>
|
||||
Updated DNSCrypt proxy to version 1.4.3
|
||||
@@ -113,77 +145,5 @@
|
||||
Updated libsodium to 1.0.1-minimal
|
||||
</p>
|
||||
</article>
|
||||
<article>
|
||||
<h2>Version 1.0.4 by AlterStep</h2>
|
||||
<time>Thu, 19 Sep 2014</time>
|
||||
<p>
|
||||
Updated DNSCrypt proxy to version 1.4.1
|
||||
</p>
|
||||
<p>
|
||||
Updated libsodium to 0.7.0-minimal
|
||||
</p>
|
||||
</article>
|
||||
<article>
|
||||
<h2>Version 1.0.3 by AlterStep</h2>
|
||||
<time>Thu, 18 Jun 2014</time>
|
||||
<p>
|
||||
Runs on OSX 10.8 (Mountain Lion), 10.9 (Mavericks) and 10.10 (Yosemite)
|
||||
</p>
|
||||
<p>
|
||||
New set of icons, contributed by Aaron VonderHaar
|
||||
</p>
|
||||
</article>
|
||||
<article>
|
||||
<h2>Version 1.0.2 by AlterStep</h2>
|
||||
<time>Thu, 05 Jun 2014</time>
|
||||
<p>
|
||||
Improved installation scripts
|
||||
</p>
|
||||
<p>
|
||||
LDNS has been downgraded in order to work on systems without
|
||||
Homebrew.
|
||||
</p>
|
||||
</article>
|
||||
<article>
|
||||
<h2>Version 1.0.1 by AlterStep</h2>
|
||||
<time>Mon, 28 Apr 2014</time>
|
||||
<p>
|
||||
Include the release version of dnscrypt-proxy 1.4, with a new
|
||||
OpenNIC resolver.
|
||||
</p>
|
||||
<p>
|
||||
Wait after dnscrypt-proxy has been turned on before sending a
|
||||
query. This actually makes state changes faster.
|
||||
</p>
|
||||
<p>
|
||||
Debug log, turned off by default and deleted after every
|
||||
reboot. In order to enable it, create an empty file named
|
||||
<code>debug.enabled</code>
|
||||
in
|
||||
<code>/Library/Application Support/DNSCrypt/control</code>
|
||||
and the debug log file itself is
|
||||
<code>/var/log/dnscrypt-osxclient-debug.log</code>
|
||||
</p>
|
||||
<p>
|
||||
Thanks a lot for your feedback on the first version!
|
||||
</p>
|
||||
</article>
|
||||
<article>
|
||||
<h2>Version 1.0.0 by AlterStep</h2>
|
||||
<time>Thu, 21 Apr 2014</time>
|
||||
<p>
|
||||
This is my first release, based on the source code of the beta
|
||||
version written by OpenDNS.
|
||||
</p>
|
||||
<p>
|
||||
It has only been tested on OSX 10.9.
|
||||
</p>
|
||||
<p>
|
||||
It includes dnscrypt-proxy 1.4.0, libsodium 0.4.5, libldns 1.6.17.
|
||||
</p>
|
||||
<p>
|
||||
Contact me on Github: https://github.com/alterstep/dnscrypt-osx-client
|
||||
</p>
|
||||
</article>
|
||||
</body>
|
||||
</html>
|
||||
|
||||
@@ -0,0 +1,7 @@
|
||||
#! /bin/sh
|
||||
|
||||
for f_in in *.haml; do
|
||||
echo "$f_in"
|
||||
f_out=$(echo "$f_in" | sed -e 's/.haml/.html/')
|
||||
haml < "$f_in" > "$f_out"
|
||||
done
|
||||
Binary file not shown.
@@ -1 +1 @@
|
||||
libldns.1.dylib
|
||||
libldns.2.dylib
|
||||
@@ -2,10 +2,12 @@
|
||||
|
||||
. ./common.inc
|
||||
|
||||
rm -f "$BLOCKED_QUERY_LOG_FILE"
|
||||
rm -f "$QUERY_LOG_FILE"
|
||||
rm -f "$DEBUG_LOG_FILE"
|
||||
find -x "$RESOLVERS_LIST_STATE" -type f -mtime +1 -exec rm -f {} \; 2>/dev/null
|
||||
find -x "$APP_UPDATES_STATE" -type f -mtime +1 -exec rm -f {} \; 2>/dev/null
|
||||
find -x "$STATES_DIR" -type f -exec rm -f {} -exec rm -f {} \; 2>/dev/null
|
||||
|
||||
./clear-fw.sh
|
||||
|
||||
|
||||
@@ -1,35 +0,0 @@
|
||||
#! /bin/sh
|
||||
|
||||
. ./common.inc
|
||||
|
||||
try_resolution() {
|
||||
exec alarmer 5 dig +tries=2 +time=3 +short google-public-dns-a.google.com \
|
||||
| egrep '^8[.]8[.]8[.]8' > /dev/null 2>&1
|
||||
}
|
||||
|
||||
try_http_query() {
|
||||
exec alarmer 5 curl -L --max-redirs 5 -4 -m 5 --connect-timeout 5 -s \
|
||||
http://www.apple.com 2>/dev/null | \
|
||||
fgrep -c Apple > /dev/null 2>&1
|
||||
}
|
||||
|
||||
try_everything() {
|
||||
try_resolution &
|
||||
resolution_pid=$!
|
||||
try_http_query &
|
||||
http_query_pid=$!
|
||||
wait $resolution_pid
|
||||
resolution_ret=$?
|
||||
if [ $resolution_ret != 0 ]; then
|
||||
return 1
|
||||
fi
|
||||
wait $http_query_pid
|
||||
http_query_ret=$?
|
||||
[ $resolution_ret = 0 -a $http_query_ret = 0 ]
|
||||
}
|
||||
|
||||
try_everything_with_retries() {
|
||||
try_everything || try_everything
|
||||
}
|
||||
|
||||
try_everything_with_retries
|
||||
@@ -1,10 +0,0 @@
|
||||
#! /bin/sh
|
||||
|
||||
. ./common.inc
|
||||
|
||||
try_local_resolution() {
|
||||
exec dig +tries=2 +time=3 +short google-public-dns-a.google.com @$INTERFACE_PROXY \
|
||||
| egrep '^8[.]8[.]8[.]8' > /dev/null 2>&1
|
||||
}
|
||||
|
||||
try_local_resolution
|
||||
@@ -1,5 +1,5 @@
|
||||
|
||||
CURRENT_VERSION=5
|
||||
CURRENT_VERSION=8
|
||||
|
||||
DNSCRYPT_USR_BASE_DIR='/Library/PreferencePanes/DNSCrypt.prefPane/Contents/Resources/usr'
|
||||
DNSCRYPT_VAR_BASE_DIR='/Library/Application Support/DNSCrypt'
|
||||
@@ -16,18 +16,22 @@ STATES_DIR="${DNSCRYPT_VAR_BASE_DIR}/states"
|
||||
|
||||
DNSCRYPT_RESOLVER_NAME_FILE="${CONTROL_DIR}/dnscrypt-resolver-name"
|
||||
DNSCRYPT_FILE="${CONTROL_DIR}/dnscrypt"
|
||||
FALLBACK_FILE="${CONTROL_DIR}/fallback"
|
||||
HIDE_MENUBAR_ICON_FILE="${CONTROL_DIR}/hide-menubar-icon"
|
||||
HANDLERS_LOCK_FILE="${DNSCRYPT_VAR_RUN_BASE_DIR}/dnscrypt-handlers.lock"
|
||||
DNSCRYPT_PROXY_PLUGINS_BASE_FILE="${CONTROL_DIR}/plugin"
|
||||
STATIC_RESOLVERS_FILE="${CONTROL_DIR}/static-resolvers"
|
||||
BLOCKED_QUERY_LOGGING_FILE="${CONTROL_DIR}/blocked-query-logging"
|
||||
|
||||
DEBUG_ENABLED_FILE="${CONTROL_DIR}/debug.enabled"
|
||||
|
||||
PLUGINS_ENABLED_FILE="${CONTROL_DIR}/plugins.enabled"
|
||||
CACHE_FILE="${CONTROL_DIR}/plugin-cache.enabled"
|
||||
QUERY_LOGGING_FILE="${CONTROL_DIR}/plugin-query-logging.enabled"
|
||||
BLOCKING_FILE="${CONTROL_DIR}/plugin-blocking.enabled"
|
||||
AAAA_BLOCKING_FILE="${CONTROL_DIR}/plugin-aaaa-blocking.enabled"
|
||||
FORWARDING_FILE="${CONTROL_DIR}/plugin-forwarding.enabled"
|
||||
|
||||
BLOCKED_QUERY_LOG_FILE="${DNSCRYPT_LOG_BASE_DIR}/dnscrypt-blocked-query.log"
|
||||
QUERY_LOG_FILE="${DNSCRYPT_LOG_BASE_DIR}/dnscrypt-query.log"
|
||||
DEBUG_LOG_FILE="${DNSCRYPT_LOG_BASE_DIR}/dnscrypt-osxclient-debug.log"
|
||||
DEBUG_LOG_FILE_LOCK="${DEBUG_LOG_FILE}.lock"
|
||||
@@ -49,23 +53,13 @@ RESOLVERS_LIST_BASE_DIR="${DNSCRYPT_USR_BASE_DIR}/share/dnscrypt-proxy"
|
||||
RESOLVERS_LIST_PUBLIC_KEY="RWQf6LRCGA9i53mlYecO4IzT51TGPpvWucNSCh1CBM0QTaLn73Y7GFO3"
|
||||
RESOLVERS_LIST_STATE="${STATES_DIR}/resolvers-updated"
|
||||
|
||||
INTERFACE_UNBOUND="127.0.0.53"
|
||||
INTERFACE_UNBOUND_MASK="24"
|
||||
INTERFACE_PROXY="127.0.0.54"
|
||||
INTERFACE_PROXY_MASK="24"
|
||||
INTERFACE_PROBES="127.0.0.55"
|
||||
INTERFACE_PROBES_MASK="24"
|
||||
|
||||
DOMAINS_EXCEPTIONS='
|
||||
belkin corp domain example home host invalid lan local localdomain test freebox.fr fritz.box nowtv.com routerlogin.net l onion
|
||||
'
|
||||
|
||||
export PATH="${DNSCRYPT_USR_BASE_DIR}/sbin:${DNSCRYPT_USR_BASE_DIR}/bin:${DNSCRYPT_USR_BASE_DIR}/scripts:$PATH"
|
||||
|
||||
init_interfaces() {
|
||||
/sbin/ifconfig lo0 alias ${INTERFACE_UNBOUND}/${INTERFACE_UNBOUND_MASK}
|
||||
/sbin/ifconfig lo0 alias ${INTERFACE_PROXY}/${INTERFACE_PROXY_MASK}
|
||||
/sbin/ifconfig lo0 alias ${INTERFACE_PROBES}/${INTERFACE_PROBES_MASK}
|
||||
}
|
||||
|
||||
logger_debug() {
|
||||
|
||||
@@ -1,63 +0,0 @@
|
||||
#! /bin/sh
|
||||
|
||||
RESOLVER_DIR='/etc/resolver'
|
||||
|
||||
. ./common.inc
|
||||
|
||||
[ -r "$EXCEPTIONS_FILE" ] &&
|
||||
DOMAINS_EXCEPTIONS="$(cat "$EXCEPTIONS_FILE") $DOMAINS_EXCEPTIONS"
|
||||
|
||||
get_gw() {
|
||||
route -n get default | while read line; do
|
||||
case "$line" in
|
||||
gateway:\ *)
|
||||
echo "$line" | sed 's/ *gateway: *//'
|
||||
return
|
||||
;;
|
||||
esac
|
||||
done
|
||||
}
|
||||
|
||||
get_dhcp_dns() {
|
||||
cat "${STATES_DIR}/dhcp-dns" 2> /dev/null
|
||||
}
|
||||
|
||||
remove_old_exceptions() {
|
||||
local found
|
||||
|
||||
find -x "$RESOLVER_DIR" -type f -print | {
|
||||
while read file; do
|
||||
found='no'
|
||||
for domain in $DOMAINS_EXCEPTIONS; do
|
||||
[ "$file" = "${RESOLVER_DIR}/${domain}" ] && found='yes' && break
|
||||
done
|
||||
[ "$found" = 'no' ] || continue
|
||||
fgrep -ci 'automatically generated by the dnscrypt user interface' \
|
||||
$file > /dev/null 2>&1 || continue
|
||||
rm -f "$file"
|
||||
done
|
||||
}
|
||||
}
|
||||
|
||||
name_servers=$(./get-static-resolvers.sh || get_dhcp_dns || get_gw)
|
||||
[ x"$name_servers" = 'x' ] && exit 0
|
||||
|
||||
default_domain=$(./get-current-default-domain.sh)
|
||||
|
||||
mkdir -p "$RESOLVER_DIR" || exit 1
|
||||
|
||||
remove_old_exceptions
|
||||
|
||||
name_server="$gw"
|
||||
for domain in $DOMAINS_EXCEPTIONS; do
|
||||
if [ x"$default_domain" != 'x' ]; then
|
||||
echo "$domain" | grep -c ".*${default_domain}" > /dev/null
|
||||
[ $? = 0 ] && continue
|
||||
fi
|
||||
echo '# automatically generated by the dnscrypt user interface' \
|
||||
> "${RESOLVER_DIR}/${domain}"
|
||||
for name_server in $name_servers; do
|
||||
echo "nameserver ${name_server}" >> "${RESOLVER_DIR}/${domain}"
|
||||
done
|
||||
done
|
||||
exit 0
|
||||
@@ -1,13 +0,0 @@
|
||||
#! /bin/sh
|
||||
|
||||
RESOLVER_DIR='/etc/resolver'
|
||||
|
||||
. ./common.inc
|
||||
|
||||
[ -r "$EXCEPTIONS_FILE" ] &&
|
||||
DOMAINS_EXCEPTIONS="$(cat "$EXCEPTIONS_FILE") $DOMAINS_EXCEPTIONS"
|
||||
|
||||
for domain in $DOMAINS_EXCEPTIONS; do
|
||||
rm -f "${RESOLVER_DIR}/${domain}"
|
||||
done
|
||||
exit 0
|
||||
+9
@@ -0,0 +1,9 @@
|
||||
#! /bin/sh
|
||||
|
||||
. ./common.inc
|
||||
|
||||
if [ -e "$BLOCKED_QUERY_LOGGING_FILE" ]; then
|
||||
echo 'yes'
|
||||
else
|
||||
echo 'no'
|
||||
fi
|
||||
@@ -2,9 +2,22 @@
|
||||
|
||||
. ./common.inc
|
||||
|
||||
ifs=$(ifconfig -a | \
|
||||
awk '/^[^ :]*:/ { sub(/:.*$/,empty); iface=$0 } /status: active/ { print iface }')
|
||||
ifs=$(echo $ifs)
|
||||
get_ifs() {
|
||||
ifs_save="$IFS"
|
||||
IFS=''
|
||||
ifconfig -a | while read line; do
|
||||
nif=$(echo "$line" | egrep -i '^[^ ]+:\s+flags' | sed 's/:.*$//')
|
||||
isact=$(echo "$line" | egrep -i 'status:\s*active')
|
||||
if [ -n "$nif" ]; then
|
||||
cif="$nif"
|
||||
elif [ -n "$isact" -a -n "$cif" ]; then
|
||||
echo $cif
|
||||
fi
|
||||
done
|
||||
IFS="$ifs_save"
|
||||
}
|
||||
|
||||
ifs=$(get_ifs)
|
||||
|
||||
typeset -A found
|
||||
ips=""
|
||||
|
||||
+1
-1
@@ -2,7 +2,7 @@
|
||||
|
||||
. ./common.inc
|
||||
|
||||
if [ -e "$FALLBACK_FILE" ]; then
|
||||
if [ -e "$HIDE_MENUBAR_ICON_FILE" ]; then
|
||||
echo 'yes'
|
||||
else
|
||||
echo 'no'
|
||||
@@ -19,7 +19,7 @@ done
|
||||
|
||||
if [ "$dnscrypt_proxy_used" = 'yes' \
|
||||
-a -r "${STATES_DIR}/dnscrypt-proxy-description" ]; then
|
||||
cat "${STATES_DIR}/dnscrypt-proxy-description" && exit 0
|
||||
cat "${STATES_DIR}/dnscrypt-proxy-description" && exit 0
|
||||
fi
|
||||
echo "$upstream_resolvers"
|
||||
exit 0
|
||||
|
||||
@@ -28,3 +28,5 @@ fi
|
||||
|
||||
[ x"$current_uid" != x"$wanted_uid" ] && \
|
||||
chown -R "${wanted_uid}:0" "$CONTROL_DIR"
|
||||
|
||||
exec sleep 1
|
||||
|
||||
@@ -4,6 +4,8 @@
|
||||
|
||||
PROCESSED_TICKETS_FILE="${STATES_DIR}/processed-tickets"
|
||||
|
||||
logger_debug handle_control_change
|
||||
|
||||
update() {
|
||||
lockfile -1 -r 30 "$HANDLERS_LOCK_FILE" || exit 1
|
||||
|
||||
@@ -19,15 +21,21 @@ update() {
|
||||
|
||||
touch "${STATES_DIR}/updating"
|
||||
|
||||
logger_debug "DNSCrypt-OSXClient configuration changed"
|
||||
|
||||
updated='no'
|
||||
while :; do
|
||||
find "$TICKETS_DIR" -type f -name 'ticket-*' > "$PROCESSED_TICKETS_FILE"
|
||||
if [ ! -s "$PROCESSED_TICKETS_FILE" -a "$updated" = 'yes' ]; then
|
||||
break
|
||||
fi
|
||||
update
|
||||
logger_debug "New tickets found"
|
||||
find "$CONTROL_DIR" -type f -name '[a-zA-Z0-9]*' \! -name '*.tmp' \
|
||||
-exec md5 {} \; > "${STATES_DIR}/controls.cksum.new"
|
||||
if cmp -s "${STATES_DIR}/controls.cksum.new" "${STATES_DIR}/controls.cksum"; then
|
||||
logger_debug "Content of the controls dir actually didn't change"
|
||||
else
|
||||
update
|
||||
mv -f "${STATES_DIR}/controls.cksum.new" "${STATES_DIR}/controls.cksum"
|
||||
fi
|
||||
updated='yes'
|
||||
while read ticket_file; do
|
||||
rm -f "$ticket_file"
|
||||
|
||||
@@ -6,18 +6,19 @@ tickets_count=$(./get-tickets-count.sh)
|
||||
[ "$tickets_count" != '0' ] && exit 0
|
||||
|
||||
if [ x"$1" != 'x--boot' ]; then
|
||||
[ ! -e "$FALLBACK_FILE" ] && exit 0
|
||||
./check-network-change.sh || exit 0
|
||||
fi
|
||||
|
||||
logger_debug "Network configuration changed"
|
||||
|
||||
|
||||
lockfile -1 -r 30 "$HANDLERS_LOCK_FILE" || exit 1
|
||||
./set-dns-to-dhcp.sh
|
||||
if [ ! -e "$DNSCRYPT_FILE" ]; then
|
||||
rm -f "$HANDLERS_LOCK_FILE"
|
||||
exit 0
|
||||
fi
|
||||
|
||||
rm -f "${STATES_DIR}/controls.cksum"
|
||||
|
||||
./switch-to-dnscrypt-if-required.sh
|
||||
rm -f "$HANDLERS_LOCK_FILE"
|
||||
|
||||
@@ -15,3 +15,5 @@ if [ "$servers" = "" ]; then
|
||||
else
|
||||
echo "$servers" | sed 's/^ *//;s/ *$//' > "$STATIC_RESOLVERS_FILE"
|
||||
fi
|
||||
|
||||
exec ./switch-exceptions-on.sh
|
||||
|
||||
@@ -2,6 +2,8 @@
|
||||
|
||||
. ./common.inc
|
||||
|
||||
CERTIFICATE_MIN_VALIDITY=60
|
||||
|
||||
DNSCRYPT_LIB_BASE_DIR="${DNSCRYPT_USR_BASE_DIR}/lib"
|
||||
export DYLD_LIBRARY_PATH="${DNSCRYPT_LIB_BASE_DIR}:${DYLD_LIBRARY_PATH}"
|
||||
|
||||
@@ -34,32 +36,15 @@ try_resolver() {
|
||||
|
||||
logger_debug "Running a test dnscrypt proxy for [$description]"
|
||||
rm -f "${RES_DIR}/${priority}"
|
||||
exec alarmer 3 dnscrypt-proxy --pid="$pid_file" \
|
||||
alarmer 3 dnscrypt-proxy --pid="$pid_file" \
|
||||
--resolver-name="$RESOLVER_NAME" \
|
||||
--local-address="${INTERFACE_PROBES}:${priority}" $args 2>&1 | \
|
||||
while read line; do
|
||||
case "$line" in
|
||||
*Proxying\ from\ *)
|
||||
logger_debug "Proxy for [$description] is up"
|
||||
|
||||
# This doesn't send anything to Apple, and any reliable domain name can be used --
|
||||
# The following line sends a common query to the chosen DNSCrypt resolver to
|
||||
# check that it responds and can be used instead of leaving the mac without
|
||||
# a working DNS configuration.
|
||||
answers=$(exec dig +time=1 +short +tries=2 -p $priority \
|
||||
@"$INTERFACE_PROBES" www.apple.com. 2> /dev/null | \
|
||||
egrep -ic '^[0-9.:]+$')
|
||||
|
||||
[ -r "$pid_file" ] && kill $(cat -- "$pid_file")
|
||||
if [ $answers -gt 0 ]; then
|
||||
logger_debug "Proxy for [$description] can be used"
|
||||
echo "$args" > "${RES_DIR}/${priority}"
|
||||
echo "$description" > "${DESCRIPTIONS_DIR}/${priority}"
|
||||
fi
|
||||
;;
|
||||
*) ;;
|
||||
esac
|
||||
done
|
||||
--test="$CERTIFICATE_MIN_VALIDITY" $args
|
||||
if [ $? = 0 ]; then
|
||||
logger_debug "Certificate for [$description] received"
|
||||
echo "$args" > "${RES_DIR}/${priority}"
|
||||
echo "$description" > "${DESCRIPTIONS_DIR}/${priority}"
|
||||
fi
|
||||
rm -f "$pid_file"
|
||||
}
|
||||
|
||||
get_plugin_args() {
|
||||
@@ -82,11 +67,11 @@ logger_debug "dnscrypt-proxy should be (re)started, stopping previous instance i
|
||||
|
||||
wait_pids=""
|
||||
|
||||
try_resolver 5004 "${RESOLVER_NAME} using DNSCrypt over UDP" \
|
||||
try_resolver 1 "${RESOLVER_NAME} using DNSCrypt over UDP" \
|
||||
"--resolver-name=$RESOLVER_NAME" &
|
||||
wait_pids="$wait_pids $!"
|
||||
|
||||
try_resolver 5005 "${RESOLVER_NAME} using DNSCrypt over TCP" \
|
||||
try_resolver 2 "${RESOLVER_NAME} using DNSCrypt over TCP" \
|
||||
"--resolver-name=$RESOLVER_NAME --tcp-only" &
|
||||
wait_pids="$wait_pids $!"
|
||||
|
||||
@@ -105,6 +90,8 @@ if [ x"$best_file" = "x" ]; then
|
||||
exit 1
|
||||
fi
|
||||
|
||||
./switch-cache-on.sh
|
||||
|
||||
plugins_args=''
|
||||
if [ -r "${DNSCRYPT_PROXY_PLUGINS_BASE_FILE}s.enabled" ]; then
|
||||
plugin_args=$(get_plugin_args)
|
||||
@@ -133,23 +120,6 @@ if [ $? != 0 ]; then
|
||||
logger_debug "dnscrypt-proxy $best_args worked after a retry"
|
||||
fi
|
||||
|
||||
sleep 1
|
||||
logger_debug "Checking if the current configuration hijacks all DNS queries"
|
||||
i=0
|
||||
while [ $i -lt 30 ]; do
|
||||
./check-local-dns.sh && break
|
||||
sleep 0.1
|
||||
i=$((i + 1))
|
||||
done
|
||||
|
||||
if [ $i -ge 30 ]; then
|
||||
logger_debug "Current configuration hijacks all DNS queries, disabling DNSCrypt"
|
||||
./switch-to-dhcp.sh
|
||||
exit 1
|
||||
fi
|
||||
|
||||
logger_debug "Current configuration doesn't seem to hijack all DNS queries"
|
||||
|
||||
mv "${DESCRIPTIONS_DIR}/${best_file}" \
|
||||
"${STATES_DIR}/dnscrypt-proxy-description" 2>/dev/null || exit 0
|
||||
|
||||
|
||||
@@ -3,4 +3,3 @@
|
||||
. ./common.inc
|
||||
|
||||
rm -f "$AAAA_BLOCKING_FILE"
|
||||
|
||||
|
||||
@@ -10,8 +10,11 @@ plugin_args=''
|
||||
[ -s "$BLACKLIST_DOMAINS_FILE" ] && \
|
||||
plugin_args="${plugin_args},--domains='${BLACKLIST_DOMAINS_FILE}'"
|
||||
|
||||
[ -e "$BLOCKED_QUERY_LOGGING_FILE" ] && \
|
||||
plugin_args="${plugin_args},--logfile='${BLOCKED_QUERY_LOG_FILE}'"
|
||||
|
||||
[ -z "$plugin_args" ] && exec ./switch-blacklists-off.sh
|
||||
|
||||
echo "libdcplugin_example_ldns_blocking.la${plugin_args}" > \
|
||||
"$BLOCKING_FILE"
|
||||
touch "$PLUGINS_ENABLED_FILE"
|
||||
touch "$PLUGINS_ENABLED_FILE"
|
||||
|
||||
+9
@@ -0,0 +1,9 @@
|
||||
#! /bin/sh
|
||||
|
||||
. ./common.inc
|
||||
|
||||
rm -f "$BLOCKED_QUERY_LOGGING_FILE"
|
||||
|
||||
exec ./switch-blacklists-on.sh
|
||||
|
||||
|
||||
+7
@@ -0,0 +1,7 @@
|
||||
#! /bin/sh
|
||||
|
||||
. ./common.inc
|
||||
|
||||
touch "$BLOCKED_QUERY_LOGGING_FILE"
|
||||
|
||||
exec ./switch-blacklists-on.sh
|
||||
+2
-1
@@ -2,4 +2,5 @@
|
||||
|
||||
. ./common.inc
|
||||
|
||||
rm -f "$FALLBACK_FILE"
|
||||
rm -f "$CACHE_FILE"
|
||||
|
||||
@@ -0,0 +1,8 @@
|
||||
#! /bin/sh
|
||||
|
||||
. ./common.inc
|
||||
|
||||
echo "libdcplugin_example_cache.la" > \
|
||||
"$CACHE_FILE"
|
||||
|
||||
touch "$PLUGINS_ENABLED_FILE"
|
||||
+1
-1
@@ -2,4 +2,4 @@
|
||||
|
||||
. ./common.inc
|
||||
|
||||
touch "$FALLBACK_FILE"
|
||||
rm -f "$FORWARDING_FILE"
|
||||
+39
@@ -0,0 +1,39 @@
|
||||
#! /bin/sh
|
||||
|
||||
. ./common.inc
|
||||
|
||||
get_gw() {
|
||||
route -n get default | while read line; do
|
||||
case "$line" in
|
||||
gateway:\ *)
|
||||
echo "$line" | sed 's/ *gateway: *//'
|
||||
return
|
||||
;;
|
||||
esac
|
||||
done
|
||||
}
|
||||
|
||||
get_dhcp_dns() {
|
||||
cat "$DHCP_DNS_FILE" 2> /dev/null | egrep -i '^[0-9a-f:.]+$'
|
||||
}
|
||||
|
||||
[ -s "$EXCEPTIONS_FILE" ] || exec ./switch-exceptions-off.sh
|
||||
|
||||
domains=''
|
||||
while read domain; do
|
||||
domains="${domain} ${domains}"
|
||||
done < "$EXCEPTIONS_FILE"
|
||||
|
||||
[ -z "$domains" ] && exec ./switch-exceptions-off.sh
|
||||
|
||||
resolvers=$(./get-static-resolvers.sh || get_dhcp_dns || get_gw)
|
||||
|
||||
[ -z "$resolvers" ] && exec ./switch-exceptions-off.sh
|
||||
|
||||
plugin_args=''
|
||||
plugin_args="${plugin_args},--domains='${domains}'"
|
||||
plugin_args="${plugin_args},--resolvers='${resolvers}'"
|
||||
|
||||
echo "libdcplugin_example_ldns_forwarding.la${plugin_args}" > \
|
||||
"$FORWARDING_FILE"
|
||||
touch "$PLUGINS_ENABLED_FILE"
|
||||
+5
@@ -0,0 +1,5 @@
|
||||
#! /bin/sh
|
||||
|
||||
. ./common.inc
|
||||
|
||||
rm -f "$HIDE_MENUBAR_ICON_FILE"
|
||||
+5
@@ -0,0 +1,5 @@
|
||||
#! /bin/sh
|
||||
|
||||
. ./common.inc
|
||||
|
||||
touch "$HIDE_MENUBAR_ICON_FILE"
|
||||
+3
-19
@@ -10,53 +10,37 @@ PAUSE_INCREMENT=1
|
||||
|
||||
logger_debug "DNSCrypt has been requested"
|
||||
|
||||
./set-dns-to-dhcp.sh
|
||||
|
||||
pause=0
|
||||
while [ -e "$DNSCRYPT_FILE" ]; do
|
||||
logger_debug "Switching to dnscrypt if required (pause=$pause)"
|
||||
current_resolvers=$(./get-current-resolvers.sh)
|
||||
if [ "$current_resolvers" = "$INTERFACE_PROXY" ]; then
|
||||
if [ ! -e "$PROXY_PID_FILE" ]; then
|
||||
rm -f "${STATES_DIR}/controls.cksum"
|
||||
logger_debug "The proxy should be running but it isn't."
|
||||
./switch-to-dhcp.sh
|
||||
fi
|
||||
fi
|
||||
[ $pause -lt $PAUSE_MAX ] && pause=$((pause + 1))
|
||||
pause_counter=0
|
||||
while [ -e "$DNSCRYPT_FILE" -a $pause_counter -lt $pause ]; do
|
||||
sleep $PAUSE_UNIT
|
||||
pause_counter=$((pause_counter + 1))
|
||||
done
|
||||
[ $pause -lt $PAUSE_MAX ] && pause=$((pause + 1))
|
||||
[ ! -e "$DNSCRYPT_FILE" ] && break
|
||||
if [ -e "$FALLBACK_FILE" ]; then
|
||||
logger_debug "Checking if the router hijacks HTTP queries"
|
||||
if ./check-hijacking.sh; then
|
||||
logger_debug "The router doesn't hijack HTTP queries"
|
||||
else
|
||||
logger_debug "The router hijacks HTTP queries - DNSCrypt is likely to be blocked"
|
||||
continue
|
||||
fi
|
||||
fi
|
||||
./start-dnscrypt-proxy.sh || continue
|
||||
./check-local-dns.sh || continue
|
||||
./set-dns.sh "$INTERFACE_PROXY"
|
||||
if [ $? != 0 ]; then
|
||||
logger_debug "Setting the DNS to [$INTERFACE_PROXY] didn't work"
|
||||
./set-dns-to-dhcp.sh
|
||||
continue
|
||||
fi
|
||||
./check-hijacking.sh
|
||||
if [ $? != 0 ]; then
|
||||
logger_debug "Current configuration seems to be hijacking HTTP queries. Reverting to default resolvers."
|
||||
./set-dns-to-dhcp.sh
|
||||
continue
|
||||
fi
|
||||
break
|
||||
done
|
||||
|
||||
if [ ! -e "$DNSCRYPT_FILE" ]; then
|
||||
touch "$CONTROL_DIR"
|
||||
exit 0
|
||||
fi
|
||||
|
||||
exec ./exceptions-add.sh
|
||||
|
||||
@@ -8,7 +8,7 @@ if [ ! -s "$BLACKLIST_DOMAINS_TMP_FILE" ]; then
|
||||
fi
|
||||
|
||||
tr -s '[:blank:]' '\n' < "$BLACKLIST_DOMAINS_TMP_FILE" | \
|
||||
egrep -vi '^(apple[.]com)$' > \
|
||||
egrep -i '^[*]?[.]?[^.][a-z0-9_.-]+[*]?$' > \
|
||||
"${BLACKLIST_DOMAINS_TMP_FILE}~" &&
|
||||
mv "${BLACKLIST_DOMAINS_TMP_FILE}~" "$BLACKLIST_DOMAINS_FILE"
|
||||
|
||||
|
||||
@@ -7,8 +7,9 @@ if [ ! -s "$BLACKLIST_IPS_TMP_FILE" ]; then
|
||||
exec ./switch-blacklists-on.sh
|
||||
fi
|
||||
|
||||
tr -s '[:blank:]' '\n' \
|
||||
< "$BLACKLIST_IPS_TMP_FILE" > "${BLACKLIST_IPS_TMP_FILE}~" &&
|
||||
tr -s '[:blank:]' '\n' < "$BLACKLIST_IPS_TMP_FILE" | \
|
||||
egrep -i '^[0-9a-fA-F:.]+([.][*])?$' > \
|
||||
"${BLACKLIST_IPS_TMP_FILE}~" &&
|
||||
mv "${BLACKLIST_IPS_TMP_FILE}~" "$BLACKLIST_IPS_FILE"
|
||||
|
||||
exec ./switch-blacklists-on.sh
|
||||
|
||||
@@ -4,9 +4,12 @@
|
||||
|
||||
if [ ! -s "$EXCEPTIONS_TMP_FILE" ]; then
|
||||
rm -f "$EXCEPTIONS_FILE" "$EXCEPTIONS_TMP_FILE"
|
||||
exit 0
|
||||
exec ./switch-exceptions-off.sh
|
||||
fi
|
||||
|
||||
tr -s '[:blank:]' '\n' < "$EXCEPTIONS_TMP_FILE" | \
|
||||
sed -e 's/^ *[*]*[.]*//' -e 's/ *$//' | \
|
||||
egrep -i '^\s*[0-9a-z_.-]+\s*$' > "${EXCEPTIONS_TMP_FILE}~" &&
|
||||
mv "${EXCEPTIONS_TMP_FILE}~" "$EXCEPTIONS_FILE"
|
||||
|
||||
exec ./switch-exceptions-on.sh
|
||||
|
||||
@@ -4,21 +4,36 @@ mkdir -p extra/usr/bin
|
||||
cp /Library/PreferencePanes/DNSCrypt.prefPane/Contents/Resources/usr/bin/hostip \
|
||||
extra/usr/bin/
|
||||
|
||||
nd=$(otool -L /Library/PreferencePanes/DNSCrypt.prefPane/Contents/Resources/usr/sbin/dnscrypt-proxy | wc -l)
|
||||
if [ $nd -gt 2 ]; then
|
||||
echo '*** dnscrypt-proxy may have more dependencies than libSystem.B.dylib'
|
||||
echo '*** make sure that libsodium was statically linked'
|
||||
sleep 10
|
||||
fi
|
||||
|
||||
nd=$(otool -L /Library/PreferencePanes/DNSCrypt.prefPane/Contents/Resources/usr/lib/dnscrypt-proxy/libdcplugin_example_ldns_aaaa_blocking.so | wc -l)
|
||||
if [ $nd -gt 3 ]; then
|
||||
echo '*** plugins may have more dependencies than libSystem.B.dylib and ldns'
|
||||
echo '*** make sure that they were linked against ldns compiled without SSL'
|
||||
sleep 10
|
||||
fi
|
||||
|
||||
mkdir -p extra/usr/sbin
|
||||
cp /Library/PreferencePanes/DNSCrypt.prefPane/Contents/Resources/usr/sbin/dnscrypt-proxy \
|
||||
extra/usr/sbin/
|
||||
|
||||
|
||||
mkdir -p extra/usr/lib
|
||||
|
||||
cp /opt/ldns/lib/libldns.1.dylib \
|
||||
cp /opt/ldns/lib/libldns.2.dylib \
|
||||
extra/usr/lib/
|
||||
( cd extra/usr/lib &&
|
||||
rm -f libldns.dylib &&
|
||||
ln -fs libldns.1.dylib libldns.dylib )
|
||||
ln -fs libldns.2.dylib libldns.dylib )
|
||||
|
||||
if [ -f /usr/local/lib/libsodium.18.dylib ]; then
|
||||
echo '*** /usr/local/lib/libsodium.{dylib,la} found'
|
||||
echo '*** Compile dnscrypt-proxy without them to get a static build'
|
||||
echo '*** Then reinstall them'
|
||||
sleep 10
|
||||
fi
|
||||
|
||||
@@ -37,6 +52,6 @@ mkdir -p extra/usr/share/dnscrypt-proxy
|
||||
|
||||
cp /Library/PreferencePanes/DNSCrypt.prefPane/Contents/Resources/usr/share/dnscrypt-proxy/dnscrypt-resolvers.csv \
|
||||
extra/usr/share/dnscrypt-proxy/
|
||||
|
||||
|
||||
cp /Library/PreferencePanes/DNSCrypt.prefPane/Contents/Resources/usr/share/dnscrypt-proxy/minisign.pub \
|
||||
extra/usr/share/dnscrypt-proxy/
|
||||
|
||||
Binary file not shown.
@@ -0,0 +1,37 @@
|
||||
# Possible answsers to Frequently Asked Questions
|
||||
|
||||
## "It doesn't work"
|
||||
|
||||
Sorry to hear that this application doesn't behave as expected.
|
||||
|
||||
Let's go through a few steps that may solve the issues you are experiencing.
|
||||
|
||||
1. **Uninstall previous versions.**
|
||||
In order to do so, open the DNSCrypt OSXClient preferences pane, and click the `Uninstall` button in the `About` tab.
|
||||
2. **Download the latest official version.**
|
||||
The package can be installed with `brew cask` or downloaded directly from GitHub: [DNSCrypt OSXClient](https://github.com/alterstep/dnscrypt-osxclient/releases/latest).
|
||||
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.
|
||||
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.
|
||||
4. **Open the OSXClient preference pane**, select a resolver and try enabling DNSCrypt.
|
||||
5. Still no joy? **Try a different resolver.** Some of them might experience a temporary outage, or may be blocked by your ISP.
|
||||
6. **Turn off your VPN.** A VPN already encrypts your data, including DNS data.
|
||||
7. **Disable antiviruses**, local and remote (router) firewalls, Little Snitch, Little Flocker and other agents preventing applications from working normally.
|
||||
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.
|
||||
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.
|
||||
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.
|
||||
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.
|
||||
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.
|
||||
|
||||
After trying all these steps, open a ticket on the [OSXClient issue tracker](https://github.com/alterstep/dnscrypt-osxclient/issues).
|
||||
|
||||
Here are a few hints to maximize the chances for your issue to be addressed as quickly as possible:
|
||||
|
||||
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.
|
||||
2. **Make sure that you went through the steps above** before filing an issue.
|
||||
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.
|
||||
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.
|
||||
5. **Do not write "doesn't work"**: explain exactly what doesn't behave as expected. See the previous point.
|
||||
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.
|
||||
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!
|
||||
|
||||
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.
|
||||
+10
-1
@@ -4,10 +4,19 @@ OSX client for managing the DNSCrypt Proxy
|
||||
The purpose of this application is to allow the user to have a better experience controlling the DNSCrypt Proxy on OSX.
|
||||
|
||||
[Download dnscrypt-osxclient.dmg](https://github.com/alterstep/dnscrypt-osxclient/releases/latest)
|
||||
for OSX 10.8 (Mountain Lion), OSX 10.9 (Mavericks), OSX 10.10 (Yosemite) and OSX 10.11 (El Capitan).
|
||||
for macOS 10.10 (Yosemite), macOS 10.11 (El Capitan) and macOS 10.12 (Sierra).
|
||||
|
||||
Compatible with all the DNS servers with DNSCrypt enabled.
|
||||
|
||||
Packages are signed with [Minisign](https://jedisct1.github.io/minisign/) and can be verified with:
|
||||
|
||||
minisign -V -P RWRvw8aArS/yEI3In0/zQSb9+qfWonLxjjEYG17cXt6zct6GLKtEvUfk -m dnscrypt-osxclient-*.dmg
|
||||
|
||||
You can also install this application using Homebrew Cask:
|
||||
|
||||
```
|
||||
brew cask install dnscrypt
|
||||
```
|
||||
|
||||

|
||||

|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
10.8 5 https://github.com/alterstep/dnscrypt-osxclient/releases/download/1.0.12/dnscrypt-osxclient-1.0.12.dmg
|
||||
10.9 5 https://github.com/alterstep/dnscrypt-osxclient/releases/download/1.0.12/dnscrypt-osxclient-1.0.12.dmg
|
||||
10.10 5 https://github.com/alterstep/dnscrypt-osxclient/releases/download/1.0.12/dnscrypt-osxclient-1.0.12.dmg
|
||||
10.11 5 https://github.com/alterstep/dnscrypt-osxclient/releases/download/1.0.12/dnscrypt-osxclient-1.0.12.dmg
|
||||
10.12 5 https://github.com/alterstep/dnscrypt-osxclient/releases/download/1.0.12/dnscrypt-osxclient-1.0.12.dmg
|
||||
10.8 8 https://github.com/alterstep/dnscrypt-osxclient/releases/download/1.0.14/dnscrypt-osxclient-1.0.14.dmg
|
||||
10.9 8 https://github.com/alterstep/dnscrypt-osxclient/releases/download/1.0.14/dnscrypt-osxclient-1.0.14.dmg
|
||||
10.10 8 https://github.com/alterstep/dnscrypt-osxclient/releases/download/1.0.14/dnscrypt-osxclient-1.0.14.dmg
|
||||
10.11 8 https://github.com/alterstep/dnscrypt-osxclient/releases/download/1.0.14/dnscrypt-osxclient-1.0.14.dmg
|
||||
10.12 8 https://github.com/alterstep/dnscrypt-osxclient/releases/download/1.0.14/dnscrypt-osxclient-1.0.14.dmg
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
untrusted comment: signature from minisign secret key
|
||||
RWRvw8aArS/yEJ4dpKMNawnmT9zOyXUpQ74mVAjMsxG3VygtaF+6k7YPoire23Tqdk0lcolS16ngIg9dCJPXuNuWUFFwIzqKIQ4=
|
||||
trusted comment: timestamp:1469970056 file:versions.txt
|
||||
Sp5RYaUW/tOqKM2Lq2w1Qb1QyH9VTCBG0vwB5VatktYhnXLawYVIQ0eUoDSPhSwiDzxMGNUtPaHoQT0stumjAg==
|
||||
RWRvw8aArS/yEC0KSUJzl/E1pNue3BhV6XHpINFPjWAQxxgoA5tL8+JOqqhC6vtdgG/9K4Iq8OZeWEWiriwZj0rmshQVpcB9ZQU=
|
||||
trusted comment: timestamp:1486847028 file:versions.txt
|
||||
j2By6+I+aOudtAInQZWqMamAqk4AJyjWhTMMNjF0kmelQfuImLZO09vNcuzPrnTM0M+jFiQdzHRLbQA0Fud6AA==
|
||||
|
||||
Reference in New Issue
Block a user