Auth DB + LDAP

Hilfe zu OTRS Problemen aller Art
Post Reply
JB
Znuny advanced
Posts: 102
Joined: 20 Feb 2006, 13:51

Auth DB + LDAP

Post by JB »

Hallo,

ist es nicht möglich als Auth eine DB und LDAP zu benutzen?

Hier meine Config.pm

Code: Select all

        #------------------------------------------------------#
        #  Customer Search Form Populator                      #
        #------------------------------------------------------#

        $Self->{CustomerUser1} = {
                Name => 'Firma AD',
                Module => 'Kernel::System::CustomerUser::LDAP',
                Params => {
                        # ldap host
                        Host => '192.168.1.1',
                        # ldap base dn
                        BaseDN => 'dc=Firma,dc=local',
                        # search scope (one|sub)
                        SSCOPE => 'sub',
                        # The following is valid but would only be necessary if the
                        # anonymous user does NOT have permission to read from the LDAP tree
                        # Absolutely necessary for Active Directory
                        UserDN => 'otrs@firma.local',
                        UserPw => 'password',
                },
                # customer uniq id
                CustomerKey => 'sAMAccountName',
                # customer #
                CustomerID => 'mail',
                CustomerUserListFields => ['givenname', 'sn', 'mail'],
                CustomerUserSearchFields => ['displayName','sAMAccountName','givenname', 'sn', 'mail','description'],
                CustomerUserPostMasterSearchFields => ['displayName','sAMAccountName','givenname','sn','mail','description'],
                CustomerUserNameFields => ['givenname', 'sn'],
                Map => [
                        # note: Login, Email and CustomerID needed!
                        # var, frontend, storage, shown, required, storage-type
                        [ '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' ],
                        [ 'UserAddress', 'Address', 'postaladdress', 1, 0, 'var' ],
                        [ 'UserComment', 'Comment', 'description', 1, 0, 'var' ],
                        ],
        };


        #------------------------------------------------------#
        #  Customer LDAP Authentication                        #
        #------------------------------------------------------#

    # This is an example configuration for an LDAP auth. backend.
    # (take care that Net::LDAP is installed!)
    $Self->{'Customer::AuthModule'} = 'Kernel::System::CustomerAuth::LDAP';
    $Self->{'Customer::AuthModule::LDAP::Host'} = '192.168.1.1';
    $Self->{'Customer::AuthModule::LDAP::BaseDN'} = 'dc=firma,dc=local';
    $Self->{'Customer::AuthModule::LDAP::UID'} = 'sAMAccountName';

    # Check if the user is allowed to auth in a posixGroup
    # (e. g. user needs to be in a group xyz to use otrs)
#       $Self->{'Customer::AuthModule::LDAP::GroupDN'} = 'cn=Firma,cn=Users,dc=domain,dc=com';
#       $Self->{'Customer::AuthModule::LDAP::AccessAttr'} = 'member';

    # The following is valid but would only be necessary if the
    # anonymous user do NOT have permission to read from the LDAP tree
    # Absolutely needed for active directory
    $Self->{'Customer::AuthModule::LDAP::SearchUserDN'} = 'otrs@Firma.local';
    $Self->{'Customer::AuthModule::LDAP::SearchUserPw'} = 'Password';

}

# --------------------------------------------------- #
# DB2 Datenbank                                          #
# --------------------------------------------------- #

  # CustomerUser
    # (customer user database backend and settings)
    $Self->{CustomerUser2} = {
        Name => 'TEST',
        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 uniq id
        CustomerKey => 'login',
        # customer #
        CustomerID => 'customer_id',
        CustomerValid => 'valid_id',
        CustomerUserListFields => ['login', 'first_name', 'last_name', 'email'],
        CustomerUserSearchFields => ['login', 'last_name', 'customer_id'],
        CustomerUserPostMasterSearchFields => ['email'],
        CustomerUserNameFields => ['salutation', 'first_name', 'last_name'],
        Map => [
            # note: Login, Email and CustomerID needed!
            # var, frontend, storage, shown, required, storage-type, http-link
            [ 'UserSalutation', 'Salutation', 'salutation', 1, 0, 'var' ],
            [ 'UserFirstname', 'Firstname', 'first_name', 1, 1, 'var' ],
            [ 'UserLastname', 'Lastname', 'last_name', 1, 1, 'var' ],
            [ 'UserLogin', 'Login', 'login', 1, 1, 'var' ],
            [ 'UserPassword', 'Password', 'pw', 0, 1, 'var' ],
            [ 'UserEmail', 'Email', 'email', 0, 1, 'var' ],
#            [ 'UserEmail', 'Email', 'email', 1, 1, 'var', '$Env{"CGIHandle"}?Action=\AgentCompose&ResponseID=1&TicketID=$Data{"TicketID"}&ArticleID=$Data{"ArticleID"}' ],
            [ 'UserCustomerID', 'CustomerID', 'customer_id', 0, 1, 'var' ],
            [ 'UserComment', 'Comment', 'comment', 1, 0, 'var' ],
            [ 'ValidID', 'Valid', 'valid_id', 0, 1, 'int' ],
        ],

    };

