summaryrefslogtreecommitdiff
path: root/net/irrtoolset-nox11/patches/patch-dj
diff options
context:
space:
mode:
Diffstat (limited to 'net/irrtoolset-nox11/patches/patch-dj')
-rw-r--r--net/irrtoolset-nox11/patches/patch-dj88
1 files changed, 88 insertions, 0 deletions
diff --git a/net/irrtoolset-nox11/patches/patch-dj b/net/irrtoolset-nox11/patches/patch-dj
new file mode 100644
index 00000000000..b7d79f7d45b
--- /dev/null
+++ b/net/irrtoolset-nox11/patches/patch-dj
@@ -0,0 +1,88 @@
+$NetBSD: patch-dj,v 1.1 2007/12/31 09:15:15 spz Exp $
+
+--- src/irr/rawhoisc.cc.orig 2007-02-13 01:25:01.000000000 +0100
++++ src/irr/rawhoisc.cc
+@@ -517,7 +517,7 @@ bool RAWhoisClient::getAutNum(char *as,
+ }
+
+ bool RAWhoisClient::getSet(SymID sname, char *clss, char *&text, int &len) {
+- len = QueryResponse(text, "!m%s,%s", clss, sname);
++ len = QueryResponse(text, "!i%s,1", sname);
+ return len;
+ }
+
+@@ -557,26 +557,58 @@ bool RAWhoisClient::expandAS(char *as,
+ }
+
+ bool RAWhoisClient::expandASSet(SymID asset, SetOfUInt *result) {
+- char *response;
+- if (!QueryResponse(response, "!i%s,1", asset)) return false;
+- for (char *word = strtok(response, " \t\n");
+- word;
+- word = strtok(NULL, " \t\n"))
+- result->add(atoi(word+2));
+- if (response)
+- delete [] response;
++ Set *set = NULL;
++
++ if (queryCache(asset, set)) {
++ AttrGenericIterator<Item> itr(set, "members");
++ for (Item *pt = itr.first(); pt; pt = itr.next())
++ if (typeid(*pt) == typeid(ItemASNAME)) { // ASNAME (aka as-set)
++ const SetOfUInt *tmp = IRR::expandASSet(((ItemASNAME *)pt)->name);
++ if (tmp)
++ *result |= *(SetOfUInt *) tmp;
++ } else if (typeid(*pt) == typeid(ItemASNO)) {
++ result->add(((ItemASNO *)pt)->asno);
++ } else {
++ cerr << "WARNING: irrd/rawhoisd cannot resolve as-set " << asset << "!";
++ cerr << "Unknown element found in as-set definition!\n";
++ }
++ if (set != NULL) free (set);
++ } else {
++ char *text;
++ int len;
++ if (getSet(asset, "as-set", text, len)) {
++ for (char *word = strtok(text, " \t\n"); word; word = strtok(NULL, "\t\n"))
++ result->add(atoi(word+2));
++ }
++ if (text != NULL) free(text);
++ }
++
+ return true;
+ }
+
+ bool RAWhoisClient::expandRSSet(SymID rsset, MPPrefixRanges *result) {
+- char *response;
+- if (!QueryResponse(response, "!i%s,1", rsset)) return false;
+- for (char *word = strtok(response, " \t\n");
+- word;
+- word = strtok(NULL, " \t\n"))
+- result->push_back(MPPrefix(word));
+- if (response)
+- delete [] response;
++ Set *set = NULL;
++
++ if (queryCache(rsset, set)) {
++ AttrGenericIterator<Item> itr(set, "members");
++ for (Item *pt = itr.first(); pt; pt = itr.next()) {
++ expandItem(pt, result);
++ }
++ AttrGenericIterator<Item> itr1(set, "mp-members");
++ for (Item *pt = itr1.first(); pt; pt = itr1.next()) {
++ expandItem(pt, result);
++ }
++ if (set != NULL) free (set);
++ } else {
++ char *text;
++ int len;
++ if (getSet(rsset, "route-set", text, len)) {
++ for (char *word = strtok(text, " \t\n"); word; word = strtok(NULL, "\t\n"))
++ result->push_back(MPPrefix(word));
++ }
++ if (text != NULL) free(text);
++ }
++
+ return true;
+ }
+