So over the weekend I had an interesting opportunity to bring the power of ILM to bear on a GroupWise to Exchange migration. The first hurdle was to get the data out of GroupWise and into ILM for processing while filtering for the objectTypes I cared about. The idea was to push 1100+ distribution lists into AD complete with memberships. This is pretty close to what I used over the weekend to have LDIFDE export the contents of an LDAP-enabled GroupWise directory:
ldifde -f export.ldif -s -r "(|(objectClass=organizationalUnit)(objectClass=inetOrgPerson)(objectClass=groupWiseDistributionList))" -p Subtree -l "o,ou,objectClass,member,cn,dn,nGWBlindCopyMember,nGWCarbonCopyMember,description,uid,mail,nGWVisibility,fullname,emailAddress" -a "" *
Now I know squat about GroupWise and whether or not LDAP interfaces to it are a big deal and luckily that is not what I am here to talk about. You see, after much wrangling with SoftTerra's LDAP Browser and not being able to filter attributes on the LDIF export, I decided to tackle something I knew I could control the attribute filter for - LDIFDE. The only issue here was that this particular instance of GroupWise LDAP only supported anonymous bind and I couldn't find anything that talked about doing anonymous bind using LDIFDE.
"Can't be done," you say? Bah, check out the innocuous -a "" * at the end of that command line. It performs an anonymous bind!
"I knew that," you say? Gee thanks, how about telling the rest of us?
"Hey, use the OpenLDAP XMA," you say? Sure, but this was supposed to be one of those "I'll knock this out in few hours deals" and LDIF was going to be faster in my mind. Plus I was stubborn and committed to LDIF.
"How did it go," you ask? After the typical complement of fixing mangled CNs, displayNames, and DNs, and having the duplicate samAccountNames I generated fixed in the source I'd say it went rather well. At least my blog-term memory now has a handy coupla' filters and a dandy new method for binding anonymously.