home *** CD-ROM | disk | FTP | other *** search
/ H4CK3R 4 / hacker04 / 04_HACK04.ISO / src / PHP / apachepa.php3.txt < prev    next >
Encoding:
Text File  |  2002-05-06  |  5.4 KB  |  193 lines

  1. Apache compatible pa 
  2.  
  3. Class that allows the PHP developer to create and manage UNIX like password files suitable for use as Apache authentication password files. 
  4.  
  5.  
  6. <?
  7. /*
  8.  * account.php3
  9.  *
  10.  * @(#) $Header: /cvsroot/enanet/accounts.php3,v 1.8 1998/05/11 23:19:41 mlemos Exp $
  11.  *
  12.  * E na Net service
  13.  *
  14.  * This information is CONFIDENTIAL and PROPRIETARY
  15.  * (C) Copyright Manuel Lemos. All Rights Reserved.
  16.  *
  17.  * $Log: accounts.php3,v $
  18.  * Revision 1.8  1998/05/11 23:19:41  mlemos
  19.  * Moved the Function to crypt passwords and renamed to AccountCryptPassword.
  20.  *
  21.  * Revision 1.7  1998/04/01 02:14:43  mlemos
  22.  * Added support to convert user names and password to lower case.
  23.  *
  24.  * Revision 1.6  1998/03/28 15:43:46  mlemos
  25.  * Replaced md5 by crypt based password encription and lookup.
  26.  *
  27.  * Revision 1.5  1998/03/27 22:16:05  mlemos
  28.  * Fixed missing password argument in the ModifyAccessAccount method.
  29.  *
  30.  * Revision 1.4  1998/03/27 20:51:56  mlemos
  31.  * Made CheckPassword method consider deleted accounts marked with passwords
  32.  * set to *.
  33.  *
  34.  * Revision 1.3  1998/03/27 05:27:26  mlemos
  35.  * Moved the account lookup code to a separate method.
  36.  *
  37.  * Revision 1.2  1998/03/27 02:49:33  mlemos
  38.  * Added methods AddAccessAccount, SaveAccessAccounts.
  39.  * Added PHP error to error messages returned from method ReadAccounts method.
  40.  * Removed the end of line character before parsing an account line.
  41.  * Added quotes to the user name account entries.
  42.  * Corrected the accesses to the accounts array in CheckPassword method.
  43.  *
  44.  * Revision 1.1  1998/03/26 21:40:19  mlemos
  45.  * Initial revision.
  46.  *
  47.  *
  48.  *
  49.  */
  50.  
  51. Function AccountCryptPassword($password,$salt)
  52. {
  53.  if($salt=="")
  54.  {
  55.   srand(time());
  56.   $random=rand();
  57.   $itoa64="./0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz";
  58.   $salt=substr($itoa64,$random % 64,1).substr($itoa64,($random/64) % 64,1);
  59.  }
  60.  return(crypt($password,$salt));
  61. }
  62.  
  63. class access_accounts
  64. {
  65.  var $password_file="";
  66.  var $accounts=array();
  67.  var $convert_to_lower_case=0;
  68.  
  69.  Function ReadAccounts($password_file)
  70.  {
  71.   global $php_errormsg;
  72.  
  73.   $passwd=@File($password_file);
  74.   if(GetType($passwd)!="array")
  75.    return("can not read password file \"$password_file\" ($php_errormsg)");
  76.   for($account=0,$accounts=array();$account<count($passwd);$account++)
  77.   {
  78.    if(($line=strtok($passwd[$account],"\n"))=="")
  79.     $line=$passwd[$account];
  80.    if(($user=strtok($line,":"))=="")
  81.     return("invalid user in line $account of password file \"$password_file\"");
  82.    if($this->convert_to_lower_case)
  83.     $user=strtolower($user);
  84.    $accounts[$account]["user"]="$user";
  85.    $accounts[$account]["password"]=strtok(":");
  86.   }
  87.   $this->accounts=$accounts;
  88.   $this->password_file=$password_file;
  89.   return("");
  90.  }
  91.  
  92.  Function LookupAccount($user)
  93.  {
  94.   if($this->convert_to_lower_case)
  95.    $user=strtolower($user);
  96.   for($account=0;$account<count($this->accounts);$account++)
  97.   {
  98.    if($this->accounts[$account]["user"]==$user)
  99.     break;
  100.   }
  101.   return($account);
  102.  }
  103.  
  104.  Function CheckPassword($user,$password)
  105.  {
  106.   if($user=="")
  107.    return("empty user");
  108.   if($password=="")
  109.    return("empty password");
  110.   if($this->convert_to_lower_case)
  111.   {
  112.    $user=strtolower($user);
  113.    $password=strtolower($password);
  114.   }
  115.   if(($account=$this->LookupAccount($user))<count($this->accounts))
  116.   {
  117.    if($this->accounts[$account]["password"]=="*")
  118.     return("account was deleted");
  119.    if($this->accounts[$account]["password"]==AccountCryptPassword($password,substr($this->accounts[$account]["password"],0,2)))
  120.     return("");
  121.    else
  122.     return("password does not match");
  123.   }
  124.   return("unknown user");
  125.  }
  126.  
  127.  Function AddAccessAccount($user,$password)
  128.  {
  129.   if($this->convert_to_lower_case)
  130.   {
  131.    $user=strtolower($user);
  132.    $password=strtolower($password);
  133.   }
  134.   $account=count($this->accounts);
  135.   $this->accounts[$account]["user"]=$user;
  136.   $this->accounts[$account]["password"]=AccountCryptPassword($password,"");
  137.   return($account);
  138.  }
  139.  
  140.  Function SaveAccessAccounts()
  141.  {
  142.   global $php_errormsg;
  143.  
  144.   if($this->password_file=="")
  145.    return("it was not defined the password file");
  146.   if(($file=@fopen($this->password_file,"w"))==0)
  147.    return("can not open password file \"$password_file\" ($php_errormsg)");
  148.   for($account=0;$account<count($this->accounts);$account++)
  149.   {
  150.    $user=$this->accounts[$account]["user"];
  151.    if($this->convert_to_lower_case)
  152.     $user=strtolower($user);
  153.    if(fputs($file,sprintf("%s:%s\n",$user,$this->accounts[$account]["password"]))==0)
  154.     return("can not write to password file \"$password_file\" ($php_errormsg)");
  155.   }
  156.   fclose($file);
  157.   return("");
  158.  }
  159.  
  160.  Function DeleteAccount($user)
  161.  {
  162.   if($this->convert_to_lower_case)
  163.    $user=strtolower($user);
  164.   if(($account=$this->LookupAccount($user))<count($this->accounts))
  165.   {
  166.    if($this->accounts[$account]["password"]!="*")
  167.    {
  168.     $this->accounts[$account]["password"]="*";
  169.     return("");
  170.    }
  171.    else
  172.     return("account was already deleted");
  173.   }
  174.   return("unknown user");
  175.  }
  176.  
  177.  Function ModifyAccessAccount($user,$password)
  178.  {
  179.   if($this->convert_to_lower_case)
  180.   {
  181.    $user=strtolower($user);
  182.    $password=strtolower($password);
  183.   }
  184.   if(($account=$this->LookupAccount($user))>=count($this->accounts))
  185.    return("unknown user");
  186.   $this->accounts[$account]["password"]=AccountCryptPassword($password,"");
  187.   return("");
  188.  }
  189.  
  190. };
  191.  
  192. ?>
  193.