#$Self->{'Customer::AuthModule'} = 'Kernel::System::CustomerAuth::DB';
Weiß jemand wie man beides als Auth auswählen kann? Wäre ja schön blöd wenn man mehrere DB und LDAP nutzen kann, aber diese nicht zur Auth. benutzt werden können.

Danke!
JB
Znuny advanced
Posts: 102
Joined: 20 Feb 2006, 13:51

Post by JB »

Hi,

habe gerade selber rausgefunden das es nicht geht :cry:

Was ich relativ schade finde, und eigentlich nicht so sonderlich schwer wäre zu lösen. (Ah könnte ich nur Perl :roll: )

Ich habe im I-Net gefunden das man das Active Diretory mit der DB Syncen kann, und somit wäre mein Problem eigentlich gelöst.

Weiß zufällig jemand wie man das machen kann?
JB
Znuny advanced
Posts: 102
Joined: 20 Feb 2006, 13:51

Post by JB »

Code: Select all

#!/usr/bin/perl -w 
# -- 
# syncuser_csv2otrs.pl - sync csv user list or otrs 
# Copyright (C) 2001-2003 Martin Edenhofer <martin+code@otrs.org> 
# -- 
# $Id: syncuser_csv2otrs.pl,v 1.1 2003/03/02 13:45:09 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 
# -- 
  
# example of csv file (0;1;2;...) 
# [...] 
# me1;me1@example.com;Nils;Example;somepass;Mr.; 
# [...] 
  
# -- 
# config options / csv file - column 0-... 
# -- 
my %Fields = (); 
$Fields{Login} = 0; 
$Fields{Email} = 1; 
$Fields{Salutation} = 5; 
$Fields{Firstname} = 2; 
$Fields{Lastname} = 3; 
$Fields{Pw} = 4; 
  
# -- 
# 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 Getopt::Std; 
use Kernel::Config; 
use Kernel::System::Log; 
use Kernel::System::DB; 
use Kernel::System::User; 
# -- 
# common objects 
# -- 
my %CommonObject = (); 
$CommonObject{ConfigObject} = Kernel::Config->new(); 
$CommonObject{LogObject} = Kernel::System::Log->new( 
    LogPrefix => 'OTRS-syncuser_csv2otrs.pl', 
    %CommonObject 
); 
$CommonObject{DBObject} = Kernel::System::DB->new(%CommonObject); 
$CommonObject{UserObject} = Kernel::System::User->new(%CommonObject); 
# -- 
# get options 
# -- 
my %Opts = (); 
getopt('s',  \%Opts); 
my $End = "\n"; 
if (!$Opts{'s'}) { 
    die "Need -s <CSV_FILE>\n"; 
} 
# -- 
# read csv file 
# -- 
open (IN, "< $Opts{'s'}") || die "Can't read $Opts{'s'}: $!"; 
while (<IN>) { 
    my @Line = split(/;/, $_); 
    # check if user extsis 
    my %UserData = $CommonObject{UserObject}->GetUserData(User => $Line[$Fields{Login}]); 
    # if there is no pw in the csv list, gererate one 
    if (!$Line[$Fields{Pw}]) { 
        $Line[$Fields{Pw}] = $CommonObject{UserObject}->GenerateRandomPassword(); 
    } 
    # update user 
    if (%UserData) { 
        print "Update user '$Line[$Fields{Login}]'\n"; 
        $CommonObject{UserObject}->UserUpdate( 
            ID => $UserData{UserID}, 
            Salutation => $Line[$Fields{Salutation}], 
            Firstname => $Line[$Fields{Firstname}], 
            Lastname => $Line[$Fields{Lastname}], 
            Login => $Line[$Fields{Login}], 
            Pw => $Line[$Fields{Pw}], 
            Email => $Line[$Fields{Email}], 
            UserType => 'User', 
            ValidID => 1, 
            UserID => 1, 
        ); 
    } 
    # add user 
    else { 
        print "Add user '$Line[$Fields{Login}]'\n"; 
        $CommonObject{UserObject}->UserAdd( 
            Salutation => $Line[$Fields{Salutation}], 
            Firstname => $Line[$Fields{Firstname}], 
            Lastname => $Line[$Fields{Lastname}], 
            Login => $Line[$Fields{Login}], 
            Pw => $Line[$Fields{Pw}], 
            Email => $Line[$Fields{Email}], 
            UserType => 'User', 
            ValidID => 1, 
            UserID => 1, 
        ); 
    } 
} 
close (IN); 
Hier wäre das Script, aber leider importiert das Script die User in die Falsche DB Table. Und zwar landen die User unter System_user sollen aber in customer_user rein. Zufällig wer ne Idee wie man das umschreiben könnte.

