diff options
author | Denys Vlasenko <vda.linux@googlemail.com> | 2020-02-13 12:58:46 +0100 |
---|---|---|
committer | Denys Vlasenko <vda.linux@googlemail.com> | 2020-02-13 12:58:46 +0100 |
commit | 260bd21169843fc00ee294a5f75da9e53cb2bc14 (patch) | |
tree | 928a161362d3e7c37cc534f273f19874b8153ba0 | |
parent | bd8b05ba1b0901bbd6a913dfd5186ac7c8beffed (diff) | |
download | busybox-w32-260bd21169843fc00ee294a5f75da9e53cb2bc14.tar.gz busybox-w32-260bd21169843fc00ee294a5f75da9e53cb2bc14.tar.bz2 busybox-w32-260bd21169843fc00ee294a5f75da9e53cb2bc14.zip |
tftpd: show requested file name in open error message
function old new delta
tftp_protocol 1902 1949 +47
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
-rw-r--r-- | networking/tftp.c | 13 |
1 files changed, 11 insertions, 2 deletions
diff --git a/networking/tftp.c b/networking/tftp.c index 04bfe844f..e74186884 100644 --- a/networking/tftp.c +++ b/networking/tftp.c | |||
@@ -402,9 +402,17 @@ static int tftp_protocol( | |||
402 | /* Open file (must be after changing user) */ | 402 | /* Open file (must be after changing user) */ |
403 | local_fd = open(local_file, open_mode, 0666); | 403 | local_fd = open(local_file, open_mode, 0666); |
404 | if (local_fd < 0) { | 404 | if (local_fd < 0) { |
405 | /* sanitize name, it came from untrusted remote side */ | ||
406 | unsigned char *p = (void *) local_file; | ||
407 | while (*p) { | ||
408 | if (*p < ' ') | ||
409 | *p = '?'; | ||
410 | p++; | ||
411 | } | ||
412 | bb_perror_msg("can't open '%s'", local_file); | ||
405 | G_error_pkt_reason = ERR_NOFILE; | 413 | G_error_pkt_reason = ERR_NOFILE; |
406 | strcpy(G_error_pkt_str, "can't open file"); | 414 | strcpy(G_error_pkt_str, "can't open file"); |
407 | goto send_err_pkt; | 415 | goto send_err_pkt_nomsg; |
408 | } | 416 | } |
409 | /* gcc 4.3.1 would NOT optimize it out as it should! */ | 417 | /* gcc 4.3.1 would NOT optimize it out as it should! */ |
410 | #if ENABLE_FEATURE_TFTP_BLOCKSIZE | 418 | #if ENABLE_FEATURE_TFTP_BLOCKSIZE |
@@ -721,7 +729,7 @@ static int tftp_protocol( | |||
721 | * must never resend the current DATA packet on receipt | 729 | * must never resend the current DATA packet on receipt |
722 | * of a duplicate ACK". | 730 | * of a duplicate ACK". |
723 | * DATA pkts are resent ONLY on timeout. | 731 | * DATA pkts are resent ONLY on timeout. |
724 | * Thus "goto send_again" will ba a bad mistake above. | 732 | * Thus "goto send_again" will be a bad mistake above. |
725 | * See: | 733 | * See: |
726 | * http://en.wikipedia.org/wiki/Sorcerer's_Apprentice_Syndrome | 734 | * http://en.wikipedia.org/wiki/Sorcerer's_Apprentice_Syndrome |
727 | */ | 735 | */ |
@@ -740,6 +748,7 @@ static int tftp_protocol( | |||
740 | send_err_pkt: | 748 | send_err_pkt: |
741 | if (G_error_pkt_str[0]) | 749 | if (G_error_pkt_str[0]) |
742 | bb_simple_error_msg(G_error_pkt_str); | 750 | bb_simple_error_msg(G_error_pkt_str); |
751 | send_err_pkt_nomsg: | ||
743 | G.error_pkt[1] = TFTP_ERROR; | 752 | G.error_pkt[1] = TFTP_ERROR; |
744 | xsendto(socket_fd, G.error_pkt, 4 + 1 + strlen(G_error_pkt_str), | 753 | xsendto(socket_fd, G.error_pkt, 4 + 1 + strlen(G_error_pkt_str), |
745 | &peer_lsa->u.sa, peer_lsa->len); | 754 | &peer_lsa->u.sa, peer_lsa->len); |