190
190
extern PRBool sftk_audit_enabled;
192
extern void sftk_LogAuditMessage(NSSAuditSeverity severity, const char *msg);
192
extern void sftk_LogAuditMessage(NSSAuditSeverity severity,
193
NSSAuditType, const char *msg);
194
195
extern void sftk_AuditCreateObject(CK_SESSION_HANDLE hSession,
195
196
CK_ATTRIBUTE_PTR pTemplate, CK_ULONG ulCount,
262
263
extern PRBool sftk_fatalError;
265
** macros to check for forked child after C_Initialize
266
** macros to check for forked child process after C_Initialize
267
#if defined(XP_UNIX) && !defined(NO_PTHREADS)
269
extern PRBool forked;
271
extern void ForkedChild(void);
268
#if defined(XP_UNIX) && !defined(NO_CHECK_FORK)
272
#define FORK_ASSERT() \
274
char* forkAssert = getenv("NSS_STRICT_NOFORK"); \
275
if ( (!forkAssert) || (0 == strcmp(forkAssert, "1")) ) { \
282
#define FORK_ASSERT()
286
/* we have 3 methods of implementing the fork checks :
287
* - Solaris "mixed" method
288
* - pthread_atfork method
292
#if !defined (CHECK_FORK_MIXED) && !defined(CHECK_FORK_PTHREAD) && \
293
!defined (CHECK_FORK_GETPID)
295
/* Choose fork check method automatically unless specified
296
* This section should be updated as more platforms get pthread fixes
297
* to unregister fork handlers in dlclose.
302
/* Solaris 8, s9 use PID checks, s10 uses pthread_atfork */
304
#define CHECK_FORK_MIXED
308
#define CHECK_FORK_PTHREAD
312
/* Other Unix platforms use only PID checks. Even if pthread_atfork is
313
* available, the behavior of dlclose isn't guaranteed by POSIX to
314
* unregister the fork handler. */
316
#define CHECK_FORK_GETPID
322
#if defined(CHECK_FORK_MIXED)
324
extern PRBool usePthread_atfork;
327
extern PRBool forked;
329
#define PARENT_FORKED() (usePthread_atfork ? forked : (myPid && myPid != getpid()))
331
#elif defined(CHECK_FORK_PTHREAD)
333
extern PRBool forked;
335
#define PARENT_FORKED() forked
337
#elif defined(CHECK_FORK_GETPID)
342
#define PARENT_FORKED() (myPid && myPid != getpid())
346
extern PRBool parentForkedAfterC_Initialize;
347
extern PRBool sftkForkCheckDisabled;
273
349
#define CHECK_FORK() \
274
do { if (forked) return CKR_DEVICE_ERROR; } while (0)
351
if (!sftkForkCheckDisabled && PARENT_FORKED()) { \
353
return CKR_DEVICE_ERROR; \
357
#define SKIP_AFTER_FORK(x) if (!parentForkedAfterC_Initialize) x
359
#define ENABLE_FORK_CHECK() \
361
char* doForkCheck = getenv("NSS_STRICT_NOFORK"); \
362
if ( doForkCheck && !strcmp(doForkCheck, "DISABLED") ) { \
363
sftkForkCheckDisabled = PR_TRUE; \
370
/* non-Unix platforms, or fork check disabled */
278
372
#define CHECK_FORK()
373
#define SKIP_AFTER_FORK(x) x
374
#define ENABLE_FORK_CHECK()
376
#ifndef NO_FORK_CHECK
377
#define NO_FORK_CHECK