Annotation of embedaddon/rsync/support/nameconvert, revision 1.1.1.1
1.1 misho 1: #!/usr/bin/env python3
2:
3: # This implements a simple protocol to do user & group conversions between
4: # names & ids. All input and output consists of simple strings with a
5: # terminating newline.
6: #
7: # The requests can be:
8: #
9: # uid ID_NUM\n -> NAME\n
10: # gid ID_NUM\n -> NAME\n
11: # usr NAME\n -> ID_NUM\n
12: # grp NAME\n -> ID_NUM\n
13: #
14: # An unknown ID_NUM or NAME results in an empty return value.
15: #
16: # This is used by an rsync daemon when configured with the "name converter" and
17: # (often) "use chroot = true". While this converter uses real user & group
18: # lookups you could change it to use any mapping idiom you'd like.
19:
20: import sys, argparse, pwd, grp
21:
22: def main():
23: for line in sys.stdin:
24: try:
25: req, arg = line.rstrip().split(' ', 1)
26: except:
27: req = None
28: try:
29: if req == 'uid':
30: ans = pwd.getpwuid(int(arg)).pw_name
31: elif req == 'gid':
32: ans = grp.getgrgid(int(arg)).gr_name
33: elif req == 'usr':
34: ans = pwd.getpwnam(arg).pw_uid
35: elif req == 'grp':
36: ans = grp.getgrnam(arg).gr_gid
37: else:
38: print("Invalid request", file=sys.stderr)
39: sys.exit(1)
40: except KeyError:
41: ans = ''
42: print(ans, flush=True)
43:
44:
45: if __name__ == '__main__':
46: parser = argparse.ArgumentParser(description="Convert users & groups between names & numbers for an rsync daemon.")
47: args = parser.parse_args()
48: main()
49:
50: # vim: sw=4 et
FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>