Date: Wed, 24 Oct 2007 14:14:27 GMT From: Spencer Minear <minear@securecomputing.com> To: freebsd-gnats-submit@FreeBSD.org Subject: bin/117452: The fix for PR 103206 is incorrect Message-ID: <200710241414.l9OEERSE000508@www.freebsd.org> Resent-Message-ID: <200710241420.l9OEK2sx050090@freefall.freebsd.org>
next in thread | raw e-mail | index | archive | help
>Number: 117452 >Category: bin >Synopsis: The fix for PR 103206 is incorrect >Confidential: no >Severity: non-critical >Priority: low >Responsible: freebsd-bugs >State: open >Quarter: >Keywords: >Date-Required: >Class: sw-bug >Submitter-Id: current-users >Arrival-Date: Wed Oct 24 14:20:02 UTC 2007 >Closed-Date: >Last-Modified: >Originator: Spencer Minear >Release: 6.2 >Organization: Secure Computing Corporation >Environment: FreeBSD freebe1.scur.com 6.2-RELEASE FreeBSD 6.2-RELEASE #0: Fri Jan 12 10:40:27 UTC 2007 root@dessler.cse.buffalo.edu:/usr/obj/usr/src/sys/GENERIC i386 >Description: The change that was made for PR 103206 results in tftp returns an error code even if a send operation succeeds. The txrx_error = 1 that was added at the end of the processing needs to be placed at each point where and abort is detected. >How-To-Repeat: Use tftp to download a file and check the error status you will find that it sets the error status to 1 even when the file is successfully downloaded. Before the fix the following occurs: echo "get configs/10.69.222.75.cfg" | ./tftp 10.69.222.30 Received 963 bytes in 0.0 seconds alpha:Admn {14} % echo $? 1 After the fix I've proposed the same command has a 0 exit code. alpha:Admn {11} % echo "get configs/10.69.222.75.cfg" | tftp 10.69.222.30 Received 963 bytes in 0.0 seconds alpha:Admn {12} % echo $? 0 >Fix: % diff -c /usr/src/usr.bin/tftp/tftp.c . *** /usr/src/usr.bin/tftp/tftp.c Mon Oct 2 13:43:57 2006 --- ./tftp.c Wed Sep 19 10:58:23 2007 *************** *** 143,148 **** --- 143,149 ---- (struct sockaddr *)&peer, peer.ss_len); if (n != size + 4) { warn("sendto"); + txrx_error = 1; goto abort; } read_ahead(file, convert); *************** *** 156,161 **** --- 157,163 ---- alarm(0); if (n < 0) { warn("recvfrom"); + txrx_error = 1; goto abort; } if (!serv.ss_family) *************** *** 163,168 **** --- 165,171 ---- else if (!cmpport((struct sockaddr *)&serv, (struct sockaddr *)&from)) { warn("server port mismatch"); + txrx_error = 1; goto abort; } peer = from; *************** *** 205,211 **** stopclock(); if (amount > 0) printstats("Sent", amount); - txrx_error = 1; } /* --- 208,213 ---- *************** *** 261,266 **** --- 263,269 ---- peer.ss_len) != size) { alarm(0); warn("sendto"); + txrx_error = 1; goto abort; } write_behind(file, convert); *************** *** 274,279 **** --- 277,283 ---- alarm(0); if (n < 0) { warn("recvfrom"); + txrx_error = 1; goto abort; } if (!serv.ss_family) *************** *** 281,286 **** --- 285,291 ---- else if (!cmpport((struct sockaddr *)&serv, (struct sockaddr *)&from)) { warn("server port mismatch"); + txrx_error = 1; goto abort; } peer = from; *************** *** 331,337 **** stopclock(); if (amount > 0) printstats("Received", amount); - txrx_error = 1; } static int --- 336,341 ---- >Release-Note: >Audit-Trail: >Unformatted:
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?200710241414.l9OEERSE000508>