'LDAP Server',
'basedn' => 'Base DN',
'servertype' => 'LDAP Server Type',
'domain' => 'LDAP Server Domain',
'searchuser' => 'LDAP Search User',
'searchpassword' => 'LDAP Search Password',
);
function saveConfig(&$oSource, $aRequest) {
return true;
}
function configFields($oSource) {
return array();
}
function showSource($oSource) {
$aConfig = unserialize($oSource->getConfig());
if (empty($aConfig)) {
$aConfig = array();
}
$sRet = "
\n";
foreach ($this->aConfigMap as $sSettingName => $sName) {
$sRet .= " - $sName
\n";
$sValue = KTUtil::arrayGet($aConfig, $sSettingName, "Unset");
$sRet .= " - " . $sValue . "
\n";
}
$sRet .= "
\n";
return $sRet;
}
function do_editSourceProvider() {
require_once(KT_LIB_DIR . '/widgets/fieldWidgets.php');
$this->oPage->setBreadcrumbDetails("editing LDAP settings");
$oTemplate = $this->oValidator->validateTemplate('ktstandard/authentication/ldapeditsource');
$iSourceId = KTUtil::arrayGet($_REQUEST, 'source_id');
$oSource = KTAuthenticationSource::get($iSourceId);
$fields = array();
$fields[] = new KTStringWidget('Server name', 'The host name or IP address of the LDAP server', 'servername', '', $this->oPage, true);
$fields[] = new KTStringWidget('Base DN', 'FIXME', 'basedn', '', $this->oPage, true);
$fields[] = new KTStringWidget('Server Type', 'FIXME', 'servertype', '', $this->oPage, true);
$fields[] = new KTStringWidget('Domain', 'FIXME', 'domain', '', $this->oPage, true);
$fields[] = new KTStringWidget('Search User', 'FIXME', 'searchuser', '', $this->oPage, true);
$fields[] = new KTStringWidget('Search Password', 'FIXME', 'searchpassword', '', $this->oPage, true);
$aTemplateData = array(
'context' => &$this,
'fields' => $fields,
'source' => $oSource,
);
return $oTemplate->render($aTemplateData);
}
function do_performEditSourceProvider() {
$iSourceId = KTUtil::arrayGet($_REQUEST, 'source_id');
$oSource = KTAuthenticationSource::get($iSourceId);
$aConfig = array();
foreach ($this->aConfigMap as $k => $v) {
$sValue = KTUtil::arrayGet($_REQUEST, $k);
if ($sValue) {
$aConfig[$k] = $sValue;
}
}
$oSource->setConfig(serialize($aConfig));
$oSource->update();
$this->successRedirectTo('viewsource', "Configuration updated", 'source_id=' . $oSource->getId());
}
function &getAuthenticatorForSource($oSource) {
$aConfig = unserialize($oSource->getConfig());
return new LDAPAuthenticator($aConfig['servername'],
$aConfig['basedn'], $aConfig['servertype'],
$aConfig['domain'], $aConfig['searchuser'],
$aConfig['searchpassword']);
}
}
class LDAPAuthenticator extends Authenticator {
/**
* The LDAP server to connect to
*/
var $sLdapServer;
/**
* The base LDAP DN to perform authentication against
*/
var $sBaseDN;
/**
* The LDAP accessor class
*/
var $oLdap;
/**
* Creates a new instance of the LDAPAuthenticator
*
* @param string the LDAP server to connect to for validation (optional)
* @param string the dn branch to perform the authentication against (optional)
* @param string the ldap server type (optional)
*/
function LDAPAuthenticator($sLdapServer = "", $sLdapDN = "", $sServerType = "", $sLdapDomain = "", $sSearchUser = "", $sSearchPassword = "") {
global $default;
$this->sLdapServer = strlen($sLdapServer) > 0 ? $sLdapServer : $default->ldapServer;
$this->sBaseDN = strlen($sLdapDN) > 0 ? $sLdapDN : $default->ldapRootDn;
$this->sServerType = strlen($sServerType) > 0 ? $sServerType : $default->ldapServerType;
$this->sLdapDomain = strlen($sLdapDomain) > 0 ? $sLdapDomain : $default->ldapDomain;
$this->sLdapDomain = strlen($sLdapDomain) > 0 ? $sLdapDomain : $default->ldapDomain;
$this->sSearchUser = strlen($sSearchUser) > 0 ? $sSearchUser : $default->ldapSearchUser;
$this->sSearchPassword = strlen($sSearchPassword) > 0 ? $sSearchPassword : $default->ldapSearchPassword;
// initialise and setup ldap class
$this->oLdap = new AuthLdap($this->sLdapServer, $this->sBaseDN, $this->sServerType, $this->sLdapDomain, $this->sSearchUser, $this->sSearchPassword);
}
/**
* Checks the user's password against the LDAP directory
*
* @param string the name of the user to check
* @param string the password to check
* @return boolean true if the password is correct, else false
*/
function checkPassword($sUserName, $sPassword) {
global $default;
if ($this->oLdap->connect()) {
// lookup dn from username - must exist in db
$sBindDn = lookupField($default->users_table, "ldap_dn", "username", $sUserName);
if ($sBindDn && $sPassword) {
if ( $this->oLdap->authBind($sBindDn, $sPassword) ) {
return true;
} else {
$_SESSION["errorMessage"] = "LDAP error: (" . $this->oLdap->ldapErrorCode . ") " . $this->oLdap->ldapErrorText;
return false;
}
} else {
// no ldap_dn for this user, so reject this authentication attempt
$_SESSION["errorMessage"] = "Username $sUserName does not not exist in the DMS. Please contact the System Administrator for assistance.";
return false;
}
} else {
$_SESSION["errorMessage"] = "LDAP error: (" . $this->oLdap->ldapErrorCode . ") " . $this->oLdap->ldapErrorText;
return false;
}
}
/**
* Searched the directory for a specific user
*
* @param string the username to search for
* @param array the attributes to return from the search
* @return array containing the users found
*/
function getUser($sUserName, $aAttributes) {
global $default;
// connect and search
if ( $this->oLdap->connect() ) {
// search for the users
// append and prepend wildcards
$aUserResults = $this->oLdap->getUsers($sUserName, $aAttributes);
if ($aUserResults) {
// return the array
return $aUserResults;
} else {
// the search failed, return empty array
return array();
}
} else {
$_SESSION["errorMessage"] = "LDAP error: (" . $this->oLdap->ldapErrorCode . ") " . $this->oLdap->ldapErrorText;
return false;
}
}
/**
* Searches the LDAP directory for users matching the supplied search string.
*
* @param string the username to search for
* @param array the attributes to return from the search
* @return array containing the users found
*/
function searchUsers($sUserNameSearch, $aAttributes) {
global $default;
// connect and search
if ( $this->oLdap->connect() ) {
// search for the users
// append and prepend wildcards
$aUserResults = $this->oLdap->getUsers("*" . $sUserNameSearch . "*", $aAttributes);
if ($aUserResults) {
// return the array
return $aUserResults;
} else {
// the search failed, return empty array
return array();
}
} else {
$default->log->error("LDAPAuthentication::searchUsers LDAP error: (" . $this->oLdap->ldapErrorCode . ") " . $this->oLdap->ldapErrorText);
return false;
}
}
}