📄 custom.php
字号:
<?php/* vim: set expandtab tabstop=4 shiftwidth=4 softtabstop=4: *//** * File::Passwd::Custom * * PHP versions 4 and 5 * * LICENSE: This source file is subject to version 3.0 of the PHP license * that is available through the world-wide-web at the following URI: * http://www.php.net/license/3_0.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 FileFormats * @package File_Passwd * @author Michael Wallner <mike@php.net> * @copyright 2003-2005 Michael Wallner * @license http://www.php.net/license/3_0.txt PHP License 3.0 * @version CVS: $Id: Custom.php,v 1.10 2005/03/30 18:33:33 mike Exp $ * @link http://pear.php.net/package/File_Passwd *//*** Requires File::Passwd::Common*/require_once 'File/Passwd/Common.php';/** * Manipulate custom formatted passwd files** Usage Example:* <code>* $cust = &File_Passwd::factory('Custom');* $cust->setDelim('|');* $cust->load();* $cust->setEncFunc(array('File_Passwd', 'crypt_apr_md5'));* $cust->addUser('mike', 'pass');* $cust->save();* </code>* * @author Michael Wallner <mike@php.net>* @version $Revision: 1.10 $* @access public*/class File_Passwd_Custom extends File_Passwd_Common{ /** * Delimiter * * @access private * @var string */ var $_delim = ':'; /** * Encryption function * * @access private * @var string */ var $_enc = array('File_Passwd', 'crypt_md5'); /** * 'name map' * * @access private * @var array */ var $_map = array(); /** * Whether to use the 'name map' or not * * @var boolean * @access private */ var $_usemap = false; /** * Constructor * * @access protected * @return object */ function File_Passwd_Custom($file = 'passwd') { $this->__construct($file); } /** * Fast authentication of a certain user * * Returns a PEAR_Error if: * o file doesn't exist * o file couldn't be opened in read mode * o file couldn't be locked exclusively * o file couldn't be unlocked (only if auth fails) * o file couldn't be closed (only if auth fails) * o invalid encryption function <var>$opts[0]</var>, * or no delimiter character <var>$opts[1]</var> was provided * * @throws PEAR_Error FILE_PASSWD_E_UNDEFINED | * FILE_PASSWD_E_FILE_NOT_OPENED | * FILE_PASSWD_E_FILE_NOT_LOCKED | * FILE_PASSWD_E_FILE_NOT_UNLOCKED | * FILE_PASSWD_E_FILE_NOT_CLOSED | * FILE_PASSWD_E_INVALID_ENC_MODE * @static call this method statically for a reasonable fast authentication * @access public * @return mixed Returns &true; if authenticated, &false; if not or * <classname>PEAR_Error</classname> on failure. * @param string $file path to passwd file * @param string $user user to authenticate * @param string $pass plaintext password * @param array $otps encryption function and delimiter charachter * (in this order) */ function staticAuth($file, $user, $pass, $opts) { setType($opts, 'array'); if (count($opts) != 2 || empty($opts[1])) { return PEAR::raiseError('Insufficient options.', 0); } $line = File_Passwd_Common::_auth($file, $user, $opts[1]); if (!$line || PEAR::isError($line)) { return $line; } list(,$real)= explode($opts[1], $line); $crypted = File_Passwd_Custom::_genPass($pass, $real, $opts[0]); if (PEAR::isError($crypted)) { return $crypted; } return ($crypted === $real); } /** * Set delimiter * * You can set a custom char to delimit the columns of a data set. * Defaults to a colon (':'). Be aware that this char mustn't be * in the values of your data sets. * * @access public * @return void * @param string $delim custom delimiting character */ function setDelim($delim = ':') { @setType($delim, 'string'); if (empty($delim)) { $this->_delim = ':'; } else { $this->_delim = $delim{0}; } } /** * Get custom delimiter * * @access public * @return string */ function getDelim() { return $this->_delim; } /** * Set encryption function * * You can set a custom encryption function to use. * The supplied function will be called by php's call_user_function(), * so you can supply an array with a method of a class/object, too * (i.e. array('File_Passwd', 'crypt_apr_md5'). * * * @throws PEAR_Error FILE_PASSWD_E_INVALID_ENC_MODE * @access public * @return mixed Returns &true; on success or * <classname>PEAR_Error</classname> on failure. * @param mixed $function callable encryption function */ function setEncFunc($function = array('File_Passwd', 'crypt_md5')) { if (!is_callable($function)) { if (is_array($function)) { $function = implode('::', $function); } return PEAR::raiseError( sprintf(FILE_PASSWD_E_INVALID_ENC_MODE_STR, $function), FILE_PASSWD_E_INVALID_ENC_MODE ); } $this->_enc = $function; return true; } /** * Get current custom encryption method * * Possible return values (examples): * o 'md5' * o 'File_Passwd::crypt_md5' * * @access public * @return string */ function getEncFunc() { if (is_array($this->_enc)) { return implode('::', $this->_enc); } return $this->_enc; } /** * Whether to use the 'name map' of the extra properties or not * * @see File_Passwd_Custom::useMap() * @see setMap() * @see getMap() * * @access public * @return boolean always true if you set a value (true/false) OR * the actual value if called without param * * @param boolean $bool whether to use the 'name map' or not */ function useMap($bool = null) { if (is_null($bool)) { return $this->_usemap; } $this->_usemap = (bool) $bool; return true; } /** * Set the 'name map' to use with the extra properties of the user * * This map is used for naming the associative array of the extra properties. * * Returns a PEAR_Error if <var>$map</var> was not of type array. * * @see getMap() * @see useMap() * * @throws PEAR_Error FILE_PASSWD_E_PARAM_MUST_BE_ARRAY * @access public * @return mixed true on success or PEAR_Error */ function setMap($map = array()) { if (!is_array($map)) { return PEAR::raiseError( sprintf(FILE_PASSWD_E_PARAM_MUST_BE_ARRAY_STR, '$map'), FILE_PASSWD_E_PARAM_MUST_BE_ARRAY ); } $this->_map = $map; return true; } /** * Get the 'name map' which is used for the extra properties of the user * * @see setMap() * @see useMap() * * @access public * @return array */ function getMap() { return $this->_map; } /** * Apply changes an rewrite passwd file * * Returns a PEAR_Error if: * o directory in which the file should reside couldn't be created * o file couldn't be opened in write mode * o file couldn't be locked exclusively * o file couldn't be unlocked * o file couldn't be closed * * @throws PEAR_Error FILE_PASSWD_E_FILE_NOT_OPENED | * FILE_PASSWD_E_FILE_NOT_LOCKED | * FILE_PASSWD_E_FILE_NOT_UNLOCKED |
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -