[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Bug#691640: marked as done (unblock: nss-pam-ldapd/0.8.10-4)



Your message dated Sun, 9 Dec 2012 16:21:26 +0100
with message-id <20121209152126.GU5634@radis.cristau.org>
and subject line Re: Bug#691640: unblock: nss-pam-ldapd/0.8.10-4
has caused the Debian Bug report #691640,
regarding unblock: nss-pam-ldapd/0.8.10-4
to be marked as done.

This means that you claim that the problem has been dealt with.
If this is not the case it is now your responsibility to reopen the
Bug report if necessary, and/or fix the problem forthwith.

(NB: If you are a system administrator and have no idea what this
message is talking about, this may indicate a serious mail system
misconfiguration somewhere. Please contact owner@bugs.debian.org
immediately.)


-- 
691640: http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=691640
Debian Bug Tracking System
Contact owner@bugs.debian.org with problems
--- Begin Message ---
Package: release.debian.org
Severity: normal
User: release.debian.org@packages.debian.org
Usertags: unblock

Please unblock package nss-pam-ldapd

Dear release team,

I've uploaded nss-pam-ldapd 0.8.10-3 to unstable that includes the
following fixes (from debian/changelog):

  * fix a problem in sed logic for commenting out disabled options
    (closes: #689296)
  * support "EXTERNAL" SASL mechanism in debconf configuration (LP: #1063923)
    (the debconf template update has been postponed to avoid having to
    update all translations for a relatively minor change)
  * 01-use-poll-instead-of-select.patch: use poll() instead of select()
    for checking file descriptor activity to also correctly work if more
    than FD_SETSIZE files are already open (closes: #690319)

The first two should be really simple changes. The last one backports a
change from the upstream 0.8.11 release.

Attached is a debdiff between 0.8.10-1 currently in testing and
0.8.10-2.

Thanks.

unblock nss-pam-ldapd/0.8.10-3

-- System Information:
Debian Release: wheezy/sid
  APT prefers unstable
  APT policy: (500, 'unstable'), (500, 'testing'), (1, 'experimental')
Architecture: i386 (x86_64)

Kernel: Linux 3.2.0-4-amd64 (SMP w/2 CPU cores)
Locale: LANG=en_GB.utf8, LC_CTYPE=en_GB.utf8 (charmap=UTF-8)
Shell: /bin/sh linked to /bin/dash

-- 
-- arthur - adejong@debian.org - http://people.debian.org/~adejong --
diff -Nru nss-pam-ldapd-0.8.10/debian/changelog nss-pam-ldapd-0.8.10/debian/changelog
--- nss-pam-ldapd-0.8.10/debian/changelog	2012-08-31 23:43:09.000000000 +0200
+++ nss-pam-ldapd-0.8.10/debian/changelog	2012-10-14 23:00:01.000000000 +0200
@@ -1,3 +1,16 @@
+nss-pam-ldapd (0.8.10-3) unstable; urgency=low
+
+  * fix a problem in sed logic for commenting out disabled options
+    (closes: #689296)
+  * support "EXTERNAL" SASL mechanism in debconf configuration (LP: #1063923)
+    (the debconf template has been postponed to avoid having to update all
+    translations for a relatively minor change)
+  * 01-use-poll-instead-of-select.patch: use poll() instead of select()
+    for checking file descriptor activity to also correctly work if more
+    than FD_SETSIZE files are already open (closes: #690319)
+
+ -- Arthur de Jong <adejong@debian.org>  Sun, 14 Oct 2012 23:00:00 +0200
+
 nss-pam-ldapd (0.8.10-2) unstable; urgency=low
 
   * fix typo in comment (thanks Caleb Callaway)
diff -Nru nss-pam-ldapd-0.8.10/debian/nslcd.postinst nss-pam-ldapd-0.8.10/debian/nslcd.postinst
--- nss-pam-ldapd-0.8.10/debian/nslcd.postinst	2012-08-31 23:27:07.000000000 +0200
+++ nss-pam-ldapd-0.8.10/debian/nslcd.postinst	2012-10-01 21:28:17.000000000 +0200
@@ -49,7 +49,7 @@
     # lines to not match
     nomatch_re="^$param_re[[:space:]][[:space:]]*\(aliases\|ethers\|group\|hosts\|netgroup\|networks\|passwd\|protocols\|rpc\|services\|shadow\)"
     # comment out the option
-    sed -i '/'"$nomatch_re"'/n;s/^'"$param_re"'[[:space:]].*$/#&/i' "$CONFFILE"
+    sed -i '/'"$nomatch_re"'/!s/^'"$param_re"'[[:space:]].*$/#&/i' "$CONFFILE"
     # we're done
   done
   return 0
diff -Nru nss-pam-ldapd-0.8.10/debian/nslcd.templates nss-pam-ldapd-0.8.10/debian/nslcd.templates
--- nss-pam-ldapd-0.8.10/debian/nslcd.templates	2012-04-27 00:02:58.000000000 +0200
+++ nss-pam-ldapd-0.8.10/debian/nslcd.templates	2012-10-08 22:43:56.000000000 +0200
@@ -42,7 +42,7 @@
 
 Template: nslcd/ldap-sasl-mech
 Type: select
-Choices: auto, LOGIN, PLAIN, NTLM, CRAM-MD5, DIGEST-MD5, GSSAPI, OTP
+Choices: auto, LOGIN, PLAIN, NTLM, CRAM-MD5, DIGEST-MD5, GSSAPI, OTP, EXTERNAL
 _Description: SASL mechanism to use:
  Choose the SASL mechanism that will be used to authenticate to the LDAP
  database:
diff -Nru nss-pam-ldapd-0.8.10/debian/patches/01-use-poll-instead-of-select.patch nss-pam-ldapd-0.8.10/debian/patches/01-use-poll-instead-of-select.patch
--- nss-pam-ldapd-0.8.10/debian/patches/01-use-poll-instead-of-select.patch	1970-01-01 01:00:00.000000000 +0100
+++ nss-pam-ldapd-0.8.10/debian/patches/01-use-poll-instead-of-select.patch	2012-10-14 23:01:08.000000000 +0200
@@ -0,0 +1,440 @@
+Description: use poll() instead of select() to check file descriptor activity
+ This patch replaces the calls in the NSS module to use poll() instead of
+ select() to also correctly do name lookups if more than FD_SETSIZE files
+ are already open.
+ .
+ These changes are part of the 0.8.11 release.
+Author: Arthur de Jong <arthur@arthurdejong.org>
+Origin: upstream, http://arthurdejong.org/viewvc/nss-pam-ldapd?revision=1783&view=revision
+Bug-Debian: http://bugs.debian.org/690319
+
+--- a/common/tio.h
++++ b/common/tio.h
+@@ -46,9 +46,8 @@
+ typedef struct tio_fileinfo TFILE;
+ 
+ /* Open a new TFILE based on the file descriptor. The timeout is set for any
+-   operation. The timeout value is copied so may be dereferenced after the
+-   call. */
+-TFILE *tio_fdopen(int fd,struct timeval *readtimeout,struct timeval *writetimeout,
++   operation (value in milliseconds). */
++TFILE *tio_fdopen(int fd,int readtimeout,int writetimeout,
+                   size_t initreadsize,size_t maxreadsize,
+                   size_t initwritesize,size_t maxwritesize)
+   LIKE_MALLOC MUST_USE;
+--- a/common/tio.c
++++ b/common/tio.c
+@@ -35,6 +35,7 @@
+ #include <signal.h>
+ #include <stdio.h>
+ #include <limits.h>
++#include <poll.h>
+ 
+ #include "tio.h"
+ 
+@@ -63,8 +64,8 @@ struct tio_fileinfo {
+   int fd;
+   struct tio_buffer readbuffer;
+   struct tio_buffer writebuffer;
+-  struct timeval readtimeout;
+-  struct timeval writetimeout;
++  int readtimeout;
++  int writetimeout;
+   int read_resettable; /* whether the tio_reset() function can be called */
+ #ifdef DEBUG_TIO_STATS
+   /* this is used to collect statistics on the use of the streams
+@@ -74,21 +75,8 @@ struct tio_fileinfo {
+ #endif /* DEBUG_TIO_STATS */
+ };
+ 
+-/* add the second timeval to the first modifing the first */
+-static inline void tio_tv_add(struct timeval *tv1, const struct timeval *tv2)
+-{
+-  /* BUG: we hope that this does not overflow */
+-  tv1->tv_usec+=tv2->tv_usec;
+-  if (tv1->tv_usec>=1000000)
+-  {
+-    tv1->tv_usec-=1000000;
+-    tv1->tv_sec+=1;
+-  }
+-  tv1->tv_sec+=tv2->tv_sec;
+-}
+-
+ /* build a timeval for comparison to when the operation should be finished */
+-static inline void tio_tv_prepare(struct timeval *deadline, const struct timeval *timeout)
++static inline void tio_get_deadline(struct timeval *deadline,int timeout)
+ {
+   if (gettimeofday(deadline,NULL))
+   {
+@@ -97,39 +85,27 @@ static inline void tio_tv_prepare(struct
+     deadline->tv_usec=0;
+     return;
+   }
+-  tio_tv_add(deadline,timeout);
++  deadline->tv_sec+=timeout/1000;
++  deadline->tv_sec+=(timeout%1000)*1000;
+ }
+ 
+-/* update the timeval to the value that is remaining before deadline
++/* update the timeout to the value that is remaining before deadline
+    returns non-zero if there is no more time before the deadline */
+-static inline int tio_tv_remaining(struct timeval *tv, const struct timeval *deadline)
++static inline int tio_time_remaining(const struct timeval *deadline)
+ {
++  struct timeval tv;
+   /* get the current time */
+-  if (gettimeofday(tv,NULL))
++  if (gettimeofday(&tv,NULL))
+   {
+     /* 1 second default if gettimeofday() is broken */
+-    tv->tv_sec=1;
+-    tv->tv_usec=0;
+-    return 0;
++    return 1000;
+   }
+-  /* check if we're too late */
+-  if ( (tv->tv_sec>deadline->tv_sec) ||
+-       ( (tv->tv_sec==deadline->tv_sec) && (tv->tv_usec>deadline->tv_usec) ) )
+-    return -1;
+-  /* update tv */
+-  tv->tv_sec=deadline->tv_sec-tv->tv_sec;
+-  if (tv->tv_usec<=deadline->tv_usec)
+-    tv->tv_usec=deadline->tv_usec-tv->tv_usec;
+-  else
+-  {
+-    tv->tv_sec--;
+-    tv->tv_usec=1000000+deadline->tv_usec-tv->tv_usec;
+-  }
+-  return 0;
++  /* calculate time remaining in miliseconds */
++  return (deadline->tv_sec-tv.tv_sec)*1000 + (deadline->tv_usec-tv.tv_usec)/1000;
+ }
+ 
+ /* open a new TFILE based on the file descriptor */
+-TFILE *tio_fdopen(int fd,struct timeval *readtimeout,struct timeval *writetimeout,
++TFILE *tio_fdopen(int fd,int readtimeout,int writetimeout,
+                   size_t initreadsize,size_t maxreadsize,
+                   size_t initwritesize,size_t maxwritesize)
+ {
+@@ -162,10 +138,8 @@ TFILE *tio_fdopen(int fd,struct timeval
+   fp->writebuffer.start=0;
+   fp->writebuffer.len=0;
+   /* initialize other attributes */
+-  fp->readtimeout.tv_sec=readtimeout->tv_sec;
+-  fp->readtimeout.tv_usec=readtimeout->tv_usec;
+-  fp->writetimeout.tv_sec=writetimeout->tv_sec;
+-  fp->writetimeout.tv_usec=writetimeout->tv_usec;
++  fp->readtimeout=readtimeout;
++  fp->writetimeout=writetimeout;
+   fp->read_resettable=0;
+ #ifdef DEBUG_TIO_STATS
+   fp->byteswritten=0;
+@@ -176,18 +150,15 @@ TFILE *tio_fdopen(int fd,struct timeval
+ 
+ /* wait for any activity on the specified file descriptor using
+    the specified deadline */
+-static int tio_select(TFILE *fp, int readfd, const struct timeval *deadline)
++static int tio_wait(TFILE *fp,int readfd,const struct timeval *deadline)
+ {
+-  struct timeval tv;
+-  fd_set fdset;
++  int timeout;
++  struct pollfd fds[1];
+   int rv;
+   while (1)
+   {
+-    /* prepare our filedescriptorset */
+-    FD_ZERO(&fdset);
+-    FD_SET(fp->fd,&fdset);
+     /* figure out the time we need to wait */
+-    if (tio_tv_remaining(&tv,deadline))
++    if ((timeout=tio_time_remaining(deadline))<0)
+     {
+       errno=ETIME;
+       return -1;
+@@ -195,18 +166,21 @@ static int tio_select(TFILE *fp, int rea
+     /* wait for activity */
+     if (readfd)
+     {
++      fds[0].fd=fp->fd;
++      fds[0].events=POLLIN;
+       /* santiy check for moving clock */
+-      if (tv.tv_sec>fp->readtimeout.tv_sec)
+-        tv.tv_sec=fp->readtimeout.tv_sec;
+-      rv=select(FD_SETSIZE,&fdset,NULL,NULL,&tv);
++      if (timeout>fp->readtimeout)
++        timeout=fp->readtimeout;
+     }
+     else
+     {
++      fds[0].fd=fp->fd;
++      fds[0].events=POLLOUT;
+       /* santiy check for moving clock */
+-      if (tv.tv_sec>fp->writetimeout.tv_sec)
+-        tv.tv_sec=fp->writetimeout.tv_sec;
+-      rv=select(FD_SETSIZE,NULL,&fdset,NULL,&tv);
++      if (timeout>fp->writetimeout)
++        timeout=fp->writetimeout;
+     }
++    rv=poll(fds,1,timeout);
+     if (rv>0)
+       return 0; /* we have activity */
+     else if (rv==0)
+@@ -234,7 +208,7 @@ int tio_read(TFILE *fp, void *buf, size_
+   /* have a more convenient storage type for the buffer */
+   uint8_t *ptr=(uint8_t *)buf;
+   /* build a time by which we should be finished */
+-  tio_tv_prepare(&deadline,&(fp->readtimeout));
++  tio_get_deadline(&deadline,fp->readtimeout);
+   /* loop until we have returned all the needed data */
+   while (1)
+   {
+@@ -292,7 +266,7 @@ int tio_read(TFILE *fp, void *buf, size_
+       }
+     }
+     /* wait until we have input */
+-    if (tio_select(fp,1,&deadline))
++    if (tio_wait(fp,1,&deadline))
+       return -1;
+     /* read the input in the buffer */
+     len=fp->readbuffer.size-fp->readbuffer.start;
+@@ -326,8 +300,7 @@ int tio_skip(TFILE *fp, size_t count)
+ /* Read all available data from the stream and empty the read buffer. */
+ int tio_skipall(TFILE *fp)
+ {
+-  struct timeval tv;
+-  fd_set fdset;
++  struct pollfd fds[1];
+   int rv;
+   size_t len;
+   /* clear the read buffer */
+@@ -342,14 +315,11 @@ int tio_skipall(TFILE *fp)
+ #endif /* SSIZE_MAX */
+   while (1)
+   {
+-    /* prepare our file descriptor set */
+-    FD_ZERO(&fdset);
+-    FD_SET(fp->fd,&fdset);
+-    /* prepare the time to wait */
+-    tv.tv_sec=0;
+-    tv.tv_usec=0;
+     /* see if any data is available */
+-    rv=select(FD_SETSIZE,&fdset,NULL,NULL,&tv);
++    fds[0].fd=fp->fd;
++    fds[0].events=POLLIN;
++    rv=poll(fds,1,0);
++    /* check the poll() result */
+     if (rv==0)
+       return 0; /* no file descriptor ready */
+     if ((rv<0)&&((errno==EINTR)||(errno==EAGAIN)))
+@@ -424,12 +394,12 @@ int tio_flush(TFILE *fp)
+ {
+   struct timeval deadline;
+   /* build a time by which we should be finished */
+-  tio_tv_prepare(&deadline,&(fp->writetimeout));
++  tio_get_deadline(&deadline,fp->writetimeout);
+   /* loop until we have written our buffer */
+   while (fp->writebuffer.len > 0)
+   {
+     /* wait until we can write */
+-    if (tio_select(fp,0,&deadline))
++    if (tio_wait(fp,0,&deadline))
+       return -1;
+     /* write one block */
+     if (tio_writebuf(fp))
+@@ -442,17 +412,12 @@ int tio_flush(TFILE *fp)
+    will accept data */
+ static int tio_flush_nonblock(TFILE *fp)
+ {
+-  struct timeval tv;
+-  fd_set fdset;
++  struct pollfd fds[1];
+   int rv;
+-  /* prepare our filedescriptorset */
+-  FD_ZERO(&fdset);
+-  FD_SET(fp->fd,&fdset);
+-  /* set the timeout to 0 to poll */
+-  tv.tv_sec=0;
+-  tv.tv_usec=0;
+   /* wait for activity */
+-  rv=select(FD_SETSIZE,NULL,&fdset,NULL,&tv);
++  fds[0].fd=fp->fd;
++  fds[0].events=POLLOUT;
++  rv=poll(fds,1,0);
+   /* check if any file descriptors were ready (timeout) or we were
+      interrupted */
+   if ((rv==0)||((rv<0)&&(errno==EINTR)))
+--- a/common/nslcd-prot.c
++++ b/common/nslcd-prot.c
+@@ -38,6 +38,11 @@
+ #include "nslcd-prot.h"
+ #include "compat/socket.h"
+ 
++/* read timeout is 60 seconds because looking up stuff may take some time
++   write timeout is 10 secods because nslcd could be loaded with requests */
++#define READ_TIMEOUT 60*1000
++#define WRITE_TIMEOUT 10*1000
++
+ /* buffer sizes for I/O */
+ #define READBUFFER_MINSIZE 1024
+ #define READBUFFER_MAXSIZE 2*1024*1024
+@@ -56,7 +61,6 @@ TFILE *nslcd_client_open()
+ {
+   int sock;
+   struct sockaddr_un addr;
+-  struct timeval readtimeout,writetimeout;
+   TFILE *fp;
+   /* create a socket */
+   if ( (sock=socket(PF_UNIX,SOCK_STREAM,0))<0 )
+@@ -72,13 +76,8 @@ TFILE *nslcd_client_open()
+     (void)close(sock);
+     return NULL;
+   }
+-  /* set the timeouts */
+-  readtimeout.tv_sec=60; /* looking up stuff may take some time */
+-  readtimeout.tv_usec=0;
+-  writetimeout.tv_sec=10; /* nslcd could be loaded with requests */
+-  writetimeout.tv_usec=0;
+   /* create a stream object */
+-  if ((fp=tio_fdopen(sock,&readtimeout,&writetimeout,
++  if ((fp=tio_fdopen(sock,READ_TIMEOUT,WRITE_TIMEOUT,
+                      READBUFFER_MINSIZE,READBUFFER_MAXSIZE,
+                      WRITEBUFFER_MINSIZE,WRITEBUFFER_MAXSIZE))==NULL)
+   {
+--- a/nslcd/nslcd.c
++++ b/nslcd/nslcd.c
+@@ -68,6 +68,12 @@
+ #include "compat/getpeercred.h"
+ #include "compat/socket.h"
+ 
++/* read timeout is half a second because clients should send their request
++   quickly, write timeout is 60 seconds because clients could be taking some
++   time to process the results */
++#define READ_TIMEOUT 500
++#define WRITE_TIMEOUT 60*1000
++
+ /* buffer sizes for I/O */
+ #define READBUFFER_MINSIZE 32
+ #define READBUFFER_MAXSIZE 64
+@@ -380,7 +386,6 @@ static void handleconnection(int sock,MY
+ {
+   TFILE *fp;
+   int32_t action;
+-  struct timeval readtimeout,writetimeout;
+   uid_t uid=(uid_t)-1;
+   gid_t gid=(gid_t)-1;
+   pid_t pid=(pid_t)-1;
+@@ -390,13 +395,8 @@ static void handleconnection(int sock,MY
+   else
+     log_log(LOG_DEBUG,"connection from pid=%d uid=%d gid=%d",
+                       (int)pid,(int)uid,(int)gid);
+-  /* set the timeouts */
+-  readtimeout.tv_sec=0; /* clients should send their request quickly */
+-  readtimeout.tv_usec=500000;
+-  writetimeout.tv_sec=60; /* clients could be taking some time to process the results */
+-  writetimeout.tv_usec=0;
+   /* create a stream object */
+-  if ((fp=tio_fdopen(sock,&readtimeout,&writetimeout,
++  if ((fp=tio_fdopen(sock,READ_TIMEOUT,WRITE_TIMEOUT,
+                      READBUFFER_MINSIZE,READBUFFER_MAXSIZE,
+                      WRITEBUFFER_MINSIZE,WRITEBUFFER_MAXSIZE))==NULL)
+   {
+--- a/tests/test_tio.c
++++ b/tests/test_tio.c
+@@ -51,18 +51,14 @@ struct helper_args {
+ static void *help_tiowriter(void *arg)
+ {
+   TFILE *fp;
+-  struct timeval timeout;
+   size_t i,j,k;
+   uint8_t *buf;
+   struct helper_args *hargs=(struct helper_args *)arg;
+   /* allocate the buffer */
+   buf=(uint8_t *)malloc(hargs->blocksize);
+   assert(buf!=NULL);
+-  /* set the timeout */
+-  timeout.tv_sec=hargs->timeout;
+-  timeout.tv_usec=0;
+   /* open the file */
+-  fp=tio_fdopen(hargs->fd,&timeout,&timeout,4*1024,8*1024,4*1024,8*1024);
++  fp=tio_fdopen(hargs->fd,hargs->timeout*1000,hargs->timeout*1000,4*1024,8*1024,4*1024,8*1024);
+   assertok(fp!=NULL);
+   /* write the blocks */
+   i=0;
+@@ -83,18 +79,14 @@ static void *help_tiowriter(void *arg)
+ static void *help_tioreader(void *arg)
+ {
+   TFILE *fp;
+-  struct timeval timeout;
+   size_t i,j,k;
+   uint8_t *buf;
+   struct helper_args *hargs=(struct helper_args *)arg;
+   /* allocate the buffer */
+   buf=(uint8_t *)malloc(hargs->blocksize);
+   assert(buf!=NULL);
+-  /* set the timeout */
+-  timeout.tv_sec=hargs->timeout;
+-  timeout.tv_usec=0;
+   /* open the file */
+-  fp=tio_fdopen(hargs->fd,&timeout,&timeout,4*1024,8*1024,4*1024,8*1024);
++  fp=tio_fdopen(hargs->fd,hargs->timeout*1000,hargs->timeout*1000,4*1024,8*1024,4*1024,8*1024);
+   assertok(fp!=NULL);
+   /* read the blocks */
+   i=0;
+@@ -202,7 +194,6 @@ static void test_reset(void)
+   pthread_t wthread;
+   struct helper_args wargs;
+   TFILE *fp;
+-  struct timeval timeout;
+   size_t i,j,k,save;
+   uint8_t buf[20];
+   /* set up the socket pair */
+@@ -214,9 +205,7 @@ static void test_reset(void)
+   wargs.timeout=2;
+   assertok(pthread_create(&wthread,NULL,help_normwriter,&wargs)==0);
+   /* set up read handle */
+-  timeout.tv_sec=2;
+-  timeout.tv_usec=0;
+-  fp=tio_fdopen(sp[1],&timeout,&timeout,2*1024,4*1024,2*1024,4*1024);
++  fp=tio_fdopen(sp[1],2000,2000,2*1024,4*1024,2*1024,4*1024);
+   assertok(fp!=NULL);
+   /* perform 20 reads */
+   i=0;
+@@ -281,7 +270,6 @@ static void test_timeout_reader(void)
+   int sp[2];
+   TFILE *rfp;
+   FILE *wfp;
+-  struct timeval timeout;
+   uint8_t buf[20];
+   time_t start,end;
+   /* set up the socket pair */
+@@ -289,9 +277,7 @@ static void test_timeout_reader(void)
+   /* open the writer */
+   assertok((wfp=fdopen(sp[0],"wb"))!=NULL);
+   /* open the reader */
+-  timeout.tv_sec=1;
+-  timeout.tv_usec=100000;
+-  assertok((rfp=tio_fdopen(sp[1],&timeout,&timeout,2*1024,4*1024,2*1024,4*1024))!=NULL);
++  assertok((rfp=tio_fdopen(sp[1],1100,1100,2*1024,4*1024,2*1024,4*1024))!=NULL);
+   /* perform a read */
+   start=time(NULL);
+   assertok(tio_read(rfp,buf,sizeof(buf))!=0);
+@@ -309,7 +295,6 @@ static void test_timeout_writer(void)
+   FILE *rfp;
+   TFILE *wfp;
+   int i;
+-  struct timeval timeout;
+   uint8_t buf[20];
+   time_t start,end;
+   /* set up the socket pair */
+@@ -317,9 +302,7 @@ static void test_timeout_writer(void)
+   /* open the reader */
+   assertok((rfp=fdopen(sp[0],"rb"))!=NULL);
+   /* open the writer */
+-  timeout.tv_sec=1;
+-  timeout.tv_usec=100000;
+-  assertok((wfp=tio_fdopen(sp[1],&timeout,&timeout,2*1024,4*1024,2*20,4*20+1))!=NULL);
++  assertok((wfp=tio_fdopen(sp[1],1100,1100,2*1024,4*1024,2*20,4*20+1))!=NULL);
+   /* perform a few write (these should be OK because they fill the buffer) */
+   assertok(tio_write(wfp,buf,sizeof(buf))==0);
+   assertok(tio_write(wfp,buf,sizeof(buf))==0);
diff -Nru nss-pam-ldapd-0.8.10/debian/patches/series nss-pam-ldapd-0.8.10/debian/patches/series
--- nss-pam-ldapd-0.8.10/debian/patches/series	1970-01-01 01:00:00.000000000 +0100
+++ nss-pam-ldapd-0.8.10/debian/patches/series	2012-10-12 22:09:41.000000000 +0200
@@ -0,0 +1 @@
+01-use-poll-instead-of-select.patch

Attachment: signature.asc
Description: This is a digitally signed message part


--- End Message ---
--- Begin Message ---
On Sun, Dec  9, 2012 at 16:06:05 +0100, Arthur de Jong wrote:

> Control: tag -1 - moreinfo
> Control: retitle -1 unblock: nss-pam-ldapd/0.8.10-4
> 
> On Sat, 2012-12-08 at 15:17 +0100, Julien Cristau wrote:
> > On Sat, Oct 27, 2012 at 23:05:06 +0200, Arthur de Jong wrote:
> > > +@@ -97,39 +85,27 @@ static inline void tio_tv_prepare(struct
> > > +     deadline->tv_usec=0;
> > > +     return;
> > > +   }
> > > +-  tio_tv_add(deadline,timeout);
> > > ++  deadline->tv_sec+=timeout/1000;
> > > ++  deadline->tv_sec+=(timeout%1000)*1000;
> > 
> > Looks to me like the second line should set tv_usec, not tv_sec
> 
> Thanks for the detailed review and catching this. This didn't show up in
> the tests because there is sanity checking code in place that prevents
> huge timeout values that could be caused by clock jumps so luckily it
> shouldn't be a severe problem in practice.
> 
> It will be fixed in the next upstream release and I've uploaded 0.8.10-4
> to unstable that contains this fix.
> 
Unblocked, thanks.

Cheers,
Julien

Attachment: signature.asc
Description: Digital signature


--- End Message ---

Reply to: