1
0
mirror of https://github.com/samba-team/samba.git synced 2025-06-22 07:17:05 +03:00

134 Commits

Author SHA1 Message Date
Matthias Dieter Wallnöfer
0941099a28 ldb:ldb_index.c - fix some memory leaks
Autobuild-User: Matthias Dieter Wallnöfer <mdw@samba.org>
Autobuild-Date: Wed Oct 20 13:11:49 UTC 2010 on sn-devel-104
2010-10-20 13:11:49 +00:00
Matthias Dieter Wallnöfer
3bf8ca6790 ldb:ldb_index.c - let "ldb_module_oom" generate the return code 2010-10-20 12:31:05 +00:00
Andrew Tridgell
269143fa00 s4-ldb: take advantage of ldb_match_msg_error() in more places
this gives better error checking
2010-10-13 11:00:04 +00:00
Andrew Tridgell
fd59a7c4af s4-ldb: fixed the ldb 'displayName=a,b' indexing bug
the problem was the inconsistency between the key form of DNs between
the itdb used for indexing and the on disk form

Thanks to Matthieu Patou for finding this bug!

Signed-off-by: Andrew Bartlett <abartlet@samba.org>
2010-08-17 08:44:28 +10:00
Andrew Tridgell
1cc471d69f s4-ldb: add some comments explaining the ltdb_index_idxptr() function
this function copes with alignment sensitive CPUs

Signed-off-by: Andrew Bartlett <abartlet@samba.org>
2010-08-17 08:44:28 +10:00
Matthias Dieter Wallnöfer
30ff229a3e s4:LDB TDB index code - reintroduce accidentally removed code part
This was removed by 95d726f3018ef5d249f89d56bde24b7ee0c24ecf. Sorry.
2010-03-08 11:45:39 +01:00
Matthias Dieter Wallnöfer
2d03011858 LDB:TDB backend - change counter variables to "unsigned" where appropriate 2010-03-08 10:32:56 +01:00
Andrew Tridgell
282cc79454 s4-ldb: use TYPESAFE_QSORT() in the rest of the ldb code 2010-02-14 18:44:20 +11:00
Andrew Tridgell
a56ede9027 s4-ldb: cope with bad ptr alignment in ldb_index.c
We can't assume that a rec_ptr will come back from a tdb traverse with
alignment sufficient for a pointer.
2010-01-16 09:34:27 +11:00
Andrew Tridgell
fdf12a607d s4-ldb: improve error handling in indexing code
When we get an indexing failure we want a clear error message
2010-01-08 13:03:03 +11:00
Matthias Dieter Wallnöfer
a2707a3248 ldb:ldb_tdb backend/indexes - Outside API
- The outside API contains "DN" string arguments: Bad. Since in this way we
  fully rely on the outside calls regarding the right DN format. Solution: Use
  always a "struct ldb_dn" entry. Since this one is interchangeable and we can
  handle it in our preferred way.
2009-11-20 12:30:44 +11:00
Matthias Dieter Wallnöfer
afb70f9176 ldb:ldb_tdb backend/indexes - DN comparison
- DN comparison: The function doesn't seem that efficient. I "upgraded" it a bit
  to be more powerful (added a second length check and do both before the string
  comparison)
