diff options
author | Andrew Bartlett <abartlet@samba.org> | 2011-01-31 15:59:06 +1100 |
---|---|---|
committer | Andrew Bartlett <abartlet@samba.org> | 2011-02-02 15:19:03 +1100 |
commit | 2d9bcc861d6b2cd67d7c6439e90d9ac4a600f0f2 (patch) | |
tree | ce681728eb91875b60b70d34247a0f07772ec411 /source4/heimdal/lib/krb5/keytab.c | |
parent | 3d4a9ddc244bd4937af9ff1c6e898ab45a7d28b5 (diff) | |
download | samba-2d9bcc861d6b2cd67d7c6439e90d9ac4a600f0f2.tar.gz samba-2d9bcc861d6b2cd67d7c6439e90d9ac4a600f0f2.tar.bz2 samba-2d9bcc861d6b2cd67d7c6439e90d9ac4a600f0f2.zip |
s4:heimdal: import lorikeet-heimdal-201101310455 (commit aa88eb1a05c4985cc23fb65fc1bad75bdce01c1f)
Diffstat (limited to 'source4/heimdal/lib/krb5/keytab.c')
-rw-r--r-- | source4/heimdal/lib/krb5/keytab.c | 41 |
1 files changed, 31 insertions, 10 deletions
diff --git a/source4/heimdal/lib/krb5/keytab.c b/source4/heimdal/lib/krb5/keytab.c index d1ffd57738..e060774533 100644 --- a/source4/heimdal/lib/krb5/keytab.c +++ b/source4/heimdal/lib/krb5/keytab.c @@ -164,6 +164,36 @@ krb5_kt_register(krb5_context context, 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' * into a keytab in `id'. @@ -189,16 +219,7 @@ krb5_kt_resolve(krb5_context context, size_t type_len; krb5_error_code ret; - residual = strchr(name, ':'); - if(residual == NULL) { - type = "FILE"; - type_len = strlen(type); - residual = name; - } else { - type = name; - type_len = residual - name; - residual++; - } + residual = keytab_name(name, &type, &type_len); for(i = 0; i < context->num_kt_types; i++) { if(strncasecmp(type, context->kt_types[i].prefix, type_len) == 0) |