[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [Xen-changelog] [xen-unstable] libxl: vncviewer: make autopass work properly
# HG changeset patch # User Ian Jackson <Ian.Jackson@xxxxxxxxxxxxx> # Date 1296845259 0 # Node ID 544b103b4d972bd17afdb260acfcde75a78658d8 # Parent c77353cb2ebb328a247046c959b04c63b4f79609 libxl: vncviewer: make autopass work properly The file we write the vnc password to must be rewound back to the beginning, or the vnc viewer will simply get EOF. 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> Acked-by: Stefano Stabellini <stefano.stabellini@xxxxxxxxxxxxx> Committed-by: Ian Jackson <ian.jackson@xxxxxxxxxxxxx> --- tools/libxl/libxl.c | 31 ++++++++++++++++++++++--------- 1 files changed, 22 insertions(+), 9 deletions(-) diff -r c77353cb2ebb -r 544b103b4d97 tools/libxl/libxl.c --- a/tools/libxl/libxl.c Fri Feb 04 18:47:20 2011 +0000 +++ b/tools/libxl/libxl.c Fri Feb 04 18:47:39 2011 +0000 @@ -827,25 +827,38 @@ int libxl_vncviewer_exec(libxl_ctx *ctx, if ( vnc_pass ) { char tmpname[] = "/tmp/vncautopass.XXXXXX"; autopass_fd = mkstemp(tmpname); - if ( autopass_fd < 0 ) - goto skip_autopass; - - if ( unlink(tmpname) ) + if ( autopass_fd < 0 ) { + LIBXL__LOG_ERRNO(ctx, LIBXL__LOG_ERROR, + "mkstemp %s failed", tmpname); + goto x_fail; + } + + 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); + goto x_fail; + } 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") ) + goto x_fail; + + if ( lseek(autopass_fd, SEEK_SET, 0) ) { + LIBXL__LOG_ERRNO(ctx, LIBXL__LOG_ERROR, + "rewind %s (autopass) failed", tmpname); + goto x_fail; } args[2] = "-autopass"; } -skip_autopass: libxl__exec(autopass_fd, -1, -1, args[0], args); abort(); + + x_fail: + libxl__free_all(&gc); + return ERROR_FAIL; } /******************************************************************************/ _______________________________________________ Xen-changelog mailing list Xen-changelog@xxxxxxxxxxxxxxxxxxx http://lists.xensource.com/xen-changelog
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |