From: Jeffrey Altman Date: Thu, 13 Jan 2005 04:47:37 +0000 (+0000) Subject: windows-fs-wscell-20050112 X-Git-Tag: BP-disconnected~58 X-Git-Url: https://git.openafs.org/?p=openafs.git;a=commitdiff_plain;h=b11e76ce63b6c23265d17d5597342e4aa296f6c0 windows-fs-wscell-20050112 when freelance mode is in use, "fs wscell" will now return "Freelance.Local.Root" --- diff --git a/src/WINNT/afsd/cm_ioctl.c b/src/WINNT/afsd/cm_ioctl.c index b4d145f..b3c47b0 100644 --- a/src/WINNT/afsd/cm_ioctl.c +++ b/src/WINNT/afsd/cm_ioctl.c @@ -89,8 +89,8 @@ void cm_ResetACLCache(cm_user_t *userp) int hash; lock_ObtainWrite(&cm_scacheLock); - for (hash=0; hash < cm_hashTableSize; hash++) { - for (scp=cm_hashTablep[hash]; scp; scp=scp->nextp) { + for (hash=0; hash < cm_data.hashTableSize; hash++) { + for (scp=cm_data.hashTablep[hash]; scp; scp=scp->nextp) { cm_HoldSCacheNoLock(scp); lock_ReleaseWrite(&cm_scacheLock); lock_ObtainMutex(&scp->mx); @@ -179,7 +179,7 @@ long cm_ParseIoctlPath(smb_ioctl_t *ioctlp, cm_user_t *userp, cm_req_t *reqp, shareFound = smb_FindShare(ioctlp->fidp->vcp, ioctlp->uidp, shareName, &sharePath); if ( shareFound ) { /* we found a sharename, therefore use the resulting path */ - code = cm_NameI(cm_rootSCachep, ioctlp->prefix->data, + code = cm_NameI(cm_data.rootSCachep, ioctlp->prefix->data, CM_FLAG_CASEFOLD | CM_FLAG_FOLLOW, userp, sharePath, reqp, &substRootp); free(sharePath); @@ -208,7 +208,7 @@ long cm_ParseIoctlPath(smb_ioctl_t *ioctlp, cm_user_t *userp, cm_req_t *reqp, shareName[i] = 0; /* terminate string */ - code = cm_NameI(cm_rootSCachep, ioctlp->prefix->data, + code = cm_NameI(cm_data.rootSCachep, ioctlp->prefix->data, CM_FLAG_CASEFOLD | CM_FLAG_FOLLOW, userp, shareName, reqp, &substRootp); if (code) @@ -220,7 +220,7 @@ long cm_ParseIoctlPath(smb_ioctl_t *ioctlp, cm_user_t *userp, cm_req_t *reqp, return code; } } else { - code = cm_NameI(cm_rootSCachep, ioctlp->prefix->data, + code = cm_NameI(cm_data.rootSCachep, ioctlp->prefix->data, CM_FLAG_CASEFOLD | CM_FLAG_FOLLOW, userp, ioctlp->tidPathp, reqp, &substRootp); if (code) @@ -347,7 +347,7 @@ long cm_ParseIoctlParent(smb_ioctl_t *ioctlp, cm_user_t *userp, cm_req_t *reqp, shareFound = smb_FindShare(ioctlp->fidp->vcp, ioctlp->uidp, shareName, &sharePath); if ( shareFound ) { /* we found a sharename, therefore use the resulting path */ - code = cm_NameI(cm_rootSCachep, ioctlp->prefix->data, + code = cm_NameI(cm_data.rootSCachep, ioctlp->prefix->data, CM_FLAG_CASEFOLD | CM_FLAG_FOLLOW, userp, sharePath, reqp, &substRootp); free(sharePath); @@ -373,7 +373,7 @@ long cm_ParseIoctlParent(smb_ioctl_t *ioctlp, cm_user_t *userp, cm_req_t *reqp, shareName[i++] = '/'; /* add trailing slash */ shareName[i] = 0; /* terminate string */ - code = cm_NameI(cm_rootSCachep, ioctlp->prefix->data, + code = cm_NameI(cm_data.rootSCachep, ioctlp->prefix->data, CM_FLAG_CASEFOLD | CM_FLAG_FOLLOW, userp, shareName, reqp, &substRootp); if (code) return code; @@ -383,7 +383,7 @@ long cm_ParseIoctlParent(smb_ioctl_t *ioctlp, cm_user_t *userp, cm_req_t *reqp, if (code) return code; } } else { - code = cm_NameI(cm_rootSCachep, ioctlp->prefix->data, + code = cm_NameI(cm_data.rootSCachep, ioctlp->prefix->data, CM_FLAG_CASEFOLD | CM_FLAG_FOLLOW, userp, ioctlp->tidPathp, reqp, &substRootp); if (code) return code; @@ -472,7 +472,7 @@ long cm_IoctlGetFileCellName(struct smb_ioctl *ioctlp, struct cm_user *userp) { cellp = cm_FindCellByID(scp->fid.cell); if (cellp) { - StringCbCopyA(ioctlp->outDatap, 999999, cellp->namep); + StringCbCopyA(ioctlp->outDatap, 999999, cellp->name); ioctlp->outDatap += strlen(ioctlp->outDatap) + 1; code = 0; } @@ -545,8 +545,8 @@ long cm_IoctlFlushVolume(struct smb_ioctl *ioctlp, struct cm_user *userp) cm_ReleaseSCache(scp); lock_ObtainWrite(&cm_scacheLock); - for (i=0; inextp) { + for (i=0; inextp) { if (scp->fid.volume == volume) { cm_HoldSCacheNoLock(scp); lock_ReleaseWrite(&cm_scacheLock); @@ -974,10 +974,10 @@ long cm_IoctlSetCacheSize(struct smb_ioctl *ioctlp, struct cm_user *userp) memcpy(&temp, ioctlp->inDatap, sizeof(temp)); if (temp == 0) - temp = buf_nOrigBuffers; + temp = cm_data.buf_nOrigBuffers; else { /* temp is in 1K units, convert to # of buffers */ - temp = temp / (buf_bufferSize / 1024); + temp = temp / (cm_data.buf_blockSize / 1024); } /* now adjust the cache size */ @@ -1031,12 +1031,12 @@ long cm_IoctlGetCacheParms(struct smb_ioctl *ioctlp, struct cm_user *userp) memset(&parms, 0, sizeof(parms)); /* first we get, in 1K units, the cache size */ - parms.parms[0] = buf_nbuffers * (buf_bufferSize / 1024); + parms.parms[0] = cm_data.buf_nbuffers * (cm_data.buf_blockSize / 1024); /* and then the actual # of buffers in use (not in the free list, I guess, * will be what we do). */ - parms.parms[1] = (buf_nbuffers - buf_CountFreeList()) * (buf_bufferSize / 1024); + parms.parms[1] = (cm_data.buf_nbuffers - buf_CountFreeList()) * (cm_data.buf_blockSize / 1024); memcpy(ioctlp->outDatap, &parms, sizeof(parms)); ioctlp->outDatap += sizeof(parms); @@ -1069,7 +1069,7 @@ long cm_IoctlGetCell(struct smb_ioctl *ioctlp, struct cm_user *userp) } lock_ObtainRead(&cm_cellLock); - for (tcellp = cm_allCellsp; tcellp; tcellp = tcellp->nextp) { + for (tcellp = cm_data.allCellsp; tcellp; tcellp = tcellp->nextp) { if (whichCell == 0) break; whichCell--; } @@ -1097,8 +1097,8 @@ long cm_IoctlGetCell(struct smb_ioctl *ioctlp, struct cm_user *userp) } lock_ReleaseRead(&cm_serverLock); cp = basep + max * sizeof(afs_int32); - StringCbCopyA(cp, 999999, tcellp->namep); - cp += strlen(tcellp->namep)+1; + StringCbCopyA(cp, 999999, tcellp->name); + cp += strlen(tcellp->name)+1; ioctlp->outDatap = cp; } @@ -1126,18 +1126,18 @@ long cm_IoctlNewCell(struct smb_ioctl *ioctlp, struct cm_user *userp) cm_SkipIoctlPath(ioctlp); lock_ObtainWrite(&cm_cellLock); - for (cp = cm_allCellsp; cp; cp=cp->nextp) + for (cp = cm_data.allCellsp; cp; cp=cp->nextp) { long code; /* delete all previous server lists - cm_FreeServerList will ask for write on cm_ServerLock*/ cm_FreeServerList(&cp->vlServersp); cp->vlServersp = NULL; - code = cm_SearchCellFile(cp->namep, cp->namep, cm_AddCellProc, cp); + code = cm_SearchCellFile(cp->name, cp->name, cm_AddCellProc, cp); #ifdef AFS_AFSDB_ENV if (code) { if (cm_dnsEnabled) { int ttl; - code = cm_SearchCellByDNS(cp->namep, cp->namep, &ttl, cm_AddCellProc, cp); + code = cm_SearchCellByDNS(cp->name, cp->name, &ttl, cm_AddCellProc, cp); if ( code == 0 ) { /* got cell from DNS */ cp->flags |= CM_CELLFLAG_DNS; cp->flags &= ~CM_CELLFLAG_VLSERVER_INVALID; @@ -1164,17 +1164,21 @@ long cm_IoctlNewCell(struct smb_ioctl *ioctlp, struct cm_user *userp) long cm_IoctlGetWsCell(smb_ioctl_t *ioctlp, cm_user_t *userp) { - /* if we don't know our default cell, return failure */ - if (cm_rootCellp == NULL) { - return CM_ERROR_NOSUCHCELL; + long code = 0; + + if (cm_freelanceEnabled) { + StringCbCopyA(ioctlp->outDatap, 999999, "Freelance.Local.Root"); + ioctlp->outDatap += strlen(ioctlp->outDatap) +1; + } else if (cm_data.rootCellp) { + /* return the default cellname to the caller */ + StringCbCopyA(ioctlp->outDatap, 999999, cm_data.rootCellp->name); + ioctlp->outDatap += strlen(ioctlp->outDatap) +1; + } else { + /* if we don't know our default cell, return failure */ + code = CM_ERROR_NOSUCHCELL; } - /* return the default cellname to the caller */ - StringCbCopyA(ioctlp->outDatap, 999999, cm_rootCellp->namep); - ioctlp->outDatap += strlen(ioctlp->outDatap) +1; - - /* done: success */ - return 0; + return code; } long cm_IoctlSysName(struct smb_ioctl *ioctlp, struct cm_user *userp) @@ -1477,7 +1481,7 @@ long cm_IoctlCreateMountPoint(struct smb_ioctl *ioctlp, struct cm_user *userp) } #ifdef AFS_FREELANCE_CLIENT - if (cm_freelanceEnabled && dscp == cm_rootSCachep) { + if (cm_freelanceEnabled && dscp == cm_data.rootSCachep) { /* we are adding the mount point to the root dir., so call * the freelance code to do the add. */ osi_Log0(afsd_logp,"IoctlCreateMountPoint within Freelance root dir"); @@ -1526,7 +1530,7 @@ long cm_IoctlSymlink(struct smb_ioctl *ioctlp, struct cm_user *userp) cp = ioctlp->inDatap; /* contents of link */ #ifdef AFS_FREELANCE_CLIENT - if (cm_freelanceEnabled && dscp == cm_rootSCachep) { + if (cm_freelanceEnabled && dscp == cm_data.rootSCachep) { /* we are adding the symlink to the root dir., so call * the freelance code to do the add. */ if (cp[0] == cp[1] && cp[1] == '\\' && @@ -1561,9 +1565,6 @@ long cm_IoctlSymlink(struct smb_ioctl *ioctlp, struct cm_user *userp) return code; } -extern long cm_AssembleLink(cm_scache_t *linkScp, char *pathSuffixp, - cm_scache_t **newRootScpp, cm_space_t **newSpaceBufferp, - cm_user_t *userp, cm_req_t *reqp); long cm_IoctlListlink(struct smb_ioctl *ioctlp, struct cm_user *userp) { @@ -1594,7 +1595,7 @@ long cm_IoctlListlink(struct smb_ioctl *ioctlp, struct cm_user *userp) code = cm_AssembleLink(scp, "", &newRootScp, &spacep, userp, &req); cm_ReleaseSCache(scp); - if (code == 0) { + if (code == 0 || code == CM_ERROR_PATH_NOT_COVERED) { cp = ioctlp->outDatap; if (newRootScp != NULL) { StringCbCopyA(cp, 999999, cm_mountRoot); @@ -1607,6 +1608,7 @@ long cm_IoctlListlink(struct smb_ioctl *ioctlp, struct cm_user *userp) cm_FreeSpace(spacep); if (newRootScp != NULL) cm_ReleaseSCache(newRootScp); + code = 0; } return code; @@ -1655,7 +1657,7 @@ long cm_IoctlDeletelink(struct smb_ioctl *ioctlp, struct cm_user *userp) cp = ioctlp->inDatap; #ifdef AFS_FREELANCE_CLIENT - if (cm_freelanceEnabled && dscp == cm_rootSCachep) { + if (cm_freelanceEnabled && dscp == cm_data.rootSCachep) { /* we are adding the mount point to the root dir., so call * the freelance code to do the add. */ osi_Log0(afsd_logp,"IoctlDeletelink from Freelance root dir"); @@ -1783,7 +1785,7 @@ long cm_IoctlSetToken(struct smb_ioctl *ioctlp, struct cm_user *userp) return CM_ERROR_INVAL; #endif /* !DJGPP */ } else { - cellp = cm_rootCellp; + cellp = cm_data.rootCellp; osi_Log0(smb_logp,"cm_IoctlSetToken - no name specified"); } @@ -1902,7 +1904,7 @@ long cm_IoctlGetTokenIter(struct smb_ioctl *ioctlp, struct cm_user *userp) cp += sizeof(temp); /* cell name */ - StringCbCopyA(cp, 999999, ucellp->cellp->namep); + StringCbCopyA(cp, 999999, ucellp->cellp->name); cp += strlen(cp) + 1; /* user name */ @@ -1936,7 +1938,8 @@ long cm_IoctlGetToken(struct smb_ioctl *ioctlp, struct cm_user *userp) /* cell name is right here */ cellp = cm_GetCell(tp, 0); - if (!cellp) return CM_ERROR_NOSUCHCELL; + if (!cellp) + return CM_ERROR_NOSUCHCELL; tp += strlen(tp) + 1; #ifndef DJGPP @@ -1990,7 +1993,7 @@ long cm_IoctlGetToken(struct smb_ioctl *ioctlp, struct cm_user *userp) cp += sizeof(temp); /* cell name */ - StringCbCopyA(cp, 999999, ucellp->cellp->namep); + StringCbCopyA(cp, 999999, ucellp->cellp->name); cp += strlen(cp) + 1; /* user name */ diff --git a/src/WINNT/afsd/fs.c b/src/WINNT/afsd/fs.c index f33ffb9..b2d7e4f 100644 --- a/src/WINNT/afsd/fs.c +++ b/src/WINNT/afsd/fs.c @@ -2420,7 +2420,7 @@ WhichCellCmd(struct cmd_syndesc *as, char *arock) afs_int32 code; struct cmd_item *ti; int error = 0; - char cell[MAXCELLCHARS]; + char cell[MAXCELLCHARS]=""; SetDotDefault(&as->parms[0].items); for(ti=as->parms[0].items; ti; ti=ti->next) {