On Saturday 28 July 2012 15:30:37 Jonathan McCrohan wrote:
> Based on Peter Wagner's busybox 1.20.0 patch.

Curses, beaten to the punch!

I've attached my patch anyway since I poured through the config options to keep 
them as OpenWRT friendly (and compatible) as possible in terms of default 
values (for example, keeping "default IPV6"), there's also some whitespace 
cleaned out that shouldn't be present (so it doesn't crop up again in future 
updates that use the perl script to generate menuconf)

Regards,
Oliver
diff --git a/package/busybox/Makefile b/package/busybox/Makefile
index ef7f518..d8e9913 100644
--- a/package/busybox/Makefile
+++ b/package/busybox/Makefile
@@ -8,14 +8,14 @@
 include $(TOPDIR)/rules.mk
 
 PKG_NAME:=busybox
-PKG_VERSION:=1.19.4
-PKG_RELEASE:=2
+PKG_VERSION:=1.20.2
+PKG_RELEASE:=1
 PKG_FLAGS:=essential
 
 PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.bz2
 PKG_SOURCE_URL:=http://www.busybox.net/downloads \
 		http://distfiles.gentoo.org/distfiles/
-PKG_MD5SUM:=9c0cae5a0379228e7b55e5b29528df8e
+PKG_MD5SUM:=e025414bc6cd79579cc7a32a45d3ae1c
 
 PKG_BUILD_DEPENDS:=BUSYBOX_CONFIG_FEATURE_HAVE_RPC:librpc
 PKG_BUILD_PARALLEL:=1
diff --git a/package/busybox/config/Config.in b/package/busybox/config/Config.in
index 0045036..bf8f579 100644
--- a/package/busybox/config/Config.in
+++ b/package/busybox/config/Config.in
@@ -82,20 +82,21 @@ config BUSYBOX_CONFIG_FEATURE_BUFFERS_GO_IN_BSS
 endchoice
 
 config BUSYBOX_CONFIG_SHOW_USAGE
-	bool "Show terse applet usage messages"
+	bool "Show applet usage messages"
 	default y
 	help
-	  All BusyBox applets will show help messages when invoked with
-	  wrong arguments. You can turn off printing these terse usage
-	  messages if you say no here.
-	  This will save you up to 7k.
+	  Enabling this option, BusyBox applets will show terse help messages
+	  when invoked with wrong arguments.
+	  If you do not want to show any (helpful) usage message when
+	  issuing wrong command syntax, you can say 'N' here,
+	  saving approximately 7k.
 
 config BUSYBOX_CONFIG_FEATURE_VERBOSE_USAGE
 	bool "Show verbose applet usage messages"
 	default y
 	depends on BUSYBOX_CONFIG_SHOW_USAGE
 	help
-	  All BusyBox applets will show more verbose help messages when
+	  All BusyBox applets will show verbose help messages when
 	  busybox is invoked with --help. This will add a lot of text to the
 	  busybox binary. In the default configuration, this will add about
 	  13k, but it can add much more depending on your configuration.
@@ -105,8 +106,8 @@ config BUSYBOX_CONFIG_FEATURE_COMPRESS_USAGE
 	default y
 	depends on BUSYBOX_CONFIG_SHOW_USAGE
 	help
