11#if HAVE_AUTH_MODULE_NTLM
24#pragma GCC diagnostic push
25#pragma GCC diagnostic ignored "-Wcast-function-type"
26 return reinterpret_cast<T
>(in);
27#pragma GCC diagnostic pop
29 return reinterpret_cast<T
>(in);
58#if HAVE_AUTH_MODULE_NTLM
59BOOL NTLM_LocalCall =
FALSE;
106 TCHAR lpszDLL[MAX_PATH];
107 OSVERSIONINFO VerInfo;
108 PSecPkgInfo pSPI =
nullptr;
120 VerInfo.dwOSVersionInfoSize =
sizeof (OSVERSIONINFO);
121 if (!GetVersionEx (&VerInfo)) {
124 if (VerInfo.dwPlatformId == VER_PLATFORM_WIN32_NT &&
125 VerInfo.dwMajorVersion == 4 &&
126 VerInfo.dwMinorVersion == 0) {
131 hModule = LoadLibrary(lpszDLL);
218 PVOID pIn, DWORD cbIn, PVOID pOut, PDWORD pcbOut, PBOOL pfDone)
231 SecBufferDesc sbdOut;
240 &pAS->
hcred, &tsExpiry);
247 sbdOut.ulVersion = 0;
249 sbdOut.pBuffers = &sbOut;
250 sbOut.cbBuffer = *pcbOut;
251 sbOut.BufferType = SECBUFFER_TOKEN;
252 sbOut.pvBuffer = pOut;
258 sbdIn.pBuffers = &sbIn;
259 sbIn.cbBuffer = cbIn;
260 sbIn.BufferType = SECBUFFER_TOKEN;
266 0, &pAS->
hctxt, &sbdOut, &fContextAttr, &tsExpiry);
277 *pcbOut = sbOut.cbBuffer;
286 PDWORD pcbOut, PBOOL pfDone,
char * credentials)
300 SecBufferDesc sbdOut;
305 SecPkgContext_Names namebuffer;
309 SECPKG_CRED_INBOUND,
nullptr,
nullptr,
nullptr,
nullptr, &pAS->
hcred,
312 fprintf(stderr,
"AcquireCredentialsHandle returned: %x\n",
SecurityStatus);
316 fprintf(stderr,
"AcquireCredentialsHandle failed: %x\n",
SecurityStatus);
324 sbdOut.ulVersion = 0;
326 sbdOut.pBuffers = &sbOut;
327 sbOut.cbBuffer = *pcbOut;
328 sbOut.BufferType = SECBUFFER_TOKEN;
329 sbOut.pvBuffer = pOut;
334 sbdIn.pBuffers = &sbIn;
335 sbIn.cbBuffer = cbIn;
336 sbIn.BufferType = SECBUFFER_TOKEN;
340 SECURITY_NATIVE_DREP, &pAS->
hctxt, &sbdOut, &fContextAttr,
343 fprintf(stderr,
"AcceptSecurityContext returned: %x\n",
SecurityStatus);
347 fprintf(stderr,
"AcceptSecurityContext failed: %x\n",
SecurityStatus);
357 fprintf(stderr,
"CompleteAuthToken returned: %x\n",
SecurityStatus);
361 fprintf(stderr,
"CompleteAuthToken failed: %x\n",
SecurityStatus);
367 if ((credentials !=
NULL) &&
371 fprintf(stderr,
"QueryContextAttributes returned: %x\n",
SecurityStatus);
375 fprintf(stderr,
"QueryContextAttributes failed: %x\n",
SecurityStatus);
382 *pcbOut = sbOut.cbBuffer;
395 BOOL fResult =
FALSE;
399 SEC_WINNT_AUTH_IDENTITY ai;
406 ZeroMemory(&ai,
sizeof(ai));
407 ai.Domain = (
unsigned char *)szDomain;
408 ai.DomainLength = lstrlen(szDomain);
409 ai.User = (
unsigned char *)szUser;
410 ai.UserLength = lstrlen(szUser);
411 ai.Password = (
unsigned char *)szPassword;
412 ai.PasswordLength = lstrlen(szPassword);
413#if defined(UNICODE) || defined(_UNICODE)
414 ai.Flags = SEC_WINNT_AUTH_IDENTITY_UNICODE;
416 ai.Flags = SEC_WINNT_AUTH_IDENTITY_ANSI;
465#if HAVE_AUTH_MODULE_NTLM
466const char * WINAPI SSP_MakeChallenge(PVOID PNegotiateBuf,
int NegotiateLen)
469 uint8_t * fResult =
nullptr;
479 NTLM_LocalCall =
FALSE;
481 memcpy(
pClientBuf, PNegotiateBuf, NegotiateLen);
496 if (fResult !=
NULL) {
502 static char encoded[8192];
503 size_t dstLen =
base64_encode_update(&ctx, encoded, cbOut,
reinterpret_cast<const uint8_t*
>(fResult));
504 assert(dstLen <
sizeof(encoded));
506 assert(dstLen <
sizeof(encoded));
507 encoded[dstLen] =
'\0';
513BOOL WINAPI SSP_ValidateNTLMCredentials(PVOID PAutenticateBuf,
int AutenticateLen,
char * credentials)
516 BOOL fResult =
FALSE;
520 memcpy(
pClientBuf, PAutenticateBuf, AutenticateLen);
527 cbIn = AutenticateLen;
530 &fDone, credentials))
539#if HAVE_AUTH_MODULE_NEGOTIATE
540const char * WINAPI SSP_MakeNegotiateBlob(PVOID PNegotiateBuf,
int NegotiateLen, PBOOL fDone,
int * Status,
char * credentials)
550 memcpy(
pClientBuf, PNegotiateBuf, NegotiateLen);
561 fDone, credentials)) {
570 static char encoded[8192];
572 assert(dstLen <
sizeof(encoded));
574 assert(dstLen <
sizeof(encoded));
575 encoded[dstLen] =
'\0';
581const char * WINAPI SSP_ValidateNegotiateCredentials(PVOID PAutenticateBuf,
int AutenticateLen, PBOOL fDone,
int * Status,
char * credentials)
586 memcpy(
pClientBuf, PAutenticateBuf, AutenticateLen);
593 cbIn = AutenticateLen;
596 fDone, credentials)) {
605 static char encoded[8192];
607 assert(dstLen <
sizeof(encoded));
609 assert(dstLen <
sizeof(encoded));
610 encoded[dstLen] =
'\0';
void base64_encode_init(struct base64_encode_ctx *ctx)
size_t base64_encode_update(struct base64_encode_ctx *ctx, char *dst, size_t length, const uint8_t *src)
size_t base64_encode_final(struct base64_encode_ctx *ctx, char *dst)
#define NTLM_NEGOTIATE_UNICODE
#define NTLM_NEGOTIATE_THIS_IS_LOCAL_CALL
static uint8_t * pClientBuf
BOOL GenServerContext(PAUTH_SEQ, PVOID, DWORD, PVOID, PDWORD, PBOOL, char *)
FREE_CONTEXT_BUFFER_FN _FreeContextBuffer
FREE_CREDENTIALS_HANDLE_FN _FreeCredentialsHandle
INITIALIZE_SECURITY_CONTEXT_FN _InitializeSecurityContext
T farproc_cast(FARPROC in)
DELETE_SECURITY_CONTEXT_FN _DeleteSecurityContext
COMPLETE_AUTH_TOKEN_FN _CompleteAuthToken
static uint8_t * pServerBuf
static AUTH_SEQ NTLM_asServer
static char * SSP_Package_InUse
void UnloadSecurityDll(void)
BOOL GenClientContext(PAUTH_SEQ, PSEC_WINNT_AUTH_IDENTITY, PVOID, DWORD, PVOID, PDWORD, PBOOL)
QUERY_CONTEXT_ATTRIBUTES_FN_A _QueryContextAttributes
HMODULE LoadSecurityDll(int mode, const char *SSP_Package)
QUERY_SECURITY_PACKAGE_INFO_FN _QuerySecurityPackageInfo
ACCEPT_SECURITY_CONTEXT_FN _AcceptSecurityContext
ACQUIRE_CREDENTIALS_HANDLE_FN _AcquireCredentialsHandle
struct _AUTH_SEQ * PAUTH_SEQ
struct _AUTH_SEQ AUTH_SEQ
SECURITY_STATUS SecurityStatus
BOOL WINAPI SSP_LogonUser(PTSTR szUser, PTSTR szPassword, PTSTR szDomain)
#define WINNT_SECURITY_DLL
#define WIN2K_SECURITY_DLL
void * xcalloc(size_t n, size_t sz)