File: /var/www/ilya/data/www/kamforum.ru/sources/loginauth/convert/auth.php.bak
<?php
/*
+---------------------------------------------------------------------------
| Invision Power Board V2.1.0
| ========================================
| by Matthew Mecham
| (c) 2004 Invision Power Services
| http://www.invisionpower.com
| ========================================
+---------------------------------------------------------------------------
| INVISION POWER DYNAMIC IS NOT FREE SOFTWARE!
| http://www.invisionpower.com/dynamic/
+---------------------------------------------------------------------------
|
| > LOG IN MODULE: Converted Board Modules
| > Script written by Stewart Campbell
| > Date started: October 15th 2005
|
+---------------------------------------------------------------------------
| NOTES:
| This module is part of the authentication suite of modules. It's designed
| to enable different types of authentication.
|
| RETURN CODES
| 'ERROR': Error, check array: $class->auth_errors
| 'NO_USER': No user found in LOCAL record set but auth passed in REMOTE dir
| 'WRONG_AUTH': Wrong password or username
| 'SUCCESS': Success, user and password matched
|
+---------------------------------------------------------------------------
| EXAMPLE USAGE
|
| $class = new login_method();
| $class->is_admin_auth = 0; // Boolean (0,1) Use different queries if desired
| // if logging into CP.
| $class->allow_create = 0;
| // $allow_create. Boolean flag (0,1) to tell the module whether its allowed
| // to create a member in the IPS product's database if the user passed authentication
| // but don't exist in the IPS product's database. Optional.
|
| $return_code = $class->authenticate( $username, $plain_text_password );
|
| if ( $return_code == 'SUCCESS' )
| {
| print $class->member['member_name'];
| }
| else
| {
| print "NO USER";
| }
+---------------------------------------------------------------------------
*/
class login_method extends login_core
{
# Globals
var $member;
/*-------------------------------------------------------------------------*/
// Constructor
/*-------------------------------------------------------------------------*/
function login_method()
{
}
/*-------------------------------------------------------------------------*/
// Authentication
/*-------------------------------------------------------------------------*/
function authenticate( $username, $password )
{
global $ipsclass;
$this->_load_member( $username );
if($ipsclass->vars['conv_configured'] != 1)
{
$this->return_code = "WRONG_AUTH";
return;
}
switch($ipsclass->vars['conv_chosen'])
{
case 'vb3':
case 'vb35':
$this->authenticate_vb3( $username, $password );
break;
case 'ib31':
$this->authenticate_ib31( $username, $password );
break;
case 'smf10':
case 'yabbse':
$this->authenticate_smf( $username, $password );
break;
case 'ubbt5':
$this->authenticate_ubbthreads5( $username, $password );
break;
default:
$this->return_code = "WRONG_AUTH";
return;
}
return;
}
/*-------------------------------------------------------------------------*/
// Authentication for vB3
/*-------------------------------------------------------------------------*/
function authenticate_vb3( $username, $password )
{
global $ipsclass;
if ( $this->member['misc'])
{
$single_md5_pass = md5( $password );
$decr = md5( $single_md5_pass . $this->member['misc'] );
if ( $decr == $this->member['legacy_password'] )
{
$this->_clean_convert_data( $single_md5_pass );
$this->return_code = 'SUCCESS';
return;
}
}
$this->return_code = 'WRONG_AUTH';
}
/*-------------------------------------------------------------------------*/
// Authentication for iB3.1
/*-------------------------------------------------------------------------*/
function authenticate_ib31( $username, $password )
{
$decr = md5( $password . $username );
$single_md5_pass = md5( $password );
if ( $decr == $this->member['legacy_password'] )
{
$this->_clean_convert_data( $single_md5_pass );
$this->return_code = "SUCCESS";
return;
}
$this->return_code = "WRONG_AUTH";
}
/*-------------------------------------------------------------------------*/
// Authentication for SMF / YABB.SE
/*-------------------------------------------------------------------------*/
function authenticate_smf( $username, $password )
{
if($this->member['misc'])
{
$single_md5_pass = md5( $password );
$success = false;
if ( crypt( $password, substr( $password,0,2 ) ) == $this->member['legacy_password'] )
{
$success = true;
}
else if ( strlen($this->member['legacy_password']) == 32 AND ( $this->_md5_hmac( $password, $username ) == $this->member['legacy_password'] ) )
{
$success = true;
}
else if ( strlen($this->member['legacy_password']) == 32 AND ( $single_md5_pass == $this->member['legacy_password'] ) )
{
$success = true;
}
if( $success )
{
$this->_clean_convert_data( $single_md5_pass );
$this->return_code = "SUCCESS";
return;
}
}
$this->return_code = "WRONG_AUTH";
return;
}
//*-------------------------------------------------------------------------*/
// Authentication for UBB.Threads 5
//*-------------------------------------------------------------------------*/*/
function authenticate_ubbthreads5( $username, $password )
{
$single_md5_pass = md5( $password );
$success = false;
if(crypt($password, $this->member['legacy_password']) == $this->member['legacy_password'])
{
$success = true;
}
else if($single_md5_pass == $row['legacy_password'])
{
$success = true;
}
if( $success )
{
$this->_clean_convert_data( $single_md5_pass );
$this->return_code = "SUCCESS";
return;
}
$this->return_code = "WRONG_AUTH";
return;
}
/*-------------------------------------------------------------------------*/
// Utility Functions
/*-------------------------------------------------------------------------*/
/*-------------------------------------------------------------------------*/
// Load member from DB
/*-------------------------------------------------------------------------*/
function _load_member( $username )
{
$this->member = $this->ipsclass->DB->build_and_exec_query( array( 'select' => '*', 'from' => 'members', 'where' => "name='" . $username . "'" ) );
}
/*-------------------------------------------------------------------------*/
// Clean-Up The Converted Data
/*-------------------------------------------------------------------------*/
function _clean_convert_data( $new_pass )
{
global $ipsclass;
$ipsclass->DB->query("UPDATE ibf_members SET legacy_password='',misc='0' WHERE id={$this->member['id']}");
$ipsclass->converge->converge_update_password( $new_pass, $this->member['email'] );
}
function _md5_hmac($data, $key)
{
if (strlen($key) > 64)
$key = pack('H*', md5($key));
$key = str_pad($key, 64, chr(0x00));
$k_ipad = $key ^ str_repeat(chr(0x36), 64);
$k_opad = $key ^ str_repeat(chr(0x5c), 64);
return md5($k_opad . pack('H*', md5($k_ipad . $data)));
}
}
?>