SHA256
1
0
forked from pool/atftp

Accepting request 93259 from home:vitezslav_cizek:branches:network

- licence in spdx format
- fixed the "Sorcerer's Apprentice Syndrome" bug
  (bnc#727843)

OBS-URL: https://build.opensuse.org/request/show/93259
OBS-URL: https://build.opensuse.org/package/show/network/atftp?expand=0&rev=11
This commit is contained in:
Pavol Rusnak 2011-11-23 14:38:35 +00:00 committed by Git OBS Bridge
parent 1abbc5a8fc
commit a0ad000cb3
3 changed files with 99 additions and 2 deletions

View File

@ -0,0 +1,84 @@
Index: atftp-0.7/tftp_file.c
===================================================================
--- atftp-0.7.orig/tftp_file.c 2011-11-22 15:12:53.792744083 +0100
+++ atftp-0.7/tftp_file.c 2011-11-22 15:13:51.706421893 +0100
@@ -605,6 +605,7 @@
int timeout_state = state; /* what state should we go on when timeout */
int result;
long block_number = 0;
+ long last_requested_block = -1;
long last_block = -1;
int data_size; /* size of data received */
int sockfd = data->sockfd; /* just to simplify calls */
@@ -765,6 +766,17 @@
connected = 1;
}
block_number = ntohs(tftphdr->th_block);
+
+ if (last_requested_block >= block_number)
+ {
+ if (data->trace)
+ fprintf(stderr, "received duplicated ACK <block: %ld >= %ld>\n",
+ last_requested_block, block_number);
+ break;
+ }
+ else
+ last_requested_block = block_number;
+
if (data->trace)
fprintf(stderr, "received ACK <block: %ld>\n",
block_number);
Index: atftp-0.7/tftpd_file.c
===================================================================
--- atftp-0.7.orig/tftpd_file.c 2011-11-22 15:12:53.793744112 +0100
+++ atftp-0.7/tftpd_file.c 2011-11-22 15:15:04.617534260 +0100
@@ -403,6 +403,7 @@
int timeout_state = state;
int result;
long block_number = 0;
+ long last_requested_block = -1;
long last_block = -1;
int block_loops = 0;
int data_size;
@@ -859,6 +860,32 @@
{
logger(LOG_DEBUG, "received ACK <block: %d>", block_number);
}
+
+ /* check whether the block request isn't already fulfilled */
+
+ /* multicast, block numbers could contain gaps */
+ if (multicast) {
+ if (last_requested_block >= block_number)
+ {
+ if (data->trace)
+ logger(LOG_DEBUG, "received duplicated ACK <block: %d >= %d>", last_requested_block, block_number);
+ break;
+ }
+ else
+ last_requested_block = block_number;
+ /* unicast, blocks should be requested one after another */
+ } else {
+ if (last_requested_block + 1 != block_number && last_requested_block != -1)
+ {
+ if (data->trace)
+ logger(LOG_DEBUG, "received out of order ACK <block: %d != %d>", last_requested_block + 1, block_number);
+ break;
+ }
+ else
+ last_requested_block = block_number;
+ }
+
+
if (ntohs(tftphdr->th_block) == 65535)
{
block_loops++;
@@ -958,6 +985,8 @@
/* nedd to send an oack to that client */
state = S_SEND_OACK;
fseek(fp, 0, SEEK_SET);
+ /* reset the last block received counter */
+ last_requested_block = -1;
}
else
{

View File

@ -1,3 +1,14 @@
-------------------------------------------------------------------
Wed Nov 9 15:13:18 UTC 2011 - vcizek@suse.com
- licence in spdx format
-------------------------------------------------------------------
Thu Nov 3 16:56:46 UTC 2011 - vcizek@suse.com
- fixed the "Sorcerer's Apprentice Syndrome" bug
(bnc#727843)
-------------------------------------------------------------------
Sat Sep 17 13:28:52 UTC 2011 - jengelh@medozas.de

View File

@ -22,7 +22,7 @@ Name: atftp
Summary: Advanced TFTP Server and Client
Version: 0.7.0
Release: 145
License: GPLv2+
License: GPL-2.0+
Group: System/Daemons
Url: ftp://ftp.mamalinux.com/pub/atftp/
Source: %{name}-%{pkg_version}.tar.bz2
@ -37,10 +37,11 @@ Patch5: atftp-0.7_sol_ip.patch
Patch6: atftp-0.7_bug-213384_OPT_NUMBER.patch
Patch7: atftpd-0.7_unprotected_assignments_crash.patch
Patch8: atftpd-0.7_circumvent_tftp_size_restrictions.patch
# PATCH-FIX-SUSE sorcerer's apprentice syndrom (bnc#727843)
Patch9: atftp-0.7-sorcerers_apprentice.patch
BuildRoot: %{_tmppath}/%{name}-%{version}-build
PreReq: %insserv_prereq %fillup_prereq
PreReq: pwdutils
BuildRequires: pwdutils
BuildRequires: pcre-devel readline-devel tcpd-devel
Conflicts: tftp
Recommends: logrotate
@ -64,6 +65,7 @@ boot of hundreds of machines simultaneously.
%patch6
%patch7
%patch8
%patch9 -p1
%build
autoreconf -fi