Chris@16: ////////////////////////////////////////////////////////////////////////////// Chris@16: // Chris@16: // (C) Copyright Ion Gaztanaga 2005-2012. Distributed under the Boost Chris@16: // Software License, Version 1.0. (See accompanying file Chris@16: // LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) Chris@16: // Chris@16: // See http://www.boost.org/libs/interprocess for documentation. Chris@16: // Chris@16: ////////////////////////////////////////////////////////////////////////////// Chris@16: Chris@16: #ifndef BOOST_INTERPROCESS_PERMISSIONS_HPP Chris@16: #define BOOST_INTERPROCESS_PERMISSIONS_HPP Chris@16: Chris@101: #if !defined(BOOST_INTERPROCESS_DOXYGEN_INVOKED) Chris@16: Chris@101: #ifndef BOOST_CONFIG_HPP Chris@101: # include Chris@101: #endif Chris@101: # Chris@101: #if defined(BOOST_HAS_PRAGMA_ONCE) Chris@16: # pragma once Chris@16: #endif Chris@16: Chris@16: #include Chris@16: #include Chris@16: #include Chris@16: Chris@16: #if defined(BOOST_INTERPROCESS_WINDOWS) Chris@16: Chris@16: #include Chris@16: Chris@16: #endif Chris@16: Chris@101: #endif //#ifndef BOOST_INTERPROCESS_DOXYGEN_INVOKED Chris@16: Chris@16: //!\file Chris@16: //!Describes permissions class Chris@16: Chris@16: namespace boost { Chris@16: namespace interprocess { Chris@16: Chris@101: #if !defined(BOOST_INTERPROCESS_DOXYGEN_INVOKED) Chris@16: Chris@16: #if defined(BOOST_INTERPROCESS_WINDOWS) Chris@16: Chris@16: namespace ipcdetail { Chris@16: Chris@16: template Chris@16: struct unrestricted_permissions_holder Chris@16: { Chris@16: static winapi::interprocess_all_access_security unrestricted; Chris@16: }; Chris@16: Chris@16: template Chris@16: winapi::interprocess_all_access_security unrestricted_permissions_holder::unrestricted; Chris@16: Chris@16: } //namespace ipcdetail { Chris@16: Chris@16: #endif //defined BOOST_INTERPROCESS_WINDOWS Chris@16: Chris@101: #endif //#ifndef BOOST_INTERPROCESS_DOXYGEN_INVOKED Chris@16: Chris@16: //!The permissions class represents permissions to be set to shared memory or Chris@16: //!files, that can be constructed form usual permission representations: Chris@16: //!a SECURITY_ATTRIBUTES pointer in windows or ORed rwx chmod integer in UNIX. Chris@16: class permissions Chris@16: { Chris@101: #if !defined(BOOST_INTERPROCESS_DOXYGEN_INVOKED) Chris@16: Chris@16: #if defined(BOOST_INTERPROCESS_WINDOWS) Chris@16: typedef void* os_permissions_type; Chris@16: #else Chris@16: typedef int os_permissions_type; Chris@16: #endif Chris@16: os_permissions_type m_perm; Chris@16: Chris@101: #endif //#ifndef BOOST_INTERPROCESS_DOXYGEN_INVOKED Chris@16: Chris@16: public: Chris@16: //!Constructs a permissions object from a user provided os-dependent Chris@16: //!permissions. Chris@16: permissions(os_permissions_type type) Chris@16: : m_perm(type) Chris@16: {} Chris@16: Chris@16: //!Constructs a default permissions object: Chris@16: //!A null security attributes pointer for windows or 0644 Chris@16: //!for UNIX. Chris@16: permissions() Chris@16: { set_default(); } Chris@16: Chris@16: //!Sets permissions to default values: Chris@16: //!A null security attributes pointer for windows or 0644 Chris@16: //!for UNIX. Chris@16: void set_default() Chris@16: { Chris@16: #if defined (BOOST_INTERPROCESS_WINDOWS) Chris@16: m_perm = 0; Chris@16: #else Chris@16: m_perm = 0644; Chris@16: #endif Chris@16: } Chris@16: Chris@16: //!Sets permissions to unrestricted access: Chris@16: //!A null DACL for windows or 0666 for UNIX. Chris@16: void set_unrestricted() Chris@16: { Chris@16: #if defined (BOOST_INTERPROCESS_WINDOWS) Chris@16: m_perm = &ipcdetail::unrestricted_permissions_holder<0>::unrestricted; Chris@16: #else Chris@16: m_perm = 0666; Chris@16: #endif Chris@16: } Chris@16: Chris@16: //!Sets permissions from a user provided os-dependent Chris@16: //!permissions. Chris@16: void set_permissions(os_permissions_type perm) Chris@16: { m_perm = perm; } Chris@16: Chris@16: //!Returns stored os-dependent Chris@16: //!permissions Chris@16: os_permissions_type get_permissions() const Chris@16: { return m_perm; } Chris@16: }; Chris@16: Chris@16: } //namespace interprocess { Chris@16: } //namespace boost { Chris@16: Chris@16: #include Chris@16: Chris@16: #endif //BOOST_INTERPROCESS_PERMISSIONS_HPP Chris@16: