<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN"
"http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head><meta http-equiv="content-type" content="text/html; charset=utf-8" />
<title>[3343] CalendarServer/trunk/twistedcaldav/directory/appleopendirectory.py</title>
</head>
<body>

<style type="text/css"><!--
#msg dl.meta { border: 1px #006 solid; background: #369; padding: 6px; color: #fff; }
#msg dl.meta dt { float: left; width: 6em; font-weight: bold; }
#msg dt:after { content:':';}
#msg dl, #msg dt, #msg ul, #msg li, #header, #footer, #logmsg { font-family: verdana,arial,helvetica,sans-serif; font-size: 10pt;  }
#msg dl a { font-weight: bold}
#msg dl a:link    { color:#fc3; }
#msg dl a:active  { color:#ff0; }
#msg dl a:visited { color:#cc6; }
h3 { font-family: verdana,arial,helvetica,sans-serif; font-size: 10pt; font-weight: bold; }
#msg pre { overflow: auto; background: #ffc; border: 1px #fa0 solid; padding: 6px; }
#logmsg { background: #ffc; border: 1px #fa0 solid; padding: 1em 1em 0 1em; }
#logmsg p, #logmsg pre, #logmsg blockquote { margin: 0 0 1em 0; }
#logmsg p, #logmsg li, #logmsg dt, #logmsg dd { line-height: 14pt; }
#logmsg h1, #logmsg h2, #logmsg h3, #logmsg h4, #logmsg h5, #logmsg h6 { margin: .5em 0; }
#logmsg h1:first-child, #logmsg h2:first-child, #logmsg h3:first-child, #logmsg h4:first-child, #logmsg h5:first-child, #logmsg h6:first-child { margin-top: 0; }
#logmsg ul, #logmsg ol { padding: 0; list-style-position: inside; margin: 0 0 0 1em; }
#logmsg ul { text-indent: -1em; padding-left: 1em; }#logmsg ol { text-indent: -1.5em; padding-left: 1.5em; }
#logmsg > ul, #logmsg > ol { margin: 0 0 1em 0; }
#logmsg pre { background: #eee; padding: 1em; }
#logmsg blockquote { border: 1px solid #fa0; border-left-width: 10px; padding: 1em 1em 0 1em; background: white;}
#logmsg dl { margin: 0; }
#logmsg dt { font-weight: bold; }
#logmsg dd { margin: 0; padding: 0 0 0.5em 0; }
#logmsg dd:before { content:'\00bb';}
#logmsg table { border-spacing: 0px; border-collapse: collapse; border-top: 4px solid #fa0; border-bottom: 1px solid #fa0; background: #fff; }
#logmsg table th { text-align: left; font-weight: normal; padding: 0.2em 0.5em; border-top: 1px dotted #fa0; }
#logmsg table td { text-align: right; border-top: 1px dotted #fa0; padding: 0.2em 0.5em; }
#logmsg table thead th { text-align: center; border-bottom: 1px solid #fa0; }
#logmsg table th.Corner { text-align: left; }
#logmsg hr { border: none 0; border-top: 2px dashed #fa0; height: 1px; }
#header, #footer { color: #fff; background: #636; border: 1px #300 solid; padding: 6px; }
#patch { width: 100%; }
#patch h4 {font-family: verdana,arial,helvetica,sans-serif;font-size:10pt;padding:8px;background:#369;color:#fff;margin:0;}
#patch .propset h4, #patch .binary h4 {margin:0;}
#patch pre {padding:0;line-height:1.2em;margin:0;}
#patch .diff {width:100%;background:#eee;padding: 0 0 10px 0;overflow:auto;}
#patch .propset .diff, #patch .binary .diff  {padding:10px 0;}
#patch span {display:block;padding:0 10px;}
#patch .modfile, #patch .addfile, #patch .delfile, #patch .propset, #patch .binary, #patch .copfile {border:1px solid #ccc;margin:10px 0;}
#patch ins {background:#dfd;text-decoration:none;display:block;padding:0 10px;}
#patch del {background:#fdd;text-decoration:none;display:block;padding:0 10px;}
#patch .lines, .info {color:#888;background:#fff;}
--></style>
<div id="msg">
<dl class="meta">
<dt>Revision</dt> <dd><a href="http://trac.macosforge.org/projects/calendarserver/changeset/3343">3343</a></dd>
<dt>Author</dt> <dd>wsanchez@apple.com</dd>
<dt>Date</dt> <dd>2008-11-07 12:34:25 -0800 (Fri, 07 Nov 2008)</dd>
</dl>

