On Wed, Jun 24, 2009, Chris Bare wrote:

> > I'm following the example client on:
> > http://linux.die.net/man/3/bio_new_ssl_connect
> > 
> > I am able to establish the ssl connection and send data, but when I go to do
> > BIO_read, I get this error:
> > 
> > error:140950D3:SSL routines:SSL3_READ_N:read bio not set
> > 
> > I can see with wireshark that the server is sending back some data, but
> > BIO_read returns -1.
> > 
> 
> with further debugging I find that the ssl object's rbio and wbio fields are
> nulled out after calling:
> 
> i2d_CMS_bio_stream(output, cms, mem, flags));
> 
> Any idea why that would be?
> 
> Here's a distilled version of the code:
> 
>               ctx = SSL_CTX_new(SSLv23_client_method());
>               output = BIO_new_ssl_connect(ctx);
>               BIO_get_ssl(output, &ssl);
>               SSL_set_mode(ssl, SSL_MODE_AUTO_RETRY);
>               BIO_set_conn_hostname(output, host);
>               if(BIO_do_connect(output) <= 0)
>                       //handle
>               if ((use_ssl) && (SSL_get_verify_result(ssl) != X509_V_OK))
>                       //handle
>               if ((use_ssl) && (BIO_do_handshake(output) <= 0))
>                       //handle
> 
>               int flags = CMS_STREAM|CMS_NOSMIMECAP;
> 
>                       cms = CMS_sign(NULL, NULL, NULL, mem, flags);
>               if (!CMS_add1_signer(cms, scert, skey, NULL, flags))
>                       //handle
> 
>               printf ("ssl->rbio %p\n", ssl->rbio);
>               printf ("ssl->wbio %p\n", ssl->wbio);
>               if (!i2d_CMS_bio_stream(output, cms, mem, flags))
>                       printf ("error writing output\n");      
>               printf ("i2d_CMS_bio_stream");
>               printf ("ssl->rbio %p\n", ssl->rbio);
>               printf ("ssl->wbio %p\n", ssl->wbio);
> 
> 
> output is:
> ssl->rbio 0x1aadf60
> ssl->wbio 0x1aadf60
> i2d_CMS_bio_stream
> ssl->rbio (nil)
> ssl->wbio (nil)
> 
> So naturally, after that the next call to BIO_read (output) fails.
> 
> why would the bio's be getting set to null?
> Is there some other flag or function I need to use to prevent this?
> 

A fix has now been applied, please try the current 1.0.0 CVS, get the next
snapshot or just manually apply:

http://cvs.openssl.org/chngview?cn=18310

Steve.
--
Dr Stephen N. Henson. Email, S/MIME and PGP keys: see homepage
OpenSSL project core developer and freelance consultant.
Homepage: http://www.drh-consultancy.demon.co.uk
______________________________________________________________________
OpenSSL Project                                 http://www.openssl.org
User Support Mailing List                    openssl-users@openssl.org
Automated List Manager                           majord...@openssl.org

Reply via email to