config: compact-ize uid/gid map options
authorRobert Swiecki <robert@swiecki.net>
Fri, 26 May 2017 22:33:25 +0000 (00:33 +0200)
committerRobert Swiecki <robert@swiecki.net>
Fri, 26 May 2017 22:33:25 +0000 (00:33 +0200)
config.c
config.pb-c.c
config.pb-c.h
config.proto

index 08c56863d078569f98bd1b7888d77aea6df4c942..ba0fb658880ef43799247ec378c39ac764c0359d 100644 (file)
--- a/config.c
+++ b/config.c
@@ -157,7 +157,11 @@ static bool configParseInternal(struct nsjconf_t *nsjconf, Nsjail__NsJailConfig
                if (p == NULL) {
                        return false;
                }
-               TAILQ_INSERT_TAIL(&nsjconf->uids, p, pointers);
+               if (njc->uidmap[i]->use_newidmap) {
+                       TAILQ_INSERT_TAIL(&nsjconf->newuidmap, p, pointers);
+               } else {
+                       TAILQ_INSERT_TAIL(&nsjconf->uids, p, pointers);
+               }
        }
        for (size_t i = 0; i < njc->n_gidmap; i++) {
                struct idmap_t *p =
@@ -166,25 +170,11 @@ static bool configParseInternal(struct nsjconf_t *nsjconf, Nsjail__NsJailConfig
                if (p == NULL) {
                        return false;
                }
-               TAILQ_INSERT_TAIL(&nsjconf->gids, p, pointers);
-       }
-       for (size_t i = 0; i < njc->n_newuidmap; i++) {
-               struct idmap_t *p =
-                   userParseId(njc->newuidmap[i]->inside_id, njc->newuidmap[i]->outside_id,
-                               njc->newuidmap[i]->count, false /* is_gid */ );
-               if (p == NULL) {
-                       return false;
-               }
-               TAILQ_INSERT_TAIL(&nsjconf->newuidmap, p, pointers);
-       }
-       for (size_t i = 0; i < njc->n_newgidmap; i++) {
-               struct idmap_t *p =
-                   userParseId(njc->newgidmap[i]->inside_id, njc->newgidmap[i]->outside_id,
-                               njc->newgidmap[i]->count, true /* is_gid */ );
-               if (p == NULL) {
-                       return false;
+               if (njc->gidmap[i]->use_newidmap) {
+                       TAILQ_INSERT_TAIL(&nsjconf->newgidmap, p, pointers);
+               } else {
+                       TAILQ_INSERT_TAIL(&nsjconf->gids, p, pointers);
                }
-               TAILQ_INSERT_TAIL(&nsjconf->newgidmap, p, pointers);
        }
 
        return true;
index af2edc7e43894907c95e7508c224b17e18a17d24..00c99924462e76e99d34eea158644cf46b5fa357 100644 (file)
@@ -74,7 +74,8 @@ void nsjail__ns_jail_config__free_unpacked
 char nsjail__id_map__inside_id__default_value[] = "";
 char nsjail__id_map__outside_id__default_value[] = "";
 static const uint32_t nsjail__id_map__count__default_value = 1u;
-static const ProtobufCFieldDescriptor nsjail__id_map__field_descriptors[3] = {
+static const protobuf_c_boolean nsjail__id_map__use_newidmap__default_value = 0;
+static const ProtobufCFieldDescriptor nsjail__id_map__field_descriptors[4] = {
        {
         "inside_id",
         1,
@@ -111,17 +112,30 @@ static const ProtobufCFieldDescriptor nsjail__id_map__field_descriptors[3] = {
         0,                     /* flags */
         0, NULL, NULL          /* reserved1,reserved2, etc */
         },
+       {
+        "use_newidmap",
+        4,
+        PROTOBUF_C_LABEL_REQUIRED,
+        PROTOBUF_C_TYPE_BOOL,
+        0,                     /* quantifier_offset */
+        offsetof(Nsjail__IdMap, use_newidmap),
+        NULL,
+        &nsjail__id_map__use_newidmap__default_value,
+        0,                     /* flags */
+        0, NULL, NULL          /* reserved1,reserved2, etc */
+        },
 };
 
 static const unsigned nsjail__id_map__field_indices_by_name[] = {
        2,                      /* field[2] = count */
        0,                      /* field[0] = inside_id */
        1,                      /* field[1] = outside_id */
+       3,                      /* field[3] = use_newidmap */
 };
 
 static const ProtobufCIntRange nsjail__id_map__number_ranges[1 + 1] = {
        {1, 0},
-       {0, 3}
+       {0, 4}
 };
 
 const ProtobufCMessageDescriptor nsjail__id_map__descriptor = {
@@ -131,7 +145,7 @@ const ProtobufCMessageDescriptor nsjail__id_map__descriptor = {
        "Nsjail__IdMap",
        "nsjail",
        sizeof(Nsjail__IdMap),
-       3,
+       4,
        nsjail__id_map__field_descriptors,
        nsjail__id_map__field_indices_by_name,
        1, nsjail__id_map__number_ranges,
@@ -173,7 +187,7 @@ static const protobuf_c_boolean nsjail__ns_jail_config__clone_newpid__default_va
 static const protobuf_c_boolean nsjail__ns_jail_config__clone_newipc__default_value = 1;
 static const protobuf_c_boolean nsjail__ns_jail_config__clone_newuts__default_value = 1;
 static const protobuf_c_boolean nsjail__ns_jail_config__clone_newcgroup__default_value = 0;
-static const ProtobufCFieldDescriptor nsjail__ns_jail_config__field_descriptors[41] = {
+static const ProtobufCFieldDescriptor nsjail__ns_jail_config__field_descriptors[39] = {
        {
         "mode",
         1,
@@ -642,30 +656,6 @@ static const ProtobufCFieldDescriptor nsjail__ns_jail_config__field_descriptors[
         0,                     /* flags */
         0, NULL, NULL          /* reserved1,reserved2, etc */
         },
-       {
-        "newuidmap",
-        42,
-        PROTOBUF_C_LABEL_REPEATED,
-        PROTOBUF_C_TYPE_MESSAGE,
-        offsetof(Nsjail__NsJailConfig, n_newuidmap),
-        offsetof(Nsjail__NsJailConfig, newuidmap),
-        &nsjail__id_map__descriptor,
-        NULL,
-        0,                     /* flags */
-        0, NULL, NULL          /* reserved1,reserved2, etc */
-        },
-       {
-        "newgidmap",
-        43,
-        PROTOBUF_C_LABEL_REPEATED,
-        PROTOBUF_C_TYPE_MESSAGE,
-        offsetof(Nsjail__NsJailConfig, n_newgidmap),
-        offsetof(Nsjail__NsJailConfig, newgidmap),
-        &nsjail__id_map__descriptor,
-        NULL,
-        0,                     /* flags */
-        0, NULL, NULL          /* reserved1,reserved2, etc */
-        },
 };
 
 static const unsigned nsjail__ns_jail_config__field_indices_by_name[] = {
@@ -689,8 +679,6 @@ static const unsigned nsjail__ns_jail_config__field_indices_by_name[] = {
        11,                     /* field[11] = log_level */
        7,                      /* field[7] = max_conns_per_ip */
        0,                      /* field[0] = mode */
-       40,                     /* field[40] = newgidmap */
-       39,                     /* field[39] = newuidmap */
        15,                     /* field[15] = pass_fd */
        25,                     /* field[25] = persona_addr_compat_layout */
        28,                     /* field[28] = persona_addr_limit_3gb */
@@ -715,7 +703,7 @@ static const unsigned nsjail__ns_jail_config__field_indices_by_name[] = {
 static const ProtobufCIntRange nsjail__ns_jail_config__number_ranges[2 + 1] = {
        {1, 0},
        {6, 3},
-       {0, 41}
+       {0, 39}
 };
 
 const ProtobufCMessageDescriptor nsjail__ns_jail_config__descriptor = {
@@ -725,7 +713,7 @@ const ProtobufCMessageDescriptor nsjail__ns_jail_config__descriptor = {
        "Nsjail__NsJailConfig",
        "nsjail",
        sizeof(Nsjail__NsJailConfig),
-       41,
+       39,
        nsjail__ns_jail_config__field_descriptors,
        nsjail__ns_jail_config__field_indices_by_name,
        2, nsjail__ns_jail_config__number_ranges,
index 51961459891d8d266dcb7210299ac426f722cbe9..0e71b93207b67190378b10658fc69ab4032f41f0 100644 (file)
@@ -38,12 +38,13 @@ struct _Nsjail__IdMap {
        char *inside_id;
        char *outside_id;
        uint32_t count;
+       protobuf_c_boolean use_newidmap;
 };
 extern char nsjail__id_map__inside_id__default_value[];
 extern char nsjail__id_map__outside_id__default_value[];
 #define NSJAIL__ID_MAP__INIT \
  { PROTOBUF_C_MESSAGE_INIT (&nsjail__id_map__descriptor) \
-    , nsjail__id_map__inside_id__default_value, nsjail__id_map__outside_id__default_value, 1u }
+    , nsjail__id_map__inside_id__default_value, nsjail__id_map__outside_id__default_value, 1u, 0 }
 
 struct _Nsjail__NsJailConfig {
        ProtobufCMessage base;
@@ -92,17 +93,13 @@ struct _Nsjail__NsJailConfig {
        Nsjail__IdMap **uidmap;
        size_t n_gidmap;
        Nsjail__IdMap **gidmap;
-       size_t n_newuidmap;
-       Nsjail__IdMap **newuidmap;
-       size_t n_newgidmap;
-       Nsjail__IdMap **newgidmap;
 };
 extern char nsjail__ns_jail_config__hostname__default_value[];
 extern char nsjail__ns_jail_config__cwd__default_value[];
 extern char nsjail__ns_jail_config__bindhost__default_value[];
 #define NSJAIL__NS_JAIL_CONFIG__INIT \
  { PROTOBUF_C_MESSAGE_INIT (&nsjail__ns_jail_config__descriptor) \
-    , NSJAIL__MODE__ONCE, NULL, 0, nsjail__ns_jail_config__hostname__default_value, nsjail__ns_jail_config__cwd__default_value, 0u, nsjail__ns_jail_config__bindhost__default_value, 0u, 600u, 0, NULL, 0,0, 0, 0, 0, 0,NULL, 0, 0, 512ull, 0ull, 600ull, 1ull, 32ull, 0,0, 0,0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0,NULL, 0,NULL, 0,NULL, 0,NULL }
+    , NSJAIL__MODE__ONCE, NULL, 0, nsjail__ns_jail_config__hostname__default_value, nsjail__ns_jail_config__cwd__default_value, 0u, nsjail__ns_jail_config__bindhost__default_value, 0u, 600u, 0, NULL, 0,0, 0, 0, 0, 0,NULL, 0, 0, 512ull, 0ull, 600ull, 1ull, 32ull, 0,0, 0,0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0,NULL, 0,NULL }
 
 /* Nsjail__IdMap methods */
 void nsjail__id_map__init(Nsjail__IdMap * message);
index 9154fc30ea835e9127a01aac64246daf058b9f7a..0f1ae4bf61ced6cbaebd7cc89b0dbfa8a4221682 100644 (file)
@@ -21,6 +21,7 @@ message IdMap {
        required string inside_id = 1 [default = ""];
        required string outside_id = 2 [default = ""];
        required uint32 count = 3 [default = 1];
+       required bool use_newidmap = 4 [default = false];
 }
 
 message NsJailConfig {
@@ -69,6 +70,4 @@ message NsJailConfig {
 
        repeated IdMap uidmap = 40;
        repeated IdMap gidmap = 41;
-       repeated IdMap newuidmap = 42;
-       repeated IdMap newgidmap = 43;
 }