Upgrade busybox to 1.7.2 - clean up insmod crap - add some lineno/programname fixes for awx - clean up awk getopt stuff - remove unnecessary patches

SVN-Revision: 9130
This commit is contained in:
Felix Fietkau 2007-10-05 00:27:49 +00:00
parent 9e8f2ca1f0
commit fe313941ac
48 changed files with 1965 additions and 1303 deletions

View file

@ -9,13 +9,13 @@
include $(TOPDIR)/rules.mk
PKG_NAME:=busybox
PKG_VERSION:=1.4.2
PKG_VERSION:=1.7.2
PKG_RELEASE:=3
PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.bz2
PKG_SOURCE_URL:=http://www.busybox.net/downloads \
http://distfiles.gentoo.org/distfiles/
PKG_MD5SUM:=b4c61fb15642be9dde20e8493788c585
PKG_MD5SUM:=c91ec9756e2000073a9dd8fa9fc3f89e
include $(INCLUDE_DIR)/package.mk

View file

@ -100,8 +100,7 @@ config BUSYBOX_CONFIG_FEATURE_INSTALLER
help
Enable 'busybox --install [-s]' support. This will allow you to use
busybox at runtime to create hard links or symlinks for all the
applets that are compiled into busybox. This feature requires the
/proc filesystem.
applets that are compiled into busybox.
config BUSYBOX_CONFIG_LOCALE_SUPPORT
bool "Enable locale support (system needs locale for this to work)"
@ -140,6 +139,13 @@ config BUSYBOX_CONFIG_FEATURE_CLEAN_UP
Don't enable this unless you have a really good reason to clean
things up manually.
config BUSYBOX_CONFIG_FEATURE_PIDFILE
bool "Support writing pidfiles"
default y
help
This option makes some applets (e.g. crond, syslogd, inetd) write
a pidfile in /var/run. Some applications rely on them.
config BUSYBOX_CONFIG_FEATURE_SUID
bool "Support for SUID/SGID handling"
default y
@ -155,13 +161,6 @@ config BUSYBOX_CONFIG_FEATURE_SUID
are login, passwd, su, ping, traceroute, crontab, dnsd, ipcrm, ipcs,
and vlock.
config BUSYBOX_CONFIG_FEATURE_SYSLOG
bool "Support for syslog"
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.
config BUSYBOX_CONFIG_FEATURE_SUID_CONFIG
bool "Runtime SUID/SGID configuration via /etc/busybox.conf"
default n if BUSYBOX_CONFIG_FEATURE_SUID
@ -202,14 +201,6 @@ config BUSYBOX_CONFIG_FEATURE_SUID_CONFIG_QUIET
/etc/busybox.conf should be readable by the user needing the SUID, check
this option to avoid users to be notified about missing permissions.
config BUSYBOX_CONFIG_FEATURE_HAVE_RPC
bool "RPC support"
default y
help
Select this if you have rpc support.
This automatically turns off all configuration options that rely
on RPC.
config BUSYBOX_CONFIG_SELINUX
bool "Support NSA Security Enhanced Linux"
default n
@ -230,6 +221,20 @@ config BUSYBOX_CONFIG_SELINUX
Most people will leave this set to 'N'.
config BUSYBOX_CONFIG_FEATURE_PREFER_APPLETS
bool "exec prefers applets"
default y
help
This is an experimental option which directs applets about to
call 'exec' to try and find an applicable busybox applet before
searching the PATH. This is typically done by exec'ing
/proc/self/exe.
This may affect shell, find -exec, xargs and similar applets.
They will use applets even if /bin/<applet> -> busybox link
is missing (or is not a link to busybox). However, this causes
problems in chroot jails without mounted /proc and with ps/top
(command name can be shown as 'exe' for applets started this way).
config BUSYBOX_CONFIG_BUSYBOX_EXEC_PATH
string "Path to BusyBox executable"
default "/proc/self/exe"
@ -240,6 +245,22 @@ config BUSYBOX_CONFIG_BUSYBOX_EXEC_PATH
executable. If you haven't got /proc, set this to wherever you
want to run BusyBox from.
# These are auto-selected by other options
config BUSYBOX_CONFIG_FEATURE_SYSLOG
bool "Support for logging to syslog"
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.
config BUSYBOX_CONFIG_FEATURE_HAVE_RPC
bool "RPC support"
default y
help
This is automatically selected if any of enabled applets need it.
You do not need to select it manually.
endmenu
menu 'Build Options'
@ -298,7 +319,7 @@ config BUSYBOX_CONFIG_FEATURE_SHARED_BUSYBOX
You need to have a working dynamic linker to use this variant.
config BUSYBOX_CONFIG_LFS
bool "Support large files over 2 GB"
bool
default y
select BUSYBOX_CONFIG_FDISK_SUPPORT_LARGE_DISKS
help
@ -343,21 +364,29 @@ config BUSYBOX_CONFIG_DEBUG
Most people should answer N.
config BUSYBOX_CONFIG_DEBUG_PESSIMIZE
bool "Disable compiler optimizations."
config BUSYBOX_CONFIG_WERROR
bool "Abort compilation on any warning"
default n
depends on BUSYBOX_CONFIG_DEBUG
help
The compiler's optimization of source code can eliminate and reorder
code, resulting in an executable that's hard to understand when
stepping through it with a debugger. This switches it off, resulting
in a much bigger executable that more closely matches the source
code.
Selecting this will add -Werror to gcc command line.
Most people should answer N.
# Seems to be unused
#config DEBUG_PESSIMIZE
# bool "Disable compiler optimizations."
# default n
# depends on DEBUG
# help
# The compiler's optimization of source code can eliminate and reorder
# code, resulting in an executable that's hard to understand when
# stepping through it with a debugger. This switches it off, resulting
# in a much bigger executable that more closely matches the source
# code.
choice
prompt "Additional debugging library"
default BUSYBOX_CONFIG_NO_DEBUG_LIB
depends on BUSYBOX_CONFIG_DEBUG
help
Using an additional debugging library will make BusyBox become
considerable larger and will cause it to run more slowly. You
@ -417,31 +446,30 @@ config BUSYBOX_CONFIG_INSTALL_NO_USR
that you really want this behaviour.
choice
prompt "Applets links"
default BUSYBOX_CONFIG_INSTALL_APPLET_SYMLINKS
help
Choose how you install applets links.
prompt "Applets links"
default BUSYBOX_CONFIG_INSTALL_APPLET_SYMLINKS
help
Choose how you install applets links.
config BUSYBOX_CONFIG_INSTALL_APPLET_SYMLINKS
bool "as soft-links"
help
Install applets as soft-links to the busybox binary. This needs some
free inodes on the filesystem, but might help with filesystem
generators that can't cope with hard-links.
bool "as soft-links"
help
Install applets as soft-links to the busybox binary. This needs some
free inodes on the filesystem, but might help with filesystem
generators that can't cope with hard-links.
config BUSYBOX_CONFIG_INSTALL_APPLET_HARDLINKS
bool "as hard-links"
help
Install applets as hard-links to the busybox binary. This might count
on a filesystem with few inodes.
bool "as hard-links"
help
Install applets as hard-links to the busybox binary. This might count
on a filesystem with few inodes.
config BUSYBOX_CONFIG_INSTALL_APPLET_DONT
bool
prompt "not installed"
depends on BUSYBOX_CONFIG_FEATURE_INSTALLER || BUSYBOX_CONFIG_FEATURE_SH_STANDALONE_SHELL
help
Do not install applet links. Useful when using the -install feature
or a standalone shell for rescue pruposes.
bool "not installed"
depends on BUSYBOX_CONFIG_FEATURE_INSTALLER || BUSYBOX_CONFIG_FEATURE_SH_STANDALONE || BUSYBOX_CONFIG_FEATURE_PREFER_APPLETS
help
Do not install applet links. Useful when using the -install feature
or a standalone shell for rescue purposes.
endchoice
@ -476,3 +504,5 @@ 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/ipsvd/Config.in

View file

@ -142,6 +142,13 @@ config BUSYBOX_CONFIG_RPM
help
Mini RPM applet - queries and extracts RPM packages.
config BUSYBOX_CONFIG_FEATURE_RPM_BZ2
bool "Enable handling of rpms with bzip2-compressed data inside"
default n
depends on BUSYBOX_CONFIG_RPM
help
Enable handling of rpms with bzip2-compressed data inside.
config BUSYBOX_CONFIG_TAR
bool "tar"
default y
@ -207,6 +214,15 @@ config BUSYBOX_CONFIG_FEATURE_TAR_OLDGNU_COMPATIBILITY
the old GNU format; help to kill this old format by
repacking your ancient archives with the new format.
config BUSYBOX_CONFIG_FEATURE_TAR_OLDSUN_COMPATIBILITY
bool "Enable untarring of tarballs with checksums produced by buggy Sun tar"
default n
depends on BUSYBOX_CONFIG_TAR
help
This option is required to unpack archives created by some old
version of Sun's tar (it was calculating checksum using signed arithmetic).
It is said to be fixed in newer Sun tar, but "old" tarballs still exist.
config BUSYBOX_CONFIG_FEATURE_TAR_GNU_EXTENSIONS
bool "Enable support for some GNU tar extensions"
default y

View file

@ -85,7 +85,7 @@ config BUSYBOX_CONFIG_SETCONSOLE
config BUSYBOX_CONFIG_FEATURE_SETCONSOLE_LONG_OPTIONS
bool "Enable long options"
default n
depends on BUSYBOX_CONFIG_SET_CONSOLE && BUSYBOX_CONFIG_GETOPT_LONG
depends on BUSYBOX_CONFIG_SETCONSOLE && BUSYBOX_CONFIG_GETOPT_LONG
help
Support long options for the setconsole applet.

View file

@ -65,13 +65,6 @@ config BUSYBOX_CONFIG_CKSUM
help
cksum is used to calculate the CRC32 checksum of a file.
config BUSYBOX_CONFIG_CMP
bool "cmp"
default n
help
cmp is used to compare two files and returns the result
to standard output.
config BUSYBOX_CONFIG_COMM
bool "comm"
default n
@ -142,38 +135,6 @@ config BUSYBOX_CONFIG_DF
df reports the amount of disk space used and available
on filesystems.
config BUSYBOX_CONFIG_DIFF
bool "diff"
default n
help
diff compares two files or directories and outputs the
differences between them in a form that can be given to
the patch command.
config BUSYBOX_CONFIG_FEATURE_DIFF_BINARY
bool "Enable checks for binary files"
default n
depends on BUSYBOX_CONFIG_DIFF
help
This option enables support for checking for binary files
before a comparison is carried out.
config BUSYBOX_CONFIG_FEATURE_DIFF_DIR
bool "Enable directory support"
default n
depends on BUSYBOX_CONFIG_DIFF
help
This option enables support for directory and subdirectory
comparison.
config BUSYBOX_CONFIG_FEATURE_DIFF_MINIMAL
bool "Enable -d option to find smaller sets of changes"
default n
depends on BUSYBOX_CONFIG_DIFF
help
Enabling this option allows the use of -d to make diff
try hard to find the smallest possible set of changes.
config BUSYBOX_CONFIG_DIRNAME
bool "dirname"
default y
@ -239,6 +200,19 @@ config BUSYBOX_CONFIG_FEATURE_ENV_LONG_OPTIONS
help
Support long options for the env applet.
config BUSYBOX_CONFIG_EXPAND
bool "expand"
default n
help
By default, convert all tabs to spaces.
config BUSYBOX_CONFIG_FEATURE_EXPAND_LONG_OPTIONS
bool "Enable long options"
default n
depends on BUSYBOX_CONFIG_EXPAND && BUSYBOX_CONFIG_GETOPT_LONG
help
Support long options for the expand applet.
config BUSYBOX_CONFIG_EXPR
bool "expr"
default y
@ -474,6 +448,20 @@ config BUSYBOX_CONFIG_PWD
help
pwd is used to print the current directory.
config BUSYBOX_CONFIG_READLINK
bool "readlink"
default n
help
This program reads a symbolic link and returns the name
of the file it points to
config BUSYBOX_CONFIG_FEATURE_READLINK_FOLLOW
bool "Enable canonicalization by following all symlinks (-f)"
default n
depends on BUSYBOX_CONFIG_READLINK
help
Enable the readlink option (-f).
config BUSYBOX_CONFIG_REALPATH
bool "realpath"
default n
@ -536,6 +524,21 @@ config BUSYBOX_CONFIG_FEATURE_SORT_BIG
The SuSv3 sort standard is available at:
http://www.opengroup.org/onlinepubs/007904975/utilities/sort.html
config BUSYBOX_CONFIG_SPLIT
bool "split"
default n
help
split a file into pieces.
config BUSYBOX_CONFIG_FEATURE_SPLIT_FANCY
bool "fancy extensions"
default n
depends on BUSYBOX_CONFIG_SPLIT
help
Add support for features not required by SUSv3.
Supports additional suffixes 'b' for 512 bytes,
'g' for 1GiB for the -b option.
config BUSYBOX_CONFIG_STAT
bool "stat"
default n
@ -665,6 +668,19 @@ config BUSYBOX_CONFIG_UNAME
help
uname is used to print system information.
config BUSYBOX_CONFIG_UNEXPAND
bool "unexpand"
default n
help
By default, convert only leading sequences of blanks to tabs.
config BUSYBOX_CONFIG_FEATURE_UNEXPAND_LONG_OPTIONS
bool "Enable long options"
default n
depends on BUSYBOX_CONFIG_UNEXPAND && BUSYBOX_CONFIG_GETOPT_LONG
help
Support long options for the unexpand applet.
config BUSYBOX_CONFIG_UNIQ
bool "uniq"
default y
@ -689,14 +705,6 @@ config BUSYBOX_CONFIG_UUENCODE
help
uuencode is used to uuencode a file.
config BUSYBOX_CONFIG_WATCH
bool "watch"
default n
select BUSYBOX_CONFIG_DATE
help
watch is used to execute a program periodically, showing
output to the screen.
config BUSYBOX_CONFIG_WC
bool "wc"
default y

View file

@ -17,20 +17,6 @@ config BUSYBOX_CONFIG_PIPE_PROGRESS
help
Display a dot to indicate pipe activity.
config BUSYBOX_CONFIG_READLINK
bool "readlink"
default n
help
This program reads a symbolic link and returns the name
of the file it points to
config BUSYBOX_CONFIG_FEATURE_READLINK_FOLLOW
bool "Enable canonicalization by following all symlinks (-f)"
default n
depends on BUSYBOX_CONFIG_READLINK
help
Enable the readlink option (-f).
config BUSYBOX_CONFIG_RUN_PARTS
bool "run-parts"
default n
@ -53,6 +39,15 @@ config BUSYBOX_CONFIG_FEATURE_RUN_PARTS_LONG_OPTIONS
help
Support long options for the run-parts applet.
config BUSYBOX_CONFIG_FEATURE_RUN_PARTS_FANCY
bool "Support additional arguments"
default n
depends on BUSYBOX_CONFIG_RUN_PARTS
help
Support additional options:
-l --list print the names of the all matching files (not
limited to executables), but don't actually run them.
config BUSYBOX_CONFIG_START_STOP_DAEMON
bool "start-stop-daemon"
default y

View file

@ -27,6 +27,45 @@ config BUSYBOX_CONFIG_FEATURE_AWK_MATH
Enable math functions of the Awk programming language.
NOTE: This will require libm to be present for linking.
config BUSYBOX_CONFIG_CMP
bool "cmp"
default n
help
cmp is used to compare two files and returns the result
to standard output.
config BUSYBOX_CONFIG_DIFF
bool "diff"
default y
help
diff compares two files or directories and outputs the
differences between them in a form that can be given to
the patch command.
config BUSYBOX_CONFIG_FEATURE_DIFF_BINARY
bool "Enable checks for binary files"
default n
depends on BUSYBOX_CONFIG_DIFF
help
This option enables support for checking for binary files
before a comparison is carried out.
config BUSYBOX_CONFIG_FEATURE_DIFF_DIR
bool "Enable directory support"
default n
depends on BUSYBOX_CONFIG_DIFF
help
This option enables support for directory and subdirectory
comparison.
config BUSYBOX_CONFIG_FEATURE_DIFF_MINIMAL
bool "Enable -d option to find smaller sets of changes"
default n
depends on BUSYBOX_CONFIG_DIFF
help
Enabling this option allows the use of -d to make diff
try hard to find the smallest possible set of changes.
config BUSYBOX_CONFIG_ED
bool "ed"
default n
@ -57,6 +96,16 @@ config BUSYBOX_CONFIG_VI
learning curve. If you are not already comfortable with 'vi'
you may wish to use something else.
config BUSYBOX_CONFIG_FEATURE_VI_MAX_LEN
int "Maximum line length in vi"
range 256 16384
default 1024
depends on BUSYBOX_CONFIG_VI
help
vi uses on-stack buffers for intermediate line buffers.
You may want to decrease this parameter if your target machine
benefits from smaller stack usage.
config BUSYBOX_CONFIG_FEATURE_VI_COLON
bool "Enable \":\" colon commands (no \"ex\" mode)"
default y

View file

