Incorrect MX record orderering
------------------------------

                 Key: JAMES-913
                 URL: https://issues.apache.org/jira/browse/JAMES-913
             Project: JAMES Server
          Issue Type: Bug
          Components: DNSServer
    Affects Versions: 2.3.1
            Reporter: Amichai Rothman
            Priority: Minor


The SMTP RFC states that given multiple MX record, they must be ordered such 
that lower priority records come first, and equal priority records are 
randomized for load balancing. The JAMES implementation uses Arrays.sort() 
along with an MXRecordComparator, which compares the priorities, and 'flips a 
coin' if they are equal.

This precariously breaks the Comparator contract, which can theoretically cause 
a sort implementation to loop forever, for example if it is implemented using a 
trivial bubble sort which stop when no more swaps are performed. In practice, 
it causes a different bug: the Sun implementation of Arrays.sort() uses 
insertion sort for N <= 7. So for example, if you have 5 MX records with equal 
priority, the last element is compared only in the last iteration of the loop, 
with a 1/2 probability of remaining last. On the other hand, it has a 1/16 
probability of being swapped 4 times to become first on the list.

So while there is randomness involved, equal-priority records will tend to stay 
near their original (relative) position, and not be shuffled with the uniform 
probability which the RFC implied for load balancing...


-- 
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.


---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to