draft-ietf-webdav-acl-03.txt | draft-ietf-webdav-acl-04.txt | |||
---|---|---|---|---|
INTERNET-DRAFT Geoffrey Clemm, Rational Software | INTERNET-DRAFT Geoffrey Clemm, Rational Software | |||
draft-ietf-webdav-acl-03 Anne Hopkins, Microsoft | draft-ietf-webdav-acl-04 Anne Hopkins, Microsoft Corporation | |||
Corporation | ||||
Eric Sedlar, Oracle Corporation | Eric Sedlar, Oracle Corporation | |||
Jim Whitehead, U.C. Santa Cruz | Jim Whitehead, U.C. Santa Cruz | |||
Expires May 24, 2001 November 24, 2000 | Expires July 21, 2001 January 21, 2001 | |||
WebDAV Access Control Protocol | WebDAV Access Control Protocol | |||
Status of this Memo | Status of this Memo | |||
This document is an Internet-Draft and is in full conformance with | This document is an Internet-Draft and is in full conformance with all | |||
all provisions of Section 10 of RFC2026. | provisions of Section 10 of RFC2026. | |||
Internet-Drafts are working documents of the Internet Engineering | Internet-Drafts are working documents of the Internet Engineering | |||
Task Force (IETF), its areas, and its working groups. Note that | Task Force (IETF), its areas, and its working groups. Note that other | |||
other groups may also distribute working documents as Internet- | groups may also distribute working documents as Internet-Drafts. | |||
Drafts. | ||||
Internet-Drafts are draft documents valid for a maximum of six | Internet-Drafts are draft documents valid for a maximum of six months | |||
months and may be updated, replaced, or obsoleted by other | and may be updated, replaced, or obsoleted by other documents at any | |||
documents at any time. It is inappropriate to use Internet- Drafts | time. It is inappropriate to use Internet- Drafts as reference material | |||
as reference material or to cite them other than as "work in | or to cite them other than as "work in progress." | |||
progress." | ||||
The list of current Internet-Drafts can be accessed at | The list of current Internet-Drafts can be accessed at | |||
http://www.ietf.org/ietf/1id-abstracts.txt | http://www.ietf.org/ietf/1id-abstracts.txt | |||
The list of Internet-Draft Shadow Directories can be accessed at | The list of Internet-Draft Shadow Directories can be accessed at | |||
http://www.ietf.org/shadow.html. | http://www.ietf.org/shadow.html. | |||
Abstract | Abstract | |||
This document specifies a set of methods, headers, and message | This document specifies a set of methods, headers, and message bodies | |||
bodies that define the WebDAV Access Control extensions to the | that define the WebDAV Access Control extensions to the HTTP/1.1 | |||
HTTP/1.1 protocol. This protocol permits a client to remotely read | protocol. This protocol permits a client to remotely read and modify | |||
and modify access control lists that instruct a server whether to | access control lists that instruct a server whether to grant or deny | |||
grant or deny operations upon a resource (such as HTTP method | operations upon a resource (such as HTTP method invocations) by a given | |||
invocations) by a given principal. | principal. | |||
This document is a product of the Web Distributed Authoring and | This document is a product of the Web Distributed Authoring and | |||
Versioning (WebDAV) working group of the Internet Engineering Task | Versioning (WebDAV) working group of the Internet Engineering Task | |||
Force. Comments on this draft are welcomed, and should be addressed | Force. Comments on this draft are welcomed, and should be addressed to | |||
to the acl@webdav.org mailing list. Other related documents can be | the acl@webdav.org mailing list. Other related documents can be found | |||
found at http://www.webdav.org/acl/, and | at http://www.webdav.org/acl/, and | |||
http://www.ics.uci.edu/pub/ietf/webdav/. | http://www.ics.uci.edu/pub/ietf/webdav/. | |||
Clemm, Hopkins, Sedlar, Whitehead [Page 1] | Clemm, Hopkins, Sedlar, Whitehead [Page 1] | |||
Table of Contents | Table of Contents | |||
1 INTRODUCTION ............................................3 | 1 INTRODUCTION......................................................3 | |||
1.1 Terms .................................................3 | 1.1 Terms..........................................................4 | |||
1.2 Notational Conventions ................................4 | 1.2 Notational Conventions.........................................5 | |||
2 PRINCIPALS ..............................................4 | 2 PRINCIPALS........................................................5 | |||
3 PRIVILEGES ..............................................5 | 3 PRIVILEGES........................................................5 | |||
3.1 DAV:read Privilege ....................................5 | 3.1 DAV:read Privilege.............................................6 | |||
3.2 DAV:write Privilege ...................................6 | 3.2 DAV:write Privilege............................................6 | |||
3.3 DAV:read-acl Privilege ................................6 | 3.3 DAV:read-acl Privilege.........................................7 | |||
3.4 DAV:write-acl Privilege ...............................6 | 3.4 DAV:write-acl Privilege........................................7 | |||
3.5 DAV:all Privilege .....................................6 | 3.5 DAV:all Privilege..............................................7 | |||
4 PRINCIPAL PROPERTIES ....................................6 | 4 PRINCIPAL PROPERTIES..............................................7 | |||
4.1 DAV:is-principal ......................................6 | 4.1 DAV:is-principal...............................................7 | |||
4.2 DAV:authentication-id .................................6 | 4.2 DAV:authentication-id..........................................7 | |||
5 ACCESS CONTROL PROPERTIES ...............................7 | 5 ACCESS CONTROL PROPERTIES.........................................8 | |||
5.1 DAV:owner .............................................7 | 5.1 DAV:owner......................................................8 | |||
5.2 DAV:supported-privilege-set ...........................7 | 5.2 DAV:supported-privilege-set....................................8 | |||
5.3 DAV:current-user-privilege-set ........................8 | 5.3 DAV:current-user-privilege-set.................................9 | |||
5.4 DAV:acl ...............................................8 | 5.4 DAV:acl........................................................9 | |||
5.4.1 ACE Principal .....................................8 | 5.4.1 ACE Principal................................................9 | |||
5.4.2 ACE Grant and Deny ................................9 | 5.4.2 ACE Grant and Deny..........................................10 | |||
5.4.3 ACE Protection ...................................10 | 5.4.3 ACE Protection..............................................11 | |||
5.4.4 ACE Inheritance ..................................10 | 5.4.4 ACE Inheritance.............................................11 | |||
5.5 DAV:acl-semantics ....................................10 | 5.5 DAV:acl-semantics.............................................11 | |||
5.5.1 first-match Semantics ............................14 | 5.6 DAV:principal-collection-set..................................11 | |||
5.5.2 all-grant-before-any-deny Semantics ..............14 | 5.7 Example: PROPFIND to retrieve access control properties.......12 | |||
5.5.3 no-deny Semantics ................................14 | ||||
5.6 DAV:principal-collection-set .........................10 | ||||
5.7 Example: PROPFIND to retrieve access control properties11 | ||||
6 ACCESS CONTROL AND EXISTING METHODS ....................14 | 6 ACL SEMANTICS....................................................15 | |||
6.1 OPTIONS ..............................................15 | 6.1 ACE Combination...............................................15 | |||
6.1.1 Example - OPTIONS ................................15 | 6.1.1 DAV:first-match ACE Combination.............................15 | |||
6.1.2 DAV:all-grant-before-any-deny ACE Combination...............15 | ||||
6.1.3 DAV:no-deny ACE Combination.................................15 | ||||
6.2 ACE Ordering..................................................16 | ||||
6.2.1 DAV:deny-before-grant ACE Ordering..........................16 | ||||
6.3 Required Principals...........................................16 | ||||
7 ACCESS CONTROL METHODS .................................16 | 7 ACCESS CONTROL AND EXISTING METHODS..............................16 | |||
7.1 ACL ..................................................16 | 7.1 OPTIONS.......................................................16 | |||
7.1.1 ACL Preconditions ................................16 | 7.1.1 Example - OPTIONS...........................................16 | |||
7.1.2 Example: the ACL method ..........................17 | ||||
7.1.3 Example: ACL method failure ......................17 | ||||
8 INTERNATIONALIZATION CONSIDERATIONS ....................18 | 8 ACCESS CONTROL METHODS...........................................17 | |||
8.1 ACL...........................................................17 | ||||
8.1.1 ACL Preconditions...........................................17 | ||||
8.1.2 Example: the ACL method.....................................17 | ||||
8.1.3 Example: ACL method failure due to omission of protected ACE18 | ||||
8.1.4 Example: ACL method failure due to inherited ACEs preceding | ||||
non-inherited ACEs................................................19 | ||||
8.1.5 Example: ACL method failure due to an attempt to set grant and | ||||
deny in a single ACE..............................................20 | ||||
9 SECURITY CONSIDERATIONS ................................19 | Clemm, Hopkins, Sedlar, Whitehead [Page 2] | |||
9 INTERNATIONALIZATION CONSIDERATIONS..............................21 | ||||
10 AUTHENTICATION .......................................20 | 10 SECURITY CONSIDERATIONS........................................22 | |||
10.1 Increased Risk of Compromised Users...........................22 | ||||
10.2 Authentication-id Property and Dictionary Attacks.............22 | ||||
10.3 Risks of the read-acl Privilege...............................23 | ||||
11 IANA CONSIDERATIONS ..................................20 | 11 AUTHENTICATION.................................................23 | |||
12 INTELLECTUAL PROPERTY ................................20 | 12 IANA CONSIDERATIONS............................................23 | |||
13 ACKNOWLEDGEMENTS .....................................21 | 13 INTELLECTUAL PROPERTY..........................................23 | |||
Clemm, Hopkins, Sedlar, Whitehead [Page 2] | 14 ACKNOWLEDGEMENTS...............................................24 | |||
14 REFERENCES ...........................................21 | ||||
15 AUTHORS' ADDRESSES ...................................22 | 15 REFERENCES.....................................................24 | |||
15.1 Normative References..........................................24 | ||||
15.2 Informational References......................................25 | ||||
16 STILL TO DO ..........................................22 | 16 AUTHORS' ADDRESSES.............................................25 | |||
17 APPENDICIES....................................................25 | ||||
17.1 XML Document Type Definition..................................25 | ||||
1 INTRODUCTION | 1 INTRODUCTION | |||
The goal of the WebDAV access control extensions is to provide | The goal of the WebDAV access control extensions is to provide an | |||
an interoperable mechanism for handling discretionary access | interoperable mechanism for handling discretionary access control | |||
control for content in WebDAV servers. WebDAV access control | for content in WebDAV servers. WebDAV access control can be | |||
can be implemented on content repositories with security as | implemented on content repositories with security as simple as that | |||
simple as that of a UNIX file system, as well as more | of a UNIX file system, as well as more sophisticated models. The | |||
sophisticated models. The underlying principle of access | underlying principle of access control is that who you are | |||
control is that who you are determines how you can access a | determines how you can access a resource. The "who you are" is | |||
resource. The "who you are" is defined by a "principal" | defined by a "principal" identifier; users, client software, | |||
identifier; users, client software, servers, and groups of the | servers, and groups of the previous have principal identifiers. The | |||
previous have principal identifiers. The "how" is determined | "how" is determined by a single "access control list" (ACL) | |||
by a single "access control list" (ACL) associated with a | associated with a resource. An ACL contains a set of "access | |||
resource. An ACL contains a set of "access control entries" | control entries" (ACEs), where each ACE specifies a principal and a | |||
(ACEs), where each ACE specifies a principal and a set of | set of privileges that are either granted or denied to that | |||
rights that are either granted or denied to that principal. | principal. When a principal submits an operation (such as an HTTP or | |||
When a principal submits an operation (such as an HTTP or | WebDAV method) to a resource for execution, the server evaluates the | |||
WebDAV method) to a resource for execution, the server | ACEs in the ACL to determine if the principal has permission for | |||
evaluates the ACEs in the ACL to determine if the principal | that operation. | |||
has permission for that operation. | ||||
This specification has intentionally omits discussion of | This specification intentionally omits discussion of authentication, | |||
authentication, as the HTTP protocol already has a number of | as the HTTP protocol already has a number of authentication | |||
authentication mechanisms[RFC2617] . Some authentication | mechanisms [RFC2617]. Some authentication mechanism (such as HTTP | |||
mechanism (such as HTTP Digest Authentication, which all | Digest Authentication, which all WebDAV compliant implementations | |||
WebDAV compliant implementations are required to support) must | are required to support) must be available to validate the identity | |||
be availableto validate the identity of a principal. | of a principal. | |||
In the interests of timeliness, the following set of security | In the interests of timeliness, the following set of security | |||
mechanisms is currently viewed as out of scope of this | mechanisms are not addressed by this document: | |||
document: | ||||
* Access control that applies only to a particular property | Clemm, Hopkins, Sedlar, Whitehead [Page 3] | |||
on a resource, rather than the entire resource. | * Access control that applies only to a particular property on | |||
a resource, rather than the entire resource, | ||||
* Role-based security (where a role can be seen as a | * Role-based security (where a role can be seen as a | |||
dynamically defined collection of principals) | dynamically defined collection of principals), | |||
* Specification of the ways an ACL on a resource is | * Specification of the ways an ACL on a resource is | |||
initialized | initialized, | |||
* Specification of an ACL that applies globally to a | * Specification of an ACL that applies globally to a method, | |||
method, rather than to a particular resource | rather than to a particular resource. | |||
This specification is organized as follows. Section 1.1 defines key | ||||
concepts used throughout the specification, and is followed by 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 semantics of access control lists are | ||||
described in Section 6, including sections on ACE combination | ||||
(Section 6.1), ACE ordering (Section 6.2), and principals required | ||||
to be present in an ACE (Section 6.3). Client discovery of access | ||||
control capability using OPTIONS is described in Section 7.1, and | ||||
the access control setting method, ACL, is specified in Section 8. | ||||
Internationalization considerations (Section 9) and security | ||||
considerations (Section 10) round out the specification. An appendix | ||||
(Section 17.1) provides an XML Document Type Definition (DTD) for | ||||
the XML elements defined in the specification. | ||||
1.1 Terms | 1.1 Terms | |||
This draft uses the terms defined in HTTP [RFC2616] and WebDAV | This draft uses the terms defined in HTTP [RFC2616] and WebDAV | |||
[RFC2518]. In addition, the following terms are defined: | [RFC2518]. In addition, the following terms are defined: | |||
Clemm, Hopkins, Sedlar, Whitehead [Page 3] | ||||
principal | principal | |||
A "principal" is a distinct human or computational actor that | A "principal" is a distinct human or computational actor that | |||
initiates access to network resources. In this protocol, a | initiates access to network resources. In this protocol, a | |||
principal is an HTTP resource that represents such an actor. | principal is an HTTP resource that represents such an actor. | |||
principal collection | ||||
A "principal collection" is a group of principals, and is | ||||
represented in this protocol by a WebDAV collection containing HTTP | ||||
resources that represent principals, and principal collections. | ||||
privilege | privilege | |||
A "privilege" controls access to a particular set of HTTP | A "privilege" controls access to a particular set of HTTP operations | |||
operations on a resource. | on a resource. | |||
aggregate privilege | aggregate privilege | |||
An "aggregate privilege " is a privilege that comprises a set | An "aggregate privilege" is a privilege that contains a set of other | |||
of other privileges. | privileges. | |||
abstract privilege | ||||
Clemm, Hopkins, Sedlar, Whitehead [Page 4] | ||||
The modifier "abstract", when applied to an atomic or aggregate | ||||
privilege, means the privilege cannot be set in an access control | ||||
element (ace). | ||||
access control list (acl) | access control list (acl) | |||
An "acl " is a list of access control elements that define | An "acl" is a list of access control elements that define access | |||
access control to a particular resource. | control to a particular resource. | |||
access control element (ace) | access control element (ace) | |||
An "ace " either grants or denies a particular set of | An "ace" either grants or denies a particular set of (non-abstract) | |||
privileges for a particular principal. | privileges for a particular principal. | |||
inherited ace | inherited ace | |||
An "inherited ace " is an ace that is shared from the acl of | An "inherited ace" is an ace that is shared from the acl of another | |||
another resource. | resource. | |||
1.2 Notational Conventions | 1.2 Notational Conventions | |||
The augmented BNF used by this document to describe protocol | The augmented BNF used by this document to describe protocol | |||
elements is described in Section 2.1 of [RFC2616]. Because | elements is described in Section 2.1 of [RFC2616]. Because this | |||
this augmented BNF uses the basic production rules provided in | augmented BNF uses the basic production rules provided in Section | |||
Section 2.2 of [RFC2616], those rules apply to this document | 2.2 of [RFC2616], those rules apply to this document as well. | |||
as well. | ||||
The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL | The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", | |||
NOT", "SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY", and | "SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY", and "OPTIONAL" in this | |||
"OPTIONAL" in this document are to be interpreted as described | document are to be interpreted as described in [RFC2119]. | |||
in [RFC2119]. | ||||
2 PRINCIPALS | 2 PRINCIPALS | |||
A principal is an HTTP resource that represents a distinct | A principal is an HTTP resource that represents a distinct human or | |||
human or computational actor that initiates access to network | computational actor that initiates access to network resources. On | |||
resources. On many implementations, users and groups are | many implementations, users and groups are represented as | |||
represented as principals; other types of principals are also | principals; other types of principals are also possible. Although | |||
possible. Although an implementation MAY support PROPFIND | an implementation MAY support PROPFIND and PROPPATCH to access and | |||
and PROPPATCH to access and modify information about a | modify information about a principal, it is not required to do so. | |||
principal, it is not required to do so. | ||||
Clemm, Hopkins, Sedlar, Whitehead [Page 4] | A principal resource may or may not be a collection. A collection | |||
A principal resource may or may not be a collection. A | principal may only contain other principals (not other types of | |||
collection principal may only contain other principals (not | resources). Servers that support aggregation of principals (e.g. | |||
other types of resources). Servers that support aggregation | groups of users or other groups) MUST manifest them as collection | |||
of principals (e.g. groups of users or other groups) MUST | principals. The WebDAV methods for examining and maintaining | |||
manifest them as collection principals. The WebDAV methods | collections (e.g. DELETE, PROPFIND) MAY be used to maintain | |||
for examining and maintaining collections (e.g. DELETE, | collection principals. Membership in a collection principal is | |||
PROPFIND) MAY be used to maintain collection principals. | recursive, so a principal in a collection principal GRPA contained | |||
Membership in a collection principal is recursive, so a | by collection principal GRPB is a member of both GRPA and GRPB. | |||
principal in a collection principal GRPA contained by | Implementations not supporting recursive membership in principal | |||
collection principal GRPB is a member of both GRPA and GRPB. | collections can return an error if the client attempts to bind | |||
Implementations not supporting recursive membership in | collection principals into other collection principals. | |||
principal collections can return an error if the client | ||||
attempts to bind collection principals into other collection | ||||
principals. | ||||
3 PRIVILEGES | 3 PRIVILEGES | |||
Ability to perform a given method on a resource SHOULD be | Ability to perform a given method on a resource SHOULD be controlled | |||
controlled by one or more privileges. Authors of protocol | by one or more privileges. Authors of protocol extensions that | |||
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 SHOULD be denied any HTTP access | ||||
to that resource. | ||||
Privileges may be aggregates of other privileges. If a | Clemm, Hopkins, Sedlar, Whitehead [Page 5] | |||
principal is granted or denied an aggregate privilege, it is | define new HTTP methods SHOULD specify which privileges (by defining | |||
semantically equivalent to granting or denying each of the | new privileges, or mapping to ones below) are required to perform | |||
aggregated privileges individually. For example, an | the method. A principal with no privileges to a resource SHOULD be | |||
implementation may define add-member and remove-member | denied any HTTP access to that resource. | |||
privileges that control the ability to add and remove an | ||||
internal member of a collection. Since these privileges | ||||
control the ability to update the state of a collection, these | ||||
privileges would be aggregated by the DAV:write privilege on a | ||||
collection, and granting the DAV:write privilege on a | ||||
collection would also grant the add-member and remove-member | ||||
privileges. | ||||
The set of privileges that apply to a particular resource may | Privileges may be containers of other privileges, in which case they | |||
vary with the DAV:resourcetype of the resource, as well as | are termed aggregate privileges. If a principal is granted or | |||
between different server implementations. To promote | denied an aggregate privilege, it is semantically equivalent to | |||
interoperability, however, WebDAV defines a set of well-known | granting or denying each of the aggregated privileges individually. | |||
privileges (e.g. DAV:read and DAV:write), which can at least | For example, an implementation may define add-member and remove- | |||
be used to classify the other privileges defined on a | member privileges that control the ability to add and remove an | |||
particular resource. | internal member of a collection. Since these privileges control the | |||
ability to update the state of a collection, these privileges would | ||||
be aggregated by the DAV:write privilege on a collection, and | ||||
granting the DAV:write privilege on a collection would also grant | ||||
the add-member and remove-member privileges. | ||||
Privileges may have the quality of being abstract, in which case | ||||
they cannot be set in an ACE. Aggregate and atomic 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 | ||||
and classify non-abstract privileges. | ||||
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, WebDAV defines a set of well-known privileges (e.g. | ||||
DAV:read and DAV:write), which can at least be used to classify the | ||||
other privileges defined on a particular resource. | ||||
3.1 DAV:read Privilege | 3.1 DAV:read Privilege | |||
The read privilege controls methods that return information | The read privilege controls methods that return information about | |||
about the state of the resource, including the resource's | the state of the resource, including the resource's properties. | |||
properties. Affected methods include GET and PROPFIND. The | Affected methods include GET and PROPFIND. Additionally, the read | |||
read privilege does not control the OPTIONS method since the | privilege MAY control the OPTIONS method. | |||
OPTIONS method returns capabilities rather than state. | ||||
<!ELEMENT read EMPTY> | ||||
Clemm, Hopkins, Sedlar, Whitehead [Page 5] | ||||
3.2 DAV:write Privilege | 3.2 DAV:write Privilege | |||
The write privilege controls methods that modify the state of | The write privilege controls methods that modify the state of the | |||
the resource, such as PUT and PROPPATCH. Note that state | resource, such as PUT and PROPPATCH. Note that state modification | |||
modification is also controlled via locking (see section 5.3 | ||||
of [WEBDAV]), so effective write access requires that both | Clemm, Hopkins, Sedlar, Whitehead [Page 6] | |||
write privileges and write locking requirements are satisfied. | is also controlled via locking (see section 5.3 of [WEBDAV]), so | |||
effective write access requires that both write privileges and write | ||||
locking requirements are satisfied. | ||||
<!ELEMENT write EMPTY> | ||||
3.3 DAV:read-acl Privilege | 3.3 DAV:read-acl Privilege | |||
The DAV:read-acl privilege controls the use of PROPFIND to | The DAV:read-acl privilege controls the use of PROPFIND to retrieve | |||
retrieve the DAV:acl, and DAV:current-user-privilege-set | the DAV:acl, and DAV:current-user-privilege-set properties of the | |||
properties of the resource. | resource. | |||
<!ELEMENT read-acl EMPTY> | ||||
3.4 DAV:write-acl Privilege | 3.4 DAV:write-acl Privilege | |||
The DAV:write-acl privilege controls use of the ACL method to | The DAV:write-acl privilege controls use of the ACL method to modify | |||
modify the DAV:acl property of the resource. | the DAV:acl property of the resource. | |||
<!ELEMENT write-acl EMPTY> | ||||
3.5 DAV:all Privilege | 3.5 DAV:all Privilege | |||
The DAV:all privilege controls all privileges on the resource. | DAV:all is an aggregate privilege that contains all privileges on | |||
the resource. | ||||
<!ELEMENT all EMPTY> | ||||
4 PRINCIPAL PROPERTIES | 4 PRINCIPAL PROPERTIES | |||
Principals are manifested to clients as an HTTP resource, | Principals are manifested to clients as an HTTP resource, identified | |||
identified by a URL. A principal MUST have a DAV:displayname | by a URL. A principal MUST have a DAV:displayname property. This | |||
property. This protocol defines the following additional | protocol defines the following additional properties for a | |||
properties for a principal. | principal. | |||
4.1 DAV:is-principal | 4.1 DAV:is-principal | |||
This property indicates whether this resource is a principal. | This property indicates whether this resource is a principal. A | |||
A resource MUST have a non-empty DAV:is-principal property if | resource MUST have a non-empty DAV:is-principal property if and only | |||
and only if it is a principal resource. (Note: If we can | if it is a principal resource. (Note: If we can just add a | |||
just add a DAV:principal element to the DAV:resourcetype | DAV:principal element to the DAV:resourcetype property, then we do | |||
property, then we do not need a DAV:is-principal property.) | not need a DAV:is-principal property.) | |||
<!ELEMENT is-principal (#PCDATA)> | <!ELEMENT is-principal (#PCDATA)> | |||
PCDATA value: any non-empty value ("T" is suggested) | PCDATA value: any non-empty value ("T" is suggested) | |||
4.2 DAV:authentication-id | 4.2 DAV:authentication-id | |||
A property containing the name used to authenticate this | A property containing the name used to authenticate this principal | |||
principal (typically typed into a login prompt/dialog). | (typically typed into a login prompt/dialog). | |||
<!ELEMENT authentication-id (#PCDATA)> | <!ELEMENT authentication-id (#PCDATA)> | |||
PCDATA value: any string | PCDATA value: any string | |||
Clemm, Hopkins, Sedlar, Whitehead [Page 6] | Clemm, Hopkins, Sedlar, Whitehead [Page 7] | |||
5 ACCESS CONTROL PROPERTIES | 5 ACCESS CONTROL PROPERTIES | |||
This specification defines a number of new properties for | This specification defines a number of new properties for WebDAV | |||
WebDAV resources. Access control properties may be retrieved | resources. Access control properties may be retrieved just like | |||
just like other WebDAV properties, using the PROPFIND method. | other WebDAV properties, using the PROPFIND method. Some access | |||
Some access control properties (such as DAV:owner) MAY be | control properties (such as DAV:owner) MAY be updated with the | |||
updated with the PROPPATCH method. | PROPPATCH method. | |||
HTTP resources that support the WebDAV Access Control Protocol | HTTP resources that support the WebDAV Access Control Protocol MUST | |||
MUST contain the following properties: | contain the following properties: | |||
5.1 DAV:owner | 5.1 DAV:owner | |||
This property identifies a particular principal as being the | This property identifies a particular principal as being the "owner" | |||
"owner" of the resource. | of the resource. | |||
<!ELEMENT owner (href prop?)> | <!ELEMENT owner (href prop?)> | |||
<!ELEMENT prop (see [RFC2518], section 12.11)> | <!ELEMENT prop (see [RFC2518], section 12.11)> | |||
An implementation MAY include a list of selected properties of | An implementation MAY include a list of selected properties of that | |||
that principal resource. Which properties (if any) are | principal resource. Which properties (if any) are included is | |||
included is implementation defined. An implementation MAY | implementation defined. An implementation MAY allow the use of | |||
allow the use of PROPPATCH to update the DAV:owner field. | PROPPATCH to update the DAV:owner field. | |||
5.2 DAV:supported-privilege-set | 5.2 DAV:supported-privilege-set | |||
This is a read-only property that identifies the privileges | This is a read-only property that identifies the privileges defined | |||
defined for the resource. | for the resource. | |||
<!ELEMENT supported-privilege-set (supported-privilege*)> | <!ELEMENT supported-privilege-set (supported-privilege*)> | |||
Each privilege appears as an XML element, where aggregate | Each privilege appears as an XML element, where aggregate privileges | |||
privileges list as sub-elements all of the privileges that | list as sub-elements all of the privileges that they aggregate. | |||
they aggregate. | ||||
<!ELEMENT supported-privilege | <!ELEMENT supported-privilege | |||
(privilege, abstract?, description, supported-privilege*)> | (privilege, abstract?, description, supported-privilege*)> | |||
<!ELEMENT privilege ANY> | <!ELEMENT privilege ANY> | |||
An abstract privilege is used to classify the non-abstract | An abstract privilege of a resource MUST NOT be used in an ACE for | |||
privilege elements. An abstract privilege of a resource MUST | that resource. Servers MUST fail an attempt to set an abstract | |||
NOT be used in an ACE for that resource. Servers MUST fail an | privilege. | |||
attempt to set an abstract privilege. | ||||
<!ELEMENT abstract EMPTY> | <!ELEMENT abstract EMPTY> | |||
A description is a human-readable description of what this | A description is a human-readable description of what this privilege | |||
privilege controls access to. | controls access to. | |||
<!ELEMENT description #PCDATA> | <!ELEMENT description #PCDATA> | |||
It is envisioned that a WebDAV ACL-aware administrative client | It is envisioned that a WebDAV ACL-aware administrative client would | |||
would list the supported privileges in a dialog box, and allow | list the supported privileges in a dialog box, and allow the user to | |||
the user to choose non-abstract privileges to apply in an ACE. | choose non-abstract privileges to apply in an ACE. The privileges | |||
The privileges tree is useful programmatically to map well- | 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 | ||||
Clemm, Hopkins, Sedlar, Whitehead [Page 7] | Clemm, Hopkins, Sedlar, Whitehead [Page 8] | |||
known privileges (defined by WebDAV or other standards groups) | privilege tree also serves to hide complexity in implementations | |||
into privileges that are supported by any particular server | allowing large number of privileges to be defined by displaying | |||
implementation. The privilege tree also serves to hide | aggregates to the user. | |||
complexity in implementations allowing large number of | ||||
privileges to be defined by displaying aggregates to the user. | ||||
5.3 DAV:current-user-privilege-set | 5.3 DAV:current-user-privilege-set | |||
This is a read-only property containing a list of privileges | DAV:current-user-privilege-set is a read-only property containing | |||
granted to the currently authenticated HTTP user. The current | the exact set of privileges (as computed by the server) granted to | |||
user has no access privileges to an object protected by an ACL | the currently authenticated HTTP user. A user-agent can use the | |||
unless that user matches one or more of the principals | value of this property to adjust its user interface to make actions | |||
specified in the ACEs. | inaccessible (e.g, by graying out a menu item or button) for which | |||
the current principal does not have permission. This is particularly | ||||
useful for an access control user interface, which can be | ||||
constructed without knowing the ACE combining semantics of the | ||||
server. This property is also useful for determine what operations | ||||
can be performed by the current principal, without having to | ||||
actually execute an operation. | ||||
<!ELEMENT current-user-privilege-set (privilege*)> | <!ELEMENT current-user-privilege-set (privilege*)> | |||
<!ELEMENT privilege ANY> | <!ELEMENT privilege ANY> | |||
Each element in the DAV:current-user-privilege-set property | If the current user is granted a specific privilege, that privilege | |||
MUST identify a privilege from the DAV:supported-privilege-set | must belong to the set of privileges that may be set on this | |||
property. | resource. Therefore, each element in the DAV:current-user-privilege- | |||
set property MUST identify a privilege from the DAV:supported- | ||||
privilege-set property. | ||||
5.4 DAV:acl | 5.4 DAV:acl | |||
This property specifies the list of access control entries | This property specifies the list of access control entries (ACEs), | |||
(ACEs), which define what principals are to get what | which define what principals are to get what privileges for this | |||
privileges for this resource. | resource. | |||
<!ELEMENT acl (ace*)> | <!ELEMENT acl (ace*)> | |||
Each DAV:ace element specifies the set of privileges to be | Each DAV:ace element specifies the set of privileges to be either | |||
either granted or denied to a single principal. If the | granted or denied to a single principal. If the DAV:acl property is | |||
DAV:acl property is empty, no principal is granted any | empty, no principal is granted any privilege. | |||
privilege. | ||||
<!ELEMENT ace (principal, (grant|deny), protected?, | <!ELEMENT ace (principal, (grant|deny), protected?, inherited?)> | |||
inherited?)> | ||||
An attempt to update the DAV:acl property with a PROPPATCH | An attempt to update the DAV:acl property with a PROPPATCH MUST | |||
MUST fail. | fail. | |||
5.4.1 ACE Principal | 5.4.1 ACE Principal | |||
The DAV:principal element identifies the principal to which | The DAV:principal element identifies the principal to which this ACE | |||
this ACE applies. | applies. | |||
<!ELEMENT principal ((href, prop?) | <!ELEMENT principal ((href, prop?) | |||
| all | authenticated | unauthenticated | | all | authenticated | unauthenticated | |||
| property | self)> | | property | self)> | |||
The current user matches DAV:href only if that user is | The current user matches DAV:href only if that user is authenticated | |||
authenticated as being (or being a member of) the principal | as being (or being a member of) the principal identified by the URL | |||
identified by the URL contained by that DAV:href. An | ||||
implementation MAY include a DAV:prop element after the | ||||
DAV:href element, containing a list of selected properties of | ||||
that principal resource. Which properties (if any) are | ||||
Clemm, Hopkins, Sedlar, Whitehead [Page 8] | Clemm, Hopkins, Sedlar, Whitehead [Page 9] | |||
included in the DAV:prop element is implementation defined. | contained by that DAV:href. An implementation MAY include a | |||
The DAV:prop element is primarily intended for implementations | DAV:prop element after the DAV:href element, containing a list of | |||
that do not support PROPFIND requests on the principal URL. | selected properties of that principal resource. Which properties | |||
(if any) are included in the DAV:prop element is implementation | ||||
defined. The DAV:prop element is primarily intended for | ||||
implementations that do not support PROPFIND requests on the | ||||
principal URL. | ||||
<!ELEMENT prop (see [RFC2518], section 12.11)> | <!ELEMENT prop (see [RFC2518], section 12.11)> | |||
The current user always matches DAV:all. | The current user always matches DAV:all. | |||
<!ELEMENT all EMPTY> | <!ELEMENT all EMPTY> | |||
The current user matches DAV:authenticated only if | The current user matches DAV:authenticated only if authenticated. | |||
authenticated. | ||||
<!ELEMENT authenticated EMPTY> | <!ELEMENT authenticated EMPTY> | |||
The current user matches DAV:unauthenticated only if not | The current user matches DAV:unauthenticated only if not | |||
authenticated. | authenticated. | |||
<!ELEMENT unauthenticated EMPTY> | <!ELEMENT unauthenticated EMPTY> | |||
DAV:all is the union of DAV:authenticated, and | DAV:all is the union of DAV:authenticated, and DAV:unauthenticated. | |||
DAV:unauthenticated. For a given request, the user matches | For a given request, the user matches either DAV:authenticated, or | |||
either DAV:authenticated, or DAV:unauthenticated, but not | DAV:unauthenticated, but not both. | |||
both. | ||||
The current user matches a DAV:property principal in a DAV:acl | The current user matches a DAV:property principal in a DAV:acl | |||
property of a resource only if the identified property of that | property of a resource only if the identified property of that | |||
resource contains a DAV:href that identifies a principal, and | resource contains a DAV:href that identifies a principal, and the | |||
the current user is authenticated as being (or being a member | current user is authenticated as being (or being a member of) that | |||
of) that principal. For example, if the DAV:property element | principal. For example, if the DAV:property element contained | |||
contained <DAV:owner/>, the current user would match the | <DAV:owner/>, the current user would match the DAV:property | |||
DAV:property principal only if the current user is | principal only if the current user is authenticated as matching the | |||
authenticated as matching the principal identified by the | principal identified by the DAV:owner property of the resource. | |||
DAV:owner property of the resource. | ||||
<!ELEMENT property ANY> | <!ELEMENT property ANY> | |||
The current user matches DAV:self in a DAV:acl property of the | The current user matches DAV:self in a DAV:acl property of the | |||
resource only if that resource is a principal object and the | resource only if that resource is a principal object and the current | |||
current user is authenticated as being that principal. | user is authenticated as being that principal. | |||
<!ELEMENT self EMPTY> | <!ELEMENT self EMPTY> | |||
5.4.2 ACE Grant and Deny | 5.4.2 ACE Grant and Deny | |||
Each DAV:grant or DAV:deny element specifies the set of | Each DAV:grant or DAV:deny element specifies the set of privileges | |||
privileges to be either granted or denied to the specified | to be either granted or denied to the specified principal. A | |||
principal. A DAV:grant or DAV:deny element of the DAV:acl of | DAV:grant or DAV:deny element of the DAV:acl of a resource MUST only | |||
a resource MUST only contain elements specified in the | contain elements specified in the DAV:supported-privilege-set of | |||
DAV:supported-privilege-set of that resource. | that resource. | |||
<!ELEMENT grant (privilege+)> | <!ELEMENT grant (privilege+)> | |||
<!ELEMENT deny (privilege+)> | <!ELEMENT deny (privilege+)> | |||
<!ELEMENT privilege ANY> | <!ELEMENT privilege ANY> | |||
Clemm, Hopkins, Sedlar, Whitehead [Page 9] | Clemm, Hopkins, Sedlar, Whitehead [Page 10] | |||
5.4.3 ACE Protection | 5.4.3 ACE Protection | |||
If an ACE contains a DAV:protected element, an ACL request | If an ACE contains a DAV:protected element, an ACL request without | |||
without that ACE MUST fail. | that ACE MUST fail. | |||
<!ELEMENT protected EMPTY> | <!ELEMENT protected EMPTY> | |||
5.4.4 ACE Inheritance | 5.4.4 ACE Inheritance | |||
The presence of a DAV:inherited element indicates that this | The presence of a DAV:inherited element indicates that this ACE is | |||
ACE is inherited from another resource that is identified by | inherited from another resource that is identified by the URL | |||
the URL contained in a DAV:href element. An inherited ACE | contained in a DAV:href element. An inherited ACE cannot be | |||
cannot be modified directly, but instead the ACL on the | modified directly, but instead the ACL on the resource from which it | |||
resource from which it is inherited must be modified. | is inherited must be modified. | |||
Note that ACE inheritance is not the same as ACL | Note that ACE inheritance is not the same as ACL initialization. | |||
initialization. ACL initialization defines the ACL that a | ACL initialization defines the ACL that a newly created resource | |||
newly created resource will use (if not specified). ACE | will use (if not specified). ACE inheritance refers to an ACE that | |||
inheritance refers to an ACE that is logically shared - where | is logically shared - where an update to the resource containing an | |||
an update to the resource containing an ACE will affect the | ACE will affect the ACE of each resource that inherits that ACE. | |||
ACE of each resource that inherits that ACE. The method by | The method by which ACLs are initialized or by which ACEs are | |||
which ACLs are initialized or by which ACEs are inherited is | inherited is not defined by this document. | |||
not defined by this document. | ||||
<!ELEMENT inherited (href)> | <!ELEMENT inherited (href)> | |||
5.5 DAV:acl-semantics | 5.5 DAV:acl-semantics | |||
This is a read-only property that defines the ACL semantics. | This is a read-only property that defines the ACL semantics. These | |||
These semantics define how multiple ACEs that match the | semantics define how multiple ACEs that match the current user are | |||
current user are combined, what are the constraints on how | combined, what are the constraints on how ACEs can be ordered, and | |||
ACEs can be ordered, and which principals must have an ACE. | which principals must have an ACE. | |||
Since it is not practical to require all implementations to | Since it is not practical to require all implementations to use the | |||
use the same ACL semantics, the DAV:acl-semantics property is | same ACL semantics, the DAV:acl-semantics property is used to | |||
used to identify the ACL semantics for a particular resource. | identify the ACL semantics for a particular resource. The DAV:acl- | |||
The DAV:acl-semantics element is defined in section 6. | semantics element is defined in section 6. | |||
5.6 DAV:principal-collection-set | 5.6 DAV:principal-collection-set | |||
Often a versioning implementation constrains where a principal | This read-only property contains zero, one, or more URLs that | |||
can be located in the URL space. The DAV:principal- | identify a collection principal. It is expected that implementations | |||
collection-set enumerates which collections may contain | of this protocol will typically employ a relatively small number of | |||
principals. | locations in the URL namespace for principal, and collection | |||
principals. In cases where this assumption holds, the DAV:principal- | ||||
collection-set property will contain a small set of URLs identifying | ||||
the top of collection hierarchy containing multiple principals and | ||||
collection principals. An access control protocol user agent could | ||||
use the contents of DAV:principal-collection-set to, for example, | ||||
query 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. | ||||
Clemm, Hopkins, Sedlar, Whitehead [Page 11] | ||||
<!ELEMENT principal-collection-set (href*)> | <!ELEMENT principal-collection-set (href*)> | |||
Since different servers can control different parts of the URL | Since different servers can control different parts of the URL | |||
namespace, different resources on the same host MAY have | namespace, different resources on the same host MAY have different | |||
different DAV:principal-collection-set values . The | DAV:principal-collection-set values. The collections specified in | |||
collections specified in the DAV:principal-collection-set MAY | the DAV:principal-collection-set MAY be located on different hosts | |||
be located on different hosts from the resource. | from the resource. The URLs in DAV:principal-collection-set are not | |||
limited to http scheme URLs, and can, for example, be ldap scheme | ||||
URLs. For security and scalability reasons, a server MAY report only | ||||
a subset of the entire set of known collection principals, and | ||||
therefore clients should not assume they have retrieved an | ||||
exhaustive listing. Additionally, a server MAY elect to report none | ||||
of the collection principals it knows about. | ||||
Clemm, Hopkins, Sedlar, Whitehead [Page 10] | ||||
5.7 Example: PROPFIND to retrieve access control properties | 5.7 Example: PROPFIND to retrieve access control properties | |||
The following example shows how access control information can | The following example shows how access control information can be | |||
be retrieved by using the PROPFIND method to fetch the values | retrieved by using the PROPFIND method to fetch the values of the | |||
of the DAV:owner, DAV:supported-privilege-set, DAV:current- | DAV:owner, DAV:supported-privilege-set, DAV:current-user-privilege- | |||
user-privilege-set, and DAV:acl properties. | set, and DAV:acl properties. | |||
>> Request << | >> Request << | |||
PROPFIND /top/container/ HTTP/1.1 | PROPFIND /top/container/ HTTP/1.1 | |||
Host: www.foo.org | Host: www.foo.org | |||
Content-type: text/xml; charset="utf-8" | Content-type: text/xml; charset="utf-8" | |||
Content-Length: xxx | Content-Length: xxx | |||
Depth: 0 | Depth: 0 | |||
Authorization: Digest username="ejw", | Authorization: Digest username="ejw", | |||
realm="users@foo.org", nonce="...", | realm="users@foo.org", nonce="...", | |||
uri="/top/container/", response="...", opaque="..." | uri="/top/container/", response="...", opaque="..." | |||
<?xml version="1.0" encoding="utf-8"> | <?xml version="1.0" encoding="utf-8" ?> | |||
<D:propfind xmlns:D="DAV:"> | <D:propfind xmlns:D="DAV:"> | |||
<D:owner/> | <D:owner/> | |||
<D:supported-privilege-set/> | <D:supported-privilege-set/> | |||
<D:current-user-privilege-set/> | <D:current-user-privilege-set/> | |||
<D:acl/> | <D:acl/> | |||
</D:propfind> | </D:propfind> | |||
>> Response << | >> Response << | |||
HTTP/1.1 207 Multi-Status | HTTP/1.1 207 Multi-Status | |||
Content-Type: text/xml; charset="utf-8" | Content-Type: text/xml; charset="utf-8" | |||
Content-Length: xxx | Content-Length: xxx | |||
<?xml version="1.0" encoding="utf-8" ?> | <?xml version="1.0" encoding="utf-8" ?> | |||
<D:multistatus | <D:multistatus | |||
xmlns:D="DAV" | xmlns:D="DAV:" | |||
xmlns:A="http://www.acl.org/"> <D:response> <D:propstat> | xmlns:A="http://www.acl.org/"> <D:response> <D:propstat> | |||
<D:status>HTTP/1.1 200 OK</D:status> | <D:status>HTTP/1.1 200 OK</D:status> | |||
<D:prop> | <D:prop> | |||
<D:owner> | <D:owner> | |||
<D:href>http://www.foo.org/users/gclemm</D:href></D:owner> | <D:href>http://www.foo.org/users/gclemm</D:href></D:owner> | |||
Clemm, Hopkins, Sedlar, Whitehead [Page 12] | ||||
<D:supported-privilege-set> | <D:supported-privilege-set> | |||
<D:supported-privilege> | <D:supported-privilege> | |||
<D:privilege> <D:all/> </D:privilege> | <D:privilege> <D:all/> </D:privilege> | |||
<D:abstract/> | <D:abstract/> | |||
<D:description>Any operation</D:description> | <D:description>Any operation</D:description> | |||
<D:supported-privilege> | <D:supported-privilege> | |||
<D:privilege> </D:read> </D:privilege> | <D:privilege> <D:read/> </D:privilege> | |||
<D:description>Read any object</D:description> | <D:description>Read any object</D:description> | |||
</D:supported-privilege> | </D:supported-privilege> | |||
<D:supported-privilege> | <D:supported-privilege> | |||
<D:privilege> <D:write/> </D:privilege> | <D:privilege> <D:write/> </D:privilege> | |||
<D:abstract/> | <D:abstract/> | |||
<D:description>Write any object</D:description> | <D:description>Write any object</D:description> | |||
<D:supported-privilege> | <D:supported-privilege> | |||
<D:privilege> <A:create/> </D:privilege> | <D:privilege> <A:create/> </D:privilege> | |||
Clemm, Hopkins, Sedlar, Whitehead [Page 11] | ||||
<D:description>Create an object</D:description> | <D:description>Create an object</D:description> | |||
</D:supported-privilege> | </D:supported-privilege> | |||
<D:supported-privilege> | <D:supported-privilege> | |||
<D:privilege> <A:update> </D:privilege> | <D:privilege> <A:update/> </D:privilege> | |||
<D:description>Update an object</D:description> | <D:description>Update an object</D:description> | |||
</D:supported-privilege> | </D:supported-privilege> | |||
<D:supported-privilege> | <D:supported-privilege> | |||
<D:privilege> <A:delete> </D:privilege> | <D:privilege> <A:delete/> </D:privilege> | |||
<D:description>Delete an object</D:description> | <D:description>Delete an object</D:description> | |||
</D:supported-privilege> | </D:supported-privilege> | |||
</D:supported-privilege> | </D:supported-privilege> | |||
<D:supported-privilege> | <D:supported-privilege> | |||
<D:privilege> <D:read-acl/> </D:privilege> | <D:privilege> <D:read-acl/> </D:privilege> | |||
<D:description>Read the ACL</D:privilege> | <D:description>Read the ACL</D:description> | |||
</D:supported-privilege> | </D:supported-privilege> | |||
<D:supported-privilege> | <D:supported-privilege> | |||
<D:privilege> <D:write-acl/> </D:privilege> | <D:privilege> <D:write-acl/> </D:privilege> | |||
<D:description>Write the ACL</D:privilege> | <D:description>Write the ACL</D:description> | |||
</D:supported-privilege> | </D:supported-privilege> | |||
</D:supported-privilege> | </D:supported-privilege> | |||
</D:supported-privilege-set> | </D:supported-privilege-set> | |||
<D:current-user-privilege-set> | <D:current-user-privilege-set> | |||
<D:privilege> <D:read/> </D:privilege> | <D:privilege> <D:read/> </D:privilege> | |||
<D:privilege> <D:read-acl/> </D:privilege> | <D:privilege> <D:read-acl/> </D:privilege> | |||
</D:current-user-privilege-set> | </D:current-user-privilege-set> | |||
<D:acl> | <D:acl> | |||
<D:ace> | <D:ace> | |||
<D:principal> | <D:principal> | |||
skipping to change at line 646 | skipping to change at page 27, line ? | |||
<D:authentication-id>esedlar</D:authentication-id> | <D:authentication-id>esedlar</D:authentication-id> | |||
<D:displayname>Eric Sedlar</D:displayname> | <D:displayname>Eric Sedlar</D:displayname> | |||
</D:prop> </D:principal> | </D:prop> </D:principal> | |||
<D:grant> | <D:grant> | |||
<D:privilege> <D:read/> </D:privilege> | <D:privilege> <D:read/> </D:privilege> | |||
<D:privilege> <D:write/> </D:privilege> | <D:privilege> <D:write/> </D:privilege> | |||
<D:privilege> <D:read-acl/> </D:privilege></D:grant> | <D:privilege> <D:read-acl/> </D:privilege></D:grant> | |||
</D:ace> | </D:ace> | |||
<D:ace> | <D:ace> | |||
<D:principal> | <D:principal> | |||
<D:href>http://www.foo.org/groups/marketing/</d:href> | ||||
Clemm, Hopkins, Sedlar, Whitehead [Page 13] | ||||
<D:href>http://www.foo.org/groups/marketing/</D:href> | ||||
</D:principal> | </D:principal> | |||
<D:deny> | <D:deny> | |||
<D:privilege> <D:read/> </D:privilege> </D:deny> | <D:privilege> <D:read/> </D:privilege> </D:deny> | |||
<D:ace/> | </D:ace> | |||
<D:ace> | <D:ace> | |||
<D:principal> | <D:principal> | |||
<D:property> <D:owner/> </D:property> </D:principal> | <D:property> <D:owner/> </D:property> </D:principal> | |||
<D:grant> | <D:grant> | |||
<D:privilege> <D:read-acl/> </D:privilege> | <D:privilege> <D:read-acl/> </D:privilege> | |||
<D:privilege> <D:write-acl/> </D:privilege></D:grant> | <D:privilege> <D:write-acl/> </D:privilege></D:grant> | |||
<D:ace/> | </D:ace> | |||
<D:ace> | <D:ace> | |||
Clemm, Hopkins, Sedlar, Whitehead [Page 12] | ||||
<D:principal> <D:all/> </D:principal> | <D:principal> <D:all/> </D:principal> | |||
<D:grant> | <D:grant> | |||
<D:privilege> <D:read/> </D:privilege> </D:grant> | <D:privilege> <D:read/> </D:privilege> </D:grant> | |||
<D:inherited> | <D:inherited> | |||
<D:href>http://www.foo.org/top/</D:href></D:inheritied> | <D:href>http://www.foo.org/top/</D:href> </D:inherited> | |||
</D:ace> </D:acl> | </D:ace> </D:acl> | |||
</D:prop> | </D:prop> | |||
</D:propstat> </D:response> </D:multistatus> | </D:propstat> </D:response> </D:multistatus> | |||
The value of the DAV:owner property is a single DAV:href XML | The value of the DAV:owner property is a single DAV:href XML element | |||
element containing the URL of the principal that owns this | containing the URL of the principal that owns this resource. | |||
resource. | ||||
The value of the DAV:supported-privilege-set property is a | The value of the DAV:supported-privilege-set property is a tree of | |||
tree of supported privileges: | supported privileges: | |||
DAV:acl (abstract) | DAV:acl (aggregate, abstract) | |||
| | | | |||
+-- DAV:read | +-- DAV:read | |||
+-- DAV:write (abstract) | +-- DAV:write (aggregate, abstract) | |||
| | | | |||
+-- http://www.acl.org/create | +-- http://www.acl.org/create | |||
+-- http://www.acl.org/update | +-- http://www.acl.org/update | |||
+-- http://www.acl.org/delete | +-- http://www.acl.org/delete | |||
+-- DAV:read-acl | +-- DAV:read-acl | |||
+-- DAV:write-acl | +-- DAV:write-acl | |||
The DAV:current-user-privilege-set property contains two | The DAV:current-user-privilege-set property contains two privileges, | |||
privileges, DAV:read, and DAV:read-acl. This indicates that | DAV:read, and DAV:read-acl. This indicates that the current | |||
the current authenticated user only has the ability to read | authenticated user only has the ability to read the resource, and | |||
the resource, and read the DAV:acl property on the resource. | read the DAV:acl property on the resource. | |||
The DAV:acl property contains a set of four ACEs: | The DAV:acl property contains a set of four ACEs: | |||
ACE #1: The principal identified by the URL | ACE #1: The principal identified by the URL | |||
http://www.foo.org/users/esedlar is granted the DAV:read, | http://www.foo.org/users/esedlar is granted the DAV:read, DAV:write, | |||
DAV:write, and DAV:read-acl privileges. | and DAV:read-acl privileges. | |||
ACE #2: The principals identified by the URL | ACE #2: The principals identified by the URL | |||
http://www.foo.org/groups/marketing/ are denied the DAV:read | http://www.foo.org/groups/marketing/ are denied the DAV:read | |||
privilege. In this example, the principal URL identifies a | privilege. In this example, the principal URL identifies a group, | |||
group, which is represented by a collection principal. | which is represented by a collection principal. | |||
Clemm, Hopkins, Sedlar, Whitehead [Page 14] | ||||
ACE #3: In this ACE, the principal is a property principal, | ACE #3: In this ACE, the principal is a property principal, | |||
specifically the DAV:owner property. When evaluating this ACE, | specifically the DAV:owner property. When evaluating this ACE, the | |||
the value of the DAV:owner property is retrieved, and is | value of the DAV:owner property is retrieved, and is examined to see | |||
examined to see if it contains a DAV:href XML element. If so, | if it contains a DAV:href XML element. If so, the URL within the | |||
the URL within the DAV:href element is read, and identifies a | DAV:href element is read, and identifies a principal. In this ACE, | |||
principal. In this ACE, the owner is granted DAV:read-acl, and | the owner is granted DAV:read-acl, and DAV:write-acl privileges. | |||
DAV:write-acl privileges. | ||||
ACE #4: This ACE grants the DAV:all principal (all users) the | ACE #4: This ACE grants the DAV:all principal (all users) the | |||
DAV:read privilege. This ACE is inherited from the resource | DAV:read privilege. This ACE is inherited from the resource | |||
http://www.foo.org/top/, the parent collection of this resource. | ||||
Clemm, Hopkins, Sedlar, Whitehead [Page 13] | ||||
http://www.foo.org/top/, the parent collection of this | ||||
resource. | ||||
6 ACL SEMANTICS | 6 ACL SEMANTICS | |||
The ACL semantics define how multiple ACEs that match the | The ACL semantics define how multiple ACEs that match the current | |||
current user are combined, what are the constraints on how | user are combined, what are the constraints on how ACEs can be | |||
ACEs can be ordered, and which principals must have an ACE. | ordered, and which principals must have an ACE. | |||
<!ELEMENT acl-semantics ANY> | <!ELEMENT acl-semantics acl-sem*> | |||
ANY value: zero or more of the ACL semantic elements | ||||
<!ELEMENT acl-sem (ace-combination, ace-ordering, required- | ||||
principal)> | ||||
6.1 ACE Combination | 6.1 ACE Combination | |||
The DAV:ace-combination element defines how privileges from | The DAV:ace-combination element defines how privileges from multiple | |||
multiple ACEs that match the current user will be combined to | ACEs that match the current user will be combined to determine the | |||
determine the access rights for that user. Multiple ACEs may | access privileges for that user. Multiple ACEs may match the same | |||
match the same user because the same principal can appear in | user because the same principal can appear in multiple ACEs, because | |||
multiple ACEs, because multiple principals can identify the | multiple principals can identify the same user, and because one | |||
same user, and because one principal can be a member of | principal can be a member of another principal. | |||
another principal. | ||||
<!ELEMENT ace-combination | <!ELEMENT ace-combination | |||
(first-match | all-grant-before-any-deny | no-deny)> | (first-match | all-grant-before-any-deny | no-deny)> | |||
6.1.1 DAV:first-match ACE Combination | 6.1.1 DAV:first-match ACE Combination | |||
The ACEs are evaluated in the order in which they appear in | The ACEs are evaluated in the order in which they appear in the ACL. | |||
the ACL. If the first ACE that matches the current user does | If the first ACE that matches the current user does not grant all | |||
not grant all the privileges needed for the request, the | the privileges needed for the request, the request MUST fail. | |||
request MUST fail. | ||||
<!ELEMENT first-match EMPTY> | <!ELEMENT first-match EMPTY> | |||
6.1.2 DAV:all-grant-before-any-deny ACE Combination | 6.1.2 DAV:all-grant-before-any-deny ACE Combination | |||
The ACEs are evaluated in the order in which they appear in | The ACEs are evaluated in the order in which they appear in the ACL. | |||
the ACL. If an evaluated ACE denies a privilege needed for | If an evaluated ACE denies a privilege needed for the request, the | |||
the request, the request MUST fail. If all ACEs have been | request MUST fail. If all ACEs have been evaluated without the user | |||
evaluated without the user being granted all privileges needed | being granted all privileges needed for the request, the request | |||
for the request, the request MUST fail. | MUST fail. | |||
<!ELEMENT all-grant-before-any-deny EMPTY> | <!ELEMENT all-grant-before-any-deny EMPTY> | |||
6.1.3 DAV:no-deny ACE Combination | 6.1.3 DAV:no-deny ACE Combination | |||
All ACEs in the ACL are evaluated. An "individual ACE" is one | All ACEs in the ACL are evaluated. An "individual ACE" is one whose | |||
whose principal identifies the current user. A "group ACE" is | principal identifies the current user. A "group ACE" is one whose | |||
one whose principal is a collection that contains a principal | ||||
that identifies the current user. A privilege is granted if | Clemm, Hopkins, Sedlar, Whitehead [Page 15] | |||
it is granted by an individual ACE and not denied by an | principal is a collection that contains a principal that identifies | |||
individual ACE, or if it is granted by a group ACE and not | the current user. A privilege is granted if it is granted by an | |||
denied by an individual or group ACE. A request MUST fail if | individual ACE and not denied by an individual ACE, or if it is | |||
any of its needed privileges are not granted. | granted by a group ACE and not denied by an individual or group ACE. | |||
A request MUST fail if any of its needed privileges are not granted. | ||||
<!ELEMENT no-deny EMPTY> | <!ELEMENT no-deny EMPTY> | |||
Clemm, Hopkins, Sedlar, Whitehead [Page 14] | ||||
6.2 ACE Ordering | 6.2 ACE Ordering | |||
The DAV:ace-ordering element defines a constraint on how the | The DAV:ace-ordering element defines a constraint on how the ACEs | |||
ACEs can be ordered in the ACL. | can be ordered in the ACL. | |||
<!ELEMENT ace-ordering (deny-before-grant)? > | ||||
6.2.1 DAV:deny-before-grant ACE Ordering | 6.2.1 DAV:deny-before-grant ACE Ordering | |||
This element indicates that all deny ACEs must precede all | This element indicates that all deny ACEs must precede all grant | |||
grant ACEs. | ACEs. | |||
<!ELEMENT deny-before-grant EMPTY> | <!ELEMENT deny-before-grant EMPTY> | |||
6.3 Required Principals | 6.3 Required Principals | |||
The required principal elements identify which principals must | The required principal elements identify which principals must have | |||
have an ACE defined in the ACL. | an ACE defined in the ACL. | |||
<!ELEMENT required-principal | <!ELEMENT required-principal | |||
(href | all | authenticated | unauthenticated | property | | (href | all | authenticated | unauthenticated | property | | |||
self)> | self)> | |||
For example, the following element requires that the ACE | For example, the following element requires that the ACE contain a | |||
contain a DAV:owner property ACE: | DAV:owner property ACE: | |||
<D:required-principal xmlns:D="DAV:"> | <D:required-principal xmlns:D="DAV:"> | |||
<D:property> <D:owner/> </D:property> | <D:property> <D:owner/> </D:property> | |||
</D:required-principal> | </D:required-principal> | |||
7 ACCESS CONTROL AND EXISTING METHODS | 7 ACCESS CONTROL AND EXISTING METHODS | |||
This section defines the impact of access control | This section defines the impact of access control functionality on | |||
functionality on existing methods. | existing methods. | |||
7.1 OPTIONS | 7.1 OPTIONS | |||
If the server supports access control, it MUST return "access- | If the server supports access control, it MUST return "access- | |||
control" as a field in the DAV response header from an OPTIONS | control" as a field in the DAV response header from an OPTIONS | |||
request on any resource implemented by that server. | request on any resource implemented by that server. | |||
7.1.1 Example - OPTIONS | 7.1.1 Example - OPTIONS | |||
>>REQUEST | >> REQUEST << | |||
OPTIONS /foo.html HTTP/1.1 | OPTIONS /foo.html HTTP/1.1 | |||
Host: www.webdav.org | Host: www.webdav.org | |||
Content-Length: 0 | Content-Length: 0 | |||
>>RESPONSE | Clemm, Hopkins, Sedlar, Whitehead [Page 16] | |||
>> RESPONSE << | ||||
HTTP/1.1 200 OK | HTTP/1.1 200 OK | |||
DAV: 1, 2, access-control | DAV: 1, 2, access-control | |||
Clemm, Hopkins, Sedlar, Whitehead [Page 15] | ||||
Allow: OPTIONS, GET, PUT, PROPFIND, PROPPATCH, ACL | Allow: OPTIONS, GET, PUT, PROPFIND, PROPPATCH, ACL | |||
In this example, the OPTIONS response indicates that the | In this example, the OPTIONS response indicates that the server | |||
server supports access control and that /foo.html can have its | supports access control and that /foo.html can have its access | |||
access control list modified by the ACL method. | control list modified by the ACL method. | |||
8 ACCESS CONTROL METHODS | 8 ACCESS CONTROL METHODS | |||
8.1 ACL | 8.1 ACL | |||
A DAV:acl property of a resource is modified by the ACL | A DAV:acl property of a resource is modified by the ACL method. A | |||
method. A new DAV:acl value must be written in its entirety, | new DAV:acl value must be written in its entirety, including any | |||
including any inherited ACEs. Unless the DAV:acl property of | inherited ACEs. Unless the DAV:acl property of the resource can be | |||
the resource can be updated to be exactly the value specified | updated to be exactly the value specified in the ACL request, the | |||
in the ACL request, the ACL request MUST fail. If a server | ACL request MUST fail. If a server restricts the set of ACEs | |||
restricts the set of ACEs visible to the current user via the | visible to the current user via the DAV:acl property, then the ACL | |||
DAV:acl property, then the ACL request would only replace the | request would only replace the set of ACEs visible to the current | |||
set of ACEs visible to the current user, and would not affect | user, and would not affect any ACE that was not visible. | |||
any ACE that was not visible. | ||||
In order to avoid overwriting DAV:acl changes by another | In order to avoid overwriting DAV:acl changes by another client, a | |||
client, a client SHOULD acquire a WebDAV lock on the resource | client SHOULD acquire a WebDAV lock on the resource before | |||
before retrieving the DAV:acl property of a resource that it | retrieving the DAV:acl property of a resource that it intends on | |||
intends on updating. | updating. | |||
8.1.1 ACL Preconditions | 8.1.1 ACL Preconditions | |||
An implementation MAY enforce one or more of the following | An implementation MAY enforce one or more of the following | |||
constraints on an ACL request. If the constraint is violated, | constraints on an ACL request. If the constraint is violated, a 403 | |||
a 403 (Forbidden) response MUST be returned and the indicated | (Forbidden) response MUST be returned and the indicated XML element | |||
XML element MUST be returned in the response body. | MUST be returned in the response body. | |||
<DAV:protected/>: An implementation MAY protect an ACE from | <DAV:protected/>: An implementation MAY protect an ACE from | |||
modification or deletion. For example, some implementations | modification or deletion. For example, some implementations | |||
implicitly grant the DAV:owner of a resource DAV:read-acl and | implicitly grant the DAV:owner of a resource DAV:read-acl and | |||
DAV:write-acl privileges, and this cannot be changed by a | DAV:write-acl privileges, and this cannot be changed by a client. | |||
client. | ||||
<DAV:too-many-aces/>: An implementation MAY limit the number | ||||
of ACEs in an ACL. However, ACL-compliant servers MUST | ||||
support at least one ACE granting privileges to a single | ||||
principal, and one ACE granting privileges to a collection | ||||
principal. | ||||
<DAV:non-inherited-must-precede-inherited/>: All non-inherited | <DAV:too-many-aces/>: An implementation MAY limit the number of ACEs | |||
ACEs MUST precede all inherited ACEs. | in an ACL. However, ACL-compliant servers MUST support at least one | |||
ACE granting privileges to a single principal, and one ACE granting | ||||
privileges to a collection principal. | ||||
<DAV:deny-must-precede-grant/>: All non-inherited deny ACEs | <DAV:non-inherited-must-precede-inherited/>: All non-inherited ACEs | |||
MUST precede all non-inherited grant ACEs. | MUST precede all inherited ACEs. | |||
<DAV:acl-requires-lock-token/>: If a resource is locked, the | <DAV:deny-must-precede-grant/>: All non-inherited deny ACEs MUST | |||
lock token MUST be specified in the ACL request. | precede all non-inherited grant ACEs. | |||
Clemm, Hopkins, Sedlar, Whitehead [Page 16] | ||||
8.1.2 Example: the ACL method | 8.1.2 Example: the ACL method | |||
In the following example, user "fielding", authenticated by | In the following example, user "fielding", authenticated by | |||
information in the Authorization header, grants the principal | information in the Authorization header, grants the principal | |||
identified by the URL http://www.foo.org/users/esedlar (i.e., | ||||
the user "esedlar") read and write privileges, grants the | Clemm, Hopkins, Sedlar, Whitehead [Page 17] | |||
owner of the resource read-acl and write-acl privileges, and | identified by the URL http://www.foo.org/users/esedlar (i.e., the | |||
grants everyone read privileges inherited from the parent | user "esedlar") read and write privileges, grants the owner of the | |||
collection http://www.foo.bar/top/. | resource read-acl and write-acl privileges, and grants everyone read | |||
privileges inherited from the parent collection | ||||
http://www.foo.bar/top/. | ||||
>> Request << | >> Request << | |||
ACL /top/container HTTP/1.1 | ACL /top/container/ HTTP/1.1 | |||
Host: www.foo.org | Host: www.foo.org | |||
Content-Type: text/xml; charset="utf-8" | Content-Type: text/xml; charset="utf-8" | |||
Content-Length: xxxx | Content-Length: xxxx | |||
Authorization: Digest username="fielding", | Authorization: Digest username="fielding", | |||
realm="users@foo.org", nonce="...", | realm="users@foo.org", nonce="...", | |||
uri="/top/container/", response="...", opaque="..." | uri="/top/container/", response="...", opaque="..." | |||
<?xml version="1.0" encoding="utf-8" ?> | <?xml version="1.0" encoding="utf-8" ?> | |||
<D:acl xmlns:D="DAV:"> | <D:acl xmlns:D="DAV:"> | |||
<D:ace> | <D:ace> | |||
skipping to change at line 917 | skipping to change at page 27, line ? | |||
<D:grant> | <D:grant> | |||
<D:privilege> <D:read/> </D:privilege> | <D:privilege> <D:read/> </D:privilege> | |||
<D:privilege> <D:write/> </D:privilege> </D:grant> | <D:privilege> <D:write/> </D:privilege> </D:grant> | |||
</D:ace> | </D:ace> | |||
<D:ace> | <D:ace> | |||
<D:principal> | <D:principal> | |||
<D:property> <D:owner/> </D:property> </D:principal> | <D:property> <D:owner/> </D:property> </D:principal> | |||
<D:grant> | <D:grant> | |||
<D:privilege> <D:read-acl/> </D:privilege> | <D:privilege> <D:read-acl/> </D:privilege> | |||
<D:privilege> <D:write-acl/> </D:privilege> </D:grant> | <D:privilege> <D:write-acl/> </D:privilege> </D:grant> | |||
<D:ace/> | </D:ace> | |||
<D:ace> | <D:ace> | |||
<D:principal> <D:all/> </D:principal> | <D:principal> <D:all/> </D:principal> | |||
<D:grant> | <D:grant> | |||
<D:privilege> <D:read/> </D:privilege></D:grant> | <D:privilege> <D:read/> </D:privilege></D:grant> | |||
<D:inherited> | <D:inherited> | |||
<D:href>http://www.foo.org/top/</D:href> </D:inherited> | <D:href>http://www.foo.org/top/</D:href> </D:inherited> | |||
</D:ace> </D:acl> | </D:ace> </D:acl> | |||
>> Response << | >> Response << | |||
HTTP/1.1 200 OK | HTTP/1.1 200 OK | |||
8.1.3Example: ACL method failure | 8.1.3 Example: ACL method failure due to omission of protected ACE | |||
In the following request, user "fielding", authenticated by | In the following request, user "fielding", authenticated by | |||
information in the Authorization header, attempts to grant | information in the Authorization header, attempts to grant the | |||
principal identified by the URL | principal identified by the URL http://www.foo.org/users/esedlar | |||
http://www.foo.org/users/esedlar (i.e., the user "esedlar") | (i.e., the user "esedlar") read privileges, but fails because an | |||
read privileges, but fails because an implicit ACE has been | protected ACE has been omitted (e.g. the ACE granting the DAV:owner | |||
DAV:read-acl and DAV:write-acl privileges must always be present | ||||
Clemm, Hopkins, Sedlar, Whitehead [Page 17] | since it is protected -- see Section 5.4.3). | |||
omitted (e.g. the ACE granting the DAV:owner DAV:read-acl and | ||||
DAV:write-acl privileges). | ||||
Clemm, Hopkins, Sedlar, Whitehead [Page 18] | ||||
>> Request << | >> Request << | |||
ACL /top/container HTTP/1.1 | ACL /top/container/ HTTP/1.1 | |||
Host: www.foo.bar | Host: www.foo.org | |||
Content-Type: text/xml; charset="utf-8" | Content-Type: text/xml; charset="utf-8" | |||
Content-Length: xxxx | Content-Length: xxxx | |||
Authorization: Digest username="fielding", | Authorization: Digest username="fielding", | |||
realm="users@foo.org", nonce="...", | realm="users@foo.org", nonce="...", | |||
uri="/top/container/", response="...", opaque="..." | uri="/top/container/", response="...", opaque="..." | |||
<?xml version="1.0" encoding="utf-8" ?> | <?xml version="1.0" encoding="utf-8" ?> | |||
<D:acl xmlns:D="DAV:"> | <D:acl xmlns:D="DAV:"> | |||
<D:ace> | <D:ace> | |||
<D:principal> | <D:principal> | |||
<D:href>http://www.foo.bar/users/esedlar</D:href> | <D:href>http://www.foo.org/users/esedlar</D:href> | |||
</D:principal> | </D:principal> | |||
<D:grant> | <D:grant> | |||
<D:privilege> <D:read/> </D:privilege> </D:grant> | <D:privilege> <D:read/> </D:privilege> </D:grant> | |||
</D:ace> | </D:ace> | |||
</D:acl> | </D:acl> | |||
>> Response << | >> Response << | |||
HTTP/1.1 403 Forbidden | HTTP/1.1 403 Forbidden | |||
Content-Type: text/xml; charset="utf-8" | Content-Type: text/xml; charset="utf-8" | |||
Content-Length: xxx | Content-Length: xxx | |||
<?xml version="1.0" encoding="utf-8" ?> | <?xml version="1.0" encoding="utf-8" ?> | |||
<DAV:cannot-change-implicit-ace/> | <DAV:protected/> | |||
9 INTERNATIONALIZATION CONSIDERATIONS | 8.1.4 Example: ACL method failure due to inherited ACEs preceding non- | |||
inherited ACEs | ||||
In this specification, the only human-readable content can be | In the following request, user "ejw", authenticated by information | |||
found in the DAV:authentication-id property, found on | in the Authorization header, tries to change the access control list | |||
principal resources. This property contains the name used to | on the resource http://www.foo.org/top/index.html. This resource has | |||
authenticate a principal, typically by a user entering this | two inherited ACEs. | |||
name into a password entry screen. As a result, the | ||||
authentication-id must be capable of representing names in | ||||
multiple character sets. Since DAV:authentication-id is 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 must, at minimum, be able to read XML elements | ||||
encoded using the UTF-8 [UTF-8] 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 [RFC2376], as well as the XML "encoding" | ||||
attribute, which together provide charset identification | ||||
information for MIME and XML processors. | ||||
For properties other than DAV:authentication-id, it is | Inherited ACE #1 grants the principal identified by URL | |||
expected that implementations will treat the property names | http://www.foo.org/users/ejw (i.e., the user "ejw") | |||
and values as tokens, and convert these tokens into human- | http://www.foo.org/privs/write-all and DAV:read-acl privileges. On | |||
this server, http://www.foo.org/privs/write-all is an aggregate | ||||
privilege containing DAV:write, and DAV:write-acl. | ||||
Clemm, Hopkins, Sedlar, Whitehead [Page 18] | Inherited ACE #2 grants principal DAV:all the DAV:read privilege. | |||
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. | ||||
For error reporting, we follow the convention of HTTP/1.1 | The request attempts to add a third ACE, granting the principal | |||
status codes, including with each status code a short, English | identified by the URL http://www.foo.org/users/gclemm (i.e., the | |||
description of the code (e.g., 200 (OK)). While the | user "gclemm") DAV:write permission, but in the request places the | |||
possibility exists that a poorly crafted user agent would | inherited ACEs before the non-inherited ACEs, causing an error on | |||
display this message to a user, internationalized applications | this specific server implementation. Note that on a different | |||
will ignore this message, and display an appropriate message | implementation, this request might be accepted. | |||
in the user's language and character set. | ||||
Further internationalization considerations for this protocol | >> Request << | |||
are described in the WebDAV Distributed Authoring protocol | ||||
specification [RFC2518]. | Clemm, Hopkins, Sedlar, Whitehead [Page 19] | |||
ACL /top/index.html HTTP/1.1 | ||||
Host: www.foo.org | ||||
Content-Type: text/xml; charset="utf-8" | ||||
Content-Length: xxxx | ||||
Authorization: Digest username="ejw", | ||||
realm="users@foo.org", nonce="...", | ||||
uri="/top/index.html", response="...", opaque="..." | ||||
<?xml version="1.0" encoding="utf-8" ?> | ||||
<D:acl xmlns:D="DAV:" xmlns:F="http://www.foo.org/privs/"> | ||||
<D:ace> | ||||
<D:principal> | ||||
<D:href>http://www.foo.org/users/ejw</D:href> | ||||
</D:principal> | ||||
<D:grant> | ||||
<D:privilege><F:write-all/></D:privilege> | ||||
<D:privilege><D:read-acl/></D:privilege> | ||||
</D:grant> | ||||
<D:inherited/> | ||||
</D:ace> | ||||
<D:ace> | ||||
<D:principal><D:all/></D:principal> | ||||
<D:grant><D:read/></D:grant> | ||||
<D:inherited/> | ||||
</D:ace> | ||||
<D:ace> | ||||
<D:principal> | ||||
<D:href>http://www.foo.org/users/gclemm</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" ?> | ||||
<DAV:non-inherited-must-precede-inherited/> | ||||
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.foo.org/diamond/engagement-ring.gif. The ACL | ||||
request includes a single, syntactically and semantically incorrect | ||||
ACE, which attempts to grant the collection principal identified by | ||||
the URL http://www.foo.org/users/friends/ DAV:read privilege and | ||||
deny the principal identified by URL | ||||
http://www.foo.org/users/ygoland-so (i.e., the user "ygoland-so") | ||||
DAV:read privilege. However, it is illegal to have multiple | ||||
Clemm, Hopkins, Sedlar, Whitehead [Page 20] | ||||
principal elements, as well as both a grant and deny element in the | ||||
same ACE, so the request fails due to poor syntax. | ||||
>> Request << | ||||
ACL /diamond/engagement-ring.gif HTTP/1.1 | ||||
Host: www.foo.org | ||||
Content-Type: text/xml; charset="utf-8" | ||||
Content-Length: xxxx | ||||
Authorization: Digest username="ygoland", | ||||
realm="users@foo.org", 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.foo.org/users/friends/</D:href> | ||||
</D:principal> | ||||
<D:grant><D:read/></D:grant> | ||||
<D:principal> | ||||
<D:href>http://www.foo.org/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 INTERNATIONALIZATION CONSIDERATIONS | ||||
In this specification, the only human-readable content can be found | ||||
in the DAV:authentication-id property, found on principal resources. | ||||
This property contains the name used to authenticate a principal, | ||||
typically by a user entering this name into a password entry screen. | ||||
As a result, the authentication-id must be capable of representing | ||||
names in multiple character sets. Since DAV:authentication-id is 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 must, at minimum, be able | ||||
to read XML elements encoded using the UTF-8 [UTF-8] 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. | ||||
Clemm, Hopkins, Sedlar, Whitehead [Page 21] | ||||
For properties other than DAV:authentication-id, it is expected that | ||||
implementations will treat the property 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. | ||||
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 | ||||
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]. | ||||
10 SECURITY CONSIDERATIONS | 10 SECURITY CONSIDERATIONS | |||
Applications and users of this access control protocol should | Applications and users of this access control protocol should be | |||
be aware of several security considerations, detailed below. | aware of several security considerations, detailed below. In | |||
In addition to the discussion in this document, the security | addition to the discussion in this document, the security | |||
considerations detailed in the HTTP/1.1 specification | considerations detailed in the HTTP/1.1 specification [RFC2616], the | |||
[RFC2616], the WebDAV Distributed Authoring Protocol | WebDAV Distributed Authoring Protocol specification [RFC2518], and | |||
specification [RFC2518], and the XML specification (discussed | the XML Media Types specification [RFC3023] should be considered in | |||
in [RFC2376]) should be considered in a security analysis of | a security analysis of this protocol. | |||
this protocol. | ||||
10.1 Increased Risk of Compromised Users | 10.1 Increased Risk of Compromised Users | |||
In the absence of a mechanism for remotely manipulating access | In the absence of a mechanism for remotely manipulating access | |||
control specifications, if a single user's authentication | control specifications, if a single user's authentication | |||
credentials are compromised, only those resources for which | credentials are compromised, only those resources for which the user | |||
the user has access permission can be read, modified, moved, | has access permission can be read, modified, moved, or deleted. With | |||
or deleted. With the introduction of this access control | the introduction of this access control protocol, if a single | |||
protocol, if a single compromised user has the ability to | compromised user has the ability to change ACLs for a broad range of | |||
change ACLs for a broad range of other users (e.g., a super- | other users (e.g., a super-user), the number of resources that could | |||
user), the number of resources that could be altered by a | be altered by a single compromised user increases. This risk can be | |||
single compromised user increases. This risk can be mitigated | mitigated by limiting the number of people who have write-acl | |||
by limiting the number of people who have write-acl privileges | privileges across a broad range of resources. | |||
across a broad range of resources. | ||||
10.2 Authentication-id Property and Dictionary Attacks | 10.2 Authentication-id Property and Dictionary Attacks | |||
Every principal has a DAV:authentication-id property defined | Every principal has a DAV:authentication-id property defined on it, | |||
on it, which provides the name used to authenticate this | which provides the name used to authenticate this principal, | |||
principal, typically the username portion of a | typically the username portion of a username/password authentication | |||
username/password authentication scheme. An attacker can use | scheme. An attacker can use the information in this property when | |||
the information in this property when attempting either a | attempting either a brute-force, or a dictionary attack to guess the | |||
brute-force, or a dictionary attack to guess the principal's | principal's identifying password. By providing the username in | |||
identifying password. By providing the username in | DAV:authentication-id, the scope of an attack can be reduced to a | |||
DAV:authentication-id, the scope of an attack can be reduced | single, valid username. Furthermore, it is possible that principals | |||
to a single, valid username. Furthermore, it is possible that | can potentially belong to a collection. In this case, it is possible | |||
principals can potentially belong to a collection. In this | to use the PROPFIND method to retrieve the DAV:authentication-id | |||
property from all of the principals in a collection, thus providing | ||||
Clemm, Hopkins, Sedlar, Whitehead [Page 19] | multiple usernames that can be the focus of attack. | |||
case, it is possible to use the PROPFIND method to retrieve | ||||
the DAV:authentication-id property from all of the principals | ||||
in a collection, thus providing multiple usernames that can be | ||||
the focus of attack. | ||||
To reduce this risk, the DAV:authentication-id property should | Clemm, Hopkins, Sedlar, Whitehead [Page 22] | |||
not be world-readable. Which principals are granted default | To reduce this risk, the DAV:authentication-id property should not | |||
read permission for DAV:authentication-id should be carefully | be world-readable. Which principals are granted default read | |||
considered in any deployment of this protocol. | privilege for DAV:authentication-id should be carefully considered | |||
in any deployment of this protocol. | ||||
10.3 Risks of the read-acl Privilege | 10.3 Risks of the read-acl Privilege | |||
The ability to read the access permissions (stored in the | The ability to read the access privileges (stored in the DAV:acl | |||
DAV:acl property), or the privileges permitted the currently | property), or the privileges permitted the currently authenticated | |||
authenticated user (stored in the DAV:current-user-privilege- | user (stored in the DAV:current-user-privilege-set property) on a | |||
set property) on a resource may seem innocuous, since reading | resource may seem innocuous, since reading an ACL cannot possibly | |||
an ACL cannot possibly affect the resource's state. However, | affect the resource's state. However, if all resources have world- | |||
if all resources have world-readable ACLs, it is possible to | readable ACLs, it is possible to perform an exhaustive search for | |||
perform an exhaustive search for those resources that have | those resources that have inadvertently left themselves in a | |||
inadvertently left themselves in a vulnerable state, such as | vulnerable state, such as being world-writeable. In particular, the | |||
being world-writeable. Once found, this vulnerability can be | property retrieval method PROPFIND, executed with Depth infinity on | |||
exploited by a denial of service attack in which the open | an entire hierarchy, is a very efficient way to retrieve the DAV:acl | |||
resource is repeatedly overwritten. Alternately, writeable | or DAV:current-user-privilege-set properties. Once found, this | |||
resources can be modified in undesirable ways. | vulnerability can be exploited by a denial of service attack in | |||
which the open resource is repeatedly overwritten. Alternately, | ||||
writeable resources can be modified in undesirable ways. | ||||
To reduce this risk, read-acl privileges should not be granted | To reduce this risk, read-acl privileges should not be granted to | |||
to unauthenticated principals, and restrictions on read-acl | unauthenticated principals, and restrictions on read-acl privileges | |||
privileges for authenticated principals should be carefully | for authenticated principals should be carefully analyzed when | |||
analysed when deploying this protocol. | deploying this protocol. | |||
11 AUTHENTICATION | 11 AUTHENTICATION | |||
Authentication mechanisms defined in WebDAV will also apply to | Authentication mechanisms defined in WebDAV also apply to this | |||
WebDAV ACL. | WebDAV Access Control Protocol, in particular the Basic and Digest | |||
authentication mechanisms defined in [RFC2617]. | ||||
12 IANA CONSIDERATIONS | 12 IANA CONSIDERATIONS | |||
This document uses the namespace defined by [RFC2518] for XML | This document uses the namespace defined by [RFC2518] for XML | |||
elements. All other IANA considerations mentioned in | elements. All other IANA considerations mentioned in [RFC2518] also | |||
[RFC2518] also applicable to WebDAV ACL. | applicable to WebDAV ACL. | |||
13 INTELLECTUAL PROPERTY | 13 INTELLECTUAL PROPERTY | |||
The following notice is copied from RFC 2026, section 10.4, | The following notice is copied from RFC 2026, section 10.4, and | |||
and describes the position of the IETF concerning intellectual | describes the position of the IETF concerning intellectual property | |||
property claims made against this document. | claims made against this document. | |||
The IETF takes no position regarding the validity or scope of | The IETF takes no position regarding the validity or scope of any | |||
any intellectual property or other rights that might be | intellectual property or other rights that might be claimed to | |||
claimed to pertain to the implementation or use other | pertain to the implementation or use other technology described in | |||
technology described in this document or the extent to which | this document or the extent to which any license under such rights | |||
any license under such rights might or might not be available; | might or might not be available; neither does it represent that it | |||
has made any effort to identify any such rights. Information on the | ||||
IETF's procedures with respect to rights in standards-track and | ||||
standards-related documentation can be found in BCP-11. Copies of | ||||
claims of rights made available for publication and any assurances | ||||
of licenses to be made available, or the result of an attempt made | ||||
Clemm, Hopkins, Sedlar, Whitehead [Page 20] | Clemm, Hopkins, Sedlar, Whitehead [Page 23] | |||
neither does it represent that it has made any effort to | to obtain a general license or permission for the use of such | |||
identify any such rights. Information on the IETF's | proprietary rights by implementers or users of this specification | |||
procedures with respect to rights in standards-track and | can be obtained from the IETF Secretariat. | |||
standards-related documentation can be found in BCP-11. | ||||
Copies of claims of rights made available for publication 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 | ||||
Secretariat. | ||||
The IETF invites any interested party to bring to its | The IETF invites any interested party to bring to its attention any | |||
attention any copyrights, patents or patent applications, or | copyrights, patents or patent applications, or other proprietary | |||
other proprietary rights that may cover technology that may be | rights that may cover technology that may be required to practice | |||
required to practice this standard. Please address the | this standard. Please address the information to the IETF Executive | |||
information to the IETF Executive Director. | Director. | |||
14 ACKNOWLEDGEMENTS | 14 ACKNOWLEDGEMENTS | |||
This protocol is the collaborative product of the WebDAV ACL | This protocol is the collaborative product of the WebDAV ACL design | |||
design team: Bernard Chester, Geoff Clemm (Rational), Anne | team: Bernard Chester, Geoff Clemm (Rational), Anne Hopkins | |||
Hopkins (Microsoft), Barry Lind (Xythos), Sean Lyndersay | (Microsoft), Barry Lind (Xythos), Sean Lyndersay (Microsoft), Eric | |||
(Microsoft), Eric Sedlar (Oracle), Greg Stein (Apache.org), | Sedlar (Oracle), Greg Stein (Apache.org), and Jim Whitehead (UC | |||
and Jim Whitehead (UC Santa Cruz). Prior work on WebDAV access | Santa Cruz). The authors are grateful for the detailed review and | |||
control protocols has been performed by Yaron Goland, Paul | comments provided by Jim Amsden, Gino Basso, Murthy Chintalapati, | |||
Leach, Lisa Dusseault, Howard Palmer, and Jon Radoff. We would | Dennis Hamilton, Ron Jacobs, Chris Knight, and Remy Maucherat. Prior | |||
like to acknowledge the foundation laid for us by the authors | work on WebDAV access control protocols has been performed by Yaron | |||
of the WebDAV and HTTP protocols upon which this protocol is | Goland, Paul Leach, Lisa Dusseault, Howard Palmer, and Jon Radoff. | |||
layered, and the invaluable feedback from the WebDAV working | We would like to acknowledge the foundation laid for us by the | |||
group. | authors of the WebDAV and HTTP protocols upon which this protocol is | |||
layered, and the invaluable feedback from the WebDAV working group. | ||||
15 REFERENCES | 15 REFERENCES | |||
15.1 Normative References | 15.1 Normative References | |||
[RFC2119] S.Bradner, "Key words for use in RFCs to Indicate | [RFC2119] S.Bradner, "Key words for use in RFCs to Indicate | |||
Requirement Levels." RFC 2119, BCP 14, Harvard, March, 1997. | Requirement Levels." RFC 2119, BCP 14, Harvard, March, 1997. | |||
[REC-XML] T. Bray, J. Paoli, C.M. Sperberg-McQueen, | [REC-XML] T. Bray, J. Paoli, C.M. Sperberg-McQueen, "Extensible | |||
"Extensible Markup Language (XML)." World Wide Web Consortium | Markup Language (XML)." World Wide Web Consortium Recommendation | |||
Recommendation REC-xml-19980210. http://www.w3.org/TR/REC-xml- | REC-xml-19980210. http://www.w3.org/TR/REC-xml-19980210. | |||
19980210.[RFC2616] R. Fielding, J. Gettys, J. C. Mogul, H. | ||||
Frystyk, L. Masinter, P. Leach, and T. Berners-Lee, "Hypertext | ||||
Transfer Protocol -- HTTP/1.1." RFC 2616. U.C.Irvine, Compaq, | ||||
Xerox, Microsoft, MIT/LCS, June, 1999. | ||||
[RFC2617] J. Franks, P. Hallam-Baker, J. Hostetler, S. | [RFC2616] R. Fielding, J. Gettys, J. C. Mogul, H. Frystyk, L. | |||
Lawrence, P. Leach, A. Luotonen, L. Stewart, "HTTP | Masinter, P. Leach, and T. Berners-Lee, "Hypertext Transfer Protocol | |||
Authentication: Basic and Digest Access Authentication. " RFC | -- HTTP/1.1." RFC 2616. U.C.Irvine, Compaq, Xerox, Microsoft, | |||
2617. Northwestern University, Verisign, AbiSource, Agranat, | MIT/LCS, June, 1999. | |||
Microsoft, Netscape, Open Market, June, 1999. | ||||
[RFC2617] J. Franks, P. Hallam-Baker, J. Hostetler, S. Lawrence, P. | ||||
Leach, A. Luotonen, L. Stewart, "HTTP Authentication: Basic and | ||||
Digest Access Authentication. " RFC 2617. Northwestern University, | ||||
Verisign, AbiSource, Agranat, Microsoft, Netscape, Open Market, | ||||
June, 1999. | ||||
Clemm, Hopkins, Sedlar, Whitehead [Page 21] | ||||
[RFC2518] Y. Goland, E. Whitehead, A. Faizi, S. R. Carter, D. | [RFC2518] Y. Goland, E. Whitehead, A. Faizi, S. R. Carter, D. | |||
Jensen, "HTTP Extensions for Distributed Authoring _ WEBDAV." | Jensen, "HTTP Extensions for Distributed Authoring -- WEBDAV." RFC | |||
RFC 2518. Microsoft, U.C.Irvine, Netscape, Novell, February, | 2518. Microsoft, U.C.Irvine, Netscape, Novell, February, 1999. | |||
1999. | ||||
[UTF-8] F. Yergeau, "UTF-8, a transformation format of Unicode | [RFC3023] M. Murata, S. St.Laurent, D. Kohn, "XML Media Types." RFC | |||
and ISO 10646." RFC 2279. Alis Technologies. January, 1998. | 3023. IBM Tokyo Research Laboratory, simonstl.com, Skymoon Ventures, | |||
January, 2001. | ||||
15.2 Informational References | Clemm, Hopkins, Sedlar, Whitehead [Page 24] | |||
[UTF-8] F. Yergeau, "UTF-8, a transformation format of Unicode and | ||||
ISO 10646." RFC 2279. Alis Technologies. January, 1998. | ||||
[RFC2026] S.Bradner, "The Internet Standards Process _ | 15.2Informational References | |||
Revision 3." RFC 2026, BCP 9. Harvard, October, 1996. | ||||
[RFC2396] E. Whitehead, M. Murata, "XML Media Types." RFC | [RFC2026] S.Bradner, "The Internet Standards Process û Revision 3." | |||
2376. U.C. Irvine, Fuji Xerox Info. Systems. July, 1998. (This | RFC 2026, BCP 9. Harvard, October, 1996. | |||
RFC will soon be superseded by <draft-murata-xml-09.txt>, | ||||
which has been approved by the IESG as a Proposed Standard, | ||||
but not yet issued as an RFC.) | ||||
16 AUTHORS' ADDRESSES | 16 AUTHORS' ADDRESSES | |||
Geoffrey Clemm | Geoffrey Clemm | |||
Rational Software | Rational Software | |||
20 Maguire Road | 20 Maguire Road | |||
Lexington, MA 02421 | Lexington, MA 02421 | |||
Email: geoffrey.clemm@rational.com | Email: geoffrey.clemm@rational.com | |||
Anne Hopkins | Anne Hopkins | |||
skipping to change at line 1206 | skipping to change at page 27, line ? | |||
Email: esedlar@us.oracle.com | Email: esedlar@us.oracle.com | |||
Jim Whitehead | Jim Whitehead | |||
U.C. Santa Cruz | U.C. Santa Cruz | |||
Dept. of Computer Science | Dept. of Computer Science | |||
Baskin Engineering | Baskin Engineering | |||
1156 High Street | 1156 High Street | |||
Santa Cruz, CA 95064 | Santa Cruz, CA 95064 | |||
Email: ejw@cse.ucsc.edu | Email: ejw@cse.ucsc.edu | |||
17 STILL TO DO | 17 APPENDICIES | |||
* If we can add more elements to DAV:resourcetype, we can | 17.1XML Document Type Definition | |||
eliminate DAV:is-principal. | ||||
Clemm, Hopkins, Sedlar, Whitehead [Page 22] | <!-- Privileges --> | |||
* Add back the XML schema if provides info not in the DTD's. | ||||
* Consider adding a DAV:matching-principals, which identifies | <!ELEMENT read EMPTY> | |||
all ACL principals that match the current user. | <!ELEMENT write EMPTY> | |||
<!ELEMENT read-acl EMPTY> | ||||
<!ELEMENT write-acl EMPTY> | ||||
<!ELEMENT all EMPTY> | ||||
* Add DAV:ordering-constraints, DAV:required-principals, and | <!-- Principal Properties (Section 4) --> | |||
DAV:ace-combination-semantics as sub-elements of DAV:acl- | ||||
semantics. | ||||
Clemm, Hopkins, Sedlar, Whitehead [Page 23] | Clemm, Hopkins, Sedlar, Whitehead [Page 25] | |||
<!ELEMENT is-principal (#PCDATA)> | ||||
<!ELEMENT authentication-id (#PCDATA)> | ||||
<!-- Access Control Properties (Section 5) --> | ||||
<!-- DAV:owner Property (Section 5.1) --> | ||||
<!ELEMENT owner (href prop?)> | ||||
<!ELEMENT prop (see [RFC2518], section 12.11)> | ||||
<!-- DAV:supported-privilege-set Property (Section 5.2) --> | ||||
<!ELEMENT supported-privilege-set (supported-privilege*)> | ||||
<!ELEMENT supported-privilege | ||||
(privilege, abstract?, description, supported-privilege*)> | ||||
<!ELEMENT privilege ANY> | ||||
<!ELEMENT abstract EMPTY> | ||||
<!ELEMENT description #PCDATA> | ||||
<!ELEMENT privilege ANY> | ||||
<!-- DAV:current-user-privilege-set Property (Section 5.3) --> | ||||
<!ELEMENT current-user-privilege-set (privilege*)> | ||||
<!-- DAV:acl Property (Section 5.4) --> | ||||
<!ELEMENT acl (ace*)> | ||||
<!ELEMENT ace (principal, (grant|deny), protected?, inherited?)> | ||||
<!ELEMENT principal ((href, prop?) | ||||
| all | authenticated | unauthenticated | ||||
| property | self)> | ||||
<!ELEMENT prop (see [RFC2518], section 12.11)> | ||||
<!ELEMENT all EMPTY> | ||||
<!ELEMENT authenticated EMPTY> | ||||
<!ELEMENT unauthenticated EMPTY> | ||||
<!ELEMENT property ANY> | ||||
<!ELEMENT self EMPTY> | ||||
<!ELEMENT grant (privilege+)> | ||||
<!ELEMENT deny (privilege+)> | ||||
<!ELEMENT privilege ANY> | ||||
<!ELEMENT protected EMPTY> | ||||
<!ELEMENT inherited (href)> | ||||
<!-- DAV:principal-collection-set Property (Section 5.6) --> | ||||
Clemm, Hopkins, Sedlar, Whitehead [Page 26] | ||||
<!ELEMENT principal-collection-set (href*)> | ||||
<!-- DAV:acl-semantics Property (Section 6) --> | ||||
<!ELEMENT acl-semantics acl-sem*> | ||||
<!ELEMENT acl-sem (ace-combination, ace-ordering, required- | ||||
principal)> | ||||
<!ELEMENT ace-combination | ||||
(first-match | all-grant-before-any-deny | no-deny)> | ||||
<!ELEMENT first-match EMPTY> | ||||
<!ELEMENT all-grant-before-any-deny EMPTY> | ||||
<!ELEMENT no-deny EMPTY> | ||||
<!ELEMENT ace-ordering (deny-before-grant)? > | ||||
<!ELEMENT deny-before-grant EMPTY> | ||||
<!ELEMENT required-principal | ||||
(href | all | authenticated | unauthenticated | property | | ||||
self)> | ||||
<!-- ACL method preconditions (Section 8.1.1) --> | ||||
<!ELEMENT protected EMPTY> | ||||
<!ELEMENT too-many-aces EMPTY> | ||||
<!ELEMENT non-inherited-must-precede-inherited EMPTY> | ||||
<!ELEMENT deny-must-precede-grant EMPTY> | ||||
<!ELEMENT acl-requires-lock-token EMPTY> | ||||
End of changes. | ||||
This html diff was produced by rfcdiff 1.23, available from http://www.levkowetz.com/ietf/tools/rfcdiff/ |