2009-11-20 12:26:37 +11:00
Andrew Bartlett
8ae0abc65f s4:ldb Add detail to failures in the indexing code 2009-10-27 11:32:21 +11:00
Andrew Tridgell
12c9af7817 s4-ldb: allow for unescaped '=' in a index DN
The ldb_dn_explode code normally enforces all special characters,
including a '=', must be escaped. Unfortunately this conflicts with
the ltdb index DNs, which for binary attributes may be base64
encoded. This allows a unescaped '=' as a special case for index DNs.
2009-10-25 22:02:31 +11:00
Andrew Tridgell
b55a5adab9 s4-ldb: ensure DNs pass validity tests in indexing 2009-10-25 13:15:18 +11:00
Andrew Tridgell
2eca02a408 s4-ldb: fixed string length handling on index records 2009-10-25 13:15:18 +11:00
Andrew Tridgell
5002cddcb0 s4-ldb: fixed re-index during a complex transaction
We may have modified index objects in the in-memory index tdb
2009-10-25 13:15:18 +11:00
Andrew Tridgell
a109ee71fb s4-ldb: added a TODO about checking the indexlist 2009-10-22 12:47:55 +11:00
Andrew Tridgell
f2988f5cad s4-ldb: fixed some memory leaks in new indexing code 2009-10-22 12:47:55 +11:00
Andrew Tridgell
0fb6e2a52c s4-ldb: don't try to index non-indexed attributes 2009-10-22 12:47:55 +11:00
Andrew Tridgell
1b48764f24 s4-ldb: ensure new dn_list elements are not owned by caller 2009-10-22 12:47:55 +11:00
Andrew Tridgell
129298c9b9 s4-ldb: over-allocate index records to save on realloc costs 2009-10-22 12:47:55 +11:00
Andrew Tridgell
d483c3bb96 s4-ldb: fixed tdb error handling in ldb_index.c 2009-10-22 12:47:55 +11:00
Andrew Tridgell
fcd16eab6c s4-ldb: delete empty index records 2009-10-22 12:47:54 +11:00
Andrew Tridgell
936c8f311a s4-ldb: do more validation of idxptr lists 2009-10-22 12:47:54 +11:00
Andrew Tridgell
5f3cbb5f0b s4-ldb: when taking a list intersection, the result can be as long as the first list
Intuitively you would think it couldn't be longer than the minimum of
the two lists, but we are deliberately allowing for duplicates at this
level of the indexing code, which means the result can be longer
2009-10-22 12:47:53 +11:00
Andrew Tridgell
859cf72692 s4-ldb: ldb indexing rewrite - part1
This gets rid of the @IDXPTR approach to in-transaction indexing,
instead using an in-memory tdb to hold index values during a
transaction. This also cleans up a lot of the internal indexing logic,
hopefully making it easier to understand.

One of the big changes is in memory management, with a lot more use
made of talloc tricks to avoid copying dn lists, and shortcuts used to
avoid high intersection and union calculation costs.

The overall result is that a re-provision on my laptop goes from 48s
to a bit over 10s.
2009-10-22 12:47:53 +11:00
Andrew Tridgell
62dd3aadd7 s4-ldb: cope better with corruption of tdb records
When doing an indexed search if we hit a corrupt record we abandoned
the indexed search and did a full search. The problem was that we
might have sent some records to the caller already, which means the
caller ended up with duplicate records. Fix this by returning a search
error if indexing returns an error and we have given any records to
the caller.
2009-09-15 10:00:24 -07:00
Andrew Tridgell
29ba7765d9 s4/ldb: added --show-binary command line option
This add --show-binary to ldbsearch. When this flag is set, binary
blobs will be shown as-is, instead of base64 encoded. This is useful
for some XML encoded attributes, and will also be used as part of some
NDR print formatting for attributes like repsTo.
2009-09-08 21:56:31 +10:00
Andrew Bartlett
77e2403f13 s4:ldb Don't sleep(100) in this error case, but debug the LDIF 2009-08-28 22:41:54 +10:00
Sumit Bose
9d7cb4826a remove all '\n' from ldb_debug 2009-07-14 11:21:11 -04:00
Andrew Tridgell
73c8566d95 use the unique flag on ldb attributes to optimise & clauses
When a attribute is marked unique we know that if we find a match
it will be the only possible match. This means that in a list of
subtrees connected by an &, it is best to first load the index values
for the unique entries, as if they find something then we know we
won't have to look any further.

This helps with searches like this:

  (&(objectclass=user)(samaccountname=tridge))

the old code would first have loaded the very large index for the
objectclass=user attribute, and then loaded the single entry for
samaccountname=tridge. Now we load the samaccountname=tridge entry
first, notice that it gives us a single result, and stop, thereby
skipping the load of the objectclass=user index record completely.
2009-06-01 22:03:20 +10:00
Andrew Tridgell
5a39817212 added support for unique indexing in ldb
When a attribute is marked as LDB_ATTR_FLAG_UNIQUE_INDEX then attempts
to add a 2nd record that has the same attribute value for this
attribute as another record will fail.

This provides a much more efficient mechanism for ensuring that
attributes like objectGUID are unique
2009-06-01 16:36:21 +10:00
Andrew Tridgell
0a0d760704 fixed one-level indexing
one-level indexing was not always effective due to some broken logic
in the indexing code. This change means that if normal indexing fails,
we can still fall back on one-level indexing.

