static INT_PTR InitSecurityProviderService2(WPARAM, LPARAM lParam) { NETLIBNTLMINIT2 *req = (NETLIBNTLMINIT2*)lParam; if (req == NULL || req->cbSize < sizeof(*req)) return 0; if (req->flags & NNR_UNICODE) return (INT_PTR)NetlibInitSecurityProvider(req->szProviderName, req->szPrincipal); return (INT_PTR)NetlibInitSecurityProvider((char*)req->szProviderName, (char*)req->szPrincipal); }
static INT_PTR InitSecurityProviderService2(WPARAM, LPARAM lParam) { NETLIBNTLMINIT2 *req = ( NETLIBNTLMINIT2* )lParam; if (req->cbSize < sizeof(*req)) return 0; HANDLE hSecurity; #ifdef UNICODE if (req->flags & NNR_UNICODE) hSecurity = NetlibInitSecurityProvider(req->szProviderName, req->szPrincipal); else #endif hSecurity = NetlibInitSecurityProvider((char*)req->szProviderName, (char*)req->szPrincipal); return (INT_PTR)hSecurity; }
char* Execute(NetlibConnection *nlc, char *szHost, const char *szProvider, const char *szChallenge, unsigned &complete) { char *szAuthHdr = NULL; bool justCreated = false; NetlibUser *nlu = nlc->nlu; if (m_hNtlmSecurity) { bool newAuth = !m_szProvider || !szProvider || _stricmp(m_szProvider, szProvider); newAuth = newAuth || (m_szHost != szHost && (!m_szHost || !szHost || _stricmp(m_szHost, szHost))); if (newAuth) Destroy(); } if (m_hNtlmSecurity == NULL) { char szSpnStr[256] = ""; if (szHost && _stricmp(szProvider, "Basic")) { unsigned long ip = inet_addr(szHost); PHOSTENT host = (ip == INADDR_NONE) ? gethostbyname(szHost) : gethostbyaddr((char*)&ip, 4, AF_INET); mir_snprintf(szSpnStr, "HTTP/%s", host && host->h_name ? host->h_name : szHost); _strlwr(szSpnStr + 5); NetlibLogf(nlu, "Host SPN: %s", szSpnStr); } m_hNtlmSecurity = NetlibInitSecurityProvider(szProvider, szSpnStr[0] ? szSpnStr : NULL); if (m_hNtlmSecurity) { m_szProvider = mir_strdup(szProvider); m_szHost = mir_strdup(szHost); justCreated = true; } } if (m_hNtlmSecurity) { TCHAR *szLogin = NULL, *szPassw = NULL; if (nlu->settings.useProxyAuth) { mir_cslock lck(csNetlibUser); szLogin = mir_a2t(nlu->settings.szProxyAuthUser); szPassw = mir_a2t(nlu->settings.szProxyAuthPassword); } szAuthHdr = NtlmCreateResponseFromChallenge(m_hNtlmSecurity, szChallenge, szLogin, szPassw, true, complete); if (!szAuthHdr) { NetlibLogf(NULL, "Security login %s failed, user: %S pssw: %S", szProvider, szLogin ? szLogin : _T("(no user)"), szPassw ? _T("(exist)") : _T("(no psw)")); } else if (justCreated) proxyAuthList.add(m_szHost, m_szProvider); mir_free(szLogin); mir_free(szPassw); } else complete = 1; return szAuthHdr; }
static INT_PTR InitSecurityProviderService(WPARAM, LPARAM lParam) { HANDLE hSecurity = NetlibInitSecurityProvider((char*)lParam, NULL); return (INT_PTR)hSecurity; }
HANDLE NetlibInitSecurityProvider(const char* szProvider, const char* szPrincipal) { return NetlibInitSecurityProvider(StrConvT(szProvider), StrConvT(szPrincipal)); }