From 040712a744dd5e021d20987c2e2a98ac0f129b15 Mon Sep 17 00:00:00 2001 From: Jeffrey Altman Date: Wed, 14 Oct 2009 23:43:46 -0400 Subject: [PATCH] Windows: Modify afscreds.exe and afs_config.exe to be UAC compatible afscreds.exe: 1. disable the drive mapping and advanced tabs. 2. on exit, remove the option to stop the service. afs_config.exe: 1. disable the drive mapping tab Removing this functionality by default will address some of the problems while permitting users that wish to continue using these tools to do so. The drive mapping tab can be re-enabled setting the registry value to be non-zero: {HKCU,HKLM}\Software\OpenAFS\Client DWORD "ShowMountTab" LICENSE MIT Reviewed-on: http://gerrit.openafs.org/663 Tested-by: Jeffrey Altman Reviewed-by: Jeffrey Altman --- src/WINNT/client_config/main.cpp | 31 +++++++++++++++- src/WINNT/client_creds/NTMakefile | 2 +- src/WINNT/client_creds/window.cpp | 61 +++++++++++++++++++++++++------ 3 files changed, 80 insertions(+), 14 deletions(-) diff --git a/src/WINNT/client_config/main.cpp b/src/WINNT/client_config/main.cpp index 13d3a6c32..d5441d2bb 100644 --- a/src/WINNT/client_config/main.cpp +++ b/src/WINNT/client_config/main.cpp @@ -42,6 +42,34 @@ GLOBALS g; * */ +static BOOL Main_ShowMountTab(void) +{ + HKEY hk; + BOOL bShow = FALSE; + BOOL bSuccess = FALSE; + + if (RegOpenKeyEx (HKEY_CURRENT_USER, AFSREG_USER_OPENAFS_SUBKEY, 0, + (IsWow64()?KEY_WOW64_64KEY:0)|KEY_QUERY_VALUE, &hk) == 0) + { + DWORD dwSize = sizeof(bShow); + DWORD dwType = REG_DWORD; + bSuccess = (RegQueryValueEx (hk, TEXT("ShowMountTab"), NULL, &dwType, (PBYTE)&bShow, &dwSize) == 0); + RegCloseKey (hk); + } + + if (!bSuccess && + RegOpenKeyEx (HKEY_LOCAL_MACHINE, AFSREG_CLT_OPENAFS_SUBKEY, 0, + (IsWow64()?KEY_WOW64_64KEY:0)|KEY_QUERY_VALUE, &hk) == 0) + { + DWORD dwSize = sizeof(bShow); + DWORD dwType = REG_DWORD; + bSuccess = (RegQueryValueEx (hk, TEXT("ShowMountTab"), NULL, &dwType, (PBYTE)&bShow, &dwSize) == 0); + RegCloseKey (hk); + } + + return bShow; +} + extern "C" int WINAPI WinMain (HINSTANCE hInst, HINSTANCE hPrev, LPSTR pCmdLine, int nCmdShow) { TaLocale_LoadCorrespondingModule (hInst); @@ -105,7 +133,8 @@ extern "C" int WINAPI WinMain (HINSTANCE hInst, HINSTANCE hPrev, LPSTR pCmdLine, { PropSheet_AddTab (g.psh, 0, ((g.fIsWinNT) ? IDD_GENERAL_NT : IDD_GENERAL_95), (DLGPROC)GeneralTab_DlgProc, 0, TRUE); - PropSheet_AddTab (g.psh, 0, ((g.fIsWinNT) ? IDD_DRIVES_NT : IDD_DRIVES_95), (DLGPROC)DrivesTab_DlgProc, 0, TRUE); + if (Main_ShowMountTab()) + PropSheet_AddTab (g.psh, 0, ((g.fIsWinNT) ? IDD_DRIVES_NT : IDD_DRIVES_95), (DLGPROC)DrivesTab_DlgProc, 0, TRUE); if (g.fIsWinNT) PropSheet_AddTab (g.psh, 0, IDD_PREFS_NT, (DLGPROC)PrefsTab_DlgProc, 0, TRUE); diff --git a/src/WINNT/client_creds/NTMakefile b/src/WINNT/client_creds/NTMakefile index f68046e30..ce1017e68 100644 --- a/src/WINNT/client_creds/NTMakefile +++ b/src/WINNT/client_creds/NTMakefile @@ -7,7 +7,7 @@ # include the AFSD source tree on our inclusion path -AFSDEV_AUXCDEFINES = $(AFSDEV_AUXCDEFINES) /D"_AFXDLL" -I..\afsd -I..\client_config -I..\kfw\inc\krb5 +AFSDEV_AUXCDEFINES = $(AFSDEV_AUXCDEFINES) /D"_AFXDLL" -I..\afsd -I..\client_config -I..\kfw\inc\krb5 -DUAC_COMPATIBLE=1 # include the primary makefile RELDIR=WINNT\client_creds diff --git a/src/WINNT/client_creds/window.cpp b/src/WINNT/client_creds/window.cpp index 29027d94a..a345c28c2 100644 --- a/src/WINNT/client_creds/window.cpp +++ b/src/WINNT/client_creds/window.cpp @@ -115,9 +115,12 @@ BOOL CALLBACK Main_DlgProc (HWND hDlg, UINT msg, WPARAM wp, LPARAM lp) break; case M_TERMINATE: +#ifndef UAC_COMPATIBLE if (g.fIsWinNT && IsServiceRunning()) ModalDialog (IDD_TERMINATE, NULL, (DLGPROC)Terminate_DlgProc); - else if (g.fIsWinNT) + else +#endif + if (g.fIsWinNT) ModalDialog (IDD_TERMINATE_SMALL, NULL, (DLGPROC)Terminate_DlgProc); else // (!g.fIsWinNT) ModalDialog (IDD_TERMINATE_SMALL_95, NULL, (DLGPROC)Terminate_DlgProc); @@ -426,22 +429,25 @@ void Main_OnSelectTab (void) void Main_OnCheckTerminate (void) { HKEY hk; + BOOL bSuccess = FALSE; if (RegOpenKeyEx (HKEY_CURRENT_USER, AFSREG_USER_OPENAFS_SUBKEY, 0, - (IsWow64()?KEY_WOW64_64KEY:0)|KEY_QUERY_VALUE, &hk) == 0) + (IsWow64()?KEY_WOW64_64KEY:0)|KEY_QUERY_VALUE, &hk) == 0) { DWORD dwSize = sizeof(g.fStartup); DWORD dwType = REG_DWORD; - RegQueryValueEx (hk, TEXT("ShowTrayIcon"), NULL, &dwType, (PBYTE)&g.fStartup, &dwSize); + bSuccess = (RegQueryValueEx (hk, TEXT("ShowTrayIcon"), NULL, &dwType, (PBYTE)&g.fStartup, &dwSize) == 0); RegCloseKey (hk); } - else if (RegOpenKeyEx (HKEY_LOCAL_MACHINE, AFSREG_CLT_OPENAFS_SUBKEY, 0, - (IsWow64()?KEY_WOW64_64KEY:0)|KEY_QUERY_VALUE, &hk) == 0) + + if (bSuccess && + RegOpenKeyEx (HKEY_LOCAL_MACHINE, AFSREG_CLT_OPENAFS_SUBKEY, 0, + (IsWow64()?KEY_WOW64_64KEY:0)|KEY_QUERY_VALUE, &hk) == 0) { - DWORD dwSize = sizeof(g.fStartup); - DWORD dwType = REG_DWORD; - RegQueryValueEx (hk, TEXT("ShowTrayIcon"), NULL, &dwType, (PBYTE)&g.fStartup, &dwSize); - RegCloseKey (hk); + DWORD dwSize = sizeof(g.fStartup); + DWORD dwType = REG_DWORD; + RegQueryValueEx (hk, TEXT("ShowTrayIcon"), NULL, &dwType, (PBYTE)&g.fStartup, &dwSize); + RegCloseKey (hk); } Shortcut_FixStartup (cszSHORTCUT_NAME, g.fStartup); @@ -484,6 +490,33 @@ HWND Main_CreateTabDialog (HWND hTab, size_t iTab) return hDlg; } +static BOOL Main_ShowMountTab(void) +{ + HKEY hk; + BOOL bShow = FALSE; + BOOL bSuccess = FALSE; + + if (RegOpenKeyEx (HKEY_CURRENT_USER, AFSREG_USER_OPENAFS_SUBKEY, 0, + (IsWow64()?KEY_WOW64_64KEY:0)|KEY_QUERY_VALUE, &hk) == 0) + { + DWORD dwSize = sizeof(bShow); + DWORD dwType = REG_DWORD; + bSuccess = (RegQueryValueEx (hk, TEXT("ShowMountTab"), NULL, &dwType, (PBYTE)&bShow, &dwSize) == 0); + RegCloseKey (hk); + } + + if (!bSuccess && + RegOpenKeyEx (HKEY_LOCAL_MACHINE, AFSREG_CLT_OPENAFS_SUBKEY, 0, + (IsWow64()?KEY_WOW64_64KEY:0)|KEY_QUERY_VALUE, &hk) == 0) + { + DWORD dwSize = sizeof(bShow); + DWORD dwType = REG_DWORD; + bSuccess = (RegQueryValueEx (hk, TEXT("ShowMountTab"), NULL, &dwType, (PBYTE)&bShow, &dwSize) == 0); + RegCloseKey (hk); + } + + return bShow; +} void Main_RepopulateTabs (BOOL fDestroyInvalid) { @@ -564,15 +597,19 @@ void Main_RepopulateTabs (BOOL fDestroyInvalid) } lock_ReleaseMutex(&g.credsLock); - if (REALLOC (aTabs, cTabs, 1+iTabOut, cREALLOC_TABS)) - aTabs[ iTabOut++ ] = dwTABPARAM_MOUNT; + if (Main_ShowMountTab()) + { + if (REALLOC (aTabs, cTabs, 1+iTabOut, cREALLOC_TABS)) + aTabs[ iTabOut++ ] = dwTABPARAM_MOUNT; + } +#ifndef UAC_COMPATIBLE if (g.fIsWinNT) { if (REALLOC (aTabs, cTabs, 1+iTabOut, cREALLOC_TABS)) aTabs[ iTabOut++ ] = dwTABPARAM_ADVANCED; } - +#endif // Now erase the current tabs, and re-add new ones. Remember which tab is // currently selected, so we can try to go back to it later. // -- 2.39.5