diff options
Diffstat (limited to 'includes/pear/Auth/Container/File.php')
| -rw-r--r-- | includes/pear/Auth/Container/File.php | 314 |
1 files changed, 314 insertions, 0 deletions
diff --git a/includes/pear/Auth/Container/File.php b/includes/pear/Auth/Container/File.php new file mode 100644 index 0000000..2b8274c --- /dev/null +++ b/includes/pear/Auth/Container/File.php @@ -0,0 +1,314 @@ +<?php +/* vim: set expandtab tabstop=4 shiftwidth=4 softtabstop=4 foldmethod=marker: */ + +/** + * Storage driver for use against a generic password file + * + * PHP versions 4 and 5 + * + * LICENSE: This source file is subject to version 3.01 of the PHP license + * that is available through the world-wide-web at the following URI: + * http://www.php.net/license/3_01.txt. If you did not receive a copy of + * the PHP License and are unable to obtain it through the web, please + * send a note to license@php.net so we can mail you a copy immediately. + * + * @category Authentication + * @package Auth + * @author Stefan Ekman <stekman@sedata.org> + * @author Martin Jansen <mj@php.net> + * @author Mika Tuupola <tuupola@appelsiini.net> + * @author Michael Wallner <mike@php.net> + * @author Adam Ashley <aashley@php.net> + * @copyright 2001-2006 The PHP Group + * @license http://www.php.net/license/3_01.txt PHP License 3.01 + * @version CVS: $Id: File.php 237449 2007-06-12 03:11:27Z aashley $ + * @link http://pear.php.net/package/Auth + */ + +/** + * Include PEAR File_Passwd package + */ +require_once "File/Passwd.php"; +/** + * Include Auth_Container base class + */ +require_once "Auth/Container.php"; +/** + * Include PEAR package for error handling + */ +require_once "PEAR.php"; + +/** + * Storage driver for fetching login data from an encrypted password file. + * + * This storage container can handle CVS pserver style passwd files. + * + * @category Authentication + * @package Auth + * @author Stefan Ekman <stekman@sedata.org> + * @author Martin Jansen <mj@php.net> + * @author Mika Tuupola <tuupola@appelsiini.net> + * @author Michael Wallner <mike@php.net> + * @author Adam Ashley <aashley@php.net> + * @copyright 2001-2006 The PHP Group + * @license http://www.php.net/license/3_01.txt PHP License 3.01 + * @version Release: @package_version@ File: $Revision: 237449 $ + * @link http://pear.php.net/package/Auth + */ +class Auth_Container_File extends Auth_Container +{ + + // {{{ properties + + /** + * Path to passwd file + * + * @var string + */ + var $pwfile = ''; + + /** + * Options for container + * + * @var array + */ + var $options = array(); + + // }}} + // {{{ Auth_Container_File() [constructor] + + /** + * Constructor of the container class + * + * @param string $filename path to passwd file + * @return object Auth_Container_File new Auth_Container_File object + */ + function Auth_Container_File($filename) { + $this->_setDefaults(); + + // Only file is a valid option here + if(is_array($filename)) { + $this->pwfile = $filename['file']; + $this->_parseOptions($filename); + } else { + $this->pwfile = $filename; + } + } + + // }}} + // {{{ fetchData() + + /** + * Authenticate an user + * + * @param string username + * @param string password + * @return mixed boolean|PEAR_Error + */ + function fetchData($user, $pass) + { + $this->log('Auth_Container_File::fetchData() called.', AUTH_LOG_DEBUG); + return File_Passwd::staticAuth($this->options['type'], $this->pwfile, $user, $pass); + } + + // }}} + // {{{ listUsers() + + /** + * List all available users + * + * @return array + */ + function listUsers() + { + $this->log('Auth_Container_File::listUsers() called.', AUTH_LOG_DEBUG); + + $pw_obj = &$this->_load(); + if (PEAR::isError($pw_obj)) { + return array(); + } + + $users = $pw_obj->listUser(); + if (!is_array($users)) { + return array(); + } + + foreach ($users as $key => $value) { + $retVal[] = array("username" => $key, + "password" => $value['passwd'], + "cvsuser" => $value['system']); + } + + $this->log('Found '.count($retVal).' users.', AUTH_LOG_DEBUG); + + return $retVal; + } + + // }}} + // {{{ addUser() + + /** + * Add a new user to the storage container + * + * @param string username + * @param string password + * @param mixed Additional parameters to File_Password_*::addUser() + * + * @return boolean + */ + function addUser($user, $pass, $additional='') + { + $this->log('Auth_Container_File::addUser() called.', AUTH_LOG_DEBUG); + $params = array($user, $pass); + if (is_array($additional)) { + foreach ($additional as $item) { + $params[] = $item; + } + } else { + $params[] = $additional; + } + + $pw_obj = &$this->_load(); + if (PEAR::isError($pw_obj)) { + return false; + } + + $res = call_user_func_array(array(&$pw_obj, 'addUser'), $params); + if (PEAR::isError($res)) { + return false; + } + + $res = $pw_obj->save(); + if (PEAR::isError($res)) { + return false; + } + + return true; + } + + // }}} + // {{{ removeUser() + + /** + * Remove user from the storage container + * + * @param string Username + * @return boolean + */ + function removeUser($user) + { + $this->log('Auth_Container_File::removeUser() called.', AUTH_LOG_DEBUG); + $pw_obj = &$this->_load(); + if (PEAR::isError($pw_obj)) { + return false; + } + + $res = $pw_obj->delUser($user); + if (PEAR::isError($res)) { + return false; + } + + $res = $pw_obj->save(); + if (PEAR::isError($res)) { + return false; + } + + return true; + } + + // }}} + // {{{ changePassword() + + /** + * Change password for user in the storage container + * + * @param string Username + * @param string The new password + */ + function changePassword($username, $password) + { + $this->log('Auth_Container_File::changePassword() called.', AUTH_LOG_DEBUG); + $pw_obj = &$this->_load(); + if (PEAR::isError($pw_obj)) { + return false; + } + + $res = $pw_obj->changePasswd($username, $password); + if (PEAR::isError($res)) { + return false; + } + + $res = $pw_obj->save(); + if (PEAR::isError($res)) { + return false; + } + + return true; + } + + // }}} + // {{{ _load() + + /** + * Load and initialize the File_Passwd object + * + * @return object File_Passwd_Cvs|PEAR_Error + */ + function &_load() + { + static $pw_obj; + + if (!isset($pw_obj)) { + $this->log('Instanciating File_Password object of type '.$this->options['type'], AUTH_LOG_DEBUG); + $pw_obj = File_Passwd::factory($this->options['type']); + if (PEAR::isError($pw_obj)) { + return $pw_obj; + } + + $pw_obj->setFile($this->pwfile); + + $res = $pw_obj->load(); + if (PEAR::isError($res)) { + return $res; + } + } + + return $pw_obj; + } + + // }}} + // {{{ _setDefaults() + + /** + * Set some default options + * + * @access private + * @return void + */ + function _setDefaults() + { + $this->options['type'] = 'Cvs'; + } + + // }}} + // {{{ _parseOptions() + + /** + * Parse options passed to the container class + * + * @access private + * @param array + */ + function _parseOptions($array) + { + foreach ($array as $key => $value) { + if (isset($this->options[$key])) { + $this->options[$key] = $value; + } + } + } + + // }}} + +} +?> |
