From 3c99b647d2996bf9d0a5cfd0ca64560ee3c7cf72 Mon Sep 17 00:00:00 2001 From: James Magahern Date: Sat, 12 Jun 2021 17:44:31 -0700 Subject: [PATCH] GPG is too much trouble for the access file --- kordophone/main.m | 62 +++++++++++++++++++++++++++++++---------------- 1 file changed, 41 insertions(+), 21 deletions(-) diff --git a/kordophone/main.m b/kordophone/main.m index 50689b5..2f45503 100644 --- a/kordophone/main.m +++ b/kordophone/main.m @@ -16,35 +16,55 @@ void printUsage() fprintf(stderr, "\t-h \t Show this help message\n"); fprintf(stderr, "\t-s \t Use SSL (requires -c option)\n"); fprintf(stderr, "\t-c \t SSL certificate path encoded as pkcs12\n"); - fprintf(stderr, "\t-a \t Optional GPG encrypted access control file\n"); + fprintf(stderr, "\t-a \t Optional access control file\n"); } -BOOL acquireCredentials(const char *accessFile, NSString **out_username, NSString **out_password) +BOOL acquireCredentials(bool encrypted, const char *accessFile, NSString **out_username, NSString **out_password) { - NSPipe *stdoutPipe = [NSPipe pipe]; - NSPipe *stderrPipe = [NSPipe pipe]; - NSTask *task = [[NSTask alloc] init]; - task.launchPath = @"/usr/local/bin/gpg"; - task.arguments = @[ @"-q", @"-d", [NSString stringWithUTF8String:accessFile] ]; - task.standardOutput = stdoutPipe; - task.standardError = stderrPipe; - + BOOL success = NO; + NSString *asString = nil; NSError *launchError = nil; - BOOL success = [task launchAndReturnError:&launchError]; - [task waitUntilExit]; - if (success) { - NSFileHandle *stdoutFile = stdoutPipe.fileHandleForReading; - NSData *data = [stdoutFile readDataToEndOfFile]; // blocks - [stdoutFile closeFile]; + NSString *accessFilePath = [NSString stringWithUTF8String:accessFile]; + if (encrypted) { + NSPipe *stdoutPipe = [NSPipe pipe]; + NSPipe *stderrPipe = [NSPipe pipe]; + NSTask *task = [[NSTask alloc] init]; + task.launchPath = @"/usr/local/bin/gpg"; + task.arguments = @[ @"-q", @"-d", accessFilePath ]; + task.standardOutput = stdoutPipe; + task.standardError = stderrPipe; - if ([task terminationStatus] != 0) { - NSData *stderrData = [[stderrPipe fileHandleForReading] readDataToEndOfFile]; - MBIMLogFatal(@"GPG error when decrypting access file: %@", [[NSString alloc] initWithData:stderrData encoding:NSUTF8StringEncoding]); + success = [task launchAndReturnError:&launchError]; + [task waitUntilExit]; + + if (success) { + NSFileHandle *stdoutFile = stdoutPipe.fileHandleForReading; + NSData *data = [stdoutFile readDataToEndOfFile]; // blocks + [stdoutFile closeFile]; + + if ([task terminationStatus] != 0) { + NSData *stderrData = [[stderrPipe fileHandleForReading] readDataToEndOfFile]; + MBIMLogFatal(@"GPG error when decrypting access file: %@", [[NSString alloc] initWithData:stderrData encoding:NSUTF8StringEncoding]); + return NO; + } + + asString = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding]; + } + } else { + NSError *fileReadError = nil; + asString = [NSString stringWithContentsOfFile:accessFilePath + encoding:NSASCIIStringEncoding + error:&fileReadError]; + if (fileReadError != nil) { + MBIMLogFatal(@"File open error when opening access file: %@", fileReadError.localizedDescription); return NO; } - NSString *asString = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding]; + success = (asString.length > 0); + } + + if (success) { NSScanner *scanner = [NSScanner scannerWithString:asString]; BOOL scannerSuccess = NO; @@ -133,7 +153,7 @@ int main(int argc, char *const argv[]) { NSString *username = nil; NSString *password = nil; - BOOL success = acquireCredentials(accessFilePath, &username, &password); + BOOL success = acquireCredentials(false, accessFilePath, &username, &password); if (!success) { MBIMLogInfo( @"Access file must be a GPG encrypted file (encrypted with your private key, to your pub key) "