Changeset 622 for trunk/lib


Ignore:
Timestamp:
Feb 15, 2018 12:31:38 PM (6 years ago)
Author:
anonymous
Message:

Add Email() sandbox mode. Add Email->send() test. Fix minor bugs.

Location:
trunk/lib
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • trunk/lib/Auth_SQL.inc.php

    r619 r622  
    826826            $db->query("
    827827                UPDATE " . $this->_params['db_table'] . " SET
    828                 blocked = '',
     828                blocked = NULL,
    829829                blocked_reason = ''
    830830                WHERE " . $this->_params['db_primary_key'] . " = '" . $db->escapeString($user_id) . "'
  • trunk/lib/Email.inc.php

    r618 r622  
    7373        'wrap' => true,
    7474        'line_length' => 75,
     75
     76        'sandbox_mode' => null,
     77        'sandbox_to_addr' => null,
    7578    );
    7679
     
    8083    // String that contains the email body after replacements.
    8184    protected $_template_replaced;
     85
     86    // Email debug modes.
     87    const SANDBOX_MODE_REDIRECT = 1; // Send all mail to 'sandbox_to_addr'
     88    const SANDBOX_MODE_STDERR = 2; // Log all mail to stderr
    8289
    8390    /**
     
    359366            }
    360367            // If the envelope_sender_address was given as a header, move it to the correct place.
    361             if ('envelope_sender_address' == $key) {
     368            if ('envelope_sender_address' == strtolower($key)) {
    362369                $this->_params['envelope_sender_address'] = isset($this->_params['envelope_sender_address']) ? $this->_params['envelope_sender_address'] : $val;
     370                continue;
     371            }
     372            // If we're sending in sandbox mode, remove any headers with recipient addresses.
     373            if ($this->getParam('sandbox_mode') == self::SANDBOX_MODE_REDIRECT && in_array(strtolower($key), array('to', 'cc', 'bcc')) && mb_strpos($val, '@') !== false) {
     374                // Don't carry this into the $final_headers.
     375                $app->logMsg(sprintf('Skipping header in sandbox mode: %s=%s', $key, $val), LOG_DEBUG, __FILE__, __LINE__);
    363376                continue;
    364377            }
     
    384397            $app->logMsg(sprintf('Mail header injection attack in content: %s', $full_mail_content), LOG_WARNING, __FILE__, __LINE__);
    385398            return false;
     399        }
     400
     401        // Enter sandbox mode, if specified.
     402        switch ($this->getParam('sandbox_mode')) {
     403        case self::SANDBOX_MODE_REDIRECT:
     404            if (!$this->getParam('sandbox_to_addr')) {
     405                $app->logMsg(sprintf('Email sandbox_mode is SANDBOX_MODE_REDIRECT but sandbox_to_addr is not set.', null), LOG_ERR, __FILE__, __LINE__);
     406                break;
     407            }
     408            $final_to = $this->getParam('sandbox_to_addr');
     409            break;
     410
     411        case self::SANDBOX_MODE_STDERR:
     412            file_put_contents('php://stderr', sprintf("Subject: %s\nTo: %s\n%s\n\n%s", $this->getParam('subject'), $final_to, str_replace($this->getParam('crlf'), "\n", $final_headers), $final_body), FILE_APPEND);
     413            return true;
    386414        }
    387415
Note: See TracChangeset for help on using the changeset viewer.