mirror of
https://git.proxmox.com/git/mirror_lxc
synced 2025-08-02 13:40:14 +00:00
add --share-$NS= support to lxc-execute
Signed-off-by: Tycho Andersen <tycho@tycho.ws>
This commit is contained in:
parent
fb398f0786
commit
4be4832738
@ -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;
|
||||
}
|
||||
|
@ -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 */
|
||||
|
@ -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;
|
||||
|
@ -50,11 +50,6 @@
|
||||
#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);
|
||||
|
Loading…
Reference in New Issue
Block a user