ref: 40db2561a1b6b9c083f12ba60ebe26e158cb35d6
parent: 2610761a6262e22a70a9becf6726fe4163aa620f
author: cinap_lenrek <cinap_lenrek@centraldogma>
date: Mon Dec 12 07:16:35 EST 2011
cwfs: simplify checkname, allow space character
--- a/sys/src/cmd/cwfs/9p1.c
+++ b/sys/src/cmd/cwfs/9p1.c
@@ -659,15 +659,8 @@
goto out;
}
accessdir(p, d, FREAD, f->uid);
- if(!strncmp(in->name, ".", sizeof(in->name)) ||
- !strncmp(in->name, "..", sizeof(in->name))) {- ou->err = Edot;
+ if(ou->err = checkname(in->name))
goto out;
- }
- if(checkname(in->name)) {- ou->err = Ename;
- goto out;
- }
addr1 = 0;
slot1 = 0; /* set */
for(addr=0;; addr++) {@@ -1393,8 +1386,11 @@
* must have write permission in parent
*/
if (strncmp(d->name, xd.name, sizeof(d->name)) != 0) {- if (checkname(xd.name) || !d1 ||
- strcmp(xd.name, ".") == 0 || strcmp(xd.name, "..") == 0) {+ if(ou->err = checkname(xd.name))
+ goto out;
+
+ /* rename root? */
+ if(!d1){ou->err = Ename;
goto out;
}
--- a/sys/src/cmd/cwfs/9p2.c
+++ b/sys/src/cmd/cwfs/9p2.c
@@ -111,29 +111,6 @@
}
static int
-checkname9p2(char* name)
-{- char *p;
-
- /*
- * Return error or 0 if OK.
- */
- if(name == nil || *name == 0)
- return Ename;
-
- for(p = name; *p != 0; p++){- if(p-name >= NAMELEN-1)
- return Etoolong;
- if((*p & 0xFF) <= 040)
- return Ename;
- }
- if(strcmp(name, ".") == 0 || strcmp(name, "..") == 0)
- return Edot;
-
- return 0;
-}
-
-static int
version(Chan* chan, Fcall* f, Fcall* r)
{if(chan->protocol != nil)
@@ -825,7 +802,7 @@
* Check the name is valid (and will fit in an old
* directory entry for the moment).
*/
- if(error = checkname9p2(f->name))
+ if(error = checkname(f->name))
goto out;
addr1 = 0;
@@ -1547,7 +1524,7 @@
* Check .name is valid and different to the current.
*/
if(dir.name != nil && *dir.name != '\0'){- if(error = checkname9p2(dir.name))
+ if(error = checkname(dir.name))
goto out;
if(strncmp(dir.name, d->name, NAMELEN))
op = 1;
--- a/sys/src/cmd/cwfs/sub.c
+++ b/sys/src/cmd/cwfs/sub.c
@@ -534,19 +534,18 @@
{int i, c;
- for(i=0; i<NAMELEN; i++) {- c = *n & 0xff;
- if(c == 0) {- if(i == 0)
- return 1;
- memset(n, 0, NAMELEN-i);
+ if(n == 0 || *n == 0)
+ return Ename;
+ if(*n == '.' && (n[1] == 0 || (n[1] == '.' && n[2] == 0)))
+ return Edot;
+ for(i=1; i<NAMELEN; i++) {+ c = n[i] & 0xff;
+ if(c == 0)
return 0;
- }
- if(c <= 040)
- return 1;
- n++;
+ if(c < 040)
+ return Ename;
}
- return 1; /* too long */
+ return Etoolong;
}
void
--
⑨