]> git.proxmox.com Git - mirror_lxc.git/commitdiff
add --share-$NS= support to lxc-execute
authorTycho Andersen <tycho@tycho.ws>
Wed, 6 Dec 2017 23:57:29 +0000 (23:57 +0000)
committerTycho Andersen <tycho@tycho.ws>
Fri, 8 Dec 2017 21:37:12 +0000 (21:37 +0000)
Signed-off-by: Tycho Andersen <tycho@tycho.ws>
src/lxc/tools/arguments.c
src/lxc/tools/arguments.h
src/lxc/tools/lxc_execute.c
src/lxc/tools/lxc_start.c

index f16b19562c44d19a210cde68fc4eda7f4ff8796a..585bb14928d8ff13cea68ec3b7da581464b1da94 100644 (file)
@@ -35,6 +35,7 @@
 #include "arguments.h"
 #include "utils.h"
 #include "version.h"
+#include "namespace.h"
 
 static int build_shortopts(const struct option *a_options, char *a_shortopts,
                           size_t a_size)
@@ -289,3 +290,34 @@ int lxc_arguments_str_to_int(struct lxc_arguments *args, const char *str)
 
        return (int)val;
 }
+
+bool lxc_setup_shared_ns(struct lxc_arguments *args, struct lxc_container *c)
+{
+       int i;
+
+       for (i = 0; i < LXC_NS_MAX; i++) {
+               const char *key, *value;
+
+               value = args->share_ns[i];
+               if (!value)
+                       continue;
+
+               if (i == LXC_NS_NET)
+                       key = "lxc.namespace.net";
+               else if (i == LXC_NS_IPC)
+                       key = "lxc.namespace.ipc";
+               else if (i == LXC_NS_UTS)
+                       key = "lxc.namespace.uts";
+               else if (i == LXC_NS_PID)
+                       key = "lxc.namespace.pid";
+               else
+                       continue;
+
+               if (!c->set_config_item(c, key, value)) {
+                       fprintf(stderr, "failed to set %s\n", key);
+                       return false;
+               }
+       }
+
+       return true;
+}
index b07caf42bf52e67c34a6cb9fa45f5b4c796c4436..bfaa665deb5ecfbacdd4f589d4d6951c4c2ba679 100644 (file)
@@ -29,6 +29,7 @@
 #include <stdbool.h>
 #include <stdint.h>
 #include <sys/types.h>
+#include <lxc/lxccontainer.h>
 
 struct lxc_arguments;
 
@@ -160,6 +161,11 @@ struct lxc_arguments {
 #define OPT_VERSION OPT_USAGE - 1
 #define OPT_RCFILE OPT_USAGE - 2
 
+#define OPT_SHARE_NET OPT_USAGE + 1
+#define OPT_SHARE_IPC OPT_USAGE + 2
+#define OPT_SHARE_UTS OPT_USAGE + 3
+#define OPT_SHARE_PID OPT_USAGE + 4
+
 extern int lxc_arguments_parse(struct lxc_arguments *args, int argc,
                               char *const argv[]);
 
@@ -170,4 +176,6 @@ extern int lxc_arguments_str_to_int(struct lxc_arguments *args,
        if (!(arg)->quiet)                                                     \
        fprintf(stderr, "%s: " fmt "\n", (arg)->progname, ##args)
 
+extern bool lxc_setup_shared_ns(struct lxc_arguments *args, struct lxc_container *c);
+
 #endif /* __LXC_ARGUMENTS_H */
index 9af00886cd17aa6c1ae44ccb81263c75956487ec..4b4120030a75288e2b7d464c643f6d2e9e53d809 100644 (file)
@@ -63,6 +63,10 @@ static int my_parser(struct lxc_arguments* args, int c, char* arg)
        case 'g':
                if (lxc_safe_uint(arg, &args->gid) < 0)
                        return -1;
+       case OPT_SHARE_NET: args->share_ns[LXC_NS_NET] = arg; break;
+       case OPT_SHARE_IPC: args->share_ns[LXC_NS_IPC] = arg; break;
+       case OPT_SHARE_UTS: args->share_ns[LXC_NS_UTS] = arg; break;
+       case OPT_SHARE_PID: args->share_ns[LXC_NS_PID] = arg; break;
        }
        return 0;
 }
@@ -73,6 +77,10 @@ static const struct option my_longopts[] = {
        {"define", required_argument, 0, 's'},
        {"uid", required_argument, 0, 'u'},
        {"gid", required_argument, 0, 'g'},
+       {"share-net", required_argument, 0, OPT_SHARE_NET},
+       {"share-ipc", required_argument, 0, OPT_SHARE_IPC},
+       {"share-uts", required_argument, 0, OPT_SHARE_UTS},
+       {"share-pid", required_argument, 0, OPT_SHARE_PID},
        LXC_COMMON_OPTIONS
 };
 
@@ -183,6 +191,11 @@ int main(int argc, char *argv[])
        if (my_args.gid)
                c->lxc_conf->init_gid = my_args.gid;
 
+       if (!lxc_setup_shared_ns(&my_args, c)) {
+               lxc_container_put(c);
+               exit(EXIT_FAILURE);
+       }
+
        c->daemonize = my_args.daemonize == 1;
        bret = c->start(c, 1, my_args.argv);
        ret = c->error_num;
index 7584b59f43881c7cddc96452903c24748132d79a..2909458a81849202a083e51d29e0c7f00b252f64 100644 (file)
 #include "confile.h"
 #include "arguments.h"
 
-#define OPT_SHARE_NET OPT_USAGE + 1
-#define OPT_SHARE_IPC OPT_USAGE + 2
-#define OPT_SHARE_UTS OPT_USAGE + 3
-#define OPT_SHARE_PID OPT_USAGE + 4
-
 static struct lxc_list defines;
 
 static int ensure_path(char **confpath, const char *path)
@@ -152,7 +147,6 @@ Options :\n\
 
 int main(int argc, char *argv[])
 {
-       int i;
        struct lxc_conf *conf;
        struct lxc_log log;
        const char *lxcpath;
@@ -284,27 +278,8 @@ int main(int argc, char *argv[])
                }
        }
 
-       for (i = 0; i < LXC_NS_MAX; i++) {
-               const char *key, *value;
-
-               value = my_args.share_ns[i];
-               if (!value)
-                       continue;
-
-               if (i == LXC_NS_NET)
-                       key = "lxc.namespace.net";
-               else if (i == LXC_NS_IPC)
-                       key = "lxc.namespace.ipc";
-               else if (i == LXC_NS_UTS)
-                       key = "lxc.namespace.uts";
-               else if (i == LXC_NS_PID)
-                       key = "lxc.namespace.pid";
-               else
-                       continue;
-
-               if (!c->set_config_item(c, key, value))
-                       goto out;
-       }
+       if (!lxc_setup_shared_ns(&my_args, c))
+               goto out;
 
        if (!my_args.daemonize) {
                c->want_daemonize(c, false);