Browse Source

[Project] Allow `=` separated augmentations to be treated as kv pairs

tags/3.3
Vsevolod Stakhov 1 year ago
parent
commit
5aac570c56
No account linked to committer's email address
1 changed files with 37 additions and 6 deletions
  1. 37
    6
      src/lua/lua_config.c

+ 37
- 6
src/lua/lua_config.c View File

@@ -2086,14 +2086,45 @@ lua_config_register_symbol (lua_State * L)
if (lua_type (L, -1) == LUA_TTABLE) {
int tbl_idx = lua_gettop(L);
for (lua_pushnil(L); lua_next(L, tbl_idx); lua_pop (L, 1)) {
const char *augmentation = lua_tostring(L, -1);
size_t len;
const char *augmentation = lua_tolstring(L, -1, &len), *eqsign_pos;

if (!rspamd_symcache_add_symbol_augmentation(cfg->cache, ret,
augmentation, NULL)) {
lua_settop(L, prev_top);
/* Find `=` symbol and use it as a separator */
eqsign_pos = memchr(augmentation, '=', len);
if (eqsign_pos != NULL && eqsign_pos + 1 < augmentation + len) {
rspamd_ftok_t tok;

return luaL_error (L, "unknown augmentation %s in symbol %s",
augmentation, name);
tok.begin = augmentation;
tok.len = eqsign_pos - augmentation;
char *augentation_name = rspamd_ftokdup(&tok);

tok.begin = eqsign_pos + 1;
tok.len = (augmentation + len) - tok.begin;

char *augmentation_value = rspamd_ftokdup(&tok);

if (!rspamd_symcache_add_symbol_augmentation(cfg->cache, ret,
augentation_name, augmentation_value)) {
lua_settop(L, prev_top);
g_free(augmentation_value);
g_free(augentation_name);

return luaL_error(L, "unknown or invalid augmentation %s in symbol %s",
augmentation, name);
}

g_free(augmentation_value);
g_free(augentation_name);
}
else {
/* Just a value */
if (!rspamd_symcache_add_symbol_augmentation(cfg->cache, ret,
augmentation, NULL)) {
lua_settop(L, prev_top);

return luaL_error(L, "unknown augmentation %s in symbol %s",
augmentation, name);
}
}
}
}

Loading…
Cancel
Save