static void soup_auth_get_property (GObject *object, guint prop_id, GValue *value, GParamSpec *pspec) { SoupAuth *auth = SOUP_AUTH (object); SoupAuthPrivate *priv = SOUP_AUTH_GET_PRIVATE (object); switch (prop_id) { case PROP_SCHEME_NAME: g_value_set_string (value, soup_auth_get_scheme_name (auth)); break; case PROP_REALM: if (auth->realm) g_free (auth->realm); g_value_set_string (value, soup_auth_get_realm (auth)); break; case PROP_HOST: if (priv->host) g_free (priv->host); g_value_set_string (value, soup_auth_get_host (auth)); break; case PROP_IS_FOR_PROXY: g_value_set_boolean (value, priv->proxy); break; case PROP_IS_AUTHENTICATED: g_value_set_boolean (value, soup_auth_is_authenticated (auth)); break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); break; } }
static void soup_auth_finalize (GObject *object) { SoupAuth *auth = SOUP_AUTH (object); SoupAuthPrivate *priv = SOUP_AUTH_GET_PRIVATE (auth); g_free (auth->realm); g_free (priv->host); G_OBJECT_CLASS (soup_auth_parent_class)->finalize (object); }
static void finalize (GObject *object) { SoupAuth *auth = SOUP_AUTH (object); SoupAuthPrivate *priv = SOUP_AUTH_GET_PRIVATE (auth); g_free (auth->realm); g_free (priv->host); if (priv->saved_passwords) g_hash_table_destroy (priv->saved_passwords); G_OBJECT_CLASS (soup_auth_parent_class)->finalize (object); }
static void set_property (GObject *object, guint prop_id, const GValue *value, GParamSpec *pspec) { SoupAuth *auth = SOUP_AUTH (object); SoupAuthPrivate *priv = SOUP_AUTH_GET_PRIVATE (object); switch (prop_id) { case PROP_REALM: auth->realm = g_value_dup_string (value); break; case PROP_HOST: priv->host = g_value_dup_string (value); break; case PROP_IS_FOR_PROXY: priv->proxy = g_value_get_boolean (value); break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); break; } }
static gboolean soup_auth_negotiate_update_connection (SoupConnectionAuth *auth, SoupMessage *msg, const char *header, gpointer state) { #ifdef LIBSOUP_HAVE_GSSAPI gboolean success = TRUE; SoupNegotiateConnectionState *conn = state; SoupAuthNegotiatePrivate *priv = SOUP_AUTH_NEGOTIATE_GET_PRIVATE (auth); GError *err = NULL; if (!check_auth_trusted_uri (auth, msg)) { conn->state = SOUP_NEGOTIATE_FAILED; goto out; } /* Found negotiate header with no token, start negotiate */ if (strcmp (header, "Negotiate") == 0) { /* If we were already negotiating and we get a 401 * with no token, start again. */ if (conn->state == SOUP_NEGOTIATE_SENT_RESPONSE) { free_connection_state_data (conn); conn->initialized = FALSE; } conn->state = SOUP_NEGOTIATE_RECEIVED_CHALLENGE; if (soup_gss_build_response (conn, SOUP_AUTH (auth), &err)) { /* Register the callbacks just once */ if (priv->message_finished_signal_id == 0) { gulong id = 0; id = g_signal_connect (msg, "finished", G_CALLBACK (remove_server_response_handler), auth); priv->message_finished_signal_id = id; } if (priv->message_got_headers_signal_id == 0) { gulong id = 0; /* Wait for the 2xx response to verify server response */ id = g_signal_connect (msg, "got_headers", G_CALLBACK (check_server_response), auth); priv->message_got_headers_signal_id = id; } goto out; } else { /* FIXME: report further upward via * soup_message_get_error_message */ g_warning ("gssapi step failed: %s", err->message); success = FALSE; } } else if (!strncmp (header, "Negotiate ", 10)) { if (soup_gss_client_step (conn, header + 10, &err) == AUTH_GSS_CONTINUE) { conn->state = SOUP_NEGOTIATE_RECEIVED_CHALLENGE; goto out; } } conn->state = SOUP_NEGOTIATE_FAILED; out: g_clear_error (&err); return success; #else return FALSE; #endif /* LIBSOUP_HAVE_GSSAPI */ }