cm_scache_t *substRootp = NULL;
#endif
char * relativePath = ioctlp->inDatap;
+ afs_uint32 follow = 0;
osi_Log1(afsd_logp, "cm_ParseIoctlPath %s", osi_LogSaveString(afsd_logp,relativePath));
and it returns the correct (full) path. therefore, there is
no drive letter, and the path is absolute. */
code = cm_NameI(cm_data.rootSCachep, relativePath,
- CM_FLAG_CASEFOLD,
+ CM_FLAG_CASEFOLD | follow,
userp, "", reqp, scpp);
if (code) {
return code;
}
- code = cm_NameI(substRootp, p, CM_FLAG_CASEFOLD | CM_FLAG_FOLLOW,
+ code = cm_NameI(substRootp, p, CM_FLAG_CASEFOLD | follow,
userp, NULL, reqp, scpp);
cm_ReleaseSCache(substRootp);
if (code) {
return code;
}
- code = cm_NameI(substRootp, p, CM_FLAG_CASEFOLD | CM_FLAG_FOLLOW,
+ code = cm_NameI(substRootp, p, CM_FLAG_CASEFOLD | follow,
userp, NULL, reqp, scpp);
if (code) {
cm_ReleaseSCache(substRootp);
}
code = cm_NameI(substRootp, relativePath,
- CM_FLAG_CASEFOLD,
+ CM_FLAG_CASEFOLD | follow,
userp, NULL, reqp, scpp);
if (code) {
cm_ReleaseSCache(substRootp);
code = cm_ParseIoctlPath(ioctlp, userp, &req, &scp);
if (code) return code;
- Name = volName;
- OfflineMsg = offLineMsg;
- MOTD = motd;
- do {
- code = cm_ConnFromFID(&scp->fid, userp, &req, &connp);
- if (code) continue;
+#ifdef AFS_FREELANCE_CLIENT
+ if ( scp->fid.cell == AFS_FAKE_ROOT_CELL_ID && scp->fid.volume == AFS_FAKE_ROOT_VOL_ID ) {
+ code = 0;
+ strncpy(volName, "Freelance.Local.Root", sizeof(volName));
+ offLineMsg[0] = '\0';
+ strncpy(motd, "Freelance mode in use.", sizeof(motd));
+ volStat.Vid = scp->fid.volume;
+ volStat.MaxQuota = 0;
+ volStat.BlocksInUse = 100;
+ volStat.PartBlocksAvail = 0;
+ volStat.PartMaxBlocks = 100;
+ } else
+#endif
+ {
+ Name = volName;
+ OfflineMsg = offLineMsg;
+ MOTD = motd;
+ do {
+ code = cm_ConnFromFID(&scp->fid, userp, &req, &connp);
+ if (code) continue;
- callp = cm_GetRxConn(connp);
- code = RXAFS_GetVolumeStatus(callp, scp->fid.volume,
- &volStat, &Name, &OfflineMsg, &MOTD);
- rx_PutConnection(callp);
+ callp = cm_GetRxConn(connp);
+ code = RXAFS_GetVolumeStatus(callp, scp->fid.volume,
+ &volStat, &Name, &OfflineMsg, &MOTD);
+ rx_PutConnection(callp);
- } while (cm_Analyze(connp, userp, &req, &scp->fid, NULL, NULL, NULL, code));
- code = cm_MapRPCError(code, &req);
+ } while (cm_Analyze(connp, userp, &req, &scp->fid, NULL, NULL, NULL, code));
+ code = cm_MapRPCError(code, &req);
+ }
cm_ReleaseSCache(scp);
if (code) return code;
enum volstatus rwNewstate = vl_online;
enum volstatus roNewstate = vl_online;
enum volstatus bkNewstate = vl_online;
+#ifdef AFS_FREELANCE_CLIENT
+ int freelance = 0;
+#endif
/* clear out old bindings */
if (volp->rw.serversp)
cm_FreeServerList(&volp->bk.serversp, CM_FREESERVERLIST_DELETE);
#ifdef AFS_FREELANCE_CLIENT
- if ( cellp->cellID == AFS_FAKE_ROOT_CELL_ID && atoi(volp->namep)==AFS_FAKE_ROOT_VOL_ID )
+ if ( cellp->cellID == AFS_FAKE_ROOT_CELL_ID && volp->rw.ID == AFS_FAKE_ROOT_VOL_ID )
{
+ freelance = 1;
memset(&vldbEntry, 0, sizeof(vldbEntry));
vldbEntry.flags |= VLF_RWEXISTS;
vldbEntry.volumeId[0] = AFS_FAKE_ROOT_VOL_ID;
afs_int32 bkServers_alldown = 1;
char name[VL_MAXNAMELEN];
+#ifdef AFS_FREELANCE_CLIENT
+ if (freelance)
+ rwServers_alldown = 0;
+#endif
+
switch ( method ) {
case 0:
flags = vldbEntry.flags;
/* otherwise, we didn't find it so consult the VLDB */
sprintf(volNameString, "%u", volumeID);
code = cm_GetVolumeByName(cellp, volNameString, userp, reqp,
- flags, outVolpp);
+ flags, outVolpp);
return code;
}