INTERNET-DRAFTP. J. Leach Expires: April 1998 Y. Y. Goland Standards Track MicrosoftEric Sedlar, Oracle CorporationWebDAV Working Groupdraft-ietf-webdav-acl-01.txt Geoffrey Clemm, Rational Software Expires November10, 19971, 2000 May 1, 2000 Access Control Extensions to WebDAVACL Protocol draft-ietf-webdav-acl-00.txtStatus of this Memo This document is anInternet-Draft.Internet-Draft and is in full conformance with all provisions of Section 10 of RFC2026. Internet-Drafts are working documents of the Internet Engineering Task Force (IETF), its areas, and its working groups. Note that other groups may also distribute working documents as Internet-Drafts. Internet-Drafts are draft documents valid for a maximum of six months and may be updated, replaced, or obsoleted by other documents at any time. It is inappropriate to useInternet-DraftsInternet- Drafts as reference material or to cite them other than as "work in progress."To learn the current statusThe list ofany Internet-Draft, please check the "1id-abstracts.txt" listing contained in thecurrent Internet-Drafts can be accessed at http://www.ietf.org/ietf/1id-abstracts.txt The list of Internet-Draft Shadow Directorieson ds.internic.net (US East Coast), nic.nordu.net (Europe), ftp.isi.edu (US West Coast), or munnari.oz.au (Pacific Rim).can be accessed at http://www.ietf.org/shadow.html. Abstract Thismemodocument specifiesthe formata set of methods, headers, andmanipulation mechanisms for access control lists (ACLs) forresource-types that define the WebDAVobjects. Contents StatusAccess Control extensions to the HTTP/1.1 protocol. Sedlar, Clemm [Page 1] Table ofthis Memo................................................1 Abstract...........................................................1 Contents...........................................................1 1. Introduction....................................................2 2. Principals Identifiers..........................................2 3. Granting and Denying Rights.....................................3 4. ACL Inheritance.................................................4 5. Properties and ACLs.............................................4 6.Contents 1 INTRODUCTION............................................3 1.1 Notational Conventions................................3 2 PRINCIPALS..............................................3 3 RIGHTS..................................................4 3.1 RIGHTS-DISCOVERY method...............................5 3.2 RightsDefinitions..............................................5 7. Default Principal Types.........................................7 8. ACL Method......................................................7 9. Examples.......................................................11 10.Authors' Addresses.............................................13 11.Bibliography...................................................14 1. Introductiondefined by WebDAV..............................6 3.2.1 read Right........................................6 3.2.2 write Right.......................................6 3.2.3 readacl Right.....................................6 3.2.4 writeacl Right....................................6 3.2.5 all Right.........................................6 4 ACCESS CONTROL PROPERTIES...............................7 4.1 Example 1 - Retrieving Access Control information.....8 5 USING ACLS..............................................9 6 ACL METHOD.............................................10 6.1 Example 1 - Setting ACLs.............................10 7 ACL INHERITANCE / DEFAULT ACLS.........................11 8 XML SCHEMA FOR DEFINED ELEMENTS........................12 9 INTERNATIONALIZATION CONSIDERATIONS....................13 10 SECURITY CONSIDERATIONS..............................13 11 SCALABILITY..........................................13 12 AUTHENTICATION.......................................13 13 IANA CONSIDERATIONS..................................13 14 INTELLECTUAL PROPERTY................................13 15 ACKNOWLEDGEMENTS.....................................14 16 INDEX................................................14 17 REFERENCES...........................................14 18 AUTHORS' ADDRESSES...................................15 19 STILL TO DO :........................................15 Sedlar, Clemm [Page 2] 1 INTRODUCTION Thebasic model forunderlying principle of accesscontrol, informally expressed,control is that who you are determines how you can access a resource. The "who you are" is defined by aprincipal"principal" identifier; users, client software,serversservers, and groups of the previous have principal identifiers. The "how" is determined by an "access control list" (ACL) associated with a resource. An ACL containsAccess Control Elements (ACE). An ACE specifiesa set ofprincipals,"access control entries" (ACEs), where each ACE specifies aset of granted rights,principal and a set ofdenied rights. Rights may be generic, such as "read", "write", or "delete",rights that are either granted orthey might be specificdenied tothe kind of resource protected bythatACL, such as (perhaps) "send-to", "unsubscribe", and "administer" for mailing lists. When a resourceprincipal. 1.1 Notational Conventions The augmented BNF used by this document to describe protocol elements iscreated it inherits a setdescribed in Section 2.1 ofdefault ACL properties from a designated resource, referred[RFC2068]. Because this augmented BNF uses the basic production rules provided in Section 2.2 of [RFC2068], those rules apply to this document asan ACL source.well. Theinheritance cankey words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", "SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY", and "OPTIONAL" in this document are to be"static", sointerpreted as described in [RFC2119]. 2 PRINCIPALS A principal identifies an entity thatsubsequent changescan be given access rights tothe ACL source do not effect the new resources ACL properties;HTTP resources. On many implementations, a user orit cana group will be"dynamic", so that subsequent changesexamples of principals, but other types of principals arereflected in the new resource's ACL properties. Properties on a resource, by default, dynamically inherit from the ACL onpossible. For theresource. Inmost part, any classification or otherwords,information about theresourceentity identified by a principal is opaque with respect to this specification, and is dependent on theACL source for the properties. However individual properties can be given their own ACL. 2.implementation. PrincipalsIdentifiersare manifested to clients as a HTTP resource, identified by a URL. The set of properties exposed by that resource are implementation dependent, although certain properties are required by this specification. Those properties include: @ <dav:principalname>: A "live" property containing the name used to authenticate this principalidentifier can identify(typically typed into asingle principal orlogin prompt/dialog). [OPTIONAL] @ <dav:displayname>: A property containing acompoundhuman-readable description of this principal. This property may be "live" and not settable via PROPPATCH. [REQUIRED] @ <dav:principal-type>: Asingle principal identifier refers to"live" property containing asingle principal, suchclassification word for this principal. The values <dav:user/> and <dav:group/> are choices for value of this property recommended by this spec. The presence of Sedlar, Clemm [Page 3] this property can be used to distinguish it as aperson orprincipal from other resources on aprogram. A compoundWebDAV server. (Note that <dav:resourcetype> may not be used, as all collections must use the value "collection" for <resourcetype>, which wouldn't distinguish normal collections from principalidentifier specifies one or more principals.collections.) [REQUIRED] Server implementations may include any other descriptive information for a principal via properties. Acompoundprincipal resource may or may notnecessarily justbe alistcollection. A collection principal may only contain other principals (not other types of resources). Servers that support aggregation of principals (e.g. groups of users or other groups) MUST manifest them as collection principals.ItThe WebDAV methods for examining maintaining collections (e.g. BIND, DELETE, PROPFIND) mayin factbe used to maintain collection principals. Membership in aprogram that acceptscollection principal is recusive, so a principalidentifier as input and output true or false to indicate membership. This specification relies uponin a collection principal A contained by collection principal B is a member of both collection principals. Implementations not supporting recursive membership in principal collections can return an error if theunderlying authentication mechanism(s)client attempts toprovidebind collection principals into other collection principals. Using WebDAV methods to alter thesyntaxcontent of a principalidentifiers. Thus, for(e.g. using PROPPATCH or PUT) is outside thepurposesscope of this specification,principal identifiers are opaque. 3. Granting and Denying Rights An ACL can both grantanddeny rights. The reason both types of grants are requiredisbecausenot required, recommended, or forbidden by this spec. 3 RIGHTS A right controls access to a particular set ofcompound principals.HTTP operations on a resource. Theconsequence of the existenceset ofcompound principals isrights thatthere are times whenapply to acompound principalparticular resource maybe granted a right but a particular membervary with the <dav:resourcetype> of thecompound principal may need toresource, as well as between different server implementations. To promote interoperability, however, WebDAV defines a set of well-known rights (e.g. <dav:read> and <dav:write>), which can at least bedenied access. In orderused tomake this possible an ACL must be ableset some context tolist principals both allowed and denied a right. By default allthe other rightsfordefined on aprincipal MUST be denied.particular resource. RightsMAY onlymay begranted to a principal by an explicit listing of that principal in a "grant" sectionaggregates ofan ACL. Additionally it is possible for access rights to collide in scope.other rights. For example,a containerone implementation mayhave an accesssplit out a rightwhich specifiescontrolling the abilityof principalstodelete theBIND childrenof that container. This would affectinto a collection from the right allowing a resource to be removed from aprincipal'scollection. Since these rights control the ability tousewrite to a collection, these rights would be aggregated by theDELETE method. However<dav:write> right. The relationships between atomic rights and aggregate rights can be discovered via the RIGHTS-DISCOVERY HTTP method on a particularinternal childresource. Servers mayhave granted accessspecify some rights as abstract, which means that it may not appear in an ACL, but is described in the RIGHTS- DISCOVERY method to aid in setting context. Server implementations must return the same response toDELETE. As such,thetwoRIGHTS- DISCOVERY method on all of the resources with the same <dav:resourcetype> value. Sedlar, Clemm [Page 4] 3.1 RIGHTS-DISCOVERY method Rights discovery is a method with no arguments, that returns the rightscould collide. Theaggregation tree. Each right appears as an XML element, where aggregate rights list all of their children as sub- elements. Each right element can contain the followingrules, processed in order, MUSTattributes: @ abstract (Boolean): "true" if this right cannot be used in an ACL/ACE. Defaults toresolve scope conflicts between rights. 1) In a conflict between a"false" @ description (string): a human readable description of what this rightgranted bycontrols access to. Required. For example, the following response might be generated to aparent andRIGHTS-DISCOVERY request on aright grantedWebDAV server implemented by achild,relational database (where theright specified by the child MUST override. 2) In a conflict betweenresource in this case corresponds to aright granted or denied totable): Request RIGHTS-DISCOVERY /schemas/scott/emp HTTP/1.1 Host: www.foo.bar Content-type: text/xml; charset="utf-8" Content-Length: 0 Response HTTP/1.1 200 Success Content-Type: text/xml Content-Length: xxxxx <?xml version="1.0" encoding="utf-8" ?> <?namespace href = "http://www.oracle.com/webdav/ AS = ORA"?> <D:response> <D:all abstract=true description="All access"> <D:write abstract=true description="Write any database row"> <ORA:insert abstract=false description="Insert a row"/> <ORA:update abstract=false description="Update a row"/> <ORA:delete abstract=false description="Delete a row"/> </D:write> <D:read abstract=false description="SELECT data from acompound principalrow"/> <D:readacl abstract=false description="Read the ACL"/> <D:acadmin abstract=false description="Update the ACL and owner"/> </D:all> </D:response> It is envisioned that aright granted or denied to a member ofWebDAV ACL-aware administrative client would list thecompound principal,available in a dialog box, and allow thereferenceuser tothe member of the compound principal MUST override. Note that rule 2 is conceptually identicalchoose non-abstract rights torule 1.apply in an ACE. Theconcept represented by rules 1 and 2, stated generally,rights tree is useful programmatically to map well-known rights (defined by WebDAV or other standards groups) into rights thata specific references always overrides a more general reference. 3.1. Examplesare supported by any particular server implementation. Sedlar, Clemm [Page 5] 3.2 Rights defined by WebDAV Thefollowing examples demonstrate a situation where the specified conflict resolution rule wouldrights defined by WebDAV access control MUST beapplied. 3.1.1. Rule 1 A resource specifies that principal A is grantedpresent in therightresponse todeletetheresource. A propertyRIGHTS-DISCOVERY method, although they may be abstract (and not usable within an ACE onthe resource specifies that principal A is denied thea particular implementation). 3.2.1read Right Name: <dav:read> Purpose: The read right provides and restricts access todeleteinformation regarding theproperty. The conflict is resolved by rule 1,state of theresource isresource, including theparentresource's properties. Affected methods include GET and PROPFIND. The read right does not affect theproperty is the child. As suchOPTIONS method since it reflects capabilities rather than state. 3.2.2write Right Name: <dav:write> Purpose: The <write> right affects thechild's declaration overrides and principal A is deniedsame methods as therightWrite Lock. Please refer todelete[WEBDAV] section 5.3 for theresource. Note,list of affected methods. Note however, thatif other properties do not deny principal Aa write lock is a different mechanism than a write access change, although they affect therightsame methods, they have independent methods todeleteset themthen principal A could delete all properties but the one mentioned aboveandcould PUT an empty body to the resource. However it could not successfully execute a DELETE onindependent error codes. 3.2.3readacl Right Name: <dav:readacl> Purpose: The <readacl> right provides and restricts access to theresource, as<dav:acl> property of thiswould haveresource, rather than theeffect of deleting<dav:read> right. If a user has theproperty along with<readacl> right and not theresource. 3.1.2. Rule 2 A resource specifies that principal A is denied<read> right, theread right. The same resource also specifies that principal B<dav:acl> property ONLY isgrantedaccessible via PROPFIND, and theread right. Principal A, however, is a compound principal of which Principal BGET method is not authorized. If amember. Rule 1 doesuser has the <read> right and notapply becausetherights<readacl> right, the <dav:acl> property will not be included inquestion are definedany PROPFIND requests on thesameassociated resource. 3.2.4writeacl Right Name: <dav:writeacl> Purpose: Theconflict<writeacl> (Access Control ADMINistration) right provides and restricts access to ACL method, which isresolved by rule 2 astheconflict is between a compound principal and oneonly means ofits members. In that case principal B has the right to readaltering theresource. 4. ACL Inheritance When<dav:acl> (and indirectly, <dav:rights>) property of anew resource is created it may inherit its ACL from its containingresource. 3.2.5all Right Name: <dav:all> Sedlar, Clemm [Page 6] Purpose: The <dav:all> right controls all other rights on this resource. Ifno inheritance method is specified then the resource has no ACL. Note, however, thattheowner value is automatically set when a resource<dav:all> right appears in an ACE, it iscreated, so even without inheritance, there will always beanowner. An inherited ACL MUST be appliederror tothe resource before ithave any other right in that ACE. This right isavailablemerely shorthand formanipulation. Thus, if inheritance is used,all of theresource will never berights enumerated ina state where it doesthe RIGHTS- DISCOVERY method, and should nothavecontrol access to rights not exposed via that route. 4 ACCESS CONTROL PROPERTIES This specification defines a number of new properties for WebDAV resources. Access controlprotection. Inheritance can eitherproperties may bestatic or dynamic. Static inheritance means thatretrieved just like other WebDAV properties, using theACL specified byPROPFIND method. An HTTP resource on a WebDAV ACL-compliant server MUST contain theparent will be used to define the ACL for the child. Any subsequent changes made to the parent will not cause the child's ACL to be altered. Dynamic inheritance means that the ACL specified by the parent is used to define the ACL forfollowing properties: @ <dav:owner>: A property containing thechild but any changes onprincipal information identifying a particular user as theparent's ACL MUST automatically be made to any inheriting children. The child is still allowed to define its own ACL values that MUST override any conflicting inherited ACL. 5. Properties and ACLs Properties MAY have their own ACL independentowner of theassociatedresource.By default a property's ACL MUST be dynamically inherited fromThis property is readable by anyone with read access to theassociated resource. Note that properties can only inherit from their associatedresource.ItThere islegalno provision for a client updating this propertyto carry a setting for what sort of inheritance its children will have. Currentlyin thisvalue has no meaning as properties can not have children, butspec, however it isexpected in the futurerecommended thathierarchical properties willany authenticated user with appropriate administrative privileges beadopted, soallowed to issue a PROPPATCH to update its value. Normally, an attempt to PROPPATCH thissettingproperty willthen have meaning. For now compliant resources MUST record this value but do not have to do anything with it. For purposesresult in a 401 (Not Authorized) error. [REQUIRED] @ <dav:owner-name>: A "live" property containing a human- readable description ofapplying scoping conflict resolution rulestheresource is<dav:owner> [OPTIONAL] @ <dav:rights>: A "live" property containing theparent andlist of rights of the currently authenticated HTTP user. Read access to this property is controlled by thechild. Compliant resources<read> right. This property can NEVER be set directly. [REQUIRED] @ <dav:acl>: A "live" property containing one or more <dav:ace> tags, which specify which principals arenot requiredtosupport setting ACLs directly on properties. 6. Rights Definitions The following define a variety of rights. A compliantget access to what rights, for the resourceMUST support allwith this ACL property. [REQUIRED] The <dav:acl> element (property) contains 0 or more of the following XML elements: @ <dav:ace>: An access control entry, which specifies the set of rightscontained herein. 6.1. all Right Name: all Namespace: http://www.ietf.org/standards/acl/ Purpose: The all right provides all rights. Values: None Description: Into be granted to aconflict between the "all" right and other rights, the "all" right is considered a parent and the other rights a "child." Thus one ACE could provide the ALL right for a particular principal but another ACE in the same ACL could deny the same principal a particular right. The conflict would be resolved by denying the specified principal the more specific right. 6.2. read Right Name: read Namespace: http://www.ietf.org/standards/acl/ Purpose: The read right provides and restricts access to information regarding the state of the resource, including the resource's properties. Effected methods are GET, INDEX, and PROPFIND. OPTIONS is not covered by a Read ACL as it reflects capabilities rather than state. Values: None 6.3. write Right Name: write Namespace: http://www.ietf.org/standards/acl/ Purpose: The Write right affects the same methods as the Write Lock. Please refer to [WEBDAV] section 5.3 for the list of affected methods. Note however, that a write lock is a different mechanism than a write access change, although they affect the same methods, they have independent methods to set them and independent error codes. Values: None 6.4. delete Right Name: delete Namespace: http://www.ietf.org/standards/acl/ Purpose: The delete right controls access to the DELETE method. This method does not affect the ability to remove properties. Values: None 6.5. createchild Right Name: createchild Namespace: http://www.ietf.org/standards/acl/ Purpose: This right controls the ability to PUT internal members of a collection and ADDREF external members of a collection. This ACL has no affect if set on non-collections. Values: None 6.6. deletechild Right Name: deletechild Namespace: http://www.ietf.org/standards/acl/ Purpose: The deletechild right controls the ability to the DELETE internal members of a collection and DELREF external members of a collection. This ACL has no affect if set on non-collections. Values: None 6.7. writeowner Right Name: writeowner Namespace: http://www.ietf.org/standards/acl/ Purpose: The writeowner right controls the ability to change the value of the owner right. Values: None 6.8. readacl Right Name: readacl Namespace: http://www.ietf.org/standards/acl/ Purpose: The readacl right controls the ability to read the ACL property. Values: None 6.9. writeacl Right Name: writeacl Namespace: http://www.ietf.org/standards/acl/ Purpose: The writeacl right controls the ability to alter the ACL property. Values: None 7. Default Principal Types The following two XML elements are defined principal types. 7.1. allprincipals XML Element Name: allprincipals Namespace: http://www.ietf.org/standards/acl/ Purpose: The allprincipals XML element represents all principals. It is used to specify rights belonging to all principals, regardless of authentication. Values: None 7.2. allauthprincipals XML Element Name: allauthprincipals Namespace: http://www.ietf.org/standards/acl/ Purpose: The allauthprincipals XML element represents all authenticated principals. It is used to specify rights belonging to all authenticated principals. Values: None 8. ACL Method The ACL Method serves two distinct purposes. Its request body is used to define alterations to the ACL of the resource and its properties. The response contains the ACL for the associated resource and its properties. The Request-URI of the ACL method identifies the resource whose ACL information is to be retrieved and possibly altered. Change requests through the ACL method MUST be atomic, additionally changes are all or nothing. If any part of the change request fails then all changes MUST fail. 8.1. Request The request may contain up to four XML elements, owner, aclinheritance, and ACL. The presence of an element, except as otherwise specified, in the request body causes the associated value to change. The presence of an empty ACL causes all ACEs in the ACL, including ACEs for associated properties, to be deleted. If an ACE is specified in a request it completely replaces the ACE currently use for the same principal, if it exists. If an ACE is submitted with empty grant and deny lists thensingle principal. The <dav:ace> element contains theACE is deleted. It is a syntax error for two ACEsfollowing XML elements: Sedlar, Clemm [Page 7] @ <dav:grant>: Contains the set of XML elements corresponding toreferencethesame principal. Additionally, although an ACE can be submitted which references multiple principals,rights being granted via thisis primarily a convenience feature. Strictly speaking, what the user has done is specify an ACE for every principal specified. The same logic applies to results that aggregate principals into a singleACE.It is illegal to delete any value, ACE, owner, aclinheritance, etc. with a redundant value. For example, ifMust contain at least oneACE grants all principals read rights and another ACE grants a single principal read rights, both ACEs MUST be maintained. The reason being that in the future all principals may have their read rights removed but the single principal will retain the readrightbecause@ <dav:deny>: Contains themore specific ACE will overrideset of XML elements corresponding to themore generalrights being denied via this ACE.AdditionallyMust contain at least one right, if present. @ <dav:principal-id>: A URL of thecurrently inheritedprincipal resource this ACE applies to, or one of the tags <dav:owner> or <dav:all-principals>. Always present. The value ofowner is "someuser" andthis element must be unique within an ACL. @ <dav:principal>: Contains properties of the principalexplicitly requests that the owner by setresource (made available here to"someuser",avoid theinformation MUST be recordedneed for a separate PROPFIND request). Optional. A PROPFIND onthe resource. That way if ownera resource onthe sourcea WebDAV ACLis changed, the proper value as requested by the client will remain onserver might produce theinheriting ACL. An empty request body will causefollowing XML output: 4.1 Example 1 - Retrieving Access Control information Request PROPFIND /top/container HTTP/1.1 Host: www.foo.bar Content-type: text/xml; charset="utf-8" Content-Length: 0 Depth: 0 <?xml version="1.0"> <D:propfind xmlns:D="DAV:"> <D:allprop/> </D:propfind> Response HTTP/1.1 200 Success Content-Type: text/xml Content-Length: xxxxx <?xml version="1.0" encoding="utf-8" ?> <?namespace href = "http://www.ietf.org/standards/webdav/ AS = D"?> <D:response> <D:propstat> <D:creationdate>1997-12-01T17:42:21-08:00</D:creationdate> <D:displayname>Example collection</D:displayname> <D:resourcetype><D:collection/></D:resourcetype> <D:supportedlock> XXXXX</D:supportedlock> <D:owner>http://www.rational.com/principals/users/gclemm</d:owner > <D:owner-name>Geoffrey Clemm</d:owner-name> Sedlar, Clemm [Page 8] <D:rights> <D:read/><D:readacl/> </D:rights> <D:acl> <D:ace> <D:grant><D:read/><D:write/><D:readacl/></D:grant> <D:principal-id> <D:href>http://www.foo.com/users/esedlar</D:href> </D:principal-id> <D:principal> <D:principal-type>User</D:principal-type> <D:principalname>esedlar</D:principalname> <D:displayname>Eric Sedlar</D:displayname> </D:principal> </D:ace> <D:ace> <D:grant><D:read/><D:readacl/></D:grant> <D:deny><D:writeacl/></D:deny> <D:principal-id> <D:href>http://www.foo.com/groups/marketing</d:href> </D:principal-id> <D:principal> <D:principal-type>Group</D:principal-type> <D:displayname>Foo.Com marketing department</D:displayname> <D:principalname>mktdept</D:principalname> </D:principal> </D:ace> <D:ace> <D:grant><D:read/></D:grant> <D:principal-id><d:all/></D:principal-id> </D:ace> </D:acl> <D:propstat> <D:response> 5 USING ACLS By default, a principal has nochangeaccess rights tothe ACL or associated values. 8.2. Response If the request body was emptyan object protected by an ACL. A particular ACE may either grant orif the changes were successfuldeny a200 Success response MUST be returned withset of rights to aresponse body containingsingle principal. It is illegal for an ACL to have two ACEs applying to theowner, aclinheritance, andsame principal. However, since a server may match theacl XML elements with values for all properties. [Ed Note - I am not dealingcurrently authenticated HTTP user witherror conditions yet as the error reporting formatmultiple principals, it isgoingpossible for multiple ACEs tohaveapply tobe pretty complex and I wantthe current user. In this case, if a particular right is denied toget buy off ontheACL model andcurrent user by any ACE, this supercedes any ACE that might grant that right. This is therequest format before I write upcase regardless if acouple of pages on how("more specific") ACE granting access applied todo errors fora principal identifying the user directly, while the ACE denying access applied to a collection principal containing thatformat.] 8.3. acl XML element Name: acl Namespace: http://www.ietf.org/standards/acl/ Purpose: Defines an ACL. Parent: Any Values= (inheritance [owner] [aclinheritance] *ACE *property) Description: An empty ACL element will delete all ACEs contained in an ACL, includinguser. The particular order of the ACEsof any properties. Note, however, that there MUST always bewithin an ACLvalue defined on a resource, even if itisempty. 8.4. owner XML Element Name: owner Namespace: http://www.ietf.org/standards/acl/ Purpose: Specifiesirrelevant. The <principal-id> tag can also contain theowner offollowing special tags: <owner>, <all>, <unauthenticated>. These tags have theresource. Parent= acl Values= Principal Description:following meaning: Sedlar, Clemm [Page 9] @ owner: Theowner XML element specifies theprincipalwho ownsidentified by theresource. The default value forownerMUST be the principal who createdproperty on this resource is granted or denied theresource.rights specified in this ACE. @ all: Theownercurrent user alwaysretainsmatches this ACE, whether or not s/he is authenticated. @ unauthenticated: The current user matches this ACE if not authenticated Server implementations may limit therightnumber of ACEs in an ACL. However, ACL-compliant servers are required to support at least one ACE granting rights to a single principal, and one ACE granting rights to a collection principal. The server should return an error "Too many ACEs" in this case. 6 ACL METHOD The ACL Method provides a mechanism toalter the ACL. So, for example, an owner who was not granted the rightset ACL information. Its request body is used to define alterations toreadtheresource could not readACL of theresource. Howeverresource identified by theowner could alterrequest-URI. Its response body contains the current ACLso as to grantfor that resource. The ACL method replaces theread right to themselves. A principal MUST have<acl> and <owner> properties on thewriteowner right to changespecified resource with theowner property's value. An empty Owner element submitted in a request will not cause a changeproperties in theOnwer value. Owner MUST always have a value.request. Allcompliant resources MUST support the owner value. 8.5. aclinheritance XML Element Name: aclinheritance Namespace: http://www.ietf.org/standards/acl/ Parent= acl Purpose: The aclinheritance XML element identifiesreadable ACEs previously stored in thetype of inheritance to be used with children ofACL on theassociated resource. The AclInheritance value MUST default to Dynamic. An empty AclInheritance submitted inindicated resource are removed, so an ACL method on arequestresource with an unreadable <acl> property willnot cause a change inbe ignored. (If theAclInheritance value. This element has no meaning on non- collections. However, collections MUST provide this property. Values= ("Dynamic" | "Static" | "None" | Extension) ;Extension is defined, somewhereserver implements rights outside of those defined inDAV. URL is defined, someplace, somewhere. Description: Althoughthiselement has no meaning when defined on a property, resources MUST record its value. 8.6. inheritance XML Element Name: inheritance Namespace: http://www.ietf.org/standards/acl/ Purpose: Defines the inheritance used for a particular ACL. Parent: acl Values= ("Dynamic" | "None" | Extension) Description: Specifies if the ACL is inheriting its value dynamically or not at all. Static is not an option since static inheritance canspecification, they might allow only some ACEs to be visibleùin this case, onlyoccur whenpart of the ACLwas created and so was controlled bywill be replaced). Change requests through the ACLsource. 8.7. principal XML Element Name: principal Namespace: http://www.ietf.org/standards/acl/ Purpose: To identify a principal. Parent: any Values= *cdata 8.8. ace XML Element Name: ace Namespace: http://www.ietf.org/standards/acl/ Purpose: Contains access right information associated with one or more principals. Parent: acl Values= Principal Allow Deny Description: A principalmethod MUSTNOTbedirectly referred to in more than one ACE on a resource. That is, each principal has a particular ACE which specifiesatomic. If any part of the change request fails then all changes MUST fail. The presence ofits directly granted rights. Thus specifying twoan empty ACL causes all ACEswhich directly reference the same principalina request is a syntax error. 8.9. grant XML Element Name: grant Namespace: http://www.ietf.org/standards/acl/ Purpose: Identifies the rightsthe ACL, including ACEs for associatedprincipals are granted. Parent: ACE Values: Right Identifiers 8.10. deny XML Element Name: deny Namespace: http://www.ietf.org/standards/acl/ Purpose: Identifies the rightsproperties, to be deleted. An empty request body will cause no change to theassociated principals are denied. Parent: ACE Values: Right Identifiers 8.11. property XML Element Name: property Namespace: http://www.ietf.org/standards/acl/ Purpose: Provides ACL for properties. Parent: ACL Values= PropACLDescription: The properties inor associated values. If theProp XML<principal> elementMUST be empty. 9. Examples 9.1.(specifying properties of the resource identified by the ACE's <principal-id>) is specified, it (and its children) is ignored. 6.1 Example 1 -RetrievingSetting ACLs An ACLinformationrequest body is an acl-info XML element. The <dav:acl- info> element contains properties that can be set by the ACL method (currently just <acl>). Request ACL/top/container//top/container HTTP/1.1 Host:www.foo.bar Content-Length: xxxx Content-Type: text/xml HTTP/1.1 200 Successwww.foo.com Content-Type: text/xml Content-Length:xxxxx <?namespace href = "http://www.ietf.org/standards/acl/" AS = "a"?>xxxx <?namespace href ="http://www.ietf.org/standards/dav/""http://www.ietf.org/standards/webdav/ AS ="d"?> <a:acl> <a:inheritance>dynamic</a:inheritance> <a:owner>someonesomewhere</a:owner> <a:ace> <a:principal>domain/joebob</a:principal> <a:grant/> <a:deny><a:all/></a:deny> </a:ace> <a:property> <d:prop><d:creationdate></d:prop> <a:acl> <a:inheritance>dynamic</a:inheritance> <a:owner>blah</a:owner> <a:ace> <a:principal>domain/joebob</a:principal> <a:grant/><a:all/></a:grant> <a:deny/> </a:ace> </a:acl> </a:property> <a:property> <d:prop> <d:displayname><d:get-content-language><d:get-content- length><d:get-content-type><d:get-etag><d:get- lastmodified><d:index-content-language><d:index-content- length><d:index-etag><d:index-last-modified><d:resourcetype> </d:prop> <a:acl> <a:inheritance>dynamic</a:inheritance> </a:acl> </a:property> </a:acl> TheD"?> <D:acl-info> Sedlar, Clemm [Page 10] <D:acl> <D:ace> <D:grant><D:read/><D:write/><D:readacl/></D:grant> <D:principal-id> <D:href>http://www.foo.com/users/esedlar</D:href> </D:principal-id> </D:ace> <D:ace> <D:grant><D:read/> </D:grant> <D:principal-id> <D:href>http://www.foo.com/groups/marketing</D:href> </D:principal-id> </D:ace> </D:acl> </D:acl-info> Response HTTP/1.1 200 Success Content-Length: 0 This requestwas empty so nochangeswillthe group ACE to disallow read access to the ACL for the marketing group. The other information had to bemade, ratherrecopied from theresponseACL retrieved in the previous example. 7 ACL INHERITANCE / DEFAULT ACLS To be added Sedlar, Clemm [Page 11] 8 XML SCHEMA FOR DEFINED ELEMENTS <?xml version='1.0'?> <!-- XML Schema for WebDAV ACLs --> <!DOCTYPE schema PUBLIC "-//IETF//DTD WEBDAVACL 20000420//EN" "WebDAVACL.dtd" > <schema xmlns="http://www.w3.org/1999/XMLSchema" targetNamespace="http://www.ietf.org/standards/webdav" xmlns:dav="http://www.ietf.org/standards/webdav" blockDefault="#all" elementFormDefault="qualified"> <element name="right" abstract="true"> <complexType content="empty"> </element> <!--For those folks not familiar with XML Schema, minOccurs defaults to 0, and maxOccurs defaults to 1 --> <element name="dav:read" base="right" equivClass="right"/> <element name="dav:write" base="right" equivClass="right"/> <element name="dav:readacl" base="right" equivClass="right"/> <element name="dav:writeacl" base="right" equivClass="right"/> <element name="dav:all" base="right" equivClass="right"/> <complexType name="dav:rights-list"> <choice minOccurs="1" maxOccurs="unbounded"> <element ref="dav:right"> <element name="dav:unauthenticated" content="empty"/> <element name="dav:all" content="empty"/> <element name="dav:owner" content="empty"/> </complexType> <complexType name="dav:ace"> <element name="dav:grant" type="dav:rights-list" minOccurs="0" maxOccurs="1"> <element name="dav:deny" type="dav:rights-list" minOccurs="0" maxOccurs="1"> <element name="dav:principal-id" minOccurs="1"/> <complexType> <choice minOccurs="1"> <element name="dav:owner" content="empty"/> <element name="dav:all" content="empty"/> <element name="dav:unauthenticated" content="empty"/> <element name="dav:href" type="uri"/> </choice> </complexType> </element> <element name="dav:principal" minOccurs="0" maxOccurs="1"> <complexType> <element name="dav:principal-name" type="string" minOccurs="1"/> Sedlar, Clemm [Page 12] <element name="dav:principal-type" type="string" minOccurs="1"/> </complexType> </element> </complexType> <element name="dav:acl"> <complexType> <element name="dav:ace" type="dav:ace" minOccurs="0" maxOccurs="unbounded"/> </complexType> </element> <element name="dav:rights"> <complexType> <choice minOccurs="1" maxOccurs="unbounded"> <element ref="dav:right"/> </choice> </complexType> </element> </schema> 9 INTERNATIONALIZATION CONSIDERATIONS To be supplied. 10 SECURITY CONSIDERATIONS To be supplied. 11 SCALABILITY To be supplied. 12 AUTHENTICATION Authentication mechanisms defined in WebDAV willjust contain allalso apply to WebDAV ACL. 13 IANA CONSIDERATIONS This document uses therelevant values.namespace defined by [RFC2518] for XML elements. All other IANA considerations mentioned in [RFC2518] also applicable to WebDAV ACL. 14 INTELLECTUAL PROPERTY Theresource gets its own ACL dynamicallyfollowing notice is copied fromits parent, top. However this resource does overrideRFC 2026, section 10.4, and describes theinherited ACL. Specifically, it defines its owner, someonesomewhere, rather than inheriting it. However,position of the IETF concerning intellectual property claims made against this document. Sedlar, Clemm [Page 13] The IETF takes no position regarding theabsencevalidity or scope ofan aclinheritance element indicatesany intellectual property or other rights that might be claimed to pertain to theresource inherits that value. Additionalimplementation or use other technology described in this document or theprincipal domain/joebob is denied allextent to which any license under such rights might or might not be available; neither does it represent that it has made any effort to identify any such rights.So regardless of whatInformation on the IETF's procedures with respect to rightsdomain/joebob may have been grantedintop's ACL, all those rights are deniedstandards-track and standards-related documentation can be found inrelation to top/container. While the ACLBCP-11. Copies of claims of rights made available forcreationdate is also inherited it has its own owner, blah,publication andhasany assurances of licenses to be made available, or the result of anadditional ACEattempt made to obtain a general license or permission forjoebob. Alltherestuse ofthe properties have their ACLs inheritedsuch proprietary rights by implementers or users of this specification can be obtained from theresource. Therefore the denial of allIETF Secretariat. The IETF invites any interested party to bring to its attention any copyrights, patents or patent applications, or other proprietary rights that may cover technology that may be required todomain/joebob would also applypractice this standard. Please address the information to theresource's properties but creationdate.. 9.2. Example 2 - Setting ACLs ACL /top/container.html HTTP/1.1 Host: www.foo.com Content-Type: text/xml Content-Length: xxxx <?namespace href = "http://www.ietf.org/standards/dav/" AS = "D"?> <?namespace href = "http://www.ietf.org/standards/acl/ AS = "A"?> <a:acl> <a:property> <a:aclinheritance>none</a:aclinheritance> <d:prop> <d:creationdate/> </d:prop> <a:acl> <a:ace> <a:principal>domain/joebob</a:principal> <a:grant/><a:deny/> </a:ace> </a:acl> </a:property> </a:acl> HTTP/1.1 200 Success Content-Type: text/xml Content-Length: xxxxx <?namespace href = "http://www.ietf.org/standards/acl/" AS = "a"?> <?namespace href = "http://www.ietf.org/standards/dav/" AS = "d"?> <a:acl> <a:inheritance>dynamic</a:inheritance> <a:owner>someonesomewhere</a:owner> <a:aclinheritance>none</a:aclinheritance> <a:ace> <a:principal>domain/joebob</a:principal> <a:grant/> <a:deny><a:all/></a:deny> </a:ace> <a:property> <d:prop><d:creationdate></d:prop> <a:acl> <a:inheritance>dynamic</a:inheritance> <a:owner>blah</a:owner> </a:acl> </a:property> <a:property> <d:prop> <d:displayname><d:get-content-language><d:get-content- length><d:get-content-type><d:get-etag><d:get- lastmodified><d:index-content-language><d:index-content- length><d:index-etag><d:index-last-modified><d:resourcetype> </d:prop> <a:acl> <a:inheritance>dynamic</a:inheritance> </a:acl> </a:property> </a:acl>IETF Executive Director. 15 ACKNOWLEDGEMENTS Thisexample assumes the state left from example 1. In the requestprotocol is theuser asks thatcollaborative product of theaclinheritance value be setWebDAV ACL design team: xxx, yyy, zzz. We would like tonone and that the ACE onacknowledge theproperty creationdatefoundation laid for us by theprincipal domain/joebob be removed. Even ifauthors of theinherited aclinheritance valueWebDAV and HTTP protocols upon which this protocol isnone, the resource MUST still record the redundant value aslayered, and thevalue oninvaluable feedback from thesource ACL may change. 10. Authors' Addresses Paul J. Leach Yaron Y. Goland Microsoft 1 Microsoft Way Redmond, WA 98052 Phone: (425)936-4765 Email: {paulle, yarong}@microsoft.com 11. BibliographyWebDAV working group. 16 INDEX To be supplied. 17 REFERENCES [RFC2026] S.Bradner, "The Internet Standards Process", Harvard, 1996, <http://www.ietf.org/rfc/rfc2026.txt>. [RFC2068]R. Fielding, J. Gettys, J. Mogul, H. Frystyk, T. Berners- Lee, 'HypertextR.Fielding, J.Gettys, J.C.Mogul, H.Frystyk, and T.Berners-Lee, "Hypertext Transfer Protocol --HTTP/1.1',HTTP/1.1", RFC 2068,JanuaryU.C. Irvine, DEC, MIT/LCS, 1997, <http://www.ietf.org/rfc/rfc2068.txt >. [RFC2119] S.Bradner, "Key words for use in RFCs to Indicate Requirement Levels", Harvard, 1997,<URL:ftp://ds.internic.net/rfc/rfc2068.txt> [WebDAV]<http://www.ietf.org/rfc/rfc2119.txt >. [RFC2518] Y. Goland,E. J. Whitehead, Jr., Asad Faizi, Stephen R. Carter, Del Jensen 'ExtensionsE.Whitehead, A.Faizi, S.R.Carter, D.Jensen, "HTTP Extensions for Distributed Authoringand Versioning on the World Wide Web -- WEBDAV', October 1997, WORK IN PROGRESS, <URL:ftp://ftp.ietf.org/internet-drafts/draft-ietf- webdav-protocol-04.txt> [XML] W3C, 'Extensible Markup Language-Part1. Syntax', March 1997 <URL:http://www.w3.org/pub/WWW/TR/WD-xml-lang.html>WEBDAV", Microsoft, U.C.Irvine, Netscape, Novell, 1999 <http://www.ietf.org/rfc/rfc2518.txt>. Sedlar, Clemm [Page 14] 18 AUTHORS' ADDRESSES Eric Sedlar Oracle Corporation 500 Oracle Parkway Redwood Shores, CA 94065 Email: esedlar@us.oracle.com Geoffrey Clemm Rational Software 20 Maguire Road Lexington, MA Email: geoffrey.clemm@rational.com 19 STILL TO DO : @ Describe the interactions with resource locking. I'm not clear what the resolution was as far as locking the ACL separately from locking the resource.