[CalendarServer-changes] [14917] CalDAVTester/trunk/src/request.py

source_changes at macosforge.org source_changes at macosforge.org
Thu Jun 25 14:56:18 PDT 2015


Revision: 14917
          http://trac.calendarserver.org//changeset/14917
Author:   cdaboo at apple.com
Date:     2015-06-25 14:56:18 -0700 (Thu, 25 Jun 2015)
Log Message:
-----------
Fix digest nonce timeout. Make sure digest OPTIONS request uri is properly quoted.

Modified Paths:
--------------
    CalDAVTester/trunk/src/request.py

Modified: CalDAVTester/trunk/src/request.py
===================================================================
--- CalDAVTester/trunk/src/request.py	2015-06-25 21:55:01 UTC (rev 14916)
+++ CalDAVTester/trunk/src/request.py	2015-06-25 21:56:18 UTC (rev 14917)
@@ -27,6 +27,8 @@
 import re
 import src.xmlDefs
 import time
+import urllib
+import urlparse
 import uuid
 
 algorithms = {
@@ -228,16 +230,20 @@
 
     def gethttpdigestauth(self, si, wwwauthorize=None):
 
-        # Check the nonce cache to see if we've used this user before
+        # Check the nonce cache to see if we've used this user before, or if the nonce is more than 5 minutes old
         user = [self.user, si.user][self.user == ""]
         pswd = [self.pswd, si.pswd][self.pswd == ""]
         details = None
-        if user in self.manager.digestCache:
+        if user in self.manager.digestCache and self.manager.digestCache[user]["max-nonce-time"] < time.time():
             details = self.manager.digestCache[user]
         else:
+            # Redo digest auth from scratch to get a new nonce etc
             http = SmartHTTPConnection(si.host, si.port, si.ssl, si.afunix)
             try:
-                http.request("OPTIONS", self.getURI(si))
+                puri = list(urlparse.urlparse(self.getURI(si)))
+                puri[2] = urllib.quote(puri[2])
+                quri = urlparse.urlunparse(puri)
+                http.request("OPTIONS", quri)
 
                 response = http.getresponse()
 
@@ -262,6 +268,7 @@
                     for (k, v) in [p.split('=', 1) for p in parts]:
                         details[k.strip()] = unq(v.strip())
 
+                    details["max-nonce-time"] = time.time() + 600
                     self.manager.digestCache[user] = details
                     break
 
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://lists.macosforge.org/pipermail/calendarserver-changes/attachments/20150625/5147d58d/attachment.html>


More information about the calendarserver-changes mailing list