fprintf(stream, "\t-c\t\tsend the query with tcp (connected)\n");
fprintf(stream, "\t-k <file>\tspecify a file that contains a trusted DNSSEC key [**]\n");
fprintf(stream, "\t\t\tused to verify any signatures in the current answer\n");
- fprintf(stream, "\t-o <mnemonic>\t[QR|qr][AA|aa][TC|tc][RD|rd][CD|cd][RA|ra][AD|ad]\n");
+ fprintf(stream, "\t-o <mnemonic>\tset flags to: [QR|qr][AA|aa][TC|tc][RD|rd][CD|cd][RA|ra][AD|ad]\n");
fprintf(stream, "\t\t\tlowercase: unset bit, uppercase: set bit\n");
+#if 0
+ fprintf(stream, "\t-O <opcode>\tset the opcode to: [query, iquery, status, notify, update]]\n");
+#endif
fprintf(stream, "\t-p <port>\tuse <port> as remote port number\n");
fprintf(stream, "\t-s\t\tshow the DS RR for each key in a packet\n");
fprintf(stream, "\t-u\t\tsend the query with udp (the default)\n");
ldns_rdf *serv_rdf;
ldns_rr_type type;
ldns_rr_class clas;
+#if 0
+ ldns_pkt_opcode opcode = LDNS_PACKET_QUERY;
+#endif
int i, c;
int int_type;
int int_clas;
DRILL_OFF(qflags, LDNS_AD);
}
break;
+#if 0
+ case 'O':
+ if (strstr(optarg, "query")) {
+ opcode = LDNS_PACKET_QUERY;
+ break;
+ }
+ if (strstr(optarg, "iquery")) {
+ opcode = LDNS_PACKET_IQUERY;
+ break;
+ }
+ if (strstr(optarg, "status")) {
+ opcode = LDNS_PACKET_STATUS;
+ break;
+ }
+ if (strstr(optarg, "notify")) {
+ opcode = LDNS_PACKET_NOTIFY;
+ break;
+ }
+ if (strstr(optarg, "update")) {
+ opcode = LDNS_PACKET_UPDATE;
+ break;
+ }
+ break;
+#endif
case 'p':
qport = (uint16_t)atoi(optarg);
if (qport == 0) {
}
}
-
/* set the nameserver to use */
if (!serv) {
/* no server given make a resolver from /etc/resolv.conf */
case DRILL_NSEC:
break;
case DRILL_REVERSE:
- /* name should be an ip addr */
- /*qname = ldns_rdf_new_addr_frm_str(name);*/
/* ipv4 or ipv6 addr? */
if (strchr(name, ':')) {
name2 = malloc(IP6_ARPA_MAX_LEN + 20);
c = 0;
for (i=0; i<(int)strlen(name); i++) {
if (i >= IP6_ARPA_MAX_LEN) {
- fprintf(stderr, "Error: argument too long\n");
- exit(2);
+ error("%s", "reverse argument to long");
}
if (name[i] == ':') {
if (i < (int) strlen(name) && name[i + 1] == ':') {
- printf(":: not supported yet\n");
- exit(1);
+ error("%s", ":: not supported (yet)");
} else {
if (i + 2 == (int) strlen(name) || name[i + 2] == ':') {
- name2[c] = '0';
- c++;
- name2[c] = '.';
- c++;
- name2[c] = '0';
- c++;
- name2[c] = '.';
- c++;
- name2[c] = '0';
- c++;
- name2[c] = '.';
- c++;
+ name2[c++] = '0';
+ name2[c++] = '.';
+ name2[c++] = '0';
+ name2[c++] = '.';
+ name2[c++] = '0';
+ name2[c++] = '.';
} else if (i + 3 == (int) strlen(name) || name[i + 3] == ':') {
- name2[c] = '0';
- c++;
- name2[c] = '.';
- c++;
- name2[c] = '0';
- c++;
- name2[c] = '.';
- c++;
+ name2[c++] = '0';
+ name2[c++] = '.';
+ name2[c++] = '0';
+ name2[c++] = '.';
} else if (i + 4 == (int) strlen(name) || name[i + 4] == ':') {
- name2[c] = '0';
- c++;
- name2[c] = '.';
- c++;
+ name2[c++] = '0';
+ name2[c++] = '.';
}
}
} else {
- name2[c] = name[i];
- c++;
- name2[c] = '.';
- c++;
+ name2[c++] = name[i];
+ name2[c++] = '.';
}
}
- name2[c] = '\0';
- c++;
-/*
- while (strchr(name2, ':')) {
- *(strchr(name2, ':')) = '.';
- }
- printf("Reverse lookup for IPv6 not implemented yet, please use normal PTR query for the required address\n");
- exit(1);
-*/
+ name2[c++] = '\0';
+
qname = ldns_dname_new_frm_str(name2);
qname_tmp = ldns_dname_reverse(qname);
ldns_rdf_deep_free(qname);
qname_tmp = ldns_dname_new_frm_str("ip6.arpa.");
status = ldns_dname_cat(qname, qname_tmp);
if (status != LDNS_STATUS_OK) {
- fprintf(stderr, "error creating reverse address for ipv4: %s\n", ldns_get_errorstr_by_id(status));
- exit(status);
+ error("%s", "could not create reverse address for ip6: %s\n", ldns_get_errorstr_by_id(status));
}
ldns_rdf_deep_free(qname_tmp);
qname_tmp = ldns_dname_new_frm_str("in-addr.arpa.");
status = ldns_dname_cat(qname, qname_tmp);
if (status != LDNS_STATUS_OK) {
- fprintf(stderr, "error creating reverse address for ipv4: %s\n", ldns_get_errorstr_by_id(status));
- exit(status);
+ error("%s", "could not create reverse address for ip4: %s\n", ldns_get_errorstr_by_id(status));
}
ldns_rdf_deep_free(qname_tmp);
}