if (fscrypt_denc) {
string _enc_name;
string _alt_name;
- int r = fscrypt_denc->get_encrypted_fname(dname, &_enc_name, &_alt_name);
+ int r = fscrypt_denc->get_encrypted_fname(dname, &_enc_name, &_alt_name, false);
if (r < 0) {
ldout(cct, 0) << __FILE__ << ":" << __LINE__ << ": failed to encrypt filename" << dendl;
return r;
alternate_name = std::move(_alt_name);
} else {
/* encrypt wrapped name */
- int r = fscrypt_denc->get_encrypted_fname(alternate_name, &_enc_name, &_alt_name);
+ int r = fscrypt_denc->get_encrypted_fname(alternate_name, &_enc_name, &_alt_name, true);
if (r < 0) {
ldout(cct, 0) << __FILE__ << ":" << __LINE__ << ": failed to encrypt filename" << dendl;
return r;
}
- alternate_name = _alt_name.empty() ? std::move(_enc_name) : std::move(_alt_name);
+ alternate_name = std::move(_alt_name);
}
}
#endif
return padded_size;
}
-int FSCryptFNameDenc::get_encrypted_fname(const std::string& plain, std::string *encrypted, std::string *alt_name)
+int FSCryptFNameDenc::get_encrypted_fname(const std::string& plain, std::string *encrypted, std::string *alt_name, bool force_alt)
{
if (plain == "." || plain == ".." ) {
*encrypted = plain;
memcpy(extra, hash, sizeof(hash));
enc_len = CEPH_NOHASH_NAME_MAX + sizeof(hash);
} else {
- alt_name->clear();
+ if (force_alt) {
+ *alt_name = std::string(enc_name, enc_len);
+ } else {
+ alt_name->clear();
+ }
}
int b64_len = NAME_MAX * 2; // name.size() * 2;
bool setup_cipher() override;
- int get_encrypted_fname(const std::string& plain, std::string *encrypted, std::string *alt_name);
+ int get_encrypted_fname(const std::string& plain, std::string *encrypted, std::string *alt_name, bool force_alt);
int get_decrypted_fname(const std::string& b64enc, const std::string& alt_name, std::string *decrypted);
int get_encrypted_symlink(const std::string& plain, std::string *encrypted);