[GLUE] Rsync SAMBA_3_2_0 SVN r25598 in order to create the v3-2-test branch.
[samba.git] / source / smbd / reply.c
index b94c91fe8ea30c8a16aefc1b37fb0fc664b7d0ce..7c44216aea4ee4329d903beaf44f8413195a7988 100644 (file)
@@ -402,7 +402,7 @@ void reply_special(char *inbuf)
        
        memset(outbuf, '\0', sizeof(outbuf));
 
-       smb_setlen(inbuf,outbuf,0);
+       smb_setlen(outbuf,0);
        
        switch (msg_type) {
        case 0x81: /* session request */
@@ -879,7 +879,7 @@ void reply_checkpath(connection_struct *conn, struct smb_request *req)
 
        DEBUG(3,("reply_checkpath %s mode=%d\n", name, (int)SVAL(req->inbuf,smb_vwv0)));
 
-       status = unix_convert(conn, name, False, &name, NULL, &sbuf);
+       status = unix_convert(ctx, conn, name, False, &name, NULL, &sbuf);
        if (!NT_STATUS_IS_OK(status)) {
                goto path_err;
        }
@@ -986,7 +986,7 @@ void reply_getatr(connection_struct *conn, struct smb_request *req)
                size = 0;
                mtime = 0;
        } else {
-               status = unix_convert(conn, fname, False, &fname, NULL,&sbuf);
+               status = unix_convert(ctx, conn, fname, False, &fname, NULL,&sbuf);
                if (!NT_STATUS_IS_OK(status)) {
                        reply_nterror(req, status);
                        END_PROFILE(SMBgetatr);
@@ -1081,7 +1081,7 @@ void reply_setatr(connection_struct *conn, struct smb_request *req)
                return;
        }
 
-       status = unix_convert(conn, fname, False, &fname, NULL, &sbuf);
+       status = unix_convert(ctx, conn, fname, False, &fname, NULL, &sbuf);
        if (!NT_STATUS_IS_OK(status)) {
                reply_nterror(req, status);
                END_PROFILE(SMBsetatr);
@@ -1107,7 +1107,7 @@ void reply_setatr(connection_struct *conn, struct smb_request *req)
 
        mode = SVAL(req->inbuf,smb_vwv0);
        mtime = srv_make_unix_date3(req->inbuf+smb_vwv1);
-  
+
        if (mode != FILE_ATTRIBUTE_NORMAL) {
                if (VALID_STAT_OF_DIR(sbuf))
                        mode |= aDIR;
@@ -1279,7 +1279,8 @@ void reply_search(connection_struct *conn, struct smb_request *req)
        if (status_len == 0) {
                SMB_STRUCT_STAT sbuf;
 
-               nt_status = unix_convert(conn, path, True, &directory, NULL, &sbuf);
+               nt_status = unix_convert(ctx, conn, path, True,
+                               &directory, NULL, &sbuf);
                if (!NT_STATUS_IS_OK(nt_status)) {
                        reply_nterror(req, nt_status);
                        END_PROFILE(SMBsearch);
@@ -1612,13 +1613,13 @@ void reply_open(connection_struct *conn, struct smb_request *req)
                return;
        }
 
-       status = unix_convert(conn, fname, False, &fname, NULL, &sbuf);
+       status = unix_convert(ctx, conn, fname, False, &fname, NULL, &sbuf);
        if (!NT_STATUS_IS_OK(status)) {
                reply_nterror(req, status);
                END_PROFILE(SMBopen);
                return;
        }
-    
+
        status = check_name(conn, fname);
        if (!NT_STATUS_IS_OK(status)) {
                reply_nterror(req, status);
@@ -1644,8 +1645,8 @@ void reply_open(connection_struct *conn, struct smb_request *req)
 
        if (!NT_STATUS_IS_OK(status)) {
                if (open_was_deferred(req->mid)) {
-                       END_PROFILE(SMBopen);
                        /* We have re-scheduled this call. */
+                       END_PROFILE(SMBopen);
                        return;
                }
                reply_openerror(req, status);
@@ -1776,7 +1777,7 @@ void reply_open_and_X(connection_struct *conn, struct smb_request *req)
                return;
        }
 
-       status = unix_convert(conn, fname, False, &fname, NULL, &sbuf);
+       status = unix_convert(ctx, conn, fname, False, &fname, NULL, &sbuf);
        if (!NT_STATUS_IS_OK(status)) {
                reply_nterror(req, status);
                END_PROFILE(SMBopenX);
@@ -1996,7 +1997,7 @@ void reply_mknew(connection_struct *conn, struct smb_request *req)
                return;
        }
 
-       status = unix_convert(conn, fname, False, &fname, NULL, &sbuf);
+       status = unix_convert(ctx, conn, fname, False, &fname, NULL, &sbuf);
        if (!NT_STATUS_IS_OK(status)) {
                reply_nterror(req, status);
                END_PROFILE(SMBcreate);
@@ -2039,7 +2040,7 @@ void reply_mknew(connection_struct *conn, struct smb_request *req)
                        /* We have re-scheduled this call. */
                        return;
                }
-               reply_nterror(req, status);
+               reply_openerror(req, status);
                return;
        }
 
@@ -2132,7 +2133,7 @@ void reply_ctemp(connection_struct *conn, struct smb_request *req)
                return;
        }
 
-       status = unix_convert(conn, fname, False, &fname, NULL, &sbuf);
+       status = unix_convert(ctx, conn, fname, False, &fname, NULL, &sbuf);
        if (!NT_STATUS_IS_OK(status)) {
                reply_nterror(req, status);
                END_PROFILE(SMBctemp);
@@ -2389,7 +2390,7 @@ NTSTATUS unlink_internals(connection_struct *conn, struct smb_request *req,
        SMB_STRUCT_STAT sbuf;
        TALLOC_CTX *ctx = talloc_tos();
 
-       status = unix_convert(conn, name_in, has_wild, &name, NULL, &sbuf);
+       status = unix_convert(ctx, conn, name_in, has_wild, &name, NULL, &sbuf);
        if (!NT_STATUS_IS_OK(status)) {
                return status;
        }
@@ -3016,7 +3017,7 @@ Returning short read of maximum allowed for compatibility with Windows 2000.\n",
                return;
        }
        
-       set_message(NULL, (char *)req->outbuf, 5, nread+3, False);
+       set_message((char *)req->outbuf, 5, nread+3, False);
 
        SSVAL(req->outbuf,smb_vwv0,nread);
        SSVAL(req->outbuf,smb_vwv5,nread+3);
@@ -3103,7 +3104,7 @@ Returning short read of maximum allowed for compatibility with Windows 2000.\n",
                return;
        }
 
-       set_message(NULL, (char *)req->outbuf, 5, nread+3, False);
+       set_message((char *)req->outbuf, 5, nread+3, False);
 
        SSVAL(req->outbuf,smb_vwv0,nread);
        SSVAL(req->outbuf,smb_vwv5,nread+3);
@@ -3121,14 +3122,12 @@ Returning short read of maximum allowed for compatibility with Windows 2000.\n",
  Setup readX header.
 ****************************************************************************/
 
-static int setup_readX_header(const uint8 *inbuf, uint8 *outbuf,
-                             size_t smb_maxcnt)
+static int setup_readX_header(char *outbuf, size_t smb_maxcnt)
 {
        int outsize;
        char *data;
 
-       outsize = set_message((char *)inbuf, (char *)outbuf,12,smb_maxcnt,
-                             False);
+       outsize = set_message(outbuf,12,smb_maxcnt,False);
        data = smb_buf(outbuf);
 
        memset(outbuf+smb_vwv0,'\0',24); /* valgrind init. */
@@ -3191,7 +3190,7 @@ static void send_file_readX(connection_struct *conn, struct smb_request *req,
                header = data_blob_const(headerbuf, sizeof(headerbuf));
 
                construct_reply_common((char *)req->inbuf, (char *)headerbuf);
-               setup_readX_header(req->inbuf, headerbuf, smb_maxcnt);
+               setup_readX_header((char *)headerbuf, smb_maxcnt);
 
                if ((nread = SMB_VFS_SENDFILE( smbd_server_fd(), fsp, fsp->fh->fd, &header, startpos, smb_maxcnt)) == -1) {
                        /* Returning ENOSYS means no data at all was sent. Do this as a normal read. */
@@ -3242,7 +3241,7 @@ normal_read:
                uint8 headerbuf[smb_size + 2*12];
 
                construct_reply_common((char *)req->inbuf, (char *)headerbuf);
-               setup_readX_header(req->inbuf, headerbuf, smb_maxcnt);
+               setup_readX_header((char *)headerbuf, smb_maxcnt);
 
                /* Send out the header. */
                if (write_data(smbd_server_fd(), (char *)headerbuf,
@@ -3269,7 +3268,7 @@ normal_read:
                        return;
                }
 
-               setup_readX_header(req->inbuf, req->outbuf, nread);
+               setup_readX_header((char *)req->outbuf, nread);
 
                DEBUG( 3, ( "send_file_readX fnum=%d max=%d nread=%d\n",
                        fsp->fnum, (int)smb_maxcnt, (int)nread ) );
@@ -3333,8 +3332,8 @@ void reply_read_and_X(connection_struct *conn, struct smb_request *req)
                                END_PROFILE(SMBreadX);
                                return;
                        }
-                       /* We currently don't do this on signed or sealed data. */
-                       if (srv_is_signing_active() || srv_encryption_on()) {
+                       /* We currently don't do this on signed data. */
+                       if (srv_is_signing_active()) {
                                reply_nterror(req, NT_STATUS_NOT_SUPPORTED);
                                END_PROFILE(SMBreadX);
                                return;
@@ -3525,7 +3524,7 @@ void reply_writebraw(connection_struct *conn, struct smb_request *req)
         * it to send more bytes */
 
        memcpy(buf, req->inbuf, smb_size);
-       outsize = set_message(NULL,buf,
+       outsize = set_message(buf,
                        Protocol>PROTOCOL_COREPLUS?1:0,0,True);
        SCVAL(buf,smb_com,SMBwritebraw);
        SSVALS(buf,smb_vwv0,0xFFFF);
@@ -3922,7 +3921,7 @@ void reply_write_and_X(connection_struct *conn, struct smb_request *req)
                if(IVAL(req->inbuf,smb_vwv12) != 0) {
                        DEBUG(0,("reply_write_and_X - large offset (%x << 32) "
                                 "used and we don't support 64 bit offsets.\n",
-                                (unsigned int)IVAL(inbuf,smb_vwv12) ));
+                                (unsigned int)IVAL(req->inbuf,smb_vwv12) ));
                        reply_doserror(req, ERRDOS, ERRbadaccess);
                        END_PROFILE(SMBwriteX);
                        return;
@@ -4777,7 +4776,7 @@ void reply_mkdir(connection_struct *conn, struct smb_request *req)
                return;
        }
 
-       status = unix_convert(conn, directory, False, &directory, NULL, &sbuf);
+       status = unix_convert(ctx, conn, directory, False, &directory, NULL, &sbuf);
        if (!NT_STATUS_IS_OK(status)) {
                reply_nterror(req, status);
                END_PROFILE(SMBmkdir);
@@ -5045,7 +5044,7 @@ void reply_rmdir(connection_struct *conn, struct smb_request *req)
                return;
        }
 
-       status = unix_convert(conn, directory, False, &directory,
+       status = unix_convert(ctx, conn, directory, False, &directory,
                        NULL, &sbuf);
        if (!NT_STATUS_IS_OK(status)) {
                reply_nterror(req, status);
@@ -5530,13 +5529,13 @@ NTSTATUS rename_internals(TALLOC_CTX *ctx,
        ZERO_STRUCT(sbuf1);
        ZERO_STRUCT(sbuf2);
 
-       status = unix_convert(conn, name_in, src_has_wild, &name,
+       status = unix_convert(ctx, conn, name_in, src_has_wild, &name,
                        &last_component_src, &sbuf1);
        if (!NT_STATUS_IS_OK(status)) {
                return status;
        }
 
-       status = unix_convert(conn, newname_in, dest_has_wild, &newname,
+       status = unix_convert(ctx, conn, newname_in, dest_has_wild, &newname,
                        &last_component_dest, &sbuf2);
        if (!NT_STATUS_IS_OK(status)) {
                return status;
@@ -6120,14 +6119,16 @@ void reply_copy(connection_struct *conn, struct smb_request *req)
                return;
        }
 
-       status = unix_convert(conn, name, source_has_wild, &name, NULL, &sbuf1);
+       status = unix_convert(ctx, conn, name, source_has_wild,
+                       &name, NULL, &sbuf1);
        if (!NT_STATUS_IS_OK(status)) {
                reply_nterror(req, status);
                END_PROFILE(SMBcopy);
                return;
        }
 
-       status = unix_convert(conn, newname, dest_has_wild, &newname, NULL, &sbuf2);
+       status = unix_convert(ctx, conn, newname, dest_has_wild,
+                       &newname, NULL, &sbuf2);
        if (!NT_STATUS_IS_OK(status)) {
                reply_nterror(req, status);
                END_PROFILE(SMBcopy);