mirror of
https://git.openldap.org/openldap/openldap.git
synced 2024-12-21 03:10:25 +08:00
add bdb_hasSubordinates() helper
This commit is contained in:
parent
d855f97372
commit
f4c5362955
@ -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;
|
||||
}
|
||||
|
||||
|
@ -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
|
||||
*/
|
||||
|
Loading…
Reference in New Issue
Block a user