aboutsummaryrefslogtreecommitdiff
path: root/src/lib/krb5/os/ktdefname.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/lib/krb5/os/ktdefname.c')
-rw-r--r--src/lib/krb5/os/ktdefname.c22
1 files changed, 15 insertions, 7 deletions
diff --git a/src/lib/krb5/os/ktdefname.c b/src/lib/krb5/os/ktdefname.c
index c645635..0493244 100644
--- a/src/lib/krb5/os/ktdefname.c
+++ b/src/lib/krb5/os/ktdefname.c
@@ -30,6 +30,9 @@
extern char *krb5_defkeyname;
+/* this is a an exceedinly gross thing. */
+char *krb5_overridekeyname = NULL;
+
KRB5_DLLIMP krb5_error_code KRB5_CALLCONV
krb5_kt_default_name(context, name, namesize)
krb5_context context;
@@ -40,19 +43,24 @@ krb5_kt_default_name(context, name, namesize)
krb5_error_code code;
char *retval;
- if ((context->profile_secure == FALSE) &&
+ if (krb5_overridekeyname) {
+ if ((size_t) namesize < (strlen(krb5_overridekeyname)+1))
+ return KRB5_CONFIG_NOTENUFSPACE;
+ strcpy(name, krb5_overridekeyname);
+ } else if ((context->profile_secure == FALSE) &&
(cp = getenv("KRB5_KTNAME"))) {
- strncpy(name, cp, namesize);
- if (strlen(cp) >= (size_t) namesize)
+ if ((size_t) namesize < (strlen(cp)+1))
return KRB5_CONFIG_NOTENUFSPACE;
+ strcpy(name, cp);
} else if (((code = profile_get_string(context->profile,
"libdefaults",
"default_keytab_name", NULL,
NULL, &retval)) == 0) &&
retval) {
- strncpy(name, retval, namesize);
- if ((size_t) namesize < strlen(retval))
+ if ((size_t) namesize < (strlen(retval)+1))
return KRB5_CONFIG_NOTENUFSPACE;
+ strcpy(name, retval);
+ free(retval);
} else {
#if defined (_MSDOS) || defined(_WIN32)
{
@@ -66,9 +74,9 @@ krb5_kt_default_name(context, name, namesize)
sprintf(name, krb5_defkeyname, defname);
}
#else
- strncpy(name, krb5_defkeyname, namesize);
- if ((size_t) namesize < strlen(krb5_defkeyname))
+ if ((size_t) namesize < (strlen(krb5_defkeyname)+1))
return KRB5_CONFIG_NOTENUFSPACE;
+ strcpy(name, krb5_defkeyname);
#endif
}
return 0;