summaryrefslogtreecommitdiff
path: root/shared/systemd/nm-sd-utils-shared.c
diff options
context:
space:
mode:
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 85fd6a353e..4444e6c7f6 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);
+}