DEVEL15-windows-client-config-cell-search-registry-20090616
authorJeffrey Altman <jaltman@secure-endpoints.com>
Fri, 19 Jun 2009 04:15:52 +0000 (04:15 +0000)
committerJeffrey Altman <jaltman@secure-endpoints.com>
Fri, 19 Jun 2009 04:15:52 +0000 (04:15 +0000)
LICENSE MIT

Add registry based cell search functionality to afs_config.exe
even though the tool is close to useless at this point.

(cherry picked from commit 377b8c176fde2cab27d27c644b6966bf153daad5)

src/WINNT/client_config/tab_general.cpp
src/WINNT/client_config/tab_hosts.cpp

index b4caf2f..a8ee1dc 100644 (file)
@@ -10,6 +10,7 @@
 extern "C" {
 #include <afs/param.h>
 #include <afs/stds.h>
+#include <afs/cm.h>
 #include <rx/rxkad.h>
 #include <afs/cm_config.h>
 }
@@ -659,8 +660,19 @@ BOOL fIsCellInCellServDB (LPCTSTR pszCell)
 {
    BOOL fFound = FALSE;
    CELLSERVDB CellServDB;
-
-   if (CSDB_ReadFile (&CellServDB, NULL))
+   char cellname[256], i;
+
+   /* we pray for all ascii cellnames */
+   for ( i=0 ; pszCell[i] && i < (sizeof(cellname)-1) ; i++ )
+       cellname[i] = pszCell[i];
+   cellname[i] = '\0';
+
+   ULONG code = cm_SearchCellRegistry(1, cellname, NULL, NULL, NULL, NULL);
+   if (code == 0)
+      fFound = TRUE;
+   if (!fFound && 
+       (code != CM_ERROR_FORCE_DNS_LOOKUP) && 
+       CSDB_ReadFile (&CellServDB, NULL))
    {
        if (CSDB_FindCell (&CellServDB, pszCell))
            fFound = TRUE;
@@ -669,16 +681,11 @@ BOOL fIsCellInCellServDB (LPCTSTR pszCell)
 #ifdef AFS_AFSDB_ENV
     if ( fFound == FALSE ) {
         int ttl;
-        char cellname[128], i;
-
-        /* we pray for all ascii cellnames */
-        for ( i=0 ; pszCell[i] && i < (sizeof(cellname)-1) ; i++ )
-            cellname[i] = pszCell[i];
-        cellname[i] = '\0';
-
         fFound = !cm_SearchCellByDNS(cellname, NULL, &ttl, NULL, NULL);
     }
 #endif
+     done:
+
    return fFound;
 }
 
index 54faea7..b907712 100644 (file)
@@ -10,6 +10,7 @@
 extern "C" {
 #include <afs/param.h>
 #include <afs/stds.h>
+#include <afs/cm.h>
 #include <afs/cm_config.h>
 }
 
@@ -180,17 +181,20 @@ BOOL HostsTab_OnApply (HWND hDlg)
          return FALSE;
          }
 
-      if (!CSDB_FindCell (&g.Configuration.CellServDB, szCell))
+      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))
          {
 #ifdef AFS_AFSDB_ENV
              int ttl;
-             char cellname[128], i;
-
-             /* we pray for all ascii cellnames */
-             for ( i=0 ; szCell[i] && i < (sizeof(cellname)-1) ; i++ )
-                 cellname[i] = szCell[i];
-             cellname[i] = '\0';
-
              if (cm_SearchCellByDNS(cellname, NULL, &ttl, NULL, NULL))
 #endif
              {