From b84b78c65bf1b32f7305f967b865b81c13364283 Mon Sep 17 00:00:00 2001
From: obarun <eric@obarun.org>
Date: Tue, 29 Mar 2022 19:35:54 +1100
Subject: [PATCH] new field contents and ncontents to tree Master resolve file

---
 src/include/66/tree.h                           | 17 ++++++++++++-----
 src/lib66/tree/deps-lib/deps                    |  8 ++++----
 src/lib66/tree/tree_resolve_master_copy.c       |  2 ++
 src/lib66/tree/tree_resolve_master_create.c     |  2 +-
 .../tree/tree_resolve_master_modify_field.c     | 11 +++++++++++
 5 files changed, 30 insertions(+), 10 deletions(-)

diff --git a/src/include/66/tree.h b/src/include/66/tree.h
index 35d82847..e79cacd3 100644
--- a/src/include/66/tree.h
+++ b/src/include/66/tree.h
@@ -32,6 +32,9 @@
 #define TREE_GROUPS_USER "user"
 #define TREE_GROUPS_USER_LEN (sizeof TREE_GROUPS_USER - 1)
 
+#define DATA_TREE 1
+#define DATA_TREE_MASTER 2
+
 typedef struct resolve_tree_s resolve_tree_t, *resolve_tree_t_ref ;
 struct resolve_tree_s
 {
@@ -85,11 +88,13 @@ struct resolve_tree_master_s
    uint32_t allow ;
    uint32_t enabled ;
    uint32_t current ;
+   uint32_t contents ;
 
    uint32_t nenabled ;
+   uint32_t ncontents ;
 
 } ;
-#define RESOLVE_TREE_MASTER_ZERO { 0,STRALLOC_ZERO,0,0,0,0,0 }
+#define RESOLVE_TREE_MASTER_ZERO { 0,STRALLOC_ZERO,0,0,0,0,0,0,0 }
 
 typedef enum resolve_tree_master_enum_e resolve_tree_master_enum_t, *resolve_tree_master_enum_t_ref;
 enum resolve_tree_master_enum_e
@@ -98,7 +103,9 @@ enum resolve_tree_master_enum_e
     TREE_ENUM_MASTER_ALLOW,
     TREE_ENUM_MASTER_ENABLED,
     TREE_ENUM_MASTER_CURRENT,
+    TREE_ENUM_MASTER_CONTENTS,
     TREE_ENUM_MASTER_NENABLED,
+    TREE_ENUM_MASTER_NCONTENTS,
     TREE_ENUM_MASTER_ENDOFKEY
 } ;
 
@@ -183,15 +190,15 @@ extern int tree_resolve_read_cdb(cdb *c, resolve_tree_t *tres) ;
 extern int tree_resolve_write_cdb(cdbmaker *c, resolve_tree_t *tres) ;
 extern int tree_resolve_copy(resolve_tree_t *dst, resolve_tree_t *tres) ;
 extern int tree_resolve_modify_field(resolve_tree_t *tres, uint8_t field, char const *data) ;
-extern int tree_resolve_field_tosa(stralloc *sa, resolve_tree_t *tres, resolve_tree_enum_t field) ;
+extern int tree_resolve_get_field_tosa(stralloc *sa, resolve_tree_t *tres, resolve_tree_enum_t field) ;
 
 /** Master */
-extern int tree_resolve_read_master_cdb(cdb *c, resolve_tree_master_t *mres) ;
-extern int tree_resolve_write_master_cdb(cdbmaker *c, resolve_tree_master_t *mres) ;
+extern int tree_resolve_master_read_cdb(cdb *c, resolve_tree_master_t *mres) ;
+extern int tree_resolve_master_write_cdb(cdbmaker *c, resolve_tree_master_t *mres) ;
 extern int tree_resolve_master_create(char const *base, uid_t owner) ;
 extern int tree_resolve_master_copy(resolve_tree_master_t *dst, resolve_tree_master_t *mres) ;
 extern int tree_resolve_master_modify_field(resolve_tree_master_t *mres, uint8_t field, char const *data) ;