@ -30,7 +30,7 @@ config BUSYBOX_CONFIG_FEATURE_FIND_MTIME
files, in days.
config BUSYBOX_CONFIG_FEATURE_FIND_MMIN
bool "Enable modified time matching (-min) option"
bool "Enable modified time matching (-mmin) option"
default n
depends on BUSYBOX_CONFIG_FIND
help
@ -57,8 +57,14 @@ config BUSYBOX_CONFIG_FEATURE_FIND_XDEV
default y
depends on BUSYBOX_CONFIG_FIND
help
This option will allow find to restrict searches to a single
filesystem.
This option allows find to restrict searches to a single filesystem.
config BUSYBOX_CONFIG_FEATURE_FIND_MAXDEPTH
bool "Enable -maxdepth N option"
default y
depends on BUSYBOX_CONFIG_FIND
help
This option enables -maxdepth N option.
config BUSYBOX_CONFIG_FEATURE_FIND_NEWER
bool "Enable -newer option for comparing file mtimes"
@ -83,6 +89,88 @@ config BUSYBOX_CONFIG_FEATURE_FIND_EXEC
Support the 'find -exec' option for executing commands based upon
the files matched.
config BUSYBOX_CONFIG_FEATURE_FIND_USER
bool "Enable username/uid matching (-user) option"
default y
depends on BUSYBOX_CONFIG_FIND
help
Support the 'find -user' option for searching by username or uid.
config BUSYBOX_CONFIG_FEATURE_FIND_GROUP
bool "Enable group/gid matching (-group) option"
default y
depends on BUSYBOX_CONFIG_FIND
help
Support the 'find -group' option for searching by group name or gid.
config BUSYBOX_CONFIG_FEATURE_FIND_NOT
bool "Enable the 'not' (!) operator"
default y
depends on BUSYBOX_CONFIG_FIND
help
Support the '!' operator to invert the test results.
If 'Enable full-blown desktop' is enabled, then will also support
the non-POSIX notation '-not'.
config BUSYBOX_CONFIG_FEATURE_FIND_DEPTH
bool "Enable the -depth option"
default y
depends on BUSYBOX_CONFIG_FIND
help
Process each directory's contents before the directory itself.
config BUSYBOX_CONFIG_FEATURE_FIND_PAREN
bool "Enable parens in options"
default y
depends on BUSYBOX_CONFIG_FIND
help
Enable usage of parens '(' to specify logical order of arguments.
config BUSYBOX_CONFIG_FEATURE_FIND_SIZE
bool "Enable (-size) option allowing matching for file size"
default y
depends on BUSYBOX_CONFIG_FIND
help
Support the 'find -size' option for searching by file size.
config BUSYBOX_CONFIG_FEATURE_FIND_PRUNE
bool "Enable (-prune) option allowing to exclude subdirectories"
default y
depends on BUSYBOX_CONFIG_FIND
help
If the file is a directory, dont descend into it. Useful for
exclusion .svn and CVS directories.
config BUSYBOX_CONFIG_FEATURE_FIND_DELETE
bool "Enable -delete option allowing to delete files"
default n
depends on BUSYBOX_CONFIG_FIND && BUSYBOX_CONFIG_FEATURE_FIND_DEPTH
help
Support the 'find -delete' option for deleting files and direcotries.
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.
config BUSYBOX_CONFIG_FEATURE_FIND_PATH
bool "Enable -path option allowing to match pathname patterns"
default y
depends on BUSYBOX_CONFIG_FIND
help
The -path option matches whole pathname instead of just filename.
config BUSYBOX_CONFIG_FEATURE_FIND_REGEX
bool "Enable -regex: match pathname to regex"
default y
depends on BUSYBOX_CONFIG_FIND
help
The -regex option matches whole pathname against regular expression.
config BUSYBOX_CONFIG_FEATURE_FIND_CONTEXT
bool "Enable (-context) option for matching security context"
default n
depends on BUSYBOX_CONFIG_FIND && BUSYBOX_CONFIG_SELINUX
help
Support the 'find -context' option for matching security context.
config BUSYBOX_CONFIG_GREP
bool "grep"
default y

View file

@ -38,6 +38,11 @@ config BUSYBOX_CONFIG_FEATURE_INIT_SCTTY
behavour, but is often what you want in an embedded system where
the console is only accessed during development or for maintenance.
config BUSYBOX_CONFIG_FEATURE_INIT_SYSLOG
bool "Enable init to write to syslog"
default y
depends on BUSYBOX_CONFIG_INIT
config BUSYBOX_CONFIG_FEATURE_EXTRA_QUIET
bool "Be _extra_ quiet on boot"
default n

View file

@ -0,0 +1,20 @@
#
# 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

View file

@ -26,4 +26,105 @@ config BUSYBOX_CONFIG_MD5_SIZE_VS_SPEED
2 3.0 5088
3 (smallest) 5.1 4912
config BUSYBOX_CONFIG_FEATURE_FAST_TOP
bool "Faster /proc scanning code (+100 bytes)"
default y
help
This option makes top (and ps) ~20% faster (or 20% less CPU hungry),
but code size is slightly bigger.
config BUSYBOX_CONFIG_FEATURE_ETC_NETWORKS
bool "Support for /etc/networks"
default n
help
Enable support for network names in /etc/networks. This is
a rarely used feature which allows you to use names
instead of IP/mask pairs in route command.
config BUSYBOX_CONFIG_FEATURE_EDITING
bool "Command line editing"
default y
help
Enable line editing (mainly for shell command line).
config BUSYBOX_CONFIG_FEATURE_EDITING_MAX_LEN
int "Maximum length of input"
range 128 8192
default 512
depends on BUSYBOX_CONFIG_FEATURE_EDITING
help
Line editing code uses on-stack buffers for storage.
You may want to decrease this parameter if your target machine
benefits from smaller stack usage.
config BUSYBOX_CONFIG_FEATURE_EDITING_FANCY_KEYS
bool "Additional editing keys"
default y
depends on BUSYBOX_CONFIG_FEATURE_EDITING
help
Enable additonal editing keys (Ctrl-E, Ctrl-U etc).
Arrow keys, Home/End/Delete and Ctrl-W work even without this option.
config BUSYBOX_CONFIG_FEATURE_EDITING_VI
bool "vi-style line editing commands"
default n
depends on BUSYBOX_CONFIG_FEATURE_EDITING
help
Enable vi-style line editing. In shells, this mode can be
turned on and off with "set -o vi" and "set +o vi".
config BUSYBOX_CONFIG_FEATURE_EDITING_HISTORY
int "History size"
range 0 99999
default 256
depends on BUSYBOX_CONFIG_FEATURE_EDITING
help
Specify command history size.
config BUSYBOX_CONFIG_FEATURE_EDITING_SAVEHISTORY
bool "History saving"
default n
depends on BUSYBOX_CONFIG_ASH && BUSYBOX_CONFIG_FEATURE_EDITING
help
Enable history saving in ash shell.
config BUSYBOX_CONFIG_FEATURE_TAB_COMPLETION
bool "Tab completion"
default y
depends on BUSYBOX_CONFIG_FEATURE_EDITING
help
Enable tab completion.
config BUSYBOX_CONFIG_FEATURE_USERNAME_COMPLETION
bool "Username completion"
default n
depends on BUSYBOX_CONFIG_FEATURE_TAB_COMPLETION
help
Enable username completion.
config BUSYBOX_CONFIG_FEATURE_EDITING_FANCY_PROMPT
bool "Fancy shell prompts"
default y
depends on BUSYBOX_CONFIG_FEATURE_EDITING
help
Setting this option allows for prompts to use things like \w and
\$ and escape codes.
config BUSYBOX_CONFIG_MONOTONIC_SYSCALL
bool "Use clock_gettime(CLOCK_MONOTONIC) syscall"
default n
help
Use clock_gettime(CLOCK_MONOTONIC) syscall for measuring
time intervals (time, ping, traceroute etc need this).
Probably requires Linux 2.6+. If not selected, gettimeofday
will be used instead (which gives wrong results if date/time
is reset).
config BUSYBOX_CONFIG_IOCTL_HEX2STR_ERROR
bool "Use ioctl names rather than hex values in error messages"
default y
help
Use ioctl names rather than hex values in error messages
(e.g. VT_DISALLOCATE rather than 0x5608). If disabled this
saves about 1400 bytes.
endmenu

View file

@ -59,12 +59,29 @@ config BUSYBOX_CONFIG_ADDGROUP
help
Utility for creating a new group account.
config BUSYBOX_CONFIG_FEATURE_ADDUSER_TO_GROUP
bool "Support for adding users to groups"
default n
depends on BUSYBOX_CONFIG_ADDGROUP
help
If called with two non-option arguments,
addgroup will add an existing user to an
existing group.
config BUSYBOX_CONFIG_DELGROUP
bool "delgroup"
default n
help
Utility for deleting a group account.
config BUSYBOX_CONFIG_FEATURE_DEL_USER_FROM_GROUP
bool "Support for removing users from groups."
default n
depends on BUSYBOX_CONFIG_DELGROUP
help
If called with two non-option arguments, deluser
or delgroup will remove an user from a specified group.
config BUSYBOX_CONFIG_ADDUSER
bool "adduser"
default n
@ -111,6 +128,13 @@ config BUSYBOX_CONFIG_LOGIN
Note that Busybox binary must be setuid root for this applet to
work properly.
config BUSYBOX_CONFIG_PAM
bool "Support for PAM (Pluggable Authentication Modules)"
default n
depends on BUSYBOX_CONFIG_LOGIN
help
Use PAM in login(1) instead of direct access to password database.
config BUSYBOX_CONFIG_LOGIN_SCRIPTS
bool "Support for login scripts"
depends on BUSYBOX_CONFIG_LOGIN
@ -119,12 +143,20 @@ config BUSYBOX_CONFIG_LOGIN_SCRIPTS
Enable this if you want login to execute $LOGIN_PRE_SUID_SCRIPT
just prior to switching from root to logged-in user.
config BUSYBOX_CONFIG_FEATURE_NOLOGIN
bool "Support for /etc/nologin"
default n
depends on BUSYBOX_CONFIG_LOGIN
help
The file /etc/nologin is used by (some versions of) login(1).
If it exists, non-root logins are prohibited.
config BUSYBOX_CONFIG_FEATURE_SECURETTY
bool "Support for /etc/securetty"
default n
depends on BUSYBOX_CONFIG_LOGIN
help
The file /etc/securetty is used by (some versions of) login(1).
The file /etc/securetty is used by (some versions of) login(1).
The file contains the device names of tty lines (one per line,
without leading /dev/) on which root is allowed to login.
@ -149,6 +181,20 @@ config BUSYBOX_CONFIG_FEATURE_PASSWD_WEAK_CHECK
help
With this option passwd will refuse new passwords which are "weak".
config BUSYBOX_CONFIG_CRYPTPW
bool "cryptpw"
default n
help
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.
config BUSYBOX_CONFIG_SU
bool "su"
default n

View file

@ -19,6 +19,13 @@ config BUSYBOX_CONFIG_BBCONFIG
The bbconfig applet will print the config file with which
busybox was built.
config BUSYBOX_CONFIG_CHRT
bool "chrt"
default n
help
manipulate real-time attributes of a process.
This requires sched_{g,s}etparam support in your libc.
config BUSYBOX_CONFIG_CROND
bool "crond"
default y
@ -256,19 +263,19 @@ config BUSYBOX_CONFIG_MAKEDEVS
'leaf' is traditionally what busybox follows, it allows multiple
devices of a particluar type to be created per command.
e.g. /dev/hda[0-9]
Device properties are passed as command line arguments.
Device properties are passed as command line arguments.
.
'table' reads device properties from a file or stdin, allowing
a batch of unrelated devices to be made with one command.
User/group names are allowed as an alternative to uid/gid.
User/group names are allowed as an alternative to uid/gid.
choice
prompt "Choose makedevs behaviour"
depends BUSYBOX_CONFIG_MAKEDEVS
depends on BUSYBOX_CONFIG_MAKEDEVS
default BUSYBOX_CONFIG_FEATURE_MAKEDEVS_TABLE
config BUSYBOX_CONFIG_FEATURE_MAKEDEVS_LEAF
bool "leaf"
bool "leaf"
config BUSYBOX_CONFIG_FEATURE_MAKEDEVS_TABLE
bool "table"
@ -289,12 +296,6 @@ config BUSYBOX_CONFIG_MT
to advance or rewind a tape past a specified number of archive
files on the tape.
config BUSYBOX_CONFIG_NMETER
bool "nmeter"
default n
help
nmeter prints various system parameters continuously.
config BUSYBOX_CONFIG_RAIDAUTORUN
bool "raidautorun"
default n
@ -303,11 +304,11 @@ config BUSYBOX_CONFIG_RAIDAUTORUN
search and start RAID arrays.
config BUSYBOX_CONFIG_READAHEAD
bool "readahead"
bool "readahead"
default n
depends on LFS
depends on BUSYBOX_CONFIG_LFS
help
Preload the files listed on the command line into RAM cache so that
Preload the files listed on the command line into RAM cache so that
subsequent reads on these files will not block on disk I/O.
This applet just calls the readahead(2) system call on each file.
@ -320,19 +321,19 @@ config BUSYBOX_CONFIG_READAHEAD
run this applet as a background job.
config BUSYBOX_CONFIG_RUNLEVEL
bool "runlevel"
bool "runlevel"
default n
help
find the current and previous system runlevel.
find the current and previous system runlevel.
This applet uses utmp but does not rely on busybox supporing
utmp on purpose. It is used by e.g. emdebian via /etc/init.d/rc.
config BUSYBOX_CONFIG_RX
bool "rx"
bool "rx"
default n
help
Receive files using the Xmodem protocol.
Receive files using the Xmodem protocol.
config BUSYBOX_CONFIG_STRINGS
bool "strings"
@ -371,6 +372,14 @@ config BUSYBOX_CONFIG_TIME
When the command finishes, time writes a message to standard output
giving timing statistics about this program run.
config BUSYBOX_CONFIG_TTYSIZE
bool "ttysize"
default n
help
A replacement for "stty size". Unlike stty, can report only width,
only height, or both, in any order. It also does not complain on error,
but returns default 80x24. Usage in shell scripts: width=`ttysize w`.
config BUSYBOX_CONFIG_WATCHDOG
bool "watchdog"
default y

View file

@ -134,7 +134,7 @@ config BUSYBOX_CONFIG_FEATURE_CHECK_TAINTED_MODULE
config BUSYBOX_CONFIG_FEATURE_2_4_MODULES
# Simulate indentation
bool "Support version 2.2.x to 2.4.x Linux kernels"
default y
default n
depends on BUSYBOX_CONFIG_INSMOD || BUSYBOX_CONFIG_RMMOD || BUSYBOX_CONFIG_MODPROBE
help
Support module loading for 2.2.x and 2.4.x Linux kernels.

View file

