diff --git a/src/xpdev/multisock.c b/src/xpdev/multisock.c index 8f5f48cb55098230ed7df333a24fa21cc9e291f7..73877213d3654372a87bd953423f857bdef7fcd1 100644 --- a/src/xpdev/multisock.c +++ b/src/xpdev/multisock.c @@ -301,7 +301,7 @@ static BOOL read_socket_line(SOCKET sock, char *buffer, size_t buflen, int (*lpr if (read_socket(sock, &buffer[i], 1, lprintf)) { switch(buffer[i]) { case 0: - return (strlen(buffer) > 0); + return TRUE; case '\n': buffer[i+1] = '\0'; return TRUE; @@ -309,12 +309,12 @@ static BOOL read_socket_line(SOCKET sock, char *buffer, size_t buflen, int (*lpr } else { buffer[i] = 0; - return (strlen(buffer) > 0); + return FALSE; } } buffer[i] = 0; - return TRUE; + return FALSE; } SOCKET DLLCALL xpms_accept(struct xpms_set *xpms_set, union xp_sockaddr * addr, @@ -371,9 +371,12 @@ SOCKET DLLCALL xpms_accept(struct xpms_set *xpms_set, union xp_sockaddr * addr, xpms_set->lprintf(LOG_DEBUG,"%04d Working out client address from HAProxy PROTO",ret); // Read the first line + // In normal proxy usage, we shouldnt fail here - but if there is a badly implemented HAPROXY PROTO + // or the user attempts to connect direct to the BBS (not via the proxy) there could be anything + // received (IAC sequences, SSH setup, or just badness) if (! read_socket_line(ret, hapstr, 108, xpms_set->lprintf)) { - btox(haphex,hapstr,108,sizeof(haphex), xpms_set->lprintf); - xpms_set->lprintf(LOG_ERR,"%04d * HAPROXY looking for version - failed [%s]",ret,hapstr); + btox(haphex,hapstr,strlen(hapstr),sizeof(haphex), xpms_set->lprintf); + xpms_set->lprintf(LOG_ERR,"%04d * HAPROXY looking for version - failed [%s]",ret,haphex); closesocket(ret); return INVALID_SOCKET; }