[CalendarServer-changes] [3528] CalendarServer/trunk/twistedcaldav/method/propfind.py
source_changes at macosforge.org
source_changes at macosforge.org
Mon Dec 15 11:38:55 PST 2008
Revision: 3528
http://trac.macosforge.org/projects/calendarserver/changeset/3528
Author: cdaboo at apple.com
Date: 2008-12-15 11:38:54 -0800 (Mon, 15 Dec 2008)
Log Message:
-----------
Return a 403 in a PROPFIND for resources in a collection that do not have DAV:read.
Modified Paths:
--------------
CalendarServer/trunk/twistedcaldav/method/propfind.py
Modified: CalendarServer/trunk/twistedcaldav/method/propfind.py
===================================================================
--- CalendarServer/trunk/twistedcaldav/method/propfind.py 2008-12-15 19:17:48 UTC (rev 3527)
+++ CalendarServer/trunk/twistedcaldav/method/propfind.py 2008-12-15 19:38:54 UTC (rev 3528)
@@ -1,6 +1,6 @@
# -*- test-case-name: twisted.web2.dav.test.test_prop.PROP.test_PROPFIND -*-
##
-# Copyright (c) 2005 Apple Computer, Inc. All rights reserved.
+# Copyright (c) 2005-2008 Apple Computer, Inc. All rights reserved.
#
# Permission is hereby granted, free of charge, to any person obtaining a copy
# of this software and associated documentation files (the "Software"), to deal
@@ -115,68 +115,78 @@
# the child resource loop and supply those to the checkPrivileges on each child.
filtered_aces = (yield self.inheritedACEsforChildren(request))
- resources = [(self, my_url)]
+ resources = [(True, self, my_url)]
- yield self.findChildrenFaster(depth, request, lambda x, y: resources.append((x, y)), None, None, (davxml.Read(),), inherited_aces=filtered_aces)
+ yield self.findChildrenFaster(
+ depth,
+ request,
+ lambda x, y: resources.append((True, x, y)),
+ lambda x, y: resources.append((False, x, y)),
+ None,
+ (davxml.Read(),),
+ inherited_aces=filtered_aces,
+ )
- for resource, uri in resources:
- if search_properties is "names":
- try:
- resource_properties = (yield resource.listProperties(request))
- except:
- log.err("Unable to get properties for resource %r" % (resource,))
- raise
-
- properties_by_status = {
- responsecode.OK: [propertyName(p) for p in resource_properties]
- }
- else:
- properties_by_status = {
- responsecode.OK : [],
- responsecode.NOT_FOUND : [],
- }
-
- if search_properties is "all":
- properties_to_enumerate = (yield resource.listAllprop(request))
+ for readable, resource, uri in resources:
+ if readable:
+ if search_properties is "names":
+ try:
+ resource_properties = (yield resource.listProperties(request))
+ except:
+ log.err("Unable to get properties for resource %r" % (resource,))
+ raise
+
+ properties_by_status = {
+ responsecode.OK: [propertyName(p) for p in resource_properties]
+ }
else:
- properties_to_enumerate = search_properties
-
- for property in properties_to_enumerate:
- has = (yield resource.hasProperty(property, request))
- if has:
- try:
- resource_property = (yield resource.readProperty(property, request))
- except:
- f = Failure()
-
- log.err("Error reading property %r for resource %s: %s" % (property, uri, f.value))
-
- status = statusForFailure(f, "getting property: %s" % (property,))
- if status not in properties_by_status:
- properties_by_status[status] = []
- properties_by_status[status].append(propertyName(property))
+ properties_by_status = {
+ responsecode.OK : [],
+ responsecode.NOT_FOUND : [],
+ }
+
+ if search_properties is "all":
+ properties_to_enumerate = (yield resource.listAllprop(request))
+ else:
+ properties_to_enumerate = search_properties
+
+ for property in properties_to_enumerate:
+ has = (yield resource.hasProperty(property, request))
+ if has:
+ try:
+ resource_property = (yield resource.readProperty(property, request))
+ except:
+ f = Failure()
+
+ log.err("Error reading property %r for resource %s: %s" % (property, uri, f.value))
+
+ status = statusForFailure(f, "getting property: %s" % (property,))
+ if status not in properties_by_status:
+ properties_by_status[status] = []
+ properties_by_status[status].append(propertyName(property))
+ else:
+ properties_by_status[responsecode.OK].append(resource_property)
else:
- properties_by_status[responsecode.OK].append(resource_property)
- else:
- properties_by_status[responsecode.NOT_FOUND].append(propertyName(property))
+ properties_by_status[responsecode.NOT_FOUND].append(propertyName(property))
- propstats = []
-
- for status in properties_by_status:
- properties = properties_by_status[status]
- if not properties: continue
-
- xml_status = davxml.Status.fromResponseCode(status)
- xml_container = davxml.PropertyContainer(*properties)
- xml_propstat = davxml.PropertyStatus(xml_container, xml_status)
-
- propstats.append(xml_propstat)
-
- xml_resource = davxml.HRef(uri)
- xml_response = davxml.PropertyStatusResponse(xml_resource, *propstats)
-
+ propstats = []
+
+ for status in properties_by_status:
+ properties = properties_by_status[status]
+ if not properties: continue
+
+ xml_status = davxml.Status.fromResponseCode(status)
+ xml_container = davxml.PropertyContainer(*properties)
+ xml_propstat = davxml.PropertyStatus(xml_container, xml_status)
+
+ propstats.append(xml_propstat)
+
+ xml_response = davxml.PropertyStatusResponse(davxml.HRef(uri), *propstats)
+ else:
+ xml_response = davxml.StatusResponse(davxml.HRef(uri), davxml.Status.fromResponseCode(responsecode.FORBIDDEN))
+
xml_responses.append(xml_response)
-
+
#
# Return response
#
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.macosforge.org/pipermail/calendarserver-changes/attachments/20081215/d5a1adeb/attachment.html>
More information about the calendarserver-changes
mailing list