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