diff options
Diffstat (limited to 'src/lib/libssl/bio_ssl.c')
| -rw-r--r-- | src/lib/libssl/bio_ssl.c | 33 |
1 files changed, 32 insertions, 1 deletions
diff --git a/src/lib/libssl/bio_ssl.c b/src/lib/libssl/bio_ssl.c index f62cde4e5d..d73c41adcd 100644 --- a/src/lib/libssl/bio_ssl.c +++ b/src/lib/libssl/bio_ssl.c | |||
| @@ -71,6 +71,7 @@ static int ssl_puts(BIO *h,char *str); | |||
| 71 | static long ssl_ctrl(BIO *h,int cmd,long arg1,char *arg2); | 71 | static long ssl_ctrl(BIO *h,int cmd,long arg1,char *arg2); |
| 72 | static int ssl_new(BIO *h); | 72 | static int ssl_new(BIO *h); |
| 73 | static int ssl_free(BIO *data); | 73 | static int ssl_free(BIO *data); |
| 74 | static long ssl_callback_ctrl(BIO *h,int cmd,void (*fp)()); | ||
| 74 | typedef struct bio_ssl_st | 75 | typedef struct bio_ssl_st |
| 75 | { | 76 | { |
| 76 | SSL *ssl; /* The ssl handle :-) */ | 77 | SSL *ssl; /* The ssl handle :-) */ |
| @@ -92,6 +93,7 @@ static BIO_METHOD methods_sslp= | |||
| 92 | ssl_ctrl, | 93 | ssl_ctrl, |
| 93 | ssl_new, | 94 | ssl_new, |
| 94 | ssl_free, | 95 | ssl_free, |
| 96 | ssl_callback_ctrl, | ||
| 95 | }; | 97 | }; |
| 96 | 98 | ||
| 97 | BIO_METHOD *BIO_f_ssl(void) | 99 | BIO_METHOD *BIO_f_ssl(void) |
| @@ -444,7 +446,14 @@ static long ssl_ctrl(BIO *b, int cmd, long num, char *ptr) | |||
| 444 | ret=BIO_ctrl(ssl->rbio,cmd,num,ptr); | 446 | ret=BIO_ctrl(ssl->rbio,cmd,num,ptr); |
| 445 | break; | 447 | break; |
| 446 | case BIO_CTRL_SET_CALLBACK: | 448 | case BIO_CTRL_SET_CALLBACK: |
| 447 | SSL_set_info_callback(ssl,(void (*)())ptr); | 449 | { |
| 450 | #if 0 /* FIXME: Should this be used? -- Richard Levitte */ | ||
| 451 | BIOerr(SSL_F_SSL_CTRL, ERR_R_SHOULD_NOT_HAVE_BEEN_CALLED); | ||
| 452 | ret = -1; | ||
| 453 | #else | ||
| 454 | ret=0; | ||
| 455 | #endif | ||
| 456 | } | ||
| 448 | break; | 457 | break; |
| 449 | case BIO_CTRL_GET_CALLBACK: | 458 | case BIO_CTRL_GET_CALLBACK: |
| 450 | { | 459 | { |
| @@ -461,6 +470,28 @@ static long ssl_ctrl(BIO *b, int cmd, long num, char *ptr) | |||
| 461 | return(ret); | 470 | return(ret); |
| 462 | } | 471 | } |
| 463 | 472 | ||
| 473 | static long ssl_callback_ctrl(BIO *b, int cmd, void (*fp)()) | ||
| 474 | { | ||
| 475 | SSL *ssl; | ||
| 476 | BIO_SSL *bs; | ||
| 477 | long ret=1; | ||
| 478 | |||
| 479 | bs=(BIO_SSL *)b->ptr; | ||
| 480 | ssl=bs->ssl; | ||
| 481 | switch (cmd) | ||
| 482 | { | ||
| 483 | case BIO_CTRL_SET_CALLBACK: | ||
| 484 | { | ||
| 485 | SSL_set_info_callback(ssl,fp); | ||
| 486 | } | ||
| 487 | break; | ||
| 488 | default: | ||
| 489 | ret=BIO_callback_ctrl(ssl->rbio,cmd,fp); | ||
| 490 | break; | ||
| 491 | } | ||
| 492 | return(ret); | ||
| 493 | } | ||
| 494 | |||
| 464 | static int ssl_puts(BIO *bp, char *str) | 495 | static int ssl_puts(BIO *bp, char *str) |
| 465 | { | 496 | { |
| 466 | int n,ret; | 497 | int n,ret; |
