/** * Constructor * * @access public * @param array array of pear parameters * */ public function __construct() { global $ilLog; include_once 'Services/LDAP/classes/class.ilLDAPServer.php'; $this->server = new ilLDAPServer(ilLDAPServer::_getFirstActiveServer()); $this->log = $ilLog; parent::__construct($this->server->toPearAuthArray()); }
/** * Get default global role * @return */ public static function getDefaultRole() { if (self::$default_role) { return self::$default_role; } include_once './Services/LDAP/classes/class.ilLDAPAttributeMapping.php'; include_once './Services/LDAP/classes/class.ilLDAPServer.php'; return self::$default_role = ilLDAPAttributeMapping::_lookupGlobalRole(ilLDAPServer::_getFirstActiveServer()); }
/** * Deactivate users that are disabled in LDAP * * @access private * */ private function deactivateUsers(ilLDAPServer $server, $a_ldap_users) { include_once './Services/User/classes/class.ilObjUser.php'; foreach ($ext = ilObjUser::_getExternalAccountsByAuthMode($server->getAuthenticationMappingKey(), true) as $usr_id => $external_account) { if (!array_key_exists($external_account, $a_ldap_users)) { $inactive[] = $usr_id; } } if (count($inactive)) { ilObjUser::_toggleActiveStatusOfUsers($inactive, false); $this->log->write('LDAP: Found ' . count($inactive) . ' inactive users.'); } else { $this->log->write('LDAP: No inactive users found'); } }
/** * Handle ldap as data source * @param Auth $auth * @param string $ext_account */ protected function handleLDAPDataSource($a_auth, $ext_account) { include_once './Services/LDAP/classes/class.ilLDAPServer.php'; $server = ilLDAPServer::getInstanceByServerId(ilLDAPServer::getDataSource(AUTH_RADIUS)); $GLOBALS['ilLog']->write(__METHOD__ . 'Using ldap data source'); include_once './Services/LDAP/classes/class.ilLDAPUserSynchronisation.php'; $sync = new ilLDAPUserSynchronisation('radius', $server->getServerId()); $sync->setExternalAccount($ext_account); $sync->setUserData(array()); $sync->forceCreation($this->force_creation); try { $internal_account = $sync->sync(); } catch (UnexpectedValueException $e) { $GLOBALS['ilLog']->write(__METHOD__ . ': Login failed with message: ' . $e->getMessage()); $a_auth->status = AUTH_WRONG_LOGIN; $a_auth->logout(); return false; } catch (ilLDAPSynchronisationForbiddenException $e) { // No syncronisation allowed => create Error $GLOBALS['ilLog']->write(__METHOD__ . ': Login failed with message: ' . $e->getMessage()); $a_auth->status = AUTH_RADIUS_NO_ILIAS_USER; $a_auth->logout(); return false; } catch (ilLDAPAccountMigrationRequiredException $e) { $GLOBALS['ilLog']->write(__METHOD__ . ': Starting account migration.'); $a_auth->logout(); ilUtil::redirect('ilias.php?baseClass=ilStartUpGUI&cmdClass=ilstartupgui&cmd=showAccountMigration'); } $a_auth->setAuth($internal_account); return true; }
/** * display settings menu * * @access public */ function authSettingsObject() { global $rbacsystem, $ilSetting; if (!$rbacsystem->checkAccess("visible,read", $this->object->getRefId())) { $this->ilias->raiseError($this->lng->txt("permission_denied"), $this->ilias->error_obj->MESSAGE); } $this->tabs_gui->setTabActive('authentication_settings'); $this->setSubTabs('authSettings'); $this->tabs_gui->setSubTabActive("auth_settings"); $this->tpl->addBlockFile("ADM_CONTENT", "adm_content", "tpl.auth_general.html", "Services/Authentication"); $this->tpl->setVariable("FORMACTION", $this->ctrl->getFormAction($this)); $this->tpl->setVariable("TXT_AUTH_TITLE", $this->lng->txt("auth_select")); $this->tpl->setVariable("TXT_AUTH_MODE", $this->lng->txt("auth_mode")); $this->tpl->setVariable("TXT_AUTH_DEFAULT", $this->lng->txt("default")); $this->tpl->setVariable("TXT_AUTH_ACTIVE", $this->lng->txt("active")); $this->tpl->setVariable("TXT_AUTH_NUM_USERS", $this->lng->txt("num_users")); $this->tpl->setVariable("TXT_LOCAL", $this->lng->txt("auth_local")); $this->tpl->setVariable("TXT_LDAP", $this->lng->txt("auth_ldap")); $this->tpl->setVariable("TXT_SHIB", $this->lng->txt("auth_shib")); $this->tpl->setVariable("TXT_CAS", $this->lng->txt("auth_cas")); $this->tpl->setVariable("TXT_RADIUS", $this->lng->txt("auth_radius")); $this->tpl->setVariable("TXT_SCRIPT", $this->lng->txt("auth_script")); $this->tpl->setVariable("TXT_APACHE", $this->lng->txt("auth_apache")); $auth_cnt = ilObjUser::_getNumberOfUsersPerAuthMode(); $auth_modes = ilAuthUtils::_getAllAuthModes(); foreach ($auth_modes as $mode => $mode_name) { //echo "-".$ilSetting->get('auth_mode')."-".$mode."-"; if ($ilSetting->get('auth_mode') == $mode) { $this->tpl->setVariable("NUM_" . strtoupper($mode_name), (int) $auth_cnt[$mode_name] + $auth_cnt["default"] . " (" . $this->lng->txt("auth_per_default") . ": " . $auth_cnt["default"] . ")"); } else { $this->tpl->setVariable("NUM_" . strtoupper($mode_name), (int) $auth_cnt[$mode_name]); } } $this->tpl->setVariable("TXT_CONFIGURE", $this->lng->txt("auth_configure")); $this->tpl->setVariable("TXT_AUTH_REMARK", $this->lng->txt("auth_remark_non_local_auth")); $this->tpl->setVariable("TXT_SUBMIT", $this->lng->txt("save")); $this->tpl->setVariable("CMD_SUBMIT", "setAuthMode"); // local vars $checked = "checked=\"checked\""; $disabled = "disabled=\"disabled\""; $style_disabled = "_disabled"; // icon handlers $icon_ok = "<img src=\"" . ilUtil::getImagePath("icon_ok.svg") . "\" alt=\"" . $this->lng->txt("enabled") . "\" title=\"" . $this->lng->txt("enabled") . "\" border=\"0\" vspace=\"0\"/>"; $icon_not_ok = "<img src=\"" . ilUtil::getImagePath("icon_not_ok.svg") . "\" alt=\"" . $this->lng->txt("disabled") . "\" title=\"" . $this->lng->txt("disabled") . "\" border=\"0\" vspace=\"0\"/>"; $this->tpl->setVariable("AUTH_LOCAL_ACTIVE", $icon_ok); include_once 'Services/LDAP/classes/class.ilLDAPServer.php'; $this->tpl->setVariable('AUTH_LDAP_ACTIVE', count(ilLDAPServer::_getActiveServerList()) ? $icon_ok : $icon_not_ok); #$this->tpl->setVariable("AUTH_LDAP_ACTIVE", $this->ilias->getSetting('ldap_active') ? $icon_ok : $icon_not_ok); $this->tpl->setVariable("AUTH_RADIUS_ACTIVE", $this->ilias->getSetting('radius_active') ? $icon_ok : $icon_not_ok); $this->tpl->setVariable("AUTH_SHIB_ACTIVE", $this->ilias->getSetting('shib_active') ? $icon_ok : $icon_not_ok); $this->tpl->setVariable("AUTH_SCRIPT_ACTIVE", $this->ilias->getSetting('script_active') ? $icon_ok : $icon_not_ok); $this->tpl->setVariable("AUTH_CAS_ACTIVE", $this->ilias->getSetting('cas_active') ? $icon_ok : $icon_not_ok); $this->tpl->setVariable("AUTH_APACHE_ACTIVE", $this->ilias->getSetting('apache_active') ? $icon_ok : $icon_not_ok); // alter style and disable buttons depending on current selection switch ($this->ilias->getSetting('auth_mode')) { case AUTH_LOCAL: // default $this->tpl->setVariable("CHK_LOCAL", $checked); break; case AUTH_LDAP: // LDAP $this->tpl->setVariable("CHK_LDAP", $checked); break; case AUTH_SHIBBOLETH: // SHIB $this->tpl->setVariable("CHK_SHIB", $checked); break; case AUTH_RADIUS: // RADIUS $this->tpl->setVariable("CHK_RADIUS", $checked); break; case AUTH_CAS: // CAS $this->tpl->setVariable("CHK_CAS", $checked); break; case AUTH_SCRIPT: // script $this->tpl->setVariable("CHK_SCRIPT", $checked); break; case AUTH_APACHE: // apache $this->tpl->setVariable("CHK_APACHE", $checked); break; } // auth mode determinitation if ($this->initAuthModeDetermination()) { $this->tpl->setVariable('TABLE_AUTH_DETERMINATION', $this->form->getHTML()); } // roles table $this->tpl->setVariable("FORMACTION_ROLES", $this->ctrl->getFormAction($this)); $this->tpl->setVariable("TXT_AUTH_ROLES", $this->lng->txt("auth_active_roles")); $this->tpl->setVariable("TXT_ROLE", $this->lng->txt("obj_role")); $this->tpl->setVariable("TXT_ROLE_AUTH_MODE", $this->lng->txt("auth_role_auth_mode")); $this->tpl->setVariable("CMD_SUBMIT_ROLES", "updateAuthRoles"); include_once "./Services/AccessControl/classes/class.ilObjRole.php"; $reg_roles = ilObjRole::_lookupRegisterAllowed(); // auth mode selection include_once './Services/Authentication/classes/class.ilAuthUtils.php'; $active_auth_modes = ilAuthUtils::_getActiveAuthModes(); foreach ($reg_roles as $role) { foreach ($active_auth_modes as $auth_name => $auth_key) { // do not list auth modes with external login screen // even not default, because it can easily be set to // a non-working auth mode if ($auth_name == "default" || $auth_name == "cas" || $auth_name == "shibboleth" || $auth_name == 'ldap' || $auth_name == 'apache' || $auth_name == "ecs" || $auth_name == "openid") { continue; } $this->tpl->setCurrentBlock("auth_mode_selection"); if ($auth_name == 'default') { $name = $this->lng->txt('auth_' . $auth_name) . " (" . $this->lng->txt('auth_' . ilAuthUtils::_getAuthModeName($auth_key)) . ")"; } else { $name = $this->lng->txt('auth_' . $auth_name); } $this->tpl->setVariable("AUTH_MODE_NAME", $name); $this->tpl->setVariable("AUTH_MODE", $auth_name); if ($role['auth_mode'] == $auth_name) { $this->tpl->setVariable("SELECTED_AUTH_MODE", "selected=\"selected\""); } $this->tpl->parseCurrentBlock(); } // END auth_mode selection $this->tpl->setCurrentBlock("roles"); $this->tpl->setVariable("ROLE", $role['title']); $this->tpl->setVariable("ROLE_ID", $role['id']); $this->tpl->parseCurrentBlock(); } }
/** * Create user account * @param type $a_person_id */ private function createMember($a_person_id) { try { include_once './Services/LDAP/classes/class.ilLDAPServer.php'; $server = ilLDAPServer::getInstanceByServerId(ilLDAPServer::_getFirstActiveServer()); $server->doConnectionCheck(); include_once './Services/LDAP/classes/class.ilLDAPQuery.php'; $query = new ilLDAPQuery($server); $query->bind(IL_LDAP_BIND_DEFAULT); $users = $query->fetchUser($a_person_id); if ($users) { include_once './Services/LDAP/classes/class.ilLDAPAttributeToUser.php'; $xml = new ilLDAPAttributeToUser($server); $xml->setNewUserAuthMode($server->getAuthenticationMappingKey()); $xml->setUserData($users); $xml->refresh(); } } catch (ilLDAPQueryException $exc) { $this->log->write($exc->getMessage()); } }
private function initServer() { include_once './Services/LDAP/classes/class.ilLDAPServer.php'; if (!$_GET['ldap_server_id']) { $_GET['ldap_server_id'] = ilLDAPServer::_getFirstServer(); } $this->server = new ilLDAPServer((int) $_GET['ldap_server_id']); }
/** * Check if user is member of specific group * * @access private * @param array user data * @param array user_data * */ private function isGroupMember($a_user_data) { global $ilLog; if ($this->isMemberAttributeDN()) { $user_cmp = $a_user_data['dn']; } else { $user_cmp = $a_user_data['ilExternalAccount']; } include_once 'Services/LDAP/classes/class.ilLDAPQuery.php'; include_once 'Services/LDAP/classes/class.ilLDAPServer.php'; $server = ilLDAPServer::getInstanceByServerId(ilLDAPServer::_getFirstActiveServer()); try { $query = new ilLDAPQuery($server); $query->bind(); $res = $query->query($this->getDN(), sprintf('(%s=%s)', $this->getMemberAttribute(), $user_cmp), IL_LDAP_SCOPE_BASE, array('dn')); return $res->numRows() ? true : false; } catch (ilLDAPQueryException $e) { $ilLog->write(__METHOD__ . ': Caught Exception: ' . $e->getMessage()); return false; } }
/** * Check if there is any active server with * * @access private * @param * */ private function initServers() { $server_ids = ilLDAPServer::_getRoleSyncServerIds(); if (!count($server_ids)) { return false; } // Init servers include_once 'Services/LDAP/classes/class.ilLDAPRoleGroupMappingSettings.php'; $this->active_servers = true; $this->mappings = array(); foreach ($server_ids as $server_id) { $this->servers[$server_id] = new ilLDAPServer($server_id); $this->mappings = ilLDAPRoleGroupMappingSettings::_getAllActiveMappings(); } $this->mapping_info = array(); $this->mapping_info_strict = array(); foreach ($this->mappings as $mapping) { foreach ($mapping as $key => $data) { if (strlen($data['info']) and $data['object_id']) { $this->mapping_info[$data['object_id']][] = $data['info']; } if (strlen($data['info']) && $data['info_type'] == ilLDAPRoleGroupMappingSettings::MAPPING_INFO_ALL) { $this->mapping_info_strict[$data['object_id']][] = $data['info']; } } } $this->users = ilObjUser::_getExternalAccountsByAuthMode('ldap', true); return true; }
/** * Read settings * * @access private * @param * */ private function read() { global $ilSetting; $this->kind = $this->settings->get('kind', self::TYPE_MANUAL); include_once 'Services/LDAP/classes/class.ilLDAPServer.php'; $ldap_active = ilLDAPServer::_getFirstActiveServer(); include_once 'Services/Radius/classes/class.ilRadiusSettings.php'; $rad_settings = ilRadiusSettings::_getInstance(); $rad_active = $rad_settings->isActive(); $soap_active = $ilSetting->get('soap_auth_active', false); // apache settings $apache_settings = new ilSetting('apache_auth'); $apache_active = $apache_settings->get('apache_enable_auth'); // Check if active for ($i = 0; $i < 5; $i++) { if ($auth_mode = $this->settings->get((string) $i, 0)) { switch ($auth_mode) { case AUTH_LOCAL: $this->position[] = $auth_mode; break; case AUTH_LDAP: if ($ldap_active) { $this->position[] = $auth_mode; } break; case AUTH_RADIUS: if ($rad_active) { $this->position[] = $auth_mode; } break; case AUTH_SOAP: if ($soap_active) { $this->position[] = $auth_mode; } break; case AUTH_APACHE: if ($apache_active) { $this->position[] = $auth_mode; } break; } } } // Append missing active auth modes if (!in_array(AUTH_LOCAL, $this->position)) { $this->position[] = AUTH_LOCAL; } if ($ldap_active) { if (!in_array(AUTH_LDAP, $this->position)) { $this->position[] = AUTH_LDAP; } } if ($rad_active) { if (!in_array(AUTH_RADIUS, $this->position)) { $this->position[] = AUTH_RADIUS; } } if ($soap_active) { if (!in_array(AUTH_SOAP, $this->position)) { $this->position[] = AUTH_SOAP; } } if ($apache_active) { if (!in_array(AUTH_APACHE, $this->position)) { $this->position[] = AUTH_APACHE; } } }
/** * Check if an external account name is required. * That's the case if Radius,LDAP, CAS or SOAP is active * * @access public * @static * * @param */ public static function _isExternalAccountEnabled() { global $ilSetting; if ($ilSetting->get("cas_active")) { return true; } if ($ilSetting->get("soap_auth_active")) { return true; } if ($ilSetting->get("shib_active")) { return true; } if ($ilSetting->get('radius_active')) { return true; } include_once 'Services/LDAP/classes/class.ilLDAPServer.php'; if (count(ilLDAPServer::_getActiveServerList())) { return true; } include_once './Services/OpenId/classes/class.ilOpenIdSettings.php'; if (ilOpenIdSettings::getInstance()->isActive()) { return true; } return false; }
/** * Save * * @access public * */ public function save() { $form = $this->initFormSettings(); if ($form->checkInput()) { $this->getSettings()->setActive($form->getInput('active')); $this->getSettings()->setServer($form->getInput('server')); $this->getSettings()->setPort($form->getInput('port')); $this->getSettings()->setUri($form->getInput('uri')); $this->getSettings()->setDefaultRole($form->getInput('role')); $this->getSettings()->enableLocalAuthentication($form->getInput('local')); $this->getSettings()->setLoginInstruction($form->getInput('instruction')); $this->getSettings()->enableUserCreation($form->getInput('sync') == ilCASSettings::SYNC_CAS ? true : false); $this->getSettings()->save(); include_once './Services/LDAP/classes/class.ilLDAPServer.php'; switch ((int) $form->getInput('sync')) { case ilCASSettings::SYNC_DISABLED: ilLDAPServer::toggleDataSource(AUTH_CAS, false); break; case ilCASSettings::SYNC_CAS: ilLDAPServer::toggleDataSource(AUTH_CAS, false); break; case ilCASSettings::SYNC_LDAP: // TODO: handle multiple ldap configurations ilLDAPServer::toggleDataSource(AUTH_CAS, true); break; } ilUtil::sendSuccess($this->lng->txt('settings_saved'), true); $this->ctrl->redirect($this, 'settings'); } $form->setValuesByPost(); ilUtil::sendFailure($this->lng->txt('err_ceck_input')); $this->tpl->setContent($form->getHTML()); }
/** * Save * * @access public * */ public function save() { $this->settings->setActive((int) $_POST['active']); $this->settings->setName(ilUtil::stripSlashes($_POST['name'])); $this->settings->setPort(ilUtil::stripSlashes($_POST['port'])); $this->settings->setSecret(ilUtil::stripSlashes($_POST['secret'])); $this->settings->setServerString(ilUtil::stripSlashes($_POST['servers'])); $this->settings->setDefaultRole((int) $_POST['role']); $this->settings->enableAccountMigration((int) $_POST['migration']); $this->settings->setCharset((int) $_POST['charset']); $this->settings->enableCreation((int) $_POST['sync'] == ilRadiusSettings::SYNC_RADIUS ? true : false); if (!$this->settings->validateRequired()) { ilUtil::sendFailure($this->lng->txt("fill_out_all_required_fields")); $this->settings(); return false; } if (!$this->settings->validatePort()) { ilUtil::sendFailure($this->lng->txt("err_invalid_port")); $this->settings(); return false; } if (!$this->settings->validateServers()) { ilUtil::sendFailure($this->lng->txt("err_invalid_server")); $this->settings(); return false; } include_once './Services/LDAP/classes/class.ilLDAPServer.php'; switch ((int) $_POST['sync']) { case ilRadiusSettings::SYNC_DISABLED: ilLDAPServer::toggleDataSource(AUTH_RADIUS, false); break; case ilRadiusSettings::SYNC_RADIUS: ilLDAPServer::toggleDataSource(AUTH_RADIUS, false); break; case ilRadiusSettings::SYNC_LDAP: // TODO: handle multiple ldap configurations ilLDAPServer::toggleDataSource(AUTH_RADIUS, true); break; } $this->settings->save(); ilUtil::sendSuccess($this->lng->txt('settings_saved')); $this->settings(); return true; }
/** * @param $a_username * @param $password * @param bool $isChallengeResponse * @return bool|void * @throws ilLDAPQueryException */ function fetchData($a_username, $password, $isChallengeResponse = false) { /** * @var $ilDB ilDB * @var $ilSetting ilSetting * @var $rbacadmin ilRbacAdmin */ global $ilDB, $ilSetting, $rbacadmin; $settings = new ilSetting('apache_auth'); if (!$settings->get('apache_enable_auth')) { return false; } if (!$settings->get('apache_auth_indicator_name') || !$settings->get('apache_auth_indicator_value')) { return false; } if (!ilUtil::isLogin($a_username)) { return false; } if ($a_username == 'anonymous' && $password == 'anonymous') { $query = 'SELECT * FROM usr_data WHERE login = %s'; $qres = $ilDB->queryF($query, array('text'), array($a_username)); $userRow = $ilDB->fetchAssoc($qres); if (is_array($userRow) && $userRow['usr_id']) { // user as a local account... // fetch logindata $this->activeUser = $userRow['login']; foreach ($userRow as $key => $value) { if ($key == $this->options['passwordcol'] || $key == $this->options['usernamecol']) { continue; } // Use reference to the auth object if exists // This is because the auth session variable can change so a static call to setAuthData does not make sense $this->_auth_obj->setAuthData($key, $value); } $this->_auth_obj->setAuth($userRow['login']); return true; } return false; } if (!$_SESSION['login_invalid'] && in_array($_SERVER[$settings->get('apache_auth_indicator_name')], array_filter(array_map('trim', str_getcsv($settings->get('apache_auth_indicator_value')))))) { // we have a valid apache auth $list = array($ilSetting->get('auth_mode')); // Respect the auth method sequence include_once './Services/Authentication/classes/class.ilAuthModeDetermination.php'; $det = ilAuthModeDetermination::_getInstance(); if (!$det->isManualSelection() && $det->getCountActiveAuthModes() > 1) { $list = array(); foreach (ilAuthModeDetermination::_getInstance()->getAuthModeSequence() as $auth_mode) { $list[] = $auth_mode; } } foreach ($list as $auth_mode) { if (AUTH_LDAP == $auth_mode) { // if no local user has been found AND ldap lookup is enabled if ($settings->get('apache_enable_ldap')) { include_once 'Services/LDAP/classes/class.ilLDAPServer.php'; $this->server = new ilLDAPServer(ilLDAPServer::_getFirstActiveServer()); $this->server->doConnectionCheck(); $config = $this->server->toPearAuthArray(); $query = new ilLDAPQuery($this->server); $query->bind(); $ldapUser = $query->fetchUser($a_username); if ($ldapUser && $ldapUser[$a_username] && $ldapUser[$a_username][$config['userattr']] == $a_username) { $ldapUser[$a_username]['ilInternalAccount'] = ilObjUser::_checkExternalAuthAccount("ldap", $a_username); $user_data = $ldapUser[$a_username]; //array_change_key_case($a_auth->getAuthData(),CASE_LOWER); if ($this->server->enabledSyncOnLogin()) { if (!$user_data['ilInternalAccount'] && $this->server->isAccountMigrationEnabled() && !self::$force_creation) { $this->_auth_obj->logout(); $_SESSION['tmp_auth_mode'] = 'ldap'; $_SESSION['tmp_external_account'] = $a_username; $_SESSION['tmp_pass'] = $_POST['password']; include_once './Services/LDAP/classes/class.ilLDAPRoleAssignmentRules.php'; $roles = ilLDAPRoleAssignmentRules::getAssignmentsForCreation($a_username, $user_data); $_SESSION['tmp_roles'] = array(); foreach ($roles as $info) { if ($info['action'] == ilLDAPRoleAssignmentRules::ROLE_ACTION_ASSIGN) { $_SESSION['tmp_roles'][] = $info['id']; } } ilUtil::redirect('ilias.php?baseClass=ilStartUpGUI&cmdClass=ilstartupgui&cmd=showAccountMigration'); } if ($this->updateRequired($a_username)) { $this->initLDAPAttributeToUser(); $this->ldap_attr_to_user->setUserData($ldapUser); $this->ldap_attr_to_user->refresh(); $user_data['ilInternalAccount'] = ilObjUser::_checkExternalAuthAccount("ldap", $a_username); } else { // User exists and no update required $user_data['ilInternalAccount'] = ilObjUser::_checkExternalAuthAccount("ldap", $a_username); } } if ($user_data['ilInternalAccount']) { $this->_auth_obj->setAuth($user_data['ilInternalAccount']); $this->_auth_obj->username = $user_data['ilInternalAccount']; return true; } } } } else { if (AUTH_APACHE != $auth_mode && $settings->get('apache_enable_local')) { $condition = ''; if ($ilSetting->get("auth_mode") && $ilSetting->get("auth_mode") == 'ldap') { $condition = " AND auth_mode != " . $ilDB->quote('default', 'text') . " "; } $query = "SELECT * FROM usr_data WHERE login = %s AND auth_mode != %s {$condition}"; $qres = $ilDB->queryF($query, array('text', 'text'), array($a_username, 'ldap')); $userRow = $ilDB->fetchAssoc($qres); if (is_array($userRow) && $userRow['usr_id']) { // user as a local account... // fetch logindata $this->activeUser = $userRow['login']; foreach ($userRow as $key => $value) { if ($key == $this->options['passwordcol'] || $key == $this->options['usernamecol']) { continue; } // Use reference to the auth object if exists // This is because the auth session variable can change so a static call to setAuthData does not make sense $this->_auth_obj->setAuthData($key, $value); } $this->_auth_obj->setAuth($userRow['login']); return true; } } } } if ($settings->get('apache_enable_local') && $settings->get('apache_local_autocreate')) { if ($_GET['r']) { $_SESSION['profile_complete_redirect'] = $_GET['r']; } $user = new ilObjUser(); $user->setLogin($a_username); $user->setExternalAccount($a_username); $user->setProfileIncomplete(true); $user->create(); $user->setAuthMode('apache'); // set a timestamp for last_password_change // this ts is needed by ilSecuritySettings $user->setLastPasswordChangeTS(time()); $user->setTimeLimitUnlimited(1); $user->setActive(1); //insert user data in table user_data $user->saveAsNew(); $user->writePrefs(); $rbacadmin->assignUser($settings->get('apache_default_role', 4), $user->getId(), true); return true; } } else { if (defined('IL_CERT_SSO') && IL_CERT_SSO) { define('APACHE_ERRORCODE', AUTH_APACHE_FAILED); } } return false; }
/** * Init LDAP server * @param int $a_server_id */ protected function initServer($a_auth_mode, $a_server_id) { $this->authmode = $a_auth_mode; $this->server = ilLDAPServer::getInstanceByServerId($a_server_id); }
function fetchData($a_username, $password, $isChallengeResponse = false) { //var_dump(func_get_args()); //var_dump($_SERVER); global $lng; $settings = new ilSetting('apache_auth'); if (!$settings->get('apache_enable_auth')) { return false; } if (!$settings->get('apache_auth_indicator_name') || !$settings->get('apache_auth_indicator_value')) { return false; } if (!ilUtil::isLogin($a_username)) { return false; } if ($a_username == 'anonymous' && $password == 'anonymous') { global $ilDB; $query = 'SELECT * FROM usr_data WHERE login = %s'; $qres = $ilDB->queryF($query, array('text'), array($a_username)); $userRow = $ilDB->fetchAssoc($qres); if (is_array($userRow) && $userRow['usr_id']) { // user as a local account... // fetch logindata $this->activeUser = $userRow['login']; foreach ($userRow as $key => $value) { if ($key == $this->options['passwordcol'] || $key == $this->options['usernamecol']) { continue; } // Use reference to the auth object if exists // This is because the auth session variable can change so a static call to setAuthData does not make sense $this->_auth_obj->setAuthData($key, $value); } //var_dump($userRow); $this->_auth_obj->setAuth($userRow['login']); return true; } return false; } if (!$_SESSION['login_invalid'] && $_SERVER[$settings->get('apache_auth_indicator_name')] == $settings->get('apache_auth_indicator_value')) { // we have a valid apache auth global $ilDB; if ($settings->get('apache_enable_local')) { $query = 'SELECT * FROM usr_data WHERE login = %s OR (auth_mode = %s AND ext_account = %s)'; $qres = $ilDB->queryF($query, array('text', 'text', 'text'), array($a_username, 'apache', $a_username)); $userRow = $ilDB->fetchAssoc($qres); if (is_array($userRow) && $userRow['usr_id']) { // user as a local account... // fetch logindata $this->activeUser = $userRow['login']; foreach ($userRow as $key => $value) { if ($key == $this->options['passwordcol'] || $key == $this->options['usernamecol']) { continue; } // Use reference to the auth object if exists // This is because the auth session variable can change so a static call to setAuthData does not make sense $this->_auth_obj->setAuthData($key, $value); } //var_dump($userRow); $this->_auth_obj->setAuth($userRow['login']); return true; } } // if no local user has been found AND ldap lookup is enabled if ($settings->get('apache_enable_ldap')) { include_once 'Services/LDAP/classes/class.ilLDAPServer.php'; $this->server = new ilLDAPServer(ilLDAPServer::_getFirstActiveServer()); $this->server->doConnectionCheck(); $config = $this->server->toPearAuthArray(); $query = new ilLDAPQuery($this->server); $ldapUser = $query->fetchUser($a_username); if ($ldapUser && $ldapUser[$a_username] && $ldapUser[$a_username][$config['userattr']] == $a_username) { $ldapUser[$a_username]['ilInternalAccount'] = ilObjUser::_checkExternalAuthAccount("apache", $a_username); $user_data = $ldapUser[$a_username]; //array_change_key_case($a_auth->getAuthData(),CASE_LOWER); if ($this->server->enabledSyncOnLogin()) { if (!$user_data['ilInternalAccount'] && $this->server->isAccountMigrationEnabled() && !self::$force_creation) { $this->_auth_obj->logout(); $_SESSION['tmp_auth_mode'] = 'apache'; $_SESSION['tmp_external_account'] = $a_username; $_SESSION['tmp_pass'] = $_POST['password']; include_once './Services/LDAP/classes/class.ilLDAPRoleAssignmentRules.php'; $roles = ilLDAPRoleAssignmentRules::getAssignmentsForCreation($a_username, $user_data); $_SESSION['tmp_roles'] = array(); foreach ($roles as $info) { if ($info['action'] == ilLDAPRoleAssignmentRules::ROLE_ACTION_ASSIGN) { $_SESSION['tmp_roles'][] = $info['id']; } } ilUtil::redirect('ilias.php?baseClass=ilStartUpGUI&cmdClass=ilstartupgui&cmd=showAccountMigration'); exit; } if ($this->updateRequired($a_username)) { $this->initLDAPAttributeToUser(); $this->ldap_attr_to_user->setUserData($ldapUser); $this->ldap_attr_to_user->refresh(); $user_data['ilInternalAccount'] = ilObjUser::_checkExternalAuthAccount("apache", $a_username); } else { // User exists and no update required $user_data['ilInternalAccount'] = ilObjUser::_checkExternalAuthAccount("apache", $a_username); } } if ($user_data['ilInternalAccount']) { $this->_auth_obj->setAuth($user_data['ilInternalAccount']); return true; } } } if ($settings->get('apache_enable_local') && $settings->get('apache_local_autocreate')) { // no local user, no ldap match or ldap not activated // if (!self::$force_creation) // { // $_SESSION['tmp_auth_mode'] = 'apache'; // $_SESSION['tmp_external_account'] = $a_username; // $_SESSION['tmp_pass'] = $_POST['password']; //ilUtil::redirect('https://lernwelt.janposselt.de/ilias.php?baseClass=ilStartUpGUI&cmdClass=ilstartupgui&cmd=showAccountMigration'); // } // else // { global $ilIliasIniFile; if ($_GET['r']) { $_SESSION['profile_complete_redirect'] = $_GET['r']; } $user = new ilObjUser(); $user->setLogin($a_username); $user->setExternalAccount($a_username); $user->setProfileIncomplete(true); $user->create(); $user->setAuthMode('apache'); // set a timestamp for last_password_change // this ts is needed by ilSecuritySettings $user->setLastPasswordChangeTS(time()); $user->setTimeLimitUnlimited(1); $user->setActive(1); //insert user data in table user_data $user->saveAsNew(); $user->writePrefs(); global $rbacadmin; $rbacadmin->assignUser($settings->get('apache_default_role', 4), $user->getId(), true); return true; // } } } else { if (defined('IL_CERT_SSO') && IL_CERT_SSO) { define('APACHE_ERRORCODE', AUTH_APACHE_FAILED); } } return false; }
public static function _getFirstServer() { $servers = ilLDAPServer::_getServerList(); if (count($servers)) { return $servers[0]; } return 0; }
/** * Init login form */ protected function initLoginForm() { global $rbacsystem, $lng, $ilSetting; include_once "./Services/Form/classes/class.ilPropertyFormGUI.php"; $this->form = new ilPropertyFormGUI(); $this->form->setFormAction($this->ctrl->getFormAction($this, 'saveLoginInfo')); $this->form->setTableWidth('80%'); $this->form->setTitle($this->lng->txt('login_information')); $this->form->addCommandButton('saveLoginInfo', $this->lng->txt('save')); include_once 'Services/LDAP/classes/class.ilLDAPServer.php'; include_once 'Services/Radius/classes/class.ilRadiusSettings.php'; $rad_settings = ilRadiusSettings::_getInstance(); if ($ldap_id = ilLDAPServer::_getFirstActiveServer() or $rad_settings->isActive()) { $select = new ilSelectInputGUI($this->lng->txt('default_auth_mode'), 'default_auth_mode'); $select->setValue($ilSetting->get('default_auth_mode', AUTH_LOCAL)); $select->setInfo($this->lng->txt('default_auth_mode_info')); $options[AUTH_LOCAL] = $this->lng->txt('auth_local'); if ($ldap_id) { $options[AUTH_LDAP] = $this->lng->txt('auth_ldap'); } if ($rad_settings->isActive()) { $options[AUTH_RADIUS] = $this->lng->txt('auth_radius'); } $select->setOptions($options); $this->form->addItem($select); } if (!is_object($this->loginSettings)) { $this->loginSettings = new ilSetting("login_settings"); } $login_settings = $this->loginSettings->getAll(); $languages = $lng->getInstalledLanguages(); $def_language = $lng->getDefaultLanguage(); foreach ($this->setDefLangFirst($def_language, $languages) as $lang_key) { $add = ""; if ($lang_key == $def_language) { $add = " (" . $lng->txt("default") . ")"; } $textarea = new ilTextAreaInputGUI($lng->txt("meta_l_" . $lang_key) . $add, 'login_message_' . $lang_key); $textarea->setRows(10); $textarea->setValue($login_settings["login_message_" . $lang_key]); $textarea->setUseRte(true); $textarea->setRteTagSet("extended"); $this->form->addItem($textarea); unset($login_settings["login_message_" . $lang_key]); } foreach ($login_settings as $key => $message) { $lang_key = substr($key, strrpos($key, "_") + 1, strlen($key) - strrpos($key, "_")); $textarea = new ilTextAreaInputGUI($lng->txt("meta_l_" . $lang_key) . $add, 'login_message_' . $lang_key); $textarea->setRows(10); $textarea->setValue($message); $textarea->setUseRte(true); $textarea->setRteTagSet("extended"); if (!in_array($lang_key, $languages)) { $textarea->setAlert($lng->txt("not_installed")); } $this->form->addItem($textarea); } }
/** * Check if an external account name is required. * That's the case if Radius,LDAP, CAS or SOAP is active * * @access public * @static * * @param */ public static function _isExternalAccountEnabled() { global $ilSetting; if ($ilSetting->get("cas_active")) { return true; } if ($ilSetting->get("soap_auth_active")) { return true; } if ($ilSetting->get("shib_active")) { return true; } if ($ilSetting->get('radius_active')) { return true; } include_once 'Services/LDAP/classes/class.ilLDAPServer.php'; if (count(ilLDAPServer::_getActiveServerList())) { return true; } include_once './Services/OpenId/classes/class.ilOpenIdSettings.php'; if (ilOpenIdSettings::getInstance()->isActive()) { return true; } // begin-path auth_plugin foreach (self::getAuthPlugins() as $pl) { foreach ($pl->getAuthIds() as $auth_id) { if ($pl->isAuthActive($auth_id) and $pl->isExternalAccountNameRequired($auth_id)) { return true; } } } // end-path auth_plugin return false; }