[Spice-devel] [PATCH 04/18] Make default_security and channels_security non-global

Frediano Ziglio fziglio at redhat.com
Tue Feb 2 16:17:57 CET 2016


> 
> From: Jonathon Jongsma <jjongsma at redhat.com>
> 
> Move them into the RedsState struct, adjust functions that use these
> variables to take a RedsState arg.
> ---
>  server/reds-private.h |  4 ++++
>  server/reds.c         | 27 ++++++++++++---------------
>  2 files changed, 16 insertions(+), 15 deletions(-)
> 
> diff --git a/server/reds-private.h b/server/reds-private.h
> index 427ce8e..285f226 100644
> --- a/server/reds-private.h
> +++ b/server/reds-private.h
> @@ -135,6 +135,8 @@ typedef struct RedsClientMonitorsConfig {
>      int buffer_pos;
>  } RedsClientMonitorsConfig;
>  
> +typedef struct ChannelSecurityOptions ChannelSecurityOptions;
> +
>  struct RedsState {
>      int listen_socket;
>      int secure_listen_socket;
> @@ -191,6 +193,8 @@ struct RedsState {
>      int mm_time_enabled;
>      uint32_t mm_time_latency;
>  
> +    int default_channel_security;
> +    ChannelSecurityOptions *channels_security;
>      const char *default_renderer;
>  
>      int spice_port;
> diff --git a/server/reds.c b/server/reds.c
> index 30b2736..feae0cc 100644
> --- a/server/reds.c
> +++ b/server/reds.c
> @@ -193,7 +193,6 @@ typedef struct RedSSLParameters {
>      char ciphersuite[256];
>  } RedSSLParameters;
>  
> -typedef struct ChannelSecurityOptions ChannelSecurityOptions;
>  struct ChannelSecurityOptions {
>      uint32_t channel_id;
>      uint32_t options;
> @@ -213,15 +212,11 @@ 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 ChannelSecurityOptions *channels_security = NULL;
> -static int default_channel_security =
> -    SPICE_CHANNEL_SECURITY_NONE | SPICE_CHANNEL_SECURITY_SSL;
> -
>  static RedSSLParameters ssl_parameters;
>  
> -static ChannelSecurityOptions *find_channel_security(int id)
> +static ChannelSecurityOptions *reds_find_channel_security(RedsState *reds,
> int id)
>  {
> -    ChannelSecurityOptions *now = channels_security;
> +    ChannelSecurityOptions *now = reds->channels_security;
>      while (now && now->channel_id != id) {
>          now = now->next;
>      }
> @@ -2148,8 +2143,8 @@ static void reds_handle_auth_mechanism(void *opaque)
>  
>  static int reds_security_check(RedLinkInfo *link)
>  {
> -    ChannelSecurityOptions *security_option =
> find_channel_security(link->link_mess->channel_type);
> -    uint32_t security = security_option ? security_option->options :
> default_channel_security;
> +    ChannelSecurityOptions *security_option =
> reds_find_channel_security(reds, link->link_mess->channel_type);
> +    uint32_t security = security_option ? security_option->options :
> reds->default_channel_security;
>      return (reds_stream_is_ssl(link->stream) && (security &
>      SPICE_CHANNEL_SECURITY_SSL)) ||
>          (!reds_stream_is_ssl(link->stream) && (security &
>          SPICE_CHANNEL_SECURITY_NONE));
>  }
> @@ -2801,19 +2796,19 @@ static void
> set_image_compression(SpiceImageCompression val)
>      red_dispatcher_on_ic_change();
>  }
>  
> -static void set_one_channel_security(int id, uint32_t security)
> +static void reds_set_one_channel_security(RedsState *reds, int id, uint32_t
> security)
>  {
>      ChannelSecurityOptions *security_options;
>  
> -    if ((security_options = find_channel_security(id))) {
> +    if ((security_options = reds_find_channel_security(reds, id))) {
>          security_options->options = security;
>          return;
>      }
>      security_options = spice_new(ChannelSecurityOptions, 1);
>      security_options->channel_id = id;
>      security_options->options = security;
> -    security_options->next = channels_security;
> -    channels_security = security_options;
> +    security_options->next = reds->channels_security;
> +    reds->channels_security = security_options;
>  }
>  
>  #define REDS_SAVE_VERSION 1
> @@ -3442,6 +3437,8 @@ SPICE_GNUC_VISIBLE SpiceServer *spice_server_new(void)
>      spice_assert(reds == NULL);
>  
>      reds = spice_new0(RedsState, 1);
> +    reds->default_channel_security =
> +        SPICE_CHANNEL_SECURITY_NONE | SPICE_CHANNEL_SECURITY_SSL;
>      reds->default_renderer = "sw";
>      reds->spice_port = -1;
>      reds->spice_secure_port = -1;
> @@ -3743,12 +3740,12 @@ SPICE_GNUC_VISIBLE int
> spice_server_set_channel_security(SpiceServer *s, const c
>      spice_assert(reds == s);
>  
>      if (channel == NULL) {
> -        default_channel_security = security;
> +        s->default_channel_security = security;
>          return 0;
>      }
>      for (i = 0; i < SPICE_N_ELEMENTS(names); i++) {
>          if (names[i] && strcmp(names[i], channel) == 0) {
> -            set_one_channel_security(i, security);
> +            reds_set_one_channel_security(s, i, security);
>              return 0;
>          }
>      }

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

Frediano


More information about the Spice-devel mailing list