1 ////////////////////////////////////////////////////////////////////////////// 2 // 3 // (C) Copyright Ion Gaztanaga 2005-2012. Distributed under the Boost 4 // Software License, Version 1.0. (See accompanying file 5 // LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) 6 // 7 // See http://www.boost.org/libs/interprocess for documentation. 8 // 9 ////////////////////////////////////////////////////////////////////////////// 10 11 #ifndef BOOST_INTERPROCESS_PERMISSIONS_HPP 12 #define BOOST_INTERPROCESS_PERMISSIONS_HPP 13 14 #if !defined(BOOST_INTERPROCESS_DOXYGEN_INVOKED) 15 16 #ifndef BOOST_CONFIG_HPP 17 # include <boost/config.hpp> 18 #endif 19 # 20 #if defined(BOOST_HAS_PRAGMA_ONCE) 21 # pragma once 22 #endif 23 24 #include <boost/interprocess/detail/config_begin.hpp> 25 #include <boost/interprocess/detail/workaround.hpp> 26 #include <boost/interprocess/interprocess_fwd.hpp> 27 28 #if defined(BOOST_INTERPROCESS_WINDOWS) 29 30 #include <boost/interprocess/detail/win32_api.hpp> 31 32 #endif 33 34 #endif //#ifndef BOOST_INTERPROCESS_DOXYGEN_INVOKED 35 36 //!\file 37 //!Describes permissions class 38 39 namespace boost { 40 namespace interprocess { 41 42 #if !defined(BOOST_INTERPROCESS_DOXYGEN_INVOKED) 43 44 #if defined(BOOST_INTERPROCESS_WINDOWS) 45 46 namespace ipcdetail { 47 48 template <int Dummy> 49 struct unrestricted_permissions_holder 50 { 51 static winapi::interprocess_all_access_security unrestricted; 52 }; 53 54 template<int Dummy> 55 winapi::interprocess_all_access_security unrestricted_permissions_holder<Dummy>::unrestricted; 56 57 } //namespace ipcdetail { 58 59 #endif //defined BOOST_INTERPROCESS_WINDOWS 60 61 #endif //#ifndef BOOST_INTERPROCESS_DOXYGEN_INVOKED 62 63 //!The permissions class represents permissions to be set to shared memory or 64 //!files, that can be constructed form usual permission representations: 65 //!a SECURITY_ATTRIBUTES pointer in windows or ORed rwx chmod integer in UNIX. 66 class permissions 67 { 68 #if !defined(BOOST_INTERPROCESS_DOXYGEN_INVOKED) 69 70 #if defined(BOOST_INTERPROCESS_WINDOWS) 71 typedef void* os_permissions_type; 72 #else 73 typedef int os_permissions_type; 74 #endif 75 os_permissions_type m_perm; 76 77 #endif //#ifndef BOOST_INTERPROCESS_DOXYGEN_INVOKED 78 79 public: 80 //!Constructs a permissions object from a user provided os-dependent 81 //!permissions. permissions(os_permissions_type type)82 permissions(os_permissions_type type) 83 : m_perm(type) 84 {} 85 86 //!Constructs a default permissions object: 87 //!A null security attributes pointer for windows or 0644 88 //!for UNIX. permissions()89 permissions() 90 { set_default(); } 91 92 //!Sets permissions to default values: 93 //!A null security attributes pointer for windows or 0644 94 //!for UNIX. set_default()95 void set_default() 96 { 97 #if defined (BOOST_INTERPROCESS_WINDOWS) 98 m_perm = 0; 99 #else 100 m_perm = 0644; 101 #endif 102 } 103 104 //!Sets permissions to unrestricted access: 105 //!A null DACL for windows or 0666 for UNIX. set_unrestricted()106 void set_unrestricted() 107 { 108 #if defined (BOOST_INTERPROCESS_WINDOWS) 109 m_perm = &ipcdetail::unrestricted_permissions_holder<0>::unrestricted; 110 #else 111 m_perm = 0666; 112 #endif 113 } 114 115 //!Sets permissions from a user provided os-dependent 116 //!permissions. set_permissions(os_permissions_type perm)117 void set_permissions(os_permissions_type perm) 118 { m_perm = perm; } 119 120 //!Returns stored os-dependent 121 //!permissions get_permissions() const122 os_permissions_type get_permissions() const 123 { return m_perm; } 124 }; 125 126 } //namespace interprocess { 127 } //namespace boost { 128 129 #include <boost/interprocess/detail/config_end.hpp> 130 131 #endif //BOOST_INTERPROCESS_PERMISSIONS_HPP 132 133