Skip site navigation (1)Skip section navigation (2)
Date:      Fri, 18 Dec 2020 10:08:12 +0000 (UTC)
From:      Michael Tuexen <tuexen@FreeBSD.org>
To:        src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-stable@freebsd.org, svn-src-stable-12@freebsd.org
Subject:   svn commit: r368755 - stable/12/libexec/tftpd
Message-ID:  <202012181008.0BIA8CAV012639@repo.freebsd.org>

next in thread | raw e-mail | index | archive | help
Author: tuexen
Date: Fri Dec 18 10:08:11 2020
New Revision: 368755
URL: https://svnweb.freebsd.org/changeset/base/368755

Log:
  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.

Modified:
  stable/12/libexec/tftpd/tftp-io.c
  stable/12/libexec/tftpd/tftp-transfer.c
Directory Properties:
  stable/12/   (props changed)

Modified: stable/12/libexec/tftpd/tftp-io.c
==============================================================================
--- stable/12/libexec/tftpd/tftp-io.c	Fri Dec 18 08:43:06 2020	(r368754)
+++ stable/12/libexec/tftpd/tftp-io.c	Fri Dec 18 10:08:11 2020	(r368755)
@@ -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);

Modified: stable/12/libexec/tftpd/tftp-transfer.c
==============================================================================
--- stable/12/libexec/tftpd/tftp-transfer.c	Fri Dec 18 08:43:06 2020	(r368754)
+++ stable/12/libexec/tftpd/tftp-transfer.c	Fri Dec 18 10:08:11 2020	(r368755)
@@ -258,6 +258,7 @@ tftp_receive(int peer, uint16_t *block, struct tftp_st
 	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_st
 		}
 
 		if (fb_size != segsize) {
+			write_close();
 			gettimeofday(&(ts->tstop), NULL);
 			return;
 		}
@@ -395,9 +397,9 @@ tftp_receive(int peer, uint16_t *block, struct tftp_st
 					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. */



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?202012181008.0BIA8CAV012639>