Browse Source

Fix local socket communication

Don't try to send 'None' argument.
Close writing end after sending full request.

QubesOS/qubes-issues#853
Marek Marczykowski-Górecki 7 years ago
parent
commit
45ab24ce12
1 changed files with 5 additions and 2 deletions
  1. 5 2
      qubesmgmt/app.py

+ 5 - 2
qubesmgmt/app.py

@@ -109,12 +109,15 @@ class QubesLocal(QubesBase):
 
         # src, method, dest, arg
         for call_arg in ('dom0', method, dest, arg):
-            client_socket.sendall(call_arg.encode('ascii'))
+            if call_arg is not None:
+                client_socket.sendall(call_arg.encode('ascii'))
             client_socket.sendall(b'\0')
         if payload is not None:
             client_socket.sendall(payload)
 
-        return_data = b''.join(iter(client_socket.recv(BUF_SIZE), b''))
+        client_socket.shutdown(socket.SHUT_WR)
+
+        return_data = b''.join(iter(lambda: client_socket.recv(BUF_SIZE), b''))
         return self._parse_qubesd_response(return_data)