Add path_magic to work properly with #ftp:asdf files created by
malicious user
Этот коммит содержится в:
родитель
b422d3771e
Коммит
b99161ec69
23
vfs/vfs.c
23
vfs/vfs.c
@ -60,12 +60,7 @@
|
|||||||
extern int get_other_type (void);
|
extern int get_other_type (void);
|
||||||
|
|
||||||
int vfs_timeout = 60; /* VFS timeout in seconds */
|
int vfs_timeout = 60; /* VFS timeout in seconds */
|
||||||
int vfs_flags = /* Flags */
|
int vfs_flags = 0; /* Flags */
|
||||||
#ifdef VFS_STANDALONE
|
|
||||||
0;
|
|
||||||
#else
|
|
||||||
FL_ALWAYS_MAGIC;
|
|
||||||
#endif
|
|
||||||
|
|
||||||
extern int cd_symlinks; /* Defined in main.c */
|
extern int cd_symlinks; /* Defined in main.c */
|
||||||
|
|
||||||
@ -141,11 +136,15 @@ vfs *vfs_type_from_op (char *path)
|
|||||||
int path_magic( char *path )
|
int path_magic( char *path )
|
||||||
{
|
{
|
||||||
int res;
|
int res;
|
||||||
|
struct stat buf;
|
||||||
|
|
||||||
res = !strncmp( path, "/#/", 3 );
|
if (vfs_flags & FL_ALWAYS_MAGIC)
|
||||||
if (res)
|
return 1;
|
||||||
path[1] = '/';
|
|
||||||
return res || (vfs_flags & FL_ALWAYS_MAGIC);
|
if (!stat(path, &buf))
|
||||||
|
return 0;
|
||||||
|
|
||||||
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@ -159,7 +158,7 @@ vfs *vfs_split (char *path, char **inpath, char **op)
|
|||||||
char *slash;
|
char *slash;
|
||||||
vfs *ret;
|
vfs *ret;
|
||||||
|
|
||||||
if (!semi)
|
if (!semi || !path_magic(path))
|
||||||
return NULL;
|
return NULL;
|
||||||
slash = strchr (semi, '/');
|
slash = strchr (semi, '/');
|
||||||
*semi = 0;
|
*semi = 0;
|
||||||
@ -190,7 +189,7 @@ vfs_rosplit (char *path)
|
|||||||
char *slash;
|
char *slash;
|
||||||
vfs *ret;
|
vfs *ret;
|
||||||
|
|
||||||
if (!semi)
|
if (!semi || !path_magic(path))
|
||||||
return NULL;
|
return NULL;
|
||||||
slash = strchr (semi, '/');
|
slash = strchr (semi, '/');
|
||||||
*semi = 0;
|
*semi = 0;
|
||||||
|
Загрузка…
Ссылка в новой задаче
Block a user