[SCM] Samba Shared Repository - branch master updated

Volker Lendecke vlendec at samba.org
Sun Mar 27 11:51:01 MDT 2011


The branch, master has been updated
       via  592c669 s3: Convert cli_raw_tcon to cli_smb
       via  13c1c8e s3: Fix a memleak
       via  c83ce65 s3: Replace a use of cli_errstr
       via  ffef3aa s3: Replace cli_negprot_sendsync() by cli_negprot_send()
       via  a60ba54 s3: Remove a pointless static
       via  5d9075c s3: Remove a use of cli_send_smb
      from  b47b4c9 s3: Remove two calls to cli_errstr

http://gitweb.samba.org/?p=samba.git;a=shortlog;h=master


- Log -----------------------------------------------------------------
commit 592c669d9ddeb3a39ed8472c633c7deace33a269
Author: Volker Lendecke <vl at samba.org>
Date:   Sun Mar 27 18:03:24 2011 +0200

    s3: Convert cli_raw_tcon to cli_smb
    
    Autobuild-User: Volker Lendecke <vlendec at samba.org>
    Autobuild-Date: Sun Mar 27 19:50:21 CEST 2011 on sn-devel-104

commit 13c1c8ef3da5385cb8d0130bdf9c9abe0e43b49f
Author: Volker Lendecke <vl at samba.org>
Date:   Sun Mar 27 17:43:11 2011 +0200

    s3: Fix a memleak

commit c83ce65ad099270c1edd119bb3d313a4638a0488
Author: Volker Lendecke <vl at samba.org>
Date:   Sun Mar 27 17:37:24 2011 +0200

    s3: Replace a use of cli_errstr

commit ffef3aa809eac020efd316c1922c50538d271a4f
Author: Volker Lendecke <vl at samba.org>
Date:   Sun Mar 27 17:34:36 2011 +0200

    s3: Replace cli_negprot_sendsync() by cli_negprot_send()

commit a60ba5461855825c71e290f03fa1182210f87cae
Author: Volker Lendecke <vl at samba.org>
Date:   Sun Mar 27 17:20:28 2011 +0200

    s3: Remove a pointless static

commit 5d9075c0498853010fb8036d4aa71bd6e1b284af
Author: Volker Lendecke <vl at samba.org>
Date:   Sun Mar 27 17:04:56 2011 +0200

    s3: Remove a use of cli_send_smb

-----------------------------------------------------------------------

Summary of changes:
 source3/include/proto.h       |    5 +-
 source3/libsmb/cliconnect.c   |   81 +++++++++++-----------------------------
 source3/libsmb/clireadwrite.c |   83 +++++++++++++++++++++++------------------
 source3/torture/torture.c     |   36 ++++++++++++++---
 4 files changed, 100 insertions(+), 105 deletions(-)


Changeset truncated at 500 lines:

diff --git a/source3/include/proto.h b/source3/include/proto.h
index a24b7d0..14ec2d6 100644
--- a/source3/include/proto.h
+++ b/source3/include/proto.h
@@ -1546,7 +1546,6 @@ struct tevent_req *cli_tdis_send(TALLOC_CTX *mem_ctx,
                                  struct cli_state *cli);
 NTSTATUS cli_tdis_recv(struct tevent_req *req);
 NTSTATUS cli_tdis(struct cli_state *cli);
