diff options
Diffstat (limited to 'usr/src/lib/libgss/g_seal.c')
-rw-r--r-- | usr/src/lib/libgss/g_seal.c | 30 |
1 files changed, 20 insertions, 10 deletions
diff --git a/usr/src/lib/libgss/g_seal.c b/usr/src/lib/libgss/g_seal.c index 19725d9f51..2f51651755 100644 --- a/usr/src/lib/libgss/g_seal.c +++ b/usr/src/lib/libgss/g_seal.c @@ -19,8 +19,7 @@ * CDDL HEADER END */ /* - * Copyright 2009 Sun Microsystems, Inc. All rights reserved. - * Use is subject to license terms. + * Copyright (c) 1999, 2010, Oracle and/or its affiliates. All rights reserved. */ /* @@ -28,6 +27,8 @@ */ #include <mechglueP.h> +#include "gssapiP_generic.h" + static OM_uint32 val_seal_args( @@ -104,7 +105,7 @@ gss_buffer_t output_message_buffer; mech = __gss_get_mechanism(ctx->mech_type); if (mech) { - if (mech->gss_seal) + if (mech->gss_seal) { status = mech->gss_seal( mech->context, minor_status, @@ -114,7 +115,9 @@ gss_buffer_t output_message_buffer; input_message_buffer, conf_state, output_message_buffer); - else + if (status != GSS_S_COMPLETE) + map_error(minor_status, mech); + } else status = GSS_S_UNAVAILABLE; return (status); @@ -163,6 +166,7 @@ gss_wrap_size_limit(minor_status, context_handle, conf_req_flag, { gss_union_ctx_id_t ctx; gss_mechanism mech; + OM_uint32 major_status; if (minor_status == NULL) return (GSS_S_CALL_INACCESSIBLE_WRITE); @@ -185,10 +189,16 @@ gss_wrap_size_limit(minor_status, context_handle, conf_req_flag, if (!mech) return (GSS_S_BAD_MECH); - if (!mech->gss_wrap_size_limit) - return (GSS_S_UNAVAILABLE); - - return (mech->gss_wrap_size_limit(mech->context, minor_status, - ctx->internal_ctx_id, conf_req_flag, qop_req, - req_output_size, max_input_size)); + if (mech->gss_wrap_size_limit) + major_status = mech->gss_wrap_size_limit(mech->context, + minor_status, + ctx->internal_ctx_id, + conf_req_flag, qop_req, + req_output_size, + max_input_size); + else + major_status = GSS_S_UNAVAILABLE; + if (major_status != GSS_S_COMPLETE) + map_error(minor_status, mech); + return major_status; } |