ldapsearch和vcard创建

2024-10-01 02:34:52 发布

您现在位置:Python中文网/ 问答频道 /正文

我在MacOSX服务器10.6上使用openldap,需要为给定组中的所有用户生成vcard。通过使用ldapsearch,我可以列出该组中所有用户的memberUid。我发现了一个perl脚本(高级LDAP Search或ALS),它是由某人编写的,可以轻松生成vcard。ALS可以在这里找到http://www.ldapman.org/tools/als.gz

所以我需要做的是创建一个包装器脚本(用python或perl语言),它将有效地循环memberUid并运行ALS命令来创建vcard并将其附加到文件中。在

此命令提供memberUid的:

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

然后运行ALS会给vcard:

^{pr2}$

如果使用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 : ********
#-------------------------------

Tags: 用户comhttpappleserverwwwdccn
1条回答
网友
1楼 · 发布于 2024-10-01 02:34:52

我选择的语言是Perl—但这仅仅是因为我使用Perl和LDAP完成了类似的操作。在

如果我没记错的话,ldapsearch命令将为testgroupcn中的每个uid提供完整的LDIF条目。如果你需要清理的话,那就先把它清理干净。虽然这绝对不是最优雅的解决方案,但一个快速而肮脏的方法是使用反勾号并通过grep运行命令的输出。这将返回所有memberUID的良好列表。从那里它只是一个简单的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的输出是什么样子的,所以您可能需要稍微调整一下以满足您的具体需求。那应该足够让你走了。在

如果有人有更好的主意,我也想听听。在

相关问题 更多 >