Hallo.
Wir sind nun kurz vor OTRS 2.1 Produktivstart und ich sitze noch an einer
harten Nuss.
Kennt sich jemand mit dem script aus sync-ldap2db.pl um die ADS Daten aus
Windows 2000 per ldap ins OTRS zu importieren ?
Wenn ich linuxseitig folgendes aufrufe :
ldapsearch -d 255 -h 172.18.5.1 -W -b
"ou=langenfeld,dc=msnet,dc=strauss1902,dc=de" -D
"cn=schulze,ou=verwaltung,ou=langenfeld,dc=msnet,dc=strauss1902,dc=de" -x
klappt die LDAP Anbindung wunderbar, aber über das Script passiert nix. Dieses
wurde angepasst und sieht wie folgt aus :
--
#!/usr/bin/perl -w
# --
# scripts/tools/sync-ldap2db.pl - sync a ldap directory to database # Copyright
(C) 2001-2005 Martin Edenhofer <[EMAIL PROTECTED]> # -- # $Id:
sync-ldap2db.pl,v 1.1 2005/03/05 07:53:31 martin Exp $ # -- # This program is
free software; you can redistribute it and/or modify # it under the terms of
the GNU General Public License as published by # the Free Software Foundation;
either version 2 of the License, or # (at your option) any later version.
#
# This program is distributed in the hope that it will be useful, # but WITHOUT
ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS
FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more
details.
#
# You should have received a copy of the GNU General Public License # along
with this program; if not, write to the Free Software # Foundation, Inc., 59
Temple Place, Suite 330, Boston, MA 02111-1307 USA # --
# use ../ as lib location
use File::Basename;
use FindBin qw($RealBin);
use lib dirname($RealBin). "/../";
use lib dirname($RealBin)."/../Kernel/cpan-lib";
use strict;
use vars qw($VERSION);
$VERSION = '$Revision: 1.1 $';
$VERSION =~ s/^\$.*:\W(.*)\W.+?$/$1/;
use Net::LDAP;
use Kernel::Config;
use Kernel::System::Log;
use Kernel::System::DB;
use Kernel::System::Encode;
# --
# create common objects
# --
my %CommonObject = ();
$CommonObject{ConfigObject} = Kernel::Config->new(); $CommonObject{LogObject} =
Kernel::System::Log->new(
LogPrefix => 'OTRS-sync-ldap2db',
%CommonObject,
);
$CommonObject{EncodeObject} = Kernel::System::Encode->new(
%CommonObject,
);
$CommonObject{DBObject} = Kernel::System::DB->new(
%CommonObject,
);
my $UidLDAP = 'uid';
my $UidDB = 'login';
my %Map = (
# db => ldap
email => 'mail',
customer_id => 'mail',
first_name => 'sn',
last_name => 'givenname',
pw => 'test',
#comments => 'description',
comments => 'postaladdress',
);
my $LDAPHost = '172.18.5.1';
my %LDAPParams = ();
my $LDAPBaseDN = 'ou=langenfeld,dc=msnet,dc=strauss1902,dc=de';
my $LDAPBindDN =
'cn=schulze,ou=verwaltung,ou=langenfeld,dc=msnet,dc=strauss1902,dc=de';
my $LDAPBindPW = 'kennwort von schulze';
my $LDAPScope = 'sub';
my $LDAPCharset = 'utf-8';
#my $LDAPFilter = '';
my $LDAPFilter = '(ObjectClass=*)';
my $DBCharset = 'iso-8859-1';
my $DBTable = 'customer_user';
# ldap connect and bind (maybe with SearchUserDN and SearchUserPw) my $LDAP =
Net::LDAP->new($LDAPHost, %LDAPParams) or die "$@"; if (!$LDAP->bind(dn =>
$LDAPBindDN, password => $LDAPBindPW)) {
$CommonObject{LogObject}->Log(
Priority => 'error',
Message => "Bind failed!",
);
exit 1;
}
# split request of all accounts
foreach (qw(0 1 2 3 4 5 6 7 8 9 a b c d e f g h i j k l m n o p q r s t u v w x
y z)) {
my $Filter = "($UidLDAP=$_*)";
if ($LDAPFilter) {
$Filter = "(&$LDAPFilter$Filter)";
}
# perform user search
my $Result = $LDAP->search(
base => $LDAPBaseDN,
scope => $LDAPScope,
filter => $Filter,
);
#print "F: ($UidLDAP=$_*)\n";
foreach my $entry ($Result->all_entries) {
my $UID = $entry->get_value($UidLDAP);
if ($UID) {
# check if uid existsis in db
my $Insert = 1;
$CommonObject{DBObject}->Prepare(
SQL => "SELECT $UidDB FROM $DBTable WHERE $UidDB =
'".$CommonObject{DBObject}->Quote($UID)."'",
Limit => 1,
);
while (my @Row = $CommonObject{DBObject}->FetchrowArray()) {
$Insert = 0;
}
my $SQLPre = '';
my $SQLPost = '';
my $Type = '';
if ($Insert) {
$Type = 'INSERT';
}
else {
$Type = 'UPDATE';
}
foreach (keys %Map) {
my $Value =
$CommonObject{DBObject}->Quote(_ConvertTo($entry->get_value($Map{$_})) || '');
if ($Type eq 'UPDATE') {
if ($SQLPre) {
$SQLPre .= ", ";
}
$SQLPre .= " $_ = '$Value'";
}
else {
if ($SQLPre) {