]> git.michaelhowe.org Git - packages/o/openafs.git/commitdiff
Windows: Modify afscreds.exe and afs_config.exe to be UAC compatible
authorJeffrey Altman <jaltman@secure-endpoints.com>
Thu, 15 Oct 2009 03:43:46 +0000 (23:43 -0400)
committerJeffrey Altman <jaltman|account-1000011@unknown>
Wed, 21 Oct 2009 17:50:58 +0000 (10:50 -0700)
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 <jaltman@openafs.org>
Reviewed-by: Jeffrey Altman <jaltman@openafs.org>
src/WINNT/client_config/main.cpp
src/WINNT/client_creds/NTMakefile
src/WINNT/client_creds/window.cpp

index 13d3a6c3228b241191a7a78334bdde33e4625ffc..d5441d2bb5a2c511d253453161ce17e483b070d1 100644 (file)
@@ -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);
index f68046e3051a3f40811b6ac152ad6e6e3af64a41..ce1017e6813617a127cbc285febd6c5a16d370b4 100644 (file)
@@ -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
index 29027d94acca414d5f5b136e516c39b57a2d5f1e..a345c28c2c7ab816942c62ec2fadd25700a3468d 100644 (file)
@@ -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.
       //