From: Ruben Jenster Date: Fri, 23 Oct 2020 16:32:15 +0000 (+0200) Subject: lxccontainer: fix lxc_config_item_is_supported X-Git-Tag: lxc-5.0.0~349^2 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=refs%2Fpull%2F3564%2Fhead;p=thirdparty%2Flxc.git lxccontainer: fix lxc_config_item_is_supported Use exact match instead of longest prefix match to check whether a config item is supported. Signed-off-by: Ruben Jenster --- diff --git a/src/lxc/confile.c b/src/lxc/confile.c index 75587d0ac..08dd69166 100644 --- a/src/lxc/confile.c +++ b/src/lxc/confile.c @@ -278,6 +278,18 @@ static struct lxc_config_t config_jump_table[] = { static const size_t config_jump_table_size = sizeof(config_jump_table) / sizeof(struct lxc_config_t); +struct lxc_config_t *lxc_get_config_exact(const char *key) +{ + size_t i; + + for (i = 0; i < config_jump_table_size; i++) + if (!strcmp(config_jump_table[i].name, key)) + return &config_jump_table[i]; + + return NULL; +} + + struct lxc_config_t *lxc_get_config(const char *key) { size_t i; diff --git a/src/lxc/confile.h b/src/lxc/confile.h index df80f639a..68d50fc80 100644 --- a/src/lxc/confile.h +++ b/src/lxc/confile.h @@ -45,6 +45,9 @@ struct new_config_item { }; /* Get the jump table entry for the given configuration key. */ +__hidden extern struct lxc_config_t *lxc_get_config_exact(const char *key); + +/* Get the jump table entry if entry name is a prefix of the given configuration key. */ __hidden extern struct lxc_config_t *lxc_get_config(const char *key); /* List all available config items. */ diff --git a/src/lxc/lxccontainer.c b/src/lxc/lxccontainer.c index 673cf2483..96aa372e1 100644 --- a/src/lxc/lxccontainer.c +++ b/src/lxc/lxccontainer.c @@ -5749,7 +5749,7 @@ free_ct_name: bool lxc_config_item_is_supported(const char *key) { - return !!lxc_get_config(key); + return !!lxc_get_config_exact(key); } bool lxc_has_api_extension(const char *extension) diff --git a/src/tests/get_item.c b/src/tests/get_item.c index f2757c29d..11db5f673 100644 --- a/src/tests/get_item.c +++ b/src/tests/get_item.c @@ -600,6 +600,11 @@ int main(int argc, char *argv[]) goto out; } + if (lxc_config_item_is_supported("lxc.arch.nonsense")) { + fprintf(stderr, "%d: failed to detect \"lxc.arch.nonsense\" as unsupported configuration item\n", __LINE__); + goto out; + } + if (c->set_config_item(c, "lxc.notaconfigkey", "invalid")) { fprintf(stderr, "%d: Managed to set \"lxc.notaconfigkey\"\n", __LINE__); goto out;