opening a vault in read-only always assumes a filename length limit of 220

references #1605
This commit is contained in:
Armin Schrenk
2021-04-12 18:06:09 +02:00
parent 41d2a2c77e
commit b066b4b045

View File

@@ -104,19 +104,27 @@ public class Vault {
if (vaultSettings.usesReadOnlyMode().get()) {
flags.add(FileSystemFlags.READONLY);
}
if (!flags.contains(FileSystemFlags.READONLY) && vaultSettings.filenameLengthLimit().get() == -1) {
int usedFilenameLengthLimit;
var fileSystemCapabilityChecker = new FileSystemCapabilityChecker();
if (flags.contains(FileSystemFlags.READONLY)) {
usedFilenameLengthLimit = Constants.MAX_CIPHERTEXT_NAME_LENGTH;
} else if (vaultSettings.filenameLengthLimit().get() == -1) {
LOG.debug("Determining file name length limitations...");
int limit = new FileSystemCapabilityChecker().determineSupportedFileNameLength(getPath());
vaultSettings.filenameLengthLimit().set(limit);
LOG.info("Storing file name length limit of {}", limit);
usedFilenameLengthLimit = fileSystemCapabilityChecker.determineSupportedFileNameLength(getPath());
vaultSettings.filenameLengthLimit().set(usedFilenameLengthLimit);
LOG.info("Storing file name length limit of {}", usedFilenameLengthLimit);
} else {
usedFilenameLengthLimit = vaultSettings.filenameLengthLimit().get();
}
assert vaultSettings.filenameLengthLimit().get() > 0;
assert usedFilenameLengthLimit > 0;
CryptoFileSystemProperties fsProps = CryptoFileSystemProperties.cryptoFileSystemProperties() //
.withPassphrase(passphrase) //
.withFlags(flags) //
.withMasterkeyFilename(MASTERKEY_FILENAME) //
.withMaxPathLength(vaultSettings.filenameLengthLimit().get() + Constants.MAX_ADDITIONAL_PATH_LENGTH) //
.withMaxNameLength(vaultSettings.filenameLengthLimit().get()) //
.withMaxNameLength(usedFilenameLengthLimit) //
.build();
return CryptoFileSystemProvider.newFileSystem(getPath(), fsProps);
}