aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMichael Tuexen <tuexen@FreeBSD.org>2020-12-18 10:08:11 +0000
committerMichael Tuexen <tuexen@FreeBSD.org>2020-12-18 10:08:11 +0000
commitd2f4118a6d49e712c569e3ae3572959985c9f0c4 (patch)
treed5d5db32228a5edaf5692e452609a6d42eb74739
parentbb4629fa497f2deaa7eb62f84b67262e852a60ff (diff)
downloadsrc-d2f4118a6d49e712c569e3ae3572959985c9f0c4.tar.gz
src-d2f4118a6d49e712c569e3ae3572959985c9f0c4.zip
MFC r368394:
When dropping packets (RRQ or WRQ) for debugging, report the send operation as successful. Reporting a failure stops the transfer instead of using timeouts. MFC r368521: Fix the TFTP client when performing a RRQ for files smaller than 512 bytes and the server not sending an OACK: * Close the file. * Report the correct the number of received blocks. MFC r368647: Improve the counting of blocks used to transfer a file from the server to the client in case of not using an OACK: Don't miss the first block in case of it is not also the last one. MFC r368657: When receiving a file having a length, which is a mulitple of the blocksize, close the file once it is received.
Notes
Notes: svn path=/stable/12/; revision=368755
-rw-r--r--libexec/tftpd/tftp-io.c4
-rw-r--r--libexec/tftpd/tftp-transfer.c6
2 files changed, 6 insertions, 4 deletions
diff --git a/libexec/tftpd/tftp-io.c b/libexec/tftpd/tftp-io.c
index 962fe5579e0f..459a81508e2b 100644
--- a/libexec/tftpd/tftp-io.c
+++ b/libexec/tftpd/tftp-io.c
@@ -190,7 +190,7 @@ send_wrq(int peer, char *filename, char *mode)
filename, mode
);
- DROPPACKETn("send_wrq", 1);
+ DROPPACKETn("send_wrq", 0);
tp = (struct tftphdr *)buf;
tp->th_opcode = htons((u_short)WRQ);
@@ -238,7 +238,7 @@ send_rrq(int peer, char *filename, char *mode)
filename, mode
);
- DROPPACKETn("send_rrq", 1);
+ DROPPACKETn("send_rrq", 0);
tp = (struct tftphdr *)buf;
tp->th_opcode = htons((u_short)RRQ);
diff --git a/libexec/tftpd/tftp-transfer.c b/libexec/tftpd/tftp-transfer.c
index 1d449ea09778..0a0c099e4c33 100644
--- a/libexec/tftpd/tftp-transfer.c
+++ b/libexec/tftpd/tftp-transfer.c
@@ -258,6 +258,7 @@ tftp_receive(int peer, uint16_t *block, struct tftp_stats *ts,
if (firstblock != NULL) {
writesize = write_file(firstblock->th_data, fb_size);
ts->amount += writesize;
+ ts->blocks++;
windowblock++;
if (windowsize == 1 || fb_size != segsize) {
for (i = 0; ; i++) {
@@ -280,6 +281,7 @@ tftp_receive(int peer, uint16_t *block, struct tftp_stats *ts,
}
if (fb_size != segsize) {
+ write_close();
gettimeofday(&(ts->tstop), NULL);
return;
}
@@ -395,9 +397,9 @@ tftp_receive(int peer, uint16_t *block, struct tftp_stats *ts,
send_error(peer, ENOSPACE);
goto abort;
}
- if (n_data != segsize)
- write_close();
}
+ if (n_data != segsize)
+ write_close();
windowblock++;
/* Only send ACKs for the last block in the window. */