SUNRPC: Clean up of rpc_bindcred()
Signed-off-by: Trond Myklebust <Trond.Myklebust@netapp.com>
This commit is contained in:
@@ -106,7 +106,7 @@ struct rpc_credops {
|
|||||||
void (*crdestroy)(struct rpc_cred *);
|
void (*crdestroy)(struct rpc_cred *);
|
||||||
|
|
||||||
int (*crmatch)(struct auth_cred *, struct rpc_cred *, int);
|
int (*crmatch)(struct auth_cred *, struct rpc_cred *, int);
|
||||||
void (*crbind)(struct rpc_task *, struct rpc_cred *, int);
|
struct rpc_cred * (*crbind)(struct rpc_task *, struct rpc_cred *, int);
|
||||||
__be32 * (*crmarshal)(struct rpc_task *, __be32 *);
|
__be32 * (*crmarshal)(struct rpc_task *, __be32 *);
|
||||||
int (*crrefresh)(struct rpc_task *);
|
int (*crrefresh)(struct rpc_task *);
|
||||||
__be32 * (*crvalidate)(struct rpc_task *, __be32 *);
|
__be32 * (*crvalidate)(struct rpc_task *, __be32 *);
|
||||||
@@ -135,8 +135,8 @@ void rpcauth_release(struct rpc_auth *);
|
|||||||
struct rpc_cred * rpcauth_lookup_credcache(struct rpc_auth *, struct auth_cred *, int);
|
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 *);
|
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_lookupcred(struct rpc_auth *, int);
|
||||||
void rpcauth_bindcred(struct rpc_task *, struct rpc_cred *, int);
|
int rpcauth_bindcred(struct rpc_task *, struct rpc_cred *, int);
|
||||||
void rpcauth_generic_bind_cred(struct rpc_task *, struct rpc_cred *, int);
|
struct rpc_cred * rpcauth_generic_bind_cred(struct rpc_task *, struct rpc_cred *, int);
|
||||||
void put_rpccred(struct rpc_cred *);
|
void put_rpccred(struct rpc_cred *);
|
||||||
void rpcauth_unbindcred(struct rpc_task *);
|
void rpcauth_unbindcred(struct rpc_task *);
|
||||||
__be32 * rpcauth_marshcred(struct rpc_task *, __be32 *);
|
__be32 * rpcauth_marshcred(struct rpc_task *, __be32 *);
|
||||||
|
@@ -444,16 +444,16 @@ rpcauth_init_cred(struct rpc_cred *cred, const struct auth_cred *acred,
|
|||||||
}
|
}
|
||||||
EXPORT_SYMBOL_GPL(rpcauth_init_cred);
|
EXPORT_SYMBOL_GPL(rpcauth_init_cred);
|
||||||
|
|
||||||
void
|
struct rpc_cred *
|
||||||
rpcauth_generic_bind_cred(struct rpc_task *task, struct rpc_cred *cred, int lookupflags)
|
rpcauth_generic_bind_cred(struct rpc_task *task, struct rpc_cred *cred, int lookupflags)
|
||||||
{
|
{
|
||||||
task->tk_msg.rpc_cred = get_rpccred(cred);
|
|
||||||
dprintk("RPC: %5u holding %s cred %p\n", task->tk_pid,
|
dprintk("RPC: %5u holding %s cred %p\n", task->tk_pid,
|
||||||
cred->cr_auth->au_ops->au_name, cred);
|
cred->cr_auth->au_ops->au_name, cred);
|
||||||
|
return get_rpccred(cred);
|
||||||
}
|
}
|
||||||
EXPORT_SYMBOL_GPL(rpcauth_generic_bind_cred);
|
EXPORT_SYMBOL_GPL(rpcauth_generic_bind_cred);
|
||||||
|
|
||||||
static void
|
static struct rpc_cred *
|
||||||
rpcauth_bind_root_cred(struct rpc_task *task, int lookupflags)
|
rpcauth_bind_root_cred(struct rpc_task *task, int lookupflags)
|
||||||
{
|
{
|
||||||
struct rpc_auth *auth = task->tk_client->cl_auth;
|
struct rpc_auth *auth = task->tk_client->cl_auth;
|
||||||
@@ -461,45 +461,42 @@ rpcauth_bind_root_cred(struct rpc_task *task, int lookupflags)
|
|||||||
.uid = 0,
|
.uid = 0,
|
||||||
.gid = 0,
|
.gid = 0,
|
||||||
};
|
};
|
||||||
struct rpc_cred *ret;
|
|
||||||
|
|
||||||
dprintk("RPC: %5u looking up %s cred\n",
|
dprintk("RPC: %5u looking up %s cred\n",
|
||||||
task->tk_pid, task->tk_client->cl_auth->au_ops->au_name);
|
task->tk_pid, task->tk_client->cl_auth->au_ops->au_name);
|
||||||
ret = auth->au_ops->lookup_cred(auth, &acred, lookupflags);
|
return auth->au_ops->lookup_cred(auth, &acred, lookupflags);
|
||||||
if (!IS_ERR(ret))
|
|
||||||
task->tk_msg.rpc_cred = ret;
|
|
||||||
else
|
|
||||||
task->tk_status = PTR_ERR(ret);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static struct rpc_cred *
|
||||||
rpcauth_bind_new_cred(struct rpc_task *task, int lookupflags)
|
rpcauth_bind_new_cred(struct rpc_task *task, int lookupflags)
|
||||||
{
|
{
|
||||||
struct rpc_auth *auth = task->tk_client->cl_auth;
|
struct rpc_auth *auth = task->tk_client->cl_auth;
|
||||||
struct rpc_cred *ret;
|
|
||||||
|
|
||||||
dprintk("RPC: %5u looking up %s cred\n",
|
dprintk("RPC: %5u looking up %s cred\n",
|
||||||
task->tk_pid, auth->au_ops->au_name);
|
task->tk_pid, auth->au_ops->au_name);
|
||||||
ret = rpcauth_lookupcred(auth, lookupflags);
|
return rpcauth_lookupcred(auth, lookupflags);
|
||||||
if (!IS_ERR(ret))
|
|
||||||
task->tk_msg.rpc_cred = ret;
|
|
||||||
else
|
|
||||||
task->tk_status = PTR_ERR(ret);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
int
|
||||||
rpcauth_bindcred(struct rpc_task *task, struct rpc_cred *cred, int flags)
|
rpcauth_bindcred(struct rpc_task *task, struct rpc_cred *cred, int flags)
|
||||||
{
|
{
|
||||||
|
struct rpc_cred *new;
|
||||||
int lookupflags = 0;
|
int lookupflags = 0;
|
||||||
|
|
||||||
if (flags & RPC_TASK_ASYNC)
|
if (flags & RPC_TASK_ASYNC)
|
||||||
lookupflags |= RPCAUTH_LOOKUP_NEW;
|
lookupflags |= RPCAUTH_LOOKUP_NEW;
|
||||||
if (cred != NULL)
|
if (cred != NULL)
|
||||||
cred->cr_ops->crbind(task, cred, lookupflags);
|
new = cred->cr_ops->crbind(task, cred, lookupflags);
|
||||||
else if (flags & RPC_TASK_ROOTCREDS)
|
else if (flags & RPC_TASK_ROOTCREDS)
|
||||||
rpcauth_bind_root_cred(task, lookupflags);
|
new = rpcauth_bind_root_cred(task, lookupflags);
|
||||||
else
|
else
|
||||||
rpcauth_bind_new_cred(task, lookupflags);
|
new = rpcauth_bind_new_cred(task, lookupflags);
|
||||||
|
if (IS_ERR(new))
|
||||||
|
return PTR_ERR(new);
|
||||||
|
if (task->tk_msg.rpc_cred != NULL)
|
||||||
|
put_rpccred(task->tk_msg.rpc_cred);
|
||||||
|
task->tk_msg.rpc_cred = new;
|
||||||
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
|
@@ -54,18 +54,13 @@ struct rpc_cred *rpc_lookup_machine_cred(void)
|
|||||||
}
|
}
|
||||||
EXPORT_SYMBOL_GPL(rpc_lookup_machine_cred);
|
EXPORT_SYMBOL_GPL(rpc_lookup_machine_cred);
|
||||||
|
|
||||||
static void
|
static struct rpc_cred *generic_bind_cred(struct rpc_task *task,
|
||||||
generic_bind_cred(struct rpc_task *task, struct rpc_cred *cred, int lookupflags)
|
struct rpc_cred *cred, int lookupflags)
|
||||||
{
|
{
|
||||||
struct rpc_auth *auth = task->tk_client->cl_auth;
|
struct rpc_auth *auth = task->tk_client->cl_auth;
|
||||||
struct auth_cred *acred = &container_of(cred, struct generic_cred, gc_base)->acred;
|
struct auth_cred *acred = &container_of(cred, struct generic_cred, gc_base)->acred;
|
||||||
struct rpc_cred *ret;
|
|
||||||
|
|
||||||
ret = auth->au_ops->lookup_cred(auth, acred, lookupflags);
|
return auth->au_ops->lookup_cred(auth, acred, lookupflags);
|
||||||
if (!IS_ERR(ret))
|
|
||||||
task->tk_msg.rpc_cred = ret;
|
|
||||||
else
|
|
||||||
task->tk_status = PTR_ERR(ret);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
@@ -606,7 +606,7 @@ rpc_task_set_rpc_message(struct rpc_task *task, const struct rpc_message *msg)
|
|||||||
task->tk_msg.rpc_argp = msg->rpc_argp;
|
task->tk_msg.rpc_argp = msg->rpc_argp;
|
||||||
task->tk_msg.rpc_resp = msg->rpc_resp;
|
task->tk_msg.rpc_resp = msg->rpc_resp;
|
||||||
/* Bind the user cred */
|
/* Bind the user cred */
|
||||||
rpcauth_bindcred(task, msg->rpc_cred, task->tk_flags);
|
task->tk_status = rpcauth_bindcred(task, msg->rpc_cred, task->tk_flags);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user