SFTP Filesystems Interface
Header: silcsftp_fs.h

DESCRIPTION

    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:

    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.