comparison nspr/pr/include/prshma.h @ 0:1e5118fa0cb1

This is NSS with a Cmake Buildsyste To compile a static NSS library for Windows we've used the Chromium-NSS fork and added a Cmake buildsystem to compile it statically for Windows. See README.chromium for chromium changes and README.trustbridge for our modifications.
author Andre Heinecke <andre.heinecke@intevation.de>
date Mon, 28 Jul 2014 10:47:06 +0200
parents
children
comparison
equal deleted inserted replaced
-1:000000000000 0:1e5118fa0cb1
1 /* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
2 /* This Source Code Form is subject to the terms of the Mozilla Public
3 * License, v. 2.0. If a copy of the MPL was not distributed with this
4 * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
5
6 /*
7 ** prshma.h -- NSPR Anonymous Shared Memory
8 **
9 ** NSPR provides an anonymous shared memory based on NSPR's PRFileMap
10 ** type. The anonymous file-mapped shared memory provides an inheritable
11 ** shared memory, as in: the child process inherits the shared memory.
12 ** Compare the file-mapped anonymous shared memory to to a named shared
13 ** memory described in prshm.h. The intent is to provide a shared
14 ** memory that is accessable only by parent and child processes. ...
15 ** It's a security thing.
16 **
17 ** Depending on the underlying platform, the file-mapped shared memory
18 ** may be backed by a file. ... surprise! ... On some platforms, no
19 ** real file backs the shared memory. On platforms where the shared
20 ** memory is backed by a file, the file's name in the filesystem is
21 ** visible to other processes for only the duration of the creation of
22 ** the file, hopefully a very short time. This restricts processess
23 ** that do not inherit the shared memory from opening the file and
24 ** reading or writing its contents. Further, when all processes
25 ** using an anonymous shared memory terminate, the backing file is
26 ** deleted. ... If you are not paranoid, you're not paying attention.
27 **
28 ** The file-mapped shared memory requires a protocol for the parent
29 ** process and child process to share the memory. NSPR provides two
30 ** protocols. Use one or the other; don't mix and match.
31 **
32 ** In the first protocol, the job of passing the inheritable shared
33 ** memory is done via helper-functions with PR_CreateProcess(). In the
34 ** second protocol, the parent process is responsible for creating the
35 ** child process; the parent and child are mutually responsible for
36 ** passing a FileMap string. NSPR provides helper functions for
37 ** extracting data from the PRFileMap object. ... See the examples
38 ** below.
39 **
40 ** Both sides should adhere strictly to the protocol for proper
41 ** operation. The pseudo-code below shows the use of a file-mapped
42 ** shared memory by a parent and child processes. In the examples, the
43 ** server creates the file-mapped shared memory, the client attaches to
44 ** it.
45 **
46 ** First protocol.
47 ** Server:
48 **
49 ** fm = PR_OpenAnonFileMap(dirName, size, FilemapProt);
50 ** addr = PR_MemMap(fm);
51 ** attr = PR_NewProcessAttr();
52 ** PR_ProcessAttrSetInheritableFileMap( attr, fm, shmname );
53 ** PR_CreateProcess(Client);
54 ** PR_DestroyProcessAttr(attr);
55 ** ... yadda ...
56 ** PR_MemUnmap( addr );
57 ** PR_CloseFileMap(fm);
58 **
59 **
60 ** Client:
61 ** ... started by server via PR_CreateProcess()
62 ** fm = PR_GetInheritedFileMap( shmname );
63 ** addr = PR_MemMap(fm);
64 ** ... yadda ...
65 ** PR_MemUnmap(addr);
66 ** PR_CloseFileMap(fm);
67 **
68 **
69 ** Second Protocol:
70 ** Server:
71 **
72 ** fm = PR_OpenAnonFileMap(dirName, size, FilemapProt);
73 ** fmstring = PR_ExportFileMapAsString( fm );
74 ** addr = PR_MemMap(fm);
75 ** ... application specific technique to pass fmstring to child
76 ** ... yadda ... Server uses his own magic to create child
77 ** PR_MemUnmap( addr );
78 ** PR_CloseFileMap(fm);
79 **
80 **
81 ** Client:
82 ** ... started by server via his own magic
83 ** ... application specific technique to find fmstring from parent
84 ** fm = PR_ImportFileMapFromString( fmstring )
85 ** addr = PR_MemMap(fm);
86 ** ... yadda ...
87 ** PR_MemUnmap(addr);
88 ** PR_CloseFileMap(fm);
89 **
90 **
91 ** lth. 2-Jul-1999.
92 **
93 ** Note: The second protocol was requested by NelsonB (7/1999); this is
94 ** to accomodate servers which already create their own child processes
95 ** using platform native methods.
96 **
97 */
98
99 #ifndef prshma_h___
100 #define prshma_h___
101
102 #include "prtypes.h"
103 #include "prio.h"
104 #include "prproces.h"
105
106 PR_BEGIN_EXTERN_C
107
108 /*
109 ** PR_OpenAnonFileMap() -- Creates an anonymous file-mapped shared memory
110 **
111 ** Description:
112 ** PR_OpenAnonFileMap() creates an anonymous shared memory. If the
113 ** shared memory already exists, a handle is returned to that shared
114 ** memory object.
115 **
116 ** On Unix platforms, PR_OpenAnonFileMap() uses 'dirName' as a
117 ** directory name, without the trailing '/', to contain the anonymous
118 ** file. A filename is generated for the name.
119 **
120 ** On Windows platforms, dirName is ignored.
121 **
122 ** Inputs:
123 ** dirName -- A directory name to contain the anonymous file.
124 ** size -- The size of the shared memory
125 ** prot -- How the shared memory is mapped. See prio.h
126 **
127 ** Outputs:
128 ** PRFileMap *
129 **
130 ** Returns:
131 ** Pointer to PRFileMap or NULL on error.
132 **
133 */
134 NSPR_API( PRFileMap *)
135 PR_OpenAnonFileMap(
136 const char *dirName,
137 PRSize size,
138 PRFileMapProtect prot
139 );
140
141 /*
142 ** PR_ProcessAttrSetInheritableFileMap() -- Prepare FileMap for export
143 ** to my children processes via PR_CreateProcess()
144 **
145 ** Description:
146 ** PR_ProcessAttrSetInheritableFileMap() connects the PRFileMap to
147 ** PRProcessAttr with shmname. A subsequent call to PR_CreateProcess()
148 ** makes the PRFileMap importable by the child process.
149 **
150 ** Inputs:
151 ** attr -- PRProcessAttr, used to pass data to PR_CreateProcess()
152 ** fm -- PRFileMap structure to be passed to the child process
153 ** shmname -- The name for the PRFileMap; used by child.
154 **
155 ** Outputs:
156 ** PRFileMap *
157 **
158 ** Returns:
159 ** PRStatus
160 **
161 */
162 NSPR_API(PRStatus)
163 PR_ProcessAttrSetInheritableFileMap(
164 PRProcessAttr *attr,
165 PRFileMap *fm,
166 const char *shmname
167 );
168
169 /*
170 ** PR_GetInheritedFileMap() -- Import a PRFileMap previously exported
171 ** by my parent process via PR_CreateProcess()
172 **
173 ** Description:
174 ** PR_GetInheritedFileMap() retrieves a PRFileMap object exported from
175 ** its parent process via PR_CreateProcess().
176 **
177 ** Inputs:
178 ** shmname -- The name provided to PR_ProcessAttrSetInheritableFileMap()
179 **
180 ** Outputs:
181 ** PRFileMap *
182 **
183 ** Returns:
184 ** PRFileMap pointer or NULL.
185 **
186 */
187 NSPR_API( PRFileMap *)
188 PR_GetInheritedFileMap(
189 const char *shmname
190 );
191
192 /*
193 ** PR_ExportFileMapAsString() -- Creates a string identifying a PRFileMap
194 **
195 ** Description:
196 ** Creates an identifier, as a string, from a PRFileMap object
197 ** previously created with PR_OpenAnonFileMap().
198 **
199 ** Inputs:
200 ** fm -- PRFileMap pointer to be represented as a string.
201 ** bufsize -- sizeof(buf)
202 ** buf -- a buffer of length PR_FILEMAP_STRING_BUFSIZE
203 **
204 ** Outputs:
205 ** buf contains the stringized PRFileMap identifier
206 **
207 ** Returns:
208 ** PRStatus
209 **
210 */
211 NSPR_API( PRStatus )
212 PR_ExportFileMapAsString(
213 PRFileMap *fm,
214 PRSize bufsize,
215 char *buf
216 );
217 #define PR_FILEMAP_STRING_BUFSIZE 128
218
219 /*
220 ** PR_ImportFileMapFromString() -- Creates a PRFileMap from the identifying string
221 **
222 ** Description:
223 ** PR_ImportFileMapFromString() creates a PRFileMap object from a
224 ** string previously created by PR_ExportFileMapAsString().
225 **
226 ** Inputs:
227 ** fmstring -- string created by PR_ExportFileMapAsString()
228 **
229 ** Returns:
230 ** PRFileMap pointer or NULL.
231 **
232 */
233 NSPR_API( PRFileMap * )
234 PR_ImportFileMapFromString(
235 const char *fmstring
236 );
237
238 PR_END_EXTERN_C
239 #endif /* prshma_h___ */
This site is hosted by Intevation GmbH (Datenschutzerklärung und Impressum | Privacy Policy and Imprint)