This documents highlights the current WebDAV ACL specification and
should start to identify how Subversion can implement the requisite
functionality to become compliant.  Note that some of these items may
require work in Apache HTTP Server and/or its included mod_dav to succeed.

RFC 3744: http://www.ietf.org/rfc/rfc3744.txt

===Open questions===

* Are WebDAV ACLs version independent, version dependent, or up to impl?
Justin: Seems up to impl.  I'd believe that ACLs are properties of the
        resource and should be versioned.
Brane: ACLs should be version-specific with history, but that's not the
       same as versioned, as you should be able to change the access
       permissions for a path in an old (i.e., non-HEAD) revision.

* What inheritance model should Subversion support?  If so, how?
Justin: WebDAV ACLs indicate inheritance via DAV:inherited property and
        DAV:inherited-acl property (for ACE and ACLs, respectively).  So, the
        inheritance is directly known and explicit (i.e. X inherits from Y).
        I believe a similar model would work fine within Subversion.
Brane: Agreed. This is very similar to the NTFS inheritance model (no
       surprise there :-) I'd add the restriction that ACLs and ACEs
       can only be inherited from "..", i.e., not from anywhere
       in the repos.
Wilfredo: Note that there is no way in the protocol to specify inheritance.
          That is, you can't say (over DAV), "this should inherit from that",
          So any policy set by the server would have to be one everyone can
          live with, unless you want to add an extension to provide a way to
          communicate a policy change to the server.
Wilfredo: Note also that if you have a resource that inherits from another, and
          the latter is deleted, you've got to do some cleanup on the server.
          This can be avoided if you only allow inheritance from a parent.

