Blame Identity/Models/Html/phpBB/3.0.4/includes/auth/auth_apache.php

d6e8d8
d6e8d8
/**
d6e8d8
* Apache auth plug-in for phpBB3
d6e8d8
*
d6e8d8
* Authentication plug-ins is largely down to Sergey Kanareykin, our thanks to him.
d6e8d8
*
d6e8d8
* @package login
d6e8d8
* @version $Id: auth_apache.php 8602 2008-06-04 16:05:27Z naderman $
d6e8d8
* @copyright (c) 2005 phpBB Group
d6e8d8
* @license http://opensource.org/licenses/gpl-license.php GNU Public License
d6e8d8
*
d6e8d8
*/
d6e8d8
d6e8d8
/**
d6e8d8
* @ignore
d6e8d8
*/
d6e8d8
if (!defined('IN_PHPBB'))
d6e8d8
{
d6e8d8
	exit;
d6e8d8
}
d6e8d8
d6e8d8
/**
d6e8d8
* Checks whether the user is identified to apache
d6e8d8
* Only allow changing authentication to apache if the user is identified
d6e8d8
* Called in acp_board while setting authentication plugins
d6e8d8
*
d6e8d8
* @return boolean|string false if the user is identified and else an error message
d6e8d8
*/
d6e8d8
function init_apache()
d6e8d8
{
d6e8d8
	global $user;
d6e8d8
d6e8d8
	if (!isset($_SERVER['PHP_AUTH_USER']) || $user->data['username'] !== $_SERVER['PHP_AUTH_USER'])
d6e8d8
	{
d6e8d8
		return $user->lang['APACHE_SETUP_BEFORE_USE'];
d6e8d8
	}
d6e8d8
	return false;
d6e8d8
}
d6e8d8
d6e8d8
/**
d6e8d8
* Login function
d6e8d8
*/
d6e8d8
function login_apache(&$username, &$password)
d6e8d8
{
d6e8d8
	global $db;
d6e8d8
d6e8d8
	// do not allow empty password
d6e8d8
	if (!$password)
d6e8d8
	{
d6e8d8
		return array(
d6e8d8
			'status'	=> LOGIN_ERROR_PASSWORD,
d6e8d8
			'error_msg'	=> 'NO_PASSWORD_SUPPLIED',
d6e8d8
			'user_row'	=> array('user_id' => ANONYMOUS),
d6e8d8
		);
d6e8d8
	}
d6e8d8
d6e8d8
	if (!$username)
d6e8d8
	{
d6e8d8
		return array(
d6e8d8
			'status'	=> LOGIN_ERROR_USERNAME,
d6e8d8
			'error_msg'	=> 'LOGIN_ERROR_USERNAME',
d6e8d8
			'user_row'	=> array('user_id' => ANONYMOUS),
d6e8d8
		);
d6e8d8
	}
d6e8d8
d6e8d8
	if (!isset($_SERVER['PHP_AUTH_USER']))
d6e8d8
	{
d6e8d8
		return array(
d6e8d8
			'status'		=> LOGIN_ERROR_EXTERNAL_AUTH,
d6e8d8
			'error_msg'		=> 'LOGIN_ERROR_EXTERNAL_AUTH_APACHE',
d6e8d8
			'user_row'		=> array('user_id' => ANONYMOUS),
d6e8d8
		);
d6e8d8
	}
d6e8d8
d6e8d8
	$php_auth_user = $_SERVER['PHP_AUTH_USER'];
d6e8d8
	$php_auth_pw = $_SERVER['PHP_AUTH_PW'];
d6e8d8
d6e8d8
	if (!empty($php_auth_user) && !empty($php_auth_pw))
d6e8d8
	{
d6e8d8
		if ($php_auth_user !== $username)
d6e8d8
		{
d6e8d8
			return array(
d6e8d8
				'status'	=> LOGIN_ERROR_USERNAME,
d6e8d8
				'error_msg'	=> 'LOGIN_ERROR_USERNAME',
d6e8d8
				'user_row'	=> array('user_id' => ANONYMOUS),
d6e8d8
			);
d6e8d8
		}
d6e8d8
d6e8d8
		$sql = 'SELECT user_id, username, user_password, user_passchg, user_email, user_type
d6e8d8
			FROM ' . USERS_TABLE . "
d6e8d8
			WHERE username = '" . $db->sql_escape($php_auth_user) . "'";
d6e8d8
		$result = $db->sql_query($sql);
d6e8d8
		$row = $db->sql_fetchrow($result);
d6e8d8
		$db->sql_freeresult($result);
d6e8d8
d6e8d8
		if ($row)
d6e8d8
		{
d6e8d8
			// User inactive...
d6e8d8
			if ($row['user_type'] == USER_INACTIVE || $row['user_type'] == USER_IGNORE)
d6e8d8
			{
d6e8d8
				return array(
d6e8d8
					'status'		=> LOGIN_ERROR_ACTIVE,
d6e8d8
					'error_msg'		=> 'ACTIVE_ERROR',
d6e8d8
					'user_row'		=> $row,
d6e8d8
				);
d6e8d8
			}
d6e8d8
	
d6e8d8
			// Successful login...
d6e8d8
			return array(
d6e8d8
				'status'		=> LOGIN_SUCCESS,
d6e8d8
				'error_msg'		=> false,
d6e8d8
				'user_row'		=> $row,
d6e8d8
			);
d6e8d8
		}
d6e8d8
d6e8d8
		// this is the user's first login so create an empty profile
d6e8d8
		return array(
d6e8d8
			'status'		=> LOGIN_SUCCESS_CREATE_PROFILE,
d6e8d8
			'error_msg'		=> false,
d6e8d8
			'user_row'		=> user_row_apache($php_auth_user, $php_auth_pw),
d6e8d8
		);
d6e8d8
	}
d6e8d8
d6e8d8
	// Not logged into apache
d6e8d8
	return array(
d6e8d8
		'status'		=> LOGIN_ERROR_EXTERNAL_AUTH,
d6e8d8
		'error_msg'		=> 'LOGIN_ERROR_EXTERNAL_AUTH_APACHE',
d6e8d8
		'user_row'		=> array('user_id' => ANONYMOUS),
d6e8d8
	);
d6e8d8
}
d6e8d8
d6e8d8
/**
d6e8d8
* Autologin function
d6e8d8
*
d6e8d8
* @return array containing the user row or empty if no auto login should take place
d6e8d8
*/
d6e8d8
function autologin_apache()
d6e8d8
{
d6e8d8
	global $db;
d6e8d8
d6e8d8
	if (!isset($_SERVER['PHP_AUTH_USER']))
d6e8d8
	{
d6e8d8
		return array();
d6e8d8
	}
d6e8d8
d6e8d8
	$php_auth_user = $_SERVER['PHP_AUTH_USER'];
d6e8d8
	$php_auth_pw = $_SERVER['PHP_AUTH_PW'];
d6e8d8
d6e8d8
	if (!empty($php_auth_user) && !empty($php_auth_pw))
d6e8d8
	{
d6e8d8
		set_var($php_auth_user, $php_auth_user, 'string', true);
d6e8d8
		set_var($php_auth_pw, $php_auth_pw, 'string', true);
d6e8d8
d6e8d8
		$sql = 'SELECT *
d6e8d8
			FROM ' . USERS_TABLE . "
d6e8d8
			WHERE username = '" . $db->sql_escape($php_auth_user) . "'";
d6e8d8
		$result = $db->sql_query($sql);
d6e8d8
		$row = $db->sql_fetchrow($result);
d6e8d8
		$db->sql_freeresult($result);
d6e8d8
d6e8d8
		if ($row)
d6e8d8
		{
d6e8d8
			return ($row['user_type'] == USER_INACTIVE || $row['user_type'] == USER_IGNORE) ? array() : $row;
d6e8d8
		}
d6e8d8
d6e8d8
		if (!function_exists('user_add'))
d6e8d8
		{
d6e8d8
			global $phpbb_root_path, $phpEx;
d6e8d8
d6e8d8
			include($phpbb_root_path . 'includes/functions_user.' . $phpEx);
d6e8d8
		}
d6e8d8
d6e8d8
		// create the user if he does not exist yet
d6e8d8
		user_add(user_row_apache($php_auth_user, $php_auth_pw));
d6e8d8
d6e8d8
		$sql = 'SELECT *
d6e8d8
			FROM ' . USERS_TABLE . "
d6e8d8
			WHERE username_clean = '" . $db->sql_escape(utf8_clean_string($php_auth_user)) . "'";
d6e8d8
		$result = $db->sql_query($sql);
d6e8d8
		$row = $db->sql_fetchrow($result);
d6e8d8
		$db->sql_freeresult($result);
d6e8d8
d6e8d8
		if ($row)
d6e8d8
		{
d6e8d8
			return $row;
d6e8d8
		}
d6e8d8
	}
d6e8d8
d6e8d8
	return array();
d6e8d8
}
d6e8d8
d6e8d8
/**
d6e8d8
* This function generates an array which can be passed to the user_add function in order to create a user
d6e8d8
*/
d6e8d8
function user_row_apache($username, $password)
d6e8d8
{
d6e8d8
	global $db, $config, $user;
d6e8d8
	// first retrieve default group id
d6e8d8
	$sql = 'SELECT group_id
d6e8d8
		FROM ' . GROUPS_TABLE . "
d6e8d8
		WHERE group_name = '" . $db->sql_escape('REGISTERED') . "'
d6e8d8
			AND group_type = " . GROUP_SPECIAL;
d6e8d8
	$result = $db->sql_query($sql);
d6e8d8
	$row = $db->sql_fetchrow($result);
d6e8d8
	$db->sql_freeresult($result);
d6e8d8
d6e8d8
	if (!$row)
d6e8d8
	{
d6e8d8
		trigger_error('NO_GROUP');
d6e8d8
	}
d6e8d8
d6e8d8
	// generate user account data
d6e8d8
	return array(
d6e8d8
		'username'		=> $username,
d6e8d8
		'user_password'	=> phpbb_hash($password),
d6e8d8
		'user_email'	=> '',
d6e8d8
		'group_id'		=> (int) $row['group_id'],
d6e8d8
		'user_type'		=> USER_NORMAL,
d6e8d8
		'user_ip'		=> $user->ip,
d6e8d8
	);
d6e8d8
}
d6e8d8
d6e8d8
/**
d6e8d8
* The session validation function checks whether the user is still logged in
d6e8d8
*
d6e8d8
* @return boolean true if the given user is authenticated or false if the session should be closed
d6e8d8
*/
d6e8d8
function validate_session_apache(&$user)
d6e8d8
{
d6e8d8
	if (!isset($_SERVER['PHP_AUTH_USER']))
d6e8d8
	{
d6e8d8
		return false;
d6e8d8
	}
d6e8d8
d6e8d8
	$php_auth_user = '';
d6e8d8
	set_var($php_auth_user, $_SERVER['PHP_AUTH_USER'], 'string', true);
d6e8d8
d6e8d8
	return ($php_auth_user === $user['username']) ? true : false;
d6e8d8
}
d6e8d8
d6e8d8
?>