diff options
author | kvik <kvik@a-b.xyz> | 2020-08-01 15:27:28 +0200 |
---|---|---|
committer | kvik <kvik@a-b.xyz> | 2020-08-01 15:27:28 +0200 |
commit | e5894dcceaedeaf7d4f5537dd306170b1b6d4814 (patch) | |
tree | 1cc00acf23373f15f69218ba1ccbb372a9cb3899 /sys/src/cmd/exportfs/exportsrv.c | |
parent | 88a468f205af2bfdaa015a5bc33424ae0d56de08 (diff) |
pre-lib9p servers: fix incorrect Tversion handling
version(5) says:
If the server does not understand the client's version
string, it should respond with an Rversion message (not
Rerror) with the version string the 7 characters
``unknown''.
Pre-lib9p file servers -- all except cwfs(4) -- do return Rerror.
lib9p(2) follows the above spec, although ignoring the next part
concerning comparison after period-stripping. It assumes an
Fcall.version starting with "9P" is correctly formed and returns
the only supported version of the protocol, which seems alright.
This patch brings pre-lib9p servers in accordance with the spec.
Diffstat (limited to 'sys/src/cmd/exportfs/exportsrv.c')
-rw-r--r-- | sys/src/cmd/exportfs/exportsrv.c | 10 |
1 files changed, 3 insertions, 7 deletions
diff --git a/sys/src/cmd/exportfs/exportsrv.c b/sys/src/cmd/exportfs/exportsrv.c index e5be53017..a413ed0dc 100644 --- a/sys/src/cmd/exportfs/exportsrv.c +++ b/sys/src/cmd/exportfs/exportsrv.c @@ -15,7 +15,6 @@ char Exmnt[] = "Cannot .. past mount point"; char Emip[] = "Mount in progress"; char Enopsmt[] = "Out of pseudo mount points"; char Enomem[] = "No memory"; -char Eversion[] = "Bad 9P2000 version"; char Ereadonly[] = "File system read only"; char Enoprocs[] = "Out of processes"; @@ -35,13 +34,10 @@ Xversion(Fsrpc *t) if(t->work.msize > messagesize) t->work.msize = messagesize; messagesize = t->work.msize; - if(strncmp(t->work.version, "9P2000", 6) != 0){ - reply(&t->work, &rhdr, Eversion); - putsbuf(t); - return; - } - rhdr.version = "9P2000"; rhdr.msize = t->work.msize; + rhdr.version = "9P2000"; + if(strncmp(t->work.version, "9P", 2) != 0) + rhdr.version = "unknown"; reply(&t->work, &rhdr, 0); putsbuf(t); } |