--- /dev/null
+--TEST--
+PostgreSQL escape functions
+--SKIPIF--
+<?php include("skipif.inc"); ?>
+--FILE--
+<?php
+include("escape.inc");
+?>
+--EXPECT--
+pg_escape_string() is Ok
+pg_escape_bytea() is Ok
--- /dev/null
+<?php
+$before = "ABC\\ABC";
+$expect = "ABC\\\\ABC";
+$after = pg_escape_string($before);
+if ($expect === $after) {
+ echo "pg_escape_string() is Ok\n";
+}
+else {
+ echo "pg_escape_string() is NOT Ok\n";
+ var_dump($before);
+ var_dump($after);
+ var_dump($expect);
+}
+
+$before = "ABC\\ABC";
+$expect = "ABC\\\\\\\\ABC";
+$after = pg_escape_bytea($before);
+if ($expect === $after) {
+ echo "pg_escape_bytea() is Ok\n";
+}
+else {
+ echo "pg_escape_byte() is NOT Ok\n";
+ var_dump($before);
+ var_dump($after);
+ var_dump($expect);
+}
+
+?>
--- /dev/null
+<?php
+//
+// +----------------------------------------------------------------------+
+// | PHP Version 4 |
+// +----------------------------------------------------------------------+
+// | Copyright (c) 1997-2002 The PHP Group |
+// +----------------------------------------------------------------------+
+// | This source file is subject to version 2.02 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. |
+// +----------------------------------------------------------------------+
+// | Author: Stig Bakken <ssb@fast.no> |
+// +----------------------------------------------------------------------+
+//
+// $Id$
+
+require_once "PEAR/Command/Common.php";
+require_once "PEAR/Remote.php";
+require_once "PEAR/Config.php";
+
+/**
+ * PEAR commands for managing configuration data.
+ *
+ */
+class PEAR_Command_Auth extends PEAR_Command_Common
+{
+ // {{{ constructor
+
+ /**
+ * PEAR_Command_Auth constructor.
+ *
+ * @access public
+ */
+ function PEAR_Command_Auth(&$ui, &$config)
+ {
+ parent::PEAR_Command_Common($ui, $config);
+ }
+
+ // }}}
+
+ // {{{ getCommands()
+
+ /**
+ * Return a list of all the commands defined by this class.
+ * @return array list of commands
+ * @access public
+ */
+ function getCommands()
+ {
+ return array('login', 'logout');
+ }
+
+ // }}}
+
+ function getHelp($command)
+ {
+ switch ($command) {
+ case 'login':
+ return array(null, 'Connects to the remote server');
+ case 'logout':
+ return array(null, 'Disconnects from the remote server');
+ }
+ }
+ // {{{ run()
+
+ /**
+ * Execute the command.
+ *
+ * @param string command name
+ *
+ * @param array option_name => value
+ *
+ * @param array list of additional parameters
+ *
+ * @return bool TRUE on success, FALSE for unknown commands, or
+ * a PEAR error on failure
+ *
+ * @access public
+ */
+ function run($command, $options, $params)
+ {
+ $failmsg = '';
+ $server = $this->config->get('master_server');
+ switch ($command) {
+ case 'login': {
+ $remote = new PEAR_Remote($this->config);
+ $username = $this->config->get('username');
+ if (empty($username)) {
+ $username = @$_ENV['USER'];
+ }
+ $this->ui->displayLine("Logging in to $server.");
+ $username = trim($this->ui->userDialog('Username', 'text', $username));
+
+ $this->config->set('username', $username);
+ $password = trim($this->ui->userDialog('Password', 'password'));
+ $this->config->set('password', $password);
+ $remote->expectError(401);
+ $ok = $remote->call('logintest');
+ $remote->popExpect();
+ if ($ok === true) {
+ $this->ui->displayLine("Logged in.");
+ $this->config->store();
+ } else {
+ $this->ui->displayLine("Login failed!");
+ }
+ break;
+ }
+ case 'logout': {
+ $this->ui->displayLine("Logging out from $server.");
+ $this->config->remove('username');
+ $this->config->remove('password');
+ $this->config->store();
+ break;
+ }
+ default: {
+ return false;
+ }
+ }
+ if ($failmsg) {
+ return $this->raiseError($failmsg);
+ }
+ return true;
+ }
+
+ // }}}
+}
+
+?>
\ No newline at end of file
--- /dev/null
+<?php
+//
+// +----------------------------------------------------------------------+
+// | PHP Version 4 |
+// +----------------------------------------------------------------------+
+// | Copyright (c) 1997-2002 The PHP Group |
+// +----------------------------------------------------------------------+
+// | This source file is subject to version 2.02 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. |
+// +----------------------------------------------------------------------+
+// | Author: Stig Bakken <ssb@fast.no> |
+// | Tomas V.V.Cox <cox@idecnet.com> |
+// | |
+// +----------------------------------------------------------------------+
+//
+// $Id$
+
+require_once "PEAR/Command/Common.php";
+require_once "PEAR/Config.php";
+
+/**
+ * PEAR commands for managing configuration data.
+ *
+ */
+class PEAR_Command_Config extends PEAR_Command_Common
+{
+ // {{{ properties
+ // }}}
+
+ // {{{ constructor
+
+ /**
+ * PEAR_Command_Config constructor.
+ *
+ * @access public
+ */
+ function PEAR_Command_Config(&$ui, &$config)
+ {
+ parent::PEAR_Command_Common($ui, $config);
+ }
+
+ // }}}
+
+ // {{{ getCommands()
+
+ /**
+ * Return a list of all the commands defined by this class.
+ * @return array list of commands
+ * @access public
+ */
+ function getCommands()
+ {
+ return array('config-show', 'config-get', 'config-set');
+ }
+
+ // }}}
+
+ function getHelp($command)
+ {
+ switch ($command) {
+ case 'config-show':
+ $ret = array('[<layer>]', 'Displays the configuration');
+ break;
+ case 'config-get':
+ $ret = array('<parameter> [<layer>]',
+ 'Displays the value of the given parameter');
+ break;
+ case 'config-set':
+ $ret = array('<parameter> <value> [<layer>]',
+ 'Sets the value of a parameter in the config');
+ break;
+ }
+ $ret[1] .= "\n".
+ " <layer> Where to store/get the configuration. The installer\n".
+ " supports 'user' (per user conf) and 'system' (global conf)";
+ return $ret;
+ }
+ // {{{ run()
+
+ function run($command, $options, $params)
+ {
+ $cf = &$this->config;
+ $failmsg = '';
+ switch ($command) {
+ case 'config-show': {
+ // $params[0] -> the layer
+ if ($error = $this->_checkLayer(@$params[0])) {
+ $failmsg .= $error;
+ break;
+ }
+ $keys = $cf->getKeys();
+ sort($keys);
+ $this->ui->startTable(array('caption' => 'Configuration:'));
+ foreach ($keys as $key) {
+ $type = $cf->getType($key);
+ $value = $cf->get($key, @$params[0]);
+ if ($type == 'password' && $value) {
+ $value = '********';
+ }
+ if (empty($value)) {
+ $value = '<not set>';
+ }
+ $this->ui->tableRow(array($key, $value));
+ }
+ $this->ui->endTable();
+ break;
+ }
+ case 'config-get': {
+ // $params[0] -> the parameter
+ // $params[1] -> the layer
+ if ($error = $this->_checkLayer(@$params[1])) {
+ $failmsg .= $error;
+ break;
+ }
+ if (sizeof($params) < 1 || sizeof($params) > 2) {
+ $failmsg .= "config-get expects 1 or 2 parameters. Try \"help config-get\" for help";
+ } elseif (sizeof($params) == 1) {
+ $this->ui->displayLine("$params[0] = " . $cf->get($params[0]));
+ } else {
+ $this->ui->displayLine("($params[1])$params[0] = " .
+ $cf->get($params[0], $params[1]));
+ }
+ break;
+ }
+ case 'config-set': {
+ // $param[0] -> a parameter to set
+ // $param[1] -> the value for the parameter
+ // $param[2] -> the layer
+ if (sizeof($params) < 2 || sizeof($params) > 3) {
+ $failmsg .= "config-set expects 2 or 3 parameters. Try \"help config-set\" for help";
+ break;
+ }
+ if ($error = $this->_checkLayer(@$params[2])) {
+ $failmsg .= $error;
+ break;
+ }
+ if (!call_user_func_array(array(&$cf, 'set'), $params))
+ {
+ $failmsg = "config-set (" . implode(", ", $params) . ") failed";
+ } else {
+ $cf->store();
+ }
+ break;
+ }
+ default: {
+ return false;
+ }
+ }
+ if ($failmsg) {
+ return $this->raiseError($failmsg);
+ }
+ return true;
+ }
+
+ // }}}
+
+ /**
+ * Checks if a layer is defined or not
+ *
+ * @param string $layer The layer to search for
+ * @return mixed False on no error or the error message
+ */
+ function _checkLayer($layer = null)
+ {
+ if (!empty($layer)) {
+ $layers = $this->config->getLayers();
+ if (!in_array($layer, $layers)) {
+ return " only the layers: \"" . implode('" or "', $layers) . "\" are supported";
+ }
+ }
+ return false;
+ }
+
+}
+
+?>
\ No newline at end of file
--- /dev/null
+<?php
+
+require_once 'PEAR/Command/Common.php';
+require_once 'PEAR/Registry.php';
+require_once 'PEAR/Config.php';
+
+class PEAR_Command_Registry extends PEAR_Command_Common
+{
+ // {{{ constructor
+
+ /**
+ * PEAR_Command_Registry constructor.
+ *
+ * @access public
+ */
+ function PEAR_Command_Registry(&$ui, &$config)
+ {
+ parent::PEAR_Command_Common($ui, $config);
+ }
+
+ // }}}
+
+ // {{{ getCommands()
+
+ /**
+ * Return a list of all the commands defined by this class.
+ * @return array list of commands
+ * @access public
+ */
+ function getCommands()
+ {
+ return array('list-installed', 'shell-test');
+ }
+
+ function getHelp($command)
+ {
+ switch ($command) {
+ case 'list-installed':
+ return array(null, 'List the installed PEAR packages in the system');
+ }
+ }
+
+ // }}}
+ // {{{ run()
+
+ /**
+ * Execute the command.
+ *
+ * @param string command name
+ *
+ * @param array option_name => value
+ *
+ * @param array list of additional parameters
+ *
+ * @return bool TRUE on success, FALSE if the command was unknown,
+ * or a PEAR error on failure
+ *
+ * @access public
+ */
+ function run($command, $options, $params)
+ {
+ $failmsg = '';
+ $cf = &PEAR_Config::singleton();
+ switch ($command) {
+ // {{{ list-installed
+
+ case 'list-installed': {
+ $reg = new PEAR_Registry($cf->get('php_dir'));
+ $installed = $reg->packageInfo();
+ $i = $j = 0;
+ $this->ui->startTable(
+ array('caption' => 'Installed packages:',
+ 'border' => true));
+ foreach ($installed as $package) {
+ if ($i++ % 20 == 0) {
+ $this->ui->tableRow(
+ array('Package', 'Version', 'State'),
+ array('bold' => true));
+ }
+ $this->ui->tableRow(array($package['package'],
+ $package['version'],
+ @$package['release_state']));
+ }
+ $this->ui->endTable();
+ break;
+ }
+
+ // }}}
+ case 'shell-test': {
+ // silence error messages for the rest of the execution
+ PEAR::pushErrorHandling(PEAR_ERROR_RETURN);
+ $reg = &new PEAR_Registry($this->config->get('php_dir'));
+ // "pear shell-test Foo"
+ if (sizeof($params) == 1) {
+ if (!$reg->packageExists($params[0])) {
+ exit(1);
+ }
+ // "pear shell-test Foo 1.0"
+ } elseif (sizeof($params) == 2) {
+ $v = $reg->packageInfo($params[0], 'version');
+ if (!$v || !version_compare($v, $params[1], "ge")) {
+ exit(1);
+ }
+ // "pear shell-test Foo ge 1.0"
+ } elseif (sizeof($params) == 3) {
+ $v = $reg->packageInfo($params[0], 'version');
+ if (!$v || !version_compare($v, $params[2], $params[1])) {
+ exit(1);
+ }
+ } else {
+ PEAR::popErrorHandling();
+ PEAR::raiseError("$command: expects 1 to 3 parameters");
+ exit(1);
+ }
+ break;
+ }
+ default: {
+ return false;
+ }
+ }
+ if ($failmsg) {
+ return $this->raiseError($failmsg);
+ }
+ return true;
+ }
+
+ // }}}
+
+
+}
+
+?>
\ No newline at end of file
--- /dev/null
+<?php
+
+require_once 'PEAR/Command/Common.php';
+require_once 'PEAR/Remote.php';
+
+class PEAR_Command_Remote extends PEAR_Command_Common
+{
+ // {{{ constructor
+
+ /**
+ * PEAR_Command_Remote constructor.
+ *
+ * @access public
+ */
+ function PEAR_Command_Remote(&$ui, &$config)
+ {
+ parent::PEAR_Command_Common($ui, $config);
+ }
+
+ // }}}
+
+ // {{{ getCommands()
+
+ /**
+ * Return a list of all the commands defined by this class.
+ * @return array list of commands
+ * @access public
+ */
+ function getCommands()
+ {
+ return array('remote-package-info',
+ 'list-upgrades',
+ 'list-remote-packages');
+ }
+
+ // }}}
+ // {{{ run()
+
+ /**
+ * Execute the command.
+ *
+ * @param string command name
+ *
+ * @param array option_name => value
+ *
+ * @param array list of additional parameters
+ *
+ * @return bool TRUE on success, FALSE for unknown commands, or
+ * a PEAR error on failure
+ *
+ * @access public
+ */
+ function run($command, $options, $params)
+ {
+ $failmsg = '';
+ $remote = &new PEAR_Remote($this->config);
+ switch ($command) {
+ case 'remote-package-info': {
+ break;
+ }
+ case 'list-remote-packages': {
+ break;
+ }
+ case 'list-upgrades': {
+ include_once "PEAR/Registry.php";
+ if (empty($params[0])) {
+ $state = $this->config->get('preferred_state');
+ } else {
+ $state = $params[0];
+ }
+ $caption = 'Available Upgrades';
+ if (empty($state) || $state == 'any') {
+ $latest = $remote->call("package.listLatestReleases");
+ } else {
+ $latest = $remote->call("package.listLatestReleases", $state);
+ $caption .= ' (' . $state . ')';
+ }
+ $caption .= ':';
+ if (PEAR::isError($latest)) {
+ return $latest;
+ }
+ $reg = new PEAR_Registry($this->config->get('php_dir'));
+ $inst = array_flip($reg->listPackages());
+ $this->ui->startTable(array('caption' => $caption,
+ 'border' => 1));
+ $this->ui->tableRow(array('Package', 'Version', 'Size'),
+ array('bold' => true));
+ foreach ($latest as $package => $info) {
+ if (!isset($inst[$package])) {
+ // skip packages we don't have installed
+ continue;
+ }
+ extract($info);
+ $inst_version = $reg->packageInfo($package, 'version');
+ if (version_compare($version, $inst_version, "le")) {
+ // installed version is up-to-date
+ continue;
+ }
+ if ($filesize >= 20480) {
+ $filesize += 1024 - ($filesize % 1024);
+ $fs = sprintf("%dkB", $filesize / 1024);
+ } elseif ($filesize > 0) {
+ $filesize += 103 - ($filesize % 103);
+ $fs = sprintf("%.1fkB", $filesize / 1024.0);
+ } else {
+ $fs = " -"; // XXX center instead
+ }
+ $this->ui->tableRow(array($package, $version, $fs));
+ }
+ $this->ui->endTable();
+ break;
+ }
+ default: {
+ return false;
+ }
+ }
+ if ($failmsg) {
+ return $this->raiseError($failmsg);
+ }
+ return true;
+ }
+
+ // }}}
+
+
+}
+
+?>
\ No newline at end of file