bb_askpass: shorten static password buffer. 256 is way too large.
simplify code a bit.
This commit is contained in:
parent
b97f07f5a1
commit
6429aabbf1
@ -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)
|
||||||
|
@ -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;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -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
|
||||||
|
|
||||||
|
@ -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)
|
||||||
|
Loading…
Reference in New Issue
Block a user