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