refactor code, implement GSS_KRB5_CCACHE_NAME_X
git-svn-id: svn://svn.h5l.se/heimdal/trunk/heimdal@20384 ec53bebd-3082-4978-b11e-865c3cabbd6b
This commit is contained in:
@@ -51,6 +51,25 @@ get_bool(OM_uint32 *minor_status,
|
|||||||
return GSS_S_COMPLETE;
|
return GSS_S_COMPLETE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static OM_uint32
|
||||||
|
get_string(OM_uint32 *minor_status,
|
||||||
|
const gss_buffer_t value,
|
||||||
|
char **str)
|
||||||
|
{
|
||||||
|
if (value == NULL || value->length == 0) {
|
||||||
|
*str = NULL;
|
||||||
|
} else {
|
||||||
|
*str = malloc(value->length + 1);
|
||||||
|
if (*str == NULL) {
|
||||||
|
*minor_status = 0;
|
||||||
|
return GSS_S_UNAVAILABLE;
|
||||||
|
}
|
||||||
|
memcpy(*str, value->value, value->length);
|
||||||
|
(*str)[value->length] = '\0';
|
||||||
|
}
|
||||||
|
return GSS_S_COMPLETE;
|
||||||
|
}
|
||||||
|
|
||||||
OM_uint32
|
OM_uint32
|
||||||
_gsskrb5_set_sec_context_option
|
_gsskrb5_set_sec_context_option
|
||||||
(OM_uint32 *minor_status,
|
(OM_uint32 *minor_status,
|
||||||
@@ -103,17 +122,9 @@ _gsskrb5_set_sec_context_option
|
|||||||
} else if (gss_oid_equal(desired_object, GSS_KRB5_REGISTER_ACCEPTOR_IDENTITY_X)) {
|
} else if (gss_oid_equal(desired_object, GSS_KRB5_REGISTER_ACCEPTOR_IDENTITY_X)) {
|
||||||
char *str;
|
char *str;
|
||||||
|
|
||||||
if (value == NULL || value->length == 0) {
|
maj_stat = get_string(minor_status, value, &str);
|
||||||
str = NULL;
|
if (maj_stat != GSS_S_COMPLETE)
|
||||||
} else {
|
return maj_stat;
|
||||||
str = malloc(value->length + 1);
|
|
||||||
if (str) {
|
|
||||||
*minor_status = 0;
|
|
||||||
return GSS_S_UNAVAILABLE;
|
|
||||||
}
|
|
||||||
memcpy(str, value->value, value->length);
|
|
||||||
str[value->length] = '\0';
|
|
||||||
}
|
|
||||||
|
|
||||||
_gsskrb5_register_acceptor_identity(str);
|
_gsskrb5_register_acceptor_identity(str);
|
||||||
free(str);
|
free(str);
|
||||||
@@ -124,17 +135,13 @@ _gsskrb5_set_sec_context_option
|
|||||||
} else if (gss_oid_equal(desired_object, GSS_KRB5_SET_DEFAULT_REALM_X)) {
|
} else if (gss_oid_equal(desired_object, GSS_KRB5_SET_DEFAULT_REALM_X)) {
|
||||||
char *str;
|
char *str;
|
||||||
|
|
||||||
if (value == NULL || value->length == 0) {
|
maj_stat = get_string(minor_status, value, &str);
|
||||||
|
if (maj_stat != GSS_S_COMPLETE)
|
||||||
|
return maj_stat;
|
||||||
|
if (str == NULL) {
|
||||||
*minor_status = 0;
|
*minor_status = 0;
|
||||||
return GSS_S_CALL_INACCESSIBLE_READ;
|
return GSS_S_CALL_INACCESSIBLE_READ;
|
||||||
}
|
}
|
||||||
str = malloc(value->length + 1);
|
|
||||||
if (str == NULL) {
|
|
||||||
*minor_status = 0;
|
|
||||||
return GSS_S_UNAVAILABLE;
|
|
||||||
}
|
|
||||||
memcpy(str, value->value, value->length);
|
|
||||||
str[value->length] = '\0';
|
|
||||||
|
|
||||||
krb5_set_default_realm(context, str);
|
krb5_set_default_realm(context, str);
|
||||||
free(str);
|
free(str);
|
||||||
@@ -161,8 +168,24 @@ _gsskrb5_set_sec_context_option
|
|||||||
|
|
||||||
*minor_status = 0;
|
*minor_status = 0;
|
||||||
return GSS_S_COMPLETE;
|
return GSS_S_COMPLETE;
|
||||||
}
|
} else if (gss_oid_equal(desired_object, GSS_KRB5_CCACHE_NAME_X)) {
|
||||||
|
char *str;
|
||||||
|
|
||||||
|
maj_stat = get_string(minor_status, value, &str);
|
||||||
|
if (maj_stat != GSS_S_COMPLETE)
|
||||||
|
return maj_stat;
|
||||||
|
if (str == NULL) {
|
||||||
|
*minor_status = 0;
|
||||||
|
return GSS_S_CALL_INACCESSIBLE_READ;
|
||||||
|
}
|
||||||
|
|
||||||
|
*minor_status = krb5_cc_set_default_name(context, str);
|
||||||
|
free(str);
|
||||||
|
if (*minor_status)
|
||||||
|
return GSS_S_FAILURE;
|
||||||
|
|
||||||
|
return GSS_S_COMPLETE;
|
||||||
|
}
|
||||||
|
|
||||||
*minor_status = EINVAL;
|
*minor_status = EINVAL;
|
||||||
return GSS_S_FAILURE;
|
return GSS_S_FAILURE;
|
||||||
|
Reference in New Issue
Block a user