-	  Store usage messages in compressed form, uncompress them on-the-fly
-	  when <applet> --help is called.
+	  Store usage messages in .bz compressed form, uncompress them
+	  on-the-fly when <applet> --help is called.
 
 	  If you have a really tiny busybox with few applets enabled (and
 	  bunzip2 isn't one of them), the overhead of the decompressor might
diff --git a/package/busybox/config/archival/Config.in b/package/busybox/config/archival/Config.in
index d2bfa48..fa3d18c 100644
--- a/package/busybox/config/archival/Config.in
+++ b/package/busybox/config/archival/Config.in
@@ -7,7 +7,6 @@
 menu "Archival Utilities"
 
 
-
 config BUSYBOX_CONFIG_FEATURE_SEAMLESS_XZ
 	bool "Make tar, rpm, modprobe etc understand .xz data"
 	default n
@@ -33,10 +32,10 @@ config BUSYBOX_CONFIG_FEATURE_SEAMLESS_GZ
 	  Make tar, rpm, modprobe etc understand .gz data.
 
 config BUSYBOX_CONFIG_FEATURE_SEAMLESS_Z
-	bool "Make tar and gunzip understand .Z data"
+	bool "tar, rpm, modprobe etc understand .Z data"
 	default n
 	help
-	  Make tar and gunzip understand .Z data.
+	  Make tar, rpm, modprobe etc understand .Z data.
 
 config BUSYBOX_CONFIG_AR
 	bool "ar"
@@ -188,6 +187,18 @@ config BUSYBOX_CONFIG_FEATURE_GZIP_LONG_OPTIONS
 	help
 	  Enable use of long options, increases size by about 106 Bytes
 
+config BUSYBOX_CONFIG_GZIP_FAST
+	int "Trade memory for gzip speed (0:small,slow - 2:fast,big)"
+	default 0
+	range 0 2
+	depends on BUSYBOX_CONFIG_GZIP
+	help
+	  Enable big memory options for gzip.
+	  0: small buffers, small hash-tables
+	  1: larger buffers, larger hash-tables
+	  2: larger buffers, largest hash-tables
+	  Larger models may give slightly better compression
+
 config BUSYBOX_CONFIG_LZOP
 	bool "lzop"
 	default n
@@ -331,12 +342,9 @@ config BUSYBOX_CONFIG_UNLZMA
 	  is generally considerably better than that achieved by the bzip2
 	  compressors.
 
-	  The BusyBox unlzma applet is limited to de-compression only.
+	  The BusyBox unlzma applet is limited to decompression only.
 	  On an x86 system, this applet adds about 4K.
 
-	  Unless you have a specific application which requires unlzma, you
-	  should probably say N here.
-
 config BUSYBOX_CONFIG_FEATURE_LZMA_FAST
 	bool "Optimize unlzma for speed"
 	default n
diff --git a/package/busybox/config/console-tools/Config.in b/package/busybox/config/console-tools/Config.in
index 9069b0f..d996230 100644
--- a/package/busybox/config/console-tools/Config.in
+++ b/package/busybox/config/console-tools/Config.in
@@ -7,7 +7,6 @@
 menu "Console Utilities"
 
 
-
 config BUSYBOX_CONFIG_CHVT
 	bool "chvt"
 	default n
diff --git a/package/busybox/config/coreutils/Config.in b/package/busybox/config/coreutils/Config.in
index b1a432f..07a787e 100644
--- a/package/busybox/config/coreutils/Config.in
+++ b/package/busybox/config/coreutils/Config.in
@@ -58,6 +58,12 @@ config BUSYBOX_CONFIG_FEATURE_DATE_COMPAT
 	  With this option off, 'date DATE' is 'date -s DATE' support
 	  the same format. With it on, 'date DATE' additionally supports
 	  MMDDhhmm[[YY]YY][.ss] format.
+config BUSYBOX_CONFIG_HOSTID
+	bool "hostid"
+	default y
+	help
+	  hostid prints the numeric identifier (in hexadecimal) for
+	  the current host.
 config BUSYBOX_CONFIG_ID
 	bool "id"
 	default y
@@ -88,6 +94,13 @@ config BUSYBOX_CONFIG_TOUCH
 	help
 	  touch is used to create or change the access and/or
 	  modification timestamp of specified files.
+
+config BUSYBOX_CONFIG_FEATURE_TOUCH_SUSV3
+	bool "Add support for SUSV3 features (-d -t -r)"
+	default y
+	depends on BUSYBOX_CONFIG_TOUCH
+	help
+	  Enable touch to use a reference file or a given date/time argument.
 config BUSYBOX_CONFIG_TR
 	bool "tr"
 	default y
@@ -393,13 +406,6 @@ config BUSYBOX_CONFIG_FEATURE_FANCY_HEAD
 	help
 	  This enables the head options (-c, -q, and -v).
 
-config BUSYBOX_CONFIG_HOSTID
-	bool "hostid"
-	default y
-	help
-	  hostid prints the numeric identifier (in hexadecimal) for
-	  the current host.
-
 config BUSYBOX_CONFIG_INSTALL
 	bool "install"
 	default n
diff --git a/package/busybox/config/debianutils/Config.in b/package/busybox/config/debianutils/Config.in
index be69666..093d62b 100644
--- a/package/busybox/config/debianutils/Config.in
+++ b/package/busybox/config/debianutils/Config.in
@@ -7,7 +7,6 @@
 menu "Debian Utilities"
 
 
-
 config BUSYBOX_CONFIG_MKTEMP
 	bool "mktemp"
 	default y
diff --git a/package/busybox/config/e2fsprogs/Config.in b/package/busybox/config/e2fsprogs/Config.in
index 282681d..ba7fb3b 100644
--- a/package/busybox/config/e2fsprogs/Config.in
+++ b/package/busybox/config/e2fsprogs/Config.in
@@ -7,7 +7,6 @@
 menu "Linux Ext2 FS Progs"
 
 
-
 config BUSYBOX_CONFIG_CHATTR
 	bool "chattr"
 	default n
diff --git a/package/busybox/config/e2fsprogs/old_e2fsprogs/Config.in b/package/busybox/config/e2fsprogs/old_e2fsprogs/Config.in
index 105c93a..c4b6c05 100644
--- a/package/busybox/config/e2fsprogs/old_e2fsprogs/Config.in
+++ b/package/busybox/config/e2fsprogs/old_e2fsprogs/Config.in
@@ -7,7 +7,6 @@
 menu "Linux Ext2 FS Progs"
 
 
-
 config BUSYBOX_CONFIG_CHATTR
 	bool "chattr"
 	default n
diff --git a/package/busybox/config/editors/Config.in b/package/busybox/config/editors/Config.in
index 21321db..42e6b1f 100644
--- a/package/busybox/config/editors/Config.in
+++ b/package/busybox/config/editors/Config.in
@@ -72,7 +72,7 @@ config BUSYBOX_CONFIG_FEATURE_VI_REGEX_SEARCH
 
 config BUSYBOX_CONFIG_FEATURE_VI_USE_SIGNALS
 	bool "Catch signals"
-	default y
+	default n
 	depends on BUSYBOX_CONFIG_VI
 	help
 	  Selecting this option will make busybox vi signal aware. This will
diff --git a/package/busybox/config/libbb/Config.in b/package/busybox/config/libbb/Config.in
index 6475403..4b7ae4f 100644
--- a/package/busybox/config/libbb/Config.in
+++ b/package/busybox/config/libbb/Config.in
@@ -28,7 +28,7 @@ config BUSYBOX_CONFIG_PASSWORD_MINLEN
 	help
 	  Minimum allowable password length.
 
-config BUSYBOX_CONFIG_MD5_SIZE_VS_SPEED
+config BUSYBOX_CONFIG_MD5_SMALL
 	int "MD5: Trade bytes for speed (0:fast, 3:slow)"
 	default 2
 	range 0 3
@@ -108,6 +108,13 @@ config BUSYBOX_CONFIG_FEATURE_EDITING_SAVEHISTORY
 	help
 	  Enable history saving in shells.
 
+config BUSYBOX_CONFIG_FEATURE_EDITING_SAVE_ON_EXIT
+	bool "Save history on shell exit, not after every command"
+	default n
+	depends on BUSYBOX_CONFIG_FEATURE_EDITING_SAVEHISTORY
+	help
+	  Save history on shell exit, not after every command.
+
 config BUSYBOX_CONFIG_FEATURE_REVERSE_SEARCH
 	bool "Reverse history search"
 	default n
@@ -198,8 +205,8 @@ config BUSYBOX_CONFIG_FEATURE_SKIP_ROOTFS
 
 	  However, some systems do not mount anything on /.
 	  If you need to configure busybox for one of these systems,
-	  you may find useful to turn this option off to make df show
-	  initramfs statistic.
+	  you may find it useful to turn this option off to make df show
+	  initramfs statistics.
 
 	  Otherwise, choose Y.
 
diff --git a/package/busybox/config/loginutils/Config.in b/package/busybox/config/loginutils/Config.in
index 8c32851..1043b51 100644
--- a/package/busybox/config/loginutils/Config.in
+++ b/package/busybox/config/loginutils/Config.in
@@ -216,6 +216,17 @@ config BUSYBOX_CONFIG_LOGIN
 	  Note that Busybox binary must be setuid root for this applet to
 	  work properly.
 
+config BUSYBOX_CONFIG_LOGIN_SESSION_AS_CHILD
+	bool "Run logged in session in a child process"
+	default n if BUSYBOX_CONFIG_PAM
+	depends on BUSYBOX_CONFIG_LOGIN
+	help
+	  Run the logged in session in a child process.  This allows
+	  login to clean up things such as utmp entries or PAM sessions
+	  when the login session is complete.  If you use PAM, you
+	  almost always would want this to be set to Y, else PAM session
+	  will not be cleaned up.
+
 config BUSYBOX_CONFIG_PAM
 	bool "Support for PAM (Pluggable Authentication Modules)"
 	default n
@@ -288,6 +299,13 @@ config BUSYBOX_CONFIG_CHPASSWD
 	  Reads a file of user name and password pairs from standard input
 	  and uses this information to update a group of existing users.
 
+config BUSYBOX_CONFIG_FEATURE_DEFAULT_PASSWD_ALGO
+	string "Default password encryption method (passwd -a, cryptpw -m parameter)"
+	default "md5"
+	depends on BUSYBOX_CONFIG_PASSWD || BUSYBOX_CONFIG_CRYPTPW
+	help
+	  Possible choices are "d[es]", "m[d5]", "s[ha256]" or "sha512".
+
 config BUSYBOX_CONFIG_SU
 	bool "su"
 	default n
diff --git a/package/busybox/config/mailutils/Config.in b/package/busybox/config/mailutils/Config.in
index 8db3031..f2d3a8d 100644
--- a/package/busybox/config/mailutils/Config.in
+++ b/package/busybox/config/mailutils/Config.in
@@ -2,7 +2,6 @@
 menu "Mail Utilities"
 
 
-
 config BUSYBOX_CONFIG_MAKEMIME
 	bool "makemime"
 	default n
diff --git a/package/busybox/config/miscutils/Config.in b/package/busybox/config/miscutils/Config.in
index e69d684..a0095cc 100644
--- a/package/busybox/config/miscutils/Config.in
+++ b/package/busybox/config/miscutils/Config.in
@@ -36,7 +36,7 @@ config BUSYBOX_CONFIG_FEATURE_LESS_BRACKETS
 	  brackets, facilitating programming.
 
 config BUSYBOX_CONFIG_FEATURE_LESS_FLAGS
-	bool "Enable extra flags"
+	bool "Enable -m/-M"
 	default n
 	depends on BUSYBOX_CONFIG_LESS
 	help
diff --git a/package/busybox/config/networking/Config.in b/package/busybox/config/networking/Config.in
index 3df7b1f..361c512 100644
--- a/package/busybox/config/networking/Config.in
+++ b/package/busybox/config/networking/Config.in
@@ -292,14 +292,22 @@ config BUSYBOX_CONFIG_FEATURE_HTTPD_BASIC_AUTH
 	help
 	  Utilizes password settings from /etc/httpd.conf for basic
 	  authentication on a per url basis.
+	  Example for httpd.conf file:
+	  /adm:toor:PaSsWd
 
 config BUSYBOX_CONFIG_FEATURE_HTTPD_AUTH_MD5
 	bool "Support MD5 crypted passwords for http Authentication"
 	default n
 	depends on BUSYBOX_CONFIG_FEATURE_HTTPD_BASIC_AUTH
 	help
-	  Enables basic per URL authentication from /etc/httpd.conf
-	  using md5 passwords.
+	  Enables encrypted passwords, and wildcard user/passwords
+	  in httpd.conf file.
+	  User '*' means 'any system user name is ok',
+	  password of '*' means 'use system password for this user'
+	  Examples:
+	  /adm:toor:$1$P/eKnWXS$aI1aPGxT.dJD5SzqAKWrF0
+	  /adm:root:*
+	  /wiki:*:*
 
 config BUSYBOX_CONFIG_FEATURE_HTTPD_CGI
 	bool "Support Common Gateway Interface (CGI)"
@@ -964,7 +972,7 @@ config BUSYBOX_CONFIG_TRACEROUTE
 
 config BUSYBOX_CONFIG_TRACEROUTE6
 	bool "traceroute6"
-	default n
+	default IPV6
 	depends on BUSYBOX_CONFIG_FEATURE_IPV6 && BUSYBOX_CONFIG_TRACEROUTE
 	help
 	  Utility to trace the route of IPv6 packets.
diff --git a/package/busybox/config/networking/udhcp/Config.in b/package/busybox/config/networking/udhcp/Config.in
index f4d26ec..4c21508 100644
--- a/package/busybox/config/networking/udhcp/Config.in
+++ b/package/busybox/config/networking/udhcp/Config.in
@@ -4,7 +4,11 @@
 # see scripts/kbuild/config-language.txt.
 #
 
-
+config BUSYBOX_CONFIG_UDHCPC6
+       bool "udhcp client for DHCPv6 (udhcpc6)"
+       default n  # not yet ready
+       help
+         udhcpc6 is a DHCPv6 client
 
 config BUSYBOX_CONFIG_UDHCPD
 	bool "udhcp server (udhcpd)"
diff --git a/package/busybox/config/printutils/Config.in b/package/busybox/config/printutils/Config.in
index ca2ea9f..8ee9f20 100644
--- a/package/busybox/config/printutils/Config.in
+++ b/package/busybox/config/printutils/Config.in
@@ -7,7 +7,6 @@
 menu "Print Utilities"
 
 
-
 config BUSYBOX_CONFIG_LPD
 	bool "lpd"
 	default n
diff --git a/package/busybox/config/procps/Config.in b/package/busybox/config/procps/Config.in
index 25eb3e5..26ca769 100644
--- a/package/busybox/config/procps/Config.in
+++ b/package/busybox/config/procps/Config.in
@@ -11,6 +11,12 @@ config BUSYBOX_CONFIG_IOSTAT
 	default n
 	help
 	  Report CPU and I/O statistics
+config BUSYBOX_CONFIG_LSOF
+	bool "lsof"
+	default y
+	help
+	  Show open files in the format of:
+	  PID <TAB> /path/to/executable <TAB> /path/to/opened/file
 config BUSYBOX_CONFIG_MPSTAT
 	bool "mpstat"
 	default n
@@ -152,6 +158,14 @@ config BUSYBOX_CONFIG_FEATURE_PS_WIDE
 	  If given once, 132 chars are printed, and if given more
 	  than once, the length is unlimited.
 
+config BUSYBOX_CONFIG_FEATURE_PS_LONG
+	bool "Enable long output option (-l)"
+	default y
+	depends on BUSYBOX_CONFIG_PS && !BUSYBOX_CONFIG_DESKTOP
+	help
+	  Support argument 'l' for long output.
+	  Adds fields PPID, RSS, START, TIME & TTY
+
 config BUSYBOX_CONFIG_FEATURE_PS_TIME
 	bool "Enable time and elapsed time output"
 	default n
diff --git a/package/busybox/config/runit/Config.in b/package/busybox/config/runit/Config.in
index 9d7c597..ed07c5a 100644
--- a/package/busybox/config/runit/Config.in
+++ b/package/busybox/config/runit/Config.in
@@ -7,7 +7,6 @@
 menu "Runit Utilities"
 
 
-
 config BUSYBOX_CONFIG_RUNSV
 	bool "runsv"
 	default n
diff --git a/package/busybox/config/selinux/Config.in b/package/busybox/config/selinux/Config.in
index e7317ca..d9e8397 100644
--- a/package/busybox/config/selinux/Config.in
+++ b/package/busybox/config/selinux/Config.in
@@ -8,7 +8,6 @@ menu "SELinux Utilities"
 	depends on BUSYBOX_CONFIG_SELINUX
 
 
-
 config BUSYBOX_CONFIG_CHCON
 	bool "chcon"
 	default n
diff --git a/package/busybox/config/shell/Config.in b/package/busybox/config/shell/Config.in
index a271a38..9bf3e26 100644
--- a/package/busybox/config/shell/Config.in
+++ b/package/busybox/config/shell/Config.in
@@ -156,6 +156,9 @@ config BUSYBOX_CONFIG_CTTYHACK
 
 	  # exec setsid sh -c 'exec sh </dev/tty1 >/dev/tty1 2>&1'
 
+	  Starting getty on a controlling tty from a shell script:
+
+	  # getty 115200 $(cttyhack)
 config BUSYBOX_CONFIG_HUSH
 	bool "hush"
 	default n
@@ -256,7 +259,7 @@ config BUSYBOX_CONFIG_HUSH_FUNCTIONS
 
 config BUSYBOX_CONFIG_HUSH_LOCAL
 	bool "Support local builtin"
-	default y
+	default n
 	depends on BUSYBOX_CONFIG_HUSH_FUNCTIONS
 	help
 	  Enable support for local variables in functions.
@@ -292,6 +295,7 @@ config BUSYBOX_CONFIG_MSH
 	  msh is deprecated and will be removed, please migrate to hush.
 
 
+
 choice
 	prompt "Choose which shell is aliased to 'sh' name"
 	default BUSYBOX_CONFIG_FEATURE_SH_IS_ASH
diff --git a/package/busybox/config/sysklogd/Config.in b/package/busybox/config/sysklogd/Config.in
index 20e1aff..2e9b9c6 100644
--- a/package/busybox/config/sysklogd/Config.in
+++ b/package/busybox/config/sysklogd/Config.in
@@ -7,7 +7,6 @@
 menu "System Logging Utilities"
 
 
-
 config BUSYBOX_CONFIG_SYSLOGD
 	bool "syslogd"
 	default y
diff --git a/package/busybox/config/util-linux/Config.in b/package/busybox/config/util-linux/Config.in
index 14d4777..de6a029 100644
--- a/package/busybox/config/util-linux/Config.in
+++ b/package/busybox/config/util-linux/Config.in
@@ -11,6 +11,63 @@ config BUSYBOX_CONFIG_BLOCKDEV
 	default n
 	help
 	  Performs some ioctls with block devices.
+config BUSYBOX_CONFIG_MDEV
+	bool "mdev"
+	default n
+	select BUSYBOX_CONFIG_PLATFORM_LINUX
+	help
+	  mdev is a mini-udev implementation for dynamically creating device
+	  nodes in the /dev directory.
+
+	  For more information, please see docs/mdev.txt
+
+config BUSYBOX_CONFIG_FEATURE_MDEV_CONF
+	bool "Support /etc/mdev.conf"
+	default n
+	depends on BUSYBOX_CONFIG_MDEV
+	help
+	  Add support for the mdev config file to control ownership and
+	  permissions of the device nodes.
+
+	  For more information, please see docs/mdev.txt
+
+config BUSYBOX_CONFIG_FEATURE_MDEV_RENAME
+	bool "Support subdirs/symlinks"
+	default n
+	depends on BUSYBOX_CONFIG_FEATURE_MDEV_CONF
+	help
+	  Add support for renaming devices and creating symlinks.
+
+	  For more information, please see docs/mdev.txt
+
+config BUSYBOX_CONFIG_FEATURE_MDEV_RENAME_REGEXP
+	bool "Support regular expressions substitutions when renaming device"
+	default n
+	depends on BUSYBOX_CONFIG_FEATURE_MDEV_RENAME
+	help
+	  Add support for regular expressions substitutions when renaming
+	  device.
+
+config BUSYBOX_CONFIG_FEATURE_MDEV_EXEC
+	bool "Support command execution at device addition/removal"
+	default n
+	depends on BUSYBOX_CONFIG_FEATURE_MDEV_CONF
+	help
+	  This adds support for an optional field to /etc/mdev.conf for
+	  executing commands when devices are created/removed.
+
+	  For more information, please see docs/mdev.txt
+
+config BUSYBOX_CONFIG_FEATURE_MDEV_LOAD_FIRMWARE
+	bool "Support loading of firmwares"
+	default n
+	depends on BUSYBOX_CONFIG_MDEV
+	help
+	  Some devices need to load firmware before they can be usable.
+
+	  These devices will request userspace look up the files in
+	  /lib/firmware/ and if it exists, send it to the kernel for
+	  loading into the hardware.
 config BUSYBOX_CONFIG_REV
 	bool "rev"
 	default n
@@ -414,64 +471,6 @@ config BUSYBOX_CONFIG_LSUSB
 
 	  This version uses sysfs (/sys/bus/usb/devices) only.
 
-config BUSYBOX_CONFIG_MDEV
-	bool "mdev"
-	default n
-	select BUSYBOX_CONFIG_PLATFORM_LINUX
-	help
-	  mdev is a mini-udev implementation for dynamically creating device
-	  nodes in the /dev directory.
-
-	  For more information, please see docs/mdev.txt
-
-config BUSYBOX_CONFIG_FEATURE_MDEV_CONF
-	bool "Support /etc/mdev.conf"
-	default n
-	depends on BUSYBOX_CONFIG_MDEV
-	help
-	  Add support for the mdev config file to control ownership and
-	  permissions of the device nodes.
-
-	  For more information, please see docs/mdev.txt
-
-config BUSYBOX_CONFIG_FEATURE_MDEV_RENAME
-	bool "Support subdirs/symlinks"
-	default n
-	depends on BUSYBOX_CONFIG_FEATURE_MDEV_CONF
-	help
-	  Add support for renaming devices and creating symlinks.
-
-	  For more information, please see docs/mdev.txt
-
-config BUSYBOX_CONFIG_FEATURE_MDEV_RENAME_REGEXP
-	bool "Support regular expressions substitutions when renaming device"
-	default n
-	depends on BUSYBOX_CONFIG_FEATURE_MDEV_RENAME
-	help
-	  Add support for regular expressions substitutions when renaming
-	  device.
-
-config BUSYBOX_CONFIG_FEATURE_MDEV_EXEC
-	bool "Support command execution at device addition/removal"
-	default n
-	depends on BUSYBOX_CONFIG_FEATURE_MDEV_CONF
-	help
-	  This adds support for an optional field to /etc/mdev.conf for
-	  executing commands when devices are created/removed.
-
-	  For more information, please see docs/mdev.txt
-
-config BUSYBOX_CONFIG_FEATURE_MDEV_LOAD_FIRMWARE
-	bool "Support loading of firmwares"
-	default n
-	depends on BUSYBOX_CONFIG_MDEV
-	help
-	  Some devices need to load firmware before they can be usable.
-
-	  These devices will request userspace look up the files in
-	  /lib/firmware/ and if it exists, send it to the kernel for
-	  loading into the hardware.
-
 config BUSYBOX_CONFIG_MKSWAP
 	bool "mkswap"
 	default n
@@ -553,13 +552,18 @@ config BUSYBOX_CONFIG_FEATURE_MOUNT_LABEL
 	  This also enables label or uuid support for swapon.
 
 config BUSYBOX_CONFIG_FEATURE_MOUNT_NFS
-	bool "Support mounting NFS file systems"
+	bool "Support mounting NFS file systems on Linux < 2.6.23"
 	default n
 	depends on BUSYBOX_CONFIG_MOUNT
 	select BUSYBOX_CONFIG_FEATURE_HAVE_RPC
 	select BUSYBOX_CONFIG_FEATURE_SYSLOG
 	help
-	  Enable mounting of NFS file systems.
+	  Enable mounting of NFS file systems on Linux kernels prior
+	  to version 2.6.23. Note that in this case mounting of NFS
+	  over IPv6 will not be possible.
+
+	  Note that this option links in RPC support from libc,
+	  which is rather large (~10 kbytes on uclibc).
 
 config BUSYBOX_CONFIG_FEATURE_MOUNT_CIFS
 	bool "Support mounting CIFS/SMB file systems"
diff --git a/package/busybox/patches/002-passwd_use_md5_hash_by_default_like_it_used_to_be.patch b/package/busybox/patches/002-passwd_use_md5_hash_by_default_like_it_used_to_be.patch
deleted file mode 100644
index ff79f3e..0000000
--- a/package/busybox/patches/002-passwd_use_md5_hash_by_default_like_it_used_to_be.patch
+++ /dev/null
@@ -1,20 +0,0 @@
-From eb80c2a5315ed08bd329448217695375d89732c9 Mon Sep 17 00:00:00 2001
-From: Nicolas Thill <n...@openwrt.org>
-Date: Wed, 9 Nov 2011 18:17:20 +0100
-Subject: [PATCH] passwd: use MD5 hash by default (like it used to be)
-
----
- loginutils/passwd.c |    2 +-
- 1 files changed, 1 insertions(+), 1 deletions(-)
-
---- a/loginutils/passwd.c
-+++ b/loginutils/passwd.c
-@@ -94,7 +94,7 @@ int passwd_main(int argc UNUSED_PARAM, c
- 	};
- 	unsigned opt;
- 	int rc;
--	const char *opt_a = "d"; /* des */
-+	const char *opt_a = "m"; /* md5 */
- 	const char *filename;
- 	char *myname;
- 	char *name;
diff --git a/package/busybox/patches/004-upstream-percent_decode_in_place.patch b/package/busybox/patches/004-upstream-percent_decode_in_place.patch
deleted file mode 100644
index d94ee47..0000000
--- a/package/busybox/patches/004-upstream-percent_decode_in_place.patch
+++ /dev/null
@@ -1,237 +0,0 @@
-http://git.busybox.net/busybox/commit/?id=dd1061b6a79b0161597799e825bfefc27993ace5
-
-From dd1061b6a79b0161597799e825bfefc27993ace5 Mon Sep 17 00:00:00 2001
-From: Denys Vlasenko <vda.li...@googlemail.com>
-Date: Sun, 11 Sep 2011 21:04:02 +0200
-Subject: [PATCH] wget: URL-decode user:password before base64-encoding it into auth hdr. Closes 3625.
-
-function                                             old     new   delta
-percent_decode_in_place                                -     152    +152
-parse_url                                            304     317     +13
-handle_incoming_and_exit                            2795    2798      +3
-httpd_main                                           763     760      -3
-decodeString                                         152       -    -152
-------------------------------------------------------------------------------
-(add/remove: 2/1 grow/shrink: 2/1 up/down: 168/-155)           Total: 13 bytes
-
-Signed-off-by: Denys Vlasenko <vda.li...@googlemail.com>
-
---- a/include/libbb.h
-+++ b/include/libbb.h
-@@ -1570,6 +1570,15 @@ int starts_with_cpu(const char *str) FAS
- unsigned get_cpu_count(void) FAST_FUNC;
- 
- 
-+/* Use strict=1 if you process input from untrusted source:
-+ * it will return NULL on invalid %xx (bad hex chars)
-+ * and str + 1 if decoded char is / or NUL.
-+ * In non-strict mode, it always succeeds (returns str),
-+ * and also it additionally decoded '+' to space.
-+ */
-+char *percent_decode_in_place(char *str, int strict) FAST_FUNC;
-+
-+
- extern const char bb_uuenc_tbl_base64[];
- extern const char bb_uuenc_tbl_std[];
- void bb_uuencode(char *store, const void *s, int length, const char *tbl) FAST_FUNC;
---- /dev/null
-+++ b/libbb/percent_decode.c
-@@ -0,0 +1,69 @@
-+/* vi: set sw=4 ts=4: */
-+/*
-+ * Licensed under GPLv2 or later, see file LICENSE in this source tree.
-+ */
-+
-+//kbuild:lib-y += percent_decode.o
-+
-+#include "libbb.h"
-+
-+static unsigned hex_to_bin(unsigned char c)
-+{
-+	unsigned v;
-+
-+	v = c - '0';
-+	if (v <= 9)
-+		return v;
-+	/* c | 0x20: letters to lower case, non-letters
-+	 * to (potentially different) non-letters */
-+	v = (unsigned)(c | 0x20) - 'a';
-+	if (v <= 5)
-+		return v + 10;
-+	return ~0;
-+/* For testing:
-+void t(char c) { printf("'%c'(%u) %u\n", c, c, hex_to_bin(c)); }
-+int main() { t(0x10); t(0x20); t('0'); t('9'); t('A'); t('F'); t('a'); t('f');
-+t('0'-1); t('9'+1); t('A'-1); t('F'+1); t('a'-1); t('f'+1); return 0; }
-+*/
-+}
-+
-+char* FAST_FUNC percent_decode_in_place(char *str, int strict)
-+{
-+	/* note that decoded string is always shorter than original */
-+	char *src = str;
-+	char *dst = str;
-+	char c;
-+
-+	while ((c = *src++) != '\0') {
-+		unsigned v;
-+
-+		if (!strict && c == '+') {
-+			*dst++ = ' ';
-+			continue;
-+		}
-+		if (c != '%') {
-+			*dst++ = c;
-+			continue;
-+		}
-+		v = hex_to_bin(src[0]);
-+		if (v > 15) {
-+ bad_hex:
-+			if (strict)
-+				return NULL;
-+			*dst++ = '%';
-+			continue;
-+		}
-+		v = (v * 16) | hex_to_bin(src[1]);
-+		if (v > 255)
-+			goto bad_hex;
-+		if (strict && (v == '/' || v == '\0')) {
-+			/* caller takes it as indication of invalid
-+			 * (dangerous wrt exploits) chars */
-+			return str + 1;
-+		}
-+		*dst++ = v;
-+		src += 2;
-+	}
-+	*dst = '\0';
-+	return str;
-+}
---- a/networking/httpd.c
-+++ b/networking/httpd.c
-@@ -820,78 +820,6 @@ static char *encodeString(const char *st
- }
- #endif
- 
--/*
-- * Given a URL encoded string, convert it to plain ascii.
-- * Since decoding always makes strings smaller, the decode is done in-place.
-- * Thus, callers should xstrdup() the argument if they do not want the
-- * argument modified.  The return is the original pointer, allowing this
-- * function to be easily used as arguments to other functions.
-- *
-- * string    The first string to decode.
-- * option_d  1 if called for httpd -d
-- *
-- * Returns a pointer to the decoded string (same as input).
-- */
--static unsigned hex_to_bin(unsigned char c)
--{
--	unsigned v;
--
--	v = c - '0';
--	if (v <= 9)
--		return v;
--	/* c | 0x20: letters to lower case, non-letters
--	 * to (potentially different) non-letters */
--	v = (unsigned)(c | 0x20) - 'a';
--	if (v <= 5)
--		return v + 10;
--	return ~0;
--/* For testing:
--void t(char c) { printf("'%c'(%u) %u\n", c, c, hex_to_bin(c)); }
--int main() { t(0x10); t(0x20); t('0'); t('9'); t('A'); t('F'); t('a'); t('f');
--t('0'-1); t('9'+1); t('A'-1); t('F'+1); t('a'-1); t('f'+1); return 0; }
--*/
--}
--static char *decodeString(char *orig, int option_d)
--{
--	/* note that decoded string is always shorter than original */
--	char *string = orig;
--	char *ptr = string;
--	char c;
--
--	while ((c = *ptr++) != '\0') {
--		unsigned v;
--
--		if (option_d && c == '+') {
--			*string++ = ' ';
--			continue;
--		}
--		if (c != '%') {
--			*string++ = c;
--			continue;
--		}
--		v = hex_to_bin(ptr[0]);
--		if (v > 15) {
-- bad_hex:
--			if (!option_d)
--				return NULL;
--			*string++ = '%';
--			continue;
--		}
--		v = (v * 16) | hex_to_bin(ptr[1]);
--		if (v > 255)
--			goto bad_hex;
--		if (!option_d && (v == '/' || v == '\0')) {
--			/* caller takes it as indication of invalid
--			 * (dangerous wrt exploits) chars */
--			return orig + 1;
--		}
--		*string++ = v;
--		ptr += 2;
--	}
--	*string = '\0';
--	return orig;
--}
--
- #if ENABLE_FEATURE_HTTPD_BASIC_AUTH
- /*
-  * Decode a base64 data stream as per rfc1521.
-@@ -1949,7 +1877,7 @@ static void handle_incoming_and_exit(con
- 	}
- 
- 	/* Decode URL escape sequences */
--	tptr = decodeString(urlcopy, 0);
-+	tptr = percent_decode_in_place(urlcopy, /*strict:*/ 1);
- 	if (tptr == NULL)
- 		send_headers_and_exit(HTTP_BAD_REQUEST);
- 	if (tptr == urlcopy + 1) {
-@@ -2408,7 +2336,7 @@ int httpd_main(int argc UNUSED_PARAM, ch
- 			, &verbose
- 		);
- 	if (opt & OPT_DECODE_URL) {
--		fputs(decodeString(url_for_decode, 1), stdout);
-+		fputs(percent_decode_in_place(url_for_decode, /*strict:*/ 0), stdout);
- 		return 0;
- 	}
- #if ENABLE_FEATURE_HTTPD_ENCODE_URL_STR
---- a/networking/wget.c
-+++ b/networking/wget.c
-@@ -298,8 +298,13 @@ static void parse_url(const char *src_ur
- 
- 	sp = strrchr(h->host, '@');
- 	if (sp != NULL) {
--		h->user = h->host;
-+		// URL-decode "user:password" string before base64-encoding:
-+		// wget http://test:my%20p...@example.com should send
-+		// Authorization: Basic dGVzdDpteSBwYXNz
-+		// which decodes to "test:my pass".
-+		// Standard wget and curl do this too.
- 		*sp = '\0';
-+		h->user = percent_decode_in_place(h->host, /*strict:*/ 0);
- 		h->host = sp + 1;
- 	}
- 
-@@ -661,12 +666,6 @@ static void download_one_url(const char
- 
- #if ENABLE_FEATURE_WGET_AUTHENTICATION
- 		if (target.user) {
--//TODO: URL-decode "user:password" string before base64-encoding:
--//wget http://test:my%20p...@example.com should send
--// Authorization: Basic dGVzdDpteSBwYXNz
--//which decodes to "test:my pass", instead of what we send now:
--// Authorization: Basic dGVzdDpteSUyMHBhc3M=
--//Can reuse decodeString() from httpd.c
- 			fprintf(sfp, "Proxy-Authorization: Basic %s\r\n"+6,
- 				base64enc(target.user));
- 		}
diff --git a/package/busybox/patches/241-udhcpc-oversized_packets.patch b/package/busybox/patches/241-udhcpc-oversized_packets.patch
deleted file mode 100644
index 471d704..0000000
--- a/package/busybox/patches/241-udhcpc-oversized_packets.patch
+++ /dev/null
@@ -1,99 +0,0 @@
---- a/networking/udhcp/packet.c
-+++ b/networking/udhcp/packet.c
-@@ -158,6 +158,11 @@ uint16_t FAST_FUNC udhcp_checksum(void *
- 	return ~sum;
- }
- 
-+int udhcp_get_payload_len(struct dhcp_packet *dhcp_pkt)
-+{
-+	return sizeof(struct dhcp_packet) - DHCP_OPTIONS_BUFSIZE + udhcp_end_option(dhcp_pkt->options) + sizeof(dhcp_pkt->options[0]);
-+}
-+
- /* Construct a ip/udp header for a packet, send packet */
- int FAST_FUNC udhcp_send_raw_packet(struct dhcp_packet *dhcp_pkt,
- 		uint32_t source_nip, int source_port,
-@@ -166,10 +171,10 @@ int FAST_FUNC udhcp_send_raw_packet(stru
- {
- 	struct sockaddr_ll dest_sll;
- 	struct ip_udp_dhcp_packet packet;
--	unsigned padding;
- 	int fd;
- 	int result = -1;
- 	const char *msg;
-+	int p_len = udhcp_get_payload_len(dhcp_pkt);
- 
- 	fd = socket(PF_PACKET, SOCK_DGRAM, htons(ETH_P_IP));
- 	if (fd < 0) {
-@@ -178,8 +183,8 @@ int FAST_FUNC udhcp_send_raw_packet(stru
- 	}
- 
- 	memset(&dest_sll, 0, sizeof(dest_sll));
--	memset(&packet, 0, offsetof(struct ip_udp_dhcp_packet, data));
--	packet.data = *dhcp_pkt; /* struct copy */
-+	memset(&packet, 0, sizeof(packet));
-+	memcpy(&(packet.data), dhcp_pkt, p_len);
- 
- 	dest_sll.sll_family = AF_PACKET;
- 	dest_sll.sll_protocol = htons(ETH_P_IP);
-@@ -192,36 +197,24 @@ int FAST_FUNC udhcp_send_raw_packet(stru
- 		goto ret_close;
- 	}
- 
--	/* We were sending full-sized DHCP packets (zero padded),
--	 * but some badly configured servers were seen dropping them.
--	 * Apparently they drop all DHCP packets >576 *ethernet* octets big,
--	 * whereas they may only drop packets >576 *IP* octets big
--	 * (which for typical Ethernet II means 590 octets: 6+6+2 + 576).
--	 *
--	 * In order to work with those buggy servers,
--	 * we truncate packets after end option byte.
--	 */
--	padding = DHCP_OPTIONS_BUFSIZE - 1 - udhcp_end_option(packet.data.options);
--
- 	packet.ip.protocol = IPPROTO_UDP;
- 	packet.ip.saddr = source_nip;
- 	packet.ip.daddr = dest_nip;
- 	packet.udp.source = htons(source_port);
- 	packet.udp.dest = htons(dest_port);
--	/* size, excluding IP header: */
--	packet.udp.len = htons(UDP_DHCP_SIZE - padding);
--	/* for UDP checksumming, ip.len is set to UDP packet len */
-+	p_len += sizeof(packet.udp);
-+	packet.udp.len = htons(p_len);
- 	packet.ip.tot_len = packet.udp.len;
--	packet.udp.check = udhcp_checksum(&packet, IP_UDP_DHCP_SIZE - padding);
--	/* but for sending, it is set to IP packet len */
--	packet.ip.tot_len = htons(IP_UDP_DHCP_SIZE - padding);
-+	p_len += sizeof(packet.ip);
-+	packet.udp.check = udhcp_checksum(&packet, p_len);
-+	packet.ip.tot_len = htons(p_len);
- 	packet.ip.ihl = sizeof(packet.ip) >> 2;
- 	packet.ip.version = IPVERSION;
- 	packet.ip.ttl = IPDEFTTL;
- 	packet.ip.check = udhcp_checksum(&packet.ip, sizeof(packet.ip));
- 
- 	udhcp_dump_packet(dhcp_pkt);
--	result = sendto(fd, &packet, IP_UDP_DHCP_SIZE - padding, /*flags:*/ 0,
-+	result = sendto(fd, &packet, p_len, /*flags:*/ 0,
- 			(struct sockaddr *) &dest_sll, sizeof(dest_sll));
- 	msg = "sendto";
-  ret_close:
-@@ -239,7 +232,6 @@ int FAST_FUNC udhcp_send_kernel_packet(s
- 		uint32_t dest_nip, int dest_port)
- {
- 	struct sockaddr_in client;
--	unsigned padding;
- 	int fd;
- 	int result = -1;
- 	const char *msg;
-@@ -270,9 +262,7 @@ int FAST_FUNC udhcp_send_kernel_packet(s
- 	}
- 
- 	udhcp_dump_packet(dhcp_pkt);
--
--	padding = DHCP_OPTIONS_BUFSIZE - 1 - udhcp_end_option(dhcp_pkt->options);
--	result = safe_write(fd, dhcp_pkt, DHCP_SIZE - padding);
-+	result = safe_write(fd, dhcp_pkt, udhcp_get_payload_len(dhcp_pkt));
- 	msg = "write";
-  ret_close:
- 	close(fd);
diff --git a/package/busybox/patches/244-udhcpc_add_6rd_option.patch b/package/busybox/patches/244-udhcpc_add_6rd_option.patch
deleted file mode 100644
index 9e30ef7..0000000
--- a/package/busybox/patches/244-udhcpc_add_6rd_option.patch
+++ /dev/null
@@ -1,143 +0,0 @@
---- a/networking/udhcp/common.c
-+++ b/networking/udhcp/common.c
-@@ -60,6 +60,8 @@ const struct dhcp_optflag dhcp_optflags[
- 	{ OPTION_U8                               , 0x85 }, /* DHCP_VLAN_PRIORITY */
- #endif
- 	{ OPTION_STATIC_ROUTES                    , 0xf9 }, /* DHCP_MS_STATIC_ROUTES */
-+	{ OPTION_6RD                              , 0xd4 }, /* DHCP_6RD (RFC)     */
-+	{ OPTION_6RD                              , 0x96 }, /* DHCP_6RD (Comcast) */
- 	{ OPTION_STRING                           , 0xfc }, /* DHCP_WPAD          */
- 
- 	/* Options below have no match in dhcp_option_strings[],
-@@ -127,6 +129,8 @@ const char dhcp_option_strings[] ALIGN1
- 	"vlanpriority" "\0"/* DHCP_VLAN_PRIORITY  */
- #endif
- 	"msstaticroutes""\0"/* DHCP_MS_STATIC_ROUTES */
-+	"ip6rd" "\0"       /* DHCP_6RD (RFC)      */
-+	"ip6rd" "\0"       /* DHCP_6RD (Comcast)  */
- 	"wpad" "\0"        /* DHCP_WPAD           */
- 	;
- 
-@@ -154,6 +158,7 @@ const uint8_t dhcp_option_lengths[] ALIG
- 	[OPTION_S32] =     4,
- 	/* Just like OPTION_STRING, we use minimum length here */
- 	[OPTION_STATIC_ROUTES] = 5,
-+	[OPTION_6RD]           = 22,
- };
- 
- 
---- a/networking/udhcp/common.h
-+++ b/networking/udhcp/common.h
-@@ -88,6 +88,7 @@ enum {
- 	OPTION_S32,
- 	OPTION_BIN,
- 	OPTION_STATIC_ROUTES,
-+	OPTION_6RD,
- #if ENABLE_FEATURE_UDHCP_RFC3397
- 	OPTION_DNS_STRING,  /* RFC1035 compressed domain name list */
- 	OPTION_SIP_SERVERS,
---- a/networking/udhcp/dhcpc.c
-+++ b/networking/udhcp/dhcpc.c
-@@ -100,6 +100,7 @@ static const uint8_t len_of_option_as_st
- 	[OPTION_IP              ] = sizeof("255.255.255.255 "),
- 	[OPTION_IP_PAIR         ] = sizeof("255.255.255.255 ") * 2,
- 	[OPTION_STATIC_ROUTES   ] = sizeof("255.255.255.255/32 255.255.255.255 "),
-+	[OPTION_6RD             ] = sizeof("32 128 FFFF:FFFF:FFFF:FFFF:FFFF:FFFF:FFFF:FFFF 255.255.255.255 "),
- 	[OPTION_STRING          ] = 1,
- #if ENABLE_FEATURE_UDHCP_RFC3397
- 	[OPTION_DNS_STRING      ] = 1, /* unused */
-@@ -123,6 +124,23 @@ static int sprint_nip(char *dest, const
- 	return sprintf(dest, "%s%u.%u.%u.%u", pre, ip[0], ip[1], ip[2], ip[3]);
- }
- 
-+static int sprint_nip6(char *dest, const char *pre, const uint8_t *ip)
-+{
-+	int len = 0;
-+	int off;
-+	uint16_t word;
-+
-+	len += sprintf(dest, "%s", pre);
-+
-+	for (off = 0; off < 16; off += 2)
-+	{
-+		move_from_unaligned16(word, &ip[off]);
-+		len += sprintf(dest+len, "%s%04X", off ? ":" : "", htons(word));
-+	}
-+
-+	return len;
-+}
-+
- /* really simple implementation, just count the bits */
- static int mton(uint32_t mask)
- {
-@@ -231,6 +249,70 @@ static NOINLINE char *xmalloc_optname_op
- 			}
- 
- 			return ret;
-+		}
-+		case OPTION_6RD: {
-+			/* Option binary format:
-+			 *  0                   1                   2                   3
-+			 *  0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
-+			 *  +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
-+			 *  |  OPTION_6RD   | option-length |  IPv4MaskLen  |  6rdPrefixLen |
-+			 *  +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
-+			 *  |                                                               |
-+			 *  |                           6rdPrefix                           |
-+			 *  |                          (16 octets)                          |
-+			 *  |                                                               |
-+			 *  |                                                               |
-+			 *  |                                                               |
-+			 *  +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
-+			 *  |                     6rdBRIPv4Address(es)                      |
-+			 *  .                                                               .
-+			 *  .                                                               .
-+			 *  .                                                               .
-+			 *  +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
-+			 *
-+			 * We convert it to a string "IPv4MaskLen 6rdPrefixLen 6rdPrefix 6rdBRIPv4Address"
-+			 */
-+
-+			/* Sanity check: ensure that our length is at least 22 bytes, that
-+			 * IPv4MaskLen is <= 32, 6rdPrefixLen <= 128 and that the sum of
-+			 * (32 - IPv4MaskLen) + 6rdPrefixLen is less than or equal to 128.
-+			 * If any of these requirements is not fulfilled, return with empty
-+			 * value.
-+			 */
-+			if ((len >= 22) && (*option <= 32) && (*(option+1) <= 128) &&
-+			    (((32 - *option) + *(option+1)) <= 128))
-+			{
-+				/* IPv4MaskLen */
-+				dest += sprintf(dest, "%u ", *option++);
-+				len--;
-+
-+				/* 6rdPrefixLen */
-+				dest += sprintf(dest, "%u ", *option++);
-+				len--;
-+
-+				/* 6rdPrefix */
-+				dest += sprint_nip6(dest, "", option);
-+				option += 16;
-+				len -= 16;
-+
-+				/* 6rdBRIPv4Addresses */
-+				while (len >= 4)
-+				{
-+					dest += sprint_nip(dest, " ", option);
-+					option += 4;
-+					len -= 4;
-+
-+					/* the code to determine the option size fails to work with
-+					 * lengths that are not a multiple of the minimum length,
-+					 * adding all advertised 6rdBRIPv4Addresses here would
-+					 * overflow the destination buffer, therefore skip the rest
-+					 * for now
-+					 */
-+					break;
-+				}
-+			}
-+
-+			return ret;
- 		}
- #if ENABLE_FEATURE_UDHCP_RFC3397
- 		case OPTION_DNS_STRING:
diff --git a/package/busybox/patches/251-ash_fix-redir-substitution.patch b/package/busybox/patches/251-ash_fix-redir-substitution.patch
deleted file mode 100644
index cb2ae94..0000000
--- a/package/busybox/patches/251-ash_fix-redir-substitution.patch
+++ /dev/null
@@ -1,12 +0,0 @@
---- a/shell/ash.c
-+++ b/shell/ash.c
-@@ -6846,8 +6846,7 @@ evalvar(char *p, int flags, struct strli
- 		patloc = expdest - (char *)stackblock();
- 		if (NULL == subevalvar(p, /* varname: */ NULL, patloc, subtype,
- 				startloc, varflags,
--//TODO: | EXP_REDIR too? All other such places do it too
--				/* quotes: */ flags & (EXP_FULL | EXP_CASE),
-+				/* quotes: */ flags & (EXP_FULL | EXP_CASE | EXP_REDIR),
- 				var_str_list)
- 		) {
- 			int amount = expdest - (
diff --git a/package/busybox/patches/310-passwd_access.patch b/package/busybox/patches/310-passwd_access.patch
deleted file mode 100644
index daa1b99..0000000
--- a/package/busybox/patches/310-passwd_access.patch
+++ /dev/null
@@ -1,41 +0,0 @@
-
-	Copyright (C) 2006 OpenWrt.org
-
---- a/networking/httpd.c
-+++ b/networking/httpd.c
-@@ -1700,21 +1700,32 @@ static int check_user_passwd(const char
- 
- 		if (ENABLE_FEATURE_HTTPD_AUTH_MD5) {
- 			char *md5_passwd;
-+			int user_len_p1;
- 
- 			md5_passwd = strchr(cur->after_colon, ':');
--			if (md5_passwd && md5_passwd[1] == '$' && md5_passwd[2] == '1'
-+			user_len_p1 = md5_passwd + 1 - cur->after_colon;
-+			if (md5_passwd && !strncmp(md5_passwd + 1, "$p$", 3)) {
-+				struct passwd *pwd = NULL;
-+
-+				pwd = getpwnam(&md5_passwd[4]);
-+				if(!pwd->pw_passwd || !pwd->pw_passwd[0] || pwd->pw_passwd[0] == '!')
-+					return 1;
-+
-+				md5_passwd = pwd->pw_passwd;
-+				goto check_md5_pw;
-+			} else if (md5_passwd && md5_passwd[1] == '$' && md5_passwd[2] == '1'
- 			 && md5_passwd[3] == '$' && md5_passwd[4]
- 			) {
- 				char *encrypted;
--				int r, user_len_p1;
-+				int r;
- 
- 				md5_passwd++;
--				user_len_p1 = md5_passwd - cur->after_colon;
- 				/* comparing "user:" */
- 				if (strncmp(cur->after_colon, user_and_passwd, user_len_p1) != 0) {
- 					continue;
- 				}
- 
-+check_md5_pw:
- 				encrypted = pw_encrypt(
- 					user_and_passwd + user_len_p1 /* cleartext pwd from user */,
- 					md5_passwd /*salt */, 1 /* cleanup */);
diff --git a/package/busybox/patches/350-httpd_redir.patch b/package/busybox/patches/350-httpd_redir.patch
deleted file mode 100644
index 11125e7..0000000
--- a/package/busybox/patches/350-httpd_redir.patch
+++ /dev/null
@@ -1,90 +0,0 @@
---- a/networking/httpd.c
-+++ b/networking/httpd.c
-@@ -105,6 +105,7 @@
- //usage:	IF_FEATURE_HTTPD_BASIC_AUTH(" [-r REALM]")
- //usage:       " [-h HOME]\n"
- //usage:       "or httpd -d/-e" IF_FEATURE_HTTPD_AUTH_MD5("/-m") " STRING"
-+//usage:       " [-R <path> [-H <host>]]"
- //usage:#define httpd_full_usage "\n\n"
- //usage:       "Listen for incoming HTTP requests\n"
- //usage:     "\n	-i		Inetd mode"
-@@ -121,6 +122,8 @@
- //usage:     "\n	-m STRING	MD5 crypt STRING")
- //usage:     "\n	-e STRING	HTML encode STRING"
- //usage:     "\n	-d STRING	URL decode STRING"
-+//usage:     "\n	-R PATH		Redirect target path"
-+//usage:     "\n	-H HOST		Redirect target host"
- 
- #include "libbb.h"
- #if ENABLE_FEATURE_HTTPD_USE_SENDFILE
-@@ -272,6 +275,8 @@ struct globals {
- 
- 	const char *found_mime_type;
- 	const char *found_moved_temporarily;
-+	const char *redirect_path;
-+	const char *redirect_host;
- 	Htaccess_IP *ip_a_d;    /* config allow/deny lines */
- 
- 	IF_FEATURE_HTTPD_BASIC_AUTH(const char *g_realm;)
-@@ -322,6 +327,8 @@ struct globals {
- #define index_page        (G.index_page       )
- #define found_mime_type   (G.found_mime_type  )
- #define found_moved_temporarily (G.found_moved_temporarily)
-+#define redirect_path     (G.redirect_path    )
-+#define redirect_host     (G.redirect_host    )
- #define last_mod          (G.last_mod         )
- #define ip_a_d            (G.ip_a_d           )
- #define g_realm           (G.g_realm          )
-@@ -956,8 +963,11 @@ static void send_headers(int responseNum
- 	}
- #endif
- 	if (responseNum == HTTP_MOVED_TEMPORARILY) {
--		len += sprintf(iobuf + len, "Location: %s/%s%s\r\n",
-+		len += sprintf(iobuf + len, "Location: %s%s%s%s%s%s\r\n",
-+				(redirect_host ? "http://"; : ""),
-+				(redirect_host ? redirect_host : ""),
- 				found_moved_temporarily,
-+				(redirect_host ? "" : "/"),
- 				(g_query ? "?" : ""),
- 				(g_query ? g_query : ""));
- 	}
-@@ -1925,8 +1935,12 @@ static void handle_incoming_and_exit(con
- 	} while (*++tptr);
- 	*++urlp = '\0';       /* terminate after last character */
- 
-+	/* redirect active */
-+	if (redirect_path && (strncmp(urlcopy, redirect_path, strlen(redirect_path)) != 0))
-+		found_moved_temporarily = redirect_path;
-+
- 	/* If URL is a directory, add '/' */
--	if (urlp[-1] != '/') {
-+	if (!redirect_path && (urlp[-1] != '/')) {
- 		if (is_directory(urlcopy + 1, 1, NULL)) {
- 			found_moved_temporarily = urlcopy;
- 		}
-@@ -2283,7 +2297,9 @@ static void sighup_handler(int sig UNUSE
- }
- 
- enum {
--	c_opt_config_file = 0,
-+	R_opt_redirect_path = 0,
-+	H_opt_redirect_host,
-+	c_opt_config_file,
- 	d_opt_decode_url,
- 	h_opt_home_httpd,
- 	IF_FEATURE_HTTPD_ENCODE_URL_STR(e_opt_encode_url,)
-@@ -2332,12 +2348,13 @@ int httpd_main(int argc UNUSED_PARAM, ch
- 	/* We do not "absolutize" path given by -h (home) opt.
- 	 * If user gives relative path in -h,
- 	 * $SCRIPT_FILENAME will not be set. */
--	opt = getopt32(argv, "c:d:h:"
-+	opt = getopt32(argv, "R:H:c:d:h:"
- 			IF_FEATURE_HTTPD_ENCODE_URL_STR("e:")
- 			IF_FEATURE_HTTPD_BASIC_AUTH("r:")
- 			IF_FEATURE_HTTPD_AUTH_MD5("m:")
- 			IF_FEATURE_HTTPD_SETUID("u:")
- 			"p:ifv",
-+			&redirect_path, &redirect_host,
- 			&opt_c_configFile, &url_for_decode, &home_httpd
- 			IF_FEATURE_HTTPD_ENCODE_URL_STR(, &url_for_encode)
- 			IF_FEATURE_HTTPD_BASIC_AUTH(, &g_realm)
diff --git a/package/busybox/patches/700-hexdump_segfault_fix.patch b/package/busybox/patches/700-hexdump_segfault_fix.patch
deleted file mode 100644
index ab09fb3..0000000
--- a/package/busybox/patches/700-hexdump_segfault_fix.patch
+++ /dev/null
@@ -1,11 +0,0 @@
---- a/libbb/dump.c
-+++ b/libbb/dump.c
-@@ -301,7 +301,7 @@ static NOINLINE void rewrite(priv_dumper
- 		) {
- 			fu->reps += (dumper->blocksize - fs->bcnt) / fu->bcnt;
- 		}
--		if (fu->reps > 1) {
-+		if (fu->reps > 1 && fu->nextpr) {
- 			for (pr = fu->nextpr;; pr = pr->nextpr)
- 				if (!pr->nextpr)
- 					break;

Attachment: signature.asc
Description: This is a digitally signed message part.

_______________________________________________
openwrt-devel mailing list
openwrt-devel@lists.openwrt.org
https://lists.openwrt.org/mailman/listinfo/openwrt-devel

Reply via email to