Skip Navigation Links | |
Exit Print View | |
Oracle Directory Server Enterprise Edition Developer's Guide 11 g Release 1 (11.1.1.5.0) |
Part I Directory Server Plug-In API Guide
1. Before You Start Writing Plug-Ins
2. Changes to the Plug-In API Since Directory Server 5.2
3. Getting Started With Directory Server Plug-Ins
4. Working With Entries Using Plug-Ins
Getting Entry Attributes and Attribute Values
Adding and Removing Attribute Values
Verifying Schema Compliance for an Entry
Handling Entry Distinguished Names
Getting the Parent and Suffix DNs
Determining Whether a Suffix Is Served Locally
Is the User the Directory Manager?
5. Extending Client Request Handling Using Plug-Ins
6. Handling Authentication Using Plug-Ins
7. Performing Internal Operations With Plug-Ins
8. Writing Entry Store and Entry Fetch Plug-Ins
9. Writing Extended Operation Plug-Ins
10. Writing Matching Rule Plug-Ins
11. Writing Password Storage Scheme Plug-Ins
12. Writing Password Quality Check Plug-Ins
13. Writing Computed Attribute Plug-Ins
Part II Directory Server Plug-In API Reference
14. Data Type and Structure Reference
15. Function Reference, Part I
16. Function Reference, Part II
This section shows how to use the plug-in API to convert entries that are represented in LDIF to Slapi_Entry structures. This section also shows how to convert Slapi_Entry structures to LDIF strings.
LDIF files appear as a series of human-readable representations of directory entries, and optionally access control instructions. Entries that are represented in LDIF start with a line for the distinguished name. The LDIF representation continues with optional lines for the attributes. The syntax is shown in the following example.
Example 4-2 LDIF Syntax Representing an Entry
dn:[:] dn-value\n [attribute:[:] value\n] [attribute:[:] value\n] [single-space continued-value\n]*
A double colon, ::, indicates that the value is base64-encoded. Base64-encoded values can, for example, have a line break in the midst of an attribute value.
As shown in the preceding example, LDIF lines can be folded by leaving a single space at the beginning of the continued line.
Sample LDIF files can be found in install-path/ldif/.
Refer to Chapter 4, Directory Server LDIF and Search Filters, in Oracle Directory Server Enterprise Edition Reference for details on LDIF syntax.
You can achieve this type of conversion by using slapi_str2entry(). The function takes as its two arguments the string to convert and an int holding flag of the form SLAPI_STR2ENTRY_* in slapi-plugin.h. The function returns a pointer to a Slapi_Entry if successful, NULL otherwise, as shown in the following example.
Example 4-3 Converting To and From LDIF Strings (entries.c)
#include "slapi-plugin.h" #define LDIF_STR "dn: dc=example,dc=com\nobjectclass: \ top\nobjectclass: domain\ndc: example\n" int test_ldif() { char * ldif = NULL; /* Example LDIF string */ Slapi_Entry * entry = NULL; /* Entry to hold LDIF */ char * str = NULL; /* String to hold entry */ int len; /* Length of entry as LDIF */ /* LDIF to Slapi_Entry */ entry = slapi_entry_alloc(); ldif = slapi_ch_strdup(LDIF_STR); entry = slapi_str2entry(ldif, SLAPI_STR2ENTRY_ADDRDNVALS); slapi_ch_free_string(&ldif); if (entry == NULL) return (-1); /* Slapi_Entry to LDIF */ str = slapi_entry2str(entry, &len); if (str == NULL) return (-1); slapi_log_info_ex( SLAPI_LOG_INFO_AREA_PLUGIN, SLAPI_LOG_INFO_LEVEL_DEFAULT, SLAPI_LOG_NO_MSGID, SLAPI_LOG_NO_CONNID, SLAPI_LOG_NO_OPID, "test_ldif in test-entries plug-in", "\nOriginal entry:\n%sEntry length: %d\n", str, len ); slapi_entry_free(entry); return (0); }
Here, SLAPI_STR2ENTRY_ADDRDNVALS adds any missing relative distinguished name (RDN) values, as specified in slapi-plugin.h where supported flags for slapi_str2entry() are listed.
You can achieve this type of conversion by using slapi_entry2str(). This function takes as its two arguments the entry to convert and an int to hold the length of the string that is returned. The function returns a char * to the LDIF if successful, NULL otherwise, as shown in Example 38–3.