summaryrefslogtreecommitdiff
path: root/package
diff options
context:
space:
mode:
authorWaldemar Brodkorb <wbx@openadk.org>2010-04-28 20:30:44 +0200
committerWaldemar Brodkorb <wbx@openadk.org>2010-04-28 20:30:44 +0200
commit44dad747bf39cb8e352d885bda37cf37b98e3f75 (patch)
treee0509989d0ced20e7f06aca96f13de104e8baa3e /package
parentbc924b61431ffa6c76db5fefa7a5a09951fe6ccb (diff)
parente42433d7127f9a50b5dae57fff331ecfdc9883c4 (diff)
Merge branch 'master' of git+ssh://openadk.org/git/openadk
Diffstat (limited to 'package')
-rw-r--r--package/Config.in1
-rw-r--r--package/busybox/Makefile10
-rw-r--r--package/busybox/config/Config.in28
-rw-r--r--package/busybox/config/archival/Config.in25
-rw-r--r--package/busybox/config/coreutils/Config.in52
-rw-r--r--package/busybox/config/editors/Config.in19
-rw-r--r--package/busybox/config/findutils/Config.in27
-rw-r--r--package/busybox/config/libbb/Config.in5
-rw-r--r--package/busybox/config/miscutils/Config.in23
-rw-r--r--package/busybox/config/modutils/Config.in16
-rw-r--r--package/busybox/config/networking/Config.in80
-rw-r--r--package/busybox/config/networking/udhcp/Config.in28
-rw-r--r--package/busybox/config/procps/Config.in14
-rw-r--r--package/busybox/config/shell/Config.in29
-rw-r--r--package/busybox/config/sysklogd/Config.in2
-rw-r--r--package/busybox/config/util-linux/Config.in44
-rw-r--r--package/busybox/patches/001-ipkg.patch236
-rw-r--r--package/cfgfs/Makefile2
-rw-r--r--package/cfgfs/src/fwcf.sh2
-rw-r--r--package/igmpproxy/Makefile2
-rw-r--r--package/igmpproxy/files/igmpproxy.conffiles1
-rw-r--r--package/igmpproxy/files/igmpproxy.init26
-rw-r--r--package/igmpproxy/files/igmpproxy.postinst3
-rw-r--r--package/krb5/Makefile12
-rw-r--r--package/nand/src/nand.c2
-rw-r--r--package/rtsp/Makefile38
-rw-r--r--package/rtsp/src/Makefile24
-rw-r--r--package/rtsp/src/README.rst40
-rw-r--r--package/rtsp/src/netfilter_helpers.h133
-rw-r--r--package/rtsp/src/netfilter_mime.h89
-rw-r--r--package/rtsp/src/nf_conntrack_rtsp.c545
-rw-r--r--package/rtsp/src/nf_conntrack_rtsp.h63
-rw-r--r--package/rtsp/src/nf_nat_rtsp.c531
-rw-r--r--package/zlib/Makefile1
34 files changed, 1943 insertions, 210 deletions
diff --git a/package/Config.in b/package/Config.in
index 37f1e4e92..5f1a0bdd4 100644
--- a/package/Config.in
+++ b/package/Config.in
@@ -693,4 +693,5 @@ endmenu
menu "Kernel configuration"
source "target/linux/Config.in"
+source "package/rtsp/Config.in"
endmenu
diff --git a/package/busybox/Makefile b/package/busybox/Makefile
index 2f1d9369f..4881762a1 100644
--- a/package/busybox/Makefile
+++ b/package/busybox/Makefile
@@ -22,6 +22,10 @@ include $(TOPDIR)/mk/package.mk
$(eval $(call PKG_template,BUSYBOX,${PKG_NAME},${PKG_VERSION}-${PKG_RELEASE},${PKG_DEPENDS},${PKG_DESCR},${PKG_SECTION}))
$(eval $(call PKG_template,UDHCPD,udhcpd,${PKG_VERSION}-${PKG_RELEASE},busybox,${PKG_DESCR_UDHCPD},${PKG_SECTION_UDHCPD}))
+SUB_INSTALLS-y:=
+SUB_INSTALLS-m:=
+SUB_INSTALLS-${ADK_PACKAGE_UDHCPD}+= udhcpd-install
+
CONFIG_STYLE:= manual
BUILD_STYLE:= manual
INSTALL_STYLE:= manual
@@ -56,7 +60,7 @@ else
IPKG_ARCH="$(CPU_ARCH)" ARCH="$(ARCH)" HOSTCC="$(HOSTCC)" -C $(WRKBUILD) busybox
endif
-do-install: $(TOPDIR)/.busyboxcfg ${WRKBUILD}/.config
+do-install: $(TOPDIR)/.busyboxcfg ${WRKBUILD}/.config ${SUB_INSTALLS-m} ${SUB_INSTALLS-y}
ifeq ($(ADK_NATIVE),y)
$(MAKE) V=1 \
IPKG_ARCH="$(CPU_ARCH)" ARCH="$(ARCH)" HOSTCC="$(HOSTCC)" -C $(WRKBUILD) install $(MAKE_TRACE)
@@ -69,10 +73,10 @@ ifeq ($(ADK_DEBUG),y)
${INSTALL_BIN} $(WRKBUILD)/busybox_unstripped \
$(IDIR_BUSYBOX)/bin/busybox
endif
-ifeq ($(ADK_PACKAGE_UDHCPD),y)
+
+udhcpd-install:
${INSTALL_DIR} ${IDIR_UDHCPD}/etc/
${INSTALL_DATA} ./files/udhcpd.conf ${IDIR_UDHCPD}/etc/
-endif
fake: $(TOPDIR)/.busyboxcfg do-configure do-install
diff --git a/package/busybox/config/Config.in b/package/busybox/config/Config.in
index 427a45b4a..3478eaab5 100644
--- a/package/busybox/config/Config.in
+++ b/package/busybox/config/Config.in
@@ -30,6 +30,23 @@ config BUSYBOX_EXTRA_COMPAT
some GNU extensions in libc. You probably only need this option
if you plan to run busybox on desktop.
+config BUSYBOX_INCLUDE_SUSv2
+ bool "Enable obsolete features removed before SUSv3"
+ default y
+ help
+ This option will enable backwards compatibility with SuSv2,
+ specifically, old-style numeric options ('command -1 <file>')
+ will be supported in head, tail, and fold. (Note: should
+ affect renice too.)
+
+config BUSYBOX_USE_PORTABLE_CODE
+ bool "Avoid using GCC-specific code constructs"
+ default n
+ help
+ Use this option if you are trying to compile busybox with
+ compiler other than gcc.
+ If you do use gcc, this option may needlessly increase code size.
+
choice
prompt "Buffer allocation policy"
default FEATURE_BUFFERS_USE_MALLOC
@@ -503,17 +520,8 @@ config BUSYBOX_EFENCE
endchoice
-config BUSYBOX_INCLUDE_SUSv2
- bool "Enable obsolete features removed before SUSv3?"
- default y
- help
- This option will enable backwards compatibility with SuSv2,
- specifically, old-style numeric options ('command -1 <file>')
- will be supported in head, tail, and fold. (Note: should
- affect renice too.)
-
### config PARSE
-### bool "Uniform config file parser debugging applet: parse"
+### bool "Uniform config file parser debugging applet: parse"
endmenu
diff --git a/package/busybox/config/archival/Config.in b/package/busybox/config/archival/Config.in
index fa08ebd42..529496780 100644
--- a/package/busybox/config/archival/Config.in
+++ b/package/busybox/config/archival/Config.in
@@ -92,8 +92,8 @@ config BUSYBOX_BZIP2
config BUSYBOX_CPIO
bool "cpio"
- depends on !ADK_PACKAGE_CPIO
default n
+ depends on !ADK_PACKAGE_CPIO
help
cpio is an archival utility program used to create, modify, and
extract contents from archives.
@@ -168,6 +168,13 @@ config BUSYBOX_GZIP
gzip is used to compress files.
It's probably the most widely used UNIX compression program.
+config BUSYBOX_FEATURE_GZIP_LONG_OPTIONS
+ bool "Enable long options"
+ default n
+ depends on BUSYBOX_GZIP && BUSYBOX_LONG_OPTS
+ help
+ Enable use of long options, increases size by about 106 Bytes
+
config BUSYBOX_LZOP
bool "lzop"
default n
@@ -227,7 +234,7 @@ config BUSYBOX_FEATURE_TAR_CREATE
config BUSYBOX_FEATURE_TAR_AUTODETECT
bool "Autodetect compressed tarballs"
- default n
+ default y
depends on BUSYBOX_FEATURE_SEAMLESS_Z || BUSYBOX_FEATURE_SEAMLESS_GZ || BUSYBOX_FEATURE_SEAMLESS_BZ2 || BUSYBOX_FEATURE_SEAMLESS_LZMA
help
With this option tar can automatically detect compressed
@@ -277,13 +284,21 @@ config BUSYBOX_FEATURE_TAR_LONG_OPTIONS
config BUSYBOX_FEATURE_TAR_UNAME_GNAME
bool "Enable use of user and group names"
- default p
+ default y
depends on BUSYBOX_TAR
help
Enables use of user and group names in tar. This affects contents
listings (-t) and preserving permissions when unpacking (-p).
+200 bytes.
+config BUSYBOX_FEATURE_TAR_NOPRESERVE_TIME
+ bool "Enable -m (do not preserve time) option"
+ default n
+ depends on BUSYBOX_TAR
+ help
+ With this option busybox supports GNU tar -m
+ (do not preserve time) option.
+
endif #tar
config BUSYBOX_UNCOMPRESS
@@ -313,8 +328,8 @@ config BUSYBOX_FEATURE_LZMA_FAST
default n
depends on BUSYBOX_UNLZMA
help
- This option reduces decompression time by about 33% at the cost of
- a 2K bigger binary.
+ This option reduces decompression time by about 25% at the cost of
+ a 1K bigger binary.
config BUSYBOX_UNZIP
bool "unzip"
diff --git a/package/busybox/config/coreutils/Config.in b/package/busybox/config/coreutils/Config.in
index d0bebc11f..015c2de5c 100644
--- a/package/busybox/config/coreutils/Config.in
+++ b/package/busybox/config/coreutils/Config.in
@@ -52,6 +52,13 @@ config BUSYBOX_CHOWN
chown is used to change the user and/or group ownership
of files.
+config BUSYBOX_FEATURE_CHOWN_LONG_OPTIONS
+ bool "Enable long options"
+ default n
+ depends on BUSYBOX_CHOWN && BUSYBOX_LONG_OPTS
+ help
+ Enable use of long options
+
config BUSYBOX_CHROOT
bool "chroot"
default y
@@ -78,6 +85,14 @@ config BUSYBOX_CP
help
cp is used to copy files and directories.
+config BUSYBOX_FEATURE_CP_LONG_OPTIONS
+ bool "Enable long options for cp"
+ default n
+ depends on BUSYBOX_CP && BUSYBOX_LONG_OPTS
+ help
+ Enable long options for cp.
+ Also add support for --parents option.
+
config BUSYBOX_CUT
bool "cut"
default y
@@ -100,6 +115,22 @@ config BUSYBOX_FEATURE_DATE_ISOFMT
Enable option (-I) to output an ISO-8601 compliant
date/time string.
+config BUSYBOX_FEATURE_DATE_COMPAT
+ bool "Support weird 'date MMDDhhmm[[YY]YY][.ss]' format"
+ default y
+ depends on BUSYBOX_DATE
+ help
+ System time can be set by 'date -s DATE' and simply 'date DATE',
+ but formats of DATE string are different. 'date DATE' accepts
+ a rather weird MMDDhhmm[[YY]YY][.ss] format with completely
+ unnatural placement of year between minutes and seconds.
+ date -s (and other commands like touch -d) use more sensible
+ formats (for one, ISO format YYYY-MM-DD hh:mm:ss.ssssss).
+
+ With this option off, 'date DATE' is 'date -s DATE' support
+ the same format. With it on, 'date DATE' additionally supports
+ MMDDhhmm[[YY]YY][.ss] format.
+
config BUSYBOX_DD
bool "dd"
default y
@@ -113,13 +144,22 @@ config BUSYBOX_FEATURE_DD_SIGNAL_HANDLING
default y
depends on BUSYBOX_DD
help
- sending a SIGUSR1 signal to a running `dd' process makes it
+ Sending a SIGUSR1 signal to a running `dd' process makes it
print to standard error the number of records read and written
so far, then to resume copying.
$ dd if=/dev/zero of=/dev/null&
$ pid=$! kill -USR1 $pid; sleep 1; kill $pid
- 10899206+0 records in 10899206+0 records out
+ 10899206+0 records in
+ 10899206+0 records out
+
+config BUSYBOX_FEATURE_DD_THIRD_STATUS_LINE
+ bool "Enable the third status line upon signal"
+ default n
+ depends on BUSYBOX_DD && BUSYBOX_FEATURE_DD_SIGNAL_HANDLING
+ help
+ Displays a coreutils-like third status line with transferred bytes,
+ elapsed time and speed.
config BUSYBOX_FEATURE_DD_IBS_OBS
bool "Enable ibs, obs and conv options"
@@ -505,7 +545,7 @@ config BUSYBOX_FEATURE_RMDIR_LONG_OPTIONS
config BUSYBOX_SEQ
bool "seq"
- default n
+ default y
help
print a sequence of numbers
@@ -829,13 +869,13 @@ config BUSYBOX_FEATURE_HUMAN_READABLE
help
Allow df, du, and ls to have human readable output.
-comment "Common options for md5sum, sha1sum"
- depends on BUSYBOX_MD5SUM || BUSYBOX_SHA1SUM
+comment "Common options for md5sum, sha1sum, sha256sum, sha512sum"
+ depends on BUSYBOX_MD5SUM || BUSYBOX_SHA1SUM || BUSYBOX_SHA256SUM || BUSYBOX_SHA512SUM
config BUSYBOX_FEATURE_MD5_SHA1_SUM_CHECK
bool "Enable -c, -s and -w options"
default n
- depends on BUSYBOX_MD5SUM || BUSYBOX_SHA1SUM
+ depends on BUSYBOX_MD5SUM || BUSYBOX_SHA1SUM || BUSYBOX_SHA256SUM || BUSYBOX_SHA512SUM
help
Enabling the -c options allows files to be checked
against pre-calculated hash values.
diff --git a/package/busybox/config/editors/Config.in b/package/busybox/config/editors/Config.in
index 2d04fe99b..3ebb16a6f 100644
--- a/package/busybox/config/editors/Config.in
+++ b/package/busybox/config/editors/Config.in
@@ -36,13 +36,12 @@ config BUSYBOX_DIFF
differences between them in a form that can be given to
the patch command.
-config BUSYBOX_FEATURE_DIFF_BINARY
- bool "Enable checks for binary files"
- default y
- depends on BUSYBOX_DIFF
+config BUSYBOX_FEATURE_DIFF_LONG_OPTIONS
+ bool "Enable long options"
+ default n
+ depends on BUSYBOX_DIFF && BUSYBOX_LONG_OPTS
help
- This option enables support for checking for binary files
- before a comparison is carried out.
+ Enable use of long options.
config BUSYBOX_FEATURE_DIFF_DIR
bool "Enable directory support"
@@ -52,14 +51,6 @@ config BUSYBOX_FEATURE_DIFF_DIR
This option enables support for directory and subdirectory
comparison.
-config BUSYBOX_FEATURE_DIFF_MINIMAL
- bool "Enable -d option to find smaller sets of changes"
- default n
- depends on BUSYBOX_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_ED
bool "ed"
default n
diff --git a/package/busybox/config/findutils/Config.in b/package/busybox/config/findutils/Config.in
index 1a1e0f4d5..e60537448 100644
--- a/package/busybox/config/findutils/Config.in
+++ b/package/busybox/config/findutils/Config.in
@@ -7,11 +7,19 @@ menu "Finding Utilities"
config BUSYBOX_FIND
bool "find"
- default y
depends on !ADK_PACKAGE_FINDUTILS
+ default y
help
find is used to search your system to find specified files.
+config BUSYBOX_FEATURE_FIND_EMPTY
+ bool "Enable -empty option matching empty files and directories"
+ default y
+ depends on BUSYBOX_FIND
+ help
+ Support the 'find -empty' option for searching empty files
+ and directories.
+
config BUSYBOX_FEATURE_FIND_PRINT0
bool "Enable -print0: NUL-terminated output"
default y
@@ -82,14 +90,6 @@ config BUSYBOX_FEATURE_FIND_INUM
help
Support the 'find -inum' option for searching by inode number.
-config BUSYBOX_FEATURE_FIND_EMPTY
- bool "Enable -empty option matching empty files and directories"
- default y
- depends on BUSYBOX_FIND
- help
- Support the 'find -empty' option for searching empty files
- and directories.
-
config BUSYBOX_FEATURE_FIND_EXEC
bool "Enable -exec: execute commands"
default y
@@ -180,10 +180,17 @@ config BUSYBOX_FEATURE_FIND_CONTEXT
help
Support the 'find -context' option for matching security context.
+config BUSYBOX_FEATURE_FIND_LINKS
+ bool "Enable -links: link count matching"
+ default n
+ depends on BUSYBOX_FIND
+ help
+ Support the 'find -links' option for matching number of links.
+
config BUSYBOX_GREP
bool "grep"
- default y if !ADK_PACKAGE_GREP
depends on !ADK_PACKAGE_GREP
+ default y
help
grep is used to search files for a specified pattern.
diff --git a/package/busybox/config/libbb/Config.in b/package/busybox/config/libbb/Config.in
index 708839b4c..1fc888630 100644
--- a/package/busybox/config/libbb/Config.in
+++ b/package/busybox/config/libbb/Config.in
@@ -111,7 +111,7 @@ config BUSYBOX_FEATURE_EDITING_ASK_TERMINAL
current cursor position. This information is used to make line
editing more robust in some cases.
If you are not sure whether your terminals respond to this code
- correctly, or want to save on code size (about 300 bytes),
+ correctly, or want to save on code size (about 400 bytes),
then do not turn this option on.
config BUSYBOX_FEATURE_NON_POSIX_CP
@@ -134,9 +134,8 @@ config BUSYBOX_FEATURE_VERBOSE_CP_MESSAGE
$ cp file /vmlinuz/file
cp: cannot stat '/vmlinuz/file': Path has non-directory component
If this feature is not enabled, they will be, respectively:
- cp: cannot remove '/does_not_exist/file': No such file or directory
+ cp: cannot create '/does_not_exist/file': No such file or directory
cp: cannot stat '/vmlinuz/file': Not a directory
- respectively.
This will cost you ~60 bytes.
config BUSYBOX_FEATURE_COPYBUF_KB
diff --git a/package/busybox/config/miscutils/Config.in b/package/busybox/config/miscutils/Config.in
index 8346391a9..e28539204 100644
--- a/package/busybox/config/miscutils/Config.in
+++ b/package/busybox/config/miscutils/Config.in
@@ -137,11 +137,11 @@ config BUSYBOX_FEATURE_CROND_D
-d sets loglevel to 0 (most verbose) and directs all output to stderr.
config BUSYBOX_FEATURE_CROND_CALL_SENDMAIL
- bool "Using /usr/sbin/sendmail?"
+ bool "Report command output via email (using sendmail)"
default n
depends on BUSYBOX_CROND
help
- Support calling /usr/sbin/sendmail for send cmd outputs.
+ Command output will be sent to corresponding user via email.
config BUSYBOX_FEATURE_CROND_DIR
string "crond spool directory"
@@ -272,6 +272,13 @@ config BUSYBOX_FBSPLASH
"NN" (ASCII decimal number) - percentage to show on progress bar
"exit" - well you guessed it
+config BUSYBOX_FLASHCP
+ bool "flashcp"
+ default n
+ help
+ The flashcp binary, inspired by mtd-utils as of git head 5eceb74f7.
+ This utility is used to copy images into a MTD device.
+
config BUSYBOX_FLASH_LOCK
bool "flash_lock"
default n
@@ -334,8 +341,8 @@ endchoice
config BUSYBOX_LESS
bool "less"
- default y
depends on !ADK_PACKAGE_LESS
+ default y
help
'less' is a pager, meaning that it displays text files. It possesses
a wide array of features, and is an improvement over 'more'.
@@ -347,7 +354,7 @@ config BUSYBOX_FEATURE_LESS_MAXLINES
config BUSYBOX_FEATURE_LESS_BRACKETS
bool "Enable bracket searching"
- default n
+ default y
depends on BUSYBOX_LESS
help
This option adds the capability to search for matching left and right
@@ -355,7 +362,7 @@ config BUSYBOX_FEATURE_LESS_BRACKETS
config BUSYBOX_FEATURE_LESS_FLAGS
bool "Enable extra flags"
- default n
+ default y
depends on BUSYBOX_LESS
help
The extra flags provided do the following:
@@ -614,6 +621,12 @@ config BUSYBOX_VOLNAME
help
Prints a CD-ROM volume name.
+config BUSYBOX_WALL
+ bool "wall"
+ default n
+ help
+ Write a message to all users that are logged in.
+
config BUSYBOX_WATCHDOG
bool "watchdog"
depends on !ADK_PACKAGE_WATCHDOG
diff --git a/package/busybox/config/modutils/Config.in b/package/busybox/config/modutils/Config.in
index 82500e18a..2e23c7b84 100644
--- a/package/busybox/config/modutils/Config.in
+++ b/package/busybox/config/modutils/Config.in
@@ -121,6 +121,22 @@ config BUSYBOX_FEATURE_2_4_MODULES
This increases size considerably. Say N unless you plan
to run ancient kernels.
+config BUSYBOX_FEATURE_INSMOD_TRY_MMAP
+ bool "Try to load module from a mmap'ed area"
+ default n
+ depends on BUSYBOX_INSMOD || BUSYBOX_MODPROBE_SMALL
+ help
+ This option causes module loading code to try to mmap
+ module first. If it does not work (for example,
+ it does not work for compressed modules), module will be read
+ (and unpacked if needed) into a memory block allocated by malloc.
+
+ The only case when mmap works but malloc does not is when
+ you are trying to load a big module on a very memory-constrained
+ machine. Malloc will momentarily need 2x as much memory as mmap.
+
+ Choosing N saves about 250 bytes of code (on 32-bit x86).
+
config BUSYBOX_FEATURE_INSMOD_VERSION_CHECKING
bool "Enable module version checking"
default n
diff --git a/package/busybox/config/networking/Config.in b/package/busybox/config/networking/Config.in
index 20c583388..2e0bfd36f 100644
--- a/package/busybox/config/networking/Config.in
+++ b/package/busybox/config/networking/Config.in
@@ -93,8 +93,8 @@ config BUSYBOX_DNSD
config BUSYBOX_ETHER_WAKE
bool "ether-wake"
- default n
depends on !ADK_PACKAGE_ETHER_WAKE
+ default n
help
Send a magic packet to wake up sleeping machines.
@@ -119,6 +119,17 @@ config BUSYBOX_FEATURE_FTP_WRITE
help
Enable all kinds of FTP upload commands (-w option)
+config BUSYBOX_FEATURE_FTPD_ACCEPT_BROKEN_LIST
+ bool "Enable workaround for RFC-violating clients"
+ default y
+ depends on BUSYBOX_FTPD
+ help
+ Some ftp-clients (among them KDE's Konqueror) issue illegal
+ "LIST -la" requests. This option works around those problems.
+ It might prevent you from listing files starting with "-" and
+ it increases the code size by ~40 bytes.
+ Most other ftp servers seem to behave similar to this.
+
config BUSYBOX_FTPGET
bool "ftpget"
default n
@@ -411,7 +422,7 @@ config BUSYBOX_FEATURE_IFUPDOWN_MAPPING
config BUSYBOX_FEATURE_IFUPDOWN_EXTERNAL_DHCP
bool "Support for external dhcp clients"
- default n
+ default y
depends on BUSYBOX_IFUPDOWN
help
This enables support for the external dhcp clients. Clients are
@@ -652,7 +663,7 @@ config BUSYBOX_FEATURE_NETSTAT_WIDE
config BUSYBOX_FEATURE_NETSTAT_PRG
bool "Enable PID/Program name output"
- default n
+ default y
depends on BUSYBOX_NETSTAT
help
Add support for -p flag to print out PID and program name.
@@ -664,6 +675,20 @@ config BUSYBOX_NSLOOKUP
help
nslookup is a tool to query Internet name servers.
+config BUSYBOX_NTPD
+ bool "ntpd"
+ default n
+ help
+ The NTP client/server daemon.
+
+config BUSYBOX_FEATURE_NTPD_SERVER
+ bool "Make ntpd usable as a NTP server"
+ default y
+ depends on BUSYBOX_NTPD
+ help
+ Make ntpd usable as a NTP server. If you disable this option
+ ntpd will be usable only as a NTP client.
+
config BUSYBOX_PING
bool "ping"
default y
@@ -717,7 +742,7 @@ config BUSYBOX_SLATTACH
config BUSYBOX_TELNET
bool "telnet"
- default n
+ default y
help
Telnet is an interface to the TELNET protocol, but is also commonly
used to test other simple protocols.
@@ -791,6 +816,27 @@ config BUSYBOX_FEATURE_TELNETD_STANDALONE
help
Selecting this will make telnetd able to run standalone.
+config BUSYBOX_FEATURE_TELNETD_INETD_WAIT
+ bool "Support -w SEC option (inetd wait mode)"
+ default n
+ depends on BUSYBOX_FEATURE_TELNETD_STANDALONE
+ help
+ This option allows you to run telnetd in "inet wait" mode.
+ Example inetd.conf line (note "wait", not usual "nowait"):
+
+ telnet stream tcp wait root /bin/telnetd telnetd -w10
+
+ In this example, inetd passes _listening_ socket_ as fd 0
+ to telnetd when connection appears.
+ telnetd will wait for connections until all existing
+ connections are closed, and no new connections
+ appear during 10 seconds. Then it exits, and inetd continues
+ to listen for new connections.
+
+ This option is rarely used. "tcp nowait" is much more usual
+ way of running tcp services, including telnetd.
+ You most probably want to say N here.
+
config BUSYBOX_TFTP
bool "tftp"
default n
@@ -828,12 +874,19 @@ config BUSYBOX_FEATURE_TFTP_PUT
Also enable download support in tftpd, if tftpd is selected.
config BUSYBOX_FEATURE_TFTP_BLOCKSIZE
- bool "Enable \"blksize\" protocol option"
+ bool "Enable 'blksize' and 'tsize' protocol options"
default n
depends on BUSYBOX_TFTP || BUSYBOX_TFTPD
help
Allow tftp to specify block size, and tftpd to understand
- "blksize" option.
+ "blksize" and "tsize" options.
+
+config BUSYBOX_FEATURE_TFTP_PROGRESS_BAR
+ bool "Enable tftp progress meter"
+ default n
+ depends on BUSYBOX_TFTP && BUSYBOX_FEATURE_TFTP_BLOCKSIZE
+ help
+ Show progress bar.
config BUSYBOX_TFTP_DEBUG
bool "Enable debug"
@@ -845,10 +898,17 @@ config BUSYBOX_TFTP_DEBUG
config BUSYBOX_TRACEROUTE
bool "traceroute"
- default n
+ default y
help
Utility to trace the route of IP packets.
+config BUSYBOX_TRACEROUTE6
+ bool "traceroute6"
+ default y
+ depends on BUSYBOX_FEATURE_IPV6 && BUSYBOX_TRACEROUTE
+ help
+ Utility to trace the route of IPv6 packets.
+
config BUSYBOX_FEATURE_TRACEROUTE_VERBOSE
bool "Enable verbose output"
default n
@@ -867,7 +927,7 @@ config BUSYBOX_FEATURE_TRACEROUTE_SOURCE_ROUTE
config BUSYBOX_FEATURE_TRACEROUTE_USE_ICMP
bool "Use ICMP instead of UDP"
- default n
+ default y
depends on BUSYBOX_TRACEROUTE
help
Add option -I to use ICMP ECHO instead of UDP datagrams.
@@ -877,7 +937,7 @@ source package/busybox/config/networking/udhcp/Config.in
config BUSYBOX_IFUPDOWN_UDHCPC_CMD_OPTIONS
string "ifup udhcpc command line options"
default "-b -R"
- depends on BUSYBOX_IFUPDOWN && BUSYBOX_APP_UDHCPC
+ depends on BUSYBOX_IFUPDOWN && BUSYBOX_UDHCPC
help
Command line options to pass to udhcpc from ifup.
Intended to alter options not available in /etc/network/interfaces.
@@ -892,8 +952,8 @@ config BUSYBOX_VCONFIG
config BUSYBOX_WGET
bool "wget"
- default y
depends on !ADK_PACKAGE_WGET
+ default y
help
wget is a utility for non-interactive download of files from HTTP,
HTTPS, and FTP servers.
diff --git a/package/busybox/config/networking/udhcp/Config.in b/package/busybox/config/networking/udhcp/Config.in
index 05b9ffb67..5b2586f66 100644
--- a/package/busybox/config/networking/udhcp/Config.in
+++ b/package/busybox/config/networking/udhcp/Config.in
@@ -3,26 +3,26 @@
# see scripts/kbuild/config-language.txt.
#
-config BUSYBOX_APP_UDHCPD
+config BUSYBOX_UDHCPD
bool "udhcp server (udhcpd)"
default n
help
udhcpd is a DHCP server geared primarily toward embedded systems,
while striving to be fully functional and RFC compliant.
-config BUSYBOX_APP_DHCPRELAY
+config BUSYBOX_DHCPRELAY
bool "dhcprelay"
default n
- depends on BUSYBOX_APP_UDHCPD
+ depends on BUSYBOX_UDHCPD
help
dhcprelay listens for dhcp requests on one or more interfaces
and forwards these requests to a different interface or dhcp
server.
-config BUSYBOX_APP_DUMPLEASES
+config BUSYBOX_DUMPLEASES
bool "Lease display utility (dumpleases)"
default n
- depends on BUSYBOX_APP_UDHCPD
+ depends on BUSYBOX_UDHCPD
help
dumpleases displays the leases written out by the udhcpd server.
Lease times are stored in the file by time remaining in lease, or
@@ -31,7 +31,7 @@ config BUSYBOX_APP_DUMPLEASES
config BUSYBOX_FEATURE_UDHCPD_WRITE_LEASES_EARLY
bool "Rewrite the lease file at every new acknowledge"
default n
- depends on BUSYBOX_APP_UDHCPD
+ depends on BUSYBOX_UDHCPD
help
If selected, udhcpd will write a new file with leases every
time a new lease has been accepted, thus eliminating the need
@@ -41,12 +41,12 @@ config BUSYBOX_FEATURE_UDHCPD_WRITE_LEASES_EARLY
config BUSYBOX_DHCPD_LEASES_FILE
string "Absolute path to lease file"
default "/var/lib/misc/udhcpd.leases"
- depends on BUSYBOX_APP_UDHCPD
+ depends on BUSYBOX_UDHCPD
help
udhcpd stores addresses in a lease file. This is the absolute path
of the file. Normally it is safe to leave it untouched.
-config BUSYBOX_APP_UDHCPC
+config BUSYBOX_UDHCPC
bool "udhcp client (udhcpc)"
default y
help
@@ -59,7 +59,7 @@ config BUSYBOX_APP_UDHCPC
config BUSYBOX_FEATURE_UDHCPC_ARPING
bool "Verify that the offered address is free, using ARP ping"
default y
- depends on BUSYBOX_APP_UDHCPC
+ depends on BUSYBOX_UDHCPC
help
If selected, udhcpc will send ARP probes and make sure
the offered address is really not in use by anyone. The client
@@ -69,7 +69,7 @@ config BUSYBOX_FEATURE_UDHCPC_ARPING
config BUSYBOX_FEATURE_UDHCP_PORT
bool "Enable '-P port' option for udhcpd and udhcpc"
default n
- depends on BUSYBOX_APP_UDHCPD || BUSYBOX_APP_UDHCPC
+ depends on BUSYBOX_UDHCPD || BUSYBOX_UDHCPC
help
At the cost of ~300 bytes, enables -P port option.
This feature is typically not needed.
@@ -78,7 +78,7 @@ config BUSYBOX_UDHCP_DEBUG
int "Maximum verbosity level for udhcp applets (0..9)"
default 0
range 0 9
- depends on BUSYBOX_APP_UDHCPD || BUSYBOX_APP_UDHCPC || BUSYBOX_APP_DHCPRELAY
+ depends on BUSYBOX_UDHCPD || BUSYBOX_UDHCPC || BUSYBOX_DHCPRELAY
help
Verbosity can be increased with multiple -v options.
This options controls how high it can be cranked up.
@@ -89,7 +89,7 @@ config BUSYBOX_UDHCP_DEBUG
config BUSYBOX_FEATURE_UDHCP_RFC3397
bool "Support for RFC3397 domain search (experimental)"
default n
- depends on BUSYBOX_APP_UDHCPD || BUSYBOX_APP_UDHCPC
+ depends on BUSYBOX_UDHCPD || BUSYBOX_UDHCPC
help
If selected, both client and server will support passing of domain
search lists via option 119, specified in RFC3397.
@@ -97,7 +97,7 @@ config BUSYBOX_FEATURE_UDHCP_RFC3397
config BUSYBOX_UDHCPC_DEFAULT_SCRIPT
string "Absolute path to config script"
default "/usr/share/udhcpc/default.script"
- depends on BUSYBOX_APP_UDHCPC
+ depends on BUSYBOX_UDHCPC
help
This script is called after udhcpc receives an answer. See
examples/udhcp for a working example. Normally it is safe
@@ -107,7 +107,7 @@ config BUSYBOX_UDHCPC_SLACK_FOR_BUGGY_SERVERS
int "DHCP options slack buffer size"
default 80
range 0 924
- depends on BUSYBOX_APP_UDHCPD || BUSYBOX_APP_UDHCPC
+ depends on BUSYBOX_UDHCPD || BUSYBOX_UDHCPC
help
Some buggy DHCP servers send DHCP offer packets with option
field larger than we expect (which might also be considered a
diff --git a/package/busybox/config/procps/Config.in b/package/busybox/config/procps/Config.in
index c0c600b4e..ec2c8cfaa 100644
--- a/package/busybox/config/procps/Config.in
+++ b/package/busybox/config/procps/Config.in
@@ -57,21 +57,21 @@ config BUSYBOX_PGREP
config BUSYBOX_PIDOF
bool "pidof"
- default y
+ default n
help
Pidof finds the process id's (pids) of the named programs. It prints
those id's on the standard output.
config BUSYBOX_FEATURE_PIDOF_SINGLE
bool "Enable argument for single shot (-s)"
- default y
+ default n
depends on BUSYBOX_PIDOF
help
Support argument '-s' for returning only the first pid found.
config BUSYBOX_FEATURE_PIDOF_OMIT
bool "Enable argument for omitting pids (-o)"
- default y
+ default n
depends on BUSYBOX_PIDOF
help
Support argument '-o' for omitting the given pids in output.
@@ -188,6 +188,13 @@ config BUSYBOX_FEATURE_TOPMEM
help
Enable 's' in top (gives lots of memory info).
+config BUSYBOX_FEATURE_SHOW_THREADS
+ bool "Support for showing threads in ps/top"
+ default y
+ depends on BUSYBOX_PS || BUSYBOX_TOP
+ help
+ Enables ps -T option and 'h' command in top
+
config BUSYBOX_UPTIME
bool "uptime"
default y
@@ -203,5 +210,4 @@ config BUSYBOX_WATCH
watch is used to execute a program periodically, showing
output to the screen.
-
endmenu
diff --git a/package/busybox/config/shell/Config.in b/package/busybox/config/shell/Config.in
index 82718cd1a..30ed639c2 100644
--- a/package/busybox/config/shell/Config.in
+++ b/package/busybox/config/shell/Config.in
@@ -15,6 +15,7 @@ choice
config BUSYBOX_FEATURE_SH_IS_ASH
select BUSYBOX_ASH
bool "ash"
+ depends on !BUSYBOX_NOMMU
config BUSYBOX_FEATURE_SH_IS_HUSH
select BUSYBOX_HUSH
@@ -36,6 +37,7 @@ endchoice
config BUSYBOX_ASH
bool "ash"
default y
+ depends on !BUSYBOX_NOMMU
help
Tha 'ash' shell adds about 60k in the default configuration and is
the most complete and most pedantically correct shell included with
@@ -57,23 +59,6 @@ config BUSYBOX_ASH_JOB_CONTROL
help
Enable job control in the ash shell.
-config BUSYBOX_ASH_READ_NCHARS
- bool "'read -n N' and 'read -s' support"
- default n
- depends on BUSYBOX_ASH
- help
- 'read -n N' will return a value after N characters have been read.
- 'read -s' will read without echoing the user's input.
-
-config BUSYBOX_ASH_READ_TIMEOUT
- bool "'read -t S' support"
- default n
- depends on BUSYBOX_ASH
- help
- 'read -t S' will return a value after S seconds have passed.
- This implementation will allow fractional seconds, expressed
- as a decimal fraction, e.g. 'read -t 2.5 foo'.
-
config BUSYBOX_ASH_ALIAS
bool "alias support"
default y
@@ -187,7 +172,7 @@ config BUSYBOX_HUSH_INTERACTIVE
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.
+ from stdin just like a shell script from a file.
No prompt, no PS1/PS2 magic shell variables.
config BUSYBOX_HUSH_JOB
@@ -250,6 +235,14 @@ config BUSYBOX_HUSH_EXPORT_N
help
Enable support for export '-n' option in hush. It is a bash extension.
+config BUSYBOX_HUSH_RANDOM_SUPPORT
+ bool "Pseudorandom generator and $RANDOM variable"
+ default n
+ depends on BUSYBOX_HUSH
+ help
+ Enable pseudorandom generator and dynamic variable "$RANDOM".
+ Each read of "$RANDOM" will generate a new pseudorandom value.
+
config BUSYBOX_LASH
bool "lash (deprecated: aliased to hush)"
default n
diff --git a/package/busybox/config/sysklogd/Config.in b/package/busybox/config/sysklogd/Config.in
index 0df67053c..6bc26d977 100644
--- a/package/busybox/config/sysklogd/Config.in
+++ b/package/busybox/config/sysklogd/Config.in
@@ -66,7 +66,7 @@ config BUSYBOX_FEATURE_IPC_SYSLOG
config BUSYBOX_FEATURE_IPC_SYSLOG_BUFFER_SIZE
int "Circular buffer size in Kbytes (minimum 4KB)"
- default 16
+ default 32
range 4 2147483647
depends on BUSYBOX_FEATURE_IPC_SYSLOG
help
diff --git a/package/busybox/config/util-linux/Config.in b/package/busybox/config/util-linux/Config.in
index 5951e8dec..d4be6854b 100644
--- a/package/busybox/config/util-linux/Config.in
+++ b/package/busybox/config/util-linux/Config.in
@@ -213,6 +213,12 @@ config BUSYBOX_FSCK_MINIX
check for and attempt to repair any corruption that occurs to a minix
filesystem.
+config BUSYBOX_MKFS_EXT2
+ bool "mkfs_ext2"
+ default n
+ help
+ Utility to create EXT2 filesystems.
+
config BUSYBOX_MKFS_MINIX
bool "mkfs_minix"
default n
@@ -233,6 +239,12 @@ config BUSYBOX_FEATURE_MINIX2
this. If you enabled 'mkfs_minix' then you almost certainly want to
be using the version 2 filesystem support.
+config BUSYBOX_MKFS_REISER
+ bool "mkfs_reiser"
+ default n
+ help
+ Utility to create ReiserFS filesystems.
+
config BUSYBOX_MKFS_VFAT
bool "mkfs_vfat"
default n
@@ -259,7 +271,7 @@ config BUSYBOX_FEATURE_GETOPT_LONG
config BUSYBOX_HEXDUMP
bool "hexdump"
- default n
+ default y
help
The hexdump utility is used to display binary data in a readable
way that is comparable to the output from most hex editors.
@@ -337,6 +349,24 @@ config BUSYBOX_LOSETUP
file or block device, and to query the status of a loop device. This
version does not currently support enabling data encryption.
+config BUSYBOX_LSPCI
+ bool "lspci"
+ default n
+ help
+ lspci is a utility for displaying information about PCI buses in the
+ system and devices connected to them.
+
+ This version uses sysfs (/sys/bus/pci/devices) only.
+
+config BUSYBOX_LSUSB
+ bool "lsusb"
+ default n
+ help
+ lsusb is a utility for displaying information about USB buses in the
+ system and devices connected to them.
+
+ This version uses sysfs (/sys/bus/usb/devices) only.
+
config BUSYBOX_MDEV
bool "mdev"
default y
@@ -446,6 +476,13 @@ config BUSYBOX_FEATURE_VOLUMEID_EXT
help
TODO
+config BUSYBOX_FEATURE_VOLUMEID_BTRFS
+ bool "btrfs filesystem"
+ default n
+ depends on BUSYBOX_VOLUMEID
+ help
+ TODO
+
config BUSYBOX_FEATURE_VOLUMEID_REISERFS
bool "Reiser filesystem"
default n
@@ -684,12 +721,13 @@ config BUSYBOX_FEATURE_MOUNT_HELPERS
config BUSYBOX_FEATURE_MOUNT_LABEL
bool "Support specifiying devices by label or UUID"
- default n
+ default y
depends on BUSYBOX_MOUNT
select BUSYBOX_VOLUMEID
help
This allows for specifying a device by label or uuid, rather than by
name. This feature utilizes the same functionality as blkid/findfs.
+ This also enables label or uuid support for swapon.
config BUSYBOX_FEATURE_MOUNT_NFS
bool "Support mounting NFS file systems"
@@ -738,7 +776,7 @@ config BUSYBOX_PIVOT_ROOT
config BUSYBOX_RDATE
bool "rdate"
- default n
+ default y
help
The rdate utility allows you to synchronize the date and time of your
system clock with the date and time of a remote networked system using
diff --git a/package/busybox/patches/001-ipkg.patch b/package/busybox/patches/001-ipkg.patch
index b28473e02..7295e4c49 100644
--- a/package/busybox/patches/001-ipkg.patch
+++ b/package/busybox/patches/001-ipkg.patch
@@ -1,6 +1,6 @@
diff -Nur busybox-1.16.1.orig/archival/Config.in busybox-1.16.1/archival/Config.in
--- busybox-1.16.1.orig/archival/Config.in 2010-03-28 19:43:35.000000000 +0200
-+++ busybox-1.16.1/archival/Config.in 2010-04-04 13:52:46.000000000 +0200
++++ busybox-1.16.1/archival/Config.in 2010-04-22 19:18:12.000000000 +0200
@@ -187,6 +187,14 @@
are actually slower than gzip at equivalent compression ratios
and take up 3.2K of code.
@@ -18,7 +18,7 @@ diff -Nur busybox-1.16.1.orig/archival/Config.in busybox-1.16.1/archival/Config.
default n
diff -Nur busybox-1.16.1.orig/archival/ipkg.c busybox-1.16.1/archival/ipkg.c
--- busybox-1.16.1.orig/archival/ipkg.c 1970-01-01 01:00:00.000000000 +0100
-+++ busybox-1.16.1/archival/ipkg.c 2010-04-04 13:52:46.000000000 +0200
++++ busybox-1.16.1/archival/ipkg.c 2010-04-22 19:18:12.000000000 +0200
@@ -0,0 +1,28 @@
+/* ipkg.c - the itsy package management system
+
@@ -50,7 +50,7 @@ diff -Nur busybox-1.16.1.orig/archival/ipkg.c busybox-1.16.1/archival/ipkg.c
+}
diff -Nur busybox-1.16.1.orig/archival/Kbuild busybox-1.16.1/archival/Kbuild
--- busybox-1.16.1.orig/archival/Kbuild 2010-03-20 03:58:07.000000000 +0100
-+++ busybox-1.16.1/archival/Kbuild 2010-04-04 13:52:46.000000000 +0200
++++ busybox-1.16.1/archival/Kbuild 2010-04-22 19:18:12.000000000 +0200
@@ -16,6 +16,7 @@
lib-$(CONFIG_DPKG_DEB) += dpkg_deb.o
lib-$(CONFIG_GUNZIP) += bbunzip.o
@@ -61,7 +61,7 @@ diff -Nur busybox-1.16.1.orig/archival/Kbuild busybox-1.16.1/archival/Kbuild
lib-$(CONFIG_RPM2CPIO) += rpm2cpio.o
diff -Nur busybox-1.16.1.orig/archival/libipkg/args.c busybox-1.16.1/archival/libipkg/args.c
--- busybox-1.16.1.orig/archival/libipkg/args.c 1970-01-01 01:00:00.000000000 +0100
-+++ busybox-1.16.1/archival/libipkg/args.c 2010-04-04 13:52:46.000000000 +0200
++++ busybox-1.16.1/archival/libipkg/args.c 2010-04-22 19:18:12.000000000 +0200
@@ -0,0 +1,242 @@
+/* args.c - parse command-line args
+
@@ -307,7 +307,7 @@ diff -Nur busybox-1.16.1.orig/archival/libipkg/args.c busybox-1.16.1/archival/li
+}
diff -Nur busybox-1.16.1.orig/archival/libipkg/args.h busybox-1.16.1/archival/libipkg/args.h
--- busybox-1.16.1.orig/archival/libipkg/args.h 1970-01-01 01:00:00.000000000 +0100
-+++ busybox-1.16.1/archival/libipkg/args.h 2010-04-04 13:52:46.000000000 +0200
++++ busybox-1.16.1/archival/libipkg/args.h 2010-04-22 19:18:12.000000000 +0200
@@ -0,0 +1,72 @@
+/* args.h - parse command-line args
+
@@ -383,7 +383,7 @@ diff -Nur busybox-1.16.1.orig/archival/libipkg/args.h busybox-1.16.1/archival/li
+#endif
diff -Nur busybox-1.16.1.orig/archival/libipkg/conffile.c busybox-1.16.1/archival/libipkg/conffile.c
--- busybox-1.16.1.orig/archival/libipkg/conffile.c 1970-01-01 01:00:00.000000000 +0100
-+++ busybox-1.16.1/archival/libipkg/conffile.c 2010-04-04 13:52:46.000000000 +0200
++++ busybox-1.16.1/archival/libipkg/conffile.c 2010-04-22 19:18:12.000000000 +0200
@@ -0,0 +1,65 @@
+/* conffile.c - the itsy package management system
+
@@ -452,7 +452,7 @@ diff -Nur busybox-1.16.1.orig/archival/libipkg/conffile.c busybox-1.16.1/archiva
+}
diff -Nur busybox-1.16.1.orig/archival/libipkg/conffile.h busybox-1.16.1/archival/libipkg/conffile.h
--- busybox-1.16.1.orig/archival/libipkg/conffile.h 1970-01-01 01:00:00.000000000 +0100
-+++ busybox-1.16.1/archival/libipkg/conffile.h 2010-04-04 13:52:46.000000000 +0200
++++ busybox-1.16.1/archival/libipkg/conffile.h 2010-04-22 19:18:12.000000000 +0200
@@ -0,0 +1,30 @@
+/* conffile.h - the itsy package management system
+
@@ -486,7 +486,7 @@ diff -Nur busybox-1.16.1.orig/archival/libipkg/conffile.h busybox-1.16.1/archiva
+
diff -Nur busybox-1.16.1.orig/archival/libipkg/conffile_list.c busybox-1.16.1/archival/libipkg/conffile_list.c
--- busybox-1.16.1.orig/archival/libipkg/conffile_list.c 1970-01-01 01:00:00.000000000 +0100
-+++ busybox-1.16.1/archival/libipkg/conffile_list.c 2010-04-04 13:52:46.000000000 +0200
++++ busybox-1.16.1/archival/libipkg/conffile_list.c 2010-04-22 19:18:12.000000000 +0200
@@ -0,0 +1,47 @@
+/* conffile_list.c - the itsy package management system
+
@@ -537,7 +537,7 @@ diff -Nur busybox-1.16.1.orig/archival/libipkg/conffile_list.c busybox-1.16.1/ar
+
diff -Nur busybox-1.16.1.orig/archival/libipkg/conffile_list.h busybox-1.16.1/archival/libipkg/conffile_list.h
--- busybox-1.16.1.orig/archival/libipkg/conffile_list.h 1970-01-01 01:00:00.000000000 +0100
-+++ busybox-1.16.1/archival/libipkg/conffile_list.h 2010-04-04 13:52:46.000000000 +0200
++++ busybox-1.16.1/archival/libipkg/conffile_list.h 2010-04-22 19:18:12.000000000 +0200
@@ -0,0 +1,36 @@
+/* conffile_list.h - the itsy package management system
+
@@ -577,7 +577,7 @@ diff -Nur busybox-1.16.1.orig/archival/libipkg/conffile_list.h busybox-1.16.1/ar
+
diff -Nur busybox-1.16.1.orig/archival/libipkg/file_util.c busybox-1.16.1/archival/libipkg/file_util.c
--- busybox-1.16.1.orig/archival/libipkg/file_util.c 1970-01-01 01:00:00.000000000 +0100
-+++ busybox-1.16.1/archival/libipkg/file_util.c 2010-04-04 13:52:46.000000000 +0200
++++ busybox-1.16.1/archival/libipkg/file_util.c 2010-04-22 19:18:12.000000000 +0200
@@ -0,0 +1,186 @@
+/* file_util.c - convenience routines for common stat operations
+
@@ -767,7 +767,7 @@ diff -Nur busybox-1.16.1.orig/archival/libipkg/file_util.c busybox-1.16.1/archiv
+
diff -Nur busybox-1.16.1.orig/archival/libipkg/file_util.h busybox-1.16.1/archival/libipkg/file_util.h
--- busybox-1.16.1.orig/archival/libipkg/file_util.h 1970-01-01 01:00:00.000000000 +0100
-+++ busybox-1.16.1/archival/libipkg/file_util.h 2010-04-04 13:52:46.000000000 +0200
++++ busybox-1.16.1/archival/libipkg/file_util.h 2010-04-22 19:18:12.000000000 +0200
@@ -0,0 +1,29 @@
+/* file_util.h - convenience routines for common file operations
+
@@ -800,7 +800,7 @@ diff -Nur busybox-1.16.1.orig/archival/libipkg/file_util.h busybox-1.16.1/archiv
+#endif
diff -Nur busybox-1.16.1.orig/archival/libipkg/hash_table.c busybox-1.16.1/archival/libipkg/hash_table.c
--- busybox-1.16.1.orig/archival/libipkg/hash_table.c 1970-01-01 01:00:00.000000000 +0100
-+++ busybox-1.16.1/archival/libipkg/hash_table.c 2010-04-04 13:52:46.000000000 +0200
++++ busybox-1.16.1/archival/libipkg/hash_table.c 2010-04-22 19:18:12.000000000 +0200
@@ -0,0 +1,155 @@
+/* hash.c - hash tables for ipkg
+
@@ -959,7 +959,7 @@ diff -Nur busybox-1.16.1.orig/archival/libipkg/hash_table.c busybox-1.16.1/archi
+
diff -Nur busybox-1.16.1.orig/archival/libipkg/hash_table.h busybox-1.16.1/archival/libipkg/hash_table.h
--- busybox-1.16.1.orig/archival/libipkg/hash_table.h 1970-01-01 01:00:00.000000000 +0100
-+++ busybox-1.16.1/archival/libipkg/hash_table.h 2010-04-04 13:52:46.000000000 +0200
++++ busybox-1.16.1/archival/libipkg/hash_table.h 2010-04-22 19:18:12.000000000 +0200
@@ -0,0 +1,44 @@
+/* hash.h - hash tables for ipkg
+
@@ -1007,7 +1007,7 @@ diff -Nur busybox-1.16.1.orig/archival/libipkg/hash_table.h busybox-1.16.1/archi
+#endif /* _HASH_TABLE_H_ */
diff -Nur busybox-1.16.1.orig/archival/libipkg/ipkg_cmd.c busybox-1.16.1/archival/libipkg/ipkg_cmd.c
--- busybox-1.16.1.orig/archival/libipkg/ipkg_cmd.c 1970-01-01 01:00:00.000000000 +0100
-+++ busybox-1.16.1/archival/libipkg/ipkg_cmd.c 2010-04-04 13:52:46.000000000 +0200
++++ busybox-1.16.1/archival/libipkg/ipkg_cmd.c 2010-04-22 19:18:12.000000000 +0200
@@ -0,0 +1,1386 @@
+/* ipkg_cmd.c - the itsy package management system
+
@@ -2397,7 +2397,7 @@ diff -Nur busybox-1.16.1.orig/archival/libipkg/ipkg_cmd.c busybox-1.16.1/archiva
+
diff -Nur busybox-1.16.1.orig/archival/libipkg/ipkg_cmd.h busybox-1.16.1/archival/libipkg/ipkg_cmd.h
--- busybox-1.16.1.orig/archival/libipkg/ipkg_cmd.h 1970-01-01 01:00:00.000000000 +0100
-+++ busybox-1.16.1/archival/libipkg/ipkg_cmd.h 2010-04-04 13:52:46.000000000 +0200
++++ busybox-1.16.1/archival/libipkg/ipkg_cmd.h 2010-04-22 19:18:12.000000000 +0200
@@ -0,0 +1,41 @@
+/* ipkg_cmd.h - the itsy package management system
+
@@ -2442,7 +2442,7 @@ diff -Nur busybox-1.16.1.orig/archival/libipkg/ipkg_cmd.h busybox-1.16.1/archiva
+#endif
diff -Nur busybox-1.16.1.orig/archival/libipkg/ipkg_conf.c busybox-1.16.1/archival/libipkg/ipkg_conf.c
--- busybox-1.16.1.orig/archival/libipkg/ipkg_conf.c 1970-01-01 01:00:00.000000000 +0100
-+++ busybox-1.16.1/archival/libipkg/ipkg_conf.c 2010-04-04 13:52:46.000000000 +0200
++++ busybox-1.16.1/archival/libipkg/ipkg_conf.c 2010-04-22 19:18:12.000000000 +0200
@@ -0,0 +1,711 @@
+/* ipkg_conf.c - the itsy package management system
+
@@ -3157,7 +3157,7 @@ diff -Nur busybox-1.16.1.orig/archival/libipkg/ipkg_conf.c busybox-1.16.1/archiv
+}
diff -Nur busybox-1.16.1.orig/archival/libipkg/ipkg_conf.h busybox-1.16.1/archival/libipkg/ipkg_conf.h
--- busybox-1.16.1.orig/archival/libipkg/ipkg_conf.h 1970-01-01 01:00:00.000000000 +0100
-+++ busybox-1.16.1/archival/libipkg/ipkg_conf.h 2010-04-04 13:52:46.000000000 +0200
++++ busybox-1.16.1/archival/libipkg/ipkg_conf.h 2010-04-22 19:18:12.000000000 +0200
@@ -0,0 +1,107 @@
+/* ipkg_conf.h - the itsy package management system
+
@@ -3268,7 +3268,7 @@ diff -Nur busybox-1.16.1.orig/archival/libipkg/ipkg_conf.h busybox-1.16.1/archiv
+#endif
diff -Nur busybox-1.16.1.orig/archival/libipkg/ipkg_configure.c busybox-1.16.1/archival/libipkg/ipkg_configure.c
--- busybox-1.16.1.orig/archival/libipkg/ipkg_configure.c 1970-01-01 01:00:00.000000000 +0100
-+++ busybox-1.16.1/archival/libipkg/ipkg_configure.c 2010-04-04 13:52:46.000000000 +0200
++++ busybox-1.16.1/archival/libipkg/ipkg_configure.c 2010-04-22 19:18:12.000000000 +0200
@@ -0,0 +1,40 @@
+/* ipkg_configure.c - the itsy package management system
+
@@ -3312,7 +3312,7 @@ diff -Nur busybox-1.16.1.orig/archival/libipkg/ipkg_configure.c busybox-1.16.1/a
+
diff -Nur busybox-1.16.1.orig/archival/libipkg/ipkg_configure.h busybox-1.16.1/archival/libipkg/ipkg_configure.h
--- busybox-1.16.1.orig/archival/libipkg/ipkg_configure.h 1970-01-01 01:00:00.000000000 +0100
-+++ busybox-1.16.1/archival/libipkg/ipkg_configure.h 2010-04-04 13:52:46.000000000 +0200
++++ busybox-1.16.1/archival/libipkg/ipkg_configure.h 2010-04-22 19:18:12.000000000 +0200
@@ -0,0 +1,25 @@
+/* ipkg_configure.h - the itsy package management system
+
@@ -3341,7 +3341,7 @@ diff -Nur busybox-1.16.1.orig/archival/libipkg/ipkg_configure.h busybox-1.16.1/a
+#endif
diff -Nur busybox-1.16.1.orig/archival/libipkg/ipkg_download.c busybox-1.16.1/archival/libipkg/ipkg_download.c
--- busybox-1.16.1.orig/archival/libipkg/ipkg_download.c 1970-01-01 01:00:00.000000000 +0100
-+++ busybox-1.16.1/archival/libipkg/ipkg_download.c 2010-04-04 13:52:46.000000000 +0200
++++ busybox-1.16.1/archival/libipkg/ipkg_download.c 2010-04-22 19:18:12.000000000 +0200
@@ -0,0 +1,195 @@
+/* ipkg_download.c - the itsy package management system
+
@@ -3540,7 +3540,7 @@ diff -Nur busybox-1.16.1.orig/archival/libipkg/ipkg_download.c busybox-1.16.1/ar
+}
diff -Nur busybox-1.16.1.orig/archival/libipkg/ipkg_download.h busybox-1.16.1/archival/libipkg/ipkg_download.h
--- busybox-1.16.1.orig/archival/libipkg/ipkg_download.h 1970-01-01 01:00:00.000000000 +0100
-+++ busybox-1.16.1/archival/libipkg/ipkg_download.h 2010-04-04 13:52:46.000000000 +0200
++++ busybox-1.16.1/archival/libipkg/ipkg_download.h 2010-04-22 19:18:12.000000000 +0200
@@ -0,0 +1,30 @@
+/* ipkg_download.h - the itsy package management system
+
@@ -3574,7 +3574,7 @@ diff -Nur busybox-1.16.1.orig/archival/libipkg/ipkg_download.h busybox-1.16.1/ar
+#endif
diff -Nur busybox-1.16.1.orig/archival/libipkg/ipkg.h busybox-1.16.1/archival/libipkg/ipkg.h
--- busybox-1.16.1.orig/archival/libipkg/ipkg.h 1970-01-01 01:00:00.000000000 +0100
-+++ busybox-1.16.1/archival/libipkg/ipkg.h 2010-04-04 13:52:46.000000000 +0200
++++ busybox-1.16.1/archival/libipkg/ipkg.h 2010-04-22 19:18:12.000000000 +0200
@@ -0,0 +1,68 @@
+/* ipkg.h - the itsy package management system
+
@@ -3646,7 +3646,7 @@ diff -Nur busybox-1.16.1.orig/archival/libipkg/ipkg.h busybox-1.16.1/archival/li
+#endif
diff -Nur busybox-1.16.1.orig/archival/libipkg/ipkg_includes.h busybox-1.16.1/archival/libipkg/ipkg_includes.h
--- busybox-1.16.1.orig/archival/libipkg/ipkg_includes.h 1970-01-01 01:00:00.000000000 +0100
-+++ busybox-1.16.1/archival/libipkg/ipkg_includes.h 2010-04-04 13:52:46.000000000 +0200
++++ busybox-1.16.1/archival/libipkg/ipkg_includes.h 2010-04-22 19:18:12.000000000 +0200
@@ -0,0 +1,79 @@
+#ifndef IPKG_INCLUDES_H
+#define IPKG_INCLUDES_H
@@ -3729,7 +3729,7 @@ diff -Nur busybox-1.16.1.orig/archival/libipkg/ipkg_includes.h busybox-1.16.1/ar
+#endif /* IPKG_INCLUDES_H */
diff -Nur busybox-1.16.1.orig/archival/libipkg/ipkg_install.c busybox-1.16.1/archival/libipkg/ipkg_install.c
--- busybox-1.16.1.orig/archival/libipkg/ipkg_install.c 1970-01-01 01:00:00.000000000 +0100
-+++ busybox-1.16.1/archival/libipkg/ipkg_install.c 2010-04-04 13:52:46.000000000 +0200
++++ busybox-1.16.1/archival/libipkg/ipkg_install.c 2010-04-22 19:18:12.000000000 +0200
@@ -0,0 +1,1982 @@
+/* ipkg_install.c - the itsy package management system
+
@@ -5715,7 +5715,7 @@ diff -Nur busybox-1.16.1.orig/archival/libipkg/ipkg_install.c busybox-1.16.1/arc
+#endif
diff -Nur busybox-1.16.1.orig/archival/libipkg/ipkg_install.h busybox-1.16.1/archival/libipkg/ipkg_install.h
--- busybox-1.16.1.orig/archival/libipkg/ipkg_install.h 1970-01-01 01:00:00.000000000 +0100
-+++ busybox-1.16.1/archival/libipkg/ipkg_install.h 2010-04-04 13:52:46.000000000 +0200
++++ busybox-1.16.1/archival/libipkg/ipkg_install.h 2010-04-22 19:18:12.000000000 +0200
@@ -0,0 +1,35 @@
+/* ipkg_install.h - the itsy package management system
+
@@ -5754,7 +5754,7 @@ diff -Nur busybox-1.16.1.orig/archival/libipkg/ipkg_install.h busybox-1.16.1/arc
+#endif
diff -Nur busybox-1.16.1.orig/archival/libipkg/ipkg_message.c busybox-1.16.1/archival/libipkg/ipkg_message.c
--- busybox-1.16.1.orig/archival/libipkg/ipkg_message.c 1970-01-01 01:00:00.000000000 +0100
-+++ busybox-1.16.1/archival/libipkg/ipkg_message.c 2010-04-04 13:52:46.000000000 +0200
++++ busybox-1.16.1/archival/libipkg/ipkg_message.c 2010-04-22 19:18:12.000000000 +0200
@@ -0,0 +1,35 @@
+/* ipkg_message.c - the itsy package management system
+
@@ -5793,7 +5793,7 @@ diff -Nur busybox-1.16.1.orig/archival/libipkg/ipkg_message.c busybox-1.16.1/arc
+}
diff -Nur busybox-1.16.1.orig/archival/libipkg/ipkg_message.h busybox-1.16.1/archival/libipkg/ipkg_message.h
--- busybox-1.16.1.orig/archival/libipkg/ipkg_message.h 1970-01-01 01:00:00.000000000 +0100
-+++ busybox-1.16.1/archival/libipkg/ipkg_message.h 2010-04-04 13:52:46.000000000 +0200
++++ busybox-1.16.1/archival/libipkg/ipkg_message.h 2010-04-22 19:18:12.000000000 +0200
@@ -0,0 +1,32 @@
+/* ipkg_message.h - the itsy package management system
+
@@ -5829,7 +5829,7 @@ diff -Nur busybox-1.16.1.orig/archival/libipkg/ipkg_message.h busybox-1.16.1/arc
+#endif /* _IPKG_MESSAGE_H_ */
diff -Nur busybox-1.16.1.orig/archival/libipkg/ipkg_remove.c busybox-1.16.1/archival/libipkg/ipkg_remove.c
--- busybox-1.16.1.orig/archival/libipkg/ipkg_remove.c 1970-01-01 01:00:00.000000000 +0100
-+++ busybox-1.16.1/archival/libipkg/ipkg_remove.c 2010-04-04 13:52:46.000000000 +0200
++++ busybox-1.16.1/archival/libipkg/ipkg_remove.c 2010-04-22 19:18:12.000000000 +0200
@@ -0,0 +1,385 @@
+/* ipkg_remove.c - the itsy package management system
+
@@ -6218,7 +6218,7 @@ diff -Nur busybox-1.16.1.orig/archival/libipkg/ipkg_remove.c busybox-1.16.1/arch
+}
diff -Nur busybox-1.16.1.orig/archival/libipkg/ipkg_remove.h busybox-1.16.1/archival/libipkg/ipkg_remove.h
--- busybox-1.16.1.orig/archival/libipkg/ipkg_remove.h 1970-01-01 01:00:00.000000000 +0100
-+++ busybox-1.16.1/archival/libipkg/ipkg_remove.h 2010-04-04 13:52:46.000000000 +0200
++++ busybox-1.16.1/archival/libipkg/ipkg_remove.h 2010-04-22 19:18:12.000000000 +0200
@@ -0,0 +1,33 @@
+/* ipkg_remove.h - the itsy package management system
+
@@ -6255,7 +6255,7 @@ diff -Nur busybox-1.16.1.orig/archival/libipkg/ipkg_remove.h busybox-1.16.1/arch
+#endif
diff -Nur busybox-1.16.1.orig/archival/libipkg/ipkg_upgrade.c busybox-1.16.1/archival/libipkg/ipkg_upgrade.c
--- busybox-1.16.1.orig/archival/libipkg/ipkg_upgrade.c 1970-01-01 01:00:00.000000000 +0100
-+++ busybox-1.16.1/archival/libipkg/ipkg_upgrade.c 2010-04-04 13:52:46.000000000 +0200
++++ busybox-1.16.1/archival/libipkg/ipkg_upgrade.c 2010-04-22 19:18:12.000000000 +0200
@@ -0,0 +1,79 @@
+/* ipkg_upgrade.c - the itsy package management system
+
@@ -6338,7 +6338,7 @@ diff -Nur busybox-1.16.1.orig/archival/libipkg/ipkg_upgrade.c busybox-1.16.1/arc
+}
diff -Nur busybox-1.16.1.orig/archival/libipkg/ipkg_upgrade.h busybox-1.16.1/archival/libipkg/ipkg_upgrade.h
--- busybox-1.16.1.orig/archival/libipkg/ipkg_upgrade.h 1970-01-01 01:00:00.000000000 +0100
-+++ busybox-1.16.1/archival/libipkg/ipkg_upgrade.h 2010-04-04 13:52:46.000000000 +0200
++++ busybox-1.16.1/archival/libipkg/ipkg_upgrade.h 2010-04-22 19:18:12.000000000 +0200
@@ -0,0 +1,18 @@
+/* ipkg_upgrade.c - the itsy package management system
+
@@ -6360,7 +6360,7 @@ diff -Nur busybox-1.16.1.orig/archival/libipkg/ipkg_upgrade.h busybox-1.16.1/arc
+int ipkg_upgrade_pkg(ipkg_conf_t *conf, pkg_t *old);
diff -Nur busybox-1.16.1.orig/archival/libipkg/ipkg_utils.c busybox-1.16.1/archival/libipkg/ipkg_utils.c
--- busybox-1.16.1.orig/archival/libipkg/ipkg_utils.c 1970-01-01 01:00:00.000000000 +0100
-+++ busybox-1.16.1/archival/libipkg/ipkg_utils.c 2010-04-04 13:52:46.000000000 +0200
++++ busybox-1.16.1/archival/libipkg/ipkg_utils.c 2010-04-22 19:18:12.000000000 +0200
@@ -0,0 +1,185 @@
+/* ipkg_utils.c - the itsy package management system
+
@@ -6549,7 +6549,7 @@ diff -Nur busybox-1.16.1.orig/archival/libipkg/ipkg_utils.c busybox-1.16.1/archi
+
diff -Nur busybox-1.16.1.orig/archival/libipkg/ipkg_utils.h busybox-1.16.1/archival/libipkg/ipkg_utils.h
--- busybox-1.16.1.orig/archival/libipkg/ipkg_utils.h 1970-01-01 01:00:00.000000000 +0100
-+++ busybox-1.16.1/archival/libipkg/ipkg_utils.h 2010-04-04 13:52:46.000000000 +0200
++++ busybox-1.16.1/archival/libipkg/ipkg_utils.h 2010-04-22 19:18:12.000000000 +0200
@@ -0,0 +1,29 @@
+/* ipkg_utils.h - the itsy package management system
+
@@ -6582,7 +6582,7 @@ diff -Nur busybox-1.16.1.orig/archival/libipkg/ipkg_utils.h busybox-1.16.1/archi
+#endif
diff -Nur busybox-1.16.1.orig/archival/libipkg/Kbuild busybox-1.16.1/archival/libipkg/Kbuild
--- busybox-1.16.1.orig/archival/libipkg/Kbuild 1970-01-01 01:00:00.000000000 +0100
-+++ busybox-1.16.1/archival/libipkg/Kbuild 2010-04-04 13:52:46.000000000 +0200
++++ busybox-1.16.1/archival/libipkg/Kbuild 2010-04-22 19:18:12.000000000 +0200
@@ -0,0 +1,60 @@
+# Makefile for busybox
+#
@@ -6646,7 +6646,7 @@ diff -Nur busybox-1.16.1.orig/archival/libipkg/Kbuild busybox-1.16.1/archival/li
+CFLAGS += -DIPKGLIBDIR="\"/usr/lib\"" -DHOST_CPU_STR="\"$(IPKG_ARCH)\""
diff -Nur busybox-1.16.1.orig/archival/libipkg/libipkg.c busybox-1.16.1/archival/libipkg/libipkg.c
--- busybox-1.16.1.orig/archival/libipkg/libipkg.c 1970-01-01 01:00:00.000000000 +0100
-+++ busybox-1.16.1/archival/libipkg/libipkg.c 2010-04-04 13:52:46.000000000 +0200
++++ busybox-1.16.1/archival/libipkg/libipkg.c 2010-04-22 19:18:12.000000000 +0200
@@ -0,0 +1,525 @@
+/* ipkglib.c - the itsy package management system
+
@@ -7175,7 +7175,7 @@ diff -Nur busybox-1.16.1.orig/archival/libipkg/libipkg.c busybox-1.16.1/archival
+}
diff -Nur busybox-1.16.1.orig/archival/libipkg/libipkg.h busybox-1.16.1/archival/libipkg/libipkg.h
--- busybox-1.16.1.orig/archival/libipkg/libipkg.h 1970-01-01 01:00:00.000000000 +0100
-+++ busybox-1.16.1/archival/libipkg/libipkg.h 2010-04-04 13:52:46.000000000 +0200
++++ busybox-1.16.1/archival/libipkg/libipkg.h 2010-04-22 19:18:12.000000000 +0200
@@ -0,0 +1,78 @@
+/* ipkglib.h - the itsy package management system
+
@@ -7257,7 +7257,7 @@ diff -Nur busybox-1.16.1.orig/archival/libipkg/libipkg.h busybox-1.16.1/archival
+#endif
diff -Nur busybox-1.16.1.orig/archival/libipkg/nv_pair.c busybox-1.16.1/archival/libipkg/nv_pair.c
--- busybox-1.16.1.orig/archival/libipkg/nv_pair.c 1970-01-01 01:00:00.000000000 +0100
-+++ busybox-1.16.1/archival/libipkg/nv_pair.c 2010-04-04 13:52:46.000000000 +0200
++++ busybox-1.16.1/archival/libipkg/nv_pair.c 2010-04-22 19:18:12.000000000 +0200
@@ -0,0 +1,40 @@
+/* nv_pair.c - the itsy package management system
+
@@ -7301,7 +7301,7 @@ diff -Nur busybox-1.16.1.orig/archival/libipkg/nv_pair.c busybox-1.16.1/archival
+
diff -Nur busybox-1.16.1.orig/archival/libipkg/nv_pair.h busybox-1.16.1/archival/libipkg/nv_pair.h
--- busybox-1.16.1.orig/archival/libipkg/nv_pair.h 1970-01-01 01:00:00.000000000 +0100
-+++ busybox-1.16.1/archival/libipkg/nv_pair.h 2010-04-04 13:52:46.000000000 +0200
++++ busybox-1.16.1/archival/libipkg/nv_pair.h 2010-04-22 19:18:12.000000000 +0200
@@ -0,0 +1,32 @@
+/* nv_pair.h - the itsy package management system
+
@@ -7337,7 +7337,7 @@ diff -Nur busybox-1.16.1.orig/archival/libipkg/nv_pair.h busybox-1.16.1/archival
+
diff -Nur busybox-1.16.1.orig/archival/libipkg/nv_pair_list.c busybox-1.16.1/archival/libipkg/nv_pair_list.c
--- busybox-1.16.1.orig/archival/libipkg/nv_pair_list.c 1970-01-01 01:00:00.000000000 +0100
-+++ busybox-1.16.1/archival/libipkg/nv_pair_list.c 2010-04-04 13:52:46.000000000 +0200
++++ busybox-1.16.1/archival/libipkg/nv_pair_list.c 2010-04-22 19:18:12.000000000 +0200
@@ -0,0 +1,98 @@
+/* nv_pair_list.c - the itsy package management system
+
@@ -7439,7 +7439,7 @@ diff -Nur busybox-1.16.1.orig/archival/libipkg/nv_pair_list.c busybox-1.16.1/arc
+}
diff -Nur busybox-1.16.1.orig/archival/libipkg/nv_pair_list.h busybox-1.16.1/archival/libipkg/nv_pair_list.h
--- busybox-1.16.1.orig/archival/libipkg/nv_pair_list.h 1970-01-01 01:00:00.000000000 +0100
-+++ busybox-1.16.1/archival/libipkg/nv_pair_list.h 2010-04-04 13:52:46.000000000 +0200
++++ busybox-1.16.1/archival/libipkg/nv_pair_list.h 2010-04-22 19:18:12.000000000 +0200
@@ -0,0 +1,60 @@
+/* nv_pair_list.h - the itsy package management system
+
@@ -7503,7 +7503,7 @@ diff -Nur busybox-1.16.1.orig/archival/libipkg/nv_pair_list.h busybox-1.16.1/arc
+
diff -Nur busybox-1.16.1.orig/archival/libipkg/pkg.c busybox-1.16.1/archival/libipkg/pkg.c
--- busybox-1.16.1.orig/archival/libipkg/pkg.c 1970-01-01 01:00:00.000000000 +0100
-+++ busybox-1.16.1/archival/libipkg/pkg.c 2010-04-04 13:52:46.000000000 +0200
++++ busybox-1.16.1/archival/libipkg/pkg.c 2010-04-22 19:18:12.000000000 +0200
@@ -0,0 +1,1757 @@
+/* pkg.c - the itsy package management system
+
@@ -9264,7 +9264,7 @@ diff -Nur busybox-1.16.1.orig/archival/libipkg/pkg.c busybox-1.16.1/archival/lib
+}
diff -Nur busybox-1.16.1.orig/archival/libipkg/pkg_depends.c busybox-1.16.1/archival/libipkg/pkg_depends.c
--- busybox-1.16.1.orig/archival/libipkg/pkg_depends.c 1970-01-01 01:00:00.000000000 +0100
-+++ busybox-1.16.1/archival/libipkg/pkg_depends.c 2010-04-04 13:52:46.000000000 +0200
++++ busybox-1.16.1/archival/libipkg/pkg_depends.c 2010-04-22 19:18:12.000000000 +0200
@@ -0,0 +1,1032 @@
+/* pkg_depends.c - the itsy package management system
+
@@ -10300,7 +10300,7 @@ diff -Nur busybox-1.16.1.orig/archival/libipkg/pkg_depends.c busybox-1.16.1/arch
+}
diff -Nur busybox-1.16.1.orig/archival/libipkg/pkg_depends.h busybox-1.16.1/archival/libipkg/pkg_depends.h
--- busybox-1.16.1.orig/archival/libipkg/pkg_depends.h 1970-01-01 01:00:00.000000000 +0100
-+++ busybox-1.16.1/archival/libipkg/pkg_depends.h 2010-04-04 13:52:46.000000000 +0200
++++ busybox-1.16.1/archival/libipkg/pkg_depends.h 2010-04-22 19:18:12.000000000 +0200
@@ -0,0 +1,105 @@
+/* pkg_depends.h - the itsy package management system
+
@@ -10409,7 +10409,7 @@ diff -Nur busybox-1.16.1.orig/archival/libipkg/pkg_depends.h busybox-1.16.1/arch
+#endif
diff -Nur busybox-1.16.1.orig/archival/libipkg/pkg_dest.c busybox-1.16.1/archival/libipkg/pkg_dest.c
--- busybox-1.16.1.orig/archival/libipkg/pkg_dest.c 1970-01-01 01:00:00.000000000 +0100
-+++ busybox-1.16.1/archival/libipkg/pkg_dest.c 2010-04-04 13:52:46.000000000 +0200
++++ busybox-1.16.1/archival/libipkg/pkg_dest.c 2010-04-22 19:18:12.000000000 +0200
@@ -0,0 +1,92 @@
+/* pkg_dest.c - the itsy package management system
+
@@ -10505,7 +10505,7 @@ diff -Nur busybox-1.16.1.orig/archival/libipkg/pkg_dest.c busybox-1.16.1/archiva
+}
diff -Nur busybox-1.16.1.orig/archival/libipkg/pkg_dest.h busybox-1.16.1/archival/libipkg/pkg_dest.h
--- busybox-1.16.1.orig/archival/libipkg/pkg_dest.h 1970-01-01 01:00:00.000000000 +0100
-+++ busybox-1.16.1/archival/libipkg/pkg_dest.h 2010-04-04 13:52:46.000000000 +0200
++++ busybox-1.16.1/archival/libipkg/pkg_dest.h 2010-04-22 19:18:12.000000000 +0200
@@ -0,0 +1,38 @@
+/* pkg_dest.h - the itsy package management system
+
@@ -10547,7 +10547,7 @@ diff -Nur busybox-1.16.1.orig/archival/libipkg/pkg_dest.h busybox-1.16.1/archiva
+
diff -Nur busybox-1.16.1.orig/archival/libipkg/pkg_dest_list.c busybox-1.16.1/archival/libipkg/pkg_dest_list.c
--- busybox-1.16.1.orig/archival/libipkg/pkg_dest_list.c 1970-01-01 01:00:00.000000000 +0100
-+++ busybox-1.16.1/archival/libipkg/pkg_dest_list.c 2010-04-04 13:52:46.000000000 +0200
++++ busybox-1.16.1/archival/libipkg/pkg_dest_list.c 2010-04-22 19:18:12.000000000 +0200
@@ -0,0 +1,85 @@
+/* pkg_dest_list.c - the itsy package management system
+
@@ -10636,7 +10636,7 @@ diff -Nur busybox-1.16.1.orig/archival/libipkg/pkg_dest_list.c busybox-1.16.1/ar
+}
diff -Nur busybox-1.16.1.orig/archival/libipkg/pkg_dest_list.h busybox-1.16.1/archival/libipkg/pkg_dest_list.h
--- busybox-1.16.1.orig/archival/libipkg/pkg_dest_list.h 1970-01-01 01:00:00.000000000 +0100
-+++ busybox-1.16.1/archival/libipkg/pkg_dest_list.h 2010-04-04 13:52:46.000000000 +0200
++++ busybox-1.16.1/archival/libipkg/pkg_dest_list.h 2010-04-22 19:18:12.000000000 +0200
@@ -0,0 +1,50 @@
+/* pkg_dest_list.h - the itsy package management system
+
@@ -10690,8 +10690,8 @@ diff -Nur busybox-1.16.1.orig/archival/libipkg/pkg_dest_list.h busybox-1.16.1/ar
+
diff -Nur busybox-1.16.1.orig/archival/libipkg/pkg_extract.c busybox-1.16.1/archival/libipkg/pkg_extract.c
--- busybox-1.16.1.orig/archival/libipkg/pkg_extract.c 1970-01-01 01:00:00.000000000 +0100
-+++ busybox-1.16.1/archival/libipkg/pkg_extract.c 2010-04-04 13:52:46.000000000 +0200
-@@ -0,0 +1,225 @@
++++ busybox-1.16.1/archival/libipkg/pkg_extract.c 2010-04-22 19:33:49.000000000 +0200
+@@ -0,0 +1,255 @@
+/* pkg_extract.c - the itsy package management system
+
+ Carl D. Worth
@@ -10725,6 +10725,36 @@ diff -Nur busybox-1.16.1.orig/archival/libipkg/pkg_extract.c busybox-1.16.1/arch
+#define IPKG_DATA_ARCHIVE "data.tar.gz"
+#define IPKG_CONTROL_FILE "control"
+
++static void FAST_FUNC ipkg_data_extract_all_prefix(archive_handle_t *archive_handle)
++{
++ char *name_ptr = archive_handle->file_header->name;
++
++ /* Skip all leading "/" */
++ while (*name_ptr == '/')
++ name_ptr++;
++ /* Skip all leading "./" and "../" */
++ while (name_ptr[0] == '.') {
++ if (name_ptr[1] == '.' && name_ptr[2] == '/')
++ name_ptr++;
++ if (name_ptr[1] != '/')
++ break;
++ name_ptr += 2;
++ }
++
++ if (name_ptr[0] != '\0') {
++ archive_handle->file_header->name = xasprintf("%s%s", archive_handle->dpkg__buffer, name_ptr);
++ data_extract_all(archive_handle);
++ }
++}
++
++static void FAST_FUNC ipkg_data_extract_to_buffer(archive_handle_t *archive_handle)
++{
++ unsigned size = archive_handle->file_header->size;
++
++ archive_handle->dpkg__buffer = xzalloc(size + 1);
++ xread(archive_handle->src_fd, archive_handle->dpkg__buffer, size);
++}
++
+static void extract_ipkg_file_to_dir(pkg_t *pkg, const char *dir, const char *filename)
+{
+ archive_handle_t *archive;
@@ -10735,9 +10765,9 @@ diff -Nur busybox-1.16.1.orig/archival/libipkg/pkg_extract.c busybox-1.16.1/arch
+ archive->src_fd = xopen(pkg->local_filename, O_RDONLY);
+ archive->filter = filter_accept_list;
+ llist_add_to(&(archive->accept), (char *)filename);
-+ archive->buffer = path;
-+ archive->action_data = data_extract_all_prefix;
-+ archive->ah_flags |= ARCHIVE_EXTRACT_UNCONDITIONAL;
++ archive->dpkg__buffer = path;
++ archive->action_data = ipkg_data_extract_all_prefix;
++ archive->ah_flags |= ARCHIVE_UNLINK_OLD;
+ while( get_header_tar_gz(archive) == EXIT_SUCCESS );
+ close(archive->src_fd);
+ free(archive->accept);
@@ -10749,15 +10779,15 @@ diff -Nur busybox-1.16.1.orig/archival/libipkg/pkg_extract.c busybox-1.16.1/arch
+{
+ unsigned int size = strlen(archive->file_header->name) + 2;
+
-+ if (archive->buffer == NULL) {
-+ archive->buffer = xmalloc(size);
-+ strcpy(archive->buffer, archive->file_header->name);
++ if (archive->dpkg__buffer == NULL) {
++ archive->dpkg__buffer = xmalloc(size);
++ strcpy(archive->dpkg__buffer, archive->file_header->name);
+ } else {
-+ size += strlen(archive->buffer);
-+ archive->buffer = xrealloc(archive->buffer, size);
-+ strcat(archive->buffer, archive->file_header->name);
++ size += strlen(archive->dpkg__buffer);
++ archive->dpkg__buffer = xrealloc(archive->dpkg__buffer, size);
++ strcat(archive->dpkg__buffer, archive->file_header->name);
+ }
-+ strcat(archive->buffer, "\n");
++ strcat(archive->dpkg__buffer, "\n");
+ data_skip(archive);
+}
+
@@ -10773,11 +10803,11 @@ diff -Nur busybox-1.16.1.orig/archival/libipkg/pkg_extract.c busybox-1.16.1/arch
+ archive->src_fd = xopen(name, O_RDONLY);
+ archive->filter = filter_accept_list;
+ llist_add_to(&(archive->accept), (char *)filename);
-+ archive->action_data = data_extract_to_buffer;
++ archive->action_data = ipkg_data_extract_to_buffer;
+ while( get_header_tar_gz(archive) == EXIT_SUCCESS );
+ close(archive->src_fd);
-+ fputs(archive->buffer, stream);
-+ free(archive->buffer);
++ fputs(archive->dpkg__buffer, stream);
++ free(archive->dpkg__buffer);
+ free(archive->accept);
+ free(archive);
+ free(name);
@@ -10802,9 +10832,9 @@ diff -Nur busybox-1.16.1.orig/archival/libipkg/pkg_extract.c busybox-1.16.1/arch
+ archive = init_handle();
+ archive->src_fd = xopen(name, O_RDONLY);
+ archive->filter = filter_accept_all;
-+ archive->buffer = path;
-+ archive->action_data = data_extract_all_prefix;
-+ archive->ah_flags |= ARCHIVE_CREATE_LEADING_DIRS | ARCHIVE_PRESERVE_DATE | ARCHIVE_EXTRACT_UNCONDITIONAL;
++ archive->dpkg__buffer = path;
++ archive->action_data = ipkg_data_extract_all_prefix;
++ archive->ah_flags |= ARCHIVE_CREATE_LEADING_DIRS | ARCHIVE_RESTORE_DATE | ARCHIVE_UNLINK_OLD;
+ while( get_header_tar_gz(archive) == EXIT_SUCCESS );
+ close(archive->src_fd);
+ free(archive);
@@ -10826,9 +10856,9 @@ diff -Nur busybox-1.16.1.orig/archival/libipkg/pkg_extract.c busybox-1.16.1/arch
+ archive = init_handle();
+ archive->src_fd = xopen(name, O_RDONLY);
+ archive->filter = filter_accept_all;
-+ archive->buffer = path;
-+ archive->action_data = data_extract_all_prefix;
-+ archive->ah_flags |= ARCHIVE_CREATE_LEADING_DIRS | ARCHIVE_PRESERVE_DATE | ARCHIVE_EXTRACT_UNCONDITIONAL;
++ archive->dpkg__buffer = path;
++ archive->action_data = ipkg_data_extract_all_prefix;
++ archive->ah_flags |= ARCHIVE_CREATE_LEADING_DIRS | ARCHIVE_RESTORE_DATE | ARCHIVE_UNLINK_OLD;
+ while( get_header_tar_gz(archive) == EXIT_SUCCESS );
+ close(archive->src_fd);
+ free(archive);
@@ -10910,8 +10940,8 @@ diff -Nur busybox-1.16.1.orig/archival/libipkg/pkg_extract.c busybox-1.16.1/arch
+ archive->action_data = data_extract_file_name_to_buffer;
+ while( get_header_tar_gz(archive) == EXIT_SUCCESS );
+ close(archive->src_fd);
-+ fputs(archive->buffer, file);
-+ free(archive->buffer);
++ fputs(archive->dpkg__buffer, file);
++ free(archive->dpkg__buffer);
+ free(archive);
+ free(name);
+
@@ -10919,7 +10949,7 @@ diff -Nur busybox-1.16.1.orig/archival/libipkg/pkg_extract.c busybox-1.16.1/arch
+}
diff -Nur busybox-1.16.1.orig/archival/libipkg/pkg_extract.h busybox-1.16.1/archival/libipkg/pkg_extract.h
--- busybox-1.16.1.orig/archival/libipkg/pkg_extract.h 1970-01-01 01:00:00.000000000 +0100
-+++ busybox-1.16.1/archival/libipkg/pkg_extract.h 2010-04-04 13:52:46.000000000 +0200
++++ busybox-1.16.1/archival/libipkg/pkg_extract.h 2010-04-22 19:18:12.000000000 +0200
@@ -0,0 +1,32 @@
+/* pkg_extract.c - the itsy package management system
+
@@ -10955,7 +10985,7 @@ diff -Nur busybox-1.16.1.orig/archival/libipkg/pkg_extract.h busybox-1.16.1/arch
+#endif
diff -Nur busybox-1.16.1.orig/archival/libipkg/pkg.h busybox-1.16.1/archival/libipkg/pkg.h
--- busybox-1.16.1.orig/archival/libipkg/pkg.h 1970-01-01 01:00:00.000000000 +0100
-+++ busybox-1.16.1/archival/libipkg/pkg.h 2010-04-04 13:52:46.000000000 +0200
++++ busybox-1.16.1/archival/libipkg/pkg.h 2010-04-22 19:18:12.000000000 +0200
@@ -0,0 +1,229 @@
+/* pkg.h - the itsy package management system
+
@@ -11188,7 +11218,7 @@ diff -Nur busybox-1.16.1.orig/archival/libipkg/pkg.h busybox-1.16.1/archival/lib
+#endif
diff -Nur busybox-1.16.1.orig/archival/libipkg/pkg_hash.c busybox-1.16.1/archival/libipkg/pkg_hash.c
--- busybox-1.16.1.orig/archival/libipkg/pkg_hash.c 1970-01-01 01:00:00.000000000 +0100
-+++ busybox-1.16.1/archival/libipkg/pkg_hash.c 2010-04-04 13:52:46.000000000 +0200
++++ busybox-1.16.1/archival/libipkg/pkg_hash.c 2010-04-22 19:18:12.000000000 +0200
@@ -0,0 +1,623 @@
+/* ipkg_hash.c - the itsy package management system
+
@@ -11815,7 +11845,7 @@ diff -Nur busybox-1.16.1.orig/archival/libipkg/pkg_hash.c busybox-1.16.1/archiva
+
diff -Nur busybox-1.16.1.orig/archival/libipkg/pkg_hash.h busybox-1.16.1/archival/libipkg/pkg_hash.h
--- busybox-1.16.1.orig/archival/libipkg/pkg_hash.h 1970-01-01 01:00:00.000000000 +0100
-+++ busybox-1.16.1/archival/libipkg/pkg_hash.h 2010-04-04 13:52:46.000000000 +0200
++++ busybox-1.16.1/archival/libipkg/pkg_hash.h 2010-04-22 19:18:12.000000000 +0200
@@ -0,0 +1,61 @@
+/* pkg_hash.h - the itsy package management system
+
@@ -11880,7 +11910,7 @@ diff -Nur busybox-1.16.1.orig/archival/libipkg/pkg_hash.h busybox-1.16.1/archiva
+
diff -Nur busybox-1.16.1.orig/archival/libipkg/pkg_parse.c busybox-1.16.1/archival/libipkg/pkg_parse.c
--- busybox-1.16.1.orig/archival/libipkg/pkg_parse.c 1970-01-01 01:00:00.000000000 +0100
-+++ busybox-1.16.1/archival/libipkg/pkg_parse.c 2010-04-04 13:52:46.000000000 +0200
++++ busybox-1.16.1/archival/libipkg/pkg_parse.c 2010-04-22 19:18:12.000000000 +0200
@@ -0,0 +1,368 @@
+/* pkg_parse.c - the itsy package management system
+
@@ -12252,7 +12282,7 @@ diff -Nur busybox-1.16.1.orig/archival/libipkg/pkg_parse.c busybox-1.16.1/archiv
+}
diff -Nur busybox-1.16.1.orig/archival/libipkg/pkg_parse.h busybox-1.16.1/archival/libipkg/pkg_parse.h
--- busybox-1.16.1.orig/archival/libipkg/pkg_parse.h 1970-01-01 01:00:00.000000000 +0100
-+++ busybox-1.16.1/archival/libipkg/pkg_parse.h 2010-04-04 13:52:46.000000000 +0200
++++ busybox-1.16.1/archival/libipkg/pkg_parse.h 2010-04-22 19:18:12.000000000 +0200
@@ -0,0 +1,31 @@
+/* pkg_parse.h - the itsy package management system
+
@@ -12287,7 +12317,7 @@ diff -Nur busybox-1.16.1.orig/archival/libipkg/pkg_parse.h busybox-1.16.1/archiv
+#endif
diff -Nur busybox-1.16.1.orig/archival/libipkg/pkg_src.c busybox-1.16.1/archival/libipkg/pkg_src.c
--- busybox-1.16.1.orig/archival/libipkg/pkg_src.c 1970-01-01 01:00:00.000000000 +0100
-+++ busybox-1.16.1/archival/libipkg/pkg_src.c 2010-04-04 13:52:46.000000000 +0200
++++ busybox-1.16.1/archival/libipkg/pkg_src.c 2010-04-22 19:18:12.000000000 +0200
@@ -0,0 +1,43 @@
+/* pkg_src.c - the itsy package management system
+
@@ -12334,7 +12364,7 @@ diff -Nur busybox-1.16.1.orig/archival/libipkg/pkg_src.c busybox-1.16.1/archival
+
diff -Nur busybox-1.16.1.orig/archival/libipkg/pkg_src.h busybox-1.16.1/archival/libipkg/pkg_src.h
--- busybox-1.16.1.orig/archival/libipkg/pkg_src.h 1970-01-01 01:00:00.000000000 +0100
-+++ busybox-1.16.1/archival/libipkg/pkg_src.h 2010-04-04 13:52:46.000000000 +0200
++++ busybox-1.16.1/archival/libipkg/pkg_src.h 2010-04-22 19:18:12.000000000 +0200
@@ -0,0 +1,34 @@
+/* pkg_src.h - the itsy package management system
+
@@ -12372,7 +12402,7 @@ diff -Nur busybox-1.16.1.orig/archival/libipkg/pkg_src.h busybox-1.16.1/archival
+#endif
diff -Nur busybox-1.16.1.orig/archival/libipkg/pkg_src_list.c busybox-1.16.1/archival/libipkg/pkg_src_list.c
--- busybox-1.16.1.orig/archival/libipkg/pkg_src_list.c 1970-01-01 01:00:00.000000000 +0100
-+++ busybox-1.16.1/archival/libipkg/pkg_src_list.c 2010-04-04 13:52:46.000000000 +0200
++++ busybox-1.16.1/archival/libipkg/pkg_src_list.c 2010-04-22 19:18:12.000000000 +0200
@@ -0,0 +1,75 @@
+/* pkg_src_list.c - the itsy package management system
+
@@ -12451,7 +12481,7 @@ diff -Nur busybox-1.16.1.orig/archival/libipkg/pkg_src_list.c busybox-1.16.1/arc
+}
diff -Nur busybox-1.16.1.orig/archival/libipkg/pkg_src_list.h busybox-1.16.1/archival/libipkg/pkg_src_list.h
--- busybox-1.16.1.orig/archival/libipkg/pkg_src_list.h 1970-01-01 01:00:00.000000000 +0100
-+++ busybox-1.16.1/archival/libipkg/pkg_src_list.h 2010-04-04 13:52:46.000000000 +0200
++++ busybox-1.16.1/archival/libipkg/pkg_src_list.h 2010-04-22 19:18:12.000000000 +0200
@@ -0,0 +1,57 @@
+/* pkg_src_list.h - the itsy package management system
+
@@ -12512,7 +12542,7 @@ diff -Nur busybox-1.16.1.orig/archival/libipkg/pkg_src_list.h busybox-1.16.1/arc
+
diff -Nur busybox-1.16.1.orig/archival/libipkg/pkg_vec.c busybox-1.16.1/archival/libipkg/pkg_vec.c
--- busybox-1.16.1.orig/archival/libipkg/pkg_vec.c 1970-01-01 01:00:00.000000000 +0100
-+++ busybox-1.16.1/archival/libipkg/pkg_vec.c 2010-04-04 13:52:46.000000000 +0200
++++ busybox-1.16.1/archival/libipkg/pkg_vec.c 2010-04-22 19:18:12.000000000 +0200
@@ -0,0 +1,231 @@
+/* pkg_vec.c - the itsy package management system
+
@@ -12747,7 +12777,7 @@ diff -Nur busybox-1.16.1.orig/archival/libipkg/pkg_vec.c busybox-1.16.1/archival
+
diff -Nur busybox-1.16.1.orig/archival/libipkg/pkg_vec.h busybox-1.16.1/archival/libipkg/pkg_vec.h
--- busybox-1.16.1.orig/archival/libipkg/pkg_vec.h 1970-01-01 01:00:00.000000000 +0100
-+++ busybox-1.16.1/archival/libipkg/pkg_vec.h 2010-04-04 13:52:46.000000000 +0200
++++ busybox-1.16.1/archival/libipkg/pkg_vec.h 2010-04-22 19:18:12.000000000 +0200
@@ -0,0 +1,62 @@
+/* pkg_vec.h - the itsy package management system
+
@@ -12813,7 +12843,7 @@ diff -Nur busybox-1.16.1.orig/archival/libipkg/pkg_vec.h busybox-1.16.1/archival
+
diff -Nur busybox-1.16.1.orig/archival/libipkg/sprintf_alloc.h busybox-1.16.1/archival/libipkg/sprintf_alloc.h
--- busybox-1.16.1.orig/archival/libipkg/sprintf_alloc.h 1970-01-01 01:00:00.000000000 +0100
-+++ busybox-1.16.1/archival/libipkg/sprintf_alloc.h 2010-04-04 13:52:46.000000000 +0200
++++ busybox-1.16.1/archival/libipkg/sprintf_alloc.h 2010-04-22 19:18:12.000000000 +0200
@@ -0,0 +1,25 @@
+/* sprintf_alloca.c -- like sprintf with memory allocation
+
@@ -12842,7 +12872,7 @@ diff -Nur busybox-1.16.1.orig/archival/libipkg/sprintf_alloc.h busybox-1.16.1/ar
+#endif
diff -Nur busybox-1.16.1.orig/archival/libipkg/str_list.c busybox-1.16.1/archival/libipkg/str_list.c
--- busybox-1.16.1.orig/archival/libipkg/str_list.c 1970-01-01 01:00:00.000000000 +0100
-+++ busybox-1.16.1/archival/libipkg/str_list.c 2010-04-04 13:52:46.000000000 +0200
++++ busybox-1.16.1/archival/libipkg/str_list.c 2010-04-22 19:18:12.000000000 +0200
@@ -0,0 +1,76 @@
+/* str_list.c - the itsy package management system
+
@@ -12922,7 +12952,7 @@ diff -Nur busybox-1.16.1.orig/archival/libipkg/str_list.c busybox-1.16.1/archiva
+}
diff -Nur busybox-1.16.1.orig/archival/libipkg/str_list.h busybox-1.16.1/archival/libipkg/str_list.h
--- busybox-1.16.1.orig/archival/libipkg/str_list.h 1970-01-01 01:00:00.000000000 +0100
-+++ busybox-1.16.1/archival/libipkg/str_list.h 2010-04-04 13:52:46.000000000 +0200
++++ busybox-1.16.1/archival/libipkg/str_list.h 2010-04-22 19:18:12.000000000 +0200
@@ -0,0 +1,51 @@
+/* str_list.h - the itsy package management system
+
@@ -12977,7 +13007,7 @@ diff -Nur busybox-1.16.1.orig/archival/libipkg/str_list.h busybox-1.16.1/archiva
+#endif
diff -Nur busybox-1.16.1.orig/archival/libipkg/str_util.c busybox-1.16.1/archival/libipkg/str_util.c
--- busybox-1.16.1.orig/archival/libipkg/str_util.c 1970-01-01 01:00:00.000000000 +0100
-+++ busybox-1.16.1/archival/libipkg/str_util.c 2010-04-04 13:52:46.000000000 +0200
++++ busybox-1.16.1/archival/libipkg/str_util.c 2010-04-22 19:18:12.000000000 +0200
@@ -0,0 +1,69 @@
+/* str_utils.c - the itsy package management system
+
@@ -13050,7 +13080,7 @@ diff -Nur busybox-1.16.1.orig/archival/libipkg/str_util.c busybox-1.16.1/archiva
+
diff -Nur busybox-1.16.1.orig/archival/libipkg/str_util.h busybox-1.16.1/archival/libipkg/str_util.h
--- busybox-1.16.1.orig/archival/libipkg/str_util.h 1970-01-01 01:00:00.000000000 +0100
-+++ busybox-1.16.1/archival/libipkg/str_util.h 2010-04-04 13:52:46.000000000 +0200
++++ busybox-1.16.1/archival/libipkg/str_util.h 2010-04-22 19:18:12.000000000 +0200
@@ -0,0 +1,27 @@
+/* str_utils.h - the itsy package management system
+
@@ -13081,7 +13111,7 @@ diff -Nur busybox-1.16.1.orig/archival/libipkg/str_util.h busybox-1.16.1/archiva
+#endif
diff -Nur busybox-1.16.1.orig/archival/libipkg/user.c busybox-1.16.1/archival/libipkg/user.c
--- busybox-1.16.1.orig/archival/libipkg/user.c 1970-01-01 01:00:00.000000000 +0100
-+++ busybox-1.16.1/archival/libipkg/user.c 2010-04-04 13:52:46.000000000 +0200
++++ busybox-1.16.1/archival/libipkg/user.c 2010-04-22 19:18:12.000000000 +0200
@@ -0,0 +1,49 @@
+/* user.c - the itsy package management system
+
@@ -13134,7 +13164,7 @@ diff -Nur busybox-1.16.1.orig/archival/libipkg/user.c busybox-1.16.1/archival/li
+}
diff -Nur busybox-1.16.1.orig/archival/libipkg/user.h busybox-1.16.1/archival/libipkg/user.h
--- busybox-1.16.1.orig/archival/libipkg/user.h 1970-01-01 01:00:00.000000000 +0100
-+++ busybox-1.16.1/archival/libipkg/user.h 2010-04-04 13:52:46.000000000 +0200
++++ busybox-1.16.1/archival/libipkg/user.h 2010-04-22 19:18:12.000000000 +0200
@@ -0,0 +1,23 @@
+/* user.c - the itsy package management system
+
@@ -13161,7 +13191,7 @@ diff -Nur busybox-1.16.1.orig/archival/libipkg/user.h busybox-1.16.1/archival/li
+
diff -Nur busybox-1.16.1.orig/archival/libipkg/void_list.c busybox-1.16.1/archival/libipkg/void_list.c
--- busybox-1.16.1.orig/archival/libipkg/void_list.c 1970-01-01 01:00:00.000000000 +0100
-+++ busybox-1.16.1/archival/libipkg/void_list.c 2010-04-04 13:52:46.000000000 +0200
++++ busybox-1.16.1/archival/libipkg/void_list.c 2010-04-22 19:18:12.000000000 +0200
@@ -0,0 +1,194 @@
+/* void_list.c - the itsy package management system
+
@@ -13359,7 +13389,7 @@ diff -Nur busybox-1.16.1.orig/archival/libipkg/void_list.c busybox-1.16.1/archiv
+}
diff -Nur busybox-1.16.1.orig/archival/libipkg/void_list.h busybox-1.16.1/archival/libipkg/void_list.h
--- busybox-1.16.1.orig/archival/libipkg/void_list.h 1970-01-01 01:00:00.000000000 +0100
-+++ busybox-1.16.1/archival/libipkg/void_list.h 2010-04-04 13:52:46.000000000 +0200
++++ busybox-1.16.1/archival/libipkg/void_list.h 2010-04-22 19:18:12.000000000 +0200
@@ -0,0 +1,59 @@
+/* void_list.h - the itsy package management system
+
@@ -13422,7 +13452,7 @@ diff -Nur busybox-1.16.1.orig/archival/libipkg/void_list.h busybox-1.16.1/archiv
+#endif
diff -Nur busybox-1.16.1.orig/archival/libipkg/xsystem.c busybox-1.16.1/archival/libipkg/xsystem.c
--- busybox-1.16.1.orig/archival/libipkg/xsystem.c 1970-01-01 01:00:00.000000000 +0100
-+++ busybox-1.16.1/archival/libipkg/xsystem.c 2010-04-04 13:52:46.000000000 +0200
++++ busybox-1.16.1/archival/libipkg/xsystem.c 2010-04-22 19:18:12.000000000 +0200
@@ -0,0 +1,64 @@
+/* xsystem.c - system(3) with error messages
+
@@ -13490,7 +13520,7 @@ diff -Nur busybox-1.16.1.orig/archival/libipkg/xsystem.c busybox-1.16.1/archival
+
diff -Nur busybox-1.16.1.orig/archival/libipkg/xsystem.h busybox-1.16.1/archival/libipkg/xsystem.h
--- busybox-1.16.1.orig/archival/libipkg/xsystem.h 1970-01-01 01:00:00.000000000 +0100
-+++ busybox-1.16.1/archival/libipkg/xsystem.h 2010-04-04 13:52:46.000000000 +0200
++++ busybox-1.16.1/archival/libipkg/xsystem.h 2010-04-22 19:18:12.000000000 +0200
@@ -0,0 +1,34 @@
+/* xsystem.h - system(3) with error messages
+
@@ -13528,7 +13558,7 @@ diff -Nur busybox-1.16.1.orig/archival/libipkg/xsystem.h busybox-1.16.1/archival
+
diff -Nur busybox-1.16.1.orig/archival/libunarchive/Kbuild busybox-1.16.1/archival/libunarchive/Kbuild
--- busybox-1.16.1.orig/archival/libunarchive/Kbuild 2010-03-20 03:58:07.000000000 +0100
-+++ busybox-1.16.1/archival/libunarchive/Kbuild 2010-04-04 13:52:46.000000000 +0200
++++ busybox-1.16.1/archival/libunarchive/Kbuild 2010-04-22 19:18:12.000000000 +0200
@@ -40,6 +40,7 @@
lib-$(CONFIG_DPKG) += $(DPKG_FILES)
lib-$(CONFIG_DPKG_DEB) += $(DPKG_FILES)
@@ -13539,7 +13569,7 @@ diff -Nur busybox-1.16.1.orig/archival/libunarchive/Kbuild busybox-1.16.1/archiv
lib-$(CONFIG_TAR) += get_header_tar.o
diff -Nur busybox-1.16.1.orig/include/applets.h busybox-1.16.1/include/applets.h
--- busybox-1.16.1.orig/include/applets.h 2010-03-28 19:43:35.000000000 +0200
-+++ busybox-1.16.1/include/applets.h 2010-04-04 13:52:46.000000000 +0200
++++ busybox-1.16.1/include/applets.h 2010-04-22 19:18:12.000000000 +0200
@@ -214,6 +214,7 @@
IF_IPCALC(APPLET(ipcalc, _BB_DIR_BIN, _BB_SUID_DROP))
IF_IPCRM(APPLET(ipcrm, _BB_DIR_USR_BIN, _BB_SUID_REQUIRE))
@@ -13548,9 +13578,21 @@ diff -Nur busybox-1.16.1.orig/include/applets.h busybox-1.16.1/include/applets.h
IF_IPLINK(APPLET(iplink, _BB_DIR_BIN, _BB_SUID_DROP))
IF_IPROUTE(APPLET(iproute, _BB_DIR_BIN, _BB_SUID_DROP))
IF_IPRULE(APPLET(iprule, _BB_DIR_BIN, _BB_SUID_DROP))
+diff -Nur busybox-1.16.1.orig/include/unarchive.h busybox-1.16.1/include/unarchive.h
+--- busybox-1.16.1.orig/include/unarchive.h 2010-03-28 19:43:35.000000000 +0200
++++ busybox-1.16.1/include/unarchive.h 2010-04-22 19:21:25.000000000 +0200
+@@ -65,7 +65,7 @@
+ struct hardlinks_t *cpio__hardlinks_to_create;
+ struct hardlinks_t *cpio__created_hardlinks;
+ #endif
+-#if ENABLE_DPKG || ENABLE_DPKG_DEB
++#if ENABLE_DPKG || ENABLE_DPKG_DEB || ENABLE_IPKG
+ /* Temporary storage */
+ char *dpkg__buffer;
+ /* How to process any sub archive, e.g. get_header_tar_gz */
diff -Nur busybox-1.16.1.orig/include/usage.h busybox-1.16.1/include/usage.h
--- busybox-1.16.1.orig/include/usage.h 2010-03-28 19:44:04.000000000 +0200
-+++ busybox-1.16.1/include/usage.h 2010-04-04 13:52:46.000000000 +0200
++++ busybox-1.16.1/include/usage.h 2010-04-22 19:18:12.000000000 +0200
@@ -1592,6 +1592,82 @@
"$ ls -la /tmp/busybox*\n" \
"-rw-rw-r-- 1 andersen andersen 554058 Apr 14 17:49 /tmp/busybox.tar.gz\n"
@@ -13636,7 +13678,7 @@ diff -Nur busybox-1.16.1.orig/include/usage.h busybox-1.16.1/include/usage.h
#define halt_full_usage "\n\n" \
diff -Nur busybox-1.16.1.orig/Makefile busybox-1.16.1/Makefile
--- busybox-1.16.1.orig/Makefile 2010-03-28 19:44:09.000000000 +0200
-+++ busybox-1.16.1/Makefile 2010-04-04 13:52:46.000000000 +0200
++++ busybox-1.16.1/Makefile 2010-04-22 19:18:12.000000000 +0200
@@ -454,6 +454,7 @@
libs-y := \
diff --git a/package/cfgfs/Makefile b/package/cfgfs/Makefile
index 6d8b0554f..1b9897807 100644
--- a/package/cfgfs/Makefile
+++ b/package/cfgfs/Makefile
@@ -5,7 +5,7 @@ include ${TOPDIR}/rules.mk
PKG_NAME:= cfgfs
PKG_VERSION:= 1.0.7
-PKG_RELEASE:= 1
+PKG_RELEASE:= 2
PKG_DESCR:= compressed config filesystem
PKG_SECTION:= base
diff --git a/package/cfgfs/src/fwcf.sh b/package/cfgfs/src/fwcf.sh
index e921dfbdf..ea07ff247 100644
--- a/package/cfgfs/src/fwcf.sh
+++ b/package/cfgfs/src/fwcf.sh
@@ -328,6 +328,8 @@ if test $1 = status; then
echo "<NULL> $name" >>$f
done
# this implementation of sort -o sucks: doesn't do in-place edits
+ # workaround a busybox bug?
+ touch sold_status snew_status
sort -k2 -o sold_status $f
sort -k2 -o snew_status cur_status
gotany=0
diff --git a/package/igmpproxy/Makefile b/package/igmpproxy/Makefile
index 567b1c12f..185597939 100644
--- a/package/igmpproxy/Makefile
+++ b/package/igmpproxy/Makefile
@@ -5,7 +5,7 @@ include ${TOPDIR}/rules.mk
PKG_NAME:= igmpproxy
PKG_VERSION:= 0.1
-PKG_RELEASE:= 1
+PKG_RELEASE:= 2
PKG_MD5SUM:= c56f41ec195bc1fe016369bf74efc5a1
PKG_DESCR:= a simple dynamic Multicast Routing Daemon
PKG_SECTION:= net
diff --git a/package/igmpproxy/files/igmpproxy.conffiles b/package/igmpproxy/files/igmpproxy.conffiles
new file mode 100644
index 000000000..dc47ad317
--- /dev/null
+++ b/package/igmpproxy/files/igmpproxy.conffiles
@@ -0,0 +1 @@
+/etc/igmpproxy.conf
diff --git a/package/igmpproxy/files/igmpproxy.init b/package/igmpproxy/files/igmpproxy.init
new file mode 100644
index 000000000..601538f04
--- /dev/null
+++ b/package/igmpproxy/files/igmpproxy.init
@@ -0,0 +1,26 @@
+#!/bin/sh
+#PKG igmpproxy
+#INIT 70
+. /etc/rc.conf
+
+case $1 in
+autostop) ;;
+autostart)
+ test x"${igmpproxy:-NO}" = x"NO"
+ exec sh $0 start
+ ;;
+start)
+ /usr/sbin/igmpproxy /etc/igmpproxy.conf &
+ ;;
+stop)
+ pkill igmpproxy
+ ;;
+restart)
+ sh $0 stop
+ sh $0 start
+ ;;
+*)
+ echo "Usage: $0 {start | stop | restart}"
+ ;;
+esac
+exit $?
diff --git a/package/igmpproxy/files/igmpproxy.postinst b/package/igmpproxy/files/igmpproxy.postinst
new file mode 100644
index 000000000..5ebfa6d66
--- /dev/null
+++ b/package/igmpproxy/files/igmpproxy.postinst
@@ -0,0 +1,3 @@
+#!/bin/sh
+. $IPKG_INSTROOT/etc/functions.sh
+add_rcconf igmpproxy igmpproxy NO
diff --git a/package/krb5/Makefile b/package/krb5/Makefile
index 533e50c39..6b553f35f 100644
--- a/package/krb5/Makefile
+++ b/package/krb5/Makefile
@@ -25,6 +25,10 @@ include $(TOPDIR)/mk/package.mk
$(eval $(call PKG_template,KRB5_SERVER,krb5-server,$(PKG_VERSION)-${PKG_RELEASE},${PKG_DEPENDS},${PKG_DESCR},${PKG_SECTION}))
$(eval $(call PKG_template,LIBKRB5,libkrb5,$(PKG_VERSION)-${PKG_RELEASE},,${PKG_DESCR_LIB},${PKG_SECTION_LIB}))
+SUB_INSTALLS-y:=
+SUB_INSTALLS-m:=
+SUB_INSTALLS-${ADK_PACKAGE_LIBKRB5}+= libkrb5-install
+
TCFLAGS+= -I${STAGING_DIR}/usr/include/et
CONFIGURE_ARGS+= --disable-static \
--disable-profiled \
@@ -40,7 +44,7 @@ CONFIGURE_ENV+= krb5_cv_attr_constructor_destructor=yes,yes \
post-extract:
(cd ${WRKDIR}; tar xzf ${PKG_NAME}-${PKG_VERSION}.tar.gz)
-post-install:
+post-install: ${SUB_INSTALLS-m} ${SUB_INSTALLS-y}
${INSTALL_DIR} ${IDIR_KRB5_SERVER}/etc
${INSTALL_DIR} ${IDIR_KRB5_SERVER}/etc/krb5kdc
${INSTALL_DIR} ${IDIR_KRB5_SERVER}/usr/sbin
@@ -55,12 +59,14 @@ post-install:
${IDIR_KRB5_SERVER}/usr/lib/krb5/plugins/kdb
${CP} ${WRKINST}/usr/lib/lib{gssrpc,kadm5clnt,kadm5srv,kdb5}.so* \
${IDIR_KRB5_SERVER}/usr/lib
- # krb5-libs
+
+libkrb5-install:
${INSTALL_DIR} ${IDIR_LIBKRB5}/etc
${INSTALL_DIR} ${IDIR_LIBKRB5}/usr/lib
${INSTALL_DATA} ./files/krb5.conf ${IDIR_LIBKRB5}/etc
${CP} ${WRKINST}/usr/lib/lib{gssapi_krb5,k5crypto,krb5,krb5support}.so* \
${IDIR_LIBKRB5}/usr/lib
- echo '/usr/lib/libgssapi_krb5.so mechglue_internal_krb5_init' > ${IDIR_LIBKRB5}/etc/gssapi_mech.conf
+ echo '/usr/lib/libgssapi_krb5.so mechglue_internal_krb5_init' \
+ > ${IDIR_LIBKRB5}/etc/gssapi_mech.conf
include ${TOPDIR}/mk/pkg-bottom.mk
diff --git a/package/nand/src/nand.c b/package/nand/src/nand.c
index 0d5d7f0e4..225e866e2 100644
--- a/package/nand/src/nand.c
+++ b/package/nand/src/nand.c
@@ -494,7 +494,7 @@ usage(void)
" -q quiet mode\n"
" -r reboot after successful command\n"
"Example: To write linux.img to mtd partition labeled as linux\n"
- " mtd write linux.img linux\n\n");
+ " nand write linux.img linux\n\n");
exit(1);
}
diff --git a/package/rtsp/Makefile b/package/rtsp/Makefile
new file mode 100644
index 000000000..994852f04
--- /dev/null
+++ b/package/rtsp/Makefile
@@ -0,0 +1,38 @@
+# This file is part of the OpenADK project. OpenADK is copyrighted
+# material, please see the LICENCE file in the top-level directory.
+
+include ${TOPDIR}/rules.mk
+
+PKG_NAME:= rtsp
+PKG_VERSION:= 1.0
+PKG_RELEASE:= 1
+PKG_MD5SUM:= 92bb09883dd8a77ec5cfbff1c8932b15
+PKG_DESCR:= Netfilter connection tracking for RTSP
+PKG_SECTION:= net
+PKG_URL:= http://github.com/maru-sama/rtsp-linux-v2.6
+
+NO_DISTFILES:= 1
+
+include ${TOPDIR}/mk/package.mk
+
+$(eval $(call PKG_template,KMOD_RTSP,kmod-rtsp,${KERNEL_VERSION}-${ADK_TARGET}-${PKG_RELEASE},,${PKG_DESCR},${PKG_SECTION}))
+
+CONFIG_STYLE:= manual
+BUILD_STYLE:= manual
+INSTALL_STYLE:= manual
+
+pre-build:
+ ARCH=${ARCH} KERNELDIR=${LINUX_DIR} \
+ PREFIX=/usr CROSS_COMPILE="${TARGET_CROSS}" \
+ LD=$(TARGET_CROSS)gcc LDFLAGS="" CFLAGS="-Wall" \
+ $(MAKE) -C ${WRKBUILD} debug V=1
+
+do-install:
+ ${INSTALL_DIR} ${IDIR_KMOD_RTSP}/etc/modules.d/
+ echo "nf_conntrack_rtsp" > ${IDIR_KMOD_RTSP}/etc/modules.d/60-nf-nat-rtsp
+ echo "nf_nat_rtsp" >> ${IDIR_KMOD_RTSP}/etc/modules.d/60-nf-nat-rtsp
+ ${INSTALL_DIR} ${IDIR_KMOD_RTSP}/lib/modules/${KERNEL_VERSION}/
+ ${INSTALL_DATA} ${WRKBUILD}/*.ko \
+ ${IDIR_KMOD_RTSP}/lib/modules/${KERNEL_VERSION}
+
+include ${TOPDIR}/mk/pkg-bottom.mk
diff --git a/package/rtsp/src/Makefile b/package/rtsp/src/Makefile
new file mode 100644
index 000000000..d7be5bab8
--- /dev/null
+++ b/package/rtsp/src/Makefile
@@ -0,0 +1,24 @@
+ifneq ($(KERNELRELEASE),)
+# kbuild part of makefile
+ifndef CONFIG_NF_CONNTRACK
+$(error ** You need to enable NF_CONNTRACK in your kernel **)
+endif
+
+obj-m := nf_conntrack_rtsp.o nf_nat_rtsp.o
+else
+
+# Normal Makefile
+
+all:
+ $(MAKE) -C $(KERNELDIR) M=`pwd` modules
+
+debug:
+ $(MAKE) -C $(KERNELDIR) EXTRA_CFLAGS=-DDEBUG M=`pwd` modules
+
+modules_install:
+ $(MAKE) -C $(KERNELDIR) M=`pwd` modules_install
+
+clean:
+ rm -rf *.o *.ko *.mod.c .*.cmd Module.symvers modules.order .tmp_versions
+
+endif
diff --git a/package/rtsp/src/README.rst b/package/rtsp/src/README.rst
new file mode 100644
index 000000000..dd20fe072
--- /dev/null
+++ b/package/rtsp/src/README.rst
@@ -0,0 +1,40 @@
+Disclaimer:
+===========
+
+This software is provided as is. I take no responsibility if it destroys your
+data or opens up a security hole on your firewall. That said, I have yet to
+hear something about this happening.
+
+I did not create this code myself, most was written by Tom Marshall, later on
+Harald Welte and then Steven van Acker ported it to the new 2.6 netfilter API.
+I just picked up this code in 2007 and made it compile and hopefully work with
+the new changed netfilter API.
+
+Bugs:
+=====
+
+Of course there are. One of the most important ones, is that you MUST NOT
+filter outgoing connections otherwise the reply packes go missing. I tried to
+figure out, why the _expect call is not taking care of the outgoing connections
+but I was not able to figure this out. I gladly welcome patches that fix this
+and other bugs.
+
+Build Instructions:
+===================
+
+Have the kernel source ready in some place and NF_CONNTRACK_NAT enabled in the
+configuration otherwise you will get an error during make. The Kbuild setup
+looks in /lib/modules/\`uname -r\`/build for the source.
+
+If the source is located in another place set the KERNELDIR environment
+variable accordingly.
+
+After that a:
+
+ * make
+ * make modules_install (as root)
+
+should be enough.
+Then do a "modprobe nf_nat_rtsp" as root and try to connect to a RTSP
+service.
+
diff --git a/package/rtsp/src/netfilter_helpers.h b/package/rtsp/src/netfilter_helpers.h
new file mode 100644
index 000000000..903f37455
--- /dev/null
+++ b/package/rtsp/src/netfilter_helpers.h
@@ -0,0 +1,133 @@
+/*
+ * Helpers for netfiler modules. This file provides implementations for basic
+ * functions such as strncasecmp(), etc.
+ *
+ * gcc will warn for defined but unused functions, so we only include the
+ * functions requested. The following macros are used:
+ * NF_NEED_STRNCASECMP nf_strncasecmp()
+ * NF_NEED_STRTOU16 nf_strtou16()
+ * NF_NEED_STRTOU32 nf_strtou32()
+ */
+#ifndef _NETFILTER_HELPERS_H
+#define _NETFILTER_HELPERS_H
+
+/* Only include these functions for kernel code. */
+#ifdef __KERNEL__
+
+#include <linux/ctype.h>
+#define iseol(c) ( (c) == '\r' || (c) == '\n' )
+
+/*
+ * The standard strncasecmp()
+ */
+#ifdef NF_NEED_STRNCASECMP
+static int
+nf_strncasecmp(const char* s1, const char* s2, u_int32_t len)
+{
+ if (s1 == NULL || s2 == NULL)
+ {
+ if (s1 == NULL && s2 == NULL)
+ {
+ return 0;
+ }
+ return (s1 == NULL) ? -1 : 1;
+ }
+ while (len > 0 && tolower(*s1) == tolower(*s2))
+ {
+ len--;
+ s1++;
+ s2++;
+ }
+ return ( (len == 0) ? 0 : (tolower(*s1) - tolower(*s2)) );
+}
+#endif /* NF_NEED_STRNCASECMP */
+
+/*
+ * Parse a string containing a 16-bit unsigned integer.
+ * Returns the number of chars used, or zero if no number is found.
+ */
+#ifdef NF_NEED_STRTOU16
+static int
+nf_strtou16(const char* pbuf, u_int16_t* pval)
+{
+ int n = 0;
+
+ *pval = 0;
+ while (isdigit(pbuf[n]))
+ {
+ *pval = (*pval * 10) + (pbuf[n] - '0');
+ n++;
+ }
+
+ return n;
+}
+#endif /* NF_NEED_STRTOU16 */
+
+/*
+ * Parse a string containing a 32-bit unsigned integer.
+ * Returns the number of chars used, or zero if no number is found.
+ */
+#ifdef NF_NEED_STRTOU32
+static int
+nf_strtou32(const char* pbuf, u_int32_t* pval)
+{
+ int n = 0;
+
+ *pval = 0;
+ while (pbuf[n] >= '0' && pbuf[n] <= '9')
+ {
+ *pval = (*pval * 10) + (pbuf[n] - '0');
+ n++;
+ }
+
+ return n;
+}
+#endif /* NF_NEED_STRTOU32 */
+
+/*
+ * Given a buffer and length, advance to the next line and mark the current
+ * line.
+ */
+#ifdef NF_NEED_NEXTLINE
+static int
+nf_nextline(char* p, uint len, uint* poff, uint* plineoff, uint* plinelen)
+{
+ uint off = *poff;
+ uint physlen = 0;
+
+ if (off >= len)
+ {
+ return 0;
+ }
+
+ while (p[off] != '\n')
+ {
+ if (len-off <= 1)
+ {
+ return 0;
+ }
+
+ physlen++;
+ off++;
+ }
+
+ /* if we saw a crlf, physlen needs adjusted */
+ if (physlen > 0 && p[off] == '\n' && p[off-1] == '\r')
+ {
+ physlen--;
+ }
+
+ /* advance past the newline */
+ off++;
+
+ *plineoff = *poff;
+ *plinelen = physlen;
+ *poff = off;
+
+ return 1;
+}
+#endif /* NF_NEED_NEXTLINE */
+
+#endif /* __KERNEL__ */
+
+#endif /* _NETFILTER_HELPERS_H */
diff --git a/package/rtsp/src/netfilter_mime.h b/package/rtsp/src/netfilter_mime.h
new file mode 100644
index 000000000..7eeb18352
--- /dev/null
+++ b/package/rtsp/src/netfilter_mime.h
@@ -0,0 +1,89 @@
+/*
+ * MIME functions for netfilter modules. This file provides implementations
+ * for basic MIME parsing. MIME headers are used in many protocols, such as
+ * HTTP, RTSP, SIP, etc.
+ *
+ * gcc will warn for defined but unused functions, so we only include the
+ * functions requested. The following macros are used:
+ * NF_NEED_MIME_NEXTLINE nf_mime_nextline()
+ */
+#ifndef _NETFILTER_MIME_H
+#define _NETFILTER_MIME_H
+
+/* Only include these functions for kernel code. */
+#ifdef __KERNEL__
+
+#include <linux/ctype.h>
+
+/*
+ * Given a buffer and length, advance to the next line and mark the current
+ * line. If the current line is empty, *plinelen will be set to zero. If
+ * not, it will be set to the actual line length (including CRLF).
+ *
+ * 'line' in this context means logical line (includes LWS continuations).
+ * Returns 1 on success, 0 on failure.
+ */
+#ifdef NF_NEED_MIME_NEXTLINE
+static int
+nf_mime_nextline(char* p, uint len, uint* poff, uint* plineoff, uint* plinelen)
+{
+ uint off = *poff;
+ uint physlen = 0;
+ int is_first_line = 1;
+
+ if (off >= len)
+ {
+ return 0;
+ }
+
+ do
+ {
+ while (p[off] != '\n')
+ {
+ if (len-off <= 1)
+ {
+ return 0;
+ }
+
+ physlen++;
+ off++;
+ }
+
+ /* if we saw a crlf, physlen needs adjusted */
+ if (physlen > 0 && p[off] == '\n' && p[off-1] == '\r')
+ {
+ physlen--;
+ }
+
+ /* advance past the newline */
+ off++;
+
+ /* check for an empty line */
+ if (physlen == 0)
+ {
+ break;
+ }
+
+ /* check for colon on the first physical line */
+ if (is_first_line)
+ {
+ is_first_line = 0;
+ if (memchr(p+(*poff), ':', physlen) == NULL)
+ {
+ return 0;
+ }
+ }
+ }
+ while (p[off] == ' ' || p[off] == '\t');
+
+ *plineoff = *poff;
+ *plinelen = (physlen == 0) ? 0 : (off - *poff);
+ *poff = off;
+
+ return 1;
+}
+#endif /* NF_NEED_MIME_NEXTLINE */
+
+#endif /* __KERNEL__ */
+
+#endif /* _NETFILTER_MIME_H */
diff --git a/package/rtsp/src/nf_conntrack_rtsp.c b/package/rtsp/src/nf_conntrack_rtsp.c
new file mode 100644
index 000000000..7b5d2be67
--- /dev/null
+++ b/package/rtsp/src/nf_conntrack_rtsp.c
@@ -0,0 +1,545 @@
+/*
+ * RTSP extension for IP connection tracking
+ * (C) 2003 by Tom Marshall <tmarshall at real.com>
+ * based on ip_conntrack_irc.c
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version
+ * 2 of the License, or (at your option) any later version.
+ *
+ * Module load syntax:
+ * insmod nf_conntrack_rtsp.o ports=port1,port2,...port<MAX_PORTS>
+ * max_outstanding=n setup_timeout=secs
+ *
+ * If no ports are specified, the default will be port 554.
+ *
+ * With max_outstanding you can define the maximum number of not yet
+ * answered SETUP requests per RTSP session (default 8).
+ * With setup_timeout you can specify how long the system waits for
+ * an expected data channel (default 300 seconds).
+ *
+ * 2005-02-13: Harald Welte <laforge at netfilter.org>
+ * - port to 2.6
+ * - update to recent post-2.6.11 api changes
+ * 2006-09-14: Steven Van Acker <deepstar at singularity.be>
+ * - removed calls to NAT code from conntrack helper: NAT no longer needed to use rtsp-conntrack
+ * 2007-04-18: Michael Guntsche <mike at it-loops.com>
+ * - Port to new NF API
+ */
+
+#include <linux/module.h>
+#include <linux/netfilter.h>
+#include <linux/ip.h>
+#include <linux/inet.h>
+#include <net/tcp.h>
+
+#include <net/netfilter/nf_conntrack.h>
+#include <net/netfilter/nf_conntrack_expect.h>
+#include <net/netfilter/nf_conntrack_helper.h>
+#include "nf_conntrack_rtsp.h"
+
+#define NF_NEED_STRNCASECMP
+#define NF_NEED_STRTOU16
+#define NF_NEED_STRTOU32
+#define NF_NEED_NEXTLINE
+#include "netfilter_helpers.h"
+#define NF_NEED_MIME_NEXTLINE
+#include "netfilter_mime.h"
+
+#include <linux/ctype.h>
+#define MAX_SIMUL_SETUP 8 /* XXX: use max_outstanding */
+
+#define MAX_PORTS 8
+static int ports[MAX_PORTS];
+static int num_ports = 0;
+static int max_outstanding = 8;
+static unsigned int setup_timeout = 300;
+
+MODULE_AUTHOR("Tom Marshall <tmarshall at real.com>");
+MODULE_DESCRIPTION("RTSP connection tracking module");
+MODULE_LICENSE("GPL");
+module_param_array(ports, int, &num_ports, 0400);
+MODULE_PARM_DESC(ports, "port numbers of RTSP servers");
+module_param(max_outstanding, int, 0400);
+MODULE_PARM_DESC(max_outstanding, "max number of outstanding SETUP requests per RTSP session");
+module_param(setup_timeout, int, 0400);
+MODULE_PARM_DESC(setup_timeout, "timeout on for unestablished data channels");
+
+static char *rtsp_buffer;
+static DEFINE_SPINLOCK(rtsp_buffer_lock);
+
+static struct nf_conntrack_expect_policy rtsp_exp_policy;
+
+unsigned int (*nf_nat_rtsp_hook)(struct sk_buff *skb,
+ enum ip_conntrack_info ctinfo,
+ unsigned int matchoff, unsigned int matchlen,struct ip_ct_rtsp_expect* prtspexp,
+ struct nf_conntrack_expect *exp);
+void (*nf_nat_rtsp_hook_expectfn)(struct nf_conn *ct, struct nf_conntrack_expect *exp);
+
+EXPORT_SYMBOL_GPL(nf_nat_rtsp_hook);
+
+/*
+ * Max mappings we will allow for one RTSP connection (for RTP, the number
+ * of allocated ports is twice this value). Note that SMIL burns a lot of
+ * ports so keep this reasonably high. If this is too low, you will see a
+ * lot of "no free client map entries" messages.
+ */
+#define MAX_PORT_MAPS 16
+
+/*** default port list was here in the masq code: 554, 3030, 4040 ***/
+
+#define SKIP_WSPACE(ptr,len,off) while(off < len && isspace(*(ptr+off))) { off++; }
+
+/*
+ * Parse an RTSP packet.
+ *
+ * Returns zero if parsing failed.
+ *
+ * Parameters:
+ * IN ptcp tcp data pointer
+ * IN tcplen tcp data len
+ * IN/OUT ptcpoff points to current tcp offset
+ * OUT phdrsoff set to offset of rtsp headers
+ * OUT phdrslen set to length of rtsp headers
+ * OUT pcseqoff set to offset of CSeq header
+ * OUT pcseqlen set to length of CSeq header
+ */
+static int
+rtsp_parse_message(char* ptcp, uint tcplen, uint* ptcpoff,
+ uint* phdrsoff, uint* phdrslen,
+ uint* pcseqoff, uint* pcseqlen,
+ uint* transoff, uint* translen)
+{
+ uint entitylen = 0;
+ uint lineoff;
+ uint linelen;
+
+ if (!nf_nextline(ptcp, tcplen, ptcpoff, &lineoff, &linelen))
+ return 0;
+
+ *phdrsoff = *ptcpoff;
+ while (nf_mime_nextline(ptcp, tcplen, ptcpoff, &lineoff, &linelen)) {
+ if (linelen == 0) {
+ if (entitylen > 0)
+ *ptcpoff += min(entitylen, tcplen - *ptcpoff);
+ break;
+ }
+ if (lineoff+linelen > tcplen) {
+ pr_info("!! overrun !!\n");
+ break;
+ }
+
+ if (nf_strncasecmp(ptcp+lineoff, "CSeq:", 5) == 0) {
+ *pcseqoff = lineoff;
+ *pcseqlen = linelen;
+ }
+
+ if (nf_strncasecmp(ptcp+lineoff, "Transport:", 10) == 0) {
+ *transoff = lineoff;
+ *translen = linelen;
+ }
+
+ if (nf_strncasecmp(ptcp+lineoff, "Content-Length:", 15) == 0) {
+ uint off = lineoff+15;
+ SKIP_WSPACE(ptcp+lineoff, linelen, off);
+ nf_strtou32(ptcp+off, &entitylen);
+ }
+ }
+ *phdrslen = (*ptcpoff) - (*phdrsoff);
+
+ return 1;
+}
+
+/*
+ * Find lo/hi client ports (if any) in transport header
+ * In:
+ * ptcp, tcplen = packet
+ * tranoff, tranlen = buffer to search
+ *
+ * Out:
+ * pport_lo, pport_hi = lo/hi ports (host endian)
+ *
+ * Returns nonzero if any client ports found
+ *
+ * Note: it is valid (and expected) for the client to request multiple
+ * transports, so we need to parse the entire line.
+ */
+static int
+rtsp_parse_transport(char* ptran, uint tranlen,
+ struct ip_ct_rtsp_expect* prtspexp)
+{
+ int rc = 0;
+ uint off = 0;
+
+ if (tranlen < 10 || !iseol(ptran[tranlen-1]) ||
+ nf_strncasecmp(ptran, "Transport:", 10) != 0) {
+ pr_info("sanity check failed\n");
+ return 0;
+ }
+
+ pr_debug("t='%.*s'\n", (int)tranlen-2, ptran);
+ off += 10;
+ SKIP_WSPACE(ptran, tranlen, off);
+
+ /* Transport: tran;field;field=val,tran;field;field=val,... */
+ while (off < tranlen) {
+ const char* pparamend;
+ const char* pdestport;
+ uint nextparamoff;
+
+ pparamend = memchr(ptran+off, ',', tranlen-off);
+ pparamend = (pparamend == NULL) ? ptran+tranlen : pparamend+1;
+ nextparamoff = pparamend-ptran;
+
+ while (off < nextparamoff) {
+ const char* pfieldend;
+ uint nextfieldoff;
+
+ pfieldend = memchr(ptran+off, ';', nextparamoff-off);
+ nextfieldoff = (pfieldend == NULL) ? nextparamoff : pfieldend-ptran+1;
+
+ if (strncmp(ptran+off, "client_port=", 12) == 0) {
+ u_int16_t port;
+ uint numlen;
+
+ off += 12;
+ numlen = nf_strtou16(ptran+off, &port);
+ off += numlen;
+ if (prtspexp->loport != 0 && prtspexp->loport != port)
+ pr_debug("multiple ports found, port %hu ignored\n", port);
+ else {
+ pr_debug("lo port found : %hu\n", port);
+ prtspexp->loport = prtspexp->hiport = port;
+ if (ptran[off] == '-') {
+ off++;
+ numlen = nf_strtou16(ptran+off, &port);
+ off += numlen;
+ prtspexp->pbtype = pb_range;
+ prtspexp->hiport = port;
+
+ // If we have a range, assume rtp:
+ // loport must be even, hiport must be loport+1
+ if ((prtspexp->loport & 0x0001) != 0 ||
+ prtspexp->hiport != prtspexp->loport+1) {
+ pr_debug("incorrect range: %hu-%hu, correcting\n",
+ prtspexp->loport, prtspexp->hiport);
+ prtspexp->loport &= 0xfffe;
+ prtspexp->hiport = prtspexp->loport+1;
+ }
+ } else if (ptran[off] == '/') {
+ off++;
+ numlen = nf_strtou16(ptran+off, &port);
+ off += numlen;
+ prtspexp->pbtype = pb_discon;
+ prtspexp->hiport = port;
+ }
+ rc = 1;
+ }
+ }
+ else if ((strncmp(ptran+off, "destination=",12) == 0) &&
+ ((pdestport = memchr(ptran+off, ':', nextparamoff-off)) != NULL))
+ {
+ u_int16_t port;
+ uint numlen;
+
+ off += 12;
+ pdestport++;
+
+ off = pdestport - ptran;
+ numlen = nf_strtou16(ptran + off, &port);
+ off += numlen + 1;
+
+ if (prtspexp->loport != 0 && prtspexp->loport != port)
+ {
+ pr_debug("multiple ports found, port %hu ignored\n", port);
+ }
+ else
+ {
+ prtspexp->pbtype = pb_single;
+ prtspexp->loport = port;
+ prtspexp->hiport = port;
+ rc = 1;
+ }
+ }
+
+ /*
+ * Note we don't look for the destination parameter here.
+ * If we are using NAT, the NAT module will handle it. If not,
+ * and the client is sending packets elsewhere, the expectation
+ * will quietly time out.
+ */
+
+ off = nextfieldoff;
+ }
+
+ off = nextparamoff;
+ }
+
+ return rc;
+}
+
+void expected(struct nf_conn *ct, struct nf_conntrack_expect *exp)
+{
+ typeof(nf_nat_rtsp_hook_expectfn) nf_nat_rtsp_expectfn;
+ nf_nat_rtsp_expectfn = rcu_dereference(nf_nat_rtsp_hook_expectfn);
+ if(nf_nat_rtsp_expectfn && ct->master->status & IPS_NAT_MASK) {
+ nf_nat_rtsp_expectfn(ct,exp);
+ }
+}
+
+/*** conntrack functions ***/
+
+/* outbound packet: client->server */
+
+static inline int
+help_out(struct sk_buff *skb, unsigned char *rb_ptr, unsigned int datalen,
+ struct nf_conn *ct, enum ip_conntrack_info ctinfo)
+{
+ struct ip_ct_rtsp_expect expinfo;
+
+ int dir = CTINFO2DIR(ctinfo); /* = IP_CT_DIR_ORIGINAL */
+ //struct tcphdr* tcph = (void*)iph + iph->ihl * 4;
+ //uint tcplen = pktlen - iph->ihl * 4;
+ char* pdata = rb_ptr;
+ //uint datalen = tcplen - tcph->doff * 4;
+ uint dataoff = 0;
+ int ret = NF_ACCEPT;
+
+ struct nf_conntrack_expect *exp;
+
+ __be16 be_loport;
+
+ typeof(nf_nat_rtsp_hook) nf_nat_rtsp;
+
+ memset(&expinfo, 0, sizeof(expinfo));
+
+ while (dataoff < datalen) {
+ uint cmdoff = dataoff;
+ uint hdrsoff = 0;
+ uint hdrslen = 0;
+ uint cseqoff = 0;
+ uint cseqlen = 0;
+ uint transoff = 0;
+ uint translen = 0;
+ uint off;
+
+ if (!rtsp_parse_message(pdata, datalen, &dataoff,
+ &hdrsoff, &hdrslen,
+ &cseqoff, &cseqlen,
+ &transoff, &translen))
+ break; /* not a valid message */
+
+ if (strncmp(pdata+cmdoff, "SETUP ", 6) != 0)
+ continue; /* not a SETUP message */
+ pr_debug("found a setup message\n");
+
+ off = 0;
+ if(translen) {
+ rtsp_parse_transport(pdata+transoff, translen, &expinfo);
+ }
+
+ if (expinfo.loport == 0) {
+ pr_debug("no udp transports found\n");
+ continue; /* no udp transports found */
+ }
+
+ pr_debug("udp transport found, ports=(%d,%hu,%hu)\n",
+ (int)expinfo.pbtype, expinfo.loport, expinfo.hiport);
+
+ exp = nf_ct_expect_alloc(ct);
+ if (!exp) {
+ ret = NF_DROP;
+ goto out;
+ }
+
+ be_loport = htons(expinfo.loport);
+
+ nf_ct_expect_init(exp, NF_CT_EXPECT_CLASS_DEFAULT, nf_ct_l3num(ct),
+ &ct->tuplehash[!dir].tuple.src.u3, &ct->tuplehash[!dir].tuple.dst.u3,
+ IPPROTO_UDP, NULL, &be_loport);
+
+ exp->master = ct;
+
+ exp->expectfn = expected;
+ exp->flags = 0;
+
+ if (expinfo.pbtype == pb_range) {
+ pr_debug("Changing expectation mask to handle multiple ports\n");
+ //exp->mask.dst.u.udp.port = 0xfffe;
+ }
+
+ pr_debug("expect_related %u.%u.%u.%u:%u-%u.%u.%u.%u:%u\n",
+ NIPQUAD(exp->tuple.src.u3.ip),
+ ntohs(exp->tuple.src.u.udp.port),
+ NIPQUAD(exp->tuple.dst.u3.ip),
+ ntohs(exp->tuple.dst.u.udp.port));
+
+ nf_nat_rtsp = rcu_dereference(nf_nat_rtsp_hook);
+ if (nf_nat_rtsp && ct->status & IPS_NAT_MASK)
+ /* pass the request off to the nat helper */
+ ret = nf_nat_rtsp(skb, ctinfo, hdrsoff, hdrslen, &expinfo, exp);
+ else if (nf_ct_expect_related(exp) != 0) {
+ pr_info("nf_conntrack_expect_related failed\n");
+ ret = NF_DROP;
+ }
+ nf_ct_expect_put(exp);
+ goto out;
+ }
+out:
+
+ return ret;
+}
+
+
+static inline int
+help_in(struct sk_buff *skb, size_t pktlen,
+ struct nf_conn* ct, enum ip_conntrack_info ctinfo)
+{
+ return NF_ACCEPT;
+}
+
+static int help(struct sk_buff *skb, unsigned int protoff,
+ struct nf_conn *ct, enum ip_conntrack_info ctinfo)
+{
+ struct tcphdr _tcph, *th;
+ unsigned int dataoff, datalen;
+ char *rb_ptr;
+ int ret = NF_DROP;
+
+ /* Until there's been traffic both ways, don't look in packets. */
+ if (ctinfo != IP_CT_ESTABLISHED &&
+ ctinfo != IP_CT_ESTABLISHED + IP_CT_IS_REPLY) {
+ pr_debug("conntrackinfo = %u\n", ctinfo);
+ return NF_ACCEPT;
+ }
+
+ /* Not whole TCP header? */
+ th = skb_header_pointer(skb,protoff, sizeof(_tcph), &_tcph);
+
+ if (!th)
+ return NF_ACCEPT;
+
+ /* No data ? */
+ dataoff = protoff + th->doff*4;
+ datalen = skb->len - dataoff;
+ if (dataoff >= skb->len)
+ return NF_ACCEPT;
+
+ spin_lock_bh(&rtsp_buffer_lock);
+ rb_ptr = skb_header_pointer(skb, dataoff,
+ skb->len - dataoff, rtsp_buffer);
+ BUG_ON(rb_ptr == NULL);
+
+#if 0
+ /* Checksum invalid? Ignore. */
+ /* FIXME: Source route IP option packets --RR */
+ if (tcp_v4_check(tcph, tcplen, iph->saddr, iph->daddr,
+ csum_partial((char*)tcph, tcplen, 0)))
+ {
+ DEBUGP("bad csum: %p %u %u.%u.%u.%u %u.%u.%u.%u\n",
+ tcph, tcplen, NIPQUAD(iph->saddr), NIPQUAD(iph->daddr));
+ return NF_ACCEPT;
+ }
+#endif
+
+ switch (CTINFO2DIR(ctinfo)) {
+ case IP_CT_DIR_ORIGINAL:
+ ret = help_out(skb, rb_ptr, datalen, ct, ctinfo);
+ break;
+ case IP_CT_DIR_REPLY:
+ pr_debug("IP_CT_DIR_REPLY\n");
+ /* inbound packet: server->client */
+ ret = NF_ACCEPT;
+ break;
+ }
+
+ spin_unlock_bh(&rtsp_buffer_lock);
+
+ return ret;
+}
+
+static struct nf_conntrack_helper rtsp_helpers[MAX_PORTS];
+static char rtsp_names[MAX_PORTS][10];
+
+/* This function is intentionally _NOT_ defined as __exit */
+static void
+fini(void)
+{
+ int i;
+ for (i = 0; i < num_ports; i++) {
+ pr_debug("unregistering port %d\n", ports[i]);
+ nf_conntrack_helper_unregister(&rtsp_helpers[i]);
+ }
+ kfree(rtsp_buffer);
+}
+
+static int __init
+init(void)
+{
+ int i, ret;
+ struct nf_conntrack_helper *hlpr;
+ char *tmpname;
+
+ printk("nf_conntrack_rtsp v" IP_NF_RTSP_VERSION " loading\n");
+
+ if (max_outstanding < 1) {
+ printk("nf_conntrack_rtsp: max_outstanding must be a positive integer\n");
+ return -EBUSY;
+ }
+ if (setup_timeout < 0) {
+ printk("nf_conntrack_rtsp: setup_timeout must be a positive integer\n");
+ return -EBUSY;
+ }
+
+ rtsp_exp_policy.max_expected = max_outstanding;
+ rtsp_exp_policy.timeout = setup_timeout;
+
+ rtsp_buffer = kmalloc(65536, GFP_KERNEL);
+ if (!rtsp_buffer)
+ return -ENOMEM;
+
+ /* If no port given, default to standard rtsp port */
+ if (ports[0] == 0) {
+ ports[0] = RTSP_PORT;
+ }
+
+ for (i = 0; (i < MAX_PORTS) && ports[i]; i++) {
+ hlpr = &rtsp_helpers[i];
+ memset(hlpr, 0, sizeof(struct nf_conntrack_helper));
+ hlpr->tuple.src.l3num = AF_INET;
+ hlpr->tuple.src.u.tcp.port = htons(ports[i]);
+ hlpr->tuple.dst.protonum = IPPROTO_TCP;
+ //hlpr->mask.src.u.tcp.port = 0xFFFF;
+ //hlpr->mask.dst.protonum = 0xFF;
+ hlpr->expect_policy = &rtsp_exp_policy;
+ hlpr->me = THIS_MODULE;
+ hlpr->help = help;
+
+ tmpname = &rtsp_names[i][0];
+ if (ports[i] == RTSP_PORT) {
+ sprintf(tmpname, "rtsp");
+ } else {
+ sprintf(tmpname, "rtsp-%d", i);
+ }
+ hlpr->name = tmpname;
+
+ pr_debug("port #%d: %d\n", i, ports[i]);
+
+ ret = nf_conntrack_helper_register(hlpr);
+
+ if (ret) {
+ printk("nf_conntrack_rtsp: ERROR registering port %d\n", ports[i]);
+ fini();
+ return -EBUSY;
+ }
+ num_ports++;
+ }
+ return 0;
+}
+
+module_init(init);
+module_exit(fini);
+
+EXPORT_SYMBOL(nf_nat_rtsp_hook_expectfn);
+
diff --git a/package/rtsp/src/nf_conntrack_rtsp.h b/package/rtsp/src/nf_conntrack_rtsp.h
new file mode 100644
index 000000000..0c9e3b848
--- /dev/null
+++ b/package/rtsp/src/nf_conntrack_rtsp.h
@@ -0,0 +1,63 @@
+/*
+ * RTSP extension for IP connection tracking.
+ * (C) 2003 by Tom Marshall <tmarshall at real.com>
+ * based on ip_conntrack_irc.h
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version
+ * 2 of the License, or (at your option) any later version.
+ */
+#ifndef _IP_CONNTRACK_RTSP_H
+#define _IP_CONNTRACK_RTSP_H
+
+//#define IP_NF_RTSP_DEBUG 1
+#define IP_NF_RTSP_VERSION "0.6.21"
+
+#ifdef __KERNEL__
+/* port block types */
+typedef enum {
+ pb_single, /* client_port=x */
+ pb_range, /* client_port=x-y */
+ pb_discon /* client_port=x/y (rtspbis) */
+} portblock_t;
+
+/* We record seq number and length of rtsp headers here, all in host order. */
+
+/*
+ * This structure is per expected connection. It is a member of struct
+ * ip_conntrack_expect. The TCP SEQ for the conntrack expect is stored
+ * there and we are expected to only store the length of the data which
+ * needs replaced. If a packet contains multiple RTSP messages, we create
+ * one expected connection per message.
+ *
+ * We use these variables to mark the entire header block. This may seem
+ * like overkill, but the nature of RTSP requires it. A header may appear
+ * multiple times in a message. We must treat two Transport headers the
+ * same as one Transport header with two entries.
+ */
+struct ip_ct_rtsp_expect
+{
+ u_int32_t len; /* length of header block */
+ portblock_t pbtype; /* Type of port block that was requested */
+ u_int16_t loport; /* Port that was requested, low or first */
+ u_int16_t hiport; /* Port that was requested, high or second */
+#if 0
+ uint method; /* RTSP method */
+ uint cseq; /* CSeq from request */
+#endif
+};
+
+extern unsigned int (*nf_nat_rtsp_hook)(struct sk_buff *skb,
+ enum ip_conntrack_info ctinfo,
+ unsigned int matchoff, unsigned int matchlen,
+ struct ip_ct_rtsp_expect *prtspexp,
+ struct nf_conntrack_expect *exp);
+
+extern void (*nf_nat_rtsp_hook_expectfn)(struct nf_conn *ct, struct nf_conntrack_expect *exp);
+
+#define RTSP_PORT 554
+
+#endif /* __KERNEL__ */
+
+#endif /* _IP_CONNTRACK_RTSP_H */
diff --git a/package/rtsp/src/nf_nat_rtsp.c b/package/rtsp/src/nf_nat_rtsp.c
new file mode 100644
index 000000000..adb44d0ae
--- /dev/null
+++ b/package/rtsp/src/nf_nat_rtsp.c
@@ -0,0 +1,531 @@
+/*
+ * RTSP extension for TCP NAT alteration
+ * (C) 2003 by Tom Marshall <tmarshall at real.com>
+ * based on ip_nat_irc.c
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version
+ * 2 of the License, or (at your option) any later version.
+ *
+ * Module load syntax:
+ * insmod nf_nat_rtsp.o ports=port1,port2,...port<MAX_PORTS>
+ * stunaddr=<address>
+ * destaction=[auto|strip|none]
+ *
+ * If no ports are specified, the default will be port 554 only.
+ *
+ * stunaddr specifies the address used to detect that a client is using STUN.
+ * If this address is seen in the destination parameter, it is assumed that
+ * the client has already punched a UDP hole in the firewall, so we don't
+ * mangle the client_port. If none is specified, it is autodetected. It
+ * only needs to be set if you have multiple levels of NAT. It should be
+ * set to the external address that the STUN clients detect. Note that in
+ * this case, it will not be possible for clients to use UDP with servers
+ * between the NATs.
+ *
+ * If no destaction is specified, auto is used.
+ * destaction=auto: strip destination parameter if it is not stunaddr.
+ * destaction=strip: always strip destination parameter (not recommended).
+ * destaction=none: do not touch destination parameter (not recommended).
+ */
+
+#include <linux/module.h>
+#include <net/tcp.h>
+#include <net/netfilter/nf_nat_helper.h>
+#include <net/netfilter/nf_nat_rule.h>
+#include "nf_conntrack_rtsp.h"
+#include <net/netfilter/nf_conntrack_expect.h>
+
+#include <linux/inet.h>
+#include <linux/ctype.h>
+#define NF_NEED_STRNCASECMP
+#define NF_NEED_STRTOU16
+#include "netfilter_helpers.h"
+#define NF_NEED_MIME_NEXTLINE
+#include "netfilter_mime.h"
+
+#define MAX_PORTS 8
+#define DSTACT_AUTO 0
+#define DSTACT_STRIP 1
+#define DSTACT_NONE 2
+
+static char* stunaddr = NULL;
+static char* destaction = NULL;
+
+static u_int32_t extip = 0;
+static int dstact = 0;
+
+MODULE_AUTHOR("Tom Marshall <tmarshall at real.com>");
+MODULE_DESCRIPTION("RTSP network address translation module");
+MODULE_LICENSE("GPL");
+module_param(stunaddr, charp, 0644);
+MODULE_PARM_DESC(stunaddr, "Address for detecting STUN");
+module_param(destaction, charp, 0644);
+MODULE_PARM_DESC(destaction, "Action for destination parameter (auto/strip/none)");
+
+#define SKIP_WSPACE(ptr,len,off) while(off < len && isspace(*(ptr+off))) { off++; }
+
+/*** helper functions ***/
+
+static void
+get_skb_tcpdata(struct sk_buff* skb, char** pptcpdata, uint* ptcpdatalen)
+{
+ struct iphdr* iph = ip_hdr(skb);
+ struct tcphdr* tcph = (void *)iph + ip_hdrlen(skb);
+
+ *pptcpdata = (char*)tcph + tcph->doff*4;
+ *ptcpdatalen = ((char*)skb_transport_header(skb) + skb->len) - *pptcpdata;
+}
+
+/*** nat functions ***/
+
+/*
+ * Mangle the "Transport:" header:
+ * - Replace all occurences of "client_port=<spec>"
+ * - Handle destination parameter
+ *
+ * In:
+ * ct, ctinfo = conntrack context
+ * skb = packet
+ * tranoff = Transport header offset from TCP data
+ * tranlen = Transport header length (incl. CRLF)
+ * rport_lo = replacement low port (host endian)
+ * rport_hi = replacement high port (host endian)
+ *
+ * Returns packet size difference.
+ *
+ * Assumes that a complete transport header is present, ending with CR or LF
+ */
+static int
+rtsp_mangle_tran(enum ip_conntrack_info ctinfo,
+ struct nf_conntrack_expect* exp,
+ struct ip_ct_rtsp_expect* prtspexp,
+ struct sk_buff* skb, uint tranoff, uint tranlen)
+{
+ char* ptcp;
+ uint tcplen;
+ char* ptran;
+ char rbuf1[16]; /* Replacement buffer (one port) */
+ uint rbuf1len; /* Replacement len (one port) */
+ char rbufa[16]; /* Replacement buffer (all ports) */
+ uint rbufalen; /* Replacement len (all ports) */
+ u_int32_t newip;
+ u_int16_t loport, hiport;
+ uint off = 0;
+ uint diff; /* Number of bytes we removed */
+
+ struct nf_conn *ct = exp->master;
+ struct nf_conntrack_tuple *t;
+
+ char szextaddr[15+1];
+ uint extaddrlen;
+ int is_stun;
+
+ get_skb_tcpdata(skb, &ptcp, &tcplen);
+ ptran = ptcp+tranoff;
+
+ if (tranoff+tranlen > tcplen || tcplen-tranoff < tranlen ||
+ tranlen < 10 || !iseol(ptran[tranlen-1]) ||
+ nf_strncasecmp(ptran, "Transport:", 10) != 0)
+ {
+ pr_debug("sanity check failed\n");
+ return 0;
+ }
+ off += 10;
+ SKIP_WSPACE(ptcp+tranoff, tranlen, off);
+
+ newip = ct->tuplehash[IP_CT_DIR_REPLY].tuple.dst.u3.ip;
+ t = &exp->tuple;
+ t->dst.u3.ip = newip;
+
+ extaddrlen = extip ? sprintf(szextaddr, "%u.%u.%u.%u", NIPQUAD(extip))
+ : sprintf(szextaddr, "%u.%u.%u.%u", NIPQUAD(newip));
+ pr_debug("stunaddr=%s (%s)\n", szextaddr, (extip?"forced":"auto"));
+
+ rbuf1len = rbufalen = 0;
+ switch (prtspexp->pbtype)
+ {
+ case pb_single:
+ for (loport = prtspexp->loport; loport != 0; loport++) /* XXX: improper wrap? */
+ {
+ t->dst.u.udp.port = htons(loport);
+ if (nf_ct_expect_related(exp) == 0)
+ {
+ pr_debug("using port %hu\n", loport);
+ break;
+ }
+ }
+ if (loport != 0)
+ {
+ rbuf1len = sprintf(rbuf1, "%hu", loport);
+ rbufalen = sprintf(rbufa, "%hu", loport);
+ }
+ break;
+ case pb_range:
+ for (loport = prtspexp->loport; loport != 0; loport += 2) /* XXX: improper wrap? */
+ {
+ t->dst.u.udp.port = htons(loport);
+ if (nf_ct_expect_related(exp) == 0)
+ {
+ hiport = loport + 1; //~exp->mask.dst.u.udp.port;
+ pr_debug("using ports %hu-%hu\n", loport, hiport);
+ break;
+ }
+ }
+ if (loport != 0)
+ {
+ rbuf1len = sprintf(rbuf1, "%hu", loport);
+ rbufalen = sprintf(rbufa, "%hu-%hu", loport, loport+1);
+ }
+ break;
+ case pb_discon:
+ for (loport = prtspexp->loport; loport != 0; loport++) /* XXX: improper wrap? */
+ {
+ t->dst.u.udp.port = htons(loport);
+ if (nf_ct_expect_related(exp) == 0)
+ {
+ pr_debug("using port %hu (1 of 2)\n", loport);
+ break;
+ }
+ }
+ for (hiport = prtspexp->hiport; hiport != 0; hiport++) /* XXX: improper wrap? */
+ {
+ t->dst.u.udp.port = htons(hiport);
+ if (nf_ct_expect_related(exp) == 0)
+ {
+ pr_debug("using port %hu (2 of 2)\n", hiport);
+ break;
+ }
+ }
+ if (loport != 0 && hiport != 0)
+ {
+ rbuf1len = sprintf(rbuf1, "%hu", loport);
+ if (hiport == loport+1)
+ {
+ rbufalen = sprintf(rbufa, "%hu-%hu", loport, hiport);
+ }
+ else
+ {
+ rbufalen = sprintf(rbufa, "%hu/%hu", loport, hiport);
+ }
+ }
+ break;
+ }
+
+ if (rbuf1len == 0)
+ {
+ return 0; /* cannot get replacement port(s) */
+ }
+
+ /* Transport: tran;field;field=val,tran;field;field=val,... */
+ while (off < tranlen)
+ {
+ uint saveoff;
+ const char* pparamend;
+ uint nextparamoff;
+
+ pparamend = memchr(ptran+off, ',', tranlen-off);
+ pparamend = (pparamend == NULL) ? ptran+tranlen : pparamend+1;
+ nextparamoff = pparamend-ptcp;
+
+ /*
+ * We pass over each param twice. On the first pass, we look for a
+ * destination= field. It is handled by the security policy. If it
+ * is present, allowed, and equal to our external address, we assume
+ * that STUN is being used and we leave the client_port= field alone.
+ */
+ is_stun = 0;
+ saveoff = off;
+ while (off < nextparamoff)
+ {
+ const char* pfieldend;
+ uint nextfieldoff;
+
+ pfieldend = memchr(ptran+off, ';', nextparamoff-off);
+ nextfieldoff = (pfieldend == NULL) ? nextparamoff : pfieldend-ptran+1;
+
+ /*
+ if (dstact != DSTACT_NONE && strncmp(ptran+off, "destination=", 12) == 0)
+ {
+ if (strncmp(ptran+off+12, szextaddr, extaddrlen) == 0)
+ {
+ is_stun = 1;
+ }
+ if (dstact == DSTACT_STRIP || (dstact == DSTACT_AUTO && !is_stun))
+ {
+ diff = nextfieldoff-off;
+ if (!nf_nat_mangle_tcp_packet(skb, ct, ctinfo,
+ off, diff, NULL, 0))
+ {
+ nf_ct_unexpect_related(exp);
+ return 0;
+ }
+ get_skb_tcpdata(skb, &ptcp, &tcplen);
+ ptran = ptcp+tranoff;
+ tranlen -= diff;
+ nextparamoff -= diff;
+ nextfieldoff -= diff;
+ }
+ }
+ */
+
+ off = nextfieldoff;
+ }
+ if (is_stun)
+ {
+ continue;
+ }
+ off = saveoff;
+ while (off < nextparamoff)
+ {
+ const char* pfieldend;
+ const char* pdestport;
+ uint nextfieldoff;
+
+ pfieldend = memchr(ptran+off, ';', nextparamoff-off);
+ nextfieldoff = (pfieldend == NULL) ? nextparamoff : pfieldend-ptran+1;
+
+ if (strncmp(ptran+off, "client_port=", 12) == 0)
+ {
+ u_int16_t port;
+ uint numlen;
+ uint origoff;
+ uint origlen;
+ char* rbuf = rbuf1;
+ uint rbuflen = rbuf1len;
+
+ off += 12;
+ origoff = (ptran-ptcp)+off;
+ origlen = 0;
+ numlen = nf_strtou16(ptran+off, &port);
+ off += numlen;
+ origlen += numlen;
+ if (port != prtspexp->loport)
+ {
+ pr_debug("multiple ports found, port %hu ignored\n", port);
+ }
+ else
+ {
+ if (ptran[off] == '-' || ptran[off] == '/')
+ {
+ off++;
+ origlen++;
+ numlen = nf_strtou16(ptran+off, &port);
+ off += numlen;
+ origlen += numlen;
+ rbuf = rbufa;
+ rbuflen = rbufalen;
+ }
+
+ /*
+ * note we cannot just memcpy() if the sizes are the same.
+ * the mangle function does skb resizing, checks for a
+ * cloned skb, and updates the checksums.
+ *
+ * parameter 4 below is offset from start of tcp data.
+ */
+ diff = origlen-rbuflen;
+ if (!nf_nat_mangle_tcp_packet(skb, ct, ctinfo,
+ origoff, origlen, rbuf, rbuflen))
+ {
+ /* mangle failed, all we can do is bail */
+ nf_ct_unexpect_related(exp);
+ return 0;
+ }
+ get_skb_tcpdata(skb, &ptcp, &tcplen);
+ ptran = ptcp+tranoff;
+ tranlen -= diff;
+ nextparamoff -= diff;
+ nextfieldoff -= diff;
+ }
+ }
+ else if ((strncmp(ptran+off, "destination=", 12) == 0) && ((pdestport = memchr(ptran+off+12, ':', nextparamoff-(off + 12))) != NULL))
+ {
+ u_int16_t port;
+ uint numlen;
+ uint origoff;
+ uint origlen;
+ char rbuf[32];
+ uint rbuflen = sprintf(rbuf, "%s:%s",szextaddr,rbuf1);
+
+ pdestport++;
+
+ off += 12;
+ origoff = (ptran + off) - ptcp;
+ origlen = pdestport - (ptran + off);
+ off += origlen;
+ numlen = nf_strtou16(ptran+off, &port);
+ off += numlen;
+ origlen += numlen;
+
+ if (port != prtspexp->loport)
+ {
+ pr_debug("multiple ports found, port %hu ignored\n", port);
+ }
+ else
+ {
+ diff = origlen-rbuflen;
+ if (!nf_nat_mangle_tcp_packet(skb, ct, ctinfo,
+ origoff, origlen, rbuf, rbuflen))
+ {
+ /* mangle failed, all we can do is bail */
+ nf_ct_unexpect_related(exp);
+ return 0;
+ }
+ get_skb_tcpdata(skb, &ptcp, &tcplen);
+ ptran = ptcp+tranoff;
+ tranlen -= diff;
+ nextparamoff -= diff;
+ nextfieldoff -= diff;
+ }
+ }
+
+ off = nextfieldoff;
+ }
+
+ off = nextparamoff;
+ }
+
+ return 1;
+}
+
+static uint
+help_out(struct sk_buff *skb, enum ip_conntrack_info ctinfo,
+ unsigned int matchoff, unsigned int matchlen, struct ip_ct_rtsp_expect* prtspexp,
+ struct nf_conntrack_expect* exp)
+{
+ char* ptcp;
+ uint tcplen;
+ uint hdrsoff;
+ uint hdrslen;
+ uint lineoff;
+ uint linelen;
+ uint off;
+
+ //struct iphdr* iph = (struct iphdr*)(*pskb)->nh.iph;
+ //struct tcphdr* tcph = (struct tcphdr*)((void*)iph + iph->ihl*4);
+
+ get_skb_tcpdata(skb, &ptcp, &tcplen);
+ hdrsoff = matchoff;//exp->seq - ntohl(tcph->seq);
+ hdrslen = matchlen;
+ off = hdrsoff;
+ pr_debug("NAT rtsp help_out\n");
+
+ while (nf_mime_nextline(ptcp, hdrsoff+hdrslen, &off, &lineoff, &linelen))
+ {
+ if (linelen == 0)
+ {
+ break;
+ }
+ if (off > hdrsoff+hdrslen)
+ {
+ pr_debug("!! overrun !!");
+ break;
+ }
+ pr_debug("hdr: len=%u, %.*s", linelen, (int)linelen, ptcp+lineoff);
+
+ if (nf_strncasecmp(ptcp+lineoff, "Transport:", 10) == 0)
+ {
+ uint oldtcplen = tcplen;
+ pr_debug("hdr: Transport\n");
+ if (!rtsp_mangle_tran(ctinfo, exp, prtspexp, skb, lineoff, linelen))
+ {
+ pr_debug("hdr: Transport mangle failed");
+ break;
+ }
+ get_skb_tcpdata(skb, &ptcp, &tcplen);
+ hdrslen -= (oldtcplen-tcplen);
+ off -= (oldtcplen-tcplen);
+ lineoff -= (oldtcplen-tcplen);
+ linelen -= (oldtcplen-tcplen);
+ pr_debug("rep: len=%u, %.*s", linelen, (int)linelen, ptcp+lineoff);
+ }
+ }
+
+ return NF_ACCEPT;
+}
+
+static unsigned int
+help(struct sk_buff *skb, enum ip_conntrack_info ctinfo,
+ unsigned int matchoff, unsigned int matchlen, struct ip_ct_rtsp_expect* prtspexp,
+ struct nf_conntrack_expect* exp)
+{
+ int dir = CTINFO2DIR(ctinfo);
+ int rc = NF_ACCEPT;
+
+ switch (dir)
+ {
+ case IP_CT_DIR_ORIGINAL:
+ rc = help_out(skb, ctinfo, matchoff, matchlen, prtspexp, exp);
+ break;
+ case IP_CT_DIR_REPLY:
+ pr_debug("unmangle ! %u\n", ctinfo);
+ /* XXX: unmangle */
+ rc = NF_ACCEPT;
+ break;
+ }
+ //UNLOCK_BH(&ip_rtsp_lock);
+
+ return rc;
+}
+
+static void expected(struct nf_conn* ct, struct nf_conntrack_expect *exp)
+{
+ struct nf_nat_multi_range_compat mr;
+ u_int32_t newdstip, newsrcip, newip;
+
+ struct nf_conn *master = ct->master;
+
+ newdstip = master->tuplehash[IP_CT_DIR_ORIGINAL].tuple.src.u3.ip;
+ newsrcip = ct->tuplehash[IP_CT_DIR_ORIGINAL].tuple.src.u3.ip;
+ //FIXME (how to port that ?)
+ //code from 2.4 : newip = (HOOK2MANIP(hooknum) == IP_NAT_MANIP_SRC) ? newsrcip : newdstip;
+ newip = newdstip;
+
+ pr_debug("newsrcip=%u.%u.%u.%u, newdstip=%u.%u.%u.%u, newip=%u.%u.%u.%u\n",
+ NIPQUAD(newsrcip), NIPQUAD(newdstip), NIPQUAD(newip));
+
+ mr.rangesize = 1;
+ // We don't want to manip the per-protocol, just the IPs.
+ mr.range[0].flags = IP_NAT_RANGE_MAP_IPS;
+ mr.range[0].min_ip = mr.range[0].max_ip = newip;
+
+ nf_nat_setup_info(ct, &mr.range[0], IP_NAT_MANIP_DST);
+}
+
+
+static void __exit fini(void)
+{
+ nf_nat_rtsp_hook = NULL;
+ nf_nat_rtsp_hook_expectfn = NULL;
+ synchronize_net();
+}
+
+static int __init init(void)
+{
+ printk("nf_nat_rtsp v" IP_NF_RTSP_VERSION " loading\n");
+
+ BUG_ON(nf_nat_rtsp_hook);
+ nf_nat_rtsp_hook = help;
+ nf_nat_rtsp_hook_expectfn = &expected;
+
+ if (stunaddr != NULL)
+ extip = in_aton(stunaddr);
+
+ if (destaction != NULL) {
+ if (strcmp(destaction, "auto") == 0)
+ dstact = DSTACT_AUTO;
+
+ if (strcmp(destaction, "strip") == 0)
+ dstact = DSTACT_STRIP;
+
+ if (strcmp(destaction, "none") == 0)
+ dstact = DSTACT_NONE;
+ }
+
+ return 0;
+}
+
+module_init(init);
+module_exit(fini);
diff --git a/package/zlib/Makefile b/package/zlib/Makefile
index 64a47e4df..e58fadffd 100644
--- a/package/zlib/Makefile
+++ b/package/zlib/Makefile
@@ -38,7 +38,6 @@ ifeq ($(ADK_STATIC),)
CONFIGURE_OPTS:= --shared
endif
-#--includedir=$(STAGING_DIR)/usr/include
do-configure:
(cd $(WRKBUILD); $(COPTS) \
CFLAGS="$(TARGET_CFLAGS) -fPIC" \