<h3>Log Message</h3>
<pre>Revert r3339 due to test failure</pre>

<h3>Modified Paths</h3>
<ul>
<li><a href="#CalendarServertrunktwistedcaldavdirectoryappleopendirectorypy">CalendarServer/trunk/twistedcaldav/directory/appleopendirectory.py</a></li>
</ul>

</div>
<div id="patch">
<h3>Diff</h3>
<a id="CalendarServertrunktwistedcaldavdirectoryappleopendirectorypy"></a>
<div class="modfile"><h4>Modified: CalendarServer/trunk/twistedcaldav/directory/appleopendirectory.py (3342 => 3343)</h4>
<pre class="diff"><span>
<span class="info">--- CalendarServer/trunk/twistedcaldav/directory/appleopendirectory.py        2008-11-07 18:17:58 UTC (rev 3342)
+++ CalendarServer/trunk/twistedcaldav/directory/appleopendirectory.py        2008-11-07 20:34:25 UTC (rev 3343)
</span><span class="lines">@@ -171,19 +171,19 @@
</span><span class="cx">             ):
</span><span class="cx">                 yield GUID
</span><span class="cx"> 
</span><del>-    def _calendarUserAddresses(self, recordType, recordName, recordData):
</del><ins>+    def _calendarUserAddresses(self, recordType, recordName, record):
</ins><span class="cx">         &quot;&quot;&quot;
</span><span class="cx">         Extract specific attributes from the directory record for use as calendar user address.
</span><span class="cx">         
</span><span class="cx">         @param recordName: a C{str} containing the record name being operated on.
</span><del>-        @param recordData: a C{dict} containing the attributes retrieved from the directory.
</del><ins>+        @param record: a C{dict} containing the attributes retrieved from the directory.
</ins><span class="cx">         @return: a C{set} of C{str} for each expanded calendar user address.
</span><span class="cx">         &quot;&quot;&quot;
</span><span class="cx">         # Now get the addresses
</span><span class="cx">         result = set()
</span><span class="cx">         
</span><span class="cx">         # Add each email address as a mailto URI
</span><del>-        emails = recordData.get(dsattributes.kDSNAttrEMailAddress)
</del><ins>+        emails = record.get(dsattributes.kDSNAttrEMailAddress)
</ins><span class="cx">         if emails is not None:
</span><span class="cx">             if isinstance(emails, str):
</span><span class="cx">                 emails = [emails]
</span><span class="lines">@@ -412,11 +412,9 @@
</span><span class="cx">         if shortName is None and guid is None:
</span><span class="cx">             records = {}
</span><span class="cx">             guids   = {}
</span><del>-            emails  = {}
</del><span class="cx"> 
</span><del>-            disabledNames  = set()
-            disabledGUIDs  = set()
-            disabledEmails = set()
</del><ins>+            disabledNames = set()
+            disabledGUIDs = set()
</ins><span class="cx">             
</span><span class="cx">             if recordType == DirectoryService.recordType_groups:
</span><span class="cx">                 groupsForGUID = {}
</span><span class="lines">@@ -428,11 +426,9 @@
</span><span class="cx"> 
</span><span class="cx">             records = storage[&quot;records&quot;]
</span><span class="cx">             guids   = storage[&quot;guids&quot;]
</span><del>-            emails  = storage[&quot;emails&quot;]
</del><span class="cx"> 
</span><del>-            disabledNames  = storage[&quot;disabled names&quot;]
-            disabledGUIDs  = storage[&quot;disabled guids&quot;]
-            disabledEmails = storage[&quot;disabled emails&quot;]
</del><ins>+            disabledNames = storage[&quot;disabled names&quot;]
+            disabledGUIDs = storage[&quot;disabled guids&quot;]
</ins><span class="cx">             
</span><span class="cx">             if recordType == DirectoryService.recordType_groups:
</span><span class="cx">                 groupsForGUID = storage[&quot;groupsForGUID&quot;]
</span><span class="lines">@@ -489,12 +485,12 @@
</span><span class="cx">                 calendarUserAddresses = ()
</span><span class="cx"> 
</span><span class="cx">             # Get email address from directory record
</span><del>-            recordEmailAddresses = set()
</del><ins>+            emailAddresses = set()
</ins><span class="cx">             if isinstance(recordEmailAddress, str):
</span><del>-                recordEmailAddresses.add(recordEmailAddress.lower())
</del><ins>+                emailAddresses.add(recordEmailAddress.lower())
</ins><span class="cx">             elif isinstance(recordEmailAddress, list):
</span><del>-                for addr in recordEmailAddresses:
-                    recordEmailAddresses.add(addr.lower())
</del><ins>+                for addr in emailAddresses:
+                    emailAddresses.add(addr.lower())
</ins><span class="cx"> 
</span><span class="cx">             # Special case for groups, which have members.
</span><span class="cx">             if recordType == DirectoryService.recordType_groups:
</span><span class="lines">@@ -533,7 +529,7 @@
</span><span class="cx">                 fullName              = recordFullName,
</span><span class="cx">                 firstName             = recordFirstName,
</span><span class="cx">                 lastName              = recordLastName,
</span><del>-                emailAddresses        = recordEmailAddresses,
</del><ins>+                emailAddresses        = emailAddresses,
</ins><span class="cx">                 calendarUserAddresses = calendarUserAddresses,
</span><span class="cx">                 autoSchedule          = autoSchedule,
</span><span class="cx">                 enabledForCalendaring = enabledForCalendaring,
</span><span class="lines">@@ -545,13 +541,16 @@
</span><span class="cx">             def disableRecord(record):
</span><span class="cx">                 self.log_warn(&quot;Record disabled due to conflict (record name and GUID must match): %s&quot; % (record,))
</span><span class="cx"> 
</span><del>-                disabledNames.add(record.shortName)
-                disabledGUIDs.add(record.guid)
</del><ins>+                shortName = record.shortName
+                guid      = record.guid
</ins><span class="cx"> 
</span><ins>+                disabledNames.add(shortName)
+                disabledGUIDs.add(guid)
+
</ins><span class="cx">                 if shortName in records:
</span><del>-                    del records[record.shortName]
</del><ins>+                    del records[shortName]
</ins><span class="cx">                 if guid in guids:
</span><del>-                    del guids[record.guid]
</del><ins>+                    del guids[guid]
</ins><span class="cx"> 
</span><span class="cx">             # Check for disabled items
</span><span class="cx">             if record.shortName in disabledNames or record.guid in disabledGUIDs:
</span><span class="lines">@@ -586,40 +585,16 @@
</span><span class="cx">                         self._indexGroup(record, record._proxyGUIDs, proxiesForGUID)
</span><span class="cx">                         self._indexGroup(record, record._readOnlyProxyGUIDs, readOnlyProxiesForGUID)
</span><span class="cx"> 
</span><del>-            def disableEmail(emailAddress, record):
-                self.log_warn(&quot;Email address %s disabled due to conflict for record: %s&quot;
-                              % (emailAddress, record))
-
-                record.emailAddresses.remove(emailAddress)
-                disabledEmails.add(emailAddress)
-
-                if emailAddress in emails:
-                    del emails[emailAddress]
-
-            for email in frozenset(recordEmailAddresses):
-                if email in disabledEmails:
-                    disableEmail(email, record)
-                else:
-                    # Check for duplicates
-                    existing_record = emails.get(email)
-                    if existing_record is not None:
-                        disableEmail(email, record)
-                        disableEmail(email, existing_record)
-                    else:
-                        emails[email] = record
-
</del><span class="cx">         if shortName is None and guid is None:
</span><span class="cx">             #
</span><span class="cx">             # Replace the entire cache
</span><span class="cx">             #
</span><span class="cx">             storage = {
</span><del>-                &quot;status&quot;         : &quot;new&quot;,
-                &quot;records&quot;        : records,
-                &quot;guids&quot;          : guids,
-                &quot;emails&quot;         : emails,
-                &quot;disabled names&quot; : disabledNames,
-                &quot;disabled guids&quot; : disabledGUIDs,
-                &quot;disabled emails&quot;: disabledEmails,
</del><ins>+                &quot;status&quot;        : &quot;new&quot;,
+                &quot;records&quot;       : records,
+                &quot;guids&quot;         : guids,
+                &quot;disabled names&quot;: disabledNames,
+                &quot;disabled guids&quot;: disabledGUIDs,
</ins><span class="cx">             }
</span><span class="cx"> 
</span><span class="cx">             # Add group indexing if needed
</span></span></pre>
</div>
</div>

</body>
</html>