diff options
author | Denis Vlasenko <vda.linux@googlemail.com> | 2006-09-23 12:22:11 +0000 |
---|---|---|
committer | Denis Vlasenko <vda.linux@googlemail.com> | 2006-09-23 12:22:11 +0000 |
commit | 6429aabbf14be7ce1585fb07b1edb11795dbefc2 (patch) | |
tree | e2807acf29f2f5c5f0281f2763df6987ae0cc61d /libbb/bb_askpass.c | |
parent | b97f07f5a10b33ba115a7eb60acc25dfc86b3f55 (diff) | |
download | busybox-w32-6429aabbf14be7ce1585fb07b1edb11795dbefc2.tar.gz busybox-w32-6429aabbf14be7ce1585fb07b1edb11795dbefc2.tar.bz2 busybox-w32-6429aabbf14be7ce1585fb07b1edb11795dbefc2.zip |
bb_askpass: shorten static password buffer. 256 is way too large.
simplify code a bit.
Diffstat (limited to 'libbb/bb_askpass.c')
-rw-r--r-- | libbb/bb_askpass.c | 33 |
1 files changed, 15 insertions, 18 deletions
diff --git a/libbb/bb_askpass.c b/libbb/bb_askpass.c index 65ddd5a24..cf384e52b 100644 --- a/libbb/bb_askpass.c +++ b/libbb/bb_askpass.c | |||
@@ -17,8 +17,6 @@ | |||
17 | #include <sys/ioctl.h> | 17 | #include <sys/ioctl.h> |
18 | 18 | ||
19 | #include "libbb.h" | 19 | #include "libbb.h" |
20 | #define PWD_BUFFER_SIZE 256 | ||
21 | |||
22 | 20 | ||
23 | /* do nothing signal handler */ | 21 | /* do nothing signal handler */ |
24 | static void askpass_timeout(int ATTRIBUTE_UNUSED ignore) | 22 | static void askpass_timeout(int ATTRIBUTE_UNUSED ignore) |
@@ -27,18 +25,17 @@ static void askpass_timeout(int ATTRIBUTE_UNUSED ignore) | |||
27 | 25 | ||
28 | char *bb_askpass(int timeout, const char * prompt) | 26 | char *bb_askpass(int timeout, const char * prompt) |
29 | { | 27 | { |
28 | static char passwd[64]; | ||
29 | |||
30 | char *ret; | 30 | char *ret; |
31 | int i, size; | 31 | int i; |
32 | struct sigaction sa; | 32 | struct sigaction sa; |
33 | struct termios old, new; | 33 | struct termios old, new; |
34 | static char passwd[PWD_BUFFER_SIZE]; | ||
35 | 34 | ||
36 | tcgetattr(STDIN_FILENO, &old); | 35 | tcgetattr(STDIN_FILENO, &old); |
37 | tcflush(STDIN_FILENO, TCIFLUSH); | 36 | tcflush(STDIN_FILENO, TCIFLUSH); |
38 | 37 | ||
39 | size = sizeof(passwd); | 38 | memset(passwd, 0, sizeof(passwd)); |
40 | ret = passwd; | ||
41 | memset(passwd, 0, size); | ||
42 | 39 | ||
43 | fputs(prompt, stdout); | 40 | fputs(prompt, stdout); |
44 | fflush(stdout); | 41 | fflush(stdout); |
@@ -55,15 +52,16 @@ char *bb_askpass(int timeout, const char * prompt) | |||
55 | alarm(timeout); | 52 | alarm(timeout); |
56 | } | 53 | } |
57 | 54 | ||
58 | if (read(STDIN_FILENO, passwd, size-1) <= 0) { | 55 | ret = NULL; |
59 | ret = NULL; | 56 | if (read(STDIN_FILENO, passwd, sizeof(passwd)-1) > 0) { |
60 | } else { | 57 | ret = passwd; |
61 | for(i = 0; i < size && passwd[i]; i++) { | 58 | i = 0; |
62 | if (passwd[i]== '\r' || passwd[i] == '\n') { | 59 | /* Last byte is guaranteed to be 0 |
63 | passwd[i]= 0; | 60 | (read did not overwrite it) */ |
64 | break; | 61 | do { |
65 | } | 62 | if (passwd[i] == '\r' || passwd[i] == '\n') |
66 | } | 63 | passwd[i] = 0; |
64 | } while (passwd[i++]); | ||
67 | } | 65 | } |
68 | 66 | ||
69 | if (timeout) { | 67 | if (timeout) { |
@@ -71,8 +69,7 @@ char *bb_askpass(int timeout, const char * prompt) | |||
71 | } | 69 | } |
72 | 70 | ||
73 | tcsetattr(STDIN_FILENO, TCSANOW, &old); | 71 | tcsetattr(STDIN_FILENO, TCSANOW, &old); |
74 | fputs("\n", stdout); | 72 | puts(""); |
75 | fflush(stdout); | 73 | fflush(stdout); |
76 | return ret; | 74 | return ret; |
77 | } | 75 | } |
78 | |||