Windows: Don't treat drive letters as keytab types

This commit is contained in:
Asanka C. Herath
2010-12-02 01:16:32 -05:00
parent 3e8172f9e3
commit 94aa4de1b9

View File

@@ -164,6 +164,36 @@ krb5_kt_register(krb5_context context,
return 0; return 0;
} }
static const char *
keytab_name(const char * name, const char ** ptype, size_t * ptype_len)
{
const char * residual;
residual = strchr(name, ':');
if (residual == NULL
#ifdef _WIN32
/* Avoid treating <drive>:<path> as a keytab type
* specification */
|| name + 1 == residual
#endif
) {
*ptype = "FILE";
*ptype_len = strlen(*ptype);
residual = name;
} else {
*ptype = name;
*ptype_len = residual - name;
residual++;
}
return residual;
}
/** /**
* Resolve the keytab name (of the form `type:residual') in `name' * Resolve the keytab name (of the form `type:residual') in `name'
* into a keytab in `id'. * into a keytab in `id'.
@@ -189,16 +219,7 @@ krb5_kt_resolve(krb5_context context,
size_t type_len; size_t type_len;
krb5_error_code ret; krb5_error_code ret;
residual = strchr(name, ':'); residual = keytab_name(name, &type, &type_len);
if(residual == NULL) {
type = "FILE";
type_len = strlen(type);
residual = name;
} else {
type = name;
type_len = residual - name;
residual++;
}
for(i = 0; i < context->num_kt_types; i++) { for(i = 0; i < context->num_kt_types; i++) {
if(strncasecmp(type, context->kt_types[i].prefix, type_len) == 0) if(strncasecmp(type, context->kt_types[i].prefix, type_len) == 0)