home *** CD-ROM | disk | FTP | other *** search
- Apache compatible pa
-
- Class that allows the PHP developer to create and manage UNIX like password files suitable for use as Apache authentication password files.
-
-
- <?
- /*
- * 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("");
- }
-
- };
-
- ?>
-