This reduces the number of full unindexed searches in s4 quite a lot
2009-05-28 16:10:47 +10:00
Simo Sorce
f088353d37 Fix potential segfaults using freed memory.
In some code paths ltdb_context was still referenced even after we were returned
an error by one of the callbacks. Because the interface assumes that once an
error is returned the ldb_request may be freed, and because the ltdb_context was
allocated as a child of the request, this might cause access to freed memory.
Allocate the ltdb_context on ldb, and keep track of what's going on with the
request by adding a spy children on it. This way even if the request is freed
before the ltdb_callback is called, we will safely free the ctx and just quietly
return.
2009-03-09 20:12:11 -04:00
Simo Sorce
1cd7fe7194 Fix headers, ldb_includes.h is a private header,
do not reference it from ldb.h
2009-02-23 17:38:11 -05:00
Simo Sorce
380874ef86 Fix the mess with ldb includes.
Separate again the public from the private headers.

Add a new header specific for modules.
Also add service function for modules as now ldb_context and ldb_module are
opaque structures for them.
2009-01-30 01:02:03 -05:00
Simo Sorce
af049ae83c s4:cosmetic: Remove trailing tabs and spaces 2008-12-19 09:58:28 -05:00
Matthias Dieter Wallnöfer
dde0964d72 Small cosmetic LDB patch regarding return values.
It changes some "return 0" in "return LDB_SUCCESS"
2008-12-19 09:54:20 -05:00
Andrew Bartlett
8deded43ba Rename ldb index pointer wrapper function
This also asserts that it is used only for index records.

Andrew Bartlett
2008-12-18 14:36:20 +11:00
Andrew Bartlett
596fe759e1 s4:ldb: make it possible to return per entry controls
Signed-off-by: Stefan Metzmacher <metze@samba.org>
2008-12-17 12:29:27 +11:00
Andrew Tridgell
e294c4799b an experimental patch for fixing ldb bloat
ldb indexing can cause huge files, and huge memory usage. This
experiment allows us to keep indexes in memory during a transaction,
then to write the indexes to disk when the transaction completes. The
result is that the db is much smaller (we have seen improvements of
about 100x in file size) and memory usage during large transactions is
also greatly reduced

Note that this patch uses the unusual strategy of putting pointers
into a ldb (and thus into a tdb). This works because the pointers are
only there during a transaction, so the pointers are not exposed to
any other users of the database. The pointers allow us to avoid some
really bad allocation problems with tdb record allocation during the
re-indexing.
2008-12-17 07:15:29 +11:00
Andrew Tridgell
4380a374c1 repack the ldb after re-indexing
re-indexing in ldb is triggered on any modification to the @ATTRIBUTES
or @INDEXLIST records. This happens to produce a worst-case
fragmentation of the database, as all @INDEX records are deleted then
re-created. By repacking after re-indexing we ensure that the database
ends up without extreme fragmentation.
2008-12-16 14:41:21 +11:00
Simo Sorce
0aeade2007 LDB ASYNC: ldb_tdb backend 2008-09-29 04:22:18 +02:00
Andrew Tridgell
c50d361e07 fixed a speellling erra
(This used to be commit 3c058f50cc3b91d540feb51fb698d90565b2b7c9)
2008-08-22 18:37:11 +10:00
Andrew Tridgell
107ab090e2 use uintptr_t instead of intptr_t where appropriate
(This used to be commit d62f2bcc85c13605c133db250e0a86d2d6ccc481)
2008-04-17 14:47:07 +02:00
Andrew Bartlett
bb93a7ed5e r26684: Trivial cleanup from Matthias Dieter Wallnöfer, from bug 5090
Andrew Bartlett
(This used to be commit 0016231edd514e8db620bafc44ce877fcac19ed9)
2008-01-06 23:27:02 -06:00
Andrew Bartlett
c64116e158 r25218: After discussion with Simo, remove the subclass support from LDB.
Subclass support was designed to avoid needing to spell out the full
list of objectClasses that an entry was in.  However, Samba4 now
enforces this restriction in the objectClass module, and the way
subclass matching was handled was complex and counter-intuitive in my
opinion (and did not match LDAP).

Andrew Bartlett
(This used to be commit f5ce04b904e14445a2a7e7f92e7e1f64b645c6f2)
2007-10-10 15:06:56 -05:00
Jelmer Vernooij
cd962355ab r25000: Fix some more C++ compatibility warnings.
(This used to be commit 08bb1ef643ab906f1645cf6f32763dc73b1884e4)
2007-10-10 15:05:27 -05:00
Andrew Tridgell
6c973f4e8c r23798: updated old Temple Place FSF addresses to new URL
(This used to be commit 40c0919aaa9c1b14bbaebb95ecce53eb0380fdbb)
2007-10-10 14:59:15 -05:00