Создание ldapsearch и vcard - PullRequest
       0

Создание ldapsearch и vcard

0 голосов
/ 09 июня 2010

Я использую openldap на Mac OS X Server 10.6 и мне нужно сгенерировать vcard для всех пользователей в данной группе.С помощью ldapsearch я могу перечислить все memberUid для всех пользователей в этой группе.Я нашел Perl-скрипт (Advanced LDAP Search или ALS), который был написан кем-то, кто легко сгенерирует vcard.ALS можно найти здесь http://www.ldapman.org/tools/als.gz

Так что мне нужно сделать, это создать скрипт-обертку (на python или perl), который будет эффективно проходить через memberUid и запускать команду ALS для создания vcardи добавить его в файл.

Эта команда предоставляет memberUid's:

ldapsearch -x -b 'dc=ldap,dc=server,dc=com' '(cn=testgroup)'

Затем при запуске ALS выдается vcard:

als -b dc=ldap,dc=server,dc=com -V uid=aaronh > vcardlist.vcf

Если это проще сделать с помощью Perl, так как ALS уже используетэто было бы хорошо.Я сделал больше работы в Python, но я открыт для предложений.

Заранее спасибо, Аарон

РЕДАКТИРОВАТЬ:

Вот ссылка на Net: код LDAP, который у меня есть на сегодняшний день.До сих пор он опускает записи ldap со всей информацией о пользователях.Чего мне не хватает, так это как получить только UID для каждого пользователя и затем вставить его в ALS.

http://www.queencitytech.com/net-ldap

Вот пример записи (после запуска кода по вышеуказанной ссылке):

#-------------------------------
DN: uid=aaronh,cn=users,dc=ldap,dc=server,dc=com
  altSecurityIdentities : Kerberos:aaronh@LDAP.SERVER.COM
  apple-generateduid : F0F9DA73-70B3-47EB-BD25-FE4139E16942
  apple-imhandle : Jabber:aaronh@ichat.server.com
  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 root@ldap.server.com:192.168.1.175;Kerberosv5;0x4c11231147c72b59000001f800001663;aaronh@LDAP.SERVER.COM;LDAP.SERVER.COM;1024 35 131057002239213764263627099108547501925287731311742942286788930775556419648865483768960345576253082450228562208107642206135992876630494830143899597135936566841409094870100055573569425410665510365545238751677692308677943427807426637133913499488233527734757673201849965347880843479632671824597968768822920700439 root@ldap.server.com: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 : ********
#-------------------------------

1 Ответ

1 голос
/ 10 июня 2010

Моим языком выбора будет Perl - но только потому, что я выполнял аналогичные операции с использованием Perl и LDAP.

Если я правильно помню, эта команда ldapsearch выдаст вам полную запись LDIF для каждого идентификатора пользователя в группе тестирования cn. Если это так, то вам нужно будет немного его почистить, прежде чем он будет готов ко всей части. Хотя это определенно не самое элегантное решение, быстрый и грязный метод состоит в использовании обратных галочек и пропуска вывода команды через grep. Это вернет хороший список всех memberUids. Оттуда это просто простой цикл foreach, и все готово. Без какого-либо тестирования или точного знания того, как выглядит ваш вывод LDAP, я бы пошел примерно так:

#!/usr/bin/perl

# should return a list of "memberUid: name" entries
@uids = `ldapsearch -x -b 'cn=testgroup,cn=groups,dc=ldap,dc=server,dc=com' | grep memberUid:`;

foreach (@uids) {
   $_ =~ s/memberUid: //;  # get rid of the "uid: " part, leaving just the name
   chomp $_;         # get rid of the pesky newline
   system "als -b \"dc=ldap,dc=server,dc=com\" -V uid=$_ >> vcardlist.vcf";
}

Как я уже сказал, я не проверял это, и я не совсем уверен, как выглядит вывод вашего ldapsearch, поэтому вам, возможно, придется немного его настроить, чтобы он точно соответствовал вашим потребностям. Этого должно быть достаточно, чтобы вы продолжили.

Если у кого-то есть идея получше, я бы тоже хотел ее услышать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...