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.