|Plug-in Programmerís Guide
Red Hat Directory Server
Writing Entry Store/Fetch Plug-ins
This chapter describes how to write entry store and entry fetch plug-ins. You can use these types of plug-ins to invoke functions before and after data is read from the default database.
The chapter contains the following sections:
- How Entry Store/Fetch Plug-ins Work (page 121)
- Writing Entry Store/Fetch Functions (page 122)
- Registering Entry Store/Fetch Functions (page 123)
How Entry Store/Fetch Plug-ins Work
Entry store plug-in functions are called before data is written to the database. Entry fetch plug-in functions are called after data is read from the default database. This processing is illustrated in Figure 9-1.
Figure 9-1 How the Server Calls Entry Store and Entry Fetch Plug-in Functions
Writing Entry Store/Fetch Functions
Unlike most other types of plug-in functions, entry store and entry fetch plug-in functions are not passed a parameter block when called. Instead, entry store and entry fetch plug-in functions must have the following prototype:void function_name( char **entry, unsigned long *len );
The parameters are described below:
entry Pointer to a string specifying the entry in LDIF format; for details on this format, see "slapi_filter_free()," on page 361. len Pointer to the length of the entry string.
Since the text of the entry is passed in as an argument, you can modify the entry before it gets saved to disk and modify the entry after it is read from disk.
Registering Entry Store/Fetch Functions
Unlike most other types of plug-in functions, you do not register an entry store or entry fetch plug-in function by setting the function name in the parameter block. Instead, you specify the function name directly in the server configuration file.
Shut down the server, add the plug-in parameters to the dse.ldif file, and restart the server (see Chapter 3, "Configuring Plug-ins"). For example, your plug-in entry might look like this:dn: cn=Test entry,cn=plugins,cn=config objectClass: top objectClass: nsSlapdPlugin objectClass: extensibleObject cn: Test entry nsslapd-pluginPath: /opt/redhat-ds/servers/plugins/slapd/slapi/ examples/libtest-plugin.so nsslapd-pluginInitfunc: testentry_init nsslapd-pluginType: ldbmentryfetchstore nsslapd-pluginEnabled: on nsslapd-pluginId: test-entry
For an example plug-in functions that implement entry store and entry fetch operations, take a look at this source file:server_root /plugins/slapd/slapi/examples/testentry.c