diff --git a/servers/slapd/back-bdb2/init.c b/servers/slapd/back-bdb2/init.c index 396812ecda07c9a0af95161e60b79ebe21733b76..6fc605014e178a1d1d6d6fc89b3bda66d20a7688 100644 --- a/servers/slapd/back-bdb2/init.c +++ b/servers/slapd/back-bdb2/init.c @@ -66,6 +66,9 @@ bdb2_back_initialize( bi->bi_acl_group = bdb2_back_group; #endif + bi->bi_connection_init = 0; + bi->bi_connection_destroy = 0; + ret = bdb2i_back_init_private( bi ); Debug( LDAP_DEBUG_TRACE, "bdb2_back_initialize: done (%d).\n", ret, 0, 0 ); diff --git a/servers/slapd/back-ldap/init.c b/servers/slapd/back-ldap/init.c index 0665262b757aab3975851298fc27b9c82f5288f0..e625d50e687420912bf857df0e111231b6b8dd1c 100644 --- a/servers/slapd/back-ldap/init.c +++ b/servers/slapd/back-ldap/init.c @@ -60,6 +60,9 @@ ldap_back_initialize( bi->bi_acl_group = 0; #endif + bi->bi_connection_init = 0; + bi->bi_connection_destroy = 0; + return 0; } diff --git a/servers/slapd/back-ldbm/init.c b/servers/slapd/back-ldbm/init.c index 34bceb7967a1dfade18a5ee929b31166a27a464a..67f40f83a581b4cf49d7933cb0d9d15399c68da1 100644 --- a/servers/slapd/back-ldbm/init.c +++ b/servers/slapd/back-ldbm/init.c @@ -41,6 +41,9 @@ ldbm_back_initialize( bi->bi_acl_group = ldbm_back_group; #endif + bi->bi_connection_init = 0; + bi->bi_connection_destroy = 0; + return 0; } diff --git a/servers/slapd/back-passwd/init.c b/servers/slapd/back-passwd/init.c index ec01e90289743c63d9570835e59ff5417d0cfda9..b0605f5513f355530210bba69b0307b89a22d1b3 100644 --- a/servers/slapd/back-passwd/init.c +++ b/servers/slapd/back-passwd/init.c @@ -39,5 +39,8 @@ passwd_back_initialize( bi->bi_acl_group = 0; #endif + bi->bi_connection_init = 0; + bi->bi_connection_destroy = 0; + return 0; } diff --git a/servers/slapd/back-perl/init.c b/servers/slapd/back-perl/init.c index 59fecd7d6ded0563f2677186f0153cd076fcf83c..4717b6f199fcabcb80a45b91b185079b6278e9c1 100644 --- a/servers/slapd/back-perl/init.c +++ b/servers/slapd/back-perl/init.c @@ -80,6 +80,9 @@ perl_back_initialize( bi->bi_acl_group = 0; #endif + bi->bi_connection_init = 0; + bi->bi_connection_destroy = 0; + return 0; } diff --git a/servers/slapd/back-shell/init.c b/servers/slapd/back-shell/init.c index 261c79521097d02c90c89e4008d1c77562addf07..b73c96648fff45980dae6e90f5f6742d2906e43d 100644 --- a/servers/slapd/back-shell/init.c +++ b/servers/slapd/back-shell/init.c @@ -39,6 +39,9 @@ shell_back_initialize( bi->bi_acl_group = 0; #endif + bi->bi_connection_init = 0; + bi->bi_connection_destroy = 0; + return 0; } diff --git a/servers/slapd/back-tcl/tcl_init.c b/servers/slapd/back-tcl/tcl_init.c index 925ce14f417250001be3fb27a04ac1ec880b935f..4af70c4e28576a75237b97f6e75360559a91549b 100644 --- a/servers/slapd/back-tcl/tcl_init.c +++ b/servers/slapd/back-tcl/tcl_init.c @@ -1,6 +1,6 @@ /* tcl_init.c - tcl backend initialization * - * $Id: tcl_init.c,v 1.5 1999/02/20 07:53:48 hallvard Exp $ + * $Id: tcl_init.c,v 1.6 1999/03/03 16:02:10 hallvard Exp $ * * Copyright 1999, Ben Collins <bcollins@debian.org>, All rights reserved. * @@ -63,6 +63,9 @@ tcl_back_initialize ( bi->bi_acl_group = 0; #endif + bi->bi_connection_init = 0; + bi->bi_connection_destroy = 0; + return 0; } diff --git a/servers/slapd/backend.c b/servers/slapd/backend.c index 716fac39fcb8e61989e7c0ca2f395e95052e0436..eb0e3a31942b9e06296647f33b20e7f0958c0154 100644 --- a/servers/slapd/backend.c +++ b/servers/slapd/backend.c @@ -518,6 +518,38 @@ backend_unbind( return 0; } +int +backend_connection_init( + Connection *conn +) +{ + int i; + + for ( i = 0; i < nbackends; i++ ) { + if ( backends[i].be_connection_init ) { + (*backends[i].be_connection_init)( &backends[i], conn); + } + } + + return 0; +} + +int +backend_connection_destroy( + Connection *conn +) +{ + int i; + + for ( i = 0; i < nbackends; i++ ) { + if ( backends[i].be_connection_destroy ) { + (*backends[i].be_connection_destroy)( &backends[i], conn); + } + } + + return 0; +} + #ifdef SLAPD_ACLGROUPS int backend_group( diff --git a/servers/slapd/connection.c b/servers/slapd/connection.c index 3cc267347f9295a07c9567bd4cb596555f7016dc..213f3f45d277a583f90880dc9ca4bb7210d52e44 100644 --- a/servers/slapd/connection.c +++ b/servers/slapd/connection.c @@ -374,6 +374,8 @@ long connection_init( ldap_pvt_thread_mutex_unlock( &c->c_mutex ); ldap_pvt_thread_mutex_unlock( &connections_mutex ); + backend_connection_init(c); + return id; } @@ -388,6 +390,8 @@ connection_destroy( Connection *c ) assert( c->c_conn_state != SLAP_C_INVALID ); assert( c->c_ops == NULL ); + backend_connection_destroy(c); + #ifdef LDAP_COMPAT30 c->c_version = 0; #endif diff --git a/servers/slapd/proto-slap.h b/servers/slapd/proto-slap.h index 58e92c964ab0db4ba5474c9153fee75a4d8297fc..0d461d63b5df9b9ecb6932dec4ad29b69ac7746f 100644 --- a/servers/slapd/proto-slap.h +++ b/servers/slapd/proto-slap.h @@ -89,6 +89,9 @@ int be_entry_release_rw LDAP_P(( Backend *be, Entry *e, int rw )); extern int backend_unbind LDAP_P((Connection *conn, Operation *op)); +extern int backend_connection_init LDAP_P((Connection *conn)); +extern int backend_connection_destroy LDAP_P((Connection *conn)); + extern int backend_group LDAP_P((Backend *be, Entry *target, char *gr_ndn, char *op_ndn, diff --git a/servers/slapd/slap.h b/servers/slapd/slap.h index cd89c3687fa47396ecdd300347ce15b8dac74c80..99e9747df5f2c43bdc2f719d27be4c15cbb33d94 100644 --- a/servers/slapd/slap.h +++ b/servers/slapd/slap.h @@ -341,6 +341,10 @@ struct backend_db { #define be_release bd_info->bi_entry_release_rw #define be_group bd_info->bi_acl_group +#define be_connection_init bd_info->bi_connection_init +#define be_connection_destroy bd_info->bi_connection_destroy + + /* these should be renamed from be_ to bd_ */ char **be_suffix; /* the DN suffixes of data in this backend */ char **be_nsuffix; /* the normalized DN suffixes in this backend */ @@ -461,6 +465,12 @@ struct backend_info { char *objectclassValue, char *groupattrName )); #endif + int (*bi_connection_init) LDAP_P((BackendDB *bd, + struct slap_conn *c)); + int (*bi_connection_destroy) LDAP_P((BackendDB *bd, + struct slap_conn *c)); + + unsigned int bi_nDB; /* number of databases of this type */ void *bi_private; /* anything the backend type needs */ };