| px | top | add code | search | signup | login | help |
<?
/*
* account.php3
*
* @(#) $Header: /cvsroot/enanet/accounts.php3,v 1.8 1998/05/11 23:19:41 mlemos Exp $
*
* E na Net service
*
* This information is CONFIDENTIAL and PROPRIETARY
* (C) Copyright Manuel Lemos. All Rights Reserved.
*
* $Log: accounts.php3,v $
* Revision 1.8 1998/05/11 23:19:41 mlemos
* Moved the Function to crypt passwords and renamed to AccountCryptPassword.
*
* Revision 1.7 1998/04/01 02:14:43 mlemos
* Added support to convert user names and password to lower case.
*
* Revision 1.6 1998/03/28 15:43:46 mlemos
* Replaced md5 by crypt based password encription and lookup.
*
* Revision 1.5 1998/03/27 22:16:05 mlemos
* Fixed missing password argument in the ModifyAccessAccount method.
*
* Revision 1.4 1998/03/27 20:51:56 mlemos
* Made CheckPassword method consider deleted accounts marked with passwords
* set to *.
*
* Revision 1.3 1998/03/27 05:27:26 mlemos
* Moved the account lookup code to a separate method.
*
* Revision 1.2 1998/03/27 02:49:33 mlemos
* Added methods AddAccessAccount, SaveAccessAccounts.
* Added PHP error to error messages returned from method ReadAccounts method.
* Removed the end of line character before parsing an account line.
* Added quotes to the user name account entries.
* Corrected the accesses to the accounts array in CheckPassword method.
*
* Revision 1.1 1998/03/26 21:40:19 mlemos
* Initial revision.
*
*
*
*/
Function AccountCryptPassword($password,$salt)
{
if($salt=="")
{
srand(time());
$random=rand();
$itoa64="./0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz";
$salt=substr($itoa64,$random % 64,1).substr($itoa64,($random/64) % 64,1);
}
return(crypt($password,$salt));
}
class access_accounts
{
var $password_file="";
var $accounts=array();
var $convert_to_lower_case=0;
Function ReadAccounts($password_file)
{
global $php_errormsg;
$passwd=@File($password_file);
if(GetType($passwd)!="array")
return("can not read password file \"$password_file\" ($php_errormsg)");
for($account=0,$accounts=array();$account<count($passwd);$account++)
{
if(($line=strtok($passwd[$account],"\n"))=="")
$line=$passwd[$account];
if(($user=strtok($line,":"))=="")
return("invalid user in line $account of password file \"$password_file\"");
if($this->convert_to_lower_case)
$user=strtolower($user);
$accounts[$account]["user"]="$user";
$accounts[$account]["password"]=strtok(":");
}
$this->accounts=$accounts;
$this->password_file=$password_file;
return("");
}
Function LookupAccount($user)
{
if($this->convert_to_lower_case)
$user=strtolower($user);
for($account=0;$account<count($this->accounts);$account++)
{
if($this->accounts[$account]["user"]==$user)
break;
}
return($account);
}
Function CheckPassword($user,$password)
{
if($user=="")
return("empty user");
if($password=="")
return("empty password");
if($this->convert_to_lower_case)
{
$user=strtolower($user);
$password=strtolower($password);
}
if(($account=$this->LookupAccount($user))<count($this->accounts))
{
if($this->accounts[$account]["password"]=="*")
return("account was deleted");
if($this->accounts[$account]["password"]==AccountCryptPassword($password,substr($this->accounts[$account]["password"],0,2)))
return("");
else
return("password does not match");
}
return("unknown user");
}
Function AddAccessAccount($user,$password)
{
if($this->convert_to_lower_case)
{
$user=strtolower($user);
$password=strtolower($password);
}
$account=count($this->accounts);
$this->accounts[$account]["user"]=$user;
$this->accounts[$account]["password"]=AccountCryptPassword($password,"");
return($account);
}
Function SaveAccessAccounts()
{
global $php_errormsg;
if($this->password_file=="")
return("it was not defined the password file");
if(($file=@fopen($this->password_file,"w"))==0)
return("can not open password file \"$password_file\" ($php_errormsg)");
for($account=0;$account<count($this->accounts);$account++)
{
$user=$this->accounts[$account]["user"];
if($this->convert_to_lower_case)
$user=strtolower($user);
if(fputs($file,sprintf("%s:%s\n",$user,$this->accounts[$account]["password"]))==0)
return("can not write to password file \"$password_file\" ($php_errormsg)");
}
fclose($file);
return("");
}
Function DeleteAccount($user)
{
if($this->convert_to_lower_case)
$user=strtolower($user);
if(($account=$this->LookupAccount($user))<count($this->accounts))
{
if($this->accounts[$account]["password"]!="*")
{
$this->accounts[$account]["password"]="*";
return("");
}
else
return("account was already deleted");
}
return("unknown user");
}
Function ModifyAccessAccount($user,$password)
{
if($this->convert_to_lower_case)
{
$user=strtolower($user);
$password=strtolower($password);
}
if(($account=$this->LookupAccount($user))>=count($this->accounts))
return("unknown user");
$this->accounts[$account]["password"]=AccountCryptPassword($password,"");
return("");
}
};
?>
Comments or questions?
PX is running PHP 5.2.11
Thanks to Miranda Productions for hosting and bandwidth.
Use of any code from PX is at your own risk.