]> git.feebdaed.xyz Git - 0xmirror/strongswan.git/commitdiff
settings: Increase buffer size for key patterns/parts when looking up settings
authorTobias Brunner <tobias@strongswan.org>
Wed, 19 Nov 2025 09:33:39 +0000 (10:33 +0100)
committerTobias Brunner <tobias@strongswan.org>
Wed, 19 Nov 2025 09:37:55 +0000 (10:37 +0100)
The buffer size for individual parts of a key now match the maximum length
of names in VICI. The full pattern should accommodate several long names
(e.g. for connections and child connections in swanctl) even if no
printf-specifiers are used.

src/libstrongswan/settings/settings.c

index 4c47a169c5c3f4865da1f546b1c18633312b31c7..3bfafbb8ffc6f209759171780b2e9b6c828f0201 100644 (file)
@@ -43,6 +43,17 @@ typedef struct private_settings_t private_settings_t;
 bool settings_parser_parse_file(section_t *root, char *name);
 bool settings_parser_parse_string(section_t *root, char *settings);
 
+/**
+ * Buffer size for complete key name/pattern when looking up settings.
+ */
+#define KEY_FULL_BUF_LEN 2048
+
+/**
+ * Buffer size for a single part of a key name (matches the maximum length
+ * for names in VICI).
+ */
+#define KEY_PART_BUF_LEN 257
+
 /**
  * Private data of settings
  */
@@ -287,7 +298,7 @@ static void find_sections_buffered(private_settings_t *this, section_t *section,
 static section_t *ensure_section(private_settings_t *this, section_t *section,
                                                                 const char *key, va_list args)
 {
-       char buf[128], keybuf[512];
+       char buf[KEY_PART_BUF_LEN], keybuf[KEY_FULL_BUF_LEN];
 
        if (snprintf(keybuf, sizeof(keybuf), "%s", key) >= sizeof(keybuf))
        {
@@ -304,7 +315,7 @@ static section_t *ensure_section(private_settings_t *this, section_t *section,
 static array_t *find_sections(private_settings_t *this, section_t *section,
                                                          char *key, va_list args, array_t **sections)
 {
-       char buf[128], keybuf[512];
+       char buf[KEY_PART_BUF_LEN], keybuf[KEY_FULL_BUF_LEN];
 
        if (snprintf(keybuf, sizeof(keybuf), "%s", key) >= sizeof(keybuf))
        {
@@ -476,7 +487,7 @@ static void remove_value_buffered(private_settings_t *this, section_t *section,
 void settings_remove_value(settings_t *settings, char *key, ...)
 {
        private_settings_t *this = (private_settings_t*)settings;
-       char buf[128], keybuf[512];
+       char buf[KEY_PART_BUF_LEN], keybuf[KEY_FULL_BUF_LEN];
        va_list args;
 
        if (snprintf(keybuf, sizeof(keybuf), "%s", key) >= sizeof(keybuf))
@@ -499,7 +510,7 @@ void settings_remove_value(settings_t *settings, char *key, ...)
 static char *find_value(private_settings_t *this, section_t *section,
                                                char *key, va_list args)
 {
-       char buf[128], keybuf[512], *value = NULL;
+       char buf[KEY_PART_BUF_LEN], keybuf[KEY_FULL_BUF_LEN], *value = NULL;
        array_t *sections = NULL;
        kv_t *kv;
 
@@ -525,7 +536,7 @@ static char *find_value(private_settings_t *this, section_t *section,
 static void set_value(private_settings_t *this, section_t *section,
                                          char *key, va_list args, char *value)
 {
-       char buf[128], keybuf[512];
+       char buf[KEY_PART_BUF_LEN], keybuf[KEY_FULL_BUF_LEN];
        kv_t *kv;
 
        if (snprintf(keybuf, sizeof(keybuf), "%s", key) >= sizeof(keybuf))
@@ -939,7 +950,7 @@ METHOD(settings_t, add_fallback, void,
 {
        section_t *section;
        va_list args;
-       char buf[512];
+       char buf[KEY_FULL_BUF_LEN];
 
        this->lock->write_lock(this->lock);
        va_start(args, fallback);