]> git.ipfire.org Git - thirdparty/dovecot/core.git/commitdiff
fs-posix: Strip trailing "/" from filenames
authorTimo Sirainen <timo.sirainen@dovecot.fi>
Tue, 15 May 2018 14:50:27 +0000 (17:50 +0300)
committerVille Savolainen <ville.savolainen@dovecot.fi>
Fri, 18 May 2018 07:09:13 +0000 (10:09 +0300)
This is mainly because "doveadm fs delete -R" adds it to indicate to the
fs-driver that the whole directory is wanted to be deleted. This change
fixes fs-posix to work with NFS, where otherwise unlink("symlink-to-dir/")
fails with ENOTDIR. Without NFS the same call succeeds.

src/lib-fs/fs-posix.c

index 9f64d895cfdca0099e290aa1f1254c4a5be04333..45207145b1e53cc987c20744aa0015d4452dd460 100644 (file)
@@ -320,6 +320,13 @@ fs_posix_file_init(struct fs *_fs, const char *path,
        struct posix_fs *fs = (struct posix_fs *)_fs;
        struct posix_fs_file *file;
        guid_128_t guid;
+       size_t path_len = strlen(path);
+
+       if (path_len > 0 && path[path_len-1] == '/') {
+               /* deleting "path/" (used e.g. by doveadm fs delete) - strip
+                  out the trailing "/" since it doesn't work well with NFS. */
+               path = t_strndup(path, path_len-1);
+       }
 
        file = i_new(struct posix_fs_file, 1);
        file->file.fs = _fs;