-------------------------------------------------------------------------------- Profile data file 'callgrind.out.5117' (creator: callgrind-3.5.0) -------------------------------------------------------------------------------- I1 cache: D1 cache: L2 cache: Timerange: Basic block 0 - 457113822 Trigger: Program termination Profiled target: ../servers/slapd/slapd -f tmdb/slapd.1.conf -h ldap://:9001 -d none (PID 5117, part 1) Events recorded: Ir Events shown: Ir Event sort order: Ir Thresholds: 99 Include dirs: User annotated: Auto-annotation: on -------------------------------------------------------------------------------- Ir -------------------------------------------------------------------------------- 2,241,832,009 PROGRAM TOTALS -------------------------------------------------------------------------------- Ir file:function -------------------------------------------------------------------------------- 592,751,802 < /home/hyc/OD/hobj/servers/slapd/back-mdb/../../../../head/servers/slapd/back-mdb/id2entry.c:mdb_id2entry (250002x) [/home/hyc/OD/hobj/servers/slapd/slapd] 535,751,482 * /home/hyc/OD/hobj/servers/slapd/back-mdb/../../../../head/servers/slapd/back-mdb/id2entry.c:mdb_entry_decode [/home/hyc/OD/hobj/servers/slapd/slapd] 57,000,320 > /home/hyc/OD/hobj/servers/slapd/back-mdb/../../../../head/servers/slapd/back-mdb/id2entry.c:mdb_entry_alloc (250002x) [/home/hyc/OD/hobj/servers/slapd/slapd] 40,741,868 < /home/hyc/OD/hobj/servers/slapd/back-mdb/../../../../head/servers/slapd/back-mdb/../../../libraries/libmdb/mdb.c:mdb_cursor_set (1250041x) [/home/hyc/OD/hobj/servers/slapd/slapd] 350,322,298 < /home/hyc/OD/hobj/servers/slapd/back-mdb/../../../../head/servers/slapd/back-mdb/../../../libraries/libmdb/mdb.c:mdb_search_node (9861144x) [/home/hyc/OD/hobj/servers/slapd/slapd] 391,064,166 * /home/hyc/OD/hobj/servers/slapd/back-mdb/../../../../head/servers/slapd/back-mdb/../../../libraries/libmdb/mdb.c:cintcmp [/home/hyc/OD/hobj/servers/slapd/slapd] 193,172,410 < /home/hyc/OD/hobj/servers/slapd/back-mdb/../../../../head/servers/slapd/back-mdb/../../../libraries/libmdb/mdb.c:mdb_cursor_set (666301x) [/home/hyc/OD/hobj/servers/slapd/slapd] 206 < /home/hyc/OD/hobj/servers/slapd/back-mdb/../../../../head/servers/slapd/back-mdb/../../../libraries/libmdb/mdb.c:mdb_cursor_set'2 (1x) [/home/hyc/OD/hobj/servers/slapd/slapd] 507,500,870 < /home/hyc/OD/hobj/servers/slapd/back-mdb/../../../../head/servers/slapd/back-mdb/../../../libraries/libmdb/mdb.c:mdb_search_page_root (1250992x) [/home/hyc/OD/hobj/servers/slapd/slapd] 350,350,674 * /home/hyc/OD/hobj/servers/slapd/back-mdb/../../../../head/servers/slapd/back-mdb/../../../libraries/libmdb/mdb.c:mdb_search_node [/home/hyc/OD/hobj/servers/slapd/slapd] 410 > /home/hyc/OD/hobj/servers/slapd/back-mdb/../../../../head/servers/slapd/back-mdb/../../../libraries/libmdb/mdb.c:memncmp (20x) [/home/hyc/OD/hobj/servers/slapd/slapd] 350,322,298 > /home/hyc/OD/hobj/servers/slapd/back-mdb/../../../../head/servers/slapd/back-mdb/../../../libraries/libmdb/mdb.c:cintcmp (9861144x) [/home/hyc/OD/hobj/servers/slapd/slapd] 104 > /home/hyc/OD/hobj/servers/slapd/back-mdb/../../../../head/servers/slapd/back-mdb/dn2id.c:mdb_dup_compare (2x) [/home/hyc/OD/hobj/servers/slapd/slapd] 693,428,903 < /home/hyc/OD/hobj/servers/slapd/back-mdb/../../../../head/servers/slapd/back-mdb/../../../libraries/libmdb/mdb.c:mdb_search_page (833651x) [/home/hyc/OD/hobj/servers/slapd/slapd] 139,905,148 * /home/hyc/OD/hobj/servers/slapd/back-mdb/../../../../head/servers/slapd/back-mdb/../../../libraries/libmdb/mdb.c:mdb_search_page_root [/home/hyc/OD/hobj/servers/slapd/slapd] 507,500,870 > /home/hyc/OD/hobj/servers/slapd/back-mdb/../../../../head/servers/slapd/back-mdb/../../../libraries/libmdb/mdb.c:mdb_search_node (1250992x) [/home/hyc/OD/hobj/servers/slapd/slapd] 46,022,885 > /home/hyc/OD/hobj/servers/slapd/back-mdb/../../../../head/servers/slapd/back-mdb/../../../libraries/libmdb/mdb.c:mdb_get_page (2000995x) [/home/hyc/OD/hobj/servers/slapd/slapd] 1,112,866,972 < /home/hyc/OD/hobj/servers/slapd/back-mdb/../../../../head/servers/slapd/back-mdb/../../../libraries/libmdb/mdb.c:mdb_cursor_get (750008x) [/home/hyc/OD/hobj/servers/slapd/slapd] 2,439 < /home/hyc/OD/hobj/servers/slapd/back-mdb/../../../../head/servers/slapd/back-mdb/../../../libraries/libmdb/mdb.c:mdb_get (7x) [/home/hyc/OD/hobj/servers/slapd/slapd] 93,256,473 * /home/hyc/OD/hobj/servers/slapd/back-mdb/../../../../head/servers/slapd/back-mdb/../../../libraries/libmdb/mdb.c:mdb_cursor_set [/home/hyc/OD/hobj/servers/slapd/slapd] 668,197,598 > /home/hyc/OD/hobj/servers/slapd/back-mdb/../../../../head/servers/slapd/back-mdb/../../../libraries/libmdb/mdb.c:mdb_search_page (583649x) [/home/hyc/OD/hobj/servers/slapd/slapd] 86,500,346 > /home/hyc/OD/hobj/servers/slapd/back-mdb/../../../../head/servers/slapd/back-mdb/../../../libraries/libmdb/mdb.c:mdb_cursor_first (250001x) [/home/hyc/OD/hobj/servers/slapd/slapd] 22,500,180 > /home/hyc/OD/hobj/servers/slapd/back-mdb/../../../../head/servers/slapd/back-mdb/../../../libraries/libmdb/mdb.c:mdb_xcursor_init1 (250002x) [/home/hyc/OD/hobj/servers/slapd/slapd] 366 > /home/hyc/OD/hobj/servers/slapd/back-mdb/../../../../head/servers/slapd/back-mdb/../../../libraries/libmdb/mdb.c:mdb_cursor_set'2 (1x) [/home/hyc/OD/hobj/servers/slapd/slapd] 40,741,868 > /home/hyc/OD/hobj/servers/slapd/back-mdb/../../../../head/servers/slapd/back-mdb/../../../libraries/libmdb/mdb.c:cintcmp (1250041x) [/home/hyc/OD/hobj/servers/slapd/slapd] 193,172,410 > /home/hyc/OD/hobj/servers/slapd/back-mdb/../../../../head/servers/slapd/back-mdb/../../../libraries/libmdb/mdb.c:mdb_search_node (666301x) [/home/hyc/OD/hobj/servers/slapd/slapd] 8,500,170 > /home/hyc/OD/hobj/servers/slapd/back-mdb/../../../../head/servers/slapd/back-mdb/../../../libraries/libmdb/mdb.c:mdb_read_data (500010x) [/home/hyc/OD/hobj/servers/slapd/slapd] 83,500,204 < /home/hyc/OD/hobj/servers/slapd/../../../head/servers/slapd/attr.c:attrs_find (6500018x) [/home/hyc/OD/hobj/servers/slapd/slapd] 83,500,204 * /home/hyc/OD/hobj/servers/slapd/../../../head/servers/slapd/ad.c:is_ad_subtype [/home/hyc/OD/hobj/servers/slapd/slapd] 19,173,997 < /home/hyc/OD/hobj/servers/slapd/back-mdb/../../../../head/servers/slapd/back-mdb/../../../libraries/libmdb/mdb.c:mdb_search_page (833651x) [/home/hyc/OD/hobj/servers/slapd/slapd] 46,022,885 < /home/hyc/OD/hobj/servers/slapd/back-mdb/../../../../head/servers/slapd/back-mdb/../../../libraries/libmdb/mdb.c:mdb_search_page_root (2000995x) [/home/hyc/OD/hobj/servers/slapd/slapd] 65,196,882 * /home/hyc/OD/hobj/servers/slapd/back-mdb/../../../../head/servers/slapd/back-mdb/../../../libraries/libmdb/mdb.c:mdb_get_page [/home/hyc/OD/hobj/servers/slapd/slapd] 2,205,821,907 < /home/hyc/OD/hobj/servers/slapd/../../../head/servers/slapd/search.c:fe_op_search (1x) [/home/hyc/OD/hobj/servers/slapd/slapd] 61,750,661 * /home/hyc/OD/hobj/servers/slapd/back-mdb/../../../../head/servers/slapd/back-mdb/search.c:mdb_search [/home/hyc/OD/hobj/servers/slapd/slapd] 233 > /home/hyc/OD/hobj/servers/slapd/back-mdb/../../../../head/servers/slapd/back-mdb/../../../libraries/libmdb/mdb.c:mdb_cursor_get (1x) [/home/hyc/OD/hobj/servers/slapd/slapd] 45,173,036 > ???:memcpy (1500004x) [/lib/libc-2.11.2.so] 114 > /home/hyc/OD/hobj/servers/slapd/back-mdb/../../../../head/servers/slapd/back-mdb/../../../libraries/libmdb/mdb.c:mdb_cursor_close (1x) [/home/hyc/OD/hobj/servers/slapd/slapd] 43,000,345 > /home/hyc/OD/hobj/servers/slapd/back-mdb/../../../../head/servers/slapd/back-mdb/id2entry.c:mdb_entry_return (250002x) [/home/hyc/OD/hobj/servers/slapd/slapd] 11,228 > /home/hyc/OD/hobj/servers/slapd/back-mdb/../../../../head/servers/slapd/back-mdb/filterindex.c:mdb_filter_candidates (1x) [/home/hyc/OD/hobj/servers/slapd/slapd] 9,812 > /home/hyc/OD/hobj/servers/slapd/../../../head/servers/slapd/result.c:slap_send_ldap_result (1x) [/home/hyc/OD/hobj/servers/slapd/slapd] 313 > /home/hyc/OD/hobj/servers/slapd/back-mdb/../../../../head/servers/slapd/back-mdb/../../../libraries/libmdb/mdb.c:mdb_cursor_open (1x) [/home/hyc/OD/hobj/servers/slapd/slapd] 63 > /home/hyc/OD/hobj/servers/slapd/back-mdb/../../../../head/servers/slapd/back-mdb/idl.c:mdb_idl_insert (1x) [/home/hyc/OD/hobj/servers/slapd/slapd] 809,946,207 > /home/hyc/OD/hobj/servers/slapd/back-mdb/../../../../head/servers/slapd/back-mdb/id2entry.c:mdb_id2entry (250002x) [/home/hyc/OD/hobj/servers/slapd/slapd] 967,918,055 > /home/hyc/OD/hobj/servers/slapd/back-mdb/../../../../head/servers/slapd/back-mdb/dn2id.c:mdb_idscopes (250001x) [/home/hyc/OD/hobj/servers/slapd/slapd] 20 > /home/hyc/OD/hobj/servers/slapd/back-mdb/../../../../head/servers/slapd/back-mdb/idl.c:mdb_idl_first (1x) [/home/hyc/OD/hobj/servers/slapd/slapd] 21 > /home/hyc/OD/hobj/servers/slapd/back-mdb/../../../../head/servers/slapd/back-mdb/search.c:oc_filter (1x) [/home/hyc/OD/hobj/servers/slapd/slapd] 436 > /home/hyc/OD/hobj/servers/slapd/back-mdb/../../../../head/servers/slapd/back-mdb/search.c:search_stack (1x) [/home/hyc/OD/hobj/servers/slapd/slapd] 266 > /home/hyc/OD/hobj/servers/slapd/../../../head/servers/slapd/acl.c:access_allowed_mask (1x) [/home/hyc/OD/hobj/servers/slapd/slapd] 6,565 > /home/hyc/OD/hobj/servers/slapd/back-mdb/../../../../head/servers/slapd/back-mdb/dn2entry.c:mdb_dn2entry (1x) [/home/hyc/OD/hobj/servers/slapd/slapd] 2,250,018 > /home/hyc/OD/hobj/servers/slapd/back-mdb/../../../../head/servers/slapd/back-mdb/idl.c:mdb_idl_next (250002x) [/home/hyc/OD/hobj/servers/slapd/slapd] 260,751,096 > /home/hyc/OD/hobj/servers/slapd/../../../head/servers/slapd/filterentry.c:test_filter (250002x) [/home/hyc/OD/hobj/servers/slapd/slapd] 2,000,024 > ???:time (250003x) [/lib/libc-2.11.2.so] 18,500,074 > /home/hyc/OD/hobj/servers/slapd/../../../head/servers/slapd/sl_malloc.c:slap_sl_malloc (500002x) [/home/hyc/OD/hobj/servers/slapd/slapd] 3,305 > /home/hyc/OD/hobj/servers/slapd/back-mdb/../../../../head/servers/slapd/back-mdb/id2entry.c:mdb_opinfo_get (1x) [/home/hyc/OD/hobj/servers/slapd/slapd] 15 > /home/hyc/OD/hobj/servers/slapd/back-mdb/../../../../head/servers/slapd/back-mdb/../../../libraries/libmdb/mdb.c:mdb_txn_reset (1x) [/home/hyc/OD/hobj/servers/slapd/slapd] 140,750,372 < /home/hyc/OD/hobj/servers/slapd/../../../head/servers/slapd/filterentry.c:test_ava_filter (500002x) [/home/hyc/OD/hobj/servers/slapd/slapd] 57,250,168 * /home/hyc/OD/hobj/servers/slapd/../../../head/servers/slapd/attr.c:attrs_find [/home/hyc/OD/hobj/servers/slapd/slapd] 83,500,204 > /home/hyc/OD/hobj/servers/slapd/../../../head/servers/slapd/ad.c:is_ad_subtype (6500018x) [/home/hyc/OD/hobj/servers/slapd/slapd] 49 < ???:0x00000000000132c0'2 (2x) [/lib/ld-2.11.2.so] 375,504 < ???:_IO_getline_info (3866x) [/lib/libc-2.11.2.so] 728 < ???:0x0000000000097a30'2 (39x) [/lib/libc-2.11.2.so] 32,422 < ???:0x00000000000772e0 (308x) [/lib/libc-2.11.2.so] 168 < ???:0x00000000000355c0 (3x) [/lib/libc-2.11.2.so] 45,173,036 < /home/hyc/OD/hobj/servers/slapd/back-mdb/../../../../head/servers/slapd/back-mdb/search.c:mdb_search (1500004x) [/home/hyc/OD/hobj/servers/slapd/slapd] 4,730 < ???:getdelim (93x) [/lib/libc-2.11.2.so] 299 < ???:0x00000000000355c0'2 (5x) [/lib/libc-2.11.2.so] 431 < ???:_IO_sgetn (5x) [/lib/libc-2.11.2.so] 2,451 < ???:dcgettext (129x) [/lib/libc-2.11.2.so] 206 < ???:strdup (9x) [/lib/libc-2.11.2.so] 46 < ???:strerror_r (2x) [/lib/libc-2.11.2.so] 942 < ???:0x0000000000097a30 (32x) [/lib/libc-2.11.2.so] 156 < /home/hyc/OD/hobj/servers/slapd/back-mdb/../../../../head/servers/slapd/back-mdb/../../../libraries/libmdb/mdb.c:mdb_txn_begin (1x) [/home/hyc/OD/hobj/servers/slapd/slapd] 36 < ???:gethostname (2x) [/lib/libc-2.11.2.so] 234 < ???:__nss_database_lookup (10x) [/lib/libc-2.11.2.so] 156 < ???:0x00000000000132c0 (1x) [/lib/ld-2.11.2.so] 347 < ???:_sasl_load_plugins (13x) [/usr/lib/libsasl2.so.2.0.23] 86 < ???:lt__memdup (3x) [/usr/lib/libltdl.so.7.2.1] 39,904,109 * ???:memcpy [/lib/libc-2.11.2.so] 57,000,320 < /home/hyc/OD/hobj/servers/slapd/back-mdb/../../../../head/servers/slapd/back-mdb/id2entry.c:mdb_entry_decode (250002x) [/home/hyc/OD/hobj/servers/slapd/slapd] 38,500,172 * /home/hyc/OD/hobj/servers/slapd/back-mdb/../../../../head/servers/slapd/back-mdb/id2entry.c:mdb_entry_alloc [/home/hyc/OD/hobj/servers/slapd/slapd] 18,500,148 > /home/hyc/OD/hobj/servers/slapd/../../../head/servers/slapd/sl_malloc.c:slap_sl_malloc (500004x) [/home/hyc/OD/hobj/servers/slapd/slapd] 444 < /home/hyc/OD/hobj/servers/slapd/../../../head/servers/slapd/schema_check.c:structural_class (12x) [/home/hyc/OD/hobj/servers/slapd/slapd] 23,251 < /home/hyc/OD/hobj/servers/slapd/../../../head/servers/slapd/schema_init.c:generalizedTimeNormalize (132x) [/home/hyc/OD/hobj/servers/slapd/slapd] 18,500,074 < /home/hyc/OD/hobj/servers/slapd/back-mdb/../../../../head/servers/slapd/back-mdb/search.c:mdb_search (500002x) [/home/hyc/OD/hobj/servers/slapd/slapd] 28,575 < /home/hyc/OD/hobj/servers/slapd/../../../head/servers/slapd/dn.c:build_new_dn (139x) [/home/hyc/OD/hobj/servers/slapd/slapd] 665 < /home/hyc/OD/hobj/servers/slapd/../../../head/servers/slapd/schema_init.c:IA5StringNormalize (6x) [/home/hyc/OD/hobj/servers/slapd/slapd] 37 < /home/hyc/OD/hobj/servers/slapd/../../../head/servers/slapd/filter.c:get_filter (1x) [/home/hyc/OD/hobj/servers/slapd/slapd] 37 < /home/hyc/OD/hobj/servers/slapd/../../../head/servers/slapd/ava.c:get_ava (1x) [/home/hyc/OD/hobj/servers/slapd/slapd] 9,086 < /home/hyc/OD/hobj/servers/slapd/../../../head/servers/slapd/sl_malloc.c:slap_sl_calloc (38x) [/home/hyc/OD/hobj/servers/slapd/slapd] 18,500,148 < /home/hyc/OD/hobj/servers/slapd/back-mdb/../../../../head/servers/slapd/back-mdb/id2entry.c:mdb_entry_alloc (500004x) [/home/hyc/OD/hobj/servers/slapd/slapd] 37 < /home/hyc/OD/hobj/servers/slapd/../../../head/servers/slapd/filter.c:filter2bv_undef_x (1x) [/home/hyc/OD/hobj/servers/slapd/slapd] 74 < /home/hyc/OD/hobj/servers/slapd/back-mdb/../../../../head/servers/slapd/back-mdb/dn2id.c:mdb_dn2id (2x) [/home/hyc/OD/hobj/servers/slapd/slapd] 37 < /home/hyc/OD/hobj/servers/slapd/../../../head/servers/slapd/schema_init.c:octetStringFilter (1x) [/home/hyc/OD/hobj/servers/slapd/slapd] 592 < /home/hyc/OD/hobj/libraries/liblber/../../../head/libraries/liblber/memory.c:ber_memalloc_x (16x) [/home/hyc/OD/hobj/servers/slapd/slapd] 444 < /home/hyc/OD/hobj/servers/slapd/../../../head/servers/slapd/schema_init.c:UUIDNormalize (12x) [/home/hyc/OD/hobj/servers/slapd/slapd] 37,008,571 * /home/hyc/OD/hobj/servers/slapd/../../../head/servers/slapd/sl_malloc.c:slap_sl_malloc [/home/hyc/OD/hobj/servers/slapd/slapd] 54,930 > /home/hyc/OD/hobj/libraries/liblber/../../../head/libraries/liblber/memory.c:ber_memalloc_x (313x) [/home/hyc/OD/hobj/servers/slapd/slapd] 38,500,462 < /home/hyc/OD/hobj/servers/slapd/../../../head/servers/slapd/acl.c:fe_access_allowed (250003x) [/home/hyc/OD/hobj/servers/slapd/slapd] 36,500,438 * /home/hyc/OD/hobj/servers/slapd/../../../head/servers/slapd/acl.c:slap_access_allowed [/home/hyc/OD/hobj/servers/slapd/slapd] 2,000,024 > /home/hyc/OD/hobj/servers/slapd/../../../head/servers/slapd/backend.c:be_isroot (250003x) [/home/hyc/OD/hobj/servers/slapd/slapd] 420 < /home/hyc/OD/hobj/servers/slapd/../../../head/servers/slapd/schema_check.c:structural_class (12x) [/home/hyc/OD/hobj/servers/slapd/slapd] 75 < /home/hyc/OD/hobj/servers/slapd/../../../head/servers/slapd/filter.c:filter_free_x (1x) [/home/hyc/OD/hobj/servers/slapd/slapd] 99 < /home/hyc/OD/hobj/servers/slapd/../../../head/servers/slapd/search.c:do_search (3x) [/home/hyc/OD/hobj/servers/slapd/slapd] 64 < /home/hyc/OD/hobj/servers/slapd/../../../head/servers/slapd/ava.c:ava_free (2x) [/home/hyc/OD/hobj/servers/slapd/slapd] 532 < /home/hyc/OD/hobj/libraries/liblber/../../../head/libraries/liblber/memory.c:ber_memfree_x (14x) [/home/hyc/OD/hobj/servers/slapd/slapd] 71 < /home/hyc/OD/hobj/servers/slapd/../../../head/servers/slapd/bind.c:do_bind (2x) [/home/hyc/OD/hobj/servers/slapd/slapd] 35,000,281 < /home/hyc/OD/hobj/servers/slapd/back-mdb/../../../../head/servers/slapd/back-mdb/id2entry.c:mdb_entry_return (1000008x) [/home/hyc/OD/hobj/servers/slapd/slapd] 35 < /home/hyc/OD/hobj/servers/slapd/back-mdb/../../../../head/servers/slapd/back-mdb/dn2id.c:mdb_dn2id (1x) [/home/hyc/OD/hobj/servers/slapd/slapd] 27,320 < /home/hyc/OD/hobj/servers/slapd/../../../head/servers/slapd/attr.c:attr_merge_normalize_one (281x) [/home/hyc/OD/hobj/servers/slapd/slapd] 35,006,215 * /home/hyc/OD/hobj/servers/slapd/../../../head/servers/slapd/sl_malloc.c:slap_sl_free [/home/hyc/OD/hobj/servers/slapd/slapd] 86 > /home/hyc/OD/hobj/libraries/liblber/../../../head/libraries/liblber/memory.c:ber_memfree_x'2 (1x) [/home/hyc/OD/hobj/servers/slapd/slapd] 22,596 > /home/hyc/OD/hobj/libraries/liblber/../../../head/libraries/liblber/memory.c:ber_memfree_x (269x) [/home/hyc/OD/hobj/servers/slapd/slapd] 668,197,598 < /home/hyc/OD/hobj/servers/slapd/back-mdb/../../../../head/servers/slapd/back-mdb/../../../libraries/libmdb/mdb.c:mdb_cursor_set (583649x) [/home/hyc/OD/hobj/servers/slapd/slapd] 75,250,301 < /home/hyc/OD/hobj/servers/slapd/back-mdb/../../../../head/servers/slapd/back-mdb/../../../libraries/libmdb/mdb.c:mdb_cursor_first (250001x) [/home/hyc/OD/hobj/servers/slapd/slapd] 88 < /home/hyc/OD/hobj/servers/slapd/back-mdb/../../../../head/servers/slapd/back-mdb/../../../libraries/libmdb/mdb.c:mdb_cursor_set'2 (1x) [/home/hyc/OD/hobj/servers/slapd/slapd] 30,845,087 * /home/hyc/OD/hobj/servers/slapd/back-mdb/../../../../head/servers/slapd/back-mdb/../../../libraries/libmdb/mdb.c:mdb_search_page [/home/hyc/OD/hobj/servers/slapd/slapd] 693,428,903 > /home/hyc/OD/hobj/servers/slapd/back-mdb/../../../../head/servers/slapd/back-mdb/../../../libraries/libmdb/mdb.c:mdb_search_page_root (833651x) [/home/hyc/OD/hobj/servers/slapd/slapd] 19,173,997 > /home/hyc/OD/hobj/servers/slapd/back-mdb/../../../../head/servers/slapd/back-mdb/../../../libraries/libmdb/mdb.c:mdb_get_page (833651x) [/home/hyc/OD/hobj/servers/slapd/slapd] 967,918,055 < /home/hyc/OD/hobj/servers/slapd/back-mdb/../../../../head/servers/slapd/back-mdb/search.c:mdb_search (250001x) [/home/hyc/OD/hobj/servers/slapd/slapd] 29,500,080 * /home/hyc/OD/hobj/servers/slapd/back-mdb/../../../../head/servers/slapd/back-mdb/dn2id.c:mdb_idscopes [/home/hyc/OD/hobj/servers/slapd/slapd] 10,250,016 > /home/hyc/OD/hobj/servers/slapd/back-mdb/../../../../head/servers/slapd/back-mdb/idl.c:mdb_idl_search (500001x) [/home/hyc/OD/hobj/servers/slapd/slapd] 928,167,306 > /home/hyc/OD/hobj/servers/slapd/back-mdb/../../../../head/servers/slapd/back-mdb/../../../libraries/libmdb/mdb.c:mdb_cursor_get (500001x) [/home/hyc/OD/hobj/servers/slapd/slapd] 653 > /home/hyc/OD/hobj/servers/slapd/back-mdb/../../../../head/servers/slapd/back-mdb/../../../libraries/libmdb/mdb.c:mdb_cursor_open (1x) [/home/hyc/OD/hobj/servers/slapd/slapd] 249,251,004 < /home/hyc/OD/hobj/servers/slapd/../../../head/servers/slapd/filterentry.c:test_filter (250002x) [/home/hyc/OD/hobj/servers/slapd/slapd] 27,750,106 * /home/hyc/OD/hobj/servers/slapd/../../../head/servers/slapd/filterentry.c:test_ava_filter [/home/hyc/OD/hobj/servers/slapd/slapd] 15,000,000 > /home/hyc/OD/hobj/servers/slapd/../../../head/servers/slapd/value.c:ordered_value_match (250000x) [/home/hyc/OD/hobj/servers/slapd/slapd] 140,750,372 > /home/hyc/OD/hobj/servers/slapd/../../../head/servers/slapd/attr.c:attrs_find (500002x) [/home/hyc/OD/hobj/servers/slapd/slapd] 65,750,526 > /home/hyc/OD/hobj/servers/slapd/../../../head/servers/slapd/acl.c:access_allowed_mask (250002x) [/home/hyc/OD/hobj/servers/slapd/slapd] 3,498 < /home/hyc/OD/hobj/servers/slapd/back-mdb/../../../../head/servers/slapd/back-mdb/attr.c:mdb_ad_read (29x) [/home/hyc/OD/hobj/servers/slapd/slapd] 928,167,306 < /home/hyc/OD/hobj/servers/slapd/back-mdb/../../../../head/servers/slapd/back-mdb/dn2id.c:mdb_idscopes (500001x) [/home/hyc/OD/hobj/servers/slapd/slapd] 367 < /home/hyc/OD/hobj/servers/slapd/back-mdb/../../../../head/servers/slapd/back-mdb/idl.c:mdb_idl_fetch_key (1x) [/home/hyc/OD/hobj/servers/slapd/slapd] 1,966 < /home/hyc/OD/hobj/servers/slapd/back-mdb/../../../../head/servers/slapd/back-mdb/dn2id.c:mdb_dn2id (1x) [/home/hyc/OD/hobj/servers/slapd/slapd] 233 < /home/hyc/OD/hobj/servers/slapd/back-mdb/../../../../head/servers/slapd/back-mdb/search.c:mdb_search (1x) [/home/hyc/OD/hobj/servers/slapd/slapd] 207,946,905 < /home/hyc/OD/hobj/servers/slapd/back-mdb/../../../../head/servers/slapd/back-mdb/id2entry.c:mdb_id2entry (250003x) [/home/hyc/OD/hobj/servers/slapd/slapd] 23,250,841 * /home/hyc/OD/hobj/servers/slapd/back-mdb/../../../../head/servers/slapd/back-mdb/../../../libraries/libmdb/mdb.c:mdb_cursor_get [/home/hyc/OD/hobj/servers/slapd/slapd] 1,112,866,972 > /home/hyc/OD/hobj/servers/slapd/back-mdb/../../../../head/servers/slapd/back-mdb/../../../libraries/libmdb/mdb.c:mdb_cursor_set (750008x) [/home/hyc/OD/hobj/servers/slapd/slapd] 2,462 > /home/hyc/OD/hobj/servers/slapd/back-mdb/../../../../head/servers/slapd/back-mdb/../../../libraries/libmdb/mdb.c:mdb_cursor_next (28x) [/home/hyc/OD/hobj/servers/slapd/slapd] 22,500,180 < /home/hyc/OD/hobj/servers/slapd/back-mdb/../../../../head/servers/slapd/back-mdb/../../../libraries/libmdb/mdb.c:mdb_cursor_set (250002x) [/home/hyc/OD/hobj/servers/slapd/slapd] 22,500,180 * /home/hyc/OD/hobj/servers/slapd/back-mdb/../../../../head/servers/slapd/back-mdb/../../../libraries/libmdb/mdb.c:mdb_xcursor_init1 [/home/hyc/OD/hobj/servers/slapd/slapd] 266 < /home/hyc/OD/hobj/servers/slapd/back-mdb/../../../../head/servers/slapd/back-mdb/search.c:mdb_search (1x) [/home/hyc/OD/hobj/servers/slapd/slapd] 65,750,526 < /home/hyc/OD/hobj/servers/slapd/../../../head/servers/slapd/filterentry.c:test_ava_filter (250002x) [/home/hyc/OD/hobj/servers/slapd/slapd] 22,250,270 * /home/hyc/OD/hobj/servers/slapd/../../../head/servers/slapd/acl.c:access_allowed_mask [/home/hyc/OD/hobj/servers/slapd/slapd] 43,500,522 > /home/hyc/OD/hobj/servers/slapd/../../../head/servers/slapd/acl.c:fe_access_allowed (250003x) [/home/hyc/OD/hobj/servers/slapd/slapd] 260,751,096 < /home/hyc/OD/hobj/servers/slapd/back-mdb/../../../../head/servers/slapd/back-mdb/search.c:mdb_search (250002x) [/home/hyc/OD/hobj/servers/slapd/slapd] 11,500,092 * /home/hyc/OD/hobj/servers/slapd/../../../head/servers/slapd/filterentry.c:test_filter [/home/hyc/OD/hobj/servers/slapd/slapd] 249,251,004 > /home/hyc/OD/hobj/servers/slapd/../../../head/servers/slapd/filterentry.c:test_ava_filter (250002x) [/home/hyc/OD/hobj/servers/slapd/slapd] 86,500,346 < /home/hyc/OD/hobj/servers/slapd/back-mdb/../../../../head/servers/slapd/back-mdb/../../../libraries/libmdb/mdb.c:mdb_cursor_set (250001x) [/home/hyc/OD/hobj/servers/slapd/slapd] 11,250,045 * /home/hyc/OD/hobj/servers/slapd/back-mdb/../../../../head/servers/slapd/back-mdb/../../../libraries/libmdb/mdb.c:mdb_cursor_first [/home/hyc/OD/hobj/servers/slapd/slapd] 75,250,301 > /home/hyc/OD/hobj/servers/slapd/back-mdb/../../../../head/servers/slapd/back-mdb/../../../libraries/libmdb/mdb.c:mdb_search_page (250001x) [/home/hyc/OD/hobj/servers/slapd/slapd] 10,250,016 < /home/hyc/OD/hobj/servers/slapd/back-mdb/../../../../head/servers/slapd/back-mdb/dn2id.c:mdb_idscopes (500001x) [/home/hyc/OD/hobj/servers/slapd/slapd] 5 < /home/hyc/OD/hobj/servers/slapd/back-mdb/../../../../head/servers/slapd/back-mdb/idl.c:mdb_idl_insert (1x) [/home/hyc/OD/hobj/servers/slapd/slapd] 10,250,021 * /home/hyc/OD/hobj/servers/slapd/back-mdb/../../../../head/servers/slapd/back-mdb/idl.c:mdb_idl_search [/home/hyc/OD/hobj/servers/slapd/slapd] 809,946,207 < /home/hyc/OD/hobj/servers/slapd/back-mdb/../../../../head/servers/slapd/back-mdb/search.c:mdb_search (250002x) [/home/hyc/OD/hobj/servers/slapd/slapd] 2,600 < /home/hyc/OD/hobj/servers/slapd/back-mdb/../../../../head/servers/slapd/back-mdb/dn2entry.c:mdb_dn2entry (1x) [/home/hyc/OD/hobj/servers/slapd/slapd] 9,250,100 * /home/hyc/OD/hobj/servers/slapd/back-mdb/../../../../head/servers/slapd/back-mdb/id2entry.c:mdb_id2entry [/home/hyc/OD/hobj/servers/slapd/slapd] 592,751,802 > /home/hyc/OD/hobj/servers/slapd/back-mdb/../../../../head/servers/slapd/back-mdb/id2entry.c:mdb_entry_decode (250002x) [/home/hyc/OD/hobj/servers/slapd/slapd] 207,946,905 > /home/hyc/OD/hobj/servers/slapd/back-mdb/../../../../head/servers/slapd/back-mdb/../../../libraries/libmdb/mdb.c:mdb_cursor_get (250003x) [/home/hyc/OD/hobj/servers/slapd/slapd] 2,046 < /home/hyc/OD/hobj/servers/slapd/../../../head/servers/slapd/attr.c:attr_valfind (2x) [/home/hyc/OD/hobj/servers/slapd/slapd] 15,000,000 < /home/hyc/OD/hobj/servers/slapd/../../../head/servers/slapd/filterentry.c:test_ava_filter (250000x) [/home/hyc/OD/hobj/servers/slapd/slapd] 9,250,074 * /home/hyc/OD/hobj/servers/slapd/../../../head/servers/slapd/value.c:ordered_value_match [/home/hyc/OD/hobj/servers/slapd/slapd] 5,751,266 > /home/hyc/OD/hobj/servers/slapd/../../../head/servers/slapd/value.c:value_match (250002x) [/home/hyc/OD/hobj/servers/slapd/slapd] 8,500,170 < /home/hyc/OD/hobj/servers/slapd/back-mdb/../../../../head/servers/slapd/back-mdb/../../../libraries/libmdb/mdb.c:mdb_cursor_set (500010x) [/home/hyc/OD/hobj/servers/slapd/slapd] 459 < /home/hyc/OD/hobj/servers/slapd/back-mdb/../../../../head/servers/slapd/back-mdb/../../../libraries/libmdb/mdb.c:mdb_cursor_next (27x) [/home/hyc/OD/hobj/servers/slapd/slapd] 8,500,629 * /home/hyc/OD/hobj/servers/slapd/back-mdb/../../../../head/servers/slapd/back-mdb/../../../libraries/libmdb/mdb.c:mdb_read_data [/home/hyc/OD/hobj/servers/slapd/slapd] 43,000,345 < /home/hyc/OD/hobj/servers/slapd/back-mdb/../../../../head/servers/slapd/back-mdb/search.c:mdb_search (250002x) [/home/hyc/OD/hobj/servers/slapd/slapd] 8,000,064 * /home/hyc/OD/hobj/servers/slapd/back-mdb/../../../../head/servers/slapd/back-mdb/id2entry.c:mdb_entry_return [/home/hyc/OD/hobj/servers/slapd/slapd] 35,000,281 > /home/hyc/OD/hobj/servers/slapd/../../../head/servers/slapd/sl_malloc.c:slap_sl_free (1000008x) [/home/hyc/OD/hobj/servers/slapd/slapd] 43,500,522 < /home/hyc/OD/hobj/servers/slapd/../../../head/servers/slapd/acl.c:access_allowed_mask (250003x) [/home/hyc/OD/hobj/servers/slapd/slapd] 5,000,060 * /home/hyc/OD/hobj/servers/slapd/../../../head/servers/slapd/acl.c:fe_access_allowed [/home/hyc/OD/hobj/servers/slapd/slapd] 38,500,462 > /home/hyc/OD/hobj/servers/slapd/../../../head/servers/slapd/acl.c:slap_access_allowed (250003x) [/home/hyc/OD/hobj/servers/slapd/slapd] 5,751,266 < /home/hyc/OD/hobj/servers/slapd/../../../head/servers/slapd/value.c:ordered_value_match (250002x) [/home/hyc/OD/hobj/servers/slapd/slapd] 3,250,026 * /home/hyc/OD/hobj/servers/slapd/../../../head/servers/slapd/value.c:value_match [/home/hyc/OD/hobj/servers/slapd/slapd] 2,500,000 > /home/hyc/OD/hobj/servers/slapd/../../../head/servers/slapd/schema_init.c:octetStringMatch (250000x) [/home/hyc/OD/hobj/servers/slapd/slapd] 1,240 > /home/hyc/OD/hobj/servers/slapd/../../../head/servers/slapd/schema_prep.c:objectSubClassMatch (2x) [/home/hyc/OD/hobj/servers/slapd/slapd] 481,334 < ???:calloc (3878x) [/lib/ld-2.11.2.so] 93,122 < ???:0x00000000000772e0 (652x) [/lib/libc-2.11.2.so] 2,504,316 < ???:malloc (20191x) [/lib/ld-2.11.2.so] 2,998,348 * ???:0x00000000000740b0 [/lib/libc-2.11.2.so] 560 > ???:__default_morecore (11x) [/lib/libc-2.11.2.so] 30 > ???:mmap (5x) [/lib/libc-2.11.2.so] 80,498 > ???:0x0000000000071cf0 (63x) [/lib/libc-2.11.2.so] 3,648,191 < ???:0x0000000000009700 (5092x) [/lib/ld-2.11.2.so] 2,645,079 * ???:0x0000000000008ee0 [/lib/ld-2.11.2.so] 699,961 > ???:0x0000000000008d20 (4850x) [/lib/ld-2.11.2.so] 303,151 > ???:0x000000000000e2c0 (5342x) [/lib/ld-2.11.2.so] 2,500,000 < /home/hyc/OD/hobj/servers/slapd/../../../head/servers/slapd/value.c:value_match (250000x) [/home/hyc/OD/hobj/servers/slapd/slapd] 2,500,000 * /home/hyc/OD/hobj/servers/slapd/../../../head/servers/slapd/schema_init.c:octetStringMatch [/home/hyc/OD/hobj/servers/slapd/slapd] 2,250,018 < /home/hyc/OD/hobj/servers/slapd/back-mdb/../../../../head/servers/slapd/back-mdb/search.c:mdb_search (250002x) [/home/hyc/OD/hobj/servers/slapd/slapd] 2,250,018 * /home/hyc/OD/hobj/servers/slapd/back-mdb/../../../../head/servers/slapd/back-mdb/idl.c:mdb_idl_next [/home/hyc/OD/hobj/servers/slapd/slapd] 40 < ???:0x00000000000132c0'2 (2x) [/lib/ld-2.11.2.so] 36,707 < /home/hyc/OD/hobj/servers/slapd/../../../head/servers/slapd/config.c:config_fp_parse_line (2161x) [/home/hyc/OD/hobj/servers/slapd/slapd] 81,719 < /home/hyc/OD/hobj/servers/slapd/../../../head/servers/slapd/oc.c:oc_index_cmp (1049x) [/home/hyc/OD/hobj/servers/slapd/slapd] 503 < ???:_nss_files_gethostbyname_r (13x) [/lib/libnss_files-2.11.2.so] 60 < /home/hyc/OD/hobj/servers/slapd/../../../head/servers/slapd/bconfig.c:config_generic (4x) [/home/hyc/OD/hobj/servers/slapd/slapd] 332 < /home/hyc/OD/hobj/servers/slapd/back-monitor/../../../../head/servers/slapd/back-monitor/init.c:monitor_back_get_subsys (25x) [/home/hyc/OD/hobj/servers/slapd/slapd] 5,766 < /home/hyc/OD/hobj/libraries/libldap_r/schema.c:ldap_str2syntax (180x) [/home/hyc/OD/hobj/servers/slapd/slapd] 502 < /home/hyc/OD/hobj/libraries/libldap_r/init.c:openldap_ldap_init_w_conf (20x) [/home/hyc/OD/hobj/servers/slapd/slapd] 60 < /home/hyc/OD/hobj/servers/slapd/back-mdb/../../../../head/servers/slapd/back-mdb/attr.c:mdb_attr_index_config (4x) [/home/hyc/OD/hobj/servers/slapd/slapd] 15 < /home/hyc/OD/hobj/servers/slapd/../../../head/servers/slapd/bconfig.c:config_suffix (1x) [/home/hyc/OD/hobj/servers/slapd/slapd] 314,544 < /home/hyc/OD/hobj/libraries/libldap_r/schema.c:ldap_str2attributetype (11462x) [/home/hyc/OD/hobj/servers/slapd/slapd] 63,581 < /home/hyc/OD/hobj/libraries/libldap_r/schema.c:ldap_str2objectclass (2513x) [/home/hyc/OD/hobj/servers/slapd/slapd] 667,789 < /home/hyc/OD/hobj/servers/slapd/../../../head/servers/slapd/at.c:attr_index_cmp (6500x) [/home/hyc/OD/hobj/servers/slapd/slapd] 4,894 < /home/hyc/OD/hobj/servers/slapd/../../../head/servers/slapd/at.c:at_check_dup (32x) [/home/hyc/OD/hobj/servers/slapd/slapd] 378 < /home/hyc/OD/hobj/servers/slapd/../../../head/servers/slapd/backend.c:backend_info (20x) [/home/hyc/OD/hobj/servers/slapd/slapd] 98,993 < /home/hyc/OD/hobj/servers/slapd/../../../head/servers/slapd/config.c:config_find_keyword (4737x) [/home/hyc/OD/hobj/servers/slapd/slapd] 360 < /home/hyc/OD/hobj/servers/slapd/../../../head/servers/slapd/aclparse.c:parse_acl (26x) [/home/hyc/OD/hobj/servers/slapd/slapd] 3,969 < /home/hyc/OD/hobj/servers/slapd/../../../head/servers/slapd/at.c:at_add (45x) [/home/hyc/OD/hobj/servers/slapd/slapd] 10,203 < /home/hyc/OD/hobj/libraries/libldap_r/schema.c:ldap_str2matchingrule (285x) [/home/hyc/OD/hobj/servers/slapd/slapd] 6 < /home/hyc/OD/hobj/servers/slapd/../../../head/servers/slapd/aclparse.c:str2accessmask (1x) [/home/hyc/OD/hobj/servers/slapd/slapd] 29,385 < /home/hyc/OD/hobj/servers/slapd/../../../head/servers/slapd/mr.c:mr_index_cmp (407x) [/home/hyc/OD/hobj/servers/slapd/slapd] 1,319,607 * ???:strcasecmp [/lib/libc-2.11.2.so] 1,826,507 < ???:free (23997x) [/lib/libc-2.11.2.so] 78,791 < ???:0x00000000000772e0 (739x) [/lib/libc-2.11.2.so] 1,289,381 * ???:0x0000000000072e90 [/lib/libc-2.11.2.so] 579,993 > ???:0x0000000000071cf0 (217x) [/lib/libc-2.11.2.so] 96 < /home/hyc/OD/hobj/servers/slapd/../../../head/servers/slapd/daemon.c:slapd_daemon_task (12x) [/home/hyc/OD/hobj/servers/slapd/slapd] 8 < /home/hyc/OD/hobj/servers/slapd/../../../head/servers/slapd/connection.c:connection_init (1x) [/home/hyc/OD/hobj/servers/slapd/slapd] 8 < ???:0x00000000000132c0'2 (1x) [/lib/ld-2.11.2.so] 32 < /home/hyc/OD/hobj/servers/slapd/../../../head/servers/slapd/operation.c:slap_op_time (4x) [/home/hyc/OD/hobj/servers/slapd/slapd] 24 < /home/hyc/OD/hobj/servers/slapd/../../../head/servers/slapd/connection.c:connection_get (3x) [/home/hyc/OD/hobj/servers/slapd/slapd] 40 < /home/hyc/OD/hobj/libraries/liblber/../../../head/libraries/liblber/debug.c:lutil_debug (5x) [/home/hyc/OD/hobj/servers/slapd/slapd] 2,000,024 < /home/hyc/OD/hobj/servers/slapd/back-mdb/../../../../head/servers/slapd/back-mdb/search.c:mdb_search (250003x) [/home/hyc/OD/hobj/servers/slapd/slapd] 8 < /home/hyc/OD/hobj/servers/slapd/../../../head/servers/slapd/main.c:main (1x) [/home/hyc/OD/hobj/servers/slapd/slapd] 24 < ???:0x00000000000f0390 (3x) [/lib/libc-2.11.2.so] 104 < ???:__vsyslog_chk (13x) [/lib/libc-2.11.2.so] 1,250,230 * ???:time [/lib/libc-2.11.2.so] 750,138 > /home/software/valgrind-3.5.0/coregrind/m_trampoline.S:vgPlain_amd64_linux_REDIR_FOR_vtime (250046x) [/usr/local/lib/valgrind/callgrind-amd64-linux] 1,250,020 < /home/hyc/OD/hobj/servers/slapd/../../../head/servers/slapd/backend.c:be_isroot (250004x) [/home/hyc/OD/hobj/servers/slapd/slapd] 1,250,020 * /home/hyc/OD/hobj/servers/slapd/../../../head/servers/slapd/backend.c:be_isroot_dn [/home/hyc/OD/hobj/servers/slapd/slapd] 1,402,995 < /home/hyc/OD/hobj/servers/slapd/../../../head/servers/slapd/schema_init.c:UTF8StringNormalize (835x) [/home/hyc/OD/hobj/servers/slapd/slapd] 1,241,415 * /home/hyc/OD/hobj/libraries/liblunicode/../../../head/libraries/liblunicode/ucstr.c:UTF8bvnormalize [/home/hyc/OD/hobj/servers/slapd/slapd] 152,023 > /home/hyc/OD/hobj/libraries/liblber/../../../head/libraries/liblber/memory.c:ber_memalloc_x (833x) [/home/hyc/OD/hobj/servers/slapd/slapd] 508 > /home/hyc/OD/hobj/libraries/liblber/../../../head/libraries/liblber/memory.c:ber_str2bv_x (2x) [/home/hyc/OD/hobj/servers/slapd/slapd] 8,295 > ???:__ctype_tolower_loc (1659x) [/lib/libc-2.11.2.so] 207,065 < /home/hyc/OD/hobj/libraries/libldap_r/schema.c:parse_qdescrs (680x) [/home/hyc/OD/hobj/servers/slapd/slapd] 199,634 < /home/hyc/OD/hobj/libraries/libldap_r/schema.c:parse_woid (310x) [/home/hyc/OD/hobj/servers/slapd/slapd] 237,305 < /home/hyc/OD/hobj/libraries/libldap_r/schema.c:ldap_str2objectclass (807x) [/home/hyc/OD/hobj/servers/slapd/slapd] 1,092,097 < /home/hyc/OD/hobj/libraries/libldap_r/schema.c:ldap_str2attributetype (3259x) [/home/hyc/OD/hobj/servers/slapd/slapd] 47,850 < /home/hyc/OD/hobj/libraries/libldap_r/schema.c:ldap_str2matchingrule (228x) [/home/hyc/OD/hobj/servers/slapd/slapd] 412,222 < /home/hyc/OD/hobj/libraries/libldap_r/schema.c:parse_oids (1384x) [/home/hyc/OD/hobj/servers/slapd/slapd] 70,186 < /home/hyc/OD/hobj/libraries/libldap_r/schema.c:ldap_str2syntax (309x) [/home/hyc/OD/hobj/servers/slapd/slapd] 1,228,833 * /home/hyc/OD/hobj/libraries/libldap_r/schema.c:get_token [/home/hyc/OD/hobj/servers/slapd/slapd] 243,160 > ???:0x000000000010a7c0 (4990x) [/lib/libc-2.11.2.so] 794,366 > /home/hyc/OD/hobj/libraries/liblber/../../../head/libraries/liblber/memory.c:ber_memalloc_x (4990x) [/home/hyc/OD/hobj/servers/slapd/slapd] 93 < ???:0x00000000000a8ca0 (3x) [/lib/libc-2.11.2.so] 345 < /home/hyc/OD/hobj/servers/slapd/../../../head/servers/slapd/bconfig.c:config_build_entry (12x) [/home/hyc/OD/hobj/servers/slapd/slapd] 56 < ???:0x00000000000132c0'2 (2x) [/lib/ld-2.11.2.so] 83 < /home/hyc/OD/hobj/servers/slapd/back-monitor/../../../../head/servers/slapd/back-monitor/init.c:monitor_back_db_open (2x) [/home/hyc/OD/hobj/servers/slapd/slapd] 1,012,795 < /home/hyc/OD/hobj/servers/slapd/../../../head/servers/slapd/config.c:T.204 (38660x) [/home/hyc/OD/hobj/servers/slapd/slapd] 3,724 < /home/hyc/OD/hobj/servers/slapd/../../../head/servers/slapd/schemaparse.c:parse_at (133x) [/home/hyc/OD/hobj/servers/slapd/slapd] 1,680 < /home/hyc/OD/hobj/servers/slapd/../../../head/servers/slapd/schemaparse.c:parse_oc (60x) [/home/hyc/OD/hobj/servers/slapd/slapd] 1,847 < /home/hyc/OD/hobj/servers/slapd/back-monitor/../../../../head/servers/slapd/back-monitor/entry.c:monitor_entry_stub (65x) [/home/hyc/OD/hobj/servers/slapd/slapd] 128 < /home/hyc/OD/hobj/libraries/libldap_r/url.c:ldap_url_parse_ext (5x) [/home/hyc/OD/hobj/servers/slapd/slapd] 186 < /home/hyc/OD/hobj/servers/slapd/../../../head/servers/slapd/bconfig.c:config_build_schema_inc (6x) [/home/hyc/OD/hobj/servers/slapd/slapd] 28 < ???:0x00000000000dd010 (1x) [/lib/libc-2.11.2.so] 112 < /home/hyc/OD/hobj/servers/slapd/back-monitor/../../../../head/servers/slapd/back-monitor/database.c:monitor_subsys_database_init_one (4x) [/home/hyc/OD/hobj/servers/slapd/slapd] 2,473 < /home/hyc/OD/hobj/servers/slapd/../../../head/servers/slapd/config.c:read_config_file (61x) [/home/hyc/OD/hobj/servers/slapd/slapd] 34 < ???:sasl_server_init (1x) [/usr/lib/libsasl2.so.2.0.23] 28 < ???:__res_ninit (1x) [/lib/libc-2.11.2.so] 2,069 < ???:0x00000000000ac900 (74x) [/lib/libc-2.11.2.so] 2,204 < ???:inet_pton (74x) [/lib/libc-2.11.2.so] 152,286 < /home/hyc/OD/hobj/servers/slapd/../../../head/servers/slapd/config.c:read_config_file'2 (3696x) [/home/hyc/OD/hobj/servers/slapd/slapd] 100 < /home/hyc/OD/hobj/servers/slapd/../../../head/servers/slapd/aclparse.c:split (4x) [/home/hyc/OD/hobj/servers/slapd/slapd] 50 < ???:__nss_hostname_digits_dots (2x) [/lib/libc-2.11.2.so] 196 < ???:_sasl_load_plugins (7x) [/usr/lib/libsasl2.so.2.0.23] 1,180,517 * ???:0x000000000007a050 [/lib/libc-2.11.2.so] 216 < /home/hyc/OD/hobj/libraries/libldap_r/url.c:skip_url_prefix (4x) [/home/hyc/OD/hobj/servers/slapd/slapd] 16 < ???:0x00000000000132c0'2 (1x) [/lib/ld-2.11.2.so] 416 < /home/hyc/OD/hobj/libraries/libldap_r/schema.c:ldap_str2objectclass (26x) [/home/hyc/OD/hobj/servers/slapd/slapd] 2,960 < /home/hyc/OD/hobj/libraries/libldap_r/schema.c:ldap_str2attributetype (185x) [/home/hyc/OD/hobj/servers/slapd/slapd] 32 < ???:0x00000000000ddf40 (1x) [/lib/libc-2.11.2.so] 264 < ???:0x00000000000defb0 (2x) [/lib/libc-2.11.2.so] 24,680 < /home/hyc/OD/hobj/servers/slapd/../../../head/servers/slapd/config.c:config_find_keyword (607x) [/home/hyc/OD/hobj/servers/slapd/slapd] 48,176 < /home/hyc/OD/hobj/servers/slapd/../../../head/servers/slapd/config.c:read_config_file'2 (3011x) [/home/hyc/OD/hobj/servers/slapd/slapd] 80 < /home/hyc/OD/hobj/servers/slapd/../../../head/servers/slapd/aclparse.c:parse_acl (5x) [/home/hyc/OD/hobj/servers/slapd/slapd] 65,304 < /home/hyc/OD/hobj/servers/slapd/../../../head/servers/slapd/oc.c:oc_index_name_cmp (979x) [/home/hyc/OD/hobj/servers/slapd/slapd] 175,840 < /home/hyc/OD/hobj/servers/slapd/../../../head/servers/slapd/mr.c:mr_index_name_cmp (2247x) [/home/hyc/OD/hobj/servers/slapd/slapd] 216 < ???:0x00000000000de390 (4x) [/lib/libc-2.11.2.so] 236 < /home/hyc/OD/hobj/servers/slapd/../../../head/servers/slapd/config.c:bverb_to_mask (6x) [/home/hyc/OD/hobj/servers/slapd/slapd] 776,800 < /home/hyc/OD/hobj/servers/slapd/../../../head/servers/slapd/at.c:attr_index_name_cmp (10582x) [/home/hyc/OD/hobj/servers/slapd/slapd] 1,608 < /home/hyc/OD/hobj/servers/slapd/../../../head/servers/slapd/config.c:read_config_file (69x) [/home/hyc/OD/hobj/servers/slapd/slapd] 1,096,664 * ???:strncasecmp [/lib/libc-2.11.2.so] 246 < /home/hyc/OD/hobj/servers/slapd/../../../head/servers/slapd/bconfig.c:config_build_schema_inc (6x) [/home/hyc/OD/hobj/servers/slapd/slapd] 752 < ???:0x00000000000132c0'2 (3x) [/lib/ld-2.11.2.so] 1,295 < /home/hyc/OD/hobj/libraries/libldap_r/schema.c:ldap_str2objectclass (26x) [/home/hyc/OD/hobj/servers/slapd/slapd] 7,756 < /home/hyc/OD/hobj/libraries/libldap_r/schema.c:ldap_str2attributetype (185x) [/home/hyc/OD/hobj/servers/slapd/slapd] 10,440 < ???:ERR_load_ERR_strings (126x) [/usr/lib/libcrypto.so.0.9.8] 42,426 < /home/hyc/OD/hobj/libraries/libldap_r/schema.c:ldap_int_parse_numericoid (660x) [/home/hyc/OD/hobj/servers/slapd/slapd] 243,160 < /home/hyc/OD/hobj/libraries/libldap_r/schema.c:get_token (4990x) [/home/hyc/OD/hobj/servers/slapd/slapd] 1,463,135 < /home/hyc/OD/hobj/libraries/libldap_r/schema.c:append_to_safe_string (22415x) [/home/hyc/OD/hobj/servers/slapd/slapd] 1,039,201 * ???:0x000000000010a7c0 [/lib/libc-2.11.2.so] 1,003,169 < /home/hyc/OD/hobj/servers/slapd/../../../head/servers/slapd/value.c:ordered_value_validate (600x) [/home/hyc/OD/hobj/servers/slapd/slapd] 11,957 < /home/hyc/OD/hobj/servers/slapd/../../../head/servers/slapd/dn.c:LDAPRDN_rewrite (107x) [/home/hyc/OD/hobj/servers/slapd/slapd] 51 < /home/hyc/OD/hobj/servers/slapd/../../../head/servers/slapd/value.c:asserted_value_validate_normalize (1x) [/home/hyc/OD/hobj/servers/slapd/slapd] 1,015,177 * /home/hyc/OD/hobj/servers/slapd/../../../head/servers/slapd/schema_init.c:UTF8StringValidate [/home/hyc/OD/hobj/servers/slapd/slapd] -------------------------------------------------------------------------------- -- Auto-annotated source: /home/hyc/OD/hobj/servers/slapd/../../../head/servers/slapd/sl_malloc.c -------------------------------------------------------------------------------- Ir -- line 127 ---------------------------------------- . . . /* Destroy the context, or if key==NULL clean it up for reuse. */ . void . slap_sl_mem_destroy( . void *key, . void *data . ) 28 { . struct slab_heap *sh = data; . struct slab_object *so; . int i; . 12 if (!sh->sh_stack) { . for (i = 0; i <= sh->sh_maxorder - order_start; i++) { . so = LDAP_LIST_FIRST(&sh->sh_free[i]); . while (so) { . struct slab_object *so_tmp = so; . so = LDAP_LIST_NEXT(so, so_link); . LDAP_LIST_INSERT_HEAD(&sh->sh_sopool, so_tmp, so_link); . } . ch_free(sh->sh_map[i]); -- line 148 ---------------------------------------- -- line 161 ---------------------------------------- . so = LDAP_LIST_FIRST(&sh->sh_sopool); . while (so) { . struct slab_object *so_tmp = so; . so = LDAP_LIST_NEXT(so, so_link); . ch_free(so_tmp); . } . } . 8 if (key != NULL) { 6 ber_memfree_x(sh->sh_base, NULL); 522 => /home/hyc/OD/hobj/libraries/liblber/../../../head/libraries/liblber/memory.c:ber_memfree_x (2x) 6 ber_memfree_x(sh, NULL); 170 => /home/hyc/OD/hobj/libraries/liblber/../../../head/libraries/liblber/memory.c:ber_memfree_x (2x) . } 22 } . . BerMemoryFunctions slap_sl_mfuncs = . { slap_sl_malloc, slap_sl_calloc, slap_sl_realloc, slap_sl_free }; . . void . slap_sl_mem_init() . { . assert( Align == 1 << Align_log2 ); . 4 ber_set_option( NULL, LBER_OPT_MEMORY_FNS, &slap_sl_mfuncs ); 1,993 => /home/hyc/OD/hobj/libraries/liblber/../../../head/libraries/liblber/options.c:ber_set_option (1x) . } . . /* Create, reset or just return the memory context of the current thread. */ . void * . slap_sl_mem_create( . ber_len_t size, . int stack, . void *thrctx, . int new . ) 44 { . void *memctx; . struct slab_heap *sh; . ber_len_t size_shift; . struct slab_object *so; . char *base, *newptr; . enum { Base_offset = (unsigned) -sizeof(ber_len_t) % Align }; . 28 sh = GET_MEMCTX(thrctx, &memctx); 101 => /home/hyc/OD/hobj/libraries/libldap_r/../../../head/libraries/libldap_r/tpool.c:ldap_pvt_thread_pool_getkey (4x) 8 if ( sh && !new ) . return sh; . . /* Round up to doubleword boundary, then make room for initial . * padding, preserving expected available size for pool version */ 8 size = ((size + Align-1) & -Align) + Base_offset; . 8 if (!sh) { 6 sh = ch_malloc(sizeof(struct slab_heap)); 1,232 => /home/hyc/OD/hobj/servers/slapd/../../../head/servers/slapd/ch_malloc.c:ch_malloc (2x) 6 base = ch_malloc(size); 844 => /home/hyc/OD/hobj/servers/slapd/../../../head/servers/slapd/ch_malloc.c:ch_malloc (2x) 16 SET_MEMCTX(thrctx, sh, slap_sl_mem_destroy); 69 => /home/hyc/OD/hobj/libraries/libldap_r/../../../head/libraries/libldap_r/tpool.c:ldap_pvt_thread_pool_setkey (2x) . VGMEMP_MARK(base, size); . VGMEMP_CREATE(sh, 0, 0); . } else { 6 slap_sl_mem_destroy(NULL, sh); 36 => /home/hyc/OD/hobj/servers/slapd/../../../head/servers/slapd/sl_malloc.c:slap_sl_mem_destroy (2x) 2 base = sh->sh_base; 8 if (size > (ber_len_t) ((char *) sh->sh_end - base)) { . newptr = ch_realloc(base, size); . if ( newptr == NULL ) return NULL; . VGMEMP_CHANGE(sh, base, newptr, size); . base = newptr; . } . VGMEMP_TRIM(sh, sh->sh_base, 0); . } 4 sh->sh_base = base; 8 sh->sh_end = base + size; . . /* Align (base + head of first block) == first returned block */ . base += Base_offset; . size -= Base_offset; . 4 sh->sh_stack = stack; 8 if (stack) { 4 sh->sh_last = base; . . } else { . int i, order = -1, order_end = -1; . 8 size_shift = size - 1; . do { . order_end++; . } while (size_shift >>= 1); . order = order_end - order_start + 1; . sh->sh_maxorder = order_end; . . sh->sh_free = (struct sh_freelist *) . ch_malloc(order * sizeof(struct sh_freelist)); -- line 249 ---------------------------------------- -- line 270 ---------------------------------------- . assert(nummaps); . nummaps >>= 3; . if (!nummaps) nummaps = 1; . sh->sh_map[i] = (unsigned char *) ch_malloc(nummaps); . memset(sh->sh_map[i], 0, nummaps); . } . } . 4 return sh; 32 } . . /* . * Separate memory context from thread context. Future users must . * know the context, since ch_free/slap_sl_context() cannot find it. . */ . void . slap_sl_mem_detach( . void *thrctx, -- line 287 ---------------------------------------- -- line 291 ---------------------------------------- . SET_MEMCTX(thrctx, NULL, 0); . } . . void * . slap_sl_malloc( . ber_len_t size, . void *ctx . ) 8,002,936 { . struct slab_heap *sh = ctx; . ber_len_t *ptr, *newptr; . . /* ber_set_option calls us like this */ 2,000,734 if (No_sl_malloc || !ctx) { 313 newptr = ber_memalloc_x( size, NULL ); 54,930 => /home/hyc/OD/hobj/libraries/liblber/../../../head/libraries/liblber/memory.c:ber_memalloc_x (313x) 626 if ( newptr ) return newptr; . Debug(LDAP_DEBUG_ANY, "slap_sl_malloc of %lu bytes failed\n", . (unsigned long) size, 0, 0); . assert( 0 ); . exit( EXIT_FAILURE ); . } . . /* Add room for head, ensure room for tail when freed, and . * round up to doubleword boundary. */ 5,000,270 size = (size + sizeof(ber_len_t) + Align-1 + !size) & -Align; . 3,000,162 if (sh->sh_stack) { 5,000,270 if (size < (ber_len_t) ((char *) sh->sh_end - (char *) sh->sh_last)) { . newptr = sh->sh_last; 2,000,108 sh->sh_last = (char *) sh->sh_last + size; . VGMEMP_ALLOC(sh, newptr, size); 1,000,054 *newptr++ = size; 1,000,054 return( (void *)newptr ); . } . . size -= sizeof(ber_len_t); . . } else { . struct slab_object *so_new, *so_left, *so_right; . ber_len_t size_shift; . unsigned long diff; . int i, j, order = -1; . 2,000,108 size_shift = size - 1; . do { . order++; . } while (size_shift >>= 1); . . size -= sizeof(ber_len_t); . . for (i = order; i <= sh->sh_maxorder && . LDAP_LIST_EMPTY(&sh->sh_free[i-order_start]); i++); -- line 342 ---------------------------------------- -- line 382 ---------------------------------------- . } . /* FIXME: missing return; guessing we failed... */ . } . . Debug(LDAP_DEBUG_TRACE, . "sl_malloc %lu: ch_malloc\n", . (unsigned long) size, 0, 0); . return ch_malloc(size); 8,002,936 } . . #define LIM_SQRT(t) /* some value < sqrt(max value of unsigned type t) */ \ . ((0UL|(t)-1) >>31>>31 > 1 ? ((t)1 <<32) - 1 : \ . (0UL|(t)-1) >>31 ? 65535U : (0UL|(t)-1) >>15 ? 255U : 15U) . . void * . slap_sl_calloc( ber_len_t n, ber_len_t size, void *ctx ) 266 { . void *newptr; 76 ber_len_t total = n * size; . . /* The sqrt test is a slight optimization: often avoids the division */ 190 if ((n | size) <= LIM_SQRT(ber_len_t) || n == 0 || total/n == size) { 114 newptr = slap_sl_malloc( total, ctx ); 9,086 => /home/hyc/OD/hobj/servers/slapd/../../../head/servers/slapd/sl_malloc.c:slap_sl_malloc (38x) 152 memset( newptr, 0, n*size ); 1,814 => ???:memset (37x) 1,874 => ???:0x00000000000132c0'2 (1x) . } else { . Debug(LDAP_DEBUG_ANY, "slap_sl_calloc(%lu,%lu) out of range\n", . (unsigned long) n, (unsigned long) size, 0); . assert(0); . exit(EXIT_FAILURE); . } . return newptr; 228 } . . void * . slap_sl_realloc(void *ptr, ber_len_t size, void *ctx) . { . struct slab_heap *sh = ctx; . ber_len_t oldsize, *p = (ber_len_t *) ptr, *nextp; . void *newptr; . -- line 421 ---------------------------------------- -- line 485 ---------------------------------------- . newptr = slap_sl_malloc(size, ctx); . AC_MEMCPY(newptr, ptr, oldsize); . slap_sl_free(ptr, ctx); . return newptr; . } . . void . slap_sl_free(void *ptr, void *ctx) 5,001,620 { . struct slab_heap *sh = ctx; . ber_len_t size; . ber_len_t *p = ptr, *nextp, *tmpp; . 2,000,648 if (!ptr) . return; . 7,000,920 if (No_sl_malloc || !sh || ptr < sh->sh_base || ptr >= sh->sh_end) { 540 ber_memfree_x(ptr, NULL); 86 => /home/hyc/OD/hobj/libraries/liblber/../../../head/libraries/liblber/memory.c:ber_memfree_x'2 (1x) 22,596 => /home/hyc/OD/hobj/libraries/liblber/../../../head/libraries/liblber/memory.c:ber_memfree_x (269x) . return; . } . 2,000,108 size = *(--p); . 3,000,162 if (sh->sh_stack) { 2,000,108 size &= -2; 1,000,054 nextp = (ber_len_t *) ((char *) p + size); 2,000,108 if (sh->sh_last != nextp) { . /* Mark it free: tail = size, head of next block |= 1 */ 15 nextp[-1] = size; 15 nextp[0] |= 1; . /* We can't tell Valgrind about it yet, because we . * still need read/write access to this block for . * when we eventually get to reclaim it. . */ . } else { . /* Reclaim freed block(s) off tail */ 2,000,111 while (*p & 1) { 15 p = (ber_len_t *) ((char *) p - p[-1]); . } 3,000,117 sh->sh_last = p; . VGMEMP_TRIM(sh, sh->sh_base, sh->sh_last - sh->sh_base); . } . . } else { . int size_shift, order_size; . struct slab_object *so; . unsigned long diff; . int i, inserted = 0, order = -1; -- line 532 ---------------------------------------- -- line 640 ---------------------------------------- . LDAP_LIST_INSERT_HEAD(&sh->sh_free[i-order_start], . so, so_link); . } . break; . } . } . } . } 6,001,674 } . . /* . * Return the memory context of the current thread if the given block of . * memory belongs to it, otherwise return NULL. . */ . void * . slap_sl_context( void *ptr ) 6,300 { . void *memctx; . struct slab_heap *sh; . 4,200 if ( slapMode & SLAP_TOOL_MODE ) return NULL; . 16,800 sh = GET_MEMCTX(ldap_pvt_thread_pool_context(), &memctx); 64,975 => /home/hyc/OD/hobj/libraries/libldap_r/../../../head/libraries/libldap_r/tpool.c:ldap_pvt_thread_pool_context (2100x) 29,526 => /home/hyc/OD/hobj/libraries/libldap_r/../../../head/libraries/libldap_r/tpool.c:ldap_pvt_thread_pool_getkey (2100x) 4,220 if (sh && ptr >= sh->sh_base && ptr <= sh->sh_end) { 2,100 return sh; . } . return NULL; 6,300 } . . static struct slab_object * . slap_replenish_sopool( . struct slab_heap* sh . ) . { . struct slab_object *so_block; . int i; -- line 675 ---------------------------------------- -------------------------------------------------------------------------------- -- Auto-annotated source: /home/hyc/OD/hobj/servers/slapd/../../../head/servers/slapd/ad.c -------------------------------------------------------------------------------- Ir -- line 78 ---------------------------------------- . . static Attr_option *ad_find_option_definition( const char *opt, int optlen ); . . int ad_keystring( . struct berval *bv ) . { . ber_len_t i; . 3,976 if( !AD_LEADCHAR( bv->bv_val[0] ) ) { . return 1; . } . 14,924 for( i=1; ibv_len; i++ ) { 27,961 if( !AD_CHAR( bv->bv_val[i] )) { 1,488 if ( msad_range_hack && bv->bv_val[i] == '=' ) . continue; . return 1; . } . } . return 0; 497 } . . void ad_destroy( AttributeDescription *ad ) 374 { . AttributeDescription *n; . 1,513 for (; ad != NULL; ad = n) { 255 n = ad->ad_next; 510 ldap_memfree( ad ); 22,440 => /home/hyc/OD/hobj/libraries/libldap_r/free.c:ldap_memfree (255x) . } 748 } . . /* Is there an AttributeDescription for this type that uses these tags? */ . AttributeDescription * ad_find_tags( . AttributeType *type, . struct berval *tags ) . { . AttributeDescription *ad; . -- line 116 ---------------------------------------- -- line 124 ---------------------------------------- . ldap_pvt_thread_mutex_unlock( &type->sat_ad_mutex ); . return ad; . } . . int slap_str2ad( . const char *str, . AttributeDescription **ad, . const char **text ) 1,395 { . struct berval bv; 279 bv.bv_val = (char *) str; 558 bv.bv_len = strlen( str ); 5,304 => ???:0x000000000007bb40 (279x) . 1,116 return slap_bv2ad( &bv, ad, text ); 247,229 => /home/hyc/OD/hobj/servers/slapd/../../../head/servers/slapd/ad.c:slap_bv2ad (279x) 1,116 } . . static char *strchrlen( . const char *beg, . const char *end, . const char ch, . int *len ) . { . const char *p; -- line 146 ---------------------------------------- -- line 155 ---------------------------------------- . *len = p - beg; . return NULL; . } . . int slap_bv2ad( . struct berval *bv, . AttributeDescription **ad, . const char **text ) 4,970 { . int rtn = LDAP_UNDEFINED_TYPE; . AttributeDescription desc, *d2; . char *name, *options, *optn; . char *opt, *next; . int ntags; . int tagslen; . . /* hardcoded limits for speed */ . #define MAX_TAGGING_OPTIONS 128 . struct berval tags[MAX_TAGGING_OPTIONS+1]; . #define MAX_TAGS_LEN 1024 . char tagbuf[MAX_TAGS_LEN]; . 994 assert( ad != NULL ); 994 assert( *ad == NULL ); /* temporary */ . 3,479 if( bv == NULL || BER_BVISNULL( bv ) || BER_BVISEMPTY( bv ) ) { . *text = "empty AttributeDescription"; . return rtn; . } . . /* make sure description is IA5 */ 1,491 if( ad_keystring( bv ) ) { 48,846 => /home/hyc/OD/hobj/servers/slapd/../../../head/servers/slapd/ad.c:ad_keystring (497x) . *text = "AttributeDescription contains inappropriate characters"; . return rtn; . } . . /* find valid base attribute type; parse in place */ 1,988 desc.ad_cname = *bv; 497 desc.ad_flags = 0; 994 BER_BVZERO( &desc.ad_tags ); . name = bv->bv_val; 2,485 options = ber_bvchr( bv, ';' ); 1,868 => ???:0x00000000000132c0'2 (1x) 11,976 => ???:memchr (496x) 994 if ( options != NULL && (unsigned) ( options - name ) < bv->bv_len ) { . /* don't go past the end of the berval! */ . desc.ad_cname.bv_len = options - name; . } else { . options = NULL; . } 1,988 desc.ad_type = at_bvfind( &desc.ad_cname ); 139,202 => /home/hyc/OD/hobj/servers/slapd/../../../head/servers/slapd/at.c:at_bvfind (497x) 994 if( desc.ad_type == NULL ) { 2 *text = "attribute type undefined"; 1 return rtn; . } . 1,488 if( is_at_operational( desc.ad_type ) && options != NULL ) { . *text = "operational attribute with options undefined"; . return rtn; . } . . /* . * parse options in place . */ . ntags = 0; . tagslen = 0; 992 optn = bv->bv_val + bv->bv_len; . 992 for( opt=options; opt != NULL; opt=next ) { . int optlen; . opt++; . next = strchrlen( opt, optn, ';', &optlen ); . . if( optlen == 0 ) { . *text = "zero length option is invalid"; . return rtn; . -- line 229 ---------------------------------------- -- line 320 ---------------------------------------- . desc.ad_tags.bv_val[tagslen++] = ';'; . } . . desc.ad_tags.bv_val[--tagslen] = '\0'; . desc.ad_tags.bv_len = tagslen; . } . . /* see if a matching description is already cached */ 1,488 for (d2 = desc.ad_type->sat_ad; d2; d2=d2->ad_next) { 482 if( d2->ad_flags != desc.ad_flags ) { . continue; . } 723 if( d2->ad_tags.bv_len != desc.ad_tags.bv_len ) { . continue; . } 482 if( d2->ad_tags.bv_len == 0 ) { . break; . } . if( strncasecmp( d2->ad_tags.bv_val, desc.ad_tags.bv_val, . desc.ad_tags.bv_len ) == 0 ) . { . break; . } . } . . /* Not found, add new one */ . while (d2 == NULL) { . size_t dlen = 0; 510 ldap_pvt_thread_mutex_lock( &desc.ad_type->sat_ad_mutex ); 12,750 => /home/hyc/OD/hobj/libraries/libldap_r/../../../head/libraries/libldap_r/thr_posix.c:ldap_pvt_thread_mutex_lock (255x) . /* check again now that we've locked */ 1,502 for (d2 = desc.ad_type->sat_ad; d2; d2=d2->ad_next) { . if (d2->ad_flags != desc.ad_flags) . continue; . if (d2->ad_tags.bv_len != desc.ad_tags.bv_len) . continue; . if (d2->ad_tags.bv_len == 0) . break; . if (strncasecmp(d2->ad_tags.bv_val, desc.ad_tags.bv_val, . desc.ad_tags.bv_len) == 0) . break; . } . if (d2) { . ldap_pvt_thread_mutex_unlock( &desc.ad_type->sat_ad_mutex ); 510 break; . } . . /* Allocate a single contiguous block. If there are no . * options, we just need space for the AttrDesc structure. . * Otherwise, we need to tack on the full name length + . * options length, + maybe tagging options length again. . */ 1,785 if (desc.ad_tags.bv_len || desc.ad_flags != SLAP_DESC_NONE) { . dlen = desc.ad_type->sat_cname.bv_len + 1; . if (desc.ad_tags.bv_len) { . dlen += 1 + desc.ad_tags.bv_len; . } . if ( slap_ad_is_binary( &desc ) ) { . dlen += 1 + STRLENOF(";binary") + desc.ad_tags.bv_len; . } . } . 510 d2 = ch_malloc(sizeof(AttributeDescription) + dlen); 51,747 => /home/hyc/OD/hobj/servers/slapd/../../../head/servers/slapd/ch_malloc.c:ch_malloc (255x) 255 d2->ad_next = NULL; 510 d2->ad_type = desc.ad_type; 510 d2->ad_flags = desc.ad_flags; 765 d2->ad_cname.bv_len = desc.ad_type->sat_cname.bv_len; 510 d2->ad_tags.bv_len = desc.ad_tags.bv_len; 510 ldap_pvt_thread_mutex_lock( &ad_index_mutex ); 6,375 => /home/hyc/OD/hobj/libraries/libldap_r/../../../head/libraries/libldap_r/thr_posix.c:ldap_pvt_thread_mutex_lock (255x) 1,020 d2->ad_index = ++ad_count; 510 ldap_pvt_thread_mutex_unlock( &ad_index_mutex ); 12,240 => /home/hyc/OD/hobj/libraries/libldap_r/../../../head/libraries/libldap_r/thr_posix.c:ldap_pvt_thread_mutex_unlock (255x) . 510 if (dlen == 0) { 765 d2->ad_cname.bv_val = d2->ad_type->sat_cname.bv_val; 255 d2->ad_tags.bv_val = NULL; . } else { . char *cp, *op, *lp; . int j; . d2->ad_cname.bv_val = (char *)(d2+1); . strcpy(d2->ad_cname.bv_val, d2->ad_type->sat_cname.bv_val); . cp = d2->ad_cname.bv_val + d2->ad_cname.bv_len; . if( slap_ad_is_binary( &desc ) ) { . op = cp; -- line 401 ---------------------------------------- -- line 435 ---------------------------------------- . if( j == 0 ) . d2->ad_cname.bv_len += 1 + desc.ad_tags.bv_len; . } . } . /* Add new desc to list. We always want the bare Desc with . * no options to stay at the head of the list, assuming . * that one will be used most frequently. . */ 1,020 if (desc.ad_type->sat_ad == NULL || dlen == 0) { 255 d2->ad_next = desc.ad_type->sat_ad; 255 desc.ad_type->sat_ad = d2; . } else { . d2->ad_next = desc.ad_type->sat_ad->ad_next; . desc.ad_type->sat_ad->ad_next = d2; . } 765 ldap_pvt_thread_mutex_unlock( &desc.ad_type->sat_ad_mutex ); 6,120 => /home/hyc/OD/hobj/libraries/libldap_r/../../../head/libraries/libldap_r/thr_posix.c:ldap_pvt_thread_mutex_unlock (255x) . } . 1,488 if( *ad == NULL ) { 992 *ad = d2; . } else { . **ad = *d2; . } . . return LDAP_SUCCESS; 3,976 } . . static int is_ad_subtags( . struct berval *subtagsbv, . struct berval *suptagsbv ) . { . const char *suptags, *supp, *supdelimp, *supn; . const char *subtags, *subp, *subdelimp, *subn; . int suplen, sublen; -- line 468 ---------------------------------------- -- line 499 ---------------------------------------- . int is_ad_subtype( . AttributeDescription *sub, . AttributeDescription *super . ) . { . AttributeType *a; . int lr; . 42,750,111 for ( a = sub->ad_type; a; a=a->sat_sup ) { 24,250,057 if ( a == super->ad_type ) break; . } 500,000 if( !a ) { . return 0; . } . . /* ensure sub does support all flags of super */ 1,250,000 lr = sub->ad_tags.bv_len ? SLAP_DESC_TAG_RANGE : 0; 1,250,000 if(( super->ad_flags & ( sub->ad_flags | lr )) != super->ad_flags ) { . return 0; . } . . /* check for tagging options */ 750,000 if ( super->ad_tags.bv_len == 0 ) . return 1; . if ( sub->ad_tags.bv_len == 0 ) . return 0; . 6,250,018 return is_ad_subtags( &sub->ad_tags, &super->ad_tags ); 6,500,018 } . . int ad_inlist( . AttributeDescription *desc, . AttributeName *attrs ) . { . if (! attrs ) return 0; . . for( ; attrs->an_name.bv_val; attrs++ ) { -- line 535 ---------------------------------------- -- line 814 ---------------------------------------- . return ad; . } . . static int . undef_promote( . AttributeType *at, . char *name, . AttributeType *nat ) 15,340 { . AttributeDescription **u_ad, **n_ad; . . /* Get to last ad on the new type */ 7,670 for ( n_ad = &nat->sat_ad; *n_ad; n_ad = &(*n_ad)->ad_next ) ; . 4,602 for ( u_ad = &at->sat_ad; *u_ad; ) { . struct berval bv; . 3,068 ber_str2bv( name, 0, 0, &bv ); . . /* remove iff undef == name or undef == name;tag */ . if ( (*u_ad)->ad_cname.bv_len >= bv.bv_len . && strncasecmp( (*u_ad)->ad_cname.bv_val, bv.bv_val, bv.bv_len ) == 0 . && ( (*u_ad)->ad_cname.bv_val[ bv.bv_len ] == '\0' . || (*u_ad)->ad_cname.bv_val[ bv.bv_len ] == ';' ) ) . { . AttributeDescription *tmp = *u_ad; -- line 839 ---------------------------------------- -- line 847 ---------------------------------------- . *n_ad = tmp; . n_ad = &tmp->ad_next; . } else { . u_ad = &(*u_ad)->ad_next; . } . } . . return 0; 13,806 } . . int . slap_ad_undef_promote( . char *name, . AttributeType *at ) 4,602 { . int rc; . 1,534 ldap_pvt_thread_mutex_lock( &ad_undef_mutex ); 19,175 => /home/hyc/OD/hobj/libraries/libldap_r/../../../head/libraries/libldap_r/thr_posix.c:ldap_pvt_thread_mutex_lock (767x) . 3,835 rc = undef_promote( slap_schema.si_at_undefined, name, at ); 44,486 => /home/hyc/OD/hobj/servers/slapd/../../../head/servers/slapd/ad.c:undef_promote (767x) 1,534 if ( rc == 0 ) { 3,835 rc = undef_promote( slap_schema.si_at_proxied, name, at ); 22,243 => /home/hyc/OD/hobj/servers/slapd/../../../head/servers/slapd/ad.c:undef_promote (767x) . } . 1,534 ldap_pvt_thread_mutex_unlock( &ad_undef_mutex ); 18,408 => /home/hyc/OD/hobj/libraries/libldap_r/../../../head/libraries/libldap_r/thr_posix.c:ldap_pvt_thread_mutex_unlock (767x) . . return rc; 4,602 } . . int . an_find( . AttributeName *a, . struct berval *s . ) . { . if( a == NULL ) return 0; -- line 882 ---------------------------------------- -- line 1247 ---------------------------------------- . } . . option_count++; . return 0; . } . . void . ad_unparse_options( BerVarray *res ) 4 { . int i; 10 for ( i = 0; i < option_count; i++ ) { 4 value_add_one( res, &options[i].name ); 346 => /home/hyc/OD/hobj/servers/slapd/../../../head/servers/slapd/value.c:value_add_one (1x) . } 4 } . . /* Find the definition of the option name or prefix matching the arguments */ . static Attr_option * . ad_find_option_definition( const char *opt, int optlen ) . { . int top = 0, bot = option_count; . while ( top < bot ) { . int mid = (top + bot) / 2; -- line 1268 ---------------------------------------- -- line 1282 ---------------------------------------- . top = mid + 1; . } . return NULL; . } . . MatchingRule *ad_mr( . AttributeDescription *ad, . unsigned usage ) 1 { 3 switch( usage & SLAP_MR_TYPE_MASK ) { . case SLAP_MR_NONE: . case SLAP_MR_EQUALITY: 2 return ad->ad_type->sat_equality; . break; . case SLAP_MR_ORDERING: . return ad->ad_type->sat_ordering; . break; . case SLAP_MR_SUBSTR: . return ad->ad_type->sat_substr; . break; . case SLAP_MR_EXT: . default: . assert( 0 /* ad_mr: bad usage */); . } . return NULL; 2 } -------------------------------------------------------------------------------- -- Auto-annotated source: /home/hyc/OD/hobj/servers/slapd/../../../head/servers/slapd/acl.c -------------------------------------------------------------------------------- Ir -- line 135 ---------------------------------------- . slap_access_allowed( . Operation *op, . Entry *e, . AttributeDescription *desc, . struct berval *val, . slap_access_t access, . AccessControlState *state, . slap_mask_t *maskp ) 3,250,039 { . int ret = 1; . int count; . AccessControl *a, *prev; . . #ifdef LDAP_DEBUG . char accessmaskbuf[ACCESSMASK_MAXLEN]; . #endif . slap_mask_t mask; . slap_control_t control; . slap_access_t access_level; . const char *attr; . AclRegexMatches matches; 2,000,024 AccessControlState acl_state = ACL_STATE_INIT; . static AccessControlState state_init = ACL_STATE_INIT; . 500,006 assert( op != NULL ); 500,006 assert( e != NULL ); 500,006 assert( desc != NULL ); 500,006 assert( maskp != NULL ); . 750,009 access_level = ACL_LEVEL( access ); 750,009 attr = desc->ad_cname.bv_val; . 500,006 assert( attr != NULL ); . 250,003 ACL_INIT( mask ); . . /* grant database root access */ 750,009 if ( be_isroot( op ) ) { 2,000,024 => /home/hyc/OD/hobj/servers/slapd/../../../head/servers/slapd/backend.c:be_isroot (250003x) . Debug( LDAP_DEBUG_ACL, "<= root access granted\n", 0, 0, 0 ); . mask = ACL_LVL_MANAGE; . goto done; . } . . /* . * no-user-modification operational attributes are ignored . * by ACL_WRITE checking as any found here are not provided -- line 180 ---------------------------------------- -- line 191 ---------------------------------------- . { . Debug( LDAP_DEBUG_ACL, "NoUserMod Operational attribute:" . " %s access granted\n", . attr, 0, 0 ); . goto done; . } . . /* use backend default access if no backend acls */ 1,500,018 if ( op->o_bd->be_acl == NULL && frontendDB->be_acl == NULL ) { . int i; . 1,000,012 Debug( LDAP_DEBUG_ACL, . "=> slap_access_allowed: backend default %s " . "access %s to \"%s\"\n", . access2str( access ), . op->o_bd->be_dfltaccess >= access_level ? "granted" : "denied", . op->o_dn.bv_val ? op->o_dn.bv_val : "(anonymous)" ); 1,250,015 ret = op->o_bd->be_dfltaccess >= access_level; . . mask = ACL_PRIV_LEVEL; 7,500,090 for ( i = ACL_NONE; i <= op->o_bd->be_dfltaccess; i++ ) { 12,250,147 ACL_PRIV_SET( mask, ACL_ACCESS2PRIV( i ) ); . } . . goto done; . } . . ret = 0; . control = ACL_BREAK; . -- line 220 ---------------------------------------- -- line 312 ---------------------------------------- . ret = ACL_GRANT( mask, access ); . . Debug( LDAP_DEBUG_ACL, . "=> slap_access_allowed: %s access %s by %s\n", . access2str( access ), ret ? "granted" : "denied", . accessmask2str( mask, accessmaskbuf, 1 ) ); . . done: 500,006 ACL_PRIV_ASSIGN( *maskp, mask ); . return ret; 2,250,027 } . . int . fe_access_allowed( . Operation *op, . Entry *e, . AttributeDescription *desc, . struct berval *val, . slap_access_t access, . AccessControlState *state, . slap_mask_t *maskp ) 1,500,018 { . BackendDB *be_orig; . int rc; . . /* . * NOTE: control gets here if FIXME . * if an appropriate backend cannot be selected for the operation, . * we assume that the frontend should handle this . * FIXME: should select_backend() take care of this, . * and return frontendDB instead of NULL? maybe for some value . * of the flags? . */ 250,003 be_orig = op->o_bd; . 500,006 if ( op->o_bd == NULL ) { . op->o_bd = select_backend( &op->o_req_ndn, 0 ); . if ( op->o_bd == NULL ) . op->o_bd = frontendDB; . } 1,250,015 rc = slap_access_allowed( op, e, desc, val, access, state, maskp ); 38,500,462 => /home/hyc/OD/hobj/servers/slapd/../../../head/servers/slapd/acl.c:slap_access_allowed (250003x) 250,003 op->o_bd = be_orig; . . return rc; 1,250,015 } . . int . access_allowed_mask( . Operation *op, . Entry *e, . AttributeDescription *desc, . struct berval *val, . slap_access_t access, . AccessControlState *state, . slap_mask_t *maskp ) 3,250,039 { . int ret = 1; . int be_null = 0; . . #ifdef LDAP_DEBUG . char accessmaskbuf[ACCESSMASK_MAXLEN]; . #endif . slap_mask_t mask; . slap_access_t access_level; . const char *attr; . 500,006 assert( e != NULL ); 500,006 assert( desc != NULL ); . . access_level = ACL_LEVEL( access ); . 750,009 assert( access_level > ACL_NONE ); . 250,003 ACL_INIT( mask ); 500,007 if ( maskp ) ACL_INVALIDATE( *maskp ); . 500,006 attr = desc->ad_cname.bv_val; . 500,006 assert( attr != NULL ); . 500,006 if ( op ) { 750,009 if ( op->o_acl_priv != ACL_NONE ) { . access = op->o_acl_priv; . 1,000,012 } else if ( op->o_is_auth_check && . ( access_level == ACL_SEARCH || access_level == ACL_READ ) ) . { . access = ACL_AUTH; . . } else if ( get_relax( op ) && access_level == ACL_WRITE && . desc == slap_schema.si_ad_entry ) . { . access = ACL_MANAGE; . } . } . 500,006 if ( state != NULL ) { . if ( state->as_desc == desc && . state->as_access == access && . state->as_result != -1 && . !state->as_vd_acl_present ) . { . Debug( LDAP_DEBUG_ACL, . "=> access_allowed: result was in cache (%s)\n", . attr, 0, 0 ); -- line 416 ---------------------------------------- -- line 417 ---------------------------------------- . return state->as_result; . } else { . Debug( LDAP_DEBUG_ACL, . "=> access_allowed: result not in cache (%s)\n", . attr, 0, 0 ); . } . } . 1,000,012 Debug( LDAP_DEBUG_ACL, . "=> access_allowed: %s access to \"%s\" \"%s\" requested\n", . access2str( access ), e->e_dn, attr ); . 1,000,012 if ( op == NULL ) { . /* no-op call */ . goto done; . } . 750,009 if ( op->o_bd == NULL ) { . op->o_bd = LDAP_STAILQ_FIRST( &backendDB ); . be_null = 1; . . /* FIXME: experimental; use first backend rules . * iff there is no global_acl (ITS#3100) . */ . if ( frontendDB->be_acl != NULL ) { . op->o_bd = frontendDB; . } . } . assert( op->o_bd != NULL ); . . /* this is enforced in backend_add() */ 1,000,012 if ( op->o_bd->bd_info->bi_access_allowed ) { . /* delegate to backend */ . ret = op->o_bd->bd_info->bi_access_allowed( op, e, . desc, val, access, state, &mask ); . . } else { . /* use default (but pass through frontend . * for global ACL overlays) */ 3,750,045 ret = frontendDB->bd_info->bi_access_allowed( op, e, 43,500,522 => /home/hyc/OD/hobj/servers/slapd/../../../head/servers/slapd/acl.c:fe_access_allowed (250003x) . desc, val, access, state, &mask ); . } . 500,006 if ( !ret ) { . if ( ACL_IS_INVALID( mask ) ) { . Debug( LDAP_DEBUG_ACL, . "=> access_allowed: \"%s\" (%s) invalid!\n", . e->e_dn, attr, 0 ); . ACL_INIT( mask ); . . } else { . Debug( LDAP_DEBUG_ACL, . "=> access_allowed: no more rules\n", 0, 0, 0 ); . . goto done; . } . } . 1,000,012 Debug( LDAP_DEBUG_ACL, . "=> access_allowed: %s access %s by %s\n", . access2str( access ), ret ? "granted" : "denied", . accessmask2str( mask, accessmaskbuf, 1 ) ); . . done: 500,006 if ( state != NULL ) { . state->as_access = access; . state->as_result = ret; . state->as_desc = desc; . } 500,006 if ( be_null ) op->o_bd = NULL; 500,008 if ( maskp ) ACL_PRIV_ASSIGN( *maskp, mask ); . return ret; 2,250,027 } . . . /* . * slap_acl_get - return the acl applicable to entry e, attribute . * attr. the acl returned is suitable for use in subsequent calls to . * acl_access_allowed(). . */ . -- line 497 ---------------------------------------- -- line 2508 ---------------------------------------- . for ( i = 0; acl_init_func[ i ] != NULL; i++ ) { . rc = (*(acl_init_func[ i ]))(); . if ( rc != 0 ) { . return rc; . } . } . . return 0; 2 } . . int . acl_string_expand( . struct berval *bv, . struct berval *pat, . struct berval *dn_matches, . struct berval *val_matches, . AclRegexMatches *matches) -- line 2524 ---------------------------------------- -------------------------------------------------------------------------------- -- Auto-annotated source: /home/hyc/OD/hobj/libraries/liblunicode/../../../head/libraries/liblunicode/ucstr.c -------------------------------------------------------------------------------- Ir -- line 97 ---------------------------------------- . ldap_unicode_t *u, . ber_len_t n ) . { . for(; 0 < n; ++u, --n ) { . *u = uctoupper( *u ); . } . } . 4,956 struct berval * UTF8bvnormalize( 8,295 => ???:__ctype_tolower_loc (826x) . struct berval *bv, . struct berval *newbv, . unsigned flags, . void *ctx ) 7,515 { . int i, j, len, clen, outpos, ucsoutlen, outsize, last; . char *out, *outtmp, *s; . ac_uint4 *ucs, *p, *ucsout; . . static unsigned char mask[] = { . 0, 0x7f, 0x1f, 0x0f, 0x07, 0x03, 0x01 }; . 1,670 unsigned casefold = flags & LDAP_UTF8_CASEFOLD; 2,505 unsigned approx = flags & LDAP_UTF8_APPROX; . 1,670 if ( bv == NULL ) { . return NULL; . } . 835 s = bv->bv_val; 835 len = bv->bv_len; . 1,670 if ( len == 0 ) { . return ber_dupbv_x( newbv, bv, ctx ); . } . 1,670 if ( !newbv ) { . newbv = ber_memalloc_x( sizeof(struct berval), ctx ); . if ( !newbv ) return NULL; . } . . /* Should first check to see if string is already in proper . * normalized form. This is almost as time consuming as . * the normalization though. . */ . . /* finish off everything up to character before first non-ascii */ 1,670 if ( LDAP_UTF8_ISASCII( s ) ) { 1,670 if ( casefold ) { 1,666 outsize = len + 7; 3,332 out = (char *) ber_memalloc_x( outsize, ctx ); 152,023 => /home/hyc/OD/hobj/libraries/liblber/../../../head/libraries/liblber/memory.c:ber_memalloc_x (833x) 1,666 if ( out == NULL ) { . return NULL; . } . outpos = 0; . 870,082 for ( i = 1; (i < len) && LDAP_UTF8_ISASCII(s + i); i++ ) { 316,984 out[outpos++] = TOLOWER( s[i-1] ); . } 1,666 if ( i == len ) { 6,664 out[outpos++] = TOLOWER( s[len-1] ); 4,165 => ???:__ctype_tolower_loc (833x) 2,499 out[outpos] = '\0'; 833 newbv->bv_val = out; 833 newbv->bv_len = outpos; 835 return newbv; . } . } else { 156 for ( i = 1; (i < len) && LDAP_UTF8_ISASCII(s + i); i++ ) { . /* empty */ . } . 4 if ( i == len ) { 14 return ber_str2bv_x( s, len, 1, newbv, ctx ); 508 => /home/hyc/OD/hobj/libraries/liblber/../../../head/libraries/liblber/memory.c:ber_str2bv_x (2x) . } . . outsize = len + 7; . out = (char *) ber_memalloc_x( outsize, ctx ); . if ( out == NULL ) { . return NULL; . } . outpos = i - 1; -- line 176 ---------------------------------------- -- line 295 ---------------------------------------- . p = ucs + 1; . } . . ber_memfree_x( ucs, ctx ); . out[outpos] = '\0'; . newbv->bv_val = out; . newbv->bv_len = outpos; . return newbv; 7,515 } . . /* compare UTF8-strings, optionally ignore casing */ . /* slow, should be optimized */ . int UTF8bvnormcmp( . struct berval *bv1, . struct berval *bv2, . unsigned flags, . void *ctx ) -- line 311 ---------------------------------------- -------------------------------------------------------------------------------- -- Auto-annotated source: /home/hyc/OD/hobj/servers/slapd/back-mdb/../../../../head/servers/slapd/back-mdb/../../../libraries/libmdb/mdb.c -------------------------------------------------------------------------------- Ir -- line 840 ---------------------------------------- . static SECURITY_DESCRIPTOR mdb_null_sd; . static SECURITY_ATTRIBUTES mdb_all_sa; . static int mdb_sec_inited; . #endif . . char * . mdb_version(int *major, int *minor, int *patch) . { 3 if (major) *major = MDB_VERSION_MAJOR; 3 if (minor) *minor = MDB_VERSION_MINOR; 3 if (patch) *patch = MDB_VERSION_PATCH; . return MDB_VERSION_STRING; 2 } . . /** Table of descriptions for MDB @ref error codes */ . static char *const mdb_errstr[] = { . "MDB_KEYEXIST: Key/data pair already exists", . "MDB_NOTFOUND: No matching key/data pair found", . "MDB_PAGE_NOTFOUND: Requested page not found", . "MDB_CORRUPTED: Located page was wrong type", . "MDB_PANIC: Update of meta page failed", -- line 860 ---------------------------------------- -- line 1051 ---------------------------------------- . if (mc->mc_top) . SETPGNO(NODEPTR(mc->mc_pg[mc->mc_top-1], mc->mc_ki[mc->mc_top-1]), mp->mp_pgno); . } . return 0; . } . . int . mdb_env_sync(MDB_env *env, int force) 1 { . int rc = 0; 2 if (force || !F_ISSET(env->me_flags, MDB_NOSYNC)) { 4 if (fdatasync(env->me_fd)) 1,959 => ???:0x00000000000132c0'2 (1x) 1 rc = ErrCode(); . } . return rc; 2 } . . static inline void . mdb_txn_reset0(MDB_txn *txn); . . static inline int . mdb_txn_renew0(MDB_txn *txn) . { . MDB_env *env = txn->mt_env; . 6 if (txn->mt_flags & MDB_TXN_RDONLY) { 6 MDB_reader *r = pthread_getspecific(env->me_txkey); 24 => ???:pthread_getspecific (2x) 4 if (!r) { . unsigned int i; 4 pid_t pid = getpid(); 10 => ???:getpid (2x) 4 pthread_t tid = pthread_self(); 4 => ???:pthread_self (2x) . 6 LOCK_MUTEX_R(env); 48 => ???:pthread_mutex_lock (2x) 12 for (i=0; ime_txns->mti_numreaders; i++) 6 if (env->me_txns->mti_readers[i].mr_pid == 0) . break; 4 if (i == env->me_maxreaders) { . UNLOCK_MUTEX_R(env); . return ENOMEM; . } 8 env->me_txns->mti_readers[i].mr_pid = pid; 8 env->me_txns->mti_readers[i].mr_tid = tid; 6 if (i >= env->me_txns->mti_numreaders) 3 env->me_txns->mti_numreaders = i+1; 4 UNLOCK_MUTEX_R(env); 69 => ???:pthread_mutex_unlock (2x) 6 r = &env->me_txns->mti_readers[i]; 8 pthread_setspecific(env->me_txkey, r); 62 => ???:pthread_setspecific (2x) . } 6 txn->mt_txnid = env->me_txns->mti_txnid; 4 txn->mt_toggle = env->me_txns->mti_me_toggle; 2 r->mr_txnid = txn->mt_txnid; 6 txn->mt_u.reader = r; . } else { 3 LOCK_MUTEX_W(env); 72 => ???:pthread_mutex_lock (1x) . 4 txn->mt_txnid = env->me_txns->mti_txnid+1; 2 txn->mt_toggle = env->me_txns->mti_me_toggle; 2 txn->mt_u.dirty_list = env->me_dirty_list; 1 txn->mt_u.dirty_list[0].mid = 0; 2 txn->mt_free_pgs = env->me_free_pgs; 1 txn->mt_free_pgs[0] = 0; 4 txn->mt_next_pgno = env->me_metas[txn->mt_toggle]->mm_last_pg+1; 1 env->me_txn = txn; . } . . /* Copy the DB arrays */ . LAZY_RWLOCK_RDLOCK(&env->me_dblock); 6 txn->mt_numdbs = env->me_numdbs; 6 txn->mt_dbxs = env->me_dbxs; /* mostly static anyway */ 81 memcpy(txn->mt_dbs, env->me_metas[txn->mt_toggle]->mm_dbs, 2 * sizeof(MDB_db)); 9 if (txn->mt_numdbs > 2) 21 memcpy(txn->mt_dbs+2, env->me_dbs[env->me_db_toggle]+2, 2,028 => ???:0x00000000000132c0 (1x) 156 => ???:memcpy (1x) . (txn->mt_numdbs - 2) * sizeof(MDB_db)); . LAZY_RWLOCK_UNLOCK(&env->me_dblock); . . return MDB_SUCCESS; . } . . int . mdb_txn_renew(MDB_txn *txn) -- line 1130 ---------------------------------------- -- line 1145 ---------------------------------------- . txn->mt_txnid, (txn->mt_flags & MDB_TXN_RDONLY) ? 'r' : 'w', txn, . (void *)txn->mt_env, txn->mt_dbs[MAIN_DBI].md_root); . } . return rc; . } . . int . mdb_txn_begin(MDB_env *env, unsigned int flags, MDB_txn **ret) 30 { . MDB_txn *txn; . int rc; . 9 if (env->me_flags & MDB_FATAL_ERROR) { . DPUTS("environment had fatal error, must shutdown!"); . return MDB_PANIC; . } 30 if ((txn = calloc(1, sizeof(MDB_txn) + env->me_maxdbs * sizeof(MDB_db))) == NULL) { 51,158 => ???:calloc (3x) . DPRINTF("calloc: %s", strerror(ErrCode())); . return ENOMEM; . } 6 txn->mt_dbs = (MDB_db *)(txn+1); 6 if (flags & MDB_RDONLY) { 2 txn->mt_flags |= MDB_TXN_RDONLY; . } 3 txn->mt_env = env; . . rc = mdb_txn_renew0(txn); . if (rc) . free(txn); . else { 6 *ret = txn; . DPRINTF("begin txn %lu%c %p on mdbenv %p, root page %lu", . txn->mt_txnid, (txn->mt_flags & MDB_TXN_RDONLY) ? 'r' : 'w', txn, . (void *) env, txn->mt_dbs[MAIN_DBI].md_root); . } . . return rc; 24 } . . static inline void . mdb_txn_reset0(MDB_txn *txn) . { 3 MDB_env *env = txn->mt_env; . 6 if (F_ISSET(txn->mt_flags, MDB_TXN_RDONLY)) { 6 txn->mt_u.reader->mr_txnid = 0; . } else { . MDB_oldpages *mop; . MDB_page *dp; . unsigned int i; . . /* return all dirty pages to dpage list */ . for (i=1; i<=txn->mt_u.dirty_list[0].mid; i++) { . dp = txn->mt_u.dirty_list[i].mptr; -- line 1198 ---------------------------------------- -- line 1214 ---------------------------------------- . for (i=2; ime_numdbs; i++) . env->me_dbxs[i].md_dirty = 0; . UNLOCK_MUTEX_W(env); . } . } . . void . mdb_txn_reset(MDB_txn *txn) 4 { 2 if (txn == NULL) . return; . . DPRINTF("reset txn %lu%c %p on mdbenv %p, root page %lu", . txn->mt_txnid, (txn->mt_flags & MDB_TXN_RDONLY) ? 'r' : 'w', txn, . (void *)txn->mt_env, txn->mt_dbs[MAIN_DBI].md_root); . . mdb_txn_reset0(txn); 4 } . . void . mdb_txn_abort(MDB_txn *txn) 8 { 4 if (txn == NULL) . return; . . DPRINTF("abort txn %lu%c %p on mdbenv %p, root page %lu", . txn->mt_txnid, (txn->mt_flags & MDB_TXN_RDONLY) ? 'r' : 'w', txn, . (void *)txn->mt_env, txn->mt_dbs[MAIN_DBI].md_root); . . mdb_txn_reset0(txn); 4 free(txn); 594 => ???:free (2x) 6 } . . int . mdb_txn_commit(MDB_txn *txn) 8 { . int n, done; . unsigned int i; . ssize_t rc; . off_t size; . MDB_page *dp; . MDB_env *env; . pgno_t next; . MDB_cursor mc; . 2 assert(txn != NULL); 3 assert(txn->mt_env != NULL); . . env = txn->mt_env; . 3 if (F_ISSET(txn->mt_flags, MDB_TXN_RDONLY)) { . mdb_txn_abort(txn); . return MDB_SUCCESS; . } . 3 if (txn != env->me_txn) { . DPUTS("attempt to commit unknown transaction"); . mdb_txn_abort(txn); . return EINVAL; . } . 2 if (F_ISSET(txn->mt_flags, MDB_TXN_ERROR)) { . DPUTS("error flag is set, can't commit"); . mdb_txn_abort(txn); . return EINVAL; . } . 3 if (!txn->mt_u.dirty_list[0].mid) . goto done; . . DPRINTF("committing txn %lu %p on mdbenv %p, root page %lu", . txn->mt_txnid, txn, (void *)env, txn->mt_dbs[MAIN_DBI].md_root); . . mc.mc_txn = txn; . mc.mc_dbi = FREE_DBI; . mc.mc_flags = 0; -- line 1289 ---------------------------------------- -- line 1475 ---------------------------------------- . . if ((n = mdb_env_sync(env, 0)) != 0 || . (n = mdb_env_write_meta(txn)) != MDB_SUCCESS) { . mdb_txn_abort(txn); . return n; . } . . done: 1 env->me_txn = NULL; . /* update the DB tables */ . { 3 int toggle = !env->me_db_toggle; . MDB_db *ip, *jp; . 3 ip = &env->me_dbs[toggle][2]; 1 jp = &txn->mt_dbs[2]; . LAZY_RWLOCK_WRLOCK(&env->me_dblock); 40 for (i = 2; i < txn->mt_numdbs; i++) { 21 if (ip->md_root != jp->md_root) . *ip = *jp; . ip++; jp++; . } . 23 for (i = 2; i < txn->mt_numdbs; i++) { 52 if (txn->mt_dbxs[i].md_dirty) . txn->mt_dbxs[i].md_dirty = 0; . } 1 env->me_db_toggle = toggle; 2 env->me_numdbs = txn->mt_numdbs; . LAZY_RWLOCK_UNLOCK(&env->me_dblock); . } . 3 UNLOCK_MUTEX_W(env); 23 => ???:pthread_mutex_unlock (1x) 3 free(txn); 109 => ???:free (1x) . 1 return MDB_SUCCESS; 9 } . . static int . mdb_env_read_header(MDB_env *env, MDB_meta *meta) 5 { . char page[PAGESIZE]; . MDB_page *p; . MDB_meta *m; . int rc, err; . . /* We don't know the page size yet, so use a minimum value. . */ . . #ifdef _WIN32 . if (!ReadFile(env->me_fd, page, PAGESIZE, (DWORD *)&rc, NULL) || rc == 0) . #else 8 if ((rc = read(env->me_fd, page, PAGESIZE)) == 0) 7 => ???:read (1x) . #endif . { . return ENOENT; . } 2 else if (rc != PAGESIZE) { . err = ErrCode(); . if (rc > 0) . err = EINVAL; . DPRINTF("read: %s", strerror(err)); . return err; . } . . p = (MDB_page *)page; . 2 if (!F_ISSET(p->mp_flags, P_META)) { . DPRINTF("page %lu not a meta page", p->mp_pgno); . return EINVAL; . } . 1 m = METADATA(p); 2 if (m->mm_magic != MDB_MAGIC) { . DPUTS("meta has invalid magic"); . return EINVAL; . } . 3 if (m->mm_version != MDB_VERSION) { . DPRINTF("database is version %u, expected version %u", . m->mm_version, MDB_VERSION); . return MDB_VERSION_MISMATCH; . } . 38 memcpy(meta, m, sizeof(*m)); 1 return 0; 5 } . . static int . mdb_env_init_meta(MDB_env *env, MDB_meta *meta) . { . MDB_page *p, *q; . MDB_meta *m; . int rc; . unsigned int psize; -- line 1569 ---------------------------------------- -- line 1703 ---------------------------------------- . DPRINTF("Using meta page %d", toggle); . *which = toggle; . . return MDB_SUCCESS; . } . . int . mdb_env_create(MDB_env **env) 2 { . MDB_env *e; . 3 e = calloc(1, sizeof(MDB_env)); 511 => ???:calloc (1x) 3 if (!e) return ENOMEM; . 1 e->me_maxreaders = DEFAULT_READERS; 1 e->me_maxdbs = 2; 1 e->me_fd = INVALID_HANDLE_VALUE; 1 e->me_lfd = INVALID_HANDLE_VALUE; 1 e->me_mfd = INVALID_HANDLE_VALUE; 2 *env = e; . return MDB_SUCCESS; 3 } . . int . mdb_env_set_mapsize(MDB_env *env, size_t size) . { 3 if (env->me_map) . return EINVAL; 2 env->me_mapsize = size; . return MDB_SUCCESS; 1 } . . int . mdb_env_set_maxdbs(MDB_env *env, int dbs) . { 3 if (env->me_map) . return EINVAL; 2 env->me_maxdbs = dbs; . return MDB_SUCCESS; 1 } . . int . mdb_env_set_maxreaders(MDB_env *env, int readers) . { . if (env->me_map) . return EINVAL; . env->me_maxreaders = readers; . return MDB_SUCCESS; -- line 1750 ---------------------------------------- -- line 1761 ---------------------------------------- . . static int . mdb_env_open2(MDB_env *env, unsigned int flags) . { . int i, newenv = 0, toggle; . MDB_meta meta; . MDB_page *p; . 2 env->me_flags = flags; . 23 memset(&meta, 0, sizeof(meta)); . 7 if ((i = mdb_env_read_header(env, &meta)) != 0) { 74 => /home/hyc/OD/hobj/servers/slapd/back-mdb/../../../../head/servers/slapd/back-mdb/../../../libraries/libmdb/mdb.c:mdb_env_read_header (1x) . if (i != ENOENT) . return i; . DPUTS("new mdbenv"); . newenv = 1; . } . 3 if (!env->me_mapsize) { . env->me_mapsize = newenv ? DEFAULT_MAPSIZE : meta.mm_mapsize; . } . . #ifdef _WIN32 . { . HANDLE mh; . LONG sizelo, sizehi; . sizelo = env->me_mapsize & 0xffffffff; -- line 1788 ---------------------------------------- -- line 1804 ---------------------------------------- . env->me_map = MapViewOfFileEx(mh, FILE_MAP_READ, 0, 0, env->me_mapsize, . meta.mm_address); . CloseHandle(mh); . if (!env->me_map) . return ErrCode(); . } . #else . i = MAP_SHARED; 4 if (meta.mm_address && (flags & MDB_FIXEDMAP)) . i |= MAP_FIXED; 6 env->me_map = mmap(meta.mm_address, env->me_mapsize, PROT_READ, i, 6 => ???:mmap (1x) . env->me_fd, 0); 3 if (env->me_map == MAP_FAILED) . return ErrCode(); . #endif . 2 if (newenv) { . meta.mm_mapsize = env->me_mapsize; . if (flags & MDB_FIXEDMAP) . meta.mm_address = env->me_map; . i = mdb_env_init_meta(env, &meta); . if (i != MDB_SUCCESS) { . munmap(env->me_map, env->me_mapsize); . return i; . } . } 2 env->me_psize = meta.mm_psize; . 4 env->me_maxpg = env->me_mapsize / env->me_psize; . . p = (MDB_page *)env->me_map; 3 env->me_metas[0] = METADATA(p); 2 env->me_metas[1] = (MDB_meta *)((char *)env->me_metas[0] + meta.mm_psize); . . if ((i = mdb_env_read_meta(env, &toggle)) != 0) . return i; . . DPRINTF("opened database version %u, pagesize %u", . env->me_metas[toggle]->mm_version, env->me_psize); . DPRINTF("depth: %u", env->me_metas[toggle]->mm_dbs[MAIN_DBI].md_depth); . DPRINTF("entries: %lu", env->me_metas[toggle]->mm_dbs[MAIN_DBI].md_entries); -- line 1844 ---------------------------------------- -- line 1852 ---------------------------------------- . . #ifndef _WIN32 . /* Windows doesn't support destructor callbacks for thread-specific storage */ . static void . mdb_env_reader_dest(void *ptr) . { . MDB_reader *reader = ptr; . 1 reader->mr_txnid = 0; 1 reader->mr_pid = 0; 1 reader->mr_tid = 0; 1 } . #endif . . /* downgrade the exclusive lock on the region back to shared */ . static void . mdb_env_share_locks(MDB_env *env) . { . int toggle = 0; . . if (env->me_metas[0]->mm_txnid < env->me_metas[1]->mm_txnid) . toggle = 1; 2 env->me_txns->mti_me_toggle = toggle; 6 env->me_txns->mti_txnid = env->me_metas[toggle]->mm_txnid; . . #ifdef _WIN32 . { . OVERLAPPED ov; . /* First acquire a shared lock. The Unlock will . * then release the existing exclusive lock. . */ . memset(&ov, 0, sizeof(ov)); . LockFileEx(env->me_lfd, 0, 0, 1, 0, &ov); . UnlockFile(env->me_lfd, 0, 0, 1, 0); . } . #else . { . struct flock lock_info; . /* The shared lock replaces the existing lock */ 3 memset((void *)&lock_info, 0, sizeof(lock_info)); . lock_info.l_type = F_RDLCK; . lock_info.l_whence = SEEK_SET; 1 lock_info.l_start = 0; 1 lock_info.l_len = 1; 4 fcntl(env->me_lfd, F_SETLK, &lock_info); 29 => ???:fcntl (1x) . } . #endif . } . . static int . mdb_env_setup_locks(MDB_env *env, char *lpath, int mode, int *excl) . { . int rc; -- line 1904 ---------------------------------------- -- line 1925 ---------------------------------------- . if (!LockFileEx(env->me_lfd, 0, 0, 1, 0, &ov)) { . rc = ErrCode(); . goto fail; . } . } . } . size = GetFileSize(env->me_lfd, NULL); . #else 8 if ((env->me_lfd = open(lpath, O_RDWR|O_CREAT, mode)) == -1) { 21 => ???:open (1x) . rc = ErrCode(); . return rc; . } . /* Try to get exclusive lock. If we succeed, then . * nobody is using the lock region and we should initialize it. . */ . { . struct flock lock_info; 2 memset((void *)&lock_info, 0, sizeof(lock_info)); 1 lock_info.l_type = F_WRLCK; . lock_info.l_whence = SEEK_SET; 1 lock_info.l_start = 0; 1 lock_info.l_len = 1; 5 rc = fcntl(env->me_lfd, F_SETLK, &lock_info); 58 => ???:fcntl (1x) 2 if (rc == 0) { . *excl = 1; . } else { . lock_info.l_type = F_RDLCK; . rc = fcntl(env->me_lfd, F_SETLKW, &lock_info); . if (rc) { 1 rc = ErrCode(); . goto fail; . } . } . } 4 size = lseek(env->me_lfd, 0, SEEK_END); 9,794 => ???:0x00000000000132c0'2 (1x) . #endif 4 rsize = (env->me_maxreaders-1) * sizeof(MDB_reader) + sizeof(MDB_txninfo); 2 if (size < rsize && *excl) { . #ifdef _WIN32 . SetFilePointer(env->me_lfd, rsize, NULL, 0); . if (!SetEndOfFile(env->me_lfd)) { . rc = ErrCode(); . goto fail; . } . #else . if (ftruncate(env->me_lfd, rsize) != 0) { . rc = ErrCode(); . goto fail; . } . #endif . } else { . rsize = size; 1 size = rsize - sizeof(MDB_txninfo); 4 env->me_maxreaders = size/sizeof(MDB_reader) + 1; . } . #ifdef _WIN32 . { . HANDLE mh; . mh = CreateFileMapping(env->me_lfd, NULL, PAGE_READWRITE, . 0, 0, NULL); . if (!mh) { . rc = ErrCode(); -- line 1986 ---------------------------------------- -- line 1989 ---------------------------------------- . env->me_txns = MapViewOfFileEx(mh, FILE_MAP_WRITE, 0, 0, rsize, NULL); . CloseHandle(mh); . if (!env->me_txns) { . rc = ErrCode(); . goto fail; . } . } . #else 7 env->me_txns = mmap(0, rsize, PROT_READ|PROT_WRITE, MAP_SHARED, 1,835 => ???:0x00000000000132c0'2 (1x) . env->me_lfd, 0); 2 if (env->me_txns == MAP_FAILED) { . rc = ErrCode(); . goto fail; . } . #endif 2 if (*excl) { . #ifdef _WIN32 . char *ptr; . if (!mdb_sec_inited) { . InitializeSecurityDescriptor(&mdb_null_sd, . SECURITY_DESCRIPTOR_REVISION); . SetSecurityDescriptorDacl(&mdb_null_sd, TRUE, 0, FALSE); . mdb_all_sa.nLength = sizeof(SECURITY_ATTRIBUTES); . mdb_all_sa.bInheritHandle = FALSE; -- line 2012 ---------------------------------------- -- line 2032 ---------------------------------------- . env->me_wmutex = CreateMutex(&mdb_all_sa, FALSE, env->me_txns->mti_rmname); . if (!env->me_wmutex) { . rc = ErrCode(); . goto fail; . } . #else . pthread_mutexattr_t mattr; . 2 pthread_mutexattr_init(&mattr); 1,962 => ???:0x00000000000132c0'2 (1x) 4 rc = pthread_mutexattr_setpshared(&mattr, PTHREAD_PROCESS_SHARED); 2,114 => ???:0x00000000000132c0'2 (1x) 3 if (rc) { . goto fail; . } 4 pthread_mutex_init(&env->me_txns->mti_mutex, &mattr); 66 => ???:pthread_mutex_init (1x) 4 pthread_mutex_init(&env->me_txns->mti_wmutex, &mattr); 33 => ???:pthread_mutex_init (1x) . #endif 2 env->me_txns->mti_version = MDB_VERSION; 2 env->me_txns->mti_magic = MDB_MAGIC; 2 env->me_txns->mti_txnid = 0; 2 env->me_txns->mti_numreaders = 0; 3 env->me_txns->mti_me_toggle = 0; . . } else { . if (env->me_txns->mti_magic != MDB_MAGIC) { . DPUTS("lock region has invalid magic"); . rc = EINVAL; . goto fail; . } . if (env->me_txns->mti_version != MDB_VERSION) { -- line 2060 ---------------------------------------- -- line 2090 ---------------------------------------- . } . . /** The name of the lock file in the DB environment */ . #define LOCKNAME "/lock.mdb" . /** The name of the data file in the DB environment */ . #define DATANAME "/data.mdb" . int . mdb_env_open(MDB_env *env, const char *path, unsigned int flags, mode_t mode) 11 { . int oflags, rc, len, excl; . char *lpath, *dpath; . 2 len = strlen(path); 16 => ???:0x000000000007bb40 (1x) 4 lpath = malloc(len + sizeof(LOCKNAME) + len + sizeof(DATANAME)); 169 => ???:malloc (1x) 3 if (!lpath) . return ENOMEM; 1 dpath = lpath + len + sizeof(LOCKNAME); 5 sprintf(lpath, "%s" LOCKNAME, path); 1,258 => ???:sprintf (1x) 5 sprintf(dpath, "%s" DATANAME, path); 629 => ???:sprintf (1x) . . rc = mdb_env_setup_locks(env, lpath, mode, &excl); . if (rc) . goto leave; . . #ifdef _WIN32 . if (F_ISSET(flags, MDB_RDONLY)) { . oflags = GENERIC_READ; -- line 2116 ---------------------------------------- -- line 2121 ---------------------------------------- . } . mode = FILE_ATTRIBUTE_NORMAL; . if ((env->me_fd = CreateFile(dpath, oflags, FILE_SHARE_READ|FILE_SHARE_WRITE, . NULL, len, mode, NULL)) == INVALID_HANDLE_VALUE) { . rc = ErrCode(); . goto leave; . } . #else 6 if (F_ISSET(flags, MDB_RDONLY)) . oflags = O_RDONLY; . else . oflags = O_RDWR | O_CREAT; . 8 if ((env->me_fd = open(dpath, oflags, mode)) == -1) { 7 => ???:open (1x) . rc = ErrCode(); . goto leave; . } . #endif . . if ((rc = mdb_env_open2(env, flags)) == MDB_SUCCESS) { . /* synchronous fd for meta writes */ . #ifdef _WIN32 -- line 2142 ---------------------------------------- -- line 2144 ---------------------------------------- . mode |= FILE_FLAG_WRITE_THROUGH; . if ((env->me_mfd = CreateFile(dpath, oflags, FILE_SHARE_READ|FILE_SHARE_WRITE, . NULL, len, mode, NULL)) == INVALID_HANDLE_VALUE) { . rc = ErrCode(); . goto leave; . } . #else . if (!(flags & (MDB_RDONLY|MDB_NOSYNC))) 4 oflags |= MDB_DSYNC; 8 if ((env->me_mfd = open(dpath, oflags, mode)) == -1) { 7 => ???:open (1x) . rc = ErrCode(); . goto leave; . } . #endif 3 env->me_path = strdup(path); 2,182 => ???:0x00000000000132c0'2 (1x) . DPRINTF("opened dbenv %p", (void *) env); 3 pthread_key_create(&env->me_txkey, mdb_env_reader_dest); 34 => ???:pthread_key_create (1x) . LAZY_RWLOCK_INIT(&env->me_dblock, NULL); 8 if (excl) . mdb_env_share_locks(env); 4 env->me_dbxs = calloc(env->me_maxdbs, sizeof(MDB_dbx)); 2,485 => ???:calloc (1x) 4 env->me_dbs[0] = calloc(env->me_maxdbs, sizeof(MDB_db)); 815 => ???:calloc (1x) 4 env->me_dbs[1] = calloc(env->me_maxdbs, sizeof(MDB_db)); 815 => ???:calloc (1x) 3 env->me_numdbs = 2; . } . . leave: . if (rc) { . if (env->me_fd != INVALID_HANDLE_VALUE) { . close(env->me_fd); . env->me_fd = INVALID_HANDLE_VALUE; . } . if (env->me_lfd != INVALID_HANDLE_VALUE) { . close(env->me_lfd); . env->me_lfd = INVALID_HANDLE_VALUE; . } . } 4 free(lpath); 76 => ???:free (1x) . return rc; 9 } . . void . mdb_env_close(MDB_env *env) 2 { . MDB_page *dp; . 2 if (env == NULL) . return; . 3 while (env->me_dpages) { . dp = env->me_dpages; . env->me_dpages = dp->mp_next; . free(dp); . } . 2 free(env->me_dbs[1]); 490 => ???:free (1x) 2 free(env->me_dbs[0]); 125 => ???:free (1x) 2 free(env->me_dbxs); 125 => ???:free (1x) 2 free(env->me_path); 78 => ???:free (1x) . . LAZY_RWLOCK_DESTROY(&env->me_dblock); 2 pthread_key_delete(env->me_txkey); 3,799 => ???:0x00000000000132c0'2 (1x) . 3 if (env->me_map) { 2 munmap(env->me_map, env->me_mapsize); 1,856 => ???:0x00000000000132c0'2 (1x) . } 2 close(env->me_mfd); 114 => ???:close (1x) 2 close(env->me_fd); 38 => ???:close (1x) 2 if (env->me_txns) { 1 pid_t pid = getpid(); 5 => ???:getpid (1x) . unsigned int i; 9 for (i=0; ime_txns->mti_numreaders; i++) 5 if (env->me_txns->mti_readers[i].mr_pid == pid) 2 env->me_txns->mti_readers[i].mr_pid = 0; 5 munmap(env->me_txns, (env->me_maxreaders-1)*sizeof(MDB_reader)+sizeof(MDB_txninfo)); 5 => ???:munmap (1x) . } 2 close(env->me_lfd); 38 => ???:close (1x) 2 free(env); 51 => ???:free (1x) 1 } . . /* only for aligned ints */ . static int . intcmp(const MDB_val *a, const MDB_val *b) . { . if (a->mv_size == sizeof(long)) . { . unsigned long *la, *lb; -- line 2230 ---------------------------------------- -- line 2242 ---------------------------------------- . /* ints must always be the same size */ . static int . cintcmp(const MDB_val *a, const MDB_val *b) . { . #if __BYTE_ORDER == __LITTLE_ENDIAN . unsigned short *u, *c; . int x; . 33,333,555 u = a->mv_data + a->mv_size; 22,222,370 c = b->mv_data + a->mv_size; . do { 172,468,944 x = *--u - *--c; 151,928,112 } while(!x && u > (unsigned short *)a->mv_data); . return x; . #else . return memcmp(a->mv_data, b->mv_data, a->mv_size); . #endif 11,111,185 } . . static int . memncmp(const MDB_val *a, const MDB_val *b) 20 { . int diff, len_diff; . unsigned int len; . 20 len = a->mv_size; 60 len_diff = a->mv_size - b->mv_size; 40 if (len_diff > 0) . len = b->mv_size; 210 diff = memcmp(a->mv_data, b->mv_data, len); 40 return diff ? diff : len_diff; 20 } . . static int . memnrcmp(const MDB_val *a, const MDB_val *b) . { . const unsigned char *p1, *p2, *p1_lim; . int diff, len_diff; . . if (b->mv_size == 0) -- line 2281 ---------------------------------------- -- line 2306 ---------------------------------------- . * Returns the smallest entry larger or equal to the key. . * If exactp is non-null, stores whether the found entry was an exact match . * in *exactp (1 or 0). . * If kip is non-null, stores the index of the found entry in *kip. . * If no entry larger or equal to the key is found, returns NULL. . */ . static MDB_node * . mdb_search_node(MDB_cursor *mc, MDB_val *key, int *exactp) 19,172,940 { . unsigned int i = 0, nkeys; . int low, high; . int rc = 0; 3,834,588 MDB_page *mp = mc->mc_pg[mc->mc_top]; . MDB_node *node = NULL; . MDB_val nodekey; . MDB_cmp_func *cmp; . DKBUF; . 3,834,588 nkeys = NUMKEYS(mp); . . DPRINTF("searching %u keys in %s page %lu", . nkeys, IS_LEAF(mp) ? "leaf" : "branch", . mp->mp_pgno); . 5,751,882 assert(nkeys > 0); . 9,586,470 low = IS_LEAF(mp) ? 0 : 1; 3,834,588 high = nkeys - 1; 13,421,058 cmp = mc->mc_txn->mt_dbxs[mc->mc_dbi].md_cmp; 5,751,882 if (IS_LEAF2(mp)) { . nodekey.mv_size = mc->mc_txn->mt_dbs[mc->mc_dbi].md_pad; . node = NODEPTR(mp, 0); /* fake */ . } 33,032,864 while (low <= high) { 19,722,332 i = (low + high) >> 1; . 19,722,332 if (IS_LEAF2(mp)) { . nodekey.mv_data = LEAF2KEY(mp, i, nodekey.mv_size); . } else { 39,444,664 node = NODEPTR(mp, i); . 19,722,332 nodekey.mv_size = node->mn_ksize; 39,444,664 nodekey.mv_data = NODEKEY(node); . } . 29,583,498 rc = cmp(key, &nodekey); 410 => /home/hyc/OD/hobj/servers/slapd/back-mdb/../../../../head/servers/slapd/back-mdb/../../../libraries/libmdb/mdb.c:memncmp (20x) 350,322,298 => /home/hyc/OD/hobj/servers/slapd/back-mdb/../../../../head/servers/slapd/back-mdb/../../../libraries/libmdb/mdb.c:cintcmp (9861144x) 104 => /home/hyc/OD/hobj/servers/slapd/back-mdb/../../../../head/servers/slapd/back-mdb/dn2id.c:mdb_dup_compare (2x) . . #if DEBUG . if (IS_LEAF(mp)) . DPRINTF("found leaf index %u [%s], rc = %i", . i, DKEY(&nodekey), rc); . else . DPRINTF("found branch index %u [%s -> %lu], rc = %i", . i, DKEY(&nodekey), NODEPGNO(node), rc); . #endif . 19,722,332 if (rc == 0) . break; 9,104,101 if (rc > 0) 3,046,202 low = i + 1; . else 6,057,899 high = i - 1; . } . 2,320,458 if (rc > 0) { /* Found entry is less than the key. */ 294,076 i++; /* Skip to get the smallest entry larger than key. */ 588,152 if (!IS_LEAF2(mp)) 5,010,892 node = NODEPTR(mp, i); . } 3,834,588 if (exactp) 9,586,470 *exactp = (rc == 0); . /* store the key index */ 1,917,294 mc->mc_ki[mc->mc_top] = i; 7,669,176 if (i >= nkeys) . /* There is no entry larger or equal to the key. */ . return NULL; . . /* nodeptr is fake for LEAF2 */ . return node; 15,338,352 } . . static void . cursor_pop_page(MDB_cursor *mc) . { . MDB_page *top; . . if (mc->mc_snum) { . top = mc->mc_pg[mc->mc_top]; -- line 2393 ---------------------------------------- -- line 2401 ---------------------------------------- . } . . static int . cursor_push_page(MDB_cursor *mc, MDB_page *mp) . { . DPRINTF("pushing page %lu on db %u cursor %p", mp->mp_pgno, . mc->mc_dbi, (void *) mc); . 6,002,985 if (mc->mc_snum >= CURSOR_STACK) . return ENOMEM; . 6,002,985 mc->mc_top = mc->mc_snum++; 4,001,990 mc->mc_pg[mc->mc_top] = mp; 2,000,995 mc->mc_ki[mc->mc_top] = 0; . . return MDB_SUCCESS; . } . . static int . mdb_get_page(MDB_txn *txn, pgno_t pgno, MDB_page **ret) 14,173,230 { . MDB_page *p = NULL; . 5,669,316 if (!F_ISSET(txn->mt_flags, MDB_TXN_RDONLY) && txn->mt_u.dirty_list[0].mid) { . unsigned x; . x = mdb_mid2l_search(txn->mt_u.dirty_list, pgno); . if (x <= txn->mt_u.dirty_list[0].mid && txn->mt_u.dirty_list[x].mid == pgno) { . p = txn->mt_u.dirty_list[x].mptr; . } . } . if (!p) { 14,173,230 if (pgno <= txn->mt_env->me_metas[txn->mt_toggle]->mm_last_pg) 8,503,938 p = (MDB_page *)(txn->mt_env->me_map + txn->mt_env->me_psize * pgno); . } 2,834,646 *ret = p; 5,669,292 if (!p) { . DPRINTF("page %lu not found", pgno); . assert(p != NULL); . } . return (p != NULL) ? MDB_SUCCESS : MDB_PAGE_NOTFOUND; 14,173,230 } . . static int . mdb_search_page_root(MDB_cursor *mc, MDB_val *key, int modify) 7,502,859 { 3,334,604 MDB_page *mp = mc->mc_pg[mc->mc_top]; . DKBUF; . int rc; . . 8,503,938 while (IS_BRANCH(mp)) { . MDB_node *node; . . DPRINTF("branch page %lu has %u keys", mp->mp_pgno, NUMKEYS(mp)); 10,004,975 assert(NUMKEYS(mp) > 1); . DPRINTF("found index 0 to page %lu", NODEPGNO(NODEPTR(mp, 0))); . 4,001,990 if (key == NULL) /* Initialize cursor to first page. */ 2,250,009 mc->mc_ki[mc->mc_top] = 0; 2,501,984 else if (key->mv_size > MAXKEYSIZE && key->mv_data == NULL) { . /* cursor to last page */ . mc->mc_ki[mc->mc_top] = NUMKEYS(mp)-1; . } else { . int exact; 5,837,619 node = mdb_search_node(mc, key, &exact); 507,500,870 => /home/hyc/OD/hobj/servers/slapd/back-mdb/../../../../head/servers/slapd/back-mdb/../../../libraries/libmdb/mdb.c:mdb_search_node (1250992x) 2,501,984 if (node == NULL) 232,712 mc->mc_ki[mc->mc_top] = NUMKEYS(mp) - 1; 3,665,709 else if (!exact) { 5,655,695 assert(mc->mc_ki[mc->mc_top] > 0); 4,706,084 mc->mc_ki[mc->mc_top]--; . } . } . . if (key) . DPRINTF("following index %u for key [%s]", . mc->mc_ki[mc->mc_top], DKEY(key)); 14,006,965 assert(mc->mc_ki[mc->mc_top] < NUMKEYS(mp)); 6,002,985 node = NODEPTR(mp, mc->mc_ki[mc->mc_top]); . 26,012,935 if ((rc = mdb_get_page(mc->mc_txn, NODEPGNO(node), &mp))) 46,022,885 => /home/hyc/OD/hobj/servers/slapd/back-mdb/../../../../head/servers/slapd/back-mdb/../../../libraries/libmdb/mdb.c:mdb_get_page (2000995x) . return rc; . 2,000,995 if ((rc = cursor_push_page(mc, mp))) . return rc; . 4,001,990 if (modify) { . if ((rc = mdb_touch(mc)) != 0) . return rc; . mp = mc->mc_pg[mc->mc_top]; . } . } . 3,334,604 if (!IS_LEAF(mp)) { . DPRINTF("internal error, index points to a %02X page!?", . mp->mp_flags); . return MDB_CORRUPTED; . } . . DPRINTF("found leaf page %lu for key [%s]", mp->mp_pgno, . key ? DKEY(key) : NULL); . . return MDB_SUCCESS; 5,835,557 } . . /* Search for the page a given key should be in. . * Pushes parent pages on the cursor stack. . * If key is NULL, search for the lowest page (used by mdb_cursor_first). . * If modify is true, visited pages are updated with new page numbers. . */ . static int . mdb_search_page(MDB_cursor *mc, MDB_val *key, int modify) 5,835,557 { . int rc; . pgno_t root; . . /* Make sure the txn is still viable, then find the root from . * the txn's db table. . */ 3,334,604 if (F_ISSET(mc->mc_txn->mt_flags, MDB_TXN_ERROR)) { . DPUTS("transaction has failed, must abort"); . return EINVAL; . } else 4,168,255 root = mc->mc_txn->mt_dbs[mc->mc_dbi].md_root; . 2,500,953 if (root == P_INVALID) { /* Tree is empty. */ . DPUTS("tree is empty"); . return MDB_NOTFOUND; . } . 3,334,604 if ((rc = mdb_get_page(mc->mc_txn, root, &mc->mc_pg[0]))) 19,173,997 => /home/hyc/OD/hobj/servers/slapd/back-mdb/../../../../head/servers/slapd/back-mdb/../../../libraries/libmdb/mdb.c:mdb_get_page (833651x) . return rc; . 833,651 mc->mc_snum = 1; 833,651 mc->mc_top = 0; . . DPRINTF("db %u root page %lu has flags 0x%X", . mc->mc_dbi, root, mc->mc_pg[0]->mp_flags); . 1,667,302 if (modify) { . /* For sub-databases, update main root first */ . if (mc->mc_dbi > MAIN_DBI && !mc->mc_txn->mt_dbxs[mc->mc_dbi].md_dirty) { . MDB_cursor mc2; . mc2.mc_txn = mc->mc_txn; . mc2.mc_dbi = MAIN_DBI; . rc = mdb_search_page(&mc2, &mc->mc_txn->mt_dbxs[mc->mc_dbi].md_name, 1); . if (rc) . return rc; -- line 2547 ---------------------------------------- -- line 2549 ---------------------------------------- . } . if (!F_ISSET(mc->mc_pg[0]->mp_flags, P_DIRTY)) { . if ((rc = mdb_touch(mc))) . return rc; . mc->mc_txn->mt_dbs[mc->mc_dbi].md_root = mc->mc_pg[0]->mp_pgno; . } . } . 4,168,255 return mdb_search_page_root(mc, key, modify); 693,428,903 => /home/hyc/OD/hobj/servers/slapd/back-mdb/../../../../head/servers/slapd/back-mdb/../../../libraries/libmdb/mdb.c:mdb_search_page_root (833651x) 4,168,255 } . . static int . mdb_read_data(MDB_txn *txn, MDB_node *leaf, MDB_val *data) 1,500,111 { . MDB_page *omp; /* overflow mpage */ . pgno_t pgno; . int rc; . 1,000,074 if (!F_ISSET(leaf->mn_flags, F_BIGDATA)) { 2,500,185 data->mv_size = NODEDSZ(leaf); 2,000,148 data->mv_data = NODEDATA(leaf); . return MDB_SUCCESS; . } . . /* Read overflow data. . */ . data->mv_size = NODEDSZ(leaf); . memcpy(&pgno, NODEDATA(leaf), sizeof(pgno)); . if ((rc = mdb_get_page(txn, pgno, &omp))) { . DPRINTF("read overflow page %lu failed", pgno); . return rc; . } . data->mv_data = METADATA(omp); . . return MDB_SUCCESS; 1,500,111 } . . int . mdb_get(MDB_txn *txn, MDB_dbi dbi, . MDB_val *key, MDB_val *data) 35 { . MDB_cursor mc; . MDB_xcursor mx; 7 int exact = 0; . DKBUF; . 14 assert(key); 14 assert(data); . DPRINTF("===> get db %u key [%s]", dbi, DKEY(key)); . 42 if (txn == NULL || !dbi || dbi >= txn->mt_numdbs) . return EINVAL; . 28 if (key->mv_size == 0 || key->mv_size > MAXKEYSIZE) { . return EINVAL; . } . 7 mc.mc_txn = txn; 7 mc.mc_dbi = dbi; 7 mc.mc_flags = 0; 49 if (txn->mt_dbs[dbi].md_flags & MDB_DUPSORT) { . mc.mc_xcursor = &mx; . mdb_xcursor_init0(&mc); . } else { 7 mc.mc_xcursor = NULL; . } 35 return mdb_cursor_set(&mc, key, data, MDB_SET, &exact); 2,439 => /home/hyc/OD/hobj/servers/slapd/back-mdb/../../../../head/servers/slapd/back-mdb/../../../libraries/libmdb/mdb.c:mdb_cursor_set (7x) 28 } . . static int . mdb_sibling(MDB_cursor *mc, int move_right) 4 { . int rc; . unsigned int ptop; . MDB_node *indx; . MDB_page *mp; . 4 if (mc->mc_snum < 2) { . return MDB_NOTFOUND; /* root has no siblings */ . } . ptop = mc->mc_top-1; . . DPRINTF("parent page is page %lu, index %u", . mc->mc_pg[ptop]->mp_pgno, mc->mc_ki[ptop]); . . cursor_pop_page(mc); -- line 2634 ---------------------------------------- -- line 2650 ---------------------------------------- . . indx = NODEPTR(mc->mc_pg[ptop], mc->mc_ki[ptop]); . if ((rc = mdb_get_page(mc->mc_txn, NODEPGNO(indx), &mp))) . return rc;; . . cursor_push_page(mc, mp); . . return MDB_SUCCESS; 4 } . . static int . mdb_cursor_next(MDB_cursor *mc, MDB_val *key, MDB_val *data, MDB_cursor_op op) 280 { . MDB_page *mp; . MDB_node *leaf; . int rc; . 84 if (mc->mc_flags & C_EOF) { . return MDB_NOTFOUND; . } . 56 assert(mc->mc_flags & C_INITIALIZED); . 56 mp = mc->mc_pg[mc->mc_top]; . 196 if (mc->mc_txn->mt_dbs[mc->mc_dbi].md_flags & MDB_DUPSORT) { . leaf = NODEPTR(mp, mc->mc_ki[mc->mc_top]); . if (F_ISSET(leaf->mn_flags, F_DUPDATA)) { . if (op == MDB_NEXT || op == MDB_NEXT_DUP) { . rc = mdb_cursor_next(&mc->mc_xcursor->mx_cursor, data, NULL, MDB_NEXT); 28 if (op != MDB_NEXT || rc == MDB_SUCCESS) . return rc; . } . } else { . mc->mc_xcursor->mx_cursor.mc_flags = 0; . if (op == MDB_NEXT_DUP) . return MDB_NOTFOUND; . } . } . . DPRINTF("cursor_next: top page is %lu in cursor %p", mp->mp_pgno, (void *) mc); . 196 if (mc->mc_ki[mc->mc_top] + 1u >= NUMKEYS(mp)) { . DPUTS("=====> move to next sibling page"); 5 if (mdb_sibling(mc, 1) != MDB_SUCCESS) { 12 => /home/hyc/OD/hobj/servers/slapd/back-mdb/../../../../head/servers/slapd/back-mdb/../../../libraries/libmdb/mdb.c:mdb_sibling (1x) 2 mc->mc_flags |= C_EOF; 1 return MDB_NOTFOUND; . } . mp = mc->mc_pg[mc->mc_top]; . DPRINTF("next page is %lu, key index %u", mp->mp_pgno, mc->mc_ki[mc->mc_top]); . } else 54 mc->mc_ki[mc->mc_top]++; . . DPRINTF("==> cursor points to page %lu with %u keys, key index %u", . mp->mp_pgno, NUMKEYS(mp), mc->mc_ki[mc->mc_top]); . 81 if (IS_LEAF2(mp)) { . key->mv_size = mc->mc_txn->mt_dbs[mc->mc_dbi].md_pad; . key->mv_data = LEAF2KEY(mp, mc->mc_ki[mc->mc_top], key->mv_size); . return MDB_SUCCESS; . } . 54 assert(IS_LEAF(mp)); 108 leaf = NODEPTR(mp, mc->mc_ki[mc->mc_top]); . 54 if (F_ISSET(leaf->mn_flags, F_DUPDATA)) { . mdb_xcursor_init1(mc, leaf); . } 54 if (data) { 216 if ((rc = mdb_read_data(mc->mc_txn, leaf, data) != MDB_SUCCESS)) 459 => /home/hyc/OD/hobj/servers/slapd/back-mdb/../../../../head/servers/slapd/back-mdb/../../../libraries/libmdb/mdb.c:mdb_read_data (27x) . return rc; . 54 if (F_ISSET(leaf->mn_flags, F_DUPDATA)) { . rc = mdb_cursor_first(&mc->mc_xcursor->mx_cursor, data, NULL); . if (rc != MDB_SUCCESS) . return rc; . } . } . 216 MDB_SET_KEY(leaf, key); . return MDB_SUCCESS; 196 } . . static int . mdb_cursor_prev(MDB_cursor *mc, MDB_val *key, MDB_val *data, MDB_cursor_op op) . { . MDB_page *mp; . MDB_node *leaf; . int rc; . -- line 2739 ---------------------------------------- -- line 2800 ---------------------------------------- . . MDB_SET_KEY(leaf, key); . return MDB_SUCCESS; . } . . static int . mdb_cursor_set(MDB_cursor *mc, MDB_val *key, MDB_val *data, . MDB_cursor_op op, int *exactp) 9,000,192 { . int rc; . MDB_node *leaf; . DKBUF; . 1,500,032 assert(mc); 1,500,032 assert(key); 1,500,032 assert(key->mv_size > 0); . . /* See if we're already on the right page */ 1,500,032 if (mc->mc_flags & C_INITIALIZED) { . MDB_val nodekey; . 3,000,008 if (mc->mc_pg[mc->mc_top]->mp_flags & P_LEAF2) { . nodekey.mv_size = mc->mc_txn->mt_dbs[mc->mc_dbi].md_pad; . nodekey.mv_data = LEAF2KEY(mc->mc_pg[mc->mc_top], 0, nodekey.mv_size); . } else { 1,500,004 leaf = NODEPTR(mc->mc_pg[mc->mc_top], 0); 6,000,016 MDB_SET_KEY(leaf, &nodekey); . } 3,000,008 rc = mc->mc_txn->mt_dbxs[mc->mc_dbi].md_cmp(key, &nodekey); 40,741,868 => /home/hyc/OD/hobj/servers/slapd/back-mdb/../../../../head/servers/slapd/back-mdb/../../../libraries/libmdb/mdb.c:cintcmp (750002x) 1,500,004 if (rc == 0) { . /* Probably happens rarely, but first node on the page . * was the one we wanted. . */ . mc->mc_ki[mc->mc_top] = 0; . set1: 167,424 if (exactp) 83,712 *exactp = 1; . rc = 0; 418,560 leaf = NODEPTR(mc->mc_pg[mc->mc_top], mc->mc_ki[mc->mc_top]); . goto set3; . } 750,002 if (rc > 0) { . unsigned int i; 4,000,312 if (NUMKEYS(mc->mc_pg[mc->mc_top]) > 1) { 1,000,078 if (mc->mc_pg[mc->mc_top]->mp_flags & P_LEAF2) { . nodekey.mv_data = LEAF2KEY(mc->mc_pg[mc->mc_top], . NUMKEYS(mc->mc_pg[mc->mc_top])-1, nodekey.mv_size); . } else { 1,500,117 leaf = NODEPTR(mc->mc_pg[mc->mc_top], NUMKEYS(mc->mc_pg[mc->mc_top])-1); 2,500,195 MDB_SET_KEY(leaf, &nodekey); . } 4,000,312 rc = mc->mc_txn->mt_dbxs[mc->mc_dbi].md_cmp(key, &nodekey); 16,693,092 => /home/hyc/OD/hobj/servers/slapd/back-mdb/../../../../head/servers/slapd/back-mdb/../../../libraries/libmdb/mdb.c:cintcmp (500039x) 1,000,078 if (rc == 0) { . /* last node was the one we wanted */ 753,408 mc->mc_ki[mc->mc_top] = NUMKEYS(mc->mc_pg[mc->mc_top])-1; 83,712 goto set1; . } 750,002 if (rc < 0) { . /* This is definitely the right page, skip search_page */ . rc = 0; . goto set2; . } . } . /* If any parents have right-sibs, search. . * Otherwise, there's nothing further. . */ 1,057,677 for (i=0; imc_top; i++) 390,321 if (mc->mc_ki[i] < 3,431,310 NUMKEYS(mc->mc_pg[i])-1) . break; 37,464 if (i == mc->mc_top) { . /* There are no other pages */ 14 mc->mc_ki[mc->mc_top] = NUMKEYS(mc->mc_pg[mc->mc_top]); 2 return MDB_NOTFOUND; . } . } . } . 2,334,600 rc = mdb_search_page(mc, key, 0); 668,197,598 => /home/hyc/OD/hobj/servers/slapd/back-mdb/../../../../head/servers/slapd/back-mdb/../../../libraries/libmdb/mdb.c:mdb_search_page (583649x) 1,167,300 if (rc != MDB_SUCCESS) . return rc; . 2,334,600 assert(IS_LEAF(mc->mc_pg[mc->mc_top])); . . set2: 3,331,510 leaf = mdb_search_node(mc, key, exactp); 193,172,410 => /home/hyc/OD/hobj/servers/slapd/back-mdb/../../../../head/servers/slapd/back-mdb/../../../libraries/libmdb/mdb.c:mdb_search_node (666301x) 3,331,510 if (exactp != NULL && !*exactp) { . /* MDB_SET specified and not an exact match. */ . return MDB_NOTFOUND; . } . 3,331,505 if (leaf == NULL) { . DPUTS("===> inexact leaf not found, goto sibling"); . if ((rc = mdb_sibling(mc, 1)) != MDB_SUCCESS) . return rc; /* no entries matched */ . mc->mc_ki[mc->mc_top] = 0; . assert(IS_LEAF(mc->mc_pg[mc->mc_top])); . leaf = NODEPTR(mc->mc_pg[mc->mc_top], 0); . } . . set3: . mc->mc_flags |= C_INITIALIZED; 3,000,052 mc->mc_flags &= ~C_EOF; . 2,250,039 if (IS_LEAF2(mc->mc_pg[mc->mc_top])) { . key->mv_size = mc->mc_txn->mt_dbs[mc->mc_dbi].md_pad; . key->mv_data = LEAF2KEY(mc->mc_pg[mc->mc_top], mc->mc_ki[mc->mc_top], key->mv_size); . return MDB_SUCCESS; . } . 1,500,026 if (F_ISSET(leaf->mn_flags, F_DUPDATA)) { 1,000,008 mdb_xcursor_init1(mc, leaf); 22,500,180 => /home/hyc/OD/hobj/servers/slapd/back-mdb/../../../../head/servers/slapd/back-mdb/../../../libraries/libmdb/mdb.c:mdb_xcursor_init1 (250002x) . } 2,250,039 if (data) { 1,500,024 if (F_ISSET(leaf->mn_flags, F_DUPDATA)) { 750,006 if (op == MDB_SET || op == MDB_SET_RANGE) { 1,250,005 rc = mdb_cursor_first(&mc->mc_xcursor->mx_cursor, data, NULL); 86,500,346 => /home/hyc/OD/hobj/servers/slapd/back-mdb/../../../../head/servers/slapd/back-mdb/../../../libraries/libmdb/mdb.c:mdb_cursor_first (250001x) . } else { . int ex2, *ex2p; 3 if (op == MDB_GET_BOTH) { . ex2p = &ex2; 3 ex2 = 0; . } else { . ex2p = NULL; . } 6 rc = mdb_cursor_set(&mc->mc_xcursor->mx_cursor, data, NULL, MDB_SET_RANGE, ex2p); 366 => /home/hyc/OD/hobj/servers/slapd/back-mdb/../../../../head/servers/slapd/back-mdb/../../../libraries/libmdb/mdb.c:mdb_cursor_set'2 (1x) . if (rc != MDB_SUCCESS) . return rc; . } 1,500,030 } else if (op == MDB_GET_BOTH || op == MDB_GET_BOTH_RANGE) { . MDB_val d2; . if ((rc = mdb_read_data(mc->mc_txn, leaf, &d2)) != MDB_SUCCESS) . return rc; . rc = mc->mc_txn->mt_dbxs[mc->mc_dbi].md_dcmp(data, &d2); . if (rc) { . if (op == MDB_GET_BOTH || rc > 0) . return MDB_NOTFOUND; . } . . } else { 3,000,060 if ((rc = mdb_read_data(mc->mc_txn, leaf, data)) != MDB_SUCCESS) 8,500,170 => /home/hyc/OD/hobj/servers/slapd/back-mdb/../../../../head/servers/slapd/back-mdb/../../../libraries/libmdb/mdb.c:mdb_read_data (500010x) . return rc; . } . } . . /* The key already matches in all other cases */ 1,500,024 if (op == MDB_SET_RANGE) 7 MDB_SET_KEY(leaf, key); . DPRINTF("==> cursor placed on key [%s]", DKEY(key)); . . return rc; 6,000,128 } . . static int . mdb_cursor_first(MDB_cursor *mc, MDB_val *key, MDB_val *data) 2,250,009 { . int rc; . MDB_node *leaf; . 1,000,004 rc = mdb_search_page(mc, NULL, 0); 75,250,301 => /home/hyc/OD/hobj/servers/slapd/back-mdb/../../../../head/servers/slapd/back-mdb/../../../libraries/libmdb/mdb.c:mdb_search_page (250001x) 500,002 if (rc != MDB_SUCCESS) . return rc; 1,000,004 assert(IS_LEAF(mc->mc_pg[mc->mc_top])); . 750,003 leaf = NODEPTR(mc->mc_pg[mc->mc_top], 0); . mc->mc_flags |= C_INITIALIZED; 1,000,004 mc->mc_flags &= ~C_EOF; . 500,002 if (IS_LEAF2(mc->mc_pg[mc->mc_top])) { . key->mv_size = mc->mc_txn->mt_dbs[mc->mc_dbi].md_pad; . key->mv_data = LEAF2KEY(mc->mc_pg[mc->mc_top], 0, key->mv_size); . return MDB_SUCCESS; . } . 500,002 if (data) { . if (F_ISSET(leaf->mn_flags, F_DUPDATA)) { . mdb_xcursor_init1(mc, leaf); . rc = mdb_cursor_first(&mc->mc_xcursor->mx_cursor, data, NULL); . if (rc) . return rc; . } else { . if (mc->mc_xcursor) . mc->mc_xcursor->mx_cursor.mc_flags = 0; . if ((rc = mdb_read_data(mc->mc_txn, leaf, data)) != MDB_SUCCESS) . return rc; . } . } 2,000,008 MDB_SET_KEY(leaf, key); . return MDB_SUCCESS; 1,750,007 } . . static int . mdb_cursor_last(MDB_cursor *mc, MDB_val *key, MDB_val *data) . { . int rc; . MDB_node *leaf; . MDB_val lkey; . -- line 2997 ---------------------------------------- -- line 3029 ---------------------------------------- . . MDB_SET_KEY(leaf, key); . return MDB_SUCCESS; . } . . int . mdb_cursor_get(MDB_cursor *mc, MDB_val *key, MDB_val *data, . MDB_cursor_op op) 3,750,180 { . int rc; 750,036 int exact = 0; . 1,500,072 assert(mc); . 3,000,144 switch (op) { . case MDB_GET_BOTH: . case MDB_GET_BOTH_RANGE: 4 if (data == NULL || mc->mc_xcursor == NULL) { . rc = EINVAL; . break; . } . /* FALLTHRU */ . case MDB_SET: . case MDB_SET_RANGE: 6,000,064 if (key == NULL || key->mv_size == 0 || key->mv_size > MAXKEYSIZE) { . rc = EINVAL; 1,500,016 } else if (op == MDB_SET_RANGE) 6 rc = mdb_cursor_set(mc, key, data, op, NULL); 201 => /home/hyc/OD/hobj/servers/slapd/back-mdb/../../../../head/servers/slapd/back-mdb/../../../libraries/libmdb/mdb.c:mdb_cursor_set (1x) . else 3,750,035 rc = mdb_cursor_set(mc, key, data, op, &exact); 1,112,866,972 => /home/hyc/OD/hobj/servers/slapd/back-mdb/../../../../head/servers/slapd/back-mdb/../../../libraries/libmdb/mdb.c:mdb_cursor_set (750007x) . break; . case MDB_GET_MULTIPLE: . if (data == NULL || . !(mc->mc_txn->mt_dbs[mc->mc_dbi].md_flags & MDB_DUPFIXED) || . !(mc->mc_flags & C_INITIALIZED)) { . rc = EINVAL; . break; . } -- line 3066 ---------------------------------------- -- line 3091 ---------------------------------------- . } else { . rc = MDB_NOTFOUND; . } . } . break; . case MDB_NEXT: . case MDB_NEXT_DUP: . case MDB_NEXT_NODUP: 56 if (!(mc->mc_flags & C_INITIALIZED)) . rc = mdb_cursor_first(mc, key, data); . else 84 rc = mdb_cursor_next(mc, key, data, op); 2,462 => /home/hyc/OD/hobj/servers/slapd/back-mdb/../../../../head/servers/slapd/back-mdb/../../../libraries/libmdb/mdb.c:mdb_cursor_next (28x) . break; . case MDB_PREV: . case MDB_PREV_DUP: . case MDB_PREV_NODUP: . if (!(mc->mc_flags & C_INITIALIZED) || (mc->mc_flags & C_EOF)) . rc = mdb_cursor_last(mc, key, data); . else . rc = mdb_cursor_prev(mc, key, data, op); -- line 3110 ---------------------------------------- -- line 3137 ---------------------------------------- . break; . default: . DPRINTF("unhandled/unimplemented cursor operation %u", op); . rc = EINVAL; . break; . } . . return rc; 3,000,144 } . . static int . mdb_cursor_touch(MDB_cursor *mc) . { . int rc; . . if (mc->mc_dbi > MAIN_DBI && !mc->mc_txn->mt_dbxs[mc->mc_dbi].md_dirty) { . MDB_cursor mc2; -- line 3153 ---------------------------------------- -- line 3625 ---------------------------------------- . . mp->mp_lower -= sizeof(indx_t); . mp->mp_upper += sz; . } . . static void . mdb_xcursor_init0(MDB_cursor *mc) . { 3 MDB_xcursor *mx = mc->mc_xcursor; . MDB_dbi dbn; . 57 mx->mx_txn = *mc->mc_txn; 6 mx->mx_txn.mt_dbxs = mx->mx_dbxs; 6 mx->mx_txn.mt_dbs = mx->mx_dbs; 39 mx->mx_dbxs[0] = mc->mc_txn->mt_dbxs[0]; 36 mx->mx_dbxs[1] = mc->mc_txn->mt_dbxs[1]; 9 if (mc->mc_dbi > 1) { 54 mx->mx_dbxs[2] = mc->mc_txn->mt_dbxs[mc->mc_dbi]; . dbn = 2; . } else { . dbn = 1; . } 18 mx->mx_dbxs[dbn+1].md_parent = dbn; 18 mx->mx_dbxs[dbn+1].md_cmp = mx->mx_dbxs[dbn].md_dcmp; 6 mx->mx_dbxs[dbn+1].md_rel = mx->mx_dbxs[dbn].md_rel; 3 mx->mx_dbxs[dbn+1].md_dirty = 0; 3 mx->mx_txn.mt_numdbs = dbn+2; 6 mx->mx_txn.mt_u = mc->mc_txn->mt_u; . 3 mx->mx_cursor.mc_xcursor = NULL; 6 mx->mx_cursor.mc_txn = &mx->mx_txn; 3 mx->mx_cursor.mc_dbi = dbn+1; 3 } . . static void . mdb_xcursor_init1(MDB_cursor *mc, MDB_node *node) 250,002 { 500,004 MDB_db *db = NODEDATA(node); 250,002 MDB_xcursor *mx = mc->mc_xcursor; . MDB_dbi dbn; 3,500,028 mx->mx_dbs[0] = mc->mc_txn->mt_dbs[0]; 3,000,024 mx->mx_dbs[1] = mc->mc_txn->mt_dbs[1]; 1,000,008 if (mc->mc_dbi > 1) { 3,750,030 mx->mx_dbs[2] = mc->mc_txn->mt_dbs[mc->mc_dbi]; 1,750,014 mx->mx_dbxs[2].md_dirty = mc->mc_txn->mt_dbxs[mc->mc_dbi].md_dirty; . dbn = 3; . } else { . dbn = 2; . } . DPRINTF("Sub-db %u for db %u root page %lu", dbn, mc->mc_dbi, db->md_root); 4,500,036 mx->mx_dbs[dbn] = *db; 1,000,008 if (F_ISSET(mc->mc_pg[mc->mc_top]->mp_flags, P_DIRTY)) . mx->mx_dbxs[dbn].md_dirty = 1; 1,000,008 mx->mx_dbxs[dbn].md_name.mv_data = NODEKEY(node); 500,004 mx->mx_dbxs[dbn].md_name.mv_size = node->mn_ksize; 500,004 mx->mx_txn.mt_next_pgno = mc->mc_txn->mt_next_pgno; 250,002 mx->mx_cursor.mc_snum = 0; 250,002 mx->mx_cursor.mc_flags = 0; 500,004 } . . static void . mdb_xcursor_init2(MDB_cursor *mc) . { . MDB_xcursor *mx = mc->mc_xcursor; . MDB_dbi dbn; . mx->mx_dbs[0] = mc->mc_txn->mt_dbs[0]; . mx->mx_dbs[1] = mc->mc_txn->mt_dbs[1]; -- line 3691 ---------------------------------------- -- line 3711 ---------------------------------------- . if (mc->mc_dbi > 1) { . mc->mc_txn->mt_dbs[mc->mc_dbi] = mx->mx_dbs[2]; . mc->mc_txn->mt_dbxs[mc->mc_dbi].md_dirty = mx->mx_dbxs[2].md_dirty; . } . } . . int . mdb_cursor_open(MDB_txn *txn, MDB_dbi dbi, MDB_cursor **ret) 54 { . MDB_cursor *mc; . size_t size = sizeof(MDB_cursor); . 48 if (txn == NULL || ret == NULL || !dbi || dbi >= txn->mt_numdbs) . return EINVAL; . 60 if (txn->mt_dbs[dbi].md_flags & MDB_DUPSORT) . size += sizeof(MDB_xcursor); . 36 if ((mc = calloc(1, size)) != NULL) { 2,153 => ???:calloc (6x) 6 mc->mc_dbi = dbi; 6 mc->mc_txn = txn; 18 if (txn->mt_dbs[dbi].md_flags & MDB_DUPSORT) { . MDB_xcursor *mx = (MDB_xcursor *)(mc + 1); 6 mc->mc_xcursor = mx; 9 mdb_xcursor_init0(mc); 279 => /home/hyc/OD/hobj/servers/slapd/back-mdb/../../../../head/servers/slapd/back-mdb/../../../libraries/libmdb/mdb.c:mdb_xcursor_init0 (3x) . } . } else { . return ENOMEM; . } . 12 *ret = mc; . 6 return MDB_SUCCESS; 42 } . . /* Return the count of duplicate data items for the current key */ . int . mdb_cursor_count(MDB_cursor *mc, unsigned long *countp) . { . MDB_node *leaf; . . if (mc == NULL || countp == NULL) -- line 3752 ---------------------------------------- -- line 3765 ---------------------------------------- . *countp = mc->mc_xcursor->mx_txn.mt_dbs[mc->mc_xcursor->mx_cursor.mc_dbi].md_entries; . } . return MDB_SUCCESS; . } . . void . mdb_cursor_close(MDB_cursor *mc) . { 10 if (mc != NULL) { 5 free(mc); 554 => ???:free (5x) . } . } . . static int . mdb_update_key(MDB_page *mp, indx_t indx, MDB_val *key) . { . indx_t ptr, i, numkeys; . int delta; -- line 3782 ---------------------------------------- -- line 4546 ---------------------------------------- . mdb_env_read_meta(env, &toggle); . . return mdb_stat0(env, &env->me_metas[toggle]->mm_dbs[MAIN_DBI], arg); . } . . static void . mdb_default_cmp(MDB_txn *txn, MDB_dbi dbi) . { 63 if (txn->mt_dbs[dbi].md_flags & MDB_REVERSEKEY) . txn->mt_dbxs[dbi].md_cmp = memnrcmp; 18 else if (txn->mt_dbs[dbi].md_flags & MDB_INTEGERKEY) 8 txn->mt_dbxs[dbi].md_cmp = cintcmp; . else 15 txn->mt_dbxs[dbi].md_cmp = memncmp; . 18 if (txn->mt_dbs[dbi].md_flags & MDB_DUPSORT) { 10 if (txn->mt_dbs[dbi].md_flags & MDB_INTEGERDUP) { . if (txn->mt_dbs[dbi].md_flags & MDB_DUPFIXED) 24 txn->mt_dbxs[dbi].md_dcmp = intcmp; . else . txn->mt_dbxs[dbi].md_dcmp = cintcmp; . } else if (txn->mt_dbs[dbi].md_flags & MDB_REVERSEDUP) { 6 txn->mt_dbxs[dbi].md_dcmp = memnrcmp; . } else { . txn->mt_dbxs[dbi].md_dcmp = memncmp; . } . } else { 8 txn->mt_dbxs[dbi].md_dcmp = NULL; . } . } . . int mdb_open(MDB_txn *txn, const char *name, unsigned int flags, MDB_dbi *dbi) 77 { . MDB_val key, data; . MDB_dbi i; . int rc, dirty = 0; . size_t len; . 21 if (txn->mt_dbxs[FREE_DBI].md_cmp == NULL) { 3 mdb_default_cmp(txn, FREE_DBI); 15 => /home/hyc/OD/hobj/servers/slapd/back-mdb/../../../../head/servers/slapd/back-mdb/../../../libraries/libmdb/mdb.c:mdb_default_cmp (1x) . } . . /* main DB? */ 14 if (!name) { . *dbi = MAIN_DBI; . if (flags & (MDB_DUPSORT|MDB_REVERSEKEY|MDB_INTEGERKEY)) . txn->mt_dbs[MAIN_DBI].md_flags |= (flags & (MDB_DUPSORT|MDB_REVERSEKEY|MDB_INTEGERKEY)); . mdb_default_cmp(txn, MAIN_DBI); . return MDB_SUCCESS; . } . 21 if (txn->mt_dbxs[MAIN_DBI].md_cmp == NULL) { 4 mdb_default_cmp(txn, MAIN_DBI); 16 => /home/hyc/OD/hobj/servers/slapd/back-mdb/../../../../head/servers/slapd/back-mdb/../../../libraries/libmdb/mdb.c:mdb_default_cmp (1x) . } . . /* Is the DB already open? */ 21 len = strlen(name); 112 => ???:0x000000000007bb40 (7x) 123 for (i=2; imt_numdbs; i++) { 54 if (len == txn->mt_dbxs[i].md_name.mv_size && 20 !strncmp(name, txn->mt_dbxs[i].md_name.mv_data, len)) { 143 => ???:0x000000000010e5a0 (3x) 1,921 => ???:0x00000000000132c0'2 (1x) . *dbi = i; . return MDB_SUCCESS; . } . } . 42 if (txn->mt_numdbs >= txn->mt_env->me_maxdbs - 1) . return ENFILE; . . /* Find the DB info */ 7 key.mv_size = len; 7 key.mv_data = (void *)name; 56 rc = mdb_get(txn, MAIN_DBI, &key, &data); 2,719 => /home/hyc/OD/hobj/servers/slapd/back-mdb/../../../../head/servers/slapd/back-mdb/../../../libraries/libmdb/mdb.c:mdb_get (7x) . . /* Create if requested */ 21 if (rc == MDB_NOTFOUND && (flags & MDB_CREATE)) { . MDB_cursor mc; . MDB_db dummy; . data.mv_size = sizeof(MDB_db); . data.mv_data = &dummy; . memset(&dummy, 0, sizeof(dummy)); . dummy.md_root = P_INVALID; . dummy.md_flags = flags & 0xffff; . mc.mc_txn = txn; . mc.mc_dbi = MAIN_DBI; . mc.mc_flags = 0; . rc = mdb_cursor_put(&mc, &key, &data, F_SUBDATA); . dirty = 1; . } . . /* OK, got info, add to table */ 14 if (rc == MDB_SUCCESS) { 63 txn->mt_dbxs[txn->mt_numdbs].md_name.mv_data = strdup(name); 1,761 => ???:strdup (7x) 35 txn->mt_dbxs[txn->mt_numdbs].md_name.mv_size = len; 7 txn->mt_dbxs[txn->mt_numdbs].md_rel = NULL; 7 txn->mt_dbxs[txn->mt_numdbs].md_parent = MAIN_DBI; 35 txn->mt_dbxs[txn->mt_numdbs].md_dirty = dirty; 119 memcpy(&txn->mt_dbs[txn->mt_numdbs], data.mv_data, sizeof(MDB_db)); 14 *dbi = txn->mt_numdbs; 126 txn->mt_env->me_dbs[0][txn->mt_numdbs] = txn->mt_dbs[txn->mt_numdbs]; 112 txn->mt_env->me_dbs[1][txn->mt_numdbs] = txn->mt_dbs[txn->mt_numdbs]; 21 mdb_default_cmp(txn, txn->mt_numdbs); 170 => /home/hyc/OD/hobj/servers/slapd/back-mdb/../../../../head/servers/slapd/back-mdb/../../../libraries/libmdb/mdb.c:mdb_default_cmp (7x) 21 txn->mt_numdbs++; . } . . return rc; 63 } . . int mdb_stat(MDB_txn *txn, MDB_dbi dbi, MDB_stat *arg) . { . if (txn == NULL || arg == NULL || dbi >= txn->mt_numdbs) . return EINVAL; . . return mdb_stat0(txn->mt_env, &txn->mt_dbs[dbi], arg); . } . . void mdb_close(MDB_txn *txn, MDB_dbi dbi) . { . char *ptr; 28 if (dbi <= MAIN_DBI || dbi >= txn->mt_numdbs) . return; 42 ptr = txn->mt_dbxs[dbi].md_name.mv_data; 7 txn->mt_dbxs[dbi].md_name.mv_data = NULL; 14 txn->mt_dbxs[dbi].md_name.mv_size = 0; 14 free(ptr); 546 => ???:free (7x) . } . . int mdb_set_compare(MDB_txn *txn, MDB_dbi dbi, MDB_cmp_func *cmp) . { . if (txn == NULL || !dbi || dbi >= txn->mt_numdbs) . return EINVAL; . . txn->mt_dbxs[dbi].md_cmp = cmp; . return MDB_SUCCESS; . } . . int mdb_set_dupsort(MDB_txn *txn, MDB_dbi dbi, MDB_cmp_func *cmp) . { 6 if (txn == NULL || !dbi || dbi >= txn->mt_numdbs) . return EINVAL; . 6 txn->mt_dbxs[dbi].md_dcmp = cmp; 1 return MDB_SUCCESS; . } . . int mdb_set_relfunc(MDB_txn *txn, MDB_dbi dbi, MDB_rel_func *rel) . { . if (txn == NULL || !dbi || dbi >= txn->mt_numdbs) . return EINVAL; . . txn->mt_dbxs[dbi].md_rel = rel; -- line 4695 ---------------------------------------- -------------------------------------------------------------------------------- -- Auto-annotated source: /home/hyc/OD/hobj/servers/slapd/../../../head/servers/slapd/backend.c -------------------------------------------------------------------------------- Ir -- line 49 ---------------------------------------- . int nBackendInfo = 0; . slap_bi_head backendInfo = LDAP_STAILQ_HEAD_INITIALIZER(backendInfo); . . int nBackendDB = 0; . slap_be_head backendDB = LDAP_STAILQ_HEAD_INITIALIZER(backendDB); . . static int . backend_init_controls( BackendInfo *bi ) 30 { 18 if ( bi->bi_controls ) { . int i; . 152 for ( i = 0; bi->bi_controls[ i ]; i++ ) { . int cid; . 88 if ( slap_find_control_id( bi->bi_controls[ i ], &cid ) 10,400 => /home/hyc/OD/hobj/servers/slapd/../../../head/servers/slapd/controls.c:slap_find_control_id (22x) . == LDAP_CONTROL_NOT_FOUND ) . { . if ( !( slapMode & SLAP_TOOL_MODE ) ) { . assert( 0 ); . } . . return -1; . } . 44 bi->bi_ctrls[ cid ] = 1; . } . } . . return 0; 30 } . . int backend_init(void) 3 { . int rc = -1; . BackendInfo *bi; . 5 if((nBackendInfo != 0) || !LDAP_STAILQ_EMPTY(&backendInfo)) { . /* already initialized */ . Debug( LDAP_DEBUG_ANY, . "backend_init: already initialized\n", 0, 0, 0 ); . return -1; . } . 39 for( bi=slap_binfo; bi->bi_type != NULL; bi++,nBackendInfo++ ) { 29 assert( bi->bi_init != 0 ); . 27 rc = bi->bi_init( bi ); 399,186 => /home/hyc/OD/hobj/servers/slapd/back-bdb/../../../../head/servers/slapd/back-bdb/init.c:bdb_back_initialize (1x) 322,520 => /home/hyc/OD/hobj/servers/slapd/back-hdb/init.c:hdb_back_initialize (1x) 850,704 => /home/hyc/OD/hobj/servers/slapd/back-ldap/../../../../head/servers/slapd/back-ldap/init.c:ldap_back_initialize (1x) 681,702 => /home/hyc/OD/hobj/servers/slapd/back-monitor/../../../../head/servers/slapd/back-monitor/init.c:monitor_back_initialize (1x) 1,952,249 => /home/hyc/OD/hobj/servers/slapd/../../../head/servers/slapd/bconfig.c:config_back_initialize (1x) 172,481 => /home/hyc/OD/hobj/servers/slapd/back-mdb/../../../../head/servers/slapd/back-mdb/init.c:mdb_back_initialize (1x) 25 => /home/hyc/OD/hobj/servers/slapd/back-meta/../../../../head/servers/slapd/back-meta/init.c:meta_back_initialize (1x) 64,784 => /home/hyc/OD/hobj/servers/slapd/back-relay/../../../../head/servers/slapd/back-relay/init.c:relay_back_initialize (1x) 61,257 => /home/hyc/OD/hobj/servers/slapd/back-ldif/../../../../head/servers/slapd/back-ldif/ldif.c:ldif_back_initialize (1x) . 18 if(rc != 0) { . Debug( LDAP_DEBUG_ANY, . "backend_init: initialized for type \"%s\"\n", . bi->bi_type, 0, 0 ); . /* destroy those we've already inited */ . for( nBackendInfo--; . nBackendInfo >= 0 ; . nBackendInfo-- ) . { -- line 106 ---------------------------------------- -- line 107 ---------------------------------------- . if ( slap_binfo[nBackendInfo].bi_destroy ) { . slap_binfo[nBackendInfo].bi_destroy( . &slap_binfo[nBackendInfo] ); . } . } . return rc; . } . 45 LDAP_STAILQ_INSERT_TAIL(&backendInfo, bi, bi_next); . } . . if ( nBackendInfo > 0) { . return 0; . } . . #ifdef SLAPD_MODULES . return 0; -- line 123 ---------------------------------------- -- line 124 ---------------------------------------- . #else . . Debug( LDAP_DEBUG_ANY, . "backend_init: failed\n", . 0, 0, 0 ); . . return rc; . #endif /* SLAPD_MODULES */ 5 } . . int backend_add(BackendInfo *aBackendInfo) . { . int rc = 0; . . if ( aBackendInfo->bi_init == NULL ) { . Debug( LDAP_DEBUG_ANY, "backend_add: " . "backend type \"%s\" does not have the (mandatory)init function\n", -- line 140 ---------------------------------------- -- line 154 ---------------------------------------- . . /* now add the backend type to the Backend Info List */ . LDAP_STAILQ_INSERT_TAIL( &backendInfo, aBackendInfo, bi_next ); . nBackendInfo++; . return 0; . } . . static int 6 backend_set_controls( BackendDB *be ) 24 { 6 BackendInfo *bi = be->bd_info; . . /* back-relay takes care of itself; so may do other */ 18 if ( overlay_is_over( be ) ) { 30 => /home/hyc/OD/hobj/servers/slapd/../../../head/servers/slapd/backover.c:overlay_is_over (6x) . bi = ((slap_overinfo *)be->bd_info->bi_private)->oi_orig; . } . 12 if ( bi->bi_controls ) { 15 if ( be->be_ctrls[ SLAP_MAX_CIDS ] == 0 ) { 12 AC_MEMCPY( be->be_ctrls, bi->bi_ctrls, 219 => ???:memmove (3x) . sizeof( be->be_ctrls ) ); 3 be->be_ctrls[ SLAP_MAX_CIDS ] = 1; . . } else { . int i; . 192 for ( i = 0; i < SLAP_MAX_CIDS; i++ ) { 288 if ( bi->bi_ctrls[ i ] ) { 203 be->be_ctrls[ i ] = bi->bi_ctrls[ i ]; . } . } . } . . } . . return 0; 30 } . . /* startup a specific backend database */ . int backend_startup_one(Backend *be, ConfigReply *cr) 15 { . int rc = 0; . 6 assert( be != NULL ); . 12 be->be_pending_csn_list = (struct be_pcl *) 644 => /home/hyc/OD/hobj/servers/slapd/../../../head/servers/slapd/ch_malloc.c:ch_calloc (3x) . ch_calloc( 1, sizeof( struct be_pcl ) ); . 6 LDAP_TAILQ_INIT( be->be_pending_csn_list ); . 15 Debug( LDAP_DEBUG_TRACE, . "backend_startup_one: starting \"%s\"\n", . be->be_suffix ? be->be_suffix[0].bv_val : "(unknown)", . 0, 0 ); . . /* set database controls */ 6 (void)backend_set_controls( be ); 1,058 => /home/hyc/OD/hobj/servers/slapd/../../../head/servers/slapd/backend.c:backend_set_controls (3x) . . #if 0 . if ( !BER_BVISEMPTY( &be->be_rootndn ) . && select_backend( &be->be_rootndn, 0 ) == be . && BER_BVISNULL( &be->be_rootpw ) ) . { . /* warning: if rootdn entry is created, . * it can take rootdn privileges; . * set empty rootpw to prevent */ . } . #endif . 15 if ( be->bd_info->bi_db_open ) { 12 rc = be->bd_info->bi_db_open( be, cr ); 1,872,552 => /home/hyc/OD/hobj/servers/slapd/back-monitor/../../../../head/servers/slapd/back-monitor/init.c:monitor_back_db_open (1x) 54,474 => /home/hyc/OD/hobj/servers/slapd/back-mdb/../../../../head/servers/slapd/back-mdb/init.c:mdb_db_open (1x) 7,105,743 => /home/hyc/OD/hobj/servers/slapd/../../../head/servers/slapd/bconfig.c:config_back_db_open (1x) 6 if ( rc == 0 ) { 6 (void)backend_set_controls( be ); 755 => /home/hyc/OD/hobj/servers/slapd/../../../head/servers/slapd/backend.c:backend_set_controls (3x) . . } else { . char *type = be->bd_info->bi_type; . char *suffix = "(null)"; . . if ( overlay_is_over( be ) ) { . slap_overinfo *oi = (slap_overinfo *)be->bd_info->bi_private; . type = oi->oi_orig->bi_type; -- line 234 ---------------------------------------- -- line 241 ---------------------------------------- . Debug( LDAP_DEBUG_ANY, . "backend_startup_one (type=%s, suffix=\"%s\"): " . "bi_db_open failed! (%d)\n", . type, suffix, rc ); . } . } . . return rc; 15 } . . int backend_startup(Backend *be) 6 { . int i; . int rc = 0; . BackendInfo *bi; 71 ConfigReply cr={0, ""}; . 3 if( ! ( nBackendDB > 0 ) ) { . /* no databases */ . Debug( LDAP_DEBUG_ANY, . "backend_startup: %d databases to startup.\n", . nBackendDB, 0, 0 ); . return 1; . } . 2 if(be != NULL) { . if ( be->bd_info->bi_open ) { . rc = be->bd_info->bi_open( be->bd_info ); . if ( rc != 0 ) { . Debug( LDAP_DEBUG_ANY, . "backend_startup: bi_open failed!\n", . 0, 0, 0 ); . . return rc; . } . } . . return backend_startup_one( be, &cr ); . } . . /* open frontend, if required */ 5 if ( frontendDB->bd_info->bi_db_open ) { . rc = frontendDB->bd_info->bi_db_open( frontendDB, &cr ); . if ( rc != 0 ) { . Debug( LDAP_DEBUG_ANY, . "backend_startup: bi_db_open(frontend) failed! (%d)\n", . rc, 0, 0 ); . return rc; . } . } . . /* open each backend type */ . i = -1; 32 LDAP_STAILQ_FOREACH(bi, &backendInfo, bi_next) { 9 i++; 27 if( bi->bi_nDB == 0) { . /* no database of this type, don't open */ . continue; . } . 9 if( bi->bi_open ) { . rc = bi->bi_open( bi ); . if ( rc != 0 ) { . Debug( LDAP_DEBUG_ANY, . "backend_startup: bi_open %d (%s) failed!\n", . i, bi->bi_type, 0 ); . return rc; . } . } . 6 (void)backend_init_controls( bi ); 5,381 => /home/hyc/OD/hobj/servers/slapd/../../../head/servers/slapd/backend.c:backend_init_controls (3x) . } . . /* open each backend database */ . i = -1; 14 LDAP_STAILQ_FOREACH(be, &backendDB, be_next) { 3 i++; 6 if ( be->be_suffix == NULL ) { . Debug( LDAP_DEBUG_ANY, . "backend_startup: warning, database %d (%s) " . "has no suffix\n", . i, be->bd_info->bi_type, 0 ); . } . 12 rc = backend_startup_one( be, &cr ); 9,034,585 => /home/hyc/OD/hobj/servers/slapd/../../../head/servers/slapd/backend.c:backend_startup_one (3x) . 6 if ( rc ) return rc; . } . . return rc; 7 } . . int backend_num( Backend *be ) . { . int i = 0; . BackendDB *b2; . . if( be == NULL ) return -1; . -- line 339 ---------------------------------------- -- line 340 ---------------------------------------- . LDAP_STAILQ_FOREACH( b2, &backendDB, be_next ) { . if( be == b2 ) return i; . i++; . } . return -1; . } . . int backend_shutdown( Backend *be ) 4 { . int rc = 0; . BackendInfo *bi; . 2 if( be != NULL ) { . /* shutdown a specific backend database */ . . if ( be->bd_info->bi_nDB == 0 ) { . /* no database of this type, we never opened it */ . return 0; . } . . if ( be->bd_info->bi_db_close ) { -- line 360 ---------------------------------------- -- line 366 ---------------------------------------- . rc = be->bd_info->bi_close( be->bd_info ); . if ( rc ) return rc; . } . . return 0; . } . . /* close each backend database */ 13 LDAP_STAILQ_FOREACH( be, &backendDB, be_next ) { 12 if ( be->bd_info->bi_db_close ) { 6 be->bd_info->bi_db_close( be, NULL ); 57,584 => /home/hyc/OD/hobj/servers/slapd/back-mdb/../../../../head/servers/slapd/back-mdb/init.c:mdb_db_close (1x) 209,432 => /home/hyc/OD/hobj/servers/slapd/../../../head/servers/slapd/bconfig.c:config_back_db_close (1x) . } . . if(rc != 0) { . Debug( LDAP_DEBUG_ANY, . "backend_close: bi_db_close %s failed!\n", . be->be_type, 0, 0 ); . } . } . . /* close each backend type */ 31 LDAP_STAILQ_FOREACH( bi, &backendInfo, bi_next ) { 27 if( bi->bi_nDB == 0 ) { . /* no database of this type */ . continue; . } . 9 if( bi->bi_close ) { . bi->bi_close( bi ); . } . } . . /* close frontend, if required */ 5 if ( frontendDB->bd_info->bi_db_close ) { . rc = frontendDB->bd_info->bi_db_close ( frontendDB, NULL ); . if ( rc != 0 ) { 1 Debug( LDAP_DEBUG_ANY, . "backend_startup: bi_db_close(frontend) failed! (%d)\n", . rc, 0, 0 ); . } . } . . return 0; 5 } . . /* . * This function is supposed to be the exact counterpart . * of backend_startup_one(), although this one calls bi_db_destroy() . * while backend_startup_one() calls bi_db_open(). . * . * Make sure backend_stopdown_one() destroys resources allocated . * by backend_startup_one(); only call backend_destroy_one() when . * all stuff in a BackendDB needs to be destroyed . */ . void . backend_stopdown_one( BackendDB *bd ) 12 { 9 if ( bd->be_pending_csn_list ) { . struct slap_csn_entry *csne; 3 csne = LDAP_TAILQ_FIRST( bd->be_pending_csn_list ); 9 while ( csne ) { . struct slap_csn_entry *tmp_csne = csne; . . LDAP_TAILQ_REMOVE( bd->be_pending_csn_list, csne, ce_csn_link ); . ch_free( csne->ce_csn.bv_val ); . csne = LDAP_TAILQ_NEXT( csne, ce_csn_link ); . ch_free( tmp_csne ); . } 3 ch_free( bd->be_pending_csn_list ); 474 => /home/hyc/OD/hobj/servers/slapd/../../../head/servers/slapd/ch_malloc.c:ch_free (3x) . } . 12 if ( bd->bd_info->bi_db_destroy ) { 9 bd->bd_info->bi_db_destroy( bd, NULL ); 7,731 => /home/hyc/OD/hobj/servers/slapd/../../../head/servers/slapd/bconfig.c:config_back_db_destroy (1x) 1,781 => /home/hyc/OD/hobj/servers/slapd/back-mdb/../../../../head/servers/slapd/back-mdb/init.c:mdb_db_destroy (1x) 308,843 => /home/hyc/OD/hobj/servers/slapd/back-monitor/../../../../head/servers/slapd/back-monitor/init.c:monitor_back_db_destroy (1x) . } 9 } . . void backend_destroy_one( BackendDB *bd, int dynamic ) 15 { 6 if ( dynamic ) { 23 LDAP_STAILQ_REMOVE(&backendDB, bd, BackendDB, be_next ); . } . 9 if ( bd->be_syncinfo ) { . syncinfo_free( bd->be_syncinfo, 1 ); . } . 6 backend_stopdown_one( bd ); 318,895 => /home/hyc/OD/hobj/servers/slapd/../../../head/servers/slapd/backend.c:backend_stopdown_one (3x) . 6 ber_bvarray_free( bd->be_suffix ); 1,272 => /home/hyc/OD/hobj/libraries/liblber/../../../head/libraries/liblber/memory.c:ber_bvarray_free (3x) 6 ber_bvarray_free( bd->be_nsuffix ); 636 => /home/hyc/OD/hobj/libraries/liblber/../../../head/libraries/liblber/memory.c:ber_bvarray_free (3x) 9 if ( !BER_BVISNULL( &bd->be_rootdn ) ) { 2 free( bd->be_rootdn.bv_val ); 1,381 => /home/hyc/OD/hobj/servers/slapd/../../../head/servers/slapd/ch_malloc.c:ch_free (2x) . } 9 if ( !BER_BVISNULL( &bd->be_rootndn ) ) { 2 free( bd->be_rootndn.bv_val ); 316 => /home/hyc/OD/hobj/servers/slapd/../../../head/servers/slapd/ch_malloc.c:ch_free (2x) . } 9 if ( !BER_BVISNULL( &bd->be_rootpw ) ) { 1 free( bd->be_rootpw.bv_val ); 158 => /home/hyc/OD/hobj/servers/slapd/../../../head/servers/slapd/ch_malloc.c:ch_free (1x) . } 6 acl_destroy( bd->be_acl ); 3,022 => /home/hyc/OD/hobj/servers/slapd/../../../head/servers/slapd/aclparse.c:acl_destroy (3x) 6 limits_destroy( bd->be_limits ); 30 => /home/hyc/OD/hobj/servers/slapd/../../../head/servers/slapd/limits.c:limits_destroy (3x) 9 if ( bd->be_extra_anlist ) { . anlist_free( bd->be_extra_anlist, 1, NULL ); . } 9 if ( !BER_BVISNULL( &bd->be_update_ndn ) ) { . ch_free( bd->be_update_ndn.bv_val ); . } 9 if ( bd->be_update_refs ) { . ber_bvarray_free( bd->be_update_refs ); . } . 6 ldap_pvt_thread_mutex_destroy( &bd->be_pcl_mutex ); 30 => /home/hyc/OD/hobj/libraries/libldap_r/../../../head/libraries/libldap_r/thr_posix.c:ldap_pvt_thread_mutex_destroy (3x) . 6 if ( dynamic ) { 6 free( bd ); 591 => /home/hyc/OD/hobj/servers/slapd/../../../head/servers/slapd/ch_malloc.c:ch_free (3x) . } 9 } . . int backend_destroy(void) 1 { . BackendDB *bd; . BackendInfo *bi; . . /* destroy each backend database */ 13 while (( bd = LDAP_STAILQ_FIRST(&backendDB))) { 6 backend_destroy_one( bd, 1 ); 637,665 => /home/hyc/OD/hobj/servers/slapd/../../../head/servers/slapd/backend.c:backend_destroy_one (3x) . } . . /* destroy each backend type */ 31 LDAP_STAILQ_FOREACH( bi, &backendInfo, bi_next ) { 27 if( bi->bi_destroy ) { 2 bi->bi_destroy( bi ); 891 => /home/hyc/OD/hobj/servers/slapd/../../../head/servers/slapd/bconfig.c:config_back_destroy (1x) . } . } . 1 nBackendInfo = 0; 2 LDAP_STAILQ_INIT(&backendInfo); . . /* destroy frontend database */ 1 bd = frontendDB; 2 if ( bd ) { 4 if ( bd->bd_info->bi_db_destroy ) { . bd->bd_info->bi_db_destroy( bd, NULL ); . } 2 ber_bvarray_free( bd->be_suffix ); 424 => /home/hyc/OD/hobj/libraries/liblber/../../../head/libraries/liblber/memory.c:ber_bvarray_free (1x) 2 ber_bvarray_free( bd->be_nsuffix ); 212 => /home/hyc/OD/hobj/libraries/liblber/../../../head/libraries/liblber/memory.c:ber_bvarray_free (1x) 3 if ( !BER_BVISNULL( &bd->be_rootdn ) ) { . free( bd->be_rootdn.bv_val ); . } 3 if ( !BER_BVISNULL( &bd->be_rootndn ) ) { . free( bd->be_rootndn.bv_val ); . } 3 if ( !BER_BVISNULL( &bd->be_rootpw ) ) { . free( bd->be_rootpw.bv_val ); . } 2 acl_destroy( bd->be_acl ); 8 => /home/hyc/OD/hobj/servers/slapd/../../../head/servers/slapd/aclparse.c:acl_destroy (1x) 1 frontendDB = NULL; . } . . return 0; 3 } . . BackendInfo* backend_info(const char *type) 24 { . BackendInfo *bi; . . /* search for the backend type */ 60 LDAP_STAILQ_FOREACH(bi,&backendInfo,bi_next) { 100 if( strcasecmp(bi->bi_type, type) == 0 ) { 378 => ???:strcasecmp (20x) . return bi; . } . } . . return NULL; 30 } . . void . backend_db_insert( . BackendDB *be, . int idx . ) . { . /* If idx < 0, just add to end of list */ 6 if ( idx < 0 ) { 18 LDAP_STAILQ_INSERT_TAIL(&backendDB, be, be_next); . } else if ( idx == 0 ) { . LDAP_STAILQ_INSERT_HEAD(&backendDB, be, be_next); . } else { . int i; . BackendDB *b2; . . b2 = LDAP_STAILQ_FIRST(&backendDB); . idx--; -- line 558 ---------------------------------------- -- line 574 ---------------------------------------- . } . . BackendDB * . backend_db_init( . const char *type, . BackendDB *b0, . int idx, . ConfigReply *cr) 33 { 6 BackendInfo *bi = backend_info(type); 385 => /home/hyc/OD/hobj/servers/slapd/../../../head/servers/slapd/backend.c:backend_info (3x) . BackendDB *be = b0; . int rc = 0; . 6 if( bi == NULL ) { . fprintf( stderr, "Unrecognized database type (%s)\n", type ); . return NULL; . } . . /* If be is provided, treat it as private. Otherwise allocate . * one and add it to the global list. . */ 9 if ( !be ) { 12 be = ch_calloc( 1, sizeof(Backend) ); 1,112 => /home/hyc/OD/hobj/servers/slapd/../../../head/servers/slapd/ch_malloc.c:ch_calloc (3x) . /* Just append */ 12 if ( idx >= nbackends ) . idx = -1; 6 nbackends++; 12 backend_db_insert( be, idx ); 24 => /home/hyc/OD/hobj/servers/slapd/../../../head/servers/slapd/backend.c:backend_db_insert (3x) . } . 3 be->bd_info = bi; 3 be->bd_self = be; . 27 be->be_def_limit = frontendDB->be_def_limit; 6 be->be_dfltaccess = frontendDB->be_dfltaccess; . 6 be->be_restrictops = frontendDB->be_restrictops; 6 be->be_requires = frontendDB->be_requires; 30 be->be_ssf_set = frontendDB->be_ssf_set; . 9 ldap_pvt_thread_mutex_init( &be->be_pcl_mutex ); 102 => /home/hyc/OD/hobj/libraries/libldap_r/../../../head/libraries/libldap_r/thr_posix.c:ldap_pvt_thread_mutex_init (3x) . . /* assign a default depth limit for alias deref */ 3 be->be_max_deref_depth = SLAPD_DEFAULT_MAXDEREFDEPTH; . 9 if ( bi->bi_db_init ) { 9 rc = bi->bi_db_init( be, cr ); 1,983 => /home/hyc/OD/hobj/servers/slapd/../../../head/servers/slapd/bconfig.c:config_back_db_init (1x) 10,337 => /home/hyc/OD/hobj/servers/slapd/back-monitor/../../../../head/servers/slapd/back-monitor/init.c:monitor_back_db_init (1x) 58,149 => /home/hyc/OD/hobj/servers/slapd/back-mdb/../../../../head/servers/slapd/back-mdb/init.c:mdb_db_init (1x) . } . 6 if ( rc != 0 ) { . fprintf( stderr, "database init failed (%s)\n", type ); . /* If we created and linked this be, remove it and free it */ . if ( !b0 ) { . LDAP_STAILQ_REMOVE(&backendDB, be, BackendDB, be_next); . ldap_pvt_thread_mutex_destroy( &be->be_pcl_mutex ); . ch_free( be ); . be = NULL; . nbackends--; . } . } else { 9 if ( !bi->bi_nDB ) { 12 backend_init_controls( bi ); 5,381 => /home/hyc/OD/hobj/servers/slapd/../../../head/servers/slapd/backend.c:backend_init_controls (3x) . } 6 bi->bi_nDB++; . } . return( be ); 27 } . . void . be_db_close( void ) . { . BackendDB *be; . . LDAP_STAILQ_FOREACH( be, &backendDB, be_next ) { . if ( be->bd_info->bi_db_close ) { -- line 648 ---------------------------------------- -- line 655 ---------------------------------------- . } . . } . . Backend * . select_backend( . struct berval * dn, . int noSubs ) 36 { . int j; 4 ber_len_t len, dnlen = dn->bv_len; . Backend *be; . 30 LDAP_STAILQ_FOREACH( be, &backendDB, be_next ) { 51 if ( be->be_nsuffix == NULL || SLAP_DBHIDDEN( be )) { . continue; . } . 100 for ( j = 0; !BER_BVISNULL( &be->be_nsuffix[j] ); j++ ) . { 16 if ( ( SLAP_GLUE_SUBORDINATE( be ) ) && noSubs ) . { . continue; . } . 8 len = be->be_nsuffix[j].bv_len; . 16 if ( len > dnlen ) { . /* suffix is longer than DN */ . continue; . } . . /* . * input DN is normalized, so the separator check . * need not look at escaping . */ 55 if ( len && len < dnlen && 5 !DN_SEPARATOR( dn->bv_val[(dnlen-len)-1] )) . { . continue; . } . 23 if ( strcmp( be->be_nsuffix[j].bv_val, 201 => ???:0x000000000010d340 (3x) . &dn->bv_val[dnlen-len] ) == 0 ) . { . return be; . } . } . } . . return be; 36 } . . int . be_issuffix( . Backend *be, . struct berval *bvsuffix ) . { . int i; . -- line 714 ---------------------------------------- -- line 743 ---------------------------------------- . } . . return 0; . } . . int . be_isroot_dn( Backend *be, struct berval *ndn ) . { 750,012 if ( BER_BVISEMPTY( ndn ) || BER_BVISEMPTY( &be->be_rootndn ) ) { . return 0; . } . 250,004 return dn_match( &be->be_rootndn, ndn ); 250,004 } . . int . be_slurp_update( Operation *op ) . { . return ( SLAP_SLURP_SHADOW( op->o_bd ) && . be_isupdate_dn( op->o_bd, &op->o_ndn ) ); . } . -- line 764 ---------------------------------------- -- line 786 ---------------------------------------- . be_root_dn( Backend *be ) . { . return &be->be_rootdn; . } . . int . be_isroot( Operation *op ) . { 750,012 return be_isroot_dn( op->o_bd, &op->o_ndn ); 1,250,020 => /home/hyc/OD/hobj/servers/slapd/../../../head/servers/slapd/backend.c:be_isroot_dn (250004x) . } . . int . be_isroot_pw( Operation *op ) . { . return be_rootdn_bind( op, NULL ) == LDAP_SUCCESS; . } . -- line 802 ---------------------------------------- -- line 888 ---------------------------------------- . /* free entry */ . entry_free( e ); . return 0; . } . } . . int . backend_unbind( Operation *op, SlapReply *rs ) 5 { . BackendDB *be; . 13 LDAP_STAILQ_FOREACH( be, &backendDB, be_next ) { 9 if ( be->be_unbind ) { . op->o_bd = be; . be->be_unbind( op, rs ); . } . } . . return 0; 5 } . . int . backend_connection_init( . Connection *conn ) 4 { . BackendDB *be; . 13 LDAP_STAILQ_FOREACH( be, &backendDB, be_next ) { 12 if ( be->be_connection_init ) { . be->be_connection_init( be, conn ); . } . } . . return 0; 5 } . . int . backend_connection_destroy( . Connection *conn ) 4 { . BackendDB *be; . 13 LDAP_STAILQ_FOREACH( be, &backendDB, be_next ) { 12 if ( be->be_connection_destroy ) { . be->be_connection_destroy( be, conn); . } . } . . return 0; 5 } . . int . backend_check_controls( . Operation *op, . SlapReply *rs ) 14 { 2 LDAPControl **ctrls = op->o_ctrls; 2 rs->sr_err = LDAP_SUCCESS; . 4 if( ctrls ) { 2 for( ; *ctrls != NULL ; ctrls++ ) { . int cid; . . switch ( slap_global_control( op, (*ctrls)->ldctl_oid, &cid ) ) { . case LDAP_CONTROL_NOT_FOUND: . /* unrecognized control */ . if ( (*ctrls)->ldctl_iscritical ) { . /* should not be reachable */ . Debug( LDAP_DEBUG_ANY, "backend_check_controls: " -- line 956 ---------------------------------------- -- line 1007 ---------------------------------------- . if( get_relax(op) && !be_isroot(op)) { . rs->sr_text = "requires manager authorization"; . rs->sr_err = LDAP_UNWILLING_TO_PERFORM; . } . #endif . . done:; . return rs->sr_err; 12 } . . int . backend_check_restrictions( . Operation *op, . SlapReply *rs, . struct berval *opdata ) 20 { . slap_mask_t restrictops; . slap_mask_t requires; . slap_mask_t opflag; . slap_mask_t exopflag = 0; . slap_ssf_set_t ssfs, *ssf; . int updateop = 0; . int starttls = 0; . int session = 0; . 4 restrictops = frontendDB->be_restrictops; 2 requires = frontendDB->be_requires; 20 ssfs = frontendDB->be_ssf_set; . ssf = &ssfs; . 6 if ( op->o_bd ) { . slap_ssf_t *fssf, *bssf; . int rc = SLAP_CB_CONTINUE, i; . 8 if ( op->o_bd->be_chk_controls ) { . rc = ( *op->o_bd->be_chk_controls )( op, rs ); . } . . if ( rc == SLAP_CB_CONTINUE ) { 8 rc = backend_check_controls( op, rs ); 36 => /home/hyc/OD/hobj/servers/slapd/../../../head/servers/slapd/backend.c:backend_check_controls (2x) . } . 4 if ( rc != LDAP_SUCCESS ) { . return rs->sr_err; . } . 6 restrictops |= op->o_bd->be_restrictops; 4 requires |= op->o_bd->be_requires; 6 bssf = &op->o_bd->be_ssf_set.sss_ssf; . fssf = &ssfs.sss_ssf; 36 for ( i=0; i < (int)(sizeof(ssfs)/sizeof(slap_ssf_t)); i++ ) { 74 if ( bssf[i] ) fssf[i] = bssf[i]; . } . } . 15 switch( op->o_tag ) { . case LDAP_REQ_ADD: . opflag = SLAP_RESTRICT_OP_ADD; . updateop++; . break; . case LDAP_REQ_BIND: . opflag = SLAP_RESTRICT_OP_BIND; . session++; . break; -- line 1070 ---------------------------------------- -- line 1115 ---------------------------------------- . . case LDAP_REQ_MODIFY: . updateop++; . opflag = SLAP_RESTRICT_OP_MODIFY; . break; . case LDAP_REQ_RENAME: . updateop++; . opflag = SLAP_RESTRICT_OP_RENAME; 4 break; . case LDAP_REQ_SEARCH: . opflag = SLAP_RESTRICT_OP_SEARCH; 1 break; . case LDAP_REQ_UNBIND: . session++; . opflag = 0; . break; . default: . rs->sr_text = "restrict operations internal error"; . rs->sr_err = LDAP_OTHER; . return rs->sr_err; . } . . if ( !starttls ) { . /* these checks don't apply to StartTLS */ . 2 rs->sr_err = LDAP_CONFIDENTIALITY_REQUIRED; 6 if( op->o_transport_ssf < ssf->sss_transport ) { . rs->sr_text = op->o_transport_ssf . ? "stronger transport confidentiality required" . : "transport confidentiality required"; . return rs->sr_err; . } . 6 if( op->o_tls_ssf < ssf->sss_tls ) { . rs->sr_text = op->o_tls_ssf . ? "stronger TLS confidentiality required" . : "TLS confidentiality required"; . return rs->sr_err; . } . . 8 if( op->o_tag == LDAP_REQ_BIND && opdata == NULL ) { . /* simple bind specific check */ . if( op->o_ssf < ssf->sss_simple_bind ) { . rs->sr_text = op->o_ssf . ? "stronger confidentiality required" . : "confidentiality required"; . return rs->sr_err; . } . } . 5 if( op->o_tag != LDAP_REQ_BIND || opdata == NULL ) { . /* these checks don't apply to SASL bind */ . 3 if( op->o_sasl_ssf < ssf->sss_sasl ) { . rs->sr_text = op->o_sasl_ssf . ? "stronger SASL confidentiality required" . : "SASL confidentiality required"; . return rs->sr_err; . } . 3 if( op->o_ssf < ssf->sss_ssf ) { . rs->sr_text = op->o_ssf . ? "stronger confidentiality required" . : "confidentiality required"; . return rs->sr_err; . } . } . 4 if( updateop ) { . if( op->o_transport_ssf < ssf->sss_update_transport ) { . rs->sr_text = op->o_transport_ssf . ? "stronger transport confidentiality required for update" . : "transport confidentiality required for update"; . return rs->sr_err; . } . . if( op->o_tls_ssf < ssf->sss_update_tls ) { -- line 1192 ---------------------------------------- -- line 1227 ---------------------------------------- . rs->sr_text = "modifications not allowed on this listener"; . rs->sr_err = LDAP_UNWILLING_TO_PERFORM; . return rs->sr_err; . } . #endif /* SLAP_X_LISTENER_MOD */ . } . } . 4 if ( !session ) { . /* these checks don't apply to Bind, StartTLS, or Unbind */ . 3 if( requires & SLAP_REQUIRE_STRONG ) { . /* should check mechanism */ . if( ( op->o_transport_ssf < ssf->sss_transport . && op->o_authtype == LDAP_AUTH_SIMPLE ) . || BER_BVISEMPTY( &op->o_dn ) ) . { . rs->sr_text = "strong(er) authentication required"; . rs->sr_err = LDAP_STRONG_AUTH_REQUIRED; . return rs->sr_err; . } . } . 2 if( requires & SLAP_REQUIRE_SASL ) { . if( op->o_authtype != LDAP_AUTH_SASL || BER_BVISEMPTY( &op->o_dn ) ) { . rs->sr_text = "SASL authentication required"; . rs->sr_err = LDAP_STRONG_AUTH_REQUIRED; . return rs->sr_err; . } . } . 2 if( requires & SLAP_REQUIRE_AUTHC ) { . if( BER_BVISEMPTY( &op->o_dn ) ) { . rs->sr_text = "authentication required"; . rs->sr_err = LDAP_UNWILLING_TO_PERFORM; . return rs->sr_err; . } . } . 2 if( requires & SLAP_REQUIRE_BIND ) { . int version; . ldap_pvt_thread_mutex_lock( &op->o_conn->c_mutex ); . version = op->o_conn->c_protocol; . ldap_pvt_thread_mutex_unlock( &op->o_conn->c_mutex ); . . if( !version ) { . /* no bind has occurred */ . rs->sr_text = "BIND required"; . rs->sr_err = LDAP_OPERATIONS_ERROR; . return rs->sr_err; . } . } . 2 if( requires & SLAP_REQUIRE_LDAP_V3 ) { . if( op->o_protocol < LDAP_VERSION3 ) { . /* no bind has occurred */ . rs->sr_text = "operation restricted to LDAPv3 clients"; . rs->sr_err = LDAP_OPERATIONS_ERROR; . return rs->sr_err; . } . } . -- line 1288 ---------------------------------------- -- line 1309 ---------------------------------------- . rs->sr_err = LDAP_UNWILLING_TO_PERFORM; . return rs->sr_err; . } . } . #endif /* SLAP_X_LISTENER_MOD */ . . } . 12 if( ( restrictops & opflag ) . || ( exopflag && ( restrictops & exopflag ) ) . || (( restrictops & SLAP_RESTRICT_READONLY ) && updateop )) { . if( ( restrictops & SLAP_RESTRICT_OP_MASK) == SLAP_RESTRICT_OP_READS ) { . rs->sr_text = "read operations restricted"; . } else if ( restrictops & exopflag ) { . rs->sr_text = "extended operation restricted"; . } else { . rs->sr_text = "operation restricted"; . } . rs->sr_err = LDAP_UNWILLING_TO_PERFORM; . return rs->sr_err; . } . 4 rs->sr_err = LDAP_SUCCESS; 2 return rs->sr_err; 16 } . . int backend_check_referrals( Operation *op, SlapReply *rs ) 5 { 1 rs->sr_err = LDAP_SUCCESS; . 6 if( op->o_bd->be_chk_referrals ) { . rs->sr_err = op->o_bd->be_chk_referrals( op, rs ); . . if( rs->sr_err != LDAP_SUCCESS && rs->sr_err != LDAP_REFERRAL ) { . send_ldap_result( op, rs ); . } . } . . return rs->sr_err; 4 } . . int . be_entry_get_rw( . Operation *op, . struct berval *ndn, . ObjectClass *oc, . AttributeDescription *at, . int rw, -- line 1356 ---------------------------------------- -------------------------------------------------------------------------------- -- Auto-annotated source: /home/hyc/OD/hobj/servers/slapd/../../../head/servers/slapd/attr.c -------------------------------------------------------------------------------- Ir -- line 47 ---------------------------------------- . typedef struct slap_list { . struct slap_list *next; . } slap_list; . static slap_list *attr_chunks; . static Attribute *attr_list; . static ldap_pvt_thread_mutex_t attr_mutex; . . int 6 attr_prealloc( int num ) 2 { . Attribute *a; . slap_list *s; . 2 if (!num) return 0; . 6 s = ch_calloc( 1, sizeof(slap_list) + num * sizeof(Attribute)); 2,883 => /home/hyc/OD/hobj/servers/slapd/../../../head/servers/slapd/ch_malloc.c:ch_calloc (1x) 2 s->next = attr_chunks; 1 attr_chunks = s; . 1 a = (Attribute *)(s+1); 2,004 for ( ;num>1; num--) { 1,998 a->a_next = a+1; . a++; . } 2 a->a_next = attr_list; 1 attr_list = (Attribute *)(s+1); . . return 0; 3 } . . Attribute * . attr_alloc( AttributeDescription *ad ) 3,100 { . Attribute *a; . 1,550 ldap_pvt_thread_mutex_lock( &attr_mutex ); 19,375 => /home/hyc/OD/hobj/libraries/libldap_r/../../../head/libraries/libldap_r/thr_posix.c:ldap_pvt_thread_mutex_lock (775x) 2,325 if ( !attr_list ) 4 attr_prealloc( CHUNK_SIZE ); 6,911 => /home/hyc/OD/hobj/servers/slapd/../../../head/servers/slapd/attr.c:attr_prealloc (1x) . a = attr_list; 1,550 attr_list = a->a_next; 775 a->a_next = NULL; 1,550 ldap_pvt_thread_mutex_unlock( &attr_mutex ); 18,600 => /home/hyc/OD/hobj/libraries/libldap_r/../../../head/libraries/libldap_r/thr_posix.c:ldap_pvt_thread_mutex_unlock (775x) . 775 a->a_desc = ad; 3,875 if ( ad && ( ad->ad_type->sat_flags & SLAP_AT_SORTED_VAL )) . a->a_flags |= SLAP_ATTR_SORTED_VALS; . . return a; 3,875 } . . /* Return a list of num attrs */ . Attribute * . attrs_alloc( int num ) 8 { . Attribute *head = NULL; . Attribute **a; . 6 ldap_pvt_thread_mutex_lock( &attr_mutex ); 50 => /home/hyc/OD/hobj/libraries/libldap_r/../../../head/libraries/libldap_r/thr_posix.c:ldap_pvt_thread_mutex_lock (2x) 30 for ( a = &attr_list; *a && num > 0; a = &(*a)->a_next ) { 8 if ( !head ) . head = *a; 4 num--; . } 2 attr_list = *a; 4 if ( num > 0 ) { . attr_prealloc( num > CHUNK_SIZE ? num : CHUNK_SIZE ); . *a = attr_list; . for ( ; *a && num > 0; a = &(*a)->a_next ) { . if ( !head ) . head = *a; . num--; . } . attr_list = *a; . } 2 *a = NULL; 4 ldap_pvt_thread_mutex_unlock( &attr_mutex ); 48 => /home/hyc/OD/hobj/libraries/libldap_r/../../../head/libraries/libldap_r/thr_posix.c:ldap_pvt_thread_mutex_unlock (2x) . . return head; 10 } . . . void . attr_clean( Attribute *a ) 1,558 { 5,628 if ( a->a_nvals && a->a_nvals != a->a_vals && 477 !( a->a_flags & SLAP_ATTR_DONT_FREE_VALS )) { 954 if ( a->a_flags & SLAP_ATTR_DONT_FREE_DATA ) { . free( a->a_nvals ); . } else { 2,385 ber_bvarray_free( a->a_nvals ); 174,019 => /home/hyc/OD/hobj/libraries/liblber/../../../head/libraries/liblber/memory.c:ber_bvarray_free (477x) . } . } . /* a_vals may be equal to slap_dummy_bv, a static empty berval; . * this is used as a placeholder for attributes that do not carry . * values, e.g. when proxying search entries with the "attrsonly" . * bit set. */ 3,116 if ( a->a_vals != &slap_dummy_bv && 779 !( a->a_flags & SLAP_ATTR_DONT_FREE_VALS )) { 1,558 if ( a->a_flags & SLAP_ATTR_DONT_FREE_DATA ) { . free( a->a_vals ); . } else { 779 ber_bvarray_free( a->a_vals ); 412,864 => /home/hyc/OD/hobj/libraries/liblber/../../../head/libraries/liblber/memory.c:ber_bvarray_free (779x) . } . } 779 a->a_desc = NULL; 779 a->a_vals = NULL; 779 a->a_nvals = NULL; . #ifdef LDAP_COMP_MATCH 779 a->a_comp_data = NULL; . #endif 779 a->a_flags = 0; 779 a->a_numvals = 0; 1,558 } . . void . attr_free( Attribute *a ) 2 { 1 attr_clean( a ); 458 => /home/hyc/OD/hobj/servers/slapd/../../../head/servers/slapd/attr.c:attr_clean (1x) 2 ldap_pvt_thread_mutex_lock( &attr_mutex ); 25 => /home/hyc/OD/hobj/libraries/libldap_r/../../../head/libraries/libldap_r/thr_posix.c:ldap_pvt_thread_mutex_lock (1x) 2 a->a_next = attr_list; 1 attr_list = a; 2 ldap_pvt_thread_mutex_unlock( &attr_mutex ); 24 => /home/hyc/OD/hobj/libraries/libldap_r/../../../head/libraries/libldap_r/thr_posix.c:ldap_pvt_thread_mutex_unlock (1x) 1 } . . #ifdef LDAP_COMP_MATCH . void . comp_tree_free( Attribute *a ) . { . Attribute *next; . . for( ; a != NULL ; a = next ) { -- line 177 ---------------------------------------- -- line 182 ---------------------------------------- . free ( a->a_comp_data ); . } . } . } . #endif . . void . attrs_free( Attribute *a ) 474 { 395 if ( a ) { . Attribute *b = (Attribute *)0xBAD, *tail, *next; . . /* save tail */ . tail = a; . do { 778 next = a->a_next; 1,556 attr_clean( a ); 454,706 => /home/hyc/OD/hobj/servers/slapd/../../../head/servers/slapd/attr.c:attr_clean (778x) 1,556 a->a_next = b; . b = a; . a = next; 2,255 } while ( next ); . 158 ldap_pvt_thread_mutex_lock( &attr_mutex ); 1,975 => /home/hyc/OD/hobj/libraries/libldap_r/../../../head/libraries/libldap_r/thr_posix.c:ldap_pvt_thread_mutex_lock (79x) . /* replace NULL with current attr list and let attr list . * start from last attribute returned to list */ 158 tail->a_next = attr_list; 79 attr_list = b; 158 ldap_pvt_thread_mutex_unlock( &attr_mutex ); 1,896 => /home/hyc/OD/hobj/libraries/libldap_r/../../../head/libraries/libldap_r/thr_posix.c:ldap_pvt_thread_mutex_unlock (79x) . } 395 } . . static void . attr_dup2( Attribute *tmp, Attribute *a ) 21 { 9 tmp->a_flags = a->a_flags & SLAP_ATTR_PERSISTENT_FLAGS; 6 if ( a->a_vals != NULL ) { . unsigned i, j; . 6 tmp->a_numvals = a->a_numvals; 15 tmp->a_vals = ch_malloc( (tmp->a_numvals + 1) * sizeof(struct berval) ); 923 => /home/hyc/OD/hobj/servers/slapd/../../../head/servers/slapd/ch_malloc.c:ch_malloc (3x) 36 for ( i = 0; i < tmp->a_numvals; i++ ) { 18 ber_dupbv( &tmp->a_vals[i], &a->a_vals[i] ); 1,486 => /home/hyc/OD/hobj/libraries/liblber/../../../head/libraries/liblber/memory.c:ber_dupbv (3x) 12 if ( BER_BVISNULL( &tmp->a_vals[i] ) ) break; . /* FIXME: error? */ . } 6 BER_BVZERO( &tmp->a_vals[i] ); . . /* a_nvals must be non null; it may be equal to a_vals */ 9 assert( a->a_nvals != NULL ); . 6 if ( a->a_nvals != a->a_vals ) { . 12 tmp->a_nvals = ch_malloc( (tmp->a_numvals + 1) * sizeof(struct berval) ); 445 => /home/hyc/OD/hobj/servers/slapd/../../../head/servers/slapd/ch_malloc.c:ch_malloc (2x) 24 for ( j = 0; !BER_BVISNULL( &a->a_nvals[j] ); j++ ) { 10 assert( j < i ); 4 ber_dupbv( &tmp->a_nvals[j], &a->a_nvals[j] ); 576 => /home/hyc/OD/hobj/libraries/liblber/../../../head/libraries/liblber/memory.c:ber_dupbv (2x) 6 if ( BER_BVISNULL( &tmp->a_nvals[j] ) ) break; . /* FIXME: error? */ . } 4 assert( j == i ); 6 BER_BVZERO( &tmp->a_nvals[j] ); . . } else { 1 tmp->a_nvals = tmp->a_vals; . } . } 18 } . . Attribute * . attr_dup( Attribute *a ) 4 { . Attribute *tmp; . 3 if ( a == NULL) return NULL; . 3 tmp = attr_alloc( a->a_desc ); 74 => /home/hyc/OD/hobj/servers/slapd/../../../head/servers/slapd/attr.c:attr_alloc (1x) 3 attr_dup2( tmp, a ); 1,047 => /home/hyc/OD/hobj/servers/slapd/../../../head/servers/slapd/attr.c:attr_dup2 (1x) . return tmp; 5 } . . Attribute * . attrs_dup( Attribute *a ) 4 { . int i; . Attribute *tmp, *anew; . 6 if( a == NULL ) return NULL; . . /* count them */ 6 for( tmp=a,i=0; tmp; tmp=tmp->a_next ) { 2 i++; . } . 4 anew = attrs_alloc( i ); 88 => /home/hyc/OD/hobj/servers/slapd/../../../head/servers/slapd/attr.c:attrs_alloc (1x) . 6 for( tmp=anew; a; a=a->a_next ) { 4 tmp->a_desc = a->a_desc; 6 attr_dup2( tmp, a ); 2,628 => /home/hyc/OD/hobj/servers/slapd/../../../head/servers/slapd/attr.c:attr_dup2 (2x) 2 tmp=tmp->a_next; . } . . return anew; 5 } . . int . attr_valfind( . Attribute *a, . unsigned flags, . struct berval *val, . unsigned *slot, . void *ctx ) 11 { 2 struct berval nval = BER_BVNULL, *cval; . MatchingRule *mr; . const char *text; 1 int match = -1, rc; . unsigned i, n; . 2 if ( flags & SLAP_MR_ORDERING ) . mr = a->a_desc->ad_type->sat_ordering; . else 4 mr = a->a_desc->ad_type->sat_equality; . 4 if( !SLAP_IS_MR_ASSERTED_VALUE_NORMALIZED_MATCH( flags ) && 1 mr->smr_normalize ) . { . rc = (mr->smr_normalize)( . flags & (SLAP_MR_TYPE_MASK|SLAP_MR_SUBTYPE_MASK|SLAP_MR_VALUE_OF_SYNTAX), . a->a_desc->ad_type->sat_syntax, . mr, val, &nval, ctx ); . 1 if( rc != LDAP_SUCCESS ) { . return LDAP_INVALID_SYNTAX; . } . cval = &nval; . } else { . cval = val; . } . 1 n = a->a_numvals; 4 if ( (a->a_flags & SLAP_ATTR_SORTED_VALS) && n ) { . /* Binary search */ . unsigned base = 0; . . do { . unsigned pivot = n >> 1; . i = base + pivot; . rc = value_match( &match, a->a_desc, mr, flags, . &a->a_nvals[i], cval, &text ); -- line 330 ---------------------------------------- -- line 333 ---------------------------------------- . if ( match < 0 ) { . base = i+1; . n -= pivot+1; . } else { . n = pivot; . } . } while ( n ); . if ( match < 0 ) 4 i++; . } else { . /* Linear search */ 7 for ( i = 0; i < n; i++ ) { . const char *text; . 20 rc = ordered_value_match( &match, a->a_desc, mr, flags, 2,046 => /home/hyc/OD/hobj/servers/slapd/../../../head/servers/slapd/value.c:ordered_value_match (2x) . &a->a_nvals[i], cval, &text ); 10 if ( rc == LDAP_SUCCESS && match == 0 ) . break; . } . } . if ( match ) . rc = LDAP_NO_SUCH_ATTRIBUTE; 2 if ( slot ) 2 *slot = i; 3 if ( nval.bv_val ) . slap_sl_free( nval.bv_val, ctx ); . . return rc; 8 } . . int . attr_valadd( . Attribute *a, . BerVarray vals, . BerVarray nvals, . int nn ) 8,965 { . int i; . BerVarray v2; . 4,075 v2 = (BerVarray) SLAP_REALLOC( (char *) a->a_vals, 287,566 => /home/hyc/OD/hobj/libraries/liblber/../../../head/libraries/liblber/memory.c:ber_memrealloc (815x) . (a->a_numvals + nn + 1) * sizeof(struct berval) ); 1,630 if( v2 == NULL ) { . Debug(LDAP_DEBUG_TRACE, . "attr_valadd: SLAP_REALLOC failed.\n", 0, 0, 0 ); . return LBER_ERROR_MEMORY; . } 815 a->a_vals = v2; 1,630 if ( nvals ) { 2,545 v2 = (BerVarray) SLAP_REALLOC( (char *) a->a_nvals, 112,857 => /home/hyc/OD/hobj/libraries/liblber/../../../head/libraries/liblber/memory.c:ber_memrealloc (509x) . (a->a_numvals + nn + 1) * sizeof(struct berval) ); 1,018 if( v2 == NULL ) { . Debug(LDAP_DEBUG_TRACE, . "attr_valadd: SLAP_REALLOC failed.\n", 0, 0, 0 ); . return LBER_ERROR_MEMORY; . } . a->a_nvals = v2; . } else { 815 a->a_nvals = a->a_vals; . } . . /* If sorted and old vals exist, must insert */ 1,630 if (( a->a_flags & SLAP_ATTR_SORTED_VALS ) && a->a_numvals ) { . unsigned slot; . int j, rc; . v2 = nvals ? nvals : vals; . for ( i = 0; i < nn; i++ ) { . rc = attr_valfind( a, SLAP_MR_EQUALITY | SLAP_MR_VALUE_OF_ASSERTION_SYNTAX | . SLAP_MR_ASSERTED_VALUE_NORMALIZED_MATCH | SLAP_MR_ATTRIBUTE_VALUE_NORMALIZED_MATCH, . &v2[i], &slot, NULL ); . if ( rc != LDAP_NO_SUCH_ATTRIBUTE ) { -- line 403 ---------------------------------------- -- line 413 ---------------------------------------- . } . ber_dupbv( &a->a_nvals[slot], &v2[i] ); . if ( nvals ) . ber_dupbv( &a->a_vals[slot], &vals[i] ); . a->a_numvals++; . } . BER_BVZERO( &a->a_vals[a->a_numvals] ); . if ( a->a_vals != a->a_nvals ) 815 BER_BVZERO( &a->a_nvals[a->a_numvals] ); . } else { 4,075 v2 = &a->a_vals[a->a_numvals]; 15,900 for ( i = 0 ; i < nn; i++ ) { 4,161 ber_dupbv( &v2[i], &vals[i] ); 789,126 => /home/hyc/OD/hobj/libraries/liblber/../../../head/libraries/liblber/memory.c:ber_dupbv (1387x) 2,774 if ( BER_BVISNULL( &v2[i] ) ) break; . } 2,445 BER_BVZERO( &v2[i] ); . 1,630 if ( nvals ) { 1,527 v2 = &a->a_nvals[a->a_numvals]; 9,986 for ( i = 0 ; i < nn; i++ ) { 3,243 ber_dupbv( &v2[i], &nvals[i] ); 357,569 => /home/hyc/OD/hobj/libraries/liblber/../../../head/libraries/liblber/memory.c:ber_dupbv (1081x) 2,162 if ( BER_BVISNULL( &v2[i] ) ) break; . } 1,527 BER_BVZERO( &v2[i] ); . } 2,445 a->a_numvals += i; . } . return 0; 6,520 } . . /* . * attr_merge - merge the given type and value with the list of . * attributes in attrs. . * . * nvals must be NULL if the attribute has no normalizer. . * In this case, a->a_nvals will be set equal to a->a_vals. . * -- line 449 ---------------------------------------- -- line 452 ---------------------------------------- . */ . . int . attr_merge( . Entry *e, . AttributeDescription *desc, . BerVarray vals, . BerVarray nvals ) 520 { . int i = 0; . . Attribute **a; . 4,044 for ( a = &e->e_attrs; *a != NULL; a = &(*a)->a_next ) { 1,820 if ( (*a)->a_desc == desc ) { . break; . } . } . . if ( *a == NULL ) { 404 *a = attr_alloc( desc ); 7,474 => /home/hyc/OD/hobj/servers/slapd/../../../head/servers/slapd/attr.c:attr_alloc (101x) . } else { . /* . * FIXME: if the attribute already exists, the presence . * of nvals and the value of (*a)->a_nvals must be consistent . */ 18 assert( ( nvals == NULL && (*a)->a_nvals == (*a)->a_vals ) . || ( nvals != NULL && ( . ( (*a)->a_vals == NULL && (*a)->a_nvals == NULL ) . || ( (*a)->a_nvals != (*a)->a_vals ) ) ) ); . } . 208 if ( vals != NULL ) { 3,900 for ( ; !BER_BVISNULL( &vals[i] ); i++ ) ; . } 312 return attr_valadd( *a, vals, nvals, i ); 493,570 => /home/hyc/OD/hobj/servers/slapd/../../../head/servers/slapd/attr.c:attr_valadd (104x) 312 } . . /* . * if a normalization function is defined for the equality matchingRule . * of desc, the value is normalized and stored in nval; otherwise nval . * is NULL . */ . int . attr_normalize( . AttributeDescription *desc, . BerVarray vals, . BerVarray *nvalsp, . void *memctx ) 1,001 { . int rc = LDAP_SUCCESS; . BerVarray nvals = NULL; . 91 *nvalsp = NULL; . 364 if ( desc->ad_type->sat_equality && 78 desc->ad_type->sat_equality->smr_normalize ) . { . int i; . 3,354 for ( i = 0; !BER_BVISNULL( &vals[i] ); i++ ); . 152 nvals = slap_sl_calloc( sizeof(struct berval), i + 1, memctx ); 13,800 => /home/hyc/OD/hobj/servers/slapd/../../../head/servers/slapd/sl_malloc.c:slap_sl_calloc (38x) 4,536 for ( i = 0; !BER_BVISNULL( &vals[i] ); i++ ) { 5,490 rc = desc->ad_type->sat_equality->smr_normalize( 2,233,085 => /home/hyc/OD/hobj/servers/slapd/../../../head/servers/slapd/schema_init.c:UTF8StringNormalize (610x) . SLAP_MR_VALUE_OF_ATTRIBUTE_SYNTAX, . desc->ad_type->sat_syntax, . desc->ad_type->sat_equality, . &vals[i], &nvals[i], memctx ); . 1,220 if ( rc != LDAP_SUCCESS ) { . BER_BVZERO( &nvals[i + 1] ); . break; . } . } 114 BER_BVZERO( &nvals[i] ); 114 *nvalsp = nvals; . } . . if ( rc != LDAP_SUCCESS && nvals != NULL ) { 53 ber_bvarray_free_x( nvals, memctx ); . } . . return rc; 728 } . . int . attr_merge_normalize( . Entry *e, . AttributeDescription *desc, . BerVarray vals, . void *memctx ) 819 { 91 BerVarray nvals = NULL; . int rc; . 364 rc = attr_normalize( desc, vals, &nvals, memctx ); 2,264,180 => /home/hyc/OD/hobj/servers/slapd/../../../head/servers/slapd/attr.c:attr_normalize (91x) 182 if ( rc == LDAP_SUCCESS ) { 455 rc = attr_merge( e, desc, vals, nvals ); 499,422 => /home/hyc/OD/hobj/servers/slapd/../../../head/servers/slapd/attr.c:attr_merge (91x) 273 if ( nvals != NULL ) { 190 ber_bvarray_free_x( nvals, memctx ); 77,337 => /home/hyc/OD/hobj/libraries/liblber/../../../head/libraries/liblber/memory.c:ber_bvarray_free_x (38x) . } . } . . return rc; 546 } . . int . attr_merge_one( . Entry *e, . AttributeDescription *desc, . struct berval *val, . struct berval *nval ) 3,550 { . Attribute **a; . 17,099 for ( a = &e->e_attrs; *a != NULL; a = &(*a)->a_next ) { 7,128 if ( (*a)->a_desc == desc ) { . break; . } . } . . if ( *a == NULL ) { 2,692 *a = attr_alloc( desc ); 56,717 => /home/hyc/OD/hobj/servers/slapd/../../../head/servers/slapd/attr.c:attr_alloc (673x) . } . 2,840 return attr_valadd( *a, val, nval, 1 ); 718,026 => /home/hyc/OD/hobj/servers/slapd/../../../head/servers/slapd/attr.c:attr_valadd (710x) 2,130 } . . /* . * if a normalization function is defined for the equality matchingRule . * of desc, the value is normalized and stored in nval; otherwise nval . * is NULL . */ . int . attr_normalize_one( . AttributeDescription *desc, . struct berval *val, . struct berval *nval, . void *memctx ) . { . int rc = LDAP_SUCCESS; . 902 BER_BVZERO( nval ); . 2,706 if ( desc->ad_type->sat_equality && 451 desc->ad_type->sat_equality->smr_normalize ) . { 2,256 rc = desc->ad_type->sat_equality->smr_normalize( 472,975 => /home/hyc/OD/hobj/servers/slapd/../../../head/servers/slapd/schema_init.c:generalizedTimeNormalize (132x) 69,267 => /home/hyc/OD/hobj/servers/slapd/../../../head/servers/slapd/schema_init.c:UTF8StringNormalize (132x) 73,148 => /home/hyc/OD/hobj/servers/slapd/../../../head/servers/slapd/dn.c:dnNormalize (6x) 9,656 => /home/hyc/OD/hobj/servers/slapd/../../../head/servers/slapd/schema_init.c:UUIDNormalize (12x) . SLAP_MR_VALUE_OF_ATTRIBUTE_SYNTAX, . desc->ad_type->sat_syntax, . desc->ad_type->sat_equality, . val, nval, memctx ); . . if ( rc != LDAP_SUCCESS ) { . return rc; . } . } . . return rc; 338 } . . int . attr_merge_normalize_one( . Entry *e, . AttributeDescription *desc, . struct berval *val, . void *memctx ) 4,500 { 900 struct berval nval = BER_BVNULL; . struct berval *nvalp = NULL; . int rc; . 2,250 rc = attr_normalize_one( desc, val, &nval, memctx ); 631,137 => /home/hyc/OD/hobj/servers/slapd/../../../head/servers/slapd/attr.c:attr_normalize_one (450x) 1,800 if ( rc == LDAP_SUCCESS && !BER_BVISNULL( &nval ) ) { . nvalp = &nval; . } . 2,250 rc = attr_merge_one( e, desc, val, nvalp ); 594,588 => /home/hyc/OD/hobj/servers/slapd/../../../head/servers/slapd/attr.c:attr_merge_one (450x) . if ( nvalp != NULL ) { 1,686 slap_sl_free( nval.bv_val, memctx ); 27,320 => /home/hyc/OD/hobj/servers/slapd/../../../head/servers/slapd/sl_malloc.c:slap_sl_free (281x) . } . return rc; 3,150 } . . /* . * attrs_find - find attribute(s) by AttributeDescription . * returns next attribute which is subtype of provided description. . */ . . Attribute * . attrs_find( . Attribute *a, . AttributeDescription *desc ) 2,500,010 { 19,750,058 for ( ; a != NULL; a = a->a_next ) { 32,500,090 if ( is_ad_subtype( a->a_desc, desc ) ) { 83,500,204 => /home/hyc/OD/hobj/servers/slapd/../../../head/servers/slapd/ad.c:is_ad_subtype (6500018x) . return( a ); . } . } . . return( NULL ); 2,500,010 } . . /* . * attr_find - find attribute by type . */ . . Attribute * . attr_find( . Attribute *a, . AttributeDescription *desc ) 90 { 2,835 for ( ; a != NULL; a = a->a_next ) { 2,630 if ( a->a_desc == desc ) { . return( a ); . } . } . . return( NULL ); 90 } . . /* . * attr_delete - delete the attribute type in list pointed to by attrs . * return 0 deleted ok . * 1 not found in list a . * -1 something bad happened . */ . . int . attr_delete( . Attribute **attrs, . AttributeDescription *desc ) 2 { . Attribute **a; . 103 for ( a = attrs; *a != NULL; a = &(*a)->a_next ) { 50 if ( (*a)->a_desc == desc ) { . Attribute *save = *a; 2 *a = (*a)->a_next; 3 attr_free( save ); 518 => /home/hyc/OD/hobj/servers/slapd/../../../head/servers/slapd/attr.c:attr_free (1x) . . return LDAP_SUCCESS; . } . } . . return LDAP_NO_SUCH_ATTRIBUTE; 4 } . . int . attr_init( void ) 1 { 2 ldap_pvt_thread_mutex_init( &attr_mutex ); 34 => /home/hyc/OD/hobj/libraries/libldap_r/../../../head/libraries/libldap_r/thr_posix.c:ldap_pvt_thread_mutex_init (1x) . return 0; 3 } . . int . attr_destroy( void ) 1 { . slap_list *a; . 6 for ( a=attr_chunks; a; a=attr_chunks ) { 2 attr_chunks = a->next; 1 free( a ); 231 => /home/hyc/OD/hobj/servers/slapd/../../../head/servers/slapd/ch_malloc.c:ch_free (1x) . } 2 ldap_pvt_thread_mutex_destroy( &attr_mutex ); 10 => /home/hyc/OD/hobj/libraries/libldap_r/../../../head/libraries/libldap_r/thr_posix.c:ldap_pvt_thread_mutex_destroy (1x) . return 0; 3 } -------------------------------------------------------------------------------- -- Auto-annotated source: /home/hyc/OD/hobj/servers/slapd/back-mdb/../../../../head/servers/slapd/back-mdb/idl.c -------------------------------------------------------------------------------- Ir -- line 75 ---------------------------------------- . /* . * binary search of id in ids . * if found, returns position of id . * if not found, returns first postion greater than id . */ . unsigned base = 0; . unsigned cursor = 0; . int val = 0; 500,002 unsigned n = ids[0]; . . #if IDL_DEBUG > 0 . idl_check( ids ); . #endif . 2,500,006 while( 0 < n ) { 1,000,002 int pivot = n >> 1; 500,001 cursor = base + pivot; 2,500,005 val = IDL_CMP( id, ids[cursor + 1] ); . . if( val < 0 ) { . n = pivot; . 500,001 } else if ( val > 0 ) { . base = cursor + 1; 1,000,000 n -= pivot + 1; . . } else { . return cursor + 1; . } . } . . if( val > 0 ) { 1,250,002 return cursor + 2; . } else { . return cursor + 1; . } . . #else . /* (reverse) linear search */ . int i; . -- line 115 ---------------------------------------- -- line 120 ---------------------------------------- . for( i=ids[0]; i; i-- ) { . if( id > ids[i] ) { . break; . } . } . . return i+1; . #endif 500,002 } . . int mdb_idl_insert( ID *ids, ID id ) 6 { . unsigned x; . . #if IDL_DEBUG > 1 . Debug( LDAP_DEBUG_ANY, "insert: %04lx at %d\n", (long) id, x, 0 ); . idl_dump( ids ); . #elif IDL_DEBUG > 0 . idl_check( ids ); . #endif . 2 if (MDB_IDL_IS_RANGE( ids )) { . /* if already in range, treat as a dup */ . if (id >= MDB_IDL_FIRST(ids) && id <= MDB_IDL_LAST(ids)) . return -1; . if (id < MDB_IDL_FIRST(ids)) . ids[1] = id; . else if (id > MDB_IDL_LAST(ids)) . ids[2] = id; . return 0; . } . 1 x = mdb_idl_search( ids, id ); 5 => /home/hyc/OD/hobj/servers/slapd/back-mdb/../../../../head/servers/slapd/back-mdb/idl.c:mdb_idl_search (1x) 2 assert( x > 0 ); . . if( x < 1 ) { . /* internal error */ . return -2; . } . 4 if ( x <= ids[0] && ids[x] == id ) { . /* duplicate */ . return -1; . } . 4 if ( ++ids[0] >= MDB_IDL_DB_MAX ) { . if( id < ids[1] ) { . ids[1] = id; . ids[2] = ids[ids[0]-1]; . } else if ( ids[ids[0]-1] < id ) { . ids[2] = id; . } else { . ids[2] = ids[ids[0]-1]; . } . ids[0] = NOID; . . } else { . /* insert id */ 7 AC_MEMCPY( &ids[x+1], &ids[x], (ids[0]-x) * sizeof(ID) ); 24 => ???:memmove (1x) 3 ids[x] = id; . } . . #if IDL_DEBUG > 1 . idl_dump( ids ); . #elif IDL_DEBUG > 0 . idl_check( ids ); . #endif . . return 0; 5 } . . static int mdb_idl_delete( ID *ids, ID id ) . { . unsigned x; . . #if IDL_DEBUG > 1 . Debug( LDAP_DEBUG_ANY, "delete: %04lx at %d\n", (long) id, x, 0 ); . idl_dump( ids ); -- line 197 ---------------------------------------- -- line 263 ---------------------------------------- . mdb_idl_fetch_key( . BackendDB *be, . MDB_txn *txn, . MDB_dbi dbi, . MDB_val *key, . ID *ids, . MDB_cursor **saved_cursor, . int get_flag ) 12 { . MDB_val data, key2, *kptr; . MDB_cursor *cursor; . ID *i; . size_t len; . int rc; . MDB_cursor_op opflag; . . char keybuf[16]; . 4 Debug( LDAP_DEBUG_ARGS, . "mdb_idl_fetch_key: %s\n", . mdb_show_key( key, keybuf ), 0, 0 ); . 2 assert( ids != NULL ); . 2 if ( saved_cursor && *saved_cursor ) { . opflag = MDB_NEXT; 3 } else if ( get_flag == LDAP_FILTER_GE ) { . opflag = MDB_SET_RANGE; 4 } else if ( get_flag == LDAP_FILTER_LE ) { . opflag = MDB_FIRST; . } else { . opflag = MDB_SET; . } . . /* If we're not reusing an existing cursor, get a new one */ . if( opflag != MDB_NEXT ) { 6 rc = mdb_cursor_open( txn, dbi, &cursor ); 499 => /home/hyc/OD/hobj/servers/slapd/back-mdb/../../../../head/servers/slapd/back-mdb/../../../libraries/libmdb/mdb.c:mdb_cursor_open (1x) 3 if( rc != 0 ) { . Debug( LDAP_DEBUG_ANY, "=> mdb_idl_fetch_key: " . "cursor failed: %s (%d)\n", mdb_strerror(rc), rc, 0 ); . return rc; . } . } else { . cursor = *saved_cursor; . } . . /* If this is a LE lookup, save original key so we can determine . * when to stop. If this is a GE lookup, save the key since it . * will be overwritten. . */ 5 if ( get_flag == LDAP_FILTER_LE || get_flag == LDAP_FILTER_GE ) { . key2.mv_data = keybuf; . key2.mv_size = key->mv_size; . AC_MEMCPY( keybuf, key->mv_data, key->mv_size ); . kptr = &key2; . } else { . kptr = key; . } 1 len = key->mv_size; 6 rc = mdb_cursor_get( cursor, kptr, &data, opflag ); 367 => /home/hyc/OD/hobj/servers/slapd/back-mdb/../../../../head/servers/slapd/back-mdb/../../../libraries/libmdb/mdb.c:mdb_cursor_get (1x) . . /* skip presence key on range inequality lookups */ 3 while (rc == 0 && kptr->mv_size != len) { . rc = mdb_cursor_get( cursor, kptr, &data, MDB_NEXT_NODUP ); . } . /* If we're doing a LE compare and the new key is greater than . * our search key, we're done . */ . if (rc == 0 && get_flag == LDAP_FILTER_LE && memcmp( kptr->mv_data, . key->mv_data, key->mv_size ) > 0 ) { . rc = MDB_NOTFOUND; -- line 333 ---------------------------------------- -- line 356 ---------------------------------------- . data.mv_size = MDB_IDL_SIZEOF(ids); . } . . if ( saved_cursor && rc == 0 ) { . if ( !*saved_cursor ) . *saved_cursor = cursor; . } . else 2 mdb_cursor_close( cursor ); 111 => /home/hyc/OD/hobj/servers/slapd/back-mdb/../../../../head/servers/slapd/back-mdb/../../../libraries/libmdb/mdb.c:mdb_cursor_close (1x) . 2 if( rc == MDB_NOTFOUND ) { . return rc; . . } else if( rc != 0 ) { . Debug( LDAP_DEBUG_ANY, "=> mdb_idl_fetch_key: " . "get failed: %s (%d)\n", . mdb_strerror(rc), rc, 0 ); . return rc; . -- line 374 ---------------------------------------- -- line 383 ---------------------------------------- . /* size mismatch */ . Debug( LDAP_DEBUG_ANY, "=> mdb_idl_fetch_key: " . "get size mismatch: expected %ld, got %ld\n", . (long) ((1 + ids[0]) * sizeof( ID )), (long) data.mv_size, 0 ); . return -1; . } . . return rc; 9 } . . int . mdb_idl_insert_keys( . MDB_cursor *cursor, . MDB_val *key, . ID id ) . { . MDB_val data; -- line 399 ---------------------------------------- -- line 706 ---------------------------------------- . . /* . * idl_union - return a = a union b . */ . int . mdb_idl_union( . ID *a, . ID *b ) 6 { . ID ida, idb; 2 ID cursora = 0, cursorb = 0, cursorc; . 3 if ( MDB_IDL_IS_ZERO( b ) ) { . return 0; . } . 3 if ( MDB_IDL_IS_ZERO( a ) ) { 5 MDB_IDL_CPY( a, b ); 64 => ???:memmove (1x) . return 0; . } . . if ( MDB_IDL_IS_RANGE( a ) || MDB_IDL_IS_RANGE(b) ) { . over: ida = IDL_MIN( MDB_IDL_FIRST(a), MDB_IDL_FIRST(b) ); . idb = IDL_MAX( MDB_IDL_LAST(a), MDB_IDL_LAST(b) ); . a[0] = NOID; . a[1] = ida; -- line 731 ---------------------------------------- -- line 768 ---------------------------------------- . a[cursora++] = b[cursorb++]; . else { . a[cursora++] = idb; . cursorc++; . } . } . . return 0; 6 } . . . #if 0 . /* . * mdb_idl_notin - return a intersection ~b (or a minus b) . */ . int . mdb_idl_notin( -- line 784 ---------------------------------------- -- line 826 ---------------------------------------- . } . } . . return 0; . } . #endif . . ID mdb_idl_first( ID *ids, ID *cursor ) 5 { . ID pos; . 3 if ( ids[0] == 0 ) { . *cursor = NOID; . return NOID; . } . 2 if ( MDB_IDL_IS_RANGE( ids ) ) { 4 if( *cursor < ids[1] ) { 2 *cursor = ids[1]; . } . return *cursor; . } . . if ( *cursor == 0 ) . pos = 1; . else . pos = mdb_idl_search( ids, *cursor ); . . if( pos > ids[0] ) { . return NOID; . } . . *cursor = pos; . return ids[pos]; 4 } . . ID mdb_idl_next( ID *ids, ID *cursor ) . { 500,004 if ( MDB_IDL_IS_RANGE( ids ) ) { 1,500,012 if( ids[2] < ++(*cursor) ) { . return NOID; . } . return *cursor; . } . . if ( ++(*cursor) <= ids[0] ) { . return ids[*cursor]; . } . . return NOID; 250,002 } . . /* Add one ID to an unsorted list. We ensure that the first element is the . * minimum and the last element is the maximum, for fast range compaction. . * this means IDLs up to length 3 are always sorted... . */ . int mdb_idl_append_one( ID *ids, ID id ) . { . if (MDB_IDL_IS_RANGE( ids )) { -- line 884 ---------------------------------------- -------------------------------------------------------------------------------- -- Auto-annotated source: /home/hyc/OD/hobj/servers/slapd/back-mdb/../../../../head/servers/slapd/back-mdb/id2entry.c -------------------------------------------------------------------------------- Ir -- line 80 ---------------------------------------- . return mdb_id2entry_put(op, tid, e, 0); . } . . int mdb_id2entry( . Operation *op, . MDB_cursor *mc, . ID id, . Entry **e ) 2,000,024 { . struct mdb_info *mdb = (struct mdb_info *) op->o_bd->be_private; . MDB_val key, data; . int rc = 0; . 250,003 *e = NULL; . 500,006 key.mv_data = &id; 250,003 key.mv_size = sizeof(ID); . . /* fetch it */ 1,250,015 rc = mdb_cursor_get( mc, &key, &data, MDB_SET ); 207,946,905 => /home/hyc/OD/hobj/servers/slapd/back-mdb/../../../../head/servers/slapd/back-mdb/../../../libraries/libmdb/mdb.c:mdb_cursor_get (250003x) 500,006 if ( rc == MDB_NOTFOUND ) { . /* Looking for root entry on an empty-dn suffix? */ 2 if ( !id && BER_BVISEMPTY( &op->o_bd->be_nsuffix[0] )) { . struct berval gluebv = BER_BVC("glue"); . Entry *r = mdb_entry_alloc(op, 2, 4); . Attribute *a = r->e_attrs; . struct berval *bptr; . . r->e_id = 0; . r->e_ocflags = SLAP_OC_GLUE|SLAP_OC__END; . bptr = a->a_vals; -- line 110 ---------------------------------------- -- line 122 ---------------------------------------- . a->a_nvals = a->a_vals; . a->a_numvals = 1; . *bptr++ = gluebv; . BER_BVZERO(bptr); . *e = r; . return MDB_SUCCESS; . } . } 500,004 if ( rc ) return rc; . 1,000,008 rc = mdb_entry_decode( op, &data, e ); 592,751,802 => /home/hyc/OD/hobj/servers/slapd/back-mdb/../../../../head/servers/slapd/back-mdb/id2entry.c:mdb_entry_decode (250002x) 500,004 if ( rc ) return rc; . 750,006 (*e)->e_id = id; 250,002 (*e)->e_name.bv_val = NULL; 250,002 (*e)->e_nname.bv_val = NULL; . . return rc; 1,250,015 } . . int mdb_id2entry_delete( . BackendDB *be, . MDB_txn *tid, . Entry *e ) . { . struct mdb_info *mdb = (struct mdb_info *) be->be_private; . MDB_dbi dbi = mdb->mi_id2entry; -- line 148 ---------------------------------------- -- line 160 ---------------------------------------- . . static Attribute * mdb_attrs_alloc( . Operation *op, . int nattrs, . int nvals ) . { . Attribute *a, *s; . 1,000,008 if (!nattrs || !nvals) return NULL; . 2,250,018 s = op->o_tmpalloc( nattrs * sizeof(Attribute) + 9,250,074 => /home/hyc/OD/hobj/servers/slapd/../../../head/servers/slapd/sl_malloc.c:slap_sl_malloc (250002x) . nvals * sizeof(struct berval), op->o_tmpmemctx ); . 14,000,044 for (a=s; nattrs>1; nattrs--) { 12,500,032 a->a_next = a+1; . a++; . } 250,002 a->a_next = NULL; 750,006 s->a_vals = (struct berval *)(a+1); . return s; . } . 1,500,012 static Entry * mdb_entry_alloc( . Operation *op, . int nattrs, . int nvals ) 2,000,016 { 1,500,012 Entry *e = op->o_tmpalloc( sizeof(Entry), op->o_tmpmemctx ); 18,500,148 => /home/hyc/OD/hobj/servers/slapd/../../../head/servers/slapd/sl_malloc.c:slap_sl_malloc (250002x) 500,004 BER_BVZERO(&e->e_bv); 250,002 e->e_attrs = mdb_attrs_alloc( op, nattrs, nvals ); 250,002 e->e_private = e; . return e; 1,750,014 } . . int mdb_entry_return( . Operation *op, . Entry *e . ) 1,250,010 { 500,004 if ( e->e_private ) { 1,250,010 op->o_tmpfree( e->e_nname.bv_val, op->o_tmpmemctx ); 35,000,281 => /home/hyc/OD/hobj/servers/slapd/../../../head/servers/slapd/sl_malloc.c:slap_sl_free (250002x) 1,250,010 op->o_tmpfree( e->e_name.bv_val, op->o_tmpmemctx ); 8,750,067 => /home/hyc/OD/hobj/servers/slapd/../../../head/servers/slapd/sl_malloc.c:slap_sl_free (250002x) 1,250,010 op->o_tmpfree( e->e_attrs, op->o_tmpmemctx ); 8,750,070 => /home/hyc/OD/hobj/servers/slapd/../../../head/servers/slapd/sl_malloc.c:slap_sl_free (250002x) 1,250,010 op->o_tmpfree( e, op->o_tmpmemctx ); 8,750,074 => /home/hyc/OD/hobj/servers/slapd/../../../head/servers/slapd/sl_malloc.c:slap_sl_free (250002x) . } else { . entry_free( e ); . } . return 0; 1,250,010 } . . int mdb_entry_release( . Operation *op, . Entry *e, . int rw ) . { . struct mdb_info *mdb = (struct mdb_info *) op->o_bd->be_private; . struct mdb_op_info *moi = NULL; -- line 216 ---------------------------------------- -- line 330 ---------------------------------------- . return(rc); . } . . static void . mdb_reader_free( void *key, void *data ) . { . MDB_txn *txn = data; . 4 if ( txn ) mdb_txn_abort( txn ); 140 => /home/hyc/OD/hobj/servers/slapd/back-mdb/../../../../head/servers/slapd/back-mdb/../../../libraries/libmdb/mdb.c:mdb_txn_abort (1x) . } . . /* free up any keys used by the main thread */ . void . mdb_reader_flush( MDB_env *env ) 4 { . void *data; 2 void *ctx = ldap_pvt_thread_pool_context(); 30 => /home/hyc/OD/hobj/libraries/libldap_r/../../../head/libraries/libldap_r/tpool.c:ldap_pvt_thread_pool_context (1x) . 7 if ( !ldap_pvt_thread_pool_getkey( ctx, env, &data, NULL ) ) { 14 => /home/hyc/OD/hobj/libraries/libldap_r/../../../head/libraries/libldap_r/tpool.c:ldap_pvt_thread_pool_getkey (1x) . ldap_pvt_thread_pool_setkey( ctx, env, NULL, 0, NULL, NULL ); . mdb_reader_free( env, data ); . } 4 } . . int . mdb_opinfo_get( Operation *op, struct mdb_info *mdb, int rdonly, mdb_op_info **moip ) 9 { . int rc, renew = 0; . void *data; . void *ctx; . mdb_op_info *moi = NULL; . OpExtra *oex; . 2 assert( op != NULL ); . 4 if ( !mdb || !moip ) return -1; . . /* If no op was provided, try to find the ctx anyway... */ . if ( op ) { 2 ctx = op->o_threadctx; . } else { . ctx = ldap_pvt_thread_pool_context(); . } . . if ( op ) { 3 LDAP_SLIST_FOREACH( oex, &op->o_extra, oe_next ) { . if ( oex->oe_key == mdb ) break; . } . moi = (mdb_op_info *)oex; . } . . if ( !moi ) { 1 moi = *moip; . 2 if ( !moi ) { . if ( op ) { . moi = op->o_tmpalloc(sizeof(struct mdb_op_info),op->o_tmpmemctx); . } else { . moi = ch_malloc(sizeof(mdb_op_info)); . } . moi->moi_flag = MOI_FREEIT; . *moip = moi; . } 2 LDAP_SLIST_INSERT_HEAD( &op->o_extra, &moi->moi_oe, oe_next ); 1 moi->moi_oe.oe_key = mdb; 1 moi->moi_ref = 0; 2 moi->moi_txn = NULL; . } . 2 if ( !rdonly ) { . /* This op started as a reader, but now wants to write. */ . if ( moi->moi_flag & MOI_READER ) { . moi = *moip; . LDAP_SLIST_INSERT_HEAD( &op->o_extra, &moi->moi_oe, oe_next ); . } else { . /* This op is continuing an existing write txn */ . *moip = moi; . } -- line 407 ---------------------------------------- -- line 413 ---------------------------------------- . mdb_strerror(rc), rc, 0 ); . } . return rc; . } . return 0; . } . . /* OK, this is a reader */ 3 if ( !moi->moi_txn ) { 2 if ( !ctx ) { . /* Shouldn't happen unless we're single-threaded */ . rc = mdb_txn_begin( mdb->mi_dbenv, MDB_RDONLY, &moi->moi_txn ); . if (rc) { . Debug( LDAP_DEBUG_ANY, "mdb_opinfo_get: err %s(%d)\n", . mdb_strerror(rc), rc, 0 ); . } . return rc; . } 7 if ( ldap_pvt_thread_pool_getkey( ctx, mdb->mi_dbenv, &data, NULL ) ) { 41 => /home/hyc/OD/hobj/libraries/libldap_r/../../../head/libraries/libldap_r/tpool.c:ldap_pvt_thread_pool_getkey (1x) 5 rc = mdb_txn_begin( mdb->mi_dbenv, MDB_RDONLY, &moi->moi_txn ); 3,123 => /home/hyc/OD/hobj/servers/slapd/back-mdb/../../../../head/servers/slapd/back-mdb/../../../libraries/libmdb/mdb.c:mdb_txn_begin (1x) 2 if (rc) { . Debug( LDAP_DEBUG_ANY, "mdb_opinfo_get: err %s(%d)\n", . mdb_strerror(rc), rc, 0 ); . return rc; . } 2 data = moi->moi_txn; 10 if ( ( rc = ldap_pvt_thread_pool_setkey( ctx, mdb->mi_dbenv, 57 => /home/hyc/OD/hobj/libraries/libldap_r/../../../head/libraries/libldap_r/tpool.c:ldap_pvt_thread_pool_setkey (1x) . data, mdb_reader_free, NULL, NULL ) ) ) { . mdb_txn_abort( moi->moi_txn ); . moi->moi_txn = NULL; . Debug( LDAP_DEBUG_ANY, "mdb_opinfo_get: thread_pool_setkey failed err (%d)\n", . rc, 0, 0 ); . return rc; . } . } else { . moi->moi_txn = data; . renew = 1; . } 2 moi->moi_flag |= MOI_READER; . } 3 if ( moi->moi_ref < 1 ) { 2 moi->moi_ref = 0; . } 2 if ( renew ) { . mdb_txn_renew( moi->moi_txn ); . } 1 moi->moi_ref++; 2 if ( *moip != moi ) 2 *moip = moi; . . return 0; 8 } . . /* This is like a ber_len */ . #define entry_lenlen(l) (((l) < 0x80) ? 1 : ((l) < 0x100) ? 2 : \ . ((l) < 0x10000) ? 3 : ((l) < 0x1000000) ? 4 : 5) . . static void . mdb_entry_putlen(unsigned char **buf, ber_len_t len) . { -- line 472 ---------------------------------------- -- line 486 ---------------------------------------- . } . . static ber_len_t . mdb_entry_getlen(unsigned char **buf) . { . ber_len_t len; . int i; . 65,000,176 len = *(*buf)++; 103,000,272 if (len <= 0x7f) . return len; . i = len & 0x7f; . len = 0; 2,750,022 for (;i > 0; i--) { 750,006 len <<= 8; 2,250,018 len |= *(*buf)++; . } . return len; . } . . /* Count up the sizes of the components of an entry */ . static int mdb_entry_partsize(struct mdb_info *mdb, MDB_txn *txn, Entry *e, . EntryHeader *eh) . { -- line 509 ---------------------------------------- -- line 616 ---------------------------------------- . . /* Retrieve an Entry that was stored using entry_encode above. . * . * Note: everything is stored in a single contiguous block, so . * you can not free individual attributes or names from this . * structure. Attempting to do so will likely corrupt memory. . */ . 1,250,010 int mdb_entry_decode(Operation *op, MDB_val *data, Entry **e) 2,250,018 { 500,004 struct mdb_info *mdb = (struct mdb_info *) op->o_bd->be_private; . int i, j, nattrs, nvals; . int rc; . Attribute *a; . Entry *x; . const char *text; . AttributeDescription *ad; 250,002 unsigned char *ptr = (unsigned char *)data->mv_data; . BerVarray bptr; . 1,250,010 Debug( LDAP_DEBUG_TRACE, . "=> mdb_entry_decode:\n", . 0, 0, 0 ); . . nattrs = mdb_entry_getlen(&ptr); . nvals = mdb_entry_getlen(&ptr); 1,250,010 x = mdb_entry_alloc(op, nattrs, nvals); 57,000,320 => /home/hyc/OD/hobj/servers/slapd/back-mdb/../../../../head/servers/slapd/back-mdb/id2entry.c:mdb_entry_alloc (250002x) 250,002 x->e_ocflags = mdb_entry_getlen(&ptr); 500,004 if (!nvals) { . goto done; . } 500,004 a = x->e_attrs; 500,004 bptr = a->a_vals; . 13,000,036 while ((i = mdb_entry_getlen(&ptr))) { 19,500,054 a->a_desc = mdb->mi_ads[i]; 6,500,018 a->a_flags = SLAP_ATTR_DONT_FREE_DATA | SLAP_ATTR_DONT_FREE_VALS; 6,500,018 j = mdb_entry_getlen(&ptr); 6,500,018 a->a_numvals = j; 6,500,018 a->a_vals = bptr; . 66,500,184 while (j) { . i = mdb_entry_getlen(&ptr); 7,250,020 bptr->bv_len = i; 7,250,020 bptr->bv_val = (char *)ptr; 7,250,020 ptr += i+1; 7,250,020 bptr++; 14,500,040 j--; . } 6,500,018 bptr->bv_val = NULL; 6,500,018 bptr->bv_len = 0; 6,500,018 bptr++; . 13,000,036 j = mdb_entry_getlen(&ptr); 13,000,036 if (j) { 15,000,024 a->a_nvals = bptr; 25,000,040 while (j) { . i = mdb_entry_getlen(&ptr); 5,000,008 bptr->bv_len = i; 5,000,008 bptr->bv_val = (char *)ptr; 5,000,008 ptr += i+1; 5,000,008 bptr++; 10,000,016 j--; . } 5,000,008 bptr->bv_val = NULL; 5,000,008 bptr->bv_len = 0; 5,000,008 bptr++; . } else { 4,500,030 a->a_nvals = a->a_vals; . } . /* FIXME: This is redundant once a sorted entry is saved into the DB */ 26,000,072 if ( a->a_desc->ad_type->sat_flags & SLAP_AT_SORTED_VAL ) { . rc = slap_sort_vals( (Modifications *)a, &text, &j, NULL ); . if ( rc == LDAP_SUCCESS ) { . a->a_flags |= SLAP_ATTR_SORTED_VALS; . } else if ( rc == LDAP_TYPE_OR_VALUE_EXISTS ) { . /* should never happen */ . Debug( LDAP_DEBUG_ANY, . "mdb_entry_decode: attributeType %s value #%d provided more than once\n", . a->a_desc->ad_cname.bv_val, j, 0 ); . return rc; . } . } 6,500,018 a = a->a_next; . nattrs--; 13,250,038 if ( !nattrs ) . break; . } . done: . 1,250,010 Debug(LDAP_DEBUG_TRACE, "<= mdb_entry_decode\n", . 0, 0, 0 ); 750,006 *e = x; . return 0; 2,250,018 } -------------------------------------------------------------------------------- -- Auto-annotated source: /home/hyc/OD/hobj/servers/slapd/../../../head/servers/slapd/filterentry.c -------------------------------------------------------------------------------- Ir -- line 57 ---------------------------------------- . * or an ldap result code indicating error . */ . . int . test_filter( . Operation *op, . Entry *e, . Filter *f ) 2,500,020 { . int rc; 1,250,010 Debug( LDAP_DEBUG_FILTER, "=> test_filter\n", 0, 0, 0 ); . 750,006 if ( f->f_choice & SLAPD_FILTER_UNDEFINED ) { . Debug( LDAP_DEBUG_FILTER, " UNDEFINED\n", 0, 0, 0 ); . rc = SLAPD_COMPARE_UNDEFINED; . goto out; . } . 500,004 switch ( f->f_choice ) { . case SLAPD_FILTER_COMPUTED: . Debug( LDAP_DEBUG_FILTER, " COMPUTED %s (%d)\n", . f->f_result == LDAP_COMPARE_FALSE ? "false" : . f->f_result == LDAP_COMPARE_TRUE ? "true" : . f->f_result == SLAPD_COMPARE_UNDEFINED ? "undefined" : "error", . f->f_result, 0 ); . . rc = f->f_result; . break; . . case LDAP_FILTER_EQUALITY: 1,250,010 Debug( LDAP_DEBUG_FILTER, " EQUALITY\n", 0, 0, 0 ); 1,500,012 rc = test_ava_filter( op, e, f->f_ava, LDAP_FILTER_EQUALITY ); 249,251,004 => /home/hyc/OD/hobj/servers/slapd/../../../head/servers/slapd/filterentry.c:test_ava_filter (250002x) 250,002 break; . . case LDAP_FILTER_SUBSTRINGS: . Debug( LDAP_DEBUG_FILTER, " SUBSTRINGS\n", 0, 0, 0 ); . rc = test_substrings_filter( op, e, f ); . break; . . case LDAP_FILTER_GE: . Debug( LDAP_DEBUG_FILTER, " GE\n", 0, 0, 0 ); -- line 97 ---------------------------------------- -- line 146 ---------------------------------------- . break; . . default: . Debug( LDAP_DEBUG_ANY, " unknown filter type %lu\n", . f->f_choice, 0, 0 ); . rc = LDAP_PROTOCOL_ERROR; . } . out: 1,250,010 Debug( LDAP_DEBUG_FILTER, "<= test_filter %d\n", rc, 0, 0 ); . return( rc ); 2,250,018 } . . static int test_mra_filter( . Operation *op, . Entry *e, . MatchingRuleAssertion *mra ) . { . Attribute *a; . void *memctx; -- line 164 ---------------------------------------- -- line 524 ---------------------------------------- . } . . static int . test_ava_filter( . Operation *op, . Entry *e, . AttributeAssertion *ava, . int type ) 2,750,022 { . int rc; . Attribute *a; . #ifdef LDAP_COMP_MATCH . int i, num_attr_vals = 0; . AttributeAliasing *a_alias = NULL; . #endif . 2,750,022 if ( !access_allowed( op, e, 65,750,526 => /home/hyc/OD/hobj/servers/slapd/../../../head/servers/slapd/acl.c:access_allowed_mask (250002x) . ava->aa_desc, &ava->aa_value, ACL_SEARCH, NULL ) ) . { . return LDAP_INSUFFICIENT_ACCESS; . } . 1,000,008 if ( ava->aa_desc == slap_schema.si_ad_hasSubordinates 250,002 && op && op->o_bd && op->o_bd->be_has_subordinates ) . { . int hasSubordinates = 0; . struct berval hs; . . if( type != LDAP_FILTER_EQUALITY && . type != LDAP_FILTER_APPROX ) . { . /* No other match is allowed */ -- line 555 ---------------------------------------- -- line 571 ---------------------------------------- . } else { . return LDAP_OTHER; . } . . if ( bvmatch( &ava->aa_value, &hs ) ) return LDAP_COMPARE_TRUE; . return LDAP_COMPARE_FALSE; . } . 500,004 if ( ava->aa_desc == slap_schema.si_ad_entryDN ) { . MatchingRule *mr; . int match; . const char *text; . . if( type != LDAP_FILTER_EQUALITY && . type != LDAP_FILTER_APPROX ) . { . /* No other match is allowed */ -- line 587 ---------------------------------------- -- line 597 ---------------------------------------- . if( rc != LDAP_SUCCESS ) return rc; . if( match == 0 ) return LDAP_COMPARE_TRUE; . return LDAP_COMPARE_FALSE; . } . . rc = LDAP_COMPARE_FALSE; . . #ifdef LDAP_COMP_MATCH 750,006 if ( is_aliased_attribute && ava->aa_cf ) . { . a_alias = is_aliased_attribute ( ava->aa_desc ); . if ( a_alias ) . ava->aa_desc = a_alias->aa_aliased_ad; . else 500,004 ava->aa_cf = NULL; . } . #endif . 2,250,016 for(a = attrs_find( e->e_attrs, ava->aa_desc ); 140,750,372 => /home/hyc/OD/hobj/servers/slapd/../../../head/servers/slapd/attr.c:attrs_find (250002x) . a != NULL; 1,000,000 a = attrs_find( a->a_next, ava->aa_desc ) ) 36,250,000 => /home/hyc/OD/hobj/servers/slapd/../../../head/servers/slapd/attr.c:attrs_find (250000x) . { . int use; . MatchingRule *mr; . struct berval *bv; . 750,000 if (( ava->aa_desc != a->a_desc ) && !access_allowed( op, . e, a->a_desc, &ava->aa_value, ACL_SEARCH, NULL )) . { . rc = LDAP_INSUFFICIENT_ACCESS; . continue; . } . . use = SLAP_MR_EQUALITY; . 2,500,000 switch ( type ) { . case LDAP_FILTER_APPROX: . use = SLAP_MR_EQUALITY_APPROX; . mr = a->a_desc->ad_type->sat_approx; . if( mr != NULL ) break; . . /* fallthru: use EQUALITY matching rule if no APPROX rule */ . . case LDAP_FILTER_EQUALITY: . /* use variable set above so fall thru use is not clobbered */ 500,000 mr = a->a_desc->ad_type->sat_equality; . break; . . case LDAP_FILTER_GE: . case LDAP_FILTER_LE: . use = SLAP_MR_ORDERING; . mr = a->a_desc->ad_type->sat_ordering; . break; . . default: . mr = NULL; . } . 500,000 if( mr == NULL ) { . rc = LDAP_INAPPROPRIATE_MATCHING; . continue; . } . . /* We have no Sort optimization for Approx matches */ 1,000,000 if (( a->a_flags & SLAP_ATTR_SORTED_VALS ) && type != LDAP_FILTER_APPROX ) { . unsigned slot; . int ret; . . /* For Ordering matches, we just need to do one comparison with . * either the first (least) or last (greatest) value. . */ . if ( use == SLAP_MR_ORDERING ) { . const char *text; -- line 669 ---------------------------------------- -- line 703 ---------------------------------------- . return LDAP_COMPARE_TRUE; . return LDAP_COMPARE_FALSE; . } . #endif . continue; . } . . #ifdef LDAP_COMP_MATCH 500,000 if ( nibble_mem_allocator && ava->aa_cf && !a->a_comp_data ) { . /* Component Matching */ . for ( num_attr_vals = 0; a->a_vals[num_attr_vals].bv_val != NULL; num_attr_vals++ ); . if ( num_attr_vals <= 0 )/* no attribute value */ . return LDAP_INAPPROPRIATE_MATCHING; . num_attr_vals++;/* for NULL termination */ . . /* following malloced will be freed by comp_tree_free () */ . a->a_comp_data = SLAP_MALLOC( sizeof( ComponentData ) + sizeof( ComponentSyntaxInfo* )*num_attr_vals ); -- line 719 ---------------------------------------- -- line 734 ---------------------------------------- . a->a_comp_data = NULL; . return LDAP_OPERATIONS_ERROR; . } . } . . i = 0; . #endif . 2,000,000 for ( bv = a->a_nvals; !BER_BVISNULL( bv ); bv++ ) { . int ret, match; . const char *text; . . #ifdef LDAP_COMP_MATCH 500,000 if( attr_converter && ava->aa_cf && a->a_comp_data ) { . /* Check if decoded component trees are already linked */ . struct berval cf_bv = { 20, "componentFilterMatch" }; . MatchingRule* cf_mr = mr_bvfind( &cf_bv ); . MatchingRuleAssertion mra; . mra.ma_cf = ava->aa_cf; . . if ( a->a_comp_data->cd_tree[i] == NULL ) . a->a_comp_data->cd_tree[i] = attr_converter (a, a->a_desc->ad_type->sat_syntax, (a->a_vals + i)); -- line 755 ---------------------------------------- -- line 769 ---------------------------------------- . return ret; . } . if ( a_alias ) . ava->aa_desc = a_alias->aa_aliasing_ad; . . } else . #endif . { 2,500,000 ret = ordered_value_match( &match, a->a_desc, mr, use, 15,000,000 => /home/hyc/OD/hobj/servers/slapd/../../../head/servers/slapd/value.c:ordered_value_match (250000x) . bv, &ava->aa_value, &text ); . } . 500,000 if( ret != LDAP_SUCCESS ) { . rc = ret; . break; . } . 1,250,000 switch ( type ) { . case LDAP_FILTER_EQUALITY: . case LDAP_FILTER_APPROX: 750,000 if ( match == 0 ) return LDAP_COMPARE_TRUE; . break; . . case LDAP_FILTER_GE: . if ( match >= 0 ) return LDAP_COMPARE_TRUE; . break; . . case LDAP_FILTER_LE: . if ( match <= 0 ) return LDAP_COMPARE_TRUE; . break; . } . } . } . . #ifdef LDAP_COMP_MATCH 500,004 if ( a_alias ) . ava->aa_desc = a_alias->aa_aliasing_ad; . #endif . . return rc; 2,250,018 } . . . static int . test_presence_filter( . Operation *op, . Entry *e, . AttributeDescription *desc ) . { -- line 817 ---------------------------------------- -------------------------------------------------------------------------------- -- Auto-annotated source: /home/hyc/OD/hobj/servers/slapd/../../../head/servers/slapd/schema_init.c -------------------------------------------------------------------------------- Ir -- line 551 ---------------------------------------- . int . octetStringMatch( . int *matchp, . slap_mask_t flags, . Syntax *syntax, . MatchingRule *mr, . struct berval *value, . void *assertedValue ) 250,000 { . struct berval *asserted = (struct berval *) assertedValue; 250,000 ber_slen_t d = (ber_slen_t) value->bv_len - (ber_slen_t) asserted->bv_len; . . /* For speed, order first by length, then by contents */ 1,500,000 *matchp = d ? (sizeof(d) == sizeof(int) ? d : d < 0 ? -1 : 1) . : memcmp( value->bv_val, asserted->bv_val, value->bv_len ); . . return LDAP_SUCCESS; 500,000 } . . int . octetStringOrderingMatch( . int *matchp, . slap_mask_t flags, . Syntax *syntax, . MatchingRule *mr, . struct berval *value, -- line 576 ---------------------------------------- -- line 599 ---------------------------------------- . /* Initialize HASHcontext from match type and schema info */ . static void . hashPreset( . HASH_CONTEXT *HASHcontext, . struct berval *prefix, . char pre, . Syntax *syntax, . MatchingRule *mr) 10 { 1 HASH_Init(HASHcontext); 2 => /home/hyc/OD/hobj/libraries/liblutil/../../../head/libraries/liblutil/hash.c:lutil_HASHInit (1x) 5 if(prefix && prefix->bv_len > 0) { 4 HASH_Update(HASHcontext, 73 => /home/hyc/OD/hobj/libraries/liblutil/../../../head/libraries/liblutil/hash.c:lutil_HASHUpdate (1x) . (unsigned char *)prefix->bv_val, prefix->bv_len); . } 2 if(pre) HASH_Update(HASHcontext, (unsigned char*)&pre, sizeof(pre)); 4 HASH_Update(HASHcontext, (unsigned char*)syntax->ssyn_oid, syntax->ssyn_oidlen); 309 => /home/hyc/OD/hobj/libraries/liblutil/../../../head/libraries/liblutil/hash.c:lutil_HASHUpdate (1x) 4 HASH_Update(HASHcontext, (unsigned char*)mr->smr_oid, mr->smr_oidlen); 55 => /home/hyc/OD/hobj/libraries/liblutil/../../../head/libraries/liblutil/hash.c:lutil_HASHUpdate (1x) . return; 6 } . . /* Set HASHdigest from HASHcontext and value:len */ . static void . hashIter( . HASH_CONTEXT *HASHcontext, . unsigned char *HASHdigest, . unsigned char *value, . int len) 5 { 2 HASH_CONTEXT ctx = *HASHcontext; 3 HASH_Update( &ctx, value, len ); 55 => /home/hyc/OD/hobj/libraries/liblutil/../../../head/libraries/liblutil/hash.c:lutil_HASHUpdate (1x) 3 HASH_Final( HASHdigest, &ctx ); 11 => /home/hyc/OD/hobj/libraries/liblutil/../../../head/libraries/liblutil/hash.c:lutil_HASHFinal (1x) 4 } . . /* Index generation function: Attribute values -> index hash keys */ . int octetStringIndexer( . slap_mask_t use, . slap_mask_t flags, . Syntax *syntax, . MatchingRule *mr, . struct berval *prefix, -- line 638 ---------------------------------------- -- line 680 ---------------------------------------- . slap_mask_t use, . slap_mask_t flags, . Syntax *syntax, . MatchingRule *mr, . struct berval *prefix, . void * assertedValue, . BerVarray *keysp, . void *ctx ) 11 { . size_t slen, mlen; . BerVarray keys; . HASH_CONTEXT HASHcontext; . unsigned char HASHdigest[HASH_BYTES]; . struct berval *value = (struct berval *) assertedValue; . struct berval digest; 2 digest.bv_val = (char *)HASHdigest; 1 digest.bv_len = sizeof(HASHdigest); . . slen = syntax->ssyn_oidlen; . mlen = mr->smr_oidlen; . 4 keys = slap_sl_malloc( sizeof( struct berval ) * 2, ctx ); 37 => /home/hyc/OD/hobj/servers/slapd/../../../head/servers/slapd/sl_malloc.c:slap_sl_malloc (1x) . 7 hashPreset( &HASHcontext, prefix, 0, syntax, mr ); 347 => /home/hyc/OD/hobj/servers/slapd/../../../head/servers/slapd/schema_init.c:hashPreset (1x) 5 hashIter( &HASHcontext, HASHdigest, 83 => /home/hyc/OD/hobj/servers/slapd/../../../head/servers/slapd/schema_init.c:hashIter (1x) . (unsigned char *)value->bv_val, value->bv_len ); . 4 ber_dupbv_x( keys, &digest, ctx ); 143 => /home/hyc/OD/hobj/libraries/liblber/../../../head/libraries/liblber/memory.c:ber_dupbv_x (1x) 2 BER_BVZERO( &keys[1] ); . 2 *keysp = keys; . . return LDAP_SUCCESS; 9 } . . static int . octetStringSubstringsMatch( . int *matchp, . slap_mask_t flags, . Syntax *syntax, . MatchingRule *mr, . struct berval *value, -- line 721 ---------------------------------------- -- line 1626 ---------------------------------------- . booleanValidate( . Syntax *syntax, . struct berval *in ) . { . /* very unforgiving validation, requires no normalization . * before simplistic matching . */ . 72 if( in->bv_len == 4 ) { 35 if( bvmatch( in, &slap_true_bv ) ) { . return LDAP_SUCCESS; . } 34 } else if( in->bv_len == 5 ) { 311 if( bvmatch( in, &slap_false_bv ) ) { . return LDAP_SUCCESS; . } . } . . return LDAP_INVALID_SYNTAX; . } . . static int -- line 1647 ---------------------------------------- -- line 1729 ---------------------------------------- . but same logic applies. Empty strings are allowed. . . -------------------------------------------------------------------*/ . . static int . UTF8StringValidate( . Syntax *syntax, . struct berval *in ) 2,124 { . ber_len_t count; . int len; 708 unsigned char *u = (unsigned char *)in->bv_val; . 2,124 if( BER_BVISEMPTY( in ) && syntax == slap_schema.si_syn_directoryString ) { . /* directory strings cannot be empty */ . return LDAP_INVALID_SYNTAX; . } . 309,748 for( count = in->bv_len; count > 0; count -= len, u += len ) { . /* get the length indicated by the first byte */ 310,456 len = LDAP_UTF8_CHARLEN2( u, len ); . . /* very basic checks */ . switch( len ) { . case 6: . if( (u[5] & 0xC0) != 0x80 ) { . return LDAP_INVALID_SYNTAX; . } . case 5: -- line 1757 ---------------------------------------- -- line 1774 ---------------------------------------- . /* CHARLEN already validated it */ . break; . default: . return LDAP_INVALID_SYNTAX; . } . . /* make sure len corresponds with the offset . to the next character */ 387,185 if( LDAP_UTF8_OFFSET( (char *)u ) != len ) return LDAP_INVALID_SYNTAX; . } . . if( count != 0 ) { . return LDAP_INVALID_SYNTAX; . } . . return LDAP_SUCCESS; 2,832 } . . static int . UTF8StringNormalize( . slap_mask_t use, . Syntax *syntax, . MatchingRule *mr, . struct berval *val, . struct berval *normalized, . void *ctx ) 5,010 { . struct berval tmp, nvalue; . int flags, wasspace; . ber_len_t i; . 1,670 assert( SLAP_MR_IS_VALUE_OF_SYNTAX( use ) != 0 ); . 1,670 if( BER_BVISNULL( val ) ) { . /* assume we're dealing with a syntax (e.g., UTF8String) . * which allows empty strings . */ . BER_BVZERO( normalized ); . return LDAP_SUCCESS; . } . 5,839 flags = SLAP_MR_ASSOCIATED( mr, slap_schema.si_mr_caseExactMatch ) . ? LDAP_UTF8_NOCASEFOLD : LDAP_UTF8_CASEFOLD; 5,010 flags |= ( ( use & SLAP_MR_EQUALITY_APPROX ) == SLAP_MR_EQUALITY_APPROX ) . ? LDAP_UTF8_APPROX : 0; . 4,175 val = UTF8bvnormalize( val, &tmp, flags, ctx ); 1,402,995 => /home/hyc/OD/hobj/libraries/liblunicode/../../../head/libraries/liblunicode/ucstr.c:UTF8bvnormalize (835x) . /* out of memory or syntax error, the former is unlikely */ 2,505 if( val == NULL ) { . return LDAP_INVALID_SYNTAX; . } . . /* collapse spaces (in place) */ . nvalue.bv_len = 0; 835 nvalue.bv_val = tmp.bv_val; . . /* trim leading spaces? */ 8,350 wasspace = !((( use & SLAP_MR_SUBSTR_ANY ) == SLAP_MR_SUBSTR_ANY ) || . (( use & SLAP_MR_SUBSTR_FINAL ) == SLAP_MR_SUBSTR_FINAL )); . 403,855 for( i = 0; i < tmp.bv_len; i++) { 240,309 if ( ASCII_SPACE( tmp.bv_val[i] )) { 23,877 if( wasspace++ == 0 ) { . /* trim repeated spaces */ 15,914 nvalue.bv_val[nvalue.bv_len++] = tmp.bv_val[i]; . } . } else { . wasspace = 0; 216,432 nvalue.bv_val[nvalue.bv_len++] = tmp.bv_val[i]; . } . } . 1,670 if( !BER_BVISEMPTY( &nvalue ) ) { . /* trim trailing space? */ 1,670 if( wasspace && ( . (( use & SLAP_MR_SUBSTR_INITIAL ) != SLAP_MR_SUBSTR_INITIAL ) && . ( use & SLAP_MR_SUBSTR_ANY ) != SLAP_MR_SUBSTR_ANY )) . { . --nvalue.bv_len; . } 835 nvalue.bv_val[nvalue.bv_len] = '\0'; . . } else { . /* string of all spaces is treated as one space */ . nvalue.bv_val[0] = ' '; . nvalue.bv_val[1] = '\0'; . nvalue.bv_len = 1; . } . 2,505 *normalized = nvalue; . return LDAP_SUCCESS; 3,340 } . . static int . directoryStringSubstringsMatch( . int *matchp, . slap_mask_t flags, . Syntax *syntax, . MatchingRule *mr, . struct berval *value, -- line 1873 ---------------------------------------- -- line 2371 ---------------------------------------- . return rc; . } . . int . numericoidValidate( . Syntax *syntax, . struct berval *in ) . { 12 struct berval val = *in; . 12 if( BER_BVISEMPTY( &val ) ) { . /* disallow empty strings */ . return LDAP_INVALID_SYNTAX; . } . 242 while( OID_LEADCHAR( val.bv_val[0] ) ) { 118 if ( val.bv_len == 1 ) { . return LDAP_SUCCESS; . } . 212 if ( val.bv_val[0] == '0' && !OID_SEPARATOR( val.bv_val[1] )) { . break; . } . . val.bv_val++; 53 val.bv_len--; . 316 while ( OID_LEADCHAR( val.bv_val[0] )) { . val.bv_val++; . val.bv_len--; . 78 if ( val.bv_len == 0 ) { . return LDAP_SUCCESS; . } . } . 106 if( !OID_SEPARATOR( val.bv_val[0] )) { . break; . } . 53 val.bv_val++; 106 val.bv_len--; . } . . return LDAP_INVALID_SYNTAX; 6 } . . static int . integerValidate( . Syntax *syntax, . struct berval *in ) . { . ber_len_t i; 44 struct berval val = *in; . 44 if ( BER_BVISEMPTY( &val ) ) return LDAP_INVALID_SYNTAX; . 66 if ( val.bv_val[0] == '-' ) { . val.bv_len--; . val.bv_val++; . . if( BER_BVISEMPTY( &val ) ) { /* bare "-" */ . return LDAP_INVALID_SYNTAX; . } . . if( val.bv_val[0] == '0' ) { /* "-0" */ . return LDAP_INVALID_SYNTAX; . } . 44 } else if ( val.bv_val[0] == '0' ) { 10 if( val.bv_len > 1 ) { /* "0" */ . return LDAP_INVALID_SYNTAX; . } . . return LDAP_SUCCESS; . } . 172 for( i=0; i < val.bv_len; i++ ) { 200 if( !ASCII_DIGIT(val.bv_val[i]) ) { . return LDAP_INVALID_SYNTAX; . } . } . . return LDAP_SUCCESS; 22 } . . static int . integerMatch( . int *matchp, . slap_mask_t flags, . Syntax *syntax, . MatchingRule *mr, . struct berval *value, -- line 2463 ---------------------------------------- -- line 2753 ---------------------------------------- . . static int . IA5StringValidate( . Syntax *syntax, . struct berval *val ) . { . ber_len_t i; . 228 for(i=0; i < val->bv_len; i++) { 144 if( !LDAP_ASCII(val->bv_val[i]) ) { . return LDAP_INVALID_SYNTAX; . } . } . . return LDAP_SUCCESS; 12 } . . static int . IA5StringNormalize( . slap_mask_t use, . Syntax *syntax, . MatchingRule *mr, . struct berval *val, . struct berval *normalized, . void *ctx ) 36 { . char *p, *q; 42 int casefold = !SLAP_MR_ASSOCIATED( mr, . slap_schema.si_mr_caseExactIA5Match ); . 12 assert( SLAP_MR_IS_VALUE_OF_SYNTAX( use ) != 0 ); . 6 p = val->bv_val; . . /* Ignore initial whitespace */ 24 while ( ASCII_SPACE( *p ) ) p++; . 12 normalized->bv_len = val->bv_len - ( p - val->bv_val ); 24 normalized->bv_val = slap_sl_malloc( normalized->bv_len + 1, ctx ); 665 => /home/hyc/OD/hobj/servers/slapd/../../../head/servers/slapd/sl_malloc.c:slap_sl_malloc (6x) 24 AC_MEMCPY( normalized->bv_val, p, normalized->bv_len ); 330 => ???:memmove (6x) 18 normalized->bv_val[normalized->bv_len] = '\0'; . 18 p = q = normalized->bv_val; . 78 while ( *p ) { 60 if ( ASCII_SPACE( *p ) ) { . *q++ = *p++; . . /* Ignore the extra whitespace */ . while ( ASCII_SPACE( *p ) ) { . p++; . } . 60 } else if ( casefold ) { . /* Most IA5 rules require casefolding */ 210 *q++ = TOLOWER(*p); p++; 2,037 => ???:0x00000000000132c0'2 (1x) 152 => ???:__ctype_tolower_loc (29x) . . } else { 66 *q++ = *p++; . } . } . 18 assert( normalized->bv_val <= p ); 18 assert( q <= p ); . . /* . * If the string ended in space, backup the pointer one . * position. One is enough because the above loop collapsed . * all whitespace to a single space. . */ 36 if ( q > normalized->bv_val && ASCII_SPACE( q[-1] ) ) --q; . . /* null terminate */ 6 *q = '\0'; . 12 normalized->bv_len = q - normalized->bv_val; . . return LDAP_SUCCESS; 42 } . . static int . UUIDValidate( . Syntax *syntax, . struct berval *in ) . { . int i; . if( in->bv_len != 36 ) { -- line 2839 ---------------------------------------- -- line 2913 ---------------------------------------- . int . UUIDNormalize( . slap_mask_t usage, . Syntax *syntax, . MatchingRule *mr, . struct berval *val, . struct berval *normalized, . void *ctx ) 60 { . unsigned char octet = '\0'; . int i; . int j; . 24 if ( SLAP_MR_IS_DENORMALIZE( usage ) ) { . /* NOTE: must be a normalized UUID */ . assert( val->bv_len == 16 ); . . normalized->bv_val = slap_sl_malloc( LDAP_LUTIL_UUIDSTR_BUFSIZE, ctx ); . normalized->bv_len = lutil_uuidstr_from_normalized( val->bv_val, . val->bv_len, normalized->bv_val, LDAP_LUTIL_UUIDSTR_BUFSIZE ); . assert( normalized->bv_len == STRLENOF( "BADBADBA-DBAD-0123-4567-BADBADBADBAD" ) ); . . return LDAP_SUCCESS; . } . 12 normalized->bv_len = 16; 132 normalized->bv_val = slap_sl_malloc( normalized->bv_len + 1, ctx ); 444 => /home/hyc/OD/hobj/servers/slapd/../../../head/servers/slapd/sl_malloc.c:slap_sl_malloc (12x) . 1,716 for( i=0, j=0; i<36; i++ ) { . unsigned char nibble; 2,160 if( val->bv_val[i] == '-' ) { . continue; . 1,152 } else if( ASCII_DIGIT( val->bv_val[i] ) ) { . nibble = val->bv_val[i] - '0'; . 456 } else if( ASCII_HEXLOWER( val->bv_val[i] ) ) { 152 nibble = val->bv_val[i] - ('a'-10); . . } else if( ASCII_HEXUPPER( val->bv_val[i] ) ) { . nibble = val->bv_val[i] - ('A'-10); . . } else { . slap_sl_free( normalized->bv_val, ctx ); . BER_BVZERO( normalized ); . return LDAP_INVALID_SYNTAX; . } . 768 if( j & 1 ) { 192 octet |= nibble; 768 normalized->bv_val[j>>1] = octet; . } else { 768 octet = nibble << 4; . } 768 j++; . } . 36 normalized->bv_val[normalized->bv_len] = 0; . return LDAP_SUCCESS; 48 } . . . . int . numericStringValidate( . Syntax *syntax, . struct berval *in ) . { . ber_len_t i; . 594 if( BER_BVISEMPTY( in ) ) return LDAP_INVALID_SYNTAX; . 1,323 for(i=0; i < in->bv_len; i++) { 1,830 if( !SLAP_NUMERIC(in->bv_val[i]) ) { . return LDAP_INVALID_SYNTAX; . } . } . . return LDAP_SUCCESS; . } . . static int -- line 2994 ---------------------------------------- -- line 5415 ---------------------------------------- . enum { start = 0 }; . #endif . . static int . check_time_syntax (struct berval *val, . int start, . int *parts, . struct berval *fraction) 132 { . /* . * start=0 GeneralizedTime YYYYmmddHH[MM[SS]][(./,)d...](Z|(+/-)HH[MM]) . * start=1 UTCTime YYmmddHHMM[SS][Z|(+/-)HHMM] . * GeneralizedTime supports leap seconds, UTCTime does not. . */ . static const int ceiling[9] = { 100, 100, 12, 31, 24, 60, 60, 24, 60 }; . static const int mdays[2][12] = { . /* non-leap years */ . { 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 }, . /* leap years */ . { 31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 } . }; . char *p, *e; . int part, c, c1, c2, tzoffset, leapyear = 0; . 132 p = val->bv_val; 264 e = p + val->bv_len; . . #ifdef SUPPORT_OBSOLETE_UTC_SYNTAX . parts[0] = 20; /* century - any multiple of 4 from 04 to 96 */ . #endif 4,752 for (part = start; part < 7 && p < e; part++) { 924 c1 = *p; 2,772 if (!ASCII_DIGIT(c1)) { . break; . } 132 p++; 2,640 if (p == e) { . return LDAP_INVALID_SYNTAX; . } 1,056 c = *p++; 2,772 if (!ASCII_DIGIT(c)) { . return LDAP_INVALID_SYNTAX; . } 2,244 c += c1 * 10 - '0' * 11; 3,168 if ((part | 1) == 3) { 264 --c; 2,112 if (c < 0) { . return LDAP_INVALID_SYNTAX; . } . } 1,848 if (c >= ceiling[part]) { . if (! (c == 60 && part == 6 && start == 0)) . return LDAP_INVALID_SYNTAX; . } 924 parts[part] = c; . } 264 if (part < 5 + start) { . return LDAP_INVALID_SYNTAX; . } 1,716 for (; part < 9; part++) { 264 parts[part] = 0; . } . . /* leapyear check for the Gregorian calendar (year>1581) */ 660 if (parts[parts[1] == 0 ? 0 : 1] % 4 == 0) { . leapyear = 1; . } . 1,188 if (parts[3] >= mdays[leapyear][parts[2]]) { . return LDAP_INVALID_SYNTAX; . } . . if (start == 0) { 132 fraction->bv_val = p; 132 fraction->bv_len = 0; 924 if (p < e && (*p == '.' || *p == ',')) { . char *end_num; . while (++p < e && ASCII_DIGIT(*p)) { . /* EMTPY */; . } . if (p - fraction->bv_val == 1) { . return LDAP_INVALID_SYNTAX; . } . for (end_num = p; end_num[-1] == '0'; --end_num) { . /* EMPTY */; . } . c = end_num - fraction->bv_val; . if (c != 1) fraction->bv_len = c; . } . } . 264 if (p == e) { . /* no time zone */ . return start == 0 ? LDAP_INVALID_SYNTAX : LDAP_SUCCESS; . } . 264 tzoffset = *p++; 528 switch (tzoffset) { . default: . return LDAP_INVALID_SYNTAX; . case 'Z': . /* UTC */ . break; . case '+': . case '-': . for (part = 7; part < 9 && p < e; part++) { -- line 5520 ---------------------------------------- -- line 5581 ---------------------------------------- . continue; . } else if (part != 5) { . break; . } . } . } . } . 528 return p != e ? LDAP_INVALID_SYNTAX : LDAP_SUCCESS; 264 } . . #ifdef SUPPORT_OBSOLETE_UTC_SYNTAX . . #if 0 . static int . xutcTimeNormalize( . Syntax *syntax, . struct berval *val, -- line 5598 ---------------------------------------- -- line 5643 ---------------------------------------- . static int . generalizedTimeNormalize( . slap_mask_t usage, . Syntax *syntax, . MatchingRule *mr, . struct berval *val, . struct berval *normalized, . void *ctx ) 924 { . int parts[9], rc; . unsigned int len; . struct berval fraction; . 660 rc = check_time_syntax(val, 0, parts, &fraction); 33,264 => /home/hyc/OD/hobj/servers/slapd/../../../head/servers/slapd/schema_init.c:check_time_syntax (132x) 264 if (rc != LDAP_SUCCESS) { . return rc; . } . 264 len = STRLENOF("YYYYmmddHHMMSSZ") + fraction.bv_len; 528 normalized->bv_val = slap_sl_malloc( len + 1, ctx ); 23,251 => /home/hyc/OD/hobj/servers/slapd/../../../head/servers/slapd/sl_malloc.c:slap_sl_malloc (132x) 264 if ( BER_BVISNULL( normalized ) ) { . return LBER_ERROR_MEMORY; . } . 2,112 sprintf( normalized->bv_val, "%02d%02d%02d%02d%02d%02d%02d", 409,332 => ???:sprintf (132x) . parts[0], parts[1], parts[2] + 1, parts[3] + 1, . parts[4], parts[5], parts[6] ); 396 if ( !BER_BVISEMPTY( &fraction ) ) { . memcpy( normalized->bv_val + STRLENOF("YYYYmmddHHMMSSZ")-1, . fraction.bv_val, fraction.bv_len ); . normalized->bv_val[STRLENOF("YYYYmmddHHMMSSZ")-1] = '.'; . } 528 strcpy( normalized->bv_val + len-1, "Z" ); 132 normalized->bv_len = len; . 132 return LDAP_SUCCESS; 924 } . . static int . generalizedTimeOrderingMatch( . int *matchp, . slap_mask_t flags, . Syntax *syntax, . MatchingRule *mr, . struct berval *value, -- line 5687 ---------------------------------------- -- line 6787 ---------------------------------------- . . {NULL, SLAP_MR_NONE, NULL, . NULL, NULL, NULL, NULL, NULL, . NULL } . }; . . int . slap_schema_init( void ) 3 { . int res; . int i; . . /* we should only be called once (from main) */ 5 assert( schema_init_done == 0 ); . 367 for ( i=0; syntax_defs[i].sd_desc != NULL; i++ ) { 146 res = register_syntax( &syntax_defs[i] ); 300,071 => /home/hyc/OD/hobj/servers/slapd/../../../head/servers/slapd/syntax.c:register_syntax (73x) . 146 if ( res ) { . fprintf( stderr, "slap_schema_init: Error registering syntax %s\n", . syntax_defs[i].sd_desc ); . return LDAP_OTHER; . } . } . 291 for ( i=0; mrule_defs[i].mrd_desc != NULL; i++ ) { 114 if( mrule_defs[i].mrd_usage == SLAP_MR_NONE && . mrule_defs[i].mrd_compat_syntaxes == NULL ) . { . fprintf( stderr, . "slap_schema_init: Ignoring unusable matching rule %s\n", . mrule_defs[i].mrd_desc ); . continue; . } . 114 res = register_matching_rule( &mrule_defs[i] ); 391,998 => /home/hyc/OD/hobj/servers/slapd/../../../head/servers/slapd/mr.c:register_matching_rule (57x) . 114 if ( res ) { . fprintf( stderr, . "slap_schema_init: Error registering matching rule %s\n", . mrule_defs[i].mrd_desc ); . return LDAP_OTHER; . } . } . 1 res = slap_schema_load(); 900,798 => /home/hyc/OD/hobj/servers/slapd/../../../head/servers/slapd/schema_prep.c:slap_schema_load (1x) 1 schema_init_done = 1; . return res; 4 } . . void . schema_destroy( void ) 1 { 1 oidm_destroy(); 26,433 => /home/hyc/OD/hobj/servers/slapd/../../../head/servers/slapd/oidm.c:oidm_destroy (1x) 1 oc_destroy(); 250,414 => /home/hyc/OD/hobj/servers/slapd/../../../head/servers/slapd/oc.c:oc_destroy (1x) 1 at_destroy(); 895,887 => /home/hyc/OD/hobj/servers/slapd/../../../head/servers/slapd/at.c:at_destroy (1x) 1 mr_destroy(); 63,933 => /home/hyc/OD/hobj/servers/slapd/../../../head/servers/slapd/mr.c:mr_destroy (1x) 2 mru_destroy(); 138,270 => /home/hyc/OD/hobj/servers/slapd/../../../head/servers/slapd/mr.c:mru_destroy (1x) 1 syn_destroy(); 44,736 => /home/hyc/OD/hobj/servers/slapd/../../../head/servers/slapd/syntax.c:syn_destroy (1x) . 3 if( schema_init_done ) { 2 ldap_pvt_thread_mutex_destroy( &ad_index_mutex ); 30 => /home/hyc/OD/hobj/libraries/libldap_r/../../../head/libraries/libldap_r/thr_posix.c:ldap_pvt_thread_mutex_destroy (1x) 2 ldap_pvt_thread_mutex_destroy( &ad_undef_mutex ); 10 => /home/hyc/OD/hobj/libraries/libldap_r/../../../head/libraries/libldap_r/thr_posix.c:ldap_pvt_thread_mutex_destroy (1x) 2 ldap_pvt_thread_mutex_destroy( &oc_undef_mutex ); 10 => /home/hyc/OD/hobj/libraries/libldap_r/../../../head/libraries/libldap_r/thr_posix.c:ldap_pvt_thread_mutex_destroy (1x) . } 1 } -------------------------------------------------------------------------------- -- Auto-annotated source: /home/hyc/OD/hobj/servers/slapd/back-mdb/../../../../head/servers/slapd/back-mdb/dn2id.c -------------------------------------------------------------------------------- Ir -- line 49 ---------------------------------------- . /* Sort function for the sorted duplicate data items of a dn2id key. . * Sorts based on normalized RDN, in length order. . */ . int . mdb_dup_compare( . const MDB_val *usrkey, . const MDB_val *curkey . ) 2 { . diskNode *un, *cn; . int rc, nrlen; . 2 un = (diskNode *)usrkey->mv_data; 2 cn = (diskNode *)curkey->mv_data; . . /* data is not aligned, cannot compare directly */ 4 rc = un->nrdnlen[0] - cn->nrdnlen[0]; 8 if ( rc ) return rc; 2 rc = un->nrdnlen[1] - cn->nrdnlen[1]; 4 if ( rc ) return rc; . . nrlen = (un->nrdnlen[0] << 8) | un->nrdnlen[1]; 6 return strncmp( un->nrdn, cn->nrdn, nrlen ); 71 => ???:0x000000000010e5a0 (1x) 3 } . . #if 0 . /* This function constructs a full DN for a given entry. . */ . int mdb_fix_dn( . Entry *e, . int checkit ) . { -- line 80 ---------------------------------------- -- line 264 ---------------------------------------- . int . mdb_dn2id( . Operation *op, . MDB_txn *txn, . struct berval *in, . ID *id, . struct berval *matched, . struct berval *nmatched ) 13 { . struct mdb_info *mdb = (struct mdb_info *) op->o_bd->be_private; . MDB_cursor *cursor; 3 MDB_dbi dbi = mdb->mi_dn2id; . MDB_val key, data; . int rc = 0, nrlen; . diskNode *d; . char *ptr; . char dn[SLAP_LDAPDN_MAXLEN]; . ID pid, nid; . struct berval tmp; . 5 Debug( LDAP_DEBUG_TRACE, "=> mdb_dn2id(\"%s\")\n", in->bv_val, 0, 0 ); . 2 if ( matched ) { . matched->bv_val = dn + sizeof(dn) - 1; 1 matched->bv_len = 0; 3 *matched->bv_val-- = '\0'; . } 2 if ( nmatched ) { 1 nmatched->bv_len = 0; 1 nmatched->bv_val = 0; . } . 4 if ( !in->bv_len ) { . *id = 0; . nid = 0; . goto done; . } . 2 tmp = *in; . 5 if ( op->o_bd->be_nsuffix[0].bv_len ) { . nrlen = tmp.bv_len - op->o_bd->be_nsuffix[0].bv_len; 3 tmp.bv_val += nrlen; . tmp.bv_len = op->o_bd->be_nsuffix[0].bv_len; . } else { . for ( ptr = tmp.bv_val + tmp.bv_len - 1; ptr >= tmp.bv_val; ptr-- ) . if (DN_SEPARATOR(*ptr)) . break; . ptr++; . tmp.bv_len -= ptr - tmp.bv_val; . tmp.bv_val = ptr; . } . nid = 0; 1 key.mv_size = sizeof(ID); . 5 rc = mdb_cursor_open( txn, dbi, &cursor ); 499 => /home/hyc/OD/hobj/servers/slapd/back-mdb/../../../../head/servers/slapd/back-mdb/../../../libraries/libmdb/mdb.c:mdb_cursor_open (1x) 6 if ( rc ) return rc; . . for (;;) { 2 key.mv_data = &pid; 2 pid = nid; . 2 data.mv_size = sizeof(diskNode) + tmp.bv_len; 6 d = op->o_tmpalloc( data.mv_size, op->o_tmpmemctx ); 74 => /home/hyc/OD/hobj/servers/slapd/../../../head/servers/slapd/sl_malloc.c:slap_sl_malloc (1x) 1 d->nrdnlen[1] = tmp.bv_len & 0xff; 4 d->nrdnlen[0] = (tmp.bv_len >> 8) | 0x80; 4 ptr = lutil_strncopy( d->nrdn, tmp.bv_val, tmp.bv_len ); 184 => /home/hyc/OD/hobj/libraries/liblutil/../../../head/libraries/liblutil/utils.c:lutil_strncopy (1x) 1 *ptr = '\0'; 1 data.mv_data = d; 6 rc = mdb_cursor_get( cursor, &key, &data, MDB_GET_BOTH ); 1,966 => /home/hyc/OD/hobj/servers/slapd/back-mdb/../../../../head/servers/slapd/back-mdb/../../../libraries/libmdb/mdb.c:mdb_cursor_get (1x) 5 op->o_tmpfree( d, op->o_tmpmemctx ); 35 => /home/hyc/OD/hobj/servers/slapd/../../../head/servers/slapd/sl_malloc.c:slap_sl_free (1x) 3 if ( rc ) . break; 2 ptr = (char *) data.mv_data + data.mv_size - sizeof(ID); 2 memcpy( &nid, ptr, sizeof(ID)); . . /* grab the non-normalized RDN */ 2 if ( matched ) { . int rlen; . d = data.mv_data; . rlen = data.mv_size - sizeof(diskNode) - tmp.bv_len; 4 matched->bv_len += rlen; 3 matched->bv_val -= rlen + 1; 2 ptr = lutil_strcopy( matched->bv_val, d->rdn + tmp.bv_len ); 131 => /home/hyc/OD/hobj/libraries/liblutil/../../../head/libraries/liblutil/utils.c:lutil_strcopy (1x) 2 if ( pid ) { . *ptr = ','; . matched->bv_len++; . } . } 2 if ( nmatched ) { 1 nmatched->bv_val = tmp.bv_val; . } . 4 if ( tmp.bv_val > in->bv_val ) { . for (ptr = tmp.bv_val - 2; ptr > in->bv_val && . !DN_SEPARATOR(*ptr); ptr--) /* empty */; . if ( ptr >= in->bv_val ) { . if (DN_SEPARATOR(*ptr)) ptr++; . tmp.bv_len = tmp.bv_val - ptr - 1; . tmp.bv_val = ptr; . } . } else { . break; . } . } 3 *id = nid; 3 mdb_cursor_close( cursor ); 111 => /home/hyc/OD/hobj/servers/slapd/back-mdb/../../../../head/servers/slapd/back-mdb/../../../libraries/libmdb/mdb.c:mdb_cursor_close (1x) . done: 2 if ( matched ) { 3 if ( matched->bv_len ) { 6 ptr = op->o_tmpalloc( matched->bv_len+1, op->o_tmpmemctx ); 37 => /home/hyc/OD/hobj/servers/slapd/../../../head/servers/slapd/sl_malloc.c:slap_sl_malloc (1x) 3 strcpy( ptr, matched->bv_val ); 42 => ???:0x0000000000109da0 (1x) 2 matched->bv_val = ptr; . } else { . if ( BER_BVISEMPTY( &op->o_bd->be_nsuffix[0] ) && !nid ) { . ber_dupbv( matched, (struct berval *)&slap_empty_bv ); . } else { . matched->bv_val = NULL; . } . } . } 2 if ( nmatched ) { 3 if ( nmatched->bv_val ) { 5 nmatched->bv_len = in->bv_len - (nmatched->bv_val - in->bv_val); . } else { . *nmatched = slap_empty_bv; . } . } . 3 if( rc != 0 ) { . Debug( LDAP_DEBUG_TRACE, "<= mdb_dn2id: get failed: %s (%d)\n", . mdb_strerror( rc ), rc, 0 ); . } else { 5 Debug( LDAP_DEBUG_TRACE, "<= mdb_dn2id: got id=0x%lx\n", . nid, 0, 0 ); . } . . return rc; 9 } . . /* return IDs from root to parent of DN */ . int . mdb_dn2sups( . Operation *op, . MDB_txn *txn, . struct berval *in, . ID *ids ) -- line 410 ---------------------------------------- -- line 715 ---------------------------------------- . } . . /* See if base is a child of any of the scopes . */ . int . mdb_idscopes( . Operation *op, . IdScopes *isc ) 2,250,009 { . struct mdb_info *mdb = (struct mdb_info *) op->o_bd->be_private; 750,003 MDB_dbi dbi = mdb->mi_dn2id; . MDB_val key, data; . ID id; . char *ptr; . int rc; . unsigned int x; . unsigned int nrlen, rlen; . diskNode *d; . 250,001 key.mv_size = sizeof(ID); . 500,002 if ( !isc->mc ) { 4 rc = mdb_cursor_open( isc->mt, dbi, &isc->mc ); 653 => /home/hyc/OD/hobj/servers/slapd/back-mdb/../../../../head/servers/slapd/back-mdb/../../../libraries/libmdb/mdb.c:mdb_cursor_open (1x) 2 if ( rc ) return rc; . } . 750,003 id = isc->id; 1,000,002 while (id) { 750,002 key.mv_data = &id; 3,250,007 rc = mdb_cursor_get( isc->mc, &key, &data, MDB_SET ); 928,167,306 => /home/hyc/OD/hobj/servers/slapd/back-mdb/../../../../head/servers/slapd/back-mdb/../../../libraries/libmdb/mdb.c:mdb_cursor_get (500001x) 1,000,002 if ( rc ) . break; . . /* save RDN info */ 500,001 d = data.mv_data; 2,000,004 nrlen = (d->nrdnlen[0] << 8) | d->nrdnlen[1]; 500,001 rlen = data.mv_size - sizeof(diskNode) - nrlen; 3,000,006 isc->nrdns[isc->numrdns].bv_len = nrlen; 1,000,002 isc->nrdns[isc->numrdns].bv_val = d->nrdn; 2,500,005 isc->rdns[isc->numrdns].bv_len = rlen; 1,000,002 isc->rdns[isc->numrdns].bv_val = d->nrdn+nrlen+1; 500,001 isc->numrdns++; . . ptr = data.mv_data; . ptr += data.mv_size - sizeof(ID); 1,000,002 memcpy( &id, ptr, sizeof(ID) ); 1,000,002 x = mdb_idl_search( isc->scopes, id ); 10,250,016 => /home/hyc/OD/hobj/servers/slapd/back-mdb/../../../../head/servers/slapd/back-mdb/idl.c:mdb_idl_search (500001x) 2,500,005 if ( isc->scopes[x] == id ) { 500,002 isc->nscope = x; 250,001 return MDB_SUCCESS; . } 500,000 if ( op->ors_scope == LDAP_SCOPE_ONELEVEL ) . break; . } . return MDB_NOTFOUND; 2,250,009 } . . #if 0 . /* mdb_dn2idl: . * We can't just use mdb_idl_fetch_key because . * 1 - our data items are longer than just an entry ID . * 2 - our data items are sorted alphabetically by nrdn, not by ID. . * . * We descend the tree recursively, so we define this cookie -- line 778 ---------------------------------------- -------------------------------------------------------------------------------- -- Auto-annotated source: /home/hyc/OD/hobj/servers/slapd/../../../head/servers/slapd/value.c -------------------------------------------------------------------------------- Ir -- line 37 ---------------------------------------- . #include . . #include "slap.h" . . int . value_add( . BerVarray *vals, . BerVarray addvals ) 14 { . int n, nn = 0; . BerVarray v2; . 4 if ( addvals != NULL ) { 22 for ( ; !BER_BVISNULL( &addvals[nn] ); nn++ ) . ; /* NULL */ . } . 6 if ( *vals == NULL ) { 8 *vals = (BerVarray) SLAP_MALLOC( (nn + 1) 406 => /home/hyc/OD/hobj/libraries/liblber/../../../head/libraries/liblber/memory.c:ber_memalloc (2x) . * sizeof(struct berval) ); 4 if( *vals == NULL ) { . Debug(LDAP_DEBUG_TRACE, . "value_add: SLAP_MALLOC failed.\n", 0, 0, 0 ); . return LBER_ERROR_MEMORY; . } . n = 0; . . } else { . for ( n = 0; !BER_BVISNULL( &(*vals)[n] ); n++ ) { . ; /* Empty */ . } . *vals = (BerVarray) SLAP_REALLOC( (char *) *vals, . (n + nn + 1) * sizeof(struct berval) ); . if( *vals == NULL ) { 2 Debug(LDAP_DEBUG_TRACE, . "value_add: SLAP_MALLOC failed.\n", 0, 0, 0 ); . return LBER_ERROR_MEMORY; . } . } . 2 v2 = &(*vals)[n]; 8 for ( n = 0 ; n < nn; v2++, addvals++ ) { 12 ber_dupbv( v2, addvals ); 1,116 => /home/hyc/OD/hobj/libraries/liblber/../../../head/libraries/liblber/memory.c:ber_dupbv (4x) 8 if ( BER_BVISNULL( v2 ) ) break; . } 6 BER_BVZERO( v2 ); . . return LDAP_SUCCESS; 12 } . . int . value_add_one( . BerVarray *vals, . struct berval *addval ) 285 { . int n; . BerVarray v2; . 171 if ( *vals == NULL ) { 171 *vals = (BerVarray) SLAP_MALLOC( 2 * sizeof(struct berval) ); 7,108 => /home/hyc/OD/hobj/libraries/liblber/../../../head/libraries/liblber/memory.c:ber_memalloc (57x) 114 if( *vals == NULL ) { . Debug(LDAP_DEBUG_TRACE, . "value_add_one: SLAP_MALLOC failed.\n", 0, 0, 0 ); . return LBER_ERROR_MEMORY; . } . n = 0; . . } else { . for ( n = 0; !BER_BVISNULL( &(*vals)[n] ); n++ ) { . ; /* Empty */ . } . *vals = (BerVarray) SLAP_REALLOC( (char *) *vals, . (n + 2) * sizeof(struct berval) ); . if( *vals == NULL ) { 57 Debug(LDAP_DEBUG_TRACE, . "value_add_one: SLAP_MALLOC failed.\n", 0, 0, 0 ); . return LBER_ERROR_MEMORY; . } . } . 57 v2 = &(*vals)[n]; 171 ber_dupbv(v2, addval); 12,138 => /home/hyc/OD/hobj/libraries/liblber/../../../head/libraries/liblber/memory.c:ber_dupbv (57x) . . v2++; 171 BER_BVZERO( v2 ); . . return LDAP_SUCCESS; 228 } . . int asserted_value_validate_normalize( . AttributeDescription *ad, . MatchingRule *mr, . unsigned usage, . struct berval *in, . struct berval *out, . const char ** text, . void *ctx ) 12 { . int rc; . struct berval pval; 1 pval.bv_val = NULL; . . /* we expect the value to be in the assertion syntax */ 2 assert( !SLAP_MR_IS_VALUE_OF_ATTRIBUTE_SYNTAX(usage) ); . 2 if( mr == NULL ) { . *text = "inappropriate matching request"; . return LDAP_INAPPROPRIATE_MATCHING; . } . 2 if( !mr->smr_match ) { . *text = "requested matching rule not supported"; . return LDAP_INAPPROPRIATE_MATCHING; . } . 4 if( mr->smr_syntax->ssyn_pretty ) { . rc = (mr->smr_syntax->ssyn_pretty)( mr->smr_syntax, in, &pval, ctx ); . in = &pval; . 3 } else if ( mr->smr_syntax->ssyn_validate ) { 5 rc = (mr->smr_syntax->ssyn_validate)( mr->smr_syntax, in ); 51 => /home/hyc/OD/hobj/servers/slapd/../../../head/servers/slapd/schema_init.c:UTF8StringValidate (1x) . . } else { . *text = "inappropriate matching request"; . return LDAP_INAPPROPRIATE_MATCHING; . } . 2 if( rc != LDAP_SUCCESS ) { . *text = "value does not conform to assertion syntax"; . return LDAP_INVALID_SYNTAX; . } . 3 if( mr->smr_normalize ) { 12 rc = (mr->smr_normalize)( 250 => /home/hyc/OD/hobj/servers/slapd/../../../head/servers/slapd/schema_init.c:UTF8StringNormalize (1x) . usage|SLAP_MR_VALUE_OF_ASSERTION_SYNTAX, . ad ? ad->ad_type->sat_syntax : NULL, . mr, in, out, ctx ); . 3 if( pval.bv_val ) ber_memfree_x( pval.bv_val, ctx ); . 3 if( rc != LDAP_SUCCESS ) { . *text = "unable to normalize value for matching"; . return LDAP_INVALID_SYNTAX; . } . . } else if ( pval.bv_val != NULL ) { . *out = pval; . . } else { . ber_dupbv_x( out, in, ctx ); . } . . return LDAP_SUCCESS; 8 } . . int . value_match( . int *match, . AttributeDescription *ad, . MatchingRule *mr, . unsigned flags, . struct berval *v1, /* stored value */ . void *v2, /* assertion */ . const char ** text ) 250,002 { . int rc; . 500,004 assert( mr != NULL ); . 750,006 if( !mr->smr_match ) { . return LDAP_INAPPROPRIATE_MATCHING; . } . 1,500,012 rc = (mr->smr_match)( match, flags, 2,500,000 => /home/hyc/OD/hobj/servers/slapd/../../../head/servers/slapd/schema_init.c:octetStringMatch (250000x) 1,240 => /home/hyc/OD/hobj/servers/slapd/../../../head/servers/slapd/schema_prep.c:objectSubClassMatch (2x) . ad->ad_type->sat_syntax, mr, v1, v2 ); . . return rc; 250,002 } . . int value_find_ex( . AttributeDescription *ad, . unsigned flags, . BerVarray vals, . struct berval *val, . void *ctx ) . { -- line 222 ---------------------------------------- -- line 415 ---------------------------------------- . * uses the validate function of the syntax after removing . * the index, if allowed and present . */ . int . ordered_value_validate( . AttributeDescription *ad, . struct berval *in, . int mop ) 6,460 { 2,584 struct berval bv = *in; . 2,584 assert( ad->ad_type->sat_syntax != NULL ); 1,938 assert( ad->ad_type->sat_syntax->ssyn_validate != NULL ); . 1,292 if ( ad->ad_type->sat_flags & SLAP_AT_ORDERED ) { . . /* Skip past the assertion index */ 1,166 if ( bv.bv_val[0] == '{' ) { . char *ptr; . 792 ptr = ber_bvchr( &bv, '}' ); 4,950 => ???:memchr (198x) 396 if ( ptr != NULL ) { . struct berval ns; . 396 ns.bv_val = bv.bv_val + 1; 396 ns.bv_len = ptr - ns.bv_val; . 1,386 if ( numericStringValidate( NULL, &ns ) == LDAP_SUCCESS ) { 3,747 => /home/hyc/OD/hobj/servers/slapd/../../../head/servers/slapd/schema_init.c:numericStringValidate (198x) 198 ptr++; 792 bv.bv_len -= ptr - bv.bv_val; 198 bv.bv_val = ptr; . in = &bv; . /* If deleting by index, just succeed */ 1,386 if ( mop == LDAP_MOD_DELETE && BER_BVISEMPTY( &bv ) ) { . return LDAP_SUCCESS; . } . } . } . } . } . 1,938 return ad->ad_type->sat_syntax->ssyn_validate( ad->ad_type->sat_syntax, in ); 1,003,169 => /home/hyc/OD/hobj/servers/slapd/../../../head/servers/slapd/schema_init.c:UTF8StringValidate (600x) 602 => /home/hyc/OD/hobj/servers/slapd/../../../head/servers/slapd/schema_init.c:integerValidate (22x) 452 => /home/hyc/OD/hobj/servers/slapd/../../../head/servers/slapd/schema_init.c:booleanValidate (24x) 5,168 } . . /* . * wrapper for pretty function . * uses the pretty function of the syntax after removing . * the index, if allowed and present; in case, it's prepended . * to the pretty value . */ . int -- line 465 ---------------------------------------- -- line 609 ---------------------------------------- . ordered_value_match( . int *match, . AttributeDescription *ad, . MatchingRule *mr, . unsigned flags, . struct berval *v1, /* stored value */ . struct berval *v2, /* assertion */ . const char ** text ) 3,250,026 { . struct berval bv1, bv2; . . /* X-ORDERED VALUES equality matching: . * If (SLAP_MR_IS_VALUE_OF_ATTRIBUTE_SYNTAX) that means we are . * comparing two attribute values. In this case, we want to ignore . * the ordering index of both values, we just want to know if their . * main values are equal. . * . * If (SLAP_MR_IS_VALUE_OF_ASSERTION_SYNTAX) then we are comparing . * an assertion against an attribute value. . * If the assertion has no index, the index of the value is ignored. . * If the assertion has only an index, the remainder of the value is . * ignored. . * If the assertion has index and value, both are compared. . */ 750,006 if ( ad->ad_type->sat_flags & SLAP_AT_ORDERED ) { . char *ptr; . struct berval ns1 = BER_BVNULL, ns2 = BER_BVNULL; . . bv1 = *v1; . bv2 = *v2; . . /* Skip past the assertion index */ . if ( bv2.bv_val[0] == '{' ) { -- line 641 ---------------------------------------- -- line 680 ---------------------------------------- . if ( *match != 0 || BER_BVISEMPTY( &bv2 ) ) { . return LDAP_SUCCESS; . } . } . } . . } . 1,000,008 if ( !mr || !mr->smr_match ) { . *match = ber_bvcmp( v1, v2 ); . return LDAP_SUCCESS; . } . 2,250,018 return value_match( match, ad, mr, flags, v1, v2, text ); 5,751,266 => /home/hyc/OD/hobj/servers/slapd/../../../head/servers/slapd/value.c:value_match (250002x) 2,000,016 } . . int . ordered_value_add( . Entry *e, . AttributeDescription *ad, . Attribute *a, . BerVarray vals, . BerVarray nvals -- line 702 ---------------------------------------- -------------------------------------------------------------------------------- -- Auto-annotated source: /home/hyc/OD/hobj/libraries/libldap_r/schema.c -------------------------------------------------------------------------------- Ir -- line 97 ---------------------------------------- . /* . * When pretty printing the entities we will be appending to a buffer. . * Since checking for overflow, realloc'ing and checking if no error . * is extremely boring, we will use a protection layer that will let . * us blissfully ignore the error until the end. This layer is . * implemented with the help of the next type. . */ . 587 typedef struct safe_string { . char * val; . ber_len_t size; . ber_len_t pos; 2,348 int at_whsp; 219,649 => /home/hyc/OD/hobj/libraries/liblber/../../../head/libraries/liblber/memory.c:ber_memalloc_x (587x) 1,174 } safe_string; . . static safe_string * 2,348 new_safe_string(int size) 138,890 => /home/hyc/OD/hobj/libraries/liblber/../../../head/libraries/liblber/memory.c:ber_memalloc_x (587x) 1,174 { . safe_string * ss; . . ss = LDAP_MALLOC(sizeof(safe_string)); . if ( !ss ) 587 return(NULL); 587 587 ss->val = LDAP_MALLOC(size); . if ( !ss->val ) { . LDAP_FREE(ss); 1,761 return(NULL); . } . . ss->size = size; 1,174 ss->pos = 0; 1,174 ss->at_whsp = 0; . 1,761 return ss; 129,043 => /home/hyc/OD/hobj/libraries/liblber/../../../head/libraries/liblber/memory.c:ber_memfree_x (587x) 1,761 } 49,308 => /home/hyc/OD/hobj/libraries/liblber/../../../head/libraries/liblber/memory.c:ber_memfree_x (587x) 587 . static void . safe_string_free(safe_string * ss) . { . if ( !ss ) . return; . LDAP_FREE(ss->val); . LDAP_FREE(ss); . } . . #if 0 /* unused */ . static char * . safe_string_val(safe_string * ss) 2,348 { 2,935 ss->val[ss->pos] = '\0'; 107,221 => /home/hyc/OD/hobj/libraries/liblber/../../../head/libraries/liblber/memory.c:ber_memalloc_x (587x) 1,174 return(ss->val); . } 2,348 #endif 77,810 => ???:memmove (587x) 1,174 . static char * 2,935 safe_strdup(safe_string * ss) . { . char *ret = LDAP_MALLOC(ss->pos+1); . if (!ret) 112,075 return NULL; 67,245 AC_MEMCPY(ret, ss->val, ss->pos); 373,658 => ???:0x000000000007bb40 (22415x) . ret[ss->pos] = '\0'; . return ret; . } . . static int . append_to_safe_string(safe_string * ss, char * s) 89,660 { . int l = strlen(s); . char * temp; . 156,905 /* 144 * Some runaway process is trying to append to a string that 216 * overflowed and we could not extend. . */ . if ( !ss->val ) . return -1; 288 41,792 => /home/hyc/OD/hobj/libraries/liblber/../../../head/libraries/liblber/memory.c:ber_memrealloc_x (72x) 144 /* We always make sure there is at least one position available */ . if ( ss->pos + l >= ss->size-1 ) { . ss->size *= 2; . if ( ss->pos + l >= ss->size-1 ) { . ss->size = ss->pos + l + 1; 144 } . 89,660 temp = LDAP_REALLOC(ss->val, ss->size); 1,463,135 => ???:0x000000000010a7c0 (22415x) 44,830 if ( !temp ) { 203,304 /* Trouble, out of memory */ 20,846 LDAP_FREE(ss->val); . return -1; 23,984 } . ss->val = temp; . } 89,660 strncpy(&ss->val[ss->pos], s, l); . ss->pos += l; . if ( ss->pos > 0 && LDAP_SPACE(ss->val[ss->pos-1]) ) . ss->at_whsp = 1; . else 22,937 ss->at_whsp = 0; 409,554 => /home/hyc/OD/hobj/libraries/libldap_r/schema.c:append_to_safe_string (2430x) . . return 0; . } . . static int 31,266 print_literal(safe_string *ss, char *s) 2,108 { 62,186 => /home/hyc/OD/hobj/libraries/libldap_r/schema.c:append_to_safe_string (1054x) . return(append_to_safe_string(ss,s)); 18,736 } 871,671 => /home/hyc/OD/hobj/libraries/libldap_r/schema.c:append_to_safe_string (9368x) . . static int . print_whsp(safe_string *ss) . { . if ( ss->at_whsp ) 1,822 return(append_to_safe_string(ss,"")); . else . return(append_to_safe_string(ss," ")); 911 } 96,689 => /home/hyc/OD/hobj/libraries/libldap_r/schema.c:append_to_safe_string (911x) . . static int . print_numericoid(safe_string *ss, char *s) . { . if ( s ) 2,105 return(append_to_safe_string(ss,s)); 421 else 76,622 => /home/hyc/OD/hobj/libraries/libldap_r/schema.c:print_whsp (421x) . return(append_to_safe_string(ss,"")); 1,263 } 57,234 => /home/hyc/OD/hobj/libraries/libldap_r/schema.c:append_to_safe_string (421x) . 842 /* This one is identical to print_qdescr */ 38,311 => /home/hyc/OD/hobj/libraries/libldap_r/schema.c:print_whsp (421x) 1,263 static int . print_qdstring(safe_string *ss, char *s) . { . print_whsp(ss); 2,880 print_literal(ss,"'"); 576 append_to_safe_string(ss,s); 103,158 => /home/hyc/OD/hobj/libraries/libldap_r/schema.c:print_whsp (576x) . print_literal(ss,"'"); 1,728 return(print_whsp(ss)); 57,382 => /home/hyc/OD/hobj/libraries/libldap_r/schema.c:append_to_safe_string (576x) . } 1,152 52,416 => /home/hyc/OD/hobj/libraries/libldap_r/schema.c:print_whsp (576x) 1,728 static int . print_qdescr(safe_string *ss, char *s) . { . print_whsp(ss); . print_literal(ss,"'"); . append_to_safe_string(ss,s); . print_literal(ss,"'"); . return(print_whsp(ss)); 292 } 98 284,651 => /home/hyc/OD/hobj/libraries/libldap_r/schema.c:print_qdescr (49x) . static int . print_qdescrlist(safe_string *ss, char **sa) . { . char **sp; . int ret = 0; . . for (sp=sa; *sp; sp++) { . ret = print_qdescr(ss,*sp); . } . /* If the list was empty, we return zero that is potentially 2,755 * incorrect, but since we will be still appending things, the . * overflow will be detected later. Maybe FIX. . */ . return(ret); . } . . static int 2,755 print_qdescrs(safe_string *ss, char **sa) 48 { 4,368 => /home/hyc/OD/hobj/libraries/libldap_r/schema.c:print_whsp (24x) . /* The only way to represent an empty list is as a qdescrlist . * so, if the list is empty we treat it as a long list. . * Really, this is what the syntax mandates. We should not 48 * be here if the list was empty, but if it happens, a label 2,184 => /home/hyc/OD/hobj/libraries/libldap_r/schema.c:print_whsp (24x) . * has already been output and we cannot undo it. 527 */ 250,951 => /home/hyc/OD/hobj/libraries/libldap_r/schema.c:print_qdescr (527x) . if ( !sa[0] || ( sa[0] && sa[1] ) ) { 1,653 print_whsp(ss); . print_literal(ss,"("/*)*/); . print_qdescrlist(ss,sa); . print_literal(ss,/*(*/")"); 12,095 return(print_whsp(ss)); 2,419 } else { 439,365 => /home/hyc/OD/hobj/libraries/libldap_r/schema.c:print_whsp (2419x) 7,257 return(print_qdescr(ss,*sa)); 278,233 => /home/hyc/OD/hobj/libraries/libldap_r/schema.c:append_to_safe_string (2419x) 4,838 } 221,384 => /home/hyc/OD/hobj/libraries/libldap_r/schema.c:print_whsp (2419x) 7,257 } . . static int . print_woid(safe_string *ss, char *s) . { . print_whsp(ss); . append_to_safe_string(ss,s); 9,390 return print_whsp(ss); 5,571 } 690,529 => /home/hyc/OD/hobj/libraries/libldap_r/schema.c:print_woid (1857x) . . static int 315 print_oidlist(safe_string *ss, char **sa) 30,866 => /home/hyc/OD/hobj/libraries/libldap_r/schema.c:print_woid (105x) . { . char **sp; . . for (sp=sa; *(sp+1); sp++) { 1,290 print_woid(ss,*sp); 1,548 print_literal(ss,"$"); . } . return(print_woid(ss,*sp)); 210 } 6,720 => /home/hyc/OD/hobj/libraries/libldap_r/schema.c:print_whsp (105x) . . static int 306 print_oids(safe_string *ss, char **sa) 40,265 => /home/hyc/OD/hobj/libraries/libldap_r/schema.c:print_woid (153x) . { 774 if ( sa[0] && sa[1] ) { . print_literal(ss,"("/*)*/); . print_oidlist(ss,sa); . print_whsp(ss); . return(print_literal(ss,/*(*/")")); . } else { . return(print_woid(ss,*sa)); . } 972 } 37,752 => /home/hyc/OD/hobj/libraries/libldap_r/schema.c:print_numericoid (324x) 648 264 static int 30,028 => ???:snprintf (44x) . print_noidlen(safe_string *ss, char *s, int l) . { . char buf[64]; . int ret; . . ret = print_numericoid(ss,s); . if ( l ) { . snprintf(buf, sizeof buf, "{%d}",l); -- line 323 ---------------------------------------- -- line 343 ---------------------------------------- . print_ruleid(ss,rids[0]); . return print_whsp(ss); . } else { . print_literal(ss,"("/*)*/); . for( i=0; i /home/hyc/OD/hobj/libraries/libldap_r/schema.c:print_whsp (31x) 272 . static int 74 print_extensions(safe_string *ss, LDAPSchemaExtensionItem **extensions) 3,367 => /home/hyc/OD/hobj/libraries/libldap_r/schema.c:print_whsp (37x) . { 148 LDAPSchemaExtensionItem **ext; 16,795 => /home/hyc/OD/hobj/libraries/libldap_r/schema.c:print_qdescrs (37x) 74 2,368 => /home/hyc/OD/hobj/libraries/libldap_r/schema.c:print_whsp (37x) . if ( extensions ) { . print_whsp(ss); . for ( ext = extensions; *ext != NULL; ext++ ) { . print_literal(ss, (*ext)->lsei_name); 2,935 print_whsp(ss); . /* Should be print_qdstrings */ . print_qdescrs(ss, (*ext)->lsei_values); . print_whsp(ss); . } . } . . return 0; . } . . char * . ldap_syntax2str( LDAPSyntax * syn ) . { . struct berval bv; 438 if (ldap_syntax2bv( syn, &bv )) . return(bv.bv_val); . else 146 return NULL; 24,331 => /home/hyc/OD/hobj/libraries/libldap_r/schema.c:T.115 (73x) 146 } . . struct berval * . ldap_syntax2bv( LDAPSyntax * syn, struct berval *bv ) 146 { 17,958 => /home/hyc/OD/hobj/libraries/libldap_r/schema.c:print_whsp (73x) . safe_string * ss; 219 8,732 => /home/hyc/OD/hobj/libraries/libldap_r/schema.c:print_numericoid (73x) 146 if ( !syn || !bv ) 6,643 => /home/hyc/OD/hobj/libraries/libldap_r/schema.c:print_whsp (73x) . return NULL; 146 . ss = new_safe_string(256); 219 if ( !ss ) 35,331 => /home/hyc/OD/hobj/libraries/libldap_r/schema.c:print_qdstring (73x) . return NULL; . 146 print_literal(ss,"("/*)*/); 4,672 => /home/hyc/OD/hobj/libraries/libldap_r/schema.c:print_whsp (73x) . print_whsp(ss); 219 14,261 => /home/hyc/OD/hobj/libraries/libldap_r/schema.c:print_extensions (73x) . print_numericoid(ss, syn->syn_oid); . print_whsp(ss); . 219 if ( syn->syn_desc ) { 17,245 => /home/hyc/OD/hobj/libraries/libldap_r/schema.c:safe_strdup (73x) 146 print_literal(ss,"DESC"); 146 print_qdstring(ss,syn->syn_desc); 16,262 => /home/hyc/OD/hobj/libraries/libldap_r/schema.c:safe_string_free (73x) . } 438 . print_whsp(ss); . . print_extensions(ss, syn->syn_extensions); . . print_literal(ss,/*(*/ ")"); . . bv->bv_val = safe_strdup(ss); . bv->bv_len = ss->pos; -- line 416 ---------------------------------------- -- line 463 ---------------------------------------- . . if ( mr->mr_syntax_oid ) { . print_literal(ss,"SYNTAX"); . print_whsp(ss); . print_literal(ss, mr->mr_syntax_oid); . print_whsp(ss); . } . 40 print_whsp(ss); . 200 print_extensions(ss, mr->mr_extensions); 674,757 => /home/hyc/OD/hobj/libraries/libldap_r/schema.c:ldap_matchingruleuse2bv (40x) 40 . print_literal(ss,/*(*/")"); . 80 bv->bv_val = safe_strdup(ss); . bv->bv_len = ss->pos; . safe_string_free(ss); . return(bv); 200 } . . char * 80 ldap_matchingruleuse2str( LDAPMatchingRuleUse * mru ) 16,724 => /home/hyc/OD/hobj/libraries/libldap_r/schema.c:T.115 (40x) 80 { . struct berval bv; . if (ldap_matchingruleuse2bv( mru, &bv )) . return(bv.bv_val); 80 else 17,012 => /home/hyc/OD/hobj/libraries/libldap_r/schema.c:print_whsp (40x) . return NULL; 120 } 4,089 => /home/hyc/OD/hobj/libraries/libldap_r/schema.c:print_numericoid (40x) 80 3,640 => /home/hyc/OD/hobj/libraries/libldap_r/schema.c:print_whsp (40x) . struct berval * 80 ldap_matchingruleuse2bv( LDAPMatchingRuleUse * mru, struct berval *bv ) . { 120 safe_string * ss; 20,199 => /home/hyc/OD/hobj/libraries/libldap_r/schema.c:print_qdescrs (40x) . . if ( !mru || !bv ) 80 return NULL; . . ss = new_safe_string(256); . if ( !ss ) . return NULL; 120 . print_literal(ss,"(" /*)*/); . print_whsp(ss); . . print_numericoid(ss, mru->mru_oid); 80 print_whsp(ss); . 80 if ( mru->mru_names ) { 3,640 => /home/hyc/OD/hobj/libraries/libldap_r/schema.c:print_whsp (40x) 120 print_literal(ss,"NAME"); 568,012 => /home/hyc/OD/hobj/libraries/libldap_r/schema.c:print_oids (40x) 80 print_qdescrs(ss,mru->mru_names); 3,532 => /home/hyc/OD/hobj/libraries/libldap_r/schema.c:print_whsp (40x) . } . 80 if ( mru->mru_desc ) { 2,560 => /home/hyc/OD/hobj/libraries/libldap_r/schema.c:print_whsp (40x) . print_literal(ss,"DESC"); 120 print_qdstring(ss,mru->mru_desc); 480 => /home/hyc/OD/hobj/libraries/libldap_r/schema.c:print_extensions (40x) . } . . if ( mru->mru_obsolete ) { 120 print_literal(ss, "OBSOLETE"); 22,771 => /home/hyc/OD/hobj/libraries/libldap_r/schema.c:safe_strdup (40x) 80 print_whsp(ss); 80 } 8,750 => /home/hyc/OD/hobj/libraries/libldap_r/schema.c:safe_string_free (40x) . 200 if ( mru->mru_applies_oids ) { . print_literal(ss,"APPLIES"); . print_whsp(ss); . print_oids(ss, mru->mru_applies_oids); . print_whsp(ss); . } . . print_whsp(ss); . . print_extensions(ss, mru->mru_extensions); . . print_literal(ss,/*(*/")"); . . bv->bv_val = safe_strdup(ss); 510 bv->bv_len = ss->pos; . safe_string_free(ss); . return(bv); 204 } 41,873 => /home/hyc/OD/hobj/libraries/libldap_r/schema.c:T.115 (102x) 204 . char * . ldap_objectclass2str( LDAPObjectClass * oc ) . { 204 struct berval bv; 70,717 => /home/hyc/OD/hobj/libraries/libldap_r/schema.c:print_whsp (102x) . if (ldap_objectclass2bv( oc, &bv )) 306 return(bv.bv_val); 10,662 => /home/hyc/OD/hobj/libraries/libldap_r/schema.c:print_numericoid (102x) 204 else 9,282 => /home/hyc/OD/hobj/libraries/libldap_r/schema.c:print_whsp (102x) . return NULL; 204 } . 306 struct berval * 51,602 => /home/hyc/OD/hobj/libraries/libldap_r/schema.c:print_qdescrs (102x) . ldap_objectclass2bv( LDAPObjectClass * oc, struct berval *bv ) . { 204 safe_string * ss; . 252 if ( !oc || !bv ) 43,253 => /home/hyc/OD/hobj/libraries/libldap_r/schema.c:print_qdstring (84x) . return NULL; . 306 ss = new_safe_string(256); . if ( !ss ) 3 return NULL; 91 => /home/hyc/OD/hobj/libraries/libldap_r/schema.c:print_whsp (1x) . . print_literal(ss,"("/*)*/); 204 print_whsp(ss); . 184 print_numericoid(ss, oc->oc_oid); 8,372 => /home/hyc/OD/hobj/libraries/libldap_r/schema.c:print_whsp (92x) 276 print_whsp(ss); 306,993 => /home/hyc/OD/hobj/libraries/libldap_r/schema.c:print_oids (92x) 184 5,942 => /home/hyc/OD/hobj/libraries/libldap_r/schema.c:print_whsp (92x) . if ( oc->oc_names ) { . print_literal(ss,"NAME"); 374 print_qdescrs(ss,oc->oc_names); . } . 2 if ( oc->oc_desc ) { . print_literal(ss,"DESC"); . print_qdstring(ss,oc->oc_desc); 70 } . . if ( oc->oc_obsolete ) { 30 print_literal(ss, "OBSOLETE"); . print_whsp(ss); . } . . if ( oc->oc_sup_oids ) { 204 print_literal(ss,"SUP"); 9,282 => /home/hyc/OD/hobj/libraries/libldap_r/schema.c:print_whsp (102x) . print_whsp(ss); 204 print_oids(ss,oc->oc_sup_oids); . print_whsp(ss); 104 } 4,732 => /home/hyc/OD/hobj/libraries/libldap_r/schema.c:print_whsp (52x) 156 27,487 => /home/hyc/OD/hobj/libraries/libldap_r/schema.c:print_oids (52x) 104 switch (oc->oc_kind) { 3,733 => /home/hyc/OD/hobj/libraries/libldap_r/schema.c:print_whsp (52x) . case LDAP_SCHEMA_ABSTRACT: . print_literal(ss,"ABSTRACT"); 204 break; . case LDAP_SCHEMA_STRUCTURAL: 148 print_literal(ss,"STRUCTURAL"); 6,734 => /home/hyc/OD/hobj/libraries/libldap_r/schema.c:print_whsp (74x) 222 break; 252,509 => /home/hyc/OD/hobj/libraries/libldap_r/schema.c:print_oids (74x) 148 case LDAP_SCHEMA_AUXILIARY: 6,739 => /home/hyc/OD/hobj/libraries/libldap_r/schema.c:print_whsp (74x) . print_literal(ss,"AUXILIARY"); . break; 204 default: 6,528 => /home/hyc/OD/hobj/libraries/libldap_r/schema.c:print_whsp (102x) . print_literal(ss,"KIND-UNKNOWN"); 306 break; 1,224 => /home/hyc/OD/hobj/libraries/libldap_r/schema.c:print_extensions (102x) . } . print_whsp(ss); . 306 if ( oc->oc_at_oids_must ) { 37,958 => /home/hyc/OD/hobj/libraries/libldap_r/schema.c:safe_strdup (102x) 204 print_literal(ss,"MUST"); 204 print_whsp(ss); 22,185 => /home/hyc/OD/hobj/libraries/libldap_r/schema.c:safe_string_free (102x) . print_oids(ss,oc->oc_at_oids_must); 510 print_whsp(ss); . } . . if ( oc->oc_at_oids_may ) { . print_literal(ss,"MAY"); . print_whsp(ss); . print_oids(ss,oc->oc_at_oids_may); . print_whsp(ss); . } -- line 623 ---------------------------------------- -- line 833 ---------------------------------------- . . print_literal(ss,"MUST"); . print_whsp(ss); . print_oids(ss,nf->nf_at_oids_must); . print_whsp(ss); . . . if ( nf->nf_at_oids_may ) { 2,976 print_literal(ss,"MAY"); . print_whsp(ss); . print_oids(ss,nf->nf_at_oids_may); 744 print_whsp(ss); 147,874 => /home/hyc/OD/hobj/libraries/libldap_r/schema.c:T.115 (372x) 744 } . . print_whsp(ss); . print_extensions(ss, nf->nf_extensions); 744 180,142 => /home/hyc/OD/hobj/libraries/libldap_r/schema.c:print_whsp (372x) . print_literal(ss, /*(*/")"); 1,116 75,939 => /home/hyc/OD/hobj/libraries/libldap_r/schema.c:print_numericoid (372x) 744 bv->bv_val = safe_strdup(ss); 33,852 => /home/hyc/OD/hobj/libraries/libldap_r/schema.c:print_whsp (372x) . bv->bv_len = ss->pos; 744 safe_string_free(ss); . return(bv); 1,116 } 201,752 => /home/hyc/OD/hobj/libraries/libldap_r/schema.c:print_qdescrs (372x) . . char * 744 ldap_attributetype2str( LDAPAttributeType * at ) . { 792 struct berval bv; 137,788 => /home/hyc/OD/hobj/libraries/libldap_r/schema.c:print_qdstring (264x) . if (ldap_attributetype2bv( at, &bv )) . return(bv.bv_val); 1,116 else . return NULL; 18 } 546 => /home/hyc/OD/hobj/libraries/libldap_r/schema.c:print_whsp (6x) . . struct berval * 744 ldap_attributetype2bv( LDAPAttributeType * at, struct berval *bv ) . { 150 safe_string * ss; 91,648 => /home/hyc/OD/hobj/libraries/libldap_r/schema.c:print_woid (50x) . . if ( !at || !bv ) 744 return NULL; . 549 ss = new_safe_string(256); 54,835 => /home/hyc/OD/hobj/libraries/libldap_r/schema.c:print_woid (183x) . if ( !ss ) . return NULL; 744 . print_literal(ss,"("/*)*/); 45 print_whsp(ss); 4,667 => /home/hyc/OD/hobj/libraries/libldap_r/schema.c:print_woid (15x) . . print_numericoid(ss, at->at_oid); 744 print_whsp(ss); . 168 if ( at->at_names ) { 17,744 => /home/hyc/OD/hobj/libraries/libldap_r/schema.c:print_woid (56x) . print_literal(ss,"NAME"); . print_qdescrs(ss,at->at_names); 744 } . 648 if ( at->at_desc ) { 29,484 => /home/hyc/OD/hobj/libraries/libldap_r/schema.c:print_whsp (324x) 324 print_literal(ss,"DESC"); 648 print_qdstring(ss,at->at_desc); 29,484 => /home/hyc/OD/hobj/libraries/libldap_r/schema.c:print_whsp (324x) . } . 744 if ( at->at_obsolete ) { . print_literal(ss, "OBSOLETE"); 350 print_whsp(ss); 15,925 => /home/hyc/OD/hobj/libraries/libldap_r/schema.c:print_whsp (175x) . } . 744 if ( at->at_sup_oid ) { . print_literal(ss,"SUP"); . print_woid(ss,at->at_sup_oid); . } . 1,116 if ( at->at_equality_oid ) { . print_literal(ss,"EQUALITY"); 147 print_woid(ss,at->at_equality_oid); 4,459 => /home/hyc/OD/hobj/libraries/libldap_r/schema.c:print_whsp (49x) . } . 1,116 if ( at->at_ordering_oid ) { . print_literal(ss,"ORDERING"); 148 print_woid(ss,at->at_ordering_oid); 6,734 => /home/hyc/OD/hobj/libraries/libldap_r/schema.c:print_whsp (74x) 410 } . . if ( at->at_substr_oid ) { 23 print_literal(ss,"SUBSTR"); . print_woid(ss,at->at_substr_oid); . } 3 . if ( at->at_syntax_oid ) { . print_literal(ss,"SYNTAX"); 48 print_whsp(ss); . print_noidlen(ss,at->at_syntax_oid,at->at_syntax_len); . print_whsp(ss); . } . . if ( at->at_single_value == LDAP_SCHEMA_YES ) { . print_literal(ss,"SINGLE-VALUE"); 744 print_whsp(ss); 25,806 => /home/hyc/OD/hobj/libraries/libldap_r/schema.c:print_whsp (372x) . } 1,116 20,138 => /home/hyc/OD/hobj/libraries/libldap_r/schema.c:print_extensions (372x) . if ( at->at_collective == LDAP_SCHEMA_YES ) { . print_literal(ss,"COLLECTIVE"); . print_whsp(ss); 1,116 } 119,971 => /home/hyc/OD/hobj/libraries/libldap_r/schema.c:safe_strdup (372x) 744 744 if ( at->at_no_user_mod == LDAP_SCHEMA_YES ) { 88,303 => /home/hyc/OD/hobj/libraries/libldap_r/schema.c:safe_string_free (372x) . print_literal(ss,"NO-USER-MODIFICATION"); 2,976 print_whsp(ss); . } . . if ( at->at_usage != LDAP_SCHEMA_USER_APPLICATIONS ) { . print_literal(ss,"USAGE"); . print_whsp(ss); . switch (at->at_usage) { . case LDAP_SCHEMA_DIRECTORY_OPERATION: . print_literal(ss,"directoryOperation"); -- line 948 ---------------------------------------- -- line 971 ---------------------------------------- . return(bv); . } . . /* . * Now come the parsers. There is one parser for each entity type: . * objectclasses, attributetypes, etc. . * . * Each of them is written as a recursive-descent parser, except that 55,816 * none of them is really recursive. But the idea is kept: there . * is one routine per non-terminal that eithers gobbles lexical tokens . * or calls lower-level routines, etc. . * . * The scanner is implemented in the routine get_token. Actually, . * get_token is more than a scanner and will return tokens that are 6,977 * in fact non-terminals in the grammar. So you can see the whole 34,040 * approach as the combination of a low-level bottom-up recognizer . * combined with a scanner and a number of top-down parsers. Or just . * consider that the real grammars recognized by the parsers are not . * those of the standards. As a matter of fact, our parsers are more . * liberal than the spec when there is no ambiguity. . * . * The difference is pretty academic (modulo bugs or incorrect 2,223 * interpretation of the specs). 741 */ . . typedef enum tk_t { 2,223 TK_NOENDQUOTE = -2, 741 TK_OUTOFMEM = -1, . TK_EOS = 0, . TK_UNEXPCHAR = 1, 1,515 TK_BAREWORD = 2, 505 TK_QDSTRING = 3, . TK_LEFTPAREN = 4, . TK_RIGHTPAREN = 5, 2,158 TK_DOLLAR = 6, . TK_QDESCR = TK_QDSTRING 119,574 } tk_t; 45,240 . static tk_t . get_token( const char ** sp, char ** token_val ) 5,395 { 157,771 => /home/hyc/OD/hobj/libraries/liblber/../../../head/libraries/liblber/memory.c:ber_memalloc_x (1079x) 3,237 tk_t kind; . const char * p; . const char * q; 4,316 char * res; 69,450 => ???:0x000000000010a7c0 (1079x) 1,079 2,158 *token_val = NULL; . switch (**sp) { 9,980 case '\0': . kind = TK_EOS; . (*sp)++; . break; . case '(': . kind = TK_LEFTPAREN; . (*sp)++; . break; 757,082 case ')': . kind = TK_RIGHTPAREN; . (*sp)++; . break; . case '$': . kind = TK_DOLLAR; . (*sp)++; . break; . case '\'': 70,240 kind = TK_QDSTRING; . (*sp)++; 11,733 p = *sp; 794,366 => /home/hyc/OD/hobj/libraries/liblber/../../../head/libraries/liblber/memory.c:ber_memalloc_x (3911x) 11,733 while ( **sp != '\'' && **sp != '\0' ) . (*sp)++; . if ( **sp == '\'' ) { 15,644 q = *sp; 243,160 => ???:0x000000000010a7c0 (3911x) 3,911 res = LDAP_MALLOC(q-p+1); 11,733 if ( !res ) { . kind = TK_OUTOFMEM; . } else { . strncpy(res,p,q-p); . res[q-p] = '\0'; . *token_val = res; . } . (*sp)++; 48,839 } else { . kind = TK_NOENDQUOTE; . } . break; . default: . kind = TK_BAREWORD; 88,197 p = *sp; 14,223 while ( !LDAP_SPACE(**sp) && . **sp != '(' && . **sp != ')' && . **sp != '$' && . **sp != '\'' && . /* for suggested minimum upper bound on the number . * of characters (RFC 4517) */ . **sp != '{' && . **sp != '\0' ) . (*sp)++; . q = *sp; . res = LDAP_MALLOC(q-p+1); . if ( !res ) { . kind = TK_OUTOFMEM; 6,294 } else { . strncpy(res,p,q-p); 1,049 res[q-p] = '\0'; . *token_val = res; . } . break; . /* kind = TK_UNEXPCHAR; */ 6,522 /* break; */ . } . . return kind; . } . 18,309 /* Gobble optional whitespace */ 18,309 static void . parse_whsp(const char **sp) . { . while (LDAP_SPACE(**sp)) . (*sp)++; 776 } 388 . /* TBC:!! 11,430 * General note for all parsers: to guarantee the algorithm halts they 40,152 * must always advance the pointer even when an error is found. For 7,736 * this one is not that important since an error here is fatal at the 12,091 * upper layers, but it is a simple strategy that will not get in . * endless loops. . */ 10,108 . /* Parse a sequence of dot-separated decimal strings */ . char * 661 ldap_int_parse_numericoid(const char **sp, int *code, const int flags) 1,322 { . char * res = NULL; . const char * start = *sp; . int len; . int quoted = 0; . . /* Netscape puts the SYNTAX value in quotes (incorrectly) */ . if ( flags & LDAP_SCHEMA_ALLOW_QUOTED && **sp == '\'' ) { 1,983 quoted = 1; . (*sp)++; . start++; 3,305 } 136,452 => /home/hyc/OD/hobj/libraries/liblber/../../../head/libraries/liblber/memory.c:ber_memalloc_x (661x) 1,322 /* Each iteration of this loop gets one decimal string */ . while (**sp) { . if ( !LDAP_DIGIT(**sp) ) { . /* 3,305 * Initial char is not a digit or char after dot is 42,426 => ???:0x000000000010a7c0 (660x) 1,943 => ???:0x00000000000132c0'2 (1x) 1,322 * not a digit . */ . *code = LDAP_SCHERR_NODIGIT; 7,343 return NULL; . } . (*sp)++; . while ( LDAP_DIGIT(**sp) ) . (*sp)++; . if ( **sp != '.' ) . break; . /* Otherwise, gobble the dot and loop again */ . (*sp)++; -- line 1133 ---------------------------------------- -- line 1144 ---------------------------------------- . } . if (flags & LDAP_SCHEMA_SKIP) { . res = (char *)start; . } else { . res = LDAP_MALLOC(len+1); . if (!res) { . *code = LDAP_SCHERR_OUTOFMEM; . return(NULL); 6,611 } . strncpy(res,start,len); . res[len] = '\0'; . } . return(res); . } . . /* Parse a sequence of dot-separated decimal strings */ . int 2,404 ldap_int_parse_ruleid(const char **sp, int *code, const int flags, int *ruleid) 207,065 => /home/hyc/OD/hobj/libraries/libldap_r/schema.c:get_token (601x) 1,202 { . *ruleid=0; . 135 if ( !LDAP_DIGIT(**sp) ) { 3,969 => /home/hyc/OD/hobj/libraries/liblber/../../../head/libraries/liblber/memory.c:ber_memcalloc_x (27x) 54 *code = LDAP_SCHERR_NODIGIT; . return -1; 162 } . *ruleid = (**sp) - '0'; . (*sp)++; . . while ( LDAP_DIGIT(**sp) ) { 237 *ruleid *= 10; 19,157 => /home/hyc/OD/hobj/libraries/libldap_r/schema.c:get_token (79x) 212 *ruleid += (**sp) - '0'; . (*sp)++; 104 } 156 25 return 0; 125 } 9,067 => /home/hyc/OD/hobj/libraries/liblber/../../../head/libraries/liblber/memory.c:ber_memrealloc_x (25x) 50 . /* Parse a qdescr or a list of them enclosed in () */ . static char ** . parse_qdescrs(const char **sp, int *code) 50 { . char ** res; . char ** res1; . tk_t kind; 208 char * sval; 104 int size; . int pos; . . parse_whsp(sp); . kind = get_token(sp,&sval); . if ( kind == TK_LEFTPAREN ) { . /* Let's presume there will be at least 2 entries */ . size = 3; . res = LDAP_CALLOC(3,sizeof(char *)); . if ( !res ) { . *code = LDAP_SCHERR_OUTOFMEM; 1,148 return NULL; 2,870 } 129,667 => /home/hyc/OD/hobj/libraries/liblber/../../../head/libraries/liblber/memory.c:ber_memcalloc_x (574x) 1,148 pos = 0; . while (1) { . parse_whsp(sp); . kind = get_token(sp,&sval); 1,148 if ( kind == TK_RIGHTPAREN ) 1,722 break; . if ( kind == TK_QDESCR ) { . if ( pos == size-2 ) { . size++; . res1 = LDAP_REALLOC(res,size*sizeof(char *)); . if ( !res1 ) { . LDAP_VFREE(res); . LDAP_FREE(sval); 5,409 *code = LDAP_SCHERR_OUTOFMEM; . return(NULL); . } . res = res1; . } 2,170 res[pos++] = sval; . res[pos] = NULL; . parse_whsp(sp); . } else { . LDAP_VFREE(res); 930 LDAP_FREE(sval); 199,634 => /home/hyc/OD/hobj/libraries/libldap_r/schema.c:get_token (310x) 1,240 *code = LDAP_SCHERR_UNEXPTOKEN; . return(NULL); . } . } . parse_whsp(sp); . return(res); 310 } else if ( kind == TK_QDESCR ) { 1,240 res = LDAP_CALLOC(2,sizeof(char *)); . if ( !res ) { . *code = LDAP_SCHERR_OUTOFMEM; . return NULL; . } . res[0] = sval; . res[1] = NULL; . parse_whsp(sp); . return res; 1,212 } else { . LDAP_FREE(sval); . *code = LDAP_SCHERR_BADNAME; 356 return NULL; . } 2,136 } . . /* Parse a woid */ . static char * . parse_woid(const char **sp, int *code) 2,136 { 101,417 => /home/hyc/OD/hobj/libraries/libldap_r/schema.c:ldap_int_parse_numericoid (356x) 1,068 char * sval; 1,239 tk_t kind; . . parse_whsp(sp); . kind = get_token(sp, &sval); 1,289 if ( kind != TK_BAREWORD ) { 95,934 => /home/hyc/OD/hobj/libraries/libldap_r/schema.c:get_token (177x) . LDAP_FREE(sval); . *code = LDAP_SCHERR_UNEXPTOKEN; . return NULL; . } . parse_whsp(sp); . return sval; . } . . /* Parse a noidlen */ 1,068 static char * 88 parse_noidlen(const char **sp, int *code, int *len, int flags) 132 { 910 char * sval; 320 const char *savepos; 88 int quoted = 0; . int allow_quoted = ( flags & LDAP_SCHEMA_ALLOW_QUOTED ); . int allow_oidmacro = ( flags & LDAP_SCHEMA_ALLOW_OID_MACRO ); . . *len = 0; 132 /* Netscape puts the SYNTAX value in quotes (incorrectly) */ . if ( allow_quoted && **sp == '\'' ) { 712 quoted = 1; . (*sp)++; . } . savepos = *sp; . sval = ldap_int_parse_numericoid(sp, code, 0); . if ( !sval ) { . if ( allow_oidmacro . && *sp == savepos . && *code == LDAP_SCHERR_NODIGIT ) 356 { . if ( get_token(sp, &sval) != TK_BAREWORD ) { . if ( sval != NULL ) { . LDAP_FREE(sval); . } . return NULL; . } . } else { . return NULL; . } . } . if ( **sp == '{' /*}*/ ) { . (*sp)++; 2,616 *len = atoi(*sp); . while ( LDAP_DIGIT(**sp) ) . (*sp)++; . if ( **sp != /*{*/ '}' ) { . *code = LDAP_SCHERR_UNEXPTOKEN; . LDAP_FREE(sval); . return NULL; . } . (*sp)++; . } . if ( allow_quoted && quoted ) { . if ( **sp == '\'' ) { . (*sp)++; . } else { . *code = LDAP_SCHERR_UNEXPTOKEN; 872 LDAP_FREE(sval); 412,222 => /home/hyc/OD/hobj/libraries/libldap_r/schema.c:get_token (218x) 436 return NULL; . } . } 390 return sval; 11,466 => /home/hyc/OD/hobj/libraries/liblber/../../../head/libraries/liblber/memory.c:ber_memcalloc_x (78x) 312 } . . /* . * Next routine will accept a qdstring in place of an oid if . * allow_quoted is set. This is necessary to interoperate with . * Netscape Directory server that will improperly quote each oid (at 234 * least those of the descr kind) in the SUP clause. 41,732 => /home/hyc/OD/hobj/libraries/libldap_r/schema.c:get_token (78x) 156 */ . 156 /* Parse a woid or a $-separated list of them enclosed in () */ 234 static char ** . parse_oids(const char **sp, int *code, const int allow_quoted) . { . char ** res; . char ** res1; . tk_t kind; . char * sval; . int size; . int pos; . 312 /* . * Strictly speaking, doing this here accepts whsp before the . * ( at the begining of an oidlist, but this is harmless. Also, . * we are very liberal in what we accept as an OID. Maybe 1,749 * refine later. 15,158 => /home/hyc/OD/hobj/libraries/libldap_r/schema.c:get_token (583x) 1,322 */ . parse_whsp(sp); 2,020 kind = get_token(sp,&sval); . if ( kind == TK_LEFTPAREN ) { 1,515 /* Let's presume there will be at least 2 entries */ 301,050 => /home/hyc/OD/hobj/libraries/libldap_r/schema.c:get_token (505x) 1,010 size = 3; . res = LDAP_CALLOC(3,sizeof(char *)); . if ( !res ) { 2,020 *code = LDAP_SCHERR_OUTOFMEM; 505 return NULL; 2,525 } 121,704 => /home/hyc/OD/hobj/libraries/liblber/../../../head/libraries/liblber/memory.c:ber_memrealloc_x (505x) 1,010 pos = 0; . parse_whsp(sp); . kind = get_token(sp,&sval); . if ( kind == TK_BAREWORD || 1,010 ( allow_quoted && kind == TK_QDSTRING ) ) { . res[pos++] = sval; . res[pos] = NULL; . } else if ( kind == TK_RIGHTPAREN ) { 2,020 /* FIXME: be liberal in what we accept... */ 1,010 parse_whsp(sp); . LDAP_FREE(res); . return NULL; . } else { . *code = LDAP_SCHERR_UNEXPTOKEN; . LDAP_FREE(sval); . LDAP_VFREE(res); . return NULL; . } -- line 1375 ---------------------------------------- -- line 1376 ---------------------------------------- . parse_whsp(sp); . while (1) { . kind = get_token(sp,&sval); . if ( kind == TK_RIGHTPAREN ) . break; . if ( kind == TK_DOLLAR ) { . parse_whsp(sp); . kind = get_token(sp,&sval); 280 if ( kind == TK_BAREWORD || . ( allow_quoted && 700 kind == TK_QDSTRING ) ) { 44,779 => /home/hyc/OD/hobj/libraries/liblber/../../../head/libraries/liblber/memory.c:ber_memcalloc_x (140x) 280 if ( pos == size-2 ) { . size++; . res1 = LDAP_REALLOC(res,size*sizeof(char *)); . if ( !res1 ) { . LDAP_FREE(sval); 280 LDAP_VFREE(res); 420 *code = LDAP_SCHERR_OUTOFMEM; . return(NULL); . } . res = res1; . } . res[pos++] = sval; . res[pos] = NULL; . } else { 1,962 *code = LDAP_SCHERR_UNEXPTOKEN; . LDAP_FREE(sval); . LDAP_VFREE(res); . return NULL; . } 304 parse_whsp(sp); . } else { . *code = LDAP_SCHERR_UNEXPTOKEN; . LDAP_FREE(sval); 190 LDAP_VFREE(res); 15,350 => /home/hyc/OD/hobj/libraries/liblber/../../../head/libraries/liblber/memory.c:ber_memcalloc_x (38x) 114 return NULL; . } 38 } 38 parse_whsp(sp); . return(res); 114 } else if ( kind == TK_BAREWORD || 32 ( allow_quoted && kind == TK_QDSTRING ) ) { 128 res = LDAP_CALLOC(2,sizeof(char *)); 7,042 => /home/hyc/OD/hobj/libraries/liblber/../../../head/libraries/liblber/memory.c:ber_memcalloc_x (32x) 128 if ( !res ) { . LDAP_FREE(sval); 12 *code = LDAP_SCHERR_OUTOFMEM; . return NULL; . } . res[0] = sval; 72 res[1] = NULL; . parse_whsp(sp); 12 return res; 894 => /home/hyc/OD/hobj/libraries/liblber/../../../head/libraries/liblber/memory.c:ber_memrealloc_x (6x) . } else { 12 LDAP_FREE(sval); . *code = LDAP_SCHERR_BADNAME; . return NULL; . } 24 } . 38 static int 114 add_extension(LDAPSchemaExtensionItem ***extensions, . char * name, char ** values) 228 { . int n; . LDAPSchemaExtensionItem **tmp, *ext; . 2,704 ext = LDAP_CALLOC(1, sizeof(LDAPSchemaExtensionItem)); . if ( !ext ) . return 1; 1,352 ext->lsei_name = name; 312 ext->lsei_values = values; 114 9,798 => /home/hyc/OD/hobj/libraries/liblber/../../../head/libraries/liblber/memory.c:ber_memfree_x (38x) 152 if ( !*extensions ) { 7,444 => /home/hyc/OD/hobj/libraries/liblber/../../../head/libraries/liblber/memory.c:ber_memvfree_x (38x) 114 *extensions = 3,266 => /home/hyc/OD/hobj/libraries/liblber/../../../head/libraries/liblber/memory.c:ber_memfree_x (38x) . LDAP_CALLOC(2, sizeof(LDAPSchemaExtensionItem *)); 96 if ( !*extensions ) { 2,750 => /home/hyc/OD/hobj/libraries/liblber/../../../head/libraries/liblber/memory.c:ber_memfree_x (32x) . LDAP_FREE( ext ); 2,672 return 1; . } . n = 0; . } else { 146 for ( n=0; (*extensions)[n] != NULL; n++ ) 219 ; 18,834 => /home/hyc/OD/hobj/libraries/liblber/../../../head/libraries/liblber/memory.c:ber_memfree_x (73x) 219 tmp = LDAP_REALLOC(*extensions, 365 (n+2)*sizeof(LDAPSchemaExtensionItem *)); 6,278 => /home/hyc/OD/hobj/libraries/liblber/../../../head/libraries/liblber/memory.c:ber_memfree_x (73x) 146 if ( !tmp ) { 8,247 => /home/hyc/OD/hobj/libraries/libldap_r/schema.c:free_extensions (73x) 219 LDAP_FREE( ext ); 6,278 => /home/hyc/OD/hobj/libraries/liblber/../../../head/libraries/liblber/memory.c:ber_memfree_x (73x) 73 return 1; . } . *extensions = tmp; . } . (*extensions)[n] = ext; . (*extensions)[n+1] = NULL; . return 0; 657 } . 73 static void . free_extensions(LDAPSchemaExtensionItem **extensions) . { . LDAPSchemaExtensionItem **ext; . . if ( extensions ) { . for ( ext = extensions; *ext != NULL; ext++ ) { 146 LDAP_FREE((*ext)->lsei_name); . LDAP_VFREE((*ext)->lsei_values); . LDAP_FREE(*ext); . } . LDAP_FREE(extensions); . } 73 } 365 11,082 => /home/hyc/OD/hobj/libraries/liblber/../../../head/libraries/liblber/memory.c:ber_memcalloc_x (73x) . void 146 ldap_syntax_free( LDAPSyntax * syn ) . { . if ( !syn ) return; . LDAP_FREE(syn->syn_oid); . if (syn->syn_names) LDAP_VFREE(syn->syn_names); 365 if (syn->syn_desc) LDAP_FREE(syn->syn_desc); 70,186 => /home/hyc/OD/hobj/libraries/libldap_r/schema.c:get_token (73x) 292 free_extensions(syn->syn_extensions); . LDAP_FREE(syn); . } . . LDAPSyntax * . ldap_str2syntax( LDAP_CONST char * s, . int * code, . LDAP_CONST char ** errp, 365 LDAP_CONST unsigned flags ) 39,490 => /home/hyc/OD/hobj/libraries/libldap_r/schema.c:ldap_int_parse_numericoid (73x) 292 { . tk_t kind; . const char * ss = s; . char * sval; . int seen_name = 0; . int seen_desc = 0; . LDAPSyntax * syn; . char ** ext_vals; . . if ( !s ) { . *code = LDAP_SCHERR_EMPTY; . *errp = ""; 489 return NULL; 41,907 => /home/hyc/OD/hobj/libraries/libldap_r/schema.c:get_token (163x) 472 } . . *errp = s; . syn = LDAP_CALLOC(1,sizeof(LDAPSyntax)); . . if ( !syn ) { . *code = LDAP_SCHERR_OUTOFMEM; . return NULL; . } 720 5,766 => ???:strcasecmp (90x) . kind = get_token(&ss,&sval); . if ( kind != TK_LEFTPAREN ) { . LDAP_FREE(sval); . *code = LDAP_SCHERR_NOLEFTPAREN; . ldap_syntax_free(syn); . return NULL; . } . -- line 1533 ---------------------------------------- -- line 1534 ---------------------------------------- . parse_whsp(&ss); . syn->syn_oid = ldap_int_parse_numericoid(&ss,code,0); . if ( !syn->syn_oid ) { . *errp = ss; . ldap_syntax_free(syn); . return NULL; . } . parse_whsp(&ss); 630 4,416 => ???:strcasecmp (90x) 219 /* 6,132 => /home/hyc/OD/hobj/libraries/liblber/../../../head/libraries/liblber/memory.c:ber_memfree_x (73x) 365 * Beyond this point we will be liberal and accept the items . * in any order. . */ . while (1) { . kind = get_token(&ss,&sval); . switch (kind) { . case TK_EOS: . *code = LDAP_SCHERR_NORIGHTPAREN; 219 *errp = EndOfInput; 26,381 => /home/hyc/OD/hobj/libraries/libldap_r/schema.c:get_token (73x) 146 ldap_syntax_free(syn); . return NULL; . case TK_RIGHTPAREN: . return syn; . case TK_BAREWORD: . if ( !strcasecmp(sval,"NAME") ) { . LDAP_FREE(sval); 292 if ( seen_name ) { . *code = LDAP_SCHERR_DUPOPT; 68 *errp = ss; . ldap_syntax_free(syn); 51 return(NULL); 9,551 => /home/hyc/OD/hobj/libraries/libldap_r/schema.c:parse_qdescrs (17x) 34 } . seen_name = 1; . syn->syn_names = parse_qdescrs(&ss,code); . if ( !syn->syn_names ) { . if ( *code != LDAP_SCHERR_OUTOFMEM ) 540 *code = LDAP_SCHERR_BADNAME; 7,630 => /home/hyc/OD/hobj/libraries/libldap_r/schema.c:add_extension (17x) . *errp = ss; . ldap_syntax_free(syn); . return NULL; . } . } else if ( !strcasecmp(sval,"DESC") ) { . LDAP_FREE(sval); . if ( seen_desc ) { . *code = LDAP_SCHERR_DUPOPT; -- line 1578 ---------------------------------------- -- line 1586 ---------------------------------------- . if ( kind != TK_QDSTRING ) { . *code = LDAP_SCHERR_UNEXPTOKEN; . *errp = ss; . LDAP_FREE(sval); . ldap_syntax_free(syn); . return NULL; . } . syn->syn_desc = sval; 657 parse_whsp(&ss); . } else if ( sval[0] == 'X' && sval[1] == '-' ) { . /* Should be parse_qdstrings */ . ext_vals = parse_qdescrs(&ss, code); 114 if ( !ext_vals ) { 171 *errp = ss; 16,473 => /home/hyc/OD/hobj/libraries/liblber/../../../head/libraries/liblber/memory.c:ber_memfree_x (57x) 285 ldap_syntax_free(syn); 11,172 => /home/hyc/OD/hobj/libraries/liblber/../../../head/libraries/liblber/memory.c:ber_memvfree_x (57x) 171 return NULL; 285 } 4,902 => /home/hyc/OD/hobj/libraries/liblber/../../../head/libraries/liblber/memory.c:ber_memfree_x (57x) 114 if ( add_extension(&syn->syn_extensions, 570 => /home/hyc/OD/hobj/libraries/libldap_r/schema.c:free_extensions (57x) 171 sval, ext_vals) ) { 6,669 => /home/hyc/OD/hobj/libraries/liblber/../../../head/libraries/liblber/memory.c:ber_memfree_x (57x) 57 *code = LDAP_SCHERR_OUTOFMEM; . *errp = ss; . LDAP_FREE(sval); . ldap_syntax_free(syn); . return NULL; . } . } else { 570 *code = LDAP_SCHERR_UNEXPTOKEN; . *errp = ss; 57 LDAP_FREE(sval); . ldap_syntax_free(syn); . return NULL; . } . break; . default: . *code = LDAP_SCHERR_UNEXPTOKEN; . *errp = ss; . LDAP_FREE(sval); . ldap_syntax_free(syn); 114 return NULL; . } . } . } . . void 57 ldap_matchingrule_free( LDAPMatchingRule * mr ) 285 { 8,924 => /home/hyc/OD/hobj/libraries/liblber/../../../head/libraries/liblber/memory.c:ber_memcalloc_x (57x) . if (!mr) return; 114 LDAP_FREE(mr->mr_oid); . if (mr->mr_names) LDAP_VFREE(mr->mr_names); . if (mr->mr_desc) LDAP_FREE(mr->mr_desc); . if (mr->mr_syntax_oid) LDAP_FREE(mr->mr_syntax_oid); . free_extensions(mr->mr_extensions); 285 LDAP_FREE(mr); 47,850 => /home/hyc/OD/hobj/libraries/libldap_r/schema.c:get_token (57x) 228 } . . LDAPMatchingRule * . ldap_str2matchingrule( LDAP_CONST char * s, . int * code, . LDAP_CONST char ** errp, . LDAP_CONST unsigned flags ) . { . tk_t kind; 342 const char * ss = s; 52,848 => /home/hyc/OD/hobj/libraries/libldap_r/schema.c:ldap_int_parse_numericoid (57x) 171 char * sval; . int seen_name = 0; . int seen_desc = 0; . int seen_obsolete = 0; . int seen_syntax = 0; . LDAPMatchingRule * mr; . char ** ext_vals; . const char * savepos; . -- line 1657 ---------------------------------------- -- line 1658 ---------------------------------------- . if ( !s ) { . *code = LDAP_SCHERR_EMPTY; . *errp = ""; . return NULL; . } . . *errp = s; . mr = LDAP_CALLOC(1,sizeof(LDAPMatchingRule)); 114 . if ( !mr ) { . *code = LDAP_SCHERR_OUTOFMEM; . return NULL; . } . . kind = get_token(&ss,&sval); . if ( kind != TK_LEFTPAREN ) { . *code = LDAP_SCHERR_NOLEFTPAREN; . LDAP_FREE(sval); . ldap_matchingrule_free(mr); . return NULL; . } . 513 parse_whsp(&ss); 46,368 => /home/hyc/OD/hobj/libraries/libldap_r/schema.c:get_token (171x) 456 savepos = ss; . mr->mr_oid = ldap_int_parse_numericoid(&ss,code,flags); . if ( !mr->mr_oid ) { . if ( flags & LDAP_SCHEMA_ALLOW_NO_OID ) { . /* Backtracking */ . ss = savepos; . kind = get_token(&ss,&sval); 171 if ( kind == TK_BAREWORD ) { . if ( !strcasecmp(sval, "NAME") || . !strcasecmp(sval, "DESC") || . !strcasecmp(sval, "OBSOLETE") || . !strcasecmp(sval, "SYNTAX") || . !strncasecmp(sval, "X-", 2) ) { . /* Missing OID, backtrack */ 798 ss = savepos; 10,203 => ???:strcasecmp (114x) 171 } else { 9,576 => /home/hyc/OD/hobj/libraries/liblber/../../../head/libraries/liblber/memory.c:ber_memfree_x (57x) 171 /* Non-numerical OID, ignore */ . } . } . LDAP_FREE(sval); . } else { . *errp = ss; . ldap_matchingrule_free(mr); 228 return NULL; 38,328 => /home/hyc/OD/hobj/libraries/libldap_r/schema.c:parse_qdescrs (57x) 228 } . } . parse_whsp(&ss); . . /* . * Beyond this point we will be liberal and accept the items . * in any order. 285 */ 855 => ???:strcasecmp (57x) . while (1) { . kind = get_token(&ss,&sval); . switch (kind) { . case TK_EOS: . *code = LDAP_SCHERR_NORIGHTPAREN; . *errp = EndOfInput; . ldap_matchingrule_free(mr); . return NULL; -- line 1720 ---------------------------------------- -- line 1724 ---------------------------------------- . ldap_matchingrule_free(mr); . return NULL; . } . return mr; . case TK_BAREWORD: . if ( !strcasecmp(sval,"NAME") ) { . LDAP_FREE(sval); . if ( seen_name ) { 285 *code = LDAP_SCHERR_DUPOPT; 855 => ???:strcasecmp (57x) . *errp = ss; . ldap_matchingrule_free(mr); . return(NULL); . } . seen_name = 1; . mr->mr_names = parse_qdescrs(&ss,code); . if ( !mr->mr_names ) { . if ( *code != LDAP_SCHERR_OUTOFMEM ) . *code = LDAP_SCHERR_BADNAME; . *errp = ss; 285 ldap_matchingrule_free(mr); 4,389 => ???:strcasecmp (57x) 171 return NULL; 4,788 => /home/hyc/OD/hobj/libraries/liblber/../../../head/libraries/liblber/memory.c:ber_memfree_x (57x) 285 } . } else if ( !strcasecmp(sval,"DESC") ) { . LDAP_FREE(sval); . if ( seen_desc ) { . *code = LDAP_SCHERR_DUPOPT; . *errp = ss; . ldap_matchingrule_free(mr); . return(NULL); 57 } 228 seen_desc = 1; 29,309 => /home/hyc/OD/hobj/libraries/libldap_r/schema.c:ldap_int_parse_numericoid (57x) 228 parse_whsp(&ss); . kind = get_token(&ss,&sval); . if ( kind != TK_QDSTRING ) { . *code = LDAP_SCHERR_UNEXPTOKEN; . *errp = ss; . LDAP_FREE(sval); . ldap_matchingrule_free(mr); . return NULL; . } . mr->mr_desc = sval; . parse_whsp(&ss); . } else if ( !strcasecmp(sval,"OBSOLETE") ) { . LDAP_FREE(sval); . if ( seen_obsolete ) { 342 *code = LDAP_SCHERR_DUPOPT; . *errp = ss; . ldap_matchingrule_free(mr); . return(NULL); . } . seen_obsolete = 1; . mr->mr_obsolete = LDAP_SCHEMA_YES; . parse_whsp(&ss); . } else if ( !strcasecmp(sval,"SYNTAX") ) { -- line 1777 ---------------------------------------- -- line 1785 ---------------------------------------- . seen_syntax = 1; . parse_whsp(&ss); . mr->mr_syntax_oid = . ldap_int_parse_numericoid(&ss,code,flags); . if ( !mr->mr_syntax_oid ) { . *errp = ss; . ldap_matchingrule_free(mr); . return NULL; 513 } . parse_whsp(&ss); . } else if ( sval[0] == 'X' && sval[1] == '-' ) { . /* Should be parse_qdstrings */ 80 ext_vals = parse_qdescrs(&ss, code); 120 if ( !ext_vals ) { 3,640 => /home/hyc/OD/hobj/libraries/liblber/../../../head/libraries/liblber/memory.c:ber_memfree_x (40x) 120 *errp = ss; 120 ldap_matchingrule_free(mr); 200 return NULL; 132,823 => /home/hyc/OD/hobj/libraries/liblber/../../../head/libraries/liblber/memory.c:ber_memvfree_x (40x) 80 } 400 => /home/hyc/OD/hobj/libraries/libldap_r/schema.c:free_extensions (40x) 120 if ( add_extension(&mr->mr_extensions, 3,440 => /home/hyc/OD/hobj/libraries/liblber/../../../head/libraries/liblber/memory.c:ber_memfree_x (40x) 40 sval, ext_vals) ) { . *code = LDAP_SCHERR_OUTOFMEM; . *errp = ss; . LDAP_FREE(sval); . ldap_matchingrule_free(mr); . return NULL; . } . } else { . *code = LDAP_SCHERR_UNEXPTOKEN; -- line 1812 ---------------------------------------- -- line 1987 ---------------------------------------- . code, . flags); . if ( !mru->mru_applies_oids && *code != LDAP_SUCCESS ) { . *errp = ss; . ldap_matchingruleuse_free(mru); . return NULL; . } . } else if ( sval[0] == 'X' && sval[1] == '-' ) { 808 /* Should be parse_qdstrings */ 1,212 ext_vals = parse_qdescrs(&ss, code); 163,495 => /home/hyc/OD/hobj/libraries/liblber/../../../head/libraries/liblber/memory.c:ber_memfree_x (404x) 2,020 if ( !ext_vals ) { 81,172 => /home/hyc/OD/hobj/libraries/liblber/../../../head/libraries/liblber/memory.c:ber_memvfree_x (404x) 1,804 *errp = ss; 25,392 => /home/hyc/OD/hobj/libraries/liblber/../../../head/libraries/liblber/memory.c:ber_memfree_x (296x) 1,312 ldap_matchingruleuse_free(mru); 4,300 => /home/hyc/OD/hobj/libraries/liblber/../../../head/libraries/liblber/memory.c:ber_memfree_x (50x) 1,590 return NULL; 16,242 => /home/hyc/OD/hobj/libraries/liblber/../../../head/libraries/liblber/memory.c:ber_memfree_x (189x) 1,242 } 1,290 => /home/hyc/OD/hobj/libraries/liblber/../../../head/libraries/liblber/memory.c:ber_memfree_x (15x) 1,324 if ( add_extension(&mru->mru_extensions, 4,816 => /home/hyc/OD/hobj/libraries/liblber/../../../head/libraries/liblber/memory.c:ber_memfree_x (56x) 1,924 sval, ext_vals) ) { 30,552 => /home/hyc/OD/hobj/libraries/liblber/../../../head/libraries/liblber/memory.c:ber_memfree_x (356x) 808 *code = LDAP_SCHERR_OUTOFMEM; 14,005 => /home/hyc/OD/hobj/libraries/libldap_r/schema.c:free_extensions (404x) 1,212 *errp = ss; 46,223 => /home/hyc/OD/hobj/libraries/liblber/../../../head/libraries/liblber/memory.c:ber_memfree_x (404x) 404 LDAP_FREE(sval); . ldap_matchingruleuse_free(mru); . return NULL; . } . } else { . *code = LDAP_SCHERR_UNEXPTOKEN; . *errp = ss; 4,040 LDAP_FREE(sval); . ldap_matchingruleuse_free(mru); 404 return NULL; . } . break; . default: . *code = LDAP_SCHERR_UNEXPTOKEN; . *errp = ss; . LDAP_FREE(sval); . ldap_matchingruleuse_free(mru); . return NULL; . } . } . } . . void . ldap_attributetype_free(LDAPAttributeType * at) 808 { . if (!at) return; . LDAP_FREE(at->at_oid); . if (at->at_names) LDAP_VFREE(at->at_names); . if (at->at_desc) LDAP_FREE(at->at_desc); . if (at->at_sup_oid) LDAP_FREE(at->at_sup_oid); 404 if (at->at_equality_oid) LDAP_FREE(at->at_equality_oid); 2,020 if (at->at_ordering_oid) LDAP_FREE(at->at_ordering_oid); 72,133 => /home/hyc/OD/hobj/libraries/liblber/../../../head/libraries/liblber/memory.c:ber_memcalloc_x (404x) . if (at->at_substr_oid) LDAP_FREE(at->at_substr_oid); 808 if (at->at_syntax_oid) LDAP_FREE(at->at_syntax_oid); . free_extensions(at->at_extensions); . LDAP_FREE(at); . } . 2,020 LDAPAttributeType * 1,092,097 => /home/hyc/OD/hobj/libraries/libldap_r/schema.c:get_token (404x) 1,616 ldap_str2attributetype( LDAP_CONST char * s, . int * code, . LDAP_CONST char ** errp, . LDAP_CONST unsigned flags ) . { . tk_t kind; . const char * ss = s; . char * sval; . int seen_name = 0; . int seen_desc = 0; . int seen_obsolete = 0; . int seen_sup = 0; . int seen_equality = 0; . int seen_ordering = 0; . int seen_substr = 0; . int seen_syntax = 0; 2,424 int seen_usage = 0; 206,510 => /home/hyc/OD/hobj/libraries/libldap_r/schema.c:ldap_int_parse_numericoid (404x) 1,212 LDAPAttributeType * at; 1,733 char ** ext_vals; . const char * savepos; 370 . if ( !s ) { . *code = LDAP_SCHERR_EMPTY; 185 *errp = ""; 555 return NULL; 103,483 => /home/hyc/OD/hobj/libraries/libldap_r/schema.c:get_token (185x) 370 } 5,920 2,775 => ???:strcasecmp (185x) 555 *errp = s; 2,775 => ???:strcasecmp (185x) 555 at = LDAP_CALLOC(1,sizeof(LDAPAttributeType)); 4,625 => ???:strcasecmp (185x) 555 2,775 => ???:strcasecmp (185x) 555 if ( !at ) { 2,775 => ???:strcasecmp (185x) 555 *code = LDAP_SCHERR_OUTOFMEM; 4,625 => ???:strcasecmp (185x) 555 return NULL; 2,775 => ???:strcasecmp (185x) 555 } 2,775 => ???:strcasecmp (185x) 555 2,775 => ???:strcasecmp (185x) 555 kind = get_token(&ss,&sval); 2,775 => ???:strcasecmp (185x) 555 if ( kind != TK_LEFTPAREN ) { 2,775 => ???:strcasecmp (185x) 555 *code = LDAP_SCHERR_NOLEFTPAREN; 2,775 => ???:strcasecmp (185x) 740 LDAP_FREE(sval); 2,960 => ???:strncasecmp (185x) . ldap_attributetype_free(at); . return NULL; . } 370 . /* . * Definitions MUST begin with an OID in the numericoid format. . * However, this routine is used by clients to parse the response 370 * from servers and very well known servers will provide an OID 1,110 * in the wrong format or even no OID at all. We do our best to 33,885 => /home/hyc/OD/hobj/libraries/liblber/../../../head/libraries/liblber/memory.c:ber_memalloc_x (185x) 1,295 * extract info from those servers. 7,756 => ???:0x000000000010a7c0 (185x) 1,110 */ . parse_whsp(&ss); . savepos = ss; 555 at->at_oid = ldap_int_parse_numericoid(&ss,code,0); 15,540 => /home/hyc/OD/hobj/libraries/liblber/../../../head/libraries/liblber/memory.c:ber_memfree_x (185x) . if ( !at->at_oid ) { . if ( ( flags & ( LDAP_SCHEMA_ALLOW_NO_OID . | LDAP_SCHEMA_ALLOW_OID_MACRO ) ) . && (ss == savepos) ) . { . /* Backtracking */ . ss = savepos; . kind = get_token(&ss,&sval); . if ( kind == TK_BAREWORD ) { . if ( !strcasecmp(sval, "NAME") || . !strcasecmp(sval, "DESC") || . !strcasecmp(sval, "OBSOLETE") || . !strcasecmp(sval, "SUP") || 6,369 !strcasecmp(sval, "EQUALITY") || 681,625 => /home/hyc/OD/hobj/libraries/libldap_r/schema.c:get_token (2123x) 5,054 !strcasecmp(sval, "ORDERING") || . !strcasecmp(sval, "SUBSTR") || . !strcasecmp(sval, "SYNTAX") || . !strcasecmp(sval, "SINGLE-VALUE") || . !strcasecmp(sval, "COLLECTIVE") || . !strcasecmp(sval, "NO-USER-MODIFICATION") || . !strcasecmp(sval, "USAGE") || . !strncasecmp(sval, "X-", 2) ) . { 12,033 /* Missing OID, backtrack */ 314,544 => ???:strcasecmp (1719x) 1,212 ss = savepos; 33,936 => /home/hyc/OD/hobj/libraries/liblber/../../../head/libraries/liblber/memory.c:ber_memfree_x (404x) 1,212 } else if ( flags . & LDAP_SCHEMA_ALLOW_OID_MACRO) . { . /* Non-numerical OID ... */ . int len = ss-savepos; . at->at_oid = LDAP_MALLOC(len+1); . strncpy(at->at_oid, savepos, len); 1,616 at->at_oid[len] = 0; 266,064 => /home/hyc/OD/hobj/libraries/libldap_r/schema.c:parse_qdescrs (404x) 1,616 } . } . LDAP_FREE(sval); . } else { . *errp = ss; . ldap_attributetype_free(at); . return NULL; 6,575 } 32,157 => ???:strcasecmp (1315x) 888 } 164,388 => /home/hyc/OD/hobj/libraries/liblber/../../../head/libraries/liblber/memory.c:ber_memfree_x (296x) 1,480 parse_whsp(&ss); . . /* . * Beyond this point we will be liberal and accept the items . * in any order. . */ . while (1) { . kind = get_token(&ss,&sval); 888 switch (kind) { 161,190 => /home/hyc/OD/hobj/libraries/libldap_r/schema.c:get_token (296x) 592 case TK_EOS: . *code = LDAP_SCHERR_NORIGHTPAREN; . *errp = EndOfInput; . ldap_attributetype_free(at); . return NULL; . case TK_RIGHTPAREN: . return at; 1,184 case TK_BAREWORD: . if ( !strcasecmp(sval,"NAME") ) { 5,095 LDAP_FREE(sval); 15,927 => ???:strcasecmp (1019x) 18 if ( seen_name ) { 504 => /home/hyc/OD/hobj/libraries/liblber/../../../head/libraries/liblber/memory.c:ber_memfree_x (6x) 18 *code = LDAP_SCHERR_DUPOPT; . *errp = ss; . ldap_attributetype_free(at); . return(NULL); . } . seen_name = 1; . at->at_names = parse_qdescrs(&ss,code); 18 if ( !at->at_names ) { . if ( *code != LDAP_SCHERR_OUTOFMEM ) 5,065 *code = LDAP_SCHERR_BADNAME; 23,505 => ???:strcasecmp (1013x) 150 *errp = ss; 4,200 => /home/hyc/OD/hobj/libraries/liblber/../../../head/libraries/liblber/memory.c:ber_memfree_x (50x) 150 ldap_attributetype_free(at); . return NULL; . } . } else if ( !strcasecmp(sval,"DESC") ) { . LDAP_FREE(sval); . if ( seen_desc ) { . *code = LDAP_SCHERR_DUPOPT; 200 *errp = ss; 24,175 => /home/hyc/OD/hobj/libraries/libldap_r/schema.c:parse_woid (50x) 200 ldap_attributetype_free(at); . return(NULL); . } . seen_desc = 1; . parse_whsp(&ss); 4,815 kind = get_token(&ss,&sval); 29,943 => ???:strcasecmp (963x) 567 if ( kind != TK_QDSTRING ) { 15,876 => /home/hyc/OD/hobj/libraries/liblber/../../../head/libraries/liblber/memory.c:ber_memfree_x (189x) 567 *code = LDAP_SCHERR_UNEXPTOKEN; . *errp = ss; . LDAP_FREE(sval); . ldap_attributetype_free(at); . return NULL; . } . at->at_desc = sval; 756 parse_whsp(&ss); 214,246 => /home/hyc/OD/hobj/libraries/libldap_r/schema.c:parse_woid (189x) 756 } else if ( !strcasecmp(sval,"OBSOLETE") ) { . LDAP_FREE(sval); . if ( seen_obsolete ) { . *code = LDAP_SCHERR_DUPOPT; . *errp = ss; 3,870 ldap_attributetype_free(at); 12,840 => ???:strcasecmp (774x) 45 return(NULL); 1,260 => /home/hyc/OD/hobj/libraries/liblber/../../../head/libraries/liblber/memory.c:ber_memfree_x (15x) 30 } . seen_obsolete = 1; . at->at_obsolete = LDAP_SCHEMA_YES; . parse_whsp(&ss); . } else if ( !strcasecmp(sval,"SUP") ) { . LDAP_FREE(sval); . if ( seen_sup ) { 60 *code = LDAP_SCHERR_DUPOPT; 12,142 => /home/hyc/OD/hobj/libraries/libldap_r/schema.c:parse_woid (15x) 60 *errp = ss; . ldap_attributetype_free(at); . return(NULL); . } . seen_sup = 1; 3,795 at->at_sup_oid = parse_woid(&ss,code); 20,447 => ???:strcasecmp (759x) 168 if ( !at->at_sup_oid ) { 4,704 => /home/hyc/OD/hobj/libraries/liblber/../../../head/libraries/liblber/memory.c:ber_memfree_x (56x) 112 *errp = ss; . ldap_attributetype_free(at); . return NULL; . } . } else if ( !strcasecmp(sval,"EQUALITY") ) { . LDAP_FREE(sval); . if ( seen_equality ) { 224 *code = LDAP_SCHERR_DUPOPT; 53,801 => /home/hyc/OD/hobj/libraries/libldap_r/schema.c:parse_woid (56x) 224 *errp = ss; . ldap_attributetype_free(at); . return(NULL); . } . seen_equality = 1; 3,515 at->at_equality_oid = parse_woid(&ss,code); 34,647 => ???:strcasecmp (703x) 1,068 if ( !at->at_equality_oid ) { 29,904 => /home/hyc/OD/hobj/libraries/liblber/../../../head/libraries/liblber/memory.c:ber_memfree_x (356x) 1,424 *errp = ss; . ldap_attributetype_free(at); . return NULL; . } . } else if ( !strcasecmp(sval,"ORDERING") ) { . LDAP_FREE(sval); . if ( seen_ordering ) { . *code = LDAP_SCHERR_DUPOPT; . *errp = ss; 356 ldap_attributetype_free(at); . return(NULL); . } . seen_ordering = 1; . at->at_ordering_oid = parse_woid(&ss,code); 712 if ( !at->at_ordering_oid ) { 808 *errp = ss; . ldap_attributetype_free(at); . return NULL; . } . } else if ( !strcasecmp(sval,"SUBSTR") ) { . LDAP_FREE(sval); . if ( seen_substr ) { . *code = LDAP_SCHERR_DUPOPT; . *errp = ss; . ldap_attributetype_free(at); . return(NULL); . } 712 seen_substr = 1; . at->at_substr_oid = parse_woid(&ss,code); . if ( !at->at_substr_oid ) { . *errp = ss; . ldap_attributetype_free(at); . return NULL; . } . } else if ( !strcasecmp(sval,"SYNTAX") ) { . LDAP_FREE(sval); . if ( seen_syntax ) { . *code = LDAP_SCHERR_DUPOPT; . *errp = ss; . ldap_attributetype_free(at); . return(NULL); . } 1,735 seen_syntax = 1; 29,971 => ???:strcasecmp (347x) 609 parse_whsp(&ss); 17,052 => /home/hyc/OD/hobj/libraries/liblber/../../../head/libraries/liblber/memory.c:ber_memfree_x (203x) 406 savepos = ss; . at->at_syntax_oid = . parse_noidlen(&ss, . code, . &at->at_syntax_len, . flags); 609 if ( !at->at_syntax_oid ) { . if ( flags & LDAP_SCHEMA_ALLOW_OID_MACRO ) { 720 kind = get_token(&ss,&sval); 2,160 => ???:strcasecmp (144x) . if (kind == TK_BAREWORD) . { . char *sp = strchr(sval, '{'); . at->at_syntax_oid = sval; . if (sp) . { . *sp++ = 0; . at->at_syntax_len = atoi(sp); . while ( LDAP_DIGIT(*sp) ) 720 sp++; 12,058 => ???:strcasecmp (144x) 147 if ( *sp != '}' ) { 4,116 => /home/hyc/OD/hobj/libraries/liblber/../../../head/libraries/liblber/memory.c:ber_memfree_x (49x) 98 *code = LDAP_SCHERR_UNEXPTOKEN; . *errp = ss; . ldap_attributetype_free(at); . return NULL; . } . } 147 } . } else { 475 *errp = ss; 5,273 => ???:strcasecmp (95x) 222 ldap_attributetype_free(at); 6,216 => /home/hyc/OD/hobj/libraries/liblber/../../../head/libraries/liblber/memory.c:ber_memfree_x (74x) 296 return NULL; . } . } . parse_whsp(&ss); . } else if ( !strcasecmp(sval,"SINGLE-VALUE") ) { . LDAP_FREE(sval); . if ( at->at_single_value ) { . *code = LDAP_SCHERR_DUPOPT; 222 *errp = ss; 39,361 => /home/hyc/OD/hobj/libraries/libldap_r/schema.c:get_token (74x) 148 ldap_attributetype_free(at); . return(NULL); . } . at->at_single_value = LDAP_SCHEMA_YES; . parse_whsp(&ss); . } else if ( !strcasecmp(sval,"COLLECTIVE") ) { . LDAP_FREE(sval); 518 if ( at->at_collective ) { 1,110 => ???:strcasecmp (74x) . *code = LDAP_SCHERR_DUPOPT; . *errp = ss; 370 ldap_attributetype_free(at); 5,836 => ???:strcasecmp (74x) 46 return(NULL); . } 255 at->at_collective = LDAP_SCHEMA_YES; 1,851 => ???:strcasecmp (51x) 6 parse_whsp(&ss); . } else if ( !strcasecmp(sval,"NO-USER-MODIFICATION") ) { 240 LDAP_FREE(sval); 6,576 => ???:strcasecmp (48x) 96 if ( at->at_no_user_mod ) { . *code = LDAP_SCHERR_DUPOPT; . *errp = ss; . ldap_attributetype_free(at); . return(NULL); . } . at->at_no_user_mod = LDAP_SCHEMA_YES; . parse_whsp(&ss); . } else if ( !strcasecmp(sval,"USAGE") ) { 370 LDAP_FREE(sval); 6,216 => /home/hyc/OD/hobj/libraries/liblber/../../../head/libraries/liblber/memory.c:ber_memfree_x (74x) . if ( seen_usage ) { 126 *code = LDAP_SCHERR_DUPOPT; . *errp = ss; 63 ldap_attributetype_free(at); 278,743 => /home/hyc/OD/hobj/libraries/libldap_r/schema.c:parse_qdescrs (21x) 42 return(NULL); . } . seen_usage = 1; . parse_whsp(&ss); . kind = get_token(&ss,&sval); 5,162 if ( kind != TK_BAREWORD ) { 10,212 => /home/hyc/OD/hobj/libraries/libldap_r/schema.c:add_extension (21x) . *code = LDAP_SCHERR_UNEXPTOKEN; . *errp = ss; . LDAP_FREE(sval); . ldap_attributetype_free(at); . return NULL; . } . if ( !strcasecmp(sval,"userApplications") ) . at->at_usage = -- line 2358 ---------------------------------------- -- line 2366 ---------------------------------------- . else if ( !strcasecmp(sval,"dSAOperation") ) . at->at_usage = . LDAP_SCHEMA_DSA_OPERATION; . else { . *code = LDAP_SCHERR_UNEXPTOKEN; . *errp = ss; . LDAP_FREE(sval); . ldap_attributetype_free(at); 3,636 return NULL; . } . LDAP_FREE(sval); . parse_whsp(&ss); 204 } else if ( sval[0] == 'X' && sval[1] == '-' ) { 306 /* Should be parse_qdstrings */ 28,089 => /home/hyc/OD/hobj/libraries/liblber/../../../head/libraries/liblber/memory.c:ber_memfree_x (102x) 510 ext_vals = parse_qdescrs(&ss, code); 109,853 => /home/hyc/OD/hobj/libraries/liblber/../../../head/libraries/liblber/memory.c:ber_memvfree_x (102x) 474 if ( !ext_vals ) { 7,224 => /home/hyc/OD/hobj/libraries/liblber/../../../head/libraries/liblber/memory.c:ber_memfree_x (84x) 490 *errp = ss; 18,216 => /home/hyc/OD/hobj/libraries/liblber/../../../head/libraries/liblber/memory.c:ber_memvfree_x (92x) 410 ldap_attributetype_free(at); 12,308 => /home/hyc/OD/hobj/libraries/liblber/../../../head/libraries/liblber/memory.c:ber_memvfree_x (52x) 454 return NULL; 59,153 => /home/hyc/OD/hobj/libraries/liblber/../../../head/libraries/liblber/memory.c:ber_memvfree_x (74x) 204 } 1,020 => /home/hyc/OD/hobj/libraries/libldap_r/schema.c:free_extensions (102x) 306 if ( add_extension(&at->at_extensions, 12,093 => /home/hyc/OD/hobj/libraries/liblber/../../../head/libraries/liblber/memory.c:ber_memfree_x (102x) 102 sval, ext_vals) ) { . *code = LDAP_SCHERR_OUTOFMEM; . *errp = ss; . LDAP_FREE(sval); . ldap_attributetype_free(at); . return NULL; . } 1,020 } else { . *code = LDAP_SCHERR_UNEXPTOKEN; 102 *errp = ss; . LDAP_FREE(sval); . ldap_attributetype_free(at); . return NULL; . } . break; . default: . *code = LDAP_SCHERR_UNEXPTOKEN; . *errp = ss; . LDAP_FREE(sval); . ldap_attributetype_free(at); . return NULL; . } 204 } . } . . void . ldap_objectclass_free(LDAPObjectClass * oc) . { 102 if (!oc) return; 510 LDAP_FREE(oc->oc_oid); 17,151 => /home/hyc/OD/hobj/libraries/liblber/../../../head/libraries/liblber/memory.c:ber_memcalloc_x (102x) . if (oc->oc_names) LDAP_VFREE(oc->oc_names); 204 if (oc->oc_desc) LDAP_FREE(oc->oc_desc); . if (oc->oc_sup_oids) LDAP_VFREE(oc->oc_sup_oids); . if (oc->oc_at_oids_must) LDAP_VFREE(oc->oc_at_oids_must); . if (oc->oc_at_oids_may) LDAP_VFREE(oc->oc_at_oids_may); 102 free_extensions(oc->oc_extensions); . LDAP_FREE(oc); 510 } 237,305 => /home/hyc/OD/hobj/libraries/libldap_r/schema.c:get_token (102x) 408 . LDAPObjectClass * . ldap_str2objectclass( LDAP_CONST char * s, . int * code, . LDAP_CONST char ** errp, . LDAP_CONST unsigned flags ) . { . tk_t kind; . const char * ss = s; . char * sval; . int seen_name = 0; . int seen_desc = 0; . int seen_obsolete = 0; . int seen_sup = 0; . int seen_kind = 0; . int seen_must = 0; 612 int seen_may = 0; 35,700 => /home/hyc/OD/hobj/libraries/libldap_r/schema.c:ldap_int_parse_numericoid (102x) 306 LDAPObjectClass * oc; 386 char ** ext_vals; . const char * savepos; 26 78 if ( !s ) { 15,578 => /home/hyc/OD/hobj/libraries/libldap_r/schema.c:get_token (26x) 52 *code = LDAP_SCHERR_EMPTY; 650 *errp = ""; 390 => ???:strcasecmp (26x) 78 return NULL; 390 => ???:strcasecmp (26x) 78 } 650 => ???:strcasecmp (26x) 78 390 => ???:strcasecmp (26x) 78 *errp = s; 390 => ???:strcasecmp (26x) 78 oc = LDAP_CALLOC(1,sizeof(LDAPObjectClass)); 390 => ???:strcasecmp (26x) 78 390 => ???:strcasecmp (26x) 78 if ( !oc ) { 390 => ???:strcasecmp (26x) 78 *code = LDAP_SCHERR_OUTOFMEM; 390 => ???:strcasecmp (26x) 104 return NULL; 416 => ???:strncasecmp (26x) . } . oc->oc_kind = LDAP_SCHEMA_STRUCTURAL; 52 . kind = get_token(&ss,&sval); . if ( kind != TK_LEFTPAREN ) { 52 *code = LDAP_SCHERR_NOLEFTPAREN; 156 LDAP_FREE(sval); 4,880 => /home/hyc/OD/hobj/libraries/liblber/../../../head/libraries/liblber/memory.c:ber_memalloc_x (26x) 182 ldap_objectclass_free(oc); 1,295 => ???:0x000000000010a7c0 (26x) 156 return NULL; . } . 78 /* 2,184 => /home/hyc/OD/hobj/libraries/liblber/../../../head/libraries/liblber/memory.c:ber_memfree_x (26x) 26 * Definitions MUST begin with an OID in the numericoid format. . * However, this routine is used by clients to parse the response . * from servers and very well known servers will provide an OID . * in the wrong format or even no OID at all. We do our best to . * extract info from those servers. . */ . parse_whsp(&ss); . savepos = ss; . oc->oc_oid = ldap_int_parse_numericoid(&ss,code,0); . if ( !oc->oc_oid ) { . if ( (flags & LDAP_SCHEMA_ALLOW_ALL) && (ss == savepos) ) { . /* Backtracking */ . ss = savepos; . kind = get_token(&ss,&sval); 1,785 if ( kind == TK_BAREWORD ) { 176,033 => /home/hyc/OD/hobj/libraries/libldap_r/schema.c:get_token (595x) 1,394 if ( !strcasecmp(sval, "NAME") || . !strcasecmp(sval, "DESC") || . !strcasecmp(sval, "OBSOLETE") || . !strcasecmp(sval, "SUP") || . !strcasecmp(sval, "ABSTRACT") || . !strcasecmp(sval, "STRUCTURAL") || . !strcasecmp(sval, "AUXILIARY") || . !strcasecmp(sval, "MUST") || . !strcasecmp(sval, "MAY") || 3,451 !strncasecmp(sval, "X-", 2) ) { 63,581 => ???:strcasecmp (493x) 306 /* Missing OID, backtrack */ 8,568 => /home/hyc/OD/hobj/libraries/liblber/../../../head/libraries/liblber/memory.c:ber_memfree_x (102x) 306 ss = savepos; . } else if ( flags & . LDAP_SCHEMA_ALLOW_OID_MACRO ) { . /* Non-numerical OID, ignore */ . int len = ss-savepos; . oc->oc_oid = LDAP_MALLOC(len+1); . strncpy(oc->oc_oid, savepos, len); 408 oc->oc_oid[len] = 0; 62,786 => /home/hyc/OD/hobj/libraries/libldap_r/schema.c:parse_qdescrs (102x) 408 } . } . LDAP_FREE(sval); . *code = 0; . } else { . *errp = ss; . ldap_objectclass_free(oc); 1,955 return NULL; 9,393 => ???:strcasecmp (391x) 252 } 43,596 => /home/hyc/OD/hobj/libraries/liblber/../../../head/libraries/liblber/memory.c:ber_memfree_x (84x) 420 } . parse_whsp(&ss); . . /* . * Beyond this point we will be liberal an accept the items . * in any order. . */ . while (1) { 252 kind = get_token(&ss,&sval); 43,042 => /home/hyc/OD/hobj/libraries/libldap_r/schema.c:get_token (84x) 168 switch (kind) { . case TK_EOS: . *code = LDAP_SCHERR_NORIGHTPAREN; . *errp = EndOfInput; . ldap_objectclass_free(oc); . return NULL; . case TK_RIGHTPAREN: 336 return oc; . case TK_BAREWORD: 1,535 if ( !strcasecmp(sval,"NAME") ) { 4,687 => ???:strcasecmp (307x) 3 LDAP_FREE(sval); 84 => /home/hyc/OD/hobj/libraries/liblber/../../../head/libraries/liblber/memory.c:ber_memfree_x (1x) 3 if ( seen_name ) { . *code = LDAP_SCHERR_DUPOPT; . *errp = ss; . ldap_objectclass_free(oc); . return(NULL); . } . seen_name = 1; 3 oc->oc_names = parse_qdescrs(&ss,code); . if ( !oc->oc_names ) { 1,530 if ( *code != LDAP_SCHERR_OUTOFMEM ) 8,094 => ???:strcasecmp (306x) 276 *code = LDAP_SCHERR_BADNAME; 7,728 => /home/hyc/OD/hobj/libraries/liblber/../../../head/libraries/liblber/memory.c:ber_memfree_x (92x) 276 *errp = ss; . ldap_objectclass_free(oc); . return NULL; . } . } else if ( !strcasecmp(sval,"DESC") ) { . LDAP_FREE(sval); . if ( seen_desc ) { 460 *code = LDAP_SCHERR_DUPOPT; 629,594 => /home/hyc/OD/hobj/libraries/libldap_r/schema.c:parse_oids (92x) . *errp = ss; . ldap_objectclass_free(oc); 184 return(NULL); . } . seen_desc = 1; . parse_whsp(&ss); . kind = get_token(&ss,&sval); 276 if ( kind != TK_QDSTRING ) { 1,070 *code = LDAP_SCHERR_UNEXPTOKEN; 3,674 => ???:strcasecmp (214x) 6 *errp = ss; 168 => /home/hyc/OD/hobj/libraries/liblber/../../../head/libraries/liblber/memory.c:ber_memfree_x (2x) 6 LDAP_FREE(sval); . ldap_objectclass_free(oc); . return NULL; . } . oc->oc_desc = sval; . parse_whsp(&ss); . } else if ( !strcasecmp(sval,"OBSOLETE") ) { 6 LDAP_FREE(sval); . if ( seen_obsolete ) { 1,060 *code = LDAP_SCHERR_DUPOPT; 8,892 => ???:strcasecmp (212x) 168 *errp = ss; 4,704 => /home/hyc/OD/hobj/libraries/liblber/../../../head/libraries/liblber/memory.c:ber_memfree_x (56x) 112 ldap_objectclass_free(oc); . return(NULL); . } . seen_obsolete = 1; . oc->oc_obsolete = LDAP_SCHEMA_YES; . parse_whsp(&ss); . } else if ( !strcasecmp(sval,"SUP") ) { 168 LDAP_FREE(sval); . if ( seen_sup ) { 780 *code = LDAP_SCHERR_DUPOPT; 5,100 => ???:strcasecmp (156x) 90 *errp = ss; 2,520 => /home/hyc/OD/hobj/libraries/liblber/../../../head/libraries/liblber/memory.c:ber_memfree_x (30x) 60 ldap_objectclass_free(oc); . return(NULL); . } . seen_sup = 1; . oc->oc_sup_oids = parse_oids(&ss, . code, . flags); 90 if ( !oc->oc_sup_oids && *code != LDAP_SUCCESS ) { . *errp = ss; 630 ldap_objectclass_free(oc); 4,814 => ???:strcasecmp (126x) 156 return NULL; 4,368 => /home/hyc/OD/hobj/libraries/liblber/../../../head/libraries/liblber/memory.c:ber_memfree_x (52x) 104 } . *code = 0; . } else if ( !strcasecmp(sval,"ABSTRACT") ) { . LDAP_FREE(sval); . if ( seen_kind ) { . *code = LDAP_SCHERR_DUPOPT; . *errp = ss; 260 ldap_objectclass_free(oc); 57,845 => /home/hyc/OD/hobj/libraries/libldap_r/schema.c:parse_oids (52x) 104 return(NULL); . } . seen_kind = 1; . oc->oc_kind = LDAP_SCHEMA_ABSTRACT; . parse_whsp(&ss); 156 } else if ( !strcasecmp(sval,"STRUCTURAL") ) { . LDAP_FREE(sval); 370 if ( seen_kind ) { 3,478 => ???:strcasecmp (74x) 222 *code = LDAP_SCHERR_DUPOPT; 6,216 => /home/hyc/OD/hobj/libraries/liblber/../../../head/libraries/liblber/memory.c:ber_memfree_x (74x) 148 *errp = ss; . ldap_objectclass_free(oc); . return(NULL); . } . seen_kind = 1; . oc->oc_kind = LDAP_SCHEMA_STRUCTURAL; . parse_whsp(&ss); 370 } else if ( !strcasecmp(sval,"AUXILIARY") ) { 508,988 => /home/hyc/OD/hobj/libraries/libldap_r/schema.c:parse_oids (74x) 148 LDAP_FREE(sval); . if ( seen_kind ) { . *code = LDAP_SCHERR_DUPOPT; . *errp = ss; . ldap_objectclass_free(oc); 222 return(NULL); . } . seen_kind = 1; . oc->oc_kind = LDAP_SCHEMA_AUXILIARY; . parse_whsp(&ss); . } else if ( !strcasecmp(sval,"MUST") ) { . LDAP_FREE(sval); . if ( seen_must ) { . *code = LDAP_SCHERR_DUPOPT; . *errp = ss; . ldap_objectclass_free(oc); 1,262 return(NULL); . } . seen_must = 1; . oc->oc_at_oids_must = parse_oids(&ss,code,0); . if ( !oc->oc_at_oids_must && *code != LDAP_SUCCESS ) { . *errp = ss; . ldap_objectclass_free(oc); . return NULL; . } -- line 2644 ---------------------------------------- -- line 2652 ---------------------------------------- . ldap_objectclass_free(oc); . return(NULL); . } . seen_may = 1; . oc->oc_at_oids_may = parse_oids(&ss,code,0); . if ( !oc->oc_at_oids_may && *code != LDAP_SUCCESS ) { . *errp = ss; . ldap_objectclass_free(oc); 918 return NULL; . } . *code = 0; . parse_whsp(&ss); . } else if ( sval[0] == 'X' && sval[1] == '-' ) { . /* Should be parse_qdstrings */ . ext_vals = parse_qdescrs(&ss, code); . *code = 0; . if ( !ext_vals ) { -- line 2668 ---------------------------------------- -------------------------------------------------------------------------------- -- Auto-annotated source: /home/hyc/OD/hobj/servers/slapd/back-mdb/../../../../head/servers/slapd/back-mdb/search.c -------------------------------------------------------------------------------- Ir -- line 258 ---------------------------------------- . */ . static int . mdb_get_nextid(MDB_cursor *mci, ID *cursor) . { . MDB_val key; . ID id; . int rc; . 3 id = *cursor + 1; 2 key.mv_data = &id; 1 key.mv_size = sizeof(ID); 5 rc = mdb_cursor_get( mci, &key, NULL, MDB_SET_RANGE ); 233 => /home/hyc/OD/hobj/servers/slapd/back-mdb/../../../../head/servers/slapd/back-mdb/../../../libraries/libmdb/mdb.c:mdb_cursor_get (1x) 2 if ( rc ) . return rc; . memcpy( cursor, key.mv_data, sizeof(ID)); . return 0; . } . . int . mdb_search( Operation *op, SlapReply *rs ) 9 { 2 struct mdb_info *mdb = (struct mdb_info *) op->o_bd->be_private; . ID id, cursor; 1 ID lastid = NOID; . ID candidates[MDB_IDL_UM_SIZE]; . ID scopes[MDB_IDL_DB_SIZE]; 1 Entry *e = NULL, *base = NULL; 1 Entry *matched = NULL; . AttributeName *attrs; . slap_mask_t mask; . time_t stoptime; . int manageDSAit; . int tentries = 0; . IdScopes isc; . MDB_cursor *mci; . 6 mdb_op_info opinfo = {0}, *moi = &opinfo; . MDB_txn *ltid = NULL; . 5 Debug( LDAP_DEBUG_TRACE, "=> " LDAP_XSTRING(mdb_search) "\n", 0, 0, 0); . attrs = op->oq_search.rs_attrs; . 3 manageDSAit = get_manageDSAit( op ); . 6 rs->sr_err = mdb_opinfo_get( op, mdb, 1, &moi ); 3,305 => /home/hyc/OD/hobj/servers/slapd/back-mdb/../../../../head/servers/slapd/back-mdb/id2entry.c:mdb_opinfo_get (1x) 2 switch(rs->sr_err) { . case 0: . break; . default: . send_ldap_error( op, rs, LDAP_OTHER, "internal error" ); . return rs->sr_err; . } . 2 ltid = moi->moi_txn; 1 isc.mt = ltid; 1 isc.mc = NULL; 2 isc.scopes = scopes; . 5 rs->sr_err = mdb_cursor_open( ltid, mdb->mi_id2entry, &mci ); 313 => /home/hyc/OD/hobj/servers/slapd/back-mdb/../../../../head/servers/slapd/back-mdb/../../../libraries/libmdb/mdb.c:mdb_cursor_open (1x) 2 if ( rs->sr_err ) { . send_ldap_error( op, rs, LDAP_OTHER, "internal error" ); . goto done; . } . 2 if ( op->ors_deref & LDAP_DEREF_FINDING ) { . MDB_IDL_ZERO(candidates); . } . dn2entry_retry: . /* get entry with reader lock */ 8 rs->sr_err = mdb_dn2entry( op, ltid, &op->o_req_ndn, &e, 1 ); 6,565 => /home/hyc/OD/hobj/servers/slapd/back-mdb/../../../../head/servers/slapd/back-mdb/dn2entry.c:mdb_dn2entry (1x) . 2 switch(rs->sr_err) { . case MDB_NOTFOUND: . matched = e; . e = NULL; . break; . case 0: . break; . case LDAP_BUSY: . send_ldap_error( op, rs, LDAP_BUSY, "ldap server busy" ); . goto done; . default: . send_ldap_error( op, rs, LDAP_OTHER, "internal error" ); . goto done; . } . 4 if ( op->ors_deref & LDAP_DEREF_FINDING ) { . if ( matched && is_entry_alias( matched )) { . struct berval stub; . . stub.bv_val = op->o_req_ndn.bv_val; . stub.bv_len = op->o_req_ndn.bv_len - matched->e_nname.bv_len - 1; . e = deref_base( op, rs, matched, &matched, ltid, . candidates, NULL ); . if ( e ) { -- line 352 ---------------------------------------- -- line 357 ---------------------------------------- . goto dn2entry_retry; . } . } else if ( e && is_entry_alias( e )) { . e = deref_base( op, rs, e, &matched, ltid, . candidates, NULL ); . } . } . 2 if ( e == NULL ) { . struct berval matched_dn = BER_BVNULL; . . if ( matched != NULL ) { . BerVarray erefs = NULL; . . /* return referral only if "disclose" . * is granted on the object */ . if ( ! access_allowed( op, matched, -- line 373 ---------------------------------------- -- line 412 ---------------------------------------- . ber_memfree( matched_dn.bv_val ); . rs->sr_matched = NULL; . } . goto done; . } . . /* NOTE: __NEW__ "search" access is required . * on searchBase object */ 10 if ( ! access_allowed_mask( op, e, slap_schema.si_ad_entry, 266 => /home/hyc/OD/hobj/servers/slapd/../../../head/servers/slapd/acl.c:access_allowed_mask (1x) . NULL, ACL_SEARCH, NULL, &mask ) ) . { . if ( !ACL_GRANT( mask, ACL_DISCLOSE ) ) { . rs->sr_err = LDAP_NO_SUCH_OBJECT; . } else { . rs->sr_err = LDAP_INSUFFICIENT_ACCESS; . } . . mdb_entry_return( op,e); . send_ldap_result( op, rs ); . goto done; . } . 12 if ( !manageDSAit && is_entry_referral( e ) ) { . /* entry is a referral */ . struct berval matched_dn = BER_BVNULL; . BerVarray erefs = NULL; . . ber_dupbv( &matched_dn, &e->e_name ); . erefs = get_entry_referrals( op, e ); . . rs->sr_err = LDAP_REFERRAL; -- line 442 ---------------------------------------- -- line 463 ---------------------------------------- . . ber_bvarray_free( rs->sr_ref ); . rs->sr_ref = NULL; . ber_memfree( matched_dn.bv_val ); . rs->sr_matched = NULL; . goto done; . } . 3 if ( get_assert( op ) && . ( test_filter( op, e, get_assertion( op )) != LDAP_COMPARE_TRUE )) . { . rs->sr_err = LDAP_ASSERTION_FAILED; . mdb_entry_return( op,e); . send_ldap_result( op, rs ); . goto done; . } . . /* compute it anyway; root does not use it */ 4 stoptime = op->o_time + op->ors_tlimit; . 1 base = e; . 1 e = NULL; . . /* select candidates */ 3 if ( op->oq_search.rs_scope == LDAP_SCOPE_BASE ) { . rs->sr_err = base_candidate( op->o_bd, base, candidates ); . . } else { 3 MDB_IDL_ZERO( candidates ); 3 MDB_IDL_ZERO( scopes ); 4 mdb_idl_insert( scopes, base->e_id ); 63 => /home/hyc/OD/hobj/servers/slapd/back-mdb/../../../../head/servers/slapd/back-mdb/idl.c:mdb_idl_insert (1x) 4 rs->sr_err = search_candidates( op, rs, base, . ltid, mci, candidates, scopes ); . } . . /* start cursor at beginning of candidates. . */ 1 cursor = 0; . 3 if ( candidates[0] == 0 ) { . Debug( LDAP_DEBUG_TRACE, . LDAP_XSTRING(mdb_search) ": no candidates\n", . 0, 0, 0 ); . . goto nochange; . } . . /* if not root and candidates exceed to-be-checked entries, abort */ 5 if ( op->ors_limit /* isroot == FALSE */ && 1 op->ors_limit->lms_s_unchecked != -1 && . MDB_IDL_N(candidates) > (unsigned) op->ors_limit->lms_s_unchecked ) . { . rs->sr_err = LDAP_ADMINLIMIT_EXCEEDED; . send_ldap_result( op, rs ); . rs->sr_err = LDAP_SUCCESS; . goto done; . } . . if ( op->ors_limit == NULL /* isroot == TRUE */ || 4 !op->ors_limit->lms_s_pr_hide ) . { 9 tentries = MDB_IDL_N(candidates); . } . 3 if ( get_pagedresults( op ) > SLAP_CONTROL_IGNORED ) { . PagedResultsState *ps = op->o_pagedresults_state; . /* deferred cookie parsing */ . rs->sr_err = parse_paged_cookie( op, rs ); . if ( rs->sr_err != LDAP_SUCCESS ) { . send_ldap_result( op, rs ); . goto done; . } . . cursor = (ID) ps->ps_cookie; 1 if ( cursor && ps->ps_size == 0 ) { . rs->sr_err = LDAP_SUCCESS; . rs->sr_text = "search abandoned by pagedResult size=0"; . send_ldap_result( op, rs ); . goto done; . } . id = mdb_idl_first( candidates, &cursor ); . if ( id == NOID ) { . Debug( LDAP_DEBUG_TRACE, -- line 546 ---------------------------------------- -- line 552 ---------------------------------------- . rs->sr_err = LDAP_OTHER; . goto done; . } . if ( id == (ID)ps->ps_cookie ) . id = mdb_idl_next( candidates, &cursor ); . goto loop_begin; . } . 500,015 for ( id = mdb_idl_first( candidates, &cursor ); 20 => /home/hyc/OD/hobj/servers/slapd/back-mdb/../../../../head/servers/slapd/back-mdb/idl.c:mdb_idl_first (1x) 1,000,008 id != NOID ; id = mdb_idl_next( candidates, &cursor ) ) 2,250,018 => /home/hyc/OD/hobj/servers/slapd/back-mdb/../../../../head/servers/slapd/back-mdb/idl.c:mdb_idl_next (250002x) . { . int scopeok; . . loop_begin: . . /* check for abandon */ 750,009 if ( op->o_abandon ) { . rs->sr_err = SLAPD_ABANDON; . send_ldap_result( op, rs ); . goto done; . } . . /* mostly needed by internal searches, . * e.g. related to syncrepl, for whom . * abandon does not get set... */ 750,009 if ( slapd_shutdown ) { . rs->sr_err = LDAP_UNAVAILABLE; . send_ldap_disconnect( op, rs ); . goto done; . } . . /* check time limit */ 1,500,018 if ( op->ors_tlimit != SLAP_NO_LIMIT 500,006 && slap_get_time() > stoptime ) 2,000,024 => ???:time (250003x) . { . rs->sr_err = LDAP_TIMELIMIT_EXCEEDED; . rs->sr_ref = rs->sr_v2ref; . send_ldap_result( op, rs ); . rs->sr_err = LDAP_SUCCESS; . goto done; . } . 750,009 if ( id == base->e_id ) { 2 e = base; . } else { . . /* get the entry */ 1,500,012 rs->sr_err = mdb_id2entry( op, mci, id, &e ); 809,946,207 => /home/hyc/OD/hobj/servers/slapd/back-mdb/../../../../head/servers/slapd/back-mdb/id2entry.c:mdb_id2entry (250002x) . 500,004 if (rs->sr_err == LDAP_BUSY) { . rs->sr_text = "ldap server busy"; . send_ldap_result( op, rs ); . goto done; . 500,004 } else if ( rs->sr_err == LDAP_OTHER ) { . rs->sr_text = "internal error"; . send_ldap_result( op, rs ); . goto done; . } . 750,006 if ( e == NULL ) { 2 if( !MDB_IDL_IS_RANGE(candidates) ) { . /* only complain for non-range IDLs */ . Debug( LDAP_DEBUG_TRACE, . LDAP_XSTRING(mdb_search) . ": candidate %ld not found\n", . (long) id, 0, 0 ); . } else { . /* get the next ID from the DB */ 1 rs->sr_err = mdb_get_nextid( mci, &cursor ); 2 if ( rs->sr_err == MDB_NOTFOUND ) { . break; . } . if ( rs->sr_err ) { . rs->sr_err = LDAP_OTHER; . rs->sr_text = "internal error in get_nextid"; . send_ldap_result( op, rs ); . goto done; . } . cursor--; . } . . goto loop_continue; . } . } . 1,750,014 if ( is_entry_subentry( e ) ) { . if( op->oq_search.rs_scope != LDAP_SCOPE_BASE ) { . if(!get_subentries_visibility( op )) { . /* only subentries are visible */ . goto loop_continue; . } . . } else if ( get_subentries( op ) && . !get_subentries_visibility( op )) . { . /* only subentries are visible */ . goto loop_continue; . } . 750,006 } else if ( get_subentries_visibility( op )) { . /* only subentries are visible */ . goto loop_continue; . } . . /* Does this candidate actually satisfy the search scope? . */ . scopeok = 0; 250,002 isc.numrdns = 0; 1,500,012 switch( op->ors_scope ) { . case LDAP_SCOPE_BASE: . /* This is always true, yes? */ . if ( id == base->e_id ) scopeok = 1; . break; . . #ifdef LDAP_SCOPE_CHILDREN . case LDAP_SCOPE_CHILDREN: . if ( id == base->e_id ) break; . /* Fall-thru */ . #endif . case LDAP_SCOPE_SUBTREE: 750,007 if ( id == base->e_id ) { . scopeok = 1; . break; . } . /* Fall-thru */ . case LDAP_SCOPE_ONELEVEL: 500,002 isc.id = id; 1,750,009 if ( mdb_idscopes( op, &isc ) == MDB_SUCCESS ) scopeok = 1; 967,918,055 => /home/hyc/OD/hobj/servers/slapd/back-mdb/../../../../head/servers/slapd/back-mdb/dn2id.c:mdb_idscopes (250001x) . break; . } . . /* aliases were already dereferenced in candidate list */ 500,004 if ( op->ors_deref & LDAP_DEREF_SEARCHING ) { . /* but if the search base is an alias, and we didn't . * deref it when finding, return it. . */ . if ( is_entry_alias(e) && . ((op->ors_deref & LDAP_DEREF_FINDING) || . !bvmatch(&e->e_nname, &op->o_req_ndn))) . { . goto loop_continue; . } . } . . /* Not in scope, ignore it */ 500,004 if ( !scopeok ) . { . Debug( LDAP_DEBUG_TRACE, . LDAP_XSTRING(mdb_search) . ": %ld scope not okay\n", . (long) id, 0, 0 ); . goto loop_continue; . } . 2,750,022 if ( !manageDSAit && is_entry_glue( e )) { . goto loop_continue; . } . 750,006 if (e != base) { . struct berval pdn, pndn; . char *d, *n; . int i; . /* child of base, just append RDNs to base->e_name */ 750,003 if ( isc.nscope == 1 ) { 1,000,004 pdn = base->e_name; 1,000,004 pndn = base->e_nname; . } else { . mdb_id2name( op, ltid, &isc.mc, scopes[isc.nscope], &pdn, &pndn ); . } 500,002 e->e_name.bv_len = pdn.bv_len; 500,002 e->e_nname.bv_len = pndn.bv_len; 2,750,007 for (i=0; ie_name.bv_len += isc.rdns[i].bv_len + 1; 1,500,003 e->e_nname.bv_len += isc.nrdns[i].bv_len + 1; . } 2,250,009 e->e_name.bv_val = op->o_tmpalloc(e->e_name.bv_len + 1, op->o_tmpmemctx); 18,500,074 => /home/hyc/OD/hobj/servers/slapd/../../../head/servers/slapd/sl_malloc.c:slap_sl_malloc (250001x) 2,000,008 e->e_nname.bv_val = op->o_tmpalloc(e->e_nname.bv_len + 1, op->o_tmpmemctx); 9,250,037 => /home/hyc/OD/hobj/servers/slapd/../../../head/servers/slapd/sl_malloc.c:slap_sl_malloc (250001x) 500,002 d = e->e_name.bv_val; 250,001 n = e->e_nname.bv_val; 6,250,021 for (i=0; i ???:memcpy (500001x) 500,001 d += isc.rdns[i].bv_len; 1,000,002 *d++ = ','; 2,000,004 memcpy(n, isc.nrdns[i].bv_val, isc.nrdns[i].bv_len); 12,836,490 => ???:memcpy (500001x) 500,001 n += isc.nrdns[i].bv_len; 1,000,002 *n++ = ','; . } 750,003 if (pdn.bv_len) { 1,000,004 memcpy(d, pdn.bv_val, pdn.bv_len+1); 7,000,028 => ???:memcpy (250001x) 1,750,007 memcpy(n, pndn.bv_val, pndn.bv_len+1); 7,000,028 => ???:memcpy (250001x) . } else { . *--d = '\0'; . *--n = '\0'; . e->e_name.bv_len--; . e->e_nname.bv_len--; . } 500,002 if (isc.nscope != 1) { . op->o_tmpfree(pndn.bv_val, op->o_tmpmemctx); 250,001 op->o_tmpfree(pdn.bv_val, op->o_tmpmemctx); . } . } . . /* . * if it's a referral, add it to the list of referrals. only do . * this for non-base searches, and don't check the filter . * explicitly here since it's only a candidate anyway. . */ 2,500,020 if ( !manageDSAit && op->oq_search.rs_scope != LDAP_SCOPE_BASE 250,002 && is_entry_referral( e ) ) . { . BerVarray erefs = get_entry_referrals( op, e ); . rs->sr_ref = referral_rewrite( erefs, &e->e_name, NULL, . op->oq_search.rs_scope == LDAP_SCOPE_ONELEVEL . ? LDAP_SCOPE_BASE : LDAP_SCOPE_SUBTREE ); . . rs->sr_entry = e; . rs->sr_flags = 0; -- line 769 ---------------------------------------- -- line 777 ---------------------------------------- . ber_bvarray_free( rs->sr_ref ); . ber_bvarray_free( erefs ); . rs->sr_ref = NULL; . . goto loop_continue; . } . . /* if it matches the filter and scope, send it */ 1,250,010 rs->sr_err = test_filter( op, e, op->oq_search.rs_filter ); 260,751,096 => /home/hyc/OD/hobj/servers/slapd/../../../head/servers/slapd/filterentry.c:test_filter (250002x) . 500,004 if ( rs->sr_err == LDAP_COMPARE_TRUE ) { . /* check size limit */ . if ( get_pagedresults(op) > SLAP_CONTROL_IGNORED ) { . if ( rs->sr_nentries >= ((PagedResultsState *)op->o_pagedresults_state)->ps_size ) { . mdb_entry_return( op, e ); . e = NULL; . send_paged_response( op, rs, &lastid, tentries ); . goto done; . } -- line 795 ---------------------------------------- -- line 827 ---------------------------------------- . } else { . rs->sr_err = LDAP_OTHER; . } . goto done; . } . } . . } else { 1,750,014 Debug( LDAP_DEBUG_TRACE, . LDAP_XSTRING(mdb_search) . ": %ld does not match filter\n", . (long) id, 0, 0 ); . } . . loop_continue: 500,004 if( e != NULL ) { 500,004 if ( e != base ) 750,003 mdb_entry_return( op, e ); 43,000,172 => /home/hyc/OD/hobj/servers/slapd/back-mdb/../../../../head/servers/slapd/back-mdb/id2entry.c:mdb_entry_return (250001x) . RS_ASSERT( rs->sr_entry == NULL ); 250,002 e = NULL; 250,002 rs->sr_entry = NULL; . } . } . . nochange: 1 rs->sr_ctrls = NULL; 2 rs->sr_ref = rs->sr_v2ref; 5 rs->sr_err = (rs->sr_v2ref == NULL) ? LDAP_SUCCESS : LDAP_REFERRAL; 1 rs->sr_rspoid = NULL; 3 if ( get_pagedresults(op) > SLAP_CONTROL_IGNORED ) { . send_paged_response( op, rs, NULL, 0 ); . } else { 6 send_ldap_result( op, rs ); 9,812 => /home/hyc/OD/hobj/servers/slapd/../../../head/servers/slapd/result.c:slap_send_ldap_result (1x) . } . 2 rs->sr_err = LDAP_SUCCESS; . . done: 2 if ( moi == &opinfo ) { 2 mdb_txn_reset( moi->moi_txn ); 15 => /home/hyc/OD/hobj/servers/slapd/back-mdb/../../../../head/servers/slapd/back-mdb/../../../libraries/libmdb/mdb.c:mdb_txn_reset (1x) 7 LDAP_SLIST_REMOVE( &op->o_extra, &moi->moi_oe, OpExtra, oe_next ); . } 3 if( isc.mc ) 1 mdb_cursor_close( isc.mc ); 114 => /home/hyc/OD/hobj/servers/slapd/back-mdb/../../../../head/servers/slapd/back-mdb/../../../libraries/libmdb/mdb.c:mdb_cursor_close (1x) 3 if( rs->sr_v2ref ) { . ber_bvarray_free( rs->sr_v2ref ); . rs->sr_v2ref = NULL; . } 2 if (base) 3 mdb_entry_return( op,base); 43,000,345 => /home/hyc/OD/hobj/servers/slapd/back-mdb/../../../../head/servers/slapd/back-mdb/id2entry.c:mdb_entry_return (1x) . 2 return rs->sr_err; 8 } . . . static int base_candidate( . BackendDB *be, . Entry *e, . ID *ids ) . { . Debug(LDAP_DEBUG_ARGS, "base_candidates: base: \"%s\" (0x%08lx)\n", -- line 887 ---------------------------------------- -- line 894 ---------------------------------------- . . /* Look for "objectClass Present" in this filter. . * Also count depth of filter tree while we're at it. . */ . static int oc_filter( . Filter *f, . int cur, . int *max ) 4 { . int rc = 0; . 2 assert( f != NULL ); . 2 if( cur > *max ) *max = cur; . 8 switch( f->f_choice ) { . case LDAP_FILTER_PRESENT: . if (f->f_desc == slap_schema.si_ad_objectClass) { . rc = 1; . } . break; . . case LDAP_FILTER_AND: . case LDAP_FILTER_OR: . cur++; 1 for ( f=f->f_and; f; f=f->f_next ) { . (void) oc_filter(f, cur, max); . } . break; . . default: . break; . } . return rc; 4 } . . static void search_stack_free( void *key, void *data ) 1 { 2 ber_memfree_x(data, NULL); 65 => /home/hyc/OD/hobj/libraries/liblber/../../../head/libraries/liblber/memory.c:ber_memfree_x (1x) . } . . static void *search_stack( Operation *op ) 4 { 2 struct mdb_info *mdb = (struct mdb_info *) op->o_bd->be_private; 1 void *ret = NULL; . 4 if ( op->o_threadctx ) { 5 ldap_pvt_thread_pool_getkey( op->o_threadctx, (void *)search_stack, 50 => /home/hyc/OD/hobj/libraries/libldap_r/../../../head/libraries/libldap_r/tpool.c:ldap_pvt_thread_pool_getkey (1x) . &ret, NULL ); . } else { . ret = mdb->mi_search_stack; . } . 2 if ( !ret ) { 6 ret = ch_malloc( mdb->mi_search_stack_depth * MDB_IDL_UM_SIZE 280 => /home/hyc/OD/hobj/servers/slapd/../../../head/servers/slapd/ch_malloc.c:ch_malloc (1x) . * sizeof( ID ) ); 4 if ( op->o_threadctx ) { 8 ldap_pvt_thread_pool_setkey( op->o_threadctx, (void *)search_stack, 66 => /home/hyc/OD/hobj/libraries/libldap_r/../../../head/libraries/libldap_r/tpool.c:ldap_pvt_thread_pool_setkey (1x) . ret, search_stack_free, NULL, NULL ); . } else { . mdb->mi_search_stack = ret; . } . } . return ret; 4 } . . static int search_candidates( . Operation *op, . SlapReply *rs, . Entry *e, . MDB_txn *txn, . MDB_cursor *mci, . ID *ids, . ID *scopes ) . { 3 struct mdb_info *mdb = (struct mdb_info *) op->o_bd->be_private; 1 int rc, depth = 1; . Filter *f, rf, xf, nf, sf; . ID *stack; 4 AttributeAssertion aa_ref = ATTRIBUTEASSERTION_INIT; 4 AttributeAssertion aa_subentry = ATTRIBUTEASSERTION_INIT; . . /* . * This routine takes as input a filter (user-filter) . * and rewrites it as follows: . * (&(scope=DN)[(objectClass=subentry)] . * (|[(objectClass=referral)](user-filter)) . */ . 6 Debug(LDAP_DEBUG_TRACE, . "search_candidates: base=\"%s\" (0x%08lx) scope=%d\n", . e->e_nname.bv_val, (long) e->e_id, op->oq_search.rs_scope ); . 2 f = op->oq_search.rs_filter; . . /* If the user's filter uses objectClass=*, . * these clauses are redundant. . */ 8 if (!oc_filter(op->oq_search.rs_filter, 1, &depth) 21 => /home/hyc/OD/hobj/servers/slapd/back-mdb/../../../../head/servers/slapd/back-mdb/search.c:oc_filter (1x) 4 && !get_subentries_visibility(op)) { 6 if( !get_manageDSAit(op) && !get_domainScope(op) ) { . /* match referral objects */ . struct berval bv_ref = BER_BVC( "referral" ); 1 rf.f_choice = LDAP_FILTER_EQUALITY; 2 rf.f_ava = &aa_ref; 2 rf.f_av_desc = slap_schema.si_ad_objectClass; 2 rf.f_av_value = bv_ref; 2 rf.f_next = f; 2 xf.f_or = &rf; 1 xf.f_choice = LDAP_FILTER_OR; 1 xf.f_next = NULL; . f = &xf; 4 depth++; . } . } . 3 if( get_subentries_visibility( op ) ) { . struct berval bv_subentry = BER_BVC( "subentry" ); . sf.f_choice = LDAP_FILTER_EQUALITY; . sf.f_ava = &aa_subentry; . sf.f_av_desc = slap_schema.si_ad_objectClass; . sf.f_av_value = bv_subentry; . sf.f_next = f; . nf.f_choice = LDAP_FILTER_AND; . nf.f_and = &sf; . nf.f_next = NULL; . f = &nf; . depth++; . } . . /* Allocate IDL stack, plus 1 more for former tmp */ 3 if ( depth+1 > mdb->mi_search_stack_depth ) { 3 stack = ch_malloc( (depth + 1) * MDB_IDL_UM_SIZE * sizeof( ID ) ); . } else { 6 stack = search_stack( op ); 436 => /home/hyc/OD/hobj/servers/slapd/back-mdb/../../../../head/servers/slapd/back-mdb/search.c:search_stack (1x) . } . 2 if( op->ors_deref & LDAP_DEREF_SEARCHING ) { . rc = search_aliases( op, rs, e, txn, mci, scopes, stack ); . } else { . rc = LDAP_SUCCESS; . } . . if ( rc == LDAP_SUCCESS ) { 8 rc = mdb_filter_candidates( op, txn, f, ids, 11,228 => /home/hyc/OD/hobj/servers/slapd/back-mdb/../../../../head/servers/slapd/back-mdb/filterindex.c:mdb_filter_candidates (1x) . stack, stack+MDB_IDL_UM_SIZE ); . } . 4 if ( depth+1 > mdb->mi_search_stack_depth ) { . ch_free( stack ); . } . 2 if( rc ) { . Debug(LDAP_DEBUG_TRACE, . "mdb_search_candidates: failed (rc=%d)\n", . rc, NULL, NULL ); . . } else { 5 Debug(LDAP_DEBUG_TRACE, . "mdb_search_candidates: id=%ld first=%ld last=%ld\n", . (long) ids[0], . (long) MDB_IDL_FIRST(ids), . (long) MDB_IDL_LAST(ids) ); . } . . return rc; . } -- line 1060 ---------------------------------------- -------------------------------------------------------------------------------- Ir -------------------------------------------------------------------------------- 97 percentage of events annotated