* [PATCH lxc 1/2] lxc-unshare: accept multiple -s options
@ 2010-05-13 19:34 Serge E. Hallyn
[not found] ` <20100513193412.GA15433-r/Jw6+rmf7HQT0dZR+AlfA@public.gmane.org>
0 siblings, 1 reply; 5+ messages in thread
From: Serge E. Hallyn @ 2010-05-13 19:34 UTC (permalink / raw)
To: Daniel Lezcano; +Cc: Linux Containers
(also remove -f from usage as it is not actually supported)
Signed-off-by: Serge E. Hallyn <serue-r/Jw6+rmf7HQT0dZR+AlfA@public.gmane.org>
---
src/lxc/lxc_unshare.c | 28 ++++++++++++++++++++++++++--
1 files changed, 26 insertions(+), 2 deletions(-)
diff --git a/src/lxc/lxc_unshare.c b/src/lxc/lxc_unshare.c
index 10654f7..8db1cb7 100644
--- a/src/lxc/lxc_unshare.c
+++ b/src/lxc/lxc_unshare.c
@@ -48,7 +48,7 @@ void usage(char *cmd)
fprintf(stderr, "\t -s flags: Ored list of flags to unshare:\n" \
"\t MOUNT, PID, UTSNAME, IPC, USER, NETWORK\n");
fprintf(stderr, "\t -u <id> : new id to be set if -s USER is specified\n");
- fprintf(stderr, "\t if -f or -s PID is specified, <command> is mandatory)\n");
+ fprintf(stderr, "\t if -s PID is specified, <command> is mandatory)\n");
_exit(1);
}
@@ -154,6 +154,29 @@ static int do_start(void *arg)
return 1;
}
+void extend_namespaces(char **n, char *optarg)
+{
+ char *namespaces = *n;
+ int cont = 0, newlen = strlen(optarg) + 1; /* +1 for trailing \0 */
+
+ if (namespaces) {
+ cont = 1;
+ newlen += strlen(namespaces) + 1; /* +1 for '|' */
+ }
+
+ namespaces = realloc(namespaces, newlen);
+ if (!namespaces) {
+ perror("realloc");
+ exit(1);
+ }
+ if (cont)
+ sprintf(namespaces+strlen(namespaces), "|%s", optarg);
+ else
+ sprintf(namespaces, "%s", optarg);
+ namespaces[newlen-1] = '\0';
+ *n = namespaces;
+}
+
int main(int argc, char *argv[])
{
int opt, status;
@@ -174,7 +197,8 @@ int main(int argc, char *argv[])
while ((opt = getopt(argc, argv, "s:u:")) != -1) {
switch (opt) {
case 's':
- namespaces = optarg;
+ extend_namespaces(&namespaces, optarg);
+ printf("namespaces is %s\n", namespaces);
break;
case 'u':
uid = lookup_user(optarg);
--
1.6.3.3
^ permalink raw reply related [flat|nested] 5+ messages in thread[parent not found: <20100513193412.GA15433-r/Jw6+rmf7HQT0dZR+AlfA@public.gmane.org>]
* [PATCH lxc 2/2] lxc-unshare: make CLONE_NEWPID imply CLONE_NEWNS [not found] ` <20100513193412.GA15433-r/Jw6+rmf7HQT0dZR+AlfA@public.gmane.org> @ 2010-05-13 19:34 ` Serge E. Hallyn [not found] ` <20100513193447.GA15830-r/Jw6+rmf7HQT0dZR+AlfA@public.gmane.org> 2010-05-18 15:49 ` [PATCH lxc 1/2] lxc-unshare: accept multiple -s options Daniel Lezcano 1 sibling, 1 reply; 5+ messages in thread From: Serge E. Hallyn @ 2010-05-13 19:34 UTC (permalink / raw) To: Daniel Lezcano; +Cc: Linux Containers I would like to also automatically have /proc remounted, but that would require digging deeper into lxc_clone. Mind you perhaps having NEWPID imply NEWNS should be done there, at src/lxc/namespace.c:lxc_clone anyway. I'm starting here... Won't be offended if it's rejected on those grounds :) Signed-off-by: Serge E. Hallyn <serue-r/Jw6+rmf7HQT0dZR+AlfA@public.gmane.org> --- src/lxc/lxc_unshare.c | 4 ++++ 1 files changed, 4 insertions(+), 0 deletions(-) diff --git a/src/lxc/lxc_unshare.c b/src/lxc/lxc_unshare.c index 8db1cb7..8531b59 100644 --- a/src/lxc/lxc_unshare.c +++ b/src/lxc/lxc_unshare.c @@ -49,6 +49,7 @@ void usage(char *cmd) "\t MOUNT, PID, UTSNAME, IPC, USER, NETWORK\n"); fprintf(stderr, "\t -u <id> : new id to be set if -s USER is specified\n"); fprintf(stderr, "\t if -s PID is specified, <command> is mandatory)\n"); + fprintf(stderr, "\t If -s PID is specified, then -s MOUNT is implied\n"); _exit(1); } @@ -213,6 +214,9 @@ int main(int argc, char *argv[]) if (ret) usage(argv[0]); + if (flags & CLONE_NEWPID) + flags |= CLONE_NEWNS; + if (!(flags & CLONE_NEWUSER) && uid != -1) { ERROR("-u <uid> needs -s USER option"); return 1; -- 1.6.3.3 ^ permalink raw reply related [flat|nested] 5+ messages in thread
[parent not found: <20100513193447.GA15830-r/Jw6+rmf7HQT0dZR+AlfA@public.gmane.org>]
* Re: [PATCH lxc 2/2] lxc-unshare: make CLONE_NEWPID imply CLONE_NEWNS [not found] ` <20100513193447.GA15830-r/Jw6+rmf7HQT0dZR+AlfA@public.gmane.org> @ 2010-05-18 16:01 ` Daniel Lezcano 0 siblings, 0 replies; 5+ messages in thread From: Daniel Lezcano @ 2010-05-18 16:01 UTC (permalink / raw) To: Serge E. Hallyn; +Cc: Linux Containers On 05/13/2010 09:34 PM, Serge E. Hallyn wrote: > I would like to also automatically have /proc remounted, but > that would require digging deeper into lxc_clone. You should not make that automatically, especially in lxc-clone because this function is just for cloning a process in a new namespace, nothing more. We may want to access /proc after cloning, for example to reach /proc/<pid>/ns/*. The automatic mount, should be done in your child reaper (like lxc-init), otherwise let the container init to run the services and mount /proc. In the case of lxc_unshare, you can add a new option to remount /proc when there is the pidns or the mountns options. Otherwise, adding the NEWNS with the NEWPID makes sense for me. Don't forget lxc_unshare is a simple tool, it is not supposed to replace lxc-start/lxc-execute, at least it should do a bit more than the "unshare" command. > Mind you perhaps having NEWPID imply NEWNS should be done there, > at src/lxc/namespace.c:lxc_clone anyway. I'm starting here... > Won't be offended if it's rejected on those grounds :) > > Signed-off-by: Serge E. Hallyn<serue-r/Jw6+rmf7HQT0dZR+AlfA@public.gmane.org> > --- > src/lxc/lxc_unshare.c | 4 ++++ > 1 files changed, 4 insertions(+), 0 deletions(-) > > diff --git a/src/lxc/lxc_unshare.c b/src/lxc/lxc_unshare.c > index 8db1cb7..8531b59 100644 > --- a/src/lxc/lxc_unshare.c > +++ b/src/lxc/lxc_unshare.c > @@ -49,6 +49,7 @@ void usage(char *cmd) > "\t MOUNT, PID, UTSNAME, IPC, USER, NETWORK\n"); > fprintf(stderr, "\t -u<id> : new id to be set if -s USER is specified\n"); > fprintf(stderr, "\t if -s PID is specified,<command> is mandatory)\n"); > + fprintf(stderr, "\t If -s PID is specified, then -s MOUNT is implied\n"); > _exit(1); > } > > @@ -213,6 +214,9 @@ int main(int argc, char *argv[]) > if (ret) > usage(argv[0]); > > + if (flags& CLONE_NEWPID) > + flags |= CLONE_NEWNS; > + > if (!(flags& CLONE_NEWUSER)&& uid != -1) { > ERROR("-u<uid> needs -s USER option"); > return 1; ^ permalink raw reply [flat|nested] 5+ messages in thread
* Re: [PATCH lxc 1/2] lxc-unshare: accept multiple -s options [not found] ` <20100513193412.GA15433-r/Jw6+rmf7HQT0dZR+AlfA@public.gmane.org> 2010-05-13 19:34 ` [PATCH lxc 2/2] lxc-unshare: make CLONE_NEWPID imply CLONE_NEWNS Serge E. Hallyn @ 2010-05-18 15:49 ` Daniel Lezcano [not found] ` <4BF2B71A.8020906-NmTC/0ZBporQT0dZR+AlfA@public.gmane.org> 1 sibling, 1 reply; 5+ messages in thread From: Daniel Lezcano @ 2010-05-18 15:49 UTC (permalink / raw) To: Serge E. Hallyn; +Cc: Linux Containers On 05/13/2010 09:34 PM, Serge E. Hallyn wrote: > (also remove -f from usage as it is not actually supported) > > Signed-off-by: Serge E. Hallyn<serue-r/Jw6+rmf7HQT0dZR+AlfA@public.gmane.org> > --- > src/lxc/lxc_unshare.c | 28 ++++++++++++++++++++++++++-- > 1 files changed, 26 insertions(+), 2 deletions(-) > > diff --git a/src/lxc/lxc_unshare.c b/src/lxc/lxc_unshare.c > index 10654f7..8db1cb7 100644 > --- a/src/lxc/lxc_unshare.c > +++ b/src/lxc/lxc_unshare.c > @@ -48,7 +48,7 @@ void usage(char *cmd) > fprintf(stderr, "\t -s flags: Ored list of flags to unshare:\n" \ > "\t MOUNT, PID, UTSNAME, IPC, USER, NETWORK\n"); > fprintf(stderr, "\t -u<id> : new id to be set if -s USER is specified\n"); > - fprintf(stderr, "\t if -f or -s PID is specified,<command> is mandatory)\n"); > + fprintf(stderr, "\t if -s PID is specified,<command> is mandatory)\n"); > _exit(1); > } > > @@ -154,6 +154,29 @@ static int do_start(void *arg) > return 1; > } > > +void extend_namespaces(char **n, char *optarg) > +{ > + char *namespaces = *n; > + int cont = 0, newlen = strlen(optarg) + 1; /* +1 for trailing \0 */ > + > + if (namespaces) { > + cont = 1; > + newlen += strlen(namespaces) + 1; /* +1 for '|' */ > + } > + > + namespaces = realloc(namespaces, newlen); > + if (!namespaces) { > + perror("realloc"); > + exit(1); > + } > + if (cont) > + sprintf(namespaces+strlen(namespaces), "|%s", optarg); > + else > + sprintf(namespaces, "%s", optarg); > + namespaces[newlen-1] = '\0'; > + *n = namespaces; > +} > + > int main(int argc, char *argv[]) > { > int opt, status; > @@ -174,7 +197,8 @@ int main(int argc, char *argv[]) > while ((opt = getopt(argc, argv, "s:u:")) != -1) { > switch (opt) { > case 's': > - namespaces = optarg; > + extend_namespaces(&namespaces, optarg); > + printf("namespaces is %s\n", namespaces); > break; > case 'u': > uid = lookup_user(optarg); Hi Serge, Sorry for the delay. Is it possible to just kill the "Ored" option format and have only multiple "-s" options ? That will simplificate the code a lot. Thanks -- Daniel ^ permalink raw reply [flat|nested] 5+ messages in thread
[parent not found: <4BF2B71A.8020906-NmTC/0ZBporQT0dZR+AlfA@public.gmane.org>]
* Re: [PATCH lxc 1/2] lxc-unshare: accept multiple -s options [not found] ` <4BF2B71A.8020906-NmTC/0ZBporQT0dZR+AlfA@public.gmane.org> @ 2010-05-18 16:07 ` Serge E. Hallyn 0 siblings, 0 replies; 5+ messages in thread From: Serge E. Hallyn @ 2010-05-18 16:07 UTC (permalink / raw) To: Daniel Lezcano; +Cc: Linux Containers Quoting Daniel Lezcano (dlezcano-NmTC/0ZBporQT0dZR+AlfA@public.gmane.org): > On 05/13/2010 09:34 PM, Serge E. Hallyn wrote: > >(also remove -f from usage as it is not actually supported) > > > >Signed-off-by: Serge E. Hallyn<serue-r/Jw6+rmf7HQT0dZR+AlfA@public.gmane.org> > >--- > > src/lxc/lxc_unshare.c | 28 ++++++++++++++++++++++++++-- > > 1 files changed, 26 insertions(+), 2 deletions(-) > > > >diff --git a/src/lxc/lxc_unshare.c b/src/lxc/lxc_unshare.c > >index 10654f7..8db1cb7 100644 > >--- a/src/lxc/lxc_unshare.c > >+++ b/src/lxc/lxc_unshare.c > >@@ -48,7 +48,7 @@ void usage(char *cmd) > > fprintf(stderr, "\t -s flags: Ored list of flags to unshare:\n" \ > > "\t MOUNT, PID, UTSNAME, IPC, USER, NETWORK\n"); > > fprintf(stderr, "\t -u<id> : new id to be set if -s USER is specified\n"); > >- fprintf(stderr, "\t if -f or -s PID is specified,<command> is mandatory)\n"); > >+ fprintf(stderr, "\t if -s PID is specified,<command> is mandatory)\n"); > > _exit(1); > > } > > > >@@ -154,6 +154,29 @@ static int do_start(void *arg) > > return 1; > > } > > > >+void extend_namespaces(char **n, char *optarg) > >+{ > >+ char *namespaces = *n; > >+ int cont = 0, newlen = strlen(optarg) + 1; /* +1 for trailing \0 */ > >+ > >+ if (namespaces) { > >+ cont = 1; > >+ newlen += strlen(namespaces) + 1; /* +1 for '|' */ > >+ } > >+ > >+ namespaces = realloc(namespaces, newlen); > >+ if (!namespaces) { > >+ perror("realloc"); > >+ exit(1); > >+ } > >+ if (cont) > >+ sprintf(namespaces+strlen(namespaces), "|%s", optarg); > >+ else > >+ sprintf(namespaces, "%s", optarg); > >+ namespaces[newlen-1] = '\0'; > >+ *n = namespaces; > >+} > >+ > > int main(int argc, char *argv[]) > > { > > int opt, status; > >@@ -174,7 +197,8 @@ int main(int argc, char *argv[]) > > while ((opt = getopt(argc, argv, "s:u:")) != -1) { > > switch (opt) { > > case 's': > >- namespaces = optarg; > >+ extend_namespaces(&namespaces, optarg); > >+ printf("namespaces is %s\n", namespaces); > > break; > > case 'u': > > uid = lookup_user(optarg); > > Hi Serge, > > Sorry for the delay. > > Is it possible to just kill the "Ored" option format and have only > multiple "-s" options ? That will simplificate the code a lot. Agreed I think that'd be better -serge ^ permalink raw reply [flat|nested] 5+ messages in thread
end of thread, other threads:[~2010-05-18 16:07 UTC | newest]
Thread overview: 5+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2010-05-13 19:34 [PATCH lxc 1/2] lxc-unshare: accept multiple -s options Serge E. Hallyn
[not found] ` <20100513193412.GA15433-r/Jw6+rmf7HQT0dZR+AlfA@public.gmane.org>
2010-05-13 19:34 ` [PATCH lxc 2/2] lxc-unshare: make CLONE_NEWPID imply CLONE_NEWNS Serge E. Hallyn
[not found] ` <20100513193447.GA15830-r/Jw6+rmf7HQT0dZR+AlfA@public.gmane.org>
2010-05-18 16:01 ` Daniel Lezcano
2010-05-18 15:49 ` [PATCH lxc 1/2] lxc-unshare: accept multiple -s options Daniel Lezcano
[not found] ` <4BF2B71A.8020906-NmTC/0ZBporQT0dZR+AlfA@public.gmane.org>
2010-05-18 16:07 ` Serge E. Hallyn
This is an external index of several public inboxes, see mirroring instructions on how to clone and mirror all data and code used by this external index.