Hallo, dies ist ein Test.
PWD: /www/data-lst1/unixsoft/unixsoft/kaempfer/.public_html
Running in File Mode
Relative path: ././../../../../../../usr/bin/listusers
Real path: /usr/bin/listusers
Zurück
#!/usr/bin/python3.9 -Es import solaris.no_site_packages # # Copyright (c) 2018, Oracle and/or its affiliates. All rights reserved. # """ listusers - list user login information """ import getopt import pwd import grp import sys SYSTEM_ID_MAX = 100 def add_valid_user(users, user, expand_group=False): """ Add user to users set if it exists and is a not a system account. """ try: pent = pwd.getpwnam(user) except KeyError: if expand_group: add_valid_group_members(users, user) else: print(user, "was not found", file=sys.stderr) return if pent.pw_uid < SYSTEM_ID_MAX: print(user, "is not a user login", file=sys.stderr) else: users.add(pent) def add_valid_group_members(users, group): """ Add valid group members and nested groups. """ try: gent = grp.getgrnam(group) except KeyError: print(group, "was not found", file=sys.stderr) return if gent.gr_gid < SYSTEM_ID_MAX: print(group, "is not a user group", file=sys.stderr) else: for member in gent.gr_mem: add_valid_user(users, member, expand_group=True) def usage(): """ Display command usage. """ print("usage: listusers [-g groups] [-l logins]", file=sys.stderr) def parse_args(): """ Setup user and group filters from the command line arguments. """ try: opts, args = getopt.getopt(sys.argv[1:], "g:l:", ["groups=", "users="]) except getopt.GetoptError: usage() sys.exit(1) filter_users = filter_groups = set() optg_count = optl_count = 0 for opt, optarg in opts: if opt in ("-g", "--groups"): filter_groups = optarg.split(',') optg_count += 1 elif opt in ("-l", "--users"): filter_users = optarg.split(',') optl_count += 1 # There should be no remaining arguments after getopt if args or optg_count > 1 or optl_count > 1: usage() sys.exit(1) return filter_users, filter_groups def main(): """ listusers - list user login information """ filter_users, filter_groups = parse_args() users = set() for user in filter_users: add_valid_user(users, user) for group in filter_groups: add_valid_group_members(users, group) if not filter_users and not filter_groups: users = set(pwd.getpwall()) for user in sorted(users): # Note this 16 should actually be 32 plus a space # but this is output compatible with the C code for testing print('{0: <16}{1}'.format(user.pw_name, user.pw_gecos)) if __name__ == "__main__": try: main() except (KeyboardInterrupt, BrokenPipeError): pass sys.stderr.close()