25 #ifdef HAVE_STRERROR_R 26 # if (!defined(HAVE_POSIX_STRERROR_R) && \ 27 !defined(HAVE_GLIBC_STRERROR_R) && \ 28 !defined(HAVE_VXWORKS_STRERROR_R)) || \ 29 (defined(HAVE_POSIX_STRERROR_R) && defined(HAVE_VXWORKS_STRERROR_R)) || \ 30 (defined(HAVE_GLIBC_STRERROR_R) && defined(HAVE_VXWORKS_STRERROR_R)) || \ 31 (defined(HAVE_POSIX_STRERROR_R) && defined(HAVE_GLIBC_STRERROR_R)) 32 # error "strerror_r MUST be either POSIX, glibc or vxworks-style" 42 #ifdef USE_WINDOWS_SSPI 52 #if defined(WIN32) || defined(_WIN32_WCE) 53 #define PRESERVE_WINDOWS_ERROR_CODE 59 #ifndef CURL_DISABLE_VERBOSE_STRINGS 65 return "Unsupported protocol";
68 return "Failed initialization";
71 return "URL using bad/illegal format or missing URL";
74 return "A requested feature, protocol or option was not found built-in in" 75 " this libcurl due to a build-time decision.";
78 return "Couldn't resolve proxy name";
81 return "Couldn't resolve host name";
84 return "Couldn't connect to server";
87 return "Weird server reply";
90 return "Access denied to remote resource";
93 return "FTP: The server failed to connect to data port";
96 return "FTP: Accepting server connect has timed out";
99 return "FTP: The server did not accept the PRET command.";
102 return "FTP: unknown PASS reply";
105 return "FTP: unknown PASV reply";
108 return "FTP: unknown 227 response format";
111 return "FTP: can't figure out the host in the PASV response";
114 return "Error in the HTTP2 framing layer";
117 return "FTP: couldn't set file type";
120 return "Transferred a partial file";
123 return "FTP: couldn't retrieve (RETR failed) the specified file";
126 return "Quote command returned error";
129 return "HTTP response code said error";
132 return "Failed writing received data to disk/application";
135 return "Upload failed (at start/before it took off)";
138 return "Failed to open/read local data from file/application";
141 return "Out of memory";
144 return "Timeout was reached";
147 return "FTP: command PORT failed";
150 return "FTP: command REST failed";
153 return "Requested range was not delivered by the server";
156 return "Internal problem setting up the POST";
159 return "SSL connect error";
162 return "Couldn't resume download";
165 return "Couldn't read a file:// file";
168 return "LDAP: cannot bind";
171 return "LDAP: search failed";
174 return "A required function in the library was not found";
177 return "Operation was aborted by an application callback";
180 return "A libcurl function was given a bad argument";
183 return "Failed binding local connection end";
186 return "Number of redirects hit maximum amount";
189 return "An unknown option was passed in to libcurl";
192 return "Malformed telnet option";
195 return "SSL peer certificate or SSH remote key was not OK";
198 return "Server returned nothing (no headers, no data)";
201 return "SSL crypto engine not found";
204 return "Can not set SSL crypto engine as default";
207 return "Failed to initialise SSL crypto engine";
210 return "Failed sending data to the peer";
213 return "Failure when receiving data from the peer";
216 return "Problem with the local SSL certificate";
219 return "Couldn't use specified SSL cipher";
222 return "Peer certificate cannot be authenticated with given CA " 226 return "Problem with the SSL CA cert (path? access rights?)";
229 return "Unrecognized or bad HTTP Content or Transfer-Encoding";
232 return "Invalid LDAP URL";
235 return "Maximum file size exceeded";
238 return "Requested SSL level failed";
241 return "Failed to shut down the SSL connection";
244 return "Failed to load CRL file (path? access rights?, format?)";
247 return "Issuer check against peer certificate failed";
250 return "Send failed since rewinding of the data stream failed";
253 return "Login denied";
256 return "TFTP: File Not Found";
259 return "TFTP: Access Violation";
262 return "Disk full or allocation exceeded";
265 return "TFTP: Illegal operation";
268 return "TFTP: Unknown transfer ID";
271 return "Remote file already exists";
274 return "TFTP: No such user";
277 return "Conversion failed";
280 return "Caller must register CURLOPT_CONV_ callback options";
283 return "Remote file not found";
286 return "Error in the SSH layer";
289 return "Socket not ready for send/recv";
292 return "RTSP CSeq mismatch or invalid CSeq";
295 return "RTSP session error";
298 return "Unable to parse FTP file list";
301 return "Chunk callback failed";
304 return "The max connection limit is reached";
307 return "SSL public key does not match pinned public key";
310 return "SSL server certificate status verification FAILED";
313 return "Stream error in the HTTP/2 framing layer";
342 return "Unknown error";
354 #ifndef CURL_DISABLE_VERBOSE_STRINGS 357 return "Please call curl_multi_perform() soon";
363 return "Invalid multi handle";
366 return "Invalid easy handle";
369 return "Out of memory";
372 return "Internal error";
375 return "Invalid socket argument";
378 return "Unknown option";
381 return "The easy handle is already added to a multi handle";
387 return "Unknown error";
399 #ifndef CURL_DISABLE_VERBOSE_STRINGS 405 return "Unknown share option";
408 return "Share currently in use";
411 return "Invalid share handle";
414 return "Out of memory";
417 return "Feature not enabled in this library";
423 return "CURLSHcode unknown";
437 get_winsock_error (
int err,
char *
buf,
size_t len)
439 #ifdef PRESERVE_WINDOWS_ERROR_CODE 440 DWORD old_win_err = GetLastError();
442 int old_errno = errno;
445 #ifndef CURL_DISABLE_VERBOSE_STRINGS 448 p =
"Call interrupted";
460 p =
"Invalid arguments";
463 p =
"Out of file descriptors";
466 p =
"Call would block";
470 p =
"Blocking call in progress";
473 p =
"Descriptor is not a socket";
475 case WSAEDESTADDRREQ:
476 p =
"Need destination address";
479 p =
"Bad message size";
485 p =
"Protocol option is unsupported";
487 case WSAEPROTONOSUPPORT:
488 p =
"Protocol is unsupported";
490 case WSAESOCKTNOSUPPORT:
491 p =
"Socket is unsupported";
494 p =
"Operation not supported";
496 case WSAEAFNOSUPPORT:
497 p =
"Address family not supported";
499 case WSAEPFNOSUPPORT:
500 p =
"Protocol family not supported";
503 p =
"Address already in use";
505 case WSAEADDRNOTAVAIL:
506 p =
"Address not available";
512 p =
"Network unreachable";
515 p =
"Network has been reset";
517 case WSAECONNABORTED:
518 p =
"Connection was aborted";
521 p =
"Connection was reset";
524 p =
"No buffer space";
527 p =
"Socket is already connected";
530 p =
"Socket is not connected";
533 p =
"Socket has been shut down";
535 case WSAETOOMANYREFS:
536 p =
"Too many references";
541 case WSAECONNREFUSED:
542 p =
"Connection refused";
547 case WSAENAMETOOLONG:
553 case WSAEHOSTUNREACH:
554 p =
"Host unreachable";
560 p =
"Process limit reached";
563 p =
"Too many users";
569 p =
"Something is stale";
581 p =
"Winsock library is not ready";
583 case WSANOTINITIALISED:
584 p =
"Winsock library not initialised";
586 case WSAVERNOTSUPPORTED:
587 p =
"Winsock version not supported";
592 case WSAHOST_NOT_FOUND:
593 p =
"Host not found";
598 p =
"Host not found, try again";
603 p =
"Unrecoverable error in call to nameserver";
608 p =
"No data record of requested type";
620 strncpy(
buf, p, len);
623 if(errno != old_errno)
626 #ifdef PRESERVE_WINDOWS_ERROR_CODE 627 if(old_win_err != GetLastError())
628 SetLastError(old_win_err);
648 #ifdef PRESERVE_WINDOWS_ERROR_CODE 649 DWORD old_win_err = GetLastError();
651 int old_errno = errno;
669 FormatMessage(FORMAT_MESSAGE_FROM_SYSTEM, NULL, err,
670 LANG_NEUTRAL, wbuf,
sizeof(wbuf)/
sizeof(
wchar_t), NULL);
671 wcstombs(buf, wbuf, max);
675 if(err >= 0 && err < sys_nerr)
676 strncpy(buf, strerror(err), max);
678 if(!get_winsock_error(err, buf, max) &&
679 !FormatMessageA(FORMAT_MESSAGE_FROM_SYSTEM, NULL, err,
680 LANG_NEUTRAL, buf, (DWORD)max, NULL))
681 snprintf(buf, max,
"Unknown error %d (%#x)", err, err);
687 #if defined(HAVE_STRERROR_R) && defined(HAVE_POSIX_STRERROR_R) 693 if(0 != strerror_r(err, buf, max)) {
695 snprintf(buf, max,
"Unknown error %d", err);
697 #elif defined(HAVE_STRERROR_R) && defined(HAVE_GLIBC_STRERROR_R) 705 char *msg = strerror_r(err, buffer,
sizeof(buffer));
707 strncpy(buf, msg, max);
709 snprintf(buf, max,
"Unknown error %d", err);
711 #elif defined(HAVE_STRERROR_R) && defined(HAVE_VXWORKS_STRERROR_R) 718 if(OK == strerror_r(err, buffer))
719 strncpy(buf, buffer, max);
721 snprintf(buf, max,
"Unknown error %d", err);
725 char *msg = strerror(err);
727 strncpy(buf, msg, max);
729 snprintf(buf, max,
"Unknown error %d", err);
738 p = strrchr(buf,
'\n');
739 if(p && (p - buf) >= 2)
741 p = strrchr(buf,
'\r');
742 if(p && (p - buf) >= 1)
745 if(errno != old_errno)
748 #ifdef PRESERVE_WINDOWS_ERROR_CODE 749 if(old_win_err != GetLastError())
750 SetLastError(old_win_err);
756 #ifdef USE_WINDOWS_SSPI 757 const char *Curl_sspi_strerror (
struct connectdata *conn,
int err)
759 #ifdef PRESERVE_WINDOWS_ERROR_CODE 760 DWORD old_win_err = GetLastError();
762 int old_errno = errno;
766 #ifndef CURL_DISABLE_VERBOSE_STRINGS 769 char *
p, *
str, *msg = NULL;
770 bool msg_formatted =
FALSE;
779 #ifndef CURL_DISABLE_VERBOSE_STRINGS 785 case CRYPT_E_REVOKED:
786 txt =
"CRYPT_E_REVOKED";
788 case SEC_E_ALGORITHM_MISMATCH:
789 txt =
"SEC_E_ALGORITHM_MISMATCH";
791 case SEC_E_BAD_BINDINGS:
792 txt =
"SEC_E_BAD_BINDINGS";
794 case SEC_E_BAD_PKGID:
795 txt =
"SEC_E_BAD_PKGID";
797 case SEC_E_BUFFER_TOO_SMALL:
798 txt =
"SEC_E_BUFFER_TOO_SMALL";
800 case SEC_E_CANNOT_INSTALL:
801 txt =
"SEC_E_CANNOT_INSTALL";
803 case SEC_E_CANNOT_PACK:
804 txt =
"SEC_E_CANNOT_PACK";
806 case SEC_E_CERT_EXPIRED:
807 txt =
"SEC_E_CERT_EXPIRED";
809 case SEC_E_CERT_UNKNOWN:
810 txt =
"SEC_E_CERT_UNKNOWN";
812 case SEC_E_CERT_WRONG_USAGE:
813 txt =
"SEC_E_CERT_WRONG_USAGE";
815 case SEC_E_CONTEXT_EXPIRED:
816 txt =
"SEC_E_CONTEXT_EXPIRED";
818 case SEC_E_CROSSREALM_DELEGATION_FAILURE:
819 txt =
"SEC_E_CROSSREALM_DELEGATION_FAILURE";
821 case SEC_E_CRYPTO_SYSTEM_INVALID:
822 txt =
"SEC_E_CRYPTO_SYSTEM_INVALID";
824 case SEC_E_DECRYPT_FAILURE:
825 txt =
"SEC_E_DECRYPT_FAILURE";
827 case SEC_E_DELEGATION_POLICY:
828 txt =
"SEC_E_DELEGATION_POLICY";
830 case SEC_E_DELEGATION_REQUIRED:
831 txt =
"SEC_E_DELEGATION_REQUIRED";
833 case SEC_E_DOWNGRADE_DETECTED:
834 txt =
"SEC_E_DOWNGRADE_DETECTED";
836 case SEC_E_ENCRYPT_FAILURE:
837 txt =
"SEC_E_ENCRYPT_FAILURE";
839 case SEC_E_ILLEGAL_MESSAGE:
840 txt =
"SEC_E_ILLEGAL_MESSAGE";
842 case SEC_E_INCOMPLETE_CREDENTIALS:
843 txt =
"SEC_E_INCOMPLETE_CREDENTIALS";
845 case SEC_E_INCOMPLETE_MESSAGE:
846 txt =
"SEC_E_INCOMPLETE_MESSAGE";
848 case SEC_E_INSUFFICIENT_MEMORY:
849 txt =
"SEC_E_INSUFFICIENT_MEMORY";
851 case SEC_E_INTERNAL_ERROR:
852 txt =
"SEC_E_INTERNAL_ERROR";
854 case SEC_E_INVALID_HANDLE:
855 txt =
"SEC_E_INVALID_HANDLE";
857 case SEC_E_INVALID_PARAMETER:
858 txt =
"SEC_E_INVALID_PARAMETER";
860 case SEC_E_INVALID_TOKEN:
861 txt =
"SEC_E_INVALID_TOKEN";
863 case SEC_E_ISSUING_CA_UNTRUSTED:
864 txt =
"SEC_E_ISSUING_CA_UNTRUSTED";
866 case SEC_E_ISSUING_CA_UNTRUSTED_KDC:
867 txt =
"SEC_E_ISSUING_CA_UNTRUSTED_KDC";
869 case SEC_E_KDC_CERT_EXPIRED:
870 txt =
"SEC_E_KDC_CERT_EXPIRED";
872 case SEC_E_KDC_CERT_REVOKED:
873 txt =
"SEC_E_KDC_CERT_REVOKED";
875 case SEC_E_KDC_INVALID_REQUEST:
876 txt =
"SEC_E_KDC_INVALID_REQUEST";
878 case SEC_E_KDC_UNABLE_TO_REFER:
879 txt =
"SEC_E_KDC_UNABLE_TO_REFER";
881 case SEC_E_KDC_UNKNOWN_ETYPE:
882 txt =
"SEC_E_KDC_UNKNOWN_ETYPE";
884 case SEC_E_LOGON_DENIED:
885 txt =
"SEC_E_LOGON_DENIED";
887 case SEC_E_MAX_REFERRALS_EXCEEDED:
888 txt =
"SEC_E_MAX_REFERRALS_EXCEEDED";
890 case SEC_E_MESSAGE_ALTERED:
891 txt =
"SEC_E_MESSAGE_ALTERED";
893 case SEC_E_MULTIPLE_ACCOUNTS:
894 txt =
"SEC_E_MULTIPLE_ACCOUNTS";
896 case SEC_E_MUST_BE_KDC:
897 txt =
"SEC_E_MUST_BE_KDC";
899 case SEC_E_NOT_OWNER:
900 txt =
"SEC_E_NOT_OWNER";
902 case SEC_E_NO_AUTHENTICATING_AUTHORITY:
903 txt =
"SEC_E_NO_AUTHENTICATING_AUTHORITY";
905 case SEC_E_NO_CREDENTIALS:
906 txt =
"SEC_E_NO_CREDENTIALS";
908 case SEC_E_NO_IMPERSONATION:
909 txt =
"SEC_E_NO_IMPERSONATION";
911 case SEC_E_NO_IP_ADDRESSES:
912 txt =
"SEC_E_NO_IP_ADDRESSES";
914 case SEC_E_NO_KERB_KEY:
915 txt =
"SEC_E_NO_KERB_KEY";
917 case SEC_E_NO_PA_DATA:
918 txt =
"SEC_E_NO_PA_DATA";
920 case SEC_E_NO_S4U_PROT_SUPPORT:
921 txt =
"SEC_E_NO_S4U_PROT_SUPPORT";
923 case SEC_E_NO_TGT_REPLY:
924 txt =
"SEC_E_NO_TGT_REPLY";
926 case SEC_E_OUT_OF_SEQUENCE:
927 txt =
"SEC_E_OUT_OF_SEQUENCE";
929 case SEC_E_PKINIT_CLIENT_FAILURE:
930 txt =
"SEC_E_PKINIT_CLIENT_FAILURE";
932 case SEC_E_PKINIT_NAME_MISMATCH:
933 txt =
"SEC_E_PKINIT_NAME_MISMATCH";
935 case SEC_E_POLICY_NLTM_ONLY:
936 txt =
"SEC_E_POLICY_NLTM_ONLY";
938 case SEC_E_QOP_NOT_SUPPORTED:
939 txt =
"SEC_E_QOP_NOT_SUPPORTED";
941 case SEC_E_REVOCATION_OFFLINE_C:
942 txt =
"SEC_E_REVOCATION_OFFLINE_C";
944 case SEC_E_REVOCATION_OFFLINE_KDC:
945 txt =
"SEC_E_REVOCATION_OFFLINE_KDC";
947 case SEC_E_SECPKG_NOT_FOUND:
948 txt =
"SEC_E_SECPKG_NOT_FOUND";
950 case SEC_E_SECURITY_QOS_FAILED:
951 txt =
"SEC_E_SECURITY_QOS_FAILED";
953 case SEC_E_SHUTDOWN_IN_PROGRESS:
954 txt =
"SEC_E_SHUTDOWN_IN_PROGRESS";
956 case SEC_E_SMARTCARD_CERT_EXPIRED:
957 txt =
"SEC_E_SMARTCARD_CERT_EXPIRED";
959 case SEC_E_SMARTCARD_CERT_REVOKED:
960 txt =
"SEC_E_SMARTCARD_CERT_REVOKED";
962 case SEC_E_SMARTCARD_LOGON_REQUIRED:
963 txt =
"SEC_E_SMARTCARD_LOGON_REQUIRED";
965 case SEC_E_STRONG_CRYPTO_NOT_SUPPORTED:
966 txt =
"SEC_E_STRONG_CRYPTO_NOT_SUPPORTED";
968 case SEC_E_TARGET_UNKNOWN:
969 txt =
"SEC_E_TARGET_UNKNOWN";
971 case SEC_E_TIME_SKEW:
972 txt =
"SEC_E_TIME_SKEW";
974 case SEC_E_TOO_MANY_PRINCIPALS:
975 txt =
"SEC_E_TOO_MANY_PRINCIPALS";
977 case SEC_E_UNFINISHED_CONTEXT_DELETED:
978 txt =
"SEC_E_UNFINISHED_CONTEXT_DELETED";
980 case SEC_E_UNKNOWN_CREDENTIALS:
981 txt =
"SEC_E_UNKNOWN_CREDENTIALS";
983 case SEC_E_UNSUPPORTED_FUNCTION:
984 txt =
"SEC_E_UNSUPPORTED_FUNCTION";
986 case SEC_E_UNSUPPORTED_PREAUTH:
987 txt =
"SEC_E_UNSUPPORTED_PREAUTH";
989 case SEC_E_UNTRUSTED_ROOT:
990 txt =
"SEC_E_UNTRUSTED_ROOT";
992 case SEC_E_WRONG_CREDENTIAL_HANDLE:
993 txt =
"SEC_E_WRONG_CREDENTIAL_HANDLE";
995 case SEC_E_WRONG_PRINCIPAL:
996 txt =
"SEC_E_WRONG_PRINCIPAL";
998 case SEC_I_COMPLETE_AND_CONTINUE:
999 txt =
"SEC_I_COMPLETE_AND_CONTINUE";
1001 case SEC_I_COMPLETE_NEEDED:
1002 txt =
"SEC_I_COMPLETE_NEEDED";
1004 case SEC_I_CONTEXT_EXPIRED:
1005 txt =
"SEC_I_CONTEXT_EXPIRED";
1007 case SEC_I_CONTINUE_NEEDED:
1008 txt =
"SEC_I_CONTINUE_NEEDED";
1010 case SEC_I_INCOMPLETE_CREDENTIALS:
1011 txt =
"SEC_I_INCOMPLETE_CREDENTIALS";
1013 case SEC_I_LOCAL_LOGON:
1014 txt =
"SEC_I_LOCAL_LOGON";
1016 case SEC_I_NO_LSA_CONTEXT:
1017 txt =
"SEC_I_NO_LSA_CONTEXT";
1019 case SEC_I_RENEGOTIATE:
1020 txt =
"SEC_I_RENEGOTIATE";
1022 case SEC_I_SIGNATURE_NEEDED:
1023 txt =
"SEC_I_SIGNATURE_NEEDED";
1026 txt =
"Unknown error";
1030 strncpy(outbuf, txt, outmax);
1031 else if(err == SEC_E_ILLEGAL_MESSAGE)
1033 "SEC_E_ILLEGAL_MESSAGE (0x%08X) - This error usually occurs " 1034 "when a fatal SSL/TLS alert is received (e.g. handshake failed). " 1035 "More detail may be available in the Windows System event log.",
1039 snprintf(txtbuf,
sizeof(txtbuf),
"%s (0x%08X)", txt, err);
1040 txtbuf[
sizeof(txtbuf)-1] =
'\0';
1047 if(FormatMessage(FORMAT_MESSAGE_FROM_SYSTEM |
1048 FORMAT_MESSAGE_IGNORE_INSERTS,
1049 NULL, err, LANG_NEUTRAL,
1050 wbuf,
sizeof(wbuf)/
sizeof(
wchar_t), NULL)) {
1051 wcstombs(msgbuf, wbuf,
sizeof(msgbuf)-1);
1052 msg_formatted =
TRUE;
1056 if(FormatMessageA(FORMAT_MESSAGE_FROM_SYSTEM |
1057 FORMAT_MESSAGE_IGNORE_INSERTS,
1058 NULL, err, LANG_NEUTRAL,
1059 msgbuf,
sizeof(msgbuf)-1, NULL)) {
1060 msg_formatted =
TRUE;
1064 msgbuf[
sizeof(msgbuf)-1] =
'\0';
1066 p = strrchr(msgbuf,
'\n');
1067 if(p && (p - msgbuf) >= 2)
1069 p = strrchr(msgbuf,
'\r');
1070 if(p && (p - msgbuf) >= 1)
1075 snprintf(outbuf, outmax,
"%s - %s", str, msg);
1077 strncpy(outbuf, str, outmax);
1087 strncpy(outbuf, txt, outmax);
1091 outbuf[outmax] =
'\0';
1093 if(errno != old_errno)
1096 #ifdef PRESERVE_WINDOWS_ERROR_CODE 1097 if(old_win_err != GetLastError())
1098 SetLastError(old_win_err);
const char * curl_share_strerror(CURLSHcode error)
const char * curl_easy_strerror(CURLcode error)
const char * Curl_strerror(struct connectdata *conn, int err)
const char * curl_multi_strerror(CURLMcode error)
double max(double a, double b)