Andrew Tridgell [Tue, 16 Dec 2008 07:45:28 +0000 (18:45 +1100)]
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.
Jelmer Vernooij [Tue, 16 Dec 2008 17:02:14 +0000 (18:02 +0100)]
Make some fatal errors non-fatal. This means we generate invalid code in
some cases, but we do print errors. We don't use all generated code yet at the
moment, so this isn't much of a problem.
SATOH Fumiyasu [Tue, 16 Dec 2008 15:59:07 +0000 (16:59 +0100)]
nss_winbind: Solaris 64-bit fix and...
PATCH 1:
Fix gmem->numgids and gmem->maxgids breakage on Solaris 64-bit
because sizeof(int) != sizeof(long int).
PATCH 2:
This patch fixes a compile-time warning
"warning: implicit function declaration: _nss_winbind_initgroups_dyn".
(cherry picked from commit cb036772d09227f870c2fec3ecd8c3f53787dfbc)
Added a simple tdb integrity check to tdbtool. The command "check" runs traverse on the currently open tdb, and returns the number of entries if the integrity check is successful.
Andrew Tridgell [Tue, 16 Dec 2008 03:41:21 +0000 (14:41 +1100)]
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.
Andrew Tridgell [Tue, 16 Dec 2008 03:39:42 +0000 (14:39 +1100)]
use transactions in ldbadd, ldbmodify and ldbedit
The command line tools ldbadd, ldbmodify and ldbedit should operate
within a transaction to make them more efficient. The ldbadd tool in
particular is much faster when adding a large number of records if all
the adds happen within a transaction. Previously there was a
transaction per record.
Andrew Tridgell [Tue, 16 Dec 2008 03:38:17 +0000 (14:38 +1100)]
imported the tdb_repack() code from CTDB
The tdb_repack() function repacks a TDB so that it has a single
freelist entry. The file doesn't shrink, but it does remove all
freelist fragmentation. This code originated in the CTDB vacuuming
code, but will now be used in ldb to cope with fragmentation from
re-indexing
Andrew Tridgell [Tue, 16 Dec 2008 03:36:56 +0000 (14:36 +1100)]
make tdbbackup use transactions
tdbbackup was originally written before we had transactions, and it
attempted to use its own fsync() calls to make it safe. Now that we
have transactions we can do it in a much safer (and faster!) fashion
Michael Adam [Mon, 15 Dec 2008 10:32:45 +0000 (11:32 +0100)]
s3:fix build of pam_winbind.so on older Linux systems.
Older pam implementations on Linux define PAM_AUTHTOK_RECOVER_ERR
instead of PAM_AUTHTOK_RECOVERY_ERR. We have always defined and
are using PAM_AUTHTOK_RECOVER_ERR in all other places.
s3:libsmb/namequery.c: add saf_join_store() function
saf_join_store() should be called after a successful
domain join, the affinity to the dc used at join time
has a larger ttl, to avoid problems with delayed replication.
metze
Signed-off-by: Stefan Metzmacher <metze@samba.org> Signed-off-by: Günther Deschner <gd@samba.org>
(cherry picked from commit 80e74a27c55c01221091e3eec930c2ac4433c22c)
Jelmer Vernooij [Fri, 12 Dec 2008 18:52:06 +0000 (19:52 +0100)]
Manually marshall dom_sid, so we can use a fixed size array for
dom_sid.sub_auths rather than a dynamically allocated one.
This makes it possible to use the same DCE/RPC object code for Samba 3
and Samba 4's DCE/RPC parsers and allows copying sids more easily
(since they no longer contain any pointers). The cost of having additional
manual marshalling code is limited (~35 additional lines of C code).
Volker Lendecke [Fri, 12 Dec 2008 12:47:41 +0000 (13:47 +0100)]
Fix error code when smbclient puts a file over an existing directory
Windows returns NT_STATUS_FILE_IS_A_DIRECTORY, as does Samba 3.0. 3.2 and
following returned NT_STATUS_INVALID_PARAMETER which is wrong.
Before I converted reply_open_and_X to create_file() we called
open_file_ntcreate directly. Passing through open&X for a filename that exists
as a directory ends up in open_directory after having tried open_file_ntcreate.
Some check in there returns NT_STATUS_INVALID_PARAMETER. With this additional
FILE_NON_DIRECTORY_FILE flag we get the correct error message back from
create_file_unixpath before trying open_directory().
Survives make test, but as this also touches the other open variants I would
like others to review this.
Jeff Layton [Fri, 12 Dec 2008 12:00:38 +0000 (07:00 -0500)]
mount.cifs: allow mounts to ipv6 capable servers
The current name resolution scheme in mount.cifs is IPv4 only. Expand
it to be protocol-independent. Also take advantage of the fact that
getaddrinfo() returns a list of addresses and have mount.cifs try each
in turn until it hits one that's reachable and allows the socket to
connect.