Skip to content

Commit

Permalink
Merge pull request #710 from mtomaschewski/dhcp-class-id-check
Browse files Browse the repository at this point in the history
  • Loading branch information
mtomaschewski committed Jul 6, 2017
2 parents e79fdf9 + 9f0fdfc commit 65237de
Show file tree
Hide file tree
Showing 4 changed files with 33 additions and 3 deletions.
4 changes: 2 additions & 2 deletions client/suse/compat-suse.c
Expand Up @@ -4961,7 +4961,7 @@ __ni_suse_parse_dhcp4_user_class(const ni_sysconfig_t *sc, ni_compat_netdev_t *c
ni_string_array_destroy(&names);
ni_string_array_destroy(&compat->dhcp4.user_class.class_id);
return FALSE;
} else if (!ni_check_domain_name(string, length, 0)) {
} else if (!ni_dhcp_check_user_class_id(string, length)) {
ni_warn("%s: %s contains suspect class id element: '%s'",
ni_basename(sc->pathname), prefix,
ni_print_suspect(string, length));
Expand All @@ -4982,7 +4982,7 @@ __ni_suse_parse_dhcp4_user_class(const ni_sysconfig_t *sc, ni_compat_netdev_t *c
ni_print_suspect(string, length));

return FALSE;
} else if (!ni_check_domain_name(string, length, 0)) {
} else if (!ni_dhcp_check_user_class_id(string, length)) {
ni_warn("%s: %s contains suspect class id string: '%s'",
ni_basename(sc->pathname), prefix,
ni_print_suspect(string, length));
Expand Down
3 changes: 2 additions & 1 deletion dhcp4/dbus-api.c
Expand Up @@ -25,6 +25,7 @@
#include <wicked/objectmodel.h>
#include "appconfig.h"
#include "dhcp4/dhcp4.h"
#include "dhcp.h"

static ni_dhcp4_request_t * ni_objectmodel_dhcp4_request_from_dict(const ni_dbus_variant_t *);
static void __ni_objectmodel_dhcp4_device_release(ni_dbus_object_t *);
Expand Down Expand Up @@ -329,7 +330,7 @@ ni_objectmodel_dhcp4_request_set_user_class(ni_dbus_object_t *object,
if (format == NI_DHCP4_USER_CLASS_STRING && uc->class_id.count)
break; /* only one user class identifier for this format type */

if (!ni_check_domain_name(var->string_value, len, 0)) {
if (!ni_dhcp_check_user_class_id(var->string_value, len)) {
ni_warn("Suspect user class id string: '%s' obtained. Skipping.",
ni_print_suspect(var->string_value, len));
return FALSE;
Expand Down
27 changes: 27 additions & 0 deletions src/dhcp.c
Expand Up @@ -28,6 +28,7 @@
#include <string.h>
#include <limits.h>
#include <errno.h>
#include <ctype.h>
#include <endian.h>
#include <stdint.h>
#include <inttypes.h>
Expand Down Expand Up @@ -1849,3 +1850,29 @@ ni_dhcp_fqdn_init(ni_dhcp_fqdn_t *fqdn)
}
}

ni_bool_t
ni_dhcp_check_user_class_id(const char *id, size_t len)
{
const unsigned char *ptr = (const unsigned char *)id;

if (!id || len == 0)
return FALSE;

for (; *ptr && len-- > 0; ++ptr) {
switch (*ptr) {
case '+':
case '-':
case '_':
case '.':
case ':':
case '/':
break;
default:
if (!isalnum(*ptr))
return FALSE;
break;
}
}
return TRUE;
}

2 changes: 2 additions & 0 deletions src/dhcp.h
Expand Up @@ -142,4 +142,6 @@ extern ni_var_array_t * ni_dhcp_option_to_vars(const ni_dhcp_option_t *, const
extern ni_bool_t ni_dhcp_domain_encode(ni_buffer_t *, const char *, ni_bool_t);
extern ni_bool_t ni_dhcp_domain_decode(ni_buffer_t *, char **);

extern ni_bool_t ni_dhcp_check_user_class_id(const char *, size_t);

#endif /* WICKED_DHCP_H */

0 comments on commit 65237de

Please sign in to comment.