From: Christian Seiler Date: Wed, 6 Mar 2013 19:41:54 +0000 (+0100) Subject: lxc-attach: Default to /bin/sh if shell cannot be determined or exec'd X-Git-Tag: lxc-0.9.0.rc1~2^2~21 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=21da9912d453a8a3b9c05309b2c7c24774d233d3;p=thirdparty%2Flxc.git lxc-attach: Default to /bin/sh if shell cannot be determined or exec'd If getpwuid() fails and also the fallback of spawning of a 'getent' process, and the user specified no command to execute, default to /bin/sh and only fail if even that is not available. This should ensure that unless the container is *really* weird, no matter what, the user should always end up with a shell when calling lxc-attach with no further arguments. Signed-off-by: Christian Seiler --- diff --git a/src/lxc/lxc_attach.c b/src/lxc/lxc_attach.c index fdf8a0664..69ebfacca 100644 --- a/src/lxc/lxc_attach.c +++ b/src/lxc/lxc_attach.c @@ -452,15 +452,21 @@ int main(int argc, char *argv[]) else user_shell = passwd->pw_shell; - if (!user_shell) { - SYSERROR("failed to get passwd " \ - "entry for uid '%d'", uid); - return -1; + if (user_shell) { + char *const args[] = { + user_shell, + NULL, + }; + + (void) execvp(args[0], args); } + /* executed if either no passwd entry or execvp fails, + * we will fall back on /bin/sh as a default shell + */ { char *const args[] = { - user_shell, + "/bin/sh", NULL, };