[Spice-devel] [PATCH 12/18] Move ssl_parameters to RedsState struct

Frediano Ziglio fziglio at redhat.com
Thu Feb 4 10:20:52 CET 2016


> 
> From: Jonathon Jongsma <jjongsma at redhat.com>
> 
> Removing more global variables
> ---
>  server/reds-private.h | 11 +++++++++
>  server/reds.c         | 65
>  ++++++++++++++++++++++-----------------------------
>  2 files changed, 39 insertions(+), 37 deletions(-)
> 
> diff --git a/server/reds-private.h b/server/reds-private.h
> index 5042773..2a6f438 100644
> --- a/server/reds-private.h
> +++ b/server/reds-private.h
> @@ -137,6 +137,15 @@ typedef struct RedsClientMonitorsConfig {
>  
>  typedef struct ChannelSecurityOptions ChannelSecurityOptions;
>  
> +typedef struct RedSSLParameters {
> +    char keyfile_password[256];
> +    char certs_file[256];
> +    char private_key_file[256];
> +    char ca_certificate_file[256];
> +    char dh_key_file[256];
> +    char ciphersuite[256];
> +} RedSSLParameters;
> +
>  struct RedsState {
>      int listen_socket;
>      int secure_listen_socket;
> @@ -225,6 +234,8 @@ struct RedsState {
>      gboolean agent_copypaste;
>      gboolean agent_file_xfer;
>      gboolean exit_on_disconnect;
> +
> +    RedSSLParameters ssl_parameters;
>  };
>  
>  #endif
> diff --git a/server/reds.c b/server/reds.c
> index b25a1be..14857c2 100644
> --- a/server/reds.c
> +++ b/server/reds.c
> @@ -159,15 +159,6 @@ typedef struct RedLinkInfo {
>      int skip_auth;
>  } RedLinkInfo;
>  
> -typedef struct RedSSLParameters {
> -    char keyfile_password[256];
> -    char certs_file[256];
> -    char private_key_file[256];
> -    char ca_certificate_file[256];
> -    char dh_key_file[256];
> -    char ciphersuite[256];
> -} RedSSLParameters;
> -
>  struct ChannelSecurityOptions {
>      uint32_t channel_id;
>      uint32_t options;
> @@ -187,8 +178,6 @@ static VDIReadBuf *vdi_port_read_buf_get(RedsState
> *reds);
>  static VDIReadBuf *vdi_port_read_buf_ref(VDIReadBuf *buf);
>  static void vdi_port_read_buf_unref(RedsState *reds, VDIReadBuf *buf);
>  
> -static RedSSLParameters ssl_parameters;
> -
>  static ChannelSecurityOptions *reds_find_channel_security(RedsState *reds,
>  int id)
>  {
>      ChannelSecurityOptions *now = reds->channels_security;
> @@ -2611,7 +2600,8 @@ static int load_dh_params(SSL_CTX *ctx, char *file)
>  /*The password code is not thread safe*/
>  static int ssl_password_cb(char *buf, int size, int flags, void *userdata)
>  {
> -    char *pass = ssl_parameters.keyfile_password;
> +    RedsState *reds = userdata;
> +    char *pass = reds->ssl_parameters.keyfile_password;
>      if (size < strlen(pass) + 1) {
>          return (0);
>      }
> @@ -2686,31 +2676,32 @@ static int reds_init_ssl(RedsState *reds)
>      SSL_CTX_set_options(reds->ctx, ssl_options);
>  
>      /* Load our keys and certificates*/
> -    return_code = SSL_CTX_use_certificate_chain_file(reds->ctx,
> ssl_parameters.certs_file);
> +    return_code = SSL_CTX_use_certificate_chain_file(reds->ctx,
> reds->ssl_parameters.certs_file);
>      if (return_code == 1) {
> -        spice_info("Loaded certificates from %s",
> ssl_parameters.certs_file);
> +        spice_info("Loaded certificates from %s",
> reds->ssl_parameters.certs_file);
>      } else {
> -        spice_warning("Could not load certificates from %s",
> ssl_parameters.certs_file);
> +        spice_warning("Could not load certificates from %s",
> reds->ssl_parameters.certs_file);
>          return -1;
>      }
>  
>      SSL_CTX_set_default_passwd_cb(reds->ctx, ssl_password_cb);
> +    SSL_CTX_set_default_passwd_cb_userdata(reds->ctx, reds);
>  
> -    return_code = SSL_CTX_use_PrivateKey_file(reds->ctx,
> ssl_parameters.private_key_file,
> +    return_code = SSL_CTX_use_PrivateKey_file(reds->ctx,
> reds->ssl_parameters.private_key_file,
>                                                SSL_FILETYPE_PEM);
>      if (return_code == 1) {
> -        spice_info("Using private key from %s",
> ssl_parameters.private_key_file);
> +        spice_info("Using private key from %s",
> reds->ssl_parameters.private_key_file);
>      } else {
>          spice_warning("Could not use private key file");
>          return -1;
>      }
>  
>      /* Load the CAs we trust*/
> -    return_code = SSL_CTX_load_verify_locations(reds->ctx,
> ssl_parameters.ca_certificate_file, 0);
> +    return_code = SSL_CTX_load_verify_locations(reds->ctx,
> reds->ssl_parameters.ca_certificate_file, 0);
>      if (return_code == 1) {
> -        spice_info("Loaded CA certificates from %s",
> ssl_parameters.ca_certificate_file);
> +        spice_info("Loaded CA certificates from %s",
> reds->ssl_parameters.ca_certificate_file);
>      } else {
> -        spice_warning("Could not use CA file %s",
> ssl_parameters.ca_certificate_file);
> +        spice_warning("Could not use CA file %s",
> reds->ssl_parameters.ca_certificate_file);
>          return -1;
>      }
>  
> @@ -2718,15 +2709,15 @@ static int reds_init_ssl(RedsState *reds)
>      SSL_CTX_set_verify_depth(reds->ctx, 1);
>  #endif
>  
> -    if (strlen(ssl_parameters.dh_key_file) > 0) {
> -        if (load_dh_params(reds->ctx, ssl_parameters.dh_key_file) < 0) {
> +    if (strlen(reds->ssl_parameters.dh_key_file) > 0) {
> +        if (load_dh_params(reds->ctx, reds->ssl_parameters.dh_key_file) < 0)
> {
>              return -1;
>          }
>      }
>  
>      SSL_CTX_set_session_id_context(reds->ctx, (const unsigned char
>      *)"SPICE", 5);
> -    if (strlen(ssl_parameters.ciphersuite) > 0) {
> -        if (!SSL_CTX_set_cipher_list(reds->ctx, ssl_parameters.ciphersuite))
> {
> +    if (strlen(reds->ssl_parameters.ciphersuite) > 0) {
> +        if (!SSL_CTX_set_cipher_list(reds->ctx,
> reds->ssl_parameters.ciphersuite)) {
>              return -1;
>          }
>      }
> @@ -3633,27 +3624,27 @@ SPICE_GNUC_VISIBLE int
> spice_server_set_tls(SpiceServer *s, int port,
>      if (port < 0 || port > 0xffff) {
>          return -1;
>      }
> -    memset(&ssl_parameters, 0, sizeof(ssl_parameters));
> +    memset(&s->ssl_parameters, 0, sizeof(s->ssl_parameters));
>  
>      s->spice_secure_port = port;
> -    g_strlcpy(ssl_parameters.ca_certificate_file, ca_cert_file,
> -              sizeof(ssl_parameters.ca_certificate_file));
> -    g_strlcpy(ssl_parameters.certs_file, certs_file,
> -              sizeof(ssl_parameters.certs_file));
> -    g_strlcpy(ssl_parameters.private_key_file, private_key_file,
> -              sizeof(ssl_parameters.private_key_file));
> +    g_strlcpy(s->ssl_parameters.ca_certificate_file, ca_cert_file,
> +              sizeof(s->ssl_parameters.ca_certificate_file));
> +    g_strlcpy(s->ssl_parameters.certs_file, certs_file,
> +              sizeof(s->ssl_parameters.certs_file));
> +    g_strlcpy(s->ssl_parameters.private_key_file, private_key_file,
> +              sizeof(s->ssl_parameters.private_key_file));
>  
>      if (key_passwd) {
> -        g_strlcpy(ssl_parameters.keyfile_password, key_passwd,
> -                  sizeof(ssl_parameters.keyfile_password));
> +        g_strlcpy(s->ssl_parameters.keyfile_password, key_passwd,
> +                  sizeof(s->ssl_parameters.keyfile_password));
>      }
>      if (ciphersuite) {
> -        g_strlcpy(ssl_parameters.ciphersuite, ciphersuite,
> -                  sizeof(ssl_parameters.ciphersuite));
> +        g_strlcpy(s->ssl_parameters.ciphersuite, ciphersuite,
> +                  sizeof(s->ssl_parameters.ciphersuite));
>      }
>      if (dh_key_file) {
> -        g_strlcpy(ssl_parameters.dh_key_file, dh_key_file,
> -                  sizeof(ssl_parameters.dh_key_file));
> +        g_strlcpy(s->ssl_parameters.dh_key_file, dh_key_file,
> +                  sizeof(s->ssl_parameters.dh_key_file));
>      }
>      return 0;
>  }

Acked-by: Frediano Ziglio <fziglio at redhat.com>

Frediano


More information about the Spice-devel mailing list