Skip to content
Snippets Groups Projects
  • Ed Schouten's avatar
    97fdea61
    Add option to disable access to the global filesystem namespace. · 97fdea61
    Ed Schouten authored
    Systems like FreeBSD's Capsicum and Nuxi CloudABI apply the concept of
    capability-based security on the way processes can interact with the
    filesystem API. It is no longer possible to interact with the VFS
    through calls like open(), unlink(), rename(), etc. Instead, processes
    are only allowed to interact with files and directories to which they
    have been granted access. The *at() functions can be used for this
    purpose.
    
    This change adds a new config switch called
    _LIBCPP_HAS_NO_GLOBAL_FILESYSTEM_NAMESPACE. If set, all functionality
    that requires the global filesystem namespace will be disabled. More
    concretely:
    
    - fstream's open() function will be removed.
    - cstdio will no longer pull in fopen(), rename(), etc.
    - The test suite's get_temp_file_name() will be removed. This will cause
      all tests that use the global filesystem namespace to break, but will
      at least make all the other tests run (as get_temp_file_name will not
      build anyway).
    
    It is important to mention that this change will make fstream rather
    useless on those systems for now. Still, I'd rather not have fstream
    disabled entirely, as it is of course possible to come up with an
    extension for fstream that would allow access to local filesystem
    namespaces (e.g., by adding an openat() member function).
    
    Differential revision:	http://reviews.llvm.org/D8194
    Reviewed by:		jroelofs (thanks!)
    
    llvm-svn: 232049
    97fdea61
    History
    Add option to disable access to the global filesystem namespace.
    Ed Schouten authored
    Systems like FreeBSD's Capsicum and Nuxi CloudABI apply the concept of
    capability-based security on the way processes can interact with the
    filesystem API. It is no longer possible to interact with the VFS
    through calls like open(), unlink(), rename(), etc. Instead, processes
    are only allowed to interact with files and directories to which they
    have been granted access. The *at() functions can be used for this
    purpose.
    
    This change adds a new config switch called
    _LIBCPP_HAS_NO_GLOBAL_FILESYSTEM_NAMESPACE. If set, all functionality
    that requires the global filesystem namespace will be disabled. More
    concretely:
    
    - fstream's open() function will be removed.
    - cstdio will no longer pull in fopen(), rename(), etc.
    - The test suite's get_temp_file_name() will be removed. This will cause
      all tests that use the global filesystem namespace to break, but will
      at least make all the other tests run (as get_temp_file_name will not
      build anyway).
    
    It is important to mention that this change will make fstream rather
    useless on those systems for now. Still, I'd rather not have fstream
    disabled entirely, as it is of course possible to come up with an
    extension for fstream that would allow access to local filesystem
    namespaces (e.g., by adding an openat() member function).
    
    Differential revision:	http://reviews.llvm.org/D8194
    Reviewed by:		jroelofs (thanks!)
    
    llvm-svn: 232049