|
|
|
@ -282,3 +282,41 @@ def server_credentials_ssl_dynamic_cert_config(initial_cert_config, |
|
|
|
|
# C-core assumes ownership of c_options |
|
|
|
|
credentials.c_credentials = grpc_ssl_server_credentials_create_with_options(c_options) |
|
|
|
|
return credentials |
|
|
|
|
|
|
|
|
|
cdef grpc_ssl_certificate_config_reload_status _server_cert_config_fetcher_wrapper( |
|
|
|
|
void* user_data, grpc_ssl_server_certificate_config **config) with gil: |
|
|
|
|
# This is a credentials.ServerCertificateConfig |
|
|
|
|
cdef ServerCertificateConfig cert_config = None |
|
|
|
|
if not user_data: |
|
|
|
|
raise ValueError('internal error: user_data must be specified') |
|
|
|
|
credentials = <ServerCredentials>user_data |
|
|
|
|
if not credentials.initial_cert_config_fetched: |
|
|
|
|
# C-core is asking for the initial cert config |
|
|
|
|
credentials.initial_cert_config_fetched = True |
|
|
|
|
cert_config = credentials.initial_cert_config._certificate_configuration |
|
|
|
|
else: |
|
|
|
|
user_cb = credentials.cert_config_fetcher |
|
|
|
|
try: |
|
|
|
|
cert_config_wrapper = user_cb() |
|
|
|
|
except Exception: |
|
|
|
|
_LOGGER.exception('Error fetching certificate config') |
|
|
|
|
return GRPC_SSL_CERTIFICATE_CONFIG_RELOAD_FAIL |
|
|
|
|
if cert_config_wrapper is None: |
|
|
|
|
return GRPC_SSL_CERTIFICATE_CONFIG_RELOAD_UNCHANGED |
|
|
|
|
elif not isinstance( |
|
|
|
|
cert_config_wrapper, grpc.ServerCertificateConfiguration): |
|
|
|
|
_LOGGER.error( |
|
|
|
|
'Error fetching certificate configuration: certificate ' |
|
|
|
|
'configuration must be of type grpc.ServerCertificateConfiguration, ' |
|
|
|
|
'not %s' % type(cert_config_wrapper).__name__) |
|
|
|
|
return GRPC_SSL_CERTIFICATE_CONFIG_RELOAD_FAIL |
|
|
|
|
else: |
|
|
|
|
cert_config = cert_config_wrapper._certificate_configuration |
|
|
|
|
config[0] = <grpc_ssl_server_certificate_config*>cert_config.c_cert_config |
|
|
|
|
# our caller will assume ownership of memory, so we have to recreate |
|
|
|
|
# a copy of c_cert_config here |
|
|
|
|
cert_config.c_cert_config = grpc_ssl_server_certificate_config_create( |
|
|
|
|
cert_config.c_pem_root_certs, cert_config.c_ssl_pem_key_cert_pairs, |
|
|
|
|
cert_config.c_ssl_pem_key_cert_pairs_count) |
|
|
|
|
return GRPC_SSL_CERTIFICATE_CONFIG_RELOAD_NEW |
|
|
|
|
|
|
|
|
|