#!/usr/bin/python import sys import crypt import base64 import grp import pwd ldif_add = """dn: cn=%(name)s,ou=users,dc=zotac,dc=lctp gidNumber: %(gid)s cn: %(name)s homeDirectory: /home/%(name)s objectClass: inetOrgPerson objectClass: posixAccount objectClass: shadowAccount uidNumber: %(uid)s loginShell: /bin/bash uid: %(name)s userPassword: {CRYPT}%(password)s sn: %(name)s""" ldif_group = """dn: cn=%(name)s,ou=groups,dc=zotac,dc=lctp objectClass: top objectClass: posixGroup gidNumber: %(gid)s cn: %(name)s""" if len(sys.argv) < 2: print("Usage: %s " % sys.argv[0], file=sys.stderr) exit(1) users = [pw.pw_name for pw in pwd.getpwall()] groups = [gr.gr_name for gr in grp.getgrall()] last_uid = max([user.pw_uid for user in pwd.getpwall()]) last_gid = max([user.gr_gid for user in grp.getgrall()]) for line in open(sys.argv[1]).readlines(): line = line.strip() user, password = line.split(maxsplit=1) if user in users: print("Skipping user %s (multiple occurences or user already existing)" % user, file=sys.stderr) continue if user in groups: print("Skipping group %s (multiple occurences or group already existing)" % user, file=sys.stderr) continue users.append(user) groups.append(user) print(ldif_add % { "name": user, "password": crypt.crypt(password), "uid": last_uid + 1, "gid": last_gid + 1 } + "\n") print(ldif_group % { "name": user, "gid": last_gid + 1 } + "\n") last_uid += 1 last_gid += 1