mirror of
https://github.com/samba-team/samba.git
synced 2025-03-07 00:58:40 +03:00
Remove read_with_timeout() and replaced its only caller (the passwd chat
stuff) with a call to read_socket_with_timeout() which does the same thing. Passwd chat still works but I couldn't figure out the right arguments to passwd chat to get it to work right but data was definitely getting through. (This used to be commit 88eb9e9486bca55a38e40ae53aed35ee338a68d7)
This commit is contained in:
parent
baa1276eb0
commit
c4b4386996
source3
@ -186,30 +186,6 @@ ssize_t read_udp_socket(int fd,char *buf,size_t len)
|
||||
return(ret);
|
||||
}
|
||||
|
||||
/*******************************************************************
|
||||
checks if read data is outstanding.
|
||||
********************************************************************/
|
||||
static int read_data_outstanding(int fd, unsigned int time_out)
|
||||
{
|
||||
int selrtn;
|
||||
fd_set fds;
|
||||
struct timeval timeout;
|
||||
|
||||
FD_ZERO(&fds);
|
||||
FD_SET(fd, &fds);
|
||||
|
||||
timeout.tv_sec = (time_t) (time_out / 1000);
|
||||
timeout.tv_usec = (long)(1000 * (time_out % 1000));
|
||||
|
||||
selrtn = sys_select_intr(fd + 1, &fds, NULL, NULL, &timeout);
|
||||
|
||||
if (selrtn <= 0)
|
||||
{
|
||||
return selrtn;
|
||||
}
|
||||
return FD_ISSET(fd, &fds) ? 1 : 0;
|
||||
}
|
||||
|
||||
/****************************************************************************
|
||||
Read data from a socket with a timout in msec.
|
||||
mincount = if timeout, minimum to read before returning
|
||||
@ -217,7 +193,7 @@ static int read_data_outstanding(int fd, unsigned int time_out)
|
||||
time_out = timeout in milliseconds
|
||||
****************************************************************************/
|
||||
|
||||
static ssize_t read_socket_with_timeout(int fd,char *buf,size_t mincnt,size_t maxcnt,unsigned int time_out)
|
||||
ssize_t read_socket_with_timeout(int fd,char *buf,size_t mincnt,size_t maxcnt,unsigned int time_out)
|
||||
{
|
||||
fd_set fds;
|
||||
int selrtn;
|
||||
@ -308,62 +284,6 @@ static ssize_t read_socket_with_timeout(int fd,char *buf,size_t mincnt,size_t ma
|
||||
return (ssize_t)nread;
|
||||
}
|
||||
|
||||
/****************************************************************************
|
||||
Read data from a fd with a timout in msec.
|
||||
mincount = if timeout, minimum to read before returning
|
||||
maxcount = number to be read.
|
||||
time_out = timeout in milliseconds
|
||||
****************************************************************************/
|
||||
|
||||
ssize_t read_with_timeout(int fd, char *buf, size_t mincnt, size_t maxcnt,
|
||||
unsigned int time_out)
|
||||
{
|
||||
ssize_t readret;
|
||||
size_t nread = 0;
|
||||
|
||||
/* just checking .... */
|
||||
if (maxcnt <= 0)
|
||||
return(0);
|
||||
|
||||
/* Blocking read */
|
||||
if (time_out <= 0) {
|
||||
if (mincnt == 0) mincnt = maxcnt;
|
||||
|
||||
while (nread < mincnt) {
|
||||
readret = sys_read(fd, buf + nread, maxcnt - nread);
|
||||
|
||||
if (readret <= 0)
|
||||
return readret;
|
||||
|
||||
nread += readret;
|
||||
}
|
||||
return((ssize_t)nread);
|
||||
}
|
||||
|
||||
/* Most difficult - timeout read */
|
||||
/* If this is ever called on a disk file and
|
||||
mincnt is greater then the filesize then
|
||||
system performance will suffer severely as
|
||||
select always returns true on disk files */
|
||||
|
||||
for (nread=0; nread < mincnt; ) {
|
||||
int selrtn = read_data_outstanding(fd, time_out);
|
||||
|
||||
if(selrtn <= 0)
|
||||
return selrtn;
|
||||
|
||||
readret = sys_read(fd, buf+nread, maxcnt-nread);
|
||||
|
||||
if (readret <= 0)
|
||||
return readret;
|
||||
|
||||
nread += readret;
|
||||
}
|
||||
|
||||
/* Return the number we got */
|
||||
return((ssize_t)nread);
|
||||
}
|
||||
|
||||
/****************************************************************************
|
||||
read data from the client, reading exactly N bytes.
|
||||
****************************************************************************/
|
||||
|
@ -249,9 +249,9 @@ static int expect(int master, char *issue, char *expected)
|
||||
nread = 0;
|
||||
buffer[nread] = 0;
|
||||
|
||||
while ((len = read_with_timeout(master, buffer + nread, 1,
|
||||
sizeof(buffer) - nread - 1,
|
||||
timeout)) > 0) {
|
||||
while ((len = read_socket_with_timeout(master, buffer + nread, 1,
|
||||
sizeof(buffer) - nread - 1,
|
||||
timeout)) > 0) {
|
||||
nread += len;
|
||||
buffer[nread] = 0;
|
||||
|
||||
@ -863,6 +863,10 @@ static NTSTATUS check_oem_password(const char *user,
|
||||
*/
|
||||
|
||||
new_pw_len = IVAL(lmdata, 512);
|
||||
|
||||
DEBUG(0, ("** new_pw_len = %d, new_passwd_size = %d\n",
|
||||
new_pw_len, new_passwd_size));
|
||||
|
||||
if (new_pw_len < 0 || new_pw_len > new_passwd_size - 1) {
|
||||
DEBUG(0,("check_oem_password: incorrect password length (%d).\n", new_pw_len));
|
||||
pdb_free_sam(&sampass);
|
||||
|
Loading…
x
Reference in New Issue
Block a user