From 38b6715c699f908265f11f6945db8e99bfb83fab Mon Sep 17 00:00:00 2001
From: Amin Ben Romdhane <amin.benromdhane@iopsys.eu>
Date: Wed, 19 Feb 2025 15:25:19 +0100
Subject: [PATCH] Mark Device.Firewall.AdvancedLevel parameter value as
 reference

---
 src/firewall.c | 13 +++++++++++--
 1 file changed, 11 insertions(+), 2 deletions(-)

diff --git a/src/firewall.c b/src/firewall.c
index 7757b81..f9d6b18 100644
--- a/src/firewall.c
+++ b/src/firewall.c
@@ -1321,13 +1321,22 @@ static int set_firewall_config(char *refparam, struct dmctx *ctx, void *data, ch
 
 static int set_firewall_advanced_level(char *refparam, struct dmctx *ctx, void *data, char *instance, char *value, int action)
 {
+	char *allowed_objects[] = {"Device.Firewall.Level.", NULL};
+	struct dm_reference reference = {0};
+
+	bbfdm_get_reference_linker(ctx, value, &reference);
+
 	switch (action) {
 		case VALUECHECK:
 			if (bbfdm_validate_string(ctx, value, -1, -1, NULL, NULL))
 				return FAULT_9007;
+
+			if (dm_validate_allowed_objects(ctx, &reference, allowed_objects))
+				return FAULT_9007;
+
 			break;
 		case VALUESET:
-			if (strcasecmp(value, "Device.Firewall.Level.1.") != 0) {
+			if (strcmp(reference.path, "Device.Firewall.Level.1") != 0) {
 				bbfdm_set_fault_message(ctx, "The current Firewall implementation supports only one Level. So the value should be 'Device.Firewall.Level.1'.");
 				return FAULT_9007;
 			}
@@ -2510,7 +2519,7 @@ DMLEAF tFirewallParams[] = {
 /* PARAM, permission, type, getvalue, setvalue, bbfdm_type, version*/
 {"Enable", &DMWRITE, DMT_BOOL, get_firewall_enable, set_firewall_enable, BBFDM_BOTH},
 {"Config", &DMWRITE, DMT_STRING, get_firewall_config, set_firewall_config, BBFDM_BOTH},
-{"AdvancedLevel", &DMWRITE, DMT_STRING, get_firewall_advanced_level, set_firewall_advanced_level, BBFDM_BOTH},
+{"AdvancedLevel", &DMWRITE, DMT_STRING, get_firewall_advanced_level, set_firewall_advanced_level, BBFDM_BOTH, DM_FLAG_REFERENCE},
 {"LevelNumberOfEntries", &DMREAD, DMT_UNINT, get_firewall_level_number_of_entries, NULL, BBFDM_BOTH},
 {"ChainNumberOfEntries", &DMREAD, DMT_UNINT, get_firewall_chain_number_of_entries, NULL, BBFDM_BOTH},
 {"DMZNumberOfEntries", &DMREAD, DMT_UNINT, get_firewall_dmz_number_of_entries, NULL, BBFDM_BOTH},
-- 
GitLab