On 06/26/2009 11:35 AM, Jeffrey Altman wrote:
Marc:

Thanks for writing these issues up for our review.   I need to think
about the desired behaviors a bit more but I want to add a few items
into the mix for consideration by the group.

Hi Jeff, thanks for the feedback.

    1. The existing RXAFS_FetchACL and RXAFS_StoreACL RPCs are specified
       as accepting only a directory FID.  While it is true that the
       OpenAFS file server will accept any FID for the RXAFS_FetchACL
       call and always returns the ACL of the directory, this behavior
       should not be relied upon.  As part of this work new

Are there documents somewhere that specify the existing protocol with that level of detail? With only implementations as a guide, it's often not obvious to distinguish what is protocol and what is an implementation choice. Seems to me that we have to allow the existing FetchACL RPC to refer to files, otherwise old clients will have no way to determine the effective access rights on a file.

Can we agree at a minimum that for an old client:
- "fs la <file>" should show the effective rights on the file - i.e. shows an ACL that accurately predicts the failure/success of operations performed by this client - "fs sa <file>" should either fail (ENOTDIR) as it does now, or set the effective ACL on the file.

       RXAFS_FetchACL2 and RXAFS_StoreACL2 RPCs should be added to
       support the new functionality.  If the old RPCs are called, the
       old behavior should be expected.   This permits the new
       RXAFS_FetchACL2 response to not only return the current ACL that
       applies to the specified object but also whether or not that ACL
       is inherited from a parent.  The new RXAFS_StoreACL2 could make
       available options that permit the client to specify things like
       "inherit from parent".  The use of new and old RPCs also provide a
       method for new clients to behavior properly with old servers.

Exactly what's needed in those new RPCs will depend on the inheritance model, but yes, having new RPCs would allow for more complex interactions.

    2. I believe that the inheritance model that we select must be one
       that is going to reduce the confusion for end users that may be
       forced to use a mixture of old and new clients.  The old clients
       will be able to read the current ACL on an object whether it is
       inherited from the directory or associated specifically with the
       object.

So you're saying that the existing FetchACL RPC would be allowed to specify a file object, and the server would return the _effective_ ACL, regardless of whether it's stored as-is or computed at the other end.
Agreed, that's pretty much what my current implementation does.

       However, the old client is not going to be in a position
       to alter the value of an ACL that isn't associated with a
       directory.

Well, if we also consider that the existing StoreACL RPC can specify a file object, then an old client could be allowed to modify a file ACL. The server would do what's needed on its side (depending on the inheritance model) to achieve the requested effective ACL. This might be tricky if the model is more complex. It's probably acceptable to restrict storing file ACLs to new clients, but it would be nice if it worked for old ones as well.

       There is not going to be a perfect solution but I
       believe the "inherit until set" model is the one that will work
       best for users that are only using "old clients".  We may need to
       have a restriction that old clients while they can see the value
       of a per-file ACL, they can't change it even though they can
       change the value of the directory's ACL.

The problem I saw with that model (inherit until set) is that the result of a StoreACL on a directory for an old client won't be well defined wrt what that client can see. As a principle I think that even an old client should have the means to accurately predict the outcome of a StoreACL operation on files in that directory. I know jhutz touched on this in another mail - I'll have a look.
Also, we could allow old clients to set ACLs (see above).

    3. Regarding hard links from multiple directories.  If we select a
       "inherit until set" model, we would either need to prevent the
       creation of such hard links until a per file acl was set or
       automatically create a per file acl based upon the previously
       inherited acl.

Agreed, allowing hard links would imply insuring that the permissions are the same for both locations, either by denying the operation in some cases or adjusting the ACL in the target location so that it matches.

    4. I hope the issue surrounding FetchStatus permissions is a
       non-issue.  I'm not as familiar with the behavior of the Unix
       cache manager but in the Windows cache manager the described
       behavior is an optimization to prevent issuing FetchStatus
       requests that can reasonably be determined to fail.  The access
       rights are maintained per object so there will be no inconsistency
       if the FetchStatus on two different objects in the same directory
       provide different access rights.

The issue here is similar to the one with file data (see below). The inconsistency is not that different objects in a directory may have different access rights, but rather that FetchStatus will behave differently for the SAME object depending on the current cache contents.

    5. VLF_DFSFILESET is used in the Unix cache manager.  It is not
       present in the Windows cache manager.  I really do not like the
       idea that we will need to rely on setting flags in the VLDB in
       order to permit proper use of per-file acls.  Adding DFS
       functionality to make it happen also just seems wrong.   Can you
       explain a bit more about what the behaviors of the Unix cache
       manager are if this flag is set or not set?  A quick look shows
       that there are more behavior changes than just access rights.

The problematic behaviour is that the cache manager will allow access to cached file data based on the directory permissions. So a user with no rights to a particular file will be able to read its contents if another user on the same system has already read it and brought it into the cache. This violates the file ACL, and makes the result vary depending on cache contents. The DFS flag may be the only hook we have to adjust this for existing clients.

I haven't tested with the Windows client yet (I will do so), but with a quick look at the code I suspect we'll have the same issue, with perhaps no workaround - it's clear that the DFSFILESET bit won't help us there. That's a problem.

    6. I would like to know what kAFS and Arla do.

Yes it would be good to do testing with them as well. I don't have them setup currently, but I have experimented with kAFS in the past.

Marc

_______________________________________________
AFS3-standardization mailing list
[email protected]
http://michigan-openafs-lists.central.org/mailman/listinfo/afs3-standardization

Reply via email to