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

Serge Hallyn serge.hallyn at ubuntu.com
Wed Mar 6 20:15:00 UTC 2013


Quoting Christian Seiler (christian at iwakd.de):
> 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>

Acked-by: Serge E. Hallyn <serge.hallyn at ubuntu.com>

> ---
>  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