s4:heimdal: import lorikeet-heimdal-200909210500 (commit 290db8d23647a27c39b97c189a0b...
[abartlet/samba.git/.git] / source4 / heimdal / lib / gssapi / spnego / context_stubs.c
index 60c53058b8aa3c7d4fe6d5f60959317599bd4b12..c0d47b9f6378dede153a6a6057d911388c56cf0c 100644 (file)
@@ -30,7 +30,7 @@
  * SUCH DAMAGE.
  */
 
-#include "spnego/spnego_locl.h"
+#include "spnego_locl.h"
 
 RCSID("$Id$");
 
@@ -62,6 +62,7 @@ spnego_supported_mechs(OM_uint32 *minor_status, gss_OID_set *mechs)
            return ret;
        }
     }
+    gss_release_oid_set(&junk, &m);
     return ret;
 }
 
@@ -322,13 +323,13 @@ OM_uint32 _gss_spnego_import_name
        *minor_status = ENOMEM;
        return GSS_S_FAILURE;
     }
-    
+
     maj_stat = _gss_copy_oid(minor_status, name_type, &name->type);
     if (maj_stat) {
        free(name);
        return GSS_S_FAILURE;
     }
-    
+
     maj_stat = _gss_copy_buffer(minor_status, name_buffer, &name->value);
     if (maj_stat) {
        gss_name_t rname = (gss_name_t)name;
@@ -427,7 +428,7 @@ OM_uint32 _gss_spnego_inquire_context (
        *src_name = (gss_name_t)name;
     } else
        gss_release_name(&junk, &src_mn);
-    
+
     if (targ_name) {
        spnego_name name = calloc(1, sizeof(*name));
        if (name == NULL) {
@@ -598,7 +599,7 @@ out:
 
     gss_release_oid_set(&junk, &mechs);
 
-    return GSS_S_COMPLETE;
+    return ret;
 }
 
 OM_uint32 _gss_spnego_inquire_mechs_for_name (
@@ -642,206 +643,70 @@ OM_uint32 _gss_spnego_duplicate_name (
     return gss_duplicate_name(minor_status, src_name, dest_name);
 }
 
-OM_uint32 _gss_spnego_sign
-           (OM_uint32 * minor_status,
-            gss_ctx_id_t context_handle,
-            int qop_req,
-            gss_buffer_t message_buffer,
-            gss_buffer_t message_token
-           )
-{
-    gssspnego_ctx ctx;
-
-    *minor_status = 0;
-
-    if (context_handle == GSS_C_NO_CONTEXT) {
-       return GSS_S_NO_CONTEXT;
-    }
-
-    ctx = (gssspnego_ctx)context_handle;
-
-    if (ctx->negotiated_ctx_id == GSS_C_NO_CONTEXT) {
-       return GSS_S_NO_CONTEXT;
-    }
-
-    return gss_sign(minor_status,
-                   ctx->negotiated_ctx_id,
-                   qop_req,
-                   message_buffer,
-                   message_token);
-}
-
-OM_uint32 _gss_spnego_verify
-           (OM_uint32 * minor_status,
-            gss_ctx_id_t context_handle,
-            gss_buffer_t message_buffer,
-            gss_buffer_t token_buffer,
-            int * qop_state
-           )
+OM_uint32
+_gss_spnego_wrap_iov(OM_uint32 * minor_status,
+                    gss_ctx_id_t  context_handle,
+                    int conf_req_flag,
+                    gss_qop_t qop_req,
+                    int * conf_state,
+                    gss_iov_buffer_desc *iov,
+                    int iov_count)
 {
-    gssspnego_ctx ctx;
+    gssspnego_ctx ctx = (gssspnego_ctx)context_handle;
 
     *minor_status = 0;
 
-    if (context_handle == GSS_C_NO_CONTEXT) {
-       return GSS_S_NO_CONTEXT;
-    }
-
-    ctx = (gssspnego_ctx)context_handle;
-
-    if (ctx->negotiated_ctx_id == GSS_C_NO_CONTEXT) {
+    if (ctx == NULL || ctx->negotiated_ctx_id == GSS_C_NO_CONTEXT)
        return GSS_S_NO_CONTEXT;
-    }
 
-    return gss_verify(minor_status,
-                     ctx->negotiated_ctx_id,
-                     message_buffer,
-                     token_buffer,
-                     qop_state);
+    return gss_wrap_iov(minor_status, ctx->negotiated_ctx_id,
+                       conf_req_flag, qop_req, conf_state,
+                       iov, iov_count);
 }
 
-OM_uint32 _gss_spnego_seal
-           (OM_uint32 * minor_status,
-            gss_ctx_id_t context_handle,
-            int conf_req_flag,
-            int qop_req,
-            gss_buffer_t input_message_buffer,
-            int * conf_state,
-            gss_buffer_t output_message_buffer
-           )
+OM_uint32
+_gss_spnego_unwrap_iov(OM_uint32 *minor_status,
+                      gss_ctx_id_t context_handle,
+                      int *conf_state,
+                      gss_qop_t *qop_state,
+                      gss_iov_buffer_desc *iov,
+                      int iov_count)
 {
-    gssspnego_ctx ctx;
+    gssspnego_ctx ctx = (gssspnego_ctx)context_handle;
 
     *minor_status = 0;
 
-    if (context_handle == GSS_C_NO_CONTEXT) {
-       return GSS_S_NO_CONTEXT;
-    }
-
-    ctx = (gssspnego_ctx)context_handle;
-
-    if (ctx->negotiated_ctx_id == GSS_C_NO_CONTEXT) {
+    if (ctx == NULL || ctx->negotiated_ctx_id == GSS_C_NO_CONTEXT)
        return GSS_S_NO_CONTEXT;
-    }
 
-    return gss_seal(minor_status,
-                   ctx->negotiated_ctx_id,
-                   conf_req_flag,
-                   qop_req,
-                   input_message_buffer,
-                   conf_state,
-                   output_message_buffer);
+    return gss_unwrap_iov(minor_status,
+                         ctx->negotiated_ctx_id,
+                         conf_state, qop_state,
+                         iov, iov_count);
 }
 
-OM_uint32 _gss_spnego_unseal
-           (OM_uint32 * minor_status,
-            gss_ctx_id_t context_handle,
-            gss_buffer_t input_message_buffer,
-            gss_buffer_t output_message_buffer,
-            int * conf_state,
-            int * qop_state
-           )
+OM_uint32
+_gss_spnego_wrap_iov_length(OM_uint32 * minor_status,
+                           gss_ctx_id_t context_handle,
+                           int conf_req_flag,
+                           gss_qop_t qop_req,
+                           int *conf_state,
+                           gss_iov_buffer_desc *iov,
+                           int iov_count)
 {
-    gssspnego_ctx ctx;
+    gssspnego_ctx ctx = (gssspnego_ctx)context_handle;
 
     *minor_status = 0;
 
-    if (context_handle == GSS_C_NO_CONTEXT) {
-       return GSS_S_NO_CONTEXT;
-    }
-
-    ctx = (gssspnego_ctx)context_handle;
-
-    if (ctx->negotiated_ctx_id == GSS_C_NO_CONTEXT) {
+    if (ctx == NULL || ctx->negotiated_ctx_id == GSS_C_NO_CONTEXT)
        return GSS_S_NO_CONTEXT;
-    }
 
-    return gss_unseal(minor_status,
-                     ctx->negotiated_ctx_id,
-                     input_message_buffer,
-                     output_message_buffer,
-                     conf_state,
-                     qop_state);
+    return gss_wrap_iov_length(minor_status, ctx->negotiated_ctx_id,
+                              conf_req_flag, qop_req, conf_state,
+                              iov, iov_count);
 }
 
 #if 0
-OM_uint32 _gss_spnego_unwrap_ex
-           (OM_uint32 * minor_status,
-            const gss_ctx_id_t context_handle,
-           const gss_buffer_t token_header_buffer,
-           const gss_buffer_t associated_data_buffer,
-           const gss_buffer_t input_message_buffer,
-           gss_buffer_t output_message_buffer,
-           int * conf_state,
-           gss_qop_t * qop_state)
-{
-    gssspnego_ctx ctx;
-
-    *minor_status = 0;
-
-    if (context_handle == GSS_C_NO_CONTEXT) {
-       return GSS_S_NO_CONTEXT;
-    }
-
-    ctx = (gssspnego_ctx)context_handle;
-
-    if (ctx->negotiated_ctx_id == GSS_C_NO_CONTEXT) {
-       return GSS_S_NO_CONTEXT;
-    }
-
-    return gss_unwrap_ex(minor_status,
-                        ctx->negotiated_ctx_id,
-                        token_header_buffer,
-                        associated_data_buffer,
-                        input_message_buffer,
-                        output_message_buffer,
-                        conf_state,
-                        qop_state);
-}
-
-OM_uint32 _gss_spnego_wrap_ex
-           (OM_uint32 * minor_status,
-            const gss_ctx_id_t context_handle,
-            int conf_req_flag,
-            gss_qop_t qop_req,
-            const gss_buffer_t associated_data_buffer,
-            const gss_buffer_t input_message_buffer,
-            int * conf_state,
-            gss_buffer_t output_token_buffer,
-            gss_buffer_t output_message_buffer
-          )
-{
-    gssspnego_ctx ctx;
-
-    *minor_status = 0;
-
-    if (context_handle == GSS_C_NO_CONTEXT) {
-       return GSS_S_NO_CONTEXT;
-    }
-
-    ctx = (gssspnego_ctx)context_handle;
-
-    if (ctx->negotiated_ctx_id == GSS_C_NO_CONTEXT) {
-       return GSS_S_NO_CONTEXT;
-    }
-
-    if ((ctx->mech_flags & GSS_C_DCE_STYLE) == 0 &&
-       associated_data_buffer->length != input_message_buffer->length) {
-       *minor_status = EINVAL;
-       return GSS_S_BAD_QOP;
-    }
-
-    return gss_wrap_ex(minor_status,
-                      ctx->negotiated_ctx_id,
-                      conf_req_flag,
-                      qop_req,
-                      associated_data_buffer,
-                      input_message_buffer,
-                      conf_state,
-                      output_token_buffer,
-                      output_message_buffer);
-}
-
 OM_uint32 _gss_spnego_complete_auth_token
            (OM_uint32 * minor_status,
             const gss_ctx_id_t context_handle,