From fd9b465de588f05d5449d0ce66ef1bb1da9c74b9 Mon Sep 17 00:00:00 2001 From: Amin Ben Romdhane Date: Fri, 25 Jul 2025 10:09:51 +0000 Subject: [PATCH] Fix internal references --- libbbfdm-api/legacy/dmentry.c | 3 +++ libbbfdm-api/legacy/dmuci.c | 31 ++++++++++++++++++++++++++++++- 2 files changed, 33 insertions(+), 1 deletion(-) diff --git a/libbbfdm-api/legacy/dmentry.c b/libbbfdm-api/legacy/dmentry.c index deefa28c..1eb1cca2 100644 --- a/libbbfdm-api/legacy/dmentry.c +++ b/libbbfdm-api/legacy/dmentry.c @@ -287,6 +287,7 @@ int adm_entry_get_reference_param(struct dmctx *ctx, char *param, char *linker, dmctx.inparam_isparam = 1; dmctx.in_param = param; dmctx.linker = linker; + dmctx.dm_type = ctx->dm_type; dm_entry_get_reference_param(&dmctx); @@ -310,6 +311,7 @@ int adm_entry_get_reference_value(struct dmctx *ctx, const char *param, char **v bbf_ctx_init_sub(&dmctx, ctx->dm_entryobj); dmctx.in_param = linker; + dmctx.dm_type = ctx->dm_type; dm_entry_get_reference_value(&dmctx); @@ -334,6 +336,7 @@ bool adm_entry_object_exists(struct dmctx *ctx, const char *param) // To be remo blob_buf_init(&dmctx.bb, 0); dmctx.in_param = linker; + dmctx.dm_type = ctx->dm_type; dm_entry_object_exists(&dmctx); diff --git a/libbbfdm-api/legacy/dmuci.c b/libbbfdm-api/legacy/dmuci.c index 5ab86dfa..43ab495a 100644 --- a/libbbfdm-api/legacy/dmuci.c +++ b/libbbfdm-api/legacy/dmuci.c @@ -37,19 +37,46 @@ static void bbfdm_uci_init_ctx(struct uci_context **uci_ctx, const char *confdir uci_set_savedir(*uci_ctx, savedir); } +static bool ensure_folder_exists(const char *path) +{ + if (folder_exists(path)) + return true; + + if (mkdir(path, 0755) == 0 || errno == EEXIST) + return true; + + BBF_ERR("Failed to create directory: %s", path); + return false; +} + void dm_uci_init(struct dmctx *bbf_ctx) { + ensure_folder_exists("/tmp/bbfdm/"); + if (bbf_ctx->dm_type == BBFDM_CWMP) { + ensure_folder_exists("/tmp/bbfdm/.cwmp/"); + ensure_folder_exists("/tmp/bbfdm/.cwmp/config/"); + ensure_folder_exists("/tmp/bbfdm/.cwmp/dmmap/"); + bbfdm_uci_init_ctx(&bbf_ctx->config_uci_ctx, config_dir, "/tmp/bbfdm/.cwmp/config/"); bbfdm_uci_init_ctx(&bbf_ctx->dmmap_uci_ctx, bbfdm_dir, "/tmp/bbfdm/.cwmp/dmmap/"); } else if (bbf_ctx->dm_type == BBFDM_USP) { + ensure_folder_exists("/tmp/bbfdm/.usp/"); + ensure_folder_exists("/tmp/bbfdm/.usp/config/"); + ensure_folder_exists("/tmp/bbfdm/.usp/dmmap/"); + bbfdm_uci_init_ctx(&bbf_ctx->config_uci_ctx, config_dir, "/tmp/bbfdm/.usp/config/"); bbfdm_uci_init_ctx(&bbf_ctx->dmmap_uci_ctx, bbfdm_dir, "/tmp/bbfdm/.usp/dmmap/"); } else { + ensure_folder_exists("/tmp/bbfdm/.bbfdm/"); + ensure_folder_exists("/tmp/bbfdm/.bbfdm/config/"); + ensure_folder_exists("/tmp/bbfdm/.bbfdm/dmmap/"); + bbfdm_uci_init_ctx(&bbf_ctx->config_uci_ctx, config_dir, "/tmp/bbfdm/.bbfdm/config/"); bbfdm_uci_init_ctx(&bbf_ctx->dmmap_uci_ctx, bbfdm_dir, "/tmp/bbfdm/.bbfdm/dmmap/"); } + ensure_folder_exists("/tmp/bbfdm/.varstate/"); bbfdm_uci_init_ctx(&bbf_ctx->varstate_uci_ctx, varstate_dir, "/tmp/bbfdm/.varstate/"); uci_ctx = bbf_ctx->config_uci_ctx; @@ -376,8 +403,10 @@ int dmuci_commit_package(char *package) if (uci_lookup_ptr(uci_ctx, &ptr, package, true) != UCI_OK) return -1; - if (uci_commit(uci_ctx, &ptr.p, false) != UCI_OK) + if (uci_commit(uci_ctx, &ptr.p, false) != UCI_OK) { + BBF_ERR("Failed to commit UCI package '%s'. confdir: '%s', savedir: '%s'.", package, uci_ctx->confdir, uci_ctx->savedir); return -1; + } return 0; }