Common Data Security Architecture (CDSA) White Paper

54 Chapter1
Common Data Security Architecture (CDSA) White Paper
How to Create a CDSA Add-In Module for HP-UX
For further conceptual information about GUIDs, see “Global Unique Identifier (GUID)”
on page 49.
2. Define an initializer for each add-in module. The initialization routine is invoked by the
system loader immediately after the shared library loads successfully. It is also invoked
right before the library is unloaded.
NOTE To ensure that initialization routines are named uniquely, HP
recommends the following naming convention:
YourCompanyName_RoutineName_Init()
The initialization routine is specified by the linker option +I when the library is created.
For example:
ld -b -o libmylib.1 +I _MyAddIn_Init ....
In this example, _MyAddIn_Init() becomes your add-in library’s initializer and your add-in
source must contain the _MyAddIn_Init routine.
The following is a skeletal example of an add-in initializer:
void _MyAddIn_Init (shl_t hInstance, int loading)
{
if (loading) { /* perform initialization */
#ifdef ISL_SELF_CHECK
/* self-check code here */
#endif
} else { /* perform termination */
/* un-register services by invoking CSSM_DeregisterServices. */
}
}
As this example shows, _MyAddIn_Init() is invoked with loading == 1, when the library is
loaded (usually when applications invoke CSSM_ModuleAttach).
To perform termination, _MyAddIn_Init() is invoked again with loading == 0, when
applications invoke CSSM_ModuleDetach().
The main purpose of initialization is to perform the add-in self-check. If the add-in module
is a CSP, extensive self-checking is required. For CL, TP, and DL add-ins, the routine is