[SCM] Samba Shared Repository - branch master updated

Jeremy Allison jra at samba.org
Thu Apr 16 15:44:04 MDT 2015


The branch, master has been updated
       via  13a2011 Change all uses of uint16/uint32/uint64 to uintXX_t in smb.h.
       via  883aa31 winbind: Avoid a few talloc_tos() in winbindd_cache.c
       via  6a19b3d winbind: Use tdb_parse_record in wcache_fetch_seqnum
      from  4491817 s3: smbd: Make sure we do not pass paths with ./ on the front to VFS routines.

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


- Log -----------------------------------------------------------------
commit 13a2011a05ce577e039b00147002c9e7a98355b6
Author: Richard Sharpe <rsharpe at samba.org>
Date:   Tue Apr 14 07:02:37 2015 -0700

    Change all uses of uint16/uint32/uint64 to uintXX_t in smb.h.
    
    Signed-off-by: Richard Sharpe <rsharpe at samba.org>
    Reviewed-by: Jeremy Allison <jra at samba.org>
    
    Autobuild-User(master): Jeremy Allison <jra at samba.org>
    Autobuild-Date(master): Thu Apr 16 23:44:00 CEST 2015 on sn-devel-104

commit 883aa314b88233bb97a33c9607865cfc612b3091
Author: Volker Lendecke <vl at samba.org>
Date:   Tue Apr 14 10:17:20 2015 +0000

    winbind: Avoid a few talloc_tos() in winbindd_cache.c
    
    Signed-off-by: Volker Lendecke <vl at samba.org>
    Reviewed-by: Jeremy Allison <jra at samba.org>

commit 6a19b3dea8655eb8fce3b16ab0cd99eded00410c
Author: Volker Lendecke <vl at samba.org>
Date:   Tue Apr 14 10:06:55 2015 +0000

    winbind: Use tdb_parse_record in wcache_fetch_seqnum
    
    This removes a malloc use
    
    Signed-off-by: Volker Lendecke <vl at samba.org>
    Reviewed-by: Jeremy Allison <jra at samba.org>

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

Summary of changes:
 source3/include/smb.h             | 32 ++++++++---------
 source3/winbindd/winbindd_cache.c | 75 ++++++++++++++++++++-------------------
 2 files changed, 54 insertions(+), 53 deletions(-)


Changeset truncated at 500 lines:

diff --git a/source3/include/smb.h b/source3/include/smb.h
index 9c5e1ac..7026cb4 100644
--- a/source3/include/smb.h
+++ b/source3/include/smb.h
@@ -191,20 +191,20 @@ struct interface {
 
 Offset  Data			length.
 0	struct server_id pid	4
-4	uint16 op_mid		8
-12	uint16 op_type		2
-14	uint32 access_mask	4
-18	uint32 share_access	4
-22	uint32 private_options	4
-26	uint32 time sec		4
-30	uint32 time usec	4
-34	uint64 dev		8 bytes
-42	uint64 inode		8 bytes
-50	uint64 extid		8 bytes
+4	uint16_t op_mid		8
+12	uint16_t op_type	2
+14	uint32_t access_mask	4
+18	uint32_t share_access	4
+22	uint32_t private_options	4
+26	uint32_t time sec		4
+30	uint32_t time usec	4
+34	uint64_t dev		8 bytes
+42	uint64_t inode		8 bytes
+50	uint64_t extid		8 bytes
 58	unsigned long file_id	4 bytes
-62	uint32 uid		4 bytes
-66	uint16 flags		2 bytes
-68	uint32 name_hash	4 bytes
+62	uint32_t uid		4 bytes
+66	uint16_t flags		2 bytes
+68	uint32_t name_hash	4 bytes
 72
 
 */
@@ -801,9 +801,9 @@ enum file_close_type {NORMAL_CLOSE=0,SHUTDOWN_CLOSE,ERROR_CLOSE};
 #define SAMBA_EXTENDED_INFO_MAGIC 0x536d4261 /* "SmBa" */
 #define SAMBA_EXTENDED_INFO_VERSION_STRING_LENGTH 28
 struct smb_extended_info {
-	uint32 samba_magic;		/* Always SAMBA_EXTRA_INFO_MAGIC */
-	uint32 samba_version;		/* Major/Minor/Release/Revision */
-	uint32 samba_subversion;	/* Prerelease/RC/Vendor patch */
+	uint32_t samba_magic;		/* Always SAMBA_EXTRA_INFO_MAGIC */
+	uint32_t samba_version;		/* Major/Minor/Release/Revision */
+	uint32_t samba_subversion;	/* Prerelease/RC/Vendor patch */
 	NTTIME samba_gitcommitdate;
 	char   samba_version_string[SAMBA_EXTENDED_INFO_VERSION_STRING_LENGTH];
 };
diff --git a/source3/winbindd/winbindd_cache.c b/source3/winbindd/winbindd_cache.c
index 90270ba..def5fa0 100644
--- a/source3/winbindd/winbindd_cache.c
+++ b/source3/winbindd/winbindd_cache.c
@@ -398,43 +398,48 @@ static bool wcache_server_down(struct winbindd_domain *domain)
 	return ret;
 }
 
