Active Directory’de GAL Oluşturmak

22 Mayıs 2009

exchange2007logoNokia E71 ve Mail for Exchange kullanmaya başladığımdan beri en büyük sıkıntım şirketin müşteri bilgileri veritabanını sorgulayamamak olmuştur. Bu sorunu aşmak için MS-Exchange’in Active Directory’den ürettiği Global Address List’i kullanmak gerekiyordu. Ancak herkese bir account açamayacağımıza göre bir çözüm bulmak gerekiyordu. Çözümü Contacts isimli bir organizational unit tanımlayarak içini contactlarla doldurmakta buldum.

Şirketin mevcut CRM veritabanından tüm müşteri bilgilerini CSV formatında export ettim. Daha sonra örnek bir contact oluşturarak linux’ten ldapsearch ile bu contact’taki hangi alanın hangi attribute’a karşılık geldiğini tespit ettim. Aşağıda yazmış olduğum script ile de CSV formatındaki ilgili kolona karşılık her bir veriyi ldif formatına dönüştürdüm.

#!/bin/bash

# iletisim_bilgileri.csv dosyasının kolon sırası aşağıdaki gibi olmalı
# first_name,last_name,phone_mobile,phone_work,phone_other,phone_fax,email,company

IFS="
"

for i in `cat iletisim_bilgileri.csv`
do

givenName=`echo $i | cut -d, -f1 | sed "s/^ //g" | sed "s/ $//g"`
sn=`echo $i | cut -d, -f2 | sed "s/^ //g" | sed "s/ $//g"`
pmobile=`echo $i | cut -d, -f3`
pwork=`echo $i | cut -d, -f4`
pfax=`echo $i | cut -d, -f6`
email=`echo $i | cut -d, -f7`
company=`echo $i | cut -d, -f8`
nickname=`echo ${givenName} ${sn} | sed "s/ //g" | sed "y/ğüşıöçĞÜŞİÖÇ/gusiocGUSIOC/" | sed "s/[^a-zA-Z0-9]//g"`
givenName2=`echo ${givenName} | sed "s/ //g" | sed "y/ğüşıöçĞÜŞİÖÇ/gusiocGUSIOC/" | sed "s/[^a-zA-Z0-9]//g"`
sn2=`echo ${sn} | sed "s/ //g" | sed "y/ğüşıöçĞÜŞİÖÇ/gusiocGUSIOC/" | sed "s/[^a-zA-Z0-9]//g"`

echo
echo
echo "dn: CN=$givenName $sn,OU=Contacts,DC=firma,DC=com,DC=tr"
echo "objectClass: top"
echo "objectClass: person"
echo "objectClass: organizationalPerson"
echo "objectClass: contact"
echo "cn: $givenName $sn"
if [ "${sn}x" != "x" ]
then
    echo "sn: $sn"
fi
echo "givenName: $givenName"
echo "distinguishedName: CN=$givenName $sn,OU=Contacts,DC=firma,DC=com,DC=tr"
echo "instanceType: 4"
echo "displayName: $givenName $sn"
echo "proxyAddresses: X400:c=US;a= ;p=Firma;o=Exchange;s=${sn2};g=${givenName2};"
echo "proxyAddresses: SMTP:$email"
echo "targetAddress: SMTP:$email"
echo "mailNickname: $nickname"
echo "mAPIRecipient: FALSE"
echo "name: $givenName $sn"
echo "showInAddressBook: CN=Default Global Address List,CN=All Global Address Lists,CN=Address Lists Container,CN=Firma,CN=Microsoft Exchange,CN=Services,CN=Configuration,DC=firma,DC=com,DC=tr"
echo "showInAddressBook: CN=All Contacts,CN=All Address Lists,CN=Address Lists Container,CN=Firma,CN=Microsoft Exchange,CN=Services,CN=Configuration,DC=firma,DC=com,DC=tr"
echo "legacyExchangeDN: /o=Firma/ou=First Administrative Group/cn=Recipients/cn=$nickname"
echo "objectCategory: CN=Person,CN=Schema,CN=Configuration,DC=firma,DC=com,DC=tr"
echo "textEncodedORAddress: c=US;a= ;p=Firma;o=Exchange;s=${sn2};g=${givenName2};"
if [ "${company}x" != "x" ]
then
    echo "company: $company"
fi
if [ "${email}x" != "x" ]
then
    echo "mail: $email"
fi
if [ "${pwork}x" != "x" ]
then
    echo "telephoneNumber: $pwork"
fi

if [ "${pmobile}x" != "x" ]
then
    echo "mobile: $pmobile"
fi

echo "msExchALObjectVersion: 23"
echo "msExchPoliciesIncluded: {CBEFB3AB-CFC6-4947-84B8-E2726B473828},{26491CFC-9E50-4857-861B-0CB8DF22B5D7}"
echo
echo

done

Yukarıdaki script’i aşağıdaki gibi kullanarak ldif’i üretebiliriz.

# ./ldif_uret.sh > contacts.ldif

Daha sonra bu ldif’i active directory’ye Linux üzerinden aşağıdaki komutla import edebiliriz.

# ldapadd -x -h 192.168.36.24 -D "cn=Administrator,dc=firma,dc=com,dc=tr" -W -f contacts.ldif

Bu yöntemle Contacts OU altında 1500’ün üzerinde adres defteri bilgisini bir dakikanın altında bir sürede import edebildim. Artık hem Outlook ile hem de Nokia E71 üzerindeki Mail for Exchange ile gelen Comp Directory uygulaması ile telefon ve e-posta bilgilerini sorgulayabilir oldum.

Etiketler: , , , , , , , , , ,

Yorum Yapın