Doppelt vergebene UIDs

Ich habe ine Script geschrieben, was die Sache hoffentlich ausbügelt. Für einen einzelnen Testuser funktioniert es schon mal. Vielleicht kann es jemand brauchen der mal UIDNummern nachträglich ändern muss und Samba4 im Einsatz hat.

Sollte jemand einen Grund kennen, weshalb ich genau das nicht machen sollte, bin ich für Warnungen dankbar.

Das Script tut folgendes:
[ol][li]Schlägt alte und neu UIDNummer sowie SID und HomeDir nach[/li]
[li]ändert die UIDNummer im openldap[/li]
[li]passt die Zuordnung zwischen Samba SID und Unix UIDNummer in der idmap.ldb an[/li]
[li]Ändert die Eigentümerschaft des Home-Verzeichnisses auf die neue UIDNummer[/li]
[li]Optional: Sucht Dateien mit der alten UIDNummer-Eigentümerschaft und ändert diese[/li][/ol]

#!/bin/bash

# Dieses Script der nachträglichen Änderung der Posix UID auf einem UCS System
# Mit Samba4 AD-Master.
#
# Es addiert einen festen Wert zur alten UID und passt danach das ID-Mapping in
# Der SAMBA Datenbank idmap.ldb an.
#
# Als Eingangsdatei wird eine liste der zu ändernden DNs aus dem UCS openldap
# verwendet.
# Diese Datei muss folgede Form haben:
#
# uid=benutzer1,cn=users,dc=domain,dc=local
# uid=benutzer2,cn=users,dc=domain,dc=local

# Konstanten

IDMAPPFAD=/var/lib/samba/private/idmap.ldb    # real
#test# IDMAPPFAD=/tmp/idmap.ldb  #test
EINGABEDATEI=/root/korrektur/nutzer
LDAPBASIS=dc=juwe,dc=local


for i in `cat $EINGABEDATEI `; do
	echo $i
	#Daten aus openldap holen
	univention-ldapsearch -x -LLL -b $i > /tmp/ucsldaptemp
        OLDUID=$(cat /tmp/ucsldaptemp | grep uidNumber | cut -d " " -f 2)
	NEWUID=$(($OLDUID+2000))
	SID=$(cat /tmp/ucsldaptemp | grep sambaSID | cut -d " " -f 2)	
	HDIR=$(cat /tmp/ucsldaptemp  | grep homeDirectory | cut -d " " -f 2)	
	UNAME=$(cat /tmp/ucsldaptemp  | grep uid: | cut -d " " -f 2)
	
	echo $i
	echo "OLDUID = $OLDUID"
	echo "NEWUID = $NEWUID"
	echo "SID    = $SID"
	echo "HOMEDIR= $HDIR"
	echo "Username = $UNAME"
	 
	# Hier UID im UCS LDAP ändern

	echo"dn: $i
changetype: modify
replace: uidNumber
uidNumber: $NEWUID" > /tmp/$UNAME_UCS.ldif

        ldapmodify -D cn=admin,$LDAPBASIS -y /etc/ldap.secret -h localhost -p 7389 -f /tmp/$UNAME_UCS.ldif		
		
	# Hier mapping im S4 idmap ändern
	
	echo "dn: cn=$SID
changetype: modify
replace: xidNumber
xidNumber: $NEWUID" > /tmp/idmapchange$OLDUID_TO_$NEWUID.ldif
	ldbmodify --url=$IDMAPPFAD /tmp/idmapchange$OLDUID_TO_$NEWUID.ldif	
	if [ $? -eq 0 ] ; then 
		echo "$UNAME $OLDUID nach $NEWUID" >> /tmp/idmapchange_ok.log
		rm /tmp/idmapchange$OLDUID_TO_$NEWUID.ldif
	else
		echo $i >> /tmp/idmapchange_fehler.log
		cp /tmp/idmapchange$OLDUID_TO_$NEWUID.ldif /tmp/failed-idmapchange$OLDUID_TO_$NEWUID.ldif
	fi
		
	# Hier Dateieigentum ändern

	chown -R --from $OLDUID $NEWUID $HDIR 
	# Man könnte auch sowas wie "find /mnt/shares/firmendaten -uid $OLDUID -exec chown $NEWUID {} \;" machen.
			
done