The branch, master has been updated
       via  ec737d9 s3:cclean avoid segfault in case of ctdb missbehaviour
       via  fef4195 s3:cclean: fix memory allocation
       via  9e53a02 packaging(RHEL-CTDB): package cclean tool
       via  250ebe7 packaging(RHEL-CTDB): make makespec.sh aware of new 
location of version.h
       via  01863df s3_dbrwap_ctdb: improve a comment in 
db_ctdb_can_use_local_record()
       via  b46977e s3:dbwrap_ctdb: fix a comment in db_ctdb_fetch()
       via  92808a6 s3:dbwrap_ctdb: expand the comment for the 
db_ctdb_can_use_local_copy() function
       via  0a5f363 s3:dbwrap_ctdb: rename db_ctdb_own_record() -> 
db_ctdb_can_use_local_copy()
       via  d6abf79 s3:dbrwap_ctdb: remove commented out legacy code
       via  9d11277 s3:dbwrap_ctdb: fix fetch/fetch_locked when samba is built 
against old ctdb
       via  19941a9 lib/ccan: readd execinfo dependency to failtest
       via  cbf44e8 libcli/smb: add SMB2_CAP_DIRECTORY_LEASING to SMB2_CAP_ALL
       via  3c3ed70 lib/util: fix fd leak in anonymous_shared_allocate() if 
MAP_ANON is not available
       via  1a622fe s3:smb2_server: remove max_charge check in 
smbd_smb2_request_verify_creditcharge()
      from  f4a1893 s3:build: tell linker to use corefoundation on all darwin 
releases

http://gitweb.samba.org/?p=samba.git;a=shortlog;h=master


- Log -----------------------------------------------------------------
commit ec737d96048f3cd34cb2de7f939d93586c4a930f
Author: Gregor Beck <[email protected]>
Date:   Fri Jun 29 11:42:34 2012 +0200

    s3:cclean avoid segfault in case of ctdb missbehaviour
    
    Signed-off-by: Michael Adam <[email protected]>
    
    Autobuild-User(master): Michael Adam <[email protected]>
    Autobuild-Date(master): Fri Jun 29 17:06:05 CEST 2012 on sn-devel-104

commit fef41956b9308482a2496827851d47f54dc4873b
Author: Gregor Beck <[email protected]>
Date:   Fri Jun 29 11:36:54 2012 +0200

    s3:cclean: fix memory allocation
    
    Signed-off-by: Michael Adam <[email protected]>

commit 9e53a0209b3c8e4523f39ac92ba86ac42376e204
Author: Gregor Beck <[email protected]>
Date:   Wed Jun 27 15:07:15 2012 +0200

    packaging(RHEL-CTDB): package cclean tool
    
    Signed-off-by: Michael Adam <[email protected]>

commit 250ebe755064eaf534c0ebfd28fcf9052e30a523
Author: Gregor Beck <[email protected]>
Date:   Wed Jun 27 14:11:23 2012 +0200

    packaging(RHEL-CTDB): make makespec.sh aware of new location of version.h
    
    Signed-off-by: Michael Adam <[email protected]>

commit 01863df25dda5a643dd3ed58b8c8150c61416384
Author: Michael Adam <[email protected]>
Date:   Fri Jun 29 10:55:32 2012 +0200

    s3_dbrwap_ctdb: improve a comment in db_ctdb_can_use_local_record()
    
    Pair-Programmed-With: Gregor Beck <[email protected]>

commit b46977e4f64b040dd760ae74b0ca3cbed0df1395
Author: Michael Adam <[email protected]>
Date:   Fri Jun 29 10:52:33 2012 +0200

    s3:dbwrap_ctdb: fix a comment in db_ctdb_fetch()
    
    Pair-Programmed-With: Gregor Beck <[email protected]>

commit 92808a6005debb8810f83a3527cdb0d01559169d
Author: Michael Adam <[email protected]>
Date:   Fri Jun 29 10:51:37 2012 +0200

    s3:dbwrap_ctdb: expand the comment for the db_ctdb_can_use_local_copy() 
function
    
    Pair-Programmed-With: Gregor Beck <[email protected]>

commit 0a5f36333303812f772a5b7ac84808bd634a4e4a
Author: Michael Adam <[email protected]>
Date:   Fri Jun 29 10:47:56 2012 +0200

    s3:dbwrap_ctdb: rename db_ctdb_own_record() -> db_ctdb_can_use_local_copy()
    
    This matches the function's intention much closer, since it
    also tests whether we have a valid local read only copy.
    
    Pair-Programmed-With: Gregor Beck <[email protected]>

