= gss_acquire_cred should handle a NULL desired_name
= add a call to gssapi_krb5_init git-svn-id: svn://svn.h5l.se/heimdal/trunk/heimdal@10976 ec53bebd-3082-4978-b11e-865c3cabbd6b
This commit is contained in:
@@ -51,17 +51,21 @@ OM_uint32 gss_acquire_cred
|
|||||||
krb5_error_code kret = 0;
|
krb5_error_code kret = 0;
|
||||||
krb5_ccache ccache;
|
krb5_ccache ccache;
|
||||||
|
|
||||||
|
gssapi_krb5_init ();
|
||||||
|
|
||||||
handle = (gss_cred_id_t)malloc(sizeof(*handle));
|
handle = (gss_cred_id_t)malloc(sizeof(*handle));
|
||||||
if (handle == GSS_C_NO_CREDENTIAL)
|
if (handle == GSS_C_NO_CREDENTIAL)
|
||||||
return GSS_S_FAILURE;
|
return GSS_S_FAILURE;
|
||||||
|
|
||||||
memset(handle, 0, sizeof (*handle));
|
memset(handle, 0, sizeof (*handle));
|
||||||
|
|
||||||
|
if (desired_name != NULL) {
|
||||||
ret = gss_duplicate_name(minor_status, desired_name, &handle->principal);
|
ret = gss_duplicate_name(minor_status, desired_name, &handle->principal);
|
||||||
if (ret) {
|
if (ret) {
|
||||||
free(handle);
|
free(handle);
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
if (krb5_cc_default(gssapi_krb5_context, &ccache) == 0) {
|
if (krb5_cc_default(gssapi_krb5_context, &ccache) == 0) {
|
||||||
krb5_principal def_princ;
|
krb5_principal def_princ;
|
||||||
@@ -71,7 +75,15 @@ OM_uint32 gss_acquire_cred
|
|||||||
krb5_cc_close(gssapi_krb5_context, ccache);
|
krb5_cc_close(gssapi_krb5_context, ccache);
|
||||||
goto try_keytab;
|
goto try_keytab;
|
||||||
}
|
}
|
||||||
if (krb5_principal_compare(gssapi_krb5_context, handle->principal,
|
if (handle->principal == NULL) {
|
||||||
|
ret = gss_duplicate_name(minor_status, def_princ, &handle->principal);
|
||||||
|
if (ret) {
|
||||||
|
free(handle);
|
||||||
|
krb5_free_principal(gssapi_krb5_context, def_princ);
|
||||||
|
krb5_cc_close(gssapi_krb5_context, ccache);
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
} else if (krb5_principal_compare(gssapi_krb5_context, handle->principal,
|
||||||
def_princ) == FALSE) {
|
def_princ) == FALSE) {
|
||||||
krb5_free_principal(gssapi_krb5_context, def_princ);
|
krb5_free_principal(gssapi_krb5_context, def_princ);
|
||||||
krb5_cc_close(gssapi_krb5_context, ccache);
|
krb5_cc_close(gssapi_krb5_context, ccache);
|
||||||
|
@@ -51,17 +51,21 @@ OM_uint32 gss_acquire_cred
|
|||||||
krb5_error_code kret = 0;
|
krb5_error_code kret = 0;
|
||||||
krb5_ccache ccache;
|
krb5_ccache ccache;
|
||||||
|
|
||||||
|
gssapi_krb5_init ();
|
||||||
|
|
||||||
handle = (gss_cred_id_t)malloc(sizeof(*handle));
|
handle = (gss_cred_id_t)malloc(sizeof(*handle));
|
||||||
if (handle == GSS_C_NO_CREDENTIAL)
|
if (handle == GSS_C_NO_CREDENTIAL)
|
||||||
return GSS_S_FAILURE;
|
return GSS_S_FAILURE;
|
||||||
|
|
||||||
memset(handle, 0, sizeof (*handle));
|
memset(handle, 0, sizeof (*handle));
|
||||||
|
|
||||||
|
if (desired_name != NULL) {
|
||||||
ret = gss_duplicate_name(minor_status, desired_name, &handle->principal);
|
ret = gss_duplicate_name(minor_status, desired_name, &handle->principal);
|
||||||
if (ret) {
|
if (ret) {
|
||||||
free(handle);
|
free(handle);
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
if (krb5_cc_default(gssapi_krb5_context, &ccache) == 0) {
|
if (krb5_cc_default(gssapi_krb5_context, &ccache) == 0) {
|
||||||
krb5_principal def_princ;
|
krb5_principal def_princ;
|
||||||
@@ -71,7 +75,15 @@ OM_uint32 gss_acquire_cred
|
|||||||
krb5_cc_close(gssapi_krb5_context, ccache);
|
krb5_cc_close(gssapi_krb5_context, ccache);
|
||||||
goto try_keytab;
|
goto try_keytab;
|
||||||
}
|
}
|
||||||
if (krb5_principal_compare(gssapi_krb5_context, handle->principal,
|
if (handle->principal == NULL) {
|
||||||
|
ret = gss_duplicate_name(minor_status, def_princ, &handle->principal);
|
||||||
|
if (ret) {
|
||||||
|
free(handle);
|
||||||
|
krb5_free_principal(gssapi_krb5_context, def_princ);
|
||||||
|
krb5_cc_close(gssapi_krb5_context, ccache);
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
} else if (krb5_principal_compare(gssapi_krb5_context, handle->principal,
|
||||||
def_princ) == FALSE) {
|
def_princ) == FALSE) {
|
||||||
krb5_free_principal(gssapi_krb5_context, def_princ);
|
krb5_free_principal(gssapi_krb5_context, def_princ);
|
||||||
krb5_cc_close(gssapi_krb5_context, ccache);
|
krb5_cc_close(gssapi_krb5_context, ccache);
|
||||||
|
Reference in New Issue
Block a user