Use the slapi_dn_parent() function to return the parent and slapi_dn_beparent() to return the suffix associated with the entry, as shown in the following example.
#include "slapi-plugin.h"
int
test_dns(Slapi_PBlock * pb)
{
char * bind_DN; /* DN being used to bind */
char * parent_DN; /* DN of parent entry */
char * suffix_DN; /* DN of suffix entry */
int connId, opId, rc = 0;
long msgId;
rc |= slapi_pblock_get(pb, SLAPI_BIND_TARGET, &bind_DN);
rc |= slapi_pblock_get(pb, SLAPI_OPERATION_MSGID, &msgId);
rc |= slapi_pblock_get(pb, SLAPI_CONN_ID, &connId);
rc |= slapi_pblock_get(pb, SLAPI_OPERATION_ID, &opId);
if (rc != 0) return (-1);
/* Get the parent DN of the DN being used to bind. */
parent_DN = slapi_dn_parent(bind_DN);
slapi_log_info_ex(
SLAPI_LOG_INFO_AREA_PLUGIN,
SLAPI_LOG_INFO_LEVEL_DEFAULT,
msgId,
connId,
opId,
"test_dns in test-dns plug-in",
"Parent DN of %s: %s\n", bind_DN, parent_DN
);
/* Get the suffix DN of the DN being used to bind. */
suffix_DN = slapi_dn_beparent(pb, bind_DN);
if (suffix_DN != NULL) {
slapi_log_info_ex(
SLAPI_LOG_INFO_AREA_PLUGIN,
SLAPI_LOG_INFO_LEVEL_DEFAULT,
msgId,
connId,
opId,
"test_dns in test-dns plug-in",
"Suffix for user (%s) is (%s).\n", bind_DN, suffix_DN
);
}
return rc;
}
Notice that the suffix and parent DNs can be the same if the tree is not complex. For example, if the bind_DN is uid=bjensen,ou=People,dc=example,dc=com, the parent is ou=People,dc=example,dc=com. In this case, the parent is the same as the suffix.