Servus,
ich möchte gerne den Customer Login über DB und LDAP laufen lassen, da externe Kunden in der DB und Mitarbeiter über LDAP verwalten möchte.
LDAP funktioniert einwandfrei, doch wenn ich beide benutzen möchte, wie im
Wiki-Eintrag http://wiki.otrs-forum.de/index.php?tit ... omer_Login beschrieben, geht entweder der Login nur über DB oder LDAP. Ist abhängig, was in SysConfig üner Frontend::Customer::Auth eingestellt ist.
Wir setzen bei uns OTRS 2.0.4 ein.
Kennt jemand das Prob und hat'ne Lösung parat?
Customer Login über DB und LDAP (ADS Anbindung)
Servus,
Problem hat sich erledigt. Ich habe festgestellt, dass ich die CustomerAuth.pm anpassen muss, um eine Authentifizierung über LDAP und DB zu ermöglichen.
Problem hat sich erledigt. Ich habe festgestellt, dass ich die CustomerAuth.pm anpassen muss, um eine Authentifizierung über LDAP und DB zu ermöglichen.
You do not have the required permissions to view the files attached to this post.
Last edited by n4rF on 07 Nov 2006, 11:24, edited 2 times in total.
-
- Znuny guru
- Posts: 2189
- Joined: 08 Dec 2005, 17:01
- Znuny Version: 5.0.x
- Real Name: André Bauer
- Company: Magix Software GmbH
- Location: Dresden
- Contact:
Was genau hast du angepasst?
Eventuell wär das ja auch einen Eintrag im Bugtracker wert...
Eventuell wär das ja auch einen Eintrag im Bugtracker wert...
Prod: Ubuntu Server 16.04 / Zammad 1.2
DO NOT PM ME WITH OTRS RELATED QUESTIONS! ASK IN THE FORUMS!
OtterHub.org
DO NOT PM ME WITH OTRS RELATED QUESTIONS! ASK IN THE FORUMS!
OtterHub.org
Zur Funktionsweise, ich erstelle CustomerAuth::DB und ein CustomerAuth::LDAP Objekt.
Bei der Authentifizierung wird versucht den Customer über die DB zu authentifizieren, schlägt dies fehl, wird versucht ihn über LDAP zu authentifizieren. Wenn alles fehlschlägt, wird nichts zurück gegeben.
Bei der Authentifizierung wird versucht den Customer über die DB zu authentifizieren, schlägt dies fehl, wird versucht ihn über LDAP zu authentifizieren. Wenn alles fehlschlägt, wird nichts zurück gegeben.
Code: Select all
package Kernel::System::CustomerAuth;
use strict;
use Kernel::System::CustomerUser;
use Kernel::System::CustomerAuth::DB; #Hinzugefügt
use Kernel::System::CustomerAuth::LDAP; #Hinzugefügt
use vars qw(@ISA $VERSION);
$VERSION = '$Revision: 1.6 $';
$VERSION =~ s/^\$.*:\W(.*)\W.+?$/$1/;
# --
sub new {
my $Type = shift;
my %Param = @_;
# allocate new hash for object
my $Self = {};
bless ($Self, $Type);
# check needed objects
foreach (qw(LogObject ConfigObject DBObject)) {
$Self->{$_} = $Param{$_} || die "No $_!";
}
# get customer user object to validate customers
$Self->{CustomerUserObject} = Kernel::System::CustomerUser->new(%Param);
# load generator auth module
my $GeneratorModule = 'Kernel::System::CustomerAuth::DB'; #Geändert: DB wird zuerst für die Authentifizierung benutzt
my $GeneratorModule2 = 'Kernel::System::CustomerAuth::LDAP'; #Hinzugefügt
eval "require $GeneratorModule";
eval "require $GeneratorModule2"; #Hinzugefügt
$Self->{Backend} = $GeneratorModule->new(%Param);
$Self->{Backend2} = $GeneratorModule2->new(%Param); #CustomerAuth::LDAP Objekt wird erzeugt
return $Self;
}
# --
sub GetOption {
my $Self = shift;
my %Param = @_;
my $Option = $Self->{Backend}->GetOption(%Param); #Option werden in einer seperaten Variable gespeichert
if($Option) { #Überprüfe ob Option über DB verfügbar
return $Option;
}
else { #Wenn nicht, über LDAP versuchen
$Option = $Self->{Backend2}->GetOption(%Param);
return $Option;
}
}
# --
sub Auth {
my $Self = shift;
my %Param = @_;
# auth. request against backend
my $User = $Self->{Backend}->Auth(%Param);
# if recorde exists, check if user is vaild
if ($User) {
my %CustomerData = $Self->{CustomerUserObject}->CustomerUserDataGet(User => $User);
if (defined($CustomerData{ValidID}) && $CustomerData{ValidID} ne 1) {
$Self->{LogObject}->Log(
Priority => 'notice',
Message => "CustomerUser: '$User' is set to invalid, can't login!",
);
return;
}
else {
return $User;
}
}
else { #Geändert: Customer wurde nicht in der DB gefunden
$User = $Self->{Backend2}->Auth(%Param); #Hinzugefügt: Versuchen, Customer über LDAP zu authentifizieren
#Wenn's geklappt hat, Customer Daten holen
if ($User) {
my %CustomerData = $Self->{CustomerUserObject}->CustomerUserDataGet(User => $User);
if (defined($CustomerData{ValidID}) && $CustomerData{ValidID} ne 1) {
$Self->{LogObject}->Log(
Priority => 'notice',
Message => "CustomerUser: '$User' is set to invalid, can't login!",
);
return;
}
else {
return $User;
}
}
else { #Wenn Customer nicht in DB und LDAP, dann nichts zurück geben
return;
}
}
}