The Samba-Bugzilla – Attachment 4664 Details for
Bug 6673
smbpasswd does not work with "unix password sync = yes"
Home
|
New
|
Browse
|
Search
|
[?]
|
Reports
|
Requests
|
Help
|
New Account
|
Log In
[x]
|
Forgot Password
Login:
[x]
[patch]
git-am format patch for 3.4.1.
0001-Fix-bug-6673-smbpasswd-does-not-work-with-unix-pa.patch (text/plain), 8.60 KB, created by
Jeremy Allison
on 2009-09-08 18:24:39 UTC
(
hide
)
Description:
git-am format patch for 3.4.1.
Filename:
MIME Type:
Creator:
Jeremy Allison
Created:
2009-09-08 18:24:39 UTC
Size:
8.60 KB
patch
obsolete
>From ab6980930bca9bd267c37c13896c413c981ede84 Mon Sep 17 00:00:00 2001 >From: Jeremy Allison <jra@samba.org> >Date: Tue, 8 Sep 2009 16:22:46 -0700 >Subject: [PATCH] Fix bug 6673 - smbpasswd does not work with "unix password sync = yes". > Revert change from 3.3 -> 3.4 with read_socket_with_timeout changed > from sys_read() to sys_recv(). read_socket_with_timeout() is called > with non-fd's (with a pty in chgpasswd.c and with a disk file in > lib/dbwrap_file.c via read_data()). recv works for the disk file, > but not the pty. Change the name of read_socket_with_timeout() to > read_fd_with_timeout() to make this clear (and add comments). > Jeremy. > >--- > source3/include/proto.h | 2 +- > source3/lib/util_sock.c | 42 +++++++++++++++++++++++++----------------- > source3/libsmb/clientgen.c | 2 +- > source3/smbd/chgpasswd.c | 2 +- > source3/smbd/process.c | 4 ++-- > 5 files changed, 30 insertions(+), 22 deletions(-) > >diff --git a/source3/include/proto.h b/source3/include/proto.h >index aea32f9..d33a019 100644 >--- a/source3/include/proto.h >+++ b/source3/include/proto.h >@@ -1373,7 +1373,7 @@ ssize_t read_udp_v4_socket(int fd, > char *buf, > size_t len, > struct sockaddr_storage *psa); >-NTSTATUS read_socket_with_timeout(int fd, char *buf, >+NTSTATUS read_fd_with_timeout(int fd, char *buf, > size_t mincnt, size_t maxcnt, > unsigned int time_out, > size_t *size_ret); >diff --git a/source3/lib/util_sock.c b/source3/lib/util_sock.c >index 43ea8b5..da79aca 100644 >--- a/source3/lib/util_sock.c >+++ b/source3/lib/util_sock.c >@@ -490,13 +490,15 @@ ssize_t read_udp_v4_socket(int fd, > } > > /**************************************************************************** >- Read data from a socket with a timout in msec. >+ Read data from a file descriptor with a timout in msec. > mincount = if timeout, minimum to read before returning > maxcount = number to be read. > time_out = timeout in milliseconds >+ NB. This can be called with a non-socket fd, don't change >+ sys_read() to sys_recv() or other socket call. > ****************************************************************************/ > >-NTSTATUS read_socket_with_timeout(int fd, char *buf, >+NTSTATUS read_fd_with_timeout(int fd, char *buf, > size_t mincnt, size_t maxcnt, > unsigned int time_out, > size_t *size_ret) >@@ -519,10 +521,10 @@ NTSTATUS read_socket_with_timeout(int fd, char *buf, > } > > while (nread < mincnt) { >- readret = sys_recv(fd, buf + nread, maxcnt - nread, 0); >+ readret = sys_read(fd, buf + nread, maxcnt - nread); > > if (readret == 0) { >- DEBUG(5,("read_socket_with_timeout: " >+ DEBUG(5,("read_fd_with_timeout: " > "blocking read. EOF from client.\n")); > return NT_STATUS_END_OF_FILE; > } >@@ -531,12 +533,12 @@ NTSTATUS read_socket_with_timeout(int fd, char *buf, > if (fd == get_client_fd()) { > /* Try and give an error message > * saying what client failed. */ >- DEBUG(0,("read_socket_with_timeout: " >+ DEBUG(0,("read_fd_with_timeout: " > "client %s read error = %s.\n", > get_peer_addr(fd,addr,sizeof(addr)), > strerror(errno) )); > } else { >- DEBUG(0,("read_socket_with_timeout: " >+ DEBUG(0,("read_fd_with_timeout: " > "read error = %s.\n", > strerror(errno) )); > } >@@ -569,12 +571,12 @@ NTSTATUS read_socket_with_timeout(int fd, char *buf, > if (fd == get_client_fd()) { > /* Try and give an error message saying > * what client failed. */ >- DEBUG(0,("read_socket_with_timeout: timeout " >+ DEBUG(0,("read_fd_with_timeout: timeout " > "read for client %s. select error = %s.\n", > get_peer_addr(fd,addr,sizeof(addr)), > strerror(errno) )); > } else { >- DEBUG(0,("read_socket_with_timeout: timeout " >+ DEBUG(0,("read_fd_with_timeout: timeout " > "read. select error = %s.\n", > strerror(errno) )); > } >@@ -583,16 +585,16 @@ NTSTATUS read_socket_with_timeout(int fd, char *buf, > > /* Did we timeout ? */ > if (selrtn == 0) { >- DEBUG(10,("read_socket_with_timeout: timeout read. " >+ DEBUG(10,("read_fd_with_timeout: timeout read. " > "select timed out.\n")); > return NT_STATUS_IO_TIMEOUT; > } > >- readret = sys_recv(fd, buf+nread, maxcnt-nread, 0); >+ readret = sys_read(fd, buf+nread, maxcnt-nread); > > if (readret == 0) { > /* we got EOF on the file descriptor */ >- DEBUG(5,("read_socket_with_timeout: timeout read. " >+ DEBUG(5,("read_fd_with_timeout: timeout read. " > "EOF from client.\n")); > return NT_STATUS_END_OF_FILE; > } >@@ -602,12 +604,12 @@ NTSTATUS read_socket_with_timeout(int fd, char *buf, > if (fd == get_client_fd()) { > /* Try and give an error message > * saying what client failed. */ >- DEBUG(0,("read_socket_with_timeout: timeout " >+ DEBUG(0,("read_fd_with_timeout: timeout " > "read to client %s. read error = %s.\n", > get_peer_addr(fd,addr,sizeof(addr)), > strerror(errno) )); > } else { >- DEBUG(0,("read_socket_with_timeout: timeout " >+ DEBUG(0,("read_fd_with_timeout: timeout " > "read. read error = %s.\n", > strerror(errno) )); > } >@@ -626,16 +628,20 @@ NTSTATUS read_socket_with_timeout(int fd, char *buf, > } > > /**************************************************************************** >- Read data from the client, reading exactly N bytes. >+ Read data from an fd, reading exactly N bytes. >+ NB. This can be called with a non-socket fd, don't add dependencies >+ on socket calls. > ****************************************************************************/ > > NTSTATUS read_data(int fd, char *buffer, size_t N) > { >- return read_socket_with_timeout(fd, buffer, N, N, 0, NULL); >+ return read_fd_with_timeout(fd, buffer, N, N, 0, NULL); > } > > /**************************************************************************** > Write all data from an iov array >+ NB. This can be called with a non-socket fd, don't add dependencies >+ on socket calls. > ****************************************************************************/ > > ssize_t write_data_iov(int fd, const struct iovec *orig_iov, int iovcnt) >@@ -705,6 +711,8 @@ ssize_t write_data_iov(int fd, const struct iovec *orig_iov, int iovcnt) > > /**************************************************************************** > Write data to a fd. >+ NB. This can be called with a non-socket fd, don't add dependencies >+ on socket calls. > ****************************************************************************/ > > ssize_t write_data(int fd, const char *buffer, size_t N) >@@ -765,7 +773,7 @@ NTSTATUS read_smb_length_return_keepalive(int fd, char *inbuf, > int msg_type; > NTSTATUS status; > >- status = read_socket_with_timeout(fd, inbuf, 4, 4, timeout, NULL); >+ status = read_fd_with_timeout(fd, inbuf, 4, 4, timeout, NULL); > > if (!NT_STATUS_IS_OK(status)) { > return status; >@@ -846,7 +854,7 @@ NTSTATUS receive_smb_raw(int fd, char *buffer, size_t buflen, unsigned int timeo > len = MIN(len,maxlen); > } > >- status = read_socket_with_timeout( >+ status = read_fd_with_timeout( > fd, buffer+4, len, len, timeout, &len); > > if (!NT_STATUS_IS_OK(status)) { >diff --git a/source3/libsmb/clientgen.c b/source3/libsmb/clientgen.c >index c1ba4e5..356db57 100644 >--- a/source3/libsmb/clientgen.c >+++ b/source3/libsmb/clientgen.c >@@ -218,7 +218,7 @@ ssize_t cli_receive_smb_data(struct cli_state *cli, char *buffer, size_t len) > > set_smb_read_error(&cli->smb_rw_error, SMB_READ_OK); > >- status = read_socket_with_timeout( >+ status = read_fd_with_timeout( > cli->fd, buffer, len, len, cli->timeout, NULL); > if (NT_STATUS_IS_OK(status)) { > return len; >diff --git a/source3/smbd/chgpasswd.c b/source3/smbd/chgpasswd.c >index 100c0b9..61c3afb 100644 >--- a/source3/smbd/chgpasswd.c >+++ b/source3/smbd/chgpasswd.c >@@ -268,7 +268,7 @@ static int expect(int master, char *issue, char *expected) > buffer[nread] = 0; > > while (True) { >- status = read_socket_with_timeout( >+ status = read_fd_with_timeout( > master, buffer + nread, 1, > sizeof(buffer) - nread - 1, > timeout, &len); >diff --git a/source3/smbd/process.c b/source3/smbd/process.c >index e1069eb..caf9241 100644 >--- a/source3/smbd/process.c >+++ b/source3/smbd/process.c >@@ -127,7 +127,7 @@ static NTSTATUS read_packet_remainder(int fd, char *buffer, > return NT_STATUS_OK; > } > >- return read_socket_with_timeout(fd, buffer, len, len, timeout, NULL); >+ return read_fd_with_timeout(fd, buffer, len, len, timeout, NULL); > } > > /**************************************************************************** >@@ -161,7 +161,7 @@ static NTSTATUS receive_smb_raw_talloc_partial_read(TALLOC_CTX *mem_ctx, > > memcpy(writeX_header, lenbuf, 4); > >- status = read_socket_with_timeout( >+ status = read_fd_with_timeout( > fd, writeX_header + 4, > STANDARD_WRITE_AND_X_HEADER_SIZE, > STANDARD_WRITE_AND_X_HEADER_SIZE, >-- >1.5.4.3 >
You cannot view the attachment while viewing its details because your browser does not support IFRAMEs.
View the attachment on a separate page
.
View Attachment As Raw
Flags:
vl
:
review+
Actions:
View
Attachments on
bug 6673
:
4606
|
4607
|
4614
|
4618
|
4627
|
4630
|
4631
|
4632
|
4642
|
4643
|
4644
|
4653
|
4654
|
4655
| 4664