Imported Debian version 4.6.13

This commit is contained in:
Marco d'Itri 2004-04-08 13:16:58 +02:00
parent 548793b0a4
commit 02298a2df4
13 changed files with 398 additions and 284 deletions

View File

@ -20,6 +20,8 @@ LIBIDN += -lidn
CFLAGS += -DHAVE_LIBIDN CFLAGS += -DHAVE_LIBIDN
endif endif
PERL=perl
all: whois #pos all: whois #pos
whois: whois.c whois.h config.h data.h as_del.h ip_del.h tld_serv.h whois: whois.c whois.h config.h data.h as_del.h ip_del.h tld_serv.h
@ -29,13 +31,13 @@ mkpasswd: mkpasswd.c
$(CC) $(CFLAGS) $(OPTS) mkpasswd.c -o mkpasswd -lcrypt $(CC) $(CFLAGS) $(OPTS) mkpasswd.c -o mkpasswd -lcrypt
as_del.h: as_del_list make_as_del.pl as_del.h: as_del_list make_as_del.pl
perl make_as_del.pl < as_del_list > as_del.h $(PERL) -w make_as_del.pl < as_del_list > as_del.h
ip_del.h: ip_del_list make_ip_del.pl ip_del.h: ip_del_list make_ip_del.pl
perl make_ip_del.pl < ip_del_list > ip_del.h $(PERL) -w make_ip_del.pl < ip_del_list > ip_del.h
tld_serv.h: tld_serv_list make_tld_serv.pl tld_serv.h: tld_serv_list make_tld_serv.pl
perl make_tld_serv.pl < tld_serv_list > tld_serv.h $(PERL) -w make_tld_serv.pl < tld_serv_list > tld_serv.h
install: whois install: whois
install -m 0755 whois $(BASEDIR)$(prefix)/bin/ install -m 0755 whois $(BASEDIR)$(prefix)/bin/

View File

@ -1,12 +1,9 @@
/* Program version */ /* Program version */
/* not for the inetutils version */ /* not for the inetutils version */
#define VERSION "4.6.9" #define VERSION "4.6.11"
/* Configurable features */ /* Configurable features */
/* 6bone referto: support */
#define EXT_6BONE
/* Always hide legal disclaimers */ /* Always hide legal disclaimers */
#undef ALWAYS_HIDE_DISCL #undef ALWAYS_HIDE_DISCL

5
data.h
View File

@ -40,7 +40,8 @@ const char *ripe_servers_old[] = {
}; };
const char *hide_strings[] = { const char *hide_strings[] = {
"NOTICE AND TERMS OF USE: You", "Network Solutions reserves",/* VERISIGN */ "NOTICE AND TERMS OF USE: You", "Network Solutions reserves",/* Verisign */
"NOTICE: The expiration date", "Registrars.", /* crsnic */
"NOTICE: Access to .ORG WHOIS", "time. By submitting", /* org */ "NOTICE: Access to .ORG WHOIS", "time. By submitting", /* org */
"NOTICE: Access to .INFO WHOIS", "time. By submitting", /* info */ "NOTICE: Access to .INFO WHOIS", "time. By submitting", /* info */
"This Registry database contains ONLY .EDU", "type: help", /* edu */ "This Registry database contains ONLY .EDU", "type: help", /* edu */
@ -65,6 +66,7 @@ const char *hide_strings[] = {
"The Data in OnlineNIC", "\tBy starting this query", /* OnlineNIC */ "The Data in OnlineNIC", "\tBy starting this query", /* OnlineNIC */
"The data in Bulkregister.com", "you agree to abide", /* bulkregister */ "The data in Bulkregister.com", "you agree to abide", /* bulkregister */
"The Data in Alldomains.com's", "By submitting this query,",/*alldomains*/ "The Data in Alldomains.com's", "By submitting this query,",/*alldomains*/
"Interdomain's WHOIS", "DOES NOT SIGNIFY",
NULL, NULL NULL, NULL
}; };
@ -118,6 +120,7 @@ struct ip6_del ip6_assign[] = {
{ 0x1400, "whois.ripe.net" }, { 0x1400, "whois.ripe.net" },
{ 0x1600, "whois.ripe.net" }, { 0x1600, "whois.ripe.net" },
{ 0x1800, "whois.arin.net" }, { 0x1800, "whois.arin.net" },
{ 0x1A00, "whois.ripe.net" },
{ 0, NULL } { 0, NULL }
}; };

31
debian/changelog vendored
View File

