[Zodb-checkins] CVS: ZODB3/ZEO/zrpc - smac.py:1.42

Jeremy Hylton jeremy at zope.com
Wed Dec 17 17:52:11 EST 2003


Update of /cvs-repository/ZODB3/ZEO/zrpc
In directory cvs.zope.org:/tmp/cvs-serv28494

Modified Files:
	smac.py 
Log Message:
Patch from kiko: Remember has_mac value across handle_read() calls.

The presence or absence of a mac bit is really part of the persistent
state of SizedMessageAsyncConnection.  If state is True when
handle_read() is entered, we get into the code to check the mac and
process the message without testing whether a mac is present.

I wish there was a test for this, but the code it's very difficult to
setup a test that calls handle_read() in just the right state.  A good
project, but not one I'm up for now.


=== ZODB3/ZEO/zrpc/smac.py 1.41 => 1.42 ===
--- ZODB3/ZEO/zrpc/smac.py:1.41	Fri Nov 28 11:44:49 2003
+++ ZODB3/ZEO/zrpc/smac.py	Wed Dec 17 17:52:11 2003
@@ -92,6 +92,7 @@
         # The next thing read is always of length __msg_size.
         # The state alternates between 0 and 1.
         self.__state = 0
+        self.__has_mac = True
         self.__msg_size = 4
         self.__output_lock = threading.Lock() # Protects __output
         self.__output = []
@@ -149,6 +150,7 @@
             input_len = self.__input_len + len(d)
             msg_size = self.__msg_size
             state = self.__state
+            has_mac = self.__has_mac
 
             inp = self.__inp
             if msg_size > input_len:
@@ -171,7 +173,6 @@
                 inp = "".join(inp)
 
             offset = 0
-            has_mac = 0
             while (offset + msg_size) <= input_len:
                 msg = inp[offset:offset + msg_size]
                 offset = offset + msg_size
@@ -208,9 +209,12 @@
                                                  % (_mac, mac))
                         else:
                             log("Received MAC but no session key set")
+                    elif self.__hmac_send:
+                        raise ValueError("Received message without MAC")
                     self.message_input(msg)
 
             self.__state = state
+            self.__has_mac = has_mac
             self.__msg_size = msg_size
             self.__inp = inp[offset:]
             self.__input_len = input_len - offset




More information about the Zodb-checkins mailing list