|
4 | 4 | import hashlib |
5 | 5 | import ipaddress |
6 | 6 | import os |
| 7 | +import platform |
7 | 8 | import re |
8 | 9 | import secrets |
9 | 10 | from collections import defaultdict |
@@ -338,22 +339,25 @@ def _load_auth_settings(self) -> AuthSettings: |
338 | 339 |
|
339 | 340 | try: |
340 | 341 | if self.settings_path.exists(): |
341 | | - # Check file permissions for security |
342 | | - try: |
343 | | - stat_info = self.settings_path.stat() |
344 | | - # Check if file is readable/writable by group or others (should be 600 or similar) |
345 | | - if stat_info.st_mode & 0o077: # Check if group/other has any permissions |
346 | | - logger.warning( |
347 | | - f"Settings file {self.settings_path} has overly permissive permissions. " |
348 | | - f"Fixing to 600 (owner read/write only)." |
349 | | - ) |
350 | | - try: |
351 | | - os.chmod(str(self.settings_path), 0o600) |
352 | | - logger.info(f"Fixed permissions for settings file {self.settings_path} to 600.") |
353 | | - except OSError as e: |
354 | | - logger.error(f"Could not fix permissions for settings file: {e}") |
355 | | - except (OSError, AttributeError) as e: |
356 | | - logger.warning(f"Could not check permissions for settings file: {e}") |
| 342 | + # Check file permissions for security (skip on Windows as it uses different permission model) |
| 343 | + if platform.system() != "Windows": |
| 344 | + try: |
| 345 | + stat_info = self.settings_path.stat() |
| 346 | + # Check if file is readable/writable by group or others (should be 600 or similar) |
| 347 | + if stat_info.st_mode & 0o077: # Check if group/other has any permissions |
| 348 | + logger.warning( |
| 349 | + f"Settings file {self.settings_path} has overly permissive permissions. " |
| 350 | + f"Fixing to 600 (owner read/write only)." |
| 351 | + ) |
| 352 | + try: |
| 353 | + os.chmod(str(self.settings_path), 0o600) |
| 354 | + logger.info(f"Fixed permissions for settings file {self.settings_path} to 600.") |
| 355 | + except OSError as e: |
| 356 | + logger.error(f"Could not fix permissions for settings file: {e}") |
| 357 | + except (OSError, AttributeError) as e: |
| 358 | + logger.warning(f"Could not check permissions for settings file: {e}") |
| 359 | + else: |
| 360 | + logger.debug("Skipping file permission check on Windows (uses different permission model)") |
357 | 361 |
|
358 | 362 | with open(self.settings_path, encoding="utf-8") as f: |
359 | 363 | yaml_loader = ruamel.yaml.YAML(typ="safe") |
@@ -574,11 +578,14 @@ def save_auth_settings(settings_path: Path, settings: AuthSettings) -> bool: |
574 | 578 | with open(settings_path, "w", encoding="utf-8") as f: |
575 | 579 | yaml.dump(data, f) |
576 | 580 |
|
577 | | - # Set restrictive permissions (600 - owner read/write only) |
578 | | - try: |
579 | | - os.chmod(str(settings_path), 0o600) |
580 | | - except OSError as e: |
581 | | - logger.error(f"Could not set permissions for settings file: {e}") |
| 581 | + # Set restrictive permissions (600 - owner read/write only) - skip on Windows |
| 582 | + if platform.system() != "Windows": |
| 583 | + try: |
| 584 | + os.chmod(str(settings_path), 0o600) |
| 585 | + except OSError as e: |
| 586 | + logger.error(f"Could not set permissions for settings file: {e}") |
| 587 | + else: |
| 588 | + logger.debug("Skipping file permission setting on Windows (uses different permission model)") |
582 | 589 |
|
583 | 590 | return True |
584 | 591 | except Exception as e: |
|
0 commit comments