[BACK]Return to readpass.c CVS log [TXT][DIR] Up to [local] / src / usr.bin / ssh

Diff for /src/usr.bin/ssh/readpass.c between version 1.23 and 1.24

version 1.23, 2001/11/08 10:51:08 version 1.24, 2001/12/21 08:53:45
Line 48 
Line 48 
         pid_t pid;          pid_t pid;
         size_t len;          size_t len;
         char *pass;          char *pass;
         int p[2], status;          int p[2], status, ret;
         char buf[1024];          char buf[1024];
   
         if (fflush(stdout) != 0)          if (fflush(stdout) != 0)
Line 73 
Line 73 
                 fatal("ssh_askpass: exec(%s): %s", askpass, strerror(errno));                  fatal("ssh_askpass: exec(%s): %s", askpass, strerror(errno));
         }          }
         close(p[1]);          close(p[1]);
         len = read(p[0], buf, sizeof buf -1);  
           len = ret = 0;
           do {
                   ret = read(p[0], buf + len, sizeof(buf) - 1 - len);
                   if (ret == -1 && errno == EINTR)
                           continue;
                   if (ret <= 0)
                           break;
                   len += ret;
           } while (sizeof(buf) - 1 - len > 0);
           buf[len] = '\0';
   
         close(p[0]);          close(p[0]);
         while (waitpid(pid, &status, 0) < 0)          while (waitpid(pid, &status, 0) < 0)
                 if (errno != EINTR)                  if (errno != EINTR)
                         break;                          break;
         if (len <= 1)  
                 return xstrdup("");  
         buf[len] = '\0';  
         buf[strcspn(buf, "\r\n")] = '\0';          buf[strcspn(buf, "\r\n")] = '\0';
         pass = xstrdup(buf);          pass = xstrdup(buf);
         memset(buf, 0, sizeof(buf));          memset(buf, 0, sizeof(buf));

Legend:
Removed from v.1.23  
changed lines
  Added in v.1.24