nfsd: implement machine credential support for some operations
This addresses the conundrum referenced in RFC5661 18.35.3, and will allow clients to return state to the server using the machine credentials. The biggest part of the problem is that we need to allow the client to send a compound op with integrity/privacy on mounts that don't have it enabled. Add server support for properly decoding and using spo_must_enforce and spo_must_allow bits. Add support for machine credentials to be used for CLOSE, OPEN_DOWNGRADE, LOCKU, DELEGRETURN, and TEST/FREE STATEID. Implement a check so as to not throw WRONGSEC errors when these operations are used if integrity/privacy isn't turned on. Without this, Linux clients with credentials that expired while holding delegations were getting stuck in an endless loop. Signed-off-by: Andrew Elble <aweits@rit.edu> Reviewed-by: Jeff Layton <jlayton@redhat.com> Signed-off-by: J. Bruce Fields <bfields@redhat.com>
This commit is contained in:

committed by
J. Bruce Fields

parent
dedeb13f9e
commit
ed94164398
@@ -59,6 +59,7 @@ struct nfsd4_compound_state {
|
||||
struct nfsd4_session *session;
|
||||
struct nfsd4_slot *slot;
|
||||
int data_offset;
|
||||
bool spo_must_allowed;
|
||||
size_t iovlen;
|
||||
u32 minorversion;
|
||||
__be32 status;
|
||||
@@ -403,6 +404,8 @@ struct nfsd4_exchange_id {
|
||||
clientid_t clientid;
|
||||
u32 seqid;
|
||||
int spa_how;
|
||||
u32 spo_must_enforce[3];
|
||||
u32 spo_must_allow[3];
|
||||
};
|
||||
|
||||
struct nfsd4_sequence {
|
||||
|
Reference in New Issue
Block a user