[SCM] Samba Shared Repository - branch v3-6-test updated

Karolin Seeger kseeger at samba.org
Thu Aug 30 00:25:24 MDT 2012


The branch, v3-6-test has been updated
       via  2d1bf06 Bug #9058] Files not deleted, smbstatus shows "Segmentation fault".
      from  4050cc8 s3-printing: fix bug 9123 lprng job tracking errors

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


- Log -----------------------------------------------------------------
commit 2d1bf06f440c9607ee7b60e65ab33f70b9657770
Author: Jeremy Allison <jra at samba.org>
Date:   Wed Aug 22 11:05:19 2012 -0700

    Bug #9058] Files not deleted, smbstatus shows "Segmentation fault".
    
    Fix smbstatus code dump when a file entry has delete tokens.

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

Summary of changes:
 source3/locking/locking.c |   42 ++++++++++++++++--------------------------
 1 files changed, 16 insertions(+), 26 deletions(-)


Changeset truncated at 500 lines:

diff --git a/source3/locking/locking.c b/source3/locking/locking.c
index 11d1a85..4379847 100644
--- a/source3/locking/locking.c
+++ b/source3/locking/locking.c
@@ -1735,42 +1735,32 @@ struct forall_state {
 static int traverse_fn(struct db_record *rec, void *_state)
 {
 	struct forall_state *state = (struct forall_state *)_state;
-	struct locking_data *data;
-	struct share_mode_entry *shares;
-	const char *sharepath;
-	const char *fname;
-	const char *del_tokens;
-	uint32_t total_del_token_size = 0;
 	int i;
+	struct share_mode_lock *lck;
 
 	/* Ensure this is a locking_key record. */
 	if (rec->key.dsize != sizeof(struct file_id))
 		return 0;
 
-	data = (struct locking_data *)rec->value.dptr;
-	shares = (struct share_mode_entry *)(rec->value.dptr + sizeof(*data));
-	del_tokens = (const char *)rec->value.dptr + sizeof(*data) +
-		data->u.s.num_share_mode_entries*sizeof(*shares);
-
-	for (i = 0; i < data->u.s.num_delete_token_entries; i++) {
-		uint32_t del_token_size;
-		memcpy(&del_token_size, del_tokens, sizeof(uint32_t));
-		total_del_token_size += del_token_size;
-		del_tokens += del_token_size;
+	lck = TALLOC_ZERO_P(talloc_tos(), struct share_mode_lock);
+	if (lck == NULL) {
+		return 0;
 	}
 
-	sharepath = (const char *)rec->value.dptr + sizeof(*data) +
-		data->u.s.num_share_mode_entries*sizeof(*shares) +
-		total_del_token_size;
-	fname = (const char *)rec->value.dptr + sizeof(*data) +
-		data->u.s.num_share_mode_entries*sizeof(*shares) +
-		total_del_token_size +
-		strlen(sharepath) + 1;
+	if (!parse_share_modes(rec->value, lck)) {
+		TALLOC_FREE(lck);
+		DEBUG(1, ("parse_share_modes failed\n"));
+		return 0;
+	}
 
-	for (i=0;i<data->u.s.num_share_mode_entries;i++) {
-		state->fn(&shares[i], sharepath, fname,
-			  state->private_data);
+	for (i=0; i<lck->num_share_modes; i++) {
+		struct share_mode_entry *se = &lck->share_modes[i];
+		state->fn(se,
+			lck->servicepath,
+			lck->base_name,
+			state->private_data);
 	}
+	TALLOC_FREE(lck);
 	return 0;
 }
 


-- 
Samba Shared Repository


More information about the samba-cvs mailing list