commit d6abf79247c4a60a6cdc221904e6fcacf5e1ac9a
Author: Michael Adam <[email protected]>
Date:   Fri Jun 29 10:43:11 2012 +0200

    s3:dbrwap_ctdb: remove commented out legacy code

commit 9d11277337113bad885240f2fc53c692c1be99bf
Author: Michael Adam <[email protected]>
Date:   Fri Jun 29 10:39:07 2012 +0200

    s3:dbwrap_ctdb: fix fetch/fetch_locked when samba is built against old ctdb
    
    The introduction of read only copies has broken the algorithm for
    deteting whether we can use the local record copy for fetch_locked
    and fetch: For fetch locked the new code always uses the local copy
    if there is one...
    
    This patch re-establish the original algorithm for the build against
    a ctdb without read only record copies.
    
    Reported-by: Gregor Beck <[email protected]>

commit 19941a90548de20ca0deda0b7b16135e7989b77f
Author: Stefan Metzmacher <[email protected]>
Date:   Fri Jun 29 15:06:02 2012 +0200

    lib/ccan: readd execinfo dependency to failtest
    
    metze
    
    Signed-off-by: Michael Adam <[email protected]>

commit cbf44e8d2f946139c55b87fc389f0619781c68f3
Author: Stefan Metzmacher <[email protected]>
Date:   Tue Jun 26 14:47:58 2012 +0200

    libcli/smb: add SMB2_CAP_DIRECTORY_LEASING to SMB2_CAP_ALL
    
    metze
    
    Signed-off-by: Michael Adam <[email protected]>

commit 3c3ed706908022ef26b5889971c4ec5040697f95
Author: Stefan Metzmacher <[email protected]>
Date:   Tue Jun 26 13:48:36 2012 +0200

    lib/util: fix fd leak in anonymous_shared_allocate() if MAP_ANON is not 
available
    
    metze

commit 1a622fe641ffebd93a2ae1ee6ff5e8c4177668aa
Author: Stefan Metzmacher <[email protected]>
Date:   Fri Jun 29 13:16:11 2012 +0200

    s3:smb2_server: remove max_charge check in 
smbd_smb2_request_verify_creditcharge()
    
    The client can send any credit charge value, it's ok to send more than 
needed.
    
    metze
    
    Signed-off-by: Michael Adam <[email protected]>

-----------------------------------------------------------------------

Summary of changes:
 lib/ccan/wscript                    |    5 ++++-
 lib/util/util.c                     |   15 ++++++++++++++-
 libcli/smb/smb2_constants.h         |    1 +
 packaging/RHEL-CTDB/makespec.sh     |    2 +-
 packaging/RHEL-CTDB/samba.spec.tmpl |    1 +
 source3/lib/dbwrap/dbwrap_ctdb.c    |   31 ++++++++++++++++---------------
 source3/smbd/smb2_server.c          |   16 ----------------
 source3/utils/cclean.c              |   15 ++++++++++-----
 8 files changed, 47 insertions(+), 39 deletions(-)


Changeset truncated at 500 lines:

diff --git a/lib/ccan/wscript b/lib/ccan/wscript
index 565a657..c9bb49b 100644
--- a/lib/ccan/wscript
+++ b/lib/ccan/wscript
@@ -155,4 +155,7 @@ def build(bld):
         ccan_module(bld, 'tcon')
         ccan_module(bld, 'tlist', 'ccan-list ccan-tcon')
         ccan_module(bld, 'failtest',
-                    "ccan-err ccan-hash ccan-htable ccan-list 
ccan-read_write_all ccan-str ccan-time")
+                    '''
+                    ccan-err ccan-hash ccan-htable ccan-list
+                    ccan-read_write_all ccan-str ccan-time execinfo
+                    ''')
diff --git a/lib/util/util.c b/lib/util/util.c
index 20466b4..100d3d8 100644
--- a/lib/util/util.c
+++ b/lib/util/util.c
@@ -1109,8 +1109,21 @@ void *anonymous_shared_allocate(size_t orig_bufsz)
        buf = mmap(NULL, bufsz, PROT_READ|PROT_WRITE, MAP_ANON|MAP_SHARED,
                        -1 /* fd */, 0 /* offset */);
 #else
