Get rid of read_socket_with_timeout
authorVolker Lendecke <vl@samba.org>
Fri, 25 Jan 2008 22:41:48 +0000 (23:41 +0100)
committerVolker Lendecke <vl@samba.org>
Sat, 2 Feb 2008 10:03:22 +0000 (11:03 +0100)
(This used to be commit f9c8ac83ff42137d2101d3bb17e5dcc3c3d70a8f)

source3/lib/util_sock.c
source3/libsmb/clientgen.c
source3/smbd/chgpasswd.c

index 32dd2bd8a8fc6dc0e7e54a43a459f1bb2990d5ea..d0d321ee39f3487c8915b5de26332fb0a0e06875 100644 (file)
@@ -1042,21 +1042,20 @@ NTSTATUS read_socket_with_timeout_ntstatus(int fd, char *buf,
        return NT_STATUS_OK;
 }
 
-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)
+/****************************************************************************
+ 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 status;
-       size_t size_ret;
 
        set_smb_read_error(pre, SMB_READ_OK);
 
-       status = read_socket_with_timeout_ntstatus(fd, buf, mincnt, maxcnt,
-                                                  time_out, &size_ret);
+       status = read_socket_with_timeout_ntstatus(fd, buffer, N, N, 0, NULL);
 
        if (NT_STATUS_IS_OK(status)) {
-               return size_ret;
+               return N;
        }
 
        if (NT_STATUS_EQUAL(status, NT_STATUS_END_OF_FILE)) {
@@ -1073,15 +1072,6 @@ ssize_t read_socket_with_timeout(int fd, char *buf,
        return -1;
 }
 
-/****************************************************************************
- 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)
-{
-       return read_socket_with_timeout(fd, buffer, N, N, 0, pre);
-}
-
 /****************************************************************************
  Write data to a fd.
 ****************************************************************************/
@@ -1214,7 +1204,6 @@ ssize_t receive_smb_raw(int fd,
                        enum smb_read_errors *pre)
 {
        size_t len;
-       ssize_t ret;
        NTSTATUS status;
 
        set_smb_read_error(pre,SMB_READ_OK);
@@ -1264,11 +1253,23 @@ ssize_t receive_smb_raw(int fd,
                        len = MIN(len,maxlen);
                }
 
-               ret = read_socket_with_timeout(fd, buffer+4, len, len, timeout,
-                                              pre);
+               set_smb_read_error(pre, SMB_READ_OK);
 
-               if (ret != len) {
-                       cond_set_smb_read_error(pre,SMB_READ_ERROR);
+               status = read_socket_with_timeout_ntstatus(
+                       fd, buffer+4, len, len, timeout, &len);
+
+               if (!NT_STATUS_IS_OK(status)) {
+                       if (NT_STATUS_EQUAL(status, NT_STATUS_END_OF_FILE)) {
+                               set_smb_read_error(pre, SMB_READ_EOF);
+                               return -1;
+                       }
+
+                       if (NT_STATUS_EQUAL(status, NT_STATUS_IO_TIMEOUT)) {
+                               set_smb_read_error(pre, SMB_READ_TIMEOUT);
+                               return -1;
+                       }
+
+                       set_smb_read_error(pre, SMB_READ_ERROR);
                        return -1;
                }
 
index 042b3bdfb041cbe7b53b65e13e7d9ac87921db73..086c158ed2925209581c3573ff31ba7c805a27af 100644 (file)
@@ -180,8 +180,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_ntstatus(
+               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;
 }
 
 /****************************************************************************
index 668c8e20957ac9f991c19cffa7c63d382d7b4d36..bd5ff1f5232fc8d8cbef714d4a4df70b5012abb1 100644 (file)
@@ -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_ntstatus(
+                               master, buffer + nread, 1,
+                               sizeof(buffer) - nread - 1,
+                               timeout, &len);
+
+                       if (!NT_STATUS_IS_OK(status)) {
+                               break;
+                       }
                        nread += len;
                        buffer[nread] = 0;