14static stralloc cn = {0};
15static stralloc
sa = {0};
16static stralloc
out = {0};
18int main(
int argc,
char *
const *argv)
25 char proto[7] =
"._tcp.";
33 logmsg(
WHO,100,USAGE,
"dnstlsa [-v] [-p port] [-u(dp)|-t(cp)] host (tcp on port 25 is default)" );
35 while ((opt = getoptb(argc,(
char **)argv,
"vutp:")) != opteof) {
37 case 'p':
port = optarg;
break;
39 case 'u': str_copy(proto,
"._udp.");
break;
40 case 'v': verbose = 1;
44 host = argv[optind++];
46 if (!stralloc_copyb(&
sa,
"_",1)) logmsg(
WHO,111,FATAL,
"out of memory");
47 if (!stralloc_cats(&
sa,
port)) logmsg(
WHO,111,FATAL,
"out of memory");
48 if (!stralloc_cats(&
sa,proto)) logmsg(
WHO,111,FATAL,
"out of memory");
49 if (!stralloc_cats(&
sa,
host)) logmsg(
WHO,111,FATAL,
"out of memory");
52 if (dns_cname(&cn,&
sa) > 0)
56 if (!stralloc_0(&
sa)) logmsg(
WHO,111,FATAL,
"out of memory");
57 if (verbose) logmsg(
WHO,0,INFO,B(
"checking for TLSA records: ",
sa.s,
"\n"));
59 if (r > 0 &&
out.len > 4) {
60 for (i = 0; i <=
out.len; i++) {
63 type = (
unsigned char)
out.s[i + 2];
65 if (
usage == 0) buffer_puts(buffer_1,
"Usage: [0], ");
66 if (
usage == 1) buffer_puts(buffer_1,
"Usage: [1], ");
67 if (
usage == 2) buffer_puts(buffer_1,
"Usage: [2], ");
68 if (
usage == 3) buffer_puts(buffer_1,
"Usage: [3], ");
70 if (
selector == 0) buffer_puts(buffer_1,
"Selector: [0], ");
71 if (
selector == 1) buffer_puts(buffer_1,
"Selector: [1], ");
73 if (type == 0) buffer_puts(buffer_1,
"Type: [0] ");
74 if (type == 1) buffer_puts(buffer_1,
"Type: [1] ");
75 if (type == 2) buffer_puts(buffer_1,
"Type: [2] ");
81 for (
j = i + 3,
k = 0;
j <=
out.len; ++
j) {
82 ch = (
unsigned char)
out.s[
j];
83 if ((type == 1 &&
k == 32) || (type == 2 &&
k == 64)) {
84 buffer_putsflush(buffer_1,
"\n");
87 buffer_put(buffer_1,
"0123456789abcdef" + (ch >> 4),1);
88 buffer_put(buffer_1,
"0123456789abcdef" + (ch & 0x0f),1);
int dns_tlsa(stralloc *out, const stralloc *fqdn)