From: Jeffrey Altman Date: Fri, 28 Dec 2007 07:13:15 +0000 (+0000) Subject: DEVEL15-windows-cell-aliases-20071228 X-Git-Tag: openafs-devel-1_5_29~6 X-Git-Url: https://git.michaelhowe.org/gitweb/?a=commitdiff_plain;h=3f8a21aaf8235f2c209003cc1ef96a44886a2950;p=packages%2Fo%2Fopenafs.git DEVEL15-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 (cherry picked from commit d942d97ed82b9f4b86fdea8443912ec64b28dd96) --- diff --git a/src/WINNT/afsd/cm_cell.c b/src/WINNT/afsd/cm_cell.c index 57b4503b5..b3d3c4077 100644 --- a/src/WINNT/afsd/cm_cell.c +++ b/src/WINNT/afsd/cm_cell.c @@ -30,7 +30,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; @@ -44,8 +44,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 @@ -146,8 +148,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); @@ -165,6 +177,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;