diff options
Diffstat (limited to 'src/lib/libssl/ssl_cert.c')
-rw-r--r-- | src/lib/libssl/ssl_cert.c | 33 |
1 files changed, 26 insertions, 7 deletions
diff --git a/src/lib/libssl/ssl_cert.c b/src/lib/libssl/ssl_cert.c index 6d2511f76c..48f247ceac 100644 --- a/src/lib/libssl/ssl_cert.c +++ b/src/lib/libssl/ssl_cert.c | |||
@@ -105,17 +105,26 @@ | |||
105 | */ | 105 | */ |
106 | 106 | ||
107 | #include <stdio.h> | 107 | #include <stdio.h> |
108 | #include <sys/types.h> | 108 | |
109 | #if !defined(WIN32) && !defined(VSM) && !defined(NeXT) | 109 | #include "openssl/e_os.h" |
110 | |||
111 | #ifndef NO_SYS_TYPES_H | ||
112 | # include <sys/types.h> | ||
113 | #endif | ||
114 | |||
115 | #if !defined(WIN32) && !defined(VSM) && !defined(NeXT) && !defined(MAC_OS_pre_X) | ||
110 | #include <dirent.h> | 116 | #include <dirent.h> |
111 | #endif | 117 | #endif |
118 | |||
112 | #ifdef NeXT | 119 | #ifdef NeXT |
113 | #include <sys/dir.h> | 120 | #include <sys/dir.h> |
114 | #define dirent direct | 121 | #define dirent direct |
115 | #endif | 122 | #endif |
123 | |||
116 | #include <openssl/objects.h> | 124 | #include <openssl/objects.h> |
117 | #include <openssl/bio.h> | 125 | #include <openssl/bio.h> |
118 | #include <openssl/pem.h> | 126 | #include <openssl/pem.h> |
127 | #include <openssl/x509v3.h> | ||
119 | #include "ssl_locl.h" | 128 | #include "ssl_locl.h" |
120 | 129 | ||
121 | int SSL_get_ex_data_X509_STORE_CTX_idx(void) | 130 | int SSL_get_ex_data_X509_STORE_CTX_idx(void) |
@@ -422,8 +431,16 @@ int ssl_verify_cert_chain(SSL *s,STACK_OF(X509) *sk) | |||
422 | X509_STORE_CTX_init(&ctx,s->ctx->cert_store,x,sk); | 431 | X509_STORE_CTX_init(&ctx,s->ctx->cert_store,x,sk); |
423 | if (SSL_get_verify_depth(s) >= 0) | 432 | if (SSL_get_verify_depth(s) >= 0) |
424 | X509_STORE_CTX_set_depth(&ctx, SSL_get_verify_depth(s)); | 433 | X509_STORE_CTX_set_depth(&ctx, SSL_get_verify_depth(s)); |
425 | X509_STORE_CTX_set_ex_data(&ctx,SSL_get_ex_data_X509_STORE_CTX_idx(), | 434 | X509_STORE_CTX_set_ex_data(&ctx,SSL_get_ex_data_X509_STORE_CTX_idx(),s); |
426 | (char *)s); | 435 | /* We need to set the verify purpose. The purpose can be determined by |
436 | * the context: if its a server it will verify SSL client certificates | ||
437 | * or vice versa. | ||
438 | */ | ||
439 | |||
440 | if(s->server) i = X509_PURPOSE_SSL_CLIENT; | ||
441 | else i = X509_PURPOSE_SSL_SERVER; | ||
442 | |||
443 | X509_STORE_CTX_purpose_inherit(&ctx, i, s->purpose, s->trust); | ||
427 | 444 | ||
428 | if (s->ctx->app_verify_callback != NULL) | 445 | if (s->ctx->app_verify_callback != NULL) |
429 | i=s->ctx->app_verify_callback(&ctx); /* should pass app_verify_arg */ | 446 | i=s->ctx->app_verify_callback(&ctx); /* should pass app_verify_arg */ |
@@ -534,7 +551,7 @@ int SSL_CTX_add_client_CA(SSL_CTX *ctx,X509 *x) | |||
534 | return(add_client_CA(&(ctx->client_CA),x)); | 551 | return(add_client_CA(&(ctx->client_CA),x)); |
535 | } | 552 | } |
536 | 553 | ||
537 | static int name_cmp(X509_NAME **a,X509_NAME **b) | 554 | static int xname_cmp(X509_NAME **a,X509_NAME **b) |
538 | { | 555 | { |
539 | return(X509_NAME_cmp(*a,*b)); | 556 | return(X509_NAME_cmp(*a,*b)); |
540 | } | 557 | } |
@@ -556,7 +573,7 @@ STACK_OF(X509_NAME) *SSL_load_client_CA_file(const char *file) | |||
556 | STACK_OF(X509_NAME) *ret,*sk; | 573 | STACK_OF(X509_NAME) *ret,*sk; |
557 | 574 | ||
558 | ret=sk_X509_NAME_new(NULL); | 575 | ret=sk_X509_NAME_new(NULL); |
559 | sk=sk_X509_NAME_new(name_cmp); | 576 | sk=sk_X509_NAME_new(xname_cmp); |
560 | 577 | ||
561 | in=BIO_new(BIO_s_file_internal()); | 578 | in=BIO_new(BIO_s_file_internal()); |
562 | 579 | ||
@@ -617,7 +634,7 @@ int SSL_add_file_cert_subjects_to_stack(STACK_OF(X509_NAME) *stack, | |||
617 | int ret=1; | 634 | int ret=1; |
618 | int (*oldcmp)(X509_NAME **a, X509_NAME **b); | 635 | int (*oldcmp)(X509_NAME **a, X509_NAME **b); |
619 | 636 | ||
620 | oldcmp=sk_X509_NAME_set_cmp_func(stack,name_cmp); | 637 | oldcmp=sk_X509_NAME_set_cmp_func(stack,xname_cmp); |
621 | 638 | ||
622 | in=BIO_new(BIO_s_file_internal()); | 639 | in=BIO_new(BIO_s_file_internal()); |
623 | 640 | ||
@@ -671,6 +688,7 @@ err: | |||
671 | 688 | ||
672 | #ifndef WIN32 | 689 | #ifndef WIN32 |
673 | #ifndef VMS /* XXXX This may be fixed in the future */ | 690 | #ifndef VMS /* XXXX This may be fixed in the future */ |
691 | #ifndef MAC_OS_pre_X | ||
674 | 692 | ||
675 | int SSL_add_dir_cert_subjects_to_stack(STACK_OF(X509_NAME) *stack, | 693 | int SSL_add_dir_cert_subjects_to_stack(STACK_OF(X509_NAME) *stack, |
676 | const char *dir) | 694 | const char *dir) |
@@ -714,3 +732,4 @@ err: | |||
714 | 732 | ||
715 | #endif | 733 | #endif |
716 | #endif | 734 | #endif |
735 | #endif | ||