LDAP_search login or ip
authorDobrica Pavlinusic <dpavlin@rot13.org>
Sun, 13 Mar 2011 12:33:22 +0000 (13:33 +0100)
committerDobrica Pavlinusic <dpavlin@rot13.org>
Sun, 13 Mar 2011 12:37:49 +0000 (13:37 +0100)
lib/APKPM/LDAP.pm [new file with mode: 0644]
t/LDAP.t [new file with mode: 0755]

diff --git a/lib/APKPM/LDAP.pm b/lib/APKPM/LDAP.pm
new file mode 100644 (file)
index 0000000..6a24312
--- /dev/null
@@ -0,0 +1,54 @@
+package APKPM::LDAP;
+
+use base qw(Gearman::Driver::Worker);
+use Moose;
+use Time::HiRes;
+use JSON::XS;
+use Data::Dump qw(dump);
+
+with 'APKPM::Config';
+
+use Net::LDAP;
+
+sub prefix { 'LDAP_' }
+
+sub process_name {
+       my ( $self, $orig, $job_name ) = @_;
+       warn "# process_name $orig $job_name\n";
+       return "$orig ($job_name)";
+}
+
+sub search : Job : MinProcesses(1) : MaxProcesses(5) : Encode {
+       my ( $self, $job, $workload ) = @_;
+
+       my $filter = $workload =~ m/\d+\.\d+\.\d+\.\d+/ ?
+               "dhcpStatements=fixed-address $workload" :
+               "cn=$workload*"
+       ;
+       warn "# search ",dump($filter);
+
+       my $ldap = Net::LDAP->new($self->config('ldaphost')) or die $@;
+       my $mesg = $ldap->bind($self->config('ldapusername'),Password => $self->config('ldappasswd'));
+       $mesg = $ldap->search(base => $self->config('ldapbase'), filter => $filter);
+       warn "# found ", $mesg->count, " entries";
+       my $entries;
+       for ( my $i = 0; $i < $mesg->count; $i++ ) {
+               my $entry = $mesg->entry($i);
+               my $e = { dn => $entry->dn };
+               foreach my $attr ( $entry->attributes ) {
+                       $e->{$attr} = join("\n", $entry->get_value($attr));
+               }
+               push @$entries, $e;
+       }
+#      warn "## entries = ",dump $entries;
+       return $entries;
+}
+
+sub encode {
+       my ( $self, $result ) = @_;
+       my $json = JSON::XS::encode_json($result);
+       warn "## ", dump $json;
+       return $json;
+}
+
+1;
diff --git a/t/LDAP.t b/t/LDAP.t
new file mode 100755 (executable)
index 0000000..181e3c3
--- /dev/null
+++ b/t/LDAP.t
@@ -0,0 +1,22 @@
+#!/usr/bin/perl
+use strict;
+use warnings;
+
+use Test::More tests => 3;
+use Data::Dump qw(dump);
+
+use lib 'lib';
+
+use_ok 'APKPM::LDAP';
+
+ok my $o = APKPM::LDAP->new, 'new';
+
+my $login = $ENV{LOGIN} || 'ttest7';
+
+ok my $r = $o->search( 'job', $login ), "search $login";
+diag dump($r);
+
+my $ip = $ENV{IP} || '10.16.13.24';
+
+ok my $r = $o->search( 'job', $ip ), "search $ip";
+diag dump($r);