svn commit: samba r24223 - in branches/SAMBA_3_2/source: client libsmb smbd

vlendec at samba.org vlendec at samba.org
Sat Aug 4 20:08:37 GMT 2007


Author: vlendec
Date: 2007-08-04 20:08:35 +0000 (Sat, 04 Aug 2007)
New Revision: 24223

WebSVN: http://websvn.samba.org/cgi-bin/viewcvs.cgi?view=rev&root=samba&rev=24223

Log:
Convert reply_echo to the new API

Modified:
   branches/SAMBA_3_2/source/client/client.c
   branches/SAMBA_3_2/source/libsmb/clientgen.c
   branches/SAMBA_3_2/source/smbd/process.c
   branches/SAMBA_3_2/source/smbd/reply.c


Changeset:
Modified: branches/SAMBA_3_2/source/client/client.c
===================================================================
--- branches/SAMBA_3_2/source/client/client.c	2007-08-04 18:20:32 UTC (rev 24222)
+++ branches/SAMBA_3_2/source/client/client.c	2007-08-04 20:08:35 UTC (rev 24223)
@@ -777,14 +777,16 @@
 
 static int cmd_echo(void)
 {
+	fstring num;
 	pstring data;
 
-	if (!next_token_nr(NULL, data, NULL, sizeof(data))) {
-		d_printf("echo <data>\n");
+	if (!next_token_nr(NULL, num, NULL, sizeof(num))
+	    || !next_token_nr(NULL, data, NULL, sizeof(data))) {
+		d_printf("echo <num> <data>\n");
 		return 1;
 	}
 
-	if (!cli_echo(cli, (uint8 *)data, strlen(data))) {
+	if (!cli_echo(cli, atoi(num), (uint8 *)data, strlen(data))) {
 		d_printf("echo failed: %s\n",
 			 nt_errstr(cli_get_nt_error(cli)));
 		return 1;
@@ -3730,7 +3732,7 @@
 	{
 		unsigned char garbage[16];
 		memset(garbage, 0xf0, sizeof(garbage));
-		cli_echo(cli, garbage, sizeof(garbage));
+		cli_echo(cli, 1, garbage, sizeof(garbage));
 	}
 }
 

Modified: branches/SAMBA_3_2/source/libsmb/clientgen.c
===================================================================
--- branches/SAMBA_3_2/source/libsmb/clientgen.c	2007-08-04 18:20:32 UTC (rev 24222)
+++ branches/SAMBA_3_2/source/libsmb/clientgen.c	2007-08-04 20:08:35 UTC (rev 24223)
@@ -680,9 +680,11 @@
  Send/receive a SMBecho command: ping the server
 ****************************************************************************/
 
-BOOL cli_echo(struct cli_state *cli, unsigned char *data, size_t length)
+BOOL cli_echo(struct cli_state *cli, uint16 num_echos,
+	      unsigned char *data, size_t length)
 {
 	char *p;
+	int i;
 
 	SMB_ASSERT(length < 1024);
 
@@ -690,7 +692,7 @@
 	set_message(NULL,cli->outbuf,1,length,True);
 	SCVAL(cli->outbuf,smb_com,SMBecho);
 	SSVAL(cli->outbuf,smb_tid,65535);
-	SSVAL(cli->outbuf,smb_vwv0,1);
+	SSVAL(cli->outbuf,smb_vwv0,num_echos);
 	cli_setup_packet(cli);
 	p = smb_buf(cli->outbuf);
 	memcpy(p, data, length);
@@ -699,12 +701,16 @@
 	cli_setup_bcc(cli, p);
 
 	cli_send_smb(cli);
-	if (!cli_receive_smb(cli)) {
-		return False;
+
+	for (i=0; i<num_echos; i++) {
+		if (!cli_receive_smb(cli)) {
+			return False;
+		}
+
+		if (cli_is_error(cli)) {
+			return False;
+		}
 	}
 
-	if (cli_is_error(cli)) {
-		return False;
-	}
 	return True;
 }

Modified: branches/SAMBA_3_2/source/smbd/process.c
===================================================================
--- branches/SAMBA_3_2/source/smbd/process.c	2007-08-04 18:20:32 UTC (rev 24222)
+++ branches/SAMBA_3_2/source/smbd/process.c	2007-08-04 20:08:35 UTC (rev 24223)
@@ -731,7 +731,7 @@
 /* 0x28 */ { "SMBioctls",NULL, NULL,AS_USER},
 /* 0x29 */ { "SMBcopy",reply_copy,NULL,AS_USER | NEED_WRITE },
 /* 0x2a */ { "SMBmove",NULL, NULL,AS_USER | NEED_WRITE },
-/* 0x2b */ { "SMBecho",reply_echo,NULL,0},
+/* 0x2b */ { "SMBecho",NULL,reply_echo,0},
 /* 0x2c */ { "SMBwriteclose",reply_writeclose,NULL,AS_USER},
 /* 0x2d */ { "SMBopenX",NULL,reply_open_and_X,AS_USER | CAN_IPC },
 /* 0x2e */ { "SMBreadX",reply_read_and_X,NULL,AS_USER | CAN_IPC },

Modified: branches/SAMBA_3_2/source/smbd/reply.c
===================================================================
--- branches/SAMBA_3_2/source/smbd/reply.c	2007-08-04 18:20:32 UTC (rev 24222)
+++ branches/SAMBA_3_2/source/smbd/reply.c	2007-08-04 20:08:35 UTC (rev 24223)
@@ -3775,24 +3775,35 @@
  conn POINTER CAN BE NULL HERE !
 ****************************************************************************/
 
-int reply_echo(connection_struct *conn,
-	       char *inbuf,char *outbuf, int dum_size, int dum_buffsize)
+void reply_echo(connection_struct *conn, struct smb_request *req)
 {
-	int smb_reverb = SVAL(inbuf,smb_vwv0);
+	int smb_reverb;
 	int seq_num;
-	unsigned int data_len = smb_buflen(inbuf);
-	int outsize = set_message(inbuf,outbuf,1,data_len,True);
+	unsigned int data_len = smb_buflen(req->inbuf);
+
 	START_PROFILE(SMBecho);
 
+	if (req->wct < 1) {
+		reply_nterror(req, NT_STATUS_INVALID_PARAMETER);
+		END_PROFILE(SMBecho);
+		return;
+	}
+
 	if (data_len > BUFFER_SIZE) {
 		DEBUG(0,("reply_echo: data_len too large.\n"));
+		reply_nterror(req, NT_STATUS_INSUFFICIENT_RESOURCES);
 		END_PROFILE(SMBecho);
-		return -1;
+		return;
 	}
 
+	smb_reverb = SVAL(req->inbuf,smb_vwv0);
+
+	reply_outbuf(req, 1, data_len);
+
 	/* copy any incoming data back out */
-	if (data_len > 0)
-		memcpy(smb_buf(outbuf),smb_buf(inbuf),data_len);
+	if (data_len > 0) {
+		memcpy(smb_buf(req->outbuf),smb_buf(req->inbuf),data_len);
+	}
 
 	if (smb_reverb > 100) {
 		DEBUG(0,("large reverb (%d)?? Setting to 100\n",smb_reverb));
@@ -3800,21 +3811,21 @@
 	}
 
 	for (seq_num =1 ; seq_num <= smb_reverb ; seq_num++) {
-		SSVAL(outbuf,smb_vwv0,seq_num);
+		SSVAL(req->outbuf,smb_vwv0,seq_num);
 
-		smb_setlen(inbuf,outbuf,outsize - 4);
-
-		show_msg(outbuf);
-		if (!send_smb(smbd_server_fd(),outbuf))
+		show_msg((char *)req->outbuf);
+		if (!send_smb(smbd_server_fd(),(char *)req->outbuf))
 			exit_server_cleanly("reply_echo: send_smb failed.");
 	}
 
 	DEBUG(3,("echo %d times\n", smb_reverb));
 
+	TALLOC_FREE(req->outbuf);
+
 	smb_echo_count++;
 
 	END_PROFILE(SMBecho);
-	return -1;
+	return;
 }
 
 /****************************************************************************



More information about the samba-cvs mailing list