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 = [];
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;
}
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};
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;
}