Hello guys, I'm having the following error when logging in with any Active Directory user on RT:
Can't call method "as_string" on an undefined value at /opt/rt4/local/plugins/RT-Authen-ExternalAuth/lib/RT/Authen/ExternalAuth/LDAP.pm line 304. I've followed instructions at http://requesttracker.wikia.com/wiki/ExternalAuth to set this up. My /opt/rt4/etc/RT_SiteConfig.pm is as follows: Set( $DatabaseUser, 'rt_user' ); Set( $CorrespondAddress, '' ); Set( $rtname, 'galileu.pt' ); Set( $DatabaseRequireSSL, '' ); Set( $WebPort, '8080' ); Set( $Organization, 'galileu.pt' ); Set( $DatabaseType, 'mysql' ); Set( $DatabasePort, '' ); Set( $DatabasePassword, 'db_password' ); Set( $DatabaseAdmin, 'root' ); Set( $SendmailPath, '/usr/sbin/sendmail' ); Set( $WebDomain, 'debian' ); Set( $DatabaseAdminPassword, 'db_password' ); Set( $CommentAddress, '' ); Set( $DatabaseHost, 'localhost' ); Set( $DatabaseName, 'rt4' ); Set( $OwnerEmail, 'root@localhost' ); Set( @Plugins, qw(RT::Authen::ExternalAuth) ); Set($ExternalAuthPriority, [ 'My_LDAP', 'My_MySQL', 'My_SSO_Cookie' ] ); Set($ExternalInfoPriority, [ 'My_MySQL', 'My_LDAP' ] ); Set($ExternalServiceUsesSSLorTLS, 0); Set($AutoCreateNonExternalUsers, 0); Set($ExternalSettings, { # AN EXAMPLE DB SERVICE 'My_MySQL' => { ## GENERIC SECTION # The type of service (db/ldap/cookie) 'type' => 'db', # The server hosting the service 'server' => 'localhost', ## SERVICE-SPECIFIC SECTION # The database name 'database' => 'rt4', # The database table 'table' => 'USERS_TABLE', # The user to connect to the database as 'user' => 'DB_USER', # The password to use to connect with 'pass' => 'DB_PASS', # The port to use to connect with (e.g. 3306) 'port' => 'DB_PORT', # The name of the Perl DBI driver to use (e.g. mysql) 'dbi_driver' => 'DBI_DRIVER', # The field in the table that holds usernames 'u_field' => 'username', # The field in the table that holds passwords 'p_field' => 'password', # The Perl package & subroutine used to encrypt passwords # e.g. if the passwords are stored using the MySQL v3.23 "PASSWORD" # function, then you will need Crypt::MySQL::password, but for the # MySQL4+ password function you will need Crypt::MySQL::password41 # Alternatively, you could use Digest::MD5::md5_hex or any other # encryption subroutine you can load in your perl installation 'p_enc_pkg' => 'Crypt::MySQL', 'p_enc_sub' => 'password', # If your p_enc_sub takes a salt as a second parameter, # uncomment this line to add your salt #'p_salt' => 'SALT', # # The field and values in the table that determines if a user should # be disabled. For example, if the field is 'user_status' and the values # are ['0','1','2','disabled'] then the user will be disabled if their # user_status is set to '0','1','2' or the string 'disabled'. # Otherwise, they will be considered enabled. 'd_field' => 'disabled', 'd_values' => ['0'], ## RT ATTRIBUTE MATCHING SECTION # The list of RT attributes that uniquely identify a user 'attr_match_list' => [ 'Gecos', 'Name' ], # The mapping of RT attributes on to field names 'attr_map' => { 'Name' => 'username', 'EmailAddress' => 'email', 'ExternalAuthId' => 'username', 'Gecos' => 'userID' } }, # AN EXAMPLE LDAP SERVICE 'My_LDAP' => { ## GENERIC SECTION # The type of service (db/ldap/cookie) 'type' => 'ldap', # The server hosting the service 'server' => 'jupiter.galileu-f.galileu.pt', ## SERVICE-SPECIFIC SECTION # If you can bind to your LDAP server anonymously you should # remove the user and pass config lines, otherwise specify them here: # # The username RT should use to connect to the LDAP server 'user' => 'ldap_domainadmin', # The password RT should use to connect to the LDAP server 'pass' => 'ldap_password', # # The LDAP search base 'base' => 'dc=galileu-f,dc=galileu,dc=pt', # # ALL FILTERS MUST BE VALID LDAP FILTERS ENCASED IN PARENTHESES! # YOU **MUST** SPECIFY A filter AND A d_filter!! # # The filter to use to match RT-Users 'filter' => 'objectClass=*', # A catch-all example filter: '(objectClass=*)' # # The filter that will only match disabled users 'd_filter' => 'UserAccountControl:1.2.840.113556.1.4.803:=2', # A catch-none example d_filter: '(objectClass=FooBarBaz)' # # Should we try to use TLS to encrypt connections? 'tls' => 0, # SSL Version to provide to Net::SSLeay *if* using SSL 'ssl_version' => 3, # What other args should I pass to Net::LDAP->new($host,@args)? 'net_ldap_args' => [ version => 3 , port => 3268 ], # Does authentication depend on group membership? What group name? #'group' => 'GROUP_NAME', # What is the attribute for the group object that determines membership? #'group_attr' => 'GROUP_ATTR', ## RT ATTRIBUTE MATCHING SECTION # The list of RT attributes that uniquely identify a user # This example shows what you *can* specify.. I recommend reducing this # to just the Name and EmailAddress to save encountering problems later. 'attr_match_list' => [ 'Name', 'EmailAddress', 'RealName', 'WorkPhone', 'Address2' ], # The mapping of RT attributes on to LDAP attributes 'attr_map' => { 'Name' => 'sAMAccountName', 'EmailAddress' => 'mail', 'Organization' => 'physicalDeliveryOfficeName', 'RealName' => 'cn', 'ExternalAuthId' => 'sAMAccountName', 'Gecos' => 'sAMAccountName', 'WorkPhone' => 'telephoneNumber', 'Address1' => 'streetAddress', 'City' => 'l', 'State' => 'st', 'Zip' => 'postalCode', 'Country' => 'co' } }, # An example SSO cookie service 'My_SSO_Cookie' => { # # The type of service (db/ldap/cookie) 'type' => 'cookie', # The name of the cookie to be used 'name' => 'loginCookieValue', # The users table 'u_table' => 'users', # The username field in the users table 'u_field' => 'username', # The field in the users table that uniquely identifies a user # and also exists in the cookies table 'u_match_key' => 'userID', # The cookies table 'c_table' => 'login_cookie', # The field that stores cookie values 'c_field' => 'loginCookieValue', # The field in the cookies table that uniquely identifies a user # and also exists in the users table 'c_match_key' => 'loginCookieUserID', # The DB service in this configuration to use to lookup the cookie information 'db_service_name' => 'My_MySQL' } } ); 1; Am I missing something? Thanks for your cooperation. Best regards, Bruno Martins -------- RT Training Sessions (http://bestpractical.com/services/training.html) * Boston March 5 & 6, 2012