1 <!DOCTYPE html PUBLIC 
"-//W3C//DTD XHTML 1.0 Strict//EN" 
   2         "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> 
   5   <title>Petter Reinholdtsen: Broken umask handling with sshfs
</title> 
   6   <link rel=
"stylesheet" type=
"text/css" media=
"screen" href=
"http://people.skolelinux.org/pere/blog/style.css"> 
  12        <a href=
"http://people.skolelinux.org/pere/blog/">Petter Reinholdtsen
</a> 
  20   <div class=
"title">Broken umask handling with sshfs
</div> 
  21   <div class=
"date">2010-
08-
26 13:
30</div> 
  23 <p>My file system sematics program
 
  24 <a href=
"http://people.skolelinux.org/pere/blog/Testing_if_a_file_system_can_be_used_for_home_directories___.html">presented
 
  25 a few days ago
</a> is very useful to verify that a file system can
 
  26 work as a unix home directory,and today I had to extend it a bit.  I'm
 
  27 looking into alternatives for home directory access here at the
 
  28 University of Oslo, and one of the options is sshfs.  My friend
 
  29 Finn-Arne mentioned a while back that they had used sshfs with Debian
 
  30 Edu, but stopped because of problems.  I asked today what the problems
 
  31 where, and he mentioned that sshfs failed to handle umask properly.
 
  32 Trying to detect the problem I wrote this addition to my fs testing
 
  36 mode_t touch_get_mode(const char *name, mode_t mode) {
 
  38   int fd = open(name, O_RDWR|O_CREAT|O_LARGEFILE, mode);
 
  42     if (-
1 != fstat(fd, &statbuf)) {
 
  43       retval = statbuf.st_mode & 
0x1ff;
 
  50 /* Try to detect problem discovered using sshfs */
 
  51 int test_umask(void) {
 
  52   printf("info: testing umask effect on file creation\n");
 
  54   mode_t orig_umask = umask(
000);
 
  56   if (
0666 != (newmode = touch_get_mode("foobar", 
0666))) {
 
  57     printf("  error: Wrong file mode %o when creating using mode 
666 and umask 
000\n",
 
  61   if (
0660 != (newmode = touch_get_mode("foobar", 
0666))) {
 
  62     printf("  error: Wrong file mode %o when creating using mode 
666 and umask 
007\n",
 
  70 int main(int argc, char **argv) {
 
  77 <p>Sure enough.  On NFS to a netapp, I get this result:
</p> 
  80 Testing POSIX/Unix sematics on file system
 
  81 info: testing symlink creation
 
  82 info: testing subdirectory creation
 
  83 info: testing fcntl locking
 
  84   Read-locking 
1 byte from 
1073741824 
  85   Read-locking 
510 byte from 
1073741826 
  86   Unlocking 
1 byte from 
1073741824 
  87   Write-locking 
1 byte from 
1073741824 
  88   Write-locking 
510 byte from 
1073741826 
  89   Unlocking 
2 byte from 
1073741824 
  90 info: testing umask effect on file creation
 
  93 <p>When mounting the same directory using sshfs, I get this
 
  97 Testing POSIX/Unix sematics on file system
 
  98 info: testing symlink creation
 
  99 info: testing subdirectory creation
 
 100 info: testing fcntl locking
 
 101   Read-locking 
1 byte from 
1073741824 
 102   Read-locking 
510 byte from 
1073741826 
 103   Unlocking 
1 byte from 
1073741824 
 104   Write-locking 
1 byte from 
1073741824 
 105   Write-locking 
510 byte from 
1073741826 
 106   Unlocking 
2 byte from 
1073741824 
 107 info: testing umask effect on file creation
 
 108   error: Wrong file mode 
644 when creating using mode 
666 and umask 
000 
 109   error: Wrong file mode 
640 when creating using mode 
666 and umask 
007 
 112 <p>So, I can conclude that sshfs is better than smb to a Netapp or a
 
 113 Windows server, but not good enough to be used as a home
 
 116 <p>Update 
2010-
08-
26: Reported the issue in
 
 117 <a href=
"http://bugs.debian.org/594498">BTS report #
594498</a></p> 
 119 <p>Update 
2010-
08-
27: Michael Gebetsroither report that he found the
 
 120 script so useful that he created a GIT repository and stored it in
 
 121 <a href=
"http://github.com/gebi/fs-test">http://github.com/gebi/fs-test
</a>.
</p> 
 124   <div class=
"tags">Tags: 
<a href=
"http://people.skolelinux.org/pere/blog/tags/debian edu">debian edu
</a>, 
<a href=
"http://people.skolelinux.org/pere/blog/tags/english">english
</a>, 
<a href=
"http://people.skolelinux.org/pere/blog/tags/nuug">nuug
</a>.
</div> 
 141 <li><a href=
"http://people.skolelinux.org/pere/blog/archive/2010/01/">January (
2)
</a></li> 
 143 <li><a href=
"http://people.skolelinux.org/pere/blog/archive/2010/02/">February (
1)
</a></li> 
 145 <li><a href=
"http://people.skolelinux.org/pere/blog/archive/2010/03/">March (
3)
</a></li> 
 147 <li><a href=
"http://people.skolelinux.org/pere/blog/archive/2010/04/">April (
3)
</a></li> 
 149 <li><a href=
"http://people.skolelinux.org/pere/blog/archive/2010/05/">May (
9)
</a></li> 
 151 <li><a href=
"http://people.skolelinux.org/pere/blog/archive/2010/06/">June (
14)
</a></li> 
 153 <li><a href=
"http://people.skolelinux.org/pere/blog/archive/2010/07/">July (
12)
</a></li> 
 155 <li><a href=
"http://people.skolelinux.org/pere/blog/archive/2010/08/">August (
13)
</a></li> 
 157 <li><a href=
"http://people.skolelinux.org/pere/blog/archive/2010/09/">September (
7)
</a></li> 
 159 <li><a href=
"http://people.skolelinux.org/pere/blog/archive/2010/10/">October (
9)
</a></li> 
 161 <li><a href=
"http://people.skolelinux.org/pere/blog/archive/2010/11/">November (
10)
</a></li> 
 168 <li><a href=
"http://people.skolelinux.org/pere/blog/archive/2009/01/">January (
8)
</a></li> 
 170 <li><a href=
"http://people.skolelinux.org/pere/blog/archive/2009/02/">February (
8)
</a></li> 
 172 <li><a href=
"http://people.skolelinux.org/pere/blog/archive/2009/03/">March (
12)
</a></li> 
 174 <li><a href=
"http://people.skolelinux.org/pere/blog/archive/2009/04/">April (
10)
</a></li> 
 176 <li><a href=
"http://people.skolelinux.org/pere/blog/archive/2009/05/">May (
9)
</a></li> 
 178 <li><a href=
"http://people.skolelinux.org/pere/blog/archive/2009/06/">June (
3)
</a></li> 
 180 <li><a href=
"http://people.skolelinux.org/pere/blog/archive/2009/07/">July (
4)
</a></li> 
 182 <li><a href=
"http://people.skolelinux.org/pere/blog/archive/2009/08/">August (
3)
</a></li> 
 184 <li><a href=
"http://people.skolelinux.org/pere/blog/archive/2009/09/">September (
1)
</a></li> 
 186 <li><a href=
"http://people.skolelinux.org/pere/blog/archive/2009/10/">October (
2)
</a></li> 
 188 <li><a href=
"http://people.skolelinux.org/pere/blog/archive/2009/11/">November (
3)
</a></li> 
 190 <li><a href=
"http://people.skolelinux.org/pere/blog/archive/2009/12/">December (
3)
</a></li> 
 197 <li><a href=
"http://people.skolelinux.org/pere/blog/archive/2008/11/">November (
5)
</a></li> 
 199 <li><a href=
"http://people.skolelinux.org/pere/blog/archive/2008/12/">December (
7)
</a></li> 
 210  <li><a href=
"http://people.skolelinux.org/pere/blog/tags/3d-printer">3d-printer (
12)
</a></li> 
 212  <li><a href=
"http://people.skolelinux.org/pere/blog/tags/amiga">amiga (
1)
</a></li> 
 214  <li><a href=
"http://people.skolelinux.org/pere/blog/tags/aros">aros (
1)
</a></li> 
 216  <li><a href=
"http://people.skolelinux.org/pere/blog/tags/bootsystem">bootsystem (
10)
</a></li> 
 218  <li><a href=
"http://people.skolelinux.org/pere/blog/tags/debian">debian (
42)
</a></li> 
 220  <li><a href=
"http://people.skolelinux.org/pere/blog/tags/debian edu">debian edu (
50)
</a></li> 
 222  <li><a href=
"http://people.skolelinux.org/pere/blog/tags/english">english (
71)
</a></li> 
 224  <li><a href=
"http://people.skolelinux.org/pere/blog/tags/fiksgatami">fiksgatami (
1)
</a></li> 
 226  <li><a href=
"http://people.skolelinux.org/pere/blog/tags/fildeling">fildeling (
11)
</a></li> 
 228  <li><a href=
"http://people.skolelinux.org/pere/blog/tags/kart">kart (
5)
</a></li> 
 230  <li><a href=
"http://people.skolelinux.org/pere/blog/tags/ldap">ldap (
8)
</a></li> 
 232  <li><a href=
"http://people.skolelinux.org/pere/blog/tags/lenker">lenker (
4)
</a></li> 
 234  <li><a href=
"http://people.skolelinux.org/pere/blog/tags/ltsp">ltsp (
1)
</a></li> 
 236  <li><a href=
"http://people.skolelinux.org/pere/blog/tags/multimedia">multimedia (
10)
</a></li> 
 238  <li><a href=
"http://people.skolelinux.org/pere/blog/tags/norsk">norsk (
90)
</a></li> 
 240  <li><a href=
"http://people.skolelinux.org/pere/blog/tags/nuug">nuug (
113)
</a></li> 
 242  <li><a href=
"http://people.skolelinux.org/pere/blog/tags/opphavsrett">opphavsrett (
18)
</a></li> 
 244  <li><a href=
"http://people.skolelinux.org/pere/blog/tags/personvern">personvern (
25)
</a></li> 
 246  <li><a href=
"http://people.skolelinux.org/pere/blog/tags/reprap">reprap (
10)
</a></li> 
 248  <li><a href=
"http://people.skolelinux.org/pere/blog/tags/robot">robot (
4)
</a></li> 
 250  <li><a href=
"http://people.skolelinux.org/pere/blog/tags/rss">rss (
1)
</a></li> 
 252  <li><a href=
"http://people.skolelinux.org/pere/blog/tags/sikkerhet">sikkerhet (
18)
</a></li> 
 254  <li><a href=
"http://people.skolelinux.org/pere/blog/tags/sitesummary">sitesummary (
3)
</a></li> 
 256  <li><a href=
"http://people.skolelinux.org/pere/blog/tags/standard">standard (
16)
</a></li> 
 258  <li><a href=
"http://people.skolelinux.org/pere/blog/tags/stavekontroll">stavekontroll (
1)
</a></li> 
 260  <li><a href=
"http://people.skolelinux.org/pere/blog/tags/video">video (
15)
</a></li> 
 262  <li><a href=
"http://people.skolelinux.org/pere/blog/tags/vitenskap">vitenskap (
1)
</a></li> 
 264  <li><a href=
"http://people.skolelinux.org/pere/blog/tags/web">web (
13)
</a></li>