From f262980acc1eabbf63e3c5d33ae1c39202537ad2 Mon Sep 17 00:00:00 2001 From: Armin Schrenk Date: Tue, 13 Feb 2024 16:37:46 +0100 Subject: [PATCH 1/4] closes #3272 --- src/main/java/org/cryptomator/common/mount/Mounter.java | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/src/main/java/org/cryptomator/common/mount/Mounter.java b/src/main/java/org/cryptomator/common/mount/Mounter.java index b63a12b1f..8a0538d71 100644 --- a/src/main/java/org/cryptomator/common/mount/Mounter.java +++ b/src/main/java/org/cryptomator/common/mount/Mounter.java @@ -115,7 +115,12 @@ public class Mounter { Files.createDirectories(defaultMountPointBase); builder.setMountpoint(defaultMountPointBase); } else if (canMountToDir) { - var mountPoint = defaultMountPointBase.resolve(vaultSettings.mountName.get()); + var dirName = vaultSettings.mountName.get(); + //required for https://github.com/cryptomator/cryptomator/issues/3272 + if(service.getClass().getCanonicalName().equals("org.cryptomator.frontend.fuse.mount.MacFuseMountProvider")) { + dirName = vaultSettings.id; + } + var mountPoint = defaultMountPointBase.resolve(dirName); Files.createDirectories(mountPoint); builder.setMountpoint(mountPoint); } From 19a954e677ce27d9afb0694c72c1f28097d3db15 Mon Sep 17 00:00:00 2001 From: Armin Schrenk Date: Wed, 14 Feb 2024 10:05:56 +0100 Subject: [PATCH 2/4] use correct mountProvider --- src/main/java/org/cryptomator/common/mount/Mounter.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/org/cryptomator/common/mount/Mounter.java b/src/main/java/org/cryptomator/common/mount/Mounter.java index 8a0538d71..fe551f2c1 100644 --- a/src/main/java/org/cryptomator/common/mount/Mounter.java +++ b/src/main/java/org/cryptomator/common/mount/Mounter.java @@ -117,7 +117,7 @@ public class Mounter { } else if (canMountToDir) { var dirName = vaultSettings.mountName.get(); //required for https://github.com/cryptomator/cryptomator/issues/3272 - if(service.getClass().getCanonicalName().equals("org.cryptomator.frontend.fuse.mount.MacFuseMountProvider")) { + if(service.getClass().getCanonicalName().equals("org.cryptomator.frontend.fuse.mount.FuseTMountProvider")) { dirName = vaultSettings.id; } var mountPoint = defaultMountPointBase.resolve(dirName); From 62f6865d3ee395de2c40596861203014e58ebcd0 Mon Sep 17 00:00:00 2001 From: Armin Schrenk Date: Wed, 14 Feb 2024 10:30:51 +0100 Subject: [PATCH 3/4] cleanup created directories after mount fails silently --- .../org/cryptomator/common/mount/Mounter.java | 15 ++++++++++++++- 1 file changed, 14 insertions(+), 1 deletion(-) diff --git a/src/main/java/org/cryptomator/common/mount/Mounter.java b/src/main/java/org/cryptomator/common/mount/Mounter.java index fe551f2c1..d53a9a240 100644 --- a/src/main/java/org/cryptomator/common/mount/Mounter.java +++ b/src/main/java/org/cryptomator/common/mount/Mounter.java @@ -7,6 +7,8 @@ import org.cryptomator.integrations.mount.Mount; import org.cryptomator.integrations.mount.MountBuilder; import org.cryptomator.integrations.mount.MountFailedException; import org.cryptomator.integrations.mount.MountService; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; import javax.inject.Inject; import javax.inject.Named; @@ -28,6 +30,8 @@ import static org.cryptomator.integrations.mount.MountCapability.UNMOUNT_FORCED; @Singleton public class Mounter { + private static final Logger LOG = LoggerFactory.getLogger(Mounter.class); + // mount providers (key) can not be used if any of the conflicting mount providers (values) are already in use private static final Map> CONFLICTING_MOUNT_SERVICES = Map.of( "org.cryptomator.frontend.fuse.mount.MacFuseMountProvider", Set.of("org.cryptomator.frontend.fuse.mount.FuseTMountProvider"), @@ -121,7 +125,8 @@ public class Mounter { dirName = vaultSettings.id; } var mountPoint = defaultMountPointBase.resolve(dirName); - Files.createDirectories(mountPoint); + var toDelete = Files.createDirectories(mountPoint); + cleanup = () -> removeCreatedDirectory(toDelete); builder.setMountpoint(mountPoint); } } else { @@ -159,6 +164,14 @@ public class Mounter { } + private void removeCreatedDirectory(Path toDelete) { + try { + Files.delete(toDelete); + } catch (IOException e) { + LOG.warn("Unable to remove {} after unmount: {}.", toDelete, e.getMessage()); + } + } + public MountHandle mount(VaultSettings vaultSettings, Path cryptoFsRoot) throws IOException, MountFailedException { var mountService = mountProviders.stream().filter(s -> s.getClass().getName().equals(vaultSettings.mountService.getValue())).findFirst().orElse(defaultMountService.getValue()); From c82a0bfaf351dffeebf8510cde117c3e65974495 Mon Sep 17 00:00:00 2001 From: Armin Schrenk Date: Fri, 16 Feb 2024 17:09:05 +0100 Subject: [PATCH 4/4] cleanup --- src/main/java/org/cryptomator/common/mount/Mounter.java | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) diff --git a/src/main/java/org/cryptomator/common/mount/Mounter.java b/src/main/java/org/cryptomator/common/mount/Mounter.java index d53a9a240..2b50e3cef 100644 --- a/src/main/java/org/cryptomator/common/mount/Mounter.java +++ b/src/main/java/org/cryptomator/common/mount/Mounter.java @@ -125,8 +125,8 @@ public class Mounter { dirName = vaultSettings.id; } var mountPoint = defaultMountPointBase.resolve(dirName); - var toDelete = Files.createDirectories(mountPoint); - cleanup = () -> removeCreatedDirectory(toDelete); + Files.createDirectories(mountPoint); + cleanup = () -> removeCreatedDirectory(mountPoint); builder.setMountpoint(mountPoint); } } else { @@ -137,9 +137,7 @@ public class Mounter { } } else if (canMountToParent && !canMountToDir) { MountWithinParentUtil.prepareParentNoMountPoint(userChosenMountPoint); - cleanup = () -> { - MountWithinParentUtil.cleanup(userChosenMountPoint); - }; + cleanup = () -> MountWithinParentUtil.cleanup(userChosenMountPoint); } try { builder.setMountpoint(userChosenMountPoint);