debian/0000755000000000000000000000000012145000327007160 5ustar debian/libnet-dns-fingerprint-perl.install0000644000000000000000000000002011726662152016102 0ustar usr/share/perl5 debian/control0000644000000000000000000000500511726667207010607 0ustar Source: net-dns-fingerprint Section: net Priority: optional Maintainer: Thorsten Alteholz Build-Depends: debhelper (>= 9), perl (>= 5.6.0-16) Standards-Version: 3.9.3 Homepage: http://code.google.com/p/fpdns/ Package: libnet-dns-fingerprint-perl Section: perl Architecture: all Depends: ${shlibs:Depends}, ${misc:Depends}, ${perl:Depends}, libnet-dns-perl (>=0.42) Description: library to determine DNS server vendor, product and version Identifying individual nameserver implementations is based on "borderline" protocol behaviour. The DNS protocol offers a multitude of message bits, response types, opcodes, classes, query types and label types in a fashion that makes some mutually exclusive while some are not used in a query messages at all. . Not every implementation offers the full set of features the DNS protocol set currently has. Some implementations offer features outside the protocol set, and there are implementations that do not conform to standards. . Amongst the servers it is able to identify are: . - VGRS ATLAS - BIND (v4, v8, v9) - eNom DNS - Incognito DNS commander - MARADNS - MS Server NT4/2000/2003 - MyDNS - Net::DNS::Namesever - Nominnum ANS/CNS - NonSequitur DNS - NSD - Oak DNS - Pliant DNS Server - Posadis - PowerDNS - QuickDNS - Rbldnsd - Simple DNS plus - TinyDNS - TotD - UltraDNS - pdnsd - Yaku-NS - DeleGate DNS proxy - sheerdns - dproxy - dnrd - JDNSS - javadns jnamed - Nomde DNS tunnel - Viking DNS server - small HTTP server - Cisco Network Registrar - Netnumber ENUM server - RaidenDNSD - Runtop Implementation - Mikrotik Implementation - Axis Video Network Implementation - Fasthosts Envisage DNS server - WinGate DNS - Ascenvision SwiftDNS - Nortel Networks Instant Internet - Nortel Networks Alteon ACEswitch - Aethra ATOS Stargate ADSL - 3Com Office Connect Remote - 4d WebSTAR - Netopia Implementation - DNS4me - Tzolkin DNS service - jdns javadns service - dents Package: fpdns Architecture: all Depends: libnet-dns-fingerprint-perl, libio-socket-inet6-perl, ${misc:Depends} Description: remotely determine DNS server version A nameserver basically responds to a query. Interoperability is an obvious requirement here. The standard protocol behaviour of different DNS implementations is expected to be the same. . The reality is quite different though. fpdns uses a series of borderline DNS queries to determine the vendor, product and version of a nameserver. debian/copyright0000644000000000000000000000330711726662152011134 0ustar This package was debianized by Anand Kumria on Fri, 9 Apr 2004 21:09:34 +1000. It was downloaded from Upstream Authors: Roy Arends Jakob Schlyter Copyright: # Copyright (c) 2003,2004,2005 Roy Arends & Jakob Schlyter. # All rights reserved. # # Redistribution and use in source and binary forms, with or without # modification, are permitted provided that the following conditions # are met: # # 1. Redistributions of source code must retain the above copyright # notice, this list of conditions and the following disclaimer. # 2. Redistributions in binary form must reproduce the above copyright # notice, this list of conditions and the following disclaimer in the # documentation and/or other materials provided with the distribution. # 3. The name of the authors may not be used to endorse or promote products # derived from this software without specific prior written permission. # # THIS SOFTWARE IS PROVIDED BY THE AUTHORS ``AS IS'' AND ANY EXPRESS OR # IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES # OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. # IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY DIRECT, INDIRECT, # INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT # NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, # DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY # THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT # (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF # THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. debian/fpdns.install0000644000000000000000000000003311726662152011674 0ustar usr/bin usr/share/man/man1 debian/changelog0000644000000000000000000000522712144753650011055 0ustar net-dns-fingerprint (0.9.3-5) unstable; urgency=low * debian/patches/05-Fingerprint.pm-680077.patch: Closes: #680077 -- Thorsten Alteholz Wed, 15 May 2013 18:00:00 +0200 net-dns-fingerprint (0.9.3-4) unstable; urgency=low * debian/rules: use only one changelog (Closes: #614707) * debian/rules: replace $PREFIX by $DESTDIR in make call * debian/control: remove not needed Priority:-lines in binary packages * debian/control: remove not needed Section:-line for fpdns * debian/control: add ${misc:Depends} to fpdns [ Jari Aalto ] * Remove deprecated dpatch and upgrade to packaging format "3.0 quilt". Note: patch 03 was updated with "quilt refresh" to make it apply cleanly. * Update to Standards-Version to 3.9.3 and debhelper to 9. -- Thorsten Alteholz Sat, 10 Mar 2012 15:00:00 +0100 net-dns-fingerprint (0.9.3-3) unstable; urgency=low * new maintainer (closes: #508842) * debian/control: moved Homepage: field from description to header * debian/control: changed Homepage: to new URL * debian/rules: no upstream changelog -> used debian/changelog * debian/rules: nothing to do for binary arch, so removed it * debian/compat changed from 4 to 5 * watch file added * changes in src moved to patches * debian/README.source added * debian/control: standards raised from 3.6.2 to 3.8.3 (no change required) * debian/control: changed priority from extra to optional * debian/control: changed typo in description (closes: #343707) * applied patch from Thomas Parmelan (closes: #548307) * Fingerprint.pm: - marked NLD versions as uncertain (closes: #282096) - changed bind entries to latest version -- Thorsten Alteholz Fri, 09 Oct 2009 18:00:00 +0100 net-dns-fingerprint (0.9.3-2) unstable; urgency=low * enable IPv6 AAAA lookups. -- Anand Kumria Sun, 12 Mar 2006 06:03:16 +1100 net-dns-fingerprint (0.9.3-1) unstable; urgency=low * new upstream release * split into two packages * allow changing of separator field -- Anand Kumria Thu, 20 Oct 2005 23:30:37 +1000 fpdns (0.9.1-1) unstable; urgency=low * New upstream release * Ship upstream manual page, based on our initial version -- Anand Kumria Mon, 30 Aug 2004 00:48:56 +1000 fpdns (0.9.0-2) unstable; urgency=low * Add a colon. * Clarify the manual page -- Anand Kumria Wed, 21 Apr 2004 00:30:14 +1000 fpdns (0.9.0-1) unstable; urgency=low * Initial Release. -- Anand Kumria Fri, 9 Apr 2004 21:09:34 +1000 debian/compat0000644000000000000000000000000211726662327010400 0ustar 9 debian/watch0000644000000000000000000000017711726662152010234 0ustar version=3 http://code.google.com/p/fpdns/downloads/list \ http://fpdns.googlecode.com/files/Net-DNS-Fingerprint-(.*).tar.gz debian/net-dns-fingerprint-doc.docs0000644000000000000000000000001011726662152014477 0ustar #DOCS# debian/patches/0000755000000000000000000000000012144756566010635 5ustar debian/patches/05-Fingerprint.pm-680077.patch0000644000000000000000000000263712144756566015563 0ustar Description: take care of missing Net::DNS::Header::data Author: mainly: Duane Wessels dwessels at verisign.com Index: net-dns-fingerprint/Fingerprint.pm =================================================================== --- net-dns-fingerprint.orig/Fingerprint.pm 2013-05-15 20:37:16.000000000 +0200 +++ net-dns-fingerprint/Fingerprint.pm 2013-05-15 21:04:28.000000000 +0200 @@ -632,11 +632,11 @@ return join(",", @list); } + sub fp2header { my @list = split(/,/, shift); - - my $header = Net::DNS::Header->new; + my $header = shift; $header->qr(shift @list); $header->opcode(shift @list); @@ -651,8 +651,6 @@ $header->ancount(shift @list); $header->nscount(shift @list); $header->arcount(shift @list); - - return $header; } sub probe @@ -664,9 +662,13 @@ my $qheader = shift; my @qstring = split(/ /, shift); - my $header = fp2header($qheader); + #XXX original, now wrong: my $packet = Net::DNS::Packet->new(\$header->data); + # next try obtained from: + # https://lists.verisignlabs.com/pipermail/fpdns-user/2012-November/000026.html + # does not work either: my $packet = Net::DNS::Packet->new(\$header->encode); + my $packet = new Net::DNS::Packet; + fp2header($qheader, $packet->header); - my $packet = Net::DNS::Packet->new(\$header->data); $packet->push("question", Net::DNS::Question->new(@qstring)); if ($self->{debug}) { debian/patches/04-Fingerprint.pm-282096.patch0000644000000000000000000001633312144752506015545 0ustar From: Thorsten Alteholz Subject: ISC BIND has newer version results for NLnetLabs are not reliable --- net-dns-fingerprint-0.9.3/Fingerprint.pm.org 2009-10-27 20:58:14.000000000 +0100 +++ net-dns-fingerprint-0.9.3/Fingerprint.pm 2009-10-27 21:30:22.000000000 +0100 @@ -197,27 +197,27 @@ }, { fingerprint => $iq[2], header => $qy[1], ruleset => [ - { fingerprint => $iq[11], result => { vendor => "ISC", product => "BIND", version => "9.2.3rc1 -- 9.4.0a0" }, qv => "version.bind",}, + { fingerprint => $iq[11], result => { vendor => "ISC", product => "BIND", version => "9.2.3rc1 -- 9.6.1-P1" }, qv => "version.bind",}, { fingerprint => $iq[12], header => $qy[3], ruleset => [ { fingerprint => $iq[25], header => $qy[6], ruleset => [ { fingerprint => $iq[33], result => { vendor => "bboy", product => "MyDNS", version => "" },}, { fingerprint => $iq[34], header => $qy[2], query => "012345678901234567890123456789012345678901234567890123456789012.012345678901234567890123456789012345678901234567890123456789012.012345678901234567890123456789012345678901234567890123456789012.0123456789012345678901234567890123456789012345678901234567890. IN A", ruleset => [ - { fingerprint => $iq[47], result => { vendor => "NLnetLabs", product => "NSD", version => "1.0.3 -- 1.2.1"}, qv => "version.server", }, + { fingerprint => $iq[47], result => { vendor => "NLnetLabs", product => "NSD", version => "1.0.3 -- 1.2.1 (uncertain)"}, qv => "version.server", }, { fingerprint => $iq[48], header => $qy[2], query => "hostname.bind CH TXT", ruleset => [ - { fingerprint => $iq[50], result => { vendor => "NLnetLabs", product => "NSD", version => "1.2.2" }, qv => "version.server", }, + { fingerprint => $iq[50], result => { vendor => "NLnetLabs", product => "NSD", version => "1.2.2 (uncertain)" }, qv => "version.server", }, { fingerprint => $iq[51], header => $qy[8], query => ". IN A", ruleset => [ - { fingerprint => $iq[93], result => { vendor => "NLnetLabs", product => "NSD", version => "1.2.3 -- 2.1.2" } , qv => "version.server", }, - { fingerprint => $iq[48], result => { vendor => "NLnetLabs", product => "NSD", version => "2.1.3" }, qv => "version.server", }, + { fingerprint => $iq[93], result => { vendor => "NLnetLabs", product => "NSD", version => "1.2.3 -- 2.1.2 (uncertain)" } , qv => "version.server", }, + { fingerprint => $iq[48], result => { vendor => "NLnetLabs", product => "NSD", version => "2.1.3 (uncertain)" }, qv => "version.server", }, { fingerprint => ".+", state => "q0r2q1r12q3r25q6r34q2r48q2r51q8r?", }, ] }, { fingerprint => ".+", state => "q0r2q1r12q3r25q6r34q2r48q2r?", }, ] }, { fingerprint => $iq[49], header => $qy[2], query => "hostname.bind CH TXT", ruleset => [ - { fingerprint => $iq[50], result => { vendor => "NLnetLabs", product => "NSD", version => "1.2.2 [root]"} , qv => "version.server", }, - { fingerprint => $iq[51], result => { vendor => "NLnetLabs", product => "NSD", version => "1.2.3 [root]"}, qv => "version.server", }, + { fingerprint => $iq[50], result => { vendor => "NLnetLabs", product => "NSD", version => "1.2.2 [root] (uncertain)"} , qv => "version.server", }, + { fingerprint => $iq[51], result => { vendor => "NLnetLabs", product => "NSD", version => "1.2.3 [root] (uncertain)"}, qv => "version.server", }, { fingerprint => ".+", state => "q0r2q1r12q3r25q6r34q2r49q2r?", }, ] }, - { fingerprint => $iq[53], result => { vendor => "NLnetLabs", product=>"NSD", version => "1.0.2"}, qv => "version.server", }, + { fingerprint => $iq[53], result => { vendor => "NLnetLabs", product=>"NSD", version => "1.0.2 (uncertain)"}, qv => "version.server", }, { fingerprint => ".+", state => "q0r2q1r12q3r25q6r34q2a?", },] }, { fingerprint => ".+", state => "q0r2q1r12q3r25q6r?", },] @@ -227,7 +227,7 @@ }, { fingerprint => $iq[15], header => $qy[6], ruleset => [ { fingerprint => $iq[45], result => { vendor => "Nominum", product =>"ANS", version =>""}, qv => "version.bind",}, - { fingerprint => $iq[65], result => { vendor => "ISC", product => "BIND", version => "9.2.3rc1 -- 9.4.0a0" }, qv => "version.bind",}, + { fingerprint => $iq[65], result => { vendor => "ISC", product => "BIND", version => "9.2.3rc1 -- 9.6.1-P1" }, qv => "version.bind",}, { fingerprint => $iq[46], header => $qy[7], ruleset => [ { fingerprint => $iq[56], result => { vendor => "ISC", product => "BIND", version => "9.0.0b5 -- 9.0.1" }, qv => "version.bind",}, { fingerprint => $iq[57], result => { vendor => "ISC", product => "BIND", version => "9.1.0 -- 9.1.3" }, qv => "version.bind",}, @@ -299,8 +299,8 @@ }, { fingerprint => $iq[5], header => $qy[1], ruleset => [ - { fingerprint => $iq[11], result => { vendor => "ISC", product => "BIND", version => "9.2.3rc1 -- 9.4.0a0", option => "recursion enabled,split view" }, qv => "version.bind",}, - { fingerprint => $iq[17], result => {vendor => "ISC", product =>"BIND", version => "9.2.3rc1 -- 9.4.0a0 [recursion enabled]"}, qv => "version.bind",}, + { fingerprint => $iq[11], result => { vendor => "ISC", product => "BIND", version => "9.2.3rc1 -- 9.6.1-P1", option => "recursion enabled,split view" }, qv => "version.bind",}, + { fingerprint => $iq[17], result => {vendor => "ISC", product =>"BIND", version => "9.2.3rc1 -- 9.6.1-P1 [recursion enabled]"}, qv => "version.bind",}, { fingerprint => $iq[18], header => $qy[5], ruleset => [ { fingerprint => $iq[5], header => $qy[7], query => ". IN A", ruleset => [ { fingerprint => $iq[84], result => {vendor => "Nominum", product =>"CNS", version => ""}, qv => "version.bind",}, @@ -375,7 +375,7 @@ }, { fingerprint => $iq[44], result => { vendor =>"cpan", product=>"Net::DNS Nameserver", version =>""}, qv => "version.bind", }, - { fingerprint => $iq[52], result => { vendor =>"NLnetLabs", product=>"NSD", version => "1.0 alpha"}, }, + { fingerprint => $iq[52], result => { vendor =>"NLnetLabs", product=>"NSD", version => "1.0 alpha (uncertain)"}, }, { fingerprint => $iq[55], result => { vendor =>"robtex", product=>"Viking DNS module", version=>""}, }, { fingerprint => $iq[59], result => { vendor =>"Max Feoktistov", product=>"small HTTP server [recursion enabled]", version =>""}, }, { fingerprint => $iq[60], result => { vendor =>"Axis", product=>"video server", version =>""}, }, debian/patches/series0000644000000000000000000000020512144752756012044 0ustar 01-Fingerprint.pm.patch 02-apps-fpdns.patch 03-apps-fpdns-548307.patch 04-Fingerprint.pm-282096.patch 05-Fingerprint.pm-680077.patch debian/patches/01-Fingerprint.pm.patch0000644000000000000000000000104611726662327014773 0ustar From: Thorsten Alteholz Subject: Make separator configurable --- Net-DNS-Fingerprint-0.9.3/Fingerprint.pm 2005-09-05 15:33:36.000000000 +0200 +++ net-dns-fingerprint-0.9.3/Fingerprint.pm 2009-10-08 22:23:37.000000000 +0200 @@ -46,6 +46,7 @@ debug => 0, qversion => 0, qchaos => 0, + separator => " ", ); my $versionlength = 40; @@ -470,7 +471,7 @@ push @s, "($r{state};$r{id})" if($self->{debug}); - return join(" ", @s); + return join($self->{separator}, @s); } sub query_version debian/patches/02-apps-fpdns.patch0000644000000000000000000000476211726662327014155 0ustar From: Anand Kumria Subject: allow changing of separator field --- Net-DNS-Fingerprint-0.9.3/apps/fpdns 2005-03-04 15:17:28.000000000 +0100 +++ net-dns-fingerprint-0.9.3/apps/fpdns 2009-10-08 22:23:37.000000000 +0200 @@ -52,12 +52,13 @@ $opt{F} = 10; $opt{T} = undef; $opt{Q} = undef; + $opt{S} = " "; my %children; my $concurrent = 0; - getopts('Q:DF:p:t:r:cfsdTv', \%opt); + getopts('Q:DF:p:t:r:cfsS:dTv', \%opt); if ($opt{v}) { print STDERR "$progname version $version\n"; @@ -77,6 +78,7 @@ forcetcp => $opt{T}, qversion => $opt{v}, qchaos => $opt{f}, + separator=> $opt{S}, ); if ($ARGV[0] eq "-") { @@ -127,7 +129,7 @@ } } } else { - print STDERR "host not found ($server)"; + print STDERR "host not found ($server)\n"; } } @@ -150,6 +152,14 @@ push @addresses, $address_rr->address if $address_rr->type eq "A"; } } + + my $query_address6 = $resolver->send($rr->rdatastr, "AAAA") if $rr->type eq "NS"; + if ($query_address6) { + foreach my $address_rr ($query_address6->answer) { + push @addresses, $address_rr->address if $address_rr->type eq "AAAA"; + } + } + } } } else { @@ -159,6 +169,16 @@ push @addresses, $rr->address if $rr->type eq "A"; } } + + my $query6 = $resolver->send($arg, "AAAA"); + + if ($query6) { + foreach my $rr ($query6->answer) { + push @addresses, $rr->address if $rr->type eq "AAAA"; + } + } + + } return @addresses; @@ -179,6 +199,7 @@ -Q srcaddr (source IP address) [0.0.0.0] -r retry (set number of attempts) [1] -s (short form) [off] + -S (separator) [" "] -t time (set query timeout) [5] -T (use TCP) [off] -v (show version) @@ -199,7 +220,7 @@ B S<[ B<-c> ]> S<[ B<-d> ]> S<[ B<-f> ]> S<[ B<-F> I ]> S<[ B<-p> I ]> S<[ B<-Q> I ]> S<[ B<-r> I ]> - S<[ B<-s> ]> S<[ B<-t> I ]> S<[ B<-v> ]> [I] + S<[ B<-s> ]> S<[ B<-S> I ]> S<[ B<-t> I ]> S<[ B<-v> ]> [I] =head1 DESCRIPTION @@ -254,6 +275,10 @@ Short display form. Useful for surveys. +=item B<-S> + +Separator. Defaults to " ". + =item B<-t> I Set the query timeout in seconds. Defaults to 5. debian/patches/03-apps-fpdns-548307.patch0000644000000000000000000000065511726662327014723 0ustar From: Thorsten Alteholz Subject: #548307: fpdns: "-c" option ignored, patch provided by Thomas Parmelan --- apps/fpdns | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) --- a/apps/fpdns +++ b/apps/fpdns @@ -76,7 +76,7 @@ timeout => $opt{t}, retry => $opt{r}, forcetcp => $opt{T}, - qversion => $opt{v}, + qversion => $opt{c}, qchaos => $opt{f}, separator=> $opt{S}, ); debian/net-dns-fingerprint-doc.install0000644000000000000000000000001011726662152015215 0ustar #DOCS# debian/rules0000755000000000000000000000626511726670053010266 0ustar #!/usr/bin/make -f # -*- makefile -*- # Sample debian/rules that uses debhelper. # # This file was originally written by Joey Hess and Craig Small. # As a special exception, when this file is copied by dh-make into a # dh-make output file, you may use that output file without restriction. # This special exception was added by Craig Small in version 0.37 of dh-make. # # Modified to make a template file for a multi-binary package with separated # build-arch and build-indep targets by Bill Allombert 2001 # Uncomment this to turn on verbose mode. #export DH_VERBOSE=1 # This has to be exported to make some magic below work. export DH_OPTIONS # These are used for cross-compiling and for saving the configure script # from having to guess our platform (since we know it already) DEB_HOST_GNU_TYPE ?= $(shell dpkg-architecture -qDEB_HOST_GNU_TYPE) DEB_BUILD_GNU_TYPE ?= $(shell dpkg-architecture -qDEB_BUILD_GNU_TYPE) CFLAGS = -Wall -g ifneq (,$(findstring noopt,$(DEB_BUILD_OPTIONS))) CFLAGS += -O0 else CFLAGS += -O2 endif ifeq (,$(findstring nostrip,$(DEB_BUILD_OPTIONS))) INSTALL_PROGRAM += -s endif configure: configure-stamp configure-stamp: dh_testdir # Add here commands to configure the package. touch configure-stamp #Architecture build: build-arch build-indep build-arch: build-arch-stamp build-arch-stamp: configure-stamp # Add here commands to compile the arch part of the package. #$(MAKE) touch build-arch-stamp build-indep: build-indep-stamp build-indep-stamp: configure-stamp # Add here commands to compile the indep part of the package. #$(MAKE) doc perl Makefile.PL INSTALLDIRS=vendor $(MAKE) OPTIMIZE=$CFLAGS touch build-indep-stamp clean: dh_testdir dh_testroot rm -f build-arch-stamp build-indep-stamp #CONFIGURE-STAMP# # Add here commands to clean up after the build process. [ ! -f Makefile ] || $(MAKE) clean # remove old Makefile rm -f Makefile.old dh_clean install: install-indep install-arch install-indep: dh_testdir dh_testroot dh_prep dh_installdirs -i # Add here commands to install the indep part of the package into # debian/-doc. #INSTALLDOC# $(MAKE) install DESTDIR=$(CURDIR)/debian/tmp dh_install -i --sourcedir=debian/tmp --fail-missing install-arch: binary-common: dh_testdir dh_testroot # do not use debian/changelog as upstream changelog # and ignore lintian complaints # dh_installchangelogs debian/changelog dh_installchangelogs dh_installdocs dh_installexamples # dh_installmenu # dh_installdebconf # dh_installlogrotate # dh_installemacsen # dh_installpam # dh_installmime # dh_installinit # dh_installcron # dh_installinfo dh_installman dh_link dh_strip dh_compress dh_fixperms dh_perl # dh_python dh_makeshlibs dh_installdeb dh_shlibdeps dh_gencontrol dh_md5sums dh_builddeb # Build architecture independant packages using the common target. binary-indep: build-indep install-indep $(MAKE) -f debian/rules DH_OPTIONS=-i binary-common # Build architecture dependant packages using the common target. binary-arch: # we aren't building any arch-dependant code #binary: binary-arch binary-indep binary: binary-indep .PHONY: build clean binary-indep binary-arch binary install install-indep install-arch configure debian/source/0000755000000000000000000000000011726662327010502 5ustar debian/source/format0000644000000000000000000000001411726662327011710 0ustar 3.0 (quilt)