bb_askpass: shorten static password buffer. 256 is way too large.

simplify code a bit.
This commit is contained in:
Denis Vlasenko 2006-09-23 12:22:11 +00:00
parent b97f07f5a1
commit 6429aabbf1
4 changed files with 27 additions and 31 deletions

View File

@ -715,7 +715,7 @@ int tar_main(int argc, char **argv)
if ((tar_handle->action_header == header_list) || if ((tar_handle->action_header == header_list) ||
(tar_handle->action_header == header_verbose_list)) (tar_handle->action_header == header_verbose_list))
{ {
tar_handle->action_header = header_verbose_list; tar_handle->action_header = header_verbose_list;
} else tar_handle->action_header = header_list; } else tar_handle->action_header = header_list;
} }
if((opt & CTX_EXTRACT) && tar_handle->action_data != data_extract_to_stdout) if((opt & CTX_EXTRACT) && tar_handle->action_data != data_extract_to_stdout)

View File

@ -17,8 +17,6 @@
#include <sys/ioctl.h> #include <sys/ioctl.h>
#include "libbb.h" #include "libbb.h"
#define PWD_BUFFER_SIZE 256
/* do nothing signal handler */ /* do nothing signal handler */
static void askpass_timeout(int ATTRIBUTE_UNUSED ignore) 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) char *bb_askpass(int timeout, const char * prompt)
{ {
static char passwd[64];
char *ret; char *ret;
int i, size; int i;
struct sigaction sa; struct sigaction sa;
struct termios old, new; struct termios old, new;
static char passwd[PWD_BUFFER_SIZE];
tcgetattr(STDIN_FILENO, &old); tcgetattr(STDIN_FILENO, &old);
tcflush(STDIN_FILENO, TCIFLUSH); tcflush(STDIN_FILENO, TCIFLUSH);
size = sizeof(passwd); memset(passwd, 0, sizeof(passwd));
ret = passwd;
memset(passwd, 0, size);
fputs(prompt, stdout); fputs(prompt, stdout);
fflush(stdout); fflush(stdout);
@ -55,15 +52,16 @@ char *bb_askpass(int timeout, const char * prompt)
alarm(timeout); alarm(timeout);
} }
if (read(STDIN_FILENO, passwd, size-1) <= 0) { ret = NULL;
ret = NULL; if (read(STDIN_FILENO, passwd, sizeof(passwd)-1) > 0) {
} else { ret = passwd;
for(i = 0; i < size && passwd[i]; i++) { i = 0;
if (passwd[i]== '\r' || passwd[i] == '\n') { /* Last byte is guaranteed to be 0
passwd[i]= 0; (read did not overwrite it) */
break; do {
} if (passwd[i] == '\r' || passwd[i] == '\n')
} passwd[i] = 0;
} while (passwd[i++]);
} }
if (timeout) { if (timeout) {
@ -71,8 +69,7 @@ char *bb_askpass(int timeout, const char * prompt)
} }
tcsetattr(STDIN_FILENO, TCSANOW, &old); tcsetattr(STDIN_FILENO, TCSANOW, &old);
fputs("\n", stdout); puts("");
fflush(stdout); fflush(stdout);
return ret; return ret;
} }

View File

@ -104,7 +104,6 @@ const char *bb_opt_complementally
if they are not specifed on the command line. For example: if they are not specifed on the command line. For example:
bb_opt_complementally = "abc"; bb_opt_complementally = "abc";
flags = bb_getopt_ulflags(argc, argv, "abcd") flags = bb_getopt_ulflags(argc, argv, "abcd")
If getopt() finds "-a" on the command line, then If getopt() finds "-a" on the command line, then
@ -120,7 +119,6 @@ const char *bb_opt_complementally
int w_counter = 0; int w_counter = 0;
bb_opt_complementally = "ww"; bb_opt_complementally = "ww";
bb_getopt_ulflags(argc, argv, "w", &w_counter); bb_getopt_ulflags(argc, argv, "w", &w_counter);
if(w_counter) if(w_counter)
width = (w_counter == 1) ? 132 : INT_MAX; width = (w_counter == 1) ? 132 : INT_MAX;
else else
@ -128,6 +126,7 @@ const char *bb_opt_complementally
w_counter is a pointer to an integer. It has to be passed to w_counter is a pointer to an integer. It has to be passed to
bb_getopt_ulflags() after all other option argument sinks. bb_getopt_ulflags() after all other option argument sinks.
For example: accept multiple -v to indicate the level of verbosity For example: accept multiple -v to indicate the level of verbosity
and for each -b optarg, add optarg to my_b. Finally, if b is given, and for each -b optarg, add optarg to my_b. Finally, if b is given,
turn off c and vice versa: turn off c and vice versa:
@ -136,8 +135,8 @@ const char *bb_opt_complementally
int verbose_level = 0; int verbose_level = 0;
bb_opt_complementally = "vv:b::b-c:c-b"; bb_opt_complementally = "vv:b::b-c:c-b";
f = bb_getopt_ulflags(argc, argv, "vb:c", &my_b, &verbose_level); f = bb_getopt_ulflags(argc, argv, "vb:c", &my_b, &verbose_level);
if((f & 2)) // -c after -b unsets -b flag if(f & 2) // -c after -b unsets -b flag
while(my_b) { dosomething_with(my_b->data) ; my_b = my_b->link; } while(my_b) { dosomething_with(my_b->data); my_b = my_b->link; }
if(my_b) // but llist is stored if -b is specified if(my_b) // but llist is stored if -b is specified
free_llist(my_b); free_llist(my_b);
if(verbose_level) bb_printf("verbose level is %d\n", verbose_level); if(verbose_level) bb_printf("verbose level is %d\n", verbose_level);
@ -237,7 +236,7 @@ Special characters:
"--" A double dash at the beginning of bb_opt_complementally means the "--" A double dash at the beginning of bb_opt_complementally means the
argv[1] string should always be treated as options, even if it isn't argv[1] string should always be treated as options, even if it isn't
prefixed with a "-". This is to support the special syntax in applets prefixed with a "-". This is useful for special syntax in applets
such as "ar" and "tar": such as "ar" and "tar":
tar xvf foo.tar tar xvf foo.tar

View File

@ -2058,13 +2058,13 @@ static void identify_from_stdin(void)
/* busybox specific stuff */ /* busybox specific stuff */
static void parse_opts(unsigned long *get, unsigned long *set, unsigned long *value, int min, int max) static void parse_opts(unsigned long *get, unsigned long *set, unsigned long *value, int min, int max)
{ {
if (get) { if (get) {
*get = 1; *get = 1;
} }
if (optarg) { if (optarg) {
*set = 1; *set = 1;
*value = bb_xgetlarg(optarg, 10, min, max); *value = bb_xgetlarg(optarg, 10, min, max);
} }
} }
static void parse_xfermode(int flag, unsigned long *get, unsigned long *set, int *value) static void parse_xfermode(int flag, unsigned long *get, unsigned long *set, int *value)