int MultiServer::wstat(ServerContext& s, const char *path, file_stat_t& fileStat, uint32_t mask) { string subdir; FileServer *server = getServer(s, path, subdir); if (fileStat.fs_rename.length() > 0) { string newname; FileServer *server2 = getServer(s, fileStat.fs_rename.c_str(), newname); if (server2 && server == server2) { fileStat.fs_rename = newname; } else { return -EPERM; } } if (server && !server->readOnly(s)) { return server->wstat(s, subdir.c_str(), fileStat, mask); } // MemoryServer::wstat(s, path, fileStat, mask)); return -EPERM; }
int MultiServer::removeFile(ServerContext& s, const char *path) { string subdir; FileServer *server = getServer(s, path, subdir); if (server && !server->readOnly(s)) { return server->removeFile(s, subdir.c_str()); } return -EPERM; }
int MultiServer::createMlink(ServerContext& s, const char *path, const char *link) { string subdir; FileServer *server = getServer(s, path, subdir); if (server && !server->readOnly(s)) { return server->createMlink(s, subdir.c_str(), link); } return -EPERM; }
int MultiServer::createDir(ServerContext& s, const char *path, uint32_t mode) { string subdir; FileServer *server = getServer(s, path, subdir); if (server && !server->readOnly(s)) { return server->createDir(s, subdir.c_str(), mode); } // MemoryServer::wstat(s, path, fileStat, mask)); return -EPERM; }
int MultiServer::createHlink(ServerContext& s, const char *path, const char *link) { string subdir; FileServer *server = getServer(s, path, subdir); if (link) { string lnk; FileServer *server2 = getServer(s, link, lnk); if (server2 && server == server2) { link = lnk.c_str(); } else { return -EPERM; } } if (server && !server->readOnly(s)) { return server->createHlink(s, subdir.c_str(), link); } return -EPERM; }