mirror of
https://github.com/sheumann/hush.git
synced 2024-05-28 21:41:30 +00:00
Apply post-1.18.2 fixes, bump version to 1.18.3
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
This commit is contained in:
parent
12d97b6680
commit
92e531458a
2
Makefile
2
Makefile
|
@ -1,6 +1,6 @@
|
|||
VERSION = 1
|
||||
PATCHLEVEL = 18
|
||||
SUBLEVEL = 2
|
||||
SUBLEVEL = 3
|
||||
EXTRAVERSION =
|
||||
NAME = Unnamed
|
||||
|
||||
|
|
|
@ -1037,8 +1037,10 @@ int tar_main(int argc UNUSED_PARAM, char **argv)
|
|||
tar_handle->src_fd = tar_fd;
|
||||
tar_handle->seek = seek_by_read;
|
||||
} else {
|
||||
if (ENABLE_FEATURE_TAR_AUTODETECT && flags == O_RDONLY) {
|
||||
get_header_ptr = get_header_tar;
|
||||
if (ENABLE_FEATURE_TAR_AUTODETECT
|
||||
&& flags == O_RDONLY
|
||||
&& get_header_ptr == get_header_tar
|
||||
) {
|
||||
tar_handle->src_fd = open_zipped(tar_filename);
|
||||
if (tar_handle->src_fd < 0)
|
||||
bb_perror_msg_and_die("can't open '%s'", tar_filename);
|
||||
|
|
|
@ -81,11 +81,11 @@
|
|||
* column order in "wc -cmlwL" output:
|
||||
*/
|
||||
enum {
|
||||
WC_LINES = 0,
|
||||
WC_WORDS = 1,
|
||||
WC_UNICHARS = 2,
|
||||
WC_CHARS = 3,
|
||||
WC_LENGTH = 4,
|
||||
WC_LINES = 0, /* -l */
|
||||
WC_WORDS = 1, /* -w */
|
||||
WC_UNICHARS = 2, /* -m */
|
||||
WC_BYTES = 3, /* -c */
|
||||
WC_LENGTH = 4, /* -L */
|
||||
NUM_WCS = 5,
|
||||
};
|
||||
|
||||
|
@ -104,10 +104,10 @@ int wc_main(int argc UNUSED_PARAM, char **argv)
|
|||
|
||||
init_unicode();
|
||||
|
||||
print_type = getopt32(argv, "lwcmL");
|
||||
print_type = getopt32(argv, "lwmcL");
|
||||
|
||||
if (print_type == 0) {
|
||||
print_type = (1 << WC_LINES) | (1 << WC_WORDS) | (1 << WC_CHARS);
|
||||
print_type = (1 << WC_LINES) | (1 << WC_WORDS) | (1 << WC_BYTES);
|
||||
}
|
||||
|
||||
argv += optind;
|
||||
|
@ -157,7 +157,7 @@ int wc_main(int argc UNUSED_PARAM, char **argv)
|
|||
}
|
||||
|
||||
/* Cater for -c and -m */
|
||||
++counts[WC_CHARS];
|
||||
++counts[WC_BYTES];
|
||||
if (unicode_status != UNICODE_ON /* every byte is a new char */
|
||||
|| (c & 0xc0) != 0x80 /* it isn't a 2nd+ byte of a Unicode char */
|
||||
) {
|
||||
|
|
|
@ -52,6 +52,7 @@ pid_t FAST_FUNC spawn(char **argv)
|
|||
* Interested party can wait on pid and learn exit code.
|
||||
* If 111 - then it (most probably) failed to exec */
|
||||
if (failed) {
|
||||
safe_waitpid(pid, NULL, 0); /* prevent zombie */
|
||||
errno = failed;
|
||||
return -1;
|
||||
}
|
||||
|
|
|
@ -186,7 +186,6 @@ config GETTY
|
|||
config LOGIN
|
||||
bool "login"
|
||||
default y
|
||||
select FEATURE_SUID
|
||||
select FEATURE_SYSLOG
|
||||
help
|
||||
login is used when signing onto a system.
|
||||
|
@ -229,7 +228,6 @@ config FEATURE_SECURETTY
|
|||
config PASSWD
|
||||
bool "passwd"
|
||||
default y
|
||||
select FEATURE_SUID
|
||||
select FEATURE_SYSLOG
|
||||
help
|
||||
passwd changes passwords for user and group accounts. A normal user
|
||||
|
@ -265,7 +263,6 @@ config CHPASSWD
|
|||
config SU
|
||||
bool "su"
|
||||
default y
|
||||
select FEATURE_SUID
|
||||
select FEATURE_SYSLOG
|
||||
help
|
||||
su is used to become another user during a login session.
|
||||
|
@ -295,7 +292,6 @@ config SULOGIN
|
|||
config VLOCK
|
||||
bool "vlock"
|
||||
default y
|
||||
select FEATURE_SUID
|
||||
help
|
||||
Build the "vlock" applet which allows you to lock (virtual) terminals.
|
||||
|
||||
|
|
|
@ -170,7 +170,6 @@ config FEATURE_CROND_DIR
|
|||
config CRONTAB
|
||||
bool "crontab"
|
||||
default y
|
||||
select FEATURE_SUID
|
||||
help
|
||||
Crontab manipulates the crontab for a particular user. Only
|
||||
the superuser may specify a different user and/or crontab directory.
|
||||
|
|
|
@ -205,6 +205,7 @@ static void parse_module(module_info *info, const char *pathname)
|
|||
/* Read (possibly compressed) module */
|
||||
len = 64 * 1024 * 1024; /* 64 Mb at most */
|
||||
module_image = xmalloc_open_zipped_read_close(pathname, &len);
|
||||
/* module_image == NULL is ok here, find_keyword handles it */
|
||||
//TODO: optimize redundant module body reads
|
||||
|
||||
/* "alias1 symbol:sym1 alias2 symbol:sym2" */
|
||||
|
@ -845,6 +846,8 @@ int modprobe_main(int argc UNUSED_PARAM, char **argv)
|
|||
|
||||
len = MAXINT(ssize_t);
|
||||
map = xmalloc_open_zipped_read_close(*argv, &len);
|
||||
if (!map)
|
||||
bb_perror_msg_and_die("can't read '%s'", *argv);
|
||||
if (init_module(map, len,
|
||||
IF_FEATURE_MODPROBE_SMALL_OPTIONS_ON_CMDLINE(options ? options : "")
|
||||
IF_NOT_FEATURE_MODPROBE_SMALL_OPTIONS_ON_CMDLINE("")
|
||||
|
|
|
@ -71,12 +71,11 @@ char* FAST_FUNC parse_cmdline_module_options(char **argv)
|
|||
optlen = 0;
|
||||
while (*++argv) {
|
||||
options = xrealloc(options, optlen + 2 + strlen(*argv) + 2);
|
||||
/* Older versions were enclosing space-containing *argv in "",
|
||||
* but both modprobe and insmod from module-init-tools 3.11.1
|
||||
* don't do this anymore. (As to extra trailing space,
|
||||
* insmod adds it but modprobe does not. We do in both cases)
|
||||
*/
|
||||
optlen += sprintf(options + optlen, "%s ", *argv);
|
||||
/* Spaces handled by "" pairs, but no way of escaping quotes */
|
||||
//TODO: module-init-tools version 3.11.1 quotes only value:
|
||||
//it generates var="val with spaces", not "var=val with spaces"
|
||||
//(and it won't quote var *name* even if it has spaces)
|
||||
optlen += sprintf(options + optlen, (strchr(*argv, ' ') ? "\"%s\" " : "%s "), *argv);
|
||||
}
|
||||
return options;
|
||||
}
|
||||
|
|
|
@ -394,7 +394,7 @@ static void sendping4(int junk UNUSED_PARAM)
|
|||
#if ENABLE_PING6
|
||||
static void sendping6(int junk UNUSED_PARAM)
|
||||
{
|
||||
struct icmp6_hdr *pkt = alloca(datalen + sizeof(struct icmp6_hdr) + 4);
|
||||
struct icmp6_hdr *pkt = G.snd_packet;
|
||||
|
||||
//memset(pkt, 0, datalen + sizeof(struct icmp6_hdr) + 4);
|
||||
pkt->icmp6_type = ICMP6_ECHO_REQUEST;
|
||||
|
|
|
@ -375,7 +375,7 @@ static NOINLINE void attach_option(
|
|||
new->data = xmalloc(length + OPT_DATA);
|
||||
new->data[OPT_CODE] = optflag->code;
|
||||
new->data[OPT_LEN] = length;
|
||||
memcpy(new->data + OPT_DATA, buffer, length);
|
||||
memcpy(new->data + OPT_DATA, (allocated ? allocated : buffer), length);
|
||||
|
||||
curr = opt_list;
|
||||
while (*curr && (*curr)->data[OPT_CODE] < optflag->code)
|
||||
|
|
21
shell/hush.c
21
shell/hush.c
|
@ -4123,15 +4123,26 @@ static struct pipe *parse_stream(char **pstring,
|
|||
&& dest.length == 0 && !dest.has_quoted_part
|
||||
) {
|
||||
/* This newline can be ignored. But...
|
||||
* without the below check, interactive shell
|
||||
* will ignore even lines with bare <newline>,
|
||||
* and show the continuation prompt:
|
||||
* Without check #1, interactive shell
|
||||
* ignores even bare <newline>,
|
||||
* and shows the continuation prompt:
|
||||
* ps1_prompt$ <enter>
|
||||
* ps2> _ <=== wrong prompt, should be ps1
|
||||
* ps2> _ <=== wrong, should be ps1
|
||||
* Without check #2, "cmd & <newline>"
|
||||
* is similarly mistreated.
|
||||
* (BTW, this makes "cmd & cmd"
|
||||
* and "cmd && cmd" non-orthogonal.
|
||||
* Really, ask yourself, why
|
||||
* "cmd && <newline>" doesn't start
|
||||
* cmd but waits for more input?
|
||||
* No reason...)
|
||||
*/
|
||||
struct pipe *pi = ctx.list_head;
|
||||
if (pi->num_cmds != 0)
|
||||
if (pi->num_cmds != 0 /* check #1 */
|
||||
&& pi->followup != PIPE_BG /* check #2 */
|
||||
) {
|
||||
continue;
|
||||
}
|
||||
}
|
||||
/* Treat newline as a command separator. */
|
||||
done_pipe(&ctx, PIPE_SEQ);
|
||||
|
|
|
@ -354,7 +354,6 @@ config FEATURE_HWCLOCK_ADJTIME_FHS
|
|||
config IPCRM
|
||||
bool "ipcrm"
|
||||
default y
|
||||
select FEATURE_SUID
|
||||
help
|
||||
The ipcrm utility allows the removal of System V interprocess
|
||||
communication (IPC) objects and the associated data structures
|
||||
|
@ -364,7 +363,6 @@ config IPCS
|
|||
bool "ipcs"
|
||||
default y
|
||||
depends on PLATFORM_LINUX
|
||||
select FEATURE_SUID
|
||||
help
|
||||
The ipcs utility is used to provide information on the currently
|
||||
allocated System V interprocess (IPC) objects in the system.
|
||||
|
|
Loading…
Reference in New Issue
Block a user