3 use base qw(Gearman::Driver::Worker);
6 use Data::Dump qw(dump);
7 use Regexp::Common qw(net);
10 with 'APKPM::Gearman';
14 sub prefix { 'LDAP_' }
17 my ( $self, $orig, $job_name ) = @_;
18 warn "# process_name $orig $job_name\n";
19 return "$orig ($job_name)";
22 sub search : Job : MinProcesses(1) : MaxProcesses(5) : Encode(e_json) {
23 my ( $self, $job, $workload ) = @_;
26 $workload =~ m/$RE{net}{IPv4}/ ? "dhcpStatements=fixed-address $workload" :
27 $workload =~ m/\w+=/ ? $workload : # have filter specified
28 "cn=*$workload*" ; # defailt: search for user
30 warn "# search ",dump($filter);
32 my $ldap = Net::LDAP->new($self->config('ldaphost')) or die $@;
33 my $mesg = $ldap->bind($self->config('ldapusername'),Password => $self->config('ldappasswd'));
34 $mesg = $ldap->search(base => $self->config('ldapbase'), filter => $filter);
35 warn "# found ", $mesg->count, " entries";
37 for ( my $i = 0; $i < $mesg->count; $i++ ) {
38 my $entry = $mesg->entry($i);
39 my $e = { dn => $entry->dn };
40 foreach my $attr ( $entry->attributes ) {
41 $e->{$attr} = join("\n", $entry->get_value($attr));
45 # warn "## entries = ",dump $entries;