(_gss_ntlm_import_name): add support for GSS_C_NT_HOSTBASED_SERVICE names
git-svn-id: svn://svn.h5l.se/heimdal/trunk/heimdal@19382 ec53bebd-3082-4978-b11e-865c3cabbd6b
This commit is contained in:
@@ -42,9 +42,49 @@ OM_uint32 _gss_ntlm_import_name
|
||||
gss_name_t * output_name
|
||||
)
|
||||
{
|
||||
if (minor_status)
|
||||
*minor_status = 0;
|
||||
char *name, *p, *p2;
|
||||
ntlm_name n;
|
||||
|
||||
*minor_status = 0;
|
||||
|
||||
if (output_name)
|
||||
*output_name = GSS_C_NO_NAME;
|
||||
|
||||
if (!gss_oid_equal(input_name_type, GSS_C_NT_HOSTBASED_SERVICE))
|
||||
return GSS_S_BAD_NAMETYPE;
|
||||
|
||||
name = malloc(input_name_type->length + 1);
|
||||
if (name == NULL) {
|
||||
*minor_status = ENOMEM;
|
||||
return GSS_S_FAILURE;
|
||||
}
|
||||
memcpy(name, input_name_buffer->value, input_name_buffer->length);
|
||||
name[input_name_buffer->length] = '\0';
|
||||
|
||||
/* find "domain" part of the name and uppercase it */
|
||||
p = strchr(name, '@');
|
||||
if (p == NULL)
|
||||
return GSS_S_BAD_NAME;
|
||||
p++;
|
||||
p2 = strchr(p, '.');
|
||||
if (p2 && p2[1] != '\0') {
|
||||
p = p2 + 1;
|
||||
p2 = strchr(p, '.');
|
||||
if (p2)
|
||||
*p2 = '\0';
|
||||
}
|
||||
strupr(p);
|
||||
|
||||
n = malloc(sizeof(n) + strlen(p));
|
||||
if (n == NULL) {
|
||||
free(name);
|
||||
*minor_status = ENOMEM;
|
||||
return GSS_S_FAILURE;
|
||||
}
|
||||
strcpy(n->domain, p);
|
||||
free(name);
|
||||
|
||||
*output_name = (gss_name_t)n;
|
||||
|
||||
return GSS_S_COMPLETE;
|
||||
}
|
||||
|
Reference in New Issue
Block a user