projects
/
licom.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Many bugs fixed, more features inplemented. Rapid debelopment at work..
[licom.git]
/
lib
/
Person.pm
diff --git
a/lib/Person.pm
b/lib/Person.pm
index
79ed9f7
..
96a5977
100644
(file)
--- a/
lib/Person.pm
+++ b/
lib/Person.pm
@@
-134,7
+134,7
@@
sub load
my $pkg = shift;
my $cn = shift;
my $pkg = shift;
my $cn = shift;
- my ($retval) = search ($pkg,
cn => $cn
);
+ my ($retval) = search ($pkg,
[[cn => $cn]]
);
if (!$retval)
{
if (!$retval)
{
@@
-245,47
+245,67
@@
sub create
Search for the given patterns. Returns a list of I<Person>-objects.
Search for the given patterns. Returns a list of I<Person>-objects.
+ @filter =
+ (
+ [
+ [field => value], # OR
+ [field => value]
+ ], # AND
+ ...
+ );
+
=cut
sub search
{
my $pkg = shift;
=cut
sub search
{
my $pkg = shift;
- my %patterns = @_;
- my %filter = ();
- my $filter = '(objectclass=inetOrgPerson)';
+
+ my @patterns = @_;
+ my @konjunct = ();
+ my $filter;
+
my $mesg;
my @retval = ();
my $mesg;
my @retval = ();
- for (
keys %
patterns)
+ for (
@
patterns)
{
{
- my $
key
= $_;
- my
$val = $patterns{$key}
;
+ my $
dj
= $_;
+ my
@disjunc = ()
;
- $key = $ExternalNames{$key} if (defined ($ExternalNames{$key}));
- if (!defined ($ValidFields{$key}))
+ for (@$dj)
{
{
- warn ("Not a valid field: $key");
- next;
- }
+ my $field = $_->[0];
+ my $value = $_->[1];
- $filter{$key} = $val;
- }
+ $field = $ExternalNames{$field} if (defined ($ExternalNames{$field}));
+ if (!defined ($ValidFields{$field}))
+ {
+ warn ("Not a valid field: $field");
+ next;
+ }
- if (%filter)
- {
- if (scalar (keys %filter) == 1)
- {
- my ($key) = keys (%filter);
- my $val = $filter{$key};
- $filter = "(& $filter ($key=$val))";
+ $value =~ s/([\(\)\\])/\\$1/g;
+
+ push (@disjunc, "($field=$value)");
}
}
- else
+
+ if (@disjunc)
{
{
- my $tmp = join (' ', map { '(' . $_ . '=' . $filter->{$_} . ')' } (keys (%$filter)));
- $filter = "(& $filter (| $tmp))";
+ push (@konjunct, join ('', '(|', @disjunc, ')'));
}
}
}
}
+ if (@konjunct)
+ {
+ $filter = join ('', '(&(objectclass=inetOrgPerson)', @konjunct, ')');
+ }
+ else
+ {
+ $filter = '(objectclass=inetOrgPerson)';
+ }
+
+ print STDERR "Debug: using filter: $filter";
+
$mesg = $Ldap->search
(
base => $Config{'base_dn'},
$mesg = $Ldap->search
(
base => $Config{'base_dn'},