My file system sematics program presented a few days ago is very useful to verify that a file system can work as a unix home directory,and today I had to extend it a bit. I'm looking into alternatives for home directory access here at the University of Oslo, and one of the options is sshfs. My friend Finn-Arne mentioned a while back that they had used sshfs with Debian Edu, but stopped because of problems. I asked today what the problems where, and he mentioned that sshfs failed to handle umask properly. Trying to detect the problem I wrote this addition to my fs testing script:
mode_t touch_get_mode(const char *name, mode_t mode) { mode_t retval = 0; int fd = open(name, O_RDWR|O_CREAT|O_LARGEFILE, mode); if (-1 != fd) { unlink(name); struct stat statbuf; if (-1 != fstat(fd, &statbuf)) { retval = statbuf.st_mode & 0x1ff; } close(fd); } return retval; } /* Try to detect problem discovered using sshfs */ int test_umask(void) { printf("info: testing umask effect on file creation\n"); mode_t orig_umask = umask(000); mode_t newmode; if (0666 != (newmode = touch_get_mode("foobar", 0666))) { printf(" error: Wrong file mode %o when creating using mode 666 and umask 000\n", newmode); } umask(007); if (0660 != (newmode = touch_get_mode("foobar", 0666))) { printf(" error: Wrong file mode %o when creating using mode 666 and umask 007\n", newmode); } umask (orig_umask); return 0; } int main(int argc, char **argv) { [...] test_umask(); return 0; }
Sure enough. On NFS to a netapp, I get this result:
Testing POSIX/Unix sematics on file system info: testing symlink creation info: testing subdirectory creation info: testing fcntl locking Read-locking 1 byte from 1073741824 Read-locking 510 byte from 1073741826 Unlocking 1 byte from 1073741824 Write-locking 1 byte from 1073741824 Write-locking 510 byte from 1073741826 Unlocking 2 byte from 1073741824 info: testing umask effect on file creation
When mounting the same directory using sshfs, I get this result:
Testing POSIX/Unix sematics on file system info: testing symlink creation info: testing subdirectory creation info: testing fcntl locking Read-locking 1 byte from 1073741824 Read-locking 510 byte from 1073741826 Unlocking 1 byte from 1073741824 Write-locking 1 byte from 1073741824 Write-locking 510 byte from 1073741826 Unlocking 2 byte from 1073741824 info: testing umask effect on file creation error: Wrong file mode 644 when creating using mode 666 and umask 000 error: Wrong file mode 640 when creating using mode 666 and umask 007
So, I can conclude that sshfs is better than smb to a Netapp or a Windows server, but not good enough to be used as a home directory.
Update 2010-08-26: Reported the issue in BTS report #594498
Update 2010-08-27: Michael Gebetsroither report that he found the script so useful that he created a GIT repository and stored it in http://github.com/gebi/fs-test.