189 lines
4.8 KiB
C++
189 lines
4.8 KiB
C++
//****************************************************************************
|
|
//
|
|
// Module: INETCFG.DLL
|
|
// File: ienews.c
|
|
// Content: This file contains all the functions that handle importing
|
|
// connection information.
|
|
// History:
|
|
// Sat 10-Mar-1996 23:50:40 -by- Mark MacLin [mmaclin]
|
|
// this code started its life as ixport.c in RNAUI.DLL
|
|
// my thanks to viroont
|
|
//
|
|
// Copyright (c) Microsoft Corporation 1991-1996
|
|
//
|
|
//****************************************************************************
|
|
#include "inetreg.h"
|
|
#include "obcomglb.h"
|
|
|
|
|
|
#pragma data_seg(".rdata")
|
|
|
|
|
|
#define REGSTR_PATH_IE_SERVICES REGSTR_PATH_IEXPLORER L"\\Services"
|
|
|
|
static const WCHAR cszRegPathIEServices[] = REGSTR_PATH_IE_SERVICES;
|
|
static const WCHAR cszRegValNNTPEnabled[] = L"NNTP_Enabled";
|
|
static const WCHAR cszRegValNNTPUseAuth[] = L"NNTP_Use_Auth";
|
|
static const WCHAR cszRegValNNTPServer[] = L"NNTP_Server";
|
|
static const WCHAR cszRegValNNTPMailName[] = L"NNTP_MailName";
|
|
static const WCHAR cszRegValNNTPMailAddress[] = L"NNTP_MailAddr";
|
|
static const WCHAR cszYes[] = L"yes";
|
|
static const WCHAR cszNo[] = L"no";
|
|
|
|
#pragma data_seg()
|
|
|
|
#define PCE_WWW_BASIC 0x13
|
|
WCHAR szNNTP_Resource[] = L"NNTP";
|
|
typedef DWORD (APIENTRY *PFNWNETGETCACHEDPASSWORD)(LPSTR, WORD, LPSTR, LPWORD,BYTE);
|
|
|
|
DWORD MyWNetGetCachedPassword(LPWSTR pbResource, WORD cbResource, LPWSTR pbPassword,
|
|
LPWORD pcchPassword, BYTE nType)
|
|
{
|
|
USES_CONVERSION;
|
|
HINSTANCE hInst = NULL;
|
|
FARPROC fp = NULL;
|
|
DWORD dwRet = 0;
|
|
|
|
hInst = LoadLibrary(L"MPR.DLL");
|
|
if (hInst)
|
|
{
|
|
fp = GetProcAddress(hInst, "WNetGetCachedPassword");
|
|
if (fp)
|
|
dwRet = ((PFNWNETGETCACHEDPASSWORD)fp) (W2A(pbResource), cbResource, W2A(pbPassword), pcchPassword, nType);
|
|
else
|
|
dwRet = GetLastError();
|
|
FreeLibrary(hInst);
|
|
hInst = NULL;
|
|
} else {
|
|
dwRet = GetLastError();
|
|
}
|
|
return dwRet;
|
|
}
|
|
|
|
|
|
typedef DWORD (APIENTRY *PFNWNETCACHEPASSWORD)(LPSTR, WORD, LPSTR, WORD,BYTE,UINT);
|
|
|
|
DWORD MyWNetCachePassword
|
|
(
|
|
LPWSTR szResource,
|
|
WORD cchResource,
|
|
LPWSTR szPassword,
|
|
WORD cchPassword,
|
|
BYTE nType,
|
|
UINT fnFlags
|
|
)
|
|
{
|
|
HINSTANCE hInst = NULL;
|
|
FARPROC fp = NULL;
|
|
DWORD dwRet = 0;
|
|
hInst = LoadLibrary(L"MPR.DLL");
|
|
if (hInst)
|
|
{
|
|
USES_CONVERSION;
|
|
fp = GetProcAddress(hInst, "WNetCachePassword");
|
|
if (fp)
|
|
dwRet = ((PFNWNETCACHEPASSWORD)fp)(W2A(szResource), cchResource, W2A(szPassword), cchPassword,nType,fnFlags);
|
|
else
|
|
dwRet = GetLastError();
|
|
FreeLibrary(hInst);
|
|
hInst = NULL;
|
|
fp = NULL;
|
|
} else {
|
|
dwRet = GetLastError();
|
|
}
|
|
return dwRet;
|
|
}
|
|
|
|
|
|
BOOL
|
|
SetAuthInfo( WCHAR *szUsername, WCHAR *szPassword)
|
|
{
|
|
int wnet_status;
|
|
WCHAR szUserInfo[256];
|
|
WORD cchUserInfo = MAX_CHARS_IN_BUFFER(szUserInfo);
|
|
|
|
if (wcschr(szUsername, L':')) {
|
|
return(FALSE);
|
|
}
|
|
|
|
lstrcpy( szUserInfo, szUsername );
|
|
lstrcat( szUserInfo, L":" );
|
|
lstrcat( szUserInfo, szUsername );
|
|
|
|
wnet_status = MyWNetCachePassword (szNNTP_Resource, (USHORT )lstrlen(szNNTP_Resource), szUserInfo, (USHORT)lstrlen( szUserInfo ), PCE_WWW_BASIC, 0);
|
|
|
|
return( wnet_status == WN_SUCCESS );
|
|
}
|
|
|
|
DWORD SetIEClientInfo(LPINETCLIENTINFO lpClientInfo)
|
|
{
|
|
HKEY hKey;
|
|
DWORD dwRet;
|
|
DWORD dwSize;
|
|
DWORD dwType;
|
|
|
|
dwRet = RegCreateKey(HKEY_CURRENT_USER, cszRegPathIEServices, &hKey);
|
|
if (ERROR_SUCCESS != dwRet)
|
|
{
|
|
return dwRet;
|
|
}
|
|
|
|
dwSize = max(sizeof(cszYes), sizeof(cszNo));
|
|
dwType = REG_SZ;
|
|
RegSetValueEx(
|
|
hKey,
|
|
cszRegValNNTPEnabled,
|
|
0L,
|
|
dwType,
|
|
(LPBYTE)(*lpClientInfo->szNNTPServer ? cszYes : cszNo),
|
|
dwSize);
|
|
|
|
dwSize = max(sizeof(cszYes), sizeof(cszNo));
|
|
dwType = REG_SZ;
|
|
RegSetValueEx(
|
|
hKey,
|
|
cszRegValNNTPUseAuth,
|
|
0L,
|
|
dwType,
|
|
(LPBYTE)((lpClientInfo->dwFlags & INETC_LOGONNEWS) ? cszYes : cszNo),
|
|
dwSize);
|
|
|
|
|
|
dwSize = sizeof(lpClientInfo->szEMailName);
|
|
dwType = REG_SZ;
|
|
RegSetValueEx(
|
|
hKey,
|
|
cszRegValNNTPMailName,
|
|
0L,
|
|
dwType,
|
|
(LPBYTE)lpClientInfo->szEMailName,
|
|
dwSize);
|
|
|
|
dwSize = sizeof(lpClientInfo->szEMailAddress);
|
|
dwType = REG_SZ;
|
|
RegSetValueEx(
|
|
hKey,
|
|
cszRegValNNTPMailAddress,
|
|
0L,
|
|
dwType,
|
|
(LPBYTE)lpClientInfo->szEMailAddress,
|
|
dwSize);
|
|
|
|
|
|
dwSize = sizeof(lpClientInfo->szNNTPServer);
|
|
dwType = REG_SZ;
|
|
RegSetValueEx(
|
|
hKey,
|
|
cszRegValNNTPServer,
|
|
0L,
|
|
dwType,
|
|
(LPBYTE)lpClientInfo->szNNTPServer,
|
|
dwSize);
|
|
|
|
RegCloseKey(hKey);
|
|
|
|
SetAuthInfo(lpClientInfo->szNNTPLogonName, lpClientInfo->szNNTPLogonPassword);
|
|
|
|
return ERROR_SUCCESS;
|
|
}
|