summaryrefslogtreecommitdiff
path: root/testing
diff options
context:
space:
mode:
authorroot <root@rshg054.dnsready.net>2011-11-04 23:14:51 +0000
committerroot <root@rshg054.dnsready.net>2011-11-04 23:14:51 +0000
commit3026bb55941e3b04b56f5fb41b88941c6c2ce0cd (patch)
tree576b183074d925e58c2e37ae2b641e712bceacb1 /testing
parentb625511a28fd8401f524474b5339e75328595150 (diff)
Fri Nov 4 23:14:51 UTC 2011
Diffstat (limited to 'testing')
-rw-r--r--testing/bash/PKGBUILD101
-rw-r--r--testing/bash/bash.install20
-rw-r--r--testing/bash/dot.bash_logout3
-rw-r--r--testing/bash/dot.bash_profile5
-rw-r--r--testing/bash/dot.bashrc9
-rw-r--r--testing/bash/system.bash_logout3
-rw-r--r--testing/bash/system.bashrc23
-rw-r--r--testing/bison/ChangeLog19
-rw-r--r--testing/bison/PKGBUILD33
-rw-r--r--testing/bison/bison.install16
-rw-r--r--testing/bzip2/PKGBUILD69
-rw-r--r--testing/bzip2/bzip2-1.0.4-bzip2recover.patch12
-rw-r--r--testing/cryptsetup/PKGBUILD25
-rw-r--r--testing/cryptsetup/cryptsetup-fix-crypt_get_volume_key_size-for-plain-device.patch94
-rw-r--r--testing/dhcpcd/PKGBUILD50
-rw-r--r--testing/dhcpcd/dhcpcd.conf.d6
-rw-r--r--testing/e2fsprogs/MIT-LICENSE25
-rw-r--r--testing/e2fsprogs/PKGBUILD48
-rw-r--r--testing/e2fsprogs/e2fsprogs.install20
-rw-r--r--testing/e2fsprogs/mke2fs.conf26
-rw-r--r--testing/expat/CVE-2009-3560.patch13
-rw-r--r--testing/expat/CVE-2009-3720.patch12
-rw-r--r--testing/expat/PKGBUILD38
-rw-r--r--testing/flex/PKGBUILD59
-rw-r--r--testing/flex/flex-2.5.35-gcc44.patch22
-rw-r--r--testing/flex/flex-2.5.35-hardening.patch36
-rw-r--r--testing/flex/flex-2.5.35-missing-prototypes.patch53
-rw-r--r--testing/flex/flex-2.5.35-sign.patch11
-rw-r--r--testing/flex/flex.install22
-rw-r--r--testing/flex/lex.sh3
-rw-r--r--testing/grep/PKGBUILD34
-rw-r--r--testing/grep/grep.install21
-rw-r--r--testing/gzip/PKGBUILD43
-rw-r--r--testing/gzip/gzip.install20
-rw-r--r--testing/hdparm/PKGBUILD42
-rw-r--r--testing/hdparm/wiper.sh.2_6.max-ranges.patch84
-rw-r--r--testing/iproute2/PKGBUILD51
-rw-r--r--testing/iproute2/iproute2-fhs.patch84
-rw-r--r--testing/iputils/PKGBUILD65
-rw-r--r--testing/iputils/iputils-s20101006-manpages.patch1044
-rw-r--r--testing/iputils/permission-fix.patch15
-rw-r--r--testing/isdn4k-utils/PKGBUILD34
-rw-r--r--testing/isdn4k-utils/config100
-rw-r--r--testing/isdn4k-utils/isdn4k-utils-3.2p1-build.patch2028
-rw-r--r--testing/less/PKGBUILD31
-rw-r--r--testing/libcap/PKGBUILD27
-rw-r--r--testing/libpcap/Add-support-for-libnl-2.x-adapted-from-a-newer-versi.patch344
-rw-r--r--testing/libpcap/Libnl-2.x-returns-its-own-error-codes-not-errnos-han.patch159
-rw-r--r--testing/libpcap/PKGBUILD41
-rw-r--r--testing/librpcsecgss/PKGBUILD32
-rw-r--r--testing/librpcsecgss/librpcsecgss-0.18-heimdal.patch33
-rw-r--r--testing/libusb-compat/PKGBUILD27
-rw-r--r--testing/libusb/PKGBUILD30
-rw-r--r--testing/linux-atm/PKGBUILD29
-rw-r--r--testing/linux-atm/man-pages.patch45
-rw-r--r--testing/m4/PKGBUILD36
-rw-r--r--testing/m4/m4-1.4.16-readlink-einval.patch12
-rw-r--r--testing/m4/m4.install20
-rw-r--r--testing/mlocate/PKGBUILD56
-rw-r--r--testing/mlocate/mlocate.install18
-rw-r--r--testing/mlocate/updatedb.conf5
-rwxr-xr-xtesting/mlocate/updatedb.cron.daily29
-rw-r--r--testing/ncurses/PKGBUILD74
-rw-r--r--testing/net-tools/PKGBUILD43
-rw-r--r--testing/net-tools/gcc340.patch46
-rw-r--r--testing/net-tools/net-tools-1.60-2.6-compilefix.patch23
-rw-r--r--testing/net-tools/net-tools-1.60-miiioctl.patch17
-rw-r--r--testing/net-tools/net-tools-1.60-nameif.patch58
-rw-r--r--testing/net-tools/net-tools-1.60-nameif_strncpy.patch13
-rw-r--r--testing/net-tools/net-tools.install12
-rw-r--r--testing/net-tools/net-tools.patch30
-rw-r--r--testing/openldap/PKGBUILD96
-rw-r--r--testing/openldap/ntlm.patch230
-rw-r--r--testing/openldap/openldap.install20
-rwxr-xr-xtesting/openldap/slapd49
-rw-r--r--testing/openldap/slapd.default6
-rw-r--r--testing/patch/PKGBUILD40
-rw-r--r--testing/patch/patch-2.6.1-get-arg.patch12
-rw-r--r--testing/pkg-config/PKGBUILD37
-rw-r--r--testing/pkg-config/autoconf-2.66.patch12
-rw-r--r--testing/ppp/PKGBUILD80
-rw-r--r--testing/ppp/ip-down12
-rw-r--r--testing/ppp/ip-down.d.dns.sh3
-rw-r--r--testing/ppp/ip-up12
-rw-r--r--testing/ppp/ip-up.d.dns.sh7
-rw-r--r--testing/ppp/options352
-rw-r--r--testing/ppp/plog7
-rw-r--r--testing/ppp/poff103
-rw-r--r--testing/ppp/pon32
-rw-r--r--testing/ppp/pon.1121
-rw-r--r--testing/ppp/ppp36
-rw-r--r--testing/readline/PKGBUILD62
-rw-r--r--testing/readline/inputrc36
-rw-r--r--testing/readline/readline.install17
-rw-r--r--testing/rpcbind/PKGBUILD42
-rwxr-xr-xtesting/rpcbind/rpcbind39
-rw-r--r--testing/rpcbind/rpcbind-sunrpc.patch22
-rw-r--r--testing/sed/PKGBUILD34
-rw-r--r--testing/sed/sed.install20
-rw-r--r--testing/sysfsutils/PKGBUILD36
-rw-r--r--testing/tar/PKGBUILD38
-rw-r--r--testing/tar/tar.1367
-rw-r--r--testing/tar/tar.install21
-rw-r--r--testing/texinfo/PKGBUILD31
-rw-r--r--testing/texinfo/texinfo.install21
-rw-r--r--testing/which/PKGBUILD27
-rw-r--r--testing/which/which.install20
-rw-r--r--testing/xfsprogs/PKGBUILD29
-rw-r--r--testing/xinetd/PKGBUILD43
-rw-r--r--testing/xinetd/servers10
-rw-r--r--testing/xinetd/services10
-rwxr-xr-xtesting/xinetd/xinetd38
-rw-r--r--testing/xinetd/xinetd.conf14
113 files changed, 8064 insertions, 11 deletions
diff --git a/testing/bash/PKGBUILD b/testing/bash/PKGBUILD
new file mode 100644
index 000000000..3e3ba3663
--- /dev/null
+++ b/testing/bash/PKGBUILD
@@ -0,0 +1,101 @@
+# $Id: PKGBUILD 141911 2011-11-03 05:56:41Z allan $
+# Maintainer: Aaron Griffin <aaron@archlinux.org>
+# Maintainer: Allan McRae <allan@archlinux.org>
+
+pkgname=bash
+_basever=4.2
+_patchlevel=010 #prepare for some patches
+pkgver=$_basever.$_patchlevel
+pkgrel=2
+pkgdesc="The GNU Bourne Again shell"
+arch=('i686' 'x86_64')
+license=('GPL')
+url="http://www.gnu.org/software/bash/bash.html"
+groups=('base')
+backup=(etc/bash.bash{rc,_logout} etc/skel/.bash{rc,_profile,_logout})
+depends=('readline>=6.1' 'glibc')
+provides=('sh')
+install=bash.install
+source=(http://ftp.gnu.org/gnu/bash/bash-$_basever.tar.gz{,.sig}
+ dot.bashrc
+ dot.bash_profile
+ dot.bash_logout
+ system.bashrc
+ system.bash_logout)
+if [ $_patchlevel -gt 000 ]; then
+ for (( p=1; p<=$((10#${_patchlevel})); p++ )); do
+ source=(${source[@]} http://ftp.gnu.org/gnu/bash/bash-$_basever-patches/bash${_basever//./}-$(printf "%03d" $p){,.sig})
+ done
+fi
+
+build() {
+ cd ${srcdir}/${pkgname}-$_basever
+ for (( p=1; p<=$((10#${_patchlevel})); p++ )); do
+ msg "applying patch bash${_basever//./}-$(printf "%03d" $p)"
+ patch -Np0 -i $srcdir/bash${_basever//./}-$(printf "%03d" $p)
+ done
+
+ _bashconfig=(-DDEFAULT_PATH_VALUE=\'\"/usr/local/bin:/usr/bin:/bin:/usr/local/sbin:/usr/sbin:/sbin\"\'
+ -DSTANDARD_UTILS_PATH=\'\"/usr/bin:/bin:/usr/sbin:/sbin\"\'
+ -DSYS_BASHRC=\'\"/etc/bash.bashrc\"\'
+ -DSYS_BASH_LOGOUT=\'\"/etc/bash.bash_logout\"\')
+ export CFLAGS="${CFLAGS} ${_bashconfig[@]}"
+
+ ./configure --prefix=/usr --with-curses --enable-readline \
+ --without-bash-malloc --with-installed-readline \
+ --bindir=/bin --mandir=/usr/share/man --infodir=/usr/share/info
+ make
+}
+
+check() {
+ cd ${srcdir}/${pkgname}-$_basever
+ make check
+}
+
+package() {
+ cd ${srcdir}/${pkgname}-$_basever
+ make DESTDIR=${pkgdir} install
+
+ # for now, bash is our default /bin/sh
+ cd ${pkgdir}/bin
+ ln -s bash sh
+
+ install -dm755 ${pkgdir}/etc/skel/
+
+ # system-wide configuration files
+ install -m644 ${srcdir}/system.bashrc ${pkgdir}/etc/bash.bashrc
+ install -m644 ${srcdir}/system.bash_logout ${pkgdir}/etc/bash.bash_logout
+
+ # user configuration file skeletons
+ install -m644 ${srcdir}/dot.bashrc ${pkgdir}/etc/skel/.bashrc
+ install -m644 ${srcdir}/dot.bash_profile ${pkgdir}/etc/skel/.bash_profile
+ install -m644 ${srcdir}/dot.bash_logout ${pkgdir}/etc/skel/.bash_logout
+}
+
+md5sums=('3fb927c7c33022f1c327f14a81c0d4b0'
+ '8d37a3f97a48c1e56e1a4ded877ed944'
+ '027d6bd8f5f6a06b75bb7698cb478089'
+ '2902e0fee7a9168f3a4fd2ccd60ff047'
+ '42f4400ed2314bd7519c020d0187edc5'
+ 'fe5d3a367f7d5f754214dc05e3d958ab'
+ '472f536d7c9e8250dc4568ec4cfaf294'
+ '1100bc1dda2cdc06ac44d7e5d17864a3'
+ 'a7184b76eb4a079f10174a0a8f574819'
+ '30e7948079921d3261efcc6a40722135'
+ 'c4d45307f7e69fe508ce347c4cec1955'
+ '9ea06decec43a198f3d7cf29acc602f8'
+ '74bddae6eeb9227a04a467d42597a34d'
+ 'fb48f6134d7b013135929476aa0c250c'
+ '3e6a18226b16c773229246abd07a1f5e'
+ 'e70e45de33426b38153b390be0dbbcd4'
+ 'e667dc9348ebc3e0e14bfdd87f4b6ff2'
+ 'ce4e5c484993705b27daa151eca242c2'
+ '41cbd8e57589bc081a546a014ddb12f8'
+ '88d1f96db29461767602e2546803bda7'
+ 'b8b781520f4c7493a2a1ac3010a44a44'
+ '24c574bf6d6a581e300823d9c1276af6'
+ '354a0899a7c4b446454c52546562b55b'
+ '4c5835f2fbab36c4292bb334977e5b6d'
+ 'ff4547ca7b508d52101729d61f5b77b6'
+ '0a51602b535ef661ee707be6c8bdb373'
+ 'cec7c92a4d8052ea4b29216365d16566')
diff --git a/testing/bash/bash.install b/testing/bash/bash.install
new file mode 100644
index 000000000..bc75e9b6a
--- /dev/null
+++ b/testing/bash/bash.install
@@ -0,0 +1,20 @@
+info_dir=usr/share/info
+info_files=(bash.info)
+
+post_install() {
+ [ -x usr/bin/install-info ] || return 0
+ for f in ${info_files[@]}; do
+ usr/bin/install-info ${info_dir}/$f.gz ${info_dir}/dir 2> /dev/null
+ done
+}
+
+post_upgrade() {
+ post_install $1
+}
+
+pre_remove() {
+ [ -x usr/bin/install-info ] || return 0
+ for f in ${info_files[@]}; do
+ usr/bin/install-info --delete ${info_dir}/$f.gz ${info_dir}/dir 2> /dev/null
+ done
+}
diff --git a/testing/bash/dot.bash_logout b/testing/bash/dot.bash_logout
new file mode 100644
index 000000000..0e4e4f184
--- /dev/null
+++ b/testing/bash/dot.bash_logout
@@ -0,0 +1,3 @@
+#
+# ~/.bash_logout
+#
diff --git a/testing/bash/dot.bash_profile b/testing/bash/dot.bash_profile
new file mode 100644
index 000000000..5545f007e
--- /dev/null
+++ b/testing/bash/dot.bash_profile
@@ -0,0 +1,5 @@
+#
+# ~/.bash_profile
+#
+
+[[ -f ~/.bashrc ]] && . ~/.bashrc
diff --git a/testing/bash/dot.bashrc b/testing/bash/dot.bashrc
new file mode 100644
index 000000000..a355b0cd3
--- /dev/null
+++ b/testing/bash/dot.bashrc
@@ -0,0 +1,9 @@
+#
+# ~/.bashrc
+#
+
+# If not running interactively, don't do anything
+[[ $- != *i* ]] && return
+
+alias ls='ls --color=auto'
+PS1='[\u@\h \W]\$ '
diff --git a/testing/bash/system.bash_logout b/testing/bash/system.bash_logout
new file mode 100644
index 000000000..a76e48e4a
--- /dev/null
+++ b/testing/bash/system.bash_logout
@@ -0,0 +1,3 @@
+#
+# /etc/bash.bash_logout
+#
diff --git a/testing/bash/system.bashrc b/testing/bash/system.bashrc
new file mode 100644
index 000000000..84de2898c
--- /dev/null
+++ b/testing/bash/system.bashrc
@@ -0,0 +1,23 @@
+#
+# /etc/bash.bashrc
+#
+
+# If not running interactively, don't do anything
+[[ $- != *i* ]] && return
+
+PS1='[\u@\h \W]\$ '
+PS2='> '
+PS3='> '
+PS4='+ '
+
+case ${TERM} in
+ xterm*|rxvt*|Eterm|aterm|kterm|gnome*)
+ PROMPT_COMMAND=${PROMPT_COMMAND:+$PROMPT_COMMAND; }'printf "\033]0;%s@%s:%s\007" "${USER}" "${HOSTNAME%%.*}" "${PWD/#$HOME/~}"'
+
+ ;;
+ screen)
+ PROMPT_COMMAND=${PROMPT_COMMAND:+$PROMPT_COMMAND; }'printf "\033_%s@%s:%s\033\\" "${USER}" "${HOSTNAME%%.*}" "${PWD/#$HOME/~}"'
+ ;;
+esac
+
+[ -r /etc/bash_completion ] && . /etc/bash_completion
diff --git a/testing/bison/ChangeLog b/testing/bison/ChangeLog
new file mode 100644
index 000000000..5bb22be1d
--- /dev/null
+++ b/testing/bison/ChangeLog
@@ -0,0 +1,19 @@
+2010-03-25 Eric Belanger <eric@archlinux.org>
+
+ * bison 2.4.2-1
+ * Upstream update
+ * Removed texinfo dependency in install scriptlet
+ * Updated license
+ * Added sh depends
+
+2008-12-11 Eric Belanger <eric@archlinux.org>
+
+ * bison 2.4.1-1
+ * Upstream update
+
+2008-11-08 Eric Belanger <eric@archlinux.org>
+
+ * bison 2.4-1
+ * Upstream update
+ * Added info file support
+ * Added ChangeLog
diff --git a/testing/bison/PKGBUILD b/testing/bison/PKGBUILD
new file mode 100644
index 000000000..51af7528f
--- /dev/null
+++ b/testing/bison/PKGBUILD
@@ -0,0 +1,33 @@
+# $Id: PKGBUILD 141913 2011-11-03 06:08:40Z allan $
+# Maintainer: Allan McRae <allan@archlinux.org>
+# Contributor: Eric Belanger <eric@archlinux.org>
+
+pkgname=bison
+pkgver=2.5
+pkgrel=2
+pkgdesc="The GNU general-purpose parser generator"
+arch=('i686' 'x86_64')
+license=('GPL3')
+url="http://www.gnu.org/software/bison/bison.html"
+depends=('glibc' 'm4' 'sh')
+groups=('base-devel')
+install=bison.install
+source=(ftp://ftp.gnu.org/gnu/bison/${pkgname}-${pkgver}.tar.bz2{,.sig})
+md5sums=('9dba20116b13fc61a0846b0058fbe004'
+ '610b73db67bd4760209458efe7554ca3')
+
+build() {
+ cd "${srcdir}/${pkgname}-${pkgver}"
+ ./configure --prefix=/usr --datadir=/usr/share
+ make
+}
+
+check() {
+ cd "${srcdir}/${pkgname}-${pkgver}"
+ make check
+}
+
+package() {
+ cd "${srcdir}/${pkgname}-${pkgver}"
+ make DESTDIR="${pkgdir}" install
+}
diff --git a/testing/bison/bison.install b/testing/bison/bison.install
new file mode 100644
index 000000000..0081a194f
--- /dev/null
+++ b/testing/bison/bison.install
@@ -0,0 +1,16 @@
+infodir=usr/share/info
+file=bison.info.gz
+
+post_install() {
+ [ -x usr/bin/install-info ] || return 0
+ install-info $infodir/$file $infodir/dir 2> /dev/null
+}
+
+post_upgrade() {
+ post_install $1
+}
+
+pre_remove() {
+ [ -x usr/bin/install-info ] || return 0
+ install-info --delete $infodir/$file $infodir/dir 2> /dev/null
+}
diff --git a/testing/bzip2/PKGBUILD b/testing/bzip2/PKGBUILD
new file mode 100644
index 000000000..7a1b27f94
--- /dev/null
+++ b/testing/bzip2/PKGBUILD
@@ -0,0 +1,69 @@
+# $Id: PKGBUILD 141996 2011-11-03 21:01:23Z ronald $
+# Maintainer: Ronald van Haren <ronald.archlinux.org>
+# Contributor: Judd <jvinet@zeroflux.org>
+
+pkgname=bzip2
+pkgver=1.0.6
+pkgrel=3
+pkgdesc="A high-quality data compression program"
+arch=('i686' 'x86_64')
+license=('custom')
+url="http://sources.redhat.com/bzip2"
+groups=('base')
+depends=('glibc')
+source=(http://www.bzip.org/$pkgver/bzip2-$pkgver.tar.gz
+ bzip2-1.0.4-bzip2recover.patch)
+sha1sums=('3f89f861209ce81a6bab1fd1998c0ef311712002'
+ '85ce76fdb67f52f152bba368c1de81132dcdbdb5')
+
+build() {
+ cd "$srcdir/$pkgname-$pkgver"
+
+ # add large-file support
+ sed -e 's/^CFLAGS=\(.*\)$/CFLAGS=\1 \$(BIGFILES)/' -i ./Makefile-libbz2_so
+
+ # use our optimization
+ sed -i "s|-O2|${CFLAGS}|g" Makefile
+ sed -i "s|-O2|${CFLAGS}|g" Makefile-libbz2_so
+
+ patch -Np1 < ../bzip2-1.0.4-bzip2recover.patch
+
+ make -f Makefile-libbz2_so
+ make bzip2 bzip2recover libbz2.a
+}
+
+check() {
+ cd "$srcdir/$pkgname-$pkgver"
+ make test
+}
+
+package() {
+ cd "$srcdir/$pkgname-$pkgver"
+
+ install -dm755 $pkgdir/bin
+ install -m755 bzip2-shared $pkgdir/bin/bzip2
+ install -m755 bzip2recover $pkgdir/bin
+ ln -sf bzip2 $pkgdir/bin/bunzip2
+ ln -sf bzip2 $pkgdir/bin/bzcat
+
+ install -dm755 $pkgdir/usr/bin
+ install -m755 bzdiff bzgrep bzmore $pkgdir/usr/bin
+
+ install -Dm755 libbz2.so.1.0.6 $pkgdir/lib/libbz2.so.1.0.6
+ ln -s libbz2.so.1.0.6 $pkgdir/lib/libbz2.so
+ ln -s libbz2.so.1.0.6 $pkgdir/lib/libbz2.so.1
+ ln -s libbz2.so.1.0.6 $pkgdir/lib/libbz2.so.1.0
+
+ install -Dm644 libbz2.a ${pkgdir}/usr/lib/libbz2.a
+ ln -sf ../../lib/libbz2.so ${pkgdir}/usr/lib/libbz2.so
+
+ install -Dm644 bzlib.h $pkgdir/usr/include/bzlib.h
+
+ install -Dm644 bzip2.1 $pkgdir/usr/share/man/man1/bzip2.1
+ ln -sf bzip2.1 $pkgdir/usr/share/man/man1/bunzip2.1
+ ln -sf bzip2.1 $pkgdir/usr/share/man/man1/bzcat.1
+ ln -sf bzip2.1 $pkgdir/usr/share/man/man1/bzip2recover.1
+
+ install -Dm644 $srcdir/${pkgname}-${pkgver}/LICENSE \
+ $pkgdir/usr/share/licenses/${pkgname}/LICENSE
+}
diff --git a/testing/bzip2/bzip2-1.0.4-bzip2recover.patch b/testing/bzip2/bzip2-1.0.4-bzip2recover.patch
new file mode 100644
index 000000000..e2bfe1cc1
--- /dev/null
+++ b/testing/bzip2/bzip2-1.0.4-bzip2recover.patch
@@ -0,0 +1,12 @@
+--- bzip2-1.0.4/bzip2recover.c.pom 2007-01-03 03:00:55.000000000 +0100
++++ bzip2-1.0.4/bzip2recover.c 2007-02-05 11:55:17.000000000 +0100
+@@ -309,7 +309,8 @@
+ UInt32 buffHi, buffLo, blockCRC;
+ Char* p;
+
+- strcpy ( progName, argv[0] );
++ strncpy ( progName, argv[0], BZ_MAX_FILENAME-1);
++ progName[BZ_MAX_FILENAME-1]='\0';
+ inFileName[0] = outFileName[0] = 0;
+
+ fprintf ( stderr,
diff --git a/testing/cryptsetup/PKGBUILD b/testing/cryptsetup/PKGBUILD
index 6210e7418..e3c2872f5 100644
--- a/testing/cryptsetup/PKGBUILD
+++ b/testing/cryptsetup/PKGBUILD
@@ -1,8 +1,8 @@
-# $Id: PKGBUILD 141489 2011-10-30 23:10:21Z thomas $
+# $Id: PKGBUILD 141965 2011-11-03 18:49:44Z thomas $
# Maintainer: Thomas Bächler <thomas@archlinux.org>
pkgname=cryptsetup
pkgver=1.4.0
-pkgrel=1
+pkgrel=2
pkgdesc="Userspace setup tool for transparent encryption of block devices using dm-crypt"
arch=(i686 x86_64)
license=('GPL')
@@ -13,23 +13,26 @@ conflicts=('mkinitcpio<0.7')
options=('!libtool' '!emptydirs')
source=(http://cryptsetup.googlecode.com/files/${pkgname}-${pkgver}.tar.bz2
encrypt_hook
- encrypt_install)
+ encrypt_install
+ cryptsetup-fix-crypt_get_volume_key_size-for-plain-device.patch)
sha256sums=('96d682853c8019cfeae0b21250cd2d00af42e46251807e8dbda2ff8427c2e9ed'
'811bbea1337106ad811731c746d73ee81039bad00aef52398e3a377ad0766757'
- 'd4380195351b70abf8fcb3cd19461879c55a7a07e4915d1f0365b295b112a573')
+ 'd4380195351b70abf8fcb3cd19461879c55a7a07e4915d1f0365b295b112a573'
+ '6fa1d3172014ba3ba96f7a67acbcae7f26b24a61abb84b3917f526a54f81dd87')
build() {
- cd $srcdir/$pkgname-${pkgver}
+ cd "${srcdir}"/$pkgname-${pkgver}
+ patch -p0 -i "${srcdir}"/cryptsetup-fix-crypt_get_volume_key_size-for-plain-device.patch
./configure --prefix=/usr --disable-static --sbindir=/sbin --libdir=/lib
make
}
package() {
- cd $srcdir/$pkgname-${pkgver}
- make DESTDIR=$pkgdir install
+ cd "${srcdir}"/$pkgname-${pkgver}
+ make DESTDIR="${pkgdir}" install
# install hook
- install -D -m644 $srcdir/encrypt_hook $pkgdir/lib/initcpio/hooks/encrypt
- install -D -m644 $srcdir/encrypt_install $pkgdir/lib/initcpio/install/encrypt
+ install -D -m644 "${srcdir}"/encrypt_hook "${pkgdir}"/lib/initcpio/hooks/encrypt
+ install -D -m644 "${srcdir}"/encrypt_install "${pkgdir}"/lib/initcpio/install/encrypt
# Fix pkgconfig location
- install -d -m755 $pkgdir/usr/lib
- mv $pkgdir/lib/pkgconfig $pkgdir/usr/lib/
+ install -d -m755 "${pkgdir}"/usr/lib
+ mv "${pkgdir}"/lib/pkgconfig "${pkgdir}"/usr/lib/
}
diff --git a/testing/cryptsetup/cryptsetup-fix-crypt_get_volume_key_size-for-plain-device.patch b/testing/cryptsetup/cryptsetup-fix-crypt_get_volume_key_size-for-plain-device.patch
new file mode 100644
index 000000000..f35226122
--- /dev/null
+++ b/testing/cryptsetup/cryptsetup-fix-crypt_get_volume_key_size-for-plain-device.patch
@@ -0,0 +1,94 @@
+Index: ChangeLog
+===================================================================
+--- ChangeLog (Revision 664)
++++ ChangeLog (Revision 665)
+@@ -1,3 +1,6 @@
++2011-10-27 Milan Broz <mbroz@redhat.com>
++ * Fix crypt_get_volume_key_size() for plain device.
++
+ 2011-10-25 Milan Broz <mbroz@redhat.com>
+ * Print informative message in isLuks only in verbose mode.
+ * Version 1.4.0.
+Index: tests/api-test.c
+===================================================================
+--- tests/api-test.c (Revision 664)
++++ tests/api-test.c (Revision 665)
+@@ -660,6 +660,11 @@
+
+ FAIL_(crypt_init_by_name_and_header(&cd, CDEVICE_1, H_DEVICE),"can't init plain device by header device");
+ OK_(crypt_init_by_name(&cd, CDEVICE_1));
++ OK_(strcmp(cipher_mode,crypt_get_cipher_mode(cd)));
++ OK_(strcmp(cipher,crypt_get_cipher(cd)));
++ EQ_((int)key_size, crypt_get_volume_key_size(cd));
++ EQ_(params.skip, crypt_get_iv_offset(cd));
++ EQ_(params.offset, crypt_get_data_offset(cd));
+ OK_(crypt_deactivate(cd, CDEVICE_1));
+ crypt_free(cd);
+
+Index: lib/setup.c
+===================================================================
+--- lib/setup.c (Revision 664)
++++ lib/setup.c (Revision 665)
+@@ -56,6 +56,7 @@
+ char *plain_cipher;
+ char *plain_cipher_mode;
+ char *plain_uuid;
++ unsigned int plain_key_size;
+
+ /* used in CRYPT_LOOPAES */
+ struct crypt_params_loopaes loopaes_hdr;
+@@ -677,6 +678,7 @@
+ (*cd)->plain_hdr.hash = NULL; /* no way to get this */
+ (*cd)->plain_hdr.offset = dmd.offset;
+ (*cd)->plain_hdr.skip = dmd.iv_offset;
++ (*cd)->plain_key_size = dmd.vk->keylength;
+
+ r = crypt_parse_name_and_mode(dmd.cipher, cipher, NULL, cipher_mode);
+ if (!r) {
+@@ -754,6 +756,7 @@
+ return -EINVAL;
+ }
+
++ cd->plain_key_size = volume_key_size;
+ cd->volume_key = crypt_alloc_volume_key(volume_key_size, NULL);
+ if (!cd->volume_key)
+ return -ENOMEM;
+@@ -1516,7 +1519,7 @@
+ }
+
+ r = process_key(cd, cd->plain_hdr.hash,
+- cd->volume_key->keylength,
++ cd->plain_key_size,
+ passphrase, passphrase_size, &vk);
+ if (r < 0)
+ goto out;
+@@ -1586,7 +1589,7 @@
+ goto out;
+
+ r = process_key(cd, cd->plain_hdr.hash,
+- cd->volume_key->keylength,
++ cd->plain_key_size,
+ passphrase_read, passphrase_size_read, &vk);
+ if (r < 0)
+ goto out;
+@@ -1658,8 +1661,7 @@
+ if (!name)
+ return -EINVAL;
+
+- if (!volume_key || !volume_key_size || !cd->volume_key ||
+- volume_key_size != cd->volume_key->keylength) {
++ if (!volume_key || !volume_key_size || volume_key_size != cd->plain_key_size) {
+ log_err(cd, _("Incorrect volume key specified for plain device.\n"));
+ return -EINVAL;
+ }
+@@ -1976,8 +1978,8 @@
+
+ int crypt_get_volume_key_size(struct crypt_device *cd)
+ {
+- if (isPLAIN(cd->type) && cd->volume_key)
+- return cd->volume_key->keylength;
++ if (isPLAIN(cd->type))
++ return cd->plain_key_size;
+
+ if (isLUKS(cd->type))
+ return cd->hdr.keyBytes;
diff --git a/testing/dhcpcd/PKGBUILD b/testing/dhcpcd/PKGBUILD
new file mode 100644
index 000000000..a6acd400f
--- /dev/null
+++ b/testing/dhcpcd/PKGBUILD
@@ -0,0 +1,50 @@
+# $Id: PKGBUILD 142006 2011-11-03 21:26:34Z ronald $
+# Maintainer: Ronald van Haren <ronald.archlinux.org>
+# Contributor: Tom Killian <tom.archlinux.org>
+# Contributor: Judd Vinet <jvinet.zeroflux.org>
+
+pkgname=dhcpcd
+pkgver=5.2.12
+pkgrel=2
+pkgdesc="RFC2131 compliant DHCP client daemon"
+url="http://roy.marples.name/dhcpcd/"
+arch=('i686' 'x86_64')
+license=('BSD')
+groups=('base')
+depends=('glibc' 'sh' 'inetutils' 'net-tools')
+backup=('etc/conf.d/dhcpcd' 'etc/dhcpcd.conf')
+options=('emptydirs') # We Need the Empty /var/lib/dhcpcd Directory
+source=("http://roy.marples.name/downloads/$pkgname/$pkgname-$pkgver.tar.bz2" \
+ 'dhcpcd.conf.d')
+sha1sums=('27378a251705c7888332e6d60eea7805d1f8aeb5'
+ 'b67b9ce6a2faaca75fea356966a16be2283b7db0')
+
+build() {
+ cd ${srcdir}/${pkgname}-${pkgver}
+
+ # configure variables
+ ./configure --libexecdir=/usr/lib/dhcpcd --dbdir=/var/lib/dhcpcd
+
+ # Build
+ make
+}
+
+package() {
+ cd ${srcdir}/${pkgname}-${pkgver}
+ make DESTDIR=${pkgdir} install
+
+ # Create Binary Symlink
+ install -d ${pkgdir}/usr/sbin
+ ln -sf /sbin/dhcpcd ${pkgdir}/usr/sbin/dhcpcd
+
+ # Install Configuration File used in /etc/rc.d/network
+ install -D -m644 ../dhcpcd.conf.d $pkgdir/etc/conf.d/$pkgname
+
+ # Install License
+ install -d $pkgdir/usr/share/licenses/$pkgname
+ awk '{if(FNR<27)print $0}' ${srcdir}/${pkgname}-${pkgver}/configure.h \
+ >> ${pkgdir}/usr/share/licenses/${pkgname}/LICENSE
+
+ # Set Options in /etc/dhcpcd.conf
+ echo noipv4ll >> ${pkgdir}/etc/dhcpcd.conf # Disable ip4vall
+}
diff --git a/testing/dhcpcd/dhcpcd.conf.d b/testing/dhcpcd/dhcpcd.conf.d
new file mode 100644
index 000000000..83c6f14ad
--- /dev/null
+++ b/testing/dhcpcd/dhcpcd.conf.d
@@ -0,0 +1,6 @@
+#
+# Arguments to be passed to the DHCP client daemon
+#
+
+DHCPCD_ARGS="-q"
+
diff --git a/testing/e2fsprogs/MIT-LICENSE b/testing/e2fsprogs/MIT-LICENSE
new file mode 100644
index 000000000..d849b28f2
--- /dev/null
+++ b/testing/e2fsprogs/MIT-LICENSE
@@ -0,0 +1,25 @@
+Copyright (c) 2003-2007 Theodore Ts'o <tytso@mit.edu>
+Copyright (c) 1997-2003 Yann Dirson <dirson@debian.org>
+Copyright (c) 2001 Alcove <http://www.alcove.com/>
+Copyright (c) 1997 Klee Dienes
+Copyright (c) 1995-1996 Michael Nonweiler <mrn20@cam.ac.uk>
+
+Permission is hereby granted, free of charge, to any person obtaining
+a copy of this software and associated documentation files (the
+"Software"), to deal in the Software without restriction, including
+without limitation the rights to use, copy, modify, merge, publish,
+distribute, sublicense, and/or sell copies of the Software, and to
+permit persons to whom the Software is furnished to do so, subject
+to the following conditions:
+
+The above copyright notice and this permission notice shall be
+included in all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY
+KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE
+WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS
+BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
+AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR
+IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
diff --git a/testing/e2fsprogs/PKGBUILD b/testing/e2fsprogs/PKGBUILD
new file mode 100644
index 000000000..86d97da13
--- /dev/null
+++ b/testing/e2fsprogs/PKGBUILD
@@ -0,0 +1,48 @@
+# $Id: PKGBUILD 141998 2011-11-03 21:12:45Z ronald $
+# Maintainer: Ronald van Haren <ronald.archlinux.org>
+# Contributor: judd <jvinet@zeroflux.org>
+
+pkgname=e2fsprogs
+pkgver=1.41.14
+pkgrel=2
+pkgdesc="Ext2/3/4 filesystem utilities"
+arch=('i686' 'x86_64')
+license=('GPL' 'LGPL' 'MIT')
+url="http://e2fsprogs.sourceforge.net"
+groups=('base')
+depends=('sh' 'util-linux-ng')
+makedepends=('bc')
+source=("http://downloads.sourceforge.net/sourceforge/${pkgname}/${pkgname}-${pkgver}.tar.gz"
+ 'MIT-LICENSE')
+backup=('etc/mke2fs.conf')
+install=${pkgname}.install
+sha1sums=('24f9364fa3d4c0d7d00cb627b819d0e51055d6c5'
+ 'f4a0d5b0cdb980e3fedd6f5e7dde0b0ffb7bbdfb')
+
+build() {
+ cd "${srcdir}/${pkgname}-${pkgver}"
+
+ # Remove unnecessary init.d directory
+ sed -i '/init\.d/s|^|#|' misc/Makefile.in
+
+ ./configure --prefix=/usr --with-root-prefix="" --enable-elf-shlibs \
+ --disable-fsck --disable-uuidd \
+ --disable-libuuid --disable-libblkid
+
+ make
+}
+
+package() {
+ cd "${srcdir}/${pkgname}-${pkgver}"
+ make DESTDIR="${pkgdir}" install install-libs
+
+ sed -i -e 's/^AWK=.*/AWK=awk/' "${pkgdir}/usr/bin/compile_et"
+
+ # remove references to build directory
+ sed -i -e 's#^SS_DIR=.*#SS_DIR="/usr/share/ss"#' "${pkgdir}/usr/bin/mk_cmds"
+ sed -i -e 's#^ET_DIR=.*#ET_DIR="/usr/share/et"#' "${pkgdir}/usr/bin/compile_et"
+
+ # install MIT license
+ install -Dm644 "${srcdir}/MIT-LICENSE" \
+ "${pkgdir}/usr/share/licenses/${pkgname}/MIT-LICENSE"
+}
diff --git a/testing/e2fsprogs/e2fsprogs.install b/testing/e2fsprogs/e2fsprogs.install
new file mode 100644
index 000000000..1a7fe20d7
--- /dev/null
+++ b/testing/e2fsprogs/e2fsprogs.install
@@ -0,0 +1,20 @@
+infodir=usr/share/info
+filelist=(libext2fs.info.gz)
+
+post_install() {
+ [ -x usr/bin/install-info ] || return 0
+ for file in ${filelist[@]}; do
+ install-info $infodir/$file $infodir/dir 2> /dev/null
+ done
+}
+
+post_upgrade() {
+ post_install $1
+}
+
+pre_remove() {
+ [ -x usr/bin/install-info ] || return 0
+ for file in ${filelist[@]}; do
+ install-info --delete $infodir/$file $infodir/dir 2> /dev/null
+ done
+}
diff --git a/testing/e2fsprogs/mke2fs.conf b/testing/e2fsprogs/mke2fs.conf
new file mode 100644
index 000000000..92464e3b4
--- /dev/null
+++ b/testing/e2fsprogs/mke2fs.conf
@@ -0,0 +1,26 @@
+[defaults]
+ base_features = sparse_super,filetype,resize_inode,dir_index,ext_attr
+ blocksize = 4096
+ inode_size = 128
+ inode_ratio = 16384
+
+[fs_types]
+ small = {
+ blocksize = 1024
+ inode_size = 128
+ inode_ratio = 4096
+ }
+ floppy = {
+ blocksize = 1024
+ inode_size = 128
+ inode_ratio = 8192
+ }
+ news = {
+ inode_ratio = 4096
+ }
+ largefile = {
+ inode_ratio = 1048576
+ }
+ largefile4 = {
+ inode_ratio = 4194304
+ }
diff --git a/testing/expat/CVE-2009-3560.patch b/testing/expat/CVE-2009-3560.patch
new file mode 100644
index 000000000..5fe9c36c8
--- /dev/null
+++ b/testing/expat/CVE-2009-3560.patch
@@ -0,0 +1,13 @@
+diff -urNad trunk~/lib/xmlparse.c trunk/lib/xmlparse.c
+--- trunk~/lib/xmlparse.c 2007-05-08 04:25:35.000000000 +0200
++++ trunk/lib/xmlparse.c 2009-12-29 21:57:22.141732904 +0100
+@@ -3703,6 +3703,9 @@
+ return XML_ERROR_UNCLOSED_TOKEN;
+ case XML_TOK_PARTIAL_CHAR:
+ return XML_ERROR_PARTIAL_CHAR;
++ case -XML_TOK_PROLOG_S:
++ tok = -tok;
++ break;
+ case XML_TOK_NONE:
+ #ifdef XML_DTD
+ /* for internal PE NOT referenced between declarations */
diff --git a/testing/expat/CVE-2009-3720.patch b/testing/expat/CVE-2009-3720.patch
new file mode 100644
index 000000000..65d16431f
--- /dev/null
+++ b/testing/expat/CVE-2009-3720.patch
@@ -0,0 +1,12 @@
+diff -urNad trunk~/lib/xmltok_impl.c trunk/lib/xmltok_impl.c
+--- trunk~/lib/xmltok_impl.c 2006-11-26 18:34:46.000000000 +0100
++++ trunk/lib/xmltok_impl.c 2009-10-22 21:42:41.000000000 +0200
+@@ -1744,7 +1744,7 @@
+ const char *end,
+ POSITION *pos)
+ {
+- while (ptr != end) {
++ while (ptr < end) {
+ switch (BYTE_TYPE(enc, ptr)) {
+ #define LEAD_CASE(n) \
+ case BT_LEAD ## n: \
diff --git a/testing/expat/PKGBUILD b/testing/expat/PKGBUILD
new file mode 100644
index 000000000..eee7e94b9
--- /dev/null
+++ b/testing/expat/PKGBUILD
@@ -0,0 +1,38 @@
+# $Id: PKGBUILD 141915 2011-11-03 06:22:06Z allan $
+# Maintainer: Allan McRae <allan@archlinux.org>
+# Committer: Judd Vinet <jvinet@zeroflux.org>
+
+pkgname=expat
+pkgver=2.0.1
+pkgrel=7
+pkgdesc="An XML parser library"
+arch=('i686' 'x86_64')
+url="http://expat.sourceforge.net/"
+license=('custom')
+depends=('glibc')
+options=('!libtool')
+source=(http://downloads.sourceforge.net/sourceforge/expat/${pkgname}-${pkgver}.tar.gz
+ CVE-2009-3560.patch
+ CVE-2009-3720.patch)
+md5sums=('ee8b492592568805593f81f8cdf2a04c'
+ '50603cac0f03aabc7087415251f592be'
+ 'f3eeb796f28945899216b815e5901996')
+
+build() {
+ cd ${srcdir}/${pkgname}-${pkgver}
+ patch -Np1 -i $srcdir/CVE-2009-3560.patch
+ patch -Np1 -i $srcdir/CVE-2009-3720.patch
+ ./configure --prefix=/usr --mandir=/usr/share/man
+ make
+}
+
+check() {
+ cd ${srcdir}/${pkgname}-${pkgver}
+ make check
+}
+
+package() {
+ cd ${srcdir}/${pkgname}-${pkgver}
+ make DESTDIR=${pkgdir} install
+ install -Dm644 COPYING ${pkgdir}/usr/share/licenses/${pkgname}/COPYING
+}
diff --git a/testing/flex/PKGBUILD b/testing/flex/PKGBUILD
new file mode 100644
index 000000000..828cd9b84
--- /dev/null
+++ b/testing/flex/PKGBUILD
@@ -0,0 +1,59 @@
+# $Id: PKGBUILD 141917 2011-11-03 06:31:54Z allan $
+# Maintainer: Allan McRae <allan@archlinux.org>
+# Contributor: judd <jvinet@zeroflux.org>
+
+pkgname=flex
+pkgver=2.5.35
+pkgrel=5
+pkgdesc="A tool for generating text-scanning programs"
+arch=('i686' 'x86_64')
+url="http://flex.sourceforge.net"
+license=('custom')
+groups=('base-devel')
+depends=('glibc' 'm4' 'sh')
+install=flex.install
+source=(http://downloads.sourceforge.net/sourceforge/flex/flex-$pkgver.tar.bz2
+ flex-2.5.35-gcc44.patch
+ flex-2.5.35-hardening.patch
+ flex-2.5.35-missing-prototypes.patch
+ flex-2.5.35-sign.patch
+ lex.sh)
+md5sums=('10714e50cea54dc7a227e3eddcd44d57'
+ 'e4444ef5c07db71a43280be74139bdea'
+ 'de952b3ed7cc074bc8c3e6ab73634048'
+ '6b83f56b1b654c6a321cdc530a3ec68d'
+ 'd87fd9e9762ba7e230d516bdcf1c8c6f'
+ 'f725259ec23a9e87ee29e2ef82eda9a5')
+
+build() {
+ cd $srcdir/$pkgname-$pkgver
+
+ patch -Np1 -i $srcdir/flex-2.5.35-gcc44.patch
+ patch -Np1 -i $srcdir/flex-2.5.35-hardening.patch
+ patch -Np1 -i $srcdir/flex-2.5.35-missing-prototypes.patch
+ patch -Np1 -i $srcdir/flex-2.5.35-sign.patch
+
+ ./configure --prefix=/usr \
+ --mandir=/usr/share/man --infodir=/usr/share/info
+ make
+}
+
+check() {
+ cd $srcdir/$pkgname-$pkgver
+ make check
+}
+
+package() {
+ cd $srcdir/$pkgname-$pkgver
+
+ make prefix=$pkgdir/usr \
+ mandir=$pkgdir/usr/share/man \
+ infodir=$pkgdir/usr/share/info \
+ install
+ install -Dm755 $srcdir/lex.sh $pkgdir/usr/bin/lex
+
+ install -Dm644 COPYING \
+ $pkgdir/usr/share/licenses/$pkgname/license.txt
+
+}
+
diff --git a/testing/flex/flex-2.5.35-gcc44.patch b/testing/flex/flex-2.5.35-gcc44.patch
new file mode 100644
index 000000000..7929fc092
--- /dev/null
+++ b/testing/flex/flex-2.5.35-gcc44.patch
@@ -0,0 +1,22 @@
+diff -urNp flex-2.5.35.orig/flex.skl flex-2.5.35/flex.skl
+--- flex-2.5.35.orig/flex.skl 2009-04-20 03:09:46.000000000 +0530
++++ flex-2.5.35/flex.skl 2009-04-20 07:46:58.000000000 +0530
+@@ -217,6 +217,7 @@ m4preproc_include(`flexint.h')
+ /* begin standard C++ headers. */
+ #include <iostream>
+ #include <errno.h>
++#include <cstdio>
+ #include <cstdlib>
+ #include <cstring>
+ /* end standard C++ headers. */
+diff -urNp flex-2.5.35.orig/skel.c flex-2.5.35/skel.c
+--- flex-2.5.35.orig/skel.c 2009-04-20 03:09:46.000000000 +0530
++++ flex-2.5.35/skel.c 2009-04-20 07:46:40.000000000 +0530
+@@ -284,6 +284,7 @@ const char *skel[] = {
+ "/* begin standard C++ headers. */",
+ "#include <iostream> ",
+ "#include <errno.h>",
++ "#include <cstdio>",
+ "#include <cstdlib>",
+ "#include <cstring>",
+ "/* end standard C++ headers. */",
diff --git a/testing/flex/flex-2.5.35-hardening.patch b/testing/flex/flex-2.5.35-hardening.patch
new file mode 100644
index 000000000..7d608ea23
--- /dev/null
+++ b/testing/flex/flex-2.5.35-hardening.patch
@@ -0,0 +1,36 @@
+diff -u flex-2.5.35/scan.c flex-2.5.35/scan.c
+--- flex-2.5.35/scan.c
++++ flex-2.5.35/scan.c
+@@ -2096,7 +2096,7 @@
+ /* This used to be an fputs(), but since the string might contain NUL's,
+ * we now use fwrite().
+ */
+-#define ECHO fwrite( yytext, yyleng, 1, yyout )
++#define ECHO do { if (fwrite( yytext, yyleng, 1, yyout )) {} } while (0)
+ #endif
+
+ /* Gets input and stuffs it into "buf". number of characters read, or YY_NULL,
+diff -u flex-2.5.35/flex.skl flex-2.5.35/flex.skl
+--- flex-2.5.35/flex.skl
++++ flex-2.5.35/flex.skl
+@@ -1075,7 +1075,7 @@
+ /* This used to be an fputs(), but since the string might contain NUL's,
+ * we now use fwrite().
+ */
+-#define ECHO fwrite( yytext, yyleng, 1, yyout )
++#define ECHO do { if (fwrite( yytext, yyleng, 1, yyout )) {} } while (0)
+ %endif
+ %if-c++-only C++ definition
+ #define ECHO LexerOutput( yytext, yyleng )
+diff -u flex-2.5.35/skel.c flex-2.5.35/skel.c
+--- flex-2.5.35/skel.c
++++ flex-2.5.35/skel.c
+@@ -1142,7 +1142,7 @@
+ "/* This used to be an fputs(), but since the string might contain NUL's,",
+ " * we now use fwrite().",
+ " */",
+- "#define ECHO fwrite( yytext, yyleng, 1, yyout )",
++ "#define ECHO do { if (fwrite( yytext, yyleng, 1, yyout )) {} } while (0)",
+ "%endif",
+ "%if-c++-only C++ definition",
+ "#define ECHO LexerOutput( yytext, yyleng )",
diff --git a/testing/flex/flex-2.5.35-missing-prototypes.patch b/testing/flex/flex-2.5.35-missing-prototypes.patch
new file mode 100644
index 000000000..5cde0660e
--- /dev/null
+++ b/testing/flex/flex-2.5.35-missing-prototypes.patch
@@ -0,0 +1,53 @@
+diff -up flex-2.5.35/flex.skl\~ flex-2.5.35/flex.skl
+--- flex-2.5.35/flex.skl~ 2010-07-13 17:18:43.000000000 +0200
++++ flex-2.5.35/flex.skl 2010-07-13 17:23:49.000000000 +0200
+@@ -960,6 +960,22 @@ m4_ifdef( [[M4_YY_NO_SET_LINENO]],,
+ void yyset_lineno M4_YY_PARAMS( int line_number M4_YY_PROTO_LAST_ARG );
+ ]])
+
++m4_ifdef( [[M4_YY_REENTRANT]],
++[[
++m4_ifdef( [[M4_YY_NO_GET_COLUMN]],,
++[[
++int yyget_column M4_YY_PARAMS( M4_YY_PROTO_ONLY_ARG );
++]])
++]])
++
++m4_ifdef( [[M4_YY_REENTRANT]],
++[[
++m4_ifdef( [[M4_YY_NO_SET_COLUMN]],,
++[[
++void yyset_column M4_YY_PARAMS( int column_no M4_YY_PROTO_LAST_ARG );
++]])
++]])
++
+ %if-bison-bridge
+ m4_ifdef( [[M4_YY_NO_GET_LVAL]],,
+ [[
+
+Diff finished. Tue Jul 13 17:27:50 2010
+--- flex-2.5.35/skel.c~ 2010-07-14 13:15:42.000000000 +0200
++++ flex-2.5.35/skel.c 2010-07-14 13:16:05.000000000 +0200
+@@ -1027,6 +1027,22 @@
+ "void yyset_lineno M4_YY_PARAMS( int line_number M4_YY_PROTO_LAST_ARG );",
+ "]])",
+ "",
++ "m4_ifdef( [[M4_YY_REENTRANT]],",
++ "[[",
++ "m4_ifdef( [[M4_YY_NO_GET_COLUMN]],,",
++ "[[",
++ "int yyget_column M4_YY_PARAMS( M4_YY_PROTO_ONLY_ARG );",
++ "]])",
++ "]])",
++ "",
++ "m4_ifdef( [[M4_YY_REENTRANT]],",
++ "[[",
++ "m4_ifdef( [[M4_YY_NO_SET_COLUMN]],,",
++ "[[",
++ "void yyset_column M4_YY_PARAMS( int column_no M4_YY_PROTO_LAST_ARG );",
++ "]])",
++ "]])",
++ "",
+ "%if-bison-bridge",
+ "m4_ifdef( [[M4_YY_NO_GET_LVAL]],,",
+ "[[",
diff --git a/testing/flex/flex-2.5.35-sign.patch b/testing/flex/flex-2.5.35-sign.patch
new file mode 100644
index 000000000..fbee18bde
--- /dev/null
+++ b/testing/flex/flex-2.5.35-sign.patch
@@ -0,0 +1,11 @@
+--- flex-2.5.35/gen.c-orig 2008-04-30 22:51:08.000000000 +0200
++++ flex-2.5.35/gen.c 2008-04-30 22:51:14.000000000 +0200
+@@ -1890,7 +1890,7 @@
+ outn ("\tif ( YY_CURRENT_BUFFER_LVALUE->yy_is_interactive ) \\");
+ outn ("\t\t{ \\");
+ outn ("\t\tint c = '*'; \\");
+- outn ("\t\tint n; \\");
++ outn ("\t\tunsigned n; \\");
+ outn ("\t\tfor ( n = 0; n < max_size && \\");
+ outn ("\t\t\t (c = getc( yyin )) != EOF && c != '\\n'; ++n ) \\");
+ outn ("\t\t\tbuf[n] = (char) c; \\");
diff --git a/testing/flex/flex.install b/testing/flex/flex.install
new file mode 100644
index 000000000..5b328c722
--- /dev/null
+++ b/testing/flex/flex.install
@@ -0,0 +1,22 @@
+infodir=/usr/share/info
+filelist=(flex.info{,-1,-2})
+
+post_install() {
+ [ -x usr/bin/install-info ] || return 0
+ for file in ${filelist[@]}; do
+ install-info $infodir/$file.gz $infodir/dir 2> /dev/null
+ done
+}
+
+post_upgrade() {
+ post_install $1
+}
+
+pre_remove() {
+ [ -x usr/bin/install-info ] || return 0
+ for file in ${filelist[@]}; do
+ install-info --delete $infodir/$file.gz $infodir/dir 2> /dev/null
+ done
+}
+
+# vim:set ts=2 sw=2 et:
diff --git a/testing/flex/lex.sh b/testing/flex/lex.sh
new file mode 100644
index 000000000..13e7de692
--- /dev/null
+++ b/testing/flex/lex.sh
@@ -0,0 +1,3 @@
+#!/bin/sh
+
+exec /usr/bin/flex -l "$@"
diff --git a/testing/grep/PKGBUILD b/testing/grep/PKGBUILD
new file mode 100644
index 000000000..8366d083c
--- /dev/null
+++ b/testing/grep/PKGBUILD
@@ -0,0 +1,34 @@
+# $Id: PKGBUILD 141919 2011-11-03 06:55:30Z allan $
+# Maintainer: Allan McRae <allan@archlinux.org>
+# Contributor: judd <jvinet@zeroflux.org>
+
+pkgname=grep
+pkgver=2.9
+pkgrel=2
+pkgdesc="A string search utility"
+arch=('i686' 'x86_64')
+license=('GPL3')
+url="http://www.gnu.org/software/grep/grep.html"
+groups=('base')
+depends=('glibc' 'pcre' 'sh')
+makedepends=('texinfo')
+install=${pkgname}.install
+source=(ftp://ftp.gnu.org/gnu/$pkgname/$pkgname-$pkgver.tar.xz{,.sig})
+md5sums=('25e41b2aa201104354740961ef36005a'
+ '78b903e88d23890d9e737e1415f4de21')
+
+build() {
+ cd ${srcdir}/${pkgname}-${pkgver}
+ ./configure --prefix=/usr --bindir=/bin --without-included-regex
+ make
+}
+
+check() {
+ cd ${srcdir}/${pkgname}-${pkgver}
+ make check
+}
+
+package() {
+ cd ${srcdir}/${pkgname}-${pkgver}
+ make DESTDIR=${pkgdir} install
+}
diff --git a/testing/grep/grep.install b/testing/grep/grep.install
new file mode 100644
index 000000000..7cd31301f
--- /dev/null
+++ b/testing/grep/grep.install
@@ -0,0 +1,21 @@
+infodir=usr/share/info
+filelist=(grep.info)
+
+post_install() {
+ [ -x usr/bin/install-info ] || return 0
+ for file in ${filelist[@]}; do
+ install-info $infodir/$file.gz $infodir/dir 2> /dev/null
+ done
+}
+
+post_upgrade() {
+ post_install $1
+}
+
+pre_remove() {
+ [ -x usr/bin/install-info ] || return 0
+ for file in ${filelist[@]}; do
+ install-info --delete $infodir/$file.gz $infodir/dir 2> /dev/null
+ done
+}
+
diff --git a/testing/gzip/PKGBUILD b/testing/gzip/PKGBUILD
new file mode 100644
index 000000000..a71b9cf1c
--- /dev/null
+++ b/testing/gzip/PKGBUILD
@@ -0,0 +1,43 @@
+# $Id: PKGBUILD 141921 2011-11-03 07:20:16Z allan $
+# Maintainer: Allan McRae <allan@archlinux.org>
+# Contributor: judd <jvinet@zeroflux.org>
+
+pkgname=gzip
+pkgver=1.4
+pkgrel=4
+pkgdesc="GNU compression utility"
+arch=('i686' 'x86_64')
+url="http://www.gnu.org/software/gzip/"
+license=('GPL3')
+groups=('base')
+depends=('glibc' 'bash')
+makedepends=('patch')
+install=gzip.install
+source=(ftp://ftp.gnu.org/pub/gnu/gzip/gzip-$pkgver.tar.gz{,.sig})
+md5sums=('e381b8506210c794278f5527cba0e765'
+ '3b11d485d1638f2d16f7494a0486a6e8')
+
+build() {
+ cd "${srcdir}/${pkgname}-${pkgver}"
+
+ # By default Gzip uses assembly code. While this may preform better,
+ # it is not position independent. The DEFS environment variable is
+ # set to use only C code.
+ export DEFS="NO_ASM"
+ ./configure --prefix=/usr
+ make
+}
+
+check() {
+ cd "${srcdir}/${pkgname}-${pkgver}"
+ make check
+}
+
+package() {
+ cd "${srcdir}/${pkgname}-${pkgver}"
+
+ make prefix=${pkgdir}/usr install
+
+ install -dm755 ${pkgdir}/bin
+ mv ${pkgdir}/usr/bin/{gunzip,gzip,uncompress,zcat} ${pkgdir}/bin/
+}
diff --git a/testing/gzip/gzip.install b/testing/gzip/gzip.install
new file mode 100644
index 000000000..24c8b8fb9
--- /dev/null
+++ b/testing/gzip/gzip.install
@@ -0,0 +1,20 @@
+infodir=usr/share/info
+filelist=(gzip.info)
+
+post_install() {
+ [ -x usr/bin/install-info ] || return 0
+ for file in ${filelist[@]}; do
+ usr/bin/install-info $infodir/$file.gz $infodir/dir 2> /dev/null
+ done
+}
+
+post_upgrade() {
+ post_install $1
+}
+
+pre_remove() {
+ [ -x usr/bin/install-info ] || return 0
+ for file in ${filelist[@]}; do
+ usr/bin/install-info --delete $infodir/$file.gz $infodir/dir 2> /dev/null
+ done
+}
diff --git a/testing/hdparm/PKGBUILD b/testing/hdparm/PKGBUILD
new file mode 100644
index 000000000..fcb007d04
--- /dev/null
+++ b/testing/hdparm/PKGBUILD
@@ -0,0 +1,42 @@
+# $Id: PKGBUILD 141929 2011-11-03 08:40:42Z tpowa $
+# Maintainer: Paul Mattal <paul@archlinux.org>
+
+pkgname=hdparm
+pkgver=9.37
+pkgrel=2
+pkgdesc="A shell utility for manipulating Linux IDE drive/driver parameters"
+arch=(i686 x86_64)
+depends=('glibc')
+optdepends=('sh: required by idectl and ultrabayd')
+source=(http://downloads.sourceforge.net/sourceforge/hdparm/${pkgname}-${pkgver}.tar.gz
+ wiper.sh.2_6.max-ranges.patch)
+license=('BSD')
+url="http://sourceforge.net/projects/hdparm/"
+optdepends=('bash: for wiper.sh script')
+options=('emptydirs')
+md5sums=('0bb94ddd1bedd5c02b1ca62f1caaf6de'
+ '74e368f384166a7710b447573cda120a')
+
+build() {
+ cd ${srcdir}/${pkgname}-${pkgver}
+ # Fix Range input/output error when wiping Intel G2 and OCZ drives
+ patch -Np1 -i $srcdir/wiper.sh.2_6.max-ranges.patch
+
+ # build
+ make
+}
+
+package() {
+ cd ${srcdir}/${pkgname}-${pkgver}
+ # install
+ mkdir -p ${pkgdir}/{usr,sbin}
+ make DESTDIR=${pkgdir} install
+ install -m755 contrib/idectl ${pkgdir}/sbin
+ install -m755 contrib/ultrabayd ${pkgdir}/sbin
+
+ install -D -m 0644 $srcdir/$pkgname-$pkgver/wiper/README.txt $pkgdir/usr/share/doc/wiper/README.txt
+ install -D -m 0755 $srcdir/$pkgname-$pkgver/wiper/wiper.sh $pkgdir/usr/sbin/wiper.sh
+
+ #install license file
+ install -D -m 644 LICENSE.TXT $pkgdir/usr/share/licenses/hdparm/LICENSE.TXT
+}
diff --git a/testing/hdparm/wiper.sh.2_6.max-ranges.patch b/testing/hdparm/wiper.sh.2_6.max-ranges.patch
new file mode 100644
index 000000000..c55f7b149
--- /dev/null
+++ b/testing/hdparm/wiper.sh.2_6.max-ranges.patch
@@ -0,0 +1,84 @@
+--- hdparm-9.28/wiper/wiper.sh.orig 2010-03-09 06:17:37.000000000 -0800
+--- hdparm-9.28/wiper/wiper.sh 2010-05-15 03:08:02.182856971 -0700
+@@ -29,7 +29,7 @@
+ function usage_error(){
+ echo >&2
+ echo "Linux tune-up (TRIM) utility for SATA SSDs"
+- echo "Usage: $0 [--verbose] [--commit] <mount_point|block_device>" >&2
++ echo "Usage: $0 [--max-ranges <num>] [--verbose] [--commit] <mount_point|block_device>" >&2
+ echo " Eg: $0 /dev/sda1" >&2
+ echo >&2
+ exit 1
+@@ -44,6 +44,7 @@
+
+ export verbose=0
+ commit=""
++max_ranges=-1
+ destroy_me=""
+ argc=$#
+ arg=""
+@@ -51,6 +52,10 @@
+ commit=yes
+ elif [ "$1" = "--verbose" ]; then
+ verbose=$((verbose + 1))
++ elif [ "$1" = "--max-ranges" -a $argc -gt 1 ]; then
++ max_ranges=$2
++ argc=$((argc - 1))
++ shift
+ elif [ "$1" = "" ]; then
+ usage_error
+ else
+@@ -499,6 +550,18 @@
+ fi
+ fi
+
++## Different SSD's have a different maximum number of ranges they'll accept
++## in a single TRIM command.
++if [ $max_ranges -le 0 ] ; then
++ model=`$HDPARM -I $rawdev | $GAWK '/Model Number/ { print $NF }'`
++ case "$model" in
++ SSDSA[12]*) max_ranges=512 ;; # Intel X18-M/X25-M
++ OCZ-VERTEX2) max_ranges=64 ;; # OCZ Vertex2
++ *) max_ranges=65535
++ esac
++fi
++[ $verbose -gt 0 ] && echo "max-ranges = $max_ranges"
++
+ ## All ready. Now let the user know exactly what we intend to do:
+ ##
+ mountstatus="$fstype non-mounted"
+@@ -608,7 +671,7 @@
+ nsectors += count;
+ while (count > 0) {
+ this_count = (count > 65535) ? 65535 : count
+- printf "%u:%u ", lba, this_count
++ printf "%u:%u \n", lba, this_count
+ if (verbose > 1)
+ printf "%u:%u ", lba, this_count > "/dev/stderr"
+ lba += this_count
+@@ -695,6 +758,22 @@
+ -v verbose="$verbose" \
+ -v xfs_blksects="$xfs_blksects" \
+ -v xfs_agoffsets="$xfs_agoffsets" \
+- "$GAWKPROG" | $TRIM
++ "$GAWKPROG" | (
++ i=0
++ while read range ; do
++ ranges=$ranges" "$range
++ ((i++))
++ if [ $i -ge $max_ranges ] ; then
++ [ $verbose -gt 0 ] && echo -e "Trim ranges:"$ranges"\n"
++ echo $ranges | $TRIM
++ ranges=""
++ i=0
++ fi
++ done
++ if [ $i -gt 0 ] ; then
++ [ $verbose -gt 0 ] && echo -e "Trim ranges:"$ranges"\n"
++ echo $ranges | $TRIM
++ fi
++ )
+
+ do_cleanup $?
+
+
diff --git a/testing/iproute2/PKGBUILD b/testing/iproute2/PKGBUILD
new file mode 100644
index 000000000..9d84c9a7d
--- /dev/null
+++ b/testing/iproute2/PKGBUILD
@@ -0,0 +1,51 @@
+# $Id: PKGBUILD 141994 2011-11-03 20:58:44Z ronald $
+# Maintainer: Ronald van Haren <ronald.archlinux.org>
+# Contributor: Judd Vinet <jvinet@zeroflux.org>
+
+pkgname=iproute2
+pkgver=2.6.39
+pkgrel=2
+pkgdesc="IP Routing Utilities"
+arch=('i686' 'x86_64')
+license=('GPL2')
+url="http://www.linux-foundation.org/en/Net:Iproute2"
+depends=('perl')
+makedepends=('linux-atm')
+optdepends=('linux-atm: ATM support')
+provides=('iproute')
+conflicts=('iproute')
+replaces=('iproute')
+options=('!makeflags')
+backup=('etc/iproute2/ematch_map' 'etc/iproute2/rt_dsfield' 'etc/iproute2/rt_protos' \
+ 'etc/iproute2/rt_realms' 'etc/iproute2/rt_scopes' 'etc/iproute2/rt_tables')
+source=(http://devresources.linux-foundation.org/dev/iproute2/download/iproute2-${pkgver}.tar.gz
+ 'iproute2-fhs.patch')
+sha1sums=('9044ad0b4a34a377a54197724373330294d743c7'
+ '2416b11252364d7a6c742eabb4a6924a75637a46')
+
+
+build() {
+ cd $srcdir/iproute2-${pkgver}
+
+ # set correct fhs structure
+ patch -Np1 -i ${srcdir}/iproute2-fhs.patch
+
+ ./configure
+
+ make
+}
+
+package() {
+ cd $srcdir/iproute2-${pkgver}
+
+ make DESTDIR=$pkgdir install
+
+ # allow loopback to be started before /usr is mounted, this may not be supported in the future
+ mkdir -p ${pkgdir}/sbin
+ mv ${pkgdir}/usr/sbin/ip ${pkgdir}/sbin/ip
+ ln -s /sbin/ip ${pkgdir}/usr/sbin/ip
+
+ # libnetlink isn't installed, install it FS#19385
+ install -Dm644 include/libnetlink.h ${pkgdir}/usr/include/libnetlink.h
+ install -Dm644 lib/libnetlink.a ${pkgdir}/usr/lib/libnetlink.a
+}
diff --git a/testing/iproute2/iproute2-fhs.patch b/testing/iproute2/iproute2-fhs.patch
new file mode 100644
index 000000000..2608414db
--- /dev/null
+++ b/testing/iproute2/iproute2-fhs.patch
@@ -0,0 +1,84 @@
+diff -Naur iproute2.old/Makefile iproute2-2.6.29/Makefile
+--- iproute2.old/Makefile 2009-11-11 22:05:21.251407668 +0100
++++ iproute2-2.6.29/Makefile 2009-11-11 22:07:09.891833516 +0100
+@@ -1,11 +1,12 @@
+ DESTDIR=/usr/
+ ROOTDIR=$(DESTDIR)
+ LIBDIR=/usr/lib/
+-SBINDIR=/sbin
++SBINDIR=/usr/sbin
+ CONFDIR=/etc/iproute2
+-DOCDIR=/share/doc/iproute2
+-MANDIR=/share/man
++DOCDIR=/usr/share/doc/iproute2
++MANDIR=/usr/share/man
+ ARPDDIR=/var/lib/arpd
++SHAREDIR=/usr/share
+
+ # Path to db_185.h include
+ DBM_INCLUDE:=$(ROOTDIR)/usr/include
+diff -Naur iproute2.old/tc/tc_util.c iproute2-2.6.29/tc/tc_util.c
+--- iproute2.old/tc/tc_util.c 2009-11-11 22:05:21.298076943 +0100
++++ iproute2-2.6.29/tc/tc_util.c 2009-11-11 22:09:32.865152646 +0100
+@@ -24,8 +24,8 @@
+ #include "utils.h"
+ #include "tc_util.h"
+
+-#ifndef LIBDIR
+-#define LIBDIR "/usr/lib/"
++#ifndef SHAREDIR
++#define SHAREDIR "/usr/share"
+ #endif
+
+ const char *get_tc_lib(void)
+@@ -34,7 +34,7 @@
+
+ lib_dir = getenv("TC_LIB_DIR");
+ if (!lib_dir)
+- lib_dir = LIBDIR "/tc/";
++ lib_dir = SHAREDIR "/tc/";
+
+ return lib_dir;
+ }
+diff -Naur iproute2.old/netem/Makefile iproute2-2.6.35/netem/Makefile
+--- iproute2.old/netem/Makefile 2010-08-06 11:30:48.640940183 +0200
++++ iproute2-2.6.35/netem/Makefile 2010-08-06 11:32:34.210908892 +0200
+@@ -20,9 +20,9 @@
+ $(HOSTCC) $(CCOPTS) -I../include -o $@ $@.c -lm
+
+ install: all
+- mkdir -p $(DESTDIR)$(LIBDIR)/tc
++ mkdir -p $(DESTDIR)$(SHAREDIR)/tc
+ for i in $(DISTDATA); \
+- do install -m 644 $$i $(DESTDIR)$(LIBDIR)/tc; \
++ do install -m 644 $$i $(DESTDIR)$(SHAREDIR)/tc; \
+ done
+
+ clean:
+diff -Naur iproute2.old/tc/Makefile iproute2-2.6.35/tc/Makefile
+--- iproute2.old/tc/Makefile 2010-08-06 11:48:35.607472252 +0200
++++ iproute2-2.6.35/tc/Makefile 2010-08-06 11:49:36.977473380 +0200
+@@ -99,18 +99,11 @@
+ $(AR) rcs $@ $(TCLIB)
+
+ install: all
+- mkdir -p $(MODDESTDIR)
+- install -m 0755 tc $(DESTDIR)$(SBINDIR)
+- for i in $(TCSO); \
+- do install -m 755 $$i $(MODDESTDIR); \
+- done
+- if [ ! -f $(MODDESTDIR)/m_ipt.so ]; then \
+- if [ -f $(MODDESTDIR)/m_xt.so ]; \
+- then ln -s m_xt.so $(MODDESTDIR)/m_ipt.so ; \
+- elif [ -f $(MODDESTDIR)/m_xt_old.so ]; \
+- then ln -s m_xt_old.so $(MODDESTDIR)/m_ipt.so ; \
+- fi; \
+- fi
++ mkdir -p $(DESTDIR)$(LIBDIR)/tc
++ install -m 0755 tc $(DESTDIR)$(SBINDIR)
++ for i in $(TCSO); \
++ do install -m 755 $$i $(DESTDIR)$(LIBDIR)/tc; \
++ done
+
+ clean:
+ rm -f $(TCOBJ) $(TCLIB) libtc.a tc *.so emp_ematch.yacc.h; \
diff --git a/testing/iputils/PKGBUILD b/testing/iputils/PKGBUILD
new file mode 100644
index 000000000..265d84d29
--- /dev/null
+++ b/testing/iputils/PKGBUILD
@@ -0,0 +1,65 @@
+# $Id: PKGBUILD 141976 2011-11-03 20:08:42Z tpowa $
+# Maintainer: Tobias Powalowski <tpowa@archlinux.org>
+# Contributor: Aaron Griffin <aaron@archlinux.org>
+
+pkgname=iputils
+pkgver=20101006
+_traceroutever=1.4a12
+pkgrel=2
+pkgdesc="IP Configuration Utilities (and Ping)"
+arch=('i686' 'x86_64')
+license=('GPL')
+url="http://www.linuxfoundation.org/en/Net:Iputils"
+groups=('base')
+depends=('glibc' 'openssl' 'sysfsutils')
+conflicts=('netkit-base' 'arping' 'netkit-tftpd' 'traceroute')
+replaces=('netkit-base' 'traceroute')
+source=(http://www.skbuff.net/${pkgname}/${pkgname}-s${pkgver}.tar.bz2
+ ftp://ftp.ee.lbl.gov/traceroute-${_traceroutever}.tar.gz
+ 'permission-fix.patch'
+ 'iputils-s20101006-manpages.patch')
+options=('!makeflags')
+md5sums=('a36c25e9ec17e48be514dc0485e7376c'
+ '964d599ef696efccdeebe7721cd4828d'
+ '66109966cad06e425bb12a78bab85b70'
+ 'd02dffac6f16e841921a9fc73bd2d3bd')
+
+build() {
+ #build iptuils
+ cd "${srcdir}/${pkgname}-s${pkgver}"
+
+ # Doc fails to build (see FS#20251)
+ # As a temporary workaround, we use these man pages from Fedora & LFS
+ patch -Np1 -i ../iputils-s20101006-manpages.patch
+ make
+
+ # build traceroute
+ # this is combined in this package because it's awkward as a separate package
+ cd "${srcdir}/traceroute-${_traceroutever}"
+ patch -Np1 -i ../permission-fix.patch
+ ./configure --prefix=/usr \
+ --sbindir=/bin \
+ --mandir=/usr/share/man
+ make CFLAGS="${CFLAGS} -Ilinux-include/"
+}
+
+package() {
+ cd "${srcdir}/${pkgname}-s${pkgver}"
+ for i in arping clockdiff rarpd rdisc tftpd tracepath tracepath6; do
+ install -D -m755 $i "${pkgdir}/usr/sbin/$i"
+ done
+ for i in ping ping6 traceroute6; do
+ install -D -m4755 $i "${pkgdir}/bin/$i"
+ done
+
+ install -dm755 "${pkgdir}/usr/share/man/man8"
+ install -m644 doc/{arping,clockdiff,ping,rarpd,rdisc,tftpd,tracepath,traceroute6}.8 \
+ "${pkgdir}/usr/share/man/man8/"
+
+ cd "${pkgdir}/usr/share/man/man8"
+ ln -sf ping.8.gz ping6.8.gz
+ ln -sf tracepath.8.gz tracepath6.8.gz
+
+ cd "${srcdir}/traceroute-${_traceroutever}"
+ make DESTDIR="${pkgdir}" install install-man
+}
diff --git a/testing/iputils/iputils-s20101006-manpages.patch b/testing/iputils/iputils-s20101006-manpages.patch
new file mode 100644
index 000000000..764d0d36d
--- /dev/null
+++ b/testing/iputils/iputils-s20101006-manpages.patch
@@ -0,0 +1,1044 @@
+--- /dev/null 2011-01-26 09:02:28.396666668 -0500
++++ iputils-s20101006/doc/arping.8 2011-01-19 04:10:18.000000000 -0500
+@@ -0,0 +1,110 @@
++.\" This manpage has been automatically generated by docbook2man
++.\" from a DocBook document. This tool can be found at:
++.\" <http://shell.ipoline.com/~elmert/comp/docbook2X/>
++.\" Please send any bug reports, improvements, comments, patches,
++.\" etc. to Steve Cheng <steve@ggi-project.org>.
++.TH "ARPING" "8" "19 January 2011" "iputils-101006" "System Manager's Manual: iputils"
++.SH NAME
++arping \- send ARP REQUEST to a neighbour host
++.SH SYNOPSIS
++
++\fBarping\fR [ \fB-AbDfhqUV\fR] [ \fB-c \fIcount\fB\fR] [ \fB-w \fIdeadline\fB\fR] [ \fB-s \fIsource\fB\fR] \fB-I \fIinterface\fB\fR \fB\fIdestination\fB\fR
++
++.SH "DESCRIPTION"
++.PP
++Ping \fIdestination\fR on device \fIinterface\fR by ARP packets,
++using source address \fIsource\fR.
++.SH "OPTIONS"
++.TP
++\fB-A\fR
++The same as \fB-U\fR, but ARP REPLY packets used instead
++of ARP REQUEST.
++.TP
++\fB-b\fR
++Send only MAC level broadcasts. Normally \fBarping\fR starts
++from sending broadcast, and switch to unicast after reply received.
++.TP
++\fB-c \fIcount\fB\fR
++Stop after sending \fIcount\fR ARP REQUEST
++packets. With
++\fIdeadline\fR
++option, \fBarping\fR waits for
++\fIcount\fR ARP REPLY packets, until the timeout expires.
++.TP
++\fB-D\fR
++Duplicate address detection mode (DAD). See
++RFC2131, 4.4.1.
++Returns 0, if DAD succeeded i.e. no replies are received
++.TP
++\fB-f\fR
++Finish after the first reply confirming that target is alive.
++.TP
++\fB-I \fIinterface\fB\fR
++Name of network device where to send ARP REQUEST packets. This option
++is required.
++.TP
++\fB-h\fR
++Print help page and exit.
++.TP
++\fB-q\fR
++Quiet output. Nothing is displayed.
++.TP
++\fB-s \fIsource\fB\fR
++IP source address to use in ARP packets.
++If this option is absent, source address is:
++.RS
++.TP 0.2i
++\(bu
++In DAD mode (with option \fB-D\fR) set to 0.0.0.0.
++.TP 0.2i
++\(bu
++In Unsolicited ARP mode (with options \fB-U\fR or \fB-A\fR)
++set to \fIdestination\fR.
++.TP 0.2i
++\(bu
++Otherwise, it is calculated from routing tables.
++.RE
++.TP
++\fB-U\fR
++Unsolicited ARP mode to update neighbours' ARP caches.
++No replies are expected.
++.TP
++\fB-V\fR
++Print version of the program and exit.
++.TP
++\fB-w \fIdeadline\fB\fR
++Specify a timeout, in seconds, before
++\fBarping\fR
++exits regardless of how many
++packets have been sent or received. In this case
++\fBarping\fR
++does not stop after
++\fIcount\fR
++packet are sent, it waits either for
++\fIdeadline\fR
++expire or until
++\fIcount\fR
++probes are answered.
++.SH "SEE ALSO"
++.PP
++\fBping\fR(8),
++\fBclockdiff\fR(8),
++\fBtracepath\fR(8).
++.SH "AUTHOR"
++.PP
++\fBarping\fR was written by
++Alexey Kuznetsov
++<kuznet@ms2.inr.ac.ru>.
++It is now maintained by
++YOSHIFUJI Hideaki
++<yoshfuji@skbuff.net>.
++.SH "SECURITY"
++.PP
++\fBarping\fR requires CAP_NET_RAWIO capability
++to be executed. It is not recommended to be used as set-uid root,
++because it allows user to modify ARP caches of neighbour hosts.
++.SH "AVAILABILITY"
++.PP
++\fBarping\fR is part of \fIiputils\fR package
++and the latest versions are available in source form at
++http://www.skbuff.net/iputils/iputils-current.tar.bz2.
+--- /dev/null 2011-01-26 09:02:28.396666668 -0500
++++ iputils-s20101006/doc/clockdiff.8 2011-01-19 04:10:19.000000000 -0500
+@@ -0,0 +1,81 @@
++.\" This manpage has been automatically generated by docbook2man
++.\" from a DocBook document. This tool can be found at:
++.\" <http://shell.ipoline.com/~elmert/comp/docbook2X/>
++.\" Please send any bug reports, improvements, comments, patches,
++.\" etc. to Steve Cheng <steve@ggi-project.org>.
++.TH "CLOCKDIFF" "8" "19 January 2011" "iputils-101006" "System Manager's Manual: iputils"
++.SH NAME
++clockdiff \- measure clock difference between hosts
++.SH SYNOPSIS
++
++\fBclockdiff\fR [ \fB-o\fR] [ \fB-o1\fR] \fB\fIdestination\fB\fR
++
++.SH "DESCRIPTION"
++.PP
++\fBclockdiff\fR Measures clock difference between us and
++\fIdestination\fR with 1 msec resolution using ICMP TIMESTAMP
++[2]
++packets or, optionally, IP TIMESTAMP option
++[3]
++option added to ICMP ECHO.
++[1]
++.SH "OPTIONS"
++.TP
++\fB-o\fR
++Use IP TIMESTAMP with ICMP ECHO instead of ICMP TIMESTAMP
++messages. It is useful with some destinations, which do not support
++ICMP TIMESTAMP (f.e. Solaris <2.4).
++.TP
++\fB-o1\fR
++Slightly different form of \fB-o\fR, namely it uses three-term
++IP TIMESTAMP with prespecified hop addresses instead of four term one.
++What flavor works better depends on target host. Particularly,
++\fB-o\fR is better for Linux.
++.SH "WARNINGS"
++.TP 0.2i
++\(bu
++Some nodes (Cisco) use non-standard timestamps, which is allowed
++by RFC, but makes timestamps mostly useless.
++.TP 0.2i
++\(bu
++Some nodes generate messed timestamps (Solaris>2.4), when
++run \fBxntpd\fR. Seems, its IP stack uses a corrupted clock source,
++which is synchronized to time-of-day clock periodically and jumps
++randomly making timestamps mostly useless. Good news is that you can
++use NTP in this case, which is even better.
++.TP 0.2i
++\(bu
++\fBclockdiff\fR shows difference in time modulo 24 days.
++.SH "SEE ALSO"
++.PP
++\fBping\fR(8),
++\fBarping\fR(8),
++\fBtracepath\fR(8).
++.SH "REFERENCES"
++.PP
++[1] ICMP ECHO,
++RFC0792, page 14.
++.PP
++[2] ICMP TIMESTAMP,
++RFC0792, page 16.
++.PP
++[3] IP TIMESTAMP option,
++RFC0791, 3.1, page 16.
++.SH "AUTHOR"
++.PP
++\fBclockdiff\fR was compiled by
++Alexey Kuznetsov
++<kuznet@ms2.inr.ac.ru>. It was based on code borrowed
++from BSD \fBtimed\fR daemon.
++It is now maintained by
++YOSHIFUJI Hideaki
++<yoshfuji@skbuff.net>.
++.SH "SECURITY"
++.PP
++\fBclockdiff\fR requires CAP_NET_RAWIO capability
++to be executed. It is safe to be used as set-uid root.
++.SH "AVAILABILITY"
++.PP
++\fBclockdiff\fR is part of \fIiputils\fR package
++and the latest versions are available in source form at
++http://www.skbuff.net/iputils/iputils-current.tar.bz2.
+--- /dev/null 2011-01-26 09:02:28.396666668 -0500
++++ iputils-s20101006/doc/ping.8 2011-01-19 04:10:19.000000000 -0500
+@@ -0,0 +1,408 @@
++.\" This manpage has been automatically generated by docbook2man
++.\" from a DocBook document. This tool can be found at:
++.\" <http://shell.ipoline.com/~elmert/comp/docbook2X/>
++.\" Please send any bug reports, improvements, comments, patches,
++.\" etc. to Steve Cheng <steve@ggi-project.org>.
++.TH "PING" "8" "19 January 2011" "iputils-101006" "System Manager's Manual: iputils"
++.SH NAME
++ping, ping6 \- send ICMP ECHO_REQUEST to network hosts
++.SH SYNOPSIS
++
++\fBping\fR [ \fB-LRUbdfnqrvVaAB\fR] [ \fB-c \fIcount\fB\fR] [ \fB-m \fImark\fB\fR] [ \fB-i \fIinterval\fB\fR] [ \fB-l \fIpreload\fB\fR] [ \fB-p \fIpattern\fB\fR] [ \fB-s \fIpacketsize\fB\fR] [ \fB-t \fIttl\fB\fR] [ \fB-w \fIdeadline\fB\fR] [ \fB-F \fIflowlabel\fB\fR] [ \fB-I \fIinterface\fB\fR] [ \fB-M \fIhint\fB\fR] [ \fB-N \fInioption\fB\fR] [ \fB-Q \fItos\fB\fR] [ \fB-S \fIsndbuf\fB\fR] [ \fB-T \fItimestamp option\fB\fR] [ \fB-W \fItimeout\fB\fR] [ \fB\fIhop\fB\fR\fI ...\fR] \fB\fIdestination\fB\fR
++
++.SH "DESCRIPTION"
++.PP
++\fBping\fR uses the ICMP protocol's mandatory ECHO_REQUEST
++datagram to elicit an ICMP ECHO_RESPONSE from a host or gateway.
++ECHO_REQUEST datagrams (``pings'') have an IP and ICMP
++header, followed by a struct timeval and then an arbitrary
++number of ``pad'' bytes used to fill out the packet.
++.PP
++\fBping6\fR can also send Node Information Queries (RFC4620).
++.SH "OPTIONS"
++.TP
++\fB-a\fR
++Audible ping.
++.TP
++\fB-A\fR
++Adaptive ping. Interpacket interval adapts to round-trip time, so that
++effectively not more than one (or more, if preload is set) unanswered probes
++present in the network. Minimal interval is 200msec for not super-user.
++On networks with low rtt this mode is essentially equivalent to flood mode.
++.TP
++\fB-b\fR
++Allow pinging a broadcast address.
++.TP
++\fB-B\fR
++Do not allow \fBping\fR to change source address of probes.
++The address is bound to one selected when \fBping\fR starts.
++.TP
++\fB-m \fImark\fB\fR
++use \fImark\fR to tag the packets going out. This is useful
++for variety of reasons within the kernel such as using policy
++routing to select specific outbound processing.
++.TP
++\fB-c \fIcount\fB\fR
++Stop after sending \fIcount\fR ECHO_REQUEST
++packets. With
++\fIdeadline\fR
++option, \fBping\fR waits for
++\fIcount\fR ECHO_REPLY packets, until the timeout expires.
++.TP
++\fB-d\fR
++Set the SO_DEBUG option on the socket being used.
++Essentially, this socket option is not used by Linux kernel.
++.TP
++\fB-F \fIflow label\fB\fR
++Allocate and set 20 bit flow label on echo request packets.
++(Only \fBping6\fR). If value is zero, kernel allocates random flow label.
++.TP
++\fB-f\fR
++Flood ping. For every ECHO_REQUEST sent a period ``.'' is printed,
++while for ever ECHO_REPLY received a backspace is printed.
++This provides a rapid display of how many packets are being dropped.
++If interval is not given, it sets interval to zero and
++outputs packets as fast as they come back or one hundred times per second,
++whichever is more.
++Only the super-user may use this option with zero interval.
++.TP
++\fB-i \fIinterval\fB\fR
++Wait \fIinterval\fR seconds between sending each packet.
++The default is to wait for one second between each packet normally,
++or not to wait in flood mode. Only super-user may set interval
++to values less 0.2 seconds.
++.TP
++\fB-I \fIinterface address\fB\fR
++Set source address to specified interface address. Argument
++may be numeric IP address or name of device. When pinging IPv6
++link-local address this option is required.
++.TP
++\fB-l \fIpreload\fB\fR
++If \fIpreload\fR is specified,
++\fBping\fR sends that many packets not waiting for reply.
++Only the super-user may select preload more than 3.
++.TP
++\fB-L\fR
++Suppress loopback of multicast packets. This flag only applies if the ping
++destination is a multicast address.
++.TP
++\fB-N \fInioption\fB\fR
++Send ICMPv6 Node Information Queries (RFC4620), instead of Echo Request.
++.RS
++.TP
++\fBname\fR
++Queries for Node Names.
++.RE
++.RS
++.TP
++\fBipv6\fR
++Queries for IPv6 Addresses. There are several IPv6 specific flags.
++.RS
++.TP
++\fBipv6-global\fR
++Request IPv6 global-scope addresses.
++.RE
++.RS
++.TP
++\fBipv6-sitelocal\fR
++Request IPv6 site-local addresses.
++.RE
++.RS
++.TP
++\fBipv6-linklocal\fR
++Request IPv6 link-local addresses.
++.RE
++.RS
++.TP
++\fBipv6-all\fR
++Request IPv6 addresses on other interfaces.
++.RE
++.RE
++.RS
++.TP
++\fBipv4\fR
++Queries for IPv4 Addresses. There is one IPv4 specific flag.
++.RS
++.TP
++\fBipv4-all\fR
++Request IPv4 addresses on other interfaces.
++.RE
++.RE
++.RS
++.TP
++\fBsubject-ipv6=\fIipv6addr\fB\fR
++IPv6 subject address.
++.RE
++.RS
++.TP
++\fBsubject-ipv4=\fIipv4addr\fB\fR
++IPv4 subject address.
++.RE
++.RS
++.TP
++\fBsubject-name=\fInodename\fB\fR
++Subject name. If it contains more than one dot,
++fully-qualified domain name is assumed.
++.RE
++.RS
++.TP
++\fBsubject-fqdn=\fInodename\fB\fR
++Subject name. Fully-qualified domain name is
++always assumed.
++.RE
++.TP
++\fB-n\fR
++Numeric output only.
++No attempt will be made to lookup symbolic names for host addresses.
++.TP
++\fB-p \fIpattern\fB\fR
++You may specify up to 16 ``pad'' bytes to fill out the packet you send.
++This is useful for diagnosing data-dependent problems in a network.
++For example, \fB-p ff\fR will cause the sent packet
++to be filled with all ones.
++.TP
++\fB-D\fR
++Print timestamp (unix time + microseconds as in gettimeofday) before
++each line.
++.TP
++\fB-Q \fItos\fB\fR
++Set Quality of Service -related bits in ICMP datagrams.
++\fItos\fR can be either decimal or hex number.
++Traditionally (RFC1349), these have been interpreted as: 0 for reserved
++(currently being redefined as congestion control), 1-4 for Type of Service
++and 5-7 for Precedence.
++Possible settings for Type of Service are: minimal cost: 0x02,
++reliability: 0x04, throughput: 0x08, low delay: 0x10. Multiple TOS bits
++should not be set simultaneously. Possible settings for
++special Precedence range from priority (0x20) to net control (0xe0). You
++must be root (CAP_NET_ADMIN capability) to use Critical or
++higher precedence value. You cannot set
++bit 0x01 (reserved) unless ECN has been enabled in the kernel.
++In RFC2474, these fields has been redefined as 8-bit Differentiated
++Services (DS), consisting of: bits 0-1 of separate data (ECN will be used,
++here), and bits 2-7 of Differentiated Services Codepoint (DSCP).
++.TP
++\fB-q\fR
++Quiet output.
++Nothing is displayed except the summary lines at startup time and
++when finished.
++.TP
++\fB-R\fR
++Record route.
++Includes the RECORD_ROUTE option in the ECHO_REQUEST
++packet and displays the route buffer on returned packets.
++Note that the IP header is only large enough for nine such routes.
++Many hosts ignore or discard this option.
++.TP
++\fB-r\fR
++Bypass the normal routing tables and send directly to a host on an attached
++interface.
++If the host is not on a directly-attached network, an error is returned.
++This option can be used to ping a local host through an interface
++that has no route through it provided the option \fB-I\fR is also
++used.
++.TP
++\fB-s \fIpacketsize\fB\fR
++Specifies the number of data bytes to be sent.
++The default is 56, which translates into 64 ICMP
++data bytes when combined with the 8 bytes of ICMP header data.
++.TP
++\fB-S \fIsndbuf\fB\fR
++Set socket sndbuf. If not specified, it is selected to buffer
++not more than one packet.
++.TP
++\fB-t \fIttl\fB\fR
++Set the IP Time to Live.
++.TP
++\fB-T \fItimestamp option\fB\fR
++Set special IP timestamp options.
++\fItimestamp option\fR may be either
++\fItsonly\fR (only timestamps),
++\fItsandaddr\fR (timestamps and addresses) or
++\fItsprespec host1 [host2 [host3 [host4]]]\fR
++(timestamp prespecified hops).
++.TP
++\fB-M \fIhint\fB\fR
++Select Path MTU Discovery strategy.
++\fIhint\fR may be either \fIdo\fR
++(prohibit fragmentation, even local one),
++\fIwant\fR (do PMTU discovery, fragment locally when packet size
++is large), or \fIdont\fR (do not set DF flag).
++.TP
++\fB-U\fR
++Print full user-to-user latency (the old behaviour). Normally
++\fBping\fR
++prints network round trip time, which can be different
++f.e. due to DNS failures.
++.TP
++\fB-v\fR
++Verbose output.
++.TP
++\fB-V\fR
++Show version and exit.
++.TP
++\fB-w \fIdeadline\fB\fR
++Specify a timeout, in seconds, before
++\fBping\fR
++exits regardless of how many
++packets have been sent or received. In this case
++\fBping\fR
++does not stop after
++\fIcount\fR
++packet are sent, it waits either for
++\fIdeadline\fR
++expire or until
++\fIcount\fR
++probes are answered or for some error notification from network.
++.TP
++\fB-W \fItimeout\fB\fR
++Time to wait for a response, in seconds. The option affects only timeout
++in absense of any responses, otherwise \fBping\fR waits for two RTTs.
++.PP
++When using \fBping\fR for fault isolation, it should first be run
++on the local host, to verify that the local network interface is up
++and running. Then, hosts and gateways further and further away should be
++``pinged''. Round-trip times and packet loss statistics are computed.
++If duplicate packets are received, they are not included in the packet
++loss calculation, although the round trip time of these packets is used
++in calculating the minimum/average/maximum round-trip time numbers.
++When the specified number of packets have been sent (and received) or
++if the program is terminated with a
++SIGINT, a brief summary is displayed. Shorter current statistics
++can be obtained without termination of process with signal
++SIGQUIT.
++.PP
++If \fBping\fR does not receive any reply packets at all it will
++exit with code 1. If a packet
++\fIcount\fR
++and
++\fIdeadline\fR
++are both specified, and fewer than
++\fIcount\fR
++packets are received by the time the
++\fIdeadline\fR
++has arrived, it will also exit with code 1.
++On other error it exits with code 2. Otherwise it exits with code 0. This
++makes it possible to use the exit code to see if a host is alive or
++not.
++.PP
++This program is intended for use in network testing, measurement and
++management.
++Because of the load it can impose on the network, it is unwise to use
++\fBping\fR during normal operations or from automated scripts.
++.SH "ICMP PACKET DETAILS"
++.PP
++An IP header without options is 20 bytes.
++An ICMP ECHO_REQUEST packet contains an additional 8 bytes worth
++of ICMP header followed by an arbitrary amount of data.
++When a \fIpacketsize\fR is given, this indicated the size of this
++extra piece of data (the default is 56). Thus the amount of data received
++inside of an IP packet of type ICMP ECHO_REPLY will always be 8 bytes
++more than the requested data space (the ICMP header).
++.PP
++If the data space is at least of size of struct timeval
++\fBping\fR uses the beginning bytes of this space to include
++a timestamp which it uses in the computation of round trip times.
++If the data space is shorter, no round trip times are given.
++.SH "DUPLICATE AND DAMAGED PACKETS"
++.PP
++\fBping\fR will report duplicate and damaged packets.
++Duplicate packets should never occur, and seem to be caused by
++inappropriate link-level retransmissions.
++Duplicates may occur in many situations and are rarely (if ever) a
++good sign, although the presence of low levels of duplicates may not
++always be cause for alarm.
++.PP
++Damaged packets are obviously serious cause for alarm and often
++indicate broken hardware somewhere in the
++\fBping\fR packet's path (in the network or in the hosts).
++.SH "TRYING DIFFERENT DATA PATTERNS"
++.PP
++The (inter)network layer should never treat packets differently depending
++on the data contained in the data portion.
++Unfortunately, data-dependent problems have been known to sneak into
++networks and remain undetected for long periods of time.
++In many cases the particular pattern that will have problems is something
++that doesn't have sufficient ``transitions'', such as all ones or all
++zeros, or a pattern right at the edge, such as almost all zeros.
++It isn't necessarily enough to specify a data pattern of all zeros (for
++example) on the command line because the pattern that is of interest is
++at the data link level, and the relationship between what you type and
++what the controllers transmit can be complicated.
++.PP
++This means that if you have a data-dependent problem you will probably
++have to do a lot of testing to find it.
++If you are lucky, you may manage to find a file that either can't be sent
++across your network or that takes much longer to transfer than other
++similar length files.
++You can then examine this file for repeated patterns that you can test
++using the \fB-p\fR option of \fBping\fR.
++.SH "TTL DETAILS"
++.PP
++The TTL value of an IP packet represents the maximum number of IP routers
++that the packet can go through before being thrown away.
++In current practice you can expect each router in the Internet to decrement
++the TTL field by exactly one.
++.PP
++The TCP/IP specification states that the TTL field for TCP
++packets should be set to 60, but many systems use smaller values
++(4.3 BSD uses 30, 4.2 used 15).
++.PP
++The maximum possible value of this field is 255, and most Unix systems set
++the TTL field of ICMP ECHO_REQUEST packets to 255.
++This is why you will find you can ``ping'' some hosts, but not reach them
++with
++\fBtelnet\fR(1)
++or
++\fBftp\fR(1).
++.PP
++In normal operation ping prints the ttl value from the packet it receives.
++When a remote system receives a ping packet, it can do one of three things
++with the TTL field in its response:
++.TP 0.2i
++\(bu
++Not change it; this is what Berkeley Unix systems did before the
++4.3BSD Tahoe release. In this case the TTL value in the received packet
++will be 255 minus the number of routers in the round-trip path.
++.TP 0.2i
++\(bu
++Set it to 255; this is what current Berkeley Unix systems do.
++In this case the TTL value in the received packet will be 255 minus the
++number of routers in the path \fBfrom\fR
++the remote system \fBto\fR the \fBping\fRing host.
++.TP 0.2i
++\(bu
++Set it to some other value. Some machines use the same value for
++ICMP packets that they use for TCP packets, for example either 30 or 60.
++Others may use completely wild values.
++.SH "BUGS"
++.TP 0.2i
++\(bu
++Many Hosts and Gateways ignore the RECORD_ROUTE option.
++.TP 0.2i
++\(bu
++The maximum IP header length is too small for options like
++RECORD_ROUTE to be completely useful.
++There's not much that that can be done about this, however.
++.TP 0.2i
++\(bu
++Flood pinging is not recommended in general, and flood pinging the
++broadcast address should only be done under very controlled conditions.
++.SH "SEE ALSO"
++.PP
++\fBnetstat\fR(1),
++\fBifconfig\fR(8).
++.SH "HISTORY"
++.PP
++The \fBping\fR command appeared in 4.3BSD.
++.PP
++The version described here is its descendant specific to Linux.
++.SH "SECURITY"
++.PP
++\fBping\fR requires CAP_NET_RAWIO capability
++to be executed. It may be used as set-uid root.
++.SH "AVAILABILITY"
++.PP
++\fBping\fR is part of \fIiputils\fR package
++and the latest versions are available in source form at
++http://www.skbuff.net/iputils/iputils-current.tar.bz2.
+--- /dev/null 2011-01-26 09:02:28.396666668 -0500
++++ iputils-s20101006/doc/rdisc.8 2011-01-19 04:10:20.000000000 -0500
+@@ -0,0 +1,110 @@
++.\" This manpage has been automatically generated by docbook2man
++.\" from a DocBook document. This tool can be found at:
++.\" <http://shell.ipoline.com/~elmert/comp/docbook2X/>
++.\" Please send any bug reports, improvements, comments, patches,
++.\" etc. to Steve Cheng <steve@ggi-project.org>.
++.TH "RDISC" "8" "19 January 2011" "iputils-101006" "System Manager's Manual: iputils"
++.SH NAME
++rdisc \- network router discovery daemon
++.SH SYNOPSIS
++
++\fBrdisc\fR [ \fB-abdfstvV\fR] [ \fB\fIsend_address\fB\fR] [ \fB\fIreceive_address\fB\fR]
++
++.SH "DESCRIPTION"
++.PP
++\fBrdisc\fR implements client side of the ICMP router discover protocol.
++\fBrdisc\fR is invoked at boot time to populate the network
++routing tables with default routes.
++.PP
++\fBrdisc\fR listens on the ALL_HOSTS (224.0.0.1) multicast address
++(or \fIreceive_address\fR provided it is given)
++for ROUTER_ADVERTISE messages from routers. The received
++messages are handled by first ignoring those listed router addresses
++with which the host does not share a network. Among the remaining addresses
++the ones with the highest preference are selected as default routers
++and a default route is entered in the kernel routing table
++for each one of them.
++.PP
++Optionally, \fBrdisc\fR can avoid waiting for routers to announce
++themselves by sending out a few ROUTER_SOLICITATION messages
++to the ALL_ROUTERS (224.0.0.2) multicast address
++(or \fIsend_address\fR provided it is given)
++when it is started.
++.PP
++A timer is associated with each router address and the address will
++no longer be considered for inclusion in the the routing tables if the
++timer expires before a new
++\fBadvertise\fR message is received from the router.
++The address will also be excluded from consideration if the host receives an
++\fBadvertise\fR
++message with the preference being maximally negative.
++.PP
++Server side of router discovery protocol is supported by Cisco IOS
++and by any more or less complete UNIX routing daemon, f.e \fBgated\fR.
++.SH "OPTIONS"
++.TP
++\fB-a\fR
++Accept all routers independently of the preference they have in their
++\fBadvertise\fR messages.
++Normally \fBrdisc\fR only accepts (and enters in the kernel routing
++tables) the router or routers with the highest preference.
++.TP
++\fB-b\fR
++Opposite to \fB-a\fR, i.e. install only router with the best
++preference value. It is default behaviour.
++.TP
++\fB-d\fR
++Send debugging messages to syslog.
++.TP
++\fB-f\fR
++Run \fBrdisc\fR forever even if no routers are found.
++Normally \fBrdisc\fR gives up if it has not received any
++\fBadvertise\fR message after after soliciting three times,
++in which case it exits with a non-zero exit code.
++If \fB-f\fR is not specified in the first form then
++\fB-s\fR must be specified.
++.TP
++\fB-s\fR
++Send three \fBsolicitation\fR messages initially to quickly discover
++the routers when the system is booted.
++When \fB-s\fR is specified \fBrdisc\fR
++exits with a non-zero exit code if it can not find any routers.
++This can be overridden with the \fB-f\fR option.
++.TP
++\fB-t\fR
++Test mode. Do not go to background.
++.TP
++\fB-v\fR
++Be verbose i.e. send lots of debugging messages to syslog.
++.TP
++\fB-V\fR
++Print version and exit.
++.SH "HISTORY"
++.PP
++This program was developed by Sun Microsystems (see copyright
++notice in source file). It was ported to Linux by
++Alexey Kuznetsov
++<kuznet@ms2.inr.ac.ru>.
++It is now maintained by
++YOSHIFUJI Hideaki
++<yoshfuji@skbuff.net>.
++.SH "SEE ALSO"
++.PP
++\fBicmp\fR(7),
++\fBinet\fR(7),
++\fBping\fR(8).
++.SH "REFERENCES"
++.PP
++Deering, S.E.,ed "ICMP Router Discovery Messages",
++RFC1256, Network Information Center, SRI International,
++Menlo Park, Calif., September 1991.
++.SH "SECURITY"
++.PP
++\fBrdisc\fR requires CAP_NET_RAWIO to listen
++and send ICMP messages and capability CAP_NET_ADMIN
++to update routing tables.
++.SH "AVAILABILITY"
++.PP
++\fBrdisc\fR is part of \fIiputils\fR package
++and the latest versions are available in source form at
++http://www.skbuff.net/iputils/iputils-current.tar.bz2.
+--- /dev/null 2011-01-26 09:02:28.396666668 -0500
++++ iputils-s20101006/doc/tracepath.8 2011-01-19 04:10:20.000000000 -0500
+@@ -0,0 +1,97 @@
++.\" This manpage has been automatically generated by docbook2man
++.\" from a DocBook document. This tool can be found at:
++.\" <http://shell.ipoline.com/~elmert/comp/docbook2X/>
++.\" Please send any bug reports, improvements, comments, patches,
++.\" etc. to Steve Cheng <steve@ggi-project.org>.
++.TH "TRACEPATH" "8" "19 January 2011" "iputils-101006" "System Manager's Manual: iputils"
++.SH NAME
++tracepath, tracepath6 \- traces path to a network host discovering MTU along this path
++.SH SYNOPSIS
++
++\fBtracepath\fR [ \fB-n\fR] [ \fB-b\fR] [ \fB-l \fIpktlen\fB\fR] \fB\fIdestination\fB\fR [ \fB\fIport\fB\fR]
++
++.SH "DESCRIPTION"
++.PP
++It traces path to \fIdestination\fR discovering MTU along this path.
++It uses UDP port \fIport\fR or some random port.
++It is similar to \fBtraceroute\fR, only does not require superuser
++privileges and has no fancy options.
++.PP
++\fBtracepath6\fR is good replacement for \fBtraceroute6\fR
++and classic example of application of Linux error queues.
++The situation with IPv4 is worse, because commercial
++IP routers do not return enough information in icmp error messages.
++Probably, it will change, when they will be updated.
++For now it uses Van Jacobson's trick, sweeping a range
++of UDP ports to maintain trace history.
++.SH "OPTIONS"
++.TP
++\fB-n\fR
++Print primarily IP addresses numerically.
++.TP
++\fB-b\fR
++Print both of host names and IP addresses.
++.TP
++\fB-l\fR
++Sets the initial packet length to \fIpktlen\fR instead of
++65536 for \fBtracepath\fR or 128000 for \fBtracepath6\fR.
++.SH "OUTPUT"
++.PP
++
++.nf
++root@mops:~ # tracepath6 3ffe:2400:0:109::2
++ 1?: [LOCALHOST] pmtu 1500
++ 1: dust.inr.ac.ru 0.411ms
++ 2: dust.inr.ac.ru asymm 1 0.390ms pmtu 1480
++ 2: 3ffe:2400:0:109::2 463.514ms reached
++ Resume: pmtu 1480 hops 2 back 2
++.fi
++.PP
++The first column shows TTL of the probe, followed by colon.
++Usually value of TTL is obtained from reply from network,
++but sometimes reply does not contain necessary information and
++we have to guess it. In this case the number is followed by ?.
++.PP
++The second column shows the network hop, which replied to the probe.
++It is either address of router or word [LOCALHOST], if
++the probe was not sent to the network.
++.PP
++The rest of line shows miscellaneous information about path to
++the correspinding hetwork hop. As rule it contains value of RTT.
++Additionally, it can show Path MTU, when it changes.
++If the path is asymmetric
++or the probe finishes before it reach prescribed hop, difference
++between number of hops in forward and backward direction is shown
++following keyword async. This information is not reliable.
++F.e. the third line shows asymmetry of 1, it is because the first probe
++with TTL of 2 was rejected at the first hop due to Path MTU Discovery.
++.PP
++The last line summarizes information about all the path to the destination,
++it shows detected Path MTU, amount of hops to the destination and our
++guess about amount of hops from the destination to us, which can be
++different when the path is asymmetric.
++.SH "SEE ALSO"
++.PP
++\fBtraceroute\fR(8),
++\fBtraceroute6\fR(8),
++\fBping\fR(8).
++.SH "AUTHOR"
++.PP
++\fBtracepath\fR was written by
++Alexey Kuznetsov
++<kuznet@ms2.inr.ac.ru>.
++.SH "SECURITY"
++.PP
++No security issues.
++.PP
++This lapidary deserves to be elaborated.
++\fBtracepath\fR is not a privileged program, unlike
++\fBtraceroute\fR, \fBping\fR and other beasts of this kind.
++\fBtracepath\fR may be executed by everyone who has some access
++to network, enough to send UDP datagrams to investigated destination
++using given port.
++.SH "AVAILABILITY"
++.PP
++\fBtracepath\fR is part of \fIiputils\fR package
++and the latest versions are available in source form at
++http://www.skbuff.net/iputils/iputils-current.tar.bz2.
+diff -Naur /dev/null iputils-s20101006/doc/rarpd.8
+--- /dev/null 2011-01-26 09:02:28.396666668 -0500
++++ iputils-s20101006/doc/rarpd.8 2011-01-08 20:09:51.270811811 -0500
+@@ -0,0 +1,84 @@
++.\" This manpage has been automatically generated by docbook2man
++.\" from a DocBook document. This tool can be found at:
++.\" <http://shell.ipoline.com/~elmert/comp/docbook2X/>
++.\" Please send any bug reports, improvements, comments, patches,
++.\" etc. to Steve Cheng <steve@ggi-project.org>.
++.TH "RARPD" "8" "08 January 2011" "iputils-101006" "System Manager's Manual: iputils"
++.SH NAME
++rarpd \- answer RARP REQUESTs
++.SH SYNOPSIS
++
++\fBarping\fR [\fB-aAvde\fR] [\fB-b \fIbootdir\fB\fR] [\fB\fIinterface\fB\fR]
++
++.SH "DESCRIPTION"
++.PP
++Listens
++RARP
++requests from clients. Provided MAC address of client
++is found in \fI/etc/ethers\fR database and
++obtained host name is resolvable to an IP address appropriate
++for attached network, \fBrarpd\fR answers to client with RARPD
++reply carrying an IP address.
++.PP
++To allow multiple boot servers on the network \fBrarpd\fR
++optionally checks for presence Sun-like bootable image in TFTP directory.
++It should have form \fBHexadecimal_IP.ARCH\fR, f.e. to load
++sparc 193.233.7.98 \fIC1E90762.SUN4M\fR is linked to
++an image appropriate for SUM4M in directory \fI/etc/tftpboot\fR.
++.SH "WARNING"
++.PP
++This facility is deeply obsoleted by
++BOOTP
++and later
++DHCP protocols.
++However, some clients really still need this to boot.
++.SH "OPTIONS"
++.TP
++\fB-a\fR
++Listen on all the interfaces. Currently it is an internal
++option, its function is overridden with \fIinterface\fR
++argument. It should not be used.
++.TP
++\fB-A\fR
++Listen not only RARP but also ARP messages, some rare clients
++use ARP by some unknown reason.
++.TP
++\fB-v\fR
++Be verbose.
++.TP
++\fB-d\fR
++Debug mode. Do not go to background.
++.TP
++\fB-e\fR
++Do not check for presence of a boot image, reply if MAC address
++resolves to a valid IP address using \fI/etc/ethers\fR
++database and DNS.
++.TP
++\fB-b \fIbootdir\fB\fR
++TFTP boot directory. Default is \fI/etc/tftpboot\fR
++.SH "SEE ALSO"
++.PP
++\fBarping\fR(8),
++\fBtftpd\fR(8).
++.SH "AUTHOR"
++.PP
++\fBrarpd\fR was written by
++Alexey Kuznetsov
++<kuznet@ms2.inr.ac.ru>.
++It is now maintained by
++YOSHIFUJI Hideaki
++<yoshfuji@skbuff.net>.
++.SH "SECURITY"
++.PP
++\fBrarpd\fR requires CAP_NET_RAWIO capability
++to listen and send RARP and ARP packets. It also needs CAP_NET_ADMIN
++to give to kernel hint for ARP resolution; this is not strictly required,
++but some (most of, to be more exact) clients are so badly broken that
++are not able to answer ARP before they are finally booted. This is
++not wonderful taking into account that clients using RARPD in 2002
++are all unsupported relic creatures of 90's and even earlier.
++.SH "AVAILABILITY"
++.PP
++\fBrarpd\fR is part of \fIiputils\fR package
++and the latest versions are available in source form at
++http://www.skbuff.net/iputils/iputils-current.tar.bz2.
+diff -Naur /dev/null iputils-s20101006/doc/tftpd.8
+--- /dev/null 2011-01-26 09:02:28.396666668 -0500
++++ iputils-s20101006/doc/tftpd.8 2011-01-08 20:09:51.723407498 -0500
+@@ -0,0 +1,85 @@
++.\" This manpage has been automatically generated by docbook2man
++.\" from a DocBook document. This tool can be found at:
++.\" <http://shell.ipoline.com/~elmert/comp/docbook2X/>
++.\" Please send any bug reports, improvements, comments, patches,
++.\" etc. to Steve Cheng <steve@ggi-project.org>.
++.TH "TFTPD" "8" "08 January 2011" "iputils-101006" "System Manager's Manual: iputils"
++.SH NAME
++tftpd \- Trivial File Transfer Protocol server
++.SH SYNOPSIS
++
++\fBtftpd\fR \fB\fIdirectory\fB\fR
++
++.SH "DESCRIPTION"
++.PP
++\fBtftpd\fR is a server which supports the DARPA
++Trivial File Transfer Protocol
++(RFC1350).
++The TFTP server is started
++by \fBinetd\fR(8).
++.PP
++\fIdirectory\fR is required argument; if it is not given
++\fBtftpd\fR aborts. This path is prepended to any file name requested
++via TFTP protocol, effectively chrooting \fBtftpd\fR to this directory.
++File names are validated not to escape out of this directory, however
++administrator may configure such escape using symbolic links.
++.PP
++It is in difference of variants of \fBtftpd\fR usually distributed
++with unix-like systems, which take a list of directories and match
++file names to start from one of given prefixes or to some random
++default, when no arguments were given. There are two reasons not to
++behave in this way: first, it is inconvenient, clients are not expected
++to know something about layout of filesystem on server host.
++And second, TFTP protocol is not a tool for browsing of server's filesystem,
++it is just an agent allowing to boot dumb clients.
++.PP
++In the case when \fBtftpd\fR is used together with
++\fBrarpd\fR(8),
++tftp directories in these services should coincide and it is expected
++that each client booted via TFTP has boot image corresponding
++its IP address with an architecture suffix following Sun Microsystems
++conventions. See
++\fBrarpd\fR(8)
++for more details.
++.SH "SECURITY"
++.PP
++TFTP protocol does not provide any authentication.
++Due to this capital flaw \fBtftpd\fR is not able to restrict
++access to files and will allow only publically readable
++files to be accessed. Files may be written only if they already
++exist and are publically writable.
++.PP
++Impact is evident, directory exported via TFTP \fBmust not\fR
++contain sensitive information of any kind, everyone is allowed
++to read it as soon as a client is allowed. Boot images do not contain
++such information as rule, however you should think twice before
++publishing f.e. Cisco IOS config files via TFTP, they contain
++\fBunencrypted\fR passwords and may contain some information
++about the network, which you were not going to make public.
++.PP
++The \fBtftpd\fR server should be executed by \fBinetd\fR
++with dropped root privileges, namely with a user ID giving minimal
++access to files published in tftp directory. If it is executed
++as superuser occasionally, \fBtftpd\fR drops its UID and GID
++to 65534, which is most likely not the thing which you expect.
++However, this is not very essential; remember, only files accessible
++for everyone can be read or written via TFTP.
++.SH "SEE ALSO"
++.PP
++\fBrarpd\fR(8),
++\fBtftp\fR(1),
++\fBinetd\fR(8).
++.SH "HISTORY"
++.PP
++The \fBtftpd\fR command appeared in 4.2BSD. The source in iputils
++is cleaned up both syntactically (ANSIized) and semantically (UDP socket IO).
++.PP
++It is distributed with iputils mostly as good demo of an interesting feature
++(MSG_CONFIRM) allowing to boot long images by dumb clients
++not answering ARP requests until they are finally booted.
++However, this is full functional and can be used in production.
++.SH "AVAILABILITY"
++.PP
++\fBtftpd\fR is part of \fIiputils\fR package
++and the latest versions are available in source form at
++http://www.skbuff.net/iputils/iputils-current.tar.bz2.
+diff -Naur /dev/null iputils-s20101006/doc/traceroute6.8
+--- /dev/null 1969-12-31 19:00:00.000000000 -0500
++++ iputils-s20101006/doc/traceroute6.8 2011-01-08 20:09:52.114781859 -0500
+@@ -0,0 +1,42 @@
++.\" This manpage has been automatically generated by docbook2man
++.\" from a DocBook document. This tool can be found at:
++.\" <http://shell.ipoline.com/~elmert/comp/docbook2X/>
++.\" Please send any bug reports, improvements, comments, patches,
++.\" etc. to Steve Cheng <steve@ggi-project.org>.
++.TH "TRACEROUTE6" "8" "08 January 2011" "iputils-101006" "System Manager's Manual: iputils"
++.SH NAME
++traceroute6 \- traces path to a network host
++.SH SYNOPSIS
++
++\fBtraceroute6\fR [\fB-dnrvV\fR] [\fB-i \fIinterface\fB\fR] [\fB-m \fImax_ttl\fB\fR] [\fB-p \fIport\fB\fR] [\fB-q \fImax_probes\fB\fR] [\fB-s \fIsource\fB\fR] [\fB-w \fIwait time\fB\fR] \fB\fIdestination\fB\fR [\fB\fIsize\fB\fR]
++
++.SH "DESCRIPTION"
++.PP
++Description can be found in
++\fBtraceroute\fR(8),
++all the references to IP replaced to IPv6. It is needless to copy
++the description from there.
++.SH "SEE ALSO"
++.PP
++\fBtraceroute\fR(8),
++\fBtracepath\fR(8),
++\fBping\fR(8).
++.SH "HISTORY"
++.PP
++This program has long history. Author of \fBtraceroute\fR
++is Van Jacobson and it first appeared in 1988. This clone is
++based on a port of \fBtraceroute\fR to IPv6 published
++in NRL IPv6 distribution in 1996. In turn, it was ported
++to Linux by Pedro Roque. After this it was kept in sync by
++Alexey Kuznetsov
++<kuznet@ms2.inr.ac.ru>. And eventually entered
++\fBiputils\fR package.
++.SH "SECURITY"
++.PP
++\fBtracepath6\fR requires CAP_NET_RAWIO capability
++to be executed. It is safe to be used as set-uid root.
++.SH "AVAILABILITY"
++.PP
++\fBtraceroute6\fR is part of \fIiputils\fR package
++and the latest versions are available in source form at
++http://www.skbuff.net/iputils/iputils-current.tar.bz2.
diff --git a/testing/iputils/permission-fix.patch b/testing/iputils/permission-fix.patch
new file mode 100644
index 000000000..c47636f84
--- /dev/null
+++ b/testing/iputils/permission-fix.patch
@@ -0,0 +1,15 @@
+--- traceroute-1.4a12/Makefile.in.old 2000-11-23 21:05:29.000000000 +0100
++++ traceroute-1.4a12/Makefile.in 2008-09-27 20:04:30.000000000 +0200
+@@ -90,10 +90,10 @@
+ sed -e 's/.*/char version[] = "&";/' $(srcdir)/VERSION > $@
+
+ install: force
+- $(INSTALL) -m 4555 -o root -g bin traceroute $(DESTDIR)$(BINDEST)
++ $(INSTALL) -m 4555 -o root -g root traceroute $(DESTDIR)$(BINDEST)
+
+ install-man: force
+- $(INSTALL) -m 444 -o bin -g bin traceroute.8 $(DESTDIR)$(MANDEST)/man8
++ $(INSTALL) -m 644 -o root -g root traceroute.8 $(DESTDIR)$(MANDEST)/man8
+
+ lint: $(GENSRC) force
+ lint -hbxn $(SRC) | \
diff --git a/testing/isdn4k-utils/PKGBUILD b/testing/isdn4k-utils/PKGBUILD
new file mode 100644
index 000000000..59f7943ca
--- /dev/null
+++ b/testing/isdn4k-utils/PKGBUILD
@@ -0,0 +1,34 @@
+# $Id: PKGBUILD 141935 2011-11-03 10:53:42Z tpowa $
+# Contributor: Dennis "Gyroplast" Herbrich <dennis@archlinux.org>
+# Maintainer: dorphell <dorphell@archlinux.org>
+
+pkgname=isdn4k-utils
+pkgver=3.2p1
+pkgrel=7
+pkgdesc="User space administration programs and tools for ISDN"
+arch=('i686' 'x86_64')
+url="http://www.isdn4linux.de/"
+license=('GPL')
+depends=('ncurses')
+backup=(etc/isdn/{callerid.conf,isdn.conf,rate.conf,isdnlog.isdnctrl0.options})
+options=('!makeflags')
+source=(ftp://ftp.isdn4linux.de/pub/isdn4linux/utils/${pkgname}.v${pkgver}.tar.bz2
+ isdn4k-utils-3.2p1-build.patch
+ config)
+md5sums=('d347afa462e46eccfd1284aebae227b6'
+ '7f056ddac093c77d8be4e076d0e9421c'
+ '3429894039f33c114fef5ef9f866920e')
+
+build() {
+ cd $srcdir/$pkgname
+ patch -Np1 -i $srcdir/isdn4k-utils-3.2p1-build.patch
+ cp $srcdir/config ./.config
+ make subconfig
+ make
+}
+
+package() {
+ cd $srcdir/$pkgname
+ install -dm755 $pkgdir/sbin
+ make DESTDIR=$pkgdir install
+}
diff --git a/testing/isdn4k-utils/config b/testing/isdn4k-utils/config
new file mode 100644
index 000000000..fe0810209
--- /dev/null
+++ b/testing/isdn4k-utils/config
@@ -0,0 +1,100 @@
+#
+# Automatically generated by make menuconfig: don't edit
+#
+
+#
+# Code maturity level options
+#
+# CONFIG_EXPERIMENTAL is not set
+
+#
+# General configuration
+#
+# CONFIG_BUILDX11 is not set
+CONFIG_KERNELDIR='/usr/src/linux'
+CONFIG_BINDIR='/usr/bin'
+CONFIG_SBINDIR='/sbin'
+CONFIG_MANDIR='/usr/share/man'
+CONFIG_RUNDIR='/var/run'
+CONFIG_LOCKDIR='/var/lock'
+CONFIG_LOCKFILE='LCK..'
+CONFIG_I4LCONFDIR='/etc/isdn'
+CONFIG_CONFFILE='isdn.conf'
+CONFIG_CALLERIDFILE='callerid.conf'
+CONFIG_USERCONFFILE='~/.isdn'
+CONFIG_COUNTRYCODE='49'
+CONFIG_AREACODE=''
+CONFIG_COUNTRY_PREFIX='+'
+CONFIG_AREA_PREFIX='0'
+CONFIG_DATADIR='/usr/lib/isdn'
+
+#
+# Runtime configuration tools
+#
+CONFIG_ISDNCTRL=y
+CONFIG_ISDNCTRL_CONF=y
+# CONFIG_ISDNCTRL_TIMRU is not set
+# CONFIG_IPROFD is not set
+# CONFIG_DIVERTCTRL is not set
+
+#
+# Card configuration tools
+#
+CONFIG_HISAXCTRL=y
+CONFIG_ICNCTRL=y
+# CONFIG_ICNCTRL_DEBUG is not set
+CONFIG_PCBITCTL=y
+# CONFIG_AVMCAPICTRL is not set
+# CONFIG_EICONCTRL is not set
+
+#
+# Tools for monitoring activity
+#
+CONFIG_IMON=y
+CONFIG_IMONTTY=y
+CONFIG_ISDNLOG=y
+
+#
+# Options for isdnlog package
+#
+CONFIG_ISDNLOG_SERV_PORT=20011
+CONFIG_ISDNLOG_USERFILE='isdnlog.users'
+CONFIG_ISDNLOG_CHARGEFILE='charge.dat'
+CONFIG_ISDNLOG_LOGFILE='/var/log/isdn.log'
+CONFIG_ISDNLOG_RELOADCMD='reload'
+CONFIG_ISDNLOG_STOPCMD='stop'
+CONFIG_ISDNLOG_REBOOTCMD='/sbin/reboot'
+CONFIG_ISDNLOG_OLDI4LCONFDIR='/etc/isdnlog'
+CONFIG_ISDNLOG_OLDI4LCONFFILE='isdnlog.conf'
+# CONFIG_ISDNLOG_POSTGRES is not set
+# CONFIG_ISDNLOG_MYSQLDB is not set
+# CONFIG_ISDNLOG_ORACLE is not set
+CONFIG_ISDN_LOG_DE=y
+CONFIG_ISDN_LOG_CC_DE=y
+CONFIG_ISDN_LOG_DEST_DE=y
+CONFIG_ISDN_LOG_DEST_AT=y
+CONFIG_ISDN_LOG_DEST_NL=y
+CONFIG_ISDN_LOG_DEST_CH=y
+CONFIG_IPPPSTATS=y
+# CONFIG_XISDNLOAD is not set
+# CONFIG_XMONISDN is not set
+
+#
+# Applications
+#
+# CONFIG_VBOX is not set
+CONFIG_IPPPD=y
+
+#
+# Options for ipppd
+#
+# CONFIG_IPPPD_MSCHAP is not set
+# CONFIG_IPPPD_RADIUS is not set
+# CONFIG_RADIUS_WTMP_LOGGING is not set
+RADIUS_CLIENT_CONFIG_FILE=''
+
+#
+# Documentation
+#
+CONFIG_GENMAN=y
+# CONFIG_FAQ is not set
diff --git a/testing/isdn4k-utils/isdn4k-utils-3.2p1-build.patch b/testing/isdn4k-utils/isdn4k-utils-3.2p1-build.patch
new file mode 100644
index 000000000..63239fcad
--- /dev/null
+++ b/testing/isdn4k-utils/isdn4k-utils-3.2p1-build.patch
@@ -0,0 +1,2028 @@
+diff -Naur isdn4k-utils-orig//eicon/eiconctrl.c isdn4k-utils/eicon/eiconctrl.c
+--- isdn4k-utils-orig//eicon/eiconctrl.c 2001-06-22 02:34:45.000000000 +1000
++++ isdn4k-utils/eicon/eiconctrl.c 2010-12-04 20:44:11.093338893 +1000
+@@ -1970,7 +1970,7 @@
+ val = strtol(p, &q, 16);
+ p = q;
+ val = strtol(p, &q, 16);
+- (unsigned short) *buffer = (unsigned short) val;
++ *buffer = (unsigned short) val;
+ pos = 2;
+ while ((p != q) && (*q != 0)) {
+ p = q;
+diff -Naur isdn4k-utils-orig//hisax/hisaxctrl.c isdn4k-utils/hisax/hisaxctrl.c
+--- isdn4k-utils-orig//hisax/hisaxctrl.c 2000-06-30 19:37:38.000000000 +1000
++++ isdn4k-utils/hisax/hisaxctrl.c 2010-12-04 20:44:11.093338893 +1000
+@@ -43,7 +43,8 @@
+ fprintf(stderr, "cannot open file %s\n", fname);
+ exit(-1);
+ }
+- p = (int *) buffer = (unsigned char *) malloc(MAX_SIZE+4);
++ buffer = (unsigned char *) malloc(MAX_SIZE+4);
++ p = (int *) buffer;
+ if (!buffer) {
+ fprintf(stderr, "cannot get %d byte memory\n", MAX_SIZE+4);
+ exit(-1);
+diff -Naur isdn4k-utils-orig//hisax/Makefile.in isdn4k-utils/hisax/Makefile.in
+--- isdn4k-utils-orig//hisax/Makefile.in 2002-07-20 05:03:51.000000000 +1000
++++ isdn4k-utils/hisax/Makefile.in 2010-12-04 20:44:03.726672225 +1000
+@@ -30,7 +30,7 @@
+ #.SUFFIXES:
+ #.SUFFIXES: .c .o
+
+-%.8: %.man
++%.8: %.man.in
+ cp $< $@
+
+ all: $(PROGRAMS) $(MANPAGES)
+diff -Naur isdn4k-utils-orig//ipppd/main.c isdn4k-utils/ipppd/main.c
+--- isdn4k-utils-orig//ipppd/main.c 2002-07-18 10:06:21.000000000 +1000
++++ isdn4k-utils/ipppd/main.c 2010-12-04 20:44:11.093338893 +1000
+@@ -1041,9 +1041,14 @@
+ static char line[256]; /* line to be logged accumulated here */
+ static char *linep;
+
++#ifdef __STDC__
++static void pr_log(void *arg, char *fmt, ...);
++#else /* __STDC__ */
++static void pr_log(arg, fmt, va_alist);
++#endif
++
+ void log_packet(u_char *p,int len,char *prefix,int linkunit)
+ {
+- static void pr_log __P((void *, char *, ...));
+
+ int i, n;
+ u_short proto;
+diff -Naur isdn4k-utils-orig//ipppd/options.c isdn4k-utils/ipppd/options.c
+--- isdn4k-utils-orig//ipppd/options.c 2002-07-06 10:34:08.000000000 +1000
++++ isdn4k-utils/ipppd/options.c 2010-12-04 20:43:57.890005560 +1000
+@@ -479,26 +479,24 @@
+ #define IMPLEMENTATION ""
+ #endif
+
+-static char *usage_string = "\
+-ipppd version %s patch level %d%s\n\
+-Usage: %s [ options ], where options are:\n\
+-\t<device> Communicate over the named device\n\
++static char *usage_string = "ipppd version %s patch level %d%s\n"
++"Usage: %s [ options ], where options are:\n"
++"\t<device> Communicate over the named device\n"
+ #ifdef INCLUDE_OBSOLETE_FEATURES
+-\tcrtscts Use hardware RTS/CTS flow control\n\
+-\t<speed> Set the baud rate to <speed>\n\
+-\tmodem Use modem control lines\n\
++"\tcrtscts Use hardware RTS/CTS flow control\n"
++"\t<speed> Set the baud rate to <speed>\n"
++"\tmodem Use modem control lines\n"
+ #endif
+-\t<loc>:<rem> Set the local and/or remote interface IP\n\
+-\t\taddresses. (you also may use the option 'useifip' to get IPs).\n\
+-\tasyncmap <n> Set the desired async map to hex <n>\n\
+-\tauth Require authentication from peer\n\
+-\tconnect <p> Invoke shell command <p> to set up the serial line\n\
+-\tdefaultroute Add default route through interface\n\
+-\tfile <f> Take options from file <f>\n\
+-\tmru <n> Set MRU value to <n> for negotiation\n\
+-\tnetmask <n> Set interface netmask to <n>\n\
+-See ipppd(8) for more options.\n\
+-";
++"\t<loc>:<rem> Set the local and/or remote interface IP\n"
++"\t\t\taddresses. (you also may use the option 'useifip' to get IPs).\n"
++"\tasyncmap <n> Set the desired async map to hex <n>\n"
++"\tauth Require authentication from peer\n"
++"\tconnect <p> Invoke shell command <p> to set up the serial line\n"
++"\tdefaultroute Add default route through interface\n"
++"\tfile <f> Take options from file <f>\n"
++"\tmru <n> Set MRU value to <n> for negotiation\n"
++"\tnetmask <n> Set interface netmask to <n>\n"
++"See ipppd(8) for more options.\n";
+
+ static char *current_option; /* the name of the option being parsed */
+
+diff -Naur isdn4k-utils-orig//isdnlog/isdnlog/isdnlog.h isdn4k-utils/isdnlog/isdnlog/isdnlog.h
+--- isdn4k-utils-orig//isdnlog/isdnlog/isdnlog.h 2001-06-22 02:34:56.000000000 +1000
++++ isdn4k-utils/isdnlog/isdnlog/isdnlog.h 2010-12-04 20:44:03.780005559 +1000
+@@ -460,7 +460,7 @@
+
+ _EXTERN void dotrace(void);
+ _EXTERN int morectrl(int card);
+-_EXTERN void moreinfo(void);
++extern void moreinfo(void);
+ _EXTERN void morekbd(void);
+ _EXTERN void processcint(void);
+ _EXTERN void processflow(void);
+diff -Naur isdn4k-utils-orig//isdnlog/isdnlog/processor.c isdn4k-utils/isdnlog/isdnlog/processor.c
+--- isdn4k-utils-orig//isdnlog/isdnlog/processor.c 2002-04-02 04:06:10.000000000 +1000
++++ isdn4k-utils/isdnlog/isdnlog/processor.c 2010-12-04 20:44:03.783338893 +1000
+@@ -5293,7 +5293,7 @@
+ tei = BROADCAST; /* Wenn nach einer tei-Zeile keine hex:-Zeile kommt, tei ungueltig machen! */
+
+ if ((type == SETUP) && !replay) { /* fetch additional info from "/dev/isdninfo" */
+- static void moreinfo(); /* soviel zu Objektorientiertem Denken ;-) */
++ /*static void moreinfo(); */ /* soviel zu Objektorientiertem Denken ;-) */
+ moreinfo();
+ } /* if */
+
+diff -Naur isdn4k-utils-orig//isdnlog/Makefile.in isdn4k-utils/isdnlog/Makefile.in
+--- isdn4k-utils-orig//isdnlog/Makefile.in 2002-07-20 05:03:55.000000000 +1000
++++ isdn4k-utils/isdnlog/Makefile.in 2010-12-04 20:44:03.730005560 +1000
+@@ -1842,9 +1842,6 @@
+ $(INSTALL_DATA) $$f $(DESTDIR)$(DATADIR); \
+ echo Installing $(DESTDIR)$(DATADIR)/$$f; \
+ done
+- @(grep isdnlog $(SERVICEFILE) >/dev/null) || \
+- (echo "";echo "";echo "Add a line to the file $(SERVICEFILE)" ;echo "";echo ""; \
+- echo "isdnlog $(SERV_PORT)/tcp isdnlog" >> $(SERVICEFILE))
+
+ install-strip:
+ $(MAKE) INSTALL_BIN='$(INSTALL_BIN) -s' \
+diff -Naur isdn4k-utils-orig//isdnlog/tools/cdb/cdbmake.c isdn4k-utils/isdnlog/tools/cdb/cdbmake.c
+--- isdn4k-utils-orig//isdnlog/tools/cdb/cdbmake.c 2002-02-22 21:10:25.000000000 +1000
++++ isdn4k-utils/isdnlog/tools/cdb/cdbmake.c 2010-12-04 20:44:03.786672226 +1000
+@@ -3,8 +3,6 @@
+ #include "freecdbmake.h"
+ #include <unistd.h>
+
+-extern char *malloc();
+-
+ void diesys(why) char *why; { perror(why); exit(111); }
+
+ void writeerror() { diesys("cdbmake: fatal: unable to write"); }
+diff -Naur isdn4k-utils-orig//isdnlog/tools/isdnrate.c isdn4k-utils/isdnlog/tools/isdnrate.c
+--- isdn4k-utils-orig//isdnlog/tools/isdnrate.c 2001-06-22 02:34:56.000000000 +1000
++++ isdn4k-utils/isdnlog/tools/isdnrate.c 2010-12-04 20:44:11.096672226 +1000
+@@ -304,7 +304,7 @@
+
+ static void print_header(void);
+
+-static char *myname, *myshortname;
++char *myname, *myshortname;
+ static char options[] = "ab:d:f:h:l:op:st:v::x:CD::G:HLNP:O:S:TUVX::Z";
+ static char usage[] = "%s: usage: %s [ -%s ] Destination ...\n";
+
+@@ -313,7 +313,7 @@
+ static int usestat = 0;
+ static int duration = LCR_DURATION;
+ static time_t start;
+-static int day, month, year, hour, min, sec;
++int day, month, year, hour, min, sec;
+ static char ignore[MAXPROVIDER];
+ static char *fromarea = 0;
+ static char wanted_day;
+diff -Naur isdn4k-utils-orig//isdnlog/tools/isdnrate.c.orig isdn4k-utils/isdnlog/tools/isdnrate.c.orig
+--- isdn4k-utils-orig//isdnlog/tools/isdnrate.c.orig 1970-01-01 10:00:00.000000000 +1000
++++ isdn4k-utils/isdnlog/tools/isdnrate.c.orig 2001-06-22 02:34:56.000000000 +1000
+@@ -0,0 +1,1806 @@
++/* $Id: isdnrate.c,v 1.38 2001/03/01 14:59:16 paul Exp $
++
++ * ISDN accounting for isdn4linux. (rate evaluation)
++ *
++ * Copyright 1995 .. 2000 by Andreas Kool (akool@isdn4linux.de)
++ *
++ * 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, or (at your option)
++ * any later version.
++ *
++ * This program is distributed in the hope that it will be useful,
++ * but WITHOUT ANY WARRANTY; without even the implied warranty of
++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
++ * GNU General Public License for more details.
++ *
++ * You should have received a copy of the GNU General Public License
++ * along with this program; if not, write to the Free Software
++ * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
++ *
++ * $Log: isdnrate.c,v $
++ * Revision 1.38 2001/03/01 14:59:16 paul
++ * Various patches to fix errors when using the newest glibc,
++ * replaced use of insecure tempnam() function
++ * and to remove warnings etc.
++ *
++ * Revision 1.37 2000/07/17 16:34:23 akool
++ * isdnlog-4.32
++ * - added new Prefixes 0160 (D1) and 0162 (D2) to "country-de.dat"
++ * - corrected all german mobil phone numbers (many thank's to
++ * Tobias Becker <i4l-projects@talypso.de> for the tool "fix_rates.pl")
++ * - isdnlog/tools/rate.c ... New R:-tag
++ * - isdnlog/tools/isdnrate.c ... print warnings from getRate if verbose
++ * - isdnlog/tools/rate-files.man ... New R:-tag
++ * - isdnlog/tools/NEWS ... New R:-tag
++ * - isdnlog/README ... New R:-tag
++ * - isdnlog/samples/rtest.dat ... example rate-file for testing R:
++ *
++ * Revision 1.36 2000/03/09 18:50:03 akool
++ * isdnlog-4.16
++ * - isdnlog/samples/isdn.conf.no ... changed VBN
++ * - isdnlog/isdnlog/isdnlog.c .. ciInterval
++ * - isdnlog/isdnlog/processor.c .. ciInterval
++ * - isdnlog/tools/tools.h .. ciInterval, abclcr conf option
++ * - isdnlog/tools/isdnconf.c .. ciInterval, abclcr conf option
++ * - isdnlog/tools/isdnrate.c .. removed a warning
++ * - isdnlog/NEWS ... updated
++ * - isdnlog/README ... updated
++ * - isdnlog/isdnlog/isdnlog.8.in ... updated
++ * - isdnlog/isdnlog/isdnlog.5.in ... updated
++ * - isdnlog/samples/provider ... NEW
++ *
++ * ==> Please run a make clean, and be sure to read isdnlog/NEWS for changes
++ * ==> and new features.
++ *
++ * Revision 1.35 2000/03/06 07:03:21 akool
++ * isdnlog-4.15
++ * - isdnlog/tools/tools.h ... moved one_call, sum_calls to isdnrep.h
++ * ==> DO A 'make clean' PLEASE
++ * - isdnlog/tools/telnum.c ... fixed a small typo
++ * - isdnlog/isdnrep/rep_main.c ... incl. dest.h
++ * - isdnlog/isdnrep/isdnrep.c ... fixed %l, %L
++ * - isdnlog/isdnrep/isdnrep.h ... struct one_call, sum_calls are now here
++ *
++ * Support for Norway added. Many thanks to Tore Ferner <torfer@pvv.org>
++ * - isdnlog/rate-no.dat ... NEW
++ * - isdnlog/holiday-no.dat ... NEW
++ * - isdnlog/samples/isdn.conf.no ... NEW
++ * - isdnlog/samples/rate.conf.no ... NEW
++ *
++ * Revision 1.34 2000/02/28 19:53:56 akool
++ * isdnlog-4.14
++ * - Patch from Roland Rosenfeld <roland@spinnaker.de> fix for isdnrep
++ * - isdnlog/tools/rate.c ... epnum
++ * - isdnlog/tools/rate-at.c ... new rates
++ * - isdnlog/rate-at.dat
++ * - isdnlog/tools/rate-files.man ... %.3f
++ * - doc/Configure.help ... unknown cc
++ * - isdnlog/configure.in ... unknown cc
++ * - isdnlog/.Config.in ... unknown cc
++ * - isdnlog/Makefile.in ... unknown cc
++ * - isdnlog/tools/dest/Makefile.in ... LANG => DEST_LANG
++ * - isdnlog/samples/rate.conf.pl ... NEW
++ * - isdnlog/samples/isdn.conf.pl ... NEW
++ * - isdnlog/rate-pl.dat ... NEW
++ * - isdnlog/tools/isdnrate.c ... fixed -P pid_dir, restarts on HUP now
++ * - isdnlog/tools/isdnrate.man ... SIGHUP documented
++ *
++ * Revision 1.33 2000/02/12 16:40:24 akool
++ * isdnlog-4.11
++ * - isdnlog/Makefile.in ... sep install-targets, installs samples, no isdnconf
++ * - isdnlog/samples/rate.conf.{lu,nl} ... NEW
++ * - isdnlog/samples/isdn.conf.lu ... chg provider
++ * - isdnlog/samples/stop ... chg \d,\d => \d.\d
++ * - isdnlog/samples/isdnlog.isdnctrl0.options ... NEW
++ * - isdnlog/samples/isdnlog.users ... NEW
++ * - isdnlog/country-de.dat ... _DEMF again
++ * - isdnlog/isdnlog/processor.c ... LCR
++ * - isdnlog/tools/isdnrate.c ... fmt of s
++ *
++ * Old config is not installed anymore, to acomplish this do
++ *
++ * make install-old-conf
++ * make install
++ *
++ * A running isdnlog is now HUP-ed not KILL-ed
++ *
++ * Revision 1.32 2000/02/03 18:24:51 akool
++ * isdnlog-4.08
++ * isdnlog/tools/rate.c ... LCR patch again
++ * isdnlog/tools/isdnrate.c ... LCR patch again
++ * isdnbill enhanced/fixed
++ * DTAG AktivPlus fixed
++ *
++ * Revision 1.31 1999/12/31 13:57:20 akool
++ * isdnlog-4.00 (Millenium-Edition)
++ * - Oracle support added by Jan Bolt (Jan.Bolt@t-online.de)
++ * - resolved *any* warnings against rate-de.dat
++ * - Many new rates
++ * - CREDITS file added
++ *
++ * Revision 1.30 1999/12/24 14:17:05 akool
++ * isdnlog-3.81
++ * - isdnlog/tools/NEWS
++ * - isdnlog/tools/telrate/info.html.in ... bugfix
++ * - isdnlog/tools/telrate/telrate.cgi.in ... new Service query
++ * - isdnlog/tools/telrate/Makefile.in ... moved tmp below telrate
++ * - isdnlog/samples/rate.conf.at ... fixed
++ * - isdnlog/tools/rate-at.c ... some changes
++ * - isdnlog/rate-at.dat ... ditto
++ * - isdnlog/tools/Makefile ... added path to pp_rate
++ * - isdnlog/tools/rate.{c,h} ... getServiceNames, Date-Range in T:-Tag
++ * - isdnlog/tools/isdnrate.c ... fixed sorting of services, -X52 rets service names
++ * - isdnlog/tools/rate-files.man ... Date-Range in T:-Tag, moved from doc
++ * - isdnlog/tools/isdnrate.man ... moved from doc
++ * - doc/Makefile.in ... moved man's from doc to tools
++ * - isdnlog/Makefile.in ... man's, install isdn.conf.5
++ * - isdnlog/configure{,.in} ... sed, awk for man's
++ * - isdnlog/tools/zone/Makefile.in ... dataclean
++ * - isdnlog/tools/dest/Makefile.in ... dataclean
++ * - isdnlog/isdnlog/isdnlog.8.in ... upd
++ * - isdnlog/isdnlog/isdn.conf.5.in ... upd
++ *
++ * Revision 1.29 1999/12/17 22:51:55 akool
++ * isdnlog-3.79
++ * - isdnlog/isdnrep/isdnrep.{c,h} ... error -handling, print_msg
++ * - isdnlog/isdnrep/rep_main.c
++ * - isdnlog/isdnrep/isdnrep.1.in
++ * - isdnlog/tools/rate.c ... dupl entry in rate.conf
++ * - isdnlog/tools/NEWS
++ * - isdnlog/tools/isdnrate.c
++ * - isdnlog/tools/dest/configure{,.in}
++ * - isdnlog/tools/zone/configure{,.in}
++ *
++ * Revision 1.28 1999/12/16 23:08:28 akool
++ * isdnlog-3.78
++ * - isdnlog/tools/isdnrate.c ... new sOcket option
++ * - isdnlog/tools/NEWS ... new sOcket option
++ * - doc/isdnrate.man ... ditto
++ * - isdnlog/tools/telrate/config.in ... ditto
++ * - isdnlog/tools/telrate/telrate.cgi.in ... ditto
++ * - isdnlog/tools/telrate/README-telrate ditto
++ *
++ * Revision 1.27 1999/12/02 19:28:02 akool
++ * isdnlog-3.73
++ * - isdnlog/tools/telrate/telrate.cgi.in faster
++ * - doc/isdnrate.man ... -P
++ * - isdnlog/tools/isdnrate.c ... -P
++ * - isdnlog/tools/NEWS ... -P
++ * - isdnlog/tools/rate-at.c ... 194040
++ * - isdnlog/rate-at.dat
++ * - isdnlog/tools/rate.c ... SIGSEGV
++ *
++ * Revision 1.26 1999/12/01 21:47:25 akool
++ * isdnlog-3.72
++ * - new rates for 01051
++ * - next version of isdnbill
++ *
++ * - isdnlog/tools/telnum.c ... cleanup
++ * - isdnlog/tools/isdnrate.c ... -s Service
++ * - isdnlog/tools/rate.{c,h} ... -s
++ * - isdnlog/tools/NEWS ... -s
++ * - doc/isdnrate.man .. updated -o, -s
++ * - doc/rate-files.man ... updated
++ * - isdnlog/tools/dest/README.makedest ... updt.
++ * - isdnlog/isdnlog/isdnlog.8.in .. updt.
++ *
++ * Telrate
++ * - isdnlog/tools/telrate/README-telrate
++ * - isdnlog/tools/telrate/config.in NEW
++ * - isdnlog/tools/telrate/configure NEW
++ * - isdnlog/tools/telrate/Makefile.in NEW
++ * - isdnlog/tools/telrate/index.html.in was index.html
++ * - isdnlog/tools/telrate/info.html.in was info.html
++ * - isdnlog/tools/telrate/telrate.cgi.in was telrate.cgi
++ * - isdnlog/tools/telrate/leo.sample NEW sample config
++ * - isdnlog/tools/telrate/alex.sample NEW sample config
++ *
++ * Revision 1.25 1999/11/08 21:09:41 akool
++ * isdnlog-3.65
++ * - added "B:" Tag to "rate-xx.dat"
++ *
++ * Revision 1.24 1999/11/07 13:29:28 akool
++ * isdnlog-3.64
++ * - new "Sonderrufnummern" handling
++ *
++ * Revision 1.22 1999/10/26 18:17:14 akool
++ * isdnlog-3.62
++ * - many new rates
++ * - next try to fix "Sonderrufnummern"
++ *
++ * isdnlog-3.58
++ * - big cleanup ( > 1.3 Mb removed!)
++ * - v0.02 of destination support - better, but not perfect
++ * (does't work with gcc-2.7.2.3 yet - use egcs!)
++ *
++ * Revision 1.21 1999/10/25 18:30:03 akool
++ * isdnlog-3.57
++ * WARNING: Experimental version!
++ * Please use isdnlog-3.56 for production systems!
++ *
++ * Revision 1.20 1999/09/19 14:16:27 akool
++ * isdnlog-3.53
++ *
++ * Revision 1.19 1999/09/16 20:27:21 akool
++ * isdnlog-3.52
++ *
++ * Revision 1.18 1999/09/13 09:09:44 akool
++ * isdnlog-3.51
++ * - changed getProvider() to not return NULL on unknown providers
++ * many thanks to Matthias Eder <mateder@netway.at>
++ * - corrected zone-processing when doing a internal -> world call
++ *
++ * Revision 1.17 1999/09/09 11:21:05 akool
++ * isdnlog-3.49
++ *
++ * Revision 1.16 1999/08/04 23:06:52 akool
++ * Better codeall for .at
++ *
++ * Revision 1.15 1999/07/31 09:25:36 akool
++ * getRate() speedup
++ *
++ * Revision 1.14 1999/07/26 16:28:41 akool
++ * getRate() speedup from Leo
++ *
++ * Revision 1.13 1999/07/25 15:57:46 akool
++ * isdnlog-3.43
++ * added "telnum" module
++ *
++ * Revision 1.12 1999/07/24 08:45:17 akool
++ * isdnlog-3.42
++ * rate-de.dat 1.02-Germany [18-Jul-1999 10:44:21]
++ * better Support for Ackermann Euracom
++ * WEB-Interface for isdnrate
++ * many small fixes
++ *
++ * Revision 1.11 1999/07/15 16:42:04 akool
++ * small enhancement's and fixes
++ *
++ * Revision 1.10 1999/07/07 19:44:07 akool
++ * patches from Michael and Leo
++ *
++ * Revision 1.9 1999/07/04 20:47:05 akool
++ * rate-de.dat V:1.02-Germany [04-Jul-1999 22:56:37]
++ *
++ * Revision 1.8 1999/07/03 10:24:14 akool
++ * fixed Makefile
++ *
++ * Revision 1.7 1999/07/02 19:18:00 akool
++ * rate-de.dat V:1.02-Germany [02-Jul-1999 21:27:20]
++ *
++ * Revision 1.6 1999/07/02 18:20:50 akool
++ * rate-de.dat V:1.02-Germany [02-Jul-1999 20:29:21]
++ * country-de.dat V:1.02-Germany [02-Jul-1999 19:13:54]
++ *
++ * Revision 1.5 1999/07/01 20:40:07 akool
++ * isdnrate optimized
++ *
++ * Revision 1.4 1999/06/30 20:53:28 akool
++ * added "-t" option to "isdnrate"
++ *
++ * Revision 1.3 1999/06/30 17:17:37 akool
++ * isdnlog Version 3.39
++ *
++ * Revision 1.2 1999/06/29 20:11:25 akool
++ * now compiles with ndbm
++ * (many thanks to Nima <nima_ghasseminejad@public.uni-hamburg.de>)
++ *
++ * Revision 1.1 1999/06/28 19:16:33 akool
++ * isdnlog Version 3.38
++ * - new utility "isdnrate" started
++ *
++ */
++
++#include "isdnlog.h"
++#include "tools/zone.h"
++#include <unistd.h>
++#include "dest.h"
++
++#define WIDTH 19
++#define _MAXLAST 20 /* the real max */
++#define MAXLAST ((best>=_MAXLAST||best<=2)?5:best)
++
++
++static void print_header(void);
++
++static char *myname, *myshortname;
++static char options[] = "ab:d:f:h:l:op:st:v::x:CD::G:HLNP:O:S:TUVX::Z";
++static char usage[] = "%s: usage: %s [ -%s ] Destination ...\n";
++
++static int header = 0, best = MAXPROVIDER, table = 0, explain = 0;
++int verbose = 0;
++static int usestat = 0;
++static int duration = LCR_DURATION;
++static time_t start;
++static int day, month, year, hour, min, sec;
++static char ignore[MAXPROVIDER];
++static char *fromarea = 0;
++static char wanted_day;
++static int list = 0;
++static char *comment;
++static char **providers = 0; /* incl these */
++static int n_providers = 0;
++static int business = 0;
++static char **xproviders = 0; /* excl these */
++static int nx_providers = 0;
++static int xbusiness = 0;
++static int all = 0;
++static int booked = 0;
++static int service = 0;
++
++#define SOCKNAME "/tmp/isdnrate"
++static int is_daemon = 0;
++static int is_client = 0;
++static int we_are_daemon = 0;
++static int takt = 99999;
++static char sortby;
++static int need_dest;
++static int h_param = 0;
++static int lcr = 0;
++static TELNUM srcnum, destnum;
++static char *pid_dir = 0;
++static char *pid_file = 0;
++static char *socket_file = 0;
++static char **hup_argv; /* args to restart with */
++
++typedef struct {
++ int prefix;
++ double rate;
++ char *name;
++ char *explain;
++} SORT;
++
++typedef struct {
++ int weight;
++ int index;
++} SORT2;
++
++static SORT sort[MAXPROVIDER];
++
++#undef MAXPROVIDER
++#define MAXPROVIDER getNProvider()
++
++#undef BUFSIZ /* sorry but 8192 is too much for me */
++#define BUFSIZ 256
++
++int print_msg(int Level, const char *fmt,...)
++{
++ auto va_list ap;
++ auto char String[BUFSIZ * 3];
++
++ if ((Level > PRT_ERR && !verbose) || (Level > PRT_WARN && verbose < 2))
++ return (1);
++
++ va_start(ap, fmt);
++ (void) vsnprintf(String, BUFSIZ * 3, fmt, ap);
++ va_end(ap);
++
++ fprintf(stderr, "%s", String);
++
++ return (0);
++} /* print_msg */
++
++
++static void init()
++{
++ auto char *version, **message;
++
++ if (readconfig(myshortname) < 0)
++ exit(1);
++
++ if (verbose)
++ message = &version;
++ else
++ message = NULL;
++
++ initHoliday(holifile, message);
++
++ if (verbose && *version)
++ print_msg(PRT_V, "%s\n", version);
++ initDest(destfile, message);
++ if (verbose && *version)
++ print_msg(PRT_V, "%s\n", version);
++
++ initRate(rateconf, ratefile, zonefile, message);
++
++ if (verbose && *version)
++ print_msg(PRT_V, "%s\n", version);
++
++} /* init */
++
++#if 0
++static void deinit(void)
++{
++ exitRate();
++ exitDest();
++ exitHoliday();
++}
++#endif
++
++/* calc a day/time W | E | H */
++static void get_day(char d)
++{
++ struct tm *tm;
++ bitfield mask;
++ int what = 0;
++
++ tm = localtime(&start); /* now */
++ switch (d) {
++ case 'W': /* we need a normal weekday, so we take
++ today and inc. day if today is
++ holiday */
++ what = WORKDAY;
++ if (!h_param)
++ hour = 10;
++ break;
++ case 'N':
++ what = WORKDAY;
++ if (!h_param)
++ hour = 23;
++ break;
++ case 'E':
++ what = SUNDAY;
++ if (!h_param)
++ hour = 10;
++ break;
++ }
++ mask = 1 << what;
++ while (isDay(tm, mask, 0) != what) {
++ tm->tm_mday++;
++ }
++ min = sec = 0;
++ day = tm->tm_mday;
++ month = tm->tm_mon + 1;
++ year = tm->tm_year + 1900;
++}
++
++static void post_init()
++{
++
++ clearNum(&srcnum);
++ if (fromarea) {
++ Strncpy(srcnum.area, fromarea, TN_MAX_AREA_LEN);
++ free(fromarea);
++ fromarea = 0;
++ }
++ initNum(&srcnum);
++
++ if (wanted_day)
++ get_day(wanted_day);
++} /* post_init */
++
++static int opts(int argc, char *argv[])
++{
++ register int c;
++ register char *p;
++ int x;
++
++ h_param = 0;
++
++ optind = 0; /* make it repeatable */
++ need_dest = 1;
++ while ((c = getopt(argc, argv, options)) != EOF) {
++ switch (c) {
++ case 'a': /* all rates old/newer */
++ all++;
++ break;
++ case 'b':
++ best = strtol(optarg, NIL, 0);
++ break;
++
++/* case 'c': country */
++ break;
++
++ case 'd':
++ for (p = optarg; *p && isspace(*p); p++) ;
++ if (isdigit(*p)) {
++ wanted_day = '\0';
++ day = atoi(optarg);
++ if ((p = strchr(optarg, '.'))) {
++ month = atoi(p + 1);
++ if ((p = strchr(p + 1, '.'))) {
++ year = atoi(p + 1);
++ if (year < 50)
++ year += 2000;
++ else if (year < 100)
++ year += 1900;
++ }
++ }
++ } /* isdigit */
++ else {
++ wanted_day = *p;
++ }
++ break;
++
++ case 'f':
++ if (optarg) { /* from */
++ for (p = optarg; (isspace(*p) || *p == '0') && *p; p++) ;
++ fromarea = strdup(p);
++ }
++ break;
++
++ case 'h':
++ hour = atoi(optarg);
++ h_param++;
++ sec = 0;
++ if ((p = strchr(optarg + 1, ':'))) {
++ min = atoi(p + 1);
++ if ((p = strchr(p + 1, ':')))
++ sec = atoi(p + 1);
++ }
++ else
++ min = 0;
++ break;
++
++ case 'l':
++ duration = strtol(optarg, NIL, 0); /* l wie lt */
++ break;
++
++ case 'o': /* booked only */
++ booked++;
++ break;
++
++ case 's': /* service */
++ service++;
++ break;
++
++ case 't':
++ x = strtol(optarg, NIL, 0);
++ if (x > 0)
++ takt = x;
++ break;
++
++ case 'x': /* eXclude Poviders */
++ {
++ char *arg = strdup(optarg);
++
++ p = strtok(arg, ",");
++ while (p) {
++ if (*p == 'B') { /* Business Provider */
++ xbusiness = 1;
++ p = strtok(0, ",");
++ continue;
++ }
++ xproviders = realloc(xproviders, (nx_providers + 1) * sizeof(char *));
++
++ xproviders[nx_providers] = strdup(p);
++ p = strtok(0, ",");
++ nx_providers++;
++ }
++ free(arg);
++ }
++ break;
++
++ case 'p': /* Providers ... */
++ {
++ char *arg = strdup(optarg);
++
++ p = strtok(arg, ",");
++ while (p) {
++ if (*p == 'B') { /* Business Provider */
++ business = 1;
++ p = strtok(0, ",");
++ continue;
++ }
++ providers = realloc(providers, (n_providers + 1) * sizeof(char *));
++
++ providers[n_providers] = strdup(p);
++ p = strtok(0, ",");
++ n_providers++;
++ }
++ free(arg);
++ }
++ break;
++
++ case 'v':
++ verbose++;
++ if (optarg && (x = atoi(optarg)))
++ verbose = x;
++ break;
++/* Uppercase options are for output format */
++
++ case 'C':
++ is_client = 1;
++ break;
++
++ case 'D':
++ is_daemon = 1;
++ need_dest = 0;
++ if (optarg) {
++ x = atoi(optarg);
++ is_daemon = x;
++ if (we_are_daemon && x == 3) {
++ kill(getppid(), SIGTERM);
++ exit(EXIT_SUCCESS);
++ }
++ }
++ break;
++
++ case 'G':
++ explain = atoi(optarg);
++ break;
++ case 'H':
++ header++;
++ break;
++ case 'L':
++ list++;
++ explain = 9;
++ break;
++ case 'N':
++ explain = 55;
++ break;
++ case 'P':
++ pid_dir = strdup(optarg);
++ break;
++ case 'O':
++ free(socket_file);
++ socket_file = strdup(optarg);
++ break;
++ case 'S':
++ sortby = *optarg;
++ break;
++ case 'T':
++ table++;
++ break;
++/* Fixme: check/warn illegal kombinations of options */
++ case 'U':
++ usestat++;
++ break;
++
++ case 'V':
++ print_version(myshortname);
++ exit(0);
++
++ case 'X':
++ if (explain == 0) {
++ explain++;
++ if (optarg && isdigit(*optarg) && (x = atoi(optarg))) {
++ explain = x;
++ if (x == 50 || x == 51 || x == 52)
++ need_dest = 0;
++ }
++ else if (optarg) {
++ comment = strdup(optarg);
++ explain = 8;
++ need_dest = 0;
++ }
++ break;
++ }
++ /* fallthrough */
++ case '?':
++ print_msg(PRT_A, usage, myshortname, myshortname, options);
++ break;
++
++ case 'Z':
++ lcr++;
++ break;
++ } /* switch */
++ } /* while */
++ if (is_client && is_daemon != 3 && is_daemon) {
++ is_daemon = 0;
++ print_msg(PRT_V, "Conflicting options, -D disabled\n");
++ }
++ if (list && table) {
++ table = 0;
++ print_msg(PRT_V, "Conflicting options, -T disabled\n");
++ }
++ if (usestat && !table)
++ print_msg(PRT_V, "Conflicting options, -U ignored\n");
++ if ((list || table) && explain >= 10) {
++ list = table = 0;
++ print_msg(PRT_V, "Conflicting options, -T, -L disabled\n");
++ }
++ if (best < 1) {
++ best = MAXPROVIDER;
++ print_msg(PRT_V, "Illegal options, -b ignored\n");
++ }
++ if ((explain == 50 || explain == 51 || explain == 52) && header) {
++ print_msg(PRT_V, "Conflicting options, -H ignored\n");
++ }
++ if (explain >= 10 && service) {
++ print_msg(PRT_V, "Conflicting options, -s ignored\n");
++ service = 0;
++ }
++ if (argc > optind)
++ return (optind);
++ else
++ return (0);
++} /* opts */
++
++
++static int (*compare_func) (const void *s1, const void *s2);
++static int compare(const void *s1, const void *s2)
++{
++ return (((SORT *) s1)->rate > ((SORT *) s2)->rate);
++} /* compare */
++static int compare_vbn(const void *s1, const void *s2)
++{
++ return (((SORT *) s1)->prefix > ((SORT *) s2)->prefix);
++}
++static int compare_name(const void *s1, const void *s2)
++{
++ return strcasecmp(((SORT *) s1)->name, ((SORT *) s2)->name);
++}
++
++static int compare2(const void *s1, const void *s2)
++{
++ return (((SORT2 *) s1)->weight < ((SORT2 *) s2)->weight);
++} /* compare2 */
++
++char *short_explainRate(RATE * Rate)
++{
++
++ static char buffer[BUFSIZ];
++ char *p = buffer;
++
++ if (service && Rate->dst[1] && *Rate->dst[1])
++ p += sprintf(p, "%s, ", Rate->dst[1]);
++
++ if (Rate->Zone && *Rate->Zone)
++ p += sprintf(p, "%s", Rate->Zone);
++ else
++ p += sprintf(p, "Zone %d", Rate->zone);
++
++ if (!Rate->domestic && Rate->Country && *Rate->Country)
++ p += sprintf(p, " (%s)", Rate->Country);
++
++ if (Rate->Day && *Rate->Day)
++ p += sprintf(p, ", %s", Rate->Day);
++
++ if (Rate->Hour && *Rate->Hour)
++ p += sprintf(p, ", %s", Rate->Hour);
++
++ return buffer;
++}
++
++static char *printrate(RATE * Rate)
++{
++ static char message[BUFSIZ];
++
++ if (Rate->Basic > 0)
++ sprintf(message, "%s + %s/%.1fs = %s + %s/Min (%s)",
++ printRate(Rate->Basic),
++ printRate(Rate->Price),
++ Rate->Duration,
++ printRate(Rate->Basic),
++ printRate(60 * Rate->Price / Rate->Duration),
++ short_explainRate(Rate));
++ else
++ sprintf(message, "%s/%.1fs = %s/Min (%s)",
++ printRate(Rate->Price),
++ Rate->Duration,
++ printRate(60 * Rate->Price / Rate->Duration),
++ short_explainRate(Rate));
++
++ return (message);
++} /* printrate */
++
++
++static void buildtime()
++{
++ auto struct tm tm;
++
++ tm.tm_sec = sec;
++ tm.tm_min = min;
++ tm.tm_hour = hour;
++ tm.tm_mday = day;
++ tm.tm_mon = month - 1;
++ tm.tm_year = year - 1900; /* ja, ja, ich weiá ;-) */
++ tm.tm_isdst = -1;
++
++ start = mktime(&tm);
++} /* buildtime */
++
++
++static void splittime()
++{
++ auto struct tm *tm;
++
++ tm = localtime(&start);
++ sec = tm->tm_sec;
++ min = tm->tm_min;
++ hour = tm->tm_hour;
++ day = tm->tm_mday;
++ month = tm->tm_mon + 1;
++ year = tm->tm_year + 1900;
++} /* splittime */
++
++static char *Provider(int prefix)
++{
++ register char *p, *p1;
++ register int l;
++ static char s[BUFSIZ];
++ char prov[TN_MAX_PROVIDER_LEN];
++
++ if (prefix == UNKNOWN)
++ return ("?");
++
++ p = getProvider(prefix);
++
++ l = max(WIDTH, strlen(p)) - strlen(p);
++
++ p1 = prefix2provider_variant(prefix, prov);
++
++ l += (8 - strlen(p1));
++
++ sprintf(s, "%s:%s%*s", p1, p, l, "");
++
++ return (s);
++} /* Provider */
++
++static char *takt_str(RATE * Rate)
++{
++ static char s[BUFSIZ];
++
++ if (floor(Rate->Rhythm[0]) == Rate->Rhythm[0])
++ sprintf(s, "%.0f/", Rate->Rhythm[0]);
++ else
++ sprintf(s, "%.3f/", Rate->Rhythm[0]);
++ if (floor(Rate->Rhythm[1]) == Rate->Rhythm[1])
++ sprintf(s + strlen(s), "%.0f", Rate->Rhythm[1]);
++ else
++ sprintf(s + strlen(s), "%.3f", Rate->Rhythm[1]);
++ return s;
++}
++
++static inline char *P_EMPTY(char *s)
++{
++ char *p = s;
++
++ return p ? p : "";
++}
++
++#define DEL ';'
++static int compute(char *num)
++{
++ register int i, n = 0;
++ register int low = 0, high = MAXPROVIDER - 1;
++ auto RATE Rate;
++ auto char s[BUFSIZ];
++ struct tm *tm;
++ char prov[TN_MAX_PROVIDER_LEN];
++ int first = 1;
++ static char BUSINESS[] = "Business"; /* in C:GT:Tag */
++
++ if (destnum.nprovider != UNKNOWN) {
++ low = high = destnum.nprovider;
++ } /* if */
++ compare_func = compare;
++ switch (sortby) {
++ case 'v':
++ compare_func = compare_vbn;
++ break;
++ case 'n':
++ compare_func = compare_name;
++ break;
++ }
++
++ buildtime();
++ if (explain == 98 || explain == 97) { /* Minutenpreis fuer
++ diese Woche */
++ tm = localtime(&start);
++ tm->tm_hour = 0;
++ tm->tm_min = 1;
++ tm->tm_sec = 0;
++ start = mktime(tm);
++ if (explain == 98) {
++ while (tm->tm_wday) { /* find last monday */
++ start -= (60 * 60 * 24);
++ tm = localtime(&start);
++ } /* while */
++ start += (60 * 60 * 24);
++ }
++ }
++ if (service) {
++ num = getServiceNum(num);
++ if (!num || !*num) {
++ return 0;
++ }
++ }
++ do {
++ for (i = low; i <= high; i++) {
++ int found, p;
++ char *t;
++
++ if (ignore[i]) /* Fixme: */
++ continue;
++ if (booked && !isProviderBooked(i))
++ continue;
++ if (!all && !isProviderValid(i, start))
++ continue;
++ t = getProvider(i);
++ if (!t || t[strlen(t) - 1] == '?') /* UNKNOWN Provider */
++ continue;
++
++ t = getComment(i, "GT"); /* get Geb. Text comment */
++ if (business) { /* only business wanted */
++ if (t == 0)
++ continue;
++ else if (strstr(t, BUSINESS) == 0)
++ continue;
++ }
++ if (xbusiness) { /* no business wanted */
++ if (t && strstr(t, BUSINESS) > 0)
++ continue;
++ }
++ found = 0;
++ if (n_providers) {
++ for (p = 0; p < n_providers; p++)
++ if (pnum2prefix_variant(providers[p], start) == i) {
++ found = 1;
++ break;
++ }
++ if (!found)
++ continue;
++ }
++ if (nx_providers) {
++ for (p = 0; p < nx_providers; p++)
++ if (pnum2prefix_variant(xproviders[p], start) == i) {
++ found = 1;
++ break;
++ }
++ if (found)
++ continue;
++ }
++ clearRate(&Rate);
++ Rate.src[0] = srcnum.country;
++ Rate.src[1] = srcnum.area;
++ Rate.src[2] = "";
++
++ destnum.nprovider = i;
++ Strncpy(destnum.provider, getProvider(i), TN_MAX_PROVIDER_LEN);
++ if (normalizeNumber(num, &destnum, TN_ALL) == UNKNOWN) {
++ continue;
++ }
++
++ Rate.dst[0] = destnum.country;
++ Rate.dst[1] = destnum.area;
++ Rate.dst[2] = destnum.msn;
++ /* Rate.Service = "Internet by call"; */
++
++ Rate.prefix = i;
++
++ Rate.start = start;
++ Rate.now = start + duration - 1;
++ if (explain == 99) {
++ int j;
++ double oldCharge = -1.0;
++
++ if (first && header)
++ print_header();
++ first = 0;
++ printf("@ %s\n", prefix2provider_variant(Rate.prefix, prov));
++ Rate.now = start + 1;
++ for (j = 1; j < duration; j++) {
++ if (!getRate(&Rate, NULL) && (Rate.Price != 99.99)) {
++ if (Rate.Charge != oldCharge || j == duration - 1) {
++ printf("%d %.4f\n", j, Rate.Charge);
++ oldCharge = Rate.Charge;
++ }
++ }
++ else
++ break;
++ Rate.now++;
++ }
++ if (Rate.Duration <= takt)
++ printf("@----- %s %s\n", currency, Rate.Provider);
++ }
++ if (explain == 98 || explain == 97) { /* Minutenpreis fuer
++ diese Woche/Tag */
++ int j;
++
++ if (first && header)
++ print_header();
++ first = 0;
++ printf("@ %s\n", prefix2provider_variant(Rate.prefix, prov));
++ for (j = 0; j < (explain == 98 ? 7 * 24 : 24); j++) {
++ if (!getRate(&Rate, NULL) && (Rate.Price != 99.99)) {
++ printf("%d %.4f\n", j, Rate.Charge);
++ }
++ else
++ break;
++ Rate.now += 3600;
++ Rate.start += 3600;
++ }
++ if (Rate.Duration <= takt)
++ printf("@----- %s %s\n", currency, Rate.Provider);
++ }
++ else if (explain == 50 || explain == 51) {
++ int fi = 1;
++
++ while (getZoneRate(&Rate, explain - 50, fi) == 0) {
++ double cpm = Rate.Duration > 0 ? 60 * Rate.Price / Rate.Duration : 99.99;
++
++ if (Rate.Price == 0)
++ cpm = Rate.Basic;
++
++ fi = 0;
++ if (Rate.Price != 99.99)
++ printf("%s%c%s%c%s%c%.2f%c%.2f%c%s\n", prefix2provider(Rate.prefix, prov), DEL,
++ Rate.Provider, DEL, currency, DEL, Rate.Charge, DEL, cpm, DEL,
++ P_EMPTY(Rate.Country));
++ free(Rate.Country);
++ }
++ }
++ else {
++ /* kludge to suppress "impossible" Rates */
++ char **message, *msg;
++ if(verbose)
++ message = &msg;
++ else
++ message = NULL;
++ if (!getRate(&Rate, message) && (Rate.Price != 99.99)) {
++ if (!(Rate.Duration <= takt))
++ continue;
++ sort[n].prefix = Rate.prefix;
++ sort[n].rate = Rate.Charge;
++ sort[n].name = Rate.Provider;
++ switch (explain) {
++ case 1:
++ if (service)
++ sprintf(s, " (%s, %s)", P_EMPTY(Rate.dst[1]), Rate.Zone);
++ else
++ sprintf(s, " (%s)", Rate.Zone);
++ sort[n].explain = strdup(s);
++ break;
++ case 2:
++ sprintf(s, " (%s)", printrate(&Rate));
++ sort[n].explain = strdup(s);
++ break;
++ case 8:
++ sort[n].explain = strdup(P_EMPTY(getComment(i, comment)));
++ break;
++ case 9: /* used by list */
++ {
++ double cpm = Rate.Duration > 0 ? 60 * Rate.Price / Rate.Duration : 99.99;
++
++ if (Rate.Price == 0)
++ cpm = Rate.Basic;
++
++ sprintf(s, "%s%c"
++ "%s%c%s%c%s%c%s%c"
++ "%s%c"
++ "%.3f%c%.4f%c%.4f%c%.2f%c%.3f%c"
++ "%s%c%.2f",
++ prefix2provider_variant(Rate.prefix, prov), DEL,
++ Rate.Provider, DEL, P_EMPTY(Rate.Zone), DEL, P_EMPTY(Rate.Day), DEL, P_EMPTY(Rate.Hour), DEL,
++ currency, DEL, /* Fixme: global or per
++ Provider?? wg. EURO */
++ Rate.Charge, DEL, Rate.Basic, DEL, Rate.Price, DEL, Rate.Duration, DEL, cpm, DEL,
++ takt_str(&Rate), DEL, Rate.Sales);
++ sort[n].explain = strdup(s);
++ }
++ break;
++ default:
++ sort[n].explain = strdup("");
++ break;
++ }
++
++ n++;
++ } /* if */
++ else if(verbose && *msg)
++ print_msg(PRT_V, "%s\n", msg);
++
++ } /* else 99 */
++ } /* for i */
++ if (service)
++ num = getServiceNum(0); /* get next service num */
++ else
++ num = 0;
++ } while (num && *num);
++ if (explain < 10) {
++ qsort((void *) sort, n, sizeof(SORT), compare_func);
++ if (lcr && n) {
++ RATE Cheap;
++ int res = getLeastCost(&Rate, &Cheap, booked, -1);
++
++ if (res != UNKNOWN) {
++ sort[n].prefix = Cheap.prefix;
++ sort[n].rate = Cheap.Charge;
++ sort[n].name = Cheap.Provider;
++ sprintf(s, "(Cheapest: %s %s %s %s)", Cheap.dst[0], Cheap.dst[1], Cheap.dst[2], P_EMPTY(Cheap.Zone));
++ sort[n].explain = strdup(s);
++ n++;
++ } /* res */
++ } /* lcr */
++ } /* explain */
++ return (n);
++} /* compute */
++
++static void print_header(void)
++{
++ printf("Eine %d Sekunden lange Verbindung von %s nach %s kostet am %s\n",
++ duration, formatNumber("%F", &srcnum), formatNumber("%F", &destnum),
++ ctime(&start));
++}
++
++static void printList(int n)
++{
++ int i;
++
++ if (header)
++ print_header();
++ if (n > best)
++ n = best;
++
++ for (i = 0; i < n; i++)
++ printf("%s\n", sort[i].explain);
++}
++
++static void result(int n)
++{
++
++ register int i;
++
++ if (header)
++ print_header();
++
++ if (n > best)
++ n = best;
++ for (i = 0; i < n; i++)
++ printf("%s %s %8.3f %s\n",
++ Provider(sort[i].prefix), currency, sort[i].rate, sort[i].explain);
++} /* result */
++
++
++static void purge(int n)
++{
++ register int i;
++
++ for (i = 0; i < n; i++)
++ if (sort[i].explain)
++ free(sort[i].explain);
++} /* purge */
++
++/*
++ Werktag
++ Wochenende
++ Ortszone
++ Regionalzone
++ Fernzone
++ Handy
++ Internet
++ 0..23 Uhr
++ */
++
++#define STARTHOUR 8
++
++static void printTable(char *num)
++{
++ register int n, d, i, h, lasthour;
++ auto struct tm *tm;
++ auto SORT last[_MAXLAST];
++ auto int used[MAXPROVIDER];
++ auto int hours[MAXPROVIDER];
++ auto int weight[MAXPROVIDER];
++ auto int useds = 0, maxhour;
++ auto SORT2 wsort[MAXPROVIDER];
++ static int firsttime = 1;
++ int first;
++ int prefix;
++
++ memset(used, 0, sizeof(used));
++ memset(hours, 0, sizeof(hours));
++ memset(weight, 0, sizeof(weight));
++
++ for (d = 0; d < 3; d++) { /* Werktag, Samstag, Sonntag */
++ last[0].prefix = UNKNOWN;
++ lasthour = UNKNOWN;
++
++ buildtime();
++ tm = localtime(&start);
++
++ if (!d) { /* first time */
++ while (tm->tm_wday != 5) { /* find next Friday */
++ start += (60 * 60 * 24);
++ tm = localtime(&start);
++ } /* while */
++ }
++ else /* erst Samstag, dann */
++ start += (60 * 60 * 24); /* Sonntag */
++
++ splittime();
++ buildtime();
++
++ hour = STARTHOUR;
++ min = 0;
++
++ first = 1;
++
++ while (1) {
++ destnum.nprovider = UNKNOWN;
++ if (provider2prefix(num, &prefix)) /* set provider if it is in number */
++ normalizeNumber(num, &destnum, TN_PROVIDER);
++ n = compute(num);
++
++ if (header && first && d == 0 && firsttime)
++ print_header();
++
++ if (header && first) {
++ switch (d) {
++ case 0 : printf("\nWerktag:\n"); break;
++ case 1 : printf("\nSamstag:\n"); break;
++ case 2 : printf("\nSonntag:\n"); break;
++ } /* switch */
++
++ first = 0;
++ } /* if */
++
++ if (last[0].prefix == UNKNOWN) {
++ for (i = 0; i < min(n, MAXLAST); i++) {
++ if (sort[i].prefix) {
++ last[i].prefix = sort[i].prefix;
++ last[i].rate = sort[i].rate;
++ last[i].explain = strdup(sort[i].explain);
++ } /* if */
++ } /* for */
++ } /* if */
++
++ if (lasthour == UNKNOWN)
++ lasthour = hour;
++
++ if (sort[0].prefix != last[0].prefix) {
++ for (i = 0; i < min(n, MAXLAST); i++) {
++
++ if (!i)
++ printf(" %02d:00 .. %02d:59 %s = %s %s%s\n",
++ lasthour, hour - 1, Provider(last[i].prefix),
++ currency,
++ double2str(last[i].rate, 5, 3, DEB),
++ last[i].explain);
++ else
++ printf(" %s = %s %s%s\n",
++ Provider(last[i].prefix),
++ currency,
++ double2str(last[i].rate, 5, 3, DEB),
++ last[i].explain);
++ } /* for */
++
++ used[last[0].prefix]++;
++
++ if (lasthour >= hour)
++ h = ((24 - lasthour) + hour);
++ else
++ h = hour - lasthour;
++
++ hours[last[0].prefix] += h;
++
++ if ((lasthour > 8) && (lasthour < 21))
++ h *= 2;
++
++ weight[last[0].prefix] += h * (d ? 1 : 5);
++
++ for (i = 0; i < min(n, MAXLAST); i++) {
++ last[i].prefix = sort[i].prefix;
++ last[i].rate = sort[i].rate;
++ last[i].explain = strdup(sort[i].explain);
++ } /* for */
++
++ lasthour = hour;
++ } /* if */
++
++ purge(n);
++
++ hour++;
++
++ if (hour == 24)
++ hour = 0;
++ else if (hour == STARTHOUR)
++ break;
++ } /* while */
++
++ for (i = 0; i < min(n, MAXLAST); i++) {
++
++ if (!i) {
++ if ((lasthour == STARTHOUR) && (hour == STARTHOUR))
++ printf(" immer %s = %s %s%s\n",
++ Provider(last[i].prefix),
++ currency,
++ double2str(last[i].rate, 5, 3, DEB),
++ last[i].explain);
++ else
++ printf(" %02d:00 .. %02d:59 %s = %s %s%s\n",
++ lasthour, hour - 1, Provider(last[i].prefix),
++ currency,
++ double2str(last[i].rate, 5, 3, DEB),
++ last[i].explain);
++ }
++ else
++ printf(" %s = %s %s%s\n",
++ Provider(last[i].prefix),
++ currency,
++ double2str(last[i].rate, 5, 3, DEB),
++ last[i].explain);
++ } /* for */
++
++ used[last[0].prefix]++;
++
++ if (lasthour >= hour)
++ h = ((24 - lasthour) + hour);
++ else
++ h = hour - lasthour;
++
++ hours[last[0].prefix] += h;
++
++ if ((lasthour > 8) && (lasthour < 21))
++ h *= 2;
++
++ weight[last[0].prefix] += h * (d ? 1 : 5);
++
++ } /* for */
++
++ if (usestat) {
++ printf("\nProvider(s) used:\n");
++
++ maxhour = 9999999;
++ useds = 0;
++
++ for (i = 0; i < MAXPROVIDER; i++)
++ if (used[i]) {
++ printf("%s %d times, %d hours, weight = %d\n",
++ Provider(i), used[i], hours[i], weight[i]);
++
++ wsort[useds].weight = weight[i];
++ wsort[useds].index = i;
++
++ useds++;
++
++ if (hours[i] < maxhour)
++ maxhour = hours[i];
++ } /* if */
++
++ if ((best < MAXPROVIDER) && (best < useds)) {
++ printf("Retrying with only %d provider(s), eliminating %d provider(s)\n", best, useds - best);
++
++ qsort((void *) wsort, useds, sizeof(SORT2), compare2);
++
++ for (i = 0; i < useds; i++) {
++ printf("%s %d times, %d hours, weight = %d\n",
++ Provider(wsort[i].index), used[wsort[i].index], hours[wsort[i].index], weight[wsort[i].index]);
++
++ if (i == best - 1)
++ printf("\n");
++
++ if (i >= best - 1)
++ ignore[wsort[i].index]++;
++ } /* for */
++
++ if (firsttime)
++ printTable(num);
++
++ firsttime = 0;
++
++ } /* if */
++ } /* if */
++} /* printTable */
++
++
++static void clean_up()
++{
++ if (providers)
++ free(providers);
++ providers = 0;
++ fromarea = 0;
++ table = list = header = explain = 0;
++ usestat = 0;
++ duration = LCR_DURATION;
++ wanted_day = '\0';
++ takt = 99999;
++ if (comment)
++ free(comment);
++ comment = 0;
++ sortby = 0;
++ need_dest = 1;
++}
++
++static char * sub_sp(char *p)
++{
++ char *o = p;
++ int allupper=1;
++ for (; *p; p++)
++ if(!isupper(*p) && *p != '_' && !isdigit(*p)) { /* e.g. _DEMD1 */
++ allupper = 0;
++ break;
++ }
++ if (!allupper)
++ for (p = o; *p; p++)
++ if(*p == '_')
++ *p = ' ';
++ return o;
++}
++static void doit(int i, int argc, char *argv[])
++{
++ int n;
++ int prefix;
++ char *num;
++
++ post_init();
++ memset(ignore, 0, sizeof(ignore));
++ if (!need_dest && i == 0) {
++ i = 0;
++ argc = 1;
++ argv[0] = "2345";
++ }
++ while (i < argc) {
++ num = sub_sp(argv[i]);
++ if (explain == 55) {
++ if (n_providers) {
++ destnum.nprovider = pnum2prefix_variant(providers[0], 0);
++ Strncpy(destnum.provider, getProvider(destnum.nprovider), TN_MAX_PROVIDER_LEN);
++ normalizeNumber(num, &destnum, TN_NO_PROVIDER);
++ }
++ else
++ normalizeNumber(num, &destnum, TN_ALL);
++ printf("%s => %s \n", num, formatNumber("%l - %p", &destnum));
++ i++;
++ continue;
++ }
++ else if (explain == 52) { // enum Servce names
++
++ int first = 1;
++ char *p;
++
++ do {
++ p = getServiceNames(first);
++ if (p)
++ printf("%s\n", p);
++ first = 0;
++ }
++ while (p);
++ return;
++ }
++ destnum.nprovider = UNKNOWN;
++ if (provider2prefix(num, &prefix)) /* set provider if it is in
++ number */
++ normalizeNumber(num, &destnum, TN_PROVIDER);
++ if (table)
++ printTable(num);
++ else {
++ n = compute(num);
++ if (list)
++ printList(n);
++ else if (explain < 10)
++ result(n);
++ purge(n);
++ }
++ i++;
++ } /* while */
++ clean_up();
++}
++
++static void err(char *s)
++{
++ print_msg(PRT_A, "%s - '%s'\n", s, strerror(errno));
++ if (is_daemon == 2)
++ kill(getppid(), SIGTERM);
++ exit(2);
++}
++
++static int handle_client(int fd)
++{
++ char buffer[BUFSIZ];
++ int argc, n, i;
++ char **argv;
++ char *p;
++
++ if ((n = read(fd, buffer, BUFSIZ)) < 0)
++ err("Read");
++ if (n) {
++ argv = calloc(sizeof(char *), 20);
++
++ buffer[n] = '\0';
++ if (verbose)
++ fprintf(stderr, "got '%s'\n", buffer);
++ argc = 0;
++ argv[argc++] = strdup(myname);
++ p = strtok(buffer, "\t\n ");
++ while (p) {
++ argv[argc++] = strdup(p);
++ p = strtok(0, "\t\n ");
++ if (argc >= 20)
++ break;
++ }
++ time(&start); /* set time of call */
++ splittime(); /* date time my be overridden by opts */
++ we_are_daemon = 1;
++ if ((i = opts(argc, argv)) || need_dest == 0) {
++ if (shutdown(fd, 0) < 0) /* no read any more */
++ err("shutdown");
++ if (dup2(fd, STDOUT_FILENO) < 0) /* stdout to sock */
++ err("dup");
++ doit(i, argc, argv);
++ fflush(stdout);
++ fclose(stdout);
++ }
++ for (i = 0; i < argc; i++)
++ free(argv[i]);
++ free(argv);
++ }
++ return n == 0 ? -1 : 0;
++}
++
++void catch_sig(int sig)
++{
++ print_msg(PRT_A, "Signal %d\n", sig);
++ unlink(socket_file);
++ if (pid_dir)
++ unlink(pid_file);
++ err("Sig");
++}
++
++static void del_sock(void)
++{
++ if (getppid() > 0) {
++ unlink(socket_file);
++ if (pid_dir)
++ unlink(pid_file);
++ }
++}
++
++static volatile sig_atomic_t stopped = 0;
++static volatile sig_atomic_t reinit = 0;
++
++static void catch_term(int sig)
++{
++ stopped = 1;
++}
++
++static void catch_hup(int sig)
++{
++ print_msg(PRT_A, "Signal %d restarting %s\n", sig, myname);
++ del_sock();
++ execvp(myname, hup_argv);
++ print_msg(PRT_A, "- failed\n");
++}
++
++static void do_reinit(void)
++{
++ /* deinit(), init() doesn't */
++ reinit=0;
++}
++
++/* thank's to Jochen Erwied for this: */
++#ifndef TEMP_FAILURE_RETRY
++#define TEMP_FAILURE_RETRY(expression) \
++ (__extension__ \
++ ({ long int __result; \
++ do __result = (long int) (expression); \
++ while (__result == -1L && errno == EINTR); \
++ __result; })) \
++
++#endif
++
++static void setup_daemon()
++{
++ int sock;
++ struct sockaddr_un sa;
++ struct sockaddr_in client;
++ fd_set active_fd_set, read_fd_set;
++ char *sock_name = socket_file;
++ socklen_t size;
++ struct stat stat_buf;
++ int i;
++ pid_t pid;
++ char pidname[] = "isdnrate.pid";
++ FILE *fp;
++
++ if (verbose)
++ fprintf(stderr, "Setup sockets\n");
++ signal(SIGTERM, catch_term);
++ signal(SIGINT, catch_sig);
++ signal(SIGHUP, catch_hup);
++
++ if (is_daemon == 2) { /* go background */
++
++ fprintf(stderr, "Going background\n");
++ verbose = 0;
++ pid = fork();
++ if (pid < 0)
++ err("Going bg failed");
++ else if (pid > 0) {
++ exit(EXIT_SUCCESS);
++ }
++ }
++ if ((sock = socket(PF_UNIX, SOCK_STREAM, 0)) < 0)
++ err("Can't open socket");
++ sa.sun_family = AF_UNIX;
++ strcpy(sa.sun_path, sock_name);
++ size = offsetof(struct sockaddr_un, sun_path) + strlen(sa.sun_path) + 1;
++
++ if (bind(sock, (struct sockaddr *) &sa, size) < 0)
++ err("Can't bind sock");
++
++ stat(sock_name, &stat_buf);
++ chmod(sock_name, stat_buf.st_mode | S_IWOTH | S_IWGRP);
++/* should better have perm wwwrun.nogroup */
++
++ if (listen(sock, SOMAXCONN) < 0)
++ err("Can't listen");
++ if (pid_dir) {
++ pid_file = malloc(strlen(pid_dir) + strlen(pidname) + 2);
++ strcpy(pid_file, pid_dir);
++ if (pid_file[strlen(pid_file) - 1] != '/')
++ strcat(pid_file, "/");
++ strcat(pid_file, pidname);
++ if ((fp = fopen(pid_file, "w")) == 0)
++ fprintf(stderr, "Can't write %s\n", pid_file);
++ else {
++ fprintf(fp, "%d\n", getpid());
++ fclose(fp);
++ }
++ }
++ atexit(del_sock);
++ FD_ZERO(&active_fd_set);
++ FD_SET(sock, &active_fd_set);
++ while (!stopped) {
++ if (reinit)
++ do_reinit();
++ read_fd_set = active_fd_set;
++ if (TEMP_FAILURE_RETRY(select(FD_SETSIZE, &read_fd_set, 0, 0, 0)) < 0)
++ err("select");
++ for (i = 0; i < FD_SETSIZE; i++)
++ if (FD_ISSET(i, &read_fd_set)) {
++ if (i == sock) { /* request on orig */
++ int new;
++
++ size = sizeof(client);
++ if ((new = accept(sock, (struct sockaddr *) &client, &size)) < 0)
++ err("accept");
++ if (verbose)
++ fprintf(stderr, "Accepted %d\n", new);
++ FD_SET(new, &active_fd_set);
++ }
++ else { /* already connected */
++ pid_t pid;
++ int status;
++
++ if (verbose)
++ fprintf(stderr, "Handle client %d\n", i);
++ pid = fork();
++ if (pid == 0) {
++ handle_client(i);
++ _exit(EXIT_SUCCESS);
++ }
++ else if (pid < 0)
++ err("fork");
++ else {
++ if (waitpid(pid, &status, 0) != pid)
++ err("waitpid");
++ close(i);
++ FD_CLR(i, &active_fd_set);
++ }
++ } /* if i */
++ } /* if ISSET */
++ } /* while */
++ del_sock();
++ exit(EXIT_SUCCESS);
++}
++
++static int connect_2_daemon(int argc, char *argv[])
++{
++ int sock;
++ struct sockaddr_un sa;
++ char *sock_name = socket_file;
++ size_t size;
++ int i, c, len;
++ char *p, *q, buffer[BUFSIZ];
++
++ if ((sock = socket(PF_UNIX, SOCK_STREAM, 0)) < 0)
++ err("Can't open socket");
++ sa.sun_family = AF_UNIX;
++ strcpy(sa.sun_path, sock_name);
++ size = offsetof(struct sockaddr_un, sun_path) + strlen(sa.sun_path) + 1;
++
++ if (connect(sock, (struct sockaddr *) &sa, size) < 0)
++ err("Can't connect sock");
++ p = buffer;
++ optind = 0; /* reinit */
++ len = 0;
++ while ((c = getopt(argc, argv, options)) != EOF && len < BUFSIZ - 10) {
++ switch (c) {
++ case '?':
++ case 'C':
++ break;
++ case 'D':
++ if (optarg && atoi(optarg) == 3) ; /* goon, kill a running
++ daemon */
++ else
++ break;
++ default:
++ *p++ = '-';
++ *p++ = c;
++ len += 3;
++ if (optarg)
++ for (q = optarg; *q && len < BUFSIZ - 10; len++)
++ *p++ = *q++;
++ *p++ = ' ';
++ break;
++ }
++ }
++ for (i = optind; i < argc; i++) {
++ for (q = argv[i]; *q && len < BUFSIZ - 10; len++)
++ *p++ = *q++;
++ *p++ = ' ';
++ len++;
++ }
++ *--p = '\x0';
++ i = write(sock, buffer, strlen(buffer) + 1);
++ if (i < 0)
++ err("Write sock");
++ while ((i = read(sock, buffer, BUFSIZ)) > 0)
++ write(1, buffer, i);
++ close(sock);
++ return EXIT_SUCCESS;
++}
++
++
++int main(int argc, char *argv[], char *envp[])
++{
++ register int i;
++ sigset_t unblock_set;
++
++ myname = argv[0];
++ myshortname = basename(myname);
++
++ time(&start);
++ splittime();
++ socket_file = strdup(SOCKNAME);
++ /* borrowed from isdnlog.c, thanks */
++ hup_argv = argv;
++ sigemptyset(&unblock_set);
++ sigaddset(&unblock_set, SIGHUP);
++ sigprocmask(SIG_UNBLOCK, &unblock_set, NULL);
++
++ if ((i = opts(argc, argv)) || need_dest == 0) {
++ if (is_client)
++ exit(connect_2_daemon(argc, argv));
++ else
++ init();
++ if (is_daemon) {
++ clean_up();
++ setup_daemon();
++ }
++ else
++ doit(i, argc, argv);
++ }
++ else {
++ print_msg(PRT_A, usage, myshortname, myshortname, options);
++ print_msg(PRT_A, "\n");
++ print_msg(PRT_A, "\t-a \tall=show old and newer rates (default actual only)\n", MAXPROVIDER);
++ print_msg(PRT_A, "\t-b best\tshow only the first <best> provider(s) (default %d)\n", MAXPROVIDER);
++ print_msg(PRT_A, "\t-d d[.m[.y]] | {W|N|E}\tstart date of call (default now)\n");
++ print_msg(PRT_A, "\t-f areacode\tyou are calling from <areacode>\n");
++ print_msg(PRT_A, "\t-h h[:m[:s]]\tstart time of call (default now)\n");
++ print_msg(PRT_A, "\t-l duration\tduration of call in seconds (default %d seconds)\n", LCR_DURATION);
++ print_msg(PRT_A, "\t-o \t show only booked providers\n");
++ print_msg(PRT_A, "\t-p prov|B[,prov...]\t show only these providers\n");
++ print_msg(PRT_A, "\t-s \t consider 'Destination' as a service name\n");
++ print_msg(PRT_A, "\t-t takt\t\tshow providers if chargeduration<=takt\n");
++ print_msg(PRT_A, "\t-v [level]\tverbose\n");
++ print_msg(PRT_A, "\t-x prov|B[,prov...]\t exclude these providers\n");
++
++ print_msg(PRT_A, "\tOutput and run options\n");
++ print_msg(PRT_A, "\t-C\trun as client, connecting to a running daemon\n");
++ print_msg(PRT_A, "\t-CD3\tkill a running daemon\n");
++ print_msg(PRT_A, "\t-D\trun as daemon\n");
++ print_msg(PRT_A, "\t-D2\trun as daemon & go background\n");
++ print_msg(PRT_A, "\t-G which\tshow raw data\n");
++ print_msg(PRT_A, "\t-H\tshow a header\n");
++ print_msg(PRT_A, "\t-L\tshow a detailed list\n");
++ print_msg(PRT_A, "\t-O sOcket-path\twrite socket to this file (def:tmp/isdnrate)\n");
++ print_msg(PRT_A, "\t-P pid-dir\twrite own PID to pid-dir/isdnrate.pid\n");
++ print_msg(PRT_A, "\t-N\tparse the given telefon numbers\n");
++ print_msg(PRT_A, "\t-S[v|n]\tsort by v=VBN, n=Name, default=Charge\n");
++ print_msg(PRT_A, "\t-T\tshow a table of day/night week/weekend\n");
++ print_msg(PRT_A, "\t-U\tshow usage stats for table\n");
++ print_msg(PRT_A, "\t-V\tshow version info\n");
++ print_msg(PRT_A, "\t-X\texplain each rate\n");
++ print_msg(PRT_A, "\t-X2\texplain more\n");
++ print_msg(PRT_A, "\t-X comment\tprint <comment> from C:tag\n");
++ print_msg(PRT_A, "\t-Z show entry from getLeastCost\n");
++ print_msg(PRT_A, "\n\te.g.\t%s -b5 -f30 -TH -t1 Zaire\n", myshortname);
++ } /* else */
++/* deinit(); Fixme: this SIGSEGVs in exitHoliday */
++ return (0);
++} /* isdnrate */
+diff -Naur isdn4k-utils-orig//isdnlog/tools/rate.c isdn4k-utils/isdnlog/tools/rate.c
+--- isdn4k-utils-orig//isdnlog/tools/rate.c 2002-07-06 09:22:33.000000000 +1000
++++ isdn4k-utils/isdnlog/tools/rate.c 2010-12-04 20:44:03.786672226 +1000
+@@ -1773,6 +1773,7 @@
+ number=realloc(number, numbers*sizeof(int));
+ number[numbers-1]=i;
+ skip:
++ ;
+ }
+
+ while (isblank(*s)) s++;
+@@ -2344,6 +2345,7 @@
+ }
+ return UNKNOWN;
+ done:
++ ;
+ }
+ }
+ }
+diff -Naur isdn4k-utils-orig//lib/libtools.c isdn4k-utils/lib/libtools.c
+--- isdn4k-utils-orig//lib/libtools.c 1999-11-04 02:13:36.000000000 +1000
++++ isdn4k-utils/lib/libtools.c 2010-12-04 20:44:03.786672226 +1000
+@@ -711,6 +711,7 @@
+ case 'r': _mode |= R_OK;
+ break;
+ default :
++ ;
+ }
+ }
+
+diff -Naur isdn4k-utils-orig//Makefile isdn4k-utils/Makefile
+--- isdn4k-utils-orig//Makefile 2002-07-20 05:03:49.000000000 +1000
++++ isdn4k-utils/Makefile 2010-12-04 20:43:57.890005560 +1000
+@@ -132,12 +132,6 @@
+
+ install: rootperm
+ set -e; for i in `echo $(SUBDIRS)`; do $(MAKE) -C $$i install; done
+- @if [ -c $(DESTDIR)/dev/isdnctrl0 ] && ls -l $(DESTDIR)/dev/isdnctrl0 | egrep "[[:space:]]45,[[:space:]]+64[[:space:]]" > /dev/null; \
+- then \
+- /bin/echo -e '(some) ISDN devices already exist, not creating them.\nUse scripts/makedev.sh manually if necessary.'; \
+- else \
+- sh scripts/makedev.sh $(DESTDIR) ; \
+- fi
+
+ uninstall: rootperm
+ set -e; for i in `echo $(SUBDIRS)`; do $(MAKE) -C $$i uninstall; done
diff --git a/testing/less/PKGBUILD b/testing/less/PKGBUILD
new file mode 100644
index 000000000..15b855a33
--- /dev/null
+++ b/testing/less/PKGBUILD
@@ -0,0 +1,31 @@
+# $Id: PKGBUILD 141923 2011-11-03 07:35:28Z allan $
+# Maintainer: Allan McRae <allan@archlinux.org>
+# Contributor: judd <jvinet@zeroflux.org>
+
+pkgname=less
+pkgver=444
+pkgrel=2
+pkgdesc="A terminal based program for viewing text files"
+license=('GPL3')
+arch=('i686' 'x86_64')
+url="http://www.greenwoodsoftware.com/less"
+groups=('base')
+depends=('ncurses' 'pcre')
+source=(http://www.greenwoodsoftware.com/$pkgname/$pkgname-$pkgver.tar.gz{,.sig})
+md5sums=('56f9f76ffe13f70155f47f6b3c87d421'
+ 'd5fafbd94a9cfdeaad0c82143a033fe5')
+
+build() {
+ cd "${srcdir}/${pkgname}-${pkgver}"
+
+ ./configure --prefix=/usr --sysconfdir=/etc --with-regex=pcre
+ make
+}
+
+package() {
+ cd "${srcdir}/${pkgname}-${pkgver}"
+
+ make prefix="${pkgdir}"/usr install
+ install -dm755 "${pkgdir}"/bin
+ mv "${pkgdir}"/usr/bin/${pkgname} "${pkgdir}"/bin
+}
diff --git a/testing/libcap/PKGBUILD b/testing/libcap/PKGBUILD
new file mode 100644
index 000000000..fd51da547
--- /dev/null
+++ b/testing/libcap/PKGBUILD
@@ -0,0 +1,27 @@
+#$Id: PKGBUILD 141933 2011-11-03 09:57:57Z allan $
+# Maintainer: Allan McRae <allan@archlinux.org>
+# Contributor: Hugo Doria <hugo@archlinux.org>
+
+pkgname=libcap
+pkgver=2.22
+pkgrel=2
+pkgdesc="POSIX 1003.1e capabilities"
+arch=('i686' 'x86_64')
+url="http://sites.google.com/site/fullycapable/"
+license=('GPL2')
+depends=('glibc' 'attr')
+source=(http://www.kernel.org/pub/linux/libs/security/linux-privs/libcap2/${pkgname}-${pkgver}.tar.gz{,.asc})
+md5sums=('b4896816b626bea445f0b3849bdd4077'
+ '9d0983e25e5a251d098507f9561d2b27')
+
+build() {
+ cd ${srcdir}/${pkgname}-${pkgver}
+ make
+}
+
+package() {
+ cd ${srcdir}/${pkgname}-${pkgver}
+ make prefix=/usr DESTDIR=${pkgdir} LIBDIR=${pkgdir}/lib RAISE_SETFCAP=no install
+ rm ${pkgdir}/lib/*.a
+ chmod 755 ${pkgdir}/lib/libcap.so.${pkgver}
+}
diff --git a/testing/libpcap/Add-support-for-libnl-2.x-adapted-from-a-newer-versi.patch b/testing/libpcap/Add-support-for-libnl-2.x-adapted-from-a-newer-versi.patch
new file mode 100644
index 000000000..1fce472b7
--- /dev/null
+++ b/testing/libpcap/Add-support-for-libnl-2.x-adapted-from-a-newer-versi.patch
@@ -0,0 +1,344 @@
+From bc937fc4ff6715e9bee939041fa02be0755d7d58 Mon Sep 17 00:00:00 2001
+From: Guy Harris <guy@alum.mit.edu>
+Date: Sat, 13 Nov 2010 17:42:47 -0800
+Subject: [PATCH] Add support for libnl 2.x, adapted from a newer version of the iw command.
+
+---
+ config.h.in | 3 ++
+ configure | 108 +++++++++++++++++++++++++++++++++++++++++++++++++++++++---
+ configure.in | 40 ++++++++++++++++++----
+ pcap-linux.c | 58 ++++++++++++++++++++++++-------
+ 4 files changed, 184 insertions(+), 25 deletions(-)
+
+diff --git a/config.h.in b/config.h.in
+index f988e8f..3b9ce3c 100644
+--- a/config.h.in
++++ b/config.h.in
+@@ -52,6 +52,9 @@
+ /* if libnl exists */
+ #undef HAVE_LIBNL
+
++/* if libnl exists and is version 2.x */
++#undef HAVE_LIBNL_2_x
++
+ /* Define to 1 if you have the <limits.h> header file. */
+ #undef HAVE_LIMITS_H
+
+diff --git a/configure b/configure
+index c99c1ab..7338dee 100755
+--- a/configure
++++ b/configure
+@@ -7340,7 +7340,93 @@ fi
+
+
+ if test x$with_libnl != xno ; then
+- { echo "$as_me:$LINENO: checking for nl_handle_alloc in -lnl" >&5
++ #
++ # Try libnl 2.x first.
++ #
++ { echo "$as_me:$LINENO: checking for nl_socket_alloc in -lnl" >&5
++echo $ECHO_N "checking for nl_socket_alloc in -lnl... $ECHO_C" >&6; }
++if test "${ac_cv_lib_nl_nl_socket_alloc+set}" = set; then
++ echo $ECHO_N "(cached) $ECHO_C" >&6
++else
++ ac_check_lib_save_LIBS=$LIBS
++LIBS="-lnl $LIBS"
++cat >conftest.$ac_ext <<_ACEOF
++/* confdefs.h. */
++_ACEOF
++cat confdefs.h >>conftest.$ac_ext
++cat >>conftest.$ac_ext <<_ACEOF
++/* end confdefs.h. */
++
++/* Override any GCC internal prototype to avoid an error.
++ Use char because int might match the return type of a GCC
++ builtin and then its argument prototype would still apply. */
++#ifdef __cplusplus
++extern "C"
++#endif
++char nl_socket_alloc ();
++int
++main ()
++{
++return nl_socket_alloc ();
++ ;
++ return 0;
++}
++_ACEOF
++rm -f conftest.$ac_objext conftest$ac_exeext
++if { (ac_try="$ac_link"
++case "(($ac_try" in
++ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
++ *) ac_try_echo=$ac_try;;
++esac
++eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
++ (eval "$ac_link") 2>conftest.er1
++ ac_status=$?
++ grep -v '^ *+' conftest.er1 >conftest.err
++ rm -f conftest.er1
++ cat conftest.err >&5
++ echo "$as_me:$LINENO: \$? = $ac_status" >&5
++ (exit $ac_status); } && {
++ test -z "$ac_c_werror_flag" ||
++ test ! -s conftest.err
++ } && test -s conftest$ac_exeext &&
++ $as_test_x conftest$ac_exeext; then
++ ac_cv_lib_nl_nl_socket_alloc=yes
++else
++ echo "$as_me: failed program was:" >&5
++sed 's/^/| /' conftest.$ac_ext >&5
++
++ ac_cv_lib_nl_nl_socket_alloc=no
++fi
++
++rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
++ conftest$ac_exeext conftest.$ac_ext
++LIBS=$ac_check_lib_save_LIBS
++fi
++{ echo "$as_me:$LINENO: result: $ac_cv_lib_nl_nl_socket_alloc" >&5
++echo "${ECHO_T}$ac_cv_lib_nl_nl_socket_alloc" >&6; }
++if test $ac_cv_lib_nl_nl_socket_alloc = yes; then
++
++ #
++ # Yes, we have libnl 2.x.
++ #
++ LIBS="-lnl-genl -lnl $LIBS"
++
++cat >>confdefs.h <<\_ACEOF
++#define HAVE_LIBNL 1
++_ACEOF
++
++
++cat >>confdefs.h <<\_ACEOF
++#define HAVE_LIBNL_2_x 1
++_ACEOF
++
++
++else
++
++ #
++ # No, we don't; do we have libnl 1.x?
++ #
++ { echo "$as_me:$LINENO: checking for nl_handle_alloc in -lnl" >&5
+ echo $ECHO_N "checking for nl_handle_alloc in -lnl... $ECHO_C" >&6; }
+ if test "${ac_cv_lib_nl_nl_handle_alloc+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+@@ -7402,18 +7488,30 @@ fi
+ { echo "$as_me:$LINENO: result: $ac_cv_lib_nl_nl_handle_alloc" >&5
+ echo "${ECHO_T}$ac_cv_lib_nl_nl_handle_alloc" >&6; }
+ if test $ac_cv_lib_nl_nl_handle_alloc = yes; then
+- LIBS="-lnl $LIBS"
++
++ #
++ # Yes.
++ #
++ LIBS="-lnl $LIBS"
+
+ cat >>confdefs.h <<\_ACEOF
+ #define HAVE_LIBNL 1
+ _ACEOF
+
++
+ else
+- if test x$with_libnl = xyes ; then
+- { { echo "$as_me:$LINENO: error: libnl support requested but libnl not found" >&5
++
++ #
++ # No, we don't have libnl at all.
++ #
++ if test x$with_libnl = xyes ; then
++ { { echo "$as_me:$LINENO: error: libnl support requested but libnl not found" >&5
+ echo "$as_me: error: libnl support requested but libnl not found" >&2;}
+ { (exit 1); exit 1; }; }
+- fi
++ fi
++
++fi
++
+
+ fi
+
+diff --git a/configure.in b/configure.in
+index 16eadf9..ef801ed 100644
+--- a/configure.in
++++ b/configure.in
+@@ -445,13 +445,39 @@ linux)
+ with_libnl=$withval,,)
+
+ if test x$with_libnl != xno ; then
+- AC_CHECK_LIB(nl, nl_handle_alloc,
+- LIBS="-lnl $LIBS"
+- AC_DEFINE(HAVE_LIBNL,1,[if libnl exists]),
+- if test x$with_libnl = xyes ; then
+- AC_MSG_ERROR([libnl support requested but libnl not found])
+- fi
+- )
++ #
++ # Try libnl 2.x first.
++ #
++ AC_CHECK_LIB(nl, nl_socket_alloc,
++ [
++ #
++ # Yes, we have libnl 2.x.
++ #
++ LIBS="-lnl-genl -lnl $LIBS"
++ AC_DEFINE(HAVE_LIBNL,1,[if libnl exists])
++ AC_DEFINE(HAVE_LIBNL_2_x,1,[if libnl exists and is version 2.x])
++ ],
++ [
++ #
++ # No, we don't; do we have libnl 1.x?
++ #
++ AC_CHECK_LIB(nl, nl_handle_alloc,
++ [
++ #
++ # Yes.
++ #
++ LIBS="-lnl $LIBS"
++ AC_DEFINE(HAVE_LIBNL,1,[if libnl exists])
++ ],
++ [
++ #
++ # No, we don't have libnl at all.
++ #
++ if test x$with_libnl = xyes ; then
++ AC_MSG_ERROR([libnl support requested but libnl not found])
++ fi
++ ])
++ ])
+ fi
+
+ AC_LBL_TPACKET_STATS
+diff --git a/pcap-linux.c b/pcap-linux.c
+index f8b3f10..deabbc4 100644
+--- a/pcap-linux.c
++++ b/pcap-linux.c
+@@ -527,8 +527,37 @@ get_mac80211_phydev(pcap_t *handle, const char *device, char *phydev_path,
+ return 1;
+ }
+
++#ifndef HAVE_LIBNL_2_x
++/* libnl 2.x compatibility code */
++
++#define nl_sock nl_handle
++
++static inline struct nl_handle *
++nl_socket_alloc(void)
++{
++ return nl_handle_alloc();
++}
++
++static inline void
++nl_socket_free(struct nl_handle *h)
++{
++ nl_handle_destroy(h);
++}
++
++static inline int
++__genl_ctrl_alloc_cache(struct nl_handle *h, struct nl_cache **cache)
++{
++ struct nl_cache *tmp = genl_ctrl_alloc_cache(h);
++ if (!tmp)
++ return -ENOMEM;
++ *cache = tmp;
++ return 0;
++}
++#define genl_ctrl_alloc_cache __genl_ctrl_alloc_cache
++#endif /* !HAVE_LIBNL_2_x */
++
+ struct nl80211_state {
+- struct nl_handle *nl_handle;
++ struct nl_sock *nl_sock;
+ struct nl_cache *nl_cache;
+ struct genl_family *nl80211;
+ };
+@@ -536,23 +565,26 @@ struct nl80211_state {
+ static int
+ nl80211_init(pcap_t *handle, struct nl80211_state *state, const char *device)
+ {
+- state->nl_handle = nl_handle_alloc();
+- if (!state->nl_handle) {
++ int err;
++
++ state->nl_sock = nl_socket_alloc();
++ if (!state->nl_sock) {
+ snprintf(handle->errbuf, PCAP_ERRBUF_SIZE,
+ "%s: failed to allocate netlink handle", device);
+ return PCAP_ERROR;
+ }
+
+- if (genl_connect(state->nl_handle)) {
++ if (genl_connect(state->nl_sock)) {
+ snprintf(handle->errbuf, PCAP_ERRBUF_SIZE,
+ "%s: failed to connect to generic netlink", device);
+ goto out_handle_destroy;
+ }
+
+- state->nl_cache = genl_ctrl_alloc_cache(state->nl_handle);
+- if (!state->nl_cache) {
++ err = genl_ctrl_alloc_cache(state->nl_sock, &state->nl_cache);
++ if (err < 0) {
+ snprintf(handle->errbuf, PCAP_ERRBUF_SIZE,
+- "%s: failed to allocate generic netlink cache", device);
++ "%s: failed to allocate generic netlink cache: %s",
++ device, strerror(-err));
+ goto out_handle_destroy;
+ }
+
+@@ -568,7 +600,7 @@ nl80211_init(pcap_t *handle, struct nl80211_state *state, const char *device)
+ out_cache_free:
+ nl_cache_free(state->nl_cache);
+ out_handle_destroy:
+- nl_handle_destroy(state->nl_handle);
++ nl_socket_free(state->nl_sock);
+ return PCAP_ERROR;
+ }
+
+@@ -577,7 +609,7 @@ nl80211_cleanup(struct nl80211_state *state)
+ {
+ genl_family_put(state->nl80211);
+ nl_cache_free(state->nl_cache);
+- nl_handle_destroy(state->nl_handle);
++ nl_socket_free(state->nl_sock);
+ }
+
+ static int
+@@ -605,7 +637,7 @@ add_mon_if(pcap_t *handle, int sock_fd, struct nl80211_state *state,
+ NLA_PUT_STRING(msg, NL80211_ATTR_IFNAME, mondevice);
+ NLA_PUT_U32(msg, NL80211_ATTR_IFTYPE, NL80211_IFTYPE_MONITOR);
+
+- err = nl_send_auto_complete(state->nl_handle, msg);
++ err = nl_send_auto_complete(state->nl_sock, msg);
+ if (err < 0) {
+ if (err == -ENFILE) {
+ /*
+@@ -626,7 +658,7 @@ add_mon_if(pcap_t *handle, int sock_fd, struct nl80211_state *state,
+ return PCAP_ERROR;
+ }
+ }
+- err = nl_wait_for_ack(state->nl_handle);
++ err = nl_wait_for_ack(state->nl_sock);
+ if (err < 0) {
+ if (err == -ENFILE) {
+ /*
+@@ -685,7 +717,7 @@ del_mon_if(pcap_t *handle, int sock_fd, struct nl80211_state *state,
+ 0, NL80211_CMD_DEL_INTERFACE, 0);
+ NLA_PUT_U32(msg, NL80211_ATTR_IFINDEX, ifindex);
+
+- err = nl_send_auto_complete(state->nl_handle, msg);
++ err = nl_send_auto_complete(state->nl_sock, msg);
+ if (err < 0) {
+ if (err == -ENFILE) {
+ /*
+@@ -706,7 +738,7 @@ del_mon_if(pcap_t *handle, int sock_fd, struct nl80211_state *state,
+ return PCAP_ERROR;
+ }
+ }
+- err = nl_wait_for_ack(state->nl_handle);
++ err = nl_wait_for_ack(state->nl_sock);
+ if (err < 0) {
+ if (err == -ENFILE) {
+ /*
+--
+1.7.3.5
+
diff --git a/testing/libpcap/Libnl-2.x-returns-its-own-error-codes-not-errnos-han.patch b/testing/libpcap/Libnl-2.x-returns-its-own-error-codes-not-errnos-han.patch
new file mode 100644
index 000000000..219494200
--- /dev/null
+++ b/testing/libpcap/Libnl-2.x-returns-its-own-error-codes-not-errnos-han.patch
@@ -0,0 +1,159 @@
+From 9545ff8e2670db02652f9cf781aafdd6bac58ac4 Mon Sep 17 00:00:00 2001
+From: Guy Harris <guy@alum.mit.edu>
+Date: Sun, 14 Nov 2010 13:48:19 -0800
+Subject: [PATCH] Libnl 2.x returns its own error codes, not errnos; handle that.
+
+While we're at it, don't special-case ENFILE for "delete monitor device"
+operations; that's not like "add monitor device", where we want to drive
+on if a device with that name already exists.
+---
+ pcap-linux.c | 76 ++++++++++++++++++++++++++--------------------------------
+ 1 files changed, 34 insertions(+), 42 deletions(-)
+
+diff --git a/pcap-linux.c b/pcap-linux.c
+index deabbc4..5d291e9 100644
+--- a/pcap-linux.c
++++ b/pcap-linux.c
+@@ -527,7 +527,9 @@ get_mac80211_phydev(pcap_t *handle, const char *device, char *phydev_path,
+ return 1;
+ }
+
+-#ifndef HAVE_LIBNL_2_x
++#ifdef HAVE_LIBNL_2_x
++#define get_nl_errmsg nl_geterror
++#else
+ /* libnl 2.x compatibility code */
+
+ #define nl_sock nl_handle
+@@ -544,6 +546,8 @@ nl_socket_free(struct nl_handle *h)
+ nl_handle_destroy(h);
+ }
+
++#define get_nl_errmsg strerror
++
+ static inline int
+ __genl_ctrl_alloc_cache(struct nl_handle *h, struct nl_cache **cache)
+ {
+@@ -584,7 +588,7 @@ nl80211_init(pcap_t *handle, struct nl80211_state *state, const char *device)
+ if (err < 0) {
+ snprintf(handle->errbuf, PCAP_ERRBUF_SIZE,
+ "%s: failed to allocate generic netlink cache: %s",
+- device, strerror(-err));
++ device, get_nl_errmsg(-err));
+ goto out_handle_destroy;
+ }
+
+@@ -639,10 +643,17 @@ add_mon_if(pcap_t *handle, int sock_fd, struct nl80211_state *state,
+
+ err = nl_send_auto_complete(state->nl_sock, msg);
+ if (err < 0) {
++#ifdef HAVE_LIBNL_2_x
++ if (err == -NLE_FAILURE) {
++#else
+ if (err == -ENFILE) {
++#endif
+ /*
+ * Device not available; our caller should just
+- * keep trying.
++ * keep trying. (libnl 2.x maps ENFILE to
++ * NLE_FAILURE; it can also map other errors
++ * to that, but there's not much we can do
++ * about that.)
+ */
+ nlmsg_free(msg);
+ return 0;
+@@ -653,17 +664,24 @@ add_mon_if(pcap_t *handle, int sock_fd, struct nl80211_state *state,
+ */
+ snprintf(handle->errbuf, PCAP_ERRBUF_SIZE,
+ "%s: nl_send_auto_complete failed adding %s interface: %s",
+- device, mondevice, strerror(-err));
++ device, mondevice, get_nl_errmsg(-err));
+ nlmsg_free(msg);
+ return PCAP_ERROR;
+ }
+ }
+ err = nl_wait_for_ack(state->nl_sock);
+ if (err < 0) {
++#ifdef HAVE_LIBNL_2_x
++ if (err == -NLE_FAILURE) {
++#else
+ if (err == -ENFILE) {
++#endif
+ /*
+ * Device not available; our caller should just
+- * keep trying.
++ * keep trying. (libnl 2.x maps ENFILE to
++ * NLE_FAILURE; it can also map other errors
++ * to that, but there's not much we can do
++ * about that.)
+ */
+ nlmsg_free(msg);
+ return 0;
+@@ -674,7 +692,7 @@ add_mon_if(pcap_t *handle, int sock_fd, struct nl80211_state *state,
+ */
+ snprintf(handle->errbuf, PCAP_ERRBUF_SIZE,
+ "%s: nl_wait_for_ack failed adding %s interface: %s",
+- device, mondevice, strerror(-err));
++ device, mondevice, get_nl_errmsg(-err));
+ nlmsg_free(msg);
+ return PCAP_ERROR;
+ }
+@@ -719,45 +737,19 @@ del_mon_if(pcap_t *handle, int sock_fd, struct nl80211_state *state,
+
+ err = nl_send_auto_complete(state->nl_sock, msg);
+ if (err < 0) {
+- if (err == -ENFILE) {
+- /*
+- * Device not available; our caller should just
+- * keep trying.
+- */
+- nlmsg_free(msg);
+- return 0;
+- } else {
+- /*
+- * Real failure, not just "that device is not
+- * available.
+- */
+- snprintf(handle->errbuf, PCAP_ERRBUF_SIZE,
+- "%s: nl_send_auto_complete failed deleting %s interface: %s",
+- device, mondevice, strerror(-err));
+- nlmsg_free(msg);
+- return PCAP_ERROR;
+- }
++ snprintf(handle->errbuf, PCAP_ERRBUF_SIZE,
++ "%s: nl_send_auto_complete failed deleting %s interface: %s",
++ device, mondevice, get_nl_errmsg(-err));
++ nlmsg_free(msg);
++ return PCAP_ERROR;
+ }
+ err = nl_wait_for_ack(state->nl_sock);
+ if (err < 0) {
+- if (err == -ENFILE) {
+- /*
+- * Device not available; our caller should just
+- * keep trying.
+- */
+- nlmsg_free(msg);
+- return 0;
+- } else {
+- /*
+- * Real failure, not just "that device is not
+- * available.
+- */
+- snprintf(handle->errbuf, PCAP_ERRBUF_SIZE,
+- "%s: nl_wait_for_ack failed adding %s interface: %s",
+- device, mondevice, strerror(-err));
+- nlmsg_free(msg);
+- return PCAP_ERROR;
+- }
++ snprintf(handle->errbuf, PCAP_ERRBUF_SIZE,
++ "%s: nl_wait_for_ack failed adding %s interface: %s",
++ device, mondevice, get_nl_errmsg(-err));
++ nlmsg_free(msg);
++ return PCAP_ERROR;
+ }
+
+ /*
+--
+1.7.3.5
+
diff --git a/testing/libpcap/PKGBUILD b/testing/libpcap/PKGBUILD
new file mode 100644
index 000000000..ee36e3354
--- /dev/null
+++ b/testing/libpcap/PKGBUILD
@@ -0,0 +1,41 @@
+# $Id: PKGBUILD 141970 2011-11-03 18:57:47Z thomas $
+# Maintainer: Thomas Bächler <thomas@archlinux.org>
+
+pkgname=libpcap
+pkgver=1.1.1
+pkgrel=4
+pkgdesc="A system-independent interface for user-level packet capture"
+arch=('i686' 'x86_64')
+url="http://www.tcpdump.org/"
+license=('BSD')
+depends=('glibc' 'libnl' 'sh')
+makedepends=('flex')
+source=(http://www.tcpdump.org/release/libpcap-${pkgver}.tar.gz)
+ #Add-support-for-libnl-2.x-adapted-from-a-newer-versi.patch
+ #Libnl-2.x-returns-its-own-error-codes-not-errnos-han.patch)
+sha256sums=('508cca15547e55d1318498b838456a21770c450beb2dc7d7d4a96d90816e5a85')
+ #'194aa268a3397be3ba406b7102dbdbc14fc16c6e4b535d0a0fab6b04d414563a'
+ #'f1f31c3e2b064f4c9d0e643e8ed1874a65ec17f770362f8ffa3b3f9ee9dc71bb')
+build() {
+ cd ${srcdir}/${pkgname}-${pkgver}
+ #patch -p1 -i "${srcdir}"/Add-support-for-libnl-2.x-adapted-from-a-newer-versi.patch
+ #patch -p1 -i "${srcdir}"/Libnl-2.x-returns-its-own-error-codes-not-errnos-han.patch
+ ./configure --prefix=/usr --enable-ipv6
+ make
+}
+
+package() {
+ cd ${srcdir}/${pkgname}-${pkgver}
+ install -d -m755 ${pkgdir}/usr/bin
+ make DESTDIR=${pkgdir} install
+ # remove static library
+ rm -rf ${pkgdir}/usr/lib/libpcap.a
+
+ # backwards compatibility, programs often look for net/bpf.h
+ mkdir -p ${pkgdir}/usr/include/net
+ cd ${pkgdir}/usr/include/net
+ ln -s ../pcap-bpf.h bpf.h
+
+ #install the license
+ install -D -m644 ${srcdir}/$pkgname-$pkgver/LICENSE ${pkgdir}/usr/share/licenses/$pkgname/LICENSE
+}
diff --git a/testing/librpcsecgss/PKGBUILD b/testing/librpcsecgss/PKGBUILD
new file mode 100644
index 000000000..b492e3218
--- /dev/null
+++ b/testing/librpcsecgss/PKGBUILD
@@ -0,0 +1,32 @@
+# $Id: PKGBUILD 141978 2011-11-03 20:10:28Z tpowa $
+# Maintainer: Tobias Powalowski <tpowa@archlinux.org>
+# Contributor: Andrew Krawchyk <krawch_a@denison.edu>, Marco Lima <cipparello gmail com>
+
+pkgname=librpcsecgss
+pkgver=0.19
+pkgrel=7
+pkgdesc="Library for RPCSECGSS support"
+arch=('i686' 'x86_64')
+url="http://www.citi.umich.edu/projects/nfsv4/linux/"
+license=('GPL')
+depends=('glibc' 'krb5' 'libgssglue')
+makedepends=('pkg-config' 'autoconf')
+options=('!libtool')
+source=("http://www.citi.umich.edu/projects/nfsv4/linux/${pkgname}/${pkgname}-${pkgver}.tar.gz")
+md5sums=('b45ed565bdc3099023aa35830ec92997')
+
+build() {
+ cd "${srcdir}/${pkgname}-${pkgver}"
+ ./configure --prefix=/usr
+ make
+}
+
+check() {
+ cd "${srcdir}/${pkgname}-${pkgver}"
+ make check
+}
+
+package() {
+ cd "${srcdir}/${pkgname}-${pkgver}"
+ make DESTDIR="$pkgdir/" install
+}
diff --git a/testing/librpcsecgss/librpcsecgss-0.18-heimdal.patch b/testing/librpcsecgss/librpcsecgss-0.18-heimdal.patch
new file mode 100644
index 000000000..deb039123
--- /dev/null
+++ b/testing/librpcsecgss/librpcsecgss-0.18-heimdal.patch
@@ -0,0 +1,33 @@
+diff -NaurwB librpcsecgss-0.18.orig/configure.in librpcsecgss-0.18/configure.in
+--- librpcsecgss-0.18.orig/configure.in 2008-04-09 00:05:40.000000000 +0200
++++ librpcsecgss-0.18/configure.in 2008-06-12 19:05:51.000000000 +0200
+@@ -12,10 +12,15 @@
+ AC_PROG_RANLIB
+
+ # Checks for libraries.
+-PKG_CHECK_MODULES([GSSGLUE], [libgssglue >= 0.1], [],
++PKG_CHECK_MODULES([GSSGLUE], [libgssglue >= 0.1],
++ [echo GSSGLUE found; GSSAPI_IMPLEMENTATION=libgssglue],
++ [PKG_CHECK_MODULES([GSSGLUE], [heimdal-gssapi],
++ [echo HEIMDAL found; GSSAPI_IMPLEMENTATION=heimdal-gssapi],
+ [AC_MSG_ERROR([Unable to locate information required to use libgssglue.
+ If you have pkgconfig installed, you might try setting environment
+- variable PKG_CONFIG_PATH to /usr/local/lib/pkgconfig])])
++ variable PKG_CONFIG_PATH to /usr/local/lib/pkgconfig])])])
++
++AC_SUBST([GSSAPI_IMPLEMENTATION])
+
+ # Checks for header files.
+ AC_HEADER_STDC
+diff -NaurwB librpcsecgss-0.18.orig/librpcsecgss.pc.in librpcsecgss-0.18/librpcsecgss.pc.in
+--- librpcsecgss-0.18.orig/librpcsecgss.pc.in 2007-09-06 17:39:04.000000000 +0200
++++ librpcsecgss-0.18/librpcsecgss.pc.in 2008-06-12 19:06:40.000000000 +0200
+@@ -5,7 +5,7 @@
+
+ Name: librpcsecgss
+ Description: Library that implements rpcsec_gss interface.
+-Requires: libgssglue
++Requires: @GSSAPI_IMPLEMENTATION@
+ Version: @PACKAGE_VERSION@
+ Libs: -L@libdir@ -lrpcsecgss
+ Cflags: -I@includedir@/rpcsecgss
diff --git a/testing/libusb-compat/PKGBUILD b/testing/libusb-compat/PKGBUILD
new file mode 100644
index 000000000..1e8f2a3d9
--- /dev/null
+++ b/testing/libusb-compat/PKGBUILD
@@ -0,0 +1,27 @@
+# $Id: PKGBUILD 142008 2011-11-03 22:50:48Z andrea $
+# Maintainer:
+# Contributor: Tobias Powalowski <tpowa@archlinux.org>
+# Contributor: arjan <arjan@archlinux.org>
+
+pkgname=libusb-compat
+pkgver=0.1.3
+pkgrel=2
+pkgdesc="Library to enable user space application programs to communicate with USB devices"
+arch=('i686' 'x86_64')
+depends=('libusb' 'sh')
+url="http://libusb.sourceforge.net/"
+license=('LGPL')
+source=("http://downloads.sourceforge.net/${pkgname%-*}/${pkgname}-${pkgver%.*}/$pkgname-$pkgver/${pkgname}-${pkgver}.tar.bz2")
+options=('!libtool')
+md5sums=('570ac2ea085b80d1f74ddc7c6a93c0eb')
+
+build() {
+ cd "${srcdir}/${pkgname}-${pkgver}"
+ ./configure --prefix=/usr
+ make
+}
+
+package() {
+ cd "${srcdir}/${pkgname}-${pkgver}"
+ make DESTDIR=${pkgdir} install
+}
diff --git a/testing/libusb/PKGBUILD b/testing/libusb/PKGBUILD
new file mode 100644
index 000000000..f99afb302
--- /dev/null
+++ b/testing/libusb/PKGBUILD
@@ -0,0 +1,30 @@
+# $Id: PKGBUILD 141981 2011-11-03 20:12:06Z tpowa $
+# Maintainer: Jan de Groot <jgc@archlinux.org>
+pkgname=libusb
+pkgver=1.0.8
+pkgrel=2
+depends=('glibc')
+pkgdesc="Library to enable user space application programs to communicate with USB devices."
+arch=(i686 x86_64)
+url="http://libusb.sourceforge.net/"
+license=('LGPL')
+source=(http://downloads.sourceforge.net/libusb/libusb-${pkgver}.tar.bz2)
+options=(!libtool)
+replaces=(libusb1)
+md5sums=('37d34e6eaa69a4b645a19ff4ca63ceef')
+
+build() {
+ cd "${srcdir}/${pkgname}-${pkgver}"
+ ./configure --prefix=/usr
+ make
+}
+
+check() {
+ cd "${srcdir}/${pkgname}-${pkgver}"
+ make check
+}
+
+package () {
+ cd "${srcdir}/${pkgname}-${pkgver}"
+ make DESTDIR="${pkgdir}" install
+}
diff --git a/testing/linux-atm/PKGBUILD b/testing/linux-atm/PKGBUILD
new file mode 100644
index 000000000..ad76db0b5
--- /dev/null
+++ b/testing/linux-atm/PKGBUILD
@@ -0,0 +1,29 @@
+# $Id: PKGBUILD 141992 2011-11-03 20:43:33Z tpowa $
+# Maintainer: Tobias Powalowski <tpowa@archlinux.org>
+# Contributor: Surain Mallawa Arachchi <mas@crc32.net>
+
+pkgname=linux-atm
+pkgver=2.5.2
+pkgrel=1
+pkgdesc="Drivers and tools to support ATM networking under Linux."
+arch=('i686' 'x86_64')
+depends=('glibc')
+url="http://linux-atm.sourceforge.net/"
+license=(GPL)
+source=(http://downloads.sourceforge.net/sourceforge/${pkgname}/${pkgname}-${pkgver}.tar.gz
+ man-pages.patch)
+options=(!libtool !makeflags)
+md5sums=('d49499368c3cf15f73a05d9bce8824a8'
+ '181390736336cdb615ae32f1ae5acfa6')
+
+build() {
+ cd "${srcdir}/${pkgname}-${pkgver}"
+ patch -Np1 -i ../man-pages.patch
+ ./configure --prefix=/usr --sysconfdir=/etc
+ make
+}
+
+package() {
+ cd "${srcdir}/${pkgname}-${pkgver}"
+ make DESTDIR="${pkgdir}" install
+}
diff --git a/testing/linux-atm/man-pages.patch b/testing/linux-atm/man-pages.patch
new file mode 100644
index 000000000..c504cfe87
--- /dev/null
+++ b/testing/linux-atm/man-pages.patch
@@ -0,0 +1,45 @@
+diff -up linux-atm-2.5.1/src/led/zeppelin.8.fixman linux-atm-2.5.1/src/led/zeppelin.8
+--- linux-atm-2.5.1/src/led/zeppelin.8.fixman 2003-05-02 19:35:04.000000000 +0200
++++ linux-atm-2.5.1/src/led/zeppelin.8 2010-10-13 12:58:18.000000000 +0200
+@@ -99,7 +99,7 @@ Ring and ATM parts of the ELAN, so using
+ recommended. Token Ring support has received less testing than its
+ Ethernet counterpart.
+ .SH FILES
+-.IP \fI/var/run/lec[interface number].pid\fP
++\fI/var/run/lec[interface number].pid\fP
+ The file containing the process id of zeppelin.
+ .SH BUGS
+ John Bonham died 1980 and Led Zeppelin broke.
+diff -up linux-atm-2.5.1/src/mpoad/mpcd.8.fixman linux-atm-2.5.1/src/mpoad/mpcd.8
+--- linux-atm-2.5.1/src/mpoad/mpcd.8.fixman 2001-10-10 00:33:07.000000000 +0200
++++ linux-atm-2.5.1/src/mpoad/mpcd.8 2010-10-13 12:59:14.000000000 +0200
+@@ -28,7 +28,7 @@ mpcd \- ATM MPOA (Multi\-Protocol Over A
+ .B ]]
+ .SH DESCRIPTION
+ MPOA client
+-.SM(MPC) is responsible for creating and receiving
++.SM (MPC) is responsible for creating and receiving
+ internetwork layer shortcuts. Using these shortcuts MPCs forward
+ unicast internetwork layer packets effectively over ATM without need
+ for routing protocols.
+@@ -43,7 +43,7 @@ accepts shortcuts and packets arriving o
+ shortcuts is done with the help of
+ .SM MPOA
+ server
+-.SM(MPS).
++.SM (MPS).
+ .PP
+ Just as the Linux
+ .SM LAN
+diff -up linux-atm-2.5.1/src/sigd/atmsigd.conf.4.fixman linux-atm-2.5.1/src/sigd/atmsigd.conf.4
+--- linux-atm-2.5.1/src/sigd/atmsigd.conf.4.fixman 2001-10-10 00:33:07.000000000 +0200
++++ linux-atm-2.5.1/src/sigd/atmsigd.conf.4 2010-10-13 12:58:49.000000000 +0200
+@@ -125,7 +125,7 @@ a comment. The `#' character cannot be e
+ .P
+ If an option is specified in \fBatmsigd.conf\fP and on the command
+ line, the command line has priority.
+-.COMPATIBILITY
++.SH COMPATIBILITY
+ Certain options used by past versions of \fBatmsigd\fP but no longer documented
+ on the man page are still recognized and supported, but they also yield a
+ warning message. Future versions of \fBatmsigd\fP will not recognize those
diff --git a/testing/m4/PKGBUILD b/testing/m4/PKGBUILD
new file mode 100644
index 000000000..917fbdad3
--- /dev/null
+++ b/testing/m4/PKGBUILD
@@ -0,0 +1,36 @@
+# $Id: PKGBUILD 141937 2011-11-03 10:57:23Z allan $
+# Maintainer: Allan McRae <allan@archlinux.org>
+# Contributor: Andreas Radke <andyrtr@archlinux.org>
+
+pkgname=m4
+pkgver=1.4.16
+pkgrel=2
+pkgdesc="The GNU macro processor"
+arch=('i686' 'x86_64')
+url="http://www.gnu.org/software/m4"
+license=('GPL3')
+groups=('base-devel')
+depends=('glibc' 'bash')
+install=m4.install
+source=(ftp://ftp.gnu.org/gnu/m4/$pkgname-$pkgver.tar.xz{,.sig}
+ m4-1.4.16-readlink-einval.patch)
+md5sums=('7548ec061a1ba993790159764f522d0e'
+ 'eebe5c94e74e7551e2e30c5844f1b653'
+ 'cea138fa9b568d06e46269611cec8dd0')
+
+build() {
+ cd ${srcdir}/$pkgname-$pkgver
+ patch -Np1 -i $srcdir/m4-1.4.16-readlink-einval.patch
+ ./configure --prefix=/usr
+ make
+}
+
+check() {
+ cd ${srcdir}/$pkgname-$pkgver
+ make check
+}
+
+package() {
+ cd ${srcdir}/$pkgname-$pkgver
+ make prefix=${pkgdir}/usr install
+}
diff --git a/testing/m4/m4-1.4.16-readlink-einval.patch b/testing/m4/m4-1.4.16-readlink-einval.patch
new file mode 100644
index 000000000..6a987510d
--- /dev/null
+++ b/testing/m4/m4-1.4.16-readlink-einval.patch
@@ -0,0 +1,12 @@
+diff -up m4-1.4.16/tests/test-readlink.h.orig m4-1.4.16/tests/test-readlink.h
+--- m4-1.4.16/tests/test-readlink.h.orig 2011-09-19 12:44:58.745546826 +0200
++++ m4-1.4.16/tests/test-readlink.h 2011-09-19 12:46:00.079548410 +0200
+@@ -38,7 +38,7 @@ test_readlink (ssize_t (*func) (char con
+ ASSERT (errno == ENOENT);
+ errno = 0;
+ ASSERT (func ("", buf, sizeof buf) == -1);
+- ASSERT (errno == ENOENT);
++ ASSERT (errno == ENOENT || errno == EINVAL);
+ errno = 0;
+ ASSERT (func (".", buf, sizeof buf) == -1);
+ ASSERT (errno == EINVAL);
diff --git a/testing/m4/m4.install b/testing/m4/m4.install
new file mode 100644
index 000000000..be4138170
--- /dev/null
+++ b/testing/m4/m4.install
@@ -0,0 +1,20 @@
+infodir=usr/share/info
+filelist=(m4.info m4.info-1 m4.info-2)
+
+post_install() {
+ [ -x usr/bin/install-info ] || return 0
+ for file in ${filelist[@]}; do
+ install-info $infodir/$file.gz $infodir/dir 2> /dev/null
+ done
+}
+
+post_upgrade() {
+ post_install $1
+}
+
+pre_remove() {
+ [ -x usr/bin/install-info ] || return 0
+ for file in ${filelist[@]}; do
+ install-info --delete $infodir/$file.gz $infodir/dir 2> /dev/null
+ done
+}
diff --git a/testing/mlocate/PKGBUILD b/testing/mlocate/PKGBUILD
new file mode 100644
index 000000000..aa7c002f3
--- /dev/null
+++ b/testing/mlocate/PKGBUILD
@@ -0,0 +1,56 @@
+# $Id: PKGBUILD 141941 2011-11-03 11:28:39Z allan $
+# Maintainer: Allan McRae <allan@archlinux.org>
+# Contributor: lydgate
+
+pkgname=mlocate
+pkgver=0.24
+pkgrel=2
+pkgdesc="Faster merging drop-in for slocate"
+arch=('i686' 'x86_64')
+url="http://carolina.mff.cuni.cz/~trmac/blog/mlocate"
+license=('GPL')
+conflicts=('slocate')
+provides=('slocate')
+replaces=('slocate')
+depends=('glibc' 'coreutils' 'sh')
+backup=('etc/updatedb.conf'
+ 'etc/cron.daily/updatedb')
+install=mlocate.install
+source=(https://fedorahosted.org/releases/m/l/mlocate/mlocate-$pkgver.tar.xz
+ updatedb.conf
+ updatedb.cron.daily)
+md5sums=('a9c221e5bc489a2ed710c943990137bd'
+ 'c374ff223f2e07b5e602ba22359f2335'
+ 'cde5da81bebad2de556ef2e43d895e13')
+
+build() {
+ cd $srcdir/$pkgname-$pkgver
+
+ sed -i '/^groupname /s/mlocate/locate/' Makefile.in
+ ./configure --prefix=/usr --sysconfdir=/etc --localstatedir=/var/lib
+ make
+
+}
+
+check() {
+ cd $srcdir/$pkgname-$pkgver
+ make check
+}
+
+package() {
+ cd $srcdir/$pkgname-$pkgver
+
+ # Set up a default updatedb.conf and a daily cronjob
+ install -Dm644 ${srcdir}/updatedb.conf $pkgdir/etc/updatedb.conf
+ install -Dm744 ${srcdir}/updatedb.cron.daily $pkgdir/etc/cron.daily/updatedb
+
+ # Install Mlocate
+ make DESTDIR=$pkgdir install
+
+ ln -sv locate $pkgdir/usr/bin/slocate
+ chgrp -v 21 $pkgdir/usr/bin/locate
+ chmod -v 2755 $pkgdir/usr/bin/locate
+
+ install -dm755 $pkgdir/var/lib
+ install -d -m750 -g21 $pkgdir/var/lib/locate
+}
diff --git a/testing/mlocate/mlocate.install b/testing/mlocate/mlocate.install
new file mode 100644
index 000000000..c7b7f9cf7
--- /dev/null
+++ b/testing/mlocate/mlocate.install
@@ -0,0 +1,18 @@
+post_install() {
+ post_upgrade "$1" "$1"
+ echo "mlocate command is technically locate, but slocate is symlinked and still works."
+ echo "You should run updatedb as root."
+}
+
+post_upgrade() {
+ # This can be removed after {m,x}locate have both been updated
+ getent group slocate &>/dev/null && usr/sbin/groupdel slocate &>/dev/null
+ getent group mlocate &>/dev/null && usr/sbin/groupdel mlocate &>/dev/null
+
+ getent group locate &>/dev/null || usr/sbin/groupadd -g 21 locate &>/dev/null
+ chown -R root:locate var/lib/mlocate
+}
+
+pre_remove() {
+ getent group locate &>/dev/null && usr/sbin/groupdel locate &>/dev/null
+}
diff --git a/testing/mlocate/updatedb.conf b/testing/mlocate/updatedb.conf
new file mode 100644
index 000000000..722b04205
--- /dev/null
+++ b/testing/mlocate/updatedb.conf
@@ -0,0 +1,5 @@
+# directories to exclude from the slocate database:
+PRUNEPATHS="/media /mnt /tmp /var/tmp /var/cache /var/lock /var/run /var/spool"
+
+# filesystems to exclude from the slocate database:
+PRUNEFS="afs auto autofs binfmt_misc cifs coda configfs cramfs debugfs devpts devtmpfs ftpfs iso9660 mqueue ncpfs nfs nfs4 proc ramfs securityfs shfs smbfs sshfs sysfs tmpfs udf usbfs vboxsf"
diff --git a/testing/mlocate/updatedb.cron.daily b/testing/mlocate/updatedb.cron.daily
new file mode 100755
index 000000000..cac9bb063
--- /dev/null
+++ b/testing/mlocate/updatedb.cron.daily
@@ -0,0 +1,29 @@
+#!/bin/sh
+
+# nicenesses range from -20 (most favorable scheduling) to 19 (least favorable)
+NICE=19
+
+# 0 for none, 1 for real time, 2 for best-effort, 3 for idle
+IONICE_CLASS=2
+
+# 0-7 (for IONICE_CLASS 1 and 2 only), 0=highest, 7=lowest
+IONICE_PRIORITY=7
+
+UPDATEDB="/usr/bin/updatedb"
+
+if [ -x /usr/bin/nice ]; then
+ UPDATEDB="/usr/bin/nice -n ${NICE:-19} ${UPDATEDB}"
+fi
+
+if [ -x /usr/bin/ionice ]; then
+ UPDATEDB="/usr/bin/ionice -c ${IONICE_CLASS:-2} -n ${IONICE_PRIORITY:-7} ${UPDATEDB}"
+fi
+
+# Update the "locate" database
+if [ -x /usr/bin/updatedb ]; then
+ if [ -f /etc/updatedb.conf ]; then
+ ${UPDATEDB}
+ else
+ ${UPDATEDB} -f proc
+ fi
+fi
diff --git a/testing/ncurses/PKGBUILD b/testing/ncurses/PKGBUILD
new file mode 100644
index 000000000..1c2df2889
--- /dev/null
+++ b/testing/ncurses/PKGBUILD
@@ -0,0 +1,74 @@
+# $Id: PKGBUILD 141943 2011-11-03 11:43:21Z allan $
+# Maintainer: Allan McRae <allan@archlinux.org>
+# Contributor: judd <jvinet@zeroflux.org>
+
+pkgname=ncurses
+pkgver=5.9
+pkgrel=2
+pkgdesc="System V Release 4.0 curses emulation library"
+arch=('i686' 'x86_64')
+url="http://www.gnu.org/software/ncurses/"
+license=('MIT')
+depends=('glibc')
+source=(ftp://ftp.gnu.org/pub/gnu/${pkgname}/${pkgname}-${pkgver}.tar.gz{,.sig})
+md5sums=('8cb9c412e5f2d96bc6f459aa8c6282a1'
+ '014ffdbbfec6d41a9a89d6cbe6434638')
+
+build() {
+ cd ${srcdir}/
+ mkdir ncurses{,w}-build
+
+ cd ${srcdir}/ncursesw-build
+ ../${pkgname}-${pkgver}/configure --prefix=/usr --mandir=/usr/share/man \
+ --with-shared --with-normal --without-debug --without-ada \
+ --with-install-prefix=${pkgdir} --enable-widec
+ # add --enable-ext-colors with next soname bump
+ make
+
+ # libncurses.so.5 for external binary support
+ cd ${srcdir}/ncurses-build
+ [ $CARCH = "x86_64" ] && CONFIGFLAG="--with-chtype=long"
+ ../${pkgname}-${pkgver}/configure --prefix=/usr \
+ --with-shared --with-normal --without-debug --without-ada \
+ --with-install-prefix=${pkgdir} $CONFIGFLAG
+ make
+}
+
+package() {
+ cd ${srcdir}/ncursesw-build
+ make install
+
+ # move libraries needed for boot to /lib (we call tput in initscripts)
+ install -dm755 ${pkgdir}/lib
+ mv ${pkgdir}/usr/lib/libncursesw.so.5* ${pkgdir}/lib
+ ln -sf ../../lib/libncursesw.so.5 ${pkgdir}/usr/lib/libncursesw.so
+
+ # Fool packages looking to link to non-wide-character ncurses libraries
+ for lib in curses ncurses form panel menu; do
+ rm -f ${pkgdir}/usr/lib/lib${lib}.so
+ echo "INPUT(-l${lib}w)" >${pkgdir}/usr/lib/lib${lib}.so
+ ln -sf lib${lib}w.a ${pkgdir}/usr/lib/lib${lib}.a
+ done
+ ln -sf libncurses++w.a ${pkgdir}/usr/lib/libncurses++.a
+
+ # install tput to /bin
+ install -dm755 ${pkgdir}/bin/
+ mv ${pkgdir}/usr/bin/tput ${pkgdir}/bin/tput
+
+ # Some packages look for -lcurses during build
+ rm -f ${pkgdir}/usr/lib/libcursesw.so
+ echo "INPUT(-lncursesw)" >${pkgdir}/usr/lib/libcursesw.so
+ ln -sf libncurses.so ${pkgdir}/usr/lib/libcurses.so
+ ln -sf libncursesw.a ${pkgdir}/usr/lib/libcursesw.a
+ ln -sf libncurses.a ${pkgdir}/usr/lib/libcurses.a
+
+ # non-widec compatibility library
+ cd ${srcdir}/ncurses-build
+ install -Dm755 lib/libncurses.so.${pkgver} ${pkgdir}/usr/lib/libncurses.so.${pkgver}
+ ln -sf libncurses.so.${pkgver} ${pkgdir}/usr/lib/libncurses.so.5
+
+ # install license, rip it from the readme
+ cd ${srcdir}/${pkgname}-${pkgver}
+ install -dm755 ${pkgdir}/usr/share/licenses/$pkgname
+ grep -B 100 '$Id' README > ${pkgdir}/usr/share/licenses/${pkgname}/license.txt
+}
diff --git a/testing/net-tools/PKGBUILD b/testing/net-tools/PKGBUILD
new file mode 100644
index 000000000..abd59addb
--- /dev/null
+++ b/testing/net-tools/PKGBUILD
@@ -0,0 +1,43 @@
+# $Id: PKGBUILD 142002 2011-11-03 21:20:18Z ronald $
+# Maintainer: Ronald van Haren <ronald.archlinux.org>
+# Contributor: judd <jvinet@zeroflux.org>
+
+pkgname=net-tools
+pkgver=1.60.20110819cvs
+pkgrel=2
+pkgdesc="Configuration tools for Linux networking"
+arch=(i686 x86_64)
+license=('GPL2')
+url="http://www.tazenda.demon.co.uk/phil/net-tools"
+depends=('glibc')
+
+# http://www.tazenda.demon.co.uk/phil/$pkgname/$pkgname-$pkgver.tar.bz2
+# use cvs checkout instead
+source=(ftp://ftp.archlinux.org/other/net-tools/net-tools-1.60.20110819cvs.tar.bz2
+ net-tools-1.60-miiioctl.patch
+ net-tools-1.60-nameif_strncpy.patch)
+options=(!makeflags)
+install=net-tools.install
+sha1sums=('02946449191ff279f9f0f7fd7bc65ae21059a2bf'
+ '654a96bc6575efb4a2e04b49de45d448d240eb6e'
+ '7888000d8fe867e58b5b00fe2bcf6c3041d716b4')
+
+build() {
+ cd $srcdir/$pkgname-$pkgver
+# patch -Np1 -i ../net-tools-1.60-miiioctl.patch
+# patch -Np1 -i ${srcdir}/net-tools-1.60-nameif_strncpy.patch
+ yes "" | make
+}
+
+package() {
+ cd $srcdir/$pkgname-$pkgver
+ make BASEDIR=$pkgdir update
+
+ # the following is provided by yp-tools
+ rm "${pkgdir}"/bin/{nis,yp}domainname
+ rm "${pkgdir}"/usr/share/man/man1/{nis,yp}domainname.1
+
+ # hostname is provided by inetutils
+# rm "${pkgdir}"/bin/{hostname,dnsdomainname,domainname}
+# rm -rf "${pkgdir}"/usr/share/man/man1
+}
diff --git a/testing/net-tools/gcc340.patch b/testing/net-tools/gcc340.patch
new file mode 100644
index 000000000..8089bf217
--- /dev/null
+++ b/testing/net-tools/gcc340.patch
@@ -0,0 +1,46 @@
+diff -Naur net-tools-1.60-orig/hostname.c net-tools-1.60/hostname.c
+--- net-tools-1.60-orig/hostname.c 2001-04-08 10:04:23.000000000 -0700
++++ net-tools-1.60/hostname.c 2004-05-07 17:22:14.000000000 -0700
+@@ -78,6 +78,7 @@
+ fprintf(stderr, _("%s: name too long\n"), program_name);
+ break;
+ default:
++ ;
+ }
+ exit(1);
+ }
+@@ -98,6 +99,7 @@
+ fprintf(stderr, _("%s: name too long\n"), program_name);
+ break;
+ default:
++ ;
+ }
+ exit(1);
+ };
+@@ -117,6 +119,7 @@
+ fprintf(stderr, _("%s: name too long\n"), program_name);
+ break;
+ default:
++ ;
+ }
+ exit(1);
+ };
+@@ -174,6 +177,7 @@
+ printf("%s\n", hp->h_name);
+ break;
+ default:
++ ;
+ }
+ }
+
+diff -Naur net-tools-1.60-orig/lib/inet_sr.c net-tools-1.60/lib/inet_sr.c
+--- net-tools-1.60-orig/lib/inet_sr.c 2000-02-20 13:46:45.000000000 -0800
++++ net-tools-1.60/lib/inet_sr.c 2004-05-07 17:20:14.000000000 -0700
+@@ -105,6 +105,7 @@
+ case 2:
+ isnet = 0; break;
+ default:
++ ;
+ }
+
+ /* Fill in the other fields. */
diff --git a/testing/net-tools/net-tools-1.60-2.6-compilefix.patch b/testing/net-tools/net-tools-1.60-2.6-compilefix.patch
new file mode 100644
index 000000000..92ce90128
--- /dev/null
+++ b/testing/net-tools/net-tools-1.60-2.6-compilefix.patch
@@ -0,0 +1,23 @@
+diff -ruN net-tools-1.60.orig/lib/x25_sr.c net-tools-1.60/lib/x25_sr.c
+--- net-tools-1.60.orig/lib/x25_sr.c 2000-05-20 15:38:10.000000000 +0200
++++ net-tools-1.60/lib/x25_sr.c 2003-10-18 20:33:31.927574928 +0200
+@@ -22,6 +22,7 @@
+ #include <sys/socket.h>
+ #include <sys/ioctl.h>
+ #include <linux/x25.h>
++#include <linux/version.h>
+ #include <ctype.h>
+ #include <errno.h>
+ #include <netdb.h>
+@@ -77,7 +78,11 @@
+ rt.sigdigits=sigdigits;
+
+ /* x25_route_struct.address isn't type struct sockaddr_x25, Why? */
++#if LINUX_VERSION_CODE < KERNEL_VERSION(2, 6, 0)
+ memcpy(&rt.address, &sx25.sx25_addr, sizeof(x25_address));
++#else
++ memcpy(&rt.address, &sx25.sx25_addr, sizeof(struct x25_address));
++#endif
+
+ while (*args) {
+ if (!strcmp(*args,"device") || !strcmp(*args,"dev")) {
diff --git a/testing/net-tools/net-tools-1.60-miiioctl.patch b/testing/net-tools/net-tools-1.60-miiioctl.patch
new file mode 100644
index 000000000..6c7f0693d
--- /dev/null
+++ b/testing/net-tools/net-tools-1.60-miiioctl.patch
@@ -0,0 +1,17 @@
+--- net-tools-1.60.20110819cvs/include/mii.h 2011-08-19 10:14:00.743873299 +0200
++++ net-tools-1.60.20110819cvs/include/mii.h.new 2011-08-19 10:28:26.500524160 +0200
+@@ -14,11 +14,9 @@
+ /* network interface ioctl's for MII commands */
+ #ifndef SIOCGMIIPHY
+ #warning "SIOCGMIIPHY is not defined by your kernel source"
+-#define SIOCGMIIPHY (SIOCDEVPRIVATE) /* Read from current PHY */
+-#define SIOCGMIIREG (SIOCDEVPRIVATE+1) /* Read any PHY register */
+-#define SIOCSMIIREG (SIOCDEVPRIVATE+2) /* Write any PHY register */
+-#define SIOCGPARAMS (SIOCDEVPRIVATE+3) /* Read operational parameters */
+-#define SIOCSPARAMS (SIOCDEVPRIVATE+4) /* Set operational parameters */
++#define SIOCGMIIPHY 0x8947 /* Read from current PHY */
++#define SIOCGMIIREG 0x8948 /* Read any PHY register */
++#define SIOCSMIIREG 0x8949 /* Write any PHY register */
+ #endif
+
+ #include <linux/types.h>
diff --git a/testing/net-tools/net-tools-1.60-nameif.patch b/testing/net-tools/net-tools-1.60-nameif.patch
new file mode 100644
index 000000000..54def00c2
--- /dev/null
+++ b/testing/net-tools/net-tools-1.60-nameif.patch
@@ -0,0 +1,58 @@
+--- net-tools-1.60/nameif.c.nameif 2000-10-18 19:26:29.000000000 +0200
++++ net-tools-1.60/nameif.c 2003-03-19 11:02:01.000000000 +0100
+@@ -117,7 +117,8 @@
+ }
+
+ struct change {
+- struct change *next,**pprev;
++ struct change *next;
++ int found;
+ char ifname[IFNAMSIZ+1];
+ unsigned char mac[6];
+ };
+@@ -139,10 +140,7 @@
+ ch->ifname, pos);
+ if (parsemac(p,ch->mac) < 0)
+ complain(_("cannot parse MAC `%s' at %s"), p, pos);
+- if (clist)
+- clist->pprev = &ch->next;
+ ch->next = clist;
+- ch->pprev = &clist;
+ clist = ch;
+ return 0;
+ }
+@@ -200,7 +198,7 @@
+
+ void usage(void)
+ {
+- fprintf(stderr, _("usage: nameif [-c configurationfile] [-s] {ifname macaddress}"));
++ fprintf(stderr, _("usage: nameif [-c configurationfile] [-s] {ifname macaddress}\n"));
+ exit(1);
+ }
+
+@@ -277,21 +275,21 @@
+ ch = lookupmac(mac);
+ if (!ch)
+ continue;
+-
+- *ch->pprev = ch->next;
++
++ ch->found = 1;
+ if (strcmp(p, ch->ifname)) {
+ if (setname(p, ch->ifname) < 0)
+ complain(_("cannot change name of %s to %s: %s"),
+ p, ch->ifname, strerror(errno));
+ }
+- free(ch);
+ }
+ fclose(ifh);
+
+ while (clist) {
+ struct change *ch = clist;
+ clist = clist->next;
+- warning(_("interface '%s' not found"), ch->ifname);
++ if (!ch->found)
++ warning(_("interface '%s' not found"), ch->ifname);
+ free(ch);
+ }
+
diff --git a/testing/net-tools/net-tools-1.60-nameif_strncpy.patch b/testing/net-tools/net-tools-1.60-nameif_strncpy.patch
new file mode 100644
index 000000000..7568e21a2
--- /dev/null
+++ b/testing/net-tools/net-tools-1.60-nameif_strncpy.patch
@@ -0,0 +1,13 @@
+--- net-tools-1.60/nameif.c.ncpy 2006-10-03 14:24:21.000000000 +0200
++++ net-tools-1.60/nameif.c 2006-10-03 14:22:43.000000000 +0200
+@@ -100,8 +100,8 @@
+ struct ifreq ifr;
+ opensock();
+ memset(&ifr,0,sizeof(struct ifreq));
+- strcpy(ifr.ifr_name, oldname);
+- strcpy(ifr.ifr_newname, newname);
++ strncpy(ifr.ifr_name, oldname, IF_NAMESIZE);
++ strncpy(ifr.ifr_newname, newname, IF_NAMESIZE);
+ return ioctl(ctl_sk, SIOCSIFNAME, &ifr);
+ }
+
diff --git a/testing/net-tools/net-tools.install b/testing/net-tools/net-tools.install
new file mode 100644
index 000000000..9eee9e51b
--- /dev/null
+++ b/testing/net-tools/net-tools.install
@@ -0,0 +1,12 @@
+post_upgrade() {
+ if [ "$(vercmp $2 1.60-16)" -lt 0 ]; then
+ echo "hostname and {,yp,nis}domainname has moved:"
+ echo "----------"
+ echo "hostname is now in coreutils"
+ echo "domainname is now in yp-tools"
+ echo "their functionality might have changed slightly"
+ echo ""
+ echo "dnsdomainname remains in net-tools"
+ echo "----------"
+ fi
+}
diff --git a/testing/net-tools/net-tools.patch b/testing/net-tools/net-tools.patch
new file mode 100644
index 000000000..8af2d2159
--- /dev/null
+++ b/testing/net-tools/net-tools.patch
@@ -0,0 +1,30 @@
+diff -Naur net-tools-1.60-orig/mii-tool.c net-tools-1.60/mii-tool.c
+--- net-tools-1.60-orig/mii-tool.c 2000-05-21 07:31:17.000000000 -0700
++++ net-tools-1.60/mii-tool.c 2004-05-31 12:35:21.000000000 -0700
+@@ -379,16 +379,16 @@
+ /*--------------------------------------------------------------------*/
+
+ const char *usage =
+-"usage: %s [-VvRrwl] [-A media,... | -F media] [interface ...]
+- -V, --version display version information
+- -v, --verbose more verbose output
+- -R, --reset reset MII to poweron state
+- -r, --restart restart autonegotiation
+- -w, --watch monitor for link status changes
+- -l, --log with -w, write events to syslog
+- -A, --advertise=media,... advertise only specified media
+- -F, --force=media force specified media technology
+-media: 100baseT4, 100baseTx-FD, 100baseTx-HD, 10baseT-FD, 10baseT-HD,
++"usage: %s [-VvRrwl] [-A media,... | -F media] [interface ...]\n\
++ -V, --version display version information\n\
++ -v, --verbose more verbose output\n\
++ -R, --reset reset MII to poweron state\n\
++ -r, --restart restart autonegotiation\n\
++ -w, --watch monitor for link status changes\n\
++ -l, --log with -w, write events to syslog\n\
++ -A, --advertise=media,... advertise only specified media\n\
++ -F, --force=media force specified media technology\n\
++media: 100baseT4, 100baseTx-FD, 100baseTx-HD, 10baseT-FD, 10baseT-HD,\n\
+ (to advertise both HD and FD) 100baseTx, 10baseT\n";
+
+ int main(int argc, char **argv)
diff --git a/testing/openldap/PKGBUILD b/testing/openldap/PKGBUILD
new file mode 100644
index 000000000..93bc18d02
--- /dev/null
+++ b/testing/openldap/PKGBUILD
@@ -0,0 +1,96 @@
+# $Id: PKGBUILD 141927 2011-11-03 08:03:29Z eric $
+# Maintainer:
+
+pkgbase=openldap
+pkgname=('libldap' 'openldap')
+pkgver=2.4.26
+pkgrel=5
+arch=('i686' 'x86_64')
+url="http://www.openldap.org/"
+license=('custom')
+makedepends=('libfetch' 'libltdl' 'libsasl')
+source=(ftp://ftp.openldap.org/pub/OpenLDAP/openldap-release/${pkgbase}-${pkgver}.tgz
+ slapd slapd.default ntlm.patch)
+md5sums=('f36f3086031dd56ae94f722ffae8df5e'
+ '40fdbdd6c343019cbadf4eb26c6189f2'
+ '6be69f6b7e522cb64cce8703da81ed32'
+ '4258ddbef923d1f29f2843bc050f8c56')
+
+build() {
+ cd "${srcdir}"/${pkgbase}-${pkgver}
+ patch -Np1 -i "${srcdir}"/ntlm.patch
+ sed -i 's|-m 644 $(LIBRARY)|-m 755 $(LIBRARY)|' libraries/{liblber,libldap,libldap_r}/Makefile.in
+ sed -i 's|#define LDAPI_SOCK LDAP_RUNDIR LDAP_DIRSEP "run" LDAP_DIRSEP "ldapi"|#define LDAPI_SOCK LDAP_DIRSEP "run" LDAP_DIRSEP "openldap" LDAP_DIRSEP "ldapi"|' include/ldap_defaults.h
+ sed -i 's|%LOCALSTATEDIR%/run|/run/openldap|' servers/slapd/slapd.conf
+ sed -i 's|-$(MKDIR) $(DESTDIR)$(localstatedir)/run|-$(MKDIR) $(DESTDIR)/run/openldap|' servers/slapd/Makefile.in
+
+ LDFLAGS="$LDFLAGS -L\"${pkgdir}\"/libldap/usr/lib"
+ ./configure --prefix=/usr --mandir=/usr/share/man --libexecdir=/usr/lib \
+ --sysconfdir=/etc --localstatedir=/var/lib/openldap \
+ --enable-ipv6 --enable-syslog --enable-local \
+ --enable-bdb --enable-hdb \
+ --enable-crypt --enable-dynamic \
+ --with-threads --disable-wrappers \
+ --enable-spasswd --with-cyrus-sasl \
+ --enable-overlays=mod --enable-modules=yes
+ make
+}
+
+check() {
+ cd "${srcdir}"/${pkgbase}-${pkgver}
+ make test
+}
+
+package_libldap() {
+ pkgdesc="Lightweight Directory Access Protocol (LDAP) client libraries"
+ depends=('libsasl' 'libfetch')
+ backup=('etc/openldap/ldap.conf')
+ options=('!libtool')
+
+ cd "${srcdir}"/${pkgbase}-${pkgver}
+ for dir in include libraries doc/man/man3 ; do
+ pushd ${dir}
+ make DESTDIR="${pkgdir}" install
+ popd
+ done
+ install -Dm644 doc/man/man5/ldap.conf.5.tmp "${pkgdir}"/usr/share/man/man5/ldap.conf.5
+
+# get rid of duplicate default conf files
+ rm "${pkgdir}"/etc/openldap/*.default
+
+ ln -sf liblber.so "${pkgdir}"/usr/lib/liblber.so.2
+ ln -sf libldap.so "${pkgdir}"/usr/lib/libldap.so.2
+
+ install -Dm644 LICENSE "${pkgdir}"/usr/share/licenses/${pkgname}/LICENSE
+}
+
+package_openldap() {
+ pkgdesc="Lightweight Directory Access Protocol (LDAP) client and server"
+ depends=("libldap>=${pkgver}" 'libltdl')
+ backup=('etc/openldap/slapd.conf' 'etc/conf.d/slapd')
+ options=('!libtool' 'emptydirs')
+ install=openldap.install
+
+ cd "${srcdir}"/${pkgbase}-${pkgver}
+ for dir in clients servers doc/man/man{1,5,8} ; do
+ pushd ${dir}
+ make DESTDIR="${pkgdir}" install
+ popd
+ done
+ rm "${pkgdir}"/usr/share/man/man5/ldap.conf.5
+ rm -r "${pkgdir}"/run
+
+# get rid of duplicate default conf files
+ rm "${pkgdir}"/etc/openldap/*.default
+
+ ln -s ../lib/slapd "${pkgdir}"/usr/sbin/slapd
+
+ chown root:439 "${pkgdir}"/etc/openldap/{slapd.conf,DB_CONFIG.example}
+ chmod 640 "${pkgdir}"/etc/openldap/{slapd.conf,DB_CONFIG.example}
+
+ install -dm700 -o 439 -g 439 "${pkgdir}"/var/lib/openldap
+ install -dm700 -o 439 -g 439 "${pkgdir}"/etc/openldap/slapd.d
+ install -Dm755 "${srcdir}"/slapd "${pkgdir}"/etc/rc.d/slapd
+ install -Dm644 "${srcdir}"/slapd.default "${pkgdir}"/etc/conf.d/slapd
+ install -Dm644 LICENSE "${pkgdir}"/usr/share/licenses/${pkgname}/LICENSE
+}
diff --git a/testing/openldap/ntlm.patch b/testing/openldap/ntlm.patch
new file mode 100644
index 000000000..6804b610d
--- /dev/null
+++ b/testing/openldap/ntlm.patch
@@ -0,0 +1,230 @@
+Patch from evolution-exchange (2.10.3). The ldap_ntlm_bind function is
+actually called by evolution-data-server, checked at version 1.12.2.
+Without this patch, the Exchange addressbook integration uses simple binds
+with cleartext passwords.
+
+Russ checked with openldap-software for upstream's opinion on this patch
+on 2007-12-21. Upstream had never received it as a patch submission and
+given that it's apparently only for older Exchange servers that can't do
+SASL and DIGEST-MD5, it's not very appealing.
+
+Bug#457374 filed against evolution-data-server asking if this support is
+still required on 2007-12-21.
+
+Index: trunk/include/ldap.h
+===================================================================
+--- trunk.orig/include/ldap.h
++++ trunk/include/ldap.h
+@@ -2461,5 +2461,25 @@
+ LDAPControl **ctrls,
+ LDAPDerefRes **drp ));
+
++/*
++ * hacks for NTLM
++ */
++#define LDAP_AUTH_NTLM_REQUEST ((ber_tag_t) 0x8aU)
++#define LDAP_AUTH_NTLM_RESPONSE ((ber_tag_t) 0x8bU)
++LDAP_F( int )
++ldap_ntlm_bind LDAP_P((
++ LDAP *ld,
++ LDAP_CONST char *dn,
++ ber_tag_t tag,
++ struct berval *cred,
++ LDAPControl **sctrls,
++ LDAPControl **cctrls,
++ int *msgidp ));
++LDAP_F( int )
++ldap_parse_ntlm_bind_result LDAP_P((
++ LDAP *ld,
++ LDAPMessage *res,
++ struct berval *challenge));
++
+ LDAP_END_DECL
+ #endif /* _LDAP_H */
+Index: trunk/libraries/libldap/ntlm.c
+===================================================================
+--- /dev/null
++++ trunk/libraries/libldap/ntlm.c
+@@ -0,0 +1,138 @@
++/* $OpenLDAP: pkg/ldap/libraries/libldap/ntlm.c,v 1.1.4.10 2002/01/04 20:38:21 kurt Exp $ */
++/*
++ * Copyright 1998-2002 The OpenLDAP Foundation, All Rights Reserved.
++ * COPYING RESTRICTIONS APPLY, see COPYRIGHT file
++ */
++
++/* Mostly copied from sasl.c */
++
++#include "portable.h"
++
++#include <stdlib.h>
++#include <stdio.h>
++
++#include <ac/socket.h>
++#include <ac/string.h>
++#include <ac/time.h>
++#include <ac/errno.h>
++
++#include "ldap-int.h"
++
++int
++ldap_ntlm_bind(
++ LDAP *ld,
++ LDAP_CONST char *dn,
++ ber_tag_t tag,
++ struct berval *cred,
++ LDAPControl **sctrls,
++ LDAPControl **cctrls,
++ int *msgidp )
++{
++ BerElement *ber;
++ int rc;
++ ber_int_t id;
++
++ Debug( LDAP_DEBUG_TRACE, "ldap_ntlm_bind\n", 0, 0, 0 );
++
++ assert( ld != NULL );
++ assert( LDAP_VALID( ld ) );
++ assert( msgidp != NULL );
++
++ if( msgidp == NULL ) {
++ ld->ld_errno = LDAP_PARAM_ERROR;
++ return ld->ld_errno;
++ }
++
++ /* create a message to send */
++ if ( (ber = ldap_alloc_ber_with_options( ld )) == NULL ) {
++ ld->ld_errno = LDAP_NO_MEMORY;
++ return ld->ld_errno;
++ }
++
++ assert( LBER_VALID( ber ) );
++
++ LDAP_NEXT_MSGID( ld, id );
++ rc = ber_printf( ber, "{it{istON}" /*}*/,
++ id, LDAP_REQ_BIND,
++ ld->ld_version, dn, tag,
++ cred );
++
++ /* Put Server Controls */
++ if( ldap_int_put_controls( ld, sctrls, ber ) != LDAP_SUCCESS ) {
++ ber_free( ber, 1 );
++ return ld->ld_errno;
++ }
++
++ if ( ber_printf( ber, /*{*/ "N}" ) == -1 ) {
++ ld->ld_errno = LDAP_ENCODING_ERROR;
++ ber_free( ber, 1 );
++ return ld->ld_errno;
++ }
++
++ /* send the message */
++ *msgidp = ldap_send_initial_request( ld, LDAP_REQ_BIND, dn, ber, id );
++
++ if(*msgidp < 0)
++ return ld->ld_errno;
++
++ return LDAP_SUCCESS;
++}
++
++int
++ldap_parse_ntlm_bind_result(
++ LDAP *ld,
++ LDAPMessage *res,
++ struct berval *challenge)
++{
++ ber_int_t errcode;
++ ber_tag_t tag;
++ BerElement *ber;
++ ber_len_t len;
++
++ Debug( LDAP_DEBUG_TRACE, "ldap_parse_ntlm_bind_result\n", 0, 0, 0 );
++
++ assert( ld != NULL );
++ assert( LDAP_VALID( ld ) );
++ assert( res != NULL );
++
++ if ( ld == NULL || res == NULL ) {
++ return LDAP_PARAM_ERROR;
++ }
++
++ if( res->lm_msgtype != LDAP_RES_BIND ) {
++ ld->ld_errno = LDAP_PARAM_ERROR;
++ return ld->ld_errno;
++ }
++
++ if ( ld->ld_error ) {
++ LDAP_FREE( ld->ld_error );
++ ld->ld_error = NULL;
++ }
++ if ( ld->ld_matched ) {
++ LDAP_FREE( ld->ld_matched );
++ ld->ld_matched = NULL;
++ }
++
++ /* parse results */
++
++ ber = ber_dup( res->lm_ber );
++
++ if( ber == NULL ) {
++ ld->ld_errno = LDAP_NO_MEMORY;
++ return ld->ld_errno;
++ }
++
++ tag = ber_scanf( ber, "{ioa" /*}*/,
++ &errcode, challenge, &ld->ld_error );
++ ber_free( ber, 0 );
++
++ if( tag == LBER_ERROR ) {
++ ld->ld_errno = LDAP_DECODING_ERROR;
++ return ld->ld_errno;
++ }
++
++ ld->ld_errno = errcode;
++
++ return( ld->ld_errno );
++}
++
+Index: trunk/libraries/libldap/Makefile.in
+===================================================================
+--- trunk.orig/libraries/libldap/Makefile.in
++++ trunk/libraries/libldap/Makefile.in
+@@ -27,7 +27,7 @@
+ init.c options.c print.c string.c util-int.c schema.c \
+ charray.c os-local.c dnssrv.c utf-8.c utf-8-conv.c \
+ tls2.c tls_o.c tls_g.c tls_m.c \
+- turn.c ppolicy.c dds.c txn.c ldap_sync.c stctrl.c \
++ turn.c ppolicy.c dds.c txn.c ldap_sync.c stctrl.c ntlm.c \
+ assertion.c deref.c ldif.c fetch.c
+
+ OBJS = bind.lo open.lo result.lo error.lo compare.lo search.lo \
+@@ -40,7 +40,7 @@
+ init.lo options.lo print.lo string.lo util-int.lo schema.lo \
+ charray.lo os-local.lo dnssrv.lo utf-8.lo utf-8-conv.lo \
+ tls2.lo tls_o.lo tls_g.lo tls_m.lo \
+- turn.lo ppolicy.lo dds.lo txn.lo ldap_sync.lo stctrl.lo \
++ turn.lo ppolicy.lo dds.lo txn.lo ldap_sync.lo stctrl.lo ntlm.lo \
+ assertion.lo deref.lo ldif.lo fetch.lo
+
+ LDAP_INCDIR= ../../include
+Index: trunk/libraries/libldap_r/Makefile.in
+===================================================================
+--- trunk.orig/libraries/libldap_r/Makefile.in
++++ trunk/libraries/libldap_r/Makefile.in
+@@ -29,7 +29,7 @@
+ init.c options.c print.c string.c util-int.c schema.c \
+ charray.c os-local.c dnssrv.c utf-8.c utf-8-conv.c \
+ tls2.c tls_o.c tls_g.c tls_m.c \
+- turn.c ppolicy.c dds.c txn.c ldap_sync.c stctrl.c \
++ turn.c ppolicy.c dds.c txn.c ldap_sync.c stctrl.c ntlm.c \
+ assertion.c deref.c ldif.c fetch.c
+ SRCS = threads.c rdwr.c rmutex.c tpool.c rq.c \
+ thr_posix.c thr_cthreads.c thr_thr.c thr_lwp.c thr_nt.c \
+@@ -47,7 +47,7 @@
+ init.lo options.lo print.lo string.lo util-int.lo schema.lo \
+ charray.lo os-local.lo dnssrv.lo utf-8.lo utf-8-conv.lo \
+ tls2.lo tls_o.lo tls_g.lo tls_m.lo \
+- turn.lo ppolicy.lo dds.lo txn.lo ldap_sync.lo stctrl.lo \
++ turn.lo ppolicy.lo dds.lo txn.lo ldap_sync.lo stctrl.lo ntlm.lo \
+ assertion.lo deref.lo ldif.lo fetch.lo
+
+ LDAP_INCDIR= ../../include
diff --git a/testing/openldap/openldap.install b/testing/openldap/openldap.install
new file mode 100644
index 000000000..cf3cb9f25
--- /dev/null
+++ b/testing/openldap/openldap.install
@@ -0,0 +1,20 @@
+post_install(){
+ groupadd -g 439 ldap &>/dev/null
+ useradd -u 439 -g ldap -d /var/lib/openldap -s /bin/false ldap &>/dev/null
+ chown -R ldap:ldap var/lib/openldap &>/dev/null
+}
+
+post_upgrade(){
+ getent group ldap >/dev/null 2>&1 || groupadd -g 439 ldap &>/dev/null
+ getent passwd ldap >/dev/null 2>&1 || useradd -u 439 -g ldap -d /var/lib/openldap -s /bin/false ldap &>/dev/null
+ chown -R ldap:ldap var/lib/openldap &>/dev/null
+}
+
+post_remove(){
+ if getent passwd ldap >/dev/null 2>&1; then
+ userdel ldap
+ fi
+ if getent group ldap >/dev/null 2>&1; then
+ groupdel ldap
+ fi
+}
diff --git a/testing/openldap/slapd b/testing/openldap/slapd
new file mode 100755
index 000000000..4f212da66
--- /dev/null
+++ b/testing/openldap/slapd
@@ -0,0 +1,49 @@
+#!/bin/bash
+
+. /etc/rc.conf
+. /etc/rc.d/functions
+
+[ -f "/etc/conf.d/slapd" ] && . /etc/conf.d/slapd
+
+PID=`pidof -o %PPID /usr/sbin/slapd`
+case "$1" in
+ start)
+ stat_busy "Starting OpenLDAP"
+ [ ! -d /run/openldap ] && install -d -m755 -o ldap -g ldap /run/openldap
+ if [ -z "$PID" ]; then
+ if [ -z "$SLAPD_SERVICES" ]; then
+ /usr/sbin/slapd -u ldap -g ldap $SLAPD_OPTIONS
+ else
+ /usr/sbin/slapd -u ldap -g ldap -h "$SLAPD_SERVICES" $SLAPD_OPTIONS
+ fi
+ if [ $? -gt 0 ]; then
+ stat_fail
+ else
+ stat_done
+ fi
+ add_daemon slapd
+ else
+ stat_fail
+ fi
+ ;;
+ stop)
+ stat_busy "Stopping OpenLDAP"
+ [ ! -z "$PID" ] && kill $PID &> /dev/null
+ if [ $? -gt 0 ]; then
+ stat_fail
+ else
+ rm -f /run/openldap/slapd.pid
+ rm -f /run/openldap/slapd.args
+ rm_daemon slapd
+ stat_done
+ fi
+ ;;
+ restart)
+ $0 stop
+ sleep 3
+ $0 start
+ ;;
+ *)
+ echo "usage: $0 {start|stop|restart}"
+esac
+exit 0
diff --git a/testing/openldap/slapd.default b/testing/openldap/slapd.default
new file mode 100644
index 000000000..72ae2a6a7
--- /dev/null
+++ b/testing/openldap/slapd.default
@@ -0,0 +1,6 @@
+# slapd normally serves ldap only on all TCP-ports 389. slapd can also
+# service requests on TCP-port 636 (ldaps) and requests via unix
+# sockets.
+# Example usage:
+#SLAPD_SERVICES="ldap://127.0.0.1:389/ ldaps:/// ldapi:///"
+SLAPD_OPTIONS=""
diff --git a/testing/patch/PKGBUILD b/testing/patch/PKGBUILD
new file mode 100644
index 000000000..dcef9714f
--- /dev/null
+++ b/testing/patch/PKGBUILD
@@ -0,0 +1,40 @@
+# $Id: PKGBUILD 141945 2011-11-03 12:04:44Z allan $
+# Maintainer: Allan McRae <allan@archlinux.org>
+# Contributor: judd <jvinet@zeroflux.org>
+
+pkgname=patch
+pkgver=2.6.1
+pkgrel=3
+pkgdesc="A utility to apply patch files to original sources"
+arch=('i686' 'x86_64')
+url="http://www.gnu.org/software/patch/patch.html"
+license=('GPL')
+groups=('base-devel')
+depends=('glibc')
+makedepends=('ed')
+optdepends=('ed: Interpret the patch as an ed script; for patch -e functionality(deprecated)')
+source=(ftp://ftp.gnu.org/gnu/${pkgname}/${pkgname}-${pkgver}.tar.gz{,.sig}
+ patch-2.6.1-get-arg.patch)
+md5sums=('d758eb96d3f75047efc004a720d33daf'
+ 'f7953f3e472fae5118815e6138372e22'
+ '45cd5709adbbcdcb3ab95dc43559c07c')
+
+build() {
+ cd ${srcdir}/${pkgname}-${pkgver}
+
+ # Fixed argument type for --get
+ # see https://bugzilla.redhat.com/show_bug.cgi?id=553624
+ patch -Np1 -i $srcdir/patch-2.6.1-get-arg.patch
+ ./configure --prefix=/usr --mandir=/usr/share/man
+ make
+}
+
+check() {
+ cd ${srcdir}/${pkgname}-${pkgver}
+ make check
+}
+
+package() {
+ cd ${srcdir}/${pkgname}-${pkgver}
+ make prefix=${pkgdir}/usr mandir=${pkgdir}/usr/share/man install
+}
diff --git a/testing/patch/patch-2.6.1-get-arg.patch b/testing/patch/patch-2.6.1-get-arg.patch
new file mode 100644
index 000000000..45f3bc8a5
--- /dev/null
+++ b/testing/patch/patch-2.6.1-get-arg.patch
@@ -0,0 +1,12 @@
+diff -up patch-2.6.1/src/patch.c.get-arg patch-2.6.1/src/patch.c
+--- patch-2.6.1/src/patch.c.get-arg 2010-07-27 18:05:26.217150510 +0100
++++ patch-2.6.1/src/patch.c 2010-07-27 18:05:47.464150892 +0100
+@@ -558,7 +558,7 @@ static struct option const longopts[] =
+ {"remove-empty-files", no_argument, NULL, 'E'},
+ {"force", no_argument, NULL, 'f'},
+ {"fuzz", required_argument, NULL, 'F'},
+- {"get", no_argument, NULL, 'g'},
++ {"get", required_argument, NULL, 'g'},
+ {"input", required_argument, NULL, 'i'},
+ {"ignore-whitespace", no_argument, NULL, 'l'},
+ #ifdef ENABLE_MERGE
diff --git a/testing/pkg-config/PKGBUILD b/testing/pkg-config/PKGBUILD
new file mode 100644
index 000000000..a8dd714da
--- /dev/null
+++ b/testing/pkg-config/PKGBUILD
@@ -0,0 +1,37 @@
+# $Id: PKGBUILD 141947 2011-11-03 12:12:51Z allan $
+# Maintainer: Allan McRae <allan@archlinux.org>
+# Committer: Judd Vinet <jvinet@zeroflux.org>
+
+pkgname=pkg-config
+pkgver=0.26
+pkgrel=2
+pkgdesc="A system for managing library compile/link flags"
+arch=('i686' 'x86_64')
+url="http://pkgconfig.freedesktop.org/wiki/"
+license=('GPL')
+groups=('base-devel')
+depends=('glibc' 'popt' 'glib2')
+provides=("pkgconfig=${pkgver}")
+conflicts=('pkgconfig')
+replaces=('pkgconfig')
+source=(http://pkgconfig.freedesktop.org/releases/${pkgname}-${pkgver}.tar.gz)
+md5sums=('47525c26a9ba7ba14bf85e01509a7234')
+
+build() {
+ cd ${srcdir}/${pkgname}-${pkgver}
+
+ # Use system popt
+ ./configure --prefix=/usr --with-installed-popt
+
+ make
+}
+
+check() {
+ cd ${srcdir}/${pkgname}-${pkgver}
+ make check
+}
+
+package() {
+ cd ${srcdir}/${pkgname}-${pkgver}
+ make DESTDIR=${pkgdir} install
+}
diff --git a/testing/pkg-config/autoconf-2.66.patch b/testing/pkg-config/autoconf-2.66.patch
new file mode 100644
index 000000000..14cabdf9f
--- /dev/null
+++ b/testing/pkg-config/autoconf-2.66.patch
@@ -0,0 +1,12 @@
+diff -Naur pkg-config-0.25-old//pkg.m4 pkg-config-0.25/pkg.m4
+--- pkg-config-0.25-old//pkg.m4 2009-12-07 06:39:02.000000000 +1000
++++ pkg-config-0.25/pkg.m4 2010-07-15 14:44:37.466942978 +1000
+@@ -135,7 +135,7 @@
+ Consider adjusting the PKG_CONFIG_PATH environment variable if you
+ installed software in a non-standard prefix.
+
+-_PKG_TEXT])dnl
++_PKG_TEXT])[]dnl
+ ])
+ elif test $pkg_failed = untried; then
+ AC_MSG_RESULT([no])
diff --git a/testing/ppp/PKGBUILD b/testing/ppp/PKGBUILD
new file mode 100644
index 000000000..06940052d
--- /dev/null
+++ b/testing/ppp/PKGBUILD
@@ -0,0 +1,80 @@
+# $Id: PKGBUILD 141972 2011-11-03 19:01:44Z thomas $
+# Maintainer: Thomas Baechler <thomas@archlinux.org>
+pkgname=ppp
+pkgver=2.4.5
+pkgrel=3
+pkgdesc="A daemon which implements the Point-to-Point Protocol for dial-up networking"
+arch=(i686 x86_64)
+url="http://www.samba.org/ppp/"
+license=('custom:GPL/BSD')
+groups=('base')
+depends=('glibc' 'libpcap>=1.0.0')
+backup=(etc/ppp/{chap-secrets,pap-secrets,options,ip-up,ip-down})
+source=(ftp://ftp.samba.org/pub/ppp/ppp-${pkgver}.tar.gz
+ options
+ pon
+ poff
+ ppp
+ plog
+ pon.1
+ ip-up
+ ip-down
+ ip-up.d.dns.sh
+ ip-down.d.dns.sh)
+md5sums=('4621bc56167b6953ec4071043fe0ec57'
+ '7a9259a8f038073eeea7e4552ff1849f'
+ '48c024f73a80c8b69c4def22f86902cc'
+ '2d811f8470ccdea3b8c4505a438483e9'
+ '7561c73b557292d5ba1a9c5dbd270fde'
+ '86cdaf133f7a79fb464f02d83afc7734'
+ '44cc662ba9aa61dd9add3ddd4c5ded57'
+ 'e4beb16ed600b61336d50b2bd2df7cd5'
+ '2fa0671f40711e69194ccf60979f8b33'
+ '4a074d74c29625b254a1db720cb87b99'
+ '8d1be5af8e46393ba6eb273377831e38')
+
+build() {
+ cd "${srcdir}/${pkgname}-${pkgver}"
+ # fix CFLAGS
+ # -D_GNU_SOURCE is needed for IPv6 to work apparently
+ export CFLAGS="$CFLAGS -D_GNU_SOURCE"
+ sed -i "s:-O2 -pipe -Wall -g:${CFLAGS}:" pppd/Makefile.linux
+ sed -i "s:-g -O2:${CFLAGS}:" pppd/plugins/Makefile.linux
+ sed -i "s:-O2:${CFLAGS}:" pppstats/Makefile.linux
+ sed -i "s:-O2 -g -pipe:${CFLAGS}:" chat/Makefile.linux
+ sed -i "s:-O:${CFLAGS}:" pppdump/Makefile.linux
+
+ # enable active filter
+ sed -i "s:^#FILTER=y:FILTER=y:" pppd/Makefile.linux
+ # enable ipv6 support
+ sed -i "s:^#HAVE_INET6=y:HAVE_INET6=y:" pppd/Makefile.linux
+ # Enable Microsoft proprietary Callback Control Protocol
+ sed -i "s:^#CBCP=y:CBCP=y:" pppd/Makefile.linux
+
+ # Fix build error with recent kernels
+ rm include/linux/if_pppol2tp.h
+
+ ./configure --prefix=/usr
+ make
+}
+
+package() {
+ cd "${srcdir}/${pkgname}-${pkgver}"
+ make DESTDIR="${pkgdir}/usr" install
+ install -D -m644 ../options "${pkgdir}/etc/ppp/options"
+ install -D -m755 ../ip-up "${pkgdir}/etc/ppp/ip-up"
+ install -D -m755 ../ip-down "${pkgdir}/etc/ppp/ip-down"
+ install -d -m755 "${pkgdir}/etc/ppp/ip-up.d"
+ install -d -m755 "${pkgdir}/etc/ppp/ip-down.d"
+ install -m755 ../ip-up.d.dns.sh "${pkgdir}/etc/ppp/ip-up.d/00-dns.sh"
+ install -m755 ../ip-down.d.dns.sh "${pkgdir}/etc/ppp/ip-down.d/00-dns.sh"
+ install -D -m755 ../pon "${pkgdir}/usr/bin/pon"
+ install -D -m755 ../poff "${pkgdir}/usr/bin/poff"
+ install -D -m755 ../plog "${pkgdir}/usr/sbin/plog"
+ install -D -m600 etc.ppp/pap-secrets "${pkgdir}/etc/ppp/pap-secrets"
+ install -D -m600 etc.ppp/chap-secrets "${pkgdir}/etc/ppp/chap-secrets"
+ install -D -m755 ${srcdir}/ppp "${pkgdir}/etc/rc.d/ppp"
+ install -D -m644 ${srcdir}/pon.1 "${pkgdir}/usr/share/man/man1/pon.1"
+ install -d -m755 "${pkgdir}/etc/ppp/peers"
+ chmod 0755 "${pkgdir}/usr/lib/pppd/${pkgver}"/*.so
+}
diff --git a/testing/ppp/ip-down b/testing/ppp/ip-down
new file mode 100644
index 000000000..301f3ab9b
--- /dev/null
+++ b/testing/ppp/ip-down
@@ -0,0 +1,12 @@
+#!/bin/sh
+#
+# This script is run by pppd after the connection has ended.
+#
+
+# Execute all scripts in /etc/ppp/ip-up.d/
+for ipdown in /etc/ppp/ip-down.d/*.sh; do
+ if [ -x $ipdown ]; then
+ # Parameters: interface-name tty-device speed local-IP-address remote-IP-address ipparam
+ $ipdown "$@"
+ fi
+done
diff --git a/testing/ppp/ip-down.d.dns.sh b/testing/ppp/ip-down.d.dns.sh
new file mode 100644
index 000000000..9e19f7d1b
--- /dev/null
+++ b/testing/ppp/ip-down.d.dns.sh
@@ -0,0 +1,3 @@
+#!/bin/sh
+
+[ -e /etc/resolv.conf.backup.${IFNAME} ] && mv /etc/resolv.conf.backup.${IFNAME} /etc/resolv.conf
diff --git a/testing/ppp/ip-up b/testing/ppp/ip-up
new file mode 100644
index 000000000..20473d73a
--- /dev/null
+++ b/testing/ppp/ip-up
@@ -0,0 +1,12 @@
+#!/bin/sh
+#
+# This script is run by pppd when there's a successful ppp connection.
+#
+
+# Execute all scripts in /etc/ppp/ip-up.d/
+for ipup in /etc/ppp/ip-up.d/*.sh; do
+ if [ -x $ipup ]; then
+ # Parameters: interface-name tty-device speed local-IP-address remote-IP-address ipparam
+ $ipup "$@"
+ fi
+done
diff --git a/testing/ppp/ip-up.d.dns.sh b/testing/ppp/ip-up.d.dns.sh
new file mode 100644
index 000000000..f9df543a4
--- /dev/null
+++ b/testing/ppp/ip-up.d.dns.sh
@@ -0,0 +1,7 @@
+#!/bin/sh
+
+if [ "$USEPEERDNS" = "1" -a -f /etc/ppp/resolv.conf ]; then
+ [ -e /etc/resolv.conf ] && mv /etc/resolv.conf /etc/resolv.conf.backup.${IFNAME}
+ mv /etc/ppp/resolv.conf /etc/resolv.conf
+ chmod 644 /etc/resolv.conf
+fi
diff --git a/testing/ppp/options b/testing/ppp/options
new file mode 100644
index 000000000..63691842c
--- /dev/null
+++ b/testing/ppp/options
@@ -0,0 +1,352 @@
+# /etc/ppp/options
+#
+# Originally created by Jim Knoble <jmknoble@mercury.interpath.net>
+# Modified for Debian by alvar Bray <alvar@meiko.co.uk>
+# Modified for PPP Server setup by Christoph Lameter <clameter@debian.org>
+# Modified for ArchLinux by Manolis Tzanidakis <manolis@archlinux.org>
+#
+# To quickly see what options are active in this file, use this command:
+# egrep -v '#|^ *$' /etc/ppp/options
+
+# Specify which DNS Servers the incoming Win95 or WinNT Connection should use
+# Two Servers can be remotely configured
+# ms-dns 192.168.1.1
+# ms-dns 192.168.1.2
+
+# Specify which WINS Servers the incoming connection Win95 or WinNT should use
+# ms-wins 192.168.1.50
+# ms-wins 192.168.1.51
+
+# Run the executable or shell command specified after pppd has
+# terminated the link. This script could, for example, issue commands
+# to the modem to cause it to hang up if hardware modem control signals
+# were not available.
+#disconnect "chat -- \d+++\d\c OK ath0 OK"
+
+# async character map -- 32-bit hex; each bit is a character
+# that needs to be escaped for pppd to receive it. 0x00000001
+# represents '\x01', and 0x80000000 represents '\x1f'.
+asyncmap 0
+
+# Require the peer to authenticate itself before allowing network
+# packets to be sent or received.
+# Please do not disable this setting. It is expected to be standard in
+# future releases of pppd. Use the call option (see manpage) to disable
+# authentication for specific peers.
+auth
+
+# Use hardware flow control (i.e. RTS/CTS) to control the flow of data
+# on the serial port.
+crtscts
+
+# Use software flow control (i.e. XON/XOFF) to control the flow of data
+# on the serial port.
+#xonxoff
+
+# Specifies that certain characters should be escaped on transmission
+# (regardless of whether the peer requests them to be escaped with its
+# async control character map). The characters to be escaped are
+# specified as a list of hex numbers separated by commas. Note that
+# almost any character can be specified for the escape option, unlike
+# the asyncmap option which only allows control characters to be
+# specified. The characters which may not be escaped are those with hex
+# values 0x20 - 0x3f or 0x5e.
+#escape 11,13,ff
+
+# Don't use the modem control lines.
+#local
+
+# Specifies that pppd should use a UUCP-style lock on the serial device
+# to ensure exclusive access to the device.
+lock
+
+# Don't show the passwords when logging the contents of PAP packets.
+# This is the default.
+hide-password
+
+# When logging the contents of PAP packets, this option causes pppd to
+# show the password string in the log message.
+#show-password
+
+# Use the modem control lines. On Ultrix, this option implies hardware
+# flow control, as for the crtscts option. (This option is not fully
+# implemented.)
+modem
+
+# Set the MRU [Maximum Receive Unit] value to <n> for negotiation. pppd
+# will ask the peer to send packets of no more than <n> bytes. The
+# minimum MRU value is 128. The default MRU value is 1500. A value of
+# 296 is recommended for slow links (40 bytes for TCP/IP header + 256
+# bytes of data).
+#mru 542
+
+# Set the interface netmask to <n>, a 32 bit netmask in "decimal dot"
+# notation (e.g. 255.255.255.0).
+#netmask 255.255.255.0
+
+# Disables the default behaviour when no local IP address is specified,
+# which is to determine (if possible) the local IP address from the
+# hostname. With this option, the peer will have to supply the local IP
+# address during IPCP negotiation (unless it specified explicitly on the
+# command line or in an options file).
+#noipdefault
+
+# Enables the "passive" option in the LCP. With this option, pppd will
+# attempt to initiate a connection; if no reply is received from the
+# peer, pppd will then just wait passively for a valid LCP packet from
+# the peer (instead of exiting, as it does without this option).
+#passive
+
+# With this option, pppd will not transmit LCP packets to initiate a
+# connection until a valid LCP packet is received from the peer (as for
+# the "passive" option with old versions of pppd).
+#silent
+
+# Don't request or allow negotiation of any options for LCP and IPCP
+# (use default values).
+#-all
+
+# Disable Address/Control compression negotiation (use default, i.e.
+# address/control field disabled).
+#-ac
+
+# Disable asyncmap negotiation (use the default asyncmap, i.e. escape
+# all control characters).
+#-am
+
+# Don't fork to become a background process (otherwise pppd will do so
+# if a serial device is specified).
+#-detach
+
+# Disable IP address negotiation (with this option, the remote IP
+# address must be specified with an option on the command line or in
+# an options file).
+#-ip
+
+# Disable IPCP negotiation and IP communication. This option should
+# only be required if the peer is buggy and gets confused by requests
+# from pppd for IPCP negotiation.
+#noip
+
+# Disable magic number negotiation. With this option, pppd cannot
+# detect a looped-back line.
+#-mn
+
+# Disable MRU [Maximum Receive Unit] negotiation (use default, i.e.
+# 1500).
+#-mru
+
+# Disable protocol field compression negotiation (use default, i.e.
+# protocol field compression disabled).
+#-pc
+
+# Require the peer to authenticate itself using PAP.
+#+pap
+
+# Don't agree to authenticate using PAP.
+#-pap
+
+# Require the peer to authenticate itself using CHAP [Cryptographic
+# Handshake Authentication Protocol] authentication.
+#+chap
+
+# Don't agree to authenticate using CHAP.
+#-chap
+
+# Disable negotiation of Van Jacobson style IP header compression (use
+# default, i.e. no compression).
+#-vj
+
+# Increase debugging level (same as -d). If this option is given, pppd
+# will log the contents of all control packets sent or received in a
+# readable form. The packets are logged through syslog with facility
+# daemon and level debug. This information can be directed to a file by
+# setting up /etc/syslog.conf appropriately (see syslog.conf(5)). (If
+# pppd is compiled with extra debugging enabled, it will log messages
+# using facility local2 instead of daemon).
+#debug
+
+# Append the domain name <d> to the local host name for authentication
+# purposes. For example, if gethostname() returns the name porsche,
+# but the fully qualified domain name is porsche.Quotron.COM, you would
+# use the domain option to set the domain name to Quotron.COM.
+#domain <d>
+
+# Enable debugging code in the kernel-level PPP driver. The argument n
+# is a number which is the sum of the following values: 1 to enable
+# general debug messages, 2 to request that the contents of received
+# packets be printed, and 4 to request that the contents of transmitted
+# packets be printed.
+#kdebug n
+
+# Set the MTU [Maximum Transmit Unit] value to <n>. Unless the peer
+# requests a smaller value via MRU negotiation, pppd will request that
+# the kernel networking code send data packets of no more than n bytes
+# through the PPP network interface.
+#mtu <n>
+
+# Set the name of the local system for authentication purposes to <n>.
+# This is a privileged option. With this option, pppd will use lines in the
+# secrets files which have <n> as the second field when looking for a
+# secret to use in authenticating the peer. In addition, unless overridden
+# with the user option, <n> will be used as the name to send to the peer
+# when authenticating the local system to the peer. (Note that pppd does
+# not append the domain name to <n>.)
+#name <n>
+
+# Enforce the use of the hostname as the name of the local system for
+# authentication purposes (overrides the name option).
+#usehostname
+
+# Set the assumed name of the remote system for authentication purposes
+# to <n>.
+#remotename <n>
+
+# Add an entry to this system's ARP [Address Resolution Protocol]
+# table with the IP address of the peer and the Ethernet address of this
+# system.
+proxyarp
+
+# Use the system password database for authenticating the peer using
+# PAP. Note: mgetty already provides this option. If this is specified
+# then dialin from users using a script under Linux to fire up ppp wont work.
+# login
+
+# If this option is given, pppd will send an LCP echo-request frame to the
+# peer every n seconds. Normally the peer should respond to the echo-request
+# by sending an echo-reply. This option can be used with the
+# lcp-echo-failure option to detect that the peer is no longer connected.
+lcp-echo-interval 30
+
+# If this option is given, pppd will presume the peer to be dead if n
+# LCP echo-requests are sent without receiving a valid LCP echo-reply.
+# If this happens, pppd will terminate the connection. Use of this
+# option requires a non-zero value for the lcp-echo-interval parameter.
+# This option can be used to enable pppd to terminate after the physical
+# connection has been broken (e.g., the modem has hung up) in
+# situations where no hardware modem control lines are available.
+lcp-echo-failure 4
+
+# Set the LCP restart interval (retransmission timeout) to <n> seconds
+# (default 3).
+#lcp-restart <n>
+
+# Set the maximum number of LCP terminate-request transmissions to <n>
+# (default 3).
+#lcp-max-terminate <n>
+
+# Set the maximum number of LCP configure-request transmissions to <n>
+# (default 10).
+#lcp-max-configure <n>
+
+# Set the maximum number of LCP configure-NAKs returned before starting
+# to send configure-Rejects instead to <n> (default 10).
+#lcp-max-failure <n>
+
+# Set the IPCP restart interval (retransmission timeout) to <n>
+# seconds (default 3).
+#ipcp-restart <n>
+
+# Set the maximum number of IPCP terminate-request transmissions to <n>
+# (default 3).
+#ipcp-max-terminate <n>
+
+# Set the maximum number of IPCP configure-request transmissions to <n>
+# (default 10).
+#ipcp-max-configure <n>
+
+# Set the maximum number of IPCP configure-NAKs returned before starting
+# to send configure-Rejects instead to <n> (default 10).
+#ipcp-max-failure <n>
+
+# Set the PAP restart interval (retransmission timeout) to <n> seconds
+# (default 3).
+#pap-restart <n>
+
+# Set the maximum number of PAP authenticate-request transmissions to
+# <n> (default 10).
+#pap-max-authreq <n>
+
+# Set the maximum time that pppd will wait for the peer to authenticate
+# itself with PAP to <n> seconds (0 means no limit).
+#pap-timeout <n>
+
+# Set the CHAP restart interval (retransmission timeout for
+# challenges) to <n> seconds (default 3).
+#chap-restart <n>
+
+# Set the maximum number of CHAP challenge transmissions to <n>
+# (default 10).
+#chap-max-challenge
+
+# If this option is given, pppd will rechallenge the peer every <n>
+# seconds.
+#chap-interval <n>
+
+# With this option, pppd will accept the peer's idea of our local IP
+# address, even if the local IP address was specified in an option.
+#ipcp-accept-local
+
+# With this option, pppd will accept the peer's idea of its (remote) IP
+# address, even if the remote IP address was specified in an option.
+#ipcp-accept-remote
+
+# Disable the IPXCP and IPX protocols.
+# To let pppd pass IPX packets comment this out --- you'll probably also
+# want to install ipxripd, and have the Internal IPX Network option enabled
+# in your kernel. /usr/doc/HOWTO/IPX-HOWTO.gz contains more info.
+noipx
+
+# Exit once a connection has been made and terminated. This is the default,
+# unless the `persist' or `demand' option has been specified.
+#nopersist
+
+# Do not exit after a connection is terminated; instead try to reopen
+# the connection.
+#persist
+
+# Terminate after n consecutive failed connection attempts.
+# A value of 0 means no limit. The default value is 10.
+#maxfail <n>
+
+# Initiate the link only on demand, i.e. when data traffic is present.
+# With this option, the remote IP address must be specified by the user on
+# the command line or in an options file. Pppd will initially configure
+# the interface and enable it for IP traffic without connecting to the peer.
+# When traffic is available, pppd will connect to the peer and perform
+# negotiation, authentication, etc. When this is completed, pppd will
+# commence passing data packets (i.e., IP packets) across the link.
+#demand
+
+# Specifies that pppd should disconnect if the link is idle for <n> seconds.
+# The link is idle when no data packets (i.e. IP packets) are being sent or
+# received. Note: it is not advisable to use this option with the persist
+# option without the demand option. If the active-filter option is given,
+# data packets which are rejected by the specified activity filter also
+# count as the link being idle.
+#idle <n>
+
+# Specifies how many seconds to wait before re-initiating the link after
+# it terminates. This option only has any effect if the persist or demand
+# option is used. The holdoff period is not applied if the link was
+# terminated because it was idle.
+#holdoff <n>
+
+# Wait for up n milliseconds after the connect script finishes for a valid
+# PPP packet from the peer. At the end of this time, or when a valid PPP
+# packet is received from the peer, pppd will commence negotiation by
+# sending its first LCP packet. The default value is 1000 (1 second).
+# This wait period only applies if the connect or pty option is used.
+#connect-delay <n>
+
+# Packet filtering: for more information, see pppd(8)
+# Any packets matching the filter expression will be interpreted as link
+# activity, and will cause a "demand" connection to be activated, and reset
+# the idle connection timer. (idle option)
+# The filter expression is akin to that of tcpdump(1)
+#active-filter <filter-expression>
+
+# uncomment the line below this if you use PPPoE
+#plugin /usr/lib/pppd/plugins/pppoe.so
+
+# ---<End of File>---
diff --git a/testing/ppp/plog b/testing/ppp/plog
new file mode 100644
index 000000000..84d2c7340
--- /dev/null
+++ b/testing/ppp/plog
@@ -0,0 +1,7 @@
+#!/bin/sh
+
+if [ -s /var/log/ppp.log ]; then
+ exec tail "$@" /var/log/ppp.log
+else
+ exec tail "$@" /var/log/syslog | grep ' \(pppd\|chat\)\['
+fi
diff --git a/testing/ppp/poff b/testing/ppp/poff
new file mode 100644
index 000000000..8b4dffc59
--- /dev/null
+++ b/testing/ppp/poff
@@ -0,0 +1,103 @@
+#!/bin/sh
+
+# Written by John Hasler <john@dhh.gt.org> and based on work
+# by Phil Hands <phil@hands.com>. Distributed under the GNU GPL
+
+if [ -x /usr/bin/kill ]; then
+ KILL="/usr/bin/kill"
+else
+ KILL="/bin/kill"
+fi
+SIG=TERM
+DONE="stopped"
+MODE=""
+
+usage ()
+{
+ cat <<!EOF!
+usage: $0 [option] [provider]
+options:
+ -r Cause pppd to drop the line and redial.
+ -d Toggle the state of pppd's debug option.
+ -c Cause pppd to renegotiate compression.
+ -a Stop all pppd's. 'provider' will be ignored.
+ -h Print this help summary and exit.
+ -v Print version and exit.
+ none Stop pppd.
+
+Options may not be combined.
+
+If 'provider' is omitted pppd will be stopped or signalled if and only if
+there is exactly one running unless the '-a' option was given. If
+'provider' is supplied the pppd controlling the connection to that
+provider will be stopped or signalled.
+!EOF!
+}
+
+# Get option. If there are none replace the "?" that getopts puts in
+# FLAG on error with "null".
+getopts rdcavh FLAG
+if [ "$?" -ne 0 ]; then
+ FLAG="null"
+fi
+
+# Check for additional options. Should be none.
+getopts :rdcavh DUMMY
+if [ "$?" -eq 0 ]; then
+ echo "$0: Illegal option -- ${OPTARG}."
+ exit 1
+fi
+
+case $FLAG in
+ "r") SIG=HUP; DONE=signalled; shift ;;
+ "d") SIG=USR1; DONE=signalled; shift ;;
+ "c") SIG=USR2; DONE=signalled; shift ;;
+ "a") MODE="all"; shift ;;
+ "v") echo "$0$Revision: 1.1 $_TrickToPrint_RCS_Revision"; exit 0 ;;
+ "h") usage; exit 0 ;;
+ "?") exit 1;
+esac
+
+# Get the PIDs of all the pppds running. Could also get these from
+# /var/run, but pppd doesn't create .pid files until ppp is up.
+PIDS=`pidof pppd`
+
+# poff is pointless if pppd isn't running.
+if test -z "$PIDS"; then
+ echo "$0: No pppd is running. None ${DONE}."
+ exit 1
+fi
+
+# Find out how many pppd's are running.
+N=`echo "$PIDS" | wc -w`
+
+# If there are no arguments we can't do anything if there is more than one
+# pppd running.
+if test "$#" -eq 0 -a "$N" -gt 1 -a $FLAG != "a" ; then
+ echo "$0: More than one pppd running and no "-a" option and
+no arguments supplied. Nothing ${DONE}."
+ exit 1
+fi
+
+# If either there are no arguments or '-a' was specified kill all the
+# pppd's.
+if test "$#" -eq 0 -o "$MODE" = "all" ; then
+ $KILL -$SIG $PIDS || {
+ echo "$0: $KILL failed. None ${DONE}."
+ exit 1
+ }
+ exit 0
+fi
+
+# There is an argument, so kill the pppd started on that provider.
+PID=`ps axw | grep "[ /]pppd call $1 *\$" | awk '{print $1}'`
+if test -n "$PID" ; then
+ $KILL -$SIG $PID || {
+ echo "$0: $KILL failed. None ${DONE}."
+ exit 1
+ }
+else
+ echo "$0: I could not find a pppd process for provider '$1'. None ${DONE}."
+ exit 1
+fi
+exit 0
diff --git a/testing/ppp/pon b/testing/ppp/pon
new file mode 100644
index 000000000..36885050b
--- /dev/null
+++ b/testing/ppp/pon
@@ -0,0 +1,32 @@
+#!/bin/sh
+
+case "$1" in
+ -*) echo "
+Usage: pon [provider] [arguments]
+
+If you specify one argument, a PPP connection will be started using
+settings from the appropriate file in the /etc/ppp/peers/ directory, and
+any additional arguments supplied will be passed as extra arguments to
+pppd.
+"
+ exit 0
+ ;;
+esac
+
+if [ -z "$1" -a ! -f /etc/ppp/peers/provider ]; then
+ echo "
+Please configure /etc/ppp/peers/provider or use a command line argument to
+use another file in /etc/ppp/peers/ directory.
+"
+ exit 1
+fi
+
+if [ "$1" -a ! -f "/etc/ppp/peers/$1" ]; then
+ echo "
+The file /etc/ppp/peers/$1 does not exist.
+"
+ exit 1
+fi
+
+exec /usr/sbin/pppd call ${@:-provider}
+
diff --git a/testing/ppp/pon.1 b/testing/ppp/pon.1
new file mode 100644
index 000000000..bb3220564
--- /dev/null
+++ b/testing/ppp/pon.1
@@ -0,0 +1,121 @@
+.\" This manual is published under the GPL.
+.\" All guidelines specified in the GPL apply here.
+.\" To get an ascii file:
+.\" groff -man -Tascii pon.1 > pon.txt
+.\"
+.TH PON 1 "July 2000" "Debian Project" "Debian PPPD"
+.SH NAME
+pon, poff, plog \- starts up, shuts down or lists the log of PPP connections
+.SH SYNOPSIS
+.B pon
+[ isp-name [ options ] ]
+.br
+.B poff
+[ -r ] [ -d ] [ -c ] [ -a ] [ -h ] [ isp-name ]
+.br
+.B plog
+[ arguments ]
+.SH DESCRIPTION
+This manual page describes the \fBpon\fP, \fBplog\fP and \fBpoff\fP
+scripts, which allow users to control PPP connections.
+..
+.SS pon
+\fBpon\fP, invoked without arguments, runs the \fI/etc/ppp/ppp_on_boot\fP
+file, if it exists and is executable. Otherwise, a PPP connection will be
+started using configuration from \fI/etc/ppp/peers/provider\fP.
+This is the default behaviour unless an \fBisp-name\fP argument is given.
+.PP
+For instance, to use ISP configuration "myisp" run:
+.IP
+pon myisp
+.PP
+\fBpon\fP will then use the options file \fI/etc/ppp/peers/myisp\fP.
+You can pass additional \fBoptions\fP after the ISP name, too.
+\fBpon\fP can be used to run multiple, simultaneous PPP connections.
+..
+.SS poff
+\fBpoff\fP closes a PPP connection. If more than one PPP connection exists,
+the one named in the argument to \fBpoff\fP will be killed, e.g.
+.IP
+poff myprovider2
+.PP
+will terminate the connection to myprovider2, and leave the PPP connections
+to e.g. "myprovider1" or "myprovider3" up and running.
+.PP
+\fBpoff\fP takes the following command line options:
+.RS
+.TP
+.B "\-r"
+causes the connection to be redialed after it is dropped.
+.TP
+.B "\-d"
+toggles the state of pppd's debug option.
+.TP
+.B "\-c"
+causes
+.BR pppd (8)
+to renegotiate compression.
+.TP
+.B "\-a"
+stops all running ppp connections. If the argument \fBisp-name\fP
+is given it will be ignored.
+.TP
+.B "\-h"
+displays help information.
+.TP
+.B "\-v"
+prints the version and exits.
+.PP
+If no argument is given, \fBpoff\fP will stop or signal pppd if and only
+if there is exactly one running. If more than one connection is active,
+it will exit with an error code of 1.
+..
+.SS plog
+\fBplog\fP shows you the last few lines of \fI/var/log/ppp.log\fP. If that
+file doesn't exist, it shows you the last few lines of your
+\fI/var/log/syslog\fP file, but excluding the lines not generated by pppd.
+This script makes use of the
+.BR tail (1)
+command, so arguments that can be passed to
+.BR tail (1)
+can also be passed to \fBplog\fP.
+.PP
+Note: the \fBplog\fP script can only be used by root or another system
+administrator in group "adm", due to security reasons. Also, to have all
+pppd-generated information in one logfile, that plog can show, you need the
+following line in your \fI/etc/syslog.conf\fP file:
+.PP
+local2.* -/var/log/ppp.log
+.RE
+.SH FILES
+.TP
+.I /etc/ppp/options
+PPPd system options file.
+.TP
+.I /etc/ppp/pap-secrets
+System PAP passwords file.
+.TP
+.I /etc/ppp/chap-secrets
+System CHAP passwords file.
+.TP
+.I /etc/ppp/peers/
+Directory holding the peer options files. The default file is called
+\fIprovider\fP.
+.TP
+.I /etc/chatscripts/provider
+The chat script invoked from the default \fI/etc/ppp/peers/provider\fP.
+.TP
+.I /var/log/ppp.log
+The default PPP log file.
+.SH AUTHORS
+The p-commands were written by Christoph Lameter <clameter@debian.org>.
+Updated and revised by Philip Hands <phil@hands.com>.
+.br
+This manual was written by Othmar Pasteka <othmar@tron.at>. Modified
+by Rob Levin <lilo@openprojects.net>, with some extensions taken from
+the old p-commands manual written by John Hasler <jhasler@debian.org>.
+.SH "SEE ALSO"
+.BR pppd (8),
+.BR chat (8),
+.BR tail (1).
+
diff --git a/testing/ppp/ppp b/testing/ppp/ppp
new file mode 100644
index 000000000..16e01bad7
--- /dev/null
+++ b/testing/ppp/ppp
@@ -0,0 +1,36 @@
+#!/bin/bash
+
+. /etc/rc.conf
+. /etc/rc.d/functions
+
+PID=`pidof -o %PPID /usr/sbin/pppd`
+case "$1" in
+ start)
+ stat_busy "Starting PPP daemon"
+ [ -z "$PID" ] && /usr/bin/pon
+ if [ $? -gt 0 ]; then
+ stat_fail
+ else
+ add_daemon ppp
+ stat_done
+ fi
+ ;;
+ stop)
+ stat_busy "Stopping PPP daemon"
+ [ ! -z "$PID" ] && poff -a &> /dev/null
+ if [ $? -gt 0 ]; then
+ stat_fail
+ else
+ rm_daemon ppp
+ stat_done
+ fi
+ ;;
+ restart)
+ $0 stop
+ sleep 1
+ $0 start
+ ;;
+ *)
+ echo "usage: $0 {start|stop|restart}"
+esac
+exit 0
diff --git a/testing/readline/PKGBUILD b/testing/readline/PKGBUILD
new file mode 100644
index 000000000..f1ebbc270
--- /dev/null
+++ b/testing/readline/PKGBUILD
@@ -0,0 +1,62 @@
+# $Id: PKGBUILD 141949 2011-11-03 12:23:03Z allan $
+# Maintainer: Allan McRae <allan@archlinux.org>
+# Contributor: judd <jvinet@zeroflux.org>
+
+pkgname=readline
+_basever=6.2
+_patchlevel=001 #prepare for some patches
+pkgver=$_basever.$_patchlevel
+pkgrel=3
+pkgdesc="GNU readline library"
+arch=('i686' 'x86_64')
+url="http://tiswww.case.edu/php/chet/readline/rltop.html"
+license=('GPL')
+depends=('glibc' 'ncurses')
+backup=('etc/inputrc')
+options=('!emptydirs')
+install=readline.install
+source=(http://ftp.gnu.org/gnu/readline/readline-$_basever.tar.gz{,.sig}
+ inputrc)
+if [ $_patchlevel -gt 00 ]; then
+ for (( p=1; p<=$((10#${_patchlevel})); p++ )); do
+ source=(${source[@]} http://ftp.gnu.org/gnu/readline/readline-$_basever-patches/readline${_basever//./}-$(printf "%03d" $p){,.sig})
+ done
+fi
+md5sums=('67948acb2ca081f23359d0256e9a271c'
+ '928f7d248320a65e43c2dc427e99582b'
+ '58d54966c1191db45973cb3191ac621a'
+ '83287d52a482f790dfb30ec0a8746669'
+ '8e6a51e2e0e6e45a82752e3692c111ac')
+
+build() {
+ cd ${srcdir}/${pkgname}-$_basever
+ for (( p=1; p<=$((10#${_patchlevel})); p++ )); do
+ msg "applying patch readline${_basever//./}-$(printf "%03d" $p)"
+ patch -Np0 -i $srcdir/readline${_basever//./}-$(printf "%03d" $p)
+ done
+
+ # Remove RPATH from shared objects (FS#14366)
+ sed -i 's|-Wl,-rpath,$(libdir) ||g' support/shobj-conf
+
+ # build with -fPIC for x86_64 (FS#15634)
+ [ $CARCH == "x86_64" ] && CFLAGS="$CFLAGS -fPIC"
+
+ ./configure --prefix=/usr --libdir=/lib
+ make SHLIB_LIBS=-lncurses
+}
+
+package() {
+ cd ${srcdir}/${pkgname}-$_basever
+ make DESTDIR=${pkgdir} install
+
+ install -Dm644 ${srcdir}/inputrc ${pkgdir}/etc/inputrc
+
+ # FHS recommends only shared libs in /lib
+ install -dm755 $pkgdir/usr/lib
+ mv $pkgdir/lib/*.a $pkgdir/usr/lib
+
+ # to make the linker find the shared lib and fix compile issues
+ cd ${pkgdir}/usr/lib
+ ln -sv /lib/libreadline.so .
+ ln -sv /lib/libhistory.so .
+}
diff --git a/testing/readline/inputrc b/testing/readline/inputrc
new file mode 100644
index 000000000..fd13a673b
--- /dev/null
+++ b/testing/readline/inputrc
@@ -0,0 +1,36 @@
+# do not bell on tab-completion
+#set bell-style none
+
+set meta-flag on
+set input-meta on
+set convert-meta off
+set output-meta on
+
+$if mode=emacs
+
+# for linux console and RH/Debian xterm
+"\e[1~": beginning-of-line
+"\e[4~": end-of-line
+"\e[5~": beginning-of-history
+"\e[6~": end-of-history
+"\e[7~": beginning-of-line
+"\e[3~": delete-char
+"\e[2~": quoted-insert
+"\e[5C": forward-word
+"\e[5D": backward-word
+"\e\e[C": forward-word
+"\e\e[D": backward-word
+"\e[1;5C": forward-word
+"\e[1;5D": backward-word
+
+# for rxvt
+"\e[8~": end-of-line
+
+# for non RH/Debian xterm, can't hurt for RH/DEbian xterm
+"\eOH": beginning-of-line
+"\eOF": end-of-line
+
+# for freebsd console
+"\e[H": beginning-of-line
+"\e[F": end-of-line
+$endif
diff --git a/testing/readline/readline.install b/testing/readline/readline.install
new file mode 100644
index 000000000..06b646f23
--- /dev/null
+++ b/testing/readline/readline.install
@@ -0,0 +1,17 @@
+infodir=usr/share/info
+filelist=(history.info readline.info rluserman.info)
+
+post_upgrade() {
+ [ -x usr/bin/install-info ] || return 0
+ for file in ${filelist[@]}; do
+ install-info $infodir/$file.gz $infodir/dir 2> /dev/null
+ done
+}
+
+pre_remove() {
+ [ -x usr/bin/install-info ] || return 0
+ for file in ${filelist[@]}; do
+ install-info --delete $infodir/$file.gz $infodir/dir 2> /dev/null
+ done
+}
+
diff --git a/testing/rpcbind/PKGBUILD b/testing/rpcbind/PKGBUILD
new file mode 100644
index 000000000..c7600e76c
--- /dev/null
+++ b/testing/rpcbind/PKGBUILD
@@ -0,0 +1,42 @@
+# $Id: PKGBUILD 141984 2011-11-03 20:14:20Z tpowa $
+# Maintainer: Tobias Powalowski <tpowa@archlinux.org>
+
+pkgname=rpcbind
+pkgver=0.2.0
+pkgrel=5
+pkgdesc="portmap replacement which supports RPC over various protocols"
+arch=(i686 x86_64)
+depends=('bash' 'glibc' 'libtirpc')
+url="http://rpcbind.sourceforge.net"
+license=('custom')
+replaces=('portmap')
+source=(http://downloads.sourceforge.net/sourceforge/rpcbind/rpcbind-0.2.0.tar.bz2
+ rpcbind-sunrpc.patch
+ rpcbind)
+md5sums=('1a77ddb1aaea8099ab19c351eeb26316'
+ 'c02ac36a98baac70b8a26190524b7b73'
+ '78a963654f57cbb209e228884767836e')
+
+build() {
+ cd $srcdir/$pkgname-$pkgver
+ # patch for iana services file
+ patch -Np1 -i ../rpcbind-sunrpc.patch
+ ./configure --prefix=/usr
+ make
+}
+
+check() {
+ cd $srcdir/$pkgname-$pkgver
+ make check
+}
+
+package() {
+ cd $srcdir/$pkgname-$pkgver
+ make DESTDIR=$pkgdir install
+ # install missing man page - https://bugs.archlinux.org/task/21271
+ install -m644 man/rpcinfo.8 $pkgdir/usr/share/man/man8/
+ # install daemon
+ install -D -m755 $srcdir/rpcbind $pkgdir/etc/rc.d/rpcbind
+ # install license
+ install -D -m644 COPYING $pkgdir/usr/share/licenses/rpcbind/COPYING
+}
diff --git a/testing/rpcbind/rpcbind b/testing/rpcbind/rpcbind
new file mode 100755
index 000000000..87c5b50da
--- /dev/null
+++ b/testing/rpcbind/rpcbind
@@ -0,0 +1,39 @@
+#!/bin/bash
+
+. /etc/rc.conf
+. /etc/rc.d/functions
+
+PID="$(pidof -o %PPID /usr/bin/rpcbind)"
+case "$1" in
+ start)
+ stat_busy "Starting rpcbind"
+ [ -z "$PID" ] && /usr/bin/rpcbind &>/dev/null
+ if [ $? -gt 0 ]; then
+ stat_fail
+ else
+ PID=$(pidof -o %PPID /usr/bin/rpcbind)
+ echo $PID > /var/run/rpcbind.pid
+ add_daemon rpcbind
+ stat_done
+ fi
+ ;;
+ stop)
+ stat_busy "Stopping rpcbind"
+ [ ! -z "$PID" ] && kill $PID &> /dev/null
+ if [ $? -gt 0 ]; then
+ stat_fail
+ else
+ rm /var/run/rpcbind.pid
+ rm_daemon rpcbind
+ stat_done
+ fi
+ ;;
+ restart)
+ $0 stop
+ sleep 1
+ $0 start
+ ;;
+ *)
+ echo "usage: $0 {start|stop|restart}"
+esac
+exit 0
diff --git a/testing/rpcbind/rpcbind-sunrpc.patch b/testing/rpcbind/rpcbind-sunrpc.patch
new file mode 100644
index 000000000..76cf54ba9
--- /dev/null
+++ b/testing/rpcbind/rpcbind-sunrpc.patch
@@ -0,0 +1,22 @@
+--- rpcbind-0.1.7/src/rpcbind.c.orig 2008-11-19 14:17:34.000000000 +0100
++++ rpcbind-0.1.7/src/rpcbind.c 2010-01-07 13:03:37.416632894 +0100
+@@ -114,7 +114,7 @@
+ char *udp_uaddr; /* Universal UDP address */
+ char *tcp_uaddr; /* Universal TCP address */
+ #endif
+-static char servname[] = "rpcbind";
++static char servname[] = "sunrpc";
+ static char superuser[] = "superuser";
+
+ int main __P((int, char *[]));
+--- rpcbind-0.1.7/src/rpcinfo.c~ 2010-01-08 16:14:24.592156602 +0000
++++ rpcbind-0.1.7/src/rpcinfo.c 2010-01-08 16:14:31.578838609 +0000
+@@ -633,7 +633,7 @@
+ {
+ memset (&hints, 0, sizeof hints);
+ hints.ai_family = AF_INET;
+- if ((error = getaddrinfo (host, "rpcbind", &hints, &res)) != 0 &&
++ if ((error = getaddrinfo (host, "sunrpc", &hints, &res)) != 0 &&
+ (error = getaddrinfo (host, "portmapper", &hints, &res)) != 0)
+ {
+ fprintf (stderr, "rpcinfo: %s: %s\n",
diff --git a/testing/sed/PKGBUILD b/testing/sed/PKGBUILD
new file mode 100644
index 000000000..1fb61309d
--- /dev/null
+++ b/testing/sed/PKGBUILD
@@ -0,0 +1,34 @@
+# $Id: PKGBUILD 141951 2011-11-03 13:36:47Z allan $
+# Maintainer: Allan McRae <allan@archlinux.org>
+# Contributor: judd <jvinet@zeroflux.org>
+
+pkgname=sed
+pkgver=4.2.1
+pkgrel=4
+pkgdesc="GNU stream editor"
+arch=('i686' 'x86_64')
+url="http://www.gnu.org/software/sed"
+license=('GPL3')
+groups=('base')
+depends=('acl' 'sh')
+makedepends=('gettext')
+install=sed.install
+source=(ftp://ftp.gnu.org/pub/gnu/sed/${pkgname}-${pkgver}.tar.gz{,.sig})
+md5sums=('f0fd4d7da574d4707e442285fd2d3b86'
+ '91871b227dbf0916e019ba1fb0fbfdf3')
+
+build() {
+ cd ${srcdir}/${pkgname}-${pkgver}
+ ./configure --prefix=/usr --bindir=/bin --without-included-regex
+ make
+}
+
+check() {
+ cd ${srcdir}/${pkgname}-${pkgver}
+ make check
+}
+
+package() {
+ cd ${srcdir}/${pkgname}-${pkgver}
+ make DESTDIR=${pkgdir} install
+}
diff --git a/testing/sed/sed.install b/testing/sed/sed.install
new file mode 100644
index 000000000..c0524038b
--- /dev/null
+++ b/testing/sed/sed.install
@@ -0,0 +1,20 @@
+infodir=/usr/share/info
+filelist=(sed.info)
+
+post_install() {
+ [ -x usr/bin/install-info ] || return 0
+ for file in ${filelist[@]}; do
+ install-info $infodir/$file.gz $infodir/dir 2> /dev/null
+ done
+}
+
+post_upgrade() {
+ post_install $1
+}
+
+pre_remove() {
+ [ -x usr/bin/install-info ] || return 0
+ for file in ${filelist[@]}; do
+ install-info --delete $infodir/$file.gz $infodir/dir 2> /dev/null
+ done
+}
diff --git a/testing/sysfsutils/PKGBUILD b/testing/sysfsutils/PKGBUILD
new file mode 100644
index 000000000..fd238c0c4
--- /dev/null
+++ b/testing/sysfsutils/PKGBUILD
@@ -0,0 +1,36 @@
+# $Id: PKGBUILD 141986 2011-11-03 20:17:26Z tpowa $
+# Maintainer: Tobias Powalowski <tpowa@archlinux.org>
+
+pkgname=sysfsutils
+pkgver=2.1.0
+pkgrel=7
+pkgdesc="System Utilities Based on Sysfs"
+arch=(i686 x86_64)
+license=('GPL' 'LGPL')
+url="http://linux-diag.sourceforge.net/Sysfsutils.html"
+groups=('base')
+depends=('glibc')
+source=(http://downloads.sourceforge.net/sourceforge/linux-diag/${pkgname}-${pkgver}.tar.gz)
+md5sums=('14e7dcd0436d2f49aa403f67e1ef7ddc')
+options=(!libtool)
+
+build() {
+ cd "${srcdir}/${pkgname}-${pkgver}"
+ ./configure --prefix=/usr --mandir=/usr/share/man
+ make
+}
+
+check() {
+ cd "${srcdir}/${pkgname}-${pkgver}"
+ make check
+}
+
+package() {
+ cd "${srcdir}/${pkgname}-${pkgver}"
+ make DESTDIR="${pkgdir}" install
+
+ cd "${pkgdir}"
+ mkdir -v lib
+ mv -v usr/lib/libsysfs.so.2* lib/
+ ln -svf ../../lib/libsysfs.so.2 usr/lib/libsysfs.so
+}
diff --git a/testing/tar/PKGBUILD b/testing/tar/PKGBUILD
new file mode 100644
index 000000000..4ebcbd5fd
--- /dev/null
+++ b/testing/tar/PKGBUILD
@@ -0,0 +1,38 @@
+# $Id: PKGBUILD 141953 2011-11-03 14:13:05Z allan $
+# Maintainer: Allan McRae <allan@archlinux.org>
+# Contributor: Andreas Radke <andyrtr@archlinux.org>
+
+pkgname=tar
+pkgver=1.26
+pkgrel=2
+pkgdesc="Utility used to store, backup, and transport files"
+arch=('i686' 'x86_64')
+url="http://www.gnu.org/software/tar/tar.html"
+license=('GPL3')
+groups=('base')
+depends=('glibc' 'sh')
+options=('!emptydirs')
+install=tar.install
+source=(ftp://ftp.gnu.org/gnu/$pkgname/$pkgname-$pkgver.tar.xz{,.sig}
+ tar.1)
+md5sums=('0ced6f20b9fa1bea588005b5ad4b52c1'
+ '6618d5fe7785e138c27d7d6a24e998b2'
+ 'e97e7343f4e23724b4c48bca2f033e38')
+
+build() {
+ cd ${srcdir}/$pkgname-$pkgver
+
+ ./configure --prefix=/usr --libexecdir=/usr/lib/tar --bindir=/bin
+ make
+}
+
+check() {
+ cd ${srcdir}/$pkgname-$pkgver
+ make check
+}
+
+package() {
+ cd ${srcdir}/$pkgname-$pkgver
+ make DESTDIR=${pkgdir} install
+ install -Dm644 ${srcdir}/tar.1 ${pkgdir}/usr/share/man/man1/tar.1
+}
diff --git a/testing/tar/tar.1 b/testing/tar/tar.1
new file mode 100644
index 000000000..75bbcd38c
--- /dev/null
+++ b/testing/tar/tar.1
@@ -0,0 +1,367 @@
+.\" generated by script on Fri Aug 19 16:19:30 2011
+.Dd Aug 19, 2011
+.Dt TAR 1
+.Sh NAME
+.Nm tar
+.Nd The GNU version of the tar archiving utility
+.Sh SYNOPSIS
+.Nm tar
+.Oo Fl Oc Cm A Fl \-catenate \-concatenate Cm \||\| c Fl \-create Cm \||\| d Fl \-diff \-compare Cm \||\| Fl \-delete Cm \||\| r Fl \-append Cm \||\| t Fl \-list Cm \||\| Fl \-test\-label Cm \||\| u Fl \-update Cm \||\| x Fl \-extract \-get
+.Op Ar options
+.Op Ar pathname ...
+.Sh DESCRIPTION
+.Nm Tar
+stores and extracts files from a tape or disk archive.
+.Pp
+The first argument to
+tar
+should be a function; either one of the letters
+.Cm Acdrtux ,
+or one of the long function names.
+A function letter need not be prefixed with ``\-'', and may be combined
+with other single-letter options.
+A long function name must be prefixed with
+.Cm \\-\\- .
+Some options take a parameter; with the single-letter form
+these must be given as separate arguments.
+With the long form, they may be given by appending
+.Cm = Ns Ar value
+to the option.
+.Sh FUNCTION LETTERS
+Main operation mode:
+.Bl -tag -width flag
+.It Fl A , Fl \-catenate , Fl \-concatenate
+append tar files to an archive
+.It Fl c , Fl \-create
+create a new archive
+.It Fl d , Fl \-diff , Fl \-compare
+find differences between archive and file system
+.It Fl \-delete
+delete from the archive (not on mag tapes!)
+.It Fl r , Fl \-append
+append files to the end of an archive
+.It Fl t , Fl \-list
+list the contents of an archive
+.It Fl \-test\-label
+test the archive volume label and exit
+.It Fl u , Fl \-update
+only append files newer than copy in archive
+.It Fl x , Fl \-extract , Fl \-get
+extract files from an archive
+.El
+.Sh OTHER OPTIONS
+Operation modifiers:
+.Bl -tag -width flag
+.It \-[0\-7][lmh]
+specify drive and density
+.It Fl a , Fl \-auto\-compress
+use archive suffix to determine the compression program
+.It Fl \-add\-file Ns \= Ns Ar FILE
+add given FILE to the archive (useful if its name starts with a dash)
+.It Fl \-anchored
+patterns match file name start
+.It Fl \-no\-anchored
+patterns match after any `/' (default for exclusion)
+.It Fl \-atime\-preserve
+preserve access times on dumped files, either by restoring the times
+.It Fl \-no\-auto\-compress
+do not use archive suffix to determine the compression program
+.It Fl b , Fl \-blocking\-factor Ar BLOCKS
+BLOCKS x 512 bytes per record
+.It Fl B , Fl \-read\-full\-records
+reblock as we read (for 4.2BSD pipes)
+.It Fl \-backup
+backup before removal, choose version CONTROL
+.It Fl C , Fl \-directory Ar DIR
+change to directory DIR
+.It Fl \-check\-device
+check device numbers when creating incremental archives (default)
+.It Fl \-no\-check\-device
+do not check device numbers when creating incremental archives
+.It Fl \-checkpoint
+display progress messages every NUMBERth record (default 10)
+.It Fl \-checkpoint\-action Ns \= Ns Ar ACTION
+execute ACTION on each checkpoint
+.It Fl \-delay\-directory\-restore
+delay setting modification times and permissions of extracted
+.It Fl \-no\-delay\-directory\-restore
+cancel the effect of --delay-directory-restore option
+.It Fl \-exclude Ns \= Ns Ar PATTERN
+exclude files, given as a PATTERN
+.It Fl \-exclude\-backups
+exclude backup and lock files
+.It Fl \-exclude\-caches
+exclude contents of directories containing CACHEDIR.TAG,
+.It Fl \-exclude\-caches\-all
+exclude directories containing CACHEDIR.TAG
+.It Fl \-exclude\-caches\-under
+exclude everything under directories containing CACHEDIR.TAG
+.It Fl \-exclude\-tag Ns \= Ns Ar FILE
+exclude contents of directories containing FILE, except
+.It Fl \-exclude\-tag\-all Ns \= Ns Ar FILE
+exclude directories containing FILE
+.It Fl \-exclude\-tag\-under Ns \= Ns Ar FILE
+exclude everything under directories containing FILE
+.It Fl \-exclude\-vcs
+exclude version control system directories
+.It Fl f , Fl \-file Ar ARCHIVE
+use archive file or device ARCHIVE
+.It Fl F , Fl \-info\-script , Fl \-new\-volume\-script Ar NAME
+run script at end of each tape (implies -M)
+.It Fl \-force\-local
+archive file is local even if it has a colon
+.It Fl \-full\-time
+print file time to its full resolution
+.It Fl g , Fl \-listed\-incremental Ar FILE
+handle new GNU-format incremental backup
+.It Fl G , Fl \-incremental
+handle old GNU-format incremental backup
+.It Fl \-group Ns \= Ns Ar NAME
+force NAME as group for added files
+.It Fl h , Fl \-dereference
+follow symlinks; archive and dump the files they point to
+.It Fl H , Fl \-format Ar FORMAT
+create archive of the given formatFORMAT is one of the following:
+.Bl -tag -width flag
+.It Fl \-format=gnu
+GNU tar 1.13.x format
+.It Fl \-format=oldgnu
+GNU format as per tar <= 1.12
+.It Fl \-format=pax
+POSIX 1003.1-2001 (pax) format
+.It Fl \-format=posix
+same as pax
+.It Fl \-format=ustar
+POSIX 1003.1-1988 (ustar) format
+.It Fl \-format=v7
+old V7 tar format
+.El
+.It Fl \-hard\-dereference
+follow hard links; archive and dump the files they refer to
+.It Fl i , Fl \-ignore\-zeros
+ignore zeroed blocks in archive (means EOF)
+.It Fl I , Fl \-use\-compress\-program Ar PROG
+filter through PROG (must accept -d)
+.It Fl \-ignore\-case
+ignore case
+.It Fl \-no\-ignore\-case
+case sensitive matching (default)
+.It Fl \-ignore\-command\-error
+ignore exit codes of children
+.It Fl \-no\-ignore\-command\-error
+treat non-zero exit codes of children as error
+.It Fl \-ignore\-failed\-read
+do not exit with nonzero on unreadable files
+.It Fl \-index\-file Ns \= Ns Ar FILE
+send verbose output to FILE
+.It Fl j , Fl \-bzip2
+
+.It Fl J , Fl \-xz
+
+.It Fl k , Fl \-keep\-old\-files
+don't replace existing files when extracting
+.It Fl K , Fl \-starting\-file Ar MEMBER-NAME
+begin at member MEMBER-NAME in the archive
+.It Fl \-keep\-newer\-files
+don't replace existing files that are newer than their archive copies
+.It Fl l , Fl \-check\-links
+print a message if not all links are dumped
+.It Fl L , Fl \-tape\-length Ar NUMBER
+change tape after writing NUMBER x 1024 bytes
+.It Fl \-level Ns \= Ns Ar NUMBER
+dump level for created listed-incremental archive
+.It Fl \-lzip
+
+.It Fl \-lzma
+
+.It Fl \-lzop
+
+.It Fl m , Fl \-touch
+don't extract file modified time
+.It Fl M , Fl \-multi\-volume
+create/list/extract multi-volume archive
+.It Fl \-mode Ns \= Ns Ar CHANGES
+force (symbolic) mode CHANGES for added files
+.It Fl \-mtime Ns \= Ns Ar DATE-OR-FILE
+set mtime for added files from DATE-OR-FILE
+.It Fl n , Fl \-seek
+archive is seekable
+.It Fl N , Fl \-newer , Fl \-after\-date Ar DATE-OR-FILE
+only store files newer than DATE-OR-FILE
+.It Fl \-newer\-mtime Ns \= Ns Ar DATE
+compare date and time when data changed only
+.It Fl \-null
+-T reads null-terminated names, disable -C
+.It Fl \-no\-null
+disable the effect of the previous --null option
+.It Fl \-numeric\-owner
+always use numbers for user/group names
+.It Fl O , Fl \-to\-stdout
+extract files to standard output
+.It Fl \-occurrence
+process only the NUMBERth occurrence of each file in the archive;
+.It Fl \-old\-archive , Fl \-portability
+same as --format=v7
+.It Fl \-one\-file\-system
+stay in local file system when creating archive
+.It Fl \-overwrite
+overwrite existing files when extracting
+.It Fl \-overwrite\-dir
+overwrite metadata of existing directories when extracting (default)
+.It Fl \-no\-overwrite\-dir
+preserve metadata of existing directories
+.It Fl \-owner Ns \= Ns Ar NAME
+force NAME as owner for added files
+.It Fl p , Fl \-preserve\-permissions , Fl \-same\-permissions
+extract information about file permissions (default for superuser)
+.It Fl P , Fl \-absolute\-names
+don't strip leading `/'s from file names
+.It Fl \-pax\-option Ns \= Ns Ar keyword[[:]=value][,keyword[[:]=value]]...
+control pax keywords
+.It Fl \-posix
+same as --format=posix
+.It Fl \-preserve
+same as both -p and -s
+.It Fl \-quote\-chars Ns \= Ns Ar STRING
+additionally quote characters from STRING
+.It Fl \-no\-quote\-chars Ns \= Ns Ar STRING
+disable quoting for characters from STRING
+.It Fl \-quoting\-style Ns \= Ns Ar STYLE
+set name quoting style; see below for valid STYLE values
+.It Fl R , Fl \-block\-number
+show block number within archive with each message
+.It Fl \-record\-size Ns \= Ns Ar NUMBER
+NUMBER of bytes per record, multiple of 512
+.It Fl \-recursion
+recurse into directories (default)
+.It Fl \-no\-recursion
+avoid descending automatically in directories
+.It Fl \-recursive\-unlink
+empty hierarchies prior to extracting directory
+.It Fl \-remove\-files
+remove files after adding them to the archive
+.It Fl \-restrict
+disable use of some potentially harmful options
+.It Fl \-rmt\-command Ns \= Ns Ar COMMAND
+use given rmt COMMAND instead of rmt
+.It Fl \-rsh\-command Ns \= Ns Ar COMMAND
+use remote COMMAND instead of rsh
+.It Fl s , Fl \-preserve\-order , Fl \-same\-order
+sort names to extract to match archive
+.It Fl S , Fl \-sparse
+handle sparse files efficiently
+.It Fl \-same\-owner
+try extracting files with the same ownership as exists in the archive (default for superuser)
+.It Fl \-no\-same\-owner
+extract files as yourself (default for ordinary users)
+.It Fl \-no\-same\-permissions
+apply the user's umask when extracting permissions from the archive (default for ordinary users)
+.It Fl \-no\-seek
+archive is not seekable
+.It Fl \-show\-defaults
+show tar defaults
+.It Fl \-show\-omitted\-dirs
+when listing or extracting, list each directory that does not match search criteria
+.It Fl \-show\-transformed\-names , Fl \-show\-stored\-names
+show file or archive names after transformation
+.It Fl \-sparse\-version Ns \= Ns Ar MAJOR[.MINOR]
+set version of the sparse format to use (implies --sparse)
+.It Fl \-strip\-components Ns \= Ns Ar NUMBER
+strip NUMBER leading components from file names on extraction
+.It Fl \-suffix Ns \= Ns Ar STRING
+backup before removal, override usual suffix ('~' unless overridden by environment variable SIMPLE_BACKUP_SUFFIX)
+.It Fl T , Fl \-files\-from Ar FILE
+get names to extract or create from FILE
+.It Fl \-to\-command Ns \= Ns Ar COMMAND
+pipe extracted files to another program
+.It Fl \-totals
+print total bytes after processing the archive;
+.It Fl \-transform , Fl \-xform Ar EXPRESSION
+use sed replace EXPRESSION to transform file names
+.It Fl U , Fl \-unlink\-first
+remove each file prior to extracting over it
+.It Fl \-unquote
+unquote filenames read with -T (default)
+.It Fl \-no\-unquote
+do not unquote filenames read with -T
+.It Fl \-utc
+print file modification times in UTC
+.It Fl v , Fl \-verbose
+verbosely list files processed
+.It Fl V , Fl \-label Ar TEXT
+create archive with volume name TEXT; at list/extract time, use TEXT as a globbing pattern for volume name
+.It Fl \-volno\-file Ns \= Ns Ar FILE
+use/update the volume number in FILE
+.It Fl w , Fl \-interactive , Fl \-confirmation
+ask for confirmation for every action
+.It Fl W , Fl \-verify
+attempt to verify the archive after writing it
+.It Fl \-warning Ns \= Ns Ar KEYWORD
+warning control
+.It Fl \-wildcards
+use wildcards (default for exclusion)
+.It Fl \-wildcards\-match\-slash
+wildcards match `/' (default for exclusion)
+.It Fl \-no\-wildcards\-match\-slash
+wildcards do not match `/'
+.It Fl \-no\-wildcards
+verbatim string matching
+.It Fl X , Fl \-exclude\-from Ar FILE
+exclude patterns listed in FILE
+.It Fl z , Fl \-gzip , Fl \-gunzip Fl \-ungzip
+
+.It Fl Z , Fl \-compress , Fl \-uncompress
+
+.El
+.Sh ENVIRONMENT
+The behavior of tar is controlled by the following environment variables,
+among others:
+.Bl -tag -width Ds
+.It Ev SIMPLE_BACKUP_SUFFIX
+Backup prefix to use when extracting, if
+.Fl \-suffix
+is not specified.
+The backup suffix defaults to `~' if neither is specified.
+.It Ev TAR_OPTIONS
+Options to prepend to those specified on the command line, separated by
+whitespace. Embedded backslashes may be used to escape whitespace or
+backslashes within an option.
+.It Ev TAPE
+Device or file to use for the archive if
+.Fl \-file
+is not specified.
+If this environment variable is unset, use stdin or stdout instead.
+.It Ev TAR_LONGLINK_100
+.El
+.Sh EXAMPLES
+Create archive.tar from files foo and bar.
+.Bd -literal -offset indent -compact
+tar \-cf archive.tar foo bar
+.Ed
+List all files in archive.tar verbosely.
+.Bd -literal -offset indent -compact
+tar \-tvf archive.tar
+.Ed
+Extract all files from archive.tar.
+.Bd -literal -offset indent -compact
+tar \-xf archive.tar
+.Ed
+.Sh SEE ALSO
+.\" libarchive
+.Xr tar 5 ,
+.\" man-pages
+.Xr symlink 7 ,
+.Xr rmt 8
+.Sh HISTORY
+The
+.Nm tar
+command appeared in
+.At v7 .
+.Sh BUGS
+The GNU folks, in general, abhor man pages, and create info documents instead.
+Unfortunately, the info document describing tar is licensed under the GFDL with
+invariant cover texts, which makes it impossible to include any text
+from that document in this man page.
+Most of the text in this document was automatically extracted from the usage
+text in the source.
+It may not completely describe all features of the program.
diff --git a/testing/tar/tar.install b/testing/tar/tar.install
new file mode 100644
index 000000000..8de1f9766
--- /dev/null
+++ b/testing/tar/tar.install
@@ -0,0 +1,21 @@
+infodir=usr/share/info
+filelist=(tar.info tar.info-1 tar.info-2)
+
+post_install() {
+ [ -x usr/bin/install-info ] || return 0
+ for file in ${filelist[@]}; do
+ install-info $infodir/$file.gz $infodir/dir 2> /dev/null
+ done
+}
+
+post_upgrade() {
+ post_install $1
+}
+
+pre_remove() {
+ [ -x usr/bin/install-info ] || return 0
+ for file in ${filelist[@]}; do
+ install-info --delete $infodir/$file.gz $infodir/dir 2> /dev/null
+ done
+}
+
diff --git a/testing/texinfo/PKGBUILD b/testing/texinfo/PKGBUILD
new file mode 100644
index 000000000..b5120227e
--- /dev/null
+++ b/testing/texinfo/PKGBUILD
@@ -0,0 +1,31 @@
+# $Id: PKGBUILD 141955 2011-11-03 14:24:19Z allan $
+# Maintainer: Allan McRae <allan@archlinux.org>
+# Contributor: Tom Newsom <Jeepster@gmx.co.uk>
+
+pkgname=texinfo
+pkgver=4.13a
+pkgrel=6
+pkgdesc="Utilities to work with and produce manuals, ASCII text, and on-line documentation from a single source file"
+arch=('i686' 'x86_64')
+url="http://www.gnu.org/software/texinfo/"
+license=('GPL3')
+groups=('base')
+depends=('ncurses' 'findutils' 'gzip')
+install=texinfo.install
+source=(ftp://ftp.gnu.org/pub/gnu/${pkgname}/${pkgname}-${pkgver}.tar.gz{,.sig})
+md5sums=('71ba711519209b5fb583fed2b3d86fcb'
+ 'db2ca82c831684cd7cef181234017c46')
+
+build() {
+ cd ${srcdir}/${pkgname}-4.13
+ ./configure --prefix=/usr
+ make
+}
+
+package() {
+ cd ${srcdir}/${pkgname}-4.13
+ make DESTDIR=${pkgdir} install
+
+ # fix this here as it prevents make from trying to rebuild manual pages
+ sed -i 's#A-z#A-Za-z#' ${pkgdir}/usr/bin/texi2dvi
+}
diff --git a/testing/texinfo/texinfo.install b/testing/texinfo/texinfo.install
new file mode 100644
index 000000000..f1554e4f4
--- /dev/null
+++ b/testing/texinfo/texinfo.install
@@ -0,0 +1,21 @@
+infodir=usr/share/info
+filelist=(info.info info-stnd.info texinfo texinfo-1 texinfo-2 texinfo-3)
+
+post_install() {
+ # Scan *all* info files on install
+ for file in $(find $infodir -type f ! -name dir); do
+ install-info $file $infodir/dir 2> /dev/null
+ done
+}
+
+post_upgrade() {
+ for file in ${filelist[@]}; do
+ install-info $infodir/$file.gz $infodir/dir 2> /dev/null
+ done
+}
+
+pre_remove() {
+ for file in ${filelist[@]}; do
+ install-info --delete $infodir/$file.gz $infodir/dir 2> /dev/null
+ done
+}
diff --git a/testing/which/PKGBUILD b/testing/which/PKGBUILD
new file mode 100644
index 000000000..a5f893aaa
--- /dev/null
+++ b/testing/which/PKGBUILD
@@ -0,0 +1,27 @@
+# $Id: PKGBUILD 141957 2011-11-03 14:30:48Z allan $
+# Maintainer: Allan McRae <allan@archlinux.org>
+# Contributor: Andreas Radke <andyrtr@archlinux.org>
+
+pkgname=which
+pkgver=2.20
+pkgrel=5
+pkgdesc="A utility to show the full path of commands"
+arch=('i686' 'x86_64')
+url="http://www.xs4all.nl/~carlo17/which"
+license=('GPL3')
+groups=('base')
+depends=('glibc' 'sh')
+install=which.install
+source=(http://www.xs4all.nl/~carlo17/$pkgname/$pkgname-$pkgver.tar.gz)
+md5sums=('95be0501a466e515422cde4af46b2744')
+
+build() {
+ cd $srcdir/$pkgname-$pkgver
+ ./configure --prefix=/usr
+ make
+}
+
+package() {
+ cd $srcdir/$pkgname-$pkgver
+ make DESTDIR=$pkgdir install
+}
diff --git a/testing/which/which.install b/testing/which/which.install
new file mode 100644
index 000000000..167e2506e
--- /dev/null
+++ b/testing/which/which.install
@@ -0,0 +1,20 @@
+infodir=/usr/share/info
+filelist=(which.info)
+
+post_install() {
+ [ -x usr/bin/install-info ] || return 0
+ for file in ${filelist[@]}; do
+ install-info $infodir/$file.gz $infodir/dir 2> /dev/null
+ done
+}
+
+post_upgrade() {
+ post_install $1
+}
+
+pre_remove() {
+ [ -x usr/bin/install-info ] || return 0
+ for file in ${filelist[@]}; do
+ install-info --delete $infodir/$file $infodir/dir 2> /dev/null
+ done
+}
diff --git a/testing/xfsprogs/PKGBUILD b/testing/xfsprogs/PKGBUILD
new file mode 100644
index 000000000..c062147da
--- /dev/null
+++ b/testing/xfsprogs/PKGBUILD
@@ -0,0 +1,29 @@
+# $Id: PKGBUILD 141990 2011-11-03 20:33:03Z tpowa $
+# Maintainer: Paul Mattal <paul@archlinux.org>
+pkgname=xfsprogs
+pkgver=3.1.6
+pkgrel=1
+pkgdesc="XFS filesystem utilities"
+arch=('i686' 'x86_64')
+license=('LGPL')
+url="http://oss.sgi.com/projects/xfs/"
+groups=('base')
+depends=('util-linux-ng>=2.16')
+options=('!makeflags' '!libtool')
+# We mirror the sources as upstream tends to move them once a new release is out
+source=("ftp://ftp.archlinux.org/other/xfsprogs/${pkgname}-${pkgver}.tar.gz")
+md5sums=('fbd2c1c5abed4b11047bea6ce53bc6e4')
+
+build() {
+ cd "${srcdir}/${pkgname}-${pkgver}"
+ export OPTIMIZER="-march=${CARCH/_/-} -O1"
+ export DEBUG=-DNDEBUG
+ make
+}
+
+package() {
+ cd "${srcdir}/${pkgname}-${pkgver}"
+ make DIST_ROOT="${pkgdir}" install install-dev
+ chown -R root $pkgdir
+ chgrp -R root $pkgdir
+}
diff --git a/testing/xinetd/PKGBUILD b/testing/xinetd/PKGBUILD
new file mode 100644
index 000000000..5a2935c13
--- /dev/null
+++ b/testing/xinetd/PKGBUILD
@@ -0,0 +1,43 @@
+# $Id: PKGBUILD 141988 2011-11-03 20:19:56Z tpowa $
+# Maintainer:
+# Contributor: Judd <jvinet@zeroflux.org>
+
+pkgname=xinetd
+pkgver=2.3.14
+pkgrel=8
+pkgdesc="A secure replacement for inetd"
+arch=('i686' 'x86_64')
+url="http://www.xinetd.org/"
+license=('custom')
+optdepends=('perl: for xconv.pl script')
+backup=('etc/xinetd.conf' 'etc/xinetd.d/servers' 'etc/xinetd.d/services')
+source=(http://www.xinetd.org/xinetd-$pkgver.tar.gz
+ xinetd.conf
+ xinetd
+ servers
+ services)
+md5sums=('567382d7972613090215c6c54f9b82d9'
+ 'f109f699a07bc8cfb5791060f5e87f9e'
+ 'ea37a2794f202e6b953d9b6956dad16a'
+ '21f47b4aa20921cfaddddd9f9a407f81'
+ '9fa2061dc7dd738c8424251deb86f81e')
+
+build() {
+ cd $srcdir/$pkgname-$pkgver
+ sed -i "s#${prefix}/man#${prefix}/share/man#" configure
+ ./configure --prefix=/usr --without-libwrap
+ make
+}
+
+package() {
+ cd $srcdir/$pkgname-$pkgver
+ make prefix=$pkgdir/usr install
+
+ install -Dm755 $srcdir/xinetd $pkgdir/etc/rc.d/xinetd
+ install -Dm644 $srcdir/xinetd.conf $pkgdir/etc/xinetd.conf
+ install -Dm644 $srcdir/servers $pkgdir/etc/xinetd.d/servers
+ install -Dm644 $srcdir/services $pkgdir/etc/xinetd.d/services
+
+ # install license
+ install -Dm644 COPYRIGHT $pkgdir/usr/share/licenses/$pkgname/COPYRIGHT
+}
diff --git a/testing/xinetd/servers b/testing/xinetd/servers
new file mode 100644
index 000000000..f064c8d7a
--- /dev/null
+++ b/testing/xinetd/servers
@@ -0,0 +1,10 @@
+service servers
+{
+ type = INTERNAL UNLISTED
+ port = 9099
+ socket_type = stream
+ protocol = tcp
+ wait = no
+ disable = yes
+ only_from = 127.0.0.1
+}
diff --git a/testing/xinetd/services b/testing/xinetd/services
new file mode 100644
index 000000000..4ea304c4f
--- /dev/null
+++ b/testing/xinetd/services
@@ -0,0 +1,10 @@
+service services
+{
+ type = INTERNAL UNLISTED
+ port = 9098
+ socket_type = stream
+ protocol = tcp
+ wait = no
+ disable = yes
+ only_from = 127.0.0.1
+}
diff --git a/testing/xinetd/xinetd b/testing/xinetd/xinetd
new file mode 100755
index 000000000..4b8fa369a
--- /dev/null
+++ b/testing/xinetd/xinetd
@@ -0,0 +1,38 @@
+#!/bin/bash
+
+. /etc/rc.conf
+. /etc/rc.d/functions
+
+PID=`pidof -o %PPID /usr/sbin/xinetd`
+case "$1" in
+ start)
+ stat_busy "Starting xinetd"
+ [ -z "$PID" ] && /usr/sbin/xinetd -stayalive -pidfile /var/run/xinetd.pid
+ if [ $? -gt 0 ]; then
+ stat_fail
+ else
+ echo $PID > /var/run/xinetd.pid
+ add_daemon xinetd
+ stat_done
+ fi
+ ;;
+ stop)
+ stat_busy "Stopping xinetd"
+ [ ! -z "$PID" ] && kill $PID &> /dev/null
+ if [ $? -gt 0 ]; then
+ stat_fail
+ else
+ rm -f /var/run/xinetd.pid
+ rm_daemon xinetd
+ stat_done
+ fi
+ ;;
+ restart)
+ $0 stop
+ sleep 1
+ $0 start
+ ;;
+ *)
+ echo "usage: $0 {start|stop|restart}"
+esac
+exit 0
diff --git a/testing/xinetd/xinetd.conf b/testing/xinetd/xinetd.conf
new file mode 100644
index 000000000..b15d9f649
--- /dev/null
+++ b/testing/xinetd/xinetd.conf
@@ -0,0 +1,14 @@
+#
+# /etc/xinetd.conf
+#
+
+defaults
+{
+ instances = 60
+ log_type = SYSLOG authpriv
+ log_on_success = HOST PID
+ log_on_failure = HOST
+ cps = 25 30
+}
+
+includedir /etc/xinetd.d