Outlook adreslerinin LDAP üzerine Taşınması

Başlatan BlackExplotioN, 11 Eylül 2010 - 02:56:33

« önceki - sonraki »

0 Üyeler ve 1 Ziyaretçi konuyu incelemekte.

BlackExplotioN

Sizlere LDAP konusunda bir bilgi vermeyeceğim. Sadece hedef
noktamız; outlook kullanan kullanıcıların ellerinde bulunan adresleri,
LDAP sunucu üzerine nasıl aktarabileceğimizdir. Belli başlı olarak
yapacağımız işlemler outlook adres defteri içinden tüm adresleri csv
dosya olarak export edeceğiz. Bu dosyayı daha sonra iconv ile utf8
formatına çevireceğiz. Adres bilgileri bulunan bu dosyayı daha
sonrasında ldif formatına çevireceğiz ve en sonunda LDAP sunucusu
içine bu bilgileri aktaracağız. Windows içinden aktarılacak csv
dosyasından önce sistem dilinizin contact bilgilerinde girilen dil ile
aynı olması gerekmektedir. Bunun anlamı ingilizce seçili bir sistemde
aktarılan dosyada Türkçe karakterler düzgün olarak gözükmeyecektir.
LDAP içine yerleştirme için bir schema kullanılması gerekmektedir.
Bunun mozillaorgperson scheması son derece uygun ancak buna
uygun script yazacak zaman bulamadığım için hazır olan bir scripti
kullandım bu script evolution schema sını kullanmaktadır. Bu
döküman içinde bulunan scriptlere ve ufak uygulamaları eğer
kopyalama sorunu yaşıyorsanız konsol altında pdftotext komutunu
kullanmanızı tavsiye ederim.
Contact bilgilerinin toplanması
Tüm adreslerin bir outlook içine toplanmasından sonra outlook
menüsü içinden File->import and export sekmesi tıklanır. Karşımıza
bu konuda bize yardım edecek bir sihirbaz çıkacaktır. Sihirbaz içinden
export to file sekmesi tıklanır ve ileri denir. comma seperetated
values(windows) tıklanır ve ileri denir. contacts seçilir ve ileri tıklanır
daha sonrasında sizin dosyanızı nereye kayıt edeceğini soracaktır. İlk
aşama tamamlanmış demektir. Bu aşama sonunda elimizde tüm
adreslerin olduğu virgül ile ayrılmış bir text dosya bulunmaktadır.
Adreslerin utf-8 yapılması
Bu amaç için iconv kullanıyoruz iso dan utf8 geçiş sağlıyoruz. Bu
işlemi sonraki aşama olan ldif çevirme işinden önce veya sonra
yapmanızda bir mahsur yoktur.
iconv f
iso88599
t
utf8
o
adres.txt contacts.ldif
Adres bilgilerinin ldif çevrilmesi
Bu amaç için yazılmış (tarafımdan değil nette bulduğum adresi ne
malesef bulamadım) olan bir python scripti kullanacağız. Bu aşama
önemli olan yer;
('dn', 'cn=%(First Name)s %(Middle Name)s %(Last Name)s%(Suffix)s,ou=idsscheer.
com.tr,dc=icc,dc=com'),
M.Ali VARDAR 2006 – Outlook adreslerinin LDAP üzerine taşınması
biçiminde olan satır üzerinde gerekli değişikliği yapmamız
gerekmektedir. Bu değişikliğin ne ifade ettiğini bilmiyorsanız LDAP
kurulumu ve kullanımı ile ilgli bilgilerininizi gözden geçirmelisiniz.
Scripti çalıştırmak için konsolda betiğin şu alanında kodlarda gerekli
değişikliği yapılması gerekemektedir.
if __name__ == '__main__':
converter = OutlookCsv2EvolutionLdif(
file('contacts.csv'),
file('contacts.ldif', "w")
Bu alanda giren ve çıkan dosya adlarını yazınız. Giren dosya contacts
csv dosyasıdır bu aşamadan sonra çıkacak olan dosya LDAP
sunucusun anlayacağı bir ldif formatlı dosya olacaktır.
aktar.py
/***************************************************************/
from csv import reader
from csv import DictReader
class OutlookCsv2EvolutionLdif:
headings = []
ldifFields = (
('dn', 'cn=%(First Name)s %(Middle Name)s %(Last Name)s%(Suffix)s,ou=idsscheer.
com.tr,dc=icc,dc=com'),
('objectClass', 'top'),
('objectClass', 'person'),
('objectClass', 'organizationalPerson'),
('objectClass', 'inetOrgPerson'),
('objectClass', 'evolutionPerson'),
('cn', '%(Title)s %(First Name)s %(Middle Name)s %(Last Name)s %(Suffix)s'),
('sn', '%(Last Name)s %(Suffix)s'),
('mail', '%(Email
Address)s'),
('mail', '%(Email
2 Address)s'),
('mail', '%(Email
3 Address)s'),
('anniversary', '%(Anniversary)s'),
('initials', '%(Initials)s'),
('birthDate', '%(Birthday)s'),
('assistantName', "%(Assistant's Name)s"),
('assistantPhone', "%(Assistant's Phone)s"),
('callbackPhone', '%(Callback)s'),
('carPhone', '%(Car Phone)s'),
('companyPhone', '%(Company Main Phone)s'),
('telephoneNumber', '%(Business Phone)s'),
('facsimileTelephoneNumber', '%(Business Fax)s'),
('homePhone', '%(Home Phone)s'),
('homeFax', '%(Home Fax)s'),
('mobile', '%(Mobile Phone)s'),
('pager', '%(Pager)s'),
('primaryPhone', '%(Primary Phone)s'),
('radio', '%(Radio Phone)s'),
('tty', '%(TTY/TDD Phone)s'),
('telex', '%(Telex)s'),
('otherPhone', '%(Other Phone)s'),
('otherFax', '%(Other Fax)s'),
('o', '%(Company)s'),
('ou', '%(Department)s'),
('title', '%(Job Title)s'),
('homePostalAddress', '%(Home Street)s$%(Home Street 2)s$%(Home Street 3)s$%(Home
M.Ali VARDAR 2006 – Outlook adreslerinin LDAP üzerine taşınması
City)s, %(Home State)s$%(Home Postal Code)s$%(Home Country)s'),
('postalAddress', '%(Business Street)s$%(Business Street 2)s$%(Business Street
3)s$%(Business City)s, %(Business State)s$%(Business Postal Code)s$%(Business Country)s'),
('otherPostalAddress', '%(Other Street)s$%(Other Street 2)s$%(Other Street
3)s$%(Other City)s, %(Other State)s$%(Other Postal Code)s$%(Other Country)s'),
('fileAs', '%(Last Name)s %(Suffix)s, %(First Name)s')
)
def __init__(self, inFile, outFile):
self.inFile = inFile
self.outFile = outFile
def convert(self):
out = self.outFile
headings = self.getHeadings()
records = DictReader(self.inFile, headings)
headerRow = records.next()
out.write("version: 1\n\n")
for record in records:
for (key, format) in self.ldifFields:
value = format % record
value = value.replace(" ", " ")
if value and value != '$$$, $$' and value != '0/0/00':
out.write("%s: %s\n" % (key, value % record))
out.write("\n")
out.close()
def getHeadings(self):
if not self.headings:
lines = reader(self.inFile)
self.headings = lines.next()
return self.headings
if __name__ == '__main__':
converter = OutlookCsv2EvolutionLdif(
file('contacts.csv'),
file('contacts.ldif', "w")
)
converter.convert()
/**********************************************************/
ldif dosyasının Ldap içine aktarımı
Elimizde bütün contact bilgilerinin olduğu bir text dosya ldif formatlı
olarak mevcut bu aşamada bu dosyayı ldap sunucu içine aktarıyoruz.
Bu işlemi gerçekleştirmeden önce slad.conf dosyası içine evolution
için düzenlemiş olan schema dosyasını import etmeliyiz. Daha güncel
sürümlerini nette bulabilirsiniz ben kendi kullandığım sürümü aşağıya
koyuyorum. Aşağıdaki yazıları evolutionperson. schema olarak kayıt
edelim ve diğer schema dosyalarının arasına kopyalayalım. Daha
sonra slapd.conf içinde diğer schema dosyalarının altına yolu ile
birlikte eklemeyi yapalım. Ldap sunucusunun tekrar başlatalım ve ldif
dosyasını aşağıdaki şekilde import edelim.
ldapadd x
D
cn=root,dc=ali,dc=com w
password f
list.ldif
burada ana dizin yapısı kurduğunuz ldap sunucu ile ilgilidir onu
M.Ali VARDAR 2006 – Outlook adreslerinin LDAP üzerine taşınması
düzenleyiniz. password alanına kendi ldap sunucu password yazınız.
Bu aşamadan sonra outlook içinden veya herhangi bir ldap destekli
mail client üzerinden arama yapmanız durumunda ortak adres
defterinden istediğiniz sonucu alabilirsiniz. Daha yeni sürüm çıktıkça
evolution schema larının yeni sürümlerini takip ederek
kullanabilirsiniz.
evoulutionperson.schema
/***************************************************************/
#
# Depends upon
# Definition of an X.500 Attribute Type and an Object Class to Hold
# Uniform Resource Identifiers (URIs) [RFC2079]
# (core.schema)
#
# A Summary of the X.500(96) User Schema for use with LDAPv3 [RFC2256]
# (core.schema)
#
# The COSINE and Internet X.500 Schema [RFC1274] (cosine.schema)
#
# The Internet Organizational Person Schema (inetorgperson)
#
# OIDs are broken up into the following:
# 1.3.6.1.4.1.8506.1.?
# .1 Syntaxes
# .2 Attributes
# .3 Objectclasses
# primaryPhone
attributetype ( 1.3.6.1.4.1.8506.1.2.1
NAME 'primaryPhone'
DESC 'preferred phone number used to contact a person'
EQUALITY caseIgnoreMatch
SUBSTR caseIgnoreSubstringsMatch
SYNTAX 1.3.6.1.4.1.1466.115.121.1.15
SINGLEVALUE
)
# carPhone
attributetype ( 1.3.6.1.4.1.8506.1.2.2
NAME 'carPhone'
DESC 'car phone telephone number of the person'
EQUALITY telephoneNumberMatch
SUBSTR telephoneNumberSubstringsMatch
SYNTAX 1.3.6.1.4.1.1466.115.121.1.50
SINGLEVALUE
)
attributetype ( 1.3.6.1.4.1.8506.1.2.3
NAME ( 'homeFacsimileTelephoneNumber' 'homeFax' )
SYNTAX 1.3.6.1.4.1.1466.115.121.1.22 )
attributetype ( 1.3.6.1.4.1.8506.1.2.4
NAME 'otherPhone'
EQUALITY telephoneNumberMatch
SUBSTR telephoneNumberSubstringsMatch
SYNTAX 1.3.6.1.4.1.1466.115.121.1.50 )
attributetype ( 1.3.6.1.4.1.8506.1.2.5
NAME 'businessRole'
EQUALITY caseIgnoreMatch
SUBSTR caseIgnoreSubstringsMatch
SYNTAX 1.3.6.1.4.1.1466.115.121.1.15 )
M.Ali VARDAR 2006 – Outlook adreslerinin LDAP üzerine taşınması
attributetype ( 1.3.6.1.4.1.8506.1.2.6
NAME 'managerName'
SUP name )
attributetype ( 1.3.6.1.4.1.8506.1.2.7
NAME 'assistantName'
SUP name )
# spouseName
# single valued (/me smirks)
attributetype ( 1.3.6.1.4.1.8506.1.2.8
NAME 'spouseName'
SUP name
SINGLEVALUE
)
attributetype ( 1.3.6.1.4.1.8506.1.2.9
NAME 'otherPostalAddress'
EQUALITY caseIgnoreListMatch
SUBSTR caseIgnoreListSubstringsMatch
SYNTAX 1.3.6.1.4.1.1466.115.121.1.41 )
attributetype ( 1.3.6.1.4.1.8506.1.2.10
NAME ( 'mailer' 'mua' )
EQUALITY caseIgnoreMatch
SUBSTR caseIgnoreSubstringsMatch
SYNTAX 1.3.6.1.4.1.1466.115.121.1.15{32} )
attributetype ( 1.3.6.1.4.1.8506.1.2.11
NAME ( 'birthDate' 'dob' )
EQUALITY caseIgnoreMatch
SUBSTR caseIgnoreSubstringsMatch
SYNTAX 1.3.6.1.4.1.1466.115.121.1.15{128} )
attributetype ( 1.3.6.1.4.1.8506.1.2.12
NAME 'anniversary'
EQUALITY caseIgnoreMatch
SUBSTR caseIgnoreSubstringsMatch
SYNTAX 1.3.6.1.4.1.1466.115.121.1.15{128} )
attributetype ( 1.3.6.1.4.1.8506.1.2.13
NAME 'note'
EQUALITY caseIgnoreMatch
SUBSTR caseIgnoreSubstringsMatch
SYNTAX 1.3.6.1.4.1.1466.115.121.1.15{1024} )
attributetype ( 1.3.6.1.4.1.8506.1.2.14
NAME 'evolutionArbitrary'
EQUALITY caseIgnoreMatch
SUBSTR caseIgnoreSubstringsMatch
SYNTAX 1.3.6.1.4.1.1466.115.121.1.15{4096} )
)
attributetype ( 1.3.6.1.4.1.8506.1.2.15
NAME 'fileAs'
SUP name )
attributetype ( 1.3.6.1.4.1.8506.1.2.16
NAME 'assistantPhone'
EQUALITY telephoneNumberMatch
SUBSTR telephoneNumberSubstringsMatch
SYNTAX 1.3.6.1.4.1.1466.115.121.1.50 )
attributetype ( 1.3.6.1.4.1.8506.1.2.17
NAME 'companyPhone'
M.Ali VARDAR 2006 – Outlook adreslerinin LDAP üzerine taşınması
EQUALITY telephoneNumberMatch
SUBSTR telephoneNumberSubstringsMatch
SYNTAX 1.3.6.1.4.1.1466.115.121.1.50 )
attributetype ( 1.3.6.1.4.1.8506.1.2.18
NAME 'callbackPhone'
EQUALITY telephoneNumberMatch
SUBSTR telephoneNumberSubstringsMatch
SYNTAX 1.3.6.1.4.1.1466.115.121.1.50 )
attributetype ( 1.3.6.1.4.1.8506.1.2.19
NAME ( 'otherFacsimileTelephoneNumber' 'otherFax' )
SYNTAX 1.3.6.1.4.1.1466.115.121.1.22 )
attributetype ( 1.3.6.1.4.1.8506.1.2.20
NAME 'radio'
EQUALITY telephoneNumberMatch
SUBSTR telephoneNumberSubstringsMatch
SYNTAX 1.3.6.1.4.1.1466.115.121.1.50 )
attributetype ( 1.3.6.1.4.1.8506.1.2.21
NAME 'telex'
EQUALITY telephoneNumberMatch
SUBSTR telephoneNumberSubstringsMatch
SYNTAX 1.3.6.1.4.1.1466.115.121.1.50 )
attributetype ( 1.3.6.1.4.1.8506.1.2.22
NAME 'tty'
EQUALITY telephoneNumberMatch
SUBSTR telephoneNumberSubstringsMatch
SYNTAX 1.3.6.1.4.1.1466.115.121.1.50 )
# deprecated use
the multivalued category
attributetype ( 1.3.6.1.4.1.8506.1.2.23
NAME 'categories'
EQUALITY caseIgnoreMatch
SUBSTR caseIgnoreSubstringsMatch
SYNTAX 1.3.6.1.4.1.1466.115.121.1.15{4096} )
attributetype ( 1.3.6.1.4.1.8506.1.2.24
NAME 'contact'
EQUALITY distinguishedNameMatch
SYNTAX 1.3.6.1.4.1.1466.115.121.1.12 )
attributetype ( 1.3.6.1.4.1.8506.1.2.25
NAME 'listName'
SUP name
SINGLEVALUE
)
# deprecated use
calEntry and its attributes from RFC 2739
attributetype ( 1.3.6.1.4.1.8506.1.2.26
NAME 'calendarURI'
EQUALITY caseExactIA5Match
SYNTAX 1.3.6.1.4.1.1466.115.121.1.26
SINGLEVALUE
)
# deprecated use
calEntry and its attributes from RFC 2739
attributetype ( 1.3.6.1.4.1.8506.1.2.27
NAME 'freeBusyURI'
EQUALITY caseExactIA5Match
SYNTAX 1.3.6.1.4.1.1466.115.121.1.26
SINGLEVALUE
)
attributetype ( 1.3.6.1.4.1.8506.1.2.28
NAME 'category'
M.Ali VARDAR 2006 – Outlook adreslerinin LDAP üzerine taşınması
EQUALITY caseIgnoreMatch
SUBSTR caseIgnoreSubstringsMatch
SYNTAX 1.3.6.1.4.1.1466.115.121.1.15{4096} )
# evolutionPerson
objectclass ( 1.3.6.1.4.1.8506.1.3.1
NAME 'evolutionPerson'
DESC 'Objectclass geared to Evolution Usage'
SUP inetOrgPerson
STRUCTURAL
MAY (
fileAs $ primaryPhone $ carPhone $ homeFacsimileTelephoneNumber $
otherPhone $ businessRole $ managerName $ assistantName $ assistantPhone $
otherPostalAddress $ mailer $ birthDate $ anniversary $ spouseName $
note $ companyPhone $ callbackPhone $ otherFacsimileTelephoneNumber $
radio $ telex $ tty $ categories $ category $ calendarURI $ freeBusyURI )
)
# evolutionPersonList
objectclass ( 1.3.6.1.4.1.8506.1.3.2
NAME 'evolutionPersonList'
DESC 'Objectclass geared to Evolution Contact Lists'
SUP top
STRUCTURAL
MUST (
listName )
MAY (
mail $ contact )
)
/***************************************************************/
Sonuç
Tüm şirket içinde bulunan birden fazla alanda bulunan adreslerin tek
alanda bulunması ve hızlı bir şekilde erişebilme şansına sahip
olacaksınız ayrıca phpldapadmin ile adreslerinizi düzenleyebilir ve
silebilir, yedek alabilirsiniz.
Kaynaklar
http://lists.ximian.com/pipermail/evolution/2004October/
039709.html