@@ -163,7 +163,7 @@ void gitno_buffer_setup_callback(
163
163
void gitno_buffer_setup (gitno_socket * socket , gitno_buffer * buf , char * data , size_t len )
164
164
{
165
165
#ifdef GIT_SSL
166
- if (socket -> ssl .ctx ) {
166
+ if (socket -> ssl .ssl ) {
167
167
gitno_buffer_setup_callback (socket , buf , data , len , gitno__recv_ssl , NULL );
168
168
return ;
169
169
}
@@ -208,7 +208,6 @@ static int gitno_ssl_teardown(gitno_ssl *ssl)
208
208
ret = 0 ;
209
209
210
210
SSL_free (ssl -> ssl );
211
- SSL_CTX_free (ssl -> ctx );
212
211
return ret ;
213
212
}
214
213
@@ -428,30 +427,39 @@ static int init_ssl(void)
428
427
if (git__ssl_init .val )
429
428
return 0 ;
430
429
431
-
432
- SSL_library_init ();
433
- SSL_load_error_strings ();
430
+ SSL_CTX_set_mode (git__ssl_ctx , SSL_MODE_AUTO_RETRY );
431
+ SSL_CTX_set_verify (git__ssl_ctx , SSL_VERIFY_NONE , NULL );
432
+ if (!SSL_CTX_set_default_verify_paths (git__ssl_ctx )) {
433
+ unsigned long err = ERR_get_error ();
434
+ giterr_set (GITERR_SSL , "failed to set verify paths: %s\n" , ERR_error_string (err , NULL ));
435
+ return -1 ;
436
+ }
434
437
435
438
#ifdef GIT_THREADS
436
439
{
437
440
int num_locks , i ;
438
441
439
-
440
- CRYPTO_set_locking_callback (openssl_locking_function );
441
-
442
442
num_locks = CRYPTO_num_locks ();
443
443
openssl_locks = git__calloc (num_locks , sizeof (git_mutex ));
444
+ if (openssl_locks == NULL ) {
445
+ git_mutex_unlock (& git__ssl_mutex );
446
+ return -1 ;
447
+ }
448
+ GITERR_CHECK_ALLOC (openssl_locks );
449
+
444
450
for (i = 0 ; i < num_locks ; i ++ ) {
445
- if (git_mutex_init (& openssl_locks [i ]) < 0 ) {
451
+ if (git_mutex_init (& openssl_locks [i ]) != 0 ) {
446
452
git_mutex_unlock (& git__ssl_mutex );
447
453
giterr_set (GITERR_SSL , "failed to init lock %d" , i );
448
454
return -1 ;
449
455
}
450
456
}
451
457
}
458
+
459
+ CRYPTO_set_locking_callback (openssl_locking_function );
452
460
#endif
453
461
454
- git_atomic_set (& git__ssl_init , 1 );
462
+ git_atomic_inc (& git__ssl_init );
455
463
git_mutex_unlock (& git__ssl_mutex );
456
464
457
465
return 0 ;
@@ -464,16 +472,7 @@ static int ssl_setup(gitno_socket *socket, const char *host, int flags)
464
472
if (init_ssl () < 0 )
465
473
return -1 ;
466
474
467
- socket -> ssl .ctx = SSL_CTX_new (SSLv23_method ());
468
- if (socket -> ssl .ctx == NULL )
469
- return ssl_set_error (& socket -> ssl , 0 );
470
-
471
- SSL_CTX_set_mode (socket -> ssl .ctx , SSL_MODE_AUTO_RETRY );
472
- SSL_CTX_set_verify (socket -> ssl .ctx , SSL_VERIFY_NONE , NULL );
473
- if (!SSL_CTX_set_default_verify_paths (socket -> ssl .ctx ))
474
- return ssl_set_error (& socket -> ssl , 0 );
475
-
476
- socket -> ssl .ssl = SSL_new (socket -> ssl .ctx );
475
+ socket -> ssl .ssl = SSL_new (git__ssl_ctx );
477
476
if (socket -> ssl .ssl == NULL )
478
477
return ssl_set_error (& socket -> ssl , 0 );
479
478
@@ -610,7 +609,7 @@ int gitno_send(gitno_socket *socket, const char *msg, size_t len, int flags)
610
609
size_t off = 0 ;
611
610
612
611
#ifdef GIT_SSL
613
- if (socket -> ssl .ctx )
612
+ if (socket -> ssl .ssl )
614
613
return gitno_send_ssl (& socket -> ssl , msg , len , flags );
615
614
#endif
616
615
@@ -631,7 +630,7 @@ int gitno_send(gitno_socket *socket, const char *msg, size_t len, int flags)
631
630
int gitno_close (gitno_socket * s )
632
631
{
633
632
#ifdef GIT_SSL
634
- if (s -> ssl .ctx &&
633
+ if (s -> ssl .ssl &&
635
634
gitno_ssl_teardown (& s -> ssl ) < 0 )
636
635
return -1 ;
637
636
#endif
0 commit comments