[libvirt] [PATCH] rpc: remove trailing carriage return character in error string

Guannan Ren gren at redhat.com
Wed Jul 18 10:15:25 UTC 2012


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




More information about the libvir-list mailing list