Tftp code tweaks.

This commit is contained in:
Simon Kelley
2025-05-24 21:11:11 +01:00
parent 90b248582c
commit e7b87dee85

View File

@@ -198,10 +198,10 @@ static void tftp_request(struct listener *listen, time_t now)
name = namebuff; name = namebuff;
addra.addr4 = addr.in.sin_addr;
if (family == AF_INET6) if (family == AF_INET6)
addra.addr6 = addr.in6.sin6_addr; addra.addr6 = addr.in6.sin6_addr;
else
addra.addr4 = addr.in.sin_addr;
if (daemon->tftp_interfaces) if (daemon->tftp_interfaces)
{ {
@@ -679,7 +679,6 @@ void check_tftp_listeners(time_t now)
/* Do transmission or re-transmission. When we get an ACK, the call to handle_tftp() /* Do transmission or re-transmission. When we get an ACK, the call to handle_tftp()
bumps transfer->lastack and trips the retransmit timer so that we send the next block(s) bumps transfer->lastack and trips the retransmit timer so that we send the next block(s)
here. */ here. */
unsigned int i, winsize;
ssize_t len; ssize_t len;
transfer->retransmit += transfer->timeout + (1<<(transfer->backoff/2)); transfer->retransmit += transfer->timeout + (1<<(transfer->backoff/2));
@@ -691,10 +690,7 @@ void check_tftp_listeners(time_t now)
else else
{ {
/* send a window'a worth of blocks unless we're retransmitting OACK */ /* send a window'a worth of blocks unless we're retransmitting OACK */
winsize = transfer->block ? transfer->windowsize : 1; unsigned int i, winsize = transfer->block ? transfer->windowsize : 1;
/* we overwrote the buffer... */
daemon->srv_save = NULL;
for (i = 0; i < winsize && !endcon; i++, transfer->block++) for (i = 0; i < winsize && !endcon; i++, transfer->block++)
{ {
@@ -861,6 +857,9 @@ static ssize_t tftp_err(int err, char *packet, char *message, char *file, char *
} *mess = (struct errmess *)packet; } *mess = (struct errmess *)packet;
ssize_t len, ret = 4; ssize_t len, ret = 4;
/* we overwrote the buffer... */
daemon->srv_save = NULL;
memset(packet, 0, daemon->packet_buff_sz); memset(packet, 0, daemon->packet_buff_sz);
if (file) if (file)
sanitise(file); sanitise(file);
@@ -889,6 +888,9 @@ static ssize_t get_block(char *packet, struct tftp_transfer *transfer)
{ {
memset(packet, 0, daemon->packet_buff_sz); memset(packet, 0, daemon->packet_buff_sz);
/* we overwrote the buffer... */
daemon->srv_save = NULL;
if (transfer->block == 0) if (transfer->block == 0)
{ {
/* send OACK */ /* send OACK */