diff options
author | Denis Vlasenko <vda.linux@googlemail.com> | 2006-09-23 16:22:11 +0400 |
---|---|---|
committer | Denis Vlasenko <vda.linux@googlemail.com> | 2006-09-23 16:22:11 +0400 |
commit | 6429aabbf14be7ce1585fb07b1edb11795dbefc2 (patch) | |
tree | e2807acf29f2f5c5f0281f2763df6987ae0cc61d /libbb/bb_askpass.c | |
parent | b97f07f5a10b33ba115a7eb60acc25dfc86b3f55 (diff) |
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 @@ #include <sys/ioctl.h> #include "libbb.h" -#define PWD_BUFFER_SIZE 256 - /* do nothing signal handler */ static void askpass_timeout(int ATTRIBUTE_UNUSED ignore) @@ -27,18 +25,17 @@ static void askpass_timeout(int ATTRIBUTE_UNUSED ignore) char *bb_askpass(int timeout, const char * prompt) { + static char passwd[64]; + char *ret; - int i, size; + int i; struct sigaction sa; struct termios old, new; - static char passwd[PWD_BUFFER_SIZE]; tcgetattr(STDIN_FILENO, &old); tcflush(STDIN_FILENO, TCIFLUSH); - size = sizeof(passwd); - ret = passwd; - memset(passwd, 0, size); + memset(passwd, 0, sizeof(passwd)); fputs(prompt, stdout); fflush(stdout); @@ -55,15 +52,16 @@ char *bb_askpass(int timeout, const char * prompt) alarm(timeout); } - if (read(STDIN_FILENO, passwd, size-1) <= 0) { - ret = NULL; - } else { - for(i = 0; i < size && passwd[i]; i++) { - if (passwd[i]== '\r' || passwd[i] == '\n') { - passwd[i]= 0; - break; - } - } + ret = NULL; + if (read(STDIN_FILENO, passwd, sizeof(passwd)-1) > 0) { + ret = passwd; + i = 0; + /* Last byte is guaranteed to be 0 + (read did not overwrite it) */ + do { + if (passwd[i] == '\r' || passwd[i] == '\n') + passwd[i] = 0; + } while (passwd[i++]); } if (timeout) { @@ -71,8 +69,7 @@ char *bb_askpass(int timeout, const char * prompt) } tcsetattr(STDIN_FILENO, TCSANOW, &old); - fputs("\n", stdout); + puts(""); fflush(stdout); return ret; } - |