@ -12,17 +12,25 @@ config BUSYBOX_CONFIG_FEATURE_IPV6
Enable IPv6 support in busybox.
This adds IPv6 support in the networking applets.
config BUSYBOX_CONFIG_VERBOSE_RESOLUTION_ERRORS
bool "Verbose resolution errors"
default y
help
Enable if you are not satisfied with simplistic
"can't resolve 'hostname.com'" and want to know more.
This may increase size of your executable a bit.
config BUSYBOX_CONFIG_ARP
bool "arp"
default n
help
Manipulate the system ARP cache
Manipulate the system ARP cache.
config BUSYBOX_CONFIG_ARPING
bool "arping"
default y
help
Ping hosts by ARP packets
Ping hosts by ARP packets.
config BUSYBOX_CONFIG_DNSD
bool "dnsd"
@ -67,7 +75,7 @@ config BUSYBOX_CONFIG_HOSTNAME
bool "hostname"
default n
help
Show or set the system's host name
Show or set the system's host name.
config BUSYBOX_CONFIG_HTTPD
bool "httpd"
@ -75,6 +83,14 @@ config BUSYBOX_CONFIG_HTTPD
help
Serve web pages via an HTTP server.
config BUSYBOX_CONFIG_FEATURE_HTTPD_USE_SENDFILE
bool "Use sendfile system call"
default y
depends on BUSYBOX_CONFIG_HTTPD
help
When enabled, httpd will use the kernel sendfile() function
instead of read/write loop.
config BUSYBOX_CONFIG_FEATURE_HTTPD_RELOAD_CONFIG_SIGHUP
bool "Support reloading the global config file using hup signal"
default y
@ -132,7 +148,7 @@ config BUSYBOX_CONFIG_FEATURE_HTTPD_CONFIG_WITH_SCRIPT_INTERPR
help
This option enables support for running scripts through an
interpreter. Turn this on if you want PHP scripts to work
properly. You need to supply an addition line in your httpd
properly. You need to supply an additional line in your httpd
config file:
*.php:/path/to/your/php
@ -154,6 +170,19 @@ config BUSYBOX_CONFIG_FEATURE_HTTPD_ENCODE_URL_STR
For example, httpd -e "<Hello World>" as
"&#60Hello&#32World&#62".
config BUSYBOX_CONFIG_FEATURE_HTTPD_ERROR_PAGES
bool "Enable support for custom error pages"
default y
depends on BUSYBOX_CONFIG_HTTPD
help
This option allows you to define custom error pages in
the configuration file instead of the default HTTP status
error pages. For instance, if you add the line:
E404:/path/e404.html
in the config file, the server will respond the specified
'/path/e404.html' file instead of the terse '404 NOT FOUND'
message.
config BUSYBOX_CONFIG_IFCONFIG
bool "ifconfig"
default y
@ -204,7 +233,6 @@ config BUSYBOX_CONFIG_FEATURE_IFCONFIG_BROADCAST_PLUS
config BUSYBOX_CONFIG_IFUPDOWN
bool "ifupdown"
default n
select BUSYBOX_CONFIG_RUN_PARTS
help
Activate or deactivate the specified interfaces. This applet makes
use of either "ifconfig" and "route" or the "ip" command to actually
@ -215,8 +243,18 @@ config BUSYBOX_CONFIG_IFUPDOWN
against my better judgement (since this will surely result in plenty
of support questions on the mailing list), I do not force you to
enable these additional options. It is up to you to supply either
"ifconfig" and "route" or the "ip" command, either via busybox or via
standalone utilities.
"ifconfig", "route" and "run-parts" or the "ip" command, either
via busybox or via standalone utilities.
config BUSYBOX_CONFIG_IFUPDOWN_IFSTATE_PATH
string "Absolute path to ifstate file"
default "/var/run/ifstate"
help
ifupdown keeps state information in a file called ifstate.
Typically it is located in /var/run/ifstate, however
some distributions tend to put it in other places
(debian, for example, uses /etc/network/run/ifstate).
This config option defines location of ifstate.
config BUSYBOX_CONFIG_FEATURE_IFUPDOWN_IP
bool "Use ip applet"
@ -259,7 +297,7 @@ config BUSYBOX_CONFIG_FEATURE_IFUPDOWN_IPV4
default n
depends on BUSYBOX_CONFIG_IFUPDOWN
help
If you want busybox to talk IPv4, leave this on.
If you want ifup/ifdown to talk IPv4, leave this on.
config BUSYBOX_CONFIG_FEATURE_IFUPDOWN_IPV6
bool "Enable support for IPv6"
@ -268,13 +306,14 @@ config BUSYBOX_CONFIG_FEATURE_IFUPDOWN_IPV6
help
If you need support for IPv6, turn this option on.
config BUSYBOX_CONFIG_FEATURE_IFUPDOWN_IPX
bool "Enable support for IPX"
default n
depends on BUSYBOX_CONFIG_IFUPDOWN
help
If this option is selected you can use busybox to work with IPX
networks.
### UNUSED
### config FEATURE_IFUPDOWN_IPX
### bool "Enable support for IPX"
### default n
### depends on IFUPDOWN
### help
### If this option is selected you can use busybox to work with IPX
### networks.
config BUSYBOX_CONFIG_FEATURE_IFUPDOWN_MAPPING
bool "Enable mapping support"
@ -284,6 +323,16 @@ config BUSYBOX_CONFIG_FEATURE_IFUPDOWN_MAPPING
This enables support for the "mapping" stanza, unless you have
a weird network setup you don't need it.
config BUSYBOX_CONFIG_FEATURE_IFUPDOWN_EXTERNAL_DHCP
bool "Enable support for external dhcp clients"
default n
depends on BUSYBOX_CONFIG_IFUPDOWN
help
This enables support for the external dhcp clients. Clients are
tried in the following order: dhcpcd, dhclient, pump and udhcpc.
Otherwise, if udhcpc applet is enabled, it is used.
Otherwise, ifup/ifdown will have no support for DHCP.
config BUSYBOX_CONFIG_INETD
bool "inetd"
default n
@ -330,7 +379,7 @@ config BUSYBOX_CONFIG_FEATURE_INETD_RPC
bool "Support RPC services"
default n
depends on BUSYBOX_CONFIG_INETD
depends on BUSYBOX_CONFIG_FEATURE_HAVE_RPC
select BUSYBOX_CONFIG_FEATURE_HAVE_RPC
help
Support Sun-RPC based services
@ -387,6 +436,7 @@ config BUSYBOX_CONFIG_FEATURE_IP_SHORT_FORMS
ip link -> iplink
ip route -> iproute
ip tunnel -> iptunnel
ip rule -> iprule
Say N unless you desparately need the short form of the ip
object commands.
@ -466,7 +516,7 @@ config BUSYBOX_CONFIG_NETMSG
simple program for sending udp broadcast messages
config BUSYBOX_CONFIG_NC_SERVER
bool "Netcat server options (-lp)"
bool "Netcat server options (-l)"
default n
depends on BUSYBOX_CONFIG_NC
help
@ -487,6 +537,14 @@ config BUSYBOX_CONFIG_NETSTAT
help
netstat prints information about the Linux networking subsystem.
config BUSYBOX_CONFIG_FEATURE_NETSTAT_WIDE
bool " Enable wide netstat output"
default y
depends on BUSYBOX_CONFIG_NETSTAT
help
Add support for wide columns. Useful when displaying IPv6 addresses
(-W option).
config BUSYBOX_CONFIG_NSLOOKUP
bool "nslookup"
default y
@ -500,6 +558,19 @@ config BUSYBOX_CONFIG_PING
ping uses the ICMP protocol's mandatory ECHO_REQUEST datagram to
elicit an ICMP ECHO_RESPONSE from a host or gateway.
config BUSYBOX_CONFIG_PING6
bool "ping6"
default y
depends on BUSYBOX_CONFIG_FEATURE_IPV6 && BUSYBOX_CONFIG_PING
help
This will give you a ping that can talk IPv6.
config BUSYBOX_CONFIG_PSCAN
bool "pscan"
default n
help
Simple network port scanner.
config BUSYBOX_CONFIG_FEATURE_FANCY_PING
bool "Enable fancy ping output"
default y
@ -508,27 +579,18 @@ config BUSYBOX_CONFIG_FEATURE_FANCY_PING
Make the output from the ping applet include statistics, and at the
same time provide full support for ICMP packets.
config BUSYBOX_CONFIG_PING6
bool "ping6"
default y
depends on BUSYBOX_CONFIG_FEATURE_IPV6
help
This will give you a ping that can talk IPv6.
config BUSYBOX_CONFIG_FEATURE_FANCY_PING6
bool "Enable fancy ping6 output"
default y
depends on BUSYBOX_CONFIG_PING6
help
Make the output from the ping6 applet include statistics, and at the
same time provide full support for ICMP packets.
config BUSYBOX_CONFIG_ROUTE
bool "route"
default y
help
Route displays or manipulates the kernel's IP routing tables.
config BUSYBOX_CONFIG_SLATTACH
bool "slattach"
default n
help
slattach is a small utility to attach network interfaces to serial lines.
config BUSYBOX_CONFIG_TELNET
bool "telnet"
default y
@ -703,13 +765,6 @@ config BUSYBOX_CONFIG_FEATURE_WGET_AUTHENTICATION
help
Support authenticated HTTP transfers.
config BUSYBOX_CONFIG_FEATURE_WGET_IP6_LITERAL
bool "Enable IPv6 literal addresses"
default y
depends on BUSYBOX_CONFIG_WGET && BUSYBOX_CONFIG_FEATURE_IPV6
help
Support IPv6 address literal notation in URLs.
config BUSYBOX_CONFIG_FEATURE_WGET_LONG_OPTIONS
bool "Enable long options"
default y

View file

@ -32,6 +32,16 @@ config BUSYBOX_CONFIG_APP_DUMPLEASES
See http://udhcp.busybox.net for further details.
config BUSYBOX_CONFIG_FEATURE_UDHCPD_WRITE_LEASES_EARLY
bool "Rewrite the lease file at every new acknowledge"
default n
depends on BUSYBOX_CONFIG_APP_UDHCPD
help
If selected, udhcpd will write a new file with leases every
time a new lease has been accepted, thus eleminating the need
to send SIGUSR1 for the initial writing, or updating. Any timed
rewriting remains undisturbed
config BUSYBOX_CONFIG_APP_UDHCPC
bool "udhcp Client (udhcpc)"
default y
@ -44,17 +54,6 @@ config BUSYBOX_CONFIG_APP_UDHCPC
See http://udhcp.busybox.net for further details.
config BUSYBOX_CONFIG_FEATURE_UDHCP_SYSLOG
bool "Log udhcp messages to syslog"
default n
depends on BUSYBOX_CONFIG_APP_UDHCPD || BUSYBOX_CONFIG_APP_UDHCPC
select BUSYBOX_CONFIG_FEATURE_SYSLOG
help
If not daemonized, udhcpd prints its messages to stdout/stderr.
If this option is selected, it will also log them to syslog.
See http://udhcp.busybox.net for further details.
config BUSYBOX_CONFIG_FEATURE_UDHCP_DEBUG
bool "Compile udhcp with noisy debugging messages"
default n
@ -65,3 +64,11 @@ config BUSYBOX_CONFIG_FEATURE_UDHCP_DEBUG
the background.
See http://udhcp.busybox.net for further details.
config BUSYBOX_CONFIG_FEATURE_RFC3397
bool "Support for RFC3397 domain search (experimental)"
default y
depends on BUSYBOX_CONFIG_APP_UDHCPD || BUSYBOX_CONFIG_APP_UDHCPC
help
If selected, both client and server will support passing of domain
search lists via option 119, specified in RFC3397.

View file

@ -43,6 +43,12 @@ config BUSYBOX_CONFIG_KILLALL5
default y
depends on BUSYBOX_CONFIG_KILL
config BUSYBOX_CONFIG_NMETER
bool "nmeter"
default n
help
Prints selected system stats continuously, one line per update.
config BUSYBOX_CONFIG_PIDOF
bool "pidof"
default y
@ -74,7 +80,7 @@ config BUSYBOX_CONFIG_PS
config BUSYBOX_CONFIG_FEATURE_PS_WIDE
bool "Enable argument for wide output (-w)"
default y
default n
depends on BUSYBOX_CONFIG_PS
help
Support argument 'w' for wide output.
@ -102,11 +108,25 @@ config BUSYBOX_CONFIG_TOP
system.
config BUSYBOX_CONFIG_FEATURE_TOP_CPU_USAGE_PERCENTAGE
bool "Support showing CPU usage percentage (add 2k bytes)"
bool "Show CPU per-process usage percentage (adds 2k bytes)"
default y
depends on BUSYBOX_CONFIG_TOP
help
Make top display CPU usage.
Make top display CPU usage for each process.
config BUSYBOX_CONFIG_FEATURE_TOP_CPU_GLOBAL_PERCENTS
bool "Show CPU global usage percentage (adds 0.5k bytes)"
default y
depends on BUSYBOX_CONFIG_FEATURE_TOP_CPU_USAGE_PERCENTAGE
help
Makes top display "CPU: NN% usr NN% sys..." line.
config BUSYBOX_CONFIG_FEATURE_TOP_DECIMALS
bool "Show 1/10th of a percent in CPU/mem statistics (adds 0.3k bytes)"
default n
depends on BUSYBOX_CONFIG_FEATURE_TOP_CPU_USAGE_PERCENTAGE
help
Show 1/10th of a percent in CPU/mem statistics.
config BUSYBOX_CONFIG_UPTIME
bool "uptime"
@ -116,6 +136,14 @@ config BUSYBOX_CONFIG_UPTIME
the system has been running, how many users are currently logged
on, and the system load averages for the past 1, 5, and 15 minutes.
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

View file

@ -0,0 +1,108 @@
#
# For a description of the syntax of this configuration file,
# see scripts/kbuild/config-language.txt.
#
menu "Selinux Utilities"
depends on BUSYBOX_CONFIG_SELINUX
config BUSYBOX_CONFIG_CHCON
bool "chcon"
default n
depends on BUSYBOX_CONFIG_SELINUX
help
Enable support to change the security context of file.
config BUSYBOX_CONFIG_FEATURE_CHCON_LONG_OPTIONS
bool "Enable long options"
default n
depends on BUSYBOX_CONFIG_CHCON && BUSYBOX_CONFIG_GETOPT_LONG
help
Support long options for the chcon applet.
config BUSYBOX_CONFIG_GETENFORCE
bool "getenforce"
default n
depends on BUSYBOX_CONFIG_SELINUX
help
Enable support to get the current mode of SELinux.
config BUSYBOX_CONFIG_GETSEBOOL
bool "getsebool"
default n
depends on BUSYBOX_CONFIG_SELINUX
help
Enable support to get SELinux boolean values.
config BUSYBOX_CONFIG_LOAD_POLICY
bool "load_policy"
default n
depends on BUSYBOX_CONFIG_SELINUX
help
Enable support to load SELinux policy.
config BUSYBOX_CONFIG_MATCHPATHCON
bool "matchpathcon"
default n
depends on BUSYBOX_CONFIG_SELINUX
help
Enable support to get default security context of the
specified path from the file contexts configuration.
config BUSYBOX_CONFIG_RESTORECON
bool "restorecon"
default n
depends on BUSYBOX_CONFIG_SELINUX
help
Enable support to relabel files. The feature is almost
the same as setfiles, but usage is a little different.
config BUSYBOX_CONFIG_RUNCON
bool "runcon"
default n
depends on BUSYBOX_CONFIG_SELINUX
help
Enable support to run command in speficied security context.
config BUSYBOX_CONFIG_FEATURE_RUNCON_LONG_OPTIONS
bool "Enable long options"
default n
depends on BUSYBOX_CONFIG_RUNCON && BUSYBOX_CONFIG_GETOPT_LONG
help
Support long options for the runcon applet.
config BUSYBOX_CONFIG_SELINUXENABLED
bool "selinuxenabled"
default n
depends on BUSYBOX_CONFIG_SELINUX
help
Enable support for this command to be used within shell scripts
to determine if selinux is enabled.
config BUSYBOX_CONFIG_SETENFORCE
bool "setenforce"
default n
depends on BUSYBOX_CONFIG_SELINUX
help
Enable support to modify the mode SELinux is running in.
config BUSYBOX_CONFIG_SETFILES
bool "setfiles"
default n
depends on BUSYBOX_CONFIG_SELINUX
help
Enable support to modify to relabel files.
Notice: If you built libselinux with -D_FILE_OFFSET_BITS=64,
(It is default in libselinux's Makefile), you _must_ enable
CONFIG_LFS.
config BUSYBOX_CONFIG_FEATURE_SETFILES_CHECK_OPTION
bool "Enable check option"
default n
depends on BUSYBOX_CONFIG_SETFILES
help
Support "-c" option (check the validity of the contexts against
the specified binary policy) for setfiles. Requires libsepol.
endmenu

View file

@ -87,7 +87,7 @@ config BUSYBOX_CONFIG_ASH_MATH_SUPPORT
config BUSYBOX_CONFIG_ASH_MATH_SUPPORT_64
bool "Extend Posix math support to 64 bit"
default n
default y
depends on BUSYBOX_CONFIG_ASH_MATH_SUPPORT
help
Enable 64-bit math support in the ash shell. This will make
@ -107,7 +107,7 @@ config BUSYBOX_CONFIG_ASH_BUILTIN_ECHO
select BUSYBOX_CONFIG_ECHO
depends on BUSYBOX_CONFIG_ASH
help
Enable support for echo, built in to ash.
Enable support for echo, builtin to ash.
config BUSYBOX_CONFIG_ASH_BUILTIN_TEST
bool "Builtin version of 'test'"
@ -115,7 +115,7 @@ config BUSYBOX_CONFIG_ASH_BUILTIN_TEST
select BUSYBOX_CONFIG_TEST
depends on BUSYBOX_CONFIG_ASH
help
Enable support for test, built in to ash.
Enable support for test, builtin to ash.
config BUSYBOX_CONFIG_ASH_CMDCMD
bool "'command' command to override shell builtins"
@ -135,7 +135,7 @@ config BUSYBOX_CONFIG_ASH_MAIL
config BUSYBOX_CONFIG_ASH_OPTIMIZE_FOR_SIZE
bool "Optimize for size instead of speed"
default y
default n
depends on BUSYBOX_CONFIG_ASH
help
Compile ash for reduced size at the price of speed.
@ -153,7 +153,7 @@ config BUSYBOX_CONFIG_ASH_RANDOM_SUPPORT
config BUSYBOX_CONFIG_ASH_EXPAND_PRMT
bool "Expand prompt string"
default n
default y
depends on BUSYBOX_CONFIG_ASH
help
"PS#" may be contain volatile content, such as backquote commands.
@ -176,6 +176,54 @@ config BUSYBOX_CONFIG_HUSH
word ), arithmetic expansion, aliases, brace expansion, tilde
expansion, &> and >& redirection of stdout+stderr, etc.
config BUSYBOX_CONFIG_HUSH_HELP
bool "help builtin"
default n
depends on BUSYBOX_CONFIG_HUSH
help
Enable help builtin in hush. Code size + ~1 kbyte.
config BUSYBOX_CONFIG_HUSH_INTERACTIVE
bool "Interactive mode"
default n
depends on BUSYBOX_CONFIG_HUSH
help
Enable interactive mode (prompt and command editing).
Without this, hush simply reads and executes commands
from stdin just like a shell script from the file.
No prompt, no PS1/PS2 magic shell variables.
config BUSYBOX_CONFIG_HUSH_JOB
bool "Job control"
default n
depends on BUSYBOX_CONFIG_HUSH_INTERACTIVE
help
Enable job control: Ctrl-Z backgrounds, Ctrl-C interrupts current
command (not entire shell), fg/bg builtins work. Without this option,
"cmd &" still works by simply spawning a process and immediately
prompting for next command (or executing next command in a script),
but no separate process group is formed.
config BUSYBOX_CONFIG_HUSH_TICK
bool "Process substitution"
default n
depends on BUSYBOX_CONFIG_HUSH
help
Enable process substitution `command` and $(command) in hush.
config BUSYBOX_CONFIG_HUSH_IF
bool "Support if/then/elif/else/fi"
default n
depends on BUSYBOX_CONFIG_HUSH
help
Enable if/then/elif/else/fi in hush.
config BUSYBOX_CONFIG_HUSH_LOOPS
bool "Support for, while and until loops"
default n
depends on BUSYBOX_CONFIG_HUSH
help
Enable for, while and until loops in hush.
config BUSYBOX_CONFIG_LASH
bool "lash"
@ -216,12 +264,12 @@ config BUSYBOX_CONFIG_FEATURE_SH_EXTRA_QUIET
help
Remove the busybox introduction when starting a shell.
config BUSYBOX_CONFIG_FEATURE_SH_STANDALONE_SHELL
config BUSYBOX_CONFIG_FEATURE_SH_STANDALONE
bool "Standalone shell"
default n
depends on BUSYBOX_CONFIG_MSH || BUSYBOX_CONFIG_LASH || BUSYBOX_CONFIG_HUSH || BUSYBOX_CONFIG_ASH
depends on (BUSYBOX_CONFIG_MSH || BUSYBOX_CONFIG_LASH || BUSYBOX_CONFIG_HUSH || BUSYBOX_CONFIG_ASH) && BUSYBOX_CONFIG_FEATURE_PREFER_APPLETS
help
This option causes the selected busybox shell to use busybox applets
This option causes busybox shells to use busybox applets
in preference to executables in the PATH whenever possible. For
example, entering the command 'ifconfig' into the shell would cause
busybox to use the ifconfig busybox applet. Specifying the fully
@ -230,66 +278,43 @@ config BUSYBOX_CONFIG_FEATURE_SH_STANDALONE_SHELL
is generally used when creating a statically linked version of busybox
for use as a rescue shell, in the event that you screw up your system.
Note that this will *also* cause applets to take precedence
over shell builtins of the same name. So turning this on will
eliminate any performance gained by turning on the builtin "echo"
and "test" commands in ash.
This is implemented by re-execing /proc/self/exe (typically)
with right parameters. Some selected applets ("NOFORK" applets)
can even be executed without creating new process.
Instead, busybox will call <applet>_main() internally.
Note that when using this option, the shell will attempt to directly
run '/bin/busybox'. If you do not have the busybox binary sitting in
that exact location with that exact name, this option will not work at
all.
However, this causes problems in chroot jails without mounted /proc
and with ps/top (command name can be shown as 'exe' for applets
started this way).
# untrue?
# Note that this will *also* cause applets to take precedence
# over shell builtins of the same name. So turning this on will
# eliminate any performance gained by turning on the builtin "echo"
# and "test" commands in ash.
# untrue?
# Note that when using this option, the shell will attempt to directly
# run '/bin/busybox'. If you do not have the busybox binary sitting in
# that exact location with that exact name, this option will not work at
# all.
config BUSYBOX_CONFIG_FEATURE_COMMAND_EDITING
bool "Command line editing"
default y
depends on BUSYBOX_CONFIG_MSH || BUSYBOX_CONFIG_LASH || BUSYBOX_CONFIG_HUSH || BUSYBOX_CONFIG_ASH
help
Enable command editing in shell.
config BUSYBOX_CONFIG_FEATURE_COMMAND_EDITING_VI
bool "vi-style line editing commands"
config BUSYBOX_CONFIG_CTTYHACK
bool "cttyhack"
default n
depends on BUSYBOX_CONFIG_FEATURE_COMMAND_EDITING
help
Enable vi-style line editing in the shell. This mode can be
turned on and off with "set -o vi" and "set +o vi".
One common problem reported on the mailing list is "can't access tty;
job control turned off" error message which typically appears when
one tries to use shell with stdin/stdout opened to /dev/console.
This device is special - it cannot be a controlling tty.
config BUSYBOX_CONFIG_FEATURE_COMMAND_HISTORY
int "History size"
range 0 99999
default 15
depends on BUSYBOX_CONFIG_FEATURE_COMMAND_EDITING
help
Specify command history size in shell.
Proper solution is to use correct device instead of /dev/console.
config BUSYBOX_CONFIG_FEATURE_COMMAND_SAVEHISTORY
bool "History saving"
default n
depends on BUSYBOX_CONFIG_ASH && BUSYBOX_CONFIG_FEATURE_COMMAND_EDITING
help
Enable history saving in ash shell.
cttyhack provides "quick and dirty" solution to this problem.
It analyzes stdin with various ioctls, trying to determine whether
it is a /dev/ttyN or /dev/ttySN (virtual terminal or serial line).
If it detects one, it closes stdin/out/err and reopens that device.
Then it executes given program. Usage example for /etc/inittab
(for busybox init):
config BUSYBOX_CONFIG_FEATURE_COMMAND_TAB_COMPLETION
bool "Tab completion"
default y
depends on BUSYBOX_CONFIG_FEATURE_COMMAND_EDITING
help
Enable tab completion in shell.
config BUSYBOX_CONFIG_FEATURE_COMMAND_USERNAME_COMPLETION
bool "Username completion"
default n
depends on BUSYBOX_CONFIG_FEATURE_COMMAND_TAB_COMPLETION
help
Enable username completion in shell.
config BUSYBOX_CONFIG_FEATURE_SH_FANCY_PROMPT
bool "Fancy shell prompts"
default y
depends on BUSYBOX_CONFIG_FEATURE_COMMAND_EDITING
help
Setting this option allows for prompts to use things like \w and
\$ and also using escape codes.
::respawn:/bin/cttyhack /bin/sh
endmenu

