WARNING - OLD ARCHIVES

This is an archived copy of the Xen.org mailing list, which we have preserved to ensure that existing links to archives are not broken. The live archive, which contains the latest emails, can be found at http://lists.xen.org/
   
 
 
Xen 
 
Home Products Support Community News
 
   
 

xen-devel

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

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

<Prev in Thread] Current Thread [Next in Thread>