[SCM] Samba Shared Repository - branch v3-2-test updated - initial-v3-2-unstable-324-ga1725f4

Jeremy Allison jra at samba.org
Fri Nov 16 02:28:08 GMT 2007


The branch, v3-2-test has been updated
       via  a1725f4ff7ed375808c78ac661b539557748d0a5 (commit)
      from  ad9f14b6dcb05e8fa68b51ff26ff40fc445a4631 (commit)

http://gitweb.samba.org/?p=samba.git;a=shortlog;h=v3-2-test


- Log -----------------------------------------------------------------
commit a1725f4ff7ed375808c78ac661b539557748d0a5
Author: Jeremy Allison <jra at samba.org>
Date:   Thu Nov 15 18:27:26 2007 -0800

    Add MAX_DNS_NAME_LENGTH, remove more pstrings.
    Jeremy.

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

Summary of changes:
 source/lib/replace/replace.h |    4 ++++
 source/lib/util_sock.c       |    4 ++--
 source/libads/dns.c          |    8 ++++----
 source/libgpo/gpo_fetch.c    |   17 ++++++++++++-----
 source/libgpo/gpo_filesync.c |   20 ++++++++++++++------
 source/locking/locking.c     |   18 +++++++++---------
 source/locking/posix.c       |    7 +++++--
 source/smbd/open.c           |    6 +++---
 source/utils/net_lookup.c    |    2 +-
 source/utils/nmblookup.c     |    2 +-
 10 files changed, 55 insertions(+), 33 deletions(-)


Changeset truncated at 500 lines:

diff --git a/source/lib/replace/replace.h b/source/lib/replace/replace.h
index 36a355f..1d1cbc2 100644
--- a/source/lib/replace/replace.h
+++ b/source/lib/replace/replace.h
@@ -540,4 +540,8 @@ typedef int bool;
 #define PATH_MAX 1024
 #endif
 
+#ifndef MAX_DNS_NAME_LENGTH
+#define MAX_DNS_NAME_LENGTH 256 /* Actually 255 but +1 for terminating null. */
+#endif
+
 #endif /* _LIBREPLACE_REPLACE_H */
