Annotation of embedaddon/rsync/support/nameconvert, revision 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>