diff --git a/winpr/include/winpr/crypto.h b/winpr/include/winpr/crypto.h index ded2480c0..56fd6d981 100644 --- a/winpr/include/winpr/crypto.h +++ b/winpr/include/winpr/crypto.h @@ -340,9 +340,25 @@ typedef const CERT_CONTEXT *PCCERT_CONTEXT; #define CERT_FIND_OR_CTL_USAGE_FLAG CERT_FIND_OR_ENHKEY_USAGE_FLAG #define CERT_FIND_VALID_CTL_USAGE_FLAG CERT_FIND_VALID_ENHKEY_USAGE_FLAG +#define CERT_NAME_EMAIL_TYPE 1 +#define CERT_NAME_RDN_TYPE 2 +#define CERT_NAME_ATTR_TYPE 3 +#define CERT_NAME_SIMPLE_DISPLAY_TYPE 4 +#define CERT_NAME_FRIENDLY_DISPLAY_TYPE 5 +#define CERT_NAME_DNS_TYPE 6 +#define CERT_NAME_URL_TYPE 7 +#define CERT_NAME_UPN_TYPE 8 + +#define CERT_NAME_ISSUER_FLAG 0x1 +#define CERT_NAME_DISABLE_IE4_UTF8_FLAG 0x00010000 + +#define CERT_NAME_SEARCH_ALL_NAMES_FLAG 0x2 + WINPR_API HCERTSTORE CertOpenSystemStoreW(HCRYPTPROV_LEGACY hProv, LPCWSTR szSubsystemProtocol); WINPR_API HCERTSTORE CertOpenSystemStoreA(HCRYPTPROV_LEGACY hProv, LPCSTR szSubsystemProtocol); +WINPR_API BOOL CertCloseStore(HCERTSTORE hCertStore, DWORD dwFlags); + #ifdef UNICODE #define CertOpenSystemStore CertOpenSystemStoreW #else @@ -352,6 +368,19 @@ WINPR_API HCERTSTORE CertOpenSystemStoreA(HCRYPTPROV_LEGACY hProv, LPCSTR szSubs WINPR_API PCCERT_CONTEXT CertFindCertificateInStore(HCERTSTORE hCertStore, DWORD dwCertEncodingType, DWORD dwFindFlags, DWORD dwFindType, const void* pvFindPara, PCCERT_CONTEXT pPrevCertContext); +WINPR_API PCCERT_CONTEXT CertEnumCertificatesInStore(HCERTSTORE hCertStore, PCCERT_CONTEXT pPrevCertContext); + +DWORD CertGetNameStringW(PCCERT_CONTEXT pCertContext, DWORD dwType, + DWORD dwFlags, void* pvTypePara, LPWSTR pszNameString, DWORD cchNameString); +DWORD CertGetNameStringA(PCCERT_CONTEXT pCertContext, DWORD dwType, + DWORD dwFlags, void* pvTypePara, LPSTR pszNameString, DWORD cchNameString); + +#ifdef UNICODE +#define CertGetNameString CertGetNameStringW +#else +#define CertGetNameString CertGetNameStringA +#endif + #endif #endif /* WINPR_CRYPTO_H */ diff --git a/winpr/libwinpr/crypto/cert.c b/winpr/libwinpr/crypto/cert.c index bc989a631..7dc256221 100644 --- a/winpr/libwinpr/crypto/cert.c +++ b/winpr/libwinpr/crypto/cert.c @@ -162,11 +162,33 @@ HCERTSTORE CertOpenSystemStoreA(HCRYPTPROV_LEGACY hProv, LPCSTR szSubsystemProto return CertOpenSystemStoreW(hProv, NULL); } +BOOL CertCloseStore(HCERTSTORE hCertStore, DWORD dwFlags) +{ + return TRUE; +} + PCCERT_CONTEXT CertFindCertificateInStore(HCERTSTORE hCertStore, DWORD dwCertEncodingType, DWORD dwFindFlags, DWORD dwFindType, const void* pvFindPara, PCCERT_CONTEXT pPrevCertContext) { return (PCCERT_CONTEXT) 1; } +PCCERT_CONTEXT CertEnumCertificatesInStore(HCERTSTORE hCertStore, PCCERT_CONTEXT pPrevCertContext) +{ + return (PCCERT_CONTEXT) NULL; +} + +DWORD CertGetNameStringW(PCCERT_CONTEXT pCertContext, DWORD dwType, + DWORD dwFlags, void* pvTypePara, LPWSTR pszNameString, DWORD cchNameString) +{ + return 0; +} + +DWORD CertGetNameStringA(PCCERT_CONTEXT pCertContext, DWORD dwType, + DWORD dwFlags, void* pvTypePara, LPSTR pszNameString, DWORD cchNameString) +{ + return 0; +} + #endif diff --git a/winpr/libwinpr/sspi/Schannel/schannel_openssl.c b/winpr/libwinpr/sspi/Schannel/schannel_openssl.c index c33e33ac7..3b767311c 100644 --- a/winpr/libwinpr/sspi/Schannel/schannel_openssl.c +++ b/winpr/libwinpr/sspi/Schannel/schannel_openssl.c @@ -44,6 +44,7 @@ char* openssl_get_ssl_error_string(int ssl_error) return "SSL_ERROR_SYSCALL"; case SSL_ERROR_SSL: + ERR_print_errors_fp(stdout); return "SSL_ERROR_SSL"; } @@ -192,19 +193,17 @@ int schannel_openssl_server_init(SCHANNEL_OPENSSL* context) return -1; } -#if 0 - if (SSL_CTX_use_RSAPrivateKey_file(context->ctx, privatekey_file, SSL_FILETYPE_PEM) <= 0) + if (SSL_CTX_use_RSAPrivateKey_file(context->ctx, "/tmp/localhost.key", SSL_FILETYPE_PEM) <= 0) { printf("SSL_CTX_use_RSAPrivateKey_file failed\n"); return -1; } - if (SSL_use_certificate_file(context->ssl, certificate_file, SSL_FILETYPE_PEM) <= 0) + if (SSL_use_certificate_file(context->ssl, "/tmp/localhost.crt", SSL_FILETYPE_PEM) <= 0) { printf("SSL_use_certificate_file failed\n"); return -1; } -#endif context->bioRead = BIO_new(BIO_s_mem()); @@ -308,6 +307,7 @@ SECURITY_STATUS schannel_openssl_server_process_tokens(SCHANNEL_OPENSSL* context if (pBuffer->BufferType != SECBUFFER_TOKEN) return SEC_E_INVALID_TOKEN; + printf("Server input: %d\n", pBuffer->cbBuffer); status = BIO_write(context->bioRead, pBuffer->pvBuffer, pBuffer->cbBuffer); status = SSL_accept(context->ssl); diff --git a/winpr/libwinpr/sspi/test/TestSchannel.c b/winpr/libwinpr/sspi/test/TestSchannel.c index 0c4432589..3fccbb1c0 100644 --- a/winpr/libwinpr/sspi/test/TestSchannel.c +++ b/winpr/libwinpr/sspi/test/TestSchannel.c @@ -3,6 +3,7 @@ #include #include #include +#include #include #include #include