*/
/*
* This file is
- * Copyright (C) 1999 Ian Jackson <ian@davenant.greenend.org.uk>
+ * Copyright (C) 1999-2000 Ian Jackson <ian@davenant.greenend.org.uk>
*
* It is part of adns, which is
- * Copyright (C) 1997-1999 Ian Jackson <ian@davenant.greenend.org.uk>
+ * Copyright (C) 1997-2000 Ian Jackson <ian@davenant.greenend.org.uk>
* Copyright (C) 1999 Tony Finch <dot@dotat.at>
*
* This program is free software; you can redistribute it and/or modify
#include <assert.h>
#include <ctype.h>
-#include <sys/fcntl.h>
+#include <sys/types.h>
+#include <unistd.h>
+#include <fcntl.h>
-#include "adns.h"
#include "config.h"
+#include "adns.h"
#include "dlist.h"
#include "tvarith.h"
struct treething *addr;
};
-static int bracket, forever;
-static unsigned long timeout=100;
+static int bracket, forever, address;
+static unsigned long timeout= 1000;
static adns_rrtype rrt= adns_r_ptr;
static int outblocked, inputeof;
static void usage(void) {
if (printf("usage: adnsresfilter [<options ...>]\n"
" adnsresfilter -h|--help\n"
- "options: -b|--brackets\n"
- " -w|--wait\n"
- " -t<timeout>|--timeout <milliseconds>\n"
- " -u|--unchecked\n")
+ "options: -t<milliseconds>|--timeout <milliseconds>\n"
+ " -w|--wait (always wait for queries to time out or fail)\n"
+ " -b|--brackets (require [...] around IP addresses)\n"
+ " -a|--address (always include [address] in output)\n"
+ " -u|--unchecked (do not forward map for checking)\n"
+ "Timeout is the maximum amount to delay any particular bit of output for.\n"
+ "Lookups will go on in the background. Default timeout = 100 (ms).\n")
== EOF) outputerr();
}
rrt= adns_r_ptr_raw;
} else if (!strcmp(arg,"--wait")) {
forever= 1;
+ } else if (!strcmp(arg,"--address")) {
+ address= 1;
} else if (!strcmp(arg,"--help")) {
usage(); quit(0);
} else if (!strcmp(arg,"--timeout")) {
case 'w':
forever= 1;
break;
+ case 'a':
+ address= 1;
+ break;
case 'h':
usage();
quit(0);
}
static void replacetextwithname(struct outqueuenode *entry) {
- free(entry->buffer);
- entry->buffer= 0;
- entry->textp= entry->addr->ans->rrs.str[0];
- entry->textlen= strlen(entry->textp);
+ char *name, *newbuf;
+ int namelen, newlen;
+
+ name= entry->addr->ans->rrs.str[0];
+ namelen= strlen(name);
+ if (!address) {
+ free(entry->buffer);
+ entry->buffer= 0;
+ entry->textp= name;
+ entry->textlen= namelen;
+ } else {
+ newlen= entry->textlen + namelen + (bracket ? 0 : 2);
+ newbuf= xmalloc(newlen + 1);
+ sprintf(newbuf, bracket ? "%s%.*s" : "%s[%.*s]", name, entry->textlen, entry->textp);
+ free(entry->buffer);
+ entry->buffer= entry->textp= newbuf;
+ entry->textlen= newlen;
+ }
}
static void checkadnsqueries(void) {
if (!bracket && !isalnum(c)) startaddr();
}
}
- if (cbyte==3 && inbyte>0 && !bracket) procaddr();
}
static void startup(void) {