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>