/* * readPblockAndEntry - search for and read an entry * Return: * A pblock containing the entry, or NULL */ Slapi_PBlock * readPblockAndEntry( const char *baseDN, const char *filter, char *attrs[] ) { Slapi_PBlock *spb = NULL; BEGIN int sres; /* Perform the search - the new pblock needs to be freed */ spb = slapi_search_internal((char *)baseDN, LDAP_SCOPE_BASE, (char *)filter, NULL, attrs, 0); if ( !spb ) { op_error(20); break; } if ( slapi_pblock_get( spb, SLAPI_PLUGIN_INTOP_RESULT, &sres ) ) { op_error(21); break; } else if (sres) { op_error(22); break; } END return spb; }
/* * snmp_update_cache_stats() * * Reads the backend cache stats from the backend monitor entry and * updates the global counter used by the SNMP sub-agent as well as * the SNMP monitor entry. */ static void snmp_update_cache_stats(void) { Slapi_Backend *be, *be_next; char *cookie = NULL; Slapi_PBlock *search_result_pb = NULL; Slapi_Entry **search_entries; int search_result; /* set the cache hits/cache entries info */ be = slapi_get_first_backend(&cookie); if (!be){ slapi_ch_free ((void **) &cookie); return; } be_next = slapi_get_next_backend(cookie); slapi_ch_free ((void **) &cookie); /* for now, only do it if there is only 1 backend, otherwise don't know * which backend to pick */ if(be_next == NULL) { Slapi_DN monitordn; slapi_sdn_init(&monitordn); be_getmonitordn(be,&monitordn); /* do a search on the monitor dn to get info */ search_result_pb = slapi_search_internal( slapi_sdn_get_dn(&monitordn), LDAP_SCOPE_BASE, "objectclass=*", NULL, NULL, 0); slapi_sdn_done(&monitordn); slapi_pblock_get( search_result_pb, SLAPI_PLUGIN_INTOP_RESULT, &search_result); if(search_result == 0) { slapi_pblock_get( search_result_pb,SLAPI_PLUGIN_INTOP_SEARCH_ENTRIES, &search_entries); /* set the entrycachehits */ slapi_counter_set_value(g_get_global_snmp_vars()->entries_tbl.dsCacheHits, slapi_entry_attr_get_ulonglong(search_entries[0], "entrycachehits")); /* set the currententrycachesize */ slapi_counter_set_value(g_get_global_snmp_vars()->entries_tbl.dsCacheEntries, slapi_entry_attr_get_ulonglong(search_entries[0], "currententrycachesize")); } slapi_free_search_results_internal(search_result_pb); slapi_pblock_destroy(search_result_pb); } }
/* * dnHasAttribute - read an entry if it has a particular attribute * Return: * The entry, or NULL */ Slapi_PBlock * dnHasAttribute( const char *baseDN, const char *attrName ) { Slapi_PBlock *spb = NULL; char *filter = NULL; BEGIN int sres; Slapi_Entry **entries; char *attrs[2]; /* Perform the search - the new pblock needs to be freed */ attrs[0] = (char *)attrName; attrs[1] = NULL; filter = PR_smprintf( "%s=*", attrName ); spb = slapi_search_internal((char *)baseDN, LDAP_SCOPE_BASE, filter, NULL, attrs, 0); if ( !spb ) { op_error(20); break; } if ( slapi_pblock_get( spb, SLAPI_PLUGIN_INTOP_RESULT, &sres ) ) { op_error(21); break; } else if (sres) { op_error(22); break; } if ( slapi_pblock_get(spb, SLAPI_PLUGIN_INTOP_SEARCH_ENTRIES, &entries) ) { op_error(23); break; } /* * Can only be one entry returned on a base search; just check * the first one */ if ( !*entries ) { /* Clean up */ slapi_free_search_results_internal(spb); slapi_pblock_destroy(spb); spb = NULL; } END if (filter) { PR_smprintf_free(filter); } return spb; }