--- servers/slapd/overlays/pcache.c 2005/05/10 16:07:04 1.41.2.3 +++ servers/slapd/overlays/pcache.c 2005/06/03 19:54:17 1.41.2.4 @@ -1,4 +1,4 @@ -/* $OpenLDAP: pkg/ldap/servers/slapd/overlays/pcache.c,v 1.41.2.2 2005/04/29 21:29:10 kurt Exp $ */ +/* $OpenLDAP: pkg/ldap/servers/slapd/overlays/pcache.c,v 1.53 2005/05/24 15:13:37 hyc Exp $ */ /* This work is part of OpenLDAP Software . * * Copyright 2003-2005 The OpenLDAP Foundation. @@ -636,10 +636,12 @@ free_query (CachedQuery* qc) free(qc->q_uuid.bv_val); filter_free(q->filter); free (q->base.bv_val); - for (i=0; q->attrs[i].an_name.bv_val; i++) { - free(q->attrs[i].an_name.bv_val); + if ( q->attrs ) { + for (i=0; q->attrs[i].an_name.bv_val; i++) { + free(q->attrs[i].an_name.bv_val); + } + free(q->attrs); } - free(q->attrs); free(qc); } @@ -984,8 +986,9 @@ filter2template( (*filter_attrs)[*filter_cnt].an_desc = ad; (*filter_attrs)[*filter_cnt].an_name = ad->ad_cname; - (*filter_attrs)[*filter_cnt+1].an_name.bv_val = NULL; - (*filter_attrs)[*filter_cnt+1].an_name.bv_len = 0; + (*filter_attrs)[*filter_cnt].an_oc = NULL; + (*filter_attrs)[*filter_cnt].an_oc_exclude = 0; + BER_BVZERO( &(*filter_attrs)[*filter_cnt+1].an_name ); (*filter_cnt)++; return 0; } @@ -1010,7 +1013,6 @@ cache_entries( slap_overinst *on = si->on; cache_manager *cm = on->on_bi.bi_private; query_manager* qm = cm->qm; - int i; int return_val = 0; Entry *e; struct berval crp_uuid; @@ -1166,10 +1168,11 @@ add_filter_attrs( *new_attrs = (AttributeName*)(op->o_tmpalloc((count+1)* sizeof(AttributeName), op->o_tmpmemctx)); if (attrs == NULL) { - (*new_attrs)[0].an_name.bv_val = "*"; - (*new_attrs)[0].an_name.bv_len = 1; - (*new_attrs)[1].an_name.bv_val = NULL; - (*new_attrs)[1].an_name.bv_len = 0; + BER_BVSTR( &(*new_attrs)[0].an_name, "*" ); + (*new_attrs)[0].an_desc = NULL; + (*new_attrs)[0].an_oc = NULL; + (*new_attrs)[0].an_oc_exclude = 0; + BER_BVZERO( &(*new_attrs)[1].an_name ); alluser = 1; allop = 0; } else { @@ -1177,8 +1180,7 @@ add_filter_attrs( (*new_attrs)[i].an_name = attrs[i].an_name; (*new_attrs)[i].an_desc = attrs[i].an_desc; } - (*new_attrs)[count].an_name.bv_val = NULL; - (*new_attrs)[count].an_name.bv_len = 0; + BER_BVZERO( &(*new_attrs)[count].an_name ); alluser = an_find(*new_attrs, &AllUser); allop = an_find(*new_attrs, &AllOper); } @@ -1195,9 +1197,10 @@ add_filter_attrs( (count+2)*sizeof(AttributeName), op->o_tmpmemctx)); (*new_attrs)[count].an_name = filter_attrs[i].an_name; (*new_attrs)[count].an_desc = filter_attrs[i].an_desc; + (*new_attrs)[count].an_oc = NULL; + (*new_attrs)[count].an_oc_exclude = 0; count++; - (*new_attrs)[count].an_name.bv_val = NULL; - (*new_attrs)[count].an_name.bv_len = 0; + BER_BVZERO( &(*new_attrs)[count].an_name ); } } @@ -1215,7 +1218,6 @@ proxy_cache_search( int i = -1; AttributeName *filter_attrs = NULL; - AttributeName *new_attrs = NULL; Query query; @@ -1312,15 +1314,18 @@ proxy_cache_search( for ( count = 0; !BER_BVISNULL( &op->ors_attrs[ count ].an_name ); count++ ) { ber_dupbv( &query.attrs[count].an_name, &op->ors_attrs[count].an_name ); query.attrs[count].an_desc = op->ors_attrs[count].an_desc; + query.attrs[count].an_oc = op->ors_attrs[count].an_oc; + query.attrs[count].an_oc_exclude = op->ors_attrs[count].an_oc_exclude; } if ( oc_attr_absent ) { query.attrs[ count ].an_desc = slap_schema.si_ad_objectClass; ber_dupbv( &query.attrs[count].an_name, &slap_schema.si_ad_objectClass->ad_cname ); + query.attrs[ count ].an_oc = NULL; + query.attrs[ count ].an_oc_exclude = 0; count++; } - query.attrs[ count ].an_name.bv_val = NULL; - query.attrs[ count ].an_name.bv_len = 0; + BER_BVZERO( &query.attrs[ count ].an_name ); } add_filter_attrs(op, &op->ors_attrs, query.attrs, filter_attrs); @@ -1808,9 +1813,10 @@ pc_cf_gen( ConfigArgs *c ) qm->attr_sets[num].count = 0; return 1; } + attr_name->an_oc = NULL; + attr_name->an_oc_exclude = 0; attr_name++; - attr_name->an_name.bv_val = NULL; - attr_name->an_name.bv_len = 0; + BER_BVZERO( &attr_name->an_name ); } } break; @@ -1935,17 +1941,6 @@ proxy_cache_open( slap_overinst *on = (slap_overinst *)be->bd_info; cache_manager *cm = on->on_bi.bi_private; int rc = 0; - int i; - - /* consistency check (add more...) */ - for ( i = 0; i < cm->numattrsets; i++ ) { - if ( cm->qm->attr_sets[i].attrs == NULL ) { - Debug( LDAP_DEBUG_ANY, "proxy_cache_open(): " - "attr set %d (of %d) missing\n", - i, cm->numattrsets, 0 ); - return 1; - } - } /* need to inherit something from the original database... */ cm->db.be_def_limit = be->be_def_limit; @@ -2071,7 +2066,7 @@ int pcache_init() return code; } - proxy_cache.on_bi.bi_type = "proxycache"; + proxy_cache.on_bi.bi_type = "pcache"; proxy_cache.on_bi.bi_db_init = proxy_cache_init; proxy_cache.on_bi.bi_db_config = proxy_cache_config; proxy_cache.on_bi.bi_db_open = proxy_cache_open;