diff --git a/Application/Application.xcodeproj/project.pbxproj b/Application/Application.xcodeproj/project.pbxproj index 60a9139..5345983 100644 --- a/Application/Application.xcodeproj/project.pbxproj +++ b/Application/Application.xcodeproj/project.pbxproj @@ -23,6 +23,7 @@ CD2F800D24455333009C3D77 /* AboutWindowController.m in Sources */ = {isa = PBXBuildFile; fileRef = CD2F800B24455333009C3D77 /* AboutWindowController.m */; }; CD2F801724468A8C009C3D77 /* patrons.txt in Resources */ = {isa = PBXBuildFile; fileRef = CD2F801624468A8C009C3D77 /* patrons.txt */; }; CD6836682391DB6F00CF19C1 /* security.plist in Resources */ = {isa = PBXBuildFile; fileRef = CD6836672391DB6F00CF19C1 /* security.plist */; }; + CD7E47D42B5227B600B63153 /* OverSight Installer.app in Resources */ = {isa = PBXBuildFile; fileRef = CD7E47D32B5227B600B63153 /* OverSight Installer.app */; }; CD8FD5D523BAE2D200EFE0FB /* Preferences.xib in Resources */ = {isa = PBXBuildFile; fileRef = CD8FD5D323BAE2D100EFE0FB /* Preferences.xib */; }; CD8FD5D623BAE2D200EFE0FB /* PrefsWindowController.m in Sources */ = {isa = PBXBuildFile; fileRef = CD8FD5D423BAE2D200EFE0FB /* PrefsWindowController.m */; }; CD8FD5F623C05AD900EFE0FB /* RuleRow.m in Sources */ = {isa = PBXBuildFile; fileRef = CD8FD5F023C05AD800EFE0FB /* RuleRow.m */; }; @@ -33,7 +34,6 @@ CDC60991263CBD36006D1332 /* AVMonitor.m in Sources */ = {isa = PBXBuildFile; fileRef = CDC60990263CBD36006D1332 /* AVMonitor.m */; }; CDC60994263CBEE7006D1332 /* Client.m in Sources */ = {isa = PBXBuildFile; fileRef = CDC60993263CBEE7006D1332 /* Client.m */; }; CDCBF0DE26499DFF001D9F9A /* Event.m in Sources */ = {isa = PBXBuildFile; fileRef = CDCBF0DD26499DFF001D9F9A /* Event.m */; }; - CDE4C11A2B0EAA7A001521CE /* OverSight Installer.app in Resources */ = {isa = PBXBuildFile; fileRef = CDE4C1192B0EAA7A001521CE /* OverSight Installer.app */; }; /* End PBXBuildFile section */ /* Begin PBXCopyFilesBuildPhase section */ @@ -77,6 +77,7 @@ CD2F800B24455333009C3D77 /* AboutWindowController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = AboutWindowController.m; sourceTree = ""; }; CD2F801624468A8C009C3D77 /* patrons.txt */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; name = patrons.txt; path = ../Shared/patrons.txt; sourceTree = ""; }; CD6836672391DB6F00CF19C1 /* security.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; path = security.plist; sourceTree = ""; }; + CD7E47D32B5227B600B63153 /* OverSight Installer.app */ = {isa = PBXFileReference; lastKnownFileType = wrapper.application; path = "OverSight Installer.app"; sourceTree = ""; }; CD8FD5D223BAE2D100EFE0FB /* PrefsWindowController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = PrefsWindowController.h; sourceTree = ""; }; CD8FD5D323BAE2D100EFE0FB /* Preferences.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = Preferences.xib; sourceTree = ""; }; CD8FD5D423BAE2D200EFE0FB /* PrefsWindowController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = PrefsWindowController.m; sourceTree = ""; }; @@ -95,7 +96,6 @@ CDC60993263CBEE7006D1332 /* Client.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = Client.m; sourceTree = ""; }; CDCBF0DC26499DFF001D9F9A /* Event.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = Event.h; sourceTree = ""; }; CDCBF0DD26499DFF001D9F9A /* Event.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = Event.m; sourceTree = ""; }; - CDE4C1192B0EAA7A001521CE /* OverSight Installer.app */ = {isa = PBXFileReference; lastKnownFileType = wrapper.application; path = "OverSight Installer.app"; sourceTree = ""; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ @@ -214,7 +214,7 @@ CDE09AF12919829000561CFF /* Uninstaller */ = { isa = PBXGroup; children = ( - CDE4C1192B0EAA7A001521CE /* OverSight Installer.app */, + CD7E47D32B5227B600B63153 /* OverSight Installer.app */, ); path = Uninstaller; sourceTree = ""; @@ -292,7 +292,7 @@ buildActionMask = 2147483647; files = ( CD8FD5D523BAE2D200EFE0FB /* Preferences.xib in Resources */, - CDE4C11A2B0EAA7A001521CE /* OverSight Installer.app in Resources */, + CD7E47D42B5227B600B63153 /* OverSight Installer.app in Resources */, CD6836682391DB6F00CF19C1 /* security.plist in Resources */, CD2F800C24455333009C3D77 /* AboutWindow.xib in Resources */, 7D16D6951F64E43300DB3161 /* UpdateWindow.xib in Resources */, @@ -465,10 +465,10 @@ CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = NO; CODE_SIGN_IDENTITY = "Developer ID Application"; COMBINE_HIDPI_IMAGES = YES; - CURRENT_PROJECT_VERSION = 2.2.2; + CURRENT_PROJECT_VERSION = 2.3.0; DEVELOPMENT_TEAM = VBG97UB4TA; ENABLE_HARDENED_RUNTIME = YES; - FRAMEWORK_SEARCH_PATHS = "$(PROJECT_DIR)/../Carthage/Build/Mac"; + FRAMEWORK_SEARCH_PATHS = ""; GCC_WARN_ABOUT_DEPRECATED_FUNCTIONS = NO; INFOPLIST_FILE = Application/Info.plist; INFOPLIST_KEY_CFBundleDisplayName = OverSight; @@ -476,7 +476,7 @@ LD_RUNPATH_SEARCH_PATHS = "$(LD_RUNPATH_SEARCH_PATHS_$(IS_MACCATALYST)) @executable_path/../Frameworks"; LIBRARY_SEARCH_PATHS = ""; MACOSX_DEPLOYMENT_TARGET = 12.0; - MARKETING_VERSION = 2.2.2; + MARKETING_VERSION = 2.3.0; ONLY_ACTIVE_ARCH = NO; PRODUCT_BUNDLE_IDENTIFIER = "com.objective-see.oversight"; PRODUCT_NAME = OverSight; @@ -491,10 +491,10 @@ CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = NO; CODE_SIGN_IDENTITY = "Developer ID Application"; COMBINE_HIDPI_IMAGES = YES; - CURRENT_PROJECT_VERSION = 2.2.2; + CURRENT_PROJECT_VERSION = 2.3.0; DEVELOPMENT_TEAM = VBG97UB4TA; ENABLE_HARDENED_RUNTIME = YES; - FRAMEWORK_SEARCH_PATHS = "$(PROJECT_DIR)/../Carthage/Build/Mac"; + FRAMEWORK_SEARCH_PATHS = ""; GCC_WARN_ABOUT_DEPRECATED_FUNCTIONS = NO; INFOPLIST_FILE = Application/Info.plist; INFOPLIST_KEY_CFBundleDisplayName = OverSight; @@ -502,7 +502,7 @@ LD_RUNPATH_SEARCH_PATHS = "$(LD_RUNPATH_SEARCH_PATHS_$(IS_MACCATALYST)) @executable_path/../Frameworks"; LIBRARY_SEARCH_PATHS = ""; MACOSX_DEPLOYMENT_TARGET = 12.0; - MARKETING_VERSION = 2.2.2; + MARKETING_VERSION = 2.3.0; ONLY_ACTIVE_ARCH = NO; PRODUCT_BUNDLE_IDENTIFIER = "com.objective-see.oversight"; PRODUCT_NAME = OverSight; diff --git a/Installer/Helper/HelperInterface.m b/Installer/Helper/HelperInterface.m index 123b7ab..4d06027 100644 --- a/Installer/Helper/HelperInterface.m +++ b/Installer/Helper/HelperInterface.m @@ -77,14 +77,14 @@ dispatch_source_t dispatchSource = nil; } //dbg msg - os_log_debug(logHandle, "validated %@", app); + os_log_debug(logHandle, "validated %{public}@", app); //exec script result = [self execScript:validatedApp arguments:args]; if(noErr != result) { //err msg - os_log_error(logHandle, "ERROR: failed to execute config script %@ (%d)", CONF_SCRIPT, result); + os_log_error(logHandle, "ERROR: failed to execute config script %{public}@ (%d)", CONF_SCRIPT, result); //bail goto bail; @@ -99,7 +99,7 @@ bail: if(YES != [[NSFileManager defaultManager] removeItemAtPath:validatedApp error:nil]) { //err msg - os_log_error(logHandle, "ERROR: failed to remove validated app %@", validatedApp); + os_log_error(logHandle, "ERROR: failed to remove validated app %{public}@", validatedApp); //set err result = -1; @@ -225,7 +225,7 @@ bail: appCopy = [NSTemporaryDirectory() stringByAppendingPathComponent:app.lastPathComponent]; //dbg msg - os_log_debug(logHandle, "validating %@", appCopy); + os_log_debug(logHandle, "validating %{public}@", appCopy); //delete if old copy is there if(YES == [defaultManager fileExistsAtPath:appCopy]) @@ -234,7 +234,7 @@ bail: if(YES != [defaultManager removeItemAtPath:appCopy error:&error]) { //err msg - os_log_error(logHandle, "ERROR: failed to delete %@ (error: %@)", appCopy, error.description); + os_log_error(logHandle, "ERROR: failed to delete %{public}@ (error: %{public}@)", appCopy, error.description); } } @@ -242,7 +242,7 @@ bail: if(YES != [defaultManager copyItemAtPath:app toPath:appCopy error:&error]) { //err msg - os_log_error(logHandle, "ERROR: failed to copy %{public}@ to %{public}@ (error: %@)", app, appCopy, error.description); + os_log_error(logHandle, "ERROR: failed to copy %{public}@ to %{public}@ (error: %{public}@)", app, appCopy, error.description); //bail goto bail; @@ -252,7 +252,7 @@ bail: if(YES != setFileOwner(appCopy, @0, @0, YES)) { //err msg - os_log_error(logHandle, "ERROR: failed to set %@ to be owned by root", appCopy); + os_log_error(logHandle, "ERROR: failed to set %{public}@ to be owned by root", appCopy); //bail goto bail; @@ -263,7 +263,7 @@ bail: if(noErr != verifyApp(appCopy, SIGNING_AUTH)) { //err msg - os_log_error(logHandle, "ERROR: failed to validate %@", appCopy); + os_log_error(logHandle, "ERROR: failed to validate %{public}@", appCopy); //bail goto bail; @@ -306,7 +306,7 @@ bail: if(nil == appBundle) { //err msg - os_log_error(logHandle, "ERROR: failed to load app bundle for %@", validatedApp); + os_log_error(logHandle, "ERROR: failed to load app bundle for %{public}@", validatedApp); //bail goto bail; @@ -317,7 +317,7 @@ bail: if(nil == script) { //err msg - os_log_error(logHandle, "ERROR: failed to find config script %@", CONF_SCRIPT); + os_log_error(logHandle, "ERROR: failed to find config script %{public}@", CONF_SCRIPT); //bail goto bail; diff --git a/Installer/Helper/HelperListener.m b/Installer/Helper/HelperListener.m index ca8a1c8..cdc8b1c 100644 --- a/Installer/Helper/HelperListener.m +++ b/Installer/Helper/HelperListener.m @@ -79,6 +79,9 @@ bail: //result BOOL result = NO; + //code signing requirement + NSString* requirement = nil; + //init listener listener = [[NSXPCListener alloc] initWithMachServiceName:CONFIG_HELPER_ID]; if(nil == self.listener) @@ -90,6 +93,21 @@ bail: goto bail; } + //macOS 13+ + // set code signing requirement for clients via 'setConnectionCodeSigningRequirement' + if(@available(macOS 13.0, *)) { + + //init requirement + // OS Installer v2.0+ + requirement = [NSString stringWithFormat:@"anchor apple generic and identifier \"%@\" and certificate leaf [subject.CN] = \"%@\" and info [CFBundleShortVersionString] >= \"2.0.0\"", INSTALLER_ID, SIGNING_AUTH]; + + //set requirement + [self.listener setConnectionCodeSigningRequirement:requirement]; + + //dbg msg + os_log_debug(logHandle, "set XPC requirement %{public}@", requirement); + } + //dbg msg os_log_debug(logHandle, "created mach service %@", CONFIG_HELPER_ID); @@ -234,7 +252,7 @@ bail: [newConnection resume]; //dbg msg - os_log_debug(logHandle, "allowed XPC connection: %@", newConnection); + os_log_debug(logHandle, "allowed XPC connection: %{public}@", newConnection); //happy shouldAccept = YES; diff --git a/Installer/Installer.xcodeproj/project.pbxproj b/Installer/Installer.xcodeproj/project.pbxproj index 22186b8..86879e3 100644 --- a/Installer/Installer.xcodeproj/project.pbxproj +++ b/Installer/Installer.xcodeproj/project.pbxproj @@ -329,7 +329,7 @@ ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "#Note: To build uninstaller for app (menu)\n# 0. Delete this script and Installer.app from App's on-disk folder \n# 1. Build Installer\n# 2. Copy into App \"Uninstaller\" folder (& proj if needed)\n# 3. Re-add script, and then build (archive) for deployment\n\n#archive\n# copy in main application \nif [[ $BUILT_PRODUCTS_DIR = *\"ArchiveIntermediates\"* ]]; then\n cp -R -f \"$PROJECT_TEMP_ROOT/UninstalledProducts/macosx/OverSight.app\" \"$BUILT_PRODUCTS_DIR/$CONTENTS_FOLDER_PATH/Resources\"\n \n#normal build\n# delete and copy in main application \nelse\n\nrm -rf \"$BUILT_PRODUCTS_DIR/$CONTENTS_FOLDER_PATH/Resources/OverSight.app\"\ncp -R -f \"$BUILT_PRODUCTS_DIR/OverSight.app\" \"$BUILT_PRODUCTS_DIR/$CONTENTS_FOLDER_PATH/Resources\"\n\nfi\n\n"; + shellScript = "#Note: To build uninstaller for app (menu)\n# 0. Delete this script and Installer.app from App's on-disk folder \n# 1. Build Installer\n# 2. Copy into App \"Uninstaller\" folder (& proj if needed)\n# 3. Re-add script, and then build (archive) for deployment\n\n#archive\n# copy in main application \nif [[ $BUILT_PRODUCTS_DIR = *\"ArchiveIntermediates\"* ]]; then\n cp -R -f \"$PROJECT_TEMP_ROOT/UninstalledProducts/macosx/OverSight.app\" \"$BUILT_PRODUCTS_DIR/$CONTENTS_FOLDER_PATH/Resources\"\n \n#normal build\n# delete and copy in main application \nelse\n\nrm -rf \"$BUILT_PRODUCTS_DIR/$CONTENTS_FOLDER_PATH/Resources/OverSight.app\"\ncp -R -f \"$BUILT_PRODUCTS_DIR/OverSight.app\" \"$BUILT_PRODUCTS_DIR/$CONTENTS_FOLDER_PATH/Resources\"\n\nfi\n"; }; /* End PBXShellScriptBuildPhase section */ @@ -380,14 +380,14 @@ CODE_SIGN_ENTITLEMENTS = ""; CODE_SIGN_IDENTITY = "Developer ID Application"; CODE_SIGN_STYLE = Manual; - CURRENT_PROJECT_VERSION = 2.2.2; + CURRENT_PROJECT_VERSION = 2.3.0; DEVELOPMENT_TEAM = VBG97UB4TA; ENABLE_HARDENED_RUNTIME = YES; - FRAMEWORK_SEARCH_PATHS = "$(PROJECT_DIR)/../Carthage/Build/Mac"; + FRAMEWORK_SEARCH_PATHS = ""; GCC_WARN_ABOUT_MISSING_FIELD_INITIALIZERS = NO; INFOPLIST_FILE = Helper/Info.plist; MACOSX_DEPLOYMENT_TARGET = 12.0; - MARKETING_VERSION = 2.2.2; + MARKETING_VERSION = 2.3.0; ONLY_ACTIVE_ARCH = NO; OTHER_CODE_SIGN_FLAGS = ""; OTHER_LDFLAGS = ( @@ -415,14 +415,14 @@ CODE_SIGN_ENTITLEMENTS = ""; CODE_SIGN_IDENTITY = "Developer ID Application"; CODE_SIGN_STYLE = Manual; - CURRENT_PROJECT_VERSION = 2.2.2; + CURRENT_PROJECT_VERSION = 2.3.0; DEVELOPMENT_TEAM = VBG97UB4TA; ENABLE_HARDENED_RUNTIME = YES; - FRAMEWORK_SEARCH_PATHS = "$(PROJECT_DIR)/../Carthage/Build/Mac"; + FRAMEWORK_SEARCH_PATHS = ""; GCC_WARN_ABOUT_MISSING_FIELD_INITIALIZERS = NO; INFOPLIST_FILE = Helper/Info.plist; MACOSX_DEPLOYMENT_TARGET = 12.0; - MARKETING_VERSION = 2.2.2; + MARKETING_VERSION = 2.3.0; ONLY_ACTIVE_ARCH = NO; OTHER_CODE_SIGN_FLAGS = ""; OTHER_LDFLAGS = ( @@ -451,10 +451,10 @@ CODE_SIGN_IDENTITY = "Developer ID Application"; CODE_SIGN_STYLE = Manual; COMBINE_HIDPI_IMAGES = YES; - CURRENT_PROJECT_VERSION = 2.2.2; + CURRENT_PROJECT_VERSION = 2.3.0; DEVELOPMENT_TEAM = VBG97UB4TA; ENABLE_HARDENED_RUNTIME = YES; - FRAMEWORK_SEARCH_PATHS = "$(PROJECT_DIR)/../Carthage/Build/Mac"; + FRAMEWORK_SEARCH_PATHS = ""; GCC_WARN_ABOUT_MISSING_FIELD_INITIALIZERS = NO; INFOPLIST_FILE = Source/Info.plist; LD_RUNPATH_SEARCH_PATHS = ( @@ -463,7 +463,7 @@ ); LIBRARY_SEARCH_PATHS = ""; MACOSX_DEPLOYMENT_TARGET = 12.0; - MARKETING_VERSION = 2.2.2; + MARKETING_VERSION = 2.3.0; OTHER_CODE_SIGN_FLAGS = ""; PRODUCT_BUNDLE_IDENTIFIER = "com.objective-see.oversight.installer"; PRODUCT_NAME = "OverSight Installer"; @@ -480,10 +480,10 @@ CODE_SIGN_IDENTITY = "Developer ID Application"; CODE_SIGN_STYLE = Manual; COMBINE_HIDPI_IMAGES = YES; - CURRENT_PROJECT_VERSION = 2.2.2; + CURRENT_PROJECT_VERSION = 2.3.0; DEVELOPMENT_TEAM = VBG97UB4TA; ENABLE_HARDENED_RUNTIME = YES; - FRAMEWORK_SEARCH_PATHS = "$(PROJECT_DIR)/../Carthage/Build/Mac"; + FRAMEWORK_SEARCH_PATHS = ""; GCC_WARN_ABOUT_MISSING_FIELD_INITIALIZERS = NO; INFOPLIST_FILE = Source/Info.plist; LD_RUNPATH_SEARCH_PATHS = ( @@ -492,7 +492,7 @@ ); LIBRARY_SEARCH_PATHS = ""; MACOSX_DEPLOYMENT_TARGET = 12.0; - MARKETING_VERSION = 2.2.2; + MARKETING_VERSION = 2.3.0; OTHER_CODE_SIGN_FLAGS = ""; PRODUCT_BUNDLE_IDENTIFIER = "com.objective-see.oversight.installer"; PRODUCT_NAME = "OverSight Installer"; diff --git a/Installer/Source/Configure.h b/Installer/Source/Configure.h index a7babdc..63a616f 100644 --- a/Installer/Source/Configure.h +++ b/Installer/Source/Configure.h @@ -17,6 +17,9 @@ /* PROPERTIES */ +//error +@property(nonatomic)NSInteger errorCode; + //helper installed & connected @property(nonatomic) BOOL gotHelp; diff --git a/Installer/Source/Configure.m b/Installer/Source/Configure.m index d0bb91c..e85da91 100644 --- a/Installer/Source/Configure.m +++ b/Installer/Source/Configure.m @@ -27,6 +27,7 @@ extern os_log_t logHandle; @synthesize gotHelp; @synthesize xpcComms; +@synthesize errorCode; //invokes appropriate action // either install || uninstall logic @@ -550,10 +551,42 @@ bail: if(YES != [NSFileManager.defaultManager removeItemAtPath:application error:&error]) { //err msg - os_log_error(logHandle, "ERROR: failed to remove %{public}@ (error: %@)", application, error); + os_log_error(logHandle, "ERROR: failed to remove %{public}@ (error: %{public}@)", application, error); - //bail - goto bail; + //access denied? + // uninstall app via priv'd XPC + if(error.code == NSFileWriteNoPermissionError) + { + //err msg + os_log_debug(logHandle, "access denied, so will try to remove app via priv'd XPC"); + + //init XPC comms? + if(nil == xpcComms) + { + //get help + if(YES != [self initHelper]) + { + //err msg + os_log_error(logHandle, "ERROR: failed to init helper tool"); + + //bail + goto bail; + } + } + + //uninstall + if(YES != [xpcComms uninstall:@""]) + { + //bail + goto bail; + } + } + //bail on all other errors + else + { + //bail + goto bail; + } } //dbg msg diff --git a/Installer/Source/ConfigureWindowController.h b/Installer/Source/ConfigureWindowController.h index 8d19173..d0c06bd 100644 --- a/Installer/Source/ConfigureWindowController.h +++ b/Installer/Source/ConfigureWindowController.h @@ -29,6 +29,9 @@ //status msg @property (weak, nonatomic) IBOutlet NSTextField *statusMsg; +//debug msg +@property (weak, nonatomic) IBOutlet NSTextField *debugMsg; + //more info button @property (weak, nonatomic) IBOutlet NSButton *moreInfoButton; @@ -44,7 +47,7 @@ @property (weak, nonatomic) IBOutlet NSButton *gotoDNDView; //do not disturb view -@property (strong) IBOutlet NSView *doNotDisturbView; +@property (strong, nonatomic) IBOutlet NSView *doNotDisturbView; //support us @property (weak, nonatomic) IBOutlet NSButton *gotoSupportView; diff --git a/Installer/Source/ConfigureWindowController.m b/Installer/Source/ConfigureWindowController.m index 043118d..9d164a5 100644 --- a/Installer/Source/ConfigureWindowController.m +++ b/Installer/Source/ConfigureWindowController.m @@ -501,6 +501,9 @@ extern os_log_t logHandle; //set result msg resultMsg = [NSMutableString stringWithFormat:@"⚠️ Error: %@ failed", action]; + //set debug msg + self.debugMsg.stringValue = @"For more info, from the terminal run:\r\nlog show --predicate=\"subsystem='com.objective-see.oversight'\""; + //show 'get more info' button self.moreInfoButton.hidden = NO; } diff --git a/Installer/Source/ConfigureWindowController.xib b/Installer/Source/ConfigureWindowController.xib index 4495480..acc10d3 100644 --- a/Installer/Source/ConfigureWindowController.xib +++ b/Installer/Source/ConfigureWindowController.xib @@ -1,14 +1,15 @@ - + - + + @@ -26,22 +27,22 @@ - + - + - + - + @@ -61,7 +62,7 @@ - + - + + + + + + + + + + - + @@ -255,7 +265,7 @@ - + diff --git a/Installer/Source/Script/configure.sh b/Installer/Source/Script/configure.sh index 0dd8c1c..cfe9798 100755 --- a/Installer/Source/Script/configure.sh +++ b/Installer/Source/Script/configure.sh @@ -33,7 +33,9 @@ echo "uninstalling" rm -rf "/Applications/OverSight.app" #remove preferences, etc. -rm -rf "${2}" +if [ -n "$2" ]; then + rm -rf "$2" +fi killall "OverSight" 2> /dev/null killall "com.objective-see.OverSight.helper" 2> /dev/null diff --git a/Shared/Utilities.m b/Shared/Utilities.m index 7b9aff5..0732687 100644 --- a/Shared/Utilities.m +++ b/Shared/Utilities.m @@ -33,7 +33,7 @@ extern os_log_t logHandle; //get app's version // extracted from Info.plist -NSString* getAppVersion() +NSString* getAppVersion(void) { //read and return 'CFBundleVersion' from bundle return [[[NSBundle mainBundle] infoDictionary] objectForKey:@"CFBundleVersion"]; @@ -114,7 +114,7 @@ NSString* getBinaryName(NSString* path) //get path to (main) app of a login item // login item is in app bundle, so parse up to get main app -NSString* getMainAppPath() +NSString* getMainAppPath(void) { //path components NSArray *pathComponents = nil; @@ -408,7 +408,7 @@ bail: } //get name of logged in user -uid_t getConsoleUserID() +uid_t getConsoleUserID(void) { //uid uid_t userID = 0; @@ -528,7 +528,7 @@ BOOL setFileOwner(NSString* path, NSNumber* groupID, NSNumber* ownerID, BOOL rec } //dbg msg - os_log_debug(logHandle, "set ownership for %@ (%@)", path, fileOwner); + os_log_debug(logHandle, "set ownership for %{public}@ (%{public}@)", path, fileOwner); //do it recursively if(YES == recursive) @@ -552,7 +552,7 @@ BOOL setFileOwner(NSString* path, NSNumber* groupID, NSNumber* ownerID, BOOL rec if(YES != [[NSFileManager defaultManager] setAttributes:fileOwner ofItemAtPath:fullPath error:NULL]) { //err msg - os_log_error(logHandle, "ERROR: failed to set ownership for %@ (%@)", fullPath, fileOwner); + os_log_error(logHandle, "ERROR: failed to set ownership for %{public}@ (%{public}@)", fullPath, fileOwner); //bail goto bail; diff --git a/Shared/patrons.txt b/Shared/patrons.txt index c88e78f..c0e9c4a 100644 --- a/Shared/patrons.txt +++ b/Shared/patrons.txt @@ -1,5 +1,5 @@ Patrons (2^6+): -Jan Koum, Nick, Shain Singh, Christian Blümlein, Rocky Zadok, Cane Juice, M S +Jan Koum, Matt Mullenweg, Christian Blümlein, Shain Singh, Andreas Fink, Nuno, Rabi Rob Thomas, Mikhail Friends of Objective-See: Kandji, Jamf, Mosyle, CleanMyMac X, Kolide, Palo Alto Networks, SmugMug, Guardian Mobile Firewall, iVerify, Halo Privacy, The Mitten Mac