summaryrefslogtreecommitdiff
path: root/meson_post_install.py
blob: e7423109f4912b3bbbd28b7436968b4e5718a798 (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
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
#!/usr/bin/env python3

import os
import pwd
import sys

destdir = os.environ.get('DESTDIR')
prefix = os.environ['MESON_INSTALL_DESTDIR_PREFIX']

def destdir_path(p):
    if os.path.isabs(p):
        if destdir is None:
            return p
        else:
            return os.path.join(destdir, os.path.relpath(p, '/'))
    else:
        return os.path.join(prefix, p)

bindir = destdir_path(sys.argv[1])
pkgdatadir = destdir_path(sys.argv[2])
pkglibdir = destdir_path(sys.argv[3])
pkgsysconfdir = destdir_path(sys.argv[4])
polkitd_user = sys.argv[5]

try:
    polkitd_uid = pwd.getpwnam(polkitd_user).pw_uid
except KeyError:
    polkitd_uid = None

dst = os.path.join(bindir, 'pkexec')

if os.geteuid() == 0:
    os.chown(dst, 0, -1)
    os.chmod(dst, 0o4755)
else:
    print(
        'Owner and mode of {} need to be setuid root (04755) after '
        'installation'.format(
            dst,
        )
    )

dst_dirs = [
    os.path.join(pkgsysconfdir, 'rules.d'),
    os.path.join(pkgdatadir, 'rules.d')
]

for dst in dst_dirs:
    if not os.path.exists(dst):
        os.makedirs(dst, mode=0o700)
        if os.geteuid() == 0 and polkitd_uid is not None:
            os.chown(dst, polkitd_uid, -1)
        else:
            print(
                'Owner of {} needs to be set to {} after installation'.format(
                    dst, polkitd_user,
                )
            )

# polkit-agent-helper-1 need to be setuid root because it's used to
# authenticate not only the invoking user, but possibly also root
# and/or other users.
dst = os.path.join(pkglibdir, 'polkit-agent-helper-1')

if os.geteuid() == 0:
    os.chown(dst, 0, -1)
    os.chmod(dst, 0o4755)
else:
    print(
        'Owner and mode of {} need to be setuid root (04755) after '
        'installation'.format(
            dst,
        )
    )