我的一个Mac启动脚本需要从AD中获取一个属性,这个属性不是我用内置工具dscl查看的,而这个工具几乎局限于用户,组和计算机search。 通常我只是做一个原始的LDAP查询,但我需要这样的情况发生之前有一个用户login提供凭据。 内置dscl显然可以从AD中获取数据,而无需用户进行身份validation,所以我假设在计算机帐户上下文中必须有一种方法。 不幸的是,我的googlefu到目前为止已经完全失败了。
我想我会回答我自己的问题。 为了我的需要,它是在Perl中,但应该是非常明显的如何在一个直接的shell脚本中做同样的事情。 我只需要从ActiveDirectory.plist中获取机器证书
sub get_LDAPEntries { my ($LDAPServer, $LDAPPort, $LDAPsearchbase, $LDAPfilter) = @_; my $kerbID = `/usr/libexec/PlistBuddy /Library/Preferences/DirectoryService/ActiveDirectory.plist -c "print :'AD Computer Kerberos ID'"`; chomp $kerbID; my $password = `/usr/libexec/PlistBuddy /Library/Preferences/DirectoryService/ActiveDirectory.plist -c "print :'AD Computer Password'"`; chomp $password; my $LDAPSession = Net::LDAP->new($LDAPServer, port=>$LDAPPort); $LDAPSession->bind($kerbID, password => $password) or die("Could not connect to LDAP server."); my $results = $LDAPSession->search(base=>$LDAPsearchbase,filter=>$LDAPfilter); $results->code && die "There was an error in the LDAP search: " . $results->error; $LDAPSession->unbind; my @LDAPEntries = $results->entries; return @LDAPEntries; }
更新:这只适用于雪豹(10.6)。 Lion(10.7)将AD密码存储在钥匙串中,您将需要使用“安全”命令行实用程序来获取它……这是坦率地感到疼痛,因为密码输出到标准错误,而其余的查询被发送到标准输出。 我要把狮子会的支持视为超出范围: – P