#include<krbcred.h>
#include<kherror.h>
extern void (__cdecl *pinitialize_krb_error_func)();
extern void (__cdecl *pinitialize_kadm_error_table)();
khm_int32 init_error_funcs()
{
return KHM_ERROR_SUCCESS;
}
khm_int32 exit_error_funcs()
{
return KHM_ERROR_SUCCESS;
}
#ifdef DEPRECATED_REMOVABLE
HWND GetRootParent (HWND Child)
{
HWND Last;
while (Child)
{
Last = Child;
Child = GetParent (Child);
}
return Last;
}
#endif
void khm_err_describe(long code, wchar_t * buf, khm_size cbbuf,
DWORD * suggestion,
kherr_suggestion * suggest_code)
{
const char * com_err_msg;
int offset;
long table_num;
DWORD msg_id = 0;
DWORD sugg_id = 0;
kherr_suggestion sugg_code = KHERR_SUGGEST_NONE;
if (suggestion == NULL || buf == NULL || cbbuf == 0 || suggest_code == 0)
return;
*buf = L'\0';
offset = (int) (code & 255);
table_num = code - offset;
com_err_msg = perror_message(code);
*suggestion = 0;
*suggest_code = KHERR_SUGGEST_NONE;
if (WSABASEERR <= code && code < (WSABASEERR + 1064)) {
table_num = WSABASEERR;
offset = code - WSABASEERR;
}
switch(table_num)
{
case krb_err_base:
case kadm_err_base:
case WSABASEERR:
break;
default:
if (code == KRB5KRB_AP_ERR_BAD_INTEGRITY) {
*suggestion = MSG_ERR_S_INTEGRITY;
}
*suggest_code = KHERR_SUGGEST_RETRY;
AnsiStrToUnicode(buf, cbbuf, com_err_msg);
return;
}
if (table_num == krb_err_base) {
switch(offset) {
case KDC_NAME_EXP:
case KDC_SERVICE_EXP:
case KDC_AUTH_EXP:
case KDC_PKT_VER:
case KDC_P_MKEY_VER:
case KDC_S_MKEY_VER:
case KDC_BYTE_ORDER:
case KDC_PR_N_UNIQUE:
case KDC_NULL_KEY:
case KDC_GEN_ERR:
case INTK_W_NOTALL :
case INTK_PROT :
case INTK_ERR :
msg_id = MSG_ERR_UNKNOWN;
sugg_code = KHERR_SUGGEST_RETRY;
break;
case KDC_PR_UNKNOWN:
msg_id = MSG_ERR_PR_UNKNOWN;
sugg_code = KHERR_SUGGEST_RETRY;
break;
case GC_TKFIL :
case GC_NOTKT :
msg_id = MSG_ERR_TKFIL;
sugg_id = MSG_ERR_S_TKFIL;
sugg_code = KHERR_SUGGEST_RETRY;
break;
case MK_AP_TGTEXP :
break;
case RD_AP_TIME :
msg_id = MSG_ERR_CLOCKSKEW;
sugg_id = MSG_ERR_S_CLOCKSKEW;
sugg_code = KHERR_SUGGEST_RETRY;
break;
case RD_AP_UNDEC :
case RD_AP_EXP :
case RD_AP_NYV :
case RD_AP_REPEAT :
case RD_AP_NOT_US :
case RD_AP_INCON :
case RD_AP_BADD :
case RD_AP_VERSION :
case RD_AP_MSG_TYPE :
case RD_AP_MODIFIED :
case RD_AP_ORDER :
case RD_AP_UNAUTHOR :
sugg_code = KHERR_SUGGEST_RETRY;
break;
case GT_PW_NULL:
case GT_PW_BADPW:
case GT_PW_PROT:
case GT_PW_KDCERR:
case GT_PW_NULLTKT:
sugg_code = KHERR_SUGGEST_RETRY;
break;
case SKDC_RETRY :
case SKDC_CANT :
msg_id = MSG_ERR_KDC_CONTACT;
break;
case INTK_BADPW :
sugg_code = KHERR_SUGGEST_RETRY;
break;
default:
break;
}
} else if (table_num == kadm_err_base) {
switch(code) {
case KADM_INSECURE_PW:
msg_id = MSG_ERR_INSECURE_PW;
sugg_code = KHERR_SUGGEST_RETRY;
break;
default:
break;
}
} else if (table_num == WSABASEERR) {
switch(code) {
case WSAENETDOWN:
msg_id = MSG_ERR_NETDOWN;
sugg_id = MSG_ERR_S_NETRETRY;
sugg_code = KHERR_SUGGEST_RETRY;
break;
case WSATRY_AGAIN:
msg_id = MSG_ERR_TEMPDOWN;
sugg_id = MSG_ERR_S_TEMPDOWN;
sugg_code = KHERR_SUGGEST_RETRY;
break;
case WSAENETUNREACH:
case WSAENETRESET:
case WSAECONNABORTED:
case WSAECONNRESET:
case WSAETIMEDOUT:
case WSAECONNREFUSED:
case WSAEHOSTDOWN:
case WSAEHOSTUNREACH:
msg_id = MSG_ERR_NOHOST;
sugg_id = MSG_ERR_S_NOHOST;
sugg_code = KHERR_SUGGEST_RETRY;
break;
}
}
if (msg_id != 0) {
FormatMessage(FORMAT_MESSAGE_FROM_HMODULE |
FORMAT_MESSAGE_IGNORE_INSERTS,
KHERR_HMODULE,
msg_id,
0,
buf,
(int) (cbbuf / sizeof(buf[0])),
NULL);
}
if (sugg_id != 0) {
*suggestion = sugg_id;
}
if (sugg_code != KHERR_SUGGEST_NONE)
*suggest_code = sugg_code;
}
#ifdef DEPRECATED_REMOVABLE
int lsh_com_err_proc (LPSTR whoami, long code,
LPSTR fmt, va_list args)
{
int retval;
HWND hOldFocus;
char buf[1024], *cp;
WORD mbformat = MB_OK | MB_ICONEXCLAMATION;
cp = buf;
memset(buf, '\0', sizeof(buf));
cp[0] = '\0';
if (code)
{
err_describe(buf, code);
while (*cp)
cp++;
}
if (fmt)
{
if (fmt[0] == '%' && fmt[1] == 'b')
{
fmt += 2;
mbformat = va_arg(args, WORD);
}
if (code)
{
*cp++ = '\n';
*cp++ = '\n';
}
wvsprintfA((LPSTR)cp, fmt, args);
}
hOldFocus = GetFocus();
retval = MessageBoxA(NULL, buf, whoami,
mbformat | MB_ICONHAND | MB_TASKMODAL);
SetFocus(hOldFocus);
return retval;
}
#endif