add bdb_hasSubordinates() helper

This commit is contained in:
Pierangelo Masarati 2002-08-29 10:50:53 +00:00
parent d855f97372
commit f4c5362955
2 changed files with 56 additions and 21 deletions

View File

@ -20,27 +20,20 @@
*/
int
bdb_operational(
bdb_hasSubordinates(
BackendDB *be,
Connection *conn,
Operation *op,
Entry *e,
AttributeName *attrs,
int opattrs,
Attribute **a )
int *hasSubordinates )
{
struct bdb_info *bdb = (struct bdb_info *) be->be_private;
Attribute **aa = a;
int rc;
DB_TXN *ltid = NULL;
struct bdb_op_info opinfo;
struct bdb_op_info opinfo;
assert( e );
if ( !opattrs && !ad_inlist( slap_schema.si_ad_hasSubordinates, attrs ) ) {
return 0;
}
assert( hasSubordinates );
if( 0 ) {
retry: /* transaction retry */
@ -51,9 +44,9 @@ retry: /* transaction retry */
#endif
#ifdef NEW_LOGGING
LDAP_LOG ( OPERATION, DETAIL1,
"=> bdb_operational: retrying...\n", 0, 0, 0 );
"=> bdb_hasSubordinates: retrying...\n", 0, 0, 0 );
#else
Debug( LDAP_DEBUG_TRACE, "==> bdb_operational: retrying...\n",
Debug( LDAP_DEBUG_TRACE, "==> bdb_hasSubordinates: retrying...\n",
0, 0, 0 );
#endif
rc = TXN_ABORT( ltid );
@ -71,11 +64,11 @@ retry: /* transaction retry */
if ( rc != 0 ) {
#ifdef NEW_LOGGING
LDAP_LOG ( OPERATION, ERR,
"=> bdb_operational: txn_begin failed: %s (%d)\n",
"=> bdb_hasSubordinates: txn_begin failed: %s (%d)\n",
db_strerror(rc), rc, 0 );
#else
Debug( LDAP_DEBUG_TRACE,
"bdb_operational: txn_begin failed: %s (%d)\n",
"bdb_hasSubordinates: txn_begin failed: %s (%d)\n",
db_strerror( rc ), rc, 0 );
#endif
rc = LDAP_OTHER;
@ -95,21 +88,22 @@ retry: /* transaction retry */
goto retry;
case 0:
*hasSubordinates = LDAP_COMPARE_TRUE;
break;
case DB_NOTFOUND:
*aa = slap_operational_hasSubordinate( rc == 0 );
if ( *aa != NULL ) {
aa = &(*aa)->a_next;
}
*hasSubordinates = LDAP_COMPARE_FALSE;
rc = LDAP_SUCCESS;
break;
default:
#ifdef NEW_LOGGING
LDAP_LOG ( OPERATION, ERR,
"=> bdb_operational: has_children failed: %s (%d)\n",
"=> bdb_hasSubordinates: has_children failed: %s (%d)\n",
db_strerror(rc), rc, 0 );
#else
Debug(LDAP_DEBUG_ARGS,
"<=- bdb_operational: has_children failed: %s (%d)\n",
"<=- bdb_hasSubordinates: has_children failed: %s (%d)\n",
db_strerror(rc), rc, 0 );
#endif
rc = LDAP_OTHER;
@ -130,3 +124,33 @@ return_results:
return rc;
}
int
bdb_operational(
BackendDB *be,
Connection *conn,
Operation *op,
Entry *e,
AttributeName *attrs,
int opattrs,
Attribute **a )
{
Attribute **aa = a;
int rc = 0;
assert( e );
if ( opattrs || ad_inlist( slap_schema.si_ad_hasSubordinates, attrs ) ) {
int hasSubordinates;
rc = bdb_hasSubordinates( be, conn, op, e, &hasSubordinates );
if ( rc == LDAP_SUCCESS ) {
*aa = slap_operational_hasSubordinate( hasSubordinates == LDAP_COMPARE_TRUE );
if ( *aa != NULL ) {
aa = &(*aa)->a_next;
}
}
}
return rc;
}

View File

@ -300,6 +300,17 @@ int bdb_modify_internal(
char *textbuf,
size_t textlen );
/*
* operational.c
*/
int
bdb_hasSubordinates(
BackendDB *be,
Connection *conn,
Operation *op,
Entry *e,
int *hasSubordinates );
/*
* passwd.c
*/