83 lines
2.7 KiB
Python
Executable file
83 lines
2.7 KiB
Python
Executable file
#!/usr/bin/python3
|
|
|
|
from sys import argv
|
|
from subprocess import run, check_output
|
|
|
|
|
|
# Hash a password for LDAP
|
|
# https://github.com/tonyprawiro/cracking-ldap
|
|
def ldap_hash(password):
|
|
return password
|
|
|
|
# Add a new user
|
|
def adduser(username, firstname, lastname, email, password, ldap_pass=None):
|
|
# Get UID
|
|
output = check_output(['getent', 'passwd'])
|
|
uid = [u for u in range(1000, 10000) if str(u) not in output][0]
|
|
|
|
# Construct LDIF
|
|
ldif = '''dn: uid={username},ou=People,dc=exozy,dc=me
|
|
objectClass: top
|
|
objectClass: person
|
|
objectClass: organizationalPerson
|
|
objectClass: inetOrgPerson
|
|
objectClass: posixAccount
|
|
objectClass: shadowAccount
|
|
uid: {username}
|
|
cn: {firstname} {lastname}
|
|
sn: {lastname}
|
|
givenName: {firstname}
|
|
userPassword: {hashedpassword}
|
|
mail: {email}
|
|
loginShell: /bin/fish
|
|
uidNumber: {uid}
|
|
gidNumber: {uid}
|
|
homeDirectory: /home/{username}
|
|
|
|
dn: cn={username},ou=Group,dc=exozy,dc=me
|
|
objectClass: top
|
|
objectClass: posixGroup
|
|
cn: {username}
|
|
gidNumber: {uid}'''.format(username=username,
|
|
firstname=firstname,
|
|
lastname=lastname,
|
|
email=email,
|
|
uid=uid,
|
|
hashedpassword=ldap_hash(password))
|
|
|
|
# Write to file and get confirmation
|
|
filename = username + '.ldif'
|
|
with open(filename, 'w') as f:
|
|
f.write(ldif)
|
|
|
|
# Add user
|
|
if ldap_pass == None:
|
|
run(['vim', filename])
|
|
confirm = input('OK? (y/N) ')
|
|
if confirm != 'y' and confirm != 'Y':
|
|
run(['gio', 'trash', filename])
|
|
print('Cancelled')
|
|
return
|
|
ret = call(['ldapadd', '-D', 'cn=Manager,dc=exozy,dc=me', '-W', '-f', filename])
|
|
else:
|
|
ret = call(['ldapadd', '-D', 'cn=Manager,dc=exozy,dc=me', '-w', ldap_pass, '-f', filename])
|
|
if ret != 0:
|
|
os.remove(filename)
|
|
return
|
|
run(['chown', 'ta180m:ta180m', filename])
|
|
run(['mv', filename, '/home/ta180m/git/LDAP/users'])
|
|
|
|
# Configure user
|
|
run(['sudo', 'mkhomedir_helper', username, '077'])
|
|
run(['sudo', '-u', username, 'mkdir', '/home/' + username + '/.config'])
|
|
# Set up Flatpak
|
|
run(['sudo', '-u', username, 'flatpak', 'remote-add', '--if-not-exists', 'flathub',
|
|
'https://dl.flathub.org/repo/flathub.flatpakrepo', '--user'])
|
|
# Set default browser
|
|
run(['sudo', '-u', username, 'xdg-settings', 'set', 'default-web-browser', 'firefox.desktop'])
|
|
|
|
|
|
# Running as script
|
|
if __name__ == "__main__":
|
|
username, firsname, lastname, email, password = [argv[i] for i in range(1, 6)]
|
|
adduser(username, firstname, lastname, email, password)
|