#!/bin/bash # # A simple script to add users and their group to ldap, as well as a kerberos principal. # set -eu usage(){ cat < [] [] $(basename $0) deluser : User ID (login name) : Password , : LDAP attributes, if omitted, is used. EOF } #sss_cache -U -G ## should not be necessary if [ $# -lt 2 ] ; then usage exit 1 elif [ $1 = adduser -a $# -lt 3 ] ; then echo "Error: Password missing." usage exit 1 fi MINID=10000 MAXID=20000 BASEDN="{{ basedn }}" HOMES="{{ lan_homes }}" LDAPADMIN="cn=admin,$BASEDN" ADPASSWD="$(cat {{ ldap_admin_pwd_file }})" COMMAND="$1" uid="$2" pw="${3:-""}" cn="${4:-$2}" sn="${5:-$2}" if [ -x /usr/sbin/kadmin.local ] ; then KRB5=true pwEntry="" else KRB5=false pwEntry="userPassword: $pw" fi ############# nextnum(){ local num num="$(( $(ldapsearch -Y EXTERNAL -H ldapi:/// -LLL -b "ou=people,$BASEDN" -S $1 $1 2>/dev/null \ | tail -n -2 | grep -oE "[[:digit:]]+$") + 1 ))" if [ $num -lt $MINID ] ; then echo $MINID else echo "$num" fi } add-user(){ uidNumber=$(nextnum uidNumber) gidNumber=$(nextnum gidNumber) if [ $uidNumber -ge $MAXID -o $gidNumber -ge $MAXID ] ; then echo "Error: $uidNumber and/or $gidNumber exceed max ID number ${MAXID}." exit 1 fi cat <&1 \ | sed '/ldap_initialize/d' if [ -d ${HOMES}/${uid} ] ; then KEEPDIR="${HOMES}/rm_$(date '+%Y%m%d')_${uid}" mv ${HOMES}/${uid} "${KEEPDIR}" chown -R root:root "${KEEPDIR}" ls -ld "$KEEPDIR" fi } ############################## ########### main ############# ############################## case $COMMAND in adduser) add-user ;; deluser) del-user ;; *) usage ;; esac