Permalink
Browse files

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 <christian@iwakd.de>
  • Loading branch information...
1 parent 905022f commit 21da9912d453a8a3b9c05309b2c7c24774d233d3 @chris-se chris-se committed with Serge Hallyn Mar 6, 2013
Showing with 11 additions and 5 deletions.
  1. +11 −5 src/lxc/lxc_attach.c
View
@@ -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,
};

0 comments on commit 21da991

Please sign in to comment.