chiark / gitweb /
Merge branch 'master' of git+ssh://metalzone.distorted.org.uk/~mdw/public-git/zone
[zone] / net.lisp
index d957f53d684a00fd3611f689c96695b89f5224bc..61b5978fbfeb00d992b7162db24bf517d157b1c2 100644 (file)
--- a/net.lisp
+++ b/net.lisp
@@ -34,7 +34,7 @@ (defpackage #:net
             #:ipnet-pretty #:ipnet-string #:ipnet-broadcast #:ipnet-hosts
             #:ipnet-host #:ipaddr-networkp #:ipnet-subnetp
             #:ipnet-changeable-bytes
-          #:host-find# #:host-create #:defhost #:parse-ipaddr
+          #:host-find #:host-create #:defhost #:parse-ipaddr
             #:resolve-hostname #:canonify-hostname
             #:net #:net-find #:net-get-as-ipnet #:net-create #:defnet
             #:net-next-host #:net-host))
@@ -75,8 +75,7 @@ (defun string-ipaddr (str &key (start 0) (end nil))
    `stringify'.  The START and END arguments may be used to parse out a
    substring."
   (setf str (stringify str))
-  (unless end
-    (setf end (length str)))
+  (setf-default end (length str))
   (let ((addr 0) (noct 0))
     (loop
       (let* ((pos (position #\. str :start start :end end))
@@ -151,7 +150,7 @@ (defun make-ipnet (net mask)
 (defun string-ipnet (str &key (start 0) (end nil))
   "Parse an IP-network from the string STR."
   (setf str (stringify str))
-  (unless end (setf end (length str)))
+  (setf-default end (length str))
   (let ((sl (position #\/ str :start start :end end)))
     (if sl
        (make-ipnet (parse-ipaddr (subseq str start sl))
@@ -259,17 +258,20 @@ (defun ipnet-changeable-bytes (mask)
 (defun resolve-hostname (name)
   "Resolve a hostname to an IP address using the DNS, or return nil."
   #+cmu (let ((he (ext:lookup-host-entry name)))
-         (and he
-              (ext:host-entry-addr he)))
-  #-cmu nil
-)
+         (and he (ext:host-entry-addr he)))
+  #+clisp (let ((he (ext:resolve-host-ipaddr name)))
+           (and he (string-ipaddr (car (ext:hostent-addr-list he)))))
+  #+ecl (nth-value 2 (ext:lookup-host-entry name))
+  #-(or cmu clisp ecl) nil)
 
 (defun canonify-hostname (name)
   "Resolve a hostname to canonical form using the DNS, or return nil."
   #+cmu (let ((he (ext:lookup-host-entry name)))
-         (and he
-              (ext:host-entry-name he)))
-  #-cmu nil)
+         (and he (ext:host-entry-name he)))
+  #+clisp (let ((he (ext:resolve-host-ipaddr name)))
+           (and he (ext:hostent-name he)))
+  #+ecl (nth-value 0 (ext:lookup-host-entry name))
+  #-(or cmu clisp ecl) name)
 
 ;;;--------------------------------------------------------------------------
 ;;; Host names and specifiers.