mirror of
https://git.openldap.org/openldap/openldap.git
synced 2025-01-06 10:46:21 +08:00
add bdb_hasSubordinates() helper
This commit is contained in:
parent
d855f97372
commit
f4c5362955
@ -20,27 +20,20 @@
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
int
|
int
|
||||||
bdb_operational(
|
bdb_hasSubordinates(
|
||||||
BackendDB *be,
|
BackendDB *be,
|
||||||
Connection *conn,
|
Connection *conn,
|
||||||
Operation *op,
|
Operation *op,
|
||||||
Entry *e,
|
Entry *e,
|
||||||
AttributeName *attrs,
|
int *hasSubordinates )
|
||||||
int opattrs,
|
|
||||||
Attribute **a )
|
|
||||||
{
|
{
|
||||||
struct bdb_info *bdb = (struct bdb_info *) be->be_private;
|
struct bdb_info *bdb = (struct bdb_info *) be->be_private;
|
||||||
Attribute **aa = a;
|
|
||||||
int rc;
|
int rc;
|
||||||
DB_TXN *ltid = NULL;
|
DB_TXN *ltid = NULL;
|
||||||
struct bdb_op_info opinfo;
|
struct bdb_op_info opinfo;
|
||||||
|
|
||||||
assert( e );
|
assert( e );
|
||||||
|
assert( hasSubordinates );
|
||||||
if ( !opattrs && !ad_inlist( slap_schema.si_ad_hasSubordinates, attrs ) ) {
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
if( 0 ) {
|
if( 0 ) {
|
||||||
retry: /* transaction retry */
|
retry: /* transaction retry */
|
||||||
@ -51,9 +44,9 @@ retry: /* transaction retry */
|
|||||||
#endif
|
#endif
|
||||||
#ifdef NEW_LOGGING
|
#ifdef NEW_LOGGING
|
||||||
LDAP_LOG ( OPERATION, DETAIL1,
|
LDAP_LOG ( OPERATION, DETAIL1,
|
||||||
"=> bdb_operational: retrying...\n", 0, 0, 0 );
|
"=> bdb_hasSubordinates: retrying...\n", 0, 0, 0 );
|
||||||
#else
|
#else
|
||||||
Debug( LDAP_DEBUG_TRACE, "==> bdb_operational: retrying...\n",
|
Debug( LDAP_DEBUG_TRACE, "==> bdb_hasSubordinates: retrying...\n",
|
||||||
0, 0, 0 );
|
0, 0, 0 );
|
||||||
#endif
|
#endif
|
||||||
rc = TXN_ABORT( ltid );
|
rc = TXN_ABORT( ltid );
|
||||||
@ -71,11 +64,11 @@ retry: /* transaction retry */
|
|||||||
if ( rc != 0 ) {
|
if ( rc != 0 ) {
|
||||||
#ifdef NEW_LOGGING
|
#ifdef NEW_LOGGING
|
||||||
LDAP_LOG ( OPERATION, ERR,
|
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 );
|
db_strerror(rc), rc, 0 );
|
||||||
#else
|
#else
|
||||||
Debug( LDAP_DEBUG_TRACE,
|
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 );
|
db_strerror( rc ), rc, 0 );
|
||||||
#endif
|
#endif
|
||||||
rc = LDAP_OTHER;
|
rc = LDAP_OTHER;
|
||||||
@ -95,21 +88,22 @@ retry: /* transaction retry */
|
|||||||
goto retry;
|
goto retry;
|
||||||
|
|
||||||
case 0:
|
case 0:
|
||||||
|
*hasSubordinates = LDAP_COMPARE_TRUE;
|
||||||
|
break;
|
||||||
|
|
||||||
case DB_NOTFOUND:
|
case DB_NOTFOUND:
|
||||||
*aa = slap_operational_hasSubordinate( rc == 0 );
|
*hasSubordinates = LDAP_COMPARE_FALSE;
|
||||||
if ( *aa != NULL ) {
|
rc = LDAP_SUCCESS;
|
||||||
aa = &(*aa)->a_next;
|
|
||||||
}
|
|
||||||
break;
|
break;
|
||||||
|
|
||||||
default:
|
default:
|
||||||
#ifdef NEW_LOGGING
|
#ifdef NEW_LOGGING
|
||||||
LDAP_LOG ( OPERATION, ERR,
|
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 );
|
db_strerror(rc), rc, 0 );
|
||||||
#else
|
#else
|
||||||
Debug(LDAP_DEBUG_ARGS,
|
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 );
|
db_strerror(rc), rc, 0 );
|
||||||
#endif
|
#endif
|
||||||
rc = LDAP_OTHER;
|
rc = LDAP_OTHER;
|
||||||
@ -130,3 +124,33 @@ return_results:
|
|||||||
return rc;
|
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,
|
char *textbuf,
|
||||||
size_t textlen );
|
size_t textlen );
|
||||||
|
|
||||||
|
/*
|
||||||
|
* operational.c
|
||||||
|
*/
|
||||||
|
int
|
||||||
|
bdb_hasSubordinates(
|
||||||
|
BackendDB *be,
|
||||||
|
Connection *conn,
|
||||||
|
Operation *op,
|
||||||
|
Entry *e,
|
||||||
|
int *hasSubordinates );
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* passwd.c
|
* passwd.c
|
||||||
*/
|
*/
|
||||||
|
Loading…
Reference in New Issue
Block a user