alecpl
2011-04-17 462de2d2028617c8464f174987785a92583313be
- PEAR::Net_SMTP 1.5.2, fixed timeout issue (#1487843)


3 files modified
32 ■■■■ changed files
CHANGELOG 2 ●●● patch | view | raw | blame | history
program/include/rcube_smtp.php 9 ●●●● patch | view | raw | blame | history
program/lib/Net/SMTP.php 21 ●●●● patch | view | raw | blame | history
CHANGELOG
@@ -1,6 +1,7 @@
CHANGELOG Roundcube Webmail
===========================
- PEAR::Net_SMTP 1.5.2, fixed timeout issue (#1487843)
- Added plugin hook for request token creation
- Replace LDAP vars in group queries (#1487837)
- Fix vcard folding with uncode characters (#1487868)
@@ -17,7 +18,6 @@
- Enable TinyMCE's contextmenu (#1487014)
- TinyMCE 3.4.1
- Stateless request tokens. No keep-alive necessary on login page (#1487829)
- PEAR::Net_SMTP 1.5.1
- Allow multiple concurrent compose sessions
- Force names of unique constraints in PostgreSQL DDL
- Add code for prevention from IMAP connection hangs when server closes socket unexpectedly
program/include/rcube_smtp.php
@@ -105,7 +105,7 @@
    $this->conn = new Net_SMTP($smtp_host, $smtp_port, $helo_host);
    if($RCMAIL->config->get('smtp_debug'))
    if ($RCMAIL->config->get('smtp_debug'))
      $this->conn->setDebug(true, array($this, 'debug_handler'));
    // try to connect to server and exit on failure
@@ -118,6 +118,13 @@
      return false;
    }
    // workaround for timeout bug in Net_SMTP 1.5.[0-1] (#1487843)
    if (method_exists($this->conn, 'setTimeout')
      && ($timeout = ini_get('default_socket_timeout'))
    ) {
      $this->conn->setTimeout($timeout);
    }
    $smtp_user = str_replace('%u', $_SESSION['username'], $CONFIG['smtp_user']);
    $smtp_pass = str_replace('%p', $RCMAIL->decrypt($_SESSION['password']), $CONFIG['smtp_pass']);
    $smtp_auth_type = empty($CONFIG['smtp_auth_type']) ? NULL : $CONFIG['smtp_auth_type'];
program/lib/Net/SMTP.php
@@ -106,6 +106,14 @@
    var $_socket = null;
    /**
     * Array of socket options that will be passed to Net_Socket::connect().
     * @see stream_context_create()
     * @var array
     * @access private
     */
    var $_socket_options = null;
    /**
     * The socket I/O timeout value in seconds.
     * @var int
     * @access private
@@ -156,12 +164,13 @@
     * @param string  $localhost  The value to give when sending EHLO or HELO.
     * @param boolean $pipeling   Use SMTP command pipelining
     * @param integer $timeout    Socket I/O timeout in seconds.
     * @param array   $socket_options Socket stream_context_create() options.
     *
     * @access  public
     * @since   1.0
     */
    function Net_SMTP($host = null, $port = null, $localhost = null,
        $pipelining = false, $timeout = 0)
        $pipelining = false, $timeout = 0, $socket_options = null)
    {
        if (isset($host)) {
            $this->host = $host;
@@ -175,6 +184,7 @@
        $this->pipelining = $pipelining;
        $this->_socket = new Net_Socket();
        $this->_socket_options = $socket_options;
        $this->_timeout = $timeout;
        /* Include the Auth_SASL package.  If the package is not
@@ -405,7 +415,8 @@
    {
        $this->_greeting = null;
        $result = $this->_socket->connect($this->host, $this->port,
                                          $persistent, $timeout);
                                          $persistent, $timeout,
                                          $this->_socket_options);
        if (PEAR::isError($result)) {
            return PEAR::raiseError('Failed to connect socket: ' .
                                    $result->getMessage());
@@ -417,8 +428,10 @@
         * timeout values for the initial connection (our $timeout parameter) 
         * and all other socket operations.
         */
        if (PEAR::isError($error = $this->setTimeout($this->_timeout))) {
            return $error;
        if ($this->_timeout > 0) {
            if (PEAR::isError($error = $this->setTimeout($this->_timeout))) {
                return $error;
            }
        }
        if (PEAR::isError($error = $this->_parseResponse(220))) {