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);
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);
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),
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 |
*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;