Make it possible to build curl for Windows CE using the CeGCC toolchain.
With both CMake and autotools, including tests and examples, also in CI.
The build configuration is the default one with Schannel enabled. No
3rd-party dependencies have been tested.
Also revive old code to make Schannel build with Windows CE, including
certificate verification.
Builds have been throughougly tested. But, I've made no functional tests
for this PR. Some parts (esp. file operations, like truncate and seek)
are stubbed out and likely broken as a result. Test servers build, but
they do not work on Windows CE. This patch substitutes `fstat()` calls
with `stat()`, which operate on filenames, not file handles. This may or
may not work and/or may not be secure.
About CeGCC: I used the latest available macOS binary build v0.59.1
r1397 from 2009, in native `mingw32ce` build mode. CeGCC is in effect
MinGW + GCC 4.4.0 + old/classic-mingw Windows headers. It targets
Windows CE v3.0 according to its `_WIN32_WCE` value. It means this PR
restores portions of old/classic-mingw support. It makes the Windows CE
codepath compatible with GCC 4.4.0. It also adds workaround for CMake,
which cannot identify and configure this toolchain out of the box.
Notes:
- CMake doesn't recognize CeGCC/mingw32ce, necessitating tricks as seen
with Amiga and MS-DOS.
- CMake doesn't set `MINGW` for mingw32ce. Set it and `MINGW32CE`
manually as a helper variable, in addition to `WINCE` which CMake sets
based on `CMAKE_SYSTEM_NAME`.
- CMake fails to create an implib for `libcurl.dll`, due to not
recognizing the platform as a Windowsy one. This patch adds the
necessary workaround to make it work.
- headers shipping with CeGCC miss some things curl needs for Schannel
support. Fixed by restoring and renovating code previously deleted
old-mingw code.
- it's sometime non-trivial to figure out if a fallout is WinCE,
mingw32ce, old-mingw, or GCC version-specific.
- WinCE is always Unicode. With exceptions: no `wmain`,
`GetProcAddress()`.
- `_fileno()` is said to convert from `FILE *` to `void *` which is
a Win32 file `HANDLE`. (This patch doesn't use this, but with further
effort it probably could be.)
https://stackoverflow.com/questions/3989545/how-do-i-get-the-file-handle-from-the-fopen-file-structure
- WinCE has no signals, current directory, stdio/CRT file handles, no
`_get_osfhandle()`, no `errno`, no `errno.h`. Some of this stuff is
standard C89, yet missing from this platform. Microsoft expects
Windows CE apps to use Win32 file API and `FILE *` exclusively.
- revived CeGCC here (not tested for this PR):
https://building.enlyze.com/posts/a-new-windows-ce-x86-compiler-in-2024/
On `UNDER_CE` vs. `_WIN32_WCE`: (This patch settled on `UNDER_CE`)
- A custom VS2008 WinCE toolchain does not set any of these.
The compiler binaries don't contain these strings, and has no compiler
option for targeting WinCE, hinting that a vanilla toolchain isn't
setting any of them either.
- `UNDER_CE` is automatically defined by the CeGCC compiler.
https://cegcc.sourceforge.net/docs/details.html
- `UNDER_CE` is similar to `_WIN32`, except it's not set automatically
by all compilers. It's not supposed to have any value, like a version.
(Though e.g. OpenSSL sets it to a version)
- `_WIN32_WCE` is the CE counterpart of the non-CE `_WIN32_WINNT` macro.
That does return the targeted Windows CE version.
- `_WIN32_WCE` is not defined by compilers, and relies on a header
setting it to a default, or the build to set it to the desired target
version. This is also how `_WIN32_WINNT` works.
- `_WIN32_WCE` default is set by `windef.h` in CeGCC.
- `_WIN32_WCE` isn't set to a default by MSVC Windows CE headers (the
ones I checked at least).
- CMake sets `_WIN32_WCE=<ver>`, `UNDER_CE`, `WINCE` for MSVC WinCE.
- `_WIN32_WCE` seems more popular in other projects, including CeGCC
itself. `zlib` is a notable exception amongst curl dependencies,
which uses `UNDER_CE`.
- Since `_WIN32_WCE` needs "certain" headers to have it defined, it's
undefined depending on headers included beforehand.
- `curl/curl.h` re-uses `_WIN32_WCE`'s as a self-guard, relying on
its not-(necessarily)-defined-by-default property:
25b445e479/include/curl/curl.h (L77)
Toolchain downloads:
- Windows:
https://downloads.sourceforge.net/cegcc/cegcc/0.59.1/cegcc_mingw32ce_cygwin1.7_r1399.tar.bz2
- macOS Intel:
https://downloads.sourceforge.net/cegcc/cegcc/0.59.1/cegcc_mingw32ce_snowleopard_r1397.tar.bz2
Closes #15975
369 lines
12 KiB
C
369 lines
12 KiB
C
#ifndef HEADER_CURL_SSPI_H
|
|
#define HEADER_CURL_SSPI_H
|
|
/***************************************************************************
|
|
* _ _ ____ _
|
|
* Project ___| | | | _ \| |
|
|
* / __| | | | |_) | |
|
|
* | (__| |_| | _ <| |___
|
|
* \___|\___/|_| \_\_____|
|
|
*
|
|
* Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
|
|
*
|
|
* This software is licensed as described in the file COPYING, which
|
|
* you should have received as part of this distribution. The terms
|
|
* are also available at https://curl.se/docs/copyright.html.
|
|
*
|
|
* You may opt to use, copy, modify, merge, publish, distribute and/or sell
|
|
* copies of the Software, and permit persons to whom the Software is
|
|
* furnished to do so, under the terms of the COPYING file.
|
|
*
|
|
* This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
|
|
* KIND, either express or implied.
|
|
*
|
|
* SPDX-License-Identifier: curl
|
|
*
|
|
***************************************************************************/
|
|
|
|
#include "curl_setup.h"
|
|
|
|
#ifdef USE_WINDOWS_SSPI
|
|
|
|
#include <curl/curl.h>
|
|
|
|
/*
|
|
* When including the following three headers, it is mandatory to define either
|
|
* SECURITY_WIN32 or SECURITY_KERNEL, indicating who is compiling the code.
|
|
*/
|
|
|
|
#undef SECURITY_WIN32
|
|
#undef SECURITY_KERNEL
|
|
#define SECURITY_WIN32 1
|
|
#include <security.h>
|
|
#include <sspi.h>
|
|
#include <rpc.h>
|
|
|
|
CURLcode Curl_sspi_global_init(void);
|
|
void Curl_sspi_global_cleanup(void);
|
|
|
|
/* This is used to populate the domain in a SSPI identity structure */
|
|
CURLcode Curl_override_sspi_http_realm(const char *chlg,
|
|
SEC_WINNT_AUTH_IDENTITY *identity);
|
|
|
|
/* This is used to generate an SSPI identity structure */
|
|
CURLcode Curl_create_sspi_identity(const char *userp, const char *passwdp,
|
|
SEC_WINNT_AUTH_IDENTITY *identity);
|
|
|
|
/* This is used to free an SSPI identity structure */
|
|
void Curl_sspi_free_identity(SEC_WINNT_AUTH_IDENTITY *identity);
|
|
|
|
/* Forward-declaration of global variables defined in curl_sspi.c */
|
|
extern HMODULE Curl_hSecDll;
|
|
extern PSecurityFunctionTable Curl_pSecFn;
|
|
|
|
/* Provide some definitions missing in old headers */
|
|
#define SP_NAME_DIGEST "WDigest"
|
|
#define SP_NAME_NTLM "NTLM"
|
|
#define SP_NAME_NEGOTIATE "Negotiate"
|
|
#define SP_NAME_KERBEROS "Kerberos"
|
|
|
|
#ifndef ISC_REQ_USE_HTTP_STYLE
|
|
#define ISC_REQ_USE_HTTP_STYLE 0x01000000
|
|
#endif
|
|
|
|
#ifdef __MINGW32CE__
|
|
#ifndef ISC_RET_REPLAY_DETECT
|
|
#define ISC_RET_REPLAY_DETECT 0x00000004
|
|
#endif
|
|
#ifndef ISC_RET_SEQUENCE_DETECT
|
|
#define ISC_RET_SEQUENCE_DETECT 0x00000008
|
|
#endif
|
|
#ifndef ISC_RET_CONFIDENTIALITY
|
|
#define ISC_RET_CONFIDENTIALITY 0x00000010
|
|
#endif
|
|
#ifndef ISC_RET_ALLOCATED_MEMORY
|
|
#define ISC_RET_ALLOCATED_MEMORY 0x00000100
|
|
#endif
|
|
#ifndef ISC_RET_STREAM
|
|
#define ISC_RET_STREAM 0x00008000
|
|
#endif
|
|
|
|
#ifndef SEC_E_INSUFFICIENT_MEMORY
|
|
#define SEC_E_INSUFFICIENT_MEMORY ((HRESULT)0x80090300L)
|
|
#endif
|
|
#ifndef SEC_E_INVALID_HANDLE
|
|
#define SEC_E_INVALID_HANDLE ((HRESULT)0x80090301L)
|
|
#endif
|
|
#ifndef SEC_E_UNSUPPORTED_FUNCTION
|
|
#define SEC_E_UNSUPPORTED_FUNCTION ((HRESULT)0x80090302L)
|
|
#endif
|
|
#ifndef SEC_E_TARGET_UNKNOWN
|
|
#define SEC_E_TARGET_UNKNOWN ((HRESULT)0x80090303L)
|
|
#endif
|
|
#ifndef SEC_E_INTERNAL_ERROR
|
|
#define SEC_E_INTERNAL_ERROR ((HRESULT)0x80090304L)
|
|
#endif
|
|
#ifndef SEC_E_SECPKG_NOT_FOUND
|
|
#define SEC_E_SECPKG_NOT_FOUND ((HRESULT)0x80090305L)
|
|
#endif
|
|
#ifndef SEC_E_NOT_OWNER
|
|
#define SEC_E_NOT_OWNER ((HRESULT)0x80090306L)
|
|
#endif
|
|
#ifndef SEC_E_CANNOT_INSTALL
|
|
#define SEC_E_CANNOT_INSTALL ((HRESULT)0x80090307L)
|
|
#endif
|
|
#ifndef SEC_E_INVALID_TOKEN
|
|
#define SEC_E_INVALID_TOKEN ((HRESULT)0x80090308L)
|
|
#endif
|
|
#ifndef SEC_E_CANNOT_PACK
|
|
#define SEC_E_CANNOT_PACK ((HRESULT)0x80090309L)
|
|
#endif
|
|
#ifndef SEC_E_QOP_NOT_SUPPORTED
|
|
#define SEC_E_QOP_NOT_SUPPORTED ((HRESULT)0x8009030AL)
|
|
#endif
|
|
#ifndef SEC_E_NO_IMPERSONATION
|
|
#define SEC_E_NO_IMPERSONATION ((HRESULT)0x8009030BL)
|
|
#endif
|
|
#ifndef SEC_E_LOGON_DENIED
|
|
#define SEC_E_LOGON_DENIED ((HRESULT)0x8009030CL)
|
|
#endif
|
|
#ifndef SEC_E_UNKNOWN_CREDENTIALS
|
|
#define SEC_E_UNKNOWN_CREDENTIALS ((HRESULT)0x8009030DL)
|
|
#endif
|
|
#ifndef SEC_E_NO_CREDENTIALS
|
|
#define SEC_E_NO_CREDENTIALS ((HRESULT)0x8009030EL)
|
|
#endif
|
|
#ifndef SEC_E_MESSAGE_ALTERED
|
|
#define SEC_E_MESSAGE_ALTERED ((HRESULT)0x8009030FL)
|
|
#endif
|
|
#ifndef SEC_E_OUT_OF_SEQUENCE
|
|
#define SEC_E_OUT_OF_SEQUENCE ((HRESULT)0x80090310L)
|
|
#endif
|
|
#ifndef SEC_E_NO_AUTHENTICATING_AUTHORITY
|
|
#define SEC_E_NO_AUTHENTICATING_AUTHORITY ((HRESULT)0x80090311L)
|
|
#endif
|
|
#ifndef SEC_E_BAD_PKGID
|
|
#define SEC_E_BAD_PKGID ((HRESULT)0x80090316L)
|
|
#endif
|
|
#ifndef SEC_E_CONTEXT_EXPIRED
|
|
#define SEC_E_CONTEXT_EXPIRED ((HRESULT)0x80090317L)
|
|
#endif
|
|
#ifndef SEC_E_INCOMPLETE_MESSAGE
|
|
#define SEC_E_INCOMPLETE_MESSAGE ((HRESULT)0x80090318L)
|
|
#endif
|
|
#ifndef SEC_E_INCOMPLETE_CREDENTIALS
|
|
#define SEC_E_INCOMPLETE_CREDENTIALS ((HRESULT)0x80090320L)
|
|
#endif
|
|
#ifndef SEC_E_BUFFER_TOO_SMALL
|
|
#define SEC_E_BUFFER_TOO_SMALL ((HRESULT)0x80090321L)
|
|
#endif
|
|
#ifndef SEC_E_WRONG_PRINCIPAL
|
|
#define SEC_E_WRONG_PRINCIPAL ((HRESULT)0x80090322L)
|
|
#endif
|
|
#ifndef SEC_E_TIME_SKEW
|
|
#define SEC_E_TIME_SKEW ((HRESULT)0x80090324L)
|
|
#endif
|
|
#ifndef SEC_E_UNTRUSTED_ROOT
|
|
#define SEC_E_UNTRUSTED_ROOT ((HRESULT)0x80090325L)
|
|
#endif
|
|
#ifndef SEC_E_ILLEGAL_MESSAGE
|
|
#define SEC_E_ILLEGAL_MESSAGE ((HRESULT)0x80090326L)
|
|
#endif
|
|
#ifndef SEC_E_CERT_UNKNOWN
|
|
#define SEC_E_CERT_UNKNOWN ((HRESULT)0x80090327L)
|
|
#endif
|
|
#ifndef SEC_E_CERT_EXPIRED
|
|
#define SEC_E_CERT_EXPIRED ((HRESULT)0x80090328L)
|
|
#endif
|
|
#ifndef SEC_E_ENCRYPT_FAILURE
|
|
#define SEC_E_ENCRYPT_FAILURE ((HRESULT)0x80090329L)
|
|
#endif
|
|
#ifndef SEC_E_DECRYPT_FAILURE
|
|
#define SEC_E_DECRYPT_FAILURE ((HRESULT)0x80090330L)
|
|
#endif
|
|
#ifndef SEC_E_ALGORITHM_MISMATCH
|
|
#define SEC_E_ALGORITHM_MISMATCH ((HRESULT)0x80090331L)
|
|
#endif
|
|
#ifndef SEC_E_SECURITY_QOS_FAILED
|
|
#define SEC_E_SECURITY_QOS_FAILED ((HRESULT)0x80090332L)
|
|
#endif
|
|
#ifndef SEC_E_UNFINISHED_CONTEXT_DELETED
|
|
#define SEC_E_UNFINISHED_CONTEXT_DELETED ((HRESULT)0x80090333L)
|
|
#endif
|
|
#ifndef SEC_E_NO_TGT_REPLY
|
|
#define SEC_E_NO_TGT_REPLY ((HRESULT)0x80090334L)
|
|
#endif
|
|
#ifndef SEC_E_NO_IP_ADDRESSES
|
|
#define SEC_E_NO_IP_ADDRESSES ((HRESULT)0x80090335L)
|
|
#endif
|
|
#ifndef SEC_E_WRONG_CREDENTIAL_HANDLE
|
|
#define SEC_E_WRONG_CREDENTIAL_HANDLE ((HRESULT)0x80090336L)
|
|
#endif
|
|
#ifndef SEC_E_CRYPTO_SYSTEM_INVALID
|
|
#define SEC_E_CRYPTO_SYSTEM_INVALID ((HRESULT)0x80090337L)
|
|
#endif
|
|
#ifndef SEC_E_MAX_REFERRALS_EXCEEDED
|
|
#define SEC_E_MAX_REFERRALS_EXCEEDED ((HRESULT)0x80090338L)
|
|
#endif
|
|
#ifndef SEC_E_MUST_BE_KDC
|
|
#define SEC_E_MUST_BE_KDC ((HRESULT)0x80090339L)
|
|
#endif
|
|
#ifndef SEC_E_STRONG_CRYPTO_NOT_SUPPORTED
|
|
#define SEC_E_STRONG_CRYPTO_NOT_SUPPORTED ((HRESULT)0x8009033AL)
|
|
#endif
|
|
#ifndef SEC_E_TOO_MANY_PRINCIPALS
|
|
#define SEC_E_TOO_MANY_PRINCIPALS ((HRESULT)0x8009033BL)
|
|
#endif
|
|
#ifndef SEC_E_NO_PA_DATA
|
|
#define SEC_E_NO_PA_DATA ((HRESULT)0x8009033CL)
|
|
#endif
|
|
#ifndef SEC_E_PKINIT_NAME_MISMATCH
|
|
#define SEC_E_PKINIT_NAME_MISMATCH ((HRESULT)0x8009033DL)
|
|
#endif
|
|
#ifndef SEC_E_SMARTCARD_LOGON_REQUIRED
|
|
#define SEC_E_SMARTCARD_LOGON_REQUIRED ((HRESULT)0x8009033EL)
|
|
#endif
|
|
#ifndef SEC_E_SHUTDOWN_IN_PROGRESS
|
|
#define SEC_E_SHUTDOWN_IN_PROGRESS ((HRESULT)0x8009033FL)
|
|
#endif
|
|
#ifndef SEC_E_KDC_INVALID_REQUEST
|
|
#define SEC_E_KDC_INVALID_REQUEST ((HRESULT)0x80090340L)
|
|
#endif
|
|
#ifndef SEC_E_KDC_UNABLE_TO_REFER
|
|
#define SEC_E_KDC_UNABLE_TO_REFER ((HRESULT)0x80090341L)
|
|
#endif
|
|
#ifndef SEC_E_KDC_UNKNOWN_ETYPE
|
|
#define SEC_E_KDC_UNKNOWN_ETYPE ((HRESULT)0x80090342L)
|
|
#endif
|
|
#ifndef SEC_E_UNSUPPORTED_PREAUTH
|
|
#define SEC_E_UNSUPPORTED_PREAUTH ((HRESULT)0x80090343L)
|
|
#endif
|
|
#ifndef SEC_E_DELEGATION_REQUIRED
|
|
#define SEC_E_DELEGATION_REQUIRED ((HRESULT)0x80090345L)
|
|
#endif
|
|
#ifndef SEC_E_BAD_BINDINGS
|
|
#define SEC_E_BAD_BINDINGS ((HRESULT)0x80090346L)
|
|
#endif
|
|
#ifndef SEC_E_MULTIPLE_ACCOUNTS
|
|
#define SEC_E_MULTIPLE_ACCOUNTS ((HRESULT)0x80090347L)
|
|
#endif
|
|
#ifndef SEC_E_NO_KERB_KEY
|
|
#define SEC_E_NO_KERB_KEY ((HRESULT)0x80090348L)
|
|
#endif
|
|
#ifndef SEC_E_CERT_WRONG_USAGE
|
|
#define SEC_E_CERT_WRONG_USAGE ((HRESULT)0x80090349L)
|
|
#endif
|
|
#ifndef SEC_E_DOWNGRADE_DETECTED
|
|
#define SEC_E_DOWNGRADE_DETECTED ((HRESULT)0x80090350L)
|
|
#endif
|
|
#ifndef SEC_E_SMARTCARD_CERT_REVOKED
|
|
#define SEC_E_SMARTCARD_CERT_REVOKED ((HRESULT)0x80090351L)
|
|
#endif
|
|
#ifndef SEC_E_ISSUING_CA_UNTRUSTED
|
|
#define SEC_E_ISSUING_CA_UNTRUSTED ((HRESULT)0x80090352L)
|
|
#endif
|
|
#ifndef SEC_E_REVOCATION_OFFLINE_C
|
|
#define SEC_E_REVOCATION_OFFLINE_C ((HRESULT)0x80090353L)
|
|
#endif
|
|
#ifndef SEC_E_PKINIT_CLIENT_FAILURE
|
|
#define SEC_E_PKINIT_CLIENT_FAILURE ((HRESULT)0x80090354L)
|
|
#endif
|
|
#ifndef SEC_E_SMARTCARD_CERT_EXPIRED
|
|
#define SEC_E_SMARTCARD_CERT_EXPIRED ((HRESULT)0x80090355L)
|
|
#endif
|
|
#ifndef SEC_E_NO_S4U_PROT_SUPPORT
|
|
#define SEC_E_NO_S4U_PROT_SUPPORT ((HRESULT)0x80090356L)
|
|
#endif
|
|
#ifndef SEC_E_CROSSREALM_DELEGATION_FAILURE
|
|
#define SEC_E_CROSSREALM_DELEGATION_FAILURE ((HRESULT)0x80090357L)
|
|
#endif
|
|
#ifndef SEC_E_REVOCATION_OFFLINE_KDC
|
|
#define SEC_E_REVOCATION_OFFLINE_KDC ((HRESULT)0x80090358L)
|
|
#endif
|
|
#ifndef SEC_E_ISSUING_CA_UNTRUSTED_KDC
|
|
#define SEC_E_ISSUING_CA_UNTRUSTED_KDC ((HRESULT)0x80090359L)
|
|
#endif
|
|
#ifndef SEC_E_KDC_CERT_EXPIRED
|
|
#define SEC_E_KDC_CERT_EXPIRED ((HRESULT)0x8009035AL)
|
|
#endif
|
|
#ifndef SEC_E_KDC_CERT_REVOKED
|
|
#define SEC_E_KDC_CERT_REVOKED ((HRESULT)0x8009035BL)
|
|
#endif
|
|
#endif /* __MINGW32CE__ */
|
|
#ifndef SEC_E_INVALID_PARAMETER
|
|
# define SEC_E_INVALID_PARAMETER ((HRESULT)0x8009035DL)
|
|
#endif
|
|
#ifndef SEC_E_DELEGATION_POLICY
|
|
# define SEC_E_DELEGATION_POLICY ((HRESULT)0x8009035EL)
|
|
#endif
|
|
#ifndef SEC_E_POLICY_NLTM_ONLY
|
|
# define SEC_E_POLICY_NLTM_ONLY ((HRESULT)0x8009035FL)
|
|
#endif
|
|
|
|
#ifdef __MINGW32CE__
|
|
#ifndef SEC_I_CONTINUE_NEEDED
|
|
#define SEC_I_CONTINUE_NEEDED ((HRESULT)0x00090312L)
|
|
#endif
|
|
#ifndef SEC_I_COMPLETE_NEEDED
|
|
#define SEC_I_COMPLETE_NEEDED ((HRESULT)0x00090313L)
|
|
#endif
|
|
#ifndef SEC_I_COMPLETE_AND_CONTINUE
|
|
#define SEC_I_COMPLETE_AND_CONTINUE ((HRESULT)0x00090314L)
|
|
#endif
|
|
#ifndef SEC_I_LOCAL_LOGON
|
|
#define SEC_I_LOCAL_LOGON ((HRESULT)0x00090315L)
|
|
#endif
|
|
#ifndef SEC_I_CONTEXT_EXPIRED
|
|
#define SEC_I_CONTEXT_EXPIRED ((HRESULT)0x00090317L)
|
|
#endif
|
|
#ifndef SEC_I_INCOMPLETE_CREDENTIALS
|
|
#define SEC_I_INCOMPLETE_CREDENTIALS ((HRESULT)0x00090320L)
|
|
#endif
|
|
#ifndef SEC_I_RENEGOTIATE
|
|
#define SEC_I_RENEGOTIATE ((HRESULT)0x00090321L)
|
|
#endif
|
|
#ifndef SEC_I_NO_LSA_CONTEXT
|
|
#define SEC_I_NO_LSA_CONTEXT ((HRESULT)0x00090323L)
|
|
#endif
|
|
#endif /* __MINGW32CE__ */
|
|
#ifndef SEC_I_SIGNATURE_NEEDED
|
|
#define SEC_I_SIGNATURE_NEEDED ((HRESULT)0x0009035CL)
|
|
#endif
|
|
|
|
#ifndef CRYPT_E_REVOKED
|
|
#define CRYPT_E_REVOKED ((HRESULT)0x80092010L)
|
|
#endif
|
|
|
|
#ifndef CRYPT_E_NO_REVOCATION_DLL
|
|
#define CRYPT_E_NO_REVOCATION_DLL ((HRESULT)0x80092011L)
|
|
#endif
|
|
|
|
#ifndef CRYPT_E_NO_REVOCATION_CHECK
|
|
#define CRYPT_E_NO_REVOCATION_CHECK ((HRESULT)0x80092012L)
|
|
#endif
|
|
|
|
#ifndef CRYPT_E_REVOCATION_OFFLINE
|
|
#define CRYPT_E_REVOCATION_OFFLINE ((HRESULT)0x80092013L)
|
|
#endif
|
|
|
|
#ifndef CRYPT_E_NOT_IN_REVOCATION_DATABASE
|
|
#define CRYPT_E_NOT_IN_REVOCATION_DATABASE ((HRESULT)0x80092014L)
|
|
#endif
|
|
|
|
#ifdef UNICODE
|
|
# define SECFLAG_WINNT_AUTH_IDENTITY \
|
|
(unsigned long)SEC_WINNT_AUTH_IDENTITY_UNICODE
|
|
#else
|
|
# define SECFLAG_WINNT_AUTH_IDENTITY \
|
|
(unsigned long)SEC_WINNT_AUTH_IDENTITY_ANSI
|
|
#endif
|
|
|
|
/*
|
|
* Definitions required from ntsecapi.h are directly provided below this point
|
|
* to avoid including ntsecapi.h due to a conflict with OpenSSL's safestack.h
|
|
*/
|
|
#define KERB_WRAP_NO_ENCRYPT 0x80000001
|
|
|
|
#endif /* USE_WINDOWS_SSPI */
|
|
|
|
#endif /* HEADER_CURL_SSPI_H */
|