* domain.c: getmx() returns hostname as MX if no MX records found a la RFC 974
authorMichael Hampton <io_error@uncensored.citadel.org>
Wed, 11 Oct 2000 22:47:51 +0000 (22:47 +0000)
committerMichael Hampton <io_error@uncensored.citadel.org>
Wed, 11 Oct 2000 22:47:51 +0000 (22:47 +0000)
citadel/ChangeLog
citadel/domain.c

index 7c74ca90959e78a666fa1a6283266b471ea15655..7fcdd91967bb77af652204ad85323dceb755517c 100644 (file)
@@ -1,4 +1,7 @@
  $Log$
+ Revision 573.11  2000/10/11 22:47:51  error
+ * domain.c: getmx() returns hostname as MX if no MX records found a la RFC 974
+
  Revision 573.10  2000/10/10 19:18:12  ajc
  * Added support of macros ALL, BODY, FAST, and FULL to the IMAP FETCH command
 
@@ -2086,3 +2089,4 @@ Sat Jul 11 00:20:48 EDT 1998 Nathan Bryant <bryant@cs.usm.maine.edu>
 
 Fri Jul 10 1998 Art Cancro <ajc@uncensored.citadel.org>
        * Initial CVS import 
+        
index 265fce1dffab3ec7f4f9a2a8d52c5ba78e41b47f..52d57665f6fb81e23aa57bd4dd591c6ffe6abbe9 100644 (file)
@@ -118,66 +118,71 @@ int getmx(char *mxbuf, char *dest) {
                C_IN, T_MX, (unsigned char *)answer, sizeof(answer)  );
 
        if (ret < 0) {
-               lprintf(5, "No MX found\n");
-               return(0);
+               mxrecs = mallok(sizeof(struct mx));
+               mxrecs[0].pref = 0;
+               strcpy(mxrecs[0].host, dest);
+               num_mxrecs = 1;
        }
+       else {
 
-       /* If we had to truncate, shrink the number to avoid fireworks */
-       if (ret > sizeof(answer))
-               ret = sizeof(answer);
-
-       hp = (HEADER *)&answer[0];
-       startptr = &answer[0];          /* start and end of buffer */
-       endptr = &answer[ret];
-       ptr = startptr + HFIXEDSZ;      /* advance past header */
-
-       for (qdcount = ntohs(hp->qdcount); qdcount--; ptr += ret + QFIXEDSZ) {
-               if ((ret = dn_skipname(ptr, endptr)) < 0) {
-                       lprintf(9, "dn_skipname error\n");
-                       return(0);
-               }
-       }
-
-       while(1) {
-               memset(expanded_buf, 0, sizeof(expanded_buf));
-               ret = dn_expand(startptr,
-                               endptr,
-                               ptr,
-                               expanded_buf,
-                               sizeof(expanded_buf)
-                               );
-               if (ret < 0) break;
-               ptr += ret;
-
-               GETSHORT(type, ptr);
-               ptr += INT16SZ + INT32SZ;
-               GETSHORT(n, ptr);
-
-               if (type != T_MX) {
-                       ptr += n;
+               /* If we had to truncate, shrink the number to avoid fireworks */
+               if (ret > sizeof(answer))
+                       ret = sizeof(answer);
+       
+               hp = (HEADER *)&answer[0];
+               startptr = &answer[0];          /* start and end of buffer */
+               endptr = &answer[ret];
+               ptr = startptr + HFIXEDSZ;      /* advance past header */
+       
+               for (qdcount = ntohs(hp->qdcount); qdcount--; ptr += ret + QFIXEDSZ) {
+                       if ((ret = dn_skipname(ptr, endptr)) < 0) {
+                               lprintf(9, "dn_skipname error\n");
+                               return(0);
+                       }
                }
-
-               else {
-                       GETSHORT(pref, ptr);
+       
+               while(1) {
+                       memset(expanded_buf, 0, sizeof(expanded_buf));
                        ret = dn_expand(startptr,
                                        endptr,
                                        ptr,
                                        expanded_buf,
                                        sizeof(expanded_buf)
                                        );
+                       if (ret < 0) break;
                        ptr += ret;
-
-                       ++num_mxrecs;
-                       if (mxrecs == NULL) {
-                               mxrecs = mallok(sizeof(struct mx));
+       
+                       GETSHORT(type, ptr);
+                       ptr += INT16SZ + INT32SZ;
+                       GETSHORT(n, ptr);
+       
+                       if (type != T_MX) {
+                               ptr += n;
                        }
+       
                        else {
-                               mxrecs = reallok(mxrecs,
-                                       (sizeof(struct mx) * num_mxrecs) );
+                               GETSHORT(pref, ptr);
+                               ret = dn_expand(startptr,
+                                               endptr,
+                                               ptr,
+                                               expanded_buf,
+                                               sizeof(expanded_buf)
+                                               );
+                               ptr += ret;
+       
+                               ++num_mxrecs;
+                               if (mxrecs == NULL) {
+                                       mxrecs = mallok(sizeof(struct mx));
+                               }
+                               else {
+                                       mxrecs = reallok(mxrecs,
+                                           (sizeof(struct mx) * num_mxrecs) );
+                               }
+       
+                               mxrecs[num_mxrecs - 1].pref = pref;
+                               strcpy(mxrecs[num_mxrecs - 1].host,
+                                      expanded_buf);
                        }
-
-                       mxrecs[num_mxrecs - 1].pref = pref;
-                       strcpy(mxrecs[num_mxrecs - 1].host, expanded_buf);
                }
        }