Gitweb:     
http://git.kernel.org/git/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commit;h=5fe4755e2526a2aa82b7ed8daeb3aed74a236925
Commit:     5fe4755e2526a2aa82b7ed8daeb3aed74a236925
Parent:     f1c0a8615090359d57e096157feb9f900cbb233c
Author:     Trond Myklebust <[EMAIL PROTECTED]>
AuthorDate: Sat Jun 23 19:55:31 2007 -0400
Committer:  Trond Myklebust <[EMAIL PROTECTED]>
CommitDate: Tue Jul 10 23:40:35 2007 -0400

    SUNRPC: Clean up rpc credential initialisation
    
    Add a helper rpc_cred_init()
    
    Signed-off-by: Trond Myklebust <[EMAIL PROTECTED]>
---
 include/linux/sunrpc/auth.h     |    1 +
 include/linux/sunrpc/auth_gss.h |    5 -----
 net/sunrpc/auth.c               |   24 ++++++++++++++++++------
 net/sunrpc/auth_gss/auth_gss.c  |    6 +-----
 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 e606c28..d5bfc67 100644
--- a/include/linux/sunrpc/auth.h
+++ b/include/linux/sunrpc/auth.h
@@ -127,6 +127,7 @@ int                 rpcauth_unregister(const struct 
rpc_authops *);
 struct rpc_auth *      rpcauth_create(rpc_authflavor_t, struct rpc_clnt *);
 void                   rpcauth_release(struct rpc_auth *);
 struct rpc_cred *      rpcauth_lookup_credcache(struct rpc_auth *, struct 
auth_cred *, int);
+void                   rpcauth_init_cred(struct rpc_cred *, const struct 
auth_cred *, struct rpc_auth *, const struct rpc_credops *);
 struct rpc_cred *      rpcauth_lookupcred(struct rpc_auth *, int);
 struct rpc_cred *      rpcauth_bindcred(struct rpc_task *);
 void                   rpcauth_holdcred(struct rpc_task *);
diff --git a/include/linux/sunrpc/auth_gss.h b/include/linux/sunrpc/auth_gss.h
index 2db2fbf..0bd1d06 100644
--- a/include/linux/sunrpc/auth_gss.h
+++ b/include/linux/sunrpc/auth_gss.h
@@ -85,11 +85,6 @@ struct gss_cred {
        struct gss_upcall_msg   *gc_upcall;
 };
 
-#define gc_uid                 gc_base.cr_uid
-#define gc_count               gc_base.cr_count
-#define gc_flags               gc_base.cr_flags
-#define gc_expire              gc_base.cr_expire
-
 #endif /* __KERNEL__ */
 #endif /* _LINUX_SUNRPC_AUTH_GSS_H */
 
diff --git a/net/sunrpc/auth.c b/net/sunrpc/auth.c
index d3f0f94..2156327 100644
--- a/net/sunrpc/auth.c
+++ b/net/sunrpc/auth.c
@@ -264,13 +264,9 @@ retry:
 
        if (!cred) {
                new = auth->au_ops->crcreate(auth, acred, flags);
-               if (!IS_ERR(new)) {
-#ifdef RPC_DEBUG
-                       new->cr_magic = RPCAUTH_CRED_MAGIC;
-#endif
+               if (!IS_ERR(new))
                        goto retry;
-               } else
-                       cred = new;
+               cred = new;
        } else if ((cred->cr_flags & RPCAUTH_CRED_NEW)
                        && cred->cr_ops->cr_init != NULL
                        && !(flags & RPCAUTH_LOOKUP_NEW)) {
@@ -302,6 +298,22 @@ rpcauth_lookupcred(struct rpc_auth *auth, int flags)
        return ret;
 }
 
+void
+rpcauth_init_cred(struct rpc_cred *cred, const struct auth_cred *acred,
+                 struct rpc_auth *auth, const struct rpc_credops *ops)
+{
+       INIT_HLIST_NODE(&cred->cr_hash);
+       atomic_set(&cred->cr_count, 1);
+       cred->cr_auth = auth;
+       cred->cr_ops = ops;
+       cred->cr_expire = jiffies;
+#ifdef RPC_DEBUG
+       cred->cr_magic = RPCAUTH_CRED_MAGIC;
+#endif
+       cred->cr_uid = acred->uid;
+}
+EXPORT_SYMBOL(rpcauth_init_cred);
+
 struct rpc_cred *
 rpcauth_bindcred(struct rpc_task *task)
 {
diff --git a/net/sunrpc/auth_gss/auth_gss.c b/net/sunrpc/auth_gss/auth_gss.c
index 177a9e4..766de0a 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)
        if (!(cred = kzalloc(sizeof(*cred), GFP_KERNEL)))
                goto out_err;
 
-       atomic_set(&cred->gc_count, 1);
-       cred->gc_uid = acred->uid;
+       rpcauth_init_cred(&cred->gc_base, acred, auth, &gss_credops);
        /*
         * Note: in order to force a call to call_refresh(), we deliberately
         * 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;
        return &cred->gc_base;
diff --git a/net/sunrpc/auth_unix.c b/net/sunrpc/auth_unix.c
index 6600c7a..2f1bdb5 100644
--- a/net/sunrpc/auth_unix.c
+++ b/net/sunrpc/auth_unix.c
@@ -20,9 +20,6 @@ struct unx_cred {
        gid_t                   uc_gids[NFS_NGROUPS];
 };
 #define uc_uid                 uc_base.cr_uid
-#define uc_count               uc_base.cr_count
-#define uc_flags               uc_base.cr_flags
-#define uc_expire              uc_base.cr_expire
 
 #define UNX_CRED_EXPIRE                (60 * HZ)
 
@@ -74,8 +71,8 @@ unx_create_cred(struct rpc_auth *auth, struct auth_cred 
*acred, int flags)
        if (!(cred = kmalloc(sizeof(*cred), GFP_KERNEL)))
                return ERR_PTR(-ENOMEM);
 
-       atomic_set(&cred->uc_count, 1);
-       cred->uc_flags = RPCAUTH_CRED_UPTODATE;
+       rpcauth_init_cred(&cred->uc_base, acred, auth, &unix_credops);
+       cred->uc_base.cr_flags = RPCAUTH_CRED_UPTODATE;
        if (flags & RPCAUTH_LOOKUP_ROOTCREDS) {
                cred->uc_uid = 0;
                cred->uc_gid = 0;
@@ -85,15 +82,12 @@ unx_create_cred(struct rpc_auth *auth, struct auth_cred 
*acred, int flags)
                if (groups > NFS_NGROUPS)
                        groups = NFS_NGROUPS;
 
-               cred->uc_uid = acred->uid;
                cred->uc_gid = acred->gid;
                for (i = 0; i < groups; i++)
                        cred->uc_gids[i] = GROUP_AT(acred->group_info, i);
                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