summaryrefslogtreecommitdiff
path: root/sys/src
diff options
context:
space:
mode:
authoraiju <devnull@localhost>2017-02-23 23:22:49 +0100
committeraiju <devnull@localhost>2017-02-23 23:22:49 +0100
commit54ec7aed6217f31e8d4f64678ff2260bd1dfaad2 (patch)
treee38ee0cb33882e69b6fce38db93c346f0d30a856 /sys/src
parent04171d24777d5a108df6e90e10fa7c8d0a841479 (diff)
auth/keyfs: support -r flag to mount read-only
Diffstat (limited to 'sys/src')
-rw-r--r--sys/src/cmd/auth/keyfs.c21
1 files changed, 20 insertions, 1 deletions
diff --git a/sys/src/cmd/auth/keyfs.c b/sys/src/cmd/auth/keyfs.c
index c32135df9..efab7e4c0 100644
--- a/sys/src/cmd/auth/keyfs.c
+++ b/sys/src/cmd/auth/keyfs.c
@@ -92,6 +92,7 @@ int nuser;
ulong uniq = 1;
Fcall rhdr, thdr;
int usepass;
+int readonly;
char *warnarg;
uchar mdata[8192 + IOHDRSZ];
int messagesize = sizeof mdata;
@@ -137,7 +138,7 @@ char *(*fcalls[])(Fid*) = {
static void
usage(void)
{
- fprint(2, "usage: %s [-p] [-m mtpt] [-w warn] [keyfile]\n", argv0);
+ fprint(2, "usage: %s [-p] [-r] [-m mtpt] [-w warn] [keyfile]\n", argv0);
exits("usage");
}
@@ -165,6 +166,9 @@ main(int argc, char *argv[])
case 'w':
warnarg = EARGF(usage());
break;
+ case 'r':
+ readonly = 1;
+ break;
default:
usage();
break;
@@ -390,6 +394,8 @@ Create(Fid *f)
if(!f->busy)
return "create of unused fid";
+ if(readonly)
+ return "mounted read-only";
name = rhdr.name;
if(f->user != nil){
return "permission denied";
@@ -531,6 +537,8 @@ Write(Fid *f)
if(!f->busy)
return "permission denied";
+ if(readonly)
+ return "mounted read-only";
n = rhdr.count;
data = rhdr.data;
switch(f->qtype){
@@ -613,6 +621,10 @@ Remove(Fid *f)
{
if(!f->busy)
return "permission denied";
+ if(readonly){
+ Clunk(f);
+ return "mounted read-only";
+ }
if(f->qtype == Qwarnings)
f->user->warnings = 0;
else if(f->qtype == Quser)
@@ -649,6 +661,8 @@ Wstat(Fid *f)
if(!f->busy || f->qtype != Quser)
return "permission denied";
+ if(readonly)
+ return "mounted read-only";
if(rhdr.nstat > sizeof buf)
return "wstat buffer too big";
if(convM2D(rhdr.stat, rhdr.nstat, &d, buf) == 0)
@@ -712,6 +726,11 @@ writeusers(void)
uchar *p, *buf;
ulong expire;
+ if(readonly){
+ fprint(2, "writeusers called while read-only; shouldn't happen\n");
+ return;
+ }
+
/* what format to use */
keydblen = KEYDBLEN;
keydboff = KEYDBOFF;