nfsd4: implement secinfo_no_name
Implementation of this operation is mandatory for NFSv4.1. Signed-off-by: J. Bruce Fields <bfields@redhat.com>
This commit is contained in:
		
					parent
					
						
							
								0ff7ab4671
							
						
					
				
			
			
				commit
				
					
						04f4ad16b2
					
				
			
		
					 4 changed files with 48 additions and 2 deletions
				
			
		| 
						 | 
				
			
			@ -779,6 +779,29 @@ nfsd4_secinfo(struct svc_rqst *rqstp, struct nfsd4_compound_state *cstate,
 | 
			
		|||
	return err;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static __be32
 | 
			
		||||
nfsd4_secinfo_no_name(struct svc_rqst *rqstp, struct nfsd4_compound_state *cstate,
 | 
			
		||||
	      struct nfsd4_secinfo_no_name *sin)
 | 
			
		||||
{
 | 
			
		||||
	__be32 err;
 | 
			
		||||
 | 
			
		||||
	switch (sin->sin_style) {
 | 
			
		||||
	case NFS4_SECINFO_STYLE4_CURRENT_FH:
 | 
			
		||||
		break;
 | 
			
		||||
	case NFS4_SECINFO_STYLE4_PARENT:
 | 
			
		||||
		err = nfsd4_do_lookupp(rqstp, &cstate->current_fh);
 | 
			
		||||
		if (err)
 | 
			
		||||
			return err;
 | 
			
		||||
		break;
 | 
			
		||||
	default:
 | 
			
		||||
		return nfserr_inval;
 | 
			
		||||
	}
 | 
			
		||||
	exp_get(cstate->current_fh.fh_export);
 | 
			
		||||
	sin->sin_exp = cstate->current_fh.fh_export;
 | 
			
		||||
	fh_put(&cstate->current_fh);
 | 
			
		||||
	return nfs_ok;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static __be32
 | 
			
		||||
nfsd4_setattr(struct svc_rqst *rqstp, struct nfsd4_compound_state *cstate,
 | 
			
		||||
	      struct nfsd4_setattr *setattr)
 | 
			
		||||
| 
						 | 
				
			
			@ -1327,6 +1350,10 @@ static struct nfsd4_operation nfsd4_ops[] = {
 | 
			
		|||
		.op_flags = ALLOWED_WITHOUT_FH,
 | 
			
		||||
		.op_name = "OP_RECLAIM_COMPLETE",
 | 
			
		||||
	},
 | 
			
		||||
	[OP_SECINFO_NO_NAME] = {
 | 
			
		||||
		.op_func = (nfsd4op_func)nfsd4_secinfo_no_name,
 | 
			
		||||
		.op_name = "OP_SECINFO_NO_NAME",
 | 
			
		||||
	},
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
static const char *nfsd4_op_name(unsigned opnum)
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -846,6 +846,17 @@ nfsd4_decode_secinfo(struct nfsd4_compoundargs *argp,
 | 
			
		|||
	DECODE_TAIL;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static __be32
 | 
			
		||||
nfsd4_decode_secinfo_no_name(struct nfsd4_compoundargs *argp,
 | 
			
		||||
		     struct nfsd4_secinfo_no_name *sin)
 | 
			
		||||
{
 | 
			
		||||
	DECODE_HEAD;
 | 
			
		||||
 | 
			
		||||
	READ_BUF(4);
 | 
			
		||||
	READ32(sin->sin_style);
 | 
			
		||||
	DECODE_TAIL;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static __be32
 | 
			
		||||
nfsd4_decode_setattr(struct nfsd4_compoundargs *argp, struct nfsd4_setattr *setattr)
 | 
			
		||||
{
 | 
			
		||||
| 
						 | 
				
			
			@ -1358,7 +1369,7 @@ static nfsd4_dec nfsd41_dec_ops[] = {
 | 
			
		|||
	[OP_LAYOUTCOMMIT]	= (nfsd4_dec)nfsd4_decode_notsupp,
 | 
			
		||||
	[OP_LAYOUTGET]		= (nfsd4_dec)nfsd4_decode_notsupp,
 | 
			
		||||
	[OP_LAYOUTRETURN]	= (nfsd4_dec)nfsd4_decode_notsupp,
 | 
			
		||||
	[OP_SECINFO_NO_NAME]	= (nfsd4_dec)nfsd4_decode_notsupp,
 | 
			
		||||
	[OP_SECINFO_NO_NAME]	= (nfsd4_dec)nfsd4_decode_secinfo_no_name,
 | 
			
		||||
	[OP_SEQUENCE]		= (nfsd4_dec)nfsd4_decode_sequence,
 | 
			
		||||
	[OP_SET_SSV]		= (nfsd4_dec)nfsd4_decode_notsupp,
 | 
			
		||||
	[OP_TEST_STATEID]	= (nfsd4_dec)nfsd4_decode_notsupp,
 | 
			
		||||
| 
						 | 
				
			
			@ -3162,7 +3173,7 @@ static nfsd4_enc nfsd4_enc_ops[] = {
 | 
			
		|||
	[OP_LAYOUTCOMMIT]	= (nfsd4_enc)nfsd4_encode_noop,
 | 
			
		||||
	[OP_LAYOUTGET]		= (nfsd4_enc)nfsd4_encode_noop,
 | 
			
		||||
	[OP_LAYOUTRETURN]	= (nfsd4_enc)nfsd4_encode_noop,
 | 
			
		||||
	[OP_SECINFO_NO_NAME]	= (nfsd4_enc)nfsd4_encode_noop,
 | 
			
		||||
	[OP_SECINFO_NO_NAME]	= (nfsd4_enc)nfsd4_encode_secinfo,
 | 
			
		||||
	[OP_SEQUENCE]		= (nfsd4_enc)nfsd4_encode_sequence,
 | 
			
		||||
	[OP_SET_SSV]		= (nfsd4_enc)nfsd4_encode_noop,
 | 
			
		||||
	[OP_TEST_STATEID]	= (nfsd4_enc)nfsd4_encode_noop,
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -311,6 +311,11 @@ struct nfsd4_secinfo {
 | 
			
		|||
	struct svc_export *si_exp;			/* response */
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
struct nfsd4_secinfo_no_name {
 | 
			
		||||
	u32 sin_style;					/* request */
 | 
			
		||||
	struct svc_export *sin_exp;			/* response */
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
struct nfsd4_setattr {
 | 
			
		||||
	stateid_t	sa_stateid;         /* request */
 | 
			
		||||
	u32		sa_bmval[3];        /* request */
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -136,6 +136,9 @@
 | 
			
		|||
#define SEQ4_STATUS_CB_PATH_DOWN_SESSION	0x00000200
 | 
			
		||||
#define SEQ4_STATUS_BACKCHANNEL_FAULT		0x00000400
 | 
			
		||||
 | 
			
		||||
#define NFS4_SECINFO_STYLE4_CURRENT_FH	0
 | 
			
		||||
#define NFS4_SECINFO_STYLE4_PARENT	1
 | 
			
		||||
 | 
			
		||||
#define NFS4_MAX_UINT64	(~(u64)0)
 | 
			
		||||
 | 
			
		||||
/* An NFS4 sessions server must support at least NFS4_MAX_OPS operations.
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue