Fix infinite loop on s_client starttls xmpp
* When the host used in "-connect" is not what the remote XMPP server expects the server will return an error like this: <stream:error> <host-unknown xmlns='urn:ietf:params:xml:ns:xmpp-streams'/> </stream:error> * But the actual code will stay on the loop forever because the stop condition "/stream:features>" will never happen, * Make this more robust: The stop condition should be that BIO_read failed * Test if for example with :: openssl s_client -connect random.jabb3r.net:5222 -starttls xmpp
This commit is contained in:
parent
4e48c77572
commit
4249d4ba86
@ -1676,9 +1676,11 @@ SSL_set_tlsext_status_ids(con, ids);
|
|||||||
while (!strstr(mbuf, "<starttls xmlns='urn:ietf:params:xml:ns:xmpp-tls'") &&
|
while (!strstr(mbuf, "<starttls xmlns='urn:ietf:params:xml:ns:xmpp-tls'") &&
|
||||||
!strstr(mbuf, "<starttls xmlns=\"urn:ietf:params:xml:ns:xmpp-tls\""))
|
!strstr(mbuf, "<starttls xmlns=\"urn:ietf:params:xml:ns:xmpp-tls\""))
|
||||||
{
|
{
|
||||||
if (strstr(mbuf, "/stream:features>"))
|
|
||||||
goto shut;
|
|
||||||
seen = BIO_read(sbio,mbuf,BUFSIZZ);
|
seen = BIO_read(sbio,mbuf,BUFSIZZ);
|
||||||
|
|
||||||
|
if (seen <= 0)
|
||||||
|
goto shut;
|
||||||
|
|
||||||
mbuf[seen] = 0;
|
mbuf[seen] = 0;
|
||||||
}
|
}
|
||||||
BIO_printf(sbio, "<starttls xmlns='urn:ietf:params:xml:ns:xmpp-tls'/>");
|
BIO_printf(sbio, "<starttls xmlns='urn:ietf:params:xml:ns:xmpp-tls'/>");
|
||||||
|
Loading…
x
Reference in New Issue
Block a user