summaryrefslogtreecommitdiff
path: root/source3/locking
diff options
context:
space:
mode:
authorJeremy Allison <jra@samba.org>2006-01-12 22:17:54 +0000
committerGerald (Jerry) Carter <jerry@samba.org>2007-10-10 11:06:05 -0500
commit33174847994128387a36a8103f147fe5a96c15fd (patch)
tree72ef01910bac6df965a9e0554c235bab145fa209 /source3/locking
parent80f2848260d5c9be70f4a037ca3ea5c5b6a76166 (diff)
downloadsamba-33174847994128387a36a8103f147fe5a96c15fd.tar.gz
samba-33174847994128387a36a8103f147fe5a96c15fd.tar.bz2
samba-33174847994128387a36a8103f147fe5a96c15fd.zip
r12877: Stop passing structs around in smb messages, instead
always linearize into little-endian. Should fix all Solaris issues with this, plus provide a cleaner base moving forward for cluster-aware Samba where smbd's can communicate across different compilers/architectures (eventually these message will have to go cross-machine). Jeremy. (This used to be commit d01824b78576a034428e1cef73868d1169057991)
Diffstat (limited to 'source3/locking')
-rw-r--r--source3/locking/locking.c17
1 files changed, 10 insertions, 7 deletions
diff --git a/source3/locking/locking.c b/source3/locking/locking.c
index 07377831b4..d9737895ba 100644
--- a/source3/locking/locking.c
+++ b/source3/locking/locking.c
@@ -662,10 +662,10 @@ BOOL rename_share_filename(struct share_mode_lock *lck,
const char *servicepath,
const char *newname)
{
- struct file_renamed_message *frm = NULL;
size_t sp_len;
size_t fn_len;
size_t msg_len;
+ char *frm = NULL;
int i;
if (!lck) {
@@ -694,20 +694,21 @@ BOOL rename_share_filename(struct share_mode_lock *lck,
sp_len = strlen(lck->servicepath);
fn_len = strlen(lck->filename);
- msg_len = sizeof(*frm) + sp_len + 1 + fn_len + 1;
+ msg_len = MSG_FILE_RENAMED_MIN_SIZE + sp_len + 1 + fn_len + 1;
/* Set up the name changed message. */
frm = TALLOC(lck, msg_len);
if (!frm) {
return False;
}
- frm->dev = lck->dev;
- frm->inode = lck->ino;
+
+ SDEV_T_VAL(frm,0,lck->dev);
+ SINO_T_VAL(frm,8,lck->ino);
DEBUG(10,("rename_share_filename: msg_len = %d\n", msg_len ));
- safe_strcpy(&frm->names[0], lck->servicepath, sp_len);
- safe_strcpy(&frm->names[sp_len + 1], lck->filename, fn_len);
+ safe_strcpy(&frm[16], lck->servicepath, sp_len);
+ safe_strcpy(&frm[16 + sp_len + 1], lck->filename, fn_len);
/* Send the messages. */
for (i=0; i<lck->num_share_modes; i++) {
@@ -723,11 +724,13 @@ BOOL rename_share_filename(struct share_mode_lock *lck,
DEBUG(10,("rename_share_filename: sending rename message to pid %u "
"dev %x, inode %.0f sharepath %s newname %s\n",
(unsigned int)procid_to_pid(&se->pid),
- (unsigned int)frm->dev, (double)frm->inode,
+ (unsigned int)lck->dev, (double)lck->ino,
lck->servicepath, lck->filename ));
+ become_root();
message_send_pid(se->pid, MSG_SMB_FILE_RENAME,
frm, msg_len, True);
+ unbecome_root();
}
return True;