The branch, master has been updated
       via  a03804c s3:smbd: Move a variable declaration closer to its use
       via  05954fc smbd: Slightly optimize delay_rename_for_lease_break
       via  74de5a5 lib: Avoid an "includes.h"
       via  34b0f41 smbd: Replace some GUID_string by GUID_buf_string
       via  e2d9abd tdbtorture: Align integer types
       via  afc616b tdbtorture: No transaction with mutexes
       via  8df1151 tdb: Remove "USE_RIGHT_MERGES" code
       via  a895cc2 tdb: Fix a typo
       via  c37bf2f tdb: Use explicit initialization
       via  ec209d2 tdb: Avoid casts
      from  d357141 CI/Autobuild: Remove samba-none-env-py3 test

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


- Log -----------------------------------------------------------------
commit a03804c4fcd47ef7c077864c2c469396645ebd7a
Author: Volker Lendecke <[email protected]>
Date:   Wed Sep 19 16:26:09 2018 +0200

    s3:smbd: Move a variable declaration closer to its use
    
    Signed-off-by: Volker Lendecke <[email protected]>
    Reviewed-by: Andreas Schneider <[email protected]>
    
    Autobuild-User(master): Andreas Schneider <[email protected]>
    Autobuild-Date(master): Thu Oct 25 21:44:17 CEST 2018 on sn-devel-144

commit 05954fce4265bab68d78bb335e5b8d63259ce9f4
Author: Volker Lendecke <[email protected]>
Date:   Mon Sep 24 15:46:27 2018 +0200

    smbd: Slightly optimize delay_rename_for_lease_break
    
    Do the checks with increasing cost, possibly avoid more expensive ones
    
    Signed-off-by: Volker Lendecke <[email protected]>
    Reviewed-by: Andreas Schneider <[email protected]>

commit 74de5a5d25e4dc767875ff5a2c66fe3ba313c8bb
Author: Volker Lendecke <[email protected]>
Date:   Thu Oct 18 05:46:03 2018 +0200

    lib: Avoid an "includes.h"
    
    Signed-off-by: Volker Lendecke <[email protected]>
    Reviewed-by: Andreas Schneider <[email protected]>

commit 34b0f41cda5ef856f074c67de906d7541a1dbfff
Author: Volker Lendecke <[email protected]>
Date:   Mon Sep 24 06:40:46 2018 -0700

    smbd: Replace some GUID_string by GUID_buf_string
    
    It's only debug statements, but I would like to promote the
    stack-allocation routines as good practice where they make sense.
    
    Signed-off-by: Volker Lendecke <[email protected]>
    Reviewed-by: Andreas Schneider <[email protected]>

commit e2d9abd4212903bf1cbae0f49fc96e6d3a0ee530
Author: Volker Lendecke <[email protected]>
Date:   Tue Oct 23 05:53:24 2018 +0200

    tdbtorture: Align integer types
    
    Signed-off-by: Volker Lendecke <[email protected]>
    Reviewed-by: Andreas Schneider <[email protected]>

commit afc616b67b9f0cd6b535cb12d20f4752e7c4ade9
Author: Volker Lendecke <[email protected]>
Date:   Mon Oct 22 17:18:43 2018 +0200

    tdbtorture: No transaction with mutexes
    
    Right now we don't do transactions with mutexed tdbs. tdbtorture -m
    locks up. I haven't really investigated why that is the case. The lockup
    confused me quite a bit until I figured out it works fine as long as it
    does not do transactions, which is all we need right now.
    
    Signed-off-by: Volker Lendecke <[email protected]>
    Reviewed-by: Andreas Schneider <[email protected]>

commit 8df11518c0df90aa0c223b2e964fc86015f77e2c
Author: Volker Lendecke <[email protected]>
Date:   Mon Oct 22 10:10:24 2018 +0200

    tdb: Remove "USE_RIGHT_MERGES" code
    
    This has not been activated by default for ages and can be very
    inefficient. With check_merge_with_left_record() we have an
    alternative that will merge freelist records while we walk it
    anyway. This has reduced fragmentation significantly
    
    Signed-off-by: Volker Lendecke <[email protected]>
    Reviewed-by: Andreas Schneider <[email protected]>

commit a895cc2a59a1fc87dc2d824185713d7af11aa879
Author: Volker Lendecke <[email protected]>
Date:   Mon Oct 22 10:14:23 2018 +0200

    tdb: Fix a typo
    
    Signed-off-by: Volker Lendecke <[email protected]>
    Reviewed-by: Andreas Schneider <[email protected]>

