From: Jeffrey Altman Date: Wed, 22 Aug 2007 17:11:07 +0000 (+0000) Subject: DEVEL15-windows-fix-recursion-detection-20070822 X-Git-Tag: openafs-devel-1_5_23~10 X-Git-Url: https://git.michaelhowe.org/gitweb/?a=commitdiff_plain;h=e034f786ec30f5fd51314b69c9a29b6450600742;p=packages%2Fo%2Fopenafs.git DEVEL15-windows-fix-recursion-detection-20070822 handle symlinks to absolute paths (cherry picked from commit 10c60218471b1312f4235135aa2e74cd9687a0a4) --- diff --git a/src/WINNT/afsd/cm_vnodeops.c b/src/WINNT/afsd/cm_vnodeops.c index 6db7a17ce..227973fa6 100644 --- a/src/WINNT/afsd/cm_vnodeops.c +++ b/src/WINNT/afsd/cm_vnodeops.c @@ -1859,8 +1859,10 @@ long cm_NameI(cm_scache_t *rootSCachep, char *pathp, long flags, if (code == 0) { if (!strcmp(component,"..")) fid_count -=2; + else if (!strcmp(component,".")) + fid_count -=1; for ( i=0; ifid, &fids[i]) ) { + if ( !cm_FidCmp(&nscp->fid, &fids[i]) ) { code = CM_ERROR_TOO_MANY_SYMLINKS; cm_ReleaseSCache(nscp); nscp = NULL; @@ -1942,12 +1944,16 @@ long cm_NameI(cm_scache_t *rootSCachep, char *pathp, long flags, code = cm_AssembleLink(tscp, restp, &linkScp, &tempsp, userp, reqp); if (code == 0 && linkScp != NULL) { - for ( i=0; ifid, &fids[i]) ) { - code = CM_ERROR_TOO_MANY_SYMLINKS; - cm_ReleaseSCache(linkScp); - nscp = NULL; - break; + if (linkScp == cm_data.rootSCachep) + fid_count = 0; + else { + for ( i=0; ifid, &fids[i]) ) { + code = CM_ERROR_TOO_MANY_SYMLINKS; + cm_ReleaseSCache(linkScp); + nscp = NULL; + break; + } } } if (i == fid_count && fid_count < MAX_FID_COUNT) {