#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)
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;
+}
#include <stdbool.h>
#include <stdint.h>
#include <sys/types.h>
+#include <lxc/lxccontainer.h>
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[]);
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 */
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;
}
{"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
};
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;
#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)
int main(int argc, char *argv[])
{
- int i;
struct lxc_conf *conf;
struct lxc_log log;
const char *lxcpath;
}
}
- 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);