したがって、LDAPを検索してCSVファイルに入力しようとしています。ユーザーIDは、テキストファイルを解析することによって取得されます。私はユーザーID(mailNickname)、FName(givenName)、LName(sn)、 "OU"、pwdLastSetのLDAPを検索したいと思います。 「不良フィルタ」エラーが発生し続けるため、検索のフィルタの態様を使用するにはどうすればよいですか。LDAP検索 - 不良フィルタ
ありがとうございました。
#!/usr/bin/perl
use xSV;
use Net::LDAP;
use Term::ReadKey;
# use strict;
$debug_on = 1; # This will enable some debugging messages.
if (defined($ARGV[0])) {
$input = $ARGV[0];
} else {
print "No input file specified! Assuming MKSGroupsoutput.txt...\n";
$input = "MKSGroupsoutput.txt";
}
if (defined($ARGV[1])) {
$output = $ARGV[1];
} else {
$output = $input . ".csv";
}
open GROUPS, "< $input" or die "ERROR: Can't open input file: '$input'\n";
print "INPUT: $input\nOUTPUT: $output\n";
sub debug {
if ($debug_on == 1) {
print "@_";
}
}
my $csv = Text::xSV->new(
filename => $output,
header => [
"AccountName",
"LastName",
"FirstName",
"EEID",
"SYSGenericAcct",
"Notes",
"AccessLevel",
"AccessCapability",
"Owner/Manager",
"Description",
"Created",
"Status",
"LastStatusChange",
"LastPwdChange",
"DataSource"
],
);
$csv->print_header();
my ($inputname, $fname, $lname, @name, $uname, $pwordinput, $pword, $domain, $line, $ldap, $bindstring, $root, $pword, $base_dn);
#User driven input to connect to LDAP. ReadMode 2 keeps password hidden, the reset back to 0.
print "Please enter your Full Name: ";
$inputname = <STDIN>;
print "Please enter your password: ";
ReadMode 2;
$pwordinput = <STDIN>;
ReadMode 0;
#Builds the LDAP CN value from user input. Trims \n off user input values
$inputname = substr($inputname,0,-1);
@name = split(' ', $inputname);
$fname = ucfirst(@name[0]);
$lname = ucfirst(@name[1]);
$pword = substr($pwordinput,0,-1);
$uname = $lname ."\\, " . $fname;
$bindstring = "CN=" . $uname . ",OU=User,DC=hq,DC=name,DC=com";
#LDAP Connection parameters
$base_dn = "OU=User,DC=hq,DC=name,DC=com";
$ldap = Net::LDAP->new('ldap://local', onerror =>'die');
$ldap->bind($bindstring, password => $pword); #Sometimes the BIND fails (1 out of 10 times)
$root = $ldap->root_dse;
#Parses text file
while ($line = <GROUPS>) {
chomp($line);
if ($line =~ m/^ user .*/) {
$line =~ s/^ user.\s//;
my ($searchoutput, $user, @entries, $entry, $href, $strDomain, $strUsername, $strDN, $arrSplitResponse, $strLName, $strFName, $strUserType);
$user = $line;
$user = "mailNickname: " . $user;
$searchoutput = $ldap->search(filter=>$user,base=>$base_dn); # ERROR HERE
@entries = $searchoutput->entries;
foreach $entry (@entries) {
print "DN: ", $entry->dn, "\n"; #NEVER ENTERS THIS LOOP
}
厳重に説明していただきありがとうございます。それをオンにすることで、私のプログラムが壊れていると思ったので、私のコードで問題がすべて見えました。 LDAPに接続して正しくフィルタリングできるようになりました。 しかし、私の出力では、Net :: LDAP :: Entry = HASH(0xe89dd4)の出力が得られます。ところで、私が見ている私の出力は、コマンドプロンプトでのスクリプトの進捗状況です。 これはどのように表示されなくなりますか? パスワードを入力してください: – cquadrini
は再び、このエラーは、最大示し始めldaptest.plライン77で未定義の値にメソッド「バインド」を呼び出すことはできません、ライン2 ライン77は私の$ pwordinput = です。それは働いていて、ただ止まった。あたかもが電話を切って、私が「Enter」を押したときに応答しないかのようです。なぜこのようなことが起こり、どのように修正するのですか? –
cquadrini
@cquadrini私は、あなたの入力を「chomp」しないことに気付きました。 STDINから入力すると、行末にLF文字が表示されている可能性があります。 'chomp(my $ password =)'や2行で行うことができます。パスワードを入力した後、 'print qq(Password =" $ password ");'を入力して、それがあなたの考えであるかどうかを確認することができます。'qq()'は二重引用符のようなものですが、二重引用符はエスケープする必要はありません。 [Perldocs](http://perldoc.perl.org/perlop.html#Quote-Like-Operators)の 'qq'を参照してください。 –