diff options
author | Simo Sorce <simo@redhat.com> | 2012-05-25 18:09:53 -0400 |
---|---|---|
committer | J. Bruce Fields <bfields@redhat.com> | 2013-04-26 11:41:27 -0400 |
commit | 400f26b542e86995662a0cc5483656b7b1f42af6 (patch) | |
tree | b5dc026aad338be6a59d60106de334dfb7bda838 /net/sunrpc/auth_gss | |
parent | 33d90ac0581ce81d1ebfc51918a2757e41a6011c (diff) |
SUNRPC: conditionally return endtime from import_sec_context
We expose this parameter for a future caller.
It will be used to extract the endtime from the gss-proxy upcall mechanism,
in order to set the rsc cache expiration time.
Signed-off-by: Simo Sorce <simo@redhat.com>
Signed-off-by: J. Bruce Fields <bfields@redhat.com>
Diffstat (limited to 'net/sunrpc/auth_gss')
-rw-r--r-- | net/sunrpc/auth_gss/auth_gss.c | 2 | ||||
-rw-r--r-- | net/sunrpc/auth_gss/gss_krb5_mech.c | 7 | ||||
-rw-r--r-- | net/sunrpc/auth_gss/gss_mech_switch.c | 5 | ||||
-rw-r--r-- | net/sunrpc/auth_gss/svcauth_gss.c | 3 |
4 files changed, 11 insertions, 6 deletions
diff --git a/net/sunrpc/auth_gss/auth_gss.c b/net/sunrpc/auth_gss/auth_gss.c index 5257d2982ba5..23563e783ec2 100644 --- a/net/sunrpc/auth_gss/auth_gss.c +++ b/net/sunrpc/auth_gss/auth_gss.c | |||
@@ -238,7 +238,7 @@ gss_fill_context(const void *p, const void *end, struct gss_cl_ctx *ctx, struct | |||
238 | p = ERR_PTR(-EFAULT); | 238 | p = ERR_PTR(-EFAULT); |
239 | goto err; | 239 | goto err; |
240 | } | 240 | } |
241 | ret = gss_import_sec_context(p, seclen, gm, &ctx->gc_gss_ctx, GFP_NOFS); | 241 | ret = gss_import_sec_context(p, seclen, gm, &ctx->gc_gss_ctx, NULL, GFP_NOFS); |
242 | if (ret < 0) { | 242 | if (ret < 0) { |
243 | p = ERR_PTR(ret); | 243 | p = ERR_PTR(ret); |
244 | goto err; | 244 | goto err; |
diff --git a/net/sunrpc/auth_gss/gss_krb5_mech.c b/net/sunrpc/auth_gss/gss_krb5_mech.c index d3611f11a8df..3bc4a23938ea 100644 --- a/net/sunrpc/auth_gss/gss_krb5_mech.c +++ b/net/sunrpc/auth_gss/gss_krb5_mech.c | |||
@@ -679,6 +679,7 @@ out_err: | |||
679 | static int | 679 | static int |
680 | gss_import_sec_context_kerberos(const void *p, size_t len, | 680 | gss_import_sec_context_kerberos(const void *p, size_t len, |
681 | struct gss_ctx *ctx_id, | 681 | struct gss_ctx *ctx_id, |
682 | time_t *endtime, | ||
682 | gfp_t gfp_mask) | 683 | gfp_t gfp_mask) |
683 | { | 684 | { |
684 | const void *end = (const void *)((const char *)p + len); | 685 | const void *end = (const void *)((const char *)p + len); |
@@ -694,9 +695,11 @@ gss_import_sec_context_kerberos(const void *p, size_t len, | |||
694 | else | 695 | else |
695 | ret = gss_import_v2_context(p, end, ctx, gfp_mask); | 696 | ret = gss_import_v2_context(p, end, ctx, gfp_mask); |
696 | 697 | ||
697 | if (ret == 0) | 698 | if (ret == 0) { |
698 | ctx_id->internal_ctx_id = ctx; | 699 | ctx_id->internal_ctx_id = ctx; |
699 | else | 700 | if (endtime) |
701 | *endtime = ctx->endtime; | ||
702 | } else | ||
700 | kfree(ctx); | 703 | kfree(ctx); |
701 | 704 | ||
702 | dprintk("RPC: %s: returning %d\n", __func__, ret); | 705 | dprintk("RPC: %s: returning %d\n", __func__, ret); |
diff --git a/net/sunrpc/auth_gss/gss_mech_switch.c b/net/sunrpc/auth_gss/gss_mech_switch.c index f0f4eee63a35..43fd5bbf92c6 100644 --- a/net/sunrpc/auth_gss/gss_mech_switch.c +++ b/net/sunrpc/auth_gss/gss_mech_switch.c | |||
@@ -325,14 +325,15 @@ int | |||
325 | gss_import_sec_context(const void *input_token, size_t bufsize, | 325 | gss_import_sec_context(const void *input_token, size_t bufsize, |
326 | struct gss_api_mech *mech, | 326 | struct gss_api_mech *mech, |
327 | struct gss_ctx **ctx_id, | 327 | struct gss_ctx **ctx_id, |
328 | time_t *endtime, | ||
328 | gfp_t gfp_mask) | 329 | gfp_t gfp_mask) |
329 | { | 330 | { |
330 | if (!(*ctx_id = kzalloc(sizeof(**ctx_id), gfp_mask))) | 331 | if (!(*ctx_id = kzalloc(sizeof(**ctx_id), gfp_mask))) |
331 | return -ENOMEM; | 332 | return -ENOMEM; |
332 | (*ctx_id)->mech_type = gss_mech_get(mech); | 333 | (*ctx_id)->mech_type = gss_mech_get(mech); |
333 | 334 | ||
334 | return mech->gm_ops | 335 | return mech->gm_ops->gss_import_sec_context(input_token, bufsize, |
335 | ->gss_import_sec_context(input_token, bufsize, *ctx_id, gfp_mask); | 336 | *ctx_id, endtime, gfp_mask); |
336 | } | 337 | } |
337 | 338 | ||
338 | /* gss_get_mic: compute a mic over message and return mic_token. */ | 339 | /* gss_get_mic: compute a mic over message and return mic_token. */ |
diff --git a/net/sunrpc/auth_gss/svcauth_gss.c b/net/sunrpc/auth_gss/svcauth_gss.c index 5ead60550895..20eedecc35f8 100644 --- a/net/sunrpc/auth_gss/svcauth_gss.c +++ b/net/sunrpc/auth_gss/svcauth_gss.c | |||
@@ -497,7 +497,8 @@ static int rsc_parse(struct cache_detail *cd, | |||
497 | len = qword_get(&mesg, buf, mlen); | 497 | len = qword_get(&mesg, buf, mlen); |
498 | if (len < 0) | 498 | if (len < 0) |
499 | goto out; | 499 | goto out; |
500 | status = gss_import_sec_context(buf, len, gm, &rsci.mechctx, GFP_KERNEL); | 500 | status = gss_import_sec_context(buf, len, gm, &rsci.mechctx, |
501 | NULL, GFP_KERNEL); | ||
501 | if (status) | 502 | if (status) |
502 | goto out; | 503 | goto out; |
503 | 504 | ||