r23998: Convert reply_close to the new API
authorVolker Lendecke <vlendec@samba.org>
Mon, 23 Jul 2007 09:53:06 +0000 (09:53 +0000)
committerGerald (Jerry) Carter <jerry@samba.org>
Wed, 10 Oct 2007 17:28:54 +0000 (12:28 -0500)
(This used to be commit dbf74cb747d34dac571d85d6bae9398558086456)

source3/smbd/pipes.c
source3/smbd/process.c
source3/smbd/reply.c

index a6cdc3a989f168536bff46810a6c3656ebd7e6b8..cb1461478ab79723c6bcd113ea1de2ec965218ef 100644 (file)
@@ -285,22 +285,24 @@ int reply_pipe_read_and_X(char *inbuf,char *outbuf,int length,int bufsize)
  Reply to a close.
 ****************************************************************************/
 
-int reply_pipe_close(connection_struct *conn, char *inbuf,char *outbuf)
+void reply_pipe_close(connection_struct *conn, struct smb_request *req)
 {
-       smb_np_struct *p = get_rpc_pipe_p(inbuf,smb_vwv0);
-       int outsize = set_message(inbuf,outbuf,0,0,True);
+       smb_np_struct *p = get_rpc_pipe_p((char *)req->inbuf,smb_vwv0);
 
        if (!p) {
-               return(ERROR_DOS(ERRDOS,ERRbadfid));
+               reply_doserror(req, ERRDOS, ERRbadfid);
+               return;
        }
 
        DEBUG(5,("reply_pipe_close: pnum:%x\n", p->pnum));
 
        if (!close_rpc_pipe_hnd(p)) {
-               return ERROR_DOS(ERRDOS,ERRbadfid);
+               reply_doserror(req, ERRDOS, ERRbadfid);
+               return;
        }
        
        /* TODO: REMOVE PIPE FROM DB */
 
-       return(outsize);
+       reply_outbuf(req, 0, 0);
+       return;
 }
index 4a846e970879311a6ba0945c828a8ed69680ad2f..f40caa49ad4e42c9dbf9bd0661e02f5b90701ad8 100644 (file)
@@ -638,7 +638,7 @@ static const struct smb_message_struct {
 /* 0x01 */ { "SMBrmdir",reply_rmdir,NULL,AS_USER | NEED_WRITE},
 /* 0x02 */ { "SMBopen",reply_open,NULL,AS_USER },
 /* 0x03 */ { "SMBcreate",reply_mknew,NULL,AS_USER},
-/* 0x04 */ { "SMBclose",reply_close,NULL,AS_USER | CAN_IPC },
+/* 0x04 */ { "SMBclose",NULL,reply_close,AS_USER | CAN_IPC },
 /* 0x05 */ { "SMBflush",reply_flush,NULL,AS_USER},
 /* 0x06 */ { "SMBunlink",reply_unlink,NULL,AS_USER | NEED_WRITE },
 /* 0x07 */ { "SMBmv",reply_mv,NULL,AS_USER | NEED_WRITE },
index 00e2bf59840570b2bbbaf498f9ee0871be8d1b83..98a2f6ee5e173ba90b924940ad44f4845b788925 100644 (file)
@@ -3402,31 +3402,35 @@ int reply_exit(connection_struct *conn,
  Reply to a close - has to deal with closing a directory opened by NT SMB's.
 ****************************************************************************/
 
-int reply_close(connection_struct *conn, char *inbuf,char *outbuf, int size,
-                int dum_buffsize)
+void reply_close(connection_struct *conn, struct smb_request *req)
 {
        NTSTATUS status = NT_STATUS_OK;
-       int outsize = 0;
        files_struct *fsp = NULL;
        START_PROFILE(SMBclose);
 
-       outsize = set_message(inbuf,outbuf,0,0,False);
+       if (req->wct < 3) {
+               reply_nterror(req, NT_STATUS_INVALID_PARAMETER);
+               END_PROFILE(SMBclose);
+               return;
+       }
 
        /* If it's an IPC, pass off to the pipe handler. */
        if (IS_IPC(conn)) {
+               reply_pipe_close(conn, req);
                END_PROFILE(SMBclose);
-               return reply_pipe_close(conn, inbuf,outbuf);
+               return;
        }
 
-       fsp = file_fsp(inbuf,smb_vwv0);
+       fsp = file_fsp((char *)req->inbuf,smb_vwv0);
 
        /*
         * We can only use CHECK_FSP if we know it's not a directory.
         */
 
        if(!fsp || (fsp->conn != conn) || (fsp->vuid != current_user.vuid)) {
+               reply_doserror(req, ERRDOS, ERRbadfid);
                END_PROFILE(SMBclose);
-               return ERROR_DOS(ERRDOS,ERRbadfid);
+               return;
        }
 
        if(fsp->is_directory) {
@@ -3448,8 +3452,9 @@ int reply_close(connection_struct *conn, char *inbuf,char *outbuf, int size,
                 * Take care of any time sent in the close.
                 */
 
-               fsp_set_pending_modtime(fsp,
-                               convert_time_t_to_timespec(srv_make_unix_date3(inbuf+smb_vwv1)));
+               fsp_set_pending_modtime(fsp, convert_time_t_to_timespec(
+                                               srv_make_unix_date3(
+                                                       req->inbuf+smb_vwv1)));
 
                /*
                 * close_file() returns the unix errno if an error
@@ -3460,13 +3465,15 @@ int reply_close(connection_struct *conn, char *inbuf,char *outbuf, int size,
                status = close_file(fsp,NORMAL_CLOSE);
        }  
 
-       if(!NT_STATUS_IS_OK(status)) {
+       if (!NT_STATUS_IS_OK(status)) {
+               reply_nterror(req, status);
                END_PROFILE(SMBclose);
-               return ERROR_NT(status);
+               return;
        }
 
+       reply_outbuf(req, 0, 0);
        END_PROFILE(SMBclose);
-       return(outsize);
+       return;
 }
 
 /****************************************************************************