#!/bin/bash
# Kategorie: portal
# Script zum Erweitern eines Benutzerkontos um RFC2307 Attribute.
# (c) 2016-2017,2020 Stefan Schaefer - FSP Computer & Netzwerke

# License: GPLv3
# Dieses Programm ist freie Software. Sie können es unter den Bedingungen der 
# GNU General Public License, wie von der Free Software Foundation veröffentlicht,
# weitergeben und/oder modifizieren, entweder gemäß Version 3 der Lizenz oder
# (nach Ihrer Option) jeder späteren Version.

# Die Veröffentlichung dieses Programms erfolgt in der Hoffnung, daß es Ihnen
# von Nutzen sein wird, aber OHNE IRGENDEINE GARANTIE, sogar ohne die implizite 
# Garantie der MARKTREIFE oder der VERWENDBARKEIT FÜR EINEN BESTIMMTEN ZWECK. 
# Details finden Sie in der GNU General Public License.

# Sie sollten ein Exemplar der GNU General Public License zusammen mit diesem 
# Programm erhalten haben. Falls nicht, siehe <http://www.gnu.org/licenses/>. 

#Konfigurationsdaten
conffile="/etc/invis/invis.conf"
confdir="/etc/invis"
passfile="/etc/invis/invis-pws.conf"

# Funktionen
# Werte aus Konfigurationsdatendatei extrahieren
# $1 = Konfigurationsdatei, $2 = Parameter, $3 Wert (Feld)
getconfdata() {
    cat $1 |grep "$2" | cut -d ":" -f $3
}

# Hostnamen
username="$1"

# Pruefen, ob eine Liste genannt wurde
if [[ -z $username ]]; then
    echo "Bitte den Anmeldenamen des zu erweiternden Benutzer-Kontos angeben."
    echo "addposixattrs username"
    exit
fi

# Daten aus Konfiguration holen
basedn=`getconfdata $conffile "baseDN" "2"`
domain=`getconfdata $conffile "intDomain" "2"`
nisdomain=`echo $domain | cut -d "." -f1`

# aus Portal-Konfiguration
guidbase=`cat /etc/invis/portal/config.php|grep '$SFU_GUID_BASE'| cut -d \' -f2`

# RID der Maschine ermitteln
rid=`pdbedit -Lv $username  2>/dev/null| grep "User SID" | cut -d "-" -f8`
gid=`pdbedit -Lv $username  2>/dev/null| grep "Primary Group SID" | cut -d "-" -f8`
#echo $rid

# Attribute festlegen
(( uidnumber=$rid + $guidbase ))
(( gidnumber=$gid + $guidbase ))

# Accountname
#accountname=`echo $username | tr [:upper:] [:lower:]`
accountname=${username,,}
homedir="/home/$accountname"

if [[ $accountname == "administrator" ]]; then
    scriptpath="admin.cmd"
else
    scriptpath="user.cmd"
fi

if [[ -z $rid ]]; then
    exit 2
else
    # Arbeitsdatei anlegen
    workfile="/tmp/userattributes.ldif"
    #echo "Maschinenkonto erweitern"
    echo "dn: CN=$accountname,CN=Users,$basedn" > $workfile
    echo "changetype: modify" >> $workfile
    echo "add: objectclass" >> $workfile
    echo "objectclass: posixAccount" >> $workfile
    echo "add: uidNumber" >> $workfile
    echo "uidNumber: $uidnumber" >> $workfile
    echo "add: gidNumber" >> $workfile
    echo "gidNumber: $gidnumber" >> $workfile
    echo "add: mssfu30nisDomain" >> $workfile
    echo "mssfu30nisDomain: $nisdomain" >> $workfile
    echo "add: msSFU30Name" >> $workfile
    echo "msSFU30Name: $accountname" >> $workfile
    echo "add: loginShell" >> $workfile
    echo "loginShell: /bin/bash" >> $workfile
    echo "add: unixHomeDirectory" >> $workfile
    echo "unixHomeDirectory: $homedir" >> $workfile
    echo "add: scriptPath" >> $workfile
    echo "scriptPath: $scriptpath" >> $workfile

    #cat $workfile
    ldbmodify -v -H /var/lib/samba/private/sam.ldb $workfile
    #ldbmodify -H /var/lib/samba/private/sam.ldb $workfile

    # Home-Directory anlegen, wenn nicht vorhanden
    if [[ ! -d $homedir ]] ; then
	cp -r /etc/skel $homedir
	sleep 2
	getent passwd > /dev/null 2>&1
	chown -R $accountname:$gidnumber $homedir
	chmod -R og-rx $homedir
    fi
fi
