From 9bcd6b125ae8d3b276ea5afd9fc314fdee3f7c43 Mon Sep 17 00:00:00 2001 From: Bart Oldeman Date: Wed, 12 Mar 2003 06:50:33 +0000 Subject: [PATCH] Don't allow wildcards for internal truename processing, except for DosFindfirst and DosTruename. git-svn-id: https://svn.code.sf.net/p/freedos/svn/kernel/trunk@536 6ac86273-5f31-0410-b378-82cca8765d1b --- hdr/cds.h | 1 + kernel/dosfns.c | 5 +++-- kernel/newstuff.c | 2 ++ 3 files changed, 6 insertions(+), 2 deletions(-) diff --git a/hdr/cds.h b/hdr/cds.h index 8f8b7b1..149f590 100644 --- a/hdr/cds.h +++ b/hdr/cds.h @@ -94,3 +94,4 @@ struct cds { #define CDS_MODE_SKIP_PHYSICAL 0x01 /* don't resolve SUBST, JOIN, NETW */ #define CDS_MODE_CHECK_DEV_PATH 0x02 /* check for existence of device path */ +#define CDS_MODE_ALLOW_WILDCARDS 0x04 /* allow wildcards in "truename" */ diff --git a/kernel/dosfns.c b/kernel/dosfns.c index 09a480f..74fa0bd 100644 --- a/kernel/dosfns.c +++ b/kernel/dosfns.c @@ -1009,7 +1009,8 @@ COUNT DosFindFirst(UCOUNT attr, BYTE FAR * name) int rc; register dmatch FAR *dmp = dta; - rc = truename(name, PriPathName, CDS_MODE_CHECK_DEV_PATH); + rc = truename(name, PriPathName, + CDS_MODE_CHECK_DEV_PATH | CDS_MODE_ALLOW_WILDCARDS); if (rc < SUCCESS) return rc; @@ -1546,7 +1547,7 @@ COUNT DosTruename(const char FAR *src, char FAR *dest) Therefore, the name is created in an internal buffer and copied into the user buffer only on success. */ - COUNT rc = truename(src, PriPathName, 0); + COUNT rc = truename(src, PriPathName, CDS_MODE_ALLOW_WILDCARDS); if (rc >= SUCCESS) fstrcpy(dest, PriPathName); return rc; diff --git a/kernel/newstuff.c b/kernel/newstuff.c index b6b20a4..e69136f 100644 --- a/kernel/newstuff.c +++ b/kernel/newstuff.c @@ -532,6 +532,8 @@ COUNT truename(const char FAR * src, char * dest, COUNT mode) break; } } + if (gotAnyWildcards && !(mode & CDS_MODE_ALLOW_WILDCARDS)) + return DE_PATHNOTFND; if (addSep == ADD || p == dest + 2) { /* MS DOS preserves a trailing '\\', so an access to "C:\\DOS\\"