$Log$
+ Revision 580.82 2001/12/01 17:00:23 ajc
+ * serv_smtp.c: when multiple MX's are the same preference, randomize them
+
Revision 580.81 2001/12/01 07:18:28 ajc
* Fixed an SMTP delivery problem that was causing certain classes of
transient errors to cause a message to never be delivered.
Fri Jul 10 1998 Art Cancro <ajc@uncensored.citadel.org>
* Initial CVS import
+
}
+/*
+ * Compare the preference of two MX records. First check by the actual
+ * number listed in the MX record. If they're identical, randomize the
+ * result.
+ */
+inline int mx_compare_pref(int pref1, int pref2) {
+ if (pref1 > pref2) {
+ return(1);
+ }
+ else if (pref1 < pref2) {
+ return(1);
+ }
+ else {
+ return(rand() % 2);
+ }
+}
/*
/* do the sort */
for (a = num_mxrecs - 2; a >= 0; --a) {
for (b = 0; b <= a; ++b) {
- if (mxrecs[b].pref > mxrecs[b+1].pref) {
-
+ if (mx_compare_pref(mxrecs[b].pref,mxrecs[b+1].pref)) {
memcpy(&hold1, &mxrecs[b], sizeof(struct mx));
memcpy(&hold2, &mxrecs[b+1], sizeof(struct mx));
memcpy(&mxrecs[b], &hold2, sizeof(struct mx));