diff options
Diffstat (limited to 'shared/systemd/nm-sd-utils-shared.c')
-rw-r--r-- | shared/systemd/nm-sd-utils-shared.c | 43 |
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); +} |