use strict;
use warnings;
-use Carp;
use PVE::SafeSyslog;
use PMG::LDAPCache;
-use PMG::Config;
+use PMG::LDAPConfig;
-sub new_from_pmg_cfg {
- my ($self, $pmg_cfg, $syncmode, $serverid) = @_;
+sub new_from_ldap_cfg {
+ my ($self, $ldap_cfg, $syncmode, $serverid) = @_;
my $type = ref($self) || $self;
my $ids = [];
if ($serverid) {
$ids = [ $serverid ];
} else {
- foreach my $k (keys %{$pmg_conf->{ids}}) {
- push @$ids, $k if $k =~ m/^ldap_/;
- }
+ $ids = [ keys %{$ldap_cfg->{ids}} ];
}
$self = bless {}, $type;
foreach my $id (@$ids) {
# fixme: does it work?
- my $data = $pmg_cfg->{ids}->{$id};
+ my $data = $ldap_cfg->{ids}->{$id};
next if !ref($data);
+ next if $data->{disable};
$data->{syncmode} = $syncmode;
$data->{id} = $id;
}
sub ldap_resync {
- my ($pmg_cfg, $tostderr) = @_;
+ my ($ldap_cfg, $tostderr) = @_;
- my $ldap = __PACKAGE__->new_from_pmg_cfg($pmg_cfg, 1);
+ my $ldap = __PACKAGE__->new_from_ldap_cfg($ldap_cfg, 1);
foreach my $p (@{$ldap->ids()}) {
my $server = $ldap->{$p}->{server1};
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;
}