From b8af153f50faa93a23142fbcdc984bfaeaae78b8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Love=20H=C3=B6rnquist=20=C3=85strand?= Date: Mon, 5 Apr 2004 08:48:20 +0000 Subject: [PATCH] (spnego_initial): handle mech_token better git-svn-id: svn://svn.h5l.se/heimdal/trunk/heimdal@13682 ec53bebd-3082-4978-b11e-865c3cabbd6b --- lib/gssapi/init_sec_context.c | 12 +++++++++--- lib/gssapi/krb5/init_sec_context.c | 12 +++++++++--- 2 files changed, 18 insertions(+), 6 deletions(-) diff --git a/lib/gssapi/init_sec_context.c b/lib/gssapi/init_sec_context.c index aca66594a..c5e75e67d 100644 --- a/lib/gssapi/init_sec_context.c +++ b/lib/gssapi/init_sec_context.c @@ -879,7 +879,15 @@ spnego_initial return GSS_S_FAILURE; } ni.mechToken->length = mech_token.length; - ni.mechToken->data = mech_token.value; + ni.mechToken->data = malloc(mech_token.length); + if (ni.mechToken->data == NULL && mech_token.length != 0) { + free_NegTokenInit(&ni); + gss_release_buffer(&minor, &mech_token); + *minor_status = ENOMEM; + return GSS_S_FAILURE; + } + memcpy(ni.mechToken->data, mech_token.value, mech_token.length); + gss_release_buffer(&minor, &mech_token); } else ni.mechToken = NULL; @@ -952,8 +960,6 @@ spnego_initial data.data = buf + buf_size - buf_len; data.length = buf_len; #endif - if (mech_token.length != 0) - gss_release_buffer(&minor, &mech_token); free_NegTokenInit(&ni); if (ret) return ret; diff --git a/lib/gssapi/krb5/init_sec_context.c b/lib/gssapi/krb5/init_sec_context.c index aca66594a..c5e75e67d 100644 --- a/lib/gssapi/krb5/init_sec_context.c +++ b/lib/gssapi/krb5/init_sec_context.c @@ -879,7 +879,15 @@ spnego_initial return GSS_S_FAILURE; } ni.mechToken->length = mech_token.length; - ni.mechToken->data = mech_token.value; + ni.mechToken->data = malloc(mech_token.length); + if (ni.mechToken->data == NULL && mech_token.length != 0) { + free_NegTokenInit(&ni); + gss_release_buffer(&minor, &mech_token); + *minor_status = ENOMEM; + return GSS_S_FAILURE; + } + memcpy(ni.mechToken->data, mech_token.value, mech_token.length); + gss_release_buffer(&minor, &mech_token); } else ni.mechToken = NULL; @@ -952,8 +960,6 @@ spnego_initial data.data = buf + buf_size - buf_len; data.length = buf_len; #endif - if (mech_token.length != 0) - gss_release_buffer(&minor, &mech_token); free_NegTokenInit(&ni); if (ret) return ret;