projects
/
oweals
/
openssl.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
PR: 2223
[oweals/openssl.git]
/
ssl
/
bio_ssl.c
diff --git
a/ssl/bio_ssl.c
b/ssl/bio_ssl.c
index ae99a6aceb0ab888ddba9b637feddb8abb697c6b..420deb7fc966b656651766aa984d5f3eaf369cc7 100644
(file)
--- a/
ssl/bio_ssl.c
+++ b/
ssl/bio_ssl.c
@@
-71,7
+71,7
@@
static int ssl_puts(BIO *h, const char *str);
static long ssl_ctrl(BIO *h, int cmd, long arg1, void *arg2);
static int ssl_new(BIO *h);
static int ssl_free(BIO *data);
static long ssl_ctrl(BIO *h, int cmd, long arg1, void *arg2);
static int ssl_new(BIO *h);
static int ssl_free(BIO *data);
-static long ssl_callback_ctrl(BIO *h, int cmd,
void (*fp)()
);
+static long ssl_callback_ctrl(BIO *h, int cmd,
bio_info_cb *fp
);
typedef struct bio_ssl_st
{
SSL *ssl; /* The ssl handle :-) */
typedef struct bio_ssl_st
{
SSL *ssl; /* The ssl handle :-) */
@@
-105,7
+105,7
@@
static int ssl_new(BIO *bi)
{
BIO_SSL *bs;
{
BIO_SSL *bs;
- bs=(BIO_SSL *)
M
alloc(sizeof(BIO_SSL));
+ bs=(BIO_SSL *)
OPENSSL_m
alloc(sizeof(BIO_SSL));
if (bs == NULL)
{
BIOerr(BIO_F_SSL_NEW,ERR_R_MALLOC_FAILURE);
if (bs == NULL)
{
BIOerr(BIO_F_SSL_NEW,ERR_R_MALLOC_FAILURE);
@@
-133,7
+133,7
@@
static int ssl_free(BIO *a)
a->flags=0;
}
if (a->ptr != NULL)
a->flags=0;
}
if (a->ptr != NULL)
-
F
ree(a->ptr);
+
OPENSSL_f
ree(a->ptr);
return(1);
}
return(1);
}
@@
-206,6
+206,10
@@
static int ssl_read(BIO *b, char *out, int outl)
BIO_set_retry_special(b);
retry_reason=BIO_RR_SSL_X509_LOOKUP;
break;
BIO_set_retry_special(b);
retry_reason=BIO_RR_SSL_X509_LOOKUP;
break;
+ case SSL_ERROR_WANT_ACCEPT:
+ BIO_set_retry_special(b);
+ retry_reason=BIO_RR_ACCEPT;
+ break;
case SSL_ERROR_WANT_CONNECT:
BIO_set_retry_special(b);
retry_reason=BIO_RR_CONNECT;
case SSL_ERROR_WANT_CONNECT:
BIO_set_retry_special(b);
retry_reason=BIO_RR_CONNECT;
@@
-399,6
+403,10
@@
static long ssl_ctrl(BIO *b, int cmd, long num, void *ptr)
{
BIO_free_all(ssl->wbio);
}
{
BIO_free_all(ssl->wbio);
}
+ if (b->next_bio != NULL)
+ {
+ CRYPTO_add(&b->next_bio->references,1,CRYPTO_LOCK_BIO);
+ }
ssl->wbio=NULL;
ssl->rbio=NULL;
break;
ssl->wbio=NULL;
ssl->rbio=NULL;
break;
@@
-448,7
+456,7
@@
static long ssl_ctrl(BIO *b, int cmd, long num, void *ptr)
case BIO_CTRL_SET_CALLBACK:
{
#if 0 /* FIXME: Should this be used? -- Richard Levitte */
case BIO_CTRL_SET_CALLBACK:
{
#if 0 /* FIXME: Should this be used? -- Richard Levitte */
-
BIO
err(SSL_F_SSL_CTRL, ERR_R_SHOULD_NOT_HAVE_BEEN_CALLED);
+
SSL
err(SSL_F_SSL_CTRL, ERR_R_SHOULD_NOT_HAVE_BEEN_CALLED);
ret = -1;
#else
ret=0;
ret = -1;
#else
ret=0;
@@
-457,9
+465,9
@@
static long ssl_ctrl(BIO *b, int cmd, long num, void *ptr)
break;
case BIO_CTRL_GET_CALLBACK:
{
break;
case BIO_CTRL_GET_CALLBACK:
{
- void (**fptr)();
+ void (**fptr)(
const SSL *xssl,int type,int val
);
- fptr=(void (**)())ptr;
+ fptr=(void (**)(
const SSL *xssl,int type,int val
))ptr;
*fptr=SSL_get_info_callback(ssl);
}
break;
*fptr=SSL_get_info_callback(ssl);
}
break;
@@
-470,7
+478,7
@@
static long ssl_ctrl(BIO *b, int cmd, long num, void *ptr)
return(ret);
}
return(ret);
}
-static long ssl_callback_ctrl(BIO *b, int cmd,
void (*fp)()
)
+static long ssl_callback_ctrl(BIO *b, int cmd,
bio_info_cb *fp
)
{
SSL *ssl;
BIO_SSL *bs;
{
SSL *ssl;
BIO_SSL *bs;
@@
-482,7
+490,9
@@
static long ssl_callback_ctrl(BIO *b, int cmd, void (*fp)())
{
case BIO_CTRL_SET_CALLBACK:
{
{
case BIO_CTRL_SET_CALLBACK:
{
- SSL_set_info_callback(ssl,fp);
+ /* FIXME: setting this via a completely different prototype
+ seems like a crap idea */
+ SSL_set_info_callback(ssl,(void (*)(const SSL *,int,int))fp);
}
break;
default:
}
break;
default:
@@
-503,6
+513,7
@@
static int ssl_puts(BIO *bp, const char *str)
BIO *BIO_new_buffer_ssl_connect(SSL_CTX *ctx)
{
BIO *BIO_new_buffer_ssl_connect(SSL_CTX *ctx)
{
+#ifndef OPENSSL_NO_SOCK
BIO *ret=NULL,*buf=NULL,*ssl=NULL;
if ((buf=BIO_new(BIO_f_buffer())) == NULL)
BIO *ret=NULL,*buf=NULL,*ssl=NULL;
if ((buf=BIO_new(BIO_f_buffer())) == NULL)
@@
-515,6
+526,7
@@
BIO *BIO_new_buffer_ssl_connect(SSL_CTX *ctx)
err:
if (buf != NULL) BIO_free(buf);
if (ssl != NULL) BIO_free(ssl);
err:
if (buf != NULL) BIO_free(buf);
if (ssl != NULL) BIO_free(ssl);
+#endif
return(NULL);
}
return(NULL);
}