From d942d97ed82b9f4b86fdea8443912ec64b28dd96 Mon Sep 17 00:00:00 2001 From: Jeffrey Altman Date: Fri, 28 Dec 2007 07:11:59 +0000 Subject: [PATCH] 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 --- src/WINNT/afsd/cm_cell.c | 32 +++++++++++++++++++++++++++----- 1 file changed, 27 insertions(+), 5 deletions(-) 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; -- 2.39.5