66 lines
1.5 KiB
Plaintext
66 lines
1.5 KiB
Plaintext
|
#!/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 <users-file>" % 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
|
||
|
|