diff --git a/doc/lxc-attach.sgml.in b/doc/lxc-attach.sgml.in index 713a30e7f..14fa77d79 100644 --- a/doc/lxc-attach.sgml.in +++ b/doc/lxc-attach.sgml.in @@ -60,6 +60,8 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA --clear-env -v, --set-var variable --keep-var variable + -u, --uid uid + -g, --gid gid -- command @@ -282,6 +284,30 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + + + + + + + Executes the command with user ID + uid inside the container. + + + + + + + + + + + Executes the command with group ID + gid inside the container. + + + + diff --git a/doc/lxc-execute.sgml.in b/doc/lxc-execute.sgml.in index 20814348d..8b249b329 100644 --- a/doc/lxc-execute.sgml.in +++ b/doc/lxc-execute.sgml.in @@ -53,6 +53,8 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA -d -f config_file -s KEY=VAL + -u, --uid uid + -g, --gid gid -- command @@ -139,6 +141,30 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + + + + + + + Executes the command with user ID + uid inside the container. + + + + + + + + + + + Executes the command with group ID + gid inside the container. + + + + diff --git a/src/lxc/tools/lxc_attach.c b/src/lxc/tools/lxc_attach.c index e98f0a056..551f9f396 100644 --- a/src/lxc/tools/lxc_attach.c +++ b/src/lxc/tools/lxc_attach.c @@ -72,6 +72,8 @@ static const struct option my_longopts[] = { {"set-var", required_argument, 0, 'v'}, {"pty-log", required_argument, 0, 'L'}, {"rcfile", required_argument, 0, 'f'}, + {"uid", required_argument, 0, 'u'}, + {"gid", required_argument, 0, 'g'}, LXC_COMMON_OPTIONS }; @@ -122,6 +124,8 @@ Options :\n\ multiple times.\n\ -f, --rcfile=FILE\n\ Load configuration file FILE\n\ + -u, --uid=UID Execute COMMAND with UID inside the container\n\ + -g, --gid=GID Execute COMMAND with GID inside the container\n\ ", .options = my_longopts, .parser = my_parser, @@ -187,6 +191,14 @@ static int my_parser(struct lxc_arguments *args, int c, char *arg) case 'f': args->rcfile = arg; break; + case 'u': + if (lxc_safe_uint(arg, &args->uid) < 0) + return -1; + break; + case 'g': + if (lxc_safe_uint(arg, &args->gid) < 0) + return -1; + break; } return 0; @@ -333,6 +345,12 @@ int main(int argc, char *argv[]) goto out; } + if (my_args.uid) + attach_options.uid = my_args.uid; + + if (my_args.gid) + attach_options.gid = my_args.gid; + if (command.program) ret = c->attach(c, lxc_attach_run_command, &command, &attach_options, &pid); else