@ -1,3 +1,34 @@
whois (4.6.13) unstable; urgency=medium
* Fix the DENIC code. (Closes: #242424)
-- Marco d'Itri <md@linux.it> Thu, 8 Apr 2004 13:16:58 +0200
whois (4.6.12) unstable; urgency=medium
* Added a workaround for DENIC brokeness. (Closes: #242424)
* Added the new IPv4 networks allocated to RIPE.
-- Marco d'Itri <md@linux.it> Tue, 6 Apr 2004 19:25:20 +0200
whois (4.6.11) unstable; urgency=medium
* Fix parsing of IPv4 addresses on 64 bit architectures, spotted by
Paul Slootman. (Closes: #229809)
* Add support for ARIN whois referrals. (Closes: #229810, #231694)
* Cleaned up some code and added support for ARIN referrals, based
on a patch by Kees Cook.
-- Marco d'Itri <md@linux.it> Sat, 31 Jan 2004 17:41:39 +0100
whois (4.6.10) unstable; urgency=high
* Compiled with libidn11. (Closes: #227350)
* Fixed a disclaimer. (Closes: #226949)
* Updated Greek .po file from Velonis Petros.
-- Marco d'Itri <md@linux.it> Tue, 13 Jan 2004 12:55:51 +0100
whois (4.6.9) unstable; urgency=medium whois (4.6.9) unstable; urgency=medium
* Removed .ac.cn SLD. (Closes: #219883) * Removed .ac.cn SLD. (Closes: #219883)

2
debian/control vendored
View File

@ -3,7 +3,7 @@ Section: net
Priority: standard Priority: standard
Maintainer: Marco d'Itri <md@linux.it> Maintainer: Marco d'Itri <md@linux.it>
Standards-Version: 3.6.1 Standards-Version: 3.6.1
Build-Depends: debhelper, gettext, libidn9-dev Build-Depends: debhelper, gettext, libidn11-dev
Package: whois Package: whois
Architecture: any Architecture: any

View File

@ -14,8 +14,8 @@
61.208.0.0/13 whois.nic.ad.jp # => 61.215.255.255 61.208.0.0/13 whois.nic.ad.jp # => 61.215.255.255
60.0.0.0/7 apnic 60.0.0.0/7 apnic
62.0.0.0/8 ripe 62.0.0.0/8 ripe
80.0.0.0/7 ripe 80.0.0.0/5 ripe # => 87.255.255.254
82.0.0.0/8 ripe 88.0.0.0/8 ripe
96.0.0.0/3 UNALLOCATED # 96 -> 127 reserved 96.0.0.0/3 UNALLOCATED # 96 -> 127 reserved
0.0.0.0/1 arin # all other A classes are managed by ARIN 0.0.0.0/1 arin # all other A classes are managed by ARIN
133.0.0.0/8 whois.nic.ad.jp 133.0.0.0/8 whois.nic.ad.jp

View File

@ -7,18 +7,19 @@ while (<>) {
s/^\s*(.*)\s*$/$1/; s/^\s*(.*)\s*$/$1/;
s/\s*#.*$//; s/\s*#.*$//;
next if /^$/; next if /^$/;
die "format error: $_" unless (/^([\d\.]+)\/(\d+)\s+([\w\.]+)$/);
my $m=$2; my $s=$3; die "format error: $_" if not /^([\d\.]+)\/(\d+)\s+([\w\.]+)$/;
my ($i1, $i2, $i3, $i4)=split(/\./, $1); my $m = $2; my $s = $3;
print "{ ".(($i1<<24)+($i2<<16)+($i3<<8)+$i4)."UL, ". my ($i1, $i2, $i3, $i4) = split(/\./, $1);
(~(0xffffffff>>$m))."UL, \""; print '{ ' . (($i1 << 24) + ($i2 << 16) + ($i3 << 8) + $i4) . 'UL, '.
((~(0xffffffff >> $m)) & 0xffffffff) . 'UL, "';
if ($s =~ /\./) { if ($s =~ /\./) {
print "$s"; print $s;
} elsif ($s eq 'UNALLOCATED') { } elsif ($s eq 'UNALLOCATED') {
print "\006"; print "\\006";
} else { } else {
print "whois.$s.net"; print "whois.$s.net";
} }
print "\" },\n"; print '" },' . "\n";
} }

211
po/el.po
View File

@ -1,17 +1,16 @@
# Greek translation of the whois command. # Greek translation of the whois 4.6.9 command.
# Copyright (C) 1999-2000 Simos Xenitellis # Copyright (C) 1999-2003 Simos Xenitellis, Velonis Petros
# Simos Xenitellis <simos@hellug.gr>\n" # Simos Xenitellis <simos@hellug.gr>
# # Velonis Petros <velonis@freemail.gr>
msgid "" msgid ""
msgstr "" msgstr ""
"Project-Id-Version: whois 4.5.3\n" "Project-Id-Version: whois 4.6.9\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2003-12-01 18:31+0100\n" "POT-Creation-Date: 2003-12-01 18:31+0100\n"
"PO-Revision-Date: 2001-02-23 16:07:57+0900\n" "PO-Revision-Date: 2003-12-10 08:51+0200\n"
"Last-Translator: Simos Xenitellis <simos@hellug.gr>\n" "Last-Translator: Velonis Petros <velonis@freemail.gr>\n"
"Language-Team: Greek <nls@tux.hellug.gr>\n" "Language-Team: Greek <velonis@freemail.gr>\n"
"MIME-Version: 1.0\n" "MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=iso-8859-7\n" "Content-Type: text/plain; charset=utf-8\n"
"Content-Transfer-Encoding: 8bit\n" "Content-Transfer-Encoding: 8bit\n"
#: ../whois.c:108 #: ../whois.c:108
@ -21,75 +20,71 @@ msgid ""
"\n" "\n"
"Report bugs to %s.\n" "Report bugs to %s.\n"
msgstr "" msgstr ""
"Έκδοση %s.\n" "Έκδοση %s.\n"
"\n" "\n"
"Αναφέρατε σφάλματα στο %s.\n" "Αναφέρατε σφάλματα στο %s.\n"
#: ../whois.c:151 ../whois.c:240 #: ../whois.c:151
#: ../whois.c:240
#, c-format #, c-format
msgid "Using server %s.\n" msgid "Using server %s.\n"
msgstr "Γίνεται χρήση του εξυπηρετητή %s.\n" msgstr "Γίνεται χρήση του εξυπηρετητή %s.\n"
#: ../whois.c:173 #: ../whois.c:173
#, c-format #, c-format
msgid "Using default server %s.\n" msgid "Using default server %s.\n"
msgstr "Χρήση εξ' ορισμού εξυπηρετητή %s.\n" msgstr "Χρήση εξ' ορισμού εξυπηρετητή %s.\n"
#: ../whois.c:176 #: ../whois.c:176
msgid "This TLD has no whois server, but you can access the whois database at" msgid "This TLD has no whois server, but you can access the whois database at"
msgstr "" msgstr "Αυτό το TLD δεν έχει εξυπηρετητή whois, ωστόσο μπορείτε να προσπελάσετε την βάση whois στο"
"Αυτό το TLD δεν έχει εξυπηρετητή whois, ωστόσο μπορείτε να προσπελάσετε την "
"βάση whois στο"
#: ../whois.c:182 #: ../whois.c:182
msgid "This TLD has no whois server." msgid "This TLD has no whois server."
msgstr "Αυτό το TLD δεν έχει εξυπηρετητή whois." msgstr "Αυτό το TLD δεν έχει εξυπηρετητή whois."
#: ../whois.c:186 #: ../whois.c:186
#, fuzzy
msgid "Connecting to whois.crsnic.net." msgid "Connecting to whois.crsnic.net."
msgstr "Γίνεται σύνδεση στο whois.internic.net." msgstr "Γίνεται σύνδεση στο whois.crsnic.net."
#: ../whois.c:192 ../whois.c:203 #: ../whois.c:192
#, fuzzy, c-format #: ../whois.c:203
#, c-format
msgid "" msgid ""
"\n" "\n"
"Found a referral to %s.\n" "Found a referral to %s.\n"
"\n" "\n"
msgstr "" msgstr ""
"\n" "\n"
"Βρέθηκε αναφορά από το InterNIC στο %s.\n" "Βρέθηκε αναφορά στο %s.\n"
"\n" "\n"
#: ../whois.c:197 #: ../whois.c:197
#, fuzzy
msgid "Connecting to whois.nic.cc." msgid "Connecting to whois.nic.cc."
msgstr "Γίνεται σύνδεση στο whois.internic.net." msgstr "Γίνεται σύνδεση στο whois.nic.cc."
#: ../whois.c:208 #: ../whois.c:208
#, fuzzy
msgid "Connecting to whois.publicinterestregistry.net." msgid "Connecting to whois.publicinterestregistry.net."
msgstr "Γίνεται σύνδεση στο whois.internic.net." msgstr "Γίνεται σύνδεση στο whois.publicinterestregistry.net."
#: ../whois.c:214 #: ../whois.c:214
#, fuzzy, c-format #, c-format
msgid "" msgid ""
"\n" "\n"
"Found referral to %s.\n" "Found referral to %s.\n"
"\n" "\n"
msgstr "" msgstr ""
"\n" "\n"
"Βρέθηκε αναφορά από το InterNIC στο %s.\n" "Βρέθηκε αναφορά στο %s.\n"
"\n" "\n"
#: ../whois.c:218 #: ../whois.c:218
msgid "No whois server is known for this kind of object." msgid "No whois server is known for this kind of object."
msgstr "" msgstr "Κανένας εξυπηρετητής whois δεν είναι γνωστός για αυτού του είδους το αντικείμενο."
#: ../whois.c:221 #: ../whois.c:221
#, fuzzy
msgid "Unknown AS number or IP network. Please upgrade this program." msgid "Unknown AS number or IP network. Please upgrade this program."
msgstr "Άγνωστος αριθμός AS. Παρακαλώ ενημερώστε αυτό το πρόγραμμα." msgstr "Άγνωστος αριθμός AS ή IP δικτύου. Παρακαλώ αναβαθμίστε αυτό το πρόγραμμα."
#: ../whois.c:228 #: ../whois.c:228
#, c-format #, c-format
@ -98,6 +93,9 @@ msgid ""
"Querying for the IPv4 endpoint %s of a 6to4 IPv6 address.\n" "Querying for the IPv4 endpoint %s of a 6to4 IPv6 address.\n"
"\n" "\n"
msgstr "" msgstr ""
"\n"
"Άντληση πληροφοριών για το σημείο τέλους IPv4 %s μιας διεύθυνσης 6to4 IPv6.\n"
"\n"
#: ../whois.c:249 #: ../whois.c:249
#, c-format #, c-format
@ -105,54 +103,52 @@ msgid ""
"Query string: \"%s\"\n" "Query string: \"%s\"\n"
"\n" "\n"
msgstr "" msgstr ""
"Αλφαριθμητικό ερώτησης: \"%s\"\n" "Αλφαριθμητικό ερώτησης: \"%s\"\n"
"\n" "\n"
#: ../whois.c:302 ../whois.c:305 #: ../whois.c:302
#: ../whois.c:305
#, c-format #, c-format
msgid "Cannot parse this line: %s" msgid "Cannot parse this line: %s"
msgstr "" msgstr "Αδύνατη η ανάλυση αυτής της γραμμής: %s"
#: ../whois.c:446 #: ../whois.c:446
#, fuzzy
msgid "Warning: RIPE flags used with a traditional server." msgid "Warning: RIPE flags used with a traditional server."
msgstr "" msgstr "Προειδοποίηση: Η σημαίες του RIPE χρησιμοποιούνται σε έναν παραδοσιακό εξυπηρετητή."
"Προειδοποίηση: Η σημαίες του RIPE αγνοούνται σε έναν παραδοσιακό εξυπηρετητή."
#: ../whois.c:503 #: ../whois.c:503
#, c-format #, c-format
msgid "Detected referral to %s on %s.\n" msgid "Detected referral to %s on %s.\n"
msgstr "Ανιχνεύθηκε αναφορά του %s στο %s.\n" msgstr "Ανιχνεύθηκε αναφορά του %s στο %s.\n"
#: ../whois.c:520 #: ../whois.c:520
msgid "" msgid ""
"Catastrophic error: disclaimer text has been changed.\n" "Catastrophic error: disclaimer text has been changed.\n"
"Please upgrade this program.\n" "Please upgrade this program.\n"
msgstr "" msgstr ""
"Καταστροφικό σφάλμα: το κείμενο της αποποίησης ευθυνών έχει τροποποιηθεί.\n" "Καταστροφικό σφάλμα: το κείμενο της αποποίησης ευθυνών έχει τροποποιηθεί.\n"
"Παρακαλώ αναβαθμίστε το πρόγραμμα.\n" "Παρακαλώ αναβαθμίστε το πρόγραμμα.\n"
#: ../whois.c:639 #: ../whois.c:639
#, c-format #, c-format
msgid "Host %s not found." msgid "Host %s not found."
msgstr "Το σύστημα %s δε βρέθηκε." msgstr "Το σύστημα %s δε βρέθηκε."
#: ../whois.c:649 #: ../whois.c:649
#, c-format #, c-format
msgid "%s/tcp: unknown service" msgid "%s/tcp: unknown service"
msgstr "%s/tcp: άγνωστη υπηρεσία" msgstr "%s/tcp: άγνωστη υπηρεσία"
#: ../whois.c:661 #: ../whois.c:661
msgid "Timeout." msgid "Timeout."
msgstr "" msgstr "Διάλειμμα."
#: ../whois.c:667 #: ../whois.c:667
#, c-format #, c-format
msgid "Interrupted by signal %d..." msgid "Interrupted by signal %d..."
msgstr "Διακοπή από το σήμα %d..." msgstr "Διακοπή από το σήμα %d..."
#: ../whois.c:728 #: ../whois.c:728
#, fuzzy
msgid "" msgid ""
"Usage: whois [OPTION]... OBJECT...\n" "Usage: whois [OPTION]... OBJECT...\n"
"\n" "\n"
@ -160,11 +156,9 @@ msgid ""
"-L find all Less specific matches\n" "-L find all Less specific matches\n"
"-m find first level more specific matches\n" "-m find first level more specific matches\n"
"-M find all More specific matches\n" "-M find all More specific matches\n"
"-c find the smallest match containing a mnt-irt " "-c find the smallest match containing a mnt-irt attribute\n"
"attribute\n"
"-x exact match [RPSL only]\n" "-x exact match [RPSL only]\n"
"-d return DNS reverse delegation objects too [RPSL " "-d return DNS reverse delegation objects too [RPSL only]\n"
"only]\n"
"-i ATTR[,ATTR]... do an inverse lookup for specified ATTRibutes\n" "-i ATTR[,ATTR]... do an inverse lookup for specified ATTRibutes\n"
"-T TYPE[,TYPE]... only look for objects of TYPE\n" "-T TYPE[,TYPE]... only look for objects of TYPE\n"
"-K only primary keys are returned [RPSL only]\n" "-K only primary keys are returned [RPSL only]\n"
@ -174,8 +168,7 @@ msgid ""
"-a search all databases\n" "-a search all databases\n"
"-s SOURCE[,SOURCE]... search the database from SOURCE\n" "-s SOURCE[,SOURCE]... search the database from SOURCE\n"
"-g SOURCE:FIRST-LAST find updates from SOURCE from serial FIRST to LAST\n" "-g SOURCE:FIRST-LAST find updates from SOURCE from serial FIRST to LAST\n"
"-t TYPE request template for object of TYPE ('all' for a " "-t TYPE request template for object of TYPE ('all' for a list)\n"
"list)\n"
"-v TYPE request verbose template for object of TYPE\n" "-v TYPE request verbose template for object of TYPE\n"
"-q [version|sources|types] query specified server info [RPSL only]\n" "-q [version|sources|types] query specified server info [RPSL only]\n"
"-F fast raw output (implies -r)\n" "-F fast raw output (implies -r)\n"
@ -186,81 +179,72 @@ msgid ""
" --help display this help and exit\n" " --help display this help and exit\n"
" --version output version information and exit\n" " --version output version information and exit\n"
msgstr "" msgstr ""
"Uso: whois [ΕΠΙΛΟΓΈΣ]... ΑΝΤΙΚΕΊΜΕΝΟ...\n" "Χρήση: whois [ΕΠΙΛΟΓΕΣ]... ΑΝΤΙΚΕΙΜΕΝΟ...\n"
"\n" "\n"
"-a αναζήτηση σε όλες τις βάσεις δεδομένων\n" "-l ένα επίπεδο λιγότερο συγκεκριμένη αναζήτηση [μόνο RPSL]\n"
"-F γρήγορη ακατέργαστη έξοδος (υπονοεί -r)\n" "-L εύρεση όλων των Λιγότερο συγκεκριμένων ταιριασμάτων\n"
"-g ΠΗΓΉ:ΠΡΏΤΟ:ΤΕΛΕΥΤΑΊΟ πρώτα αναβαθμίζει από την ΠΗΓΉ από το " "-m εύρεση όλων των πρώτου επιπέδου περισσότερο συγκεκριμένων ταιριασμάτων\n"
"σειριακό ΠΡΏΤΟ ως ΤΕΛΕΥΤΑΊΟ\n" "-M εύρεση όλων των Περισσότερο συγκεκριμένων ταιριασμάτων\n"
"-h ΣΎΣΤΗΜΑ σύνδεση στον εξυπηρετητή ΣΎΣΤΗΜΑ\n" "-c εύρεση του μικρότερου ταιριάσματος που να περιέχει μια ένα χαρακτηριστικό mnt-irt \n"
"-H απόκρυψη του νομικού εγγράφου αποποίησης ευθύνης\n" "-x ακριβές ταίριασμα [μόνο RPSL]\n"
"-i ΧΑΡΑΚ[,ΧΑΡΑΚ]... να γίνει μια αντίστροφη αναζήτηση για το " "-d επιστροφή και των αντίστροφων αντικειμένων DNS [μόνο RPSL]\n"
"καθορισμένα ΧΑΡΑΚτηριστικά\n" "-i ΧΑΡΑΚ[,ΧΑΡΑΚ]... να γίνει μια αντίστροφη αναζήτηση για τα καθορισμένα ΧΑΡΑΚτηριστικά\n"
"-x ακριβές ταίριασμα [μόνο RPSL]\n" "-T ΕΙΔΟΣ[,ΕΊΔΟΣ]... αναζήτηση μόνο αντικειμένου του ΕΙΔΟΥΣ\n"
"-l ένα επίπεδο λιγότερο συγκεκριμένη αναζήτηση [μόνο " "-K επιστροφή μόνο των πρωταρχικών κλειδιών [μόνο RPSL]\n"
"RPSL]\n" "-r απενεργοποίηση των αναδρομικών αναζητήσεων για πληροφορίες επικοινωνίας\n"
"-L εύρεση όλων των Λιγότερο συγκεκριμένων ταιριασμάτων\n" "-R επιβολή εμφάνισης τοπικού αντιγράφου του αντικειμένου επιθήματος ακόμα και αν περιέχει αναφορές\n"
"-M εύρεση όλων των Περισσότερο " "-a αναζήτηση σε όλες τις βάσεις δεδομένων\n"
"συγκεκριμένων ταιριασμάτων\n" "-s ΠΗΓΗ[,ΠΗΓΉ]... αναζήτηση της βάσης δεδομένων από την ΠΗΓΗ\n"
"-m εύρεση όλων των πρώτου επιπέδου " "-g ΠΗΓΗ:ΠΡΩΤΟ:ΤΕΛΕΥΤΑΙΟ εμφάνιση αναβαθμίσεων από την ΠΗΓΗ από το σειριακό ΠΡΏΤΟ ως ΤΕΛΕΥΤΑΙΟ\n"
"περισσότερο συγκεκριμένων ταιριασμάτων\n" "-t ΕΙΔΟΣ αναζήτηση προτύπου για το αντικείμενο του ΕΊΔΟΥΣ ('all' για εμφάνιση λίστας)\n"
"-r απενεργοποίηση των αναδρομικών αναζητήσεων\n" "-v ΕΙΔΟΣ αναζήτηση περιφραστικού προτύπου για το αντικείμενο του ΕΙΔΟΥΣ\n"
"-p ΘΎΡΑ σύνδεση στη ΘΎΡΑ\n" "-q [έκδοση|πηγές|τύποι] συγκεκριμένο ερώτημα πληροφοριών εξυπηρετητή [μόνο RPSL]\n"
"-R επιβολή εμφάνισης τοπικού αντιγράφου του " "-F γρήγορη ακατέργαστη έξοδος (υπονοεί -r)\n"
"αντικειμένου επιθήματος ακόμα και αν περιέχει " "-h ΣΥΣΤΗΜΑ σύνδεση στον εξυπηρετητή ΣΎΣΤΗΜΑ\n"
"αναφορές\n" "-p ΘΥΡΑ σύνδεση στη ΘΥΡΑ\n"
"-S πες στον εξυπηρετητή να αποφύγει τη " "-H απόκρυψη του νομικού εγγράφου αποποίησης ευθύνης\n"
"συντακτική ζάχαρη\n" " --verbose εξήγηση του τί συμβαίνει\n"
"-s ΠΗΓΉ[,ΠΗΓΉ]... αναζήτηση στη βάση από την ΠΗΓΉ\n" " --help εμφάνιση αυτής της βοήθειας και έξοδος\n"
"-T ΕΊΔΟΣ[,ΕΊΔΟΣ]... αναζήτηση μόνο αντικειμένου του ΕΊΔΟΥΣ\n" " --version εμφάνιση της έκδοσης και έξοδος\n"
"-t ΕΊΔΟΣ αναζητά ένα πρότυπο για το αντικείμενο του "
"ΕΊΔΟΥΣ ('all' για για εμφάνιση λίστας)\n"
"-v ΕΊΔΟΣ αναζητά περιφραστικό πρότυπο για το αντικείμενο "
"του ΕΊΔΟΥΣ\n"
"-d επιστροφή και των αντιστρόφων αντικειμένων DNS\n"
" απόδοσης ευθύνης [μόνο RPSL]\n"
"-K επιστροφή μόνο των πρωταρχικών κλειδιών [μόνο RPSL]\n"
"-V --verbose εξήγηση του τί συμβαίνει\n"
" --help εμφάνιση αυτής της βοήθειας και έξοδος\n"
" --version εμφάνιση της έκδοσης και έξοδος\n"
#: ../mkpasswd.c:55 #: ../mkpasswd.c:55
msgid "\tstandard 56 bit DES-based crypt(3)" msgid "\tstandard 56 bit DES-based crypt(3)"
msgstr "" msgstr "\tκαθεριερωμένη 56 bit με βάση το DES crypt(3)"
#: ../mkpasswd.c:96 #: ../mkpasswd.c:96
#, c-format #, c-format
msgid "Invalid hash type '%s'.\n" msgid "Invalid hash type '%s'.\n"
msgstr "" msgstr "Άκυρος τύπος hash '%s'.\n"
#: ../mkpasswd.c:105 #: ../mkpasswd.c:105
#, c-format #, c-format
msgid "Invalid number '%s'.\n" msgid "Invalid number '%s'.\n"
msgstr "" msgstr "Μη αποδεκτό νούμερο '%s'.\n"
#: ../mkpasswd.c:123 #: ../mkpasswd.c:123
#, c-format #, c-format
msgid "Try '%s --help' for more information.\n" msgid "Try '%s --help' for more information.\n"
msgstr "" msgstr "Προσπάθησε '%s --help' για περισσότερες πληροφορίες.\n"
#: ../mkpasswd.c:152 #: ../mkpasswd.c:152
#, c-format #, c-format
msgid "Wrong salt length: %d byte(s) when %d expected.\n" msgid "Wrong salt length: %d byte(s) when %d expected.\n"
msgstr "" msgstr "Εσφαλμένο μήκος salt : %d byte(s) όταν αναμένεται %d .\n"
#: ../mkpasswd.c:158 #: ../mkpasswd.c:158
#, c-format #, c-format
msgid "Illegal salt character '%c'.\n" msgid "Illegal salt character '%c'.\n"
msgstr "" msgstr "Μη αποδεκτός χαρακτήρας salt '%c'.\n"
#: ../mkpasswd.c:172 ../mkpasswd.c:199 #: ../mkpasswd.c:172
#: ../mkpasswd.c:199
msgid "Password: " msgid "Password: "
msgstr "" msgstr "Συνθηματικό: "
#: ../mkpasswd.c:193 #: ../mkpasswd.c:193
#, c-format #, c-format
msgid "Illegal password character '0x%hhx'.\n" msgid "Illegal password character '0x%hhx'.\n"
msgstr "" msgstr "Μη αποδεκτός χαρακτήρας συνθηματικού '0x%hhx'.\n"
#: ../mkpasswd.c:230 #: ../mkpasswd.c:230
msgid "" msgid ""
@ -268,6 +252,9 @@ msgid ""
"Crypts the PASSWORD using crypt(3).\n" "Crypts the PASSWORD using crypt(3).\n"
"\n" "\n"
msgstr "" msgstr ""
"Χρήση: mkpasswd [ΕΠΙΛΟΓΕΣ]... [ΣΥΝΘΗΜΑΤΙΚΟ [SALT]]\n"
"Κρυπτογραφεί το ΣΥΝΘΗΜΑΤΙΚΟ χρησιμοποιώντας το crypt(3).\n"
"\n"
#: ../mkpasswd.c:233 #: ../mkpasswd.c:233
#, c-format #, c-format
@ -286,21 +273,21 @@ msgid ""
"\n" "\n"
"Report bugs to %s.\n" "Report bugs to %s.\n"
msgstr "" msgstr ""
" -H, --hash=ΤΥΠΟΣ επιλογή hash ΤΥΠΟΣ\n"
" -S, --salt=SALT χρήση του συγκεκριμένου SALT\n"
" -P, --password-fd=NUM ανάγνωση του συνθηματικού από αρχείο περιγραφής NUM\n"
" αντί από το /dev/tty\n"
" -s, --stdin σαν το --password-fd=0\n"
" -h, --help εμφάνιση αυτής της βοήθειας και έξοδος\n"
" -V, --version εμφάνιση πληροφοριών έκδοσης και έξοδος\n"
"\n"
"Αν λείπει το ΣΥΝΘΗΜΑΤΙΚΟ τότε γίνεται αλληλεπιδραστική ερώτηση.\n"
"Αν κανένα SALT δεν έχει προσδιοριστεί, τότε δημιουργείται ένα τυχαίο.\n"
"Αν λείπει ο ΤΥΠΟΣ τότε τυπώνονται διαθέσιμοι αλγόριθμοι.\n"
"\n"
"Αναφέρατε σφάλματα στο %s.\n"
#: ../mkpasswd.c:260 #: ../mkpasswd.c:260
msgid "Available algorithms:\n" msgid "Available algorithms:\n"
msgstr "" msgstr "Διαθέσιμοι αλγόριθμοι:\n"
#~ msgid ""
#~ "I don't know where this IP has been delegated.\n"
#~ "I'll try ARIN and hope for the best..."
#~ msgstr ""
#~ "Δε γνωρίζε σε ποιον έχει αποδοθεί ευθύνη για αυτήν την διεύθυνση IP.\n"
#~ "Θα δοκιμάσω το ARIN και εύχομε για το καλύτερο..."
#~ msgid "I guess it's a netblock name but I don't know where to look it up."
#~ msgstr ""
#~ "Πιστεύω ότι είναι όνομα μπλοκ δικτύου αλλά δε γνωρίζω που να το αναζητήσω."
#~ msgid "I guess it's a domain but I don't know where to look it up."
#~ msgstr "Πιστεύω ότι είναι ένα επίθημα αλλά δε γνωρίζω που να το αναζητήσω."

View File

@ -1,17 +1,17 @@
# cokolwi3k. whois.pot. # cokolwi3k. whois.pot.
# Micha³ 'CeFeK' Nazarewicz <cefek@career.pl>, 1999 # Micha³ 'CeFeK' Nazarewicz <cefek@career.pl>, 1999
# Przemys³aw Knycz <djrzulf@pld.org.pl>, 2003 # Przemys³aw Knycz <djrzulf@pld.org.pl>, 2003
# Jakub Bogusz <qboosh@pld.org.pl>, 2003 # Jakub Bogusz <qboosh@pld-linux.org>, 2003
# #
# BUG: xxx # BUG: xxx
# #
msgid "" msgid ""
msgstr "" msgstr ""
"Project-Id-Version: whois 4.6.5\n" "Project-Id-Version: whois 4.6.9\n"
"Report-Msgid-Bugs-To: \n" "Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2003-12-01 18:31+0100\n" "POT-Creation-Date: 2003-12-01 18:31+0100\n"
"PO-Revision-Date: 2003-05-10 08:40+0200\n" "PO-Revision-Date: 2003-12-02 20:41+0100\n"
"Last-Translator: Jakub Bogusz <qboosh@pld.org.pl>\n" "Last-Translator: Jakub Bogusz <qboosh@pld-linux.org>\n"
"Language-Team: Polish <translation-team-pl@lists.sourceforge.net>\n" "Language-Team: Polish <translation-team-pl@lists.sourceforge.net>\n"
"MIME-Version: 1.0\n" "MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=iso-8859-2\n" "Content-Type: text/plain; charset=iso-8859-2\n"
@ -96,6 +96,9 @@ msgid ""
"Querying for the IPv4 endpoint %s of a 6to4 IPv6 address.\n" "Querying for the IPv4 endpoint %s of a 6to4 IPv6 address.\n"
"\n" "\n"
msgstr "" msgstr ""
"\n"
"Pytanie o zakoñczenie IPv4 %s adresu IPv6 typu 6to4.\n"
"\n"
#: ../whois.c:249 #: ../whois.c:249
#, c-format #, c-format

View File

@ -54,7 +54,10 @@ server becomes \fIwhois.networksolutions.com\fP.
.P .P
When querying \fIwhois.nic.mil\fP for AS numbers, the program will When querying \fIwhois.nic.mil\fP for AS numbers, the program will
automatically convert the request in the appropriate format, inserting automatically convert the request in the appropriate format, inserting
a space after the string "AS". a space after the string \fIAS\fP.
.P
When querying \fIwhois.denic.de\fP for domain names, the program will
automatically add the flags \fI-T dn,ace -C US-ASCII\fP.
.P .P
When querying \fIwhois.corenic.net\fP, machine readable output is requested. When querying \fIwhois.corenic.net\fP, machine readable output is requested.
.P .P

371
whois.c
View File

@ -37,9 +37,9 @@
int sockfd, verb = 0; int sockfd, verb = 0;
#ifdef ALWAYS_HIDE_DISCL #ifdef ALWAYS_HIDE_DISCL
int hide_discl = 0; int hide_discl = HIDE_UNSTARTED;
#else #else
int hide_discl = 2; int hide_discl = HIDE_DISABLED;
#endif #endif
char *client_tag = (char *)IDSTRING; char *client_tag = (char *)IDSTRING;
@ -63,7 +63,7 @@ int main(int argc, char *argv[])
{ {
int ch, nopar = 0; int ch, nopar = 0;
const char *server = NULL, *port = NULL; const char *server = NULL, *port = NULL;
char *p, *q, *qstring, fstring[64] = "\0"; char *p, *qstring, fstring[64] = "\0";
#ifdef ENABLE_NLS #ifdef ENABLE_NLS
setlocale(LC_ALL, ""); setlocale(LC_ALL, "");
@ -89,19 +89,15 @@ int main(int argc, char *argv[])
/* program flags */ /* program flags */
switch (ch) { switch (ch) {
case 'h': case 'h':
server = q = malloc(strlen(optarg) + 1); server = strdup(optarg);
for (p = optarg; *p && *p != ':'; *q++ = tolower(*p++));
if (*p == ':')
port = p + 1;
*q = '\0';
break; break;
case 'V': case 'V':
client_tag = optarg; client_tag = optarg;
case 'H': case 'H':
hide_discl = 0; /* enable disclaimers hiding */ hide_discl = HIDE_UNSTARTED; /* enable disclaimers hiding */
break; break;
case 'p': case 'p':
port = optarg; port = strdup(optarg);
break; break;
case 2: case 2:
verb = 1; verb = 1;
@ -143,9 +139,16 @@ int main(int argc, char *argv[])
} }
} }
signal(SIGTERM, sighandler);
signal(SIGINT, sighandler);
signal(SIGALRM, alarm_handler);
if (getenv("WHOIS_HIDE"))
hide_discl = HIDE_UNSTARTED;
/* -v or -t has been used */ /* -v or -t has been used */
if (!server && !*qstring) if (!server && !*qstring)
server = "whois.ripe.net"; server = strdup("whois.ripe.net");
#ifdef CONFIG_FILE #ifdef CONFIG_FILE
if (!server) { if (!server) {
@ -155,11 +158,6 @@ int main(int argc, char *argv[])
} }
#endif #endif
signal(SIGTERM, sighandler);
signal(SIGINT, sighandler);
signal(SIGALRM, alarm_handler);
alarm(60);
if (!server) { if (!server) {
char *tmp; char *tmp;
@ -168,101 +166,100 @@ int main(int argc, char *argv[])
qstring = tmp; qstring = tmp;
server = whichwhois(qstring); server = whichwhois(qstring);
retry:
switch (server[0]) {
case 0:
if (!(server = getenv("WHOIS_SERVER")))
server = DEFAULTSERVER;
if (verb)
printf(_("Using default server %s.\n"), server);
break;
case 1:
puts(_("This TLD has no whois server, but you can access the "
"whois database at"));
case 2:
puts(server + 1);
exit(0);
case 3:
puts(_("This TLD has no whois server."));
exit(0);
case 4:
if (verb)
puts(_("Connecting to whois.crsnic.net."));
sockfd = openconn("whois.crsnic.net", NULL);
server = query_crsnic(sockfd, qstring);
close(sockfd);
if (!server)
exit(0);
printf(_("\nFound a referral to %s.\n\n"), server);
alarm(60);
break;
case 9:
if (verb)
puts(_("Connecting to whois.nic.cc."));
sockfd = openconn("whois.nic.cc", NULL);
server = query_crsnic(sockfd, qstring);
close(sockfd);
if (!server)
exit(0);
printf(_("\nFound a referral to %s.\n\n"), server);
alarm(60);
break;
case 7:
if (verb)
puts(_("Connecting to whois.publicinterestregistry.net."));
sockfd = openconn("whois.publicinterestregistry.net", NULL);
server = query_pir(sockfd, qstring);
close(sockfd);
if (!server)
exit(0);
printf(_("\nFound referral to %s.\n\n"), server);
alarm(60);
break;
case 5:
puts(_("No whois server is known for this kind of object."));
exit(0);
case 6:
puts(_("Unknown AS number or IP network. Please upgrade this program."));
exit(0);
case 0x0A:
{
char *tmp6 = convert_6to4(qstring);
free(qstring);
qstring = tmp6;
printf(_("\nQuerying for the IPv4 endpoint %s of a 6to4 IPv6 address.\n\n"), qstring);
server = whichwhois(qstring);
/*
* This code sucks enough that I can afford to use goto...
* Some day whichwhois() and queryformat() will be merged
* and will return a struct with status code, server name
* and query string.
*/
goto retry;
}
default:
if (verb)
printf(_("Using server %s.\n"), server);
}
} }
if (getenv("WHOIS_HIDE")) handle_query(server, port, qstring, fstring);
hide_discl = 0;
exit(0);
}
/* server may be a server name from the command line, a server name got
* from whichwhois or an encoded command/message from whichwhois.
* server and port are allocated with malloc.
*/
const char *handle_query(const char *hserver, const char *hport,
const char *qstring, const char *fstring)
{
const char *server, *port = NULL;
char *p;
if (hport) {
server = strdup(hserver);
port = strdup(hport);
} else
split_server_port(hserver, &server, &port);
switch (server[0]) {
case 0:
if (!(server = getenv("WHOIS_SERVER")))
server = DEFAULTSERVER;
break;
case 1:
puts(_("This TLD has no whois server, but you can access the "
"whois database at"));
puts(server + 1);
return NULL;
case 2:
puts(server + 1);
return NULL;
case 3:
puts(_("This TLD has no whois server."));
return NULL;
case 5:
puts(_("No whois server is known for this kind of object."));
return NULL;
case 6:
puts(_("Unknown AS number or IP network. Please upgrade this program."));
return NULL;
case 4:
if (verb)
puts(_("Connecting to whois.crsnic.net."));
sockfd = openconn("whois.crsnic.net", NULL);
server = query_crsnic(sockfd, qstring);
break;
case 7:
if (verb)
puts(_("Connecting to whois.publicinterestregistry.net."));
sockfd = openconn("whois.publicinterestregistry.net", NULL);
server = query_pir(sockfd, qstring);
break;
case 9:
if (verb)
puts(_("Connecting to whois.nic.cc."));
sockfd = openconn("whois.nic.cc", NULL);
server = query_crsnic(sockfd, qstring);
break;
case 0x0A:
p = convert_6to4(qstring);
printf(_("\nQuerying for the IPv4 endpoint %s of a 6to4 IPv6 address.\n\n"), p);
server = whichwhois(p);
qstring = p; /* XXX leak */
break;
default:
break;
}
if (!server)
return NULL;
p = queryformat(server, fstring, qstring); p = queryformat(server, fstring, qstring);
if (verb) if (verb) {
printf(_("Using server %s.\n"), server);
printf(_("Query string: \"%s\"\n\n"), p); printf(_("Query string: \"%s\"\n\n"), p);
strcat(p, "\r\n"); }
sockfd = openconn(server, port); sockfd = openconn(server, port);
/* strcat(p, "\r\n");
* Now we are connected and the query is supposed to complete quickly. server = do_query(sockfd, p);
* This will help people who run whois ... | less
*/
alarm(0);
do_query(sockfd, p);
exit(0); /* recursion is fun */
if (server) {
printf(_("\n\nFound a referral to %s.\n\n"), server);
handle_query(server, NULL, qstring, fstring);
}
return NULL;
} }
#ifdef CONFIG_FILE #ifdef CONFIG_FILE
@ -271,9 +268,6 @@ const char *match_config_file(const char *s)
FILE *fp; FILE *fp;
char buf[512]; char buf[512];
static const char delim[] = " \t"; static const char delim[] = " \t";
#ifdef HAVE_REGEXEC
regex_t re;
#endif
if ((fp = fopen(CONFIG_FILE, "r")) == NULL) { if ((fp = fopen(CONFIG_FILE, "r")) == NULL) {
if (errno != ENOENT) if (errno != ENOENT)
@ -286,6 +280,7 @@ const char *match_config_file(const char *s)
const char *pattern, *server; const char *pattern, *server;
#ifdef HAVE_REGEXEC #ifdef HAVE_REGEXEC
int i; int i;
regex_t re;
#endif #endif
for (p = buf; *p; p++) for (p = buf; *p; p++)
@ -336,6 +331,9 @@ const char *match_config_file(const char *s)
} }
#endif #endif
/* Parses an user-supplied string and tries to guess the right whois server.
* Returns a statically allocated buffer.
*/
const char *whichwhois(const char *s) const char *whichwhois(const char *s)
{ {
unsigned long ip; unsigned long ip;
@ -424,9 +422,8 @@ char *queryformat(const char *server, const char *flags, const char *query)
char *buf; char *buf;
int i, isripe = 0; int i, isripe = 0;
/* +2 for \r\n; +1 for NULL */ /* 64 bytes reserved for server-specific flags added later */
buf = malloc(strlen(flags) + strlen(query) + strlen(client_tag) + 4 buf = malloc(strlen(flags) + strlen(query) + strlen(client_tag) + 64);
+ 2 + 1);
*buf = '\0'; *buf = '\0';
for (i = 0; ripe_servers[i]; i++) for (i = 0; ripe_servers[i]; i++)
if (strcmp(server, ripe_servers[i]) == 0) { if (strcmp(server, ripe_servers[i]) == 0) {
@ -450,10 +447,17 @@ char *queryformat(const char *server, const char *flags, const char *query)
puts(_("Warning: RIPE flags used with a traditional server.")); puts(_("Warning: RIPE flags used with a traditional server."));
strcat(buf, flags); strcat(buf, flags);
} }
/* FIXME: /e is not applied to .JP ASN */
if (!isripe && (strcmp(server, "whois.nic.mil") == 0 || /* why, oh why DENIC had to make whois "user friendly"?
* I hope that adding -T dn,ace will not break some queries.
*/
if (isripe && strcmp(server, "whois.denic.de") == 0 && domcmp(query, ".de")
&& !strchr(query, ' '))
sprintf(buf, "-T dn,ace -C US-ASCII %s", query);
else if (!isripe && (strcmp(server, "whois.nic.mil") == 0 ||
strcmp(server, "whois.nic.ad.jp") == 0) && strcmp(server, "whois.nic.ad.jp") == 0) &&
strncasecmp(query, "AS", 2) == 0 && isasciidigit(query[2])) strncasecmp(query, "AS", 2) == 0 && isasciidigit(query[2]))
/* FIXME: /e is not applied to .JP ASN */
sprintf(buf, "AS %s", query + 2); /* fix query for DDN */ sprintf(buf, "AS %s", query + 2); /* fix query for DDN */
else if (!isripe && strcmp(server, "whois.nic.ad.jp") == 0) { else if (!isripe && strcmp(server, "whois.nic.ad.jp") == 0) {
char *lang = getenv("LANG"); /* not a perfect check, but... */ char *lang = getenv("LANG"); /* not a perfect check, but... */
@ -466,11 +470,50 @@ char *queryformat(const char *server, const char *flags, const char *query)
return buf; return buf;
} }
void do_query(const int sock, const char *query) /* the first parameter contains the state of this simple state machine:
* HIDE_DISABLED: hidden text finished
* HIDE_UNSTARTED: hidden text not seen yet
* >= 0: currently hiding message hide_strings[*hiding]
*/
int hide_line(int *hiding, const char *const line)
{
int i;
if (*hiding == HIDE_DISABLED) {
return 0;
} else if (*hiding == HIDE_UNSTARTED) { /* looking for smtng to hide */
for (i = 0; hide_strings[i] != NULL; i += 2) {
if (strncmp(line, hide_strings[i], strlen(hide_strings[i])) == 0) {
*hiding = i; /* start hiding */
return 1; /* and hide this line */
}
}
return 0; /* don't hide this line */
} else if (*hiding > HIDE_UNSTARTED) { /* hiding something */
if (strncmp(line, hide_strings[*hiding + 1],
strlen(hide_strings[*hiding + 1])) == 0) {
*hiding = HIDE_DISABLED; /* stop hiding */
return 1; /* but hide the last line */
}
return 1; /* we are hiding, so do it */
}
#if 0
/* XXX */
/* no match, the action depends on the state stored in *hiding */
if (*hiding > HIDE_UNSTARTED)
return 1;
else
#endif
return 0;
}
/* returns a string which should be freed by the caller, or NULL */
const char *do_query(const int sock, const char *query)
{ {
char buf[2000], *p; char buf[2000], *p;
FILE *fi; FILE *fi;
int i = 0, hide = hide_discl; int hide = hide_discl;
char *referral_server = NULL;
fi = fdopen(sock, "r"); fi = fdopen(sock, "r");
if (write(sock, query, strlen(query)) < 0) if (write(sock, query, strlen(query)) < 0)
@ -479,39 +522,43 @@ void do_query(const int sock, const char *query)
if (shutdown(sock, 1) < 0) if (shutdown(sock, 1) < 0)
err_sys("shutdown"); err_sys("shutdown");
*/ */
while (fgets(buf, sizeof(buf), fi)) { while (fgets(buf, sizeof(buf), fi)) {
if (hide == 1) { /* 6bone-style referral:
if (strncmp(buf, hide_strings[i+1], strlen(hide_strings[i+1]))==0) * % referto: whois -h whois.arin.net -p 43 as 1
hide = 2; /* stop hiding */ */
continue; /* hide this line */ if (!referral_server && strncmp(buf, "% referto:", 10) == 0) {
}
if (hide == 0) {
for (i = 0; hide_strings[i] != NULL; i += 2) {
if (strncmp(buf, hide_strings[i], strlen(hide_strings[i]))==0){
hide = 1; /* start hiding */
break;
}
}
if (hide == 1)
continue; /* hide the first line */
}
#ifdef EXT_6BONE
/* % referto: whois -h whois.arin.net -p 43 as 1 */
if (strncmp(buf, "% referto:", 10) == 0) {
char nh[256], np[16], nq[1024]; char nh[256], np[16], nq[1024];
if (sscanf(buf, REFERTO_FORMAT, nh, np, nq) == 3) { if (sscanf(buf, REFERTO_FORMAT, nh, np, nq) == 3) {
int fd; /* XXX we are ignoring the new query string */
referral_server = malloc(300);
if (verb) sprintf(referral_server, "%s:%s", nh, np);
printf(_("Detected referral to %s on %s.\n"), nq, nh);
strcat(nq, "\r\n");
fd = openconn(nh, np);
do_query(fd, nq);
continue;
} }
} }
#endif
/* ARIN referrals:
* ReferralServer: rwhois://rwhois.fuse.net:4321/
* ReferralServer: whois://whois.ripe.net
*/
if (!referral_server && strncmp(buf, "ReferralServer:", 15) == 0) {
char *q;
q = strstr(buf, "rwhois://");
if ((q = strstr(buf, "rwhois://")))
referral_server = strdup(q + 9);
else if ((q = strstr(buf, "whois://")))
referral_server = strdup(q + 8);
if (referral_server) {
if ((q = strchr(referral_server, '/'))
|| (q = strchr(referral_server, '\n')))
*q = '\0';
}
}
if (hide_line(&hide, buf))
continue;
for (p = buf; *p && *p != '\r' && *p != '\n'; p++); for (p = buf; *p && *p != '\r' && *p != '\n'; p++);
*p = '\0'; *p = '\0';
fprintf(stdout, "%s\n", buf); fprintf(stdout, "%s\n", buf);
@ -520,15 +567,18 @@ void do_query(const int sock, const char *query)
err_sys("fgets"); err_sys("fgets");
fclose(fi); fclose(fi);
if (hide == 1) if (hide > HIDE_UNSTARTED)
err_quit(_("Catastrophic error: disclaimer text has been changed.\n" err_quit(_("Catastrophic error: disclaimer text has been changed.\n"
"Please upgrade this program.\n")); "Please upgrade this program.\n"));
return referral_server;
} }
const char *query_crsnic(const int sock, const char *query) const char *query_crsnic(const int sock, const char *query)
{ {
char *temp, buf[2000], *ret = NULL; char *temp, buf[2000], *ret = NULL;
FILE *fi; FILE *fi;
int hide = hide_discl;
int state = 0; int state = 0;
temp = malloc(strlen(query) + 1 + 2 + 1); temp = malloc(strlen(query) + 1 + 2 + 1);
@ -557,8 +607,8 @@ const char *query_crsnic(const int sock, const char *query)
} }
/* the output must not be hidden or no data will be shown for /* the output must not be hidden or no data will be shown for
host records and not-existing domains */ host records and not-existing domains */
/* XXX feel free to send a patch to hide the long disclaimer */ if (!hide_line(&hide, buf))
fputs(buf, stdout); fputs(buf, stdout);
} }
if (ferror(fi)) if (ferror(fi))
err_sys("fgets"); err_sys("fgets");
@ -571,6 +621,7 @@ const char *query_pir(const int sock, const char *query)
{ {
char *temp, buf[2000], *ret = NULL; char *temp, buf[2000], *ret = NULL;
FILE *fi; FILE *fi;
int hide = hide_discl;
int state = 0; int state = 0;
temp = malloc(strlen(query) + 5 + 2 + 1); temp = malloc(strlen(query) + 5 + 2 + 1);
@ -599,7 +650,8 @@ const char *query_pir(const int sock, const char *query)
*q = '\0'; *q = '\0';
state = 2; state = 2;
} }
fputs(buf, stdout); if (!hide_line(&hide, buf))
fputs(buf, stdout);
} }
if (ferror(fi)) if (ferror(fi))
err_sys("fgets"); err_sys("fgets");
@ -620,6 +672,8 @@ int openconn(const char *server, const char *port)
struct sockaddr_in saddr; struct sockaddr_in saddr;
#endif #endif
alarm(60);
#ifdef HAVE_GETADDRINFO #ifdef HAVE_GETADDRINFO
memset(&hints, 0, sizeof(struct addrinfo)); memset(&hints, 0, sizeof(struct addrinfo));
hints.ai_family = AF_UNSPEC; hints.ai_family = AF_UNSPEC;
@ -656,6 +710,13 @@ int openconn(const char *server, const char *port)
if (connect(fd, (struct sockaddr *)&saddr, sizeof(saddr)) < 0) if (connect(fd, (struct sockaddr *)&saddr, sizeof(saddr)) < 0)
err_sys("connect"); err_sys("connect");
#endif #endif
/*
* Now we are connected and the query is supposed to complete quickly.
* This will help people who run whois ... | less
*/
alarm(0);
return fd; return fd;
} }
@ -696,15 +757,31 @@ char *normalize_domain(const char *dom)
*p = '\0'; *p = '\0';
#ifdef HAVE_LIBIDN #ifdef HAVE_LIBIDN
if (idna_to_ascii_from_locale(ret, &p, 0, 0) != IDNA_SUCCESS) if (idna_to_ascii_lz(ret, &p, 0) != IDNA_SUCCESS) {
free(ret);
return ret; return ret;
}
free(ret); free(ret);
ret = p; ret = p;
#endif #endif
return ret; return ret;
} }
/* server and port have to be freed by the caller */
void split_server_port(const char *const input,
const char **server, const char **port) {
char *q, *p;
*server = q = strdup(input);
for (p = q; *p && *p != ':'; *q++ = tolower(*p++));
if (*p == ':')
*port = strdup(p + 1);
*p = '\0';
}
char *convert_6to4(const char *s) char *convert_6to4(const char *s)
{ {
char *new = malloc(sizeof("255.255.255.255")); char *new = malloc(sizeof("255.255.255.255"));
@ -719,11 +796,13 @@ char *convert_6to4(const char *s)
unsigned long myinet_aton(const char *s) unsigned long myinet_aton(const char *s)
{ {
int a, b, c, d; unsigned long a, b, c, d;
if (!s) if (!s)
return 0; return 0;
if (sscanf(s, "%d.%d.%d.%d", &a, &b, &c, &d) != 4) if (sscanf(s, "%lu.%lu.%lu.%lu", &a, &b, &c, &d) != 4)
return 0;
if (a > 255 || b > 255 || c > 255 || d > 255)
return 0; return 0;
return (a << 24) + (b << 16) + (c << 8) + d; return (a << 24) + (b << 16) + (c << 8) + d;
} }

10
whois.h
View File

@ -5,12 +5,16 @@
/* Do *NOT* change it if you don't know what you are doing! */ /* Do *NOT* change it if you don't know what you are doing! */
#define IDSTRING "Md4.6" #define IDSTRING "Md4.6"
#define HIDE_DISABLED -2
#define HIDE_UNSTARTED -1
/* prototypes */ /* prototypes */
const char *whichwhois(const char *); const char *whichwhois(const char *);
const char *match_config_file(const char *); const char *match_config_file(const char *);
const char *whereas(const unsigned short); const char *whereas(const unsigned short);
char *queryformat(const char *, const char *, const char *); char *queryformat(const char *, const char *, const char *);
void do_query(const int, const char *); int hide_line(int *hiding, const char *const line);
const char *do_query(const int, const char *);
const char *query_crsnic(const int, const char *); const char *query_crsnic(const int, const char *);
const char *query_pir(const int, const char *); const char *query_pir(const int, const char *);
int openconn(const char *, const char *); int openconn(const char *, const char *);
@ -23,6 +27,10 @@ int domcmp(const char *, const char *);
int domfind(const char *, const char *[]); int domfind(const char *, const char *[]);
char *normalize_domain(const char *); char *normalize_domain(const char *);
char *convert_6to4(const char *); char *convert_6to4(const char *);
const char *handle_query(const char *server, const char *port,
const char *qstring, const char *fstring);
void split_server_port(const char *const input, const char **server,
const char **port);
void err_quit(const char *,...); void err_quit(const char *,...);
void err_sys(const char *,...); void err_sys(const char *,...);

View File

@ -1,6 +1,6 @@
Summary: Enhanced WHOIS client Summary: Enhanced WHOIS client
Name: whois Name: whois
Version: 4.6.8 Version: 4.6.11
Release: 1 Release: 1
License: GPL License: GPL
Vendor: Marco d'Itri <md@linux.it> Vendor: Marco d'Itri <md@linux.it>