View file

@ -59,6 +59,7 @@ config BUSYBOX_CONFIG_FEATURE_IPC_SYSLOG
config BUSYBOX_CONFIG_FEATURE_IPC_SYSLOG_BUFFER_SIZE
int " Circular buffer size in Kbytes (minimum 4KB)"
default 16
range 4 2147483647
depends on BUSYBOX_CONFIG_FEATURE_IPC_SYSLOG
help
This option sets the size of the circular buffer
@ -88,8 +89,6 @@ config BUSYBOX_CONFIG_FEATURE_LOGREAD_REDUCED_LOCKING
config BUSYBOX_CONFIG_KLOGD
bool "klogd"
default y
depends on BUSYBOX_CONFIG_SYSLOGD
select BUSYBOX_CONFIG_FEATURE_SYSLOG
help
klogd is a utility which intercepts and logs all
messages from the Linux kernel and sends the messages

View file

@ -127,7 +127,7 @@ config BUSYBOX_CONFIG_FEATURE_SGI_LABEL
config BUSYBOX_CONFIG_FEATURE_SUN_LABEL
bool "Support SUN disklabels"
default n
depends on BUSYBOX_CONFIG_FDISK && BUSYBOX_CONFIG_FEATURE_FDISK_WRITABLE
depends on BUSYBOX_CONFIG_FDISK && BUSYBOX_CONFIG_FEATURE_FDISK_WRITABLE
help
Enabling this option allows you to create or change SUN disklabels.
Most people can safely leave this option disabled.
@ -181,7 +181,7 @@ config BUSYBOX_CONFIG_MKFS_MINIX
this utility will do the job for you.
comment "Minix filesystem support"
depends on BUSYBOX_CONFIG_FSCK_MINIX || BUSYBOX_CONFIG_MKFS_MINIX
depends on BUSYBOX_CONFIG_FSCK_MINIX || BUSYBOX_CONFIG_MKFS_MINIX
config BUSYBOX_CONFIG_FEATURE_MINIX2
bool "Support Minix fs v2 (fsck_minix/mkfs_minix)"
@ -269,46 +269,41 @@ config BUSYBOX_CONFIG_MDEV
bool "mdev"
default n
help
mdev is a mini-udev implementation: call it with -s to populate
/dev from /sys, then "echo /sbin/mdev > /proc/sys/kernel/hotplug" to
have it handle hotplug events afterwards. Device names are taken
from sysfs.
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
The mdev config file contains lines that look like:
Add support for the mdev config file to control ownership and
permissions of the device nodes.
hd[a-z][0-9]* 0:3 660
That's device name (with regex match), uid:gid, and permissions.
Config file parsing stops on the first matching line. If no config
entry is matched, devices are created with default 0:0 660. (Make
the last line match .* to override this.)
For more information, please see docs/mdev.txt
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, consisting
of a special character and a command line to run after creating the
corresponding device(s) and before removing, ala:
This adds support for an optional field to /etc/mdev.conf for
executing commands when devices are created/removed.
hdc root:cdrom 660 *ln -s $MDEV cdrom
For more information, please see docs/mdev.txt
The $MDEV environment variable is set to the name of the device.
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.
The special characters and their meanings are:
@ Run after creating the device.
$ Run before removing the device.
* Run both after creating and before removing the device.
Commands are executed via system() so you need /bin/sh, meaning you
probably want to select a default shell in the Shells menu.
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"
@ -369,7 +364,7 @@ config BUSYBOX_CONFIG_FEATURE_MOUNT_NFS
bool "Support mounting NFS file systems"
default y
depends on BUSYBOX_CONFIG_MOUNT
depends on BUSYBOX_CONFIG_FEATURE_HAVE_RPC
select BUSYBOX_CONFIG_FEATURE_HAVE_RPC
select BUSYBOX_CONFIG_FEATURE_SYSLOG
help
Enable mounting of NFS file systems.
@ -495,7 +490,7 @@ config BUSYBOX_CONFIG_FEATURE_MOUNT_LOOP
The umount command will also free that loopback device.
You can still use the 'losetup' utility (to manually associate files
with loop devices) if you need to do something advanced, such as
with loop devices) if you need to do something advanced, such as
specify an offset or cryptographic options to the loopback device.
(If you don't want umount to free the loop device, use "umount -D".)

View file

@ -1,12 +1,13 @@
Index: busybox-1.4.2/applets/Kbuild
Index: busybox-1.7.2/applets/Kbuild
===================================================================
--- busybox-1.4.2.orig/applets/Kbuild 2007-06-04 13:21:32.429046704 +0200
+++ busybox-1.4.2/applets/Kbuild 2007-06-04 13:21:32.495036672 +0200
@@ -10,6 +10,7 @@
--- busybox-1.7.2.orig/applets/Kbuild 2007-10-04 14:30:23.484330073 +0200
+++ busybox-1.7.2/applets/Kbuild 2007-10-04 14:33:47.751970627 +0200
@@ -20,6 +20,6 @@
HOSTCFLAGS_usage.o = -I$(srctree)/include
# Generated file needs additional love
+applets/usage: include/autoconf.h
applets/applets.o: include/usage_compressed.h
hostprogs-y += usage
applets/applets.o: include/usage_compressed.h
-applets/usage: .config $(srctree)/applets/usage_compressed
-include/usage_compressed.h: applets/usage $(srctree)/applets/usage_compressed
+applets/usage: .config $(srctree)/applets/usage_compressed include/autoconf.h
+include/usage_compressed.h: applets/usage $(srctree)/applets/usage_compressed include/autoconf.h
$(call cmd,gen_usage_compressed)

View file

@ -1,13 +1,13 @@
Index: busybox-1.4.2/networking/wget.c
Index: busybox-1.7.2/networking/wget.c
===================================================================
--- busybox-1.4.2.orig/networking/wget.c 2007-06-04 13:21:32.408049896 +0200
+++ busybox-1.4.2/networking/wget.c 2007-06-04 13:21:32.681008400 +0200
@@ -136,7 +136,7 @@
{ "directory-prefix", required_argument, NULL, 'P' },
{ "proxy", required_argument, NULL, 'Y' },
{ "user-agent", required_argument, NULL, 'U' },
- { "passive-ftp", no_argument, NULL, 0xff },
+ { "passive-ftp", no_argument, NULL, 0xfd },
{ "header", required_argument, NULL, 0xfe },
{ 0, 0, 0, 0 }
};
--- busybox-1.7.2.orig/networking/wget.c 2007-10-04 14:35:17.057059834 +0200
+++ busybox-1.7.2/networking/wget.c 2007-10-04 14:35:27.013627222 +0200
@@ -140,7 +140,7 @@
"directory-prefix\0" Required_argument "P"
"proxy\0" Required_argument "Y"
"user-agent\0" Required_argument "U"
- "passive-ftp\0" No_argument "\xff"
+ "passive-ftp\0" No_argument "\xfd"
"header\0" Required_argument "\xfe"
;
applet_long_options = wget_longopts;

View file

@ -1,13 +0,0 @@
Index: busybox-1.4.2/Makefile.flags
===================================================================
--- busybox-1.4.2.orig/Makefile.flags 2007-06-04 13:21:32.387053088 +0200
+++ busybox-1.4.2/Makefile.flags 2007-06-04 13:21:32.871979368 +0200
@@ -16,7 +16,7 @@
-D"BB_VER=KBUILD_STR($(BB_VER))" -DBB_BT=AUTOCONF_TIMESTAMP
CFLAGS += \
- -Wall -Wstrict-prototypes -Wshadow -Werror -Wundef \
+ -Wall -Wstrict-prototypes -Wshadow -Wundef \
-funsigned-char -fno-builtin-strlen -finline-limit=0 -static-libgcc \
-Os -falign-functions=1 -falign-jumps=1 -falign-loops=1 \
-fomit-frame-pointer -ffunction-sections -fdata-sections

View file

