* spam.el: New file.
[gnus] / lisp / dns.el
index 6586b9a..57a6c6d 100644 (file)
                                  (progn (forward-char length) (point)))
                name))))
     (if (stringp ended)
-       (concat (mapconcat 'identity (nreverse name) ".") "." ended)
+       (if (null name)
+           ended
+         (concat (mapconcat 'identity (nreverse name) ".") "." ended))
       (mapconcat 'identity (nreverse name) "."))))
 
 (defun dns-write (spec)
              (mapconcat 'number-to-string (nreverse bytes) ".")))
           ((eq type 'NS)
            (dns-read-string-name string buffer))
+          ((eq type 'CNAME)
+           (dns-read-string-name string buffer))
           (t string)))
       (goto-char point))))
 
 ;;; Interface functions.
 
-(defun query-dns (name &optional type)
-  "Query a DNS server for NAME of TYPE."
+(defun query-dns (name &optional type fullp)
+  "Query a DNS server for NAME of TYPE.
+If FULLP, return the entire record returned."
   (setq type (or type 'A))
   (mm-with-unibyte-buffer
     (let ((coding-system-for-read 'binary) 
              :service "domain"
              :type 'datagram))
            (step 100)
-           (times (* dns-timeout 1000)))
+           (times (* dns-timeout 1000))
+           (id (random 65000)))
        (process-send-string
         process
-        (dns-write `((id 4)
+        (dns-write `((id ,id)
                      (opcode query)
                      (queries ((,name (type ,type))))
                      (recursion-desired-p t))))
          (decf times step))
        (ignore-errors
          (delete-process process))
-       (let ((answer (car (dns-get 'answers (dns-read (buffer-string))))))
-         (when (eq type (dns-get 'type answer))
-           (dns-get 'data answer)))))))
+       (let ((result (dns-read (buffer-string))))
+         (if fullp
+             result
+           (let ((answer (car (dns-get 'answers result))))
+             (when (eq type (dns-get 'type answer))
+               (dns-get 'data answer)))))))))
     
 (provide 'dns)