I had to migrate users from an Active Directory/Exchange combo to a SME server for temporary disaster recovery event. Here’s the script I wrote to create the export and recreate the users and their aliases in the SME server.
The export was done before the disaster of course :)
#!/bin/bash
#ldapsearch -x -b "dc=customer,dc=com" -h 1.2.3.4 -D "domain\user" -W "(objectclass=user)" > activedirectory.ldiff
File="activedirectory.ldiff"
#reset files content
echo > sme.users
echo > sme.aliases
cat "$File" | while read line
do
#concatenate new line to existing info
UserInfo="$UserInfo
$line"
#treat all info if user is finished
if $(echo -e "$line" | grep -q '^$')
then
echo User info finished
#treat only users with mail address
if $(echo "$UserInfo" | grep -q '^mail:')
then
#recover data
UserName=$(echo "$UserInfo" | grep
'^sAMAccountName:' | sed -e 's/sAMAccountName: //' | tr '\[A-Z\]' '\[a-z\]')
UserFirstName=$(echo "$UserInfo" | grep '^givenName:' | sed -e 's/givenName: //')
UserLastName=$(echo "$UserInfo" | grep '^sn:' | sed -e 's/sn: //')
UserMail=$(echo "$UserInfo" | grep '^mail:' | awk '{print $2}' | tr '\[A-Z\]' '\[a-z\]')
UserMailAliases=$(echo "$UserInfo" | grep
'^proxyAddresses: smtp:' | sed -e 's/^proxyAddresses:
smtp:\(.\*\)@.\*$/\1/' | sort -u | grep -vi "^${UserName}$" | tr '\n' '|' |
tr '\[A-Z\]' '\[a-z\]')
Tmp=$(dd if=/dev/urandom | tr -dc \_A-Z-a-z-0-9 | head -c 4)
UserPassword=$(echo "${UserName}${Tmp}" | tr '\[A-Z\]' '\[a-z\]')
#print user info
echo "$UserName |$UserFirstName |$UserLastName |$UserPassword" >> sme.users
#print aliases if any
if \[ $(echo "$UserMailAliases" | wc -c) -gt 2 \]
then
echo "$UserName |$UserMailAliases" | sed -e 's/^\(.\*\)|$/\1/' >> sme.aliases
fi
#cleanup some shit
unset UserName
unset UserFirstName
unset UserLastName
unset UserMail
unset UserMailAliases
unset Tmp
unset UserPassword
fi
unset UserInfo
fi
done
You can then import all the users and their aliases with the following commands:
lat-users -a -i sme.users
lat-pseudonyms -a -i sme.aliases