* 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:
parent
bbe009b770
commit
5524af6e9b
|
@ -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>
|
||||
|
||||
* fhandler_proc.cc (proc_listing): Add entry for "self".
|
||||
|
|
|
@ -29,7 +29,7 @@ enum child_info_types
|
|||
|
||||
#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
|
||||
below class. The layout is checksummed to determine compatibility between
|
||||
|
|
|
@ -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
|
||||
trailing slash initially while trying to add extensions but take it
|
||||
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--;
|
||||
}
|
||||
/* 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;
|
||||
}
|
||||
need_directory = 1;
|
||||
*--tail = '\0';
|
||||
}
|
||||
path_end = tail;
|
||||
*tail = '\0';
|
||||
|
||||
/* Scan path_copy from right to left looking either for a symlink
|
||||
or an actual existing file. If an existing file is found, just
|
||||
|
@ -835,6 +822,32 @@ out:
|
|||
|
||||
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))
|
||||
{
|
||||
debug_printf ("this->path(%s), has_acls(%d)", path, fs.has_acls ());
|
||||
|
|
Loading…
Reference in New Issue