If the error message string ends with '\r\n', it is not enough to remove '\n' only which leads to messed string. Example, after three time incorrect password input, virsh command virsh -c qemu://remoteserver/system will report error like:
: Connection reset by peerey,gssapi-keyex,gssapi-with-mic,password). it should be: Permission denied (publickey,gssapi-keyex,gssapi-with-mic,password). : Connection reset by peer The terminal interprets '\r' as "move the cursor back to the start of the current line", so we have to remove the character if it exists. --- src/rpc/virnetsocket.c | 8 +++++++- 1 files changed, 7 insertions(+), 1 deletions(-) diff --git a/src/rpc/virnetsocket.c b/src/rpc/virnetsocket.c index 08dfbb0..8385d88 100644 --- a/src/rpc/virnetsocket.c +++ b/src/rpc/virnetsocket.c @@ -985,8 +985,14 @@ reread: virFileReadLimFD(sock->errfd, 1024, &errout) >= 0 && errout != NULL) { size_t elen = strlen(errout); - if (elen && errout[elen-1] == '\n') + if (elen && errout[elen-1] == '\n') { errout[elen-1] = '\0'; + + /* remove trailing '\r' if it exists */ + if (elen-1 && errout[elen-2] == '\r') { + errout[elen-2] = '\0'; + } + } } if (ret < 0) { -- 1.7.7.5 -- libvir-list mailing list libvir-list@redhat.com https://www.redhat.com/mailman/listinfo/libvir-list