diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index 874a9217..d1ac7fe7 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -1,11 +1,15 @@ -image: php:apache-buster +stages: + - build + - test + - testall build: stage: build + image: debian:unstable script: - apt-get -y update - bash -c 'mkdir -p /usr/share/man/man{0..10}' - - apt-get -y install build-essential devscripts fakeroot dh-exec jdupes rst2pdf doxygen graphviz # todo build-dep instead, change this task's image to plain debian + - apt-get -y install build-essential devscripts fakeroot dh-exec jdupes doxygen graphviz php-cli - mv debian/changelog debian/changelog.old - > cat @@ -26,10 +30,158 @@ build: test: stage: test + image: debian:unstable artifacts: paths: - testing/report.xml - apache2_log/* + - davical_log/* + reports: + junit: testing/report.xml + when: + always + script: + - apt-get -y update + - bash -c 'mkdir -p /usr/share/man/man{0..10}' + - apt-get -y install locales + - echo "en_NZ.UTF-8 UTF-8" >> /etc/locale.gen + - locale-gen + - echo "LANG=en_NZ.UTF-8" > /etc/default/locale + - apt-get -y install libdbd-pg-perl libyaml-perl php php-cli php-pgsql php-xml postgresql-client postgresql libapache2-mod-php curl xmlstarlet + - curl 'https://gitlab.com/davical-project/awl/-/archive/master/awl-master.tar.gz' | tar zxf - + - mv awl-master /usr/share/awl/ + - chown -R www-data /usr/share/awl/ + - dpkg --ignore-depends=libawl-php -i *.deb + - echo '127.0.1.1 regression mycaldav myempty' >> /etc/hosts + - rm /etc/apache2/ports.conf /etc/apache2/sites-enabled/000-default.conf && touch /etc/apache2/ports.conf + - cp testing/apache-site.conf.example /etc/apache2/sites-enabled/davical-regression.conf + - sed -i 's/\/path\/to/\/usr\/share/g' /etc/apache2/sites-enabled/davical-regression.conf + - mkdir /usr/share/davical/testing/ + - cp testing/*.php /usr/share/davical/testing/ + - rm /etc/davical/config.php + - cat testing/regression-conf.php.example | sed 's.//$c->dbg.$c->dbg.' > /etc/davical/regression-conf.php + - ln -s /etc/davical/regression-conf.php /etc/davical/mycaldav-conf.php + - ln -s /etc/davical/regression-conf.php /etc/davical/myempty-conf.php + - mkdir -p /var/log/davical + - chown www-data /var/log/davical + - sed -i '/peer/d' /etc/postgresql/13/main/pg_hba.conf + - echo 'local all all trust' >> /etc/postgresql/13/main/pg_hba.conf + - pg_ctlcluster 13 main start + - su postgres -c 'createuser davical_dba --createdb --createrole --superuser' + - su postgres -c 'createuser davical_app --superuser' + - su postgres -c 'createuser testrunner --superuser' + - pg_ctlcluster 13 main restart + - a2enmod rewrite + - apache2ctl start + - useradd testrunner + - cd testing && su testrunner -c 'IS_CI=yes ALLSUITES="regression-suite binding carddav scheduling" ./run_regressions.sh all x' + after_script: + - mkdir -p apache2_log + - cp -r /var/log/apache2 apache2_log/test + - bzip2 apache2_log/test/* + - mkdir -p davical_log + - cp -r /var/log/davical davical_log/test + + +test_bullseye_carddavclientinterop: + stage: testall + image: debian:bullseye + artifacts: + paths: + - testing/report.xml + - carddavclient-master/testreports/unit/results.html + - apache2_log/* + - davical_log/* + - carddavclient-master/testreports/interop/* + reports: + junit: + - testing/report.xml + - carddavclient-master/testreports/unit/results.html + when: + always + script: + - apt-get -y update + - bash -c 'mkdir -p /usr/share/man/man{0..10}' + - apt-get -y install locales + - echo "en_NZ.UTF-8 UTF-8" >> /etc/locale.gen + - locale-gen + - echo "LANG=en_NZ.UTF-8" > /etc/default/locale + - apt-get -y install libdbd-pg-perl libyaml-perl php php-cli php-pgsql php-xml postgresql-client postgresql libapache2-mod-php curl xmlstarlet composer phpunit + - curl 'https://gitlab.com/davical-project/awl/-/archive/master/awl-master.tar.gz' | tar zxf - + - mv awl-master /usr/share/awl/ + - chown -R www-data /usr/share/awl/ + - dpkg --ignore-depends=libawl-php -i *.deb + - echo '127.0.1.1 regression mycaldav myempty' >> /etc/hosts + - rm /etc/apache2/ports.conf /etc/apache2/sites-enabled/000-default.conf && touch /etc/apache2/ports.conf + - cp testing/apache-site.conf.example /etc/apache2/sites-enabled/davical-regression.conf + - sed -i 's/\/path\/to/\/usr\/share/g' /etc/apache2/sites-enabled/davical-regression.conf + - mkdir /usr/share/davical/testing/ + - cp testing/*.php /usr/share/davical/testing/ + - rm /etc/davical/config.php + - cat testing/regression-conf.php.example | sed 's.//$c->dbg.$c->dbg.' > /etc/davical/regression-conf.php + - ln -s /etc/davical/regression-conf.php /etc/davical/mycaldav-conf.php + - ln -s /etc/davical/regression-conf.php /etc/davical/myempty-conf.php + - mkdir -p /var/log/davical + - chown www-data /var/log/davical + - sed -i '/peer/d' /etc/postgresql/13/main/pg_hba.conf + - echo 'local all all trust' >> /etc/postgresql/13/main/pg_hba.conf + - pg_ctlcluster 13 main start + - su postgres -c 'createuser davical_dba --createdb --createrole --superuser' + - su postgres -c 'createuser davical_app --superuser' + - su postgres -c 'createuser testrunner --superuser' + - pg_ctlcluster 13 main restart + - a2enmod rewrite + - apache2ctl start + - useradd testrunner + - cd testing && su testrunner -c 'IS_CI=yes ALLSUITES="regression-suite binding carddav scheduling" ./run_regressions.sh all x' + - cd .. + - curl https://codeload.github.com/mstilkerich/carddavclient/tar.gz/master | tar zxf - + - cd carddavclient-master + - composer install + - echo ' [ "username" => "user3", "password" => "user3", "discoveryUri" => "http://regression", "syncAllowExtraChanges" => false, "featureSet" => TestInfrastructureSrv::SRVFEATS_DAVICAL, ], ]; public const ADDRESSBOOKS = [ "Davical_0" => [ "account" => "Davical", "url" => "http://regression/caldav.php/user3/addresses/", "displayname" => "user3 addresses", ], ]; }' > tests/interop/AccountData.php + - mkdir -p testreports/interop + - phpunit -c tests/interop/phpunit.xml --no-coverage + after_script: + - mkdir -p apache2_log + - cp -r /var/log/apache2 apache2_log/test_bullseye + - bzip2 apache2_log/test_bullseye/* + - mkdir -p davical_log + - cp -r /var/log/davical davical_log/test_bullseye + + +build_buster_latestphp: + stage: testall + image: php:apache-buster + script: + - apt-get -y update + - bash -c 'mkdir -p /usr/share/man/man{0..10}' + - apt-get -y install build-essential devscripts fakeroot dh-exec jdupes doxygen graphviz + - mv debian/changelog debian/changelog.old + - > + cat + <(echo "davical ($(cat VERSION)-99~git$(date +"%Y%m%d")-$(git rev-parse --short $CI_COMMIT_SHA)) unstable; urgency=medium") + <(echo "") + <(echo " * Build on CI") + <(echo "") + <(echo " -- ${GITLAB_USER_NAME} <${GITLAB_USER_EMAIL}> $(date -R)") + <(echo "") + debian/changelog.old + >debian/changelog + - rm debian/changelog.old + - debuild --prepend-path=/usr/local/bin -us -uc -b -d + - 'mv ../davical_*_all.deb ./davical.deb' + artifacts: + paths: + - '*.deb' + +test_buster_latestphp: + stage: testall + image: php:apache-buster + artifacts: + paths: + - testing/report.xml + - apache2_log/* + - davical_log/* reports: junit: testing/report.xml when: @@ -56,9 +208,11 @@ test: - mkdir /usr/share/davical/testing/ - cp testing/*.php /usr/share/davical/testing/ - rm /etc/davical/config.php - - cp testing/regression-conf.php.example /etc/davical/regression-conf.php + - cat testing/regression-conf.php.example | sed 's.//$c->dbg.$c->dbg.' > /etc/davical/regression-conf.php - ln -s /etc/davical/regression-conf.php /etc/davical/mycaldav-conf.php - ln -s /etc/davical/regression-conf.php /etc/davical/myempty-conf.php + - mkdir -p /var/log/davical + - chown www-data /var/log/davical - sed -i '/peer/d' /etc/postgresql/11/main/pg_hba.conf - echo 'local all all trust' >> /etc/postgresql/11/main/pg_hba.conf - pg_ctlcluster 11 main start @@ -71,4 +225,65 @@ test: - useradd testrunner - cd testing && su testrunner -c 'IS_CI=yes ALLSUITES="regression-suite binding carddav scheduling" ./run_regressions.sh all x' after_script: - - cp -r /var/log/apache2 apache2_log + - mkdir -p apache2_log + - cp -r /var/log/apache2 apache2_log/test_buster_latestphp + - bzip2 apache2_log/test_buster_latestphp/* + - mkdir -p davical_log + - cp -r /var/log/davical davical_log/test_buster_latestphp + + +test_stretch_latestphp: + stage: testall + image: php:apache-stretch + artifacts: + paths: + - testing/report.xml + - apache2_log/* + - davical_log/* + reports: + junit: testing/report.xml + when: + always + script: + - apt-get -y update + - bash -c 'mkdir -p /usr/share/man/man{0..10}' + - apt-get -y install locales + - echo "en_NZ.UTF-8 UTF-8" >> /etc/locale.gen + - locale-gen + - echo "LANG=en_NZ.UTF-8" > /etc/default/locale + - apt-get -y install libdbd-pg-perl libyaml-perl perl postgresql postgresql-client libpq-dev xmlstarlet + - curl 'https://gitlab.com/davical-project/awl/-/archive/master/awl-master.tar.gz' | tar zxf - + - mv awl-master /usr/share/awl/ + - chown -R www-data /usr/share/awl/ + - dpkg --ignore-depends=php,php-pgsql,php-xml,libawl-php,php-cli -i *.deb + - docker-php-ext-install -j$(nproc) pgsql + - docker-php-ext-install -j$(nproc) pdo_pgsql + - docker-php-ext-install -j$(nproc) calendar + - echo '127.0.1.1 regression mycaldav myempty' >> /etc/hosts + - cp testing/apache-site.conf.example /etc/apache2/sites-enabled/davical-regression.conf + - sed -i 's/\/path\/to/\/usr\/share/g' /etc/apache2/sites-enabled/davical-regression.conf + - mkdir /usr/share/davical/testing/ + - cp testing/*.php /usr/share/davical/testing/ + - rm /etc/davical/config.php + - cat testing/regression-conf.php.example | sed 's.//$c->dbg.$c->dbg.' > /etc/davical/regression-conf.php + - ln -s /etc/davical/regression-conf.php /etc/davical/mycaldav-conf.php + - ln -s /etc/davical/regression-conf.php /etc/davical/myempty-conf.php + - mkdir -p /var/log/davical + - chown www-data /var/log/davical + - sed -i '/peer/d' /etc/postgresql/9.6/main/pg_hba.conf + - echo 'local all all trust' >> /etc/postgresql/9.6/main/pg_hba.conf + - pg_ctlcluster 9.6 main start + - su postgres -c 'createuser davical_dba --createdb --createrole --superuser' + - su postgres -c 'createuser davical_app --superuser' + - su postgres -c 'createuser testrunner --superuser' + - pg_ctlcluster 9.6 main restart + - a2enmod rewrite + - apache2ctl start + - useradd testrunner + - cd testing && su testrunner -c 'IS_CI=yes ALLSUITES="regression-suite binding carddav scheduling" ./run_regressions.sh all x' + after_script: + - mkdir -p apache2_log + - cp -r /var/log/apache2 apache2_log/test_stretch_latestphp + - bzip2 apache2_log/test_stretch_latestphp/* + - mkdir -p davical_log + - cp -r /var/log/davical davical_log/test_stretch_latestphp diff --git a/config/example-config.php b/config/example-config.php index cc4bdefa..7be5509e 100644 --- a/config/example-config.php +++ b/config/example-config.php @@ -113,6 +113,17 @@ $c->admin_email ='calendar-admin@example.com'; // $c->local_styles = array(); // $c->print_styles = array(); +/** +* Allow users to see all accounts on the server in the web interface, or only +* their account and the accounts they have a relationship with. If set to +* false, users need the READ privilege to display another principal and their +* collections, and they need to be in the same group with another principal to +* find them in a drop-down list for granting privileges. +* Admins will still be able to see all accounts. +* Default: true +*/ +// $c->list_everyone = false; + /*************************************************************************** * * diff --git a/htdocs/always.php b/htdocs/always.php index eeba14dc..d2d3f100 100644 --- a/htdocs/always.php +++ b/htdocs/always.php @@ -134,6 +134,7 @@ $c->locale_path = '../locale'; $c->base_url = preg_replace('#/[^/]+\.php.*$#', '', $_SERVER['SCRIPT_NAME']); $c->base_directory = preg_replace('#/[^/]*$#', '', $_SERVER['DOCUMENT_ROOT']); $c->default_privileges = array('read-free-busy', 'schedule-deliver'); +$c->list_everyone = true; $c->enable_auto_schedule = true; diff --git a/htdocs/setup.php b/htdocs/setup.php index 8b13d0ad..2a82dbf3 100644 --- a/htdocs/setup.php +++ b/htdocs/setup.php @@ -13,7 +13,7 @@ function log_setup_error($errno , $errstr , $errfile , $errline) { error_log('DAViCal setup.php: Informational: '.$errfile.'('.$errline.'): ['.$errno.'] '.$errstr); } -function catch_setup_errors($errno , $errstr , $errfile , $errline , $errcontext ) { +function catch_setup_errors($errno , $errstr , $errfile , $errline , $errcontext = null ) { if ( $errno == 2 ) { // A working installation will regularly fail to include_once() for several files as it searches for the location log_setup_error($errno , $errstr , $errfile , $errline); diff --git a/inc/RRule.php b/inc/RRule.php index 2e2305e2..14c7bfbe 100644 --- a/inc/RRule.php +++ b/inc/RRule.php @@ -1184,7 +1184,7 @@ function rrule_expand( $dtstart, $property, $component, $range_end, $is_date=nul $expansion[$date->FloatOrUTC($return_floating_times)] = $component; if ( $date > $range_end ) break; if ( $i++ >= $c->rrule_expansion_limit ) { - dbg_error_log( 'ERROR', "Hit rrule expansion limit of ".$c->rrule_expansion_limit." - increase rrule_expansion_limit in config to avoid events missing from freebusy" ); + dbg_error_log( 'ERROR', "Hit rrule expansion limit of ".$c->rrule_expansion_limit." on %s %s - increase rrule_expansion_limit in config to avoid events missing from freebusy", $component->GetType(), $component->GetProperty('UID')); } } // if ( DEBUG_RRULE ) print_r( $expansion ); diff --git a/inc/always.php.in b/inc/always.php.in index 10f07753..cffdb7bb 100644 --- a/inc/always.php.in +++ b/inc/always.php.in @@ -134,6 +134,7 @@ $c->locale_path = '../locale'; $c->base_url = preg_replace('#/[^/]+\.php.*$#', '', $_SERVER['SCRIPT_NAME']); $c->base_directory = preg_replace('#/[^/]*$#', '', $_SERVER['DOCUMENT_ROOT']); $c->default_privileges = array('read-free-busy', 'schedule-deliver'); +$c->list_everyone = true; $c->enable_auto_schedule = true; diff --git a/inc/caldav-REPORT-cardquery.php b/inc/caldav-REPORT-cardquery.php index f85a9d56..bbfc2f73 100644 --- a/inc/caldav-REPORT-cardquery.php +++ b/inc/caldav-REPORT-cardquery.php @@ -277,7 +277,8 @@ if ( ! $target_collection->IsAddressbook() ) { */ $params = array(); -$where = ' WHERE caldav_data.collection_id = ' . $target_collection->resource_id(); +$where_collection = ' WHERE caldav_data.collection_id = ' . $target_collection->resource_id(); +$where = ''; if ( is_array($qry_filters) ) { dbg_log_array( 'cardquery', 'qry_filters', $qry_filters, true ); @@ -318,7 +319,7 @@ if ( $need_post_filter && ( $qry_filters_combination == 'OR' )) { $post_filters = $qry_filters; } -$sql = 'SELECT * FROM caldav_data INNER JOIN addressbook_resource USING(dav_id)'. $where; +$sql = 'SELECT * FROM caldav_data INNER JOIN addressbook_resource USING(dav_id)'. $where_collection . $where; if ( isset($c->strict_result_ordering) && $c->strict_result_ordering ) $sql .= " ORDER BY dav_id"; $qry = new AwlQuery( $sql, $params ); if ( $qry->Exec("cardquery",__LINE__,__FILE__) && $qry->rows() > 0 ) { diff --git a/inc/check_UTF8.php b/inc/check_UTF8.php index e3c93dbf..62dbfc00 100644 --- a/inc/check_UTF8.php +++ b/inc/check_UTF8.php @@ -67,7 +67,7 @@ function utf8ToUnicode(&$str) $len = strlen($str); for($i = 0; $i < $len; $i++) { - $in = ord($str{$i}); + $in = ord($str[$i]); if (0 == $mState) { // When mState is zero we expect either a US-ASCII character or a // multi-octet sequence. diff --git a/inc/drivers_ldap.php b/inc/drivers_ldap.php index e59af74a..6e8c8089 100644 --- a/inc/drivers_ldap.php +++ b/inc/drivers_ldap.php @@ -180,14 +180,16 @@ class ldapDriver } /** - * Returns the result of the LDAP query + * Actually look up a user in the LDAP directory + * (this is the LDAP part of LDAP_check() below) * * @param string $filter The filter used to search entries * @param array $attributes Attributes to be returned + * @param string $username username to check * @param string $passwd password to check * @return array Contains selected attributes from all entries corresponding to the given filter */ - function requestUser( $filter, $attributes=NULL, $username, $passwd) { + function requestUser( $filter, $attributes, $username, $passwd) { global $c; $entry=NULL; diff --git a/inc/external-fetch.php b/inc/external-fetch.php index 599470c7..b124f6e5 100644 --- a/inc/external-fetch.php +++ b/inc/external-fetch.php @@ -39,7 +39,7 @@ function create_external ( $path,$is_calendar,$is_addressbook ) } } -function fetch_external ( $bind_id, $min_age = '1 hour', $ua_string ) +function fetch_external ( $bind_id, $min_age, $ua_string ) { if ( ! function_exists ( "curl_init" ) ) { dbg_error_log("external", "external resource cannot be fetched without curl, please install curl"); diff --git a/inc/ui/collection-edit.php b/inc/ui/collection-edit.php index 81bffb0b..1211e7a5 100644 --- a/inc/ui/collection-edit.php +++ b/inc/ui/collection-edit.php @@ -64,6 +64,14 @@ if ( isset($privsql) ) { $privqry->Exec('admin-collection-edit',__LINE__,__FILE__); $permissions = $privqry->Fetch(); $can_write_collection = ($session->AllowedTo('Admin') || (bindec($permissions->priv) & privilege_to_bits('DAV::bind')) ); + if ( ! $c->list_everyone ) { + $can_read_collection = ($session->AllowedTo('Admin') || (bindec($permissions->priv) & privilege_to_bits('DAV::read')) ); + if ( ! $can_read_collection ) { + dbg_error_log( 'LOG WARNING', 'Access to id "%s"/"%s" by user "%s" rejected.', $id, $collection_name, $session->username ); + header('Location: index.php'); + @ob_flush(); exit(0); + } + } } // Verify CSRF token @@ -416,7 +424,13 @@ if ( $editor->Available() ) { $grantrow = new Editor("Grants", "grants"); $grantrow->SetSubmitName( 'savegrantrow' ); - $grantrow->SetLookup( 'to_principal', 'SELECT principal_id, displayname FROM dav_principal WHERE principal_id NOT IN (SELECT member_id FROM group_member WHERE group_id = '.$id.') ORDER BY displayname' ); + $limit_grantrow = ''; + if ( ! $c->list_everyone ) { + if ( ! $session->AllowedTo( "Admin" ) ) { + $limit_grantrow = 'AND (principal_id = \''.$session->principal_id.'\' or principal_id in (select member_id from group_member where group_id in (select group_id from group_member where member_id = \''.$session->principal_id.'\')) or principal_id in (select group_id from group_member where member_id = \''.$session->principal_id.'\'))'; + } + } + $grantrow->SetLookup( 'to_principal', 'SELECT principal_id, displayname FROM dav_principal WHERE principal_id NOT IN (SELECT member_id FROM group_member WHERE group_id = '.$id.') '.$limit_grantrow.' ORDER BY displayname' ); if ( $can_write_collection ) { if ( $grantrow->IsSubmit() ) { $_POST['by_collection'] = $id; diff --git a/inc/ui/external-browse.php b/inc/ui/external-browse.php index 2a8c16bd..2be631f5 100644 --- a/inc/ui/external-browse.php +++ b/inc/ui/external-browse.php @@ -1,6 +1,10 @@ AllowedTo("Admin" ) ) { + @ob_flush(); exit(0); +} + $browser = new Browser(translate('External Calendars')); $browser->AddColumn( 'collection_id', translate('ID'), 'right', '##collection_link##' ); diff --git a/inc/ui/principal-browse.php b/inc/ui/principal-browse.php index e6853b90..f2c0d897 100644 --- a/inc/ui/principal-browse.php +++ b/inc/ui/principal-browse.php @@ -35,6 +35,9 @@ if ( isset($principal_type) ) { $browser->AndWhere( 'type_id = '.$principal_type ); } +if ( ! $c->list_everyone && ! $session->AllowedTo( "Admin" ) ) { + $browser->AndWhere( '(pprivs('.$session->principal_id.',dav_principal.principal_id,'.$c->permission_scan_depth.') & 1::BIT(24))::INT4::BOOLEAN' ); +} $c->page_title = $browser->Title(); diff --git a/inc/ui/principal-edit.php b/inc/ui/principal-edit.php index f415755e..4472ea10 100644 --- a/inc/ui/principal-edit.php +++ b/inc/ui/principal-edit.php @@ -33,6 +33,14 @@ $can_write_principal = ($session->AllowedTo('Admin') || ($session->principal_id if ( !$can_write_principal && $id > 0 ) { $target_principal = new Principal('principal_id', $id); $can_write_principal = $session->HavePrivilegeTo('DAV::write', $target_principal->dav_name()); + if ( ! $c->list_everyone ) { + $can_read_principal = $session->HavePrivilegeTo('DAV::read', $target_principal->dav_name()); + if ( ! $can_read_principal ) { + dbg_error_log( 'LOG WARNING', 'Access to "%s" by user "%s" rejected.', $target_principal->dav_name(), $session->username ); + header('Location: index.php'); + @ob_flush(); exit(0); + } + } } @@ -748,7 +756,7 @@ function group_members_browser() { function grant_row_editor() { - global $c, $id, $editor, $can_write_principal, $privilege_names; + global $c, $id, $editor, $can_write_principal, $privilege_names, $session; $grantrow = new Editor("Grants", "grants"); $grantrow->SetSubmitName( 'savegrantrow' ); @@ -756,7 +764,13 @@ function grant_row_editor() { if ( isset($_GET['edit_grant']) ) { $edit_grant_clause = ' AND to_principal != '.intval($_GET['edit_grant']); } - $grantrow->SetLookup( 'to_principal', 'SELECT principal_id, displayname FROM dav_principal WHERE user_active AND principal_id NOT IN (SELECT to_principal FROM grants WHERE by_principal = '.$id.$edit_grant_clause.') ORDER BY fullname' ); + $limit_grantrow = ''; + if ( ! $c->list_everyone ) { + if ( ! $session->AllowedTo( "Admin" ) ) { + $limit_grantrow = 'AND (principal_id = \''.$session->principal_id.'\' or principal_id in (select member_id from group_member where group_id in (select group_id from group_member where member_id = \''.$session->principal_id.'\')) or principal_id in (select group_id from group_member where member_id = \''.$session->principal_id.'\'))'; + } + } + $grantrow->SetLookup( 'to_principal', 'SELECT principal_id, displayname FROM dav_principal WHERE user_active AND principal_id NOT IN (SELECT to_principal FROM grants WHERE by_principal = '.$id.$edit_grant_clause.') '.$limit_grantrow.' ORDER BY fullname' ); if ( $can_write_principal ) { if ( $grantrow->IsSubmit() ) { if ( $grantrow->IsUpdate() ) diff --git a/testing/README.regression_tests b/testing/README.regression_tests index 0360008c..76dc60a6 100644 --- a/testing/README.regression_tests +++ b/testing/README.regression_tests @@ -124,6 +124,36 @@ the options being This should allow for convenient updating of tests and expected results. +TEST SUITES +----------- + +binding + + Test binding locations under a principal. + +carddav + + CardDAV related tests. + +ischedule + + Scheduling extensions. + +regression-suite + + Bulk of the regression tests. + +scheduling + + Scheduling extensions. + +timezone + + Timezone tests. To run these you need to have run: + ../zondedb/update-tzdata.sh + which in turn needs a binary called vzic. You build this from: + https://github.com/libical/vzic + WRITING TESTS ------------- diff --git a/testing/normalise_result b/testing/normalise_result index e7addb39..67b6460e 100755 --- a/testing/normalise_result +++ b/testing/normalise_result @@ -57,6 +57,10 @@ while( ) { /^Content-Type: / && $no_content && do { $_ = ""; }; + /^HTTP\/1\.1 100 Continue/ && do { + my $swallow_next_line_as_well = ; + next; + }; print; } diff --git a/testing/tests/binding/1030-PUT-whole-subcalendar.result b/testing/tests/binding/1030-PUT-whole-subcalendar.result index fb257cdc..03bfc26c 100644 --- a/testing/tests/binding/1030-PUT-whole-subcalendar.result +++ b/testing/tests/binding/1030-PUT-whole-subcalendar.result @@ -1,5 +1,3 @@ -HTTP/1.1 100 Continue - HTTP/1.1 200 OK Date: Dow, 01 Jan 2000 00:00:00 GMT DAV: 1, 2, 3, access-control, calendar-access, calendar-schedule diff --git a/testing/tests/carddav/2003-PUT-vcard.result b/testing/tests/carddav/2003-PUT-vcard.result index 58ba3614..1e22162d 100644 --- a/testing/tests/carddav/2003-PUT-vcard.result +++ b/testing/tests/carddav/2003-PUT-vcard.result @@ -1,5 +1,3 @@ -HTTP/1.1 100 Continue - HTTP/1.1 201 Created Date: Dow, 01 Jan 2000 00:00:00 GMT DAV: 1, 2, 3, access-control, calendar-access, calendar-schedule diff --git a/testing/tests/carddav/2014-PUT-vcard.result b/testing/tests/carddav/2014-PUT-vcard.result index 8d0f4a00..fcc35b80 100644 --- a/testing/tests/carddav/2014-PUT-vcard.result +++ b/testing/tests/carddav/2014-PUT-vcard.result @@ -1,5 +1,3 @@ -HTTP/1.1 100 Continue - HTTP/1.1 204 No Content Date: Dow, 01 Jan 2000 00:00:00 GMT DAV: 1, 2, 3, access-control, calendar-access, calendar-schedule diff --git a/testing/tests/carddav/2016-PUT-vcard.result b/testing/tests/carddav/2016-PUT-vcard.result index 37a63723..e2a4050f 100644 --- a/testing/tests/carddav/2016-PUT-vcard.result +++ b/testing/tests/carddav/2016-PUT-vcard.result @@ -1,5 +1,3 @@ -HTTP/1.1 100 Continue - HTTP/1.1 201 Created Date: Dow, 01 Jan 2000 00:00:00 GMT DAV: 1, 2, 3, access-control, calendar-access, calendar-schedule diff --git a/testing/tests/carddav/2017-PUT-vcard.result b/testing/tests/carddav/2017-PUT-vcard.result index 55551b1a..904e0a7e 100644 --- a/testing/tests/carddav/2017-PUT-vcard.result +++ b/testing/tests/carddav/2017-PUT-vcard.result @@ -1,5 +1,3 @@ -HTTP/1.1 100 Continue - HTTP/1.1 201 Created Date: Dow, 01 Jan 2000 00:00:00 GMT DAV: 1, 2, 3, access-control, calendar-access, calendar-schedule diff --git a/testing/tests/carddav/2018-PUT-vcard.result b/testing/tests/carddav/2018-PUT-vcard.result index 535da179..da2a24df 100644 --- a/testing/tests/carddav/2018-PUT-vcard.result +++ b/testing/tests/carddav/2018-PUT-vcard.result @@ -1,5 +1,3 @@ -HTTP/1.1 100 Continue - HTTP/1.1 201 Created Date: Dow, 01 Jan 2000 00:00:00 GMT DAV: 1, 2, 3, access-control, calendar-access, calendar-schedule diff --git a/testing/tests/carddav/2038-REPORT-addressbook-query.result b/testing/tests/carddav/2038-REPORT-addressbook-query.result index 99000cae..154df3bc 100644 --- a/testing/tests/carddav/2038-REPORT-addressbook-query.result +++ b/testing/tests/carddav/2038-REPORT-addressbook-query.result @@ -65,6 +65,363 @@ VERSION:2.1 UID:a nice UID REV:date END:VCARD + + + HTTP/1.1 200 OK + + + + /caldav.php/user1/addressbook/F06EC844-EACD-4ADF-8823-588603991E04-ABSPlugin.vcf + + + some valid etag + BEGIN:VCARD +VERSION:3.0 +N:McMillan;Andrew;;; +FN:Morphoss Ltd +ORG:Morphoss Ltd; +EMAIL;TYPE=INTERNET;TYPE=WORK;TYPE=pref:andrew+davical@morphoss.com +TEL;TYPE=WORK;TYPE=pref:+64272332426 +PHOTO;BASE64: /9j/4AAQSkZJRgABAQAAAQABAAD/4QBARXhpZgAATU0AKgAAAAgAAYdpAA + QAAAABAAAAGgAAAAAA AqACAAQAAAABAAAA2qADAAQAAAABAAAA2gAAAAD/2wBDAAIBAQIBA + QICAQICAgICAwUDAwMDAwYE BAMFBwYHBwcGBgYHCAsJBwgKCAYGCQ0JCgsLDAwMBwkNDg0M + DgsMDAv/2wBDAQICAgMCAwUDAwUL CAYICwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCws + LCwsLCwsLCwsLCwsLCwsLCwsLCwv/wAAR CADaANoDASIAAhEBAxEB/8QAHwAAAQUBAQEBAQ + EAAAAAAAAAAAECAwQFBgcICQoL/8QAtRAAAgED AwIEAwUFBAQAAAF9AQIDAAQRBRIhMUEGE + 1FhByJxFDKBkaEII0KxwRVS0fAkM2JyggkKFhcYGRol JicoKSo0NTY3ODk6Q0RFRkdISUpT + VFVWV1hZWmNkZWZnaGlqc3R1dnd4eXqDhIWGh4iJipKTlJWW l5iZmqKjpKWmp6ipqrKztLW + 2t7i5usLDxMXGx8jJytLT1NXW19jZ2uHi4+Tl5ufo6erx8vP09fb3 +Pn6/8QAHwEAAwEBAQ + EBAQEBAQAAAAAAAAECAwQFBgcICQoL/8QAtREAAgECBAQDBAcFBAQAAQJ3 AAECAxEEBSExB + hJBUQdhcRMiMoEIFEKRobHBCSMzUvAVYnLRChYkNOEl8RcYGRomJygpKjU2Nzg5 OkNERUZH + SElKU1RVVldYWVpjZGVmZ2hpanN0dXZ3eHl6goOEhYaHiImKkpOUlZaXmJmaoqOkpaan qKm + qsrO0tba3uLm6wsPExcbHyMnK0tPU1dbX2Nna4uPk5ebn6Onq8vP09fb3+Pn6/9oADAMBAAI + R AxEAPwD6Nuf2mfHfju2aDwb488cWzx/6uf8At+6AY+/7zJFR2fxp+IXhvwg7a18U/Gmoar + 5x3+R4 kuXWL0UjzOOPXBr5s+FF9c/EnUp9GfUptK0bSxC2rtA5S5uWlz5dsjj7gKqWcj5sY + A6mvdE/Zo8F eD7iGf4TW82lXd1bnzw0ZKSknuScsepyfwruhR5IObdj1YzVWoqcUi6/7TPx + JzgfEHxx/wCD66/+ OUwftMfErP8AyULxz/4Pbr/45XOa3oF94akxrEOIz0nj5jP1/u/jVIR + 7lyvO78qyjKMlc3qYdxvd HdaN+1f8StJug7eO/F9yp6pNrNy4P5yV5t8eNG+LvxjuZtX/AG + df2gfjF4U8QyAltGn8b6mdNu2/ uxHz/wByT2xxWjHHnHr2q/o9jNdX0EdgG86RwECjkkmui + KUnoTQrTwdT2lPR+mn4mJ/wSb8eftBS a/8AFHUP2iviL8Ur650RY9MttP1nxTfXsUM+Gd3R + ZZWCnhBkdj719g6b8VvGlhpdrBP4u8TzTIix s76pOS7dyTvye9VNC8OQ+HPDkjiKOO+1N42 + vJFHM8ioAWb1OEUUxIPMu0DAYUFzj/PvUVYq6ujqq VvrlWeIlFJvolotDWf4t+Ln+VvFniZ + WB4xqk/P8A4/Ug+MXi9WVp/FPiJGXgMNRmKN/vLu/WsWS3 8wncAcfpQLd05ALr6d6zi+Rid + GEuh0bfFnxVdFQfFPiOCU/dxqc2x/od9Zmp/EbxvExNv4u8Uq2f unVZ8H6HfVBLcoD9mIIP + WNvun/CrNrNkeVKpcH/lk/3h/unvW6cJoydFRW2hRb41eNoXKTeLfFAY dc6pP/8AF1Inxt8 + ZZw3i3xP/AODWf/4up7/w9DqcZa3+bHVejpWBfaDJZFiQWQHrjkfUU+VLoR7J PVI34fjV4w + 7+LPEx/wC4pOf/AGerEXxp8X8Z8V+JD/3E5v8A4uuNCkdPpUsUhU80WRm6S7Hbw/GP xaw+b + xT4jz/2E5v/AIqrEPxf8WHk+KfEJ+upTf8AxVcRFcDHB5q7a3fQtzVLl7Gcqa7HaRfFrxUe + vifxCf8AuJTf/FVZi+K/ik9fEviD/wAGE3/xVclBIp+7VuCQE/N+dXyx7GMoHVR/FLxPj/kZ + Nf8A /BhN/wDFVYh+KPiZ/wDmYtd9P+P+X/4quYj6DPSrERyevWqjGNjNxTOoi+JviQn5vEG + t/X7fL/8A FVdtviV4hB/ea9rR/wC32X/4quWgPTPrV2AZaq5Y9jNrodXB8RdfOM65q5/7fJ + P/AIqr9t491xvv 6zq343kn/wAVXMWw5BxzWhaL0zVKMX0IsdFB441pz/yF9UP/AG9Sf41dH + jDWMf8AIW1P/wACn/xr DtFwcVc2j0rVQj2GnY/OHVP2YdL8S+K9X1fwlqV3obaldRy3EMKg + xTPEuI5MdmCtjivUPC3hFPDO mpF58t1MFAaaQ5Zq+dP+CbPxj8bfFjwdf/8AC2rGSwmsHEZ + SY5dyABkd8GvqWKIk5HcdK8HFe0pS dKTvY+mwcKbgqkI2Kc9ms6lZVDAjBBGQa5HXfhTBNK + 0uhk2kpySnWNj9O34V3XkEnLUNB5gOBXKp OOx6TSkrNHjd7oN7os23VoWT+645U/Q16d+zx + 4Xh1DVbi7lQSS2ygcjiInoPrjn2zWpdWMX2Vjcq rKoJIIyK7L9n7w4tv4PF15YWTUJWnOBj + IJ4/SvSwdR1JO62PLx1CNFKUXubmux+UbaH/AJ5xmRh7 scD9BVG0hy87nsFQfz/wpbXV28S + atq8xCiC3vntICP4liAUn/vsP+VXbe3H2BWI5lZm/XA/lVVZc zuYULOKt1Kiwk47U9bc9+l + Wktznnr0p4t+fasWdKKTWYPQEHsRSSW2VxcqWBPDDtWkLbdinfZwRg jr2qLlLYzdkkBBfdK + qjhwf3i/j/EPrU4Md9HuusMBx5qDAHsw7VZax7xnn0PSoXtlMv7tjDORgEf xfh3FWqzjuQ6 + S6GTq/hMffhCoTyCPun/AArDudPktZNtwpUn9a662vXiupYHAjZAGOeYnB6e6Hg+ 1Sz6XDq + SFCoWQjPlN391P+FbxkpK6MXE4kRnrTo5Cg4Na2p+HZbJ8wgso7H7w/xrNKYb09qG7EOH cf + FetGPmq5a6wA2HNZjdajdypOKpTM5UvI6u01RXxzxWjBOGHymuCjvGjbIY8e9XLPxRJbt8+S + B3 rRTMHQfQ723lGcVo2pyRj1rjdP8AF8MoxI20j1rX0fxlY3GrW9nFMrXFw21FHOTWikcs4 + NdDsLUE 4FaVmmG96q29o6kAjB/lV61gKkE1Sepm4GhZrk1dC8dTUFlEABV8R8VvF32Iasfi + n4F+Mviz4KeG NGk+H6x+IIZbqSDUPPP+lS7chTGf4x8jNj0ZcZJr6y+Dn7QmifFDwVYajcX + EOmXt1K1q1ncOEl89 eGRVPJ618XeJLa5l1vwzofhNngmskikiGcOssxQw5PYiMWIP/XRq9A + +GusmPxHqt34Us7Fl8PJLN Y30sQeYqWSKIZPeQ/Zj/ANtmrPHYenWjzJa738r2V/Xp1sZ5b + mtWg+WWq2/C/wArep9qIgYZ7HpT lgBA7V4X4C/bIiuLaYeM7Tb5MHnrJEcb0yApIPdt0Z/4 + GK7o/tSeB9K0ywn8a+INM0Ga+IUW19Os csTEKcOP4eHXk4HzCvCq0J03aUT7Khj6FZXU0dT + 4oZotNaOHO+4IiXHqxx/WvbPBmmp4f8O2yHCp Zwbj+AzXjHhyW28c+NNCTRrm3vLORzdCWG + QSI6qOCGBIIya941Rfsfh6bYELTAQqGGQc9f0BrtwU eWm5PqcmYz55qKfQ4/S9HXSNHWGyX + H3pCOu53Jdj+LMavwxr9miSM58tAv6VmrFdaTwrEoP4JGLI fo/Vfo2frV2z1CK6lEcwaCY/ + wPwW/wB09G/CokiadtEWRDzzUq2xxU0cZ/j+Ye3Wp0jDdOahnQkV RbZ+7Tzb46iraRYwAPx + p6w57VDKSKYtSBk44rPurbzPEFqP7kbsf0H9a3GiwORXLeJvHOl+D9cNz 4ou4rS3WDYHc9W + znAHU9KiWhVuhctbbN/ftIMhSi/kuf601rMqn+j42/e8tugPqD1U/SrOg39vrl hNeaRKJ4L + li0bjIBGAO/0q7NYrJz0Ydx1ojJrVCSUlqZf2oSjZdo0g9D/rU+n94frWfqnh2O8iMt kQ4/ + vKOR9RWvdWIYf6Qu4Kchh1FU5kkt28xSx/6aJ97/AIEOjfzreNW/xESpNbHGajZS2Tfvhlex + HQ1nTXOMktiut17UopoSJlQMeN68o31HY/WuG8QWcltuaJsL125/kacpWBUXJXHT6moB3NV + KfXVQ nJFc5qWvi3cqzfN0x3rLudVMsJk1GQRxDnk4/OodRomVFHTXXiySQlLQjjqx7f41q/ + CHxhZ6b8UN J+3O00gnyyj5mYYNeSan4vkv3MGhkxx9DLjk/wC6K2/g8v2H4g6Q7kkm6QMxO + c5OOv41yyx3K+WJ r/Z/uuU9D74tLa18RWS3GjSK6n07exHaozYNDJtkXDVyOkzXOjXXnaVI + Y37gj5XHoRXeaB4ks/FK rDeKLe8A+6T191PevTw+LhiFyvSR5OKwUqGq1RFbQlT7VcGcd6l + n017A/P8AMh6MOn4+lHk/Wu5X WjR50j8kdH8T/Dj4va02rarDL4T8SSROq3cTb7fzWjKLIV + PdSVYdOUX0q7c/s9at4G+GV4vhWW31 UareoBdWJ3rFAikRFsdMPJGx9BbD1FfKUvh3xF4P+ + PieA9A+0a3eSaWmprmLaVBRJPKPPLBZYsnj lj6V6Z8Kv2mNT8E6jHFYXl3p1ypAe1mBAI90 + Pak17WOj00+7p6Hnxw0FLnirPXbbXd22v59ToTpE N8jxuDDBf3KwjcMeXbQqGc/grj8bc+l + fLPxE8L6v+0J8TfE+tw38tuxuTGtu0IljfZl2DDrwZNnB H+rHpX3lF8WvBvxn057T4macdM + vpYZLddS08BSgkVlYlehyHYf8AAjXndn+xHrvw5tJtQ+EWo2vj HTpvMkeS3G26G9izF4ick + 5P8Oa7MG17VuTtppfv6/wDDGeLpclDkaum1e2rUVe+nm30PO/2I/iHr /wCzJNa3HgXVXvrq + 3R1u9PnkY20pZiflQ8x44AxxgfjX6wW3iLUfF1j4EfXbQadeXemNrN/ao5dY HaNEWPdgZwZ + H7fw1+fn7GnwktvFnxxbRtcgCXWryRwuHj+ZERi8gwRw3A/I1+m2vWytr8/kooW3R LZOPuh + Rkj82P5Us2jy8seTll18/61N8jptuShV56d9PLuvyMSSIlm2oXVU3Ed+uP8aqHSLe+RhAQ A + TkxsuVz9O31GK3I7YpHKx6swUfgM/1qCewSc5cYYdGHBFeFdp6H1qSluZEX2rSXAB3Rj+GVi + Vx7 SdR9G/OtO11GO4kCNmKYj7j8E/T1HuKjlml0xHN0BNEP4h97H071yni/4haZpVkDFdwQ + vJIUW2kX JY4znacbfqMUpW6jV4bHb31/DpFlLc6pNFBbQKXkkdgFQAZJJPQVx2h/tLeDfEO + rrYaTqqy3EpIh JgkRJ8dTGzKA4A5yCa+Ov2t/245hpmr6KmV02yeGK9dwZVILKZArj+Hy88 + EEnJ9K8W8a/tpTvpmn DwO9nYOBvjvrhzJ5mekrL0XGfU5z2qGmmS6rufoV8X/2xfBHw8e7s + LzxDp39o2S77i3WYGWBcEkk Dp06V8I/FL/gojH8Q/Gd5DpKxX1lbzRyC3dWdn43Abh04+nP + rXwT8cf2ttQ8K/EvVYvFN4ur3l4j JNNHhI5VLMygBc8EuxOf6V4NN+07rei3k62Ny9rDOAC + I3OSoOVBPfHvV+yja8tjOWJSXxWufvR+y r+1Nc/EbxPFENRl02xihE0Vi0gJmLMCxYjgjB6 + HHJB7V9gaB4lsfEtuW02aOR1JV1DAlSOxxX83f wf8A25byw02wNxqE9pc2S7VklzjHbkc49 + vevtP8AZc/4KKeIW1bTyusWZ3EbjaQlVfngMp+979Kz lh/ZJtbGscRe3+W6P17ltwVyAD71 + QvLTZkxcZ7V4R4G/bot/FWmWokSFbl5PLkEf7wg9ztyOPzr3 Lwz4ih8W6LHdWjI6yruBUEB + h6gHkVDi46s6ozUjkfE0eLolD5Uh68ZDfUd643xBftBG0cwEe7sT+ 7b6H+H6Hiu/8TW4ac+ + YM/WuB8WWhIZc5Ujoa5XNwZ3xgpRPLfHviy00m9UbWe4wQI9vP5+lcrJe3 fiObdqTAIOViX + IVf8TW78Q9OV3tGAztkdCfTpxVHTbbaBtyccVx4qtJy5U9Dow9GKjzLclsbMRqM D61veFGN + j4jsJo+PKuEb6YYVn28JA5XNXbRjDcowAypB/KsqOjQq12mfbkMO4ZxwwzTmstxVo8qy nKk + HBB9Qak0c/adKtZRyJIlYe+QDVsR4H0rqSsea1ojY8LeOntALbxKPNiPyiXGf++h/WurSw0y + V AyTJtYZGJeMV555IYncKT7IO3HtnpXo0swnTXLLU82tl8KkuaDsfjt+zxqsnxU/aP+JPiy + X91JbG LQoXA/1ElwxklVT/ALEc8i+32celW774IaD8Tf22fF2teJDJFpXhrTLeG+USfItw2 + JJOv3QkZlGO P9Sa+gf2bvgx8OvDWmy/8Kr1c6gt/q82t3iXTATzySH5l/75eZR0++PSvKV+ + Gfifwr8CvFf/AAsW wnsfGnxX8Tz2rw4yYxez+UoUrn5Vga7bI7MK75c1NtR00SPnOV72PP8 + A4Y/A7xj43+F1r428AWkV 1p2qvLc2+lpNm9gtS7eUxRuWDJtYYycEVteAfinrXgrWgIZL3T + L2BsNGwKMD6Mpr6J0fwJeeBdDs oLW3ls4LSNY7eSL7iKoAADA4HQcZB9q0dRi0zxqkafFLR + 7LVmiIKXuzZcRqP9scn8ciu1Jvrc6lQ a2Z7R+yF4Ai+MOu+HPinrmlxadqtla3NndTImxdS + OFWObb/eCmUFu/HpXsUcZuY2ncEG4dpjn/aJ I/QgUfCLxOuu/AeK80uwTS7J4zZ6dGihA8I + IiR9oPGTuIHoAe9XbuMQwFY8AAbR/KssS72X9ehvg KMaTk4rr+JmG3K26D+9lvzqhq95FpF + q812dqKMk1uXUW18L/AAjA/CvFf2zviJN4E+FV7/YiySah Iu6IxttaIDktn6ZFcTV9j1XLl + Vzzj9qf9tuD4TweXplncXUkMu2cx4PljB4/3uOlflX+2J/wUa+I +seNNZv/AAT4uuItFd2W + 2gi0+JWgQ4+QyFSSeOSD1H0r6H+Jsmr6zoWoQ65NqH2+4GYYZYSY8MnS Qjq3OSRmvjH42Q6 + NoPg29efVFEMCPm1aZZSk4bBL9O44XnpnnIqoW5tjCs1zas8/+GX7XviW+8Wy x+OtUlv7a4 + cSyQ3LkoeMHgnk4x+Vc38Xfj63hq6vLf4d6kXtnMkawyR5EKsQTsbPTsOOlef+DPAO pfEPW + JrjSVeC08wlZNuAR7V39p+yrNqcDfblm8wnhvWtJuC6HoYXLcZmFO9OHo3+Z4TrPiC48Q3s + s93IXlf5yx/lULIbpPOib5j95T2r3Zf2MrkM7tKY1Xr8pxipNO/Ywvb19sDuT3OzrzWN01ds + S4Qz B3cl+J5tompQad9meaIXS4ACbiN3HTjtX0h4G8R6Kh0d9ImS0uvIZJlQ8BvlwPfv1xj + ArD0v9iTU dPzLZShZkX92JV3oT7is/wAOfATxT4M103N9pjRy26yOMy7ophg8KMdec1q60Z + WRU8lxeFsqkfuP tf8AZ98U3hlsJtF1HyNQmcQoYmyQmQDx64yc+2O9fXPwB/aG8Q/DTxpba + LqGvDWrC8Ls0d7AElic EAhWXrnp3HBr8sfgX8VvEvwo8X2qzRCOSbDB2G5kU9NpzgDmvq3w + H+0Zp194zsZ9eivNtmPN3uAZ EbI7gYxjPH+NZSiptKxzSUqV0/kfqdc6umqFCHQtLGH2g/M + n1/Oua8U2u7JHoa4n4U/G/SfiHaWt 5pWoWzyugTarhW/EZ/T2rv8AW0JiUsOSK8qrFp6ntU + JKUVZni3jrSPscEW9ifNuZnHsCRxWbaL5e 0LXT/EyLNlZMcE+fMufyrnrZMgZAzXDiF+8+R + 1YXWl95YjJB+Xj1qZPvjp+FNVdp7D8acMbz14NT DdNBUR9v/Dhv7T8AaLOOfNsoW/8AHBW2 + bQha5v8AZ8uvt/wd0Bic7bYJ/wB8kj+ldutvvU8V22ue Yo+6jMW2/P3pfJx2rR+xkrkDmmm + 1bPQ0WMZKx+A2mX/jv4WRWF9cWd9LZ3lst7FcW5LOkbM4Uvt6 E+WxA9CD3Fe5fCD/AIKH6n + or20fiV4dTjt3DpHeIPMjYcZUnow55616bDYR2WkW7RwpNYRqLi2iI 4a2tUHkD/gf2K3Hv9 + p968X/4KIfDXRfBPws0i30azT/hIrk2mnW86JiQzyMXkk46ny7aU8/89s19 GsSp2jKP9f12 + Z8ZHSV1ofXnwy/bN8D/FKJYdRmGi6hMNp34COffsw+tdr468DaInhN9WWezitHG2 O5t3ESu + 5HyrtPyFj2AKk9ga/Kz4W+ANfbxjouh+G7s3f2+8uIhPMScxRSLEHGPVzx7MK/S39hz4f a5 + Jd3fh3xFEmteF5ozDqcU+WgO1soyk9G3KGXHIxmtuRN+49dzoVWfLe3kfVWquPB2jeCvDemx + Ig dT5ijpHHbwgE4/32Srkv7yaNXA5bJ+gGab4o0k3nxJS/lkLfYtNFoqH+FpJPMdvxCxinR + YN028/d j49SSf8A61c1Z3k/uO/Cq0SvK3zYY/Svjb9s/wCLhvNTvoPDmp6TEunCWKYSHzJG + 5wy4+6OmOa+z Lq3Ei4cZ9a/Fj/gq58R/EH7L/iPxdp3gvxTPZxX12b9o5lWWKQSMfkUEZDg + jkZIJ578YqPM7I6qk mle2h5b+3x/wUv1Hwbpq6P4VuI/t7ECaMWrxowwQDuLYxjHCnnvXwz + 4MPiH9qf4kPc+L7uSSxifz Jwo2RL6KqDAz7+leffE3xtf+PvFEt3rV/d6jcztlnmfc2T29v + wr6s/Zq8CQeCvBNrEqqLmVd8x7s 5/zitHJUV7u5tk+GeYYr3vgjv59j0XwN4I03w9aw21hb + KiRLtA28Cu1stJiZM26qMnnArDsm+zRI zHORjGOldDoVwWQgnv27159Rtn67l9KLSS6Ej2k + CIwlQN2PHFdN8PNDtZrxVu4kCdeBWVBpHmlTK uVfnGeldX4Wsi17CsKgpjDc4K1F0j6KlKn + CJ6XpPgHTdQsszW8TuThTjoK15v2b7DxFphjlhB342 sAMqfasPw1rn2W+WMlkBO1RnvX0t8 + HPBEviAQlA8nmAEhRn9KuPvaI4cVGl7N+0St5nyD4+/4Jxy eI/C14loxt9Qs1aSzcIdr9Tt + 9gTXx58Pfi1c6B8RLzQ/HhuLKaycwSxOv+qdDjbj3P5g1+/OmfDl YNKeO5hV14XDivxL/wC + C8HwIj/Z8/ai0/wASeHbVrW18XWLFwowrXMLAN+JV0P4V2Qbtys/LuIcJ Spr29NaXs/8AP9 + D1L4U/En/hHvEEjaB4nSxv9SgGLZosAtnAzv8Aug+tfbn7PXxv1jxoq6f8QXga /Vf4F2grj + Ckc98c5r8cP2Y/G8nifWreC0sby+uJmBu2aQMwA6DJ+6o49q/U/9hp5bjw/qs+oLE81 sUSN + WkDPbwgk7F7/AHhnP0FY14JwfNujw8LWm6istD1z4ihZtMtyjZ2Xcqn6+lc3bR8DvW54ztjb + 6QxY5WXUZXU56ggGsS2YZG2vDxK9/wCR9Bgr+yu+7LCLjhiaeOW5HOeTTUUk8fnSoTkjoRW + KKqO5 9h/snXP2v4Kabg58mSWP8nP+Nep2q7+2K8Z/Ys1AT/COWPvb38ox9Qp/rXtNkcqN3N + d55mys+7LM MOcAVN9gB7fpSQD5uRxVsNgU0jJ6H5x3Hw4uf+EztLEWMtrYReTbW6yLx5MI8 + 3H1P2bTk+rsPWvk f9vHxoPEn7SWi6Pp7ebH4cs7nXiBypI/cW2T/tC1jIH/AE3961vgj/wV + B13RkhtPEdxFqsKYXy7l dsgH41315c/BX9o7X7jV9UjvfCHii9hht2vIm82BliZGjUxk7do + MadCMhRmvoHhJRlZ6/wBfefEU 5X/qxyn7JHgR7H4l3lxJEzReGbCLTUJHPnKglk/EvND+Vf + q78DfACeBfAekaesapMsCNOQOXkIyx PvnNfI/7Hv7Lf/COTpGviDTPE6ahqpv7m7gHlvIrS + GVt0ZPBJEa4GQAor7tCCws5ZXOBFGSSe3Fd OFg4OU5eh1yklCMV5s4e/wDF2kaj4z1Gy0jU + 7OTUIpR59oZR5sZ2rjjOR8u386fdTCJsX0bRejMP l/766V+WvxZ+KV34k+NXiTxBpl3NBLe + 6nNLFLE5VggfamCP9lVr0L4Yf8FBfHXgWNbbWruLxBYgA NFfAmTHtIOfzzUzpRqa9S6OM5N + JLQ+3/AIg/EFPBrWMEbxPd6nP9ntEkfCu2xmPPsEJ9+B3r+cH/ AILVfG6++KP7ZfieM6ot9 + o1hdNbWrx/6vcoHmAAddrEqD3xnvX6Kf8FRP+CmsXh/4M6B4j8D6Ze2 eq6feSRtCHAEEkke + ElVwMEAqwIKjO6vxT+M/7QeqfGG0tbbxHDYA6fPcSx3EUGyZ/Ok3srkfeAbO OmMmsacHSbk + /Q0r4pSjo9DkvCWnrqHjCyjPCvMpOTyBnrX2z8PiFsYVUZCgAc9RXyH8A9AbxL8SL SPqq5d + ++AP8AIr7H8IRQ2wRnLKiMBXNXezsfUcLQtSlLuztIZkuLbGM7cZOOtbXhyMCZWj3HecAe l + cxDqlvJcEWU0ZPQgHGa3vDc88dwAVJSTkcg4NcUr2ufpOB/dJOWzPR9F0P7R+9fkR8le5q94 + fv1 tb6aSQkAAgDH86zNF8RL9jLuQoC/Mc+1Q+GLs6zeSR4ByxYkdwK57NJntdLt6HrPw80F + dZ1QPcnK jawPevtH4K3h0PRVihi+YqqqwHOTXy7+zjoUeqZChdh43E56da+qPhtd20SwKpH + lxHO/d9444I+l duHukeZmlSM4ci1sfQXw7tf+EliWPbmKBAc471+UX/B0/wCDUX4a/Di9g2 + I1rrd0Ax+9tMKgj9Af wr9eP2cdOXWzP9j+6FAGP4q/MX/g6J8Lz33hHwBodjB59zeXN3dLt + XeYyFABxXpOnzcrW5+cZxXX s5Um+x+W37Jt9FqUMdqsn2K9sD9qstQjH7xeu63fjDoxGQD0 + Nfqj+wv4lvfFrXMPiC0hivo7YFZo ovKjvIA3Lbf4Tlun86/Pj4Efs6PCNBl8KLcww3YSSaQ + j5Y7xAwKj1RgM/ifSv04/YN0tNS+G0erX dt5Vy6vEjHkqu750J74ZePbFcmISim2eFhXzyj + Fd/wCvM7f4kRpFoFusYchLpgcnPODmuUhAA7c8 Vv8Aja5mm0a58wkrFqkir7DBrnoDnH0rw + MUrzXofTYP+F82W4+Op7UPKF6dKjBJGfzpC27gnpWMY 9WVNn0/+wbc/avCGuwZOYrxHx6bk + /wDsa+g7aEgZ7Gvmv/gnveCW88S2rHjZBL+rj+tfUlvZbkBF dyWh5j+0vNkdswEnzdKvADH + Sq72JRjjNJ+8HrVpGLPxLtvg/4D+JerfE/wAe+OdPiHh7RJ5jZi3J h22ljbSSuVK4wWWK0j + z/ANNz3rzz4MfA/Vte8E+DtQhv/KvNf0w6rc28gwtpEWmZBnr/AKq3kc59 vWu//aehf4T/A + LBmh+EtJhkGsfEnUbDw5DHg73a8kF9cfiLaKzQ/XFeqeGNCttIvdSygW3gt7bw9 Zqg42Fha + jH1isrtv+2+e9fQYeUnonu7L8O/rf5bnwtRtWS6l/wDZg8K+LE8Y6fZ/DKS8k1MMrjym ICj + g7n7BR3Jr9BP2iPH178MP2W/Ees+JpoW1W10lw8kfyo85TauPq7LXN/sS+BNP8KfDUXmmWqR + 3 OosWlmI+eQA8ZPp7VwX/AAV18cnQ/wBnSz0S1YibXtRijYDqY48yt+qIPxr0cRZJpbGibS + 956n5s fayAVLZ24GSetMkvjHHuRuR2qoztGSsgPB5zVe6nfqn3T2rj5uoJM8m/bW1LS9Y+C + +s2fi8ExCHf F/eRwflYfjX5fXqeXdOFfeATz61+pP7UHwTb45/DufSY7qWynJDpLGu48c7S + MjIPpmvzb+Kfwrvv hV4qudL1lhI0bfI4UrvXPUg8qeOlZSvPbcubvoemfsXaHDI2salKy+d + EUgUHqAQSf1Fev6j4k8yb yIJNuXwyg8n8a8c+A/hK9sfAE+q+Hr+S1uGlZZo9u5ZYxjIHcN + 1wRXZ+OfAc99qbp4etoLUOq7pX UOwGOozyT71zpK75mfc5NOdHDw5I7a/edvfxXttatNoU1 + oZ9o+SV8FfeqnhT4zeI/Duqbbq1F2iH BMcqsvucZzXAXvwO1iSGx/sh5pCFKSiQuUcZJzlf + r0rR17wVNpFlYQ2vkxtbxlbh1BQzEk5IPt0G fShxp9X/AF956tPHY2pN/u+W3no/wPdvCPx + j/wCEwaS3tlZHYhJEU/dOea9Gm1C78FWklyI5NksK lcDGctg18s/swfb5viDNa+GY0uIojg + mQEEsDg59K+8vjF4yv5/2a7PTNf8Nafo+tWzgw6i1ySl1G wKgLHs5bdwDuxuxmuepStU5Fs + e5SzWpHB+2n1dr9DjfAP7bdt8NlS3vY5toOAFPXsc5r6V+Bf7Xm mfEPWbKHTGk2zEKybuF9 + s1+ZPiG41iCS4fbNK9oRtT7PGfNHcnKkg17f+xf8TfEF3erd+HvDwuBb SrF5JQJLPIT92Nc + jd1HOO9bU6SWt9Ec7z2Sm4VYtf9u3/FXP6Jf2KtPW60cTmI+S9uHVuhU5wVP5 gg+h9q/M7/ + g5pmGhfEv4e20bj7RPDLLChXPmRrMpPT0B5PpX15+y5/wULtPh18E9CHiHQnklvLh7 aSG3m + JuYGQcpJAyK6Nk8DLA84Jr47/4L863aftE/tM/ASTQ7qztbCbQ7rUA0U/nTSQTzIiytGB+7 + RtpUB8HIbgba3hze15ls/wBEz4DH4idavUqfZlovl2/4B8XfBzU5dR1DTYtbu30+xjja5SFD + tMMi qygDHsAPq3vX39+w9BewfB/Gs7VCzHygF253IrsSPXLn9a+d/Cv7NulfHj4zQRaLBJY + WtxPE0cSY SSPAIdicEKCVU9OrHAr7h8OfCzT/AITaJHpegQNDHGMsWdneRu5LMSSTisswXs + 6fLbVjy6Lq1ebo jj/ibb7dAJUAFrzcf++TXDW7kgZyO1d58VDt8Ose32ofqDXBRNxkda+fx + Wkl6H1GHfuP1ZZ34Ppi mucnOTk881xfxb+LC/CaxsL68s3vLW4uDDN5bfPGoUtuA78A8e1a + OmfEXTdZ8QLp2jzNczG1S7Zk HyRo/Kbj6kc4qOSVlKxlKpHmcE9f6/zPp/8A4J63234maxb + Mf9fp+7HrtkX/AOKNfY9ooQDOOtfD v7BWofZ/j9DESMXNhPHweuAG/wDZa+1tZmktLNngJD + LzXXT+FM4J/FI09gaUDsR1p32FT1zXzf4G /az8W+M/27dd+EOgaPo80ej+F4/EsEs9w0Mt8 + hmWJ40OCoZS+eRggdRXup8caxEdtz4J8XiReGCW qOoPfDB8Ee4610xi2tDzJ4+jCTjKVmu5 + +ZPx6/Zq1T9oD47fC3xX4C1fw/q/hj4dDU9XNik4W4ut Tm2+QVjIxtSOC3iBzkc8YrY8MfB + 3WPDun6FZ+ILK7SVbma5uWljPUIttAM9OizSf9tfevlDw74Z+ Kfwh1toLlJ5vJcgT2UpdXC + lwWGOcfunPI6DNfVfwO/aV8Z+GmtF8TN/aMSEGS3u03fhzX0lOEcO4 7W/4f5dT5L2fM73dl + b87n3z8JvDaeGvA+m2cahTHEuQB6ivi/wD4KseKT4h+KWkaNCS0Wk2LTN6B 5Wx+e2MfnX27 + 8OfHlp8RPAthremWUmniWAmSFjwGHGVz2OK+Jf2g7u28efFPXJ9SijuYhcNChYZ4 T5ev4H8 + 6WLnZXaKT50fFd7pPzHCkFiazrvTSDheDX0VrvwY0vU9zWDyWzen3l/I81wniT4I6jZMz WQ + julH9zr+RrznU8zoVN9Dxq+t2jJ9hjnpXw9/wUA0Jrjxmt08Dy7IAqPj7oySfw4/Wv0E17QX + sZ JI7yJkkU8qwwePavjX9sbwnN4z+JsGmRTi2t7i0dp5GXKwopHp3J/nWlKaclc0S11PJ/2 + X2/4oq4 juf9XJcPgn69Pxr0mXzrGywiQXaocAuTHIfYkAg/XivM/gfLHZaNNaWmd1rKQfqa + 9Bg1HzrkK3Qn p71z1ad6jufp3D+GhVowUux1Ona5Ppelri2nCkHIS4Rxn2Bxn8a4rxPqk9z + dSTXdk8xI/dK8qbQf U7c/lXaabbx3UQClVQjkZ9q5rxfdpFqC2OlKklyx4Xsvqax5XF2PoM + RlEKFO6k/w/wAjr/2UNCNj raXFzGBdXcgaTA/L8q/S7xh8DIPib+zJp9xNaR3934e23yR7Q + 5aIf6xAO525YDuQK/O34E6XMt1G wf51wTg96/Xf9mzR7rTPgVb3ktq9y6WxYxqM+aNucfyH + 40Jc05dzsxFGksBCC010/r1Pz7+L3wH8 OeHPGL3ngW7jvtHvsTiJx5dzbhucbHAYiveP2Tf + AvhnwtLbaqbG0nli/ebpI2DJ9FzjNef8Axl+M GhfEXxpJB4atTZpBK0XkSJyhBwVKn0IIru + P2bvgTYeK9ci+02Ns3mnlGiU4z+FEIvntE5JZLV+rq cpJq3mtPlc+mQNN8VlJ9Igt7fVVZV + s4VwJbu6Y4RQpJ3Z+X5uwBJOBxJ+3h+zT8KvAvxQ8KeB/DG iaLpGsQ+HFvdQvbeFI7zUZZJ + mG93I3SOXDSEZ6Oexr61/Zf/AGbvDfg3TdMXQ9G0+zu5Yi0ssNqi NtGMgsBmvnj/AIKffDX + SvGH7Qk1x4jZY54raKG0kV/LkTCb9yv8A7Jweo6e9ddOMqdSzlrbp9x+a Zq+fEKC+zd2X9L + +vU4T4IfAy4+Grw/YbxkhkUymURASysfViDgduDxXoXiK5e5cG4YuwULk9SAMf 0rL8Gatea + jo2mT38gRPsyxqUHykjKsfxK7uefmFXNcLYy2CPUV5uLqSnL3jswNKEKalDqedfFO4W Twlc + bCCY7tMgc9q85FwAo9veuv8AiAkseh61uUgNexOn+0No6fjmuBW6H/1q4MRFcyO/Bz5oz9Wc + z8dvB93468PWNvpEZnMV2GkUPsbYyMhIPsWBPsDTfgl8MW+GOhTw6hKbieWXarsdzLEowi5 + PXHJx 2ziuoF/ubH5EVKkxf3qVJqPJ0BxUZOXf+v0PXf2L9SFl+0j4cycee8kJ/wCBRN/9av + vzWId9jKG/ u1+cP7M2q/2f8fvCcxO0DUolP/Ajt/rX6V6jbbrd+v3a7KELwOCo/wB40fEtn + df8K+/4LkfCK+z5 UPjTwdrGhykf8tGiH2hAfxjFfpDz71+ZH7b10Ph9+3X+yt4vz5aWfjoa + RM+cfJdp5JBPp8xr9OGO 1iOePenK8UrHx2aw5a7ufkL4egTUdamtbUeZPcL9lhYDqrkRFv8 + Avzbzt/22r0z9mL4L2Pj34oap qPjmE3H2Kbd9n/5Zljgjd6gDHFeT/st/F/wh438VXa6Xq1 + ms+mxO8dvO3lTnKrGpAb7wEcecju5r 6/8A2WPCg0zw7dag6kS6jMZWOPU5r36ELV+VrZXMo + pKjzPe56F8QPEVv4F+GmqXsaxwxWVsxRQAq gKpOB2HSvzduviwjarJH4lguNOvJWLstyhTc + WOcgnqDnrX2j+3Zr76T8F10yF8Ta7eQWKgdSHkG7 /wAdD18n+NPjHrOoeI72z1xNO1zS45T + DHaalarOiIpwArEbl/A1vVh7V8q/r8DJSjCKcupltq39r WrnRriASkfKThgD71TsL3Upp3+ + 2xR+SnBfo3AGTj65xU9p4c8H6zN5ek6RqPhTUsNIn2G6Mtm+0b m+RwWXgHocVjeMNA8TWNm + l9oDO2mXCsF8yPGBnGd2MHNcdWjys6Kburp3Ll54etta0PZqUUU6yKZ PnUH7xz/AFr4q/bu + 8IeHfhZHqmsapugW8szbKinq2ScLnnnNfYR8eR6JpQh8QNGlwihCY/mjJxxg 9+K/L3/grh8 + cf+E1+IOm+HdDdjb6fEZ7hzxvdj8oA9AAx/GueEE3obcyW6PBPhDr/wBmv7qMsyLO wcjPP0 + /WvS9P1ZGycbUyeQOfyrwbwfqBs9SGWwe3vXq+neK7W1tIvOl2kL0Y9/StHPmvJH3WQ4qU a + as9j0mXxJbaFo/n3cuFUAY7k15T4t+LP2PXpdTwRIU2CMNzj1+tcv8AE/4kG/lEdizeWp7Nk + NXG y3P9pSrG7ACcYLnOFb/P86yle19zuzXiH2i9lTd2j6L/AGdf2gZ1Mja7dR2fnNtSWUNs + TnqQoJ/I V+gGg/8ABYnUPg/4H8IaB4MkstR0SyQtqt0ysbiYg/djUkBF24+Zs9+BX5GafLB + bW0UF3OsVxG25 8kkBcDGMdx/WvQ/heYb/AFiyzcmCcAlt7fISuSOT0J7Z45rN6K7Wp5tLNJ + ySp1KjaVvv/M+i/wDh ou68RfHTWfEUZigTX9Qm1BI0I2RGWQsVH03V+hX7CHxDbUdXsJXYN + 5rBTnkZr83vBPwgh8VWV81k Vt5EEctqA+dpMe4ggdBkdsYAr69/4Ju/FGPSpHtdcdIb3TnK + yRSMBlweik9aVKoozTeh9dgs4p18 J7FK3KkkvK2n3H78/BZ7VPBdtfvLGALYPITx5Y7kn0w + K/OX/AIKefEhdf8Xa3qDXBexwlqoAysKu +Cw+o8sn2Fe7/DP9pc2HwevJxdwiPUFWBInbO3 + apDjHpk18Tftg36+I9B1YX95I0EiPceSjZLSrH 8uR3Hy89sL+fVZKpJ3u3+B+aYuhKFepUk + 9W/6RwOqftZeIv2b9X0vR/COsJq1gtjHdSi6USxTNJk 7V5yqj7vB5xnuK9F8H/8FFvDHjC3 + jj8b2NzoNw3BmhPmwE+uOo/Kvhi8km1bU5WvJZDjCKgPCqOA B7DFbfh7Q1llXcOO+azqQhU + 0ZnSxFWkrJn354216z8RfDafUdAu4720uWjkjmj+643Yry8ahufmt b4cEQ/sv28S4CRRn/w + BHsf61xkeo5k6/WvIxULTse/gKznSvLds6GO824wanjvSW4Pb61hW95vXI PJ6VcguyRg9qw + UTeUjtfhZrB034l6BdJ8ph1GBsj08wV+r93H5tsxHda/H7Q9SNlq9rKpx5UyPn6 MDX7GaNA + NU0OynTlbi3jkz67lB/rXfhdInl4qpyTTPzp/wCC0sLeH/gv4Y8UW+Vl8HeMtM1UOOqh Jx/ + iK/UWwnj1WxhurVt0VzGsqEd1YZH6Gvjf/gpr+xxrX7Sn7Lvinw14IWNtS1BEltvMOAHSRXH + P /Aa0Phn+3t4n8C/Dfw/onif4SeM7vUtH022sbueKWAxzTRRKjuuT0LKSPY1vDDTqK0e/dH + zuaQVW opJXR+CGgeMPtV1DdWMpguoGykiNhgp6rkfnX1l+zJ/wVR8c/s5yW2m6vMniPw+rc + 2l4cyIvfy5f vL9DkV8F/DjWd00JJLKXOc+legT6kl8oLDIHy59D2r6lU3B2ep83SxEnFXP1 + M+KP7b/hL9rC/wDC F94SuXsLLR5H1DU4L0hGs2RMIC2cMMs3I/SvB3+Pfgm68XajbnxHphk + s7aTUZ5Ek8xPKX75BXOdo 5OO3NfDHi/XtOtdDvtO8U36WlpewmNn83YUBHUHPBHX8K+aNC/ + acT4S6jrdrHMmsNJpN5osEoPyg XEZheUe+xmwPU1hKHLdxZ1JqtZNaL+v61P2C8JftWfCDV + tQlDfETSre8FtILOOS2m23TnHyBwh2k jOMjGepFe16N+3d8Gfhz8KbSPxj428OI1ral5YJL + hd+dx+Xae/PSv5ttU+K2o3FyJ7C6a2xwojJD L+Nc5feJbvU5d9/cTTuerO5JrCfspvVs7MN + iPY3VtD9bP21/+C2vwzj8RR2PwK8FWetRwyE3GoSk 26SH0RV+99SK/M749/F2P4x/FjWvE0 + EL2serSh4bZ38z7OoULt3YGehPTvXnUlwZ5Mhsgc4PapYf 33zgtn19K45xjO6iilVlUdnuX + 9P1No7wmRsuc7SOxrR1HXZUhCp80uMDPIGe1c3HPiQbcnb0q/p7 s98kc2TIflC4yV7/AJ1z + JtO6Ouji5U4OMWTzWOpXJVpoiwzxk4LeuBV7QdGvNQv0hWP5ydwUD86n 0vzNNEFzqRfegZU + TPPJ457d+fpUkHiqSK7jbTI5USJs7ZHyFA68kfzrb2adlexVKrBTUmaUnh20D xrf3ESyhtv + zK2QK9F+G/gizntY7vT5ZbpbQFpGVfRSdvPPQV5zq/iSHUdWOoWax4DCTaw5Y8dMdQ PSu88 + LfF+DwndGzW1mQSr57xR8bmPTI6Dt9PenUpSULRPc+v0lH4I83fU9C8K/FbVNEjiudEt5ZY + 7Z0VygJ3KMgrgnn7xHHY17P8I/GdvJ8QbvU7Kf5pyrNGG27WCjcMD0I6182+CvH8mra9ZrHH + PY/Y 51MaTIBHIf4g+Bzk8c9a9b+Hs0+n6pJdaFbeUl8yGbYo+XHAJ7AE1y1KbvqOlilSmpx + 2P0S8A/HK 8j8IadaGcTW0jPHKjn54flBVj7E45z61Fr9/fWlwup6k0F5C8bQshOd28EDI9C + A3P4V4x8JNYuvi BpsQ0+WS4vLKIiKNEA8zYpJBI6k7SPXgV6l4WZvGWhw2ksw/tEkeV5qna + /yk4PoR/M9KvDrmqbE4 2tGULSZ4z8RPBMei61LLpkTrDI67k6hNwzj8wR+FT6BpskYQmNv3 + gyMDrWN+2rY+OtC0qe98JXUu nXCt5s+yMAsoiRWKnGOkYb8a+Hrn9rXxp4a8SPHLrurF45p + AySzsdo4x7Z69K6nRs7s8ZVmk3LdH 7K+AJWX9m3DKQQr8fSU152l0TJhs9a+Rv2WP+Ci/iI + rFp2r6kZlkygWb5o1zn7wNeq+C/wDgoN4a n8cf2H8Z9E+x75zCNRsW2hBnG5oz1H5Vz1sul + Ud4vU9DDZrGgvZzjt1Wp7pa3GBtJz9BV+G4yBnm quv6OmjywTaZOt3p99ELi0uV5SeM9CKj + tbgkcnJ+leVKm4PlZ7EK0asVKLumbdtcksCG4/Wv2h+B d0ut/BvwlerhvtGlWz5/7ZrX4p2 + dxsOa/Yv9ijVv7a/ZR8Czltx/stIyf90lf6VadoaHh51U5IRl HzPT2iVlwygj0IrNk8H2Tu + xMEJyc/drUp26iMpQ2Z85RxEo394/jY8IeNIdFsxPeTRxRAbxlsYXG c1w/xT/bQur65ls/A + X7i0U484/fcjuPSvHdU8VX+pabb2LzEwxrt68t9awTYOkhB5I5619dXrpfA jihQgnzM3vE3 + xH1XxbdtL4hvJ7tnPO5zwPYViz7Zw7x5OPWoyS3Ocn+VAkVMliR2OK5JVJNXZ0W7 EYYjrzz + TCSxye9KxG4nt2pmfmP6Vxvey3NEhrt5bcGr1oxFucnhuvY4qtY2TahfJDCVDyHA3HAp4 uf + 3RC9+PwqYvl36mkdyS0AF1HuG4M2cHvW1ocmy6nlusRvKAobPzJk5P5jI/GsITmCdXQcpgj6 + 1u G5juo0k2JE0jHDqM7uOeOxHH50Qi5aMpS02NRbZ7aRLnzY7pGHykRkR/7ozya2YdIitor + ybWbaSQ FAURDjaxGST+n51tfDXTrWfQSLy1DpbxSSJM65ZicDgegJJPet3wtpV94pujYXIh + mtLkBZJEA8sl ckcdcYyOO9dFrrbQ7KTaV5fLqeY6laQ2lzts42BjcCJmP31ZjtYjsa6X4co + fEevf2fdyC3e52QAx 8kDIPPfA54rpfF/w8TVVnOmCET6evluQvXCkgDHsMDPOa5b4drep4w + Fxa2a+YjAKCdroT7dT1yK0 irK97F8zpO70PZT8H49KiljhAMrSZMomJlPoSvTk844PNdx4B + lv/AA1plzba8PNW4tjBDcxPhGII Iyex9jU3w2nf4gW8DkpHdQLGswjbO4su1uOh7MD9fw9X + +H3gC20q6/s/xKEMcLAOx+68LAjJI4B4 6fSs6kOfVot12o8tyx+z74gufB8LPo10ReLG3nq + MhUByu7ce/wAy5Gf4vTNew/CzxTeX6Q6iha2Y TK6rI3ILZXIP4fhmvJtI0bTrXwrqz3NqPt + kTLHD5CeX5y7lJDgEDIAH19a7m18drp3gTw8ttEZpk tmhKp8pSRnJLkH0DhRn0rJ0ZwfNEu + NeM1GMo79/62PYodUX4ueBPEFhpkCXl8trJEJLlN4ilbgDG OQQGB9jX5f8A7VX7P+meE9fh + uLoTWNpqEaS2zv8AfiyoZ0JH3grEjPtX6P8Aw18Zt4fiuTay26Tg JciUNtaTK7cfgSx985r + 5i/bf8IWFpo3iPU7VX1GxguHneCOI4wDnCnHCMzqMjGAtdT96PP8A1fQ4 nFwm/wCXz7Hw54 + UNx4H8TWcgkDJNiSJgwO9SxAyOx4/zmuy+MV9LYePLS8tnfF5Akob+Ek9SM+4r zK81e4v/A + BJ9p1pkHmvvjRB8sajsB2AxivVfiPMur+FPDN3cRAhcxYwfkUjdye+Tmrpt6af1uVez 5lts + fo/+wp4yf4v/ALJ/2RpXnvPCOJFU8uIXOCPwIB/Ou0tbnawySBXhn/BGT4xW2har4u0qJYJV + fS3ncOMhljZGKn6jP5V9R/F/wVZ6Iljrng5hJour5aIqSRG45ZD9M1zZlhHJ+2R1ZPjoxnL + Cy7u3 52MK0n6Z578V+uf/AATa1U6r+x34X3tuNs1xAfbbK2P0Ir8gLKff3r9WP+CSeqjUP2 + TFhySbPV7m P6ZCN/WvFatFnRnS/cfM+nKKKKk+UP4HzMwPBPAwOaVrkj7pI9ajU5BDZoA3n + 2HPvX0PM+Tsb2QB 8HK96aZDyFyc03JR+DS54znmuVzve+5VrDt+7ORx3ppXLfL9KQfKc/hT + mGGJB5PepcdL9h7DD8kg 25GOfpU0UgZzI3GOo96gkG49c4pVPTJx3rFKWxXoTRL50wDdWPX + tWhFBKFEahxzhARwc+lVLGMSM DkAL3NT6dc3IuVW0dlfPyjPAP4100Y2SBHuPh23l846XpM + 0SLZWcQbfF9xigLEnHqx49q9N+Gvhs Jo+oNdNC0jRuY3jBCFwowqgjjNeY+Gbu30Lwu73Fx + FFO0Q8133MpLL6V6x8N/E1lfaTBdWV0sUEK CExuCF3Dknbjrk10zg1H3f62/M7o2Sut+pmx + yzS2D22qWoikv4wZC6FGkZWAyOOnI5964pPBqeA/ iPBZThp5J5DP9oZsKgXnC88NgHnrXrO + qeHrnSIkeeQ3Xmv54lySY+/B9CO1QeIfBVr4pujfyr89o RIqBiGcdPlPuTz7elEHZ3T0KnK + 7v2G/C+S08KeMGjnf7MLkBYzI/DqeQw/E/pX0hp2mrNY/6VuWa 4nK253AmUBRnHqrKenqPr + XhOueHbTxFNHcJFCbi1MYkQjZk7RgKfT5T+de1aRZRa7oNkNSmxHbEy W8gP3WU4KE5oi7yV + 2ZvVJs7PxD4Ku9V8Cx2GliJbm1mExQ8tKj7d5B9uOBzxXFDwtr/hj4kSaZPC ptLHU3e6Erj + y5U5yVb+FSpOB/hXouj60+q2to9i8kd9axMZVzhZVUkHPrnKkfWsnW9YE2g2msyMi XF/K9n + IpGBNFtz847MGJAPPFbWV72JUmtJdTZj1x9C0GCRbe3kexbyi0+Wea2c74Wb3Afbnvtpb3 Q + 28Z+HriC6hgtmuLK4syjODC6z4Q/iMg57VxHhpZbvTp7DWrpY72BURJgCYrkR5IBz0IU9uOK + 9J8 F6YukjTYIjMbi+mQxtcHj7y7kKdMA/Nu7g1k6dlYbqe7Zv8A4PU/Mn9oT4A3fgKK51W0 + EK2Vrqr2 kcK7t8YYSEYJHzL+5fn1qOO8e6+AEzzM0ptZUAyeYixYAD2619rf8FIPglfavZa + Xf+GrQS2c5e8n sUjJLPE8iSMNuGJCgk4zwTivjWe3Ft8MdVs2iNtFdXSqMHchxJgAE88Zro + inL3r9iH7yUlu7Hrn/ AATb8fr8LYPGusagiTxS6FPbDe2F3NgAeueT/k19y/sMftKf8Lq0V + PAPiYGaw1TC2b/x2TgcMPb1 9q/MnQb1vCXwt1OG2uf9IluhaL5Ywsi7uSPXOOtfQf8AwTm8 + Sy6F8S9EneWWNo5F3MvOFzxnHfIx +NdlOKmnCWz0+5HLiIunerHdar5I+3PF3hifwR4pvNL + vyfMtJChOOuO9fpR/wRc1Rr74C+JrRjn7 LrAcc/34V/8Aia+Fv2j/ABD4W8ZfEFHivY9L1e + +gjKPIw+z3UmAPLJ/gfjHPFfZ//BFK2vNC8PeP tL1qGWCaK4tJtkgweVkGfpwOa+cxmFdFS + utND2KuNhjsInfXS6Pt8gqeaSp3TeKgryvh0PBnTcWf wOsvzEdfcUqEBhkZ/pSyjGcVFn5m + +tfQvZF7oV05PIphHHSpB9+mt/rT9TWNaXI7FbCHG0Bs+tOP TrSN/Wm56/SlG62AG9R+NIv + zjA5NJL96pLHm4XPrUWUpKJV7K5f0yMIpEqgpgZ55zWx4e0hdV1Sb yy3lxqGOxCCASAcntx + 3rIJwiY710ehOU8JXJUkFmUMQeSMjrXdTSUkOk7y19TuoZIr9Ht7NYfIim UAE58wbcDPsoG + a9R+DNlazaQrTsjK11JGo+9yBggfXIOfavJvhzGr2zl1BJmbkj2FelfApinh692 EjbfNjHb + KnNbVF+75l5fidEaj0a6ux6LpGp3bmf+1IWMEkXkBCMqjLldynvkEce1anhBFi06KVH8 6Wx + zBIf4kRm657kcf5zXOLO41i5QO+0yxEjPB5I6fTitbwMc+MNRQ/cMI+XtznPFcvKloa03eSN + l IFsvEwsbdTPHqTnZlcIH2k/UA449DXR+HGfwj4TitYy19BaqdpVssxyxIPr1/SuasJGH9k + MGO4Sq Ac89DXS6KojtpPLAX9/J0470Qlr9w5SvLbuekfDPxFHFoEsV3M5nYjDlfmUEc/X6V + H8Q9NGn6Npd xcSzQxJeMI3UbwdwDqeOg4Ye2KqRoI7awZAFLRqSQOTz3q/4xjWTwzLHIoaM + SK4UjI3DocevvXXC Xutoycrsx5pBqOh6imqB5LiSIH5G+XduAVgR0yMjFeieDdXk1Twvp7r + NG15pBCxB1zlSp53dsHAz /wDWrznwSxk0OcOSwNlMSDzz8h/qa3LmVoNM0wQMyB7WQsFON3 + 3evrWtSSavYydR6pHbfFn7Vr3h bT7jSNQkjfSI5bmOK4OchsrJg9cbXP1r4/8Ajp8NrT/hD + Nei8OiO1FhcXWo2jScJMvkiSROeVKeW 5Ud8e9fbllZxT/CkvNFG7/a/K3MoJ2HqufT2r5X+ + Ocanwn4wjKjZHbTFVxwp2SLkDtwxH0JFYyl7 PVL+tC1FSSPlP4g3B0jwZ4fgsm3vcwecV/u + HO3/69epfsweLG8OzJNFctHdJGDxwFxzn868b8Ykv JpYc5CcLn+EccCuv+GsjBuGI+Yjr2x + XcpNRsVJ3iovrdnufxy+Od/wCIdASeC9lEsUu8lWO786/T b/g31/4KiR6n4vt/AHxbuPtFx + qUC21nqDnL4UkojHuBk49AcV+Nfi+Rns2DsxGehPtXrv/BLe5kt v2mPCrW8jxsL+PBViD19 + qujCOLg6dRXUrr0IqUVDDuot1qj+t+k2g1Q8KSNL4W01pWLM1rESSckn YK0K+GkrOxC95XP + /2Q== +X-ABSHOWAS:COMPANY +CATEGORIES:My Contacts +X-ABUID:685FC9B6-8446-45B8-89AF-3F3BC70CA03A:ABPerson +UID:a nice UID +REV:date +END:VCARD HTTP/1.1 200 OK @@ -97,6 +454,152 @@ EMAIL;TYPE=WORK:vvh@gmail.no UID:a nice UID REV:date END:VCARD + + + HTTP/1.1 200 OK + + + + /caldav.php/user1/addressbook/mustrmahn.vcf + + + some valid etag + BEGIN:VCARD +VERSION:3.0 +N:Mustermann;Anton;Karl;Dr.; +FN:Überwerbung GmbH +NICKNAME:Boss +X-MAIDENNAME:Müller +X-PHONETIC-FIRST-NAME:Anto +X-PHONETIC-MIDDLE-NAME:Carl +X-PHONETIC-LAST-NAME:Mustrmahn +ORG:Überwerbung GmbH;Marketing +TITLE:CEO +EMAIL;TYPE=INTERNET;TYPE=WORK;TYPE=pref:karl@mustermann.de +TEL;TYPE=WORK;TYPE=pref:+49 30 1234567 +TEL;TYPE=CELL:+49 172 1234567 +ITEM1.ADR;TYPE=WORK;TYPE=pref:;;Musterweg 1a;Musterhausen;;12345;DE +ITEM1.X-ABADR:de +NOTE:Test vCard +ITEM2.URL;TYPE=pref:mustermann.de +ITEM2.X-ABLABEL:_$!<HomePage>!$_ +BDAY;VALUE=date:1969-08-16 +X-AIM;TYPE=WORK;TYPE=pref:bethel69 +X-JABBER;TYPE=HOME;TYPE=pref:bethel69@foo.com +PHOTO;BASE64: /9j/4AAQSkZJRgABAQAAAQABAAD/4QBARXhpZgAATU0AKgAAAAgAAYdpAA + QAAAABAAAAGgAAAAAA AqACAAQAAAABAAAAS6ADAAQAAAABAAAASwAAAAD/2wBDAAIBAQIBA + QICAQICAgICAwUDAwMDAwYE BAMFBwYHBwcGBgYHCAsJBwgKCAYGCQ0JCgsLDAwMBwkNDg0M + DgsMDAv/2wBDAQICAgMCAwUDAwUL CAYICwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCws + LCwsLCwsLCwsLCwsLCwsLCwsLCwv/wAAR CABLAEsDASIAAhEBAxEB/8QAHwAAAQUBAQEBAQ + EAAAAAAAAAAAECAwQFBgcICQoL/8QAtRAAAgED AwIEAwUFBAQAAAF9AQIDAAQRBRIhMUEGE + 1FhByJxFDKBkaEII0KxwRVS0fAkM2JyggkKFhcYGRol JicoKSo0NTY3ODk6Q0RFRkdISUpT + VFVWV1hZWmNkZWZnaGlqc3R1dnd4eXqDhIWGh4iJipKTlJWW l5iZmqKjpKWmp6ipqrKztLW + 2t7i5usLDxMXGx8jJytLT1NXW19jZ2uHi4+Tl5ufo6erx8vP09fb3 +Pn6/8QAHwEAAwEBAQ + EBAQEBAQAAAAAAAAECAwQFBgcICQoL/8QAtREAAgECBAQDBAcFBAQAAQJ3 AAECAxEEBSExB + hJBUQdhcRMiMoEIFEKRobHBCSMzUvAVYnLRChYkNOEl8RcYGRomJygpKjU2Nzg5 OkNERUZH + SElKU1RVVldYWVpjZGVmZ2hpanN0dXZ3eHl6goOEhYaHiImKkpOUlZaXmJmaoqOkpaan qKm + qsrO0tba3uLm6wsPExcbHyMnK0tPU1dbX2Nna4uPk5ebn6Onq8vP09fb3+Pn6/9oADAMBAAI + R AxEAPwDmrj9qzxB4q8F3MniG/uYdSubhYYxa+U9zJGkYJQQNMpbgKwZV4KeormNe+MXiG9 + 0sWN/d 6Zql/qN1NcTzRW6EMXAVV2sg3SKwfPHGW5PU/NXgq90/xwJo9KS61eSaGSUyWqMGj + KqQs8kxJWDG TydpcEqo5yf11/4Ji/8ABJXw38XP2d9J+In7SN94qkuvFVlLceHdJhvjB/wj + 1pKCIrre0Yk+0FPm G8lIw6jYWBY/u9XinDYCEXtFaJRtt2SWiPiaeRYjHSc5Xb6uTf66s8/ + /AOCc37dE3wl+P1t4X8Tv byeB/H17a2d5Yr5cENlLegRwyxRgbV/eyRIyqACkgJ6V3f8AwV + Q/4Ja+FfjN4Pvrn4F6nL8NdY04 Y1WDR1EVjrFsALjDWzHZBOB5bCQFFycMGFfKv/BTD/gnv + 47/AGEfiLYv8B9Q8ReOfB2qrBa6ZqUM fm6noV1BKk8VrflFwCbdNyXRCBwjZAIWvXfiB+2P + b+A/Duup4N1e9Hh+9n86S7vbybUNQuSURRDD NcO5jDFGG4scbSVTawr53G5vg54qONg2lOP + vJdWu6vvbT5I9illmIp0fYJWs9G9jz34JfG/4c/sr fCK60rTtP8Q6x4V0tDfX+vaRYlNaSV + UZ3h1C0mI8uQkvP58D7JI7hXhjYJKU8x/Z2+NGvftT/tDe Evhx+zv4LvdMXVtWj1CHSYIpL + a00m1VjNc3Ny8iARxKhLPIByzhUBMsYLtX/AGpEstYuLnRLSz0X TnhWeC00yFYINUgMkrlm + ZcHzlkklIduI2kkwF3kV9V/8Et/+Chvhb4WfEQ+DfFt5frB49lgms9Vu L15okIAWOBQ5xCr + O3zgYVnkU45NfL8RY1cQ06dDncYRafLZa+r3Vrnt5Vl0sJX9pJpy73Z+mXwM/ Z70T4DaYl0 + n2bVPEbQeRc6rMu1wDtLRxK2TFFlF+TPJQFsnms342ftC2Fl4ZA0LU9Jg1G6uTp3l3 F3DBI + rgB8RtK4TOzc4z/AAhvQVyP7Yvxqv8A4S/sv/EDXvCMkQ1TQtEnubFrltsfmgqEMn96PLYG + PvHg1/N7+2f8V/iN8UvElhoX7U/j2W40HxVfm8xZwSx2kl0EMRieGVikLR5K7gPujjg15tHC + 1MNB 4ijR54Qdm+idtLndmc4yt9Yn+8lt/wAA/e/9k/8AaB079ofTLjxPptzp17b60S8Nzpl + wbmxvVt2a 3MsErcshdJR/tcnoa0PFmiJrniS9uo3nZJJSFZXIDAfKD+IGa+ff+CWvw+8VeA + P2Jf2e9d8UXYuU 8Q+DLcAmNTsgR5BZJkdSLKO359c19c+HLSFtFgMyxu2DlnQbjyetffYR/ + u1NrXb7m0fN4iSp1OVb Dda/4KE+Cvgzby2/iTwv4x8EWcL+WG1HwtJptupHQK4TY/XtwK82 + 1T/gr94O8R6tFo/geeHVdZ1t nttEgs3+0S6rdDGLYQg8kqpbII2bdx4VhXu/g742Q6hZm3u + 7hrceXsdCG2jtjJ+U1xHiv9lD4VfF nxveXet+EdE0zxJDaxyWesaXaRw3ce5jsukeJRtuIp + VVklTEi4GW8suD+Z4vK8YqfNQraLyV38/0 t8z6vA5rhfaf7TR+ab/I8K/4LBfETxl8Hv2LN + H0q10wXkPi/XoZfHeq27iT+x7WL/TG2xn5nLPHH CJT8qLETjL1+MfxN/a3tfEDSyST2sUcy + NG0JYsgh2/djYHCAAcHGCBuxgMD+qn7VfxOuj8KLjQf2 ifF2i23iMajceDdanuRBBp9xcpF + G4ZxLlUW5iaGZAoXBkG0jAr4Q1r9j/wCA3wFuoZPFF38OP7Tm uJp0g1e7jmkZFxwyzuwUBg + cyEBT0LV81VzqpQfJCm3/wD2MZllV83LHmW91trsfFl/8AHqa+04W+ h3s89xYuZbdLUedgN + jKsiqdxIC54zwM5IzW9ongr44fE+HzPhR8OPiRqYf8Ae+ZbaHdKquAWcLvj +bh0bAK45wa+ + x/Cv/BQjUPAHhDVYfhP8KfDsem6JI9jFq6+IZIvC8BkHmRBUsFSA3EuJWSJ503fN txsctle + Ev+Cy3xE8Z/C69YJ4S0Z7ixuLK+u9K0IvqWkxyq0R+xSXU8qS7Hj3/OjttDfNuZTSp4/F Yl + +7C3rJX+655To16TSdO3rp+Vz9DP2s/HvijX/+COuo2d9A3i74iXvgrS9L1fSdMK6jqY1WT7 + It xBJbW++QOsjsrLw3BJPFfk38ItK0j4p/tIaX8Mfi74bsfEs+tasPDM+ieITJYmz1S7X7P + byRvC6S RYkZIGY4eNt25T5YY/d2h/ts+G/28f8Agmn8SY/HJ0Lwx+0J4R0GTXFufD1vHpOp + 362ZM/2zSbzA l3GGBkePLSJghlPmHP5L6h+07ZfGeS58U/ErTru18b6vAJrzVNLmWGDU7tS + omurm2kjISSZN7yTQ uB56RuIxvOP0jhbF+0o1cPXceWT9Xtb7tjzuJqTqeyrNarsf1N638H + 7X4T/Afwt4W8H2UVpZfDnT LHT7G3iZpYoobO2S12IWJZlEanBb5iACecivG9N/ap8G2tr5V + 9rAhmid0eOd3jkQhiCCo6D09sV8 Ufsof8HJY8B+B/DGkfto6DqfifRooF0u88V6M3m39gpU + Ilxc2hbF1G6nLSRFZF8tvlY/KPqnT/ij +zZ8U9OtvENp47+Fetw6vDHcRXw8U2cDXKFRtZ4 + pXWSN8AbkdVZWDBgCCK+hwcZYJPC1baWaa2af Y+UlONV+0a3Ifhx8Z73+2bO21qeJYbskQN + cBm8xPTyVyWf6K2PavWPjR8a9R+G2jaDfeCtEiku70 fZDcanqCW1vabyqb5UiQuFPykAn+F + sgHIHyr4W+KukaRqrvYiKNvODPJGxEjuQBnJ5PQjPpXpX7Q 37Q2if8ADPus/FXVpJLKD4QD + b4htVCrDqljcQmS1HLKglFyyIhYhf3kisSHxXysKyjScr7Hvzpvn SaPD/wBrDx7ceA9bk0r + Q0sPEVh47sb298RaPdSi4j1+WKSG2uLYLMrIzoL6xntmZVSL7Iof5JmZc r9oK/wBH/Z90vV + ND+L/wV/4Wdpnifw2tpomuaYotdb0/W7S3EKzSSwyLcfZJIvs8rPbFmgkhbbCw nUJ4N4B8E + 3Xx3vYr/wCL3j3w9Z3XhXTry41Tw7aak8N5bmQxPPFfagBItohWGJSkaNI27hirZq7o 3x60 + a4+IetXPwqv/AA7JqFxc/Yrq31ia7ub63fzDgNbIvlqjISsbpIjFUOADvFfndZYrB0PrVSNl + dq/XXX0/G/kfouWPLc2rPL+a8+VO17fD0v8AoR/tE/GqXwN+wZpWn/GPR10m7EEqabpMWkw + xwf2j Kju11LZW4Cm8k3yPNO48w/MGIA2j8rPCvxck8L6VdWejRyWf2u2uIjL5h3qHfaCe4P + 3yfbiv1Q/a t8XXHxJ+Ekq6Dp0lzqmnea9tE0WdzvFJExHZgwZ1z/EvXOa+Ik/4JLeLfEHhK + 61Sx1vRNNvo5Jrm 4t7vdBHb2qx/PKWTd84JC7SANpB6mufCYunL45auxWeYapFxWFjaMen5 + /wDBPN/A/wARNVv73wvo fwue2uPEWp6pFFYwblSGN2EkTv8A9MI1IiYvwm1CSMK2ej/aF/Y + n+Jnww8c+Nr2y+H+uX/hzQ9dv 9NuNY0LTZrjR/tFq8a3DxOqH9yskmFfhDuZR9w12f7EHwo + i8PePpPHNpbafFaWDSrayxx74JLeG3 eANHuJLG5ncgDPIT3xX2xovxd8VJ4rudQ8O3d7YC2 + sfIJEsc1wXilEs0kYkYnKiTygf3e7bIVYEH P3mTZdGMY1pSak+lloflOccRSpzlh4wUkut3 + o/8Agn5geEfFMmoaFcxaYzTTWuJCYlZ5IW+bcCpO fm2sTnjDMuAGxXc6P+zn4Z+IWnprTwT + acdQLS/ZorqIpH8xHGITjOM4ycZxX3H4++MnwJ/a+17Wt K+PXw312CfQpEttS+J3h3w+bq9 + tT5asuozXFmkSyIsqvDLE0VzuePIlRDuT4y+LH7JfxA/Z48fX3 hHSfDWv+N9P0wRS2Ov8Ah + vWjDpesWs8SXEFxDGYWMe+KaNmQklXLA9K+1w+Z0KdNQqrnS8jyaU/r Ert+zdr6tar+vmfX + 3w++Lnib4n3V8fh1pFzqEenAySu08cNpYKpOGuJ952YHRWxkdOtekfBP9t/Q /hXrl/qHxw0 + zwx4gi04Rajpk0Wo2c9v4f1C0VpF1N7eWWX7WbeITSxI0RaOSPzIkLqrL1vh/9kC7 8Tazps + H7Rc+t2vgW5uFt4LTSNItrjT7SRw7LKp0x5LO7iXCgqXQgdlbICW/7Vnw9+AOq3cJ8O6L/ A + MKt1ELaaR8QfDOmmbUL1ysvmWzaOiGSFN8Uqbg5BG1vvMa/Nfr0cI4xqTS5tubZ9fTp3Pq61 + ZSf JbX7vz6ng37Vf7ct94/8U69eXlzrZ8OaPaQ3Fva3qSwXWrXl2m23a7LYMzyxb5zPycKW + znFfEXw0 +OXjr4W6/wCIvGXwk18W+qa9rRtLmJ41ktNRWLOyPyWGAI1kO1h0BIFfbX/BXfw + TrXxY8LeFfiB8 NZ1uvCdtZJCyWkBhnslnBaGZ967ijJJtww/c8g/eFfJ2i+BrPRvBej6faR + SR21szklgPnYtuLMRz tLseD0wAeldTxbziHvWt2X9eR5NXDyyDEOpCT5pWs3vY+hP2RvB3x + Q/bD8OTeKvH2rre6fa6nPaX Ftp8T2c0flOu2QtITkEs42r24q5+3Np83h650v4OfD13lu/F + bWy+JdQIeSa3sZZPMis1kzwZRG8r EcAKAetfWX/BG/wJbaL+yPpOq/KZ9dmuNRuV+8GdrqV + wRnvtUDNfOf7c2v2tj/wUK8eQ6ne6Z4Zj ENhAuoahKkVnYq2nWq72Zm2hiWfgr2rxsDk1CW + LVSWy18tD7bNM5rUsnUr/vJJa97/qca1xbXXxX 8B/D74fWqwWcV3FdX0UJCLBa2EfmJEB90 + OZfK5PACe9cb+1t8Stf+CPxVv49C1S1srix0a6WO4lQ YWC5uNsAEX3GJkjJKgYG0N2zWX8e + vCOlfCGxtdH8IeJTrPirxvbT6asenSC7kMNyYmuJYViAzvRX +Yv/ABAdsDJ8afsMfFT4lXJ + 8f+M9OjuNNQWmm6XFd3gl3W4EdqkkoQnHyuSwz1znnNfSY3MYYWLi 3Z36P/I/NsBlVbMmpU + 4N730/zPoD9lme3+CHhrw82oa82gazLYAS6e97HLJZRzItxPcvcKdsAWV3 cg4bEx5YsFHrH + g3/AIK7eFPC/hq1sNC1b4lala2wZUuobOK2inyxJaKOa4WQRkk7d6hiu0kc1u/s /f8ABule + 6n8Ira/8efEK+t/Eh23Mdvp9pFNpKyhi6vJFOn79gcfeY4IOMcVynif/AIJb/teeHNfu rLw + t4F+H/ibT7d8QapBcG0S8U87vJyQjckMAcbgcYHFdVLN3FJSjZdLxcr/cddfg/Ey96VnfopJ + W 9dV+Z+o/hr9n74XfDP4SP4j/AGE4rfNx5cNpY3us3iWVp5j70W5gMgkZVbG1SwxuOSydeC + /a+/Yq 1r49x2etfCSHTZrnStFXS9Q8Nx6VBptzDH5yTLPpt3bJGruJIm24ffGHbynQuwf4M + 1f4w+IPBf7S Og+HvDV1bW+kX+qNFcwGwt5DOvkyS/NI8ZcneAck56jOCRX2Z4t+OvjD4O/s + yazd/DTxDqWkzvf2 0QMUm5YldV3eWrZWMnJBZADjjOOK8auoVMP7KrH7nY9TEUFjLxm2103 + 0/Fo+a/B0t/4Z+HuoaV8U H1S41S2uLjSpm1m2CXbRoybVuFCIwYIwR3dQXZGbGDXzjrfgnw + 3+0L4m1b4XWF9p/hPx5ZD+1fCX iCKyilg8Q2iL++sbqLbmTy8krs/eFfKKn91Jn0n4v+MNW + 8QXF3rPiPU7/U9W1LVpLi7u724e5muX TyUQu0hJYKgCgHgKAAMCvnzwb/pn7T3w7up8+eni + GyCsvy7fkc8AcA/Owz1wcdABX59LMHgMV7Gk 3ZO2+uuuve1z9MynKaeKyymq9paW1R+m/wD + wT6/Z/T4M/s7aJ4fub6O5mtLaNBceWUMgKFshWJKZ 3fd7ZxX5Zf8ABfz4V3a/t0XOoaTcxR + 6d4i0LTLqQTymKKQpB5Dt83y7g0OcgdTk81+tHwZvZbCx8 qzby44Y2aNVAwmBxj0HJ46du1 + fAX/By7otq3hP4Ya00KnVLS9OkxXHO5bWSJZGix0I3ksCRlSzFS Nxz9tRq89BSkjwc4wvuu + nB2Stb8jwr/gi18KNJ1Xxh4v8SeILV7x9NvLaK2e6mVmDrE0kmGHX59o 47AZr9R/jt8V/AP + hb4I6jpN/fWMF1Fp3mBHOyN9rFo44iQBIwdFO0ZYZ4IHFfnh+yR4ftPBX7M3g PU/Csb2Woe + I7ZLzUp45W33cpdgXbJ64AHGOAB0r7Q8N3kknga484iQm3dcyKHIB3ZAJ6Z9q8atiW lJJan + pZTho0qUFJtrfsfor+z/wCKLfW/hno1ygB+1WUUyue4dQ3QgEDnof1616IbLzsMZbJcgcPa + F2/E7xn8q8D/AGLYwPBvhi3O4wvZQgoSSAAqYAz0HJ4FeH+Pfjl4suPGWotLrd2T5xHAUAAc + AAAc AACv0nhTLKvEkZWmoqKW6ueHxPmdLh5Qm4uXO3s7H//Z +ITEM3.X-ABDATE;TYPE=pref:2000-12-31 +ITEM3.X-ABLABEL:_$!<Anniversary>!$_ +X-ABSHOWAS:COMPANY +X-ABUID:73FD0F46-DE18-4F1F-AA2C-59E8738B4249:ABPerson +UID:a nice UID +REV:date +END:VCARD HTTP/1.1 200 OK @@ -598,6 +1101,43 @@ X-DESCRIPTION;CHARSET=utf-8:außerdem CATEGORIES:uni REV:date END:VCARD + + + HTTP/1.1 200 OK + + + + /caldav.php/user1/addressbook/J%C3%B6rg_Test-Ro%C3%9Fdeutscher_3_0.vcf + + + some valid etag + BEGIN:VCARD +VERSION:3.0 +N:Test-Roßdeutscher;Jörg;;; +FN:Jörg Test-Roßdeutscher +ORG:Factor Design AG; +EMAIL;TYPE=INTERNET;TYPE=WORK;TYPE=pref: + joerg.rossdeutscher@factordesign.foo +EMAIL;TYPE=INTERNET;TYPE=WORK:joerg@factordesign.foo +EMAIL;TYPE=INTERNET;TYPE=HOME:joerg.rossdeutscher@gesindel.foo +EMAIL;TYPE=INTERNET;TYPE=HOME:raettchen@gmail.bar +TEL;TYPE=WORK;TYPE=pref:040 999999432571-43 +TEL;TYPE=CELL:017799999978200 +TEL;TYPE=HOME:040999999793017 +ITEM1.ADR;TYPE=WORK;TYPE=pref:;;abcStraße 58;Hamburg;;20357;Deutschland +ITEM1.X-ABADR:de +ITEM2.ADR;TYPE=HOME:;;Gayens Weg 9;Hamburg;;22761;Deutschland +ITEM2.X-ABADR:de +NOTE:Technik\, Web\, DTP\, SysAdmin\, €-Vermögensverwalter +ITEM3.URL;TYPE=pref:www.gesindel.baz +ITEM3.X-ABLABEL:_$!<HomePage>!$_ +ITEM4.URL:www.factordesign.foo +ITEM4.X-ABLABEL:_$!<HomePage>!$_ +BDAY;VALUE=date:1969-06-20 +X-ABUID:58AB933D-81D3-4095-8CB5-A63431AC934D:ABPerson +UID:a nice UID +REV:date +END:VCARD HTTP/1.1 200 OK diff --git a/testing/tests/carddav/2041-REPORT-addressbook-query.result b/testing/tests/carddav/2041-REPORT-addressbook-query.result new file mode 100644 index 00000000..461fb137 --- /dev/null +++ b/testing/tests/carddav/2041-REPORT-addressbook-query.result @@ -0,0 +1,33 @@ + + + + /caldav.php/user1/addressbook/andresenesq.vcf + + + some valid etag + BEGIN:VCARD +VERSION:4.0 +FN:Sven Joseph Klaus Michael Andresen\, Esq. +FBURL:http://caldav.andresen.local/freebusy +END:VCARD + + + HTTP/1.1 200 OK + + + + /caldav.php/user1/addressbook/hans_dieter.vcf + + + some valid etag + BEGIN:VCARD +VERSION:4.0 +FN:Hans Dieter Schmidt +FBURL:http://davical.hadi-schmist.home/freebusy +END:VCARD + + + HTTP/1.1 200 OK + + + diff --git a/testing/tests/carddav/2041-REPORT-addressbook-query.test b/testing/tests/carddav/2041-REPORT-addressbook-query.test new file mode 100644 index 00000000..727bfe51 --- /dev/null +++ b/testing/tests/carddav/2041-REPORT-addressbook-query.test @@ -0,0 +1,50 @@ +# +# Request a REPORT +# +# negate-condition should only return a result if the +# property exists on the vCard, and doesn't match. +# +# RFC 6352, section 10.5.1: +# +# ... +# A vCard property of the type specified by the "name" attribute +# exists, and the CARDDAV:prop-filter is empty, or it matches any +# specified CARDDAV:text-match or CARDDAV:param-filter +# conditions. +# ... +# +# This test should return all vCards with a FBURL property, except +# for Andrew McMillan. Currently there are two vCards which meet +# this restriction. +# +TYPE=REPORT +URL=http://regression.host/caldav.php/user1/addressbook/ + +HEADER=Accept: text/xml,application/xml +HEADER=Content-Type: text/xml +HEADER=Depth: 1 + +# HEAD + +BEGINDATA + + + + + + + + + + + + + andrew@morphoss.com + + + +ENDDATA + +REPLACE=_"[0-9a-f]+"_some valid etag_ +REPLACE=/^REV:.*$/REV:date/ +REPLACE=/^UID:.*$/UID:a nice UID/ diff --git a/testing/tests/carddav/2042-REPORT-addressbook-query.result b/testing/tests/carddav/2042-REPORT-addressbook-query.result new file mode 100644 index 00000000..99ca96c6 --- /dev/null +++ b/testing/tests/carddav/2042-REPORT-addressbook-query.result @@ -0,0 +1,179 @@ + + + + /caldav.php/user1/addressbook/andrew_mcmillan.vcf + + + some valid etag + BEGIN:VCARD +VERSION:3.0 +TEL;X-EVOLUTION-UI-SLOT=3;TYPE=CELL:+64 22 123 4567 +TEL;X-EVOLUTION-UI-SLOT=2;TYPE=HOME,VOICE:+64 4 123 4567 +TEL;X-EVOLUTION-UI-SLOT=1;TYPE=WORK,VOICE:+64 22 123 4567 +FN:Andrew Watson McMillan +END:VCARD + + + HTTP/1.1 200 OK + + + + /caldav.php/user1/addressbook/donald_kelly.vcf + + + some valid etag + BEGIN:VCARD +FN:Donald Kelly +TEL;TYPE=work:+64 4 347 4747 +TEL;TYPE=cell:+64 2 1234-4321 +VERSION:2.1 +END:VCARD + + + HTTP/1.1 200 OK + + + + /caldav.php/user1/addressbook/F06EC844-EACD-4ADF-8823-588603991E04-ABSPlugin.vcf + + + some valid etag + BEGIN:VCARD +VERSION:3.0 +FN:Morphoss Ltd +TEL;TYPE=WORK;TYPE=pref:+64272332426 +END:VCARD + + + HTTP/1.1 200 OK + + + + /caldav.php/user1/addressbook/van_houtte.vcf + + + some valid etag + BEGIN:VCARD +VERSION:3.0 +FN:Vincent VAN HOUTTE +TEL;TYPE=CELL,VOICE:0486 11 22 33 +TEL;TYPE=HOME,VOICE:052 11 22 33 +TEL;TYPE=HOME,FAX:052 44 55 66 +TEL;TYPE=WORK,VOICE:052 11 22 33 +TEL;TYPE=WORK,FAX:052 44 55 66 +END:VCARD + + + HTTP/1.1 200 OK + + + + /caldav.php/user1/addressbook/mustrmahn.vcf + + + some valid etag + BEGIN:VCARD +VERSION:3.0 +FN:Überwerbung GmbH +TEL;TYPE=WORK;TYPE=pref:+49 30 1234567 +TEL;TYPE=CELL:+49 172 1234567 +END:VCARD + + + HTTP/1.1 200 OK + + + + /caldav.php/user1/addressbook/andresenesq.vcf + + + some valid etag + BEGIN:VCARD +VERSION:4.0 +FN:Sven Joseph Klaus Michael Andresen\, Esq. +TEL;TYPE=WORK,VOICE:+49 89 11 11 111 +TEL;TYPE=WORK,VOICE:+49 234 222 222 +TEL;TYPE=WORK,FAX:+49 7373 73 +TEL;TYPE=PAGER:+49 160 073 727 272 +TEL;TYPE=PAGER:+49 2626 26 +TEL;TYPE=CELL,VOICE:+49 39292 82 +TEL;TYPE=CELL,VOICE:+49 7272 722 +TEL;TYPE=PREF,VOICE:+49 12 34 567 +TEL;TYPE=CAR,VOICE:+49 8292 38 383 +TEL;TYPE=HOME,VOICE:+49 7327 272 727 +TEL;TYPE=HOME,VOICE:+49 7272 7282 +TEL;TYPE=HOME,FAX:+49 1010 1 +TEL;TYPE=ISDN:8797 +TEL;TYPE=ISDN:98732947234 +TEL;TYPE=X-EVOLUTION-RADIO:+49 88 298 723 498 32 +TEL;TYPE=X-EVOLUTION-RADIO:+49 9872 394 872 34 +TEL;TYPE=X-EVOLUTION-TELEX:+49 2763 382 882 28 82 +TEL;TYPE=X-EVOLUTION-TELEX:+49 7722 88 28 282 +TEL;TYPE=MAIN:+49 6237 623 723 84 76 +TEL;TYPE=MAIN:+49 9324 32 479 234234 +TEL;X-EVOLUTION-CALLBACK:+49 8383 73 723 +TEL;X-EVOLUTION-CALLBACK:+49 7363 6363 +TEL;TYPE=MODEM:+49 8383 73 723 +TEL;TYPE=MODEM:+49 7363 6363 +TEL;X-EVOLUTION-TTYTDD:+49 3377 37 373 +TEL;X-EVOLUTION-TTYTDD:+49 8378 33 +TEL;X-QUICKDIAL:13355 +END:VCARD + + + HTTP/1.1 200 OK + + + + /caldav.php/user1/addressbook/hans_dieter.vcf + + + some valid etag + BEGIN:VCARD +VERSION:4.0 +FN:Hans Dieter Schmidt +TEL;TYPE=WORK,VOICE:+49 9823 9084 +TEL;TYPE=WORK,VOICE:+49 234 234 234 +TEL;TYPE=WORK,FAX:+49 7373 73 +TEL;TYPE=PAGER:+49 2626 26 +TEL;TYPE=CELL,VOICE:+49 7272 722 +TEL;TYPE=PREF,VOICE:+49 12 34 567 +TEL;TYPE=CAR,VOICE:+49 8292 38 383 +TEL;TYPE=HOME,VOICE:+49 7327 272 727 +TEL;TYPE=HOME,FAX:+49 40 812 387 21 +TEL;TYPE=ISDN:4234234235 +TEL;TYPE=ISDN:98732947234 +TEL;TYPE=X-EVOLUTION-RADIO:+49 9872 349 832 +TEL;TYPE=X-EVOLUTION-RADIO:+49 9872 394 872 34 +TEL;TYPE=X-EVOLUTION-TELEX:+49 38 288 228 82 +TEL;TYPE=X-EVOLUTION-TELEX:+49 7722 88 28 282 +TEL;TYPE=MAIN:+49 6237 623 723 84 76 +TEL;TYPE=MAIN:+49 9324 32 479 234234 +TEL;X-EVOLUTION-CALLBACK:+49 8383 73 723 +TEL;TYPE=MODEM:+49 8383 73 723 +TEL;X-EVOLUTION-TTYTDD:+49 7373 73 +TEL;X-EVOLUTION-TTYTDD:+49 8378 33 +END:VCARD + + + HTTP/1.1 200 OK + + + + /caldav.php/user1/addressbook/J%C3%B6rg_Test-Ro%C3%9Fdeutscher_3_0.vcf + + + some valid etag + BEGIN:VCARD +VERSION:3.0 +FN:Jörg Test-Roßdeutscher +TEL;TYPE=WORK;TYPE=pref:040 999999432571-43 +TEL;TYPE=CELL:017799999978200 +TEL;TYPE=HOME:040999999793017 +END:VCARD + + + HTTP/1.1 200 OK + + + diff --git a/testing/tests/carddav/2042-REPORT-addressbook-query.test b/testing/tests/carddav/2042-REPORT-addressbook-query.test new file mode 100644 index 00000000..8be2fa20 --- /dev/null +++ b/testing/tests/carddav/2042-REPORT-addressbook-query.test @@ -0,0 +1,41 @@ +# +# Request a REPORT +# +# param-filter should filter on parameter value. With a negated +# null value we should return all vCards with the property that +# matches the prop-filter type, and there there is a parameter +# of TYPE set. +# +TYPE=REPORT +URL=http://regression.host/caldav.php/user1/addressbook/ + +HEADER=Accept: text/xml,application/xml +HEADER=Content-Type: text/xml +HEADER=Depth: 1 + +# HEAD + +BEGINDATA + + + + + + + + + + + + + + + + + + +ENDDATA + +REPLACE=_"[0-9a-f]+"_some valid etag_ +REPLACE=/^REV:.*$/REV:date/ +REPLACE=/^UID:.*$/UID:a nice UID/ diff --git a/testing/tests/carddav/2044-REPORT-addressbook-query.result b/testing/tests/carddav/2044-REPORT-addressbook-query.result new file mode 100644 index 00000000..aaf54073 --- /dev/null +++ b/testing/tests/carddav/2044-REPORT-addressbook-query.result @@ -0,0 +1,211 @@ + + + + /caldav.php/user1/addressbook/andrew_mcmillan.vcf + + + some valid etag + BEGIN:VCARD +VERSION:3.0 +TEL;X-EVOLUTION-UI-SLOT=3;TYPE=CELL:+64 22 123 4567 +TEL;X-EVOLUTION-UI-SLOT=2;TYPE=HOME,VOICE:+64 4 123 4567 +TEL;X-EVOLUTION-UI-SLOT=1;TYPE=WORK,VOICE:+64 22 123 4567 +EMAIL;X-EVOLUTION-UI-SLOT=2;TYPE=HOME:andrew@mcmillan.net.nz +EMAIL;X-EVOLUTION-UI-SLOT=1;TYPE=WORK:andrew@morphoss.com +FN:Andrew Watson McMillan +END:VCARD + + + HTTP/1.1 200 OK + + + + /caldav.php/user1/addressbook/donald_kelly.vcf + + + some valid etag + BEGIN:VCARD +FN:Donald Kelly +EMAIL;TYPE=internet:donald@example.co.nz +TEL;TYPE=work:+64 4 347 4747 +TEL;TYPE=cell:+64 2 1234-4321 +VERSION:2.1 +END:VCARD + + + HTTP/1.1 200 OK + + + + /caldav.php/user1/addressbook/F06EC844-EACD-4ADF-8823-588603991E04-ABSPlugin.vcf + + + some valid etag + BEGIN:VCARD +VERSION:3.0 +FN:Morphoss Ltd +EMAIL;TYPE=INTERNET;TYPE=WORK;TYPE=pref:andrew+davical@morphoss.com +TEL;TYPE=WORK;TYPE=pref:+64272332426 +END:VCARD + + + HTTP/1.1 200 OK + + + + /caldav.php/user1/addressbook/van_houtte.vcf + + + some valid etag + BEGIN:VCARD +VERSION:3.0 +FN:Vincent VAN HOUTTE +TEL;TYPE=CELL,VOICE:0486 11 22 33 +TEL;TYPE=HOME,VOICE:052 11 22 33 +TEL;TYPE=HOME,FAX:052 44 55 66 +EMAIL;TYPE=HOME:vvh@gmail.no +TEL;TYPE=WORK,VOICE:052 11 22 33 +TEL;TYPE=WORK,FAX:052 44 55 66 +EMAIL;TYPE=WORK:vvh@gmail.no +END:VCARD + + + HTTP/1.1 200 OK + + + + /caldav.php/user1/addressbook/mustrmahn.vcf + + + some valid etag + BEGIN:VCARD +VERSION:3.0 +FN:Überwerbung GmbH +EMAIL;TYPE=INTERNET;TYPE=WORK;TYPE=pref:karl@mustermann.de +TEL;TYPE=WORK;TYPE=pref:+49 30 1234567 +TEL;TYPE=CELL:+49 172 1234567 +END:VCARD + + + HTTP/1.1 200 OK + + + + /caldav.php/user1/addressbook/andresenesq.vcf + + + some valid etag + BEGIN:VCARD +VERSION:4.0 +FN:Sven Joseph Klaus Michael Andresen\, Esq. +EMAIL;TYPE=INTERNET:sven@andresen.de +EMAIL;TYPE=INTERNET:andresen@andresen.de +TEL;TYPE=WORK,VOICE:+49 89 11 11 111 +TEL;TYPE=WORK,VOICE:+49 234 222 222 +TEL;TYPE=WORK,FAX:+49 7373 73 +TEL;TYPE=PAGER:+49 160 073 727 272 +TEL;TYPE=PAGER:+49 2626 26 +TEL;TYPE=CELL,VOICE:+49 39292 82 +TEL;TYPE=CELL,VOICE:+49 7272 722 +TEL;TYPE=PREF,VOICE:+49 12 34 567 +TEL;TYPE=CAR,VOICE:+49 8292 38 383 +TEL;TYPE=HOME,VOICE:+49 7327 272 727 +TEL;TYPE=HOME,VOICE:+49 7272 7282 +TEL;TYPE=HOME,FAX:+49 1010 1 +TEL;TYPE=ISDN:8797 +TEL;TYPE=ISDN:98732947234 +TEL;TYPE=X-EVOLUTION-RADIO:+49 88 298 723 498 32 +TEL;TYPE=X-EVOLUTION-RADIO:+49 9872 394 872 34 +TEL;TYPE=X-EVOLUTION-TELEX:+49 2763 382 882 28 82 +TEL;TYPE=X-EVOLUTION-TELEX:+49 7722 88 28 282 +TEL;TYPE=MAIN:+49 6237 623 723 84 76 +TEL;TYPE=MAIN:+49 9324 32 479 234234 +TEL;X-EVOLUTION-CALLBACK:+49 8383 73 723 +TEL;X-EVOLUTION-CALLBACK:+49 7363 6363 +TEL;TYPE=MODEM:+49 8383 73 723 +TEL;TYPE=MODEM:+49 7363 6363 +TEL;X-EVOLUTION-TTYTDD:+49 3377 37 373 +TEL;X-EVOLUTION-TTYTDD:+49 8378 33 +TEL;X-QUICKDIAL:13355 +END:VCARD + + + HTTP/1.1 200 OK + + + + /caldav.php/user1/addressbook/hans_dieter.vcf + + + some valid etag + BEGIN:VCARD +VERSION:4.0 +FN:Hans Dieter Schmidt +EMAIL;TYPE=INTERNET:ich@hadi-schmidt.de +EMAIL;TYPE=INTERNET:hadi@telekom-d.de +TEL;TYPE=WORK,VOICE:+49 9823 9084 +TEL;TYPE=WORK,VOICE:+49 234 234 234 +TEL;TYPE=WORK,FAX:+49 7373 73 +TEL;TYPE=PAGER:+49 2626 26 +TEL;TYPE=CELL,VOICE:+49 7272 722 +TEL;TYPE=PREF,VOICE:+49 12 34 567 +TEL;TYPE=CAR,VOICE:+49 8292 38 383 +TEL;TYPE=HOME,VOICE:+49 7327 272 727 +TEL;TYPE=HOME,FAX:+49 40 812 387 21 +TEL;TYPE=ISDN:4234234235 +TEL;TYPE=ISDN:98732947234 +TEL;TYPE=X-EVOLUTION-RADIO:+49 9872 349 832 +TEL;TYPE=X-EVOLUTION-RADIO:+49 9872 394 872 34 +TEL;TYPE=X-EVOLUTION-TELEX:+49 38 288 228 82 +TEL;TYPE=X-EVOLUTION-TELEX:+49 7722 88 28 282 +TEL;TYPE=MAIN:+49 6237 623 723 84 76 +TEL;TYPE=MAIN:+49 9324 32 479 234234 +TEL;X-EVOLUTION-CALLBACK:+49 8383 73 723 +TEL;TYPE=MODEM:+49 8383 73 723 +TEL;X-EVOLUTION-TTYTDD:+49 7373 73 +TEL;X-EVOLUTION-TTYTDD:+49 8378 33 +END:VCARD + + + HTTP/1.1 200 OK + + + + /caldav.php/user1/addressbook/J%C3%B6rg_Test-Ro%C3%9Fdeutscher_3_0.vcf + + + some valid etag + BEGIN:VCARD +VERSION:3.0 +FN:Jörg Test-Roßdeutscher +EMAIL;TYPE=INTERNET;TYPE=WORK;TYPE=pref: + joerg.rossdeutscher@factordesign.foo +EMAIL;TYPE=INTERNET;TYPE=WORK:joerg@factordesign.foo +EMAIL;TYPE=INTERNET;TYPE=HOME:joerg.rossdeutscher@gesindel.foo +EMAIL;TYPE=INTERNET;TYPE=HOME:raettchen@gmail.bar +TEL;TYPE=WORK;TYPE=pref:040 999999432571-43 +TEL;TYPE=CELL:017799999978200 +TEL;TYPE=HOME:040999999793017 +END:VCARD + + + HTTP/1.1 200 OK + + + + /caldav.php/user1/addressbook/test_multiple_email.vcf + + + some valid etag + BEGIN:VCARD +VERSION:4.0 +FN:CardDavClient Test212420682 +EMAIL;TYPE=HOME:john6doe@example.com +EMAIL;TYPE=WORK:doe6@example.com +END:VCARD + + + HTTP/1.1 200 OK + + + diff --git a/testing/tests/carddav/2044-REPORT-addressbook-query.test b/testing/tests/carddav/2044-REPORT-addressbook-query.test new file mode 100644 index 00000000..eb7ed36d --- /dev/null +++ b/testing/tests/carddav/2044-REPORT-addressbook-query.test @@ -0,0 +1,45 @@ +# +# Request a REPORT +# +# param-filter should filter on parameter value, anyof says any +# filter can match. +# +TYPE=REPORT +URL=http://regression.host/caldav.php/user1/addressbook/ + +HEADER=Accept: text/xml,application/xml +HEADER=Content-Type: text/xml +HEADER=Depth: 1 + +# HEAD + +BEGINDATA + + + + + + + + + + + + + + + WORK + + + + + WORK + + + + +ENDDATA + +REPLACE=_"[0-9a-f]+"_some valid etag_ +REPLACE=/^REV:.*$/REV:date/ +REPLACE=/^UID:.*$/UID:a nice UID/ diff --git a/testing/tests/carddav/2050-PUT-carddavclient.result b/testing/tests/carddav/2050-PUT-carddavclient.result new file mode 100644 index 00000000..e69de29b diff --git a/testing/tests/carddav/2050-PUT-carddavclient.test b/testing/tests/carddav/2050-PUT-carddavclient.test new file mode 100644 index 00000000..3f9ad32a --- /dev/null +++ b/testing/tests/carddav/2050-PUT-carddavclient.test @@ -0,0 +1,58 @@ +# +# Put the VCARDs used for carddavclient's interop/AddressbookQueryTest +# into user5's addressbook +# +TYPE=PUT +URL=http://regression.host/caldav.php/user5/addresses/ + +HEADER=Accept: text/xml,application/xml +HEADER=Content-Type: text/vcard + +AUTH=user5:user5 + +# HEAD + +BEGINDATA +BEGIN:VCARD +VERSION:4.0 +PRODID:-//Sabre//Sabre VObject 4.3.3//EN +UID:sabre-vobject-131cdf91-5460-423b-a836-e420e5affe13 +FN:CardDavClient Test212420682 +N:Test212420682;CardDavClient;;; +NICKNAME:Jonny0 +EMAIL;TYPE=HOME:john6doe@example.com +EMAIL;TYPE=WORK:doe6@example.com +X-CUSTOMPROP;X-CUSTOMPARAM=WORK:foobar +END:VCARD +BEGIN:VCARD +VERSION:4.0 +PRODID:-//Sabre//Sabre VObject 4.3.3//EN +UID:sabre-vobject-8121cd7a-8251-4b74-a952-ca91fdc21e36 +FN:CardDavClient Test913043917 +N:Test913043917;CardDavClient;;; +NICKNAME:Jonny1 +EMAIL:maxmu@abcd.com +X-CUSTOMPROP;X-CUSTOMPARAM=HOME,WORK:foobar +END:VCARD +BEGIN:VCARD +VERSION:4.0 +PRODID:-//Sabre//Sabre VObject 4.3.3//EN +UID:sabre-vobject-41956788-1273-449e-bfb7-716850c91ec6 +FN:CardDavClient Test879489908 +N:Test879489908;CardDavClient;;; +NICKNAME:Jonny2 +TEL;TYPE=HOME:12345 +TEL:555 +END:VCARD +BEGIN:VCARD +VERSION:4.0 +PRODID:-//Sabre//Sabre VObject 4.3.3//EN +UID:sabre-vobject-34cd55a8-330f-47cd-8b69-6fbd16a0880b +FN:CardDavClient Test1520108081 +N:Test1520108081;CardDavClient;;; +NICKNAME:Jonny3 +item1.EMAIL:foo@ex.com +item1.X-ABLABEL:CustomLabel +IMPP;X-SERVICE-TYPE=Jabber;TYPE=HOME:xmpp:foo@example.com +END:VCARD +ENDDATA diff --git a/testing/tests/carddav/2051-REPORT-carddavclient-ParamNotDefinedSome.result b/testing/tests/carddav/2051-REPORT-carddavclient-ParamNotDefinedSome.result new file mode 100644 index 00000000..28dabef6 --- /dev/null +++ b/testing/tests/carddav/2051-REPORT-carddavclient-ParamNotDefinedSome.result @@ -0,0 +1,2 @@ + + diff --git a/testing/tests/carddav/2051-REPORT-carddavclient-ParamNotDefinedSome.test b/testing/tests/carddav/2051-REPORT-carddavclient-ParamNotDefinedSome.test new file mode 100644 index 00000000..1378a525 --- /dev/null +++ b/testing/tests/carddav/2051-REPORT-carddavclient-ParamNotDefinedSome.test @@ -0,0 +1,41 @@ +# +# Request a REPORT for a property with multiple values, where one has the +# parameter defined, the other has not -> must not return a match +# +# (Jonny2 has two TEL properties, one of which has a TYPE parameter. +# Therefore, Jonny2 must not match the is-not-defined filter) +# +TYPE=REPORT +URL=http://regression.host/caldav.php/user5/addresses/ + +HEADER=Accept: text/xml,application/xml +HEADER=Content-Type: text/xml +HEADER=Depth: 1 + +AUTH=user5:user5 + +# HEAD + +BEGINDATA + + + + + + + + + + + + + + + + + + +ENDDATA + +REPLACE=_"[0-9a-f]+"_some valid etag_ +REPLACE=/^REV:.*$/REV:date/ diff --git a/testing/tests/carddav/2052-REPORT-carddavclient-HasEmailAndIMP.result b/testing/tests/carddav/2052-REPORT-carddavclient-HasEmailAndIMP.result new file mode 100644 index 00000000..becfed73 --- /dev/null +++ b/testing/tests/carddav/2052-REPORT-carddavclient-HasEmailAndIMP.result @@ -0,0 +1,18 @@ + + + + /caldav.php/user5/addresses/sabre-vobject-34cd55a8-330f-47cd-8b69-6fbd16a0880b.vcf + + + some valid etag + BEGIN:VCARD +VERSION:4.0 +FN:CardDavClient Test1520108081 +IMPP;X-SERVICE-TYPE=Jabber;TYPE=HOME:xmpp:foo@example.com +END:VCARD + + + HTTP/1.1 200 OK + + + diff --git a/testing/tests/carddav/2052-REPORT-carddavclient-HasEmailAndIMP.test b/testing/tests/carddav/2052-REPORT-carddavclient-HasEmailAndIMP.test new file mode 100644 index 00000000..fbd50767 --- /dev/null +++ b/testing/tests/carddav/2052-REPORT-carddavclient-HasEmailAndIMP.test @@ -0,0 +1,37 @@ +# +# Request a REPORT for two properties, both of which must be defined +# +# (Jonny0 and Jonny1 have only one of them and must not be returned) +# +TYPE=REPORT +URL=http://regression.host/caldav.php/user5/addresses/ + +HEADER=Accept: text/xml,application/xml +HEADER=Content-Type: text/xml +HEADER=Depth: 1 + +AUTH=user5:user5 + +# HEAD + +BEGINDATA + + + + + + + + + + + + + + + + +ENDDATA + +REPLACE=_"[0-9a-f]+"_some valid etag_ +REPLACE=/^REV:.*$/REV:date/ diff --git a/testing/tests/carddav/2053-REPORT-carddavclient-TwoEmailConditionsOr.result b/testing/tests/carddav/2053-REPORT-carddavclient-TwoEmailConditionsOr.result new file mode 100644 index 00000000..d8d6fb54 --- /dev/null +++ b/testing/tests/carddav/2053-REPORT-carddavclient-TwoEmailConditionsOr.result @@ -0,0 +1,34 @@ + + + + /caldav.php/user5/addresses/sabre-vobject-131cdf91-5460-423b-a836-e420e5affe13.vcf + + + some valid etag + BEGIN:VCARD +VERSION:4.0 +FN:CardDavClient Test212420682 +EMAIL;TYPE=HOME:john6doe@example.com +EMAIL;TYPE=WORK:doe6@example.com +END:VCARD + + + HTTP/1.1 200 OK + + + + /caldav.php/user5/addresses/sabre-vobject-8121cd7a-8251-4b74-a952-ca91fdc21e36.vcf + + + some valid etag + BEGIN:VCARD +VERSION:4.0 +FN:CardDavClient Test913043917 +EMAIL:maxmu@abcd.com +END:VCARD + + + HTTP/1.1 200 OK + + + diff --git a/testing/tests/carddav/2053-REPORT-carddavclient-TwoEmailConditionsOr.test b/testing/tests/carddav/2053-REPORT-carddavclient-TwoEmailConditionsOr.test new file mode 100644 index 00000000..d0f05fd9 --- /dev/null +++ b/testing/tests/carddav/2053-REPORT-carddavclient-TwoEmailConditionsOr.test @@ -0,0 +1,39 @@ +# +# Request a REPORT for a property which satisfies any of two text-match +# conditions, only one of which actually matches +# +# (this must return both Jonny0 and Jonny1) +# +TYPE=REPORT +URL=http://regression.host/caldav.php/user5/addresses/ + +HEADER=Accept: text/xml,application/xml +HEADER=Content-Type: text/xml +HEADER=Depth: 1 + +AUTH=user5:user5 + +# HEAD + +BEGINDATA + + + + + + + + + + + + + doe + abcd.com + + + +ENDDATA + +REPLACE=_"[0-9a-f]+"_some valid etag_ +REPLACE=/^REV:.*$/REV:date/ diff --git a/testing/tests/carddav/2054-REPORT-carddavclient-HasNoEmailDiffCase.result b/testing/tests/carddav/2054-REPORT-carddavclient-HasNoEmailDiffCase.result new file mode 100644 index 00000000..07e5e293 --- /dev/null +++ b/testing/tests/carddav/2054-REPORT-carddavclient-HasNoEmailDiffCase.result @@ -0,0 +1,24 @@ + + + + /caldav.php/user5/addresses/sabre-vobject-41956788-1273-449e-bfb7-716850c91ec6.vcf + + + some valid etag + BEGIN:VCARD +VERSION:4.0 +PRODID:-//Sabre//Sabre VObject 4.3.3//EN +UID:sabre-vobject-41956788-1273-449e-bfb7-716850c91ec6 +FN:CardDavClient Test879489908 +N:Test879489908;CardDavClient;;; +NICKNAME:Jonny2 +TEL;TYPE=HOME:12345 +TEL:555 +REV:date +END:VCARD + + + HTTP/1.1 200 OK + + + diff --git a/testing/tests/carddav/2054-REPORT-carddavclient-HasNoEmailDiffCase.test b/testing/tests/carddav/2054-REPORT-carddavclient-HasNoEmailDiffCase.test new file mode 100644 index 00000000..31727940 --- /dev/null +++ b/testing/tests/carddav/2054-REPORT-carddavclient-HasNoEmailDiffCase.test @@ -0,0 +1,34 @@ +# +# Test for nonexistence of a lowercase property, which must treated +# cases-insensitively (hence EMAIL must not match) +# +# (only Jonny2 does not have EMAIL) +# +TYPE=REPORT +URL=http://regression.host/caldav.php/user5/addresses/ + +HEADER=Accept: text/xml,application/xml +HEADER=Content-Type: text/xml +HEADER=Depth: 1 + +AUTH=user5:user5 + +# HEAD + +BEGINDATA + + + + + + + + + + + + +ENDDATA + +REPLACE=_"[0-9a-f]+"_some valid etag_ +REPLACE=/^REV:.*$/REV:date/ diff --git a/testing/tests/carddav/2055-REPORT-carddavclient-HasEmailDiffCase.result b/testing/tests/carddav/2055-REPORT-carddavclient-HasEmailDiffCase.result new file mode 100644 index 00000000..772afcc8 --- /dev/null +++ b/testing/tests/carddav/2055-REPORT-carddavclient-HasEmailDiffCase.result @@ -0,0 +1,68 @@ + + + + /caldav.php/user5/addresses/sabre-vobject-131cdf91-5460-423b-a836-e420e5affe13.vcf + + + some valid etag + BEGIN:VCARD +VERSION:4.0 +PRODID:-//Sabre//Sabre VObject 4.3.3//EN +UID:sabre-vobject-131cdf91-5460-423b-a836-e420e5affe13 +FN:CardDavClient Test212420682 +N:Test212420682;CardDavClient;;; +NICKNAME:Jonny0 +EMAIL;TYPE=HOME:john6doe@example.com +EMAIL;TYPE=WORK:doe6@example.com +X-CUSTOMPROP;X-CUSTOMPARAM=WORK:foobar +REV:date +END:VCARD + + + HTTP/1.1 200 OK + + + + /caldav.php/user5/addresses/sabre-vobject-8121cd7a-8251-4b74-a952-ca91fdc21e36.vcf + + + some valid etag + BEGIN:VCARD +VERSION:4.0 +PRODID:-//Sabre//Sabre VObject 4.3.3//EN +UID:sabre-vobject-8121cd7a-8251-4b74-a952-ca91fdc21e36 +FN:CardDavClient Test913043917 +N:Test913043917;CardDavClient;;; +NICKNAME:Jonny1 +EMAIL:maxmu@abcd.com +X-CUSTOMPROP;X-CUSTOMPARAM=HOME,WORK:foobar +REV:date +END:VCARD + + + HTTP/1.1 200 OK + + + + /caldav.php/user5/addresses/sabre-vobject-34cd55a8-330f-47cd-8b69-6fbd16a0880b.vcf + + + some valid etag + BEGIN:VCARD +VERSION:4.0 +PRODID:-//Sabre//Sabre VObject 4.3.3//EN +UID:sabre-vobject-34cd55a8-330f-47cd-8b69-6fbd16a0880b +FN:CardDavClient Test1520108081 +N:Test1520108081;CardDavClient;;; +NICKNAME:Jonny3 +ITEM1.EMAIL:foo@ex.com +ITEM1.X-ABLABEL:CustomLabel +IMPP;X-SERVICE-TYPE=Jabber;TYPE=HOME:xmpp:foo@example.com +REV:date +END:VCARD + + + HTTP/1.1 200 OK + + + diff --git a/testing/tests/carddav/2055-REPORT-carddavclient-HasEmailDiffCase.test b/testing/tests/carddav/2055-REPORT-carddavclient-HasEmailDiffCase.test new file mode 100644 index 00000000..4613fc81 --- /dev/null +++ b/testing/tests/carddav/2055-REPORT-carddavclient-HasEmailDiffCase.test @@ -0,0 +1,32 @@ +# +# This is the inverse of 2054, we request a REPORT for (lowercase) +# property 'email' and expect all three results containing EMAIL +# +# (Jonny0, Jonny1 and Jonny3 should be returned) +# +TYPE=REPORT +URL=http://regression.host/caldav.php/user5/addresses/ + +HEADER=Accept: text/xml,application/xml +HEADER=Content-Type: text/xml +HEADER=Depth: 1 + +AUTH=user5:user5 + +# HEAD + +BEGINDATA + + + + + + + + + + +ENDDATA + +REPLACE=_"[0-9a-f]+"_some valid etag_ +REPLACE=/^REV:.*$/REV:date/ diff --git a/testing/tests/carddav/2056-REPORT-carddavclient-HasNoGrpEmail.result b/testing/tests/carddav/2056-REPORT-carddavclient-HasNoGrpEmail.result new file mode 100644 index 00000000..b8f9db8b --- /dev/null +++ b/testing/tests/carddav/2056-REPORT-carddavclient-HasNoGrpEmail.result @@ -0,0 +1,67 @@ + + + + /caldav.php/user5/addresses/sabre-vobject-131cdf91-5460-423b-a836-e420e5affe13.vcf + + + some valid etag + BEGIN:VCARD +VERSION:4.0 +PRODID:-//Sabre//Sabre VObject 4.3.3//EN +UID:sabre-vobject-131cdf91-5460-423b-a836-e420e5affe13 +FN:CardDavClient Test212420682 +N:Test212420682;CardDavClient;;; +NICKNAME:Jonny0 +EMAIL;TYPE=HOME:john6doe@example.com +EMAIL;TYPE=WORK:doe6@example.com +X-CUSTOMPROP;X-CUSTOMPARAM=WORK:foobar +REV:date +END:VCARD + + + HTTP/1.1 200 OK + + + + /caldav.php/user5/addresses/sabre-vobject-8121cd7a-8251-4b74-a952-ca91fdc21e36.vcf + + + some valid etag + BEGIN:VCARD +VERSION:4.0 +PRODID:-//Sabre//Sabre VObject 4.3.3//EN +UID:sabre-vobject-8121cd7a-8251-4b74-a952-ca91fdc21e36 +FN:CardDavClient Test913043917 +N:Test913043917;CardDavClient;;; +NICKNAME:Jonny1 +EMAIL:maxmu@abcd.com +X-CUSTOMPROP;X-CUSTOMPARAM=HOME,WORK:foobar +REV:date +END:VCARD + + + HTTP/1.1 200 OK + + + + /caldav.php/user5/addresses/sabre-vobject-41956788-1273-449e-bfb7-716850c91ec6.vcf + + + some valid etag + BEGIN:VCARD +VERSION:4.0 +PRODID:-//Sabre//Sabre VObject 4.3.3//EN +UID:sabre-vobject-41956788-1273-449e-bfb7-716850c91ec6 +FN:CardDavClient Test879489908 +N:Test879489908;CardDavClient;;; +NICKNAME:Jonny2 +TEL;TYPE=HOME:12345 +TEL:555 +REV:date +END:VCARD + + + HTTP/1.1 200 OK + + + diff --git a/testing/tests/carddav/2056-REPORT-carddavclient-HasNoGrpEmail.test b/testing/tests/carddav/2056-REPORT-carddavclient-HasNoGrpEmail.test new file mode 100644 index 00000000..2fd9979f --- /dev/null +++ b/testing/tests/carddav/2056-REPORT-carddavclient-HasNoGrpEmail.test @@ -0,0 +1,32 @@ +# +# Test for non-existence of a grouped property (case-insensitive) +# +# (Jonny3 has item1.EMAIL set) +# +TYPE=REPORT +URL=http://regression.host/caldav.php/user5/addresses/ + +HEADER=Accept: text/xml,application/xml +HEADER=Content-Type: text/xml +HEADER=Depth: 1 + +AUTH=user5:user5 + +# HEAD + +BEGINDATA + + + + + + + + + + + +ENDDATA + +REPLACE=_"[0-9a-f]+"_some valid etag_ +REPLACE=/^REV:.*$/REV:date/ diff --git a/testing/tests/carddav/2057-REPORT-carddavclient-HasGrpEmail.result b/testing/tests/carddav/2057-REPORT-carddavclient-HasGrpEmail.result new file mode 100644 index 00000000..6c0b17e8 --- /dev/null +++ b/testing/tests/carddav/2057-REPORT-carddavclient-HasGrpEmail.result @@ -0,0 +1,25 @@ + + + + /caldav.php/user5/addresses/sabre-vobject-34cd55a8-330f-47cd-8b69-6fbd16a0880b.vcf + + + some valid etag + BEGIN:VCARD +VERSION:4.0 +PRODID:-//Sabre//Sabre VObject 4.3.3//EN +UID:sabre-vobject-34cd55a8-330f-47cd-8b69-6fbd16a0880b +FN:CardDavClient Test1520108081 +N:Test1520108081;CardDavClient;;; +NICKNAME:Jonny3 +ITEM1.EMAIL:foo@ex.com +ITEM1.X-ABLABEL:CustomLabel +IMPP;X-SERVICE-TYPE=Jabber;TYPE=HOME:xmpp:foo@example.com +REV:date +END:VCARD + + + HTTP/1.1 200 OK + + + diff --git a/testing/tests/carddav/2057-REPORT-carddavclient-HasGrpEmail.test b/testing/tests/carddav/2057-REPORT-carddavclient-HasGrpEmail.test new file mode 100644 index 00000000..3e06b0f6 --- /dev/null +++ b/testing/tests/carddav/2057-REPORT-carddavclient-HasGrpEmail.test @@ -0,0 +1,30 @@ +# +# Request a report for a grouped property (inverse of 2055) +# +# (only Jonny3 has item1.EMAIL set) +# +TYPE=REPORT +URL=http://regression.host/caldav.php/user5/addresses/ + +HEADER=Accept: text/xml,application/xml +HEADER=Content-Type: text/xml +HEADER=Depth: 1 + +AUTH=user5:user5 + +# HEAD + +BEGINDATA + + + + + + + + + +ENDDATA + +REPLACE=_"[0-9a-f]+"_some valid etag_ +REPLACE=/^REV:.*$/REV:date/ diff --git a/testing/tests/carddav/2058-REPORT-carddavclient-GrpEmailEquals.result b/testing/tests/carddav/2058-REPORT-carddavclient-GrpEmailEquals.result new file mode 100644 index 00000000..6c0b17e8 --- /dev/null +++ b/testing/tests/carddav/2058-REPORT-carddavclient-GrpEmailEquals.result @@ -0,0 +1,25 @@ + + + + /caldav.php/user5/addresses/sabre-vobject-34cd55a8-330f-47cd-8b69-6fbd16a0880b.vcf + + + some valid etag + BEGIN:VCARD +VERSION:4.0 +PRODID:-//Sabre//Sabre VObject 4.3.3//EN +UID:sabre-vobject-34cd55a8-330f-47cd-8b69-6fbd16a0880b +FN:CardDavClient Test1520108081 +N:Test1520108081;CardDavClient;;; +NICKNAME:Jonny3 +ITEM1.EMAIL:foo@ex.com +ITEM1.X-ABLABEL:CustomLabel +IMPP;X-SERVICE-TYPE=Jabber;TYPE=HOME:xmpp:foo@example.com +REV:date +END:VCARD + + + HTTP/1.1 200 OK + + + diff --git a/testing/tests/carddav/2058-REPORT-carddavclient-GrpEmailEquals.test b/testing/tests/carddav/2058-REPORT-carddavclient-GrpEmailEquals.test new file mode 100644 index 00000000..02de3b5e --- /dev/null +++ b/testing/tests/carddav/2058-REPORT-carddavclient-GrpEmailEquals.test @@ -0,0 +1,33 @@ +# +# Request a report for a text-match on a grouped property +# +# (only Jonny3 has item1.EMAIL set or a matching address) +# +TYPE=REPORT +URL=http://regression.host/caldav.php/user5/addresses/ + +HEADER=Accept: text/xml,application/xml +HEADER=Content-Type: text/xml +HEADER=Depth: 1 + +AUTH=user5:user5 + +# HEAD + +BEGINDATA + + + + + + + + + foo@ex.com + + + +ENDDATA + +REPLACE=_"[0-9a-f]+"_some valid etag_ +REPLACE=/^REV:.*$/REV:date/ diff --git a/testing/tests/carddav/2059-REPORT-carddavclient-GrpEmailContains.result b/testing/tests/carddav/2059-REPORT-carddavclient-GrpEmailContains.result new file mode 100644 index 00000000..6c0b17e8 --- /dev/null +++ b/testing/tests/carddav/2059-REPORT-carddavclient-GrpEmailContains.result @@ -0,0 +1,25 @@ + + + + /caldav.php/user5/addresses/sabre-vobject-34cd55a8-330f-47cd-8b69-6fbd16a0880b.vcf + + + some valid etag + BEGIN:VCARD +VERSION:4.0 +PRODID:-//Sabre//Sabre VObject 4.3.3//EN +UID:sabre-vobject-34cd55a8-330f-47cd-8b69-6fbd16a0880b +FN:CardDavClient Test1520108081 +N:Test1520108081;CardDavClient;;; +NICKNAME:Jonny3 +ITEM1.EMAIL:foo@ex.com +ITEM1.X-ABLABEL:CustomLabel +IMPP;X-SERVICE-TYPE=Jabber;TYPE=HOME:xmpp:foo@example.com +REV:date +END:VCARD + + + HTTP/1.1 200 OK + + + diff --git a/testing/tests/carddav/2059-REPORT-carddavclient-GrpEmailContains.test b/testing/tests/carddav/2059-REPORT-carddavclient-GrpEmailContains.test new file mode 100644 index 00000000..02ed600b --- /dev/null +++ b/testing/tests/carddav/2059-REPORT-carddavclient-GrpEmailContains.test @@ -0,0 +1,34 @@ +# +# Request a report for a text-match on a grouped property +# +# (only Jonny3 has item1.EMAIL set, but the text-match alone might also find +# Jonny0) +# +TYPE=REPORT +URL=http://regression.host/caldav.php/user5/addresses/ + +HEADER=Accept: text/xml,application/xml +HEADER=Content-Type: text/xml +HEADER=Depth: 1 + +AUTH=user5:user5 + +# HEAD + +BEGINDATA + + + + + + + + + @ex + + + +ENDDATA + +REPLACE=_"[0-9a-f]+"_some valid etag_ +REPLACE=/^REV:.*$/REV:date/ diff --git a/testing/tests/carddav/2060-REPORT-carddavclient-MultivalueParamEquals.result b/testing/tests/carddav/2060-REPORT-carddavclient-MultivalueParamEquals.result new file mode 100644 index 00000000..1af09c1a --- /dev/null +++ b/testing/tests/carddav/2060-REPORT-carddavclient-MultivalueParamEquals.result @@ -0,0 +1,24 @@ + + + + /caldav.php/user5/addresses/sabre-vobject-8121cd7a-8251-4b74-a952-ca91fdc21e36.vcf + + + some valid etag + BEGIN:VCARD +VERSION:4.0 +PRODID:-//Sabre//Sabre VObject 4.3.3//EN +UID:sabre-vobject-8121cd7a-8251-4b74-a952-ca91fdc21e36 +FN:CardDavClient Test913043917 +N:Test913043917;CardDavClient;;; +NICKNAME:Jonny1 +EMAIL:maxmu@abcd.com +X-CUSTOMPROP;X-CUSTOMPARAM=HOME,WORK:foobar +REV:date +END:VCARD + + + HTTP/1.1 200 OK + + + diff --git a/testing/tests/carddav/2060-REPORT-carddavclient-MultivalueParamEquals.test b/testing/tests/carddav/2060-REPORT-carddavclient-MultivalueParamEquals.test new file mode 100644 index 00000000..20a49d14 --- /dev/null +++ b/testing/tests/carddav/2060-REPORT-carddavclient-MultivalueParamEquals.test @@ -0,0 +1,36 @@ +# +# Test matching one of a multi-value parameter +# +# (Jonny1 has X-CUSTOMPARAM=HOME,WORK but "HOME" is not just a part but +# an entire value ("equals") of a multi-value parameter +# +TYPE=REPORT +URL=http://regression.host/caldav.php/user5/addresses/ + +HEADER=Accept: text/xml,application/xml +HEADER=Content-Type: text/xml +HEADER=Depth: 1 + +AUTH=user5:user5 + +# HEAD + +BEGINDATA + + + + + + + + + + HOME + + + + +ENDDATA + +REPLACE=_"[0-9a-f]+"_some valid etag_ +REPLACE=/^REV:.*$/REV:date/ diff --git a/testing/tests/carddav/2061-REPORT-carddavclient-ParamDefined.result b/testing/tests/carddav/2061-REPORT-carddavclient-ParamDefined.result new file mode 100644 index 00000000..b59a3ca1 --- /dev/null +++ b/testing/tests/carddav/2061-REPORT-carddavclient-ParamDefined.result @@ -0,0 +1,25 @@ + + + + /caldav.php/user5/addresses/sabre-vobject-131cdf91-5460-423b-a836-e420e5affe13.vcf + + + some valid etag + BEGIN:VCARD +VERSION:4.0 +PRODID:-//Sabre//Sabre VObject 4.3.3//EN +UID:sabre-vobject-131cdf91-5460-423b-a836-e420e5affe13 +FN:CardDavClient Test212420682 +N:Test212420682;CardDavClient;;; +NICKNAME:Jonny0 +EMAIL;TYPE=HOME:john6doe@example.com +EMAIL;TYPE=WORK:doe6@example.com +X-CUSTOMPROP;X-CUSTOMPARAM=WORK:foobar +REV:date +END:VCARD + + + HTTP/1.1 200 OK + + + diff --git a/testing/tests/carddav/2061-REPORT-carddavclient-ParamDefined.test b/testing/tests/carddav/2061-REPORT-carddavclient-ParamDefined.test new file mode 100644 index 00000000..1b53ee68 --- /dev/null +++ b/testing/tests/carddav/2061-REPORT-carddavclient-ParamDefined.test @@ -0,0 +1,33 @@ +# +# Request a REPORT for EMAIL with defined TYPE parameter +# +# (only Jonny0 has a TYPE defined) +# +TYPE=REPORT +URL=http://regression.host/caldav.php/user5/addresses/ + +HEADER=Accept: text/xml,application/xml +HEADER=Content-Type: text/xml +HEADER=Depth: 1 + +AUTH=user5:user5 + +# HEAD + +BEGINDATA + + + + + + + + + + + + +ENDDATA + +REPLACE=_"[0-9a-f]+"_some valid etag_ +REPLACE=/^REV:.*$/REV:date/ diff --git a/testing/tests/carddav/2062-REPORT-carddavclient-ParamDefinedDiffCase.result b/testing/tests/carddav/2062-REPORT-carddavclient-ParamDefinedDiffCase.result new file mode 100644 index 00000000..b59a3ca1 --- /dev/null +++ b/testing/tests/carddav/2062-REPORT-carddavclient-ParamDefinedDiffCase.result @@ -0,0 +1,25 @@ + + + + /caldav.php/user5/addresses/sabre-vobject-131cdf91-5460-423b-a836-e420e5affe13.vcf + + + some valid etag + BEGIN:VCARD +VERSION:4.0 +PRODID:-//Sabre//Sabre VObject 4.3.3//EN +UID:sabre-vobject-131cdf91-5460-423b-a836-e420e5affe13 +FN:CardDavClient Test212420682 +N:Test212420682;CardDavClient;;; +NICKNAME:Jonny0 +EMAIL;TYPE=HOME:john6doe@example.com +EMAIL;TYPE=WORK:doe6@example.com +X-CUSTOMPROP;X-CUSTOMPARAM=WORK:foobar +REV:date +END:VCARD + + + HTTP/1.1 200 OK + + + diff --git a/testing/tests/carddav/2062-REPORT-carddavclient-ParamDefinedDiffCase.test b/testing/tests/carddav/2062-REPORT-carddavclient-ParamDefinedDiffCase.test new file mode 100644 index 00000000..7ad8bd69 --- /dev/null +++ b/testing/tests/carddav/2062-REPORT-carddavclient-ParamDefinedDiffCase.test @@ -0,0 +1,34 @@ +# +# Request a REPORT for EMAIL with defined TYPE parameter +# (like 2061, but param-filter needs to be case-insensitive) +# +# (again only Jonny0) +# +TYPE=REPORT +URL=http://regression.host/caldav.php/user5/addresses/ + +HEADER=Accept: text/xml,application/xml +HEADER=Content-Type: text/xml +HEADER=Depth: 1 + +AUTH=user5:user5 + +# HEAD + +BEGINDATA + + + + + + + + + + + + +ENDDATA + +REPLACE=_"[0-9a-f]+"_some valid etag_ +REPLACE=/^REV:.*$/REV:date/ diff --git a/testing/tests/ischedule/3050-PUT-with-attendees.result b/testing/tests/ischedule/3050-PUT-with-attendees.result index fb3acc7b..12f197e8 100644 --- a/testing/tests/ischedule/3050-PUT-with-attendees.result +++ b/testing/tests/ischedule/3050-PUT-with-attendees.result @@ -1,5 +1,3 @@ -HTTP/1.1 100 Continue - HTTP/1.1 200 OK Date: Dow, 01 Jan 2000 00:00:00 GMT ETag: "2f9bb75f51266683f713f8d382a67bff" diff --git a/testing/tests/ischedule/3051-PUT-with-attendees.result b/testing/tests/ischedule/3051-PUT-with-attendees.result index bbd9cf6d..e82aa8a8 100644 --- a/testing/tests/ischedule/3051-PUT-with-attendees.result +++ b/testing/tests/ischedule/3051-PUT-with-attendees.result @@ -1,5 +1,3 @@ -HTTP/1.1 100 Continue - HTTP/1.1 200 OK Date: Dow, 01 Jan 2000 00:00:00 GMT ETag: "2f9bb75f51266683f713f8d382a67bff" diff --git a/testing/tests/regression-suite/0000-Setup-PUT-collection-nz_holidays.result b/testing/tests/regression-suite/0000-Setup-PUT-collection-nz_holidays.result index eee5f869..57f457d2 100644 --- a/testing/tests/regression-suite/0000-Setup-PUT-collection-nz_holidays.result +++ b/testing/tests/regression-suite/0000-Setup-PUT-collection-nz_holidays.result @@ -1,5 +1,3 @@ -HTTP/1.1 100 Continue - HTTP/1.1 200 OK Date: Dow, 01 Jan 2000 00:00:00 GMT DAV: 1, 2, 3, access-control, calendar-access, calendar-schedule diff --git a/testing/tests/regression-suite/0000-Setup-PUT-collection-us_holidays.result b/testing/tests/regression-suite/0000-Setup-PUT-collection-us_holidays.result index eee5f869..57f457d2 100644 --- a/testing/tests/regression-suite/0000-Setup-PUT-collection-us_holidays.result +++ b/testing/tests/regression-suite/0000-Setup-PUT-collection-us_holidays.result @@ -1,5 +1,3 @@ -HTTP/1.1 100 Continue - HTTP/1.1 200 OK Date: Dow, 01 Jan 2000 00:00:00 GMT DAV: 1, 2, 3, access-control, calendar-access, calendar-schedule diff --git a/testing/tests/regression-suite/0000-Setup-PUT-collection-user3-utf8.result b/testing/tests/regression-suite/0000-Setup-PUT-collection-user3-utf8.result index 4f534d34..67b7eae5 100644 --- a/testing/tests/regression-suite/0000-Setup-PUT-collection-user3-utf8.result +++ b/testing/tests/regression-suite/0000-Setup-PUT-collection-user3-utf8.result @@ -1,5 +1,3 @@ -HTTP/1.1 100 Continue - HTTP/1.1 200 OK Date: Dow, 01 Jan 2000 00:00:00 GMT DAV: 1, 2, 3, access-control, calendar-access, calendar-schedule diff --git a/testing/tests/regression-suite/0000-Setup-PUT-collection-user3.result b/testing/tests/regression-suite/0000-Setup-PUT-collection-user3.result index 9de19173..01b1b57b 100644 --- a/testing/tests/regression-suite/0000-Setup-PUT-collection-user3.result +++ b/testing/tests/regression-suite/0000-Setup-PUT-collection-user3.result @@ -1,5 +1,3 @@ -HTTP/1.1 100 Continue - HTTP/1.1 200 OK Date: Dow, 01 Jan 2000 00:00:00 GMT DAV: 1, 2, 3, access-control, calendar-access, calendar-schedule diff --git a/testing/tests/regression-suite/0000-Setup-PUT-collection-user4.result b/testing/tests/regression-suite/0000-Setup-PUT-collection-user4.result index eee5f869..57f457d2 100644 --- a/testing/tests/regression-suite/0000-Setup-PUT-collection-user4.result +++ b/testing/tests/regression-suite/0000-Setup-PUT-collection-user4.result @@ -1,5 +1,3 @@ -HTTP/1.1 100 Continue - HTTP/1.1 200 OK Date: Dow, 01 Jan 2000 00:00:00 GMT DAV: 1, 2, 3, access-control, calendar-access, calendar-schedule diff --git a/testing/tests/regression-suite/0000-Setup-PUT-collection-user5.result b/testing/tests/regression-suite/0000-Setup-PUT-collection-user5.result index f621d68d..7bb00003 100644 --- a/testing/tests/regression-suite/0000-Setup-PUT-collection-user5.result +++ b/testing/tests/regression-suite/0000-Setup-PUT-collection-user5.result @@ -1,5 +1,3 @@ -HTTP/1.1 100 Continue - HTTP/1.1 200 OK Date: Dow, 01 Jan 2000 00:00:00 GMT DAV: 1, 2, 3, access-control, calendar-access, calendar-schedule diff --git a/testing/tests/regression-suite/0000-Setup-PUT-collection-user6.result b/testing/tests/regression-suite/0000-Setup-PUT-collection-user6.result index 6dc4ce4c..87eae9f2 100644 --- a/testing/tests/regression-suite/0000-Setup-PUT-collection-user6.result +++ b/testing/tests/regression-suite/0000-Setup-PUT-collection-user6.result @@ -1,5 +1,3 @@ -HTTP/1.1 100 Continue - HTTP/1.1 200 OK Date: Dow, 01 Jan 2000 00:00:00 GMT DAV: 1, 2, 3, access-control, calendar-access, calendar-schedule diff --git a/testing/tests/regression-suite/0000-Setup-PUT-collection.result b/testing/tests/regression-suite/0000-Setup-PUT-collection.result index e6a1056e..5176d185 100644 --- a/testing/tests/regression-suite/0000-Setup-PUT-collection.result +++ b/testing/tests/regression-suite/0000-Setup-PUT-collection.result @@ -1,5 +1,3 @@ -HTTP/1.1 100 Continue - HTTP/1.1 200 OK Date: Dow, 01 Jan 2000 00:00:00 GMT DAV: 1, 2, 3, access-control, calendar-access, calendar-schedule diff --git a/testing/tests/regression-suite/0104-Evo-PUT-1.result b/testing/tests/regression-suite/0104-Evo-PUT-1.result index 578d8b36..7172e1aa 100644 --- a/testing/tests/regression-suite/0104-Evo-PUT-1.result +++ b/testing/tests/regression-suite/0104-Evo-PUT-1.result @@ -1,5 +1,3 @@ -HTTP/1.1 100 Continue - HTTP/1.1 201 Created Date: Dow, 01 Jan 2000 00:00:00 GMT DAV: 1, 2, 3, access-control, calendar-access, calendar-schedule diff --git a/testing/tests/regression-suite/0230-Moz-REPORT-Tasks-Completed.result b/testing/tests/regression-suite/0230-Moz-REPORT-Tasks-Completed.result index a6102620..df6302ec 100644 --- a/testing/tests/regression-suite/0230-Moz-REPORT-Tasks-Completed.result +++ b/testing/tests/regression-suite/0230-Moz-REPORT-Tasks-Completed.result @@ -2,36 +2,12 @@ HTTP/1.1 207 Multi-Status Date: Dow, 01 Jan 2000 00:00:00 GMT DAV: 1, 2, 3, access-control, calendar-access, calendar-schedule DAV: extended-mkcol, bind, addressbook, calendar-auto-schedule, calendar-proxy -ETag: "8bfa1d55385dd1c0d877ba64358b56d4" -Content-Length: 1574 +ETag: "ad7855a9510df25e6c23b501a47f38ff" +Content-Length: 865 Content-Type: text/xml; charset="utf-8" - - /davical/caldav.php/user1/home/2178279a-aec2-471f-832d-1f6df6203f2f.ics - - - "509b0f0d8a3363379f9f5727f5dd74a0" - BEGIN:VCALENDAR -PRODID:-//Mozilla Calendar//NONSGML Sunbird//EN -VERSION:2.0 -BEGIN:VTODO -CREATED:20070805T200215Z -LAST-MODIFIED:20070805T201531Z -DTSTAMP:20070805T200215Z -UID:2178279a-aec2-471f-832d-1f6df6203f2f -SUMMARY:Incomplete\, uncancelled -X-MOZ-LOCATIONPATH:2178279a-aec2-471f-832d-1f6df6203f2f.ics -DESCRIPTION:This task is incomplete and has not been cancelled (has no - status at all) -END:VTODO -END:VCALENDAR - - - HTTP/1.1 200 OK - - /davical/caldav.php/user1/home/917b9e47-b748-4550-a566-657fbe672447.ics diff --git a/testing/tests/regression-suite/0233-Moz-PUT.result b/testing/tests/regression-suite/0233-Moz-PUT.result index c853092a..b441c3fa 100644 --- a/testing/tests/regression-suite/0233-Moz-PUT.result +++ b/testing/tests/regression-suite/0233-Moz-PUT.result @@ -1,5 +1,3 @@ -HTTP/1.1 100 Continue - HTTP/1.1 201 Created Date: Dow, 01 Jan 2000 00:00:00 GMT DAV: 1, 2, 3, access-control, calendar-access, calendar-schedule diff --git a/testing/tests/regression-suite/0515-iCal-PUT-VEVENT.result b/testing/tests/regression-suite/0515-iCal-PUT-VEVENT.result index fc8ff9a8..5c201ee8 100644 --- a/testing/tests/regression-suite/0515-iCal-PUT-VEVENT.result +++ b/testing/tests/regression-suite/0515-iCal-PUT-VEVENT.result @@ -1,5 +1,3 @@ -HTTP/1.1 100 Continue - HTTP/1.1 201 Created Date: Dow, 01 Jan 2000 00:00:00 GMT DAV: 1, 2, 3, access-control, calendar-access, calendar-schedule diff --git a/testing/tests/regression-suite/0548-iCal-PROPFIND.result b/testing/tests/regression-suite/0548-iCal-PROPFIND.result index 870f59c7..b08d7470 100644 --- a/testing/tests/regression-suite/0548-iCal-PROPFIND.result +++ b/testing/tests/regression-suite/0548-iCal-PROPFIND.result @@ -1,5 +1,3 @@ -HTTP/1.1 100 Continue - HTTP/1.1 207 Multi-Status Date: Dow, 01 Jan 2000 00:00:00 GMT DAV: 1, 2, 3, access-control, calendar-access, calendar-schedule diff --git a/testing/tests/regression-suite/0803-Mulberry-PUT-1.result b/testing/tests/regression-suite/0803-Mulberry-PUT-1.result index e9042fd2..ab92fc13 100644 --- a/testing/tests/regression-suite/0803-Mulberry-PUT-1.result +++ b/testing/tests/regression-suite/0803-Mulberry-PUT-1.result @@ -1,5 +1,3 @@ -HTTP/1.1 100 Continue - HTTP/1.1 207 Multi-Status Date: Dow, 01 Jan 2000 00:00:00 GMT DAV: 1, 2, 3, access-control, calendar-access, calendar-schedule diff --git a/testing/tests/regression-suite/0804-Mulberry-PUT-1.result b/testing/tests/regression-suite/0804-Mulberry-PUT-1.result index 6d0080e4..7c02dac8 100644 --- a/testing/tests/regression-suite/0804-Mulberry-PUT-1.result +++ b/testing/tests/regression-suite/0804-Mulberry-PUT-1.result @@ -1,5 +1,3 @@ -HTTP/1.1 100 Continue - HTTP/1.1 201 Created Date: Dow, 01 Jan 2000 00:00:00 GMT DAV: 1, 2, 3, access-control, calendar-access, calendar-schedule diff --git a/testing/tests/regression-suite/0902-PUT-collection.result b/testing/tests/regression-suite/0902-PUT-collection.result index fbce37f5..2b313fba 100644 --- a/testing/tests/regression-suite/0902-PUT-collection.result +++ b/testing/tests/regression-suite/0902-PUT-collection.result @@ -1,5 +1,3 @@ -HTTP/1.1 100 Continue - HTTP/1.1 200 OK Date: Dow, 01 Jan 2000 00:00:00 GMT DAV: 1, 2, 3, access-control, calendar-access, calendar-schedule diff --git a/testing/tests/scheduling/3010-PUT-with-attendees.result b/testing/tests/scheduling/3010-PUT-with-attendees.result index ca01a6bd..65e62b64 100644 --- a/testing/tests/scheduling/3010-PUT-with-attendees.result +++ b/testing/tests/scheduling/3010-PUT-with-attendees.result @@ -1,5 +1,3 @@ -HTTP/1.1 100 Continue - HTTP/1.1 201 Created Date: Dow, 01 Jan 2000 00:00:00 GMT DAV: 1, 2, 3, access-control, calendar-access, calendar-schedule diff --git a/testing/tests/scheduling/3032-PUT-iCal-with-attendees.result b/testing/tests/scheduling/3032-PUT-iCal-with-attendees.result index f85a166a..ec71606d 100644 --- a/testing/tests/scheduling/3032-PUT-iCal-with-attendees.result +++ b/testing/tests/scheduling/3032-PUT-iCal-with-attendees.result @@ -1,5 +1,3 @@ -HTTP/1.1 100 Continue - HTTP/1.1 204 No Content Date: Dow, 01 Jan 2000 00:00:00 GMT DAV: 1, 2, 3, access-control, calendar-access, calendar-schedule diff --git a/testing/tests/scheduling/Restore-Database.result b/testing/tests/scheduling/Restore-Database.result index e382f989..0e126f5f 100644 --- a/testing/tests/scheduling/Restore-Database.result +++ b/testing/tests/scheduling/Restore-Database.result @@ -5,7 +5,7 @@ setval -------- - 1649 + 1653 (1 row) setval @@ -125,7 +125,7 @@ setval -------- - 42 + 43 (1 row) setval diff --git a/testing/tests/timezone/5000-capabilities.result b/testing/tests/timezone/5000-capabilities.result index 55a1369b..384c791f 100644 --- a/testing/tests/timezone/5000-capabilities.result +++ b/testing/tests/timezone/5000-capabilities.result @@ -1,12 +1,12 @@ HTTP/1.1 200 OK Date: Dow, 01 Jan 2000 00:00:00 GMT -Content-Length: 3011 +Content-Length: 2962 Content-Type: application/xml; charset="utf-8" - Olson releases/tzdata2012c + Olson tzdata-latest mailto:admin@davical.example.com @@ -15,14 +15,14 @@ Content-Type: application/xml; charset="utf-8" list List timezone identifiers and localized forms - + lang false true Specify desired localized form(s) - + changedsince false @@ -31,7 +31,7 @@ Content-Type: application/xml; charset="utf-8" given date - + returnall false @@ -40,14 +40,14 @@ Content-Type: application/xml; charset="utf-8" - + get Returns one or more timezones as specified by the tzid parameter. - + format false @@ -57,14 +57,14 @@ Content-Type: application/xml; charset="utf-8" Specify required format for timezone. - + lang false true Specify desired localized form(s) - + tzid true @@ -73,21 +73,21 @@ Content-Type: application/xml; charset="utf-8" - + expand Expands the specified timezone(s) into local onset and UTC offsets - + tzid true true Specify desired timezone identifiers - + start false @@ -97,7 +97,7 @@ Content-Type: application/xml; charset="utf-8" current year is assumed. - + end false @@ -108,7 +108,7 @@ Content-Type: application/xml; charset="utf-8" - + capabilities Gets the capabilities of the server diff --git a/testing/tests/timezone/Restore-Database.result b/testing/tests/timezone/Restore-Database.result index 2e683d71..85feeb12 100644 --- a/testing/tests/timezone/Restore-Database.result +++ b/testing/tests/timezone/Restore-Database.result @@ -5,7 +5,7 @@ setval -------- - 1674 + 1678 (1 row) setval @@ -125,7 +125,7 @@ setval -------- - 47 + 48 (1 row) setval