* Should ACLs themselves be versioned?
Justin: See above, yes, I think they should.  (Those that aren't derived.)

* What sub/superset of WebDAV privileges should Subversion have, and how
  should they map to WebDAV's privilege model?
Brane: We should at least have a create-child privilege (subsumed in DAV:write,
       and never inherited -- ouch!) that can be applied to tags dirs
       so that tags can be created there, but not modified (e.g.,
       set DAV:read and SVN:create-child on the dir, and make all ACLs
       inherited by default (unless overriden))
Wilfredo: Use DAV:bind for "create child".
          Again, configurable inheritance will require an extension element
          (eg. SVN:inherit) in ACL requests.
Wilfredo: DAV does not require any specific privileges, but does define a few
          that are useful.  You can also mark some as "abstract", which means
          they can not be set/unset independently, and a privilege may aggregate
          others.  Here's the full set defined by DAV, in the hierarchy I used
          in Twisted:
          
          - DAV:all
            - DAV:read
            - DAV:write
              - DAV:write-properties
              - DAV:write-content
            - DAV:bind
            - DAV:unbind
            - DAV:read-acl
            - DAV:write-acl
            - DAV:read-current-user-privilege-set

* What other types of access control mechanisms are we going to require?
Justin: Bill has mentioned that we might want to control who can change
        the log.  Indeed, there seems to be a separate class of repository
        specific attributes.  Could we key them off of the Subversion root?
        These would seem to be an extension of the WebDAV ACL model, but
        necessary ones for uses.
Wilfredo: You can support specific ACEs on the root resource and not allow them
          on the rest, so you could, for example, have SVN:rewrite-log under
          DAV:write-properties on the root resource to globally control log
          edits.  Or (perhaps less confusing for clients), expose it on all
          resources, but require that it be inherited from the root by all
          others.

* What are the real semantics of DAV:owner?  Could it be the person who
  create this file?  The site admin?  What?
Brane: The owner=creator variant seems most common, although on Windows
       I've seen setups where the creator doesn't have the "Object
       Ownership" privilege, and the ownership reverts to the creator
       of the enclosing composite entity (directory, that is).
       This makes sense in a role-based authz system, which is
       probably the way Subversion wants to go...
Wilfredo: DAV:owner and DAV:group are useful if you are using a UNIX-style
          backing store for permissions.  I would suggest that we not use
          either of these and simply grant DAV:all to the *list* of principals
          who you consider to be owners.  I think the UNIX owner model is
          unnecessarily limiting you to one owner.
          That is, I think that copying or inheriting ACEs from the containing
          collection is more appropriate.

* What to do about inherited and protected ACEs on MOVEs? (up to impl.)
Wilfredo: See my note above under "inheritance model" re: dangling inheritance
          references.

* What ACLs would be required for deletion?  (up to impl.)
Brane: There are three options: DAV:write on containing directory (that's
       the Unix way, and consistent with our directory structuring),
       DAV:write on the object (that's close to the Windows way),
       or DAV:owner on the object.
Wilfredo: DAV:unbind on the parent.

* Can the repository structure be itself unchanged with only modifications
  contained within ra_dav and mod_dav_svn?
Justin says: Just might be possible.  If Subversion implemented the ACLs
             and related items as simple properties on the file, this
             approach may work as mod_dav/mod_dav_svn handles enforcement.
Brane says: Even if it's possible, it's evil. Access control must be part
            of the FS semantics in order to behave the same across all
            RA layers.

===Answered questions===

* Can Subversion handle the principal data model?  That is, can it enumerate
  what users it recognizes.  Similarly, can we represent the groups in a
  controlled fashion?
Justin: Isn't the concept of a user foreign to Subversion?  Indeed, Greg says
        it is.  So, mod_dav would have to introduce a model to map backend
        authentication models and present a unified principal model.  Still,
        work would have to be done in Apache httpd to achieve this.  But,
        storage of users doesn't occur with SVN.  All SVN would receive is an
        authenticated username.
Brane: Agreed. But note that there must be a mapping between WebDAV
       principals and Subversion users that is compatible for different
       access methods. Note also that the concept of groups is important
       for generating sane ACLs, yet the FS must also know the actual
       user. It seems that a user->list-of-groups mapping has to be
       available to the FS somehow.
Wilfredo: Note also that DAV principals must be exposed as HTTP resources as
          well; a principal collection is going to want to live somewhere in
          the repository namespace unless there's a way to put it somewhere
          else on the HTTP server.
          On the other hand, if you are parking a repository on a server which
          also has non-svn DAV resources, there probably should be a way to
          share the principals, which implies they should be managed by mod_dav,
          not (necessarily) in the FS layer.  Maybe this sort of sharing isn't
          that important, though.

* Given Subversion does not know about users, what sorts of ACLs could be
  placed on other non-DAV access to the repository (say ra_local)? 
Justin: Greg hints that ra_local doesn't use ACLs as it would be possible
        to just bypass SVN and edit the BDB backend directly.  ACLs are
        therefore only desired for ra_dav access.
Brane: Nonsense. What if I, as an admin, want to administer the database
       (and modify ACLs) using ra_local? (E.g., while Apache is down
       for database recovery/upgrade/etc.)

===Required to-do items===

- Contemplate the nature of ACLs

- Construct a mapping of WebDAV ACL properties and values to potential SVN
  counterparts.

- Define extensions to the mod_dav provider API that allows ACLs to be
  implemented in a provider-neutral fashion.  mod_dav should be able to
  handle most of the protocol logic, but it will have to retrieve certain
  items from the provider to achieve this.

- Allow mod_dav to handle principal URLs via authentication rewrite.
  - mod_dav can be written to use these backends and expose provider URLs and
    handle the DAV methods on them.

===Completed items===

- Apache httpd authentication switched to a provider model for post-2.0.42
  releases.

===30,000ft summary of WebDAV ACL draft===
****
Note: You are encouraged to read the draft in its entirety, but this is
      just a rough sketch so that I can remember what is in it.
****

Principal:
  - Single URL which identifies a person
  - Certain DAV methods must be implemented on these URLs

Privileges:

- DAV:read
  - Controls: GET/PROPFIND
  - MAY control: OPTIONS
- DAV:write
  - Controls: PUT/PROPPATCH
  - Locking interacts with it
  - Includes DAV:write-properties and DAV:write-content (3.10)
- DAV:write-properties
  - Controls: PROPPATCH.
  - Modify dead properties, but (optionally) live ones
- DAV:write-content
  - Controls: PUT (for existing resource)
- DAV:bind
  - Controls: PUT (for new resource)
- DAV:unbind
  - Controls: DELETE
- DAV:unlock
  - Controls: UNLOCK
- DAV:read-acl
  - Controls: PROPFIND (on DAV:acl)
- DAV:read-current-user-privilege-set
  - Controls: PROPFIND (on DAV:current-user-privilege-set)
- DAV:write-acl
  - Modify ACLs
- DAV:all
  - Everything

Principal properties:
- DAV:alternate-URI-set
  - Required
  - HREF
  - More knowledge about principal
- DAV:principal-URL
  - Required
  - Definitive singular URL
- DAV:group-member-set (group principals)
  - Direct members of group
- DAV:group-membership
  - Required
  - What groups a principal belongs to

ACL properties:
- DAV:owner
  - Protected
- DAV:supported-privilege-set
  - Protected
  - What properties are allowed
- DAV:current-user-privilege-set
  - Protected
  - Computed effective access for current principal
- DAV:acl
  - Collection of ACEs (see below)
- DAV:inherited-acl-set
  - Indicates which entities that this ACL inherits from
- DAV:principal-collection-set
  - Collection of principals for this server

ACE properties:
- DAV:ace
  - Invert
  - DAV:principal
    - href to a principal URL
    - DAV:all
      - All users
    - DAV:authenticated
    - DAV:unauthenticated
    - DAV:property
      - If specified property value matches what we know, success.
        - DAV:owner matching (?)
    - DAV:self
      - Only for principal URLs if authenticated as that principal
  - grant or deny privilege:
    - See above for ACE privileges
  - DAV:protected
    - Any attempt to remove this MUST fail
  - DAV:inherited-acl-set
    - This ACE comes from resource in href
 
ACE ordering:
- DAV:deny-before-grant

Allowed ACE:
- DAV:grant-only
  - Deny ACEs are not supported
- DAV:no-invert
  - DAV:invert is not supported

Required principals
- DAV:required-principal
  - Defines that a principal must be defined for this property ACE
    - Usually for DAV:owner (?)
  - This is mentioned but its usage is not defined in the RFC.  I think it
    was meant to be removed... -wsanchez

DAV methods changes:
- OPTIONS
  - Must return literal "access-control"
- MOVE
  - Must move non-inherited and non-protected ACEs from DAV:acl
- COPY
  - Permissions must not be copied.  Default ACL may apply.
  - If wish to preserve ACL, retrieve before COPY, then reapply ACLs.
- DELETE
- LOCK
  - Only lock owner may modify ACEs

Access control methods:
- ACL
  - Allows updating of ACLs

Reporting:
- REPORT
  - Must support DAV:expand-property
- DAV:acl-principal-prop-set 
  - Required
  - Returns property requested for all principals
    - Client access?
- DAV:principal-match
  - Required
  - Lists which ACEs you are the principal on
- DAV:principal-property-search
  - Required
  - Does a search for principals who match the criteria
- DAV:principal-search-property-set
  - Required
  - Returns what properties may be searched on DAV:principal-property-search
