diff --git a/sys/src/cmd/hjfs/cons.c b/sys/src/cmd/hjfs/cons.c index 1162446ed..688f31378 100644 --- a/sys/src/cmd/hjfs/cons.c +++ b/sys/src/cmd/hjfs/cons.c @@ -148,7 +148,7 @@ cmdcreate(int argc, char **argv) return -1; if(name2uid(fsmain, argv[3], &gid) < 0) return -1; - ch = chanattach(fsmain, 0); + ch = chanattach(fsmain, CHFNOPERM); if(ch == nil) return -1; ch->uid = uid; diff --git a/sys/src/cmd/hjfs/fs2.c b/sys/src/cmd/hjfs/fs2.c index 95b6a1997..fc772a832 100644 --- a/sys/src/cmd/hjfs/fs2.c +++ b/sys/src/cmd/hjfs/fs2.c @@ -132,17 +132,19 @@ chancreat(Chan *ch, char *name, int perm, int mode) werrstr(Enotadir); goto error; } - if((ch->flags & CHFNOPERM) == 0) + if((ch->flags & CHFNOPERM) == 0){ if(!permcheck(ch->fs, d, ch->uid, OWRITE)){ werrstr(Eperm); goto error; } + if(isdir) + perm &= ~0777 | d->mode & 0777; + else + perm &= ~0666 | d->mode & 0666; + } if(newentry(ch->fs, ch->loc, b, name, &f, 0) <= 0) goto error; - if(isdir) - perm &= ~0777 | d->mode & 0777; - else - perm &= ~0666 | d->mode & 0666; + f.type = perm >> 24; if(newqid(ch->fs, &f.path) < 0) goto error;