commit c37bf2f93852780113ab882f14a099aeb204c458
Author: Volker Lendecke <[email protected]>
Date:   Mon Oct 22 07:08:58 2018 +0200

    tdb: Use explicit initialization
    
    Let the compiler figure out the optimal code
    
    Signed-off-by: Volker Lendecke <[email protected]>
    Reviewed-by: Andreas Schneider <[email protected]>

commit ec209d28a2cd2f00546035ac6aa2fa4e14068570
Author: Volker Lendecke <[email protected]>
Date:   Mon Oct 22 07:42:14 2018 +0200

    tdb: Avoid casts
    
    We have %PRIu32 and %zu these days
    
    Signed-off-by: Volker Lendecke <[email protected]>
    Reviewed-by: Andreas Schneider <[email protected]>

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

Summary of changes:
 lib/tdb/common/freelist.c     | 59 +------------------------------------------
 lib/tdb/common/open.c         | 10 +++-----
 lib/tdb/tools/tdbtorture.c    | 23 ++++++++++++-----
 libcli/security/dom_sid.c     |  5 +++-
 source3/smbd/open.c           |  2 +-
 source3/smbd/smb2_setinfo.c   | 12 +++++----
 source3/smbd/smbXsrv_client.c | 37 +++++++++++++++++++--------
 7 files changed, 60 insertions(+), 88 deletions(-)


Changeset truncated at 500 lines:

diff --git a/lib/tdb/common/freelist.c b/lib/tdb/common/freelist.c
index 8870a41..5afd89b 100644
--- a/lib/tdb/common/freelist.c
+++ b/lib/tdb/common/freelist.c
@@ -27,12 +27,6 @@
 
 #include "tdb_private.h"
 
