//********************************************************************* //* Microsoft Windows ** //* Copyright(c) Microsoft Corp., 1994 ** //********************************************************************* // // TCPCFG.C - Functions to read and set TCP/IP configuration // // HISTORY: // // 11/27/94 jeremys Created. // 96/02/29 markdu Replaced call to RNAGetIPInfo with call to // GetIPInfo in rnacall.c // 96/03/23 markdu Removed Get/ApplyInstanceTcpInfo functions. // 96/03/24 markdu Replaced memset with ZeroMemory for consistency. // 96/03/25 markdu Removed connectoid name parameter from // Get/ApplyGlobalTcpInfo functions since they should not // be setting per-connectoid stuff anymore. // Renamed ApplyGlobalTcpInfo to ClearGlobalTcpInfo, and // changed function to just clear the settings. // Renamed GetGlobalTcpInfo to IsThereGlobalTcpInfo, and // changed function to just get the settings. // 96/04/04 markdu Added pfNeedsRestart to WarnIfServerBound, and // added function RemoveIfServerBound. // 96/04/23 markdu NASH BUG 18748 Initialize reboot variable before // returning. // 96/05/26 markdu Use lpTurnOffFileSharing and lpIsFileSharingTurnedOn. // #include "wizard.h" extern ICFGTURNOFFFILESHARING lpIcfgTurnOffFileSharing; extern ICFGISFILESHARINGTURNEDON lpIcfgIsFileSharingTurnedOn; /******************************************************************* NAME: WarnIfServerBound SYNOPSIS: Checks to see if file server (VSERVER) is bound to TCP/IP instance used for Internet. If so, warns the user and recommends that she let us remove the binding. Removes the binding if user gives go-ahead. ENTRY: hDlg - parent window dwCardFlags - an INSTANCE_xxx flag to specify what card type to check server-TCP/IP bindings for pfNeedsRestart - set to TRUE if we need a restart NOTES: This is important because if we don't unbind server from instances of TCP/IP we install, user could be inadvertently sharing files over the Internet. Calls worker function DetectModifyTCPIPBindings to do work. ********************************************************************/ HRESULT WarnIfServerBound(HWND hDlg,DWORD dwCardFlags,BOOL* pfNeedsRestart) { HRESULT err = ERROR_SUCCESS; // 96/04/23 markdu NASH BUG 18748 Initialize reboot variable before // returning. // Default to no restart. ASSERT(pfNeedsRestart); *pfNeedsRestart = FALSE; // this function may get called more than once (to guarantee we // call it regardless of how pages are navigated), set a flag // so we don't warn user more than once static BOOL fWarned = FALSE; if (fWarned) { return ERROR_SUCCESS; } // check to see if file server is bound to TCP/IP instance used // to connect to the internet BOOL fSharingOn; HRESULT hr = lpIcfgIsFileSharingTurnedOn(INSTANCE_PPPDRIVER, &fSharingOn); // // 5/12/97 jmazner Olympus #3442 IE #30886 // TEMP TODO at the moment, icfgnt doesn't implement FileSharingTurnedOn // Until it does, assume that on NT file sharing is always off. // if( IsNT() ) { DEBUGMSG("Ignoring return code from IcfgIsFileSharingTurnedOn"); fSharingOn = FALSE; } if ((ERROR_SUCCESS == hr) && (TRUE == fSharingOn)) { // if so, warn the user and ask if we should remove it BUFFER Msg(MAX_RES_LEN+1); // allocate buffer for part of message ASSERT(Msg); if (!Msg) { return ERROR_NOT_ENOUGH_MEMORY; // out of memory } // message is long and takes 2 strings, so load the 2nd resource and // use it as an insertable parameter into the first string LoadSz(IDS_WARN_SERVER_BOUND1,Msg.QueryPtr(),Msg.QuerySize()); if (MsgBoxParam(hDlg,IDS_WARN_SERVER_BOUND,MB_ICONEXCLAMATION,MB_YESNO, Msg.QueryPtr()) == IDYES) { // remove the binding err = lpIcfgTurnOffFileSharing(dwCardFlags, hDlg); ASSERT(err == ERROR_SUCCESS); if (ERROR_SUCCESS == err) { // We need to restart. *pfNeedsRestart = TRUE; } } } fWarned = TRUE; return err; } /******************************************************************* NAME: RemoveIfServerBound SYNOPSIS: Checks to see if file server (VSERVER) is bound to TCP/IP instance used for Internet. If so, informs the user that we cannot continue unless we remove the binding. Removes the binding if user gives go-ahead. ENTRY: hDlg - parent window dwCardFlags - an INSTANCE_xxx flag to specify what card type to check server-TCP/IP bindings for pfNeedsRestart - set to TRUE if we need a restart NOTES: This is important because if we don't unbind server from instances of TCP/IP we install, user could be inadvertently sharing files over the Internet. Calls worker function DetectModifyTCPIPBindings to do work. ********************************************************************/ HRESULT RemoveIfServerBound(HWND hDlg,DWORD dwCardFlags,BOOL* pfNeedsRestart) { HRESULT err = ERROR_SUCCESS; // Default to no restart. ASSERT(pfNeedsRestart); *pfNeedsRestart = FALSE; // check to see if file server is bound to TCP/IP instance used // to connect to the internet BOOL fSharingOn; HRESULT hr = lpIcfgIsFileSharingTurnedOn(INSTANCE_PPPDRIVER, &fSharingOn); if ((ERROR_SUCCESS == hr) && (TRUE == fSharingOn)) { // if so, warn the user and ask if we should remove it BUFFER Msg(MAX_RES_LEN+1); // allocate buffer for part of message ASSERT(Msg); if (!Msg) { return ERROR_NOT_ENOUGH_MEMORY; // out of memory } // message is long and takes 2 strings, so load the 2nd resource and // use it as an insertable parameter into the first string LoadSz(IDS_REMOVE_SERVER_BOUND1,Msg.QueryPtr(),Msg.QuerySize()); if (MsgBoxParam(hDlg,IDS_REMOVE_SERVER_BOUND,MB_ICONEXCLAMATION,MB_OKCANCEL, Msg.QueryPtr()) == IDOK) { // remove the binding err = lpIcfgTurnOffFileSharing(dwCardFlags, hDlg); ASSERT(err == ERROR_SUCCESS); if (ERROR_SUCCESS == err) { // We need to restart. *pfNeedsRestart = TRUE; } } else { // user cancelled. err = ERROR_CANCELLED; } } return err; } #define FIELD_LEN 3 #define NUM_FIELDS 4 /******************************************************************* NAME: IPStrToLong SYNOPSIS: Translates a text string to a numeric IPADDRESS ENTRY: pszAddress - text string with ip address pipAddress - IPADDRESS to translate into EXIT: TRUE if successful, FALSE if the string is invalid NOTES: borrowed from net setup TCP/IP UI ********************************************************************/ BOOL IPStrToLong(LPCTSTR pszAddress,IPADDRESS * pipAddress) { LPTSTR pch = (LPTSTR) pszAddress; TCHAR szField[FIELD_LEN+1]; int nFields = 0; int nFieldLen = 0; BYTE nFieldVal[NUM_FIELDS]; BOOL fContinue = TRUE; ASSERT(pszAddress); ASSERT(pipAddress); *pipAddress = (IPADDRESS) 0; // retrieve the numeric value for each of the four fields while (fContinue) { if (!(*pch)) fContinue = FALSE; if (*pch == '.' || !*pch) { if (nFields >= NUM_FIELDS) return FALSE; // invalid pszAddress *(szField+nFieldLen) = '\0'; // null-terminate UINT uFieldVal = (UINT) myatoi(szField); // convert string to int if (uFieldVal > 255) return FALSE; // field is > 255, invalid nFieldVal[nFields] = (BYTE) uFieldVal; nFields++; nFieldLen = 0; pch++; } else { if (! ((*pch >= '0') && (*pch <= '9')) ) return FALSE; // non-numeric character, invalid pszAddress *(szField + nFieldLen) = *pch; nFieldLen++; pch++; if (nFieldLen > FIELD_LEN) return FALSE; // invalid pszAddress } } if (nFields < NUM_FIELDS) return FALSE; // invalid szAddress // build an address from the fields *pipAddress = (IPADDRESS)MAKEIPADDRESS(nFieldVal[0],nFieldVal[1],nFieldVal[2], nFieldVal[3]); return TRUE; } /******************************************************************* NAME: IPLongToStr SYNOPSIS: Translates a single numeric IP address to a text string ENTRY: ipAddress - numeric IP address to translate from pszAddress - buffer for translated string cbAddress - size of pszAddress buffer EXIT: TRUE if successful, FALSE if the buffer is too short NOTES: borrowed from net setup TCP/IP UI ********************************************************************/ BOOL IPLongToStr(IPADDRESS ipAddress,LPTSTR pszAddress,UINT cbAddress) { ASSERT(pszAddress); if (cbAddress < IP_ADDRESS_LEN + 1) return FALSE; wsprintf(pszAddress,TEXT("%u.%u.%u.%u"), (BYTE) (ipAddress>>24),(BYTE) (ipAddress>>16), (BYTE) (ipAddress>>8), (BYTE) ipAddress); return TRUE; }