+{
+       int saved_errno;
+       int fd;
+
+       fd = open("/dev/zero", O_RDWR);
+       if (fd == -1) {
+               return NULL;
+       }
+
        buf = mmap(NULL, bufsz, PROT_READ|PROT_WRITE, MAP_FILE|MAP_SHARED,
-                       open("/dev/zero", O_RDWR), 0 /* offset */);
+                  fd, 0 /* offset */);
+       saved_errno = errno;
+       close(fd);
+       errno = saved_errno;
+}
 #endif
 
        if (buf == MAP_FAILED) {
diff --git a/libcli/smb/smb2_constants.h b/libcli/smb/smb2_constants.h
index f4e8b02..9b60345 100644
--- a/libcli/smb/smb2_constants.h
+++ b/libcli/smb/smb2_constants.h
@@ -102,6 +102,7 @@
                SMB2_CAP_LARGE_MTU | \
                SMB2_CAP_MULTI_CHANNEL | \
                SMB2_CAP_PERSISTENT_HANDLES | \
+               SMB2_CAP_DIRECTORY_LEASING | \
                SMB2_CAP_ENCRYPTION)
 
 
diff --git a/packaging/RHEL-CTDB/makespec.sh b/packaging/RHEL-CTDB/makespec.sh
index 946ce8e..1207450 100755
--- a/packaging/RHEL-CTDB/makespec.sh
+++ b/packaging/RHEL-CTDB/makespec.sh
@@ -7,7 +7,7 @@
 DIRNAME=$(dirname $0)
 TOPDIR=${DIRNAME}/../..
 SRCDIR=${TOPDIR}/source3
-VERSION_H=${SRCDIR}/include/version.h
+VERSION_H=${SRCDIR}/include/autoconf/version.h
 SPECFILE=${DIRNAME}/samba.spec
 
 ##
diff --git a/packaging/RHEL-CTDB/samba.spec.tmpl 
b/packaging/RHEL-CTDB/samba.spec.tmpl
index a9111d2..7d68d27 100644
--- a/packaging/RHEL-CTDB/samba.spec.tmpl
+++ b/packaging/RHEL-CTDB/samba.spec.tmpl
@@ -399,6 +399,7 @@ exit 0
 %{_bindir}/tdbdump
 %{_bindir}/tdbrestore
 %{_bindir}/eventlogadm
+%{_bindir}/cclean
 
 %{_libarchdir}/samba/auth/script.so
 %{_libarchdir}/samba/vfs/acl_tdb.so
diff --git a/source3/lib/dbwrap/dbwrap_ctdb.c b/source3/lib/dbwrap/dbwrap_ctdb.c
index 1062cb0..5605b47 100644
--- a/source3/lib/dbwrap/dbwrap_ctdb.c
+++ b/source3/lib/dbwrap/dbwrap_ctdb.c
@@ -1003,12 +1003,13 @@ static int db_ctdb_record_destr(struct db_record* data)
        return 0;
 }
 
-/* Do I own this record? */
-static bool db_ctdb_own_record(TDB_DATA ctdb_data, bool read_only)
+/**
+ * Check whether we have a valid local copy of the given record,
+ * either for reading or for writing.
+ */
+static bool db_ctdb_can_use_local_copy(TDB_DATA ctdb_data, bool read_only)
 {
-#ifdef HAVE_CTDB_WANT_READONLY_DECL
        struct ctdb_ltdb_header *hdr;
-#endif
 
        if (ctdb_data.dptr == NULL)
                return false;
@@ -1016,17 +1017,20 @@ static bool db_ctdb_own_record(TDB_DATA ctdb_data, bool 
read_only)
        if (ctdb_data.dsize < sizeof(struct ctdb_ltdb_header))
                return false;
 
-#ifdef HAVE_CTDB_WANT_READONLY_DECL
        hdr = (struct ctdb_ltdb_header *)ctdb_data.dptr;
+
+#ifdef HAVE_CTDB_WANT_READONLY_DECL
        if (hdr->dmaster != get_my_vnn()) {
                /* If we're not dmaster, it must be r/o copy. */
                return read_only && (hdr->flags & CTDB_REC_RO_HAVE_READONLY);
        }
 
-       /* If we want write access, noone can have r/o copies. */
+       /*
+        * If we want write access, no one may have r/o copies.
+        */
        return read_only || !(hdr->flags & CTDB_REC_RO_HAVE_DELEGATIONS);
 #else
-       return !read_only;
+       return (hdr->dmaster == get_my_vnn());
 #endif
 }
 
@@ -1099,11 +1103,7 @@ again:
         * take the shortcut and just return it.
         */
 
