$ldap_opts{$opt} = $opts->{$opt} if $opts->{$opt};
}
- my $ldap = Net::LDAP->new($hosts, %ldap_opts) || die $@;
+ my $ldap = Net::LDAP->new($hosts, %ldap_opts) || die "$@\n";
if ($start_tls) {
$ldap->start_tls(%$opts);
}
sub query_users {
- my ($ldap, $filter, $attributes, $base_dn) = @_;
+ my ($ldap, $filter, $attributes, $base_dn, $classes) = @_;
# build filter from given filter and attribute list
my $tmp = "(|";
}
$tmp .= ")";
+ if ($classes) {
+ $tmp = "(&$tmp(|";
+ for my $class (@$classes) {
+ $tmp .= "(objectclass=$class)";
+ }
+ $tmp .= "))";
+ }
+
if ($filter) {
$filter = "($filter)" if $filter !~ m/^\(.*\)$/;
$filter = "(&${filter}${tmp})"
}
sub query_groups {
- my ($ldap, $base_dn, $classes, $filter) = @_;
+ my ($ldap, $base_dn, $classes, $filter, $group_name_attr) = @_;
my $tmp = "(|";
for my $class (@$classes) {
my $page = Net::LDAP::Control::Paged->new(size => 100);
+ my $attrs = [ 'member', 'uniqueMember' ];
+ push @$attrs, $group_name_attr if $group_name_attr;
my @args = (
base => $base_dn,
scope => "subtree",
filter => $filter,
control => [ $page ],
- attrs => [ 'member', 'uniqueMember' ],
+ attrs => $attrs,
);
my $cookie;
$members = [$entry->get_value('uniqueMember')];
}
$group->{members} = $members;
+ if ($group_name_attr && (my $name = $entry->get_value($group_name_attr))) {
+ $group->{name} = $name;
+ }
push @$groups, $group;
}