diff options
author | Chuck Lever <chuck.lever@oracle.com> | 2013-03-16 15:55:10 -0400 |
---|---|---|
committer | Trond Myklebust <Trond.Myklebust@netapp.com> | 2013-03-29 15:43:33 -0400 |
commit | a77c806fb9d097bb7733b64207cf52fc2c6438bb (patch) | |
tree | 198d62d0436f22e7288142eb7341880a1b99ee3e /fs/nfsd/nfs4xdr.c | |
parent | 83523d083a045a2069e5f3443d2e4f810a6e6d9a (diff) |
SUNRPC: Refactor nfsd4_do_encode_secinfo()
Clean up. This matches a similar API for the client side, and
keeps ULP fingers out the of the GSS mech switch.
Signed-off-by: Chuck Lever <chuck.lever@oracle.com>
Acked-by: J. Bruce Fields <bfields@redhat.com>
Signed-off-by: Trond Myklebust <Trond.Myklebust@netapp.com>
Diffstat (limited to 'fs/nfsd/nfs4xdr.c')
-rw-r--r-- | fs/nfsd/nfs4xdr.c | 24 |
1 files changed, 11 insertions, 13 deletions
diff --git a/fs/nfsd/nfs4xdr.c b/fs/nfsd/nfs4xdr.c index 01168865dd37..2a2745615b42 100644 --- a/fs/nfsd/nfs4xdr.c +++ b/fs/nfsd/nfs4xdr.c | |||
@@ -3138,10 +3138,9 @@ nfsd4_encode_rename(struct nfsd4_compoundres *resp, __be32 nfserr, struct nfsd4_ | |||
3138 | 3138 | ||
3139 | static __be32 | 3139 | static __be32 |
3140 | nfsd4_do_encode_secinfo(struct nfsd4_compoundres *resp, | 3140 | nfsd4_do_encode_secinfo(struct nfsd4_compoundres *resp, |
3141 | __be32 nfserr,struct svc_export *exp) | 3141 | __be32 nfserr, struct svc_export *exp) |
3142 | { | 3142 | { |
3143 | int i = 0; | 3143 | u32 i, nflavs; |
3144 | u32 nflavs; | ||
3145 | struct exp_flavor_info *flavs; | 3144 | struct exp_flavor_info *flavs; |
3146 | struct exp_flavor_info def_flavs[2]; | 3145 | struct exp_flavor_info def_flavs[2]; |
3147 | __be32 *p; | 3146 | __be32 *p; |
@@ -3172,30 +3171,29 @@ nfsd4_do_encode_secinfo(struct nfsd4_compoundres *resp, | |||
3172 | WRITE32(nflavs); | 3171 | WRITE32(nflavs); |
3173 | ADJUST_ARGS(); | 3172 | ADJUST_ARGS(); |
3174 | for (i = 0; i < nflavs; i++) { | 3173 | for (i = 0; i < nflavs; i++) { |
3175 | u32 flav = flavs[i].pseudoflavor; | 3174 | struct rpcsec_gss_info info; |
3176 | struct gss_api_mech *gm = gss_mech_get_by_pseudoflavor(flav); | ||
3177 | 3175 | ||
3178 | if (gm) { | 3176 | if (rpcauth_get_gssinfo(flavs[i].pseudoflavor, &info) == 0) { |
3179 | RESERVE_SPACE(4); | 3177 | RESERVE_SPACE(4); |
3180 | WRITE32(RPC_AUTH_GSS); | 3178 | WRITE32(RPC_AUTH_GSS); |
3181 | ADJUST_ARGS(); | 3179 | ADJUST_ARGS(); |
3182 | RESERVE_SPACE(4 + gm->gm_oid.len); | 3180 | RESERVE_SPACE(4 + info.oid.len); |
3183 | WRITE32(gm->gm_oid.len); | 3181 | WRITE32(info.oid.len); |
3184 | WRITEMEM(gm->gm_oid.data, gm->gm_oid.len); | 3182 | WRITEMEM(info.oid.data, info.oid.len); |
3185 | ADJUST_ARGS(); | 3183 | ADJUST_ARGS(); |
3186 | RESERVE_SPACE(4); | 3184 | RESERVE_SPACE(4); |
3187 | WRITE32(0); /* qop */ | 3185 | WRITE32(info.qop); |
3188 | ADJUST_ARGS(); | 3186 | ADJUST_ARGS(); |
3189 | RESERVE_SPACE(4); | 3187 | RESERVE_SPACE(4); |
3190 | WRITE32(gss_pseudoflavor_to_service(gm, flav)); | 3188 | WRITE32(info.service); |
3191 | ADJUST_ARGS(); | 3189 | ADJUST_ARGS(); |
3192 | gss_mech_put(gm); | ||
3193 | } else { | 3190 | } else { |
3194 | RESERVE_SPACE(4); | 3191 | RESERVE_SPACE(4); |
3195 | WRITE32(flav); | 3192 | WRITE32(flavs[i].pseudoflavor); |
3196 | ADJUST_ARGS(); | 3193 | ADJUST_ARGS(); |
3197 | } | 3194 | } |
3198 | } | 3195 | } |
3196 | |||
3199 | out: | 3197 | out: |
3200 | if (exp) | 3198 | if (exp) |
3201 | exp_put(exp); | 3199 | exp_put(exp); |