[Spice-devel] [v3: PATCH 1/3] Add "username" property to SpiceSession
Marc-André Lureau
mlureau at redhat.com
Wed Oct 8 04:43:57 PDT 2014
ack
----- Original Message -----
> From: Dietmar Maurer <dietmar at proxmox.com>
>
> ---
> No changes since v2
> ---
> gtk/spice-session-priv.h | 2 ++
> gtk/spice-session.c | 63
> +++++++++++++++++++++++++++++++++++++++++++++---
> 2 files changed, 61 insertions(+), 4 deletions(-)
>
> diff --git a/gtk/spice-session-priv.h b/gtk/spice-session-priv.h
> index 4b2c151..da43866 100644
> --- a/gtk/spice-session-priv.h
> +++ b/gtk/spice-session-priv.h
> @@ -45,6 +45,7 @@ struct _SpiceSessionPrivate {
> char *host;
> char *port;
> char *tls_port;
> + char *username;
> char *password;
> char *ca_file;
> char *ciphers;
> @@ -146,6 +147,7 @@ void spice_session_set_migration_state(SpiceSession
> *session, SpiceSessionMigrat
> void spice_session_set_port(SpiceSession *session, int port, gboolean tls);
> void spice_session_get_pubkey(SpiceSession *session, guint8 **pubkey, guint
> *size);
> guint spice_session_get_verify(SpiceSession *session);
> +const gchar* spice_session_get_username(SpiceSession *session);
> const gchar* spice_session_get_password(SpiceSession *session);
> const gchar* spice_session_get_host(SpiceSession *session);
> const gchar* spice_session_get_cert_subject(SpiceSession *session);
> diff --git a/gtk/spice-session.c b/gtk/spice-session.c
> index 49afc97..17c18f9 100644
> --- a/gtk/spice-session.c
> +++ b/gtk/spice-session.c
> @@ -111,7 +111,8 @@ enum {
> PROP_CA,
> PROP_PROXY,
> PROP_SECURE_CHANNELS,
> - PROP_SHARED_DIR
> + PROP_SHARED_DIR,
> + PROP_USERNAME
> };
>
> /* signals */
> @@ -217,6 +218,7 @@ spice_session_finalize(GObject *gobject)
> g_free(s->host);
> g_free(s->port);
> g_free(s->tls_port);
> + g_free(s->username);
> g_free(s->password);
> g_free(s->ca_file);
> g_free(s->ciphers);
> @@ -262,11 +264,12 @@ static int spice_uri_create(SpiceSession *session, char
> *dest, int len)
> static int spice_parse_uri(SpiceSession *session, const char *original_uri)
> {
> SpiceSessionPrivate *s = session->priv;
> - gchar *host = NULL, *port = NULL, *tls_port = NULL, *uri = NULL,
> *password = NULL;
> + gchar *host = NULL, *port = NULL, *tls_port = NULL, *uri = NULL,
> *username = NULL, *password = NULL;
> gchar *path = NULL;
> gchar *unescaped_path = NULL;
> gchar *authority = NULL;
> gchar *query = NULL;
> + gchar *tmp = NULL;
>
> g_return_val_if_fail(original_uri != NULL, -1);
>
> @@ -281,6 +284,22 @@ static int spice_parse_uri(SpiceSession *session, const
> char *original_uri)
> goto fail;
> }
> authority = uri + strlen(URI_SCHEME_SPICE);
> +
> + tmp = strchr(authority, '@');
> + if (tmp) {
> + gchar *buffer = g_strndup(authority, tmp - authority);
> + if (strstr(buffer, "%40") == NULL) {
> + username = buffer;
> + buffer = NULL;
> + } else {
> + username = g_uri_unescape_string(buffer, NULL);
> + g_free(buffer);
> + }
> +
> + authority = ++tmp;
> + tmp = NULL;
> + }
> +
> path = strchr(authority, '/');
> if (path) {
> path[0] = '\0';
> @@ -303,7 +322,7 @@ static int spice_parse_uri(SpiceSession *session, const
> char *original_uri)
> /* Now process the individual parts */
>
> if (authority[0] == '[') {
> - gchar *tmp = strchr(authority, ']');
> + tmp = strchr(authority, ']');
> if (!tmp) {
> g_warning("Missing closing ']' in authority for URI '%s'", uri);
> goto fail;
> @@ -314,7 +333,7 @@ static int spice_parse_uri(SpiceSession *session, const
> char *original_uri)
> if (tmp[0] == ':')
> port = g_strdup(tmp + 1);
> } else {
> - gchar *tmp = strchr(authority, ':');
> + tmp = strchr(authority, ':');
> if (tmp) {
> *tmp = '\0';
> tmp++;
> @@ -375,10 +394,12 @@ static int spice_parse_uri(SpiceSession *session, const
> char *original_uri)
> g_free(s->host);
> g_free(s->port);
> g_free(s->tls_port);
> + g_free(s->username);
> g_free(s->password);
> s->host = host;
> s->port = port;
> s->tls_port = tls_port;
> + s->username = username;
> s->password = password;
> return 0;
>
> @@ -388,6 +409,7 @@ fail:
> g_free(host);
> g_free(port);
> g_free(tls_port);
> + g_free(username);
> g_free(password);
> return -1;
> }
> @@ -412,6 +434,9 @@ static void spice_session_get_property(GObject
> *gobject,
> case PROP_TLS_PORT:
> g_value_set_string(value, s->tls_port);
> break;
> + case PROP_USERNAME:
> + g_value_set_string(value, s->username);
> + break;
> case PROP_PASSWORD:
> g_value_set_string(value, s->password);
> break;
> @@ -522,6 +547,10 @@ static void spice_session_set_property(GObject
> *gobject,
> g_free(s->tls_port);
> s->tls_port = g_value_dup_string(value);
> break;
> + case PROP_USERNAME:
> + g_free(s->username);
> + s->username = g_value_dup_string(value);
> + break;
> case PROP_PASSWORD:
> g_free(s->password);
> s->password = g_value_dup_string(value);
> @@ -688,6 +717,21 @@ static void spice_session_class_init(SpiceSessionClass
> *klass)
> G_PARAM_STATIC_STRINGS));
>
> /**
> + * SpiceSession:username:
> + *
> + * Username to use
> + *
> + **/
> + g_object_class_install_property
> + (gobject_class, PROP_USERNAME,
> + g_param_spec_string("username",
> + "Username",
> + "Username used for SASL connections",
> + NULL,
> + G_PARAM_READWRITE |
> + G_PARAM_STATIC_STRINGS));
> +
> + /**
> * SpiceSession:password:
> *
> * TLS password to use
> @@ -1214,6 +1258,7 @@ SpiceSession
> *spice_session_new_from_session(SpiceSession *session)
>
> g_warn_if_fail(c->host == NULL);
> g_warn_if_fail(c->tls_port == NULL);
> + g_warn_if_fail(c->username == NULL);
> g_warn_if_fail(c->password == NULL);
> g_warn_if_fail(c->ca_file == NULL);
> g_warn_if_fail(c->ciphers == NULL);
> @@ -1225,6 +1270,7 @@ SpiceSession
> *spice_session_new_from_session(SpiceSession *session)
> g_object_get(session,
> "host", &c->host,
> "tls-port", &c->tls_port,
> + "username", &c->username,
> "password", &c->password,
> "ca-file", &c->ca_file,
> "ciphers", &c->ciphers,
> @@ -2073,6 +2119,15 @@ void spice_session_set_migration_state(SpiceSession
> *session, SpiceSessionMigrat
> }
>
> G_GNUC_INTERNAL
> +const gchar* spice_session_get_username(SpiceSession *session)
> +{
> + SpiceSessionPrivate *s = session->priv;
> +
> + g_return_val_if_fail(s != NULL, NULL);
> + return s->username;
> +}
> +
> +G_GNUC_INTERNAL
> const gchar* spice_session_get_password(SpiceSession *session)
> {
> SpiceSessionPrivate *s = session->priv;
> --
> 2.1.0
>
> _______________________________________________
> Spice-devel mailing list
> Spice-devel at lists.freedesktop.org
> http://lists.freedesktop.org/mailman/listinfo/spice-devel
>
More information about the Spice-devel
mailing list