From 7569337e9fef72624ae12d98bee49bf3186c805d Mon Sep 17 00:00:00 2001 From: "Asanka C. Herath" Date: Mon, 1 Nov 2010 16:48:17 -0400 Subject: [PATCH] Windows: Move cache specific code out of mit_glue.c Move code for checking backwards compatible configuration file location into cache.c. Also use registry handling code from config_reg.c. --- lib/krb5/cache.c | 29 +++++++++++++++++++- lib/krb5/mit_glue.c | 64 --------------------------------------------- 2 files changed, 28 insertions(+), 65 deletions(-) diff --git a/lib/krb5/cache.c b/lib/krb5/cache.c index 435c7c123..9f66e3633 100644 --- a/lib/krb5/cache.c +++ b/lib/krb5/cache.c @@ -515,7 +515,7 @@ krb5_cc_set_default_name(krb5_context context, const char *name) #ifdef _WIN32 if (e == NULL) { - p = e = _krb5_get_default_mit_cc_name(); + e = p = _krb5_get_default_cc_name_from_registry(); } #endif if (e == NULL) { @@ -1698,3 +1698,30 @@ krb5_cc_get_kdc_offset(krb5_context context, krb5_ccache id, krb5_deltat *offset } return (*id->ops->get_kdc_offset)(context, id, offset); } + + +#ifdef _WIN32 + +char * +_krb5_get_default_cc_name_from_registry() +{ + HKEY hk_k5 = 0; + LONG code; + char * ccname = NULL; + + code = RegOpenKeyEx(HKEY_CURRENT_USER, + "Software\\MIT\\Kerberos5", + 0, KEY_READ, &hk_k5); + + if (code != ERROR_SUCCESS) + return NULL; + + ccname = _krb5_parse_reg_value_as_string(NULL, hk_k5, "ccname", + REG_NONE, 0); + + RegCloseKey(hk_k5); + + return ccname; +} + +#endif diff --git a/lib/krb5/mit_glue.c b/lib/krb5/mit_glue.c index a1d89ef32..93489b607 100644 --- a/lib/krb5/mit_glue.c +++ b/lib/krb5/mit_glue.c @@ -431,68 +431,4 @@ krb5_free_default_realm(krb5_context context, krb5_realm realm) return krb5_xfree(realm); } -#ifdef _WIN32 - -char * -_krb5_get_default_mit_cc_name(void) -{ - HKEY hk_k5 = 0; - LONG code; - DWORD type; - DWORD cb = 0, alloc_cb = 0; - LPBYTE buffer = NULL; - - code = RegOpenKeyEx(HKEY_CURRENT_USER, - "Software\\MIT\\Kerberos5", - 0, KEY_READ, &hk_k5); - - if (code != ERROR_SUCCESS) - return NULL; - - do { - code = RegQueryValueEx(hk_k5, "ccname", NULL, - &type, buffer, &cb); - - if (code != ERROR_SUCCESS && code != ERROR_MORE_DATA) - break; - - if (type != REG_SZ || cb == 0) { - code = ERROR_INVALID_PARAMETER; - break; - } - - if (buffer == NULL || code == ERROR_MORE_DATA || - cb >= alloc_cb) { - LPBYTE new_buf; - - alloc_cb = cb + sizeof(char); - new_buf = realloc(buffer, alloc_cb); - - if (new_buf == NULL) { - code = ERROR_MORE_DATA; - break; - } - - buffer = new_buf; - continue; - } - - break; - } while (TRUE); - - if (code == ERROR_SUCCESS) { - if (buffer[cb / sizeof(char) - 1] != 0) { - buffer[cb / sizeof(char)] = 0; - } - - return (char *) buffer; - } - - if (buffer) - free(buffer); - return NULL; -} - -#endif - #endif /* HEIMDAL_SMALLER */