diff options
-rw-r--r-- | source3/smbd/notify.c | 16 | ||||
-rw-r--r-- | source3/smbd/nttrans.c | 72 |
2 files changed, 39 insertions, 49 deletions
diff --git a/source3/smbd/notify.c b/source3/smbd/notify.c index 6c77f4c270..8474ca6446 100644 --- a/source3/smbd/notify.c +++ b/source3/smbd/notify.c @@ -24,7 +24,7 @@ struct notify_change_request { struct notify_change_request *prev, *next; struct files_struct *fsp; /* backpointer for cancel by mid */ - char request_buf[smb_size]; + uint8 request_buf[smb_size]; uint32 filter; uint32 max_param; struct notify_mid_map *mid_map; @@ -128,14 +128,14 @@ static BOOL notify_marshall_changes(int num_changes, Setup the common parts of the return packet and send it. *****************************************************************************/ -static void change_notify_reply_packet(const char *request_buf, +static void change_notify_reply_packet(const uint8 *request_buf, NTSTATUS error_code) { - const char *inbuf = request_buf; + const char *inbuf = (char *)request_buf; char outbuf[smb_size+38]; memset(outbuf, '\0', sizeof(outbuf)); - construct_reply_common(request_buf, outbuf); + construct_reply_common(inbuf, outbuf); ERROR_NT(error_code); @@ -151,7 +151,7 @@ static void change_notify_reply_packet(const char *request_buf, "failed."); } -void change_notify_reply(const char *request_buf, uint32 max_param, +void change_notify_reply(const uint8 *request_buf, uint32 max_param, struct notify_change_buf *notify_buf) { char *outbuf = NULL; @@ -183,9 +183,9 @@ void change_notify_reply(const char *request_buf, uint32 max_param, goto done; } - construct_reply_common(request_buf, outbuf); + construct_reply_common((char *)request_buf, outbuf); - if (send_nt_replies(request_buf, outbuf, buflen, NT_STATUS_OK, prs_data_p(&ps), + if (send_nt_replies((char *)request_buf, outbuf, buflen, NT_STATUS_OK, prs_data_p(&ps), prs_offset(&ps), NULL, 0) == -1) { exit_server("change_notify_reply_packet: send_smb failed."); } @@ -238,7 +238,7 @@ NTSTATUS change_notify_create(struct files_struct *fsp, uint32 filter, return status; } -NTSTATUS change_notify_add_request(const char *inbuf, uint32 max_param, +NTSTATUS change_notify_add_request(const uint8 *inbuf, uint32 max_param, uint32 filter, BOOL recursive, struct files_struct *fsp) { diff --git a/source3/smbd/nttrans.c b/source3/smbd/nttrans.c index 970703a2d6..401fdca929 100644 --- a/source3/smbd/nttrans.c +++ b/source3/smbd/nttrans.c @@ -2071,15 +2071,15 @@ int reply_ntrename(connection_struct *conn, don't allow a directory to be opened. ****************************************************************************/ -static int call_nt_transact_notify_change(connection_struct *conn, char *inbuf, - char *outbuf, int length, - int bufsize, - uint16 **ppsetup, uint32 setup_count, - char **ppparams, - uint32 parameter_count, - char **ppdata, uint32 data_count, - uint32 max_data_count, - uint32 max_param_count) +static void call_nt_transact_notify_change(connection_struct *conn, + struct smb_request *req, + uint16 **ppsetup, + uint32 setup_count, + char **ppparams, + uint32 parameter_count, + char **ppdata, uint32 data_count, + uint32 max_data_count, + uint32 max_param_count) { uint16 *setup = *ppsetup; files_struct *fsp; @@ -2088,7 +2088,8 @@ static int call_nt_transact_notify_change(connection_struct *conn, char *inbuf, BOOL recursive; if(setup_count < 6) { - return ERROR_DOS(ERRDOS,ERRbadfunc); + reply_doserror(req, ERRDOS, ERRbadfunc); + return; } fsp = file_fsp(SVAL(setup,4)); @@ -2098,14 +2099,16 @@ static int call_nt_transact_notify_change(connection_struct *conn, char *inbuf, DEBUG(3,("call_nt_transact_notify_change\n")); if(!fsp) { - return ERROR_DOS(ERRDOS,ERRbadfid); + reply_doserror(req, ERRDOS, ERRbadfid); + return; } { char *filter_string; if (!(filter_string = notify_filter_string(NULL, filter))) { - return ERROR_NT(NT_STATUS_NO_MEMORY); + reply_nterror(req,NT_STATUS_NO_MEMORY); + return; } DEBUG(3,("call_nt_transact_notify_change: notify change " @@ -2116,7 +2119,8 @@ static int call_nt_transact_notify_change(connection_struct *conn, char *inbuf, } if((!fsp->is_directory) || (conn != fsp->conn)) { - return ERROR_NT(NT_STATUS_INVALID_PARAMETER); + reply_nterror(req, NT_STATUS_INVALID_PARAMETER); + return; } if (fsp->notify == NULL) { @@ -2126,7 +2130,8 @@ static int call_nt_transact_notify_change(connection_struct *conn, char *inbuf, if (!NT_STATUS_IS_OK(status)) { DEBUG(10, ("change_notify_create returned %s\n", nt_errstr(status))); - return ERROR_NT(status); + reply_nterror(req, status); + return; } } @@ -2141,26 +2146,25 @@ static int call_nt_transact_notify_change(connection_struct *conn, char *inbuf, * here. */ - change_notify_reply(inbuf, max_param_count, fsp->notify); + change_notify_reply(req->inbuf, max_param_count, fsp->notify); /* * change_notify_reply() above has independently sent its * results */ - return -1; + return; } /* * No changes pending, queue the request */ - status = change_notify_add_request(inbuf, max_param_count, filter, + status = change_notify_add_request(req->inbuf, max_param_count, filter, recursive, fsp); if (!NT_STATUS_IS_OK(status)) { - return ERROR_NT(status); + reply_nterror(req, status); } - - return -1; + return; } /**************************************************************************** @@ -3166,28 +3170,14 @@ static void handle_nttrans(connection_struct *conn, case NT_TRANSACT_NOTIFY_CHANGE: { - char *inbuf, *outbuf; - int size, bufsize; - START_PROFILE(NT_transact_notify_change); - - if (!reply_prep_legacy(req, &inbuf, &outbuf, &size, - &bufsize)) { - reply_nterror(req, NT_STATUS_NO_MEMORY); - END_PROFILE(SMBnttrans); - return; - } - - reply_post_legacy( - req, - call_nt_transact_notify_change( - conn, inbuf, outbuf, size, bufsize, - &state->setup, state->setup_count, - &state->param, state->total_param, - &state->data, state->total_data, - state->max_data_return, - state->max_param_return)); - + call_nt_transact_notify_change( + conn, req, + &state->setup, state->setup_count, + &state->param, state->total_param, + &state->data, state->total_data, + state->max_data_return, + state->max_param_return); END_PROFILE(NT_transact_notify_change); break; } |