[SCM] Samba Shared Repository - branch v3-2-test updated - initial-v3-2-test-1796-g26771bd

Volker Lendecke vl at samba.org
Sat Feb 2 10:22:19 GMT 2008


The branch, v3-2-test has been updated
       via  26771bdca0e6837db267f4db7907e489acd92fc6 (commit)
       via  fad87968921eca0b5144760c412c5f599f9066f3 (commit)
       via  0f7d360a01baf02e251846118cb36e6a1cdcbeb9 (commit)
       via  af40b71023f8c4a2133d996ea698c72b97624043 (commit)
       via  9e2947039ef70cab8bbd6027182d9c721eac3194 (commit)
       via  ba771bd858602452a9e58c3aab1336f2ac8a25ef (commit)
       via  90554799afa42855c3e7b87dc632e67f0952f988 (commit)
       via  f9c8ac83ff42137d2101d3bb17e5dcc3c3d70a8f (commit)
       via  ddbdd11a49fba9ec4834807dec385cdf3120ce00 (commit)
       via  187707591ffa2668aecd4857cb2ef2cd20bd6b08 (commit)
       via  9a82350ba92bf5fc4f2968d5130bcb2118e7a981 (commit)
       via  667864d442ea7e1faed7b032315db8856fa91481 (commit)
       via  fff31f8f35ad26d67e78b9a71cfd35670aa9ac5f (commit)
       via  5750c3a51b4ddac635a98195d1621b24f91bad3f (commit)
       via  73a79a957a33a8761acf54598ce71e3604ecf3c5 (commit)
       via  59e8f22f36be5a70fdb101964570ce7c10e8ff65 (commit)
       via  546ca0414aa1a9389e620b8f532224a3a19256d4 (commit)
       via  1ff924c4360952eb1d714a2f2ec3760b380c7a24 (commit)
      from  e02b07da063200eaf7f2902b7541237b3f9442d1 (commit)

http://gitweb.samba.org/?p=samba.git;a=shortlog;h=v3-2-test


- Log -----------------------------------------------------------------
commit 26771bdca0e6837db267f4db7907e489acd92fc6
Author: Volker Lendecke <vl at samba.org>
Date:   Sat Jan 26 15:36:00 2008 +0100

    Remove smb_read_error global
    
    YESS :-)

commit fad87968921eca0b5144760c412c5f599f9066f3
Author: Volker Lendecke <vl at samba.org>
Date:   Sat Jan 26 15:33:40 2008 +0100

    Remove dependency on get_srv_read_error() from main loop

commit 0f7d360a01baf02e251846118cb36e6a1cdcbeb9
Author: Volker Lendecke <vl at samba.org>
Date:   Sat Jan 26 15:18:33 2008 +0100

    Convert receive_message_or_smb to NTSTATUS

commit af40b71023f8c4a2133d996ea698c72b97624043
Author: Volker Lendecke <vl at samba.org>
Date:   Sat Jan 26 10:39:21 2008 +0100

    Convert read_data() to NTSTATUS

commit 9e2947039ef70cab8bbd6027182d9c721eac3194
Author: Volker Lendecke <vl at samba.org>
Date:   Fri Jan 25 23:57:20 2008 +0100

    Make get_srv_read_error static to process.c

commit ba771bd858602452a9e58c3aab1336f2ac8a25ef
Author: Volker Lendecke <vl at samba.org>
Date:   Fri Jan 25 23:54:22 2008 +0100

    Convert receive_smb_raw to NTSTATUS

commit 90554799afa42855c3e7b87dc632e67f0952f988
Author: Volker Lendecke <vl at samba.org>
Date:   Fri Jan 25 23:43:50 2008 +0100

    read_socket_with_timeout_ntstatus->read_socket_with_timeout

commit f9c8ac83ff42137d2101d3bb17e5dcc3c3d70a8f
Author: Volker Lendecke <vl at samba.org>
Date:   Fri Jan 25 23:41:48 2008 +0100

    Get rid of read_socket_with_timeout

commit ddbdd11a49fba9ec4834807dec385cdf3120ce00
Author: Volker Lendecke <vl at samba.org>
Date:   Fri Jan 25 23:28:22 2008 +0100

    Convert receive_smb_talloc to NTSTATUS

commit 187707591ffa2668aecd4857cb2ef2cd20bd6b08
Author: Volker Lendecke <vl at samba.org>
Date:   Fri Jan 25 23:18:56 2008 +0100

    Convert receive_smb_raw_talloc to NTSTATUS

