[lxc-devel] [lxc/master] lxccontainer: fix lxc_config_item_is_supported
Drachenfels-GmbH on Github
lxc-bot at linuxcontainers.org
Tue Oct 27 08:55:52 UTC 2020
A non-text attachment was scrubbed...
Name: not available
Type: text/x-mailbox
Size: 753 bytes
Desc: not available
URL: <http://lists.linuxcontainers.org/pipermail/lxc-devel/attachments/20201027/4c746604/attachment.bin>
-------------- next part --------------
From 6eb516a793edd7c8e37472d00d1fc599f176bb97 Mon Sep 17 00:00:00 2001
From: Ruben Jenster <r.jenster at drachenfels.de>
Date: Fri, 23 Oct 2020 18:32:15 +0200
Subject: [PATCH] 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 <r.jenster at drachenfels.de>
---
src/lxc/confile.c | 12 ++++++++++++
src/lxc/confile.h | 3 +++
src/lxc/lxccontainer.c | 2 +-
src/tests/get_item.c | 5 +++++
4 files changed, 21 insertions(+), 1 deletion(-)
diff --git a/src/lxc/confile.c b/src/lxc/confile.c
index 75587d0ac8..08dd691667 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 df80f639a3..68d50fc804 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 673cf2483d..96aa372e1d 100644
--- a/src/lxc/lxccontainer.c
+++ b/src/lxc/lxccontainer.c
@@ -5749,7 +5749,7 @@ int list_all_containers(const char *lxcpath, char ***nret,
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 f2757c29d8..11db5f6738 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;
More information about the lxc-devel
mailing list