-static bool wcache_fetch_seqnum(const char *domain_name, uint32_t *seqnum,
-				uint32_t *last_seq_check)
+struct wcache_seqnum_state {
+	uint32_t *seqnum;
+	uint32_t *last_seq_check;
+};
+
+static int wcache_seqnum_parser(TDB_DATA key, TDB_DATA data,
+				void *private_data)
 {
-	char *key;
-	TDB_DATA data;
+	struct wcache_seqnum_state *state = private_data;
 
-	if (wcache->tdb == NULL) {
-		DEBUG(10,("wcache_fetch_seqnum: tdb == NULL\n"));
-		return false;
+	if (data.dsize != 8) {
+		DEBUG(10, ("wcache_fetch_seqnum: invalid data size %d\n",
+			   (int)data.dsize));
+		return -1;
 	}
 
-	key = talloc_asprintf(talloc_tos(), "SEQNUM/%s", domain_name);
-	if (key == NULL) {
-		DEBUG(10, ("talloc failed\n"));
-		return false;
-	}
+	*state->seqnum = IVAL(data.dptr, 0);
+	*state->last_seq_check = IVAL(data.dptr, 4);
+	return 0;
+}
 
-	data = tdb_fetch_bystring(wcache->tdb, key);
-	TALLOC_FREE(key);
+static bool wcache_fetch_seqnum(const char *domain_name, uint32_t *seqnum,
+				uint32_t *last_seq_check)
+{
+	struct wcache_seqnum_state state = {
+		.seqnum = seqnum, .last_seq_check = last_seq_check
+	};
+	size_t len = strlen(domain_name);
+	char keystr[len+8];
+	TDB_DATA key = { .dptr = (uint8_t *)keystr, .dsize = sizeof(keystr) };
+	int ret;
 
-	if (data.dptr == NULL) {
-		DEBUG(10, ("wcache_fetch_seqnum: %s not found\n",
-			   domain_name));
-		return false;
-	}
-	if (data.dsize != 8) {
-		DEBUG(10, ("wcache_fetch_seqnum: invalid data size %d\n",
-			   (int)data.dsize));
-		SAFE_FREE(data.dptr);
+	if (wcache->tdb == NULL) {
+		DEBUG(10,("wcache_fetch_seqnum: tdb == NULL\n"));
 		return false;
 	}
 
-	*seqnum = IVAL(data.dptr, 0);
-	*last_seq_check = IVAL(data.dptr, 4);
-	SAFE_FREE(data.dptr);
+	snprintf(keystr, sizeof(keystr),  "SEQNUM/%s", domain_name);
 
-	return true;
+	ret = tdb_parse_record(wcache->tdb, key, wcache_seqnum_parser,
+			       &state);
+	return (ret == 0);
 }
 
 static NTSTATUS fetch_cache_seqnum( struct winbindd_domain *domain, time_t now )
@@ -467,7 +472,9 @@ static NTSTATUS fetch_cache_seqnum( struct winbindd_domain *domain, time_t now )
 bool wcache_store_seqnum(const char *domain_name, uint32_t seqnum,
 			 time_t last_seq_check)
 {
-	char *key_str;
+	size_t len = strlen(domain_name);
+	char keystr[len+8];
+	TDB_DATA key = { .dptr = (uint8_t *)keystr, .dsize = sizeof(keystr) };
 	uint8_t buf[8];
 	int ret;
 
@@ -476,22 +483,16 @@ bool wcache_store_seqnum(const char *domain_name, uint32_t seqnum,
 		return false;
 	}
 
-	key_str = talloc_asprintf(talloc_tos(), "SEQNUM/%s", domain_name);
-	if (key_str == NULL) {
-		DEBUG(10, ("talloc_asprintf failed\n"));
-		return false;
-	}
+	snprintf(keystr, sizeof(keystr),  "SEQNUM/%s", domain_name);
 
 	SIVAL(buf, 0, seqnum);
 	SIVAL(buf, 4, last_seq_check);
 
-	ret = tdb_store_bystring(wcache->tdb, key_str,
-				 make_tdb_data(buf, sizeof(buf)), TDB_REPLACE);
-	TALLOC_FREE(key_str);
+	ret = tdb_store(wcache->tdb, key, make_tdb_data(buf, sizeof(buf)),
+			TDB_REPLACE);
 	if (ret != 0) {
 		DEBUG(10, ("tdb_store_bystring failed: %s\n",
 			   tdb_errorstr(wcache->tdb)));
-		TALLOC_FREE(key_str);
 		return false;
 	}
 


-- 
Samba Shared Repository


More information about the samba-cvs mailing list