X-Git-Url: http://git.onelab.eu/?a=blobdiff_plain;f=net%2Fsunrpc%2Fauth_null.c;h=9b72d3abf823bfd0fa0da0654bfd2b323c549169;hb=f7f1b0f1e2fbadeab12d24236000e778aa9b1ead;hp=868ac2b22e1a41da5eecbd2a9f787d36487a1b02;hpb=5273a3df6485dc2ad6aa7ddd441b9a21970f003b;p=linux-2.6.git diff --git a/net/sunrpc/auth_null.c b/net/sunrpc/auth_null.c index 868ac2b22..9b72d3abf 100644 --- a/net/sunrpc/auth_null.c +++ b/net/sunrpc/auth_null.c @@ -18,48 +18,28 @@ # define RPCDBG_FACILITY RPCDBG_AUTH #endif -static struct rpc_credops null_credops; +static struct rpc_auth null_auth; +static struct rpc_cred null_cred; static struct rpc_auth * nul_create(struct rpc_clnt *clnt, rpc_authflavor_t flavor) { - struct rpc_auth *auth; - - dprintk("RPC: creating NULL authenticator for client %p\n", clnt); - if (!(auth = (struct rpc_auth *) kmalloc(sizeof(*auth),GFP_KERNEL))) - return NULL; - auth->au_cslack = 4; - auth->au_rslack = 2; - auth->au_ops = &authnull_ops; - auth->au_expire = 1800 * HZ; - rpcauth_init_credcache(auth); - - return (struct rpc_auth *) auth; + atomic_inc(&null_auth.au_count); + return &null_auth; } static void nul_destroy(struct rpc_auth *auth) { - dprintk("RPC: destroying NULL authenticator %p\n", auth); - rpcauth_free_credcache(auth); } /* - * Create NULL creds for current process + * Lookup NULL creds for current process */ static struct rpc_cred * -nul_create_cred(struct rpc_auth *auth, struct auth_cred *acred, int flags) +nul_lookup_cred(struct rpc_auth *auth, struct auth_cred *acred, int flags) { - struct rpc_cred *cred; - - if (!(cred = (struct rpc_cred *) kmalloc(sizeof(*cred),GFP_KERNEL))) - return NULL; - atomic_set(&cred->cr_count, 0); - cred->cr_flags = RPCAUTH_CRED_UPTODATE; - cred->cr_uid = acred->uid; - cred->cr_ops = &null_credops; - - return cred; + return get_rpccred(&null_cred); } /* @@ -68,7 +48,6 @@ nul_create_cred(struct rpc_auth *auth, struct auth_cred *acred, int flags) static void nul_destroy_cred(struct rpc_cred *cred) { - kfree(cred); } /* @@ -84,7 +63,7 @@ nul_match(struct auth_cred *acred, struct rpc_cred *cred, int taskflags) * Marshal credential. */ static u32 * -nul_marshal(struct rpc_task *task, u32 *p, int ruid) +nul_marshal(struct rpc_task *task, u32 *p) { *p++ = htonl(RPC_AUTH_NULL); *p++ = 0; @@ -100,7 +79,8 @@ nul_marshal(struct rpc_task *task, u32 *p, int ruid) static int nul_refresh(struct rpc_task *task) { - return task->tk_status = -EACCES; + task->tk_msg.rpc_cred->cr_flags |= RPCAUTH_CRED_UPTODATE; + return 0; } static u32 * @@ -124,7 +104,7 @@ nul_validate(struct rpc_task *task, u32 *p) return p; } -struct rpc_authops authnull_ops = { +struct rpc_authops authnull_ops = { .owner = THIS_MODULE, .au_flavor = RPC_AUTH_NULL, #ifdef RPC_DEBUG @@ -132,14 +112,32 @@ struct rpc_authops authnull_ops = { #endif .create = nul_create, .destroy = nul_destroy, - .crcreate = nul_create_cred, + .lookup_cred = nul_lookup_cred, +}; + +static +struct rpc_auth null_auth = { + .au_cslack = 4, + .au_rslack = 2, + .au_ops = &authnull_ops, }; static struct rpc_credops null_credops = { + .cr_name = "AUTH_NULL", .crdestroy = nul_destroy_cred, .crmatch = nul_match, .crmarshal = nul_marshal, .crrefresh = nul_refresh, .crvalidate = nul_validate, }; + +static +struct rpc_cred null_cred = { + .cr_ops = &null_credops, + .cr_count = ATOMIC_INIT(1), + .cr_flags = RPCAUTH_CRED_UPTODATE, +#ifdef RPC_DEBUG + .cr_magic = RPCAUTH_CRED_MAGIC, +#endif +};