mirror of
https://gitlab.com/davical-project/davical.git
synced 2026-08-21 17:06:22 +00:00
Allow complete disabling of handling for Apple's old calendar-proxy.
We'll make this a default behaviour after 2012 is over and remove it sometime after that.
This commit is contained in:
parent
946e0719ef
commit
f55f8fbee3
@ -72,15 +72,9 @@ function send_dav_header() {
|
||||
$dav = $c->override_dav_header;
|
||||
}
|
||||
else {
|
||||
/** hack to get around bugzilla #463392 - remove sometime after 2011-02-28 */
|
||||
if ( isset($_SERVER['HTTP_USER_AGENT']) && preg_match( '{ Gecko/(20[01]\d[01]\d[0123]\d)(\d+)? }', $_SERVER['HTTP_USER_AGENT'], $matches ) && $matches[1] < 20100520 ) {
|
||||
$dav = '1, 2, 3, access-control, calendar-access, calendar-schedule, extended-mkcol, calendar-proxy, bind, addressbook';
|
||||
}
|
||||
else {
|
||||
// We don't actually do calendar-auto-schedule yet - when we do we should add it on here.
|
||||
$dav = '1, 2, 3, access-control, calendar-access, calendar-schedule, extended-mkcol, calendar-proxy, bind, addressbook';
|
||||
if ( $c->enable_auto_schedule ) $dav .= ', calendar-auto-schedule';
|
||||
}
|
||||
$dav = '1, 2, 3, access-control, calendar-access, calendar-schedule, extended-mkcol, bind, addressbook';
|
||||
if ( $c->enable_auto_schedule ) $dav .= ', calendar-auto-schedule';
|
||||
if ( !isset($c->disable_caldav_proxy) || $c->disable_caldav_proxy == false) $dav .= ', calendar-proxy';
|
||||
}
|
||||
$dav = explode( "\n", wordwrap( $dav ) );
|
||||
foreach( $dav AS $v ) {
|
||||
@ -105,15 +99,21 @@ if ( ! ($request->IsPrincipal() || isset($request->collection) || $request->meth
|
||||
@ob_flush(); exit(0);
|
||||
}
|
||||
}
|
||||
param_to_global('add_member','.*');
|
||||
$add_member = isset($add_member);
|
||||
|
||||
switch ( $request->method ) {
|
||||
case 'OPTIONS': include_once('caldav-OPTIONS.php'); break;
|
||||
case 'REPORT': include_once('caldav-REPORT.php'); break;
|
||||
case 'PROPFIND': include('caldav-PROPFIND.php'); break;
|
||||
case 'GET': include('caldav-GET.php'); break;
|
||||
case 'POST': include('caldav-POST.php'); break;
|
||||
case 'HEAD': include('caldav-GET.php'); break;
|
||||
case 'PROPPATCH': include('caldav-PROPPATCH.php'); break;
|
||||
case 'POST':
|
||||
if ( !$add_member ) {
|
||||
include('caldav-POST.php');
|
||||
break;
|
||||
}
|
||||
case 'PUT':
|
||||
switch( $request->content_type ) {
|
||||
case 'text/calendar':
|
||||
|
||||
@ -199,44 +199,43 @@ class DAVPrincipal extends Principal
|
||||
$this->write_proxy_for = array();
|
||||
$this->read_proxy_for = array();
|
||||
|
||||
if ( !isset($c->disable_caldav_proxy) || $c->disable_caldav_proxy === false ) {
|
||||
if ( isset($c->disable_caldav_proxy) && $c->disable_caldav_proxy ) return;
|
||||
|
||||
$write_priv = privilege_to_bits(array('write'));
|
||||
// whom are we a proxy for? who is a proxy for us?
|
||||
// (as per Caldav Proxy section 5.1 Paragraph 7 and 5)
|
||||
$sql = 'SELECT principal_id, username, pprivs(:request_principal::int8,principal_id,:scan_depth::int) FROM principal JOIN usr USING(user_no) WHERE principal_id IN (SELECT * from p_has_proxy_access_to(:request_principal,:scan_depth))';
|
||||
$params = array( ':request_principal' => $this->principal_id, ':scan_depth' => $c->permission_scan_depth );
|
||||
$qry = new AwlQuery($sql, $params);
|
||||
if ( $qry->Exec('DAVPrincipal') && $qry->rows() > 0 ) {
|
||||
while( $relationship = $qry->Fetch() ) {
|
||||
if ( (bindec($relationship->pprivs) & $write_priv) != 0 ) {
|
||||
$this->write_proxy_for[] = ConstructURL( '/'. $relationship->username . '/', true);
|
||||
$this->group_membership[] = ConstructURL( '/'. $relationship->username . '/calendar-proxy-write/', true);
|
||||
}
|
||||
else {
|
||||
$this->read_proxy_for[] = ConstructURL( '/'. $relationship->username . '/', true);
|
||||
$this->group_membership[] = ConstructURL( '/'. $relationship->username . '/calendar-proxy-read/', true);
|
||||
}
|
||||
$write_priv = privilege_to_bits(array('write'));
|
||||
// whom are we a proxy for? who is a proxy for us?
|
||||
// (as per Caldav Proxy section 5.1 Paragraph 7 and 5)
|
||||
$sql = 'SELECT principal_id, username, pprivs(:request_principal::int8,principal_id,:scan_depth::int) FROM principal JOIN usr USING(user_no) WHERE principal_id IN (SELECT * from p_has_proxy_access_to(:request_principal,:scan_depth))';
|
||||
$params = array( ':request_principal' => $this->principal_id, ':scan_depth' => $c->permission_scan_depth );
|
||||
$qry = new AwlQuery($sql, $params);
|
||||
if ( $qry->Exec('DAVPrincipal') && $qry->rows() > 0 ) {
|
||||
while( $relationship = $qry->Fetch() ) {
|
||||
if ( (bindec($relationship->pprivs) & $write_priv) != 0 ) {
|
||||
$this->write_proxy_for[] = ConstructURL( '/'. $relationship->username . '/', true);
|
||||
$this->group_membership[] = ConstructURL( '/'. $relationship->username . '/calendar-proxy-write/', true);
|
||||
}
|
||||
else {
|
||||
$this->read_proxy_for[] = ConstructURL( '/'. $relationship->username . '/', true);
|
||||
$this->group_membership[] = ConstructURL( '/'. $relationship->username . '/calendar-proxy-read/', true);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
$sql = 'SELECT principal_id, username, pprivs(:request_principal::int8,principal_id,:scan_depth::int) FROM principal JOIN usr USING(user_no) WHERE principal_id IN (SELECT * from grants_proxy_access_from_p(:request_principal,:scan_depth))';
|
||||
$qry = new AwlQuery($sql, $params ); // reuse $params assigned for earlier query
|
||||
if ( $qry->Exec('DAVPrincipal') && $qry->rows() > 0 ) {
|
||||
while( $relationship = $qry->Fetch() ) {
|
||||
if ( bindec($relationship->pprivs) & $write_priv ) {
|
||||
$this->write_proxy_group[] = ConstructURL( '/'. $relationship->username . '/', true);
|
||||
}
|
||||
else {
|
||||
$this->read_proxy_group[] = ConstructURL( '/'. $relationship->username . '/', true);
|
||||
}
|
||||
$sql = 'SELECT principal_id, username, pprivs(:request_principal::int8,principal_id,:scan_depth::int) FROM principal JOIN usr USING(user_no) WHERE principal_id IN (SELECT * from grants_proxy_access_from_p(:request_principal,:scan_depth))';
|
||||
$qry = new AwlQuery($sql, $params ); // reuse $params assigned for earlier query
|
||||
if ( $qry->Exec('DAVPrincipal') && $qry->rows() > 0 ) {
|
||||
while( $relationship = $qry->Fetch() ) {
|
||||
if ( bindec($relationship->pprivs) & $write_priv ) {
|
||||
$this->write_proxy_group[] = ConstructURL( '/'. $relationship->username . '/', true);
|
||||
}
|
||||
else {
|
||||
$this->read_proxy_group[] = ConstructURL( '/'. $relationship->username . '/', true);
|
||||
}
|
||||
}
|
||||
}
|
||||
// @dbg_error_log( 'principal', 'Read-proxy-for: %s', implode(',',$this->read_proxy_for) );
|
||||
// @dbg_error_log( 'principal', 'Write-proxy-for: %s', implode(',',$this->write_proxy_for) );
|
||||
// @dbg_error_log( 'principal', 'Read-proxy-group: %s', implode(',',$this->read_proxy_group) );
|
||||
// @dbg_error_log( 'principal', 'Write-proxy-group: %s', implode(',',$this->write_proxy_group) );
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
@ -1271,6 +1271,7 @@ EOQRY;
|
||||
$qry = new AwlQuery($sql, $params );
|
||||
if ( !$qry->Exec() || !$row = $qry->Fetch() ) {
|
||||
if ( !$qry->QDo('SELECT new_sync_token( 0, :collection_id) AS sync_token', $params) ) throw new Exception('Problem with database query');
|
||||
$row = $qry->Fetch();
|
||||
}
|
||||
$this->sync_token = 'data:,'.$row->sync_token;
|
||||
}
|
||||
@ -1641,6 +1642,7 @@ EOQRY;
|
||||
case 'http://calendarserver.org/ns/:calendar-proxy-read-for':
|
||||
$proxy_type = 'read';
|
||||
case 'http://calendarserver.org/ns/:calendar-proxy-write-for':
|
||||
if ( isset($c->disable_caldav_proxy) && $c->disable_caldav_proxy ) return false;
|
||||
if ( !isset($proxy_type) ) $proxy_type = 'write';
|
||||
$reply->CalendarserverElement($prop, 'calendar-proxy-'.$proxy_type.'-for', $reply->href( $this->principal->ProxyFor($proxy_type) ) );
|
||||
break;
|
||||
|
||||
@ -169,7 +169,7 @@ function get_collection_contents( $depth, $collection, $parent_path = null ) {
|
||||
}
|
||||
}
|
||||
|
||||
if ( $collection->IsPrincipal() ) {
|
||||
if ( (!isset($c->disable_caldav_proxy) || $c->disable_caldav_proxy == false) && $collection->IsPrincipal() ) {
|
||||
// Caldav Proxy: 5.1 par. 2: Add child resources calendar-proxy-(read|write)
|
||||
dbg_error_log('PROPFIND','Adding calendar-proxy-read and write. Path: %s', $bound_from );
|
||||
$response = add_proxy_response('read', $bound_from );
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user