-/* 'right' merges can involve O(n^2) cost when combined with a
-   traverse, so they are disabled until we find a way to do them in
-   O(1) time
-*/
-#define USE_RIGHT_MERGES 0
-
 /* read a freelist record and check for simple errors */
 int tdb_rec_free_read(struct tdb_context *tdb, tdb_off_t off, struct 
tdb_record *rec)
 {
@@ -61,30 +55,6 @@ int tdb_rec_free_read(struct tdb_context *tdb, tdb_off_t 
off, struct tdb_record
        return 0;
 }
 
-
-#if USE_RIGHT_MERGES
-/* Remove an element from the freelist.  Must have alloc lock. */
-static int remove_from_freelist(struct tdb_context *tdb, tdb_off_t off, 
tdb_off_t next)
-{
-       tdb_off_t last_ptr, i;
-
-       /* read in the freelist top */
-       last_ptr = FREELIST_TOP;
-       while (tdb_ofs_read(tdb, last_ptr, &i) != -1 && i != 0) {
-               if (i == off) {
-                       /* We've found it! */
-                       return tdb_ofs_write(tdb, last_ptr, &next);
-               }
-               /* Follow chain (next offset is at start of record) */
-               last_ptr = i;
-       }
-       tdb->ecode = TDB_ERR_CORRUPT;
-       TDB_LOG((tdb, TDB_DEBUG_FATAL,"remove_from_freelist: not on list at 
off=%u\n", off));
-       return -1;
-}
-#endif
-
-
 /* update a record tailer (must hold allocation lock) */
 static int update_tailer(struct tdb_context *tdb, tdb_off_t offset,
                         const struct tdb_record *rec)
@@ -199,7 +169,7 @@ static int merge_with_left_record(struct tdb_context *tdb,
  *   0 if left was not a free record
  *   1 if left was free and successfully merged.
  *
- * The currend record is handed in with pointer and fully read record.
+ * The current record is handed in with pointer and fully read record.
  *
  * The left record pointer and struct can be retrieved as result
  * in lp and lr;
@@ -318,33 +288,6 @@ int tdb_free(struct tdb_context *tdb, tdb_off_t offset, 
struct tdb_record *rec)
                goto fail;
        }
 
-#if USE_RIGHT_MERGES
-       /* Look right first (I'm an Australian, dammit) */
-       if (offset + sizeof(*rec) + rec->rec_len + sizeof(*rec) <= 
tdb->map_size) {
-               tdb_off_t right = offset + sizeof(*rec) + rec->rec_len;
-               struct tdb_record r;
-
-               if (tdb->methods->tdb_read(tdb, right, &r, sizeof(r), DOCONV()) 
== -1) {
-                       TDB_LOG((tdb, TDB_DEBUG_FATAL, "tdb_free: right read 
failed at %u\n", right));
-                       goto left;
-               }
-
-               /* If it's free, expand to include it. */
-               if (r.magic == TDB_FREE_MAGIC) {
-                       if (remove_from_freelist(tdb, right, r.next) == -1) {
-                               TDB_LOG((tdb, TDB_DEBUG_FATAL, "tdb_free: right 
free failed at %u\n", right));
-                               goto left;
-                       }
-                       rec->rec_len += sizeof(r) + r.rec_len;
-                       if (update_tailer(tdb, offset, rec) == -1) {
-                               TDB_LOG((tdb, TDB_DEBUG_FATAL, "tdb_free: 
update_tailer failed at %u\n", offset));
-                               goto fail;
-                       }
-               }
-       }
-left:
-#endif
-
        ret = check_merge_with_left_record(tdb, offset, rec, NULL, NULL);
        if (ret == -1) {
                goto fail;
diff --git a/lib/tdb/common/open.c b/lib/tdb/common/open.c
index 8baa7e4..899a2fc 100644
--- a/lib/tdb/common/open.c
+++ b/lib/tdb/common/open.c
@@ -281,10 +281,10 @@ check_local_settings:
 
        if (tdb_mutex_size(tdb) != header->mutex_size) {
                TDB_LOG((tdb, TDB_DEBUG_ERROR, "tdb_mutex_open_ok[%s]: "
-                        "Mutex size changed from %u to %u\n.",
+                        "Mutex size changed from %"PRIu32" to %zu\n.",
                         tdb->name,
-                        (unsigned int)header->mutex_size,
-                        (unsigned int)tdb_mutex_size(tdb)));
+                        header->mutex_size,
+                        tdb_mutex_size(tdb)));
                return false;
        }
 
@@ -297,7 +297,7 @@ _PUBLIC_ struct tdb_context *tdb_open_ex(const char *name, 
int hash_size, int td
                                tdb_hash_func hash_fn)
 {
        int orig_errno = errno;
-       struct tdb_header header;
+       struct tdb_header header = {{0}};
        struct tdb_context *tdb;
        struct stat st;
        int rev = 0;
@@ -309,8 +309,6 @@ _PUBLIC_ struct tdb_context *tdb_open_ex(const char *name, 
int hash_size, int td
        uint32_t magic1, magic2;
        int ret;
 
-       ZERO_STRUCT(header);
-
        if (!(tdb = (struct tdb_context *)calloc(1, sizeof *tdb))) {
                /* Can't log this */
                errno = ENOMEM;
diff --git a/lib/tdb/tools/tdbtorture.c b/lib/tdb/tools/tdbtorture.c
index 3640dc7..7d08d4f 100644
--- a/lib/tdb/tools/tdbtorture.c
+++ b/lib/tdb/tools/tdbtorture.c
@@ -31,7 +31,7 @@ static int in_transaction;
 static int error_count;
 static int always_transaction = 0;
 static int hash_size = 2;
-static int loopnum;
+static unsigned loopnum;
 static int count_pipe;
 static bool mutex = false;
 static struct tdb_logging_context log_ctx;
@@ -93,6 +93,19 @@ static int cull_traverse(struct tdb_context *tdb, TDB_DATA 
key, TDB_DATA dbuf,
        return 0;
 }
 
+static bool do_transaction(void)
+{
+#if TRANSACTION_PROB
+       if (mutex) {
+               return false;
+       }
+       if (random() % TRANSACTION_PROB == 0) {
+               return true;
+       }
+#endif
+       return false;
+}
+
 static void addrec_db(void)
 {
        int klen, dlen;
@@ -118,16 +131,15 @@ static void addrec_db(void)
        }
 #endif
 
-#if TRANSACTION_PROB
        if (in_transaction == 0 &&
-           (always_transaction || random() % TRANSACTION_PROB == 0)) {
+           (always_transaction || do_transaction())) {
                if (tdb_transaction_start(db) != 0) {
                        fatal("tdb_transaction_start failed");
                }
                in_transaction++;
                goto next;
        }
-       if (in_transaction && random() % TRANSACTION_PROB == 0) {
+       if (in_transaction && do_transaction()) {
                if (random() % TRANSACTION_PREPARE_PROB == 0) {
                        if (tdb_transaction_prepare_commit(db) != 0) {
                                fatal("tdb_transaction_prepare_commit failed");
@@ -139,14 +151,13 @@ static void addrec_db(void)
                in_transaction--;
                goto next;
        }
-       if (in_transaction && random() % TRANSACTION_PROB == 0) {
+       if (in_transaction && do_transaction()) {
                if (tdb_transaction_cancel(db) != 0) {
                        fatal("tdb_transaction_cancel failed");
                }
                in_transaction--;
                goto next;
        }
-#endif
 
 #if DELETE_PROB
        if (random() % DELETE_PROB == 0) {
diff --git a/libcli/security/dom_sid.c b/libcli/security/dom_sid.c
index 17ac056..b876fc8 100644
--- a/libcli/security/dom_sid.c
+++ b/libcli/security/dom_sid.c
@@ -20,7 +20,10 @@
    along with this program.  If not, see <http://www.gnu.org/licenses/>.
 */
 
-#include "includes.h"
+#include "replace.h"
+#include "lib/util/data_blob.h"
+#include "system/locale.h"
+#include "lib/util/debug.h"
 #include "librpc/gen_ndr/security.h"
 #include "dom_sid.h"
 
diff --git a/source3/smbd/open.c b/source3/smbd/open.c
index 6bfd5ba..82c640e 100644
--- a/source3/smbd/open.c
+++ b/source3/smbd/open.c
@@ -4962,13 +4962,13 @@ static NTSTATUS lease_match(connection_struct *conn,
                for (j=0; j<d->num_share_modes; j++) {
                        struct share_mode_entry *e = &d->share_modes[j];
                        uint32_t e_lease_type = get_lease_type(d, e);
-                       struct share_mode_lease *l = NULL;
 
                        if (share_mode_stale_pid(d, j)) {
                                continue;
                        }
 
                        if (e->op_type == LEASE_OPLOCK) {
+                               struct share_mode_lease *l = NULL;
                                l = &lck->data->leases[e->lease_idx];
                                if (!smb2_lease_key_equal(&l->lease_key,
                                                          lease_key)) {
diff --git a/source3/smbd/smb2_setinfo.c b/source3/smbd/smb2_setinfo.c
index 9b4620a..11b126a 100644
--- a/source3/smbd/smb2_setinfo.c
+++ b/source3/smbd/smb2_setinfo.c
@@ -203,13 +203,19 @@ static struct tevent_req 
*delay_rename_for_lease_break(struct tevent_req *req,
        for (i=0; i<d->num_share_modes; i++) {
                struct share_mode_entry *e = &d->share_modes[i];
                struct share_mode_lease *l = NULL;
-               uint32_t e_lease_type = get_lease_type(d, e);
+               uint32_t e_lease_type;
                uint32_t break_to;
 
                if (e->op_type != LEASE_OPLOCK) {
                        continue;
                }
 
+               e_lease_type = get_lease_type(d, e);
+
+               if (!(e_lease_type & SMB2_LEASE_HANDLE)) {
+                       continue;
+               }
+
                l = &d->leases[e->lease_idx];
 
                if (smb2_lease_equal(fsp_client_guid(fsp),
@@ -223,10 +229,6 @@ static struct tevent_req 
*delay_rename_for_lease_break(struct tevent_req *req,
                        continue;
                }
 
-               if (!(e_lease_type & SMB2_LEASE_HANDLE)) {
-                       continue;
-               }
-
                delay = true;
                break_to = (e_lease_type & ~SMB2_LEASE_HANDLE);
 
diff --git a/source3/smbd/smbXsrv_client.c b/source3/smbd/smbXsrv_client.c
index 9fc8bda..6db34d7 100644
--- a/source3/smbd/smbXsrv_client.c
+++ b/source3/smbd/smbXsrv_client.c
@@ -133,8 +133,9 @@ static struct db_record *smbXsrv_client_global_fetch_locked(
        rec = dbwrap_fetch_locked(db, mem_ctx, key);
 
        if (rec == NULL) {
+               struct GUID_txt_buf buf;
                DBG_DEBUG("Failed to lock guid [%s], key '%s'\n",
-                         GUID_string(talloc_tos(), client_guid),
+                         GUID_buf_string(client_guid, &buf),
                          hex_encode_talloc(talloc_tos(), key.dptr, key.dsize));
        }
 
@@ -533,13 +534,14 @@ NTSTATUS smbXsrv_client_create(TALLOC_CTX *mem_ctx,
 
        if (DEBUGLVL(DBGLVL_DEBUG)) {
                struct smbXsrv_clientB client_blob;
+               struct GUID_txt_buf buf;
 
                ZERO_STRUCT(client_blob);
                client_blob.version = SMBXSRV_VERSION_0;
                client_blob.info.info0 = client;
 
                DBG_DEBUG("client_guid[%s] stored\n",
-                         GUID_string(talloc_tos(), &global->client_guid));
+                         GUID_buf_string(&global->client_guid, &buf));
                NDR_PRINT_DEBUG(smbXsrv_clientB, &client_blob);
        }
 
@@ -626,9 +628,13 @@ static void smbXsrv_client_connection_pass_loop(struct 
tevent_req *subreq)
 
        if (!GUID_equal(&client->global->client_guid, &pass_info0->client_guid))
        {
+               struct GUID_txt_buf buf1, buf2;
+
                DBG_WARNING("client's client_guid [%s] != passed guid [%s]\n",
-                       GUID_string(talloc_tos(), &client->global->client_guid),
-                       GUID_string(talloc_tos(), &pass_info0->client_guid));
+                           GUID_buf_string(&client->global->client_guid,
+                                           &buf1),
+                           GUID_buf_string(&pass_info0->client_guid,
+                                           &buf2));
                if (DEBUGLVL(DBGLVL_WARNING)) {
                        NDR_PRINT_DEBUG(smbXsrv_connection_passB, &pass_blob);
                }
@@ -700,9 +706,10 @@ NTSTATUS smbXsrv_client_update(struct smbXsrv_client 
*client)
        NTSTATUS status;
 
        if (client->global->db_rec != NULL) {
+               struct GUID_txt_buf buf;
                DBG_ERR("guid [%s]: Called with db_rec != NULL'\n",
-                       GUID_string(talloc_tos(),
-                       &client->global->client_guid));
+                       GUID_buf_string(&client->global->client_guid,
+                                       &buf));
                return NT_STATUS_INTERNAL_ERROR;
        }
 
@@ -716,21 +723,25 @@ NTSTATUS smbXsrv_client_update(struct smbXsrv_client 
*client)
 
        status = smbXsrv_client_global_store(client->global);
        if (!NT_STATUS_IS_OK(status)) {
+               struct GUID_txt_buf buf;
                DBG_ERR("client_guid[%s] store failed - %s\n",
-                       GUID_string(talloc_tos(), &client->global->client_guid),
+                       GUID_buf_string(&client->global->client_guid,
+                                       &buf),
                        nt_errstr(status));
                return status;
        }
 
        if (DEBUGLVL(DBGLVL_DEBUG)) {
                struct smbXsrv_clientB client_blob;
+               struct GUID_txt_buf buf;
 
                ZERO_STRUCT(client_blob);
                client_blob.version = SMBXSRV_VERSION_0;
                client_blob.info.info0 = client;
 
                DBG_DEBUG("client_guid[%s] stored\n",
-                       GUID_string(talloc_tos(), 
&client->global->client_guid));
+                         GUID_buf_string(&client->global->client_guid,
+                                         &buf));
                NDR_PRINT_DEBUG(smbXsrv_clientB, &client_blob);
        }
 
@@ -743,8 +754,10 @@ NTSTATUS smbXsrv_client_remove(struct smbXsrv_client 
*client)
        NTSTATUS status;
 
        if (client->global->db_rec != NULL) {
+               struct GUID_txt_buf buf;
                DBG_ERR("client_guid[%s]: Called with db_rec != NULL'\n",
-                       GUID_string(talloc_tos(), 
&client->global->client_guid));
+                       GUID_buf_string(&client->global->client_guid,
+                                       &buf));
                return NT_STATUS_INTERNAL_ERROR;
        }
 
@@ -762,21 +775,23 @@ NTSTATUS smbXsrv_client_remove(struct smbXsrv_client 
*client)
 
        status = smbXsrv_client_global_remove(client->global);
        if (!NT_STATUS_IS_OK(status)) {
+               struct GUID_txt_buf buf;
                DBG_ERR("client_guid[%s] store failed - %s\n",
-                       GUID_string(talloc_tos(), &client->global->client_guid),
+                       GUID_buf_string(&client->global->client_guid, &buf),
                        nt_errstr(status));
                return status;
        }
 
        if (DEBUGLVL(DBGLVL_DEBUG)) {
                struct smbXsrv_clientB client_blob;
+               struct GUID_txt_buf buf;
 
                ZERO_STRUCT(client_blob);
                client_blob.version = SMBXSRV_VERSION_0;
                client_blob.info.info0 = client;
 
                DBG_DEBUG("client_guid[%s] stored\n",
-                       GUID_string(talloc_tos(), 
&client->global->client_guid));
+                         GUID_buf_string(&client->global->client_guid, &buf));
                NDR_PRINT_DEBUG(smbXsrv_clientB, &client_blob);
        }
 


-- 
Samba Shared Repository

Reply via email to