1 <!DOCTYPE html PUBLIC 
"-//W3C//DTD XHTML 1.0 Strict//EN" 
   2           "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> 
   3 <html xmlns=
"http://www.w3.org/1999/xhtml" dir=
"ltr"> 
   5     <meta http-equiv=
"Content-Type" content=
"text/html;charset=utf-8" /> 
   6     <title>Petter Reinholdtsen: Broken umask handling with sshfs
</title> 
   7     <link rel=
"stylesheet" type=
"text/css" media=
"screen" href=
"http://people.skolelinux.org/pere/blog/style.css" /> 
   8     <link rel=
"stylesheet" type=
"text/css" media=
"screen" href=
"http://people.skolelinux.org/pere/blog/vim.css" /> 
  15      <a href=
"http://people.skolelinux.org/pere/blog/">Petter Reinholdtsen
</a> 
  23       <div class=
"title">Broken umask handling with sshfs
</div> 
  24       <div class=
"date">26th August 
2010</div> 
  25       <div class=
"body"><p>My file system sematics program
 
  26 <a href=
"http://people.skolelinux.org/pere/blog/Testing_if_a_file_system_can_be_used_for_home_directories___.html">presented
 
  27 a few days ago
</a> is very useful to verify that a file system can
 
  28 work as a unix home directory,and today I had to extend it a bit.  I'm
 
  29 looking into alternatives for home directory access here at the
 
  30 University of Oslo, and one of the options is sshfs.  My friend
 
  31 Finn-Arne mentioned a while back that they had used sshfs with Debian
 
  32 Edu, but stopped because of problems.  I asked today what the problems
 
  33 where, and he mentioned that sshfs failed to handle umask properly.
 
  34 Trying to detect the problem I wrote this addition to my fs testing
 
  38 mode_t touch_get_mode(const char *name, mode_t mode) {
 
  40   int fd = open(name, O_RDWR|O_CREAT|O_LARGEFILE, mode);
 
  44     if (-
1 != fstat(fd, &statbuf)) {
 
  45       retval = statbuf.st_mode & 
0x1ff;
 
  52 /* Try to detect problem discovered using sshfs */
 
  53 int test_umask(void) {
 
  54   printf("info: testing umask effect on file creation\n");
 
  56   mode_t orig_umask = umask(
000);
 
  58   if (
0666 != (newmode = touch_get_mode("foobar", 
0666))) {
 
  59     printf("  error: Wrong file mode %o when creating using mode 
666 and umask 
000\n",
 
  63   if (
0660 != (newmode = touch_get_mode("foobar", 
0666))) {
 
  64     printf("  error: Wrong file mode %o when creating using mode 
666 and umask 
007\n",
 
  72 int main(int argc, char **argv) {
 
  79 <p>Sure enough.  On NFS to a netapp, I get this result:
</p> 
  82 Testing POSIX/Unix sematics on file system
 
  83 info: testing symlink creation
 
  84 info: testing subdirectory creation
 
  85 info: testing fcntl locking
 
  86   Read-locking 
1 byte from 
1073741824 
  87   Read-locking 
510 byte from 
1073741826 
  88   Unlocking 
1 byte from 
1073741824 
  89   Write-locking 
1 byte from 
1073741824 
  90   Write-locking 
510 byte from 
1073741826 
  91   Unlocking 
2 byte from 
1073741824 
  92 info: testing umask effect on file creation
 
  95 <p>When mounting the same directory using sshfs, I get this
 
  99 Testing POSIX/Unix sematics on file system
 
 100 info: testing symlink creation
 
 101 info: testing subdirectory creation
 
 102 info: testing fcntl locking
 
 103   Read-locking 
1 byte from 
1073741824 
 104   Read-locking 
510 byte from 
1073741826 
 105   Unlocking 
1 byte from 
1073741824 
 106   Write-locking 
1 byte from 
1073741824 
 107   Write-locking 
510 byte from 
1073741826 
 108   Unlocking 
2 byte from 
1073741824 
 109 info: testing umask effect on file creation
 
 110   error: Wrong file mode 
644 when creating using mode 
666 and umask 
000 
 111   error: Wrong file mode 
640 when creating using mode 
666 and umask 
007 
 114 <p>So, I can conclude that sshfs is better than smb to a Netapp or a
 
 115 Windows server, but not good enough to be used as a home
 
 118 <p>Update 
2010-
08-
26: Reported the issue in
 
 119 <a href=
"http://bugs.debian.org/594498">BTS report #
594498</a></p> 
 121 <p>Update 
2010-
08-
27: Michael Gebetsroither report that he found the
 
 122 script so useful that he created a GIT repository and stored it in
 
 123 <a href=
"http://github.com/gebi/fs-test">http://github.com/gebi/fs-test
</a>.
</p> 
 126       <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> 
 144 <li><a href=
"http://people.skolelinux.org/pere/blog/archive/2013/01/">January (
11)
</a></li> 
 146 <li><a href=
"http://people.skolelinux.org/pere/blog/archive/2013/02/">February (
9)
</a></li> 
 148 <li><a href=
"http://people.skolelinux.org/pere/blog/archive/2013/03/">March (
9)
</a></li> 
 150 <li><a href=
"http://people.skolelinux.org/pere/blog/archive/2013/04/">April (
6)
</a></li> 
 152 <li><a href=
"http://people.skolelinux.org/pere/blog/archive/2013/05/">May (
9)
</a></li> 
 154 <li><a href=
"http://people.skolelinux.org/pere/blog/archive/2013/06/">June (
10)
</a></li> 
 156 <li><a href=
"http://people.skolelinux.org/pere/blog/archive/2013/07/">July (
7)
</a></li> 
 158 <li><a href=
"http://people.skolelinux.org/pere/blog/archive/2013/08/">August (
3)
</a></li> 
 160 <li><a href=
"http://people.skolelinux.org/pere/blog/archive/2013/09/">September (
2)
</a></li> 
 167 <li><a href=
"http://people.skolelinux.org/pere/blog/archive/2012/01/">January (
7)
</a></li> 
 169 <li><a href=
"http://people.skolelinux.org/pere/blog/archive/2012/02/">February (
10)
</a></li> 
 171 <li><a href=
"http://people.skolelinux.org/pere/blog/archive/2012/03/">March (
17)
</a></li> 
 173 <li><a href=
"http://people.skolelinux.org/pere/blog/archive/2012/04/">April (
12)
</a></li> 
 175 <li><a href=
"http://people.skolelinux.org/pere/blog/archive/2012/05/">May (
12)
</a></li> 
 177 <li><a href=
"http://people.skolelinux.org/pere/blog/archive/2012/06/">June (
20)
</a></li> 
 179 <li><a href=
"http://people.skolelinux.org/pere/blog/archive/2012/07/">July (
17)
</a></li> 
 181 <li><a href=
"http://people.skolelinux.org/pere/blog/archive/2012/08/">August (
6)
</a></li> 
 183 <li><a href=
"http://people.skolelinux.org/pere/blog/archive/2012/09/">September (
9)
</a></li> 
 185 <li><a href=
"http://people.skolelinux.org/pere/blog/archive/2012/10/">October (
17)
</a></li> 
 187 <li><a href=
"http://people.skolelinux.org/pere/blog/archive/2012/11/">November (
10)
</a></li> 
 189 <li><a href=
"http://people.skolelinux.org/pere/blog/archive/2012/12/">December (
7)
</a></li> 
 196 <li><a href=
"http://people.skolelinux.org/pere/blog/archive/2011/01/">January (
16)
</a></li> 
 198 <li><a href=
"http://people.skolelinux.org/pere/blog/archive/2011/02/">February (
6)
</a></li> 
 200 <li><a href=
"http://people.skolelinux.org/pere/blog/archive/2011/03/">March (
6)
</a></li> 
 202 <li><a href=
"http://people.skolelinux.org/pere/blog/archive/2011/04/">April (
7)
</a></li> 
 204 <li><a href=
"http://people.skolelinux.org/pere/blog/archive/2011/05/">May (
3)
</a></li> 
 206 <li><a href=
"http://people.skolelinux.org/pere/blog/archive/2011/06/">June (
2)
</a></li> 
 208 <li><a href=
"http://people.skolelinux.org/pere/blog/archive/2011/07/">July (
7)
</a></li> 
 210 <li><a href=
"http://people.skolelinux.org/pere/blog/archive/2011/08/">August (
6)
</a></li> 
 212 <li><a href=
"http://people.skolelinux.org/pere/blog/archive/2011/09/">September (
4)
</a></li> 
 214 <li><a href=
"http://people.skolelinux.org/pere/blog/archive/2011/10/">October (
2)
</a></li> 
 216 <li><a href=
"http://people.skolelinux.org/pere/blog/archive/2011/11/">November (
3)
</a></li> 
 218 <li><a href=
"http://people.skolelinux.org/pere/blog/archive/2011/12/">December (
1)
</a></li> 
 225 <li><a href=
"http://people.skolelinux.org/pere/blog/archive/2010/01/">January (
2)
</a></li> 
 227 <li><a href=
"http://people.skolelinux.org/pere/blog/archive/2010/02/">February (
1)
</a></li> 
 229 <li><a href=
"http://people.skolelinux.org/pere/blog/archive/2010/03/">March (
3)
</a></li> 
 231 <li><a href=
"http://people.skolelinux.org/pere/blog/archive/2010/04/">April (
3)
</a></li> 
 233 <li><a href=
"http://people.skolelinux.org/pere/blog/archive/2010/05/">May (
9)
</a></li> 
 235 <li><a href=
"http://people.skolelinux.org/pere/blog/archive/2010/06/">June (
14)
</a></li> 
 237 <li><a href=
"http://people.skolelinux.org/pere/blog/archive/2010/07/">July (
12)
</a></li> 
 239 <li><a href=
"http://people.skolelinux.org/pere/blog/archive/2010/08/">August (
13)
</a></li> 
 241 <li><a href=
"http://people.skolelinux.org/pere/blog/archive/2010/09/">September (
7)
</a></li> 
 243 <li><a href=
"http://people.skolelinux.org/pere/blog/archive/2010/10/">October (
9)
</a></li> 
 245 <li><a href=
"http://people.skolelinux.org/pere/blog/archive/2010/11/">November (
13)
</a></li> 
 247 <li><a href=
"http://people.skolelinux.org/pere/blog/archive/2010/12/">December (
12)
</a></li> 
 254 <li><a href=
"http://people.skolelinux.org/pere/blog/archive/2009/01/">January (
8)
</a></li> 
 256 <li><a href=
"http://people.skolelinux.org/pere/blog/archive/2009/02/">February (
8)
</a></li> 
 258 <li><a href=
"http://people.skolelinux.org/pere/blog/archive/2009/03/">March (
12)
</a></li> 
 260 <li><a href=
"http://people.skolelinux.org/pere/blog/archive/2009/04/">April (
10)
</a></li> 
 262 <li><a href=
"http://people.skolelinux.org/pere/blog/archive/2009/05/">May (
9)
</a></li> 
 264 <li><a href=
"http://people.skolelinux.org/pere/blog/archive/2009/06/">June (
3)
</a></li> 
 266 <li><a href=
"http://people.skolelinux.org/pere/blog/archive/2009/07/">July (
4)
</a></li> 
 268 <li><a href=
"http://people.skolelinux.org/pere/blog/archive/2009/08/">August (
3)
</a></li> 
 270 <li><a href=
"http://people.skolelinux.org/pere/blog/archive/2009/09/">September (
1)
</a></li> 
 272 <li><a href=
"http://people.skolelinux.org/pere/blog/archive/2009/10/">October (
2)
</a></li> 
 274 <li><a href=
"http://people.skolelinux.org/pere/blog/archive/2009/11/">November (
3)
</a></li> 
 276 <li><a href=
"http://people.skolelinux.org/pere/blog/archive/2009/12/">December (
3)
</a></li> 
 283 <li><a href=
"http://people.skolelinux.org/pere/blog/archive/2008/11/">November (
5)
</a></li> 
 285 <li><a href=
"http://people.skolelinux.org/pere/blog/archive/2008/12/">December (
7)
</a></li> 
 296  <li><a href=
"http://people.skolelinux.org/pere/blog/tags/3d-printer">3d-printer (
13)
</a></li> 
 298  <li><a href=
"http://people.skolelinux.org/pere/blog/tags/amiga">amiga (
1)
</a></li> 
 300  <li><a href=
"http://people.skolelinux.org/pere/blog/tags/aros">aros (
1)
</a></li> 
 302  <li><a href=
"http://people.skolelinux.org/pere/blog/tags/bankid">bankid (
4)
</a></li> 
 304  <li><a href=
"http://people.skolelinux.org/pere/blog/tags/bitcoin">bitcoin (
7)
</a></li> 
 306  <li><a href=
"http://people.skolelinux.org/pere/blog/tags/bootsystem">bootsystem (
12)
</a></li> 
 308  <li><a href=
"http://people.skolelinux.org/pere/blog/tags/bsa">bsa (
2)
</a></li> 
 310  <li><a href=
"http://people.skolelinux.org/pere/blog/tags/debian">debian (
85)
</a></li> 
 312  <li><a href=
"http://people.skolelinux.org/pere/blog/tags/debian edu">debian edu (
139)
</a></li> 
 314  <li><a href=
"http://people.skolelinux.org/pere/blog/tags/digistan">digistan (
10)
</a></li> 
 316  <li><a href=
"http://people.skolelinux.org/pere/blog/tags/docbook">docbook (
10)
</a></li> 
 318  <li><a href=
"http://people.skolelinux.org/pere/blog/tags/drivstoffpriser">drivstoffpriser (
4)
</a></li> 
 320  <li><a href=
"http://people.skolelinux.org/pere/blog/tags/english">english (
214)
</a></li> 
 322  <li><a href=
"http://people.skolelinux.org/pere/blog/tags/fiksgatami">fiksgatami (
21)
</a></li> 
 324  <li><a href=
"http://people.skolelinux.org/pere/blog/tags/fildeling">fildeling (
12)
</a></li> 
 326  <li><a href=
"http://people.skolelinux.org/pere/blog/tags/freeculture">freeculture (
12)
</a></li> 
 328  <li><a href=
"http://people.skolelinux.org/pere/blog/tags/freedombox">freedombox (
1)
</a></li> 
 330  <li><a href=
"http://people.skolelinux.org/pere/blog/tags/frikanalen">frikanalen (
11)
</a></li> 
 332  <li><a href=
"http://people.skolelinux.org/pere/blog/tags/intervju">intervju (
37)
</a></li> 
 334  <li><a href=
"http://people.skolelinux.org/pere/blog/tags/isenkram">isenkram (
7)
</a></li> 
 336  <li><a href=
"http://people.skolelinux.org/pere/blog/tags/kart">kart (
18)
</a></li> 
 338  <li><a href=
"http://people.skolelinux.org/pere/blog/tags/ldap">ldap (
8)
</a></li> 
 340  <li><a href=
"http://people.skolelinux.org/pere/blog/tags/lenker">lenker (
6)
</a></li> 
 342  <li><a href=
"http://people.skolelinux.org/pere/blog/tags/ltsp">ltsp (
1)
</a></li> 
 344  <li><a href=
"http://people.skolelinux.org/pere/blog/tags/multimedia">multimedia (
25)
</a></li> 
 346  <li><a href=
"http://people.skolelinux.org/pere/blog/tags/norsk">norsk (
235)
</a></li> 
 348  <li><a href=
"http://people.skolelinux.org/pere/blog/tags/nuug">nuug (
153)
</a></li> 
 350  <li><a href=
"http://people.skolelinux.org/pere/blog/tags/offentlig innsyn">offentlig innsyn (
8)
</a></li> 
 352  <li><a href=
"http://people.skolelinux.org/pere/blog/tags/open311">open311 (
2)
</a></li> 
 354  <li><a href=
"http://people.skolelinux.org/pere/blog/tags/opphavsrett">opphavsrett (
44)
</a></li> 
 356  <li><a href=
"http://people.skolelinux.org/pere/blog/tags/personvern">personvern (
66)
</a></li> 
 358  <li><a href=
"http://people.skolelinux.org/pere/blog/tags/raid">raid (
1)
</a></li> 
 360  <li><a href=
"http://people.skolelinux.org/pere/blog/tags/reprap">reprap (
11)
</a></li> 
 362  <li><a href=
"http://people.skolelinux.org/pere/blog/tags/rfid">rfid (
2)
</a></li> 
 364  <li><a href=
"http://people.skolelinux.org/pere/blog/tags/robot">robot (
7)
</a></li> 
 366  <li><a href=
"http://people.skolelinux.org/pere/blog/tags/rss">rss (
1)
</a></li> 
 368  <li><a href=
"http://people.skolelinux.org/pere/blog/tags/ruter">ruter (
4)
</a></li> 
 370  <li><a href=
"http://people.skolelinux.org/pere/blog/tags/scraperwiki">scraperwiki (
2)
</a></li> 
 372  <li><a href=
"http://people.skolelinux.org/pere/blog/tags/sikkerhet">sikkerhet (
30)
</a></li> 
 374  <li><a href=
"http://people.skolelinux.org/pere/blog/tags/sitesummary">sitesummary (
4)
</a></li> 
 376  <li><a href=
"http://people.skolelinux.org/pere/blog/tags/skepsis">skepsis (
4)
</a></li> 
 378  <li><a href=
"http://people.skolelinux.org/pere/blog/tags/standard">standard (
43)
</a></li> 
 380  <li><a href=
"http://people.skolelinux.org/pere/blog/tags/stavekontroll">stavekontroll (
3)
</a></li> 
 382  <li><a href=
"http://people.skolelinux.org/pere/blog/tags/stortinget">stortinget (
8)
</a></li> 
 384  <li><a href=
"http://people.skolelinux.org/pere/blog/tags/surveillance">surveillance (
17)
</a></li> 
 386  <li><a href=
"http://people.skolelinux.org/pere/blog/tags/sysadmin">sysadmin (
1)
</a></li> 
 388  <li><a href=
"http://people.skolelinux.org/pere/blog/tags/valg">valg (
8)
</a></li> 
 390  <li><a href=
"http://people.skolelinux.org/pere/blog/tags/video">video (
38)
</a></li> 
 392  <li><a href=
"http://people.skolelinux.org/pere/blog/tags/vitenskap">vitenskap (
4)
</a></li> 
 394  <li><a href=
"http://people.skolelinux.org/pere/blog/tags/web">web (
27)
</a></li> 
 400     <p style=
"text-align: right"> 
 401  Created by 
<a href=
"http://steve.org.uk/Software/chronicle">Chronicle v4.6
</a>