From 107d7ace8b83af10c18c84b94851f5105261225f Mon Sep 17 00:00:00 2001 From: Jeffrey Altman Date: Sun, 9 Dec 2012 00:31:58 -0500 Subject: [PATCH] Windows: RDR Dynamic root Freelance only commit 6c708d1415b27bf8f2804f3407e4fbe2f7bf1009 does not restrict the AFS redirector dynamic root detection only to the Freelance volume root directory. This logic should not apply to arbitrary mount point target paths. Change-Id: Iedde41937f602895b1d5922453c93fae4a5bf5d8 Reviewed-on: http://gerrit.openafs.org/8728 Tested-by: BuildBot Reviewed-by: Jeffrey Altman Tested-by: Jeffrey Altman --- src/WINNT/afsrdr/user/RDRFunction.c | 22 +++++++++++++++++----- 1 file changed, 17 insertions(+), 5 deletions(-) diff --git a/src/WINNT/afsrdr/user/RDRFunction.c b/src/WINNT/afsrdr/user/RDRFunction.c index 44276f4c2..56d534ca1 100644 --- a/src/WINNT/afsrdr/user/RDRFunction.c +++ b/src/WINNT/afsrdr/user/RDRFunction.c @@ -1064,13 +1064,24 @@ RDR_EvaluateNodeByName( IN cm_user_t *userp, if ((code == CM_ERROR_NOSUCHPATH || code == CM_ERROR_NOSUCHFILE || code == CM_ERROR_BPLUS_NOMATCH) && dscp == cm_data.rootSCachep) { - StringCchCopyNW(wszName, cbName, _C(CM_PREFIX_VOL), CM_PREFIX_VOL_CCH); if (wcschr(wszName, '%') != NULL || wcschr(wszName, '#') != NULL) { /* * A volume reference: {%,#} -> @vol:{%,#} */ + StringCchCopyNW(wszName, cbName, _C(CM_PREFIX_VOL), CM_PREFIX_VOL_CCH); StringCbCatNW(wszName, cbName, FileName, FileNameLength); - } else { + bVol = TRUE; + + code = cm_EvaluateVolumeReference(wszName, CM_FLAG_CHECKPATH, userp, &req, &scp); + } +#ifdef AFS_FREELANCE_CLIENT + else if (dscp->fid.cell == AFS_FAKE_ROOT_CELL_ID && dscp->fid.volume == AFS_FAKE_ROOT_VOL_ID && + dscp->fid.vnode == 1 && dscp->fid.unique == 1) { + /* + * If this is the Freelance volume root directory then treat unrecognized + * names as cell names and attempt to find the appropriate "root.cell". + */ + StringCchCopyNW(wszName, cbName, _C(CM_PREFIX_VOL), CM_PREFIX_VOL_CCH); if (FileName[0] == L'.') { StringCbCatNW(wszName, cbName, &FileName[1], FileNameLength); StringCbCatNW(wszName, cbName, L"%", sizeof(WCHAR)); @@ -1079,10 +1090,11 @@ RDR_EvaluateNodeByName( IN cm_user_t *userp, StringCbCatNW(wszName, cbName, L"#", sizeof(WCHAR)); } StringCbCatNW(wszName, cbName, L"root.cell", 9 * sizeof(WCHAR)); - } - bVol = TRUE; + bVol = TRUE; - code = cm_EvaluateVolumeReference(wszName, CM_FLAG_CHECKPATH, userp, &req, &scp); + code = cm_EvaluateVolumeReference(wszName, CM_FLAG_CHECKPATH, userp, &req, &scp); + } +#endif } if (code == 0 && scp) { -- 2.39.5