* child_info.h (CURR_CHILD_INFO_MAGIC): Use updated value.

* path.cc (path_conv::check): Check the output Win32 path for trailing spaces
and dots, not the input path.  Disallow all use of foo./bar since consistently
getting this right is time consuming.  Remove strange test for "unc\" since no
one seems to know what it's for.
This commit is contained in:
Christopher Faylor 2004-12-19 02:40:40 +00:00
parent bbe009b770
commit 5524af6e9b
3 changed files with 42 additions and 17 deletions

View File

@ -1,3 +1,15 @@
2004-12-18 Christopher Faylor <cgf@timesys.com>
* child_info.h (CURR_CHILD_INFO_MAGIC): Use updated value.
2004-12-18 Christopher Faylor <cgf@timesys.com>
Pierre Humblet <pierre.humblet@ieee.org>
* path.cc (path_conv::check): Check the output Win32 path for trailing
spaces and dots, not the input path. Disallow all use of foo./bar
since consistently getting this right is time consuming. Remove
strange test for "unc\" since no one seems to know what it's for.
2004-12-18 Chris January <chris@atomice.net> 2004-12-18 Chris January <chris@atomice.net>
* fhandler_proc.cc (proc_listing): Add entry for "self". * fhandler_proc.cc (proc_listing): Add entry for "self".

View File

@ -29,7 +29,7 @@ enum child_info_types
#define EXEC_MAGIC_SIZE sizeof(child_info) #define EXEC_MAGIC_SIZE sizeof(child_info)
#define CURR_CHILD_INFO_MAGIC 0x694cd4b8U #define CURR_CHILD_INFO_MAGIC 0x17ad771aU
/* NOTE: Do not make gratuitous changes to the names or organization of the /* NOTE: Do not make gratuitous changes to the names or organization of the
below class. The layout is checksummed to determine compatibility between below class. The layout is checksummed to determine compatibility between

View File

@ -546,25 +546,12 @@ path_conv::check (const char *src, unsigned opt,
/* Detect if the user was looking for a directory. We have to strip the /* Detect if the user was looking for a directory. We have to strip the
trailing slash initially while trying to add extensions but take it trailing slash initially while trying to add extensions but take it
into account during processing */ into account during processing */
if (tail > path_copy + 1) if (tail > path_copy + 1 && isslash (tail[-1]))
{ {
if (isslash (tail[-1])) need_directory = 1;
{ *--tail = '\0';
need_directory = 1;
tail--;
}
/* Remove trailing dots and spaces which are ignored by Win32 functions but
not by native NT functions. */
while (tail[-1] == '.' || tail[-1] == ' ')
tail--;
if (tail > path_copy + 1 && isslash (tail[-1]))
{
error = ENOENT;
return;
}
} }
path_end = tail; path_end = tail;
*tail = '\0';
/* Scan path_copy from right to left looking either for a symlink /* Scan path_copy from right to left looking either for a symlink
or an actual existing file. If an existing file is found, just or an actual existing file. If an existing file is found, just
@ -835,6 +822,32 @@ out:
if (dev.devn == FH_FS) if (dev.devn == FH_FS)
{ {
if (strncmp (path, "\\\\.\\", 4))
{
/* Windows ignores trailing dots and spaces */
char *tail = NULL;
for (char *p = path; *p; p++)
if (*p != '.' && *p != ' ')
tail = NULL;
else if (p[1] == '\\')
{
error = ENOENT;
return;
}
else if (!tail)
tail = p;
if (!tail)
/* nothing */;
else if (tail[-1] != '\\')
*tail = '\0';
else
{
error = ENOENT;
return;
}
}
if (fs.update (path)) if (fs.update (path))
{ {
debug_printf ("this->path(%s), has_acls(%d)", path, fs.has_acls ()); debug_printf ("this->path(%s), has_acls(%d)", path, fs.has_acls ());