diff --git a/scheme/packages.scm b/scheme/packages.scm index e5a1ec7..7ca00f9 100644 --- a/scheme/packages.scm +++ b/scheme/packages.scm @@ -7,6 +7,7 @@ ;;; Copyright (c) 1996-2002 by Mike Sperber. ;;; Copyright (c) 2000-2002 by Martin Gasbichler. ;;; Copyright (c) 1998-2001 by Eric Marsden. +;;; Copyright (c) 2005-2006 by Norbert Freudemann. ;;; For copyright information, see the file COPYING which comes with ;;; the distribution. @@ -147,7 +148,7 @@ dns-inverse-lookup ; obsolete, use dns-lookup-ip dns-lookup-ip ; simple lookup function dns-lookup-nameserver ; simple lookup function - dns-lookup-mail-exchanger ; simple lookpu function + dns-lookup-mail-exchanger ; simple lookup function pretty-print-dns-message ; prints a human readable dns-msg force-ip ; reruns a lookup until a ip is resolved force-ip-list ; reruns a lookup until a list of ips is resolved @@ -160,7 +161,25 @@ host-fqdn system-fqdn - dns-get-information + address32? ; for dnsd.scm + octet-pair->number ; -"- + number->octet-pair ; -"- + parse ; -"- produces a message-record-type + mc-message->octets ; -"- produces a byte-encoded (compressed) message + make-fqdn-name ; -"- maybe adds an ending dot to a string + fqdn? ; -"- checks for fully quallified domain names + cut-name ; -"- domain name split tool + dn-split? ; -"- domain name split tool + dns-server-error? ; -"- error condition predicate + dns-format-error? ; -"- + dns-server-failure? ; -"- + dns-name-error? ; -"- + dns-not-implemented? ; -"- + dns-refused? ; -"- + dns-error? ; -"- + bad-nameserver? ; -"- + dns-query/cache ; -"- + add-size-tag (network-protocol :syntax) network-protocol? @@ -171,38 +190,67 @@ pretty-print-dns-message - message? message-header message-questions message-answers + make-message message? message-header message-questions message-answers message-nameservers message-additionals message-source + set-message-source! make-query-message make-simple-query-message - header? header-flags header-question-count header-answer-count - header-nameserver-count header-additional-count + make-header header? header-id header-flags header-question-count + header-answer-count header-nameserver-count header-additional-count - flags? flags-query-type flags-opcode flags-authoritative? + make-flags flags? flags-query-type flags-opcode flags-authoritative? flags-truncated? flags-recursion-desired? flags-recursion-available? - flags-zero flags-response-code + flags-zero flags-response-code set-flags-response-code! + set-flags-authoritative! set-flags-recursion-available! + set-flags-truncated! - question? question-name question-type question-class + make-question question? question-name question-type question-class (message-class :syntax) message-class? message-class-name message-class-number + the-message-class + message-class-number->type + message-class-symbol->type + (message-type :syntax) message-type? message-type-name message-type-number + the-message-type + message-type-number->type + message-type-symbol->type + + make-resource-record resource-record? - resource-record-name resource-record-type - resource-record-class resource-record-ttl + resource-record-name + resource-record-type + resource-record-class + resource-record-ttl resource-record-data - resource-record-data-a? resource-record-data-a-ip - resource-record-data-ns? resource-record-data-ns-name - resource-record-data-cname? resource-record-data-cname-name - resource-record-data-mx? resource-record-data-mx-preference - resource-record-data-mx-exchanger resource-record-data-ptr? - resource-record-data-ptr-name + make-resource-record-data-a + resource-record-data-a? + resource-record-data-a-ip + make-resource-record-data-ns + resource-record-data-ns? + resource-record-data-ns-name + + make-resource-record-data-cname + resource-record-data-cname? + resource-record-data-cname-name + + make-resource-record-data-mx + resource-record-data-mx? + resource-record-data-mx-preference + resource-record-data-mx-exchanger + + make-resource-record-data-ptr + resource-record-data-ptr? + resource-record-data-ptr-name + + make-resource-record-data-soa resource-record-data-soa? resource-record-data-soa-mname resource-record-data-soa-rname @@ -212,6 +260,18 @@ resource-record-data-soa-expire resource-record-data-soa-minimum + make-resource-record-data-aaaa + resource-record-data-aaaa? + resource-record-data-aaaa-ipv6 + + make-resource-record-data-hinfo + resource-record-data-hinfo? + resource-record-data-hinfo-data + + make-resource-record-data-txt + resource-record-data-txt? + resource-record-data-txt-text + cache? cache-answer cache-ttl cache-time resolv.conf-parse-error? @@ -224,6 +284,7 @@ ip-string->address32 ip-string->in-addr.arpa-string octet-ip->address32 ;for dns.scm + address32->octet-ip ;for dns.scm ip-string?)) (define-interface cgi-scripts-interface @@ -266,6 +327,150 @@ (export with-fatal-error-handler* (with-fatal-error-handler :syntax))) +;; DNS server + +(define-interface dnsd-silex-interface + (export lexer + lexer-getc + lexer-ungetc + lexer-init)) + +(define-interface dnsd-rw-locks-interface + (export make-r/w-lock + obtain-R/w-lock + obtain-r/W-lock + release-R/w-lock + release-r/W-lock + with-R/w-lock + with-r/W-lock)) + +(define-interface dnsd-semaphores-interface + (export make-semaphore + set-semaphore! + semaphore-post + semaphore-wait)) + +(define-interface dnsd-mf-parser-interface + (export parse-mf)) + +(define-interface dnsd-logging-interface + (export display-debug + apply-w/debug + dnsd-log)) + +(define-interface dnsd-rr-def-interface + (export dns-rr-a + dns-rr-ns + dns-rr-cname + dns-rr-soa + dns-rr-ptr + dns-rr-hinfo + dns-rr-mx + dns-rr-txt + dns-rr-aaaa)) + +(define-interface dnsd-options-interface + (export make-default-dnsd-options + make-options-from-list + dnsd-options? + dnsd-options-port + dnsd-options-dir + dnsd-options-nameservers + dnsd-options-use-axfr? + dnsd-options-use-cache? + dnsd-options-cleanup-interval + dnsd-options-retry-interval + dnsd-options-use-db? + dnsd-options-use-recursion? + dnsd-options-rec-timeout + dnsd-options-socket-timeout + dnsd-options-socket-max-tries + dnsd-options-max-connections + dnsd-options-blacklist-time + dnsd-options-blacklist-value + dnsd-options-use-pre/post + dnsd-options-debug-mode + with-port + with-dir + with-nameservers + with-axfr + with-cache + with-cleanup-interval + with-retry-interval + with-db + with-recursion + with-rec-timeout + with-socket-timeout + with-socket-max-tries + with-max-connections + with-blacklist-time + with-blacklist-value + with-use-pre/post + with-debug-mode)) + +(define-interface dnsd-database-interface + (export maybe-get-soa-rr-name + db-clear-database + db-clear-zone + db-update-zone + db-get-zone + db-get-zone-for-axfr + db-get-zone-soa-rr + db-pretty-print + db-lookup-rec)) + +(define-interface dnsddb-options-interface + (export make-default-dnsddb-options + make-db-options-from-list + dnsddb-options? + dnsddb-options-name + dnsddb-options-class + dnsddb-options-type + dnsddb-options-primary? ;; depreached + dnsddb-options-file + dnsddb-options-filetype + dnsddb-options-master-name + dnsddb-options-master-ip + with-name + with-class + with-type + with-primary? + with-file + with-filetype + with-master-name + with-master-ip)) + +(define-interface dnsd-cache-interface + (export dnsd-cache-clear! + dnsd-cache-clean! + dnsd-cache-lookup? + dnsd-cache-update! + dnsd-cache-pretty-print)) + +(define-interface dnsd-slist-interface + (export dnsd-slist-clear! + dnsd-slist-clean! + dnsd-slist-lookup + dnsd-slist-update! + dnsd-slist-pretty-print + + dnsd-blacklist-clear! +;deprecated dnsd-blacklist-clean! + dnsd-blacklist! + dnsd-blacklist-unlist! + dnsd-blacklist-print)) + +(define-interface dnsd-resolver-interface + (export dnsd-ask-resolver-rec + dnsd-ask-resolver-direct + ;; Some stuff needed in dnsd.scm: + msg-set-rcode! + make-response)) + +(define-interface dnsd-interface + (export)) + + ;; FTP server (define-interface ftpd-interface @@ -536,21 +741,22 @@ (define-structure dns dns-interface (open scheme-with-scsh - (subset srfi-1 (filter reverse! delete lset-difference lset-union)) + (subset srfi-1 (filter reverse! delete lset-difference lset-union + fold fold-right concatenate)) tables ascii formats signals finite-types define-record-types - random queues conditions handle sort threads locks - ips) + ips + srfi-27) (files (lib dns))) (define-structure ips ips-interface @@ -610,6 +816,159 @@ (open scheme conditions handle) (files (lib handle-fatal-error))) +;; DNS server ****************************************************************** + +(define-structure dnsd dnsd-interface + (open scheme-with-scsh + (subset srfi-1 (fold-right take drop filter lset-difference lset-union)) + srfi-2 + (subset srfi-13 (string-downcase)) + + threads + thread-fluids ;; fork-thread + rendezvous ; Needs SUnterlib + rendezvous-channels ; Needs SUnterlib + + tables + ascii + finite-types + define-record-types + handle-fatal-error + ips ;??? + dns + + dnsd-options + dnsd-logging + dnsddb-options +;; dnsd-rw-locks + dnsd-semaphores + dnsd-rr-def + dnsd-mf-parser + dnsd-database + dnsd-cache + dnsd-slist + dnsd-resolver) + + (files (dnsd dnsd))) + +(define-structure dnsd-resolver dnsd-resolver-interface + (open scheme-with-scsh + (subset srfi-1 (fold-right delete filter take drop)) + srfi-2 + srfi-27 ; for shake-list + + + threads + thread-fluids ;; fork-thread + rendezvous ; Needs SUnterlib + rendezvous-channels ; Needs SUnterlib + + define-record-types + handle-fatal-error + dns + + dnsd-cache + dnsd-logging + dnsd-slist + dnsd-options) + + (files (dnsd resolver))) + +(define-structure dnsd-logging dnsd-logging-interface + (open scheme-with-scsh) + (files (dnsd logging))) + + +(define-structure dnsddb-options dnsddb-options-interface + (open scheme-with-scsh + define-record-types + dns) + (files (dnsd db-options))) + +(define-structure dnsd-database dnsd-database-interface + (open scheme-with-scsh + (subset srfi-1 (fold-right)) + srfi-2 + (subset srfi-13 (string-downcase)) + + define-record-types + tables + dns + + dnsd-rw-locks + dnsd-logging) + + (files (dnsd database))) + +(define-structure dnsd-cache dnsd-cache-interface + (open scheme-with-scsh + define-record-types + (subset srfi-1 (fold-right)) + (subset srfi-13 (string-downcase)) + tables + dns + + dnsd-rw-locks) + (files (dnsd cache))) + +(define-structure dnsd-slist dnsd-slist-interface + (open scheme-with-scsh + define-record-types + (subset srfi-1 (fold-right filter)) + srfi-2 + (subset srfi-13 (string-downcase)) + tables + dns + + dnsd-options + dnsd-rw-locks) + (files (dnsd slist))) + +(define-structure dnsd-options dnsd-options-interface + (open scheme-with-scsh + define-record-types) + (files (dnsd options))) + +(define-structure dnsd-rw-locks dnsd-rw-locks-interface + (open scheme-with-scsh + locks + threads + define-record-types) + (files (dnsd rw-locks))) + +(define-structure dnsd-semaphores dnsd-semaphores-interface + (open scheme-with-scsh + define-record-types + locks) + (files (dnsd semaphores))) + +(define-structure dnsd-rr-def dnsd-rr-def-interface + (open scheme-with-scsh + ips + dns + srfi-2) + (files (dnsd rr-def))) + +(define-structure dnsd-mf-parser dnsd-mf-parser-interface + (open scheme-with-scsh + (subset srfi-1 (fold-right)) + srfi-2 + (subset srfi-13 (string-downcase)) + + handle-fatal-error + dns + + dnsd-options + dnsd-logging + dnsd-silex + dnsd-rr-def) + (files (dnsd masterfile-parser))) + +(define-structure dnsd-silex dnsd-silex-interface + (open scheme-with-scsh) + (files (dnsd masterfile.l))) + + ;; FTP server (define-structure ftpd ftpd-interface