Beispiel #1
0
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;
	}
}
Beispiel #2
0
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);
}
Beispiel #3
0
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);
}
Beispiel #4
0
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;
    }
}
Beispiel #5
0
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 */
}