From 3c40553ee473b94eef9bba6689988e7b18e10df0 Mon Sep 17 00:00:00 2001 From: Michael Neuwert Date: Tue, 17 Nov 2020 22:39:03 +0100 Subject: [PATCH] Added wipe function allowing deleting all keychain items (#73) Co-authored-by: Michael Neuwert --- ownCloudSDK/Security/OCKeychain.h | 1 + ownCloudSDK/Security/OCKeychain.m | 15 +++++++++++++++ 2 files changed, 16 insertions(+) diff --git a/ownCloudSDK/Security/OCKeychain.h b/ownCloudSDK/Security/OCKeychain.h index 809005b3..8d2ca7ab 100644 --- a/ownCloudSDK/Security/OCKeychain.h +++ b/ownCloudSDK/Security/OCKeychain.h @@ -32,6 +32,7 @@ NS_ASSUME_NONNULL_BEGIN - (nullable NSData *)readDataFromKeychainItemForAccount:(NSString *)account path:(NSString *)path; - (nullable NSError *)writeData:(nullable NSData *)data toKeychainItemForAccount:(NSString *)account path:(NSString *)path; - (nullable NSError *)removeKeychainItemForAccount:(NSString *)account path:(NSString *)path; +- (BOOL)wipe; #pragma mark - Object interface - (nullable id)readObjectFromKeychainItemForAccount:(NSString *)account path:(NSString *)path allowedClasses:(NSSet *)allowedClasses rootClass:(Class)rootClass error:(NSError * _Nullable * _Nullable)outError; diff --git a/ownCloudSDK/Security/OCKeychain.m b/ownCloudSDK/Security/OCKeychain.m index 94748354..d70e80a2 100644 --- a/ownCloudSDK/Security/OCKeychain.m +++ b/ownCloudSDK/Security/OCKeychain.m @@ -172,6 +172,21 @@ - (NSError *)removeKeychainItemForAccount:(NSString *)account path:(NSString *)p return ([self writeData:nil toKeychainItemForAccount:account path:path]); } +- (BOOL)wipe +{ + OSStatus status = errSecSuccess; + NSMutableDictionary *queryDict; + + if ((queryDict = [self _queryType:NULL dictForAccount:nil path:nil]) != nil) + { + status = SecItemDelete((CFDictionaryRef)queryDict); + + OCTLogDebug(@[@"Delete"], @"Delete all items, status=%d", status); + } + + return (status == errSecSuccess); +} + - (id)readObjectFromKeychainItemForAccount:(NSString *)account path:(NSString *)path allowedClasses:(NSSet *)allowedClasses rootClass:(Class)rootClass error:(NSError **)outError { NSData *data;