svn commit: samba r24406 - in branches/SAMBA_3_2/source/smbd: .
vlendec at samba.org
vlendec at samba.org
Tue Aug 14 10:47:48 GMT 2007
Author: vlendec
Date: 2007-08-14 10:47:47 +0000 (Tue, 14 Aug 2007)
New Revision: 24406
WebSVN: http://websvn.samba.org/cgi-bin/viewcvs.cgi?view=rev&root=samba&rev=24406
Log:
Push reply_prep_legacy into reply_lockingX
Modified:
branches/SAMBA_3_2/source/smbd/process.c
branches/SAMBA_3_2/source/smbd/reply.c
Changeset:
Modified: branches/SAMBA_3_2/source/smbd/process.c
===================================================================
--- branches/SAMBA_3_2/source/smbd/process.c 2007-08-14 10:27:27 UTC (rev 24405)
+++ branches/SAMBA_3_2/source/smbd/process.c 2007-08-14 10:47:47 UTC (rev 24406)
@@ -726,7 +726,7 @@
/* 0x21 */ { NULL, NULL, NULL, 0 },
/* 0x22 */ { "SMBsetattrE",reply_setattrE,NULL,AS_USER | NEED_WRITE },
/* 0x23 */ { "SMBgetattrE",reply_getattrE,NULL,AS_USER },
-/* 0x24 */ { "SMBlockingX",reply_lockingX,NULL,AS_USER },
+/* 0x24 */ { "SMBlockingX",NULL,reply_lockingX,AS_USER },
/* 0x25 */ { "SMBtrans",NULL,reply_trans,AS_USER | CAN_IPC },
/* 0x26 */ { "SMBtranss",NULL,reply_transs,AS_USER | CAN_IPC},
/* 0x27 */ { "SMBioctl",reply_ioctl,NULL,0},
Modified: branches/SAMBA_3_2/source/smbd/reply.c
===================================================================
--- branches/SAMBA_3_2/source/smbd/reply.c 2007-08-14 10:27:27 UTC (rev 24405)
+++ branches/SAMBA_3_2/source/smbd/reply.c 2007-08-14 10:47:47 UTC (rev 24406)
@@ -5770,8 +5770,7 @@
Reply to a lockingX request.
****************************************************************************/
-int reply_lockingX(connection_struct *conn, char *inbuf, char *outbuf,
- int length, int bufsize)
+void reply_lockingX(connection_struct *conn, struct smb_request *req)
{
files_struct *fsp;
unsigned char locktype;
@@ -5787,10 +5786,21 @@
BOOL err;
NTSTATUS status = NT_STATUS_UNSUCCESSFUL;
+ char *inbuf, *outbuf;
+ int length, bufsize;
+
START_PROFILE(SMBlockingX);
+ if (!reply_prep_legacy(req, &inbuf, &outbuf, &length, &bufsize)) {
+ reply_nterror(req, NT_STATUS_NO_MEMORY);
+ END_PROFILE(SMBlockingX);
+ return;
+ }
+
if (CVAL(inbuf, smb_wct) < 8) {
- return ERROR_NT(NT_STATUS_INVALID_PARAMETER);
+ reply_nterror(req, NT_STATUS_INVALID_PARAMETER);
+ END_PROFILE(SMBlockingX);
+ return;
}
fsp = file_fsp(SVAL(inbuf,smb_vwv2));
@@ -5801,7 +5811,9 @@
lock_timeout = IVAL(inbuf,smb_vwv4);
large_file_format = (locktype & LOCKING_ANDX_LARGE_FILES)?True:False;
- CHECK_FSP(fsp,conn);
+ if (!check_fsp(conn, req, fsp, ¤t_user)) {
+ return;
+ }
data = smb_buf(inbuf);
@@ -5809,7 +5821,9 @@
/* we don't support these - and CANCEL_LOCK makes w2k
and XP reboot so I don't really want to be
compatible! (tridge) */
- return ERROR_NT(NT_STATUS_DOS(ERRDOS, ERRnoatomiclocks));
+ reply_nterror(req, NT_STATUS_DOS(ERRDOS, ERRnoatomiclocks));
+ END_PROFILE(SMBlockingX);
+ return;
}
/* Check if this is an oplock break on a file
@@ -5846,10 +5860,12 @@
* send a reply */
if (num_locks == 0 && num_ulocks == 0) {
END_PROFILE(SMBlockingX);
- return -1;
+ reply_post_legacy(req, -1);
+ return;
} else {
END_PROFILE(SMBlockingX);
- return ERROR_DOS(ERRDOS,ERRlock);
+ reply_doserror(req, ERRDOS, ERRlock);
+ return;
}
}
@@ -5879,7 +5895,8 @@
"break is a chained %d request !\n",
(unsigned int)CVAL(inbuf,smb_vwv0) ));
END_PROFILE(SMBlockingX);
- return -1;
+ reply_post_legacy(req, -1);
+ return;
}
}
@@ -5902,7 +5919,8 @@
*/
if(err) {
END_PROFILE(SMBlockingX);
- return ERROR_DOS(ERRDOS,ERRnoaccess);
+ reply_doserror(req, ERRDOS, ERRnoaccess);
+ return;
}
DEBUG(10,("reply_lockingX: unlock start=%.0f, len=%.0f for "
@@ -5918,7 +5936,8 @@
if (NT_STATUS_V(status)) {
END_PROFILE(SMBlockingX);
- return ERROR_NT(status);
+ reply_nterror(req, status);
+ return;
}
}
@@ -5946,7 +5965,8 @@
*/
if(err) {
END_PROFILE(SMBlockingX);
- return ERROR_DOS(ERRDOS,ERRnoaccess);
+ reply_doserror(req, ERRDOS, ERRnoaccess);
+ return;
}
DEBUG(10,("reply_lockingX: lock start=%.0f, len=%.0f for pid "
@@ -5969,7 +5989,12 @@
locktype,
NT_STATUS_FILE_LOCK_CONFLICT)) {
END_PROFILE(SMBlockingX);
- return ERROR_NT(NT_STATUS_DOS(ERRDOS, ERRcancelviolation));
+ reply_nterror(
+ req,
+ NT_STATUS_DOS(
+ ERRDOS,
+ ERRcancelviolation));
+ return;
}
}
/* Remove a matching pending lock. */
@@ -6034,7 +6059,8 @@
block_smbpid)) {
TALLOC_FREE(br_lck);
END_PROFILE(SMBlockingX);
- return -1;
+ reply_post_legacy(req, -1);
+ return;
}
}
@@ -6043,7 +6069,8 @@
if (NT_STATUS_V(status)) {
END_PROFILE(SMBlockingX);
- return ERROR_NT(status);
+ reply_nterror(req, status);
+ return;
}
}
@@ -6070,7 +6097,8 @@
*/
if(err) {
END_PROFILE(SMBlockingX);
- return ERROR_DOS(ERRDOS,ERRnoaccess);
+ reply_doserror(req, ERRDOS, ERRnoaccess);
+ return;
}
do_unlock(smbd_messaging_context(),
@@ -6081,16 +6109,19 @@
WINDOWS_LOCK);
}
END_PROFILE(SMBlockingX);
- return ERROR_NT(status);
+ reply_nterror(req, status);
+ return;
}
set_message(inbuf,outbuf,2,0,True);
+
+ reply_post_legacy(req, smb_len(outbuf)+4);
DEBUG(3, ("lockingX fnum=%d type=%d num_locks=%d num_ulocks=%d\n",
fsp->fnum, (unsigned int)locktype, num_locks, num_ulocks));
END_PROFILE(SMBlockingX);
- return chain_reply(inbuf,&outbuf,length,bufsize);
+ chain_reply_new(req);
}
#undef DBGC_CLASS
More information about the samba-cvs
mailing list