Помогите с решением - у каждого OU, свой ID (тут все ок - по группам отсеиваю), далее хочу если попал в группу, получить его ipPhone
Код: Выделить всё
#!/usr/bin/perl
use Net::LDAP;
my $ADcontroller="d1.d.local";
my $ADDC="DC=d1,DC=d,DC=local";
my $ADGroupsSearchBase = "OU=org1, $ADDC";
my $ADUsersSearchBase = "OU=org1, $ADDC";
$ADuser="admin";
$ADpass="1111";
my $ADfieldTelephone="ipPhone";
my $ADfieldMember = "member";
my $ADfieldDescription = "description";
sub LDAPsearch
{
# print @_;
my($base, $searchString, $attrs) = @_;
my $ret = $ldap->search ( base => "$base",
scope => "sub",
filter => "$searchString",
attrs => $attrs
);
LDAPerror("LDAPsearch", $ret) && die if( $ret->code );
return $ret;
}
$ldap = Net::LDAP->new ( $ADcontroller ) or die "$@";
$mesg = $ldap->bind ( dn=>"CN=$ADuser,CN=Users,$ADDC", password =>$ADpass);
my $ldapGroups = LDAPsearch(
$ADGroupsSearchBase,
"$ADfieldDescription=*",
[ $ADfieldMember, $ADfieldDescription ]
)->as_struct;
my $hash = ();
while (my ($distinguishedName, $groupAttrs) = each (%$ldapGroups) )
{
print "\nProccesing GROUP: [$distinguishedName]\n";
my $attrMembers = $groupAttrs->{ $ADfieldMember } or next;
my $desc = $groupAttrs->{ $ADfieldDescription } or next;
my $groupNumber = "@$desc";
print "MEMBERS: @$attrMembers\nDESC: $groupNumber (Count=$#$attrMembers+1)\n";
foreach my $member (@$attrMembers) {
print "\nMEMBER:\t$member\n";
my $ldapMember = LDAPsearch1(
$member,
"$ADfieldTelephone=*",
[ $ADfieldTelephone ]
)->as_struct;
while (my ($key, $val) = each (%$ldapMember) )
{
print "\nProccesing MEMBERS: [$key]\n";
print "ipPhone = $val->{ $ipphone }\n";
}
}
}
sub LDAPerror
{
my ($from, $mesg) = @_;
print "Return code: ", $mesg->code;
print "\tMessage: ", $mesg->error_name;
print " :", $mesg->error_text;
print "MessageID: ", $mesg->mesg_id;
print "\tDN: ", $mesg->dn;
}
# ./ad_extensions1.pl
Proccesing GROUP: [CN=otd1,OU=otd1,OU=org1,DC=d1,DC=d,DC=local]
MEMBERS: CN=i.ivanov,OU=otd1,OU=org1,DC=d1,DC=d,DC=local CN=p.petrov,OU=otd1,OU=org1,DC=d1,DC=d,DC=local CN=v.volkov,OU=otd1,OU=org1,DC=d1,DC=d,DC=local CN=test2,OU=CONSULTANT,OU=org1,DC=d1,DC=d,DC=local
DESC: 7000 (Count=3+1)
MEMBER: CN=i.ivanov,OU=otd1,OU=org1,DC=d1,DC=d,DC=local
Proccesing MEMBERS: [CN=i.ivanov,OU=otd1,OU=org1,DC=d1,DC=d,DC=local]
ipPhone =
MEMBER: CN=p.petrov,OU=otd1,OU=org1,DC=d1,DC=d,DC=local
Proccesing MEMBERS: [CN=p.petrov,OU=otd1,OU=org1,DC=d1,DC=d,DC=local]
ipPhone =
MEMBER: CN=v.volkov,OU=otd1,OU=org1,DC=d1,DC=d,DC=local
Proccesing MEMBERS: [CN=v.volkov,OU=otd1,OU=org1,DC=d1,DC=d,DC=local]
ipPhone =
MEMBER: CN=test2,OU=CONSULTANT,OU=org1,DC=d1,DC=d,DC=local
Proccesing GROUP: [CN=otd2,OU=otd2,OU=org1,DC=d1,DC=d,DC=local]
MEMBERS: CN=v.krasnov,OU=org1,DC=d1,DC=d,DC=local CN=v.krotov,OU=OPER,OU=org1,DC=d1,DC=d,DC=local CN=e.roschina,OU=otd2,OU=org1,DC=d1,DC=d,DC=local CN=e.gafyatulina,OU=otd2,OU=org1,DC=d1,DC=d,DC=local CN=r.muhamatullin,OU=otd2,OU=org1,DC=d1,DC=d,DC=local CN=o.rozhina,OU=otd2,OU=org1,DC=d1,DC=d,DC=local
DESC: 7100 (Count=5+1)
MEMBER: CN=v.krasnov,OU=org1,DC=d1,DC=d,DC=local
MEMBER: CN=v.krotov,OU=OPER,OU=org1,DC=d1,DC=d,DC=local
MEMBER: CN=e.roschina,OU=otd2,OU=org1,DC=d1,DC=d,DC=local
MEMBER: CN=e.gafyatulina,OU=otd2,OU=org1,DC=d1,DC=d,DC=local
MEMBER: CN=r.muhamatullin,OU=otd2,OU=org1,DC=d1,DC=d,DC=local
MEMBER: CN=o.rozhina,OU=otd2,OU=org1,DC=d1,DC=d,DC=local