commit 9a82350ba92bf5fc4f2968d5130bcb2118e7a981
Author: Volker Lendecke <vl at samba.org>
Date:   Fri Jan 25 23:12:04 2008 +0100

    Convert receive_smb_raw_talloc_partial_read to NTSTATUS

commit 667864d442ea7e1faed7b032315db8856fa91481
Author: Volker Lendecke <vl at samba.org>
Date:   Fri Jan 25 22:27:59 2008 +0100

    Convert read_packet_remainder to return NTSTATUS

commit fff31f8f35ad26d67e78b9a71cfd35670aa9ac5f
Author: Volker Lendecke <vl at samba.org>
Date:   Fri Jan 25 22:21:38 2008 +0100

    Convert read_packet_remainder to use read_socket_with_timeout_ntstatus

commit 5750c3a51b4ddac635a98195d1621b24f91bad3f
Author: Volker Lendecke <vl at samba.org>
Date:   Fri Jan 25 21:31:40 2008 +0100

    Convert read_smb_length to return NTSTATUS

commit 73a79a957a33a8761acf54598ce71e3604ecf3c5
Author: Volker Lendecke <vl at samba.org>
Date:   Fri Jan 25 21:24:48 2008 +0100

    Convert read_smb_length_return_keepalive to return NTSTATUS

commit 59e8f22f36be5a70fdb101964570ce7c10e8ff65
Author: Volker Lendecke <vl at samba.org>
Date:   Fri Jan 25 21:02:52 2008 +0100

    Convert read_smb_length_return_keepalive to read_socket_with_timeout_ntstatus

commit 546ca0414aa1a9389e620b8f532224a3a19256d4
Author: Volker Lendecke <vl at samba.org>
Date:   Thu Jan 24 19:17:14 2008 +0100

    Add read_socket_with_timeout_ntstatus

commit 1ff924c4360952eb1d714a2f2ec3760b380c7a24
Author: Volker Lendecke <vl at samba.org>
Date:   Thu Jan 24 19:06:25 2008 +0100

    Return NOTFOUND from db_tdb_delete if the record does not exist

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

Summary of changes:
 source/client/client.c          |   27 +++-
 source/lib/dbwrap_tdb.c         |   11 ++-
 source/lib/util_sock.c          |  129 +++++++----------
 source/libsmb/clientgen.c       |   53 ++++++-
 source/nmbd/asyncdns.c          |   19 ++-
 source/smbd/chgpasswd.c         |   19 ++-
 source/smbd/oplock_irix.c       |    2 -
 source/smbd/process.c           |  298 ++++++++++++++++-----------------------
 source/smbd/reply.c             |   21 +--
 source/utils/smbfilter.c        |    8 +-
 source/winbindd/winbindd_dual.c |   20 ++--
 11 files changed, 307 insertions(+), 300 deletions(-)


Changeset truncated at 500 lines:

