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