From: Jeffrey Altman Date: Fri, 28 Dec 2007 07:11:59 +0000 (+0000) Subject: windows-cell-aliases-20071228 X-Git-Tag: BP-openafs-windows-kdfs-ifs~260 X-Git-Url: https://git.michaelhowe.org/gitweb/?a=commitdiff_plain;h=d942d97ed82b9f4b86fdea8443912ec64b28dd96;p=packages%2Fo%2Fopenafs.git windows-cell-aliases-20071228 LICENSE MIT Fix the lookup of cell aliases to: 1. avoid re-reading CellServDB each time a cell alias is specified 2. avoid reconstructing the vlserver list for the cell each time an alias is specified 3. permit aliases to be used when AFSDB records were used previously with the full cell name --- diff --git a/src/WINNT/afsd/cm_cell.c b/src/WINNT/afsd/cm_cell.c index 3904b1528..d8ab12d71 100644 --- a/src/WINNT/afsd/cm_cell.c +++ b/src/WINNT/afsd/cm_cell.c @@ -28,7 +28,7 @@ osi_rwlock_t cm_cellLock; * * At the present time the return value is ignored by the caller. */ -long cm_AddCellProc(void *rockp, struct sockaddr_in *addrp, char *namep) +long cm_AddCellProc(void *rockp, struct sockaddr_in *addrp, char *hostnamep) { cm_server_t *tsp; cm_serverRef_t *tsrp; @@ -42,8 +42,10 @@ long cm_AddCellProc(void *rockp, struct sockaddr_in *addrp, char *namep) if ( !tsp->cellp ) tsp->cellp = cellp; else if (tsp->cellp != cellp) { - osi_Log2(afsd_logp, "found a vlserver associated with two cell names %s and %s", - osi_LogSaveString(afsd_logp,tsp->cellp->name), osi_LogSaveString(afsd_logp,cellp->name)); + osi_Log3(afsd_logp, "found a vlserver %s associated with two cells named %s and %s", + osi_LogSaveString(afsd_logp,hostnamep), + osi_LogSaveString(afsd_logp,tsp->cellp->name), + osi_LogSaveString(afsd_logp,cellp->name)); } } else @@ -144,8 +146,18 @@ cm_cell_t *cm_GetCell_Gen(char *namep, char *newnamep, afs_uint32 flags) strcpy(fullname, cp->name); break; } - } - lock_ReleaseRead(&cm_cellLock); + } + + if (!cp) { + for (cp = cm_data.allCellsp; cp; cp=cp->allNextp) { + if (strnicmp(namep, cp->name, strlen(namep)) == 0) { + strcpy(fullname, cp->name); + break; + } + } + } + + lock_ReleaseRead(&cm_cellLock); if (cp) { cm_UpdateCell(cp); @@ -163,6 +175,16 @@ cm_cell_t *cm_GetCell_Gen(char *namep, char *newnamep, afs_uint32 flags) } } + if (cp) + goto done; + + for (cp = cm_data.allCellsp; cp; cp=cp->allNextp) { + if (strnicmp(namep, cp->name, strlen(namep)) == 0) { + strcpy(fullname, cp->name); + break; + } + } + if (cp) goto done;