From: Michael Tremer Date: Sun, 6 Mar 2022 15:08:47 +0000 (+0000) Subject: network: Allow creating any valid networks X-Git-Tag: 0.9.12~35 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=5559e08681b0a78118d6ee1671213693625e4e0a;p=location%2Flibloc.git network: Allow creating any valid networks Formerly, we did not allow creating special networks like ::1/128, ::/0, 127.0.0.0/8, and so on. In order to represent all bogons, we will have to allow this. Signed-off-by: Michael Tremer --- diff --git a/src/network.c b/src/network.c index d7daa80..0266ebf 100644 --- a/src/network.c +++ b/src/network.c @@ -51,10 +51,6 @@ static int valid_prefix(struct in6_addr* address, unsigned int prefix) { if (prefix > 128) return 1; - // And the prefix cannot be zero - if (prefix == 0) - return 1; - // For IPv4-mapped addresses the prefix has to be 96 or lager if (IN6_IS_ADDR_V4MAPPED(address) && prefix <= 96) return 1; @@ -64,39 +60,18 @@ static int valid_prefix(struct in6_addr* address, unsigned int prefix) { LOC_EXPORT int loc_network_new(struct loc_ctx* ctx, struct loc_network** network, struct in6_addr* address, unsigned int prefix) { - // Address cannot be unspecified - if (IN6_IS_ADDR_UNSPECIFIED(address)) { - DEBUG(ctx, "Start address is unspecified\n"); - return -EINVAL; - } - - // Address cannot be loopback - if (IN6_IS_ADDR_LOOPBACK(address)) { - DEBUG(ctx, "Start address is loopback address\n"); - return -EINVAL; - } - - // Address cannot be link-local - if (IN6_IS_ADDR_LINKLOCAL(address)) { - DEBUG(ctx, "Start address cannot be link-local\n"); - return -EINVAL; - } - - // Address cannot be site-local - if (IN6_IS_ADDR_SITELOCAL(address)) { - DEBUG(ctx, "Start address cannot be site-local\n"); - return -EINVAL; - } - // Validate the prefix if (valid_prefix(address, prefix) != 0) { - DEBUG(ctx, "Invalid prefix: %u\n", prefix); - return -EINVAL; + ERROR(ctx, "Invalid prefix: %u\n", prefix); + errno = EINVAL; + return 1; } struct loc_network* n = calloc(1, sizeof(*n)); - if (!n) - return -ENOMEM; + if (!n) { + errno = ENOMEM; + return 1; + } n->ctx = loc_ref(ctx); n->refcount = 1; diff --git a/src/test-network.c b/src/test-network.c index 92088ee..1d4550c 100644 --- a/src/test-network.c +++ b/src/test-network.c @@ -259,13 +259,6 @@ int main(int argc, char** argv) { exit(EXIT_FAILURE); } - // Try adding localhost - err = loc_writer_add_network(writer, &network, "::1/128"); - if (err != -EINVAL) { - fprintf(stderr, "It was possible to add localhost (::1/128): %d\n", err); - exit(EXIT_FAILURE); - } - FILE* f = tmpfile(); if (!f) { fprintf(stderr, "Could not open file for writing: %s\n", strerror(errno));