]> git.michaelhowe.org Git - packages/o/openafs.git/commitdiff
windows-fs-newcell-20080130
authorJeffrey Altman <jaltman@secure-endpoints.com>
Thu, 31 Jan 2008 05:47:34 +0000 (05:47 +0000)
committerJeffrey Altman <jaltman@secure-endpoints.com>
Thu, 31 Jan 2008 05:47:34 +0000 (05:47 +0000)
LICENSE MIT

prevent the afs client service from crashing when fs newcell is executed

src/WINNT/afsd/cm_cell.c
src/WINNT/afsd/cm_cell.h
src/WINNT/afsd/cm_ioctl.c

index 8d5e3da801067c76ed44bc0aa0e17d5db0850035..19820d3a497c395879e5c56cd01a4e2eab038a37 100644 (file)
@@ -28,11 +28,6 @@ osi_rwlock_t cm_cellLock;
  *
  * At the present time the return value is ignored by the caller.
  */
-typedef struct cm_cell_rock {
-    cm_cell_t * cellp;
-    afs_uint32  flags;
-} cm_cell_rock_t;
-
 long cm_AddCellProc(void *rockp, struct sockaddr_in *addrp, char *hostnamep)
 {
     cm_server_t *tsp;
index 20f6c42316400e5f4104aca55ec8c89fc63fd872..2471ea265436ff5298f4d129ee35e3238c9a283f 100644 (file)
@@ -36,6 +36,12 @@ typedef struct cm_cell {
 #define CM_CELLFLAG_IN_NAMEHASH        0x10
 #define CM_CELLFLAG_IN_IDHASH          0x20
 
+typedef struct cm_cell_rock {
+    cm_cell_t * cellp;
+    afs_uint32  flags;
+} cm_cell_rock_t;
+
+
 #define CM_CELL_NAME_HASH(name)  (SDBMHash(name) % cm_data.cellHashTableSize)
 
 #define CM_CELL_ID_HASH(id)   ((unsigned long) id % cm_data.cellHashTableSize)
@@ -64,4 +70,6 @@ extern void cm_AddCellToNameHashTable(cm_cell_t * cellp);
 
 extern void cm_AddCellToIDHashTable(cm_cell_t * cellp);
 
+extern long cm_AddCellProc(void *rockp, struct sockaddr_in *addrp, char *namep);
+
 #endif /* __CELL_H_ENV_ */
index 993caa8178720efcaaaff04f9efd2e93711ca5f4..f7e3669f2c35a7bd66e41ecfd7cab69a995cc917 100644 (file)
@@ -1574,8 +1574,6 @@ long cm_IoctlGetCell(struct smb_ioctl *ioctlp, struct cm_user *userp)
         return CM_ERROR_NOMORETOKENS;  /* mapped to EDOM */
 }
 
-extern long cm_AddCellProc(void *rockp, struct sockaddr_in *addrp, char *namep);
-
 long cm_IoctlNewCell(struct smb_ioctl *ioctlp, struct cm_user *userp)
 {
     /* NT cache manager will read cell information from CellServDB each time
@@ -1588,6 +1586,8 @@ long cm_IoctlNewCell(struct smb_ioctl *ioctlp, struct cm_user *userp)
      */  
   
     cm_cell_t *cp;
+    cm_cell_rock_t rock;
+
   
     cm_SkipIoctlPath(ioctlp);
     lock_ObtainWrite(&cm_cellLock);
@@ -1599,12 +1599,14 @@ long cm_IoctlNewCell(struct smb_ioctl *ioctlp, struct cm_user *userp)
         /* delete all previous server lists - cm_FreeServerList will ask for write on cm_ServerLock*/
         cm_FreeServerList(&cp->vlServersp, CM_FREESERVERLIST_DELETE);
         cp->vlServersp = NULL;
-        code = cm_SearchCellFile(cp->name, cp->name, cm_AddCellProc, cp);
+        rock.cellp = cp;
+        rock.flags = 0;
+        code = cm_SearchCellFile(cp->name, cp->name, cm_AddCellProc, &rock);
 #ifdef AFS_AFSDB_ENV
         if (code) {
             if (cm_dnsEnabled) {
                 int ttl;
-                code = cm_SearchCellByDNS(cp->name, cp->name, &ttl, cm_AddCellProc, cp);
+                code = cm_SearchCellByDNS(cp->name, cp->name, &ttl, cm_AddCellProc, &rock);
                 if ( code == 0 ) { /* got cell from DNS */
                     cp->flags |= CM_CELLFLAG_DNS;
                     cp->flags &= ~CM_CELLFLAG_VLSERVER_INVALID;