# HG changeset patch # User Timo Sirainen # Date 1526395827 -10800 # Node ID 1d2167636cc64cff83a3e47f6821e877b6dc3050 # Parent fc76e26789881a7770f8c2bcaea622a2683cc4e4 fs-posix: Strip trailing "/" from filenames 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. diff -r fc76e2678988 -r 1d2167636cc6 src/lib-fs/fs-posix.c --- a/src/lib-fs/fs-posix.c Thu May 03 18:33:25 2018 +0300 +++ b/src/lib-fs/fs-posix.c Tue May 15 17:50:27 2018 +0300 @@ -320,6 +320,13 @@ 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;