53 char *server_auth[] = { oid_server_auth };
56 static const DWORD supportedErrors =
72 errors =
chain->TrustStatus.dwErrorStatus;
77 WARN(
"ERROR_INTERNET_SEC_CERT_REV_FAILED\n");
85 if (
chain->TrustStatus.dwErrorStatus & ~supportedErrors) {
86 WARN(
"error status %lx\n",
chain->TrustStatus.dwErrorStatus & ~supportedErrors);
88 errors &= supportedErrors;
91 WARN(
"unknown error flags\n");
95 WARN(
"CERT_TRUST_IS_NOT_TIME_VALID\n");
102 errors &= ~CERT_TRUST_IS_NOT_TIME_VALID;
106 WARN(
"CERT_TRUST_IS_UNTRUSTED_ROOT\n");
113 errors &= ~CERT_TRUST_IS_UNTRUSTED_ROOT;
117 WARN(
"CERT_TRUST_IS_PARTIAL_CHAIN\n");
124 errors &= ~CERT_TRUST_IS_PARTIAL_CHAIN;
128 WARN(
"CERT_TRUST_IS_NOT_SIGNATURE_VALID\n");
135 errors &= ~CERT_TRUST_IS_NOT_SIGNATURE_VALID;
139 WARN(
"CERT_TRUST_IS_NOT_VALID_FOR_USAGE\n");
144 WARN(
"CERT_TRUST_IS_NOT_VALID_FOR_USAGE, unknown error flags\n");
146 errors &= ~CERT_TRUST_IS_NOT_VALID_FOR_USAGE;
167 sslExtraPolicyPara.
cbSize =
sizeof(sslExtraPolicyPara);
171 policyPara.
cbSize =
sizeof(policyPara);
175 &chainCopy, &policyPara, &policyStatus);
181 WARN(
"CERT_E_CN_NO_MATCH\n");
185 }
else if(policyStatus.
dwError) {
186 WARN(
"policyStatus.dwError %lx\n", policyStatus.
dwError);
188 WARN(
"unknown error flags for policy status %lx\n", policyStatus.
dwError);
224 0, 0, { (
DWORD_PTR)(__FILE__
": init_sechandle_cs") }
278 ERR(
"WSAStartup failed: %lu\n",
res);
343 WARN(
"setsockopt(TCP_NODELAY) failed\n");
358 netconn->security_flags = security_flags |
server->security_flags;
359 netconn->mask_errors = mask_errors;
447 SIZE_T read_buf_size = 2048;
473 &
ctx, &out_desc, &attrs,
NULL);
487 ERR(
"send failed\n");
493 out_buf.pvBuffer =
NULL;
501 in_bufs[0].cbBuffer = in_bufs[1].cbBuffer;
506 in_bufs[1].cbBuffer = 0;
507 in_bufs[1].pvBuffer =
NULL;
509 if(in_bufs[0].
cbBuffer + 1024 > read_buf_size) {
518 in_bufs[0].pvBuffer =
read_buf = new_read_buf;
519 read_buf_size += 1024;
524 WARN(
"recv error\n");
531 in_bufs[0].cbBuffer +=
size;
535 TRACE(
"InitializeSecurityContext ret %08lx\n",
status);
543 FIXME(
"SECBUFFER_EXTRA not supported\n");
547 WARN(
"Could not get sizes\n");
556 WARN(
"cert verify failed: %lu\n",
res);
560 WARN(
"Could not get cert\n");
576 WARN(
"Failed to establish SSL connection: %08lx (%lu)\n",
status,
res);
582 TRACE(
"established SSL connection\n");
609 ERR(
"already connected\n");
651 WARN(
"EncryptMessage failed\n");
656 WARN(
"send failed\n");
724 TRACE(
"would block\n");
727 WARN(
"recv failed\n");
746 bufs[0].cbBuffer = buf_len;
754 TRACE(
"context expired\n");
758 assert(buf_len < ssl_buf_size);
764 TRACE(
"would block\n");
863 WARN(
"read_ssl_chunk failed\n");
905 WARN(
"QueryContextAttributesW failed: %08lx\n",
res);
918 WARN(
"setsockopt failed\n");
#define WINE_DEFAULT_DEBUG_CHANNEL(t)
static void list_init(struct list_entry *head)
#define ERROR_NOT_ENOUGH_MEMORY
BOOL WINAPI CertFreeCertificateContext(PCCERT_CONTEXT pCertContext)
BOOL WINAPI CertVerifyCertificateChainPolicy(LPCSTR szPolicyOID, PCCERT_CHAIN_CONTEXT pChainContext, PCERT_CHAIN_POLICY_PARA pPolicyPara, PCERT_CHAIN_POLICY_STATUS pPolicyStatus)
BOOL WINAPI CertGetCertificateChain(HCERTCHAINENGINE hChainEngine, PCCERT_CONTEXT pCertContext, LPFILETIME pTime, HCERTSTORE hAdditionalStore, PCERT_CHAIN_PARA pChainPara, DWORD dwFlags, LPVOID pvReserved, PCCERT_CHAIN_CONTEXT *ppChainContext)
VOID WINAPI CertFreeCertificateChain(PCCERT_CHAIN_CONTEXT pChainContext)
BOOL WINAPI InitOnceExecuteOnce(_Inout_ PINIT_ONCE InitOnce, _In_ __callback PINIT_ONCE_FN InitFn, _Inout_opt_ PVOID Parameter, _Outptr_opt_result_maybenull_ LPVOID *Context)
void server_release(server_t *server)
void server_addref(server_t *server)
INT WSAAPI recv(IN SOCKET s, OUT CHAR FAR *buf, IN INT len, IN INT flags)
INT WSAAPI select(IN INT s, IN OUT LPFD_SET readfds, IN OUT LPFD_SET writefds, IN OUT LPFD_SET exceptfds, IN CONST struct timeval *timeout)
INT WSAAPI send(IN SOCKET s, IN CONST CHAR FAR *buf, IN INT len, IN INT flags)
GLboolean GLboolean GLboolean b
GLenum GLuint GLenum GLsizei const GLchar * buf
GLenum GLint GLenum GLsizei GLsizei GLsizei GLint GLsizei const GLvoid * bits
GLsizei GLenum const GLvoid GLsizei GLenum GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLint GLint GLint GLshort GLshort GLshort GLubyte GLubyte GLubyte GLuint GLuint GLuint GLushort GLushort GLushort GLbyte GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLfloat GLint GLint GLint GLint GLshort GLshort GLshort GLshort GLubyte GLubyte GLubyte GLubyte GLuint GLuint GLuint GLuint GLushort GLushort GLushort GLushort GLboolean flag
GLsizei GLenum const GLvoid GLsizei GLenum GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLint GLint GLint GLshort GLshort GLshort GLubyte GLubyte GLubyte GLuint GLuint GLuint GLushort GLushort GLushort GLbyte GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLfloat GLint GLint GLint GLint GLshort GLshort GLshort GLshort GLubyte GLubyte GLubyte GLubyte GLuint GLuint GLuint GLuint GLushort GLushort GLushort GLushort GLboolean const GLdouble const GLfloat const GLint const GLshort const GLbyte const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLdouble const GLfloat const GLfloat const GLint const GLint const GLshort const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort GLenum GLenum GLenum GLfloat GLenum GLint GLenum GLenum GLenum GLfloat GLenum GLenum GLint GLenum GLfloat GLenum GLint GLint GLushort GLenum GLenum GLfloat GLenum GLenum GLint GLfloat const GLubyte GLenum GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLint GLint GLsizei GLsizei GLint GLenum GLenum const GLvoid GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLenum const GLdouble GLenum GLenum const GLfloat GLenum GLenum const GLint GLsizei GLuint GLfloat GLuint GLbitfield GLfloat GLint GLuint GLboolean GLenum GLfloat GLenum GLbitfield GLenum GLfloat GLfloat GLint GLint const GLfloat GLenum GLfloat GLfloat GLint GLint GLfloat GLfloat GLint GLint const GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat const GLdouble const GLfloat const GLdouble const GLfloat GLint i
#define _SECURITY_FLAG_CERT_REV_FAILED
#define _SECURITY_FLAG_CERT_INVALID_CN
#define _SECURITY_ERROR_FLAGS_MASK
#define _SECURITY_FLAG_CERT_INVALID_DATE
#define _SECURITY_FLAG_CERT_INVALID_CA
#define memcpy(s1, s2, n)
#define memmove(s1, s2, n)
static void ULONG ULONG * ret_size
DWORD NETCON_secure_connect(netconn_t *connection, server_t *server)
static BOOL read_ssl_chunk(netconn_t *conn, void *buf, SIZE_T buf_size, BOOL blocking, SIZE_T *ret_size, BOOL *eof)
static SecHandle compat_cred_handle
static CRITICAL_SECTION init_sechandle_cs
static BOOL cred_handle_initialized
static CRITICAL_SECTION_DEBUG init_sechandle_cs_debug
static DWORD create_netconn_socket(server_t *server, netconn_t *netconn, DWORD timeout)
BOOL is_valid_netconn(netconn_t *netconn)
int NETCON_GetCipherStrength(netconn_t *connection)
static BOOL have_compat_cred_handle
static void set_socket_blocking(netconn_t *conn, BOOL is_blocking)
int sock_send(int fd, const void *msg, size_t len, int flags)
static BOOL winsock_loaded
DWORD NETCON_send(netconn_t *connection, const void *msg, size_t len, int flags, int *sent)
int sock_recv(int fd, void *msg, size_t len, int flags)
DWORD create_netconn(server_t *server, DWORD security_flags, BOOL mask_errors, DWORD timeout, netconn_t **ret)
static BOOL WINAPI winsock_startup(INIT_ONCE *once, void *param, void **context)
LPCVOID NETCON_GetCert(netconn_t *connection)
static SecHandle cred_handle
void free_netconn(netconn_t *netconn)
BOOL NETCON_is_alive(netconn_t *netconn)
void close_netconn(netconn_t *netconn)
static DWORD netcon_secure_connect_setup(netconn_t *connection, BOOL compat_mode)
static BOOL send_ssl_chunk(netconn_t *conn, const void *msg, size_t size)
DWORD NETCON_set_timeout(netconn_t *connection, BOOL send, DWORD value)
static DWORD netconn_verify_cert(netconn_t *conn, PCCERT_CONTEXT cert, HCERTSTORE store)
DWORD NETCON_recv(netconn_t *connection, void *buf, size_t len, BOOL blocking, int *recvd)
static BOOL ensure_cred_handle(void)
#define ISC_REQ_MANUAL_CRED_VALIDATION
#define ISC_REQ_CONFIDENTIALITY
#define SecIsValidHandle(x)
#define ISC_REQ_ALLOCATE_MEMORY
#define SECPKG_CRED_OUTBOUND
#define SECBUFFER_STREAM_TRAILER
#define SECBUFFER_STREAM_HEADER
#define ISC_REQ_SEQUENCE_DETECT
#define ISC_REQ_REPLAY_DETECT
#define ISC_REQ_USE_SESSION_KEY
#define SecInvalidateHandle(x)
#define SECPKG_ATTR_STREAM_SIZES
#define SECBUFFER_VERSION
#define SP_PROT_TLS1_1PLUS_CLIENT
#define SECPKG_ATTR_CONNECTION_INFO
#define SECPKG_ATTR_SUPPORTED_PROTOCOLS
#define SCHANNEL_CRED_VERSION
#define SECPKG_ATTR_REMOTE_CERT_CONTEXT
INT WSAAPI setsockopt(IN SOCKET s, IN INT level, IN INT optname, IN CONST CHAR FAR *optval, IN INT optlen)
INT WSAAPI getsockopt(IN SOCKET s, IN INT level, IN INT optname, OUT CHAR FAR *optval, IN OUT INT FAR *optlen)
SECURITY_STATUS WINAPI FreeContextBuffer(PVOID pv)
CERT_TRUST_STATUS TrustStatus
CERT_USAGE_MATCH RequestedUsage
LPSTR * rgpszUsageIdentifier
LIST_ENTRY ProcessLocksList
DWORD grbitEnabledProtocols
SecPkgContext_StreamSizes ssl_sizes
const CERT_CHAIN_CONTEXT * cert_chain
static INIT_ONCE init_once
static rfbScreenInfoPtr server
INT WINAPI WSAStartup(IN WORD wVersionRequested, OUT LPWSADATA lpWSAData)
DWORD WINAPI GetLastError(void)
void WINAPI LeaveCriticalSection(LPCRITICAL_SECTION)
void WINAPI EnterCriticalSection(LPCRITICAL_SECTION)
void WINAPI DeleteCriticalSection(PCRITICAL_SECTION)
#define INIT_ONCE_STATIC_INIT
#define szOID_PKIX_KP_SERVER_AUTH
#define CERT_CHAIN_POLICY_SSL
#define CERT_TRUST_IS_PARTIAL_CHAIN
#define CERT_TRUST_IS_NOT_VALID_FOR_USAGE
#define CERT_TRUST_IS_NOT_SIGNATURE_VALID
#define CERT_TRUST_IS_UNTRUSTED_ROOT
#define CERT_TRUST_IS_NOT_TIME_VALID
#define SEC_I_CONTEXT_EXPIRED
#define CERT_E_CN_NO_MATCH
#define SEC_I_CONTINUE_NEEDED
#define SEC_E_INCOMPLETE_MESSAGE
#define SECURITY_FLAG_STRENGTH_MEDIUM
#define SECURITY_FLAG_STRENGTH_WEAK
#define SECURITY_FLAG_IGNORE_CERT_DATE_INVALID
#define SECURITY_FLAG_SECURE
#define SECURITY_FLAG_STRENGTH_STRONG
#define SECURITY_FLAG_IGNORE_UNKNOWN_CA
#define ERROR_INTERNET_SEC_CERT_CN_INVALID
#define ERROR_INTERNET_SECURITY_CHANNEL_ERROR
#define ERROR_INTERNET_CONNECTION_ABORTED
#define ERROR_INTERNET_INVALID_CA
#define ERROR_INTERNET_SEC_CERT_DATE_INVALID
#define SECURITY_FLAG_IGNORE_WRONG_USAGE
#define SECURITY_FLAG_IGNORE_REVOCATION
#define ERROR_INTERNET_CANNOT_CONNECT
#define ERROR_INTERNET_SEC_CERT_REV_FAILED
#define ERROR_INTERNET_SEC_CERT_ERRORS
#define ERROR_INTERNET_SEC_INVALID_CERT
int PASCAL FAR WSAGetLastError(void)
int PASCAL FAR WSACleanup(void)
SECURITY_STATUS WINAPI EncryptMessage(PCtxtHandle phContext, ULONG fQOP, PSecBufferDesc pMessage, ULONG MessageSeqNo)
SECURITY_STATUS WINAPI AcquireCredentialsHandleW(SEC_WCHAR *pszPrincipal, SEC_WCHAR *pszPackage, ULONG fCredentialsUse, PLUID pvLogonID, PVOID pAuthData, SEC_GET_KEY_FN pGetKeyFn, PVOID pvGetKeyArgument, PCredHandle phCredential, PTimeStamp ptsExpiry)
SECURITY_STATUS WINAPI InitializeSecurityContextW(PCredHandle phCredential, PCtxtHandle phContext, SEC_WCHAR *pszTargetName, ULONG fContextReq, ULONG Reserved1, ULONG TargetDataRep, PSecBufferDesc pInput, ULONG Reserved2, PCtxtHandle phNewContext, PSecBufferDesc pOutput, ULONG *pfContextAttr, PTimeStamp ptsExpiry)
SECURITY_STATUS WINAPI DecryptMessage(PCtxtHandle phContext, PSecBufferDesc pMessage, ULONG MessageSeqNo, PULONG pfQOP)
SECURITY_STATUS WINAPI QueryContextAttributesW(PCtxtHandle phContext, ULONG ulAttribute, void *pBuffer)
SECURITY_STATUS WINAPI QueryCredentialsAttributesA(PCredHandle phCredential, ULONG ulAttribute, void *pBuffer)
SECURITY_STATUS WINAPI DeleteSecurityContext(PCtxtHandle phContext)
SECURITY_STATUS WINAPI FreeCredentialsHandle(PCredHandle phCredential)