diff --git a/source/lib/util_sock.c b/source/lib/util_sock.c
index 2815406..a59b1d5 100644
--- a/source/lib/util_sock.c
+++ b/source/lib/util_sock.c
@@ -1802,8 +1802,8 @@ const char *get_peer_name(int fd,
 	socklen_t length = sizeof(ss);
 	const char *p;
 	int ret;
-	char name_buf[HOST_NAME_MAX];
-	char tmp_name[HOST_NAME_MAX];
+	char name_buf[MAX_DNS_NAME_LENGTH];
+	char tmp_name[MAX_DNS_NAME_LENGTH];
 
 	/* reverse lookups can be *very* expensive, and in many
 	   situations won't work because many networks don't link dhcp
diff --git a/source/libads/dns.c b/source/libads/dns.c
index 8aca5b0..cdc4b44 100644
--- a/source/libads/dns.c
+++ b/source/libads/dns.c
@@ -77,7 +77,7 @@ static bool ads_dns_parse_query( TALLOC_CTX *ctx, uint8 *start, uint8 *end,
                           uint8 **ptr, struct dns_query *q )
 {
 	uint8 *p = *ptr;
-	pstring hostname;
+	char hostname[MAX_DNS_NAME_LENGTH];
 	int namelen;
 
 	ZERO_STRUCTP( q );
@@ -115,7 +115,7 @@ static bool ads_dns_parse_rr( TALLOC_CTX *ctx, uint8 *start, uint8 *end,
                        uint8 **ptr, struct dns_rr *rr )
 {
 	uint8 *p = *ptr;
-	pstring hostname;
+	char hostname[MAX_DNS_NAME_LENGTH];
 	int namelen;
 
 	if ( !start || !end || !rr || !*ptr)
@@ -170,7 +170,7 @@ static bool ads_dns_parse_rr_srv( TALLOC_CTX *ctx, uint8 *start, uint8 *end,
 {
 	struct dns_rr rr;
 	uint8 *p;
-	pstring dcname;
+	char dcname[MAX_DNS_NAME_LENGTH];
 	int namelen;
 
 	if ( !start || !end || !srv || !*ptr)
@@ -216,7 +216,7 @@ static bool ads_dns_parse_rr_ns( TALLOC_CTX *ctx, uint8 *start, uint8 *end,
 {
 	struct dns_rr rr;
 	uint8 *p;
-	pstring nsname;
+	char nsname[MAX_DNS_NAME_LENGTH];
 	int namelen;
 
 	if ( !start || !end || !nsrec || !*ptr)
diff --git a/source/libgpo/gpo_fetch.c b/source/libgpo/gpo_fetch.c
index 6be986d..d9995ec 100644
--- a/source/libgpo/gpo_fetch.c
+++ b/source/libgpo/gpo_fetch.c
@@ -31,7 +31,7 @@ NTSTATUS gpo_explode_filesyspath(TALLOC_CTX *mem_ctx,
 				 char **unix_path)
 {
 	fstring tok;
-	pstring path;
+	char *path = NULL;
 
 	*server = NULL;
 	*service = NULL;
@@ -63,15 +63,22 @@ NTSTATUS gpo_explode_filesyspath(TALLOC_CTX *mem_ctx,
 		return NT_STATUS_NO_MEMORY;
 	}
 
-	pstrcpy(path, lock_path(GPO_CACHE_DIR));
-	pstrcat(path, "/");
-	pstrcat(path, file_sys_path);
-	pstring_sub(path, "\\", "/");
+	if ((path = talloc_asprintf(mem_ctx,
+					"%s/%s",
+					lock_path(GPO_CACHE_DIR),
+					file_sys_path)) == NULL) {
+		return NT_STATUS_NO_MEMORY;
+	}
+	path = talloc_string_sub(mem_ctx, path, "\\", "/");
+	if (!path) {
+		return NT_STATUS_NO_MEMORY;
+	}
 
 	if ((*unix_path = talloc_strdup(mem_ctx, path)) == NULL) {
 		return NT_STATUS_NO_MEMORY;
 	}
 
+	TALLOC_FREE(path);
 	return NT_STATUS_OK;
 }
 
diff --git a/source/libgpo/gpo_filesync.c b/source/libgpo/gpo_filesync.c
index c4b6521..9f6557e 100644
--- a/source/libgpo/gpo_filesync.c
+++ b/source/libgpo/gpo_filesync.c
@@ -24,7 +24,7 @@ struct sync_context {
 	struct cli_state *cli;
 	char *remote_path;
 	char *local_path;
-	pstring mask;
+	char *mask;
 	uint16_t attribute;
 };
 
@@ -171,9 +171,13 @@ static void gpo_sync_func(const char *mnt,
 		old_unix_dir = ctx->local_path;
 		ctx->local_path = talloc_strdup(ctx->mem_ctx, unix_dir);
 
-		pstrcpy(ctx->mask, nt_dir);
-		pstrcat(ctx->mask, "\\*");
-
+		ctx->mask = talloc_asprintf(ctx->mem_ctx,
+					"%s\\*",
+					nt_dir);
+		if (!ctx->local_path || !ctx->mask) {
+			DEBUG(0,("gpo_sync_func: ENOMEM\n"));
+			return;
+		}
 		if (!gpo_sync_files(ctx)) {
 			DEBUG(0,("could not sync files\n"));
 		}
@@ -219,8 +223,12 @@ NTSTATUS gpo_sync_directories(TALLOC_CTX *mem_ctx,
 	ctx.local_path	= CONST_DISCARD(char *, local_path);
 	ctx.attribute 	= (aSYSTEM | aHIDDEN | aDIR);
 
-	pstrcpy(ctx.mask, nt_path);
-	pstrcat(ctx.mask, "\\*");
+	ctx.mask = talloc_asprintf(mem_ctx,
+				"%s\\*",
+				nt_path);
+	if (!ctx.mask) {
+		return NT_STATUS_NO_MEMORY;
+	}
 
 	if (!gpo_sync_files(&ctx)) {
 		return NT_STATUS_NO_SUCH_FILE;
diff --git a/source/locking/locking.c b/source/locking/locking.c
index aae297e..8d511e9 100644
--- a/source/locking/locking.c
+++ b/source/locking/locking.c
@@ -444,11 +444,9 @@ static TDB_DATA locking_key(struct file_id id)
  Print out a share mode.
 ********************************************************************/
 
-char *share_mode_str(int num, struct share_mode_entry *e)
+char *share_mode_str(TALLOC_CTX *ctx, int num, struct share_mode_entry *e)
 {
-	static pstring share_str;
-
-	slprintf(share_str, sizeof(share_str)-1, "share_mode_entry[%d]: %s "
+	return talloc_asprintf(ctx, "share_mode_entry[%d]: %s "
 		 "pid = %s, share_access = 0x%x, private_options = 0x%x, "
 		 "access_mask = 0x%x, mid = 0x%x, type= 0x%x, gen_id = %lu, "
 		 "uid = %u, flags = %u, file_id %s",
@@ -459,8 +457,6 @@ char *share_mode_str(int num, struct share_mode_entry *e)
 		 e->access_mask, e->op_mid, e->op_type, e->share_file_id,
 		 (unsigned int)e->uid, (unsigned int)e->flags,
 		 file_id_string_tos(&e->id));
-
-	return share_str;
 }
 
 /*******************************************************************
@@ -476,10 +472,12 @@ static void print_share_mode_table(struct locking_data *data)
 
 	for (i = 0; i < num_share_modes; i++) {
 		struct share_mode_entry entry;
+		char *str = share_mode_str(NULL, i, &entry);
 
 		memcpy(&entry, &shares[i], sizeof(struct share_mode_entry));
 		DEBUG(10,("print_share_mode_table: %s\n",
-			  share_mode_str(i, &entry)));
+			  str ? str : ""));
+		TALLOC_FREE(str);
 	}
 }
 
@@ -603,14 +601,16 @@ static bool parse_share_modes(TDB_DATA dbuf, struct share_mode_lock *lck)
 
 	for (i = 0; i < lck->num_share_modes; i++) {
 		struct share_mode_entry *entry_p = &lck->share_modes[i];
+		char *str = share_mode_str(NULL, i, entry_p);
 		DEBUG(10,("parse_share_modes: %s\n",
-			  share_mode_str(i, entry_p) ));
+			str ? str : ""));
 		if (!process_exists(entry_p->pid)) {
 			DEBUG(10,("parse_share_modes: deleted %s\n",
-				  share_mode_str(i, entry_p) ));
+				str ? str : ""));
 			entry_p->op_type = UNUSED_SHARE_MODE_ENTRY;
 			lck->modified = True;
 		}
+		TALLOC_FREE(str);
 	}
 
 	return True;
diff --git a/source/locking/posix.c b/source/locking/posix.c
index 135e204..37cfa04 100644
--- a/source/locking/posix.c
+++ b/source/locking/posix.c
@@ -933,9 +933,12 @@ new: start=%.0f,size=%.0f\n", (double)l_curr->start, (double)l_curr->size,
 				 * This logic case should never happen. Ensure this is the
 				 * case by forcing an abort.... Remove in production.
 				 */
-				pstring msg;
+				char *msg = NULL;
 
-				slprintf(msg, sizeof(msg)-1, "logic flaw in cases: l_curr: start = %.0f, size = %.0f : \
+				/* Don't check if alloc succeeds here - we're
+				 * forcing a core dump anyway. */
+
+				asprintf(&msg, "logic flaw in cases: l_curr: start = %.0f, size = %.0f : \
 lock: start = %.0f, size = %.0f", (double)l_curr->start, (double)l_curr->size, (double)lock->start, (double)lock->size );
 
 				smb_panic(msg);
diff --git a/source/smbd/open.c b/source/smbd/open.c
index 53fc1be..6dc979c 100644
--- a/source/smbd/open.c
+++ b/source/smbd/open.c
@@ -521,7 +521,7 @@ static void validate_my_share_entries(int num,
 		char *str = talloc_asprintf(talloc_tos(),
 			"Got a deferred entry without a request: "
 			"PANIC: %s\n",
-			share_mode_str(num, share_entry));
+			share_mode_str(talloc_tos(), num, share_entry));
 		smb_panic(str);
 	}
 
@@ -533,7 +533,7 @@ static void validate_my_share_entries(int num,
 			    share_entry->share_file_id);
 	if (!fsp) {
 		DEBUG(0,("validate_my_share_entries: PANIC : %s\n",
-			 share_mode_str(num, share_entry) ));
+			 share_mode_str(talloc_tos(), num, share_entry) ));
 		smb_panic("validate_my_share_entries: Cannot match a "
 			  "share entry with an open file\n");
 	}
