int range4_decode(IPAddressRange_t const *, struct ipv4_range *);
int range6_decode(IPAddressRange_t const *, struct ipv6_range *);
-int str_to_prefix4(const char *, struct ipv4_prefix *);
-int str_to_prefix6(const char *, struct ipv6_prefix *);
-int str_to_prefix_length(const char *, uint8_t *, uint8_t);
+int prefix4_parse(const char *, struct ipv4_prefix *);
+int prefix6_parse(const char *, struct ipv6_prefix *);
+int prefix_length_parse(const char *, uint8_t *, uint8_t);
int ipv4_prefix_validate(struct ipv4_prefix *);
int ipv6_prefix_validate(struct ipv6_prefix *);
#include "slurm_parser.h"
#include <errno.h>
-#include <stdbool.h>
#include <stdint.h>
#include <string.h>
#include <openssl/evp.h>
return error;
}
-static int
-parse_prefix4(char *text, struct ipv4_prefix *prefixv4)
-{
- if (text == NULL)
- return -EINVAL;
- return str_to_prefix4(text, prefixv4);
-}
-
-static int
-parse_prefix6(char *text, struct ipv6_prefix *prefixv6)
-{
- if (text == NULL)
- return -EINVAL;
- return str_to_prefix6(text, prefixv6);
-}
-
-static int
-parse_prefix_length(char *text, uint8_t *value, uint8_t max_value)
-{
- if (text == NULL)
- return -EINVAL;
- return str_to_prefix_length(text, value, max_value);
-}
-
-/*
- * Any unknown members should be treated as errors, RFC8416 3.1:
- * "JSON members that are not defined here MUST NOT be used in SLURM
- * files. An RP MUST consider any deviations from the specifications to
- * be errors."
- */
-static bool
-valid_members_count(json_t *object, size_t expected_size)
-{
- return json_object_size(object) == expected_size;
-}
-
static int
set_asn(json_t *object, bool is_assertion, uint32_t *result, uint8_t *flag,
size_t *members_loaded)
token = strtok(clone, "/");
isv4 = strchr(token, ':') == NULL;
if (isv4)
- error = parse_prefix4(token, &prefixv4);
+ error = prefix4_parse(token, &prefixv4);
else
- error = parse_prefix6(token, &prefixv6);
+ error = prefix6_parse(token, &prefixv6);
if (error) {
free(clone);
/* Second part: Prefix length in numeric format */
token = strtok(NULL, "/");
- error = parse_prefix_length(token,
+ error = prefix_length_parse(token,
(isv4 ? &prefixv4.len : &prefixv6.len),
(isv4 ? 32 : 128));
free(clone);
}
/* Validate expected members */
- if (!valid_members_count(object, member_count)) {
+ if (!json_valid_members_count(object, member_count)) {
pr_err("Prefix filter has unknown members (see RFC 8416 section 3.3.1)");
error = -EINVAL;
goto release_comment;
}
/* Validate expected members */
- if (!valid_members_count(object, member_count)) {
+ if (!json_valid_members_count(object, member_count)) {
pr_err("Prefix assertion has unknown members (see RFC 8416 section 3.4.1)");
error = -EINVAL;
goto release_comment;
}
/* Validate expected members */
- if (!valid_members_count(object, member_count)) {
+ if (!json_valid_members_count(object, member_count)) {
pr_err("BGPsec filter has unknown members (see RFC 8416 section 3.3.2)");
error = -EINVAL;
goto release_comment;
}
/* Validate expected members */
- if (!valid_members_count(object, member_count)) {
+ if (!json_valid_members_count(object, member_count)) {
pr_err("BGPsec assertion has unknown members (see RFC 8416 section 3.4.2)");
error = -EINVAL;
goto release_comment;
CHECK_REQUIRED(bgpsec, BGPSEC_FILTERS)
expected_members = 2;
- if (!valid_members_count(filters, expected_members))
+ if (!json_valid_members_count(filters, expected_members))
return pr_err(
"SLURM '%s' must contain only %lu members (RFC 8416 section 3.2)",
VALIDATION_OUTPUT_FILTERS,
CHECK_REQUIRED(bgpsec, BGPSEC_ASSERTIONS)
expected_members = 2;
- if (!valid_members_count(assertions, expected_members))
+ if (!json_valid_members_count(assertions, expected_members))
return pr_err(
"SLURM '%s' must contain only %lu members (RFC 8416 section 3.2)",
LOCALLY_ADDED_ASSERTIONS,
return error;
expected_members = 3;
- if (!valid_members_count(root, expected_members))
+ if (!json_valid_members_count(root, expected_members))
return pr_err(
"SLURM root must have only %lu members (RFC 8416 section 3.2)",
expected_members);