PKG_SOURCE_URL:=http://www.busybox.net/downloads/snapshots
PKG_MD5SUM:=x
else
-PKG_VERSION:=1.1.0
+PKG_VERSION:=1.1.1
PKG_BUILD_DIR:=$(BUILD_DIR)/$(PKG_NAME)-$(PKG_VERSION)
PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.bz2
PKG_SOURCE_URL:=http://www.busybox.net/downloads
-PKG_MD5SUM:=855e12c7c9dc90e16b014a788925e4cb
+PKG_MD5SUM:=ff1ade47255c643b68c9113c267ce712
endif
PKG_CAT:=bzcat
-diff -urN busybox-dist/include/applets.h busybox/include/applets.h
---- busybox-dist/include/applets.h 2004-03-13 02:33:09.000000000 -0600
-+++ busybox/include/applets.h 2004-03-16 09:45:29.000000000 -0600
-@@ -313,6 +313,9 @@
- #ifdef CONFIG_KILLALL
- APPLET(killall, kill_main, _BB_DIR_USR_BIN, _BB_SUID_NEVER)
- #endif
-+#ifdef CONFIG_KILLALL5
-+ APPLET(killall5, kill_main, _BB_DIR_USR_BIN, _BB_SUID_NEVER)
-+#endif
- #ifdef CONFIG_KLOGD
- APPLET(klogd, klogd_main, _BB_DIR_SBIN, _BB_SUID_NEVER)
- #endif
-diff -urN busybox-dist/include/usage.h busybox/include/usage.h
---- busybox-dist/include/usage.h 2004-03-13 02:33:09.000000000 -0600
-+++ busybox/include/usage.h 2004-03-16 09:45:29.000000000 -0600
-@@ -1389,6 +1389,13 @@
+diff -Nur busybox-1.1.1/include/applets.h busybox-1.1.1-owrt/include/applets.h
+--- busybox-1.1.1/include/applets.h 2006-03-22 22:16:24.000000000 +0100
++++ busybox-1.1.1-owrt/include/applets.h 2006-04-01 18:23:43.000000000 +0200
+@@ -154,6 +154,7 @@
+ USE_IPTUNNEL(APPLET(iptunnel, iptunnel_main, _BB_DIR_BIN, _BB_SUID_NEVER))
+ USE_KILL(APPLET(kill, kill_main, _BB_DIR_BIN, _BB_SUID_NEVER))
+ USE_KILLALL(APPLET(killall, kill_main, _BB_DIR_USR_BIN, _BB_SUID_NEVER))
++USE_KILLALL5(APPLET(killall5, kill_main, _BB_DIR_USR_BIN, _BB_SUID_NEVER))
+ USE_KLOGD(APPLET(klogd, klogd_main, _BB_DIR_SBIN, _BB_SUID_NEVER))
+ USE_LASH(APPLET(lash, lash_main, _BB_DIR_BIN, _BB_SUID_NEVER))
+ USE_LAST(APPLET(last, last_main, _BB_DIR_USR_BIN, _BB_SUID_NEVER))
+diff -Nur busybox-1.1.1/include/usage.h busybox-1.1.1-owrt/include/usage.h
+--- busybox-1.1.1/include/usage.h 2006-03-22 22:16:24.000000000 +0100
++++ busybox-1.1.1-owrt/include/usage.h 2006-04-01 18:22:53.000000000 +0200
+@@ -1598,6 +1598,13 @@
#define killall_example_usage \
"$ killall apache\n"
#define klogd_trivial_usage \
"[-c n] [-n]"
#define klogd_full_usage \
-diff -urN busybox-dist/procps/Config.in busybox/procps/Config.in
---- busybox-dist/procps/Config.in 2003-12-24 00:02:11.000000000 -0600
-+++ busybox/procps/Config.in 2004-03-16 09:45:29.000000000 -0600
-@@ -30,6 +30,11 @@
+diff -Nur busybox-1.1.1/procps/Config.in busybox-1.1.1-owrt/procps/Config.in
+--- busybox-1.1.1/procps/Config.in 2006-03-22 22:16:25.000000000 +0100
++++ busybox-1.1.1-owrt/procps/Config.in 2006-04-01 18:22:53.000000000 +0200
+@@ -38,6 +38,11 @@
specified commands. If no signal name is specified, SIGTERM is
sent.
config CONFIG_PIDOF
bool "pidof"
default n
-diff -urN busybox-dist/procps/kill.c busybox/procps/kill.c
---- busybox-dist/procps/kill.c 2004-03-15 02:29:03.000000000 -0600
-+++ busybox/procps/kill.c 2004-03-16 09:45:29.000000000 -0600
+diff -Nur busybox-1.1.1/procps/kill.c busybox-1.1.1-owrt/procps/kill.c
+--- busybox-1.1.1/procps/kill.c 2006-03-22 22:16:25.000000000 +0100
++++ busybox-1.1.1-owrt/procps/kill.c 2006-04-01 18:22:53.000000000 +0200
@@ -34,6 +34,7 @@
#define KILL 0
#define KILLALL 1
+#define KILLALL5 2
- extern int kill_main(int argc, char **argv)
+ int kill_main(int argc, char **argv)
{
-@@ -47,6 +48,9 @@
+@@ -48,6 +49,9 @@
#else
whichApp = KILL;
#endif
/* Parse any options */
if (argc < 2)
-@@ -119,6 +123,20 @@
+@@ -126,6 +130,20 @@
}
}
-diff -Nur busybox-1.1.0-pre1/include/usage.h busybox-1.1.0-pre1.openwrt/include/usage.h
---- busybox-1.1.0-pre1/include/usage.h 2005-11-01 00:55:34.000000000 +0100
-+++ busybox-1.1.0-pre1.openwrt/include/usage.h 2005-11-30 11:10:24.000000000 +0100
-@@ -3119,6 +3119,7 @@
+diff -Nur busybox-1.1.1/include/usage.h busybox-1.1.1-owrt/include/usage.h
+--- busybox-1.1.1/include/usage.h 2006-04-01 18:26:21.000000000 +0200
++++ busybox-1.1.1-owrt/include/usage.h 2006-04-01 18:27:45.000000000 +0200
+@@ -3268,6 +3268,7 @@
"\t-n,\t--now\tExit with failure if lease cannot be immediately negotiated\n" \
"\t-p,\t--pidfile=file\tStore process ID of daemon in file\n" \
"\t-q,\t--quit\tQuit after obtaining lease\n" \
+ "\t-R,\t--release\tRelease IP on quit\n" \
"\t-r,\t--request=IP\tIP address to request (default: none)\n" \
"\t-s,\t--script=file\tRun file at dhcp events (default: /usr/share/udhcpc/default.script)\n" \
- "\t-v,\t--version\tDisplay version"
-diff -Nur busybox-1.1.0-pre1/networking/udhcp/dhcpc.c busybox-1.1.0-pre1.openwrt/networking/udhcp/dhcpc.c
---- busybox-1.1.0-pre1/networking/udhcp/dhcpc.c 2005-11-01 00:55:15.000000000 +0100
-+++ busybox-1.1.0-pre1.openwrt/networking/udhcp/dhcpc.c 2005-11-30 11:17:22.000000000 +0100
-@@ -61,6 +61,7 @@
+ "\t-t,\t--retries=NUM\tSend up to NUM request packets\n"\
+diff -Nur busybox-1.1.1/networking/udhcp/dhcpc.c busybox-1.1.1-owrt/networking/udhcp/dhcpc.c
+--- busybox-1.1.1/networking/udhcp/dhcpc.c 2006-03-22 22:16:19.000000000 +0100
++++ busybox-1.1.1-owrt/networking/udhcp/dhcpc.c 2006-04-01 18:28:19.000000000 +0200
+@@ -49,6 +49,7 @@
.abort_if_no_lease = 0,
.foreground = 0,
.quit_after_lease = 0,
.background_if_no_lease = 0,
.interface = "eth0",
.pidfile = NULL,
-@@ -92,6 +93,7 @@
+@@ -82,6 +83,7 @@
" immediately negotiated.\n"
" -p, --pidfile=file Store process ID of daemon in file\n"
" -q, --quit Quit after obtaining lease\n"
" -r, --request=IP IP address to request (default: none)\n"
" -s, --script=file Run file at dhcp events (default:\n"
" " DEFAULT_SCRIPT ")\n"
-@@ -211,6 +213,7 @@
- {"now", no_argument, 0, 'n'},
+@@ -203,6 +205,7 @@
+ {"now", no_argument, 0, 'n'},
{"pidfile", required_argument, 0, 'p'},
{"quit", no_argument, 0, 'q'},
+ {"release", no_argument, 0, 'R'},
{"request", required_argument, 0, 'r'},
{"script", required_argument, 0, 's'},
- {"version", no_argument, 0, 'v'},
-@@ -220,7 +223,7 @@
+ {"timeout", required_argument, 0, 'T'},
+@@ -214,7 +217,7 @@
/* get options */
while (1) {
int option_index = 0;
-- c = getopt_long(argc, argv, "c:CV:fbH:h:F:i:np:qr:s:v", arg_options, &option_index);
-+ c = getopt_long(argc, argv, "c:CV:fbH:h:F:i:np:qRr:s:v", arg_options, &option_index);
+- c = getopt_long(argc, argv, "c:CV:fbH:h:F:i:np:qr:s:T:t:v", arg_options, &option_index);
++ c = getopt_long(argc, argv, "c:CV:fbH:h:F:i:np:qRr:s:T:t:v", arg_options, &option_index);
if (c == -1) break;
switch (c) {
-@@ -290,6 +293,9 @@
+@@ -284,6 +287,9 @@
case 'q':
client_config.quit_after_lease = 1;
break;
}
} else if (retval == -1 && errno == EINTR) {
/* a signal was caught */
-diff -Nur busybox-1.1.0-pre1/networking/udhcp/dhcpc.h busybox-1.1.0-pre1.openwrt/networking/udhcp/dhcpc.h
---- busybox-1.1.0-pre1/networking/udhcp/dhcpc.h 2005-11-01 00:55:15.000000000 +0100
-+++ busybox-1.1.0-pre1.openwrt/networking/udhcp/dhcpc.h 2005-11-30 11:18:00.000000000 +0100
+diff -Nur busybox-1.1.1/networking/udhcp/dhcpc.h busybox-1.1.1-owrt/networking/udhcp/dhcpc.h
+--- busybox-1.1.1/networking/udhcp/dhcpc.h 2006-03-22 22:16:19.000000000 +0100
++++ busybox-1.1.1-owrt/networking/udhcp/dhcpc.h 2006-04-01 18:27:45.000000000 +0200
@@ -19,6 +19,7 @@
struct client_config_t {
char foreground; /* Do not fork */
-diff -urN busybox.old/include/applets.h busybox.dev/include/applets.h
---- busybox.old/include/applets.h 2006-01-11 01:32:47.302791000 +0100
-+++ busybox.dev/include/applets.h 2006-01-11 01:33:18.744756250 +0100
-@@ -475,6 +475,9 @@
- #ifdef CONFIG_NC
- APPLET(nc, nc_main, _BB_DIR_USR_BIN, _BB_SUID_NEVER)
- #endif
-+#ifdef CONFIG_NETMSG
-+ APPLET_NOUSAGE("netmsg", netmsg_main, _BB_DIR_BIN, _BB_SUID_ALWAYS)
-+#endif
- #ifdef CONFIG_NETSTAT
- APPLET(netstat, netstat_main, _BB_DIR_BIN, _BB_SUID_NEVER)
- #endif
-diff -urN busybox.old/networking/Config.in busybox.dev/networking/Config.in
---- busybox.old/networking/Config.in 2005-11-01 00:55:15.000000000 +0100
-+++ busybox.dev/networking/Config.in 2006-01-11 01:33:18.744756250 +0100
-@@ -435,6 +435,12 @@
+diff -Nur busybox-1.1.1/include/applets.h busybox-1.1.1-owrt/include/applets.h
+--- busybox-1.1.1/include/applets.h 2006-04-01 18:26:21.000000000 +0200
++++ busybox-1.1.1-owrt/include/applets.h 2006-04-01 18:36:28.000000000 +0200
+@@ -197,6 +197,7 @@
+ USE_MV(APPLET(mv, mv_main, _BB_DIR_BIN, _BB_SUID_NEVER))
+ USE_NAMEIF(APPLET(nameif, nameif_main, _BB_DIR_SBIN, _BB_SUID_NEVER))
+ USE_NC(APPLET(nc, nc_main, _BB_DIR_USR_BIN, _BB_SUID_NEVER))
++USE_NETMSG(APPLET_NOUSAGE("netmsg", netmsg_main, _BB_DIR_BIN, _BB_SUID_ALWAYS))
+ USE_NETSTAT(APPLET(netstat, netstat_main, _BB_DIR_BIN, _BB_SUID_NEVER))
+ USE_NICE(APPLET(nice, nice_main, _BB_DIR_BIN, _BB_SUID_NEVER))
+ USE_NOHUP(APPLET(nohup, nohup_main, _BB_DIR_USR_BIN, _BB_SUID_NEVER))
+diff -Nur busybox-1.1.1/networking/Config.in busybox-1.1.1-owrt/networking/Config.in
+--- busybox-1.1.1/networking/Config.in 2006-03-22 22:16:19.000000000 +0100
++++ busybox-1.1.1-owrt/networking/Config.in 2006-04-01 18:35:32.000000000 +0200
+@@ -451,6 +451,12 @@
help
A simple Unix utility which reads and writes data across network
connections.
config CONFIG_NC_GAPING_SECURITY_HOLE
bool "gaping security hole"
-diff -urN busybox.old/networking/Makefile.in busybox.dev/networking/Makefile.in
---- busybox.old/networking/Makefile.in 2005-11-01 00:55:15.000000000 +0100
-+++ busybox.dev/networking/Makefile.in 2006-01-11 01:34:02.939518250 +0100
-@@ -28,6 +28,7 @@
+diff -Nur busybox-1.1.1/networking/Makefile.in busybox-1.1.1-owrt/networking/Makefile.in
+--- busybox-1.1.1/networking/Makefile.in 2006-03-22 22:16:19.000000000 +0100
++++ busybox-1.1.1-owrt/networking/Makefile.in 2006-04-01 18:35:32.000000000 +0200
+@@ -30,6 +30,7 @@
NETWORKING-$(CONFIG_IPTUNNEL) += iptunnel.o
NETWORKING-$(CONFIG_NAMEIF) += nameif.o
NETWORKING-$(CONFIG_NC) += nc.o
NETWORKING-$(CONFIG_NETSTAT) += netstat.o
NETWORKING-$(CONFIG_NSLOOKUP) += nslookup.o
NETWORKING-$(CONFIG_PING) += ping.o
-diff -urN busybox.old/networking/netmsg.c busybox.dev/networking/netmsg.c
---- busybox.old/networking/netmsg.c 1970-01-01 01:00:00.000000000 +0100
-+++ busybox.dev/networking/netmsg.c 2006-01-11 01:33:18.748756500 +0100
+diff -Nur busybox-1.1.1/networking/netmsg.c busybox-1.1.1-owrt/networking/netmsg.c
+--- busybox-1.1.1/networking/netmsg.c 1970-01-01 01:00:00.000000000 +0100
++++ busybox-1.1.1-owrt/networking/netmsg.c 2006-04-01 18:35:32.000000000 +0200
@@ -0,0 +1,58 @@
+#include <sys/types.h>
+#include <sys/socket.h>
---- busybox-1.1.0.orig/networking/httpd.c 2006-02-06 16:02:30.000000000 +0100
-+++ busybox-1.1.0/networking/httpd.c 2006-02-06 16:25:34.000000000 +0100
-@@ -109,6 +109,7 @@
+--- busybox-1.1.1/networking/httpd.c 2006-03-22 22:16:19.000000000 +0100
++++ busybox-1.1.1.new/networking/httpd.c 2006-04-01 19:41:42.150744624 +0200
+@@ -110,6 +110,7 @@
#include <sys/types.h>
#include <sys/socket.h> /* for connect and socket*/
#include <netinet/in.h> /* for sockaddr_in */
-+#include <arpa/inet.h> /* for inet_aton */
++#include <arpa/inet.h>
#include <sys/time.h>
#include <sys/stat.h>
#include <sys/wait.h>
-@@ -201,8 +202,8 @@
+@@ -204,8 +205,8 @@
void bb_show_usage(void)
{
exit(1);
}
#endif
-@@ -256,6 +257,7 @@
+@@ -255,6 +256,7 @@
#endif
unsigned port; /* server initial port and for
set env REMOTE_PORT */
-+ char *address; /* server initial address */
++ char *address;
union HTTPD_FOUND {
const char *found_mime_type;
const char *found_moved_temporarily;
-@@ -942,7 +944,10 @@
+@@ -958,7 +960,10 @@
/* inet_addr() returns a value that is already in network order */
memset(&lsocket, 0, sizeof(lsocket));
lsocket.sin_family = AF_INET;
lsocket.sin_port = htons(config->port) ;
fd = socket(AF_INET, SOCK_STREAM, 0);
if (fd >= 0) {
-@@ -1985,7 +1990,7 @@
- #define OPT_INC_3 ENABLE_FEATURE_HTTPD_AUTH_MD5
+@@ -1996,6 +2001,7 @@
+ USE_FEATURE_HTTPD_AUTH_MD5(m_opt_md5,)
+ USE_FEATURE_HTTPD_SETUID(u_opt_setuid,)
+ SKIP_FEATURE_HTTPD_USAGE_FROM_INETD_ONLY(p_opt_port,)
++ SKIP_FEATURE_HTTPD_USAGE_FROM_INETD_ONLY(l_opt_addr,)
+ };
- #ifndef CONFIG_FEATURE_HTTPD_USAGE_FROM_INETD_ONLY
-- "p:"
-+ "p:l:"
- #endif
- #ifdef CONFIG_FEATURE_HTTPD_SETUID
- "u:"
-@@ -1999,7 +2004,8 @@
- #define OPT_REALM (1<<(2+OPT_INC_1+OPT_INC_2)) /* r */
- #define OPT_MD5 (1<<(2+OPT_INC_1+OPT_INC_2+OPT_INC_3)) /* m */
- #define OPT_PORT (1<<(3+OPT_INC_1+OPT_INC_2+OPT_INC_3)) /* p */
--#define OPT_SETUID (1<<(4+OPT_INC_1+OPT_INC_2+OPT_INC_3)) /* u */
-+#define OPT_ADDRESS (1<<(4+OPT_INC_1+OPT_INC_2+OPT_INC_3)) /* l */
-+#define OPT_SETUID (1<<(5+OPT_INC_1+OPT_INC_2+OPT_INC_3)) /* u */
+ static const char httpd_opts[]="c:d:h:"
+@@ -2003,7 +2009,7 @@
+ USE_FEATURE_HTTPD_BASIC_AUTH("r:")
+ USE_FEATURE_HTTPD_AUTH_MD5("m:")
+ USE_FEATURE_HTTPD_SETUID("u:")
+- SKIP_FEATURE_HTTPD_USAGE_FROM_INETD_ONLY("p:");
++ SKIP_FEATURE_HTTPD_USAGE_FROM_INETD_ONLY("p:l:");
+ #define OPT_CONFIG_FILE (1<<c_opt_config_file)
+ #define OPT_DECODE_URL (1<<d_opt_decode_url)
+@@ -2024,6 +2030,8 @@
+ #define OPT_PORT SKIP_FEATURE_HTTPD_USAGE_FROM_INETD_ONLY((1<<p_opt_port)) \
+ USE_FEATURE_HTTPD_USAGE_FROM_INETD_ONLY(0)
+
++#define OPT_ADDRESS SKIP_FEATURE_HTTPD_USAGE_FROM_INETD_ONLY((1<<l_opt_addr)) \
++ USE_FEATURE_HTTPD_USAGE_FROM_INETD_ONLY(0)
#ifdef HTTPD_STANDALONE
-@@ -2016,6 +2022,7 @@
- #endif
- #ifndef CONFIG_FEATURE_HTTPD_USAGE_FROM_INETD_ONLY
- const char *s_port;
-+ const char *s_addr;
- int server;
- #endif
+ int main(int argc, char *argv[])
+@@ -2036,6 +2044,7 @@
+ char *url_for_decode;
+ USE_FEATURE_HTTPD_ENCODE_URL_STR(const char *url_for_encode;)
+ SKIP_FEATURE_HTTPD_USAGE_FROM_INETD_ONLY(const char *s_port;)
++ SKIP_FEATURE_HTTPD_USAGE_FROM_INETD_ONLY(const char *s_addr;)
+ SKIP_FEATURE_HTTPD_USAGE_FROM_INETD_ONLY(int server;)
-@@ -2035,6 +2042,7 @@
+ USE_FEATURE_HTTPD_SETUID(const char *s_uid;)
+@@ -2050,6 +2059,7 @@
#ifndef CONFIG_FEATURE_HTTPD_USAGE_FROM_INETD_ONLY
config->port = 80;
#endif
config->ContentLength = -1;
-@@ -2052,6 +2060,7 @@
- #endif
- #ifndef CONFIG_FEATURE_HTTPD_USAGE_FROM_INETD_ONLY
- , &s_port
-+ , &s_addr
- #endif
- #ifdef CONFIG_FEATURE_HTTPD_SETUID
- , &s_uid
-@@ -2077,6 +2086,8 @@
+@@ -2061,6 +2071,7 @@
+ USE_FEATURE_HTTPD_AUTH_MD5(, &pass)
+ USE_FEATURE_HTTPD_SETUID(, &s_uid)
+ SKIP_FEATURE_HTTPD_USAGE_FROM_INETD_ONLY(, &s_port)
++ SKIP_FEATURE_HTTPD_USAGE_FROM_INETD_ONLY(, &s_addr)
+ );
+
+ if(opt & OPT_DECODE_URL) {
+@@ -2082,6 +2093,8 @@
#ifndef CONFIG_FEATURE_HTTPD_USAGE_FROM_INETD_ONLY
if(opt & OPT_PORT)
config->port = bb_xgetlarg(s_port, 10, 1, 0xffff);
---- busybox-1.1.0.orig/networking/httpd.c 2006-02-06 16:41:57.000000000 +0100
-+++ busybox-1.1.0/networking/httpd.c 2006-02-06 16:41:26.000000000 +0100
+diff -Nur busybox-1.1.1/networking/httpd.c busybox-1.1.1-owrt/networking/httpd.c
+--- busybox-1.1.1/networking/httpd.c 2006-04-01 19:42:36.000000000 +0200
++++ busybox-1.1.1-owrt/networking/httpd.c 2006-04-01 19:43:59.000000000 +0200
@@ -247,6 +247,7 @@
+ const char *query;
- #ifdef CONFIG_FEATURE_HTTPD_CGI
- char *referer;
-+ char *user_agent;
- #endif
+ USE_FEATURE_HTTPD_CGI(char *referer;)
++ USE_FEATURE_HTTPD_CGI(char *user_agent;)
const char *configFile;
-@@ -1192,6 +1193,7 @@
+
+@@ -1208,6 +1209,7 @@
addEnv("SERVER", "PROTOCOL", "HTTP/1.0");
addEnv("GATEWAY_INTERFACE", "", "CGI/1.1");
addEnv("REMOTE", "ADDR", config->rmt_ip_str);
#ifdef CONFIG_FEATURE_HTTPD_SET_REMOTE_PORT_TO_ENV
addEnvPort("REMOTE");
#endif
-@@ -1737,6 +1739,10 @@
+@@ -1771,6 +1773,10 @@
for(test = buf + 8; isspace(*test); test++)
;
config->referer = strdup(test);
--- /dev/null
+diff -Nur busybox-1.1.1/findutils/find.c busybox-1.1.1-owrt/findutils/find.c
+--- busybox-1.1.1/findutils/find.c 2006-03-22 22:16:25.000000000 +0100
++++ busybox-1.1.1-owrt/findutils/find.c 2006-04-01 19:23:30.000000000 +0200
+@@ -79,6 +79,15 @@
+
+ static int fileAction(const char *fileName, struct stat *statbuf, void* junk)
+ {
++#ifdef CONFIG_FEATURE_FIND_XDEV
++ if (S_ISDIR(statbuf->st_mode) && xdev_count) {
++ int i;
++ for (i=0; i<xdev_count; i++) {
++ if (xdev_dev[i] != statbuf->st_dev)
++ return SKIP;
++ }
++ }
++#endif
+ if (pattern != NULL) {
+ const char *tmp = strrchr(fileName, '/');
+
+@@ -125,21 +134,6 @@
+ goto no_match;
+ }
+ #endif
+-#ifdef CONFIG_FEATURE_FIND_XDEV
+- if (xdev_count) {
+- int i;
+- for (i=0; i<xdev_count; i++) {
+- if (xdev_dev[i] == statbuf-> st_dev)
+- break;
+- }
+- if (i == xdev_count) {
+- if(S_ISDIR(statbuf->st_mode))
+- return SKIP;
+- else
+- goto no_match;
+- }
+- }
+-#endif
+ #ifdef CONFIG_FEATURE_FIND_NEWER
+ if (newer_mtime != 0) {
+ time_t file_age = newer_mtime - statbuf->st_mtime;
+diff -Nur busybox-1.1.1/libbb/Makefile.in busybox-1.1.1-owrt/libbb/Makefile.in
+--- busybox-1.1.1/libbb/Makefile.in 2006-03-22 22:16:22.000000000 +0100
++++ busybox-1.1.1-owrt/libbb/Makefile.in 2006-04-01 19:23:30.000000000 +0200
+@@ -39,6 +39,7 @@
+ # conditionally compiled objects:
+ LIBBB-$(CONFIG_FEATURE_SHADOWPASSWDS)+=pwd2spwd.c
+ LIBBB-$(CONFIG_FEATURE_MOUNT_LOOP)+= loop.c
++LIBBB-$(CONFIG_LOSETUP)+= loop.c
+ LIBBB-$(CONFIG_FEATURE_MTAB_SUPPORT)+= mtab.c
+ LIBBB-$(CONFIG_PASSWD)+= pw_encrypt.c
+ LIBBB-$(CONFIG_SULOGIN)+= pw_encrypt.c
+diff -Nur busybox-1.1.1/modutils/insmod.c busybox-1.1.1-owrt/modutils/insmod.c
+--- busybox-1.1.1/modutils/insmod.c 2006-03-22 22:16:20.000000000 +0100
++++ busybox-1.1.1-owrt/modutils/insmod.c 2006-04-01 19:23:30.000000000 +0200
+@@ -516,12 +516,6 @@
+ #include <elf.h>
+ #include <endian.h>
+
+-#if BB_LITTLE_ENDIAN
+-# define ELFDATAM ELFDATA2LSB
+-#else
+-# define ELFDATAM ELFDATA2MSB
+-#endif
+-
+ #ifndef ElfW
+ # if ELFCLASSM == ELFCLASS32
+ # define ElfW(x) Elf32_ ## x
+@@ -3331,7 +3325,8 @@
+ return NULL;
+ }
+ if (f->header.e_ident[EI_CLASS] != ELFCLASSM
+- || f->header.e_ident[EI_DATA] != ELFDATAM
++ || f->header.e_ident[EI_DATA] != (BB_BIG_ENDIAN
++ ? ELFDATA2MSB : ELFDATA2LSB)
+ || f->header.e_ident[EI_VERSION] != EV_CURRENT
+ || !MATCH_MACHINE(f->header.e_machine)) {
+ bb_error_msg("ELF file not for this architecture");
+diff -Nur busybox-1.1.1/util-linux/Makefile.in busybox-1.1.1-owrt/util-linux/Makefile.in
+--- busybox-1.1.1/util-linux/Makefile.in 2006-03-22 22:16:26.000000000 +0100
++++ busybox-1.1.1-owrt/util-linux/Makefile.in 2006-04-01 19:23:30.000000000 +0200
+@@ -38,6 +38,8 @@
+ UTILLINUX-$(CONFIG_SWITCH_ROOT) +=switch_root.o
+ UTILLINUX-$(CONFIG_UMOUNT) +=umount.o
+
++UTILLINUX-y:=$(sort $(UTILLINUX-y))
++
+ ifneq ($(strip $(UTILLINUX-y)),)
+ libraries-y+=$(UTILLINUX_DIR)$(UTILLINUX_AR)
+ endif
+diff -Nur busybox-1.1.1/util-linux/mount.c busybox-1.1.1-owrt/util-linux/mount.c
+--- busybox-1.1.1/util-linux/mount.c 2006-03-22 22:16:26.000000000 +0100
++++ busybox-1.1.1-owrt/util-linux/mount.c 2006-04-01 19:23:30.000000000 +0200
+@@ -184,6 +184,8 @@
+ {
+ llist_free(fslist);
+ }
++#else
++void delete_block_backed_filesystems(void);
+ #endif
+
+ #if ENABLE_FEATURE_MTAB_SUPPORT
+@@ -196,12 +198,9 @@
+
+ // Perform actual mount of specific filesystem at specific location.
+
+-static int mount_it_now(struct mntent *mp, int vfsflags)
++static int mount_it_now(struct mntent *mp, int vfsflags, char *filteropts)
+ {
+ int rc;
+- char *filteropts = 0;
+-
+- parse_mount_options(mp->mnt_opts, &filteropts);
+
+ if (fakeIt) { return 0; }
+
+@@ -217,8 +216,6 @@
+ vfsflags |= MS_RDONLY;
+ }
+
+- free(filteropts);
+-
+ // Abort entirely if permission denied.
+
+ if (rc && errno == EPERM)
+@@ -266,11 +263,11 @@
+ static int singlemount(struct mntent *mp)
+ {
+ int rc = 1, vfsflags;
+- char *loopFile = 0;
++ char *loopFile = 0, *filteropts = 0;
+ llist_t *fl = 0;
+ struct stat st;
+
+- vfsflags = parse_mount_options(mp->mnt_opts, 0);
++ vfsflags = parse_mount_options(mp->mnt_opts, &filteropts);
+
+ // Treat fstype "auto" as unspecified.
+
+@@ -282,16 +279,16 @@
+ (!mp->mnt_type || !strcmp(mp->mnt_type,"nfs")) &&
+ strchr(mp->mnt_fsname, ':') != NULL)
+ {
+- char *options=0;
+- parse_mount_options(mp->mnt_opts, &options);
+- if (nfsmount(mp->mnt_fsname, mp->mnt_dir, &vfsflags, &options, 1)) {
++ if (nfsmount(mp->mnt_fsname, mp->mnt_dir, &vfsflags, &filteropts, 1)) {
+ bb_perror_msg("nfsmount failed");
+ return 1;
++ } else {
++ // Strangely enough, nfsmount() doesn't actually mount() anything.
++ rc = mount_it_now(mp, vfsflags, filteropts);
++ if (ENABLE_FEATURE_CLEAN_UP) free(filteropts);
++
++ return rc;
+ }
+-
+- // Strangely enough, nfsmount() doesn't actually mount() anything.
+-
+- else return mount_it_now(mp, vfsflags);
+ }
+
+ // Look at the file. (Not found isn't a failure for remount.)
+@@ -324,7 +321,7 @@
+ * to the actual mount. */
+
+ if (mp->mnt_type || (vfsflags & (MS_REMOUNT | MS_BIND | MS_MOVE)))
+- rc = mount_it_now(mp, vfsflags);
++ rc = mount_it_now(mp, vfsflags, filteropts);
+
+ // Loop through filesystem types until mount succeeds or we run out
+
+@@ -336,25 +333,26 @@
+
+ if (!fslist) {
+ fslist = get_block_backed_filesystems();
+-#if ENABLE_FEATURE_CLEAN_UP
+ if (ENABLE_FEATURE_CLEAN_UP && fslist)
+ atexit(delete_block_backed_filesystems);
+-#endif
+ }
+
+ for (fl = fslist; fl; fl = fl->link) {
+ mp->mnt_type = fl->data;
+
+- if (!(rc = mount_it_now(mp,vfsflags))) break;
++ if (!(rc = mount_it_now(mp,vfsflags, filteropts))) break;
+
+ mp->mnt_type = 0;
+ }
+ }
+
+- // Mount failed. Clean up
++ if (ENABLE_FEATURE_CLEAN_UP) free(filteropts);
++
++ // If mount failed, clean up loop file (if any).
++
+ if (rc && loopFile) {
+ del_loop(mp->mnt_fsname);
+- if(ENABLE_FEATURE_CLEAN_UP) {
++ if (ENABLE_FEATURE_CLEAN_UP) {
+ free(loopFile);
+ free(mp->mnt_fsname);
+ }
+@@ -548,7 +546,6 @@
+ if (ENABLE_FEATURE_CLEAN_UP) {
+ free(storage_path);
+ free(cmdopts);
+- free(fstype);
+ }
+
+ if(rc)