From: Greg Farnum Date: Wed, 3 Aug 2016 05:14:14 +0000 (-0700) Subject: client: pass UserPerm to readlink() X-Git-Tag: v11.0.1~36^2~42 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=a44094721bd83edbbf8fa22ecc93c8c958e82f67;p=ceph.git client: pass UserPerm to readlink() Signed-off-by: Greg Farnum --- diff --git a/src/client/Client.cc b/src/client/Client.cc index 50a5744bb52..7d0466c5704 100644 --- a/src/client/Client.cc +++ b/src/client/Client.cc @@ -6326,7 +6326,7 @@ int Client::symlink(const char *target, const char *relpath) return _symlink(dir.get(), name.c_str(), target, perms); } -int Client::readlink(const char *relpath, char *buf, loff_t size) +int Client::readlink(const char *relpath, char *buf, loff_t size, const UserPerm& perms) { Mutex::Locker lock(client_lock); tout(cct) << "readlink" << std::endl; @@ -6334,7 +6334,7 @@ int Client::readlink(const char *relpath, char *buf, loff_t size) filepath path(relpath); InodeRef in; - int r = path_walk(path, &in, false); + int r = path_walk(path, &in, perms, false); if (r < 0) return r; diff --git a/src/client/Client.h b/src/client/Client.h index 87ad54f984a..1f47b620c46 100644 --- a/src/client/Client.h +++ b/src/client/Client.h @@ -1093,7 +1093,7 @@ public: int rmdir(const char *path); // symlinks - int readlink(const char *path, char *buf, loff_t size); + int readlink(const char *path, char *buf, loff_t size, const UserPerm& perms); int symlink(const char *existing, const char *newname); diff --git a/src/client/SyntheticClient.cc b/src/client/SyntheticClient.cc index f525b95efd8..837d0673710 100644 --- a/src/client/SyntheticClient.cc +++ b/src/client/SyntheticClient.cc @@ -1096,7 +1096,7 @@ int SyntheticClient::play_trace(Trace& t, string& prefix, bool metadata_only) } else if (strcmp(op, "readlink") == 0) { const char *a = t.get_string(buf, p); char buf[100]; - client->readlink(a, buf, 100); + client->readlink(a, buf, 100, perms); } else if (strcmp(op, "lstat") == 0) { struct stat st; const char *a = t.get_string(buf, p); diff --git a/src/libcephfs.cc b/src/libcephfs.cc index 97db35758b3..6d3c0c1f9f1 100644 --- a/src/libcephfs.cc +++ b/src/libcephfs.cc @@ -599,7 +599,8 @@ extern "C" int ceph_readlink(struct ceph_mount_info *cmount, const char *path, { if (!cmount->is_mounted()) return -ENOTCONN; - return cmount->get_client()->readlink(path, buf, size); + UserPerm perms = cmount->get_client()->pick_my_perms(); + return cmount->get_client()->readlink(path, buf, size, perms); } extern "C" int ceph_symlink(struct ceph_mount_info *cmount, const char *existing,