]> git.apps.os.sepia.ceph.com Git - ceph-ci.git/commitdiff
client: Use enc_name when linking a fscrypt enabled inode
authorChristopher Hoffman <choffman@redhat.com>
Mon, 27 Jan 2025 17:33:25 +0000 (17:33 +0000)
committerChristopher Hoffman <choffman@redhat.com>
Thu, 14 Aug 2025 20:09:47 +0000 (20:09 +0000)
Fixes: https://tracker.ceph.com/issues/64163
Signed-off-by: Christopher Hoffman <choffman@redhat.com>
src/client/Client.cc

index 4a366e561e3029a4dec0cc001be606aace245c51..1f277afdd3de7fa217c7c67ef5fec8aceef855d7 100644 (file)
@@ -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;