diff options
author | root <root@plug.(none)> | 2010-04-21 12:04:22 +0200 |
---|---|---|
committer | root <root@plug.(none)> | 2010-04-21 12:04:22 +0200 |
commit | 09add452d93f185d89ab51b67cda2fc384772db5 (patch) | |
tree | b09285b343411f9df2e8576129bf63a7add9394a /inc/HTTP/WebDAV/Tools | |
parent | 964c9b362c6acaa70441bf6cdf5dd43ae93cd4cc (diff) | |
download | nextcloud-server-09add452d93f185d89ab51b67cda2fc384772db5.tar.gz nextcloud-server-09add452d93f185d89ab51b67cda2fc384772db5.zip |
Update to the svn version of "HTTP WebDAV server" (integration to owncloud was made with alimited knowledge, so it may be ugly).Anyway it improves a lot the score on litmus testsuite on my server.
Diffstat (limited to 'inc/HTTP/WebDAV/Tools')
-rw-r--r--[-rwxr-xr-x] | inc/HTTP/WebDAV/Tools/_parse_lockinfo.php | 392 | ||||
-rw-r--r--[-rwxr-xr-x] | inc/HTTP/WebDAV/Tools/_parse_propfind.php | 345 | ||||
-rw-r--r--[-rwxr-xr-x] | inc/HTTP/WebDAV/Tools/_parse_proppatch.php | 75 |
3 files changed, 431 insertions, 381 deletions
diff --git a/inc/HTTP/WebDAV/Tools/_parse_lockinfo.php b/inc/HTTP/WebDAV/Tools/_parse_lockinfo.php index 3b32e2ff612..6319f0d5200 100755..100644 --- a/inc/HTTP/WebDAV/Tools/_parse_lockinfo.php +++ b/inc/HTTP/WebDAV/Tools/_parse_lockinfo.php @@ -1,159 +1,173 @@ -<?php -// -// +----------------------------------------------------------------------+ -// | PHP Version 4 | -// +----------------------------------------------------------------------+ -// | Copyright (c) 1997-2003 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. | -// +----------------------------------------------------------------------+ -// | Authors: Hartmut Holzgraefe <hholzgra@php.net> | -// | Christian Stocker <chregu@bitflux.ch> | -// +----------------------------------------------------------------------+ -// -// $Id: _parse_lockinfo.php,v 1.2 2004/01/05 12:32:40 hholzgra Exp $ -// +<?php // $Id$ +/* + +----------------------------------------------------------------------+ + | Copyright (c) 2002-2007 Christian Stocker, Hartmut Holzgraefe | + | All rights reserved | + | | + | 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, 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 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. | + +----------------------------------------------------------------------+ +*/ + /** * helper class for parsing LOCK request bodies * * @package HTTP_WebDAV_Server * @author Hartmut Holzgraefe <hholzgra@php.net> - * @version 0.99.1dev + * @version @package-version@ */ class _parse_lockinfo { - /** - * success state flag - * - * @var bool - * @access public - */ - var $success = false; - - /** - * lock type, currently only "write" - * - * @var string - * @access public - */ - var $locktype = ""; - - /** - * lock scope, "shared" or "exclusive" - * - * @var string - * @access public - */ - var $lockscope = ""; - - /** - * lock owner information - * - * @var string - * @access public - */ - var $owner = ""; - - /** - * flag that is set during lock owner read - * - * @var bool - * @access private - */ - var $collect_owner = false; - - /** - * constructor - * - * @param string path of stream to read - * @access public - */ + /** + * success state flag + * + * @var bool + * @access public + */ + var $success = false; + + /** + * lock type, currently only "write" + * + * @var string + * @access public + */ + var $locktype = ""; + + /** + * lock scope, "shared" or "exclusive" + * + * @var string + * @access public + */ + var $lockscope = ""; + + /** + * lock owner information + * + * @var string + * @access public + */ + var $owner = ""; + + /** + * flag that is set during lock owner read + * + * @var bool + * @access private + */ + var $collect_owner = false; + + /** + * constructor + * + * @param string path of stream to read + * @access public + */ function _parse_lockinfo($path) - { - // we assume success unless problems occur - $this->success = true; - - // remember if any input was parsed - $had_input = false; - - // open stream - $f_in = fopen($path, "r"); - if (!$f_in) { - $this->success = false; - return; - } - - // create namespace aware parser - $xml_parser = xml_parser_create_ns("UTF-8", " "); - - // set tag and data handlers - xml_set_element_handler($xml_parser, - array(&$this, "_startElement"), - array(&$this, "_endElement")); - xml_set_character_data_handler($xml_parser, - array(&$this, "_data")); - - // we want a case sensitive parser - xml_parser_set_option($xml_parser, - XML_OPTION_CASE_FOLDING, false); - - // parse input - while($this->success && !feof($f_in)) { - $line = fgets($f_in); - if (is_string($line)) { - $had_input = true; - $this->success &= xml_parse($xml_parser, $line, false); - } - } - - // finish parsing - if($had_input) { - $this->success &= xml_parse($xml_parser, "", true); - } - - // check if required tags where found - $this->success &= !empty($this->locktype); - $this->success &= !empty($this->lockscope); - - // free parser resource - xml_parser_free($xml_parser); - - // close input stream - fclose($f_in); - } + { + // we assume success unless problems occur + $this->success = true; + + // remember if any input was parsed + $had_input = false; + + // open stream + $f_in = fopen($path, "r"); + if (!$f_in) { + $this->success = false; + return; + } + + // create namespace aware parser + $xml_parser = xml_parser_create_ns("UTF-8", " "); + + // set tag and data handlers + xml_set_element_handler($xml_parser, + array(&$this, "_startElement"), + array(&$this, "_endElement")); + xml_set_character_data_handler($xml_parser, + array(&$this, "_data")); + + // we want a case sensitive parser + xml_parser_set_option($xml_parser, + XML_OPTION_CASE_FOLDING, false); + + // parse input + while ($this->success && !feof($f_in)) { + $line = fgets($f_in); + if (is_string($line)) { + $had_input = true; + $this->success &= xml_parse($xml_parser, $line, false); + } + } + + // finish parsing + if ($had_input) { + $this->success &= xml_parse($xml_parser, "", true); + } + + // check if required tags where found + $this->success &= !empty($this->locktype); + $this->success &= !empty($this->lockscope); + + // free parser resource + xml_parser_free($xml_parser); + + // close input stream + fclose($f_in); + } - /** - * tag start handler - * - * @param resource parser - * @param string tag name - * @param array tag attributes - * @return void - * @access private - */ + /** + * tag start handler + * + * @param resource parser + * @param string tag name + * @param array tag attributes + * @return void + * @access private + */ function _startElement($parser, $name, $attrs) { - // namespace handling + // namespace handling if (strstr($name, " ")) { list($ns, $tag) = explode(" ", $name); } else { - $ns = ""; + $ns = ""; $tag = $name; } - + if ($this->collect_owner) { - // everything within the <owner> tag needs to be collected + // everything within the <owner> tag needs to be collected $ns_short = ""; - $ns_attr = ""; + $ns_attr = ""; if ($ns) { if ($ns == "DAV:") { $ns_short = "D:"; @@ -163,75 +177,75 @@ class _parse_lockinfo } $this->owner .= "<$ns_short$tag$ns_attr>"; } else if ($ns == "DAV:") { - // parse only the essential tags + // parse only the essential tags switch ($tag) { - case "write": - $this->locktype = $tag; - break; - case "exclusive": - case "shared": - $this->lockscope = $tag; - break; - case "owner": - $this->collect_owner = true; - break; + case "write": + $this->locktype = $tag; + break; + case "exclusive": + case "shared": + $this->lockscope = $tag; + break; + case "owner": + $this->collect_owner = true; + break; } } } - - /** - * data handler - * - * @param resource parser - * @param string data - * @return void - * @access private - */ + + /** + * data handler + * + * @param resource parser + * @param string data + * @return void + * @access private + */ function _data($parser, $data) { - // only the <owner> tag has data content + // only the <owner> tag has data content if ($this->collect_owner) { $this->owner .= $data; } } - /** - * tag end handler - * - * @param resource parser - * @param string tag name - * @return void - * @access private - */ + /** + * tag end handler + * + * @param resource parser + * @param string tag name + * @return void + * @access private + */ function _endElement($parser, $name) { - // namespace handling - if (strstr($name, " ")) { - list($ns, $tag) = explode(" ", $name); - } else { - $ns = ""; - $tag = $name; - } - - // <owner> finished? - if (($ns == "DAV:") && ($tag == "owner")) { - $this->collect_owner = false; - } - - // within <owner> we have to collect everything - if ($this->collect_owner) { - $ns_short = ""; - $ns_attr = ""; - if ($ns) { - if ($ns == "DAV:") { + // namespace handling + if (strstr($name, " ")) { + list($ns, $tag) = explode(" ", $name); + } else { + $ns = ""; + $tag = $name; + } + + // <owner> finished? + if (($ns == "DAV:") && ($tag == "owner")) { + $this->collect_owner = false; + } + + // within <owner> we have to collect everything + if ($this->collect_owner) { + $ns_short = ""; + $ns_attr = ""; + if ($ns) { + if ($ns == "DAV:") { $ns_short = "D:"; - } else { - $ns_attr = " xmlns='$ns'"; - } - } - $this->owner .= "</$ns_short$tag$ns_attr>"; - } + } else { + $ns_attr = " xmlns='$ns'"; + } + } + $this->owner .= "</$ns_short$tag$ns_attr>"; + } } } -?>
\ No newline at end of file +?> diff --git a/inc/HTTP/WebDAV/Tools/_parse_propfind.php b/inc/HTTP/WebDAV/Tools/_parse_propfind.php index 15234cb15af..cf72b529d97 100755..100644 --- a/inc/HTTP/WebDAV/Tools/_parse_propfind.php +++ b/inc/HTTP/WebDAV/Tools/_parse_propfind.php @@ -1,178 +1,191 @@ -<?php -// -// +----------------------------------------------------------------------+ -// | PHP Version 4 | -// +----------------------------------------------------------------------+ -// | Copyright (c) 1997-2003 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. | -// +----------------------------------------------------------------------+ -// | Authors: Hartmut Holzgraefe <hholzgra@php.net> | -// | Christian Stocker <chregu@bitflux.ch> | -// +----------------------------------------------------------------------+ -// -// $Id: _parse_propfind.php,v 1.2 2004/01/05 12:33:22 hholzgra Exp $ -// +<?php // $Id$ +/* + +----------------------------------------------------------------------+ + | Copyright (c) 2002-2007 Christian Stocker, Hartmut Holzgraefe | + | All rights reserved | + | | + | 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, 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 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. | + +----------------------------------------------------------------------+ +*/ /** * helper class for parsing PROPFIND request bodies * * @package HTTP_WebDAV_Server * @author Hartmut Holzgraefe <hholzgra@php.net> - * @version 0.99.1dev + * @version @package-version@ */ class _parse_propfind { - /** - * success state flag - * - * @var bool - * @access public - */ - var $success = false; - - /** - * found properties are collected here - * - * @var array - * @access public - */ - var $props = false; - - /** - * internal tag nesting depth counter - * - * @var int - * @access private - */ - var $depth = 0; - - - /** - * constructor - * - * @access public - */ - function _parse_propfind($path) - { - // success state flag - $this->success = true; - - // property storage array - $this->props = array(); - - // internal tag depth counter - $this->depth = 0; - - // remember if any input was parsed - $had_input = false; - - // open input stream - $f_in = fopen($path, "r"); - if (!$f_in) { - $this->success = false; - return; - } - - // create XML parser - $xml_parser = xml_parser_create_ns("UTF-8", " "); - - // set tag and data handlers - xml_set_element_handler($xml_parser, - array(&$this, "_startElement"), - array(&$this, "_endElement")); - - // we want a case sensitive parser - xml_parser_set_option($xml_parser, - XML_OPTION_CASE_FOLDING, false); - - - // parse input - while($this->success && !feof($f_in)) { - $line = fgets($f_in); - if (is_string($line)) { - $had_input = true; - $this->success &= xml_parse($xml_parser, $line, false); - } - } - - // finish parsing - if($had_input) { - $this->success &= xml_parse($xml_parser, "", true); - } - - // free parser - xml_parser_free($xml_parser); - - // close input stream - fclose($f_in); - - // if no input was parsed it was a request - if(!count($this->props)) $this->props = "all"; // default - } - - - /** - * start tag handler - * - * @access private - * @param resource parser - * @param string tag name - * @param array tag attributes - */ - function _startElement($parser, $name, $attrs) - { - // name space handling - if (strstr($name, " ")) { - list($ns, $tag) = explode(" ", $name); - if ($ns == "") - $this->success = false; - } else { - $ns = ""; - $tag = $name; - } - - // special tags at level 1: <allprop> and <propname> - if ($this->depth == 1) { - if ($tag == "allprop") - $this->props = "all"; - - if ($tag == "propname") - $this->props = "names"; - } - - // requested properties are found at level 2 - if ($this->depth == 2) { - $prop = array("name" => $tag); - if ($ns) - $prop["xmlns"] = $ns; - $this->props[] = $prop; - } - - // increment depth count - $this->depth++; - } - - - /** - * end tag handler - * - * @access private - * @param resource parser - * @param string tag name - */ - function _endElement($parser, $name) - { - // here we only need to decrement the depth count - $this->depth--; - } + /** + * success state flag + * + * @var bool + * @access public + */ + var $success = false; + + /** + * found properties are collected here + * + * @var array + * @access public + */ + var $props = false; + + /** + * internal tag nesting depth counter + * + * @var int + * @access private + */ + var $depth = 0; + + + /** + * constructor + * + * @access public + */ + function _parse_propfind($path) + { + // success state flag + $this->success = true; + + // property storage array + $this->props = array(); + + // internal tag depth counter + $this->depth = 0; + + // remember if any input was parsed + $had_input = false; + + // open input stream + $f_in = fopen($path, "r"); + if (!$f_in) { + $this->success = false; + return; + } + + // create XML parser + $xml_parser = xml_parser_create_ns("UTF-8", " "); + + // set tag and data handlers + xml_set_element_handler($xml_parser, + array(&$this, "_startElement"), + array(&$this, "_endElement")); + + // we want a case sensitive parser + xml_parser_set_option($xml_parser, + XML_OPTION_CASE_FOLDING, false); + + + // parse input + while ($this->success && !feof($f_in)) { + $line = fgets($f_in); + if (is_string($line)) { + $had_input = true; + $this->success &= xml_parse($xml_parser, $line, false); + } + } + + // finish parsing + if ($had_input) { + $this->success &= xml_parse($xml_parser, "", true); + } + + // free parser + xml_parser_free($xml_parser); + + // close input stream + fclose($f_in); + + // if no input was parsed it was a request + if(!count($this->props)) $this->props = "all"; // default + } + + + /** + * start tag handler + * + * @access private + * @param resource parser + * @param string tag name + * @param array tag attributes + */ + function _startElement($parser, $name, $attrs) + { + // name space handling + if (strstr($name, " ")) { + list($ns, $tag) = explode(" ", $name); + if ($ns == "") + $this->success = false; + } else { + $ns = ""; + $tag = $name; + } + + // special tags at level 1: <allprop> and <propname> + if ($this->depth == 1) { + if ($tag == "allprop") + $this->props = "all"; + + if ($tag == "propname") + $this->props = "names"; + } + + // requested properties are found at level 2 + if ($this->depth == 2) { + $prop = array("name" => $tag); + if ($ns) + $prop["xmlns"] = $ns; + $this->props[] = $prop; + } + + // increment depth count + $this->depth++; + } + + + /** + * end tag handler + * + * @access private + * @param resource parser + * @param string tag name + */ + function _endElement($parser, $name) + { + // here we only need to decrement the depth count + $this->depth--; + } } -?>
\ No newline at end of file +?> diff --git a/inc/HTTP/WebDAV/Tools/_parse_proppatch.php b/inc/HTTP/WebDAV/Tools/_parse_proppatch.php index 9836ab228c8..fb0e595ddf7 100755..100644 --- a/inc/HTTP/WebDAV/Tools/_parse_proppatch.php +++ b/inc/HTTP/WebDAV/Tools/_parse_proppatch.php @@ -1,31 +1,45 @@ -<?php -// -// +----------------------------------------------------------------------+ -// | PHP Version 4 | -// +----------------------------------------------------------------------+ -// | Copyright (c) 1997-2003 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. | -// +----------------------------------------------------------------------+ -// | Authors: Hartmut Holzgraefe <hholzgra@php.net> | -// | Christian Stocker <chregu@bitflux.ch> | -// +----------------------------------------------------------------------+ -// -// $Id: _parse_proppatch.php,v 1.3 2004/01/05 12:41:34 hholzgra Exp $ -// +<?php // $Id$ +/* + +----------------------------------------------------------------------+ + | Copyright (c) 2002-2007 Christian Stocker, Hartmut Holzgraefe | + | All rights reserved | + | | + | 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, 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 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. | + +----------------------------------------------------------------------+ +*/ + /** * helper class for parsing PROPPATCH request bodies * * @package HTTP_WebDAV_Server * @author Hartmut Holzgraefe <hholzgra@php.net> - * @version 0.99.1dev + * @version @package-version@ */ class _parse_proppatch { @@ -152,8 +166,10 @@ class _parse_proppatch if ($this->depth >= 4) { $this->current["val"] .= "<$tag"; - foreach ($attr as $key => $val) { - $this->current["val"] .= ' '.$key.'="'.str_replace('"','"', $val).'"'; + if (isset($attr)) { + foreach ($attr as $key => $val) { + $this->current["val"] .= ' '.$key.'="'.str_replace('"','"', $val).'"'; + } } $this->current["val"] .= ">"; } @@ -204,11 +220,18 @@ class _parse_proppatch * @return void * @access private */ - function _data($parser, $data) { + function _data($parser, $data) + { if (isset($this->current)) { $this->current["val"] .= $data; } } } -?>
\ No newline at end of file +/* + * Local variables: + * tab-width: 4 + * c-basic-offset: 4 + * indent-tabs-mode:nil + * End: + */ |