diff --git a/source/client/client.c b/source/client/client.c
index c934310..1c85a6d 100644
--- a/source/client/client.c
+++ b/source/client/client.c
@@ -4422,9 +4422,30 @@ static void readline_callback(void)
 	   session keepalives and then drop them here.
 	*/
 	if (FD_ISSET(cli->fd,&fds)) {
-		if (receive_smb_raw(cli->fd,cli->inbuf,0,0,&cli->smb_rw_error) == -1) {
-			DEBUG(0, ("Read from server failed, maybe it closed the "
-				"connection\n"));
+		NTSTATUS status;
+		size_t len;
+
+		set_smb_read_error(&cli->smb_rw_error, SMB_READ_OK);
+
+		status = receive_smb_raw(cli->fd, cli->inbuf, 0, 0, &len);
+
+		if (!NT_STATUS_IS_OK(status)) {
+			DEBUG(0, ("Read from server failed, maybe it closed "
+				  "the connection\n"));
+
+			if (NT_STATUS_EQUAL(status, NT_STATUS_END_OF_FILE)) {
+				set_smb_read_error(&cli->smb_rw_error,
+						   SMB_READ_EOF);
+				return;
+			}
+
+			if (NT_STATUS_EQUAL(status, NT_STATUS_IO_TIMEOUT)) {
+				set_smb_read_error(&cli->smb_rw_error,
+						   SMB_READ_TIMEOUT);
+				return;
+			}
+
+			set_smb_read_error(&cli->smb_rw_error, SMB_READ_ERROR);
 			return;
 		}
 		if(CVAL(cli->inbuf,0) != SMBkeepalive) {
diff --git a/source/lib/dbwrap_tdb.c b/source/lib/dbwrap_tdb.c
index 18f9495..da55049 100644
--- a/source/lib/dbwrap_tdb.c
+++ b/source/lib/dbwrap_tdb.c
@@ -196,8 +196,15 @@ static NTSTATUS db_tdb_delete(struct db_record *rec)
 	struct db_tdb_ctx *ctx = talloc_get_type_abort(rec->private_data,
 						       struct db_tdb_ctx);
 
-	return (tdb_delete(ctx->wtdb->tdb, rec->key) == 0) ?
-		NT_STATUS_OK : NT_STATUS_UNSUCCESSFUL;
+	if (tdb_delete(ctx->wtdb->tdb, rec->key) == 0) {
+		return NT_STATUS_OK;
+	}
+
+	if (tdb_error(ctx->wtdb->tdb) == TDB_ERR_NOEXIST) {
+		return NT_STATUS_NOT_FOUND;
+	}
+
+	return NT_STATUS_UNSUCCESSFUL;
 }
 
 struct db_tdb_traverse_ctx {
diff --git a/source/lib/util_sock.c b/source/lib/util_sock.c
index f5797f1..25d539c 100644
--- a/source/lib/util_sock.c
+++ b/source/lib/util_sock.c
@@ -913,12 +913,10 @@ ssize_t read_udp_v4_socket(int fd,
  time_out = timeout in milliseconds
 ****************************************************************************/
 
-ssize_t read_socket_with_timeout(int fd,
-				char *buf,
-				size_t mincnt,
-				size_t maxcnt,
-				unsigned int time_out,
-				enum smb_read_errors *pre)
+NTSTATUS read_socket_with_timeout(int fd, char *buf,
+				  size_t mincnt, size_t maxcnt,
+				  unsigned int time_out,
+				  size_t *size_ret)
 {
 	fd_set fds;
 	int selrtn;
@@ -929,9 +927,7 @@ ssize_t read_socket_with_timeout(int fd,
 
 	/* just checking .... */
 	if (maxcnt <= 0)
-		return(0);
-
-	set_smb_read_error(pre,SMB_READ_OK);
+		return NT_STATUS_OK;
 
 	/* Blocking read */
 	if (time_out == 0) {
@@ -945,8 +941,7 @@ ssize_t read_socket_with_timeout(int fd,
 			if (readret == 0) {
 				DEBUG(5,("read_socket_with_timeout: "
 					"blocking read. EOF from client.\n"));
-				set_smb_read_error(pre,SMB_READ_EOF);
-				return -1;
+				return NT_STATUS_END_OF_FILE;
 			}
 
 			if (readret == -1) {
@@ -962,12 +957,11 @@ ssize_t read_socket_with_timeout(int fd,
 						"read error = %s.\n",
 						strerror(errno) ));
 				}
-				set_smb_read_error(pre,SMB_READ_ERROR);
-				return -1;
+				return map_nt_error_from_unix(errno);
 			}
 			nread += readret;
 		}
-		return((ssize_t)nread);
+		goto done;
 	}
 
 	/* Most difficult - timeout read */
@@ -1001,16 +995,14 @@ ssize_t read_socket_with_timeout(int fd,
 				"read. select error = %s.\n",
 				strerror(errno) ));
 			}
-			set_smb_read_error(pre,SMB_READ_ERROR);
-			return -1;
+			return map_nt_error_from_unix(errno);
 		}
 
 		/* Did we timeout ? */
 		if (selrtn == 0) {
 			DEBUG(10,("read_socket_with_timeout: timeout read. "
 				"select timed out.\n"));
-			set_smb_read_error(pre,SMB_READ_TIMEOUT);
-			return -1;
+			return NT_STATUS_IO_TIMEOUT;
 		}
 
 		readret = sys_read(fd, buf+nread, maxcnt-nread);
@@ -1019,8 +1011,7 @@ ssize_t read_socket_with_timeout(int fd,
 			/* we got EOF on the file descriptor */
 			DEBUG(5,("read_socket_with_timeout: timeout read. "
 				"EOF from client.\n"));
-			set_smb_read_error(pre,SMB_READ_EOF);
-			return -1;
+			return NT_STATUS_END_OF_FILE;
 		}
 
 		if (readret == -1) {
@@ -1037,24 +1028,27 @@ ssize_t read_socket_with_timeout(int fd,
 					"read. read error = %s.\n",
 					strerror(errno) ));
 			}
