Actions
Tasks #69442
closedTasks #63293: Implement fscrypt in libcephfs and cephfs-fuse
locked symlink displays empty dest when not cached
% Done:
0%
Reviewed:
Affected Versions:
Component(FS):
Labels (FS):
Pull request ID:
Tags (freeform):
Merge Commit:
Fixed In:
Released In:
Upkeep Timestamp:
Description
A symlink in an fscrypt locked dir displays empty dest when not cached.
State:
1. encrypt / unlock directory
2. write symlink in unlocked dir
3. lock directory
4. umount fuse
5. mount fuse
6. list locked dir (symlink dest is empty)
lrwxrwxrwx 1 choffman choffman 46 Jan 7 20:20 HoT0UkmhMMMYZksFpzEHntHlb3D1o7kIrIdY4URRGZo -> ''
dest should not be empty but should look like this (list lock dir from kclient):
lrwxrwxrwx 1 choffman choffman 54 Jan 7 20:20 HoT0UkmhMMMYZksFpzEHntHlb3D1o7kIrIdY4URRGZo -> AAAAAAAAAABFm0NyEY0klvTE1dgphnfE-Qi1rfuVSjSaSvPR6crt-A
Updated by Christopher Hoffman about 1 year ago
- Status changed from New to In Progress
- Assignee set to Christopher Hoffman
Updated by Christopher Hoffman about 1 year ago
- Status changed from In Progress to Resolved
commit d1f228a9bd65890f1535a56271ee1d98f7e71801 (HEAD -> wip-fscrypt)
Author: Christopher Hoffman <choffman@redhat.com>
Date: Wed Jan 8 17:53:25 2025 +0000
client: set symlink dest to proper value
Fixes: https://tracker.ceph.com/issues/69442
Signed-off-by: Christopher Hoffman <choffman@redhat.com>
diff --git a/src/client/Client.cc b/src/client/Client.cc
index d4efe9a5281..47c7d9e613b 100644
--- a/src/client/Client.cc
+++ b/src/client/Client.cc
@@ -7463,6 +7463,8 @@ int Client::_do_lookup(Inode *dir, const string& name, int mask,
ldout(cct, 0) << __FILE__ << ":" << __LINE__ << ": failed to decrypt symlink (r=" << ret << ")" << dendl;
}
inode->symlink_plain = slname;
+ } else {
+ inode->symlink_plain = inode->symlink;
}
}
@@ -8153,7 +8155,7 @@ int Client::_readlink(Inode *in, char *buf, size_t size)
memcpy(buf, dname.c_str(), dname.size());
r = dname.size();
} else {
- memcpy(buf, in->symlink_plain.c_str(), r);
+ memcpy(buf, in->symlink.c_str(), r);
}
return r;
Actions