BOOL Config_SetSysName (LPCTSTR pszName, ULONG *pStatus) { BOOL rc = TRUE; ULONG status = 0; if (Config_GetServiceState() == SERVICE_RUNNING) { struct { ULONG cbData; TCHAR szData[ PIOCTL_MAXSIZE ]; } InData; memset (&InData, 0x00, sizeof(InData)); USHORT i=0, j=0, len=lstrlen(pszName); if ( len == 0 ) { Message (MB_ICONHAND, GetErrorTitle(), IDS_FAILCONFIG_SYSNAME, TEXT("A sysname must be specified")); return(-1); } while ( pszName[i] ) { if ( !isspace(pszName[i]) ) { InData.szData[j++] = pszName[i]; } else if (InData.szData[j-1] != '\0') { InData.szData[j++] = '\0'; InData.cbData++; } i++; } InData.szData[j++] = '\0'; InData.cbData++; /* one word */ BYTE OutData[ PIOCTL_MAXSIZE ]; memset (OutData, 0x00, sizeof(OutData)); struct ViceIoctl IOInfo; IOInfo.in_size = sizeof(ULONG) + j; IOInfo.in = (char *)&InData; IOInfo.out = (char *)OutData; IOInfo.out_size = PIOCTL_MAXSIZE; if ((status = pioctl (0, VIOC_AFS_SYSNAME, &IOInfo, 1)) != 0) { rc = FALSE; } } if (rc) { Config_WriteGlobalString (TEXT("SysName"), pszName); } if (pStatus && !rc) *pStatus = status; if (!rc) Message (MB_ICONHAND, GetErrorTitle(), IDS_FAILCONFIG_SYSNAME, TEXT("%ld"), status); return rc; }
BOOL HostsTab_OnApply (HWND hDlg) { // Don't try to do anything if we've already failed the apply if (GetWindowLongPtr (hDlg, DWLP_MSGRESULT)) return FALSE; if (!CSDB_WriteFile (&g.Configuration.CellServDB)) return FALSE; // If this is the Control Center applet, we'll have to validate // the cell name too. // if (g.fIsCCenter) { TCHAR szNoCell[ cchRESOURCE ]; GetString (szNoCell, IDS_CELL_UNKNOWN); TCHAR szCell[ cchRESOURCE ]; GetDlgItemText (hDlg, IDC_CELL, szCell, cchRESOURCE); if ((!szCell[0]) || (!lstrcmpi (szNoCell, szCell))) { Message (MB_ICONASTERISK | MB_OK, GetErrorTitle(), IDS_NOCELL_DESC_CC); return FALSE; } char cellname[256], i; /* we pray for all ascii cellnames */ for ( i=0 ; szCell[i] && i < (sizeof(cellname)-1) ; i++ ) cellname[i] = szCell[i]; cellname[i] = '\0'; ULONG code = cm_SearchCellRegistry(1, cellname, NULL, NULL, NULL, NULL); if (code && code != CM_ERROR_FORCE_DNS_LOOKUP && !CSDB_FindCell (&g.Configuration.CellServDB, szCell)) { int ttl; if (cm_SearchCellByDNS(cellname, NULL, &ttl, NULL, NULL)) { Message (MB_ICONASTERISK | MB_OK, GetErrorTitle(), IDS_BADCELL_DESC_CC); return FALSE; } } if (!Config_SetCellName (szCell)) return FALSE; lstrcpy (g.Configuration.szCell, szCell); } return TRUE; }
BOOL Config_SetProbeInt (ULONG csecProbe, ULONG *pStatus) { BOOL rc = TRUE; ULONG status = 0; // TODO: NEED REGISTRY SETTING if (Config_GetServiceState() == SERVICE_RUNNING) { struct chservinfo checkserv; memset (&checkserv, 0x00, sizeof(checkserv)); checkserv.magic = 0x12345678; checkserv.tinterval = csecProbe; BYTE OutData[ PIOCTL_MAXSIZE ]; memset (OutData, 0x00, sizeof(OutData)); struct ViceIoctl IOInfo; IOInfo.in_size = sizeof(checkserv); IOInfo.in = (char *)&checkserv; IOInfo.out = (char *)OutData; IOInfo.out_size = PIOCTL_MAXSIZE; if ((status = pioctl (0, VIOCCKSERV, &IOInfo, 1)) != 0) { rc = FALSE; } } if (pStatus && !rc) *pStatus = status; if (!rc) Message (MB_ICONHAND, GetErrorTitle(), IDS_FAILCONFIG_PROBE, TEXT("%ld"), status); return rc; }
BOOL ServerEdit_OnOK (HWND hDlg) { PCELLDBLINE pLine = (PCELLDBLINE)GetWindowLongPtr (hDlg, DWLP_USER); TCHAR szComment[ cchCELLDBLINE ]; GetDlgItemText (hDlg, IDC_COMMENT, szComment, cchCELLDBLINE); SOCKADDR_IN Addr; if (IsDlgButtonChecked (hDlg, IDC_ADDR_SPECIFIC)) { SA_GetAddr (GetDlgItem (hDlg, IDC_SERVER), &Addr); lstrcpy (szComment, inet_ntoa (*(struct in_addr *)&Addr.sin_addr.s_addr)); } if (!TextToAddr (&Addr, szComment)) { Message (MB_ICONHAND, GetErrorTitle(), IDS_BADLOOKUP_DESC, TEXT("%s"), szComment); return FALSE; } TCHAR szServer[ cchCELLDBLINE ]; lstrcpy (szServer, inet_ntoa (*(struct in_addr *)&Addr.sin_addr.s_addr)); CSDB_FormatLine (pLine->szLine, szServer, NULL, szComment, FALSE); return TRUE; }
void AutoMapEdit_OnOK (HWND hDlg) { PDRIVEMAP pMap = (PDRIVEMAP)GetWindowLongPtr (hDlg, DWLP_USER); int iItem = SendDlgItemMessage (hDlg, IDC_DRIVE, CB_GETCURSEL, 0, 0); int iDrive = SendDlgItemMessage (hDlg, IDC_DRIVE, CB_GETITEMDATA, iItem, 0); pMap->chDrive = chDRIVE_A + iDrive; GetDlgItemText (hDlg, IDC_PATH, pMap->szMapping, MAX_PATH); GetDlgItemText (hDlg, IDC_DESC, pMap->szSubmount, MAX_PATH); pMap->fPersistent = IsDlgButtonChecked (hDlg, IDC_PERSISTENT); if (pMap->szSubmount[0] && !IsValidSubmountName (pMap->szSubmount)) { Message (MB_ICONHAND, GetErrorTitle(), IDS_BADSUB_DESC); return; } if ( (lstrncmpi (pMap->szMapping, cm_slash_mount_root, lstrlen(cm_slash_mount_root))) && (lstrncmpi (pMap->szMapping, cm_back_slash_mount_root, lstrlen(cm_back_slash_mount_root))) ) { Message (MB_ICONHAND, GetErrorTitle(), IDS_BADMAP_DESC); return; } // First get a proper submount if (pMap->szSubmount[0]) { TCHAR szNewSubmount[MAX_PATH]; PathToSubmount (szNewSubmount, pMap->szMapping, pMap->szSubmount, 0); if (lstrcmp(szNewSubmount, pMap->szSubmount) != 0) { Message (MB_OK | MB_ICONASTERISK, GetCautionTitle(), IDS_NEWSUB_DESC); return; } } else { // If no submount was specified, then get a new one if (!PathToSubmount (pMap->szSubmount, pMap->szMapping, 0, 0)) { return; } } EndDialog (hDlg, IDOK); }
void GeneralTab_DoStartStop (HWND hDlg, BOOL fStart, BOOL fRestart) { BOOL fSuccess = FALSE; ULONG error = 0; SC_HANDLE hManager; if ((hManager = OpenSCManager (NULL, NULL, SC_MANAGER_ALL_ACCESS)) != NULL) { SC_HANDLE hService; if ((hService = OpenService (hManager, TEXT("TransarcAFSDaemon"), SERVICE_ALL_ACCESS)) != NULL) { if (fStart) { g.fNeedRestart = FALSE; if (StartService (hService, 0, 0)) TestAndDoMapShare(SERVICE_START_PENDING); fSuccess = TRUE; } else // (!fStart) { SERVICE_STATUS Status; if (ControlService (hService, SERVICE_CONTROL_STOP, &Status)) fSuccess = TRUE; if (g.Configuration.fLogonAuthent) DoUnMapShare(FALSE); } CloseServiceHandle (hService); } CloseServiceHandle (hManager); } if (fSuccess) { l.fWarnIfStopped = fStart; l.fWarnIfNotStopped = !fStart; l.fRestartIfStopped = fRestart && !fStart; l.fStarting = fStart; GeneralTab_OnTimer (hDlg); } else { l.fWarnIfStopped = FALSE; l.fWarnIfNotStopped = FALSE; l.fRestartIfStopped = FALSE; GeneralTab_OnTimer (hDlg); if (!error) error = GetLastError(); Message (MB_OK | MB_ICONHAND, GetErrorTitle(), ((fStart) ? IDS_SERVICE_FAIL_START : IDS_SERVICE_FAIL_STOP), TEXT("%08lX"), error); } }
BOOL GeneralTab_VerifyCell (HWND hDlg, BOOL fComplainIfInvalid, LPCTSTR pszCell) { TCHAR szNoCell[ cchRESOURCE ]; GetString (szNoCell, IDS_CELL_UNKNOWN); TCHAR szCell[ cchRESOURCE ]; if (pszCell) lstrcpy (szCell, pszCell); else GetDlgItemText (hDlg, IDC_CELL, szCell, cchRESOURCE); if ((!szCell[0]) || (!lstrcmpi (szNoCell, szCell))) { if (fComplainIfInvalid) { if (g.fIsWinNT) Message (MB_ICONASTERISK | MB_OK, GetErrorTitle(), IDS_NOCELL_DESC); else Message (MB_ICONASTERISK | MB_OK, GetErrorTitle(), IDS_BADGATEWAY_DESC); } return FALSE; } if (!fIsCellInCellServDB (szCell)) { if (fComplainIfInvalid) { if (g.fIsWinNT) Message (MB_ICONASTERISK | MB_OK, GetErrorTitle(), IDS_BADCELL_DESC); else Message (MB_ICONASTERISK | MB_OK, GetErrorTitle(), IDS_BADGWCELL_DESC, TEXT("%s"), szCell); } return FALSE; } return TRUE; }
BOOL Config_SetServerPrefs (PSERVERPREFS pPrefs, ULONG *pStatus) { BOOL rc = TRUE; ULONG status = 0; if (pPrefs) { size_t cChanged = 0; size_t ii; for (ii = 0; ii < pPrefs->cPrefs; ++ii) { if (pPrefs->aPrefs[ ii ].fChanged) ++cChanged; } if (cChanged) { if (Config_GetServiceState() != SERVICE_RUNNING) { rc = FALSE; status = ERROR_SERVICE_NOT_ACTIVE; } else { size_t cbInDataStorage = sizeof(cm_SSetPref_t) + cChanged * sizeof(cm_SPref_t); PBYTE pInDataStorage; if ((pInDataStorage = (PBYTE)Allocate (cbInDataStorage)) == NULL) { rc = FALSE; status = ERROR_NOT_ENOUGH_MEMORY; } else { memset (pInDataStorage, 0x00, sizeof(cbInDataStorage)); cm_SSetPref_t *pInData = (cm_SSetPref_t*)pInDataStorage; pInData->flags = (pPrefs->fVLServers) ? CM_SPREF_VLONLY : 0; pInData->num_servers = cChanged; size_t iOut = 0; for (ii = 0; ii < pPrefs->cPrefs; ++ii) { if (pPrefs->aPrefs[ ii ].fChanged) { pInData->servers[ iOut ].host.s_addr = pPrefs->aPrefs[ ii ].ipServer; pInData->servers[ iOut ].rank = (unsigned short)pPrefs->aPrefs[ ii ].iRank; iOut++; } } BYTE OutDataStorage[ PIOCTL_MAXSIZE ]; struct ViceIoctl IOInfo; IOInfo.in_size = cbInDataStorage; IOInfo.in = (char *)pInData; IOInfo.out = (char *)OutDataStorage; IOInfo.out_size = PIOCTL_MAXSIZE; if ((status = pioctl (0, VIOC_SETSPREFS, &IOInfo, 1)) != 0) { rc = FALSE; } Free (pInDataStorage); } } } } if (pStatus && !rc) *pStatus = status; if (!rc) Message (MB_ICONHAND, GetErrorTitle(), IDS_FAILCONFIG_PREFS, TEXT("%ld"), status); return rc; }
BOOL Config_SetAuthentFlag (BOOL fFlag, ULONG *pStatus) { ULONG status = 0; BOOL rc = FALSE; HKEY hk; DWORD dwDisp; if ((status = RegCreateKeyEx (HKEY_LOCAL_MACHINE, TEXT("System\\CurrentControlSet\\Control\\NetworkProvider\\Order"), 0, TEXT("container"), 0, KEY_QUERY_VALUE | KEY_SET_VALUE, NULL, &hk, &dwDisp)) == ERROR_SUCCESS) { if (g.fIsWinNT) { TCHAR szOldProviders[ MAX_PATH ] = TEXT(""); TCHAR szNewProviders[ MAX_PATH ] = TEXT(""); DWORD dwSize = sizeof(szOldProviders); RegQueryValueEx (hk, TEXT("ProviderOrder"), NULL, NULL, (PBYTE)szOldProviders, &dwSize); for (LPTSTR pch = szOldProviders; *pch; ) { BOOL fCopy = TRUE; if (!lstrncmpi (pch, TEXT("TransarcAFSDaemon"), lstrlen(TEXT("TransarcAFSDaemon")))) { fCopy = fFlag; fFlag = FALSE; } if (fCopy) { LPTSTR pchOut = &szNewProviders[ lstrlen(szNewProviders) ]; if (szNewProviders[0]) *pchOut++ = TEXT(','); for ( ; *pch && (*pch != TEXT(',')); ) *pchOut++ = *pch++; *pchOut = TEXT('\0'); } for ( ; *pch && (*pch != TEXT(',')); ++pch) ; for ( ; *pch == TEXT(','); ++pch) ; } if (fFlag) { if (szNewProviders[0]) lstrcat (szNewProviders, TEXT(",")); lstrcat (szNewProviders, TEXT("TransarcAFSDaemon")); } if ((status = RegSetValueEx (hk, TEXT("ProviderOrder"), NULL, REG_SZ, (PBYTE)szNewProviders, sizeof(TCHAR)*(1+lstrlen(szNewProviders)))) == ERROR_SUCCESS) rc = TRUE; } else // (!g.fIsWinNT) { TCHAR szLHS[ cchRESOURCE ] = TEXT("TransarcAFSDaemon"); TCHAR szRHS[ cchRESOURCE ] = TEXT(""); if (fFlag) { if ((status = RegSetValueEx (hk, szLHS, NULL, REG_SZ, (PBYTE)szRHS, sizeof(TCHAR)*(lstrlen(szRHS)+1))) == 0) rc = TRUE; } else { RegDeleteValue (hk, szLHS); rc = TRUE; } } RegCloseKey (hk); } if (pStatus && !rc) *pStatus = status; if (!rc) Message (MB_ICONHAND, GetErrorTitle(), IDS_FAILCONFIG_AUTHENT, TEXT("%ld"), status); return rc; }
void GeneralTab_OnRefresh (HWND hDlg, BOOL fRequery) { // If necessary, update any fields in g.Configuration that we care about // if (fRequery) { if (g.fIsWinNT) Config_GetGatewayFlag (&g.Configuration.fBeGateway); else Config_GetGatewayName (g.Configuration.szGateway); Config_GetCellName (g.Configuration.szCell); g.Configuration.fLogonAuthent=RWLogonOption(TRUE,LOGON_OPTION_INTEGRATED); Config_GetTrayIconFlag (&g.Configuration.fShowTrayIcon); if (!g.fIsWinNT) SetDlgItemText (hDlg, IDC_GATEWAY, g.Configuration.szGateway); else CheckDlgButton (hDlg, IDC_GATEWAY, g.Configuration.fBeGateway); SetDlgItemText (hDlg, IDC_CELL, g.Configuration.szCell); CheckDlgButton (hDlg, IDC_LOGON, g.Configuration.fLogonAuthent); CheckDlgButton (hDlg, IDC_TRAYICON, g.Configuration.fShowTrayIcon); } // Update our display of the service's status // DWORD CurrentState = Config_GetServiceState(); BOOL fIfServiceStopped = !(g.fIsWinNT && !g.fIsAdmin); BOOL fIfServiceRunning = fIfServiceStopped && (CurrentState == SERVICE_RUNNING); GeneralTab_ShowCurrentState (hDlg); EnableWindow (GetDlgItem (hDlg, IDC_CELL), fIfServiceStopped && g.fIsWinNT); EnableWindow (GetDlgItem (hDlg, IDC_LOGON), fIfServiceStopped); EnableWindow (GetDlgItem (hDlg, IDC_GATEWAY), fIfServiceStopped); // Update our warning. Note that under WinNT, this tab doesn't have any // controls (other than Start Service) which disable just because the // service isn't running...so don't show that warning in that case. // TCHAR szText[ cchRESOURCE ]; if ((!g.fIsWinNT) && (CurrentState != SERVICE_RUNNING)) { GetString (szText, IDS_WARN_STOPPED); SetDlgItemText (hDlg, IDC_WARN, szText); ShowWindow (GetDlgItem (hDlg, IDC_WARN), SW_SHOW); } else if (g.fIsWinNT && !g.fIsAdmin) { GetString (szText, IDS_WARN_ADMIN); SetDlgItemText (hDlg, IDC_WARN, szText); ShowWindow (GetDlgItem (hDlg, IDC_WARN), SW_SHOW); } else // ((CurrentState == SERVICE_RUNNING) && (g.fIsAdmin)) { ShowWindow (GetDlgItem (hDlg, IDC_WARN), SW_HIDE); } GeneralTab_OnGateway (hDlg); // If the service isn't running/stopped, we may need to complain // if ((CurrentState == SERVICE_RUNNING) && (l.fWarnIfNotStopped)) { Message (MB_ICONHAND, GetErrorTitle(), IDS_SERVICE_FAIL_STOP, TEXT("%08lX"), ERROR_SERVICE_SPECIFIC_ERROR); } else if ((CurrentState == SERVICE_STOPPED) && (l.fWarnIfStopped)) { Message (MB_ICONHAND, GetErrorTitle(), IDS_SERVICE_FAIL_START, TEXT("%08lX"), ERROR_SERVICE_SPECIFIC_ERROR); } if ((CurrentState == SERVICE_RUNNING) || (CurrentState == SERVICE_STOPPED)) { BOOL fRestart = ((CurrentState == SERVICE_STOPPED) && (l.fRestartIfStopped)); l.fWarnIfStopped = FALSE; l.fWarnIfNotStopped = FALSE; l.fRestartIfStopped = FALSE; l.fServiceIsRunning = (CurrentState == SERVICE_RUNNING); if (fRestart) { GeneralTab_DoStartStop (hDlg, TRUE, FALSE); } } }
BOOL GeneralTab_OnApply (HWND hDlg, BOOL fForce, BOOL fComplainIfInvalid) { if (!fForce) { // Don't try to do anything if we've already failed the apply if (GetWindowLongPtr (hDlg, DWLP_MSGRESULT)) return FALSE; } // If the user has changed CellServDB, configuration parameters for // the driver or anything else, we want to commit those changes first. // We *won't* commit server prefs changes yet, because we haven't yet // checked to see if the service is running. // if (!HostsTab_CommitChanges (fForce)) return FALSE; if (!AdvancedTab_CommitChanges (fForce)) return FALSE; if (!GeneralTab_VerifyOK (hDlg, fComplainIfInvalid)) return FALSE; TCHAR szText[ MAX_PATH ]; if (g.fIsWinNT) { GetDlgItemText (hDlg, IDC_CELL, szText, MAX_PATH); if (lstrcmpi (szText, g.Configuration.szCell)) { if (!Config_SetCellName (szText)) return FALSE; lstrcpy (g.Configuration.szCell, szText); } } BOOL fLogonAuthent = IsDlgButtonChecked (hDlg, IDC_LOGON); if (fLogonAuthent != g.Configuration.fLogonAuthent) { SetBitLogonOption(fLogonAuthent,LOGON_OPTION_INTEGRATED); g.Configuration.fLogonAuthent = fLogonAuthent; } Config_SetTrayIconFlag (IsDlgButtonChecked (hDlg, IDC_TRAYICON)); if (g.fIsWinNT) { BOOL fBeGateway = IsDlgButtonChecked (hDlg, IDC_GATEWAY); if (fBeGateway != g.Configuration.fBeGateway) { if (!Config_SetGatewayFlag (fBeGateway)) return FALSE; g.fNeedRestart = TRUE; g.Configuration.fBeGateway = fBeGateway; } } else // (!g.fIsWinNT) { GetDlgItemText (hDlg, IDC_GATEWAY, szText, MAX_PATH); if (lstrcmpi (szText, g.Configuration.szGateway)) { TCHAR szNewCell[ MAX_PATH ]; if (!Config_ContactGateway (szText, szNewCell)) { Message (MB_ICONASTERISK | MB_OK, GetErrorTitle(), IDS_BADGATEWAY_DESC); return FALSE; } if (!GeneralTab_VerifyCell (hDlg, fComplainIfInvalid, szNewCell)) return FALSE; if (!Config_SetGatewayName (szText)) return FALSE; if (!Config_SetCellName (szNewCell)) return FALSE; Config_FixGatewayDrives(); SetDlgItemText (hDlg, IDC_CELL, szNewCell); lstrcpy (g.Configuration.szGateway, szText); lstrcpy (g.Configuration.szCell, szNewCell); GeneralTab_OnGateway (hDlg); } } return TRUE; }