OK, I finally got it working properly, here is my controller.php and ldapconfig.inc.php
controller.php (modified ldap parameters to bind to a database, and because I'm using AD, I changed my search filter to 'samaccountname' instead of uid.
Code:
<?php
//
// main php file for vBulletin authentication against LDAP
// (c) andreas sartori, 2006
//
error_reporting(E_ALL & ~E_NOTICE);
define('THIS_SCRIPT', 'controller.php');
// some basic requirements
require_once('./global.php');
require_once(DIR . '/includes/functions_login.php');
require_once(DIR . '/ldapAuth/ldapfunctions.inc.php');
require_once(DIR . '/ldapAuth/ldapconfig.inc.php');
// if login form is admin or moderator login, dont use ldap authentication
if(($vbulletin->GPC['logintype'] == "cplogin") || ($vbulletin->GPC['logintype'] == "modcplogin"))
{
return;
}
// if there is no password submitted, redirect to standard error
if ($vbulletin->GPC['vb_login_password'] == '')
{
eval(standard_error(fetch_error('badlogin', $vbulletin->options['bburl'], $vbulletin->session->vars['sessionurl'], $strikes)));
}
// create the ldap search filter
$ldapFilter = "(samaccountname=" . $vbulletin->GPC['vb_login_username'] .")";
// connect to the LDAP Server
$ldapConnection = ldap_connect($ldapServer, $ldapPort);
if($ldapConnection)
{
$ldapBind = ldap_bind($ldapConnection, $ldapBindUser, $ldapBindPassword);
// search for the username and get the DN
$searchDn=ldap_search($ldapConnection,$ldapBase,$ldapFilter);
$searchResult=ldap_get_entries($ldapConnection,$searchDn);
// if no user is found in ldap, redirect to standard error
if(sizeof($searchResult) < 2)
{
eval(standard_error(fetch_error('badlogin', $vbulletin->options['bburl'], $vbulletin->session->vars['sessionurl'],$strikes)));
}
// write the FIRST found DN to $bindDn;
$bindDn=$searchResult[0]['dn'];
// bind to the ldap server with specified credentials (dn, password)
$ldap_bind = @ldap_bind($ldapConnection, $bindDn, $vbulletin->GPC['vb_login_password']);
// close the server connection
ldap_close($ldapConnection);
// ldap bind did not succeed, wrong username/password combination
if ($ldap_bind != 1)
{
eval(standard_error(fetch_error('badlogin', $vbulletin->options['bburl'], $vbulletin->session->vars['sessionurl'], $strikes)));
}
else
{
// generate a template for vBulletin user database
$randomSalt=genSalt();
$randomPass=md5(crypt($randomSalt,$randomSalt));
$newuser =& datamanager_init('User', $vbulletin, ERRTYPE_ARRAY);
$newuser->set('username', $vbulletin->GPC['vb_login_username']);
// get the email address from ldap
$ldapConnection = ldap_connect($ldapServer, $ldapPort);
if($ldapConnection)
{
$ldapBind = ldap_bind($ldapConnection, $ldapBindUser, $ldapBindPassword);
$searchEmail=ldap_search($ldapConnection,$ldapBase,$ldapFilter, $ldapEmailAttr);
$userEmail=ldap_get_entries($ldapConnection,$searchEmail);
if(sizeof($userEmail) < 2)
{
$newuser->set('email', $noEmailExists);
}
else
{
$newuser->set('email', $userEmail[0]['mail'][0]);
}
}
ldap_close($ldapConnection);
$newuser->set('password', $randomPass);
$newuser->set('usergroupid', 2);
$newuser->pre_save();
// try to create the user in vBulletin; if it works save the dataset else just login
if (!empty($newuser->errors))
{
$vbulletin->GPC['vb_login_username']=$vbulletin->GPC['vb_login_username'];
$vbulletin->GPC['cookieuser']=$vbulletin->GPC['vb_login_username'];
verify_authentication($vbulletin->GPC['vb_login_username'], $vbulletin->GPC['cookieuser'], true);
exec_unstrike_user($vbulletin->GPC['vb_login_username']);
process_new_login($vbulletin->GPC['logintype'], $vbulletin->GPC['cookieuser'], $vbulletin->GPC['cssprefs']);
do_login_redirect();
}
else
{
$newuser->set_info('coppauser', false);
$vbulletin->userinfo['userid']
= $userid
= $newuser->save();
$vbulletin->GPC['vb_login_username']=$vbulletin->GPC['vb_login_username'];
$vbulletin->GPC['cookieuser']=$vbulletin->GPC['vb_login_username'];
verify_authentication($vbulletin->GPC['vb_login_username'], $vbulletin->GPC['cookieuser'], true);
exec_unstrike_user($vbulletin->GPC['vb_login_username']);
process_new_login($vbulletin->GPC['logintype'], $vbulletin->GPC['cookieuser'], $vbulletin->GPC['cssprefs']);
do_login_redirect();
}
}
}
?>
ldapconfig.inc.php (Add user bind and pass variable)
Code:
<?php
//
// ldap configuration for vBulletin authentication against LDAP
// (c) andreas sartori, 2006
//
error_reporting(E_ALL & ~E_NOTICE);
define('THIS_SCRIPT', 'ldapconfig.php');
// Server Settings
$ldapBindUser = "ldapuser";
$ldapBindPassword = "ilikeldap";
$ldapServer = "0.0.0.0";
$ldapPort = 389;
$ldapBase = "ou=users,dc=vbulletin,dc=org";
// Search Settings
$ldapEmailAttr = array( "mail" );
$noEmailExists = ""
?>
I hope this helps.