From: Jeffrey Altman Date: Tue, 27 Sep 2011 17:49:52 +0000 (-0400) Subject: Do not call krb5_get_error_message with NULL context X-Git-Tag: upstream/1.8.0_pre1^2~3200 X-Git-Url: https://git.michaelhowe.org/gitweb/?a=commitdiff_plain;h=9dd9cfa0e1536e0e75628c84605b3d5b8486d69c;p=packages%2Fo%2Fopenafs.git 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 --- diff --git a/src/WINNT/aklog/aklog.c b/src/WINNT/aklog/aklog.c index ddc86cfbf..80559f67c 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 f80d92c6a..fc4218d01 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 7160d636f..fd2ecc787 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;