[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
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |