From dd5323c4df308028e31eeeb6080efa4dc1d67c89 Mon Sep 17 00:00:00 2001 From: Christopher Hoffman Date: Mon, 27 Jan 2025 17:33:25 +0000 Subject: [PATCH] client: Use enc_name when linking a fscrypt enabled inode Fixes: https://tracker.ceph.com/issues/64163 Signed-off-by: Christopher Hoffman --- src/client/Client.cc | 15 +++++++++++++-- 1 file changed, 13 insertions(+), 2 deletions(-) diff --git a/src/client/Client.cc b/src/client/Client.cc index 4a366e561e3..1f277afdd3d 100644 --- a/src/client/Client.cc +++ b/src/client/Client.cc @@ -1282,8 +1282,19 @@ Dentry *Client::insert_dentry_inode(Dir *dir, const string& dname, LeaseStat *dl } Inode *diri = dir->parent_inode; clear_dir_complete_and_ordered(diri, false); -#warning revisit nullopt here - dn = link(dir, dname, std::nullopt, in, dn); + + auto fscrypt_denc = fscrypt->get_fname_denc(diri->fscrypt_ctx, &diri->fscrypt_key_validator, true); + if (fscrypt_denc) { + string _enc_name; + string _alt_name; + int r = fscrypt_denc->get_encrypted_fname(dname, &_enc_name, &_alt_name); + if (r < 0) { + ldout(cct, 0) << __FILE__ << ":" << __LINE__ << ": failed to encrypt filename" << dendl; + } + dn = link(dir, dname, _enc_name, in, dn); + } else { + dn = link(dir, dname, std::nullopt, in, dn); + } if (old_dentry) { dn->is_renaming = false; -- 2.39.5