X-Git-Url: https://git.sur5r.net/?a=blobdiff_plain;f=servers%2Fslapd%2Fback-ldap%2Finit.c;h=3beaec8d57f53ff4927794653b66f08d081d10ee;hb=44c2d8a7715f0170dfd396b4067b66ba40f1f369;hp=aed385cfd75443a18265202f3592971c2bf8e8bc;hpb=d492880870df1571e8c8be2fc0b6aa4197c48b14;p=openldap diff --git a/servers/slapd/back-ldap/init.c b/servers/slapd/back-ldap/init.c index aed385cfd7..3beaec8d57 100644 --- a/servers/slapd/back-ldap/init.c +++ b/servers/slapd/back-ldap/init.c @@ -1,7 +1,7 @@ /* init.c - initialize ldap backend */ /* $OpenLDAP$ */ /* - * Copyright 1998-1999 The OpenLDAP Foundation, All Rights Reserved. + * Copyright 1998-2003 The OpenLDAP Foundation, All Rights Reserved. * COPYING RESTRICTIONS APPLY, see COPYRIGHT file */ /* This is an altered version */ @@ -64,6 +64,8 @@ ldap_back_initialize( BackendInfo *bi ) { + bi->bi_controls = slap_known_controls; + bi->bi_open = 0; bi->bi_config = 0; bi->bi_close = 0; @@ -74,7 +76,6 @@ ldap_back_initialize( bi->bi_db_open = 0; bi->bi_db_close = 0; bi->bi_db_destroy = ldap_back_db_destroy; - bi->bi_db_sync = 0; bi->bi_op_bind = ldap_back_bind; bi->bi_op_unbind = 0; @@ -86,11 +87,10 @@ ldap_back_initialize( bi->bi_op_delete = ldap_back_delete; bi->bi_op_abandon = 0; - bi->bi_extended = 0; + bi->bi_extended = ldap_back_extended; - bi->bi_acl_group = ldap_back_group; - bi->bi_acl_attribute = ldap_back_attribute; bi->bi_chk_referrals = 0; + bi->bi_entry_get_rw = ldap_back_entry_get; bi->bi_connection_init = 0; bi->bi_connection_destroy = ldap_back_conn_destroy; @@ -111,6 +111,11 @@ ldap_back_db_init( return -1; } + li->binddn.bv_val = NULL; + li->binddn.bv_len = 0; + li->bindpw.bv_val = NULL; + li->bindpw.bv_len = 0; + #ifdef ENABLE_REWRITE li->rwinfo = rewrite_info_init( REWRITE_MODE_USE_DEFAULT ); if ( li->rwinfo == NULL ) { @@ -121,39 +126,40 @@ ldap_back_db_init( ldap_pvt_thread_mutex_init( &li->conn_mutex ); - mapping = (struct ldapmapping *)ch_calloc( 2, sizeof(struct ldapmapping) ); - if ( mapping != NULL ) { - mapping->src = ch_strdup("objectclass"); - mapping->dst = ch_strdup("objectclass"); - mapping[1].src = mapping->src; - mapping[1].dst = mapping->dst; - - avl_insert( &li->at_map.map, (caddr_t)mapping, - mapping_cmp, mapping_dup ); - avl_insert( &li->at_map.remap, (caddr_t)&mapping[1], - mapping_cmp, mapping_dup ); - } + ldap_back_map_init( &li->at_map, &mapping ); + li->be = be; be->be_private = li; return 0; } -static void -conn_free( - struct ldapconn *lc +void +ldap_back_conn_free( + void *v_lc ) { - ldap_unbind(lc->ld); - if ( lc->bound_dn) free( lc->bound_dn ); - free( lc ); + struct ldapconn *lc = v_lc; + ldap_unbind( lc->ld ); + if ( lc->bound_dn.bv_val ) { + ch_free( lc->bound_dn.bv_val ); + } + if ( lc->cred.bv_val ) { + ch_free( lc->cred.bv_val ); + } + if ( lc->local_dn.bv_val ) { + ch_free( lc->local_dn.bv_val ); + } + ldap_pvt_thread_mutex_destroy( &lc->lc_mutex ); + ch_free( lc ); } void -mapping_free ( struct ldapmapping *mapping ) +mapping_free( void *v_mapping ) { - ch_free( mapping->src ); - ch_free( mapping->dst ); + struct ldapmapping *mapping = v_mapping; + ch_free( mapping->src.bv_val ); + ch_free( mapping->dst.bv_val ); ch_free( mapping ); } @@ -170,19 +176,19 @@ ldap_back_db_destroy( ldap_pvt_thread_mutex_lock( &li->conn_mutex ); if (li->url) { - free(li->url); + ch_free(li->url); li->url = NULL; } - if (li->binddn) { - free(li->binddn); - li->binddn = NULL; + if (li->binddn.bv_val) { + ch_free(li->binddn.bv_val); + li->binddn.bv_val = NULL; } - if (li->bindpw) { - free(li->bindpw); - li->bindpw = NULL; + if (li->bindpw.bv_val) { + ch_free(li->bindpw.bv_val); + li->bindpw.bv_val = NULL; } if (li->conntree) { - avl_free( li->conntree, (AVL_FREE) conn_free ); + avl_free( li->conntree, ldap_back_conn_free ); } #ifdef ENABLE_REWRITE if (li->rwinfo) { @@ -190,19 +196,19 @@ ldap_back_db_destroy( } #else /* !ENABLE_REWRITE */ if (li->suffix_massage) { - ldap_value_free( li->suffix_massage ); + ber_bvarray_free( li->suffix_massage ); } #endif /* !ENABLE_REWRITE */ avl_free( li->oc_map.remap, NULL ); - avl_free( li->oc_map.map, (AVL_FREE) mapping_free ); + avl_free( li->oc_map.map, mapping_free ); avl_free( li->at_map.remap, NULL ); - avl_free( li->at_map.map, (AVL_FREE) mapping_free ); + avl_free( li->at_map.map, mapping_free ); ldap_pvt_thread_mutex_unlock( &li->conn_mutex ); ldap_pvt_thread_mutex_destroy( &li->conn_mutex ); } - free( be->be_private ); + ch_free( be->be_private ); return 0; }