]> arthur.barton.de Git - bup.git/blob - t/id-other-than
test-restore-map-owner: accommodate python 3 and test there
[bup.git] / t / id-other-than
1 #!/bin/sh
2 """": # -*-python-*-
3 bup_python="$(dirname "$0")/../cmd/bup-python" || exit $?
4 exec "$bup_python" "$0" ${1+"$@"}
5 """
6 # end of bup preamble
7
8 # Note: this currently relies on bup-python to handle arbitrary binary
9 # user/group names.
10
11 from __future__ import absolute_import, print_function
12
13 import grp
14 import pwd
15 import sys
16
17 def usage():
18     print('Usage: id-other-than <--user|--group> ID [ID ...]',
19           file=sys.stderr)
20
21 if len(sys.argv) < 2:
22     usage()
23     sys.exit(1)
24
25 def is_integer(x):
26     try:
27         int(x)
28         return True
29     except ValueError as e:
30         return False
31
32 excluded_ids = set(int(x) for x in sys.argv[2:] if is_integer(x))
33 excluded_names = (x for x in sys.argv[2:] if not is_integer(x))
34
35 if sys.argv[1] == '--user':
36     for x in excluded_names:
37         excluded_ids.add(pwd.getpwnam(x).pw_uid)
38     for x in pwd.getpwall():
39         if x.pw_uid not in excluded_ids:
40             print(x.pw_name + ':' + str(x.pw_uid))
41             sys.exit(0)
42 elif sys.argv[1] == '--group':
43     for x in excluded_names:
44         excluded_ids.add(grp.getgrnam(x).gr_gid)
45     for x in grp.getgrall():
46         if x.gr_gid not in excluded_ids:
47             print(x.gr_name + ':' + str(x.gr_gid))
48             sys.exit(0)
49 else:
50     usage()
51     sys.exit(1)