From 4365428642128c9e1cc0f157f65b26fb327859c5 Mon Sep 17 00:00:00 2001
From: obarun <eric@obarun.org>
Date: Fri, 1 Dec 2023 22:15:07 +1100
Subject: [PATCH] fix switch of service at tree remove command

---
 src/lib66/exec/ssexec_tree_admin.c | 15 +++++++++++----
 1 file changed, 11 insertions(+), 4 deletions(-)

diff --git a/src/lib66/exec/ssexec_tree_admin.c b/src/lib66/exec/ssexec_tree_admin.c
index 21e54e58..b51b64c7 100644
--- a/src/lib66/exec/ssexec_tree_admin.c
+++ b/src/lib66/exec/ssexec_tree_admin.c
@@ -973,8 +973,10 @@ void tree_rules(char const *base, char const *treename, uid_t *uids, uint8_t wha
     log_info("Permissions rules set successfully for tree: ", treename) ;
 }
 
-static void tree_service_switch_contents(char const *base, char const *treesrc, char const *treedst)
+static void tree_service_switch_contents(char const *base, char const *treesrc, char const *treedst, ssexec_t *info)
 {
+    log_flow() ;
+
     size_t pos = 0 ;
     resolve_tree_t tres = RESOLVE_TREE_ZERO ;
     resolve_wrapper_t_ref wres = resolve_set_struct(DATA_TREE, &tres) ;
@@ -987,6 +989,9 @@ static void tree_service_switch_contents(char const *base, char const *treesrc,
 
     FOREACH_SASTR(&sa, pos) {
         log_trace("switch service: ", sa.s + pos, " to tree: ", treedst) ;
+
+        tree_service_add(treedst, sa.s + pos, info) ;
+
         if (!resolve_modify_field_g(swres, base, sa.s + pos, E_RESOLVE_SERVICE_TREENAME, treedst))
             log_dieu(LOG_EXIT_SYS, "modify resolve file of: ", sa.s + pos) ;
     }
@@ -996,7 +1001,7 @@ static void tree_service_switch_contents(char const *base, char const *treesrc,
     resolve_free(swres) ;
 }
 
-void tree_remove(graph_t *g, char const *base, char const *treename)
+void tree_remove(graph_t *g, char const *base, char const *treename, ssexec_t *info)
 {
     log_flow() ;
 
@@ -1034,9 +1039,11 @@ void tree_remove(graph_t *g, char const *base, char const *treename)
 
         if (r)
             current = tree ;
+        else
+            current = SS_DEFAULT_TREENAME ;
     }
 
-    tree_service_switch_contents(base, treename, current) ;
+    tree_service_switch_contents(base, treename, current, info) ;
 
     log_trace("remove resolve file of tree: ", treename) ;
     resolve_remove_g(base, treename, DATA_TREE) ;
@@ -1237,7 +1244,7 @@ int ssexec_tree_admin(int argc, char const *const *argv, ssexec_t *info)
     graph_build_tree(&graph, info->base.s, E_RESOLVE_TREE_MASTER_CONTENTS) ;
 
     if (what.remove) {
-        tree_remove(&graph, info->base.s, info->treename.s) ;
+        tree_remove(&graph, info->base.s, info->treename.s, info) ;
         goto freed ;
     }
 
-- 
GitLab