From ba623ef3b9ce8f2a92f0f1e47163468932816ab3 Mon Sep 17 00:00:00 2001 From: Holger Eitzenberger Date: Mon, 24 Jan 2011 22:36:32 +0100 Subject: ipset: turn Set name[] into a const pointer Also check for the name length. Note that passing errno values back is not done consistently at various place, as there are some functions which set errno manually, others pass -errno back. I use the -errno approach here, as it is slightly shorter. Signed-off-by: Holger Eitzenberger Signed-off-by: Jozsef Kadlecsik --- include/libipset/types.h | 2 +- lib/types.c | 17 +++++++++-------- 2 files changed, 10 insertions(+), 9 deletions(-) diff --git a/include/libipset/types.h b/include/libipset/types.h index f9c8f2d..d8973db 100644 --- a/include/libipset/types.h +++ b/include/libipset/types.h @@ -70,7 +70,7 @@ struct ipset_elem { * but for the readability the full list is supported. */ struct ipset_type { - char name[IPSET_MAXNAMELEN]; /* type name */ + const char *name; uint8_t revision; /* revision number */ uint8_t family; /* supported family */ uint8_t dimension; /* elem dimension */ diff --git a/lib/types.c b/lib/types.c index 69dac6a..5eb53c4 100644 --- a/lib/types.c +++ b/lib/types.c @@ -441,13 +441,15 @@ ipset_type_add(struct ipset_type *type) assert(type); + if (strlen(type->name) > IPSET_MAXNAMELEN - 1) + return -EINVAL; + /* Add to the list: higher revision numbers first */ for (t = typelist, prev = NULL; t != NULL; t = t->next) { if (STREQ(t->name, type->name)) { - if (t->revision == type->revision) { - errno = EEXIST; - return -1; - } else if (t->revision < type->revision) { + if (t->revision == type->revision) + return -EEXIST; + else if (t->revision < type->revision) { type->next = t; if (prev) prev->next = type; @@ -457,10 +459,9 @@ ipset_type_add(struct ipset_type *type) } } if (t->next != NULL && STREQ(t->next->name, type->name)) { - if (t->next->revision == type->revision) { - errno = EEXIST; - return -1; - } else if (t->next->revision < type->revision) { + if (t->next->revision == type->revision) + return -EEXIST; + else if (t->next->revision < type->revision) { type->next = t->next; t->next = type; return 0; -- cgit v1.2.3