summaryrefslogtreecommitdiff
path: root/readpass.c
diff options
context:
space:
mode:
authorDamien Miller <djm@mindrot.org>2001-11-12 11:05:20 +1100
committerDamien Miller <djm@mindrot.org>2001-11-12 11:05:20 +1100
commit637b8ae2d491ee0f46997b4d93fade643874a67a (patch)
tree55ab3b95f84d48396a59795f5e32d94c5a080917 /readpass.c
parent36f8dd3ed66b71fe661ed0c7a5f292bbdc8f87e3 (diff)
- markus@cvs.openbsd.org 2001/11/08 10:51:08
[readpass.c] don't strdup too much data; from gotoh@taiyo.co.jp; ok millert.
Diffstat (limited to 'readpass.c')
-rw-r--r--readpass.c11
1 files changed, 5 insertions, 6 deletions
diff --git a/readpass.c b/readpass.c
index 577a407f3..a0429818e 100644
--- a/readpass.c
+++ b/readpass.c
@@ -32,7 +32,7 @@
32 */ 32 */
33 33
34#include "includes.h" 34#include "includes.h"
35RCSID("$OpenBSD: readpass.c,v 1.22 2001/07/14 15:10:16 stevesk Exp $"); 35RCSID("$OpenBSD: readpass.c,v 1.23 2001/11/08 10:51:08 markus Exp $");
36 36
37#include "xmalloc.h" 37#include "xmalloc.h"
38#include "readpass.h" 38#include "readpass.h"
@@ -45,7 +45,7 @@ ssh_askpass(char *askpass, const char *msg)
45{ 45{
46 pid_t pid; 46 pid_t pid;
47 size_t len; 47 size_t len;
48 char *nl, *pass; 48 char *pass;
49 int p[2], status; 49 int p[2], status;
50 char buf[1024]; 50 char buf[1024];
51 51
@@ -71,16 +71,15 @@ ssh_askpass(char *askpass, const char *msg)
71 fatal("ssh_askpass: exec(%s): %s", askpass, strerror(errno)); 71 fatal("ssh_askpass: exec(%s): %s", askpass, strerror(errno));
72 } 72 }
73 close(p[1]); 73 close(p[1]);
74 len = read(p[0], buf, sizeof buf); 74 len = read(p[0], buf, sizeof buf -1);
75 close(p[0]); 75 close(p[0]);
76 while (waitpid(pid, &status, 0) < 0) 76 while (waitpid(pid, &status, 0) < 0)
77 if (errno != EINTR) 77 if (errno != EINTR)
78 break; 78 break;
79 if (len <= 1) 79 if (len <= 1)
80 return xstrdup(""); 80 return xstrdup("");
81 nl = strchr(buf, '\n'); 81 buf[len] = '\0';
82 if (nl) 82 buf[strcspn(buf, "\r\n")] = '\0';
83 *nl = '\0';
84 pass = xstrdup(buf); 83 pass = xstrdup(buf);
85 memset(buf, 0, sizeof(buf)); 84 memset(buf, 0, sizeof(buf));
86 return pass; 85 return pass;