]> git.proxmox.com Git - pmg-api.git/blobdiff - PMG/LDAPSet.pm
Fix password change of unix root user
[pmg-api.git] / PMG / LDAPSet.pm
index 67b8f99ae91f1561fb95a9c6ae821057fe39f24b..e5b65cdbd826552cbb7eb635930c857cff3f4dc8 100755 (executable)
@@ -2,17 +2,14 @@ package PMG::LDAPSet;
 
 use strict;
 use warnings;
-use Carp;
 
 use PVE::SafeSyslog;
 
-# fixme
-use Proxmox::Config::System;
-
 use PMG::LDAPCache;
+use PMG::LDAPConfig;
 
-sub new_from_system_cfg {
-    my ($self, $system_cfg, $syncmode, $serverid) = @_;
+sub new_from_ldap_cfg {
+    my ($self, $ldap_cfg, $syncmode, $serverid) = @_;
     my $type = ref($self) || $self;
 
     my $ids = [];
@@ -20,18 +17,17 @@ sub new_from_system_cfg {
     if ($serverid) {
        $ids = [ $serverid ];
     } else {
-       my @keys = $system_cfg->getkeys('ldap');
-       foreach my $k (@keys) {
-           push @$ids, $k if $k =~ m/^server_/;
-       }
+       $ids = [ keys %{$ldap_cfg->{ids}} ];
     }
 
     $self = bless {}, $type;
 
     foreach my $id (@$ids) {
 
-       my $data = $system_cfg->get('ldap', $id);
+       # fixme: does it work?
+       my $data = $ldap_cfg->{ids}->{$id};
        next if !ref($data);
+       next if $data->{disable};
 
        $data->{syncmode} = $syncmode;
        $data->{id} = $id;
@@ -43,9 +39,9 @@ sub new_from_system_cfg {
 }
 
 sub ldap_resync {
-    my ($system_cfg, $tostderr) = @_;
+    my ($ldap_cfg, $tostderr) = @_;
 
-    my $ldap = __PACKAGE__->new_from_system_cfg($system_cfg, 1);
+    my $ldap = __PACKAGE__->new_from_ldap_cfg($ldap_cfg, 1);
 
     foreach my $p (@{$ldap->ids()}) {
        my $server = $ldap->{$p}->{server1};
@@ -53,13 +49,23 @@ sub ldap_resync {
        my $msg = "start syncing ldap profile '${p}' (${server})";
        syslog('info', $msg);
        print STDERR "$msg\n" if $tostderr;
+
        $ldap->{$p}->update(2);
+
+       my $errors = $ldap->{$p}->{errors};
+       print STDERR $errors if $tostderr && $errors;
+
        my $gcount = $ldap->{$p}->{gcount};
        my $ucount = $ldap->{$p}->{ucount};
        my $mcount = $ldap->{$p}->{mcount};
 
-       $msg = "finished syncing ldap profile '${p}' (${server}): " .
-           "found $ucount accounts, $mcount addresses, $gcount groups";
+       if ($errors) {
+           $msg = "aborted syncing ldap profile '${p}' (${server}): " .
+               "keep old data, $ucount accounts, $mcount addresses, $gcount groups";
+       } else {
+           $msg = "finished syncing ldap profile '${p}' (${server}): " .
+               "found $ucount accounts, $mcount addresses, $gcount groups";
+       }
        syslog('info', $msg);
        print STDERR "$msg\n" if $tostderr;
     }