36 lines
1.2 KiB
Python
36 lines
1.2 KiB
Python
from __future__ import annotations
|
|
|
|
from pathlib import Path
|
|
|
|
from sshctl.export.permissions import check_permissions, fix_ssh_permissions
|
|
|
|
|
|
def test_check_permissions_ok(tmp_path: Path) -> None:
|
|
ssh_dir = tmp_path / ".ssh"
|
|
ssh_dir.mkdir(mode=0o700)
|
|
(ssh_dir / "config").write_text("Host test\n", encoding="utf-8")
|
|
(ssh_dir / "config").chmod(0o600)
|
|
(ssh_dir / "keys.p").mkdir(mode=0o700)
|
|
(ssh_dir / "keys.p" / "key.pub").write_text("ssh-ed25519 AAA...")
|
|
(ssh_dir / "keys.p" / "key.pub").chmod(0o644)
|
|
|
|
issues = check_permissions(ssh_dir)
|
|
total = sum(len(v) for v in issues.values())
|
|
assert total == 0
|
|
|
|
|
|
def test_fix_permissions(tmp_path: Path) -> None:
|
|
ssh_dir = tmp_path / ".ssh"
|
|
ssh_dir.mkdir(mode=0o755)
|
|
(ssh_dir / "config").write_text("Host test\n", encoding="utf-8")
|
|
(ssh_dir / "config").chmod(0o644)
|
|
(ssh_dir / "id_rsa").write_text("private key data")
|
|
(ssh_dir / "id_rsa").chmod(0o644)
|
|
|
|
counts = fix_ssh_permissions(ssh_dir)
|
|
assert counts["dirs"] >= 1
|
|
assert counts["private"] >= 1
|
|
|
|
assert (ssh_dir / "config").stat().st_mode & 0o777 == 0o600
|
|
assert (ssh_dir / "id_rsa").stat().st_mode & 0o777 == 0o600
|