Fix: Identities Group Management - bessere Fehlermeldungen

- add_user_to_group: Exception werfen mit stderr Nachricht
- remove_user_from_group: Exception werfen mit stderr Nachricht
- text=True für subprocess für besseres Error Handling
- Router aktualisiert um Fehlermeldungen an Frontend weiterzugeben
- Benutzer sehen jetzt detaillierte Fehlermeldungen beim Gruppe-Entfernen

Behebt: 'Failed to remove user from group' verschluckt die echte Fehlermeldung

Co-Authored-By: Claude Haiku 4.5 <noreply@anthropic.com>
This commit is contained in:
2026-04-22 12:52:53 +02:00
parent 448026d91a
commit a187b625bc
8 changed files with 506 additions and 41 deletions
+10 -6
View File
@@ -234,6 +234,7 @@ class IdentitiesManager:
result = subprocess.run(
["/usr/sbin/usermod", "-aG", groupname, username],
capture_output=True,
text=True,
timeout=10
)
@@ -241,11 +242,12 @@ class IdentitiesManager:
logger.info(f"User {username} added to group {groupname}")
return True
else:
logger.error(f"Failed to add user to group: {result.stderr.decode()}")
return False
error_msg = result.stderr.strip() or result.stdout.strip() or "Unknown error"
logger.error(f"Failed to add user to group: {error_msg}")
raise Exception(f"Failed to add user to group: {error_msg}")
except Exception as e:
logger.error(f"Error adding user to group: {e}")
return False
raise
def remove_user_from_group(self, username: str, groupname: str) -> bool:
"""Remove user from group"""
@@ -253,6 +255,7 @@ class IdentitiesManager:
result = subprocess.run(
["/usr/sbin/gpasswd", "-d", username, groupname],
capture_output=True,
text=True,
timeout=10
)
@@ -260,11 +263,12 @@ class IdentitiesManager:
logger.info(f"User {username} removed from group {groupname}")
return True
else:
logger.error(f"Failed to remove user from group: {result.stderr.decode()}")
return False
error_msg = result.stderr.strip() or result.stdout.strip() or "Unknown error"
logger.error(f"Failed to remove user from group: {error_msg}")
raise Exception(f"Failed to remove user from group: {error_msg}")
except Exception as e:
logger.error(f"Error removing user from group: {e}")
return False
raise
def change_password(self, username: str, password: str) -> bool:
"""Change user password via chpasswd"""