@ -1,9 +1,9 @@
Index: busybox-1.4.2/networking/udhcp/dhcpc.c
Index: busybox-1.7.2/networking/udhcp/dhcpc.c
===================================================================
--- busybox-1.4.2.orig/networking/udhcp/dhcpc.c 2007-07-18 10:07:20.161035443 +0200
+++ busybox-1.4.2/networking/udhcp/dhcpc.c 2007-07-18 10:09:15.515609124 +0200
@@ -273,6 +273,12 @@
tv.tv_sec = timeout - uptime();
--- busybox-1.7.2.orig/networking/udhcp/dhcpc.c 2007-10-04 14:36:41.521873204 +0200
+++ busybox-1.7.2/networking/udhcp/dhcpc.c 2007-10-04 14:38:28.231954268 +0200
@@ -309,6 +309,12 @@
jump_in:
tv.tv_usec = 0;
+ /* When running on a bridge, the ifindex may have changed (e.g. if
@ -12,6 +12,6 @@ Index: busybox-1.4.2/networking/udhcp/dhcpc.c
+ * Workaround: refresh it here before processing the next packet */
+ read_interface(client_config.interface, &client_config.ifindex, NULL, client_config.arp);
+
if (listen_mode != LISTEN_NONE && fd < 0) {
if (listen_mode != LISTEN_NONE && sockfd < 0) {
if (listen_mode == LISTEN_KERNEL)
fd = listen_socket(INADDR_ANY, CLIENT_PORT, client_config.interface);
sockfd = listen_socket(/*INADDR_ANY,*/ CLIENT_PORT, client_config.interface);

View file

@ -1,37 +1,37 @@
Index: busybox-1.4.2/shell/ash.c
Index: busybox-1.7.2/shell/ash.c
===================================================================
--- busybox-1.4.2.orig/shell/ash.c 2007-06-04 13:21:32.248074216 +0200
+++ busybox-1.4.2/shell/ash.c 2007-06-04 13:21:34.000807760 +0200
@@ -12237,9 +12237,18 @@
--- busybox-1.7.2.orig/shell/ash.c 2007-09-03 13:48:38.000000000 +0200
+++ busybox-1.7.2/shell/ash.c 2007-10-04 14:47:41.607489342 +0200
@@ -11310,8 +11310,18 @@
const char *p;
char **aptr;
int flag = argv[0][0] == 'r'? VREADONLY : VEXPORT;
+ int mask = ~0;
int notp;
+ int nopt;
- notp = nextopt("p") - 'p';
+ while ((notp = nextopt("np"))) {
+ if (notp == 'n') {
- if (nextopt("p") != 'p') {
+ while ((nopt = nextopt("np"))) {
+ if (nopt == 'n') {
+ mask = ~flag;
+ } else { /* p */
+ break;
+ }
+ }
+
+ notp -= 'p';
if (notp && ((name = *(aptr = argptr)))) {
do {
if ((p = strchr(name, '=')) != NULL) {
@@ -12247,10 +12256,11 @@
} else {
if ((vp = *findvar(hashvar(name), name))) {
vp->flags |= flag;
+ vp->flags &= mask;
continue;
+ if (nopt != 'p') {
aptr = argptr;
name = *aptr;
if (name) {
@@ -11323,10 +11333,11 @@
vp = *findvar(hashvar(name), name);
if (vp) {
vp->flags |= flag;
+ vp->flags &= mask;
continue;
}
}
}
- setvar(name, p, flag);
+ setvar(name, p, flag & mask);
} while ((name = *++aptr) != NULL);
} else {
showvars(argv[0], flag, 0);
- setvar(name, p, flag);
+ setvar(name, p, flag & mask);
} while ((name = *++aptr) != NULL);
return 0;
}

View file

@ -1,29 +0,0 @@
Index: busybox-1.4.2/networking/ifconfig.c
===================================================================
--- busybox-1.4.2.orig/networking/ifconfig.c 2007-06-29 02:03:17.046772952 +0200
+++ busybox-1.4.2/networking/ifconfig.c 2007-06-29 02:03:49.938772608 +0200
@@ -376,18 +376,18 @@
#endif
sai.sin_family = AF_INET;
sai.sin_port = 0;
- if (!strcmp(host, bb_str_default)) {
- /* Default is special, meaning 0.0.0.0. */
- sai.sin_addr.s_addr = INADDR_ANY;
- }
#if ENABLE_FEATURE_IFCONFIG_BROADCAST_PLUS
- else if ((host[0] == '+' && !host[1]) && (mask & A_BROADCAST)
+ if ((host[0] == '+' && !host[1]) && (mask & A_BROADCAST)
&& (did_flags & (A_NETMASK|A_HOSTNAME)) == (A_NETMASK|A_HOSTNAME)
) {
/* + is special, meaning broadcast is derived. */
sai.sin_addr.s_addr = (~sai_netmask) | (sai_hostname & sai_netmask);
- }
+ } else
#endif
+ if (!strcmp(host, bb_str_default)) {
+ /* Default is special, meaning 0.0.0.0. */
+ sai.sin_addr.s_addr = INADDR_ANY;
+ }
#if ENABLE_FEATURE_IPV6
else if (inet_pton(AF_INET6, host, &sai6.sin6_addr) > 0) {
int sockfd6;

View file

@ -1,30 +0,0 @@
Index: busybox-1.4.2/shell/ash.c
===================================================================
--- busybox-1.4.2.orig/shell/ash.c 2007-07-01 05:33:08.371737750 +0200
+++ busybox-1.4.2/shell/ash.c 2007-07-01 05:33:11.703946000 +0200
@@ -3957,12 +3957,6 @@
}
#endif
- if (is_safe_applet(name)) {
- entry->cmdtype = CMDNORMAL;
- entry->u.index = -1;
- return;
- }
-
updatetbl = (path == pathval());
if (!updatetbl) {
act |= DO_ALTPATH;
@@ -4074,6 +4068,12 @@
goto success;
}
+ if (is_safe_applet(name)) {
+ entry->cmdtype = CMDNORMAL;
+ entry->u.index = -1;
+ return;
+ }
+
/* We failed. If there was an entry for this command, delete it */
if (cmdp && updatetbl)
delete_cmd_entry();

View file

@ -1,18 +0,0 @@
Index: busybox-1.4.2/coreutils/printf.c
===================================================================
--- busybox-1.4.2.orig/coreutils/printf.c 2007-07-09 03:00:31.808788500 +0200
+++ busybox-1.4.2/coreutils/printf.c 2007-07-09 03:00:42.257441500 +0200
@@ -60,11 +60,11 @@
static void conv_strtoul(char *arg, void *result)
{
- *(unsigned long*)result = bb_strtoul(arg, NULL, 10);
+ *(unsigned long*)result = bb_strtoul(arg, NULL, 0);
}
static void conv_strtol(char *arg, void *result)
{
- *(long*)result = bb_strtol(arg, NULL, 10);
+ *(long*)result = bb_strtol(arg, NULL, 0);
}
static void conv_strtod(char *arg, void *result)
{

View file

@ -1,19 +1,19 @@
Copyright (C) 2006 OpenWrt.org
Index: busybox-1.4.2/networking/httpd.c
Index: busybox-1.7.2/networking/httpd.c
===================================================================
--- busybox-1.4.2.orig/networking/httpd.c 2007-06-04 13:21:32.190083032 +0200
+++ busybox-1.4.2/networking/httpd.c 2007-06-04 13:21:34.401746808 +0200
@@ -1402,12 +1402,26 @@
--- busybox-1.7.2.orig/networking/httpd.c 2007-09-30 01:54:12.000000000 +0200
+++ busybox-1.7.2/networking/httpd.c 2007-10-04 14:59:20.287304836 +0200
@@ -1527,12 +1527,26 @@
if (ENABLE_FEATURE_HTTPD_AUTH_MD5) {
char *cipher;
char *pp;
+ char *ppnew = NULL;
+ struct passwd *pwd = NULL;
if (strncmp(p, request, u-request) != 0) {
/* user uncompared */
if (strncmp(p, request, u - request) != 0) {
/* user doesn't match */
continue;
}
pp = strchr(p, ':');
@ -29,10 +29,10 @@ Index: busybox-1.4.2/networking/httpd.c
+ strcpy(ppnew + 1, pwd->pw_passwd);
+ pp = ppnew;
+ }
if (pp && pp[1] == '$' && pp[2] == '1' &&
pp[3] == '$' && pp[4]) {
pp++;
@@ -1417,6 +1431,10 @@
if (pp && pp[1] == '$' && pp[2] == '1'
&& pp[3] == '$' && pp[4]
) {
@@ -1543,6 +1557,10 @@
/* unauthorized */
continue;
}

View file

@ -1,29 +0,0 @@
Index: busybox-1.4.2/networking/httpd.c
===================================================================
--- busybox-1.4.2.orig/networking/httpd.c 2007-06-04 13:21:34.401746808 +0200
+++ busybox-1.4.2/networking/httpd.c 2007-06-04 13:21:34.588718384 +0200
@@ -137,6 +137,7 @@
const char *query;
USE_FEATURE_HTTPD_CGI(char *referer;)
+ USE_FEATURE_HTTPD_CGI(char *user_agent;)
const char *configFile;
@@ -1066,6 +1067,7 @@
if (cp) *cp = '\0'; /* delete :PORT */
setenv1("REMOTE_ADDR", p);
}
+ setenv1("HTTP_USER_AGENT", config->user_agent);
#if ENABLE_FEATURE_HTTPD_SET_REMOTE_PORT_TO_ENV
setenv_long("REMOTE_PORT", config->port);
#endif
@@ -1647,6 +1649,8 @@
content_type = strdup(skip_whitespace(buf + sizeof("Content-Type:")-1));
} else if ((STRNCASECMP(buf, "Referer:") == 0)) {
config->referer = strdup(skip_whitespace(buf + sizeof("Referer:")-1));
+ } else if ((STRNCASECMP(buf, "User-Agent:") == 0)) {
+ config->user_agent = strdup(skip_whitespace(buf + sizeof("User-Agent:")-1));
}
#endif

View file

@ -1,69 +1,76 @@
Index: busybox-1.4.2/include/usage.h
Index: busybox-1.7.2/include/usage.h
===================================================================
--- busybox-1.4.2.orig/include/usage.h 2007-06-04 13:21:32.103096256 +0200
+++ busybox-1.4.2/include/usage.h 2007-06-04 13:21:35.005655000 +0200
@@ -1257,7 +1257,8 @@
USE_FEATURE_HTTPD_BASIC_AUTH(" [-r <realm>]") \
--- busybox-1.7.2.orig/include/usage.h 2007-10-04 17:12:35.230910708 +0200
+++ busybox-1.7.2/include/usage.h 2007-10-04 17:32:12.994027602 +0200
@@ -1350,7 +1350,8 @@
USE_FEATURE_HTTPD_BASIC_AUTH(" [-r realm]") \
USE_FEATURE_HTTPD_AUTH_MD5(" [-m pass]") \
" [-h home]" \
- " [-d/-e <string>]"
+ " [-d/-e <string>]" \
- " [-d/-e string]"
+ " [-d/-e string]" \
+ " [-R <path> [-H <host>]]"
#define httpd_full_usage \
"Listen for incoming http server requests" \
"\n\nOptions:\n" \
@@ -1273,7 +1274,9 @@
" -m PASS Crypt PASS with md5 algorithm\n") \
" -h HOME Specifies http HOME directory (default ./)\n" \
" -e STRING HTML encode STRING\n" \
- " -d STRING URL decode STRING"
+ " -d STRING URL decode STRING\n" \
+ " -R PATH Redirect target path\n" \
+ " -H HOST Redirect target host"
"Listen for incoming HTTP requests" \
"\n\nOptions:" \
@@ -1368,6 +1369,8 @@
"\n -h HOME Home directory (default .)" \
"\n -e STRING HTML encode STRING" \
"\n -d STRING URL decode STRING" \
+ "\n -R PATH Redirect target path" \
+ "\n -H HOST Redirect target host" \
#define hwclock_trivial_usage \
"[-r|--show] [-s|--hctosys] [-w|--systohc] [-l|--localtime] [-u|--utc]"
Index: busybox-1.4.2/networking/httpd.c
"[-r|--show] [-s|--hctosys] [-w|--systohc]" \
Index: busybox-1.7.2/networking/httpd.c
===================================================================
--- busybox-1.4.2.orig/networking/httpd.c 2007-06-04 13:21:34.588718384 +0200
+++ busybox-1.4.2/networking/httpd.c 2007-06-04 13:21:35.006654848 +0200
@@ -140,6 +140,8 @@
USE_FEATURE_HTTPD_CGI(char *user_agent;)
--- busybox-1.7.2.orig/networking/httpd.c 2007-10-04 17:13:12.509035065 +0200
+++ busybox-1.7.2/networking/httpd.c 2007-10-04 17:32:33.711208213 +0200
@@ -230,6 +230,8 @@
const char *configFile;
+ const char *redirectPath;
+ const char *redirectHost;
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 */
unsigned int rmt_ip;
#if ENABLE_FEATURE_HTTPD_CGI || DEBUG
@@ -880,8 +882,11 @@
USE_FEATURE_HTTPD_BASIC_AUTH(const char *g_realm;)
@@ -264,6 +266,8 @@
#define home_httpd (G.home_httpd )
#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 ContentLength (G.ContentLength )
#define last_mod (G.last_mod )
#define ip_a_d (G.ip_a_d )
@@ -901,8 +905,11 @@
}
#endif
if (responseNum == HTTP_MOVED_TEMPORARILY) {
- len += sprintf(buf+len, "Location: %s/%s%s\r\n",
+ len += sprintf(buf+len, "Location: %s%s%s%s%s%s\r\n",
+ (config->redirectHost ? "http://" : ""),
+ (config->redirectHost ? config->redirectHost : ""),
config->found_moved_temporarily,
+ (config->redirectHost ? "" : "/"),
(config->query ? "?" : ""),
(config->query ? config->query : ""));
- 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 : ""));
}
@@ -1594,8 +1599,12 @@
*++purl = '\0'; /* so keep last character */
test = purl; /* end ptr */
@@ -1730,8 +1737,12 @@
*++urlp = '\0'; /* so keep last character */
tptr = urlp; /* end ptr */
+ /* redirect active */
+ if (config->redirectPath && (strncmp(url, config->redirectPath, strlen(config->redirectPath)) != 0))
+ config->found_moved_temporarily = config->redirectPath;
+ /* redirect active */
+ if (redirect_path && (strncmp(urlcopy, redirect_path, strlen(redirect_path)) != 0))
+ found_moved_temporarily = redirect_path;
+
/* If URL is directory, adding '/' */
- if (test[-1] != '/') {
+ if(!config->redirectPath && (test[-1] != '/')) {
if (is_directory(url + 1, 1, &sb)) {
config->found_moved_temporarily = url;
}
@@ -1897,7 +1906,9 @@
/* If URL is a directory, add '/' */
- if (tptr[-1] != '/') {
+ if (!redirect_path && (tptr[-1] != '/')) {
if (is_directory(urlcopy + 1, 1, &sb)) {
found_moved_temporarily = urlcopy;
}
@@ -2004,7 +2015,9 @@
#endif
enum {
@ -74,20 +81,18 @@ Index: busybox-1.4.2/networking/httpd.c
d_opt_decode_url,
h_opt_home_httpd,
USE_FEATURE_HTTPD_ENCODE_URL_STR(e_opt_encode_url,)
@@ -1919,7 +1930,7 @@
OPT_FOREGROUND = 1 << p_opt_foreground,
};
-static const char httpd_opts[] = "c:d:h:"
+static const char httpd_opts[] = "R:H:c:d:h:"
USE_FEATURE_HTTPD_ENCODE_URL_STR("e:")
USE_FEATURE_HTTPD_BASIC_AUTH("r:")
USE_FEATURE_HTTPD_AUTH_MD5("m:")
@@ -1951,6 +1962,7 @@
config->ContentLength = -1;
opt = getopt32(argc, argv, httpd_opts,
+ &(config->redirectPath), &(config->redirectHost),
&(config->configFile), &url_for_decode, &home_httpd
@@ -2053,12 +2066,13 @@
/* We do not "absolutize" path given by -h (home) opt.
* If user gives relative path in -h, $SCRIPT_FILENAME can end up
* relative too. */
- opt = getopt32(argv, "c:d:h:"
+ opt = getopt32(argv, "R:H:c:d:h:"
USE_FEATURE_HTTPD_ENCODE_URL_STR("e:")
USE_FEATURE_HTTPD_BASIC_AUTH("r:")
USE_FEATURE_HTTPD_AUTH_MD5("m:")
USE_FEATURE_HTTPD_SETUID("u:")
"p:ifv",
+ &redirect_path, &redirect_host,
&configFile, &url_for_decode, &home_httpd
USE_FEATURE_HTTPD_ENCODE_URL_STR(, &url_for_encode)
USE_FEATURE_HTTPD_BASIC_AUTH(, &(config->realm))
USE_FEATURE_HTTPD_BASIC_AUTH(, &g_realm)

View file

@ -0,0 +1,72 @@
Index: busybox-1.7.2/editors/awk.c
===================================================================
--- busybox-1.7.2.orig/editors/awk.c 2007-10-04 19:57:46.859742242 +0200
+++ busybox-1.7.2/editors/awk.c 2007-10-05 02:20:02.910793305 +0200
@@ -2757,6 +2757,7 @@
{
unsigned opt;
char *opt_F, *opt_W;
+ llist_t *opt_f = NULL;
llist_t *opt_v = NULL;
int i, j, flen;
var *v;
@@ -2816,8 +2817,8 @@
*s1 = '=';
}
}
- opt_complementary = "v::";
- opt = getopt32(argv, "F:v:f:W:", &opt_F, &opt_v, &g_progname, &opt_W);
+ opt_complementary = "v::f::";
+ opt = getopt32(argv, "F:v:f:W:", &opt_F, &opt_v, &opt_f, &opt_W);
argv += optind;
argc -= optind;
if (opt & 0x1)
@@ -2826,25 +2827,31 @@
if (!is_assignment(llist_pop(&opt_v)))
bb_show_usage();
}
- if (opt & 0x4) { // -f
- char *s = s; /* die, gcc, die */
- FILE *from_file = afopen(g_progname, "r");
- /* one byte is reserved for some trick in next_token */
- if (fseek(from_file, 0, SEEK_END) == 0) {
- flen = ftell(from_file);
- s = xmalloc(flen + 4);
- fseek(from_file, 0, SEEK_SET);
- i = 1 + fread(s + 1, 1, flen, from_file);
- } else {
- for (i = j = 1; j > 0; i += j) {
- s = xrealloc(s, i + 4096);
- j = fread(s + i, 1, 4094, from_file);
+ if (opt_f != NULL) { // -f
+ while (opt_f != NULL) {
+ char *s = NULL;
+ FILE *from_file;
+
+ g_progname = opt_f->data;
+ from_file = afopen(g_progname, "r");
+ /* one byte is reserved for some trick in next_token */
+ if (fseek(from_file, 0, SEEK_END) == 0) {
+ flen = ftell(from_file);
+ s = xmalloc(flen + 4);
+ fseek(from_file, 0, SEEK_SET);
+ i = 1 + fread(s + 1, 1, flen, from_file);
+ } else {
+ for (i = j = 1; j > 0; i += j) {
+ s = xrealloc(s, i + 4096);
+ j = fread(s + i, 1, 4094, from_file);
+ }
}
+ s[i] = '\0';
+ fclose(from_file);
+ parse_program(s + 1);
+ free(s);
+ opt_f = opt_f->link;
}
- s[i] = '\0';
- fclose(from_file);
- parse_program(s + 1);
- free(s);
} else { // no -f: take program from 1st parameter
if (!argc)
bb_show_usage();

View file

@ -1,103 +0,0 @@
Index: busybox-1.4.2/editors/awk.c
===================================================================
--- busybox-1.4.2.orig/editors/awk.c 2007-06-15 23:43:26.460690280 +0200
+++ busybox-1.4.2/editors/awk.c 2007-06-15 23:45:26.283474448 +0200
@@ -2639,14 +2639,13 @@
int awk_main(int argc, char **argv)
{
- unsigned opt;
- char *opt_F, *opt_v, *opt_W;
int i, j, flen;
var *v;
var tv;
char **envp;
char *vnames = (char *)vNames; /* cheat */
char *vvalues = (char *)vValues;
+ int c;
/* Undo busybox.c, or else strtod may eat ','! This breaks parsing:
* $1,$2 == '$1,' '$2', NOT '$1' ',' '$2' */
@@ -2694,40 +2693,56 @@
free(s);
}
- opt = getopt32(argc, argv, "F:v:f:W:", &opt_F, &opt_v, &programname, &opt_W);
- argv += optind;
- argc -= optind;
- if (opt & 0x1) setvar_s(V[FS], opt_F); // -F
- if (opt & 0x2) if (!is_assignment(opt_v)) bb_show_usage(); // -v
- if (opt & 0x4) { // -f
- char *s = s; /* die, gcc, die */
- FILE *from_file = afopen(programname, "r");
- /* one byte is reserved for some trick in next_token */
- if (fseek(from_file, 0, SEEK_END) == 0) {
- flen = ftell(from_file);
- s = xmalloc(flen + 4);
- fseek(from_file, 0, SEEK_SET);
- i = 1 + fread(s + 1, 1, flen, from_file);
- } else {
- for (i = j = 1; j > 0; i += j) {
- s = xrealloc(s, i + 4096);
- j = fread(s + i, 1, 4094, from_file);
+ programname = NULL;
+ while((c = getopt(argc, argv, "F:v:f:W:")) != EOF) {
+ switch (c) {
+ case 'F':
+ setvar_s(V[FS], optarg);
+ break;
+ case 'v':
+ if (! is_assignment(optarg))
+ bb_show_usage();
+ break;
+ case 'f': {
+ FILE *F = afopen(programname = optarg, "r");
+ char *s = NULL;
+ /* one byte is reserved for some trick in next_token */
+ if (fseek(F, 0, SEEK_END) == 0) {
+ flen = ftell(F);
+ s = (char *)xmalloc(flen+4);
+ fseek(F, 0, SEEK_SET);
+ i = 1 + fread(s+1, 1, flen, F);
+ } else {
+ for (i=j=1; j>0; i+=j) {
+ s = (char *)xrealloc(s, i+4096);
+ j = fread(s+i, 1, 4094, F);
+ }
+ }
+ s[i] = '\0';
+ fclose(F);
+ parse_program(s+1);
+ free(s);
+ break;
}
+ case 'W':
+ bb_error_msg("Warning: unrecognized option '-W %s' ignored\n", optarg);
+ break;
+
+ default:
+ bb_show_usage();
}
- s[i] = '\0';
- fclose(from_file);
- parse_program(s + 1);
- free(s);
- } else { // no -f: take program from 1st parameter
+ }
+ argc -= optind;
+ argv += optind;
+
+ if (!programname) {
if (!argc)
bb_show_usage();
programname = "cmd. line";
parse_program(*argv++);
argc--;
}
- if (opt & 0x8) // -W
- bb_error_msg("warning: unrecognized option '-W %s' ignored", opt_W);
-
+
/* fill in ARGV array */
setvar_i(V[ARGC], argc + 1);
setari_u(V[ARGV], 0, "awk");

View file

@ -1,8 +1,8 @@
Index: busybox-1.4.2/include/platform.h
Index: busybox-1.7.2/include/platform.h
===================================================================
--- busybox-1.4.2.orig/include/platform.h 2007-06-04 13:21:32.055103552 +0200
+++ busybox-1.4.2/include/platform.h 2007-06-04 13:21:35.387596936 +0200
@@ -128,9 +128,11 @@
--- busybox-1.7.2.orig/include/platform.h 2007-09-03 13:48:46.000000000 +0200
+++ busybox-1.7.2/include/platform.h 2007-10-04 15:20:58.301274440 +0200
@@ -137,9 +137,11 @@
# include <netinet/in.h>
#endif
@ -14,30 +14,20 @@ Index: busybox-1.4.2/include/platform.h
/* ---- Compiler dependent settings ------------------------- */
#if (defined __digital__ && defined __unix__)
@@ -161,7 +163,7 @@
@@ -179,7 +181,7 @@
#define HAVE_STDINT_H
#else
/* Largest integral types. */
-#if __BIG_ENDIAN__
+#if __BIG_ENDIAN__ && !__APPLE__
typedef long int intmax_t;
typedef unsigned long int uintmax_t;
typedef long intmax_t;
typedef unsigned long uintmax_t;
#else
Index: busybox-1.4.2/include/libbb.h
Index: busybox-1.7.2/include/libbb.h
===================================================================
--- busybox-1.4.2.orig/include/libbb.h 2007-06-04 13:21:32.062102488 +0200
+++ busybox-1.4.2/include/libbb.h 2007-06-04 13:21:35.388596784 +0200
@@ -17,7 +17,9 @@
#include <errno.h>
#include <fcntl.h>
#include <inttypes.h>
+#ifndef __APPLE__
#include <malloc.h>
+#endif
#include <netdb.h>
#include <setjmp.h>
#include <signal.h>
@@ -30,7 +32,9 @@
--- busybox-1.7.2.orig/include/libbb.h 2007-09-16 20:48:10.000000000 +0200
+++ busybox-1.7.2/include/libbb.h 2007-10-04 15:20:22.275221430 +0200
@@ -31,7 +31,9 @@
#include <sys/mman.h>
#include <sys/socket.h>
#include <sys/stat.h>

View file

@ -1,26 +1,18 @@
Index: busybox-1.4.2/networking/httpd.c
Index: busybox-1.7.2/networking/httpd.c
===================================================================
--- busybox-1.4.2.orig/networking/httpd.c 2007-06-04 13:21:35.006654848 +0200
+++ busybox-1.4.2/networking/httpd.c 2007-06-04 13:21:35.585566840 +0200
@@ -1231,7 +1231,7 @@
* "chopped up into small chunks" syndrome here */
rbuf[count] = '\0';
/* check to see if the user script added headers */
-#define HTTP_200 "HTTP/1.0 200 OK\r\n\r\n"
+#define HTTP_200 "HTTP/1.0 200 OK\r\n"
if (memcmp(rbuf, HTTP_200, 4) != 0) {
/* there is no "HTTP", do it ourself */
full_write(s, HTTP_200, sizeof(HTTP_200)-1);
@@ -1242,9 +1242,9 @@
* echo -en "Location: http://www.busybox.net\r\n"
* echo -en "\r\n"
*/
- //if (!strstr(rbuf, "ontent-")) {
- // full_write(s, "Content-type: text/plain\r\n\r\n", 28);
- //}
+ if (!strstr(rbuf, "ontent-")) {
+ full_write(s, "Content-type: text/plain\r\n\r\n", 28);
+ }
firstLine = 0;
}
if (full_write(s, rbuf, count) != count)
--- busybox-1.7.2.orig/networking/httpd.c 2007-10-04 15:06:51.993046080 +0200
+++ busybox-1.7.2/networking/httpd.c 2007-10-04 15:25:10.815664410 +0200
@@ -1314,10 +1314,10 @@
if (full_write(1, HTTP_200, sizeof(HTTP_200)-1) != sizeof(HTTP_200)-1)
break;
}
- /* Commented out:
- if (!strstr(rbuf, "ontent-")) {
- full_write(s, "Content-type: text/plain\r\n\r\n", 28);
+ if (!strstr(rbuf, "ontent-") && !strstr(rbuf, "ocation:")) {
+ full_write(1, "Content-type: text/plain\r\n\r\n", 28);
}
+ /* Previously commented out:
* Counter-example of valid CGI without Content-type:
* echo -en "HTTP/1.0 302 Found\r\n"
* echo -en "Location: http://www.busybox.net\r\n"

View file

@ -1,18 +0,0 @@
Index: busybox-1.4.2/networking/httpd.c
===================================================================
--- busybox-1.4.2.orig/networking/httpd.c 2007-06-04 13:21:35.585566840 +0200
+++ busybox-1.4.2/networking/httpd.c 2007-06-04 13:21:35.775537960 +0200
@@ -1218,9 +1218,10 @@
#if PIPESIZE >= MAX_MEMORY_BUFF
# error "PIPESIZE >= MAX_MEMORY_BUFF"
#endif
- /* NB: was safe_read. If it *has to be* safe_read, */
- /* please explain why in this comment... */
- count = full_read(inFd, rbuf, PIPESIZE);
+ /* reverted back to safe_read, otherwise httpd may block if the */
+ /* cgi-script outputs page date before it has fully received all */
+ /* (eg POST) data */
+ count = safe_read(inFd, rbuf, PIPESIZE);
if (count == 0)
break; /* closed */
if (count < 0)

View file

@ -1,29 +1,12 @@
Index: busybox-1.4.2/networking/httpd.c
Index: busybox-1.7.2/networking/httpd.c
===================================================================
--- busybox-1.4.2.orig/networking/httpd.c 2007-06-04 13:21:35.775537960 +0200
+++ busybox-1.4.2/networking/httpd.c 2007-06-04 13:21:36.144481872 +0200
@@ -102,6 +102,7 @@
static const char default_path_httpd_conf[] = "/etc";
static const char httpd_conf[] = "httpd.conf";
static const char home[] = "./";
+static const char *home_httpd = home;
#define TIMEOUT 60
@@ -1505,6 +1506,8 @@
--- busybox-1.7.2.orig/networking/httpd.c 2007-10-04 15:25:10.815664410 +0200
+++ busybox-1.7.2/networking/httpd.c 2007-10-04 15:31:22.936870392 +0200
@@ -1616,6 +1616,7 @@
#if ENABLE_FEATURE_HTTPD_BASIC_AUTH
int credentials = -1; /* if not required this is Ok */
#endif
+
+ xchdir(home_httpd);
sa.sa_handler = handle_sigalrm;
sigemptyset(&sa.sa_mask);
@@ -1942,7 +1945,6 @@
int httpd_main(int argc, char *argv[])
{
unsigned opt;
- const char *home_httpd = home;
char *url_for_decode;
USE_FEATURE_HTTPD_ENCODE_URL_STR(const char *url_for_encode;)
const char *s_port;
/* Allocation of iobuf is postponed until now
* (IOW, server process doesn't need to waste 8k) */

View file

@ -1,12 +0,0 @@
Index: busybox-1.4.2/applets/usage_compressed
===================================================================
--- busybox-1.4.2.orig/applets/usage_compressed 2007-06-04 13:21:31.952119208 +0200
+++ busybox-1.4.2/applets/usage_compressed 2007-06-04 13:21:36.331453448 +0200
@@ -14,6 +14,6 @@
echo 'static const char packed_usage[] = '
"$loc/usage" | bzip2 -1 | od -v -t x1 \
-| $SED -e 's/^[^ ]*//' -e 's/ \(..\)/\\x\1/g' -e 's/^\(.*\)$/"\1"/'
+| $SED -e 's/^[^ ]*//' -e 's/ \([a-f0-9][a-f0-9]\)/\\x\1/g' -e 's/^\(.*\)$/"\1"/'
echo ';'
echo '#define SIZEOF_usage_messages' `expr 0 + $sz`

View file

@ -1,33 +0,0 @@
Index: busybox-1.4.2/networking/ping.c
===================================================================
--- busybox-1.4.2.orig/networking/ping.c 2007-06-04 13:21:31.931122400 +0200
+++ busybox-1.4.2/networking/ping.c 2007-06-04 13:21:36.518425024 +0200
@@ -70,7 +70,7 @@
struct sockaddr_in pingaddr;
struct icmp *pkt;
int pingsock, c;
- char packet[DEFDATALEN + MAXIPLEN + MAXICMPLEN];
+ char packet[datalen + ICMP_MINLEN + MAXIPLEN + MAXICMPLEN];
pingsock = create_icmp_socket();
@@ -86,7 +86,7 @@
pkt->icmp_type = ICMP_ECHO;
pkt->icmp_cksum = in_cksum((unsigned short *) pkt, sizeof(packet));
- c = sendto(pingsock, packet, DEFDATALEN + ICMP_MINLEN, 0,
+ c = sendto(pingsock, packet, datalen + ICMP_MINLEN, 0,
(struct sockaddr *) &pingaddr, sizeof(struct sockaddr_in));
if (c < 0) {
@@ -274,6 +274,10 @@
++nreceived;
tp = (struct timeval *) icmppkt->icmp_data;
+ /* If packet is too short, results will be truncated */
+ if (sz < (ICMP_MINLEN + sizeof(tv.tv_sec) + sizeof(tv.tv_usec)))
+ return;
+
if ((tv.tv_usec -= tp->tv_usec) < 0) {
--tv.tv_sec;
tv.tv_usec += 1000000;

View file

@ -0,0 +1,12 @@
Index: busybox-1.7.2/applets/usage_compressed
===================================================================
--- busybox-1.7.2.orig/applets/usage_compressed 2007-09-03 13:48:55.000000000 +0200
+++ busybox-1.7.2/applets/usage_compressed 2007-10-04 15:32:54.578092727 +0200
@@ -14,6 +14,6 @@
echo 'static const char packed_usage[] ALIGN1 = '
"$loc/usage" | bzip2 -1 | od -v -t x1 \
-| $SED -e 's/^[^ ]*//' -e 's/ *\(..\)/\\x\1/g' -e 's/^\(.*\)$/"\1"/'
+| $SED -e 's/^[^ ]*//' -e 's/ *\([a-f0-9][a-f0-9]\)/\\x\1/g' -e 's/^\(.*\)$/"\1"/'
echo ';'
echo '#define SIZEOF_usage_messages' `expr 0 + $sz`

View file

@ -1,15 +0,0 @@
Index: busybox-1.4.2/networking/httpd.c
===================================================================
--- busybox-1.4.2.orig/networking/httpd.c 2007-06-21 18:12:06.791080496 +0200
+++ busybox-1.4.2/networking/httpd.c 2007-06-21 18:14:48.914434000 +0200
@@ -1715,8 +1715,8 @@
test = url + 1; /* skip first '/' */
#if ENABLE_FEATURE_HTTPD_CGI
- if (strncmp(test, "cgi-bin", 7) == 0) {
- if (test[7] == '/' && test[8] == 0)
+ if (strncmp(test, "cgi-bin/", 8) == 0) {
+ if (test[8] == 0)
goto FORBIDDEN; /* protect listing cgi-bin/ */
sendCgi(url, prequest, length, cookie, content_type);
break;

View file

@ -0,0 +1,40 @@
Index: busybox-1.7.2/networking/ping.c
===================================================================
--- busybox-1.7.2.orig/networking/ping.c 2007-09-03 13:48:27.000000000 +0200
+++ busybox-1.7.2/networking/ping.c 2007-10-04 15:38:15.424376713 +0200
@@ -91,7 +91,7 @@
struct sockaddr_in pingaddr;
struct icmp *pkt;
int pingsock, c;
- char packet[DEFDATALEN + MAXIPLEN + MAXICMPLEN];
+ char packet[datalen + ICMP_MINLEN + MAXIPLEN + MAXICMPLEN];
pingsock = create_icmp_socket();
pingaddr = lsa->sin;
@@ -101,7 +101,7 @@
pkt->icmp_type = ICMP_ECHO;
pkt->icmp_cksum = in_cksum((unsigned short *) pkt, sizeof(packet));
- c = xsendto(pingsock, packet, DEFDATALEN + ICMP_MINLEN,
+ c = xsendto(pingsock, packet, datalen + ICMP_MINLEN,
(struct sockaddr *) &pingaddr, sizeof(pingaddr));
/* listen for replies */
@@ -135,7 +135,7 @@
struct icmp6_hdr *pkt;
int pingsock, c;
int sockopt;
- char packet[DEFDATALEN + MAXIPLEN + MAXICMPLEN];
+ char packet[datalen + ICMP_MINLEN + MAXIPLEN + MAXICMPLEN];
pingsock = create_icmp6_socket();
pingaddr = lsa->sin6;
@@ -147,7 +147,7 @@
sockopt = offsetof(struct icmp6_hdr, icmp6_cksum);
setsockopt(pingsock, SOL_RAW, IPV6_CHECKSUM, &sockopt, sizeof(sockopt));
- c = xsendto(pingsock, packet, DEFDATALEN + sizeof (struct icmp6_hdr),
+ c = xsendto(pingsock, packet, datalen + sizeof (struct icmp6_hdr),
(struct sockaddr *) &pingaddr, sizeof(pingaddr));
/* listen for replies */

View file

@ -0,0 +1,488 @@
Index: busybox-1.7.2/modutils/insmod.c
===================================================================
--- busybox-1.7.2.orig/modutils/insmod.c 2007-09-03 13:48:35.000000000 +0200
+++ busybox-1.7.2/modutils/insmod.c 2007-10-05 01:43:47.686834357 +0200
@@ -61,19 +61,107 @@
#include "libbb.h"
#include <libgen.h>
#include <sys/utsname.h>
+#if ENABLE_FEATURE_2_6_MODULES
+#include <sys/mman.h>
+#include <asm/unistd.h>
+#include <sys/syscall.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
-#if !ENABLE_FEATURE_2_4_MODULES
-#define insmod_ng_main insmod_main
+#if ENABLE_FEATURE_2_4_MODULES
+int insmod_main_24(int argc, char **argv);
#endif
-
#if ENABLE_FEATURE_2_6_MODULES
-extern int insmod_ng_main( int argc, char **argv);
+int insmod_main_26(int argc, char **argv);
#endif
+int insmod_main(int argc, char **argv);
+
+static char *g_filename = NULL;
+#define _PATH_MODULES "/lib/modules"
+
+static int check_module_name_match(const char *filename, struct stat *statbuf,
+ void *userdata, int depth)
+{
+ char *fullname = (char *) userdata;
+
+ if (fullname[0] == '\0')
+ return FALSE;
+ else {
+ char *tmp, *tmp1 = xstrdup(filename);
+ tmp = bb_get_last_path_component(tmp1);
+ if (strcmp(tmp, fullname) == 0) {
+ free(tmp1);
+ /* Stop searching if we find a match */
+ g_filename = xstrdup(filename);
+ return FALSE;
+ }
+ free(tmp1);
+ }
+ return TRUE;
+}
+
+static int find_module(char *filename)
+{
+ char *module_dir, real_module_dir[FILENAME_MAX];
+ int len, slen, ret = ENOENT, k_version;
+ struct utsname myuname;
+ const char *suffix;
+ struct stat st;
+
+ /* check the kernel version */
+ if ((uname(&myuname) != 0) || (myuname.release[0] != '2'))
+ return EINVAL;
+
+ k_version = myuname.release[2] - '0';
+#if ENABLE_FEATURE_2_4_MODULES
+ if (k_version <= 4)
+ suffix = ".o";
+ else
+#endif
+ suffix = ".ko";
+
+ len = strlen(filename);
+ slen = strlen(suffix);
+
+ /* check for suffix and absolute path first */
+ if ((len < slen + 2) || (strcmp(filename + len - slen, suffix) != 0)) {
+ filename = xasprintf("%s%s", filename, suffix);
+ } else {
+ filename = strdup(filename);
+ if ((stat(filename, &st) == 0) && S_ISREG(st.st_mode))
+ return 0;
+ }
+
+ /* next: scan /lib/modules/<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 = concat_path_file(_PATH_MODULES, myuname.release);
+ if (realpath(module_dir, real_module_dir) != NULL) {
+ free(module_dir);
+ module_dir = real_module_dir;
+ }
+
+ recursive_action(module_dir, ACTION_RECURSE,
+ check_module_name_match, 0, filename, 0);
+
+ /* Check if we have a complete path */
+ if (g_filename != NULL) {
+ if ((stat(g_filename, &st) == 0) && S_ISREG(st.st_mode))
+ ret = 0;
+ else
+ free(g_filename);
+ }
+ free(filename);
+
+ return ret;
+}
#if ENABLE_FEATURE_2_4_MODULES
@@ -677,7 +765,6 @@
#endif
-#define _PATH_MODULES "/lib/modules"
enum { STRVERSIONLEN = 64 };
/*======================================================================*/
@@ -790,37 +877,6 @@
static int n_ext_modules_used;
extern int delete_module(const char *);
-static char *m_filename;
-static char *m_fullName;
-
-
-/*======================================================================*/
-
-
-static int check_module_name_match(const char *filename, struct stat *statbuf,
- void *userdata, int depth)
-{
- char *fullname = (char *) userdata;
-
- if (fullname[0] == '\0')
- return FALSE;
- else {
- char *tmp, *tmp1 = xstrdup(filename);
- tmp = bb_get_last_path_component(tmp1);
- if (strcmp(tmp, fullname) == 0) {
- free(tmp1);
- /* Stop searching if we find a match */
- m_filename = xstrdup(filename);
- return FALSE;
- }
- free(tmp1);
- }
- return TRUE;
-}
-
-
-/*======================================================================*/
-
static struct obj_file *arch_new_file(void)
{
struct arch_file *f;
@@ -3952,33 +4008,35 @@
void print_load_map(struct obj_file *f);
#endif
-int insmod_main( int argc, char **argv);
-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 = 0;
- int exit_status = EXIT_FAILURE;
+ 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 = 0;
-#else
- FILE *fp;
-#endif
- int k_version = 0;
+ FILE *fp = NULL;
+ 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];
@@ -3987,110 +4045,18 @@
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);
- if (!m_name) {
- m_name = tmp;
- } else {
- free(tmp1);
- tmp1 = 0; /* flag for free(m_name) before exit() */
- }
-
- /* Get a filedesc for the module. Check we we have a complete path */
- if (stat(arg1, &st) < 0 || !S_ISREG(st.st_mode)
- || (fp = fopen(arg1, "r")) == 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;
- char real_module_dir[FILENAME_MAX];
-
- tmdn = concat_path_file(_PATH_MODULES, 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... */
- if (realpath(tmdn, real_module_dir) == NULL)
- module_dir = tmdn;
- else
- module_dir = real_module_dir;
- recursive_action(module_dir, ACTION_RECURSE,
- check_module_name_match, 0, m_fullName, 0);
- free(tmdn);
- }
-
- /* Check if we have found anything yet */
- if (m_filename == 0 || ((fp = fopen(m_filename, "r")) == NULL)) {
- char module_dir[FILENAME_MAX];
-
- free(m_filename);
- m_filename = 0;
- if (realpath (_PATH_MODULES, module_dir) == NULL)
- strcpy(module_dir, _PATH_MODULES);
- /* No module found under /lib/modules/`uname -r`, this
- * time cast the net a bit wider. Search /lib/modules/ */
- if (!recursive_action(module_dir, ACTION_RECURSE,
- check_module_name_match, 0, m_fullName, 0)
- ) {
- if (m_filename == 0
- || ((fp = fopen(m_filename, "r")) == NULL)
- ) {
- bb_error_msg("%s: no module by that name found", m_fullName);
- goto out;
- }
- } else
- bb_error_msg_and_die("%s: no module by that name found", m_fullName);
- }
- } else
- m_filename = xstrdup(arg1);
-
- if (flag_verbose)
- printf("Using %s\n", m_filename);
+ ret = find_module(arg1);
+ if (ret)
+ goto out;
-#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(g_filename, "r");
+ if (!fp) {
+ ret = errno;
+ goto out;
}
-#endif
f = obj_load(fp, LOADBITS);
if (f == NULL)
@@ -4120,7 +4086,7 @@
"\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;
}
@@ -4173,7 +4139,7 @@
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);
@@ -4220,8 +4186,7 @@
if (flag_print_load_map)
print_load_map(f);
- exit_status = EXIT_SUCCESS;
-
+ ret = 0;
out:
#if ENABLE_FEATURE_CLEAN_UP
if (fp)
@@ -4229,21 +4194,13 @@
free(tmp1);
if (!tmp1)
free(m_name);
- free(m_filename);
+ free(g_filename);
#endif
return exit_status;
}
-
-
#endif
-
#if ENABLE_FEATURE_2_6_MODULES
-
-#include <sys/mman.h>
-#include <asm/unistd.h>
-#include <sys/syscall.h>
-
/* We use error numbers in a loose translation... */
static const char *moderror(int err)
{
@@ -4261,19 +4218,33 @@
}
}
-int insmod_ng_main(int argc, char **argv);
-int insmod_ng_main(int argc, char **argv)
+int insmod_main_26(int argc, char **argv)
{
- long ret;
- 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;
if (!filename)
bb_show_usage();
+ g_filename = filename;
+ ret = find_module(filename);
+ if (ret)
+ goto done;
+
/* Rest is options */
options = xzalloc(1);
optlen = 0;
@@ -4283,36 +4254,46 @@
optlen += sprintf(options + optlen, (strchr(*argv,' ') ? "\"%s\" " : "%s "), *argv);
}
-#if 0
- /* Any special reason why mmap? It isn't performace critical... */
- 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);
- }
-
- /* 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_open_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)",
- filename, moderror(errno), ret);
+ g_filename, moderror(errno), ret);
}
+done:
+ if (g_filename && (g_filename != filename))
+ free(g_filename);
- return 0;
+ return ret;
}
#endif
+
+int insmod_main(int argc, char **argv)
+{
+ int ret;
+
+#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;
+}

View file

@ -1,10 +1,10 @@
Index: busybox-1.4.2/coreutils/md5_sha1_sum.c
Index: busybox-1.7.2/coreutils/md5_sha1_sum.c
===================================================================
--- busybox-1.4.2.orig/coreutils/md5_sha1_sum.c 2007-06-04 13:21:31.536182440 +0200
+++ busybox-1.4.2/coreutils/md5_sha1_sum.c 2007-06-04 13:21:37.709243992 +0200
@@ -8,76 +8,10 @@
--- busybox-1.7.2.orig/coreutils/md5_sha1_sum.c 2007-09-03 13:48:39.000000000 +0200
+++ busybox-1.7.2/coreutils/md5_sha1_sum.c 2007-10-04 15:45:02.423570273 +0200
@@ -8,75 +8,10 @@
#include "busybox.h"
#include "libbb.h"
-typedef enum { HASH_SHA1, HASH_MD5 } hash_algo_t;
-
@ -36,9 +36,8 @@ Index: busybox-1.4.2/coreutils/md5_sha1_sum.c
-
- src_fd = STDIN_FILENO;
- if (NOT_LONE_DASH(filename)) {
- src_fd = open(filename, O_RDONLY);
- src_fd = open_or_warn(filename, O_RDONLY);
- if (src_fd < 0) {
- bb_perror_msg("%s", filename);
- return NULL;
- }
- }
@ -76,35 +75,35 @@ Index: busybox-1.4.2/coreutils/md5_sha1_sum.c
- return hash_value;
-}
-
int md5_sha1_sum_main(int argc, char **argv);
int md5_sha1_sum_main(int argc, char **argv)
{
int return_value = EXIT_SUCCESS;
Index: busybox-1.4.2/include/libbb.h
Index: busybox-1.7.2/include/libbb.h
===================================================================
--- busybox-1.4.2.orig/include/libbb.h 2007-06-04 13:21:35.388596784 +0200
+++ busybox-1.4.2/include/libbb.h 2007-06-04 13:21:37.709243992 +0200
@@ -641,6 +641,7 @@
--- busybox-1.7.2.orig/include/libbb.h 2007-10-04 15:20:22.275221430 +0200
+++ busybox-1.7.2/include/libbb.h 2007-10-04 15:42:10.585777803 +0200
@@ -947,6 +947,7 @@
extern const char bb_uuenc_tbl_std[];
void bb_uuencode(const unsigned char *s, char *store, const int length, const char *tbl);
void bb_uuencode(char *store, const void *s, int length, const char *tbl);
+typedef enum { HASH_SHA1, HASH_MD5 } hash_algo_t;
typedef struct sha1_ctx_t {
uint32_t count[2];
uint32_t hash[5];
@@ -662,6 +663,8 @@
@@ -968,6 +969,8 @@
void md5_begin(md5_ctx_t *ctx);
void md5_hash(const void *data, size_t length, md5_ctx_t *ctx);
void *md5_end(void *resbuf, md5_ctx_t *ctx);
+unsigned char *hash_bin_to_hex(unsigned char *hash_value, unsigned hash_length);
+uint8_t *hash_file(const char *filename, hash_algo_t hash_algo);
uint32_t *crc32_filltable(int endian);
uint32_t *crc32_filltable(uint32_t *tbl256, int endian);
Index: busybox-1.4.2/libbb/Kbuild
Index: busybox-1.7.2/libbb/Kbuild
===================================================================
--- busybox-1.4.2.orig/libbb/Kbuild 2007-06-04 13:21:31.548180616 +0200
+++ busybox-1.4.2/libbb/Kbuild 2007-06-04 13:21:37.710243840 +0200
@@ -37,6 +37,7 @@
--- busybox-1.7.2.orig/libbb/Kbuild 2007-09-03 13:48:41.000000000 +0200
+++ busybox-1.7.2/libbb/Kbuild 2007-10-04 15:42:10.613779401 +0200
@@ -38,6 +38,7 @@
lib-y += get_last_path_component.o
lib-y += get_line_from_file.o
lib-y += getopt32.o
@ -112,11 +111,11 @@ Index: busybox-1.4.2/libbb/Kbuild
lib-y += herror_msg.o
lib-y += herror_msg_and_die.o
lib-y += human_readable.o
Index: busybox-1.4.2/libbb/hash.c
Index: busybox-1.7.2/libbb/hash.c
===================================================================
--- /dev/null 1970-01-01 00:00:00.000000000 +0000
+++ busybox-1.4.2/libbb/hash.c 2007-06-04 13:21:37.710243840 +0200
@@ -0,0 +1,82 @@
+++ busybox-1.7.2/libbb/hash.c 2007-10-04 15:45:08.279904000 +0200
@@ -0,0 +1,81 @@
+/*
+ * Copyright (C) 2003 Glenn L. McGrath
+ * Copyright (C) 2003-2004 Erik Andersen
@ -158,20 +157,19 @@ Index: busybox-1.4.2/libbb/hash.c
+
+ src_fd = STDIN_FILENO;
+ if (NOT_LONE_DASH(filename)) {
+ src_fd = open(filename, O_RDONLY);
+ src_fd = open_or_warn(filename, O_RDONLY);
+ if (src_fd < 0) {
+ bb_perror_msg("%s", filename);
+ return NULL;
+ }
+ }
+
+ /* figure specific hash algorithims */
+ if (hash_algo==HASH_MD5) {
+ if (ENABLE_MD5SUM && hash_algo==HASH_MD5) {
+ md5_begin(&context.md5);
+ update = (void (*)(const void*, size_t, void*))md5_hash;
+ final = (void (*)(void*, void*))md5_end;
+ hash_len = 16;
+ } else if (hash_algo==HASH_SHA1) {
+ } else if (ENABLE_SHA1SUM && hash_algo==HASH_SHA1) {
+ sha1_begin(&context.sha1);
+ update = (void (*)(const void*, size_t, void*))sha1_hash;
+ final = (void (*)(void*, void*))sha1_end;

View file

@ -1,10 +1,10 @@
Index: busybox-1.4.2/editors/awk.c
Index: busybox-1.7.2/editors/awk.c
===================================================================
--- busybox-1.4.2.orig/editors/awk.c 2007-06-04 13:21:35.202625056 +0200
+++ busybox-1.4.2/editors/awk.c 2007-06-04 13:21:37.927210856 +0200
@@ -30,6 +30,11 @@
--- busybox-1.7.2.orig/editors/awk.c 2007-10-05 01:39:50.073293533 +0200
+++ busybox-1.7.2/editors/awk.c 2007-10-05 02:16:42.539374788 +0200
@@ -33,6 +33,11 @@
/* these flags are static, don't change them when value is changed */
#define VF_DONTTOUCH (VF_ARRAY | VF_SPECIAL | VF_WALK | VF_CHILD | VF_DIRTY)
#define VF_DONTTOUCH (VF_ARRAY | VF_SPECIAL | VF_WALK | VF_CHILD | VF_DIRTY)
+#ifdef CONFIG_AWX
+#define fputs(s, stream) fputs_hook(s, stream)
@ -13,15 +13,14 @@ Index: busybox-1.4.2/editors/awk.c
+
/* Variable */
typedef struct var_s {
unsigned short type; /* flags */
@@ -50,10 +55,15 @@
char *programname;
unsigned type; /* flags */
@@ -54,9 +59,14 @@
} chain;
+typedef var *(*awk_cfunc)(var *res, var *args, int nargs);
/* Function */
+typedef var *(*awk_cfunc)(var *res, var *args, int nargs);
typedef struct func_s {
unsigned short nargs;
unsigned nargs;
- struct chain_s body;
+ enum { AWKFUNC, CFUNC } type;
+ union {
@ -31,17 +30,17 @@ Index: busybox-1.4.2/editors/awk.c
} func;
/* I/O stream */
@@ -1312,7 +1322,8 @@
@@ -1400,7 +1410,8 @@
next_token(TC_FUNCTION);
pos++;
f = newfunc(t.string);
g_pos++;
f = newfunc(t_string);
- f->body.first = NULL;
+ f->type = AWKFUNC;
+ f->x.body.first = NULL;
f->nargs = 0;
while (next_token(TC_VARIABLE | TC_SEQTERM) & TC_VARIABLE) {
v = findvar(ahash, t.string);
@@ -1321,7 +1332,7 @@
v = findvar(ahash, t_string);
@@ -1409,7 +1420,7 @@
if (next_token(TC_COMMA | TC_SEQTERM) & TC_SEQTERM)
break;
}
@ -50,33 +49,34 @@ Index: busybox-1.4.2/editors/awk.c
chain_group();
clear_array(ahash);
@@ -2260,7 +2271,8 @@
@@ -2372,7 +2383,8 @@
break;
case XC( OC_FUNC ):
- if (! op->r.f->body.first)
- if (!op->r.f->body.first)
+ if ((op->r.f->type == AWKFUNC) &&
+ !op->r.f->x.body.first)
runtime_error(EMSG_UNDEF_FUNC);
syntax_error(EMSG_UNDEF_FUNC);
X.v = R.v = nvalloc(op->r.f->nargs+1);
@@ -2277,7 +2289,11 @@
@@ -2389,7 +2401,10 @@
fnargs = X.v;
L.s = programname;
L.s = g_progname;
- res = evaluate(op->r.f->body.first, res);
+ if (op->r.f->type == AWKFUNC)
+ res = evaluate(op->r.f->x.body.first, res);
+ else if (op->r.f->type == CFUNC)
+ res = op->r.f->x.cfunc(res, fnargs, op->r.f->nargs);
+
programname = L.s;
g_progname = L.s;
nvfree(fnargs);
@@ -2637,6 +2653,11 @@
return &rsm;
@@ -2753,6 +2768,13 @@
}
int awk_main(int argc, char **argv);
+int awx_main(int argc, char **argv);
+
+#ifdef CONFIG_AWX
+static int is_awx = 0;
+#include "awx.c"
@ -84,23 +84,24 @@ Index: busybox-1.4.2/editors/awk.c
+
int awk_main(int argc, char **argv)
{
int i, j, flen;
@@ -2693,6 +2714,10 @@
free(s);
unsigned opt;
@@ -2817,6 +2839,11 @@
*s1 = '=';
}
}
+
+#ifdef CONFIG_AWX
+ do_awx(argc, argv);
+#endif
+
programname = NULL;
while((c = getopt(argc, argv, "F:v:f:W:")) != EOF) {
switch (c) {
Index: busybox-1.4.2/editors/awx.c
opt_complementary = "v::f::";
opt = getopt32(argv, "F:v:f:W:", &opt_F, &opt_v, &opt_f, &opt_W);
argv += optind;
Index: busybox-1.7.2/editors/awx.c
===================================================================
--- /dev/null 1970-01-01 00:00:00.000000000 +0000
+++ busybox-1.4.2/editors/awx.c 2007-06-04 13:21:37.928210704 +0200
@@ -0,0 +1,633 @@
+++ busybox-1.7.2/editors/awx.c 2007-10-05 02:10:16.393369582 +0200
@@ -0,0 +1,636 @@
+/*
+ * awk web extension
+ *
@ -126,7 +127,7 @@ Index: busybox-1.4.2/editors/awx.c
+static int lang_inuse = 0;
+
+/* look up a translation symbol from the hash */
+static inline char *translate_lookup(char *str)
+static inline const char *translate_lookup(char *str)
+{
+ char *name, *def, *p;
+ hash_item *hi;
@ -151,7 +152,7 @@ Index: busybox-1.4.2/editors/awx.c
+/* look for translation markers in the line and return the translated string */
+static char *translate_line(char *line)
+{
+ char *tok[MAX_TR * 3];
+ const char *tok[MAX_TR * 3];
+ char *l, *p, *p2 = NULL, *res;
+ int len = 0, _pos = 0, i, tr_abort = 0;
+ static char *backlog = NULL;
@ -283,7 +284,7 @@ Index: busybox-1.4.2/editors/awx.c
+{
+ const char *langfmt = "/usr/lib/webif/lang/%s.txt";
+ char lbuf[LINE_BUF];
+ char *lang;
+ const char *lang;
+
+ if (!lang_inuse)
+ init_lang(res, args, nargs);
@ -299,7 +300,7 @@ Index: busybox-1.4.2/editors/awx.c
+}
+
+/* read the contents of an entire file */
+static char *get_file(char *fname)
+static char *get_file(const char *fname)
+{
+ FILE *F;
+ char *s = NULL;
@ -343,8 +344,8 @@ Index: busybox-1.4.2/editors/awx.c
+
+ tv = nvalloc(1);
+ memset(&tmp, 0, sizeof(tmp));
+ pos = p;
+ t.lineno = 1;
+ g_pos = p;
+ t_lineno = 1;
+ while ((tclass = next_token(TC_EOF | TC_OPSEQ |
+ TC_OPTERM | TC_BEGIN | TC_FUNCDECL)) != TC_EOF) {
+ if (tclass & TC_OPTERM)
@ -357,13 +358,13 @@ Index: busybox-1.4.2/editors/awx.c
+ chain_group();
+ } else if (tclass & TC_FUNCDECL) {
+ next_token(TC_FUNCTION);
+ pos++;
+ f = newfunc(t.string);
+ g_pos++;
+ f = newfunc(t_string);
+ f->type = AWKFUNC;
+ f->x.body.first = NULL;
+ f->nargs = 0;
+ while (next_token(TC_VARIABLE | TC_SEQTERM) & TC_VARIABLE) {
+ v = findvar(ahash, t.string);
+ v = findvar(ahash, t_string);
+ v->x.aidx = (f->nargs)++;
+
+ if (next_token(TC_COMMA | TC_SEQTERM) & TC_SEQTERM)
@ -382,10 +383,12 @@ Index: busybox-1.4.2/editors/awx.c
+
+/* include an awk file and run its BEGIN{} section */
+static xhash *includes = NULL;
+static void include_file(char *filename)
+static void include_file(const char *filename)
+{
+ char *s;
+ var *v;
+ int oldlnr = g_lineno;
+ const char *oldprg = g_progname;
+
+ if (!includes)
+ includes = hash_init();
@ -402,13 +405,17 @@ Index: busybox-1.4.2/editors/awx.c
+ fprintf(stderr, "Could not open file.\n");
+ return;
+ }
+ g_lineno = 1;
+ g_progname = xstrdup(filename);
+ parse_include(s+1);
+ free(s);
+ g_lineno = oldlnr;
+ g_progname = oldprg;
+}
+
+static var *include(var *res, var *args, int nargs)
+{
+ char *s;
+ const char *s;
+
+ s = getvar_s(args);
+ if (s && (strlen(s) > 0))
@ -424,7 +431,7 @@ Index: busybox-1.4.2/editors/awx.c
+ node *n;
+
+ memset(&body, 0, sizeof(body));
+ pos = str;
+ g_pos = str;
+ seq = &body;
+
+ /* end of expression, assume that there's going to be a free byte
@ -456,7 +463,7 @@ Index: busybox-1.4.2/editors/awx.c
+
+ if (!e || !e->var)
+ return;
+ lineno = e->line;
+ g_lineno = e->line;
+ switch (e->t) {
+ case T_TEXT:
+ s = malloc(strlen(e->var) + 2);
@ -502,38 +509,36 @@ Index: busybox-1.4.2/editors/awx.c
+}
+
+/* awk method render(), which opens a template file and processes all awk ssi calls */
+static void render_file(char *filename)
+static void render_file(const char *filename)
+{
+ struct template_cb tcb;
+ struct template_element *e;
+ FILE *f;
+ char *oldprg;
+ int oldlnr;
+ const char *oldprg = g_progname;
+ int oldlnr = g_lineno;
+
+ if (!filename)
+ return;
+
+ oldlnr = lineno;
+ oldprg = programname;
+ programname = filename;
+
+ f = fopen(filename, "r");
+ if (!f)
+ return;
+
+ g_progname = xstrdup(filename);
+ g_lineno = 1;
+ memset(&tcb, 0, sizeof(tcb));
+ tcb.handle_element = render_element;
+ e = parse_template(&tcb, f);
+ execute_template(&tcb, e);
+ free_template(&tcb, e);
+ fclose(f);
+ programname = oldprg;
+ lineno = oldlnr;
+ g_progname = oldprg;
+ g_lineno = oldlnr;
+}
+
+static var *render(var *res, var *args, int nargs)
+{
+ char *s;
+ const char *s;
+
+ s = getvar_s(args);
+ if (!s)
@ -555,7 +560,7 @@ Index: busybox-1.4.2/editors/awx.c
+}
+
+/* registers a global c function for the awk interpreter */
+static void register_cfunc(char *name, awk_cfunc cfunc, int nargs)
+static void register_cfunc(const char *name, awk_cfunc cfunc, int nargs)
+{
+ func *f;
+
@ -573,7 +578,7 @@ Index: busybox-1.4.2/editors/awx.c
+ setvar_u(findvar(formvar, name), value);
+}
+
+static char *cgi_getvar(char *name)
+static const char *cgi_getvar(const char *name)
+{
+ if (!formvar) {
+ formvar = hash_init();
@ -589,8 +594,7 @@ Index: busybox-1.4.2/editors/awx.c
+/* function call for accessing cgi form variables */
+static var *getvar(var *res, var *args, int nargs)
+{
+ char *s;
+ char *svar;
+ const char *s, *svar;
+
+ s = getvar_s(args);
+ if (!s)
@ -608,7 +612,7 @@ Index: busybox-1.4.2/editors/awx.c
+/* call an awk function without arguments by string reference */
+static var *call(var *res, var *args, int nargs)
+{
+ char *s = getvar_s(args);
+ const char *s = getvar_s(args);
+ func *f;
+
+ if (!s)
@ -629,10 +633,10 @@ Index: busybox-1.4.2/editors/awx.c
+ char *tmp, *s = NULL;
+
+ zero_out_var(&tv);
+ programname = name;
+ g_progname = name;
+
+ /* read the main controller source */
+ s = get_file(programname);
+ s = get_file(g_progname);
+ if (!s) {
+ fprintf(stderr, "Could not open file\n");
+ return 1;
@ -650,7 +654,7 @@ Index: busybox-1.4.2/editors/awx.c
+
+ action = newvar("ACTION");
+ if (!(strlen(getvar_s(action)) > 0)) {
+ tmp = cgi_getvar("action");
+ tmp = (char *) cgi_getvar("action");
+ if (!tmp || (strlen(tmp) <= 0))
+ tmp = strdup("default");
+
@ -694,21 +698,21 @@ Index: busybox-1.4.2/editors/awx.c
+ return 0;
+
+ /* fill in ARGV array */
+ setvar_i(V[ARGC], argc + 1);
+ setari_u(V[ARGV], 0, "awx");
+ setvar_i(intvar[ARGC], argc + 1);
+ setari_u(intvar[ARGV], 0, "awx");
+ i = 0;
+ while (*args)
+ setari_u(V[ARGV], ++i, *args++);
+ setari_u(intvar[ARGV], ++i, *args++);
+
+ while((c = getopt(argc, argv, "i:f:")) != EOF) {
+ switch(c) {
+ case 'i':
+ programname = optarg;
+ g_progname = optarg;
+ include_file(optarg);
+ break;
+ case 'f':
+ ret = 0;
+ programname = optarg;
+ g_progname = optarg;
+ render_file(optarg);
+ goto done;
+ }
@ -734,10 +738,10 @@ Index: busybox-1.4.2/editors/awx.c
+ return awk_main(argc, argv);
+}
+
Index: busybox-1.4.2/editors/awx_parser.h
Index: busybox-1.7.2/editors/awx_parser.h
===================================================================
--- /dev/null 1970-01-01 00:00:00.000000000 +0000
+++ busybox-1.4.2/editors/awx_parser.h 2007-06-04 13:21:37.928210704 +0200
+++ busybox-1.7.2/editors/awx_parser.h 2007-10-05 01:43:59.487506840 +0200
@@ -0,0 +1,38 @@
+#ifndef __TEMPLATE_PARSER_H
+#define __TEMPLATE_PARSER_H
@ -777,10 +781,10 @@ Index: busybox-1.4.2/editors/awx_parser.h
+void free_template(struct template_cb *cb, struct template_element *e);
+
+#endif
Index: busybox-1.4.2/editors/awx_parser.l
Index: busybox-1.7.2/editors/awx_parser.l
===================================================================
--- /dev/null 1970-01-01 00:00:00.000000000 +0000
+++ busybox-1.4.2/editors/awx_parser.l 2007-06-04 13:21:37.929210552 +0200
+++ busybox-1.7.2/editors/awx_parser.l 2007-10-05 01:43:59.547510259 +0200
@@ -0,0 +1,302 @@
+%{
+#include <stdio.h>
@ -1084,10 +1088,10 @@ Index: busybox-1.4.2/editors/awx_parser.l
+ free(e);
+ return free_template(cb, next);
+}
Index: busybox-1.4.2/editors/Config.in
Index: busybox-1.7.2/editors/Config.in
===================================================================
--- busybox-1.4.2.orig/editors/Config.in 2007-06-04 13:21:31.486190040 +0200
+++ busybox-1.4.2/editors/Config.in 2007-06-04 13:21:37.929210552 +0200
--- busybox-1.7.2.orig/editors/Config.in 2007-10-05 01:39:50.097294897 +0200
+++ busybox-1.7.2/editors/Config.in 2007-10-05 01:43:59.583512308 +0200
@@ -12,6 +12,13 @@
Awk is used as a pattern scanning and processing language. This is
the BusyBox implementation of that programming language.
@ -1102,11 +1106,11 @@ Index: busybox-1.4.2/editors/Config.in
config FEATURE_AWK_MATH
bool "Enable math functions (requires libm)"
default y
Index: busybox-1.4.2/editors/Kbuild
Index: busybox-1.7.2/editors/Kbuild
===================================================================
--- busybox-1.4.2.orig/editors/Kbuild 2007-06-04 13:21:31.492189128 +0200
+++ busybox-1.4.2/editors/Kbuild 2007-06-04 13:21:37.929210552 +0200
@@ -10,3 +10,12 @@
--- busybox-1.7.2.orig/editors/Kbuild 2007-10-05 01:39:50.105295361 +0200
+++ busybox-1.7.2/editors/Kbuild 2007-10-05 01:43:59.627514818 +0200
@@ -12,3 +12,12 @@
lib-$(CONFIG_PATCH) += patch.o
lib-$(CONFIG_SED) += sed.o
lib-$(CONFIG_VI) += vi.o
@ -1119,22 +1123,22 @@ Index: busybox-1.4.2/editors/Kbuild
+editors/awx_parser.o: editors/awx_parser.c FORCE
+ $(call cmd,force_checksrc)
+ $(call if_changed_rule,cc_o_c)
Index: busybox-1.4.2/include/applets.h
Index: busybox-1.7.2/include/applets.h
===================================================================
--- busybox-1.4.2.orig/include/applets.h 2007-06-04 13:21:36.732392496 +0200
+++ busybox-1.4.2/include/applets.h 2007-06-04 13:21:37.929210552 +0200
@@ -60,6 +60,7 @@
--- busybox-1.7.2.orig/include/applets.h 2007-10-05 01:43:59.203490652 +0200
+++ busybox-1.7.2/include/applets.h 2007-10-05 01:43:59.647515958 +0200
@@ -76,6 +76,7 @@
USE_ARPING(APPLET(arping, _BB_DIR_USR_BIN, _BB_SUID_NEVER))
USE_ASH(APPLET_NOUSAGE(ash, ash, _BB_DIR_BIN, _BB_SUID_NEVER))
USE_AWK(APPLET(awk, _BB_DIR_USR_BIN, _BB_SUID_NEVER))
USE_AWK(APPLET_NOEXEC(awk, awk, _BB_DIR_USR_BIN, _BB_SUID_NEVER, awk))
+USE_AWX(APPLET_NOUSAGE(awx, awx, _BB_DIR_USR_BIN, _BB_SUID_NEVER))
USE_BASENAME(APPLET(basename, _BB_DIR_USR_BIN, _BB_SUID_NEVER))
USE_BASENAME(APPLET_NOFORK(basename, basename, _BB_DIR_USR_BIN, _BB_SUID_NEVER, basename))
USE_BBCONFIG(APPLET(bbconfig, _BB_DIR_BIN, _BB_SUID_NEVER))
//USE_BBSH(APPLET(bbsh, _BB_DIR_BIN, _BB_SUID_NEVER))
Index: busybox-1.4.2/include/cgi.h
Index: busybox-1.7.2/include/cgi.h
===================================================================
--- /dev/null 1970-01-01 00:00:00.000000000 +0000
+++ busybox-1.4.2/include/cgi.h 2007-06-04 13:21:37.929210552 +0200
+++ busybox-1.7.2/include/cgi.h 2007-10-05 01:43:59.667517098 +0200
@@ -0,0 +1,8 @@
+#ifndef CGI_H
+#define CGI_H
@ -1144,10 +1148,10 @@ Index: busybox-1.4.2/include/cgi.h
+int cgi_init(var_handler);
+
+#endif
Index: busybox-1.4.2/libbb/cgi.c
Index: busybox-1.7.2/libbb/cgi.c
===================================================================
--- /dev/null 1970-01-01 00:00:00.000000000 +0000
+++ busybox-1.4.2/libbb/cgi.c 2007-06-04 13:21:37.930210400 +0200
+++ busybox-1.7.2/libbb/cgi.c 2007-10-05 01:43:59.707519378 +0200
@@ -0,0 +1,457 @@
+/* --------------------------------------------------------------------------
+ * functions for processing cgi form data
@ -1606,14 +1610,15 @@ Index: busybox-1.4.2/libbb/cgi.c
+
+ return retval;
+}
Index: busybox-1.4.2/libbb/Kbuild
Index: busybox-1.7.2/libbb/Kbuild
===================================================================
--- busybox-1.4.2.orig/libbb/Kbuild 2007-06-04 13:21:37.710243840 +0200
+++ busybox-1.4.2/libbb/Kbuild 2007-06-04 13:21:37.930210400 +0200
@@ -118,3 +118,6 @@
lib-$(CONFIG_MDEV) += xregcomp.o
lib-$(CONFIG_LESS) += xregcomp.o
lib-$(CONFIG_DEVFSD) += xregcomp.o
+
--- busybox-1.7.2.orig/libbb/Kbuild 2007-10-05 01:43:59.387501141 +0200
+++ busybox-1.7.2/libbb/Kbuild 2007-10-05 01:43:59.751521884 +0200
@@ -99,6 +99,7 @@
lib-y += xreadlink.o
# conditionally compiled objects:
+lib-$(CONFIG_AWX) += cgi.o
+
lib-$(CONFIG_FEATURE_MOUNT_LOOP) += loop.o
lib-$(CONFIG_LOSETUP) += loop.o
lib-$(CONFIG_FEATURE_MTAB_SUPPORT) += mtab.o

View file

@ -1,196 +0,0 @@
--- busybox/modutils/insmod.c 2007-05-11 12:10:43.000000000 +0200
+++ busybox/modutils/insmod.c 2007-05-11 12:12:15.000000000 +0200
@@ -75,6 +75,30 @@
extern int insmod_ng_main( int argc, char **argv);
#endif
+static char *m_filename;
+static char *m_fullName;
+#define _PATH_MODULES "/lib/modules"
+
+static int check_module_name_match(const char *filename, struct stat *statbuf,
+ void *userdata, int depth)
+{
+ char *fullname = (char *) userdata;
+
+ if (fullname[0] == '\0')
+ return FALSE;
+ else {
+ char *tmp, *tmp1 = xstrdup(filename);
+ tmp = bb_get_last_path_component(tmp1);
+ if (strcmp(tmp, fullname) == 0) {
+ free(tmp1);
+ /* Stop searching if we find a match */
+ m_filename = xstrdup(filename);
+ return FALSE;
+ }
+ free(tmp1);
+ }
+ return TRUE;
+}
#if ENABLE_FEATURE_2_4_MODULES
@@ -680,7 +704,6 @@
#endif
-#define _PATH_MODULES "/lib/modules"
enum { STRVERSIONLEN = 64 };
/*======================================================================*/
@@ -793,37 +816,6 @@
static int n_ext_modules_used;
extern int delete_module(const char *);
-static char *m_filename;
-static char *m_fullName;
-
-
-/*======================================================================*/
-
-
-static int check_module_name_match(const char *filename, struct stat *statbuf,
- void *userdata, int depth)
-{
- char *fullname = (char *) userdata;
-
- if (fullname[0] == '\0')
- return FALSE;
- else {
- char *tmp, *tmp1 = xstrdup(filename);
- tmp = bb_get_last_path_component(tmp1);
- if (strcmp(tmp, fullname) == 0) {
- free(tmp1);
- /* Stop searching if we find a match */
- m_filename = xstrdup(filename);
- return FALSE;
- }
- free(tmp1);
- }
- return TRUE;
-}
-
-
-/*======================================================================*/
-
static struct obj_file *arch_new_file(void)
{
struct arch_file *f;
@@ -4265,14 +4257,97 @@
long ret;
size_t len;
void *map;
- char *filename, *options;
+ char *options, *tmp;
+ struct stat st;
+#if ENABLE_FEATURE_CLEAN_UP
+ FILE *fp = 0;
+#else
+ FILE *fp;
+#endif
+ int k_version = 0;
+ struct utsname myuname;
- filename = *++argv;
- if (!filename)
+ if (argc < 2)
bb_show_usage();
+#if !ENABLE_FEATURE_2_4_MODULES
+ /* Grab the module name */
+ tmp = basename(xstrdup(argv[1]));
+ len = strlen(tmp);
+
+ if (uname(&myuname) == 0) {
+ if (myuname.release[0] == '2') {
+ k_version = myuname.release[2] - '0';
+ }
+ }
+
+ if (len > 3 && tmp[len - 3] == '.' && tmp[len - 2] == 'k' && tmp[len - 1] == 'o') {
+ len -= 3;
+ tmp[len] = '\0';
+ }
+
+
+ m_fullName = xasprintf("%s.ko", tmp);
+
+ /* Get a filedesc for the module. Check we we have a complete path */
+ if (stat(argv[1], &st) < 0 || !S_ISREG(st.st_mode)
+ || (fp = fopen(argv[1], "r")) == 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;
+ char real_module_dir[FILENAME_MAX];
+
+ tmdn = concat_path_file(_PATH_MODULES, 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... */
+ if (realpath(tmdn, real_module_dir) == NULL)
+ module_dir = tmdn;
+ else
+ module_dir = real_module_dir;
+ recursive_action(module_dir, TRUE, FALSE, FALSE,
+ check_module_name_match, 0, m_fullName, 0);
+ free(tmdn);
+ }
+
+ /* Check if we have found anything yet */
+ if (m_filename == 0 || ((fp = fopen(m_filename, "r")) == NULL)) {
+ char module_dir[FILENAME_MAX];
+
+ free(m_filename);
+ m_filename = 0;
+ if (realpath (_PATH_MODULES, module_dir) == NULL)
+ strcpy(module_dir, _PATH_MODULES);
+ /* No module found under /lib/modules/`uname -r`, this
+ * time cast the net a bit wider. Search /lib/modules/ */
+ if (!recursive_action(module_dir, TRUE, FALSE, FALSE,
+ check_module_name_match, 0, m_fullName, 0)
+ ) {
+ if (m_filename == 0
+ || ((fp = fopen(m_filename, "r")) == NULL)
+ ) {
+ bb_error_msg("%s: no module by that name found", m_fullName);
+#if ENABLE_FEATURE_CLEAN_UP
+ if(fp)
+ fclose(fp);
+ free(m_filename);
+#endif
+ }
+ } else
+ bb_error_msg_and_die("%s: no module by that name found", m_fullName);
+ }
+ } else
+ m_filename = xstrdup(argv[1]);
+#endif
+
/* Rest is options */
options = xstrdup("");
+ argv++;
while (*++argv) {
int optlen = strlen(options);
options = xrealloc(options, optlen + 2 + strlen(*argv) + 2);
@@ -4300,13 +4375,13 @@
}
#else
len = MAXINT(ssize_t);
- map = xmalloc_open_read_close(filename, &len);
+ map = xmalloc_open_read_close(m_filename, &len);
#endif
ret = syscall(__NR_init_module, map, len, options);
if (ret != 0) {
bb_perror_msg_and_die("cannot insert '%s': %s (%li)",
- filename, moderror(errno), ret);
+ m_filename, moderror(errno), ret);
}
return 0;