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.
#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.