mirror of
https://github.com/etesync/android
synced 2024-12-23 15:18:14 +00:00
a12942c606
* relevant RFCs go into the doc/ directory for reference purposes * read-only calendar collections are set as read-only in Android * HTTP exception refactoring to mark 4xx HTTP errors as hard sync errors (numAuthExcetions/numParseExceptions) for Android sync manager * query current-user-privilege-set for resources, detect read-only resources * show read-only resources as read-only in SelectCollectionsFragment * minor refactoring (DavProp.*)
4036 lines
143 KiB
Plaintext
4036 lines
143 KiB
Plaintext
|
||
|
||
|
||
|
||
|
||
|
||
Network Working Group G. Clemm
|
||
Request for Comments: 3744 IBM
|
||
Category: Standards Track J. Reschke
|
||
greenbytes
|
||
E. Sedlar
|
||
Oracle Corporation
|
||
J. Whitehead
|
||
U.C. Santa Cruz
|
||
May 2004
|
||
|
||
|
||
Web Distributed Authoring and Versioning (WebDAV)
|
||
Access Control Protocol
|
||
|
||
Status of this Memo
|
||
|
||
This document specifies an Internet standards track protocol for the
|
||
Internet community, and requests discussion and suggestions for
|
||
improvements. Please refer to the current edition of the "Internet
|
||
Official Protocol Standards" (STD 1) for the standardization state
|
||
and status of this protocol. Distribution of this memo is unlimited.
|
||
|
||
Copyright Notice
|
||
|
||
Copyright (C) The Internet Society (2004). All Rights Reserved.
|
||
|
||
Abstract
|
||
|
||
This document specifies a set of methods, headers, message bodies,
|
||
properties, and reports that define Access Control extensions to the
|
||
WebDAV Distributed Authoring Protocol. This protocol permits a
|
||
client to read and modify access control lists that instruct a server
|
||
whether to allow or deny operations upon a resource (such as
|
||
HyperText Transfer Protocol (HTTP) method invocations) by a given
|
||
principal. A lightweight representation of principals as Web
|
||
resources supports integration of a wide range of user management
|
||
repositories. Search operations allow discovery and manipulation of
|
||
principals using human names.
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
Clemm, et al. Standards Track [Page 1]
|
||
|
||
RFC 3744 WebDAV Access Control Protocol May 2004
|
||
|
||
|
||
Table of Contents
|
||
|
||
1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . . 4
|
||
1.1. Terms. . . . . . . . . . . . . . . . . . . . . . . . . . 6
|
||
1.2. Notational Conventions . . . . . . . . . . . . . . . . . 8
|
||
2. Principals . . . . . . . . . . . . . . . . . . . . . . . . . . 8
|
||
3. Privileges . . . . . . . . . . . . . . . . . . . . . . . . . . 8
|
||
3.1. DAV:read Privilege . . . . . . . . . . . . . . . . . . . 10
|
||
3.2. DAV:write Privilege. . . . . . . . . . . . . . . . . . . 10
|
||
3.3. DAV:write-properties Privilege . . . . . . . . . . . . . 10
|
||
3.4. DAV:write-content Privilege. . . . . . . . . . . . . . . 11
|
||
3.5. DAV:unlock Privilege . . . . . . . . . . . . . . . . . . 11
|
||
3.6. DAV:read-acl Privilege . . . . . . . . . . . . . . . . . 11
|
||
3.7. DAV:read-current-user-privilege-set Privilege. . . . . . 12
|
||
3.8. DAV:write-acl Privilege. . . . . . . . . . . . . . . . . 12
|
||
3.9. DAV:bind Privilege . . . . . . . . . . . . . . . . . . . 12
|
||
3.10. DAV:unbind Privilege . . . . . . . . . . . . . . . . . . 12
|
||
3.11. DAV:all Privilege. . . . . . . . . . . . . . . . . . . . 13
|
||
3.12. Aggregation of Predefined Privileges . . . . . . . . . . 13
|
||
4. Principal Properties . . . . . . . . . . . . . . . . . . . . . 13
|
||
4.1. DAV:alternate-URI-set. . . . . . . . . . . . . . . . . . 14
|
||
4.2. DAV:principal-URL. . . . . . . . . . . . . . . . . . . . 14
|
||
4.3. DAV:group-member-set . . . . . . . . . . . . . . . . . . 14
|
||
4.4. DAV:group-membership . . . . . . . . . . . . . . . . . . 14
|
||
5. Access Control Properties. . . . . . . . . . . . . . . . . . . 15
|
||
5.1. DAV:owner. . . . . . . . . . . . . . . . . . . . . . . . 15
|
||
5.1.1. Example: Retrieving DAV:owner . . . . . . . . . . 15
|
||
5.1.2. Example: An Attempt to Set DAV:owner. . . . . . . 16
|
||
5.2. DAV:group. . . . . . . . . . . . . . . . . . . . . . . . 18
|
||
5.3. DAV:supported-privilege-set. . . . . . . . . . . . . . . 18
|
||
5.3.1. Example: Retrieving a List of Privileges
|
||
Supported on a Resource . . . . . . . . . . . . . 19
|
||
5.4. DAV:current-user-privilege-set . . . . . . . . . . . . . 21
|
||
5.4.1. Example: Retrieving the User's Current Set of
|
||
Assigned Privileges . . . . . . . . . . . . . . . 22
|
||
5.5. DAV:acl. . . . . . . . . . . . . . . . . . . . . . . . . 23
|
||
5.5.1. ACE Principal . . . . . . . . . . . . . . . . . . 23
|
||
5.5.2. ACE Grant and Deny. . . . . . . . . . . . . . . . 25
|
||
5.5.3. ACE Protection. . . . . . . . . . . . . . . . . . 25
|
||
5.5.4. ACE Inheritance . . . . . . . . . . . . . . . . . 25
|
||
5.5.5. Example: Retrieving a Resource's Access Control
|
||
List. . . . . . . . . . . . . . . . . . . . . . . 25
|
||
5.6. DAV:acl-restrictions . . . . . . . . . . . . . . . . . . 27
|
||
5.6.1. DAV:grant-only. . . . . . . . . . . . . . . . . . 27
|
||
5.6.2. DAV:no-invert ACE Constraint. . . . . . . . . . . 28
|
||
5.6.3. DAV:deny-before-grant . . . . . . . . . . . . . . 28
|
||
5.6.4. Required Principals . . . . . . . . . . . . . . . 28
|
||
5.6.5. Example: Retrieving DAV:acl-restrictions. . . . . 28
|
||
|
||
|
||
|
||
Clemm, et al. Standards Track [Page 2]
|
||
|
||
RFC 3744 WebDAV Access Control Protocol May 2004
|
||
|
||
|
||
5.7. DAV:inherited-acl-set. . . . . . . . . . . . . . . . . . 29
|
||
5.8. DAV:principal-collection-set . . . . . . . . . . . . . . 30
|
||
5.8.1. Example: Retrieving DAV:principal-collection-set. 30
|
||
5.9. Example: PROPFIND to retrieve access control properties. 32
|
||
6. ACL Evaluation . . . . . . . . . . . . . . . . . . . . . . . . 36
|
||
7. Access Control and existing methods. . . . . . . . . . . . . . 37
|
||
7.1. Any HTTP method. . . . . . . . . . . . . . . . . . . . . 37
|
||
7.1.1. Error Handling. . . . . . . . . . . . . . . . . . 37
|
||
7.2. OPTIONS. . . . . . . . . . . . . . . . . . . . . . . . . 38
|
||
7.2.1. Example - OPTIONS . . . . . . . . . . . . . . . . 39
|
||
7.3. MOVE . . . . . . . . . . . . . . . . . . . . . . . . . . 39
|
||
7.4. COPY . . . . . . . . . . . . . . . . . . . . . . . . . . 39
|
||
7.5. LOCK . . . . . . . . . . . . . . . . . . . . . . . . . . 39
|
||
8. Access Control Methods . . . . . . . . . . . . . . . . . . . . 40
|
||
8.1. ACL. . . . . . . . . . . . . . . . . . . . . . . . . . . 40
|
||
8.1.1. ACL Preconditions . . . . . . . . . . . . . . . . 40
|
||
8.1.2. Example: the ACL method . . . . . . . . . . . . . 42
|
||
8.1.3. Example: ACL method failure due to protected
|
||
ACE conflict. . . . . . . . . . . . . . . . . . . 43
|
||
8.1.4. Example: ACL method failure due to an
|
||
inherited ACE conflict. . . . . . . . . . . . . . 44
|
||
8.1.5. Example: ACL method failure due to an attempt
|
||
to set grant and deny in a single ACE . . . . . . 45
|
||
9. Access Control Reports . . . . . . . . . . . . . . . . . . . . 46
|
||
9.1. REPORT Method. . . . . . . . . . . . . . . . . . . . . . 46
|
||
9.2. DAV:acl-principal-prop-set Report. . . . . . . . . . . . 47
|
||
9.2.1. Example: DAV:acl-principal-prop-set Report. . . . 48
|
||
9.3. DAV:principal-match REPORT . . . . . . . . . . . . . . . 49
|
||
9.3.1. Example: DAV:principal-match REPORT . . . . . . . 50
|
||
9.4. DAV:principal-property-search REPORT . . . . . . . . . . 51
|
||
9.4.1. Matching. . . . . . . . . . . . . . . . . . . . . 53
|
||
9.4.2. Example: successful DAV:principal-property-search
|
||
REPORT. . . . . . . . . . . . . . . . . . . . . . 54
|
||
9.5. DAV:principal-search-property-set REPORT . . . . . . . . 56
|
||
9.5.1. Example: DAV:principal-search-property-set
|
||
REPORT. . . . . . . . . . . . . . . . . . . . . . 58
|
||
10. XML Processing . . . . . . . . . . . . . . . . . . . . . . . . 59
|
||
11. Internationalization Considerations. . . . . . . . . . . . . . 59
|
||
12. Security Considerations. . . . . . . . . . . . . . . . . . . . 60
|
||
12.1. Increased Risk of Compromised Users. . . . . . . . . . . 60
|
||
12.2. Risks of the DAV:read-acl and
|
||
DAV:current-user-privilege-set Privileges. . . . . . . . 60
|
||
12.3. No Foreknowledge of Initial ACL. . . . . . . . . . . . . 61
|
||
13. Authentication . . . . . . . . . . . . . . . . . . . . . . . . 61
|
||
14. IANA Considerations. . . . . . . . . . . . . . . . . . . . . . 62
|
||
15. Acknowledgements . . . . . . . . . . . . . . . . . . . . . . . 62
|
||
|
||
|
||
|
||
|
||
|
||
Clemm, et al. Standards Track [Page 3]
|
||
|
||
RFC 3744 WebDAV Access Control Protocol May 2004
|
||
|
||
|
||
16. References . . . . . . . . . . . . . . . . . . . . . . . . . . 62
|
||
16.1. Normative References . . . . . . . . . . . . . . . . . . 62
|
||
16.2. Informative References . . . . . . . . . . . . . . . . . 63
|
||
Appendices
|
||
A. WebDAV XML Document Type Definition Addendum . . . . . . . . . 64
|
||
B. WebDAV Method Privilege Table (Normative). . . . . . . . . . . 67
|
||
Index. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 69
|
||
Authors' Addresses . . . . . . . . . . . . . . . . . . . . . . . . 71
|
||
Full Copyright Statement. . . . . . . . . . . . . . . . . . . . . 72
|
||
|
||
1. Introduction
|
||
|
||
The goal of the WebDAV access control extensions is to provide an
|
||
interoperable mechanism for handling discretionary access control for
|
||
content and metadata managed by WebDAV servers. WebDAV access
|
||
control can be implemented on content repositories with security as
|
||
simple as that of a UNIX file system, as well as more sophisticated
|
||
models. The underlying principle of access control is that who you
|
||
are determines what operations you can perform on a resource. The
|
||
"who you are" is defined by a "principal" identifier; users, client
|
||
software, servers, and groups of the previous have principal
|
||
identifiers. The "operations you can perform" are determined by a
|
||
single "access control list" (ACL) associated with a resource. An
|
||
ACL contains a set of "access control entries" (ACEs), where each ACE
|
||
specifies a principal and a set of privileges that are either granted
|
||
or denied to that principal. When a principal submits an operation
|
||
(such as an HTTP or WebDAV method) to a resource for execution, the
|
||
server evaluates the ACEs in the ACL to determine if the principal
|
||
has permission for that operation.
|
||
|
||
Since every ACE contains the identifier of a principal, client
|
||
software operated by a human must provide a mechanism for selecting
|
||
this principal. This specification uses http(s) scheme URLs to
|
||
identify principals, which are represented as WebDAV-capable
|
||
resources. There is no guarantee that the URLs identifying
|
||
principals will be meaningful to a human. For example,
|
||
http://www.example.com/u/256432 and
|
||
http://www.example.com/people/Greg.Stein are both valid URLs that
|
||
could be used to identify the same principal. To remedy this, every
|
||
principal resource has the DAV:displayname property containing a
|
||
human-readable name for the principal.
|
||
|
||
Since a principal can be identified by multiple URLs, it raises the
|
||
problem of determining exactly which principal is being referenced in
|
||
a given ACE. It is impossible for a client to determine that an ACE
|
||
granting the read privilege to http://www.example.com/people/
|
||
Greg.Stein also affects the principal at http://www.example.com/u/
|
||
256432. That is, a client has no mechanism for determining that two
|
||
|
||
|
||
|
||
Clemm, et al. Standards Track [Page 4]
|
||
|
||
RFC 3744 WebDAV Access Control Protocol May 2004
|
||
|
||
|
||
URLs identify the same principal resource. As a result, this
|
||
specification requires clients to use just one of the many possible
|
||
URLs for a principal when creating ACEs. A client can discover which
|
||
URL to use by retrieving the DAV:principal-URL property (Section 4.2)
|
||
from a principal resource. No matter which of the principal's URLs
|
||
is used with PROPFIND, the property always returns the same URL.
|
||
|
||
With a system having hundreds to thousands of principals, the problem
|
||
arises of how to allow a human operator of client software to select
|
||
just one of these principals. One approach is to use broad
|
||
collection hierarchies to spread the principals over a large number
|
||
of collections, yielding few principals per collection. An example
|
||
of this is a two level hierarchy with the first level containing 36
|
||
collections (a-z, 0-9), and the second level being another 36,
|
||
creating collections /a/a/, /a/b/, ..., /a/z/, such that a principal
|
||
with last name "Stein" would appear at /s/t/Stein. In effect, this
|
||
pre-computes a common query, search on last name, and encodes it into
|
||
a hierarchy. The drawback with this scheme is that it handles only a
|
||
small set of predefined queries, and drilling down through the
|
||
collection hierarchy adds unnecessary steps (navigate down/up) when
|
||
the user already knows the principal's name. While organizing
|
||
principal URLs into a hierarchy is a valid namespace organization,
|
||
users should not be forced to navigate this hierarchy to select a
|
||
principal.
|
||
|
||
This specification provides the capability to perform substring
|
||
searches over a small set of properties on the resources representing
|
||
principals. This permits searches based on last name, first name,
|
||
user name, job title, etc. Two separate searches are supported, both
|
||
via the REPORT method, one to search principal resources
|
||
(DAV:principal-property-search, Section 9.4), the other to determine
|
||
which properties may be searched at all (DAV:principal-search-
|
||
property-set, Section 9.5).
|
||
|
||
Once a principal has been identified in an ACE, a server evaluating
|
||
that ACE must know the identity of the principal making a protocol
|
||
request, and must validate that that principal is who they claim to
|
||
be, a process known as authentication. This specification
|
||
intentionally omits discussion of authentication, as the HTTP
|
||
protocol already has a number of authentication mechanisms [RFC2617].
|
||
Some authentication mechanism (such as HTTP Digest Authentication,
|
||
which all WebDAV compliant implementations are required to support)
|
||
must be available to validate the identity of a principal.
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
Clemm, et al. Standards Track [Page 5]
|
||
|
||
RFC 3744 WebDAV Access Control Protocol May 2004
|
||
|
||
|
||
The following issues are out of scope for this document:
|
||
|
||
o Access control that applies only to a particular property on a
|
||
resource (excepting the access control properties DAV:acl and
|
||
DAV:current-user-privilege-set), rather than the entire resource,
|
||
|
||
o Role-based security (where a role can be seen as a dynamically
|
||
defined group of principals),
|
||
|
||
o Specification of the ways an ACL on a resource is initialized,
|
||
|
||
o Specification of an ACL that applies globally to all resources,
|
||
rather than to a particular resource.
|
||
|
||
o Creation and maintenance of resources representing people or
|
||
computational agents (principals), and groups of these.
|
||
|
||
This specification is organized as follows. Section 1.1 defines key
|
||
concepts used throughout the specification, and is followed by a more
|
||
in-depth discussion of principals (Section 2), and privileges
|
||
(Section 3). Properties defined on principals are specified in
|
||
Section 4, and access control properties for content resources are
|
||
specified in Section 5. The ways ACLs are to be evaluated is
|
||
described in Section 6. Client discovery of access control
|
||
capability using OPTIONS is described in Section 7.2. Interactions
|
||
between access control functionality and existing HTTP and WebDAV
|
||
methods are described in the remainder of Section 7. The access
|
||
control setting method, ACL, is specified in Section 8. Four reports
|
||
that provide limited server-side searching capabilities are described
|
||
in Section 9. Sections on XML processing (Section 10),
|
||
Internationalization considerations (Section 11), security
|
||
considerations (Section 12), and authentication (Section 13) round
|
||
out the specification. An appendix (Appendix A) provides an XML
|
||
Document Type Definition (DTD) for the XML elements defined in the
|
||
specification.
|
||
|
||
1.1. Terms
|
||
|
||
This document uses the terms defined in HTTP [RFC2616] and WebDAV
|
||
[RFC2518]. In addition, the following terms are defined:
|
||
|
||
principal
|
||
|
||
A "principal" is a distinct human or computational actor that
|
||
initiates access to network resources. In this protocol, a
|
||
principal is an HTTP resource that represents such an actor.
|
||
|
||
|
||
|
||
|
||
|
||
Clemm, et al. Standards Track [Page 6]
|
||
|
||
RFC 3744 WebDAV Access Control Protocol May 2004
|
||
|
||
|
||
group
|
||
|
||
A "group" is a principal that represents a set of other
|
||
principals.
|
||
|
||
privilege
|
||
|
||
A "privilege" controls access to a particular set of HTTP
|
||
operations on a resource.
|
||
|
||
aggregate privilege
|
||
|
||
An "aggregate privilege" is a privilege that contains a set of
|
||
other privileges.
|
||
|
||
abstract privilege
|
||
|
||
The modifier "abstract", when applied to a privilege on a
|
||
resource, means the privilege cannot be set in an access control
|
||
element (ACE) on that resource.
|
||
|
||
access control list (ACL)
|
||
|
||
An "ACL" is a list of access control elements that define access
|
||
control to a particular resource.
|
||
|
||
access control element (ACE)
|
||
|
||
An "ACE" either grants or denies a particular set of (non-
|
||
abstract) privileges for a particular principal.
|
||
|
||
inherited ACE
|
||
|
||
An "inherited ACE" is an ACE that is dynamically shared from the
|
||
ACL of another resource. When a shared ACE changes on the primary
|
||
resource, it is also changed on inheriting resources.
|
||
|
||
protected property
|
||
|
||
A "protected property" is one whose value cannot be updated except
|
||
by a method explicitly defined as updating that specific property.
|
||
In particular, a protected property cannot be updated with a
|
||
PROPPATCH request.
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
Clemm, et al. Standards Track [Page 7]
|
||
|
||
RFC 3744 WebDAV Access Control Protocol May 2004
|
||
|
||
|
||
1.2. Notational Conventions
|
||
|
||
The augmented BNF used by this document to describe protocol elements
|
||
is described in Section 2.1 of [RFC2616]. Because this augmented BNF
|
||
uses the basic production rules provided in Section 2.2 of [RFC2616],
|
||
those rules apply to this document as well.
|
||
|
||
The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT",
|
||
"SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY", and "OPTIONAL" in this
|
||
document are to be interpreted as described in [RFC2119].
|
||
|
||
Definitions of XML elements in this document use XML element type
|
||
declarations (as found in XML Document Type Declarations), described
|
||
in Section 3.2 of [REC-XML]. When an XML element type in the "DAV:"
|
||
namespace is referenced in this document outside of the context of an
|
||
XML fragment, the string "DAV:" will be prefixed to the element name.
|
||
|
||
2. Principals
|
||
|
||
A principal is a network resource that represents a distinct human or
|
||
computational actor that initiates access to network resources.
|
||
Users and groups are represented as principals in many
|
||
implementations; other types of principals are also possible. A URI
|
||
of any scheme MAY be used to identify a principal resource. However,
|
||
servers implementing this specification MUST expose principal
|
||
resources at an http(s) URL, which is a privileged scheme that points
|
||
to resources that have additional properties, as described in Section
|
||
4. So, a principal resource can have multiple URIs, one of which has
|
||
to be an http(s) scheme URL. Although an implementation SHOULD
|
||
support PROPFIND and MAY support PROPPATCH to access and modify
|
||
information about a principal, it is not required to do so.
|
||
|
||
A principal resource may be a group, where a group is a principal
|
||
that represents a set of other principals, called the members of the
|
||
group. If a person or computational agent matches a principal
|
||
resource that is a member of a group, they also match the group.
|
||
Membership in a group is recursive, so if a principal is a member of
|
||
group GRPA, and GRPA is a member of group GRPB, then the principal is
|
||
also a member of GRPB.
|
||
|
||
3. Privileges
|
||
|
||
Ability to perform a given method on a resource MUST be controlled by
|
||
one or more privileges. Authors of protocol extensions that define
|
||
new HTTP methods SHOULD specify which privileges (by defining new
|
||
privileges, or mapping to ones below) are required to perform the
|
||
method. A principal with no privileges to a resource MUST be denied
|
||
any HTTP access to that resource, unless the principal matches an ACE
|
||
|
||
|
||
|
||
Clemm, et al. Standards Track [Page 8]
|
||
|
||
RFC 3744 WebDAV Access Control Protocol May 2004
|
||
|
||
|
||
constructed using the DAV:all, DAV:authenticated, or
|
||
DAV:unauthenticated pseudo-principals (see Section 5.5.1). Servers
|
||
MUST report a 403 "Forbidden" error if access is denied, except in
|
||
the case where the privilege restricts the ability to know the
|
||
resource exists, in which case 404 "Not Found" may be returned.
|
||
|
||
Privileges may be containers of other privileges, in which case they
|
||
are termed "aggregate privileges". If a principal is granted or
|
||
denied an aggregate privilege, it is semantically equivalent to
|
||
granting or denying each of the aggregated privileges individually.
|
||
For example, an implementation may define add-member and remove-
|
||
member privileges that control the ability to add and remove a member
|
||
of a group. Since these privileges control the ability to update the
|
||
state of a group, these privileges would be aggregated by the
|
||
DAV:write privilege on a group, and granting the DAV:write privilege
|
||
on a group would also grant the add-member and remove-member
|
||
privileges.
|
||
|
||
Privileges may be declared to be "abstract" for a given resource, in
|
||
which case they cannot be set in an ACE on that resource. Aggregate
|
||
and non-aggregate privileges are both capable of being abstract.
|
||
Abstract privileges are useful for modeling privileges that otherwise
|
||
would not be exposed via the protocol. Abstract privileges also
|
||
provide server implementations with flexibility in implementing the
|
||
privileges defined in this specification. For example, if a server
|
||
is incapable of separating the read resource capability from the read
|
||
ACL capability, it can still model the DAV:read and DAV:read-acl
|
||
privileges defined in this specification by declaring them abstract,
|
||
and containing them within a non-abstract aggregate privilege (say,
|
||
read-all) that holds DAV:read, and DAV:read-acl. In this way, it is
|
||
possible to set the aggregate privilege, read-all, thus coupling the
|
||
setting of DAV:read and DAV:read-acl, but it is not possible to set
|
||
DAV:read, or DAV:read-acl individually. Since aggregate privileges
|
||
can be abstract, it is also possible to use abstract privileges to
|
||
group or organize non-abstract privileges. Privilege containment
|
||
loops are not allowed; therefore, a privilege MUST NOT contain
|
||
itself. For example, DAV:read cannot contain DAV:read.
|
||
|
||
The set of privileges that apply to a particular resource may vary
|
||
with the DAV:resourcetype of the resource, as well as between
|
||
different server implementations. To promote interoperability,
|
||
however, this specification defines a set of well-known privileges
|
||
(e.g., DAV:read, DAV:write, DAV:read-acl, DAV:write-acl, DAV:read-
|
||
current-user-privilege-set, and DAV:all), which can at least be used
|
||
to classify the other privileges defined on a particular resource.
|
||
The access permissions on null resources (defined in [RFC2518],
|
||
Section 3) are solely those they inherit (if any), and they are not
|
||
discoverable (i.e., the access control properties specified in
|
||
|
||
|
||
|
||
Clemm, et al. Standards Track [Page 9]
|
||
|
||
RFC 3744 WebDAV Access Control Protocol May 2004
|
||
|
||
|
||
Section 5 are not defined on null resources). On the transition from
|
||
null to stateful resource, the initial access control list is set by
|
||
the server's default ACL value policy (if any).
|
||
|
||
Server implementations MAY define new privileges beyond those defined
|
||
in this specification. Privileges defined by individual
|
||
implementations MUST NOT use the DAV: namespace, and instead should
|
||
use a namespace that they control, such as an http scheme URL.
|
||
|
||
3.1. DAV:read Privilege
|
||
|
||
The read privilege controls methods that return information about the
|
||
state of the resource, including the resource's properties. Affected
|
||
methods include GET and PROPFIND. Any implementation-defined
|
||
privilege that also controls access to GET and PROPFIND must be
|
||
aggregated under DAV:read - if an ACL grants access to DAV:read, the
|
||
client may expect that no other privilege needs to be granted to have
|
||
access to GET and PROPFIND. Additionally, the read privilege MUST
|
||
control the OPTIONS method.
|
||
|
||
<!ELEMENT read EMPTY>
|
||
|
||
3.2. DAV:write Privilege
|
||
|
||
The write privilege controls methods that lock a resource or modify
|
||
the content, dead properties, or (in the case of a collection)
|
||
membership of the resource, such as PUT and PROPPATCH. Note that
|
||
state modification is also controlled via locking (see section 5.3 of
|
||
[RFC2518]), so effective write access requires that both write
|
||
privileges and write locking requirements are satisfied. Any
|
||
implementation-defined privilege that also controls access to methods
|
||
modifying content, dead properties or collection membership must be
|
||
aggregated under DAV:write, e.g., if an ACL grants access to
|
||
DAV:write, the client may expect that no other privilege needs to be
|
||
granted to have access to PUT and PROPPATCH.
|
||
|
||
<!ELEMENT write EMPTY>
|
||
|
||
3.3. DAV:write-properties Privilege
|
||
|
||
The DAV:write-properties privilege controls methods that modify the
|
||
dead properties of the resource, such as PROPPATCH. Whether this
|
||
privilege may be used to control access to any live properties is
|
||
determined by the implementation. Any implementation-defined
|
||
privilege that also controls access to methods modifying dead
|
||
properties must be aggregated under DAV:write-properties - e.g., if
|
||
|
||
|
||
|
||
|
||
|
||
Clemm, et al. Standards Track [Page 10]
|
||
|
||
RFC 3744 WebDAV Access Control Protocol May 2004
|
||
|
||
|
||
an ACL grants access to DAV:write-properties, the client can safely
|
||
expect that no other privilege needs to be granted to have access to
|
||
PROPPATCH.
|
||
|
||
<!ELEMENT write-properties EMPTY>
|
||
|
||
3.4. DAV:write-content Privilege
|
||
|
||
The DAV:write-content privilege controls methods that modify the
|
||
content of an existing resource, such as PUT. Any implementation-
|
||
defined privilege that also controls access to content must be
|
||
aggregated under DAV:write-content - e.g., if an ACL grants access to
|
||
DAV:write-content, the client can safely expect that no other
|
||
privilege needs to be granted to have access to PUT. Note that PUT -
|
||
when applied to an unmapped URI - creates a new resource and
|
||
therefore is controlled by the DAV:bind privilege on the parent
|
||
collection.
|
||
|
||
<!ELEMENT write-content EMPTY>
|
||
|
||
3.5. DAV:unlock Privilege
|
||
|
||
The DAV:unlock privilege controls the use of the UNLOCK method by a
|
||
principal other than the lock owner (the principal that created a
|
||
lock can always perform an UNLOCK). While the set of users who may
|
||
lock a resource is most commonly the same set of users who may modify
|
||
a resource, servers may allow various kinds of administrators to
|
||
unlock resources locked by others. Any privilege controlling access
|
||
by non-lock owners to UNLOCK MUST be aggregated under DAV:unlock.
|
||
|
||
A lock owner can always remove a lock by issuing an UNLOCK with the
|
||
correct lock token and authentication credentials. That is, even if
|
||
a principal does not have DAV:unlock privilege, they can still remove
|
||
locks they own. Principals other than the lock owner can remove a
|
||
lock only if they have DAV:unlock privilege and they issue an UNLOCK
|
||
with the correct lock token. Lock timeout is not affected by the
|
||
DAV:unlock privilege.
|
||
|
||
<!ELEMENT unlock EMPTY>
|
||
|
||
3.6. DAV:read-acl Privilege
|
||
|
||
The DAV:read-acl privilege controls the use of PROPFIND to retrieve
|
||
the DAV:acl property of the resource.
|
||
|
||
<!ELEMENT read-acl EMPTY>
|
||
|
||
|
||
|
||
|
||
|
||
Clemm, et al. Standards Track [Page 11]
|
||
|
||
RFC 3744 WebDAV Access Control Protocol May 2004
|
||
|
||
|
||
3.7. DAV:read-current-user-privilege-set Privilege
|
||
|
||
The DAV:read-current-user-privilege-set privilege controls the use of
|
||
PROPFIND to retrieve the DAV:current-user-privilege-set property of
|
||
the resource.
|
||
|
||
Clients are intended to use this property to visually indicate in
|
||
their UI items that are dependent on the permissions of a resource,
|
||
for example, by graying out resources that are not writable.
|
||
|
||
This privilege is separate from DAV:read-acl because there is a need
|
||
to allow most users access to the privileges permitted the current
|
||
user (due to its use in creating the UI), while the full ACL contains
|
||
information that may not be appropriate for the current authenticated
|
||
user. As a result, the set of users who can view the full ACL is
|
||
expected to be much smaller than those who can read the current user
|
||
privilege set, and hence distinct privileges are needed for each.
|
||
|
||
<!ELEMENT read-current-user-privilege-set EMPTY>
|
||
|
||
3.8. DAV:write-acl Privilege
|
||
|
||
The DAV:write-acl privilege controls use of the ACL method to modify
|
||
the DAV:acl property of the resource.
|
||
|
||
<!ELEMENT write-acl EMPTY>
|
||
|
||
3.9. DAV:bind Privilege
|
||
|
||
The DAV:bind privilege allows a method to add a new member URL to the
|
||
specified collection (for example via PUT or MKCOL). It is ignored
|
||
for resources that are not collections.
|
||
|
||
<!ELEMENT bind EMPTY>
|
||
|
||
3.10. DAV:unbind Privilege
|
||
|
||
The DAV:unbind privilege allows a method to remove a member URL from
|
||
the specified collection (for example via DELETE or MOVE). It is
|
||
ignored for resources that are not collections.
|
||
|
||
<!ELEMENT unbind EMPTY>
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
Clemm, et al. Standards Track [Page 12]
|
||
|
||
RFC 3744 WebDAV Access Control Protocol May 2004
|
||
|
||
|
||
3.11. DAV:all Privilege
|
||
|
||
DAV:all is an aggregate privilege that contains the entire set of
|
||
privileges that can be applied to the resource.
|
||
|
||
<!ELEMENT all EMPTY>
|
||
|
||
3.12. Aggregation of Predefined Privileges
|
||
|
||
Server implementations are free to aggregate the predefined
|
||
privileges (defined above in Sections 3.1-3.10) subject to the
|
||
following limitations:
|
||
|
||
DAV:read-acl MUST NOT contain DAV:read, DAV:write, DAV:write-acl,
|
||
DAV:write-properties, DAV:write-content, or DAV:read-current-user-
|
||
privilege-set.
|
||
|
||
DAV:write-acl MUST NOT contain DAV:write, DAV:read, DAV:read-acl, or
|
||
DAV:read-current-user-privilege-set.
|
||
|
||
DAV:read-current-user-privilege-set MUST NOT contain DAV:write,
|
||
DAV:read, DAV:read-acl, or DAV:write-acl.
|
||
|
||
DAV:write MUST NOT contain DAV:read, DAV:read-acl, or DAV:read-
|
||
current-user-privilege-set.
|
||
|
||
DAV:read MUST NOT contain DAV:write, DAV:write-acl, DAV:write-
|
||
properties, or DAV:write-content.
|
||
|
||
DAV:write MUST contain DAV:bind, DAV:unbind, DAV:write-properties and
|
||
DAV:write-content.
|
||
|
||
4. Principal Properties
|
||
|
||
Principals are manifested to clients as a WebDAV resource, identified
|
||
by a URL. A principal MUST have a non-empty DAV:displayname property
|
||
(defined in Section 13.2 of [RFC2518]), and a DAV:resourcetype
|
||
property (defined in Section 13.9 of [RFC2518]). Additionally, a
|
||
principal MUST report the DAV:principal XML element in the value of
|
||
the DAV:resourcetype property. The element type declaration for
|
||
DAV:principal is:
|
||
|
||
<!ELEMENT principal EMPTY>
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
Clemm, et al. Standards Track [Page 13]
|
||
|
||
RFC 3744 WebDAV Access Control Protocol May 2004
|
||
|
||
|
||
This protocol defines the following additional properties for a
|
||
principal. Since it can be expensive for a server to retrieve access
|
||
control information, the name and value of these properties SHOULD
|
||
NOT be returned by a PROPFIND allprop request (as defined in Section
|
||
12.14.1 of [RFC2518]).
|
||
|
||
4.1. DAV:alternate-URI-set
|
||
|
||
This protected property, if non-empty, contains the URIs of network
|
||
resources with additional descriptive information about the
|
||
principal. This property identifies additional network resources
|
||
(i.e., it contains one or more URIs) that may be consulted by a
|
||
client to gain additional knowledge concerning a principal. One
|
||
expected use for this property is the storage of an LDAP [RFC2255]
|
||
scheme URL. A user-agent encountering an LDAP URL could use LDAP
|
||
[RFC2251] to retrieve additional machine-readable directory
|
||
information about the principal, and display that information in its
|
||
user interface. Support for this property is REQUIRED, and the value
|
||
is empty if no alternate URI exists for the principal.
|
||
|
||
<!ELEMENT alternate-URI-set (href*)>
|
||
|
||
4.2. DAV:principal-URL
|
||
|
||
A principal may have many URLs, but there must be one "principal URL"
|
||
that clients can use to uniquely identify a principal. This
|
||
protected property contains the URL that MUST be used to identify
|
||
this principal in an ACL request. Support for this property is
|
||
REQUIRED.
|
||
|
||
<!ELEMENT principal-URL (href)>
|
||
|
||
4.3. DAV:group-member-set
|
||
|
||
This property of a group principal identifies the principals that are
|
||
direct members of this group. Since a group may be a member of
|
||
another group, a group may also have indirect members (i.e., the
|
||
members of its direct members). A URL in the DAV:group-member-set
|
||
for a principal MUST be the DAV:principal-URL of that principal.
|
||
|
||
<!ELEMENT group-member-set (href*)>
|
||
|
||
4.4. DAV:group-membership
|
||
|
||
This protected property identifies the groups in which the principal
|
||
is directly a member. Note that a server may allow a group to be a
|
||
member of another group, in which case the DAV:group-membership of
|
||
|
||
|
||
|
||
|
||
Clemm, et al. Standards Track [Page 14]
|
||
|
||
RFC 3744 WebDAV Access Control Protocol May 2004
|
||
|
||
|
||
those other groups would need to be queried in order to determine the
|
||
groups in which the principal is indirectly a member. Support for
|
||
this property is REQUIRED.
|
||
|
||
<!ELEMENT group-membership (href*)>
|
||
|
||
5. Access Control Properties
|
||
|
||
This specification defines a number of new properties for WebDAV
|
||
resources. Access control properties may be retrieved just like
|
||
other WebDAV properties, using the PROPFIND method. Since it is
|
||
expensive, for many servers, to retrieve access control information,
|
||
a PROPFIND allprop request (as defined in Section 12.14.1 of
|
||
[RFC2518]) SHOULD NOT return the names and values of the properties
|
||
defined in this section.
|
||
|
||
Access control properties (especially DAV:acl and DAV:inherited-acl-
|
||
set) are defined on the resource identified by the Request-URI of a
|
||
PROPFIND request. A direct consequence is that if the resource is
|
||
accessible via multiple URI, the value of access control properties
|
||
is the same across these URI.
|
||
|
||
HTTP resources that support the WebDAV Access Control Protocol MUST
|
||
contain the following properties. Null resources (described in
|
||
Section 3 of [RFC2518]) MUST NOT contain the following properties.
|
||
|
||
5.1. DAV:owner
|
||
|
||
This property identifies a particular principal as being the "owner"
|
||
of the resource. Since the owner of a resource often has special
|
||
access control capabilities (e.g., the owner frequently has permanent
|
||
DAV:write-acl privilege), clients might display the resource owner in
|
||
their user interface.
|
||
|
||
Servers MAY implement DAV:owner as protected property and MAY return
|
||
an empty DAV:owner element as property value in case no owner
|
||
information is available.
|
||
|
||
<!ELEMENT owner (href?)>
|
||
|
||
5.1.1. Example: Retrieving DAV:owner
|
||
|
||
This example shows a client request for the value of the DAV:owner
|
||
property from a collection resource with URL http://www.example.com/
|
||
papers/. The principal making the request is authenticated using
|
||
Digest authentication. The value of DAV:owner is the URL http://
|
||
www.example.com/acl/users/gstein, wrapped in the DAV:href XML
|
||
element.
|
||
|
||
|
||
|
||
Clemm, et al. Standards Track [Page 15]
|
||
|
||
RFC 3744 WebDAV Access Control Protocol May 2004
|
||
|
||
|
||
>> Request <<
|
||
|
||
PROPFIND /papers/ HTTP/1.1
|
||
Host: www.example.com
|
||
Content-type: text/xml; charset="utf-8"
|
||
Content-Length: xxx
|
||
Depth: 0
|
||
Authorization: Digest username="jim",
|
||
realm="users@example.com", nonce="...",
|
||
uri="/papers/", response="...", opaque="..."
|
||
|
||
<?xml version="1.0" encoding="utf-8" ?>
|
||
<D:propfind xmlns:D="DAV:">
|
||
<D:prop>
|
||
<D:owner/>
|
||
</D:prop>
|
||
</D:propfind>
|
||
|
||
>> Response <<
|
||
|
||
HTTP/1.1 207 Multi-Status
|
||
Content-Type: text/xml; charset="utf-8"
|
||
Content-Length: xxx
|
||
|
||
<?xml version="1.0" encoding="utf-8" ?>
|
||
<D:multistatus xmlns:D="DAV:">
|
||
<D:response>
|
||
<D:href>http://www.example.com/papers/</D:href>
|
||
<D:propstat>
|
||
<D:prop>
|
||
<D:owner>
|
||
<D:href>http://www.example.com/acl/users/gstein</D:href>
|
||
</D:owner>
|
||
</D:prop>
|
||
<D:status>HTTP/1.1 200 OK</D:status>
|
||
</D:propstat>
|
||
</D:response>
|
||
</D:multistatus>
|
||
|
||
5.1.2. Example: An Attempt to Set DAV:owner
|
||
|
||
The following example shows a client request to modify the value of
|
||
the DAV:owner property on the resource with URL <http://
|
||
www.example.com/papers>. Since DAV:owner is a protected property on
|
||
this particular server, it responds with a 207 (Multi-Status)
|
||
response that contains a 403 (Forbidden) status code for the act of
|
||
setting DAV:owner. Section 8.2.1 of [RFC2518] describes PROPPATCH
|
||
status code information, Section 11 of [RFC2518] describes the
|
||
|
||
|
||
|
||
Clemm, et al. Standards Track [Page 16]
|
||
|
||
RFC 3744 WebDAV Access Control Protocol May 2004
|
||
|
||
|
||
Multi-Status response and Sections 1.6 and 3.12 of [RFC3253] describe
|
||
additional error marshaling for PROPPATCH attempts on protected
|
||
properties.
|
||
|
||
>> Request <<
|
||
|
||
PROPPATCH /papers/ HTTP/1.1
|
||
Host: www.example.com
|
||
Content-type: text/xml; charset="utf-8"
|
||
Content-Length: xxx
|
||
Depth: 0
|
||
Authorization: Digest username="jim",
|
||
realm="users@example.com", nonce="...",
|
||
uri="/papers/", response="...", opaque="..."
|
||
|
||
<?xml version="1.0" encoding="utf-8" ?>
|
||
<D:propertyupdate xmlns:D="DAV:">
|
||
<D:set>
|
||
<D:prop>
|
||
<D:owner>
|
||
<D:href>http://www.example.com/acl/users/jim</D:href>
|
||
</D:owner>
|
||
</D:prop>
|
||
</D:set>
|
||
</D:propertyupdate>
|
||
|
||
>> Response <<
|
||
|
||
HTTP/1.1 207 Multi-Status
|
||
Content-Type: text/xml; charset="utf-8"
|
||
Content-Length: xxx
|
||
|
||
<?xml version="1.0" encoding="utf-8" ?>
|
||
<D:multistatus xmlns:D="DAV:">
|
||
<D:response>
|
||
<D:href>http://www.example.com/papers/</D:href>
|
||
<D:propstat>
|
||
<D:prop><D:owner/></D:prop>
|
||
<D:status>HTTP/1.1 403 Forbidden</D:status>
|
||
<D:responsedescription>
|
||
<D:error><D:cannot-modify-protected-property/></D:error>
|
||
Failure to set protected property (DAV:owner)
|
||
</D:responsedescription>
|
||
</D:propstat>
|
||
</D:response>
|
||
</D:multistatus>
|
||
|
||
|
||
|
||
|
||
|
||
Clemm, et al. Standards Track [Page 17]
|
||
|
||
RFC 3744 WebDAV Access Control Protocol May 2004
|
||
|
||
|
||
5.2. DAV:group
|
||
|
||
This property identifies a particular principal as being the "group"
|
||
of the resource. This property is commonly found on repositories
|
||
that implement the Unix privileges model.
|
||
|
||
Servers MAY implement DAV:group as protected property and MAY return
|
||
an empty DAV:group element as property value in case no group
|
||
information is available.
|
||
|
||
<!ELEMENT group (href?)>
|
||
|
||
5.3. DAV:supported-privilege-set
|
||
|
||
This is a protected property that identifies the privileges defined
|
||
for the resource.
|
||
|
||
<!ELEMENT supported-privilege-set (supported-privilege*)>
|
||
|
||
Each privilege appears as an XML element, where aggregate privileges
|
||
list as sub-elements all of the privileges that they aggregate.
|
||
|
||
<!ELEMENT supported-privilege
|
||
(privilege, abstract?, description, supported-privilege*)>
|
||
<!ELEMENT privilege ANY>
|
||
|
||
An abstract privilege MUST NOT be used in an ACE for that resource.
|
||
Servers MUST fail an attempt to set an abstract privilege.
|
||
|
||
<!ELEMENT abstract EMPTY>
|
||
|
||
A description is a human-readable description of what this privilege
|
||
controls access to. Servers MUST indicate the human language of the
|
||
description using the xml:lang attribute and SHOULD consider the HTTP
|
||
Accept-Language request header when selecting one of multiple
|
||
available languages.
|
||
|
||
<!ELEMENT description #PCDATA>
|
||
|
||
It is envisioned that a WebDAV ACL-aware administrative client would
|
||
list the supported privileges in a dialog box, and allow the user to
|
||
choose non-abstract privileges to apply in an ACE. The privileges
|
||
tree is useful programmatically to map well-known privileges (defined
|
||
by WebDAV or other standards groups) into privileges that are
|
||
supported by any particular server implementation. The privilege
|
||
tree also serves to hide complexity in implementations allowing large
|
||
number of privileges to be defined by displaying aggregates to the
|
||
user.
|
||
|
||
|
||
|
||
Clemm, et al. Standards Track [Page 18]
|
||
|
||
RFC 3744 WebDAV Access Control Protocol May 2004
|
||
|
||
|
||
5.3.1. Example: Retrieving a List of Privileges Supported on a Resource
|
||
|
||
This example shows a client request for the DAV:supported-privilege-
|
||
set property on the resource http://www.example.com/papers/. The
|
||
value of the DAV:supported-privilege-set property is a tree of
|
||
supported privileges (using "[XML Namespace , localname]" to identify
|
||
each privilege):
|
||
|
||
[DAV:, all] (aggregate, abstract)
|
||
|
|
||
+-- [DAV:, read] (aggregate)
|
||
|
|
||
+-- [DAV:, read-acl] (abstract)
|
||
+-- [DAV:, read-current-user-privilege-set] (abstract)
|
||
|
|
||
+-- [DAV:, write] (aggregate)
|
||
|
|
||
+-- [DAV:, write-acl] (abstract)
|
||
+-- [DAV:, write-properties]
|
||
+-- [DAV:, write-content]
|
||
|
|
||
+-- [DAV:, unlock]
|
||
|
||
This privilege tree is not normative (except that it reflects the
|
||
normative aggregation rules given in Section 3.12), and many possible
|
||
privilege trees are possible.
|
||
|
||
>> Request <<
|
||
|
||
PROPFIND /papers/ HTTP/1.1
|
||
Host: www.example.com
|
||
Content-type: text/xml; charset="utf-8"
|
||
Content-Length: xxx
|
||
Depth: 0
|
||
Authorization: Digest username="gclemm",
|
||
realm="users@example.com", nonce="...",
|
||
uri="/papers/", response="...", opaque="..."
|
||
|
||
<?xml version="1.0" encoding="utf-8" ?>
|
||
<D:propfind xmlns:D="DAV:">
|
||
<D:prop>
|
||
<D:supported-privilege-set/>
|
||
</D:prop>
|
||
</D:propfind>
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
Clemm, et al. Standards Track [Page 19]
|
||
|
||
RFC 3744 WebDAV Access Control Protocol May 2004
|
||
|
||
|
||
>> Response <<
|
||
|
||
HTTP/1.1 207 Multi-Status
|
||
|
||
Content-Type: text/xml; charset="utf-8"
|
||
Content-Length: xxx
|
||
|
||
<?xml version="1.0" encoding="utf-8" ?>
|
||
<D:multistatus xmlns:D="DAV:">
|
||
<D:response>
|
||
<D:href>http://www.example.com/papers/</D:href>
|
||
<D:propstat>
|
||
<D:prop>
|
||
<D:supported-privilege-set>
|
||
<D:supported-privilege>
|
||
<D:privilege><D:all/></D:privilege>
|
||
<D:abstract/>
|
||
<D:description xml:lang="en">
|
||
Any operation
|
||
</D:description>
|
||
<D:supported-privilege>
|
||
<D:privilege><D:read/></D:privilege>
|
||
<D:description xml:lang="en">
|
||
Read any object
|
||
</D:description>
|
||
<D:supported-privilege>
|
||
<D:privilege><D:read-acl/></D:privilege>
|
||
<D:abstract/>
|
||
<D:description xml:lang="en">Read ACL</D:description>
|
||
</D:supported-privilege>
|
||
<D:supported-privilege>
|
||
<D:privilege>
|
||
<D:read-current-user-privilege-set/>
|
||
</D:privilege>
|
||
<D:abstract/>
|
||
<D:description xml:lang="en">
|
||
Read current user privilege set property
|
||
</D:description>
|
||
</D:supported-privilege>
|
||
</D:supported-privilege>
|
||
<D:supported-privilege>
|
||
<D:privilege><D:write/></D:privilege>
|
||
<D:description xml:lang="en">
|
||
Write any object
|
||
</D:description>
|
||
<D:supported-privilege>
|
||
<D:privilege><D:write-acl/></D:privilege>
|
||
<D:description xml:lang="en">
|
||
|
||
|
||
|
||
Clemm, et al. Standards Track [Page 20]
|
||
|
||
RFC 3744 WebDAV Access Control Protocol May 2004
|
||
|
||
|
||
Write ACL
|
||
</D:description>
|
||
<D:abstract/>
|
||
</D:supported-privilege>
|
||
<D:supported-privilege>
|
||
<D:privilege><D:write-properties/></D:privilege>
|
||
<D:description xml:lang="en">
|
||
Write properties
|
||
</D:description>
|
||
</D:supported-privilege>
|
||
<D:supported-privilege>
|
||
<D:privilege><D:write-content/></D:privilege>
|
||
<D:description xml:lang="en">
|
||
Write resource content
|
||
</D:description>
|
||
</D:supported-privilege>
|
||
</D:supported-privilege>
|
||
<D:supported-privilege>
|
||
<D:privilege><D:unlock/></D:privilege>
|
||
<D:description xml:lang="en">
|
||
Unlock resource
|
||
</D:description>
|
||
</D:supported-privilege>
|
||
</D:supported-privilege>
|
||
</D:supported-privilege-set>
|
||
</D:prop>
|
||
<D:status>HTTP/1.1 200 OK</D:status>
|
||
</D:propstat>
|
||
</D:response>
|
||
</D:multistatus>
|
||
|
||
5.4. DAV:current-user-privilege-set
|
||
|
||
DAV:current-user-privilege-set is a protected property containing the
|
||
exact set of privileges (as computed by the server) granted to the
|
||
currently authenticated HTTP user. Aggregate privileges and their
|
||
contained privileges are listed. A user-agent can use the value of
|
||
this property to adjust its user interface to make actions
|
||
inaccessible (e.g., by graying out a menu item or button) for which
|
||
the current principal does not have permission. This property is
|
||
also useful for determining what operations the current principal can
|
||
perform, without having to actually execute an operation.
|
||
|
||
<!ELEMENT current-user-privilege-set (privilege*)>
|
||
<!ELEMENT privilege ANY>
|
||
|
||
|
||
|
||
|
||
|
||
|
||
Clemm, et al. Standards Track [Page 21]
|
||
|
||
RFC 3744 WebDAV Access Control Protocol May 2004
|
||
|
||
|
||
If the current user is granted a specific privilege, that privilege
|
||
must belong to the set of privileges that may be set on this
|
||
resource. Therefore, each element in the DAV:current-user-
|
||
privilege-set property MUST identify a non-abstract privilege from
|
||
the DAV:supported-privilege-set property.
|
||
|
||
5.4.1. Example: Retrieving the User's Current Set of Assigned
|
||
Privileges
|
||
|
||
Continuing the example from Section 5.3.1, this example shows a
|
||
client requesting the DAV:current-user-privilege-set property from
|
||
the resource with URL http://www.example.com/papers/. The username
|
||
of the principal making the request is "khare", and Digest
|
||
authentication is used in the request. The principal with username
|
||
"khare" has been granted the DAV:read privilege. Since the DAV:read
|
||
privilege contains the DAV:read-acl and DAV:read-current-user-
|
||
privilege-set privileges (see Section 5.3.1), the principal with
|
||
username "khare" can read the ACL property, and the DAV:current-
|
||
user-privilege-set property. However, the DAV:all, DAV:read-acl,
|
||
DAV:write-acl and DAV:read-current-user-privilege-set privileges are
|
||
not listed in the value of DAV:current-user-privilege-set, since (for
|
||
this example) they are abstract privileges. DAV:write is not listed
|
||
since the principal with username "khare" is not listed in an ACE
|
||
granting that principal write permission.
|
||
|
||
>> Request <<
|
||
|
||
PROPFIND /papers/ HTTP/1.1
|
||
Host: www.example.com
|
||
Content-type: text/xml; charset="utf-8"
|
||
Content-Length: xxx
|
||
Depth: 0
|
||
Authorization: Digest username="khare",
|
||
realm="users@example.com", nonce="...",
|
||
uri="/papers/", response="...", opaque="..."
|
||
|
||
<?xml version="1.0" encoding="utf-8" ?>
|
||
<D:propfind xmlns:D="DAV:">
|
||
<D:prop>
|
||
<D:current-user-privilege-set/>
|
||
</D:prop>
|
||
</D:propfind>
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
Clemm, et al. Standards Track [Page 22]
|
||
|
||
RFC 3744 WebDAV Access Control Protocol May 2004
|
||
|
||
|
||
>> Response <<
|
||
|
||
HTTP/1.1 207 Multi-Status
|
||
Content-Type: text/xml; charset="utf-8"
|
||
Content-Length: xxx
|
||
|
||
<?xml version="1.0" encoding="utf-8" ?>
|
||
<D:multistatus xmlns:D="DAV:">
|
||
<D:response>
|
||
<D:href>http://www.example.com/papers/</D:href>
|
||
<D:propstat>
|
||
<D:prop>
|
||
<D:current-user-privilege-set>
|
||
<D:privilege><D:read/></D:privilege>
|
||
</D:current-user-privilege-set>
|
||
</D:prop>
|
||
<D:status>HTTP/1.1 200 OK</D:status>
|
||
</D:propstat>
|
||
</D:response>
|
||
</D:multistatus>
|
||
|
||
5.5. DAV:acl
|
||
|
||
This is a protected property that specifies the list of access
|
||
control entries (ACEs), which define what principals are to get what
|
||
privileges for this resource.
|
||
|
||
<!ELEMENT acl (ace*) >
|
||
|
||
Each DAV:ace element specifies the set of privileges to be either
|
||
granted or denied to a single principal. If the DAV:acl property is
|
||
empty, no principal is granted any privilege.
|
||
|
||
<!ELEMENT ace ((principal | invert), (grant|deny), protected?,
|
||
inherited?)>
|
||
|
||
5.5.1. ACE Principal
|
||
|
||
The DAV:principal element identifies the principal to which this ACE
|
||
applies.
|
||
|
||
<!ELEMENT principal (href | all | authenticated | unauthenticated
|
||
| property | self)>
|
||
|
||
The current user matches DAV:href only if that user is authenticated
|
||
as being (or being a member of) the principal identified by the URL
|
||
contained by that DAV:href.
|
||
|
||
|
||
|
||
|
||
Clemm, et al. Standards Track [Page 23]
|
||
|
||
RFC 3744 WebDAV Access Control Protocol May 2004
|
||
|
||
|
||
The current user always matches DAV:all.
|
||
|
||
<!ELEMENT all EMPTY>
|
||
|
||
The current user matches DAV:authenticated only if authenticated.
|
||
|
||
<!ELEMENT authenticated EMPTY>
|
||
|
||
The current user matches DAV:unauthenticated only if not
|
||
authenticated.
|
||
|
||
<!ELEMENT unauthenticated EMPTY>
|
||
|
||
DAV:all is the union of DAV:authenticated, and DAV:unauthenticated.
|
||
For a given request, the user matches either DAV:authenticated, or
|
||
DAV:unauthenticated, but not both (that is, DAV:authenticated and
|
||
DAV:unauthenticated are disjoint sets).
|
||
|
||
The current user matches a DAV:property principal in a DAV:acl
|
||
property of a resource only if the value of the identified property
|
||
of that resource contains at most one DAV:href XML element, the URI
|
||
value of DAV:href identifies a principal, and the current user is
|
||
authenticated as being (or being a member of) that principal. For
|
||
example, if the DAV:property element contained <DAV:owner/>, the
|
||
current user would match the DAV:property principal only if the
|
||
current user is authenticated as matching the principal identified by
|
||
the DAV:owner property of the resource.
|
||
|
||
<!ELEMENT property ANY>
|
||
|
||
The current user matches DAV:self in a DAV:acl property of the
|
||
resource only if that resource is a principal and that principal
|
||
matches the current user or, if the principal is a group, a member of
|
||
that group matches the current user.
|
||
|
||
<!ELEMENT self EMPTY>
|
||
|
||
Some servers may support ACEs applying to those users NOT matching
|
||
the current principal, e.g., all users not in a particular group.
|
||
This can be done by wrapping the DAV:principal element with
|
||
DAV:invert.
|
||
|
||
<!ELEMENT invert principal>
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
Clemm, et al. Standards Track [Page 24]
|
||
|
||
RFC 3744 WebDAV Access Control Protocol May 2004
|
||
|
||
|
||
5.5.2. ACE Grant and Deny
|
||
|
||
Each DAV:grant or DAV:deny element specifies the set of privileges to
|
||
be either granted or denied to the specified principal. A DAV:grant
|
||
or DAV:deny element of the DAV:acl of a resource MUST only contain
|
||
non-abstract elements specified in the DAV:supported-privilege-set of
|
||
that resource.
|
||
|
||
<!ELEMENT grant (privilege+)>
|
||
<!ELEMENT deny (privilege+)>
|
||
<!ELEMENT privilege ANY>
|
||
|
||
5.5.3. ACE Protection
|
||
|
||
A server indicates an ACE is protected by including the DAV:protected
|
||
element in the ACE. If the ACL of a resource contains an ACE with a
|
||
DAV:protected element, an attempt to remove that ACE from the ACL
|
||
MUST fail.
|
||
|
||
<!ELEMENT protected EMPTY>
|
||
|
||
5.5.4. ACE Inheritance
|
||
|
||
The presence of a DAV:inherited element indicates that this ACE is
|
||
inherited from another resource that is identified by the URL
|
||
contained in a DAV:href element. An inherited ACE cannot be modified
|
||
directly, but instead the ACL on the resource from which it is
|
||
inherited must be modified.
|
||
|
||
Note that ACE inheritance is not the same as ACL initialization. ACL
|
||
initialization defines the ACL that a newly created resource will use
|
||
(if not specified). ACE inheritance refers to an ACE that is
|
||
logically shared - where an update to the resource containing an ACE
|
||
will affect the ACE of each resource that inherits that ACE. The
|
||
method by which ACLs are initialized or by which ACEs are inherited
|
||
is not defined by this document.
|
||
|
||
<!ELEMENT inherited (href)>
|
||
|
||
5.5.5. Example: Retrieving a Resource's Access Control List
|
||
|
||
Continuing the example from Sections 5.3.1 and 5.4.1, this example
|
||
shows a client requesting the DAV:acl property from the resource with
|
||
URL http://www.example.com/papers/. There are two ACEs defined in
|
||
this ACL:
|
||
|
||
|
||
|
||
|
||
|
||
|
||
Clemm, et al. Standards Track [Page 25]
|
||
|
||
RFC 3744 WebDAV Access Control Protocol May 2004
|
||
|
||
|
||
ACE #1: The group identified by URL http://www.example.com/acl/
|
||
groups/maintainers (the group of site maintainers) is granted
|
||
DAV:write privilege. Since (for this example) DAV:write contains the
|
||
DAV:write-acl privilege (see Section 5.3.1), this means the
|
||
"maintainers" group can also modify the access control list.
|
||
|
||
ACE #2: All principals (DAV:all) are granted the DAV:read privilege.
|
||
Since (for this example) DAV:read contains DAV:read-acl and
|
||
DAV:read-current-user-privilege-set, this means all users (including
|
||
all members of the "maintainers" group) can read the DAV:acl property
|
||
and the DAV:current-user-privilege-set property.
|
||
|
||
>> Request <<
|
||
|
||
PROPFIND /papers/ HTTP/1.1
|
||
Host: www.example.com
|
||
Content-type: text/xml; charset="utf-8"
|
||
Content-Length: xxx
|
||
Depth: 0
|
||
Authorization: Digest username="masinter",
|
||
realm="users@example.com", nonce="...",
|
||
uri="/papers/", response="...", opaque="..."
|
||
|
||
<D:propfind xmlns:D="DAV:">
|
||
<D:prop>
|
||
<D:acl/>
|
||
</D:prop>
|
||
</D:propfind>
|
||
|
||
>> Response <<
|
||
|
||
HTTP/1.1 207 Multi-Status
|
||
Content-Type: text/xml; charset="utf-8"
|
||
Content-Length: xxx
|
||
|
||
<D:multistatus xmlns:D="DAV:">
|
||
<D:response>
|
||
<D:href>http://www.example.com/papers/</D:href>
|
||
<D:propstat>
|
||
<D:prop>
|
||
<D:acl>
|
||
<D:ace>
|
||
<D:principal>
|
||
<D:href
|
||
>http://www.example.com/acl/groups/maintainers</D:href>
|
||
</D:principal>
|
||
<D:grant>
|
||
<D:privilege><D:write/></D:privilege>
|
||
|
||
|
||
|
||
Clemm, et al. Standards Track [Page 26]
|
||
|
||
RFC 3744 WebDAV Access Control Protocol May 2004
|
||
|
||
|
||
</D:grant>
|
||
</D:ace>
|
||
<D:ace>
|
||
<D:principal>
|
||
<D:all/>
|
||
</D:principal>
|
||
<D:grant>
|
||
<D:privilege><D:read/></D:privilege>
|
||
</D:grant>
|
||
</D:ace>
|
||
</D:acl>
|
||
</D:prop>
|
||
<D:status>HTTP/1.1 200 OK</D:status>
|
||
</D:propstat>
|
||
</D:response>
|
||
</D:multistatus>
|
||
|
||
5.6. DAV:acl-restrictions
|
||
|
||
This protected property defines the types of ACLs supported by this
|
||
server, to avoid clients needlessly getting errors. When a client
|
||
tries to set an ACL via the ACL method, the server may reject the
|
||
attempt to set the ACL as specified. The following properties
|
||
indicate the restrictions the client must observe before setting an
|
||
ACL:
|
||
|
||
<grant-only> Deny ACEs are not supported
|
||
|
||
<no-invert> Inverted ACEs are not supported
|
||
|
||
<deny-before-grant> All deny ACEs must occur before any grant ACEs
|
||
|
||
<required-principal> Indicates which principals are required to be
|
||
present
|
||
|
||
|
||
<!ELEMENT acl-restrictions (grant-only?, no-invert?,
|
||
deny-before-grant?,
|
||
required-principal?)>
|
||
|
||
5.6.1. DAV:grant-only
|
||
|
||
This element indicates that ACEs with deny clauses are not allowed.
|
||
|
||
<!ELEMENT grant-only EMPTY>
|
||
|
||
|
||
|
||
|
||
|
||
|
||
Clemm, et al. Standards Track [Page 27]
|
||
|
||
RFC 3744 WebDAV Access Control Protocol May 2004
|
||
|
||
|
||
5.6.2. DAV:no-invert ACE Constraint
|
||
|
||
This element indicates that ACEs with the <invert> element are not
|
||
allowed.
|
||
|
||
<!ELEMENT no-invert EMPTY>
|
||
|
||
5.6.3. DAV:deny-before-grant
|
||
|
||
This element indicates that all deny ACEs must precede all grant
|
||
ACEs.
|
||
|
||
<!ELEMENT deny-before-grant EMPTY>
|
||
|
||
5.6.4. Required Principals
|
||
|
||
The required principal elements identify which principals must have
|
||
an ACE defined in the ACL.
|
||
|
||
<!ELEMENT required-principal
|
||
(all? | authenticated? | unauthenticated? | self? | href* |
|
||
property*)>
|
||
|
||
For example, the following element requires that the ACL contain a
|
||
|
||
DAV:owner property ACE:
|
||
|
||
<D:required-principal xmlns:D="DAV:">
|
||
<D:property><D:owner/></D:property>
|
||
</D:required-principal>
|
||
|
||
5.6.5. Example: Retrieving DAV:acl-restrictions
|
||
|
||
In this example, the client requests the value of the DAV:acl-
|
||
restrictions property. Digest authentication provides credentials
|
||
for the principal operating the client.
|
||
|
||
>> Request <<
|
||
|
||
PROPFIND /papers/ HTTP/1.1
|
||
Host: www.example.com
|
||
Content-type: text/xml; charset="utf-8"
|
||
Content-Length: xxx
|
||
Depth: 0
|
||
Authorization: Digest username="srcarter",
|
||
realm="users@example.com", nonce="...",
|
||
uri="/papers/", response="...", opaque="..."
|
||
|
||
|
||
|
||
|
||
Clemm, et al. Standards Track [Page 28]
|
||
|
||
RFC 3744 WebDAV Access Control Protocol May 2004
|
||
|
||
|
||
<?xml version="1.0" encoding="utf-8" ?>
|
||
<D:propfind xmlns:D="DAV:">
|
||
<D:prop>
|
||
<D:acl-restrictions/>
|
||
</D:prop>
|
||
</D:propfind>
|
||
|
||
>> Response <<
|
||
|
||
HTTP/1.1 207 Multi-Status
|
||
Content-Type: text/xml; charset="utf-8"
|
||
Content-Length: xxx
|
||
|
||
<?xml version="1.0" encoding="utf-8" ?>
|
||
<D:multistatus xmlns:D="DAV:">
|
||
<D:response>
|
||
<D:href>http://www.example.com/papers/</D:href>
|
||
<D:propstat>
|
||
<D:prop>
|
||
<D:acl-restrictions>
|
||
<D:grant-only/>
|
||
<D:required-principal>
|
||
<D:all/>
|
||
</D:required-principal>
|
||
</D:acl-restrictions>
|
||
</D:prop>
|
||
<D:status>HTTP/1.1 200 OK</D:status>
|
||
</D:propstat>
|
||
</D:response>
|
||
</D:multistatus>
|
||
|
||
5.7. DAV:inherited-acl-set
|
||
|
||
This protected property contains a set of URLs that identify other
|
||
resources that also control the access to this resource. To have a
|
||
privilege on a resource, not only must the ACL on that resource
|
||
(specified in the DAV:acl property of that resource) grant the
|
||
privilege, but so must the ACL of each resource identified in the
|
||
DAV:inherited-acl-set property of that resource. Effectively, the
|
||
privileges granted by the current ACL are ANDed with the privileges
|
||
granted by each inherited ACL.
|
||
|
||
<!ELEMENT inherited-acl-set (href*)>
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
Clemm, et al. Standards Track [Page 29]
|
||
|
||
RFC 3744 WebDAV Access Control Protocol May 2004
|
||
|
||
|
||
5.8. DAV:principal-collection-set
|
||
|
||
This protected property of a resource contains a set of URLs that
|
||
identify the root collections that contain the principals that are
|
||
available on the server that implements this resource. A WebDAV
|
||
Access Control Protocol user agent could use the contents of
|
||
DAV:principal-collection-set to retrieve the DAV:displayname property
|
||
(specified in Section 13.2 of [RFC2518]) of all principals on that
|
||
server, thereby yielding human-readable names for each principal that
|
||
could be displayed in a user interface.
|
||
|
||
<!ELEMENT principal-collection-set (href*)>
|
||
|
||
Since different servers can control different parts of the URL
|
||
namespace, different resources on the same host MAY have different
|
||
DAV:principal-collection-set values. The collections specified in
|
||
the DAV:principal-collection-set MAY be located on different hosts
|
||
from the resource. The URLs in DAV:principal-collection-set SHOULD be
|
||
http or https scheme URLs. For security and scalability reasons, a
|
||
server MAY report only a subset of the entire set of known principal
|
||
collections, and therefore clients should not assume they have
|
||
retrieved an exhaustive listing. Additionally, a server MAY elect to
|
||
report none of the principal collections it knows about, in which
|
||
case the property value would be empty.
|
||
|
||
The value of DAV:principal-collection-set gives the scope of the
|
||
DAV:principal-property-search REPORT (defined in Section 9.4).
|
||
Clients use the DAV:principal-property-search REPORT to populate
|
||
their user interface with a list of principals. Therefore, servers
|
||
that limit a client's ability to obtain principal information will
|
||
interfere with the client's ability to manipulate access control
|
||
lists, due to the difficulty of getting the URL of a principal for
|
||
use in an ACE.
|
||
|
||
5.8.1. Example: Retrieving DAV:principal-collection-set
|
||
|
||
In this example, the client requests the value of the DAV:principal-
|
||
collection-set property on the collection resource identified by URL
|
||
http://www.example.com/papers/. The property contains the two URLs,
|
||
http://www.example.com/acl/users/ and http://
|
||
www.example.com/acl/groups/, both wrapped in DAV:href XML elements.
|
||
Digest authentication provides credentials for the principal
|
||
operating the client.
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
Clemm, et al. Standards Track [Page 30]
|
||
|
||
RFC 3744 WebDAV Access Control Protocol May 2004
|
||
|
||
|
||
The client might reasonably follow this request with two separate
|
||
PROPFIND requests to retrieve the DAV:displayname property of the
|
||
members of the two collections (/acl/users and /acl/groups). This
|
||
information could be used when displaying a user interface for
|
||
creating access control entries.
|
||
|
||
>> Request <<
|
||
|
||
PROPFIND /papers/ HTTP/1.1
|
||
Host: www.example.com
|
||
Content-type: text/xml; charset="utf-8"
|
||
Content-Length: xxx
|
||
Depth: 0
|
||
Authorization: Digest username="yarong",
|
||
realm="users@example.com", nonce="...",
|
||
uri="/papers/", response="...", opaque="..."
|
||
|
||
<?xml version="1.0" encoding="utf-8" ?>
|
||
<D:propfind xmlns:D="DAV:">
|
||
<D:prop>
|
||
<D:principal-collection-set/>
|
||
</D:prop>
|
||
</D:propfind>
|
||
|
||
>> Response <<
|
||
|
||
HTTP/1.1 207 Multi-Status
|
||
Content-Type: text/xml; charset="utf-8"
|
||
Content-Length: xxx
|
||
|
||
<?xml version="1.0" encoding="utf-8" ?>
|
||
<D:multistatus xmlns:D="DAV:">
|
||
<D:response>
|
||
<D:href>http://www.example.com/papers/</D:href>
|
||
<D:propstat>
|
||
<D:prop>
|
||
<D:principal-collection-set>
|
||
<D:href>http://www.example.com/acl/users/</D:href>
|
||
<D:href>http://www.example.com/acl/groups/</D:href>
|
||
</D:principal-collection-set>
|
||
</D:prop>
|
||
<D:status>HTTP/1.1 200 OK</D:status>
|
||
</D:propstat>
|
||
</D:response>
|
||
</D:multistatus>
|
||
|
||
|
||
|
||
|
||
|
||
|
||
Clemm, et al. Standards Track [Page 31]
|
||
|
||
RFC 3744 WebDAV Access Control Protocol May 2004
|
||
|
||
|
||
5.9. Example: PROPFIND to retrieve access control properties
|
||
|
||
The following example shows how access control information can be
|
||
retrieved by using the PROPFIND method to fetch the values of the
|
||
DAV:owner, DAV:supported-privilege-set, DAV:current-user-privilege-
|
||
set, and DAV:acl properties.
|
||
|
||
>> Request <<
|
||
|
||
PROPFIND /top/container/ HTTP/1.1
|
||
Host: www.example.com
|
||
Content-type: text/xml; charset="utf-8"
|
||
Content-Length: xxx
|
||
Depth: 0
|
||
Authorization: Digest username="ejw",
|
||
realm="users@example.com", nonce="...",
|
||
uri="/top/container/", response="...", opaque="..."
|
||
|
||
<?xml version="1.0" encoding="utf-8" ?>
|
||
<D:propfind xmlns:D="DAV:">
|
||
<D:prop>
|
||
<D:owner/>
|
||
<D:supported-privilege-set/>
|
||
<D:current-user-privilege-set/>
|
||
<D:acl/>
|
||
</D:prop>
|
||
</D:propfind>
|
||
|
||
>> Response <<
|
||
|
||
HTTP/1.1 207 Multi-Status
|
||
Content-Type: text/xml; charset="utf-8"
|
||
Content-Length: xxx
|
||
|
||
<?xml version="1.0" encoding="utf-8" ?>
|
||
<D:multistatus xmlns:D="DAV:"
|
||
xmlns:A="http://www.example.com/acl/">
|
||
<D:response>
|
||
<D:href>http://www.example.com/top/container/</D:href>
|
||
<D:propstat>
|
||
<D:prop>
|
||
<D:owner>
|
||
<D:href>http://www.example.com/users/gclemm</D:href>
|
||
</D:owner>
|
||
<D:supported-privilege-set>
|
||
<D:supported-privilege>
|
||
<D:privilege><D:all/></D:privilege>
|
||
<D:abstract/>
|
||
|
||
|
||
|
||
Clemm, et al. Standards Track [Page 32]
|
||
|
||
RFC 3744 WebDAV Access Control Protocol May 2004
|
||
|
||
|
||
<D:description xml:lang="en">
|
||
Any operation
|
||
</D:description>
|
||
<D:supported-privilege>
|
||
<D:privilege><D:read/></D:privilege>
|
||
<D:description xml:lang="en">
|
||
Read any object
|
||
</D:description>
|
||
</D:supported-privilege>
|
||
<D:supported-privilege>
|
||
<D:privilege><D:write/></D:privilege>
|
||
<D:abstract/>
|
||
<D:description xml:lang="en">
|
||
Write any object
|
||
</D:description>
|
||
<D:supported-privilege>
|
||
<D:privilege><A:create/></D:privilege>
|
||
<D:description xml:lang="en">
|
||
Create an object
|
||
</D:description>
|
||
</D:supported-privilege>
|
||
<D:supported-privilege>
|
||
<D:privilege><A:update/></D:privilege>
|
||
<D:description xml:lang="en">
|
||
Update an object
|
||
</D:description>
|
||
</D:supported-privilege>
|
||
</D:supported-privilege>
|
||
<D:supported-privilege>
|
||
<D:privilege><A:delete/></D:privilege>
|
||
<D:description xml:lang="en">
|
||
Delete an object
|
||
</D:description>
|
||
</D:supported-privilege>
|
||
<D:supported-privilege>
|
||
<D:privilege><D:read-acl/></D:privilege>
|
||
<D:description xml:lang="en">
|
||
Read the ACL
|
||
</D:description>
|
||
</D:supported-privilege>
|
||
<D:supported-privilege>
|
||
<D:privilege><D:write-acl/></D:privilege>
|
||
<D:description xml:lang="en">
|
||
Write the ACL
|
||
</D:description>
|
||
</D:supported-privilege>
|
||
</D:supported-privilege>
|
||
</D:supported-privilege-set>
|
||
|
||
|
||
|
||
Clemm, et al. Standards Track [Page 33]
|
||
|
||
RFC 3744 WebDAV Access Control Protocol May 2004
|
||
|
||
|
||
<D:current-user-privilege-set>
|
||
<D:privilege><D:read/></D:privilege>
|
||
<D:privilege><D:read-acl/></D:privilege>
|
||
</D:current-user-privilege-set>
|
||
<D:acl>
|
||
<D:ace>
|
||
<D:principal>
|
||
<D:href>http://www.example.com/users/esedlar</D:href>
|
||
</D:principal>
|
||
<D:grant>
|
||
<D:privilege><D:read/></D:privilege>
|
||
<D:privilege><D:write/></D:privilege>
|
||
<D:privilege><D:read-acl/></D:privilege>
|
||
</D:grant>
|
||
</D:ace>
|
||
<D:ace>
|
||
<D:principal>
|
||
<D:href>http://www.example.com/groups/mrktng</D:href>
|
||
</D:principal>
|
||
<D:deny>
|
||
<D:privilege><D:read/></D:privilege>
|
||
</D:deny>
|
||
</D:ace>
|
||
<D:ace>
|
||
<D:principal>
|
||
<D:property><D:owner/></D:property>
|
||
</D:principal>
|
||
<D:grant>
|
||
<D:privilege><D:read-acl/></D:privilege>
|
||
<D:privilege><D:write-acl/></D:privilege>
|
||
</D:grant>
|
||
</D:ace>
|
||
<D:ace>
|
||
<D:principal><D:all/></D:principal>
|
||
<D:grant>
|
||
<D:privilege><D:read/></D:privilege>
|
||
</D:grant>
|
||
<D:inherited>
|
||
<D:href>http://www.example.com/top</D:href>
|
||
</D:inherited>
|
||
</D:ace>
|
||
</D:acl>
|
||
</D:prop>
|
||
<D:status>HTTP/1.1 200 OK</D:status>
|
||
</D:propstat>
|
||
</D:response>
|
||
</D:multistatus>
|
||
|
||
|
||
|
||
|
||
Clemm, et al. Standards Track [Page 34]
|
||
|
||
RFC 3744 WebDAV Access Control Protocol May 2004
|
||
|
||
|
||
The value of the DAV:owner property is a single DAV:href XML element
|
||
containing the URL of the principal that owns this resource.
|
||
|
||
The value of the DAV:supported-privilege-set property is a tree of
|
||
supported privileges (using "[XML Namespace , localname]" to identify
|
||
each privilege):
|
||
|
||
[DAV:, all] (aggregate, abstract)
|
||
|
|
||
+-- [DAV:, read]
|
||
+-- [DAV:, write] (aggregate, abstract)
|
||
|
|
||
+-- [http://www.example.com/acl, create]
|
||
+-- [http://www.example.com/acl, update]
|
||
+-- [http://www.example.com/acl, delete]
|
||
+-- [DAV:, read-acl]
|
||
+-- [DAV:, write-acl]
|
||
|
||
The DAV:current-user-privilege-set property contains two privileges,
|
||
DAV:read, and DAV:read-acl. This indicates that the current
|
||
authenticated user only has the ability to read the resource, and
|
||
read the DAV:acl property on the resource. The DAV:acl property
|
||
contains a set of four ACEs:
|
||
|
||
ACE #1: The principal identified by the URL http://www.example.com/
|
||
users/esedlar is granted the DAV:read, DAV:write, and DAV:read-acl
|
||
privileges.
|
||
|
||
ACE #2: The principals identified by the URL http://www.example.com/
|
||
groups/mrktng are denied the DAV:read privilege. In this example,
|
||
the principal URL identifies a group.
|
||
|
||
ACE #3: In this ACE, the principal is a property principal,
|
||
specifically the DAV:owner property. When evaluating this ACE, the
|
||
value of the DAV:owner property is retrieved, and is examined to see
|
||
if it contains a DAV:href XML element. If so, the URL within the
|
||
DAV:href element is read, and identifies a principal. In this ACE,
|
||
the owner is granted DAV:read-acl, and DAV:write-acl privileges.
|
||
|
||
ACE #4: This ACE grants the DAV:all principal (all users) the
|
||
DAV:read privilege. This ACE is inherited from the resource http://
|
||
www.example.com/top, the parent collection of this resource.
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
Clemm, et al. Standards Track [Page 35]
|
||
|
||
RFC 3744 WebDAV Access Control Protocol May 2004
|
||
|
||
|
||
6. ACL Evaluation
|
||
|
||
WebDAV ACLs are evaluated in similar manner as ACLs on Windows NT and
|
||
in NFSv4 [RFC3530]). An ACL is evaluated to determine whether or not
|
||
access will be granted for a WebDAV request. ACEs are maintained in
|
||
a particular order, and are evaluated until all of the permissions
|
||
required by the current request have been granted, at which point the
|
||
ACL evaluation is terminated and access is granted. If, during ACL
|
||
evaluation, a <deny> ACE (matching the current user) is encountered
|
||
for a privilege which has not yet been granted, the ACL evaluation is
|
||
terminated and access is denied. Failure to have all required
|
||
privileges granted results in access being denied.
|
||
|
||
Note that the semantics of many other existing ACL systems may be
|
||
represented via this mechanism, by mixing deny and grant ACEs. For
|
||
example, consider the standard "rwx" privilege scheme used by UNIX.
|
||
In this scheme, if the current user is the owner of the file, access
|
||
is granted if the corresponding privilege bit is set and denied if
|
||
not set, regardless of the permissions set on the file's group and
|
||
for the world. An ACL for UNIX permissions of "r--rw-r--" might be
|
||
constructed like:
|
||
|
||
<D:acl>
|
||
<D:ace>
|
||
<D:principal>
|
||
<D:property><D:owner/></D:property>
|
||
</D:principal>
|
||
<D:grant>
|
||
<D:privilege><D:read/></D:privilege>
|
||
</D:grant>
|
||
</D:ace>
|
||
<D:ace>
|
||
<D:principal>
|
||
<D:property><D:owner/></D:property>
|
||
</D:principal>
|
||
<D:deny>
|
||
<D:privilege><D:all/></D:privilege>
|
||
</D:deny>
|
||
</D:ace>
|
||
<D:ace>
|
||
<D:principal>
|
||
<D:property><D:group/></D:property>
|
||
</D:principal>
|
||
<D:grant>
|
||
<D:privilege><D:read/></D:privilege>
|
||
<D:privilege><D:write/></D:privilege>
|
||
</D:grant>
|
||
</D:ace>
|
||
|
||
|
||
|
||
Clemm, et al. Standards Track [Page 36]
|
||
|
||
RFC 3744 WebDAV Access Control Protocol May 2004
|
||
|
||
|
||
<D:ace>
|
||
<D:principal>
|
||
<D:property><D:group/></D:property>
|
||
</D:principal>
|
||
<D:deny>
|
||
<D:privilege><D:all/></D:privilege>
|
||
</D:deny>
|
||
</D:ace>
|
||
<D:ace>
|
||
<D:principal><D:all></D:principal>
|
||
<D:grant>
|
||
<D:privilege><D:read/></D:privilege>
|
||
</D:grant>
|
||
</D:ace>
|
||
</D:acl>
|
||
|
||
and the <acl-restrictions> would be defined as:
|
||
|
||
<D:no-invert/>
|
||
<D:required-principal>
|
||
<D:all/>
|
||
<D:property><D:owner/></D:property>
|
||
<D:property><D:group/><D:group/>
|
||
</D:required-principal>
|
||
|
||
Note that the client can still get errors from a UNIX server in spite
|
||
of obeying the <acl-restrictions>, including <D:allowed-principal>
|
||
(adding an ACE specifying a principal other than the ones in the ACL
|
||
above) or <D:ace-conflict> (by trying to reorder the ACEs in the
|
||
example above), as these particular implementation semantics are too
|
||
complex to be captured with the simple (but general) declarative
|
||
restrictions.
|
||
|
||
7. Access Control and existing methods
|
||
|
||
This section defines the impact of access control functionality on
|
||
existing methods.
|
||
|
||
7.1. Any HTTP method
|
||
|
||
7.1.1. Error Handling
|
||
|
||
The WebDAV ACL mechanism requires the usage of HTTP method
|
||
"preconditions" as described in section 1.6 of RFC3253 for ALL HTTP
|
||
methods. All HTTP methods have an additional precondition called
|
||
DAV:need-privileges. If an HTTP method fails due to insufficient
|
||
privileges, the response body to the "403 Forbidden" error MUST
|
||
contain the <DAV:error> element, which in turn contains the
|
||
|
||
|
||
|
||
Clemm, et al. Standards Track [Page 37]
|
||
|
||
RFC 3744 WebDAV Access Control Protocol May 2004
|
||
|
||
|
||
<DAV:need-privileges> element, which contains one or more
|
||
<DAV:resource> elements indicating which resource had insufficient
|
||
privileges, and what the lacking privileges were:
|
||
|
||
<!ELEMENT need-privileges (resource)* >
|
||
<!ELEMENT resource ( href , privilege ) >
|
||
|
||
Since some methods require multiple permissions on multiple
|
||
resources, this information is needed to resolve any ambiguity.
|
||
There is no requirement that all privilege violations be reported -
|
||
for implementation reasons, some servers may only report the first
|
||
privilege violation. For example:
|
||
|
||
>> Request <<
|
||
|
||
MOVE /a/b/ HTTP/1.1
|
||
Host: www.example.com
|
||
Destination: http://www.example.com/c/d
|
||
|
||
>> Response <<
|
||
|
||
HTTP/1.1 403 Forbidden
|
||
Content-Type: text/xml; charset="utf-8"
|
||
Content-Length: xxx
|
||
|
||
<D:error xmlns:D="DAV:">
|
||
<D:need-privileges>
|
||
<D:resource>
|
||
<D:href>/a</D:href>
|
||
<D:privilege><D:unbind/></D:privilege>
|
||
</D:resource>
|
||
<D:resource>
|
||
<D:href>/c</D:href>
|
||
<D:privilege><D:bind/></D:privilege>
|
||
</D:resource>
|
||
</D:need-privileges>
|
||
</D:error>
|
||
|
||
7.2. OPTIONS
|
||
|
||
If the server supports access control, it MUST return "access-
|
||
control" as a field in the DAV response header from an OPTIONS
|
||
request on any resource implemented by that server. A value of
|
||
"access-control" in the DAV header MUST indicate that the server
|
||
supports all MUST level requirements and REQUIRED features specified
|
||
in this document.
|
||
|
||
|
||
|
||
|
||
|
||
Clemm, et al. Standards Track [Page 38]
|
||
|
||
RFC 3744 WebDAV Access Control Protocol May 2004
|
||
|
||
|
||
7.2.1. Example - OPTIONS
|
||
|
||
>> Request <<
|
||
|
||
OPTIONS /foo.html HTTP/1.1
|
||
Host: www.example.com
|
||
Content-Length: 0
|
||
|
||
>> Response <<
|
||
|
||
HTTP/1.1 200 OK
|
||
DAV: 1, 2, access-control
|
||
Allow: OPTIONS, GET, PUT, PROPFIND, PROPPATCH, ACL
|
||
|
||
In this example, the OPTIONS response indicates that the server
|
||
supports access control and that /foo.html can have its access
|
||
control list modified by the ACL method.
|
||
|
||
7.3. MOVE
|
||
|
||
When a resource is moved from one location to another due to a MOVE
|
||
request, the non-inherited and non-protected ACEs in the DAV:acl
|
||
property of the resource MUST NOT be modified, or the MOVE request
|
||
fails. Handling of inherited and protected ACEs is intentionally
|
||
undefined to give server implementations flexibility in how they
|
||
implement ACE inheritance and protection.
|
||
|
||
7.4. COPY
|
||
|
||
The DAV:acl property on the resource at the destination of a COPY
|
||
MUST be the same as if the resource was created by an individual
|
||
resource creation request (e.g., MKCOL, PUT). Clients wishing to
|
||
preserve the DAV:acl property across a copy need to read the DAV:acl
|
||
property prior to the COPY, then perform an ACL operation on the new
|
||
resource at the destination to restore, insofar as this is possible,
|
||
the original access control list.
|
||
|
||
7.5. LOCK
|
||
|
||
A lock on a resource ensures that only the lock owner can modify ACEs
|
||
that are not inherited and not protected (these are the only ACEs
|
||
that a client can modify with an ACL request). A lock does not
|
||
protect inherited or protected ACEs, since a client cannot modify
|
||
them with an ACL request on that resource.
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
Clemm, et al. Standards Track [Page 39]
|
||
|
||
RFC 3744 WebDAV Access Control Protocol May 2004
|
||
|
||
|
||
8. Access Control Methods
|
||
|
||
8.1. ACL
|
||
|
||
The ACL method modifies the access control list (which can be read
|
||
via the DAV:acl property) of a resource. Specifically, the ACL
|
||
method only permits modification to ACEs that are not inherited, and
|
||
are not protected. An ACL method invocation modifies all non-
|
||
inherited and non-protected ACEs in a resource's access control list
|
||
to exactly match the ACEs contained within in the DAV:acl XML element
|
||
(specified in Section 5.5) of the request body. An ACL request body
|
||
MUST contain only one DAV:acl XML element. Unless the non-inherited
|
||
and non-protected ACEs of the DAV:acl property of the resource can be
|
||
updated to be exactly the value specified in the ACL request, the ACL
|
||
request MUST fail.
|
||
|
||
It is possible that the ACEs visible to the current user in the
|
||
DAV:acl property may only be a portion of the complete set of ACEs on
|
||
that resource. If this is the case, an ACL request only modifies the
|
||
set of ACEs visible to the current user, and does not affect any
|
||
non-visible ACE.
|
||
|
||
In order to avoid overwriting DAV:acl changes by another client, a
|
||
client SHOULD acquire a WebDAV lock on the resource before retrieving
|
||
the DAV:acl property of a resource that it intends on updating.
|
||
|
||
Implementation Note: Two common operations are to add or remove an
|
||
ACE from an existing access control list. To accomplish this, a
|
||
client uses the PROPFIND method to retrieve the value of the
|
||
DAV:acl property, then parses the returned access control list to
|
||
remove all inherited and protected ACEs (these ACEs are tagged
|
||
with the DAV:inherited and DAV:protected XML elements). In the
|
||
remaining set of non-inherited, non-protected ACEs, the client can
|
||
add or remove one or more ACEs before submitting the final ACE set
|
||
in the request body of the ACL method.
|
||
|
||
8.1.1. ACL Preconditions
|
||
|
||
An implementation MUST enforce the following constraints on an ACL
|
||
request. If the constraint is violated, a 403 (Forbidden) or 409
|
||
(Conflict) response MUST be returned and the indicated XML element
|
||
MUST be returned as a child of a top level DAV:error element in an
|
||
XML response body.
|
||
|
||
Though these status elements are generally expressed as empty XML
|
||
elements (and are defined as EMPTY in the DTD), implementations MAY
|
||
return additional descriptive XML elements as children of the status
|
||
|
||
|
||
|
||
|
||
Clemm, et al. Standards Track [Page 40]
|
||
|
||
RFC 3744 WebDAV Access Control Protocol May 2004
|
||
|
||
|
||
element. Clients MUST be able to accept children of these status
|
||
elements. Clients that do not understand the additional XML elements
|
||
should ignore them.
|
||
|
||
(DAV:no-ace-conflict): The ACEs submitted in the ACL request MUST NOT
|
||
conflict with each other. This is a catchall error code indicating
|
||
that an implementation-specific ACL restriction has been violated.
|
||
|
||
(DAV:no-protected-ace-conflict): The ACEs submitted in the ACL
|
||
request MUST NOT conflict with the protected ACEs on the resource.
|
||
For example, if the resource has a protected ACE granting DAV:write
|
||
to a given principal, then it would not be consistent if the ACL
|
||
request submitted an ACE denying DAV:write to the same principal.
|
||
|
||
(DAV:no-inherited-ace-conflict): The ACEs submitted in the ACL
|
||
request MUST NOT conflict with the inherited ACEs on the resource.
|
||
For example, if the resource inherits an ACE from its parent
|
||
collection granting DAV:write to a given principal, then it would not
|
||
be consistent if the ACL request submitted an ACE denying DAV:write
|
||
to the same principal. Note that reporting of this error will be
|
||
implementation-dependent. Implementations MUST either report this
|
||
error or allow the ACE to be set, and then let normal ACE evaluation
|
||
rules determine whether the new ACE has any impact on the privileges
|
||
available to a specific principal.
|
||
|
||
(DAV:limited-number-of-aces): The number of ACEs submitted in the ACL
|
||
request MUST NOT exceed the number of ACEs allowed on that resource.
|
||
However, ACL-compliant servers MUST support at least one ACE granting
|
||
privileges to a single principal, and one ACE granting privileges to
|
||
a group.
|
||
|
||
(DAV:deny-before-grant): All non-inherited deny ACEs MUST precede all
|
||
non-inherited grant ACEs.
|
||
|
||
(DAV:grant-only): The ACEs submitted in the ACL request MUST NOT
|
||
include a deny ACE. This precondition applies only when the ACL
|
||
restrictions of the resource include the DAV:grant-only constraint
|
||
(defined in Section 5.6.1).
|
||
|
||
(DAV:no-invert): The ACL request MUST NOT include a DAV:invert
|
||
element. This precondition applies only when the ACL semantics of
|
||
the resource includes the DAV:no-invert constraint (defined in
|
||
Section 5.6.2).
|
||
|
||
(DAV:no-abstract): The ACL request MUST NOT attempt to grant or deny
|
||
an abstract privilege (see Section 5.3).
|
||
|
||
|
||
|
||
|
||
|
||
Clemm, et al. Standards Track [Page 41]
|
||
|
||
RFC 3744 WebDAV Access Control Protocol May 2004
|
||
|
||
|
||
(DAV:not-supported-privilege): The ACEs submitted in the ACL request
|
||
MUST be supported by the resource.
|
||
|
||
(DAV:missing-required-principal): The result of the ACL request MUST
|
||
have at least one ACE for each principal identified in a
|
||
DAV:required-principal XML element in the ACL semantics of that
|
||
resource (see Section 5.5).
|
||
|
||
(DAV:recognized-principal): Every principal URL in the ACL request
|
||
MUST identify a principal resource.
|
||
|
||
(DAV:allowed-principal): The principals specified in the ACEs
|
||
submitted in the ACL request MUST be allowed as principals for the
|
||
resource. For example, a server where only authenticated principals
|
||
can access resources would not allow the DAV:all or
|
||
DAV:unauthenticated principals to be used in an ACE, since these
|
||
would allow unauthenticated access to resources.
|
||
|
||
8.1.2. Example: the ACL method
|
||
|
||
In the following example, user "fielding", authenticated by
|
||
information in the Authorization header, grants the principal
|
||
identified by the URL http://www.example.com/users/esedlar (i.e., the
|
||
user "esedlar") read and write privileges, grants the owner of the
|
||
resource read-acl and write-acl privileges, and grants everyone read
|
||
privileges.
|
||
|
||
>> Request <<
|
||
|
||
ACL /top/container/ HTTP/1.1
|
||
Host: www.example.com
|
||
Content-Type: text/xml; charset="utf-8"
|
||
Content-Length: xxxx
|
||
Authorization: Digest username="fielding",
|
||
realm="users@example.com", nonce="...",
|
||
uri="/top/container/", response="...", opaque="..."
|
||
|
||
<?xml version="1.0" encoding="utf-8" ?>
|
||
<D:acl xmlns:D="DAV:">
|
||
<D:ace>
|
||
<D:principal>
|
||
<D:href>http://www.example.com/users/esedlar</D:href>
|
||
</D:principal>
|
||
<D:grant>
|
||
<D:privilege><D:read/></D:privilege>
|
||
<D:privilege><D:write/></D:privilege>
|
||
</D:grant>
|
||
</D:ace>
|
||
|
||
|
||
|
||
Clemm, et al. Standards Track [Page 42]
|
||
|
||
RFC 3744 WebDAV Access Control Protocol May 2004
|
||
|
||
|
||
<D:ace>
|
||
<D:principal>
|
||
<D:property><D:owner/></D:property>
|
||
</D:principal>
|
||
<D:grant>
|
||
<D:privilege><D:read-acl/></D:privilege>
|
||
<D:privilege><D:write-acl/></D:privilege>
|
||
</D:grant>
|
||
</D:ace>
|
||
<D:ace>
|
||
<D:principal><D:all/></D:principal>
|
||
<D:grant>
|
||
<D:privilege><D:read/></D:privilege>
|
||
</D:grant>
|
||
</D:ace>
|
||
</D:acl>
|
||
|
||
>> Response <<
|
||
|
||
HTTP/1.1 200 OK
|
||
|
||
8.1.3. Example: ACL method failure due to protected ACE conflict
|
||
|
||
In the following request, user "fielding", authenticated by
|
||
information in the Authorization header, attempts to deny the
|
||
principal identified by the URL http://www.example.com/users/esedlar
|
||
(i.e., the user "esedlar") write privileges. Prior to the request,
|
||
the DAV:acl property on the resource contained a protected ACE (see
|
||
Section 5.5.3) granting DAV:owner the DAV:read and DAV:write
|
||
privileges. The principal identified by URL http://www.example.com/
|
||
users/esedlar is the owner of the resource. The ACL method
|
||
invocation fails because the submitted ACE conflicts with the
|
||
protected ACE, thus violating the semantics of ACE protection.
|
||
|
||
>> Request <<
|
||
|
||
ACL /top/container/ HTTP/1.1
|
||
Host: www.example.com
|
||
Content-Type: text/xml; charset="utf-8"
|
||
Content-Length: xxxx
|
||
Authorization: Digest username="fielding",
|
||
realm="users@example.com", nonce="...",
|
||
uri="/top/container/", response="...", opaque="..."
|
||
|
||
<?xml version="1.0" encoding="utf-8" ?>
|
||
<D:acl xmlns:D="DAV:">
|
||
<D:ace>
|
||
<D:principal>
|
||
|
||
|
||
|
||
Clemm, et al. Standards Track [Page 43]
|
||
|
||
RFC 3744 WebDAV Access Control Protocol May 2004
|
||
|
||
|
||
<D:href>http://www.example.com/users/esedlar</D:href>
|
||
</D:principal>
|
||
<D:deny>
|
||
<D:privilege><D:write/></D:privilege>
|
||
</D:deny>
|
||
</D:ace>
|
||
</D:acl>
|
||
|
||
>> Response <<
|
||
|
||
HTTP/1.1 403 Forbidden
|
||
Content-Type: text/xml; charset="utf-8"
|
||
Content-Length: xxx
|
||
|
||
<?xml version="1.0" encoding="utf-8" ?>
|
||
<D:error xmlns:D="DAV:">
|
||
<D:no-protected-ace-conflict/>
|
||
</D:error>
|
||
|
||
8.1.4. Example: ACL method failure due to an inherited ACE conflict
|
||
|
||
In the following request, user "ejw", authenticated by information in
|
||
the Authorization header, tries to change the access control list on
|
||
the resource http://www.example.com/top/index.html. This resource
|
||
has two inherited ACEs.
|
||
|
||
Inherited ACE #1 grants the principal identified by URL http://
|
||
www.example.com/users/ejw (i.e., the user "ejw") http://
|
||
www.example.com/privs/write-all and DAV:read-acl privileges. On this
|
||
server, http://www.example.com/privs/write-all is an aggregate
|
||
privilege containing DAV:write, and DAV:write-acl.
|
||
|
||
Inherited ACE #2 grants principal DAV:all the DAV:read privilege.
|
||
|
||
The request attempts to set a (non-inherited) ACE, denying the
|
||
principal identified by the URL http://www.example.com/users/ejw
|
||
(i.e., the user "ejw") DAV:write permission. This conflicts with
|
||
inherited ACE #1. Note that the decision to report an inherited ACE
|
||
conflict is specific to this server implementation. Another server
|
||
implementation could have allowed the new ACE to be set, and then
|
||
used normal ACE evaluation rules to determine whether the new ACE has
|
||
any impact on the privileges available to a principal.
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
Clemm, et al. Standards Track [Page 44]
|
||
|
||
RFC 3744 WebDAV Access Control Protocol May 2004
|
||
|
||
|
||
>> Request <<
|
||
|
||
ACL /top/index.html HTTP/1.1
|
||
Host: www.example.com
|
||
Content-Type: text/xml; charset="utf-8"
|
||
Content-Length: xxxx
|
||
Authorization: Digest username="ejw",
|
||
realm="users@example.com", nonce="...",
|
||
uri="/top/index.html", response="...", opaque="..."
|
||
|
||
<?xml version="1.0" encoding="utf-8" ?>
|
||
<D:acl xmlns:D="DAV:" xmlns:F="http://www.example.com/privs/">
|
||
<D:ace>
|
||
<D:principal>
|
||
<D:href>http://www.example.com/users/ejw</D:href>
|
||
</D:principal>
|
||
<D:grant><D:write/></D:grant>
|
||
</D:ace>
|
||
</D:acl>
|
||
|
||
>> Response <<
|
||
|
||
HTTP/1.1 403 Forbidden
|
||
Content-Type: text/xml; charset="utf-8"
|
||
Content-Length: xxx
|
||
|
||
<?xml version="1.0" encoding="utf-8" ?>
|
||
<D:error xmlns:D="DAV:">
|
||
<D:no-inherited-ace-conflict/>
|
||
</D:error>
|
||
|
||
8.1.5. Example: ACL method failure due to an attempt to set grant and
|
||
deny in a single ACE
|
||
|
||
In this example, user "ygoland", authenticated by information in the
|
||
Authorization header, tries to change the access control list on the
|
||
resource http://www.example.com/diamond/engagement-ring.gif. The ACL
|
||
request includes a single, syntactically and semantically incorrect
|
||
ACE, which attempts to grant the group identified by the URL http://
|
||
www.example.com/users/friends DAV:read privilege and deny the
|
||
principal identified by URL http://www.example.com/users/ygoland-so
|
||
(i.e., the user "ygoland-so") DAV:read privilege. However, it is
|
||
illegal to have multiple principal elements, as well as both a grant
|
||
and deny element in the same ACE, so the request fails due to poor
|
||
syntax.
|
||
|
||
|
||
|
||
|
||
|
||
|
||
Clemm, et al. Standards Track [Page 45]
|
||
|
||
RFC 3744 WebDAV Access Control Protocol May 2004
|
||
|
||
|
||
>> Request <<
|
||
|
||
ACL /diamond/engagement-ring.gif HTTP/1.1
|
||
Host: www.example.com
|
||
Content-Type: text/xml; charset="utf-8"
|
||
Content-Length: xxxx
|
||
Authorization: Digest username="ygoland",
|
||
realm="users@example.com", nonce="...",
|
||
uri="/diamond/engagement-ring.gif", response="...",
|
||
opaque="..."
|
||
|
||
<?xml version="1.0" encoding="utf-8" ?>
|
||
<D:acl xmlns:D="DAV:">
|
||
<D:ace>
|
||
<D:principal>
|
||
<D:href>http://www.example.com/users/friends</D:href>
|
||
</D:principal>
|
||
<D:grant><D:read/></D:grant>
|
||
<D:principal>
|
||
<D:href>http://www.example.com/users/ygoland-so</D:href>
|
||
</D:principal>
|
||
<D:deny><D:read/></D:deny>
|
||
</D:ace>
|
||
</D:acl>
|
||
|
||
>> Response <<
|
||
|
||
HTTP/1.1 400 Bad Request
|
||
Content-Length: 0
|
||
|
||
Note that if the request had been divided into two ACEs, one to
|
||
grant, and one to deny, the request would have been syntactically
|
||
well formed.
|
||
|
||
9. Access Control Reports
|
||
|
||
9.1. REPORT Method
|
||
|
||
The REPORT method (defined in Section 3.6 of [RFC3253]) provides an
|
||
extensible mechanism for obtaining information about a resource.
|
||
Unlike the PROPFIND method, which returns the value of one or more
|
||
named properties, the REPORT method can involve more complex
|
||
processing. REPORT is valuable in cases where the server has access
|
||
to all of the information needed to perform the complex request (such
|
||
as a query), and where it would require multiple requests for the
|
||
client to retrieve the information needed to perform the same
|
||
request.
|
||
|
||
|
||
|
||
|
||
Clemm, et al. Standards Track [Page 46]
|
||
|
||
RFC 3744 WebDAV Access Control Protocol May 2004
|
||
|
||
|
||
A server that supports the WebDAV Access Control Protocol MUST
|
||
support the DAV:expand-property report (defined in Section 3.8 of
|
||
[RFC3253]).
|
||
|
||
9.2. DAV:acl-principal-prop-set Report
|
||
|
||
The DAV:acl-principal-prop-set report returns, for all principals in
|
||
the DAV:acl property (of the Request-URI) that are identified by
|
||
http(s) URLs or by a DAV:property principal, the value of the
|
||
properties specified in the REPORT request body. In the case where a
|
||
principal URL appears multiple times, the DAV:acl-principal-prop-set
|
||
report MUST return the properties for that principal only once.
|
||
Support for this report is REQUIRED.
|
||
|
||
One expected use of this report is to retrieve the human readable
|
||
name (found in the DAV:displayname property) of each principal found
|
||
in an ACL. This is useful for constructing user interfaces that show
|
||
each ACE in a human readable form.
|
||
|
||
Marshalling
|
||
|
||
The request body MUST be a DAV:acl-principal-prop-set XML element.
|
||
|
||
<!ELEMENT acl-principal-prop-set ANY>
|
||
ANY value: a sequence of one or more elements, with at most one
|
||
DAV:prop element.
|
||
prop: see RFC 2518, Section 12.11
|
||
|
||
This report is only defined when the Depth header has value "0";
|
||
other values result in a 400 (Bad Request) error response. Note
|
||
that [RFC3253], Section 3.6, states that if the Depth header is
|
||
not present, it defaults to a value of "0".
|
||
|
||
The response body for a successful request MUST be a
|
||
DAV:multistatus XML element (i.e., the response uses the same
|
||
format as the response for PROPFIND). In the case where there are
|
||
no response elements, the returned multistatus XML element is
|
||
empty.
|
||
|
||
multistatus: see RFC 2518, Section 12.9
|
||
|
||
The response body for a successful DAV:acl-principal-prop-set
|
||
REPORT request MUST contain a DAV:response element for each
|
||
principal identified by an http(s) URL listed in a DAV:principal
|
||
XML element of an ACE within the DAV:acl property of the resource
|
||
identified by the Request-URI.
|
||
|
||
|
||
|
||
|
||
|
||
Clemm, et al. Standards Track [Page 47]
|
||
|
||
RFC 3744 WebDAV Access Control Protocol May 2004
|
||
|
||
|
||
Postconditions:
|
||
|
||
(DAV:number-of-matches-within-limits): The number of matching
|
||
principals must fall within server-specific, predefined limits.
|
||
For example, this condition might be triggered if a search
|
||
specification would cause the return of an extremely large number
|
||
of responses.
|
||
|
||
9.2.1. Example: DAV:acl-principal-prop-set Report
|
||
|
||
Resource http://www.example.com/index.html has an ACL with three
|
||
ACEs:
|
||
|
||
ACE #1: All principals (DAV:all) have DAV:read and DAV:read-current-
|
||
user-privilege-set access.
|
||
|
||
ACE #2: The principal identified by http://www.example.com/people/
|
||
gstein (the user "gstein") is granted DAV:write, DAV:write-acl,
|
||
DAV:read-acl privileges.
|
||
|
||
ACE #3: The group identified by http://www.example.com/groups/authors
|
||
(the "authors" group) is granted DAV:write and DAV:read-acl
|
||
privileges.
|
||
|
||
The following example shows a DAV:acl-principal-prop-set report
|
||
requesting the DAV:displayname property. It returns the value of
|
||
DAV:displayname for resources http://www.example.com/people/gstein
|
||
and http://www.example.com/groups/authors , but not for DAV:all,
|
||
since this is not an http(s) URL.
|
||
|
||
>> Request <<
|
||
|
||
REPORT /index.html HTTP/1.1
|
||
Host: www.example.com
|
||
Content-Type: text/xml; charset="utf-8"
|
||
Content-Length: xxxx
|
||
Depth: 0
|
||
|
||
<?xml version="1.0" encoding="utf-8" ?>
|
||
<D:acl-principal-prop-set xmlns:D="DAV:">
|
||
<D:prop>
|
||
<D:displayname/>
|
||
</D:prop>
|
||
</D:acl-principal-prop-set>
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
Clemm, et al. Standards Track [Page 48]
|
||
|
||
RFC 3744 WebDAV Access Control Protocol May 2004
|
||
|
||
|
||
>> Response <<
|
||
|
||
HTTP/1.1 207 Multi-Status
|
||
Content-Type: text/xml; charset="utf-8"
|
||
Content-Length: xxxx
|
||
|
||
<?xml version="1.0" encoding="utf-8" ?>
|
||
<D:multistatus xmlns:D="DAV:">
|
||
<D:response>
|
||
<D:href>http://www.example.com/people/gstein</D:href>
|
||
<D:propstat>
|
||
<D:prop>
|
||
<D:displayname>Greg Stein</D:displayname>
|
||
</D:prop>
|
||
<D:status>HTTP/1.1 200 OK</D:status>
|
||
</D:propstat>
|
||
</D:response>
|
||
<D:response>
|
||
<D:href>http://www.example.com/groups/authors</D:href>
|
||
<D:propstat>
|
||
<D:prop>
|
||
<D:displayname>Site authors</D:displayname>
|
||
</D:prop>
|
||
<D:status>HTTP/1.1 200 OK</D:status>
|
||
</D:propstat>
|
||
</D:response>
|
||
</D:multistatus>
|
||
|
||
9.3. DAV:principal-match REPORT
|
||
|
||
The DAV:principal-match REPORT is used to identify all members (at
|
||
any depth) of the collection identified by the Request-URI that are
|
||
principals and that match the current user. In particular, if the
|
||
collection contains principals, the report can be used to identify
|
||
all members of the collection that match the current user.
|
||
Alternatively, if the collection contains resources that have a
|
||
property that identifies a principal (e.g., DAV:owner), the report
|
||
can be used to identify all members of the collection whose property
|
||
identifies a principal that matches the current user. For example,
|
||
this report can return all of the resources in a collection hierarchy
|
||
that are owned by the current user. Support for this report is
|
||
REQUIRED.
|
||
|
||
Marshalling:
|
||
|
||
The request body MUST be a DAV:principal-match XML element.
|
||
<!ELEMENT principal-match ((principal-property | self), prop?)>
|
||
<!ELEMENT principal-property ANY>
|
||
|
||
|
||
|
||
Clemm, et al. Standards Track [Page 49]
|
||
|
||
RFC 3744 WebDAV Access Control Protocol May 2004
|
||
|
||
|
||
ANY value: an element whose value identifies a property. The
|
||
expectation is the value of the named property typically contains
|
||
an href element that contains the URI of a principal
|
||
<!ELEMENT self EMPTY>
|
||
prop: see RFC 2518, Section 12.11
|
||
|
||
This report is only defined when the Depth header has value "0";
|
||
other values result in a 400 (Bad Request) error response. Note
|
||
that [RFC3253], Section 3.6, states that if the Depth header is
|
||
not present, it defaults to a value of "0". The response body for
|
||
a successful request MUST be a DAV:multistatus XML element. In
|
||
the case where there are no response elements, the returned
|
||
multistatus XML element is empty.
|
||
|
||
multistatus: see RFC 2518, Section 12.9
|
||
|
||
The response body for a successful DAV:principal-match REPORT
|
||
request MUST contain a DAV:response element for each member of the
|
||
collection that matches the current user. When the
|
||
DAV:principal-property element is used, a match occurs if the
|
||
current user is matched by the principal identified by the URI
|
||
found in the DAV:href element of the property identified by the
|
||
DAV:principal-property element. When the DAV:self element is used
|
||
in a DAV:principal-match report issued against a group, it matches
|
||
the group if a member identifies the same principal as the current
|
||
user.
|
||
|
||
If DAV:prop is specified in the request body, the properties
|
||
specified in the DAV:prop element MUST be reported in the
|
||
DAV:response elements.
|
||
|
||
9.3.1. Example: DAV:principal-match REPORT
|
||
|
||
The following example identifies the members of the collection
|
||
identified by the URL http://www.example.com/doc that are owned by
|
||
the current user. The current user ("gclemm") is authenticated using
|
||
Digest authentication.
|
||
|
||
>> Request <<
|
||
|
||
REPORT /doc/ HTTP/1.1
|
||
Host: www.example.com
|
||
Authorization: Digest username="gclemm",
|
||
realm="users@example.com", nonce="...",
|
||
uri="/papers/", response="...", opaque="..."
|
||
Content-Type: text/xml; charset="utf-8"
|
||
Content-Length: xxxx
|
||
Depth: 0
|
||
|
||
|
||
|
||
Clemm, et al. Standards Track [Page 50]
|
||
|
||
RFC 3744 WebDAV Access Control Protocol May 2004
|
||
|
||
|
||
<?xml version="1.0" encoding="utf-8" ?>
|
||
<D:principal-match xmlns:D="DAV:">
|
||
<D:principal-property>
|
||
<D:owner/>
|
||
</D:principal-property>
|
||
</D:principal-match>
|
||
|
||
>> Response <<
|
||
|
||
HTTP/1.1 207 Multi-Status
|
||
Content-Type: text/xml; charset="utf-8"
|
||
Content-Length: xxxx
|
||
|
||
<?xml version="1.0" encoding="utf-8" ?>
|
||
<D:multistatus xmlns:D="DAV:">
|
||
<D:response>
|
||
<D:href>http://www.example.com/doc/foo.html</D:href>
|
||
<D:status>HTTP/1.1 200 OK</D:status>
|
||
</D:response>
|
||
<D:response>
|
||
<D:href>http://www.example.com/doc/img/bar.gif</D:href>
|
||
<D:status>HTTP/1.1 200 OK</D:status>
|
||
</D:response>
|
||
</D:multistatus>
|
||
|
||
9.4. DAV:principal-property-search REPORT
|
||
|
||
The DAV:principal-property-search REPORT performs a search for all
|
||
principals whose properties contain character data that matches the
|
||
search criteria specified in the request. One expected use of this
|
||
report is to discover the URL of a principal associated with a given
|
||
person or group by searching for them by name. This is done by
|
||
searching over DAV:displayname, which is defined on all principals.
|
||
|
||
The actual search method (exact matching vs. substring matching vs,
|
||
prefix-matching, case-sensitivity) deliberately is left to the server
|
||
implementation to allow implementation on a wide set of possible user
|
||
management systems. In cases where the implementation of
|
||
DAV:principal-property-search is not constrained by the semantics of
|
||
an underlying user management repository, preferred default semantics
|
||
are caseless substring matches.
|
||
|
||
For implementation efficiency, servers do not typically support
|
||
searching on all properties. A search requesting properties that are
|
||
not searchable for a particular principal will not match that
|
||
principal.
|
||
|
||
Support for the DAV:principal-property-search report is REQUIRED.
|
||
|
||
|
||
|
||
Clemm, et al. Standards Track [Page 51]
|
||
|
||
RFC 3744 WebDAV Access Control Protocol May 2004
|
||
|
||
|
||
Implementation Note: The value of a WebDAV property is a sequence
|
||
of well-formed XML, and hence can include any character in the
|
||
Unicode/ISO-10646 standard, that is, most known characters in
|
||
human languages. Due to the idiosyncrasies of case mapping across
|
||
human languages, implementation of case-insensitive matching is
|
||
non-trivial. Implementors of servers that do perform substring
|
||
matching are strongly encouraged to consult "The Unicode Standard"
|
||
[UNICODE4], especially Section 5.18, Subsection "Caseless
|
||
Matching", for guidance when implementing their case-insensitive
|
||
matching algorithms.
|
||
|
||
Implementation Note: Some implementations of this protocol will
|
||
use an LDAP repository for storage of principal metadata. The
|
||
schema describing each attribute (akin to a WebDAV property) in an
|
||
LDAP repository specifies whether it supports case-sensitive or
|
||
caseless searching. One of the benefits of leaving the search
|
||
method to the discretion of the server implementation is the
|
||
default LDAP attribute search behavior can be used when
|
||
implementing the DAV:principal-property-search report.
|
||
|
||
Marshalling:
|
||
|
||
The request body MUST be a DAV:principal-property-search XML
|
||
element containing a search specification and an optional list of
|
||
properties. For every principal that matches the search
|
||
specification, the response will contain the value of the
|
||
requested properties on that principal.
|
||
|
||
<!ELEMENT principal-property-search
|
||
((property-search+), prop?, apply-to-principal-collection-set?) >
|
||
|
||
By default, the report searches all members (at any depth) of the
|
||
collection identified by the Request-URI. If DAV:apply-to-
|
||
principal-collection-set is specified in the request body, the
|
||
request is applied instead to each collection identified by the
|
||
DAV:principal-collection-set property of the resource identified
|
||
by the Request-URI.
|
||
|
||
The DAV:property-search element contains a prop element
|
||
enumerating the properties to be searched and a match element,
|
||
containing the search string.
|
||
|
||
<!ELEMENT property-search (prop, match) >
|
||
prop: see RFC 2518, Section 12.11
|
||
|
||
<!ELEMENT match #PCDATA >
|
||
|
||
|
||
|
||
|
||
|
||
Clemm, et al. Standards Track [Page 52]
|
||
|
||
RFC 3744 WebDAV Access Control Protocol May 2004
|
||
|
||
|
||
Multiple property-search elements or multiple elements within a
|
||
DAV:prop element will be interpreted with a logical AND.
|
||
|
||
This report is only defined when the Depth header has value "0";
|
||
other values result in a 400 (Bad Request) error response. Note
|
||
that [RFC3253], Section 3.6, states that if the Depth header is
|
||
not present, it defaults to a value of "0".
|
||
|
||
The response body for a successful request MUST be a
|
||
DAV:multistatus XML element. In the case where there are no
|
||
response elements, the returned multistatus XML element is empty.
|
||
|
||
multistatus: see RFC 2518, Section 12.9
|
||
|
||
The response body for a successful DAV:principal-property-search
|
||
REPORT request MUST contain a DAV:response element for each
|
||
principal whose property values satisfy the search specification
|
||
given in DAV:principal-property-search.
|
||
|
||
If DAV:prop is specified in the request body, the properties
|
||
specified in the DAV:prop element MUST be reported in the
|
||
DAV:response elements.
|
||
|
||
Preconditions:
|
||
|
||
None
|
||
|
||
Postconditions:
|
||
|
||
(DAV:number-of-matches-within-limits): The number of matching
|
||
principals must fall within server-specific, predefined limits.
|
||
For example, this condition might be triggered if a search
|
||
specification would cause the return of an extremely large number
|
||
of responses.
|
||
|
||
9.4.1. Matching
|
||
|
||
There are several cases to consider when matching strings. The
|
||
easiest case is when a property value is "simple" and has only
|
||
character information item content (see [REC-XML-INFOSET]). For
|
||
example, the search string "julian" would match the DAV:displayname
|
||
property with value "Julian Reschke". Note that the on-the-wire
|
||
marshaling of DAV:displayname in this case is:
|
||
|
||
<D:displayname xmlns:D="DAV:">Julian Reschke</D:displayname>
|
||
|
||
|
||
|
||
|
||
|
||
|
||
Clemm, et al. Standards Track [Page 53]
|
||
|
||
RFC 3744 WebDAV Access Control Protocol May 2004
|
||
|
||
|
||
The name of the property is encoded into the XML element information
|
||
item, and the character information item content of the property is
|
||
"Julian Reschke".
|
||
|
||
A more complicated case occurs when properties have mixed content
|
||
(that is, compound values consisting of multiple child element items,
|
||
other types of information items, and character information item
|
||
content). Consider the property "aprop" in the namespace "http://
|
||
www.example.com/props/", marshaled as:
|
||
|
||
<W:aprop xmlns:W="http://www.example.com/props/">
|
||
{cdata 0}<W:elem1>{cdata 1}</W:elem1>
|
||
<W:elem2>{cdata 2}</W:elem2>{cdata 3}
|
||
</W:aprop>
|
||
|
||
In this case, matching is performed on each individual contiguous
|
||
sequence of character information items. In the example above, a
|
||
search string would be compared to the four following strings:
|
||
|
||
{cdata 0}
|
||
{cdata 1}
|
||
{cdata 2}
|
||
{cdata 3}
|
||
|
||
That is, four individual matches would be performed, one each for
|
||
{cdata 0}, {cdata 1}, {cdata 2}, and {cdata 3}.
|
||
|
||
9.4.2. Example: successful DAV:principal-property-search REPORT
|
||
|
||
In this example, the client requests the principal URLs of all users
|
||
whose DAV:displayname property contains the substring "doE" and whose
|
||
"title" property in the namespace "http://BigCorp.com/ns/" (that is,
|
||
their professional title) contains "Sales". In addition, the client
|
||
requests five properties to be returned with the matching principals:
|
||
|
||
In the DAV: namespace: displayname
|
||
|
||
In the http://www.example.com/ns/ namespace: department, phone,
|
||
office, salary
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
Clemm, et al. Standards Track [Page 54]
|
||
|
||
RFC 3744 WebDAV Access Control Protocol May 2004
|
||
|
||
|
||
The response shows that two principal resources meet the search
|
||
specification, "John Doe" and "Zygdoebert Smith". The property
|
||
"salary" in namespace "http://www.example.com/ns/" is not returned,
|
||
since the principal making the request does not have sufficient
|
||
access permissions to read this property.
|
||
|
||
>> Request <<
|
||
|
||
REPORT /users/ HTTP/1.1
|
||
Host: www.example.com
|
||
Content-Type: text/xml; charset=utf-8
|
||
Content-Length: xxxx
|
||
Depth: 0
|
||
|
||
<?xml version="1.0" encoding="utf-8" ?>
|
||
<D:principal-property-search xmlns:D="DAV:">
|
||
<D:property-search>
|
||
<D:prop>
|
||
<D:displayname/>
|
||
</D:prop>
|
||
<D:match>doE</D:match>
|
||
</D:property-search>
|
||
<D:property-search>
|
||
<D:prop xmlns:B="http://www.example.com/ns/">
|
||
<B:title/>
|
||
</D:prop>
|
||
<D:match>Sales</D:match>
|
||
</D:property-search>
|
||
<D:prop xmlns:B="http://www.example.com/ns/">
|
||
<D:displayname/>
|
||
<B:department/>
|
||
<B:phone/>
|
||
<B:office/>
|
||
<B:salary/>
|
||
</D:prop>
|
||
</D:principal-property-search>
|
||
|
||
>> Response <<
|
||
|
||
HTTP/1.1 207 Multi-Status
|
||
Content-Type: text/xml; charset=utf-8
|
||
Content-Length: xxxx
|
||
|
||
<?xml version="1.0" encoding="utf-8" ?>
|
||
<D:multistatus xmlns:D="DAV:" xmlns:B="http://BigCorp.com/ns/">
|
||
<D:response>
|
||
<D:href>http://www.example.com/users/jdoe</D:href>
|
||
<D:propstat>
|
||
|
||
|
||
|
||
Clemm, et al. Standards Track [Page 55]
|
||
|
||
RFC 3744 WebDAV Access Control Protocol May 2004
|
||
|
||
|
||
<D:prop>
|
||
<D:displayname>John Doe</D:displayname>
|
||
<B:department>Widget Sales</B:department>
|
||
<B:phone>234-4567</B:phone>
|
||
<B:office>209</B:office>
|
||
</D:prop>
|
||
<D:status>HTTP/1.1 200 OK</D:status>
|
||
</D:propstat>
|
||
<D:propstat>
|
||
<D:prop>
|
||
<B:salary/>
|
||
</D:prop>
|
||
<D:status>HTTP/1.1 403 Forbidden</D:status>
|
||
</D:propstat>
|
||
</D:response>
|
||
<D:response>
|
||
<D:href>http://www.example.com/users/zsmith</D:href>
|
||
<D:propstat>
|
||
<D:prop>
|
||
<D:displayname>Zygdoebert Smith</D:displayname>
|
||
<B:department>Gadget Sales</B:department>
|
||
<B:phone>234-7654</B:phone>
|
||
<B:office>114</B:office>
|
||
</D:prop>
|
||
<D:status>HTTP/1.1 200 OK</D:status>
|
||
</D:propstat>
|
||
<D:propstat>
|
||
<D:prop>
|
||
<B:salary/>
|
||
</D:prop>
|
||
<D:status>HTTP/1.1 403 Forbidden</D:status>
|
||
</D:propstat>
|
||
</D:response>
|
||
</D:multistatus>
|
||
|
||
9.5. DAV:principal-search-property-set REPORT
|
||
|
||
The DAV:principal-search-property-set REPORT identifies those
|
||
properties that may be searched using the DAV:principal-property-
|
||
search REPORT (defined in Section 9.4).
|
||
|
||
Servers MUST support the DAV:principal-search-property-set REPORT on
|
||
all collections identified in the value of a DAV:principal-
|
||
collection-set property.
|
||
|
||
An access control protocol user agent could use the results of the
|
||
DAV:principal-search-property-set REPORT to present a query interface
|
||
to the user for retrieving principals.
|
||
|
||
|
||
|
||
Clemm, et al. Standards Track [Page 56]
|
||
|
||
RFC 3744 WebDAV Access Control Protocol May 2004
|
||
|
||
|
||
Support for this report is REQUIRED.
|
||
|
||
Implementation Note: Some clients will have only limited screen
|
||
real estate for the display of lists of searchable properties. In
|
||
this case, a user might appreciate having the most frequently
|
||
searched properties be displayed on-screen, rather than having to
|
||
scroll through a long list of searchable properties. One
|
||
mechanism for signaling the most frequently searched properties is
|
||
to return them towards the start of a list of properties. A
|
||
client can then preferentially display the list of properties in
|
||
order, increasing the likelihood that the most frequently searched
|
||
properties will appear on-screen, and will not require scrolling
|
||
for their selection.
|
||
|
||
Marshalling:
|
||
|
||
The request body MUST be an empty DAV:principal-search-property-
|
||
set XML element.
|
||
|
||
This report is only defined when the Depth header has value "0";
|
||
other values result in a 400 (Bad Request) error response. Note
|
||
that [RFC3253], Section 3.6, states that if the Depth header is
|
||
not present, it defaults to a value of "0".
|
||
|
||
The response body MUST be a DAV:principal-search-property-set XML
|
||
element, containing a DAV:principal-search-property XML element
|
||
for each property that may be searched with the DAV:principal-
|
||
property-search REPORT. A server MAY limit its response to just a
|
||
subset of the searchable properties, such as those likely to be
|
||
useful to an interactive access control client.
|
||
|
||
<!ELEMENT principal-search-property-set
|
||
(principal-search-property*) >
|
||
|
||
Each DAV:principal-search-property XML element contains exactly
|
||
one searchable property, and a description of the property.
|
||
|
||
<!ELEMENT principal-search-property (prop, description) >
|
||
|
||
The DAV:prop element contains one principal property on which the
|
||
server is able to perform a DAV:principal-property-search REPORT.
|
||
|
||
prop: see RFC 2518, Section 12.11
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
Clemm, et al. Standards Track [Page 57]
|
||
|
||
RFC 3744 WebDAV Access Control Protocol May 2004
|
||
|
||
|
||
The description element is a human-readable description of what
|
||
information this property represents. Servers MUST indicate the
|
||
human language of the description using the xml:lang attribute and
|
||
SHOULD consider the HTTP Accept-Language request header when
|
||
selecting one of multiple available languages.
|
||
|
||
<!ELEMENT description #PCDATA >
|
||
|
||
9.5.1. Example: DAV:principal-search-property-set REPORT
|
||
|
||
In this example, the client determines the set of searchable
|
||
principal properties by requesting the DAV:principal-search-
|
||
property-set REPORT on the root of the server's principal URL
|
||
collection set, identified by http://www.example.com/users/.
|
||
|
||
>> Request <<
|
||
|
||
REPORT /users/ HTTP/1.1
|
||
Host: www.example.com
|
||
Content-Type: text/xml; charset="utf-8"
|
||
Content-Length: xxx
|
||
Accept-Language: en, de
|
||
Authorization: BASIC d2FubmFtYWs6cGFzc3dvcmQ=
|
||
Depth: 0
|
||
|
||
<?xml version="1.0" encoding="utf-8" ?>
|
||
<D:principal-search-property-set xmlns:D="DAV:"/>
|
||
|
||
>> Response <<
|
||
|
||
HTTP/1.1 200 OK
|
||
Content-Type: text/xml; charset="utf-8"
|
||
Content-Length: xxx
|
||
|
||
<?xml version="1.0" encoding="utf-8" ?>
|
||
<D:principal-search-property-set xmlns:D="DAV:">
|
||
<D:principal-search-property>
|
||
<D:prop>
|
||
<D:displayname/>
|
||
</D:prop>
|
||
<D:description xml:lang="en">Full name</D:description>
|
||
</D:principal-search-property>
|
||
<D:principal-search-property>
|
||
<D:prop xmlns:B="http://BigCorp.com/ns/">
|
||
<B:title/>
|
||
|
||
|
||
|
||
|
||
|
||
|
||
Clemm, et al. Standards Track [Page 58]
|
||
|
||
RFC 3744 WebDAV Access Control Protocol May 2004
|
||
|
||
|
||
</D:prop>
|
||
<D:description xml:lang="en">Job title</D:description>
|
||
</D:principal-search-property>
|
||
</D:principal-search-property-set>
|
||
|
||
10. XML Processing
|
||
|
||
Implementations of this specification MUST support the XML element
|
||
ignore rule, as specified in Section 23.3.2 of [RFC2518], and the XML
|
||
Namespace recommendation [REC-XML-NAMES].
|
||
|
||
Note that use of the DAV namespace is reserved for XML elements and
|
||
property names defined in a standards-track or Experimental IETF RFC.
|
||
|
||
11. Internationalization Considerations
|
||
|
||
In this specification, the only human-readable content can be found
|
||
in the description XML element, found within the DAV:supported-
|
||
privilege-set property. This element contains a human-readable
|
||
description of the capabilities controlled by a privilege. As a
|
||
result, the description element must be capable of representing
|
||
descriptions in multiple character sets. Since the description
|
||
element is found within a WebDAV property, it is represented on the
|
||
wire as XML [REC-XML], and hence can leverage XML's language tagging
|
||
and character set encoding capabilities. Specifically, XML
|
||
processors at minimum must be able to read XML elements encoded using
|
||
the UTF-8 [RFC3629] encoding of the ISO 10646 multilingual plane.
|
||
XML examples in this specification demonstrate use of the charset
|
||
parameter of the Content-Type header, as defined in [RFC3023], as
|
||
well as the XML "encoding" attribute, which together provide charset
|
||
identification information for MIME and XML processors. Furthermore,
|
||
this specification requires server implementations to tag description
|
||
fields with the xml:lang attribute (see Section 2.12 of [REC-XML]),
|
||
which specifies the human language of the description. Additionally,
|
||
server implementations should take into account the value of the
|
||
Accept-Language HTTP header to determine which description string to
|
||
return.
|
||
|
||
For XML elements other than the description element, it is expected
|
||
that implementations will treat the property names, privilege names,
|
||
and values as tokens, and convert these tokens into human-readable
|
||
text in the user's language and character set when displayed to a
|
||
person. Only a generic WebDAV property display utility would display
|
||
these values in their raw form to a human user.
|
||
|
||
For error reporting, we follow the convention of HTTP/1.1 status
|
||
codes, including with each status code a short, English description
|
||
of the code (e.g., 200 (OK)). While the possibility exists that a
|
||
|
||
|
||
|
||
Clemm, et al. Standards Track [Page 59]
|
||
|
||
RFC 3744 WebDAV Access Control Protocol May 2004
|
||
|
||
|
||
poorly crafted user agent would display this message to a user,
|
||
internationalized applications will ignore this message, and display
|
||
an appropriate message in the user's language and character set.
|
||
|
||
Further internationalization considerations for this protocol are
|
||
described in the WebDAV Distributed Authoring protocol specification
|
||
[RFC2518].
|
||
|
||
12. Security Considerations
|
||
|
||
Applications and users of this access control protocol should be
|
||
aware of several security considerations, detailed below. In
|
||
addition to the discussion in this document, the security
|
||
considerations detailed in the HTTP/1.1 specification [RFC2616], the
|
||
WebDAV Distributed Authoring Protocol specification [RFC2518], and
|
||
the XML Media Types specification [RFC3023] should be considered in a
|
||
security analysis of this protocol.
|
||
|
||
12.1. Increased Risk of Compromised Users
|
||
|
||
In the absence of a mechanism for remotely manipulating access
|
||
control lists, if a single user's authentication credentials are
|
||
compromised, only those resources for which the user has access
|
||
permission can be read, modified, moved, or deleted. With the
|
||
introduction of this access control protocol, if a single compromised
|
||
user has the ability to change ACLs for a broad range of other users
|
||
(e.g., a super-user), the number of resources that could be altered
|
||
by a single compromised user increases. This risk can be mitigated
|
||
by limiting the number of people who have write-acl privileges across
|
||
a broad range of resources.
|
||
|
||
12.2. Risks of the DAV:read-acl and DAV:current-user-privilege-set
|
||
Privileges
|
||
|
||
The ability to read the access privileges (stored in the DAV:acl
|
||
property), or the privileges permitted the currently authenticated
|
||
user (stored in the DAV:current-user-privilege-set property) on a
|
||
resource may seem innocuous, since reading an ACL cannot possibly
|
||
affect the resource's state. However, if all resources have world-
|
||
readable ACLs, it is possible to perform an exhaustive search for
|
||
those resources that have inadvertently left themselves in a
|
||
vulnerable state, such as being world-writable. In particular, the
|
||
property retrieval method PROPFIND, executed with Depth infinity on
|
||
an entire hierarchy, is a very efficient way to retrieve the DAV:acl
|
||
or DAV:current-user-privilege-set properties. Once found, this
|
||
vulnerability can be exploited by a denial of service attack in which
|
||
the open resource is repeatedly overwritten. Alternately, writable
|
||
resources can be modified in undesirable ways.
|
||
|
||
|
||
|
||
Clemm, et al. Standards Track [Page 60]
|
||
|
||
RFC 3744 WebDAV Access Control Protocol May 2004
|
||
|
||
|
||
To reduce this risk, read-acl privileges should not be granted to
|
||
unauthenticated principals, and restrictions on read-acl and read-
|
||
current-user-privilege-set privileges for authenticated principals
|
||
should be carefully analyzed when deploying this protocol. Access to
|
||
the current-user-privilege-set property will involve a tradeoff of
|
||
usability versus security. When the current-user-privilege-set is
|
||
visible, user interfaces are expected to provide enhanced information
|
||
concerning permitted and restricted operations, yet this information
|
||
may also indicate a vulnerability that could be exploited.
|
||
Deployment of this protocol will need to evaluate this tradeoff in
|
||
light of the requirements of the deployment environment.
|
||
|
||
12.3. No Foreknowledge of Initial ACL
|
||
|
||
In an effort to reduce protocol complexity, this protocol
|
||
specification intentionally does not address the issue of how to
|
||
manage or discover the initial ACL that is placed upon a resource
|
||
when it is created. The only way to discover the initial ACL is to
|
||
create a new resource, then retrieve the value of the DAV:acl
|
||
property. This assumes the principal creating the resource also has
|
||
been granted the DAV:read-acl privilege.
|
||
|
||
As a result, it is possible that a principal could create a resource,
|
||
and then discover that its ACL grants privileges that are
|
||
undesirable. Furthermore, this protocol makes it possible (though
|
||
unlikely) that the creating principal could be unable to modify the
|
||
ACL, or even delete the resource. Even when the ACL can be modified,
|
||
there will be a short period of time when the resource exists with
|
||
the initial ACL before its new ACL can be set.
|
||
|
||
Several factors mitigate this risk. Human principals are often aware
|
||
of the default access permissions in their editing environments and
|
||
take this into account when writing information. Furthermore,
|
||
default privilege policies are usually very conservative, limiting
|
||
the privileges granted by the initial ACL.
|
||
|
||
13. Authentication
|
||
|
||
Authentication mechanisms defined for use with HTTP and WebDAV also
|
||
apply to this WebDAV Access Control Protocol, in particular the Basic
|
||
and Digest authentication mechanisms defined in [RFC2617].
|
||
Implementation of the ACL spec requires that Basic authentication, if
|
||
used, MUST only be supported over secure transport such as TLS.
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
Clemm, et al. Standards Track [Page 61]
|
||
|
||
RFC 3744 WebDAV Access Control Protocol May 2004
|
||
|
||
|
||
14. IANA Considerations
|
||
|
||
This document uses the namespace defined by [RFC2518] for XML
|
||
elements. That is, this specification uses the "DAV:" URI namespace,
|
||
previously registered in the URI schemes registry. All other IANA
|
||
considerations mentioned in [RFC2518] are also applicable to this
|
||
specification.
|
||
|
||
15. Acknowledgements
|
||
|
||
This protocol is the collaborative product of the WebDAV ACL design
|
||
team: Bernard Chester, Geoff Clemm, Anne Hopkins, Barry Lind, Sean
|
||
Lyndersay, Eric Sedlar, Greg Stein, and Jim Whitehead. The authors
|
||
are grateful for the detailed review and comments provided by Jim
|
||
Amsden, Dylan Barrell, Gino Basso, Murthy Chintalapati, Lisa
|
||
Dusseault, Stefan Eissing, Tim Ellison, Yaron Goland, Dennis
|
||
Hamilton, Laurie Harper, Eckehard Hermann, Ron Jacobs, Chris Knight,
|
||
Remy Maucherat, Larry Masinter, Joe Orton, Peter Raymond, and Keith
|
||
Wannamaker. We thank Keith Wannamaker for the initial text of the
|
||
principal property search sections. Prior work on WebDAV access
|
||
control protocols has been performed by Yaron Goland, Paul Leach,
|
||
Lisa Dusseault, Howard Palmer, and Jon Radoff. We would like to
|
||
acknowledge the foundation laid for us by the authors of the DeltaV,
|
||
WebDAV and HTTP protocols upon which this protocol is layered, and
|
||
the invaluable feedback from the WebDAV working group.
|
||
|
||
16. References
|
||
|
||
16.1. Normative References
|
||
|
||
[REC-XML] Bray, T., Paoli, J., Sperberg-McQueen, C. and E.
|
||
Maler, "Extensible Markup Language (XML) 1.0
|
||
((Third ed)", W3C REC REC-xml-20040204, February
|
||
2004, <http://www.w3.org/TR/2004/REC-xml-20040204>.
|
||
|
||
[REC-XML-INFOSET] Cowan, J. and R. Tobin, "XML Information Set
|
||
(Second Edition)", W3C REC REC-xml-infoset-
|
||
20040204, February 2004,
|
||
<http://www.w3.org/TR/2004/REC-xml-infoset-
|
||
20040204/>.
|
||
|
||
[REC-XML-NAMES] Bray, T., Hollander, D. and A. Layman, "Namespaces
|
||
in XML", W3C REC REC-xml-names-19990114, January
|
||
1999, <http://www.w3.org/TR/1999/REC-xml-names-
|
||
19990114>.
|
||
|
||
[RFC2119] Bradner, S., "Key words for use in RFCs to Indicate
|
||
Requirement Levels", BCP 14, RFC 2119, March 1997.
|
||
|
||
|
||
|
||
Clemm, et al. Standards Track [Page 62]
|
||
|
||
RFC 3744 WebDAV Access Control Protocol May 2004
|
||
|
||
|
||
[RFC2518] Goland, Y., Whitehead, E., Faizi, A., Carter, S.
|
||
and D. Jensen, "HTTP Extensions for Distributed
|
||
Authoring -- WEBDAV", RFC 2518, February 1999.
|
||
|
||
[RFC2616] Fielding, R., Gettys, J., Mogul, J., Frystyk, H.,
|
||
Masinter, L., Leach, P. and T. Berners-Lee,
|
||
"Hypertext Transfer Protocol -- HTTP/1.1", RFC
|
||
2616, June 1999.
|
||
|
||
[RFC2617] Franks, J., Hallam-Baker, P., Hostetler, J.,
|
||
Lawrence, S., Leach, P., Luotonen, A. and L.
|
||
Stewart, "HTTP Authentication: Basic and Digest
|
||
Access Authentication", RFC 2617, June 1999.
|
||
|
||
[RFC3023] Murata, M., St.Laurent, S. and D. Kohn, "XML Media
|
||
Types", RFC 3023, January 2001.
|
||
|
||
[RFC3253] Clemm, G., Amsden, J., Ellison, T., Kaler, C. and
|
||
J. Whitehead, "Versioning Extensions to WebDAV",
|
||
RFC 3253, March 2002.
|
||
|
||
[RFC3530] Shepler, S., Ed., Callaghan, B., Robinson, D.,
|
||
Thurlow, R., Beame, C., Eisler, M. and D. Noveck,
|
||
"Network File System (NFS) version 4 Protocol", RFC
|
||
3530, April 2003.
|
||
|
||
[RFC3629] Yergeau, F., "UTF-8, a transformation format of ISO
|
||
10646", STD 63, RFC 3629 November 2003.
|
||
|
||
16.2. Informative References
|
||
|
||
[RFC2251] Wahl, M., Howes, T. and S. Kille, "Lightweight
|
||
Directory Access Protocol (v3)", RFC 2251, December
|
||
1997.
|
||
|
||
[RFC2255] Howes, T. and M. Smith, "The LDAP URL Format", RFC
|
||
2255, December 1997.
|
||
|
||
[UNICODE4] The Unicode Consortium, "The Unicode Standard -
|
||
Version 4.0", Addison-Wesley , August 2003,
|
||
<http://www.unicode.org/versions/Unicode4.0.0/>.
|
||
ISBN 0321185781.
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
Clemm, et al. Standards Track [Page 63]
|
||
|
||
RFC 3744 WebDAV Access Control Protocol May 2004
|
||
|
||
|
||
Appendix A. WebDAV XML Document Type Definition Addendum
|
||
|
||
All XML elements defined in this Document Type Definition (DTD)
|
||
belong to the DAV namespace. This DTD should be viewed as an addendum
|
||
to the DTD provided in [RFC2518], section 23.1.
|
||
|
||
<!-- Privileges -- (Section 3)>
|
||
|
||
<!ELEMENT read EMPTY>
|
||
<!ELEMENT write EMPTY>
|
||
<!ELEMENT write-properties EMPTY>
|
||
<!ELEMENT write-content EMPTY>
|
||
<!ELEMENT unlock EMPTY>
|
||
<!ELEMENT read-acl EMPTY>
|
||
<!ELEMENT read-current-user-privilege-set EMPTY>
|
||
<!ELEMENT write-acl EMPTY>
|
||
<!ELEMENT bind EMPTY>
|
||
<!ELEMENT unbind EMPTY>
|
||
<!ELEMENT all EMPTY>
|
||
|
||
<!-- Principal Properties (Section 4) -->
|
||
|
||
<!ELEMENT principal EMPTY>
|
||
|
||
<!ELEMENT alternate-URI-set (href*)>
|
||
<!ELEMENT principal-URL (href)>
|
||
<!ELEMENT group-member-set (href*)>
|
||
<!ELEMENT group-membership (href*)>
|
||
|
||
<!-- Access Control Properties (Section 5) -->
|
||
|
||
<!-- DAV:owner Property (Section 5.1) -->
|
||
|
||
<!ELEMENT owner (href?)>
|
||
|
||
<!-- DAV:group Property (Section 5.2) -->
|
||
|
||
<!ELEMENT group (href?)>
|
||
|
||
<!-- DAV:supported-privilege-set Property (Section 5.3) -->
|
||
|
||
<!ELEMENT supported-privilege-set (supported-privilege*)>
|
||
<!ELEMENT supported-privilege
|
||
(privilege, abstract?, description, supported-privilege*)>
|
||
|
||
<!ELEMENT privilege ANY>
|
||
<!ELEMENT abstract EMPTY>
|
||
<!ELEMENT description #PCDATA>
|
||
|
||
|
||
|
||
Clemm, et al. Standards Track [Page 64]
|
||
|
||
RFC 3744 WebDAV Access Control Protocol May 2004
|
||
|
||
|
||
<!-- DAV:current-user-privilege-set Property (Section 5.4) -->
|
||
|
||
<!ELEMENT current-user-privilege-set (privilege*)>
|
||
|
||
<!-- DAV:acl Property (Section 5.5) -->
|
||
|
||
<!ELEMENT acl (ace)* >
|
||
<!ELEMENT ace ((principal | invert), (grant|deny), protected?,
|
||
inherited?)>
|
||
|
||
<!ELEMENT principal (href)
|
||
| all | authenticated | unauthenticated
|
||
| property | self)>
|
||
|
||
<!ELEMENT all EMPTY>
|
||
<!ELEMENT authenticated EMPTY>
|
||
<!ELEMENT unauthenticated EMPTY>
|
||
<!ELEMENT property ANY>
|
||
<!ELEMENT self EMPTY>
|
||
|
||
<!ELEMENT invert principal>
|
||
|
||
<!ELEMENT grant (privilege+)>
|
||
<!ELEMENT deny (privilege+)>
|
||
<!ELEMENT privilege ANY>
|
||
|
||
<!ELEMENT protected EMPTY>
|
||
|
||
<!ELEMENT inherited (href)>
|
||
|
||
<!-- DAV:acl-restrictions Property (Section 5.6) -->
|
||
|
||
<!ELEMENT acl-restrictions (grant-only?, no-invert?,
|
||
deny-before-grant?, required-principal?)>
|
||
|
||
<!ELEMENT grant-only EMPTY>
|
||
<!ELEMENT no-invert EMPTY>
|
||
<!ELEMENT deny-before-grant EMPTY>
|
||
|
||
<!ELEMENT required-principal
|
||
(all? | authenticated? | unauthenticated? | self? | href*
|
||
|property*)>
|
||
|
||
<!-- DAV:inherited-acl-set Property (Section 5.7) -->
|
||
|
||
<!ELEMENT inherited-acl-set (href*)>
|
||
|
||
<!-- DAV:principal-collection-set Property (Section 5.8) -->
|
||
|
||
|
||
|
||
Clemm, et al. Standards Track [Page 65]
|
||
|
||
RFC 3744 WebDAV Access Control Protocol May 2004
|
||
|
||
|
||
<!ELEMENT principal-collection-set (href*)>
|
||
|
||
<!-- Access Control and Existing Methods (Section 7) -->
|
||
|
||
<!ELEMENT need-privileges (resource)* >
|
||
<!ELEMENT resource ( href, privilege )
|
||
|
||
<!-- ACL method preconditions (Section 8.1.1) -->
|
||
|
||
<!ELEMENT no-ace-conflict EMPTY>
|
||
<!ELEMENT no-protected-ace-conflict EMPTY>
|
||
<!ELEMENT no-inherited-ace-conflict EMPTY>
|
||
<!ELEMENT limited-number-of-aces EMPTY>
|
||
<!ELEMENT grant-only EMPTY>
|
||
<!ELEMENT no-invert EMPTY>
|
||
<!ELEMENT deny-before-grant EMPTY>
|
||
<!ELEMENT no-abstract EMPTY>
|
||
<!ELEMENT not-supported-privilege EMPTY>
|
||
<!ELEMENT missing-required-principal EMPTY>
|
||
<!ELEMENT recognized-principal EMPTY>
|
||
<!ELEMENT allowed-principal EMPTY>
|
||
|
||
<!-- REPORTs (Section 9) -->
|
||
|
||
<!ELEMENT acl-principal-prop-set ANY>
|
||
ANY value: a sequence of one or more elements, with at most one
|
||
DAV:prop element.
|
||
|
||
<!ELEMENT principal-match ((principal-property | self), prop?)>
|
||
<!ELEMENT principal-property ANY>
|
||
ANY value: an element whose value identifies a property. The
|
||
expectation is the value of the named property typically contains
|
||
an href element that contains the URI of a principal
|
||
<!ELEMENT self EMPTY>
|
||
|
||
<!ELEMENT principal-property-search ((property-search+), prop?) >
|
||
<!ELEMENT property-search (prop, match) >
|
||
<!ELEMENT match #PCDATA >
|
||
|
||
<!ELEMENT principal-search-property-set (
|
||
principal-search-property*) >
|
||
<!ELEMENT principal-search-property (prop, description) >
|
||
<!ELEMENT description #PCDATA >
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
Clemm, et al. Standards Track [Page 66]
|
||
|
||
RFC 3744 WebDAV Access Control Protocol May 2004
|
||
|
||
|
||
Appendix B. WebDAV Method Privilege Table (Normative)
|
||
|
||
The following table of WebDAV methods (as defined in RFC 2518, 2616,
|
||
and 3253) clarifies which privileges are required for access for each
|
||
method. Note that the privileges listed, if denied, MUST cause
|
||
access to be denied. However, given that a specific implementation
|
||
MAY define an additional custom privilege to control access to
|
||
existing methods, having all of the indicated privileges does not
|
||
mean that access will be granted. Note that lack of the indicated
|
||
privileges does not imply that access will be denied, since a
|
||
particular implementation may use a sub-privilege aggregated under
|
||
the indicated privilege to control access. Privileges required refer
|
||
to the current resource being processed unless otherwise specified.
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
Clemm, et al. Standards Track [Page 67]
|
||
|
||
RFC 3744 WebDAV Access Control Protocol May 2004
|
||
|
||
|
||
+---------------------------------+---------------------------------+
|
||
| METHOD | PRIVILEGES |
|
||
+---------------------------------+---------------------------------+
|
||
| GET | <D:read> |
|
||
| HEAD | <D:read> |
|
||
| OPTIONS | <D:read> |
|
||
| PUT (target exists) | <D:write-content> on target |
|
||
| | resource |
|
||
| PUT (no target exists) | <D:bind> on parent collection |
|
||
| | of target |
|
||
| PROPPATCH | <D:write-properties> |
|
||
| ACL | <D:write-acl> |
|
||
| PROPFIND | <D:read> (plus <D:read-acl> and |
|
||
| | <D:read-current-user-privilege- |
|
||
| | set> as needed) |
|
||
| COPY (target exists) | <D:read>, <D:write-content> and |
|
||
| | <D:write-properties> on target |
|
||
| | resource |
|
||
| COPY (no target exists) | <D:read>, <D:bind> on target |
|
||
| | collection |
|
||
| MOVE (no target exists) | <D:unbind> on source collection |
|
||
| | and <D:bind> on target |
|
||
| | collection |
|
||
| MOVE (target exists) | As above, plus <D:unbind> on |
|
||
| | the target collection |
|
||
| DELETE | <D:unbind> on parent collection |
|
||
| LOCK (target exists) | <D:write-content> |
|
||
| LOCK (no target exists) | <D:bind> on parent collection |
|
||
| MKCOL | <D:bind> on parent collection |
|
||
| UNLOCK | <D:unlock> |
|
||
| CHECKOUT | <D:write-properties> |
|
||
| CHECKIN | <D:write-properties> |
|
||
| REPORT | <D:read> (on all referenced |
|
||
| | resources) |
|
||
| VERSION-CONTROL | <D:write-properties> |
|
||
| MERGE | <D:write-content> |
|
||
| MKWORKSPACE | <D:write-content> on parent |
|
||
| | collection |
|
||
| BASELINE-CONTROL | <D:write-properties> and |
|
||
| | <D:write-content> |
|
||
| MKACTIVITY | <D:write-content> on parent |
|
||
| | collection |
|
||
+---------------------------------+---------------------------------+
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
Clemm, et al. Standards Track [Page 68]
|
||
|
||
RFC 3744 WebDAV Access Control Protocol May 2004
|
||
|
||
|
||
Index
|
||
|
||
A
|
||
ACL method 40
|
||
|
||
C
|
||
Condition Names
|
||
DAV:allowed-principal (pre) 42
|
||
DAV:deny-before-grant (pre) 41
|
||
DAV:grant-only (pre) 41
|
||
DAV:limited-number-of-aces (pre) 41
|
||
DAV:missing-required-principal (pre) 42
|
||
DAV:no-abstract (pre) 41
|
||
DAV:no-ace-conflict (pre) 41
|
||
DAV:no-inherited-ace-conflict (pre) 41
|
||
DAV:no-invert (pre) 41
|
||
DAV:no-protected-ace-conflict (pre) 41
|
||
DAV:not-supported-privilege (pre) 42
|
||
DAV:number-of-matches-within-limits (post) 48, 53
|
||
DAV:recognized-principal (pre) 42
|
||
|
||
D
|
||
DAV header
|
||
compliance class 'access-control' 38
|
||
DAV:acl property 23
|
||
DAV:acl-principal-prop-set report 48
|
||
DAV:acl-restrictions property 27
|
||
DAV:all privilege 13
|
||
DAV:allowed-principal precondition 42
|
||
DAV:alternate-URI-set property 14
|
||
DAV:bind privilege 12
|
||
DAV:current-user-privilege-set property 21
|
||
DAV:deny-before-grant precondition 41
|
||
DAV:grant-only precondition 41
|
||
DAV:group property 18
|
||
DAV:group-member-set property 14
|
||
DAV:group-membership property 14
|
||
DAV:inherited-acl-set property 29
|
||
DAV:limited-number-of-aces precondition 41
|
||
DAV:missing-required-principal precondition 42
|
||
DAV:no-abstract precondition 41
|
||
DAV:no-ace-conflict precondition 41
|
||
DAV:no-inherited-ace-conflict precondition 41
|
||
DAV:no-invert precondition 41
|
||
DAV:no-protected-ace-conflict precondition 41
|
||
DAV:not-supported-privilege precondition 42
|
||
DAV:number-of-matches-within-limits postcondition 48, 53
|
||
DAV:owner property 15
|
||
|
||
|
||
|
||
Clemm, et al. Standards Track [Page 69]
|
||
|
||
RFC 3744 WebDAV Access Control Protocol May 2004
|
||
|
||
|
||
DAV:principal resource type 13
|
||
DAV:principal-collection-set property 30
|
||
DAV:principal-match report 50
|
||
DAV:principal-property-search 51
|
||
DAV:principal-search-property-set 56
|
||
DAV:principal-URL property 14
|
||
DAV:read privilege 10
|
||
DAV:read-acl privilege 11
|
||
DAV:read-current-user-privilege-set privilege 12
|
||
DAV:recognized-principal precondition 42
|
||
DAV:supported-privilege-set property 18
|
||
DAV:unbind privilege 12
|
||
DAV:unlock privilege 11
|
||
DAV:write privilege 10
|
||
DAV:write-acl privilege 12
|
||
DAV:write-content privilege 10
|
||
DAV:write-properties privilege 10
|
||
|
||
M
|
||
Methods
|
||
ACL 40
|
||
|
||
P
|
||
Privileges
|
||
DAV:all 13
|
||
DAV:bind 12
|
||
DAV:read 10
|
||
DAV:read-acl 11
|
||
DAV:read-current-user-privilege-set 12
|
||
DAV:unbind 12
|
||
DAV:unlock 11
|
||
DAV:write 10
|
||
DAV:write-acl 12
|
||
DAV:write-content 11
|
||
DAV:write-properties 10
|
||
Properties
|
||
DAV:acl 23
|
||
DAV:acl-restrictions 27
|
||
DAV:alternate-URI-set 14
|
||
DAV:current-user-privilege-set 21
|
||
DAV:group 18
|
||
DAV:group-member-set 14
|
||
DAV:group-membership 14
|
||
DAV:inherited-acl-set 29
|
||
DAV:owner 15
|
||
DAV:principal-collection-set 30
|
||
DAV:principal-URL 14
|
||
DAV:supported-privilege-set 18
|
||
|
||
|
||
|
||
Clemm, et al. Standards Track [Page 70]
|
||
|
||
RFC 3744 WebDAV Access Control Protocol May 2004
|
||
|
||
|
||
R
|
||
Reports
|
||
DAV:acl-principal-prop-set 47
|
||
DAV:principal-match 49
|
||
DAV:principal-property-search 51
|
||
DAV:principal-search-property-set 56
|
||
Resource Types
|
||
DAV:principal 13
|
||
|
||
Authors' Addresses
|
||
|
||
Geoffrey Clemm
|
||
IBM
|
||
20 Maguire Road
|
||
Lexington, MA 02421
|
||
|
||
EMail: geoffrey.clemm@us.ibm.com
|
||
|
||
|
||
Julian F. Reschke
|
||
greenbytes GmbH
|
||
Salzmannstrasse 152
|
||
Muenster, NW 48159
|
||
Germany
|
||
|
||
EMail: julian.reschke@greenbytes.de
|
||
|
||
|
||
Eric Sedlar
|
||
Oracle Corporation
|
||
500 Oracle Parkway
|
||
Redwood Shores, CA 94065
|
||
|
||
EMail: eric.sedlar@oracle.com
|
||
|
||
|
||
Jim Whitehead
|
||
U.C. Santa Cruz, Dept. of Computer Science
|
||
1156 High Street
|
||
Santa Cruz, CA 95064
|
||
|
||
EMail: ejw@cse.ucsc.edu
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
Clemm, et al. Standards Track [Page 71]
|
||
|
||
RFC 3744 WebDAV Access Control Protocol May 2004
|
||
|
||
|
||
Full Copyright Statement
|
||
|
||
Copyright (C) The Internet Society (2004). This document is subject
|
||
to the rights, licenses and restrictions contained in BCP 78, and
|
||
except as set forth therein, the authors retain all their rights.
|
||
|
||
This document and the information contained herein are provided on an
|
||
"AS IS" basis and THE CONTRIBUTOR, THE ORGANIZATION HE/SHE
|
||
REPRESENTS OR IS SPONSORED BY (IF ANY), THE INTERNET SOCIETY AND THE
|
||
INTERNET ENGINEERING TASK FORCE DISCLAIM ALL WARRANTIES, EXPRESS OR
|
||
IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTY THAT THE USE OF
|
||
THE INFORMATION HEREIN WILL NOT INFRINGE ANY RIGHTS OR ANY IMPLIED
|
||
WARRANTIES OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE.
|
||
|
||
Intellectual Property
|
||
|
||
The IETF takes no position regarding the validity or scope of any
|
||
Intellectual Property Rights or other rights that might be claimed
|
||
to pertain to the implementation or use of the technology
|
||
described in this document or the extent to which any license
|
||
under such rights might or might not be available; nor does it
|
||
represent that it has made any independent effort to identify any
|
||
such rights. Information on the procedures with respect to
|
||
rights in RFC documents can be found in BCP 78 and BCP 79.
|
||
|
||
Copies of IPR disclosures made to the IETF Secretariat and any
|
||
assurances of licenses to be made available, or the result of an
|
||
attempt made to obtain a general license or permission for the use
|
||
of such proprietary rights by implementers or users of this
|
||
specification can be obtained from the IETF on-line IPR repository
|
||
at http://www.ietf.org/ipr.
|
||
|
||
The IETF invites any interested party to bring to its attention
|
||
any copyrights, patents or patent applications, or other
|
||
proprietary rights that may cover technology that may be required
|
||
to implement this standard. Please address the information to the
|
||
IETF at ietf-ipr@ietf.org.
|
||
|
||
Acknowledgement
|
||
|
||
Funding for the RFC Editor function is currently provided by the
|
||
Internet Society.
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
Clemm, et al. Standards Track [Page 72]
|
||
|