Om een gedeelte van gebruikers van de ene naar de andere OID te verhuizen is lastig en omslachtig. Onderstaand script vraagt naar de hostnaam,poort,wachtwoord. Hierna wordt naar de betreffende OID gegaan en worden alle groepen uitgelezen en getoond.

Wanneer je hierna een gedeelte van een groepnaam, of de groepnaam intikt, zullen LDIF’s gemaakt worden van users die tot die groepen behoren, evenals de betreffend groep-LDIF’s. Helaas niet in 1 bestand, dit gaf problemen door twee lege regels tussen de users. Nu elke user in 1 bestand. Via een loopje in te lezen, voorbeeld aan het eind.

Auteur van dit moois: Jacco Landlust.

#!/bin/ksh

#

# Auteur: Jacco H. Landlust

# Versie: 1.1

#

# Opmerkingen:

# gebasseerd op het “Script to Check Groups for Deleted Members”

# van J.D. Smith, Principal Support Engineer, Oracle Support-Orlando

#
TMPDIR=tmpdir/

mkdir -p ${TMPDIR}

clear

########################################

## Accept Input Variables From the User

########################################

echo ” “

OIDHOST=`hostname`

printf “Enter Your Hostname [${OIDHOST}]: “

read NEW_OIDHOST

if [ ${NEW_OIDHOST} ] ; then

OIDHOST=${NEW_OIDHOST}

fi

echo ” “

OIDPORT=389

printf “Enter the LDAP Port# of OID LDAP Server [$OIDPORT]: “

read NEW_OIDPORT

if [ ${NEW_OIDPORT} ] ; then

OIDPORT=${NEW_OIDPORT}

fi

echo ” “

printf “Enter the orcladmin Password: “

stty -echo; read OIDPWD ; stty echo ; echo

echo ” “

echo “Obtaining the OID Realm For Synchronization…..”

echo ” ”

${ORACLE_HOME}/bin/ldapsearch -h ${OIDHOST} -p ${OIDPORT} -L -D cn=orcladmin -w ${OIDPWD} -b “cn=Common,cn=Products,cn=OracleContext” -s base “objectclass=*” orcldefaultsubscriber > ${TMPDIR}/defsub

DEFSUB=`cat ${TMPDIR}/defsub | grep orcldefaultsubscriber | cut -f 2 -d ” “`

echo ” “

printf “Enter the Realm [$DEFSUB]: “

read NEW_DEFSUB

if [ ${NEW_DEFSUB} ] ; then

DEFSUB=${NEW_DEFSUB}

fi

REALM=cn=Groups,${DEFSUB}

echo The Following Groups Are Defined Within Realm: $REALM

echo ————————————————————————————-

${ORACLE_HOME}/bin/ldapsearch -p ${OIDPORT} -h ${OIDHOST} -D cn=orcladmin -w ${OIDPWD} -b “${REALM}” -s one objectclass=* dn > ${TMPDIR}/groups.tmp

cat ${TMPDIR}/groups.tmp

echo

echo

printf “Enter Group Name To Check [just name, or part of name, not DN]: “

read GRP

echo

grep ${GRP} ${TMPDIR}/groups.tmp > ${TMPDIR}/groups2.tmp

mkdir -p ${GRP}

for LINE in `cat ${TMPDIR}/groups2.tmp`

do

########################################

## Find Members In Specified Group

########################################

FILENAME=`echo ${LINE} | awk ‘BEGIN { FS = “=”} { print substr($2, 1, length($2)-3) } ‘`

${ORACLE_HOME}/bin/ldapsearch -p ${OIDPORT} -h ${OIDHOST} -D cn=orcladmin -w ${OIDPWD} -b “${LINE}” -s sub objectclass=orclgroup > ${GRP}/${FILENAME}.ldif

cat ${GRP}/${FILENAME}.ldif | grep uniquemember | sed “s/uniquemember=//” | grep -v orcladmin >> ${TMPDIR}/members2check

done

uniq ${TMPDIR}/members2check ${TMPDIR}/memberlist.txt

awk ‘BEGIN { FS = “=”} { print substr($2, 1, length($2)-3) } ‘ ${TMPDIR}/memberlist.txt > ${TMPDIR}/memberlist.tmp

########################################

## Reconcile Unique Members In Users

########################################

for DN in `cat ${TMPDIR}/memberlist.tmp`

do

${ORACLE_HOME}/bin/ldapsearch -p ${OIDPORT} -h ${OIDHOST} -D cn=orcladmin -w ${OIDPWD} -b “cn=Users,${DEFSUB}” -v “cn=$DN*” > ${TMPDIR}/${DN}.temporary

done

#######################################

## Remove some of the unneeded data

#######################################

for FILE in `ls ${TMPDIR}/*.temporary`

do

awk ‘{ if (substr($0,1,5) != “authp” && substr($0,1,9) != “ldap_open” && substr($0,1,6) != “filter” && substr($0,1,9) != “returning” && substr($0,1,9) != “1 matches” ) { print $0;} ;}’ ${FILE} > ${FILE}.ldif

done

#######################################

## Move the data to the “keep” directory

#######################################

mkdir -p ${GRP}/users

mv ${TMPDIR}/*.ldif ${GRP}/users/

#######################################

## Cleanup as mama told you

#######################################

rm -rf $TMPDIR

====>Einde van het script.

Om nu b.v. het domein te veranderen moet dit veranderd worden in al die files (b.v. van OUD naar NIEUW):

for FILE in `ls *.ldif`; do sed ‘s/OUD/NIEUW/g’ $FILE > new/$FILE; done

Daarna moeten alle files nog ingelezen worden:

for FILE in `ls *.ldif`; do $ORACLE_HOME/bin/ldapadd -h localhost -p 389 -D cn=orcladmin -w wachtwoord -f $FILE >> massive.log 2>&1; done

De ldifs van de groepen hoeft op zich niets mee gedaan te worden, wellicht alleen het veranderen van het domein hierin. Let wel op dat deze groeps-ldifs er van uit gaan dat deze groepen nog niet aanwezig zijn in de nieuwe OID.