📄 unix.php
字号:
* Returns a PEAR_Error if <var>$map</var> was not of type array. * * @see getMap() * @see useMap() * * @throws PEAR_Error * @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; } /** * If the passwords of this passwd file are shadowed in another file. * * @access public * @return boolean */ function isShadowed() { return $this->_shadowed; } /** * Add an user * * The username must start with an alphabetical character and must NOT * contain any other characters than alphanumerics, the underline and dash. * * If you use the 'name map' you should also use these naming in * the supplied extra array, because your values would get mixed up * if they are in the wrong order, which is always true if you * DON'T use the 'name map'! * * So be warned and USE the 'name map'! * * If the passwd file is shadowed, the user will be added though, but * with an 'x' as password, and a PEAR_Error will be returned, too. * * Returns a PEAR_Error if: * o user already exists * o user contains illegal characters * o encryption mode is not supported * o passwords are shadowed in another file * o any element of the <var>$extra</var> array contains a colon (':') * * @throws PEAR_Error * @access public * @return mixed true on success or PEAR_Error * @param string $user the name of the user to add * @param string $pass the password of the user to add * @param array $extra extra properties of user to add */ function addUser($user, $pass, $extra = array()) { if ($this->userExists($user)) { return PEAR::raiseError( sprintf(FILE_PASSWD_E_EXISTS_ALREADY_STR, 'User ', $user), FILE_PASSWD_E_EXISTS_ALREADY ); } if (!preg_match($this->_pcre, $user)) { return PEAR::raiseError( sprintf(FILE_PASSWD_E_INVALID_CHARS_STR, 'User ', $user), FILE_PASSWD_E_INVALID_CHARS ); } if (!is_array($extra)) { setType($extra, 'array'); } foreach ($extra as $e){ if (strstr($e, ':')) { return PEAR::raiseError( sprintf(FILE_PASSWD_E_INVALID_CHARS_STR, 'Property ', $e), FILE_PASSWD_E_INVALID_CHARS ); } } /** * If passwords of the passwd file are shadowed, * the password of the user will be set to 'x'. */ if ($this->_shadowed) { $pass = 'x'; } else { $pass = $this->_genPass($pass); if (PEAR::isError($pass)) { return $pass; } } /** * If you don't use the 'name map' the user array will be numeric. */ if (!$this->_usemap) { array_unshift($extra, $pass); $this->_users[$user] = $extra; } else { $map = $this->_map; array_unshift($map, 'pass'); $extra['pass'] = $pass; foreach ($map as $key){ $this->_users[$user][$key] = @$extra[$key]; } } /** * Raise a PEAR_Error if passwords are shadowed. */ if ($this->_shadowed) { return PEAR::raiseError( 'Password has been set to \'x\' because they are '. 'shadowed in another file.', 0 ); } return true; } /** * Modify properties of a certain user * * # DON'T MODIFY THE PASSWORD WITH THIS METHOD! * * You should use this method only if the 'name map' is used, too. * * Returns a PEAR_Error if: * o user doesn't exist * o any property contains a colon (':') * * @see changePasswd() * * @throws PEAR_Error * @access public * @return mixed true on success or PEAR_Error * @param string $user the user to modify * @param array $properties an associative array of * properties to modify */ function modUser($user, $properties = array()) { if (!$this->userExists($user)) { return PEAR::raiseError( sprintf(FILE_PASSWD_E_EXISTS_NOT_STR, 'User ', $user), FILE_PASSWD_E_EXISTS_NOT ); } if (!is_array($properties)) { setType($properties, 'array'); } foreach ($properties as $key => $value){ if (strstr($value, ':')) { return PEAR::raiseError( sprintf(FILE_PASSWD_E_INVALID_CHARS_STR, 'User ', $user), FILE_PASSWD_E_INVALID_CHARS ); } $this->_users[$user][$key] = $value; } return true; } /** * Change the password of a certain user * * Returns a PEAR_Error if: * o user doesn't exists * o passwords are shadowed in another file * o encryption mode is not supported * * @throws PEAR_Error * @access public * @return mixed true on success or PEAR_Error * @param string $user the user whose password should be changed * @param string $pass the new plaintext password */ function changePasswd($user, $pass) { if ($this->_shadowed) { return PEAR::raiseError( 'Passwords of this passwd file are shadowed.', 0 ); } if (!$this->userExists($user)) { return PEAR::raiseError( sprintf(FILE_PASSWD_E_EXISTS_NOT_STR, 'User ', $user), FILE_PASSWD_E_EXISTS_NOT ); } $pass = $this->_genPass($pass); if (PEAR::isError($pass)) { return $pass; } if ($this->_usemap) { $this->_users[$user]['pass'] = $pass; } else { $this->_users[$user][0] = $pass; } return true; } /** * Verify the password of a certain user * * Returns a PEAR_Error if: * o user doesn't exist * o encryption mode is not supported * * @throws PEAR_Error * @access public * @return mixed true if passwors equal, false if they don't or PEAR_Error * @param string $user the user whose password should be verified * @param string $pass the password to verify */ function verifyPasswd($user, $pass) { if (!$this->userExists($user)) { return PEAR::raiseError( sprintf(FILE_PASSWD_E_EXISTS_NOT_STR, 'User ', $user), FILE_PASSWD_E_EXISTS_NOT ); } $real = $this->_usemap ? $this->_users[$user]['pass'] : $this->_users[$user][0] ; return ($real === $this->_genPass($pass, $real)); } /** * Generate crypted password from the plaintext password * * Returns a PEAR_Error if actual encryption mode is not supported. * * @throws PEAR_Error * @access private * @return mixed the crypted password or PEAR_Error * @param string $pass the plaintext password * @param string $salt the crypted password from which to gain the salt * @param string $mode the encryption mode to use; don't set, because * it's usually taken from File_Passwd_Unix::_mode */ function _genPass($pass, $salt = null, $mode = null) { static $crypters; if (!isset($crypters)) { $crypters = get_class_methods('File_Passwd'); } $mode = !isset($mode) ? strToLower($this->_mode) : strToLower($mode); $func = 'crypt_' . $mode; if (!in_array($func, $crypters)) { return PEAR::raiseError( sprintf(FILE_PASSWD_E_INVALID_ENC_MODE_STR, $mode), FILE_PASSWD_E_INVALID_ENC_MODE ); } return call_user_func(array('File_Passwd', $func), $pass, $salt); } /** * Generate Password * * Returns PEAR_Error FILE_PASSD_E_INVALID_ENC_MODE if the supplied * encryption mode is not supported. * * @see File_Passwd * @static * @access public * @return mixed The crypted password on success or PEAR_Error on failure. * @param string $pass The plaintext password. * @param string $mode The encryption mode to use. * @param string $salt The salt to use. */ function generatePasswd($pass, $mode = FILE_PASSWD_MD5, $salt = null) { if (!isset($mode)) { return PEAR::raiseError( sprintf(FILE_PASSWD_E_INVALID_ENC_MODE_STR, '<NULL>'), FILE_PASSWD_E_INVALID_ENC_MODE ); } return File_Passwd_Unix::_genPass($pass, $salt, $mode); } /** * @ignore * @deprecated */ function generatePassword($pass, $mode = FILE_PASSWD_MD5, $salt = null) { return File_Passwd_Unix::generatePasswd($pass, $mode, $salt); } }?>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -