我的公司和其他人一樣,需要不時重置密碼。這對安全性來說都很好,但我想探索通過腳本重置它的挑戰(特別是因爲我們不能使用我們以前的25個密碼; Perl更快地通過列表循環瀏覽兩個列表比我的手指深)。如何從Perl重置我的LDAP密碼?
我想使用Perl和Win32 :: OLE的LDAP連接器來重置我的密碼。我跟着一兩個例子在線,並有簡要:
use strict;
use Win32::OLE;
my $dn = 'cn=name,dc=corp,dc=com';
my $ldap = Win32::OLE->GetObject('LDAP:');
my $ldap_user = $ldap->OpenDSObject('LDAP://' . $dn,'username','password',1);
$ldap_user->SetPassword('mySw337NewPassword');
而且我得到了我的煩惱是:
Win32::OLE(0.1707) error 0x80070005: "Access is denied"
in METHOD/PROPERTYGET "SetPassword" at pw.change.pl line 8
這是不是就是可以被有效?我找到Net::LDAP::Extension::SetPassword
模塊,但沒有骰子。
謝謝!
更新萊昂(最大,你是下一個):
你是正確的,我應該更好地規定。我嘗試Win32::OLE
,失敗,然後單獨嘗試Net::LDAP::Extension::SetPassword
,失敗更加困難。
至於我的服務器:我不確定,我不是LDAP傢伙:)通過運行->root_dse->get_value('supportedExtension')
我可以看到setPassword OID
沒有設置,所以也許它不應該是。
最後的道具barneyton!
最終的解決方案:
use strict;
use Win32::OLE;
my $orig_password = 'password123Test';
my $target_password = 'password321Test';
my $dn = 'cn=myname,dc=corp,dc=com';
my $ldap = Win32::OLE->GetObject('LDAP:');
my $ldap_user = $ldap->OpenDSObject('LDAP://'.$dn,'myname',$orig_password,1);
my $tmp_password = '';
for (my $i = 0; $i < 30; ++$i)
{
$tmp_password = 'password' . $i . 'ABC';
print 'Changing to ' . $tmp_password . "\n";
$ldap_user->ChangePassword($orig_password,$tmp_password);
$orig_password = $tmp_password;
sleep 1;
}
$ldap_user->ChangePassword($tmp_password,$target_password);
一旦你登錄做到這一點不涉及更改您的密碼工作的查詢? – 2009-01-21 22:13:37