diff options
-rw-r--r-- | include/linux/sunrpc/auth.h | 1 | ||||
-rw-r--r-- | include/linux/sunrpc/auth_gss.h | 5 | ||||
-rw-r--r-- | net/sunrpc/auth.c | 24 | ||||
-rw-r--r-- | net/sunrpc/auth_gss/auth_gss.c | 6 | ||||
-rw-r--r-- | net/sunrpc/auth_unix.c | 10 |
5 files changed, 22 insertions, 24 deletions
diff --git a/include/linux/sunrpc/auth.h b/include/linux/sunrpc/auth.h index e606c2804685..d5bfc67461fc 100644 --- a/include/linux/sunrpc/auth.h +++ b/include/linux/sunrpc/auth.h | |||
@@ -127,6 +127,7 @@ int rpcauth_unregister(const struct rpc_authops *); | |||
127 | struct rpc_auth * rpcauth_create(rpc_authflavor_t, struct rpc_clnt *); | 127 | struct rpc_auth * rpcauth_create(rpc_authflavor_t, struct rpc_clnt *); |
128 | void rpcauth_release(struct rpc_auth *); | 128 | void rpcauth_release(struct rpc_auth *); |
129 | struct rpc_cred * rpcauth_lookup_credcache(struct rpc_auth *, struct auth_cred *, int); | 129 | struct rpc_cred * rpcauth_lookup_credcache(struct rpc_auth *, struct auth_cred *, int); |
130 | void rpcauth_init_cred(struct rpc_cred *, const struct auth_cred *, struct rpc_auth *, const struct rpc_credops *); | ||
130 | struct rpc_cred * rpcauth_lookupcred(struct rpc_auth *, int); | 131 | struct rpc_cred * rpcauth_lookupcred(struct rpc_auth *, int); |
131 | struct rpc_cred * rpcauth_bindcred(struct rpc_task *); | 132 | struct rpc_cred * rpcauth_bindcred(struct rpc_task *); |
132 | void rpcauth_holdcred(struct rpc_task *); | 133 | void rpcauth_holdcred(struct rpc_task *); |
diff --git a/include/linux/sunrpc/auth_gss.h b/include/linux/sunrpc/auth_gss.h index 2db2fbf34947..0bd1d06777b9 100644 --- a/include/linux/sunrpc/auth_gss.h +++ b/include/linux/sunrpc/auth_gss.h | |||
@@ -85,11 +85,6 @@ struct gss_cred { | |||
85 | struct gss_upcall_msg *gc_upcall; | 85 | struct gss_upcall_msg *gc_upcall; |
86 | }; | 86 | }; |
87 | 87 | ||
88 | #define gc_uid gc_base.cr_uid | ||
89 | #define gc_count gc_base.cr_count | ||
90 | #define gc_flags gc_base.cr_flags | ||
91 | #define gc_expire gc_base.cr_expire | ||
92 | |||
93 | #endif /* __KERNEL__ */ | 88 | #endif /* __KERNEL__ */ |
94 | #endif /* _LINUX_SUNRPC_AUTH_GSS_H */ | 89 | #endif /* _LINUX_SUNRPC_AUTH_GSS_H */ |
95 | 90 | ||
diff --git a/net/sunrpc/auth.c b/net/sunrpc/auth.c index d3f0f944c0b5..2156327da45b 100644 --- a/net/sunrpc/auth.c +++ b/net/sunrpc/auth.c | |||
@@ -264,13 +264,9 @@ retry: | |||
264 | 264 | ||
265 | if (!cred) { | 265 | if (!cred) { |
266 | new = auth->au_ops->crcreate(auth, acred, flags); | 266 | new = auth->au_ops->crcreate(auth, acred, flags); |
267 | if (!IS_ERR(new)) { | 267 | if (!IS_ERR(new)) |
268 | #ifdef RPC_DEBUG | ||
269 | new->cr_magic = RPCAUTH_CRED_MAGIC; | ||
270 | #endif | ||
271 | goto retry; | 268 | goto retry; |
272 | } else | 269 | cred = new; |
273 | cred = new; | ||
274 | } else if ((cred->cr_flags & RPCAUTH_CRED_NEW) | 270 | } else if ((cred->cr_flags & RPCAUTH_CRED_NEW) |
275 | && cred->cr_ops->cr_init != NULL | 271 | && cred->cr_ops->cr_init != NULL |
276 | && !(flags & RPCAUTH_LOOKUP_NEW)) { | 272 | && !(flags & RPCAUTH_LOOKUP_NEW)) { |
@@ -302,6 +298,22 @@ rpcauth_lookupcred(struct rpc_auth *auth, int flags) | |||
302 | return ret; | 298 | return ret; |
303 | } | 299 | } |
304 | 300 | ||
301 | void | ||
302 | rpcauth_init_cred(struct rpc_cred *cred, const struct auth_cred *acred, | ||
303 | struct rpc_auth *auth, const struct rpc_credops *ops) | ||
304 | { | ||
305 | INIT_HLIST_NODE(&cred->cr_hash); | ||
306 | atomic_set(&cred->cr_count, 1); | ||
307 | cred->cr_auth = auth; | ||
308 | cred->cr_ops = ops; | ||
309 | cred->cr_expire = jiffies; | ||
310 | #ifdef RPC_DEBUG | ||
311 | cred->cr_magic = RPCAUTH_CRED_MAGIC; | ||
312 | #endif | ||
313 | cred->cr_uid = acred->uid; | ||
314 | } | ||
315 | EXPORT_SYMBOL(rpcauth_init_cred); | ||
316 | |||
305 | struct rpc_cred * | 317 | struct rpc_cred * |
306 | rpcauth_bindcred(struct rpc_task *task) | 318 | rpcauth_bindcred(struct rpc_task *task) |
307 | { | 319 | { |
diff --git a/net/sunrpc/auth_gss/auth_gss.c b/net/sunrpc/auth_gss/auth_gss.c index 177a9e413c0a..766de0a41b22 100644 --- a/net/sunrpc/auth_gss/auth_gss.c +++ b/net/sunrpc/auth_gss/auth_gss.c | |||
@@ -727,15 +727,11 @@ gss_create_cred(struct rpc_auth *auth, struct auth_cred *acred, int flags) | |||
727 | if (!(cred = kzalloc(sizeof(*cred), GFP_KERNEL))) | 727 | if (!(cred = kzalloc(sizeof(*cred), GFP_KERNEL))) |
728 | goto out_err; | 728 | goto out_err; |
729 | 729 | ||
730 | atomic_set(&cred->gc_count, 1); | 730 | rpcauth_init_cred(&cred->gc_base, acred, auth, &gss_credops); |
731 | cred->gc_uid = acred->uid; | ||
732 | /* | 731 | /* |
733 | * Note: in order to force a call to call_refresh(), we deliberately | 732 | * Note: in order to force a call to call_refresh(), we deliberately |
734 | * fail to flag the credential as RPCAUTH_CRED_UPTODATE. | 733 | * fail to flag the credential as RPCAUTH_CRED_UPTODATE. |
735 | */ | 734 | */ |
736 | cred->gc_flags = 0; | ||
737 | cred->gc_base.cr_auth = auth; | ||
738 | cred->gc_base.cr_ops = &gss_credops; | ||
739 | cred->gc_base.cr_flags = RPCAUTH_CRED_NEW; | 735 | cred->gc_base.cr_flags = RPCAUTH_CRED_NEW; |
740 | cred->gc_service = gss_auth->service; | 736 | cred->gc_service = gss_auth->service; |
741 | return &cred->gc_base; | 737 | return &cred->gc_base; |
diff --git a/net/sunrpc/auth_unix.c b/net/sunrpc/auth_unix.c index 6600c7ad72a9..2f1bdb5c86b3 100644 --- a/net/sunrpc/auth_unix.c +++ b/net/sunrpc/auth_unix.c | |||
@@ -20,9 +20,6 @@ struct unx_cred { | |||
20 | gid_t uc_gids[NFS_NGROUPS]; | 20 | gid_t uc_gids[NFS_NGROUPS]; |
21 | }; | 21 | }; |
22 | #define uc_uid uc_base.cr_uid | 22 | #define uc_uid uc_base.cr_uid |
23 | #define uc_count uc_base.cr_count | ||
24 | #define uc_flags uc_base.cr_flags | ||
25 | #define uc_expire uc_base.cr_expire | ||
26 | 23 | ||
27 | #define UNX_CRED_EXPIRE (60 * HZ) | 24 | #define UNX_CRED_EXPIRE (60 * HZ) |
28 | 25 | ||
@@ -74,8 +71,8 @@ unx_create_cred(struct rpc_auth *auth, struct auth_cred *acred, int flags) | |||
74 | if (!(cred = kmalloc(sizeof(*cred), GFP_KERNEL))) | 71 | if (!(cred = kmalloc(sizeof(*cred), GFP_KERNEL))) |
75 | return ERR_PTR(-ENOMEM); | 72 | return ERR_PTR(-ENOMEM); |
76 | 73 | ||
77 | atomic_set(&cred->uc_count, 1); | 74 | rpcauth_init_cred(&cred->uc_base, acred, auth, &unix_credops); |
78 | cred->uc_flags = RPCAUTH_CRED_UPTODATE; | 75 | cred->uc_base.cr_flags = RPCAUTH_CRED_UPTODATE; |
79 | if (flags & RPCAUTH_LOOKUP_ROOTCREDS) { | 76 | if (flags & RPCAUTH_LOOKUP_ROOTCREDS) { |
80 | cred->uc_uid = 0; | 77 | cred->uc_uid = 0; |
81 | cred->uc_gid = 0; | 78 | cred->uc_gid = 0; |
@@ -85,15 +82,12 @@ unx_create_cred(struct rpc_auth *auth, struct auth_cred *acred, int flags) | |||
85 | if (groups > NFS_NGROUPS) | 82 | if (groups > NFS_NGROUPS) |
86 | groups = NFS_NGROUPS; | 83 | groups = NFS_NGROUPS; |
87 | 84 | ||
88 | cred->uc_uid = acred->uid; | ||
89 | cred->uc_gid = acred->gid; | 85 | cred->uc_gid = acred->gid; |
90 | for (i = 0; i < groups; i++) | 86 | for (i = 0; i < groups; i++) |
91 | cred->uc_gids[i] = GROUP_AT(acred->group_info, i); | 87 | cred->uc_gids[i] = GROUP_AT(acred->group_info, i); |
92 | if (i < NFS_NGROUPS) | 88 | if (i < NFS_NGROUPS) |
93 | cred->uc_gids[i] = NOGROUP; | 89 | cred->uc_gids[i] = NOGROUP; |
94 | } | 90 | } |
95 | cred->uc_base.cr_auth = &unix_auth; | ||
96 | cred->uc_base.cr_ops = &unix_credops; | ||
97 | 91 | ||
98 | return (struct rpc_cred *) cred; | 92 | return (struct rpc_cred *) cred; |
99 | } | 93 | } |