From 1df9398437f381156bcc27bda1dc11c1b2a01eb0 Mon Sep 17 00:00:00 2001 From: Gregor Longariva <gregor.longariva@fau.de> Date: Mon, 24 Mar 2025 14:27:51 +0100 Subject: [PATCH] =?UTF-8?q?=E2=9A=A1=EF=B8=8F=20more=20changes=20to=20fix?= =?UTF-8?q?=20the=20found=20bug?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../helper/ActivityController.swift | 4 ++-- .../helper/AutomaticSignIn.swift | 6 +++--- Network Share Mounter/helper/Logger.swift | 1 + Network Share Mounter/helper/NSTaskWrapper.swift | 2 +- Network Share Mounter/preferences/FAU.swift | 6 +++--- .../view/KrbAuthViewController.swift | 16 +++++++++++++--- networkShareMounter.xcodeproj/project.pbxproj | 4 ++-- 7 files changed, 25 insertions(+), 14 deletions(-) diff --git a/Network Share Mounter/helper/ActivityController.swift b/Network Share Mounter/helper/ActivityController.swift index 1d256ef..978c287 100644 --- a/Network Share Mounter/helper/ActivityController.swift +++ b/Network Share Mounter/helper/ActivityController.swift @@ -306,7 +306,7 @@ class ActivityController { } } - // MARK: - Helpers for utilizing the cliTaskAsync method + // MARK: - Helpers for utilizing the cliTask method /// Executes a CLI command asynchronously with error handling /// @@ -315,7 +315,7 @@ class ActivityController { /// - Throws: Any errors that occur during command execution private func executeCommand(_ command: String) async throws -> String { do { - return try await cliTaskAsync(command) + return try await cliTask(command) } catch { Logger.activityController.error("Command execution failed: \(command), error: \(error.localizedDescription)") throw error diff --git a/Network Share Mounter/helper/AutomaticSignIn.swift b/Network Share Mounter/helper/AutomaticSignIn.swift index 0b393ef..3c9efe5 100644 --- a/Network Share Mounter/helper/AutomaticSignIn.swift +++ b/Network Share Mounter/helper/AutomaticSignIn.swift @@ -98,7 +98,7 @@ actor AutomaticSignIn { // Standard-Principal wiederherstellen if let defPrinc = defaultPrinc { do { - let output = try await cliTaskAsync("kswitch -p \(defPrinc)") + let output = try await cliTask("kswitch -p \(defPrinc)") Logger.automaticSignIn.debug("kswitch Ausgabe: \(output)") } catch { Logger.automaticSignIn.error("Fehler beim Umschalten auf Standard-Principal: \(error.localizedDescription)") @@ -229,7 +229,7 @@ actor AutomaticSignInWorker: dogeADUserSessionDelegate { func getUserInfo() async { do { // Zum Benutzer-Principal wechseln - let output = try await cliTaskAsync("kswitch -p \(session.userPrincipal)") + let output = try await cliTask("kswitch -p \(session.userPrincipal)") Logger.automaticSignIn.debug("kswitch Ausgabe: \(output)") // Benutzerdaten abrufen @@ -248,7 +248,7 @@ actor AutomaticSignInWorker: dogeADUserSessionDelegate { do { // Zum authentifizierten Benutzer wechseln - let output = try await cliTaskAsync("kswitch -p \(session.userPrincipal)") + let output = try await cliTask("kswitch -p \(session.userPrincipal)") Logger.automaticSignIn.debug("kswitch Ausgabe: \(output)") // Erfolg mitteilen diff --git a/Network Share Mounter/helper/Logger.swift b/Network Share Mounter/helper/Logger.swift index f6d0b52..a21b7b1 100644 --- a/Network Share Mounter/helper/Logger.swift +++ b/Network Share Mounter/helper/Logger.swift @@ -29,4 +29,5 @@ extension Logger { static let authUI = Logger(subsystem: subsystem, category: "authUI") static let FAU = Logger(subsystem: subsystem, category: "FAU") static let preferences = Logger(subsystem: subsystem, category: "preferences") + static let login = Logger(subsystem: subsystem, category: "login") } diff --git a/Network Share Mounter/helper/NSTaskWrapper.swift b/Network Share Mounter/helper/NSTaskWrapper.swift index 0d46b0a..80a907f 100644 --- a/Network Share Mounter/helper/NSTaskWrapper.swift +++ b/Network Share Mounter/helper/NSTaskWrapper.swift @@ -23,7 +23,7 @@ private actor ShellCommandQueue { /// - Throws: Any error that occurs during execution func execute<T>(_ operation: () async throws -> T) async throws -> T { while isExecuting { - try await Task.sleep(for: .milliseconds(100)) + try await Task.sleep(nanoseconds: 100_000_000) // 100ms in Nanosekunden } isExecuting = true defer { isExecuting = false } diff --git a/Network Share Mounter/preferences/FAU.swift b/Network Share Mounter/preferences/FAU.swift index d945262..0cad25a 100644 --- a/Network Share Mounter/preferences/FAU.swift +++ b/Network Share Mounter/preferences/FAU.swift @@ -61,10 +61,10 @@ class Migrator: dogeADUserSessionDelegate { } do { - let result = try await cliTaskAsync("kswitch -p \(principal)") - Logger.FAU.debug("Successfully switched Kerberos principal: \(result)") + let result = try await cliTask("kswitch -p \(principal)") + Logger.login.debug("Principal switch result: \(result)") } catch { - Logger.FAU.error("kswitch -p failed: \(error.localizedDescription)") + Logger.login.error("Failed to switch principal: \(error.localizedDescription)") // Continue despite error, as authentication still succeeded } diff --git a/Network Share Mounter/view/KrbAuthViewController.swift b/Network Share Mounter/view/KrbAuthViewController.swift index 1aa4c15..be85ea0 100644 --- a/Network Share Mounter/view/KrbAuthViewController.swift +++ b/Network Share Mounter/view/KrbAuthViewController.swift @@ -358,10 +358,20 @@ class KrbAuthViewController: NSViewController, AccountUpdate, NSTextFieldDelegat extension KrbAuthViewController: dogeADUserSessionDelegate { func dogeADAuthenticationSucceded() async { Logger.authUI.debug("Auth succeeded") - _ = await cliTask("kswitch -p \(self.session?.userPrincipal ?? "")") - await session?.userInfo() - await handleSuccessfulAuthentication() + do { + // Wechsel zum Benutzer-Principal + let output = try await cliTask("kswitch -p \(self.session?.userPrincipal ?? "")") + Logger.authUI.debug("kswitch Ausgabe: \(output)") + + await session?.userInfo() + await handleSuccessfulAuthentication() + } catch { + Logger.authUI.warning("Fehler beim Wechseln des Kerberos-Principal: \(error.localizedDescription)") + // Trotzdem mit Authentifizierung fortfahren, da der primäre Auth-Prozess erfolgreich war + await session?.userInfo() + await handleSuccessfulAuthentication() + } } func dogeADAuthenticationFailed(error: dogeADSessionError, description: String) async { diff --git a/networkShareMounter.xcodeproj/project.pbxproj b/networkShareMounter.xcodeproj/project.pbxproj index 9b4fa5f..ec3f74d 100644 --- a/networkShareMounter.xcodeproj/project.pbxproj +++ b/networkShareMounter.xcodeproj/project.pbxproj @@ -647,7 +647,7 @@ CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; CODE_SIGN_IDENTITY = "Apple Development"; CODE_SIGN_STYLE = Automatic; - CURRENT_PROJECT_VERSION = 200; + CURRENT_PROJECT_VERSION = 201; DEVELOPMENT_TEAM = C8F68RFW4L; ENABLE_USER_SCRIPT_SANDBOXING = YES; GCC_C_LANGUAGE_STANDARD = gnu17; @@ -677,7 +677,7 @@ CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; CODE_SIGN_IDENTITY = "Apple Development"; CODE_SIGN_STYLE = Automatic; - CURRENT_PROJECT_VERSION = 200; + CURRENT_PROJECT_VERSION = 201; DEVELOPMENT_TEAM = C8F68RFW4L; ENABLE_USER_SCRIPT_SANDBOXING = YES; GCC_C_LANGUAGE_STANDARD = gnu17; -- GitLab