-extern int tree_resolve_master_field_tosa(stralloc *sa, resolve_tree_master_t *mres, resolve_tree_master_enum_t field) ;
+extern int tree_resolve_master_get_field_tosa(stralloc *sa, resolve_tree_master_t *mres, resolve_tree_master_enum_t field) ;
 
 /**
  *
diff --git a/src/lib66/tree/deps-lib/deps b/src/lib66/tree/deps-lib/deps
index ede8d6e8..afeba759 100644
--- a/src/lib66/tree/deps-lib/deps
+++ b/src/lib66/tree/deps-lib/deps
@@ -9,16 +9,16 @@ tree_isinitialized.o
 tree_isvalid.o
 tree_ongroups.o
 tree_resolve_copy.o
-tree_resolve_field_tosa.o
+tree_resolve_get_field_tosa.o
 tree_resolve_master_copy.o
 tree_resolve_master_create.o
-tree_resolve_master_field_tosa.o
+tree_resolve_master_get_field_tosa.o
 tree_resolve_master_modify_field.o
+tree_resolve_master_read_cdb.o
+tree_resolve_master_write_cdb.o
 tree_resolve_modify_field.o
 tree_resolve_read_cdb.o
-tree_resolve_read_master_cdb.o
 tree_resolve_write_cdb.o
-tree_resolve_write_master_cdb.o
 tree_seed_file_isvalid.o
 tree_seed_free.o
 tree_seed_get_group_permissions.o
diff --git a/src/lib66/tree/tree_resolve_master_copy.c b/src/lib66/tree/tree_resolve_master_copy.c
index 66ecfa69..f9b9212b 100644
--- a/src/lib66/tree/tree_resolve_master_copy.c
+++ b/src/lib66/tree/tree_resolve_master_copy.c
@@ -37,7 +37,9 @@ int tree_resolve_master_copy(resolve_tree_master_t *dst, resolve_tree_master_t *
     dst->allow = mres->allow ;
     dst->enabled = mres->enabled ;
     dst->current = mres->current ;
+    dst->current = mres->contents ;
     dst->nenabled = mres->nenabled ;
+    dst->nenabled = mres->ncontents ;
 
     return 1 ;
 
diff --git a/src/lib66/tree/tree_resolve_master_create.c b/src/lib66/tree/tree_resolve_master_create.c
index 3ccb918a..76c88fd4 100644
--- a/src/lib66/tree/tree_resolve_master_create.c
+++ b/src/lib66/tree/tree_resolve_master_create.c
@@ -50,7 +50,7 @@ int tree_resolve_master_create(char const *base, uid_t owner)
     mres.name = resolve_add_string(wres, SS_MASTER + 1) ;
     mres.allow = resolve_add_string(wres, pw->pw_name) ;
 
-    log_trace("write inner resolve file of trees") ;
+    log_trace("write Master resolve file of trees") ;
     if (!resolve_write(wres, dst, SS_MASTER + 1))
         goto err ;
 
diff --git a/src/lib66/tree/tree_resolve_master_modify_field.c b/src/lib66/tree/tree_resolve_master_modify_field.c
index a99bcb24..b2d76340 100644
--- a/src/lib66/tree/tree_resolve_master_modify_field.c
+++ b/src/lib66/tree/tree_resolve_master_modify_field.c
@@ -28,7 +28,9 @@ resolve_field_table_t resolve_tree_master_field_table[] = {
     [TREE_ENUM_MASTER_ALLOW] = { .field = "allow" },
     [TREE_ENUM_MASTER_ENABLED] = { .field = "enabled" },
     [TREE_ENUM_MASTER_CURRENT] = { .field = "current" },
+    [TREE_ENUM_MASTER_CONTENTS] = { .field = "contents" },
     [TREE_ENUM_MASTER_NENABLED] = { .field = "nenabled" },
+    [TREE_ENUM_MASTER_NCONTENTS] = { .field = "ncontents" },
     [TREE_ENUM_MASTER_ENDOFKEY] = { .field = 0 }
 } ;
 
@@ -59,11 +61,20 @@ int tree_resolve_master_modify_field(resolve_tree_master_t *mres, uint8_t field,
             mres->current = resolve_add_string(wres,data) ;
             break ;
 
+        case TREE_ENUM_MASTER_CONTENTS:
+            mres->contents = resolve_add_string(wres,data) ;
+            break ;
+
         case TREE_ENUM_MASTER_NENABLED:
             if (!uint0_scan(data, &ifield)) goto err ;
             mres->nenabled = ifield ;
             break ;
 
+        case TREE_ENUM_MASTER_NCONTENTS:
+            if (!uint0_scan(data, &ifield)) goto err ;
+            mres->ncontents = ifield ;
+            break ;
+
         default:
             break ;
     }
-- 
GitLab