10 #include "openreadclose.h"
15 static int roots_find(char *q
)
21 while (i
< data
.len
) {
22 j
= dns_domain_length(data
.s
+ i
);
23 if (dns_domain_equal(data
.s
+ i
,q
)) return i
+ j
;
30 static int roots_search(char *q
)
37 if (!*q
) return -1; /* user misconfiguration */
43 int roots(char servers
[64],char *q
)
47 if (r
== -1) return 0;
48 byte_copy(servers
,64,data
.s
+ r
);
52 int roots_same(char *q
,char *q2
)
54 return roots_search(q
) == roots_search(q2
);
57 static int init2(DIR *dir
)
76 if (d
->d_name
[0] != '.') {
77 if (openreadclose(d
->d_name
,&text
,32) != 1) return 0;
78 if (!stralloc_append(&text
,"\n")) return 0;
81 if (str_equal(fqdn
,"@")) fqdn
= ".";
82 if (!dns_domain_fromdot(&q
,fqdn
,str_len(fqdn
))) return 0;
86 for (i
= 0;i
< text
.len
;++i
)
87 if (text
.s
[i
] == '\n') {
89 if (ip4_scan(text
.s
+ j
,servers
+ serverslen
))
93 byte_zero(servers
+ serverslen
,64 - serverslen
);
95 if (!stralloc_catb(&data
,q
,dns_domain_length(q
))) return 0;
96 if (!stralloc_catb(&data
,servers
,64)) return 0;
101 static int init1(void)
106 if (chdir("servers") == -1) return 0;
119 if (!stralloc_copys(&data
,"")) return 0;
121 fddir
= open_read(".");
122 if (fddir
== -1) return 0;
124 if (fchdir(fddir
) == -1) r
= 0;