sieve.php.svn-base

来自「PHP 知识管理系统(基于树结构的知识管理系统), 英文原版的PHP源码。」· SVN-BASE 代码 · 共 1,165 行 · 第 1/3 页

SVN-BASE
1,165
字号
        $this->_state = NET_SIEVE_STATE_TRANSACTION;        return true;    }     /* Handles the authentication using any known method     *     * @param string The userid to authenticate as.     * @param string The password to authenticate with.     * @param string The method to use ( if $usermethod == '' then the class chooses the best method (the stronger is the best ) )     * @param string The effective uid to authenticate as.     *     * @return mixed  string or PEAR_Error     *     * @access private     * @since  1.0     */    function _cmdAuthenticate($uid , $pwd , $userMethod = null , $euser = '' )    {        if ( PEAR::isError( $method = $this->_getBestAuthMethod($userMethod) ) ) {            return $method;        }        switch ($method) {            case 'DIGEST-MD5':                $result = $this->_authDigest_MD5( $uid , $pwd , $euser );                return $result;                break;            case 'CRAM-MD5':                $result = $this->_authCRAM_MD5( $uid , $pwd, $euser);                break;            case 'LOGIN':                $result = $this->_authLOGIN( $uid , $pwd , $euser );                break;            case 'PLAIN':                $result = $this->_authPLAIN( $uid , $pwd , $euser );                break;            default :                $result = new PEAR_Error( "$method is not a supported authentication method" );                break;        }        if (PEAR::isError($res = $this->_doCmd() )) {            return $res;        }        return $result;    }     /* Authenticates the user using the PLAIN method.     *     * @param string The userid to authenticate as.     * @param string The password to authenticate with.     * @param string The effective uid to authenticate as.     *     * @return array Returns an array containing the response     *     * @access private     * @since  1.0     */    function _authPLAIN($user, $pass , $euser )    {        if ($euser != '') {            $cmd=sprintf('AUTHENTICATE "PLAIN" "%s"', base64_encode($euser . chr(0) . $user . chr(0) . $pass ) ) ;        } else {            $cmd=sprintf('AUTHENTICATE "PLAIN" "%s"', base64_encode( chr(0) . $user . chr(0) . $pass ) );        }        return  $this->_sendCmd( $cmd ) ;    }     /* Authenticates the user using the PLAIN method.     *     * @param string The userid to authenticate as.     * @param string The password to authenticate with.     * @param string The effective uid to authenticate as.     *     * @return array Returns an array containing the response     *     * @access private     * @since  1.0     */    function _authLOGIN($user, $pass , $euser )    {        $this->_sendCmd('AUTHENTICATE "LOGIN"');        $this->_doCmd(sprintf('"%s"', base64_encode($user)));        $this->_doCmd(sprintf('"%s"', base64_encode($pass)));    }     /* Authenticates the user using the CRAM-MD5 method.     *     * @param string The userid to authenticate as.     * @param string The password to authenticate with.     * @param string The cmdID.     *     * @return array Returns an array containing the response     *     * @access private     * @since  1.0     */    function _authCRAM_MD5($uid, $pwd, $euser)    {        if ( PEAR::isError( $challenge = $this->_doCmd( 'AUTHENTICATE "CRAM-MD5"' ) ) ) {            $this->_error=challenge ;            return challenge ;        }        $challenge=trim($challenge);        $challenge = base64_decode( trim($challenge) );        $cram = &Auth_SASL::factory('crammd5');        if ( PEAR::isError($resp=$cram->getResponse( $uid , $pwd , $challenge ) ) ) {            $this->_error=$resp;            return $resp;        }        $auth_str = base64_encode( $resp );        if ( PEAR::isError($error = $this->_sendStringResponse( $auth_str  ) ) ) {            $this->_error=$error;            return $error;        }    }     /* Authenticates the user using the DIGEST-MD5 method.     *     * @param string The userid to authenticate as.     * @param string The password to authenticate with.     * @param string The efective user     *     * @return array Returns an array containing the response     *     * @access private     * @since  1.0     */    function _authDigest_MD5($uid, $pwd, $euser)    {        if ( PEAR::isError( $challenge = $this->_doCmd('AUTHENTICATE "DIGEST-MD5"') ) ) {            $this->_error=challenge ;            return challenge ;        }        $challenge = base64_decode( $challenge );        $digest = &Auth_SASL::factory('digestmd5');                        if(PEAR::isError($param=$digest->getResponse($uid, $pwd, $challenge, "localhost", "sieve" , $euser) )) {            return $param;        }        $auth_str = base64_encode($param);        if ( PEAR::isError($error = $this->_sendStringResponse( $auth_str  ) ) ) {            $this->_error=$error;            return $error;        }        if ( PEAR::isError( $challenge = $this->_doCmd() ) ) {            $this->_error=$challenge ;            return $challenge ;        }        if( strtoupper(substr($challenge,0,2))== 'OK' ){                return true;        }                /*        * We don't use the protocol's third step because SIEVE doesn't allow        * subsequent authentication, so we just silently ignore it.        */        if ( PEAR::isError($error = $this->_sendStringResponse( '' ) ) ) {            $this->_error=$error;            return $error;        }        if (PEAR::isError($res = $this->_doCmd() )) {            return $res;        }    }    /**    * Removes a script from the server    *    * @access private    * @param  string $scriptname Name of the script to delete    * @return mixed              True on success, PEAR_Error otherwise    */    function _cmdDeleteScript($scriptname)    {        if (NET_SIEVE_STATE_TRANSACTION != $this->_state) {            $msg='Not currently in AUTHORISATION state';            $code=1;            return $this->_raiseError($msg,$code);        }        if (PEAR::isError($res = $this->_doCmd(sprintf('DELETESCRIPT "%s"', $scriptname) ) )) {            return $res;        }        return true;    }    /**    * Retrieves the contents of the named script    *    * @access private    * @param  string $scriptname Name of the script to retrieve    * @return mixed              The script if successful, PEAR_Error otherwise    */    function _cmdGetScript($scriptname)    {        if (NET_SIEVE_STATE_TRANSACTION != $this->_state) {            $msg='Not currently in AUTHORISATION state';            $code=1;            return $this->_raiseError($msg,$code);        }        if (PEAR::isError($res = $this->_doCmd(sprintf('GETSCRIPT "%s"', $scriptname) ) ) ) {            return $res;        }        return preg_replace('/{[0-9]+}\r\n/', '', $res);    }    /**    * Sets the ACTIVE script, ie the one that gets run on new mail    * by the server    *    * @access private    * @param  string $scriptname The name of the script to mark as active    * @return mixed              True on success, PEAR_Error otherwise    */    function _cmdSetActive($scriptname)    {        if (NET_SIEVE_STATE_TRANSACTION != $this->_state) {            $msg='Not currently in AUTHORISATION state';            $code=1;            return $this->_raiseError($msg,$code);        }        if (PEAR::isError($res = $this->_doCmd(sprintf('SETACTIVE "%s"', $scriptname) ) ) ) {            return $res;        }        $this->_activeScript = $scriptname;        return true;    }    /**    * Sends the LISTSCRIPTS command    *    * @access private    * @return mixed Two item array of scripts, and active script on success,    *               PEAR_Error otherwise.    */    function _cmdListScripts()    {        if (NET_SIEVE_STATE_TRANSACTION != $this->_state) {            $msg='Not currently in AUTHORISATION state';            $code=1;            return $this->_raiseError($msg,$code);        }        $scripts = array();        $activescript = null;        if (PEAR::isError($res = $this->_doCmd('LISTSCRIPTS'))) {            return $res;        }        $res = explode("\r\n", $res);        foreach ($res as $value) {            if (preg_match('/^"(.*)"( ACTIVE)?$/i', $value, $matches)) {                $scripts[] = $matches[1];                if (!empty($matches[2])) {                    $activescript = $matches[1];                }            }        }        return array($scripts, $activescript);    }    /**    * Sends the PUTSCRIPT command to add a script to    * the server.    *    * @access private    * @param  string $scriptname Name of the new script    * @param  string $scriptdata The new script    * @return mixed              True on success, PEAR_Error otherwise    */    function _cmdPutScript($scriptname, $scriptdata)    {        if (NET_SIEVE_STATE_TRANSACTION != $this->_state) {            $msg='Not currently in TRANSACTION state';            $code=1;            return $this->_raiseError($msg,$code);        }        if (PEAR::isError($res = $this->_doCmd(sprintf("PUTSCRIPT \"%s\" {%d+}\r\n%s", $scriptname, strlen($scriptdata),$scriptdata ) ))) {            return $res;        }        return true;    }    /**    * Sends the LOGOUT command and terminates the connection    *    * @access private    * @return mixed True on success, PEAR_Error otherwise    */    function _cmdLogout($sendLogoutCMD=true)    {        if (NET_SIEVE_STATE_DISCONNECTED === $this->_state) {            $msg='Not currently connected';            $code=1;            return $this->_raiseError($msg,$code);            //return PEAR::raiseError('Not currently connected');        }        if($sendLogoutCMD){            if (PEAR::isError($res = $this->_doCmd('LOGOUT'))) {                return $res;            }        }        $this->_sock->disconnect();        $this->_state = NET_SIEVE_STATE_DISCONNECTED;        return true;    }    /**    * Sends the CAPABILITY command    *    * @access private    * @return mixed True on success, PEAR_Error otherwise    */    function _cmdCapability()    {        if (NET_SIEVE_STATE_DISCONNECTED === $this->_state) {            $msg='Not currently connected';            $code=1;            return $this->_raiseError($msg,$code);        }                if (PEAR::isError($res = $this->_doCmd('CAPABILITY'))) {            return $res;        }        $this->_parseCapability($res);        return true;    }    /**    * Checks if the server has space to store the script    * by the server    *    * @access public    * @param  string $scriptname The name of the script to mark as active    * @return mixed              True on success, PEAR_Error otherwise    */

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?