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, &current_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