From b6b197ce450f3e69ab7647fa9da0c0744a15f2c1 Mon Sep 17 00:00:00 2001
From: Roy Marples <uberlord@gentoo.org>
Date: Fri, 7 Apr 2006 23:59:37 +0000
Subject:   New patch, now with resolvconf support.   Actually we don't unpatch
 it from Debians patch, but whatever ;) (Portage version: 2.1_pre7-r4)

---
 net-misc/pump/ChangeLog                        |  11 +-
 net-misc/pump/Manifest                         |  33 +-
 net-misc/pump/files/digest-pump-0.8.21-r9      |   6 +
 net-misc/pump/files/pump-0.8.21-gentoo-2.patch | 611 +++++++++++++++++++++++++
 net-misc/pump/pump-0.8.21-r9.ebuild            |  65 +++
 5 files changed, 720 insertions(+), 6 deletions(-)
 create mode 100644 net-misc/pump/files/digest-pump-0.8.21-r9
 create mode 100644 net-misc/pump/files/pump-0.8.21-gentoo-2.patch
 create mode 100644 net-misc/pump/pump-0.8.21-r9.ebuild

(limited to 'net-misc/pump')

diff --git a/net-misc/pump/ChangeLog b/net-misc/pump/ChangeLog
index 4234111f3efc..7d35c3b67dc9 100644
--- a/net-misc/pump/ChangeLog
+++ b/net-misc/pump/ChangeLog
@@ -1,6 +1,13 @@
 # ChangeLog for net-misc/pump
-# Copyright 2002-2005 Gentoo Foundation; Distributed under the GPL v2
-# $Header: /var/cvsroot/gentoo-x86/net-misc/pump/ChangeLog,v 1.28 2005/11/18 13:05:48 uberlord Exp $
+# Copyright 2002-2006 Gentoo Foundation; Distributed under the GPL v2
+# $Header: /var/cvsroot/gentoo-x86/net-misc/pump/ChangeLog,v 1.29 2006/04/07 23:59:37 uberlord Exp $
+
+*pump-0.8.21-r9 (07 Apr 2006)
+
+  07 Apr 2006; Roy Marples <uberlord@gentoo.org>
+  +files/pump-0.8.21-gentoo-2.patch, +pump-0.8.21-r9.ebuild:
+  New patch, now with resolvconf support.
+  Actually we don't unpatch it from Debians patch, but whatever ;)
 
 *pump-0.8.21-r8 (18 Nov 2005)
 
diff --git a/net-misc/pump/Manifest b/net-misc/pump/Manifest
index bec609ed3c9a..91944190b165 100644
--- a/net-misc/pump/Manifest
+++ b/net-misc/pump/Manifest
@@ -1,8 +1,33 @@
-MD5 8bed0fca68498dde28cc7ac7500322da pump-0.8.21-r8.ebuild 1732
-MD5 94fe4b6cace933a6aaedd7fb52194eca metadata.xml 288
-MD5 d057200fd35820b24f71841abe4fb946 pump-0.8.21-r7.ebuild 1444
 MD5 6ae261b828b5e63c4e2a763c4f8c1723 ChangeLog 4777
+RMD160 da42ba455e55a19cee0a14035bcb3a9221748c69 ChangeLog 4777
+SHA256 56c6ff499fbec9638d560569044415931597ace3e8cac7693f19c9d27906ab4b ChangeLog 4777
 MD5 f3e80515c4994d15e18d1c17c0740970 files/digest-pump-0.8.21-r7 132
-MD5 61f260b871807d65909b25eac4a60853 files/pump-0.8.21-gcc4.patch 3244
+RMD160 f2dd606c17044156e55834436724259ea31773fd files/digest-pump-0.8.21-r7 132
+SHA256 6ba3ed169ce426a2a9173a487422e93328b794635a5c33889cf82eb8b7a114a4 files/digest-pump-0.8.21-r7 132
 MD5 f3e80515c4994d15e18d1c17c0740970 files/digest-pump-0.8.21-r8 132
+RMD160 f2dd606c17044156e55834436724259ea31773fd files/digest-pump-0.8.21-r8 132
+SHA256 6ba3ed169ce426a2a9173a487422e93328b794635a5c33889cf82eb8b7a114a4 files/digest-pump-0.8.21-r8 132
+MD5 a2c15f5738bc332e75ab261b6ae707e2 files/digest-pump-0.8.21-r9 488
+RMD160 53495658ffe3748a20f85f4cef53d6737077900d files/digest-pump-0.8.21-r9 488
+SHA256 e2777a640b14733389f47fc4d44dfbb828aa1793d207e38bd8c5c26ad9b7def5 files/digest-pump-0.8.21-r9 488
+MD5 61f260b871807d65909b25eac4a60853 files/pump-0.8.21-gcc4.patch 3244
+RMD160 c43a48a7eea8574756016d2868cb6cf96d75839c files/pump-0.8.21-gcc4.patch 3244
+SHA256 a87f960e240bdb051a13c7e410efea16d45856e7261554a0ce412985a629e89b files/pump-0.8.21-gcc4.patch 3244
+MD5 b18016bf2103d9b6041d1509499d6c50 files/pump-0.8.21-gentoo-2.patch 19762
+RMD160 1f4675fbe67a391b056f1e0de7bdbe666f9b5f28 files/pump-0.8.21-gentoo-2.patch 19762
+SHA256 2c8851718c8a7b6db975f13690ff5e115ef70b0076197cf3152778ab575af1fc files/pump-0.8.21-gentoo-2.patch 19762
 MD5 d392ca15c9b4bd656b2bfdc185ba654d files/pump-0.8.21-gentoo.diff 20131
