]> git.proxmox.com Git - pve-common.git/blobdiff - src/PVE/LDAP.pm
fix #2696: avoid 'undefined value' warning in 'pvesh help unknown'
[pve-common.git] / src / PVE / LDAP.pm
index cb889776d88f6aff73c35d35ab276ad8c864e15d..ff98e367e63265bf76c0f302847c3749eea095a6 100644 (file)
@@ -38,7 +38,7 @@ sub ldap_connect {
        $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);
@@ -94,7 +94,7 @@ sub auth_user_dn {
 }
 
 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 = "(|";
@@ -103,6 +103,14 @@ sub query_users {
     }
     $tmp .= ")";
 
+    if ($classes) {
+       $tmp = "(&$tmp(|";
+       for my $class (@$classes) {
+           $tmp .= "(objectclass=$class)";
+       }
+       $tmp .= "))";
+    }
+
     if ($filter) {
        $filter = "($filter)" if $filter !~ m/^\(.*\)$/;
        $filter = "(&${filter}${tmp})"
@@ -176,7 +184,7 @@ sub query_users {
 }
 
 sub query_groups {
-    my ($ldap, $base_dn, $classes, $filter) = @_;
+    my ($ldap, $base_dn, $classes, $filter, $group_name_attr) = @_;
 
     my $tmp = "(|";
     for my $class (@$classes) {
@@ -193,12 +201,14 @@ sub query_groups {
 
     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;
@@ -225,6 +235,9 @@ sub query_groups {
                $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;
        }