-void cli_negprot_sendsync(struct cli_state *cli);
 NTSTATUS cli_negprot(struct cli_state *cli);
 struct tevent_req *cli_negprot_send(TALLOC_CTX *mem_ctx,
 				    struct event_context *ev,
@@ -2205,8 +2204,8 @@ ssize_t cli_read(struct cli_state *cli, uint16_t fnum, char *buf,
 ssize_t cli_write(struct cli_state *cli,
     	         uint16_t fnum, uint16 write_mode,
 		 const char *buf, off_t offset, size_t size);
-ssize_t cli_smbwrite(struct cli_state *cli,
-		     uint16_t fnum, char *buf, off_t offset, size_t size1);
+NTSTATUS cli_smbwrite(struct cli_state *cli, uint16_t fnum, char *buf,
+		      off_t offset, size_t size1, size_t *ptotal);
 struct tevent_req *cli_write_andx_create(TALLOC_CTX *mem_ctx,
 					 struct event_context *ev,
 					 struct cli_state *cli, uint16_t fnum,
diff --git a/source3/libsmb/cliconnect.c b/source3/libsmb/cliconnect.c
index 819d835..2fa9e8a 100644
--- a/source3/libsmb/cliconnect.c
+++ b/source3/libsmb/cliconnect.c
@@ -1913,41 +1913,6 @@ fail:
  Send a negprot command.
 ****************************************************************************/
 
-void cli_negprot_sendsync(struct cli_state *cli)
-{
-	char *p;
-	int numprots;
-
-	if (cli->protocol < PROTOCOL_NT1)
-		cli->use_spnego = False;
-
-	memset(cli->outbuf,'\0',smb_size);
-
-	/* setup the protocol strings */
-	cli_set_message(cli->outbuf,0,0,True);
-
-	p = smb_buf(cli->outbuf);
-	for (numprots=0; numprots < ARRAY_SIZE(prots); numprots++) {
-		if (prots[numprots].prot > cli->protocol) {
-			break;
-		}
-		*p++ = 2;
-		p += clistr_push(cli, p, prots[numprots].name, -1, STR_TERMINATE);
-	}
-
-	SCVAL(cli->outbuf,smb_com,SMBnegprot);
-	cli_setup_bcc(cli, p);
-	cli_setup_packet(cli);
-
-	SCVAL(smb_buf(cli->outbuf),0,2);
-
-	cli_send_smb(cli);
-}
-
-/****************************************************************************
- Send a negprot command.
-****************************************************************************/
-
 struct cli_negprot_state {
 	struct cli_state *cli;
 };
@@ -2743,7 +2708,10 @@ NTSTATUS cli_raw_tcon(struct cli_state *cli,
 		      const char *service, const char *pass, const char *dev,
 		      uint16 *max_xmit, uint16 *tid)
 {
-	char *p;
+	struct tevent_req *req;
+	uint16_t *ret_vwv;
+	uint8_t *bytes;
+	NTSTATUS status;
 
 	if (!lp_client_plaintext_auth() && (*pass)) {
 		DEBUG(1, ("Server requested plaintext password but 'client "
@@ -2751,31 +2719,26 @@ NTSTATUS cli_raw_tcon(struct cli_state *cli,
 		return NT_STATUS_ACCESS_DENIED;
 	}
 
-	memset(cli->outbuf,'\0',smb_size);
-	memset(cli->inbuf,'\0',smb_size);
-
-	cli_set_message(cli->outbuf, 0, 0, True);
-	SCVAL(cli->outbuf,smb_com,SMBtcon);
-	cli_setup_packet(cli);
-
-	p = smb_buf(cli->outbuf);
-	*p++ = 4; p += clistr_push(cli, p, service, -1, STR_TERMINATE | STR_NOALIGN);
-	*p++ = 4; p += clistr_push(cli, p, pass, -1, STR_TERMINATE | STR_NOALIGN);
-	*p++ = 4; p += clistr_push(cli, p, dev, -1, STR_TERMINATE | STR_NOALIGN);
-
-	cli_setup_bcc(cli, p);
-
-	cli_send_smb(cli);
-	if (!cli_receive_smb(cli)) {
-		return NT_STATUS_UNEXPECTED_NETWORK_ERROR;
-	}
-
-	if (cli_is_error(cli)) {
-		return cli_nt_error(cli);
+	bytes = talloc_array(talloc_tos(), uint8_t, 0);
+	bytes = smb_bytes_push_bytes(bytes, 4, NULL, 0);
+	bytes = smb_bytes_push_str(bytes, cli_ucs2(cli),
+				   service, strlen(service)+1, NULL);
+	bytes = smb_bytes_push_bytes(bytes, 4, NULL, 0);
+	bytes = smb_bytes_push_str(bytes, cli_ucs2(cli),
+				   pass, strlen(pass)+1, NULL);
+	bytes = smb_bytes_push_bytes(bytes, 4, NULL, 0);
+	bytes = smb_bytes_push_str(bytes, cli_ucs2(cli),
+				   dev, strlen(dev)+1, NULL);
+
+	status = cli_smb(talloc_tos(), cli, SMBtcon, 0, 0, NULL,
+			 talloc_get_size(bytes), bytes, &req,
+			 2, NULL, &ret_vwv, NULL, NULL);
+	if (!NT_STATUS_IS_OK(status)) {
+		return status;
 	}
 
-	*max_xmit = SVAL(cli->inbuf, smb_vwv0);
-	*tid = SVAL(cli->inbuf, smb_vwv1);
+	*max_xmit = SVAL(ret_vwv + 0, 0);
+	*tid = SVAL(ret_vwv + 1, 0);
 
 	return NT_STATUS_OK;
 }
diff --git a/source3/libsmb/clireadwrite.c b/source3/libsmb/clireadwrite.c
index cd95b17..a6620d9 100644
--- a/source3/libsmb/clireadwrite.c
+++ b/source3/libsmb/clireadwrite.c
@@ -856,56 +856,67 @@ ssize_t cli_write(struct cli_state *cli,
   write to a file using a SMBwrite and not bypassing 0 byte writes
 ****************************************************************************/
 
-ssize_t cli_smbwrite(struct cli_state *cli,
-		     uint16_t fnum, char *buf, off_t offset, size_t size1)
+NTSTATUS cli_smbwrite(struct cli_state *cli, uint16_t fnum, char *buf,
+		      off_t offset, size_t size1, size_t *ptotal)
 {
-	char *p;
+	uint8_t *bytes;
 	ssize_t total = 0;
 
-	do {
-		size_t size = MIN(size1, cli->max_xmit - 48);
-
-		memset(cli->outbuf,'\0',smb_size);
-		memset(cli->inbuf,'\0',smb_size);
-
-		cli_set_message(cli->outbuf,5, 0,True);
-
-		SCVAL(cli->outbuf,smb_com,SMBwrite);
-		SSVAL(cli->outbuf,smb_tid,cli->cnum);
-		cli_setup_packet(cli);
-
-		SSVAL(cli->outbuf,smb_vwv0,fnum);
-		SSVAL(cli->outbuf,smb_vwv1,size);
-		SIVAL(cli->outbuf,smb_vwv2,offset);
-		SSVAL(cli->outbuf,smb_vwv4,0);
-
-		p = smb_buf(cli->outbuf);
-		*p++ = 1;
-		SSVAL(p, 0, size); p += 2;
-		memcpy(p, buf + total, size); p += size;
-
-		cli_setup_bcc(cli, p);
+	/*
+	 * 3 bytes prefix
+	 */
 
-		if (!cli_send_smb(cli))
-			return -1;
+	bytes = TALLOC_ARRAY(talloc_tos(), uint8_t, 3);
+	if (bytes == NULL) {
+		return NT_STATUS_NO_MEMORY;
+	}
+	bytes[0] = 1;
 
-		if (!cli_receive_smb(cli))
-			return -1;
+	do {
+		size_t size = MIN(size1, cli->max_xmit - 48);
+		struct tevent_req *req;
+		uint16_t vwv[5];
+		uint16_t *ret_vwv;
+		NTSTATUS status;
+
+		SSVAL(vwv+0, 0, fnum);
+		SSVAL(vwv+1, 0, size);
+		SIVAL(vwv+2, 0, offset);
+		SSVAL(vwv+4, 0, 0);
+
+		bytes = TALLOC_REALLOC_ARRAY(talloc_tos(), bytes, uint8_t,
+					     size+3);
+		if (bytes == NULL) {
+			return NT_STATUS_NO_MEMORY;
+		}
+		SSVAL(bytes, 1, size);
+		memcpy(bytes + 3, buf + total, size);
 
-		if (cli_is_error(cli))
-			return -1;
+		status = cli_smb(talloc_tos(), cli, SMBwrite, 0, 5, vwv,
+				 size+3, bytes, &req, 1, NULL, &ret_vwv,
+				 NULL, NULL);
+		if (!NT_STATUS_IS_OK(status)) {
+			TALLOC_FREE(bytes);
+			return status;
+		}
 
-		size = SVAL(cli->inbuf,smb_vwv0);
-		if (size == 0)
+		size = SVAL(ret_vwv+0, 0);
+		TALLOC_FREE(req);
+		if (size == 0) {
 			break;
-
+		}
 		size1 -= size;
 		total += size;
 		offset += size;
 
 	} while (size1);
 
-	return total;
+	TALLOC_FREE(bytes);
+
+	if (ptotal != NULL) {
+		*ptotal = total;
+	}
+	return NT_STATUS_OK;
 }
 
 /*
diff --git a/source3/torture/torture.c b/source3/torture/torture.c
index 61cfb9e..66433ec 100644
--- a/source3/torture/torture.c
+++ b/source3/torture/torture.c
@@ -961,7 +961,7 @@ static bool run_readwritelarge_internal(int max_xmit_k)
 
 	cli1->max_xmit = 4*1024;
 
-	cli_smbwrite(cli1, fnum1, buf, 0, sizeof(buf));
+	cli_smbwrite(cli1, fnum1, buf, 0, sizeof(buf), NULL);
 
 	if (!NT_STATUS_IS_OK(cli_qfileinfo_basic(
 				     cli1, fnum1, NULL, &fsize, NULL, NULL,
@@ -1389,11 +1389,13 @@ static bool run_tcon2_test(int dummy)
 
 	status = cli_raw_tcon(cli, service, password, "?????", &max_xmit, &cnum);
 
+	SAFE_FREE(service);
+
 	if (!NT_STATUS_IS_OK(status)) {
-		printf("tcon2 failed : %s\n", cli_errstr(cli));
+		printf("tcon2 failed : %s\n", nt_errstr(status));
 	} else {
-		printf("tcon OK : max_xmit=%d cnum=%d tid=%d\n", 
-		       (int)max_xmit, (int)cnum, SVAL(cli->inbuf, smb_tid));
+		printf("tcon OK : max_xmit=%d cnum=%d\n",
+		       (int)max_xmit, (int)cnum);
 	}
 
 	if (!torture_close_connection(cli)) {
@@ -2776,21 +2778,41 @@ static void rand_buf(char *buf, int len)
 /* send smb negprot commands, not reading the response */
 static bool run_negprot_nowait(int dummy)
 {
+	struct tevent_context *ev;
 	int i;
-	static struct cli_state *cli;
+	struct cli_state *cli;
 	bool correct = True;
 
 	printf("starting negprot nowait test\n");
 
+	ev = tevent_context_init(talloc_tos());
+	if (ev == NULL) {
+		return false;
+	}
+
 	if (!(cli = open_nbt_connection())) {
+		TALLOC_FREE(ev);
 		return False;
 	}
 
 	for (i=0;i<50000;i++) {
-		cli_negprot_sendsync(cli);
+		struct tevent_req *req;
+
+		req = cli_negprot_send(ev, ev, cli);
+		if (req == NULL) {
+			TALLOC_FREE(ev);
+			return false;
+		}
+		if (!tevent_req_poll(req, ev)) {
+			d_fprintf(stderr, "tevent_req_poll failed: %s\n",
+				  strerror(errno));
+			TALLOC_FREE(ev);
+			return false;
+		}
+		TALLOC_FREE(req);
 	}
 
-	if (!torture_close_connection(cli)) {
+	if (torture_close_connection(cli)) {
 		correct = False;
 	}
 


-- 
Samba Shared Repository


More information about the samba-cvs mailing list