From 9dd9cfa0e1536e0e75628c84605b3d5b8486d69c Mon Sep 17 00:00:00 2001 From: Jeffrey Altman Date: Tue, 27 Sep 2011 13:49:52 -0400 Subject: [PATCH] Do not call krb5_get_error_message with NULL context MIT's krb5_get_error_message() ignores the context and can be called with a NULL context. Heimdal's version does not. Change-Id: I31801b0e0044e5e724298404645517e4425b0f09 Reviewed-on: http://gerrit.openafs.org/5508 Tested-by: BuildBot Reviewed-by: Jeffrey Altman Tested-by: Jeffrey Altman --- src/WINNT/aklog/aklog.c | 15 +++++++++++---- src/WINNT/netidmgr_plugin/krb5common.c | 8 ++++---- src/libadmin/adminutil/afs_utilAdmin.c | 12 +++++++++++- 3 files changed, 26 insertions(+), 9 deletions(-) diff --git a/src/WINNT/aklog/aklog.c b/src/WINNT/aklog/aklog.c index ddc86cf..80559f6 100644 --- a/src/WINNT/aklog/aklog.c +++ b/src/WINNT/aklog/aklog.c @@ -211,6 +211,8 @@ void akexit(int exit_code) void redirect_errors(const char *who, afs_int32 code, const char *fmt, va_list ap) { + krb5_context context; + if (who) { fputs(who, stderr); fputs(": ", stderr); @@ -219,13 +221,18 @@ redirect_errors(const char *who, afs_int32 code, const char *fmt, va_list ap) int freestr = 0; char *str = (char *)afs_error_message(code); if (strncmp(str, "unknown", strlen(str)) == 0) { - str = krb5_get_error_message(NULL, code); - freestr = 1; + if (krb5_init_context(&context)) + { + str = krb5_get_error_message(NULL, code); + freestr = 1; + } } fputs(str, stderr); fputs(" ", stderr); - if (freestr) - krb5_free_error_message(NULL, str); + if (freestr) { + krb5_free_error_message(context, str); + krb5_free_context(context); + } } if (fmt) { vfprintf(stderr, fmt, ap); diff --git a/src/WINNT/netidmgr_plugin/krb5common.c b/src/WINNT/netidmgr_plugin/krb5common.c index f80d92c..fc4218d 100644 --- a/src/WINNT/netidmgr_plugin/krb5common.c +++ b/src/WINNT/netidmgr_plugin/krb5common.c @@ -55,8 +55,8 @@ khm_krb5_error(krb5_error_code rc, LPCSTR FailedFunctionName, const char *errText; int krb5Error = ((int)(rc & 255)); - if (krb5_get_error_message) - errText = krb5_get_error_message(rc); + if (*ctx && krb5_get_error_message) + errText = krb5_get_error_message(*ctx, rc); else errText = perror_message(rc); _snprintf(message, sizeof(message), @@ -64,8 +64,8 @@ khm_krb5_error(krb5_error_code rc, LPCSTR FailedFunctionName, errText, krb5Error, FailedFunctionName); - if (krb5_free_error_message) - krb5_free_error_message(errText); + if (*ctx && krb5_free_error_message) + krb5_free_error_message(*ctx, errText); MessageBoxA(NULL, message, "Kerberos Five", MB_OK | MB_ICONERROR | MB_TASKMODAL | diff --git a/src/libadmin/adminutil/afs_utilAdmin.c b/src/libadmin/adminutil/afs_utilAdmin.c index 7160d63..fd2ecc7 100644 --- a/src/libadmin/adminutil/afs_utilAdmin.c +++ b/src/libadmin/adminutil/afs_utilAdmin.c @@ -102,7 +102,17 @@ util_AdminErrorCodeTranslate(afs_status_t errorCode, int langId, *errorTextP = afs_error_message(code); #ifdef AFS_KRB5_ERROR_ENV if (strncmp(*errorTextP, "unknown", strlen("unknown")) == 0) { - *errorTextP = krb5_get_error_message(NULL, code); + krb5_context context; + if (!krb5_init_context(&context)) + { + char *msg; + msg = krb5_get_error_message(context, code); + if (msg) { + *errorTextP = strdup(msg); + krb5_free_error_message(context, msg); + } + krb5_free_context(context); + } } #endif rc = 1; -- 1.9.4