VOOZH about

URL: https://busybox.net/

⇱ BusyBox


BUSYBOX
👁 BusyBox

About Documentation Get BusyBox Development

Links

Developer Pages

  • The Software Freedom Conservancy acts as the GPL enforcement agent for various BusyBox copyright holders. If you wish to report a GPL violation on BusyBox, please write to gpl@busybox.net.

  • Life without systemd.

  • 27 September 2024 -- BusyBox 1.37.0 (unstable)

    BusyBox 1.37.0. (git, patches, how to add a patch)

    Sizes of busybox-1.36.0 and busybox-1.37.0 (with equivalent config, static musl build):

     text	 data	 bss	 dec	 hex	filename
    1022792	 559	 4988	1028339	 fb0f3	busybox-1.36.0/busybox
    1024327	 559	 4988	1029874	 fb6f2	busybox-1.37.0/busybox
    

    Changes since previous release:

    Akos Somfai:
     lineedit: fix crash when icanon set with -echo
    
    Andrej Picej:
     hwclock: add get/set parameters option
    
    Arsen Arsenović:
     fixdep: avoid underflow when end of entry doesn't coincide with EOF
    
    Christian Franke:
     Cygwin: regenerate defconfig
    
    Dario Binacchi:
     ip link: support for the CAN netlink
    
    David Leonard:
     find: implement -ok
     od: fix -O
     od: add tests
    
    Denys Vlasenko:
     build system: fix "Config.in:117 error: Overlong line"
     libbb/dump: conditionalize code used only by xxd and od
     libbb/dump: correct handling of 1-byte signed int format
     libbb/dump: make xxd_displayoff member conditional on xxd
     libbb/dump: use fputs_stdout where appropriate
     libbb/sha: do not read shaNI variable twice, and factor out its setting
     libbb/sha: fix sha-NI instruction detection
     libbb: add bit counting function, use where appropriate
     libbb: code shrink: introduce and use [_]exit_FAILURE()
     libbb: consolidate NOMMU fix of restoring high bit in argv[0][0]
     libbb: fix 64-bit bb_popcnt_long
     libbb: pass "" rather than NULL as format string in _nomsg functions
     lineedit: print prompt and editing operations to stderr
     *: introduce and use exitcode_t
     ash: code shrink - reuse is_prefixed_with() from libbb
     ash: code shrink: do not take address of prefix(), allowing it to inline
     ash: disable check for "good" function name, bash does not check this
     ash: disable sleep as builtin, closes 15619
     ash: do not abort interactive mode on >&9999 redirect
     ash: exec: Stricter pathopt parsing - lost chunk
     ash: fix broken new mail detection
     ash: fix handling of single-quoted strings in pattern substitution
     ash: fix sleep built-in not running INT trap immediately on ^C
     ash: get rid of separate mail_var_path_changed flag variable
     ash: remove "volatile" specifier from suppress_int
     ash: remove limitation on fd# length
     ash: sleep builtin with no arguments should not exit
     hush (NOMMU): fix LINENO in execed children
     hush: add comment about abort on syntax error %{^}
     hush: avoid duplicate fcntl(F_SETFD, FD_CLOEXEC) during init
     hush: detect when terminating "done"/"fi" is missing
     hush: do not exit interactive shell on some redirection errors
     hush: fix "exec 3>FILE" aborting if 3 is exactly the next free fd
     hush: fix ELIF cmd1;cmd2 THEN ... not executing cmd2, closes 15571
     hush: fix an interactive abort on error
     hush: fix expansion of space in "a=${a:+$a }c" construct
     hush: make "false" built-in
     hush: printf builtin with no arguments should not exit
     hush: quote values in "readonly" output
     hush: quote variable values printed by "set" (match ash behavior)
     hush: restore tty pgrp on SIGHUP
     hush: set G.ifs sooner (prevents segfault)
     hush: speed up "big heredoc" code
     shell/math.h: update comments, rearrange struct members for smaller code
     shell/math: $((1?)) has one-too-small opstack, fix this
     shell/math: add note on ERANGE
     shell/math: avoid $((3**999999999999999999)) to take years
     shell/math: bash-compatible handling of too large numbers
     shell/math: change ?: nesting code to not have 63 level nesting limitation
     shell/math: decrease stack usage by not allocating copies of variable names
     shell/math: do not accept $((36#@))
     shell/math: document ternary ?: op's weirdness, add code comments
     shell/math: eliminate redundant endofname()
     shell/math: eliminate some redundant stores on return code path
     shell/math: explain the logic, small tweak to make code smaller
     shell/math: explain why we use separate &end
     shell/math: fix ?: to not evaluate not-taken branches
     shell/math: fix comments about jammed-together num+num corner cases
     shell/math: fix nested ?: and do not parse variables in not-taken branch
     shell/math: fix one name check, other minor cleanups
     shell/math: fix order of expansion of variables to numbers
     shell/math: fix parsing of ?: and explain why it's parsed that way
     shell/math: fix the order of variable resolution in binops
     shell/math: reduce stack usage
     shell/math: remove a redundant check
     shell/math: remove now-unused second_val
     shell/math: remove special code to handle a?b?c:d:e, it works without it now
     shell/math: rename TOK_NUM to TOK_VALUE, improve comments
     shell/math: simpler insertion of "fake" last RPAREN
     shell/math: simplify handling of unary plus
     shell/read: do not allow empty variable name
     shell: add a few yet-failing arithmentic tests
     shell: avoid segfault on ${0::0/0~09J}. Closes 15216
     shell: document another arithmetic discrepancy with bash
     shell: fix SIGWINCH and SIGCHLD (in hush) interrupting line input, closes 15256
     shell: move varcmp() to shell_common.h and use it in hush
     awk: do not infinitely recurse getvar_s() if CONVFMT is set to a numeric value
     awk: do not read ARGIND, only set it (gawk compat)
     awk: fix SEGV on read error in -f PROGFILE
     awk: fix backslash handling in sub() builtins
     awk: fix closing of non-opened file
     awk: fix handling of empty fields
     awk: fix splitting with default FS
     awk: fix subst code to handle "start of word" pattern correctly (needs REG_STARTEND)
     awk: fix use-after-realloc (CVE-2021-42380), closes 15601
     awk: get rid of one indirection level for iF (input file structure)
     awk: implement -E; do not reorder -f and -e
     awk: mktime() with no arguments is not allowed
     awk: printf(INVALID_FMT) prints it verbatim
     awk: remove a local variable "caching" a struct member
     awk: shrink - use setvar_sn() to set variables from non-NUL terminated strings
     chown: stop accepting deprecated USER.GROUP syntax, only : separator is allowed
     factor: we can pack 21, not 20, 3-bit elements into packed wheel words
     getfattr: fix "getfattr NOTEXIST" - now prints error msg
     httpd: do not mangle cgi-bin/SCRIPT/params URLs
     hwclock: force LONG_OPTS, stop accepting non-compatible -t
     i2ctransfer: fix build warning
     ls: do not truncate username/groupname to 8 chars
     mkfs_vfat: do not generate same volume_id when run in rapid succession
     modprobe: call finit_module with MODULE_INIT_COMPRESSED_FILE if module name doesn't end with .ko
     nmeter: improve %T fractionals display
     nmeter: increase maximum /proc file size (needed for large machines)
     nproc: prepare for arbitrarily large CPU masks
     nslookup: ensure unique transaction IDs for the DNS queries
     ntpd: correct comment: 2^-20 is ~1 microsecond (confused with 10^-20)
     ntpd: correct fixed->float conversions of fractions
     ntpd: fix a warning on 32-bit arch build
     ntpd: fold d_to_tv() into its only caller
     od, hexdump: byte 0x11 is "dc1" not "dcl"
     od: -l,I,L indeed depend on sizeof(long), fix this
     od: actually remove -IL from --help, as comment says
     od: correct -i, enable tests which pass for DESKTOP too
     od: fix default format, shrink
     od: for !DESKTOP, match output more closely to GNU coreutils 9.1, implement -s
     od: implement -B
     od: stop printing extra trailing spaces
     od: support -DOHXIL
     seedrng: fix for glibc <= 2.24 not providing getrandom()
     seq: accept negative parameters
     seq: fix yet another case of negative parameters not working
     shuf: add (disabled) code to support very long numbers in -i LO-HI
     shuf: another tweak to COMMON_PREFIX_HACK code
     shuf: fix pfx_len calculation
     shuf: remove redundant code
     sleep: fix "sleep -- ARGS"
     sleep: fix error exit when called as "sh" builtin
     start-stop-daemon: do not lose error messages with -b
     start-stop-daemon: fix --help: -K or -S is required
     start-stop-daemon: make --output not depend on FANCY
     start-stop-daemon: update comment, no code changes
     syslogd: daemonize _after_ init (so that init errors are visible, if they occur)
     syslogd: decrease stack usage, ~50 bytes
     syslogd: fix breakage caused by "daemonize _after_ init" change
     time: implement %% and \escapes in -f FMT
     tls: P256: fix obscure x86_64 asm misbehavior, closes 15679
     tls: P256: improve x86_64 multiplication asm code
     tls: fix CONFIG_FEATURE_TLS_SHA1=y + CONFIG_SHA1_HWACCEL=y
     top: improve large PID display in memory ('s') mode
     top: stop using div() from libc, compilers now do it better
     udhcpd: optional BOOTP support
     unzip: clear SUID/GID bits, implement -K to not clear them
     unzip: document some options we might support
     wget: fix compile warnings when WGET_FTP is not selected
    
    Dominique Martinet:
     sed: check errors writing file with sed -i
    
    Eric Blake:
     readlink: support --, -n always
    
    Jones Syue:
     crond: log5 fix typo, replace log level '4' with '5'
    
    Karsten Sperling:
     ash: use-after-free in bash pattern substitution
    
    Louai Al-Khanji:
     start-stop-daemon: implement option -O|--output
    
    Miroslav Lichvar:
     ntpd: make NTP client and server Y2036/2038-ready
    
    Natanael Copa:
     time: fix max resident set size unit
     awk: fix use after free (CVE-2023-42363)
    
    Nero:
     install: Fix chown resetting suid/sgid bits from chmod
    
    Peter Korsgaard:
     util-linux/lsusb.c: print manufacturer/product strings if available
    
    Petja Patjas:
     vi: Ensure that the edit buffer ends in a newline
    
    Petr Vorel:
     sleep: Update doc
    
    Ron Yorston:
     lineedit: fix matching of directories when searching PATH
     ash: make EPOCH variables work if RANDOM is disabled
     ash: improve trap and jobs builtins in child shells
     ash,hush: tab completion of functions and aliases
     tr: display usage for incorrect arguments
     tsort: avoid use-after-free
     awk: fix segfault when compiled by clang
     ash: fix parsing of alias expansion + bash features
     Makefile.flags: suppress clang warnings when cross-compiling
     ash: remove defunct control character to save a few bytes
     md5/shaXsum: accept uppercase hex strings
     timeout: allow fractional seconds in timeout values
     ash: move hashvar() calls into findvar()
    
    Russ Dill:
     udhcp: Avoid leaking uninitialized/stale data
    
    Sertonix:
     wget: ignore header casing
    
    Sören Tempel:
     ed: don't use memcpy with overlapping memory regions
    
    Thomas Devoogdt:
     seedrng: fix for glibc <= 2.24 not providing random header
    
    Tomas Paukrt:
     appletlib: fix "warning: unused variable applet_no"
     build system: clean more files on make clean
    
    Uwe Kleine-König:
     build system: Make it possible to build with 64bit time_t
    
    YU Jincheng:
     getfattr: new applet
    
    Yan Zhu:
     docproc: avoid segfault during file closing
    
    Yousong Zhou:
     libiproute: fix filtering ip6 route by table id
    
    ejaaskel:
     start-stop-daemon: add -d DIR chdir option
    
    zhuyan:
     ash: initialize basepf.buf in ash
    
  • 19 May 2023 -- BusyBox 1.36.1 (stable)

    BusyBox 1.36.1. (git)

    Bug fix release. 1.36.1 has fixes for line editing, detection of hardware sha1/sha256 support, unzip (do not create suid/sgid files unless -K), shell (printf and sleep with no args, handing of SIGINT in sleep), ed.

  • 3 January 2023 -- BusyBox 1.36.0 (unstable)

    BusyBox 1.36.0. (git, patches, how to add a patch)

    Note: udhcpc6 now uses a different helper script by default (/usr/share/udhcpc/default6.script).

    Sizes of busybox-1.35.0 and busybox-1.36.0 (with equivalent config, static uclibc build):

     text	 data	 bss	 dec	 hex	filename
    1044070	 908	 14328	1059306	 1029ea	busybox-1.35.0
    1046317	 908	 14328	1061553	 1032b1	busybox-1.36.0
    

    Changes since previous release:

    Aaro Koskinen:
     devmem: add 128-bit width
    
    Bernhard Reutner-Fischer (3):
     kbuild: fix building sha256
     kbuild: Prefer -Oz over -Os
     seedrng: manually inline seed_rng
    
    Brandon Maier:
     xxd: fix typo in trivial usage
    
    Dario Binacchi (2):
     fbset: abort on not handled options
     fbset: support setting pixel clock rate
    
    David Leonard:
     tsort: new applet
    
    Denys Vlasenko:
     Makefile.flags: add resolv to LDLIBS for linux compilers too (not only gnu ones)
     build system: detect if build host has no bzip2
     scripts/echo.c: fix NUL handling in "abc\0 def"
     libbb/loop: fix compile failure (name collision)
     libbb/loop: optionally use ioctl(LOOP_CONFIGURE) to set up loopdevs
     libbb/loop: restore the correct return value of set_loop()
     libbb/sha1: add config-selectable fully unrolled version, closes 14391
     libbb/sha1: add config-selectable partially unrolled version
     libbb/sha1: assembly versions for x86
     libbb/sha1: optional x86 hardware accelerated hashing
     libbb/sha256: optional x86 hardware accelerated hashing
     libbb: change xstrndup, xmemdup to take size_t as size parameter
     libbb: factor out fflush_stdout_and_exit(EXIT_SUCCESS)
     libbb: fflush_stdout_and_exit(0) still exits with _error_ (not 0!) if fflush fails
     libbb: fix fallout from nth_string() robustification, closes 14726
     libbb: introduce and use chdir_or_warn()
     libbb: invert the meaning of SETUP_ENV_NO_CHDIR -> SETUP_ENV_CHDIR
     tls: P256: remove NOP macro sp_256_norm_8()
     tls: include signature_algorithms extension in client hello message
     examples/var_service/dhcp_if: make helper scripts more talkative
     testsuite/mount.tests: accomodate umount failure seen on 5.18.0
     testsuite/sha1sum.tests: fix false positive failure
     shell: add comments about SIGINT-related problems
     shell: fix compile failures in some configs
     ash,hush: fix handling of SIGINT while waiting for interactive input
     ash: ^C with SIG_INGed SIGINT should not exit the shell
     ash: do not truncate failed tilde expansion on unknown user names
     ash: fix ifs cleanup on error paths
     ash: fix unsafe use of mempcpy
     ash: fix use-after-free in pattern substitution code
     awk: input numbers are never octal or hex (only program consts can be)
     bc: hopefully fix bug 14956 (use-after-free)
     cut: build fix for FEATURE_CUT_REGEX
     ifplugd: split -a into -a and -A, latter disables upping in iface creation
     init: do not set HOME
     ls: implement ls -sh (human-readable allocated blocks)
     md5/shaXsum: use FEATURE_COPYBUF_KB to size the buffer instead of fixed 4k
     mv: fix error in !VERBOSE configs
     nmeter: %[md] %[mw] - dirty file-backed pages, writeback pages
     powertop: fix cpuid asm: ebx saving/restoring is properly done by gcc
     sed: correctly handle 'w FILE' commands writing to the same file
     sed: fix double-free in FEATURE_CLEAN_UP=y configs
     sed: fix handling of escaped delimiters in s/// replacement
     sed: fix handling of escaped delimiters in s/// search pattern, closes 14541
     seedrng: chdir to the SEED_DIRECTORY - avoid concat_path_file's
     seedrng: do not hash in a constant string, it's not adding entropy
     seedrng: do not hash lengths, they are very predictable
     seedrng: do not try to continue on unexpected errors (just exit)
     seedrng: explain why we need locking and fsync'ing
     seedrng: include file/dir names in error messages
     seedrng: re-add fsync after unlink, and explain its purpose
     seedrng: reduce MAX_SEED_LEN from 512 to 256
     seedrng: remove redundant assignment
     seedrng: remove unnecessary zero-filling of local variables
     seedrng: restore error check on fsync
     seedrng: simplify read_new_seed() to not have error return
     seedrng: use more xfuncs where appropriate
     shaNNNsum: accept one-space "HASH FILENAME" format for -c, closes 14866
     sort: fix -k2M (wasn't skipping leading whitespace)
     sort: fix -s -r interaction: 'stable' order is not affected by -r
     sort: fix sort -s -u, closes 14871
     sort: support -h
     sulogin: increase util-linux compatibility
     sulogin: start _login_ shell only with -p
     sulogin: util-linux does not say "normal startup" on Ctrl-D
     taskset: fix printf format mismatch in !FEATURE_TASKSET_FANCY config. closes 14616
     top: fix display of large PID/PPID
     top: improve large PID display in memory ('s') mode
     tree: make it unicode-aware
     tree: unicode tweak (use normal space char, 0x20)
     udhcpc6: add missed big-endian conversions
     udhcpc6: align FF02__1_2[]
     udhcpc6: downgrade "opening listen socket" log level to 2
     udhcpc6: fix binding to network aliases
     udhcpc6: fix sending of renew messages
     udhcpc6: use a different default config script
     xargs: implement -o, closes 15146
     xxd -r: handle offsets
     xxd -r: without -p, stop at more than one whitespace, closes 14786
     xxd: fix use of non-initialized data
     xxd: use bb_simple_perror_msg... where appropriate
    
    Emanuele Giacomelli:
     XXXsum: handle binary sums with " " in the path
    
    Grob Grobmann:
     vi: add 'ZQ' quitting command
    
    Henrique Rodrigues:
     ping: fix typo in --help text
    
    Jason A. Donenfeld (10):
     seedrng: import SeedRNG utility for kernel RNG seed files
     seedrng: use libbb functions
     seedrng: hoist bb_strtoul out of min/max
     seedrng: remove some global variables
     seedrng: further reduce size
     seedrng: use predefined strings where possible
     seedrng: avoid needless runtime strlen() call
     seedrng: compress format strings with %s arguments
     seedrng: code-golf even smaller
     seedrng: prune header includes
    
    Khem Raj:
     apply const trick to ptr_to_globals
    
    Louis Sautier:
     pkill: add -e to display the name and PID of the process being killed
    
    Ludwig Nussel:
     libbb: mark stack in assembly files read-only
    
    Natanael Copa (2):
     awk: fix use after free (CVE-2022-30065)
     more: accept and ignore -e
    
    Paul Fox:
     crond: implement support for setting PATH in crontab files
    
    Peter Kaestle:
     unzip -l: add missed big-endian conversions date and time
    
    Roger Knecht:
     tree: new applet
    
    Ron Yorston (8):
     libbb: restore special handling of nomsg errors
     libbb: make '--help' handling more consistent
     lineedit: get PWD from ash
     ash,hush: use HOME for tab completion and prompts
     vi: fix regression in autoindent handling
     vi: handle autoindent in 'cc' command
     vi: improved handling of backspace in replace mode
     vi: fix backspace over tab in commands
    
    Samuel Thibault:
     Fix non-Linux builds
    
    Shawn Landden:
     ash: optional sleep builtin
    
    Sören Tempel (3):
     ed: add support for -s command-line option as mandated by POSIX
     ash: don't read past end of var in subvareval for bash substitutions
     ash: fix use-after-free in bash pattern substitution
    
    Timo Teräs:
     mkfs.vfat: fix volume label to be padded with space
    
    Vincent Stehlé:
     fdisk: recognize EBBR protective partitions
    
    Walter Lozano:
     Add support for long options to cmp
    
    Xiaoming Ni (4):
     loop: fix a race when a free loop device is snatched
     loop: refactor: extract subfunction get_next_free_loop()
     loop: simplify code of LOOP_SET_FD failure
     loop: refactor: extract subfunction set_loopdev_params()
    
  • 26 December 2021 -- BusyBox 1.35.0 (unstable)

    BusyBox 1.35.0. (git, patches, how to add a patch)

    Sizes of busybox-1.34.0 and busybox-1.35.0 (with equivalent config, static uclibc build):

     text	 data	 bss	 dec	 hex	filename
    1042344	 908	 14336	1057588	 102334	busybox-1.34.0
    1044070	 908	 14328	1059306	 1029ea	busybox-1.35.0
    

    Changes since previous release:

    Aaro Koskinen:
     find: implement -samefile
    
    Alin Mr:
     ash.c: speedup ${s:} substring (no quotes)
    
    Andrej Valek:
     mktemp: add --tmpdir option
    
    Ariadne Conill:
     cpio: add support for --ignore-devno like GNU cpio
     cpio: add support for --renumber-inodes like GNU cpio
    
    Bernhard Reutner-Fischer:
     chrt: silence analyzer warning
     libarchive: remove duplicate forward declaration
    
    Daniel Thau:
     awk: fix printf %%
    
    Denys Vlasenko:
     config system: move some options closer to relevalnt tool subdirectories
     libbb.h: fix logic selecting incorrect BB_STRTOOFF for !LFS configs
     libbb/lineedit: do not escape %^=+}]:, escape ~? in tab completion
     libbb: clarify what bb_mode_string() generates
     libbb: code shrink bb_parse_mode
     libbb: code shrink in des encryption, in setup_salt()
     libbb: code shrink in main() and scripted_main()
     libbb: eliminate a static data array in bb_mode_string()
     libbb: make bb_lookup_port() abort on bad port names
     libbb: reuse "bad port" error message string
     shell/ash_test/run-all: unset locale/language variables
     shell: do not read user database for every prompt - only for those which need it
     shell: enable more tests which are passing now
     shell: fix arithmentic evaluation of "++7" and such (it is + + 7, i.e. 7)
     shell: fix parsing of $(( (v)++ + NUM ))
     shell: fix script's comm field if ENABLE_FEATURE_PREFER_APPLETS=y
     shell: use more compact SHELL_ASH / HUSH config defines. no code changes
     ash: LINENO starts from 0 in -c SCRIPT mode
     ash: eval: Check nflag in evaltree instead of cmdloop
     ash: eval: Do not cache value of eflag in evaltree
     ash: eval: Prevent recursive PS4 expansion
     ash: fix LINENO in functions
     ash: fix compile breakage in !ENABLE_ASH_ALIAS config
     ash: introduce bash-like $FUNCNAME
     ash: parser: Fix alias expansion after heredoc or newlines
     ash: parser: Fix handling of empty aliases
     ash: parser: Get rid of PEOA
     ash: parser: Save and restore heredoclist in expandstr
     ash: speed up ${x//\*/|} too, make it independent of ASH_OPTIMIZE_FOR_SIZE
     ash: support testsuite for !FEATURE_SUID_CONFIG_QUIET configs
     ash: use pgetc_eatbnl() in more places, take 3
     hush: fix set -n to act immediately, not just after run_list()
     hush: fix var_LINENO3.tests failure
     hush: speed up ${x//\*/|} too
     awk: code shrink: avoid duplicate NUL checks and strlen()
     awk: never return NULL from awk_printf()
     basename: implement -a and -s SUFFIX
     blkdiscard: accept -f (force) as no-op
     bzip: make ftab[] and crc32table[] member arrays of EState, do not allocate
     chat: hopefully fix infinite spinning on input EOF
     chmod: correctly report changed modes
     df: "support" -H as an alias of -h
     dhcprelay: change two more variables to unsigned
     find: code shrink -{m,a,c}{time,min}
     httpd: do not send Last-Modified / ETag / Content-Length for error pages
     httpd: fix config deps
     httpd: if range is not specified, correctly fall back to read/write loop
     httpd: fix compile failure if !FEATURE_HTTPD_RANGES
     mount: "mount -o rw ...." should not fall back to RO mount
     mount: with -w, do not fall back to read-only mounts
     ps: fix -o pid=PID,args interpreting entire "PID,args" as header
     resize: use tcgetattr(TCSAFLUSH) instead of TCSANOW, closes 13811
     shuf: in -i RANGE, accept numbers up to width of pointers
     shuf: make -i 99999999990-100000000000 work even on 32 bits
     shuf: with -i LOW-HIGH, do not allow any argv's
     tar,smemcap: commonalyze checksumming code for tar header
     tar: prevent malicious archives with enormous long name sizes OOMing the machine
     tls: "server cert is not RSA" is a fatal error
     tls: replace "26-bit" P256 code with 32-bit one
     tls: x25519: code shrink by factoring out common code
     udhcp: fix build breakage on MIPS
     udhcpc6: fix udhcp_find_option to actually find DHCP6 options
     udhcpd: check config file for bad IP ranges (start > end)
     uudecode: special-case "/dev/stdout", closes 14241
     xxd: fix -p -r, closes 13881
    
    Dominique Martinet:
     sed: do not ignore 'g' modifier when match starts with ^
    
    Ildar Shaimordanov:
     wget: allow end-users to customize Content-Type for --post-data and --post-file
    
    Ismael Luceno:
     less: Ignore -X
     config: find: Fix mtime/mmin description
     find: Unify time comparisons
     find: implement -amin, -atime, -cmin, and -ctime
    
    Martin Kaiser:
     Makefile.flags: use all cflags for crypt and rt checks
    
    Matthew Slowe:
     timeout: add support for "timeout -k KILL_SECS"
    
    Nicholas Niro:
     ip: added support for setting netns on devices
    
    Peter Korsgaard:
     libarchive/get_header_ar.c: fix extraction of archives from binutils in deterministic mode
    
    Roberto A. Foglietta:
     ash: add bash-like ERR trap and set -E
    
    Ron Yorston:
     libbb: better coreutils compatibility for realpath
     libbb: code shrink parse_datestr
     libbb: ensure mode_string is NUL terminated
     ash: fix ignoreeof option
     ash: let ignoreeof only affect interactive shells
     ash: regressions in process substitution
     ash: stopped jobs should only prevent exit from interactive shell
     awk: fix read beyond end of buffer
     cal: implement -m
     date,touch: allow timezone offsets in dates
     getopt: code shrink
     printf: allow 0 as a flag and allow multiple flags
     rev: correct output for long input lines
     shuf: speed-up when limited output is requested
     tar,smemcap: silence compiler warning
     vi: changes to handling of -c and EXINIT
     vi: code shrink print_literal()
     vi: don't right shift empty lines
     vi: further changes to colon addresses
     vi: searches in colon commands should wrap
     vi: support ~/.exrc
     wget: implement --post-file
    
    Sergey Ponomarev:
     httpd,telnetd: make default port configurable
    
    Sören Tempel:
     ed: align output of read/write commands with POSIX-1.2008
     ed: add support for -p command-line option as mandated by POSIX
     ed: fix current line number for file passed via the command-line
     ed: align output of read command with POSIX.1-2008
    
    Walter Lozano:
     cmp: add support for -n
    
    YU Jincheng:
     *: generalize "const trick"
     Make const ptr assign as function call in clang
    
  • 30 November 2021 -- BusyBox 1.33.2 (stable)

    BusyBox 1.33.2. (git)

    Bug fix release. 1.33.2 has fixes for hush and ash (parsing fixes) and unlzma (fix a case where we could read before beginning of buffer).

  • 30 September 2021 -- BusyBox 1.34.1 (stable)

    BusyBox 1.34.1. (git)

    Bug fix release. 1.34.1 has build fix for MIPS, fixes for ash (regression in process substitution), awk (printf fix), chat (fix infinite spinning on input EOF).

  • 19 August 2021 -- BusyBox 1.34.0 (unstable)

    BusyBox 1.34.0. (git, patches, how to add a patch)

    Please note that awk had a number of changes. Report any breakage to the mailing list.

    Sizes of busybox-1.33.0 and busybox-1.34.0 (with equivalent config, static uclibc build):

     text	 data	 bss	 dec	 hex	filename
    1032724	 908	 14344	1047976	 ffda8	busybox-1.33.0
    1042344	 908	 14336	1057588	 102334	busybox-1.34.0
    

    Changes since previous release:

    Alex Samorukov:
     Do not add -lresolv on non-Linux systems
     Fix bb_setpgrp weapper on the FreeBSD
     Fix httpd compilation on the FreeBSD
     Fix klogd applet compilation on the FreeBSD
     Fix missing "crypt.h" compilation error on the FreeBSD
     Fix mknod compilation on the FreeBSD
     Fix ntpd compilcation on the FreeBSD
     Fix ping build on the FreeBSD
     Fix traceroute applet on the FreeBSD
     Fix mail compilation on the FreeBSD
     Fix for the FEATURE_UTMP on the FreeBSD
    
    Alexander Sack:
     httpd: cgi-bin support for DELETE, PUT, OPTIONS etc methods
    
    Alison Winters:
     vi: restore 0 offset after :set noXXX command
     vi: allow writing to another file if this one is readonly
    
    Andre Kalb:
     udhcpc: Add support to change default interface name
    
    Bernd Kuhls:
     update_passwd: fix context variable
    
    Chris Renshaw:
     gcc-version.sh: fix for "invalid number" message during Android NDK builds
    
    Denys Vlasenko:
     Makefile.flags: add a test for -lrt availability
     gcc-version.sh: Cygwin fix
     trylink: do not drop libs from CONFIG_EXTRA_LDLIBS
     platform.h: fix for Bionic >= 21 not having wait3()
     libbb.h: inline byteswaps
     libbb/procps: smaller global data for username/groupname cache
     libbb: correct the name of is_TERM_dumb()
     libbb: do not check closedir() in remove_file()
     libbb: fix '--help' handling in FEATURE_SH_NOFORK=y
     libbb: introduce and use xgettimeofday(), do not truncate 64-bit time_t in shells
     decompress_gunzip: simplify ERR_RET bit clearing
     e2fsprogs/*: remove ioctl calling obfuscation
     move iterate_on_dir() from e2fsprogs to libbb
     tls: implement secp256r1 elliptic curve (aka P256)
     tls: "server did not provide EC key" is fatal
     tls: get rid of constant-time add/sub operations
     tls: make constant basepoint9[32] array 8-byte aligned
     tls: make x25519 key generation code more similar to P256
     tls: reduce register pressure in i386 assembly (helps Android to compile)
     ascii: new applet
     crc32: new applet
     shells: do not allow bare "read" in non-bash compat configs
     ash: fix ${unset_var/pattern/repl}
     ash: make a strdup copy of $HISTFILE for line editing
     ash: match bash behavior for ${empty_var/*/repl}
     ash: parser: Fix VSLENGTH parsing with trailing garbage
     ash: placate -Werror=format-security
     ash: save Ron's patch from oblivion
     ash: speed up ${v//pattern/repl} if !ASH_OPTIMIZE_FOR_SIZE
     hush: beautify ^D handling to match ash / bash
     hush: fix bkslash+newline handling and number validation in ${NN} and ${#NN}
     hush: fix handling of "cmd && &"
     hush: fix handling of \^C and "^C"
     hush: implement $'str' bashism
     hush: make LINENO selectable without BASH-COMPAT
     hush: optimize ${var/pattern/repl} for trivial patterns
     awk: after preinc/dec, only allow variable, field ref, array ref, or another preinc/dec
     awk: allow empty functions with no arguments, disallow function redefinitions
     awk: disallow break/continue outside of loops
     awk: do not special-case "delete"
     awk: do not use a copy of g_progname for node->l.new_progname
     awk: document which hashes are used at what state (parse/execute)
     awk: enforce simple builtins' argument number
     awk: evaluate all, even superfluous function args
     awk: fix beavior of "exit" without parameter
     awk: fix corner case in awk_printf
     awk: fix detection of VAR=VAL arguments
     awk: fix parsing of expressions such as "v (a)"
     awk: fix printf "%-10c", 0
     awk: fix printf buffer overflow
     awk: fix use-after-free in "$BIGNUM1 $BIGGERNUM2" concat op
     awk: free unused parsing structures after parse is done
     awk: g_buf[] does not need a separate allocation
     awk: get rid of "move name one char back" trick in next_token()
     awk: in parsing, remove superfluous NEWLINE check; optimize builtin arg evaluation
     awk: make ltclass ("last token class") local to next_token()
     awk: more efficient -f FILE
     awk: move locals deeper into scopes where they are used, no logic changes
     awk: move match() code out-of-line
     awk: rand() could return 1.0, fix this - should be in [0,1)
     awk: remove custom pool allocator for temporary awk variables
     awk: remove redundant check
     awk: replace incorrect use of union in undefined function check (no code changes)
     awk: restore strdup elision optimization in assignment
     awk: rewrite "print" logic a bit to make it clearer
     awk: rollback_token() + chain_group() == chain_until_rbrace()
     awk: shuffle globals for smaller offsets
     awk: simplify parsing of function declaration
     awk: simplify tests for operation class
     awk: support %F %a %A in printf
     awk: tighten parsing - disallow extra semicolons
     awk: tighten rules in action parsing
     awk: unbreak "cmd" | getline
     awk: unbreak "printf('%c') can output NUL" testcase
     awk: undo TI_PRINT, it introduced a bug (print with any redirect acting as printf)
     awk: use static tmpvars in main and exit
     awk: use smaller regmatch_t arrays, they had 2 elements for no apparent reason
     awk: use static tmpvars instead of nvalloc(1)ed ones
     awk: when parsing TC_FUNCTION token, eat its opening '('
     awk: when parsing length(), simplify eating of LPAREN
     base32/64: accept -i "skip bad chars" option (currently in effect unconditionally)
     bc,dc: make BC_LINE_LENGTH/DC_LINE_LENGTH more compatible with GNU
     bc,dc: fix length(0) and length(0.000nnn) result
     bc: ^C on input line exits (unlike ^C during calculations, which does not)
     bc: code shrink: combine init() and copy() where we can
     bc: fix for mul overflow in scale calculation in a^b
     blockdev: support --get/setra
     chattr: fix "chattr =ae -R FILE"
     chattr: if IOC_FSGETXATTR fails, do not try IOC_FSSETXATTR
     chattr,lsattr: share stat error message
     chattr,lsattr: do not open e.g. device files unless asked directly; do not follow links
     chattr,lsattr: support -p
     lsattr: support more ext2 flags
     cksum: fix handling of read errors
     cp: implement -n
     cp: implement -t DIR
     cpio: fix "cpio -d -p A/B/C"
     df: POSIXLY_CORRECT sets _default_ scale, -m/-h overrides it
     df: support -t TYPE
     dnsd: check that we don't read past packet
     du: support -b "apparent size"
     echo: fix !ENABLE_FEATURE_FANCY_ECHO build
     echo: special case "echo --help": it should not show help text
     env: implement -0
     free: implement -h
     hexdump: fix error message
     httpd: avoid extra stat() calls for "GET /dirname/" case
     httpd: avoid one stat() call for "GET /dirname" case
     httpd: if no request was given at all, close the socket without generating error page
     httpd: move proxy check before URL duplication and request type check
     httpd: no need to strcpy() when we only need to copy one byte
     httpd: support HEAD requests even in !CGI config
     inetd: deinline machtime() - gcc gets it wrong
     ionice: implement -t
     login: implement LOGIN_TIMEOUT
     lsof: print fd# too
     man: fix segfault in "man 1"
     modprobe: when reading modules.builtin, use basenames of files from it
     mv: implement -t and -T
     nslookup: do not print "No answer" for NODATA replies, closes 13006
     ntpd: decrease INITIAL_SAMPLES from 4 to 3
     ntpd: increase loglevel to 3 for "poll:32s sockets:0 interval:64s" message
     ntpd: log responses to clients at log level 3
     ntpd: remove unused USING_INITIAL_FREQ_ESTIMATION code
     ntpd: tweak comments
     ntpd: without INITIAL_FREQ_ESTIMATION code, state variable is not needed too
     nuke: default to N
     pmap: fix column width, closes 13431
     resume: write offset in /sys/power/resume_offset
     runsv: code shrink: use single handler function for SIGTERM and SIGCHLD
     runsv: robustify signal handling - SIGTERM to child between vfork and exec could mess things up
     shred: implement -s SIZE
     shred: with -u, unlink file even if it is zero length
     shuf: simplify check that we have at least one FILE
     start-stop-daemon: explain -x + -a test
     svlogd: if processor's stdin can not be opened, do not try ad infinitum
     switch_root: code shrink - use iterate_on_dir()
     tail: do not lose the tail of old file if new file (-F) is detected
     tail: fix typo in variable name
     tar: simplify addition of --exclude=GLOB to the expansion of -X EXCLFILE
     taskset: disallow "taskset -p 0"
     taskset: fix for PID longer than 12 chars
     taskset: implement -a
     taskset: use iterate_on_dir()
     tc: fix for parsing of "dev IFACE" and printing of "class list"
     tcp/udpsvd: robustify SIGCHLD handling
     telnetd: give inetd.conf example in --help
     timeout,top,watch,ping: parse NN.N fractional duration in locales with other separators
     touch: fix -am
     touch: fix SEGV if !ENABLE_FEATURE_TOUCH_SUSV3
     touch: make FEATURE_TOUCH_NODEREF unconditional
     touch: switch to using utimensat() and futimens()
     touch: unbreak -h
     traceroute: fix compile error due to FreeBSD compat
     traceroute: fix option parsing
     udhcp: convert log1s() macro to function
     udhcp: shrink arpping()
     udhcpc: clarify bcast/unicast sends in logs, include server ID
     udhcpc: do not use inet_addr() to parse -r REQ_IP, it's deprecated
     udhcpc: get rid of client_data.fqdn field
     udhcpc: ignore zero-length DHCP options
     udhcpc: improve logs - show offer as it is received
     udhcpc: include client-id option in DECLINEs, even if it's a custom -x 61:HEX option
     udhcpc: remove deprecated -H/-h HOSTNAME options (9 years)
     udhcpc: rename server_addr to server_id, fix id comparison if it's not specified
     udhcpc: send client-id option in DHCPDECLINE
     udhcpc[6]: close listening socket more eagerly (e.g. across script runs)
     udhcpc[6]: do not pass xid around, keep it in client_data.xid
     udhcpc[6]: fold perform_renew() into its only caller
     udhcpc[6]: on SIGUSR1, do not go from rebind to renew state
     udhcpc[6]: remove superfluous "created raw socket" log message
     udhcpc[6]: untangle "timeout" and "remaining lease"; reduce min lease to 30 seconds
     udhcpc[6]: when renewing, send 1 packet (not 3), on failure go back to BOUND
     uniq: support -z
     unlzma: fix a case where we could read before beginning of buffer
     unzip: add -t
     unzip: fix for .zip archives with >4GB file
     vi: allow regular expressions in ':s' commands
     vi: move undo_queue_state in globals to other byte-sized members
     xxd: do not try reading from closed stdin when non-existent file is given
     xxd: implement -i "C style output"
     xxd: implement -o DISPLAYOFFSET
    
    Eicke Herbertz:
     shell: also do word splitting when -d DELIM is used
    
    Harald van Dijk:
     tar: exclude files before updating hardlink info list
    
    Jeremy Lin:
     wget: allow HTTP 307/308 redirects
    
    Ján Sáreník:
     run-parts: permit dot later in file name
    
    Khem Raj:
     gen_build_files: Use C locale when calling sed on globbed files
    
    Mario Abajo:
     login: permit change expired password wit PAM
    
    Martin Kaiser:
     Makefile.flags: fix the OS detection for libresolv
    
    Maxim Storchak:
     httpd: fix offset for sendfile
    
    Natanael Copa:
     echo: do not assume that free() leaves errno unmodified
     lineedit: fix tab completion with equal sign
    
    Paul Spooren:
     nslookup: mention QUERY_TYPE SRV
     build system: use SOURCE_DATE_EPOCH for timestamp if available
    
    Rafał Miłecki:
     dd: support iflag=count_bytes
    
    Rasmus Villemoes:
     watchdog: make open-write-close-open functionality a config knob
    
    Rob Landley:
     cut: add toybox-compatible options -O OUTSEP, -D, -F LIST
    
    Ron Yorston:
     bloat-o-meter: avoid double counting
     build system: avoid build failure during bisection
     libbb: code shrink and speed up find_applet_by_name()
     libbb: code shrink and speed up index_in_strings()
     libbb: code shrink fgets_str
     libbb: introduce and use fputs_stdout
     lineedit: support empty PATH entries in tab completion
     ash: add process substitution in bash-compatibility mode
     awk: allow printf('%c') to output NUL, closes 13486
     cp,mv: fix -t DIR option
     cp: fix build failure with long options disabled
     cryptpw: typo in usage message
     diff: code shrink
     nl: ensure '-b n' option displays file content
     uniq: really support -z
     vi: ':r' should insert text after current line
     vi: 'G'/'M' commands move to first visible character
     vi: 'ZZ' should warn if there are more files to edit
     vi: :wq/:x should warn if there are more files to edit
     vi: add expandtab option
     vi: adjust conditional compilation of modifying_cmds
     vi: allow 'gg' to specify a range
     vi: allow 'r' command to be aborted, repeated
     vi: allow backward search to specify line address
     vi: allow ctrl-D to reduce indentation
     vi: allow delimiter in ':s' to be escaped
     vi: allow line addresses to have an offset
     vi: allow motion count for change/delete/yank/shift
     vi: allow repetition count for paragraph motion
     vi: allow the '.' command to have a repetition count
     vi: changes to line addresses for colon commands
     vi: changes to option handling
     vi: code shrink colon line addresses
     vi: code shrink motion by paragraph
     vi: code shrink search commands
     vi: correct autoindent for 'O' command
     vi: correctly record deleted characters
     vi: cursor positioning after whole-line 'y'
     vi: deal with invalid movements in shift commands
     vi: detect and warn about invalid line addresses
     vi: don't move cursor when yanking whole lines
     vi: don't overwrite existing file
     vi: expand '%' and '#' in colon commands
     vi: fix backward search with GNU regex
     vi: fix buffer overrun; code shrink
     vi: fix empty line range regression
     vi: fix range selection by forward character motion
     vi: fix regex search compilation error
     vi: fix word operations across line boundaries
     vi: improve handling of anchored searches
     vi: improve motion by paragraph
     vi: improve operations involving paragraph movement
     vi: improvements to ':read' command
     vi: improvements to character search within line
     vi: improvements to range selection
     vi: improvements to reporting of changes
     vi: improvements to undo
     vi: initialise tabstop once not for each file
     vi: issue a warning on failure to find a character
     vi: keep autoindent if line isn't empty
     vi: make autoindent respect expandtab setting
     vi: make buffer handling more vi-like
     vi: make context marks more like vi
     vi: make cursor positioning more vi compatible
     vi: make de-indentation with ctrl-D more like vim
     vi: make put commands more like vi
     vi: make the substitute command more like vi
     vi: more fixes to range selection by word
     vi: position cursor on last column of tab
     vi: preserve state when switching file
     vi: reject change command when motion fails
     vi: remember cursor column during vertical motion
     vi: remove autoindent from otherwise empty lines
     vi: reset command count when specifying '0' range
     vi: saving unnamed file in readonly mode
     vi: stored search pattern applies to ':s'
     vi: support more commands for range selection
     vi: up/down motion beyond end of file should fail
     vi: use basic regular expressions for search
    
    Russell Senior:
     udhcpc: ignore zero-length DHCP options
    
    S Harris:
     cpio: fix sscanf on unterminated buffer
     vi: fix read outside of text buffer during insert
    
    Samuel Sapalski:
     decompress_gunzip: Fix DoS if gzip is corrupt
    
    Sergey Ponomarev:
     wget: new option FEATURE_WGET_FTP to enable/disable FTP
     httpd_post_upload.cgi: use mktemp to avoid $RANDOM
    
    Seth David Schoen:
     udhcpd: don't hardcode treating .0 and .255 specially
    
    Sören Tempel:
     ls: don't output any colors with TERM=dumb
    
    Xabier Oneca:
     touch: add SUSv3 options -a and -m
     touch: fix atime set from reference file
     touch: remove unneeded GETOPT32 defines
     touch: prevent usage of -r and -t at once
    
  • 3 May 2021 -- BusyBox 1.33.1 (stable)

    BusyBox 1.33.1. (git)

    Bug fix release. 1.33.1 has fixes for httpd (sendfile now works), ash (HISTFILE corruption, unset variable pattern expansion), passwd (SELinux fix), traceroute (option parsing fix), gunzip (fix for corrupted archive).

  • 1 January 2021 -- BusyBox 1.32.1 (stable)

    BusyBox 1.32.1. (git)

    Bug fix release. 1.32.1 fixes a case where in ash, "wait" never finishes.

  • 29 December 2020 -- BusyBox 1.33.0 (unstable)

    BusyBox 1.33.0. (git, patches, how to add a patch)

    Sizes of busybox-1.32.0 and busybox-1.33.0 (with equivalent config, static uclibc build):

     text	 data	 bss	 dec	 hex	filename
    1020219	 481	 7460	1028160	 fb040	busybox-1.32.0
    1021980	 481	 7456	1029917	 fb71d	busybox-1.33.0
    

    Changes since previous release:

    Andy Shevchenko
     modprobe: add support for modprobe.blacklist=module1,module2,...
    
    Audun-Marius Gangstø:
     lineedit: fix unicode characters in prompt
    
    Christian Eggers:
     shell: fix "read -d ''" behavior
     ip: add support for "noprefixroute" option
     ip address: add support for "valid_lft" and "preferred_lft" options
     chrt: support for musl C library
    
    Cristian Ionescu-Idbohrn:
     fix warning: label 'out1' defined but not used
    
    Denys Vlasenko:
     avoid using strtok - eliminates use of hidden global variable
     use write_str() functions where appropriate
     fixes for Hurd build
     move ADJTIME_PATH define to header files
     examples: remove /sbin/ prefixes, system should be configured with $PATH to find utilities
     build system: combat gcc zealotry in data alignment
     build system: make -static-libgcc selectable in config
     libbb: add and use infrastructure for fixed page size optimization
     libbb: bb_do_delay(3) -> pause_after_failed_login(), and stop looping there
     libbb: change decode_base32/64 API to return the end of _dst_, not _src_
     libbb: create and use mmap() helpers
     libbb: do not compile selinux_or_die() if !SELINUX
     libbb: do not open-code __errno_location() call
     libbb: exec_login_shell() - new function
     libbb: extend "errno pointer" trick to other than __GLIBC__
     libbb: fold common64_hash() into its only user
     libbb: in @SECONDS date format, use 64-bit time if libc allows
     libbb: introduce and use msleep()
     libbb: introduce and use sleep1()
     libbb: introduce and use xsettimeofday()
     libbb: make msleep() result in only one syscall instead of looping
     libbb: make pw_encrypt() die if supplied salt is bad (e.g. emply)
     libbb: rename run_shell() to exec_shell()
     libbb: shrink last_char_is(), no longer allow NULL string argument
     libbb: shrink recursive_action() by reducing memory pressure
     libbb: smaller and faster decode_base64()
     libbb: trim base32/64 tables
     unicode: fix handling of short 1-4 char tables
     unicode: relax array alignment for tables
     lineedit: disable completion and fancy prompts if no shells are selected
     lineedit: remove ->path_lookup if ash is not configured
     lineedit: use strncmp instead of is_prefixed_with (we know the length)
     networking: support ftp PASV responses not ending with ')'
     ash: clear ungetc counter on syntax errors
     ash: jobs: Fix infinite loop in waitproc
     ash: jobs: Fix waitcmd busy loop
     ash: make interactive ^C break out of PS2 mode
     ash: reset SIGHUP earlier: allows HUP traps in .profile, closes 13371
     hush: NOMMU fix for hush-psubst/tick6.tests
     hush: deal with FIXMEs for corner cases in parameter expansion
     hush: do not print killing signal name in `cmd_which_dies_on_signal`
     hush: fix -c SCRIPT handling
     hush: fix PS1 prompth in !EDITING config
     hush: fix ^C in INTERACTIVE, !EDITING config
     hush: fix this case: echo "SCRIPT" | hush
     hush: if !EDITING, do not regenerate prompt for every input char
     hush: if login shell, also source ~/.profile
     hush: output bash-compat killing signal names
     hush: remove one redundant getpid() on every startup
     shell: better support of [[ ]] bashism
     shell: for signal exitcode, use 128 | sig, not 128 + sig - MIPS has signal 128
     shell: remove FAST_FUNC from a static function
     shell: a fix for systems without RLIMIT_NICE
     awk: FS regex matches only non-empty separators (gawk compat)
     awk: add a test that $NF is empty
     awk: fix dodgy multi-char separators splitting logic
     base32: new applet
     base32/64: decode in-place
     base32/64: implement -w COL
     bc: do not allocate line editing state until needed
     date: for -uR and -uIh, timezone still has to be shown as +hhmm, not as abbreviation
     date: remove non-standard special-casing of date '+%f'
     date: support -Ins, more compatible timezone display in -I
     dd: support for O_DIRECT i/o
     factor: 30% faster trial division (better sieve)
     factor: detect squares
     grep: for -L, exitcode 0 means files *without* matches were found, closes 13151
     hexdump: fix duplicate block comparison
     hwclock: fix musl breakage of settimeofday(tz)
     login: log to syslog every bad password, not only 3rd
     mail: commonalize send_r_n()
     mail: deobfuscate launch_helper()
     mail: launch_helper(): flush stdio before vfork, set G.helper_pid only in parent
     mail: move "opts" from globals
     man: implement SECTION parameters
     mdev: clear LOGMODE_STDIO only directly before daemonizing
     mount: add -o nostrictatime and -o [no]lazytime
     mount: implement -o nosymfollow, remove bogus -o union
     mount: do not guess bind mounts as NFS
     mount: do not guess mount as NFS if "hostname:" contains slashes
     mount: fix a race when a free loop device is snatched under us by another mount
     mount: fix incorrect "success" exitcode if loop device setup fails
     nsenter: stop option parsing on 1st non-option
     ntpd: allow non-root to run it (e.g. with -w option)
     ntpd: fix refid reported in server mode, closes 13056
     ntpd: fix the case where two replies received at once and first one causes a step
     ping: fix -wN to not think that one packet is always lost
     tar: fix fallout of last_char_is(NULL) no longer being allowed
     traceroute: avoid collecting target local address if !VERBOSE
     traceroute: commonalize verbose printing
     traceroute: don't set SO_DONTROUTE on recv socket, it only affects send
     traceroute: even with -v, don't show other ping processes replies
     traceroute: fix traceroute6 -I (icmp mode)
     traceroute: make "ipv4 or ipv6?" cheaper to find out
     traceroute: set IP_PKTINFO to see correct local IP of received pkt (fixes -v display)
     traceroute: simpler hexdump()
     traceroute: untangle main loop
     udhcp: remove struct packing attribute, eliminates gcc-9.x warning
     udhcpc6: code shrink - sending functions do not need ifindex parameter
     uevent: increase netlink buffer sizes
     uevent: make it survive ENOBUFS
     uudecode: fix possible signed char bug
     volume_id: improve struct layout (smaller offesets, smaller insns on x86)
     wget: do not ftruncate if -O- is used, closes 13351
     xargs: fix -I SUBSTR behaviour
     xxd: fix printing of trailing spaces
     xxd: compat: move hexdump -R functionality to xxd -r
    
    Eddie James:
     hwclock: fix settimeofday for glibc v2.31+
    
    Gray Wolf:
     crontab: fix -e with editors saving using renaming strategy
    
    Jan Klötzke:
     libbb: set netlink socket revbuf size before binding
     mdev: increase netlink buffer sizes
     mdev: move daemon setup to dedicated function
     mdev: re-initialize if uevent messages were lost
     mdev: add syslog logging mode
     mdev: add -v to increase log verbosity
    
    Joachim Nilsson:
     login: update UTMP before forking
     syslogd: delay PID file creation until syslogd is ready
     archival: avoid std namespace for local includes
    
    Lauri Kasanen:
     mount: surround syslog.h with the config check
    
    Martin Lewis:
     udhcp: add option scanner
     udhcpc: fix a TODO in fill_envp using option scanner
     procps: code shrink
     compare_string_array: code shrink
     domain_codec: optimize dname_dec and convert_dname
     udhcpc: add support for long options
    
    Michal Kazior:
     udhcp: bind to device even for ucast packets
    
    Norbert Lange:
     nc_bloaty: support udp broadcast ports
     dpkg: prevent important directories from being removed
     dhcpd: remove hardcoded pidfile path
     acpid: only display -p if supported in usage
     util-linux: support erofs filesystem
    
    Ron Yorston:
     build system: drop PLATFORM_LINUX
     lineedit: omit directories when tab-completing from PATH
     lineedit: match local directories when searching PATH
    
    Rui Salvaterra:
     ip rule: add support for fwmark/fwmask for policy routing
    
    Scott Court:
     wget: fix openssl options for cert verification
    
    Sergey Ponomarev:
     httpd_indexcgi.c: minimize style CSS
     httpd_indexcgi.c: use CSS for odd/even rows
     httpd: update to HTTP/1.1
     httpd: don't add Date header to response
     httpd: don't add Last-Modified header to response
     httpd: support caching via ETag header
     httpd: make Deny/Allow by IP config support optional
    
    Steffen Trumtrar:
     mount: support the sizelimit and offset option for loop devices
    
    Xabier Oneca:
     httpd: code shrink
     mkdtemp: proper error detection on mktemp
    
  • 26 June 2020 -- BusyBox 1.32.0 (unstable)

    BusyBox 1.32.0. (git, patches, how to add a patch)

    Sizes of busybox-1.31.1 and busybox-1.32.0 (with equivalent config, static uclibc build):

     text	 data	 bss	 dec	 hex	filename
    1011750	 483	 7468	1019701	 f8f35	busybox-1.31.1
    1015340	 482	 7460	1023282	 f9d32	busybox-1.32.0
    

    Changes since previous release:

    Aaro Koskinen:
     find: implement -empty
    
    Alistair Francis (4):
     date: Use 64 prefix syscall if we have to
     time: Use 64 prefix syscall if we have to
     runsv: Use 64 prefix syscall if we have to
     Remove stime() function calls
    
    Biswapriyo Nath:
     Makefile.flags: restrict Wno-constant-logical-operand and Wno-string-plus-int options for clang
    
    Brian Foley (3):
     dc: execute shouldn't pop if stack head is not a string
     dc: Fix segfault when executing strings generated using asciify
     dc: Parse error & fix out of bounds read in xc_program_printString
    
    Daniel Edgecumbe (3):
     gzip: default level with ENABLE_FEATURE_GZIP_LEVELS should be 6
     gzip: set compression flags correctly as per standard
     gzip: set default compression level to 6 when CONFIG_FEATURE_GZIP_LEVELS=n
    
    David Demelier:
     wget: increase redirections limit
    
    Denys Vlasenko:
     build system: suppress some clang-9 warnings
     examples/udhcp/simple.script: up interface on deconfig event
     libbb: remove syscall wrappers around clock_gettime, closes 12091
     libbb: clang/llvm 9 fix - do not eliminate a store to a fake "const"
     libbb: deal with "declaration of 'link' shadows a global declaration" warning
     libbb: include <crypt.h> only if necessary
     ash,hush: add comment about masked SIGCHLD, handle SIG_IGNed SIGHUP as in bash
     ash,hush: testcase for "exit" without arguments in a trap
     ash: Expand here-documents in the current shell environment
     ash: Return without arguments in a trap should use status outside traps
     ash: [BUILTIN] Exit without arguments in a trap should use status outside traps
     ash: builtin: Mark more regular built-ins
     ash: eval: Add assignment built-in support again
     ash: eval: Always set localvar_stop
     ash: eval: Fail immediately with redirections errors for simple command
     ash: eval: Only restore exit status on exit/return
     ash: eval: Reap zombies after built-in commands and functions
     ash: eval: Replace with listsetvar with mklocal/setvareq
     ash: eval: Use the correct expansion mode for fd redirection
     ash: exec: Do not allocate stack string in padvance
     ash: exec: Never rehash regular built-ins
     ash: exec: Stricter pathopt parsing
     ash: expand: Do not reprocess data when expanding words
     ash: expand: Ensure result is escaped in cvtnum
     ash: expand: Fix multiple issues with EXP_DISCARD in evalvar
     ash: expand: Fix skipping of command substitution when trimming in evalvar
     ash: expand: Fix trailing newlines processing in backquote expanding
     ash: expand: Merge syntax/quotes in memtodest with flags
     ash: expand: Use HOME in tilde expansion when it is empty
     ash: fix BASE###nn bashism for bases 36..64
     ash: fix BASE###nn bashism to accept letter 'digits' for bases > 9
     ash: fix set -o to not show "nameless" options
     ash: jobs - Do not block when waiting on SIGCHLD
     ash: jobs: Only clear gotsigchld when waiting for everything
     ash: jobs: Replace some uses of fmtstr with stpcpy/stpncpy
     ash: main: Only set savestatus in exitcmd
     ash: main: Print \n upon EOF (CTRL-D) when run interactively
     ash: memalloc: Add growstackto helper
     ash: memalloc: Avoid looping in growstackto
     ash: mkinit: Split reset into exitreset and reset
     ash: output: Fix fmtstr return value
     ash: parser: Do not push token back before parseheredoc
     ash: parser: Fix incorrect eating of backslash newlines
     ash: parser: Fix old-style command substitution here-document crash
     ash: parser: Only accept single-digit parameter expansion outside of braces
     ash: parser: Save/restore here-documents in command substitution
     ash: rename some function parameters to match dash
     ash: rename stack_nputstr() back to stnputs() to match dash
     ash: shell: Fix clang warnings about "string plus integer"
     ash: use pgetc_eatbnl() in more places, take 2
     hush: fix "set -o INVALID" affecting -e flag state
     hush: fix negative_arith.tests: glob-protect dash in "$((arith))"
     hush: fix preprocessor directives indentation
     hush: implement "return NUM in trap sets $? after trap"
     hush: make "exit" in trap use pre-trap exitcode
     hush: make "exit" in trap use pre-trap exitcode - fix for nested trap
     hush: restore redirected stdin
     awk: disallow "str"++, closes bug 12981
     awk: fix more "length" cases, closes 12486
     bc: fix comparison bug, closes 12336
     brctl: fold show_bridge_ports into its caller
     dpkg-deb: work around bogus error message when working with XZ compressed packages
     fdisk: add HFS / HFS+ partition type
     fdisk: avoid overflow in "mega/gigabytes" calculation, code shrink
     gunzip: code shrink by using int-, not short-sized struct member
     gunzip: fix incorrect decoding of "fixed" inflate blocks
     gzip: -d with zcat enabled but gunzip disabled was misbehaving
     init: if tcgetattr() fails, don't even try to tcsetattr()
     init: improve handling of signals racing with each other
     nmeter: add %T (zero-based timestamp) format
     nmeter: do not clamp down %Nc to minimum of 10 (think nmeter "%`nproc`c")
     nologin: make it possible to build it as single applet
     ntpd: abort if argvs are (unexpectedly) given
     ntpd: abs(tmx.offset) was truncating a "long" typed value
     ntpd: add comment about mode6, no code changes
     ntpd: commonalize message strings
     ntpd: decrease MIN_FREQHOLD by 2, increase "penalty" for largish offset x2
     pidof: support "pidof /path/to/binary" case
     readlink,realpath: fix a case with a symplink, closes 11021
     stat: print nanosecond times, fix printing of empty lines
     sysctl: do report EACCES errors on write
     tar: change -a from meaning "lzma" to mean "autodetect by extension"
     taskset: add support for taking/printing CPU list (-c option)
     taskset: implement stride argument
     taskset: tighten the check for stride values
     tc: array address is never NULL
     tee: do not intercept SIGPIPE
     telnet: add disabled code to emit EC and IP
     telnet: fix uninitialized variable bug
     tftp: on download, open local file only when first bit of data arrived
     tftpd: show requested file name in open error message
     top: do not use previous collected data wheh "h" toggles threads display
     udhcp: comment out unused domain compression code
     udhcpc6: add ELAPSED_TIME option to outgoing packets
     udhcpc6: s/iphdr/ip6_hdr/
     udhcpd: mangle hostnames starting with dash ("-option")
     whois: limit total length of response to 32+2 kb
    
    Dimitri John Ledkov:
     wget: implement TLS verification with ENABLE_FEATURE_WGET_OPENSSL
    
    Eivind Versvik:
     udhcpc6: support stateless DHCPv6
    
    Gray Wolf:
     grep: Fix -f FILE when FILE is empty and -x provided
    
    James Byrne (2):
     libbb: reduce the overhead of single parameter bb_error_msg() calls
     config: PID_FILE_PATH required for FEATURE_CROND_SPECIAL_TIMES
    
    Jean-Philippe Brucker:
     build system: remove KBUILD_STR()
    
    Jo-Philipp Wich (2):
     nslookup: handle replies without RRs
     nslookup: implement support for SRV records
    
    Kaarle Ritvanen:
     ln: --no-target-directory implies --no-dereference
    
    Kang-Che Sung:
     bc: Add 'U' suffix in UINT_MAX preprocessor check
    
    Lauri Kasanen:
     unzip: -d should create the dir
    
    Liu, Shuang (ADITG/ESM):
     chgrp: correct the usage for non-desktop chgrp calls
    
    Lukas Rusak:
     free: include SReclaimable in cached value
    
    Mark Edgar:
     unexpand: correct behavior for --first-only --tabs=4
    
    Martin Lewis (8):
     libbb: Converted safe_read to safe_write format
     replace: count_strstr - Handle an edge case where sub is empty
     xstrndup: Use strndup instead of implementing it
     brctl: add support for showmacs command
     brctl: add support for showstp command
     dhcpc.c: Added support for relay server parameter
     dhcpc: code shrink in good_hostname
     dhcpc: refactor xmalloc_optname_optval to shrink binary size
    
    Michal Kazior:
     udhcpc: fix segmentation fault on empty bin opt
    
    Peter Korsgaard:
     syslogd: add config option to include milliseconds in timestamps
    
    Rolf Eike Beer:
     examples/udhcp/simple.script: print the filename actually changed
    
    Ron Yorston (13):
     mim: new applet: run scripts from a specification file
     ash,hush: allow builtins to be tab-completed, closes 7532
     ash,hush: drop pointer check before calls to show_history
     ash: fix build failure when command built-in is disabled
     ash: only catch unexpected exceptions in PS1 expansion
     ash: improve expandstr()
     ash: return exit status of nofork applets (again)
     ash: move TRACE statement in evalcommand()
     httpd: permit non-default home directory with NOMMU enabled
     httpd: allow '-h' to work when daemonized with NOMMU enabled
     vi: fixes to string search in colon commands, closes 10321
     xargs: fix handling of quoted arguments, closes 11441
     xargs: restore correct behaviour of -n option
    
    Stefan Agner:
     examples/udhcp/simple.script: fix IPv6 support when using udhcpc
    
    Sören Tempel (2):
     grep: add proper support for pattern_list
     deluser: check if specified home is a directory before removing it
    
    Tomas Paukrt:
     route: fix output of "route -n -A inet6"
    
    Tomi Leppanen:
     grep: add -R
    
    Uwe Glaeser:
     udhcpc6: use correct multicast MAC
    
  • 25 October 2019 -- BusyBox 1.31.1 (stable)

    BusyBox 1.31.1. (git)

    Bug fix release. 1.31.1 has fixes for dc, ash (PS1 expansion fix), hush, dpkg-deb, telnet and wget.

  • 10 June 2019 -- BusyBox 1.31.0 (unstable)

    BusyBox 1.31.0. (git, patches, how to add a patch)

    Sizes of busybox-1.30.1 and busybox-1.31.0 (with equivalent config, static uclibc build):

     text	 data	 bss	 dec	 hex	filename
    1008478	 487	 7436	1016401	 f8251	busybox-1.30.1
    1008392	 482	 7428	1016302	 f81ee	busybox-1.31.0

    Changes since previous release:

    Aaro Koskinen:
     sysctl: fix compatibility with procps sysctl
    
    Aitor Esteve Alvarado:
     start-stop-daemon: change priority before dropping privileges
    
    Alexander Vickberg (3):
     httpd: when sending gzipped content use content-length header
     httpd: pass authorization header to CGI if not Basic
     start-stop-daemon: fix -x is not required for -K
    
    Andrey Mazo:
     udhcpc: don't exit after backgrounding on -n -b
    
    Antoine Girard-Vallée:
     udhcp: add 100 and 101 dhcp options for ipv4
    
    Ari Sundholm (2):
     grep: fix -x -v with certain pattern orders
     grep: short-circuit -v to bail out on first match
    
    Bernhard Reutner-Fischer (5):
     checkstack.pl: fix arch autodetection
     checkstack: pull from upstream
     checkstack.pl: tweak bfin re
     ip link: Fix vlan proto, closes 8261 and 11638
     ipaddress: remove unused variable no_link
    
    Brian Foley (4):
     awk: Guard pointer chasing when parsing ternary expressions.
     awk: Syntax error if delete isn't given an arg.
     awk: Fix overly permissive func arg list parsing
     sed: Fix backslash parsing for 'w' command arg
    
    Chen Qi:
     dc.tests: fix two test case to also depend on DC_BIG
    
    Danijel Tasov:
     telnet: provide feedback after successful connect
    
    Denys Vlasenko:
     make_single_applets.sh: fix for BSS trick
     examples/var_service: use "exec sleep 5" instead of "{ sleep 5; exit; }"
     dhcp service example: cater for servers not giving subnet and/or router
     service examples: do not respawn supplicant too often
     service examples: if iface do not exist, retry upping it
     service examples: ifplugd -M to prevents frequent respawning
     libarchive: treat one "FIXME: avoid seek"
     libbb: move netlink socket binding to the utility function
     libbb: find_mount_point() too eager to stat mounted devices
     lineedit: fix SEGV in fdisk, hexedit, ed, closes 11661
     ash,hush: implement optional "BASE#nnnn" numeric literals
     ash,hush: move all definitions of strto_arith_t() together
     ash,hush: add tests for backslashes in export VAR=VAL
     ash,hush: bash compat for ulimit: -w => -x, -p => -u
     ash,hush: bash compat for ulimit: reorder to match
     ash,hush: fix ulimit to be more bash-compat, closes 11791
     ash,hush: show 'c' in $- if run in "sh -c CMD"
     ash,hush: ulimit: add -i RLIMIT_SIGPENDING, -q RLIMIT_MSGQUEUE
     ash: add "wait -n" bashism
     ash: allocate line editing structure only if needed
     hush: add "wait -n" bashism
     hush: allocate line edit buffer only for interactive shell
     hush: fix "export PS1=xyz" and "local PS1=xyz" messing up prompt
     hush: fix "wait -n" to wait for a _job_, not a _process_
     hush: fix quoted "${notexist-}" expansion to not disappear
     hush: handle LINENO the same way as RANDOM: variable is "ephemeral"
     hush: implement $-, set default PATH if it is not set on startup
     hush: remove code to track PS1/2 values dynamically - it's too much work
     hush: remove test for "echo ${-}" errorring out - now it works
     hush: set default PS1/2 only if we are interactive
     hush: show 's' in $-
     adduser: fix a bug of getpwnam() overwriting shell name, closes 8586
     awk: fix testsuite
     bc: disallow invalid syntax like "{ print 1 print 2 }"
     bc: fix "...; return}" to work, disallow "return ()"
     bc: implement pass-by-reference code from upstream
     bc: in xc_read_line(), check ^C on NUL input bytes too
     bc: make error line number also size_t, like everything else
     bc: remove "empty expression" check/message, parsing fails in these cases anyway
     bc: remove extra div/0 test, remove test for string function parameter
     bc: shorten "limits" output
     bc: speed up string printing, fix print ""
     bc: support ibase up to 36 (GNU compat)
     bc: support void functions (GNU compat)
     bc: upstream fixes
     dc: fix returning of string
     dc: fix '?'
     dc: make 4 % 0 emit error messgaes and set result to 0
     brctl: convert all commands to work via /sys
     brctl: simplify str_to_jiffies()
     bunzip2: the correct condition is "n < groupCount", not "n <= groupCount". Closes 11896
     chrt: do not segfault if policy number is unknown
     chrt: fix for SCHED_RESET_ON_FORK bit
     dd: fix handling of short result of full_write(), closes 11711
     expand,unexpand: drop broken test, add FIXME comment
     expand: add commented-out code to handle NULs
     find: handle leading -- argument
     fsync,sync: merge into one source module
     httpd: add js to built in MIME types list
     httpd: add missing {}
     httpd: check denied IPs even before reading 1st query line
     httpd: do disable header reading timeout even if proxying
     httpd: do not decode URL and headers if proxying - send all verbatim
     httpd: do not percent-decode URI if proxying
     httpd: do not set alarm() timeout if we read cached header
     httpd: extract query string only after proxying check
     httpd: fix handling of EOF in get_line()
     httpd: fix proxy headers passing - full_write() instead of write()
     httpd: if remote IP is denied, send FORBIDDEN reply earlier
     httpd: make rmt_ip variable local
     httpd: put all headers into environment as HTTP_UPPERCASED_HEADER=val
     httpd: require "HTTP/xyz" at the end of request line
     httpd: use full size of iobuf[] when piping CGI data
     ifupdown: close memory leak
     ip link: fix mismatched enums in vlan_parse_opt(), closes 11631
     ip: use rtnl_send_check() on flush commands, closes 6962
     login: close PAM session on errors as well, not only on success
     login: remove extra IF(), no code changes
     losetup: implement -c
     lpd: avoid SEGVing on immediate EOF from peer
     ls: fix SEGV when --color is used and ENABLE_LS_COLOR=n
     man: add "/usr/share/man" as another default MANPATH, fix col override
     mount,losetup: use /dev/loop-control is it exists
     nslookup: return exitcode 1 on resolution errors
     ntpd: do not create pid file if not backgrounded
     ntpd: increase SLEW_THRESHOLD from 0.125 to 0.5
     passwd: do not set 0 as date of last password change, closes 11951
     pmap: make 32-bit version work better on 64-bit kernels
     ps: ensure fields are separated by at least one space, closes 11826
     sed: fix /regex/,+N match triggering only once, closes 11871
     sleep: support "inf"
     start-stop-daemon: create pidfile before parent exits, closes 8596
     start-stop-daemon: do try to close fds > 2
     start-stop-daemon: fix "both -x and -a" case: -a does override argv[0]
     sysctl: allow setting empty values
     sysctl: avoid stat() on every item if in -w mode
     sysctl: do slash/dot conversions only on name, not value part
     sysctl: on EIO ("sysctl net.ipv6.conf.all.stable_secret") set nonzero exitcode
     telnet: speed up processing of network input
     telnetd: better AYT handling
     telnetd: fix bad interaction with vhangup() from login
     tftp: optional tftp-hpa compat
     tls: add comment about dl.fedoraproject.org needing secp256r1 ECC curve
     tls: pstm code shrink
     ts: new applet
     udhcp: downgrade "got raw socket fd" message to log3, make log2 default max
     udhcp: get rid of last global data
     udhcp: get rid of static data signal_pipe
     udhcp: rename client_config to client_data, server_config to server_data
     udhcpc6: add a few comments, no code changes.
     udhcpc6: make it enabled in defconfig
     udhcpc: when decoding DHCP_SUBNET, ensure it is 4 bytes long
     udhcpd: code shrink - do not fetch requested IP twice
     udhcpd: fix printing of static leases
     udhcpd: support per-client hostnames in static leases
     vi: code shrink, proper printf formatting for strlen()
     vi: fix ^Z not always working as intended
     vi: install SIGINT handler _after_ restart setjmp is initialized
     vi: rearrange functions, no logic changes
     vi: rename save_argc -> cmdline_filecnt
     vi: restore capability to remember insertion cmds for "."
     vi: revert change in how "end of file list" is detected - fixes 'q' in bare "vi"
     vi: use vsnprintf to format status line
     watch: support fractional -n SEC
     wget: detect when the length of received file is less than advertised
     wget: remove empty if/endif preprocessor directive pair
     xargs: mention -E STR in --help
    
    Einar Jón:
     passwd: initialize pointers correctly
    
    Jack O'Sullivan:
     losetup: Add partition scanning option
    
    James Byrne:
     Optionally re-introduce bb_info_msg()
    
    Jan Klötzke (3):
     mdev: move action processing into separate functions
     mdev: use option parser helper
     mdev: add support to run as daemon
    
    John L. Hammond:
     ln: correct 'ln -T' usage message
    
    Kaarle Ritvanen:
     ip: print dadfailed flag
    
    Khem Raj:
     networking: cc is not a register
    
    Mark Marshall:
     capability: fix string comparison in cap_name_to_number
    
    Martijn Dekker:
     ls: make -i compatible with coreutils: don't follow symlink by default
    
    Martin Lewis (5):
     wget: add -o flag
     wget: notify on download begin and end
     wget: don't notify on download begin and end if quiet
     telnetd: Added support for AYT IAC command.
     udhcpc6: Fixed aliasing compilation error
    
    Nicolas Hüppelshäuser:
     scripts/echo.c: resolve implicit declaration of function 'dup2'
    
    Nikolaus Voss (2):
     i2ctransfer: new applet
     i2c_tools.c: i2ctransfer
    
    Rolf Eike Beer:
     examples/udhcp/simple.script: fix resolv.conf update if it is a dangling symlink
    
    Ron Yorston (18):
     libbb: mark scripted_main() as externally visible
     ash: eval: avoid leaking memory associated with redirections. Closes 7748
     ash: distinguish 'wait -n' from other bashisms
     ash: an unset dynamic variable should not be dynamic
     ash: add bash-compatible EPOCH variables
     ash: prevent error in backquotes in PS1 from exiting shell
     ash: catch error in arithmetic expansion in PS1
     hush: add bash-compatible EPOCH variables
     du: don't count duplicate arguments. Closes 5288
     man: don't skip default path which appears in config file
     stat: reduce storage for human-readable filesystem names
     vi: fix faulty undo after autoinsert
     vi: fix replacement of single character with CR
     vi: further fixes to undo after autoindent
     vi: allow manual screen update if SIGWINCH isn't supported
     vi: avoid build failure in non-default case
     vi: fix changes to word at end of line. Closes 11796
     vi: enable 'dG' command. Closes 11801
    
    Rostislav Skudnov (2):
     chcon: Fix typo in ACTION_RECURSE
     dd: add 'oflag=append'
    
    Stefan Sørensen:
     ip: Fix ip -o link
    
    Thomas De Schampheleire:
     top: provide cmdline argument '-H' to enable thread scanning by default
    
    Thomas Frauendorfer:
     Fix off by one error in FAT16 <=> FAT32 detection
    
    Vicente Jimenez Aguilar:
     httpd: add svg to built in MIME types list
    
  • 14 February 2019 -- BusyBox 1.30.1 (stable)

    BusyBox 1.30.1. (git)

    Bug fix release. 1.30.1 has fixes for bc/dc, sed (backslash parsing for 'w' command), ip (vlan fixes), grep (fixes for -x -v), ls (-i compat).

  • 31 December 2018 -- BusyBox 1.30.0 (unstable)

    BusyBox 1.30.0. (git, patches, how to add a patch)

    Sizes of busybox-1.29.3 and busybox-1.30.0 (with equivalent config, static uclibc build):

     text	 data	 bss	 dec	 hex	filename
     941070	 477	 7296	 948843	 e7a6b	busybox-1.29.3
     948463	 477	 7296	 956236	 e974c	busybox-1.30.0

    Changes since previous release:

    Andre Goddard Rosa:
     smemcap: keep outputting by ignoring transient processes
    
    Baruch Siach:
     install.sh: don't clobber dangling symlinks
    
    Bernhard Reutner-Fischer:
     brctl: use a single buffer for brname and ifname
     printf: fix printing +-prefixed numbers
    
    Brandon Maier:
     ifupdown: support "source-directory" stanza
    
    Brandon P. Enochs:
     ntpd: add support for MD5/SHA1 message authentication
    
    Chen Qi:
     testsuite: check CONFIG_DESKTOP before using 'od -t'
    
    Chen Yu:
     remove_file: don't call rmdir if remove_file return failure
    
    Christoph Schulz:
     ash: reset tokpushback before prompting while parsing heredoc
    
    Denys Vlasenko:
     libbb: @ in "\x3@" is not a valid hex digit
     libbb: do not misinterpret 0x10-0x19 chars in "\xNNN" too
     libbb: fix potential NULL pointer use
     libbb: fix use-after-free in copy_file
     libbb: in xmalloc_fgets(), use size_t for bb_get_chunk_from_file()
     tls: add support for ECDHE-ECDSA-AES-128-CBC-SHA and x25519 curve
     tls: add support for TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 cipher
     tls: add support for TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA256 cipher
     tls: add support for 8 more cipher ids - all tested to work
     tls: in AES-CBC code, do not set key for every record - do it once
     tls: introduce FEATURE_TLS_SHA1 to make SHA1 code optional
     tls: simplify hmac_begin(), speed up prf_hmac_sha256()
     extend fractional duration support to "top -d N.N" and "timeout"
     Revert "libbb: remove unnecessary variable in xmalloc_fgets"
     ash: allow shell scripts to be embedded in the binary
     ash: eval: Restore input files in evalcommand
     ash: eval: Variable assignments on functions are no longer persistent
     ash: exec: Return 126 on most errors in shellexec
     ash: expand: Do not quote backslashes in unquoted parameter expansion
     ash: expand: Fix ghost fields with unquoted $@/$*
     ash: parser: Fix parsing of ${}
     ash: var: Set IFS to fixed value at start time
     ash,hush: fold shell_builtin_read() way-too-many params into a struct param
     ash,hush: properly handle ${v//pattern/repl} if pattern starts with /
     hush: expand_vars_to_list() should not assume it starts new word
     hush: faster/smaller code to check for presense of multiple chars in string
     hush: fix another case where empty "for" wasn't setting exitcode to 0
     hush: fix/explain corner cases of redirection colliding with script fd
     hush: fix handling of heredocs not enclosed in groups where they are "declared"
     hush: fix handling of heredocs starting with empty lines
     hush: fix handling of '' in ${var:+ARG}
     hush: fix heredoc handling in the "cmd <<EOF ;<newline>" case
     hush: fix nested redirects colliding with script fds
     hush: fix "set -x" output prefix overlapping for v="..`cmd`.." case
     hush: fix word splitting in ${v:+ARG} - dollar_altvalue1 test
     hush: fix 'x=; echo ${x:-"$@"}' producing 'BUG in varexp2' message
     hush: handle backslash-newline in heredoc terminators
     hush: improve set -x: make "+++" indent level increase in `cmd` and eval.
     hush: improve ${var#...}, ${var:+...} and ${var/.../...} - handle quoting
     hush: in some cases, expand_on_ifs() relied of uninitialized memory
     hush: make "set -x" output closer to bash
     hush: make "set -x" output non-redirectable when fd#2 redirected
     hush: never glob result of dquoted "${v:+/bin/c*}"
     hush: set IFS to default on startup
     hush: speed up ${var:+ARG} for literal ARGs
     awk: abort if NF set to negative value
     cat,nl: fix handling of open errors
     cpio: if longopts are enabled, accept --null (synonym for -0)
     cp: optional --reflink support
     date: do not allow "month #20" and such, closes 11356
     fdisk: sync up with some util-linux 2.31 behavior
     fdisk: use strtoul[l] instead of atoi, closes 11176
     find: implement -executable and -quit
     free: ensure there is a least one space between numbers
     grep: accept and ignore --color[=anything]
     gzip: unbreak FEATURE_GZIP_LEVELS, closes 11171
     hexdump: fix short file of zero bytes treated as dup
     hexedit: fixes for redraw and down movement causing SEGV on attempt to access
     init: hopefully fix "rebooting" in containers
     nbd-client: support newstyle protocol, -b, -d, -p, -N
     nslookup: add support for search domains, closes 11161
     ntpd: default to FEATURE_NTP_AUTH=y
     ntpd: do not SEGV on "-p keyno:192.168.1.1", show --help instead
     ntpd: increase minimum G.FREQHOLD_cnt from 8 to 12
     ntpd: more verbose message for "root distance too high" case
     ntpd: show real, unclamped delays on low-latency networks
     ping: implement -i SEC
     ping: use setitimer() instead of ualarm()
     printf: fix printf "%u\n" +18446744073709551614
     sed: fix double-free in FEATURE_CLEAN_UP code
     sendmail: use on-stack buffer for AUTH PLAIN
     smemcap: keep outputting by ignoring transient processes, take two
     sort: add -V "sort version"
     svlogd: fix pattern matching when using timestamps
     tar: fix too eager autodetection, closes 11531
     tar: handle the case when opened created tarball happens to have fd#0
     tar: skip 'V' headers (GNU volume label), closes 11526
     timeout: fix arguments to match coreutils
     udhcpc: check that 4-byte options are indeed 4-byte, closes 11506
     udhcpc: do in fact not allow hostname components which start with dash
     udhcpc: ensure at least one unicast renew attempt
     udhcpc: give SIGUSR1-induced renew one chance of unicast renew
     unlzma: fix too-eager corruption check
     unzip: use printable_string() for printing filenames
     uptime: add -s support
     vi: fix FEATURE_VI_REGEX_SEARCH to respect LIMITED (one-line) search
     wget: fix fetching of https URLs without http proxy
     wget: print the final newline only for non-tty output
     wget: print "TLS certificate validation not implemented" only once on redirects
     whois: fix a possible out-of-bounds stack access
     xargs: fix exit code if command exits nonzero, closes 11381
    
    Gavin Howard:
     bc: new applet
     dc: a much fuller version which uses bc codebase
    
    Guillermo Rodriguez:
     free: add 'available' memory if provided by the kernel
    
    Jeremy Kerr:
     udhcp: add option 211, "reboot time"
    
    Jiří Prchal:
     examples/udhcp/simple.script: add possibility to use modern "ip"
    
    Jon Kolb:
     Add chroot support to chpasswd
    
    Lauri Kasanen:
     ls: When -h is passed, the total should also be in human units
    
    Martin Kaiser:
     mdev.txt: explain the meaning of a leading "-"
     .gitignore: add ctags output files
    
    Peter Korsgaard:
     sysklogd: add timestamp option to ignore message timestamps
    
    Raffaello D. Di Napoli:
     sendmail: fix parsing of addresses in angle brackets
     sendmail: support AUTH PLAIN in addition to AUTH LOGIN
    
    Rasmus Villemoes:
     libbb: optionally honour libc provided SIGRTMIN/SIGRTMAX in get_signum()
     libbb/u_signal_names.c: don't check errno after bb_strtou
    
    Ron Yorston:
     Ensure build works when KBUILD_OUTPUT is set, closes 11511
     Tweaks to build process for embedded scripts
     build system: prevent duplicate applet names
     docs: add embedded-scripts.txt
     ash: recognize embedded scripts in SH_STANDALONE mode
     ash: in tryexec(), ensure we don't try to run embedded scripts as applets
     ash: ensure variables are fully initialised when unset
     ash: minor fixes
     hush: allow hush to run embedded scripts
     hush: correct description for HUSH_TICK config option
     lineedit: autocompletion for embedded scripts
     libarchive: add a function to unpack embedded data
     Treat custom and applet scripts as applets
     busybox: add '--show SCRIPT' option to display scripts
     vi: remove duplicated code
     vi: correctly detect when a deletion empties the buffer
    
    Rostislav Skudnov:
     dd: add 'oflag=seek_bytes'
    
    Thomas De Schampheleire:
     head: add test case for negative -n invocation
     head: convert existing tests to new-style
    
    haroon maqsood:
     nproc: implement --all --ignore=N
    
    sagivd:
     chcon: fix issues with recurse and retval for retained files
    
  • 9 September 2018 -- BusyBox 1.29.3 (stable)

    BusyBox 1.29.3. (git)

    Bug fix release. 1.29.3 has a fix in libbb for xmalloc_fgets().

  • 31 July 2018 -- BusyBox 1.29.2 (stable)

    BusyBox 1.29.2. (git)

    Bug fix release. 1.29.2 has fixes for fdisk (compat fixes, allow 2TB+ sizes), gzip (FEATURE_GZIP_LEVELS was producing badly-compressed .gz), hexedit (segfault fix).

  • 15 July 2018 -- BusyBox 1.29.1 (stable)

    BusyBox 1.29.1. (git)

    Bug fix release. 1.29.1 has fixes for wget (http->https redirect) and sendmail (angle bracket parsing).

  • 1 July 2018 -- BusyBox 1.29.0 (unstable)

    BusyBox 1.29.0. (git, patches, how to add a patch)

    Sizes of busybox-1.28.4 and busybox-1.29.0 (with equivalent config, static uclibc build):

     text	 data	 bss	 dec	 hex	filename
     968029	 483	 7008	 975520	 ee2a0	busybox-1.28.4
     969154	 475	 6972	 976601	 ee6d9	busybox-1.29.0

    Changes since previous release:

    Aaro Koskinen:
     cp: implement -T
     less: implement -F
    
    Andy Shevchenko:
     libbb: Use return value from is_prefixed_with()
    
    Codarren Velvindron:
     ntpd: deprecate IPTOS_LOWDELAY in favor of IPTOS_DSCP_AF21
    
    David Decotigny:
     udhcpc6: ignore invalid OPTION_IAADDR
     udhcpc6: carry along length of packet when parsing it
    
    Denys Vlasenko:
     libarchive: move bbunpack constants to bb_archive.h
     libbb.h: always include sys/resource.h
     libbb: commonalize a bit of little-endian CRC32 table generation code
     libbb: compile capability code only if FEATURE_SETPRIV_CAPABILITIES or RUN_INIT
     libbb: compile obscure() only if FEATURE_PASSWD_WEAK_CHECK=y
     libbb: crypt() in newer glibc requires include <crypt.h>
     libbb: introduce and use bb_getsockname()
     libbb: new function bb_die_memory_exhausted()
     libbb: new option FEATURE_ETC_SERVICES: if off, /etc/services reads often avoided
     libbb: rename bb_ask -> bb_ask_noecho, bb_ask_confirmation -> bb_ask_y_confirmation
     libbb: shrink wget/tftp progress indicator code
     libbb: switch bb_ask_noecho() to "mallocing" string return API
     libbb: use BUILD_BUG_ON in utoa_to_buf()
     networking/interface.c: get rid of global data
     i386: make stack size optimization selectable, and allow i486 insns (bswap)
     NOFORK_NOEXEC.sh: a script to find "interesting" applets
     size_single_applets.sh: fix a bug which mishandles e.g. "udhcpc6" name
     config: add size estimations for a few applets
     use gmtime_r() instead of gmtime()
     ioctl(SIOCGIFINDEX) does not require clearing of entire ifr
     fix install with hardlinks and a custom PREFIX. Closes 10801
     examples/shutdown-1.0: an example of reboot which does not signal init
     examples: update /var/service/getty for Unicode ttys
     examples/var_service: new example: dnsmasq service
     cal: make it NOEXEC
     mv: make it NOEXEC
     ash: add LINENO support
     ash: parser: fix backquote support in here-document EOF mark
     ash: a bit of NOFORK code should only be active if FEATURE_SH_STANDALONE=y
     ash: ALWAYS_INLINE grabstackblock()
     ash: expand: Fix buffer overflow in expandmeta
     ash: expand: Fix bugs with words connected to the right of $@
     ash: fix "char == CTLfoo" comparison signedness bug
     ash: fix double-quoted "\z" handling
     ash: fix var_bash5.tests - ${VAR/pattern/repl} construct
     ash,hush: fix "saved" redirected fds still visible in children
     ash,hush: handle a few more bkslash-newline cases
     ash: if "[[" bashism is not supported, do not handle it anywhere
     ash: introduce a config option to search current directory for sourced files
     ash: make it possible to disable "const global ptr" optimization
     ash: make ${v:N:M} more robust for very large M by clamping to MIN/MAX_INT
     ash: parser: Add syntax stack for recursive parsing
     ash: parser: Allow newlines within parameter substitution
     ash: parser: Fix parameter expansion inside inner double quotes
     ash: parser: Fix single-quoted patterns in here-documents
     ash: redir: Fix typo in noclobber code
     ash: use F_DUPFD_CLOEXEC and O_CLOEXEC
     ash: use pgetc_eatbnl() in more places
     hush: implement $LINENO bashism
     hush: add HUSH_BASH_SOURCE_CURDIR config option, to be on par with ash
     hush: consolidate handling of setting/unsetting of PSn, LINENO, OPTIND
     hush: do not drop backslash from eval 'echo ok\'
     hush: fix a='a\\'; echo "${a%\\\\}"
     hush: fix a backslash-removal bug in case
     hush: fix a bug where we don't properly handle f() { a=A; b=B; }; a= f
     hush: fix a case where EXIT trap may modify its code mid-flight
     hush: fix a few more corner cases with empty-expanding `cmds`
     hush: fix a signedness bug
     hush: fix build if !BASH_LINENO_VAR
     hush: fix corner cases with exec in empty expansions
     hush: fix dot builtin to not search current directory
     hush: fix dup_CLOEXEC() call without "avoid_fd" parameter
     hush: fix eval 'echo ok\'
     hush: fix for !ENABLE_HUSH_MODE_X configuration
     hush: fix for readonly vars in "ro=A ro=B cmd" case
     hush: fix func_return2.tests on NOMMU
     hush: fix handling of ^C in eval
     hush: fix handling of \<eof> in double-quoted strings
     hush: fix handling of raw ^C in scripts: "echo ^C"
     hush: fix handling of $_ (so far it's an ordinary variable, no special meaning)
     hush: fix heredoc_bkslash_newline1.tests failure
     hush: fix IFS handling in read
     hush: fix mishandling of "true | f() { echo QWE; }"
     hush: fix prompt in multi-line $(())
     hush: fix raw ^C handling in single-quoted strings
     hush: fix recent breakage from parse_stream() changes
     hush: fix "set -e; false || x=1; echo OK"
     hush: fix two corner cases in ${v/pattern/repl}. Closes 10686
     hush: fix "unset PS1/PS2", and put them into initial variable set
     hush: fix var_leaks.tests and var_preserved.tests on NOMMU
     hush: fix "$v" expansion in case patterns when v='[a]'
     hush: IFS fixes
     hush: if we did match "LINENO" or "OPTIND", stop further comparisons
     hush: implement "command" builtin
     hush: implement "hush -s"
     hush: less mind-bending set_vars_and_save_old()
     hush: make var nesting code independent of "local" support
     hush: one-word, no-globbing handling of local/export/readonly args
     hush: optimize parse_stream()
     hush: protect against self-modifying trap code
     hush: put "current word" structure into parsing context
     hush: simplify \<newline> code
     hush: simplify process_command_subs()
     hush: support "f() (cmd)" functions
     shell: add 6856 $IFS tests to testsuites
     shell: echo ${?:0} was fixed sometime ago, enable it in tests
     shell: handle $((NUM++...) like bash does. Closes 10706
     ar: hopefully fix out-of-bounds read in get_header_ar()
     arping: change a few message strings to be closer to iputils arping
     arping: fix the case when inherited signal mask masks out ALRM
     arping: move packet buffer, sigset and struct ifreq to malloced "globals"
     ar: stop using static data
     awk: do not allow $(-1)
     awk: fix 'delete array[var--]' decrementing var twice
     bgip2: fewer specifically-sized [u]int32_t's locals in sendMTFValues
     bzip2: ~1% speedup by special-casing "store 1 bit" function
     bzip2: a few more locals converted to generic types
     bzip2: code shrink, stop using global data variable
     bzip2: convert some locals to unsigned's
     bzip2: delete write-only fave[] array
     bzip2: eliminate write-only local numQSorted
     bzip2: eliminate one parameter to mainQSort3()
     bzip2: expose tuning knob for faster/smaller code
     bzip2: fix two crashes on corrupted archives
     bzip2: have two separate "store bit 0" and "store bit 1" functions
     bzip2: make locals in mainSort() saner, convert one of them from uint16 to unsigned
     bzip2: move ->origPtr out of struct EState, make a few members smaller
     bzip2: move runningOrder[] back to stack - 256 bytes is not much
     bzip2: optimize zPend variable code
     bzip2: pass sorting params through EState* pointer
     bzip2: remove redundant clearing of an alredy unset bit
     bzip2: remove redundant loop termination check in mainSort()
     bzip2: reuse zPend processing code
     bzip2: rewrite bit of code which depends on integer overflow
     bzip2: runningOrder[] values are always 0..255, make it uint8
     bzip2: small simplification in mainSimpleSort()
     bzip2: shrink makeMaps_e()
     bzip2: work around bad compiler optimization
     cat: fix cat -e and cat -v erroneously numbering 1st line
     chrt: use correct min/max priorities
     cp: fix option handling in non-longopt config
     dd: exit with 1 if last write was incomplete
     dd: fixed partial count logic
     df: 4TB+ support on 32 bits arch
     df: do "rootfs" check sooner
     dpkg: fix symlink creation, closes 10941
     fdisk: remove "Partition N does not end on cylinder boundary" message
     fsck: fix incorrect handling of child exit
     fstrim: do not check that specified file is on a block device
     ftpd: add -A option to disable all authentication, closes 10921
     ftpd: handle restarts past 2147483647 bytes. closes 10741
     ftpd: switch to mallaced "globals"
     ftpgetput: add EPSV support (PASV-like thing for IPv6)
     ftpgetput: preparations for ESPV support, no code changes
     grep: fix echo "aa" | busybox grep -F -w "a" (should not match)
     gunzip: fix from gzip-1.3.12 for gzip file with all zero length codes
     gzip: "compressed_len" is unused, stop wasting code and time calculating it
     gzip: fix debug code. Closes 10681
     gzip: flush output buffer after stored blocks, they are not 32-bit aligned
     gzip: optionally faster put_32bit()
     gzip: speed up send_bits()
     gzip: use unsigned type for bit fields and bit counts
     gzip: use wider (32-bit, not 16) bi_buf
     httpd: do not default to Content-type: application/octet-stream
     ifplugd: close signal race
     ifplugd service example: always run up/down script on startup
     inetd,mount: add comment with example of flags to build with libtirpc
     init: stop using static data
     install: fix "-D -t DIR1/DIR2/DIR3" creating only DIR1/DIR2, closes 11106
     ip: fix crash in "ip neigh show"
     ip: fix "ip -oneline a"
     less,microcom,lineedit: use common routine to set raw termios
     less: accept -R option. Closes 10816
     less: fix help text conditional for -R
     less: optional support of -R
     less: remove unnecessary message
     lzop: buffer several 32-bit writes when we start a new compressed block
     lzop: checksum reads do not need to be checksummed
     lzop: code shrink by using header_t matching on-disk layout
     lzop: don't support ancient versions < 0.94 (15 Oct 1997)
     lzop: remove method checks which are always true/false
     md5sum: use config help text similar to other "sum" tools
     mkfs_ext2,mkfs_vfat: fix warnings in STORE_LE on big-endian platforms
     mknod: better --help, much clearer code
     nandwrite: cope with old headers which have no MTD_FILE_MODE_RAW
     nc: fix the !NC_SERVER configuration
     nslookup: add openwrt / lede version
     ntpd: suppress in-kernel frequency correction in first 8+n adjtimex calls
     od: move address_fmt[] from data to globals. 8 less bytes in data section
     patch: implement --dry-run
     ping: don't call monotonic_us twice per sending the ping
     ping: implement -A "adaptive ping"
     poweroff: add a config option for people needing VERY early poweroff
     realpath,readlink -f: coreutils compat, closes 11021
     renice: add comment about getpwnam/NOFORK interaction
     renice: use BUILD_BUG_ON()
     setlogcons: open /dev/ttyN for "setlogcons N", not /dev/tty1
     sort: FEATURE_SORT_OPTIMIZE_MEMORY
     sort: fix potentially buggy use of OPT_STR
     sort: fix -s. Closes 10671
     sort: in -s handling, return 1/-1, not 1/0 compare result
     start_stop_daemon: fix normally disabled OLDER_VERSION_OF_X code
     stat: fix a typo: s/romfs/ramfs/, closes 10876
     svok: new applet (daemontools compat)
     tar: accomodate non-terminated tar.chksum fields as seen from github.com
     tar: add -k and -o to --help
     tar: add -o and -k to short --help too
     tar,unzip: postpone creation of symlinks with "suspicious" targets
     tc: enable this applet
     tcpsvd: fix fallout from opt_complementary removal
     tcpudp: shrink per-host rate-limiting code
     telnet: move winsize detection closer to I/O loop, delete non-functioning debug code
     tls: fix hash calculations if client cert is requested and sent
     tls: remove redundant floor prevention
     top: do unsigned rather than signed division in do_stats()
     top: fix "warning: unused variable new_mask"
     top: handle much larger VSZ values
     top: much faster cursor key navigation by avoiding process rescan
     udhcpc6: additional fix for ppp interface type
     udhcpc6: add support of prefix delegation
     udhcpc6: fix for ppp interface type
     udhcpc6: fix ipv6prefix[_lease] envvar value in script invocation
     udhcpc6: fix lease time staying very small because -d was not specified
     udhcpc6: set -x options in request
     udhcpc[6]: remove overzealous timeout clamping code
     udhcpc: remove code which requires server ID to be on local network
     udhcpd: clamp down huge auto_times to ~2M seconds, better EINTR poll handling
     udhcpd: fix "not dying on SIGTERM"
     udhcpd: use ptr_to_globals for its lone global data (g_leases)
     udhcp: do not setlinebuf(stdout), we don't print to stdout anymore
     udhcp: support string user options, closes 10946
     umount: fix "umount -t FSTYPE MNTPOINT" acting as if -a is specified
     unlzma: do emit the error message on bad input, when we exit with 1
     unlzma: fix three SEGV cases
     unlzop: fix --help: it has -U instead of -k
     unzip: do not set directory mode to 0777
     wget,ftpd: shorten and reuse strings
     wget: add EPSV support
     wget: check chunk length for overflowing off_t
     wget: emit a message that certificate verification is not implemented
     wget: handle URLs with @ or hash differently
     wget: support for ftps://
     wget: more thorough sanitization of other side's data
     which: fix TODO with NOFORK+malloc_failure misbehaving
     xargs: use bb_ask_y_confirmation_FILE() instead of homegrown copy
    
    Eli Schwartz:
     Update release script to generate detached signatures and checksum files
    
    Euan Harris:
     nsenter: Rename --network option to --net
     nsenter: fix parsing of -t, -S and -G options
    
    Harald van Dijk:
     tar: fix interaction of delayed symlink and hardlink creation
    
    Ingo van Lil:
     ash: fail if 'shift' operand is out of range
    
    Ivan Abrea:
     tls: fix to handle X.509 v1 certificates correctly
    
    Jan Luebbe:
     ip link: support "add TYPE vrf", improve --help
     iplink: implement support for selecting a master interface
    
    Kaarle Ritvanen:
     ifupdown: do not fail if interface disappears during ifdown
    
    Kartik Agaram:
     restore documentation on the build config language
    
    Mark Marshall:
     netstat: produce numeric-ip output for non-resolved names
    
    Martijn Dekker:
     ash: 'nolog' and 'debug' options cause "$-" to wreak havoc
    
    Michael Olbrich:
     build system: fix parallel building issue
    
    Natanael Copa:
     cpio: extract "unsafe" symlinks the same way tar/unzip does
    
    Nicholas Clark:
     dd: add 'fullblock' iflag
    
    Peter Korsgaard:
     fbsplash: support configurable image position
    
    Peter Lloyd:
     wget: fix fetching of https URLs with http proxy
    
    Povilas Kanapickas:
     chrt: add support for SCHED_BATCH
     chrt: add support for SCHED_IDLE
    
    Quentin Rameau:
     libbb: remove unnecessary variable in xmalloc_fgets
     sed: prevent overflow of length from bb_get_chunk_from_file
    
    Ron Yorston:
     testsuite: update busybox and bzcat tests
     lineedit: allow window size tracking to be disabled
     ssl_client: fix option parsing
     testsuite: allow tests to work in paths containing spaces
    
    Samuel Mendoza-Jonas:
     udhcp: fix use of trim() in udhcp_str2optset()
     udhcpc6: add DHCPv6 env helper
     udhcpc6: add DHCPv6 boot options
     udhcpc6: add PXELINUX options
    
    Sean MacLennan:
     make busybox more portable
    
    Shawn Landden:
     umount: ignore -c
    
    Stefan Agner:
     ifplugd: if SIOCSIFFLAGS fails with EADDRNOTAVAIL, don't die
    
    Sven-Göran Bergh:
     volume_id: add LittleFS detection
    
    William Pitcock:
     ash: add support for command_not_found_handle hook function (bashism)
    
    Yann E. MORIN:
     applets/install: respect noclobber for script wrappers too
     applets/install: accept more than one install option
     build system: add rule to install without cloberring existing utilities
     applets/install: don't try to install nothing
    
  • 22 May 2018 -- BusyBox 1.28.4 (stable)

    BusyBox 1.28.4. (git, patches, how to add a patch)

    Bug fix release. 1.28.4 has fixes for nsenter option parsing and dpkg symlink extraction.

  • 3 April 2018 -- BusyBox 1.28.3 (stable)

    BusyBox 1.28.3. (git, patches, how to add a patch)

    Bug fix release. 1.28.3 has fixes for ash and hush (do not leave stray open file destriptors in children), cpio (fix for symlink extraction), grep ("grep -Fw a" was matching "aa").

  • 26 March 2018 -- BusyBox 1.28.2 (stable)

    BusyBox 1.28.2. (git, patches, how to add a patch)

    Bug fix release. 1.28.2 has fixes for tcpsvd (fixed fallout from opt_complementary removal), udhcpd (do not ignore SIGTERM), tar and unzip (reverted to previous, more permissive symlink handling), ssl_client (fixed option parsing),

  • 15 February 2018 -- BusyBox 1.28.1 (stable)

    BusyBox 1.28.1. (git, patches, how to add a patch)

    Bug fix release. 1.28.1 has fixes for cp (fix option handling in non-longopt config, implement -T), ip (crash in "ip neigh show"), tls (fix hash calculations if client cert is requested), tar (accomodate non-terminated tar.chksum fields as seen from github.com), udhcpc6 (fix ipv6prefix[_lease] environment value in script invocation).

  • 2 January 2018 -- BusyBox 1.28.0 (unstable)

    BusyBox 1.28.0. (git, patches, how to add a patch)

    Sizes of busybox-1.27.0 and busybox-1.28.0 (with equivalent config, static uclibc build):

     text	 data	 bss	 dec	 hex	filename
     959831	 491	 7536	 967858	 ec4b2	busybox-1.27.0
     961456	 487	 7512	 969455	 ecaef	busybox-1.28.0

    Changes since previous release:

    Avi Fishman:
     i2cset: fix 'i' & 's' modes (3 extra bytes were sent)
    
    Avi Halachmi:
     lineedit: improve multiline PS1 - redraw using last PS1 line. Closes 10381
    
    Bartosz Golaszewski:
     i2c-tools: remove unneeded include
     i2c-tools: don't include linux/i2c-dev.h
    
    Denys Vlasenko:
     stop using atexit in non-debug build: saves ~260 bytes in bss with musl
     use %m printf specifier where appropriate
     standalone shell / prefer_applets: fix "exe" in comm fields
     change BB_EXTRA_VERSION: now it needs to contain any spaces/parenthesis
     regularize format of source file headers, no code changes
     move get_unaligned_le32() macros to platform.h
     sparc: needs -fPIC
     config: deindent all help texts
     config: FEDORA_COMPAT option (so far only tweaks uname)
     config: merge "Busybox Settings" and "Busybox Library Tuning" into one menu
     config: more tweaking of help texts
     config: reorder items in "Busybox Settings", improve help
     config: trim/improve item names and help texts
     build system: FEATURE_LIBBUSYBOX_STATIC - try to pull libc/libm into libbusybox
     build system: fix "allnoconfig" to clear all options. Closes 10296
     build system: remove unused CONFIG_FEATURE_HAVE_RPC
     libarchive: do not extract unsafe symlinks unless $EXTRACT_UNSAFE_SYMLINKS=1
     libarchive: FEATURE_LZMA_FAST should be visible if FEATURE_SEAMLESS_LZMA
     libbb: avoid malloc/free in bb_unsetenv()
     libbb: do not die if setgid/setuid(real_id) on startup fails
     libbb/dump: allow skipping over stdin too
     libbb/dump: fix a few broken commits and shrink code
     libbb: hide getnetbyaddr() inside "#if ENABLE_FEATURE_ETC_NETWORKS" block
     libbb: make trim() return pointer to terminating NUL
     libbb: move capability names code to libbb
     libbb: new function bb_getgroups() - allocating wrapper around getgroups()
     libbb: safe_write should not return EINTR
     libbb: use _exit, not exit, in bb_daemonize_or_rexec()
     libbb: rearrange NOFORK/NOEXEC code, logic is not changed
     libbb: simplify NOFORK/NOEXEC defines, move set_task_comm to libbb
     lineedit: do not tab-complete any strings which have control characters
     lineedit: get terminal width before printing prompt
     lineedit: make read_line_input() not take timeout param
     main: fix the case where user has "halt" as login shell. Closes 9986
     networking/interface.c: remove superfluous "& 0377"
     noexec: consolidate code
     noexec: do GETOPT_RESET() before entering APPLET_main()
     noexec: set comm field for noexecs
     nofork: fix a bug uncovered by hush testsuite (forgotten fflush)
     adjtimex,blkdiscard,free: make it NOFORK
     clear,nproc,tty,uname,arch,unlink,which: make them NOFORK
     pwdx,pivot_root,kill[all5],ttysize,realpath,readlink: make them NOFORK
     add/remove-shell,add/deluser,add/delgroup: make them NOEXEC
     make 17 state-changing execing applets (ex: "nice PROG ARGS") NOEXEC
     blkid: make it NOEXEC, make FEATURE_BLKID_TYPE=y default
     blockdev,fsfreeze,fstrim,mountpoint: make them NOEXEC
     brctl,chattr,lsattr,tune2fs: make them NOEXEC
     chvt,deallocvt,dumpkmap,fgconsole,loadkmap: make them NOEXEC
     cryptpw,mkpasswd: make them NOEXEC
     df,dnsdomainname,hostname,dumpleases,expr,fatattr: make them NOEXEC
     freeramdisk,free,stat,getopt,ifenslave,ipcalc,rdev,ipcrm,ipcs: make them NOEXEC
     ip,ip*: make them NOEXEC
     kbd_more: make it NOEXEC, remove redundant opt clearing
     loadfont,setfont,losetup,lspci,lsscsi,lsusb: make them NOEXEC
     makedevs,mesg,mktemp,nameif: make ithem NOEXEC
     modutils: make them NOEXEC except depmod
     nbd-client: make it NOEXEC, stop using argc
     date,resize,partprobe,ps,pstree,raidautorun,runlevel,setconsole: make them NOEXEC
     setkeycodes: make it NOEXEC, better --help text
     setlogcons: make it NOEXEC, better --help text
     setserial,stty,sv,svc,sysctl,tunctl,umount: make them NOEXEC
     users,w,who,uptime,renice,vconfig: make them NOEXEC
     adjtimex: zero-fill whole structure, to be on the safe side
     arch: new applet (same as uname -m). ~30 bytes
     ash: align --login code with dash
     ash: alloc slightly smaller buffer in cvtnum(); faster unsetvar()
     ash: allow "trap NUM [SIG]..." syntax
     ash: implement BASH_XTRACEFD bashism
     ash: do not set a signal to SIG_DFL if it already is
     ash: fix display of ">&-" redirect in job strings
     ash: fix matching of unicode greek letter rho (cf 81) and similar cases
     ash: note which versions of glibc exhibit "rho bug"
     ash: fix nofork bug where environment is not properly passed to a command
     ash: fix redir_leak.tests if STANDALONE=y
     ash: fix "unset OPTIND" throwing an error message
     ash: force inlining of a trivial function
     ash: if !ENABLE_ASH_EXPAND_PRMT, disable PSSYNTAX code
     ash: improve set -x to quote strings as necessary
     ash: INT_OFF/INT_ON around run_nofork_applet()
     ash: less hackish implementation of evaltreenr()
     ash: make tryexec(cmd) parameter const char
     ash: more general format ${var:EXPR:EXPR}
     ash: more s/error/perror/ for better error reporting
     ash: one "current line = 1" might be missing, fix that
     ash: [PARSER] Add FAKEEOFMARK for expandstr
     ash: [PARSER] Catch variable length expansions on non-existant specials
     ash: [PARSER] Removed noexpand/length check on eofmark
     ash: [REDIR] Fix popredir on abnormal exit from built-in
     ash: [REDIR] Replace GPL noclobberopen code with the FreeBSD version
     ash: remove REDIR_SAVEFD2
     ash: retain envvars with bad names in initial environment. Closes 10231
     ash: revert previous implementation of "A=1 A=2 B=$A cmd" code
     ash: [SHELL] Optimize dash -c "command" to avoid a fork
     ash: significant overhaul of redirect saving logic
     ash: stage backported LINENO support as a separate patch
     ash: survive failures in $PS1 expansion. Closes 10371
     ash: sync up with dash with respect to redirection escaping
     ash: unset OPTARG if getopts exits 1, support OPTERR=0 behavior
     ash: use mempcpy() where appropriate
     ash: [VAR] Add localvars nesting
     ash: [VAR] Do not poplocalvars prematurely on regular utilities
     ash: [VAR] Fix loss of variables when hash collides
     ash: [VAR] Fix poplocalvar leak
     ash: [VAR] Fix poplocalvar on abnormal exit from function
     ash: [VAR] Move unsetvar functionality into setvareq
     ash: [VAR] Replace cmdenviron with localvars
     ash,hush: ">&10" redirects to script/tty fds should not work
     hush: add a test which fails due to uclibc bug in getopt()
     hush: add support for "set -e"
     hush: add TODO for "set -e"
     hush: convert exp/ro/local parameters to bitfields in one flag param
     hush: correctly handle quoting in "case" even if !BASH_PATTERN_SUBST
     hush: do not accept "if() { echo; }" function def
     hush: do not assign to readonly VAR in "VAR=VAL CMD" syntax too
     hush: explain why wait5.tests is failing
     hush: fix a case when redirect to a closed fd #1 is not restoring (closing) it
     hush: fix and_or_and_backgrounding.tests failure
     hush: fix "cmd1 && cmd2 &" handling on NOMMU
     hush: fix comment parsing in `cmd`, closes 10421
     hush: fix ${##}, ${#?}, ${#!} handling
     hush: fix handling of empty heredoc EOF marker
     hush: fix quoted_punct.tests failure
     hush: fix readonly2.tests failure
     hush: fix redirect code (was using uninitialized variables)
     hush: fix "(sleep 1; exit 3) & sleep 2; echo $?; wait $!; echo $?"
     hush: fix "true | func_with_return" not allowing return
     hush: fix two redirection testcase failures
     hush: forgot to emit error on (failing) second "readonly VAR=VAL"
     hush: functions have priority over builtins (!)
     hush: implement "getopts" builtin
     hush: implement "readonly" builtin
     hush: implement "times" builtin
     hush: implement -d DELIM option for "read"
     hush: make SIGINT handling visually less confusing
     hush: make "wait %1" work even if the job is dead
     hush: massage redirect code to be slightly more like ash
     hush: print error messages on "shift -1"
     hush: remove redundant "G_flag_return_in_progress = -1"
     hush: remove superfluous comparison
     hush: rename a few functions
     hush: simplify insert_job_into_table() a bit
     hush: support ${VAR:N:-M}
     hush: treat ${#?} as "length of $?"
     hush: use mempcpy where useful
     hush: if STANDALONE, close interactive fd for NOEXECed children
     msh: delete this applet
     shell: improve comments on signal handling
     shell: add OPTARG poisoning to getopt_optarg.tests
     shell: and_or_and_backgrounding.tests is no longer "UNFIXED BUG"
     shell: make standalone shell tab-complete "busybox"
     shell: more efficient check for EOL in read
     shell: optional support for read -t N.NNN, closes 10101
     awk: stop on first non-option, closes 9861
     basename: do not use argc
     beep: disallow FEATURE_BEEP_FREQ = 0 in configuration
     blkdiscard: provide our own BLK[SEC]DISCARD if necessary
     bunzip2: fix runCnt overflow from bug 10431
     bzcat: compile bunzip2_main() if BZCAT
     bzcat,zcat: simplify code if gunzip/bunzip2 is not selected
     cat: fix "cat -An" ignoring -n; make numbering go througn all files
     chat: do not die when HANGUP param is missing. Closes 10016
     chattr: fix option parsing to accept more cryptic option combos
     chown: fix a mistake in opt_complementary change
     crond: allow $SHELL and starting user's shell override DEFAULT_SHELL. Closes 6458
     crond: do not assume setenv() does not leak
     crond: support @daily etc
     date: maybe_set_utc only once
     dd: fix status=none. Closes 10066
     ed: fix --help and reorder functions, no code changes
     ed: fix "\n" removal in command line; make "w" set "dirty = 0"
     free: no longer include common_bufsiz.h
     getopt32: factor out code to treat all args as options
     getopt32: move support for "always treat first arg as option" to users (tar/ar)
     getopt32: remove applet_long_options
     getopt32: remove opt_complementary
     hexedit: new applet
     httpd: fix handling of range requests
     httpd: skip "Status: " from CGI, including space. Closes 10291
     inetd: fix for running by non-root
     inetd,mount: do not die if uclibc without RPC is detected
     init: reduce the window when init can lose reboot/poweroff signals
     ipcalc: trim help text
     ipcs: tweak output orer to match util-linux 2.28
     kbd_mode: show "off" mode too
     kbd_mode: try harder to find console device if -C TTY is not given
     klibc-utils: add ipconfig.c work-in-progress
     klibc-utils: new applets: resume, nuke, minips
     makedevs: allow much longer filenames
     microcom: require exactly one non-option
     netcat: net applet (alias to nc)
     ntpd: do run the script at least once in 11 minutes
     ntpd: improve treatment of DNS resolution failures
     ntpd: mention in help text that -d can be repeated
     ntpd: perform DNS resolution out of send/receive loop. Closes 10466
     ntpd: skip over setting next DNS resolution attempt if it is not needed
     pgrep: fix "pgrep -v -P1"; also allow matching of comm. Closes 10086
     ping: better config help text for FEATURE_FANCY_PING
     ping: fix help text to show what parameter -p takes
     pmap: tweak help text, show usage if no params are given
     ps: implement -o sid
     ps: improve TIME column for large times: showing "14453:50" is not good
     ps: stop using AT_CLKTCK, there are more standard ways
     readprofile: do not close/free just before exiting
     rpm2cpio: handle LZMA compressed rpms. closes 10166
     rpm2cpio: use rpm_gettags
     rpm: prepare rpm_gettags for reuse in rpm2cpio
     rpm,rpm2cpio: do not compile not-configured parts of rpm.c
     rpm,rpm2cpio: INIT_G() was missing (it is a nop here so far)
     rpm,rpm2cpio: put both sources into one file, no code changes
     run-init: new applet
     script: -f means "flush", not "fsync"
     script: make -t[FILE] compatible with util-linux
     script: make -t independent of scriptreplay
     sed: in '/regexp/cmd1;//cmd2', cmd2 should use the same regexp as cmd1
     sendmail allow "=" symbol in recipient, closes 10241
     sendmail: fix segfault if "To: email1,email2" is used
     setconsole: much better help text
     setconsole: since SUSE version has no -r, nuke our --reset longopt
     setfattr: new applet
     setpriv: accept any case in capability names
     setpriv: code shrink, and grouping capability code together
     setpriv: dump user and group info
     setpriv: factor out capability name printing
     setpriv: placate "declaration of 'index' shadows a global declaration" warning
     setpriv: remove dependency on libcap headers
     shuf: fix random line selection. Closes 9971
     stty: add cmspar, flusho, extproc attributes
     stty: fix bb_common_bufsiz1 use in NOEXEC
     svc: fix a case where with more than one option, getopt() state is not reset
     svc: remove superfluout INIT_G()
     swapon: do not use FEATURE_MOUNT_LABEL, have your own FEATURE_SWAPONOFF_LABEL
     sysctl: fix file parsing, do not require -w for VAR=VAL
     sysctl: recognize ";comment" and "<whitespace>#comment" lines
     syslogd,logger: code shrink for musl
     tar: postpone creation of symlinks with "suspicious" targets. Closes 8411
     telnet: "-a" + "-l USER" should respect USER
     test: fix 4-argument case
     time: fix build for toolchains without O_CLOEXEC
     tls: fix build problem on non-static i386
     tls: fix pstm asm constraint problem
     tls: remove last int16 local variables in pstm code
     tls: use capped SNI len everywhere
     top: switch to malloced "globals"
     ttysize: if stdin is not tty, try stdout, then stderr
     ubi_tools: a bit smaller applet resolution code
     ubi_tools: ubiupdatevol supports "-" input and actually respects -s SIZE
     ubiupdatevol: fix bug with -sSIZE: was ignoring IMAGE_FILE
     udhcpc[6]: downgrade "adapter index N" messages to log2 level
     udhcpc[6]: fix messages referring to select() while we use poll()
     udhcpc[6]: initialize entire sockaddr_ll
     udhcpc[6]: make log2 messages for chaddr field indented like the rest
     udhcpc[6]: on log level 1, three messages about raw socket is overkill
     udhcpc: downgrade "MAC X:X:X:X:X:X" message to log2 level
     udhcpc: paranoia when using kernel UDP mode for sending renew: server ID may be bogus
     unlzma: fix SEGV, closes 10436
     unshare: -r implies -U, not -u
     unshare: -r should map root to user, not the other way around
     unxz: get_le32 macro is obviously wrong
     unzip: implement -j, closes 9126
     unzip: robustify overwrite checks
     unzip: sanitize filename length: malloc(1234mb) is not funny
     unzip: support symlinks. Closes 10031
     uuencode: allow space instead of "`" as padding char. Closes 10046
     volume_id: enable minix detection
     watchdog: do not use argc, other cleanups
     xargs: optional support for -P NUM. Closes 9511
     xxd: allow "-" as file name meaning stdin
     zcip: fix slow environment leak
    
    Eugene Rudoy (3):
     iproute/iprule: support toolchains without RTA_TABLE routing attribute
     unzip: fix content listing and filtering when -j is used
     unzip: add missing -j to trivial usage
    
    James Clarke (6):
     networking: Fall back on IPPROTO_RAW when SOL_RAW is not defined
     blkdiscard: Only build on Linux
     xfuncs: Handle missing non-POSIX termios constants
     df: Use statvfs instead of non-standard statfs
     udp_io, traceroute: Standardise IPv6 PKTINFO handling to be portable
     grep: skip grepping symlinks to directories
    
    Johannes Schindelin (7):
     ash: protect WIFSTOPPED use with #if JOBS
     copyfd: guard use of munmap() with #if (windows builds need this)
     ash: remove no-longer-used variable
     ash: implement -d DELIM option for read
     ash: report reason when a script file could not be opened
     ash: when cd fails, say why
     xargs: support -a FILE
    
    Kang-Che Sung (3):
     cat: allow compiling out -n and -b
     make_single_applets: fix ": $((fail++))" expansion error
     ps: allow ps config options if minips is enabled
    
    Markus Gothe:
     lsscsi: fix xchdir("..") from symlink in /sys/bus/scsi/devices
    
    Matt Spinler:
     watchdog: stop watchdog first on startup
    
    Natanael Copa:
     unzip: fix regression on big-endian machines
    
    Patrick Steinhardt (8):
     setpriv: do not process remaining args
     setpriv: prepare option parsing logic for additional opts
     setpriv: dump no-new-privs info
     setpriv: dump inheritable capability set
     setpriv: dump capability bounding set
     setpriv: dump ambient capabilities
     setpriv: allow modifying inheritable caps
     setpriv: allow modifying ambient capabilities
    
    Peter Korsgaard:
     dpkg: fix CONFIG_FEATURE_CLEAN_UP handling
    
    Ron Yorston (9):
     printf: fix format string sanity check
     od_bloaty: fix floating point output
     ash: support platforms that don't have '%m' printf specifier
     libbb: remove vdprintf
     ps: fix build failure if FEATURE_PS_TIME is disabled
     libarchive: fix build failure on NOMMU systems
     tar: fix handling of first argument without '-'
     kill: add '--' option to separate options from arguments
     env: -u option fails due to typo
    
    Thomas Petazzoni:
     Makefile: include per-arch Makefile before Makefile.flags
    
    Timo Teräs:
     add-remove-shell: fix crash when shell is already added
    
    Uwe Geuder:
     bootchartd: prevent premature stop by device mapper
    
    Xabier Oneca:
     chcon: show '--reference' in help text only if LONG_OPTS=y
    
  • 17 August 2017 -- BusyBox 1.27.2 (stable)

    BusyBox 1.27.2. (git, patches, how to add a patch)

    Bug fix release. 1.27.2 has fixes for svc (work correctly with more than one option specified), unzip (big-endian fix), shuf (was always moving 1st line elsewhere), tls code (asm compilation problem on x86), NOFORK ("rm -i" and "yes" could not be interrupted), a bit of support for Fedora build.

  • 18 July 2017 -- BusyBox 1.27.1 (stable)

    BusyBox 1.27.1. (git, patches, how to add a patch)

    Bug fix release. 1.27.1 has fixes for uuencode (allow space instead of "`" as padding char), dd (fixed status=none), setpriv (option parsing should not eat options in PROG ARGS), fix for "applet (for example halt) as login shell" use case, a few fixes for less typical build environments.

  • 3 July 2017 -- BusyBox 1.27.0 (unstable)

    BusyBox 1.27.0. (git, patches, how to add a patch)

    Sizes of busybox-1.26.0 and busybox-1.27.0 (with equivalent config, static uclibc build):

     text	 data	 bss	 dec	 hex	filename
     925769	 489	 7352	 933610	 e3eea	busybox-1.26.0
     927115	 489	 7352	 934956	 e442c busybox-1.27.0

    Changes since previous release:

    Andrei Gherzan:
     switch_root: don't bail out when console doesn't exist
    
    Andrey Mozzhuhin:
     ftpd: new option -a ANON_USER to allow anonymous logins
    
    André Draszik:
     iproute: support for filtering by and printing of scope
    
    Assaf Gordon:
     setpriv: new applet
    
    Ben Hutchings:
     modprobe: read modules.builtin
    
    Cristian Ionescu-Idbohrn:
     appletlib: avoid warning on unused function ingroup
     unzip: remove now-pointless lseek which returns current position
    
    Denys Vlasenko:
     fix "ifdef ENABLE_foo": should always be "#if ENABLE_foo"
     fix "loginutils/Config.in:319 error: Overlong line"
     make DPKG=y and DPKG_DEB=y by default
     make FEATURE_USERNAME_COMPLETION=y by default
     make INSMOD=y by default
     make RMMOD=y by default
     move FEATURE_AUTOWIDTH config option to two applets which use it
     move FEATURE_USE_TERMIOS config option to two applets which use it
     make_single_applets.sh: a tool to check single-applet builds
     qemu_multiarch_testing: small improvements
     archival: add option -k "keep" to gzip/bzip2/lzop, add -U "nokeep" to lzop
     libbb: consolidate the code to set termios unbuffered mode
     libbb: eliminate redundant variable in sha_crypt
     libbb: fix "error: redefinition of 'is_tty_secure'"
     libbb: make check_password() also return CHECKPASS_PW_HAS_EMPTY_PASSWORD
     libbb: match_fstype() is unreadable in the extreme, fixing it
     libbb: move isqrt from factor, use it in diff too
     libbb: shrink dump.c
     libbb: spawn_and_wait() fflushes before forking NOEXEC; child reinits logmode
     libiproute: FACT_FUNCization
     add/remove-shell: copy /etc/shells mode to new file
     ash: 16-bit nprocs field is a pain for many CPUs
     ash: add INT_OFF/ON around allocations
     ash: commented-out possible fix for 7694
     ash: error out if ASH_INTERNAL_GLOB is not selected on uClibc
     ash: fix a bug in argv restoration after sourcing a file
     ash: fix $HOME/.profile reading if !ASH_EXPAND_PRMT
     ash: fix open fds leaking in redirects. Closes 9561
     ash: fix 'trap - 65'
     ash: implement "exec -a ARGV0 CMD ARGV1..."
     ash: revert "make dot command search current directory first"
     hush: conditionalize print_escaped() on EXPORT || TRAP
     hush: correct exitcode for unterminated ')' - exitcode2.tests testcase
     hush: fix a bug in argv restoration after sourcing a file
     hush: fix 'defined but not used' warning
     hush: fix kill builtin without jobs support
     hush: global_args_malloced is used only if set builtin is enabled
     hush: kill builtin and kill %jobspec support
     hush: make echo builtin optional
     hush: make export builtin optional
     hush: make memleak builtin optional
     hush: make read and trap builtins optional
     hush: make set/unset builtins optional
     hush: make umask builtin optional
     hush: reinstate [[ builtin
     hush: remove redundand test for ENABLE_HUSH_JOB
     hush: reorder builtins (cd and pwd ought to be close, etc), no code changes
     hush: support %%, %+ and % jobspec (meaning "current job")
     ash,hush: fix SIGCHLD interrupting read builtin
     ash,hush: move "config" blocks above their use in coditional includes
     ash,hush: make hush test optional, rename ASH_BUILTIN_foo to ASH_foo
     ash,hush: make it possible to select "sh" and "bash" aliases without selecting ash or hush
     busybox: stop depending on FEATURE_AUTOWIDTH for applet list
     catv: convert this bbox-specific applet into "cat -v"
     cryptpw: support "rounds=NNNNNNN$" thing in salts
     depmod: don't build it if MODPROBE_SMALL=y
     diff: fix -N and nonexistent files. Closes 7454
     factor: new applet
     fallocate: new applet
     fsfreeze: new applet
     ftpd/ls: show directories first
     grep: FEATURE_GREP_CONTEXT should be available for "fgrep only" too
     httpd: defend against attempts to OOM us. Closes 9611
     httpd: use "Content-Length", not "-length"
     init: dont send "Sent SIGTERM to all" msg to syslog: we just TERMed it!
     init: rename FEATURE_EXTRA_QUIET to FEATURE_INIT_QUIET
     iplink: implement "set promisc on|off". Closes 4682
     ip: make ip aliases individually selectable
     iproute: add "a" command as a synonym to "add"
     iproute: support advmss option
     link: new applet
     ls: -1 should be ignored by -l (and options which imply -l)
     ls: convert DISP_DIRNAME to a bool variable
     ls: get rid of opt_flags[], handle -l1c through option_mask32
     ls: handle -a and -A through option_mask32
     ls: handle all sort options through option_mask32
     ls: handle -d and -R through option_mask32
     ls: handle -i through option_mask32
     ls: handle -p and -F through option_mask32
     ls: handle -s through option_mask32
     ls: handle -x through option_mask32, remove default -C from --help
     ls: LIST_ID_NAME/ID_NUMERIC/LOPT/LONG are the same, merge as LONG
     ls: LIST_NLINKS/SIZE/DATE_TIME/SYMLINK are always the same, merge as LIST_LOPT
     ls: make -Z output compatible with GNU coreutils 8.25
     ls: more correct handling of -c, -u
     ls: replace -e with --full-time, add --group-directories-first, delete -K
     modprobe: do not descend into /etc/modprobe.d/DIR/. Closes 8686
     modprobe-small: fix "modprobe non-existing-module" exitcode (should be 1)
     modprobe_small: if only MODPROBE and DEPMOD are selected, no need to test for them
     modprobe-small: make applets individually selectable
     more: hardcode FEATURE_USE_TERMIOS=y in this applet; code shrink
     mount: create loop devices with LO_FLAGS_AUTOCLEAR flag
     nc_bloaty: use poll() instead of select()
     nc: use poll() instead of select()
     nl: new applet; also implement cat -nb (similar functionality to nl)
     nproc: new applet
     ntpd: print result of hostname resolution
     partprobe: new applet
     paste: delimiter list use should restart for each new output line
     pgrep: fix pgrep -flx "sleep 11" - saw "sleep 11" processes as "sleep 11 "
     pgrep: implement -a
     ps: avoid -o stat to contain spaces. Closes 9631
     rdate: make it do something remotely sane, facing 32-bit time overflow
     rdate: time(NULL) is shorter than time(&var)
     runit: fix chpst -n -N -u USER
     runsv: update to match version 2.1.2 of runit
     sendmail: allow "+" symbol in recipient. Closes 9646
     sha512: use larger constant table only if sha512 is in fact selected
     shred: new applet
     su: FEATURE_SU_BLANK_PW_NEEDS_SECURE_TTY
     svlogd: support -ttt (dateTtime instead of date_time)
     taskset: rewrite to be task size-agnostic
     taskset: separate "current" and "new" strings
     tcpudp: define SO_ORIGINAL_DST directly, not via include
     time: inplement -f FMT
     top: FEATURE_USE_TERMIOS shouldn't control reading of screen size
     udhcpc6: fix problems found running against dnsmasq
     udhcpc6: fix releasing
     udhcpc6: move misplaced comment
     udhcpc6: read_interface should save link-local ipv6 address
     udhcpc6: add comments about option 39, no code changes
     udhcpc6: add support for timezones
     udhcpc6: make -O OPT work
     udhcpc: do not accept --background on NOMMU (same as -b)
     udhcpc: fix "udhcpc -x hostname:NAME" not working on nommu
     udhcpc: make sure we do not overflow poll timeout
     udhcp: do not clobber errno by signal handler
     udhcp: use poll() instead of select()
     unlzma: fix erroneous "while" instead of "if". Closes 4682
     unzip: do not use CDF.extra_len, read local file header. Closes 9536
     unzip: optional support for bzip2, lzma, xz
     unzip: properly use CDF to find compressed files. Closes 9536
     umount: revert "umount: make -d always active, add -D to suppress it"
     vi: don't touch file with :x when modified_count == 0
     vi: survive if stdin is nonblocking. closes 9851
     vi,fsck: do not use build timestamp unconditionally. Closes 9626
     tls: a tiny TLS1.2 code, wire it up for wget
     ssl_client: TLStest applet
     wget: add a big explanation what TLS code implements and what does not
     wget: add support for -S --server-response
     wget: fix for brain-damaged HTTP servers. Closes 9471
     wget/tls: session_id of zero length is ok (arxiv.org responds with such)
     w: new applet, alias to "who -H"
     xxd: new applet
    
    Explorer09:
     modprobe-small: optimizations for single applet build
    
    Felix Fietkau:
     ash: improve / fix glob expansion
    
    Glenn Matthews:
     reset: before calling execvp(), reset needs to flush stdout
    
    James Byrne:
     sv: update to match version 2.1.2 of runit
    
    Jody Bruchon:
     uniq: add -i option to ignore case
     Add help text for 'uniq -i'
    
    Jörg Krause:
     Fix dependency for IFUPDOWN_UDHCPC_CMD_OPTIONS
    
    Kaarle Ritvanen:
     libbb: GETOPT_RESET macro
     login: move check_securetty to libbb
    
    Kang-Che Sung:
     Allow FAST_FUNC to be overridden at build time
     build system: no longer prompt for PLATFORM_LINUX option
     bunzip2: fix code bloat caused by zcat's seamless magic
     Fix FEATURE_{GZIP,BZIP2}_DECOMPRESS link error
     Allow 'gzip -d' and 'bzip2 -d' without gunzip or bunzip2
     shell: clarify help text of CONFIG_{SH,BASH}_IS_* options
     ash: explicitly group ash options
     ash: fix "kill %1" not working if CONFIG_ASH is disabled
     hush: split bash compatible extensions into separate defines. No code changes
     kill: need not build kill.c when ash's job control is off
     kill: optimizations for single-applet build
     modutils: fix config options dependency
     modprobe-small: move lsmod code out of modprobe_main()
     modutils: remove redundant "select PLATFORM_LINUX" configs
     cmdline module options can be disabled on "big" modutils
     Reorder modutils config options & fix yet more dependency
     modprobe-small: document '-n' in depmod usage
     modprobe-small: define and use DEPMOD_OPT_n (option mask)
     Update depmod & modprobe upstream help text in comments
    
    Laurent Bercot:
     httpd: fix address family for reverse proxy client socket
     ls: fix support for long options when FEATURE_LS_COLOR is deselected
    
    Markus Gothe:
     lsscsi: new applet
    
    Maxime Coste:
     paste: new applet
    
    Ming Liu:
     tar: add IF_FEATURE_* checks
    
    Natanael Copa:
     ntpd: improve postponed hostname resolution
    
    Ron Yorston:
     ash: fix error code regression
    
    Rostislav Skudnov:
     Replace int by uint to avoid signed integer overflow
     dd: call fsync() only once before exiting if conv=fsync is specified
    
    Stefan Tomanek:
     ip rule: add suppress_{prefixlength,ifgroup} options
    
    Tito Ragusa:
     README_distro_proposal.txt: typo fixes
    
    Tommi Rantala:
     time: document -p in usage
     time: implement -a, -o FILE
    
    Waldemar Brodkorb:
     modutils: remove special handling of uClibc
    
    Youfu Zhang:
     ash: fix incorrect path in describe_command
    
    Yousong Zhou:
     vi: avoid touching a new file with ZZ when no editing has been done
    
  • 31 March 2017 -- Note for users of Linux kernels older than 2.6.27

    If you are stuck with a kernel from July 2008 or earlier (2.6.26 or less), and you are using mdev, device scan wouldn't work correctly due to an incompatibility in /sys structure. You can work around it by reverting this patch in 1.26.x BusyBox sources. (You also probably need to plan migration to a less ancient kernel).

  • 10 January 2017 -- BusyBox 1.26.2 (stable)

    BusyBox 1.26.2. (git, patches, how to add a patch)

    Bug fix release. 1.26.2 has fixes for ash (redirect fds sometimes were not closed), module utilities and tcpsvd (build fixes), build system (IFUPDOWN_UDHCPC_CMD_OPTIONS option was not settable).

  • 2 January 2017 -- BusyBox 1.26.1 (stable)

    BusyBox 1.26.1. (git, patches, how to add a patch)

    Bug fix release. 1.26.1 has fixes for single-applet builds (all applets are verified to successfully build when individually selected), a few tweaks to defconfig were made.

    Static binaries are available for downloads, with each individual applet enabled separately, as well as the binary with almost all applets selected, and helper binaries (ssl_helper for HTTPS wget support, index.cgi, post_upload.cgi and httpd_ssi for HTTP server).

  • 20 December 2016 -- BusyBox 1.26.0 (unstable)

    BusyBox 1.26.0. (git, patches, how to add a patch)

    Sizes of busybox-1.25.0 and busybox-1.26.0 (with equivalent config, static uclibc build):

     text	 data	 bss	 dec	 hex	filename
     942170	 491	 7496	 950157	 e7f8d	busybox-1.25.0
     944982	 491	 7504	 952977	 e8a91	busybox-1.26.0

    Changes since previous release:

    Aaro Koskinen (3):
     cpio: add ownership (-R) test cases
     patch: fix debug log failure
     patch: fix matching failure
    
    Bartosz Golaszewski (1):
     i2cdump: don't use common_bufsiz1
    
    Brian Foley (2):
     awk: fix segfault on for loop syntax error
     udhcpc: check read of option length byte to be within packet
    
    Denys Vlasenko:
     build system: fix a few warnings for allnoconfig build
     build system: fix include/NUM_APPLETS.h generation
     build system: make CONFIG_FEATURE_USE_BSS_TAIL less funky
     examples/var_service/fw: optionally flush all netdevs; optionally prefer one 0/0 routing
     examples/var_service/fw do not ruin $if[], use different name
     examples/var_service/supplicant_if: new service example
     examples: add a useful "see abridged log" script for ntpd service example
     examples: add example of a DHCP server
     examples: update var_service/README
     config: disentangle PREFER_APPLETS from SH_STANDALONE and SH_NOFORK
     trylink: use "mktemp tmp.XXXXXXXXXX" to placate OS X
     getopt32: add new syntax of 'o:+' and 'o:*' for -o NUM and -o LIST
     libbb/speed_table.c: survive B115200 and B230400 not fitting into 16 bits
     libbb/xwrite: print errno on "short write" errors
     libbb: do not use fflush_unlocked, musl does not like fflush_unlocked(NULL)
     libbb: handle \S in /etc/issue
     libbb: make xmalloc_sockaddr2dotted use NI_NUMERICSCOPE
     libbb: send_to_from: do not require that "to" should have the same AF. Closes 9146
     lineedit: fix completion with applet names. Closes 9361
     lineedit: fix two bugs in SIGWINCH signal handling
     libiproute: eliminate some redundant zero stores
     ash: [EXPAND] Do not split quoted VSLENGTH and VSTRIM
     ash: [EXPAND] Fix ifsfirst/ifslastp leak
     ash: [EXPAND] Optimise nulonly away and just use quoted as before
     ash: [EXPAND] Removed herefd hack
     ash: [EXPAND] Split unquoted $@/$* correctly when IFS is set but empty
     ash: [JOBS] Fix dowait signal race
     ash: [MEMALLOC] Add pushstackmark
     ash: [MEMALLOC] Made grabstackblock an inline wrapper for stalloc
     ash: [PARSER] Add nlprompt/nlnoprompt helpers
     ash: [PARSER] Do not show prompts in expandstr
     ash: [PARSER] Fix parsing of ${##1}
     ash: [PARSER] Handle backslash newlines properly after dollar sign
     ash: [PARSER] Recognise here-doc delimiters terminated by EOF
     ash: [PARSER] Report substition errors at expansion time
     ash: [PARSER] Size optimisations in parameter expansion parser
     ash: [REDIR] Move null redirect checks into caller
     ash: [REDIR] Remove EMFILE special case
     ash: [REDIR] Remove redundant CLOEXEC calls
     ash: [REDIR] Replace copyfd by savefd and use dup2 elsewhere
     ash: [SHELL] Expand ENV before using it
     ash: [SHELL] Move flushall to the point just before _exit
     ash: [SIGNAL] Remove EXSIG
     ash: [VAR] Initialise OPTIND after importing environment
     ash: [VAR] Remove setvarsafe
     ash: [VAR] Sanitise environment variable names on entry
     ash: add a FIXME for bug 9246
     ash: add comment explaining "set -e; $(cmd)" discrepancy
     ash: all blocks in function node copying must be SHELL_ALIGNed
     ash: comment out free(p) just before _exit, tweak some outdated comments
     ash: delete leftovers from "simplify EOF/newline handling in list parser" commit
     ash: do not leave SIGQUIT ignored on "exec CMD"
     ash: eval: Return status in eval functions
     ash: expand: Fixed "$@" expansion when EXP_FULL is false
     ash: explain EXP_REDIR and why we (dont) glob redir filenames
     ash: fix "duplicate local" code (forgot to re-enable interrupts)
     ash: fix "return N" not setting $? in loop conditionals
     ash: fix arithmetic closing )) split by backslash-newline
     ash: fix globbing bugs when using glibc glob()
     ash: fix handling of ${VAR: -2}
     ash: fix handling of NULs in $'abc\000def\x00asd'. Closes 9286
     ash: fix handling of bashism $'xxx' with high-bit chars. Closes 9236
     ash: fix interactive "command eval STRING" exiting on errors
     ash: fix return_in_trap1.tests failure
     ash: get rid of two global data variables
     ash: if using libc glob(), skip it if no metachars are in word
     ash: in heredoc code, fix access past the end of allocated memory. Closes 9276
     ash: input: Allow two consecutive calls to pungetc
     ash: jobs: Don't attempt to access job table for job %0
     ash: make internal globbing code selectable from config
     ash: make popfile() anfter popallfiles() safe
     ash: move ifsbreakup() and ifsfree() up
     ash: open-code blocking_dowait_with_raise_on_sig()
     ash: optimize tryexec(): avoid one allocation
     ash: partially sync with dash on "fork if traps are set" logic
     ash: placate gcc: "warning: ! is only applied to the left hand side of =="
     ash: reduce code differences from upstream
     ash: remove dead stores and unused variables
     ash: remove unused EXSHELLPROC
     ash: return to DOWAIT_* constants similar to dash, no logic changes
     ash: support "--" in "source" builtin
     ash: undo "tokname hack"
     ash: use glob() from libc
     ash: use pause(), not sigsuspend(), in wait builtin
     ash: use shellparam.optind/optoff in getopts() directly, not through pointers
     ash: while (!got_sig) pause() is not reliable, use sigsuspend()
     hush: "wait $!; echo $?" should return 127 if $! already exited
     hush: 'return' should have effect earlier
     hush: G.user_input_buf[] is needed only if line editing is enabled
     hush: `cmd` and arithmetic also need the fix for FILE rewind
     hush: add commented-out debug printouts in "memleak" built-in
     hush: add func6.tests
     hush: add var4.tests, var5.tests
     hush: allow { cmd } to not be terminated by semicolon in some cases
     hush: do not allow sh -c '{ echo boo }'
     hush: do not leak script fds into NOEXEC children
     hush: document better where bad redirect syntax is detected
     hush: enable "msh is deprecated" message in msh stub
     hush: factor out %jobspec parsing
     hush: fix "(sleep 1; exit 3) & sleep 2; echo $?; wait $!; echo $?"
     hush: fix ". EMPTY_LINE" not setting $? to 0
     hush: fix "redirects can close script fd" bug
     hush: fix "wait PID"
     hush: fix 'eval ""' handling
     hush: fix a bug in FEATURE_SH_STANDALONE=y config. Closes 9186
     hush: fix a memory corruption when exported variable is modified
     hush: fix exitcode on exec failure with EACCES - should be 126
     hush: fix handling of by backslash-newline in $((arith)) and $(cmd)
     hush: fix interactive input handling of backslash+newline
     hush: fix var3.tests
     hush: implement "wait %jobspec"
     hush: make "wait %1" less likely to play with signal mask
     hush: make getch/peek functions directly called
     hush: non-matching "case" statement sets $? to 0
     hush: rework "wait %jobspec" to work in non-interactive shells too
     hush: rework input char buffering to allow more than one-deep peek
     hush: simplify insert_bg_jobs
     cp: fix -i for POSIX mode. Closes 9106
     cp: make verbose cp show symlink copies too
     cpio: fix restoration of file ownership, closes 9306
     df: implement -B n<suff> and -B <suff> formats of -B option
     dhcp: merge files.c into dhcpd.c
     dhcp: merge leases.c and static_leases.c into dhcpd.c
     dhcp: merge most of static_leases.c into dhcpd.c
     dnsdomainname: split it from "hostname", make it independently selectable
     dpkg-deb: remove unused FEATURE_DPKG_DEB_EXTRACT_ONLY config option
     fdisk: fix CONFIG_FEATURE_SUN_LABEL=y build
     fdisk: print much less cryptic partition table
     fdisk: sanitize partition name printing; drop "Code" column; get rid of one static var
     fdisk_gpt: simplify GPT partition name printing
     find: fix handling of trailing slashes in -name PATTERN comparisons
     hexdump: fix numerous bugs in handling of backslashes
     httpd: explain why we use sprintf and why it should be fine
     ifplugd: if SIOCSIFFLAGS fails with ENODEV, don't die
     ifupdown: rewrite state file atomically
     ifupdown: when flushing addresses with "ip", add label %label%
     init: fix for FreeBSD console opening. Closes 9031
     install: fix musl problem with dirname
     ip: fix an improper optimization: req.r.rtm_scope may be nonzero here
     ipneigh: add this shortcur similar to other "ip <CMD>" shortcuts
     less: fall back to using fd #1 for keyboard reading. Closes 9231
     less: fix SEGV
     less: fix bracket search to match behavior of less 481
     less: switch off nonblock on kbd_fd before exit
     loadfont: 32k size limit is not enough
     makedevs: make special node creation idempotent
     man: allow nroff and tbl commands be overridden; unmangle writing to files
     man: fix parsing of "DEFINE pager xyz". Closes 8976
     man: make width selection more thorough; explain how to override it
     man: remove -Tascii from nroff invocation
     mdev: create devices from /sys/dev
     more: accept and ignore a bunch of options
     mount: for cifs, dont insert "ip=ADDR" option if user gave it explicitly
     mount: tweak "IPv6 scoped addr" commit
     ntpd: daemonize before DNS resolution
     sed: fix "sed n (flushes pattern space, terminates early)" testcase failure
     sendmail: make it possible to pause after connection helper is started
     sha3: fix to conform to final SHA3 padding standard, add -a BITS option
     su: expand help; simplify passing of -c CMD to run_shell()
     svc: new applet (daemontools-compatible version of "sv")
     tar: handle pax-encoded utf8 filenames and link names. Closes 9406
     tc: consolidate its disabled bits
     tcpsvd: don't keep shared fd open if fd limit is reached. Closes 9331
     telnetd: fix a corner case where CRLF->CR translation can misbehave
     telnetd: fix corner case of input processing of 0xff bytes
     telnetd: fix handling of short writes to pty
     telnetd: ifdef out a buggy error handling code path
     telnetd: treat all 2-byte IACs in 240..249 range as NOPs
     test: make [ and [[ forms individually selectable
     test: memory leak: free group id list
     top: move free(prev_hist) out of signal path
     traceroute: cleanup and fixes for packet size calculations
     udhcpc: check read of overload option data byte to be within packet
     udhcpc: run "deconfig" script in manual renew state too. Closes 9061
     unshare: --network should be --net. Closes 9116
     vi: fix '' command (goto to prev context)
     vi: make "g<key>" error message less likely to show garbage
     wget/ssl_helper: update to wolfssl-3.9.8
     wget/ssl_helper: strip was invoked incorrectly
     wget: run s_client helper with -servername HOST
     wget: there is no -s option in GNU Wget 1.18, we should be compatible
     wget: treat 201,202,203 as success codes too. Closes 9211
     whois: implement -i
     whois: make it actually work
     {md5,shaN}sum: make -c EMPTY fail
    
    Francis Rounds (1):
     svlogd: strip leading '!' from processor lines
    
    Hauke Mehrtens (1):
     libnetlink: fix alignment of netlink messages
    
    Jonas Danielsson (1):
     ping: populate icmp_id field for "simple" ping too
    
    Kang-Che Sung (1):
     docs: Update filenames in keep_data_small.txt
    
    Linus Walleij (1):
     AUTHORS: Add myself to AUTHORS
    
    Lukasz Nowak (1):
     libiproute: handle table ids larger than 255
    
    Mike Frysinger (4):
     modutils: support finit_module syscall
     mdev.conf: rename hw_random to hwrng
     setfiles: fix build failure after common_bufsiz change
     selinux: drop deprecated headers
    
    Miroslav Lichvar (1):
     ntpd: respond only to client and symmetric active packets
    
    Natanael Copa (4):
     df: use f_frsize instead of f_bsize for correct sizes
     lineedit: trivial codeshrink for vi-mode
     gzip: fix compression level bug. Closes 9131
     gzip: add test that checks that -9 compresses better than -1
    
    Peter Korsgaard (1):
     udhcpc: Unconditionally call deconfig script, not only if lease is active
    
    Ron Yorston (2):
     libbb: suppress warning about run_applet_and_exit
     ash: return exit status of nofork applets
    
    Rostislav Skudnov (2):
     ash: exit after subshell error when errexit option is set
     lineedit: fix handling of repeating Alt-b, Alt-f, Alt-d, Alt-Backspace
    
    Serj Kalichev (1):
     volume_id: Add support for UBIFS
    
    Tito Ragusa (1):
     strings: implement -t radix
    
  • 7 October 2016 -- BusyBox 1.25.1 (stable)

    BusyBox 1.25.1. (git, patches, how to add a patch)

    Bug fix release. 1.25.1 has fixes for hush (newer glibc has different behavior on fflush; fix use-after-free for exported variables), gunzip (incorrect handling of -N "compression level" options), ip route (scope "Universe", numerical value zero, wasn't always set properly), ntpd (check type of incoming packet, respond only to client requests).

  • 22 June 2016 -- BusyBox 1.25.0 (unstable)

    BusyBox 1.25.0. (git, patches, how to add a patch)

    Sizes of busybox-1.24.2 and busybox-1.25.0 (with equivalent config, static uclibc build):

     text data bss dec hex filename
     894406 494 7420 902320 dc4b0 busybox-1.24.2
     893717 489 7304 901510 dc186 busybox-1.25.0

    Changes since previous release:

    Aaro Koskinen (5):
     cpio: implement -R/--owner
     xargs: make -I imply -r
     gunzip: add support for long options
     gzip: add support for --no-name long option
     nandwrite: implement -n (read/write without ecc)
    
    Ari Sundholm (2):
     blkdiscard: new applet
     truncate: always set mode when opening file to avoid fortify errors
    
    Arnout Vandecappelle (Essensium/Mind) (1):
     taskset: fix non-fancy cpuset printing on big-endian
    
    Bartosz Golaszewski (7):
     i2cdetect: fix address skipping in auto mode
     i2cdump: don't read block data in non-block modes
     i2cdump: use I2C block mode for the 'i' mode parameter
     i2cdump: bail-out if block read fails
     i2cdump: display the numeric value for block read ioctl() errors
     unshare: new applet
     nsenter: new applet
    
    Bjørn Forsman (1):
     kconfig/lxdialog: get ncurses CFLAGS with pkg-config
    
    Chris Renshaw (1):
     Resolve linker issues with Android API 21 (dprintf, tcdrain)
    
    Christian Lindeberg (1):
     udhcpd: keep expired leases at startup
    
    Curt Brune (1):
     networking: add 'ip neigh' command
    
    Denys Vlasenko:
     make MKPASSWD a separate config option, not an automatic alias to cryptpw
     rename FEATURE_INITRD to LINUXRC and make it separate, not an alias to init
     fixes for problems found by bionic build
     build system: finer-grained selection of search speedup table
     build system: fix generate_BUFSIZ.sh to not alternate 1k and malloc builds
     scripts/trylink: fix bit-rotted linker option verification
     scripts/trylink: libbusybox fix
     scripts/trylink: remove $CPPFLAGS
     scripts/trylink: on failure, print a hint about CONFIG_EXTRA_LDLIBS
     generate_BUFSIZ.sh: catch BUFSIZE < 1024 also on "big" builds
     libbb: constify *bb_common_bufsiz1 (if it is compiled to be a pointer)
     libbb: factor out code which queries screen width
     libbb: get_uidgid() always called with allow_numeric=1
     libbb: make "COMMON_BUFSIZE = 1024 bytes, the buffer will be malloced" work
     libbb: make bb_common_bufsiz1 1 kbyte, add capability to use bss tail for it
     libbb: make parse_chown_usergroup_or_die() set unspecified uid/gid to -1
     libbb: speed up error_msg functions
     libbb: two new functions: wait_for_exitstatus(pid), xfchdir(fd)
     libarchive: fix open_zipped()
     libarchive: fix xmalloc_open_zipped_read_close()
     networking: allow dot at the end of the domain name in dhcp response
     arping: avoid use of ether_ntoa(). Closes 8926
     ash: fix command -- crash
     cp: add -u/--update and --remove-destination
     dos2unix: try to preserve ownership. Closes 8311
     du: extra compat: with -k and -m, round sizes up
     dumpleases: make host names sanitized to shell-friendly condition
     find_applet_by_name: add an example of faster linear search code
     flock: fix -c; improve error handling of fork+exec
     flock: merge spawn_and_wait() code patchs for -c and sans-c uses
     fsck: do not use statics
     fsck: use printf for message, not bb_info_msg
     ftpd: make DIR parameter work for non-root too: chdir to it instead of chroot
     grep: make errors other than "not found" result in exit code 2. Closes 8796
     httpd: fix heap buffer overflow. Closes 8426
     i2c_tools: suppress "'blen' may be used uninitialized in this function"
     ifupdowm: fix "warning: unused variable 'iface_list'"
     inotifyd: swap meaning of 'y' and 'm' events in help text. Closes 8726
     iproute: support "scope". Closes 8561
     libiproute: make rt_addr_n2a() and format_host() return auto strings
     libiproute: rename invarg(a,b) to invarg_1_to_2(a,b)
     login: add commented-out PAM double password avoidance from BZ 4003
     ls: fix columnar output. Closes 8731
     lzop: eliminate variable, use "int" as return type
     mkfs_vfat: use bb_error_msg for logging, not bb_info_msg
     modinfo: fix "-F firmware", add "intree" field display
     modprobe-small: fix bogus handling of unpack errors
     modprobe: skip non-.conf files only in subdirectories
     modutils: fix build error with !DEPMOD
     mount: support "nofail" option. Closes 8551
     nmeter: convert field list to bit list
     nmeter: fix a bug with unterminated varargs
     nmeter: reinstate and document -d-1
     nmeter: remove undocumented %NNNd specifier
     ntpd: do not use a peer more than once (say, if two peers resolve to the same IP)
     ntpd: if peer does not reply anymore, try re-resolving its hostname
     ntpd: more informative poll lowering message
     ntpd: print packet delay in clock update message
     ntpd: retry initial DNS resolution (forever, no timeout for now)
     ntpd: step when |offset| > 1 sec, not 0.125 sec
     od: get rid of (almost all) statics
     patch: correctly handle "patch FILE_TO_PATCH" form. Closes 7736
     pmap: fix bogus {no such process} comm field text
     rmmod: fix bad error message
     sed: fix append command to match GNU sed 4.2.1
     sed: make 's///w FILE' actually write to FILE. Closes 8251
     sed: support "-f -" idiom
     sed: understand \n, \r and \t in i and a commands. Closes 8871
     setarch: add support for '-R' (disable randomization)
     setfiles: switch bb_info_msg to printf
     setsid: implement -c
     sort: fix ENDCHAR handling in "-kSTART,N.ENDCHAR"
     sort: fix key with delimiters breakage
     stat: make -f optional. This allows to build stat for non-linux systems
     sulogin: drop incorrect comment about suid-ness
     sulogin: remove suid paranoia code, explain why it's not necessary
     sulogin: use bb_error_msg instead of bb_info_msg; better message
     tar: add a test that we don't write into symlinks
     tar: add support for --strip-components=N
     tar: fix files skipped with --strip_components not resetting selinux context
     tar: implement --version for buildroot
     tar: shrink hardlink name handling code
     top: make sort field for 's' mode less confusing
     udhcp: add setup_common_bufsiz() as needed
     udhcp: fix a SEGV on malformed RFC1035-encoded domain name
     udhcp: get rid of bb_info_msg()
     udhcpc: do not use -t NUM for counting "select" packets, use 3
     udhcpc: fix OPTION_6RD parsing (could overflow its malloced buffer)
     umount: build fix for older glibc
     unzip: better match for "standard" unzip's output; string shrinkage
     unzip: fix a case where we find wrong CDE. Closes 8821
     unzip: fix percent overflow; show "stored" files properly
     unzip: shorter code for date/time generation
     unzip: test for bad archive SEGVing
     wget: if stderr is not a tty, progress bar shouldn't use tty-tricks
     wget: make -T timeout work on header reads too. Closes 8636
     wget: make Bartosz's "wget --passive-ftp -nd -t 3" work
     zcip: do not query current time if we won't use the result
     zcip: use bb_error_msg for logging, not bb_info_msg
    
    Felix Fietkau (1):
     busybox: fix uninitialized memory when displaying IPv6 addresses
    
    Hans Dedecker (1):
     dhcpc: Use client IP address as source address for DHCP renew/rebind messages
    
    Isaac Dunham (1):
     dumpleases: new option -d to show time in seconds
    
    Jean Delvare (1):
     kbuild: Fix gcc -x syntax
    
    Junio C Hamano (1):
     kconfig: fix menuconfig on debian lenny
    
    Justin Lecher (1):
     menuconfig: optionally use pkg-config to detect ncurses libs
    
    Krzysztof Mazur (1):
     menuconfig: fix extended colors ncurses support
    
    Kylie McClain (1):
     Fix compiling with musl's utmp stubs
    
    Michal Marek (1):
     kbuild: Make scripts executable
    
    Mike Frysinger (12):
     trylink: include LDFLAGS when checking linkage
     swapon/swapoff: refine the -e (ifexists) option
     blkid: add bcache support
     truncate: use O_WRONLY|O_NONBLOCK
     build: add a sanitizer debug option
     modprobe: only parse files that end in .conf
     ash_test: printenv: fix missing includes
     ash_test: ignore generated files
     Revert "lxdialog: fix ncursesw include detection"
     syslogd: minor tweaks to text
     undeb: clean up
     unrpm: clean up
    
    Natanael Copa (2):
     ifupdown: use -x hostname:NAME with udhcpc
     libbb: fix time parsing of [[CC]YY]MMDDhhmm[.SS]. Closes 8951
    
    Nicolas Carrier (1):
     init: make the command-line rewrite optional
    
    Nicolas Cavallari (1):
     ifupdown: allow duplicate interface definitions
    
    Pascal Bach (1):
     chpasswd: support -c argument and respect DEFAULT_PASSWD_ALGO
    
    Rafał Miłecki (1):
     dd: support iflag=skip_bytes
    
    Richard Genoud (1):
     tr: support octal ranges
    
    Ron Yorston (26):
     Rewrite iteration through applet names to save a few bytes
     libbb: move common code into run_applet_and_exit
     lineedit: search applets as well as PATH for tab completion
     ash: add tests for failures of the exec and command builtins
     ash: fix EXEXEC status clobbering
     ash: allow popredir to be called if the stack is empty
     ash: copy function tests from hush testsuite
     ash: add support for bash 'function' keyword
     ash: add test for issue with here document
     ash: allow newline after variable name in for loop
     ash: save a few bytes in code to parse case statements
     ash: respect -p flag when command builtin is run with -v/-V
     ash: only allow local variables in functions
     ash: fix error during recursive processing of here document
     ash: simplify EOF/newline handling in list parser
     ash: fix corruption of ${#var} if $var contains UTF-8 characters
     ash: bash-compatible $'...' shouldn't expand in double quotes
     busybox: alter help message in standalone shell mode
     busybox: make busybox an optional applet
     Allow "busybox APPLET" to work when busybox is disabled
     wget: shrink code if https isn't supported
     libiproute: use if_nametoindex
     printf: short-circuit output when argument to %b includes \c
     applet_tables: save space by removing applet name offsets
     find_applet_by_name: loop index should be signed
    
    Sven Eisenberg (2):
     ubirename: new applet
     ubirmvol: implement -N switch for ubirmvol
    
    Szabolcs Nagy (1):
     ip: fix problem on mips64 n64 big endian musl systems
    
    Timo Teräs (4):
     ifupdown: pass interface device name for ipv6 route commands
     fbsplash: use virtual y size in mmap size calculations
     modutils: merge module_entry and module_info to common
     networking: properly initialize ipv6 scope id for printing it
    
    Yaakov Selkowitz (2):
     kconfig: check ncursesw headers first in check-lxdialog
     kconfig: fix check-lxdialog for DLL platforms
    
    Yann E. MORIN (1):
     kconfig/lxdialog: rationalise the include paths where to find {.n}curses{,w}.h
    
  • 25 March 2016 -- Building on an Android tablet.

    Android is based on Linux kernel, but sadly and unexplicably, Android userspace is not Unix-friendly: in many cases, things are done differently than in "usual" Unix systems. For example, there is no /bin directory (and therefore ubiquitous #!/bin/sh scripts won't work). Instead, there is /system/bin.

    I have a Samsung Galaxy Tab S (SM-T700 model) and I made it compile Busybox as follows:

    • "Rooted" the tablet (acquired root access). This step is device-specific.
    • Installed the SuperSU application.
    • Installed the Termux application - it provides a small repository of essential tools: gcc-based toolchain, git, ncurses, etc.
    • Ran its terminal, installed packages I needed, pulled Busybox git tree.
    • Created a /bin symlink to /system/bin, to make #!/bin/sh scripts work (the build fails otherwise).
    • Now the usual "make defconfig", "make menuconfig", "make" work.

    Some parts won't compile (not all kernel headers are present, libc API different or incomplete, etc). The maximal config which did compile is now in the git tree, in configs/android_502_defconfig. The toolchain provided by Termux is based on Android's Bionic libc and Bionic has some design problems. An annoying one is that off_t is 32-bit, struct_stat::st_size is not off_t (this violates standard expectations), therefore CONFIG_LFS=y does not build, and CONFIG_LFS=n builds with warnings (printf'ing st->st_size with wrong specifier).

  • 24 March 2016 -- BusyBox 1.24.2 (stable)

    BusyBox 1.24.2. (git, patches, how to add a patch)

    Bug fix release. 1.24.2 has fixes for build system (static build with glibc fixed), truncate, gunzip and unzip.

  • 24 October 2015 -- BusyBox 1.24.1 (stable)

    BusyBox 1.24.1. (git, patches, how to add a patch)

    Bug fix release. 1.24.1 has fixes for ftpd (DIR parameter works for non-root too), httpd (heap overflow fix), sort (fix for a a problem affecting glibc build). Build system has a fix for the lost link-time optimizations. In 1.24.0 announcement, you might have noticed that sizes unexpectedly grew relative to 1.23.2. Now it is fixed:

     text data bss dec hex filename
     860126 486 7272 867884 d3e2c busybox-1.23.2
     869074 516 7364 876954 d619a busybox-1.24.0 (buggy link script)
     858906 486 7180 866572 d390c busybox-1.24.0 (fixed link script)
     858941 486 7180 866607 d392f busybox-1.24.1

    Check out a new applet, "uevent". It is a netlink listener. It provides alternative to having mdev as kernel hotplug helper. Instead of setting up the former via "echo /sbin/mdev >/proc/sys/kernel/hotplug", start "uevent mdev" early during boot. "uevent" will run "mdev" for each hotplug event, waiting for each child to terminate before starting a next one.

    The former method does not require a long-lived listener process, but it is racy: many copies of mdev can run in parallel.

  • 12 October 2015 -- BusyBox 1.24.0 (unstable)

    BusyBox 1.24.0. (git, patches, how to add a patch)

    Sizes of busybox-1.23.2 and busybox-1.24.0 (with equivalent config, static uclibc build):

     text data bss dec hex filename
     860126 486 7272 867884 d3e2c busybox-1.23.2
     869074 516 7364 876954 d619a busybox-1.24.0

    I would like to feature some less-known useful tools in Busybox. Let me talk about "nmeter" applet. I find myself using it surprisingly often. For example, it helped me to correctly parallelize a very large multiple kernel build job (~30000 kernel builds) so that all CPUs are loaded, but machine isn't evicting file cache because it has too many jobs for installed RAM.

    When dealing with a machine which seems to be sluggish, it takes some time to pinpoint the cause. It can be lack of free memory. It can be excessive CPU load. It can be misbehaving (slow) storage or network. nmeter allows to monitor many such parameters and presents them in a compact one-line form. This lets you see the time evolution as well. Here is an example:

    # nmeter '%t %c x %x m %[mf] f%p p %[pn] b %b net%[neth0]'
    20:51:22 .......... x 837 m 2.2g f 0 p 377 b 0 0 net 0 0
    20:51:23 .......... x 1195 m 2.2g f 0 p 377 b 0 0 net 128 0
    20:51:24 .......... x 1687 m 2.2g f 0 p 377 b 0 0 net 64 0
    20:51:25 .......... x 1829 m 2.2g f 0 p 377 b 0 0 net 875 70
    20:51:26 U......... x 1567 m 2.2g f 6 p 377 b 0 0 net 64 0
    20:51:27 U......... x 1451 m 2.2g f 0 p 377 b 0 0 net 64 0
    20:51:28 .......... x 1332 m 2.2g f 0 p 377 b 0 0 net 64 0
    20:51:29 .......... x 1698 m 2.2g f 0 p 377 b 0 0 net 64 0
    20:51:30 .......... x 1640 m 2.2g f 0 p 377 b 0 0 net 64 0
    20:51:31 .......... x 1397 m 2.2g f 0 p 377 b 0 0 net 64 0
    20:51:32 .......... x 1244 m 2.2g f 0 p 377 b 0 4096 net 64 0
    20:51:33 U......... x 1660 m 2.2g f 0 p 377 b 0 0 net 128 0
    20:51:34 U......... x 1793 m 2.2g f 0 p 377 b 0 0 net 64 0
    20:51:35 .......... x 1583 m 2.2g f 0 p 377 b 0 0 net 64 0
    20:51:36 .......... x 1308 m 2.2g f 0 p 377 b 0 0 net 64 0

    If CPU load is high, the CPU bar will immediately show this. %x column shows context switches per second, allowing to detect cases where processes are waking and waiting on each other excessively. %[mf] is free memory, and it is smart enough to show actual usable memory: unlike many other tools, it considers buffer cache as free memory. %p and %[pn] columns show forks and number of processes, they let you detect a case where a daemon is respawning continuously. Two %b numbers are block IO read and write rates. %[neth0] is network IO rate on the specified interface. More specifiers exist - please read "nmeter --help" output.

    With -d MSEC option and small values of MSEC, this tool allows to see a detailed view of bursty activity. Sometimes you can literally see every network packet arriving. To make this possible, this tool is written so that it reads the minimum of informaion it needs from /proc. In this example, we can see how a packet arrived to eth0, complete with its IRQ#30 firing:

    # nmeter -d10 '%4t irq%30i net%[neth0]'
    21:07:58.2301 irq 0 net 0 0
    21:07:58.2401 irq 0 net 0 0
    21:07:58.2502 irq 0 net 0 0
    21:07:58.2601 irq 1 net 64 0
    21:07:58.2701 irq 0 net 0 0
    21:07:58.2802 irq 0 net 0 0
    21:07:58.2902 irq 0 net 0 0

    As you see, each update takes about 0.2 millisecond of processing time. You can run even -d1, if you want. -d0 also works, it is a mode where updates are continuous.

    On the other hand, with large update interval, you can run this tool continuously on a server machine and save its output, to be able to investigate mysterious drops in performance at a time when there was no operator present. If you have an oopsing server, it is useful to have another nmeter instance's output to be constantly printed to its console, if you want to see what was going on just before oops. "Is my server occasionally dies in an IRQ storm?" situation.

    Changes since previous release:

    Aaro Koskinen (3):
     gzip: add support for compression levels 4-9
     diff: fix -B with single line changes
     diff.tests: add testcases for -B and single line changes
    
    Adam Tkac (1):
     ntpd: relicense ntpd applet to ISC-style license
    
    Alex Dowad (1):
     ifupdown: 'prio' should have been 'metric' in static_up and static_up6
    
    Alexander Korolkov (1):
     arping: fix iface name in error messages
    
    Alfonso Ranieri (1):
     volume_id: fix a buglet introduced by is_prefixed_with() conversion
    
    Andrew Fuller (1):
     vi: basic undo feature shouldn't depend on yankmark
    
    Ari Sundholm (3):
     dd: add optional support for status=noxfer/none
     dd: move suffix struct to xatonum.c
     truncate: new applet
    
    Arthur Gautier (1):
     udhcpc: dns labels can actually start with a number
    
    Bartosz Golaszewski:
     Makefile: fix cscope target
     i2cget, i2cset, i2cdetect, i2cdump: new applets
     i2c-tools: fix 'i2cdetect -l'
     i2c-tools: only try /dev/i2c/* if opening /dev/i2c-* fails with ENOENT
     unit-tests: remove unnecesary field from struct bbunit_listelem
     unit-tests: remove code depending on WANT_TIMING
     Makefile: add missing libraries to LDLIBS
     libbb: add unit tests for is_prefixed_with()
     libbb: add a comment describing the way is_prefixed_with() works
     libbb: add is_suffixed_with() function
     i2c-tools: remove duplicate definitions
     i2c-tools: rename remaining defines
    
    Bernhard Reutner-Fischer (5):
     dc: tweak parsing
     wget: fix --header to not append duplicate headers
     *: Switch to POSIX utmpx API
     include: Fallback to UTMP unless there is UTMPX support
     adduser: Add -k /path/to/skel
    
    Christoph J. Thompson (1):
     iproute: don't hardcode the path to config files
    
    Clayton Shotwell (1):
     applets: add installation of individual binaries
    
    Daniel Thompson (1):
     libbb: enable support for !CONFIG_MULTIUSER
    
    Denys Vlasenko:
     truncate: new applet
     uevent: new applet
     build system: -fno-builtin-printf
     build system: make CONFIG_EXTRA_LDFLAGS go to LDFLAGS, not EXTRA_LDFLAGS
     build system: remove special-casing for extra libs
     examples/mdev_fat.conf: document that newer mdev exposes path
     update example ntp.script
     updated android_ndk_defconfig
     platform.h: add compat mempcpy
     platform.h: enable mempcpy for FreeBSD
     platform.h: mempcpy needs <string.h>
     libbb: add setsockopt_foo helpers
     libbb: auto_string() for efficient handling of temporary malloced stirngs
     libbb: code shrink by factoring out common update_utmp_DEAD_PROCESS
     libbb: introduce and use is_prefixed_with()
     libbb: make INET[6]_rresolve use sockaddr2{host,dotted}_noport
     libbb: make is_suffixed_with() return pointer inside string, not key.
     libbb: more compact API for bb_parse_mode()
     libiproute: use itoa() where appropriate
     libpwdgrp: fix a memory leak in getXXnam (we did not save address of string buf)
     libpwdgrp: fix counting of commas in group list
     libpwdgrp: getgrXXX: empty string is not a member name, do not store it
     libpwdgrp: reinstate Tito's optional atexit freeing
     libpwdgrp: store getXXnam result in a single malloc block
     libpwdgrp: use FAST_FUNC to make "matching ABI" optimization more likely to succeed
     libpwdgrp: use a better estimate of max struct size
     libpwdgrp: use getpwent() instead of getpwent_r()
     ash: a bunch of trivial simplifications
     ash: add tests adapted from hush glob tests. glob2.tests currently fails
     ash: explain what "local -" does
     ash: fix a SEGV case in an invalid heredoc
     ash: fix a SEGV in ${#1}
     ash: fix handling of duplicate "local"
     ash: make dowait() a bit more readable. Logic is unchanged
     ash: simplify "you have mail" code
     hush: add recent ash tests to hush testsuite too (they all pass for hush)
     hush: document buggy handling of duplicate "local"
     hush: fix a nommu bug where a part of function body is lost if run in a pipe
     hush: fix umask: umask(022) was setting umask(755)
     awk: support "length" form of "length()". Closes 8371
     dc: fix "dc p" printing bogus data
     deluser: also remove user from /etc/group
     deluser: implement --remove-home
     depmod: fix recent breakage in modules.dep generation
     dhcpd: fix an improper widening conversion
     diff: fix a bug in diffing against stdin. Closes 7784
     dpkg: update supported compression methods
     find: support "find . -delete" idiom - do not try rmdir(".")
     ftpd: change_identity() must be after chroot()
     ftpd: prevent zombies. Closes 7832
     gzip: speed up and shrink put_16bit()
     ifconfig: fix double free fatal error in INET_sprint
     ifplugd: discovered why it needed net/ethernet.h: just for ETH_ALEN
     inetd: fix order of array index check and array access
     ip: increased max ID for /etc/iproute2/rt_tables to 1023
     ipaddress: better formatting, no code changes
     less: improve regular file detection in line counting code
     ls: fix year 9999 bug :)
     mdev: if a "future" mdev.seq is seen, do not overwrite it with ours
     mdev: improve logging
     modinfo: fix fallout from basename removal
     modprobe-small: fix and simplify rmmod
     modprobe-small: fix recent breakage: modprobe -r was using full path
     modprobe-small: if concurrent module load did not succeed, wait
     modprobe: fix "modprobe devname:snd/timer" case (alias with a slash)
     modprobe: fix recent breakage: modules.dep reading code needs to strip dirname
     modprobe: revert checking for /, stop doing basename() on modprobe args
     ntpd: change help text about -l to say that it doesn't disable client code
     ntpd: get rid of G.initial_poll_complete
     patch: segfault fix. Closes 7916
     ping: fix recently introduced build breakage for non-optimizing builds
     ps: fix SEGV on narrow screens. Closes 8176
     remove global "jmp_buf die_jmp" from !FEATURE_PREFER_APPLETS builds
     route: fix bogus read error when route table is empty
     route: improve -A inet6
     runsvdir: (almost) close a signal race
     runsvdir: do not block SIGCHLD around poll/sleep
     runsvdir: if pid==1, also intercept SIGINT for -s SCRIPT
     sed: implement ",+N" range end
     sort: fix -kN,M handling (was including last separator into the comparison)
     ssl_helper: tweaks discovered while building 32-bit version
     sync: add support for -d -f FILE
     tar: do not try to decode GNU extended headers as pax headers
     tc: fix print_rate
     trim extra newlines in help texts
     udhcpc: fix for some Android toolchain breakage
     umount: always use umount2 syscall with specified flags
     unzip: prevent attacks via malicious filenames
     uudecode: tolerate text input with CR+LF line ends
     vi: make BACKSPACE and DELETE join lines at start/end of line
     wget: make openssl/ssl_helper choice configurable
    
    Eugene Rudoy (1):
     ash: consider "local -" case while iterating over local variables in mklocal.
    
    Felix Fietkau (1):
     find: fix regression in status processing for path arguments
    
    Frank Bergmann (1):
     ifupdown: correct ifstate update during 'ifup -a'. Closes 6212
    
    Guillermo Rodriguez (1):
     free: handle "cached" value too
    
    Isaac Dunham (1):
     mount: -T OTHERTAB support
    
    John Schroeder (1):
     udhcpd: account for script delay in lease
    
    Junling Zheng (1):
     chown: fix help text
    
    Kevin Wallace (1):
     libbb/loop: don't try to re-use existing loop device
    
    Linus Walleij (1):
     fbset: fix rgba parsing
    
    Maninder Singh (4):
     typo fixes
     fix if(p)/free(p) construct
     fix whitespaces
     Removes stray empty line from code
    
    Martin Kaiser (1):
     telnetd: we only need CONFIG_UNIX98_PTYS from the Linux kernel
    
    Matt Whitlock (4):
     Bionic lacks ttyname_r; provide a workaround
     Bionic lacks tcdrain; provide a workaround
     Bionic lacks mempcpy; enable existing workaround
     Conditionalize Bionic workarounds on __ANDROID_API__
    
    Michael Tokarev (1):
     ip addr: support change and replace commands
    
    Micke Prag (1):
     ubiattach: add option -O
    
    Mike Frysinger (3):
     trylink: use mktemp instead of hardcoding paths
     trylink: respect compiler settings when probing features
     echo: make escape sequences depend on fancy mode
    
    Natanael Copa (1):
     modprobe: fix modprobe -r and parsing of /etc/modprobe.d
    
    Peter Korsgaard (2):
     dmesg: add -r option to print raw format even when FEATURE_DMESG_PRETTY is enabled
     modprobe: handle module arguments containing spaces
    
    Phil Sutter (1):
     logread: implement dumpfollow mode of operation
    
    René Rhéaume (1):
     swaponoff: add support for -e
    
    Rich Felker (1):
     gzip: do not store timestamp in gzip header
    
    Ron Yorston:
     libbb: remove unnecessary argument to nonblock_immune_read
     libbb: add a function to make a copy of a region of memory
     ash: do not split the result of tilde expansion
     ash: code shrink around varvalue
     ash: perform tilde expansion in all parameter expansion words
     ash: do not expand tilde in parameter expansion within quotes
     ash: remove superfluous code in arithmetic mode
     ash: remove arithmetic expansion collapsing at parse time
     ash: move parse-time quote flag detection to run-time
     ash: fix breakage of ${v/pat/str}
     ash: remove parsebackquote flag
     ash: use alloca to get rid of setjmp
     ash: fix slash treatment in expmeta
     less: document -S flag and make it independently configurable
     less: fix display of line numbers
     less: correctly account for tabs when rewrapping lines
     less: improvements to verbose status messages
     less: fix numeric input
     less: move code to count lines into a separate function
     less: rearrange detection of non-regular files
     less: add a function to detect when display is at end of file
     less: fix line number confusion
     less: allow use of last column of terminal
     less: further tweaks to regular file detection
     less: fix botched attempt to use last column
     vi: failure to open file is not an error when initialising buffer
     vi: fix reading of file after last line
     od: fix printing of high-bit chars
     uname: make OS name configurable
     ipcalc: fix trivial usage message
    
    Serj Kalichev (1):
     acpid: fix logging
    
    Sören Tempel (1):
     login: don't print motd if .hushlogin exists in users home
    
    Thiago Jung Bauermann (2):
     libarchive: auto-detect .Z files as well
     bzcat.tests: Run both .gz and .bz2 tests, and add .Z tests
    
    Tito Ragusa (4):
     libpwdgrp: rewritten to use malloced implementation
     libpwdgrp: line counting in error meesages is broken, remove it
     libpwdgrp: fix thinko in getpwnam
     libbb: another unit test for is_suffixed_with
    
    Vladislav Grishenko (1):
     zcip: fix wrong comparison of source IP with our IP
    
  • 23 March 2015 -- BusyBox 1.23.2 (stable)

    BusyBox 1.23.2. (git, patches, how to add a patch)

    Bug fix release. 1.23.2 has fixes for dc (more tolerant to lack of whitespace), modinfo (was not ignoring directory component of path names in a few places), modprobe (better compatibility for "rmmod" alias), wget (--header now overrides built-in headers, not appends to).

  • 27 January 2015 -- BusyBox 1.23.1 (stable)

    BusyBox 1.23.1. (git, patches, how to add a patch)

    Bug fix release. 1.23.1 has fixes for ash (fixed a problem with ${#N} expansion), ftpd (fixed "zombie apocalypse"), modprobe (was not ignoring directory component of path names in a few places), vi.

  • 23 December 2014 -- BusyBox 1.23.0 (unstable)

    BusyBox 1.23.0. (git, patches, how to add a patch)

    Sizes of busybox-1.22.1 and busybox-1.23.0 (with equivalent config, static uclibc build):

     text	 data	 bss	 dec	 hex	filename
     873357	 489	 7072	 880918	 d7116	busybox-1.22.1
     876323	 490	 7072	 883885	 d7cad	busybox-1.23.0

    Changes since previous release:

    Aaro Koskinen (2):
     less: make -E work
     install: implement -t DIR
    
    Ari Sundholm (2):
     df: implement -T option
     df: fix -T option when ENABLE_FEATURE_HUMAN_READABLE=0
    
    Bartosz Golaszewski (17):
     gitignore: ignore files generated by 'make test'
     sort: remove a magic number from compare_keys()
     sort: check global flags on fallback sort
     ntpd: fix compilation warnings
     top: fix compilation warnings
     grep: properly handle grep -w "^str" in !EXTRA_COMPAT case too
     Kbuild: move CONFIG_PAM to general configuration
     shuf: fix a segfault on 'shuf -e'
     shuf: improve help text
     docs: update new-applet-HOWTO.txt
     find: add optional support for '-exec ... {} +'
     libbb: use a wrapper around sysconf(_SC_CLK_TCK) to save a few bytes
     unit-tests: implement the unit-testing framework
     Rename INIT_LAST to INIT_FUNC to avoid confusion
     gitignore: add testsuite/echo-ne
     libbb: use sendfile() to copy data between file descriptors
     Config: select PLATFORM_LINUX if using sendfile()
    
    Baruch Siach (2):
     nandwrite: fix build when long options are disabled
     nanddump: don't show --bb in usage when disabled
    
    Bernhard Reutner-Fischer (1):
     libbb: provide usleep() fallback implementation
    
    Cristian Ionescu-Idbohrn (1):
     tail: adjust help/usage texts
    
    David Marchand (1):
     modinfo: fix module parsing with kernel >= 2.6.37
    
    Denys Vlasenko:
     *: add conditional support for -v / --verbose
     *: exit with 127 if applet name wasn't found - it's more POSIXy
     ash,hush: do not segfault on $((2**63 / -1))
     ash,hush: fix a thinko about 2^64-1 factorization
     ash,hush: improve randomness of $RANDOM, add easy-ish way to test it
     ash,hush: run reinit_unicode() only if makes sense
     ash,hush: set $HOSTNAME is bash compat. Closes 7028
     ash: factor out ASH_HELP config option
     ash: fix handling of negative start value in ${v:start:len}
     ash: fix off-by-one in "jobs %4" handling. Closes 7310
     ash: in bash compat mode, always export $SHLVL
     ash: make "local VAR" unset VAR (bash does that)
     ash: make ${#var} unicode-aware
     awk: fix handling of "if ... break ; else ..." - closes 7226
     crond: implement "SHELL=prog" in crontab. Export LOGNAME as POSIX wants
     crond: simplify logging code
     du, copy_file: fix file matching on cramfs. Closes 5456
     fakeidentd: simplify ndelay manipulations
     false: make "false --help" exit with 1
     find: exit code fixes for find -exec
     find: fix a regression introduced with -HLP support
     find: support -perm /BITS. Closes 7340
     find: use sysconf(_SC_ARG_MAX) to determine the command-line size limit
     ftpd: do not use root_fd if we are not in chroot
     ftpd: escape chroot prior to re-executing ls helper
     ftpd: for LIST, open current directory *in the child*
     ftpd: make LIST command show dotfiles too
     ftpd: support deprecated XPWD command
     getty: set tty attrs so that control chars are shown as ^c
     grep: fix "grep -r PATTRN SYMLINK_TO_DIR"
     grep: fix -w match if first match isn't a word, but second is. Closes 4520
     grep: fix two bugs with -w
     hush: make "true" built-in
     hush: make ${#var} unicode-aware
     hwclock: fix setting of tz_minuteswest. Closes 5414
     init: do not run shutdown/reexec actions from signal handler
     init: if libc-based Unicode support is on, run setlocale(LC_ALL, "") at startup
     ip link: add support for "address ETHADDR". Closes 4862
     less: accept and ignore -s
     less: disable "suppress empty wraparound" optimization
     less: fix bugs discovered with "git log -p | less -m" on kernel tree
     less: move "retry-on-EAGAIN" logic closer to read ops
     libarchive: add capability to unpack to mem.buffer
     libarchive: open_zipped() does not need to check extensions for e.g. gzip
     libbb/obscure.c: code shrink. Suggested by Tito.
     libbb: FreeBSD fix for B<num> baud rate constants not fitting into a short
     libbb: don't die if crypt() returns NULL
     libbb: fix a bad check for uclibc >= 0.9.31
     libbb: fix bb_ask() to flush input before prompt, not after. Closes 7190
     libbb: fix compile failure if both ARG_MAX and _SC_ARG_MAX are defined
     libbb: fix empty PATH components handling
     libbb: fix parsing of "10101010" date/time form
     libbb: fix thinko in rtc_xopen()
     libbb: if opening /dev/loopN returns ENXIO, don't try N++
     libbb: make rtc_xopen try harder on EBUSY
     libbb: make syslog level for bb_error_msg's configurable. use it in crond
     libbb: open_zipped() should not fail on non-compressed files
     libbb: use ARG_MAX for bb_arg_max() only if it's 60k+
     lineedit: don't fall back to simple line input if tty is in raw mode
     ls: make "ls -s DIR" show total too. Closes 4946
     lzop: add overflow check
     make xmalloc_open_zipped_read_close result NUL terminated
     man: accept a list of dirs in $MANPATH
     man: default to ascii
     man: do not mangle $MANPATH in memory
     mdev: treat zero-length /dev/mdev.seq the same as "\n" one. Closes 7334
     modprobe,rmmod: reject module names with slashes
     modprobe-small: (un)load all modules which match the alias, not only first one
     modprobe-small: fix help messages for aliased module-related applets
     modprobe-small: fix safe_strncpy truncating last char of module name
     modprobe-small: remove redundant aliases from modules.dep.bb
     nc: fix option bit positions. Closes 6926
     networking/ssl_helper: experimental matrixssl-based ssl helper
     networking: explain isrv_run() API
     ntpd: add optional support for /etc/ntp.conf
     ntpd: add support for -I IFACE
     ntpd: adjust last packet's recv time after a step
     ntpd: be less eager to use shorter poll intervals
     ntpd: fix wrong delay value in one of the printed messages
     ntpd: remove now unnecessary check for IP_PKTINFO definition
     ntpd: truly ignore high delay packet
     ping: revert "try SOCK_DGRAM if no root privileges"
     platform.h: undef HAVE_STRCHRNUL only on correct versions of FreeBSD
     rtcwake: fix incorrect (reversed) rtc/sys adjuestment; code shrink
     script: make it work even if fd 0 is closed
     sed: fix "sed CMD -i nonexistent_file". Closes 7484
     sed: fix a buglet in s///NUM handling
     sendmail: make -f optional, document its default value
     sha3: add 32-bit optimized bit-sliced implementation
     sha3: code shrink (and speedup for SHA3_SMALL=0)
     shuf: new applet
     sysctl: do not error out showing write-only data. Closes 6386
     syslogd: make "-O -" log to stdout
     tar: fix "tar -cJ" ignoring -J option. Closes 7706
     tar: tighten up pax header validity check
     taskset: fix logic error in "if it doesn't start with 0x..."
     taskset: support CPU masks for more than 64 CPUs
     test: fix mishandling of "test '(' = '('" and similar
     tftpd: support full 512-byte requests
     tftpd: tweak HP PA-RISC firmware bug compatibility
     top: fix memset length (sizeof(ptr) vs sizeof(array) problem)
     trylink: emit names of linked executables
     ubiupdatevol: fix -t to not require an option. Closes 7466
     udhcpc: account for script run time
     udhcpc: don't use BPF filter, users report problems (bugs 4598, 6746)
     udhcpc: fix BPF filter. Hopefully fixes the root cause of 4598 and 6746
     udhcpc: ignore NAKs from "wrong" servers. Closes 4267
     udhcpc: in comments, explain the kind of raw socket we create
     udhcpc: make hostname sanitization optional. Closes 3979
     udhcpd: if a lease from lease file coincides with a static one, ignore it
     vi: clear undo buffer when we change to another file
     vi: fix incorrect memory access on brace matching. Closes 7256
     wget: add commented-out code to use ssl_helper instead of openssl
     wget: add support for https using "openssl s_client" as a helper
     wget: fix a case where progress bar isn't updated if writes are very slow
     wget: fix use-after-free of ->user. Closes 6836
     xargs: add support for -I and -i. Closes 493
     zcat: complain if input is not compressed
    
    Drew Moseley (1):
     build system: specify '-nostldlib' when linking to .o files
    
    Eugene Rudoy (1):
     iplink: fix build with kernel versions prior to 2.6.23
    
    Florian Fainelli (1):
     ping: add -p to specify data pattern
    
    Isaac Dunham (1):
     unlink: new applet
    
    Jacob Kjaergaard (1):
     flashcp: change BUFSIZE to 4k
    
    Jeremy Kerr (1):
     udhcp: add PXELINUX path prefix option (code 210) definition
    
    Jody Bruchon (1):
     vi: undo support for vi with intermediate queuing
    
    John Spencer (1):
     man: parse "DEFINE pager" in config
    
    Joshua Judson Rosen (5):
     syslogd: avoid spurious ftrunctate() calls for "-b 0"
     syslogd: remember to un-writelock log-files even when called with "-b 0"
     syslogd: Unify unlink/truncate + unlock log-rotation logic
     syslogd: syslogd: don't *decrement* log_file->size on write failures
     syslogd: make "reopen log file every second" logic work for multiple logs
    
    Kaarle Ritvanen (2):
     ifupdown: support 'link' address family
     sendmail: use FQDN in default envelope sender
    
    Ken Sharp (1):
     zcip: fix link-local IP conflict detection
    
    Matt Whitlock (3):
     avoid calling bb_strtou twice in MIN macro expansion
     fix interaction of -a and -p options in swapon
     add discard option -d to swapon
    
    Matthias Andree (1):
     build system: fix non-portable sed constructs.
    
    Michael Gernoth (1):
     stat: fix printing selinux context and null-dereference
    
    Michael Tokarev (3):
     testsuite: fix last "which" change
     init: do not fail build if SIGPWR is not defined
     iproute: support onelink route option and print route flags
    
    Michel Stam (3):
     udhcpd: add option for tweaking arpping
     zcip: allow our own class B range to be used for ZeroConf
     zcip: Add environment variable for overriding log functionality
    
    Mike Frysinger (2):
     uname: fix up usage documentation
     appletlib: fix set-but-unused warning
    
    Miroslav Lichvar (4):
     ntpd: don't wait for good offset before disabling burst mode
     ntpd: split out poll adjusting code
     ntpd: don't stay at short polling interval
     ntpd: calculate offset to jitter ratio before updating jitter
    
    Morten Kvistgaard (1):
     ftpd: add optional support for authentication
    
    Pascal Bellard (1):
     fatattr: new applet
    
    Peter Kümmel (1):
     Make it possible to override LOGIN_FAIL_DELAY in CONFIG_EXTRA_CFLAGS
    
    Richard Genoud (4):
     nanddump: correct rounding to next page (lead to infinite loop)
     nanddump: add options --bb=skipbad and padbad
     nanddump: kill -b Omit bad block
     nanddump: change default to --bb=skipbad
    
    Romain Naour (1):
     su: add a delay if the password is incorrect
    
    Ron Yorston (1):
     lineedit: don't block when looking for escape sequence in vi-mode
    
    Ryan Mallon (1):
     fakeidentd: fix use-after-free
    
    Timo Teräs (1):
     top: fix and merge code to parse /proc/meminfo
    
    Tito Ragusa (4):
     adduser,addgroup: introduce and use CONFIG_LAST_ID
     swapon/swapoff: size reduction, cleanup, fixes, improvements
     swapon/swapoff: -a returns 0 on ignored errors
     which: rewrite
    
  • 20 January 2014 -- BusyBox 1.22.1 (stable)

    BusyBox 1.22.1. (git, patches, how to add a patch)

    Bug fix release. 1.22.1 has fixes for find (was requiring the path argument in some cases, unlike GNU find), grep (fixes for -w handling), ntpd (wasn't slewing time after large negative step), compile fixes for some configurations.

  • 1 January 2014 -- BusyBox 1.22.0 (unstable)

    BusyBox 1.22.0. (git, patches, how to add a patch)

    Sizes of busybox-1.21.1 and busybox-1.22.0 (with equivalent config, static uclibc build):

     text data bss dec hex filename
     891522 497 7584 899603 dba13 busybox-1.21.1
     893754 497 7568 901819 dc2bb busybox-1.22.0

    Changes since previous release:

    Aaro Koskinen (9):
     fdisk_sun: fix corrupted partition data with blank disk
     fdisk_sun: fix partition alignment
     sendmail: avoid sending mail to wrong addresses
     sendmail: don't mangle e-mail headers
     sendmail: support addresses inside angle brackets
     sendmail: support address lists
     sendmail: support long header fields for recipients
     sendmail: don't add To: header if it already exists
     sendmail: don't add multiple To: headers
    
    Alexander Shiyan (2):
     nanddump: fix build if nandwrite isn't enabled
     flash_eraseall: implement -N
    
    Bartosz Golaszewski (6):
     grep: don't bail out on first mismatch if '-w' option is set
     networking: code shrink
     date: accept 'yyyy-mm-dd HH' and 'yyyy-mm-dd' date formats
     Refactor catv. Move visible() from stty to libbb.
     tail compat: fix header printing for tail -f
     bloat-o-meter: add usage info
    
    Bernhard Reutner-Fischer (11):
     awk: Fix handling of functions with empty body
     setserial: Fix typo: s/baund_rate/baud_rate/g
     chrt: remove warning for _POSIX_PRIORITY_SCHEDULING
     buildsys: Add helper to list suid applets
     awk: Fix handling of functions with empty body
     swaponoff: shrink
     ash: Use setvar2 some more
     ash: Set SHLVL in ASH_BASH_COMPAT
     fstrim: -17b
     fstrim: Indicate failure on error
     fstrim: Needs to fire at the mp, not bd
    
    Bernhard Walle:
     pgrep: fix -x option
    
    Bogdan Purcareata:
     init: halt on SIGPWR too
    
    Cristian Ionescu-Idbohrn:
     foo*sum: Correct syntax error
    
    Cédric Cabessa:
     syslogd: use _PATH_LOG when available
    
    Daniel Borca (4):
     platform: strchrnul is missing if __APPLE__
     dpkg-deb: cosmetic correction to usage text
     ping: try SOCK_DGRAM if no root privileges
     build system: fix make gconfig
    
    David A. Wheeler (2):
     sed: accept -E as a synonym for -r
     sed: accept s///i as a synonym for s///I ("ignore case")
    
    Denys Vlasenko:
     Call setlocale("") , not "C", if we want to set the default one
     Commonalize typical [b,]k,m suffix struct
     Make smart_ulltoa return pointer to end (allows for code shrink in callers)
     Makefile.custom: make "make release" delete .gitignore files too
     Move create_icmp[6]_socket to its only user, and simplify it
     Use unsigned printf/scanf conversion where more appropriate
     adduser: check whether run with no USERNAME. Closes 6728
     awk: fix a bug in argc counting in recent change
     awk: fix length(array)
     awk: use "long long" as integer type, not "int"
     bootchartd: warn if .config looks wrong
     build system: use od -b instead of od -t x1
     bunzip2: fix off-by-one check
     chpst: fix a bug where -U USER was using wrong USER (one from -u USER)
     cryptpw: do not segfault on EOF. Closes 6350
     dd: do not reuse local variables for unrelated values
     dd: fail if swab is attempted on odd-sized block
     dd: support conv=swab
     decompress_unlzma: 10% speedup in "small" code
     decompress_unlzma: make "fast" version a bit smaller
     devfsd: remove static variable
     ether-wake: shorten help text, reduce packet buffer size
     find: support -HLP
     find: get rid of nested function (it's a gcc-ism)
     fix assorted unused code and wrong format specs found by cppcheck (bug 6716)
     fix build error with musl libc due to if_slip.h
     fix error message on failure to open /dev/null; fix zcat's help text
     flashcp: pad output to BUFSIZE. Hopefully closes 5882
     foo*sum: report I/O errors, don't merely exit with 1
     head,tail: use common suffix struct. simplify help text
     head: support -n -NUM and -c -NUM
     hexdump: don't unconditionally limit the usable address range
     hexdump: need to use xstrtoull for off_t
     hostid: do not output sign-extended host id. Closes 6056
     httpd: don't allow tabs and multiple spaces in request string
     httpd: make sure pfd[TO_CGI].revents is cleared before poll()
     httpd: treat errors from stdin correctly.
     hush: fix build failure if FEATURE_EDITING=y && !HUSH_INTERACTIVE
     hush: fix for "while false && true; do echo BUG; break; done". Closes 6170
     hush: source builtin should override $N only if it has args
     hush: typo fixes in comments
     ifplugd: make -k send SIGINT, not SIGQUIT
     ifupdown: support "source" stanza in /etc/network/interfaces
     init: don't use fixed size buffer for command
     init: remove special-case code for machines with less tham 1 MB of RAM
     iplink: comment out include <net/if_packet.h>
     iplink: fix build error (IFLA_VLAN_PROTOCOL defined before include)
     less: support "less 1<>TTY"
     libbb: introduce and use strftime_[YYYYMMDD]HHMMSS()
     lineedit: \W on "/bin" should show "bin", not "/bin"
     lineedit: add handling of \H in prompt
     lineedit: fix multi-line PS1 handling: calculate PS1 length from last \n
     lineedit: implement \T \t \A \@ prompts escapes, fix \W escape, drop \!
     lineedit: improve Unicode handling (still buggy though)
     lineedit: use unicode_strwidth instead of unicode_strlen
     loadkmap: explain what happens with K_ALLOCATED key value
     logread: don't call shmdt() before exit, kernel does it for us
     logread: flush output. Closes 6710
     logread: intercept all fatal signals, not just SIGINT
     losetup: assorted fixes. Closes 6314
     lzop: fiq -q and OPTION_DECOMPRESS mismatch
     make --help return exitcode 0. Closes 5612
     man: install to /usr/bin, not /sbin
     md5/sha512: a better fix for strict aliasing warnings
     mdev: add environment variable match
     mdev: call index_in_strings on $ACTION only after we checked it for NULL
     mdev: chdir back to /dev after trying to read firmware
     mdev: extend debug logging output
     mdev: improve $SEQ handling; improve debug logging
     mkfs_minix: use get_volume_size_in_bytes instead of local version
     nc: don't redirect stderr to network in -e PROG mode
     nc: exit when both stdin and network are closed
     nc: fix build failure ("subscripted value is neither array nor pointer")
     nc: remove some dead code
     nc: remove unnecessary "errno = 0"
     nc: use symbolic SHUT_WR instead of literal 1
     nc_bloaty: support -ll and -lk. Closes 2245
     nslookup: set default DNS server again. Hopefully helps with 675
     ntpd: do not invalidate datapoints after step
     ntpd: drop delay outliers; run "unsync" handler if no replies for some time
     ntpd: let user know if spike was detected
     ntpd: make "unsync" code actually work
     ntpd: promote log level 3 to production
     ntpd: set G.last_script_run even if script isn't configured
     ntpd: set offset to 0.0 in "unsync" event
     ntpd: speed up resyncing if our clock is seriously off
     ping[6]: accept and ignore -n. Code shrink
     ps: fix sscanf format specifier (%l); make uptime unsigned
     ps: seconds_since_boot: uint64_t -> ulong
     pstree: fix theoretically unsafe code
     rfkill: use new-style config/kbuild/applet
     rpm: make -ql display more compatible; improve help text
     rpm: stop using statics; move main() to the end of the source file
     rpm: unmap rpm file before working with next one
     rpm: use "create+rename" method of replacing existing files
     run-parts: stop providing incompatible short options
     sed: document where we are more liberal then GNU
     sed: fix "sed clusternewline" testcase
     sed: fix matching of newlines by $
     sed: fix memory leak in 'r FILE' command
     sed: open input files sequentially to avoid EMFILE
     sed: remove now-redundant backslash-newline handling
     stty: disable CIBAUD leak check - it is not necessary on Linux
     sulogin: use common password-checking routine
     tail: track file size only in -f mode
     tar: add a testcase for previous commit
     tar: fix exitcode check for MMU-spawned unpacking helpers
     tar: prevent empty file to be treated as valid tarball
     testsuite: fix false positives for du
     touch: add conditional support for -h
     ubi_tools: add forgotten argv++
     ubi_tools: enhance -s option to allow size multiplier to match mtd-utils
     ubi_tools: extend supported volume size to 64 bits; shrink code
     udhcpc6: fix port numbers used if !FEATURE_UDHCP_PORT
     udhcpc: allow zero server-id. Closes 6614
     udhcpc: fix a problem with binary-encoded options #2
     udhcpd: add -I LOCAL_ADDR option
     unicode: check $LC_ALL to detect Unicode mode, not only $LANG
     unicode: check $LC_CTYPE too to detect Unicode mode
     unpackers: by users' request, print compression percentage if -v and DESKTOP
     unzip: increase PEEK_FROM_END from 16k to 64k
     unzip: survive lack of CDF on non-streaming zip files
     vasprintf: do not use xmalloc, it will deadlock on OOM
     vasprintf: return -1 on strdup failure
     vi: make regexp search case-insensitive if ":set ignorecase" is active
     volume_id_internal.h: drop unoptimized byteswap routines
     wall: access FILE under real user's credentials
     wget: do not abort if "_" is encountered in a HTTP header
     zcat: fix "zcat FILE" trying to do detection twice
     zcat: if seamless uncompressors are defined, autodetect file's format
    
    Flemming Madsen:
     ash,hush: history builtin
    
    Guilherme Maciel Ferreira (2):
     traceroute: free some memory allocated by xzalloc()
     wget: if FEATURE_CLEAN_UP, free(ptr_to_globals)
    
    James Hogan:
     grep: fix grep -x to not set REG_NOSUB
    
    Jeremy Kerr:
     udhcp: add PXELINUX config file option (code 209) definition
    
    Jody Bruchon:
     fdisk: fix GPT size math errors
    
    Johannes Stezenbach:
     udhcpc: make DHCP packets to have at least 300 DHCP bytes
    
    John Spencer:
     man: find posix man pages
    
    Jonathan Liu:
     sulogin: allow system maintenance login if root password is empty
    
    Kang Kai:
     testsuite/du/du-k-works: fix false positive
    
    Kuleshov Aleksey:
     arp: fix -H/-t handling.
    
    Lasse Collin (11):
     xz: omit explicit \0 from HEADER_MAGIC
     xz: update README
     xz: avoid "NOTE:" in xz.h
     xz: add a comment about using uint32_t as vli_type
     xz: make bcj_x86_test_msbyte() an inline function
     xz: remove an empty line from xz_dec_lzma2.c
     xz: add C++ support to xz.h
     xz: fix decoding of LZMA2 streams having no uncompressed data.
     xz: fix incorrect XZ_BUF_ERROR
     xz: mention xzminidec.c in README
     xz: support concatenated .xz streams
    
    Lauri Kasanen (2):
     wget: add support for connect timeout
     wget: user-friendly fallback to http
    
    Leonid Lisovskiy:
     xz: fix put_unaligned_{l,b}e32
    
    Malek Degachi:
     fstrim: New applet
    
    Mandeep Singh Baines:
     losetup: fix util-linux compatibility
    
    Michael Tokarev (4):
     fix bashisms in testsuite/
     expand: use printable_string instead of hard-coding implementation
     do not fail build if MAXSYMLINKS isn't defined
     hostname: do not use gethostbyname() for "hostname -s"
    
    Mike Frysinger (12):
     udhcpc: support resolv.conf symlinks
     udhcpc: tweak math shell style with the metric var
     bbunzip: ignore the -q flag with the decompressors
     bbunzip: fix order of flags vs bit defines
     archival: note implicit dependencies between lzop & bbunzip
     udhcpc: use readlink rather than realpath
     platform: use KERNEL_VERSION to simplify uClibc version checking
     readlink: uClibc supports automatic allocation too now
     readlink: note that our -f is really -e
     pstree: stop truncating thread names
     md5/sha512: fix strict aliasing warnings
     trylink: only prefix libs with -l
    
    Nicolas Dichtel:
     networking: fix potential overflow in ife_print6()
    
    Nikolaus Voss:
     mdev: use $DEVNAME in uevent sysfs file for device node name
    
    Oliver Metz:
     volume_id: fix ntfs attribute search
    
    Patrick McHardy:
     ip link: add VLAN support
    
    Paul B. Henson (2):
     ubimkvol: add -m option to create volume of maximum size
     ubi_tools: fix typo in strcpy
    
    Paulius Zaleckas:
     init: don't srop unterminated processes' entries during inittab reload
    
    Peter Korsgaard (3):
     run-parts: add --exit-on-error | -e support
     run-parts: fix unicode creep in --help
     ar: read_num(): fix reading fields using the entire width
    
    Rich Felker:
     *: change execl sentinels from NULL to (char*)0
    
    Ron Yorston:
     vi: fix adjustment of buffer on partial file read
    
    Ryan Mallon (2):
     libbb: Add xsetegid(), xseteuid(), xopen_as_uid_gid() functions
     wall,crontab: use xopen_as_uid_gid()
    
    SASAKI Suguru:
     tar: fix tar -T to add entries in the exact order as the input list
    
    Shawn J. Goff:
     lineedit: initialize delptr
    
    Stefan Hellermann (2):
     ash: move code to allow setting $HOME in /etc/profile
     ash: read $HOME/.profile instead of $(pwd)/.profile
    
    Sven-Göran Bergh (5):
     volume_id: Adopt to new kbuild style.
     volume_id: Adopt to new config style.
     volume_id: nilfs config description.
     volume_id: add f2fs detection
     awk: optionally support -e AWK_PROG
    
    Thomas De Schampheleire (2):
     nameif: fix use-after-free in ENABLE_FEATURE_CLEAN_UP code
     lsof: correct check for symbolic link
    
    Thomas Petazzoni:
     libbb: use <poll.h> instead of <sys/poll.h>
    
    Tito Ragusa (2):
     ifplugd: use a larger netlink buffer
     swapon: support "pri=NNN" in fstab
    
    Uros Vampl:
     killall5: return 2 if no processes got killed
    
    Yuan-Hsiang Lee:
     init: fix illegal memory access when max message length is reached
    
  • 29 June 2013 -- BusyBox 1.21.1 (stable)

    BusyBox 1.21.1. (git, patches, how to add a patch)

    Bug fix release. 1.21.1 has fixes for ntfs detection (big-endian fix), xz decompression of concatenated streams, mdev acquired a [ENV=regex;] extension instead of undocumented subsystem match hack it used to have prior to 1.21.x.

  • 21 January 2013 -- BusyBox 1.21.0 (unstable)

    BusyBox 1.21.0. (git, patches, how to add a patch)

    Sizes of busybox-1.20.2 and busybox-1.21.0 (with equivalent config, static uclibc build):

     text data bss dec hex filename
     895377 497 7584 903458 dc922 busybox-1.20.2
     897317 497 7584 905398 dd0b6 busybox-1.21.0

    Changes since previous release:

    Alexey Froloff (1):
     udhcpc: gracefully handle packets with CHECKSUM_PARTIAL
    
    Andreas Oberritter (2):
     ifupdown: improve compatibility with Debian
     get_linux_version_code: don't fail on Linux version strings like "3.0-foo"
    
    Anthony G. Basile (2):
     build system: fix build failure when only gunzip is selected
     CONFIG_PID_FILE_PATH: new configuration option for pidfile paths
    
    Aurelien Jarno (1):
     *: declare strings with ALIGN1, as appropriate
    
    Baruch Siach (3):
     nanddump: use the right operator of logic AND
     nanddump: skip bad blocks when instructed to do so
     nanddump: invert the meaning of the -o parameter to match upstream
    
    Bernhard Reutner-Fischer (1):
     mount: fix -o user=foo mishandling, fix unc= generation, add prefixpath=
    
    Bernhard Walle (1):
     build system: fix build of kconfig on Darwin
    
    Boris Reisig (1):
     tar: support -J, --xz explicit compression option
    
    Bradley M. Kuhn (1):
     Simplify copyright/license notice that appears in the binary
    
    Christoph Lohmann (1):
     mdev: tell kernel that we didn't find the firmware
    
    Cliff Frey (1):
     lineedit: fix Alt-D when cursor==0
    
    Dennis Groenen (1):
     lineedit: histfile can get emptied when CONFIG_FEATURE_EDITING_SAVE_ON_EXIT=y
    
    Denys Vlasenko:
     build system: stop .eh_frame generation
     build system: fix build failure when compressed help is selected, but bz2 compression is not
     scripts/kconfig/mconf: work on systems w/o SIGWINCH
     platform.h: disable ALIGNn macros for s390[x]
     adduser: install to /usr, not /, like all other similar tools
     ash: fix "read -s" + ^C. Closes 5504
     ash: fix a bug in >${varexp} handling. Closes 5282
     ash: implement export -n
     ash: revert wrong "fix" for an apparent memory leak. Closes 5822
     awk: fix FS assignment behavior. Closes 5108
     awk: make -F STR interpret escape sequences. Closes 5126
     brctl: fix build failure by s/strtotimeval/bb_strtotimeval/ (android has strtotimeval)
     busybox: tweak help text and copyright year
     decompress_uncompress: comment out debug printout on corrupted data
     decompress_uncompress: move 'code' variable into loop - sole user
     dhcpd: write lease file on exit
     dpkg: fix creation of .list files (were empty since b768aeb). Closes 5324
     du: document incompatibility with standard tool
     examples/mdev_fat.conf: small addition
     find: if DESKTOP=y, support -wholename (synonym for -path)
     find: make -mindepth N -xdev correctly stop on mountpoints
     ftpd: fix MDTM's month value. Closes 5336
     ftpd: free allocated string on error path
     getty: fix for NOCTTY killing us with SIGHUP
     grep: fix grep -Fw not respecting the -w option. Closes 5792
     ifconfig: do not accept "ifconfig eth0 up 1.2.3.4/17" (ip with mask). Closes 5786
     libbb: correctness/size tweaks in signal-related helpers
     lineedit: in !EDITING config, return -1 on fgets error
     login: increase login name size limit from 32 to 64
     lpr: don't send 0-byte print jobs (compat)
     man: fix handling of gzipped manpages
     mdev: add support for $DEVNAME and /dev/mdev.log debug aid
     mdev: fix mode of dir1 in =dir1/dir2/file rule
     mdev: remove undocumented subsystem/devname matching hack
     mdev: when found, print major,minor into mdev.log
     modprobe_small: make rmmod to NOT remove dependencies. Closes 5162
     mount: do not pass "comment=ANYTHING" option to kernel. Closes 5240
     mount: fix the wrongly stored fs creation time
     mount: set up RO loop device if mount -o ro. Closes 4784
     mount: support strictatime option. Closes 5240
     ntpd: on time step, kill all outstanding replies from other peers
     sed: fix handling of s/// which has empty matches
     sed: fix zero chars match/replace
     sha3: make size/speed optimization decision configurable
     syslogd: do not segfault on parse error when using default config. Closes 5762
     telnet: convert CR -> CR LF, not CR -> CR NUL when sending data to server
     telnet: convert Enter -> CR LF in line mode too
     tftpd: fix -u USER to work with chroot. Closes 5348
     top/ps: argv0:"gdm-session-worker [pam/gdm-password]" == comm:"gdm-session-wor"
     top: do not touch stdin if -b
     top: fix "last CPU" parsing
     top: implement scrolling up/down (_very_ useful)
     udhcp[cd]: fix binding to network aliases. Closes 5432, 5438
     udhcpc: make -O <numeric_opt> work. Closes 5402
     udhcpc[6]: show select timeout in log
     unzip: make options parsing more robust on getopt w/o gnu extensions
     vi: do not set autoindent by default
     vi: nuke FEATURE_VI_OPTIMIZE_CURSOR
     vi: save/restore screen upon invocation
     volume_id/ext: detect ext4 too
     wget: correctly handle failure to -c (continue)
     wget: make -c _not_ truncate the file
     wget: reorder fread and poll: poll only if fread returns EAGAIN. Closes 5426
     wget: try reading after poll timeout - stdio may have buffered data. Closes 5426
    
    Eric Martin (1):
     acpid: add missing lid switch definition
    
    Etienne Le Sueur (1):
     tar: fix 256-bit encoded number decoding
    
    Felix Fietkau (1):
     udhcpc[6]: allow discover_retries == 0 (infinite)
    
    Jon Tollefson (1):
     ash: fix a memory leak
    
    Joshua Kahlenberg (1):
     sysctl: implement -q
    
    Lauri Hintsala (1):
     powertop: fix error message
    
    Lauri Kasanen (1):
     sha3sum: new applet
    
    Linus Walleij (2):
     fbset: respect rgba configuration lines in fb.modes
     fbsplash: support non-RGB565 pixels in 16-bit mode
    
    Manuel Zerpies (1):
     flashcp: remove unused variable opts
    
    Martin Santesson (1):
     mount: add unc option to CIFS mount (needed for Linux 3.4+)
    
    Matt Reimer (1):
     nanddump: make dumping read-only partitions work
    
    Michael Tokarev (2):
     ps: use separate get_uptime() and make it work on non-linux too
     *: declare strings with ALIGN1, as appropriate
    
    Mike Frysinger (5):
     udhcpc6: depend on ipv6
     include sys/resource.h where needed
     disable format security warnings
     build system: use pkg-config to look up selinux libs
     ifenslave: fix missing close paren
    
    Mimi Li (1):
     sed: allow 'w' cmd to use two address form
    
    Natanael Copa (2):
     tar: implement --no-recursion
     unzip: ignore chmod errors
    
    Nicolas Thill (1):
     brctl: fix description and usage
    
    Pascal Bellard (1):
     su: do not change to home dir unless -l
    
    Paul Marks (1):
     ntpd: fix incorrect m_status field in outgoing packets. Closes 5120
    
    Peter Korsgaard (4):
     dmesg: handle multi-char log levels
     klogd: handle multi-char log levels
     syslogd: add option to log to Linux kernel printk buffer
     syslogd: convert dummy functions to statics and get rid of IF_FEATURE_* checks
    
    Pierre Carrier (1):
     config: do not refer to HTTPS for wget
    
    Ron Yorston (2):
     sendmail: use host rather than NIS domain name for HELO
     mktemp: fix mktemp -u temp.XXXXXX returning garbage when TMPDIR is set
    
    S-G Bergh (2):
     blkid: show filesystem when both label and UUID are missing, but type is known
     volume_id: add exFAT detection
    
    Simon B (4):
     ln: support -T and -v
     sed: support long opts and -iSFX
     mkdir,rmdir: accept and ignore -v, --verbose
     mv: accept but ignore -v
    
    Sven-Göran Bergh (6):
     blkid: add type display for btrfs
     blkid: add support for nilfs2
     blkid: add type display for hfsplus
     volume_id: display hfs[+] 128-bit UUID properly
     volume_id: uuid_format small code shrink
     volume_id: add squashfs detection
    
    Tanguy Pruvot (2):
     testsuite: some more awk tests related to conditions
     modinfo: match more standard module fields and fix version field
    
    Tias Guns (5):
     inetd: fix build failure in Android
     android: fix 'stat', ifdef S_TYPEIS* in coreutiles/stat.c
     platform.h: Android tweaks: ioprio defines, BB_ADDITIONAL_PATH
     android: some sensible defconfig changes
     libbb: add missing_syscalls.c: for now, only Android syscalls
    
    Timo Teräs (1):
     fbsplash: fix regression from e4fa7b7
    
    Tito Ragusa (1):
     adduser: make it accept "adduser USER GROUP" form
    
    Vladimir Dronnikov (1):
     wget: add dummy --no-cache
    
    Yao Zhao (1):
     testsuite: make mkfs.minix test not fail spuriously on big endian
    
    walter harms (1):
     refactor correct_password.c to avoid one if
    
  • 2 July 2012 -- BusyBox 1.20.2 (stable)

    BusyBox 1.20.2. (git, patches, how to add a patch)

    Bug fix release. 1.20.2 has fixes for ash (fix for variable expansion in redirection), ifup/down (fix for "pre-up" and "pre-down" handling), man (fixes for compressed man pages handling), mke2fs (important fix! due to misplaced s_mkfs_time field, ext4 driver couldn't mount our images), ps (fix for getting uptime on non-Linux platforms), tar (fix base-256 decoding).

  • Old News

    Click here to read older news


👁 This site created with the vi editor
👁 This site is kindly hosted by OSL