diff options
7 files changed, 221 insertions, 0 deletions
| diff --git a/meta-lsb/packages/iputils/files/debian/CVE-2010-2529.diff b/meta-lsb/packages/iputils/files/debian/CVE-2010-2529.diff new file mode 100644 index 0000000000..98aae0d457 --- /dev/null +++ b/meta-lsb/packages/iputils/files/debian/CVE-2010-2529.diff @@ -0,0 +1,22 @@ +Index: trunk/ping.c +=================================================================== +--- trunk.orig/ping.c	2010-07-23 21:26:53.000000000 -0700 ++++ trunk/ping.c	2010-07-23 21:28:27.000000000 -0700 +@@ -1059,7 +1059,7 @@ + 				i = j; + 			i -= IPOPT_MINOFF; + 			if (i <= 0) +-				continue; ++				break; + 			if (i == old_rrlen + 			    && !strncmp((char *)cp, old_rr, i) + 			    && !(options & F_FLOOD)) { +@@ -1096,7 +1096,7 @@ + 				i = j; + 			i -= 5; + 			if (i <= 0) +-				continue; ++				break; + 			flags = *++cp; + 			printf("\nTS: "); + 			cp++; diff --git a/meta-lsb/packages/iputils/files/debian/add-icmp-return-codes.diff b/meta-lsb/packages/iputils/files/debian/add-icmp-return-codes.diff new file mode 100644 index 0000000000..86bbf0d39a --- /dev/null +++ b/meta-lsb/packages/iputils/files/debian/add-icmp-return-codes.diff @@ -0,0 +1,41 @@ +Index: trunk/ping.c +=================================================================== +--- trunk.orig/ping.c	2010-05-07 23:13:54.000000000 -0700 ++++ trunk/ping.c	2010-05-07 23:23:22.000000000 -0700 +@@ -883,9 +883,36 @@ + 		case ICMP_SR_FAILED: + 			printf("Source Route Failed\n"); + 			break; ++		case ICMP_NET_UNKNOWN: ++			printf("Destination Net Unknown\n"); ++			break; ++		case ICMP_HOST_UNKNOWN: ++			printf("Destination Host Unknown\n"); ++			break; ++		case ICMP_HOST_ISOLATED: ++			printf("Source Host Isolated\n"); ++			break; ++		case ICMP_NET_ANO: ++			printf("Destination Net Prohibited\n"); ++			break; ++		case ICMP_HOST_ANO: ++			printf("Destination Host Prohibited\n"); ++			break; ++		case ICMP_NET_UNR_TOS: ++			printf("Destination Net Unreachable for Type of Service\n"); ++			break; ++		case ICMP_HOST_UNR_TOS: ++			printf("Destination Host Unreachable for Type of Service\n"); ++			break; + 		case ICMP_PKT_FILTERED: + 			printf("Packet filtered\n"); + 			break; ++		case ICMP_PREC_VIOLATION: ++			printf("Precedence Violation\n"); ++			break; ++		case ICMP_PREC_CUTOFF: ++			printf("Precedence Cutoff\n"); ++			break; + 		default: + 			printf("Dest Unreachable, Bad Code: %d\n", code); + 			break; diff --git a/meta-lsb/packages/iputils/files/debian/fix-arping-timeouts.diff b/meta-lsb/packages/iputils/files/debian/fix-arping-timeouts.diff new file mode 100644 index 0000000000..9f05769f71 --- /dev/null +++ b/meta-lsb/packages/iputils/files/debian/fix-arping-timeouts.diff @@ -0,0 +1,24 @@ +Index: trunk/arping.c +=================================================================== +--- trunk.orig/arping.c	2010-05-07 23:13:52.000000000 -0700 ++++ trunk/arping.c	2010-05-07 23:41:16.000000000 -0700 +@@ -182,12 +182,17 @@ + 	if (start.tv_sec==0) + 		start = tv; +  +-	if (count-- == 0 || (timeout && MS_TDIFF(tv,start) > timeout*1000 + 500)) ++	if (timeout && MS_TDIFF(tv,start) > timeout*1000 + 500) + 		finish(); +  +-	if (last.tv_sec==0 || MS_TDIFF(tv,last) > 500) { ++	if ((!timeout) && (count == 0)) ++		finish(); ++ ++	if ( count!=0  && (last.tv_sec==0 || MS_TDIFF(tv,last) > 500 ) ) { + 		send_pack(s, src, dst, + 			  (struct sockaddr_ll *)&me, (struct sockaddr_ll *)&he); ++		if (count >= 0) ++		    count--; + 		if (count == 0 && unsolicited) + 			finish(); + 	} diff --git a/meta-lsb/packages/iputils/files/debian/fix-dead-host-ping-stats.diff b/meta-lsb/packages/iputils/files/debian/fix-dead-host-ping-stats.diff new file mode 100644 index 0000000000..2a924258da --- /dev/null +++ b/meta-lsb/packages/iputils/files/debian/fix-dead-host-ping-stats.diff @@ -0,0 +1,14 @@ +Index: trunk/ping_common.c +=================================================================== +--- trunk.orig/ping_common.c	2010-05-07 23:13:51.000000000 -0700 ++++ trunk/ping_common.c	2010-05-07 23:22:33.000000000 -0700 +@@ -872,7 +872,8 @@ + 		printf("%spipe %d", comma, pipesize); + 		comma = ", "; + 	} +-	if (ntransmitted > 1 && (!interval || (options&(F_FLOOD|F_ADAPTIVE)))) { ++	if (ntransmitted > 1 && nreceived && ++		(!interval || (options&(F_FLOOD|F_ADAPTIVE)))) { + 		int ipg = (1000000*(long long)tv.tv_sec+tv.tv_usec)/(ntransmitted-1); + 		printf("%sipg/ewma %d.%03d/%d.%03d ms", + 		       comma, ipg/1000, ipg%1000, rtt/8000, (rtt/8)%1000); diff --git a/meta-lsb/packages/iputils/files/debian/targets.diff b/meta-lsb/packages/iputils/files/debian/targets.diff new file mode 100644 index 0000000000..b5e907a8d0 --- /dev/null +++ b/meta-lsb/packages/iputils/files/debian/targets.diff @@ -0,0 +1,13 @@ +Index: trunk/Makefile +=================================================================== +--- trunk.orig/Makefile	2010-05-07 23:43:00.000000000 -0700 ++++ trunk/Makefile	2010-05-07 23:47:10.000000000 -0700 +@@ -16,7 +16,7 @@ + CCOPT=-D_GNU_SOURCE -O2 -Wstrict-prototypes -Wall -g + CFLAGS=$(CCOPT) $(GLIBCFIX) $(DEFINES)  +  +-IPV4_TARGETS=tracepath ping clockdiff rdisc arping tftpd rarpd ++IPV4_TARGETS=tracepath ping arping clockdiff + IPV6_TARGETS=tracepath6 traceroute6 ping6 + TARGETS=$(IPV4_TARGETS) $(IPV6_TARGETS) +  diff --git a/meta-lsb/packages/iputils/files/debian/use_gethostbyname2.diff b/meta-lsb/packages/iputils/files/debian/use_gethostbyname2.diff new file mode 100644 index 0000000000..7e6c97c14a --- /dev/null +++ b/meta-lsb/packages/iputils/files/debian/use_gethostbyname2.diff @@ -0,0 +1,29 @@ +Index: trunk/tracepath.c +=================================================================== +--- trunk.orig/tracepath.c	2010-05-07 23:13:52.000000000 -0700 ++++ trunk/tracepath.c	2010-05-07 23:24:09.000000000 -0700 +@@ -338,9 +338,9 @@ + 		base_port = atoi(p+1); + 	} else + 		base_port = 44444; +-	he = gethostbyname(argv[0]); ++	he = gethostbyname2(argv[0], AF_INET); + 	if (he == NULL) { +-		herror("gethostbyname"); ++		herror("gethostbyname2"); + 		exit(1); + 	} + 	memcpy(&target.sin_addr, he->h_addr, 4); +Index: trunk/ping.c +=================================================================== +--- trunk.orig/ping.c	2010-05-07 23:23:22.000000000 -0700 ++++ trunk/ping.c	2010-05-07 23:24:09.000000000 -0700 +@@ -250,7 +250,7 @@ + 			if (argc == 1) + 				options |= F_NUMERIC; + 		} else { +-			hp = gethostbyname(target); ++			hp = gethostbyname2(target, AF_INET); + 			if (!hp) { + 				fprintf(stderr, "ping: unknown host %s\n", target); + 				exit(2); diff --git a/meta-lsb/packages/iputils/iputils_s20100418.bb b/meta-lsb/packages/iputils/iputils_s20100418.bb new file mode 100644 index 0000000000..3f793eca57 --- /dev/null +++ b/meta-lsb/packages/iputils/iputils_s20100418.bb @@ -0,0 +1,78 @@ +DESCRIPTION = "Utilities for the IP protocol, including traceroute6, \ +tracepath, tracepath6, ping, ping6 and arping." +HOMEPAGE = "http://www.skbuff.net/iputils" +SECTION = "console/network" + +LICENSE = "BSD & GPLv2+" + +DEPENDS = "sysfsutils openssl" + +PR = "r0" + +SRC_URI = "http://www.skbuff.net/iputils/${PN}-${PV}.tar.bz2 \ +           file://debian/fix-dead-host-ping-stats.diff \ +           file://debian/add-icmp-return-codes.diff \ +           file://debian/use_gethostbyname2.diff \ +           file://debian/targets.diff \ +           file://debian/fix-arping-timeouts.diff \ +           file://debian/CVE-2010-2529.diff \ +          " + +# man is not compiled here, since it requires docbook-utils-native +# which is not available in poky + +do_compile () { +	oe_runmake 'CC=${CC} -D_GNU_SOURCE' VPATH="${STAGING_LIBDIR}" all +} + +do_install () { +	install -m 0755 -d ${D}${base_bindir} ${D}${mandir}/man8 +	# SUID root programs +	install -m 4555 ping ${D}${base_bindir}/ping.${PN} +	install -m 4555 ping6 ${D}${base_bindir}/ping6.${PN} +	install -m 4555 traceroute6 ${D}${base_bindir}/ +	# Other programgs +	for i in arping tracepath tracepath6; do +	  install -m 0755 $i ${D}${base_bindir}/ +	done +	# Manual pages for things we build packages for +#	for i in tracepath.8 traceroute6.8 ping.8 arping.8; do +#	  install -m 0644 doc/$i ${D}${mandir}/man8/ || true +#	done +} + +# Busybox also provides ping and ping6, so use update-alternatives +# Also fixup SUID bit for applications that need it +pkg_postinst_${PN}-ping () { +	chmod 4555 ${base_bindir}/ping.${PN} +	update-alternatives --install ${base_bindir}/ping ping ping.${PN} 100 +} +pkg_prerm_${PN}-ping () { +	update-alternatives --remove ping ping.${PN} +} + +pkg_postinst_${PN}-ping6 () { +	chmod 4555 ${base_bindir}/ping6.${PN} +	update-alternatives --install ${base_bindir}/ping6 ping6 ping6.${PN} 100 +} +pkg_prerm_${PN}-ping6 () { +	update-alternatives --remove ping6 ping6.${PN} +} + +pkg_postinst_${PN}-traceroute6 () { +	chmod 4555 ${base_bindir}/traceroute6 +} + +PACKAGES += "${PN}-ping ${PN}-ping6 ${PN}-arping ${PN}-tracepath ${PN}-tracepath6 ${PN}-traceroute6" + +ALLOW_EMPTY_${PN} = "1" +RDEPENDS_${PN} += "${PN}-ping ${PN}-ping6 ${PN}-arping ${PN}-tracepath ${PN}-tracepath6 ${PN}-traceroute6" + +FILES_${PN}	= "" +FILES_${PN}-ping = "${base_bindir}/ping.${PN}" +FILES_${PN}-ping6 = "${base_bindir}/ping6.${PN}" +FILES_${PN}-arping = "${base_bindir}/arping" +FILES_${PN}-tracepath = "${base_bindir}/tracepath" +FILES_${PN}-tracepath6 = "${base_bindir}/tracepath6" +FILES_${PN}-traceroute6	= "${base_bindir}/traceroute6" +FILES_${PN}-doc	= "${mandir}/man8" | 
