[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