summaryrefslogtreecommitdiff
path: root/stacks/daemon/test_privilege_drop.py
blob: 3a611c94fd90e7f120b337d73974f596d8187577 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
#!/usr/bin/env python3
"""Tests for max25d privilege_drop (no root required)."""
from __future__ import annotations

import configparser
import sys
from pathlib import Path

ROOT = Path(__file__).resolve().parent
sys.path.insert(0, str(ROOT))

from privilege_drop import RunAsConfig, parse_run_as, resolve_run_as, run_as_configured  # noqa: E402


def test_parse_run_as_empty() -> None:
    cp = configparser.ConfigParser()
    cp.read_string("[daemon]\nmode = standalone\n")
    cfg = parse_run_as(cp)
    assert cfg.user == ""
    assert not run_as_configured(cfg)


def test_parse_run_as_user_group() -> None:
    cp = configparser.ConfigParser()
    cp.read_string(
        "[daemon]\nuser = max25\ngroup = dialout\nuid = 1001\n"
    )
    cfg = parse_run_as(cp)
    assert cfg.user == "max25"
    assert cfg.group == "dialout"
    assert cfg.uid == 1001
    assert run_as_configured(cfg)


def test_resolve_run_as_current_user() -> None:
    import os
    import pwd

    pw = pwd.getpwuid(os.getuid())
    uid, gid, name = resolve_run_as(RunAsConfig(user=pw.pw_name))
    assert uid == pw.pw_uid
    assert gid == pw.pw_gid
    assert name == pw.pw_name


def main() -> int:
    test_parse_run_as_empty()
    test_parse_run_as_user_group()
    test_resolve_run_as_current_user()
    print("privilege_drop: OK")
    return 0


if __name__ == "__main__":
    raise SystemExit(main())
git clone -b <branch> https://cgit.mode42.com/<repo>.git
git clone -b <branch> git://cgit.mode42.com/<repo>.git

info@mode42.com