mirror of
				https://github.com/coturn/coturn.git
				synced 2025-10-31 15:00:59 +01:00 
			
		
		
		
	Do not mutate something which the DTLS listener server does not own
Multiple DTLS listener servers are created, and server->dtls_ctx is the same object shared between them. Set these callbacks once, and logically this is at the point where the SSL context is created.
This commit is contained in:
		
							parent
							
								
									e2d71ce6bf
								
							
						
					
					
						commit
						bdf27616ba
					
				| @ -935,36 +935,6 @@ static int init_server(dtls_listener_relay_server_type* server, | ||||
|   server->verbose=verbose; | ||||
|    | ||||
|   server->e = e; | ||||
|    | ||||
| #if DTLS_SUPPORTED | ||||
|   if(server->dtls_ctx) { | ||||
| 
 | ||||
| #if defined(REQUEST_CLIENT_CERT) | ||||
| 	  /* If client has to authenticate, then  */ | ||||
| 	  SSL_CTX_set_verify(server->dtls_ctx, SSL_VERIFY_PEER | SSL_VERIFY_CLIENT_ONCE, dtls_verify_callback); | ||||
| #endif | ||||
|    | ||||
| 	  SSL_CTX_set_read_ahead(server->dtls_ctx, 1); | ||||
| 
 | ||||
| 	  SSL_CTX_set_cookie_generate_cb(server->dtls_ctx, generate_cookie); | ||||
| 	  SSL_CTX_set_cookie_verify_cb(server->dtls_ctx, verify_cookie); | ||||
|   } | ||||
| 
 | ||||
| #if DTLSv1_2_SUPPORTED | ||||
|   if(server->dtls_ctx_v1_2) { | ||||
| 
 | ||||
|   #if defined(REQUEST_CLIENT_CERT) | ||||
|   	  /* If client has to authenticate, then  */ | ||||
|   	  SSL_CTX_set_verify(server->dtls_ctx_v1_2, SSL_VERIFY_PEER | SSL_VERIFY_CLIENT_ONCE, dtls_verify_callback); | ||||
|   #endif | ||||
| 
 | ||||
|   	  SSL_CTX_set_read_ahead(server->dtls_ctx_v1_2, 1); | ||||
| 
 | ||||
|   	  SSL_CTX_set_cookie_generate_cb(server->dtls_ctx_v1_2, generate_cookie); | ||||
|   	  SSL_CTX_set_cookie_verify_cb(server->dtls_ctx_v1_2, verify_cookie); | ||||
|     } | ||||
| #endif | ||||
| #endif | ||||
| 
 | ||||
|   return create_server_socket(server, report_creation); | ||||
| } | ||||
| @ -980,6 +950,23 @@ static int clean_server(dtls_listener_relay_server_type* server) { | ||||
| 
 | ||||
| ///////////////////////////////////////////////////////////
 | ||||
| 
 | ||||
| #if DTLS_SUPPORTED | ||||
| void setup_dtls_callbacks(SSL_CTX *ctx) { | ||||
|   if (!ctx) | ||||
|     return; | ||||
| 
 | ||||
| #if defined(REQUEST_CLIENT_CERT) | ||||
|   /* If client has to authenticate, then  */ | ||||
|   SSL_CTX_set_verify(ctx, SSL_VERIFY_PEER | SSL_VERIFY_CLIENT_ONCE, dtls_verify_callback); | ||||
| #endif | ||||
| 
 | ||||
|   SSL_CTX_set_read_ahead(ctx, 1); | ||||
| 
 | ||||
|   SSL_CTX_set_cookie_generate_cb(ctx, generate_cookie); | ||||
|   SSL_CTX_set_cookie_verify_cb(ctx, verify_cookie); | ||||
| } | ||||
| #endif | ||||
| 
 | ||||
| dtls_listener_relay_server_type* create_dtls_listener_server(const char* ifname, | ||||
| 							     const char *local_address,  | ||||
| 							     int port,  | ||||
|  | ||||
| @ -50,6 +50,10 @@ typedef struct dtls_listener_relay_server_info dtls_listener_relay_server_type; | ||||
| 
 | ||||
| ///////////////////////////////////////////
 | ||||
| 
 | ||||
| #if DTLS_SUPPORTED | ||||
| void setup_dtls_callbacks(SSL_CTX *ctx); | ||||
| #endif | ||||
| 
 | ||||
| dtls_listener_relay_server_type* create_dtls_listener_server(const char* ifname, | ||||
| 							     const char *local_address,  | ||||
| 							     int port, | ||||
|  | ||||
| @ -3198,10 +3198,12 @@ static void openssl_load_certificates(void) | ||||
| 		set_ctx(&turn_params.dtls_ctx,"DTLS",DTLS_server_method()); | ||||
| 		set_ctx(&turn_params.dtls_ctx_v1_2,"DTLS1.2",DTLSv1_2_server_method()); | ||||
| 		SSL_CTX_set_read_ahead(turn_params.dtls_ctx_v1_2, 1); | ||||
| 		setup_dtls_callbacks(turn_params.dtls_ctx_v1_2); | ||||
| #else | ||||
| 		set_ctx(&turn_params.dtls_ctx,"DTLS",DTLSv1_server_method()); | ||||
| #endif | ||||
| 		SSL_CTX_set_read_ahead(turn_params.dtls_ctx, 1); | ||||
| 		setup_dtls_callbacks(turn_params.dtls_ctx); | ||||
| 
 | ||||
| 		TURN_LOG_FUNC(TURN_LOG_LEVEL_INFO, "DTLS cipher suite: %s\n",turn_params.cipher_list); | ||||
| 
 | ||||
|  | ||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user