#!/bin/bash
# Add a unix + samba user to an LDAP database
# Author: Andreas Graf
# call: ./samba_useradd <first name> <surname> <login name> <userpassword> <uid-number>
ADMIN=Manager
ADMINPASSWD=geheim
DOMAIN1=local
DOMAIN2=classroom
HOMEDIR=/users
SHADOWMAX=10000
SHADOWMIN=9990
SHADOWWARNING=7

FIRSTNAME="$1"
[ $FIRSTNAME ] || read -p "Vorname: " FIRSTNAME
SURNAME="$2"
[ $SURNAME ] || read -p "Nachname: " SURNAME
LOGINNAME="$3"
[ $LOGINNAME ] || read -p "Anmeldename: " LOGINNAME
USERPASSWORD="$4"
[ $USERPASSWORD ] || read -p "Passwort: " USERPASSWORD
NEWUSERID="$5"
[ $NEWUSERID ] || read -p "UID (Zahl): " NEWUSERID

REALNAME="$FIRSTNAME $SURNAME"
TODAYSECONDS=`date +%s`
TODAY=`expr $TODAYSECONDS / 86400`

pdbedit -x -u $LOGINNAME
ldapdelete -x -D "cn=$ADMIN,dc=$DOMAIN2,dc=$DOMAIN1" -w "$ADMINPASSWD" "cn=$LOGINNAME,ou=people,dc=$DOMAIN2,dc=$DOMAIN1"
ldapdelete -x -D "cn=$ADMIN,dc=$DOMAIN2,dc=$DOMAIN1" -w "$ADMINPASSWD" "uid=$LOGINNAME,ou=people,dc=$DOMAIN2,dc=$DOMAIN1"
ldapadd -x -D "cn=$ADMIN,dc=$DOMAIN2,dc=$DOMAIN1" -w "$ADMINPASSWD" <<EOF
dn: uid=$LOGINNAME,ou=people,dc=$DOMAIN2,dc=$DOMAIN1
objectClass: top
objectClass: posixAccount
objectClass: shadowAccount
objectClass: inetOrgPerson
cn: $REALNAME
givenName: $REALNAME
displayName: $REALNAME
sn: $SURNAME
uid: $LOGINNAME
uidNumber: $NEWUSERID
gidNumber: 100
homeDirectory: ${HOMEDIR}/$LOGINNAME
loginShell: /bin/bash
shadowInactive: -1
shadowLastChange: $TODAY
shadowMax: $SHADOWMAX
shadowMin: $SHADOWMIN
shadowWarning: $SHADOWWARNING
EOF
ldappasswd -x -D "cn=$ADMIN,dc=$DOMAIN2,dc=$DOMAIN1" -w "$ADMINPASSWD" -s "$USERPASSWORD" "uid=$LOGINNAME,ou=people,dc=$DOMAIN2,dc=$DOMAIN1"
echo -e "$USERPASSWORD\n$USERPASSWORD" | pdbedit -a -t -u "$LOGINNAME"
cp -a /etc/skel ${HOMEDIR}/${LOGINNAME}
chown -R "$NEWUSERID:100" ${HOMEDIR}/${LOGINNAME}
chmod 700 ${HOMEDIR}/${LOGINNAME}
