From 0eae421c3be7b280d9d1e1e78dfc88b9b04bdaae Mon Sep 17 00:00:00 2001 From: David du Colombier <0intro@gmail.com> Date: Sun, 18 Jul 1999 00:00:00 +0000 Subject: [PATCH] Plan 9 from Bell Labs 1999-07-18 --- port/chan.c | 7 ++++--- port/portfns.h | 2 +- port/sysfile.c | 6 +++--- 3 files changed, 8 insertions(+), 7 deletions(-) diff --git a/port/chan.c b/port/chan.c index 49d714d1458c34c6a97ee6364ec8de72c160adb6..34df5ed46a72c55f1445198ad04bceb85fe7ba4e 100644 --- a/port/chan.c +++ b/port/chan.c @@ -865,7 +865,7 @@ namec(char *name, int amode, int omode, ulong perm) cclose(cc); nexterror(); } - nameok(elem); + nameok(elem, 0); if(walk(&cc, elem, 1) == 0){ poperror(); cclose(c); @@ -949,14 +949,15 @@ char isfrog[256]={ }; void -nameok(char *elem) +nameok(char *elem, int slashok) { char *eelem; eelem = elem+NAMELEN; while(*elem) { if(isfrog[*(uchar*)elem]) - error(Ebadchar); + if(!slashok || *elem!='/') + error(Ebadchar); elem++; if(elem >= eelem) error(Efilename); diff --git a/port/portfns.h b/port/portfns.h index b446ef05f2f205786ae403343efee2198b68dba3..bb419b2f679222b16a39c5e27db7a4a6d53ebce6 100644 --- a/port/portfns.h +++ b/port/portfns.h @@ -169,7 +169,7 @@ long mntwrite9p(Chan*, void*, long, vlong); void mountfree(Mount*); ulong msize(void*); Chan* namec(char*, int, int, ulong); -void nameok(char*); +void nameok(char*, int); #define nelem(x) (sizeof(x)/sizeof(x[0])) Chan* newchan(void); Mount* newmount(Mhead*, Chan*, int, char*); diff --git a/port/sysfile.c b/port/sysfile.c index 7f2eff5b9ebdddca2e810185898e91dc8c21e8cf..63eb9ce0e0592b2de21f3e071fb8228d398bd9c8 100644 --- a/port/sysfile.c +++ b/port/sysfile.c @@ -624,7 +624,7 @@ bindmount(ulong *arg, int ismount) bogus.spec = (char*)arg[3]; if(waserror()) error(Ebadspec); - nameok(bogus.spec); + nameok(bogus.spec, 1); poperror(); ret = devno('M', 0); @@ -757,7 +757,7 @@ syswstat(ulong *arg) Chan *c; validaddr(arg[1], DIRLEN, 0); - nameok((char*)arg[1]); + nameok((char*)arg[1], 0); validaddr(arg[0], 1, 0); c = namec((char*)arg[0], Aaccess, 0, 0); if(waserror()){ @@ -776,7 +776,7 @@ sysfwstat(ulong *arg) Chan *c; validaddr(arg[1], DIRLEN, 0); - nameok((char*)arg[1]); + nameok((char*)arg[1], 0); c = fdtochan(arg[0], -1, 1, 1); if(waserror()) { cclose(c);