783
783
#endif /* USE_LIBIDN */
785
#ifdef USE_WINDOWS_SSPI
786
const char *Curl_sspi_strerror (struct connectdata *conn, int err)
788
#ifndef CURL_DISABLE_VERBOSE_STRINGS
790
char msgbuf[sizeof(conn->syserr_buf)];
791
char *p, *str, *msg = NULL;
792
bool msg_formatted = FALSE;
801
outbuf = conn->syserr_buf;
802
outmax = sizeof(conn->syserr_buf)-1;
805
#ifndef CURL_DISABLE_VERBOSE_STRINGS
813
case SEC_E_ALGORITHM_MISMATCH:
814
txt = "SEC_E_ALGORITHM_MISMATCH";
816
case SEC_E_BAD_BINDINGS:
817
txt = "SEC_E_BAD_BINDINGS";
819
case SEC_E_BAD_PKGID:
820
txt = "SEC_E_BAD_PKGID";
822
case SEC_E_BUFFER_TOO_SMALL:
823
txt = "SEC_E_BUFFER_TOO_SMALL";
825
case SEC_E_CANNOT_INSTALL:
826
txt = "SEC_E_CANNOT_INSTALL";
828
case SEC_E_CANNOT_PACK:
829
txt = "SEC_E_CANNOT_PACK";
831
case SEC_E_CERT_EXPIRED:
832
txt = "SEC_E_CERT_EXPIRED";
834
case SEC_E_CERT_UNKNOWN:
835
txt = "SEC_E_CERT_UNKNOWN";
837
case SEC_E_CERT_WRONG_USAGE:
838
txt = "SEC_E_CERT_WRONG_USAGE";
840
case SEC_E_CONTEXT_EXPIRED:
841
txt = "SEC_E_CONTEXT_EXPIRED";
843
case SEC_E_CROSSREALM_DELEGATION_FAILURE:
844
txt = "SEC_E_CROSSREALM_DELEGATION_FAILURE";
846
case SEC_E_CRYPTO_SYSTEM_INVALID:
847
txt = "SEC_E_CRYPTO_SYSTEM_INVALID";
849
case SEC_E_DECRYPT_FAILURE:
850
txt = "SEC_E_DECRYPT_FAILURE";
852
case SEC_E_DELEGATION_POLICY:
853
txt = "SEC_E_DELEGATION_POLICY";
855
case SEC_E_DELEGATION_REQUIRED:
856
txt = "SEC_E_DELEGATION_REQUIRED";
858
case SEC_E_DOWNGRADE_DETECTED:
859
txt = "SEC_E_DOWNGRADE_DETECTED";
861
case SEC_E_ENCRYPT_FAILURE:
862
txt = "SEC_E_ENCRYPT_FAILURE";
864
case SEC_E_ILLEGAL_MESSAGE:
865
txt = "SEC_E_ILLEGAL_MESSAGE";
867
case SEC_E_INCOMPLETE_CREDENTIALS:
868
txt = "SEC_E_INCOMPLETE_CREDENTIALS";
870
case SEC_E_INCOMPLETE_MESSAGE:
871
txt = "SEC_E_INCOMPLETE_MESSAGE";
873
case SEC_E_INSUFFICIENT_MEMORY:
874
txt = "SEC_E_INSUFFICIENT_MEMORY";
876
case SEC_E_INTERNAL_ERROR:
877
txt = "SEC_E_INTERNAL_ERROR";
879
case SEC_E_INVALID_HANDLE:
880
txt = "SEC_E_INVALID_HANDLE";
882
case SEC_E_INVALID_PARAMETER:
883
txt = "SEC_E_INVALID_PARAMETER";
885
case SEC_E_INVALID_TOKEN:
886
txt = "SEC_E_INVALID_TOKEN";
888
case SEC_E_ISSUING_CA_UNTRUSTED:
889
txt = "SEC_E_ISSUING_CA_UNTRUSTED";
891
case SEC_E_ISSUING_CA_UNTRUSTED_KDC:
892
txt = "SEC_E_ISSUING_CA_UNTRUSTED_KDC";
894
case SEC_E_KDC_CERT_EXPIRED:
895
txt = "SEC_E_KDC_CERT_EXPIRED";
897
case SEC_E_KDC_CERT_REVOKED:
898
txt = "SEC_E_KDC_CERT_REVOKED";
900
case SEC_E_KDC_INVALID_REQUEST:
901
txt = "SEC_E_KDC_INVALID_REQUEST";
903
case SEC_E_KDC_UNABLE_TO_REFER:
904
txt = "SEC_E_KDC_UNABLE_TO_REFER";
906
case SEC_E_KDC_UNKNOWN_ETYPE:
907
txt = "SEC_E_KDC_UNKNOWN_ETYPE";
909
case SEC_E_LOGON_DENIED:
910
txt = "SEC_E_LOGON_DENIED";
912
case SEC_E_MAX_REFERRALS_EXCEEDED:
913
txt = "SEC_E_MAX_REFERRALS_EXCEEDED";
915
case SEC_E_MESSAGE_ALTERED:
916
txt = "SEC_E_MESSAGE_ALTERED";
918
case SEC_E_MULTIPLE_ACCOUNTS:
919
txt = "SEC_E_MULTIPLE_ACCOUNTS";
921
case SEC_E_MUST_BE_KDC:
922
txt = "SEC_E_MUST_BE_KDC";
924
case SEC_E_NOT_OWNER:
925
txt = "SEC_E_NOT_OWNER";
927
case SEC_E_NO_AUTHENTICATING_AUTHORITY:
928
txt = "SEC_E_NO_AUTHENTICATING_AUTHORITY";
930
case SEC_E_NO_CREDENTIALS:
931
txt = "SEC_E_NO_CREDENTIALS";
933
case SEC_E_NO_IMPERSONATION:
934
txt = "SEC_E_NO_IMPERSONATION";
936
case SEC_E_NO_IP_ADDRESSES:
937
txt = "SEC_E_NO_IP_ADDRESSES";
939
case SEC_E_NO_KERB_KEY:
940
txt = "SEC_E_NO_KERB_KEY";
942
case SEC_E_NO_PA_DATA:
943
txt = "SEC_E_NO_PA_DATA";
945
case SEC_E_NO_S4U_PROT_SUPPORT:
946
txt = "SEC_E_NO_S4U_PROT_SUPPORT";
948
case SEC_E_NO_TGT_REPLY:
949
txt = "SEC_E_NO_TGT_REPLY";
951
case SEC_E_OUT_OF_SEQUENCE:
952
txt = "SEC_E_OUT_OF_SEQUENCE";
954
case SEC_E_PKINIT_CLIENT_FAILURE:
955
txt = "SEC_E_PKINIT_CLIENT_FAILURE";
957
case SEC_E_PKINIT_NAME_MISMATCH:
958
txt = "SEC_E_PKINIT_NAME_MISMATCH";
960
case SEC_E_POLICY_NLTM_ONLY:
961
txt = "SEC_E_POLICY_NLTM_ONLY";
963
case SEC_E_QOP_NOT_SUPPORTED:
964
txt = "SEC_E_QOP_NOT_SUPPORTED";
966
case SEC_E_REVOCATION_OFFLINE_C:
967
txt = "SEC_E_REVOCATION_OFFLINE_C";
969
case SEC_E_REVOCATION_OFFLINE_KDC:
970
txt = "SEC_E_REVOCATION_OFFLINE_KDC";
972
case SEC_E_SECPKG_NOT_FOUND:
973
txt = "SEC_E_SECPKG_NOT_FOUND";
975
case SEC_E_SECURITY_QOS_FAILED:
976
txt = "SEC_E_SECURITY_QOS_FAILED";
978
case SEC_E_SHUTDOWN_IN_PROGRESS:
979
txt = "SEC_E_SHUTDOWN_IN_PROGRESS";
981
case SEC_E_SMARTCARD_CERT_EXPIRED:
982
txt = "SEC_E_SMARTCARD_CERT_EXPIRED";
984
case SEC_E_SMARTCARD_CERT_REVOKED:
985
txt = "SEC_E_SMARTCARD_CERT_REVOKED";
987
case SEC_E_SMARTCARD_LOGON_REQUIRED:
988
txt = "SEC_E_SMARTCARD_LOGON_REQUIRED";
990
case SEC_E_STRONG_CRYPTO_NOT_SUPPORTED:
991
txt = "SEC_E_STRONG_CRYPTO_NOT_SUPPORTED";
993
case SEC_E_TARGET_UNKNOWN:
994
txt = "SEC_E_TARGET_UNKNOWN";
996
case SEC_E_TIME_SKEW:
997
txt = "SEC_E_TIME_SKEW";
999
case SEC_E_TOO_MANY_PRINCIPALS:
1000
txt = "SEC_E_TOO_MANY_PRINCIPALS";
1002
case SEC_E_UNFINISHED_CONTEXT_DELETED:
1003
txt = "SEC_E_UNFINISHED_CONTEXT_DELETED";
1005
case SEC_E_UNKNOWN_CREDENTIALS:
1006
txt = "SEC_E_UNKNOWN_CREDENTIALS";
1008
case SEC_E_UNSUPPORTED_FUNCTION:
1009
txt = "SEC_E_UNSUPPORTED_FUNCTION";
1011
case SEC_E_UNSUPPORTED_PREAUTH:
1012
txt = "SEC_E_UNSUPPORTED_PREAUTH";
1014
case SEC_E_UNTRUSTED_ROOT:
1015
txt = "SEC_E_UNTRUSTED_ROOT";
1017
case SEC_E_WRONG_CREDENTIAL_HANDLE:
1018
txt = "SEC_E_WRONG_CREDENTIAL_HANDLE";
1020
case SEC_E_WRONG_PRINCIPAL:
1021
txt = "SEC_E_WRONG_PRINCIPAL";
1023
case SEC_I_COMPLETE_AND_CONTINUE:
1024
txt = "SEC_I_COMPLETE_AND_CONTINUE";
1026
case SEC_I_COMPLETE_NEEDED:
1027
txt = "SEC_I_COMPLETE_NEEDED";
1029
case SEC_I_CONTEXT_EXPIRED:
1030
txt = "SEC_I_CONTEXT_EXPIRED";
1032
case SEC_I_CONTINUE_NEEDED:
1033
txt = "SEC_I_CONTINUE_NEEDED";
1035
case SEC_I_INCOMPLETE_CREDENTIALS:
1036
txt = "SEC_I_INCOMPLETE_CREDENTIALS";
1038
case SEC_I_LOCAL_LOGON:
1039
txt = "SEC_I_LOCAL_LOGON";
1041
case SEC_I_NO_LSA_CONTEXT:
1042
txt = "SEC_I_NO_LSA_CONTEXT";
1044
case SEC_I_RENEGOTIATE:
1045
txt = "SEC_I_RENEGOTIATE";
1047
case SEC_I_SIGNATURE_NEEDED:
1048
txt = "SEC_I_SIGNATURE_NEEDED";
1051
txt = "Unknown error";
1055
strncpy(outbuf, txt, outmax);
1058
snprintf(txtbuf, sizeof(txtbuf), "%s (0x%04X%04X)",
1059
txt, (err >> 16) & 0xffff, err & 0xffff);
1060
txtbuf[sizeof(txtbuf)-1] = '\0';
1067
if(FormatMessage(FORMAT_MESSAGE_FROM_SYSTEM |
1068
FORMAT_MESSAGE_IGNORE_INSERTS,
1069
NULL, err, LANG_NEUTRAL,
1070
wbuf, sizeof(wbuf)/sizeof(wchar_t), NULL)) {
1071
wcstombs(msgbuf,wbuf,sizeof(msgbuf)-1);
1072
msg_formatted = TRUE;
1076
if(FormatMessageA(FORMAT_MESSAGE_FROM_SYSTEM |
1077
FORMAT_MESSAGE_IGNORE_INSERTS,
1078
NULL, err, LANG_NEUTRAL,
1079
msgbuf, sizeof(msgbuf)-1, NULL)) {
1080
msg_formatted = TRUE;
1084
msgbuf[sizeof(msgbuf)-1] = '\0';
1085
/* strip trailing '\r\n' or '\n' */
1086
if((p = strrchr(msgbuf,'\n')) != NULL && (p - msgbuf) >= 2)
1088
if((p = strrchr(msgbuf,'\r')) != NULL && (p - msgbuf) >= 1)
1093
snprintf(outbuf, outmax, "%s - %s", str, msg);
1095
strncpy(outbuf, str, outmax);
1098
if(old_errno != ERRNO)
1099
SET_ERRNO(old_errno);
1108
strncpy(outbuf, txt, outmax);
1112
outbuf[outmax] = '\0';
1116
#endif /* USE_WINDOWS_SSPI */