busybox: update to v1.13.4 (closes: #4279)

SVN-Revision: 16063
master
Nicolas Thill 15 years ago
parent b90bd689a2
commit e7133da4aa
  1. 6
      package/busybox/Makefile
  2. 46
      package/busybox/config/Config.in
  3. 11
      package/busybox/config/archival/Config.in
  4. 15
      package/busybox/config/console-tools/Config.in
  5. 10
      package/busybox/config/coreutils/Config.in
  6. 1
      package/busybox/config/debianutils/Config.in
  7. 2
      package/busybox/config/editors/Config.in
  8. 2
      package/busybox/config/findutils/Config.in
  9. 10
      package/busybox/config/init/Config.in
  10. 20
      package/busybox/config/ipsvd/Config.in
  11. 12
      package/busybox/config/loginutils/Config.in
  12. 69
      package/busybox/config/mailutils/Config.in
  13. 37
      package/busybox/config/miscutils/Config.in
  14. 244
      package/busybox/config/modutils/Config.in
  15. 26
      package/busybox/config/networking/Config.in
  16. 6
      package/busybox/config/networking/udhcp/Config.in
  17. 5
      package/busybox/config/printutils/Config.in
  18. 31
      package/busybox/config/procps/Config.in
  19. 17
      package/busybox/config/runit/Config.in
  20. 2
      package/busybox/config/selinux/Config.in
  21. 19
      package/busybox/config/util-linux/Config.in
  22. 2
      package/busybox/patches/001-init_avoid_loop_opening_tty.patch
  23. 13
      package/busybox/patches/002-darwin_compile_fix.patch
  24. 8
      package/busybox/patches/110-wget_getopt_fix.patch
  25. 2
      package/busybox/patches/240-udhcpc_retries.patch
  26. 12
      package/busybox/patches/241-udhcpc-oversized_packets.patch
  27. 10
      package/busybox/patches/242-udhcpc_msgs.patch
  28. 4
      package/busybox/patches/243-udhcpc_changed_ifindex.patch
  29. 4
      package/busybox/patches/250-ash_export-n.patch
  30. 6
      package/busybox/patches/300-netmsg.patch
  31. 2
      package/busybox/patches/310-passwd_access.patch
  32. 8
      package/busybox/patches/340-lock_util.patch
  33. 16
      package/busybox/patches/350-httpd_redir.patch
  34. 2
      package/busybox/patches/410-httpd_cgi_headers.patch
  35. 2
      package/busybox/patches/440-httpd_chdir.patch
  36. 42
      package/busybox/patches/450-httpd_accept_header.patch
  37. 653
      package/busybox/patches/470-insmod_search.patch
  38. 22
      package/busybox/patches/480-vi_search.patch
  39. 12
      package/busybox/patches/510-awk_include.patch
  40. 0
      package/busybox/patches/530-unsigned_bitwise_ops.patch
  41. 49
      package/busybox/patches/803-id_getgrouplist.patch
  42. 11
      package/busybox/patches/810-lsmod-infinite-loop.patch

@ -1,4 +1,4 @@
#
#
# Copyright (C) 2006-2009 OpenWrt.org
#
# This is free software, licensed under the GNU General Public License v2.
@ -8,13 +8,13 @@
include $(TOPDIR)/rules.mk
PKG_NAME:=busybox
PKG_VERSION:=1.12.4
PKG_VERSION:=1.13.4
PKG_RELEASE:=1
PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.bz2
PKG_SOURCE_URL:=http://www.busybox.net/downloads \
http://distfiles.gentoo.org/distfiles/
PKG_MD5SUM:=5b8c427bf596732d6b6156672e6e093f
PKG_MD5SUM:=8a5eb7f15d4077d18fa97bda7a4e5412
include $(INCLUDE_DIR)/package.mk

@ -154,15 +154,17 @@ config BUSYBOX_CONFIG_FEATURE_SUID
default y
help
With this option you can install the busybox binary belonging
to root with the suid bit set, and it'll and it'll automatically drop
to root with the suid bit set, and it will automatically drop
priviledges for applets that don't need root access.
If you're really paranoid and don't want to do this, build two
If you are really paranoid and don't want to do this, build two
busybox binaries with different applets in them (and the appropriate
symlinks pointing to each binary), and only set the suid bit on the
one that needs it. The applets currently marked to need the suid bit
are login, passwd, su, ping, traceroute, crontab, dnsd, ipcrm, ipcs,
and vlock.
are:
crontab, dnsd, findfs, ipcrm, ipcs, login, passwd, ping, su,
traceroute, vlock.
config BUSYBOX_CONFIG_FEATURE_SUID_CONFIG
bool "Runtime SUID/SGID configuration via /etc/busybox.conf"
@ -253,18 +255,18 @@ config BUSYBOX_CONFIG_BUSYBOX_EXEC_PATH
# These are auto-selected by other options
config BUSYBOX_CONFIG_FEATURE_SYSLOG
bool "Support for logging to syslog"
bool #No description makes it a hidden option
default y
help
This option is auto-selected when you select any applet which may
send its output to syslog. You do not need to select it manually.
#help
# This option is auto-selected when you select any applet which may
# send its output to syslog. You do not need to select it manually.
config BUSYBOX_CONFIG_FEATURE_HAVE_RPC
bool "RPC support"
bool #No description makes it a hidden option
default y
help
This is automatically selected if any of enabled applets need it.
You do not need to select it manually.
#help
# This is automatically selected if any of enabled applets need it.
# You do not need to select it manually.
endmenu
@ -401,9 +403,12 @@ config BUSYBOX_CONFIG_CROSS_COMPILER_PREFIX
help
If you want to build BusyBox with a cross compiler, then you
will need to set this to the cross-compiler prefix, for example,
"i386-uclibc-". Note that CROSS_COMPILE environment variable
or "make CROSS_COMPILE=xxx ..." will override this selection.
For native build leave it empty.
"i386-uclibc-".
Note that CROSS_COMPILE environment variable or
"make CROSS_COMPILE=xxx ..." will override this selection.
Native builds leave this empty.
endmenu
@ -490,8 +495,8 @@ config BUSYBOX_CONFIG_INCLUDE_SUSv2
will be supported in head, tail, and fold. (Note: should
affect renice too.)
config BUSYBOX_CONFIG_PARSE
bool "Uniform config file parser debugging applet: parse"
### config PARSE
### bool "Uniform config file parser debugging applet: parse"
endmenu
@ -589,9 +594,10 @@ source package/busybox/config/modutils/Config.in
source package/busybox/config/util-linux/Config.in
source package/busybox/config/miscutils/Config.in
source package/busybox/config/networking/Config.in
source package/busybox/config/printutils/Config.in
source package/busybox/config/mailutils/Config.in
source package/busybox/config/procps/Config.in
source package/busybox/config/shell/Config.in
source package/busybox/config/sysklogd/Config.in
source package/busybox/config/runit/Config.in
source package/busybox/config/selinux/Config.in
source package/busybox/config/printutils/Config.in
source package/busybox/config/shell/Config.in
source package/busybox/config/sysklogd/Config.in

@ -13,7 +13,7 @@ config BUSYBOX_CONFIG_FEATURE_SEAMLESS_LZMA
config BUSYBOX_CONFIG_FEATURE_SEAMLESS_BZ2
bool "Make tar, rpm, modprobe etc understand .bz2 data"
default y
default n
help
Make tar, rpm, modprobe etc understand .bz2 data.
@ -77,7 +77,7 @@ config BUSYBOX_CONFIG_BUNZIP2
config BUSYBOX_CONFIG_BZIP2
bool "bzip2"
default y
default n
help
bzip2 is a compression utility using the Burrows-Wheeler block
sorting text compression algorithm, and Huffman coding. Compression
@ -113,6 +113,7 @@ config BUSYBOX_CONFIG_FEATURE_CPIO_O
config BUSYBOX_CONFIG_DPKG
bool "dpkg"
default n
select BUSYBOX_CONFIG_FEATURE_SEAMLESS_GZ
help
dpkg is a medium-level tool to install, build, remove and manage
Debian packages.
@ -123,9 +124,9 @@ config BUSYBOX_CONFIG_DPKG
config BUSYBOX_CONFIG_DPKG_DEB
bool "dpkg_deb"
default n
select BUSYBOX_CONFIG_FEATURE_SEAMLESS_GZ
help
dpkg-deb packs, unpacks and provides information about Debian
archives.
dpkg-deb unpacks and provides information about Debian archives.
This implementation of dpkg-deb cannot pack archives.
@ -177,7 +178,7 @@ config BUSYBOX_CONFIG_TAR
create compressed archives. It's probably the most widely used
UNIX archive program.
if TAR
if BUSYBOX_CONFIG_TAR
config BUSYBOX_CONFIG_FEATURE_TAR_CREATE
bool "Enable archive creation"

@ -101,6 +101,21 @@ config BUSYBOX_CONFIG_SETFONT
help
Allows to load console screen map. Useful for i18n.
config BUSYBOX_CONFIG_FEATURE_SETFONT_TEXTUAL_MAP
bool "Support reading textual screen maps"
default n
depends on BUSYBOX_CONFIG_SETFONT
help
Support reading textual screen maps.
config BUSYBOX_CONFIG_DEFAULT_SETFONT_DIR
string "Default directory for console-tools files"
default n
depends on BUSYBOX_CONFIG_SETFONT
help
Directory to use if setfont's params are simple filenames
(not /path/to/file or ./file). Default is "" (no default directory).
config BUSYBOX_CONFIG_SETKEYCODES
bool "setkeycodes"
default n

@ -136,12 +136,12 @@ config BUSYBOX_CONFIG_DF
df reports the amount of disk space used and available
on filesystems.
config BUSYBOX_CONFIG_FEATURE_DF_INODE
bool "Enable -i (inode information)"
config BUSYBOX_CONFIG_FEATURE_DF_FANCY
bool "Enable -a, -i, -B"
default n
depends on BUSYBOX_CONFIG_DF
help
This option enables support for df -i.
This option enables -a, -i and -B.
config BUSYBOX_CONFIG_DIRNAME
bool "dirname"
@ -189,7 +189,7 @@ config BUSYBOX_CONFIG_ECHO
config BUSYBOX_CONFIG_FEATURE_FANCY_ECHO
bool "Enable echo options (-n and -e)"
default y
depends on BUSYBOX_CONFIG_ECHO
depends on BUSYBOX_CONFIG_ECHO || BUSYBOX_CONFIG_ASH_BUILTIN_ECHO
help
This adds options (-n and -e) to echo.
@ -649,7 +649,7 @@ config BUSYBOX_CONFIG_TEST
config BUSYBOX_CONFIG_FEATURE_TEST_64
bool "Extend test to 64 bit"
default n
depends on BUSYBOX_CONFIG_TEST
depends on BUSYBOX_CONFIG_TEST || BUSYBOX_CONFIG_ASH_BUILTIN_TEST
help
Enable 64-bit support in test.

@ -64,6 +64,7 @@ config BUSYBOX_CONFIG_FEATURE_START_STOP_DAEMON_FANCY
Support additional arguments.
-o|--oknodo ignored since we exit with 0 anyway
-v|--verbose
-N|--nicelevel N
config BUSYBOX_CONFIG_FEATURE_START_STOP_DAEMON_LONG_OPTIONS
bool "Enable long options"

@ -12,7 +12,7 @@ config BUSYBOX_CONFIG_AWK
Awk is used as a pattern scanning and processing language. This is
the BusyBox implementation of that programming language.
config BUSYBOX_CONFIG_FEATURE_AWK_MATH
config BUSYBOX_CONFIG_FEATURE_AWK_LIBM
bool "Enable math functions (requires libm)"
default y
depends on BUSYBOX_CONFIG_AWK

@ -146,7 +146,7 @@ config BUSYBOX_CONFIG_FEATURE_FIND_DELETE
default n
depends on BUSYBOX_CONFIG_FIND && BUSYBOX_CONFIG_FEATURE_FIND_DEPTH
help
Support the 'find -delete' option for deleting files and direcotries.
Support the 'find -delete' option for deleting files and directories.
WARNING: This option can do much harm if used wrong. Busybox will not
try to protect the user from doing stupid things. Use with care.

@ -12,14 +12,6 @@ config BUSYBOX_CONFIG_INIT
help
init is the first program run when the system boots.
config BUSYBOX_CONFIG_DEBUG_INIT
bool "Debugging aid"
default n
depends on BUSYBOX_CONFIG_INIT
help
Turn this on to disable all the dangerous
rebooting stuff when debugging.
config BUSYBOX_CONFIG_FEATURE_USE_INITTAB
bool "Support reading an inittab file"
default y
@ -83,8 +75,6 @@ config BUSYBOX_CONFIG_FEATURE_INIT_COREDUMPS
core file sizes. If this option is disabled, processes
will not generate any core files.
config BUSYBOX_CONFIG_FEATURE_INITRD
bool "Support running init from within an initrd (not initramfs)"
default n

@ -1,20 +0,0 @@
#
# For a description of the syntax of this configuration file,
# see scripts/kbuild/config-language.txt.
#
menu "ipsvd utilities"
config BUSYBOX_CONFIG_TCPSVD
bool "tcpsvd"
default n
help
tcpsvd listens on a tcp port and runs a program for each new connection
config BUSYBOX_CONFIG_UDPSVD
bool "udpsvd"
default n
help
udpsvd listens on a udp port and runs a program for each new connection
endmenu

@ -233,12 +233,12 @@ config BUSYBOX_CONFIG_CRYPTPW
Applet for crypting a string.
config BUSYBOX_CONFIG_CHPASSWD
bool "chpasswd"
default n
help
chpasswd reads a file of user name and password pairs from
standard input and uses this information to update a group of
existing users.
bool "chpasswd"
default n
help
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_SU
bool "su"

@ -0,0 +1,69 @@
menu "Mail Utilities"
config BUSYBOX_CONFIG_MAKEMIME
bool "makemime"
default n
help
Create MIME-formatted messages.
config BUSYBOX_CONFIG_FEATURE_MIME_CHARSET
string "Default charset"
default n
depends on BUSYBOX_CONFIG_MAKEMIME || BUSYBOX_CONFIG_REFORMIME || BUSYBOX_CONFIG_SENDMAIL
help
Default charset of the message.
config BUSYBOX_CONFIG_POPMAILDIR
bool "popmaildir"
default n
help
Simple yet powerful POP3 mail popper. Delivers content
of remote mailboxes to local Maildir.
config BUSYBOX_CONFIG_FEATURE_POPMAILDIR_DELIVERY
bool "Allow message filters and custom delivery program"
default n
depends on BUSYBOX_CONFIG_POPMAILDIR
help
Allow to use a custom program to filter the content
of the message before actual delivery (-F "prog [args...]").
Allow to use a custom program for message actual delivery
(-M "prog [args...]").
config BUSYBOX_CONFIG_REFORMIME
bool "reformime"
default n
help
Parse MIME-formatted messages.
config BUSYBOX_CONFIG_FEATURE_REFORMIME_COMPAT
bool "Accept and ignore options other than -x and -X"
default n
depends on BUSYBOX_CONFIG_REFORMIME
help
Accept (for compatibility only) and ignore options
other than -x and -X.
config BUSYBOX_CONFIG_SENDMAIL
bool "sendmail"
default n
help
Barebones sendmail.
config BUSYBOX_CONFIG_FEATURE_SENDMAIL_MAILX
bool "Allow to specify subject, attachments, their charset etc"
default n
depends on BUSYBOX_CONFIG_SENDMAIL
help
Allow to specify subject, attachments and their charset.
Allow to use custom connection helper.
config BUSYBOX_CONFIG_FEATURE_SENDMAIL_MAILXX
bool "Allow to specify Cc: addresses and some additional headers"
default n
depends on BUSYBOX_CONFIG_FEATURE_SENDMAIL_MAILX
help
Allow to specify Cc: addresses and some additional headers:
Errors-To:
endmenu

@ -107,7 +107,7 @@ config BUSYBOX_CONFIG_CROND
# Run daily cron jobs at 4:40 every day:
40 4 * * * /etc/cron/daily > /dev/null 2>&1
config BUSYBOX_CONFIG_DEBUG_CROND_OPTION
config BUSYBOX_CONFIG_FEATURE_CROND_D
bool "Support option -d to redirect output to stderr"
depends on BUSYBOX_CONFIG_CROND
default n
@ -138,6 +138,14 @@ config BUSYBOX_CONFIG_DC
Dc is a reverse-polish desk calculator which supports unlimited
precision arithmetic.
config BUSYBOX_CONFIG_FEATURE_DC_LIBM
bool "Enable power and exp functions (requires libm)"
default n
depends on BUSYBOX_CONFIG_DC
help
Enable power and exp functions.
NOTE: This will require libm to be present for linking.
config BUSYBOX_CONFIG_DEVFSD
bool "devfsd (obsolete)"
default n
@ -188,6 +196,13 @@ config BUSYBOX_CONFIG_FEATURE_DEVFS
/dev/loop0. If your /dev directory has normal names instead of
devfs names, you don't want this.
config BUSYBOX_CONFIG_DEVMEM
bool "devmem"
default n
help
devmem is a small program that reads and writes from physical
memory using /dev/mem.
config BUSYBOX_CONFIG_EJECT
bool "eject"
default n
@ -285,13 +300,13 @@ config BUSYBOX_CONFIG_FEATURE_LESS_FLAGS
The -M flag enables a more sophisticated status line.
The -m flag enables a simpler status line with a percentage.
config BUSYBOX_CONFIG_FEATURE_LESS_FLAGCS
bool "Enable flag changes"
config BUSYBOX_CONFIG_FEATURE_LESS_DASHCMD
bool "Enable flag changes ('-' command)"
default n
depends on BUSYBOX_CONFIG_LESS
help
This enables the ability to change command-line flags within
less itself.
less itself ('-' keyboard command).
config BUSYBOX_CONFIG_FEATURE_LESS_MARKS
bool "Enable marks"
@ -307,6 +322,20 @@ config BUSYBOX_CONFIG_FEATURE_LESS_REGEXP
help
Enable regular expressions, allowing complex file searches.
config BUSYBOX_CONFIG_FEATURE_LESS_LINENUMS
bool "Enable dynamic switching of line numbers"
default n
depends on BUSYBOX_CONFIG_FEATURE_LESS_DASHCMD
help
Enable "-N" command.
config BUSYBOX_CONFIG_FEATURE_LESS_WINCH
bool "Enable automatic resizing on window size changes"
default n
depends on BUSYBOX_CONFIG_LESS
help
Makes less track window size changes.
config BUSYBOX_CONFIG_HDPARM
bool "hdparm"
default n

@ -5,6 +5,20 @@
menu "Linux Module Utilities"
config BUSYBOX_CONFIG_DEFAULT_MODULES_DIR
string "Default directory containing modules"
default "/lib/modules"
help
Directory that contains kernel modules.
Defaults to "/lib/modules"
config BUSYBOX_CONFIG_DEFAULT_DEPMOD_FILE
string "Default name of modules.dep"
default "modules.dep"
help
Filename that contains kernel modules dependencies.
Defaults to "modules.dep"
config BUSYBOX_CONFIG_MODPROBE_SMALL
bool "Simplified modutils"
default n
@ -54,48 +68,83 @@ config BUSYBOX_CONFIG_FEATURE_MODPROBE_SMALL_CHECK_ALREADY_LOADED
Check if the module is already loaded.
N.B. It's racy.
config BUSYBOX_CONFIG_DEPMOD
bool "depmod"
default n
config BUSYBOX_CONFIG_INSMOD
bool "insmod"
default y
depends on !BUSYBOX_CONFIG_MODPROBE_SMALL
help
depmod generates modules.dep (FIXME: elaborate)
insmod is used to load specified modules in the running kernel.
config BUSYBOX_CONFIG_FEATURE_DEPMOD_PRUNE_FANCY
bool "Fancy dependency pruning"
default n
depends on BUSYBOX_CONFIG_DEPMOD
config BUSYBOX_CONFIG_RMMOD
bool "rmmod"
default y
depends on !BUSYBOX_CONFIG_MODPROBE_SMALL
help
By default modules.dep contains all dependencies as listed by
the modules.
If you enable this option then we remove implied modules from
the dependencies.
This makes depmod somewhat bigger but generates a smaller
modules.dep file.
rmmod is used to unload specified modules from the kernel.
If unsure, say N.
config BUSYBOX_CONFIG_LSMOD
bool "lsmod"
default y
depends on !BUSYBOX_CONFIG_MODPROBE_SMALL
help
lsmod is used to display a list of loaded modules.
config BUSYBOX_CONFIG_FEATURE_LSMOD_PRETTY_2_6_OUTPUT
bool "Pretty output"
default y
depends on BUSYBOX_CONFIG_LSMOD
help
This option makes output format of lsmod adjusted to
the format of module-init-tools for Linux kernel 2.6.
Increases size somewhat.
config BUSYBOX_CONFIG_FEATURE_DEPMOD_ALIAS
bool "Alias support"
config BUSYBOX_CONFIG_MODPROBE
bool "modprobe"
default n
depends on BUSYBOX_CONFIG_DEPMOD
depends on !BUSYBOX_CONFIG_MODPROBE_SMALL
help
By default modules.dep does not contain alias information.
Enable this to emit aliases of the form:
Handle the loading of modules, and their dependencies on a high
level.
alias pcmcia:m*c*f03fn*pfn*pa*pb*pc*pd* parport_cs
Note that in the state, modprobe does not understand multiple
module options from the configuration file. See option below.
config BUSYBOX_CONFIG_INSMOD
bool "insmod"
default y
config BUSYBOX_CONFIG_FEATURE_MODPROBE_BLACKLIST
bool
prompt "Blacklist support"
default n
depends on BUSYBOX_CONFIG_MODPROBE
help
Say 'y' here to enable support for the 'blacklist' command in
modprobe.conf. This prevents the alias resolver to resolve
blacklisted modules. This is useful if you want to prevent your
hardware autodetection scripts to load modules like evdev, frame
buffer drivers etc.
config BUSYBOX_CONFIG_DEPMOD
bool "depmod"
default n
depends on !BUSYBOX_CONFIG_MODPROBE_SMALL
help
insmod is used to load specified modules in the running kernel.
depmod generates modules.dep (and potentially modules.alias
and modules.symbols) that contain dependency information
for modprobe.
comment "Options common to multiple modutils"
config BUSYBOX_CONFIG_FEATURE_2_4_MODULES
bool "Support version 2.2/2.4 Linux kernels"
default n
depends on BUSYBOX_CONFIG_INSMOD || BUSYBOX_CONFIG_RMMOD || BUSYBOX_CONFIG_LSMOD
help
Support module loading for 2.2.x and 2.4.x Linux kernels.
This increases size considerably. Say N unless you plan
to run ancient kernels.
config BUSYBOX_CONFIG_FEATURE_INSMOD_VERSION_CHECKING
bool "Module version checking"
bool "Enable module version checking"
default n
depends on BUSYBOX_CONFIG_INSMOD && BUSYBOX_CONFIG_FEATURE_2_4_MODULES
depends on BUSYBOX_CONFIG_FEATURE_2_4_MODULES && (BUSYBOX_CONFIG_INSMOD || BUSYBOX_CONFIG_MODPROBE)
help
Support checking of versions for modules. This is used to
ensure that the kernel and module are made for each other.
@ -103,7 +152,7 @@ config BUSYBOX_CONFIG_FEATURE_INSMOD_VERSION_CHECKING
config BUSYBOX_CONFIG_FEATURE_INSMOD_KSYMOOPS_SYMBOLS
bool "Add module symbols to kernel symbol table"
default n
depends on BUSYBOX_CONFIG_INSMOD && BUSYBOX_CONFIG_FEATURE_2_4_MODULES
depends on BUSYBOX_CONFIG_FEATURE_2_4_MODULES && (BUSYBOX_CONFIG_INSMOD || BUSYBOX_CONFIG_MODPROBE)
help
By adding module symbols to the kernel symbol table, Oops messages
occuring within kernel modules can be properly debugged. By enabling
@ -114,7 +163,7 @@ config BUSYBOX_CONFIG_FEATURE_INSMOD_KSYMOOPS_SYMBOLS
config BUSYBOX_CONFIG_FEATURE_INSMOD_LOADINKMEM
bool "In kernel memory optimization (uClinux only)"
default n
depends on BUSYBOX_CONFIG_INSMOD && BUSYBOX_CONFIG_FEATURE_2_4_MODULES
depends on BUSYBOX_CONFIG_FEATURE_2_4_MODULES && (BUSYBOX_CONFIG_INSMOD || BUSYBOX_CONFIG_MODPROBE)
help
This is a special uClinux only memory optimization that lets insmod
load the specified kernel module directly into kernel space, reducing
@ -122,9 +171,9 @@ config BUSYBOX_CONFIG_FEATURE_INSMOD_LOADINKMEM
being loaded into memory.
config BUSYBOX_CONFIG_FEATURE_INSMOD_LOAD_MAP
bool "Enable load map (-m) option"
bool "Enable insmod load map (-m) option"
default n
depends on BUSYBOX_CONFIG_INSMOD && ( BUSYBOX_CONFIG_FEATURE_2_4_MODULES || BUSYBOX_CONFIG_FEATURE_2_6_MODULES )
depends on BUSYBOX_CONFIG_FEATURE_2_4_MODULES && BUSYBOX_CONFIG_INSMOD
help
Enabling this, one would be able to get a load map
output on stdout. This makes kernel module debugging
@ -135,138 +184,47 @@ config BUSYBOX_CONFIG_FEATURE_INSMOD_LOAD_MAP
config BUSYBOX_CONFIG_FEATURE_INSMOD_LOAD_MAP_FULL
bool "Symbols in load map"
default n
depends on BUSYBOX_CONFIG_FEATURE_INSMOD_LOAD_MAP
depends on BUSYBOX_CONFIG_FEATURE_INSMOD_LOAD_MAP && !BUSYBOX_CONFIG_MODPROBE_SMALL
help
Without this option, -m will only output section
load map. With this option, -m will also output
symbols load map.
config BUSYBOX_CONFIG_RMMOD
bool "rmmod"
default y
depends on !BUSYBOX_CONFIG_MODPROBE_SMALL
help
rmmod is used to unload specified modules from the kernel.
config BUSYBOX_CONFIG_LSMOD
bool "lsmod"
default y
depends on !BUSYBOX_CONFIG_MODPROBE_SMALL
help
lsmod is used to display a list of loaded modules.
config BUSYBOX_CONFIG_FEATURE_LSMOD_PRETTY_2_6_OUTPUT
bool "Pretty output for 2.6.x Linux kernels"
default y
depends on BUSYBOX_CONFIG_LSMOD
help
This option makes output format of lsmod adjusted to
the format of module-init-tools for Linux kernel 2.6.
config BUSYBOX_CONFIG_MODPROBE
bool "modprobe"
default n
depends on !BUSYBOX_CONFIG_MODPROBE_SMALL
help
Handle the loading of modules, and their dependencies on a high
level.
Note that in the state, modprobe does not understand multiple
module options from the configuration file. See option below.
config BUSYBOX_CONFIG_FEATURE_MODPROBE_MULTIPLE_OPTIONS
bool
prompt "Multiple options parsing"
default n
depends on BUSYBOX_CONFIG_MODPROBE
help
Allow modprobe to understand more than one option to pass to
modules.
This is a WIP, while waiting for a common argument parsing
common amongst all BB applets (shell, modprobe, etc...) and
adds around 600 bytes on x86, 700 bytes on ARM. The code is
biggish and uggly, but just works.
Saying Y here is not a bad idea if you're not that short
on storage capacity.
config BUSYBOX_CONFIG_FEATURE_MODPROBE_FANCY_ALIAS
bool
prompt "Fancy alias parsing"
default n
depends on BUSYBOX_CONFIG_MODPROBE && BUSYBOX_CONFIG_FEATURE_2_6_MODULES
help
Say 'y' here to enable parsing of aliases with underscore/dash
mismatch between module name and file name, along with bus-specific
aliases (such as pci:... or usb:... aliases).
config BUSYBOX_CONFIG_FEATURE_MODPROBE_BLACKLIST
bool
prompt "Blacklist support"
default n
depends on BUSYBOX_CONFIG_MODPROBE && BUSYBOX_CONFIG_FEATURE_2_6_MODULES
help
Say 'y' here to enable support for the 'blacklist' command in
modprobe.conf. This prevents the alias resolver to resolve
blacklisted modules. This is useful if you want to prevent your
hardware autodetection scripts to load modules like evdev, frame
buffer drivers etc.
comment "Options common to multiple modutils"
depends on BUSYBOX_CONFIG_INSMOD || BUSYBOX_CONFIG_RMMOD || BUSYBOX_CONFIG_MODPROBE || BUSYBOX_CONFIG_LSMOD || BUSYBOX_CONFIG_DEPMOD
config BUSYBOX_CONFIG_FEATURE_CHECK_TAINTED_MODULE
# Simulate indentation
bool "Support tainted module checking with new kernels"
default y
depends on BUSYBOX_CONFIG_INSMOD || BUSYBOX_CONFIG_LSMOD
depends on !BUSYBOX_CONFIG_MODPROBE_SMALL
help
Support checking for tainted modules. These are usually binary
only modules that will make the linux-kernel list ignore your
support request.
This option is required to support GPLONLY modules.
config BUSYBOX_CONFIG_FEATURE_2_4_MODULES
# Simulate indentation
bool "Support version 2.2.x to 2.4.x Linux kernels"
config BUSYBOX_CONFIG_FEATURE_MODUTILS_ALIAS
bool "Support for module.aliases file"
default n
depends on BUSYBOX_CONFIG_INSMOD || BUSYBOX_CONFIG_RMMOD || BUSYBOX_CONFIG_MODPROBE
depends on BUSYBOX_CONFIG_DEPMOD || BUSYBOX_CONFIG_MODPROBE
help
Support module loading for 2.2.x and 2.4.x Linux kernels.
Generate and parse modules.alias containing aliases for bus
identifiers:
alias pcmcia:m*c*f03fn*pfn*pa*pb*pc*pd* parport_cs
Note:
This is automatically enabled if 2.6 modules are not enabled.
and aliases for logical modules names e.g.:
alias padlock_aes aes
alias aes_i586 aes
alias aes_generic aes
config BUSYBOX_CONFIG_FEATURE_2_6_MODULES
# Simulate indentation
bool "Support version 2.6.x Linux kernels"
default y
depends on BUSYBOX_CONFIG_INSMOD || BUSYBOX_CONFIG_RMMOD || BUSYBOX_CONFIG_MODPROBE
help
Support module loading for newer 2.6.x Linux kernels.
config BUSYBOX_CONFIG_DEFAULT_MODULES_DIR
# Simulate indentation
string "Default directory containing modules"
default "/lib/modules"
depends on BUSYBOX_CONFIG_INSMOD || BUSYBOX_CONFIG_RMMOD || BUSYBOX_CONFIG_MODPROBE || BUSYBOX_CONFIG_MODPROBE_SMALL || BUSYBOX_CONFIG_DEPMOD
help
Directory that contains kernel modules.
Defaults to "/lib/modules"
Say Y if unsure.
config BUSYBOX_CONFIG_DEFAULT_DEPMOD_FILE
# Simulate indentation
string "Default name of modules.dep"
default "modules.dep"
depends on BUSYBOX_CONFIG_INSMOD || BUSYBOX_CONFIG_RMMOD || BUSYBOX_CONFIG_MODPROBE || BUSYBOX_CONFIG_MODPROBE_SMALL || BUSYBOX_CONFIG_DEPMOD
config BUSYBOX_CONFIG_FEATURE_MODUTILS_SYMBOLS
bool "Support for module.symbols file"
default n
depends on BUSYBOX_CONFIG_DEPMOD || BUSYBOX_CONFIG_MODPROBE
help
Filename that contains kernel modules dependencies.
Defaults to "modules.dep"
Generate and parse modules.symbols containing aliases for
symbol_request() kernel calls, such as:
alias symbol:usb_sg_init usbcore
config BUSYBOX_CONFIG_FEATURE_QUERY_MODULE_INTERFACE
bool
default n
depends on BUSYBOX_CONFIG_FEATURE_2_4_MODULES && !BUSYBOX_CONFIG_FEATURE_2_6_MODULES
Say Y if unsure.
endmenu

@ -641,7 +641,7 @@ config BUSYBOX_CONFIG_FEATURE_NETSTAT_WIDE
config BUSYBOX_CONFIG_FEATURE_NETSTAT_PRG
bool "Enable PID/Program name output"
default n
default y
depends on BUSYBOX_CONFIG_NETSTAT
help
Add support for -p flag to print out PID and program name.
@ -687,18 +687,6 @@ config BUSYBOX_CONFIG_ROUTE
help
Route displays or manipulates the kernel's IP routing tables.
config BUSYBOX_CONFIG_SENDMAIL
bool "sendmail"
default n
help
Barebones sendmail.
config BUSYBOX_CONFIG_FETCHMAIL
bool "fetchmail"
default n
help
Barebones fetchmail.
config BUSYBOX_CONFIG_SLATTACH
bool "slattach"
default n
@ -706,6 +694,16 @@ config BUSYBOX_CONFIG_SLATTACH
slattach is a small utility to attach network interfaces to serial
lines.
#config TC
# bool "tc"
# default n
# help
# show / manipulate traffic control settings
#
#config FEATURE_TC_INGRESS
# def_bool n
# depends on TC
config BUSYBOX_CONFIG_TELNET
bool "telnet"
default y
@ -826,7 +824,7 @@ config BUSYBOX_CONFIG_FEATURE_TFTP_BLOCKSIZE
Allow tftp to specify block size, and tftpd to understand
"blksize" option.
config BUSYBOX_CONFIG_DEBUG_TFTP
config BUSYBOX_CONFIG_TFTP_DEBUG
bool "Enable debug"
default n
depends on BUSYBOX_CONFIG_TFTP

@ -74,14 +74,14 @@ config BUSYBOX_CONFIG_FEATURE_UDHCP_PORT
At the cost of ~300 bytes, enables -P port option.
This feature is typically not needed.
config BUSYBOX_CONFIG_FEATURE_UDHCP_DEBUG
config BUSYBOX_CONFIG_UDHCP_DEBUG
bool "Compile udhcp with noisy debugging messages"
default n
depends on BUSYBOX_CONFIG_APP_UDHCPD || BUSYBOX_CONFIG_APP_UDHCPC
help
If selected, udhcpd will output extra debugging output.
config BUSYBOX_CONFIG_FEATURE_RFC3397
config BUSYBOX_CONFIG_FEATURE_UDHCP_RFC3397
bool "Support for RFC3397 domain search (experimental)"
default y
depends on BUSYBOX_CONFIG_APP_UDHCPD || BUSYBOX_CONFIG_APP_UDHCPC
@ -89,7 +89,7 @@ config BUSYBOX_CONFIG_FEATURE_RFC3397
If selected, both client and server will support passing of domain
search lists via option 119, specified in RFC3397.
config BUSYBOX_CONFIG_DHCPC_DEFAULT_SCRIPT
config BUSYBOX_CONFIG_UDHCPC_DEFAULT_SCRIPT
string "Absolute path to config script"
default "/usr/share/udhcpc/default.script"
depends on BUSYBOX_CONFIG_APP_UDHCPC

@ -1,3 +1,8 @@
#
# For a description of the syntax of this configuration file,
# see scripts/kbuild/config-language.txt.
#
menu "Print Utilities"
config BUSYBOX_CONFIG_LPD

@ -135,32 +135,51 @@ config BUSYBOX_CONFIG_TOP
system.
config BUSYBOX_CONFIG_FEATURE_TOP_CPU_USAGE_PERCENTAGE
bool "Show CPU per-process usage percentage (adds 2k bytes)"
bool "Show CPU per-process usage percentage"
default y
depends on BUSYBOX_CONFIG_TOP
help
Make top display CPU usage for each process.
This adds about 2k.
config BUSYBOX_CONFIG_FEATURE_TOP_CPU_GLOBAL_PERCENTS
bool "Show CPU global usage percentage (adds 0.5k bytes)"
bool "Show CPU global usage percentage"
default y
depends on BUSYBOX_CONFIG_FEATURE_TOP_CPU_USAGE_PERCENTAGE
help
Makes top display "CPU: NN% usr NN% sys..." line.
This adds about 0.5k.
config BUSYBOX_CONFIG_FEATURE_TOP_SMP_CPU
bool "SMP CPU usage display ('c' key)"
default n
depends on BUSYBOX_CONFIG_FEATURE_TOP_CPU_GLOBAL_PERCENTS
help
Allow 'c' key to switch between individual/cumulative CPU stats
This adds about 0.5k.
config BUSYBOX_CONFIG_FEATURE_TOP_DECIMALS
bool "Show 1/10th of a percent in CPU/mem statistics (adds 0.3k bytes)"
bool "Show 1/10th of a percent in CPU/mem statistics"
default n
depends on BUSYBOX_CONFIG_FEATURE_TOP_CPU_USAGE_PERCENTAGE
help
Show 1/10th of a percent in CPU/mem statistics.
This adds about 0.3k.
config BUSYBOX_CONFIG_FEATURE_TOP_SMP_PROCESS
bool "Show CPU process runs on ('j' field)"
default n
depends on BUSYBOX_CONFIG_TOP
help
Show CPU where process was last found running on.
This is the 'j' field.
config BUSYBOX_CONFIG_FEATURE_TOPMEM
bool "topmem"
bool "Topmem command ('s' key)"
default n
depends on BUSYBOX_CONFIG_TOP
help
Enable 's' in top (gives lots of memory info)
Enable 's' in top (gives lots of memory info).
config BUSYBOX_CONFIG_UPTIME
bool "uptime"
@ -173,11 +192,9 @@ config BUSYBOX_CONFIG_UPTIME
config BUSYBOX_CONFIG_WATCH
bool "watch"
default n
#huh?? select DATE
help
watch is used to execute a program periodically, showing
output to the screen.
endmenu

@ -20,6 +20,15 @@ config BUSYBOX_CONFIG_RUNSVDIR
a directory, in the services directory dir, up to a limit of 1000
subdirectories, and restarts a runsv process if it terminates.
config BUSYBOX_CONFIG_FEATURE_RUNSVDIR_LOG
bool "Enable scrolling argument log"
depends on BUSYBOX_CONFIG_RUNSVDIR
default n
help
Enable feature where second parameter of runsvdir holds last error
message (viewable via top/ps). Otherwise (feature is off
or no parameter), error messages go to stderr only.
config BUSYBOX_CONFIG_SV
bool "sv"
default n
@ -27,6 +36,14 @@ config BUSYBOX_CONFIG_SV
sv reports the current status and controls the state of services
monitored by the runsv supervisor.
config BUSYBOX_CONFIG_SV_DEFAULT_SERVICE_DIR
string "Default directory for services"
default "/var/service"
depends on BUSYBOX_CONFIG_SV
help
Default directory for services.
Defaults to "/var/service"
config BUSYBOX_CONFIG_SVLOGD
bool "svlogd"
default n

@ -3,7 +3,7 @@
# see scripts/kbuild/config-language.txt.
#
menu "Selinux Utilities"
menu "SELinux Utilities"
depends on BUSYBOX_CONFIG_SELINUX
config BUSYBOX_CONFIG_CHCON

@ -5,6 +5,15 @@
menu "Linux System Utilities"
config BUSYBOX_CONFIG_BLKID
bool "blkid"
default n
select BUSYBOX_CONFIG_VOLUMEID
help
Lists labels and UUIDs of all filesystems.
WARNING:
With all submodules selected, it will add ~8k to busybox.
config BUSYBOX_CONFIG_DMESG
bool "dmesg"
default y
@ -156,9 +165,7 @@ config BUSYBOX_CONFIG_FINDFS
default n
select BUSYBOX_CONFIG_VOLUMEID
help
This is similar to the findfs program that is part of the e2fsprogs
package. However, the e2fsprogs version only support ext2/3. This
version supports those in addition to FAT, swap, and ReiserFS.
Prints the name of a filesystem with given label or UUID.
WARNING:
With all submodules selected, it will add ~8k to busybox.
@ -396,10 +403,8 @@ config BUSYBOX_CONFIG_FEATURE_USE_TERMIOS
unable to move the cursor.
config BUSYBOX_CONFIG_VOLUMEID
bool "Routines for detecting label and uuid on common filesystems"
bool #No description makes it a hidden option
default n
help
TODO
config BUSYBOX_CONFIG_FEATURE_VOLUMEID_EXT
bool "Ext filesystem"
@ -651,7 +656,7 @@ config BUSYBOX_CONFIG_FEATURE_MOUNT_LABEL
select BUSYBOX_CONFIG_VOLUMEID
help
This allows for specifying a device by label or uuid, rather than by
name. This feature utilizes the same functionality as findfs.
name. This feature utilizes the same functionality as blkid/findfs.
config BUSYBOX_CONFIG_FEATURE_MOUNT_NFS
bool "Support mounting NFS file systems"

@ -1,6 +1,6 @@
--- a/init/init.c
+++ b/init/init.c
@@ -498,12 +498,11 @@ static void run_actions(int action_type)
@@ -497,12 +497,11 @@ static void run_actions(int action_type)
for (a = init_action_list; a; a = tmp) {
tmp = a->next;
if (a->action_type & action_type) {

@ -1,13 +0,0 @@
--- a/include/libbb.h
+++ b/include/libbb.h
@@ -83,7 +83,10 @@
extern char **environ;
/* Set the group set for the current user to GROUPS (N of them). */
+#if !defined(__APPLE__)
int setgroups(size_t n, const gid_t *groups);
+#endif
+
#if defined(__GLIBC__) && __GLIBC__ < 2
int vdprintf(int d, const char *format, va_list ap);
#endif

@ -1,9 +1,9 @@
--- a/networking/wget.c
+++ b/networking/wget.c
@@ -437,7 +437,7 @@ int wget_main(int argc UNUSED_PARAM, cha
"directory-prefix\0" Required_argument "P"
"proxy\0" Required_argument "Y"
"user-agent\0" Required_argument "U"
@@ -443,7 +443,7 @@ int wget_main(int argc UNUSED_PARAM, cha
// "tries\0" Required_argument "t"
// "timeout\0" Required_argument "T"
/* Ignored (we always use PASV): */
- "passive-ftp\0" No_argument "\xff"
+ "passive-ftp\0" No_argument "\xfd"
"header\0" Required_argument "\xfe"

@ -9,7 +9,7 @@
if (packet_num == 0)
xid = random_xid();
@@ -383,7 +383,7 @@ int udhcpc_main(int argc UNUSED_PARAM, c
@@ -384,7 +384,7 @@ int udhcpc_main(int argc UNUSED_PARAM, c
continue;
case RENEW_REQUESTED:
case REQUESTING:

@ -1,6 +1,6 @@
--- a/networking/udhcp/packet.c
+++ b/networking/udhcp/packet.c
@@ -114,6 +114,10 @@ uint16_t udhcp_checksum(void *addr, int
@@ -114,6 +114,10 @@ uint16_t FAST_FUNC udhcp_checksum(void *
return ~sum;
}
@ -10,8 +10,8 @@
+}
/* Construct a ip/udp header for a packet, send packet */
int udhcp_send_raw_packet(struct dhcpMessage *payload,
@@ -125,11 +129,7 @@ int udhcp_send_raw_packet(struct dhcpMes
int FAST_FUNC udhcp_send_raw_packet(struct dhcpMessage *payload,
@@ -126,11 +130,7 @@ int FAST_FUNC udhcp_send_raw_packet(stru
int fd;
int result = -1;
const char *msg;
@ -24,7 +24,7 @@
fd = socket(PF_PACKET, SOCK_DGRAM, htons(ETH_P_IP));
if (fd < 0) {
@@ -139,7 +139,7 @@ int udhcp_send_raw_packet(struct dhcpMes
@@ -140,7 +140,7 @@ int FAST_FUNC udhcp_send_raw_packet(stru
memset(&dest, 0, sizeof(dest));
memset(&packet, 0, sizeof(packet));
@ -33,7 +33,7 @@
dest.sll_family = AF_PACKET;
dest.sll_protocol = htons(ETH_P_IP);
@@ -156,23 +156,18 @@ int udhcp_send_raw_packet(struct dhcpMes
@@ -157,23 +157,18 @@ int FAST_FUNC udhcp_send_raw_packet(stru
packet.ip.daddr = dest_ip;
packet.udp.source = htons(source_port);
packet.udp.dest = htons(dest_port);
@ -63,7 +63,7 @@
(struct sockaddr *) &dest, sizeof(dest));
msg = "sendto";
ret_close:
@@ -224,8 +219,7 @@ int udhcp_send_kernel_packet(struct dhcp
@@ -225,8 +220,7 @@ int FAST_FUNC udhcp_send_kernel_packet(s
goto ret_close;
}

@ -1,18 +1,18 @@
--- a/networking/udhcp/clientpacket.c
+++ b/networking/udhcp/clientpacket.c
@@ -101,6 +101,7 @@ int send_decline(uint32_t xid, uint32_t
int send_discover(uint32_t xid, uint32_t requested)
@@ -126,6 +126,7 @@ int FAST_FUNC send_decline(uint32_t xid,
int FAST_FUNC send_discover(uint32_t xid, uint32_t requested)
{
struct dhcpMessage packet;
+ static int msgs = 0;
init_packet(&packet, DHCPDISCOVER);
packet.xid = xid;
@@ -113,6 +114,7 @@ int send_discover(uint32_t xid, uint32_t
@@ -138,6 +139,7 @@ int FAST_FUNC send_discover(uint32_t xid
add_param_req_option(&packet);
+ if (msgs++ < 3)
bb_info_msg("Sending discover...");
return udhcp_send_raw_packet(&packet, INADDR_ANY, CLIENT_PORT, INADDR_BROADCAST,
SERVER_PORT, MAC_BCAST_ADDR, client_config.ifindex);
return raw_bcast_from_client_config_ifindex(&packet);
}

@ -8,8 +8,8 @@
+ * member interfaces were added/removed or if the status of the
+ * bridge changed).
+ * Workaround: refresh it here before processing the next packet */
+ read_interface(client_config.interface, &client_config.ifindex, NULL, client_config.arp);
+ udhcp_read_interface(client_config.interface, &client_config.ifindex, NULL, client_config.arp);
+
if (listen_mode != LISTEN_NONE && sockfd < 0) {
if (listen_mode == LISTEN_KERNEL)
sockfd = listen_socket(/*INADDR_ANY,*/ CLIENT_PORT, client_config.interface);
sockfd = udhcp_listen_socket(/*INADDR_ANY,*/ CLIENT_PORT, client_config.interface);

@ -1,6 +1,6 @@
--- a/shell/ash.c
+++ b/shell/ash.c
@@ -12018,8 +12018,17 @@ exportcmd(int argc UNUSED_PARAM, char **
@@ -12159,8 +12159,17 @@ exportcmd(int argc UNUSED_PARAM, char **
const char *p;
char **aptr;
int flag = argv[0][0] == 'r' ? VREADONLY : VEXPORT;
@ -19,7 +19,7 @@
aptr = argptr;
name = *aptr;
if (name) {
@@ -12031,10 +12040,12 @@ exportcmd(int argc UNUSED_PARAM, char **
@@ -12172,10 +12181,12 @@ exportcmd(int argc UNUSED_PARAM, char **
vp = *findvar(hashvar(name), name);
if (vp) {
vp->flags |= flag;

@ -1,6 +1,6 @@
--- a/include/applets.h
+++ b/include/applets.h
@@ -261,6 +261,7 @@ USE_MT(APPLET(mt, _BB_DIR_BIN, _BB_SUID_
@@ -263,6 +263,7 @@ USE_MT(APPLET(mt, _BB_DIR_BIN, _BB_SUID_
USE_MV(APPLET(mv, _BB_DIR_BIN, _BB_SUID_NEVER))
USE_NAMEIF(APPLET(nameif, _BB_DIR_SBIN, _BB_SUID_NEVER))
USE_NC(APPLET(nc, _BB_DIR_USR_BIN, _BB_SUID_NEVER))
@ -10,7 +10,7 @@
USE_NMETER(APPLET(nmeter, _BB_DIR_USR_BIN, _BB_SUID_NEVER))
--- a/include/usage.h
+++ b/include/usage.h
@@ -2816,6 +2816,9 @@
@@ -2849,6 +2849,9 @@
#endif
@ -37,7 +37,7 @@
default n
--- a/networking/Kbuild
+++ b/networking/Kbuild
@@ -24,6 +24,7 @@ lib-$(CONFIG_IP) += ip.o
@@ -23,6 +23,7 @@ lib-$(CONFIG_IP) += ip.o
lib-$(CONFIG_IPCALC) += ipcalc.o
lib-$(CONFIG_NAMEIF) += nameif.o
lib-$(CONFIG_NC) += nc.o

@ -3,7 +3,7 @@
--- a/networking/httpd.c
+++ b/networking/httpd.c
@@ -1705,21 +1705,32 @@ static int check_user_passwd(const char
@@ -1713,21 +1713,32 @@ static int check_user_passwd(const char
if (ENABLE_FEATURE_HTTPD_AUTH_MD5) {
char *md5_passwd;

@ -1,6 +1,6 @@
--- a/include/applets.h
+++ b/include/applets.h
@@ -222,6 +222,7 @@ USE_LN(APPLET_NOEXEC(ln, ln, _BB_DIR_BIN
@@ -223,6 +223,7 @@ USE_LN(APPLET_NOEXEC(ln, ln, _BB_DIR_BIN
USE_LOAD_POLICY(APPLET(load_policy, _BB_DIR_USR_SBIN, _BB_SUID_NEVER))
USE_LOADFONT(APPLET(loadfont, _BB_DIR_USR_SBIN, _BB_SUID_NEVER))
USE_LOADKMAP(APPLET(loadkmap, _BB_DIR_SBIN, _BB_SUID_NEVER))
@ -10,7 +10,7 @@
USE_LOGNAME(APPLET_NOFORK(logname, logname, _BB_DIR_USR_BIN, _BB_SUID_NEVER, logname))
--- a/include/usage.h
+++ b/include/usage.h
@@ -2132,6 +2132,9 @@
@@ -2150,6 +2150,9 @@
#define loadkmap_example_usage \
"$ loadkmap < /etc/i18n/lang-keymap\n"
@ -22,7 +22,7 @@
#define logger_full_usage "\n\n" \
--- a/miscutils/Config.in
+++ b/miscutils/Config.in
@@ -366,6 +366,12 @@ config FEATURE_HDPARM_HDIO_GETSET_DMA
@@ -395,6 +395,12 @@ config FEATURE_HDPARM_HDIO_GETSET_DMA
Enables the 'hdparm -d' option to get/set using_dma flag.
This is dangerous stuff, so you should probably say N.
@ -37,7 +37,7 @@
default n
--- a/miscutils/Kbuild
+++ b/miscutils/Kbuild
@@ -20,6 +20,7 @@ lib-$(CONFIG_INOTIFYD) += inotifyd.o
@@ -21,6 +21,7 @@ lib-$(CONFIG_INOTIFYD) += inotifyd.o
lib-$(CONFIG_FEATURE_LAST_SMALL)+= last.o
lib-$(CONFIG_FEATURE_LAST_FANCY)+= last_fancy.o
lib-$(CONFIG_LESS) += less.o

@ -1,6 +1,6 @@
--- a/include/usage.h
+++ b/include/usage.h
@@ -1552,7 +1552,8 @@
@@ -1558,7 +1558,8 @@
USE_FEATURE_HTTPD_BASIC_AUTH(" [-r realm]") \
USE_FEATURE_HTTPD_AUTH_MD5(" [-m pass]") \
" [-h home]" \
@ -10,7 +10,7 @@
#define httpd_full_usage "\n\n" \
"Listen for incoming HTTP requests\n" \
"\nOptions:" \
@@ -1570,6 +1571,8 @@
@@ -1576,6 +1577,8 @@
"\n -h HOME Home directory (default .)" \
"\n -e STRING HTML encode STRING" \
"\n -d STRING URL decode STRING" \
@ -18,7 +18,7 @@
+ "\n -H HOST Redirect target host" \
#define hwclock_trivial_usage \
USE_GETOPT_LONG( \
USE_FEATURE_HWCLOCK_LONG_OPTIONS( \
--- a/networking/httpd.c
+++ b/networking/httpd.c
@@ -248,6 +248,8 @@ struct globals {
@ -30,7 +30,7 @@
Htaccess_IP *ip_a_d; /* config allow/deny lines */
USE_FEATURE_HTTPD_BASIC_AUTH(const char *g_realm;)
@@ -293,6 +295,8 @@ struct globals {
@@ -295,6 +297,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)
@ -39,7 +39,7 @@
#define last_mod (G.last_mod )
#define ip_a_d (G.ip_a_d )
#define g_realm (G.g_realm )
@@ -999,8 +1003,11 @@ static void send_headers(int responseNum
@@ -1003,8 +1007,11 @@ static void send_headers(int responseNum
}
#endif
if (responseNum == HTTP_MOVED_TEMPORARILY) {
@ -52,7 +52,7 @@
(g_query ? "?" : ""),
(g_query ? g_query : ""));
}
@@ -1931,8 +1938,12 @@ static void handle_incoming_and_exit(con
@@ -1939,8 +1946,12 @@ static void handle_incoming_and_exit(con
} while (*++tptr);
*++urlp = '\0'; /* terminate after last character */
@ -66,7 +66,7 @@
if (is_directory(urlcopy + 1, 1, &sb)) {
found_moved_temporarily = urlcopy;
}
@@ -2281,7 +2292,9 @@ static void sighup_handler(int sig)
@@ -2293,7 +2304,9 @@ static void sighup_handler(int sig)
#endif
enum {
@ -77,7 +77,7 @@
d_opt_decode_url,
h_opt_home_httpd,
USE_FEATURE_HTTPD_ENCODE_URL_STR(e_opt_encode_url,)
@@ -2330,12 +2343,13 @@ int httpd_main(int argc UNUSED_PARAM, ch
@@ -2342,12 +2355,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. */

@ -1,6 +1,6 @@
--- a/networking/httpd.c
+++ b/networking/httpd.c
@@ -1255,10 +1255,10 @@ static NOINLINE void cgi_io_loop_and_exi
@@ -1259,10 +1259,10 @@ static NOINLINE void cgi_io_loop_and_exi
if (full_write(STDOUT_FILENO, HTTP_200, sizeof(HTTP_200)-1) != sizeof(HTTP_200)-1)
break;
}

@ -1,6 +1,6 @@
--- a/networking/httpd.c
+++ b/networking/httpd.c
@@ -1816,6 +1816,7 @@ static void handle_incoming_and_exit(con
@@ -1824,6 +1824,7 @@ static void handle_incoming_and_exit(con
char *header_ptr = header_ptr;
Htaccess_Proxy *proxy_entry;
#endif

@ -1,42 +0,0 @@
--- a/networking/httpd.c
+++ b/networking/httpd.c
@@ -256,6 +256,8 @@ struct globals {
USE_FEATURE_HTTPD_BASIC_AUTH(char *remoteuser;)
USE_FEATURE_HTTPD_CGI(char *referer;)
USE_FEATURE_HTTPD_CGI(char *user_agent;)
+ USE_FEATURE_HTTPD_CGI(char *http_accept;)
+ USE_FEATURE_HTTPD_CGI(char *http_accept_language;)
off_t file_size; /* -1 - unknown */
#if ENABLE_FEATURE_HTTPD_RANGES
@@ -303,6 +305,8 @@ struct globals {
#define remoteuser (G.remoteuser )
#define referer (G.referer )
#define user_agent (G.user_agent )
+#define http_accept (G.http_accept )
+#define http_accept_language (G.http_accept_language)
#define file_size (G.file_size )
#if ENABLE_FEATURE_HTTPD_RANGES
#define range_start (G.range_start )
@@ -1391,6 +1395,10 @@ static void send_cgi_and_exit(
}
}
setenv1("HTTP_USER_AGENT", user_agent);
+ if (http_accept)
+ setenv1("HTTP_ACCEPT", http_accept);
+ if (http_accept_language)
+ setenv1("HTTP_ACCEPT_LANGUAGE", http_accept_language);
if (post_len)
putenv(xasprintf("CONTENT_LENGTH=%d", post_len));
if (cookie)
@@ -2028,6 +2036,10 @@ static void handle_incoming_and_exit(con
referer = xstrdup(skip_whitespace(iobuf + sizeof("Referer:")-1));
} else if (STRNCASECMP(iobuf, "User-Agent:") == 0) {
user_agent = xstrdup(skip_whitespace(iobuf + sizeof("User-Agent:")-1));
+ } else if (STRNCASECMP(iobuf, "Accept:") == 0) {
+ http_accept = xstrdup(skip_whitespace(iobuf + sizeof("Accept:")-1));
+ } else if (STRNCASECMP(iobuf, "Accept-Language:") == 0) {
+ http_accept_language = xstrdup(skip_whitespace(iobuf + sizeof("Accept-Language:")-1));
}
#endif
#if ENABLE_FEATURE_HTTPD_BASIC_AUTH

@ -1,35 +1,17 @@
--- a/modutils/insmod.c
+++ b/modutils/insmod.c
@@ -61,21 +61,117 @@
@@ -9,6 +9,99 @@
#include "libbb.h"
#include <libgen.h>
#include <sys/utsname.h>
+#if ENABLE_FEATURE_2_6_MODULES
#include "modutils.h"
+#ifndef CONFIG_FEATURE_2_4_MODULES
+#include <sys/mman.h>
+#include <asm/unistd.h>
+#include <sys/syscall.h>
+#include <sys/utsname.h>
+#endif
#if !ENABLE_FEATURE_2_4_MODULES && !ENABLE_FEATURE_2_6_MODULES
#undef ENABLE_FEATURE_2_4_MODULES
#define ENABLE_FEATURE_2_4_MODULES 1
#endif
-/*
- * Big piece of 2.4-specific code
- */
#if ENABLE_FEATURE_2_4_MODULES
-
+int insmod_main_24(int argc, char **argv);
+#endif
#if ENABLE_FEATURE_2_6_MODULES
-static int insmod_ng_main(int argc, char **argv);
+int insmod_main_26(int argc, char **argv);
#endif
+int insmod_main(int argc, char **argv) MAIN_EXTERNALLY_VISIBLE;
+
+static char *g_filename = NULL;
+#define _PATH_MODULES "/lib/modules"
+
+static int FAST_FUNC check_module_name_match(const char *filename, struct stat *statbuf,
+ void *userdata, int depth)
@ -92,7 +74,7 @@
+ * follow symlinks, but we do want to follow the
+ * /lib/modules/`uname -r` dir, So resolve it ourselves
+ * if it is a link... */
+ module_dir = concat_path_file(_PATH_MODULES, myuname.release);
+ module_dir = concat_path_file(CONFIG_DEFAULT_MODULES_DIR, myuname.release);
+ if (realpath(module_dir, real_module_dir) != NULL) {
+ free(module_dir);
+ module_dir = real_module_dir;
@ -112,623 +94,26 @@
+
+done:
+ free(filename);
+ return ret;
+}
+
+/*
+ * Big piece of 2.4-specific code
+ */
+#if ENABLE_FEATURE_2_4_MODULES
#if ENABLE_FEATURE_INSMOD_LOADINKMEM
#define LOADBITS 0
#else
@@ -184,7 +280,6 @@ static int insmod_ng_main(int argc, char
/* Microblaze */
#if defined(__microblaze__)
#define USE_SINGLE
-#include <linux/elf-em.h>
#define MATCH_MACHINE(x) (x == EM_XILINX_MICROBLAZE)
#define SHT_RELM SHT_RELA
#define Elf32_RelM Elf32_Rela
@@ -452,7 +547,7 @@ enum {
/* The system calls unchanged between 2.0 and 2.1. */
unsigned long create_module(const char *, size_t);
-int delete_module(const char *module, unsigned int flags);
+int delete_module(const char *);
#endif /* module.h */
@@ -652,7 +747,7 @@ static struct obj_symbol *arch_new_symbo
static enum obj_reloc arch_apply_relocation(struct obj_file *f,
struct obj_section *targsec,
- /*struct obj_section *symsec,*/
+ struct obj_section *symsec,
struct obj_symbol *sym,
ElfW(RelM) *rel, ElfW(Addr) value);
@@ -673,6 +768,7 @@ static int obj_gpl_license(struct obj_fi
#define SPFX ""
#endif
+
enum { STRVERSIONLEN = 64 };
/*======================================================================*/
@@ -788,28 +884,6 @@ static char *m_filename;
static char *m_fullName;
-/*======================================================================*/
-
-
-static int FAST_FUNC check_module_name_match(const char *filename,
- struct stat *statbuf UNUSED_PARAM,
- void *userdata, int depth UNUSED_PARAM)
-{
- char *fullname = (char *) userdata;
- char *tmp;
-
- if (fullname[0] == '\0')
- return FALSE;
-
- tmp = bb_get_last_path_component_nostrip(filename);
- if (strcmp(tmp, fullname) == 0) {
- /* Stop searching if we find a match */
- m_filename = xstrdup(filename);
- return FALSE;
- }
- return TRUE;
-}
-
/*======================================================================*/
@@ -835,32 +909,20 @@ static struct obj_symbol *arch_new_symbo
static enum obj_reloc
arch_apply_relocation(struct obj_file *f,
struct obj_section *targsec,
- /*struct obj_section *symsec,*/
+ struct obj_section *symsec,
struct obj_symbol *sym,
ElfW(RelM) *rel, ElfW(Addr) v)
{
-#if defined(__arm__) || defined(__i386__) || defined(__mc68000__) \
- || defined(__sh__) || defined(__s390__) || defined(__x86_64__) \
- || defined(__powerpc__) || defined(__mips__)
struct arch_file *ifile = (struct arch_file *) f;
-#endif
enum obj_reloc ret = obj_reloc_ok;
ElfW(Addr) *loc = (ElfW(Addr) *) (targsec->contents + rel->r_offset);
-#if defined(__arm__) || defined(__H8300H__) || defined(__H8300S__) \
- || defined(__i386__) || defined(__mc68000__) || defined(__microblaze__) \
- || defined(__mips__) || defined(__nios2__) || defined(__powerpc__) \
- || defined(__s390__) || defined(__sh__) || defined(__x86_64__)
ElfW(Addr) dot = targsec->header.sh_addr + rel->r_offset;
-#endif
#if defined(USE_GOT_ENTRIES) || defined(USE_PLT_ENTRIES)
struct arch_symbol *isym = (struct arch_symbol *) sym;
#endif
-#if defined(__arm__) || defined(__i386__) || defined(__mc68000__) \
- || defined(__sh__) || defined(__s390__)
#if defined(USE_GOT_ENTRIES)
ElfW(Addr) got = ifile->got ? ifile->got->header.sh_addr : 0;
#endif
-#endif
#if defined(USE_PLT_ENTRIES)
ElfW(Addr) plt = ifile->plt ? ifile->plt->header.sh_addr : 0;
unsigned long *ip;
@@ -954,7 +1016,6 @@ arch_apply_relocation(struct obj_file *f
case R_386_PLT32:
case R_386_PC32:
- case R_386_GOTOFF:
*loc += v - dot;
break;
@@ -973,6 +1034,9 @@ arch_apply_relocation(struct obj_file *f
case R_386_GOT32:
goto bb_use_got;
+
+ case R_386_GOTOFF:
+ *loc += v - got;
break;
#elif defined(__microblaze__)
@@ -1764,7 +1828,7 @@ static int arch_list_add(ElfW(RelM) *rel
#if defined(USE_SINGLE)
-static int arch_single_init(/*ElfW(RelM) *rel,*/ struct arch_single_entry *single,
+static int arch_single_init(ElfW(RelM) *rel, struct arch_single_entry *single,
int offset, int size)
{
if (single->allocated == 0) {
@@ -1912,7 +1976,7 @@ static void arch_create_got(struct obj_f
#if defined(USE_GOT_ENTRIES)
if (got_allocate) {
got_offset += arch_single_init(
- /*rel,*/ &intsym->gotent,
+ rel, &intsym->gotent,
got_offset, GOT_ENTRY_SIZE);
got_needed = 1;
@@ -1926,7 +1990,7 @@ static void arch_create_got(struct obj_f
plt_offset, PLT_ENTRY_SIZE);
#else
plt_offset += arch_single_init(
- /*rel,*/ &intsym->pltent,
+ rel, &intsym->pltent,
plt_offset, PLT_ENTRY_SIZE);
#endif
plt_needed = 1;
@@ -1964,8 +2028,7 @@ static unsigned long obj_elf_hash_n(cons
while (n > 0) {
ch = *name++;
h = (h << 4) + ch;
- g = (h & 0xf0000000);
- if (g != 0) {
+ if ((g = (h & 0xf0000000)) != 0) {
h ^= g >> 24;
h &= ~g;
}
@@ -2044,7 +2107,7 @@ obj_add_symbol(struct obj_file *f, const
int n_type = ELF_ST_TYPE(info);
int n_binding = ELF_ST_BIND(info);
- for (sym = f->symtab[hash]; sym; sym = sym->next) {
+ for (sym = f->symtab[hash]; sym; sym = sym->next)
if (f->symbol_cmp(sym->name, name) == 0) {
int o_secidx = sym->secidx;
int o_info = sym->info;
@@ -2103,14 +2166,14 @@ obj_add_symbol(struct obj_file *f, const
return sym;
}
}
- }
/* Completely new symbol. */
sym = arch_new_symbol();
sym->next = f->symtab[hash];
f->symtab[hash] = sym;
sym->ksymidx = -1;
- if (ELF_ST_BIND(info) == STB_LOCAL && symidx != (unsigned long)(-1)) {
+
+ if (ELF_ST_BIND(info) == STB_LOCAL && symidx != -1) {
if (symidx >= f->local_symtab_size)
bb_error_msg("local symbol %s with index %ld exceeds local_symtab_size %ld",
name, (long) symidx, (long) f->local_symtab_size);
@@ -3234,7 +3297,7 @@ static int obj_relocate(struct obj_file
/* Do it! */
switch (arch_apply_relocation
- (f, targsec, /*symsec,*/ intsym, rel, value)
+ (f, targsec, symsec, intsym, rel, value)
) {
case obj_reloc_ok:
break;
@@ -3313,11 +3376,11 @@ static int obj_create_image(struct obj_f
/*======================================================================*/
-static struct obj_file *obj_load(FILE *fp, int loadprogbits UNUSED_PARAM)
+static struct obj_file *obj_load(FILE *fp, int loadprogbits)
{
struct obj_file *f;
ElfW(Shdr) * section_headers;
- size_t shnum, i;
+ int shnum, i;
char *shstrtab;
/* Read the file header. */
@@ -3591,7 +3654,7 @@ static int obj_gpl_license(struct obj_fi
while (ptr < endptr) {
value = strchr(ptr, '=');
if (value && strncmp(ptr, "license", value-ptr) == 0) {
- unsigned i;
+ int i;
if (license)
*license = value+1;
for (i = 0; i < ARRAY_SIZE(gpl_licenses); ++i) {
@@ -3695,9 +3758,6 @@ static void check_tainted_module(struct
* start of some sections. this info is used by ksymoops to do better
* debugging.
*/
-#if !ENABLE_FEATURE_INSMOD_VERSION_CHECKING
-#define get_module_version(f, str) get_module_version(str)
-#endif
static int
get_module_version(struct obj_file *f, char str[STRVERSIONLEN])
{
@@ -3730,8 +3790,7 @@ add_ksymoops_symbols(struct obj_file *f,
struct obj_symbol *sym;
char *name, *absolute_filename;
char str[STRVERSIONLEN];
- unsigned i;
- int l, lm_name, lfilename, use_ksymtab, version;
+ int i, l, lm_name, lfilename, use_ksymtab, version;
struct stat statbuf;
/* WARNING: was using realpath, but replaced by readlink to stop using
@@ -3922,145 +3981,57 @@ static void print_load_map(struct obj_fi
void print_load_map(struct obj_file *f);
#endif
-int insmod_main(int argc, char **argv) MAIN_EXTERNALLY_VISIBLE;
-int insmod_main(int argc, char **argv)
+int insmod_main_24( int argc, char **argv)
{
char *opt_o, *arg1;
- int len;
int k_crcs;
- char *tmp, *tmp1;
unsigned long m_size;
ElfW(Addr) m_addr;
struct obj_file *f;
- struct stat st;
- char *m_name = NULL;
- int exit_status = EXIT_FAILURE;
+ char *tmp = NULL, *m_name = NULL;
+ int ret = EINVAL;
int m_has_modinfo;
#if ENABLE_FEATURE_INSMOD_VERSION_CHECKING
struct utsname uts_info;
char m_strversion[STRVERSIONLEN];
int m_version, m_crcs;
#endif
-#if ENABLE_FEATURE_CLEAN_UP
FILE *fp = NULL;
-#else
- FILE *fp;
-#endif
- int k_version = 0;
+ int k_version;
struct utsname myuname;
+ /* check the kernel version */
+ if ((uname(&myuname) != 0) || (myuname.release[0] != '2'))
+ return EINVAL;
+
+ k_version = myuname.release[2] - '0';
+ if (k_version > 4)
+ return ENOTSUP;
+
/* Parse any options */
getopt32(argv, OPTION_STR, &opt_o);
arg1 = argv[optind];
if (option_mask32 & OPT_o) { // -o /* name the output module */
- free(m_name);
m_name = xstrdup(opt_o);
}
- if (arg1 == NULL) {
+ if (arg1 == NULL)
bb_show_usage();
- }
-
- /* Grab the module name */
- tmp1 = xstrdup(arg1);
- tmp = basename(tmp1);
- len = strlen(tmp);
-
- if (uname(&myuname) == 0) {
- if (myuname.release[0] == '2') {
- k_version = myuname.release[2] - '0';
- }
- }
-#if ENABLE_FEATURE_2_6_MODULES
- if (k_version > 4 && len > 3 && tmp[len - 3] == '.'
- && tmp[len - 2] == 'k' && tmp[len - 1] == 'o'
- ) {
- len -= 3;
- tmp[len] = '\0';
- } else
-#endif
- if (len > 2 && tmp[len - 2] == '.' && tmp[len - 1] == 'o') {
- len -= 2;
- tmp[len] = '\0';
- }
-
-
-#if ENABLE_FEATURE_2_6_MODULES
- if (k_version > 4)
- m_fullName = xasprintf("%s.ko", tmp);
- else
-#endif
- m_fullName = xasprintf("%s.o", tmp);
+ ret = find_module(arg1);
+ if (ret)
+ goto out;
if (!m_name) {
- m_name = tmp;
- } else {
- free(tmp1);
- tmp1 = NULL; /* flag for free(m_name) before exit() */
- }
-
- /* Get a filedesc for the module. Check that we have a complete path */
- if (stat(arg1, &st) < 0 || !S_ISREG(st.st_mode)
- || (fp = fopen_for_read(arg1)) == NULL
- ) {
- /* Hmm. Could not open it. First search under /lib/modules/`uname -r`,
- * but do not error out yet if we fail to find it... */
- if (k_version) { /* uname succeedd */
- char *module_dir;
- char *tmdn;
-
- tmdn = concat_path_file(CONFIG_DEFAULT_MODULES_DIR, myuname.release);
- /* Jump through hoops in case /lib/modules/`uname -r`
- * is a symlink. We do not want recursive_action to
- * follow symlinks, but we do want to follow the
- * /lib/modules/`uname -r` dir, So resolve it ourselves
- * if it is a link... */
- module_dir = xmalloc_readlink(tmdn);
- if (!module_dir)
- module_dir = xstrdup(tmdn);
- recursive_action(module_dir, ACTION_RECURSE,
- check_module_name_match, NULL, m_fullName, 0);
- free(module_dir);
- free(tmdn);
- }
-
- /* Check if we have found anything yet */
- if (!m_filename || ((fp = fopen_for_read(m_filename)) == NULL)) {
- int r;
- char *module_dir;
-
- free(m_filename);
- m_filename = NULL;
- module_dir = xmalloc_readlink(CONFIG_DEFAULT_MODULES_DIR);
- if (!module_dir)
- module_dir = xstrdup(CONFIG_DEFAULT_MODULES_DIR);
- /* No module found under /lib/modules/`uname -r`, this
- * time cast the net a bit wider. Search /lib/modules/ */
- r = recursive_action(module_dir, ACTION_RECURSE,
- check_module_name_match, NULL, m_fullName, 0);
- if (r)
- bb_error_msg_and_die("%s: module not found", m_fullName);
- free(module_dir);
- if (m_filename == NULL
- || ((fp = fopen_for_read(m_filename)) == NULL)
- ) {
- bb_error_msg_and_die("%s: module not found", m_fullName);
- }
+ tmp = xstrdup(arg1);
+ m_name = basename(tmp);
}
- } else
- m_filename = xstrdup(arg1);
-
- if (flag_verbose)
- printf("Using %s\n", m_filename);
-#if ENABLE_FEATURE_2_6_MODULES
- if (k_version > 4) {
- argv[optind] = m_filename;
- optind--;
- return insmod_ng_main(argc - optind, argv + optind);
+ fp = fopen_for_read(g_filename);
+ if (!fp) {
+ ret = errno;
+ goto out;
}
-#endif
f = obj_load(fp, LOADBITS);
@@ -4087,7 +4058,7 @@ int insmod_main(int argc, char **argv)
"\t%s was compiled for kernel version %s\n"
"\twhile this kernel is version %s",
flag_force_load ? "warning: " : "",
- m_filename, m_strversion, uts_info.release);
+ g_filename, m_strversion, uts_info.release);
if (!flag_force_load)
goto out;
}
@@ -4129,7 +4100,7 @@ int insmod_main(int argc, char **argv)
hide_special_symbols(f);
#if ENABLE_FEATURE_INSMOD_KSYMOOPS_SYMBOLS
- add_ksymoops_symbols(f, m_filename, m_name);
+ add_ksymoops_symbols(f, g_filename, m_name);
#endif /* FEATURE_INSMOD_KSYMOOPS_SYMBOLS */
new_create_module_ksymtab(f);
@@ -4138,7 +4109,7 @@ int insmod_main(int argc, char **argv)
m_size = obj_load_size(f);
m_addr = create_module(m_name, m_size);
- if (m_addr == (ElfW(Addr))(-1)) switch (errno) {
+ if (m_addr == -1) switch (errno) {
case EEXIST:
bb_error_msg_and_die("a module named %s already exists", m_name);
case ENOMEM:
@@ -4154,36 +4125,37 @@ int insmod_main(int argc, char **argv)
* now we can load them directly into the kernel memory
*/
if (!obj_load_progbits(fp, f, (char*)m_addr)) {
- delete_module(m_name, 0);
+ delete_module(m_name);
goto out;
}
#endif
if (!obj_relocate(f, m_addr)) {
- delete_module(m_name, 0);
+ delete_module(m_name);
goto out;
}
if (!new_init_module(m_name, f, m_size)) {
- delete_module(m_name, 0);
+ delete_module(m_name);
goto out;
}
if (flag_print_load_map)
print_load_map(f);
- exit_status = EXIT_SUCCESS;
+ ret = EXIT_SUCCESS;
out:
#if ENABLE_FEATURE_CLEAN_UP
if (fp)
fclose(fp);
- free(tmp1);
- if (!tmp1)
+ if (tmp)
+ free(tmp);
+ else if (m_name)
free(m_name);
- free(m_filename);
+ free(g_filename);
#endif
- return exit_status;
+ return ret;
}
#endif /* ENABLE_FEATURE_2_4_MODULES */
@@ -4195,15 +4167,8 @@ int insmod_main(int argc, char **argv)
#if ENABLE_FEATURE_2_6_MODULES
#include <sys/mman.h>
-
-#if defined __UCLIBC__ && !ENABLE_FEATURE_2_4_MODULES
-/* big time suckage. The old prototype above renders our nice fwd-decl wrong */
-extern int init_module(void *module, unsigned long len, const char *options);
-#else
#include <asm/unistd.h>
#include <sys/syscall.h>
-#define init_module(mod, len, opts) syscall(__NR_init_module, mod, len, opts)
-#endif
/* We use error numbers in a loose translation... */
static const char *moderror(int err)
@@ -4222,22 +4187,32 @@ static const char *moderror(int err)
}
}
-#if !ENABLE_FEATURE_2_4_MODULES
-int insmod_main(int argc, char **argv) MAIN_EXTERNALLY_VISIBLE;
-int insmod_main(int argc UNUSED_PARAM, char **argv)
-#else
-static int insmod_ng_main(int argc UNUSED_PARAM, char **argv)
-#endif
+int insmod_main_26(int argc, char **argv)
{
- size_t len;
+ char *filename, *options;
+ struct utsname myuname;
+ int k_version;
int optlen;
+ size_t len;
void *map;
- char *filename, *options;
+ long ret = 0;
+
+ /* check the kernel version */
+ if ((uname(&myuname) != 0) || (myuname.release[0] != '2'))
+ return EINVAL;
+
+ k_version = myuname.release[2] - '0';
+ if (k_version <= 4)
+ return ENOTSUP;
+}
filename = *++argv;
int insmod_main(int argc, char **argv) MAIN_EXTERNALLY_VISIBLE;
int insmod_main(int argc UNUSED_PARAM, char **argv)
@@ -25,9 +118,14 @@ int insmod_main(int argc UNUSED_PARAM, c
if (!filename)
bb_show_usage();
+ ret = find_module(filename);
+ if (ret || (g_filename == NULL))
+ goto done;
- rc = bb_init_module(filename, parse_cmdline_module_options(argv));
+ rc = find_module(filename);
+ if (rc || (g_filename == NULL))
+ goto done;
+
/* Rest is options */
options = xzalloc(1);
optlen = 0;
@@ -4247,41 +4222,47 @@ static int insmod_ng_main(int argc UNUSE
optlen += sprintf(options + optlen, (strchr(*argv,' ') ? "\"%s\" " : "%s "), *argv);
}
-#if 0
- /* Any special reason why mmap? It isn't performance critical. -vda */
- /* Yes, xmalloc'ing can use *alot* of RAM. Don't forget that there are
- * modules out there that are half a megabyte! mmap()ing is way nicer
- * for small mem boxes, i guess. */
- /* But after load, these modules will take up that 0.5mb in kernel
- * anyway. Using malloc here causes only a transient spike to 1mb,
- * after module is loaded, we go back to normal 0.5mb usage
- * (in kernel). Also, mmap isn't magic - when we touch mapped data,
- * we use memory. -vda */
- int fd;
- struct stat st;
- unsigned long len;
- fd = xopen(filename, O_RDONLY);
- fstat(fd, &st);
- len = st.st_size;
- map = mmap(NULL, len, PROT_READ, MAP_PRIVATE, fd, 0);
- if (map == MAP_FAILED) {
- bb_perror_msg_and_die("cannot mmap '%s'", filename);
- }
+ rc = bb_init_module(g_filename, parse_cmdline_module_options(argv));
if (rc)
bb_error_msg("cannot insert '%s': %s", filename, moderror(rc));
-
- /* map == NULL on Blackfin, probably on other MMU-less systems too. Workaround. */
- if (map == NULL) {
- map = xmalloc(len);
- xread(fd, map, len);
- }
-#else
len = MAXINT(ssize_t);
- map = xmalloc_xopen_read_close(filename, &len);
-#endif
+ map = xmalloc_open_read_close(g_filename, &len);
+ ret = syscall(__NR_init_module, map, len, options);
+ if (ret != 0) {
+ bb_perror_msg_and_die("cannot insert '%s': %s (%li)",
+ g_filename, moderror(errno), ret);
+ }
+ free (g_filename);
+done:
+ if (g_filename && (g_filename != filename))
+ free(g_filename);
- if (init_module(map, len, options) != 0)
- bb_error_msg_and_die("cannot insert '%s': %s",
- filename, moderror(errno));
- return 0;
+ return ret;
return rc;
}
#endif
+
+int insmod_main(int argc, char **argv)
+{
+ int ret;
+
+ g_filename = NULL;
+#if ENABLE_FEATURE_2_6_MODULES
+ ret = insmod_main_26(argc, argv);
+ if (ret != ENOTSUP)
+ goto done;
+#endif
+
+#if ENABLE_FEATURE_2_4_MODULES
+ ret = insmod_main_24(argc, argv);
+ if (ret != ENOTSUP)
+ goto done;
+#endif
+
+ fprintf(stderr, "Error: Kernel version not supported\n");
+ return 1;
+
+done:
+ if (ret) {
+ errno = ret;
+ bb_perror_msg("Loading module failed");
+ return ret;
+ } else
+ return 0;
+}

@ -1,22 +0,0 @@
--- a/editors/vi.c
+++ b/editors/vi.c
@@ -3317,7 +3317,7 @@ static void do_cmd(char c)
buf[1] = '\0';
q = get_input_line(buf); // get input line- use "status line"
if (q[0] && !q[1]) {
- if (last_search_pattern[0])
+ if (last_search_pattern)
last_search_pattern[0] = c;
goto dc3; // if no pat re-use old pat
}
@@ -3333,6 +3333,10 @@ static void do_cmd(char c)
if (cmdcnt-- > 1) {
do_cmd(c);
} // repeat cnt
+ if (last_search_pattern == 0) {
+ msg = "No previous regular expression";
+ goto dc2;
+ }
dir = BACK; // assume BACKWARD search
p = dot - 1;
if (last_search_pattern[0] == '?') {

@ -15,7 +15,7 @@
} func;
/* I/O stream */
@@ -1400,7 +1405,8 @@ static void parse_program(char *p)
@@ -1423,7 +1428,8 @@ static void parse_program(char *p)
next_token(TC_FUNCTION);
g_pos++;
f = newfunc(t_string);
@ -25,7 +25,7 @@
f->nargs = 0;
while (next_token(TC_VARIABLE | TC_SEQTERM) & TC_VARIABLE) {
v = findvar(ahash, t_string);
@@ -1409,7 +1415,7 @@ static void parse_program(char *p)
@@ -1432,7 +1438,7 @@ static void parse_program(char *p)
if (next_token(TC_COMMA | TC_SEQTERM) & TC_SEQTERM)
break;
}
@ -34,7 +34,7 @@
chain_group();
clear_array(ahash);
@@ -2374,7 +2380,8 @@ static var *evaluate(node *op, var *res)
@@ -2397,7 +2403,8 @@ static var *evaluate(node *op, var *res)
break;
case XC( OC_FUNC ):
@ -44,7 +44,7 @@
syntax_error(EMSG_UNDEF_FUNC);
X.v = R.v = nvalloc(op->r.f->nargs+1);
@@ -2391,7 +2398,10 @@ static var *evaluate(node *op, var *res)
@@ -2414,7 +2421,10 @@ static var *evaluate(node *op, var *res)
fnargs = X.v;
L.s = g_progname;
@ -56,7 +56,7 @@
g_progname = L.s;
nvfree(fnargs);
@@ -2754,6 +2764,143 @@ static rstream *next_input_file(void)
@@ -2777,6 +2787,143 @@ static rstream *next_input_file(void)
#undef files_happen
}
@ -200,7 +200,7 @@
int awk_main(int argc, char **argv) MAIN_EXTERNALLY_VISIBLE;
int awk_main(int argc, char **argv)
{
@@ -2819,6 +2966,9 @@ int awk_main(int argc, char **argv)
@@ -2842,6 +2989,9 @@ int awk_main(int argc, char **argv)
*s1 = '=';
}
}

@ -0,0 +1,49 @@
This patch disable supplementary groups handling in id with uClibc versions
prior to v0.9.30, which are lacking the 'getgrouplist' function.
Signed-off-by: Nicolas Thill <nico@openwrt.org>
--- a/coreutils/id.c
+++ b/coreutils/id.c
@@ -17,10 +17,12 @@
#include "libbb.h"
+#define HAVE_GETGROUPLIST 1
+
#if !ENABLE_USE_BB_PWD_GRP
#if defined(__UCLIBC_MAJOR__) && (__UCLIBC_MAJOR__ == 0)
#if (__UCLIBC_MINOR__ < 9) || (__UCLIBC_MINOR__ == 9 && __UCLIBC_SUBLEVEL__ < 30)
-#error "Sorry, you need at least uClibc version 0.9.30 for id applet to build"
+#undef HAVE_GETGROUPLIST
#endif
#endif
#endif
@@ -86,7 +88,11 @@ static int get_groups(const char *userna
/* If the user is a member of more than
* *n groups, then -1 is returned. Otherwise >= 0.
* (and no defined way of detecting errors?!) */
+#if HAVE_GETGROUPLIST
m = getgrouplist(username, rgid, groups, n);
+#else
+ *n = -1;
+#endif
/* I guess *n < 0 might indicate error. Anyway,
* malloc'ing -1 bytes won't be good, so: */
//if (*n < 0)
@@ -160,6 +166,7 @@ int id_main(int argc UNUSED_PARAM, char
if (egid != rgid)
status |= print_group(egid, " ");
}
+#if HAVE_GETGROUPLIST
/* We are supplying largish buffer, trying
* to not run get_groups() twice. That might be slow
* ("user database in remote SQL server" case) */
@@ -187,6 +194,7 @@ int id_main(int argc UNUSED_PARAM, char
}
if (ENABLE_FEATURE_CLEAN_UP)
free(groups);
+#endif
#if ENABLE_SELINUX
if (is_selinux_enabled()) {
if (getcon(&scontext) == 0)

@ -1,11 +0,0 @@
--- a/modutils/lsmod.c
+++ b/modutils/lsmod.c
@@ -107,7 +107,7 @@
continue;
} else if (errno != ENOSPC)
bb_perror_msg_and_die("module %s: QM_REFS", mn);
- deps = xrealloc(deps, count);
+ deps = xrealloc(deps, depsize = count);
}
printf("%-20s%8lu%4ld", mn, info.size, info.usecount);
if (info.flags & NEW_MOD_DELETED)
Loading…
Cancel
Save