diff options
-rw-r--r-- | src/libserver/dynamic_cfg.c | 19 |
1 files changed, 15 insertions, 4 deletions
diff --git a/src/libserver/dynamic_cfg.c b/src/libserver/dynamic_cfg.c index e3ec39107..ab59b38dc 100644 --- a/src/libserver/dynamic_cfg.c +++ b/src/libserver/dynamic_cfg.c @@ -340,10 +340,17 @@ dump_dynamic_config (struct rspamd_config *cfg) return FALSE; } + struct ucl_emitter_functions *emitter_functions; + FILE *fp; + + fp = fdopen (fd, "w"); + emitter_functions = ucl_object_emit_file_funcs (fp); + if (!ucl_object_emit_full (cfg->current_dynamic_conf, UCL_EMIT_JSON, - ucl_object_emit_fd_funcs (fd), NULL)) { + emitter_functions, NULL)) { msg_err ("cannot emit ucl object: %s", strerror (errno)); - close (fd); + ucl_object_emit_funcs_free (emitter_functions); + fclose (fp); return FALSE; } @@ -352,8 +359,10 @@ dump_dynamic_config (struct rspamd_config *cfg) /* Rename old config */ if (rename (pathbuf, cfg->dynamic_conf) == -1) { msg_err ("rename error: %s", strerror (errno)); - close (fd); + fclose (fp); + ucl_object_emit_funcs_free (emitter_functions); unlink (pathbuf); + return FALSE; } /* Set permissions */ @@ -362,7 +371,9 @@ dump_dynamic_config (struct rspamd_config *cfg) msg_warn ("chmod failed: %s", strerror (errno)); } - close (fd); + fclose (fp); + ucl_object_emit_funcs_free (emitter_functions); + return TRUE; } |