diff options
author | Mrunal Patel <mrunalp@gmail.com> | 2016-05-05 16:43:32 -0700 |
---|---|---|
committer | Colin Walters (automation) <walters+githubbot@verbum.org> | 2016-05-06 19:30:46 +0000 |
commit | dad57eae093dc2bf9510a0a050c71dfffdbebb45 (patch) | |
tree | 5d1f48c5ff01e96e9ebad54f1865913806737452 | |
parent | d470be9650bb4ea25092f8a0e8f47644f652f413 (diff) | |
download | bubblewrap-dad57eae093dc2bf9510a0a050c71dfffdbebb45.tar.gz |
Add support for mounting mqueue
Signed-off-by: Mrunal Patel <mrunalp@gmail.com>
Closes: #45
Approved by: cgwalters
-rw-r--r-- | bubblewrap.c | 26 |
1 files changed, 25 insertions, 1 deletions
diff --git a/bubblewrap.c b/bubblewrap.c index e74136a..07986e0 100644 --- a/bubblewrap.c +++ b/bubblewrap.c @@ -53,6 +53,7 @@ typedef enum { SETUP_MOUNT_PROC, SETUP_MOUNT_DEV, SETUP_MOUNT_TMPFS, + SETUP_MOUNT_MQUEUE, SETUP_MAKE_DIR, SETUP_MAKE_FILE, SETUP_MAKE_BIND_FILE, @@ -87,6 +88,7 @@ enum { PRIV_SEP_OP_PROC_MOUNT, PRIV_SEP_OP_TMPFS_MOUNT, PRIV_SEP_OP_DEVPTS_MOUNT, + PRIV_SEP_OP_MQUEUE_MOUNT, }; typedef struct { @@ -157,6 +159,7 @@ usage (int ecode) " --proc DEST Mount procfs on DEST\n" " --dev DEST Mount new dev on DEST\n" " --tmpfs DEST Mount new tmpfs on DEST\n" + " --mqueue DEST Mount new mqueue on DEST\n" " --dir DEST Create dir at DEST\n" " --file FD DEST Copy from FD to dest DEST\n" " --bind-data FD DEST Copy from FD to file which is bind-mounted on DEST\n" @@ -515,6 +518,10 @@ privileged_op (int privileged_op_socket, "newinstance,ptmxmode=0666,mode=620") != 0) die_with_error ("Can't mount devpts on %s", arg1); break; + case PRIV_SEP_OP_MQUEUE_MOUNT: + if (mount ("mqueue", arg1, "mqueue", 0, NULL) != 0) + die_with_error ("Can't mount mqueue on %s", arg1); + break; default: die ("Unexpected privileged op %d", op); } @@ -679,9 +686,15 @@ setup_newroot (bool unshare_pid, privileged_op (privileged_op_socket, PRIV_SEP_OP_TMPFS_MOUNT, 0, dest, NULL); - break; + case SETUP_MOUNT_MQUEUE: + if (mkdir (dest, 0755) != 0 && errno != EEXIST) + die_with_error ("Can't mkdir %s", op->dest); + privileged_op (privileged_op_socket, + PRIV_SEP_OP_MQUEUE_MOUNT, 0, + dest, NULL); + break; case SETUP_MAKE_DIR: if (mkdir (dest, 0755) != 0 && errno != EEXIST) die_with_error ("Can't mkdir %s", op->dest); @@ -1010,6 +1023,17 @@ parse_args_recurse (int *argcp, argv += 1; argc -= 1; } + else if (strcmp (arg, "--mqueue") == 0) + { + if (argc < 2) + die ("--mqueue takes an argument"); + + op = setup_op_new (SETUP_MOUNT_MQUEUE); + op->dest = argv[1]; + + argv += 1; + argc -= 1; + } else if (strcmp (arg, "--dir") == 0) { if (argc < 2) |