+RMD160 7d5c6200395bb574577d018e5c4f4ada8377cae6 files/pump-0.8.21-gentoo.diff 20131
+SHA256 5f3f61f4a7672175e792fb48c38b2c8afb7afaf1ce353f5a645f09cc554abe98 files/pump-0.8.21-gentoo.diff 20131
+MD5 94fe4b6cace933a6aaedd7fb52194eca metadata.xml 288
+RMD160 906b4569fd44db0aff588a04ac9d895dd5ef7750 metadata.xml 288
+SHA256 175c6563e7dd812572c496f8e8c03471b18f00b04a5c62e6c59222ad304c1c08 metadata.xml 288
+MD5 d057200fd35820b24f71841abe4fb946 pump-0.8.21-r7.ebuild 1444
+RMD160 9c03696fb8deda2a8747dc5003bdf788ce84ae17 pump-0.8.21-r7.ebuild 1444
+SHA256 f5416c3c9a14c5c836d5b15476d8d2bb6122970a7d0c9ec1d43a9843a4bab66b pump-0.8.21-r7.ebuild 1444
+MD5 8bed0fca68498dde28cc7ac7500322da pump-0.8.21-r8.ebuild 1732
+RMD160 e873adbab4da7635b3fa8db619c1735da827ccf7 pump-0.8.21-r8.ebuild 1732
+SHA256 8cea1c70890366fb85ff784295f7c2ad85a1d7210a29b83a78a82a4679d37495 pump-0.8.21-r8.ebuild 1732
+MD5 401a09c616ad8197c7bf75deb2b82989 pump-0.8.21-r9.ebuild 1594
+RMD160 93cf6692157ed5372f8de619ab927d725ef6b41c pump-0.8.21-r9.ebuild 1594
+SHA256 25f45b8ea8d8b518bdf04dd6befa93221db58c95a241730f2e5b1fdcd4e1f877 pump-0.8.21-r9.ebuild 1594
diff --git a/net-misc/pump/files/digest-pump-0.8.21-r9 b/net-misc/pump/files/digest-pump-0.8.21-r9
new file mode 100644
index 000000000000..fb2170369e99
--- /dev/null
+++ b/net-misc/pump/files/digest-pump-0.8.21-r9
@@ -0,0 +1,6 @@
+MD5 22e1a2a142117fe41781e5437a03fcdb pump_0.8.21-2.diff.gz 22259
+RMD160 72438041c50f75e49f07d3361652683ae72032e3 pump_0.8.21-2.diff.gz 22259
+SHA256 4f1cd3c8722a5b05a8a3ece404ec9a4cb0bd0e2a42130489f12ee4a27a51241c pump_0.8.21-2.diff.gz 22259
+MD5 a6925de6cd011605237934a907f8a9c4 pump_0.8.21.orig.tar.gz 79289
+RMD160 0e911d101aba6757f680dddaecbac479df61fdb1 pump_0.8.21.orig.tar.gz 79289
+SHA256 3534015b2e045f7422a6487ad31d6f47f6369029daad92cea8f218e749d84109 pump_0.8.21.orig.tar.gz 79289
diff --git a/net-misc/pump/files/pump-0.8.21-gentoo-2.patch b/net-misc/pump/files/pump-0.8.21-gentoo-2.patch
new file mode 100644
index 000000000000..85e847a24101
--- /dev/null
+++ b/net-misc/pump/files/pump-0.8.21-gentoo-2.patch
@@ -0,0 +1,611 @@
+diff -u pump-0.8.21/config.c /local/pump/pump-0.8.21-r9/config.c
+--- pump-0.8.21/config.c	2006-03-18 09:31:33.000000000 +0000
++++ /local/pump/pump-0.8.21-r9/config.c	2006-03-18 09:14:57.000000000 +0000
+@@ -155,15 +155,26 @@
+ 	    }
+ 
+ 	    override->numRetries = num;
+-	} else if (!strcmp(start, "domainsearch")) {
+-	    size_t len;
++	} else if (!strcmp(start, "routemetric")) {
++	    poptParseArgvString(rest, &argc, &argv);
++
++	    if (argc != 1) {
++		parseError(*lineNum, "routemetric directive expects a "
++			   "single argument");
++		return 1;
++	    }
+ 
+-	    if (overrideList != override) {
+-		parseError(*lineNum, "domainsearch directive may not occur "
+-			   "inside of device specification");
++	    num = strtol(argv[0], &chptr, 0);
++	    if (*chptr) {
++		parseError(*lineNum, "routemetric requires a numeric "
++			   "argument");
+ 		return 1;
+ 	    }
+ 
++	    override->routeMetric = num;
++	} else if (!strcmp(start, "domainsearch")) {
++	    size_t len;
++
+ 	    poptParseArgvString(rest, &argc, &argv);
+ 
+ 	    if (argc != 1) {
+@@ -209,6 +220,12 @@
+ 		return 1;
+ 	    }
+ 	    override->flags |= OVERRIDE_FLAG_NONISDOMAIN;
++	} else if (!strcmp(start, "nontp")) {
++	    if (*rest) {
++		parseError(*lineNum, "unexpected argument to nontp directive");
++		return 1;
++	    }
++	    override->flags |= OVERRIDE_FLAG_NONTP;
+ 	} else if (!strcmp(start, "nosetup")) {
+ 	    if (*rest) {
+ 		parseError(*lineNum, "unexpected argument to nosetup directive");
+@@ -219,12 +236,6 @@
+ 	} else if (!strcmp(start, "script")) {
+ 	    size_t len;
+ 
+-	    if (overrideList != override) {
+-		parseError(*lineNum, "script directive may not occur "
+-			   "inside of device specification");
+-		return 1;
+-	    }
+-
+ 	    poptParseArgvString(rest, &argc, &argv);
+ 
+ 	    if (argc != 1) {
+Common subdirectories: pump-0.8.21/debian and /local/pump/pump-0.8.21-r9/debian
+diff -u pump-0.8.21/dhcp.c /local/pump/pump-0.8.21-r9/dhcp.c
+--- pump-0.8.21/dhcp.c	2006-03-18 09:31:33.000000000 +0000
++++ /local/pump/pump-0.8.21-r9/dhcp.c	2006-03-18 09:14:57.000000000 +0000
+@@ -203,16 +203,30 @@
+ 
+ char * pumpDisableInterface(struct pumpNetIntf * intf) {
+     struct ifreq req;
++    struct sockaddr_in * addrp;
+     int s;
+ 
+     if (intf->flags & PUMP_FLAG_NOSETUP)
+ 	return NULL;
+ 
+     s = socket(AF_INET, SOCK_DGRAM, 0);
+-	
+-    memset(&req,0,sizeof(req));
+ 
++    memset(&req,0,sizeof(req));
+     strcpy(req.ifr_name, intf->device);
++
++    addrp = (struct sockaddr_in *) &req.ifr_addr;
++    addrp->sin_family = AF_INET;
++    addrp->sin_addr.s_addr = 0;
++    if (ioctl(s, SIOCSIFADDR, &req)) {
++	close(s);
++	return perrorstr("SIOCSIFADDR");
++    }
++
++    if (intf->override.flags & OVERRIDE_FLAG_KEEPUP) {
++	close(s);
++	return NULL;
++    }
++    
+     if (ioctl(s, SIOCGIFFLAGS, &req)) {
+ 	close(s);
+ 	return perrorstr("SIOCGIFFLAGS");
+@@ -282,18 +296,27 @@
+ 	goto out;
+     }
+ 
+-    if (!strcmp(intf->device, "lo")) {
+-	/* add a route for this network */
+-	route.rt_dev = intf->device;
+-	route.rt_flags = RTF_UP;
+-	route.rt_metric = 0;
++    route.rt_dev = intf->device;
++    route.rt_flags = RTF_UP;
++    route.rt_metric = 0;
++
++    addrp->sin_family = AF_INET;
++    addrp->sin_port = 0;
++    addrp->sin_addr = intf->network;
++    memcpy(&route.rt_dst, addrp, sizeof(*addrp));
++    addrp->sin_addr = intf->netmask;
++    memcpy(&route.rt_genmask, addrp, sizeof(*addrp));
++    
++    if (strcmp(intf->device,"lo") && intf->override.routeMetric) {
++	if (ioctl(s, SIOCDELRT, &route)) {
++	    rc = perrorstr("SIOCDELRT");
++	    goto out;
++	}
++    }
+ 
+-	addrp->sin_family = AF_INET;
+-	addrp->sin_port = 0;
+-	addrp->sin_addr = intf->network;
+-	memcpy(&route.rt_dst, addrp, sizeof(*addrp));
+-	addrp->sin_addr = intf->netmask;
+-	memcpy(&route.rt_genmask, addrp, sizeof(*addrp));
++    if (!strcmp(intf->device, "lo") || intf->override.routeMetric) {
++	if (intf->override.routeMetric)
++	    route.rt_metric = intf->override.routeMetric + 1;
+ 
+ 	if (ioctl(s, SIOCADDRT, &route)) {
+ 	    /* the route cannot already exist, as we've taken the device down */
+@@ -307,31 +330,37 @@
+     return rc;
+ }
+ 
+-int pumpSetupDefaultGateway(struct in_addr * gw) {
++int pumpSetupDefaultGateway(struct pumpNetIntf * intf) {
+     struct sockaddr_in addr;
+     struct rtentry route;
+     int s;
++    int i;
+ 
+     s = socket(AF_INET, SOCK_DGRAM, 0);
+-	
+-    memset(&addr,0,sizeof(addr));
+-    memset(&route,0,sizeof(route));
+-    addr.sin_family = AF_INET;
+-    addr.sin_port = 0;
+-    addr.sin_addr.s_addr = INADDR_ANY;
+-    memcpy(&route.rt_dst, &addr, sizeof(addr));
+-    memcpy(&route.rt_genmask, &addr, sizeof(addr));
+-    addr.sin_addr = *gw;
+-    memcpy(&route.rt_gateway, &addr, sizeof(addr));
+-    
+-    route.rt_flags = RTF_UP | RTF_GATEWAY;
+-    route.rt_metric = 0;
+-    route.rt_dev = NULL;
+ 
+-    if (ioctl(s, SIOCADDRT, &route)) {
+-	close(s);
+-	syslog(LOG_ERR, "failed to set default route: %s", strerror(errno));
+-	return -1;
++    for (i = intf->numGateways - 1; i >= 0; i--) {
++	memset(&addr,0,sizeof(addr));
++	memset(&route,0,sizeof(route));
++	addr.sin_family = AF_INET;
++	addr.sin_port = 0;
++	addr.sin_addr.s_addr = INADDR_ANY;
++	memcpy(&route.rt_dst, &addr, sizeof(addr));
++	memcpy(&route.rt_genmask, &addr, sizeof(addr));
++	addr.sin_addr = intf->gateways[i];
++	memcpy(&route.rt_gateway, &addr, sizeof(addr));
++
++	route.rt_flags = RTF_UP | RTF_GATEWAY;
++	route.rt_dev = intf->device;
++	if (intf->override.routeMetric)
++	    route.rt_metric = intf->override.routeMetric + 1;
++	else
++	    route.rt_metric = 0;
++
++	if (ioctl(s, SIOCADDRT, &route)) {
++	    close(s);
++	    syslog(LOG_ERR, "failed to set default route: %s", strerror(errno));
++	    return -1;
++	}
+     }
+ 
+     close(s);
+@@ -377,7 +406,7 @@
+     unsigned char option, length;
+ 
+    
+-    chptr = response->vendor;
++    chptr = (unsigned char *) response->vendor;
+ 
+     chptr += 4;
+     while (*chptr != 0xFF) {
+@@ -454,7 +483,7 @@
+     intf->set |= PUMP_INTFINFO_HAS_NEXTSERVER;
+     syslog (LOG_DEBUG, "intf: next server: %s", inet_ntoa (intf->nextServer));
+ 
+-    chptr = breq->vendor;
++    chptr = (unsigned char *) breq->vendor;
+     chptr += 4;
+     while (*chptr != 0xFF && (void *) chptr < (void *) breq->vendor + DHCP_VENDOR_LENGTH) {
+ 	option = *chptr++;
+@@ -710,7 +739,7 @@
+     syslog (LOG_DEBUG, "%s: servername: %s", name, breq->servername);
+     syslog (LOG_DEBUG, "%s: bootfile: %s", name, breq->bootfile);
+     
+-    vndptr = breq->vendor;
++    vndptr = (unsigned char *) breq->vendor;
+     sprintf (vendor, "0x%02x 0x%02x 0x%02x 0x%02x", vndptr[0], vndptr[1], vndptr[2], vndptr[3]);
+     vndptr += 4;
+     syslog (LOG_DEBUG, "%s: vendor: %s", name, vendor);
+@@ -722,7 +751,7 @@
+ 	if (option == 0xFF)
+ 	  {
+ 	    sprintf (vendor, "0x%02x", option);
+-	    vndptr = breq->vendor + DHCP_VENDOR_LENGTH;
++	    vndptr = (unsigned char *)breq->vendor + DHCP_VENDOR_LENGTH;
+ 	  }
+ 	else if (option == 0x00)
+ 	  {
+@@ -765,10 +794,11 @@
+     fd_set readfs;
+     int i, j;
+     struct sockaddr_pkt tmpAddress;
++    socklen_t addrLength;
+     int gotit = 0;
+     int tries;
+     int nextTimeout = 2;
+-    time_t timeoutTime;
++    time_t timeoutTime = 0;
+     int sin;
+     int resend = 1;
+     struct ethhdr;
+@@ -855,9 +885,9 @@
+ 	    break;
+ 
+ 	  case 1:
+-	    i = sizeof(tmpAddress);
++	    addrLength = sizeof(tmpAddress);
+ 	    if ((j = recvfrom(sin, ethPacket, sizeof(ethPacket), 0, 
+-		     (struct sockaddr *) &tmpAddress, &i)) < 0)
++		     (struct sockaddr *) &tmpAddress, &addrLength)) < 0)
+ 		return perrorstr("recvfrom");
+ 
+ 	    /* We need to do some basic sanity checking of the header */
+@@ -969,7 +999,7 @@
+     unsigned char * chptr;
+     int theOption, theLength;
+ 
+-    chptr = breq->vendor;
++    chptr = (unsigned char *) breq->vendor;
+     chptr += 4;
+     while (*chptr != 0xFF && *chptr != option) {
+ 	theOption = *chptr++;
+@@ -989,7 +1019,7 @@
+     unsigned char * chptr;
+     unsigned int length, theOption;
+ 
+-    chptr = bresp->vendor;
++    chptr = (unsigned char *) bresp->vendor;
+     chptr += 4;
+     while (*chptr != 0xFF && *chptr != option) {
+ 	theOption = *chptr++;
+@@ -1261,7 +1291,7 @@
+     struct sockaddr_in serverAddr;
+     struct sockaddr_ll broadcastAddr;
+     struct bootpRequest breq, bresp;
+-    unsigned char * chptr;
++    char * chptr;
+     time_t startTime = pumpUptime();
+     char * saveDeviceName;
+     unsigned char messageType;
+@@ -1432,7 +1462,7 @@
+ char * pumpDhcpRun(char * device, int flags, int reqLease,
+                   char * reqHostname, struct pumpNetIntf * intf,
+                   struct pumpOverrideInfo * override) {
+-    pumpDhcpClassRun(device, flags, reqLease, reqHostname, NULL, intf,
++    return pumpDhcpClassRun(device, flags, reqLease, reqHostname, NULL, intf,
+                      override);
+ }
+ 
+Common subdirectories: pump-0.8.21/po and /local/pump/pump-0.8.21-r9/po
+diff -u pump-0.8.21/pump.8 /local/pump/pump-0.8.21-r9/pump.8
+--- pump-0.8.21/pump.8	2006-03-18 09:31:33.000000000 +0000
++++ /local/pump/pump-0.8.21-r9/pump.8	2006-03-18 09:14:57.000000000 +0000
+@@ -1,5 +1,6 @@
+ .\" Copyright 1999 Red Hat Software, Inc.
+ .\" August 2004: Updated by Thomas Hood <jdthood@yahoo.co.uk>
++.\" July 2005: Updated by Roy Marples <uberlord@gentoo.org>
+ .\"
+ .\" This man page is free documentation; you can redistribute it and/or modify
+ .\" it under the terms of the GNU General Public License as published by
+@@ -29,8 +30,10 @@
+ .IR IFACE ]
+ .BR "" [ \-l | \-\-lease
+ .IR HOURS ]
++.BR "" [ \-m | \-\-route\-metric
++.IR METRIC ]
+ .BR "" [ \-\-lookup\-hostname ]
+-.BR "" [ \-\-no\-dns "] [" \-\-no\-gateway "] [" \-\-no\-setup "] [" \-\-no\-resolvconf ]
++.BR "" [ \-\-no\-dns "] [" \-\-no\-gateway "] [" \-\- no\-ntp "] [" \-\-no\-setup "]
+ .BR "" [ \-\-release "] [" \-\-renew "] [" \-\-script =
+ .IR ISCRIPT ]
+ .BR "" [ \-\-status ]
+@@ -67,13 +70,16 @@
+ \-d	\-\-no\-dns	Don't update DNS resolver configuration
+ \-h	\-\-hostname=\fIHOSTNAME\fR	Request \fIHOSTNAME\fR
+ \-i	\-\-interface=\fIIFACE\fR	Manage \fIIFACE\fR rather than eth0
++	\-\-keep\-up	Keep the interface up when released
+ \-k	\-\-kill	Kill daemon (and disable all interfaces)
+ \-l	\-\-lease=\fIHOURS\fR	Request least time of \fIHOURS\fR
+ 	\-\-lookup\-hostname	Look up hostname in DNS
+ \-R	\-\-renew	Renew lease immediately
+ \-r	\-\-release	Release interface
++\-m	\-\-route-metric=\fIMETRIC\fR	Metric to use on routes (normally 0)
+   	\-\-no\-gateway	Don't configurate a default route for this interface
+   	\-\-no\-resolvconf	Don't use the \fBresolvconf\fR program to update resolv.conf
++  	\-\-no\-ntp	Don't update ntp.conf
+   	\-\-no\-setup	Don't set up anything
+   	\-\-script=\fISCRIPT\fR	Call \fISCRIPT\fR (or null string to disable)
+ \-s	\-\-status	Display interface status
+@@ -164,8 +170,13 @@
+ Use \fISEARCHPATH\fR as the DNS search path instead of the domain
+ name returned by the server or the domain part of the fully
+ qualified hostname.
+-As a machine only has a single DNS search path, this directive may
+-only be used globally. 
++
++.TP
++\fBkeepup\fR
++Keep the interface up when released.
++Normally \fBpump\fR brings the interface down when it releases its
++lease, but some daemons such as ifplugd or wpa_supplicant still need the
++interface to be up so that they can still work.
+ 
+ .TP
+ \fBnonisdomain\fR
+@@ -173,22 +184,24 @@
+ Normally \fBpump\fR sets the system's NIS domain
+ if an NIS domain is specified by the DHCP server
+ and the current NIS domain is empty or \fBlocaldomain\fR.
+-This directive may only be used within a \fBdevice\fR directive.
+ 
+ .TP
+ \fBnodns\fR
+ Don't update /etc/resolv.conf when the interface is configured.
+-This directive may only be used within a \fBdevice\fR directive.
+ 
+ .TP
+ \fBnogateway\fR
+ Ignore any default gateway suggested by the DHCP server for this device.
+-This can be useful on machines with multiple Ethernet cards.
++This can be useful on machines with multiple devices.
++
++.TP
++\fBnontp\fR
++Don't update /etc/ntp.conf when the interface is configured.
+ 
+ .TP
+ \fBnosetup\fR
+ Don't set up anything on the local machine as a result of DHCP operations.
+-This implies \fBnodns\fR, \fBnonisdomain\fR and \fBnogateway\fR.
++This implies \fBnodns\fR, \fBnonisdomain\fR, \fBnogateway\fR and \fBnontp\fR.
+ This option is useful, for example,
+ if you want to perform setup in customised scripts.
+ 
+diff -u pump-0.8.21/pump.c /local/pump/pump-0.8.21-r9/pump.c
+--- pump-0.8.21/pump.c	2006-03-18 09:31:33.000000000 +0000
++++ /local/pump/pump-0.8.21-r9/pump.c	2006-03-18 09:25:52.000000000 +0000
+@@ -188,9 +188,17 @@
+ 
+     errno = 0;
+ 
+-    if (domain)
+-	if(fprintf(f, "search %s\n", domain) < 0)
+-	    syslog(LOG_ERR, "failed to write resolver configuration data\n");
++    fprintf(f, "# Generated by pump for interface %s\n", intf->device);
++    
++    if (domain) {
++	if (strchr(domain, ' ')) {
++	    if(fprintf(f, "search %s\n", domain) < 0)
++		syslog(LOG_ERR, "failed to write resolver configuration data\n");
++	} else {
++	    if(fprintf(f, "search %s\n", domain) < 0)
++		syslog(LOG_ERR, "failed to write resolver configuration data\n");
++	}
++    }
+ 
+     for (i = 0; i < intf->numDns; i++)
+ 	if(fprintf(f, "nameserver %s\n", inet_ntoa(intf->dnsServers[i])) < 0)
+@@ -301,35 +309,6 @@
+     free(arg);
+ }
+ 
+-static void callIfupPost(struct pumpNetIntf* intf) {
+-#ifdef debian
+-    /* can/should we call a debian one? */
+-    return;
+-#else
+-    pid_t child;
+-    char * argv[3];
+-    char arg[64];
+-
+-    argv[0] = "/etc/sysconfig/network-scripts/ifup-post";
+-    snprintf(arg,64,"ifcfg-%s",intf->device);
+-    argv[1] = arg;
+-    argv[2] = NULL;
+-
+-    if (!(child = fork())) {
+-	/* send the script to init */
+-	if (fork()) _exit(0);
+-
+-	execvp(argv[0], argv);
+-
+-	syslog(LOG_ERR,"failed to run %s: %s", argv[0], strerror(errno));
+-
+-	_exit(0);
+-    }
+-
+-    waitpid(child, NULL, 0);
+-#endif
+-}
+-
+ static void callScript(char* script,int msg,struct pumpNetIntf* intf) {
+     pid_t child;
+     char * argv[20];
+@@ -393,12 +372,8 @@
+ 
+     syslog(LOG_INFO, "configured interface %s", intf->device);
+ 
+-    if (!(o->flags & OVERRIDE_FLAG_NOGATEWAY)) {
+-	int i;
+-
+-	for (i = intf->numGateways - 1; i >= 0; i--)
+-	    pumpSetupDefaultGateway(&intf->gateways[i]);
+-    }
++    if (!(o->flags & OVERRIDE_FLAG_NOGATEWAY))
++	pumpSetupDefaultGateway(intf);
+ 
+     setupDns(intf, o);
+     setupDomain(intf, o);
+@@ -416,7 +391,7 @@
+ static void runDaemon(int sock, int sock_in) {
+     int conn;
+     struct sockaddr_un addr;
+-    int addrLength = sizeof(struct sockaddr_un);
++    socklen_t addrLength = sizeof(struct sockaddr_un);
+     struct command cmd;
+     struct pumpNetIntf intf[20];
+     const int maxIntf = sizeof(intf) / sizeof(intf[0]);
+@@ -510,7 +485,6 @@
+ 		    } else {
+ 			callScript(intf[closest].override.script,
+ 				   PUMP_SCRIPT_RENEWAL, &intf[closest]);
+-			callIfupPost(&intf[closest]);
+ 		    }
+ 
+ 		    continue;	    /* recheck timeouts */
+@@ -613,7 +587,6 @@
+ 		    if (!cmd.u.result) {
+ 			callScript(intf[i].override.script,
+ 				   PUMP_SCRIPT_RENEWAL, intf + i);
+-			callIfupPost(intf + i);
+ 		    }
+ 		}
+ 		break;
+@@ -841,7 +814,6 @@
+     printf("\tNext server %s\n", inet_ntoa(i.nextServer));
+ 
+     if (i.numGateways) {
+-	printf("\tGateway: %s\n", inet_ntoa(i.gateways[0]));
+ 	printf("\tGateways:");
+ 	for (j = 0; j < i.numGateways; j++)
+ 	    printf(" %s", inet_ntoa(i.gateways[j]));
+@@ -925,12 +897,15 @@
+     int killDaemon = 0;
+     int winId = 0;
+     int release = 0, renew = 0, status = 0, lookupHostname = 0, nodns = 0;
+-    int nogateway = 0, nobootp = 0;
++    int nogateway = 0, nobootp = 0, nontp = 0;
+     int nosetup = 0;
+     int noresolvconf = 0;
++    int routeMetric = 0;
++    int keepUp = 0;
+     struct command cmd, response;
+     char * configFile = "/etc/pump.conf";
+     char * script = NULL;
++    char * searchPath = NULL;
+     struct pumpOverrideInfo * overrides;
+     int cont;
+     struct poptOption options[] = {
+@@ -942,6 +917,8 @@
+             { "interface", 'i', POPT_ARG_STRING, &device, 0, 
+ 			N_("Interface to configure (normally eth0)"), 
+ 			N_("iface") },
++	    { "keep-up", 'u', POPT_ARG_NONE, &keepUp, 0,
++			N_("Keep the interface up when releasing it") },
+ 	    { "kill", 'k', POPT_ARG_NONE, &killDaemon, 0,
+ 			N_("Kill daemon (and disable all interfaces)"), NULL },
+ 	    { "lease", 'l', POPT_ARG_INT, &lease_hrs, 0,
+@@ -954,7 +931,9 @@
+ 			N_("Release interface"), NULL },
+ 	    { "renew", 'R', POPT_ARG_NONE, &renew, 0,
+ 			N_("Force immediate lease renewal"), NULL },
+-            { "verbose", 'v', POPT_ARG_NONE, &verbose, 0,
++	    { "route-metric", 'm', POPT_ARG_INT, &routeMetric, 0,
++			N_("Metric applied to routes (normally 0)"), N_("(metric)") },
++	    { "verbose", 'v', POPT_ARG_NONE, &verbose, 0,
+                         N_("Log verbose debug info"), NULL },
+ 	    { "status", 's', POPT_ARG_NONE, &status, 0,
+ 			N_("Display interface status"), NULL },
+@@ -962,12 +941,16 @@
+ 			N_("Don't update resolv.conf"), NULL },
+ 	    { "no-gateway", '\0', POPT_ARG_NONE, &nogateway, 0,
+ 			N_("Don't set a gateway for this interface"), NULL },
++	    { "no-ntp", '\0', POPT_ARG_NONE, &nontp, 0,
++			N_("Don't update ntp.conf"), NULL },
+ 	    { "no-setup", '\0', POPT_ARG_NONE, &nosetup, 0,
+ 			N_("Don't set up anything"), NULL },
+ 	    { "no-resolvconf", '\0', POPT_ARG_NONE, &noresolvconf, 0,
+ 			N_("Don't set up resolvconf"), NULL },
+ 	    { "no-bootp", '\0', POPT_ARG_NONE, &nobootp, 0,
+ 	                N_("Ignore non-DHCP BOOTP responses"), NULL },
++	    { "search-path", 'p', POPT_ARG_STRING, &searchPath, 0,
++			N_("Use this DNS search path instead of the supplied one"), NULL },
+ 	    { "script", '\0', POPT_ARG_STRING, &script, 0,
+ 			N_("Script to use") },
+ 	    { "win-client-ident", '\0', POPT_ARG_NONE, &winId, 0,
+@@ -1014,6 +997,11 @@
+ 	return 1;
+     }
+ 
++    if (searchPath && strlen(searchPath) > sizeof(overrides->searchPath)) {
++	fprintf(stderr, _("%s: --search-path argument is to long\n"), PROGNAME);
++	return 1;
++    }
++    
+     if (script && strlen(script) > sizeof(overrides->script)) {
+ 	fprintf(stderr, _("%s: --script argument is too long\n"), PROGNAME);
+ 	return 1;
+@@ -1033,7 +1021,7 @@
+ 	flags |= PUMP_FLAG_WINCLIENTID;
+     if (lookupHostname)
+ 	flags |= PUMP_FLAG_FORCEHNLOOKUP;
+-
++    
+     if (killDaemon) {
+ 	cmd.type = CMD_DIE;
+     } else if (status) {
+@@ -1069,14 +1057,22 @@
+ 	    o->flags |= OVERRIDE_FLAG_NOBOOTP;
+ 	if (nogateway)
+ 	    o->flags |= OVERRIDE_FLAG_NOGATEWAY;
++	if (nontp)
++	    o->flags |= OVERRIDE_FLAG_NONTP;
+ 	if (nosetup)
+ 	    o->flags |=
+ 		OVERRIDE_FLAG_NOSETUP |
+ 		OVERRIDE_FLAG_NODNS |
+ 		OVERRIDE_FLAG_NOGATEWAY |
++		OVERRIDE_FLAG_NONTP |
+ 		OVERRIDE_FLAG_NONISDOMAIN;
+ 	if (noresolvconf)
+ 	    o->flags |= OVERRIDE_FLAG_NORESOLVCONF;
++	if (keepUp)
++	    o->flags |= OVERRIDE_FLAG_KEEPUP;
++	o->routeMetric = routeMetric;
++	if (searchPath)
++	    strcpy(o->searchPath, searchPath);
+ 	if (script)
+ 	    strcpy(o->script, script);
+ 
+diff -u pump-0.8.21/pump.h /local/pump/pump-0.8.21-r9/pump.h
+--- pump-0.8.21/pump.h	2006-03-18 09:31:33.000000000 +0000
++++ /local/pump/pump-0.8.21-r9/pump.h	2006-03-18 09:14:57.000000000 +0000
+@@ -55,6 +55,8 @@
+ #define OVERRIDE_FLAG_NOBOOTP           (1 << 3)
+ #define OVERRIDE_FLAG_NOSETUP		(1 << 4)
+ #define OVERRIDE_FLAG_NORESOLVCONF	(1 << 5)
++#define OVERRIDE_FLAG_NONTP		(1 << 6)
++#define OVERRIDE_FLAG_KEEPUP		(1 << 7)
+ 
+ struct pumpOverrideInfo {
+     char device[10];
+@@ -63,6 +65,7 @@
+     int numRetries;
+     int timeout;
+     char script[1024];
++    int routeMetric;
+ };
+ 
+ /* all of these in_addr things are in network byte order! */
+@@ -113,7 +116,7 @@
+ char * pumpDisableInterface(struct pumpNetIntf * intf);
+ int pumpDhcpRenew(struct pumpNetIntf * intf);
+ int pumpDhcpRelease(struct pumpNetIntf * intf);
+-int pumpSetupDefaultGateway(struct in_addr * gw);
++int pumpSetupDefaultGateway(struct pumpNetIntf * intf);
+ time_t pumpUptime(void);
+ 
+ #define RESULT_OKAY		0
diff --git a/net-misc/pump/pump-0.8.21-r9.ebuild b/net-misc/pump/pump-0.8.21-r9.ebuild
new file mode 100644
index 000000000000..c9f74f055474
--- /dev/null
+++ b/net-misc/pump/pump-0.8.21-r9.ebuild
@@ -0,0 +1,65 @@
+# Copyright 1999-2006 Gentoo Foundation
+# Distributed under the terms of the GNU General Public License v2
+# $Header: /var/cvsroot/gentoo-x86/net-misc/pump/pump-0.8.21-r9.ebuild,v 1.1 2006/04/07 23:59:37 uberlord Exp $
+
+inherit eutils
+
+PATCHLEVEL="2"
+
+DESCRIPTION="This is the DHCP/BOOTP client written by RedHat"
+HOMEPAGE="http://ftp.debian.org/debian/pool/main/p/pump/"
+SRC_URI="mirror://debian/pool/main/p/${PN}/${PN}_${PV}.orig.tar.gz
+	mirror://debian/pool/main/p/${PN}/${PN}_${PV}-${PATCHLEVEL}.diff.gz"
+
+LICENSE="GPL-2"
+SLOT="0"
+KEYWORDS="~amd64 ~arm ~hppa ~ia64 ~ppc ~sparc ~x86"
+IUSE=""
+
+DEPEND=">=dev-libs/popt-1.5"
+RDEPEND="${DEPEND}"
+
+PROVIDE="virtual/dhcpc"
+
+src_unpack() {
+	cd "${WORKDIR}"
+	unpack "${PN}_${PV}.orig.tar.gz"
+	cd "${S}"
+
+	# Apply Debians pump patchset - they fix things good :)
+	epatch "${DISTDIR}/${PN}_${PV}-${PATCHLEVEL}.diff.gz"
+
+	# Enable the -m (--route-metric) option to specify the default
+	# metric applied to routes
+	# Enable the --keep-up option to keep interfaces up when we release
+	# Enable the creation of /etc/ntp.conf and the --no-ntp option
+	epatch "${FILESDIR}/pump-${PV}-gentoo-2.patch"
+
+	# Only install specific po files if LINGUAS is set
+	if [[ -n ${LINGUAS} ]]; then
+		cd po
+		local p
+		for l in $(ls *.po) ; do
+			[[ " ${LINGUAS} " != *" ${l%%.po} "* ]] && rm -f "${l}"
+		done
+	fi
+}
+
+src_compile() {
+	make DEB_CFLAGS="-fPIC ${CFLAGS}" pump || die
+}
+
+src_install() {
+	into /
+	dosbin pump || die
+
+	doman pump.8
+	dodoc CREDITS
+
+	into /usr/
+	dolib.a libpump.a
+	insinto /usr/include/
+	doins pump.h
+
+	make -C po install datadir="${D}/usr/share/"
+}
-- 
cgit v1.2.3-65-gdbad