diff options
Diffstat (limited to 'source3/smbd')
-rw-r--r-- | source3/smbd/nttrans.c | 14 | ||||
-rw-r--r-- | source3/smbd/process.c | 27 |
2 files changed, 34 insertions, 7 deletions
diff --git a/source3/smbd/nttrans.c b/source3/smbd/nttrans.c index a149374114..bb0436aab3 100644 --- a/source3/smbd/nttrans.c +++ b/source3/smbd/nttrans.c @@ -1924,7 +1924,13 @@ static int call_nt_transact_query_security_desc(connection_struct *conn, * Init the parse struct we will marshall into. */ - prs_init(&pd, sec_desc_size, 4, MARSHALL); + prs_init(&pd, 0, 4, MARSHALL); + + /* + * copy the data out of the marshalled structure + */ + + prs_give_memory( &pd, data, (uint32)sec_desc_size, False); /* * Finally, linearize into the outgoing buffer. @@ -1944,12 +1950,6 @@ security descriptor.\n")); } /* - * copy the data out of the marshalled structure - */ - - prs_give_memory( &pd, data, (uint32)sec_desc_size, False); - - /* * Now we can delete the security descriptor. */ diff --git a/source3/smbd/process.c b/source3/smbd/process.c index 9e5b7b1477..74ec3b64db 100644 --- a/source3/smbd/process.c +++ b/source3/smbd/process.c @@ -408,6 +408,29 @@ struct smb_message_struct {SMBgetmac,"SMBgetmac",NULL,AS_GUEST} }; +/******************************************************************* +dump a prs to a file + ********************************************************************/ +static void smb_dump(char *name, int type, char *data, ssize_t len) +{ + int fd, i; + pstring fname; + if (DEBUGLEVEL < 50) return; + + if (len < 4) len = smb_buflen(data); + for (i=1;i<100;i++) { + slprintf(fname,sizeof(fname), "/tmp/%s.%d.%s", name, i, + type ? "req" : "resp"); + fd = open(fname, O_WRONLY|O_CREAT|O_EXCL, 0644); + if (fd != -1 || errno != EEXIST) break; + } + if (fd != -1) { + write(fd, data, len); + close(fd); + DEBUG(0,("created %s len %d\n", fname, len)); + } +} + /**************************************************************************** do a switch on the message type, and return the response size @@ -445,12 +468,14 @@ static int switch_message(int type,char *inbuf,char *outbuf,int size,int bufsize if (match == num_smb_messages) { DEBUG(0,("Unknown message type %d!\n",type)); + smb_dump("Unknown", 1, inbuf, size); outsize = reply_unknown(inbuf,outbuf); } else { DEBUG(3,("switch message %s (pid %d)\n",smb_messages[match].name,(int)pid)); + smb_dump(smb_messages[match].name, 1, inbuf, size); if(global_oplock_break) { int flags = smb_messages[match].flags; @@ -548,6 +573,8 @@ static int switch_message(int type,char *inbuf,char *outbuf,int size,int bufsize } } + smb_dump(smb_messages[match].name, 0, outbuf, outsize); + return(outsize); } |