]> git.sur5r.net Git - openldap/commitdiff
Implement slapi_entry_has_children()
authorLuke Howard <lukeh@openldap.org>
Sun, 23 May 2004 12:06:47 +0000 (12:06 +0000)
committerLuke Howard <lukeh@openldap.org>
Sun, 23 May 2004 12:06:47 +0000 (12:06 +0000)
servers/slapd/slapi/proto-slapi.h
servers/slapd/slapi/slapi_ops.c
servers/slapd/slapi/slapi_utils.c

index 5036d022996f616ff867884772aa876a78d4e1a2..a4412be146337cb6af542793072dafe015f10942 100644 (file)
@@ -48,6 +48,8 @@ extern void slapi_entry_attr_set_uint( Slapi_Entry* e, const char *type, unsigne
 extern void slapi_entry_attr_set_long(Slapi_Entry* e, const char *type, long l);
 extern void slapi_entry_attr_set_ulong(Slapi_Entry* e, const char *type, unsigned long l);
 extern int slapi_is_rootdse( const char *dn );
+extern int slapi_entry_has_children(const Slapi_Entry *e);
+
 extern int slapi_entry_attr_merge_sv( Slapi_Entry *e, const char *type, Slapi_Value **vals );
 extern int slapi_entry_add_values_sv( Slapi_Entry *e, const char *type, Slapi_Value **vals );
 extern int slapi_entry_add_valueset(Slapi_Entry *e, const char *type, Slapi_ValueSet *vs);
@@ -297,6 +299,7 @@ extern Slapi_PBlock *slapi_modrdn_internal( char * olddn, char * newrdn,
                int deloldrdn, LDAPControl **controls, int log_change);
 extern char **slapi_get_supported_extended_ops(void);
 extern struct berval *slapi_int_get_supported_extop( int );
+Connection *slapi_int_init_connection(char *DN, int OpType);
 
 /*
  * Was: slapi_cl.h
index c001f0bbc3d2087cdbf7942999521a0375e2eb80..0640c72045c0b8b4ec100b801a90803dbf7bdd4e 100644 (file)
@@ -119,7 +119,7 @@ internal_search_reference(
        return LDAP_SUCCESS;
 }
 
-static Connection *
+Connection *
 slapi_int_init_connection(
        char *DN, 
        int OpType ) 
index d9ceeb43db86a6b71f12748b22f4e515d6bef7c1..735f81a65185e2eb7e72e540db9fda6f59a5b753 100644 (file)
@@ -109,7 +109,7 @@ bvptr2obj(
 Slapi_Entry *
 slapi_str2entry(
        char            *s, 
-       int             check_dup )
+       int             flags )
 {
 #ifdef LDAP_SLAPI
        Slapi_Entry     *e = NULL;
@@ -529,6 +529,35 @@ slapi_is_rootdse( const char *dn )
 #endif
 }
 
+int
+slapi_entry_has_children(const Slapi_Entry *e)
+{
+#ifdef LDAP_SLAPI
+       Connection *pConn;
+       Operation *op;
+       int hasSubordinates = 0;
+
+       pConn = slapi_int_init_connection( NULL, LDAP_REQ_SEARCH );
+       if ( pConn == NULL ) {
+               return 0;
+       }
+
+       op = (Operation *)pConn->c_pending_ops.stqh_first;
+       op->o_bd = select_backend( (struct berval *)&e->e_nname, 0, 0 );
+       if ( op->o_bd == NULL ) {
+               return 0;
+       }
+
+       op->o_bd->be_has_subordinates( op, (Entry *)e, &hasSubordinates );
+
+       slapi_int_connection_destroy( &pConn );
+
+       return ( hasSubordinates == LDAP_COMPARE_TRUE );
+#else
+       return 0;
+#endif
+}
+
 /*
  * Add values to entry.
  *