nfsv4.1 Add SECINFO[_NO_NAME] operations

Signed-off-by: Ronnie Sahlberg <ronniesahlberg@gmail.com>
master
Ronnie Sahlberg 2020-06-08 14:42:16 +10:00
parent da2a3dd9d3
commit c5d022b638
3 changed files with 218 additions and 12 deletions

View File

@ -2453,6 +2453,87 @@ zdr_SAVEFH4res (ZDR *zdrs, SAVEFH4res *objp)
return TRUE;
}
uint32_t
zdr_SECINFO4args (ZDR *zdrs, SECINFO4args *objp)
{
if (!zdr_component4 (zdrs, &objp->name))
return FALSE;
return TRUE;
}
uint32_t
zdr_rpc_gss_svc_t (ZDR *zdrs, rpc_gss_svc_t *objp)
{
if (!zdr_enum (zdrs, (enum_t *) objp))
return FALSE;
return TRUE;
}
uint32_t
zdr_rpcsec_gss_info (ZDR *zdrs, rpcsec_gss_info *objp)
{
if (!zdr_sec_oid4 (zdrs, &objp->oid))
return FALSE;
if (!zdr_qop4 (zdrs, &objp->qop))
return FALSE;
if (!zdr_rpc_gss_svc_t (zdrs, &objp->service))
return FALSE;
return TRUE;
}
uint32_t
zdr_secinfo4 (ZDR *zdrs, secinfo4 *objp)
{
if (!zdr_uint32_t (zdrs, &objp->flavor))
return FALSE;
switch (objp->flavor) {
case RPCSEC_GSS:
if (!zdr_rpcsec_gss_info (zdrs, &objp->secinfo4_u.flavor_info))
return FALSE;
break;
default:
break;
}
return TRUE;
}
uint32_t
zdr_SECINFO4resok (ZDR *zdrs, SECINFO4resok *objp)
{
if (!zdr_array (zdrs, (char **)&objp->SECINFO4resok_val, (u_int *) &objp->SECINFO4resok_len, ~0,
sizeof (secinfo4), (zdrproc_t) zdr_secinfo4))
return FALSE;
return TRUE;
}
uint32_t
zdr_SECINFO4res (ZDR *zdrs, SECINFO4res *objp)
{
if (!zdr_nfsstat4 (zdrs, &objp->status))
return FALSE;
switch (objp->status) {
case NFS4_OK:
if (!zdr_SECINFO4resok (zdrs, &objp->SECINFO4res_u.resok4))
return FALSE;
break;
default:
break;
}
return TRUE;
}
uint32_t
zdr_SETATTR4args (ZDR *zdrs, SETATTR4args *objp)
{
@ -3255,6 +3336,36 @@ zdr_LAYOUTRETURN4res (ZDR *zdrs, LAYOUTRETURN4res *objp)
return TRUE;
}
uint32_t
zdr_secinfo_style4 (ZDR *zdrs, secinfo_style4 *objp)
{
if (!zdr_enum (zdrs, (enum_t *) objp))
return FALSE;
return TRUE;
}
uint32_t
zdr_SECINFO_NO_NAME4args (ZDR *zdrs, SECINFO_NO_NAME4args *objp)
{
if (!zdr_secinfo_style4 (zdrs, objp))
return FALSE;
return TRUE;
}
uint32_t
zdr_SECINFO_NO_NAME4res (ZDR *zdrs, SECINFO_NO_NAME4res *objp)
{
if (!zdr_SECINFO4res (zdrs, objp))
return FALSE;
return TRUE;
}
uint32_t
zdr_SEQUENCE4args (ZDR *zdrs, SEQUENCE4args *objp)
{
@ -3637,6 +3748,10 @@ zdr_nfs_argop4 (ZDR *zdrs, nfs_argop4 *objp)
break;
case OP_SAVEFH:
break;
case OP_SECINFO:
if (!zdr_SECINFO4args (zdrs, &objp->nfs_argop4_u.opsecinfo))
return FALSE;
break;
case OP_SETATTR:
if (!zdr_SETATTR4args (zdrs, &objp->nfs_argop4_u.opsetattr))
return FALSE;
@ -3697,6 +3812,10 @@ zdr_nfs_argop4 (ZDR *zdrs, nfs_argop4 *objp)
if (!zdr_LAYOUTRETURN4args (zdrs, &objp->nfs_argop4_u.oplayoutreturn))
return FALSE;
break;
case OP_SECINFO_NO_NAME:
if (!zdr_SECINFO_NO_NAME4args (zdrs, &objp->nfs_argop4_u.opsecinfononame))
return FALSE;
break;
case OP_SEQUENCE:
if (!zdr_SEQUENCE4args (zdrs, &objp->nfs_argop4_u.opsequence))
return FALSE;
@ -3857,6 +3976,10 @@ zdr_nfs_resop4 (ZDR *zdrs, nfs_resop4 *objp)
if (!zdr_SAVEFH4res (zdrs, &objp->nfs_resop4_u.opsavefh))
return FALSE;
break;
case OP_SECINFO:
if (!zdr_SECINFO4res (zdrs, &objp->nfs_resop4_u.opsecinfo))
return FALSE;
break;
case OP_SETATTR:
if (!zdr_SETATTR4res (zdrs, &objp->nfs_resop4_u.opsetattr))
return FALSE;
@ -3917,6 +4040,10 @@ zdr_nfs_resop4 (ZDR *zdrs, nfs_resop4 *objp)
if (!zdr_LAYOUTRETURN4res (zdrs, &objp->nfs_resop4_u.oplayoutreturn))
return FALSE;
break;
case OP_SECINFO_NO_NAME:
if (!zdr_SECINFO_NO_NAME4res (zdrs, &objp->nfs_resop4_u.opsecinfononame))
return FALSE;
break;
case OP_SEQUENCE:
if (!zdr_SEQUENCE4res (zdrs, &objp->nfs_resop4_u.opsequence))
return FALSE;

View File

@ -1232,6 +1232,47 @@ struct SAVEFH4res {
};
typedef struct SAVEFH4res SAVEFH4res;
struct SECINFO4args {
component4 name;
};
typedef struct SECINFO4args SECINFO4args;
enum rpc_gss_svc_t {
RPC_GSS_SVC_NONE = 1,
RPC_GSS_SVC_INTEGRITY = 2,
RPC_GSS_SVC_PRIVACY = 3,
};
typedef enum rpc_gss_svc_t rpc_gss_svc_t;
struct rpcsec_gss_info {
sec_oid4 oid;
qop4 qop;
rpc_gss_svc_t service;
};
typedef struct rpcsec_gss_info rpcsec_gss_info;
#define RPCSEC_GSS 6
struct secinfo4 {
uint32_t flavor;
union {
rpcsec_gss_info flavor_info;
} secinfo4_u;
};
typedef struct secinfo4 secinfo4;
typedef struct {
u_int SECINFO4resok_len;
secinfo4 *SECINFO4resok_val;
} SECINFO4resok;
struct SECINFO4res {
nfsstat4 status;
union {
SECINFO4resok resok4;
} SECINFO4res_u;
};
typedef struct SECINFO4res SECINFO4res;
struct SETATTR4args {
stateid4 stateid;
fattr4 obj_attributes;
@ -1632,6 +1673,16 @@ struct LAYOUTRETURN4res {
};
typedef struct LAYOUTRETURN4res LAYOUTRETURN4res;
enum secinfo_style4 {
SECINFO_STYLE4_CURRENT_FH = 0,
SECINFO_STYLE4_PARENT = 1,
};
typedef enum secinfo_style4 secinfo_style4;
typedef secinfo_style4 SECINFO_NO_NAME4args;
typedef SECINFO4res SECINFO_NO_NAME4res;
struct SEQUENCE4args {
sessionid4 sa_sessionid;
sequenceid4 sa_sequenceid;
@ -1828,6 +1879,7 @@ enum nfs_opnum4 {
OP_LAYOUTCOMMIT = 49,
OP_LAYOUTGET = 50,
OP_LAYOUTRETURN = 51,
OP_SECINFO_NO_NAME = 52,
OP_SEQUENCE = 53,
OP_SET_SSV = 54,
OP_TEST_STATEID = 55,
@ -1864,6 +1916,7 @@ struct nfs_argop4 {
REMOVE4args opremove;
RENAME4args oprename;
RENEW4args oprenew;
SECINFO4args opsecinfo;
SETATTR4args opsetattr;
SETCLIENTID4args opsetclientid;
SETCLIENTID_CONFIRM4args opsetclientid_confirm;
@ -1879,6 +1932,7 @@ struct nfs_argop4 {
LAYOUTCOMMIT4args oplayoutcommit;
LAYOUTGET4args oplayoutget;
LAYOUTRETURN4args oplayoutreturn;
SECINFO_NO_NAME4args opsecinfononame;
SEQUENCE4args opsequence;
SET_SSV4args opsetssv;
TEST_STATEID4args opteststateid;
@ -1922,6 +1976,7 @@ struct nfs_resop4 {
RENEW4res oprenew;
RESTOREFH4res oprestorefh;
SAVEFH4res opsavefh;
SECINFO4res opsecinfo;
SETATTR4res opsetattr;
SETCLIENTID4res opsetclientid;
SETCLIENTID_CONFIRM4res opsetclientid_confirm;
@ -1937,6 +1992,7 @@ struct nfs_resop4 {
LAYOUTCOMMIT4res oplayoutcommit;
LAYOUTGET4res oplayoutget;
LAYOUTRETURN4res oplayoutreturn;
SECINFO_NO_NAME4res opsecinfononame;
SEQUENCE4res opsequence;
SET_SSV4res opsetssv;
TEST_STATEID4res opteststateid;
@ -2298,6 +2354,12 @@ extern uint32_t zdr_RENEW4args (ZDR *, RENEW4args*);
extern uint32_t zdr_RENEW4res (ZDR *, RENEW4res*);
extern uint32_t zdr_RESTOREFH4res (ZDR *, RESTOREFH4res*);
extern uint32_t zdr_SAVEFH4res (ZDR *, SAVEFH4res*);
extern uint32_t zdr_SECINFO4args (ZDR *, SECINFO4args*);
extern uint32_t zdr_rpc_gss_svc_t (ZDR *, rpc_gss_svc_t*);
extern uint32_t zdr_rpcsec_gss_info (ZDR *, rpcsec_gss_info*);
extern uint32_t zdr_secinfo4 (ZDR *, secinfo4*);
extern uint32_t zdr_SECINFO4resok (ZDR *, SECINFO4resok*);
extern uint32_t zdr_SECINFO4res (ZDR *, SECINFO4res*);
extern uint32_t zdr_SETATTR4args (ZDR *, SETATTR4args*);
extern uint32_t zdr_SETATTR4res (ZDR *, SETATTR4res*);
extern uint32_t zdr_SETCLIENTID4args (ZDR *, SETCLIENTID4args*);
@ -2349,6 +2411,9 @@ extern uint32_t zdr_layoutreturn4 (ZDR *, layoutreturn4*);
extern uint32_t zdr_LAYOUTRETURN4args (ZDR *, LAYOUTRETURN4args*);
extern uint32_t zdr_layoutreturn_stateid (ZDR *, layoutreturn_stateid*);
extern uint32_t zdr_LAYOUTRETURN4res (ZDR *, LAYOUTRETURN4res*);
extern uint32_t zdr_secinfo_style4 (ZDR *, secinfo_style4*);
extern uint32_t zdr_SECINFO_NO_NAME4args (ZDR *, SECINFO_NO_NAME4args*);
extern uint32_t zdr_SECINFO_NO_NAME4res (ZDR *, SECINFO_NO_NAME4res*);
extern uint32_t zdr_SEQUENCE4args (ZDR *, SEQUENCE4args*);
extern uint32_t zdr_SEQUENCE4resok (ZDR *, SEQUENCE4resok*);
extern uint32_t zdr_SEQUENCE4res (ZDR *, SEQUENCE4res*);
@ -2586,6 +2651,12 @@ extern uint32_t zdr_RENEW4args ();
extern uint32_t zdr_RENEW4res ();
extern uint32_t zdr_RESTOREFH4res ();
extern uint32_t zdr_SAVEFH4res ();
extern uint32_t zdr_SECINFO4args ();
extern uint32_t zdr_rpc_gss_svc_t ();
extern uint32_t zdr_rpcsec_gss_info ();
extern uint32_t zdr_secinfo4 ();
extern uint32_t zdr_SECINFO4resok ();
extern uint32_t zdr_SECINFO4res ();
extern uint32_t zdr_SETATTR4args ();
extern uint32_t zdr_SETATTR4res ();
extern uint32_t zdr_SETCLIENTID4args ();
@ -2637,6 +2708,9 @@ extern uint32_t zdr_layoutreturn4 ();
extern uint32_t zdr_LAYOUTRETURN4args ();
extern uint32_t zdr_layoutreturn_stateid ();
extern uint32_t zdr_LAYOUTRETURN4res ();
extern uint32_t zdr_secinfo_style4 ();
extern uint32_t zdr_SECINFO_NO_NAME4args ();
extern uint32_t zdr_SECINFO_NO_NAME4res ();
extern uint32_t zdr_SEQUENCE4args ();
extern uint32_t zdr_SEQUENCE4resok ();
extern uint32_t zdr_SEQUENCE4res ();

View File

@ -1297,19 +1297,13 @@ struct SAVEFH4res {
nfsstat4 status;
};
#if 0
/*
* SECINFO: Obtain Available Security Mechanisms
*/
struct SECINFO4args {
/* CURRENT_FH: directory */
component4 name;
};
/*
* From RFC 2203
*/
enum rpc_gss_svc_t {
RPC_GSS_SVC_NONE = 1,
RPC_GSS_SVC_INTEGRITY = 2,
@ -1322,7 +1316,8 @@ struct rpcsec_gss_info {
rpc_gss_svc_t service;
};
/* RPCSEC_GSS has a value of '6' - See RFC 2203 */
const RPCSEC_GSS = 6;
union secinfo4 switch (uint32_t flavor) {
case RPCSEC_GSS:
rpcsec_gss_info flavor_info;
@ -1338,7 +1333,6 @@ union SECINFO4res switch (nfsstat4 status) {
default:
void;
};
#endif
/*
* SETATTR: Set attributes
@ -1746,6 +1740,18 @@ default:
void;
};
/*
* SECINFO_NO_NAME
*/
enum secinfo_style4 {
SECINFO_STYLE4_CURRENT_FH = 0,
SECINFO_STYLE4_PARENT = 1
};
typedef secinfo_style4 SECINFO_NO_NAME4args;
typedef SECINFO4res SECINFO_NO_NAME4res;
/*
* SEQUENCE
*/
@ -1936,6 +1942,7 @@ enum nfs_opnum4 {
OP_LAYOUTCOMMIT = 49,
OP_LAYOUTGET = 50,
OP_LAYOUTRETURN = 51,
OP_SECINFO_NO_NAME = 52,
OP_SEQUENCE = 53,
OP_SET_SSV = 54,
OP_TEST_STATEID = 55,
@ -1976,9 +1983,7 @@ union nfs_argop4 switch (nfs_opnum4 argop) {
case OP_RENEW: RENEW4args oprenew;
case OP_RESTOREFH: void;
case OP_SAVEFH: void;
#if 0
case OP_SECINFO: SECINFO4args opsecinfo;
#endif
case OP_SETATTR: SETATTR4args opsetattr;
case OP_SETCLIENTID: SETCLIENTID4args opsetclientid;
case OP_SETCLIENTID_CONFIRM: SETCLIENTID_CONFIRM4args
@ -1996,6 +2001,7 @@ union nfs_argop4 switch (nfs_opnum4 argop) {
case OP_LAYOUTCOMMIT: LAYOUTCOMMIT4args oplayoutcommit;
case OP_LAYOUTGET: LAYOUTGET4args oplayoutget;
case OP_LAYOUTRETURN: LAYOUTRETURN4args oplayoutreturn;
case OP_SECINFO_NO_NAME: SECINFO_NO_NAME4args opsecinfononame;
case OP_SEQUENCE: SEQUENCE4args opsequence;
case OP_SET_SSV: SET_SSV4args opsetssv;
case OP_TEST_STATEID: TEST_STATEID4args opteststateid;
@ -2036,9 +2042,7 @@ union nfs_resop4 switch (nfs_opnum4 resop){
case OP_RENEW: RENEW4res oprenew;
case OP_RESTOREFH: RESTOREFH4res oprestorefh;
case OP_SAVEFH: SAVEFH4res opsavefh;
#if 0
case OP_SECINFO: SECINFO4res opsecinfo;
#endif
case OP_SETATTR: SETATTR4res opsetattr;
case OP_SETCLIENTID: SETCLIENTID4res opsetclientid;
case OP_SETCLIENTID_CONFIRM: SETCLIENTID_CONFIRM4res
@ -2056,6 +2060,7 @@ union nfs_resop4 switch (nfs_opnum4 resop){
case OP_LAYOUTCOMMIT: LAYOUTCOMMIT4res oplayoutcommit;
case OP_LAYOUTGET: LAYOUTGET4res oplayoutget;
case OP_LAYOUTRETURN: LAYOUTRETURN4res oplayoutreturn;
case OP_SECINFO_NO_NAME: SECINFO_NO_NAME4res opsecinfononame;
case OP_SEQUENCE: SEQUENCE4res opsequence;
case OP_SET_SSV: SET_SSV4res opsetssv;
case OP_TEST_STATEID: TEST_STATEID4res opteststateid;