From: Alan T. DeKok Date: Wed, 28 Jul 2021 11:33:20 +0000 (-0400) Subject: let's scan the newly read data, too X-Git-Tag: release_3_0_24~100 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=8aa7899eeae14901928e3a14c41df9c5e63e85cf;p=thirdparty%2Ffreeradius-server.git let's scan the newly read data, too --- diff --git a/src/main/tls_listen.c b/src/main/tls_listen.c index f76ae0cddd7..b8de565b2a8 100644 --- a/src/main/tls_listen.c +++ b/src/main/tls_listen.c @@ -130,8 +130,10 @@ static int proxy_protocol_check(rad_listen_t *listener, REQUEST *request) int af, argc, src_port, dst_port; unsigned long num; fr_ipaddr_t src, dst; + bool retry = false; char *argv[5], *eos; +rescan: p = sock->ssn->dirty_in.data; /* @@ -172,6 +174,8 @@ static int proxy_protocol_check(rad_listen_t *listener, REQUEST *request) if (!eol) { ssize_t rcode; + if (retry) return 0; + rcode = read(request->packet->sockfd, sock->ssn->dirty_in.data + sock->ssn->dirty_in.used, sizeof(sock->ssn->dirty_in.data) - sock->ssn->dirty_in.used); @@ -180,6 +184,13 @@ static int proxy_protocol_check(rad_listen_t *listener, REQUEST *request) DEBUG("Closing TLS PROXY socket from client port %u due to read error - %s", sock->other_port, fr_syserror(errno)); return -1; } + + /* + * We have more data, go scan the buffer again for EOL + */ + sock->ssn->dirty_in.used += rcode; + retry = true; + goto rescan; } p = sock->ssn->dirty_in.data;