Customer Login über DB und LDAP (ADS Anbindung)

Hilfe zu OTRS Problemen aller Art
Post Reply
n4rF
Znuny newbie
Posts: 42
Joined: 20 Oct 2006, 16:05
Location: Offenbach am Main

Customer Login über DB und LDAP (ADS Anbindung)

Post by n4rF »

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?
n4rF
Znuny newbie
Posts: 42
Joined: 20 Oct 2006, 16:05
Location: Offenbach am Main

Post by n4rF »

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.
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.
Andre Bauer
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:

Post by Andre Bauer »

Was genau hast du angepasst?

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
n4rF
Znuny newbie
Posts: 42
Joined: 20 Oct 2006, 16:05
Location: Offenbach am Main

Post by n4rF »

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.

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;
   		}
		}
}
Post Reply