MINOR: guid: restrict guid format

GUID format is unspecified to allow users to choose the naming scheme.
Some restrictions however are added by this patch, mainly to ensure
coherence and memory usage.

The first restriction is on the length of GUID. No more than 127
characters can be used to prevent memory over consumption.

The second restriction is on the character set allowed in GUID. Utility
function invalid_char() is used for this : it allows alphanumeric
values and '-', '_', '.' and ':'.
This commit is contained in:
Amaury Denoyelle 2024-03-27 15:15:19 +01:00
parent 84fa6b344a
commit 1009ca4160
2 changed files with 16 additions and 0 deletions

View File

@ -4,6 +4,9 @@
#include <import/ebtree-t.h>
#include <haproxy/obj_type-t.h>
/* Maximum GUID size excluding final '\0' */
#define GUID_MAX_LEN 127
struct guid_node {
struct ebpt_node node; /* attach point into GUID global tree */
enum obj_type *obj_type; /* pointer to GUID obj owner */

View File

@ -26,6 +26,18 @@ int guid_insert(enum obj_type *objt, const char *uid, char **errmsg)
struct guid_node *dup;
struct ebpt_node *node;
char *dup_name = NULL;
const char *c;
if (strlen(uid) > GUID_MAX_LEN) {
memprintf(errmsg, "UID too big");
goto err;
}
c = invalid_char(uid);
if (c) {
memprintf(errmsg, "invalid character '%c'", c[0]);
goto err;
}
switch (obj_type(objt)) {
default:
@ -52,6 +64,7 @@ int guid_insert(enum obj_type *objt, const char *uid, char **errmsg)
return 0;
err:
ALREADY_CHECKED(guid);
ha_free(&guid->node.key);
ha_free(&dup_name);
return 1;