J'utilise openldap sous Mac OS X Server 10.6 et j'ai besoin de générer une vcard pour tous les utilisateurs d'un groupe donné. En utilisant ldapsearch, je peux lister tous les membres de tous les utilisateurs de ce groupe. J'ai trouvé un script perl (Advanced LDAP Search ou ALS) qui a été écrit par quelqu'un qui va générer la vcard facilement. ALS peut être trouvé ici http://www.ldapman.org/tools/als.gzCréation de ldapsearch et vcard
Donc ce que j'ai besoin de faire est de créer un script wrapper (en python ou perl) qui va effectivement boucler à travers les memberUid et exécuter la commande ALS pour créer la vcard et l'ajouter au fichier.
Cette commande fournit les memberUid de:
ldapsearch -x -b 'dc=ldap,dc=server,dc=com' '(cn=testgroup)'
ensuite en cours d'exécution SLA donne vcard:
als -b dc=ldap,dc=server,dc=com -V uid=aaronh > vcardlist.vcf
S'il est plus facile de le faire en utilisant Perl puisque la SLA utilise déjà ce qui serait bien. J'ai fait plus de travail en python mais je suis ouvert aux suggestions.
Merci à l'avance, Aaron
EDIT:
Voici un lien vers le Net: code LDAP que je dois à ce jour. Jusqu'à présent, il supprime les entrées ldap avec toutes les informations utilisateur. Ce qui me manque est comment capturer juste l'UID pour chaque utilisateur et puis le pousser dans la SLA.
http://www.queencitytech.com/net-ldap
Voici un exemple d'entrée (après l'exécution du code à partir du lien ci-dessus):
#-------------------------------
DN: uid=aaronh,cn=users,dc=ldap,dc=server,dc=com
altSecurityIdentities : Kerberos:[email protected]
apple-generateduid : F0F9DA73-70B3-47EB-BD25-FE4139E16942
apple-imhandle : Jabber:[email protected]
apple-mcxflags : <?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>simultaneous_login_enabled</key>
<true/>
</dict>
</plist>
authAuthority : ;ApplePasswordServer;0x4c11231147c72b59000001f800001663,1024 35 131057002239213764263627099108547501925287731311742942286788930775556419648865483768960345576253082450228562208107642206135992876630494830143899597135936566841409094870100055573569425410665510365545238751677692308677943427807426637133913499488233527734757673201849965347880843479632671824597968768822920700439 [email protected]:192.168.1.175;Kerberosv5;0x4c11231147c72b59000001f800001663;[email protected];LDAP.SERVER.COM;1024 35 131057002239213764263627099108547501925287731311742942286788930775556419648865483768960345576253082450228562208107642206135992876630494830143899597135936566841409094870100055573569425410665510365545238751677692308677943427807426637133913499488233527734757673201849965347880843479632671824597968768822920700439 [email protected]:192.168.1.170
cn : Aaron Hoffman
gidNumber : 20
givenName : Aaron
homeDirectory : 99
loginShell : /bin/bash
objectClass : inetOrgPersonposixAccountshadowAccountapple-userextensibleObjectorganizationalPersontopperson
sn : Hoffman
uid : aaronh
uidNumber : 2643
userPassword : ********
#-------------------------------
On dirait que ça devrait marcher pour moi. Je n'ai pas utilisé LDAP depuis des années, mais quand je l'ai fait, j'ai utilisé la bibliothèque Net :: LDAP pure-Perl. Bien que le noyau du traitement LDAP soit dans ce script als externe de toute façon, il ne serait pas vraiment utile ici, mais pourrait être utilisé pour remplacer l'invocation de ldapsearch. – araqnid
Oui, vous avez absolument raison. Net :: LDAP pourrait certainement être utilisé ici pour obtenir les UID, mais il faudrait beaucoup plus de temps et d'effort pour travailler - bien plus, je pense, que l'OP voudrait dépenser pour un script d'utilisation unique quand ldapsearch est facilement accessible disponible. –
Merci pour l'aide avec ceci. J'avais besoin de faire quelques changements. Quand j'ai couru ldapsearch, il sort chaque uid comme "memberUid". En outre, als n'a pas pu être trouvé, donc je devais lui dire d'utiliser Perl. Maintenant, le fichier vcardlist.vcf produit le résultat, mais le fichier ne semble avoir que la vcard testgroup ainsi qu'un autre groupe dont tous les utilisateurs font également partie. Des idées pour lesquelles ça ferait ça? – Aaron