P.S.: Ich führe hier irgendwie ein monolog, kaum user aktiv in diesem Board?
blackfox
Znuny expert
Posts: 187
Joined: 23 Jan 2006, 18:48
Znuny Version: 0

Post by blackfox »

hab mich selber noch nicht damit beschäftigt, aber ich weiß dass es in der Doku im Kapitel 9 Infos zum einbinden externer Backends, insbesondere für Kundenbenutzer gibt: http://doc.otrs.org/2.0/de/html/c1392.html

Schau mal ob du da fündig wirst.

@Monolog: ja, das gibts hier manchmal noch. Das Board existiert meines wissens nach erst seit Dezember und dementsprechend sind die Userzahlen noch relativ klein... Aber kannst ja effektiv dazu beitragen, dass es anderen etwas besser ergeht ;-)

Gruß, Ralf
JB
Znuny advanced
Posts: 102
Joined: 20 Feb 2006, 13:51

Post by JB »

blackfox wrote:hab mich selber noch nicht damit beschäftigt, aber ich weiß dass es in der Doku im Kapitel 9 Infos zum einbinden externer Backends, insbesondere für Kundenbenutzer gibt: http://doc.otrs.org/2.0/de/html/c1392.html

Schau mal ob du da fündig wirst.

Gruß, Ralf
Ne, das bringt mir leider nichts.

Ich habe vor, dass die Kunden aus Ihrem Active Directory eine CSV erstellen und ich die in die Datenbank einplegen kann.

Das Script tut genau das was ich will, nur leider in die falsche DB :cry:
blackfox
Znuny expert
Posts: 187
Joined: 23 Jan 2006, 18:48
Znuny Version: 0

Post by blackfox »

Dann könnte dieser Thread dein Freund sein. Insbesondere den Eintrag von spas_ vom 23.12. beachten.
Wie es da heißt ist die Lösung da aus der config.pm und dem oben genannten kapitel 9 zusammengestrickt.

Falls dir das nicht hilft kann ich dir leider auch nicht mehr weiterhelfen...
Gruß Ralf
JB
Znuny advanced
Posts: 102
Joined: 20 Feb 2006, 13:51

Post by JB »

Den thread kannte ich schon, nur kann ich mit LDAP nicht arbeiten da die Kunden wohl kaum Ihren AD öfffentlich zur Verfügung stellen würden!
blackfox
Znuny expert
Posts: 187
Joined: 23 Jan 2006, 18:48
Znuny Version: 0

Post by blackfox »

ah sorry, nicht dran gedacht....
bei uns ist OTRS intern, also um Anfragen zwischen den Abteilungen zu handeln, da ist das ja möglich - nur habe ich dabei vergessen über unseren Tellerrand hinausszuschauen.
Aber trotzdem nochmal die Nachfrage: du schriebst oben
Ich habe im I-Net gefunden das man das Active Diretory mit der DB Syncen kann, und somit wäre mein Problem eigentlich gelöst.
Wenn ich jetzt nicht gnadenlos falsch liege ist ein Active Directory ja eine LDAP-Verzeichnisstruktur, in dem Falle von Microsoft.
Wenn du tatsächlich kein LDAP als Datenquelle hast, woraus beziehst du deine Daten denn dann? Also von welcher Quelle willst du sie syncen? Prinzipiell müsste das ja ganz genauso funktionieren, lediglich das entsprechende Backend müsste ausgetauscht werden (oder ich habe dein Problem falsch verstanden)...
JB
Znuny advanced
Posts: 102
Joined: 20 Feb 2006, 13:51

Post by JB »

AD User in eine CSV Datei exportieren, und diese CSV Datei soll die User in die DB schreiben.

Das kann auch das Script unter $Home/scripts/syncuser_csv2otrs.pl

NUR

ist das problem das er die User in die TABLE "system_user" rein schreibt, statt wie gewollt in customer_user.

Mit bisschen Perl Kenntnissen sollte es eigentlich kein Problem sein, nur habe ich von Perl überhaupt keine Ahnung.
Post Reply