]> git.michaelhowe.org Git - packages/o/openafs.git/commitdiff
Do not call krb5_get_error_message with NULL context
authorJeffrey Altman <jaltman@your-file-system.com>
Tue, 27 Sep 2011 17:49:52 +0000 (13:49 -0400)
committerJeffrey Altman <jaltman@openafs.org>
Sat, 1 Oct 2011 04:41:14 +0000 (21:41 -0700)
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 <buildbot@rampaginggeek.com>
Reviewed-by: Jeffrey Altman <jaltman@openafs.org>
Tested-by: Jeffrey Altman <jaltman@openafs.org>
src/WINNT/aklog/aklog.c
src/WINNT/netidmgr_plugin/krb5common.c
src/libadmin/adminutil/afs_utilAdmin.c

index ddc86cfbf27b18a80235bc97f7103df46f70609c..80559f67caa4e39e33464b693f5d44b74523d423 100644 (file)
@@ -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);
index f80d92c6a395191a0a7c07ddbb72eac739493f6b..fc4218d01366a91eda596c335d4f020f69434be1 100644 (file)
@@ -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 |
index 7160d636fd8111aa56d828cbbbe49efdf66addb8..fd2ecc7876e57c0a994b419ff6c8ae30ccea4cc2 100644 (file)
@@ -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;