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>
This commit is contained in:
parent
bd8b05ba1b
commit
260bd21169
@ -402,9 +402,17 @@ static int tftp_protocol(
|
|||||||
/* Open file (must be after changing user) */
|
/* Open file (must be after changing user) */
|
||||||
local_fd = open(local_file, open_mode, 0666);
|
local_fd = open(local_file, open_mode, 0666);
|
||||||
if (local_fd < 0) {
|
if (local_fd < 0) {
|
||||||
|
/* sanitize name, it came from untrusted remote side */
|
||||||
|
unsigned char *p = (void *) local_file;
|
||||||
|
while (*p) {
|
||||||
|
if (*p < ' ')
|
||||||
|
*p = '?';
|
||||||
|
p++;
|
||||||
|
}
|
||||||
|
bb_perror_msg("can't open '%s'", local_file);
|
||||||
G_error_pkt_reason = ERR_NOFILE;
|
G_error_pkt_reason = ERR_NOFILE;
|
||||||
strcpy(G_error_pkt_str, "can't open file");
|
strcpy(G_error_pkt_str, "can't open file");
|
||||||
goto send_err_pkt;
|
goto send_err_pkt_nomsg;
|
||||||
}
|
}
|
||||||
/* gcc 4.3.1 would NOT optimize it out as it should! */
|
/* gcc 4.3.1 would NOT optimize it out as it should! */
|
||||||
#if ENABLE_FEATURE_TFTP_BLOCKSIZE
|
#if ENABLE_FEATURE_TFTP_BLOCKSIZE
|
||||||
@ -721,7 +729,7 @@ static int tftp_protocol(
|
|||||||
* must never resend the current DATA packet on receipt
|
* must never resend the current DATA packet on receipt
|
||||||
* of a duplicate ACK".
|
* of a duplicate ACK".
|
||||||
* DATA pkts are resent ONLY on timeout.
|
* DATA pkts are resent ONLY on timeout.
|
||||||
* Thus "goto send_again" will ba a bad mistake above.
|
* Thus "goto send_again" will be a bad mistake above.
|
||||||
* See:
|
* See:
|
||||||
* http://en.wikipedia.org/wiki/Sorcerer's_Apprentice_Syndrome
|
* http://en.wikipedia.org/wiki/Sorcerer's_Apprentice_Syndrome
|
||||||
*/
|
*/
|
||||||
@ -740,6 +748,7 @@ static int tftp_protocol(
|
|||||||
send_err_pkt:
|
send_err_pkt:
|
||||||
if (G_error_pkt_str[0])
|
if (G_error_pkt_str[0])
|
||||||
bb_simple_error_msg(G_error_pkt_str);
|
bb_simple_error_msg(G_error_pkt_str);
|
||||||
|
send_err_pkt_nomsg:
|
||||||
G.error_pkt[1] = TFTP_ERROR;
|
G.error_pkt[1] = TFTP_ERROR;
|
||||||
xsendto(socket_fd, G.error_pkt, 4 + 1 + strlen(G_error_pkt_str),
|
xsendto(socket_fd, G.error_pkt, 4 + 1 + strlen(G_error_pkt_str),
|
||||||
&peer_lsa->u.sa, peer_lsa->len);
|
&peer_lsa->u.sa, peer_lsa->len);
|
||||||
|
Loading…
Reference in New Issue
Block a user