Conf file is now in source tree
[mod_auth_kerb.cvs/.git] / spnegokrb5 / accept_sec_context.c
index 9f76695..cb12158 100644 (file)
@@ -37,7 +37,7 @@ code_NegTokenArg(OM_uint32 *minor_status,
            ret = der_put_length_and_tag(buf + buf_size - buf_len - 1,
                                         buf_size - buf_len,
                                         buf_len,
-                                        CONTEXT,
+                                        KERB_CTXT,
                                         CONS,
                                         1,
                                         &tmp);
@@ -64,8 +64,18 @@ code_NegTokenArg(OM_uint32 *minor_status,
        }
     } while (ret == ASN1_OVERFLOW);
 
-    *outbuf      = buf + buf_size - buf_len;
+    *outbuf = malloc(buf_len);
+    if (*outbuf == NULL) {
+       *minor_status = ENOMEM;
+       free(buf);
+       return GSS_S_FAILURE;
+    }
+
+    memcpy(*outbuf, buf + buf_size - buf_len, buf_len);
     *outbuf_size = buf_len;
+
+    free(buf);
+    
     return GSS_S_COMPLETE;
 }
 
@@ -145,7 +155,7 @@ send_accept (OM_uint32 *minor_status,
     }
 
     ret = code_NegTokenArg (minor_status, &targ, 
-                           (unsigned char**) &output_token->value, &output_token->length);
+                           (unsigned char **) &output_token->value, &output_token->length);
     free_NegTokenTarg(&targ);
     if (ret)
        return ret;
@@ -153,7 +163,7 @@ send_accept (OM_uint32 *minor_status,
     return GSS_S_COMPLETE;
 }
 
-OM_uint32 gss_accept_sec_context_spnego
+OM_uint32 KRB5_LIB_FUNCTION gss_accept_sec_context_spnego
            (OM_uint32 * minor_status,
             gss_ctx_id_t * context_handle,
             const gss_cred_id_t acceptor_cred_handle,
@@ -168,9 +178,9 @@ OM_uint32 gss_accept_sec_context_spnego
 {
    NegTokenInit init_token;
    OM_uint32 major_status;
+   OM_uint32 minor_status2;
    gss_buffer_desc ibuf, obuf;
    gss_buffer_t ot = NULL;
-   OM_uint32 minor;
    unsigned char *buf;
    size_t buf_size;
    size_t len, taglen, ni_len;
@@ -184,7 +194,7 @@ OM_uint32 gss_accept_sec_context_spnego
    if (ret)
       return ret;
 
-   ret = der_match_tag_and_length(buf, buf_size, CONTEXT, CONS,
+   ret = der_match_tag_and_length(buf, buf_size, KERB_CTXT, CONS,
                                  0, &len, &taglen);
    if (ret)
       return ret;
@@ -199,7 +209,7 @@ OM_uint32 gss_accept_sec_context_spnego
       return send_reject (minor_status, output_token);
 
    for (i = 0; !found && i < init_token.mechTypes->len; ++i) {
-      char mechbuf[17];
+      unsigned char mechbuf[17];
       size_t mech_len;
 
       ret = der_put_oid (mechbuf + sizeof(mechbuf) - 1,
@@ -222,7 +232,7 @@ OM_uint32 gss_accept_sec_context_spnego
       ibuf.length = init_token.mechToken->length;
       ibuf.value  = init_token.mechToken->data;
 
-      major_status = gss_accept_sec_context(&minor,
+      major_status = gss_accept_sec_context(minor_status,
                                            context_handle,
                                            acceptor_cred_handle,
                                            &ibuf,
@@ -234,15 +244,15 @@ OM_uint32 gss_accept_sec_context_spnego
                                            time_rec,
                                            delegated_cred_handle);
       if (GSS_ERROR(major_status)) {
-        send_reject (minor_status, output_token);
+        send_reject (&minor_status2, output_token);
         return major_status;
       }
       ot = &obuf;
    }
 
-   ret = send_accept (minor_status, output_token, ot);
+   ret = send_accept (&minor_status2, output_token, ot);
    if (ot != NULL)
-      gss_release_buffer(&minor, ot);
+      gss_release_buffer(&minor_status2, ot);
 
    return ret;
 }