Changes to support usernames containing a space, or other strange non-'/' character.

This commit is contained in:
Andrew McMillan 2009-03-19 10:11:50 +13:00
parent 09feb2e2ab
commit e61e843a36
20 changed files with 531 additions and 39 deletions

View File

@ -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' );

View File

@ -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;

View File

@ -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;

View File

@ -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<

View File

@ -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

View File

@ -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<

View File

@ -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

View File

@ -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.

View File

@ -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"
<?xml version="1.0" encoding="utf-8" ?>
<multistatus xmlns="DAV:" xmlns:C="urn:ietf:params:xml:ns:caldav">
<response>
<href>/caldav.php/user1/home/.chandler/</href>
<propstat>
<prop>
<resourcetype>
<collection/>
<C:calendar/>
<C:schedule-calendar/>
</resourcetype>
<displayname>/user1/home/.chandler/</displayname>
<getetag>"a150b8e5ab38926a153b90c6546dc610"</getetag>
</prop>
<status>HTTP/1.1 200 OK</status>
</propstat>
</response>
</multistatus>
<multistatus xmlns="DAV:"/>

View File

@ -20,7 +20,7 @@ BEGINDATA
<C:mkcalendar xmlns:D="DAV:" xmlns:C="urn:ietf:params:xml:ns:caldav" xmlns:I="com.apple.ical:">
<D:set>
<D:prop>
<D:displayname>SOHO+collection</D:displayname>
<D:displayname>SOHO collection</D:displayname>
<I:calendarcolor>#0000FFFF</I:calendarcolor>
<C:supported-calendar-component-set>
<C:comp name="VEVENT"/>
@ -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

View File

@ -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"
<?xml version="1.0" encoding="utf-8" ?>
<multistatus xmlns="DAV:">
<response>
<href>/caldav.php/user1/SOHO+collection/</href>
<href>/caldav.php/user1/SOHO%20collection/</href>
<responsedescription>All requested changes were made.</responsedescription>
</response>
</multistatus>

View File

@ -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

View File

@ -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<

View File

@ -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"
<?xml version="1.0" encoding="utf-8" ?>
@ -91,6 +91,18 @@ Content-Type: text/xml; charset="utf-8"
<status>HTTP/1.1 200 OK</status>
</propstat>
</response>
<response>
<href>/caldav.php/User%20Six/</href>
<propstat>
<prop>
<C:calendar-home-set>
<href>/caldav.php/User%20Six/</href>
</C:calendar-home-set>
<displayname>User 6</displayname>
</prop>
<status>HTTP/1.1 200 OK</status>
</propstat>
</response>
<response>
<href>/caldav.php/manager1/</href>
<propstat>

View File

@ -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"

View File

@ -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

View File

@ -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<

View File

@ -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
<?xml version="1.0" encoding="UTF-8" ?>
<x0:mkcalendar xmlns:x0="urn:ietf:params:xml:ns:caldav" xmlns:x1="DAV:" xmlns:x2="http://apple.com/ns/ical/">
<x1:set>
<x1:prop>
<x1:displayname>Space Calendar</x1:displayname>
<x2:calendar-color>#391B71A0</x2:calendar-color>
</x1:prop>
</x1:set>
</x0:mkcalendar>
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

View File

@ -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"
<?xml version="1.0" encoding="utf-8" ?>
<multistatus xmlns="DAV:" xmlns:A="http://calendarserver.org/ns/" xmlns:C="urn:ietf:params:xml:ns:caldav" xmlns:A1="http://apple.com/ns/ical/">
<response>
<href>/caldav.php/User%20Six/</href>
<propstat>
<prop>
<resourcetype>
<collection/>
<principal/>
</resourcetype>
<displayname>User 6</displayname>
<A:getctag>"6892a953b4f6ae6179a98759c8de3de2"</A:getctag>
</prop>
<status>HTTP/1.1 200 OK</status>
</propstat>
<propstat>
<prop>
<C:calendar-free-busy-set/>
<C:calendar-description/>
<A1:calendar-color/>
<A1:calendar-order/>
</prop>
<status>HTTP/1.1 404 Not Found</status>
</propstat>
</response>
<response>
<href>/caldav.php/User%20Six/home/</href>
<propstat>
<prop>
<resourcetype>
<collection/>
<C:calendar/>
<C:schedule-calendar/>
</resourcetype>
<displayname>home</displayname>
<A:getctag>"6cc47e929c65c2342a578dcba09a2492"</A:getctag>
</prop>
<status>HTTP/1.1 200 OK</status>
</propstat>
<propstat>
<prop>
<C:calendar-free-busy-set/>
<C:calendar-description/>
<A1:calendar-color/>
<A1:calendar-order/>
</prop>
<status>HTTP/1.1 404 Not Found</status>
</propstat>
</response>
<response>
<href>/caldav.php/User%20Six/DEADBEEF-EFD9-4F0F-9BDC-5335E04D47E0/</href>
<propstat>
<prop>
<resourcetype>
<collection/>
<C:calendar/>
<C:schedule-calendar/>
</resourcetype>
<displayname>Space Calendar</displayname>
<A:getctag>"d0711d9c33f6c22359ee83adb7751cda"</A:getctag>
<A1:calendar-color>#391B71A0</A1:calendar-color>
</prop>
<status>HTTP/1.1 200 OK</status>
</propstat>
<propstat>
<prop>
<C:calendar-free-busy-set/>
<C:calendar-description/>
<A1:calendar-order/>
</prop>
<status>HTTP/1.1 404 Not Found</status>
</propstat>
</response>
</multistatus>

View File

@ -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
<?xml version="1.0" encoding="utf-8"?>
<x0:propfind xmlns:x1="http://calendarserver.org/ns/" xmlns:x0="DAV:" xmlns:x3="http://apple.com/ns/ical/" xmlns:x2="urn:ietf:params:xml:ns:caldav">
<x0:prop>
<x1:getctag/>
<x0:displayname/>
<x2:calendar-description/>
<x3:calendar-color/>
<x3:calendar-order/>
<x0:resourcetype/>
<x2:calendar-free-busy-set/>
</x0:prop>
</x0:propfind>
ENDDATA