diff --git a/dba/sample-data.sql b/dba/sample-data.sql
index b0690f5a..a3354f6c 100644
--- a/dba/sample-data.sql
+++ b/dba/sample-data.sql
@@ -16,6 +16,8 @@ INSERT INTO usr ( user_no, active, email_ok, updated, username, password, fullna
VALUES( 13, TRUE, current_date, current_date, 'user4', '**user4', 'User 4', 'user4@example.net' );
INSERT INTO usr ( user_no, active, email_ok, updated, username, password, fullname, email )
VALUES( 14, TRUE, current_date, current_date, 'user5', '**user5', 'User 5', 'user5@example.net' );
+INSERT INTO usr ( user_no, active, email_ok, updated, username, password, fullname, email )
+ VALUES( 15, TRUE, current_date, current_date, 'User Six', '**user6', 'User 6', 'user6@example.net' );
INSERT INTO usr ( user_no, active, email_ok, updated, username, password, fullname, email )
VALUES( 20, TRUE, current_date, current_date, 'manager1', '**manager1', 'Manager 1', 'manager1@example.net' );
diff --git a/inc/always.php b/inc/always.php
index 46349581..43a036ee 100644
--- a/inc/always.php
+++ b/inc/always.php
@@ -231,12 +231,16 @@ function getStatusMessage($status) {
/**
-* Construct a URL from the supplied dav_name
+* Construct a URL from the supplied dav_name. The URL will be urlencoded,
+* except for any '/' characters in it.
* @param string $partial_path The part of the path after the script name
*/
function ConstructURL( $partial_path ) {
global $c;
+ $partial_path = rawurlencode($partial_path);
+ $partial_path = str_replace( '%2F', '/', $partial_path);
+
if ( ! isset($c->_url_script_path) ) {
$c->_url_script_path = (preg_match('#/$#', $c->protocol_server_port_script) ? 'caldav.php' : '');
$c->_url_script_path = $c->protocol_server_port_script . $c->_url_script_path;
diff --git a/inc/always.php.in b/inc/always.php.in
index 4872b541..ffd2fded 100644
--- a/inc/always.php.in
+++ b/inc/always.php.in
@@ -231,12 +231,16 @@ function getStatusMessage($status) {
/**
-* Construct a URL from the supplied dav_name
+* Construct a URL from the supplied dav_name. The URL will be urlencoded,
+* except for any '/' characters in it.
* @param string $partial_path The part of the path after the script name
*/
function ConstructURL( $partial_path ) {
global $c;
+ $partial_path = rawurlencode($partial_path);
+ $partial_path = str_replace( '%2F', '/', $partial_path);
+
if ( ! isset($c->_url_script_path) ) {
$c->_url_script_path = (preg_match('#/$#', $c->protocol_server_port_script) ? 'caldav.php' : '');
$c->_url_script_path = $c->protocol_server_port_script . $c->_url_script_path;
diff --git a/testing/tests/regression-suite/000-Setup-PUT-collection-user3.result b/testing/tests/regression-suite/000-Setup-PUT-collection-user3.result
index ec833044..19497e0e 100644
--- a/testing/tests/regression-suite/000-Setup-PUT-collection-user3.result
+++ b/testing/tests/regression-suite/000-Setup-PUT-collection-user3.result
@@ -6,3 +6,113 @@ DAV: 1, 2, 3, access-control, calendar-access, calendar-schedule
Content-Length: 0
Content-Type: text/plain; charset="utf-8"
+ A1 CalDAV DATA: >BEGIN:VCALENDAR
+PRODID:-//davical.org//NONSGML AWL Calendar//EN
+VERSION:2.0
+CALSCALE:GREGORIAN
+BEGIN:VEVENT
+SEQUENCE:3
+TRANSP:OPAQUE
+UID:55F6EC95-2D21-4FB9-9AE1-A6E020B44AEB
+DTSTART;TZID=Europe/Helsinki:20081025T133000
+DTSTAMP:20081024T200745Z
+RRULE:FREQ=MONTHLY;INTERVAL=1;BYDAY=1TU,2WE,3TH,4FR;BYMONTH=3,6,9,10,12
+SUMMARY:Irregular meeting for User 3
+CREATED:20081024T200734Z
+DTEND;TZID=Europe/Helsinki:20081025T143000
+END:VEVENT
+BEGIN:VTIMEZONE
+TZID:Europe/Helsinki
+BEGIN:DAYLIGHT
+TZOFFSETFROM:+0200
+TZOFFSETTO:+0300
+DTSTART:19810329T030000
+RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU
+TZNAME:EEST
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:+0300
+TZOFFSETTO:+0200
+DTSTART:19961027T040000
+RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU
+TZNAME:EET
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
+<
+ caldav_type: >VEVENT<
+ class: >PUBLIC<
+ description: >NULL<
+ dtend: >2008-10-25 14:30:00+13<
+ dtstamp: >2008-10-24 20:07:45<
+ dtstart: >2008-10-25 13:30:00+13<
+ due: >NULL<
+ location: >NULL<
+ logged_user: >12<
+ percent_complete: >NULL<
+ priority: >NULL<
+ rrule: >FREQ=MONTHLY;INTERVAL=1;BYDAY=1TU,2WE,3TH,4FR;BYMONTH=3,6,9,10,12<
+ status: >NULL<
+ summary: >Irregular meeting for User 3<
+ transp: >OPAQUE<
+ tz_id: >Europe/Helsinki<
+ uid: >55F6EC95-2D21-4FB9-9AE1-A6E020B44AEB<
+ url: >NULL<
+ user_no: >12<
+
+ A1 CalDAV DATA: >BEGIN:VCALENDAR
+PRODID:-//davical.org//NONSGML AWL Calendar//EN
+VERSION:2.0
+CALSCALE:GREGORIAN
+BEGIN:VEVENT
+SEQUENCE:2
+TRANSP:OPAQUE
+UID:174F9C2A-1223-40C4-9E06-6E91F2EA9491
+DTSTART;TZID=Europe/Helsinki:20081024T084500
+DTSTAMP:20081025T112653Z
+SUMMARY:Dentist\'s Council meeting
+RRULE:FREQ=MONTHLY;INTERVAL=1;BYDAY=TU,FR
+CREATED:20081025T112648Z
+DTEND;TZID=Europe/Helsinki:20081024T113000
+END:VEVENT
+BEGIN:VTIMEZONE
+TZID:Europe/Helsinki
+BEGIN:DAYLIGHT
+TZOFFSETFROM:+0200
+TZOFFSETTO:+0300
+DTSTART:19810329T030000
+RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU
+TZNAME:EEST
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:+0300
+TZOFFSETTO:+0200
+DTSTART:19961027T040000
+RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU
+TZNAME:EET
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
+<
+ caldav_type: >VEVENT<
+ class: >PUBLIC<
+ description: >NULL<
+ dtend: >2008-10-24 11:30:00+13<
+ dtstamp: >2008-10-25 11:26:53<
+ dtstart: >2008-10-24 08:45:00+13<
+ due: >NULL<
+ location: >NULL<
+ logged_user: >12<
+ percent_complete: >NULL<
+ priority: >NULL<
+ rrule: >FREQ=MONTHLY;INTERVAL=1;BYDAY=TU,FR<
+ status: >NULL<
+ summary: >Dentist\'s Council meeting<
+ transp: >OPAQUE<
+ tz_id: >Europe/Helsinki<
+ uid: >174F9C2A-1223-40C4-9E06-6E91F2EA9491<
+ url: >NULL<
+ user_no: >12<
+
+ count: >2<
+
diff --git a/testing/tests/regression-suite/000-Setup-PUT-collection-user3.test b/testing/tests/regression-suite/000-Setup-PUT-collection-user3.test
index 128cbe25..aaab7d77 100644
--- a/testing/tests/regression-suite/000-Setup-PUT-collection-user3.test
+++ b/testing/tests/regression-suite/000-Setup-PUT-collection-user3.test
@@ -37,18 +37,18 @@ BEGIN:VEVENT
SEQUENCE:3
TRANSP:OPAQUE
UID:55F6EC95-2D21-4FB9-9AE1-A6E020B44AEB
-DTSTART;TZID=Europe/Helsinki:20081001T133000
+DTSTART;TZID=Europe/Helsinki:20081025T133000
DTSTAMP:20081024T200745Z
RRULE:FREQ=MONTHLY;INTERVAL=1;BYDAY=1TU,2WE,3TH,4FR;BYMONTH=3,6,9,10,12
-SUMMARY:User 3
+SUMMARY:Irregular meeting for User 3
CREATED:20081024T200734Z
-DTEND;TZID=Europe/Helsinki:20081025T133000
+DTEND;TZID=Europe/Helsinki:20081025T143000
END:VEVENT
BEGIN:VEVENT
SEQUENCE:2
TRANSP:OPAQUE
UID:174F9C2A-1223-40C4-9E06-6E91F2EA9491
-DTSTART;TZID=Europe/Helsinki:20081017T084500
+DTSTART;TZID=Europe/Helsinki:20081024T084500
DTSTAMP:20081025T112653Z
SUMMARY:Dentist\'s Council meeting
RRULE:FREQ=MONTHLY;INTERVAL=1;BYDAY=TU,FR
@@ -57,3 +57,21 @@ DTEND;TZID=Europe/Helsinki:20081024T113000
END:VEVENT
END:VCALENDAR
ENDDATA
+
+
+QUERY
+SELECT caldav_data.user_no, caldav_type, logged_user,
+ uid, dtstamp, dtstart, dtend, due, summary, location,
+ description, priority, class, transp, rrule, url,
+ percent_complete, tz_id, status,
+ caldav_data AS "A1 CalDAV DATA"
+FROM caldav_data JOIN calendar_item USING(dav_name)
+WHERE caldav_data.dav_name ~ '^/user3/home/'
+ENDQUERY
+
+QUERY
+SELECT count(*)
+ FROM caldav_data JOIN calendar_item USING(dav_name)
+ WHERE caldav_data.dav_name ~ '^/user3/home/'
+ENDQUERY
+
diff --git a/testing/tests/regression-suite/000-Setup-PUT-collection-user6.result b/testing/tests/regression-suite/000-Setup-PUT-collection-user6.result
new file mode 100644
index 00000000..f77d58f1
--- /dev/null
+++ b/testing/tests/regression-suite/000-Setup-PUT-collection-user6.result
@@ -0,0 +1,118 @@
+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
+Content-Length: 0
+Content-Type: text/plain; charset="utf-8"
+
+ A1 CalDAV DATA: >BEGIN:VCALENDAR
+PRODID:-//davical.org//NONSGML AWL Calendar//EN
+VERSION:2.0
+CALSCALE:GREGORIAN
+BEGIN:VEVENT
+SEQUENCE:3
+TRANSP:OPAQUE
+UID:55F6EC95-2D21-4FB9-9AE1-A6E020B44AEB
+DTSTART;TZID=Europe/Helsinki:20081025T133000
+DTSTAMP:20081024T200745Z
+RRULE:FREQ=MONTHLY;INTERVAL=1;BYDAY=1TU,2WE,3TH,4FR;BYMONTH=3,6,9,10,12
+SUMMARY:Irregular meeting for User 3
+CREATED:20081024T200734Z
+DTEND;TZID=Europe/Helsinki:20081025T143000
+END:VEVENT
+BEGIN:VTIMEZONE
+TZID:Europe/Helsinki
+BEGIN:DAYLIGHT
+TZOFFSETFROM:+0200
+TZOFFSETTO:+0300
+DTSTART:19810329T030000
+RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU
+TZNAME:EEST
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:+0300
+TZOFFSETTO:+0200
+DTSTART:19961027T040000
+RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU
+TZNAME:EET
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
+<
+ caldav_type: >VEVENT<
+ class: >PUBLIC<
+ description: >NULL<
+ dtend: >2008-10-25 14:30:00+13<
+ dtstamp: >2008-10-24 20:07:45<
+ dtstart: >2008-10-25 13:30:00+13<
+ due: >NULL<
+ location: >NULL<
+ logged_user: >15<
+ percent_complete: >NULL<
+ priority: >NULL<
+ rrule: >FREQ=MONTHLY;INTERVAL=1;BYDAY=1TU,2WE,3TH,4FR;BYMONTH=3,6,9,10,12<
+ status: >NULL<
+ summary: >Irregular meeting for User 3<
+ transp: >OPAQUE<
+ tz_id: >Europe/Helsinki<
+ uid: >55F6EC95-2D21-4FB9-9AE1-A6E020B44AEB<
+ url: >NULL<
+ user_no: >15<
+
+ A1 CalDAV DATA: >BEGIN:VCALENDAR
+PRODID:-//davical.org//NONSGML AWL Calendar//EN
+VERSION:2.0
+CALSCALE:GREGORIAN
+BEGIN:VEVENT
+SEQUENCE:2
+TRANSP:OPAQUE
+UID:174F9C2A-1223-40C4-9E06-6E91F2EA9491
+DTSTART;TZID=Europe/Helsinki:20081024T084500
+DTSTAMP:20081025T112653Z
+SUMMARY:Dentist\'s Council meeting
+RRULE:FREQ=MONTHLY;INTERVAL=1;BYDAY=TU,FR
+CREATED:20081025T112648Z
+DTEND;TZID=Europe/Helsinki:20081024T113000
+END:VEVENT
+BEGIN:VTIMEZONE
+TZID:Europe/Helsinki
+BEGIN:DAYLIGHT
+TZOFFSETFROM:+0200
+TZOFFSETTO:+0300
+DTSTART:19810329T030000
+RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU
+TZNAME:EEST
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:+0300
+TZOFFSETTO:+0200
+DTSTART:19961027T040000
+RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU
+TZNAME:EET
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
+<
+ caldav_type: >VEVENT<
+ class: >PUBLIC<
+ description: >NULL<
+ dtend: >2008-10-24 11:30:00+13<
+ dtstamp: >2008-10-25 11:26:53<
+ dtstart: >2008-10-24 08:45:00+13<
+ due: >NULL<
+ location: >NULL<
+ logged_user: >15<
+ percent_complete: >NULL<
+ priority: >NULL<
+ rrule: >FREQ=MONTHLY;INTERVAL=1;BYDAY=TU,FR<
+ status: >NULL<
+ summary: >Dentist\'s Council meeting<
+ transp: >OPAQUE<
+ tz_id: >Europe/Helsinki<
+ uid: >174F9C2A-1223-40C4-9E06-6E91F2EA9491<
+ url: >NULL<
+ user_no: >15<
+
+ count: >2<
+
diff --git a/testing/tests/regression-suite/000-Setup-PUT-collection-user6.test b/testing/tests/regression-suite/000-Setup-PUT-collection-user6.test
new file mode 100644
index 00000000..a4d29963
--- /dev/null
+++ b/testing/tests/regression-suite/000-Setup-PUT-collection-user6.test
@@ -0,0 +1,77 @@
+#
+# PUT a calendar collection to user3 so we have some starting events
+#
+# There is no CalDAV defined behaviour for this.
+#
+TYPE=PUT
+URL=http://mycaldav/caldav.php/User%20Six/home/
+HEADER=User-Agent: RSCDS Testing/0.9.x
+HEADER=Content-Type: text/calendar; charset=utf-8
+AUTH=User Six:user6
+
+HEAD
+
+BEGINDATA
+BEGIN:VCALENDAR
+VERSION:2.0
+PRODID:-//Apple Inc.//iCal 3.0//EN
+CALSCALE:GREGORIAN
+BEGIN:VTIMEZONE
+TZID:Europe/Helsinki
+BEGIN:DAYLIGHT
+TZOFFSETFROM:+0200
+TZOFFSETTO:+0300
+DTSTART:19810329T030000
+RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU
+TZNAME:EEST
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:+0300
+TZOFFSETTO:+0200
+DTSTART:19961027T040000
+RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU
+TZNAME:EET
+END:STANDARD
+END:VTIMEZONE
+BEGIN:VEVENT
+SEQUENCE:3
+TRANSP:OPAQUE
+UID:55F6EC95-2D21-4FB9-9AE1-A6E020B44AEB
+DTSTART;TZID=Europe/Helsinki:20081025T133000
+DTSTAMP:20081024T200745Z
+RRULE:FREQ=MONTHLY;INTERVAL=1;BYDAY=1TU,2WE,3TH,4FR;BYMONTH=3,6,9,10,12
+SUMMARY:Irregular meeting for User 3
+CREATED:20081024T200734Z
+DTEND;TZID=Europe/Helsinki:20081025T143000
+END:VEVENT
+BEGIN:VEVENT
+SEQUENCE:2
+TRANSP:OPAQUE
+UID:174F9C2A-1223-40C4-9E06-6E91F2EA9491
+DTSTART;TZID=Europe/Helsinki:20081024T084500
+DTSTAMP:20081025T112653Z
+SUMMARY:Dentist\'s Council meeting
+RRULE:FREQ=MONTHLY;INTERVAL=1;BYDAY=TU,FR
+CREATED:20081025T112648Z
+DTEND;TZID=Europe/Helsinki:20081024T113000
+END:VEVENT
+END:VCALENDAR
+ENDDATA
+
+
+QUERY
+SELECT caldav_data.user_no, caldav_type, logged_user,
+ uid, dtstamp, dtstart, dtend, due, summary, location,
+ description, priority, class, transp, rrule, url,
+ percent_complete, tz_id, status,
+ caldav_data AS "A1 CalDAV DATA"
+FROM caldav_data JOIN calendar_item USING(dav_name)
+WHERE caldav_data.dav_name ~ '^/User Six/home/'
+ENDQUERY
+
+QUERY
+SELECT count(*)
+ FROM caldav_data JOIN calendar_item USING(dav_name)
+ WHERE caldav_data.dav_name ~ '^/User Six/home/'
+ENDQUERY
+
diff --git a/testing/tests/regression-suite/308-Chandler-OPTIONS-3.result b/testing/tests/regression-suite/308-Chandler-OPTIONS-3.result
index 1ca23afb..7b628fd2 100644
--- a/testing/tests/regression-suite/308-Chandler-OPTIONS-3.result
+++ b/testing/tests/regression-suite/308-Chandler-OPTIONS-3.result
@@ -1,7 +1,7 @@
-HTTP/1.1 200 OK
+HTTP/1.1 404 Not Found
Date: Dow, 01 Jan 2000 00:00:00 GMT
DAV: 1, 2, 3, access-control, calendar-access, calendar-schedule
-Allow: OPTIONS, GET, HEAD, PUT, DELETE, PROPFIND, MKCOL, MKCALENDAR, LOCK, UNLOCK, REPORT, PROPPATCH, POST
-Content-Length: 0
+Content-Length: 37
Content-Type: text/plain; charset="utf-8"
+No collection found at that location.
\ No newline at end of file
diff --git a/testing/tests/regression-suite/309-Chandler-PROPFIND-3.result b/testing/tests/regression-suite/309-Chandler-PROPFIND-3.result
index 248a2652..3405dab3 100644
--- a/testing/tests/regression-suite/309-Chandler-PROPFIND-3.result
+++ b/testing/tests/regression-suite/309-Chandler-PROPFIND-3.result
@@ -1,25 +1,9 @@
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
-ETag: "0c15a8bfc4ea79dadb1dc60a6e443e04"
-Content-Length: 497
+ETag: "07474790757c5e1b526ce4901889d6d3"
+Content-Length: 68
Content-Type: text/xml; charset="utf-8"
-
-
- /caldav.php/user1/home/.chandler/
-
-
-
-
-
-
-
- /user1/home/.chandler/
- "a150b8e5ab38926a153b90c6546dc610"
-
- HTTP/1.1 200 OK
-
-
-
+
diff --git a/testing/tests/regression-suite/605-Soho-MKCALENDAR.test b/testing/tests/regression-suite/605-Soho-MKCALENDAR.test
index 0c30cc67..6f6a3719 100644
--- a/testing/tests/regression-suite/605-Soho-MKCALENDAR.test
+++ b/testing/tests/regression-suite/605-Soho-MKCALENDAR.test
@@ -20,7 +20,7 @@ BEGINDATA
- SOHO+collection
+ SOHO collection
#0000FFFF
@@ -35,5 +35,5 @@ BEGINDATA
ENDDATA
QUERY
-SELECT * FROM collection WHERE dav_name = '/user1/SOHO+collection';
+SELECT * FROM collection WHERE dav_name = '/user1/SOHO collection';
ENDQUERY
diff --git a/testing/tests/regression-suite/606-Soho-PROPPATCH.result b/testing/tests/regression-suite/606-Soho-PROPPATCH.result
index 2a47668a..cebfef59 100644
--- a/testing/tests/regression-suite/606-Soho-PROPPATCH.result
+++ b/testing/tests/regression-suite/606-Soho-PROPPATCH.result
@@ -1,14 +1,14 @@
HTTP/1.1 200 OK
Date: Dow, 01 Jan 2000 00:00:00 GMT
DAV: 1, 2, 3, access-control, calendar-access, calendar-schedule
-Content-Location: /caldav.php/user1/SOHO+collection/
-Content-Length: 235
+Content-Location: /caldav.php/user1/SOHO%20collection/
+Content-Length: 237
Content-Type: text/xml; charset="utf-8"
- /caldav.php/user1/SOHO+collection/
+ /caldav.php/user1/SOHO%20collection/
All requested changes were made.
diff --git a/testing/tests/regression-suite/606-Soho-PROPPATCH.test b/testing/tests/regression-suite/606-Soho-PROPPATCH.test
index 40065594..9eaabf2e 100644
--- a/testing/tests/regression-suite/606-Soho-PROPPATCH.test
+++ b/testing/tests/regression-suite/606-Soho-PROPPATCH.test
@@ -6,7 +6,7 @@
TYPE=PROPPATCH
# Note the URL doesn't have a trailling '/'
-URL=http://mycaldav/caldav.php/user1/SOHO+collection
+URL=http://mycaldav/caldav.php/user1/SOHO%20collection
HEADER=User-Agent: SOHO Organizer/6.5.2 libcurl/7.17.0 OpenSSL/0.9.7l zlib/1.2.3 libssh2/0.17
HEADER=Content-Type: text/xml; charset=utf-8
@@ -22,5 +22,5 @@ ENDDATA
QUERY
SELECT * FROM collection JOIN property USING (dav_name)
- WHERE collection.dav_name = '/user1/SOHO+collection';
+ WHERE collection.dav_name = '/user1/SOHO collection';
ENDQUERY
diff --git a/testing/tests/regression-suite/840-Spec-PROPPATCH-1.result b/testing/tests/regression-suite/840-Spec-PROPPATCH-1.result
index 30ceaa83..23289049 100644
--- a/testing/tests/regression-suite/840-Spec-PROPPATCH-1.result
+++ b/testing/tests/regression-suite/840-Spec-PROPPATCH-1.result
@@ -29,13 +29,13 @@ changed_last_30se: >1<
changed_by: >10<
changed_last_30se: >1<
- dav_name: >/user1/SOHO+collection/<
+ dav_name: >/user1/SOHO collection/<
property_name: >com.apple.ical::calendarcolor<
property_value: >#FF8000FF<
changed_by: >10<
changed_last_30se: >1<
- dav_name: >/user1/SOHO+collection/<
+ dav_name: >/user1/SOHO collection/<
property_name: >urn:ietf:params:xml:ns:caldav:calendar-description<
property_value: >Calendar description<
diff --git a/testing/tests/regression-suite/861-Spec-REPORT-principal.result b/testing/tests/regression-suite/861-Spec-REPORT-principal.result
index dd8dd5d5..b6a1d8a8 100644
--- a/testing/tests/regression-suite/861-Spec-REPORT-principal.result
+++ b/testing/tests/regression-suite/861-Spec-REPORT-principal.result
@@ -1,8 +1,8 @@
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
-ETag: "faa56d44ed127283279410dc201ac450"
-Content-Length: 3757
+ETag: "8f4ecca4cebdbf26f6a439035ec65d61"
+Content-Length: 4038
Content-Type: text/xml; charset="utf-8"
@@ -91,6 +91,18 @@ Content-Type: text/xml; charset="utf-8"
HTTP/1.1 200 OK
+
+ /caldav.php/User%20Six/
+
+
+
+ /caldav.php/User%20Six/
+
+ User 6
+
+ HTTP/1.1 200 OK
+
+
/caldav.php/manager1/
diff --git a/testing/tests/regression-suite/910-Space-OPTIONS.result b/testing/tests/regression-suite/910-Space-OPTIONS.result
new file mode 100644
index 00000000..1ca23afb
--- /dev/null
+++ b/testing/tests/regression-suite/910-Space-OPTIONS.result
@@ -0,0 +1,7 @@
+HTTP/1.1 200 OK
+Date: Dow, 01 Jan 2000 00:00:00 GMT
+DAV: 1, 2, 3, access-control, calendar-access, calendar-schedule
+Allow: OPTIONS, GET, HEAD, PUT, DELETE, PROPFIND, MKCOL, MKCALENDAR, LOCK, UNLOCK, REPORT, PROPPATCH, POST
+Content-Length: 0
+Content-Type: text/plain; charset="utf-8"
+
diff --git a/testing/tests/regression-suite/910-Space-OPTIONS.test b/testing/tests/regression-suite/910-Space-OPTIONS.test
new file mode 100644
index 00000000..b1cd5e76
--- /dev/null
+++ b/testing/tests/regression-suite/910-Space-OPTIONS.test
@@ -0,0 +1,6 @@
+#
+# Do an OPTIONS request on a URL with a space
+TYPE=OPTIONS
+URL=http://mycaldav/caldav.php/User%20Six/home/
+AUTH=User Six:user6
+HEAD
diff --git a/testing/tests/regression-suite/911-Space-MKCALENDAR.result b/testing/tests/regression-suite/911-Space-MKCALENDAR.result
new file mode 100644
index 00000000..3c0f6c62
--- /dev/null
+++ b/testing/tests/regression-suite/911-Space-MKCALENDAR.result
@@ -0,0 +1,13 @@
+HTTP/1.1 201 Created
+Date: Dow, 01 Jan 2000 00:00:00 GMT
+DAV: 1, 2, 3, access-control, calendar-access, calendar-schedule
+Cache-Control: no-cache
+Content-Length: 0
+Content-Type: text/plain; charset="utf-8"
+
+ dav_displayname: >Space Calendar<
+ is_calendar: >1<
+ parent_container: >/User Six/<
+public_events_onl: >0<
+ user_no: >15<
+
diff --git a/testing/tests/regression-suite/911-Space-MKCALENDAR.test b/testing/tests/regression-suite/911-Space-MKCALENDAR.test
new file mode 100644
index 00000000..a97fd57a
--- /dev/null
+++ b/testing/tests/regression-suite/911-Space-MKCALENDAR.test
@@ -0,0 +1,30 @@
+#
+# MKCALENDAR test for username with a space
+#
+TYPE=MKCALENDAR
+URL=http://mycaldav/caldav.php/User%20Six/DEADBEEF-EFD9-4F0F-9BDC-5335E04D47E0/
+HEADER=Content-Type: text/xml
+AUTH=User Six:user6
+HEAD
+
+
+BEGINDATA
+
+
+
+
+ Space Calendar
+ #391B71A0
+
+
+
+ENDDATA
+
+
+QUERY
+SELECT user_no, parent_container, dav_displayname,
+ is_calendar, public_events_only
+FROM collection
+WHERE dav_name = '/User Six/DEADBEEF-EFD9-4F0F-9BDC-5335E04D47E0/';
+ENDQUERY
+
diff --git a/testing/tests/regression-suite/912-Space-PROPFIND.result b/testing/tests/regression-suite/912-Space-PROPFIND.result
new file mode 100644
index 00000000..854617fc
--- /dev/null
+++ b/testing/tests/regression-suite/912-Space-PROPFIND.result
@@ -0,0 +1,81 @@
+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
+ETag: "d9e474e1d625534857e60566ab57af44"
+Content-Length: 1914
+Content-Type: text/xml; charset="utf-8"
+
+
+
+
+ /caldav.php/User%20Six/
+
+
+
+
+
+
+ User 6
+ "6892a953b4f6ae6179a98759c8de3de2"
+
+ HTTP/1.1 200 OK
+
+
+
+
+
+
+
+
+ HTTP/1.1 404 Not Found
+
+
+
+ /caldav.php/User%20Six/home/
+
+
+
+
+
+
+
+ home
+ "6cc47e929c65c2342a578dcba09a2492"
+
+ HTTP/1.1 200 OK
+
+
+
+
+
+
+
+
+ HTTP/1.1 404 Not Found
+
+
+
+ /caldav.php/User%20Six/DEADBEEF-EFD9-4F0F-9BDC-5335E04D47E0/
+
+
+
+
+
+
+
+ Space Calendar
+ "d0711d9c33f6c22359ee83adb7751cda"
+ #391B71A0
+
+ HTTP/1.1 200 OK
+
+
+
+
+
+
+
+ HTTP/1.1 404 Not Found
+
+
+
diff --git a/testing/tests/regression-suite/912-Space-PROPFIND.test b/testing/tests/regression-suite/912-Space-PROPFIND.test
new file mode 100644
index 00000000..5060485c
--- /dev/null
+++ b/testing/tests/regression-suite/912-Space-PROPFIND.test
@@ -0,0 +1,26 @@
+#
+# Testing username with a space, similar to iCal 10.5
+#
+TYPE=PROPFIND
+URL=http://mycaldav/caldav.php/User%20Six/
+AUTH=User Six:user6
+HEAD
+
+HEADER=User-Agent: DAVKit/3.0.4 (652); CalendarStore/3.0.5 (841); iCal/3.0.5 (1270); Mac OS X/10.5.5 (9F33)
+HEADER=Content-Type: text/xml
+HEADER=Depth: 1
+
+BEGINDATA
+
+
+
+
+
+
+
+
+
+
+
+
+ENDDATA