diff --git a/inc/DAVPrincipal.php b/inc/DAVPrincipal.php index 8e1119e6..53f42ffc 100644 --- a/inc/DAVPrincipal.php +++ b/inc/DAVPrincipal.php @@ -451,7 +451,7 @@ class DAVPrincipal extends Principal * Returns properties which are specific to this principal */ function PrincipalProperty( $tag, $prop, &$reply, &$denied ) { - global $c, $request; + global $c; dbg_error_log('principal',':PrincipalProperty: Principal Property "%s"', $tag ); switch( $tag ) { @@ -488,26 +488,13 @@ class DAVPrincipal extends Principal case 'http://calendarserver.org/ns/:group-member-set': case 'DAV::group-member-set': - if ( $request->IsProxyRequest() ) { - /** calendar-proxy-{read,write} pseudo-principal, see caldav-proxy 3.2 */ - if ($request->proxy_type == 'read') { - $reply->DAVElement( $prop, 'group-member-set', $reply->href($this->ReadProxyGroup()) ); - } else { - $reply->DAVElement( $prop, 'group-member-set', $reply->href($this->WriteProxyGroup()) ); - } - } else { - /** regular group principal */ - if ( ! $this->_is_group ) return false; - $reply->DAVElement( $prop, 'group-member-set', $reply->href($this->group_member_set) ); - } + /** regular group principal, the calendar-proxy pseudo-principal is handled in DAVResource */ + if ( ! $this->_is_group ) return false; + $reply->DAVElement( $prop, 'group-member-set', $reply->href($this->group_member_set) ); break; case 'http://calendarserver.org/ns/:group-membership': case 'DAV::group-membership': - if ( $request->IsProxyRequest() ) { - /* the calendar-proxy-{read,write} pseudo-principal should not be a member of any group */ - return false; - } $reply->DAVElement( $prop, 'group-membership', $reply->href($this->GroupMembership()) ); break; diff --git a/inc/DAVResource.php b/inc/DAVResource.php index 578265a4..de619555 100644 --- a/inc/DAVResource.php +++ b/inc/DAVResource.php @@ -113,6 +113,11 @@ class DAVResource */ private $_is_proxy_request; + /** + * @var The type of proxy collection this resource is or is in: read or write + */ + private $proxy_type; + /** * @var An array of the methods we support on this resource. */ @@ -1709,6 +1714,30 @@ EOQRY; $reply->CalendarserverElement($prop, 'calendar-proxy-'.$proxy_type.'-for', $reply->href( $this->principal->ProxyFor($proxy_type) ) ); break; + case 'http://calendarserver.org/ns/:group-member-set': + case 'DAV::group-member-set': + if ( $this->_is_proxy_request ) { + $this->FetchPrincipal(); + if ( $this->proxy_type == 'read' ) { + $reply->DAVElement( $prop, 'group-member-set', $reply->href( $this->principal->ReadProxyGroup() ) ); + } else { + $reply->DAVElement( $prop, 'group-member-set', $reply->href( $this->principal->WriteProxyGroup() ) ); + } + } else { + return false; // leave this to DAVPrincipal + } + break; + + case 'http://calendarserver.org/ns/:group-membership': + case 'DAV::group-membership': + if ( $this->_is_proxy_request ) { + /* the calendar-proxy-{read,write} pseudo-principal should not be a member of any group */ + $reply->NSElement($prop, $tag ); + } else { + return false; // leave this to DAVPrincipal + } + break; + case 'DAV::current-user-privilege-set': if ( $this->HavePrivilegeTo('DAV::read-current-user-privilege-set') ) { $reply->NSElement($prop, $tag, $this->BuildPrivileges() ); diff --git a/testing/tests/regression-suite/0524-iCal-PROPFIND.result b/testing/tests/regression-suite/0524-iCal-PROPFIND.result index d04fc312..b9aaea0d 100644 --- a/testing/tests/regression-suite/0524-iCal-PROPFIND.result +++ b/testing/tests/regression-suite/0524-iCal-PROPFIND.result @@ -2,8 +2,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 DAV: extended-mkcol, bind, addressbook, calendar-auto-schedule, calendar-proxy -ETag: "12c268350747ee0076940f61be140827" -Content-Length: 6090 +ETag: "e8e214ead69e04c9895f54796a53e3ab" +Content-Length: 5449 Content-Type: text/xml; charset="utf-8" @@ -130,15 +130,10 @@ Content-Type: text/xml; charset="utf-8" - - /caldav.php/assistant1/ + /caldav.php/teamclient1/ - /caldav.php/user1/ - /caldav.php/user1/calendar-proxy-read/ - /caldav.php/assistant1/calendar-proxy-read/ - /caldav.php/resource1/calendar-proxy-read/ - /caldav.php/resource2/calendar-proxy-read/ - + + /caldav.php/user1/ /caldav.php/assistant1/ @@ -152,7 +147,6 @@ Content-Type: text/xml; charset="utf-8" - HTTP/1.1 404 Not Found @@ -168,15 +162,10 @@ Content-Type: text/xml; charset="utf-8" - + /caldav.php/assistant1/ - /caldav.php/teamclient1/ - /caldav.php/user1/ - /caldav.php/user1/calendar-proxy-read/ - /caldav.php/assistant1/calendar-proxy-read/ - /caldav.php/resource1/calendar-proxy-read/ - /caldav.php/resource2/calendar-proxy-read/ - + + /caldav.php/user1/ /caldav.php/assistant1/ @@ -190,7 +179,6 @@ Content-Type: text/xml; charset="utf-8" - HTTP/1.1 404 Not Found diff --git a/testing/tests/regression-suite/0525-iCal-PROPFIND.result b/testing/tests/regression-suite/0525-iCal-PROPFIND.result index 0ee1e1a3..822b2ba0 100644 --- a/testing/tests/regression-suite/0525-iCal-PROPFIND.result +++ b/testing/tests/regression-suite/0525-iCal-PROPFIND.result @@ -2,7 +2,7 @@ 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: "6fd0a85fe582ad2af132724a7566be48" +ETag: "68b03f180d5f9046907a86251de16246" Content-Length: 1055 Content-Type: text/xml; charset="utf-8" @@ -22,6 +22,7 @@ Content-Type: text/xml; charset="utf-8" /caldav.php/teamclient1/ + /caldav.php/user1/ /caldav.php/assistant1/ @@ -35,7 +36,6 @@ Content-Type: text/xml; charset="utf-8" - HTTP/1.1 404 Not Found diff --git a/testing/tests/regression-suite/0527-iCal-PROPFIND.result b/testing/tests/regression-suite/0527-iCal-PROPFIND.result index eb1e4d9f..4307f531 100644 --- a/testing/tests/regression-suite/0527-iCal-PROPFIND.result +++ b/testing/tests/regression-suite/0527-iCal-PROPFIND.result @@ -2,8 +2,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 DAV: extended-mkcol, bind, addressbook, calendar-auto-schedule, calendar-proxy -ETag: "01b056983b4d191d66f3286a33260b0c" -Content-Length: 1718 +ETag: "3c65d6bec2a0e4b4b1585376514d6ac4" +Content-Length: 1424 Content-Type: text/xml; charset="utf-8" @@ -48,10 +48,7 @@ Content-Type: text/xml; charset="utf-8" /caldav.php/resmgr1/calendar-proxy-read/ - - /caldav.php/resource1/calendar-proxy-write/ - /caldav.php/resource2/calendar-proxy-write/ - + HTTP/1.1 200 OK @@ -60,10 +57,7 @@ Content-Type: text/xml; charset="utf-8" /caldav.php/resmgr1/calendar-proxy-write/ - - /caldav.php/resource1/calendar-proxy-write/ - /caldav.php/resource2/calendar-proxy-write/ - + HTTP/1.1 200 OK diff --git a/testing/tests/regression-suite/0528-iCal-PROPFIND.result b/testing/tests/regression-suite/0528-iCal-PROPFIND.result index eb1e4d9f..4307f531 100644 --- a/testing/tests/regression-suite/0528-iCal-PROPFIND.result +++ b/testing/tests/regression-suite/0528-iCal-PROPFIND.result @@ -2,8 +2,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 DAV: extended-mkcol, bind, addressbook, calendar-auto-schedule, calendar-proxy -ETag: "01b056983b4d191d66f3286a33260b0c" -Content-Length: 1718 +ETag: "3c65d6bec2a0e4b4b1585376514d6ac4" +Content-Length: 1424 Content-Type: text/xml; charset="utf-8" @@ -48,10 +48,7 @@ Content-Type: text/xml; charset="utf-8" /caldav.php/resmgr1/calendar-proxy-read/ - - /caldav.php/resource1/calendar-proxy-write/ - /caldav.php/resource2/calendar-proxy-write/ - + HTTP/1.1 200 OK @@ -60,10 +57,7 @@ Content-Type: text/xml; charset="utf-8" /caldav.php/resmgr1/calendar-proxy-write/ - - /caldav.php/resource1/calendar-proxy-write/ - /caldav.php/resource2/calendar-proxy-write/ - + HTTP/1.1 200 OK