This is an internal artifact used by the GUI to populate the VFS. You may run it manually if you like, but typically it is launched by the GUI when a user clicks the “Refresh this directory” button.
name: System.VFS.ListDirectory
description: |
This is an internal artifact used by the GUI to populate the
VFS. You may run it manually if you like, but typically it is
launched by the GUI when a user clicks the "Refresh this directory"
button.
parameters:
- name: Path
description: The path of the file to download.
default: "/"
- name: Components
type: json_array
description: Alternatively, this is an explicit list of components.
- name: Accessor
default: file
- name: Depth
type: int
default: 0
export: |
-- Make the generator unique with the session id - so it can
-- only be shared by the two sources in this collection.
LET VFSGenerator = generate(name="vfs-" + _SessionId, query={
SELECT * FROM vfs_ls(
path="/", components=Components,
accessor=Accessor, depth=Depth)
}, delay=500) -- wait a while for both sources to connect.
sources:
- precondition: SELECT * FROM info() WHERE version(plugin="vfs_ls") = 1
name: Listing
description: File listing of multiple directories in a single table.
query: |
SELECT OSPath AS _OSPath,
Components AS _Components,
Accessor AS _Accessor,
Data AS _Data,
Name, Size, Mode,
Mtime as mtime,
Atime as atime,
Ctime as ctime,
Btime as btime,
Idx AS _Idx
FROM VFSGenerator
WHERE Stats = NULL
- precondition: SELECT * FROM info() WHERE version(plugin="vfs_ls") = 1
name: Stats
description: |
A list of summary objects dividing the Listing source into
distinct directories.
query: |
SELECT Components,
Accessor,
Stats
FROM VFSGenerator
WHERE Stats != NULL
- precondition: SELECT * FROM info() WHERE NOT version(plugin="vfs_ls")
query: |
// Glob > v2 accepts a component list for the root parameter.
LET Path <= if(condition=version(plugin="glob") > 2 AND Components,
then=Components, else=Path)
// Old versions do not have the root parameter to glob()
// Fixes https://github.com/Velocidex/velociraptor/issues/322
LET LegacyQuery = SELECT OSPath as _OSPath,
Accessor as _Accessor,
Data as _Data,
Name, Size, Mode.String AS Mode,
Mtime as mtime,
Atime as atime,
Ctime as ctime
FROM glob(globs=Path + if(condition=Depth,
then=format(format='/**%v', args=Depth), else='/*'),
accessor=Accessor)
LET NewQuery = SELECT OSPath as _OSPath,
Accessor as _Accessor,
Data as _Data,
Name, Size, Mode.String AS Mode,
Mtime as mtime,
Atime as atime,
Ctime as ctime,
Btime AS btime
FROM glob(
globs=if(condition=Depth,
then=format(format='/**%v', args=Depth),
else='/*'),
root=Path,
accessor=Accessor)
SELECT * FROM if(
condition=version(plugin="glob") >= 1,
then=NewQuery,
else=LegacyQuery)