[libsoup/carlosgc/authenticate: 4/6] auth: Add port property to SoupAuth
- From: Carlos Garcia Campos <carlosgc src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [libsoup/carlosgc/authenticate: 4/6] auth: Add port property to SoupAuth
- Date: Tue, 27 Oct 2020 12:58:54 +0000 (UTC)
commit bf95e5100ff3f59f846d65c18c33ee29d06a5c7c
Author: Carlos Garcia Campos <cgarcia igalia com>
Date: Tue Oct 27 12:38:13 2020 +0100
auth: Add port property to SoupAuth
The host name is not enough to identify the domain being authenticated,
we need the port too.
docs/reference/libsoup-3.0-sections.txt | 1 +
libsoup/auth/soup-auth.c | 40 +++++++++++++++++++++++++++++++++
libsoup/auth/soup-auth.h | 3 +++
tests/proxy-test.c | 18 +++++++++++++++
4 files changed, 62 insertions(+)
---
diff --git a/docs/reference/libsoup-3.0-sections.txt b/docs/reference/libsoup-3.0-sections.txt
index 9233c069..8d9b98e7 100644
--- a/docs/reference/libsoup-3.0-sections.txt
+++ b/docs/reference/libsoup-3.0-sections.txt
@@ -512,6 +512,7 @@ soup_auth_negotiate_supported
soup_auth_is_for_proxy
soup_auth_get_scheme_name
soup_auth_get_host
+soup_auth_get_port
soup_auth_get_realm
soup_auth_get_info
<SUBSECTION>
diff --git a/libsoup/auth/soup-auth.c b/libsoup/auth/soup-auth.c
index 5fabd0a7..1486644d 100644
--- a/libsoup/auth/soup-auth.c
+++ b/libsoup/auth/soup-auth.c
@@ -38,6 +38,7 @@
typedef struct {
char *realm;
char *host;
+ guint port;
gboolean proxy;
gboolean cancelled;
} SoupAuthPrivate;
@@ -50,6 +51,7 @@ enum {
PROP_SCHEME_NAME,
PROP_REALM,
PROP_HOST,
+ PROP_PORT,
PROP_IS_FOR_PROXY,
PROP_IS_AUTHENTICATED,
PROP_IS_CANCELLED,
@@ -102,6 +104,9 @@ soup_auth_set_property (GObject *object, guint prop_id,
g_free (priv->host);
priv->host = g_value_dup_string (value);
break;
+ case PROP_PORT:
+ priv->port = g_value_get_uint (value);
+ break;
case PROP_IS_FOR_PROXY:
priv->proxy = g_value_get_boolean (value);
break;
@@ -128,6 +133,9 @@ soup_auth_get_property (GObject *object, guint prop_id,
case PROP_HOST:
g_value_set_string (value, soup_auth_get_host (auth));
break;
+ case PROP_PORT:
+ g_value_set_uint (value, soup_auth_get_port (auth));
+ break;
case PROP_IS_FOR_PROXY:
g_value_set_boolean (value, priv->proxy);
break;
@@ -203,6 +211,19 @@ soup_auth_class_init (SoupAuthClass *auth_class)
NULL,
G_PARAM_READWRITE |
G_PARAM_STATIC_STRINGS));
+ /**
+ * SOUP_AUTH_PORT:
+ *
+ * An alias for the #SoupAuth:port property. (The
+ * port of the host being authenticated to.)
+ **/
+ g_object_class_install_property (
+ object_class, PROP_PORT,
+ g_param_spec_uint (SOUP_AUTH_PORT,
+ "Port",
+ "Authentication port",
+ 0, G_MAXUINT, 0,
+ G_PARAM_READWRITE));
/**
* SOUP_AUTH_IS_FOR_PROXY:
*
@@ -281,6 +302,7 @@ soup_auth_new (GType type, SoupMessage *msg, const char *auth_header)
auth = g_object_new (type,
SOUP_AUTH_IS_FOR_PROXY, (msg->status_code == SOUP_STATUS_PROXY_UNAUTHORIZED),
SOUP_AUTH_HOST, uri->host,
+ SOUP_AUTH_PORT, uri->port,
NULL);
SoupAuthPrivate *priv = soup_auth_get_instance_private (auth);
@@ -462,6 +484,24 @@ soup_auth_get_host (SoupAuth *auth)
return priv->host;
}
+/**
+ * soup_auth_get_port:
+ * @auth: a #SoupAuth
+ *
+ * Returns the port that @auth is associated with.
+ *
+ * Return value: the port
+ **/
+guint
+soup_auth_get_port (SoupAuth *auth)
+{
+ SoupAuthPrivate *priv = soup_auth_get_instance_private (auth);
+
+ g_return_val_if_fail (SOUP_IS_AUTH (auth), 0);
+
+ return priv->port;
+}
+
/**
* soup_auth_get_realm:
* @auth: a #SoupAuth
diff --git a/libsoup/auth/soup-auth.h b/libsoup/auth/soup-auth.h
index c3375a7a..ca3041a7 100644
--- a/libsoup/auth/soup-auth.h
+++ b/libsoup/auth/soup-auth.h
@@ -46,6 +46,7 @@ struct _SoupAuthClass {
#define SOUP_AUTH_SCHEME_NAME "scheme-name"
#define SOUP_AUTH_REALM "realm"
#define SOUP_AUTH_HOST "host"
+#define SOUP_AUTH_PORT "port"
#define SOUP_AUTH_IS_FOR_PROXY "is-for-proxy"
#define SOUP_AUTH_IS_AUTHENTICATED "is-authenticated"
#define SOUP_AUTH_IS_CANCELLED "is-cancelled"
@@ -65,6 +66,8 @@ SOUP_AVAILABLE_IN_2_4
const char *soup_auth_get_scheme_name (SoupAuth *auth);
SOUP_AVAILABLE_IN_2_4
const char *soup_auth_get_host (SoupAuth *auth);
+SOUP_AVAILABLE_IN_ALL
+guint soup_auth_get_port (SoupAuth *auth);
SOUP_AVAILABLE_IN_2_4
const char *soup_auth_get_realm (SoupAuth *auth);
SOUP_AVAILABLE_IN_2_4
diff --git a/tests/proxy-test.c b/tests/proxy-test.c
index bc6fb2b8..1595c8f7 100644
--- a/tests/proxy-test.c
+++ b/tests/proxy-test.c
@@ -46,6 +46,24 @@ authenticate (SoupMessage *msg,
SoupAuth *auth,
gboolean retrying)
{
+ if (soup_auth_is_for_proxy (auth)) {
+ char *uri;
+ int i;
+ gboolean found = FALSE;
+
+ uri = g_strdup_printf ("http://%s:%u", soup_auth_get_host (auth), soup_auth_get_port (auth));
+ for (i = 1; i < G_N_ELEMENTS (proxies) && !found; i++) {
+ if (strcmp (uri, proxies[i]) == 0)
+ found = TRUE;
+ }
+ g_assert_true (found);
+ } else {
+ SoupURI *uri = soup_message_get_uri (msg);
+
+ g_assert_cmpstr (uri->host, ==, soup_auth_get_host (auth));
+ g_assert_cmpuint (uri->port, ==, soup_auth_get_port (auth));
+ }
+
if (!retrying) {
soup_auth_authenticate (auth, "user1", "realm1");
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]