-			set_smb_read_error(pre,SMB_READ_ERROR);
-			return -1;
+			return map_nt_error_from_unix(errno);
 		}
 
 		nread += readret;
 	}
 
+ done:
 	/* Return the number we got */
-	return (ssize_t)nread;
+	if (size_ret) {
+		*size_ret = nread;
+	}
+	return NT_STATUS_OK;
 }
 
 /****************************************************************************
  Read data from the client, reading exactly N bytes.
 ****************************************************************************/
 
-ssize_t read_data(int fd,char *buffer,size_t N, enum smb_read_errors *pre)
+NTSTATUS read_data(int fd, char *buffer, size_t N)
 {
-	return read_socket_with_timeout(fd, buffer, N, N, 0, pre);
+	return read_socket_with_timeout(fd, buffer, N, N, 0, NULL);
 }
 
 /****************************************************************************
@@ -1116,19 +1110,20 @@ bool send_keepalive(int client)
  Timeout is in milliseconds.
 ****************************************************************************/
 
-ssize_t read_smb_length_return_keepalive(int fd,
-					char *inbuf,
-					unsigned int timeout,
-					enum smb_read_errors *pre)
+NTSTATUS read_smb_length_return_keepalive(int fd, char *inbuf,
+					  unsigned int timeout,
+					  size_t *len)
 {
-	ssize_t len=0;
 	int msg_type;
+	NTSTATUS status;
 
-	if (read_socket_with_timeout(fd, inbuf, 4, 4, timeout, pre) != 4) {
-		return -1;
+	status = read_socket_with_timeout(fd, inbuf, 4, 4, timeout, NULL);
+
+	if (!NT_STATUS_IS_OK(status)) {
+		return status;
 	}
 
-	len = smb_len(inbuf);
+	*len = smb_len(inbuf);
 	msg_type = CVAL(inbuf,0);
 
 	if (msg_type == SMBkeepalive) {
@@ -1137,7 +1132,7 @@ ssize_t read_smb_length_return_keepalive(int fd,
 
 	DEBUG(10,("got smb length of %lu\n",(unsigned long)len));
 
-	return len;
+	return NT_STATUS_OK;
 }
 
 /****************************************************************************
@@ -1147,24 +1142,27 @@ ssize_t read_smb_length_return_keepalive(int fd,
  Timeout is in milliseconds.
 ****************************************************************************/
 
-ssize_t read_smb_length(int fd, char *inbuf, unsigned int timeout, enum smb_read_errors *pre)
+NTSTATUS read_smb_length(int fd, char *inbuf, unsigned int timeout,
+			 size_t *len)
 {
-	ssize_t len;
 	uint8_t msgtype = SMBkeepalive;
 
 	while (msgtype == SMBkeepalive) {
-		len = read_smb_length_return_keepalive(fd, inbuf, timeout,
-						       pre);
-		if (len < 0) {
-			return len;
+		NTSTATUS status;
+
+		status = read_smb_length_return_keepalive(fd, inbuf, timeout,
+							  len);
+		if (!NT_STATUS_IS_OK(status)) {
+			return status;
 		}
+
 		msgtype = CVAL(inbuf, 0);
 	}
 
 	DEBUG(10,("read_smb_length: got smb length of %lu\n",
 		  (unsigned long)len));
 
-	return len;
+	return NT_STATUS_OK;
 }
 
 /****************************************************************************
@@ -1177,28 +1175,17 @@ ssize_t read_smb_length(int fd, char *inbuf, unsigned int timeout, enum smb_read
  Doesn't check the MAC on signed packets.
 ****************************************************************************/
 
-ssize_t receive_smb_raw(int fd,
-			char *buffer,
-			unsigned int timeout,
-			size_t maxlen,
-			enum smb_read_errors *pre)
+NTSTATUS receive_smb_raw(int fd, char *buffer, unsigned int timeout,
+			 size_t maxlen, size_t *p_len)
 {
-	ssize_t len,ret;
-
-	set_smb_read_error(pre,SMB_READ_OK);
-
-	len = read_smb_length_return_keepalive(fd,buffer,timeout,pre);
-	if (len < 0) {
-		DEBUG(10,("receive_smb_raw: length < 0!\n"));
+	size_t len;
+	NTSTATUS status;
 
-		/*
-		 * Correct fix. smb_read_error may have already been
-		 * set. Only set it here if not already set. Global
-		 * variables still suck :-). JRA.
-		 */
+	status = read_smb_length_return_keepalive(fd,buffer,timeout,&len);
 
-		cond_set_smb_read_error(pre,SMB_READ_ERROR);
-		return -1;
+	if (!NT_STATUS_IS_OK(status)) {
+		DEBUG(10, ("receive_smb_raw: %s!\n", nt_errstr(status)));
+		return status;
 	}
 
 	/*
@@ -1210,15 +1197,7 @@ ssize_t receive_smb_raw(int fd,
 		DEBUG(0,("Invalid packet length! (%lu bytes).\n",
 					(unsigned long)len));
 		if (len > BUFFER_SIZE + (SAFETY_MARGIN/2)) {
-
-			/*
-			 * Correct fix. smb_read_error may have already been
-			 * set. Only set it here if not already set. Global
-			 * variables still suck :-). JRA.
-			 */
-
-			cond_set_smb_read_error(pre,SMB_READ_ERROR);
-			return -1;
+			return NT_STATUS_INVALID_PARAMETER;
 		}
 	}
 
@@ -1227,12 +1206,11 @@ ssize_t receive_smb_raw(int fd,
 			len = MIN(len,maxlen);
 		}
 
-		ret = read_socket_with_timeout(fd, buffer+4, len, len, timeout,
-					       pre);
+		status = read_socket_with_timeout(
+			fd, buffer+4, len, len, timeout, &len);
 
-		if (ret != len) {
-			cond_set_smb_read_error(pre,SMB_READ_ERROR);
-			return -1;
+		if (!NT_STATUS_IS_OK(status)) {
+			return status;
 		}
 
 		/* not all of samba3 properly checks for packet-termination
@@ -1241,7 +1219,8 @@ ssize_t receive_smb_raw(int fd,
 		SSVAL(buffer+4,len, 0);
 	}
 
-	return len;
+	*p_len = len;
+	return NT_STATUS_OK;
 }
 
 /****************************************************************************
diff --git a/source/libsmb/clientgen.c b/source/libsmb/clientgen.c
index 042b3bd..3b7669f 100644
--- a/source/libsmb/clientgen.c
+++ b/source/libsmb/clientgen.c
@@ -69,15 +69,36 @@ int cli_set_port(struct cli_state *cli, int port)
 
 static ssize_t client_receive_smb(struct cli_state *cli, size_t maxlen)
 {
-	ssize_t len;
+	size_t len;
 
 	for(;;) {
-		len = receive_smb_raw(cli->fd, cli->inbuf, cli->timeout,
-				maxlen, &cli->smb_rw_error);
+		NTSTATUS status;
 
-		if (len < 0) {
+		set_smb_read_error(&cli->smb_rw_error, SMB_READ_OK);
+
+		status = receive_smb_raw(cli->fd, cli->inbuf, cli->timeout,
+					 maxlen, &len);
+		if (!NT_STATUS_IS_OK(status)) {
 			DEBUG(10,("client_receive_smb failed\n"));
 			show_msg(cli->inbuf);
+
+			if (NT_STATUS_EQUAL(status, NT_STATUS_END_OF_FILE)) {
+				set_smb_read_error(&cli->smb_rw_error,
+						   SMB_READ_EOF);
+				return -1;
+			}
+
+			if (NT_STATUS_EQUAL(status, NT_STATUS_IO_TIMEOUT)) {
+				set_smb_read_error(&cli->smb_rw_error,
+						   SMB_READ_TIMEOUT);
+				return -1;
+			}
+
+			set_smb_read_error(&cli->smb_rw_error, SMB_READ_ERROR);
+			return -1;
+		}
+
+		if (len < 0) {
 			return len;
 		}
 
@@ -180,8 +201,28 @@ bool cli_receive_smb(struct cli_state *cli)
 
 ssize_t cli_receive_smb_data(struct cli_state *cli, char *buffer, size_t len)
 {
-	return read_socket_with_timeout(cli->fd, buffer, len, len,
-					cli->timeout, &cli->smb_rw_error);
+	NTSTATUS status;
+
+	set_smb_read_error(&cli->smb_rw_error, SMB_READ_OK);
+
+	status = read_socket_with_timeout(
+		cli->fd, buffer, len, len, cli->timeout, NULL);
+	if (NT_STATUS_IS_OK(status)) {
+		return len;
+	}
+
+	if (NT_STATUS_EQUAL(status, NT_STATUS_END_OF_FILE)) {
+		set_smb_read_error(&cli->smb_rw_error, SMB_READ_EOF);
+		return -1;
+	}
+
+	if (NT_STATUS_EQUAL(status, NT_STATUS_IO_TIMEOUT)) {
+		set_smb_read_error(&cli->smb_rw_error, SMB_READ_TIMEOUT);
+		return -1;
+	}
+
+	set_smb_read_error(&cli->smb_rw_error, SMB_READ_ERROR);
+	return -1;
 }
 
 /****************************************************************************
diff --git a/source/nmbd/asyncdns.c b/source/nmbd/asyncdns.c
index 33c1cb6..5e55659 100644
--- a/source/nmbd/asyncdns.c
+++ b/source/nmbd/asyncdns.c
@@ -87,8 +87,13 @@ static void asyncdns_process(void)
 	DEBUGLEVEL = -1;
 
 	while (1) {
-		if (read_data(fd_in, (char *)&r, sizeof(r), NULL) != sizeof(r)) 
+		NTSTATUS status;
+
+		status = read_data(fd_in, (char *)&r, sizeof(r));
+
+		if (!NT_STATUS_IS_OK(status)) {
 			break;
+		}
 
 		pull_ascii_nstring( qname, sizeof(qname), r.name.name);
 		r.result.s_addr = interpret_addr(qname);
@@ -194,7 +199,7 @@ void run_dns_queue(void)
 	struct query_record r;
 	struct packet_struct *p, *p2;
 	struct name_record *namerec;
-	int size;
+	NTSTATUS status;
 
 	if (fd_in == -1)
 		return;
@@ -208,11 +213,11 @@ void run_dns_queue(void)
 		start_async_dns();
 	}
 
-	if ((size=read_data(fd_in, (char *)&r, sizeof(r), NULL)) != sizeof(r)) {
-		if (size) {
-			DEBUG(0,("Incomplete DNS answer from child!\n"));
-			fd_in = -1;
-		}
+	status = read_data(fd_in, (char *)&r, sizeof(r));
+
+	if (!NT_STATUS_IS_OK(status)) {
+		DEBUG(0, ("read from child failed: %s\n", nt_errstr(status)));
+		fd_in = -1;
                 BlockSignals(True, SIGTERM);
 		return;
 	}
diff --git a/source/smbd/chgpasswd.c b/source/smbd/chgpasswd.c
index 668c8e2..e7ab60d 100644
--- a/source/smbd/chgpasswd.c
+++ b/source/smbd/chgpasswd.c
@@ -239,7 +239,8 @@ static int dochild(int master, const char *slavedev, const struct passwd *pass,
 static int expect(int master, char *issue, char *expected)
 {
 	char buffer[1024];
-	int attempts, timeout, nread, len;
+	int attempts, timeout, nread;
+	size_t len;
 	bool match = False;
 
 	for (attempts = 0; attempts < 2; attempts++) {
@@ -248,7 +249,8 @@ static int expect(int master, char *issue, char *expected)
 				DEBUG(100, ("expect: sending [%s]\n", issue));
 
 			if ((len = sys_write(master, issue, strlen(issue))) != strlen(issue)) {
-				DEBUG(2,("expect: (short) write returned %d\n", len ));
+				DEBUG(2,("expect: (short) write returned %d\n",
+					 (int)len ));
 				return False;
 			}
 		}
@@ -261,9 +263,16 @@ static int expect(int master, char *issue, char *expected)
 		nread = 0;
 		buffer[nread] = 0;
 
-		while ((len = read_socket_with_timeout(master, buffer + nread, 1,
-						       sizeof(buffer) - nread - 1,
-						       timeout, NULL)) > 0) {
+		while (True) {
+			NTSTATUS status;
+			status = read_socket_with_timeout(
+				master, buffer + nread, 1,
+				sizeof(buffer) - nread - 1,
+				timeout, &len);
+
+			if (!NT_STATUS_IS_OK(status)) {
+				break;
+			}
 			nread += len;
 			buffer[nread] = 0;
 
diff --git a/source/smbd/oplock_irix.c b/source/smbd/oplock_irix.c
index a4ea63b..788cd04 100644


-- 
Samba Shared Repository


More information about the samba-cvs mailing list