diff options
Diffstat (limited to 'includes/pear/Auth/Container/SAP.php')
| -rw-r--r-- | includes/pear/Auth/Container/SAP.php | 179 |
1 files changed, 179 insertions, 0 deletions
diff --git a/includes/pear/Auth/Container/SAP.php b/includes/pear/Auth/Container/SAP.php new file mode 100644 index 0000000..58ce168 --- /dev/null +++ b/includes/pear/Auth/Container/SAP.php @@ -0,0 +1,179 @@ +<?php +/* vim: set expandtab tabstop=4 shiftwidth=4 softtabstop=4 foldmethod=marker: */ + +/** + * Storage driver for use against a SAP system using the SAPRFC PHP extension. + * + * Requires the SAPRFC ext available at http://saprfc.sourceforge.net/ + * + * PHP version 5 + * + * LICENSE: This source file is subject to version 3.01 of the PHP license + * that is available through the world-wide-web at the following URI: + * http://www.php.net/license/3_01.txt. If you did not receive a copy of + * the PHP License and are unable to obtain it through the web, please + * send a note to license@php.net so we can mail you a copy immediately. + * + * @category Authentication + * @package Auth + * @author Stoyan Stefanov <ssttoo@gmail.com> + * @author Adam Ashley <aashley@php.net> + * @copyright 2001-2006 The PHP Group + * @license http://www.php.net/license/3_01.txt PHP License 3.01 + * @version CVS: $Id: SAP.php 302205 2010-08-14 14:08:08Z clockwerx $ + * @link http://pear.php.net/package/Auth + * @since File available since Release 1.4.0 + */ + +/** + * Include Auth_Container base class + */ +require_once 'Auth/Container.php'; +/** + * Include PEAR for error handling + */ +require_once 'PEAR.php'; + +/** + * Performs authentication against a SAP system using the SAPRFC PHP extension. + * + * When the option GETSSO2 is TRUE (default) + * the Single Sign-On (SSO) ticket is retrieved + * and stored as an Auth attribute called 'sap' + * in order to be reused for consecutive connections. + * + * @category Authentication + * @package Auth + * @author Stoyan Stefanov <ssttoo@gmail.com> + * @author Adam Ashley <aashley@php.net> + * @copyright 2001-2006 The PHP Group + * @license http://www.php.net/license/3_01.txt PHP License 3.01 + * @version Release: @package_version@ File: $Revision: 302205 $ + * @since Class available since Release 1.4.0 + */ +class Auth_Container_SAP extends Auth_Container { + + // {{{ properties + + /** + * @var array Default options + */ + var $options = array( + 'CLIENT' => '000', + 'LANG' => 'EN', + 'GETSSO2' => true, + ); + + // }}} + // {{{ Auth_Container_SAP() + + /** + * Class constructor. Checks that required options + * are present and that the SAPRFC extension is loaded + * + * Options that can be passed and their defaults: + * <pre> + * array( + * 'ASHOST' => "", + * 'SYSNR' => "", + * 'CLIENT' => "000", + * 'GWHOST' =>"", + * 'GWSERV' =>"", + * 'MSHOST' =>"", + * 'R3NAME' =>"", + * 'GROUP' =>"", + * 'LANG' =>"EN", + * 'TRACE' =>"", + * 'GETSSO2'=> true + * ) + * </pre> + * + * @param array array of options. + * @return void + */ + function Auth_Container_SAP($options) + { + $saprfc_loaded = PEAR::loadExtension('saprfc'); + if (!$saprfc_loaded) { + return PEAR::raiseError('Cannot use SAP authentication, ' + .'SAPRFC extension not loaded!'); + } + if (empty($options['R3NAME']) && empty($options['ASHOST'])) { + return PEAR::raiseError('R3NAME or ASHOST required for authentication'); + } + $this->options = array_merge($this->options, $options); + } + + // }}} + // {{{ fetchData() + + /** + * Performs username and password check + * + * @param string Username + * @param string Password + * @return boolean TRUE on success (valid user), FALSE otherwise + */ + function fetchData($username, $password) + { + $this->log('Auth_Container_SAP::fetchData() called.', AUTH_LOG_DEBUG); + $connection_options = $this->options; + $connection_options['USER'] = $username; + $connection_options['PASSWD'] = $password; + $rfc = saprfc_open($connection_options); + if (!$rfc) { + $message = "Couldn't connect to the SAP system."; + $error = $this->getError(); + if ($error['message']) { + $message .= ': ' . $error['message']; + } + PEAR::raiseError($message, null, null, null, @$error['all']); + return false; + } else { + if (!empty($this->options['GETSSO2'])) { + $this->log('Attempting to retrieve SSO2 ticket.', AUTH_LOG_DEBUG); + if ($ticket = @saprfc_get_ticket($rfc)) { + $this->options['MYSAPSSO2'] = $ticket; + unset($this->options['GETSSO2']); + $this->_auth_obj->setAuthData('sap', $this->options); + } else { + PEAR::raiseError("SSO ticket retrieval failed"); + } + } + @saprfc_close($rfc); + return true; + } + + } + + // }}} + // {{{ getError() + + /** + * Retrieves the last error from the SAP connection + * and returns it as an array. + * + * @return array Array of error information + */ + function getError() + { + + $error = array(); + $sap_error = saprfc_error(); + if (empty($err)) { + return $error; + } + $err = explode("n", $sap_error); + foreach ($err AS $line) { + $item = explode(':', $line); + $error[strtolower(trim($item[0]))] = trim($item[1]); + } + $error['all'] = $sap_error; + return $error; + } + + // }}} + +} + +?> |
