Since my talk with Robin on Thursday regarding the autogenerated userinfo.xml, I finally found some time today to get all the info’s I need out of userinfo.xml.
Since I don’t really want to manually enter all those mail addresses from userinfo into LDAP manually, I figured sed might be my best friend. *BUT* sed ain’t easy .. But thanks to Fabian and Gilles, I learned something new about sed today ..
Basically I searched for a way to transform userinfo.xml into a datafile for ldapedit.
As most of you know, userinfo.xml would look like this:
1 2 3 4 5 6 7 8 9 |
Christian Heim 0x9A9F68E6 phreak@gentoo.org 06 August 2005 vserver, openvz, kernel Germany, Stralsund |
So the first step would be to simply use egrep on userinfo.xml to filter only the things I needed ..
1 2 |
celsius roll-call [0] $ egrep "(username=|<email |)" userinfo.xml |
That looks more like a processable list to me. Now I only needed to convert the into dn, the into mail and be done with it.
This is what I applied on top of the above filter:
1 2 3 4 5 |
celsius roll-call [0] $ egrep "(username=|<email |)" userinfo.xml | sed -e "s,.*$,,ou=devs,dc=gentoo,dc=orgnadd: mail," -e 's,.*,mail: ,' -e "s,,," -e "s, ,," |
And that’s it, I just need to check the dn’s for all the users, and when I’m done with that, finito!
Hope this isn’t a repeat; my first attempt to post failed.
It shouldn’t be necessary to combine grep and sed this way. sed can do the grep part, which will save you a pipe and some time and effort if you do this command over a large file or group of files.
I might have this somewhat wrong, but you could put those commands in an external file called userinfo.sed, and invoke it with the -f flag; something like:
userinfo.sed:
,(username=|),{
s/.*$/,ou=devs,dc=gentoo,dc=orgnadd: mail/
s/.*/mail: /
,,d
, ,d
}p
sed -nf userinfo.sed userinfo.xml
On the other hand, sed is not usually the best choice for modifying xml. Far from it, in fact. XSLT was built for mangling xml and does it much more consistently and reliably than sed ever will. I’m not prepared to give an example of doing this transformation with XSLT at the moment, but I guarantee it’s the right way to go here.
Mmkay, try this xslt: