summaryrefslogtreecommitdiff
path: root/net-ftp/atftp
diff options
context:
space:
mode:
Diffstat (limited to 'net-ftp/atftp')
-rw-r--r--net-ftp/atftp/Manifest19
-rw-r--r--net-ftp/atftp/atftp-0.7-r3.ebuild71
-rw-r--r--net-ftp/atftp/atftp-0.7-r5.ebuild72
-rw-r--r--net-ftp/atftp/files/atftp-0.7-CFLAGS.patch32
-rw-r--r--net-ftp/atftp/files/atftp-0.7-blockno.patch136
-rw-r--r--net-ftp/atftp/files/atftp-0.7-glibc24.patch22
-rw-r--r--net-ftp/atftp/files/atftp-0.7-illreply.patch12
-rw-r--r--net-ftp/atftp/files/atftp-0.7-password.patch94
-rw-r--r--net-ftp/atftp/files/atftp-0.7-pcre.patch14
-rw-r--r--net-ftp/atftp/files/atftp-0.7-spaced_filename.patch96
-rw-r--r--net-ftp/atftp/files/atftp-0.7-tests.patch23
-rw-r--r--net-ftp/atftp/files/atftp.confd4
-rw-r--r--net-ftp/atftp/files/atftp.init28
-rw-r--r--net-ftp/atftp/files/atftp.service9
-rw-r--r--net-ftp/atftp/files/atftp.service.conf2
-rw-r--r--net-ftp/atftp/metadata.xml7
16 files changed, 641 insertions, 0 deletions
diff --git a/net-ftp/atftp/Manifest b/net-ftp/atftp/Manifest
new file mode 100644
index 000000000000..594c1ee10f0c
--- /dev/null
+++ b/net-ftp/atftp/Manifest
@@ -0,0 +1,19 @@
+AUX atftp-0.7-CFLAGS.patch 619 SHA256 56a9bdf1c4f9452db041fce1bc4c994e84ce44c6093ef48588f8d8bc93adaf24 SHA512 9227354689ea504f0500c244335a83d8a77dcb74c876ada1065c955f414e1f51e06dafcdb5d99f1fbb22036a074f9e46cada7378824d70f677ff6db931a35289 WHIRLPOOL 238a88f78637c21348af1e0c9c9e74b73bc63380297d810617c8cc2d90d5a3b29af213d01b401298771e89b9f04ca7bdbf8301eb5218db642c0d27027ecbec05
+AUX atftp-0.7-blockno.patch 5686 SHA256 f77661c92a66b95773a81f895e982ae65acbbef84c75b1ab8021e4dfb1bb64d1 SHA512 f91e7a7811a1a08268f2ca378eb4e473838e0c07c3cb8c6e6fec1e0e4e9068705451d8d0ae5f3d184a9455d5035bb656176fa3ed09b50fecb6c2d42e8dc73e1d WHIRLPOOL 99e2af2b35263131f0bc3d2a795e99ade0bd20000107931a512c84ea0029f98deb62f08392039c8d24cad88603a15bd55959883e189011248ee1c8092152a5c5
+AUX atftp-0.7-glibc24.patch 778 SHA256 d2bec90943b330db84cd6af089a67e476f45271d9f33095ef3fc281c83eb7ed5 SHA512 1000972a84d3462a0924a4189b240160a9ae5e1429365b329e0be582fdd6593611a59d3f7f955956269144f4c764bb378e04aecc5c18405d340f7cd60efb4e5a WHIRLPOOL cb0a9f32ca7a061683ad7d92dc4ee14d6aaed260b0071942bc6fb932640b8c2e8b5f04dccf9f8b7c87e26458da2980523db5be1eda9fe1d894548170e48f1bde
+AUX atftp-0.7-illreply.patch 382 SHA256 26c26743dd4282841df4bbf4be496809ed820925e2dfa1c0c19516050bbecd06 SHA512 42efdd402a6fb07bd02286afb41c8eb14d68595454e882a967e40453ec85e59214e635537ea8d580259f1bfdb0524bcaba29e8af321136c3e2d973f22b08b467 WHIRLPOOL 0bf037bfc1432018e809a905a08ac8ae23499f098de8b2df182b7d7fe5e86eb68a5a25f173f025885bc3ea2a0187ac91415228fb82a6c6ebca94f897f2758e17
+AUX atftp-0.7-password.patch 3906 SHA256 e56637318c9baa9e85525dc92c6be170713529af834a5bb6871238d374c0a365 SHA512 5f04d4d54aaf5f459e1aa87f56b3920fc039303f6c1c6d0f205bc1937b9c5263e5a51224838ee7aab1b73e0df6c312620caeba9dd2388e1b5b7bdf8253a56fc0 WHIRLPOOL b3d34b6168f381121e49dc918258695fa1e36c10fb82f495fb9d6f57e2659a71eccc42481deaf0cb9c1e5ef236d367d6a79676fa5251533b283a79e8073c4710
+AUX atftp-0.7-pcre.patch 661 SHA256 53cb989038e1c5520104c837cb086ffbb20afb6555f42782f78fd05bcea9f304 SHA512 773ecc9aa63a9ffb2774ca5454daf573813f988defa6e6f8e9f99cfcc88c7984632b6d1944994c2dd6426200057a552743b9c30d5c158f469a9a74b3cd0c5dff WHIRLPOOL c2a7a02db827070c98c013e7d380b6cb08a7ce87a4549bc8989e75dfc225dae054665354158eaca7ead1eecf9a3e12dcf55527bd185ead32f35732414945e6fb
+AUX atftp-0.7-spaced_filename.patch 2395 SHA256 0d93d85295d5e5ad79783b7e45e8c7f5ee061956adf1f160f5647fcb418bdac7 SHA512 f6b352105d40fd4de2b079e847c7e6230ebeef3d2c5568aa260f7c74b22962c168928b38a244e3784e6ba282b47ae09d28b572c36944360f5bf8d880d16aeb64 WHIRLPOOL e5726c0aaae31085099bf7bc33597732100d02e9bff390de2a1b51d7d2b8b6c4dff179ed1352199be4b748edfe08bd3dacbdc068ab34b68c82e21b22cb5832f6
+AUX atftp-0.7-tests.patch 582 SHA256 00e04546214265b0e9d03a0f8182837909825fef111e53a7b23d9e6a382a9d54 SHA512 93863aed523c9787f37b671caa894a92e864b009dd5c028066f7e10e50cefce955f3cf9a24ecc702c3ce572bd88fa6a47d524af08ecbaa6ff116487a68393ea8 WHIRLPOOL 001b1d907dc6d0a03a70d6e4c0a0f4f698098a02cc441bde1c7a18d13eae59bbce76727b5dffbe83222611636fe7d7fd550c0c98107717c441afc540c278dde5
+AUX atftp.confd 105 SHA256 a2dc012a0ecd94f27950901b18a54ecc744630da4c7cd8939b3f11be07685645 SHA512 cdbd63df16c2cee7491209de8ec44e05e10beccc6286cf7cb1c5dc7731c616d41bc94ce4d6c020b4ac8bb77b27956e9ee36d9b5703dcd3477e8b14927d154b91 WHIRLPOOL 85ea4d5e802b503740c6220c57dcc4c104d9015818f2a487e0e02338c634a3132134243273911615d3c7583a7bae3d2d24a77b866b1ee6ad0f34dd2e3d9b7db3
+AUX atftp.init 438 SHA256 ecd4c898bc508ebf031ba84b27f19345e4c3606c447bffd62ea35553286f4ec5 SHA512 b64f78658d2da17a4fe4237835c0a6a0cc59d0b7278e8f6f49673ffd8a97a9473e4773b43bcc70d312043ee4324d8105c50f0cfcf6055c0755ce598c9d7e5a23 WHIRLPOOL 9d1bd8a1d49dbdd3cd8b6a053e97ce365b1af49f66696eaf68a51542551f51634cf32c7927dde9534c3fefe53c5b0c659cfe77abe4a1e102e0108397e3123d45
+AUX atftp.service 233 SHA256 f7b7a98fa22df5b991efdb47cfc4ebd9e22e94d189a168143b7be6093a7249fb SHA512 533372c4863e39d6139ddc491c2b2b2051f1094a90d9854879f28bae7975c8dc997696318794cd1136f9cc542a8f418ad8361b87dd6b3455445d8528d2cc993a WHIRLPOOL e6bb1033fede9ac9dbb9f61af399f14a61b1c8cd7e7d6dad22618f55f8c2110e08792305a0dc476a73d8ce988841bd88426adf5ada03bee5eed7e241b3df93fc
+AUX atftp.service.conf 45 SHA256 a33d187f60ab600e78b88b9198096a4638b6216226a286a013a2731e7ad0d1fc SHA512 661befb6873eee6c0ed25fd5cb156e3d7c4ef801d2f58cda8df0f0c5fd851c7eb28089a9399529164c61505963e9d10143df2195d57ff66f85ad0e2750fbbd57 WHIRLPOOL cecfa44b85c55281b2f729b505f1bcc900345c1906872cc947a4bd540e5c09e5f7fcc6dd84004edc4434158747af56403fb1e50a965ff7ecc14a6400c222a19b
+DIST atftp-0.7.tar.gz 202234 SHA256 9c548c44d3cfdf259118d9fd4e468e1fe4567456dbff8ff59838c5f70ef62ea3 SHA512 81c51b613a640f7db4d26da0fb891bda345d11d3f39e0af37f393d2abf619094c1de83f92f04ac75367f546cc70e37d7d47c1535c241c941036fd4df7863a440 WHIRLPOOL 6af7ae6603ce44a17d5368c794c9e01b1bb03baa0406926ef35d9083dc77c57f9a7f3cfb9a5fb9231330f739f417c06a81089dd58f33c5d06682cdbef4be42bd
+DIST atftp_0.7-11.diff.gz 26055 SHA256 77accd1f5b5d4759fe9572f7a917c629e35692e484ac4dc6fd4415fe745036ff SHA512 28747f8f3ef2fc3b122361f682fe26ba93acf09b190f61efb3cfcbb6bdeef78cfe1348aeaf1699003a7e02586579be670d85b65baad1b1165a4bec9a9279adb5 WHIRLPOOL 9dc3678862d994810bdbfae2189c074345fa895dd8d2612dea155774abb804a3d7dee1465e4b0a2beec7a429440d0d971a3d67db57d43341b87f3533b72bea8a
+EBUILD atftp-0.7-r3.ebuild 1834 SHA256 55558c7674c28e58aa486b64aba065b093f7ae88879281e27ef926f92d8dd0e4 SHA512 a2cd6c88e1cabfbdfcc0829e8152132002a8f1695f11fbc80f576022470455a9f847316c79379e6e571fcec048c9f38e896f340a1945b0e45a0794c7968a51a2 WHIRLPOOL 11510365a2679b96ccd36793afc81fd190cd7c7c6b6e544a225d7c9949229ef2086d1917dde0cdf42e8e2bc7d16a3d3bc5e90fd4624b826310973a512e474849
+EBUILD atftp-0.7-r5.ebuild 1752 SHA256 29c21d7fe2f50d9407324b14e9e037d795043edc239e4f9287c50b26f98c32a1 SHA512 02813b38b258795a361c3cc69e57637c67e35867117fcdd1cf0442de13c240de7bcb1bb34e810dcff46ea796cb2ea53e8a6002d945f5c8849bd811d4d4e905a2 WHIRLPOOL 0573e71914844209d8ffdc735d0583f78852f8c80a641663b6a31ac83260605973fca9145e2d6eb8fedf53c6af4984d2666657982e1bc5170c8cb7b14c657c4a
+MISC ChangeLog 3293 SHA256 10b159295591b6c44c183d5af131dd02e911b7b8b485b7907623aabdba5bd146 SHA512 c05066fefbd7f0c46ec471aa851b818f5fee6b97993b7eb9d08f236ac1d94ea28e5858b2b7b4e65790d898bfe37b8becd3ad5b6e1be49ffa516912e62503efb8 WHIRLPOOL 07dc688f2875bf4e473ddf07db4f5fb0846c054605e054026332ef3b0ef096d19481f3a8cc97ab32edf50c4564f09b80eb70e089b5952d0a07a0bce48b7fc67a
+MISC ChangeLog-2015 6224 SHA256 8429fb5eb944ee77cbc9e5fa23cd03d18e2bd86a04b8d47241eb7c0a520e88ff SHA512 b5730c2f690fccf8531a1a21f9a9daad69ba19f7136915b35086a198ca15a025c8cdccb202273454c8cf53d6a9d71f443dfe5ad4fcee724a294de7d4148af1b6 WHIRLPOOL 4a18d219f9e487621f818a5c4eb8a55a2f8195b19be8be16c4b033a2df5abfa0f251e585929502bd9e056ea62f741669f164a8d20ca0c16dbbc6aa6a76f60f1b
+MISC metadata.xml 215 SHA256 ce3a50f663af586ec3cad6cd8f8dff2319275bbf99394b189091cb3e12bd4c48 SHA512 dfbc3b8198f877d6f858c9228f92e82926664db8f0f19cd6ba97ce06b52d93a998e78c44fd502f20bf249cd70d612f1c0bdc01c9d66ea8495c54dab399b62116 WHIRLPOOL 295667ce786c78e3357b52484c4183a5f773bfafb6a71b6d427056f465e03dfe045ab43766de9d52fd58ccfb52e29dd9a493ce17a805bbe278684623da9a6344
diff --git a/net-ftp/atftp/atftp-0.7-r3.ebuild b/net-ftp/atftp/atftp-0.7-r3.ebuild
new file mode 100644
index 000000000000..839def958f8e
--- /dev/null
+++ b/net-ftp/atftp/atftp-0.7-r3.ebuild
@@ -0,0 +1,71 @@
+# Copyright 1999-2014 Gentoo Foundation
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=5
+inherit eutils flag-o-matic systemd
+
+DEBIAN_PV="11"
+DEBIAN_A="${PN}_${PV}-${DEBIAN_PV}.diff.gz"
+
+DESCRIPTION="Advanced TFTP implementation client/server"
+HOMEPAGE="ftp://ftp.mamalinux.com/pub/atftp/"
+SRC_URI="ftp://ftp.mamalinux.com/pub/atftp/${P}.tar.gz
+ mirror://debian/pool/main/a/${PN}/${DEBIAN_A}"
+
+LICENSE="GPL-2"
+SLOT="0"
+KEYWORDS="amd64 arm ppc ppc64 ~s390 sparc x86"
+IUSE="selinux tcpd readline pcre"
+
+DEPEND="tcpd? ( sys-apps/tcp-wrappers )
+ readline? ( sys-libs/readline )
+ pcre? ( dev-libs/libpcre )"
+RDEPEND="${DEPEND}
+ !net-ftp/netkit-tftp
+ !net-ftp/tftp-hpa
+ selinux? ( sec-policy/selinux-tftp )"
+
+src_prepare() {
+ epatch "${DISTDIR}"/${DEBIAN_A}
+ epatch "${FILESDIR}"/${P}-pcre.patch
+ epatch "${FILESDIR}"/${P}-password.patch
+ epatch "${FILESDIR}"/${P}-tests.patch
+ epatch "${FILESDIR}"/${P}-glibc24.patch
+ epatch "${FILESDIR}"/${P}-blockno.patch
+ epatch "${FILESDIR}"/${P}-spaced_filename.patch
+ epatch "${FILESDIR}"/${P}-illreply.patch
+ # remove upstream's broken CFLAGS
+ sed -i.orig -e \
+ '/^CFLAGS="-g -Wall -D_REENTRANT"/s,".*","",g' \
+ "${S}"/configure
+}
+
+src_configure() {
+ append-flags -D_REENTRANT -DRATE_CONTROL
+ econf \
+ $(use_enable tcpd libwrap) \
+ $(use_enable readline libreadline) \
+ $(use_enable pcre libpcre) \
+ --enable-mtftp
+}
+
+src_compile() {
+ emake CFLAGS="${CFLAGS}"
+}
+
+src_install() {
+ emake install DESTDIR="${D}"
+
+ newinitd "${FILESDIR}"/atftp.init atftp
+ newconfd "${FILESDIR}"/atftp.confd atftp
+
+ systemd_dounit "${FILESDIR}"/atftp.service
+ systemd_install_serviced "${FILESDIR}"/atftp.service.conf
+
+ dodoc README* BUGS FAQ Changelog INSTALL TODO
+ dodoc "${S}"/docs/*
+
+ docinto test
+ cd "${S}"/test
+ dodoc load.sh mtftp.conf pcre_pattern.txt test.sh test_suite.txt
+}
diff --git a/net-ftp/atftp/atftp-0.7-r5.ebuild b/net-ftp/atftp/atftp-0.7-r5.ebuild
new file mode 100644
index 000000000000..dae8d5d1d6d0
--- /dev/null
+++ b/net-ftp/atftp/atftp-0.7-r5.ebuild
@@ -0,0 +1,72 @@
+# Copyright 1999-2017 Gentoo Foundation
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=6
+inherit autotools flag-o-matic systemd
+
+DEBIAN_PV="11"
+DEBIAN_A="${PN}_${PV}-${DEBIAN_PV}.diff"
+
+DESCRIPTION="Advanced TFTP implementation client/server"
+HOMEPAGE="ftp://ftp.mamalinux.com/pub/atftp/"
+SRC_URI="ftp://ftp.mamalinux.com/pub/atftp/${P}.tar.gz
+ mirror://debian/pool/main/a/${PN}/${DEBIAN_A}.gz"
+
+LICENSE="GPL-2"
+SLOT="0"
+KEYWORDS="amd64 arm ppc ppc64 ~s390 sparc x86"
+IUSE="selinux tcpd readline pcre"
+
+DEPEND="tcpd? ( sys-apps/tcp-wrappers )
+ readline? ( sys-libs/readline:0= )
+ pcre? ( dev-libs/libpcre )"
+RDEPEND="${DEPEND}
+ !net-ftp/netkit-tftp
+ !net-ftp/tftp-hpa
+ selinux? ( sec-policy/selinux-tftp )"
+
+PATCHES=(
+ "${WORKDIR}/${DEBIAN_A}"
+ "${FILESDIR}/${P}-pcre.patch"
+ "${FILESDIR}/${P}-password.patch"
+ "${FILESDIR}/${P}-tests.patch"
+ "${FILESDIR}/${P}-glibc24.patch"
+ "${FILESDIR}/${P}-blockno.patch"
+ "${FILESDIR}/${P}-spaced_filename.patch"
+ "${FILESDIR}/${P}-illreply.patch"
+ "${FILESDIR}/${P}-CFLAGS.patch"
+)
+
+src_prepare() {
+ append-cppflags -D_REENTRANT -DRATE_CONTROL
+ # fix #561720 by restoring pre-GCC5 inline semantics
+ append-cflags -std=gnu89
+
+ default
+ eautoreconf
+}
+
+src_configure() {
+ econf \
+ $(use_enable tcpd libwrap) \
+ $(use_enable readline libreadline) \
+ $(use_enable pcre libpcre) \
+ --enable-mtftp
+}
+
+src_install() {
+ default
+
+ newinitd "${FILESDIR}"/atftp.init atftp
+ newconfd "${FILESDIR}"/atftp.confd atftp
+
+ systemd_dounit "${FILESDIR}"/atftp.service
+ systemd_install_serviced "${FILESDIR}"/atftp.service.conf
+
+ dodoc README* BUGS FAQ Changelog INSTALL TODO
+ dodoc "${S}"/docs/*
+
+ docinto test
+ cd "${S}"/test || die
+ dodoc load.sh mtftp.conf pcre_pattern.txt test.sh test_suite.txt
+}
diff --git a/net-ftp/atftp/files/atftp-0.7-CFLAGS.patch b/net-ftp/atftp/files/atftp-0.7-CFLAGS.patch
new file mode 100644
index 000000000000..566c1791c591
--- /dev/null
+++ b/net-ftp/atftp/files/atftp-0.7-CFLAGS.patch
@@ -0,0 +1,32 @@
+--- atftp-0.7/configure.ac
++++ atftp-0.7/configure.ac
+@@ -66,29 +66,6 @@
+ dnl Check for AIX
+ AC_AIX
+
+-CFLAGS="-g -Wall -D_REENTRANT"
+-
+-if test x$debug = xtrue; then
+- CFLAGS="$CFLAGS -O0 -DDEBUG"
+-else
+- if test -n "$auto_cflags"; then
+- if test -n "$GCC"; then
+- CFLAGS="$CFLAGS -g -O2 -Wall -Wno-implicit"
+- else
+- case "$host_os" in
+- *hpux*) CFLAGS="$CFLAGS +O3"
+- ;;
+- *ultrix* | *osf*) CFLAGS="$CFLAGS -O -Olimit 2000"
+- ;;
+- *) CFLAGS="$CFLAGS -O2"
+- ;;
+- esac
+- fi
+- else
+- CFLAGS="$CFLAGS -O2"
+- fi
+-fi
+-
+ AC_PROG_MAKE_SET
+ AC_PROG_INSTALL
+
diff --git a/net-ftp/atftp/files/atftp-0.7-blockno.patch b/net-ftp/atftp/files/atftp-0.7-blockno.patch
new file mode 100644
index 000000000000..6a3184f98bec
--- /dev/null
+++ b/net-ftp/atftp/files/atftp-0.7-blockno.patch
@@ -0,0 +1,136 @@
+--- atftp-0.7/tftp_file.c~ 2010-05-27 13:05:12.000000000 -0500
++++ atftp-0.7/tftp_file.c 2010-05-27 12:50:05.000000000 -0500
+@@ -133,19 +133,21 @@
+ int mcast_sockfd = 0;
+ struct sockaddr_in sa_mcast;
+ struct ip_mreq mreq;
+ struct hostent *host;
+ int master_client = 0;
+ unsigned int file_bitmap[NB_BLOCK];
+ int prev_bitmap_hole = -1; /* the previous hole found in the bitmap */
+ char string[MAXLEN];
++ int rx_block_number;
+
+ int prev_block_number = 0; /* needed to support netascii convertion */
+ int temp = 0;
++ size_t ignore;
+
+ data->file_size = 0;
+ tftp_cancel = 0;
+ from.sin_addr.s_addr = 0;
+
+ memset(&sa_mcast, 0, sizeof(struct sockaddr_in));
+ memset(&file_bitmap, 0, sizeof(file_bitmap));
+
+@@ -300,17 +302,17 @@
+ {
+ connect(sockfd, (struct sockaddr *)&sa, sizeof(sa));
+ connected = 1;
+ }
+ state = S_OACK_RECEIVED;
+ break;
+ case GET_ERROR:
+ fprintf(stderr, "tftp: error received from server <");
+- fwrite(tftphdr->th_msg, 1, data_size - 4 - 1, stderr);
++ ignore = fwrite(tftphdr->th_msg, 1, data_size - 4 - 1, stderr);
+ fprintf(stderr, ">\n");
+ state = S_ABORT;
+ break;
+ case GET_DATA:
+ number_of_timeout = 0;
+ /* if the socket if not connected, connect it */
+ if (!connected)
+ {
+@@ -513,21 +515,24 @@
+ state = S_WAIT_PACKET;
+ break;
+ case S_DATA_RECEIVED:
+ if ((multicast && master_client) || (!multicast))
+ timeout_state = S_SEND_ACK;
+ else
+ timeout_state = S_WAIT_PACKET;
+
+- block_number = ntohs(tftphdr->th_block);
++ rx_block_number = ntohs(tftphdr->th_block);
+ if (data->trace)
+ fprintf(stderr, "received DATA <block: %d, size: %d>\n",
+ ntohs(tftphdr->th_block), data_size - 4);
+
++ if ((uint16_t)rx_block_number == (uint16_t)(block_number+1))
++ ++block_number;
++
+ if (tftp_file_write(fp, tftphdr->th_data, data->data_buffer_size - 4, block_number,
+ data_size - 4, convert, &prev_block_number, &temp)
+ != data_size - 4)
+ {
+
+ fprintf(stderr, "tftp: error writing to file %s\n",
+ data->local_file);
+ tftp_send_error(sockfd, &sa, ENOSPACE, data->data_buffer,
+@@ -613,19 +618,21 @@
+ int connected; /* 1 when sockfd is connected */
+ struct tftphdr *tftphdr = (struct tftphdr *)data->data_buffer;
+ FILE *fp; /* the local file pointer */
+ int number_of_timeout = 0;
+ struct stat file_stat;
+ int convert = 0; /* if true, do netascii convertion */
+ char string[MAXLEN];
+
++ int ack_block_number;
+ int prev_block_number = 0; /* needed to support netascii convertion */
+ int prev_file_pos = 0;
+ int temp = 0;
++ size_t ignore;
+
+ data->file_size = 0;
+ tftp_cancel = 0;
+ from.sin_addr.s_addr = 0;
+
+ /* make sure the socket is not connected */
+ sa.sin_family = AF_UNSPEC;
+ connect(sockfd, (struct sockaddr *)&sa, sizeof(sa));
+@@ -759,20 +766,23 @@
+ case GET_ACK:
+ number_of_timeout = 0;
+ /* if the socket if not connected, connect it */
+ if (!connected)
+ {
+ //connect(sockfd, (struct sockaddr *)&sa, sizeof(sa));
+ connected = 1;
+ }
+- block_number = ntohs(tftphdr->th_block);
++ ack_block_number = ntohs(tftphdr->th_block);
++ if ((uint16_t)(block_number+1) == ack_block_number)
++ ++block_number;
+ if (data->trace)
+ fprintf(stderr, "received ACK <block: %d>\n",
+- block_number);
++ ack_block_number);
++
+ if ((last_block != -1) && (block_number > last_block))
+ {
+ state = S_END;
+ break;
+ }
+ state = S_SEND_DATA;
+ break;
+ case GET_OACK:
+@@ -782,17 +792,17 @@
+ {
+ //connect(sockfd, (struct sockaddr *)&sa, sizeof(sa));
+ connected = 1;
+ }
+ state = S_OACK_RECEIVED;
+ break;
+ case GET_ERROR:
+ fprintf(stderr, "tftp: error received from server <");
+- fwrite(tftphdr->th_msg, 1, data_size - 4 - 1, stderr);
++ ignore = fwrite(tftphdr->th_msg, 1, data_size - 4 - 1, stderr);
+ fprintf(stderr, ">\n");
+ state = S_ABORT;
+ break;
+ case GET_DISCARD:
+ /* consider discarded packet as timeout to make sure when don't lock up
+ if routing is broken */
+ number_of_timeout++;
+ fprintf(stderr, "tftp: packet discard <%s:%d>.\n",
diff --git a/net-ftp/atftp/files/atftp-0.7-glibc24.patch b/net-ftp/atftp/files/atftp-0.7-glibc24.patch
new file mode 100644
index 000000000000..195aec69b021
--- /dev/null
+++ b/net-ftp/atftp/files/atftp-0.7-glibc24.patch
@@ -0,0 +1,22 @@
+--- atftp-0.7/stats.c.org
++++ atftp-0.7/stats.c
+@@ -18,6 +18,7 @@
+
+ #include <limits.h>
+ #include <string.h>
++#include <unistd.h>
+ #include "tftp_def.h"
+ #include "stats.h"
+ #include "logger.h"
+@@ -157,8 +158,9 @@
+
+ logger(LOG_INFO, " Load measurements:");
++ long sc_clk_tck = sysconf(_SC_CLK_TCK);
+ logger(LOG_INFO, " User: %8.3fs Sys:%8.3fs",
+- (double)(s_stats.tms.tms_utime) / CLK_TCK,
+- (double)(s_stats.tms.tms_stime) / CLK_TCK);
++ (double)(s_stats.tms.tms_utime) / sc_clk_tck,
++ (double)(s_stats.tms.tms_stime) / sc_clk_tck);
+ logger(LOG_INFO, " Total:%8.3fs CPU:%8.3f%%",
+ (double)(tmp.tv_sec + tmp.tv_usec * 1e-6),
+ (double)(s_stats.tms.tms_utime + s_stats.tms.tms_stime) /
diff --git a/net-ftp/atftp/files/atftp-0.7-illreply.patch b/net-ftp/atftp/files/atftp-0.7-illreply.patch
new file mode 100644
index 000000000000..0f1cacd9b955
--- /dev/null
+++ b/net-ftp/atftp/files/atftp-0.7-illreply.patch
@@ -0,0 +1,12 @@
+*** atftp-0.7/tftp_def.old.c 2009-02-28 17:56:12.000000000 +0100
+--- atftp-0.7/tftp_def.c 2009-02-28 17:57:02.000000000 +0100
+***************
+*** 141,146 ****
+--- 141,147 ----
+ */
+ inline char *Strncpy(char *to, const char *from, size_t size)
+ {
++ if (size <= 0) { *to = '\000'; return to; }
+ to[size-1] = '\000';
+ return strncpy(to, from, size - 1);
+ }
diff --git a/net-ftp/atftp/files/atftp-0.7-password.patch b/net-ftp/atftp/files/atftp-0.7-password.patch
new file mode 100644
index 000000000000..26b59085dde5
--- /dev/null
+++ b/net-ftp/atftp/files/atftp-0.7-password.patch
@@ -0,0 +1,94 @@
+diff -Naur atftp-0.7.orig/tftp.c atftp-0.7/tftp.c
+--- atftp-0.7.orig/tftp.c 2004-03-15 18:55:56.000000000 -0500
++++ atftp-0.7/tftp.c 2005-08-29 21:40:06.000000000 -0400
+@@ -525,6 +525,10 @@
+ fprintf(stderr, " multicast: enabled\n");
+ else
+ fprintf(stderr, " multicast: disabled\n");
++ if (data.tftp_options[OPT_PASSWORD].specified)
++ fprintf(stderr, " password: enabled\n");
++ else
++ fprintf(stderr, " password: disabled\n");
+ return ERR;
+ }
+ /* if disabling an option */
+@@ -971,6 +975,7 @@
+ { "put", 0, NULL, 'p'},
+ { "local-file", 1, NULL, 'l'},
+ { "remote-file", 1, NULL, 'r'},
++ { "password", 1, NULL, 'P'},
+ { "tftp-timeout", 1, NULL, 'T'},
+ { "mode", 1, NULL, 'M'},
+ { "option", 1, NULL, 'O'},
+@@ -993,7 +998,7 @@
+ };
+
+ /* Support old argument until 0.8 */
+- while ((c = getopt_long(argc, argv, /*"gpl:r:Vh"*/ "gpl:r:Vht:b:sm",
++ while ((c = getopt_long(argc, argv, /*"gpl:r:Vh"*/ "gpl:r:Vht:b:smP:",
+ options, &option_index)) != EOF)
+ {
+ switch (c)
+@@ -1028,6 +1033,11 @@
+ else
+ action = PUT;
+ break;
++ case 'P':
++ snprintf(string, sizeof(string), "option password %s", optarg);
++ make_arg(string, &ac, &av);
++ process_cmd(ac, av);
++ break;
+ case 'l':
+ interactive = 0;
+ Strncpy(local_file, optarg, MAXLEN);
+@@ -1169,6 +1179,7 @@
+ " -p, --put : put file\n"
+ " -l, --local-file <file> : local file name\n"
+ " -r, --remote-file <file> : remote file name\n"
++ " -P, --password <password>: specify password (Linksys ext.)\n"
+ " --tftp-timeout <value> : delay before retransmission, client side\n"
+ #if 0
+ " t, --timeout <value> : delay before retransmission, "
+diff -Naur atftp-0.7.orig/tftp_def.c atftp-0.7/tftp_def.c
+--- atftp-0.7.orig/tftp_def.c 2004-02-12 22:16:09.000000000 -0500
++++ atftp-0.7/tftp_def.c 2005-08-29 21:36:57.000000000 -0400
+@@ -37,6 +37,7 @@
+ { "timeout", "5", 0, 1 }, /* 2348, 2349, 2090. */
+ { "blksize", "512", 0, 1 }, /* This is the default option */
+ { "multicast", "", 0, 1 }, /* structure */
++ { "password", "", 0, 1}, /* password */
+ { "", "", 0, 0}
+ };
+
+diff -Naur atftp-0.7.orig/tftp_def.h atftp-0.7/tftp_def.h
+--- atftp-0.7.orig/tftp_def.h 2004-02-12 22:16:09.000000000 -0500
++++ atftp-0.7/tftp_def.h 2005-08-29 20:16:27.000000000 -0400
+@@ -40,6 +40,7 @@
+ #define OPT_TIMEOUT 3
+ #define OPT_BLKSIZE 4
+ #define OPT_MULTICAST 5
++#define OPT_PASSWORD 6
+ #define OPT_NUMBER 7
+
+ #define OPT_SIZE 12
+diff -Naur atftp-0.7.orig/tftp_io.c atftp-0.7/tftp_io.c
+--- atftp-0.7.orig/tftp_io.c 2004-02-18 20:30:00.000000000 -0500
++++ atftp-0.7/tftp_io.c 2005-08-29 22:05:11.000000000 -0400
+@@ -70,10 +70,13 @@
+ break;
+ if (tftp_options[i].enabled && tftp_options[i].specified)
+ {
+- Strncpy(data_buffer + buf_index, tftp_options[i].option,
+- data_buffer_size - buf_index);
+- buf_index += strlen(tftp_options[i].option);
+- buf_index++;
++ if (i != OPT_PASSWORD)
++ {
++ Strncpy(data_buffer + buf_index, tftp_options[i].option,
++ data_buffer_size - buf_index);
++ buf_index += strlen(tftp_options[i].option);
++ buf_index++;
++ }
+ Strncpy(data_buffer + buf_index, tftp_options[i].value,
+ data_buffer_size - buf_index);
+ buf_index += strlen(tftp_options[i].value);
diff --git a/net-ftp/atftp/files/atftp-0.7-pcre.patch b/net-ftp/atftp/files/atftp-0.7-pcre.patch
new file mode 100644
index 000000000000..1f24b67471e2
--- /dev/null
+++ b/net-ftp/atftp/files/atftp-0.7-pcre.patch
@@ -0,0 +1,14 @@
+--- atftp-0.7/tftpd_pcre.c~ 2005-10-17 23:14:52.000000000 +0200
++++ atftp-0.7/tftpd_pcre.c 2005-10-17 23:14:52.000000000 +0200
+@@ -211,9 +211,9 @@
+ chp++; /* point to value indicating substring */
+ rc = pcre_get_substring(str, ovector, matches, *chp - 0x30, &tmpstr);
+ /* found string */
+- if (rc > 0)
++ if (rc > 0 && outchp - outstr + rc+1 < outsize)
+ {
+- Strncpy(outchp, tmpstr, rc);
++ Strncpy(outchp, tmpstr, rc+1);
+ outchp += rc;
+ pcre_free_substring(tmpstr);
+ continue;
diff --git a/net-ftp/atftp/files/atftp-0.7-spaced_filename.patch b/net-ftp/atftp/files/atftp-0.7-spaced_filename.patch
new file mode 100644
index 000000000000..da96d9f6b820
--- /dev/null
+++ b/net-ftp/atftp/files/atftp-0.7-spaced_filename.patch
@@ -0,0 +1,96 @@
+--- atftp-0.7/tftp.c~ 2010-06-03 08:51:14.000000000 -0500
++++ atftp-0.7/tftp.c 2010-06-03 09:40:56.000000000 -0500
+@@ -18,16 +18,17 @@
+ #include "config.h"
+
+ #include <stdio.h>
+ #include <stdlib.h>
+ #include <string.h>
+ #include <unistd.h>
+ #include <getopt.h>
+ #include <string.h>
++#include <stdarg.h>
+
+ #include <sys/types.h>
+ #include <sys/socket.h>
+ #include <netinet/in.h>
+ #include <arpa/inet.h>
+ #include <netdb.h>
+
+ #include <signal.h>
+@@ -344,16 +345,41 @@
+
+ /* If no names matched, then return NULL. */
+ return NULL;
+ }
+ # endif
+ #endif
+
+ /*
++ * set argc/argv from variadic string arguments
++*/
++void make_arg_vector(int *argc, char***argv, ...)
++{
++ char **p;
++ char *s;
++ va_list argp;
++
++ // how many args?
++ *argc = 0;
++ va_start(argp, argv);
++ while ( (s=va_arg(argp, char*)) )
++ ++*argc;
++
++ // allocate storage
++ *argv = malloc(*argc * sizeof (char*));
++
++ // store args
++ p = *argv;
++ va_start(argp, argv);
++ while ( (s=va_arg(argp, char*)) )
++ *p++ = s;
++}
++
++/*
+ * Split a string into args.
+ */
+ void make_arg(char *string, int *argc, char ***argv)
+ {
+ static char *tmp = NULL;
+ size_t argz_len;
+
+ /* split the string to an argz vector */
+@@ -1142,30 +1168,26 @@
+ argv[optind+1]);
+ make_arg(string, &ac, &av);
+ process_cmd(ac, av);
+ }
+
+ if (!interactive)
+ {
+ if (action == PUT)
+- snprintf(string, sizeof(string), "put %s %s", local_file,
+- remote_file);
++ make_arg_vector(&ac,&av,"put",local_file,remote_file,NULL);
+ else if (action == GET)
+- snprintf(string, sizeof(string), "get %s %s", remote_file,
+- local_file);
++ make_arg_vector(&ac,&av,"get",remote_file,local_file,NULL);
+ else if (action == MGET)
+- snprintf(string, sizeof(string), "mget %s %s", remote_file,
+- local_file);
++ make_arg_vector(&ac,&av,"mget",remote_file,local_file,NULL);
+ else
+ {
+ fprintf(stderr, "No action specified in batch mode!\n");
+ exit(ERR);
+ }
+- make_arg(string, &ac, &av);
+ if (process_cmd(ac, av) == ERR)
+ exit(ERR);
+ }
+ return OK;
+ }
+
+ void tftp_usage(void)
+ {
diff --git a/net-ftp/atftp/files/atftp-0.7-tests.patch b/net-ftp/atftp/files/atftp-0.7-tests.patch
new file mode 100644
index 000000000000..9e087950e659
--- /dev/null
+++ b/net-ftp/atftp/files/atftp-0.7-tests.patch
@@ -0,0 +1,23 @@
+diff -Naur atftp-0.7.orig/test/test.sh atftp-0.7/test/test.sh
+--- atftp-0.7.orig/test/test.sh 2003-04-28 21:59:51.000000000 -0400
++++ atftp-0.7/test/test.sh 2005-10-26 22:42:15.000000000 -0400
+@@ -151,7 +151,7 @@
+ test_blocksize 1428
+ test_blocksize 16000
+ test_blocksize 64000
+-test_blocksize 65465
++test_blocksize 65464
+
+ #
+ # testing fot tsize
+@@ -162,9 +162,9 @@
+ TSIZE=`grep "OACK <tsize:" out | sed -e "s/[^0-9]//g"`
+ if [ "$TSIZE" != "2048" ]; then
+ echo "ERROR (server report $TSIZE bytes but it should be 2048)"
++ ERROR=1
+ else
+ echo "OK"
+- ERROR=1
+ fi
+
+ #
diff --git a/net-ftp/atftp/files/atftp.confd b/net-ftp/atftp/files/atftp.confd
new file mode 100644
index 000000000000..a46a7047dbb6
--- /dev/null
+++ b/net-ftp/atftp/files/atftp.confd
@@ -0,0 +1,4 @@
+# Config file for tftp server
+
+TFTPD_ROOT="/tftproot"
+TFTPD_OPTS="--daemon --user nobody --group nobody"
diff --git a/net-ftp/atftp/files/atftp.init b/net-ftp/atftp/files/atftp.init
new file mode 100644
index 000000000000..8ab499127ba4
--- /dev/null
+++ b/net-ftp/atftp/files/atftp.init
@@ -0,0 +1,28 @@
+#!/sbin/openrc-run
+
+depend() {
+ use logger
+ need net
+}
+
+checkconfig() {
+ if [ ! -d ${TFTPD_ROOT} ]
+ then
+ eerror "You need a tftp root directory"
+ return 1
+ fi
+}
+
+start() {
+ checkconfig || return 1
+ ebegin "Starting tftpd"
+ start-stop-daemon --start --quiet --exec /usr/sbin/in.tftpd \
+ -- ${TFTPD_OPTS} ${TFTPD_ROOT}
+ eend $?
+}
+
+stop() {
+ ebegin "Stopping tftpd"
+ start-stop-daemon --stop --quiet --exec /usr/sbin/in.tftpd
+ eend $?
+}
diff --git a/net-ftp/atftp/files/atftp.service b/net-ftp/atftp/files/atftp.service
new file mode 100644
index 000000000000..e6570f63445c
--- /dev/null
+++ b/net-ftp/atftp/files/atftp.service
@@ -0,0 +1,9 @@
+[Unit]
+Description=Advanced TFTP implementation client/server
+After=syslog.target network.target
+
+[Service]
+ExecStart=/usr/sbin/atftpd --daemon --no-fork --user nobody --group nobody $TFTPD_ROOT
+
+[Install]
+WantedBy=multi-user.target
diff --git a/net-ftp/atftp/files/atftp.service.conf b/net-ftp/atftp/files/atftp.service.conf
new file mode 100644
index 000000000000..d8aa19abe32f
--- /dev/null
+++ b/net-ftp/atftp/files/atftp.service.conf
@@ -0,0 +1,2 @@
+[Service]
+Environment="TFTPD_ROOT=/tftproot"
diff --git a/net-ftp/atftp/metadata.xml b/net-ftp/atftp/metadata.xml
new file mode 100644
index 000000000000..cf1190698b2e
--- /dev/null
+++ b/net-ftp/atftp/metadata.xml
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE pkgmetadata SYSTEM "http://www.gentoo.org/dtd/metadata.dtd">
+<pkgmetadata>
+<maintainer type="person">
+<email>klausman@gentoo.org</email>
+</maintainer>
+</pkgmetadata>