about summary refs log tree commit diff
path: root/shared/systemd/nm-sd-utils-shared.c
diff options
context:
space:
mode:
authorMichael Biebl <biebl@debian.org>2020-06-28 18:59:08 +0200
committerMichael Biebl <biebl@debian.org>2020-06-28 18:59:08 +0200
commit215112eefc83274273a10d9ddb5e107c9beec548 (patch)
treea16052cef4bb8707d6a906dd784a50c75945d03e /shared/systemd/nm-sd-utils-shared.c
parent5ed4e66e01b005212aee22c255c9c6b2a4b040a9 (diff)
parenta54ac63bbf9b2c71026ac9028a8ffaf186cf3c82 (diff)
Update upstream source from tag 'upstream/1.25.90'
Update to upstream version '1.25.90'
with Debian dir 16d4caa71e8ba8c27ee163c88f11456b6cdc0490
Diffstat (limited to 'shared/systemd/nm-sd-utils-shared.c')
-rw-r--r--shared/systemd/nm-sd-utils-shared.c43
1 files changed, 43 insertions, 0 deletions
diff --git a/shared/systemd/nm-sd-utils-shared.c b/shared/systemd/nm-sd-utils-shared.c
index 85fd6a35..4444e6c7 100644
--- a/shared/systemd/nm-sd-utils-shared.c
+++ b/shared/systemd/nm-sd-utils-shared.c
@@ -13,6 +13,7 @@
 #include "hexdecoct.h"
 #include "hostname-util.h"
 #include "path-util.h"
+#include "web-util.h"
 
 /*****************************************************************************/
 
@@ -94,3 +95,45 @@ gboolean nm_sd_hostname_is_valid (const char *s, bool allow_trailing_dot)
 {
 	return hostname_is_valid (s, allow_trailing_dot);
 }
+
+/*****************************************************************************/
+
+static gboolean
+_http_url_is_valid (const char *url, gboolean only_https)
+{
+	if (   !url
+	    || !url[0])
+		return FALSE;
+
+	if (   !only_https
+	    && NM_STR_HAS_PREFIX (url, "http://"))
+		url += NM_STRLEN ("http://");
+	else if (NM_STR_HAS_PREFIX (url, "https://"))
+		url += NM_STRLEN ("https://");
+	else
+		return FALSE;
+
+	if (!url[0])
+		return FALSE;
+
+	return !NM_STRCHAR_ANY (url, ch, (guchar) ch >= 128u);
+}
+
+gboolean
+nm_sd_http_url_is_valid_https (const char *url)
+{
+	/* We use this function to verify connection:mud-url property, it must thus
+	 * not change behavior.
+	 *
+	 * Note that sd_dhcp_client_set_mud_url() and sd_dhcp6_client_set_request_mud_url()
+	 * assert with http_url_is_valid() that the argument is valid. We thus must make
+	 * sure to only pass URLs that are valid according to http_url_is_valid().
+	 *
+	 * This is given, because our nm_sd_http_url_is_valid_https() is more strict
+	 * than http_url_is_valid().
+	 *
+	 * We only must make sure that this is also correct in the future, when we
+	 * re-import systemd code. */
+	nm_assert (_http_url_is_valid (url, FALSE) == http_url_is_valid (url));
+	return _http_url_is_valid (url, TRUE);
+}