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.
Leave A Comment