First commit
This commit is contained in:
commit
c6e2478c40
13918 changed files with 2303184 additions and 0 deletions
7
sites/all/modules/civicrm/vendor/pear/auth_sasl/.gitignore
vendored
Normal file
7
sites/all/modules/civicrm/vendor/pear/auth_sasl/.gitignore
vendored
Normal file
|
@ -0,0 +1,7 @@
|
|||
*~
|
||||
.*~
|
||||
|
||||
# composer related
|
||||
composer.lock
|
||||
composer.phar
|
||||
vendor
|
21
sites/all/modules/civicrm/vendor/pear/auth_sasl/.travis.yml
vendored
Normal file
21
sites/all/modules/civicrm/vendor/pear/auth_sasl/.travis.yml
vendored
Normal file
|
@ -0,0 +1,21 @@
|
|||
language: php
|
||||
sudo: false
|
||||
php:
|
||||
- 5.4
|
||||
- 5.5
|
||||
- 5.6
|
||||
- 7.0
|
||||
- 7.1
|
||||
script:
|
||||
- pear list
|
||||
- pear channel-update pear.php.net
|
||||
- pear upgrade --force pear/pear-1.10.1
|
||||
- pear list
|
||||
- pear install --force package.xml
|
||||
- pear list
|
||||
- pear package
|
||||
- pear package-validate
|
||||
- pear install --force *.tgz
|
||||
- pear list
|
||||
- composer install
|
||||
- ./vendor/bin/phpunit -c phpunit.xml.dist
|
125
sites/all/modules/civicrm/vendor/pear/auth_sasl/Auth/SASL.php
vendored
Executable file
125
sites/all/modules/civicrm/vendor/pear/auth_sasl/Auth/SASL.php
vendored
Executable file
|
@ -0,0 +1,125 @@
|
|||
<?php
|
||||
// +-----------------------------------------------------------------------+
|
||||
// | Copyright (c) 2002-2003 Richard Heyes |
|
||||
// | All rights reserved. |
|
||||
// | |
|
||||
// | Redistribution and use in source and binary forms, with or without |
|
||||
// | modification, are permitted provided that the following conditions |
|
||||
// | are met: |
|
||||
// | |
|
||||
// | o Redistributions of source code must retain the above copyright |
|
||||
// | notice, this list of conditions and the following disclaimer. |
|
||||
// | o Redistributions in binary form must reproduce the above copyright |
|
||||
// | notice, this list of conditions and the following disclaimer in the |
|
||||
// | documentation and/or other materials provided with the distribution.|
|
||||
// | o The names of the authors may not be used to endorse or promote |
|
||||
// | products derived from this software without specific prior written |
|
||||
// | permission. |
|
||||
// | |
|
||||
// | THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS |
|
||||
// | "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT |
|
||||
// | LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR |
|
||||
// | A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT |
|
||||
// | OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, |
|
||||
// | SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT |
|
||||
// | LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, |
|
||||
// | DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY |
|
||||
// | THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT |
|
||||
// | (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE |
|
||||
// | OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
|
||||
// | |
|
||||
// +-----------------------------------------------------------------------+
|
||||
// | Author: Richard Heyes <richard@php.net> |
|
||||
// +-----------------------------------------------------------------------+
|
||||
//
|
||||
// $Id$
|
||||
|
||||
/**
|
||||
* Client implementation of various SASL mechanisms
|
||||
*
|
||||
* @author Richard Heyes <richard@php.net>
|
||||
* @access public
|
||||
* @version 1.0
|
||||
* @package Auth_SASL
|
||||
*/
|
||||
|
||||
require_once('PEAR.php');
|
||||
|
||||
class Auth_SASL
|
||||
{
|
||||
/**
|
||||
* Factory class. Returns an object of the request
|
||||
* type.
|
||||
*
|
||||
* @param string $type One of: Anonymous
|
||||
* Plain
|
||||
* CramMD5
|
||||
* DigestMD5
|
||||
* SCRAM-* (any mechanism of the SCRAM family)
|
||||
* Types are not case sensitive
|
||||
*/
|
||||
public static function factory($type)
|
||||
{
|
||||
switch (strtolower($type)) {
|
||||
case 'anonymous':
|
||||
$filename = 'Auth/SASL/Anonymous.php';
|
||||
$classname = 'Auth_SASL_Anonymous';
|
||||
break;
|
||||
|
||||
case 'login':
|
||||
$filename = 'Auth/SASL/Login.php';
|
||||
$classname = 'Auth_SASL_Login';
|
||||
break;
|
||||
|
||||
case 'plain':
|
||||
$filename = 'Auth/SASL/Plain.php';
|
||||
$classname = 'Auth_SASL_Plain';
|
||||
break;
|
||||
|
||||
case 'external':
|
||||
$filename = 'Auth/SASL/External.php';
|
||||
$classname = 'Auth_SASL_External';
|
||||
break;
|
||||
|
||||
case 'crammd5':
|
||||
// $msg = 'Deprecated mechanism name. Use IANA-registered name: CRAM-MD5.';
|
||||
// trigger_error($msg, E_USER_DEPRECATED);
|
||||
case 'cram-md5':
|
||||
$filename = 'Auth/SASL/CramMD5.php';
|
||||
$classname = 'Auth_SASL_CramMD5';
|
||||
break;
|
||||
|
||||
case 'digestmd5':
|
||||
// $msg = 'Deprecated mechanism name. Use IANA-registered name: DIGEST-MD5.';
|
||||
// trigger_error($msg, E_USER_DEPRECATED);
|
||||
case 'digest-md5':
|
||||
// $msg = 'DIGEST-MD5 is a deprecated SASL mechanism as per RFC-6331. Using it could be a security risk.';
|
||||
// trigger_error($msg, E_USER_NOTICE);
|
||||
$filename = 'Auth/SASL/DigestMD5.php';
|
||||
$classname = 'Auth_SASL_DigestMD5';
|
||||
break;
|
||||
|
||||
default:
|
||||
$scram = '/^SCRAM-(.{1,9})$/i';
|
||||
if (preg_match($scram, $type, $matches))
|
||||
{
|
||||
$hash = $matches[1];
|
||||
$filename = dirname(__FILE__) .'/SASL/SCRAM.php';
|
||||
$classname = 'Auth_SASL_SCRAM';
|
||||
$parameter = $hash;
|
||||
break;
|
||||
}
|
||||
return PEAR::raiseError('Invalid SASL mechanism type');
|
||||
break;
|
||||
}
|
||||
|
||||
require_once($filename);
|
||||
if (isset($parameter))
|
||||
$obj = new $classname($parameter);
|
||||
else
|
||||
$obj = new $classname();
|
||||
return $obj;
|
||||
}
|
||||
}
|
||||
|
||||
?>
|
71
sites/all/modules/civicrm/vendor/pear/auth_sasl/Auth/SASL/Anonymous.php
vendored
Executable file
71
sites/all/modules/civicrm/vendor/pear/auth_sasl/Auth/SASL/Anonymous.php
vendored
Executable file
|
@ -0,0 +1,71 @@
|
|||
<?php
|
||||
// +-----------------------------------------------------------------------+
|
||||
// | Copyright (c) 2002-2003 Richard Heyes |
|
||||
// | All rights reserved. |
|
||||
// | |
|
||||
// | Redistribution and use in source and binary forms, with or without |
|
||||
// | modification, are permitted provided that the following conditions |
|
||||
// | are met: |
|
||||
// | |
|
||||
// | o Redistributions of source code must retain the above copyright |
|
||||
// | notice, this list of conditions and the following disclaimer. |
|
||||
// | o Redistributions in binary form must reproduce the above copyright |
|
||||
// | notice, this list of conditions and the following disclaimer in the |
|
||||
// | documentation and/or other materials provided with the distribution.|
|
||||
// | o The names of the authors may not be used to endorse or promote |
|
||||
// | products derived from this software without specific prior written |
|
||||
// | permission. |
|
||||
// | |
|
||||
// | THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS |
|
||||
// | "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT |
|
||||
// | LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR |
|
||||
// | A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT |
|
||||
// | OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, |
|
||||
// | SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT |
|
||||
// | LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, |
|
||||
// | DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY |
|
||||
// | THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT |
|
||||
// | (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE |
|
||||
// | OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
|
||||
// | |
|
||||
// +-----------------------------------------------------------------------+
|
||||
// | Author: Richard Heyes <richard@php.net> |
|
||||
// +-----------------------------------------------------------------------+
|
||||
//
|
||||
// $Id$
|
||||
|
||||
/**
|
||||
* Implmentation of ANONYMOUS SASL mechanism
|
||||
*
|
||||
* @author Richard Heyes <richard@php.net>
|
||||
* @access public
|
||||
* @version 1.0
|
||||
* @package Auth_SASL
|
||||
*/
|
||||
|
||||
require_once('Auth/SASL/Common.php');
|
||||
|
||||
class Auth_SASL_Anonymous extends Auth_SASL_Common
|
||||
{
|
||||
/**
|
||||
* Not much to do here except return the token supplied.
|
||||
* No encoding, hashing or encryption takes place for this
|
||||
* mechanism, simply one of:
|
||||
* o An email address
|
||||
* o An opaque string not containing "@" that can be interpreted
|
||||
* by the sysadmin
|
||||
* o Nothing
|
||||
*
|
||||
* We could have some logic here for the second option, but this
|
||||
* would by no means create something interpretable.
|
||||
*
|
||||
* @param string $token Optional email address or string to provide
|
||||
* as trace information.
|
||||
* @return string The unaltered input token
|
||||
*/
|
||||
function getResponse($token = '')
|
||||
{
|
||||
return $token;
|
||||
}
|
||||
}
|
||||
?>
|
105
sites/all/modules/civicrm/vendor/pear/auth_sasl/Auth/SASL/Common.php
vendored
Executable file
105
sites/all/modules/civicrm/vendor/pear/auth_sasl/Auth/SASL/Common.php
vendored
Executable file
|
@ -0,0 +1,105 @@
|
|||
<?php
|
||||
// +-----------------------------------------------------------------------+
|
||||
// | Copyright (c) 2002-2003 Richard Heyes |
|
||||
// | All rights reserved. |
|
||||
// | |
|
||||
// | Redistribution and use in source and binary forms, with or without |
|
||||
// | modification, are permitted provided that the following conditions |
|
||||
// | are met: |
|
||||
// | |
|
||||
// | o Redistributions of source code must retain the above copyright |
|
||||
// | notice, this list of conditions and the following disclaimer. |
|
||||
// | o Redistributions in binary form must reproduce the above copyright |
|
||||
// | notice, this list of conditions and the following disclaimer in the |
|
||||
// | documentation and/or other materials provided with the distribution.|
|
||||
// | o The names of the authors may not be used to endorse or promote |
|
||||
// | products derived from this software without specific prior written |
|
||||
// | permission. |
|
||||
// | |
|
||||
// | THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS |
|
||||
// | "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT |
|
||||
// | LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR |
|
||||
// | A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT |
|
||||
// | OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, |
|
||||
// | SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT |
|
||||
// | LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, |
|
||||
// | DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY |
|
||||
// | THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT |
|
||||
// | (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE |
|
||||
// | OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
|
||||
// | |
|
||||
// +-----------------------------------------------------------------------+
|
||||
// | Author: Richard Heyes <richard@php.net> |
|
||||
// +-----------------------------------------------------------------------+
|
||||
//
|
||||
// $Id$
|
||||
|
||||
/**
|
||||
* Common functionality to SASL mechanisms
|
||||
*
|
||||
* @author Richard Heyes <richard@php.net>
|
||||
* @access public
|
||||
* @version 1.0
|
||||
* @package Auth_SASL
|
||||
*/
|
||||
|
||||
class Auth_SASL_Common
|
||||
{
|
||||
/**
|
||||
* Function which implements HMAC MD5 digest
|
||||
*
|
||||
* @param string $key The secret key
|
||||
* @param string $data The data to hash
|
||||
* @param bool $raw_output Whether the digest is returned in binary or hexadecimal format.
|
||||
*
|
||||
* @return string The HMAC-MD5 digest
|
||||
*/
|
||||
function _HMAC_MD5($key, $data, $raw_output = FALSE)
|
||||
{
|
||||
if (strlen($key) > 64) {
|
||||
$key = pack('H32', md5($key));
|
||||
}
|
||||
|
||||
if (strlen($key) < 64) {
|
||||
$key = str_pad($key, 64, chr(0));
|
||||
}
|
||||
|
||||
$k_ipad = substr($key, 0, 64) ^ str_repeat(chr(0x36), 64);
|
||||
$k_opad = substr($key, 0, 64) ^ str_repeat(chr(0x5C), 64);
|
||||
|
||||
$inner = pack('H32', md5($k_ipad . $data));
|
||||
$digest = md5($k_opad . $inner, $raw_output);
|
||||
|
||||
return $digest;
|
||||
}
|
||||
|
||||
/**
|
||||
* Function which implements HMAC-SHA-1 digest
|
||||
*
|
||||
* @param string $key The secret key
|
||||
* @param string $data The data to hash
|
||||
* @param bool $raw_output Whether the digest is returned in binary or hexadecimal format.
|
||||
* @return string The HMAC-SHA-1 digest
|
||||
* @author Jehan <jehan.marmottard@gmail.com>
|
||||
* @access protected
|
||||
*/
|
||||
protected function _HMAC_SHA1($key, $data, $raw_output = FALSE)
|
||||
{
|
||||
if (strlen($key) > 64) {
|
||||
$key = sha1($key, TRUE);
|
||||
}
|
||||
|
||||
if (strlen($key) < 64) {
|
||||
$key = str_pad($key, 64, chr(0));
|
||||
}
|
||||
|
||||
$k_ipad = substr($key, 0, 64) ^ str_repeat(chr(0x36), 64);
|
||||
$k_opad = substr($key, 0, 64) ^ str_repeat(chr(0x5C), 64);
|
||||
|
||||
$inner = pack('H40', sha1($k_ipad . $data));
|
||||
$digest = sha1($k_opad . $inner, $raw_output);
|
||||
|
||||
return $digest;
|
||||
}
|
||||
}
|
||||
?>
|
68
sites/all/modules/civicrm/vendor/pear/auth_sasl/Auth/SASL/CramMD5.php
vendored
Executable file
68
sites/all/modules/civicrm/vendor/pear/auth_sasl/Auth/SASL/CramMD5.php
vendored
Executable file
|
@ -0,0 +1,68 @@
|
|||
<?php
|
||||
// +-----------------------------------------------------------------------+
|
||||
// | Copyright (c) 2002-2003 Richard Heyes |
|
||||
// | All rights reserved. |
|
||||
// | |
|
||||
// | Redistribution and use in source and binary forms, with or without |
|
||||
// | modification, are permitted provided that the following conditions |
|
||||
// | are met: |
|
||||
// | |
|
||||
// | o Redistributions of source code must retain the above copyright |
|
||||
// | notice, this list of conditions and the following disclaimer. |
|
||||
// | o Redistributions in binary form must reproduce the above copyright |
|
||||
// | notice, this list of conditions and the following disclaimer in the |
|
||||
// | documentation and/or other materials provided with the distribution.|
|
||||
// | o The names of the authors may not be used to endorse or promote |
|
||||
// | products derived from this software without specific prior written |
|
||||
// | permission. |
|
||||
// | |
|
||||
// | THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS |
|
||||
// | "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT |
|
||||
// | LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR |
|
||||
// | A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT |
|
||||
// | OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, |
|
||||
// | SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT |
|
||||
// | LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, |
|
||||
// | DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY |
|
||||
// | THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT |
|
||||
// | (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE |
|
||||
// | OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
|
||||
// | |
|
||||
// +-----------------------------------------------------------------------+
|
||||
// | Author: Richard Heyes <richard@php.net> |
|
||||
// +-----------------------------------------------------------------------+
|
||||
//
|
||||
// $Id$
|
||||
|
||||
/**
|
||||
* Implmentation of CRAM-MD5 SASL mechanism
|
||||
*
|
||||
* @author Richard Heyes <richard@php.net>
|
||||
* @access public
|
||||
* @version 1.0
|
||||
* @package Auth_SASL
|
||||
*/
|
||||
|
||||
require_once('Auth/SASL/Common.php');
|
||||
|
||||
class Auth_SASL_CramMD5 extends Auth_SASL_Common
|
||||
{
|
||||
/**
|
||||
* Implements the CRAM-MD5 SASL mechanism
|
||||
* This DOES NOT base64 encode the return value,
|
||||
* you will need to do that yourself.
|
||||
*
|
||||
* @param string $user Username
|
||||
* @param string $pass Password
|
||||
* @param string $challenge The challenge supplied by the server.
|
||||
* this should be already base64_decoded.
|
||||
*
|
||||
* @return string The string to pass back to the server, of the form
|
||||
* "<user> <digest>". This is NOT base64_encoded.
|
||||
*/
|
||||
function getResponse($user, $pass, $challenge)
|
||||
{
|
||||
return $user . ' ' . $this->_HMAC_MD5($pass, $challenge);
|
||||
}
|
||||
}
|
||||
?>
|
197
sites/all/modules/civicrm/vendor/pear/auth_sasl/Auth/SASL/DigestMD5.php
vendored
Executable file
197
sites/all/modules/civicrm/vendor/pear/auth_sasl/Auth/SASL/DigestMD5.php
vendored
Executable file
|
@ -0,0 +1,197 @@
|
|||
<?php
|
||||
// +-----------------------------------------------------------------------+
|
||||
// | Copyright (c) 2002-2003 Richard Heyes |
|
||||
// | All rights reserved. |
|
||||
// | |
|
||||
// | Redistribution and use in source and binary forms, with or without |
|
||||
// | modification, are permitted provided that the following conditions |
|
||||
// | are met: |
|
||||
// | |
|
||||
// | o Redistributions of source code must retain the above copyright |
|
||||
// | notice, this list of conditions and the following disclaimer. |
|
||||
// | o Redistributions in binary form must reproduce the above copyright |
|
||||
// | notice, this list of conditions and the following disclaimer in the |
|
||||
// | documentation and/or other materials provided with the distribution.|
|
||||
// | o The names of the authors may not be used to endorse or promote |
|
||||
// | products derived from this software without specific prior written |
|
||||
// | permission. |
|
||||
// | |
|
||||
// | THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS |
|
||||
// | "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT |
|
||||
// | LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR |
|
||||
// | A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT |
|
||||
// | OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, |
|
||||
// | SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT |
|
||||
// | LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, |
|
||||
// | DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY |
|
||||
// | THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT |
|
||||
// | (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE |
|
||||
// | OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
|
||||
// | |
|
||||
// +-----------------------------------------------------------------------+
|
||||
// | Author: Richard Heyes <richard@php.net> |
|
||||
// +-----------------------------------------------------------------------+
|
||||
//
|
||||
// $Id$
|
||||
|
||||
/**
|
||||
* Implmentation of DIGEST-MD5 SASL mechanism
|
||||
*
|
||||
* @author Richard Heyes <richard@php.net>
|
||||
* @access public
|
||||
* @version 1.0
|
||||
* @package Auth_SASL
|
||||
*/
|
||||
|
||||
require_once('Auth/SASL/Common.php');
|
||||
|
||||
class Auth_SASL_DigestMD5 extends Auth_SASL_Common
|
||||
{
|
||||
/**
|
||||
* Provides the (main) client response for DIGEST-MD5
|
||||
* requires a few extra parameters than the other
|
||||
* mechanisms, which are unavoidable.
|
||||
*
|
||||
* @param string $authcid Authentication id (username)
|
||||
* @param string $pass Password
|
||||
* @param string $challenge The digest challenge sent by the server
|
||||
* @param string $hostname The hostname of the machine you're connecting to
|
||||
* @param string $service The servicename (eg. imap, pop, acap etc)
|
||||
* @param string $authzid Authorization id (username to proxy as)
|
||||
* @return string The digest response (NOT base64 encoded)
|
||||
* @access public
|
||||
*/
|
||||
function getResponse($authcid, $pass, $challenge, $hostname, $service, $authzid = '')
|
||||
{
|
||||
$challenge = $this->_parseChallenge($challenge);
|
||||
$authzid_string = '';
|
||||
if ($authzid != '') {
|
||||
$authzid_string = ',authzid="' . $authzid . '"';
|
||||
}
|
||||
|
||||
if (!empty($challenge)) {
|
||||
$cnonce = $this->_getCnonce();
|
||||
$digest_uri = sprintf('%s/%s', $service, $hostname);
|
||||
$response_value = $this->_getResponseValue($authcid, $pass, $challenge['realm'], $challenge['nonce'], $cnonce, $digest_uri, $authzid);
|
||||
|
||||
if ($challenge['realm']) {
|
||||
return sprintf('username="%s",realm="%s"' . $authzid_string .
|
||||
',nonce="%s",cnonce="%s",nc=00000001,qop=auth,digest-uri="%s",response=%s,maxbuf=%d', $authcid, $challenge['realm'], $challenge['nonce'], $cnonce, $digest_uri, $response_value, $challenge['maxbuf']);
|
||||
} else {
|
||||
return sprintf('username="%s"' . $authzid_string . ',nonce="%s",cnonce="%s",nc=00000001,qop=auth,digest-uri="%s",response=%s,maxbuf=%d', $authcid, $challenge['nonce'], $cnonce, $digest_uri, $response_value, $challenge['maxbuf']);
|
||||
}
|
||||
} else {
|
||||
return PEAR::raiseError('Invalid digest challenge');
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Parses and verifies the digest challenge*
|
||||
*
|
||||
* @param string $challenge The digest challenge
|
||||
* @return array The parsed challenge as an assoc
|
||||
* array in the form "directive => value".
|
||||
* @access private
|
||||
*/
|
||||
function _parseChallenge($challenge)
|
||||
{
|
||||
$tokens = array();
|
||||
while (preg_match('/^([a-z-]+)=("[^"]+(?<!\\\)"|[^,]+)/i', $challenge, $matches)) {
|
||||
|
||||
// Ignore these as per rfc2831
|
||||
if ($matches[1] == 'opaque' OR $matches[1] == 'domain') {
|
||||
$challenge = substr($challenge, strlen($matches[0]) + 1);
|
||||
continue;
|
||||
}
|
||||
|
||||
// Allowed multiple "realm" and "auth-param"
|
||||
if (!empty($tokens[$matches[1]]) AND ($matches[1] == 'realm' OR $matches[1] == 'auth-param')) {
|
||||
if (is_array($tokens[$matches[1]])) {
|
||||
$tokens[$matches[1]][] = preg_replace('/^"(.*)"$/', '\\1', $matches[2]);
|
||||
} else {
|
||||
$tokens[$matches[1]] = array($tokens[$matches[1]], preg_replace('/^"(.*)"$/', '\\1', $matches[2]));
|
||||
}
|
||||
|
||||
// Any other multiple instance = failure
|
||||
} elseif (!empty($tokens[$matches[1]])) {
|
||||
$tokens = array();
|
||||
break;
|
||||
|
||||
} else {
|
||||
$tokens[$matches[1]] = preg_replace('/^"(.*)"$/', '\\1', $matches[2]);
|
||||
}
|
||||
|
||||
// Remove the just parsed directive from the challenge
|
||||
$challenge = substr($challenge, strlen($matches[0]) + 1);
|
||||
}
|
||||
|
||||
/**
|
||||
* Defaults and required directives
|
||||
*/
|
||||
// Realm
|
||||
if (empty($tokens['realm'])) {
|
||||
$tokens['realm'] = "";
|
||||
}
|
||||
|
||||
// Maxbuf
|
||||
if (empty($tokens['maxbuf'])) {
|
||||
$tokens['maxbuf'] = 65536;
|
||||
}
|
||||
|
||||
// Required: nonce, algorithm
|
||||
if (empty($tokens['nonce']) OR empty($tokens['algorithm'])) {
|
||||
return array();
|
||||
}
|
||||
|
||||
return $tokens;
|
||||
}
|
||||
|
||||
/**
|
||||
* Creates the response= part of the digest response
|
||||
*
|
||||
* @param string $authcid Authentication id (username)
|
||||
* @param string $pass Password
|
||||
* @param string $realm Realm as provided by the server
|
||||
* @param string $nonce Nonce as provided by the server
|
||||
* @param string $cnonce Client nonce
|
||||
* @param string $digest_uri The digest-uri= value part of the response
|
||||
* @param string $authzid Authorization id
|
||||
* @return string The response= part of the digest response
|
||||
* @access private
|
||||
*/
|
||||
function _getResponseValue($authcid, $pass, $realm, $nonce, $cnonce, $digest_uri, $authzid = '')
|
||||
{
|
||||
if ($authzid == '') {
|
||||
$A1 = sprintf('%s:%s:%s', pack('H32', md5(sprintf('%s:%s:%s', $authcid, $realm, $pass))), $nonce, $cnonce);
|
||||
} else {
|
||||
$A1 = sprintf('%s:%s:%s:%s', pack('H32', md5(sprintf('%s:%s:%s', $authcid, $realm, $pass))), $nonce, $cnonce, $authzid);
|
||||
}
|
||||
$A2 = 'AUTHENTICATE:' . $digest_uri;
|
||||
return md5(sprintf('%s:%s:00000001:%s:auth:%s', md5($A1), $nonce, $cnonce, md5($A2)));
|
||||
}
|
||||
|
||||
/**
|
||||
* Creates the client nonce for the response
|
||||
*
|
||||
* @return string The cnonce value
|
||||
* @access private
|
||||
*/
|
||||
function _getCnonce()
|
||||
{
|
||||
if (@file_exists('/dev/urandom') && $fd = @fopen('/dev/urandom', 'r')) {
|
||||
return base64_encode(fread($fd, 32));
|
||||
|
||||
} elseif (@file_exists('/dev/random') && $fd = @fopen('/dev/random', 'r')) {
|
||||
return base64_encode(fread($fd, 32));
|
||||
|
||||
} else {
|
||||
$str = '';
|
||||
for ($i=0; $i<32; $i++) {
|
||||
$str .= chr(mt_rand(0, 255));
|
||||
}
|
||||
|
||||
return base64_encode($str);
|
||||
}
|
||||
}
|
||||
}
|
||||
?>
|
63
sites/all/modules/civicrm/vendor/pear/auth_sasl/Auth/SASL/External.php
vendored
Normal file
63
sites/all/modules/civicrm/vendor/pear/auth_sasl/Auth/SASL/External.php
vendored
Normal file
|
@ -0,0 +1,63 @@
|
|||
<?php
|
||||
// +-----------------------------------------------------------------------+
|
||||
// | Copyright (c) 2008 Christoph Schulz |
|
||||
// | All rights reserved. |
|
||||
// | |
|
||||
// | Redistribution and use in source and binary forms, with or without |
|
||||
// | modification, are permitted provided that the following conditions |
|
||||
// | are met: |
|
||||
// | |
|
||||
// | o Redistributions of source code must retain the above copyright |
|
||||
// | notice, this list of conditions and the following disclaimer. |
|
||||
// | o Redistributions in binary form must reproduce the above copyright |
|
||||
// | notice, this list of conditions and the following disclaimer in the |
|
||||
// | documentation and/or other materials provided with the distribution.|
|
||||
// | o The names of the authors may not be used to endorse or promote |
|
||||
// | products derived from this software without specific prior written |
|
||||
// | permission. |
|
||||
// | |
|
||||
// | THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS |
|
||||
// | "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT |
|
||||
// | LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR |
|
||||
// | A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT |
|
||||
// | OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, |
|
||||
// | SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT |
|
||||
// | LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, |
|
||||
// | DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY |
|
||||
// | THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT |
|
||||
// | (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE |
|
||||
// | OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
|
||||
// | |
|
||||
// +-----------------------------------------------------------------------+
|
||||
// | Author: Christoph Schulz <develop@kristov.de> |
|
||||
// +-----------------------------------------------------------------------+
|
||||
//
|
||||
// $Id$
|
||||
|
||||
/**
|
||||
* Implmentation of EXTERNAL SASL mechanism
|
||||
*
|
||||
* @author Christoph Schulz <develop@kristov.de>
|
||||
* @access public
|
||||
* @version 1.0.3
|
||||
* @package Auth_SASL
|
||||
*/
|
||||
|
||||
require_once('Auth/SASL/Common.php');
|
||||
|
||||
class Auth_SASL_External extends Auth_SASL_Common
|
||||
{
|
||||
/**
|
||||
* Returns EXTERNAL response
|
||||
*
|
||||
* @param string $authcid Authentication id (username)
|
||||
* @param string $pass Password
|
||||
* @param string $authzid Autorization id
|
||||
* @return string EXTERNAL Response
|
||||
*/
|
||||
function getResponse($authcid, $pass, $authzid = '')
|
||||
{
|
||||
return $authzid;
|
||||
}
|
||||
}
|
||||
?>
|
65
sites/all/modules/civicrm/vendor/pear/auth_sasl/Auth/SASL/Login.php
vendored
Executable file
65
sites/all/modules/civicrm/vendor/pear/auth_sasl/Auth/SASL/Login.php
vendored
Executable file
|
@ -0,0 +1,65 @@
|
|||
<?php
|
||||
// +-----------------------------------------------------------------------+
|
||||
// | Copyright (c) 2002-2003 Richard Heyes |
|
||||
// | All rights reserved. |
|
||||
// | |
|
||||
// | Redistribution and use in source and binary forms, with or without |
|
||||
// | modification, are permitted provided that the following conditions |
|
||||
// | are met: |
|
||||
// | |
|
||||
// | o Redistributions of source code must retain the above copyright |
|
||||
// | notice, this list of conditions and the following disclaimer. |
|
||||
// | o Redistributions in binary form must reproduce the above copyright |
|
||||
// | notice, this list of conditions and the following disclaimer in the |
|
||||
// | documentation and/or other materials provided with the distribution.|
|
||||
// | o The names of the authors may not be used to endorse or promote |
|
||||
// | products derived from this software without specific prior written |
|
||||
// | permission. |
|
||||
// | |
|
||||
// | THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS |
|
||||
// | "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT |
|
||||
// | LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR |
|
||||
// | A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT |
|
||||
// | OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, |
|
||||
// | SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT |
|
||||
// | LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, |
|
||||
// | DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY |
|
||||
// | THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT |
|
||||
// | (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE |
|
||||
// | OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
|
||||
// | |
|
||||
// +-----------------------------------------------------------------------+
|
||||
// | Author: Richard Heyes <richard@php.net> |
|
||||
// +-----------------------------------------------------------------------+
|
||||
//
|
||||
// $Id$
|
||||
|
||||
/**
|
||||
* This is technically not a SASL mechanism, however
|
||||
* it's used by Net_Sieve, Net_Cyrus and potentially
|
||||
* other protocols , so here is a good place to abstract
|
||||
* it.
|
||||
*
|
||||
* @author Richard Heyes <richard@php.net>
|
||||
* @access public
|
||||
* @version 1.0
|
||||
* @package Auth_SASL
|
||||
*/
|
||||
|
||||
require_once('Auth/SASL/Common.php');
|
||||
|
||||
class Auth_SASL_Login extends Auth_SASL_Common
|
||||
{
|
||||
/**
|
||||
* Pseudo SASL LOGIN mechanism
|
||||
*
|
||||
* @param string $user Username
|
||||
* @param string $pass Password
|
||||
* @return string LOGIN string
|
||||
*/
|
||||
function getResponse($user, $pass)
|
||||
{
|
||||
return sprintf('LOGIN %s %s', $user, $pass);
|
||||
}
|
||||
}
|
||||
?>
|
63
sites/all/modules/civicrm/vendor/pear/auth_sasl/Auth/SASL/Plain.php
vendored
Executable file
63
sites/all/modules/civicrm/vendor/pear/auth_sasl/Auth/SASL/Plain.php
vendored
Executable file
|
@ -0,0 +1,63 @@
|
|||
<?php
|
||||
// +-----------------------------------------------------------------------+
|
||||
// | Copyright (c) 2002-2003 Richard Heyes |
|
||||
// | All rights reserved. |
|
||||
// | |
|
||||
// | Redistribution and use in source and binary forms, with or without |
|
||||
// | modification, are permitted provided that the following conditions |
|
||||
// | are met: |
|
||||
// | |
|
||||
// | o Redistributions of source code must retain the above copyright |
|
||||
// | notice, this list of conditions and the following disclaimer. |
|
||||
// | o Redistributions in binary form must reproduce the above copyright |
|
||||
// | notice, this list of conditions and the following disclaimer in the |
|
||||
// | documentation and/or other materials provided with the distribution.|
|
||||
// | o The names of the authors may not be used to endorse or promote |
|
||||
// | products derived from this software without specific prior written |
|
||||
// | permission. |
|
||||
// | |
|
||||
// | THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS |
|
||||
// | "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT |
|
||||
// | LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR |
|
||||
// | A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT |
|
||||
// | OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, |
|
||||
// | SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT |
|
||||
// | LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, |
|
||||
// | DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY |
|
||||
// | THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT |
|
||||
// | (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE |
|
||||
// | OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
|
||||
// | |
|
||||
// +-----------------------------------------------------------------------+
|
||||
// | Author: Richard Heyes <richard@php.net> |
|
||||
// +-----------------------------------------------------------------------+
|
||||
//
|
||||
// $Id$
|
||||
|
||||
/**
|
||||
* Implmentation of PLAIN SASL mechanism
|
||||
*
|
||||
* @author Richard Heyes <richard@php.net>
|
||||
* @access public
|
||||
* @version 1.0
|
||||
* @package Auth_SASL
|
||||
*/
|
||||
|
||||
require_once('Auth/SASL/Common.php');
|
||||
|
||||
class Auth_SASL_Plain extends Auth_SASL_Common
|
||||
{
|
||||
/**
|
||||
* Returns PLAIN response
|
||||
*
|
||||
* @param string $authcid Authentication id (username)
|
||||
* @param string $pass Password
|
||||
* @param string $authzid Autorization id
|
||||
* @return string PLAIN Response
|
||||
*/
|
||||
function getResponse($authcid, $pass, $authzid = '')
|
||||
{
|
||||
return $authzid . chr(0) . $authcid . chr(0) . $pass;
|
||||
}
|
||||
}
|
||||
?>
|
306
sites/all/modules/civicrm/vendor/pear/auth_sasl/Auth/SASL/SCRAM.php
vendored
Normal file
306
sites/all/modules/civicrm/vendor/pear/auth_sasl/Auth/SASL/SCRAM.php
vendored
Normal file
|
@ -0,0 +1,306 @@
|
|||
<?php
|
||||
// +-----------------------------------------------------------------------+
|
||||
// | Copyright (c) 2011 Jehan |
|
||||
// | All rights reserved. |
|
||||
// | |
|
||||
// | Redistribution and use in source and binary forms, with or without |
|
||||
// | modification, are permitted provided that the following conditions |
|
||||
// | are met: |
|
||||
// | |
|
||||
// | o Redistributions of source code must retain the above copyright |
|
||||
// | notice, this list of conditions and the following disclaimer. |
|
||||
// | o Redistributions in binary form must reproduce the above copyright |
|
||||
// | notice, this list of conditions and the following disclaimer in the |
|
||||
// | documentation and/or other materials provided with the distribution.|
|
||||
// | o The names of the authors may not be used to endorse or promote |
|
||||
// | products derived from this software without specific prior written |
|
||||
// | permission. |
|
||||
// | |
|
||||
// | THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS |
|
||||
// | "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT |
|
||||
// | LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR |
|
||||
// | A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT |
|
||||
// | OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, |
|
||||
// | SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT |
|
||||
// | LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, |
|
||||
// | DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY |
|
||||
// | THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT |
|
||||
// | (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE |
|
||||
// | OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
|
||||
// | |
|
||||
// +-----------------------------------------------------------------------+
|
||||
// | Author: Jehan <jehan.marmottard@gmail.com |
|
||||
// +-----------------------------------------------------------------------+
|
||||
//
|
||||
// $Id$
|
||||
|
||||
/**
|
||||
* Implementation of SCRAM-* SASL mechanisms.
|
||||
* SCRAM mechanisms have 3 main steps (initial response, response to the server challenge, then server signature
|
||||
* verification) which keep state-awareness. Therefore a single class instanciation must be done and reused for the whole
|
||||
* authentication process.
|
||||
*
|
||||
* @author Jehan <jehan.marmottard@gmail.com>
|
||||
* @access public
|
||||
* @version 1.0
|
||||
* @package Auth_SASL
|
||||
*/
|
||||
|
||||
require_once('Auth/SASL/Common.php');
|
||||
|
||||
class Auth_SASL_SCRAM extends Auth_SASL_Common
|
||||
{
|
||||
/**
|
||||
* Construct a SCRAM-H client where 'H' is a cryptographic hash function.
|
||||
*
|
||||
* @param string $hash The name cryptographic hash function 'H' as registered by IANA in the "Hash Function Textual
|
||||
* Names" registry.
|
||||
* @link http://www.iana.org/assignments/hash-function-text-names/hash-function-text-names.xml "Hash Function Textual
|
||||
* Names"
|
||||
* format of core PHP hash function.
|
||||
* @access public
|
||||
*/
|
||||
function __construct($hash)
|
||||
{
|
||||
// Though I could be strict, I will actually also accept the naming used in the PHP core hash framework.
|
||||
// For instance "sha1" is accepted, while the registered hash name should be "SHA-1".
|
||||
$hash = strtolower($hash);
|
||||
$hashes = array('md2' => 'md2',
|
||||
'md5' => 'md5',
|
||||
'sha-1' => 'sha1',
|
||||
'sha1' => 'sha1',
|
||||
'sha-224' > 'sha224',
|
||||
'sha224' > 'sha224',
|
||||
'sha-256' => 'sha256',
|
||||
'sha256' => 'sha256',
|
||||
'sha-384' => 'sha384',
|
||||
'sha384' => 'sha384',
|
||||
'sha-512' => 'sha512',
|
||||
'sha512' => 'sha512');
|
||||
if (function_exists('hash_hmac') && isset($hashes[$hash]))
|
||||
{
|
||||
$this->hash = create_function('$data', 'return hash("' . $hashes[$hash] . '", $data, TRUE);');
|
||||
$this->hmac = create_function('$key,$str,$raw', 'return hash_hmac("' . $hashes[$hash] . '", $str, $key, $raw);');
|
||||
}
|
||||
elseif ($hash == 'md5')
|
||||
{
|
||||
$this->hash = create_function('$data', 'return md5($data, true);');
|
||||
$this->hmac = array($this, '_HMAC_MD5');
|
||||
}
|
||||
elseif (in_array($hash, array('sha1', 'sha-1')))
|
||||
{
|
||||
$this->hash = create_function('$data', 'return sha1($data, true);');
|
||||
$this->hmac = array($this, '_HMAC_SHA1');
|
||||
}
|
||||
else
|
||||
return PEAR::raiseError('Invalid SASL mechanism type');
|
||||
}
|
||||
|
||||
/**
|
||||
* Provides the (main) client response for SCRAM-H.
|
||||
*
|
||||
* @param string $authcid Authentication id (username)
|
||||
* @param string $pass Password
|
||||
* @param string $challenge The challenge sent by the server.
|
||||
* If the challenge is NULL or an empty string, the result will be the "initial response".
|
||||
* @param string $authzid Authorization id (username to proxy as)
|
||||
* @return string|false The response (binary, NOT base64 encoded)
|
||||
* @access public
|
||||
*/
|
||||
public function getResponse($authcid, $pass, $challenge = NULL, $authzid = NULL)
|
||||
{
|
||||
$authcid = $this->_formatName($authcid);
|
||||
if (empty($authcid))
|
||||
{
|
||||
return false;
|
||||
}
|
||||
if (!empty($authzid))
|
||||
{
|
||||
$authzid = $this->_formatName($authzid);
|
||||
if (empty($authzid))
|
||||
{
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
if (empty($challenge))
|
||||
{
|
||||
return $this->_generateInitialResponse($authcid, $authzid);
|
||||
}
|
||||
else
|
||||
{
|
||||
return $this->_generateResponse($challenge, $pass);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* Prepare a name for inclusion in a SCRAM response.
|
||||
*
|
||||
* @param string $username a name to be prepared.
|
||||
* @return string the reformated name.
|
||||
* @access private
|
||||
*/
|
||||
private function _formatName($username)
|
||||
{
|
||||
// TODO: prepare through the SASLprep profile of the stringprep algorithm.
|
||||
// See RFC-4013.
|
||||
|
||||
$username = str_replace('=', '=3D', $username);
|
||||
$username = str_replace(',', '=2C', $username);
|
||||
return $username;
|
||||
}
|
||||
|
||||
/**
|
||||
* Generate the initial response which can be either sent directly in the first message or as a response to an empty
|
||||
* server challenge.
|
||||
*
|
||||
* @param string $authcid Prepared authentication identity.
|
||||
* @param string $authzid Prepared authorization identity.
|
||||
* @return string The SCRAM response to send.
|
||||
* @access private
|
||||
*/
|
||||
private function _generateInitialResponse($authcid, $authzid)
|
||||
{
|
||||
$init_rep = '';
|
||||
$gs2_cbind_flag = 'n,'; // TODO: support channel binding.
|
||||
$this->gs2_header = $gs2_cbind_flag . (!empty($authzid)? 'a=' . $authzid : '') . ',';
|
||||
|
||||
// I must generate a client nonce and "save" it for later comparison on second response.
|
||||
$this->cnonce = $this->_getCnonce();
|
||||
// XXX: in the future, when mandatory and/or optional extensions are defined in any updated RFC,
|
||||
// this message can be updated.
|
||||
$this->first_message_bare = 'n=' . $authcid . ',r=' . $this->cnonce;
|
||||
return $this->gs2_header . $this->first_message_bare;
|
||||
}
|
||||
|
||||
/**
|
||||
* Parses and verifies a non-empty SCRAM challenge.
|
||||
*
|
||||
* @param string $challenge The SCRAM challenge
|
||||
* @return string|false The response to send; false in case of wrong challenge or if an initial response has not
|
||||
* been generated first.
|
||||
* @access private
|
||||
*/
|
||||
private function _generateResponse($challenge, $password)
|
||||
{
|
||||
// XXX: as I don't support mandatory extension, I would fail on them.
|
||||
// And I simply ignore any optional extension.
|
||||
$server_message_regexp = "#^r=([\x21-\x2B\x2D-\x7E]+),s=((?:[A-Za-z0-9/+]{4})*(?:[A-Za-z0-9]{3}=|[A-Xa-z0-9]{2}==)?),i=([0-9]*)(,[A-Za-z]=[^,])*$#";
|
||||
if (!isset($this->cnonce, $this->gs2_header)
|
||||
|| !preg_match($server_message_regexp, $challenge, $matches))
|
||||
{
|
||||
return false;
|
||||
}
|
||||
$nonce = $matches[1];
|
||||
$salt = base64_decode($matches[2]);
|
||||
if (!$salt)
|
||||
{
|
||||
// Invalid Base64.
|
||||
return false;
|
||||
}
|
||||
$i = intval($matches[3]);
|
||||
|
||||
$cnonce = substr($nonce, 0, strlen($this->cnonce));
|
||||
if ($cnonce <> $this->cnonce)
|
||||
{
|
||||
// Invalid challenge! Are we under attack?
|
||||
return false;
|
||||
}
|
||||
|
||||
$channel_binding = 'c=' . base64_encode($this->gs2_header); // TODO: support channel binding.
|
||||
$final_message = $channel_binding . ',r=' . $nonce; // XXX: no extension.
|
||||
|
||||
// TODO: $password = $this->normalize($password); // SASLprep profile of stringprep.
|
||||
$saltedPassword = $this->hi($password, $salt, $i);
|
||||
$this->saltedPassword = $saltedPassword;
|
||||
$clientKey = call_user_func($this->hmac, $saltedPassword, "Client Key", TRUE);
|
||||
$storedKey = call_user_func($this->hash, $clientKey, TRUE);
|
||||
$authMessage = $this->first_message_bare . ',' . $challenge . ',' . $final_message;
|
||||
$this->authMessage = $authMessage;
|
||||
$clientSignature = call_user_func($this->hmac, $storedKey, $authMessage, TRUE);
|
||||
$clientProof = $clientKey ^ $clientSignature;
|
||||
$proof = ',p=' . base64_encode($clientProof);
|
||||
|
||||
return $final_message . $proof;
|
||||
}
|
||||
|
||||
/**
|
||||
* SCRAM has also a server verification step. On a successful outcome, it will send additional data which must
|
||||
* absolutely be checked against this function. If this fails, the entity which we are communicating with is probably
|
||||
* not the server as it has not access to your ServerKey.
|
||||
*
|
||||
* @param string $data The additional data sent along a successful outcome.
|
||||
* @return bool Whether the server has been authenticated.
|
||||
* If false, the client must close the connection and consider to be under a MITM attack.
|
||||
* @access public
|
||||
*/
|
||||
public function processOutcome($data)
|
||||
{
|
||||
$verifier_regexp = '#^v=((?:[A-Za-z0-9/+]{4})*(?:[A-Za-z0-9]{3}=|[A-Xa-z0-9]{2}==)?)$#';
|
||||
if (!isset($this->saltedPassword, $this->authMessage)
|
||||
|| !preg_match($verifier_regexp, $data, $matches))
|
||||
{
|
||||
// This cannot be an outcome, you never sent the challenge's response.
|
||||
return false;
|
||||
}
|
||||
|
||||
$verifier = $matches[1];
|
||||
$proposed_serverSignature = base64_decode($verifier);
|
||||
$serverKey = call_user_func($this->hmac, $this->saltedPassword, "Server Key", true);
|
||||
$serverSignature = call_user_func($this->hmac, $serverKey, $this->authMessage, TRUE);
|
||||
return ($proposed_serverSignature === $serverSignature);
|
||||
}
|
||||
|
||||
/**
|
||||
* Hi() call, which is essentially PBKDF2 (RFC-2898) with HMAC-H() as the pseudorandom function.
|
||||
*
|
||||
* @param string $str The string to hash.
|
||||
* @param string $hash The hash value.
|
||||
* @param int $i The iteration count.
|
||||
* @access private
|
||||
*/
|
||||
private function hi($str, $salt, $i)
|
||||
{
|
||||
$int1 = "\0\0\0\1";
|
||||
$ui = call_user_func($this->hmac, $str, $salt . $int1, true);
|
||||
$result = $ui;
|
||||
for ($k = 1; $k < $i; $k++)
|
||||
{
|
||||
$ui = call_user_func($this->hmac, $str, $ui, true);
|
||||
$result = $result ^ $ui;
|
||||
}
|
||||
return $result;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Creates the client nonce for the response
|
||||
*
|
||||
* @return string The cnonce value
|
||||
* @access private
|
||||
* @author Richard Heyes <richard@php.net>
|
||||
*/
|
||||
private function _getCnonce()
|
||||
{
|
||||
// TODO: I reused the nonce function from the DigestMD5 class.
|
||||
// I should probably make this a protected function in Common.
|
||||
if (@file_exists('/dev/urandom') && $fd = @fopen('/dev/urandom', 'r')) {
|
||||
return base64_encode(fread($fd, 32));
|
||||
|
||||
} elseif (@file_exists('/dev/random') && $fd = @fopen('/dev/random', 'r')) {
|
||||
return base64_encode(fread($fd, 32));
|
||||
|
||||
} else {
|
||||
$str = '';
|
||||
for ($i=0; $i<32; $i++) {
|
||||
$str .= chr(mt_rand(0, 255));
|
||||
}
|
||||
|
||||
return base64_encode($str);
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
?>
|
46
sites/all/modules/civicrm/vendor/pear/auth_sasl/README.md
vendored
Normal file
46
sites/all/modules/civicrm/vendor/pear/auth_sasl/README.md
vendored
Normal file
|
@ -0,0 +1,46 @@
|
|||
# Auth_SASL - Abstraction of various SASL mechanism responses
|
||||
|
||||
[](https://travis-ci.org/pear/Auth_SASL)
|
||||
|
||||
|
||||
Provides code to generate responses to common SASL mechanisms, including:
|
||||
- Digest-MD5
|
||||
- Cram-MD5
|
||||
- Plain
|
||||
- Anonymous
|
||||
- Login (Pseudo mechanism)
|
||||
- SCRAM
|
||||
|
||||
[Homepage](http://pear.php.net/package/Auth_SASL/)
|
||||
|
||||
|
||||
## Installation
|
||||
For a PEAR installation that downloads from the PEAR channel:
|
||||
|
||||
`$ pear install pear/auth_sasl`
|
||||
|
||||
For a PEAR installation from a previously downloaded tarball:
|
||||
|
||||
`$ pear install Auth_SASL-*.tgz`
|
||||
|
||||
For a PEAR installation from a code clone:
|
||||
|
||||
`$ pear install package.xml`
|
||||
|
||||
For a local composer installation:
|
||||
|
||||
`$ composer install`
|
||||
|
||||
To add as a dependency to your composer-managed application:
|
||||
|
||||
`$composer require pear/auth_sasl`
|
||||
|
||||
|
||||
## Tests
|
||||
Run the tests from a local composer installation:
|
||||
|
||||
`$ ./vendor/bin/phpunit`
|
||||
|
||||
|
||||
## License
|
||||
BSD license
|
41
sites/all/modules/civicrm/vendor/pear/auth_sasl/composer.json
vendored
Normal file
41
sites/all/modules/civicrm/vendor/pear/auth_sasl/composer.json
vendored
Normal file
|
@ -0,0 +1,41 @@
|
|||
{
|
||||
"authors": [
|
||||
{
|
||||
"email": "amistry@am-productions.biz",
|
||||
"name": "Anish Mistry",
|
||||
"role": "Lead"
|
||||
},
|
||||
{
|
||||
"email": "richard@php.net",
|
||||
"name": "Richard Heyes",
|
||||
"role": "Lead"
|
||||
},
|
||||
{
|
||||
"email": "michael@bretterklieber.com",
|
||||
"name": "Michael Bretterklieber",
|
||||
"role": "Lead"
|
||||
}
|
||||
],
|
||||
"autoload": {
|
||||
"psr-0": {
|
||||
"Auth": "./"
|
||||
}
|
||||
},
|
||||
"description": "Abstraction of various SASL mechanism responses",
|
||||
"include-path": [
|
||||
"./"
|
||||
],
|
||||
"license": "BSD",
|
||||
"name": "pear/auth_sasl",
|
||||
"support": {
|
||||
"issues": "http://pear.php.net/bugs/search.php?cmd=display&package_name[]=Auth_SASL",
|
||||
"source": "https://github.com/pear/Auth_SASL"
|
||||
},
|
||||
"type": "library",
|
||||
"require": {
|
||||
"pear/pear_exception": "@stable"
|
||||
},
|
||||
"require-dev": {
|
||||
"phpunit/phpunit": "@stable"
|
||||
}
|
||||
}
|
217
sites/all/modules/civicrm/vendor/pear/auth_sasl/package.xml
vendored
Executable file
217
sites/all/modules/civicrm/vendor/pear/auth_sasl/package.xml
vendored
Executable file
|
@ -0,0 +1,217 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<package version="2.0"
|
||||
xmlns="http://pear.php.net/dtd/package-2.0"
|
||||
xmlns:tasks="http://pear.php.net/dtd/tasks-1.0"
|
||||
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
||||
xsi:schemaLocation="http://pear.php.net/dtd/tasks-1.0
|
||||
http://pear.php.net/dtd/tasks-1.0.xsd
|
||||
http://pear.php.net/dtd/package-2.0
|
||||
http://pear.php.net/dtd/package-2.0.xsd"
|
||||
>
|
||||
<name>Auth_SASL</name>
|
||||
<channel>pear.php.net</channel>
|
||||
<summary>Abstraction of various SASL mechanism responses</summary>
|
||||
<description>
|
||||
Provides code to generate responses to common SASL mechanisms, including:
|
||||
- Digest-MD5
|
||||
- Cram-MD5
|
||||
- Plain
|
||||
- Anonymous
|
||||
- Login (Pseudo mechanism)
|
||||
- SCRAM
|
||||
</description>
|
||||
|
||||
<lead>
|
||||
<name>Anish Mistry</name>
|
||||
<user>amistry</user>
|
||||
<email>amistry@am-productions.biz</email>
|
||||
<active>no</active>
|
||||
</lead>
|
||||
<lead>
|
||||
<name>Richard Heyes</name>
|
||||
<user>richard</user>
|
||||
<email>richard@php.net</email>
|
||||
<active>no</active>
|
||||
</lead>
|
||||
<lead>
|
||||
<name>Michael Bretterklieber</name>
|
||||
<user>mbretter</user>
|
||||
<email>michael@bretterklieber.com</email>
|
||||
<active>no</active>
|
||||
</lead>
|
||||
|
||||
<date>2017-03-07</date>
|
||||
<version>
|
||||
<release>1.1.0</release>
|
||||
<api>1.1.0</api>
|
||||
</version>
|
||||
<stability>
|
||||
<release>stable</release>
|
||||
<api>stable</api>
|
||||
</stability>
|
||||
<license uri="http://www.opensource.org/licenses/bsd-license.php">BSD</license>
|
||||
<notes>
|
||||
* Set minimum PHP version to 5.4.0
|
||||
* Set minimum PEAR version to 1.10.1
|
||||
|
||||
* Request #21033: PHP warning depreciated
|
||||
</notes>
|
||||
|
||||
<contents>
|
||||
<dir name="/">
|
||||
<dir name="Auth">
|
||||
<dir name="SASL">
|
||||
<file name="Anonymous.php" role="php" />
|
||||
<file name="Common.php" role="php" />
|
||||
<file name="CramMD5.php" role="php" />
|
||||
<file name="DigestMD5.php" role="php" />
|
||||
<file name="External.php" role="php" />
|
||||
<file name="Login.php" role="php" />
|
||||
<file name="Plain.php" role="php" />
|
||||
<file name="SCRAM.php" role="php" />
|
||||
</dir> <!-- //SASL -->
|
||||
<file name="SASL.php" role="php" />
|
||||
</dir><!-- /Auth -->
|
||||
</dir> <!-- / -->
|
||||
</contents>
|
||||
|
||||
<dependencies>
|
||||
<required>
|
||||
<php>
|
||||
<min>5.4.0</min>
|
||||
</php>
|
||||
<pearinstaller>
|
||||
<min>1.10.1</min>
|
||||
</pearinstaller>
|
||||
</required>
|
||||
</dependencies>
|
||||
|
||||
<phprelease />
|
||||
|
||||
<changelog>
|
||||
|
||||
<release>
|
||||
<version>
|
||||
<release>1.1.0</release>
|
||||
<api>1.1.0</api>
|
||||
</version>
|
||||
<stability>
|
||||
<release>stable</release>
|
||||
<api>stable</api>
|
||||
</stability>
|
||||
<date>2017-03-07</date>
|
||||
<license uri="http://www.opensource.org/licenses/bsd-license.php">BSD</license>
|
||||
<notes>
|
||||
* Set minimum PHP version to 5.4.0
|
||||
* Set minimum PEAR version to 1.10.1
|
||||
|
||||
* Request #21033: PHP warning depreciated
|
||||
</notes>
|
||||
</release>
|
||||
|
||||
<release>
|
||||
<version>
|
||||
<release>1.0.6</release>
|
||||
<api>1.0.3</api>
|
||||
</version>
|
||||
<stability>
|
||||
<release>stable</release>
|
||||
<api>stable</api>
|
||||
</stability>
|
||||
<date>2011-09-27</date>
|
||||
<license uri="http://www.opensource.org/licenses/bsd-license.php">BSD</license>
|
||||
<notes>
|
||||
QA release
|
||||
* Bug #18856: Authentication warnings because of wrong Auth_SASL::factory argument [kguest]
|
||||
</notes>
|
||||
</release>
|
||||
|
||||
<release>
|
||||
<version>
|
||||
<release>1.0.5</release>
|
||||
<api>1.0.3</api>
|
||||
</version>
|
||||
<stability>
|
||||
<release>stable</release>
|
||||
<api>stable</api>
|
||||
</stability>
|
||||
<date>2011-09-04</date>
|
||||
<license uri="http://www.opensource.org/licenses/bsd-license.php">BSD</license>
|
||||
<notes>
|
||||
QA release
|
||||
* Added support for any mechanism of the SCRAM family; with thanks to Jehan Pagès. [kguest]
|
||||
* crammd5 and digestmd5 mechanisms name deprecated in favour of IANA registered names 'cram-md5' and 'digest-md5'; with thanks to Jehan Pagès. [kguest]
|
||||
</notes>
|
||||
</release>
|
||||
|
||||
<release>
|
||||
<version>
|
||||
<release>1.0.4</release>
|
||||
<api>1.0.3</api>
|
||||
</version>
|
||||
<stability>
|
||||
<release>stable</release>
|
||||
<api>stable</api>
|
||||
</stability>
|
||||
<date>2010-02-07</date>
|
||||
<license uri="http://www.opensource.org/licenses/bsd-license.php">BSD</license>
|
||||
<notes>
|
||||
QA release
|
||||
* Fix bug #16624: open_basedir restriction warning in DigestMD5.php [till]
|
||||
</notes>
|
||||
</release>
|
||||
|
||||
<release>
|
||||
<version>
|
||||
<release>1.0.3</release>
|
||||
<api>1.0.3</api>
|
||||
</version>
|
||||
<stability>
|
||||
<release>stable</release>
|
||||
<api>stable</api>
|
||||
</stability>
|
||||
<date>2009-08-05</date>
|
||||
<license uri="http://www.opensource.org/licenses/bsd-license.php">BSD</license>
|
||||
<notes>
|
||||
QA release
|
||||
* Move SVN to proper directory structure [cweiske]
|
||||
* Fix Bug #8775: Error in package.xml
|
||||
* Fix Bug #14671: Security issue due to seeding random number generator [cweiske]
|
||||
</notes>
|
||||
</release>
|
||||
|
||||
<release>
|
||||
<version>
|
||||
<release>1.0.2</release>
|
||||
<api>1.0.2</api>
|
||||
</version>
|
||||
<stability>
|
||||
<release>stable</release>
|
||||
<api>stable</api>
|
||||
</stability>
|
||||
<date>2006-05-21</date>
|
||||
<license uri="http://www.opensource.org/licenses/bsd-license.php">BSD</license>
|
||||
<notes>
|
||||
* Fixed Bug #2143 Auth_SASL_DigestMD5::getResponse() generates invalid response
|
||||
* Fixed Bug #6611 Suppress PHP 5 Notice Errors
|
||||
* Fixed Bug #2154 realm isn't contained in challange
|
||||
</notes>
|
||||
</release>
|
||||
|
||||
<release>
|
||||
<version>
|
||||
<release>1.0.1</release>
|
||||
<api>1.0.1</api>
|
||||
</version>
|
||||
<stability>
|
||||
<release>stable</release>
|
||||
<api>stable</api>
|
||||
</stability>
|
||||
<date>2003-09-11</date>
|
||||
<license uri="http://www.opensource.org/licenses/bsd-license.php">BSD</license>
|
||||
<notes>* Added authcid/authzid separation in PLAIN and DIGEST-MD5.
|
||||
</notes>
|
||||
</release>
|
||||
|
||||
</changelog>
|
||||
</package>
|
29
sites/all/modules/civicrm/vendor/pear/auth_sasl/phpunit.xml.dist
vendored
Normal file
29
sites/all/modules/civicrm/vendor/pear/auth_sasl/phpunit.xml.dist
vendored
Normal file
|
@ -0,0 +1,29 @@
|
|||
<phpunit bootstrap="vendor/autoload.php"
|
||||
cacheTokens="false"
|
||||
colors="true"
|
||||
convertErrorsToExceptions="true"
|
||||
convertNoticesToExceptions="true"
|
||||
convertWarningsToExceptions="true"
|
||||
stopOnError="false"
|
||||
stopOnFailure="false"
|
||||
stopOnIncomplete="false"
|
||||
stopOnSkipped="false">
|
||||
|
||||
<testsuites>
|
||||
<testsuite name="Test Suite">
|
||||
<directory suffix=".php">tests/</directory>
|
||||
</testsuite>
|
||||
</testsuites>
|
||||
|
||||
<filter>
|
||||
<whitelist>
|
||||
<directory suffix=".php">Net/</directory>
|
||||
</whitelist>
|
||||
</filter>
|
||||
|
||||
<logging>
|
||||
<log type="coverage-clover" target="build/logs/clover.xml"/>
|
||||
<log type="coverage-html" target="build/coverage/"/>
|
||||
</logging>
|
||||
|
||||
</phpunit>
|
14
sites/all/modules/civicrm/vendor/pear/net_smtp/.gitignore
vendored
Normal file
14
sites/all/modules/civicrm/vendor/pear/net_smtp/.gitignore
vendored
Normal file
|
@ -0,0 +1,14 @@
|
|||
.DS_Store
|
||||
|
||||
# Tests
|
||||
run-tests.log
|
||||
/tests/*.diff
|
||||
/tests/*.exp
|
||||
/tests/*.log
|
||||
/tests/*.out
|
||||
/tests/config.php
|
||||
|
||||
# composer related
|
||||
composer.lock
|
||||
composer.phar
|
||||
vendor
|
6
sites/all/modules/civicrm/vendor/pear/net_smtp/.travis.yml
vendored
Normal file
6
sites/all/modules/civicrm/vendor/pear/net_smtp/.travis.yml
vendored
Normal file
|
@ -0,0 +1,6 @@
|
|||
language: php
|
||||
install:
|
||||
- pear install package.xml
|
||||
php:
|
||||
- 5.2
|
||||
script: phpunit tests/
|
69
sites/all/modules/civicrm/vendor/pear/net_smtp/LICENSE
vendored
Normal file
69
sites/all/modules/civicrm/vendor/pear/net_smtp/LICENSE
vendored
Normal file
|
@ -0,0 +1,69 @@
|
|||
--------------------------------------------------------------------
|
||||
The PHP License, version 3.01
|
||||
Copyright (c) 2002-2015 Jon Parise and Chuck Hagenbuch.
|
||||
All rights reserved.
|
||||
--------------------------------------------------------------------
|
||||
|
||||
Redistribution and use in source and binary forms, with or without
|
||||
modification, is permitted provided that the following conditions
|
||||
are met:
|
||||
|
||||
1. Redistributions of source code must retain the above copyright
|
||||
notice, this list of conditions and the following disclaimer.
|
||||
|
||||
2. Redistributions in binary form must reproduce the above copyright
|
||||
notice, this list of conditions and the following disclaimer in
|
||||
the documentation and/or other materials provided with the
|
||||
distribution.
|
||||
|
||||
3. The name "PHP" must not be used to endorse or promote products
|
||||
derived from this software without prior written permission. For
|
||||
written permission, please contact group@php.net.
|
||||
|
||||
4. Products derived from this software may not be called "PHP", nor
|
||||
may "PHP" appear in their name, without prior written permission
|
||||
from group@php.net. You may indicate that your software works in
|
||||
conjunction with PHP by saying "Foo for PHP" instead of calling
|
||||
it "PHP Foo" or "phpfoo"
|
||||
|
||||
5. The PHP Group may publish revised and/or new versions of the
|
||||
license from time to time. Each version will be given a
|
||||
distinguishing version number.
|
||||
Once covered code has been published under a particular version
|
||||
of the license, you may always continue to use it under the terms
|
||||
of that version. You may also choose to use such covered code
|
||||
under the terms of any subsequent version of the license
|
||||
published by the PHP Group. No one other than the PHP Group has
|
||||
the right to modify the terms applicable to covered code created
|
||||
under this License.
|
||||
|
||||
6. Redistributions of any form whatsoever must retain the following
|
||||
acknowledgment:
|
||||
"This product includes PHP software, freely available from
|
||||
<http://www.php.net/software/>".
|
||||
|
||||
THIS SOFTWARE IS PROVIDED BY THE PHP DEVELOPMENT TEAM ``AS IS'' AND
|
||||
ANY EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
|
||||
THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
|
||||
PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE PHP
|
||||
DEVELOPMENT TEAM OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
|
||||
INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
|
||||
(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
|
||||
SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
|
||||
HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
|
||||
STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
|
||||
ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
|
||||
OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
|
||||
--------------------------------------------------------------------
|
||||
|
||||
This software consists of voluntary contributions made by many
|
||||
individuals on behalf of the PHP Group.
|
||||
|
||||
The PHP Group can be contacted via Email at group@php.net.
|
||||
|
||||
For more information on the PHP Group and the PHP project,
|
||||
please see <http://www.php.net>.
|
||||
|
||||
PHP includes the Zend Engine, freely available at
|
||||
<http://www.zend.com>.
|
1354
sites/all/modules/civicrm/vendor/pear/net_smtp/Net/SMTP.php
vendored
Normal file
1354
sites/all/modules/civicrm/vendor/pear/net_smtp/Net/SMTP.php
vendored
Normal file
File diff suppressed because it is too large
Load diff
48
sites/all/modules/civicrm/vendor/pear/net_smtp/composer.json
vendored
Normal file
48
sites/all/modules/civicrm/vendor/pear/net_smtp/composer.json
vendored
Normal file
|
@ -0,0 +1,48 @@
|
|||
{
|
||||
"authors": [
|
||||
{
|
||||
"email": "jon@php.net",
|
||||
"name": "Jon Parise",
|
||||
"homepage": "http://www.indelible.org",
|
||||
"role": "Lead"
|
||||
},
|
||||
{
|
||||
"email": "chuck@horde.org",
|
||||
"name": "Chuck Hagenbuch",
|
||||
"role": "Lead"
|
||||
}
|
||||
],
|
||||
"autoload": {
|
||||
"psr-0": {
|
||||
"Net": "./"
|
||||
}
|
||||
},
|
||||
"description": "An implementation of the SMTP protocol",
|
||||
"keywords": [
|
||||
"smtp",
|
||||
"mail",
|
||||
"email"
|
||||
],
|
||||
"include-path": [
|
||||
"./"
|
||||
],
|
||||
"license": "PHP License",
|
||||
"name": "pear/net_smtp",
|
||||
"homepage": "http://pear.github.io/Net_SMTP/",
|
||||
"support": {
|
||||
"issues": "https://github.com/pear/Net_SMTP/issues",
|
||||
"source": "https://github.com/pear/Net_SMTP"
|
||||
},
|
||||
"type": "library",
|
||||
"require": {
|
||||
"php": ">=4.0.5",
|
||||
"pear/pear_exception": "*",
|
||||
"pear/net_socket": "*"
|
||||
},
|
||||
"require-dev": {
|
||||
"phpunit/phpunit": "*"
|
||||
},
|
||||
"suggest": {
|
||||
"pear/auth_sasl": "Install optionally via your project's composer.json"
|
||||
}
|
||||
}
|
77
sites/all/modules/civicrm/vendor/pear/net_smtp/package.xml
vendored
Normal file
77
sites/all/modules/civicrm/vendor/pear/net_smtp/package.xml
vendored
Normal file
|
@ -0,0 +1,77 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<package packagerversion="1.7.1" version="2.0" xmlns="http://pear.php.net/dtd/package-2.0" xmlns:tasks="http://pear.php.net/dtd/tasks-1.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://pear.php.net/dtd/tasks-1.0
|
||||
http://pear.php.net/dtd/tasks-1.0.xsd
|
||||
http://pear.php.net/dtd/package-2.0
|
||||
http://pear.php.net/dtd/package-2.0.xsd">
|
||||
<name>Net_SMTP</name>
|
||||
<channel>pear.php.net</channel>
|
||||
<summary>An implementation of the SMTP protocol</summary>
|
||||
<description>Provides an implementation of the SMTP protocol using PEAR's Net_Socket class.</description>
|
||||
<lead>
|
||||
<name>Jon Parise</name>
|
||||
<user>jon</user>
|
||||
<email>jon@php.net</email>
|
||||
<active>yes</active>
|
||||
</lead>
|
||||
<lead>
|
||||
<name>Chuck Hagenbuch</name>
|
||||
<user>chagenbu</user>
|
||||
<email>chuck@horde.org</email>
|
||||
<active>yes</active>
|
||||
</lead>
|
||||
<date>2015-08-02</date>
|
||||
<time>11:00:00</time>
|
||||
<version>
|
||||
<release>1.6.3</release>
|
||||
<api>1.2.0</api>
|
||||
</version>
|
||||
<stability>
|
||||
<release>stable</release>
|
||||
<api>stable</api>
|
||||
</stability>
|
||||
<license uri="http://www.php.net/license/3_01.txt">PHP License</license>
|
||||
<notes>- Fix redundant CRLF terminator sequence.
|
||||
- Add a note about $socket_options and OpenSSL.
|
||||
- Add Composer support.
|
||||
</notes>
|
||||
<contents>
|
||||
<dir baseinstalldir="/" name="/">
|
||||
<dir name="docs">
|
||||
<file name="guide.txt" role="doc" />
|
||||
</dir> <!-- /docs -->
|
||||
<dir name="examples">
|
||||
<file name="basic.php" role="doc" />
|
||||
</dir> <!-- /examples -->
|
||||
<dir name="tests">
|
||||
<file name="auth.phpt" role="test" />
|
||||
<file name="basic.phpt" role="test" />
|
||||
<file name="config.php.dist" role="test" />
|
||||
<file name="quotedata.phpt" role="test" />
|
||||
</dir> <!-- /tests -->
|
||||
<file name="Net/SMTP.php" role="php" />
|
||||
</dir> <!-- / -->
|
||||
</contents>
|
||||
<dependencies>
|
||||
<required>
|
||||
<php>
|
||||
<min>4.0.5</min>
|
||||
</php>
|
||||
<pearinstaller>
|
||||
<min>1.4.3</min>
|
||||
</pearinstaller>
|
||||
<package>
|
||||
<name>Net_Socket</name>
|
||||
<channel>pear.php.net</channel>
|
||||
<min>1.0.7</min>
|
||||
</package>
|
||||
</required>
|
||||
<optional>
|
||||
<package>
|
||||
<name>Auth_SASL</name>
|
||||
<channel>pear.php.net</channel>
|
||||
<min>1.0.5</min>
|
||||
</package>
|
||||
</optional>
|
||||
</dependencies>
|
||||
<phprelease />
|
||||
</package>
|
4
sites/all/modules/civicrm/vendor/pear/net_socket/.gitignore
vendored
Normal file
4
sites/all/modules/civicrm/vendor/pear/net_socket/.gitignore
vendored
Normal file
|
@ -0,0 +1,4 @@
|
|||
# composer related
|
||||
composer.lock
|
||||
composer.phar
|
||||
vendor
|
686
sites/all/modules/civicrm/vendor/pear/net_socket/Net/Socket.php
vendored
Normal file
686
sites/all/modules/civicrm/vendor/pear/net_socket/Net/Socket.php
vendored
Normal file
|
@ -0,0 +1,686 @@
|
|||
<?php
|
||||
/**
|
||||
* Net_Socket
|
||||
*
|
||||
* PHP Version 4
|
||||
*
|
||||
* Copyright (c) 1997-2013 The PHP Group
|
||||
*
|
||||
* This source file is subject to version 2.0 of the PHP license,
|
||||
* that is bundled with this package in the file LICENSE, and is
|
||||
* available at through the world-wide-web at
|
||||
* http://www.php.net/license/2_02.txt.
|
||||
* If you did not receive a copy of the PHP license and are unable to
|
||||
* obtain it through the world-wide-web, please send a note to
|
||||
* license@php.net so we can mail you a copy immediately.
|
||||
*
|
||||
* Authors: Stig Bakken <ssb@php.net>
|
||||
* Chuck Hagenbuch <chuck@horde.org>
|
||||
*
|
||||
* @category Net
|
||||
* @package Net_Socket
|
||||
* @author Stig Bakken <ssb@php.net>
|
||||
* @author Chuck Hagenbuch <chuck@horde.org>
|
||||
* @copyright 1997-2003 The PHP Group
|
||||
* @license http://www.php.net/license/2_02.txt PHP 2.02
|
||||
* @link http://pear.php.net/packages/Net_Socket
|
||||
*/
|
||||
|
||||
require_once 'PEAR.php';
|
||||
|
||||
define('NET_SOCKET_READ', 1);
|
||||
define('NET_SOCKET_WRITE', 2);
|
||||
define('NET_SOCKET_ERROR', 4);
|
||||
|
||||
/**
|
||||
* Generalized Socket class.
|
||||
*
|
||||
* @category Net
|
||||
* @package Net_Socket
|
||||
* @author Stig Bakken <ssb@php.net>
|
||||
* @author Chuck Hagenbuch <chuck@horde.org>
|
||||
* @copyright 1997-2003 The PHP Group
|
||||
* @license http://www.php.net/license/2_02.txt PHP 2.02
|
||||
* @link http://pear.php.net/packages/Net_Socket
|
||||
*/
|
||||
class Net_Socket extends PEAR
|
||||
{
|
||||
/**
|
||||
* Socket file pointer.
|
||||
* @var resource $fp
|
||||
*/
|
||||
var $fp = null;
|
||||
|
||||
/**
|
||||
* Whether the socket is blocking. Defaults to true.
|
||||
* @var boolean $blocking
|
||||
*/
|
||||
var $blocking = true;
|
||||
|
||||
/**
|
||||
* Whether the socket is persistent. Defaults to false.
|
||||
* @var boolean $persistent
|
||||
*/
|
||||
var $persistent = false;
|
||||
|
||||
/**
|
||||
* The IP address to connect to.
|
||||
* @var string $addr
|
||||
*/
|
||||
var $addr = '';
|
||||
|
||||
/**
|
||||
* The port number to connect to.
|
||||
* @var integer $port
|
||||
*/
|
||||
var $port = 0;
|
||||
|
||||
/**
|
||||
* Number of seconds to wait on socket operations before assuming
|
||||
* there's no more data. Defaults to no timeout.
|
||||
* @var integer|float $timeout
|
||||
*/
|
||||
var $timeout = null;
|
||||
|
||||
/**
|
||||
* Number of bytes to read at a time in readLine() and
|
||||
* readAll(). Defaults to 2048.
|
||||
* @var integer $lineLength
|
||||
*/
|
||||
var $lineLength = 2048;
|
||||
|
||||
/**
|
||||
* The string to use as a newline terminator. Usually "\r\n" or "\n".
|
||||
* @var string $newline
|
||||
*/
|
||||
var $newline = "\r\n";
|
||||
|
||||
/**
|
||||
* Connect to the specified port. If called when the socket is
|
||||
* already connected, it disconnects and connects again.
|
||||
*
|
||||
* @param string $addr IP address or host name (may be with protocol prefix).
|
||||
* @param integer $port TCP port number.
|
||||
* @param boolean $persistent (optional) Whether the connection is
|
||||
* persistent (kept open between requests
|
||||
* by the web server).
|
||||
* @param integer $timeout (optional) Connection socket timeout.
|
||||
* @param array $options See options for stream_context_create.
|
||||
*
|
||||
* @access public
|
||||
*
|
||||
* @return boolean|PEAR_Error True on success or a PEAR_Error on failure.
|
||||
*/
|
||||
function connect($addr, $port = 0, $persistent = null,
|
||||
$timeout = null, $options = null)
|
||||
{
|
||||
if (is_resource($this->fp)) {
|
||||
@fclose($this->fp);
|
||||
$this->fp = null;
|
||||
}
|
||||
|
||||
if (!$addr) {
|
||||
return $this->raiseError('$addr cannot be empty');
|
||||
} else if (strspn($addr, ':.0123456789') == strlen($addr)) {
|
||||
$this->addr = strpos($addr, ':') !== false ? '['.$addr.']' : $addr;
|
||||
} else {
|
||||
$this->addr = $addr;
|
||||
}
|
||||
|
||||
$this->port = $port % 65536;
|
||||
|
||||
if ($persistent !== null) {
|
||||
$this->persistent = $persistent;
|
||||
}
|
||||
|
||||
$openfunc = $this->persistent ? 'pfsockopen' : 'fsockopen';
|
||||
$errno = 0;
|
||||
$errstr = '';
|
||||
|
||||
$old_track_errors = @ini_set('track_errors', 1);
|
||||
|
||||
if ($timeout <= 0) {
|
||||
$timeout = @ini_get('default_socket_timeout');
|
||||
}
|
||||
|
||||
if ($options && function_exists('stream_context_create')) {
|
||||
$context = stream_context_create($options);
|
||||
|
||||
// Since PHP 5 fsockopen doesn't allow context specification
|
||||
if (function_exists('stream_socket_client')) {
|
||||
$flags = STREAM_CLIENT_CONNECT;
|
||||
|
||||
if ($this->persistent) {
|
||||
$flags = STREAM_CLIENT_PERSISTENT;
|
||||
}
|
||||
|
||||
$addr = $this->addr . ':' . $this->port;
|
||||
$fp = stream_socket_client($addr, $errno, $errstr,
|
||||
$timeout, $flags, $context);
|
||||
} else {
|
||||
$fp = @$openfunc($this->addr, $this->port, $errno,
|
||||
$errstr, $timeout, $context);
|
||||
}
|
||||
} else {
|
||||
$fp = @$openfunc($this->addr, $this->port, $errno, $errstr, $timeout);
|
||||
}
|
||||
|
||||
if (!$fp) {
|
||||
if ($errno == 0 && !strlen($errstr) && isset($php_errormsg)) {
|
||||
$errstr = $php_errormsg;
|
||||
}
|
||||
@ini_set('track_errors', $old_track_errors);
|
||||
return $this->raiseError($errstr, $errno);
|
||||
}
|
||||
|
||||
@ini_set('track_errors', $old_track_errors);
|
||||
$this->fp = $fp;
|
||||
$this->setTimeout();
|
||||
return $this->setBlocking($this->blocking);
|
||||
}
|
||||
|
||||
/**
|
||||
* Disconnects from the peer, closes the socket.
|
||||
*
|
||||
* @access public
|
||||
* @return mixed true on success or a PEAR_Error instance otherwise
|
||||
*/
|
||||
function disconnect()
|
||||
{
|
||||
if (!is_resource($this->fp)) {
|
||||
return $this->raiseError('not connected');
|
||||
}
|
||||
|
||||
@fclose($this->fp);
|
||||
$this->fp = null;
|
||||
return true;
|
||||
}
|
||||
|
||||
/**
|
||||
* Set the newline character/sequence to use.
|
||||
*
|
||||
* @param string $newline Newline character(s)
|
||||
* @return boolean True
|
||||
*/
|
||||
function setNewline($newline)
|
||||
{
|
||||
$this->newline = $newline;
|
||||
return true;
|
||||
}
|
||||
|
||||
/**
|
||||
* Find out if the socket is in blocking mode.
|
||||
*
|
||||
* @access public
|
||||
* @return boolean The current blocking mode.
|
||||
*/
|
||||
function isBlocking()
|
||||
{
|
||||
return $this->blocking;
|
||||
}
|
||||
|
||||
/**
|
||||
* Sets whether the socket connection should be blocking or
|
||||
* not. A read call to a non-blocking socket will return immediately
|
||||
* if there is no data available, whereas it will block until there
|
||||
* is data for blocking sockets.
|
||||
*
|
||||
* @param boolean $mode True for blocking sockets, false for nonblocking.
|
||||
*
|
||||
* @access public
|
||||
* @return mixed true on success or a PEAR_Error instance otherwise
|
||||
*/
|
||||
function setBlocking($mode)
|
||||
{
|
||||
if (!is_resource($this->fp)) {
|
||||
return $this->raiseError('not connected');
|
||||
}
|
||||
|
||||
$this->blocking = $mode;
|
||||
stream_set_blocking($this->fp, (int)$this->blocking);
|
||||
return true;
|
||||
}
|
||||
|
||||
/**
|
||||
* Sets the timeout value on socket descriptor,
|
||||
* expressed in the sum of seconds and microseconds
|
||||
*
|
||||
* @param integer $seconds Seconds.
|
||||
* @param integer $microseconds Microseconds, optional.
|
||||
*
|
||||
* @access public
|
||||
* @return mixed True on success or false on failure or
|
||||
* a PEAR_Error instance when not connected
|
||||
*/
|
||||
function setTimeout($seconds = null, $microseconds = null)
|
||||
{
|
||||
if (!is_resource($this->fp)) {
|
||||
return $this->raiseError('not connected');
|
||||
}
|
||||
|
||||
if ($seconds === null && $microseconds === null) {
|
||||
$seconds = (int) $this->timeout;
|
||||
$microseconds = (int) (($this->timeout - $seconds) * 1000000);
|
||||
} else {
|
||||
$this->timeout = $seconds + $microseconds/1000000;
|
||||
}
|
||||
|
||||
if ($this->timeout > 0) {
|
||||
return stream_set_timeout($this->fp, (int) $seconds, (int) $microseconds);
|
||||
}
|
||||
else {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Sets the file buffering size on the stream.
|
||||
* See php's stream_set_write_buffer for more information.
|
||||
*
|
||||
* @param integer $size Write buffer size.
|
||||
*
|
||||
* @access public
|
||||
* @return mixed on success or an PEAR_Error object otherwise
|
||||
*/
|
||||
function setWriteBuffer($size)
|
||||
{
|
||||
if (!is_resource($this->fp)) {
|
||||
return $this->raiseError('not connected');
|
||||
}
|
||||
|
||||
$returned = stream_set_write_buffer($this->fp, $size);
|
||||
if ($returned == 0) {
|
||||
return true;
|
||||
}
|
||||
return $this->raiseError('Cannot set write buffer.');
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns information about an existing socket resource.
|
||||
* Currently returns four entries in the result array:
|
||||
*
|
||||
* <p>
|
||||
* timed_out (bool) - The socket timed out waiting for data<br>
|
||||
* blocked (bool) - The socket was blocked<br>
|
||||
* eof (bool) - Indicates EOF event<br>
|
||||
* unread_bytes (int) - Number of bytes left in the socket buffer<br>
|
||||
* </p>
|
||||
*
|
||||
* @access public
|
||||
* @return mixed Array containing information about existing socket
|
||||
* resource or a PEAR_Error instance otherwise
|
||||
*/
|
||||
function getStatus()
|
||||
{
|
||||
if (!is_resource($this->fp)) {
|
||||
return $this->raiseError('not connected');
|
||||
}
|
||||
|
||||
return stream_get_meta_data($this->fp);
|
||||
}
|
||||
|
||||
/**
|
||||
* Get a specified line of data
|
||||
*
|
||||
* @param int $size Reading ends when size - 1 bytes have been read,
|
||||
* or a newline or an EOF (whichever comes first).
|
||||
* If no size is specified, it will keep reading from
|
||||
* the stream until it reaches the end of the line.
|
||||
*
|
||||
* @access public
|
||||
* @return mixed $size bytes of data from the socket, or a PEAR_Error if
|
||||
* not connected. If an error occurs, FALSE is returned.
|
||||
*/
|
||||
function gets($size = null)
|
||||
{
|
||||
if (!is_resource($this->fp)) {
|
||||
return $this->raiseError('not connected');
|
||||
}
|
||||
|
||||
if (is_null($size)) {
|
||||
return @fgets($this->fp);
|
||||
} else {
|
||||
return @fgets($this->fp, $size);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Read a specified amount of data. This is guaranteed to return,
|
||||
* and has the added benefit of getting everything in one fread()
|
||||
* chunk; if you know the size of the data you're getting
|
||||
* beforehand, this is definitely the way to go.
|
||||
*
|
||||
* @param integer $size The number of bytes to read from the socket.
|
||||
*
|
||||
* @access public
|
||||
* @return $size bytes of data from the socket, or a PEAR_Error if
|
||||
* not connected.
|
||||
*/
|
||||
function read($size)
|
||||
{
|
||||
if (!is_resource($this->fp)) {
|
||||
return $this->raiseError('not connected');
|
||||
}
|
||||
|
||||
return @fread($this->fp, $size);
|
||||
}
|
||||
|
||||
/**
|
||||
* Write a specified amount of data.
|
||||
*
|
||||
* @param string $data Data to write.
|
||||
* @param integer $blocksize Amount of data to write at once.
|
||||
* NULL means all at once.
|
||||
*
|
||||
* @access public
|
||||
* @return mixed If the socket is not connected, returns an instance of
|
||||
* PEAR_Error.
|
||||
* If the write succeeds, returns the number of bytes written.
|
||||
* If the write fails, returns false.
|
||||
* If the socket times out, returns an instance of PEAR_Error.
|
||||
*/
|
||||
function write($data, $blocksize = null)
|
||||
{
|
||||
if (!is_resource($this->fp)) {
|
||||
return $this->raiseError('not connected');
|
||||
}
|
||||
|
||||
if (is_null($blocksize) && !OS_WINDOWS) {
|
||||
$written = @fwrite($this->fp, $data);
|
||||
|
||||
// Check for timeout or lost connection
|
||||
if (!$written) {
|
||||
$meta_data = $this->getStatus();
|
||||
|
||||
if (!is_array($meta_data)) {
|
||||
return $meta_data; // PEAR_Error
|
||||
}
|
||||
|
||||
if (!empty($meta_data['timed_out'])) {
|
||||
return $this->raiseError('timed out');
|
||||
}
|
||||
}
|
||||
|
||||
return $written;
|
||||
} else {
|
||||
if (is_null($blocksize)) {
|
||||
$blocksize = 1024;
|
||||
}
|
||||
|
||||
$pos = 0;
|
||||
$size = strlen($data);
|
||||
while ($pos < $size) {
|
||||
$written = @fwrite($this->fp, substr($data, $pos, $blocksize));
|
||||
|
||||
// Check for timeout or lost connection
|
||||
if (!$written) {
|
||||
$meta_data = $this->getStatus();
|
||||
|
||||
if (!is_array($meta_data)) {
|
||||
return $meta_data; // PEAR_Error
|
||||
}
|
||||
|
||||
if (!empty($meta_data['timed_out'])) {
|
||||
return $this->raiseError('timed out');
|
||||
}
|
||||
|
||||
return $written;
|
||||
}
|
||||
|
||||
$pos += $written;
|
||||
}
|
||||
|
||||
return $pos;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Write a line of data to the socket, followed by a trailing newline.
|
||||
*
|
||||
* @param string $data Data to write
|
||||
*
|
||||
* @access public
|
||||
* @return mixed fwrite() result, or PEAR_Error when not connected
|
||||
*/
|
||||
function writeLine($data)
|
||||
{
|
||||
if (!is_resource($this->fp)) {
|
||||
return $this->raiseError('not connected');
|
||||
}
|
||||
|
||||
return fwrite($this->fp, $data . $this->newline);
|
||||
}
|
||||
|
||||
/**
|
||||
* Tests for end-of-file on a socket descriptor.
|
||||
*
|
||||
* Also returns true if the socket is disconnected.
|
||||
*
|
||||
* @access public
|
||||
* @return bool
|
||||
*/
|
||||
function eof()
|
||||
{
|
||||
return (!is_resource($this->fp) || feof($this->fp));
|
||||
}
|
||||
|
||||
/**
|
||||
* Reads a byte of data
|
||||
*
|
||||
* @access public
|
||||
* @return 1 byte of data from the socket, or a PEAR_Error if
|
||||
* not connected.
|
||||
*/
|
||||
function readByte()
|
||||
{
|
||||
if (!is_resource($this->fp)) {
|
||||
return $this->raiseError('not connected');
|
||||
}
|
||||
|
||||
return ord(@fread($this->fp, 1));
|
||||
}
|
||||
|
||||
/**
|
||||
* Reads a word of data
|
||||
*
|
||||
* @access public
|
||||
* @return 1 word of data from the socket, or a PEAR_Error if
|
||||
* not connected.
|
||||
*/
|
||||
function readWord()
|
||||
{
|
||||
if (!is_resource($this->fp)) {
|
||||
return $this->raiseError('not connected');
|
||||
}
|
||||
|
||||
$buf = @fread($this->fp, 2);
|
||||
return (ord($buf[0]) + (ord($buf[1]) << 8));
|
||||
}
|
||||
|
||||
/**
|
||||
* Reads an int of data
|
||||
*
|
||||
* @access public
|
||||
* @return integer 1 int of data from the socket, or a PEAR_Error if
|
||||
* not connected.
|
||||
*/
|
||||
function readInt()
|
||||
{
|
||||
if (!is_resource($this->fp)) {
|
||||
return $this->raiseError('not connected');
|
||||
}
|
||||
|
||||
$buf = @fread($this->fp, 4);
|
||||
return (ord($buf[0]) + (ord($buf[1]) << 8) +
|
||||
(ord($buf[2]) << 16) + (ord($buf[3]) << 24));
|
||||
}
|
||||
|
||||
/**
|
||||
* Reads a zero-terminated string of data
|
||||
*
|
||||
* @access public
|
||||
* @return string, or a PEAR_Error if
|
||||
* not connected.
|
||||
*/
|
||||
function readString()
|
||||
{
|
||||
if (!is_resource($this->fp)) {
|
||||
return $this->raiseError('not connected');
|
||||
}
|
||||
|
||||
$string = '';
|
||||
while (($char = @fread($this->fp, 1)) != "\x00") {
|
||||
$string .= $char;
|
||||
}
|
||||
return $string;
|
||||
}
|
||||
|
||||
/**
|
||||
* Reads an IP Address and returns it in a dot formatted string
|
||||
*
|
||||
* @access public
|
||||
* @return Dot formatted string, or a PEAR_Error if
|
||||
* not connected.
|
||||
*/
|
||||
function readIPAddress()
|
||||
{
|
||||
if (!is_resource($this->fp)) {
|
||||
return $this->raiseError('not connected');
|
||||
}
|
||||
|
||||
$buf = @fread($this->fp, 4);
|
||||
return sprintf('%d.%d.%d.%d', ord($buf[0]), ord($buf[1]),
|
||||
ord($buf[2]), ord($buf[3]));
|
||||
}
|
||||
|
||||
/**
|
||||
* Read until either the end of the socket or a newline, whichever
|
||||
* comes first. Strips the trailing newline from the returned data.
|
||||
*
|
||||
* @access public
|
||||
* @return All available data up to a newline, without that
|
||||
* newline, or until the end of the socket, or a PEAR_Error if
|
||||
* not connected.
|
||||
*/
|
||||
function readLine()
|
||||
{
|
||||
if (!is_resource($this->fp)) {
|
||||
return $this->raiseError('not connected');
|
||||
}
|
||||
|
||||
$line = '';
|
||||
|
||||
$timeout = time() + $this->timeout;
|
||||
|
||||
while (!feof($this->fp) && (!$this->timeout || time() < $timeout)) {
|
||||
$line .= @fgets($this->fp, $this->lineLength);
|
||||
if (substr($line, -1) == "\n") {
|
||||
return rtrim($line, $this->newline);
|
||||
}
|
||||
}
|
||||
return $line;
|
||||
}
|
||||
|
||||
/**
|
||||
* Read until the socket closes, or until there is no more data in
|
||||
* the inner PHP buffer. If the inner buffer is empty, in blocking
|
||||
* mode we wait for at least 1 byte of data. Therefore, in
|
||||
* blocking mode, if there is no data at all to be read, this
|
||||
* function will never exit (unless the socket is closed on the
|
||||
* remote end).
|
||||
*
|
||||
* @access public
|
||||
*
|
||||
* @return string All data until the socket closes, or a PEAR_Error if
|
||||
* not connected.
|
||||
*/
|
||||
function readAll()
|
||||
{
|
||||
if (!is_resource($this->fp)) {
|
||||
return $this->raiseError('not connected');
|
||||
}
|
||||
|
||||
$data = '';
|
||||
while (!feof($this->fp)) {
|
||||
$data .= @fread($this->fp, $this->lineLength);
|
||||
}
|
||||
return $data;
|
||||
}
|
||||
|
||||
/**
|
||||
* Runs the equivalent of the select() system call on the socket
|
||||
* with a timeout specified by tv_sec and tv_usec.
|
||||
*
|
||||
* @param integer $state Which of read/write/error to check for.
|
||||
* @param integer $tv_sec Number of seconds for timeout.
|
||||
* @param integer $tv_usec Number of microseconds for timeout.
|
||||
*
|
||||
* @access public
|
||||
* @return False if select fails, integer describing which of read/write/error
|
||||
* are ready, or PEAR_Error if not connected.
|
||||
*/
|
||||
function select($state, $tv_sec, $tv_usec = 0)
|
||||
{
|
||||
if (!is_resource($this->fp)) {
|
||||
return $this->raiseError('not connected');
|
||||
}
|
||||
|
||||
$read = null;
|
||||
$write = null;
|
||||
$except = null;
|
||||
if ($state & NET_SOCKET_READ) {
|
||||
$read[] = $this->fp;
|
||||
}
|
||||
if ($state & NET_SOCKET_WRITE) {
|
||||
$write[] = $this->fp;
|
||||
}
|
||||
if ($state & NET_SOCKET_ERROR) {
|
||||
$except[] = $this->fp;
|
||||
}
|
||||
if (false === ($sr = stream_select($read, $write, $except,
|
||||
$tv_sec, $tv_usec))) {
|
||||
return false;
|
||||
}
|
||||
|
||||
$result = 0;
|
||||
if (count($read)) {
|
||||
$result |= NET_SOCKET_READ;
|
||||
}
|
||||
if (count($write)) {
|
||||
$result |= NET_SOCKET_WRITE;
|
||||
}
|
||||
if (count($except)) {
|
||||
$result |= NET_SOCKET_ERROR;
|
||||
}
|
||||
return $result;
|
||||
}
|
||||
|
||||
/**
|
||||
* Turns encryption on/off on a connected socket.
|
||||
*
|
||||
* @param bool $enabled Set this parameter to true to enable encryption
|
||||
* and false to disable encryption.
|
||||
* @param integer $type Type of encryption. See stream_socket_enable_crypto()
|
||||
* for values.
|
||||
*
|
||||
* @see http://se.php.net/manual/en/function.stream-socket-enable-crypto.php
|
||||
* @access public
|
||||
* @return false on error, true on success and 0 if there isn't enough data
|
||||
* and the user should try again (non-blocking sockets only).
|
||||
* A PEAR_Error object is returned if the socket is not
|
||||
* connected
|
||||
*/
|
||||
function enableCrypto($enabled, $type)
|
||||
{
|
||||
if (version_compare(phpversion(), "5.1.0", ">=")) {
|
||||
if (!is_resource($this->fp)) {
|
||||
return $this->raiseError('not connected');
|
||||
}
|
||||
return @stream_socket_enable_crypto($this->fp, $enabled, $type);
|
||||
} else {
|
||||
$msg = 'Net_Socket::enableCrypto() requires php version >= 5.1.0';
|
||||
return $this->raiseError($msg);
|
||||
}
|
||||
}
|
||||
|
||||
}
|
41
sites/all/modules/civicrm/vendor/pear/net_socket/composer.json
vendored
Normal file
41
sites/all/modules/civicrm/vendor/pear/net_socket/composer.json
vendored
Normal file
|
@ -0,0 +1,41 @@
|
|||
{
|
||||
"authors": [
|
||||
{
|
||||
"email": "chuck@horde.org",
|
||||
"name": "Chuck Hagenbuch",
|
||||
"role": "Lead"
|
||||
},
|
||||
{
|
||||
"email": "stig@php.net",
|
||||
"name": "Stig Bakken",
|
||||
"role": "Lead"
|
||||
},
|
||||
{
|
||||
"email": "alec@php.net",
|
||||
"name": "Aleksander Machniak",
|
||||
"role": "Lead"
|
||||
}
|
||||
],
|
||||
"autoload": {
|
||||
"psr-0": {
|
||||
"Net": "./"
|
||||
}
|
||||
},
|
||||
"description": "More info available on: http://pear.php.net/package/Net_Socket",
|
||||
"include-path": [
|
||||
"./"
|
||||
],
|
||||
"license": "PHP License",
|
||||
"name": "pear/net_socket",
|
||||
"support": {
|
||||
"issues": "http://pear.php.net/bugs/search.php?cmd=display&package_name[]=Net_Socket",
|
||||
"source": "https://github.com/pear/Net_Socket"
|
||||
},
|
||||
"type": "library",
|
||||
"require": {
|
||||
"pear/pear_exception": "*"
|
||||
},
|
||||
"require-dev": {
|
||||
"phpunit/phpunit": "*"
|
||||
}
|
||||
}
|
59
sites/all/modules/civicrm/vendor/pear/net_socket/package.xml
vendored
Normal file
59
sites/all/modules/civicrm/vendor/pear/net_socket/package.xml
vendored
Normal file
|
@ -0,0 +1,59 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<package packagerversion="1.9.1" version="2.0" xmlns="http://pear.php.net/dtd/package-2.0" xmlns:tasks="http://pear.php.net/dtd/tasks-1.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://pear.php.net/dtd/tasks-1.0 http://pear.php.net/dtd/tasks-1.0.xsd http://pear.php.net/dtd/package-2.0 http://pear.php.net/dtd/package-2.0.xsd">
|
||||
<name>Net_Socket</name>
|
||||
<channel>pear.php.net</channel>
|
||||
<summary>Network Socket Interface</summary>
|
||||
<description>Net_Socket is a class interface to TCP sockets. It provides blocking
|
||||
and non-blocking operation, with different reading and writing modes
|
||||
(byte-wise, block-wise, line-wise and special formats like network
|
||||
byte-order ip addresses).</description>
|
||||
<lead>
|
||||
<name>Chuck Hagenbuch</name>
|
||||
<user>chagenbu</user>
|
||||
<email>chuck@horde.org</email>
|
||||
<active>yes</active>
|
||||
</lead>
|
||||
<lead>
|
||||
<name>Stig Bakken</name>
|
||||
<user>ssb</user>
|
||||
<email>stig@php.net</email>
|
||||
<active>no</active>
|
||||
</lead>
|
||||
<lead>
|
||||
<name>Aleksander Machniak</name>
|
||||
<user>alec</user>
|
||||
<email>alec@php.net</email>
|
||||
<active>yes</active>
|
||||
</lead>
|
||||
<date>2013-05-24</date>
|
||||
<time>20:00:00</time>
|
||||
<version>
|
||||
<release>1.0.14</release>
|
||||
<api>1.0.10</api>
|
||||
</version>
|
||||
<stability>
|
||||
<release>stable</release>
|
||||
<api>stable</api>
|
||||
</stability>
|
||||
<license uri="http://www.php.net/license/2_02.txt">PHP License</license>
|
||||
<notes>
|
||||
- Fix connecting when host is specified with protocol prefix e.g. ssl://
|
||||
</notes>
|
||||
<contents>
|
||||
<dir baseinstalldir="/" name="/">
|
||||
<file baseinstalldir="/" md5sum="057d5c52b2dd9cfb2a458d532d95cfbb" name="Net/Socket.php" role="php" />
|
||||
</dir>
|
||||
</contents>
|
||||
<dependencies>
|
||||
<required>
|
||||
<php>
|
||||
<min>4.3.0</min>
|
||||
</php>
|
||||
<pearinstaller>
|
||||
<min>1.4.0b1</min>
|
||||
</pearinstaller>
|
||||
</required>
|
||||
</dependencies>
|
||||
<phprelease />
|
||||
<changelog />
|
||||
</package>
|
6
sites/all/modules/civicrm/vendor/pear/pear_exception/.gitignore
vendored
Normal file
6
sites/all/modules/civicrm/vendor/pear/pear_exception/.gitignore
vendored
Normal file
|
@ -0,0 +1,6 @@
|
|||
PEAR_Exception*.tgz
|
||||
|
||||
# composer related
|
||||
composer.lock
|
||||
composer.phar
|
||||
vendor
|
7
sites/all/modules/civicrm/vendor/pear/pear_exception/.travis.yml
vendored
Normal file
7
sites/all/modules/civicrm/vendor/pear/pear_exception/.travis.yml
vendored
Normal file
|
@ -0,0 +1,7 @@
|
|||
language: php
|
||||
php:
|
||||
- 5.6
|
||||
- 5.5
|
||||
- 5.4
|
||||
script:
|
||||
- cd tests && phpunit --coverage-text .
|
27
sites/all/modules/civicrm/vendor/pear/pear_exception/LICENSE
vendored
Normal file
27
sites/all/modules/civicrm/vendor/pear/pear_exception/LICENSE
vendored
Normal file
|
@ -0,0 +1,27 @@
|
|||
Copyright (c) 1997-2009,
|
||||
Stig Bakken <ssb@php.net>,
|
||||
Gregory Beaver <cellog@php.net>,
|
||||
Helgi Þormar Þorbjörnsson <helgi@php.net>,
|
||||
Tomas V.V.Cox <cox@idecnet.com>,
|
||||
Martin Jansen <mj@php.net>.
|
||||
All rights reserved.
|
||||
|
||||
Redistribution and use in source and binary forms, with or without
|
||||
modification, are permitted provided that the following conditions are met:
|
||||
|
||||
* Redistributions of source code must retain the above copyright notice,
|
||||
this list of conditions and the following disclaimer.
|
||||
* Redistributions in binary form must reproduce the above copyright
|
||||
notice, this list of conditions and the following disclaimer in the
|
||||
documentation and/or other materials provided with the distribution.
|
||||
|
||||
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
|
||||
AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||||
IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
||||
DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE
|
||||
FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
||||
DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
|
||||
SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
|
||||
CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
|
||||
OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
||||
OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
456
sites/all/modules/civicrm/vendor/pear/pear_exception/PEAR/Exception.php
vendored
Normal file
456
sites/all/modules/civicrm/vendor/pear/pear_exception/PEAR/Exception.php
vendored
Normal file
|
@ -0,0 +1,456 @@
|
|||
<?php if (class_exists("PEAR_Exception")) return; /* CRM-8921 */
|
||||
/* vim: set expandtab tabstop=4 shiftwidth=4 foldmethod=marker: */
|
||||
/**
|
||||
* PEAR_Exception
|
||||
*
|
||||
* PHP version 5
|
||||
*
|
||||
* @category PEAR
|
||||
* @package PEAR_Exception
|
||||
* @author Tomas V. V. Cox <cox@idecnet.com>
|
||||
* @author Hans Lellelid <hans@velum.net>
|
||||
* @author Bertrand Mansion <bmansion@mamasam.com>
|
||||
* @author Greg Beaver <cellog@php.net>
|
||||
* @copyright 1997-2009 The Authors
|
||||
* @license http://opensource.org/licenses/bsd-license.php New BSD License
|
||||
* @link http://pear.php.net/package/PEAR_Exception
|
||||
* @since File available since Release 1.0.0
|
||||
*/
|
||||
|
||||
|
||||
/**
|
||||
* Base PEAR_Exception Class
|
||||
*
|
||||
* 1) Features:
|
||||
*
|
||||
* - Nestable exceptions (throw new PEAR_Exception($msg, $prev_exception))
|
||||
* - Definable triggers, shot when exceptions occur
|
||||
* - Pretty and informative error messages
|
||||
* - Added more context info available (like class, method or cause)
|
||||
* - cause can be a PEAR_Exception or an array of mixed
|
||||
* PEAR_Exceptions/PEAR_ErrorStack warnings
|
||||
* - callbacks for specific exception classes and their children
|
||||
*
|
||||
* 2) Ideas:
|
||||
*
|
||||
* - Maybe a way to define a 'template' for the output
|
||||
*
|
||||
* 3) Inherited properties from PHP Exception Class:
|
||||
*
|
||||
* protected $message
|
||||
* protected $code
|
||||
* protected $line
|
||||
* protected $file
|
||||
* private $trace
|
||||
*
|
||||
* 4) Inherited methods from PHP Exception Class:
|
||||
*
|
||||
* __clone
|
||||
* __construct
|
||||
* getMessage
|
||||
* getCode
|
||||
* getFile
|
||||
* getLine
|
||||
* getTraceSafe
|
||||
* getTraceSafeAsString
|
||||
* __toString
|
||||
*
|
||||
* 5) Usage example
|
||||
*
|
||||
* <code>
|
||||
* require_once 'PEAR/Exception.php';
|
||||
*
|
||||
* class Test {
|
||||
* function foo() {
|
||||
* throw new PEAR_Exception('Error Message', ERROR_CODE);
|
||||
* }
|
||||
* }
|
||||
*
|
||||
* function myLogger($pear_exception) {
|
||||
* echo $pear_exception->getMessage();
|
||||
* }
|
||||
* // each time a exception is thrown the 'myLogger' will be called
|
||||
* // (its use is completely optional)
|
||||
* PEAR_Exception::addObserver('myLogger');
|
||||
* $test = new Test;
|
||||
* try {
|
||||
* $test->foo();
|
||||
* } catch (PEAR_Exception $e) {
|
||||
* print $e;
|
||||
* }
|
||||
* </code>
|
||||
*
|
||||
* @category PEAR
|
||||
* @package PEAR_Exception
|
||||
* @author Tomas V.V.Cox <cox@idecnet.com>
|
||||
* @author Hans Lellelid <hans@velum.net>
|
||||
* @author Bertrand Mansion <bmansion@mamasam.com>
|
||||
* @author Greg Beaver <cellog@php.net>
|
||||
* @copyright 1997-2009 The Authors
|
||||
* @license http://opensource.org/licenses/bsd-license.php New BSD License
|
||||
* @version Release: @package_version@
|
||||
* @link http://pear.php.net/package/PEAR_Exception
|
||||
* @since Class available since Release 1.0.0
|
||||
*/
|
||||
class PEAR_Exception extends Exception
|
||||
{
|
||||
const OBSERVER_PRINT = -2;
|
||||
const OBSERVER_TRIGGER = -4;
|
||||
const OBSERVER_DIE = -8;
|
||||
protected $cause;
|
||||
private static $_observers = array();
|
||||
private static $_uniqueid = 0;
|
||||
private $_trace;
|
||||
|
||||
/**
|
||||
* Supported signatures:
|
||||
* - PEAR_Exception(string $message);
|
||||
* - PEAR_Exception(string $message, int $code);
|
||||
* - PEAR_Exception(string $message, Exception $cause);
|
||||
* - PEAR_Exception(string $message, Exception $cause, int $code);
|
||||
* - PEAR_Exception(string $message, PEAR_Error $cause);
|
||||
* - PEAR_Exception(string $message, PEAR_Error $cause, int $code);
|
||||
* - PEAR_Exception(string $message, array $causes);
|
||||
* - PEAR_Exception(string $message, array $causes, int $code);
|
||||
*
|
||||
* @param string $message exception message
|
||||
* @param int|Exception|PEAR_Error|array|null $p2 exception cause
|
||||
* @param int|null $p3 exception code or null
|
||||
*/
|
||||
public function __construct($message, $p2 = null, $p3 = null)
|
||||
{
|
||||
if (is_int($p2)) {
|
||||
$code = $p2;
|
||||
$this->cause = null;
|
||||
} elseif (is_object($p2) || is_array($p2)) {
|
||||
// using is_object allows both Exception and PEAR_Error
|
||||
if (is_object($p2) && !($p2 instanceof Exception)) {
|
||||
if (!class_exists('PEAR_Error') || !($p2 instanceof PEAR_Error)) {
|
||||
throw new PEAR_Exception(
|
||||
'exception cause must be Exception, ' .
|
||||
'array, or PEAR_Error'
|
||||
);
|
||||
}
|
||||
}
|
||||
$code = $p3;
|
||||
if (is_array($p2) && isset($p2['message'])) {
|
||||
// fix potential problem of passing in a single warning
|
||||
$p2 = array($p2);
|
||||
}
|
||||
$this->cause = $p2;
|
||||
} else {
|
||||
$code = null;
|
||||
$this->cause = null;
|
||||
}
|
||||
parent::__construct($message, $code);
|
||||
$this->signal();
|
||||
}
|
||||
|
||||
/**
|
||||
* Add an exception observer
|
||||
*
|
||||
* @param mixed $callback - A valid php callback, see php func is_callable()
|
||||
* - A PEAR_Exception::OBSERVER_* constant
|
||||
* - An array(const PEAR_Exception::OBSERVER_*,
|
||||
* mixed $options)
|
||||
* @param string $label The name of the observer. Use this if you want
|
||||
* to remove it later with removeObserver()
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public static function addObserver($callback, $label = 'default')
|
||||
{
|
||||
self::$_observers[$label] = $callback;
|
||||
}
|
||||
|
||||
/**
|
||||
* Remove an exception observer
|
||||
*
|
||||
* @param string $label Name of the observer
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public static function removeObserver($label = 'default')
|
||||
{
|
||||
unset(self::$_observers[$label]);
|
||||
}
|
||||
|
||||
/**
|
||||
* Generate a unique ID for an observer
|
||||
*
|
||||
* @return int unique identifier for an observer
|
||||
*/
|
||||
public static function getUniqueId()
|
||||
{
|
||||
return self::$_uniqueid++;
|
||||
}
|
||||
|
||||
/**
|
||||
* Send a signal to all observers
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
protected function signal()
|
||||
{
|
||||
foreach (self::$_observers as $func) {
|
||||
if (is_callable($func)) {
|
||||
call_user_func($func, $this);
|
||||
continue;
|
||||
}
|
||||
settype($func, 'array');
|
||||
switch ($func[0]) {
|
||||
case self::OBSERVER_PRINT :
|
||||
$f = (isset($func[1])) ? $func[1] : '%s';
|
||||
printf($f, $this->getMessage());
|
||||
break;
|
||||
case self::OBSERVER_TRIGGER :
|
||||
$f = (isset($func[1])) ? $func[1] : E_USER_NOTICE;
|
||||
trigger_error($this->getMessage(), $f);
|
||||
break;
|
||||
case self::OBSERVER_DIE :
|
||||
$f = (isset($func[1])) ? $func[1] : '%s';
|
||||
die(printf($f, $this->getMessage()));
|
||||
break;
|
||||
default:
|
||||
trigger_error('invalid observer type', E_USER_WARNING);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Return specific error information that can be used for more detailed
|
||||
* error messages or translation.
|
||||
*
|
||||
* This method may be overridden in child exception classes in order
|
||||
* to add functionality not present in PEAR_Exception and is a placeholder
|
||||
* to define API
|
||||
*
|
||||
* The returned array must be an associative array of parameter => value like so:
|
||||
* <pre>
|
||||
* array('name' => $name, 'context' => array(...))
|
||||
* </pre>
|
||||
*
|
||||
* @return array
|
||||
*/
|
||||
public function getErrorData()
|
||||
{
|
||||
return array();
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the exception that caused this exception to be thrown
|
||||
*
|
||||
* @return Exception|array The context of the exception
|
||||
*/
|
||||
public function getCause()
|
||||
{
|
||||
return $this->cause;
|
||||
}
|
||||
|
||||
/**
|
||||
* Function must be public to call on caused exceptions
|
||||
*
|
||||
* @param array $causes Array that gets filled.
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function getCauseMessage(&$causes)
|
||||
{
|
||||
$trace = $this->getTraceSafe();
|
||||
$cause = array('class' => get_class($this),
|
||||
'message' => $this->message,
|
||||
'file' => 'unknown',
|
||||
'line' => 'unknown');
|
||||
if (isset($trace[0])) {
|
||||
if (isset($trace[0]['file'])) {
|
||||
$cause['file'] = $trace[0]['file'];
|
||||
$cause['line'] = $trace[0]['line'];
|
||||
}
|
||||
}
|
||||
$causes[] = $cause;
|
||||
if ($this->cause instanceof PEAR_Exception) {
|
||||
$this->cause->getCauseMessage($causes);
|
||||
} elseif ($this->cause instanceof Exception) {
|
||||
$causes[] = array('class' => get_class($this->cause),
|
||||
'message' => $this->cause->getMessage(),
|
||||
'file' => $this->cause->getFile(),
|
||||
'line' => $this->cause->getLine());
|
||||
} elseif (class_exists('PEAR_Error') && $this->cause instanceof PEAR_Error) {
|
||||
$causes[] = array('class' => get_class($this->cause),
|
||||
'message' => $this->cause->getMessage(),
|
||||
'file' => 'unknown',
|
||||
'line' => 'unknown');
|
||||
} elseif (is_array($this->cause)) {
|
||||
foreach ($this->cause as $cause) {
|
||||
if ($cause instanceof PEAR_Exception) {
|
||||
$cause->getCauseMessage($causes);
|
||||
} elseif ($cause instanceof Exception) {
|
||||
$causes[] = array('class' => get_class($cause),
|
||||
'message' => $cause->getMessage(),
|
||||
'file' => $cause->getFile(),
|
||||
'line' => $cause->getLine());
|
||||
} elseif (class_exists('PEAR_Error')
|
||||
&& $cause instanceof PEAR_Error
|
||||
) {
|
||||
$causes[] = array('class' => get_class($cause),
|
||||
'message' => $cause->getMessage(),
|
||||
'file' => 'unknown',
|
||||
'line' => 'unknown');
|
||||
} elseif (is_array($cause) && isset($cause['message'])) {
|
||||
// PEAR_ErrorStack warning
|
||||
$causes[] = array(
|
||||
'class' => $cause['package'],
|
||||
'message' => $cause['message'],
|
||||
'file' => isset($cause['context']['file']) ?
|
||||
$cause['context']['file'] :
|
||||
'unknown',
|
||||
'line' => isset($cause['context']['line']) ?
|
||||
$cause['context']['line'] :
|
||||
'unknown',
|
||||
);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Build a backtrace and return it
|
||||
*
|
||||
* @return array Backtrace
|
||||
*/
|
||||
public function getTraceSafe()
|
||||
{
|
||||
if (!isset($this->_trace)) {
|
||||
$this->_trace = $this->getTrace();
|
||||
if (empty($this->_trace)) {
|
||||
$backtrace = debug_backtrace();
|
||||
$this->_trace = array($backtrace[count($backtrace)-1]);
|
||||
}
|
||||
}
|
||||
return $this->_trace;
|
||||
}
|
||||
|
||||
/**
|
||||
* Gets the first class of the backtrace
|
||||
*
|
||||
* @return string Class name
|
||||
*/
|
||||
public function getErrorClass()
|
||||
{
|
||||
$trace = $this->getTraceSafe();
|
||||
return $trace[0]['class'];
|
||||
}
|
||||
|
||||
/**
|
||||
* Gets the first method of the backtrace
|
||||
*
|
||||
* @return string Method/function name
|
||||
*/
|
||||
public function getErrorMethod()
|
||||
{
|
||||
$trace = $this->getTraceSafe();
|
||||
return $trace[0]['function'];
|
||||
}
|
||||
|
||||
/**
|
||||
* Converts the exception to a string (HTML or plain text)
|
||||
*
|
||||
* @return string String representation
|
||||
*
|
||||
* @see toHtml()
|
||||
* @see toText()
|
||||
*/
|
||||
public function __toString()
|
||||
{
|
||||
if (isset($_SERVER['REQUEST_URI'])) {
|
||||
return $this->toHtml();
|
||||
}
|
||||
return $this->toText();
|
||||
}
|
||||
|
||||
/**
|
||||
* Generates a HTML representation of the exception
|
||||
*
|
||||
* @return string HTML code
|
||||
*/
|
||||
public function toHtml()
|
||||
{
|
||||
$trace = $this->getTraceSafe();
|
||||
$causes = array();
|
||||
$this->getCauseMessage($causes);
|
||||
$html = '<table style="border: 1px" cellspacing="0">' . "\n";
|
||||
foreach ($causes as $i => $cause) {
|
||||
$html .= '<tr><td colspan="3" style="background: #ff9999">'
|
||||
. str_repeat('-', $i) . ' <b>' . $cause['class'] . '</b>: '
|
||||
. htmlspecialchars($cause['message'])
|
||||
. ' in <b>' . $cause['file'] . '</b> '
|
||||
. 'on line <b>' . $cause['line'] . '</b>'
|
||||
. "</td></tr>\n";
|
||||
}
|
||||
$html .= '<tr><td colspan="3" style="background-color: #aaaaaa; text-align: center; font-weight: bold;">Exception trace</td></tr>' . "\n"
|
||||
. '<tr><td style="text-align: center; background: #cccccc; width:20px; font-weight: bold;">#</td>'
|
||||
. '<td style="text-align: center; background: #cccccc; font-weight: bold;">Function</td>'
|
||||
. '<td style="text-align: center; background: #cccccc; font-weight: bold;">Location</td></tr>' . "\n";
|
||||
|
||||
foreach ($trace as $k => $v) {
|
||||
$html .= '<tr><td style="text-align: center;">' . $k . '</td>'
|
||||
. '<td>';
|
||||
if (!empty($v['class'])) {
|
||||
$html .= $v['class'] . $v['type'];
|
||||
}
|
||||
$html .= $v['function'];
|
||||
$args = array();
|
||||
if (!empty($v['args'])) {
|
||||
foreach ($v['args'] as $arg) {
|
||||
if (is_null($arg)) {
|
||||
$args[] = 'null';
|
||||
} else if (is_array($arg)) {
|
||||
$args[] = 'Array';
|
||||
} else if (is_object($arg)) {
|
||||
$args[] = 'Object('.get_class($arg).')';
|
||||
} else if (is_bool($arg)) {
|
||||
$args[] = $arg ? 'true' : 'false';
|
||||
} else if (is_int($arg) || is_double($arg)) {
|
||||
$args[] = $arg;
|
||||
} else {
|
||||
$arg = (string)$arg;
|
||||
$str = htmlspecialchars(substr($arg, 0, 16));
|
||||
if (strlen($arg) > 16) {
|
||||
$str .= '…';
|
||||
}
|
||||
$args[] = "'" . $str . "'";
|
||||
}
|
||||
}
|
||||
}
|
||||
$html .= '(' . implode(', ', $args) . ')'
|
||||
. '</td>'
|
||||
. '<td>' . (isset($v['file']) ? $v['file'] : 'unknown')
|
||||
. ':' . (isset($v['line']) ? $v['line'] : 'unknown')
|
||||
. '</td></tr>' . "\n";
|
||||
}
|
||||
$html .= '<tr><td style="text-align: center;">' . ($k+1) . '</td>'
|
||||
. '<td>{main}</td>'
|
||||
. '<td> </td></tr>' . "\n"
|
||||
. '</table>';
|
||||
return $html;
|
||||
}
|
||||
|
||||
/**
|
||||
* Generates text representation of the exception and stack trace
|
||||
*
|
||||
* @return string
|
||||
*/
|
||||
public function toText()
|
||||
{
|
||||
$causes = array();
|
||||
$this->getCauseMessage($causes);
|
||||
$causeMsg = '';
|
||||
foreach ($causes as $i => $cause) {
|
||||
$causeMsg .= str_repeat(' ', $i) . $cause['class'] . ': '
|
||||
. $cause['message'] . ' in ' . $cause['file']
|
||||
. ' on line ' . $cause['line'] . "\n";
|
||||
}
|
||||
return $causeMsg . $this->getTraceAsString();
|
||||
}
|
||||
}
|
||||
?>
|
43
sites/all/modules/civicrm/vendor/pear/pear_exception/composer.json
vendored
Normal file
43
sites/all/modules/civicrm/vendor/pear/pear_exception/composer.json
vendored
Normal file
|
@ -0,0 +1,43 @@
|
|||
{
|
||||
"name": "pear/pear_exception",
|
||||
"description": "The PEAR Exception base class.",
|
||||
"type": "class",
|
||||
"keywords": [
|
||||
"exception"
|
||||
],
|
||||
"homepage": "https://github.com/pear/PEAR_Exception",
|
||||
"license": "BSD-2-Clause",
|
||||
"authors": [
|
||||
{
|
||||
"name": "Helgi Thormar",
|
||||
"email": "dufuz@php.net"
|
||||
},
|
||||
{
|
||||
"name": "Greg Beaver",
|
||||
"email": "cellog@php.net"
|
||||
}
|
||||
],
|
||||
"require": {
|
||||
"php": ">=4.4.0"
|
||||
},
|
||||
"autoload": {
|
||||
"psr-0": {
|
||||
"PEAR": ""
|
||||
}
|
||||
},
|
||||
"extra": {
|
||||
"branch-alias": {
|
||||
"dev-master": "1.0.x-dev"
|
||||
}
|
||||
},
|
||||
"include-path": [
|
||||
"."
|
||||
],
|
||||
"support": {
|
||||
"issues": "http://pear.php.net/bugs/search.php?cmd=display&package_name[]=PEAR_Exception",
|
||||
"source": "https://github.com/pear/PEAR_Exception"
|
||||
},
|
||||
"require-dev": {
|
||||
"phpunit/phpunit": "*"
|
||||
}
|
||||
}
|
120
sites/all/modules/civicrm/vendor/pear/pear_exception/package.xml
vendored
Normal file
120
sites/all/modules/civicrm/vendor/pear/pear_exception/package.xml
vendored
Normal file
|
@ -0,0 +1,120 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<package packagerversion="1.9.4" version="2.0"
|
||||
xmlns="http://pear.php.net/dtd/package-2.0"
|
||||
xmlns:tasks="http://pear.php.net/dtd/tasks-1.0"
|
||||
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
||||
xsi:schemaLocation="http://pear.php.net/dtd/tasks-1.0 http://pear.php.net/dtd/tasks-1.0.xsd http://pear.php.net/dtd/package-2.0 http://pear.php.net/dtd/package-2.0.xsd"
|
||||
>
|
||||
<name>PEAR_Exception</name>
|
||||
<channel>pear.php.net</channel>
|
||||
<summary>The PEAR Exception base class</summary>
|
||||
<description>PEAR_Exception PHP5 error handling mechanism</description>
|
||||
|
||||
<lead>
|
||||
<name>Christian Weiske</name>
|
||||
<user>cweiske</user>
|
||||
<email>cweiske@php.net</email>
|
||||
<active>yes</active>
|
||||
</lead>
|
||||
<lead>
|
||||
<name>Helgi Thormar</name>
|
||||
<user>dufuz</user>
|
||||
<email>dufuz@php.net</email>
|
||||
<active>no</active>
|
||||
</lead>
|
||||
<developer>
|
||||
<name>Greg Beaver</name>
|
||||
<user>cellog</user>
|
||||
<email>cellog@php.net</email>
|
||||
<active>no</active>
|
||||
</developer>
|
||||
|
||||
<date>2015-02-10</date>
|
||||
<time>21:02:23</time>
|
||||
<version>
|
||||
<release>1.0.0</release>
|
||||
<api>1.0.0</api>
|
||||
</version>
|
||||
<stability>
|
||||
<release>stable</release>
|
||||
<api>stable</api>
|
||||
</stability>
|
||||
<license uri="http://opensource.org/licenses/bsd-license.php">New BSD License</license>
|
||||
<notes>
|
||||
This package was split out from the PEAR package.
|
||||
If you use PEAR_Exception in your package and use nothing from the PEAR package
|
||||
then it's better to depend on just PEAR_Exception.
|
||||
</notes>
|
||||
<contents>
|
||||
<dir name="/">
|
||||
<file name="/PEAR/Exception.php" role="php">
|
||||
<tasks:replace from="@package_version@" to="version" type="package-info" />
|
||||
</file>
|
||||
<dir name="tests">
|
||||
<dir name="PEAR">
|
||||
<file name="ExceptionTest.php" role="test"/>
|
||||
</dir>
|
||||
</dir>
|
||||
</dir>
|
||||
</contents>
|
||||
|
||||
<dependencies>
|
||||
<required>
|
||||
<php>
|
||||
<min>5.4.0</min>
|
||||
</php>
|
||||
<pearinstaller>
|
||||
<min>1.9.5</min>
|
||||
</pearinstaller>
|
||||
</required>
|
||||
</dependencies>
|
||||
|
||||
<phprelease />
|
||||
|
||||
<changelog>
|
||||
<release>
|
||||
<version>
|
||||
<release>1.0.0</release>
|
||||
<api>1.0.0</api>
|
||||
</version>
|
||||
<stability>
|
||||
<release>stable</release>
|
||||
<api>stable</api>
|
||||
</stability>
|
||||
<date>2015-02-10</date>
|
||||
<license uri="http://opensource.org/licenses/bsd-license.php">New BSD License</license>
|
||||
<notes>Release stable version</notes>
|
||||
</release>
|
||||
|
||||
<release>
|
||||
<version>
|
||||
<release>1.0.0beta2</release>
|
||||
<api>1.0.0</api>
|
||||
</version>
|
||||
<stability>
|
||||
<release>beta</release>
|
||||
<api>stable</api>
|
||||
</stability>
|
||||
<date>2014-02-21</date>
|
||||
<license uri="http://opensource.org/licenses/bsd-license.php">New BSD License</license>
|
||||
<notes>Bump up PEAR dependency.</notes>
|
||||
</release>
|
||||
|
||||
<release>
|
||||
<version>
|
||||
<release>1.0.0beta1</release>
|
||||
<api>1.0.0</api>
|
||||
</version>
|
||||
<stability>
|
||||
<release>beta</release>
|
||||
<api>stable</api>
|
||||
</stability>
|
||||
<date>2012-05-10</date>
|
||||
<license uri="http://opensource.org/licenses/bsd-license.php">New BSD License</license>
|
||||
<notes>
|
||||
This packge was split out from the PEAR package. If you use PEAR_Exception in your package
|
||||
and use nothing from the PEAR package then it's better to depend on just PEAR_Exception.
|
||||
</notes>
|
||||
</release>
|
||||
</changelog>
|
||||
</package>
|
4
sites/all/modules/civicrm/vendor/pear/validate_finance_creditcard/.gitignore
vendored
Normal file
4
sites/all/modules/civicrm/vendor/pear/validate_finance_creditcard/.gitignore
vendored
Normal file
|
@ -0,0 +1,4 @@
|
|||
# composer related
|
||||
composer.lock
|
||||
composer.phar
|
||||
vendor
|
7
sites/all/modules/civicrm/vendor/pear/validate_finance_creditcard/.travis.yml
vendored
Normal file
7
sites/all/modules/civicrm/vendor/pear/validate_finance_creditcard/.travis.yml
vendored
Normal file
|
@ -0,0 +1,7 @@
|
|||
language: php
|
||||
install:
|
||||
- pear install package.xml
|
||||
php:
|
||||
- 5.4
|
||||
sudo: false
|
||||
script: phpunit tests/
|
22
sites/all/modules/civicrm/vendor/pear/validate_finance_creditcard/LICENSE
vendored
Normal file
22
sites/all/modules/civicrm/vendor/pear/validate_finance_creditcard/LICENSE
vendored
Normal file
|
@ -0,0 +1,22 @@
|
|||
Redistribution and use in source and binary forms, with or without modification
|
||||
, are permitted provided that the following conditions are met:
|
||||
|
||||
1. Redistributions of source code must retain the above copyright notice, th
|
||||
is list of conditions and the following disclaimer.
|
||||
|
||||
2. Redistributions in binary form must reproduce the above copyright notice,
|
||||
this list of conditions and the following disclaimer in the documentation and/
|
||||
or other materials provided with the distribution.
|
||||
|
||||
3. The name of the author may not be used to endorse or promote products derived
|
||||
from this software without specific prior written permission.
|
||||
|
||||
THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED WA
|
||||
RRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABIL
|
||||
ITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
|
||||
AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR C
|
||||
ONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
|
||||
GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOW
|
||||
EVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILI
|
||||
TY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE U
|
||||
SE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
15
sites/all/modules/civicrm/vendor/pear/validate_finance_creditcard/README.md
vendored
Normal file
15
sites/all/modules/civicrm/vendor/pear/validate_finance_creditcard/README.md
vendored
Normal file
|
@ -0,0 +1,15 @@
|
|||
Validate_Finance_CreditCard
|
||||
===========================
|
||||
|
||||
Validation class for credit cards. Validates card numbers according to the [Luhn algorithm](http://en.wikipedia.org/wiki/Luhn_algorithm) and according to card type. Also validates CVV/CID/CSC numbers according to card type.
|
||||
|
||||
Supported card types are:
|
||||
* MasterCard
|
||||
* Visa
|
||||
* American Express
|
||||
* Diners Club
|
||||
* Carte Blanche
|
||||
* Discover
|
||||
* JCB
|
||||
* EnRoute
|
||||
* Eurocard
|
260
sites/all/modules/civicrm/vendor/pear/validate_finance_creditcard/Validate/Finance/CreditCard.php
vendored
Normal file
260
sites/all/modules/civicrm/vendor/pear/validate_finance_creditcard/Validate/Finance/CreditCard.php
vendored
Normal file
|
@ -0,0 +1,260 @@
|
|||
<?php
|
||||
|
||||
/* vim: set expandtab tabstop=4 shiftwidth=4: */
|
||||
|
||||
/**
|
||||
* Validation methods for credit card related data
|
||||
*
|
||||
* PHP Versions 4 and 5
|
||||
*
|
||||
* This source file is subject to the New BSD license, That is bundled
|
||||
* with this package in the file LICENSE, and is available through
|
||||
* the world-wide-web at
|
||||
* http://www.opensource.org/licenses/bsd-license.php
|
||||
* If you did not receive a copy of the new BSDlicense and are unable
|
||||
* to obtain it through the world-wide-web, please send a note to
|
||||
* pajoye@php.net so we can mail you a copy immediately.
|
||||
*
|
||||
* @category Validate
|
||||
* @package Validate_Finance_CreditCard
|
||||
* @author Stefan Neufeind <pear.neufeind@speedpartner.de>
|
||||
* @author Philippe Jausions <Philippe.Jausions@11abacus.com>
|
||||
* @copyright 1997-2005 Stefan Neufeind
|
||||
* @license http://www.opensource.org/licenses/bsd-license.php New BSD License
|
||||
* @version CVS: $Id$
|
||||
* @link http://pear.php.net/package/Validate_Finance_CreditCard
|
||||
*/
|
||||
|
||||
/**
|
||||
* Credit card related information validation class
|
||||
*
|
||||
* This class provides methods to validate:
|
||||
* - Credit card number
|
||||
* - Card security code
|
||||
* - Card type (i.e. Visa, Mastercard...)
|
||||
*
|
||||
* The methods only check the format of the data. For instance
|
||||
* the package does NOT check if a card is a legitimate card registered
|
||||
* with a card issuer, or if the card is reported stolen, etc...
|
||||
*
|
||||
* @category Validate
|
||||
* @package Validate_Finance_CreditCard
|
||||
* @author Philippe Jausions <Philippe.Jausions@11abacus.com>
|
||||
* @author Ondrej Jombik <nepto@pobox.sk>
|
||||
* @copyright 1997-2005 Stefan Neufeind
|
||||
* @license http://www.opensource.org/licenses/bsd-license.php New BSD License
|
||||
* @version Release: @package_version@
|
||||
* @link http://pear.php.net/package/Validate_Finance_CreditCard
|
||||
*/
|
||||
class Validate_Finance_CreditCard
|
||||
{
|
||||
/**
|
||||
* Validates a number according to Luhn check algorithm
|
||||
*
|
||||
* This function checks given number according Luhn check
|
||||
* algorithm. It is published on several places. See links for details.
|
||||
*
|
||||
* @param string $number number to check
|
||||
*
|
||||
* @link http://www.webopedia.com/TERM/L/Luhn_formula.html
|
||||
* @link http://www.merriampark.com/anatomycc.htm
|
||||
* @link http://hysteria.sk/prielom/prielom-12.html#3 (Slovak language)
|
||||
* @link http://www.speech.cs.cmu.edu/~sburke/pub/luhn_lib.html (Perl lib)
|
||||
*
|
||||
* @return bool TRUE if number is valid, FALSE otherwise
|
||||
* @access public
|
||||
* @static
|
||||
*/
|
||||
public static function Luhn($number)
|
||||
{
|
||||
$len_number = strlen($number);
|
||||
$sum = 0;
|
||||
for ($k = $len_number % 2; $k < $len_number; $k += 2) {
|
||||
if ((intval($number[$k]) * 2) > 9) {
|
||||
$sum += (intval($number[$k]) * 2) - 9;
|
||||
} else {
|
||||
$sum += intval($number[$k]) * 2;
|
||||
}
|
||||
}
|
||||
for ($k = ($len_number % 2) ^ 1; $k < $len_number; $k += 2) {
|
||||
$sum += intval($number[$k]);
|
||||
}
|
||||
return ($sum % 10) ? false : true;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Validates a credit card number
|
||||
*
|
||||
* If a type is passed, the card will be checked against it.
|
||||
* This method only checks the number locally. No banks or payment
|
||||
* gateways are involved.
|
||||
* This method doesn't guarantee that the card is legitimate. It merely
|
||||
* checks the card number passes a mathematical algorithm.
|
||||
*
|
||||
* @param string $creditCard number (spaces and dashes tolerated)
|
||||
* @param string $cardType type/brand of card (case insensitive)
|
||||
* "MasterCard", "Visa", "AMEX", "AmericanExpress",
|
||||
* "American Express", "Diners", "DinersClub", "Diners Club",
|
||||
* "CarteBlanche", "Carte Blanche", "Discover", "JCB",
|
||||
* "EnRoute", "Eurocard", "Eurocard/MasterCard".
|
||||
*
|
||||
* @return bool TRUE if number is valid, FALSE otherwise
|
||||
* @access public
|
||||
* @static
|
||||
* @see Luhn()
|
||||
*/
|
||||
public static function number($creditCard, $cardType = null)
|
||||
{
|
||||
$cc = str_replace(array('-', ' '), '', $creditCard);
|
||||
if ((($len = strlen($cc)) < 13)
|
||||
|| (strspn($cc, '0123456789') != $len)
|
||||
) {
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
// Only apply the Luhn algorithm for cards other than enRoute
|
||||
// So check if we have a enRoute card now
|
||||
if ((strlen($cc) != 15)
|
||||
|| ((substr($cc, 0, 4) != '2014')
|
||||
&& (substr($cc, 0, 4) != '2149'))
|
||||
) {
|
||||
|
||||
if (!self::Luhn($cc)) {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
if (is_string($cardType)) {
|
||||
return self::type($cc, $cardType);
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
/**
|
||||
* Validates the credit card number against a type
|
||||
*
|
||||
* This method only checks for the type marker. It doesn't
|
||||
* validate the card number. Some card "brands" share the same
|
||||
* numbering system, so checking the card type against any of the
|
||||
* sister brand will return the same result.
|
||||
*
|
||||
* For instance, if a $card is a MasterCard, type($card, 'EuroCard')
|
||||
* will also return true.
|
||||
*
|
||||
* @param string $creditCard number (spaces and dashes tolerated)
|
||||
* @param string $cardType type/brand of card (case insensitive)
|
||||
* "MasterCard", "Visa", "AMEX", "AmericanExpress",
|
||||
* "American Express", "Diners", "DinersClub", "Diners Club",
|
||||
* "CarteBlanche", "Carte Blanche", "Discover", "JCB",
|
||||
* "EnRoute", "Eurocard", "Eurocard/MasterCard".
|
||||
*
|
||||
* @return bool TRUE is type matches, FALSE otherwise
|
||||
* @access public
|
||||
* @static
|
||||
* @link http://www.beachnet.com/~hstiles/cardtype.html
|
||||
*/
|
||||
public static function type($creditCard, $cardType)
|
||||
{
|
||||
switch (strtoupper($cardType)) {
|
||||
case 'MASTERCARD':
|
||||
case 'EUROCARD':
|
||||
case 'EUROCARD/MASTERCARD':
|
||||
$regex = '^(5[1-5]\d{4}|677189)\d{10}$|^2(?:2(?:2[1-9]|[3-9]\d)|[3-6]\d\d|7(?:[01]\d|20))\d{12}';
|
||||
break;
|
||||
case 'VISA':
|
||||
$regex = '4([0-9]{12}|[0-9]{15})';
|
||||
break;
|
||||
case 'AMEX':
|
||||
case 'AMERICANEXPRESS':
|
||||
case 'AMERICAN EXPRESS':
|
||||
$regex = '3[47][0-9]{13}';
|
||||
break;
|
||||
case 'DINERS':
|
||||
case 'DINERSCLUB':
|
||||
case 'DINERS CLUB':
|
||||
case 'CARTEBLANCHE':
|
||||
case 'CARTE BLANCHE':
|
||||
$regex = '3(0[0-5][0-9]{11}|[68][0-9]{12})';
|
||||
break;
|
||||
case 'DISCOVER':
|
||||
$regex = '6011[0-9]{12}';
|
||||
break;
|
||||
case 'JCB':
|
||||
$regex = '(3[0-9]{15}|(2131|1800)[0-9]{11})';
|
||||
break;
|
||||
case 'ENROUTE':
|
||||
$regex = '2(014|149)[0-9]{11}';
|
||||
break;
|
||||
default:
|
||||
return false;
|
||||
}
|
||||
$regex = '/^' . $regex . '$/';
|
||||
|
||||
$cc = str_replace(array('-', ' '), '', $creditCard);
|
||||
return (bool)preg_match($regex, $cc);
|
||||
}
|
||||
|
||||
/**
|
||||
* Validates a card verification value format
|
||||
*
|
||||
* This method only checks for the format. It doesn't
|
||||
* validate that the value is the one on the card.
|
||||
*
|
||||
* CVV is also known as
|
||||
* - CVV2 Card Validation Value 2 (Visa)
|
||||
* - CVC Card Validation Code (MasterCard)
|
||||
* - CID Card Identification (American Express and Discover)
|
||||
* - CIN Card Identification Number
|
||||
* - CSC Card Security Code
|
||||
*
|
||||
* Important information regarding CVV:
|
||||
* If you happen to have to store credit card information, you must
|
||||
* NOT retain the CVV after transaction is complete. Usually this
|
||||
* means you cannot store it in a database, not even in an encrypted
|
||||
* form.
|
||||
*
|
||||
* This method returns FALSE for card types that don't support CVV.
|
||||
*
|
||||
* @param string $cvv value to verify
|
||||
* @param string $cardType type/brand of card (case insensitive)
|
||||
* "MasterCard", "Visa", "AMEX", "AmericanExpress",
|
||||
* "American Express", "Discover", "Eurocard/MasterCard",
|
||||
* "Eurocard"
|
||||
*
|
||||
* @return bool TRUE if format is correct, FALSE otherwise
|
||||
* @access public
|
||||
* @static
|
||||
*/
|
||||
public static function cvv($cvv, $cardType)
|
||||
{
|
||||
switch (strtoupper($cardType)) {
|
||||
case 'MASTERCARD':
|
||||
case 'EUROCARD':
|
||||
case 'EUROCARD/MASTERCARD':
|
||||
case 'VISA':
|
||||
case 'DISCOVER':
|
||||
$digits = 3;
|
||||
break;
|
||||
case 'AMEX':
|
||||
case 'AMERICANEXPRESS':
|
||||
case 'AMERICAN EXPRESS':
|
||||
$digits = 4;
|
||||
break;
|
||||
default:
|
||||
return false;
|
||||
}
|
||||
|
||||
if ((strlen($cvv) == $digits)
|
||||
&& (strspn($cvv, '0123456789') == $digits)
|
||||
) {
|
||||
return true;
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
?>
|
32
sites/all/modules/civicrm/vendor/pear/validate_finance_creditcard/composer.json
vendored
Normal file
32
sites/all/modules/civicrm/vendor/pear/validate_finance_creditcard/composer.json
vendored
Normal file
|
@ -0,0 +1,32 @@
|
|||
{
|
||||
"authors": [
|
||||
{
|
||||
"email": "Philippe.Jausions@11abacus.com",
|
||||
"name": "Philippe Jausions",
|
||||
"role": "Lead"
|
||||
}
|
||||
],
|
||||
"autoload": {
|
||||
"psr-0": {
|
||||
"Validate": "./"
|
||||
}
|
||||
},
|
||||
"description": "Validation class for credit cards.",
|
||||
"include-path": [
|
||||
"./"
|
||||
],
|
||||
"license": "New BSD",
|
||||
"name": "pear/validate_finance_creditcard",
|
||||
"support": {
|
||||
"issues": "http://pear.php.net/bugs/search.php?cmd=display&package_name[]=Validate_Finance_CreditCard",
|
||||
"source": "https://github.com/pear/Validate_Finance_CreditCard"
|
||||
},
|
||||
"type": "library",
|
||||
"require": {
|
||||
"php": ">=5.2.1",
|
||||
"pear/pear_exception": "*"
|
||||
},
|
||||
"require-dev": {
|
||||
"phpunit/phpunit": "*"
|
||||
}
|
||||
}
|
111
sites/all/modules/civicrm/vendor/pear/validate_finance_creditcard/package.xml
vendored
Normal file
111
sites/all/modules/civicrm/vendor/pear/validate_finance_creditcard/package.xml
vendored
Normal file
|
@ -0,0 +1,111 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<package packagerversion="1.9.0" version="2.0" xmlns="http://pear.php.net/dtd/package-2.0" xmlns:tasks="http://pear.php.net/dtd/tasks-1.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://pear.php.net/dtd/tasks-1.0
|
||||
http://pear.php.net/dtd/tasks-1.0.xsd
|
||||
http://pear.php.net/dtd/package-2.0
|
||||
http://pear.php.net/dtd/package-2.0.xsd">
|
||||
<name>Validate_Finance_CreditCard</name>
|
||||
<channel>pear.php.net</channel>
|
||||
<summary>Validation class for Credit Cards</summary>
|
||||
<description>Package to validate Credit Card numbers and types.
|
||||
</description>
|
||||
<lead>
|
||||
<name>Philippe Jausions</name>
|
||||
<user>jausions</user>
|
||||
<email>Philippe.Jausions@11abacus.com</email>
|
||||
<active>yes</active>
|
||||
</lead>
|
||||
<date>2016-01-29</date>
|
||||
<time>00:34:33</time>
|
||||
<version>
|
||||
<release>0.6.0</release>
|
||||
<api>0.6.0</api>
|
||||
</version>
|
||||
<stability>
|
||||
<release>alpha</release>
|
||||
<api>alpha</api>
|
||||
</stability>
|
||||
<license>New BSD</license>
|
||||
<notes>
|
||||
- Update to use PHP 5 method syntax. Allows use in PHP 7 environments.
|
||||
</notes>
|
||||
<contents>
|
||||
<dir name="/">
|
||||
<dir name="tests">
|
||||
<file name="credit_card.phpt" role="test" />
|
||||
</dir> <!-- /tests -->
|
||||
<dir name="docs">
|
||||
<file name="sample_multiple.php" role="doc" />
|
||||
</dir> <!-- /docs -->
|
||||
<dir name="Validate">
|
||||
<dir name="Finance">
|
||||
<file name="CreditCard.php" role="php" />
|
||||
</dir> <!-- /Validate/Finance -->
|
||||
</dir> <!-- /Validate -->
|
||||
<file name="LICENSE" role="doc" />
|
||||
</dir> <!-- / -->
|
||||
</contents>
|
||||
<dependencies>
|
||||
<required>
|
||||
<php>
|
||||
<min>5.2.1</min>
|
||||
</php>
|
||||
<pearinstaller>
|
||||
<min>1.4.0b1</min>
|
||||
</pearinstaller>
|
||||
<extension>
|
||||
<name>pcre</name>
|
||||
</extension>
|
||||
</required>
|
||||
</dependencies>
|
||||
<phprelease />
|
||||
<changelog>
|
||||
<release>
|
||||
<version>
|
||||
<release>0.5.2</release>
|
||||
<api>0.5.2</api>
|
||||
</version>
|
||||
<stability>
|
||||
<release>alpha</release>
|
||||
<api>alpha</api>
|
||||
</stability>
|
||||
<license>New BSD</license>
|
||||
<notes>
|
||||
- Switch to the new BSD License
|
||||
(see http://www.opensource.org/licenses/bsd-license.php)
|
||||
</notes>
|
||||
</release>
|
||||
<release>
|
||||
<version>
|
||||
<release>0.5.1</release>
|
||||
<api>0.5.1</api>
|
||||
</version>
|
||||
<stability>
|
||||
<release>alpha</release>
|
||||
<api>alpha</api>
|
||||
</stability>
|
||||
<date>2005-07-20</date>
|
||||
<license>New BSD</license>
|
||||
<notes>
|
||||
- Added support for Eurocard/Mastercard. Can be referenced by "EuroCard" or "EuroCard/MasterCard" (case-insensitive)
|
||||
</notes>
|
||||
</release>
|
||||
<release>
|
||||
<version>
|
||||
<release>0.5.0</release>
|
||||
<api>0.5.0</api>
|
||||
</version>
|
||||
<stability>
|
||||
<release>alpha</release>
|
||||
<api>alpha</api>
|
||||
</stability>
|
||||
<date>2005-05-20</date>
|
||||
<license>New BSD</license>
|
||||
<notes>
|
||||
- Split from Validate into independent package
|
||||
- BC break: creditCard() method now named number() and creditCardType() method is now named type()
|
||||
- Request #2194 Improved CreditCard validation with CreditCard Type check, patch by Philippe
|
||||
- Added a cvv() method to check card verification value (aka CVV2, CVC, CID, CSC, CIN)
|
||||
</notes>
|
||||
</release>
|
||||
</changelog>
|
||||
</package>
|
Loading…
Add table
Add a link
Reference in a new issue