@@ -560,7 +560,7 @@ static void validate_my_share_entries(int num,
 	{
 		char *str;
 		DEBUG(0,("validate_my_share_entries: PANIC : %s\n",
-			 share_mode_str(num, share_entry) ));
+			 share_mode_str(talloc_tos(), num, share_entry) ));
 		str = talloc_asprintf(talloc_tos(),
 			"validate_my_share_entries: "
 			"file %s, oplock_type = 0x%x, op_type = 0x%x\n",
diff --git a/source/utils/net_lookup.c b/source/utils/net_lookup.c
index 5e3551b..9060f83 100644
--- a/source/utils/net_lookup.c
+++ b/source/utils/net_lookup.c
@@ -99,7 +99,7 @@ static int net_lookup_ldap(int argc, const char **argv)
 	TALLOC_CTX *ctx;
 	NTSTATUS status;
 	int ret;
-	char h_name[HOST_NAME_MAX];
+	char h_name[MAX_DNS_NAME_LENGTH];
 
 	if (argc > 0)
 		domain = argv[0];
diff --git a/source/utils/nmblookup.c b/source/utils/nmblookup.c
index 4ce6968..dd2dddb 100644
--- a/source/utils/nmblookup.c
+++ b/source/utils/nmblookup.c
@@ -197,7 +197,7 @@ static bool query_one(const char *lookup, unsigned int lookup_type)
 	for (j=0;j<count;j++) {
 		char addr[INET6_ADDRSTRLEN];
 		if (translate_addresses) {
-			char h_name[HOST_NAME_MAX];
+			char h_name[MAX_DNS_NAME_LENGTH];
 			h_name[0] = '\0';
 			if (sys_getnameinfo((const struct sockaddr *)&ip_list[j],
 					sizeof(struct sockaddr_storage),


-- 
Samba Shared Repository


More information about the samba-cvs mailing list