summaryrefslogtreecommitdiff
path: root/includes/pear/Auth/Container/File.php
diff options
context:
space:
mode:
Diffstat (limited to 'includes/pear/Auth/Container/File.php')
-rw-r--r--includes/pear/Auth/Container/File.php314
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;
+ }
+ }
+ }
+
+ // }}}
+
+}
+?>