}
} 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;
}
}
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;
{
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;
}