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.