[lxc-devel] [PATCH 2/3] lxc-attach: Default to /bin/sh if shell cannot be determined or exec'd

Christian Seiler christian at iwakd.de
Wed Mar 6 19:53:18 UTC 2013


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 at iwakd.de>
---
 src/lxc/lxc_attach.c |   16 +++++++++++-----
 1 file changed, 11 insertions(+), 5 deletions(-)

diff --git a/src/lxc/lxc_attach.c b/src/lxc/lxc_attach.c
index c129eb0..711e1de 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,
 			};
 
-- 
1.7.10.4





More information about the lxc-devel mailing list