}
} 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;
}
gss_buffer_t output_token)
{
NegTokenTarg targ;
- u_char *buf;
- size_t buf_size;
OM_uint32 ret;
targ.negResult = malloc(sizeof(*targ.negResult));
return GSS_S_FAILURE;
}
*(targ.negResult) = reject;
+
targ.supportedMech = NULL;
targ.responseToken = NULL;
targ.mechListMIC = NULL;
- ret = code_NegTokenArg (minor_status, &targ, &buf, &buf_size);
+ ret = code_NegTokenArg (minor_status, &targ,
+ (unsigned char**) &output_token->value, &output_token->length);
free_NegTokenTarg(&targ);
if (ret)
return ret;
- ret = gssapi_spnego_encapsulate(minor_status,
- buf, buf_size,
- output_token,
- GSS_SPNEGO_MECH);
- free(buf);
- if (ret)
- return ret;
return GSS_S_BAD_MECH;
}
gss_buffer_t mech_token)
{
NegTokenTarg targ;
- u_char *buf;
- size_t buf_size;
OM_uint32 ret;
memset(&targ, 0, sizeof(targ));
targ.responseToken = NULL;
}
- ret = code_NegTokenArg (minor_status, &targ, &buf, &buf_size);
+ ret = code_NegTokenArg (minor_status, &targ,
+ (unsigned char **) &output_token->value, &output_token->length);
free_NegTokenTarg(&targ);
if (ret)
return ret;
- ret = gssapi_spnego_encapsulate(minor_status,
- buf, buf_size,
- output_token,
- GSS_SPNEGO_MECH);
- free(buf);
- if (ret)
- return ret;
return GSS_S_COMPLETE;
}
{
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;
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,
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;
}