X-Git-Url: http://git.samba.org/samba.git/?p=nivanova%2Fsamba-autobuild%2F.git;a=blobdiff_plain;f=source3%2Fsmbd%2Fmessage.c;h=63b08e126203148718bd3552f9a82b797ba26566;hp=62df5c37ebfbb7a98af0e4350b99b5f2b6f800a0;hb=ad0a07c531fadd1639c5298951cfaf5cfe0cb10e;hpb=20796bcf57a7f5e1921dc12e0568221f985fe4f2 diff --git a/source3/smbd/message.c b/source3/smbd/message.c index 62df5c37ebf..63b08e12620 100644 --- a/source3/smbd/message.c +++ b/source3/smbd/message.c @@ -23,6 +23,9 @@ #include "includes.h" +#include "smbd/smbd.h" +#include "smbd/globals.h" +#include "smbprofile.h" extern userdom_struct current_user_info; @@ -32,8 +35,6 @@ struct msg_state { char *msg; }; -static struct msg_state *smbd_msg_state; - /**************************************************************************** Deliver the message. ****************************************************************************/ @@ -60,7 +61,7 @@ static void msg_deliver(struct msg_state *state) if (!name) { goto done; } - fd = smb_mkstemp(name); + fd = mkstemp(name); if (fd == -1) { DEBUG(1, ("can't open message file %s: %s\n", name, @@ -74,7 +75,7 @@ static void msg_deliver(struct msg_state *state) if (!convert_string_talloc(talloc_tos(), CH_DOS, CH_UNIX, state->msg, talloc_get_size(state->msg), (void *)&msg, - &len, true)) { + &len)) { DEBUG(3, ("Conversion failed, delivering message in DOS " "codepage format\n")); msg = state->msg; @@ -140,31 +141,29 @@ void reply_sends(struct smb_request *req) { struct msg_state *state; int len; - char *msg; - char *p; + const char *msg; + const char *p; START_PROFILE(SMBsends); if (!(*lp_msg_command())) { - reply_doserror(req, ERRSRV, ERRmsgoff); + reply_nterror(req, NT_STATUS_REQUEST_NOT_ACCEPTED); END_PROFILE(SMBsends); return; } state = talloc(talloc_tos(), struct msg_state); - p = smb_buf(req->inbuf)+1; - p += srvstr_pull_buf_talloc( - state, (char *)req->inbuf, req->flags2, &state->from, p, - STR_ASCII|STR_TERMINATE) + 1; - p += srvstr_pull_buf_talloc( - state, (char *)req->inbuf, req->flags2, &state->to, p, - STR_ASCII|STR_TERMINATE) + 1; + p = (const char *)req->buf + 1; + p += srvstr_pull_req_talloc( + state, req, &state->from, p, STR_ASCII|STR_TERMINATE) + 1; + p += srvstr_pull_req_talloc( + state, req, &state->to, p, STR_ASCII|STR_TERMINATE) + 1; msg = p; len = SVAL(msg,0); - len = MIN(len, smb_bufrem(req->inbuf, msg+2)); + len = MIN(len, smbreq_bufrem(req, msg+2)); state->msg = talloc_array(state, char, len); @@ -191,19 +190,19 @@ void reply_sends(struct smb_request *req) void reply_sendstrt(struct smb_request *req) { - char *p; + const char *p; START_PROFILE(SMBsendstrt); if (!(*lp_msg_command())) { - reply_doserror(req, ERRSRV, ERRmsgoff); + reply_nterror(req, NT_STATUS_REQUEST_NOT_ACCEPTED); END_PROFILE(SMBsendstrt); return; } TALLOC_FREE(smbd_msg_state); - smbd_msg_state = TALLOC_ZERO_P(NULL, struct msg_state); + smbd_msg_state = talloc_zero(NULL, struct msg_state); if (smbd_msg_state == NULL) { reply_nterror(req, NT_STATUS_NO_MEMORY); @@ -211,13 +210,13 @@ void reply_sendstrt(struct smb_request *req) return; } - p = smb_buf(req->inbuf)+1; - p += srvstr_pull_buf_talloc( - smbd_msg_state, (char *)req->inbuf, req->flags2, - &smbd_msg_state->from, p, STR_ASCII|STR_TERMINATE) + 1; - p += srvstr_pull_buf_talloc( - smbd_msg_state, (char *)req->inbuf, req->flags2, - &smbd_msg_state->to, p, STR_ASCII|STR_TERMINATE) + 1; + p = (const char *)req->buf+1; + p += srvstr_pull_req_talloc( + smbd_msg_state, req, &smbd_msg_state->from, p, + STR_ASCII|STR_TERMINATE) + 1; + p += srvstr_pull_req_talloc( + smbd_msg_state, req, &smbd_msg_state->to, p, + STR_ASCII|STR_TERMINATE) + 1; DEBUG( 3, ( "SMBsendstrt (from %s to %s)\n", smbd_msg_state->from, smbd_msg_state->to ) ); @@ -236,31 +235,31 @@ void reply_sendstrt(struct smb_request *req) void reply_sendtxt(struct smb_request *req) { int len; - char *msg; + const char *msg; char *tmp; size_t old_len; START_PROFILE(SMBsendtxt); if (! (*lp_msg_command())) { - reply_doserror(req, ERRSRV, ERRmsgoff); + reply_nterror(req, NT_STATUS_REQUEST_NOT_ACCEPTED); END_PROFILE(SMBsendtxt); return; } - if (smbd_msg_state == NULL) { + if ((smbd_msg_state == NULL) || (req->buflen < 3)) { reply_nterror(req, NT_STATUS_INVALID_PARAMETER); END_PROFILE(SMBsendtxt); return; } - msg = smb_buf(req->inbuf) + 1; + msg = (const char *)req->buf + 1; old_len = talloc_get_size(smbd_msg_state->msg); - len = MIN(SVAL(msg, 0), smb_bufrem(req->inbuf, msg+2)); + len = MIN(SVAL(msg, 0), smbreq_bufrem(req, msg+2)); - tmp = TALLOC_REALLOC_ARRAY(smbd_msg_state, smbd_msg_state->msg, + tmp = talloc_realloc(smbd_msg_state, smbd_msg_state->msg, char, old_len + len); if (tmp == NULL) { @@ -291,7 +290,7 @@ void reply_sendend(struct smb_request *req) START_PROFILE(SMBsendend); if (! (*lp_msg_command())) { - reply_doserror(req, ERRSRV, ERRmsgoff); + reply_nterror(req, NT_STATUS_REQUEST_NOT_ACCEPTED); END_PROFILE(SMBsendend); return; }