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
|