gss_auth
static struct gss_auth *
struct gss_auth *gss_auth;
if (!(gss_auth = kmalloc_obj(*gss_auth)))
INIT_HLIST_NODE(&gss_auth->hash);
gss_auth->target_name = NULL;
gss_auth->target_name = kstrdup(args->target_name, GFP_KERNEL);
if (gss_auth->target_name == NULL)
gss_auth->client = clnt;
gss_auth->net = get_net_track(rpc_net_ns(clnt), &gss_auth->ns_tracker,
gss_auth->mech = gss_mech_get_by_pseudoflavor(flavor);
if (!gss_auth->mech)
gss_auth->service = gss_pseudoflavor_to_service(gss_auth->mech, flavor);
if (gss_auth->service == 0)
if (!gssd_running(gss_auth->net))
auth = &gss_auth->rpc_auth;
if (gss_pseudoflavor_to_datatouch(gss_auth->mech, flavor))
kref_init(&gss_auth->kref);
gss_auth->gss_pipe[1] = gss_pipe;
gss_pipe = gss_pipe_get(clnt, gss_auth->mech->gm_name,
gss_auth->gss_pipe[0] = gss_pipe;
static void gss_put_auth(struct gss_auth *gss_auth);
return gss_auth;
gss_pipe_free(gss_auth->gss_pipe[1]);
gss_mech_put(gss_auth->mech);
put_net_track(gss_auth->net, &gss_auth->ns_tracker);
kfree(gss_auth->target_name);
kfree(gss_auth);
gss_free(struct gss_auth *gss_auth)
gss_pipe_free(gss_auth->gss_pipe[0]);
gss_pipe_free(gss_auth->gss_pipe[1]);
gss_mech_put(gss_auth->mech);
put_net_track(gss_auth->net, &gss_auth->ns_tracker);
kfree(gss_auth->target_name);
kfree(gss_auth);
struct gss_auth *gss_auth = container_of(kref, struct gss_auth, kref);
gss_free(gss_auth);
gss_put_auth(struct gss_auth *gss_auth)
kref_put(&gss_auth->kref, gss_free_callback);
struct gss_auth *gss_auth = container_of(auth,
struct gss_auth, rpc_auth);
if (hash_hashed(&gss_auth->hash)) {
hash_del(&gss_auth->hash);
gss_pipe_free(gss_auth->gss_pipe[0]);
gss_auth->gss_pipe[0] = NULL;
gss_pipe_free(gss_auth->gss_pipe[1]);
gss_auth->gss_pipe[1] = NULL;
gss_put_auth(gss_auth);
static struct gss_auth *
struct gss_auth *new)
struct gss_auth *gss_auth;
gss_auth,
if (gss_auth->client != clnt)
if (gss_auth->rpc_auth.au_flavor != args->pseudoflavor)
if (gss_auth->target_name != args->target_name) {
if (gss_auth->target_name == NULL)
if (strcmp(gss_auth->target_name, args->target_name))
if (!refcount_inc_not_zero(&gss_auth->rpc_auth.au_count))
gss_auth = new;
return gss_auth;
static struct gss_auth *
struct gss_auth *gss_auth;
struct gss_auth *new;
gss_auth = gss_auth_find_or_add_hashed(args, clnt, NULL);
if (gss_auth != NULL)
gss_auth = gss_auth_find_or_add_hashed(args, clnt, new);
if (gss_auth != new)
return gss_auth;
struct gss_auth *gss_auth;
gss_auth = gss_create_hashed(args, clnt);
if (IS_ERR(gss_auth))
return ERR_CAST(gss_auth);
return &gss_auth->rpc_auth;
gss_dup_cred(struct gss_auth *gss_auth, struct gss_cred *gss_cred)
&gss_auth->rpc_auth,
kref_get(&gss_auth->kref);
struct gss_auth *gss_auth = container_of(cred->cr_auth, struct gss_auth, rpc_auth);
new = gss_dup_cred(gss_auth, gss_cred);
task = rpc_call_null(gss_auth->client, &new->gc_base,
struct gss_auth *gss_auth = container_of(cred->cr_auth, struct gss_auth, rpc_auth);
gss_put_auth(gss_auth);
struct gss_auth *gss_auth = container_of(auth, struct gss_auth, rpc_auth);
cred->gc_service = gss_auth->service;
kref_get(&gss_auth->kref);
struct gss_auth *gss_auth = container_of(auth, struct gss_auth, rpc_auth);
err = gss_create_upcall(gss_auth, gss_cred);
struct gss_auth *auth;
__gss_find_upcall(struct rpc_pipe *pipe, kuid_t uid, const struct gss_auth *auth)
gss_alloc_msg(struct gss_auth *gss_auth,
vers = get_pipe_version(gss_auth->net);
gss_msg->pipe = gss_auth->gss_pipe[vers]->pipe;
gss_msg->auth = gss_auth;
kref_get(&gss_auth->kref);
kref_put(&gss_auth->kref, gss_free_callback);
put_pipe_version(gss_auth->net);
gss_setup_upcall(struct gss_auth *gss_auth, struct rpc_cred *cred)
gss_new = gss_alloc_msg(gss_auth, uid, gss_cred->gc_principal);
struct gss_auth *gss_auth = container_of(cred->cr_auth,
struct gss_auth, rpc_auth);
gss_msg = gss_setup_upcall(gss_auth, cred);
gss_create_upcall(struct gss_auth *gss_auth, struct gss_cred *gss_cred)
struct net *net = gss_auth->net;
gss_msg = gss_setup_upcall(gss_auth, cred);