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.

I want to thank the following companies which are providing support for the BusyBox project: Analog Devices, Inc. provided a Blackfin development board free of charge. Blackfin is a NOMMU processor, and its availability for testing is invaluable. If you are an embedded device developer, please note that Analog Devices has an entire Linux distribution available for download for this board. Visit http://blackfin.uclinux.org/ for more information.

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

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.30.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

" +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

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 "

" 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

, \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 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