From 8efb675f3e6ea74bbba2e3dc658680094643d4f7 Mon Sep 17 00:00:00 2001 From: Howard Chu Date: Thu, 28 Oct 1999 07:09:30 +0000 Subject: [PATCH] Added numsubordinates operational attribute --- servers/slapd/back-ldbm/search.c | 48 ++++++++++++++++++++++++++++++-- 1 file changed, 46 insertions(+), 2 deletions(-) diff --git a/servers/slapd/back-ldbm/search.c b/servers/slapd/back-ldbm/search.c index 67a6c82e17..b680818cd9 100644 --- a/servers/slapd/back-ldbm/search.c +++ b/servers/slapd/back-ldbm/search.c @@ -282,8 +282,52 @@ ldbm_back_search( } if (e) { - switch ( send_search_entry( be, conn, op, e, - attrs, attrsonly, NULL ) ) { + /* Tack on subordinates attr */ + int result; + ID_BLOCK *idl = NULL; + char CATTR_SUBS[] = "numsubordinates"; + + if (attrs && + charray_inlist(attrs, + CATTR_SUBS)) + { + idl = dn2idl(be, e->e_ndn, + DN_ONE_PREFIX); + if (idl) + { + char buf[30]; + struct berval val, *vals[2]; + + vals[0] = &val; + vals[1] = NULL; + + sprintf(buf, "%lu", + ID_BLOCK_NIDS(idl)); + + val.bv_val = buf; + val.bv_len = strlen(buf); + + attr_merge(e, CATTR_SUBS, + vals); + } + } + + result = send_search_entry(be, + conn, + op, + e, + attrs, + attrsonly, + NULL); + if (idl) + { + idl_free(idl); + attr_delete(&e->e_attrs, + CATTR_SUBS); + } + + switch (result) + { case 0: /* entry sent ok */ nentries++; break;