home *** CD-ROM | disk | FTP | other *** search
/ PC World 2001 August / PCWorld_2001-08_cd.bin / Komunikace / phptriad / phptriadsetup2-11.exe / php / pear / File / Passwd.php < prev    next >
PHP Script  |  2001-01-10  |  4KB  |  134 lines

  1. <?php
  2. /* vim: set ts=4 sw=4: */
  3. // +----------------------------------------------------------------------+
  4. // | PHP version 4.0                                                      |
  5. // +----------------------------------------------------------------------+
  6. // | Copyright (c) 1997-2001 The PHP Group                                |
  7. // +----------------------------------------------------------------------+
  8. // | This source file is subject to version 2.0 of the PHP license,       |
  9. // | that is bundled with this package in the file LICENSE, and is        |
  10. // | available at through the world-wide-web at                           |
  11. // | http://www.php.net/license/2_02.txt.                                 |
  12. // | If you did not receive a copy of the PHP license and are unable to   |
  13. // | obtain it through the world-wide-web, please send a note to          |
  14. // | license@php.net so we can mail you a copy immediately.               |
  15. // +----------------------------------------------------------------------+
  16. // | Authors: Rasmus Lerdorf <rasmus@php.net>                             |
  17. // +----------------------------------------------------------------------+
  18. //
  19. // $Id: Passwd.php,v 1.3 2001/01/10 01:01:55 ssb Exp $
  20. //
  21. // Manipulate standard UNIX passwd,.htpasswd and CVS pserver passwd files
  22.  
  23. /**
  24. * Class to manage passwd-style files
  25. *
  26. * @author Rasmus Lerdorf <rasmus@php.net>
  27. */
  28. class File_Passwd {
  29.     var $filename, $users, $cvs, $fplock, $locked;
  30.     var $lockfile = './passwd.lock';
  31.  
  32.     function File_Passwd($file,$lock=0) {
  33.         $this->filename = $file;
  34.  
  35.         $this->fplock = fopen($this->lockfile, 'w');
  36.         if($lock) {
  37.             flock($this->fplock, LOCK_EX);
  38.             $this->locked = true;
  39.         }
  40.  
  41.         $fp = fopen($file,'r') or die("Unable to open $file");
  42.         while(!feof($fp)) {
  43.             $line = fgets($fp, 128);
  44.             list($user,$pass,$cvsuser) = explode(':',$line);
  45.             if(strlen($user)) {
  46.                 $this->users[$user] = $pass;
  47.                 $this->cvs[$user] = trim($cvsuser);    
  48.             }
  49.         }
  50.         fclose($fp);
  51.     }
  52.  
  53.     /**
  54.     * Adds a user
  55.     *
  56.     * @param $user new user id
  57.     * @param $pass password for new user
  58.     * @param $cvs  cvs user id (needed for pserver passwd files)
  59.     */
  60.     function addUser($user,$pass,$cvsuser) {
  61.         if(!isset($this->users[$user]) && $this->locked) {
  62.             $this->users[$user] = crypt($pass);
  63.             $this->cvs[$user] = $cvsuser;
  64.             return true;
  65.         } else {
  66.             return false;
  67.         }
  68.     }
  69.  
  70.     /**
  71.     * Modifies a user
  72.     *
  73.     * @param $user user id
  74.     * @param $pass new password for user
  75.     * @param $cvs  cvs user id (needed for pserver passwd files)
  76.     */
  77.     function modUser($user,$pass,$cvsuser) {
  78.         if(isset($this->users[$user]) && $this->locked) {
  79.             $this->users[$user] = crypt($pass);
  80.             $this->cvs[$user] = $cvsuser;
  81.             return true;
  82.         } else {
  83.             return false;
  84.         }
  85.     }
  86.  
  87.     /**
  88.     * Deletes a user
  89.     *
  90.     * @param $user user id
  91.     */
  92.     function delUser($user) {
  93.         if(isset($this->users[$user]) && $this->locked) {
  94.             unset($this->users[$user]);
  95.             unset($this->cvs[$user]);
  96.         } else {
  97.             return false;
  98.         }    
  99.     }
  100.  
  101.     /**
  102.     * Verifies a user's password
  103.     *
  104.     * @param $user user id
  105.     * @param $pass password for user
  106.     */
  107.     function verifyPassword($user,$pass) {
  108.         if(isset($this->users[$user])) {
  109.             if($this->users[$user] == crypt($pass,substr($this->users[$user],0,2))) return true;
  110.         }
  111.         return false;
  112.     }
  113.  
  114.     /**
  115.     * Writes changes to passwd file and unlocks it
  116.     */
  117.     function close() {
  118.         if($this->locked) {
  119.             foreach($this->users as $user => $pass) {
  120.                 if($this->cvs[$user]) {
  121.                     fputs($this->fplock, "$user:$pass:".$this->cvs[$user]."\n");
  122.                 } else {
  123.                     fputs($this->fplock, "$user:$pass\n");
  124.                 }
  125.             }
  126.             rename($this->lockfile,$this->filename);
  127.             flock($this->fplock, LOCK_UN);
  128.             $this->locked = false;
  129.             fclose($this->fplock);
  130.         }
  131.     }
  132. }
  133. ?>
  134.