Gitweb:     
http://git.kernel.org/git/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commit;h=4a8c1344dccb848dbcf0edabc8b5c51a8ecf2808
Commit:     4a8c1344dccb848dbcf0edabc8b5c51a8ecf2808
Parent:     c1384c9c4c184543375b52a0997d06cd98145164
Author:     Trond Myklebust <[EMAIL PROTECTED]>
AuthorDate: Thu Jun 7 10:14:14 2007 -0400
Committer:  Trond Myklebust <[EMAIL PROTECTED]>
CommitDate: Tue Jul 10 23:40:31 2007 -0400

    SUNRPC: Add a backpointer from the struct rpc_cred to the rpc_auth
    
    Cleans up an issue whereby rpcsec_gss uses the rpc_clnt->cl_auth. If we want
    to be able to add several rpc_auths to a single rpc_clnt, then this abuse
    must go.
    
    Signed-off-by: Trond Myklebust <[EMAIL PROTECTED]>
---
 include/linux/sunrpc/auth.h    |    4 ++++
 net/sunrpc/auth_gss/auth_gss.c |    3 ++-
 net/sunrpc/auth_null.c         |    1 +
 net/sunrpc/auth_unix.c         |    1 +
 4 files changed, 8 insertions(+), 1 deletions(-)

diff --git a/include/linux/sunrpc/auth.h b/include/linux/sunrpc/auth.h
index 534cdc7..8ef27af 100644
--- a/include/linux/sunrpc/auth.h
+++ b/include/linux/sunrpc/auth.h
@@ -30,8 +30,11 @@ struct auth_cred {
 /*
  * Client user credentials
  */
+struct rpc_auth;
+struct rpc_credops;
 struct rpc_cred {
        struct hlist_node       cr_hash;        /* hash chain */
+       struct rpc_auth *       cr_auth;
        struct rpc_credops *    cr_ops;
        unsigned long           cr_expire;      /* when to gc */
        atomic_t                cr_count;       /* ref count */
@@ -60,6 +63,7 @@ struct rpc_cred_cache {
        unsigned long           expire;         /* cache expiry interval */
 };
 
+struct rpc_authops;
 struct rpc_auth {
        unsigned int            au_cslack;      /* call cred size estimate */
                                /* guess at number of u32's auth adds before
diff --git a/net/sunrpc/auth_gss/auth_gss.c b/net/sunrpc/auth_gss/auth_gss.c
index 4e4ccc5..e894e2f 100644
--- a/net/sunrpc/auth_gss/auth_gss.c
+++ b/net/sunrpc/auth_gss/auth_gss.c
@@ -386,7 +386,7 @@ static inline int
 gss_refresh_upcall(struct rpc_task *task)
 {
        struct rpc_cred *cred = task->tk_msg.rpc_cred;
-       struct gss_auth *gss_auth = container_of(task->tk_client->cl_auth,
+       struct gss_auth *gss_auth = container_of(cred->cr_auth,
                        struct gss_auth, rpc_auth);
        struct gss_cred *gss_cred = container_of(cred,
                        struct gss_cred, gc_base);
@@ -741,6 +741,7 @@ gss_create_cred(struct rpc_auth *auth, struct auth_cred 
*acred, int flags)
         * fail to flag the credential as RPCAUTH_CRED_UPTODATE.
         */
        cred->gc_flags = 0;
+       cred->gc_base.cr_auth = auth;
        cred->gc_base.cr_ops = &gss_credops;
        cred->gc_base.cr_flags = RPCAUTH_CRED_NEW;
        cred->gc_service = gss_auth->service;
diff --git a/net/sunrpc/auth_null.c b/net/sunrpc/auth_null.c
index 3df9fcc..890bd9b 100644
--- a/net/sunrpc/auth_null.c
+++ b/net/sunrpc/auth_null.c
@@ -133,6 +133,7 @@ struct rpc_credops  null_credops = {
 
 static
 struct rpc_cred null_cred = {
+       .cr_auth        = &null_auth,
        .cr_ops         = &null_credops,
        .cr_count       = ATOMIC_INIT(1),
        .cr_flags       = RPCAUTH_CRED_UPTODATE,
diff --git a/net/sunrpc/auth_unix.c b/net/sunrpc/auth_unix.c
index 4e7733a..82300b8 100644
--- a/net/sunrpc/auth_unix.c
+++ b/net/sunrpc/auth_unix.c
@@ -92,6 +92,7 @@ unx_create_cred(struct rpc_auth *auth, struct auth_cred 
*acred, int flags)
                if (i < NFS_NGROUPS)
                  cred->uc_gids[i] = NOGROUP;
        }
+       cred->uc_base.cr_auth = &unix_auth;
        cred->uc_base.cr_ops = &unix_credops;
 
        return (struct rpc_cred *) cred;
-
To unsubscribe from this list: send the line "unsubscribe git-commits-head" in
the body of a message to [EMAIL PROTECTED]
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to