diff options
author | Justin Lecher <jlec@gentoo.org> | 2012-03-16 10:09:01 +0100 |
---|---|---|
committer | Justin Lecher <jlec@gentoo.org> | 2012-03-16 10:09:01 +0100 |
commit | e14564ebed390ee007fe8b73b3d50aa971a8eda8 (patch) | |
tree | bed718f3397b913fd726195d4b7d53b72ba653ec | |
parent | Merge branch 'master' of git+ssh://git.overlays.gentoo.org/proj/sci (diff) | |
parent | Merge branch 'master' of git+ssh://git.overlays.gentoo.org/proj/sci (diff) | |
download | sci-e14564ebed390ee007fe8b73b3d50aa971a8eda8.tar.gz sci-e14564ebed390ee007fe8b73b3d50aa971a8eda8.tar.bz2 sci-e14564ebed390ee007fe8b73b3d50aa971a8eda8.zip |
Merge branch 'master' of git+ssh://git.overlays.gentoo.org/proj/sci
* 'master' of git+ssh://git.overlays.gentoo.org/proj/sci: (22 commits)
sci-biology/mosaik: masking mosaik-2.1.33 mosaik-9999
Add a band aid to eselect's alternative2 framework for prefix
sci-biology/sra_sdk-2.1.9: added missing insinto
Final fixes for OS X in gotoblas2
correct small error
switch to multilib in openblas, gotoblas2 will come later as it needs another fix
[net-misc/dhcp] Import more patches to make also client work
sci-biology/sra_sdk-2.1.9: use EAPI=4 hoping it will handle symlinks in bin/ and lib/ directories properly (but it does not, bug #408199
[net-misc/dhcp] Import patches from F17
sys-cluster/blcr: added ' || die' calls
[sci-mathematics/polymake] add missing metadata.xml
[net-misc/dhcp] once again
[net-misc/dhcp] once again
[net-misc/dhcp] wrong one =D
[net-misc/dhcp] Opps fix patch
[net-misc/dhcp] Enable infiniband in new version
sci-biology/mosaik: version bump for 2.1.33 and GIT HEAD, neither compiles so far; upstream re-contacted
version bump, added the pdf documentation to SRC_URI, the compile process leaks through many 'Fastq.cpp:224: error: conditional expression between distinct pointer types 'gzFile_s*' and 'FILE*' lacks a cast' messages in Fastq.cpp:224, Fastq.cpp:226, Fasta.cpp:258, Fasta.cpp:260, Fasta.cpp:266, Fasta.cpp:268, but the package itself installs and executes at least
add *-macos prefix support to gotblas2
Add *-macos prefix support to openblas
...
66 files changed, 2423 insertions, 3342 deletions
diff --git a/app-admin/eselect/ChangeLog b/app-admin/eselect/ChangeLog index eb42fad72..bb06deb76 100644 --- a/app-admin/eselect/ChangeLog +++ b/app-admin/eselect/ChangeLog @@ -2,6 +2,10 @@ # Copyright 1999-2012 Gentoo Foundation; Distributed under the GPL v2 # $Header: /var/cvsroot/gentoo-x86/app-admin/eselect/ChangeLog,v 1.179 2011/01/22 21:38:52 ulm Exp $ + 15 Mar 2012; François Bissey <francois.bissey@canterbury.ac.nz> + eselect-1.3.1-r1.ebuild: + add a band aid for prefix + *eselect-1.3.1-r1 (13 Feb 2012) 13 Feb 2012; Sébastien Fabbro <bicatali@gentoo.org> -eselect-1.3-r2.ebuild, diff --git a/app-admin/eselect/eselect-1.3.1-r1.ebuild b/app-admin/eselect/eselect-1.3.1-r1.ebuild index 7ca2190cc..d9f45fcb7 100644 --- a/app-admin/eselect/eselect-1.3.1-r1.ebuild +++ b/app-admin/eselect/eselect-1.3.1-r1.ebuild @@ -59,6 +59,12 @@ src_install() { keepdir /var/lib/gentoo/news fowners root:portage /var/lib/gentoo/news || die fperms g+w /var/lib/gentoo/news || die + + # band aid for prefix + if use prefix; then + cd "${ED}"/usr/share/eselect/libs + sed -i "s:ALTERNATIVESDIR_ROOTLESS=\"${EPREFIX}:ALTERNATIVESDIR_ROOTLESS=\":" alternatives.bash + fi } pkg_postinst() { diff --git a/net-misc/dhcp/ChangeLog b/net-misc/dhcp/ChangeLog index d743d0076..0b811b859 100644 --- a/net-misc/dhcp/ChangeLog +++ b/net-misc/dhcp/ChangeLog @@ -1,11 +1,61 @@ # ChangeLog for net-misc/dhcp -# Copyright 1999-2011 Gentoo Foundation; Distributed under the GPL v2 +# Copyright 1999-2012 Gentoo Foundation; Distributed under the GPL v2 # $Header: $ - 25 Jun 2011; Justin Lecher <jlec@gentoo.org> dhcp-4.2.1_p1-r1.ebuild, - metadata.xml: - RDEPEND is not explicitly assigned -> fixed +*dhcp-4.2.3_p2-r1 (15 Mar 2012) - 24 Jun 2011; Justin Lecher <jlec@gentoo.org> dhcp-4.2.1_p1-r1.ebuild: - Sort inherit and/or USE + 15 Mar 2012; Alexey Shvetsov <alexxy@gentoo.org> +dhcp-4.2.3_p2-r1.ebuild, + +files/dhcp-4.2.0-PPP.patch, +files/dhcp-4.2.2-xen-checksum.patch, + +files/dhcp-4.2.3-options.patch, -dhcp-4.2.3_p1-r1.ebuild: + [net-misc/dhcp] Import more patches to make also client work + + 15 Mar 2012; Alexey Shvetsov <alexxy@gentoo.org> + +files/dhcp-4.2.2-gpxe-cid.patch, +files/dhcp-4.2.2-improved-xid.patch, + +files/dhcp-4.2.2-lpf-ib.patch, -files/dhcp-4.2.0-ib-options.patch, + -files/dhcp-4.2.0-improved-xid.patch, -files/dhcp-4.2.0-lpf-ib.patch, + dhcp-4.2.3_p1-r1.ebuild: + [net-misc/dhcp] Import patches from F17 + + 15 Mar 2012; Alexey Shvetsov <alexxy@gentoo.org> + files/dhcp-4.2.0-ib-options.patch: + [net-misc/dhcp] once again + + 15 Mar 2012; Alexey Shvetsov <alexxy@gentoo.org> + files/dhcp-4.2.0-ib-options.patch: + [net-misc/dhcp] once again + + 15 Mar 2012; Alexey Shvetsov <alexxy@gentoo.org> + files/dhcp-4.2.0-ib-options.patch: + [net-misc/dhcp] wrong one =D + + 15 Mar 2012; Alexey Shvetsov <alexxy@gentoo.org> + files/dhcp-4.2.0-ib-options.patch: + [net-misc/dhcp] Opps fix patch + +*dhcp-4.2.3_p1-r1 (15 Mar 2012) + + 15 Mar 2012; Alexey Shvetsov <alexxy@gentoo.org> +dhcp-4.2.3_p1-r1.ebuild, + +files/dhcp-4.2.0-ib-options.patch, +files/dhcp-4.2.2-bind-build-flags.patch, + +files/dhcp-4.2.2-bind-disable.patch, + +files/dhcp-4.2.2-bind-parallel-build.patch, + +files/dhcp-4.2.2-dhclient-resolvconf.patch, + +files/dhcp-4.2.2-dhclient-stdin-conf.patch, + +files/dhcp-4.2.2-nogateway.patch, +files/dhcpd.conf2, +files/dhcpd.init5, + -ChangeLog, -dhcp-4.2.1_p1-r1.ebuild, -files/dhcp-3.0-paranoia.patch, + -files/dhcp-3.0.2-gmake.patch, -files/dhcp-3.0.3-dhclient-hostname.patch, + -files/dhcp-3.0.3-dhclient-metric.patch, -files/dhcp-3.0.3-dhclient-mtu.patch, + -files/dhcp-3.0.3-dhclient-ntp.patch, -files/dhcp-3.0.3-libdst.patch, + -files/dhcp-3.0.3-no_isc_blurb.patch, + -files/dhcp-3.0.4-dhclient-stdin-conf.patch, + -files/dhcp-3.0.5-bpf-nofallback.patch, + -files/dhcp-3.1.0a1-dhclient-resolvconf.patch, + -files/dhcp-3.1.2_p1-CVE-2009-1892.patch, + -files/dhcp-3.1.3-dhclient-no-down.patch, + -files/dhcp-4.0.1-dhclient-stdin-conf.patch, -files/dhcp-4.2.0-options.patch, + -files/dhcp-4.2.0-xen-checksum.patch, + -files/dhcp-4.2.1-dhclient-resolvconf.patch, + -files/dhcp-4.2.1-nogateway.patch, -files/dhcpd.conf, -files/dhcpd.init3, + -files/dhcrelay.init, files/dhcp-4.2.0-improved-xid.patch, + files/dhcp-4.2.0-lpf-ib.patch, metadata.xml: + [net-misc/dhcp] Enable infiniband in new version diff --git a/net-misc/dhcp/Manifest b/net-misc/dhcp/Manifest index 2f0323022..5e3658ed5 100644 --- a/net-misc/dhcp/Manifest +++ b/net-misc/dhcp/Manifest @@ -1 +1 @@ -DIST dhcp-4.2.1-P1.tar.gz 8797289 RMD160 e3607828ea12eb718c0877430f9607d336d78c36 SHA1 7767019313b4128357054a1eb053c66799831dd6 SHA256 6cd5e06512c53ad43d71400f39071ce0bd07f074e416c727d5bc7e5949ec55ec +DIST dhcp-4.2.3-P2.tar.gz 9527546 SHA256 5cf7ae2cad9c4ca0103748b2476ec8ea78484e408f8fe597e4e0a4afb051b469 SHA512 539000628cdd2bc3b092aac545434dadbc74908a67b73adafcd4800ef65d69a004ea2f6a9964a11be00020b683febd071baaa0d371ca08491321bf3264334e2a WHIRLPOOL a824aa30121bfa6d4f41148d18028ad4c459a803cfccf8ce62f4704be0e6ec4d96736dd1a5b7a789a7c9ddb6afcbb97cc4bb02c8a325a0657ced7e03438c01b4 diff --git a/net-misc/dhcp/dhcp-4.2.1_p1-r1.ebuild b/net-misc/dhcp/dhcp-4.2.3_p2-r1.ebuild index c7966f92b..35069f79f 100644 --- a/net-misc/dhcp/dhcp-4.2.1_p1-r1.ebuild +++ b/net-misc/dhcp/dhcp-4.2.3_p2-r1.ebuild @@ -1,10 +1,10 @@ -# Copyright 1999-2011 Gentoo Foundation +# Copyright 1999-2012 Gentoo Foundation # Distributed under the terms of the GNU General Public License v2 -# $Header: /var/cvsroot/gentoo-x86/net-misc/dhcp/dhcp-4.2.1_p1.ebuild,v 1.2 2011/04/15 21:40:50 ulm Exp $ +# $Header: /var/cvsroot/gentoo-x86/net-misc/dhcp/dhcp-4.2.3_p1.ebuild,v 1.7 2012/01/01 15:03:13 armin76 Exp $ EAPI="2" -inherit eutils +inherit eutils toolchain-funcs MY_PV="${PV//_alpha/a}" MY_PV="${MY_PV//_beta/b}" @@ -13,24 +13,32 @@ MY_PV="${MY_PV//_p/-P}" MY_P="${PN}-${MY_PV}" DESCRIPTION="ISC Dynamic Host Configuration Protocol (DHCP) client/server" HOMEPAGE="http://www.isc.org/products/DHCP" -SRC_URI="ftp://ftp.isc.org/isc/dhcp/${MY_P}.tar.gz" +SRC_URI="ftp://ftp.isc.org/isc/dhcp/${MY_P}.tar.gz + ftp://ftp.isc.org/isc/dhcp/${MY_PV}/${MY_P}.tar.gz" LICENSE="as-is BSD" SLOT="0" -KEYWORDS="~alpha ~amd64 ~arm ~hppa ~mips ~ppc ~ppc64 ~s390 ~sh ~sparc ~sparc-fbsd ~x86 ~x86-fbsd" -IUSE="+client infiniband ipv6 kernel_linux ldap selinux +server ssl vim-syntax" +KEYWORDS="~alpha ~amd64 ~arm ~hppa ~mips ~ppc ~ppc64 ~s390 ~sh ~sparc ~x86 ~sparc-fbsd ~x86-fbsd" +IUSE="+client ipv6 infiniband kernel_linux ldap selinux +server ssl vim-syntax" DEPEND="selinux? ( sec-policy/selinux-dhcp ) kernel_linux? ( sys-apps/net-tools ) - vim-syntax? ( app-vim/dhcpd-syntax ) ldap? ( net-nds/openldap ssl? ( dev-libs/openssl ) )" -RDEPEND="${DEPEND}" +RDEPEND="${DEPEND} + vim-syntax? ( app-vim/dhcpd-syntax )" S="${WORKDIR}/${MY_P}" +src_unpack() { + unpack ${A} + # handle local bind hell + cd "${S}"/bind + unpack ./bind.tar.gz +} + src_prepare() { # Gentoo patches - these will probably never be accepted upstream # Fix some permission issues @@ -38,28 +46,31 @@ src_prepare() { # Enable dhclient to equery NTP servers epatch "${FILESDIR}"/${PN}-4.0-dhclient-ntp.patch # resolvconf support in dhclient-script - epatch "${FILESDIR}"/${PN}-4.2.1-dhclient-resolvconf.patch + epatch "${FILESDIR}"/${PN}-4.2.2-dhclient-resolvconf.patch # Stop downing the interface on Linux as that breaks link daemons # such as wpa_supplicant and netplug epatch "${FILESDIR}"/${PN}-3.0.3-dhclient-no-down.patch epatch "${FILESDIR}"/${PN}-4.2.0-errwarn-message.patch # Enable dhclient to get extra configuration from stdin - epatch "${FILESDIR}"/${PN}-4.0.1-dhclient-stdin-conf.patch - epatch "${FILESDIR}"/${PN}-4.2.1-nogateway.patch #265531 + epatch "${FILESDIR}"/${PN}-4.2.2-dhclient-stdin-conf.patch + epatch "${FILESDIR}"/${PN}-4.2.2-nogateway.patch #265531 # NetworkManager support patches # If they fail to apply to future versions they will be dropped # Add dbus support to dhclient epatch "${FILESDIR}"/${PN}-3.0.3-dhclient-dbus.patch - # Infiniband stuff + # infiniband patches if use infiniband; then - epatch "${FILESDIR}/${PN}-4.2.0-improved-xid.patch" - epatch "${FILESDIR}/${PN}-lpf-ib.patch" - epatch "${FILESDIR}/${PN}-options.patch" - epatch "${FILESDIR}/${PN}-xen-checksum.patch" + epatch "${FILESDIR}"/${PN}-4.2.3-options.patch + epatch "${FILESDIR}"/${PN}-4.2.2-xen-checksum.patch + epatch "${FILESDIR}"/${PN}-4.2.0-PPP.patch + epatch "${FILESDIR}"/${PN}-4.2.2-lpf-ib.patch + epatch "${FILESDIR}"/${PN}-4.2.2-improved-xid.patch + epatch "${FILESDIR}"/${PN}-4.2.2-gpxe-cid.patch fi + # Brand the version with Gentoo sed -i \ -e "/VERSION=/s:'$: Gentoo-${PR}':" \ @@ -71,7 +82,7 @@ src_prepare() { -e 's,/etc/dhclient-enter-hooks,/etc/dhcp/dhclient-enter-hooks,g' \ client/scripts/* || die - # No need for the linux script to force bash, #158540. + # No need for the linux script to force bash #158540 sed -i -e 's,#!/bin/bash,#!/bin/sh,' client/scripts/linux || die # Quiet the freebsd logger a little @@ -103,24 +114,70 @@ src_prepare() { fi # Now remove the non-english docs so there are no errors later rm -rf doc/ja_JP.eucJP + + # make the bind build work + binddir=${S}/bind + cd "${binddir}" || die + cat <<-EOF > bindvar.tmp + binddir=${binddir} + GMAKE=${MAKE:-gmake} + EOF + epatch "${FILESDIR}"/${PN}-4.2.2-bind-disable.patch + cd bind-*/ + epatch "${FILESDIR}"/${PN}-4.2.2-bind-parallel-build.patch #380717 + epatch "${FILESDIR}"/${PN}-4.2.2-bind-build-flags.patch } src_configure() { + # bind defaults to stupid `/usr/bin/ar` + tc-export AR BUILD_CC + export ac_cv_path_AR=${AR} + + # this is tested for by the bind build system, and can cause trouble + # when cross-building; since dhcp itself doesn't make use of libcap, + # simply disable it. + export ac_cv_lib_cap_cap_set_proc=no + + # Use FHS sane paths ... some of these have configure options, + # but not all, so just do it all here. + local e="/etc/dhcp" r="/var/run/dhcp" l="/var/lib/dhcp" + cat <<-EOF >> includes/site.h + #define _PATH_DHCPD_CONF "${e}/dhcpd.conf" + #define _PATH_DHCLIENT_CONF "${e}/dhclient.conf" + #define _PATH_DHCPD_DB "${l}/dhcpd.leases" + #define _PATH_DHCPD6_DB "${l}/dhcpd6.leases" + #define _PATH_DHCLIENT_DB "${l}/dhclient.leases" + #define _PATH_DHCLIENT6_DB "${l}/dhclient6.leases" + #define _PATH_DHCPD_PID "${r}/dhcpd.pid" + #define _PATH_DHCPD6_PID "${r}/dhcpd6.pid" + #define _PATH_DHCLIENT_PID "${r}/dhcpclient.pid" + #define _PATH_DHCLIENT6_PID "${r}/dhcpclient6.pid" + #define _PATH_DHCRELAY_PID "${r}/dhcrelay.pid" + #define _PATH_DHCRELAY6_PID "${r}/dhcrelay6.pid" + EOF + econf \ --enable-paranoia \ - --sysconfdir=/etc/dhcp \ - --with-cli-pid-file=/var/run/dhcp/dhclient.pid \ - --with-cli-lease-file=/var/lib/dhcp/dhclient.leases \ - --with-cli6-pid-file=/var/run/dhcp/dhclient6.pid \ - --with-cli6-lease-file=/var/lib/dhcp/dhclient6.leases \ - --with-srv-pid-file=/var/run/dhcp/dhcpd.pid \ - --with-srv-lease-file=/var/lib/dhcp/dhcpd.leases \ - --with-srv6-pid-file=/var/run/dhcp/dhcpd6.pid \ - --with-srv6-lease-file=/var/lib/dhcp/dhcpd6.leases \ - --with-relay-pid-file=/var/run/dhcp/dhcrelay.pid \ + --enable-early-chroot \ + --sysconfdir=${e} \ $(use_enable ipv6 dhcpv6) \ $(use_with ldap) \ $(use ldap && use_with ssl ldapcrypto || echo --without-ldapcrypto) + + # configure local bind cruft. symtable option requires + # perl and we don't want to require that #383837. + cd bind/bind-*/ || die + eval econf \ + $(sed -n '/ [.].configure /{s:^[^-]*::;s:>.*::;p}' ../Makefile) \ + --disable-symtable \ + --without-make-clean +} + +src_compile() { + # build local bind cruft first + emake -C bind/bind-*/lib/export install || die + # then build standard dhcp code + emake || die } src_install() { @@ -140,11 +197,6 @@ src_install() { else newexe "${S}"/client/scripts/freebsd dhclient-script || die fi - - insinto /etc/dhcp - doins client/dhclient.conf || die - - keepdir /var/lib/dhclient fi if [[ -e server/dhcpd ]] ; then @@ -154,35 +206,36 @@ src_install() { dosbin contrib/ldap/dhcpd-conf-to-ldap || die fi - newinitd "${FILESDIR}"/dhcpd.init3 dhcpd - newinitd "${FILESDIR}"/dhcrelay.init2 dhcrelay - newconfd "${FILESDIR}"/dhcpd.conf dhcpd - newconfd "${FILESDIR}"/dhcrelay.conf dhcrelay - - insinto /etc/dhcp - doins server/dhcpd.conf || die - - keepdir /var/{lib,run}/dhcp + newinitd "${FILESDIR}"/dhcpd.init5 dhcpd || die + newconfd "${FILESDIR}"/dhcpd.conf2 dhcpd || die + newinitd "${FILESDIR}"/dhcrelay.init2 dhcrelay || die + newconfd "${FILESDIR}"/dhcrelay.conf dhcrelay || die fi + + # the default config files aren't terribly useful #384087 + sed -i '/^[^#]/s:^:#:' "${D}"/etc/dhcp/*.conf || die } pkg_preinst() { enewgroup dhcp enewuser dhcp -1 -1 /var/lib/dhcp dhcp - # Keep the user files over the sample ones - local f - for f in dhclient dhcpd ; do - f="/etc/dhcp/${f}.conf" + # Keep the user files over the sample ones. The + # hashing is to ignore the crappy defaults #384087. + local f h + for f in dhclient:da7c8496a96452190aecf9afceef4510 dhcpd:10979e7b71134bd7f04d2a60bd58f070 ; do + h=${f#*:} + f="/etc/dhcp/${f%:*}.conf" if [ -e "${ROOT}"${f} ] ; then - cp -p "${ROOT}"${f} "${D}"${f} + case $(md5sum "${ROOT}"${f}) in + ${h}*) ;; + *) cp -p "${ROOT}"${f} "${D}"${f};; + esac fi done } pkg_postinst() { - chown -R dhcp:dhcp "${ROOT}"/var/{lib,run}/dhcp - if [[ -e "${ROOT}"/etc/init.d/dhcp ]] ; then ewarn ewarn "WARNING: The dhcp init script has been renamed to dhcpd" @@ -190,42 +243,4 @@ pkg_postinst() { ewarn "and dhcp should be removed from the default runlevel" ewarn fi - - einfo "You can edit /etc/conf.d/dhcpd to customize dhcp settings." - einfo - einfo "If you would like to run dhcpd in a chroot, simply configure the" - einfo "DHCPD_CHROOT directory in /etc/conf.d/dhcpd and then run:" - einfo " emerge --config =${PF}" -} - -pkg_config() { - local CHROOT="$( - sed -n -e 's/^[[:blank:]]\?DHCPD_CHROOT="*\([^#"]\+\)"*/\1/p' \ - "${ROOT}"/etc/conf.d/dhcpd - )" - - if [[ -z ${CHROOT} ]]; then - eerror "CHROOT not defined in /etc/conf.d/dhcpd" - return 1 - fi - - CHROOT="${ROOT}/${CHROOT}" - - if [[ -d ${CHROOT} ]] ; then - ewarn "${CHROOT} already exists - aborting" - return 0 - fi - - ebegin "Setting up the chroot directory" - mkdir -m 0755 -p "${CHROOT}/"{dev,etc,var/lib,var/run/dhcp} - cp /etc/{localtime,resolv.conf} "${CHROOT}"/etc - cp -R /etc/dhcp "${CHROOT}"/etc - cp -R /var/lib/dhcp "${CHROOT}"/var/lib - ln -s ../../var/lib/dhcp "${CHROOT}"/etc/dhcp/lib - chown -R dhcp:dhcp "${CHROOT}"/var/{lib,run}/dhcp - eend 0 - - local logger="$(best_version virtual/logger)" - einfo "To enable logging from the dhcpd server, configure your" - einfo "logger (${logger}) to listen on ${CHROOT}/dev/log" } diff --git a/net-misc/dhcp/files/dhcp-3.0-paranoia.patch b/net-misc/dhcp/files/dhcp-3.0-paranoia.patch deleted file mode 100644 index 886f5cb5f..000000000 --- a/net-misc/dhcp/files/dhcp-3.0-paranoia.patch +++ /dev/null @@ -1,207 +0,0 @@ - -paranoia (non-root/chroot) patch for ISC dhcp 3.0 -file to patch: dhcp-3.0/server/dhcpd.c - -update from paranoia patch for ISC dhcp 2.0 - -Adds 3 options: - - -user <user> - -group <group> - -chroot <chroot_dir> - -Notes: - -DPARANOIA must be passed as an argument to the --copts option - of configure. Otherwise, the paranoia code will not be compiled - in. Example: ./configure --copts -DPARANOIA - - The chroot() call has been delayed in order to allow /dev/log to - be reopened after the configuration file has been read. This is - beneficial for systems on which /dev/log is a unix domain socket. - The main side effect is that dhcpd.conf should be placed in /etc, - instead of <chroot_dir>/etc. - - If dhcpd is to be run on a sysV-style architecture (or, more - generally, if /dev/log is a character device), one may opt to - create the <chroot_dir>/dev/log character device and add - -DEARLY_CHROOT to the --copts option of configure (in addition to - -DPARANOIA). This will perform the chroot() call at the earliest - convenience (before reading the configuration file). - - If the -user option is used, the lease and pid file directories - should be writable to the server process after it drops - privileges. - - -ari edelkind (12/10/2001) -last modified 12/10/2001 - - ---- dhcp-3.0/server/dhcpd.c Thu Jun 21 22:12:58 2001 -+++ dhcp-3.0+paranoia/server/dhcpd.c Wed Oct 17 08:23:00 2001 -@@ -56,6 +56,16 @@ - #include "version.h" - #include <omapip/omapip_p.h> - -+#if defined (PARANOIA) -+# include <sys/types.h> -+# include <unistd.h> -+# include <pwd.h> -+/* get around the ISC declaration of group */ -+# define group real_group -+# include <grp.h> -+# undef group -+#endif /* PARANOIA */ -+ - static void usage PROTO ((void)); - - TIME cur_time; -@@ -204,6 +214,22 @@ - omapi_object_dereference (&listener, MDL); - } - -+#if defined (PARANOIA) -+/* to be used in one of two possible scenarios */ -+static void setup_chroot (char *chroot_dir) { -+ if (geteuid()) -+ log_fatal ("you must be root to use chroot"); -+ -+ if (chroot(chroot_dir)) { -+ log_fatal ("chroot(\"%s\"): %m", chroot_dir); -+ } -+ if (chdir ("/")) { -+ /* probably permission denied */ -+ log_fatal ("chdir(\"/\"): %m"); -+ } -+} -+#endif /* PARANOIA */ -+ - int main (argc, argv, envp) - int argc; - char **argv, **envp; -@@ -236,6 +262,14 @@ - char *traceinfile = (char *)0; - char *traceoutfile = (char *)0; - #endif -+#if defined (PARANOIA) -+ char *set_user = 0; -+ char *set_group = 0; -+ char *set_chroot = 0; -+ -+ uid_t set_uid = 0; -+ gid_t set_gid = 0; -+#endif /* PARANOIA */ - - /* Make sure we have stdin, stdout and stderr. */ - status = open ("/dev/null", O_RDWR); -@@ -298,6 +332,20 @@ - if (++i == argc) - usage (); - server = argv [i]; -+#if defined (PARANOIA) -+ } else if (!strcmp (argv [i], "-user")) { -+ if (++i == argc) -+ usage (); -+ set_user = argv [i]; -+ } else if (!strcmp (argv [i], "-group")) { -+ if (++i == argc) -+ usage (); -+ set_group = argv [i]; -+ } else if (!strcmp (argv [i], "-chroot")) { -+ if (++i == argc) -+ usage (); -+ set_chroot = argv [i]; -+#endif /* PARANOIA */ - } else if (!strcmp (argv [i], "-cf")) { - if (++i == argc) - usage (); -@@ -397,6 +445,44 @@ - trace_seed_stop, MDL); - #endif - -+#if defined (PARANOIA) -+ /* get user and group info if those options were given */ -+ if (set_user) { -+ struct passwd *tmp_pwd; -+ -+ if (geteuid()) -+ log_fatal ("you must be root to set user"); -+ -+ if (!(tmp_pwd = getpwnam(set_user))) -+ log_fatal ("no such user: %s", set_user); -+ -+ set_uid = tmp_pwd->pw_uid; -+ -+ /* use the user's group as the default gid */ -+ if (!set_group) -+ set_gid = tmp_pwd->pw_gid; -+ } -+ -+ if (set_group) { -+/* get around the ISC declaration of group */ -+#define group real_group -+ struct group *tmp_grp; -+ -+ if (geteuid()) -+ log_fatal ("you must be root to set group"); -+ -+ if (!(tmp_grp = getgrnam(set_group))) -+ log_fatal ("no such group: %s", set_group); -+ -+ set_gid = tmp_grp->gr_gid; -+#undef group -+ } -+ -+# if defined (EARLY_CHROOT) -+ if (set_chroot) setup_chroot (set_chroot); -+# endif /* EARLY_CHROOT */ -+#endif /* PARANOIA */ -+ - /* Default to the DHCP/BOOTP port. */ - if (!local_port) - { -@@ -500,6 +586,10 @@ - - postconf_initialization (quiet); - -+#if defined (PARANOIA) && !defined (EARLY_CHROOT) -+ if (set_chroot) setup_chroot (set_chroot); -+#endif /* PARANOIA && !EARLY_CHROOT */ -+ - /* test option should cause an early exit */ - if (cftest && !lftest) - exit(0); -@@ -543,6 +633,22 @@ - exit (0); - } - -+#if defined (PARANOIA) -+ /* change uid to the specified one */ -+ -+ if (set_gid) { -+ if (setgroups (0, (void *)0)) -+ log_fatal ("setgroups: %m"); -+ if (setgid (set_gid)) -+ log_fatal ("setgid(%d): %m", (int) set_gid); -+ } -+ -+ if (set_uid) { -+ if (setuid (set_uid)) -+ log_fatal ("setuid(%d): %m", (int) set_uid); -+ } -+#endif /* PARANOIA */ -+ - /* Read previous pid file. */ - if ((i = open (path_dhcpd_pid, O_RDONLY)) >= 0) { - status = read (i, pbuf, (sizeof pbuf) - 1); -@@ -888,6 +994,10 @@ - - log_fatal ("Usage: dhcpd [-p <UDP port #>] [-d] [-f]%s%s%s%s", - "\n [-cf config-file] [-lf lease-file]", -+#if defined (PARANOIA) -+ /* meld into the following string */ -+ "\n [-user user] [-group group] [-chroot dir]" -+#endif /* PARANOIA */ - #if defined (TRACING) - "\n [-tf trace-output-file]", - "\n [-play trace-input-file]", diff --git a/net-misc/dhcp/files/dhcp-3.0.2-gmake.patch b/net-misc/dhcp/files/dhcp-3.0.2-gmake.patch deleted file mode 100644 index 4ab99a2b7..000000000 --- a/net-misc/dhcp/files/dhcp-3.0.2-gmake.patch +++ /dev/null @@ -1,66 +0,0 @@ -Index: dhcp-3.0.2/Makefile -=================================================================== ---- dhcp-3.0.2.orig/Makefile -+++ dhcp-3.0.2/Makefile -@@ -33,7 +33,7 @@ all: - if [ ! -d work.$$sysname ]; then \ - echo No build directory for $$sysname - please run ./configure.; \ - else \ -- (cd work.$$sysname; make all); \ -+ (cd work.$$sysname; $(MAKE) all); \ - fi - - install: -@@ -41,7 +41,7 @@ install: - if [ ! -d work.$$sysname ]; then \ - echo No build directory for $$sysname - please run ./configure.; \ - else \ -- (cd work.$$sysname; make install); \ -+ (cd work.$$sysname; $(MAKE) install); \ - fi - - depend: -@@ -49,7 +49,7 @@ depend: - if [ ! -d work.$$sysname ]; then \ - echo No build directory for $$sysname - please run ./configure.; \ - else \ -- (cd work.$$sysname; make depend); \ -+ (cd work.$$sysname; $(MAKE) depend); \ - fi - - clean: -@@ -57,7 +57,7 @@ clean: - if [ ! -d work.$$sysname ]; then \ - echo No build directory for $$sysname - please run ./configure.; \ - else \ -- (cd work.$$sysname; make clean); \ -+ (cd work.$$sysname; $(MAKE) clean); \ - fi - - realclean: -@@ -65,7 +65,7 @@ realclean: - if [ ! -d work.$$sysname ]; then \ - echo No build directory for $$sysname - please run ./configure.; \ - else \ -- (cd work.$$sysname; make realclean); \ -+ (cd work.$$sysname; $(MAKE) realclean); \ - fi - - distclean: -@@ -73,7 +73,7 @@ distclean: - if [ ! -d work.$$sysname ]; then \ - echo No build directory for $$sysname - please run ./configure.; \ - else \ -- (cd work.$$sysname; make distclean); \ -+ (cd work.$$sysname; $(MAKE) distclean); \ - fi - - links: -@@ -81,6 +81,6 @@ links: - if [ ! -d work.$$sysname ]; then \ - echo No build directory for $$sysname - please run ./configure.; \ - else \ -- (cd work.$$sysname; make links); \ -+ (cd work.$$sysname; $(MAKE) links); \ - fi - diff --git a/net-misc/dhcp/files/dhcp-3.0.3-dhclient-hostname.patch b/net-misc/dhcp/files/dhcp-3.0.3-dhclient-hostname.patch deleted file mode 100644 index 9a6e7b969..000000000 --- a/net-misc/dhcp/files/dhcp-3.0.3-dhclient-hostname.patch +++ /dev/null @@ -1,16 +0,0 @@ ---- client/scripts/linux -+++ client/scripts/linux -@@ -138,10 +138,12 @@ - [ x$reason = xREBIND ] || [ x$reason = xREBOOT ]; then - current_hostname=`hostname` - if [ x$current_hostname = x ] || \ -+ [ x$current_hostname = "x(none)" ] || \ -+ [ x$current_hostname = xlocalhost ] || \ - [ x$current_hostname = x$old_host_name ]; then - if [ x$current_hostname = x ] || \ - [ x$new_host_name != x$old_host_name ]; then -- hostname $new_host_name -+ hostname "$new_host_name" - fi - fi - diff --git a/net-misc/dhcp/files/dhcp-3.0.3-dhclient-metric.patch b/net-misc/dhcp/files/dhcp-3.0.3-dhclient-metric.patch deleted file mode 100644 index 040ef779d..000000000 --- a/net-misc/dhcp/files/dhcp-3.0.3-dhclient-metric.patch +++ /dev/null @@ -1,200 +0,0 @@ ---- client/scripts/bsdos -+++ client/scripts/bsdos -@@ -84,6 +84,9 @@ - if [ x$new_interface_mtu != x ]; then - mtu_arg="mtu $new_interface_mtu" - fi -+if [ x$IF_METRIC != x ]; then -+ metric_arg="metric $IF_METRIC" -+fi - - if [ x$reason = xMEDIUM ]; then - eval "ifconfig $interface $medium" -@@ -141,7 +144,7 @@ - if [ x$old_ip_address = x ] || [ x$old_ip_address != x$new_ip_address ] || \ - [ x$reason = xBOUND ] || [ x$reason = xREBOOT ]; then - eval "ifconfig $interface inet $new_ip_address $new_netmask_arg \ -- $new_broadcast_arg $mtu_arg $medium" -+ $new_broadcast_arg $mtu_arg $metric_arg $medium" - route add $new_ip_address 127.1 >/dev/null 2>&1 - for router in $new_routers; do - route add default $router >/dev/null 2>&1 -@@ -198,7 +201,7 @@ - route delete $alias_ip_address 127.0.0.1 > /dev/null 2>&1 - fi - eval "ifconfig $interface inet $new_ip_address $new_netmask_arg \ -- $new_broadcast_arg $mtu_arg $medium" -+ $new_broadcast_arg $mtu_arg $metric_arg $medium" - sleep 1 - if [ "$new_routers" != "" ]; then - set $new_routers ---- client/scripts/freebsd -+++ client/scripts/freebsd -@@ -94,6 +94,9 @@ - if [ x$new_interface_mtu != x ]; then - mtu_arg="mtu $new_interface_mtu" - fi -+if [ x$IF_METRIC != x ]; then -+ metric_arg="metric $IF_METRIC" -+fi - - if [ x$reason = xMEDIUM ]; then - eval "ifconfig $interface $medium" -@@ -151,7 +154,7 @@ - if [ x$old_ip_address = x ] || [ x$old_ip_address != x$new_ip_address ] || \ - [ x$reason = xBOUND ] || [ x$reason = xREBOOT ]; then - eval "ifconfig $interface inet $new_ip_address $new_netmask_arg \ -- $new_broadcast_arg $mtu_arg $medium" -+ $new_broadcast_arg $mtu_arg $metric_arg $medium" - $LOGGER "New IP Address ($interface): $new_ip_address" - $LOGGER "New Subnet Mask ($interface): $new_subnet_mask" - $LOGGER "New Broadcast Address ($interface): $new_broadcast_address" -@@ -215,7 +218,7 @@ - route delete $alias_ip_address 127.0.0.1 > /dev/null 2>&1 - fi - eval "ifconfig $interface inet $new_ip_address $new_netmask_arg \ -- $new_broadcast_arg $mtu_arg $medium" -+ $new_broadcast_arg $mtu_arg $metric_arg $medium" - $LOGGER "New IP Address ($interface): $new_ip_address" - $LOGGER "New Subnet Mask ($interface): $new_subnet_mask" - $LOGGER "New Broadcast Address ($interface): $new_broadcast_address" ---- client/scripts/linux -+++ client/scripts/linux -@@ -83,11 +83,6 @@ - fi - fi - --release=`uname -r` --release=`expr $release : '\(.*\)\..*'` --relminor=`echo $release |sed -e 's/[0-9]*\.\([0-9][0-9]*\)\(\..*\)*$/\1/'` --relmajor=`echo $release |sed -e 's/\([0-9][0-9]*\)\..*$/\1/'` -- - if [ x$new_broadcast_address != x ]; then - new_broadcast_arg="broadcast $new_broadcast_address" - fi -@@ -106,6 +101,9 @@ - if [ x$new_interface_mtu != x ]; then - mtu_arg="mtu $new_interface_mtu" - fi -+if [ x$IF_METRIC != x ]; then -+ metric_arg="metric $IF_METRIC" -+fi - - if [ x$reason = xMEDIUM ]; then - # Linux doesn't do mediums (ok, ok, media). -@@ -117,15 +115,7 @@ - # Bring down alias interface. Its routes will disappear too. - ifconfig $interface:0- inet 0 - fi -- if [ $relmajor -lt 2 ] || ( [ $relmajor -eq 2 ] && [ $relminor -eq 0 ] ) -- then -- ifconfig $interface inet 0.0.0.0 netmask 0.0.0.0 \ -- broadcast 255.255.255.255 up -- # Add route to make broadcast work. Do not omit netmask. -- route add default dev $interface netmask 0.0.0.0 -- else -- ifconfig $interface 0 up -- fi -+ ifconfig $interface 0 up - - # We need to give the kernel some time to get the interface up. - sleep 1 -@@ -164,12 +154,14 @@ - ifconfig $interface inet $new_ip_address $new_subnet_arg \ - $new_broadcast_arg $mtu_arg - # Add a network route to the computed network address. -- if [ $relmajor -lt 2 ] || \ -- ( [ $relmajor -eq 2 ] && [ $relminor -eq 0 ] ); then -- route add -net $new_network_number $new_subnet_arg dev $interface -+ if [ x$IF_METRIC != x ] && [ x$IF_METRIC != x0 ]; then -+ route del -net $new_network_number $new_subnet_arg \ -+ dev $interface -+ route add -net $new_network_number $new_subnet_arg $metric_arg \ -+ dev $interface - fi - for router in $new_routers; do -- route add default gw $router -+ route add default gw $router $metric_arg dev $interface - done - fi - if [ x$new_ip_address != x$alias_ip_address ] && [ x$alias_ip_address != x ]; -@@ -213,12 +205,15 @@ - ifconfig $interface:0 inet $alias_ip_address $alias_subnet_arg - route add -host $alias_ip_address dev $interface:0 - fi -- if [ $relmajor -lt 2 ] || \ -- ( [ $relmajor -eq 2 ] && [ $relminor -eq 0 ] ); then -- route add -net $new_network_number -+ # Add a network route to the computed network address. -+ if [ x$IF_METRIC != x ] && [ x$IF_METRIC != x0 ]; then -+ route del -net $new_network_number $new_subnet_arg \ -+ dev $interface -+ route add -net $new_network_number $new_subnet_arg $metric_arg \ -+ dev $interface - fi - for router in $new_routers; do -- route add default gw $router -+ route add default gw $router $metric_arg dev $interface - done - make_resolv_conf - exit_with_hooks 0 ---- client/scripts/netbsd -+++ client/scripts/netbsd -@@ -84,6 +84,9 @@ - if [ x$new_interface_mtu != x ]; then - mtu_arg="mtu $new_interface_mtu" - fi -+if [ x$IF_METRIC != x ]; then -+ metric_arg="metric $IF_METRIC" -+fi - - if [ x$reason = xMEDIUM ]; then - eval "ifconfig $interface $medium" -@@ -141,7 +144,7 @@ - if [ x$old_ip_address = x ] || [ x$old_ip_address != x$new_ip_address ] || \ - [ x$reason = xBOUND ] || [ x$reason = xREBOOT ]; then - eval "ifconfig $interface inet $new_ip_address $new_netmask_arg \ -- $new_broadcast_arg $mtu_arg $medium" -+ $new_broadcast_arg $mtu_arg $metric_arg $medium" - route add $new_ip_address 127.1 >/dev/null 2>&1 - for router in $new_routers; do - route add default $router >/dev/null 2>&1 -@@ -198,7 +201,7 @@ - route delete $alias_ip_address 127.0.0.1 > /dev/null 2>&1 - fi - eval "ifconfig $interface inet $new_ip_address $new_netmask_arg \ -- $new_broadcast_arg $mtu_arg $medium" -+ $new_broadcast_arg $mtu_arg $metric_arg $medium" - sleep 1 - if [ "$new_routers" != "" ]; then - set $new_routers ---- client/scripts/solaris -+++ client/scripts/solaris -@@ -79,6 +79,9 @@ - if [ x$new_interface_mtu != x ]; then - mtu_arg="mtu $new_interface_mtu" - fi -+if [ x$IF_METRIC != x ]; then -+ metric_arg="metric $IF_METRIC" -+fi - - ifconfig=/sbin/ifconfig - -@@ -141,7 +144,7 @@ - if [ x$old_ip_address = x ] || [ x$old_ip_address != x$new_ip_address ] || \ - [ x$reason = xBOUND ] || [ x$reason = xREBOOT ]; then - eval "$ifconfig $interface inet $new_ip_address $new_netmask_arg \ -- $new_broadcast_arg $mtu_arg $medium" -+ $new_broadcast_arg $mtu_arg $metric_arg $medium" - route add $new_ip_address 127.1 1 >/dev/null 2>&1 - for router in $new_routers; do - route add default $router 1 >/dev/null 2>&1 -@@ -182,7 +185,7 @@ - route delete $alias_ip_address 127.0.0.1 > /dev/null 2>&1 - fi - eval "$ifconfig $interface inet $new_ip_address $new_netmask_arg \ -- $new_broadcast_arg $mtu_arg $medium" -+ $new_broadcast_arg $mtu_arg $metric_arg $medium" - sleep 1 - set $new_routers - if ping -s -n -I 1 $1 64 1; then diff --git a/net-misc/dhcp/files/dhcp-3.0.3-dhclient-mtu.patch b/net-misc/dhcp/files/dhcp-3.0.3-dhclient-mtu.patch deleted file mode 100644 index 5ef4442d8..000000000 --- a/net-misc/dhcp/files/dhcp-3.0.3-dhclient-mtu.patch +++ /dev/null @@ -1,180 +0,0 @@ ---- client/scripts/bsdos -+++ client/scripts/bsdos -@@ -81,6 +81,9 @@ - if [ x$alias_subnet_mask != x ]; then - alias_subnet_arg="netmask $alias_subnet_mask" - fi -+if [ x$new_interface_mtu != x ]; then -+ mtu_arg="mtu $new_interface_mtu" -+fi - - if [ x$reason = xMEDIUM ]; then - eval "ifconfig $interface $medium" -@@ -138,7 +141,7 @@ - if [ x$old_ip_address = x ] || [ x$old_ip_address != x$new_ip_address ] || \ - [ x$reason = xBOUND ] || [ x$reason = xREBOOT ]; then - eval "ifconfig $interface inet $new_ip_address $new_netmask_arg \ -- $new_broadcast_arg $medium" -+ $new_broadcast_arg $mtu_arg $medium" - route add $new_ip_address 127.1 >/dev/null 2>&1 - for router in $new_routers; do - route add default $router >/dev/null 2>&1 -@@ -195,7 +198,7 @@ - route delete $alias_ip_address 127.0.0.1 > /dev/null 2>&1 - fi - eval "ifconfig $interface inet $new_ip_address $new_netmask_arg \ -- $new_broadcast_arg $medium" -+ $new_broadcast_arg $mtu_arg $medium" - sleep 1 - if [ "$new_routers" != "" ]; then - set $new_routers ---- client/scripts/freebsd -+++ client/scripts/freebsd -@@ -91,6 +91,9 @@ - if [ x$alias_subnet_mask != x ]; then - alias_subnet_arg="netmask $alias_subnet_mask" - fi -+if [ x$new_interface_mtu != x ]; then -+ mtu_arg="mtu $new_interface_mtu" -+fi - - if [ x$reason = xMEDIUM ]; then - eval "ifconfig $interface $medium" -@@ -148,7 +151,7 @@ - if [ x$old_ip_address = x ] || [ x$old_ip_address != x$new_ip_address ] || \ - [ x$reason = xBOUND ] || [ x$reason = xREBOOT ]; then - eval "ifconfig $interface inet $new_ip_address $new_netmask_arg \ -- $new_broadcast_arg $medium" -+ $new_broadcast_arg $mtu_arg $medium" - $LOGGER "New IP Address ($interface): $new_ip_address" - $LOGGER "New Subnet Mask ($interface): $new_subnet_mask" - $LOGGER "New Broadcast Address ($interface): $new_broadcast_address" -@@ -212,7 +215,7 @@ - route delete $alias_ip_address 127.0.0.1 > /dev/null 2>&1 - fi - eval "ifconfig $interface inet $new_ip_address $new_netmask_arg \ -- $new_broadcast_arg $medium" -+ $new_broadcast_arg $mtu_arg $medium" - $LOGGER "New IP Address ($interface): $new_ip_address" - $LOGGER "New Subnet Mask ($interface): $new_subnet_mask" - $LOGGER "New Broadcast Address ($interface): $new_broadcast_address" ---- client/scripts/linux -+++ client/scripts/linux -@@ -103,6 +103,9 @@ - if [ x$alias_subnet_mask != x ]; then - alias_subnet_arg="netmask $alias_subnet_mask" - fi -+if [ x$new_interface_mtu != x ]; then -+ mtu_arg="mtu $new_interface_mtu" -+fi - - if [ x$reason = xMEDIUM ]; then - # Linux doesn't do mediums (ok, ok, media). -@@ -159,7 +162,7 @@ - [ x$reason = xBOUND ] || [ x$reason = xREBOOT ]; then - - ifconfig $interface inet $new_ip_address $new_subnet_arg \ -- $new_broadcast_arg -+ $new_broadcast_arg $mtu_arg - # Add a network route to the computed network address. - if [ $relmajor -lt 2 ] || \ - ( [ $relmajor -eq 2 ] && [ $relminor -eq 0 ] ); then -@@ -201,7 +204,7 @@ - ifconfig $interface:0- inet 0 - fi - ifconfig $interface inet $new_ip_address $new_subnet_arg \ -- $new_broadcast_arg -+ $new_broadcast_arg $mtu_arg - set $new_routers - ############## what is -w in ping? - if ping -q -c 1 $1; then ---- client/scripts/netbsd -+++ client/scripts/netbsd -@@ -81,6 +81,9 @@ - if [ x$alias_subnet_mask != x ]; then - alias_subnet_arg="netmask $alias_subnet_mask" - fi -+if [ x$new_interface_mtu != x ]; then -+ mtu_arg="mtu $new_interface_mtu" -+fi - - if [ x$reason = xMEDIUM ]; then - eval "ifconfig $interface $medium" -@@ -138,7 +141,7 @@ - if [ x$old_ip_address = x ] || [ x$old_ip_address != x$new_ip_address ] || \ - [ x$reason = xBOUND ] || [ x$reason = xREBOOT ]; then - eval "ifconfig $interface inet $new_ip_address $new_netmask_arg \ -- $new_broadcast_arg $medium" -+ $new_broadcast_arg $mtu_arg $medium" - route add $new_ip_address 127.1 >/dev/null 2>&1 - for router in $new_routers; do - route add default $router >/dev/null 2>&1 -@@ -195,7 +198,7 @@ - route delete $alias_ip_address 127.0.0.1 > /dev/null 2>&1 - fi - eval "ifconfig $interface inet $new_ip_address $new_netmask_arg \ -- $new_broadcast_arg $medium" -+ $new_broadcast_arg $mtu_arg $medium" - sleep 1 - if [ "$new_routers" != "" ]; then - set $new_routers ---- client/scripts/openbsd -+++ client/scripts/openbsd -@@ -81,6 +81,9 @@ - if [ x$alias_subnet_mask != x ]; then - alias_subnet_arg="netmask $alias_subnet_mask" - fi -+if [ x$new_interface_mtu != x ]; then -+ mtu_arg="mtu $new_interface_mtu" -+fi - - if [ x$reason = xMEDIUM ]; then - eval "ifconfig $interface $medium" -@@ -138,7 +141,7 @@ - if [ x$old_ip_address = x ] || [ x$old_ip_address != x$new_ip_address ] || \ - [ x$reason = xBOUND ] || [ x$reason = xREBOOT ]; then - eval "ifconfig $interface inet $new_ip_address $new_netmask_arg \ -- $new_broadcast_arg $medium" -+ $new_broadcast_arg $mtu_arg $medium" - route add $new_ip_address 127.1 >/dev/null 2>&1 - for router in $new_routers; do - route add default $router >/dev/null 2>&1 -@@ -195,7 +198,7 @@ - route delete $alias_ip_address 127.0.0.1 > /dev/null 2>&1 - fi - eval "ifconfig $interface inet $new_ip_address $new_netmask_arg \ -- $new_broadcast_arg $medium" -+ $new_broadcast_arg $mtu_arg $medium" - sleep 1 - if [ "$new_routers" != "" ]; then - set $new_routers ---- client/scripts/solaris -+++ client/scripts/solaris -@@ -76,6 +76,9 @@ - if [ x$alias_subnet_mask != x ]; then - alias_subnet_arg="netmask $alias_subnet_mask" - fi -+if [ x$new_interface_mtu != x ]; then -+ mtu_arg="mtu $new_interface_mtu" -+fi - - ifconfig=/sbin/ifconfig - -@@ -138,7 +141,7 @@ - if [ x$old_ip_address = x ] || [ x$old_ip_address != x$new_ip_address ] || \ - [ x$reason = xBOUND ] || [ x$reason = xREBOOT ]; then - eval "$ifconfig $interface inet $new_ip_address $new_netmask_arg \ -- $new_broadcast_arg $medium" -+ $new_broadcast_arg $mtu_arg $medium" - route add $new_ip_address 127.1 1 >/dev/null 2>&1 - for router in $new_routers; do - route add default $router 1 >/dev/null 2>&1 -@@ -179,7 +182,7 @@ - route delete $alias_ip_address 127.0.0.1 > /dev/null 2>&1 - fi - eval "$ifconfig $interface inet $new_ip_address $new_netmask_arg \ -- $new_broadcast_arg $medium" -+ $new_broadcast_arg $mtu_arg $medium" - sleep 1 - set $new_routers - if ping -s -n -I 1 $1 64 1; then diff --git a/net-misc/dhcp/files/dhcp-3.0.3-dhclient-ntp.patch b/net-misc/dhcp/files/dhcp-3.0.3-dhclient-ntp.patch deleted file mode 100644 index d84e6f613..000000000 --- a/net-misc/dhcp/files/dhcp-3.0.3-dhclient-ntp.patch +++ /dev/null @@ -1,186 +0,0 @@ ---- client/clparse.c -+++ client/clparse.c -@@ -51,6 +51,7 @@ - DHO_DOMAIN_NAME, - DHO_DOMAIN_NAME_SERVERS, - DHO_HOST_NAME, -+ DHO_NTP_SERVERS, - 0 - }; - ---- client/scripts/bsdos -+++ client/scripts/bsdos -@@ -7,6 +7,26 @@ - echo nameserver $nameserver >>/etc/resolv.conf - done - fi -+ # If we're making confs, may as well make an ntp.conf too -+ make_ntp_conf -+} -+ -+make_ntp_conf() { -+ if [ x$PEER_NTP = x ] || [ x$PEER_NTP = xyes ]; then -+ if [ x$new_ntp_servers != x ]; then -+ conf="# Generated by dhclient for interface $interface\n" -+ conf="${conf}restrict default noquery notrust nomodify\n" -+ conf="${conf}restrict 127.0.0.1\n" -+ for ntpserver in $new_ntp_servers; do -+ conf="${conf}restrict $ntpserver nomodify notrap noquery\n" -+ conf="${conf}server $ntpserver\n" -+ done -+ conf="${conf}driftfile /var/lib/ntp/ntp.drift\n" -+ conf="${conf}logfile /var/log/ntp.log\n" -+ printf "${conf}" > /etc/ntp.conf -+ chmod 644 /etc/ntp.conf -+ fi -+ fi - } - - # Must be used on exit. Invokes the local dhcp client exit hooks, if any. ---- client/scripts/freebsd -+++ client/scripts/freebsd -@@ -32,8 +32,28 @@ - done - fi - fi -+ # If we're making confs, may as well make an ntp.conf too -+ make_ntp_conf - } - -+make_ntp_conf() { -+ if [ x$PEER_NTP = x ] || [ x$PEER_NTP = xyes ]; then -+ if [ "x$new_ntp_servers" != x ]; then -+ conf="# Generated by dhclient for interface $interface\n" -+ conf="${conf}restrict default noquery notrust nomodify\n" -+ conf="${conf}restrict 127.0.0.1\n" -+ for ntpserver in $new_ntp_servers; do -+ conf="${conf}restrict $ntpserver nomodify notrap noquery\n" -+ conf="${conf}server $ntpserver\n" -+ done -+ conf="${conf}driftfile /var/lib/ntp/ntp.drift\n" -+ conf="${conf}logfile /var/log/ntp.log\n" -+ printf "${conf}" > /etc/ntp.conf -+ chmod 644 /etc/ntp.conf -+ fi -+ fi -+} -+ - # Must be used on exit. Invokes the local dhcp client exit hooks, if any. - exit_with_hooks() { - exit_status=$1 ---- client/scripts/linux -+++ client/scripts/linux -@@ -30,6 +30,26 @@ - echo nameserver $nameserver >>/etc/resolv.conf - done - fi -+ # If we're making confs, may as well make an ntp.conf too -+ make_ntp_conf -+} -+ -+make_ntp_conf() { -+ if [ x$PEER_NTP = x ] || [ x$PEER_NTP = xyes ]; then -+ if [ "x$new_ntp_servers" != x ]; then -+ conf="# Generated by dhclient for interface $interface\n" -+ conf="${conf}restrict default noquery notrust nomodify\n" -+ conf="${conf}restrict 127.0.0.1\n" -+ for ntpserver in $new_ntp_servers; do -+ conf="${conf}restrict $ntpserver nomodify notrap noquery\n" -+ conf="${conf}server $ntpserver\n" -+ done -+ conf="${conf}driftfile /var/lib/ntp/ntp.drift\n" -+ conf="${conf}logfile /var/log/ntp.log\n" -+ printf "${conf}" > /etc/ntp.conf -+ chmod 644 /etc/ntp.conf -+ fi -+ fi - } - - # Must be used on exit. Invokes the local dhcp client exit hooks, if any. ---- client/scripts/netbsd -+++ client/scripts/netbsd -@@ -7,6 +7,26 @@ - echo nameserver $nameserver >>/etc/resolv.conf - done - fi -+ # If we're making confs, may as well make an ntp.conf too -+ make_ntp_conf -+} -+ -+make_ntp_conf() { -+ if [ x$PEER_NTP = x ] || [ x$PEER_NTP = xyes ]; then -+ if [ "x$new_ntp_servers" != x ]; then -+ conf="# Generated by dhclient for interface $interface\n" -+ conf="${conf}restrict default noquery notrust nomodify\n" -+ conf="${conf}restrict 127.0.0.1\n" -+ for ntpserver in $new_ntp_servers; do -+ conf="${conf}restrict $ntpserver nomodify notrap noquery\n" -+ conf="${conf}server $ntpserver\n" -+ done -+ conf="${conf}driftfile /var/lib/ntp/ntp.drift\n" -+ conf="${conf}logfile /var/log/ntp.log\n" -+ printf "${conf}" > /etc/ntp.conf -+ chmod 644 /etc/ntp.conf -+ fi -+ fi - } - - # Must be used on exit. Invokes the local dhcp client exit hooks, if any. ---- client/scripts/openbsd -+++ client/scripts/openbsd -@@ -7,6 +7,26 @@ - echo nameserver $nameserver >>/etc/resolv.conf - done - fi -+ # If we're making confs, may as well make an ntp.conf too -+ make_ntp_conf -+} -+ -+make_ntp_conf() { -+ if [ x$PEER_NTP = x ] || [ x$PEER_NTP = xyes ]; then -+ if [ "x$new_ntp_servers" != x ]; then -+ conf="# Generated by dhclient for interface $interface\n" -+ conf="${conf}restrict default noquery notrust nomodify\n" -+ conf="${conf}restrict 127.0.0.1\n" -+ for ntpserver in $new_ntp_servers; do -+ conf="${conf}restrict $ntpserver nomodify notrap noquery\n" -+ conf="${conf}server $ntpserver\n" -+ done -+ conf="${conf}driftfile /var/lib/ntp/ntp.drift\n" -+ conf="${conf}logfile /var/log/ntp.log\n" -+ printf "${conf}" > /etc/ntp.conf -+ chmod 644 /etc/ntp.conf -+ fi -+ fi - } - - # Must be used on exit. Invokes the local dhcp client exit hooks, if any. ---- client/scripts/solaris -+++ client/scripts/solaris -@@ -7,6 +7,26 @@ - echo nameserver $nameserver >>/etc/resolv.conf - done - fi -+ # If we're making confs, may as well make an ntp.conf too -+ make_ntp_conf -+} -+ -+make_ntp_conf() { -+ if [ x$PEER_NTP = x ] || [ x$PEER_NTP = xyes ]; then -+ if [ "x$new_ntp_servers" != x ]; then -+ conf="# Generated by dhclient for interface $interface\n" -+ conf="${conf}restrict default noquery notrust nomodify\n" -+ conf="${conf}restrict 127.0.0.1\n" -+ for ntpserver in $new_ntp_servers; do -+ conf="${conf}restrict $ntpserver nomodify notrap noquery\n" -+ conf="${conf}server $ntpserver\n" -+ done -+ conf="${conf}driftfile /var/lib/ntp/ntp.drift\n" -+ conf="${conf}logfile /var/log/ntp.log\n" -+ printf "${conf}" > /etc/ntp.conf -+ chmod 644 /etc/ntp.conf -+ fi -+ fi - } - - # Must be used on exit. Invokes the local dhcp client exit hooks, if any. diff --git a/net-misc/dhcp/files/dhcp-3.0.3-libdst.patch b/net-misc/dhcp/files/dhcp-3.0.3-libdst.patch deleted file mode 100644 index 8e93ac95b..000000000 --- a/net-misc/dhcp/files/dhcp-3.0.3-libdst.patch +++ /dev/null @@ -1,14 +0,0 @@ ---- dst/Makefile.dist.old 2004-12-24 13:31:22.986061032 +0000 -+++ dst/Makefile.dist 2004-12-24 13:47:19.036913364 +0000 -@@ -31,6 +31,10 @@ - all: libdst.a - - install: -+ mkdir -p $(DESTDIR)$(LIBDIR) -+ $(INSTALL) libdst.a $(DESTDIR)$(LIBDIR) -+ $(CHMOD) 644 $(DESTDIR)$(LIBDIR)/libdst.a -+ - - libdst.a: $(OBJ) - rm -f dst.a - diff --git a/net-misc/dhcp/files/dhcp-3.0.3-no_isc_blurb.patch b/net-misc/dhcp/files/dhcp-3.0.3-no_isc_blurb.patch deleted file mode 100644 index 38f7713f5..000000000 --- a/net-misc/dhcp/files/dhcp-3.0.3-no_isc_blurb.patch +++ /dev/null @@ -1,105 +0,0 @@ -Patch nobbled from RedHat, and adapted to work with dhclient and dhrelay -by Roy Marples <uberlord@gentoo.org> - ---- dhcp-3.0.3/omapip/errwarn.c.no_isc_blurb 2004-09-30 16:38:32.000000000 -0400 -+++ dhcp-3.0.3/omapip/errwarn.c 2005-04-18 13:45:49.037158000 -0400 -@@ -45,6 +45,8 @@ - int log_perror = 1; - #endif - int log_priority; -+int log_isc_blurb=1; -+ - void (*log_cleanup) (void); - - #define CVT_BUF_MAX 1023 -@@ -76,7 +78,9 @@ - write (STDERR_FILENO, "\n", 1); - } - --#if !defined (NOMINUM) -+#if !defined(NOMINUM) -+ if ( log_isc_blurb ) -+ { - log_error ("%s", ""); - log_error ("If you did not get this software from ftp.isc.org, please"); - log_error ("get the latest from ftp.isc.org and install that before"); -@@ -94,7 +98,12 @@ - log_error ("the README file."); - log_error ("%s", ""); - log_error ("exiting."); -+ }else -+ { -+ log_error ("exiting."); -+ } - #endif -+ - if (log_cleanup) - (*log_cleanup) (); - exit (1); ---- dhcp-3.0.3/client/dhclient.c.no_isc_blurb 2005-04-18 13:21:08.509169000 -0400 -+++ dhcp-3.0.3/client/dhclient.c 2005-04-18 13:49:27.574402000 -0400 -@@ -34,7 +34,7 @@ - static char ocopyright[] = - "$Id: dhcp-3.0.3-no_isc_blurb.patch,v 1.1 2005/12/09 14:13:30 uberlord Exp $ Copyright (c) 2004 Internet Systems Consortium. All rights reserved.\n"; - #endif /* not lint */ -- -+ - #include "dhcpd.h" - #include "version.h" - -@@ -81,6 +81,8 @@ - - void do_release(struct client_state *); - -+extern int log_isc_blurb; -+ - int main (argc, argv, envp) - int argc; - char **argv, **envp; -@@ -176,6 +178,7 @@ - } else if (!strcmp (argv [i], "-q")) { - quiet = 1; - quiet_interface_discovery = 1; -+ log_isc_blurb = 0; - } else if (!strcmp (argv [i], "-s")) { - if (++i == argc) - usage (); ---- dhcp-3.0.3/server/dhcpd.c.no_isc_blurb 2005-12-08 10:01:40.000000000 +0000 -+++ dhcp-3.0.3/server/dhcpd.c 2005-12-08 10:05:55.000000000 +0000 -@@ -62,6 +62,9 @@ - struct iaddr server_identifier; - int server_identifier_matched; - -+ -+extern int log_isc_blurb; -+ - #if defined (NSUPDATE) - - /* This stuff is always executed to figure the default values for certain -@@ -368,6 +371,7 @@ - } else if (!strcmp (argv [i], "-q")) { - quiet = 1; - quiet_interface_discovery = 1; -+ log_isc_blurb = 0; - } else if (!strcmp (argv [i], "--version")) { - log_info ("isc-dhcpd-%s", DHCP_VERSION); - exit (0); ---- dhcp-3.0.3/relay/dhcrelay.c.no_isc_blurb 2005-12-08 10:21:00.000000000 +0000 -+++ dhcp-3.0.3/relay/dhcrelay.c 2005-12-08 10:21:50.000000000 +0000 -@@ -102,6 +102,8 @@ - static char message [] = "Internet Systems Consortium DHCP Relay Agent"; - static char url [] = "For info, please visit http://www.isc.org/sw/dhcp/"; - -+extern int log_isc_blurb; -+ - int main (argc, argv, envp) - int argc; - char **argv, **envp; -@@ -170,6 +172,7 @@ - } else if (!strcmp (argv [i], "-q")) { - quiet = 1; - quiet_interface_discovery = 1; -+ log_isc_blurb = 0; - } else if (!strcmp (argv [i], "-a")) { - add_agent_options = 1; - } else if (!strcmp (argv [i], "-c")) { diff --git a/net-misc/dhcp/files/dhcp-3.0.4-dhclient-stdin-conf.patch b/net-misc/dhcp/files/dhcp-3.0.4-dhclient-stdin-conf.patch deleted file mode 100644 index 3fedc7c0e..000000000 --- a/net-misc/dhcp/files/dhcp-3.0.4-dhclient-stdin-conf.patch +++ /dev/null @@ -1,83 +0,0 @@ ---- common/conflex.c.orig 2006-02-21 16:21:45.000000000 +0000 -+++ common/conflex.c 2006-02-21 16:23:06.000000000 +0000 -@@ -90,7 +90,7 @@ - struct parse **cfile; - { - /* "Memory" config files have no file. */ -- if ((*cfile)->file != -1) -+ if ((*cfile)->file != -1 && (*cfile)->file != fileno(stdin)) - close((*cfile)->file); - - if ((*cfile)->bufsiz) ---- client/clparse.c.orig 2006-02-22 09:37:12.000000000 +0000 -+++ client/clparse.c 2006-02-22 09:38:26.000000000 +0000 -@@ -97,6 +97,11 @@ - status = read_client_conf_file (path_dhclient_conf, - (struct interface_info *)0, - &top_level_config); -+ -+ /* Read any extra configuration from stdin */ -+ read_client_conf_stdin ((struct interface_info *)0, -+ &top_level_config); -+ - if (status != ISC_R_SUCCESS) { - ; - #ifdef LATER -@@ -148,20 +153,17 @@ - return status; - } - --int read_client_conf_file (const char *name, struct interface_info *ip, -- struct client_config *client) -+int read_client_conf_actual (int file, const char *name, -+ struct interface_info *ip, -+ struct client_config *client) - { -- int file; - struct parse *cfile; - const char *val; - int token; - isc_result_t status; - -- if ((file = open (name, O_RDONLY)) < 0) -- return uerr2isc (errno); -- - cfile = (struct parse *)0; -- new_parse (&cfile, file, (char *)0, 0, path_dhclient_conf, 0); -+ new_parse (&cfile, file, (char *)0, 0, name , 0); - - do { - token = peek_token (&val, (unsigned *)0, cfile); -@@ -177,6 +179,32 @@ - return status; - } - -+int read_client_conf_file (const char *name, struct interface_info *ip, -+ struct client_config *client) -+{ -+ int file; -+ isc_result_t status; -+ -+ if ((file = open (name, O_RDONLY)) < 0) -+ return uerr2isc (errno); -+ -+ status = read_client_conf_actual(file, name, ip, client); -+ -+ return status; -+} -+ -+ -+int read_client_conf_stdin (struct interface_info *ip, -+ struct client_config *client) -+{ -+ int file = fileno(stdin); -+ isc_result_t status; -+ -+ if (isatty(file)) return ISC_R_NOTFOUND; -+ status = read_client_conf_actual(file, "stdin", ip, client); -+ -+ return status; -+} - - /* lease-file :== client-lease-statements END_OF_FILE - client-lease-statements :== <nil> diff --git a/net-misc/dhcp/files/dhcp-3.0.5-bpf-nofallback.patch b/net-misc/dhcp/files/dhcp-3.0.5-bpf-nofallback.patch deleted file mode 100644 index 2fae6f220..000000000 --- a/net-misc/dhcp/files/dhcp-3.0.5-bpf-nofallback.patch +++ /dev/null @@ -1,44 +0,0 @@ -diff -ur common.orig/bpf.c common/bpf.c ---- common.orig/bpf.c 2006-09-20 12:52:47 +0100 -+++ common/bpf.c 2006-09-20 12:53:22 +0100 -@@ -354,10 +354,6 @@ - int result; - int fudge; - -- if (!strcmp (interface -> name, "fallback")) -- return send_fallback (interface, packet, raw, -- len, from, to, hto); -- - /* Assemble the headers... */ - assemble_hw_header (interface, (unsigned char *)hw, &hbufp, hto); - assemble_udp_ip_header (interface, -@@ -531,17 +527,5 @@ - - void maybe_setup_fallback () - { -- isc_result_t status; -- struct interface_info *fbi = (struct interface_info *)0; -- if (setup_fallback (&fbi, MDL)) { -- if_register_fallback (fbi); -- status = omapi_register_io_object ((omapi_object_t *)fbi, -- if_readsocket, 0, -- fallback_discard, 0, 0); -- if (status != ISC_R_SUCCESS) -- log_fatal ("Can't register I/O handle for %s: %s", -- fbi -> name, isc_result_totext (status)); -- interface_dereference (&fbi, MDL); -- } - } - #endif -diff -ur includes.orig/osdep.h includes/osdep.h ---- includes.orig/osdep.h 2006-09-20 12:54:52 +0100 -+++ includes/osdep.h 2006-09-20 12:56:40 +0100 -@@ -190,7 +190,7 @@ - Currently, all low-level packet interfaces use BSD sockets as a - fallback. */ - --#if defined (USE_BPF_SEND) || defined (USE_NIT_SEND) || \ -+#if defined (USE_NIT_SEND) || \ - defined (USE_DLPI_SEND) || defined (USE_UPF_SEND) || \ - defined (USE_LPF_SEND) || \ - (defined (USE_SOCKET_SEND) && defined (HAVE_SO_BINDTODEVICE)) diff --git a/net-misc/dhcp/files/dhcp-3.1.0a1-dhclient-resolvconf.patch b/net-misc/dhcp/files/dhcp-3.1.0a1-dhclient-resolvconf.patch deleted file mode 100644 index 5c420ae6e..000000000 --- a/net-misc/dhcp/files/dhcp-3.1.0a1-dhclient-resolvconf.patch +++ /dev/null @@ -1,254 +0,0 @@ -diff -ur client.orig/scripts/bsdos client/scripts/bsdos ---- client.orig/scripts/bsdos 2006-09-07 18:53:10.476329752 +0100 -+++ client/scripts/bsdos 2006-09-07 19:19:53.000000000 +0100 -@@ -1,21 +1,22 @@ - #!/bin/sh - - make_resolv_conf() { -- if [ x"$new_domain_name_servers" != x ]; then -- cat /dev/null > /etc/resolv.conf.dhclient -- if [ "x$new_domain_search" != x ]; then -- echo search $new_domain_search >> /etc/resolv.conf.dhclient -- elif [ "x$new_domain_name" != x ]; then -- # Note that the DHCP 'Domain Name Option' is really just a domain -- # name, and that this practice of using the domain name option as -- # a search path is both nonstandard and deprecated. -- echo search $new_domain_name >> /etc/resolv.conf.dhclient -+ if [ x$PEER_DNS = x ] || [ x$PEER_DNS = xyes ]; then -+ if [ "x$new_domain_name" != x ] || [ "x$new_domain_name_servers" != x ]; then -+ conf="# Generated by dhclient for interface $interface\n" -+ if [ "x$new_domain_name" != x ]; then -+ conf="${conf}search $new_domain_name\n" -+ fi -+ for nameserver in $new_domain_name_servers; do -+ conf="${conf}nameserver $nameserver\n" -+ done -+ if [ -x /sbin/resolvconf ]; then -+ printf "$conf" | resolvconf -a "$interface" -+ else -+ printf "$conf" > /etc/resolv.conf -+ chmod 644 /etc/resolv.conf -+ fi - fi -- for nameserver in $new_domain_name_servers; do -- echo nameserver $nameserver >> /etc/resolv.conf.dhclient -- done -- -- mv /etc/resolv.conf.dhclient /etc/resolv.conf - fi - # If we're making confs, may as well make an ntp.conf too - make_ntp_conf -diff -ur client.orig/scripts/freebsd client/scripts/freebsd ---- client.orig/scripts/freebsd 2006-09-07 18:53:10.476329752 +0100 -+++ client/scripts/freebsd 2006-09-07 19:19:32.000000000 +0100 -@@ -11,38 +11,20 @@ - fi - - make_resolv_conf() { -- if [ x"$new_domain_name_servers" != x ]; then -- ( cat /dev/null > /etc/resolv.conf.dhclient ) -- exit_status=$? -- if [ $exit_status -ne 0 ]; then -- $LOGGER "Unable to create /etc/resolv.conf.dhclient: Error $exit_status" -- else -- if [ "x$new_domain_search" != x ]; then -- ( echo search $new_domain_search >> /etc/resolv.conf.dhclient ) -- exit_status=$? -- elif [ "x$new_domain_name" != x ]; then -- # Note that the DHCP 'Domain Name Option' is really just a domain -- # name, and that this practice of using the domain name option as -- # a search path is both nonstandard and deprecated. -- ( echo search $new_domain_name >> /etc/resolv.conf.dhclient ) -- exit_status=$? -+ if [ x$PEER_DNS = x ] || [ x$PEER_DNS = xyes ]; then -+ if [ "x$new_domain_name" != x ] || [ "x$new_domain_name_servers" != x ]; then -+ conf="# Generated by dhclient for interface $interface\n" -+ if [ "x$new_domain_name" != x ]; then -+ conf="${conf}search $new_domain_name\n" - fi - for nameserver in $new_domain_name_servers; do -- if [ $exit_status -ne 0 ]; then -- break -- fi -- ( echo nameserver $nameserver >>/etc/resolv.conf.dhclient ) -- exit_status=$? -+ conf="${conf}nameserver $nameserver\n" - done -- -- # If there were no errors, attempt to mv the new file into place. -- if [ $exit_status -eq 0 ]; then -- ( mv /etc/resolv.conf.dhclient /etc/resolv.conf ) -- exit_status = $? -- fi -- -- if [ $exit_status -ne 0 ]; then -- $LOGGER "Error while writing new /etc/resolv.conf." -+ if [ -x /sbin/resolvconf ]; then -+ printf "$conf" | resolvconf -a "$interface" -+ else -+ printf "$conf" > /etc/resolv.conf -+ chmod 644 /etc/resolv.conf - fi - fi - fi -diff -ur client.orig/scripts/linux client/scripts/linux ---- client.orig/scripts/linux 2006-09-07 18:53:10.476329752 +0100 -+++ client/scripts/linux 2006-09-07 19:18:57.000000000 +0100 -@@ -23,22 +23,22 @@ - # of the $1 in its args. - - make_resolv_conf() { -- if [ x"$new_domain_name_servers" != x ]; then -- cat /dev/null > /etc/resolv.conf.dhclient -- chmod 644 /etc/resolv.conf.dhclient -- if [ x"$new_domain_search" != x ]; then -- echo search $new_domain_search >> /etc/resolv.conf.dhclient -- elif [ x"$new_domain_name" != x ]; then -- # Note that the DHCP 'Domain Name Option' is really just a domain -- # name, and that this practice of using the domain name option as -- # a search path is both nonstandard and deprecated. -- echo search $new_domain_name >> /etc/resolv.conf.dhclient -+ if [ x$PEER_DNS = x ] || [ x$PEER_DNS = xyes ]; then -+ if [ "x$new_domain_name" != x ] || [ "x$new_domain_name_servers" != x ]; then -+ conf="# Generated by dhclient for interface $interface\n" -+ if [ "x$new_domain_name" != x ]; then -+ conf="${conf}search $new_domain_name\n" -+ fi -+ for nameserver in $new_domain_name_servers; do -+ conf="${conf}nameserver $nameserver\n" -+ done -+ if [ -x /sbin/resolvconf ]; then -+ printf "$conf" | resolvconf -a "$interface" -+ else -+ printf "$conf" > /etc/resolv.conf -+ chmod 644 /etc/resolv.conf -+ fi - fi -- for nameserver in $new_domain_name_servers; do -- echo nameserver $nameserver >>/etc/resolv.conf.dhclient -- done -- -- mv /etc/resolv.conf.dhclient /etc/resolv.conf - fi - # If we're making confs, may as well make an ntp.conf too - make_ntp_conf -diff -ur client.orig/scripts/netbsd client/scripts/netbsd ---- client.orig/scripts/netbsd 2006-09-07 18:53:10.476329752 +0100 -+++ client/scripts/netbsd 2006-09-07 19:20:10.000000000 +0100 -@@ -1,21 +1,22 @@ - #!/bin/sh - - make_resolv_conf() { -- if [ "x$new_domain_name" != x ] && [ x"$new_domain_name_servers" != x ]; then -- cat /dev/null > /etc/resolv.conf.dhclient -- if [ "x$new_domain_search != x ]; then -- echo search $new_domain_search >> /etc/resolv.conf.dhclient -- elif [ "x$new_domain_name != x ]; then -- # Note that the DHCP 'Domain Name Option' is really just a domain -- # name, and that this practice of using the domain name option as -- # a search path is both nonstandard and deprecated. -- echo search $new_domain_name >> /etc/resolv.conf.dhclient -+ if [ x$PEER_DNS = x ] || [ x$PEER_DNS = xyes ]; then -+ if [ "x$new_domain_name" != x ] || [ "x$new_domain_name_servers" != x ]; then -+ conf="# Generated by dhclient for interface $interface\n" -+ if [ "x$new_domain_name" != x ]; then -+ conf="${conf}search $new_domain_name\n" -+ fi -+ for nameserver in $new_domain_name_servers; do -+ conf="${conf}nameserver $nameserver\n" -+ done -+ if [ -x /sbin/resolvconf ]; then -+ printf "$conf" | resolvconf -a "$interface" -+ else -+ printf "$conf" > /etc/resolv.conf -+ chmod 644 /etc/resolv.conf -+ fi - fi -- for nameserver in $new_domain_name_servers; do -- echo nameserver $nameserver >>/etc/resolv.conf.dhclient -- done -- -- mv /etc/resolv.conf.dhclient /etc/resolv.conf - fi - # If we're making confs, may as well make an ntp.conf too - make_ntp_conf -diff -ur client.orig/scripts/openbsd client/scripts/openbsd ---- client.orig/scripts/openbsd 2006-09-07 18:53:10.476329752 +0100 -+++ client/scripts/openbsd 2006-09-07 19:20:38.000000000 +0100 -@@ -1,21 +1,22 @@ - #!/bin/sh - - make_resolv_conf() { -- if x"$new_domain_name_servers" != x ]; then -- cat /dev/null > /etc/resolv.conf.dhclient -- if [ x"$new_domain_search" != x ]; then -- echo search $new_domain_search >> /etc/resolv.conf.dhclient -- elif [ x"$new_domain_name" != x ]; then -- # Note that the DHCP 'Domain Name Option' is really just a domain -- # name, and that this practice of using the domain name option as -- # a search path is both nonstandard and deprecated. -- echo search $new_domain_name >> /etc/resolv.conf.dhclient -+ if [ x$PEER_DNS = x ] || [ x$PEER_DNS = xyes ]; then -+ if [ "x$new_domain_name" != x ] || [ "x$new_domain_name_servers" != x ]; then -+ conf="# Generated by dhclient for interface $interface\n" -+ if [ "x$new_domain_name" != x ]; then -+ conf="${conf}search $new_domain_name\n" -+ fi -+ for nameserver in $new_domain_name_servers; do -+ conf="${conf}nameserver $nameserver\n" -+ done -+ if [ -x /sbin/resolvconf ]; then -+ printf "$conf" | resolvconf -a "$interface" -+ else -+ printf "$conf" > /etc/resolv.conf -+ chmod 644 /etc/resolv.conf -+ fi - fi -- for nameserver in $new_domain_name_servers; do -- echo nameserver $nameserver >>/etc/resolv.conf.dhclient -- done -- -- mv /etc/ersolv.conf.dhclient /etc/resolv.conf - fi - # If we're making confs, may as well make an ntp.conf too - make_ntp_conf -diff -ur client.orig/scripts/solaris client/scripts/solaris ---- client.orig/scripts/solaris 2006-09-07 18:53:10.476329752 +0100 -+++ client/scripts/solaris 2006-09-07 19:21:12.000000000 +0100 -@@ -1,21 +1,22 @@ - #!/bin/sh - - make_resolv_conf() { -- if [ x"$new_domain_name_servers" != x ]; then -- cat /dev/null > /etc/resolv.conf.dhclient -- if [ x"$new_domain_search" != x ]; then -- echo search $new_domain_search >> /etc/resolv.conf.dhclient -- elif [ x"$new_domain_name" != x ]; then -- # Note that the DHCP 'Domain Name Option' is really just a domain -- # name, and that this practice of using the domain name option as -- # a search path is both nonstandard and deprecated. -- echo search $new_domain_name >> /etc/resolv.conf.dhclient -+ if [ x$PEER_DNS = x ] || [ x$PEER_DNS = xyes ]; then -+ if [ "x$new_domain_name" != x ] || [ "x$new_domain_name_servers" != x ]; then -+ conf="# Generated by dhclient for interface $interface\n" -+ if [ "x$new_domain_name" != x ]; then -+ conf="${conf}search $new_domain_name\n" -+ fi -+ for nameserver in $new_domain_name_servers; do -+ conf="${conf}nameserver $nameserver\n" -+ done -+ if [ -x /sbin/resolvconf ]; then -+ printf "$conf" | resolvconf -a "$interface" -+ else -+ printf "$conf" > /etc/resolv.conf -+ chmod 644 /etc/resolv.conf -+ fi - fi -- for nameserver in $new_domain_name_servers; do -- echo nameserver $nameserver >>/etc/resolv.conf.dhclient -- done -- -- mv /etc/resolv.conf.dhclient /etc/resolv.conf - fi - # If we're making confs, may as well make an ntp.conf too - make_ntp_conf diff --git a/net-misc/dhcp/files/dhcp-3.1.2_p1-CVE-2009-1892.patch b/net-misc/dhcp/files/dhcp-3.1.2_p1-CVE-2009-1892.patch deleted file mode 100644 index ae1b92af8..000000000 --- a/net-misc/dhcp/files/dhcp-3.1.2_p1-CVE-2009-1892.patch +++ /dev/null @@ -1,12 +0,0 @@ -diff -uNr dhcp-3.1.2.ORIG/server/dhcp.c dhcp-3.1.2/server/dhcp.c ---- dhcp-3.1.2.ORIG/server/dhcp.c 2009-07-13 14:26:15.000000000 +0100 -+++ dhcp-3.1.2/server/dhcp.c 2009-07-13 14:26:33.000000000 +0100 -@@ -1747,6 +1747,8 @@ - host_reference (&host, h, MDL); - } - if (!host) { -+ if (hp) -+ host_dereference (&hp, MDL); - find_hosts_by_haddr (&hp, - packet -> raw -> htype, - packet -> raw -> chaddr, diff --git a/net-misc/dhcp/files/dhcp-3.1.3-dhclient-no-down.patch b/net-misc/dhcp/files/dhcp-3.1.3-dhclient-no-down.patch deleted file mode 100644 index 89935df82..000000000 --- a/net-misc/dhcp/files/dhcp-3.1.3-dhclient-no-down.patch +++ /dev/null @@ -1,77 +0,0 @@ -diff -Nuar --exclude '*.orig' dhcp-3.1.3.orig//client/scripts/linux dhcp-3.1.3//client/scripts/linux ---- dhcp-3.1.3.orig//client/scripts/linux 2010-10-15 04:59:15.890664245 +0000 -+++ dhcp-3.1.3//client/scripts/linux 2010-10-15 05:04:57.940396350 +0000 -@@ -118,7 +118,7 @@ - if [ x$reason = xPREINIT ]; then - if [ x$alias_ip_address != x ]; then - # Bring down alias interface. Its routes will disappear too. -- ifconfig $interface:0- inet 0 -+ ifconfig $interface:0- inet 0.0.0.0 - fi - if [ $relmajor -lt 2 ] || ( [ $relmajor -eq 2 ] && [ $relminor -eq 0 ] ) - then -@@ -127,7 +127,7 @@ - # Add route to make broadcast work. Do not omit netmask. - route add default dev $interface netmask 0.0.0.0 - else -- ifconfig $interface 0 up -+ ifconfig $interface 0.0.0.0 up - fi - - # We need to give the kernel some time to get the interface up. -@@ -155,12 +155,12 @@ - if [ x$old_ip_address != x ] && [ x$alias_ip_address != x ] && \ - [ x$alias_ip_address != x$old_ip_address ]; then - # Possible new alias. Remove old alias. -- ifconfig $interface:0- inet 0 -+ ifconfig $interface:0- inet 0.0.0.0 - fi - if [ x$old_ip_address != x ] && [ x$old_ip_address != x$new_ip_address ]; then - # IP address changed. Bringing down the interface will delete all routes, - # and clear the ARP cache. -- ifconfig $interface inet 0 down -+ ifconfig $interface inet 0.0.0.0 - - fi - if [ x$old_ip_address = x ] || [ x$old_ip_address != x$new_ip_address ] || \ -@@ -179,7 +179,7 @@ - fi - if [ x$new_ip_address != x$alias_ip_address ] && [ x$alias_ip_address != x ]; - then -- ifconfig $interface:0- inet 0 -+ ifconfig $interface:0- inet 0.0.0.0 - ifconfig $interface:0 inet $alias_ip_address $alias_subnet_arg - route add -host $alias_ip_address $interface:0 - fi -@@ -191,11 +191,11 @@ - || [ x$reason = xSTOP ]; then - if [ x$alias_ip_address != x ]; then - # Turn off alias interface. -- ifconfig $interface:0- inet 0 -+ ifconfig $interface:0- inet 0.0.0.0 - fi - if [ x$old_ip_address != x ]; then - # Shut down interface, which will delete routes and clear arp cache. -- ifconfig $interface inet 0 down -+ ifconfig $interface inet 0.0.0.0 - fi - if [ x$alias_ip_address != x ]; then - ifconfig $interface:0 inet $alias_ip_address $alias_subnet_arg -@@ -206,7 +206,7 @@ - - if [ x$reason = xTIMEOUT ]; then - if [ x$alias_ip_address != x ]; then -- ifconfig $interface:0- inet 0 -+ ifconfig $interface:0- inet 0.0.0.0 - fi - ifconfig $interface inet $new_ip_address $new_subnet_arg \ - $new_broadcast_arg $mtu_arg -@@ -227,7 +227,7 @@ - make_resolv_conf - exit_with_hooks 0 - fi -- ifconfig $interface inet 0 down -+ ifconfig $interface inet 0.0.0.0 - exit_with_hooks 1 - fi - diff --git a/net-misc/dhcp/files/dhcp-4.2.0-PPP.patch b/net-misc/dhcp/files/dhcp-4.2.0-PPP.patch new file mode 100644 index 000000000..bef2be7f0 --- /dev/null +++ b/net-misc/dhcp/files/dhcp-4.2.0-PPP.patch @@ -0,0 +1,150 @@ +diff -up dhcp-4.2.0-P1/client/dhc6.c.PPP dhcp-4.2.0-P1/client/dhc6.c +--- dhcp-4.2.0-P1/client/dhc6.c.PPP 2010-11-05 10:47:37.000000000 +0100 ++++ dhcp-4.2.0-P1/client/dhc6.c 2010-11-09 15:54:12.000000000 +0100 +@@ -129,7 +129,7 @@ extern int stateless; + * is not how it is intended. Upcoming rearchitecting the client should + * address this "one daemon model." + */ +-void ++isc_result_t + form_duid(struct data_string *duid, const char *file, int line) + { + struct interface_info *ip; +@@ -141,6 +141,15 @@ form_duid(struct data_string *duid, cons + if (ip == NULL) + log_fatal("Impossible condition at %s:%d.", MDL); + ++ while (ip && ip->hw_address.hbuf[0] == HTYPE_RESERVED) { ++ /* Try the other interfaces */ ++ log_debug("Cannot form default DUID from interface %s.", ip->name); ++ ip = ip->next; ++ } ++ if (ip == NULL) { ++ return ISC_R_UNEXPECTED; ++ } ++ + if ((ip->hw_address.hlen == 0) || + (ip->hw_address.hlen > sizeof(ip->hw_address.hbuf))) + log_fatal("Impossible hardware address length at %s:%d.", MDL); +@@ -176,6 +185,8 @@ form_duid(struct data_string *duid, cons + memcpy(duid->buffer->data + 4, ip->hw_address.hbuf + 1, + ip->hw_address.hlen - 1); + } ++ ++ return ISC_R_SUCCESS; + } + + /* +@@ -5289,7 +5300,8 @@ make_client6_options(struct client_state + */ + if ((oc = lookup_option(&dhcpv6_universe, *op, + D6O_CLIENTID)) == NULL) { +- if (!option_cache(&oc, &default_duid, NULL, clientid_option, ++ if (default_duid.len == 0 || ++ !option_cache(&oc, &default_duid, NULL, clientid_option, + MDL)) + log_fatal("Failure assembling a DUID."); + +diff -up dhcp-4.2.0-P1/client/dhclient.c.PPP dhcp-4.2.0-P1/client/dhclient.c +--- dhcp-4.2.0-P1/client/dhclient.c.PPP 2010-11-05 10:47:37.000000000 +0100 ++++ dhcp-4.2.0-P1/client/dhclient.c 2010-11-09 15:37:26.000000000 +0100 +@@ -911,8 +911,8 @@ main(int argc, char **argv) { + if (default_duid.buffer != NULL) + data_string_forget(&default_duid, MDL); + +- form_duid(&default_duid, MDL); +- write_duid(&default_duid); ++ if (form_duid(&default_duid, MDL) == ISC_R_SUCCESS) ++ write_duid(&default_duid); + } + + for (ip = interfaces ; ip != NULL ; ip = ip->next) { +diff -up dhcp-4.2.0-P1/common/bpf.c.PPP dhcp-4.2.0-P1/common/bpf.c +--- dhcp-4.2.0-P1/common/bpf.c.PPP 2010-11-05 10:47:37.000000000 +0100 ++++ dhcp-4.2.0-P1/common/bpf.c 2010-11-09 15:42:42.000000000 +0100 +@@ -599,6 +599,22 @@ get_hw_addr(const char *name, struct har + memcpy(&hw->hbuf[1], LLADDR(sa), sa->sdl_alen); + break; + #endif /* IFT_FDDI */ ++#if defined(IFT_PPP) ++ case IFT_PPP: ++ if (local_family != AF_INET6) ++ log_fatal("Unsupported device type %d for \"%s\"", ++ sa->sdl_type, name); ++ hw->hlen = 0; ++ hw->hbuf[0] = HTYPE_RESERVED; ++ /* 0xdeadbeef should never occur on the wire, ++ * and is a signature that something went wrong. ++ */ ++ hw->hbuf[1] = 0xde; ++ hw->hbuf[2] = 0xad; ++ hw->hbuf[3] = 0xbe; ++ hw->hbuf[4] = 0xef; ++ break; ++#endif + default: + log_fatal("Unsupported device type %d for \"%s\"", + sa->sdl_type, name); +diff -up dhcp-4.2.0-P1/common/lpf.c.PPP dhcp-4.2.0-P1/common/lpf.c +--- dhcp-4.2.0-P1/common/lpf.c.PPP 2010-11-05 10:47:37.000000000 +0100 ++++ dhcp-4.2.0-P1/common/lpf.c 2010-11-09 15:45:40.000000000 +0100 +@@ -502,6 +502,22 @@ get_hw_addr(const char *name, struct har + hw->hbuf[0] = HTYPE_FDDI; + memcpy(&hw->hbuf[1], sa->sa_data, 16); + break; ++#if defined(ARPHRD_PPP) ++ case ARPHRD_PPP: ++ if (local_family != AF_INET6) ++ log_fatal("Unsupported device type %d for \"%s\"", ++ sa->sa_family, name); ++ hw->hlen = 0; ++ hw->hbuf[0] = HTYPE_RESERVED; ++ /* 0xdeadbeef should never occur on the wire, ++ * and is a signature that something went wrong. ++ */ ++ hw->hbuf[1] = 0xde; ++ hw->hbuf[2] = 0xad; ++ hw->hbuf[3] = 0xbe; ++ hw->hbuf[4] = 0xef; ++ break; ++#endif + default: + log_fatal("Unsupported device type %ld for \"%s\"", + (long int)sa->sa_family, name); +diff -up dhcp-4.2.0-P1/includes/dhcpd.h.PPP dhcp-4.2.0-P1/includes/dhcpd.h +--- dhcp-4.2.0-P1/includes/dhcpd.h.PPP 2010-11-05 10:47:37.000000000 +0100 ++++ dhcp-4.2.0-P1/includes/dhcpd.h 2010-11-09 15:46:58.000000000 +0100 +@@ -2733,7 +2733,7 @@ void dhcpv4_client_assignments(void); + void dhcpv6_client_assignments(void); + + /* dhc6.c */ +-void form_duid(struct data_string *duid, const char *file, int line); ++isc_result_t form_duid(struct data_string *duid, const char *file, int line); + void dhc6_lease_destroy(struct dhc6_lease **src, const char *file, int line); + void start_init6(struct client_state *client); + void start_info_request6(struct client_state *client); +diff -up dhcp-4.2.0-P1/includes/dhcp.h.PPP dhcp-4.2.0-P1/includes/dhcp.h +--- dhcp-4.2.0-P1/includes/dhcp.h.PPP 2010-11-05 10:47:37.000000000 +0100 ++++ dhcp-4.2.0-P1/includes/dhcp.h 2010-11-09 15:48:53.000000000 +0100 +@@ -80,6 +80,8 @@ struct dhcp_packet { + #define HTYPE_IEEE802 6 /* IEEE 802.2 Token Ring... */ + #define HTYPE_FDDI 8 /* FDDI... */ + ++#define HTYPE_RESERVED 0 /* RFC 5494 */ ++ + /* Magic cookie validating dhcp options field (and bootp vendor + extensions field). */ + #define DHCP_OPTIONS_COOKIE "\143\202\123\143" +diff -up dhcp-4.2.0-P1/server/dhcpv6.c.PPP dhcp-4.2.0-P1/server/dhcpv6.c +--- dhcp-4.2.0-P1/server/dhcpv6.c.PPP 2010-11-05 10:47:37.000000000 +0100 ++++ dhcp-4.2.0-P1/server/dhcpv6.c 2010-11-09 15:50:17.000000000 +0100 +@@ -300,6 +300,9 @@ generate_new_server_duid(void) { + if (p->hw_address.hlen > 0) { + break; + } ++ if (p->next == NULL && p->hw_address.hbuf[0] == HTYPE_RESERVED) { ++ log_error("Can not generate DUID from interfaces which do not have hardware addresses, please configure server-duid!"); ++ } + } + if (p == NULL) { + return ISC_R_UNEXPECTED; diff --git a/net-misc/dhcp/files/dhcp-4.2.2-bind-build-flags.patch b/net-misc/dhcp/files/dhcp-4.2.2-bind-build-flags.patch new file mode 100644 index 000000000..ae3363828 --- /dev/null +++ b/net-misc/dhcp/files/dhcp-4.2.2-bind-build-flags.patch @@ -0,0 +1,14 @@ +bind sets up BUILD_XXX vars for building native tools, but then +doesn't use them for the "gen" tool + +--- a/bind/lib/export/dns/Makefile.in ++++ b/bind/lib/export/dns/Makefile.in +@@ -166,7 +166,7 @@ + ./gen -s ${srcdir} > code.h + + gen: ${srcdir}/gen.c +- ${CC} ${ALL_CFLAGS} ${LDFLAGS} -o $@ ${srcdir}/gen.c ${LIBS} ++ ${BUILD_CC} ${BUILD_CFLAGS} ${CINCLUDES} ${BUILD_LDFLAGS} -o $@ ${srcdir}/gen.c ${BUILD_LIBS} + + #We don't need rbtdb64 for this library + #rbtdb64.@O@: rbtdb.c diff --git a/net-misc/dhcp/files/dhcp-4.2.2-bind-disable.patch b/net-misc/dhcp/files/dhcp-4.2.2-bind-disable.patch new file mode 100644 index 000000000..4c7810e89 --- /dev/null +++ b/net-misc/dhcp/files/dhcp-4.2.2-bind-disable.patch @@ -0,0 +1,13 @@ +we take care of building this ourselves in the ebuild so +build settings are properly respected + +--- dhcp-4.2.2/bind/Makefile ++++ dhcp-4.2.2/bind/Makefile +@@ -29,6 +29,7 @@ + bindsrcdir=bind-${version} + + all: ++disable: + # Extract the source from the tarball, if it hasn't been already. + @if test -d ${bindsrcdir} ; then \ + echo ${bindsrcdir} already unpacked... ; \ diff --git a/net-misc/dhcp/files/dhcp-4.2.2-bind-parallel-build.patch b/net-misc/dhcp/files/dhcp-4.2.2-bind-parallel-build.patch new file mode 100644 index 000000000..6136154f6 --- /dev/null +++ b/net-misc/dhcp/files/dhcp-4.2.2-bind-parallel-build.patch @@ -0,0 +1,14 @@ +fix the bind subdir parallel builds + +https://bugs.gentoo.org/380717 + +--- a/bind/lib/export/isc/Makefile.in ++++ b/bind/lib/export/isc/Makefile.in +@@ -114,6 +114,7 @@ + -DLIBAGE=${LIBAGE} \ + -c ${srcdir}/version.c + ++${OBJS}: | subdirs + libisc.@SA@: ${OBJS} + ${AR} ${ARFLAGS} $@ ${OBJS} + ${RANLIB} $@ diff --git a/net-misc/dhcp/files/dhcp-4.2.1-dhclient-resolvconf.patch b/net-misc/dhcp/files/dhcp-4.2.2-dhclient-resolvconf.patch index 6d8caecdf..95a0d6564 100644 --- a/net-misc/dhcp/files/dhcp-4.2.1-dhclient-resolvconf.patch +++ b/net-misc/dhcp/files/dhcp-4.2.2-dhclient-resolvconf.patch @@ -1,6 +1,6 @@ --- a/client/scripts/bsdos +++ b/client/scripts/bsdos -@@ -1,34 +1,41 @@ +@@ -1,40 +1,46 @@ #!/bin/sh make_resolv_conf() { @@ -35,8 +35,15 @@ + conf="${conf}search ${new_dhcp6_domain_search}\n" fi for nameserver in ${new_dhcp6_name_servers} ; do -- echo nameserver ${nameserver} >> /etc/resolv.conf.dhclient6 -+ conf="${conf}nameserver ${nameserver}\n" + # If the nameserver has a link-local address + # add a <zone_id> (interface name) to it. + case $nameserver in + fe80:*) zone_id="%$interface";; + FE80:*) zone_id="%$interface";; + *) zone_id='';; + esac +- echo nameserver ${nameserver}$zone_id >> /etc/resolv.conf.dhclient6 ++ conf="${conf}nameserver ${nameserver}$zone_id\n" done + fi @@ -50,13 +57,11 @@ + chmod 644 /etc/resolv.conf + fi fi -+ - # If we're making confs, may as well make an ntp.conf too - make_ntp_conf } + --- a/client/scripts/freebsd +++ b/client/scripts/freebsd -@@ -11,68 +11,41 @@ +@@ -11,73 +11,45 @@ fi make_resolv_conf() { @@ -122,7 +127,14 @@ - if [ $exit_status -ne 0 ] ; then - break - fi -- ( echo nameserver ${nameserver} >> /etc/resolv.conf.dhclient6 ) + # If the nameserver has a link-local address + # add a <zone_id> (interface name) to it. + case $nameserver in + fe80:*) zone_id="%$interface";; + FE80:*) zone_id="%$interface";; + *) zone_id='';; + esac +- ( echo nameserver ${nameserver}$zone_id >> /etc/resolv.conf.dhclient6 ) - exit_status=$? - done - @@ -134,7 +146,7 @@ + conf="${conf}search ${new_dhcp6_domain_search}\n" + fi + for nameserver in ${new_dhcp6_name_servers} ; do -+ conf="${conf}nameserver ${nameserver}\n" ++ conf="${conf}nameserver ${nameserver}$zone_id\n" + done + fi @@ -150,13 +162,10 @@ + chmod 644 /etc/resolv.conf fi fi -+ - # If we're making confs, may as well make an ntp.conf too - make_ntp_conf } --- a/client/scripts/linux +++ b/client/scripts/linux -@@ -26,35 +26,41 @@ +@@ -26,44 +26,49 @@ ip=/sbin/ip make_resolv_conf() { @@ -193,10 +202,20 @@ - echo search ${new_dhcp6_domain_search} >> /etc/resolv.conf.dhclient6 + conf="${conf}search ${new_dhcp6_domain_search}\n" fi + shopt -s nocasematch for nameserver in ${new_dhcp6_name_servers} ; do -- echo nameserver ${nameserver} >> /etc/resolv.conf.dhclient6 -+ conf="${conf}nameserver ${nameserver}\n" + # If the nameserver has a link-local address + # add a <zone_id> (interface name) to it. + if [[ "$nameserver" =~ ^fe80:: ]] + then + zone_id="%$interface" + else + zone_id= + fi +- echo nameserver ${nameserver}$zone_id >> /etc/resolv.conf.dhclient6 ++ conf="${conf}nameserver ${nameserver}$zone_id\n" done + shopt -u nocasematch + fi - mv /etc/resolv.conf.dhclient6 /etc/resolv.conf @@ -209,13 +228,11 @@ + chmod 644 /etc/resolv.conf + fi fi -+ - # If we're making confs, may as well make an ntp.conf too - make_ntp_conf } + --- a/client/scripts/netbsd +++ b/client/scripts/netbsd -@@ -1,34 +1,41 @@ +@@ -1,40 +1,46 @@ #!/bin/sh make_resolv_conf() { @@ -253,8 +270,15 @@ + conf="${conf}search ${new_dhcp6_domain_search}\n" fi for nameserver in ${new_dhcp6_name_servers} ; do -- echo nameserver ${nameserver} >> /etc/resolv.conf.dhclient6 -+ conf="${conf}nameserver ${nameserver}\n" + # If the nameserver has a link-local address + # add a <zone_id> (interface name) to it. + case $nameserver in + fe80:*) zone_id="%$interface";; + FE80:*) zone_id="%$interface";; + *) zone_id='';; + esac +- echo nameserver ${nameserver}$zone_id >> /etc/resolv.conf.dhclient6 ++ conf="${conf}nameserver ${nameserver}$zone_id\n" done + fi @@ -268,17 +292,15 @@ + chmod 644 /etc/resolv.conf + fi fi -+ - # If we're making confs, may as well make an ntp.conf too - make_ntp_conf } + --- a/client/scripts/openbsd +++ b/client/scripts/openbsd -@@ -1,34 +1,41 @@ +@@ -1,40 +1,46 @@ #!/bin/sh make_resolv_conf() { -- if x"$new_domain_name_servers" != x ]; then +- if [ x"$new_domain_name_servers" != x ]; then - cat /dev/null > /etc/resolv.conf.dhclient - if [ x"$new_domain_search" != x ]; then - echo search $new_domain_search >> /etc/resolv.conf.dhclient @@ -302,7 +324,7 @@ + conf="${conf}nameserver ${nameserver}\n" done - -- mv /etc/ersolv.conf.dhclient /etc/resolv.conf +- mv /etc/resolv.conf.dhclient /etc/resolv.conf elif [ "x${new_dhcp6_name_servers}" != x ] ; then - cat /dev/null > /etc/resolv.conf.dhclient6 - chmod 644 /etc/resolv.conf.dhclient6 @@ -312,8 +334,15 @@ + conf="${conf}search ${new_dhcp6_domain_search}\n" fi for nameserver in ${new_dhcp6_name_servers} ; do -- echo nameserver ${nameserver} >> /etc/resolv.conf.dhclient6 -+ conf="${conf}nameserver ${nameserver}\n" + # If the nameserver has a link-local address + # add a <zone_id> (interface name) to it. + case $nameserver in + fe80:*) zone_id="%$interface";; + FE80:*) zone_id="%$interface";; + *) zone_id='';; + esac +- echo nameserver ${nameserver}$zone_id >> /etc/resolv.conf.dhclient6 ++ conf="${conf}nameserver ${nameserver}$zone_id\n" done + fi @@ -327,13 +356,11 @@ + chmod 644 /etc/resolv.conf + fi fi -+ - # If we're making confs, may as well make an ntp.conf too - make_ntp_conf } + --- a/client/scripts/solaris +++ b/client/scripts/solaris -@@ -1,22 +1,41 @@ +@@ -1,21 +1,39 @@ #!/bin/sh make_resolv_conf() { @@ -378,7 +405,5 @@ + chmod 644 /etc/resolv.conf + fi fi -+ - # If we're making confs, may as well make an ntp.conf too - make_ntp_conf } + diff --git a/net-misc/dhcp/files/dhcp-4.0.1-dhclient-stdin-conf.patch b/net-misc/dhcp/files/dhcp-4.2.2-dhclient-stdin-conf.patch index ddbe4a39d..bf5a54c32 100644 --- a/net-misc/dhcp/files/dhcp-4.0.1-dhclient-stdin-conf.patch +++ b/net-misc/dhcp/files/dhcp-4.2.2-dhclient-stdin-conf.patch @@ -1,18 +1,17 @@ -diff -uNr dhcp-4.0.1.ORIG/client/clparse.c dhcp-4.0.1/client/clparse.c ---- dhcp-4.0.1.ORIG/client/clparse.c 2009-03-30 13:54:47.000000000 +0100 -+++ dhcp-4.0.1/client/clparse.c 2009-03-30 13:58:02.000000000 +0100 -@@ -174,6 +174,10 @@ +--- dhcp-4.2.2/client/clparse.c ++++ dhcp-4.2.2/client/clparse.c +@@ -182,6 +182,10 @@ isc_result_t read_client_conf () #endif } -+ /* Read any extra configuration from stdin */ -+ read_client_conf_stdin ((struct interface_info *)0, -+ &top_level_config); ++ /* Read any extra configuration from stdin */ ++ extern int read_client_conf_stdin (struct interface_info *ip, struct client_config *client); ++ read_client_conf_stdin (NULL, &top_level_config); + /* Set up state and config structures for clients that don't have per-interface configuration statements. */ config = (struct client_config *)0; -@@ -203,23 +207,13 @@ +@@ -211,23 +215,13 @@ isc_result_t read_client_conf () return status; } @@ -25,7 +24,7 @@ diff -uNr dhcp-4.0.1.ORIG/client/clparse.c dhcp-4.0.1/client/clparse.c const char *val; int token; isc_result_t status; - + - if ((file = open (name, O_RDONLY)) < 0) - return uerr2isc (errno); - @@ -37,9 +36,9 @@ diff -uNr dhcp-4.0.1.ORIG/client/clparse.c dhcp-4.0.1/client/clparse.c do { token = peek_token (&val, (unsigned *)0, cfile); if (token == END_OF_FILE) -@@ -230,10 +224,74 @@ +@@ -238,10 +232,74 @@ int read_client_conf_file (const char *name, struct interface_info *ip, status = (cfile -> warnings_occurred - ? ISC_R_BADPARSE + ? DHCP_R_BADPARSE : ISC_R_SUCCESS); + return status; +} diff --git a/net-misc/dhcp/files/dhcp-4.2.2-gpxe-cid.patch b/net-misc/dhcp/files/dhcp-4.2.2-gpxe-cid.patch new file mode 100644 index 000000000..c0be4c239 --- /dev/null +++ b/net-misc/dhcp/files/dhcp-4.2.2-gpxe-cid.patch @@ -0,0 +1,132 @@ +diff -up dhcp-4.2.2/client/dhclient.c.gpxe-cid dhcp-4.2.2/client/dhclient.c +--- dhcp-4.2.2/client/dhclient.c.gpxe-cid 2011-09-16 18:23:20.190453902 +0200 ++++ dhcp-4.2.2/client/dhclient.c 2011-09-16 18:27:15.568463599 +0200 +@@ -58,6 +58,13 @@ const char *path_dhclient_pid = NULL; + static char path_dhclient_script_array[] = _PATH_DHCLIENT_SCRIPT; + char *path_dhclient_script = path_dhclient_script_array; + ++/* Default Prefix */ ++static unsigned char default_prefix[12] = { ++ 0xff, 0x00, 0x00, 0x00, ++ 0x00, 0x00, 0x02, 0x00, ++ 0x00, 0x02, 0xc9, 0x00 ++}; ++ + /* False (default) => we write and use a pid file */ + isc_boolean_t no_pid_file = ISC_FALSE; + +@@ -1250,6 +1257,12 @@ int find_subnet (struct subnet **sp, + static void setup_ib_interface(struct interface_info *ip) + { + struct group *g; ++ struct hardware *hw = &ip->hw_address; ++ char client_id[64]; ++ char *arg_conf = NULL; ++ int arg_conf_len = 0; ++ isc_result_t status; ++ struct parse *cfile = (struct parse *)0; + + /* Set the broadcast flag */ + ip->client->config->bootp_broadcast_always = 1; +@@ -1266,8 +1279,39 @@ static void setup_ib_interface(struct in + } + } + +- /* No client ID specified */ +- log_fatal("dhcp-client-identifier must be specified for InfiniBand"); ++ /* ++ * No client ID specified, make up one based on a default ++ * "prefix" and the port GUID. ++ * ++ * NOTE: This is compatible with what gpxe does. ++ */ ++ sprintf(client_id, "%.2x:%.2x:%.2x:%.2x:%.2x:%.2x:%.2x:%.2x:%.2x:%.2x:%.2x:%.2x:%.2x:%.2x:%.2x:%.2x:%.2x:%.2x:%.2x:%.2x", ++ default_prefix[0], default_prefix[1], default_prefix[2], ++ default_prefix[3], default_prefix[4], default_prefix[5], ++ default_prefix[6], default_prefix[7], default_prefix[8], ++ default_prefix[9], default_prefix[10], default_prefix[11], ++ hw->hbuf[1], hw->hbuf[2], hw->hbuf[3], hw->hbuf[4], ++ hw->hbuf[5], hw->hbuf[6], hw->hbuf[7], hw->hbuf[8]); ++ ++ arg_conf_len = asprintf(&arg_conf, ++ "send dhcp-client-identifier %s;", ++ client_id); ++ ++ if ((arg_conf == 0) || (arg_conf_len <= 0)) ++ log_fatal("Unable to send option dhcp-client-identifier"); ++ ++ status = new_parse(&cfile, -1, arg_conf, arg_conf_len, ++ "Automatic Infiniband client identifier", 0); ++ ++ if ((status != ISC_R_SUCCESS) || (cfile->warnings_occurred)) ++ log_fatal("Failed to parse Infiniband client identifier"); ++ ++ parse_client_statement(cfile, NULL, ip->client->config); ++ ++ if (cfile->warnings_occurred) ++ log_fatal("Failed to parse Infiniband client identifier"); ++ ++ end_parse(&cfile); + } + + /* Individual States: +diff -up dhcp-4.2.2/common/lpf.c.gpxe-cid dhcp-4.2.2/common/lpf.c +--- dhcp-4.2.2/common/lpf.c.gpxe-cid 2011-09-16 18:23:20.183453996 +0200 ++++ dhcp-4.2.2/common/lpf.c 2011-09-16 18:25:28.235804421 +0200 +@@ -591,6 +591,37 @@ void maybe_setup_fallback () + } + } + ++static unsigned char * get_ib_hw_addr(char * name) ++{ ++ struct ifaddrs *ifaddrs; ++ struct ifaddrs *ifa; ++ struct sockaddr_ll *sll = NULL; ++ static unsigned char hw_addr[8]; ++ ++ if (getifaddrs(&ifaddrs) == -1) ++ return NULL; ++ ++ for (ifa = ifaddrs; ifa != NULL; ifa = ifa->ifa_next) { ++ if (ifa->ifa_addr == NULL) ++ continue; ++ if (ifa->ifa_addr->sa_family != AF_PACKET) ++ continue; ++ if (ifa->ifa_flags & IFF_LOOPBACK) ++ continue; ++ if (strcmp(ifa->ifa_name, name) == 0) { ++ sll = (struct sockaddr_ll *)(void *)ifa->ifa_addr; ++ break; ++ } ++ } ++ if (sll == NULL) { ++ freeifaddrs(ifaddrs); ++ return NULL; ++ } ++ memcpy(hw_addr, &sll->sll_addr[sll->sll_halen - 8], 8); ++ freeifaddrs(ifaddrs); ++ return (unsigned char *)&hw_addr; ++} ++ + void + get_hw_addr(struct interface_info *info) + { +@@ -599,6 +630,7 @@ get_hw_addr(struct interface_info *info) + struct ifaddrs *ifaddrs; + struct ifaddrs *ifa; + struct sockaddr_ll *sll = NULL; ++ unsigned char *hw_addr; + + if (getifaddrs(&ifaddrs) == -1) + log_fatal("Failed to get interfaces"); +@@ -660,6 +692,10 @@ get_hw_addr(struct interface_info *info) + + hw->hlen = 1; + hw->hbuf[0] = HTYPE_INFINIBAND; ++ hw_addr = get_ib_hw_addr(name); ++ if (!hw_addr) ++ log_fatal("Failed getting %s hw addr", name); ++ memcpy (&hw->hbuf [1], hw_addr, 8); + break; + #if defined(ARPHRD_PPP) + case ARPHRD_PPP: diff --git a/net-misc/dhcp/files/dhcp-4.2.0-improved-xid.patch b/net-misc/dhcp/files/dhcp-4.2.2-improved-xid.patch index 567601f06..f49fc7845 100644 --- a/net-misc/dhcp/files/dhcp-4.2.0-improved-xid.patch +++ b/net-misc/dhcp/files/dhcp-4.2.2-improved-xid.patch @@ -1,138 +1,138 @@ -diff -up dhcp-4.2.0/client/dhclient.c.xid dhcp-4.2.0/client/dhclient.c
---- dhcp-4.2.0/client/dhclient.c.xid 2010-09-23 06:21:03.000000000 -0400
-+++ dhcp-4.2.0/client/dhclient.c 2010-09-23 09:14:09.000000000 -0400
-@@ -805,6 +805,26 @@ main(int argc, char **argv) {
- }
- }
-
-+ /* We create a backup seed before rediscovering interfaces in order to
-+ have a seed built using all of the available interfaces
-+ It's interesting if required interfaces doesn't let us defined
-+ a really unique seed due to a lack of valid HW addr later
-+ (this is the case with DHCP over IB)
-+ We only use the last device as using a sum could broke the
-+ uniqueness of the seed among multiple nodes
-+ */
-+ unsigned backup_seed = 0;
-+ for (ip = interfaces; ip; ip = ip -> next) {
-+ int junk;
-+ if ( ip -> hw_address.hlen <= sizeof seed )
-+ continue;
-+ memcpy (&junk,
-+ &ip -> hw_address.hbuf [ip -> hw_address.hlen -
-+ sizeof seed], sizeof seed);
-+ backup_seed = junk;
-+ }
-+
-+
- /* At this point, all the interfaces that the script thinks
- are relevant should be running, so now we once again call
- discover_interfaces(), and this time ask it to actually set
-@@ -819,14 +839,36 @@ main(int argc, char **argv) {
- Not much entropy, but we're booting, so we're not likely to
- find anything better. */
- seed = 0;
-+ int seed_flag = 0;
- for (ip = interfaces; ip; ip = ip->next) {
- int junk;
-+ if ( ip -> hw_address.hlen <= sizeof seed )
-+ continue;
- memcpy(&junk,
- &ip->hw_address.hbuf[ip->hw_address.hlen -
- sizeof seed], sizeof seed);
- seed += junk;
-+ seed_flag = 1;
- }
-- srandom(seed + cur_time);
-+ if ( seed_flag == 0 ) {
-+ if ( backup_seed != 0 ) {
-+ seed = backup_seed;
-+ log_info ("xid: rand init seed (0x%x) built using all"
-+ " available interfaces",seed);
-+ }
-+ else {
-+ seed = cur_time^((unsigned) gethostid()) ;
-+ log_info ("xid: warning: no netdev with useable HWADDR found"
-+ " for seed's uniqueness enforcement");
-+ log_info ("xid: rand init seed (0x%x) built using gethostid",
-+ seed);
-+ }
-+ /* we only use seed and no current time as a broadcast reply */
-+ /* will certainly be used by the hwaddrless interface */
-+ srandom(seed);
-+ }
-+ else
-+ srandom(seed + cur_time);
-
- /* Setup specific Infiniband options */
- for (ip = interfaces; ip; ip = ip->next) {
-@@ -1310,7 +1352,7 @@ void dhcpack (packet)
- return;
- }
-
-- log_info ("DHCPACK from %s", piaddr (packet -> client_addr));
-+ log_info ("DHCPACK from %s (xid=0x%x)", piaddr (packet -> client_addr), client -> xid);
-
- lease = packet_to_lease (packet, client);
- if (!lease) {
-@@ -2010,7 +2052,7 @@ void dhcpnak (packet)
- return;
- }
-
-- log_info ("DHCPNAK from %s", piaddr (packet -> client_addr));
-+ log_info ("DHCPNAK from %s (xid=0x%x)", piaddr (packet -> client_addr), client -> xid);
-
- if (!client -> active) {
- #if defined (DEBUG)
-@@ -2136,10 +2178,10 @@ void send_discover (cpp)
- client -> packet.secs = htons (65535);
- client -> secs = client -> packet.secs;
-
-- log_info ("DHCPDISCOVER on %s to %s port %d interval %ld",
-+ log_info ("DHCPDISCOVER on %s to %s port %d interval %ld (xid=0x%x)",
- client -> name ? client -> name : client -> interface -> name,
- inet_ntoa (sockaddr_broadcast.sin_addr),
-- ntohs (sockaddr_broadcast.sin_port), (long)(client -> interval));
-+ ntohs (sockaddr_broadcast.sin_port), (long)(client -> interval), client -> xid);
-
- /* Send out a packet. */
- result = send_packet (client -> interface, (struct packet *)0,
-@@ -2394,10 +2436,10 @@ void send_request (cpp)
- client -> packet.secs = htons (65535);
- }
-
-- log_info ("DHCPREQUEST on %s to %s port %d",
-+ log_info ("DHCPREQUEST on %s to %s port %d (xid=0x%x)",
- client -> name ? client -> name : client -> interface -> name,
- inet_ntoa (destination.sin_addr),
-- ntohs (destination.sin_port));
-+ ntohs (destination.sin_port), client -> xid);
-
- if (destination.sin_addr.s_addr != INADDR_BROADCAST &&
- fallback_interface)
-@@ -2427,10 +2469,10 @@ void send_decline (cpp)
-
- int result;
-
-- log_info ("DHCPDECLINE on %s to %s port %d",
-+ log_info ("DHCPDECLINE on %s to %s port %d (xid=0x%x)",
- client -> name ? client -> name : client -> interface -> name,
- inet_ntoa (sockaddr_broadcast.sin_addr),
-- ntohs (sockaddr_broadcast.sin_port));
-+ ntohs (sockaddr_broadcast.sin_port), client -> xid);
-
- /* Send out a packet. */
- result = send_packet (client -> interface, (struct packet *)0,
-@@ -2470,10 +2512,10 @@ void send_release (cpp)
- return;
- }
-
-- log_info ("DHCPRELEASE on %s to %s port %d",
-+ log_info ("DHCPRELEASE on %s to %s port %d (xid=0x%x)",
- client -> name ? client -> name : client -> interface -> name,
- inet_ntoa (destination.sin_addr),
-- ntohs (destination.sin_port));
-+ ntohs (destination.sin_port), client -> xid);
-
- if (fallback_interface)
- result = send_packet (fallback_interface,
+diff -up dhcp-4.2.2/client/dhclient.c.improved-xid dhcp-4.2.2/client/dhclient.c +--- dhcp-4.2.2/client/dhclient.c.improved-xid 2011-09-16 18:18:00.649730661 +0200 ++++ dhcp-4.2.2/client/dhclient.c 2011-09-16 18:22:36.815035513 +0200 +@@ -898,6 +898,26 @@ main(int argc, char **argv) { + } + } + ++ /* We create a backup seed before rediscovering interfaces in order to ++ have a seed built using all of the available interfaces ++ It's interesting if required interfaces doesn't let us defined ++ a really unique seed due to a lack of valid HW addr later ++ (this is the case with DHCP over IB) ++ We only use the last device as using a sum could broke the ++ uniqueness of the seed among multiple nodes ++ */ ++ unsigned backup_seed = 0; ++ for (ip = interfaces; ip; ip = ip -> next) { ++ int junk; ++ if ( ip -> hw_address.hlen <= sizeof seed ) ++ continue; ++ memcpy (&junk, ++ &ip -> hw_address.hbuf [ip -> hw_address.hlen - ++ sizeof seed], sizeof seed); ++ backup_seed = junk; ++ } ++ ++ + /* At this point, all the interfaces that the script thinks + are relevant should be running, so now we once again call + discover_interfaces(), and this time ask it to actually set +@@ -912,14 +932,36 @@ main(int argc, char **argv) { + Not much entropy, but we're booting, so we're not likely to + find anything better. */ + seed = 0; ++ int seed_flag = 0; + for (ip = interfaces; ip; ip = ip->next) { + int junk; ++ if ( ip -> hw_address.hlen <= sizeof seed ) ++ continue; + memcpy(&junk, + &ip->hw_address.hbuf[ip->hw_address.hlen - + sizeof seed], sizeof seed); + seed += junk; ++ seed_flag = 1; + } +- srandom(seed + cur_time + (unsigned)getpid()); ++ if ( seed_flag == 0 ) { ++ if ( backup_seed != 0 ) { ++ seed = backup_seed; ++ log_info ("xid: rand init seed (0x%x) built using all" ++ " available interfaces",seed); ++ } ++ else { ++ seed = cur_time^((unsigned) gethostid()) ; ++ log_info ("xid: warning: no netdev with useable HWADDR found" ++ " for seed's uniqueness enforcement"); ++ log_info ("xid: rand init seed (0x%x) built using gethostid", ++ seed); ++ } ++ /* we only use seed and no current time as a broadcast reply */ ++ /* will certainly be used by the hwaddrless interface */ ++ srandom(seed); ++ } ++ else ++ srandom(seed + cur_time + (unsigned)getpid()); + + /* Setup specific Infiniband options */ + for (ip = interfaces; ip; ip = ip->next) { +@@ -1457,7 +1499,7 @@ void dhcpack (packet) + return; + } + +- log_info ("DHCPACK from %s", piaddr (packet -> client_addr)); ++ log_info ("DHCPACK from %s (xid=0x%x)", piaddr (packet -> client_addr), client -> xid); + + lease = packet_to_lease (packet, client); + if (!lease) { +@@ -2174,7 +2216,7 @@ void dhcpnak (packet) + return; + } + +- log_info ("DHCPNAK from %s", piaddr (packet -> client_addr)); ++ log_info ("DHCPNAK from %s (xid=0x%x)", piaddr (packet -> client_addr), client -> xid); + + if (!client -> active) { + #if defined (DEBUG) +@@ -2300,10 +2342,10 @@ void send_discover (cpp) + client -> packet.secs = htons (65535); + client -> secs = client -> packet.secs; + +- log_info ("DHCPDISCOVER on %s to %s port %d interval %ld", ++ log_info ("DHCPDISCOVER on %s to %s port %d interval %ld (xid=0x%x)", + client -> name ? client -> name : client -> interface -> name, + inet_ntoa (sockaddr_broadcast.sin_addr), +- ntohs (sockaddr_broadcast.sin_port), (long)(client -> interval)); ++ ntohs (sockaddr_broadcast.sin_port), (long)(client -> interval), client -> xid); + + /* Send out a packet. */ + result = send_packet (client -> interface, (struct packet *)0, +@@ -2584,10 +2626,10 @@ void send_request (cpp) + client -> packet.secs = htons (65535); + } + +- log_info ("DHCPREQUEST on %s to %s port %d", ++ log_info ("DHCPREQUEST on %s to %s port %d (xid=0x%x)", + client -> name ? client -> name : client -> interface -> name, + inet_ntoa (destination.sin_addr), +- ntohs (destination.sin_port)); ++ ntohs (destination.sin_port), client -> xid); + + if (destination.sin_addr.s_addr != INADDR_BROADCAST && + fallback_interface) +@@ -2618,10 +2660,10 @@ void send_decline (cpp) + + int result; + +- log_info ("DHCPDECLINE on %s to %s port %d", ++ log_info ("DHCPDECLINE on %s to %s port %d (xid=0x%x)", + client -> name ? client -> name : client -> interface -> name, + inet_ntoa (sockaddr_broadcast.sin_addr), +- ntohs (sockaddr_broadcast.sin_port)); ++ ntohs (sockaddr_broadcast.sin_port), client -> xid); + + /* Send out a packet. */ + result = send_packet (client -> interface, (struct packet *)0, +@@ -2661,10 +2703,10 @@ void send_release (cpp) + return; + } + +- log_info ("DHCPRELEASE on %s to %s port %d", ++ log_info ("DHCPRELEASE on %s to %s port %d (xid=0x%x)", + client -> name ? client -> name : client -> interface -> name, + inet_ntoa (destination.sin_addr), +- ntohs (destination.sin_port)); ++ ntohs (destination.sin_port), client -> xid); + + if (fallback_interface) + result = send_packet (fallback_interface, diff --git a/net-misc/dhcp/files/dhcp-4.2.0-lpf-ib.patch b/net-misc/dhcp/files/dhcp-4.2.2-lpf-ib.patch index 52a7aa8a2..4034028b8 100644 --- a/net-misc/dhcp/files/dhcp-4.2.0-lpf-ib.patch +++ b/net-misc/dhcp/files/dhcp-4.2.2-lpf-ib.patch @@ -1,538 +1,538 @@ -diff -up dhcp-4.2.0/common/lpf.c.ib dhcp-4.2.0/common/lpf.c
---- dhcp-4.2.0/common/lpf.c.ib 2010-09-23 05:24:09.000000000 -0400
-+++ dhcp-4.2.0/common/lpf.c 2010-09-23 06:21:03.000000000 -0400
-@@ -42,6 +42,7 @@
- #include "includes/netinet/udp.h"
- #include "includes/netinet/if_ether.h"
- #include <net/if.h>
-+#include <ifaddrs.h>
-
- #ifndef PACKET_AUXDATA
- #define PACKET_AUXDATA 8
-@@ -59,6 +60,15 @@ struct tpacket_auxdata
- /* Reinitializes the specified interface after an address change. This
- is not required for packet-filter APIs. */
-
-+/* Default broadcast address for IPoIB */
-+static unsigned char default_ib_bcast_addr[20] = {
-+ 0x00, 0xff, 0xff, 0xff,
-+ 0xff, 0x12, 0x40, 0x1b,
-+ 0x00, 0x00, 0x00, 0x00,
-+ 0x00, 0x00, 0x00, 0x00,
-+ 0xff, 0xff, 0xff, 0xff
-+};
-+
- #ifdef USE_LPF_SEND
- void if_reinitialize_send (info)
- struct interface_info *info;
-@@ -86,10 +96,21 @@ int if_register_lpf (info)
- struct sockaddr common;
- } sa;
- struct ifreq ifr;
-+ int type;
-+ int protocol;
-
- /* Make an LPF socket. */
-- if ((sock = socket(PF_PACKET, SOCK_RAW,
-- htons((short)ETH_P_ALL))) < 0) {
-+ get_hw_addr(info);
-+
-+ if (info->hw_address.hbuf[0] == HTYPE_INFINIBAND) {
-+ type = SOCK_DGRAM;
-+ protocol = ETHERTYPE_IP;
-+ } else {
-+ type = SOCK_RAW;
-+ protocol = ETH_P_ALL;
-+ }
-+
-+ if ((sock = socket(PF_PACKET, type, htons((short)protocol))) < 0) {
- if (errno == ENOPROTOOPT || errno == EPROTONOSUPPORT ||
- errno == ESOCKTNOSUPPORT || errno == EPFNOSUPPORT ||
- errno == EAFNOSUPPORT || errno == EINVAL) {
-@@ -111,6 +132,7 @@ int if_register_lpf (info)
- /* Bind to the interface name */
- memset (&sa, 0, sizeof sa);
- sa.ll.sll_family = AF_PACKET;
-+ sa.ll.sll_protocol = htons(protocol);
- sa.ll.sll_ifindex = ifr.ifr_ifindex;
- if (bind (sock, &sa.common, sizeof sa)) {
- if (errno == ENOPROTOOPT || errno == EPROTONOSUPPORT ||
-@@ -126,8 +148,6 @@ int if_register_lpf (info)
- log_fatal ("Bind socket to interface: %m");
- }
-
-- get_hw_addr(info->name, &info->hw_address);
--
- return sock;
- }
- #endif /* USE_LPF_SEND || USE_LPF_RECEIVE */
-@@ -182,6 +202,8 @@ void if_deregister_send (info)
- in bpf includes... */
- extern struct sock_filter dhcp_bpf_filter [];
- extern int dhcp_bpf_filter_len;
-+extern struct sock_filter dhcp_ib_bpf_filter [];
-+extern int dhcp_ib_bpf_filter_len;
-
- #if defined (HAVE_TR_SUPPORT)
- extern struct sock_filter dhcp_bpf_tr_filter [];
-@@ -199,11 +221,13 @@ void if_register_receive (info)
- /* Open a LPF device and hang it on this interface... */
- info -> rfdesc = if_register_lpf (info);
-
-- val = 1;
-- if (setsockopt (info -> rfdesc, SOL_PACKET, PACKET_AUXDATA, &val,
-- sizeof val) < 0) {
-- if (errno != ENOPROTOOPT)
-- log_fatal ("Failed to set auxiliary packet data: %m");
-+ if (info->hw_address.hbuf[0] != HTYPE_INFINIBAND) {
-+ val = 1;
-+ if (setsockopt (info -> rfdesc, SOL_PACKET, PACKET_AUXDATA,
-+ &val, sizeof val) < 0) {
-+ if (errno != ENOPROTOOPT)
-+ log_fatal ("Failed to set auxiliary packet data: %m");
-+ }
- }
-
- #if defined (HAVE_TR_SUPPORT)
-@@ -249,15 +273,28 @@ static void lpf_gen_filter_setup (info)
-
- memset(&p, 0, sizeof(p));
-
-- /* Set up the bpf filter program structure. This is defined in
-- bpf.c */
-- p.len = dhcp_bpf_filter_len;
-- p.filter = dhcp_bpf_filter;
--
-- /* Patch the server port into the LPF program...
-- XXX changes to filter program may require changes
-- to the insn number(s) used below! XXX */
-- dhcp_bpf_filter [8].k = ntohs ((short)local_port);
-+ if (info->hw_address.hbuf[0] == HTYPE_INFINIBAND) {
-+ /* Set up the bpf filter program structure. */
-+ p.len = dhcp_ib_bpf_filter_len;
-+ p.filter = dhcp_ib_bpf_filter;
-+
-+ /* Patch the server port into the LPF program...
-+ XXX
-+ changes to filter program may require changes
-+ to the insn number(s) used below!
-+ XXX */
-+ dhcp_ib_bpf_filter[6].k = ntohs ((short)local_port);
-+ } else {
-+ /* Set up the bpf filter program structure.
-+ This is defined in bpf.c */
-+ p.len = dhcp_bpf_filter_len;
-+ p.filter = dhcp_bpf_filter;
-+
-+ /* Patch the server port into the LPF program...
-+ XXX changes to filter program may require changes
-+ to the insn number(s) used below! XXX */
-+ dhcp_bpf_filter [8].k = ntohs ((short)local_port);
-+ }
-
- if (setsockopt (info -> rfdesc, SOL_SOCKET, SO_ATTACH_FILTER, &p,
- sizeof p) < 0) {
-@@ -314,6 +351,54 @@ static void lpf_tr_filter_setup (info)
- #endif /* USE_LPF_RECEIVE */
-
- #ifdef USE_LPF_SEND
-+ssize_t send_packet_ib(interface, packet, raw, len, from, to, hto)
-+ struct interface_info *interface;
-+ struct packet *packet;
-+ struct dhcp_packet *raw;
-+ size_t len;
-+ struct in_addr from;
-+ struct sockaddr_in *to;
-+ struct hardware *hto;
-+{
-+ unsigned ibufp = 0;
-+ double ih [1536 / sizeof (double)];
-+ unsigned char *buf = (unsigned char *)ih;
-+ ssize_t result;
-+
-+ union sockunion {
-+ struct sockaddr sa;
-+ struct sockaddr_ll sll;
-+ struct sockaddr_storage ss;
-+ } su;
-+
-+ assemble_udp_ip_header (interface, buf, &ibufp, from.s_addr,
-+ to->sin_addr.s_addr, to->sin_port,
-+ (unsigned char *)raw, len);
-+ memcpy (buf + ibufp, raw, len);
-+
-+ memset(&su, 0, sizeof(su));
-+ su.sll.sll_family = AF_PACKET;
-+ su.sll.sll_protocol = htons(ETHERTYPE_IP);
-+
-+ if (!(su.sll.sll_ifindex = if_nametoindex(interface->name))) {
-+ errno = ENOENT;
-+ log_error ("send_packet_ib: %m - failed to get if index");
-+ return -1;
-+ }
-+
-+ su.sll.sll_hatype = htons(HTYPE_INFINIBAND);
-+ su.sll.sll_halen = sizeof(interface->bcast_addr);
-+ memcpy(&su.sll.sll_addr, interface->bcast_addr, 20);
-+
-+ result = sendto(interface->wfdesc, buf, ibufp + len, 0,
-+ &su.sa, sizeof(su));
-+
-+ if (result < 0)
-+ log_error ("send_packet_ib: %m");
-+
-+ return result;
-+}
-+
- ssize_t send_packet (interface, packet, raw, len, from, to, hto)
- struct interface_info *interface;
- struct packet *packet;
-@@ -334,6 +419,11 @@ ssize_t send_packet (interface, packet,
- return send_fallback (interface, packet, raw,
- len, from, to, hto);
-
-+ if (interface->hw_address.hbuf[0] == HTYPE_INFINIBAND) {
-+ return send_packet_ib(interface, packet, raw, len, from,
-+ to, hto);
-+ }
-+
- if (hto == NULL && interface->anycast_mac_addr.hlen)
- hto = &interface->anycast_mac_addr;
-
-@@ -355,6 +445,42 @@ ssize_t send_packet (interface, packet,
- #endif /* USE_LPF_SEND */
-
- #ifdef USE_LPF_RECEIVE
-+ssize_t receive_packet_ib (interface, buf, len, from, hfrom)
-+ struct interface_info *interface;
-+ unsigned char *buf;
-+ size_t len;
-+ struct sockaddr_in *from;
-+ struct hardware *hfrom;
-+{
-+ int length = 0;
-+ int offset = 0;
-+ unsigned char ibuf [1536];
-+ unsigned bufix = 0;
-+ unsigned paylen;
-+
-+ length = read(interface->rfdesc, ibuf, sizeof(ibuf));
-+
-+ if (length <= 0)
-+ return length;
-+
-+ offset = decode_udp_ip_header(interface, ibuf, bufix, from,
-+ (unsigned)length, &paylen, 0);
-+
-+ if (offset < 0)
-+ return 0;
-+
-+ bufix += offset;
-+ length -= offset;
-+
-+ if (length < paylen)
-+ log_fatal("Internal inconsistency at %s:%d.", MDL);
-+
-+ /* Copy out the data in the packet... */
-+ memcpy(buf, &ibuf[bufix], paylen);
-+
-+ return (ssize_t)paylen;
-+}
-+
- ssize_t receive_packet (interface, buf, len, from, hfrom)
- struct interface_info *interface;
- unsigned char *buf;
-@@ -381,6 +507,10 @@ ssize_t receive_packet (interface, buf,
- };
- struct cmsghdr *cmsg;
-
-+ if (interface->hw_address.hbuf[0] == HTYPE_INFINIBAND) {
-+ return receive_packet_ib(interface, buf, len, from, hfrom);
-+ }
-+
- length = recvmsg (interface -> rfdesc, &msg, 0);
- if (length <= 0)
- return length;
-@@ -461,33 +591,41 @@ void maybe_setup_fallback ()
- }
-
- void
--get_hw_addr(const char *name, struct hardware *hw) {
-- int sock;
-- struct ifreq tmp;
-- struct sockaddr *sa;
-+get_hw_addr(struct interface_info *info)
-+{
-+ struct hardware *hw = &info->hw_address;
-+ char *name = info->name;
-+ struct ifaddrs *ifaddrs;
-+ struct ifaddrs *ifa;
-+ struct sockaddr_ll *sll = NULL;
-
-- if (strlen(name) >= sizeof(tmp.ifr_name)) {
-- log_fatal("Device name too long: \"%s\"", name);
-- }
-+ if (getifaddrs(&ifaddrs) == -1)
-+ log_fatal("Failed to get interfaces");
-+
-+ for (ifa = ifaddrs; ifa != NULL; ifa = ifa->ifa_next) {
-+
-+ if (ifa->ifa_addr->sa_family != AF_PACKET)
-+ continue;
-
-- sock = socket(AF_INET, SOCK_DGRAM, 0);
-- if (sock < 0) {
-- log_fatal("Can't create socket for \"%s\": %m", name);
-+ if (ifa->ifa_flags & IFF_LOOPBACK)
-+ continue;
-+
-+ if (strcmp(ifa->ifa_name, name) == 0) {
-+ sll = (struct sockaddr_ll *)(void *)ifa->ifa_addr;
-+ break;
-+ }
- }
-
-- memset(&tmp, 0, sizeof(tmp));
-- strcpy(tmp.ifr_name, name);
-- if (ioctl(sock, SIOCGIFHWADDR, &tmp) < 0) {
-- log_fatal("Error getting hardware address for \"%s\": %m",
-- name);
-+ if (sll == NULL) {
-+ freeifaddrs(ifaddrs);
-+ log_fatal("Failed to get HW address for %s\n", name);
- }
-
-- sa = &tmp.ifr_hwaddr;
-- switch (sa->sa_family) {
-+ switch (sll->sll_hatype) {
- case ARPHRD_ETHER:
- hw->hlen = 7;
- hw->hbuf[0] = HTYPE_ETHER;
-- memcpy(&hw->hbuf[1], sa->sa_data, 6);
-+ memcpy(&hw->hbuf[1], sll->sll_addr, 6);
- break;
- case ARPHRD_IEEE802:
- #ifdef ARPHRD_IEEE802_TR
-@@ -495,18 +633,36 @@ get_hw_addr(const char *name, struct har
- #endif /* ARPHRD_IEEE802_TR */
- hw->hlen = 7;
- hw->hbuf[0] = HTYPE_IEEE802;
-- memcpy(&hw->hbuf[1], sa->sa_data, 6);
-+ memcpy(&hw->hbuf[1], sll->sll_addr, 6);
- break;
- case ARPHRD_FDDI:
- hw->hlen = 17;
- hw->hbuf[0] = HTYPE_FDDI;
-- memcpy(&hw->hbuf[1], sa->sa_data, 16);
-+ memcpy(&hw->hbuf[1], sll->sll_addr, 16);
-+ break;
-+ case ARPHRD_INFINIBAND:
-+ /* For Infiniband, save the broadcast address and store
-+ * the port GUID into the hardware address.
-+ */
-+ if (ifa->ifa_flags & IFF_BROADCAST) {
-+ struct sockaddr_ll *bll;
-+
-+ bll = (struct sockaddr_ll *)ifa->ifa_broadaddr;
-+ memcpy(&info->bcast_addr, bll->sll_addr, 20);
-+ } else {
-+ memcpy(&info->bcast_addr, default_ib_bcast_addr,
-+ 20);
-+ }
-+
-+ hw->hlen = 1;
-+ hw->hbuf[0] = HTYPE_INFINIBAND;
- break;
- default:
-+ freeifaddrs(ifaddrs);
- log_fatal("Unsupported device type %ld for \"%s\"",
-- (long int)sa->sa_family, name);
-+ (long int)sll->sll_family, name);
- }
-
-- close(sock);
-+ freeifaddrs(ifaddrs);
- }
- #endif
-diff -up dhcp-4.2.0/includes/dhcp.h.ib dhcp-4.2.0/includes/dhcp.h
---- dhcp-4.2.0/includes/dhcp.h.ib 2009-11-19 20:49:01.000000000 -0500
-+++ dhcp-4.2.0/includes/dhcp.h 2010-09-23 06:21:03.000000000 -0400
-@@ -79,6 +79,7 @@ struct dhcp_packet {
- #define HTYPE_ETHER 1 /* Ethernet 10Mbps */
- #define HTYPE_IEEE802 6 /* IEEE 802.2 Token Ring... */
- #define HTYPE_FDDI 8 /* FDDI... */
-+#define HTYPE_INFINIBAND 32 /* Infiniband IPoIB */
-
- /* Magic cookie validating dhcp options field (and bootp vendor
- extensions field). */
-diff -up dhcp-4.2.0/client/dhclient.c.ib dhcp-4.2.0/client/dhclient.c
---- dhcp-4.2.0/client/dhclient.c.ib 2010-09-23 06:11:14.000000000 -0400
-+++ dhcp-4.2.0/client/dhclient.c 2010-09-23 06:21:03.000000000 -0400
-@@ -98,6 +98,29 @@ static void usage(void);
-
- static isc_result_t write_duid(struct data_string *duid);
-
-+static void setup_ib_interface(struct interface_info *ip)
-+{
-+ struct group *g;
-+
-+ /* Set the broadcast flag */
-+ ip->client->config->bootp_broadcast_always = 1;
-+
-+ /*
-+ * Find out if a dhcp-client-identifier option was specified either
-+ * in the config file or on the command line
-+ */
-+ for (g = ip->client->config->on_transmission; g != NULL; g = g->next) {
-+ if ((g->statements != NULL) &&
-+ (strcmp(g->statements->data.option->option->name,
-+ "dhcp-client-identifier") == 0)) {
-+ return;
-+ }
-+ }
-+
-+ /* No client ID specified */
-+ log_fatal("dhcp-client-identifier must be specified for InfiniBand");
-+}
-+
- int
- main(int argc, char **argv) {
- int fd;
-@@ -805,6 +828,14 @@ main(int argc, char **argv) {
- }
- srandom(seed + cur_time);
-
-+ /* Setup specific Infiniband options */
-+ for (ip = interfaces; ip; ip = ip->next) {
-+ if (ip->client &&
-+ (ip->hw_address.hbuf[0] == HTYPE_INFINIBAND)) {
-+ setup_ib_interface(ip);
-+ }
-+ }
-+
- /* Start a configuration state machine for each interface. */
- #ifdef DHCPv6
- if (local_family == AF_INET6) {
-diff -up dhcp-4.2.0/common/bpf.c.ib dhcp-4.2.0/common/bpf.c
---- dhcp-4.2.0/common/bpf.c.ib 2010-09-23 05:24:01.000000000 -0400
-+++ dhcp-4.2.0/common/bpf.c 2010-09-23 06:37:48.000000000 -0400
-@@ -116,7 +116,7 @@ int if_register_bpf (info)
- log_fatal ("Can't attach interface %s to bpf device %s: %m",
- info -> name, filename);
-
-- get_hw_addr(info->name, &info->hw_address);
-+ get_hw_addr(info);
-
- return sock;
- }
-@@ -198,11 +198,44 @@ struct bpf_insn dhcp_bpf_filter [] = {
- BPF_STMT(BPF_RET+BPF_K, 0),
- };
-
-+/* Packet filter program for DHCP over Infiniband.
-+ *
-+ * XXX
-+ * Changes to the filter program may require changes to the constant offsets
-+ * used in lpf_gen_filter_setup to patch the port in the BPF program!
-+ * XXX
-+ */
-+struct bpf_insn dhcp_ib_bpf_filter [] = {
-+ /* Packet filter for Infiniband */
-+ /* Make sure it's a UDP packet... */
-+ BPF_STMT(BPF_LD + BPF_B + BPF_ABS, 9),
-+ BPF_JUMP(BPF_JMP + BPF_JEQ + BPF_K, IPPROTO_UDP, 0, 6),
-+
-+ /* Make sure this isn't a fragment... */
-+ BPF_STMT(BPF_LD + BPF_H + BPF_ABS, 6),
-+ BPF_JUMP(BPF_JMP + BPF_JSET + BPF_K, 0x1fff, 4, 0),
-+
-+ /* Get the IP header length... */
-+ BPF_STMT(BPF_LDX + BPF_B + BPF_MSH, 0),
-+
-+ /* Make sure it's to the right port... */
-+ BPF_STMT(BPF_LD + BPF_H + BPF_IND, 2),
-+ BPF_JUMP(BPF_JMP + BPF_JEQ + BPF_K, 67, 0, 1),
-+
-+ /* If we passed all the tests, ask for the whole packet. */
-+ BPF_STMT(BPF_RET + BPF_K, (u_int)-1),
-+
-+ /* Otherwise, drop it. */
-+ BPF_STMT(BPF_RET + BPF_K, 0),
-+};
-+
- #if defined (DEC_FDDI)
- struct bpf_insn *bpf_fddi_filter;
- #endif
-
- int dhcp_bpf_filter_len = sizeof dhcp_bpf_filter / sizeof (struct bpf_insn);
-+int dhcp_ib_bpf_filter_len = sizeof dhcp_ib_bpf_filter / sizeof (struct bpf_insn);
-+
- #if defined (HAVE_TR_SUPPORT)
- struct bpf_insn dhcp_bpf_tr_filter [] = {
- /* accept all token ring packets due to variable length header */
-@@ -552,7 +585,9 @@ void maybe_setup_fallback ()
- }
-
- void
--get_hw_addr(const char *name, struct hardware *hw) {
-+get_hw_addr(struct interface_info *info) {
-+ struct hardware *hw = &info->hw_address;
-+ char *name = info->name;
- struct ifaddrs *ifa;
- struct ifaddrs *p;
- struct sockaddr_dl *sa;
-diff -up dhcp-4.2.0/common/socket.c.ib dhcp-4.2.0/common/socket.c
---- dhcp-4.2.0/common/socket.c.ib 2009-11-19 20:49:01.000000000 -0500
-+++ dhcp-4.2.0/common/socket.c 2010-09-23 06:21:03.000000000 -0400
-@@ -283,7 +283,7 @@ if_register_socket(struct interface_info
-
- /* If this is a normal IPv4 address, get the hardware address. */
- if ((local_family == AF_INET) && (strcmp(info->name, "fallback") != 0))
-- get_hw_addr(info->name, &info->hw_address);
-+ get_hw_addr(info);
-
- return sock;
- }
-@@ -429,7 +429,7 @@ if_register6(struct interface_info *info
- if (req_multi)
- if_register_multicast(info);
-
-- get_hw_addr(info->name, &info->hw_address);
-+ get_hw_addr(info);
-
- if (!quiet_interface_discovery) {
- if (info->shared_network != NULL) {
-diff -up dhcp-4.2.0/includes/dhcpd.h.ib dhcp-4.2.0/includes/dhcpd.h
---- dhcp-4.2.0/includes/dhcpd.h.ib 2010-09-23 06:07:17.000000000 -0400
-+++ dhcp-4.2.0/includes/dhcpd.h 2010-09-23 06:21:03.000000000 -0400
-@@ -1214,6 +1214,7 @@ struct interface_info {
- struct shared_network *shared_network;
- /* Networks connected to this interface. */
- struct hardware hw_address; /* Its physical address. */
-+ u_int8_t bcast_addr[20]; /* Infiniband broadcast address */
- struct in_addr *addresses; /* Addresses associated with this
- * interface.
- */
-@@ -2324,7 +2325,7 @@ void print_dns_status (int, struct dhcp_
- #endif
- const char *print_time(TIME);
-
--void get_hw_addr(const char *name, struct hardware *hw);
-+void get_hw_addr(struct interface_info *info);
-
- /* socket.c */
- #if defined (USE_SOCKET_SEND) || defined (USE_SOCKET_RECEIVE) \
-diff -up dhcp-4.2.0/common/dlpi.c.ib dhcp-4.2.0/common/dlpi.c
---- dhcp-4.2.0/common/dlpi.c.ib 2010-09-23 05:24:05.000000000 -0400
-+++ dhcp-4.2.0/common/dlpi.c 2010-09-23 06:39:26.000000000 -0400
-@@ -1342,7 +1342,9 @@ void maybe_setup_fallback ()
- #endif /* USE_DLPI_SEND */
-
- void
--get_hw_addr(const char *name, struct hardware *hw) {
-+get_hw_addr(struct interface_info *info) {
-+ struct hardware *hw = &info->hw_address;
-+ char *name = info->name;
- int sock, unit;
- long buf[DLPI_MAXDLBUF];
- union DL_primitives *dlp;
+diff -up dhcp-4.2.2/client/dhclient.c.lpf-ib dhcp-4.2.2/client/dhclient.c +--- dhcp-4.2.2/client/dhclient.c.lpf-ib 2011-09-19 11:24:08.693775799 +0200 ++++ dhcp-4.2.2/client/dhclient.c 2011-09-19 11:24:08.703775541 +0200 +@@ -113,6 +113,8 @@ static int check_domain_name_list(const + static int check_option_values(struct universe *universe, unsigned int opt, + const char *ptr, size_t len); + ++static void setup_ib_interface(struct interface_info *ip); ++ + int + main(int argc, char **argv) { + int fd; +@@ -919,6 +921,14 @@ main(int argc, char **argv) { + } + srandom(seed + cur_time + (unsigned)getpid()); + ++ /* Setup specific Infiniband options */ ++ for (ip = interfaces; ip; ip = ip->next) { ++ if (ip->client && ++ (ip->hw_address.hbuf[0] == HTYPE_INFINIBAND)) { ++ setup_ib_interface(ip); ++ } ++ } ++ + /* Start a configuration state machine for each interface. */ + #ifdef DHCPv6 + if (local_family == AF_INET6) { +@@ -1195,6 +1205,29 @@ int find_subnet (struct subnet **sp, + return 0; + } + ++static void setup_ib_interface(struct interface_info *ip) ++{ ++ struct group *g; ++ ++ /* Set the broadcast flag */ ++ ip->client->config->bootp_broadcast_always = 1; ++ ++ /* ++ * Find out if a dhcp-client-identifier option was specified either ++ * in the config file or on the command line ++ */ ++ for (g = ip->client->config->on_transmission; g != NULL; g = g->next) { ++ if ((g->statements != NULL) && ++ (strcmp(g->statements->data.option->option->name, ++ "dhcp-client-identifier") == 0)) { ++ return; ++ } ++ } ++ ++ /* No client ID specified */ ++ log_fatal("dhcp-client-identifier must be specified for InfiniBand"); ++} ++ + /* Individual States: + * + * Each routine is called from the dhclient_state_machine() in one of +diff -up dhcp-4.2.2/common/bpf.c.lpf-ib dhcp-4.2.2/common/bpf.c +--- dhcp-4.2.2/common/bpf.c.lpf-ib 2011-09-19 11:24:08.694775773 +0200 ++++ dhcp-4.2.2/common/bpf.c 2011-09-19 11:24:08.704775516 +0200 +@@ -198,11 +198,44 @@ struct bpf_insn dhcp_bpf_filter [] = { + BPF_STMT(BPF_RET+BPF_K, 0), + }; + ++/* Packet filter program for DHCP over Infiniband. ++ * ++ * XXX ++ * Changes to the filter program may require changes to the constant offsets ++ * used in lpf_gen_filter_setup to patch the port in the BPF program! ++ * XXX ++ */ ++struct bpf_insn dhcp_ib_bpf_filter [] = { ++ /* Packet filter for Infiniband */ ++ /* Make sure it's a UDP packet... */ ++ BPF_STMT(BPF_LD + BPF_B + BPF_ABS, 9), ++ BPF_JUMP(BPF_JMP + BPF_JEQ + BPF_K, IPPROTO_UDP, 0, 6), ++ ++ /* Make sure this isn't a fragment... */ ++ BPF_STMT(BPF_LD + BPF_H + BPF_ABS, 6), ++ BPF_JUMP(BPF_JMP + BPF_JSET + BPF_K, 0x1fff, 4, 0), ++ ++ /* Get the IP header length... */ ++ BPF_STMT(BPF_LDX + BPF_B + BPF_MSH, 0), ++ ++ /* Make sure it's to the right port... */ ++ BPF_STMT(BPF_LD + BPF_H + BPF_IND, 2), ++ BPF_JUMP(BPF_JMP + BPF_JEQ + BPF_K, 67, 0, 1), ++ ++ /* If we passed all the tests, ask for the whole packet. */ ++ BPF_STMT(BPF_RET + BPF_K, (u_int)-1), ++ ++ /* Otherwise, drop it. */ ++ BPF_STMT(BPF_RET + BPF_K, 0), ++}; ++ + #if defined (DEC_FDDI) + struct bpf_insn *bpf_fddi_filter; + #endif + + int dhcp_bpf_filter_len = sizeof dhcp_bpf_filter / sizeof (struct bpf_insn); ++int dhcp_ib_bpf_filter_len = sizeof dhcp_ib_bpf_filter / sizeof (struct bpf_insn); ++ + #if defined (HAVE_TR_SUPPORT) + struct bpf_insn dhcp_bpf_tr_filter [] = { + /* accept all token ring packets due to variable length header */ +diff -up dhcp-4.2.2/common/lpf.c.lpf-ib dhcp-4.2.2/common/lpf.c +--- dhcp-4.2.2/common/lpf.c.lpf-ib 2011-09-19 11:24:08.694775773 +0200 ++++ dhcp-4.2.2/common/lpf.c 2011-09-19 11:26:15.107109935 +0200 +@@ -42,6 +42,7 @@ + #include "includes/netinet/udp.h" + #include "includes/netinet/if_ether.h" + #include <net/if.h> ++#include <ifaddrs.h> + + #ifndef PACKET_AUXDATA + #define PACKET_AUXDATA 8 +@@ -59,6 +60,15 @@ struct tpacket_auxdata + /* Reinitializes the specified interface after an address change. This + is not required for packet-filter APIs. */ + ++/* Default broadcast address for IPoIB */ ++static unsigned char default_ib_bcast_addr[20] = { ++ 0x00, 0xff, 0xff, 0xff, ++ 0xff, 0x12, 0x40, 0x1b, ++ 0x00, 0x00, 0x00, 0x00, ++ 0x00, 0x00, 0x00, 0x00, ++ 0xff, 0xff, 0xff, 0xff ++}; ++ + #ifdef USE_LPF_SEND + void if_reinitialize_send (info) + struct interface_info *info; +@@ -86,10 +96,21 @@ int if_register_lpf (info) + struct sockaddr common; + } sa; + struct ifreq ifr; ++ int type; ++ int protocol; + + /* Make an LPF socket. */ +- if ((sock = socket(PF_PACKET, SOCK_RAW, +- htons((short)ETH_P_ALL))) < 0) { ++ get_hw_addr(info); ++ ++ if (info->hw_address.hbuf[0] == HTYPE_INFINIBAND) { ++ type = SOCK_DGRAM; ++ protocol = ETHERTYPE_IP; ++ } else { ++ type = SOCK_RAW; ++ protocol = ETH_P_ALL; ++ } ++ ++ if ((sock = socket(PF_PACKET, type, htons((short)protocol))) < 0) { + if (errno == ENOPROTOOPT || errno == EPROTONOSUPPORT || + errno == ESOCKTNOSUPPORT || errno == EPFNOSUPPORT || + errno == EAFNOSUPPORT || errno == EINVAL) { +@@ -112,6 +133,7 @@ int if_register_lpf (info) + /* Bind to the interface name */ + memset (&sa, 0, sizeof sa); + sa.ll.sll_family = AF_PACKET; ++ sa.ll.sll_protocol = htons(protocol); + sa.ll.sll_ifindex = ifr.ifr_ifindex; + if (bind (sock, &sa.common, sizeof sa)) { + if (errno == ENOPROTOOPT || errno == EPROTONOSUPPORT || +@@ -127,8 +149,6 @@ int if_register_lpf (info) + log_fatal ("Bind socket to interface: %m"); + } + +- get_hw_addr(info->name, &info->hw_address); +- + return sock; + } + #endif /* USE_LPF_SEND || USE_LPF_RECEIVE */ +@@ -183,6 +203,8 @@ void if_deregister_send (info) + in bpf includes... */ + extern struct sock_filter dhcp_bpf_filter []; + extern int dhcp_bpf_filter_len; ++extern struct sock_filter dhcp_ib_bpf_filter []; ++extern int dhcp_ib_bpf_filter_len; + + #if defined (HAVE_TR_SUPPORT) + extern struct sock_filter dhcp_bpf_tr_filter []; +@@ -200,11 +222,13 @@ void if_register_receive (info) + /* Open a LPF device and hang it on this interface... */ + info -> rfdesc = if_register_lpf (info); + +- val = 1; +- if (setsockopt (info -> rfdesc, SOL_PACKET, PACKET_AUXDATA, &val, +- sizeof val) < 0) { +- if (errno != ENOPROTOOPT) +- log_fatal ("Failed to set auxiliary packet data: %m"); ++ if (info->hw_address.hbuf[0] != HTYPE_INFINIBAND) { ++ val = 1; ++ if (setsockopt (info -> rfdesc, SOL_PACKET, PACKET_AUXDATA, ++ &val, sizeof val) < 0) { ++ if (errno != ENOPROTOOPT) ++ log_fatal ("Failed to set auxiliary packet data: %m"); ++ } + } + + #if defined (HAVE_TR_SUPPORT) +@@ -250,15 +274,28 @@ static void lpf_gen_filter_setup (info) + + memset(&p, 0, sizeof(p)); + +- /* Set up the bpf filter program structure. This is defined in +- bpf.c */ +- p.len = dhcp_bpf_filter_len; +- p.filter = dhcp_bpf_filter; +- +- /* Patch the server port into the LPF program... +- XXX changes to filter program may require changes +- to the insn number(s) used below! XXX */ +- dhcp_bpf_filter [8].k = ntohs ((short)local_port); ++ if (info->hw_address.hbuf[0] == HTYPE_INFINIBAND) { ++ /* Set up the bpf filter program structure. */ ++ p.len = dhcp_ib_bpf_filter_len; ++ p.filter = dhcp_ib_bpf_filter; ++ ++ /* Patch the server port into the LPF program... ++ XXX ++ changes to filter program may require changes ++ to the insn number(s) used below! ++ XXX */ ++ dhcp_ib_bpf_filter[6].k = ntohs ((short)local_port); ++ } else { ++ /* Set up the bpf filter program structure. ++ This is defined in bpf.c */ ++ p.len = dhcp_bpf_filter_len; ++ p.filter = dhcp_bpf_filter; ++ ++ /* Patch the server port into the LPF program... ++ XXX changes to filter program may require changes ++ to the insn number(s) used below! XXX */ ++ dhcp_bpf_filter [8].k = ntohs ((short)local_port); ++ } + + if (setsockopt (info -> rfdesc, SOL_SOCKET, SO_ATTACH_FILTER, &p, + sizeof p) < 0) { +@@ -315,6 +352,54 @@ static void lpf_tr_filter_setup (info) + #endif /* USE_LPF_RECEIVE */ + + #ifdef USE_LPF_SEND ++ssize_t send_packet_ib(interface, packet, raw, len, from, to, hto) ++ struct interface_info *interface; ++ struct packet *packet; ++ struct dhcp_packet *raw; ++ size_t len; ++ struct in_addr from; ++ struct sockaddr_in *to; ++ struct hardware *hto; ++{ ++ unsigned ibufp = 0; ++ double ih [1536 / sizeof (double)]; ++ unsigned char *buf = (unsigned char *)ih; ++ ssize_t result; ++ ++ union sockunion { ++ struct sockaddr sa; ++ struct sockaddr_ll sll; ++ struct sockaddr_storage ss; ++ } su; ++ ++ assemble_udp_ip_header (interface, buf, &ibufp, from.s_addr, ++ to->sin_addr.s_addr, to->sin_port, ++ (unsigned char *)raw, len); ++ memcpy (buf + ibufp, raw, len); ++ ++ memset(&su, 0, sizeof(su)); ++ su.sll.sll_family = AF_PACKET; ++ su.sll.sll_protocol = htons(ETHERTYPE_IP); ++ ++ if (!(su.sll.sll_ifindex = if_nametoindex(interface->name))) { ++ errno = ENOENT; ++ log_error ("send_packet_ib: %m - failed to get if index"); ++ return -1; ++ } ++ ++ su.sll.sll_hatype = htons(HTYPE_INFINIBAND); ++ su.sll.sll_halen = sizeof(interface->bcast_addr); ++ memcpy(&su.sll.sll_addr, interface->bcast_addr, 20); ++ ++ result = sendto(interface->wfdesc, buf, ibufp + len, 0, ++ &su.sa, sizeof(su)); ++ ++ if (result < 0) ++ log_error ("send_packet_ib: %m"); ++ ++ return result; ++} ++ + ssize_t send_packet (interface, packet, raw, len, from, to, hto) + struct interface_info *interface; + struct packet *packet; +@@ -335,6 +420,11 @@ ssize_t send_packet (interface, packet, + return send_fallback (interface, packet, raw, + len, from, to, hto); + ++ if (interface->hw_address.hbuf[0] == HTYPE_INFINIBAND) { ++ return send_packet_ib(interface, packet, raw, len, from, ++ to, hto); ++ } ++ + if (hto == NULL && interface->anycast_mac_addr.hlen) + hto = &interface->anycast_mac_addr; + +@@ -356,6 +446,42 @@ ssize_t send_packet (interface, packet, + #endif /* USE_LPF_SEND */ + + #ifdef USE_LPF_RECEIVE ++ssize_t receive_packet_ib (interface, buf, len, from, hfrom) ++ struct interface_info *interface; ++ unsigned char *buf; ++ size_t len; ++ struct sockaddr_in *from; ++ struct hardware *hfrom; ++{ ++ int length = 0; ++ int offset = 0; ++ unsigned char ibuf [1536]; ++ unsigned bufix = 0; ++ unsigned paylen; ++ ++ length = read(interface->rfdesc, ibuf, sizeof(ibuf)); ++ ++ if (length <= 0) ++ return length; ++ ++ offset = decode_udp_ip_header(interface, ibuf, bufix, from, ++ (unsigned)length, &paylen, 0); ++ ++ if (offset < 0) ++ return 0; ++ ++ bufix += offset; ++ length -= offset; ++ ++ if (length < paylen) ++ log_fatal("Internal inconsistency at %s:%d.", MDL); ++ ++ /* Copy out the data in the packet... */ ++ memcpy(buf, &ibuf[bufix], paylen); ++ ++ return (ssize_t)paylen; ++} ++ + ssize_t receive_packet (interface, buf, len, from, hfrom) + struct interface_info *interface; + unsigned char *buf; +@@ -382,6 +508,10 @@ ssize_t receive_packet (interface, buf, + }; + struct cmsghdr *cmsg; + ++ if (interface->hw_address.hbuf[0] == HTYPE_INFINIBAND) { ++ return receive_packet_ib(interface, buf, len, from, hfrom); ++ } ++ + length = recvmsg (interface -> rfdesc, &msg, 0); + if (length <= 0) + return length; +@@ -462,33 +592,44 @@ void maybe_setup_fallback () + } + + void +-get_hw_addr(const char *name, struct hardware *hw) { +- int sock; +- struct ifreq tmp; +- struct sockaddr *sa; ++get_hw_addr(struct interface_info *info) ++{ ++ struct hardware *hw = &info->hw_address; ++ char *name = info->name; ++ struct ifaddrs *ifaddrs; ++ struct ifaddrs *ifa; ++ struct sockaddr_ll *sll = NULL; + +- if (strlen(name) >= sizeof(tmp.ifr_name)) { +- log_fatal("Device name too long: \"%s\"", name); +- } ++ if (getifaddrs(&ifaddrs) == -1) ++ log_fatal("Failed to get interfaces"); + +- sock = socket(AF_INET, SOCK_DGRAM, 0); +- if (sock < 0) { +- log_fatal("Can't create socket for \"%s\": %m", name); ++ for (ifa = ifaddrs; ifa != NULL; ifa = ifa->ifa_next) { ++ ++ if (ifa->ifa_addr == NULL) ++ continue; ++ ++ if (ifa->ifa_addr->sa_family != AF_PACKET) ++ continue; ++ ++ if (ifa->ifa_flags & IFF_LOOPBACK) ++ continue; ++ ++ if (strcmp(ifa->ifa_name, name) == 0) { ++ sll = (struct sockaddr_ll *)(void *)ifa->ifa_addr; ++ break; ++ } + } + +- memset(&tmp, 0, sizeof(tmp)); +- strcpy(tmp.ifr_name, name); +- if (ioctl(sock, SIOCGIFHWADDR, &tmp) < 0) { +- log_fatal("Error getting hardware address for \"%s\": %m", +- name); ++ if (sll == NULL) { ++ freeifaddrs(ifaddrs); ++ log_fatal("Failed to get HW address for %s\n", name); + } + +- sa = &tmp.ifr_hwaddr; +- switch (sa->sa_family) { ++ switch (sll->sll_hatype) { + case ARPHRD_ETHER: + hw->hlen = 7; + hw->hbuf[0] = HTYPE_ETHER; +- memcpy(&hw->hbuf[1], sa->sa_data, 6); ++ memcpy(&hw->hbuf[1], sll->sll_addr, 6); + break; + case ARPHRD_IEEE802: + #ifdef ARPHRD_IEEE802_TR +@@ -496,18 +637,35 @@ get_hw_addr(const char *name, struct har + #endif /* ARPHRD_IEEE802_TR */ + hw->hlen = 7; + hw->hbuf[0] = HTYPE_IEEE802; +- memcpy(&hw->hbuf[1], sa->sa_data, 6); ++ memcpy(&hw->hbuf[1], sll->sll_addr, 6); + break; + case ARPHRD_FDDI: + hw->hlen = 17; + hw->hbuf[0] = HTYPE_FDDI; +- memcpy(&hw->hbuf[1], sa->sa_data, 16); ++ memcpy(&hw->hbuf[1], sll->sll_addr, 16); ++ break; ++ case ARPHRD_INFINIBAND: ++ /* For Infiniband, save the broadcast address and store ++ * the port GUID into the hardware address. ++ */ ++ if (ifa->ifa_flags & IFF_BROADCAST) { ++ struct sockaddr_ll *bll; ++ ++ bll = (struct sockaddr_ll *)ifa->ifa_broadaddr; ++ memcpy(&info->bcast_addr, bll->sll_addr, 20); ++ } else { ++ memcpy(&info->bcast_addr, default_ib_bcast_addr, ++ 20); ++ } ++ ++ hw->hlen = 1; ++ hw->hbuf[0] = HTYPE_INFINIBAND; + break; + #if defined(ARPHRD_PPP) + case ARPHRD_PPP: + if (local_family != AF_INET6) +- log_fatal("Unsupported device type %d for \"%s\"", +- sa->sa_family, name); ++ log_fatal("Unsupported device type %ld for \"%s\"", ++ (long int)sll->sll_family, name); + hw->hlen = 0; + hw->hbuf[0] = HTYPE_RESERVED; + /* 0xdeadbeef should never occur on the wire, +@@ -520,10 +678,11 @@ get_hw_addr(const char *name, struct har + break; + #endif + default: ++ freeifaddrs(ifaddrs); + log_fatal("Unsupported device type %ld for \"%s\"", +- (long int)sa->sa_family, name); ++ (long int)sll->sll_family, name); + } + +- close(sock); ++ freeifaddrs(ifaddrs); + } + #endif +diff -up dhcp-4.2.2/common/socket.c.lpf-ib dhcp-4.2.2/common/socket.c +--- dhcp-4.2.2/common/socket.c.lpf-ib 2011-06-27 18:18:20.000000000 +0200 ++++ dhcp-4.2.2/common/socket.c 2011-09-19 11:24:08.705775490 +0200 +@@ -324,7 +324,7 @@ void if_register_send (info) + info->wfdesc = if_register_socket(info, AF_INET, 0); + /* If this is a normal IPv4 address, get the hardware address. */ + if (strcmp(info->name, "fallback") != 0) +- get_hw_addr(info->name, &info->hw_address); ++ get_hw_addr(info); + #if defined (USE_SOCKET_FALLBACK) + /* Fallback only registers for send, but may need to receive as + well. */ +@@ -387,7 +387,7 @@ void if_register_receive (info) + #endif /* IP_PKTINFO... */ + /* If this is a normal IPv4 address, get the hardware address. */ + if (strcmp(info->name, "fallback") != 0) +- get_hw_addr(info->name, &info->hw_address); ++ get_hw_addr(info); + + if (!quiet_interface_discovery) + log_info ("Listening on Socket/%s%s%s", +@@ -497,7 +497,7 @@ if_register6(struct interface_info *info + if (req_multi) + if_register_multicast(info); + +- get_hw_addr(info->name, &info->hw_address); ++ get_hw_addr(info); + + if (!quiet_interface_discovery) { + if (info->shared_network != NULL) { +diff -up dhcp-4.2.2/includes/dhcpd.h.lpf-ib dhcp-4.2.2/includes/dhcpd.h +--- dhcp-4.2.2/includes/dhcpd.h.lpf-ib 2011-09-19 11:24:08.696775721 +0200 ++++ dhcp-4.2.2/includes/dhcpd.h 2011-09-19 11:24:08.707775438 +0200 +@@ -1243,6 +1243,7 @@ struct interface_info { + struct shared_network *shared_network; + /* Networks connected to this interface. */ + struct hardware hw_address; /* Its physical address. */ ++ u_int8_t bcast_addr[20]; /* Infiniband broadcast address */ + struct in_addr *addresses; /* Addresses associated with this + * interface. + */ +@@ -2356,7 +2357,7 @@ void print_dns_status (int, struct dhcp_ + #endif + const char *print_time(TIME); + +-void get_hw_addr(const char *name, struct hardware *hw); ++void get_hw_addr(struct interface_info *info); + + /* socket.c */ + #if defined (USE_SOCKET_SEND) || defined (USE_SOCKET_RECEIVE) \ +diff -up dhcp-4.2.2/includes/dhcp.h.lpf-ib dhcp-4.2.2/includes/dhcp.h +--- dhcp-4.2.2/includes/dhcp.h.lpf-ib 2011-09-19 11:24:08.696775721 +0200 ++++ dhcp-4.2.2/includes/dhcp.h 2011-09-19 11:24:08.707775438 +0200 +@@ -79,6 +79,7 @@ struct dhcp_packet { + #define HTYPE_ETHER 1 /* Ethernet 10Mbps */ + #define HTYPE_IEEE802 6 /* IEEE 802.2 Token Ring... */ + #define HTYPE_FDDI 8 /* FDDI... */ ++#define HTYPE_INFINIBAND 32 /* Infiniband IPoIB */ + + #define HTYPE_RESERVED 0 /* RFC 5494 */ + diff --git a/net-misc/dhcp/files/dhcp-4.2.1-nogateway.patch b/net-misc/dhcp/files/dhcp-4.2.2-nogateway.patch index 11aaacefd..27fb2b0e6 100644 --- a/net-misc/dhcp/files/dhcp-4.2.1-nogateway.patch +++ b/net-misc/dhcp/files/dhcp-4.2.2-nogateway.patch @@ -1,7 +1,7 @@ http://bugs.gentoo.org/265531 ---- dhcp-4.2.1/client/scripts/linux -+++ dhcp-4.2.1/client/scripts/linux +--- dhcp-4.2.2/client/scripts/linux ++++ dhcp-4.2.2/client/scripts/linux @@ -193,12 +193,14 @@ ifconfig $interface inet $new_ip_address $new_subnet_arg \ $new_broadcast_arg $mtu_arg @@ -20,9 +20,9 @@ http://bugs.gentoo.org/265531 + route add default gw $router $metric_arg dev $interface + done + fi - fi - if [ x$new_ip_address != x$alias_ip_address ] && [ x$alias_ip_address != x ]; - then + else + # we haven't changed the address, have we changed other options + # that we wish to update? @@ -244,12 +246,14 @@ ifconfig $interface:0 inet $alias_ip_address $alias_subnet_arg route add -host $alias_ip_address dev $interface:0 diff --git a/net-misc/dhcp/files/dhcp-4.2.0-xen-checksum.patch b/net-misc/dhcp/files/dhcp-4.2.2-xen-checksum.patch index fe33bdf50..038d346d7 100644 --- a/net-misc/dhcp/files/dhcp-4.2.0-xen-checksum.patch +++ b/net-misc/dhcp/files/dhcp-4.2.2-xen-checksum.patch @@ -1,245 +1,249 @@ -diff -up dhcp-4.2.0/common/bpf.c.xen dhcp-4.2.0/common/bpf.c
---- dhcp-4.2.0/common/bpf.c.xen 2009-11-19 20:48:59.000000000 -0500
-+++ dhcp-4.2.0/common/bpf.c 2010-09-23 05:24:01.000000000 -0400
-@@ -485,7 +485,7 @@ ssize_t receive_packet (interface, buf,
- offset = decode_udp_ip_header (interface,
- interface -> rbuf,
- interface -> rbuf_offset,
-- from, hdr.bh_caplen, &paylen);
-+ from, hdr.bh_caplen, &paylen, 0);
-
- /* If the IP or UDP checksum was bad, skip the packet... */
- if (offset < 0) {
-diff -up dhcp-4.2.0/common/dlpi.c.xen dhcp-4.2.0/common/dlpi.c
---- dhcp-4.2.0/common/dlpi.c.xen 2009-11-19 20:49:00.000000000 -0500
-+++ dhcp-4.2.0/common/dlpi.c 2010-09-23 05:24:05.000000000 -0400
-@@ -694,7 +694,7 @@ ssize_t receive_packet (interface, buf,
- length -= offset;
- #endif
- offset = decode_udp_ip_header (interface, dbuf, bufix,
-- from, length, &paylen);
-+ from, length, &paylen, 0);
-
- /*
- * If the IP or UDP checksum was bad, skip the packet...
-diff -up dhcp-4.2.0/common/lpf.c.xen dhcp-4.2.0/common/lpf.c
---- dhcp-4.2.0/common/lpf.c.xen 2009-07-23 14:52:19.000000000 -0400
-+++ dhcp-4.2.0/common/lpf.c 2010-09-23 05:24:09.000000000 -0400
-@@ -29,18 +29,33 @@
- #include "dhcpd.h"
- #if defined (USE_LPF_SEND) || defined (USE_LPF_RECEIVE)
- #include <sys/ioctl.h>
-+#include <sys/socket.h>
- #include <sys/uio.h>
- #include <errno.h>
-
- #include <asm/types.h>
- #include <linux/filter.h>
- #include <linux/if_ether.h>
-+#include <linux/if_packet.h>
- #include <netinet/in_systm.h>
- #include "includes/netinet/ip.h"
- #include "includes/netinet/udp.h"
- #include "includes/netinet/if_ether.h"
- #include <net/if.h>
-
-+#ifndef PACKET_AUXDATA
-+#define PACKET_AUXDATA 8
-+
-+struct tpacket_auxdata
-+{
-+ __u32 tp_status;
-+ __u32 tp_len;
-+ __u32 tp_snaplen;
-+ __u16 tp_mac;
-+ __u16 tp_net;
-+};
-+#endif
-+
- /* Reinitializes the specified interface after an address change. This
- is not required for packet-filter APIs. */
-
-@@ -66,10 +81,14 @@ int if_register_lpf (info)
- struct interface_info *info;
- {
- int sock;
-- struct sockaddr sa;
-+ union {
-+ struct sockaddr_ll ll;
-+ struct sockaddr common;
-+ } sa;
-+ struct ifreq ifr;
-
- /* Make an LPF socket. */
-- if ((sock = socket(PF_PACKET, SOCK_PACKET,
-+ if ((sock = socket(PF_PACKET, SOCK_RAW,
- htons((short)ETH_P_ALL))) < 0) {
- if (errno == ENOPROTOOPT || errno == EPROTONOSUPPORT ||
- errno == ESOCKTNOSUPPORT || errno == EPFNOSUPPORT ||
-@@ -84,11 +103,16 @@ int if_register_lpf (info)
- log_fatal ("Open a socket for LPF: %m");
- }
-
-+ memset (&ifr, 0, sizeof ifr);
-+ strncpy (ifr.ifr_name, (const char *)info -> ifp, sizeof ifr.ifr_name);
-+ if (ioctl (sock, SIOCGIFINDEX, &ifr))
-+ log_fatal ("Failed to get interface index: %m");
-+
- /* Bind to the interface name */
- memset (&sa, 0, sizeof sa);
-- sa.sa_family = AF_PACKET;
-- strncpy (sa.sa_data, (const char *)info -> ifp, sizeof sa.sa_data);
-- if (bind (sock, &sa, sizeof sa)) {
-+ sa.ll.sll_family = AF_PACKET;
-+ sa.ll.sll_ifindex = ifr.ifr_ifindex;
-+ if (bind (sock, &sa.common, sizeof sa)) {
- if (errno == ENOPROTOOPT || errno == EPROTONOSUPPORT ||
- errno == ESOCKTNOSUPPORT || errno == EPFNOSUPPORT ||
- errno == EAFNOSUPPORT || errno == EINVAL) {
-@@ -170,9 +194,18 @@ static void lpf_gen_filter_setup (struct
- void if_register_receive (info)
- struct interface_info *info;
- {
-+ int val;
-+
- /* Open a LPF device and hang it on this interface... */
- info -> rfdesc = if_register_lpf (info);
-
-+ val = 1;
-+ if (setsockopt (info -> rfdesc, SOL_PACKET, PACKET_AUXDATA, &val,
-+ sizeof val) < 0) {
-+ if (errno != ENOPROTOOPT)
-+ log_fatal ("Failed to set auxiliary packet data: %m");
-+ }
-+
- #if defined (HAVE_TR_SUPPORT)
- if (info -> hw_address.hbuf [0] == HTYPE_IEEE802)
- lpf_tr_filter_setup (info);
-@@ -294,7 +327,6 @@ ssize_t send_packet (interface, packet,
- double hh [16];
- double ih [1536 / sizeof (double)];
- unsigned char *buf = (unsigned char *)ih;
-- struct sockaddr sa;
- int result;
- int fudge;
-
-@@ -315,15 +347,7 @@ ssize_t send_packet (interface, packet,
- (unsigned char *)raw, len);
- memcpy (buf + ibufp, raw, len);
-
-- /* For some reason, SOCK_PACKET sockets can't be connected,
-- so we have to do a sentdo every time. */
-- memset (&sa, 0, sizeof sa);
-- sa.sa_family = AF_PACKET;
-- strncpy (sa.sa_data,
-- (const char *)interface -> ifp, sizeof sa.sa_data);
--
-- result = sendto (interface -> wfdesc,
-- buf + fudge, ibufp + len - fudge, 0, &sa, sizeof sa);
-+ result = write (interface -> wfdesc, buf + fudge, ibufp + len - fudge);
- if (result < 0)
- log_error ("send_packet: %m");
- return result;
-@@ -340,14 +364,35 @@ ssize_t receive_packet (interface, buf,
- {
- int length = 0;
- int offset = 0;
-+ int nocsum = 0;
- unsigned char ibuf [1536];
- unsigned bufix = 0;
- unsigned paylen;
-+ unsigned char cmsgbuf[CMSG_LEN(sizeof(struct tpacket_auxdata))];
-+ struct iovec iov = {
-+ .iov_base = ibuf,
-+ .iov_len = sizeof ibuf,
-+ };
-+ struct msghdr msg = {
-+ .msg_iov = &iov,
-+ .msg_iovlen = 1,
-+ .msg_control = cmsgbuf,
-+ .msg_controllen = sizeof(cmsgbuf),
-+ };
-+ struct cmsghdr *cmsg;
-
-- length = read (interface -> rfdesc, ibuf, sizeof ibuf);
-+ length = recvmsg (interface -> rfdesc, &msg, 0);
- if (length <= 0)
- return length;
-
-+ for (cmsg = CMSG_FIRSTHDR(&msg); cmsg; cmsg = CMSG_NXTHDR(&msg, cmsg)) {
-+ if (cmsg->cmsg_level == SOL_PACKET &&
-+ cmsg->cmsg_type == PACKET_AUXDATA) {
-+ struct tpacket_auxdata *aux = (void *)CMSG_DATA(cmsg);
-+ nocsum = aux->tp_status & TP_STATUS_CSUMNOTREADY;
-+ }
-+ }
-+
- bufix = 0;
- /* Decode the physical header... */
- offset = decode_hw_header (interface, ibuf, bufix, hfrom);
-@@ -364,7 +409,7 @@ ssize_t receive_packet (interface, buf,
-
- /* Decode the IP and UDP headers... */
- offset = decode_udp_ip_header (interface, ibuf, bufix, from,
-- (unsigned)length, &paylen);
-+ (unsigned)length, &paylen, nocsum);
-
- /* If the IP or UDP checksum was bad, skip the packet... */
- if (offset < 0)
-diff -up dhcp-4.2.0/common/nit.c.xen dhcp-4.2.0/common/nit.c
---- dhcp-4.2.0/common/nit.c.xen 2009-11-19 20:49:01.000000000 -0500
-+++ dhcp-4.2.0/common/nit.c 2010-09-23 05:24:18.000000000 -0400
-@@ -369,7 +369,7 @@ ssize_t receive_packet (interface, buf,
-
- /* Decode the IP and UDP headers... */
- offset = decode_udp_ip_header (interface, ibuf, bufix,
-- from, length, &paylen);
-+ from, length, &paylen, 0);
-
- /* If the IP or UDP checksum was bad, skip the packet... */
- if (offset < 0)
-diff -up dhcp-4.2.0/common/packet.c.xen dhcp-4.2.0/common/packet.c
---- dhcp-4.2.0/common/packet.c.xen 2009-07-23 14:52:20.000000000 -0400
-+++ dhcp-4.2.0/common/packet.c 2010-09-23 05:24:21.000000000 -0400
-@@ -211,7 +211,7 @@ ssize_t
- decode_udp_ip_header(struct interface_info *interface,
- unsigned char *buf, unsigned bufix,
- struct sockaddr_in *from, unsigned buflen,
-- unsigned *rbuflen)
-+ unsigned *rbuflen, int nocsum)
- {
- unsigned char *data;
- struct ip ip;
-@@ -322,7 +322,7 @@ decode_udp_ip_header(struct interface_in
- 8, IPPROTO_UDP + ulen))));
-
- udp_packets_seen++;
-- if (usum && usum != sum) {
-+ if (!nocsum && usum && usum != sum) {
- udp_packets_bad_checksum++;
- if (udp_packets_seen > 4 &&
- (udp_packets_seen / udp_packets_bad_checksum) < 2) {
-diff -up dhcp-4.2.0/common/upf.c.xen dhcp-4.2.0/common/upf.c
---- dhcp-4.2.0/common/upf.c.xen 2009-11-19 20:49:01.000000000 -0500
-+++ dhcp-4.2.0/common/upf.c 2010-09-23 05:24:25.000000000 -0400
-@@ -320,7 +320,7 @@ ssize_t receive_packet (interface, buf,
-
- /* Decode the IP and UDP headers... */
- offset = decode_udp_ip_header (interface, ibuf, bufix,
-- from, length, &paylen);
-+ from, length, &paylen, 0);
-
- /* If the IP or UDP checksum was bad, skip the packet... */
- if (offset < 0)
-diff -up dhcp-4.2.0/includes/dhcpd.h.xen dhcp-4.2.0/includes/dhcpd.h
---- dhcp-4.2.0/includes/dhcpd.h.xen 2010-06-01 13:29:59.000000000 -0400
-+++ dhcp-4.2.0/includes/dhcpd.h 2010-09-23 05:24:32.000000000 -0400
-@@ -2769,7 +2769,7 @@ ssize_t decode_hw_header PROTO ((struct
- unsigned, struct hardware *));
- ssize_t decode_udp_ip_header PROTO ((struct interface_info *, unsigned char *,
- unsigned, struct sockaddr_in *,
-- unsigned, unsigned *));
-+ unsigned, unsigned *, int));
-
- /* ethernet.c */
- void assemble_ethernet_header PROTO ((struct interface_info *, unsigned char *,
+diff -up dhcp-4.2.2b1/common/bpf.c.xen dhcp-4.2.2b1/common/bpf.c +--- dhcp-4.2.2b1/common/bpf.c.xen 2009-11-20 02:48:59.000000000 +0100 ++++ dhcp-4.2.2b1/common/bpf.c 2011-07-01 14:00:16.936959001 +0200 +@@ -485,7 +485,7 @@ ssize_t receive_packet (interface, buf, + offset = decode_udp_ip_header (interface, + interface -> rbuf, + interface -> rbuf_offset, +- from, hdr.bh_caplen, &paylen); ++ from, hdr.bh_caplen, &paylen, 0); + + /* If the IP or UDP checksum was bad, skip the packet... */ + if (offset < 0) { +diff -up dhcp-4.2.2b1/common/dlpi.c.xen dhcp-4.2.2b1/common/dlpi.c +--- dhcp-4.2.2b1/common/dlpi.c.xen 2011-05-11 16:20:59.000000000 +0200 ++++ dhcp-4.2.2b1/common/dlpi.c 2011-07-01 14:00:16.937958997 +0200 +@@ -693,7 +693,7 @@ ssize_t receive_packet (interface, buf, + length -= offset; + #endif + offset = decode_udp_ip_header (interface, dbuf, bufix, +- from, length, &paylen); ++ from, length, &paylen, 0); + + /* + * If the IP or UDP checksum was bad, skip the packet... +diff -up dhcp-4.2.2b1/common/lpf.c.xen dhcp-4.2.2b1/common/lpf.c +--- dhcp-4.2.2b1/common/lpf.c.xen 2011-05-10 16:38:58.000000000 +0200 ++++ dhcp-4.2.2b1/common/lpf.c 2011-07-01 14:11:24.725748028 +0200 +@@ -29,19 +29,33 @@ + #include "dhcpd.h" + #if defined (USE_LPF_SEND) || defined (USE_LPF_RECEIVE) + #include <sys/ioctl.h> ++#include <sys/socket.h> + #include <sys/uio.h> + #include <errno.h> + + #include <asm/types.h> + #include <linux/filter.h> + #include <linux/if_ether.h> ++#include <linux/if_packet.h> + #include <netinet/in_systm.h> +-#include <net/if_packet.h> + #include "includes/netinet/ip.h" + #include "includes/netinet/udp.h" + #include "includes/netinet/if_ether.h" + #include <net/if.h> + ++#ifndef PACKET_AUXDATA ++#define PACKET_AUXDATA 8 ++ ++struct tpacket_auxdata ++{ ++ __u32 tp_status; ++ __u32 tp_len; ++ __u32 tp_snaplen; ++ __u16 tp_mac; ++ __u16 tp_net; ++}; ++#endif ++ + /* Reinitializes the specified interface after an address change. This + is not required for packet-filter APIs. */ + +@@ -67,10 +81,14 @@ int if_register_lpf (info) + struct interface_info *info; + { + int sock; +- struct sockaddr sa; ++ union { ++ struct sockaddr_ll ll; ++ struct sockaddr common; ++ } sa; ++ struct ifreq ifr; + + /* Make an LPF socket. */ +- if ((sock = socket(PF_PACKET, SOCK_PACKET, ++ if ((sock = socket(PF_PACKET, SOCK_RAW, + htons((short)ETH_P_ALL))) < 0) { + if (errno == ENOPROTOOPT || errno == EPROTONOSUPPORT || + errno == ESOCKTNOSUPPORT || errno == EPFNOSUPPORT || +@@ -85,11 +103,17 @@ int if_register_lpf (info) + log_fatal ("Open a socket for LPF: %m"); + } + ++ memset (&ifr, 0, sizeof ifr); ++ strncpy (ifr.ifr_name, (const char *)info -> ifp, sizeof ifr.ifr_name); ++ ifr.ifr_name[IFNAMSIZ-1] = '\0'; ++ if (ioctl (sock, SIOCGIFINDEX, &ifr)) ++ log_fatal ("Failed to get interface index: %m"); ++ + /* Bind to the interface name */ + memset (&sa, 0, sizeof sa); +- sa.sa_family = AF_PACKET; +- strncpy (sa.sa_data, (const char *)info -> ifp, sizeof sa.sa_data); +- if (bind (sock, &sa, sizeof sa)) { ++ sa.ll.sll_family = AF_PACKET; ++ sa.ll.sll_ifindex = ifr.ifr_ifindex; ++ if (bind (sock, &sa.common, sizeof sa)) { + if (errno == ENOPROTOOPT || errno == EPROTONOSUPPORT || + errno == ESOCKTNOSUPPORT || errno == EPFNOSUPPORT || + errno == EAFNOSUPPORT || errno == EINVAL) { +@@ -171,9 +195,18 @@ static void lpf_gen_filter_setup (struct + void if_register_receive (info) + struct interface_info *info; + { ++ int val; ++ + /* Open a LPF device and hang it on this interface... */ + info -> rfdesc = if_register_lpf (info); + ++ val = 1; ++ if (setsockopt (info -> rfdesc, SOL_PACKET, PACKET_AUXDATA, &val, ++ sizeof val) < 0) { ++ if (errno != ENOPROTOOPT) ++ log_fatal ("Failed to set auxiliary packet data: %m"); ++ } ++ + #if defined (HAVE_TR_SUPPORT) + if (info -> hw_address.hbuf [0] == HTYPE_IEEE802) + lpf_tr_filter_setup (info); +@@ -295,7 +328,6 @@ ssize_t send_packet (interface, packet, + double hh [16]; + double ih [1536 / sizeof (double)]; + unsigned char *buf = (unsigned char *)ih; +- struct sockaddr_pkt sa; + int result; + int fudge; + +@@ -316,17 +348,7 @@ ssize_t send_packet (interface, packet, + (unsigned char *)raw, len); + memcpy (buf + ibufp, raw, len); + +- /* For some reason, SOCK_PACKET sockets can't be connected, +- so we have to do a sentdo every time. */ +- memset (&sa, 0, sizeof sa); +- sa.spkt_family = AF_PACKET; +- strncpy ((char *)sa.spkt_device, +- (const char *)interface -> ifp, sizeof sa.spkt_device); +- sa.spkt_protocol = htons(ETH_P_IP); +- +- result = sendto (interface -> wfdesc, +- buf + fudge, ibufp + len - fudge, 0, +- (const struct sockaddr *)&sa, sizeof sa); ++ result = write (interface -> wfdesc, buf + fudge, ibufp + len - fudge); + if (result < 0) + log_error ("send_packet: %m"); + return result; +@@ -343,14 +365,35 @@ ssize_t receive_packet (interface, buf, + { + int length = 0; + int offset = 0; ++ int nocsum = 0; + unsigned char ibuf [1536]; + unsigned bufix = 0; + unsigned paylen; ++ unsigned char cmsgbuf[CMSG_LEN(sizeof(struct tpacket_auxdata))]; ++ struct iovec iov = { ++ .iov_base = ibuf, ++ .iov_len = sizeof ibuf, ++ }; ++ struct msghdr msg = { ++ .msg_iov = &iov, ++ .msg_iovlen = 1, ++ .msg_control = cmsgbuf, ++ .msg_controllen = sizeof(cmsgbuf), ++ }; ++ struct cmsghdr *cmsg; + +- length = read (interface -> rfdesc, ibuf, sizeof ibuf); ++ length = recvmsg (interface -> rfdesc, &msg, 0); + if (length <= 0) + return length; + ++ for (cmsg = CMSG_FIRSTHDR(&msg); cmsg; cmsg = CMSG_NXTHDR(&msg, cmsg)) { ++ if (cmsg->cmsg_level == SOL_PACKET && ++ cmsg->cmsg_type == PACKET_AUXDATA) { ++ struct tpacket_auxdata *aux = (void *)CMSG_DATA(cmsg); ++ nocsum = aux->tp_status & TP_STATUS_CSUMNOTREADY; ++ } ++ } ++ + bufix = 0; + /* Decode the physical header... */ + offset = decode_hw_header (interface, ibuf, bufix, hfrom); +@@ -367,7 +410,7 @@ ssize_t receive_packet (interface, buf, + + /* Decode the IP and UDP headers... */ + offset = decode_udp_ip_header (interface, ibuf, bufix, from, +- (unsigned)length, &paylen); ++ (unsigned)length, &paylen, nocsum); + + /* If the IP or UDP checksum was bad, skip the packet... */ + if (offset < 0) +diff -up dhcp-4.2.2b1/common/nit.c.xen dhcp-4.2.2b1/common/nit.c +--- dhcp-4.2.2b1/common/nit.c.xen 2009-11-20 02:49:01.000000000 +0100 ++++ dhcp-4.2.2b1/common/nit.c 2011-07-01 14:00:16.939958989 +0200 +@@ -369,7 +369,7 @@ ssize_t receive_packet (interface, buf, + + /* Decode the IP and UDP headers... */ + offset = decode_udp_ip_header (interface, ibuf, bufix, +- from, length, &paylen); ++ from, length, &paylen, 0); + + /* If the IP or UDP checksum was bad, skip the packet... */ + if (offset < 0) +diff -up dhcp-4.2.2b1/common/packet.c.xen dhcp-4.2.2b1/common/packet.c +--- dhcp-4.2.2b1/common/packet.c.xen 2009-07-23 20:52:20.000000000 +0200 ++++ dhcp-4.2.2b1/common/packet.c 2011-07-01 14:00:16.939958989 +0200 +@@ -211,7 +211,7 @@ ssize_t + decode_udp_ip_header(struct interface_info *interface, + unsigned char *buf, unsigned bufix, + struct sockaddr_in *from, unsigned buflen, +- unsigned *rbuflen) ++ unsigned *rbuflen, int nocsum) + { + unsigned char *data; + struct ip ip; +@@ -322,7 +322,7 @@ decode_udp_ip_header(struct interface_in + 8, IPPROTO_UDP + ulen)))); + + udp_packets_seen++; +- if (usum && usum != sum) { ++ if (!nocsum && usum && usum != sum) { + udp_packets_bad_checksum++; + if (udp_packets_seen > 4 && + (udp_packets_seen / udp_packets_bad_checksum) < 2) { +diff -up dhcp-4.2.2b1/common/upf.c.xen dhcp-4.2.2b1/common/upf.c +--- dhcp-4.2.2b1/common/upf.c.xen 2009-11-20 02:49:01.000000000 +0100 ++++ dhcp-4.2.2b1/common/upf.c 2011-07-01 14:00:16.940958986 +0200 +@@ -320,7 +320,7 @@ ssize_t receive_packet (interface, buf, + + /* Decode the IP and UDP headers... */ + offset = decode_udp_ip_header (interface, ibuf, bufix, +- from, length, &paylen); ++ from, length, &paylen, 0); + + /* If the IP or UDP checksum was bad, skip the packet... */ + if (offset < 0) +diff -up dhcp-4.2.2b1/includes/dhcpd.h.xen dhcp-4.2.2b1/includes/dhcpd.h +--- dhcp-4.2.2b1/includes/dhcpd.h.xen 2011-07-01 14:00:16.000000000 +0200 ++++ dhcp-4.2.2b1/includes/dhcpd.h 2011-07-01 14:12:18.069642470 +0200 +@@ -2796,7 +2796,7 @@ ssize_t decode_hw_header (struct interfa + unsigned, struct hardware *); + ssize_t decode_udp_ip_header (struct interface_info *, unsigned char *, + unsigned, struct sockaddr_in *, +- unsigned, unsigned *); ++ unsigned, unsigned *, int); + + /* ethernet.c */ + void assemble_ethernet_header (struct interface_info *, unsigned char *, diff --git a/net-misc/dhcp/files/dhcp-4.2.0-options.patch b/net-misc/dhcp/files/dhcp-4.2.3-options.patch index 6c2062afa..c902e62a3 100644 --- a/net-misc/dhcp/files/dhcp-4.2.0-options.patch +++ b/net-misc/dhcp/files/dhcp-4.2.3-options.patch @@ -1,401 +1,391 @@ -diff -up dhcp-4.2.0/client/clparse.c.options dhcp-4.2.0/client/clparse.c
---- dhcp-4.2.0/client/clparse.c.options 2009-11-19 20:48:58.000000000 -0500
-+++ dhcp-4.2.0/client/clparse.c 2010-09-23 06:07:17.000000000 -0400
-@@ -136,6 +136,7 @@ isc_result_t read_client_conf ()
- /* Requested lease time, used by DHCPv6 (DHCPv4 uses the option cache)
- */
- top_level_config.requested_lease = 7200;
-+ top_level_config.bootp_broadcast_always = 0;
-
- group_allocate (&top_level_config.on_receipt, MDL);
- if (!top_level_config.on_receipt)
-@@ -303,7 +304,8 @@ void read_client_leases ()
- interface-declaration |
- LEASE client-lease-statement |
- ALIAS client-lease-statement |
-- KEY key-definition */
-+ KEY key-definition |
-+ BOOTP_BROADCAST_ALWAYS */
-
- void parse_client_statement (cfile, ip, config)
- struct parse *cfile;
-@@ -717,6 +719,12 @@ void parse_client_statement (cfile, ip,
- parse_reject_statement (cfile, config);
- return;
-
-+ case BOOTP_BROADCAST_ALWAYS:
-+ token = next_token(&val, (unsigned*)0, cfile);
-+ config -> bootp_broadcast_always = 1;
-+ parse_semi (cfile);
-+ return;
-+
- default:
- lose = 0;
- stmt = (struct executable_statement *)0;
-diff -up dhcp-4.2.0/client/dhclient.c.options dhcp-4.2.0/client/dhclient.c
---- dhcp-4.2.0/client/dhclient.c.options 2010-02-17 15:33:55.000000000 -0500
-+++ dhcp-4.2.0/client/dhclient.c 2010-09-23 06:11:14.000000000 -0400
-@@ -39,6 +39,12 @@
- #include <limits.h>
- #include <dns/result.h>
-
-+/*
-+ * Defined in stdio.h when _GNU_SOURCE is set, but we don't want to define
-+ * that when building ISC code.
-+ */
-+extern int asprintf(char **strp, const char *fmt, ...);
-+
- TIME default_lease_time = 43200; /* 12 hours... */
- TIME max_lease_time = 86400; /* 24 hours... */
-
-@@ -82,6 +88,9 @@ int wanted_ia_na = -1; /* the absolute
- int wanted_ia_ta = 0;
- int wanted_ia_pd = 0;
- char *mockup_relay = NULL;
-+int bootp_broadcast_always = 0;
-+
-+extern u_int32_t default_requested_options[];
-
- void run_stateless(int exit_mode);
-
-@@ -112,6 +121,15 @@ main(int argc, char **argv) {
- int local_family_set = 0;
- #endif /* DHCPv6 */
- char *s;
-+ char *dhcp_client_identifier_arg = NULL;
-+ char *dhcp_host_name_arg = NULL;
-+ char *dhcp_fqdn_arg = NULL;
-+ char *dhcp_vendor_class_identifier_arg = NULL;
-+ char *dhclient_request_options = NULL;
-+
-+ int timeout_arg = 0;
-+ char *arg_conf = NULL;
-+ int arg_conf_len = 0;
-
- /* Initialize client globals. */
- memset(&default_duid, 0, sizeof(default_duid));
-@@ -297,6 +315,88 @@ main(int argc, char **argv) {
- } else if (!strcmp(argv[i], "--version")) {
- log_info("isc-dhclient-%s", PACKAGE_VERSION);
- exit(0);
-+ } else if (!strcmp(argv[i], "-I")) {
-+ if ((++i == argc) || (argv[i] == NULL) || (*(argv[i])=='\0')) {
-+ usage();
-+ exit(1);
-+ }
-+
-+ if (strlen(argv[i]) >= DHCP_MAX_OPTION_LEN) {
-+ log_error("-I option dhcp-client-identifier string \"%s\" is too long - maximum length is: %d", argv[i], DHCP_MAX_OPTION_LEN-1);
-+ exit(1);
-+ }
-+
-+ dhcp_client_identifier_arg = argv[i];
-+ } else if (!strcmp(argv[i], "-B")) {
-+ bootp_broadcast_always = 1;
-+ } else if (!strcmp(argv[i], "-H")) {
-+ if ((++i == argc) || (argv[i] == NULL) || (*(argv[i])=='\0')) {
-+ usage();
-+ exit(1);
-+ }
-+
-+ if (strlen(argv[i]) >= DHCP_MAX_OPTION_LEN) {
-+ log_error("-H option host-name string \"%s\" is too long - maximum length is: %d", argv[i], DHCP_MAX_OPTION_LEN-1);
-+ exit(1);
-+ }
-+
-+ if (dhcp_host_name_arg != NULL) {
-+ log_error("The -H <host-name> and -F <fqdn> arguments are mutually exclusive");
-+ exit(1);
-+ }
-+
-+ dhcp_host_name_arg = argv[i];
-+ } else if (!strcmp(argv[i], "-F")) {
-+ if ((++i == argc) || (argv[i] == NULL) || (*(argv[i])=='\0')) {
-+ usage();
-+ exit(1);
-+ }
-+
-+ if (strlen(argv[i]) >= DHCP_MAX_OPTION_LEN) {
-+ log_error("-F option fqdn.fqdn string \"%s\" is too long - maximum length is: %d", argv[i], DHCP_MAX_OPTION_LEN-1);
-+ exit(1);
-+ }
-+
-+ if (dhcp_fqdn_arg != NULL) {
-+ log_error("Only one -F <fqdn> argument can be specified");
-+ exit(1);
-+ }
-+
-+ if (dhcp_host_name_arg != NULL) {
-+ log_error("The -F <fqdn> and -H <host-name> arguments are mutually exclusive");
-+ exit(1);
-+ }
-+
-+ dhcp_fqdn_arg = argv[i];
-+ } else if (!strcmp(argv[i], "-timeout")) {
-+ if ((++i == argc) || (argv[i] == NULL) || (*(argv[i])=='\0')) {
-+ usage();
-+ exit(1);
-+ }
-+
-+ if ((timeout_arg = atoi(argv[i])) <= 0) {
-+ log_error("-T timeout option must be > 0 - bad value: %s",argv[i]);
-+ exit(1);
-+ }
-+ } else if (!strcmp(argv[i], "-V")) {
-+ if ((++i == argc) || (argv[i] == NULL) || (*(argv[i])=='\0')) {
-+ usage();
-+ exit(1);
-+ }
-+
-+ if (strlen(argv[i]) >= DHCP_MAX_OPTION_LEN) {
-+ log_error("-V option vendor-class-identifier string \"%s\" is too long - maximum length is: %d", argv[i], DHCP_MAX_OPTION_LEN-1);
-+ exit(1);
-+ }
-+
-+ dhcp_vendor_class_identifier_arg = argv[i];
-+ } else if (!strcmp(argv[i], "-R")) {
-+ if ((++i == argc) || (argv[i] == NULL) || (*(argv[i])=='\0')) {
-+ usage();
-+ exit(1);
-+ }
-+
-+ dhclient_request_options = argv[i];
- } else if (argv[i][0] == '-') {
- usage();
- } else if (interfaces_requested < 0) {
-@@ -466,6 +566,166 @@ main(int argc, char **argv) {
- /* Parse the dhclient.conf file. */
- read_client_conf();
-
-+ /* Parse any extra command line configuration arguments: */
-+ if ((dhcp_client_identifier_arg != NULL) && (*dhcp_client_identifier_arg != '\0')) {
-+ arg_conf_len = asprintf(&arg_conf, "send dhcp-client-identifier \"%s\";", dhcp_client_identifier_arg);
-+
-+ if ((arg_conf == 0) || (arg_conf_len <= 0))
-+ log_fatal("Unable to send -I option dhcp-client-identifier");
-+ }
-+
-+ if ((dhcp_host_name_arg != NULL) && (*dhcp_host_name_arg != '\0')) {
-+ if (arg_conf == 0) {
-+ arg_conf_len = asprintf(&arg_conf, "send host-name \"%s\";", dhcp_host_name_arg);
-+
-+ if ((arg_conf == 0) || (arg_conf_len <= 0))
-+ log_fatal("Unable to send -H option host-name");
-+ } else {
-+ char *last_arg_conf = arg_conf;
-+ arg_conf = NULL;
-+ arg_conf_len = asprintf(&arg_conf, "%s\nsend host-name \"%s\";", last_arg_conf, dhcp_host_name_arg);
-+
-+ if ((arg_conf == 0) || (arg_conf_len <= 0))
-+ log_fatal("Unable to send -H option host-name");
-+
-+ free(last_arg_conf);
-+ }
-+ }
-+
-+ if ((dhcp_fqdn_arg != NULL) && (*dhcp_fqdn_arg != '\0')) {
-+ if (arg_conf == 0) {
-+ arg_conf_len = asprintf(&arg_conf, "send fqdn.fqdn \"%s\";", dhcp_fqdn_arg);
-+
-+ if ((arg_conf == 0) || (arg_conf_len <= 0))
-+ log_fatal("Unable to send -F option fqdn.fqdn");
-+ } else {
-+ char *last_arg_conf = arg_conf;
-+ arg_conf = NULL;
-+ arg_conf_len = asprintf(&arg_conf, "%s\nsend fqdn.fqdn \"%s\";", last_arg_conf, dhcp_fqdn_arg);
-+
-+ if ((arg_conf == 0) || (arg_conf_len <= 0))
-+ log_fatal("Unable to send -F option fqdn.fqdn");
-+
-+ free(last_arg_conf);
-+ }
-+ }
-+
-+ if (timeout_arg) {
-+ if (arg_conf == 0) {
-+ arg_conf_len = asprintf(&arg_conf, "timeout %d;", timeout_arg);
-+
-+ if ((arg_conf == 0) || (arg_conf_len <= 0))
-+ log_fatal("Unable to process -timeout timeout argument");
-+ } else {
-+ char *last_arg_conf = arg_conf;
-+ arg_conf = NULL;
-+ arg_conf_len = asprintf(&arg_conf, "%s\ntimeout %d;", last_arg_conf, timeout_arg);
-+
-+ if ((arg_conf == 0) || (arg_conf_len == 0))
-+ log_fatal("Unable to process -timeout timeout argument");
-+
-+ free(last_arg_conf);
-+ }
-+ }
-+
-+ if ((dhcp_vendor_class_identifier_arg != NULL) && (*dhcp_vendor_class_identifier_arg != '\0')) {
-+ if (arg_conf == 0) {
-+ arg_conf_len = asprintf(&arg_conf, "send vendor-class-identifier \"%s\";", dhcp_vendor_class_identifier_arg);
-+
-+ if ((arg_conf == 0) || (arg_conf_len <= 0))
-+ log_fatal("Unable to send -V option vendor-class-identifier");
-+ } else {
-+ char *last_arg_conf = arg_conf;
-+ arg_conf = NULL;
-+ arg_conf_len = asprintf(&arg_conf, "%s\nsend vendor-class-identifier \"%s\";", last_arg_conf, dhcp_vendor_class_identifier_arg);
-+
-+ if ((arg_conf == 0) || (arg_conf_len <= 0))
-+ log_fatal("Unable to send -V option vendor-class-identifier");
-+
-+ free(last_arg_conf);
-+ }
-+ }
-+
-+ if (dhclient_request_options != NULL) {
-+ if (arg_conf == 0) {
-+ arg_conf_len = asprintf(&arg_conf, "request %s;", dhclient_request_options);
-+
-+ if ((arg_conf == 0) || (arg_conf_len <= 0))
-+ log_fatal("Unable to parse -R <request options list> argument");
-+ } else {
-+ char *last_arg_conf = arg_conf;
-+ arg_conf = NULL;
-+ arg_conf_len = asprintf(&arg_conf, "%s\nrequest %s;", last_arg_conf, dhclient_request_options);
-+
-+ if ((arg_conf == 0) || (arg_conf_len <= 0))
-+ log_fatal("Unable to parse -R <request options list> argument");
-+
-+ free(last_arg_conf);
-+ }
-+ }
-+
-+ if (arg_conf) {
-+ if (arg_conf_len == 0)
-+ if ((arg_conf_len = strlen(arg_conf)) == 0)
-+ /* huh ? cannot happen ! */
-+ log_fatal("Unable to process -I/-H/-F/-timeout/-V/-R configuration arguments");
-+
-+ /* parse the extra dhclient.conf configuration arguments
-+ * into top level config: */
-+ struct parse *cfile = (struct parse *)0;
-+ const char *val = NULL;
-+ int token;
-+
-+ status = new_parse(&cfile, -1, arg_conf, arg_conf_len, "extra dhclient -I/-H/-F/-timeout/-V/-R configuration arguments", 0);
-+
-+ if ((status != ISC_R_SUCCESS) || (cfile -> warnings_occurred))
-+ log_fatal("Cannot parse -I/-H/-F/-timeout/-V/-R configuration arguments !");
-+ /* more detailed parse failures will be logged */
-+
-+ do {
-+ token = peek_token(&val, (unsigned *)0, cfile);
-+ if (token == END_OF_FILE)
-+ break;
-+
-+ parse_client_statement(cfile, (struct interface_info *)0, &top_level_config);
-+ } while (1);
-+
-+ if (cfile -> warnings_occurred)
-+ log_fatal("Cannot parse -I/-H/-F/-timeout/-V/-R configuration arguments !");
-+ end_parse(&cfile);
-+
-+ if (timeout_arg) {
-+ /* we just set the toplevel timeout, but per-client
-+ * timeouts may still be at defaults. Also, it makes no
-+ * sense having the reboot_timeout or backoff_cutoff
-+ * greater than the timeout:
-+ */
-+ if ((top_level_config.backoff_cutoff == 15) && (top_level_config.backoff_cutoff > (timeout_arg / 2)))
-+ top_level_config.backoff_cutoff = (((unsigned long)(timeout_arg / 2)) == 0) ? timeout_arg : (unsigned long)(timeout_arg / 2);
-+
-+ for (ip=interfaces; ip; ip = ip->next) {
-+ if (ip->client->config->timeout == 60)
-+ ip->client->config->timeout = timeout_arg;
-+
-+ if ((ip->client->config->reboot_timeout == 10) && (ip->client->config->reboot_timeout > ip->client->config->timeout))
-+ ip->client->config->reboot_timeout = ip->client->config->timeout;
-+ if ((ip->client->config->backoff_cutoff == 15) && (ip->client->config->backoff_cutoff > top_level_config.backoff_cutoff))
-+ ip->client->config->backoff_cutoff = top_level_config.backoff_cutoff;
-+ }
-+ }
-+
-+ if ((dhclient_request_options != 0) && (top_level_config.requested_options != (void *) default_requested_options)) {
-+ for (ip=interfaces; ip; ip = ip->next) {
-+ if (ip->client->config->requested_options == (void *) default_requested_options)
-+ ip->client->config->requested_options = top_level_config.requested_options;
-+ }
-+ }
-+
-+ free(arg_conf);
-+ arg_conf = NULL;
-+ arg_conf_len = 0;
-+ }
-+
- /* Parse the lease database. */
- read_client_leases();
-
-@@ -2337,7 +2597,8 @@ void make_discover (client, lease)
- client -> packet.xid = random ();
- client -> packet.secs = 0; /* filled in by send_discover. */
-
-- if (can_receive_unicast_unconfigured (client -> interface))
-+ if ((!(bootp_broadcast_always || client->config->bootp_broadcast_always))
-+ && can_receive_unicast_unconfigured(client->interface))
- client -> packet.flags = 0;
- else
- client -> packet.flags = htons (BOOTP_BROADCAST);
-@@ -2421,7 +2682,9 @@ void make_request (client, lease)
- } else {
- memset (&client -> packet.ciaddr, 0,
- sizeof client -> packet.ciaddr);
-- if (can_receive_unicast_unconfigured (client -> interface))
-+ if ((!(bootp_broadcast_always ||
-+ client ->config->bootp_broadcast_always)) &&
-+ can_receive_unicast_unconfigured (client -> interface))
- client -> packet.flags = 0;
- else
- client -> packet.flags = htons (BOOTP_BROADCAST);
-@@ -2483,7 +2746,8 @@ void make_decline (client, lease)
- client -> packet.hops = 0;
- client -> packet.xid = client -> xid;
- client -> packet.secs = 0; /* Filled in by send_request. */
-- if (can_receive_unicast_unconfigured (client -> interface))
-+ if ((!(bootp_broadcast_always || client->config-> bootp_broadcast_always))
-+ && can_receive_unicast_unconfigured (client->interface))
- client -> packet.flags = 0;
- else
- client -> packet.flags = htons (BOOTP_BROADCAST);
-diff -up dhcp-4.2.0/common/conflex.c.options dhcp-4.2.0/common/conflex.c
---- dhcp-4.2.0/common/conflex.c.options 2010-03-24 17:49:47.000000000 -0400
-+++ dhcp-4.2.0/common/conflex.c 2010-09-23 06:07:17.000000000 -0400
-@@ -803,6 +803,8 @@ intern(char *atom, enum dhcp_token dfv)
- return BALANCE;
- if (!strcasecmp (atom + 1, "ound"))
- return BOUND;
-+ if (!strcasecmp (atom + 1, "ootp-broadcast-always"))
-+ return BOOTP_BROADCAST_ALWAYS;
- break;
- case 'c':
- if (!strcasecmp(atom + 1, "ase"))
-diff -up dhcp-4.2.0/includes/dhcpd.h.options dhcp-4.2.0/includes/dhcpd.h
---- dhcp-4.2.0/includes/dhcpd.h.options 2010-09-23 05:24:32.000000000 -0400
-+++ dhcp-4.2.0/includes/dhcpd.h 2010-09-23 06:07:17.000000000 -0400
-@@ -1119,6 +1119,9 @@ struct client_config {
- int do_forward_update; /* If nonzero, and if we have the
- information we need, update the
- A record for the address we get. */
-+
-+ int bootp_broadcast_always; /* If nonzero, always set the BOOTP_BROADCAST
-+ flag in requests */
- };
-
- /* Per-interface state used in the dhcp client... */
-diff -up dhcp-4.2.0/includes/dhctoken.h.options dhcp-4.2.0/includes/dhctoken.h
---- dhcp-4.2.0/includes/dhctoken.h.options 2010-02-17 15:33:55.000000000 -0500
-+++ dhcp-4.2.0/includes/dhctoken.h 2010-09-23 06:08:18.000000000 -0400
-@@ -357,7 +357,8 @@ enum dhcp_token {
- CONFLICT_DONE = 660,
- AUTO_PARTNER_DOWN = 661,
- GETHOSTNAME = 662,
-- REWIND = 663
-+ REWIND = 663,
-+ BOOTP_BROADCAST_ALWAYS = 664
- };
-
- #define is_identifier(x) ((x) >= FIRST_TOKEN && \
+diff -up dhcp-4.2.3-P2/client/clparse.c.options dhcp-4.2.3-P2/client/clparse.c +--- dhcp-4.2.3-P2/client/clparse.c.options 2011-04-21 16:08:14.000000000 +0200 ++++ dhcp-4.2.3-P2/client/clparse.c 2012-02-13 18:21:32.233471518 +0100 +@@ -146,6 +146,7 @@ isc_result_t read_client_conf () + /* Requested lease time, used by DHCPv6 (DHCPv4 uses the option cache) + */ + top_level_config.requested_lease = 7200; ++ top_level_config.bootp_broadcast_always = 0; + + group_allocate (&top_level_config.on_receipt, MDL); + if (!top_level_config.on_receipt) +@@ -313,7 +314,8 @@ void read_client_leases () + interface-declaration | + LEASE client-lease-statement | + ALIAS client-lease-statement | +- KEY key-definition */ ++ KEY key-definition | ++ BOOTP_BROADCAST_ALWAYS */ + + void parse_client_statement (cfile, ip, config) + struct parse *cfile; +@@ -732,6 +734,12 @@ void parse_client_statement (cfile, ip, + parse_reject_statement (cfile, config); + return; + ++ case BOOTP_BROADCAST_ALWAYS: ++ token = next_token(&val, (unsigned*)0, cfile); ++ config -> bootp_broadcast_always = 1; ++ parse_semi (cfile); ++ return; ++ + default: + lose = 0; + stmt = (struct executable_statement *)0; +diff -up dhcp-4.2.3-P2/client/dhclient.c.options dhcp-4.2.3-P2/client/dhclient.c +--- dhcp-4.2.3-P2/client/dhclient.c.options 2011-12-31 01:55:21.000000000 +0100 ++++ dhcp-4.2.3-P2/client/dhclient.c 2012-02-13 18:22:11.554979930 +0100 +@@ -39,6 +39,12 @@ + #include <limits.h> + #include <dns/result.h> + ++/* ++ * Defined in stdio.h when _GNU_SOURCE is set, but we don't want to define ++ * that when building ISC code. ++ */ ++extern int asprintf(char **strp, const char *fmt, ...); ++ + TIME default_lease_time = 43200; /* 12 hours... */ + TIME max_lease_time = 86400; /* 24 hours... */ + +@@ -87,6 +93,9 @@ int wanted_ia_na = -1; /* the absolute + int wanted_ia_ta = 0; + int wanted_ia_pd = 0; + char *mockup_relay = NULL; ++int bootp_broadcast_always = 0; ++ ++extern u_int32_t default_requested_options[]; + + void run_stateless(int exit_mode); + +@@ -123,6 +132,15 @@ main(int argc, char **argv) { + int local_family_set = 0; + #endif /* DHCPv6 */ + char *s; ++ char *dhcp_client_identifier_arg = NULL; ++ char *dhcp_host_name_arg = NULL; ++ char *dhcp_fqdn_arg = NULL; ++ char *dhcp_vendor_class_identifier_arg = NULL; ++ char *dhclient_request_options = NULL; ++ ++ int timeout_arg = 0; ++ char *arg_conf = NULL; ++ int arg_conf_len = 0; + + /* Initialize client globals. */ + memset(&default_duid, 0, sizeof(default_duid)); +@@ -310,6 +328,88 @@ main(int argc, char **argv) { + } else if (!strcmp(argv[i], "--version")) { + log_info("isc-dhclient-%s", PACKAGE_VERSION); + exit(0); ++ } else if (!strcmp(argv[i], "-I")) { ++ if ((++i == argc) || (argv[i] == NULL) || (*(argv[i])=='\0')) { ++ usage(); ++ exit(1); ++ } ++ ++ if (strlen(argv[i]) >= DHCP_MAX_OPTION_LEN) { ++ log_error("-I option dhcp-client-identifier string \"%s\" is too long - maximum length is: %d", argv[i], DHCP_MAX_OPTION_LEN-1); ++ exit(1); ++ } ++ ++ dhcp_client_identifier_arg = argv[i]; ++ } else if (!strcmp(argv[i], "-B")) { ++ bootp_broadcast_always = 1; ++ } else if (!strcmp(argv[i], "-H")) { ++ if ((++i == argc) || (argv[i] == NULL) || (*(argv[i])=='\0')) { ++ usage(); ++ exit(1); ++ } ++ ++ if (strlen(argv[i]) >= DHCP_MAX_OPTION_LEN) { ++ log_error("-H option host-name string \"%s\" is too long - maximum length is: %d", argv[i], DHCP_MAX_OPTION_LEN-1); ++ exit(1); ++ } ++ ++ if (dhcp_host_name_arg != NULL) { ++ log_error("The -H <host-name> and -F <fqdn> arguments are mutually exclusive"); ++ exit(1); ++ } ++ ++ dhcp_host_name_arg = argv[i]; ++ } else if (!strcmp(argv[i], "-F")) { ++ if ((++i == argc) || (argv[i] == NULL) || (*(argv[i])=='\0')) { ++ usage(); ++ exit(1); ++ } ++ ++ if (strlen(argv[i]) >= DHCP_MAX_OPTION_LEN) { ++ log_error("-F option fqdn.fqdn string \"%s\" is too long - maximum length is: %d", argv[i], DHCP_MAX_OPTION_LEN-1); ++ exit(1); ++ } ++ ++ if (dhcp_fqdn_arg != NULL) { ++ log_error("Only one -F <fqdn> argument can be specified"); ++ exit(1); ++ } ++ ++ if (dhcp_host_name_arg != NULL) { ++ log_error("The -F <fqdn> and -H <host-name> arguments are mutually exclusive"); ++ exit(1); ++ } ++ ++ dhcp_fqdn_arg = argv[i]; ++ } else if (!strcmp(argv[i], "-timeout")) { ++ if ((++i == argc) || (argv[i] == NULL) || (*(argv[i])=='\0')) { ++ usage(); ++ exit(1); ++ } ++ ++ if ((timeout_arg = atoi(argv[i])) <= 0) { ++ log_error("timeout option must be > 0 - bad value: %s",argv[i]); ++ exit(1); ++ } ++ } else if (!strcmp(argv[i], "-V")) { ++ if ((++i == argc) || (argv[i] == NULL) || (*(argv[i])=='\0')) { ++ usage(); ++ exit(1); ++ } ++ ++ if (strlen(argv[i]) >= DHCP_MAX_OPTION_LEN) { ++ log_error("-V option vendor-class-identifier string \"%s\" is too long - maximum length is: %d", argv[i], DHCP_MAX_OPTION_LEN-1); ++ exit(1); ++ } ++ ++ dhcp_vendor_class_identifier_arg = argv[i]; ++ } else if (!strcmp(argv[i], "-R")) { ++ if ((++i == argc) || (argv[i] == NULL) || (*(argv[i])=='\0')) { ++ usage(); ++ exit(1); ++ } ++ ++ dhclient_request_options = argv[i]; + } else if (argv[i][0] == '-') { + usage(); + } else if (interfaces_requested < 0) { +@@ -484,6 +584,156 @@ main(int argc, char **argv) { + /* Parse the dhclient.conf file. */ + read_client_conf(); + ++ /* Parse any extra command line configuration arguments: */ ++ if ((dhcp_client_identifier_arg != NULL) && (*dhcp_client_identifier_arg != '\0')) { ++ arg_conf_len = asprintf(&arg_conf, "send dhcp-client-identifier \"%s\";", dhcp_client_identifier_arg); ++ ++ if ((arg_conf == 0) || (arg_conf_len <= 0)) ++ log_fatal("Unable to send -I option dhcp-client-identifier"); ++ } ++ ++ if ((dhcp_host_name_arg != NULL) && (*dhcp_host_name_arg != '\0')) { ++ if (arg_conf == 0) { ++ arg_conf_len = asprintf(&arg_conf, "send host-name \"%s\";", dhcp_host_name_arg); ++ ++ if ((arg_conf == 0) || (arg_conf_len <= 0)) ++ log_fatal("Unable to send -H option host-name"); ++ } else { ++ char *last_arg_conf = arg_conf; ++ arg_conf = NULL; ++ arg_conf_len = asprintf(&arg_conf, "%s\nsend host-name \"%s\";", last_arg_conf, dhcp_host_name_arg); ++ ++ if ((arg_conf == 0) || (arg_conf_len <= 0)) ++ log_fatal("Unable to send -H option host-name"); ++ ++ free(last_arg_conf); ++ } ++ } ++ ++ if ((dhcp_fqdn_arg != NULL) && (*dhcp_fqdn_arg != '\0')) { ++ if (arg_conf == 0) { ++ arg_conf_len = asprintf(&arg_conf, "send fqdn.fqdn \"%s\";", dhcp_fqdn_arg); ++ ++ if ((arg_conf == 0) || (arg_conf_len <= 0)) ++ log_fatal("Unable to send -F option fqdn.fqdn"); ++ } else { ++ char *last_arg_conf = arg_conf; ++ arg_conf = NULL; ++ arg_conf_len = asprintf(&arg_conf, "%s\nsend fqdn.fqdn \"%s\";", last_arg_conf, dhcp_fqdn_arg); ++ ++ if ((arg_conf == 0) || (arg_conf_len <= 0)) ++ log_fatal("Unable to send -F option fqdn.fqdn"); ++ ++ free(last_arg_conf); ++ } ++ } ++ ++ if (timeout_arg) { ++ if (arg_conf == 0) { ++ arg_conf_len = asprintf(&arg_conf, "timeout %d;", timeout_arg); ++ ++ if ((arg_conf == 0) || (arg_conf_len <= 0)) ++ log_fatal("Unable to process -timeout timeout argument"); ++ } else { ++ char *last_arg_conf = arg_conf; ++ arg_conf = NULL; ++ arg_conf_len = asprintf(&arg_conf, "%s\ntimeout %d;", last_arg_conf, timeout_arg); ++ ++ if ((arg_conf == 0) || (arg_conf_len == 0)) ++ log_fatal("Unable to process -timeout timeout argument"); ++ ++ free(last_arg_conf); ++ } ++ } ++ ++ if ((dhcp_vendor_class_identifier_arg != NULL) && (*dhcp_vendor_class_identifier_arg != '\0')) { ++ if (arg_conf == 0) { ++ arg_conf_len = asprintf(&arg_conf, "send vendor-class-identifier \"%s\";", dhcp_vendor_class_identifier_arg); ++ ++ if ((arg_conf == 0) || (arg_conf_len <= 0)) ++ log_fatal("Unable to send -V option vendor-class-identifier"); ++ } else { ++ char *last_arg_conf = arg_conf; ++ arg_conf = NULL; ++ arg_conf_len = asprintf(&arg_conf, "%s\nsend vendor-class-identifier \"%s\";", last_arg_conf, dhcp_vendor_class_identifier_arg); ++ ++ if ((arg_conf == 0) || (arg_conf_len <= 0)) ++ log_fatal("Unable to send -V option vendor-class-identifier"); ++ ++ free(last_arg_conf); ++ } ++ } ++ ++ if (dhclient_request_options != NULL) { ++ if (arg_conf == 0) { ++ arg_conf_len = asprintf(&arg_conf, "request %s;", dhclient_request_options); ++ ++ if ((arg_conf == 0) || (arg_conf_len <= 0)) ++ log_fatal("Unable to parse -R <request options list> argument"); ++ } else { ++ char *last_arg_conf = arg_conf; ++ arg_conf = NULL; ++ arg_conf_len = asprintf(&arg_conf, "%s\nrequest %s;", last_arg_conf, dhclient_request_options); ++ ++ if ((arg_conf == 0) || (arg_conf_len <= 0)) ++ log_fatal("Unable to parse -R <request options list> argument"); ++ ++ free(last_arg_conf); ++ } ++ } ++ ++ if (arg_conf) { ++ if (arg_conf_len == 0) ++ if ((arg_conf_len = strlen(arg_conf)) == 0) ++ /* huh ? cannot happen ! */ ++ log_fatal("Unable to process -I/-H/-F/-timeout/-V/-R configuration arguments"); ++ ++ /* parse the extra dhclient.conf configuration arguments ++ * into top level config: */ ++ struct parse *cfile = (struct parse *)0; ++ const char *val = NULL; ++ int token; ++ ++ status = new_parse(&cfile, -1, arg_conf, arg_conf_len, "extra dhclient -I/-H/-F/-timeout/-V/-R configuration arguments", 0); ++ ++ if ((status != ISC_R_SUCCESS) || (cfile -> warnings_occurred)) ++ log_fatal("Cannot parse -I/-H/-F/-timeout/-V/-R configuration arguments !"); ++ /* more detailed parse failures will be logged */ ++ ++ do { ++ token = peek_token(&val, (unsigned *)0, cfile); ++ if (token == END_OF_FILE) ++ break; ++ ++ parse_client_statement(cfile, (struct interface_info *)0, &top_level_config); ++ } while (1); ++ ++ if (cfile -> warnings_occurred) ++ log_fatal("Cannot parse -I/-H/-F/-timeout/-V/-R configuration arguments !"); ++ end_parse(&cfile); ++ ++ if (timeout_arg) { ++ /* we just set the toplevel timeout, but per-client ++ * timeouts may still be at defaults. ++ */ ++ for (ip=interfaces; ip; ip = ip->next) { ++ if (ip->client->config->timeout == 60) ++ ip->client->config->timeout = timeout_arg; ++ } ++ } ++ ++ if ((dhclient_request_options != 0) && (top_level_config.requested_options != default_requested_options)) { ++ for (ip=interfaces; ip; ip = ip->next) { ++ if (ip->client->config->requested_options == default_requested_options) ++ ip->client->config->requested_options = top_level_config.requested_options; ++ } ++ } ++ ++ free(arg_conf); ++ arg_conf = NULL; ++ arg_conf_len = 0; ++ } ++ + /* Parse the lease database. */ + read_client_leases(); + +@@ -2397,7 +2647,8 @@ void make_discover (client, lease) + client -> packet.xid = random (); + client -> packet.secs = 0; /* filled in by send_discover. */ + +- if (can_receive_unicast_unconfigured (client -> interface)) ++ if ((!(bootp_broadcast_always || client->config->bootp_broadcast_always)) ++ && can_receive_unicast_unconfigured(client->interface)) + client -> packet.flags = 0; + else + client -> packet.flags = htons (BOOTP_BROADCAST); +@@ -2481,7 +2732,9 @@ void make_request (client, lease) + } else { + memset (&client -> packet.ciaddr, 0, + sizeof client -> packet.ciaddr); +- if (can_receive_unicast_unconfigured (client -> interface)) ++ if ((!(bootp_broadcast_always || ++ client ->config->bootp_broadcast_always)) && ++ can_receive_unicast_unconfigured (client -> interface)) + client -> packet.flags = 0; + else + client -> packet.flags = htons (BOOTP_BROADCAST); +@@ -2543,7 +2796,8 @@ void make_decline (client, lease) + client -> packet.hops = 0; + client -> packet.xid = client -> xid; + client -> packet.secs = 0; /* Filled in by send_request. */ +- if (can_receive_unicast_unconfigured (client -> interface)) ++ if ((!(bootp_broadcast_always || client->config-> bootp_broadcast_always)) ++ && can_receive_unicast_unconfigured (client->interface)) + client -> packet.flags = 0; + else + client -> packet.flags = htons (BOOTP_BROADCAST); +diff -up dhcp-4.2.3-P2/common/conflex.c.options dhcp-4.2.3-P2/common/conflex.c +--- dhcp-4.2.3-P2/common/conflex.c.options 2011-09-21 22:43:10.000000000 +0200 ++++ dhcp-4.2.3-P2/common/conflex.c 2012-02-13 18:21:32.335470243 +0100 +@@ -808,6 +808,8 @@ intern(char *atom, enum dhcp_token dfv) + return BALANCE; + if (!strcasecmp (atom + 1, "ound")) + return BOUND; ++ if (!strcasecmp (atom + 1, "ootp-broadcast-always")) ++ return BOOTP_BROADCAST_ALWAYS; + break; + case 'c': + if (!strcasecmp(atom + 1, "ase")) +diff -up dhcp-4.2.3-P2/includes/dhcpd.h.options dhcp-4.2.3-P2/includes/dhcpd.h +--- dhcp-4.2.3-P2/includes/dhcpd.h.options 2011-12-31 00:17:04.000000000 +0100 ++++ dhcp-4.2.3-P2/includes/dhcpd.h 2012-02-13 18:21:32.542467656 +0100 +@@ -1147,6 +1147,9 @@ struct client_config { + int do_forward_update; /* If nonzero, and if we have the + information we need, update the + A record for the address we get. */ ++ ++ int bootp_broadcast_always; /* If nonzero, always set the BOOTP_BROADCAST ++ flag in requests */ + }; + + /* Per-interface state used in the dhcp client... */ +diff -up dhcp-4.2.3-P2/includes/dhctoken.h.options dhcp-4.2.3-P2/includes/dhctoken.h +--- dhcp-4.2.3-P2/includes/dhctoken.h.options 2011-09-21 22:43:10.000000000 +0200 ++++ dhcp-4.2.3-P2/includes/dhctoken.h 2012-02-13 18:21:32.644466377 +0100 +@@ -363,7 +363,8 @@ enum dhcp_token { + INITIAL_DELAY = 664, + GETHOSTBYNAME = 665, + PRIMARY6 = 666, +- SECONDARY6 = 667 ++ SECONDARY6 = 667, ++ BOOTP_BROADCAST_ALWAYS = 668 + }; + + #define is_identifier(x) ((x) >= FIRST_TOKEN && \ diff --git a/net-misc/dhcp/files/dhcpd.conf b/net-misc/dhcp/files/dhcpd.conf2 index 1672633c8..5cd2eeca3 100644 --- a/net-misc/dhcp/files/dhcpd.conf +++ b/net-misc/dhcp/files/dhcpd.conf2 @@ -11,9 +11,8 @@ # See the pid-file-name option in the dhcpd.conf man page for details. # If you wish to run dhcpd in a chroot, uncomment the following line -# DHCPD_CHROOT="/chroot/dhcp" +# DHCPD_CHROOT="/var/lib/dhcp/chroot" -# Then run emerge dhcp --config # All file paths below are relative to the chroot. # You can specify a different chroot directory but MAKE SURE it's empty. diff --git a/net-misc/dhcp/files/dhcpd.init3 b/net-misc/dhcp/files/dhcpd.init3 deleted file mode 100755 index 3b0053142..000000000 --- a/net-misc/dhcp/files/dhcpd.init3 +++ /dev/null @@ -1,94 +0,0 @@ -#!/sbin/runscript -# Copyright 1999-2011 Gentoo Foundation -# Distributed under the terms of the GNU General Public License v2 -# $Header: /var/cvsroot/gentoo-x86/net-misc/dhcp/files/dhcpd.init3,v 1.1 2011/03/05 23:59:20 vapier Exp $ - -opts="configtest" - -DHCPD_CONF=${DHCPD_CONF:-/etc/dhcp/${SVCNAME}.conf} - -depend() { - need net - use logger dns -} - -get_var() { - sed -n 's/^[[:blank:]]\?'"$1"' "*\([^#";]\+\).*/\1/p' \ - "${DHCPD_CHROOT}/${DHCPD_CONF}" -} - -checkconfig() { - dhcpd ${DHCPD_OPTS} ${DHCPD_CHROOT:+-chroot} ${DHCPD_CHROOT} -t 1>/dev/null 2>&1 - local ret=$? - if [ $ret -ne 0 ] ; then - eerror "${SVCNAME} has detected a syntax error in your configuration files:" - dhcpd ${DHCPD_OPTS} ${DHCPD_CHROOT:+-chroot} ${DHCPD_CHROOT} -t - fi - - return $ret -} - -configtest() { - ebegin "Checking ${SVCNAME} configuration" - checkconfig - eend $? -} - -start() { - # Work out our cffile if it's in our DHCPD_OPTS - case " ${DHCPD_OPTS} " in - *" -cf "*) - DHCPD_CONF=" ${DHCPD_OPTS} " - DHCPD_CONF="${DHCPD_CONF##* -cf }" - DHCPD_CONF="${DHCPD_CONF%% *}" - ;; - *) DHCPD_OPTS="${DHCPD_OPTS} -cf ${DHCPD_CONF}" - ;; - esac - - if [ ! -f "${DHCPD_CHROOT}/${DHCPD_CONF}" ] ; then - eerror "${DHCPD_CHROOT}/${DHCPD_CONF} does not exist" - return 1 - fi - - checkconfig || return 1 - - checkpath -d -o dhcp:dhcp /var/run/dhcp /var/lib/dhcp - - local leasefile="$(get_var lease-file-name)" - leasefile="${leasefile:-/var/lib/dhcp/${SVCNAME}.leases}" - if [ ! -f "${DHCPD_CHROOT}${leasefile}" ] ; then - ebegin "Creating ${leasefile}" - touch "${DHCPD_CHROOT}${leasefile}" - chown dhcp:dhcp "${DHCPD_CHROOT}${leasefile}" - eend $? || return 1 - fi - - # Setup LD_PRELOAD so name resolution works in our chroot. - if [ -n "${DHCPD_CHROOT}" ] ; then - LD_PRELOAD="${LD_PRELOAD} /usr/lib/libresolv.so" - export LD_PRELOAD="${LD_PRELOAD} /usr/lib/libnss_dns.so" - fi - - local pidfile="$(get_var pid-file-name)" - pidfile="${pidfile:-/var/run/dhcp/${SVCNAME}.pid}" - - ebegin "Starting ${DHCPD_CHROOT:+chrooted }${SVCNAME}" - start-stop-daemon --start --exec /usr/sbin/dhcpd \ - --pidfile "${DHCPD_CHROOT}/${pidfile}" \ - -- ${DHCPD_OPTS} -q -pf "${pidfile}" -lf "${leasefile}" \ - -user dhcp -group dhcp \ - ${DHCPD_CHROOT:+-chroot} ${DHCPD_CHROOT} ${DHCPD_IFACE} - eend $? \ - && save_options chroot "${DHCPD_CHROOT}" \ - && save_options pidfile "${pidfile}" -} - -stop() { - local chroot="$(get_options chroot)" - - ebegin "Stopping ${chroot:+chrooted }${SVCNAME}" - start-stop-daemon --stop --exec /usr/sbin/dhcpd \ - --pidfile "${chroot}/$(get_options pidfile)" - eend $? -} diff --git a/net-misc/dhcp/files/dhcpd.init5 b/net-misc/dhcp/files/dhcpd.init5 new file mode 100755 index 000000000..79c7f2bf9 --- /dev/null +++ b/net-misc/dhcp/files/dhcpd.init5 @@ -0,0 +1,114 @@ +#!/sbin/runscript +# Copyright 1999-2012 Gentoo Foundation +# Distributed under the terms of the GNU General Public License v2 +# $Header: /var/cvsroot/gentoo-x86/net-misc/dhcp/files/dhcpd.init5,v 1.1 2011/12/04 22:45:07 vapier Exp $ + +extra_commands="configtest" + +: ${DHCPD_CONF:=/etc/dhcp/${SVCNAME}.conf} + +depend() { + need net + use logger dns +} + +get_var() { + local var="$(sed -n 's/^[[:blank:]]\?'"$1"' "*\([^#";]\+\).*/\1/p' "${chroot}${DHCPD_CONF}")" + echo ${var:-$2} +} + +checkconfig() { + set -- ${DHCPD_OPTS} ${chroot:+-chroot} ${chroot} -t + + dhcpd "$@" 1>/dev/null 2>&1 + local ret=$? + if [ ${ret} -ne 0 ] ; then + eerror "${SVCNAME} has detected a syntax error in your configuration files:" + dhcpd "$@" + fi + + return ${ret} +} + +configtest() { + local chroot=${DHCPD_CHROOT%/} + + ebegin "Checking ${SVCNAME} configuration" + checkconfig + eend $? +} + +start() { + local chroot=${DHCPD_CHROOT%/} + + # Work out our cffile if it's in our DHCPD_OPTS + case " ${DHCPD_OPTS} " in + *" -cf "*) + DHCPD_CONF=" ${DHCPD_OPTS} " + DHCPD_CONF="${DHCPD_CONF##* -cf }" + DHCPD_CONF="${DHCPD_CONF%% *}" + ;; + *) DHCPD_OPTS="${DHCPD_OPTS} -cf ${DHCPD_CONF}" + ;; + esac + + if [ -n "${chroot}" ] ; then + # the config test want's these to exist + mkdir -p \ + "${chroot}"/var/run/dhcp \ + "${chroot}"/var/lib/dhcp \ + "${chroot}"/etc/dhcp + fi + + # see comment in get_var() above + if [ ! -f "${chroot}${DHCPD_CONF}" ] ; then + eerror "${chroot}${DHCPD_CONF} does not exist" + return 1 + fi + + checkconfig || return 1 + + checkpath -d -o dhcp:dhcp "${chroot}"/var/run/dhcp "${chroot}"/var/lib/dhcp + + local leasefile="$(get_var lease-file-name /var/lib/dhcp/${SVCNAME}.leases)" + checkpath -f -o dhcp:dhcp "${chroot}${leasefile}" + + # Setup LD_PRELOAD so name resolution works in our chroot. + if [ -n "${chroot}" ] ; then + checkpath -d -o root:root -m 755 "${chroot}"/dev "${chroot}"/etc "${chroot}"/proc + cp -pP /etc/localtime /etc/resolv.conf "${chroot}"/etc/ + export LD_PRELOAD="${LD_PRELOAD} libresolv.so libnss_dns.so" + if ! mountinfo -q "${chroot}/proc" ; then + mount --bind /proc "${chroot}/proc" + fi + fi + + local pidfile="$(get_var pid-file-name /var/run/dhcp/${SVCNAME}.pid)" + + ebegin "Starting ${chroot:+chrooted }${SVCNAME}" + start-stop-daemon --start --exec /usr/sbin/dhcpd \ + --pidfile "${chroot}/${pidfile}" \ + -- ${DHCPD_OPTS} -q -pf "${pidfile}" -lf "${leasefile}" \ + -user dhcp -group dhcp \ + ${chroot:+-chroot} ${chroot} ${DHCPD_IFACE} + eend $? \ + && save_options chroot "${chroot}" \ + && save_options pidfile "${pidfile}" +} + +stop() { + local chroot="$(get_options chroot)" + + ebegin "Stopping ${chroot:+chrooted }${SVCNAME}" + start-stop-daemon --stop --exec /usr/sbin/dhcpd \ + --pidfile "${chroot}/$(get_options pidfile)" + res=$? + + if [ ${res} -eq 0 ] && [ -n "${chroot}" ] ; then + if mountinfo -q "${chroot}/proc" ; then + umount "${chroot}/proc" + fi + fi + + eend $res +} diff --git a/net-misc/dhcp/files/dhcrelay.init b/net-misc/dhcp/files/dhcrelay.init deleted file mode 100644 index 2f92956be..000000000 --- a/net-misc/dhcp/files/dhcrelay.init +++ /dev/null @@ -1,32 +0,0 @@ -#!/sbin/runscript -# Copyright 1999-2004 Gentoo Foundation -# Distributed under the terms of the GNU General Public License v2 -# $Header: /var/cvsroot/gentoo-x86/net-misc/dhcp/files/dhcrelay.init,v 1.2 2007/03/22 15:36:59 uberlord Exp $ - -depend() { - need net - use logger -} - -start() { - if [ -z "${DHCRELAY_SERVERS}" ]; then - eerror "No DHCRELAY_SERVERS specified in /etc/conf.d/dhcrelay" - return 1 - fi - - local IFACES= i= - for i in ${IFACE} ; do - IFACES="${IFACES} -i ${i}" - done - - ebegin "Starting dhcrelay" - start-stop-daemon --start --exec /usr/sbin/dhcrelay \ - -- -q ${IFACES} ${DHCRELAY_OPTS} ${DHCRELAY_SERVERS} - eend $? -} - -stop() { - ebegin "Stopping dhcrelay" - start-stop-daemon --stop --pidfile /var/run/dhcrelay.pid - eend $? -} diff --git a/net-misc/dhcp/metadata.xml b/net-misc/dhcp/metadata.xml index de6dcfd48..667e06d65 100644 --- a/net-misc/dhcp/metadata.xml +++ b/net-misc/dhcp/metadata.xml @@ -5,8 +5,7 @@ <longdescription lang="en">The ISC DHCP client/server package.</longdescription> <longdescription lang="ja">ISC DHCP クライアント/サーバ・パッケージです。</longdescription> <use> - <flag name="client">Install the dhclient program</flag> - <flag name="server">Install the dhcpd and dhcrelay programs</flag> - <flag name="infiniband">Enable ipoib support</flag> + <flag name='client'>Install the dhclient program</flag> + <flag name='server'>Install the dhcpd and dhcrelay programs</flag> </use> </pkgmetadata> diff --git a/sci-biology/mosaik/ChangeLog b/sci-biology/mosaik/ChangeLog new file mode 100644 index 000000000..2b974bdab --- /dev/null +++ b/sci-biology/mosaik/ChangeLog @@ -0,0 +1,27 @@ +# ChangeLog for sci-biology/mosaik +# Copyright 1999-2012 Gentoo Foundation; Distributed under the GPL v2 +# $Header: $ + + 16 Mar 2012; Martin Mokrejs <mmokrejs@fold.natur.cuni.cz> + mosaik-2.1.33.ebuild, mosaik-9999.ebuild: + sci-biology/mosaik: masking mosaik-2.1.33 mosaik-9999 + +*mosaik-9999 (15 Mar 2012) + + 15 Mar 2012; Martin Mokrejs <mmokrejs@fold.natur.cuni.cz> + mosaik-2.1.33.ebuild, +mosaik-9999.ebuild: + version bump for 2.1.33 and GIT HEAD, neither compiles so far; upstream + re-contacted mosaik-2.1.33.ebuild mosaik-9999.ebuild + +*mosaik-2.1.33 (15 Mar 2012) +*mosaik-1.1.0021 (15 Mar 2012) + + 15 Mar 2012; Martin Mokrejs <mmokrejs@fold.natur.cuni.cz> + +mosaik-1.1.0021.ebuild, +mosaik-2.1.33.ebuild: + version bump, added the pdf documentation to SRC_URI, the compile process + leaks through many 'Fastq.cpp:224: error: conditional expression between + distinct pointer types 'gzFile_s*' and 'FILE*' lacks a cast' messages in + Fastq.cpp:224, Fastq.cpp:226, Fasta.cpp:258, Fasta.cpp:260, Fasta.cpp:266, + Fasta.cpp:268, but the package itself installs and executes at least + mosaik-1.1.0021.ebuild + diff --git a/sci-biology/mosaik/Manifest b/sci-biology/mosaik/Manifest new file mode 100644 index 000000000..2f9225d43 --- /dev/null +++ b/sci-biology/mosaik/Manifest @@ -0,0 +1,3 @@ +DIST MOSAIK-2.1.33-source.tar 3911680 SHA256 210764cddbd8a3866976f065b912eb30fcd94d681901be93b42724708b86e2aa SHA512 9eeda8698bc929f95ff16b4e611174f631a5affb8712d582eda7e02a45f27ea8a50ffc56c6595f837af342f266a5bfe44ca1eb006d301caef671e01ed794ba20 WHIRLPOOL 89b65f5ff47dbce615f37e4ae2d3d207cde1482f3e9d4cb280cca55c399784eeb272d3af490327b3c1ac348f7d6bdc1305df67a726acea7b9e2502df02848136 +DIST Mosaik-1.0-Documentation.pdf 10589 SHA256 470e2a534668a2a8744df7b00b9b8af5a6966d2df70f0ab1a4b271bdddadae9c SHA512 b2febce1e85eea89e5ff5d9f1aae351c59574314f361b66503ec473da7641adc083e52ee739c04abfe5b074fd57271f2ca20bea215982ee3ecfce073bbfd7b38 WHIRLPOOL 764a984408590417345daf624cda3dfb5df4255f18efc8f8cfbfc61885ed14be9863eef886dacfe90562469cd6af50220c0a776653a429b888eedac86270dc06 +DIST Mosaik-1.1.0021-source.tar.bz2 7055319 SHA256 c1b7215097466b8ddfdb3d1c41ea6a46ef6d7dfd28446efc7ad8957622ff9265 SHA512 73e7ab5352468c69788008ff9807ef9de89c850e3ea08445991352d8b5e7a1e9471190429585bab28b0fe56f7dfbfd2c6027bcf0d2a78b25dac654d195acb816 WHIRLPOOL 948901d2b4437b22262b03306249d1e2986af083c1f5ab8effa07b62204fe0d8fee606f6045fafee46714bce8d0f5cf62cec3b43a757eebcc6cbad3c2904bcf5 diff --git a/sci-biology/mosaik/metadata.xml b/sci-biology/mosaik/metadata.xml new file mode 100644 index 000000000..3302123e5 --- /dev/null +++ b/sci-biology/mosaik/metadata.xml @@ -0,0 +1,9 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!DOCTYPE pkgmetadata SYSTEM "http://www.gentoo.org/dtd/metadata.dtd"> +<pkgmetadata> + <maintainer> + <email>weaver@gentoo.org</email> + <name>Andrey Kislyuk</name> + </maintainer> + <herd>sci-biology</herd> +</pkgmetadata> diff --git a/sci-biology/mosaik/mosaik-1.1.0021.ebuild b/sci-biology/mosaik/mosaik-1.1.0021.ebuild new file mode 100644 index 000000000..932c5d0d8 --- /dev/null +++ b/sci-biology/mosaik/mosaik-1.1.0021.ebuild @@ -0,0 +1,40 @@ +# Copyright 1999-2012 Gentoo Foundation +# Distributed under the terms of the GNU General Public License v2 +# $Header: /var/cvsroot/gentoo-x86/sci-biology/mosaik/mosaik-1.0.1388.ebuild,v 1.1 2010/04/11 17:29:40 weaver Exp $ + +EAPI="2" + +DESCRIPTION="A reference-guided aligner for next-generation sequencing technologies" +HOMEPAGE="http://code.google.com/p/mosaik-aligner/" +SRC_URI="http://mosaik-aligner.googlecode.com/files/Mosaik-${PV}-source.tar.bz2 + http://code.google.com/p/mosaik-aligner/downloads/detail?name=Mosaik%201.0%20Documentation.pdf -> Mosaik-1.0-Documentation.pdf" + +LICENSE="GPL-2" +SLOT="0" +IUSE="" +KEYWORDS="~amd64 ~x86" + +DEPEND="dev-lang/swig" +RDEPEND="" + +S="${WORKDIR}/mosaik-aligner" + +src_prepare() { + sed -i 's/-static//' src/includes/linux.inc || die +} + +src_compile() { + emake -C src || die + emake -C MosaikTools/c++ || die + export PERL_CORE_DIR=/usr/lib64/perl5/5.12.4/x86_64-linux/CORE + emake -C MosaikTools/perl PERL_CORE_DIR=/usr/lib64/perl5/5.12.4/x86_64-linux/CORE || die +} + +src_install() { + dobin bin/* || die + + insinto /usr/share/${PN} + doins -r MosaikTools || die + + dodoc README "${DISTDIR}"/Mosaik-1.0-Documentation.pdf +} diff --git a/sci-biology/mosaik/mosaik-2.1.33.ebuild b/sci-biology/mosaik/mosaik-2.1.33.ebuild new file mode 100644 index 000000000..aaed1229e --- /dev/null +++ b/sci-biology/mosaik/mosaik-2.1.33.ebuild @@ -0,0 +1,46 @@ +# Copyright 1999-2012 Gentoo Foundation +# Distributed under the terms of the GNU General Public License v2 +# $Header: /var/cvsroot/gentoo-x86/sci-biology/mosaik/mosaik-1.0.1388.ebuild,v 1.1 2010/04/11 17:29:40 weaver Exp $ + +EAPI="2" + +if [ "$PV" == "9999" ]; then + inherit git-2 +fi + +DESCRIPTION="A reference-guided aligner for next-generation sequencing technologies" +HOMEPAGE="http://code.google.com/p/mosaik-aligner/" + +if [ "$PV" == "9999" ]; then + EGIT_REPO_URI="http://code.google.com/p/mosaik-aligner" + KEYWORDS="" +else + SRC_URI="http://mosaik-aligner.googlecode.com/files/MOSAIK-${PV}-source.tar + http://code.google.com/p/mosaik-aligner/downloads/detail?name=Mosaik%201.0%20Documentation.pdf -> Mosaik-1.0-Documentation.pdf" + #KEYWORDS="~amd64 ~x86" + KEYWORDS="" +fi + +LICENSE="GPL-2 || ( MIT )" +SLOT="0" +IUSE="" + +DEPEND="" +RDEPEND="" + +if [ ! "$PV" == "9999" ]; then + S="${WORKDIR}/MOSAIK-${PV}-source" +fi + +src_compile() { + if [ "$PV" == "9999" ]; then + cd src || die + fi + emake || die +} + +src_install() { + dobin "${WORKDIR}"/bin/* || die + + dodoc README "${DISTDIR}"/Mosaik-1.0-Documentation.pdf +} diff --git a/sci-biology/mosaik/mosaik-9999.ebuild b/sci-biology/mosaik/mosaik-9999.ebuild new file mode 100644 index 000000000..aaed1229e --- /dev/null +++ b/sci-biology/mosaik/mosaik-9999.ebuild @@ -0,0 +1,46 @@ +# Copyright 1999-2012 Gentoo Foundation +# Distributed under the terms of the GNU General Public License v2 +# $Header: /var/cvsroot/gentoo-x86/sci-biology/mosaik/mosaik-1.0.1388.ebuild,v 1.1 2010/04/11 17:29:40 weaver Exp $ + +EAPI="2" + +if [ "$PV" == "9999" ]; then + inherit git-2 +fi + +DESCRIPTION="A reference-guided aligner for next-generation sequencing technologies" +HOMEPAGE="http://code.google.com/p/mosaik-aligner/" + +if [ "$PV" == "9999" ]; then + EGIT_REPO_URI="http://code.google.com/p/mosaik-aligner" + KEYWORDS="" +else + SRC_URI="http://mosaik-aligner.googlecode.com/files/MOSAIK-${PV}-source.tar + http://code.google.com/p/mosaik-aligner/downloads/detail?name=Mosaik%201.0%20Documentation.pdf -> Mosaik-1.0-Documentation.pdf" + #KEYWORDS="~amd64 ~x86" + KEYWORDS="" +fi + +LICENSE="GPL-2 || ( MIT )" +SLOT="0" +IUSE="" + +DEPEND="" +RDEPEND="" + +if [ ! "$PV" == "9999" ]; then + S="${WORKDIR}/MOSAIK-${PV}-source" +fi + +src_compile() { + if [ "$PV" == "9999" ]; then + cd src || die + fi + emake || die +} + +src_install() { + dobin "${WORKDIR}"/bin/* || die + + dodoc README "${DISTDIR}"/Mosaik-1.0-Documentation.pdf +} diff --git a/sci-biology/sra_sdk/ChangeLog b/sci-biology/sra_sdk/ChangeLog index 1a3a88468..6965e3d02 100644 --- a/sci-biology/sra_sdk/ChangeLog +++ b/sci-biology/sra_sdk/ChangeLog @@ -2,6 +2,15 @@ # Copyright 1999-2012 Gentoo Foundation; Distributed under the GPL v2 # $Header: $ + 15 Mar 2012; Martin Mokrejs <mmokrejs@fold.natur.cuni.cz> + sra_sdk-2.1.9.ebuild: + added missing insinto sra_sdk-2.1.9.ebuild + + 15 Mar 2012; Martin Mokrejs <mmokrejs@fold.natur.cuni.cz> + sra_sdk-2.1.9.ebuild: + use EAPI=4 hoping it will handle symlinks in bin/ and lib/ directories + properly (but it does not, bug #408199 sra_sdk-2.1.9.ebuild + *sra_sdk-2.1.6 (17 Feb 2012) 17 Feb 2012; Martin Mokrejs <mmokrejs@fold.natur.cuni.cz> diff --git a/sci-biology/sra_sdk/sra_sdk-2.1.9.ebuild b/sci-biology/sra_sdk/sra_sdk-2.1.9.ebuild index cf9c639a0..bfbb5772c 100644 --- a/sci-biology/sra_sdk/sra_sdk-2.1.9.ebuild +++ b/sci-biology/sra_sdk/sra_sdk-2.1.9.ebuild @@ -2,7 +2,7 @@ # Distributed under the terms of the GNU General Public License v2 # $Header: $ -EAPI=3 +EAPI=4 inherit eutils @@ -72,14 +72,29 @@ src_install(){ mkdir "${D}"/usr/bin mkdir -p "${D}"/usr/lib/ncbi mkdir -p "${D}"/usr/ncbi/schema - # dobin "${WORKDIR}"/objdir/linux/rel/gcc/"${builddir}"/bin/* - for f in "${WORKDIR}"/objdir/linux/rel/gcc/"${builddir}"/bin/*; do cp --preserve=links "$f" "${D}"/usr/bin || die "copy failed" ; done - dolib "${WORKDIR}"/objdir/linux/rel/gcc/"${builddir}"/lib/* + + # BUG: neither 'doins -r' nor cp --preserve=all work + #insinto /usr/bin + #doins -r "${WORKDIR}"/objdir/linux/rel/gcc/"${builddir}"/bin/* + for f in "${WORKDIR}"/objdir/linux/rel/gcc/"${builddir}"/bin/*; do cp --preserve=all "$f" "${D}"/usr/bin/ || die "$f copying failed" ; done + + # install the main libs and the ncbi/vdb-copy.kfg file insinto /usr/lib/ncbi doins "${WORKDIR}"/objdir/linux/rel/gcc/"${builddir}"/lib/ncbi/* + # zap the subdirectory so that copying below does not fail + rm -rf "${WORKDIR}"/objdir/linux/rel/gcc/"${builddir}"/lib/ncbi + + + + # BUG: neither the dolib nor cp --preserve=all work + #insinto /usr/lib64 + #dolib "${WORKDIR}"/objdir/linux/rel/gcc/"${builddir}"/lib/* + mkdir -p "${D}"/usr/lib64 + for f in "${WORKDIR}"/objdir/linux/rel/gcc/"${builddir}"/lib/*; do cp --preserve=all "$f" "${D}"/usr/lib64/ || die "$f copying failed" ; done + insinto /usr/ncbi/schema doins "${W}"/interfaces/align/*.vschema doins "${W}"/interfaces/sra/*.vschema diff --git a/sci-libs/gotoblas2/ChangeLog b/sci-libs/gotoblas2/ChangeLog index 260bb6ba0..77c5817c8 100644 --- a/sci-libs/gotoblas2/ChangeLog +++ b/sci-libs/gotoblas2/ChangeLog @@ -1,7 +1,15 @@ # ChangeLog for sci-libs/gotoblas2 -# Copyright 1999-2011 Gentoo Foundation; Distributed under the GPL v2 +# Copyright 1999-2012 Gentoo Foundation; Distributed under the GPL v2 # $Header: $ + 15 Mar 2012; François Bissey <francois.bissey@canterbury.ac.nz> + gotoblas2-1.13.ebuild, files/gotoblas2-1.13-sharedlibs.patch: + More OS X fixes + + 15 Mar 2012; François Bissey <francois.bissey@canterbury.ac.nz> + gotoblas2-1.13.ebuild: + add *-macos prefix support mirroring openblas + 22 Aug 2011; Sébastien Fabbro <bicatali@gentoo.org> +gotoblas2-1.13.ebuild, +files/gotoblas2-1.13-aliasing.patch, +files/gotoblas2-1.13-dynamic.patch, +files/gotoblas2-1.13-fcheck.patch, +files/gotoblas2-1.13-sharedlibs.patch, diff --git a/sci-libs/gotoblas2/Manifest b/sci-libs/gotoblas2/Manifest index 37a283dcc..da73bdf35 100644 --- a/sci-libs/gotoblas2/Manifest +++ b/sci-libs/gotoblas2/Manifest @@ -1 +1 @@ -DIST GotoBLAS2-1.13_bsd.tar.gz 3165294 RMD160 64a416b506b45ec4df33d9d7e9ec893585b794b2 SHA1 0e1a046bb51e50cf8cff5d1732157a083a620e64 SHA256 7c3eab57ef5ad5c42f73adade833a531591e78967bbe9fc6db31310d73fa2d86 +DIST GotoBLAS2-1.13_bsd.tar.gz 3165294 SHA256 7c3eab57ef5ad5c42f73adade833a531591e78967bbe9fc6db31310d73fa2d86 SHA512 086e1fd8c37448c1406814af2ad55bfc19dd65dcd5bff69eae91ba3b1bf14f9225e73e20b23602b259ae1e22c84d954688ef1eefee34668fe77421f5f05c0ba0 WHIRLPOOL be00f56b5c55322191ee9d01926da485be2813fb15a155740a86382a1e2fe9ac39a22af61584b586bd409be1bf813cb2bde69c5e9385499b2272fe2d539d7c95 diff --git a/sci-libs/gotoblas2/files/gotoblas2-1.13-sharedlibs.patch b/sci-libs/gotoblas2/files/gotoblas2-1.13-sharedlibs.patch index 3ebe3076a..862a00c24 100644 --- a/sci-libs/gotoblas2/files/gotoblas2-1.13-sharedlibs.patch +++ b/sci-libs/gotoblas2/files/gotoblas2-1.13-sharedlibs.patch @@ -1,5 +1,14 @@ ---- exports/Makefile.orig 2010-11-12 05:30:06.000000000 +0000 -+++ exports/Makefile 2010-11-12 06:33:41.000000000 +0000 +--- exports/Makefile.orig 2010-02-06 05:01:00.000000000 +1300 ++++ exports/Makefile 2012-03-16 11:43:30.028487068 +1300 +@@ -84,7 +84,7 @@ + perl ./gensymbol win2khpl $(ARCH) dummy $(EXPRECISION) $(NO_CBLAS) > $(@F) + + $(LIBDYNNAME) : ../$(LIBNAME) osx.def +- $(PREFIX)gcc $(CFLAGS) -all_load -dynamiclib -o $(LIBDYNNAME) $< -Wl,-exported_symbols_list,osx.def $(FEXTRALIB) ++ $(PREFIX)gcc $(CFLAGS) -all_load -dynamiclib -o ../$(LIBDYNNAME) $< -Wl,-exported_symbols_list,osx.def $(FEXTRALIB) + + symbol.$(SUFFIX) : symbol.S + $(CC) $(CFLAGS) -c -o $(@F) $^ @@ -97,10 +97,10 @@ so : ../$(LIBSONAME) diff --git a/sci-libs/gotoblas2/gotoblas2-1.13.ebuild b/sci-libs/gotoblas2/gotoblas2-1.13.ebuild index b90053600..6d1dcb055 100644 --- a/sci-libs/gotoblas2/gotoblas2-1.13.ebuild +++ b/sci-libs/gotoblas2/gotoblas2-1.13.ebuild @@ -1,10 +1,10 @@ -# Copyright 1999-2011 Gentoo Foundation +# Copyright 1999-2012 Gentoo Foundation # Distributed under the terms of the GNU General Public License v2 # $Header: $ EAPI=4 -inherit eutils toolchain-funcs alternatives-2 +inherit eutils toolchain-funcs alternatives-2 multilib MYPN="GotoBLAS2" MYP="${MYPN}-${PV}_bsd" @@ -16,7 +16,7 @@ SRC_URI="http://dev.gentoo.org/~bicatali/${MYP}.tar.gz" LICENSE="BSD" SLOT="0" -KEYWORDS="~amd64 ~x86" +KEYWORDS="~amd64 ~x86 ~x86-macos ~ppc-macos ~x64-macos" IUSE="+incblas int64 dynamic openmp static-libs threads" @@ -63,7 +63,7 @@ src_configure() { src_compile() { mkdir solibs - emake libs shared && mv *.so solibs/ + emake libs shared && mv *$(get_libname) solibs/ use static-libs && emake clean && emake libs NEED_PIC= } @@ -81,7 +81,7 @@ src_install() { profname=${profname}-openmp fi - dolib.so solibs/lib*.so + dolib.so solibs/lib*$(get_libname) use static-libs && dolib.a lib*.a # create pkg-config file and associated eselect file @@ -111,4 +111,13 @@ src_install() { insinto /usr/$(get_libdir)/pkgconfig doins ${profname}.pc dodoc 01Readme.txt 03FAQ.txt 05LargePage 06WeirdPerformance + + if [[ ${CHOST} == *-darwin* ]] ; then + cd "${ED}"/usr/$(get_libdir) + for d in *.dylib ; do + ebegin "correcting install_name of ${d}" + install_name_tool -id "${EPREFIX}/usr/$(get_libdir)/${d}" "${d}" + eend $? + done + fi } diff --git a/sci-libs/openblas/ChangeLog b/sci-libs/openblas/ChangeLog index 8c45990d1..34d9ae2b4 100644 --- a/sci-libs/openblas/ChangeLog +++ b/sci-libs/openblas/ChangeLog @@ -1,7 +1,19 @@ # ChangeLog for sci-libs/openblas -# Copyright 1999-2011 Gentoo Foundation; Distributed under the GPL v2 +# Copyright 1999-2012 Gentoo Foundation; Distributed under the GPL v2 # $Header: $ + 15 Mar 2012; François Bissey <francois.bissey@canterbury.ac.nz> + openblas-0.1_alpha2.ebuild, openblas-9999.ebuild: + correct typo + + 15 Mar 2012; François Bissey <francois.bissey@canterbury.ac.nz> + openblas-0.1_alpha2.ebuild, openblas-9999.ebuild: + use multilib eclass + + 15 Mar 2012; François Bissey <francois.bissey@canterbury.ac.nz> + openblas-0.1_alpha2.ebuild, openblas-9999.ebuild: + Add *-macos prefix support + 16 Aug 2011; François Bissey <francois.bissey@canterbury.ac.nz> openblas-0.1_alpha2.ebuild, openblas-9999.ebuild: Include extra line in pkgconfig for incblas before installing it - not after. diff --git a/sci-libs/openblas/openblas-0.1_alpha2.ebuild b/sci-libs/openblas/openblas-0.1_alpha2.ebuild index d727f9333..3ac72d451 100644 --- a/sci-libs/openblas/openblas-0.1_alpha2.ebuild +++ b/sci-libs/openblas/openblas-0.1_alpha2.ebuild @@ -1,10 +1,10 @@ -# Copyright 1999-2011 Gentoo Foundation +# Copyright 1999-2012 Gentoo Foundation # Distributed under the terms of the GNU General Public License v2 # $Header: $ EAPI=4 -inherit eutils toolchain-funcs alternatives-2 git-2 +inherit eutils toolchain-funcs alternatives-2 git-2 multilib DESCRIPTION="Optimized BLAS library based on GotoBLAS2" HOMEPAGE="http://xianyi.github.com/OpenBLAS/" @@ -13,7 +13,7 @@ EGIT_COMMIT="v0.1alpha2.2" LICENSE="BSD" SLOT="0" -KEYWORDS="~amd64 ~x86" +KEYWORDS="~amd64 ~x86 ~x86-macos ~ppc-macos ~x64-macos" IUSE="+incblas int64 dynamic openmp static-libs threads" @@ -66,7 +66,7 @@ src_configure() { src_compile() { mkdir solibs - emake libs shared && mv *.so solibs/ + emake libs shared && mv *$(get_libname) solibs/ use static-libs && emake clean && emake libs NEED_PIC= } @@ -84,7 +84,7 @@ src_install() { profname=${profname}-openmp fi - dolib.so solibs/lib*.so + dolib.so solibs/lib*$(get_libname) use static-libs && dolib.a lib*.a # create pkg-config file and associated eselect file @@ -114,4 +114,13 @@ src_install() { insinto /usr/$(get_libdir)/pkgconfig doins ${profname}.pc dodoc GotoBLAS_{01Readme,03FAQ,04FAQ,05LargePage,06WeirdPerformance}.txt + + if [[ ${CHOST} == *-darwin* ]] ; then + cd "${ED}"/usr/$(get_libdir) + for d in *.dylib ; do + ebegin "correcting install_name of ${d}" + install_name_tool -id "${EPREFIX}/usr/$(get_libdir)/${d}" "${d}" + eend $? + done + fi } diff --git a/sci-libs/openblas/openblas-9999.ebuild b/sci-libs/openblas/openblas-9999.ebuild index 5fd74db62..6484a1e57 100644 --- a/sci-libs/openblas/openblas-9999.ebuild +++ b/sci-libs/openblas/openblas-9999.ebuild @@ -1,10 +1,10 @@ -# Copyright 1999-2011 Gentoo Foundation +# Copyright 1999-2012 Gentoo Foundation # Distributed under the terms of the GNU General Public License v2 # $Header: $ EAPI=4 -inherit eutils toolchain-funcs alternatives-2 git-2 +inherit eutils toolchain-funcs alternatives-2 git-2 multilib DESCRIPTION="Optimized BLAS library based on GotoBLAS2" HOMEPAGE="http://xianyi.github.com/OpenBLAS/" @@ -60,7 +60,7 @@ src_configure() { src_compile() { mkdir solibs - emake libs shared && mv *.so solibs/ + emake libs shared && mv *$(get_libname) solibs/ use static-libs && emake clean && emake libs NEED_PIC= } @@ -78,7 +78,7 @@ src_install() { profname=${profname}-openmp fi - dolib.so solibs/lib*.so + dolib.so solibs/lib*$(get_libname) use static-libs && dolib.a lib*.a # create pkg-config file and associated eselect file @@ -109,4 +109,13 @@ src_install() { "/usr/include/cblas.h" "${PN}/cblas.h" fi dodoc GotoBLAS_{01Readme,03FAQ,04FAQ,05LargePage,06WeirdPerformance}.txt + + if [[ ${CHOST} == *-darwin* ]] ; then + cd "${ED}"/usr/$(get_libdir) + for d in *.dylib ; do + ebegin "correcting install_name of ${d}" + install_name_tool -id "${EPREFIX}/usr/$(get_libdir)/${d}" "${d}" + eend $? + done + fi } diff --git a/sci-mathematics/polybori/ChangeLog b/sci-mathematics/polybori/ChangeLog deleted file mode 100644 index 323118561..000000000 --- a/sci-mathematics/polybori/ChangeLog +++ /dev/null @@ -1,21 +0,0 @@ -# ChangeLog for sci-mathematics/polybori -# Copyright 1999-2011 Gentoo Foundation; Distributed under the GPL v2 -# $Header: $ - -*polybori-0.6.5-r2 (11 Jan 2011) - - 11 Jan 2011; François Bissey <f.r.bissey@massey.ac.nz> - -polybori-0.6.3.ebuild, +files/polybori-0.6.4-save-flags.patch, - +polybori-0.6.5-r2.ebuild, +files/polybori-0.6.5-fix-another-SIGSEGV.patch, - +files/polybori-0.6.5-fix-double-free-error.patch: - bump to 0.6.5-r2 from s-o-g - - 29 Jun 2010; Justin Lecher <jlec@gentoo.org> polybori-0.6.3.ebuild: - Python ABI fixes - -*polybori-0.6.3 (22 Nov 2009) - - 22 Nov 2009; François Bissey <f.r.bissey@massey.ac.nz> - +polybori-0.6.3.ebuild, +files/PyPolyBoRi.py, +metadata.xml: - Initial import in the overlay - diff --git a/sci-mathematics/polybori/Manifest b/sci-mathematics/polybori/Manifest deleted file mode 100644 index f48524c07..000000000 --- a/sci-mathematics/polybori/Manifest +++ /dev/null @@ -1 +0,0 @@ -DIST polybori-0.6.5.tar.gz 2329636 RMD160 a244e022d0f21fb50e0478311a698c913b516350 SHA1 1ac8b77838944c9c3508f4611633783c5391ef29 SHA256 88546d765c0fc93db87326f7d0daba82651f2f5bfcc7dd002d425ab1d66ff5fd diff --git a/sci-mathematics/polybori/files/PyPolyBoRi.py b/sci-mathematics/polybori/files/PyPolyBoRi.py deleted file mode 100644 index d1008cb5d..000000000 --- a/sci-mathematics/polybori/files/PyPolyBoRi.py +++ /dev/null @@ -1,22 +0,0 @@ -from sage import all -from sage.rings.polynomial.pbori import * - -def global_ring(): - return get_cring() - -Polynomial = PolynomialFactory() - -Monomial = MonomialFactory() - -class OrderCode: - pass - -OrderCode.__dict__ = order_dict - -Variable = VariableFactory() - -def Ring(n, order='lp'): - return BooleanPolynomialRing(n, 'x', order=order) - -BoolePolynomialVector = BooleanPolynomialVector - diff --git a/sci-mathematics/polybori/files/polybori-0.6.4-save-flags.patch b/sci-mathematics/polybori/files/polybori-0.6.4-save-flags.patch deleted file mode 100644 index 92474dc1e..000000000 --- a/sci-mathematics/polybori/files/polybori-0.6.4-save-flags.patch +++ /dev/null @@ -1,14 +0,0 @@ ---- src/polybori-0.6/SConstruct.orig 2009-10-28 10:47:24.000000000 +0000 -+++ src/polybori-0.6/SConstruct 2010-01-23 09:25:21.106548437 +0000 -@@ -1232,6 +1232,11 @@ - env.AlwaysBuild(ipboribin) - env.Alias('install', ipboribin) - -+ # we dump the flags for reuse by Sage -+ if not path.exists(InstPath()): -+ Execute(Mkdir(InstPath())) -+ opts.Save(InstPath("flags.conf"), env) -+ - env.Alias('prepare-devel', devellibs + readabledevellibs) - env.Alias('prepare-install', [pyroot, DocPath()]) - diff --git a/sci-mathematics/polybori/files/polybori-0.6.5-fix-another-SIGSEGV.patch b/sci-mathematics/polybori/files/polybori-0.6.5-fix-another-SIGSEGV.patch deleted file mode 100644 index 39209cdf5..000000000 --- a/sci-mathematics/polybori/files/polybori-0.6.5-fix-another-SIGSEGV.patch +++ /dev/null @@ -1,35 +0,0 @@ ---- groebner/src/nf.cc.orig 2010-01-29 09:02:02.000000000 +0000 -+++ groebner/src/nf.cc 2010-09-10 07:06:40.136564234 +0000 -@@ -1890,6 +1890,15 @@ - - } - }; -+ -+class PolyMonomialPairComparerLess{ -+public: -+ bool operator() (const pair<Polynomial,Monomial>& a,const pair<Polynomial, Monomial>& b){ -+ return a.second < b.second; -+ -+ } -+}; -+ - //typedef std::map<int,Monomial> to_term_map_type; - typedef Exponent::idx_map_type from_term_map_type; - void setup_order_tables(vector<Exponent>& terms_as_exp,vector<Exponent>& terms_as_exp_lex,std::vector<int>& ring_order2lex,vector<int>& lex_order2ring,from_term_map_type& from_term_map, const MonomialSet& terms){ -@@ -2093,7 +2102,7 @@ - if LIKELY(!(polys[i].isZero())) - polys_lm.push_back(pair < Polynomial, Monomial > (polys[i], polys[i].lead())); - } --std:: sort(polys_lm.begin(), polys_lm.end(), PolyMonomialPairComparerLexLess()); -+std:: sort(polys_lm.begin(), polys_lm.end(), PolyMonomialPairComparerLess()); - polys.clear(); - if UNLIKELY(polys_lm.size() == 0) - return; -@@ -2126,6 +2135,7 @@ - } - } - polys.clear(); -+ std::reverse(polys_triangular.begin(), polys_triangular.end()); - terms_unique = add_up_generic(terms_unique_vec, terms.ring().zero()); - assert(terms_step1.diff(terms).emptiness()); - assert(polys_triangular.size()!=0); diff --git a/sci-mathematics/polybori/files/polybori-0.6.5-fix-double-free-error.patch b/sci-mathematics/polybori/files/polybori-0.6.5-fix-double-free-error.patch deleted file mode 100644 index be18ca7fa..000000000 --- a/sci-mathematics/polybori/files/polybori-0.6.5-fix-double-free-error.patch +++ /dev/null @@ -1,66 +0,0 @@ ---- polybori/include/BooleEnv.h.orig 2010-01-29 09:02:02.000000000 +0000 -+++ polybori/include/BooleEnv.h 2010-08-21 07:54:32.094170620 +0000 -@@ -37,7 +37,7 @@ - - // Obey stricter dependence of Sun Studio compiler - // todo: resolve dependency --#if defined(__SUNPRO_C) || defined(__SUNPRO_CC) -+#if 1 // defined(__SUNPRO_C) || defined(__SUNPRO_CC) - # define PBORI_ENV_RING_NOTINLINED - #endif - -@@ -45,7 +45,6 @@ - - - class BoolePolyRing; --extern BoolePolyRing active_ring; - class CDynamicOrderBase; - - /** @class BooleEnv -@@ -122,6 +121,7 @@ - static ring_type& ring(); - #else - static ring_type& ring() { -+ static BooleEnv::ring_type active_ring(1000, CTypes::lp, false); - return active_ring; - } - #endif ---- polybori/src/BooleEnv.cc.orig 2010-01-29 09:02:02.000000000 +0000 -+++ polybori/src/BooleEnv.cc 2010-08-21 07:58:34.678170342 +0000 -@@ -42,13 +42,16 @@ - BEGIN_NAMESPACE_PBORI - - --BooleEnv::ring_type active_ring; -+//BooleEnv::ring_type active_ring; - // Note, direct access via friends, to active_ring.pOrder and pMgt, because - // inline doesn't work up to now, because os the undefined type issue. - - /// @todo needs inlining!!! - #ifdef PBORI_ENV_RING_NOTINLINED --BooleEnv::ring_type& BooleEnv::ring() { return active_ring; } -+BooleEnv::ring_type& BooleEnv::ring() { -+ static BooleEnv::ring_type active_ring(1000, CTypes::lp, false); -+ return active_ring; -+} - #endif - - BooleEnv::block_iterator -@@ -77,7 +80,7 @@ - - BooleEnv::idx_type - BooleEnv::lastBlockStart() { -- return active_ring.lastBlockStart(); -+ return ring().lastBlockStart(); - } - - -@@ -160,7 +163,7 @@ - } - - --void BooleEnv::set(ring_type& theRing) { active_ring = theRing; } -+void BooleEnv::set(ring_type& theRing) { ring() = theRing; } - - - diff --git a/sci-mathematics/polybori/metadata.xml b/sci-mathematics/polybori/metadata.xml deleted file mode 100644 index e8192740d..000000000 --- a/sci-mathematics/polybori/metadata.xml +++ /dev/null @@ -1,9 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<!DOCTYPE pkgmetadata SYSTEM "http://www.gentoo.org/dtd/metadata.dtd"> -<pkgmetadata> - <herd>sci-mathematics</herd> - <longdescription>PolyBoRi is a C++ library, which provides high-level data types for Boolean polynomials and monomials, exponent vectors, as well as for the underlying polynomial rings and subsets of the powerset of the Boolean variables. It also include a python interface on top of it.</longdescription> - <use> - <flag name='sage'>Replace the standard python interface by sage's python interface for easy integration in sage.</flag> - </use> -</pkgmetadata> diff --git a/sci-mathematics/polybori/polybori-0.6.5-r2.ebuild b/sci-mathematics/polybori/polybori-0.6.5-r2.ebuild deleted file mode 100644 index d7f506b14..000000000 --- a/sci-mathematics/polybori/polybori-0.6.5-r2.ebuild +++ /dev/null @@ -1,101 +0,0 @@ -# Copyright 1999-2011 Gentoo Foundation -# Distributed under the terms of the GNU General Public License v2 -# $Header: $ - -EAPI="3" - -PYTHON_DEPEND="2:2.6" - -inherit eutils flag-o-matic multilib python scons-utils versionator - -DESCRIPTION="Polynomials over Boolean Rings" -HOMEPAGE="http://polybori.sourceforge.net/" -SRC_URI="mirror://sourceforge/${PN}/${PN}/${PV}/${PN}-$(replace_version_separator 2 '-').tar.gz -> ${P}.tar.gz" - -LICENSE="GPL-2" -SLOT="0" -KEYWORDS="~amd64 ~x86 ~amd64-linux ~x86-linux" -IUSE="doc gd sage" - -# polybori does not have a working set of tests -RESTRICT="mirror test" - -CDEPEND=">=dev-libs/boost-1.34.1[python] - dev-python/ipython - gd? ( media-libs/gd )" -DEPEND="${CDEPEND} - >=sci-libs/m4ri-20090512 - doc? ( - dev-tex/tex4ht - app-doc/doxygen - )" -RDEPEND="${CDEPEND}" - -S="${WORKDIR}"/${PN}-$(get_version_component_range 1-2) - -USE_SCONS_TRUE="True" -USE_SCONS_FALSE="False" - -src_prepare() { - if use sage ; then - # TODO: This should not be done; find a better solution - cp "${FILESDIR}"/PyPolyBoRi.py pyroot/polybori/PyPolyBoRi.py \ - || die "cp failed" - - # TODO: Sage needs this file but we should find a better solution, - # maybe dev-util/pkgconfig ? - epatch "${FILESDIR}"/${PN}-0.6.4-save-flags.patch - fi - - # make sure external m4ri is used - rm -r M4RI || die "failed to remove internal copy of m4ri" - - # make polybori conform to multilib-strict - sed -i "s:DevelInstPath('lib'):DevelInstPath('$(get_libdir)'):g" \ - SConstruct || die "failed patch library path" - - # Ticket #9768 in Sage's bug tracker - make shared object work - epatch "${FILESDIR}"/${PN}-0.6.5-fix-double-free-error.patch - - # Ticket #9717 in Sage's bug tracker - fix SIGSEGV errors - epatch "${FILESDIR}"/${PN}-0.6.5-fix-another-SIGSEGV.patch -} - -src_compile(){ - # needed to make polybori linkable - append-flags -fPIC - - # TODO: handle singular ? - - # store all parameters for scons in a bash array - myesconsargs=( - CFLAGS=${CFLAGS} - CXXFLAGS=${CXXFLAGS} - LINKFLAGS=${LDFLAGS} - HAVE_HEVEA=False - HAVE_L2H=False - $(use_scons doc HAVE_TEX4HT) - $(use_scons doc HAVE_DOXYGEN) - $(use_scons doc HAVE_PYDOC) - MANDIR="${ED}"/usr/share/man - PREFIX="${ED}"/usr - PYINSTALLPREFIX="${ED}"$(python_get_sitedir) - INSTALLDIR="${ED}"/usr/share/polybori - ) - - escons "${myesconsargs[@]}" prepare-install prepare-devel || die -} - -src_install() { - escons "${myesconsargs[@]}" install devel-install || die - - # remove incomplete documentation - if ! use doc ; then - rm -rf "${ED}"/usr/share/polybori/doc \ - || die "failed to remove useless documentation" - fi - - # we only need shared objects - rm "${ED}"/usr/$(get_libdir)/lib*.a \ - || die "failed to remove static libraries" -} diff --git a/sci-mathematics/polymake/Manifest b/sci-mathematics/polymake/Manifest new file mode 100644 index 000000000..19f4c38fa --- /dev/null +++ b/sci-mathematics/polymake/Manifest @@ -0,0 +1 @@ +DIST polymake-2.11.tar.bz2 13249691 SHA256 232dd41f39ad7f67508c513ced2642f84f9e116b3613a790b57900a3dfce286d SHA512 2af0baa07b130fabc194367774a09cbf8714ba08b73b094c5562eb5132101553b1e1ff6378bed004591cd67b73341691ae9ba11945ca4f2036324603661f4958 WHIRLPOOL fe66d72ce84a7ec5f491658988d257ecf106e55bb100f5935a5fe5f2d8a802294f68f68c7d9c4038906d5712929eb8355158ffa121e4c151ac8f14c5263767bb diff --git a/sci-mathematics/polymake/files/2.10-soname.patch b/sci-mathematics/polymake/files/2.10-soname.patch new file mode 100644 index 000000000..14e66eaeb --- /dev/null +++ b/sci-mathematics/polymake/files/2.10-soname.patch @@ -0,0 +1,11 @@ +--- polymake-2.10.fixed/support/corelib.make 2011-06-20 08:30:06.000000000 +0100 ++++ polymake-2.10/support/corelib.make 2011-08-20 23:42:29.000000000 +0100 +@@ -89,7 +89,7 @@ + ifneq (${LDcallableFlags},none) + # no explicit dependence on XSObjects here because they are built in compile-xs using the Makefile generated by xsubpp + ${CallableLib} : ${SharedObjects} ${CallableSharedObjects} ${GlueObjects} ${CallableGlueObjects} ${XXSObjects} $(patsubst %,${SourceDir}/perl/%.xs,${XSModules}) +- ${CXX} ${LDcallableFlags} -o $@ ${SharedObjects} ${CallableSharedObjects} ${GlueObjects} ${CallableGlueObjects} ${XXSObjects} ${XSObjects} ${LDFLAGS} ${PERLccdlflags} -lmpfr -lgmp ${LIBS} -L${PERLarchlib}/CORE -lperl ++ ${CXX} ${LDcallableFlags} -Wl,-soname,libpolymake.so.0 -o $@ ${SharedObjects} ${CallableSharedObjects} ${GlueObjects} ${CallableGlueObjects} ${XXSObjects} ${XSObjects} ${LDFLAGS} ${PERLccdlflags} -lmpfr -lgmp ${LIBS} -L${PERLarchlib}/CORE -lperl + else + ${CallableLib} : ${XXSObjects} $(patsubst %,${SourceDir}/perl/%.xs,${XSModules}) + endif diff --git a/sci-mathematics/polymake/files/polymake-2.11-drop-jreality.patch b/sci-mathematics/polymake/files/polymake-2.11-drop-jreality.patch new file mode 100644 index 000000000..0eefe58ac --- /dev/null +++ b/sci-mathematics/polymake/files/polymake-2.11-drop-jreality.patch @@ -0,0 +1,25 @@ +diff -U 3 -dHrN polymake-2.11.orig/Makefile polymake-2.11/Makefile +--- polymake-2.11.orig/Makefile 2011-12-23 15:51:41.762207359 +0100 ++++ polymake-2.11/Makefile 2011-12-23 15:52:13.889973019 +0100 +@@ -134,11 +134,11 @@ + @case "$$(uname -s)" in \ + *linux*|*Linux*) \ + for d in linux32 linux64; do \ +- ${PERL} ${INSTALL_PL} -m ${DirMask} -U external/jreality/jni/$$d ${InstallArch}/lib/jreality/jni/$$d; \ ++ true; \ + done; \ + ;; \ + Darwin*|darwin*) \ +- ${PERL} ${INSTALL_PL} -m ${DirMask} -U external/jreality/jni/macosx ${InstallArch}/lib/jreality/jni/macosx; \ ++ true; \ + ;; \ + esac + [ -d ${InstallBin} ] || $(call _CreateDir,${InstallBin}) +@@ -166,7 +166,6 @@ + @+$(call _MakeApps, install-src) + $(if ${.svn},${CallPolymake} --no-config --script filter_rules -m ${InstallTop} ${Apps}) + [ ! -d java_build ] || $(call _InstallSubdir,java_build,-X de) +- [ ! -d java_build ] || $(call _InstallSubdirRenamed,external/jreality/lib,java_build/jreality/lib) + $(call _InstallSubdir,povray) + $(call _InstallSubdir,scripts) + $(call _InstallSubdir,xml) diff --git a/sci-mathematics/polymake/metadata.xml b/sci-mathematics/polymake/metadata.xml new file mode 100644 index 000000000..b4c285655 --- /dev/null +++ b/sci-mathematics/polymake/metadata.xml @@ -0,0 +1,17 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!DOCTYPE pkgmetadata SYSTEM "http://www.gentoo.org/dtd/metadata.dtd"> +<pkgmetadata> +<maintainer> +<email>tomka@gentoo.org</email> +<name>Thomas Kahle</name> +</maintainer> +<herd>sci-mathematics</herd> +<use> + <flag name="libpolymake">Build the polymake library to build applications using the C++ interface.</flag> +</use> +<longdescription lang="en"> +Polymake started out as a tool for the algorithmic treatment of convex +polyhedra. By now it also deals with finite simplicial complexes, +tight spans of finite metric spaces, and other objects. +</longdescription> +</pkgmetadata> diff --git a/sci-mathematics/polymake/polymake-2.11-r1.ebuild b/sci-mathematics/polymake/polymake-2.11-r1.ebuild new file mode 100644 index 000000000..1512501a5 --- /dev/null +++ b/sci-mathematics/polymake/polymake-2.11-r1.ebuild @@ -0,0 +1,82 @@ +# Copyright 1999-2011 Gentoo Foundation +# Distributed under the terms of the GNU General Public License v2 +# $Header: $ + +EAPI=2 + +inherit eutils flag-o-matic + +MY_PV=${PV} + +DESCRIPTION="research tool for polyhedral geometry and combinatorics" +SRC_URI="http://polymake.org/lib/exe/fetch.php/download/${PN}-${MY_PV}.tar.bz2" +HOMEPAGE="http://polymake.org" + +IUSE="libpolymake" + +SLOT="0" +LICENSE="GPL-2" +KEYWORDS="~amd64 ~x86 ~amd64-linux ~x86-linux" + +DEPEND="dev-libs/gmp + dev-libs/boost + dev-libs/libxml2:2 + dev-perl/XML-LibXML + dev-libs/libxslt + dev-perl/XML-LibXSLT + dev-perl/XML-Writer + dev-perl/Term-ReadLine-Gnu" +RDEPEND="${DEPEND}" + +src_prepare() { + # embedded jreality is a precompiled desaster (bug #346073) + epatch "${FILESDIR}/${P}"-drop-jreality.patch + # Assign a soname + epatch "${FILESDIR}/2.10"-soname.patch + rm -rf java_build/jreality + + # Don't strip + sed -i '/system "strip $to"/d' support/install.pl || die + + einfo "During compile this package uses up to" + einfo "750MB of RAM per process. Use MAKEOPTS=\"-j1\" if" + einfo "you run into trouble." +} + +src_configure () { + export CXXOPT=$(get-flag -O) + local myconf + if use libpolymake ; then + # WTF: If we leave myconf as the empty string here + # then configure will fail. + myconf="--without-prereq" + else + # --with-callable is not supported :( + myconf="--without-callable" + fi + echo ${myconf} + # Configure does not accept --host, therefore econf cannot be used + ./configure --prefix="${EPREFIX}/usr" \ + --without-java \ + --without-prereq \ + --libdir="${EPREFIX}/usr/$(get_libdir)" \ + --libexecdir="${EPREFIX}/usr/$(get_libdir)/polymake" \ + "${myconf}" || die +} + +src_install(){ + emake -j1 DESTDIR="${D}" install || die "install failed" +} + +pkg_postinst(){ + elog "Polymake uses Perl Modules compiled during install." + elog "You have to reinstall polymake after an upgrade of Perl." + elog " " + elog "This version of polymake does not ship docs. Sorry." + elog "Help can be found on http://www.opt.tu-darmstadt.de/polymake_doku/ " + elog " " + elog "Visualization in polymake is via jreality which ships pre-compiled" + elog "binary libraries. Until this situation is resolved, support for" + elog "jreality has been dropped. Please contribute to Bug #346073 to " + elog "make jreality available in Gentoo." +} diff --git a/sys-cluster/blcr/ChangeLog b/sys-cluster/blcr/ChangeLog index e115f4ae9..3d7eb52fc 100644 --- a/sys-cluster/blcr/ChangeLog +++ b/sys-cluster/blcr/ChangeLog @@ -2,6 +2,10 @@ # Copyright 1999-2012 Gentoo Foundation; Distributed under the GPL v2 # $Header: $ + 15 Mar 2012; Martin Mokrejs <mmokrejs@fold.natur.cuni.cz> blcr-0.8.2.ebuild, + blcr-0.8.4.ebuild: + added ' || die' calls blcr-0.8.2.ebuild blcr-0.8.4.ebuild + *blcr-0.8.4 (08 Mar 2012) 08 Mar 2012; Martin Mokrejs <mmokrejs@fold.natur.cuni.cz> blcr-0.8.2.ebuild, diff --git a/sys-cluster/blcr/blcr-0.8.2.ebuild b/sys-cluster/blcr/blcr-0.8.2.ebuild index fe229e3aa..f32d04c44 100644 --- a/sys-cluster/blcr/blcr-0.8.2.ebuild +++ b/sys-cluster/blcr/blcr-0.8.2.ebuild @@ -39,13 +39,13 @@ pkg_setup() { src_install() { dodoc README NEWS - cd "${S}"/util + cd "${S}"/util || die emake DESTDIR="${D}" install || die "binaries install failed" - cd "${S}"/libcr + cd "${S}"/libcr || die emake DESTDIR="${D}" install || die "libcr install failed" - cd "${S}"/man + cd "${S}"/man || die emake DESTDIR="${D}" install || die "man install failed" - cd "${S}"/include + cd "${S}"/include || die emake DESTDIR="${D}" install || die "headers install failed" linux-mod_src_install } diff --git a/sys-cluster/blcr/blcr-0.8.4.ebuild b/sys-cluster/blcr/blcr-0.8.4.ebuild index a362519a4..899bb5cd6 100644 --- a/sys-cluster/blcr/blcr-0.8.4.ebuild +++ b/sys-cluster/blcr/blcr-0.8.4.ebuild @@ -39,15 +39,16 @@ pkg_setup() { ECONF_PARAMS="--with-kernel=${KV_DIR}" } + src_install() { dodoc README NEWS - cd "${S}"/util + cd "${S}"/util || die emake DESTDIR="${D}" install || die "binaries install failed" - cd "${S}"/libcr + cd "${S}"/libcr || die emake DESTDIR="${D}" install || die "libcr install failed" - cd "${S}"/man + cd "${S}"/man || die emake DESTDIR="${D}" install || die "man install failed" - cd "${S}"/include + cd "${S}"/include || die emake DESTDIR="${D}" install || die "headers install failed" linux-mod_src_install } |