summaryrefslogtreecommitdiff
path: root/usr/src/lib/libgss/g_seal.c
diff options
context:
space:
mode:
Diffstat (limited to 'usr/src/lib/libgss/g_seal.c')
-rw-r--r--usr/src/lib/libgss/g_seal.c30
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;
}