diff --git a/htdocs/sql/libraries/sqlvalidator.class.php b/htdocs/sql/libraries/sqlvalidator.class.php new file mode 100755 --- /dev/null +++ b/htdocs/sql/libraries/sqlvalidator.class.php @@ -0,0 +1,412 @@ + +* http://www.orbis-terrarum.net/?l=people.robbat2 +* +* All data is transported over HTTP-SOAP +* And uses the PEAR SOAP Module +* +* Install instructions for PEAR SOAP +* Make sure you have a really recent PHP with PEAR support +* run this: "pear install Mail_Mime Net_DIME SOAP" +* +* If you got this file from somewhere other than phpMyAdmin +* please be aware that the latest copy will always be in the +* phpMyAdmin subversion tree as +* $HeadURL: https://phpmyadmin.svn.sourceforge.net/svnroot/phpmyadmin/trunk/phpMyAdmin/libraries/sqlvalidator.class.php $ +* +* This code that also used to depend on the PHP overload module, but that has been +* removed now. +* +* @access public +* +* @author Robin Johnson +* +* @version $Id: sqlvalidator.class.php 11335 2008-06-21 14:01:54Z lem9 $ +*/ +if (! defined('PHPMYADMIN')) { + exit; +} + +@include_once 'SOAP/Client.php'; + +if (!function_exists('class_exists') || !class_exists('SOAP_Client')) { + $GLOBALS['sqlvalidator_error'] = TRUE; +} else { + // Ok, we have SOAP Support, so let's use it! + + class PMA_SQLValidator { + + var $url; + var $service_name; + var $wsdl; + var $output_type; + + var $username; + var $password; + var $calling_program; + var $calling_program_version; + var $target_dbms; + var $target_dbms_version; + var $connectionTechnology; + var $connection_technology_version; + var $interactive; + + var $service_link = null; + var $session_data = null; + + + /** + * Private functions - You don't need to mess with these + */ + + /** + * Service opening + * + * @param string URL of Mimer SQL Validator WSDL file + * + * @return object Object to use + * + * @access private + */ + function _openService($url) + { + $obj = new SOAP_Client($url, TRUE); + return $obj; + } // end of the "openService()" function + + + /** + * Service initializer to connect to server + * + * @param object Service object + * @param string Username + * @param string Password + * @param string Name of calling program + * @param string Version of calling program + * @param string Target DBMS + * @param string Version of target DBMS + * @param string Connection Technology + * @param string version of Connection Technology + * @param integer boolean of 1/0 to specify if we are an interactive system + * + * @return object stdClass return object with data + * + * @access private + */ + function _openSession($obj, $username, $password, + $calling_program, $calling_program_version, + $target_dbms, $target_dbms_version, + $connection_technology, $connection_technology_version, + $interactive) + { + $use_array = array("a_userName" => $username, "a_password" => $password, "a_callingProgram" => $calling_program, "a_callingProgramVersion" => $calling_program_version, "a_targetDbms" => $target_dbms, "a_targetDbmsVersion" => $target_dbms_version, "a_connectionTechnology" => $connection_technology, "a_connectionTechnologyVersion" => $connection_technology_version, "a_interactive" => $interactive); + $ret = $obj->call("openSession", $use_array); + + // This is the old version that needed the overload extension + /* $ret = $obj->openSession($username, $password, + $calling_program, $calling_program_version, + $target_dbms, $target_dbms_version, + $connection_technology, $connection_technology_version, + $interactive); */ + + return $ret; + } // end of the "_openSession()" function + + + /** + * Validator sytem call + * + * @param object Service object + * @param object Session object + * @param string SQL Query to validate + * @param string Data return type + * + * @return object stClass return with data + * + * @access private + */ + function _validateSQL($obj, $session, $sql, $method) + { + $use_array = array("a_sessionId" => $session->sessionId, "a_sessionKey" => $session->sessionKey, "a_SQL" => $sql, "a_resultType" => $this->output_type); + $res = $obj->call("validateSQL", $use_array); + + // This is the old version that needed the overload extension + // $res = $obj->validateSQL($session->sessionId, $session->sessionKey, $sql, $this->output_type); + return $res; + } // end of the "validateSQL()" function + + + /** + * Validator sytem call + * + * @param string SQL Query to validate + * + * @return object stdClass return with data + * + * @access private + * + * @see validateSQL() + */ + function _validate($sql) + { + $ret = $this->_validateSQL($this->service_link, $this->session_data, + $sql, $this->output_type); + return $ret; + } // end of the "validate()" function + + + /** + * Public functions + */ + + /** + * Constructor + * + * @access public + */ + function PMA_SQLValidator() + { + $this->url = 'http://sqlvalidator.mimer.com/v1/services'; + $this->service_name = 'SQL99Validator'; + $this->wsdl = '?wsdl'; + + $this->output_type = 'html'; + + $this->username = 'anonymous'; + $this->password = ''; + $this->calling_program = 'PHP_SQLValidator'; + $this->calling_program_version = '$Revision: 11335 $'; + $this->target_dbms = 'N/A'; + $this->target_dbms_version = 'N/A'; + $this->connection_technology = 'PHP'; + $this->connection_technology_version = phpversion(); + $this->interactive = 1; + + $this->service_link = null; + $this->session_data = null; + } // end of the "PMA_SQLValidator()" function + + + /** + * Sets credentials + * + * @param string the username + * @param string the password + * + * @access public + */ + function setCredentials($username, $password) + { + $this->username = $username; + $this->password = $password; + } // end of the "setCredentials()" function + + + /** + * Sets the calling program + * + * @param string the calling program name + * @param string the calling program revision + * + * @access public + */ + function setCallingProgram($calling_program, $calling_program_version) + { + $this->calling_program = $calling_program; + $this->calling_program_version = $calling_program_version; + } // end of the "setCallingProgram()" function + + + /** + * Appends the calling program + * + * @param string the calling program name + * @param string the calling program revision + * + * @access public + */ + function appendCallingProgram($calling_program, $calling_program_version) + { + $this->calling_program .= ' - ' . $calling_program; + $this->calling_program_version .= ' - ' . $calling_program_version; + } // end of the "appendCallingProgram()" function + + + /** + * Sets the target DBMS + * + * @param string the target DBMS name + * @param string the target DBMS revision + * + * @access public + */ + function setTargetDbms($target_dbms, $target_dbms_version) + { + $this->target_dbms = $target_dbms; + $this->target_dbms_version = $target_dbms_version; + } // end of the "setTargetDbms()" function + + + /** + * Appends the target DBMS + * + * @param string the target DBMS name + * @param string the target DBMS revision + * + * @access public + */ + function appendTargetDbms($target_dbms, $target_dbms_version) + { + $this->target_dbms .= ' - ' . $target_dbms; + $this->target_dbms_version .= ' - ' . $target_dbms_version; + } // end of the "appendTargetDbms()" function + + + /** + * Sets the connection technology used + * + * @param string the connection technology name + * @param string the connection technology revision + * + * @access public + */ + function setConnectionTechnology($connection_technology, $connection_technology_version) + { + $this->connection_technology = $connection_technology; + $this->connection_technology_version = $connection_technology_version; + } // end of the "setConnectionTechnology()" function + + + /** + * Appends the connection technology used + * + * @param string the connection technology name + * @param string the connection technology revision + * + * @access public + */ + function appendConnectionTechnology($connection_technology, $connection_technology_version) + { + $this->connection_technology .= ' - ' . $connection_technology; + $this->connection_technology_version .= ' - ' . $connection_technology_version; + } // end of the "appendConnectionTechnology()" function + + + /** + * Sets whether interactive mode should be used or not + * + * @param integer whether interactive mode should be used or not + * + * @access public + */ + function setInteractive($interactive) + { + $this->interactive = $interactive; + } // end of the "setInteractive()" function + + + /** + * Sets the output type to use + * + * @param string the output type to use + * + * @access public + */ + function setOutputType($output_type) + { + $this->output_type = $output_type; + } // end of the "setOutputType()" function + + + /** + * Starts service + * + * @access public + */ + function startService() + { + + $this->service_link = $this->_openService($this->url . '/' . $this->service_name . $this->wsdl); + + } // end of the "startService()" function + + + /** + * Starts session + * + * @access public + */ + function startSession() + { + $this->session_data = $this->_openSession($this->service_link, $this->username, $this->password, + $this->calling_program, $this->calling_program_version, + $this->target_dbms, $this->target_dbms_version, + $this->connection_technology, $this->connection_technology_version, + $this->interactive); + + if (isset($this->session_data) && ($this->session_data != null) + && ($this->session_data->target != $this->url)) { + // Reopens the service on the new URL that was provided + $url = $this->session_data->target; + $this->startService(); + } + } // end of the "startSession()" function + + + /** + * Do start service and session + * + * @access public + */ + function start() + { + $this->startService(); + $this->startSession(); + } // end of the "start()" function + + + /** + * Call to determine just if a query is valid or not. + * + * @param string SQL statement to validate + * + * @return string Validator string from Mimer + * + * @see _validate + */ + function isValid($sql) + { + $res = $this->_validate($sql); + return $res->standard; + } // end of the "isValid()" function + + + /** + * Call for complete validator response + * + * @param string SQL statement to validate + * + * @return string Validator string from Mimer + * + * @see _validate + */ + function validationString($sql) + { + $res = $this->_validate($sql); + return $res->data; + + } // end of the "validationString()" function + } // end class PMA_SQLValidator + + //add an extra check to ensure that the class was defined without errors + if (!class_exists('PMA_SQLValidator')) { + $GLOBALS['sqlvalidator_error'] = TRUE; + } + +} // end else + +?>