The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.

NAME

RT::Extension::LDAPImport - Import Users from an LDAP store

SYNOPSIS

    use RT::Extension::LDAPImport;

METHODS

connect_ldap

Relies on the config variables $RT::LDAPHost, $RT::LDAPUser and $RT::LDAPPassword being set in your RT Config files.

 Set(LDAPHost,'my.ldap.host')
 Set(LDAPUSER,'me');
 Set(LDAPPassword,'mypass');

LDAPUser and LDAPPassword can be blank, which will cause an anonymous bind.

LDAPHost can be a hostname or an ldap:// ldaps:// uri

Executes a search using the RT::LDAPFilter and RT::LDAPBase options.

LDAPBase is the DN to look under LDAPFilter is how you want to restrict the users coming back

Will connect to LDAP server using connect_ldap

import_users

Takes the results of the search from run_search and maps attributes from LDAP into RT::User attributes using $RT::LDAPMapping. Creates RT users if they don't already exist.

RT::LDAPMapping should be set in your RT_SiteConfig file and looks like this.

 Set($LDAPMapping, { RTUserField => LDAPField, RTUserField => LDAPField });

RTUserField is the name of a field on an RT::User object LDAPField can be a simple scalar and that attribute will be looked up in LDAP.

It can also be an arrayref, in which case each of the elements will be evaluated in turn. Scalars will be looked up in LDAP and concatenated together with a single space.

If the value is a sub reference, it will be executed. The sub should return a scalar, which will be examined. If it is a scalar, the value will be looked up in LDAP. If it is an arrayref, the values will be concatenated together with a single space.

_check_ldap_mapping

Returns true is there is an LDAPMapping configured, returns false, logs an error and disconnects from ldap if there is no mapping.

_build_user

Builds up user data from LDAP for importing Returns a hash of user data ready for RT::User::Create

_parse_ldap_map

Internal helper function for import_user If we're passed an arrayref, it will recurse over each of the elements in case one of them is another arrayref or subroutine.

If we're passed a subref, it executes the code and recurses over each of the returned values so that a returned array or arrayref will work.

If we're passed a scalar, returns that.

Returns a list of values that need to be concatenated together.

create_rt_user

Takes a hashref of args to pass to RT::User::Create Will try loading the user and will only create a new user if it can't find an existing user with the Name or EmailAddress arg passed in.

If the $LDAPUpdateUsers variable is true, data in RT will be clobbered with data in LDAP. Otherwise we will skip to the next user.

add_user_to_group

Adds new users to the group specified in the $LDAPGroupName variable (defaults to 'Imported from LDAP')

setup_group

Pulls the $LDAPGroupName object out of the DB or creates it if we ened to do so.

add_custom_field_value

Adds values to a Select (one|many) Custom Field. The Custom Field should already exist, otherwise this will throw an error and not import any data.

This could probably use some caching

disconnect_ldap

Disconnects from the LDAP server

Takes no arguments, returns nothing

Utility Functions

screendebug

We always log to the RT log file with level debug

This duplicates the messages to the screen

BUGS AND LIMITATIONS

No bugs have been reported.

Please report any bugs or feature requests to bug-rt-extension-ldapimport@rt.cpan.org, or through the web interface at http://rt.cpan.org.

AUTHOR

Kevin Falcone <falcone@bestpractical.com>

LICENCE AND COPYRIGHT

Copyright (c) 2007, Best Practical Solutions, LLC. All rights reserved.

This module is free software; you can redistribute it and/or modify it under the same terms as Perl itself. See perlartistic.

DISCLAIMER OF WARRANTY

BECAUSE THIS SOFTWARE IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY FOR THE SOFTWARE, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE SOFTWARE "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE SOFTWARE IS WITH YOU. SHOULD THE SOFTWARE PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR, OR CORRECTION.

IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR REDISTRIBUTE THE SOFTWARE AS PERMITTED BY THE ABOVE LICENCE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE SOFTWARE (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A FAILURE OF THE SOFTWARE TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.