summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBeniamino Galvani <bgalvani@redhat.com>2019-10-18 06:34:54 +0200
committerBeniamino Galvani <bgalvani@redhat.com>2019-10-18 06:34:54 +0200
commita5f22dbc5d026104485c8098a0499135ba779589 (patch)
tree75ed92ccb77169e1d043c5f5bf760d18bb28e4a9
parentc0f4c2f2e67a3afd62c3a154887c11f412647ed9 (diff)
parent2da4d54ac3e58b94a915d1fd0c488610b855c6fa (diff)
downloadNetworkManager-a5f22dbc5d026104485c8098a0499135ba779589.tar.gz
dhcp: merge branch 'bg/dhcp-invalid-hostname'
https://bugzilla.redhat.com/show_bug.cgi?id=1744427 https://gitlab.freedesktop.org/NetworkManager/NetworkManager/merge_requests/310
-rw-r--r--shared/systemd/nm-sd-utils-shared.c17
-rw-r--r--shared/systemd/nm-sd-utils-shared.h3
-rw-r--r--src/dhcp/nm-dhcp-manager.c12
3 files changed, 29 insertions, 3 deletions
diff --git a/shared/systemd/nm-sd-utils-shared.c b/shared/systemd/nm-sd-utils-shared.c
index 3fd0c05089..85fd6a353e 100644
--- a/shared/systemd/nm-sd-utils-shared.c
+++ b/shared/systemd/nm-sd-utils-shared.c
@@ -9,9 +9,10 @@
#include "nm-sd-adapt-shared.h"
-#include "path-util.h"
-#include "hexdecoct.h"
#include "dns-domain.h"
+#include "hexdecoct.h"
+#include "hostname-util.h"
+#include "path-util.h"
/*****************************************************************************/
@@ -39,7 +40,7 @@ nm_sd_utils_path_startswith (const char *path, const char *prefix)
/*****************************************************************************/
-gboolean
+int
nm_sd_utils_unbase64char (char ch, gboolean accept_padding_equal)
{
if ( ch == '='
@@ -83,3 +84,13 @@ int nm_sd_dns_name_to_wire_format (const char *domain,
{
return dns_name_to_wire_format (domain, buffer, len, canonical);
}
+
+int nm_sd_dns_name_is_valid (const char *s)
+{
+ return dns_name_is_valid (s);
+}
+
+gboolean nm_sd_hostname_is_valid (const char *s, bool allow_trailing_dot)
+{
+ return hostname_is_valid (s, allow_trailing_dot);
+}
diff --git a/shared/systemd/nm-sd-utils-shared.h b/shared/systemd/nm-sd-utils-shared.h
index 42ddc3e4f8..3495a31d19 100644
--- a/shared/systemd/nm-sd-utils-shared.h
+++ b/shared/systemd/nm-sd-utils-shared.h
@@ -31,4 +31,7 @@ int nm_sd_dns_name_to_wire_format (const char *domain,
size_t len,
gboolean canonical);
+int nm_sd_dns_name_is_valid (const char *s);
+gboolean nm_sd_hostname_is_valid(const char *s, bool allow_trailing_dot);
+
#endif /* __NM_SD_UTILS_SHARED_H__ */
diff --git a/src/dhcp/nm-dhcp-manager.c b/src/dhcp/nm-dhcp-manager.c
index a27f5572bb..2458f6c616 100644
--- a/src/dhcp/nm-dhcp-manager.c
+++ b/src/dhcp/nm-dhcp-manager.c
@@ -17,6 +17,7 @@
#include <stdio.h>
#include "nm-glib-aux/nm-dedup-multi.h"
+#include "systemd/nm-sd-utils-shared.h"
#include "nm-config.h"
#include "NetworkManagerUtils.h"
@@ -252,6 +253,17 @@ client_start (NMDhcpManager *self,
g_return_val_if_reached (NULL) ;
}
+ if (hostname) {
+ if ( (hostname_use_fqdn && !nm_sd_dns_name_is_valid (hostname))
+ || (!hostname_use_fqdn && !nm_sd_hostname_is_valid (hostname, FALSE))) {
+ nm_log_warn (LOGD_DHCP , "dhcp%c: %s '%s' is invalid, will be ignored",
+ nm_utils_addr_family_to_char (addr_family),
+ hostname_use_fqdn ? "FQDN" : "hostname",
+ hostname);
+ hostname = NULL;
+ }
+ }
+
nm_assert (g_bytes_get_size (hwaddr) == g_bytes_get_size (bcast_hwaddr));
priv = NM_DHCP_MANAGER_GET_PRIVATE (self);