09 Nisan 2007

LDAP, finger, finger-ldap ipucu

Sistemdeki kullanıcıları LDAP veritabanında tutuyorsanız, debian depolarındaki "finger" paketinden çıkan finger komutunun yavaşlığı dikkatinizi çekmiştir. Bunun sebebi finger komutunun bütün kullanıcıların listesini alıp bu liste üzerinde arama yapması, yani her aramada bütün LDAP veritabanını çekiyor. Yine depolarda yer alan finger-ldap bu verimsizliği çözmek için yazılmış, istenen bilgileri verimli çalışan ldap aramalarıyla getirdikten sonra görüntülemesi için klasik finger'a veriyor. Çalıştırmayı ilk denediğimde aramayı düzgün yapmadı, finger-ldap'ın koduna baktığımda LDAP üzerindeki "cn" alanlarında arama yapmaya çalıştığını gördüm. Aşağıdaki gibi iki kullanıcım var
  • uid: gokdeniz; cn: Gokdeniz KARADAG; gecos: Gokdeniz KARADAG
  • uid: e1347590; cn: e1347590; gecos: GOKDENiZ KARADAG
"finger karadag" sadece ilkini gösteriyor. Kullanıcılar fi tarihinde NIS+'tan LDAP'a taşınırken hepsinin cn alanları düzgün olmamış, ancak hepsinin "gecos" alanları düzgün. finger-ldap'a "cn" yerine "gecos" alanlarına bakmasını söylemek için /etc/libnss-ldap.conf dosyasında aşağıdaki gibi bir ayar yapıyoruz.
nss_map_attribute cn gecos
Bunu yaptıktan sonra mutlu mesut finger çekebiliyoruz.
ENGLISH VERSION
If you use LDAP databases for users, you should have noticed the slowness of finger command from debian package "finger". This is because finger command gets the list of all users from LDAP for every finger search. finger-ldap is meant to solve this inefficency by making an efficent ldap search first, then handing the results to traditional finger commant for displaying. My first try with finger-ldap failed, the search was incomplete. When I looked at finger-ldap's code, I saw that that it performed LDAP search over "cn" field. I have two users;
  • uid: gokdeniz; cn: Gokdeniz KARADAG; gecos: Gokdeniz KARADAG
  • uid: e1347590; cn: e1347590; gecos: GOKDENiZ KARADAG
"finger karadag" shows only the first one. When users were migrated from NIS+ to LDAP, not all of them got correct "cn" fields. But they all have correct "gecos" fields. To tell finger-ldap to search "gecos" fields instead of "cn" fields, you should add the following line to /etc/libnss-ldap.conf file.
nss_map_attribute cn gecos
After this, we can successfully finger users.

Hiç yorum yok: