Daten aus AD synchronisieren [gelöst]

Hilfe zu Znuny Problemen aller Art
Locked
paulemann
Znuny newbie
Posts: 18
Joined: 10 Nov 2011, 20:55
Znuny Version: 3.0.11
Location: Berlin

Daten aus AD synchronisieren [gelöst]

Post by paulemann »

Hallo liebe OTRS Gemeinde.

Ich benutze OTRS 3.0.11 auf einem Windows Server 2008 R2 und habe die meisten Kunden (nur überschaubare 120 Stück im Miniunternehmen) in der OTRS eigenen Datenbank angelegt. Jetzt hab ich mich mal an die Authentifizierung über LDAP gesetzt und war auch erfolgreich. Jetzt stellt sich mir die Frage, ob ich auch daten der Kunden (z.B. telephoneNumber) in die DB synchronsieren kann. Das will bei mir einfach nicht klappen.
Was ich erreichen will:
1. Agenten sollen sich per LDAP authenfizieren
2. Kunden sollen sich per LDAP authenfizieren
3. Kundendaten sollen aus dem AD in die Tabelle customer_user geschrieben werden
warum ich das will:
Tickets werden bei uns mit einer Vielzahl an automatischen Antworten bombadiert und in diesen werden viele Textelemente über X OTRS Header generiert. Damit das klappt brauche ich ja Daten aus der OTRS DB (oder???)

Ich bin unwürdig...aber Bitte helft mir.

P.S.: ich lege meine ()Config.pm bei:

# --
# Kernel/Config.pm - Config file for OTRS kernel
# Copyright (C) 2001-2010 xxx, http://otrs.org/
# --
# $Id: Config.pm.dist,v 1.23 2010/01/13 22:25:00 martin Exp $
# --
# This software comes with ABSOLUTELY NO WARRANTY. For details, see
# the enclosed file COPYING for license information (AGPL). If you
# did not receive this file, see http://www.gnu.org/licenses/agpl.txt.
# --
# Note:
#
# -->> OTRS does have a lot of config settings. For more settings
# (Notifications, Ticket::ViewAccelerator, Ticket::NumberGenerator,
# LDAP, PostMaster, Session, Preferences, ...) see
# Kernel/Config/Defaults.pm and copy your wanted lines into "this"
# config file. This file will not be changed on update!
#
# --

package Kernel::Config;

sub Load {
my $Self = shift;
# ---------------------------------------------------- #
# ---------------------------------------------------- #
# #
# Start of your own config options!!! #
# #
# ---------------------------------------------------- #
# ---------------------------------------------------- #

# ---------------------------------------------------- #
# database settings #
# ---------------------------------------------------- #
# DatabaseHost
# (The database host.)
$Self->{'DatabaseHost'} = 'localhost';
# Database
# (The database name.)
$Self->{'Database'} = 'otrs';
# DatabaseUser
# (The database user.)
$Self->{'DatabaseUser'} = 'otrs';
# DatabasePw
# (The password of database user. You also can use bin/otrs.CryptPassword.pl
# for crypted passwords.)
$Self->{'DatabasePw'} = '{0b489ccd6d2c196de8ac}';
# DatabaseDSN
# (The database DSN for MySQL ==> more: "man DBD::mysql")
$Self->{DatabaseDSN} = "DBI:mysql:database=$Self->{Database};host=$Self->{DatabaseHost};";
# CustomerUser
# (customer database backend and settings)
$Self->{CustomerUser} = {
Name => 'Database Backend',
Module => 'Kernel::System::CustomerUser::DB',
Params => {
# if you want to use an external database, add the
# required settings
# DSN => 'DBI:odbc:yourdsn',
# DSN => 'DBI:mysql:database=customerdb;host=customerdbhost',
# User => '',
# Password => '',
Table => 'customer_user',
},
# customer unique id
CustomerKey => 'login',
# customer #
CustomerID => 'customer_id',
CustomerValid => 'valid_id',
CustomerUserListFields => ['first_name', 'last_name', 'email'],
# CustomerUserListFields => ['login', 'first_name', 'last_name', 'customer_id', 'email'],
CustomerUserSearchFields => ['login', 'last_name', 'customer_id'],
CustomerUserSearchPrefix => '',
CustomerUserSearchSuffix => '*',
CustomerUserSearchListLimit => 250,
CustomerUserPostMasterSearchFields => ['email'],
CustomerUserNameFields => ['title', 'first_name', 'last_name'],
CustomerUserEmailUniqCheck => 1,
# # show not own tickets in customer panel, CompanyTickets
# CustomerUserExcludePrimaryCustomerID => 0,
# # generate auto logins
# AutoLoginCreation => 0,
# AutoLoginCreationPrefix => 'auto',
# # admin can change customer preferences
# AdminSetPreferences => 1,
# # cache time to live in sec. - cache database queries
# CacheTTL => 0,
# # just a read only source
# ReadOnly => 1,
Map => [

# note: Login, Email and CustomerID needed!
# var, frontend, storage, shown (1=always,2=lite), required, storage-type, http-link, readonly, http-link-target
[ 'UserTitle', 'Title', 'title', 0, 0, 'var', '', 0 ],
[ 'UserFirstname', 'Firstname', 'first_name', 1, 1, 'var', '', 0 ],
[ 'UserLastname', 'Lastname', 'last_name', 1, 1, 'var', '', 0 ],
[ 'UserLogin', 'Username', 'login', 1, 1, 'var', '', 0 ],
[ 'UserPassword', 'Password', 'pw', 0, 0, 'var', '', 0 ],
[ 'UserEmail', 'Email', 'email', 1, 1, 'var', '', 0 ],
[ 'UserCustomerID', 'CustomerID', 'customer_id', 0, 1, 'var', '', 0 ],
[ 'UserPhone', 'Phone', 'phone', 1, 1, 'var', '', 0 ],
[ 'UserFax', 'Fax', 'fax', 1, 0, 'var', '', 0 ],
[ 'UserMobile', 'Mobile', 'mobile', 1, 0, 'var', '', 0 ],
[ 'UserStreet', 'Street', 'street', 1, 0, 'var', '', 0 ],
[ 'UserZip', 'Zip', 'zip', 1, 0, 'var', '', 0 ],
[ 'UserCity', 'City', 'city', 1, 0, 'var', '', 0 ],
[ 'UserCountry', 'Country', 'country', 1, 0, 'var', '', 0 ],
[ 'UserComment', 'Comment', 'comments', 0, 1, 'var', '', 0 ],
[ 'ValidID', 'Valid', 'valid_id', 0, 1, 'int', '', 0 ],
],
# default selections
Selections => {
UserComment => {
'Sehr geehrter Herr' => 'Sehr geehrter Herr',
'Sehr geehrte Frau' => 'Sehr geehrte Frau',
},
UserTitle => {
'Dr.' => 'Dr.',
'' => '',
},
},
};

#----------------------------------------------------------#
#
#
# LDAP
# Authentifizierung Agenten und Customer
#
#
#----------------------------------------------------------#

#Agenten Authentifizierung DB
# Backend DB fuer Agenten
#$Self->{'AuthModule' = 'Kernel::System::Auth::DB';
#$Self->{'AuthModule::DB::CryptType10'} = 'crypt';

# hab ich deaktiviert weil sich unsere Agents auch gegen das LDAP Authentifizieren sollen
# nach meinem Wissenstand müssen die Agenten aber trotzdem in der Datenbank stehen.


#------------------------------------------------------------------------------------------------------------------------------#
# Authentifizierung Agenten via LDAP (AD)
#
#------------------------------------------------------------------------------------------------------------------------------#

# Hier steht überall 1 hinter (AuthModule1, Host1, ...)
# habe ich drin gelassen weil ich mehrere ADs abfrage und auch mehrere Firmen im OTRS habe
# wenn ihr nur eine habt kann die 1 überall weg. Ansonsten müsst ihr den ganzen Block halt pro Firma anlegen und einfach durchnummerieren

# Aber hier steht ein wichtiger Beitrag von jojo
# http://forums.otrs.org/viewtopic.php?f=17&t=7423
# da bin ich auch drauf reingefallen bezüglich der Nummerierung, muss man halt erst mal wissen:-)

$Self->{'AuthModule1'} = 'Kernel::System::Auth::LDAP';
$Self->{'AuthModule::LDAP::Host1'} = 'fileserver.AGKA.intern';
$Self->{'AuthModule::LDAP::BaseDN1'} = 'DC=AGKA,DC=intern';
$Self->{'AuthModule::LDAP::UID1'} = 'samaccountname';
$Self->{'AuthModule::LDAP::GroupDN1'} ='CN=orts-agents,OU=GBA-Sicherheitsgruppen,OU=GBA,DC=AGKA,DC=intern'; # nur Mitlieder dieser Gruppe dürfen sich einloggen
$Self->{'AuthModule::LDAP::AccessAttr1'} = 'member'; # bei 2008er Domänen ist es 'member' bei 2003er ist es 'memberUID'*
$Self->{'AuthModule::LDAP::UserAttr1'} = 'DN';
$Self->{'AuthModule::LDAP::SearchUserDN1'} = 'CN=OTRS-AUTH,OU=IT-Serviceaccounts,OU=GBA,DC=AGKA,DC=intern';
#hier geht es auch mit dem user Principal Name,
# oder eben die DN des Bindusers, war bei mir ne böse Falle weil ich es nicht wörtlich genug genommen habe. Die SearchUserDN ist nicht die DN
# in der der User liegt sondern die eindeutige des Users, das gleiche gilt für die GroupDNs
# der Search User muss Mitglied in "Domänen-Benutzer" und in "Windows-Authentifizierungszugriffgruppe" sein
$Self->{'AuthModule::LDAP::SearchUserPw1'} = '**********';

$Self->{'UserSyncLDAPMap1'} = {
'UserEmail' => 'mail',
'UserFirstname' => 'givenName',
'UserLastname' => 'sn',
'UserLogin' => 'sAMAccountName'
};

################################################################################################################################
#------------------------------------------------------------------------------------------------------------------------------#
# Customer
#------------------------------------------------------------------------------------------------------------------------------#
$Self->{'Customer::AuthModule1'} = 'Kernel::System::CustomerAuth::LDAP';
$Self->{'Customer::AuthModule::LDAP::Host1'} = 'fileserver.AGKA.intern';
$Self->{'Customer::AuthModule::LDAP::BaseDN1'} ='OU=Verwaltung,OU=Users,OU=GBA,DC=AGKA,DC=intern';# die DN in der eure User liegen, kommt halt drauf an wie eurer AD strukturiert ist
$Self->{'Customer::AuthModule::LDAP::UID1'} = 'sAMAccountName';
$Self->{'Customer::AuthModule::LDAP::GroupDN1'} = 'CN=Abt. Verwaltung,OU=GBA-Sicherheitsgruppen,OU=GBA,DC=AGKA,DC=intern'; # das gleiche wie bei den Agents nur wer in der Gruppe 'Verwaltung' ist darf sich einloggen
$Self->{'Customer::AuthModule::LDAP::AccessAttr1'} = 'member';
$Self->{'Customer::AuthModule::LDAP::SearchUserDN1'} = 'CN=Liebisch\, Paul,OU=Verwaltung,OU=Users,OU=GBA,DC=AGKA,DC=intern'; #s.o. das hier wäre dann der userPrincipalName
$Self->{'Customer::AuthModule::LDAP::SearchUserPw1'} = '**********';
$Self->{'Customer::AuthModule::LDAP::Params1'} = {
port => 389,
timeout => 120,
async => 0,
version => 3,
};

#------------------------------------------------------------------------------------------------------------------------------#
# LDAP System Users
#
#------------------------------------------------------------------------------------------------------------------------------#
$Self->{'AuthModule1'} = 'Kernel::System::Auth::LDAP';
$Self->{'AuthModule::LDAP::Host1'} = 'fileserver.AGKA.intern';
$Self->{'AuthModule::LDAP::BaseDN1'} = 'DC=AGKA,DC=intern';
$Self->{'AuthModule::LDAP::UID1'} = 'sAMAccountName';
$Self->{'AuthModule::LDAP::SearchUserDN1'} = 'CN=OTRS-AUTH,OU=IT-Serviceaccounts,OU=GBA,DC=AGKA,DC=intern';
$Self->{'AuthModule::LDAP::SearchUserPw1'} = 'OTRS-AUTH';
$Self->{'AuthModule::LDAP::Params1'} = {
'async' => '0',
'timeout' => '120',
'version' => '3',
'port' => '389'
};

$Self->{'AuthModule::LDAP::Die1'} = 1;

#------------------------------------------------------------------------------------------------------------------------------#
# UserSyncLDAPMap
#
#------------------------------------------------------------------------------------------------------------------------------#

$Self->{'UserSyncLDAPMap1'} = {
'UserEmail' => 'mail',
'UserFirstname' => 'givenName',
'UserLastname' => 'sn',
'UserLogin' => 'sAMAccountName'
};

$Self->{CustomerUser1} = {
Name => 'Firma Customer',
Module => 'Kernel::System::CustomerUser::LDAP',
Params => {
Host => 'fileserver.AGKA.intern',
BaseDN => 'DC=AGKA,DC=intern',
SSCOPE => 'sub',
UserDN => 'CN=OTRS-AUTH,OU=IT-Serviceaccounts,OU=GBA,DC=AGKA,DC=intern',
UserPw => 'OTRS-AUTH',
AlwaysFilter => '(&(objectclass=user)(mail=*.*@Firma.de))',
# falls ihr was ausschliessen wollt:
# AlwaysFilter => '(&(objectclass=user)(mail=*.*@Firma.de)(!((was auch immer)))',
},
CustomerKey => 'sAMAccountName',
CustomerID => 'mail',
CustomerUserListFields => ['sAMAccountName', 'cn', 'mail'],
CustomerUserSearchFields => ['sAMAccountName', 'cn', 'mail'],
CustomerUserPostMasterSearchFields => ['mail'],
CustomerUserNameFields => ['givenname', 'sn'],
CustomerUserSearchListLimit => 1000,
# die Anzahl der User die in euerer Kundenübersicht maximal angezeit werden.
# die Zeile muss nicht rein, macht aber bei uns hier Sinn.

Map => [
[ 'UserSalutation', 'Title', 'title', 1, 0, 'var' ],
[ 'UserFirstname', 'Firstname', 'givenname', 1, 1, 'var' ],
[ 'UserLastname', 'Lastname', 'sn', 1, 1, 'var' ],
[ 'UserLogin', 'Login', 'sAMAccountName', 1, 1, 'var' ],
[ 'UserEmail', 'Email', 'mail', 1, 1, 'var' ],
[ 'UserCustomerID', 'CustomerID', 'mail', 0, 1, 'var' ],
[ 'UserPhone', 'Phone', 'telephonenumber', 1, 0, 'var' ],
],
};

#------------------------------------------------------------------------------------------------------------------------------#
# Firma Ende
#------------------------------------------------------------------------------------------------------------------------------#
################################################################################################################################


# jetzt solltet ihr eine LDAP Anbindung haben.
# Falls ihr mehr als 200 Kunden habt und denen Gruppen zuweisen wollt gukct mal hier:
# http://forums.otrs.org/viewtopic.php?f=17&t=7516
# das hat mich auch fast in den Wahnsinn getrieben, aber ist wie man sieht eigentlich ganz einfach:-)

# so ich hoffe das hilft dem ein oder anderen es schneller hinzubekommen und zu verstehen als ich
# kommetare hab ich da eingefügt wo ich die meisten Verständnisprobleme hatte.

# An alle die es besser wissen als ich:
# Ihr dürft mich gerne korrigieren oder das Script hier anpassen, ich bin für jede konstruktive Kritik dankbar.
#---------------------------------------------------------------------
# (The database DSN for PostgreSQL ==> more: "man DBD::Pg")
# if you want to use a local socket connection
# $Self->{DatabaseDSN} = "DBI:Pg:dbname=$Self->{Database};";
# if you want to use a tcpip connection
# $Self->{DatabaseDSN} = "DBI:Pg:dbname=$Self->{Database};host=$Self->{DatabaseHost};";

# ---------------------------------------------------- #
# fs root directory
# ---------------------------------------------------- #
$Self->{Home} = 'C:/PROGRA~2/OTRS/OTRS';

# ---------------------------------------------------- #
# insert your own config settings "here" #
# config settings taken from Kernel/Config/Defaults.pm #
# ---------------------------------------------------- #
# $Self->{SessionUseCookie} = 0;
# $Self->{CheckMXRecord} = 0;

# ---------------------------------------------------- #

# ---------------------------------------------------- #
# data inserted by installer #
# ---------------------------------------------------- #

$Self->{LogModule} = 'Kernel::System::Log::File';
$Self->{LogModule::LogFile} = 'C:/PROGRA~2/OTRS/OTRS/var/log/otrs.log';
# $DIBI$
$Self->{'DefaultCharset'} = 'utf-8';


# ---------------------------------------------------- #
# ---------------------------------------------------- #
# #
# End of your own config options!!! #
# #
# ---------------------------------------------------- #
# ---------------------------------------------------- #
}

# ---------------------------------------------------- #
# needed system stuff (don't edit this) #
# ---------------------------------------------------- #
use strict;
use warnings;

use vars qw(@ISA $VERSION);
$VERSION = qw($Revision: 1.23 $)[1];

use Kernel::Config::Defaults;
push (@ISA, 'Kernel::Config::Defaults');

# -----------------------------------------------------#

1;
paulemann
Znuny newbie
Posts: 18
Joined: 10 Nov 2011, 20:55
Znuny Version: 3.0.11
Location: Berlin

Re: Daten aus AD synchronisieren

Post by paulemann »

Hat sich erledigt.
Ich war der falschen Ansicht, das Kundendaten in dre DB stehen müssten, um die Notifikationtags (X-OTRS Header) nutzen zu können. Mit der LDAP Datenquelle funktioniert alles genauso gut. :D :D :D
Locked