1<?php
2/* vim: set expandtab tabstop=4 shiftwidth=4 softtabstop=4 foldmethod=marker: */
3
4/**
5 * Storage driver for use against Samba password files
6 *
7 * PHP versions 4 and 5
8 *
9 * LICENSE: This source file is subject to version 3.01 of the PHP license
10 * that is available through the world-wide-web at the following URI:
11 * http://www.php.net/license/3_01.txt.  If you did not receive a copy of
12 * the PHP License and are unable to obtain it through the web, please
13 * send a note to license@php.net so we can mail you a copy immediately.
14 *
15 * @category   Authentication
16 * @package    Auth
17 * @author     Michael Bretterklieber <michael@bretterklieber.com>
18 * @author     Adam Ashley <aashley@php.net>
19 * @copyright  2001-2006 The PHP Group
20 * @license    http://www.php.net/license/3_01.txt  PHP License 3.01
21 * @version    CVS: $Id: SMBPasswd.php 237449 2007-06-12 03:11:27Z aashley $
22 * @link       http://pear.php.net/package/Auth
23 * @since      File available since Release 1.2.3
24 */
25
26/**
27 * Include PEAR File_SMBPasswd
28 */
29require_once "File/SMBPasswd.php";
30/**
31 * Include Auth_Container Base file
32 */
33require_once "Auth/Container.php";
34/**
35 * Include PEAR class for error handling
36 */
37require_once "PEAR.php";
38
39/**
40 * Storage driver for fetching login data from an SAMBA smbpasswd file.
41 *
42 * This storage container can handle SAMBA smbpasswd files.
43 *
44 * Example:
45 * $a = new Auth("SMBPasswd", '/usr/local/private/smbpasswd');
46 * $a->start();
47 * if ($a->getAuth()) {
48 *     printf ("AUTH OK<br>\n");
49 *     $a->logout();
50 * }
51 *
52 * @category   Authentication
53 * @package    Auth
54 * @author     Michael Bretterklieber <michael@bretterklieber.com>
55 * @author     Adam Ashley <aashley@php.net>
56 * @package    Auth
57 * @copyright  2001-2006 The PHP Group
58 * @license    http://www.php.net/license/3_01.txt  PHP License 3.01
59 * @version    Release: @package_version@  File: $Revision: 237449 $
60 * @link       http://pear.php.net/package/Auth
61 * @since      Class available since Release 1.2.3
62 */
63class Auth_Container_SMBPasswd extends Auth_Container
64{
65
66    // {{{ properties
67
68    /**
69     * File_SMBPasswd object
70     * @var object
71     */
72    var $pwfile;
73
74    // }}}
75
76    // {{{ Auth_Container_SMBPasswd() [constructor]
77
78    /**
79     * Constructor of the container class
80     *
81     * @param  $filename   string filename for a passwd type file
82     * @return object Returns an error object if something went wrong
83     */
84    function Auth_Container_SMBPasswd($filename)
85    {
86        $this->pwfile = new File_SMBPasswd($filename,0);
87
88        if (!$this->pwfile->load()) {
89            PEAR::raiseError("Error while reading file contents.", 41, PEAR_ERROR_DIE);
90            return;
91        }
92
93    }
94
95    // }}}
96    // {{{ fetchData()
97
98    /**
99     * Get user information from pwfile
100     *
101     * @param   string Username
102     * @param   string Password
103     * @return  boolean
104     */
105    function fetchData($username, $password)
106    {
107        $this->log('Auth_Container_SMBPasswd::fetchData() called.', AUTH_LOG_DEBUG);
108        return $this->pwfile->verifyAccount($username, $password);
109    }
110
111    // }}}
112    // {{{ listUsers()
113
114    function listUsers()
115    {
116        $this->log('Auth_Container_SMBPasswd::fetchData() called.', AUTH_LOG_DEBUG);
117        return $this->pwfile->getAccounts();
118    }
119
120    // }}}
121    // {{{ addUser()
122
123    /**
124     * Add a new user to the storage container
125     *
126     * @param string Username
127     * @param string Password
128     * @param array  Additional information
129     *
130     * @return boolean
131     */
132    function addUser($username, $password, $additional = '')
133    {
134        $this->log('Auth_Container_SMBPasswd::addUser() called.', AUTH_LOG_DEBUG);
135        $res = $this->pwfile->addUser($user, $additional['userid'], $pass);
136        if ($res === true) {
137            return $this->pwfile->save();
138        }
139        return $res;
140    }
141
142    // }}}
143    // {{{ removeUser()
144
145    /**
146     * Remove user from the storage container
147     *
148     * @param string Username
149     */
150    function removeUser($username)
151    {
152        $this->log('Auth_Container_SMBPasswd::removeUser() called.', AUTH_LOG_DEBUG);
153        $res = $this->pwfile->delUser($username);
154        if ($res === true) {
155            return $this->pwfile->save();
156        }
157        return $res;
158    }
159
160    // }}}
161    // {{{ changePassword()
162
163    /**
164     * Change password for user in the storage container
165     *
166     * @param string Username
167     * @param string The new password
168     */
169    function changePassword($username, $password)
170    {
171        $this->log('Auth_Container_SMBPasswd::changePassword() called.', AUTH_LOG_DEBUG);
172        $res = $this->pwfile->modUser($username, '', $password);
173        if ($res === true) {
174            return $this->pwfile->save();
175        }
176        return $res;
177    }
178
179    // }}}
180
181}
182?>
183