-       if (!db_ctdb_own_record(ctdb_data, false)
-#if 0
-           || (random() % 2 != 0)
-#endif
-) {
+       if (!db_ctdb_can_use_local_copy(ctdb_data, false)) {
                SAFE_FREE(ctdb_data.dptr);
                tdb_chainunlock(ctx->wtdb->tdb, key);
                talloc_set_destructor(result, NULL);
@@ -1227,9 +1227,10 @@ static NTSTATUS db_ctdb_fetch(struct db_context *db, 
TALLOC_CTX *mem_ctx,
         * take the shortcut and just return it.
         * we bypass the dmaster check for persistent databases
         */
-       if (db_ctdb_own_record(ctdb_data, true)) {
-               /* we are the dmaster - avoid the ctdb protocol op */
-
+       if (db_ctdb_can_use_local_copy(ctdb_data, true)) {
+               /*
+                * We have a valid local copy - avoid the ctdb protocol op
+                */
                data->dsize = ctdb_data.dsize - sizeof(struct ctdb_ltdb_header);
 
                data->dptr = (uint8_t *)talloc_memdup(
diff --git a/source3/smbd/smb2_server.c b/source3/smbd/smb2_server.c
index c9c6431..0abd4fc 100644
--- a/source3/smbd/smb2_server.c
+++ b/source3/smbd/smb2_server.c
@@ -1437,7 +1437,6 @@ NTSTATUS smbd_smb2_request_verify_creditcharge(struct 
smbd_smb2_request *req,
 {
        uint16_t needed_charge;
        uint16_t credit_charge = 1;
-       uint16_t max_charge = 1;
        const uint8_t *inhdr;
        int i = req->current_idx;
 
@@ -1446,14 +1445,6 @@ NTSTATUS smbd_smb2_request_verify_creditcharge(struct 
smbd_smb2_request *req,
        if (req->sconn->smb2.supports_multicredit) {
                credit_charge = SVAL(inhdr, SMB2_HDR_CREDIT_CHARGE);
                credit_charge = MAX(credit_charge, 1);
-
-               /*
-                * TODO: should we limit this here
-                * to a transport specific value?
-                *
-                * TODO: we need tests for this?
-                */
-               max_charge = UINT16_MAX;
        }
 
        needed_charge = (data_length - 1)/ 65536 + 1;
@@ -1468,13 +1459,6 @@ NTSTATUS smbd_smb2_request_verify_creditcharge(struct 
smbd_smb2_request *req,
                return NT_STATUS_INVALID_PARAMETER;
        }
 
-       if (credit_charge > max_charge) {
-               DEBUG(2, ("CreditCharge too high, given %d, "
-                         "needed %d, allowed %d\n",
-                         credit_charge, needed_charge, max_charge));
-               return NT_STATUS_INVALID_PARAMETER;
-       }
-
        return NT_STATUS_OK;
 }
 
diff --git a/source3/utils/cclean.c b/source3/utils/cclean.c
index b035d33..487c107 100644
--- a/source3/utils/cclean.c
+++ b/source3/utils/cclean.c
@@ -53,9 +53,14 @@ static void print_record(const char *msg,
                         const struct connections_data *d)
 {
        char *idstr = serverid_str(k->pid);
-       d_printf("%s: connection %d (%s) to \"%s\" from %u:%u@%s[%s] %s\n", msg,
-                k->cnum, idstr, d->servicename, (unsigned)d->uid,
-                (unsigned)d->gid, d->machine, d->addr, time_to_asc(d->start));
+       d_printf("%s: connection %d (%s) ", msg, k->cnum, idstr);
+       if (d == NULL) {
+               d_printf("<no data>\n");
+       } else {
+               d_printf("to \"%s\" from %u:%u@%s[%s] %s\n", d->servicename,
+                        (unsigned)d->uid, (unsigned)d->gid, d->machine,
+                        d->addr, time_to_asc(d->start));
+       }
        talloc_free(idstr);
 }
 
@@ -66,7 +71,7 @@ static int read_connections_fn(const struct connections_key 
*key,
        struct cclean_ctx *ctx = (struct cclean_ctx *)cclean_ctx;
        unsigned length = talloc_array_length(ctx->cnums);
        if (length <= ctx->num) {
-               int n = 2*length;
+               int n = MAX(2*length, 16);
                void *tmp;
 
                tmp = talloc_realloc(ctx, ctx->ids, struct server_id, n);
@@ -95,7 +100,7 @@ static int read_connections_fn(const struct connections_key 
*key,
        ctx->ids[ctx->num] = key->pid;
        ctx->cnums[ctx->num] = key->cnum;
        ctx->names[ctx->num] = talloc_strndup(ctx, key->name, FSTRING_LEN);
-       if (ctx->names[ctx->num]) {
+       if (ctx->names[ctx->num] == NULL) {
                goto talloc_failed;
        }
        ctx->num++;


-- 
Samba Shared Repository

Reply via email to