1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94
|
package Debbugs::RemoteBTS::LDAP;
@ISA = qw(Debbugs::RemoteBTS);
use Net::LDAP;
use Debbugs::BugReport;
sub new {
my $proto = shift;
my $class = ref($proto) || $proto;
my $self = {};
my $server = shift;
my %opts = ();
while (@_) {
my($k,$v) = splice(@_,0,2);
$opts{$k} = $v;
}
$self->{SERVER} = $server;
$self->{PORT} = $opts{port};
$self->{DN} = $opts{dn};
$self->{LDAP} = undef;
bless ($self, $class);
return $self;
}
sub connect {
my $self = shift;
unless (defined $self->{LDAP}) {
$self->{LDAP} = Net::LDAP->new($self->{SERVER},
'port' => $self->{PORT}
);
return undef unless defined $self->{LDAP};
$self->{LDAP}->bind();
}
return $self->{LDAP};
}
sub DESTROY {
$self->{LDAP}->unbind if defined $self->{LDAP};
}
sub bugFromID {
my $self = shift;
my ($bugid) = @_;
# Query LDAP server
$self->connect or return undef;
my $date = time;
my $result = $self->{LDAP}->search(
base => $self->{DN},
filter => "(bugid=$bugid)",
);
# Build and return BugReport object
return _entryToBug ($result->pop_entry, $date);
}
sub packageBugs {
my $self = shift;
my ($package) = @_;
# Query LDAP server
$self->connect or return undef;
my $date = time;
my $result = $self->{LDAP}->search(
base => $self->{DN},
filter => "(package=$package)"
);
# Build and return list of BugReport object
my @reportlist = ();
foreach my $entry ($result->entries) {
push @reportlist, _entryToBug ($entry, $date);
}
return @reportlist;
}
sub _entryToBug {
my ($entry, $date) = @_;
my $bugreport = Debbugs::BugReport->new;
$bugreport->init_from_LDAP_entry ($entry);
$bugreport->{DMBTATTRIBS}->{fetchdate} = $date;
return $bugreport;
}
TRUE;
|