Use slapi_dn_isbesuffix() function which takes as its two arguments a parameter block and a char * to the root suffix DN, as demonstrated 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 */
slapi_pblock_get(pb, SLAPI_BIND_TARGET, &bind_DN);
/* Get the suffix DN of the DN being used to bind. */
suffix_DN = slapi_dn_beparent(pb, bind_DN);
/* Climb the tree to the top suffix and check if it is local. */
while (suffix_DN != NULL &&
!slapi_dn_isbesuffix(pb, suffix_DN)) {
suffix_DN = slapi_dn_parent(suffix_DN);
}
if (suffix_DN != NULL) {
/* Suffix is served locally. */ ;
} else {
/* Suffix is not served locally. */ ;
}
return 0;
}
Notice the use of slapi_dn_isbesuffix() to move up the tree. Notice also that slapi_dn_parent() keeps working away at the DN until the DN that is left is NULL. The parent does not necessarily correspond to an actual entry.