//**************************************************************************** // // 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 "wizard.h" #include "inetcfg.h" extern "C" { #include } #pragma data_seg(".rdata") #define REGSTR_PATH_IE_SERVICES REGSTR_PATH_IEXPLORER TEXT("\\Services") static const TCHAR cszRegPathIEServices[] = REGSTR_PATH_IE_SERVICES; static const TCHAR cszRegValNNTPEnabled[] = TEXT("NNTP_Enabled"); static const TCHAR cszRegValNNTPUseAuth[] = TEXT("NNTP_Use_Auth"); static const TCHAR cszRegValNNTPServer[] = TEXT("NNTP_Server"); static const TCHAR cszRegValNNTPMailName[] = TEXT("NNTP_MailName"); static const TCHAR cszRegValNNTPMailAddress[] = TEXT("NNTP_MailAddr"); static const TCHAR cszYes[] = TEXT("yes"); static const TCHAR cszNo[] = TEXT("no"); #pragma data_seg() #define PCE_WWW_BASIC 0x13 TCHAR szNNTP_Resource[] = TEXT("NNTP"); typedef DWORD (APIENTRY *PFNWNETGETCACHEDPASSWORD)(LPTSTR,WORD,LPTSTR,LPWORD,BYTE); DWORD MyWNetGetCachedPassword(LPTSTR pbResource,WORD cbResource,LPTSTR pbPassword, LPWORD pcbPassword,BYTE nType) { HINSTANCE hInst = NULL; FARPROC fp = NULL; DWORD dwRet = 0; hInst = LoadLibrary(TEXT("MPR.DLL")); if (hInst) { fp = GetProcAddress(hInst,"WNetGetCachedPassword"); if (fp) dwRet = ((PFNWNETGETCACHEDPASSWORD)fp) (pbResource, cbResource, pbPassword, pcbPassword, nType); else dwRet = GetLastError(); FreeLibrary(hInst); hInst = NULL; } else { dwRet = GetLastError(); } return dwRet; } BOOL GetAuthInfo( TCHAR *szUsername, int cbUser, TCHAR *szPassword, int cbPass ) { int wnet_status; TCHAR szUserInfo[256]; WORD cbUserInfo = sizeof(szUserInfo); TCHAR *p; if (cbUser && szUsername) *szUsername = '\0'; if (cbPass && szPassword) *szPassword = '\0'; wnet_status = MyWNetGetCachedPassword (szNNTP_Resource, sizeof(szNNTP_Resource) - 1, szUserInfo, &cbUserInfo, PCE_WWW_BASIC); switch (wnet_status) { case WN_NOT_SUPPORTED: return( FALSE ); // Cache not enabled break; case WN_CANCEL: return( TRUE ); // Cache enabled but no password set break; case WN_SUCCESS: p = _tcschr(szUserInfo,':'); if (p) { *p = 0; lstrcpyn(szUsername, szUserInfo, cbUser - 1); szUserInfo[cbUser - 1] = '\0'; lstrcpyn(szPassword, p+1, cbPass - 1); szPassword[cbPass - 1] = '\0'; } return( TRUE ); break; default: //// XX_Assert((0),("Unexpected Return from WNetGetCachedPassword: %d", wnet_status )); return( FALSE ); } /*NOTREACHED*/ return(FALSE); } typedef DWORD (APIENTRY *PFNWNETCACHEPASSWORD)(LPTSTR,WORD,LPTSTR,WORD,BYTE,UINT); DWORD MyWNetCachePassword( LPTSTR pbResource, WORD cbResource, LPTSTR pbPassword, WORD cbPassword, BYTE nType, UINT fnFlags ) { HINSTANCE hInst = NULL; FARPROC fp = NULL; DWORD dwRet = 0; hInst = LoadLibrary(TEXT("MPR.DLL")); if (hInst) { fp = GetProcAddress(hInst,"WNetCachePassword"); if (fp) dwRet = ((PFNWNETCACHEPASSWORD)fp)(pbResource,cbResource,pbPassword,cbPassword,nType,fnFlags); else dwRet = GetLastError(); FreeLibrary(hInst); hInst = NULL; fp = NULL; } else { dwRet = GetLastError(); } return dwRet; } BOOL SetAuthInfo( TCHAR *szUsername, TCHAR *szPassword) { int wnet_status; TCHAR szUserInfo[256]; WORD cbUserInfo = sizeof(szUserInfo); if (_tcschr(szUsername, ':')) { //// XX_Assert((0),("SetAuthInfo(): Username has ':' in it!: %s", szUsername )); return(FALSE); } lstrcpy( szUserInfo, szUsername ); lstrcat( szUserInfo, TEXT(":") ); lstrcat( szUserInfo, szPassword ); wnet_status = MyWNetCachePassword (szNNTP_Resource, sizeof(szNNTP_Resource) - 1, 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 = *lpClientInfo->szNNTPServer ? sizeof(cszYes) : sizeof(cszNo); dwType = REG_SZ; RegSetValueEx( hKey, cszRegValNNTPEnabled, 0L, dwType, (LPBYTE)(*lpClientInfo->szNNTPServer ? cszYes : cszNo), dwSize); dwSize = (lpClientInfo->dwFlags & INETC_LOGONNEWS) ? 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; }