diff options
author | J. Bruce Fields <bfields@redhat.com> | 2012-05-14 22:06:49 -0400 |
---|---|---|
committer | J. Bruce Fields <bfields@redhat.com> | 2012-05-31 20:29:58 -0400 |
commit | d5497fc693a446ce9100fcf4117c3f795ddfd0d2 (patch) | |
tree | 7254a8eb06629de6c9ac4b8dbe8e38c79c979af3 /fs | |
parent | 8fbba96e5b327665265ad02b7f331b68536828bf (diff) |
nfsd4: move rq_flavor into svc_cred
Move the rq_flavor into struct svc_cred, and use it in setclientid and
exchange_id comparisons as well.
Signed-off-by: J. Bruce Fields <bfields@redhat.com>
Diffstat (limited to 'fs')
-rw-r--r-- | fs/nfsd/auth.c | 2 | ||||
-rw-r--r-- | fs/nfsd/export.c | 6 | ||||
-rw-r--r-- | fs/nfsd/nfs4idmap.c | 4 | ||||
-rw-r--r-- | fs/nfsd/nfs4state.c | 6 |
4 files changed, 9 insertions, 9 deletions
diff --git a/fs/nfsd/auth.c b/fs/nfsd/auth.c index 79717a40daba..b42eaf3aac16 100644 --- a/fs/nfsd/auth.c +++ b/fs/nfsd/auth.c | |||
@@ -10,7 +10,7 @@ int nfsexp_flags(struct svc_rqst *rqstp, struct svc_export *exp) | |||
10 | struct exp_flavor_info *end = exp->ex_flavors + exp->ex_nflavors; | 10 | struct exp_flavor_info *end = exp->ex_flavors + exp->ex_nflavors; |
11 | 11 | ||
12 | for (f = exp->ex_flavors; f < end; f++) { | 12 | for (f = exp->ex_flavors; f < end; f++) { |
13 | if (f->pseudoflavor == rqstp->rq_flavor) | 13 | if (f->pseudoflavor == rqstp->rq_cred.cr_flavor) |
14 | return f->flags; | 14 | return f->flags; |
15 | } | 15 | } |
16 | return exp->ex_flags; | 16 | return exp->ex_flags; |
diff --git a/fs/nfsd/export.c b/fs/nfsd/export.c index ec16364f782e..ba233499b9a5 100644 --- a/fs/nfsd/export.c +++ b/fs/nfsd/export.c | |||
@@ -904,13 +904,13 @@ __be32 check_nfsd_access(struct svc_export *exp, struct svc_rqst *rqstp) | |||
904 | return 0; | 904 | return 0; |
905 | /* ip-address based client; check sec= export option: */ | 905 | /* ip-address based client; check sec= export option: */ |
906 | for (f = exp->ex_flavors; f < end; f++) { | 906 | for (f = exp->ex_flavors; f < end; f++) { |
907 | if (f->pseudoflavor == rqstp->rq_flavor) | 907 | if (f->pseudoflavor == rqstp->rq_cred.cr_flavor) |
908 | return 0; | 908 | return 0; |
909 | } | 909 | } |
910 | /* defaults in absence of sec= options: */ | 910 | /* defaults in absence of sec= options: */ |
911 | if (exp->ex_nflavors == 0) { | 911 | if (exp->ex_nflavors == 0) { |
912 | if (rqstp->rq_flavor == RPC_AUTH_NULL || | 912 | if (rqstp->rq_cred.cr_flavor == RPC_AUTH_NULL || |
913 | rqstp->rq_flavor == RPC_AUTH_UNIX) | 913 | rqstp->rq_cred.cr_flavor == RPC_AUTH_UNIX) |
914 | return 0; | 914 | return 0; |
915 | } | 915 | } |
916 | return nfserr_wrongsec; | 916 | return nfserr_wrongsec; |
diff --git a/fs/nfsd/nfs4idmap.c b/fs/nfsd/nfs4idmap.c index 286a7f8f2024..dae36f1dee95 100644 --- a/fs/nfsd/nfs4idmap.c +++ b/fs/nfsd/nfs4idmap.c | |||
@@ -605,7 +605,7 @@ numeric_name_to_id(struct svc_rqst *rqstp, int type, const char *name, u32 namel | |||
605 | static __be32 | 605 | static __be32 |
606 | do_name_to_id(struct svc_rqst *rqstp, int type, const char *name, u32 namelen, uid_t *id) | 606 | do_name_to_id(struct svc_rqst *rqstp, int type, const char *name, u32 namelen, uid_t *id) |
607 | { | 607 | { |
608 | if (nfs4_disable_idmapping && rqstp->rq_flavor < RPC_AUTH_GSS) | 608 | if (nfs4_disable_idmapping && rqstp->rq_cred.cr_flavor < RPC_AUTH_GSS) |
609 | if (numeric_name_to_id(rqstp, type, name, namelen, id)) | 609 | if (numeric_name_to_id(rqstp, type, name, namelen, id)) |
610 | return 0; | 610 | return 0; |
611 | /* | 611 | /* |
@@ -618,7 +618,7 @@ do_name_to_id(struct svc_rqst *rqstp, int type, const char *name, u32 namelen, u | |||
618 | static int | 618 | static int |
619 | do_id_to_name(struct svc_rqst *rqstp, int type, uid_t id, char *name) | 619 | do_id_to_name(struct svc_rqst *rqstp, int type, uid_t id, char *name) |
620 | { | 620 | { |
621 | if (nfs4_disable_idmapping && rqstp->rq_flavor < RPC_AUTH_GSS) | 621 | if (nfs4_disable_idmapping && rqstp->rq_cred.cr_flavor < RPC_AUTH_GSS) |
622 | return sprintf(name, "%u", id); | 622 | return sprintf(name, "%u", id); |
623 | return idmap_id_to_name(rqstp, type, id, name); | 623 | return idmap_id_to_name(rqstp, type, id, name); |
624 | } | 624 | } |
diff --git a/fs/nfsd/nfs4state.c b/fs/nfsd/nfs4state.c index 6dc0cfb37541..c743cdf51ebc 100644 --- a/fs/nfsd/nfs4state.c +++ b/fs/nfsd/nfs4state.c | |||
@@ -1177,6 +1177,7 @@ static int copy_cred(struct svc_cred *target, struct svc_cred *source) | |||
1177 | return -ENOMEM; | 1177 | return -ENOMEM; |
1178 | } else | 1178 | } else |
1179 | target->cr_principal = NULL; | 1179 | target->cr_principal = NULL; |
1180 | target->cr_flavor = source->cr_flavor; | ||
1180 | target->cr_uid = source->cr_uid; | 1181 | target->cr_uid = source->cr_uid; |
1181 | target->cr_gid = source->cr_gid; | 1182 | target->cr_gid = source->cr_gid; |
1182 | target->cr_group_info = source->cr_group_info; | 1183 | target->cr_group_info = source->cr_group_info; |
@@ -1213,11 +1214,11 @@ static bool groups_equal(struct group_info *g1, struct group_info *g2) | |||
1213 | return true; | 1214 | return true; |
1214 | } | 1215 | } |
1215 | 1216 | ||
1216 | /* XXX what about NGROUP */ | ||
1217 | static int | 1217 | static int |
1218 | same_creds(struct svc_cred *cr1, struct svc_cred *cr2) | 1218 | same_creds(struct svc_cred *cr1, struct svc_cred *cr2) |
1219 | { | 1219 | { |
1220 | if ((cr1->cr_uid != cr2->cr_uid) | 1220 | if ((cr1->cr_flavor != cr2->cr_flavor) |
1221 | || (cr1->cr_uid != cr2->cr_uid) | ||
1221 | || (cr1->cr_gid != cr2->cr_gid) | 1222 | || (cr1->cr_gid != cr2->cr_gid) |
1222 | || !groups_equal(cr1->cr_group_info, cr2->cr_group_info)) | 1223 | || !groups_equal(cr1->cr_group_info, cr2->cr_group_info)) |
1223 | return false; | 1224 | return false; |
@@ -1299,7 +1300,6 @@ static struct nfs4_client *create_client(struct xdr_netobj name, char *recdir, | |||
1299 | rpc_init_wait_queue(&clp->cl_cb_waitq, "Backchannel slot table"); | 1300 | rpc_init_wait_queue(&clp->cl_cb_waitq, "Backchannel slot table"); |
1300 | copy_verf(clp, verf); | 1301 | copy_verf(clp, verf); |
1301 | rpc_copy_addr((struct sockaddr *) &clp->cl_addr, sa); | 1302 | rpc_copy_addr((struct sockaddr *) &clp->cl_addr, sa); |
1302 | clp->cl_flavor = rqstp->rq_flavor; | ||
1303 | gen_confirm(clp); | 1303 | gen_confirm(clp); |
1304 | clp->cl_cb_session = NULL; | 1304 | clp->cl_cb_session = NULL; |
1305 | return clp; | 1305 | return clp; |