SFTP Filesystems Interface
SILC SFTP Filesystem interface defines filesystems for the SFTP server
usage. The filesystems may be for example virtual memory filesystem
or real filesystem access.
Currently only implemented filesystem is memory file system.
Memory filesystem is a virtual filesystem which provides safe access
to files without actually revealing the underlaying physical filesystem
hierarchy or real filenames. Virtual directories can be added to the
filesystem and freely create filesystem hierarchy. The directories
can have subdirectories and files. The filesystem also provides limited
status information for files. The files in the filesystem are
virtual but they include the path to the real file. The real path
includes always a schema which indicates where the file really is
available. The only supported schema currently is "file://". In
the future it could support various others like "http://" and "ldap://".
The filesystem also provides security and permission handling for
directories and files. Normal POSIX style permissions can be set
giving thus rights to reading, writing and/or executing. They behave
same way as defined in POSIX. It is also guaranteed that if the
writing to a file is not allowed in the memory filesystem, but it is
allowed in real physical filesystem the file still cannot be written.
However, the real physical filesystem permissions still matter, for
example if writing is enabled in the memory filesystem but it is not
enabled on physical filesystem, the file cannot be written.
The directories cannot be removed from remote access using the
filesystem access function sftp_rmdir. This is because the filesystem
is one-user filesystem and differentiating between users is not
possible. Thus, it would allow anyone to remove directories and
their contents. Removing directories is possible only locally using
the silc_sftp_fs_memory_del_dir function. The same thing is with
removing files as well. Files too can be removed only locally using
the silc_sftp_fs_memory_del_file function. Also, files can not ever
be executed from remote access.
Also some of the file operation flags are not supported, such as
SILC_SFTP_FXF_CREAT, SILC_SFTP_FXF_TRUNC and SILC_SFTP_FXF_EXCL
since they would require access to a real filesystem file which does
not exist yet, or would mean destroying the file. However, the
SILC_SFTP_FXF_WRITE is supported since the file aready exists.
The memory filesystem does not provide symbolic links.