[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [Xen-devel] [PATCH 6/6] libxl: vncviewer: make autopass work properly



On Tue, 1 Feb 2011, Ian Jackson wrote:
> The file we write the vnc password to must be rewound back to the
> beginning, or the vnc viewer will simply get EOF.

good catch

> 
> When the syscalls for communicating the password to the vnc client
> fail, bomb out with an error messsage rather than blundering on (and
> probably producing a spurious password prompt).
> 
> Following this patch, xl vncviewer --autopass works, provided the qemu
> patch for writing the password to xenstore has also been applied.
> 
> Signed-off-by: Ian Jackson <Ian.Jackson@xxxxxxxxxxxxx>
> ---
>  tools/libxl/libxl.c |   25 +++++++++++++++++--------
>  1 files changed, 17 insertions(+), 8 deletions(-)
> 
> diff --git a/tools/libxl/libxl.c b/tools/libxl/libxl.c
> index b386a2a..5c1b3ab 100644
> --- a/tools/libxl/libxl.c
> +++ b/tools/libxl/libxl.c
> @@ -827,23 +827,32 @@ int libxl_vncviewer_exec(libxl_ctx *ctx, uint32_t 
> domid, int autopass)
>      if ( vnc_pass ) {
>          char tmpname[] = "/tmp/vncautopass.XXXXXX";
>          autopass_fd = mkstemp(tmpname);
> -        if ( autopass_fd < 0 )
> -            goto skip_autopass;
> +        if ( autopass_fd < 0 ) {
> +            LIBXL__LOG_ERRNO(ctx, LIBXL__LOG_ERROR,
> +                             "mkstemp %s failed", tmpname);
> +            exit(-1);
> +        }

I don't think we should call exit here, this is a library not an
executable. However instead of just skipping autopass we should avoid
exec'ing vncviewer completely and return and error.


>  
> -        if ( unlink(tmpname) )
> +        if ( unlink(tmpname) ) {
>              /* should never happen */
> -            LIBXL__LOG_ERRNO(ctx, LIBXL__LOG_ERROR, "unlink %s failed", 
> tmpname);
> +            LIBXL__LOG_ERRNO(ctx, LIBXL__LOG_ERROR,
> +                             "unlink %s failed", tmpname);
> +            exit(-1);
> +        }
>  

ditto

>          if ( libxl_write_exactly(ctx, autopass_fd, vnc_pass, 
> strlen(vnc_pass),
> -                                    tmpname, "vnc password") ) {
> -            do { close(autopass_fd); } while(errno == EINTR);
> -            goto skip_autopass;
> +                                    tmpname, "vnc password") )
> +            exit(-1);

ditto

> +
> +        if ( lseek(autopass_fd, SEEK_SET, 0) ) {
> +            LIBXL__LOG_ERRNO(ctx, LIBXL__LOG_ERROR,
> +                             "rewind %s (autopass) failed", tmpname);
> +            exit(-1);

ditto

>          }
>  
>          args[2] = "-autopass";
>      }
>  
> -skip_autopass:
>      libxl__exec(autopass_fd, -1, -1, args[0], args);
>      abort();
>  }
> -- 
> 1.5.6.5
> 
> 
> _______________________________________________
> Xen-devel mailing list
> Xen-devel@xxxxxxxxxxxxxxxxxxx
> http://lists.xensource.com/xen-devel
> 

_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxxxxxxxx
http://lists.xensource.com/xen-devel


 


Rackspace

Lists.xenproject.org is hosted with RackSpace, monitoring our
servers 24x7x365 and backed by RackSpace's Fanatical Support®.