diff options
| author | Amar Tumballi <amar@gluster.com> | 2010-06-22 11:30:23 +0000 | 
|---|---|---|
| committer | Anand V. Avati <avati@dev.gluster.com> | 2010-06-24 10:32:07 -0700 | 
| commit | 487e9f1d59bbf7b37a30ceef5dbfd8ca77b94988 (patch) | |
| tree | b4731ee07277bdd36bb80c8d322f0cc6f67fc374 /xlators/protocol/rpc/rpc-lib/src/auth-glusterfs.c | |
| parent | 23bec6b810bfd0ae78eb9ba2e9c644c42a3da1da (diff) | |
moved 'auth_glusterfs' xdr definitions to rpc-lib
as authentication is part of RPC header and GlusterFS payload
comes at later stages
Signed-off-by: Amar Tumballi <amar@gluster.com>
Signed-off-by: Anand V. Avati <avati@dev.gluster.com>
BUG: 875 (Implement a new protocol to provide proper backward/forward compatibility)
URL: http://bugs.gluster.com/cgi-bin/bugzilla3/show_bug.cgi?id=875
Diffstat (limited to 'xlators/protocol/rpc/rpc-lib/src/auth-glusterfs.c')
| -rw-r--r-- | xlators/protocol/rpc/rpc-lib/src/auth-glusterfs.c | 89 | 
1 files changed, 88 insertions, 1 deletions
diff --git a/xlators/protocol/rpc/rpc-lib/src/auth-glusterfs.c b/xlators/protocol/rpc/rpc-lib/src/auth-glusterfs.c index 165e52a176b..e248bf142aa 100644 --- a/xlators/protocol/rpc/rpc-lib/src/auth-glusterfs.c +++ b/xlators/protocol/rpc/rpc-lib/src/auth-glusterfs.c @@ -28,7 +28,94 @@  #include "list.h"  #include "dict.h"  #include "xdr-rpc.h" -#include "glusterfs-xdr.h" +#include "xdr-common.h" + +bool_t +xdr_auth_glusterfs_parms (XDR *xdrs, auth_glusterfs_parms *objp) +{ +	register int32_t *buf; + +	int i; + +	if (xdrs->x_op == XDR_ENCODE) { +		 if (!xdr_u_quad_t (xdrs, &objp->lk_owner)) +			 return FALSE; +		buf = XDR_INLINE (xdrs, (4 +  16 )* BYTES_PER_XDR_UNIT); +		if (buf == NULL) { +			 if (!xdr_u_int (xdrs, &objp->pid)) +				 return FALSE; +			 if (!xdr_u_int (xdrs, &objp->uid)) +				 return FALSE; +			 if (!xdr_u_int (xdrs, &objp->gid)) +				 return FALSE; +			 if (!xdr_u_int (xdrs, &objp->ngrps)) +				 return FALSE; +			 if (!xdr_vector (xdrs, (char *)objp->groups, 16, +				sizeof (u_int), (xdrproc_t) xdr_u_int)) +				 return FALSE; +		} else { +			IXDR_PUT_U_LONG(buf, objp->pid); +			IXDR_PUT_U_LONG(buf, objp->uid); +			IXDR_PUT_U_LONG(buf, objp->gid); +			IXDR_PUT_U_LONG(buf, objp->ngrps); +			{ +				register u_int *genp; + +				for (i = 0, genp = objp->groups; +					i < 16; ++i) { +					IXDR_PUT_U_LONG(buf, *genp++); +				} +			} +		} +		return TRUE; +	} else if (xdrs->x_op == XDR_DECODE) { +		 if (!xdr_u_quad_t (xdrs, &objp->lk_owner)) +			 return FALSE; +		buf = XDR_INLINE (xdrs, (4 +  16 )* BYTES_PER_XDR_UNIT); +		if (buf == NULL) { +			 if (!xdr_u_int (xdrs, &objp->pid)) +				 return FALSE; +			 if (!xdr_u_int (xdrs, &objp->uid)) +				 return FALSE; +			 if (!xdr_u_int (xdrs, &objp->gid)) +				 return FALSE; +			 if (!xdr_u_int (xdrs, &objp->ngrps)) +				 return FALSE; +			 if (!xdr_vector (xdrs, (char *)objp->groups, 16, +				sizeof (u_int), (xdrproc_t) xdr_u_int)) +				 return FALSE; +		} else { +			objp->pid = IXDR_GET_U_LONG(buf); +			objp->uid = IXDR_GET_U_LONG(buf); +			objp->gid = IXDR_GET_U_LONG(buf); +			objp->ngrps = IXDR_GET_U_LONG(buf); +			{ +				register u_int *genp; + +				for (i = 0, genp = objp->groups; +					i < 16; ++i) { +					*genp++ = IXDR_GET_U_LONG(buf); +				} +			} +		} +	 return TRUE; +	} + +	 if (!xdr_u_quad_t (xdrs, &objp->lk_owner)) +		 return FALSE; +	 if (!xdr_u_int (xdrs, &objp->pid)) +		 return FALSE; +	 if (!xdr_u_int (xdrs, &objp->uid)) +		 return FALSE; +	 if (!xdr_u_int (xdrs, &objp->gid)) +		 return FALSE; +	 if (!xdr_u_int (xdrs, &objp->ngrps)) +		 return FALSE; +	 if (!xdr_vector (xdrs, (char *)objp->groups, 16, +		sizeof (u_int), (xdrproc_t) xdr_u_int)) +		 return FALSE; +	return TRUE; +}  ssize_t  xdr_to_glusterfs_auth (char *buf, struct auth_glusterfs_parms *req)  | 
