Apply post-1.18.2 fixes, bump version to 1.18.3 1_18_3
authorDenys Vlasenko <vda.linux@googlemail.com>
Tue, 8 Feb 2011 17:34:03 +0000 (18:34 +0100)
committerDenys Vlasenko <vda.linux@googlemail.com>
Tue, 8 Feb 2011 17:34:03 +0000 (18:34 +0100)
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
12 files changed:
Makefile
archival/tar.c
coreutils/wc.c
libbb/vfork_daemon_rexec.c
loginutils/Config.src
miscutils/Config.src
modutils/modprobe-small.c
modutils/modutils.c
networking/ping.c
networking/udhcp/common.c
shell/hush.c
util-linux/Config.src

index e8bead003b50e39f56fde49791823498de31c01b..656ee2c79f00fe86f6dbe0e4d0b3bccbd5682c07 100644 (file)
--- a/Makefile
+++ b/Makefile
@@ -1,6 +1,6 @@
 VERSION = 1
 PATCHLEVEL = 18
-SUBLEVEL = 2
+SUBLEVEL = 3
 EXTRAVERSION =
 NAME = Unnamed
 
index 82caec7707763bc50cb06b85728143bbccdf0d70..c0b92615d050453b079a659cf2ed96324f0eecab 100644 (file)
@@ -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);
index fe3f274f8fd7f797b21fd0b2e9d9c94a846fc841..6e22c66c8c4a6582ac2aab8eecdafa3a4b12da51 100644 (file)
  * 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 */
                        ) {
index 5e0fb0d737f0886b38a354c87eee86b4a69108c4..0c879f68fbddc804047a4925b10ba21b56d7c586 100644 (file)
@@ -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;
        }
index 8158bce7427b9aa9e6cd1696b305ec748190f104..4c771bbc41670a20e1b59259fa464c549c34835a 100644 (file)
@@ -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.
 
index 4912daf882e7cc35a4f477a182b186414285a8f9..da52e14c6b273422ba5638123ff43810bbc45de6 100644 (file)
@@ -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.
index f4f17e766385d256a5a6ed0995613ffb997eb8be..188a7f229dff4abe9f22299f87cce0a77a95a36a 100644 (file)
@@ -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("")
index 565d0d22f3f852c8c8ae681ec6de81e2e51e1a5d..415dbbe44849fc2d299a46680c3d6657509ae9f1 100644 (file)
@@ -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;
 }
index 3aba4906e2aee8eb3ce1d59c7ebcbea689ffe3a3..5fc80fe4eb6c3c5566b77f075b27fbda388b1f43 100644 (file)
@@ -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;
index 311f79e7e29a9f8258b7116c05a18a90395cf311..0a60261aba513fbd04e99dae1417b6854f242244 100644 (file)
@@ -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)
index f9f815289f63be29cecbb5fdfc66f89cf863a01e..58d2c11a98d1e2fc772d0387e4ed8ecb939f99bd 100644 (file)
@@ -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);
index c71b4de3820f8fbb56fb0fbf91e6225124972e6c..0f865acfd3bc185e220fdad897d72b5798f4ba3f 100644 (file)
@@ -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.