Compare commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
7150d5e275 | ||
|
|
a51c70decc | ||
|
|
caa8797a00 | ||
|
|
73d7583d98 | ||
|
|
50b0a27f48 | ||
|
|
97cee754a9 | ||
|
|
8db1db6295 | ||
|
|
c42af00541 | ||
|
|
08102bb28c | ||
|
|
9ae90732df | ||
|
|
c1567cb58c | ||
|
|
f3222d48cc | ||
|
|
e95cc59f90 | ||
|
|
64ea670052 | ||
|
|
60e9e70654 | ||
|
|
47db0efda1 | ||
|
|
8839b6acbf | ||
|
|
db462c020e | ||
|
|
32dd66cc5e | ||
|
|
6c62c34a5b | ||
|
|
ecb55f9962 | ||
|
|
c6d29fbd5f | ||
|
|
51693f0bd9 | ||
|
|
18b7133679 | ||
|
|
23e4260821 | ||
|
|
45ddf396e9 | ||
|
|
4ca54c8f3b | ||
|
|
9ecd36e0de | ||
|
|
6383d77950 | ||
|
|
b39e8e9c00 | ||
|
|
1ed8794070 | ||
|
|
5cd1e83a84 | ||
|
|
a9f5be4348 | ||
|
|
41f154b98e | ||
|
|
94b4f2728e | ||
|
|
f29583dca7 | ||
|
|
f1457d6c8c | ||
|
|
cc0a7affe9 | ||
|
|
ec02e04ead | ||
|
|
8fb0f1fa42 | ||
|
|
a20b2c5f53 | ||
|
|
f5cb884c84 | ||
|
|
206c9e7f5d | ||
|
|
0062c1ddfe | ||
|
|
07eee0ceda | ||
|
|
35ae209f35 | ||
|
|
360a56a4a4 | ||
|
|
aa75c92b6b | ||
|
|
bfe7da9c6b | ||
|
|
323de351b3 | ||
|
|
6b345bc209 | ||
|
|
d3fafb3213 | ||
|
|
6fedbb60b2 | ||
|
|
0e84be2c52 | ||
|
|
c363d0fed8 | ||
|
|
f5e4a39e62 | ||
|
|
e227c896a2 | ||
|
|
0f0e3ffdc1 | ||
|
|
b8c4c3aade | ||
|
|
c2f1d683c9 | ||
|
|
fa85f47357 | ||
|
|
efd263562b | ||
|
|
8a044e464b | ||
|
|
d7979cbb6c | ||
|
|
5295debde0 | ||
|
|
3e69f0cd72 | ||
|
|
c592760e76 | ||
|
|
b172c78a9a | ||
|
|
f64f89606f | ||
|
|
3f25cb17e3 | ||
|
|
e2352fb8cd | ||
|
|
21b4f15c60 | ||
|
|
db18d1997e | ||
|
|
b6279d0b4b | ||
|
|
417cddb8c1 | ||
|
|
42e74b77f5 | ||
|
|
f27e47b5ff | ||
|
|
2a091ec932 | ||
|
|
9445e10377 | ||
|
|
c3e0aed7da | ||
|
|
f6bd49ffd0 | ||
|
|
b938d2af61 | ||
|
|
fff1dbdf55 | ||
|
|
69e7554caa | ||
|
|
b2ca6fd3a8 | ||
|
|
99df95697c | ||
|
|
d778d61208 | ||
|
|
d0bb045c79 | ||
|
|
3fa36cb79d | ||
|
|
ab92fa0aca | ||
|
|
7e715a0fc5 | ||
|
|
3a7c194000 | ||
|
|
8a4f85e204 | ||
|
|
622a5774e6 | ||
|
|
feed58ca64 | ||
|
|
eab966fdb3 | ||
|
|
c45ca0b839 | ||
|
|
5eeb5ddc67 | ||
|
|
4c7c397275 | ||
|
|
05b8c412f8 | ||
|
|
023dd2cfe0 | ||
|
|
413463f215 | ||
|
|
bc1268ea83 | ||
|
|
d8f67a1d88 | ||
|
|
b6e20238b6 | ||
|
|
b7f8bca629 | ||
|
|
8bb8f9c6c8 | ||
|
|
de619d1e81 | ||
|
|
e6450a5811 | ||
|
|
d8b140ce00 | ||
|
|
5804bf8118 | ||
|
|
e47a6956a1 | ||
|
|
d83346263d | ||
|
|
93aba2cb04 | ||
|
|
7366e9c47d | ||
|
|
a818127616 | ||
|
|
6e574a8b30 | ||
|
|
a7859ded82 | ||
|
|
d7224e6672 | ||
|
|
2adafac25f | ||
|
|
057fc2ec3f | ||
|
|
80670d2633 | ||
|
|
6430d5b4ef | ||
|
|
473ca0bf8c | ||
|
|
48b0f5ff87 | ||
|
|
0b809e3e23 | ||
|
|
cde7dfea4c | ||
|
|
915c16e8aa | ||
|
|
ec52edeff2 | ||
|
|
47af71b523 | ||
|
|
15033eed4d | ||
|
|
fca9cc33ad | ||
|
|
2ca2e1a1ce | ||
|
|
84185d19c7 | ||
|
|
16a160ea8a | ||
|
|
f132d4023a | ||
|
|
a50304c317 | ||
|
|
8ac220d5cc | ||
|
|
683f10428e | ||
|
|
022e33bfc7 | ||
|
|
3bc24a3a90 | ||
|
|
5ef63950cf | ||
|
|
4f0ddc4fc1 | ||
|
|
f5ea135066 | ||
|
|
bedd38297c | ||
|
|
2bffec87ac | ||
|
|
f9409b10fd | ||
|
|
5da1e589c2 | ||
|
|
852fa3b2e3 | ||
|
|
f10e90ebb4 | ||
|
|
8569ab045a | ||
|
|
a5c077e40c | ||
|
|
2ca556300b | ||
|
|
930ecd3756 | ||
|
|
97527fc03c | ||
|
|
c46f10e4a1 | ||
|
|
e1c2a8b9c1 | ||
|
|
73442acbe7 | ||
|
|
a4f0e6d8d6 | ||
|
|
3a8d4a316e | ||
|
|
b7064914ca | ||
|
|
6e8b843125 | ||
|
|
ef38731b6f | ||
|
|
3e67a87fc6 | ||
|
|
49f62849e5 | ||
|
|
b627356826 | ||
|
|
e9472e9f18 | ||
|
|
9cf6d43887 | ||
|
|
d073663cb4 | ||
|
|
80278e8856 | ||
|
|
7ead8b72ea | ||
|
|
cad61731f8 | ||
|
|
ac69ec1294 | ||
|
|
54469c2b22 | ||
|
|
21143c2afa | ||
|
|
f9ff782e79 | ||
|
|
6646cc41d7 | ||
|
|
ca2ebf900d | ||
|
|
e74100e3f4 | ||
|
|
90e303b114 | ||
|
|
cfbdb5e079 | ||
|
|
9c827a3997 | ||
|
|
adbb11147c | ||
|
|
6a2a7fbfd1 | ||
|
|
669e9657c7 | ||
|
|
b3ebf6f275 | ||
|
|
c58088e3a0 | ||
|
|
60c2c8814f | ||
|
|
9ab461a6ff | ||
|
|
77467267d9 | ||
|
|
b7dca533e0 | ||
|
|
0fa218cc7c | ||
|
|
13ba983cc8 | ||
|
|
3036da0109 | ||
|
|
84d8c0166d | ||
|
|
da5d1cf1b1 | ||
|
|
df1415d1e8 | ||
|
|
82107a8889 | ||
|
|
13f20ab1fa | ||
|
|
4099c201ff | ||
|
|
6cb12c44a3 | ||
|
|
66291de206 | ||
|
|
0118965e19 | ||
|
|
6c06bc591a | ||
|
|
486e212005 | ||
|
|
58d9437115 | ||
|
|
c36f45e354 | ||
|
|
b31471255d | ||
|
|
07caa8f1f9 | ||
|
|
7caf656a15 | ||
|
|
5fc932977a | ||
|
|
9cec4ca6ca | ||
|
|
19f0d00107 | ||
|
|
fefd6c28ab | ||
|
|
23fb770906 | ||
|
|
793711f26e | ||
|
|
1898837a5e | ||
|
|
9af8851b85 | ||
|
|
6124a262fa | ||
|
|
0cb27602e5 | ||
|
|
3e86caf335 | ||
|
|
2c63b97c09 | ||
|
|
21b1491aa2 | ||
|
|
0d6f70f1db | ||
|
|
11dbb6dc6b | ||
|
|
5af6873693 | ||
|
|
ff1b064f5e | ||
|
|
8e40433e34 | ||
|
|
23924b681e | ||
|
|
5157792c8d | ||
|
|
efc01ed4ad | ||
|
|
e57e32e575 | ||
|
|
708f3fd049 | ||
|
|
192cd0c440 | ||
|
|
8740bb8af0 | ||
|
|
68d9a8bddf | ||
|
|
b01b0bb771 | ||
|
|
1b1f3fca3a | ||
|
|
880723fb13 | ||
|
|
e128be1387 | ||
|
|
e23cb8a303 | ||
|
|
ee515ce130 | ||
|
|
f3cee71ee5 | ||
|
|
d25f6fac98 | ||
|
|
dd7c36abb9 | ||
|
|
8f44fd4f8d | ||
|
|
09de14b4e6 | ||
|
|
fefbb64a75 | ||
|
|
772ef7e815 | ||
|
|
41e50ece38 | ||
|
|
4de7f30751 | ||
|
|
ba1549060f | ||
|
|
5d727330e4 | ||
|
|
111e3433d2 | ||
|
|
3acadb07f4 | ||
|
|
cf300e03de | ||
|
|
439a2f855b | ||
|
|
d906600f7d | ||
|
|
06ccdb9fe7 | ||
|
|
2995f8205e | ||
|
|
093823a75c | ||
|
|
bc53aacc6e | ||
|
|
b7415ddd79 | ||
|
|
5e8f2512a6 | ||
|
|
2e4bec457d | ||
|
|
fdba3257ce | ||
|
|
1f1d36a87b | ||
|
|
9ac8796f16 | ||
|
|
700847b76c | ||
|
|
d5cc778a3e | ||
|
|
f2c49862fb | ||
|
|
242bba8991 | ||
|
|
ce78304c4f | ||
|
|
b1e7bb6aef | ||
|
|
45fe575607 | ||
|
|
02bdc23f8e | ||
|
|
b90dc3fc6a | ||
|
|
6b53351ce2 | ||
|
|
54ef87c8c9 | ||
|
|
eba289dabe | ||
|
|
4463c6f19e | ||
|
|
f59d47928e | ||
|
|
ef29912666 | ||
|
|
0cfa2fb26d | ||
|
|
06a949d2ce | ||
|
|
db080b7310 | ||
|
|
9ecb35e7d4 | ||
|
|
6785447aaf | ||
|
|
bfbea562e6 | ||
|
|
af36ecc41a | ||
|
|
fa85eab969 | ||
|
|
3a8943b2d2 | ||
|
|
790f33c772 | ||
|
|
c9114f35c0 | ||
|
|
6c8ae8b9ef | ||
|
|
0b81e99ddf | ||
|
|
bbc985b36e | ||
|
|
9dfa8979a7 | ||
|
|
5c898d95dc | ||
|
|
d486854a4a | ||
|
|
cd801a4ed8 | ||
|
|
3638017bd3 | ||
|
|
c14c7e14cd | ||
|
|
ed37e8811a | ||
|
|
892476530f | ||
|
|
eacbf2cc01 | ||
|
|
6737b6ebf0 | ||
|
|
e8c4b14cde | ||
|
|
72ad976640 | ||
|
|
8bb79fc9b9 | ||
|
|
8771fbe4a2 | ||
|
|
b541c10d04 | ||
|
|
c01237c6bc | ||
|
|
c52806164c | ||
|
|
189dcca2c9 | ||
|
|
5d7c50da51 | ||
|
|
e15532f8c6 | ||
|
|
462b062d7f | ||
|
|
e181d9899b | ||
|
|
06a316a2fe | ||
|
|
559fe25977 | ||
|
|
60213f2815 | ||
|
|
6c8abf481d | ||
|
|
1e4bfff185 | ||
|
|
91cd0f93ad | ||
|
|
b414eb4312 | ||
|
|
db1bdb20a5 | ||
|
|
f1b6872550 | ||
|
|
0797eebc66 | ||
|
|
4d1d37a19d | ||
|
|
751af0ee2f | ||
|
|
6b31d9c568 | ||
|
|
d61bc8ca1c | ||
|
|
d5a0b9c15c | ||
|
|
8f4ecd4a9e | ||
|
|
ee80f45064 | ||
|
|
022dd8775a | ||
|
|
c2cee22ec1 | ||
|
|
7869e8ad05 | ||
|
|
d67b892041 | ||
|
|
acf6bcebf9 | ||
|
|
9a762177e6 | ||
|
|
402313b3db | ||
|
|
27f9274cb4 | ||
|
|
38ba66e41b | ||
|
|
fdf2eaf21b | ||
|
|
887c9d05c2 | ||
|
|
d9d6d2f77f | ||
|
|
9b2c0d2924 | ||
|
|
61cdf27dc2 | ||
|
|
eb2c518a38 | ||
|
|
d5f394f4c4 | ||
|
|
05903e6b3a | ||
|
|
622a594a7c | ||
|
|
3cac42f8db | ||
|
|
3c17c8b945 | ||
|
|
6bbb37a184 | ||
|
|
e4946c508e | ||
|
|
d2e371201c | ||
|
|
4f30395c97 | ||
|
|
e2fd9af691 | ||
|
|
6af3a0d53c | ||
|
|
81f6192a0c | ||
|
|
4072dfb9b8 | ||
|
|
945f7311ca | ||
|
|
17453368fa | ||
|
|
d8720af3a3 | ||
|
|
6cd7bd1fb5 | ||
|
|
459d31fa83 | ||
|
|
10640b2e3e | ||
|
|
b0a1fa9b20 | ||
|
|
e61793f086 | ||
|
|
707b733dc3 | ||
|
|
cff4f731e4 | ||
|
|
33b8775d3a | ||
|
|
0021672451 | ||
|
|
74dfe6155f | ||
|
|
cde2f4dabe | ||
|
|
8733f0d86c | ||
|
|
25fd0feeea | ||
|
|
04999a9c03 | ||
|
|
92094d44a2 | ||
|
|
1e1f1edb7d | ||
|
|
11fe3dcfe2 | ||
|
|
fefab489c7 | ||
|
|
d1abb8bb02 | ||
|
|
db0e722d83 | ||
|
|
09ce736e9a | ||
|
|
d972554740 | ||
|
|
b4aeceec73 | ||
|
|
db40c6bfdf | ||
|
|
a831ffc8fe | ||
|
|
f8aa552edb | ||
|
|
b8f2869bef | ||
|
|
307ba34fa0 | ||
|
|
d9af67ef70 | ||
|
|
36d8518388 | ||
|
|
913e3def6d | ||
|
|
5b477dd3b9 | ||
|
|
3179bab5b8 | ||
|
|
00c8cf21f0 | ||
|
|
309979a136 | ||
|
|
20c21edada | ||
|
|
cef23f1f01 | ||
|
|
06364bcf06 | ||
|
|
a79f12ba46 | ||
|
|
47b4920f08 | ||
|
|
78f0b08d54 | ||
|
|
fc67f3e0e3 | ||
|
|
420e5e1022 | ||
|
|
f547209bf6 | ||
|
|
452606f147 | ||
|
|
ca1ecf38c6 | ||
|
|
3f96cf3e4f | ||
|
|
b6b9d8b843 | ||
|
|
0f1938c982 | ||
|
|
ca50fa0230 | ||
|
|
08e4f1ac94 | ||
|
|
a873540eb6 | ||
|
|
b493dfe8bc | ||
|
|
cab27680d6 | ||
|
|
f109354dce | ||
|
|
31f6e44dca | ||
|
|
77e0ae46ee | ||
|
|
fbdbb3e8fa | ||
|
|
abbc8ed09b | ||
|
|
3c53361901 | ||
|
|
6d6529b5e5 | ||
|
|
0b07b9482c | ||
|
|
c0fe9b0d1b | ||
|
|
10a6442013 | ||
|
|
2869504d83 | ||
|
|
ce6caa0759 | ||
|
|
138cc7f283 | ||
|
|
2edb8bce12 | ||
|
|
0258aea36c | ||
|
|
2ce3018081 | ||
|
|
2053e8c26c | ||
|
|
b8b17a7732 | ||
|
|
ac81ee4d14 | ||
|
|
63d380e078 | ||
|
|
46879265d7 | ||
|
|
5c859d99f0 | ||
|
|
ae29b66fbf | ||
|
|
ac1a59e95c | ||
|
|
aa51fc8106 | ||
|
|
0316cd0c04 | ||
|
|
58930ca980 | ||
|
|
5c4e92b973 | ||
|
|
29d7ef1bca | ||
|
|
80c7cf7e5d | ||
|
|
2612cf1a5e | ||
|
|
be7d7a6638 | ||
|
|
d0b2beb93d | ||
|
|
f3ca27e9fe | ||
|
|
e3e94dd137 | ||
|
|
6358746e6f | ||
|
|
4a2df0557c | ||
|
|
014f9142bc | ||
|
|
c0bf2b179a | ||
|
|
9656a02498 | ||
|
|
d76ac5ddfd | ||
|
|
9fbcea8dba | ||
|
|
7c014c5bf4 | ||
|
|
b5c8773673 | ||
|
|
3e42bdfdc9 | ||
|
|
b20eef7ab0 | ||
|
|
a571ebca8b | ||
|
|
f498427f17 | ||
|
|
eb9945c49a | ||
|
|
727f5b8846 | ||
|
|
7ff4660fa4 | ||
|
|
0a792c72e6 | ||
|
|
bad3251d3f | ||
|
|
ea01b618d9 | ||
|
|
9eec883bf8 | ||
|
|
80dd46d7aa | ||
|
|
993572b249 | ||
|
|
afce5ee1c8 | ||
|
|
3700c88538 | ||
|
|
8b672d6342 | ||
|
|
868c254c18 | ||
|
|
f5385613e2 | ||
|
|
088eaf3878 | ||
|
|
46ba6046bc | ||
|
|
bcf53cf8d0 | ||
|
|
66923d616a | ||
|
|
1c398fd83c | ||
|
|
78bf1ca895 | ||
|
|
c9b0b5d9bf | ||
|
|
c29d36bdf7 | ||
|
|
15491d8b1f | ||
|
|
c529637d60 | ||
|
|
2ffd8b0788 | ||
|
|
b7554e2bc9 | ||
|
|
6b13908f70 | ||
|
|
afeabf9f70 | ||
|
|
3842a051ba | ||
|
|
a89d1aea0c | ||
|
|
773e64ec15 | ||
|
|
e209942448 | ||
|
|
be9932698b | ||
|
|
85477ac281 | ||
|
|
d35b058b31 | ||
|
|
51e66e5dee | ||
|
|
88d64279bb | ||
|
|
364da4eb0f | ||
|
|
f368466f81 | ||
|
|
26c8b645f8 | ||
|
|
8786484edf | ||
|
|
ba45e16a66 | ||
|
|
d8c1b06854 | ||
|
|
98c08f4dbe | ||
|
|
04f158ce9a | ||
|
|
1a1eba30c3 | ||
|
|
0e40083fdd | ||
|
|
d2a23df349 | ||
|
|
78baa4ccb8 | ||
|
|
fb17fdbd0e | ||
|
|
2f93757751 | ||
|
|
3bc4de1f1b | ||
|
|
62c1fe7b45 | ||
|
|
7b5bf4bea4 | ||
|
|
712bf9b0cc | ||
|
|
19c189b7a3 | ||
|
|
2cd386a02f | ||
|
|
d8389bdac5 | ||
|
|
abe885e016 | ||
|
|
d3d785705a | ||
|
|
ad923a3d6f | ||
|
|
035ef37ffa | ||
|
|
f38324fe6c | ||
|
|
67308c2197 | ||
|
|
93ca4b367d | ||
|
|
20d0c8c5bb | ||
|
|
06278dd28a | ||
|
|
bcf3845c01 | ||
|
|
52c5fd5684 | ||
|
|
a0e8772150 | ||
|
|
497514c667 | ||
|
|
ca08f931b9 | ||
|
|
569b52d136 | ||
|
|
e81b4c677b | ||
|
|
9476a30889 | ||
|
|
ff303bcf27 | ||
|
|
67145f44e5 | ||
|
|
7e2f4ceafa | ||
|
|
639fef047e | ||
|
|
ec5ff01338 | ||
|
|
72499be79f | ||
|
|
29406d7aa3 | ||
|
|
22dd55305b | ||
|
|
474acc7dd9 | ||
|
|
c5f432d9c2 | ||
|
|
0902c53969 | ||
|
|
8dda8ff186 | ||
|
|
c8d9ff1fe8 | ||
|
|
50c7ddaa5e | ||
|
|
adcfb59d04 | ||
|
|
7c6f960a20 | ||
|
|
75c43836c1 | ||
|
|
7752f1112e | ||
|
|
148fd45777 | ||
|
|
c7443ec439 | ||
|
|
2f65d19e93 | ||
|
|
6cb735c864 | ||
|
|
ad7a535899 | ||
|
|
84189fe5ad | ||
|
|
b15ba3f20d | ||
|
|
a3a89d7c36 | ||
|
|
6c87ddb75d | ||
|
|
aa224791dd | ||
|
|
73865279b1 | ||
|
|
cad0e68589 | ||
|
|
93c498f0c6 | ||
|
|
e5cba9f559 | ||
|
|
513fe0ca30 | ||
|
|
a7757e30aa | ||
|
|
4e99bcb060 | ||
|
|
90c5477ca1 | ||
|
|
540f27d8bc | ||
|
|
552a117791 | ||
|
|
4e07f65d62 | ||
|
|
c78ef9f491 | ||
|
|
785d1541b6 | ||
|
|
63bdedb251 | ||
|
|
2f330bed30 | ||
|
|
8342523519 | ||
|
|
9f6c66e1b3 | ||
|
|
50d93bb5f8 | ||
|
|
64e9b7eafb | ||
|
|
9d34aaa2bd | ||
|
|
f3e4c3d6c5 | ||
|
|
6fb633bc3f | ||
|
|
ca033e166c | ||
|
|
ca6cee1837 | ||
|
|
c82af3a7f1 | ||
|
|
e82a62f172 | ||
|
|
f9321a16fb | ||
|
|
c8bedec446 | ||
|
|
7a104af70f | ||
|
|
923de3bb9c | ||
|
|
2359261a25 | ||
|
|
769cd7d5dd | ||
|
|
6bad645917 | ||
|
|
11931cc68d | ||
|
|
d91d025def | ||
|
|
985b4f1c86 | ||
|
|
1d556695ef | ||
|
|
e9ca87459a | ||
|
|
4b711da3c2 | ||
|
|
ca690f9802 | ||
|
|
137a1f98e3 | ||
|
|
e301648774 | ||
|
|
1260bf0573 | ||
|
|
bdbaee5cfc | ||
|
|
43c69727ea | ||
|
|
589dce8281 | ||
|
|
5f4804c7e4 | ||
|
|
5cd7e9d4db | ||
|
|
1418d7292d | ||
|
|
cc8e8b59d6 | ||
|
|
3b0c7a322a | ||
|
|
65775fe205 | ||
|
|
30e3e23338 | ||
|
|
8ced0871d2 | ||
|
|
6032e43f38 | ||
|
|
17b687ef36 | ||
|
|
cd60cef97d | ||
|
|
219a694aca | ||
|
|
3c76e82a76 | ||
|
|
998358fa90 | ||
|
|
bc508906db | ||
|
|
6a1e7c8565 | ||
|
|
5e8d4ff0bf | ||
|
|
e169fd331c | ||
|
|
58fbc62a4a | ||
|
|
fde3820de9 | ||
|
|
f33fe250cf | ||
|
|
a504607ef1 | ||
|
|
e8108e60c9 | ||
|
|
479c6fc458 | ||
|
|
8cb2bd68c9 | ||
|
|
b352902413 | ||
|
|
7736b3327e | ||
|
|
a680e06bac | ||
|
|
72e8c079c4 | ||
|
|
74ceb7b203 | ||
|
|
7923de0ddd | ||
|
|
d3f58baf38 | ||
|
|
6b07de6abf | ||
|
|
f2b515e117 | ||
|
|
9615df2e83 | ||
|
|
4785e8e98a | ||
|
|
5fc04b8135 | ||
|
|
c8ab83c08e | ||
|
|
469a5f80ae | ||
|
|
7e7bede4bd | ||
|
|
339335189b | ||
|
|
4e57d3ff7d | ||
|
|
06289aeea8 | ||
|
|
66bea4d912 | ||
|
|
6a4c22bc4d | ||
|
|
081cff0c33 | ||
|
|
2562a84dc5 | ||
|
|
ee3085e9e2 | ||
|
|
d352f188cb | ||
|
|
3d38596530 | ||
|
|
449733f214 | ||
|
|
75063dd6d2 | ||
|
|
c6eac4f169 | ||
|
|
a7cb695600 | ||
|
|
5b4f07a4f3 | ||
|
|
b19619260f | ||
|
|
897f762e3c | ||
|
|
1a32d316dd | ||
|
|
7f800a6b10 | ||
|
|
94f960b541 | ||
|
|
381f821556 | ||
|
|
5d4bffa427 | ||
|
|
f0a464d58a | ||
|
|
3a0f5543c9 | ||
|
|
1ae369c9d2 | ||
|
|
8153dde6c8 | ||
|
|
3476dfe9d7 | ||
|
|
ce3c351d81 | ||
|
|
fa52840ac8 | ||
|
|
e7468041e7 | ||
|
|
b9043a19e2 | ||
|
|
ae0cb2960d | ||
|
|
85939fa773 | ||
|
|
5a78ccdf1f | ||
|
|
b13fa0acde | ||
|
|
2a590fe988 | ||
|
|
fd837244be | ||
|
|
5dcfb7ce2e | ||
|
|
9bbc786bf0 | ||
|
|
c4157085cd | ||
|
|
d904d3c59a | ||
|
|
40a31ba506 | ||
|
|
8bdf7f2972 | ||
|
|
1500a4fe5d | ||
|
|
a9bc22bf37 | ||
|
|
3931325c6d | ||
|
|
7209c50da4 | ||
|
|
d1029cbcf0 | ||
|
|
f04c15adc7 | ||
|
|
0ae6a5f852 | ||
|
|
53c07ca216 | ||
|
|
1255d388f0 | ||
|
|
c615c2ddce | ||
|
|
8a02be5fc2 | ||
|
|
31d3464c0c | ||
|
|
2f6d1483f6 | ||
|
|
ea7b38cd1e | ||
|
|
31e12a627d | ||
|
|
e94a2fdd30 | ||
|
|
32d248107a | ||
|
|
3b19037ccd | ||
|
|
97bb372529 | ||
|
|
e94a3385d6 | ||
|
|
b8685833f1 | ||
|
|
0e27dac042 | ||
|
|
059a29a179 | ||
|
|
2ef5add037 | ||
|
|
bada421314 | ||
|
|
eb7f938194 | ||
|
|
c65bd9be83 | ||
|
|
dfafc36515 | ||
|
|
05a1fd6093 | ||
|
|
4574714ad4 | ||
|
|
8d8c145175 | ||
|
|
07eaf0b8d0 | ||
|
|
cf70df7d0e | ||
|
|
9234d92d4e | ||
|
|
86a292d459 | ||
|
|
937ccb270e | ||
|
|
7d5b9de6c7 | ||
|
|
f6132a5038 | ||
|
|
7a89c23c2d | ||
|
|
5a23b8523d | ||
|
|
0cf9ce19cc | ||
|
|
6ca3f52bee | ||
|
|
42f61e5c46 | ||
|
|
2ba574f329 | ||
|
|
dcfc52bbba | ||
|
|
4c706de3c7 | ||
|
|
3c3fe07225 | ||
|
|
248732d66f | ||
|
|
31f15d225d | ||
|
|
8d2b885018 | ||
|
|
c535e67633 | ||
|
|
05cd9da1d8 | ||
|
|
64ea5fd972 | ||
|
|
35ef866dcc | ||
|
|
ec95dac291 | ||
|
|
05a4a299b5 | ||
|
|
c8b58baa78 | ||
|
|
3b3d01b318 | ||
|
|
0e71bf20df | ||
|
|
106423c056 | ||
|
|
d510e8695e | ||
|
|
c33679b400 | ||
|
|
3ad07fa335 | ||
|
|
6812f56fa2 | ||
|
|
0ebade1fcd | ||
|
|
f3c187e0c7 | ||
|
|
559eecb115 | ||
|
|
fe6a60a7c3 | ||
|
|
5419c0c2d0 | ||
|
|
a1a06d7854 | ||
|
|
1094dec52a | ||
|
|
392b3526d8 | ||
|
|
7ce9f2dbe8 | ||
|
|
267d8eb613 | ||
|
|
b38ab99bdc | ||
|
|
6e93e6ea45 | ||
|
|
01818a424a | ||
|
|
79432444e8 | ||
|
|
0bd2ea544e | ||
|
|
afe5729a33 | ||
|
|
2975d0f819 | ||
|
|
a7e1dcd84a | ||
|
|
fc9acafe15 | ||
|
|
e31320a1d0 | ||
|
|
fa2fb620c7 | ||
|
|
62a3dbe63e | ||
|
|
5cb1e19b03 | ||
|
|
23b81eeddd | ||
|
|
31da643c6a | ||
|
|
3c17010ba5 | ||
|
|
dd0319d149 | ||
|
|
315eafec07 | ||
|
|
cf638fc378 | ||
|
|
9df7cf8ea3 | ||
|
|
9bdb01e6c3 | ||
|
|
ff52c72095 | ||
|
|
417872b98a | ||
|
|
a4fbe403e4 | ||
|
|
a3ed377607 | ||
|
|
e69b9ffb0f | ||
|
|
29ca9003a5 | ||
|
|
d25365515e | ||
|
|
a77ad145d0 | ||
|
|
ce1d4c7aeb | ||
|
|
85532057dc | ||
|
|
86457878fd | ||
|
|
8ba4e82f53 | ||
|
|
7779b6cbf6 | ||
|
|
ac5c31df78 | ||
|
|
e370391b5e | ||
|
|
3c9b2e6250 | ||
|
|
8b57e8fcf6 | ||
|
|
61d5bfc06b | ||
|
|
ada9b8ab20 | ||
|
|
e17f6f7ab6 | ||
|
|
3a92768cad | ||
|
|
329fd2fe75 | ||
|
|
8002894e6e | ||
|
|
bb60abb445 | ||
|
|
890db7ab7d | ||
|
|
9e3fe84689 | ||
|
|
024face21c | ||
|
|
78d811f8fb | ||
|
|
1beaa9e457 | ||
|
|
f953788d75 | ||
|
|
f6bcdffe6d | ||
|
|
e3af4e83dd | ||
|
|
247b6de61b | ||
|
|
13f2c161db | ||
|
|
55ab8cebff | ||
|
|
4fa5d53e75 | ||
|
|
ae62248c8a | ||
|
|
fbdde79262 | ||
|
|
1c31f17f89 | ||
|
|
06365907a0 | ||
|
|
094d1d9a27 | ||
|
|
173a45b43c | ||
|
|
3fc4c1434d | ||
|
|
0aba41458d | ||
|
|
5f7516bee5 | ||
|
|
2e24e82fc3 | ||
|
|
d5169236b7 | ||
|
|
96bc10707a | ||
|
|
6c6ceac1bc | ||
|
|
c7302ffd98 | ||
|
|
df7596a03e | ||
|
|
f3fcde886c | ||
|
|
f08782f092 | ||
|
|
4186249fea | ||
|
|
1d19dc5411 | ||
|
|
5ea492b94d | ||
|
|
8db00cd940 | ||
|
|
fdef562ba7 | ||
|
|
4cef36044c | ||
|
|
49d23a92a9 | ||
|
|
290e1b94e4 | ||
|
|
818d9fec02 | ||
|
|
41ea62ace5 | ||
|
|
94ce9c52fb | ||
|
|
ed2cefaf0e | ||
|
|
a325a8cbed | ||
|
|
e17d517a93 | ||
|
|
edf97be2b5 | ||
|
|
f5b3693207 | ||
|
|
b923e27853 | ||
|
|
2616068121 | ||
|
|
4e9291c48b | ||
|
|
61e30d3194 | ||
|
|
678be98a63 | ||
|
|
f216f79834 | ||
|
|
1e219db778 | ||
|
|
840c7a02b3 | ||
|
|
cddaf5def3 | ||
|
|
07aa5a2c61 | ||
|
|
1550dcfff2 | ||
|
|
b8e65dbc1e | ||
|
|
9e46f410e7 | ||
|
|
c6e0cb8fa6 | ||
|
|
769ef0b7bd | ||
|
|
a1d2958b24 | ||
|
|
3dff229f5d | ||
|
|
3d34454472 | ||
|
|
de32eba8a8 | ||
|
|
dd95699054 | ||
|
|
b09f4e054c | ||
|
|
2ee55879d1 | ||
|
|
66065f71b3 | ||
|
|
40dd9cb8cc | ||
|
|
8f534756ca | ||
|
|
2d4f039432 | ||
|
|
6bebabb376 | ||
|
|
de5247ae16 | ||
|
|
b1dfd324cf | ||
|
|
ff9cad0802 | ||
|
|
6a252184e2 | ||
|
|
5ab25a0ab8 | ||
|
|
dece3a1f7c | ||
|
|
9c9cf3a8d0 | ||
|
|
08bed4d70a | ||
|
|
c54091c8ed | ||
|
|
e1fdebdcc8 | ||
|
|
23438327a1 | ||
|
|
8682b8f7f7 | ||
|
|
064fadaa40 | ||
|
|
a255936e1e | ||
|
|
1b8eaf4143 | ||
|
|
24dd4582a2 | ||
|
|
d9edf3ad42 | ||
|
|
9066d09c3e | ||
|
|
1ebadd777b | ||
|
|
792de65053 | ||
|
|
96ea98af24 | ||
|
|
54c4aa0f62 | ||
|
|
1df69830bd | ||
|
|
37f08fab28 | ||
|
|
3e1f3de348 | ||
|
|
6d7c0fd73b | ||
|
|
27ef660057 | ||
|
|
e83e8e7734 | ||
|
|
febc2e8db5 | ||
|
|
93b9133cfa | ||
|
|
90787e192c | ||
|
|
3e93426766 | ||
|
|
0f66180e24 | ||
|
|
4f3d12c632 | ||
|
|
ea34bcc637 | ||
|
|
09e103cd36 | ||
|
|
4748473739 | ||
|
|
a5aca6df16 | ||
|
|
84b0ad0959 | ||
|
|
513dd4a616 | ||
|
|
d65168b7a7 | ||
|
|
7c91a38c54 | ||
|
|
4b09cca4b9 | ||
|
|
e5100b1367 | ||
|
|
a4e8b19b83 | ||
|
|
846474d5a6 | ||
|
|
041153229d | ||
|
|
c3312fd9d0 | ||
|
|
edaf5b86ce | ||
|
|
7655e78c36 | ||
|
|
6859033d42 | ||
|
|
f558da602e | ||
|
|
ff7b9eede9 | ||
|
|
538bbefb23 | ||
|
|
82c168127c | ||
|
|
3f4c95eb98 | ||
|
|
29c9e88c6c | ||
|
|
dfcd28cce9 | ||
|
|
8bd6c39d5e | ||
|
|
99f08fc172 | ||
|
|
a6def371e4 | ||
|
|
089ad40b1f | ||
|
|
83515c3462 | ||
|
|
f642eb7b9f | ||
|
|
1123872a47 | ||
|
|
d30fcb907b | ||
|
|
d924384f72 | ||
|
|
7e22eec300 | ||
|
|
a4701d3b7e | ||
|
|
0d1a72385e | ||
|
|
ff4322d44f | ||
|
|
f2d88ed98c | ||
|
|
c9b3f64262 | ||
|
|
cf38d58b79 | ||
|
|
5044d03efa | ||
|
|
ecd67d8109 | ||
|
|
53b7400731 | ||
|
|
1ebeb6bbf3 | ||
|
|
7e351cd18f | ||
|
|
ecde762a60 | ||
|
|
8d146b6e11 | ||
|
|
f8d86ef2f6 | ||
|
|
589a8a85b3 | ||
|
|
4632c084a6 | ||
|
|
43022c8c8f | ||
|
|
1d89523b69 | ||
|
|
4fdcaf0cc7 | ||
|
|
7e470ba93b | ||
|
|
a9617effd0 | ||
|
|
1716d085b1 | ||
|
|
18914183d9 | ||
|
|
ce55c7fc7d | ||
|
|
808b909f27 | ||
|
|
f0f9aa979b | ||
|
|
0617eaff38 | ||
|
|
a3ec9e6c3b | ||
|
|
bd08442637 | ||
|
|
47871e33fb | ||
|
|
9b4df1505e | ||
|
|
126095a3e6 | ||
|
|
8296690f17 | ||
|
|
595a14576e | ||
|
|
fe57fad800 | ||
|
|
9cdfffc7ce | ||
|
|
9cc98b104e | ||
|
|
b73cc0ff07 | ||
|
|
b21236d838 | ||
|
|
7a74126eb8 | ||
|
|
39504d4517 | ||
|
|
8f674b13e8 | ||
|
|
87647e12e9 | ||
|
|
9f89b34f4d | ||
|
|
d9e690eb71 | ||
|
|
3bf31a5161 | ||
|
|
1299e93989 | ||
|
|
f1491358ff | ||
|
|
bf097e2a31 | ||
|
|
b32e75f3e1 | ||
|
|
640923da58 | ||
|
|
2e189b0677 | ||
|
|
53fea9cd68 | ||
|
|
3fafd7c0c4 | ||
|
|
858cbfa961 | ||
|
|
4b611cca1d | ||
|
|
897adbe920 | ||
|
|
d6baaf3649 | ||
|
|
c10a62a070 | ||
|
|
c2bc56dc65 | ||
|
|
ae5df22719 | ||
|
|
ad8e6236a4 | ||
|
|
e19a1c3cd9 | ||
|
|
aa30ee42c4 | ||
|
|
0bd1b2fbfe | ||
|
|
822cd79080 | ||
|
|
2f734e0a7e | ||
|
|
66ed65d1b7 | ||
|
|
33a1b09738 | ||
|
|
dea6647faa | ||
|
|
0bb3203216 | ||
|
|
a25169ea43 | ||
|
|
01446841be | ||
|
|
b4c38fdd69 | ||
|
|
e4b5f088ca | ||
|
|
97f4d2e8f4 | ||
|
|
1301637cc5 | ||
|
|
19d684e84f | ||
|
|
f8dd2aeebd | ||
|
|
99a0822e3c | ||
|
|
5e8c385e64 | ||
|
|
2dee13b8b8 | ||
|
|
21825a8d00 | ||
|
|
b7b9b499f4 | ||
|
|
28cf7340b9 | ||
|
|
1de63e34f1 | ||
|
|
56ae0ccb87 | ||
|
|
d11cc41b2b | ||
|
|
9b009c9f5a | ||
|
|
feb1f6a4ac | ||
|
|
bbece796a9 | ||
|
|
2bb3d8bdfe | ||
|
|
0375d5da0c | ||
|
|
6e1b2ebcd6 | ||
|
|
94c8b1aa0f | ||
|
|
06f12c290c | ||
|
|
2fddd0b746 | ||
|
|
e1e635578d | ||
|
|
66870de523 | ||
|
|
b40cb80704 | ||
|
|
0b3abc3faf | ||
|
|
62f58f434c | ||
|
|
f6cbc666f5 | ||
|
|
f4f9761c84 | ||
|
|
67298a4b2f | ||
|
|
81b172466c | ||
|
|
206bced36f | ||
|
|
36a91ab163 | ||
|
|
8138bb315d | ||
|
|
9054558fbd | ||
|
|
f0261e88a8 | ||
|
|
7931a483d7 | ||
|
|
d1a6976967 | ||
|
|
fc14ca7a8f | ||
|
|
5e4c83cfec | ||
|
|
8423b244ec | ||
|
|
e6f17474cb | ||
|
|
5fe21da364 | ||
|
|
5fe1a246cf | ||
|
|
43efd9fa56 | ||
|
|
b2eeaf6500 | ||
|
|
4fb42a8382 | ||
|
|
5c831a1a1b | ||
|
|
36e37042c6 | ||
|
|
8be3f42f6b | ||
|
|
967ecc6264 | ||
|
|
4a20a92f4f | ||
|
|
34aa790937 | ||
|
|
63fe5ccb87 | ||
|
|
be2d2c1599 | ||
|
|
9e3c3e4139 | ||
|
|
1b1f63339c | ||
|
|
d4678a75ed | ||
|
|
98e231525f | ||
|
|
da5795a32a | ||
|
|
d4196128b3 | ||
|
|
e49238474c | ||
|
|
56d69016f4 | ||
|
|
48cddfee7c | ||
|
|
41a0c85888 | ||
|
|
4c30c4d572 | ||
|
|
e60b3717f0 | ||
|
|
0262406cea | ||
|
|
72baa6528d | ||
|
|
3d8ab44d14 | ||
|
|
ee3555e8c0 | ||
|
|
db3822841c | ||
|
|
115019ee2c | ||
|
|
da4535c4b4 | ||
|
|
7bfb0145d6 | ||
|
|
db235e6588 | ||
|
|
3426f7118c | ||
|
|
6eeefeb3eb | ||
|
|
36c1674e0a | ||
|
|
588372b853 | ||
|
|
9de04a5713 | ||
|
|
1592bf7349 | ||
|
|
64a5004a66 | ||
|
|
1e9efeeb22 | ||
|
|
b1ae7a591a | ||
|
|
f3352b9bec | ||
|
|
cab0ee644d | ||
|
|
7780a3e5a4 | ||
|
|
699a26726c | ||
|
|
4c692849bc | ||
|
|
7f9bc71eca | ||
|
|
7fca810d87 | ||
|
|
470208d879 | ||
|
|
2341995e2d | ||
|
|
6dbc6fae49 | ||
|
|
99f467f016 | ||
|
|
8cccaeaee1 | ||
|
|
8c4b35bbd5 | ||
|
|
260696e5e3 | ||
|
|
f3bbe7772f | ||
|
|
a91e1db13e | ||
|
|
4b8b883127 | ||
|
|
e0806ab5ed | ||
|
|
d794aac9ca | ||
|
|
7aac53eb69 | ||
|
|
fe6b7ccc8d | ||
|
|
f56cdc894f | ||
|
|
11a4398874 | ||
|
|
b39ad8a69b | ||
|
|
50a8312c9f | ||
|
|
f8dbd659d0 | ||
|
|
6d858e75d4 | ||
|
|
fe5146716e | ||
|
|
18159f6f60 | ||
|
|
201c75e55a | ||
|
|
d472e353c8 | ||
|
|
a24d253a3f | ||
|
|
eb70ba210b | ||
|
|
3f543c371f | ||
|
|
847169dab2 | ||
|
|
ed29aefe31 | ||
|
|
68b62e1c45 | ||
|
|
aba9f3dd7e | ||
|
|
26f327f1f5 | ||
|
|
ff6e834f7d | ||
|
|
33f87146a8 | ||
|
|
e282509475 | ||
|
|
e6e233e73f | ||
|
|
ec495a6ade | ||
|
|
ed03e26c44 | ||
|
|
7f006841fc | ||
|
|
1d32e01f17 | ||
|
|
e78a28ffb5 | ||
|
|
fdacf913e1 | ||
|
|
539cad8f49 | ||
|
|
181232550d | ||
|
|
f1eda76d36 | ||
|
|
76d9120dd6 | ||
|
|
c6b5faa001 | ||
|
|
9aba20edee | ||
|
|
e8d86192fc | ||
|
|
aa7638fce5 | ||
|
|
6f2e507e7e | ||
|
|
7c7b389ae0 | ||
|
|
dcc35bf6a4 | ||
|
|
606e919ae3 | ||
|
|
34b1adb9b3 | ||
|
|
bae5d9fcb4 | ||
|
|
92551304a9 | ||
|
|
a8842a35df | ||
|
|
a9c2c07c96 | ||
|
|
5af0708e7f | ||
|
|
102e532c65 | ||
|
|
a22a4084dd | ||
|
|
ad82fd0a25 | ||
|
|
530ee49d07 | ||
|
|
98a5dc52bf | ||
|
|
687b7ef998 | ||
|
|
847ed3fccf | ||
|
|
0c5233171f | ||
|
|
cb8fd52bbe | ||
|
|
c5b14e2676 | ||
|
|
2f2b076705 | ||
|
|
355cc22e32 | ||
|
|
43f117d5f0 | ||
|
|
b3034d815c | ||
|
|
bdec94477c | ||
|
|
528baec07b | ||
|
|
ff8cd3afa7 | ||
|
|
6184f9fc1e | ||
|
|
c8563aaf86 | ||
|
|
0674850fcb | ||
|
|
130904d648 | ||
|
|
4b87939256 | ||
|
|
6db92bd107 | ||
|
|
cfa3ab7f89 | ||
|
|
7edac4480f | ||
|
|
452b30ddb3 | ||
|
|
39125379e5 | ||
|
|
faa96aba6d | ||
|
|
c2df80e759 | ||
|
|
9ec3c7b42d | ||
|
|
6668eca26b | ||
|
|
06a960c681 | ||
|
|
1eaad22e11 | ||
|
|
90989375ca | ||
|
|
bd3091eb7d | ||
|
|
cc0a5f7142 | ||
|
|
fa59c08f71 | ||
|
|
2c64908ae0 | ||
|
|
53e3724e23 | ||
|
|
0914e94965 | ||
|
|
59251c9e9c | ||
|
|
91579a2424 | ||
|
|
2c839b25ad |
@@ -1,4 +1,174 @@
|
||||
|
||||
--- 9.2.0rc8 released ---
|
||||
|
||||
1068. [bug] errno could be overwritten by catgets(). [RT #1921]
|
||||
|
||||
1066. [bug] Provide a thread safe wrapper for strerror().
|
||||
[RT #1689]
|
||||
|
||||
1064. [bug] Do not shut down active network interfaces if we
|
||||
are unable to scan the interface list. [RT #1921]
|
||||
|
||||
1063. [bug] libbind: "make install" was failing on IRIX.
|
||||
|
||||
1062. [bug] If the control channel listener socket was shut
|
||||
down before server exit, the listener object could
|
||||
be freed twice. [RT #1916]
|
||||
|
||||
1061. [bug] If periodic cache cleaning happened to start
|
||||
while cleaning due to reaching the configured
|
||||
maximum cache size was in progress, the server
|
||||
could catch an assertion failure. [RT #1912]
|
||||
|
||||
1057. [bug] Reloading the server after adding a "file" clause
|
||||
to a zone statement could cause the server to
|
||||
crash due to a typo in change 1016.
|
||||
|
||||
1056. [bug] Rndc could catch an assertion failure on SIGINT due
|
||||
to an uninitialized variable. [RT #1908]
|
||||
|
||||
--- 9.2.0rc7 released ---
|
||||
|
||||
1054. [bug] On Win32, cfg_categories and cfg_modules need to be
|
||||
exported from the libisccfg DLL.
|
||||
|
||||
1053. [bug] Dig did not increase its timeout when receiving
|
||||
AXFRs unless the +time option was used. [RT #1904]
|
||||
|
||||
1052. [bug] Journals were not being created in binary mode
|
||||
resulting in "journal format not recognized" error
|
||||
under Win32. [RT #1889]
|
||||
|
||||
1051. [bug] Do not ignore a network interface completely just
|
||||
because it has a noncontiguous netmask. Instead,
|
||||
omit it from the localnets ACL and issue a warning.
|
||||
[RT #1891]
|
||||
|
||||
1050. [bug] Log messages reporting malformed IP addresses in
|
||||
address lists such as that of the forwarders option
|
||||
failed to include the correct error code, file
|
||||
name, and line number. [RT #1890]
|
||||
|
||||
1048. [bug] Servers built with -DISC_MEM_USE_INTERNAL_MALLOC=1
|
||||
didn't work.
|
||||
|
||||
1047. [bug] named was incorrectly refusing all requests signed
|
||||
with a TSIG key derived from an unsigned TKEY
|
||||
negotiation with a NOERROR response. [RT #1886]
|
||||
|
||||
1046. [bug] The help message for the --with-openssl configure
|
||||
option was inaccurate. [RT #1880]
|
||||
|
||||
1045. [bug] It was possible to skip saving glue for a nameserver
|
||||
for a stub zone.
|
||||
|
||||
1044. [bug] Specifying allow-transfer, notify-source, or
|
||||
notify-source-v6 in a stub zone was not treated
|
||||
as an error.
|
||||
|
||||
1043. [bug] Specifying a transfer-source or transfer-source-v6
|
||||
option in the zone statement for a master zone was
|
||||
not treated as an error. [RT #1876]
|
||||
|
||||
1042. [bug] The "config" logging category did not work properly.
|
||||
[RT #1873]
|
||||
|
||||
1041. [bug] Dig/host/nslookup could catch an assertion failure
|
||||
on SIGINT due to an uninitialized variable. [RT #1867]
|
||||
|
||||
1040. [bug] Multiple listen-on-v6 options with different ports
|
||||
were not accepted. [RT #1875]
|
||||
|
||||
1039. [bug] Negative responses with CNAMEs in the answer section
|
||||
were cached incorrectly. [RT #1862]
|
||||
|
||||
1038. [bug] In servers configured with a tkey-domain option,
|
||||
TKEY queries with an owner name other than the root
|
||||
could cause an assertion failure. [RT #1866, #1869]
|
||||
|
||||
1033. [bug] Always respond to requests with an unsupported opcode
|
||||
with NOTIMP, even if we don't have a matching view
|
||||
or cannot determine the class.
|
||||
|
||||
--- 9.2.0rc6 released ---
|
||||
|
||||
1031. [bug] libbind.a: isc__gettimeofday() infinite recursion.
|
||||
[RT #1858]
|
||||
|
||||
1030. [bug] On systems with no resolv.conf file, nsupdate
|
||||
exited with an error rather than defaulting
|
||||
to using the loopback address. [RT #1836]
|
||||
|
||||
1029. [bug] Some named.conf errors did not cause the loading
|
||||
of the configuration file to return a failure
|
||||
status even though they were logged. [RT #1847]
|
||||
|
||||
1028. [bug] On Win32, dig/host/nslookup looked for resolv.conf
|
||||
in the wrong directory. [RT #1833]
|
||||
|
||||
1027. [bug] RRs having the reserved type 0 should be rejected.
|
||||
[RT #1471]
|
||||
|
||||
1026. [port] Recognize OpenUNIX 8 in config.guess. [RT #1830]
|
||||
|
||||
1022. [bug] Don't report empty root hints as "extra data".
|
||||
[RT #1802]
|
||||
|
||||
--- 9.2.0rc5 released ---
|
||||
|
||||
1021. [bug] On Win32, log message timestamps were one month
|
||||
later than they should have been, and the server
|
||||
would exhibit unspecified behavior in December.
|
||||
|
||||
1020. [bug] IXFR log messages did not distinguish between
|
||||
true IXFRs, AXFR-style IXFRs, and mere version
|
||||
polls. [RT #1811]
|
||||
|
||||
1019. [bug] The value of the lame-ttl option was limited to 18000
|
||||
seconds, not 1800 seconds as documented. [RT #1803]
|
||||
|
||||
1018. [bug] The default log channel was not always initialized
|
||||
correctly. [RT #1813]
|
||||
|
||||
1017. [bug] When specifying TSIG keys to dig and nsupdate using
|
||||
the -k option, they must be HMAC-MD5 keys. [RT #1810]
|
||||
|
||||
1016. [bug] Slave zones with no backup file were re-transferred
|
||||
on every server reload.
|
||||
|
||||
1015. [bug] Log channels that had a "versions" option but no
|
||||
"size" option failed to create numbered log
|
||||
files. [RT #1783]
|
||||
|
||||
--- 9.2.0rc4 released ---
|
||||
|
||||
1013. [bug] It was possible to cancel a query twice when marking
|
||||
a server as bogus or by having a blackhole acl.
|
||||
[RT #1776]
|
||||
|
||||
1010. [bug] The server could attempt to execute a command channel
|
||||
command after initiating server shutdown, causing
|
||||
an assertion failure. [RT #1766]
|
||||
|
||||
1006. [bug] If a KEY RR was found missing during DNSSEC validation,
|
||||
an assertion failure could subsequently be triggered
|
||||
in the resolver. [RT #1763]
|
||||
|
||||
1005. [bug] Don't copy nonzero RCODEs from request to response.
|
||||
[RT #1765]
|
||||
|
||||
1004. [port] Deal with recvfrom() returning EHOSTDOWN. [RT #1770]
|
||||
|
||||
1002. [bug] When reporting an unknown class name in named.conf,
|
||||
including the file name and line number. [RT #1759]
|
||||
|
||||
1001. [bug] win32 socket code doio_recv was not catching a
|
||||
WSACONNRESET error when a client was timing out
|
||||
the request and closing its socket. [RT #1745]
|
||||
|
||||
1000. [bug] BIND 8 compatibility: accept "HESIOD" as an alias
|
||||
for class "HS". [RT #1759]
|
||||
|
||||
--- 9.2.0rc3 released ---
|
||||
|
||||
990. [bug] The rndc-confgen man page was not installed.
|
||||
@@ -35,7 +205,7 @@
|
||||
(NOTAUTH)".
|
||||
|
||||
972. [bug] The file modification time code in zone.c was using the
|
||||
wrong epoch. [RT #1667]
|
||||
wrong epoch. [RT #1667]
|
||||
|
||||
968. [bug] On win32, the isc_time_now() function was unnecessarily
|
||||
calling strtime(). [RT #1671]
|
||||
@@ -1420,7 +1590,7 @@
|
||||
reload. [RT #410]
|
||||
|
||||
528. [func] The ISC_LIST_XXXX macros now perform sanity checks
|
||||
on their arguements. ISC_LIST_XXXXUNSAFE can be use
|
||||
on their arguments. ISC_LIST_XXXXUNSAFE can be use
|
||||
to skip the checks however use with caution.
|
||||
|
||||
527. [func] New function dns_rdata_clone().
|
||||
@@ -2431,7 +2601,7 @@
|
||||
242. [cleanup] fixed incorrect warning about auth-nxdomain usage.
|
||||
|
||||
241. [cleanup] nscount and soacount have been removed from the
|
||||
dns_master_*() arguement lists.
|
||||
dns_master_*() argument lists.
|
||||
|
||||
240. [func] databases now come in three flavours: zone, cache
|
||||
and stub.
|
||||
@@ -2647,10 +2817,10 @@
|
||||
188. [func] Log a warning message when an incoming zone transfer
|
||||
contains out-of-zone data.
|
||||
|
||||
187. [func] isc_ratelimter_enqueue() has an additional arguement
|
||||
187. [func] isc_ratelimter_enqueue() has an additional argument
|
||||
'task'.
|
||||
|
||||
186. [func] dns_request_getresponse() has an additional arguement
|
||||
186. [func] dns_request_getresponse() has an additional argument
|
||||
'preserve_order'.
|
||||
|
||||
185. [bug] Fixed up handling of ISC_MEMCLUSTER_LEGACY. Several
|
||||
|
||||
@@ -65,12 +65,13 @@ A: This is often caused by TXT records with missing close quotes. Check that
|
||||
all TXT records containing quoted strings have both open and close quotes.
|
||||
|
||||
|
||||
Q: How do I produce a usable core file from a multithreaded named
|
||||
on Linux?
|
||||
Q: How do I produce a usable core file from a multithreaded named on Linux?
|
||||
|
||||
A: Apply the kernel patch found in bind9/linux/coredump-patch and rebuild
|
||||
the kernel. This patch causes multithreaded programs to dump the correct
|
||||
thread.
|
||||
A: If the Linux kernel is 2.4.7 or newer, multithreaded core dumps
|
||||
are usable (that is, the correct thread is dumped). Otherwise, if using
|
||||
a 2.2 kernel, apply the kernel patch found in contrib/linux/coredump-patch
|
||||
and rebuild the kernel. This patch will cause multithreaded programs to dump
|
||||
the correct thread.
|
||||
|
||||
|
||||
Q: How do I restrict people from looking up the server version?
|
||||
@@ -144,7 +145,7 @@ Q: I keep getting log messages like the following. Why?
|
||||
|
||||
Jun 21 12:00:00.000 client 10.0.0.1#1234: update denied
|
||||
|
||||
Someone is trying to update your DNS data using the RFC2136 Dynamic
|
||||
A: Someone is trying to update your DNS data using the RFC2136 Dynamic
|
||||
Update protocol. Windows 2000 machines have a habit of sending dynamic
|
||||
update requests to DNS servers without being specifically configured to
|
||||
do so. If the update requests are coming from a Windows 2000 machine,
|
||||
@@ -156,7 +157,7 @@ Q: I see a log message like the following. Why?
|
||||
|
||||
couldn't open pid file '/var/run/named.pid': Permission denied
|
||||
|
||||
You are most likely running named as a non-root user, and that user
|
||||
A: You are most likely running named as a non-root user, and that user
|
||||
does not have permission to write in /var/run. The common ways of
|
||||
fixing this are to create a /var/run/named directory owned by the named
|
||||
user and set pid-file to "/var/run/named/named.pid", or set
|
||||
@@ -187,3 +188,24 @@ depending on whether they were last received as answers or as glue.
|
||||
You can always look up the addresses with explicit queries like
|
||||
"dig a.root-servers.net A".
|
||||
|
||||
|
||||
Q: Zone transfers from my BIND 9 master to my Windows 2000 slave
|
||||
fail. Why?
|
||||
|
||||
A: This may be caused by a bug in the Windows 2000 DNS server where
|
||||
DNS messages larger than 16K are not handled properly. This can be
|
||||
worked around by setting the option "transfer-format one-answer;".
|
||||
Also check whether your zone contains domain names with embedded
|
||||
spaces or other special characters, like "John\032Doe\213s\032Computer",
|
||||
since such names have been known to cause Windows 2000 slaves to
|
||||
incorrectly reject the zone.
|
||||
|
||||
|
||||
Q: Why don't my zones reload when I do an "rndc reload" or SIGHUP?
|
||||
|
||||
A: A zone can be updated either by editing zone files and reloading
|
||||
the server or by dynamic update, but not both. If you have enabled
|
||||
dynamic update for a zone using the "allow-update" option, you are not
|
||||
supposed to edit the zone file by hand, and the server will not
|
||||
attempt to reload it.
|
||||
|
||||
|
||||
@@ -44,10 +44,10 @@ BIND 9
|
||||
Nominum, Inc.
|
||||
|
||||
|
||||
BIND 9.2.0rc3
|
||||
BIND 9.2.0rc8
|
||||
|
||||
BIND 9.2.0rc3 is a release candidate for BIND 9.2.0.
|
||||
It fixes a number of bugs in 9.2.0rc2.
|
||||
BIND 9.2.0rc8 is a release candidate for BIND 9.2.0.
|
||||
It fixes a number of bugs in 9.2.0rc7.
|
||||
|
||||
BIND 9.2.0 has a number of new features over 9.1,
|
||||
including:
|
||||
@@ -163,9 +163,10 @@ Building
|
||||
SuSE Linux 7.0
|
||||
Slackware Linux 7.x, 8.0
|
||||
Red Hat Linux 7.1
|
||||
OpenBSD 2.6, 2.8, -current
|
||||
OpenBSD 2.6, 2.8, 2.9
|
||||
UnixWare 7.1.1
|
||||
HP-UX 10.20
|
||||
BSD/OS 4.2
|
||||
|
||||
To build, just
|
||||
|
||||
@@ -197,7 +198,8 @@ Building
|
||||
To build shared libraries, specify "--with-libtool" on the
|
||||
configure command line.
|
||||
|
||||
To build with DNSSEC support, you must have OpenSSL 0.9.5a
|
||||
For the server to support DNSSEC, you need to build it
|
||||
with crypto support. You must have OpenSSL 0.9.5a
|
||||
or newer installed and specify "--with-openssl" on the
|
||||
configure command line. If OpenSSL is installed under
|
||||
a nonstandard prefix, you can tell configure where to
|
||||
|
||||
+10
-1
@@ -15,7 +15,7 @@
|
||||
* WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
|
||||
*/
|
||||
|
||||
/* $Id: acconfig.h,v 1.35 2001/07/14 01:55:04 gson Exp $ */
|
||||
/* $Id: acconfig.h,v 1.35.2.1 2001/10/22 23:28:07 gson Exp $ */
|
||||
|
||||
/***
|
||||
*** This file is not to be included by any public header files, because
|
||||
@@ -23,6 +23,9 @@
|
||||
***/
|
||||
@TOP@
|
||||
|
||||
/* define to `int' if <sys/types.h> doesn't define. */
|
||||
#undef ssize_t
|
||||
|
||||
/* define on DEC OSF to enable 4.4BSD style sa_len support */
|
||||
#undef _SOCKADDR_LEN
|
||||
|
||||
@@ -44,6 +47,9 @@
|
||||
/* define if sysconf() is available */
|
||||
#undef HAVE_SYSCONF
|
||||
|
||||
/* define if sysctlbyname() is available */
|
||||
#undef HAVE_SYSCTLBYNAME
|
||||
|
||||
/* define if catgets() is available */
|
||||
#undef HAVE_CATGETS
|
||||
|
||||
@@ -120,3 +126,6 @@ int sigwait(const unsigned int *set, int *sig);
|
||||
|
||||
/* define if pthread_attr_getstacksize() is available */
|
||||
#undef HAVE_PTHREAD_ATTR_GETSTACKSIZE
|
||||
|
||||
/* define if you have strerror in the C library. */
|
||||
#undef HAVE_STRERROR
|
||||
|
||||
+2
-1
@@ -15,7 +15,7 @@
|
||||
* WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
|
||||
*/
|
||||
|
||||
/* $Id: dig.c,v 1.157.2.1 2001/09/11 01:37:48 gson Exp $ */
|
||||
/* $Id: dig.c,v 1.157.2.2 2001/09/18 01:04:05 gson Exp $ */
|
||||
|
||||
#include <config.h>
|
||||
#include <stdlib.h>
|
||||
@@ -793,6 +793,7 @@ plus_option(char *option, isc_boolean_t is_batchfile,
|
||||
if (state) {
|
||||
printcmd = ISC_FALSE;
|
||||
lookup->section_additional = ISC_FALSE;
|
||||
lookup->section_answer = ISC_TRUE;
|
||||
lookup->section_authority = ISC_FALSE;
|
||||
lookup->section_question = ISC_FALSE;
|
||||
lookup->comments = ISC_FALSE;
|
||||
|
||||
+7
-4
@@ -15,7 +15,7 @@
|
||||
* WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
|
||||
*/
|
||||
|
||||
/* $Id: dighost.c,v 1.221.2.1 2001/09/12 00:15:11 gson Exp $ */
|
||||
/* $Id: dighost.c,v 1.221.2.5 2001/10/15 23:06:07 bwelling Exp $ */
|
||||
|
||||
/*
|
||||
* Notice to programmers: Do not use this code as an example of how to
|
||||
@@ -376,6 +376,7 @@ make_empty_lookup(void) {
|
||||
looknew->cdflag = ISC_FALSE;
|
||||
looknew->ns_search_only = ISC_FALSE;
|
||||
looknew->origin = NULL;
|
||||
looknew->tsigctx = NULL;
|
||||
looknew->querysig = NULL;
|
||||
looknew->retries = tries;
|
||||
looknew->nsfound = 0;
|
||||
@@ -447,6 +448,7 @@ clone_lookup(dig_lookup_t *lookold, isc_boolean_t servers) {
|
||||
looknew->section_authority = lookold->section_authority;
|
||||
looknew->section_additional = lookold->section_additional;
|
||||
looknew->retries = lookold->retries;
|
||||
looknew->tsigctx = NULL;
|
||||
#ifdef DNS_OPT_NEWCODES_LIVE
|
||||
strncpy(looknew->viewname, lookold->viewname, MXNAME);
|
||||
strncpy(looknew->zonename, lookold->zonename, MXNAME);
|
||||
@@ -555,6 +557,7 @@ setup_file_key(void) {
|
||||
if (result != ISC_R_SUCCESS) {
|
||||
printf(";; Couldn't create key %s: %s\n",
|
||||
keynametext, isc_result_totext(result));
|
||||
goto failure;
|
||||
}
|
||||
dstkey = NULL;
|
||||
failure:
|
||||
@@ -593,7 +596,7 @@ setup_system(void) {
|
||||
|
||||
free_now = ISC_FALSE;
|
||||
get_servers = ISC_TF(server_list.head == NULL);
|
||||
fp = fopen(RESOLVCONF, "r");
|
||||
fp = fopen(RESOLV_CONF, "r");
|
||||
/* XXX Use lwres resolv.conf reader */
|
||||
if (fp == NULL)
|
||||
goto no_file;
|
||||
@@ -2351,9 +2354,9 @@ recv_done(isc_task_t *task, isc_event_t *event) {
|
||||
|
||||
if (timeout == 0) {
|
||||
if (l->tcp_mode)
|
||||
local_timeout = TCP_TIMEOUT;
|
||||
local_timeout = TCP_TIMEOUT * 4;
|
||||
else
|
||||
local_timeout = UDP_TIMEOUT;
|
||||
local_timeout = UDP_TIMEOUT * 4;
|
||||
} else {
|
||||
if (timeout < (INT_MAX / 4))
|
||||
local_timeout = timeout * 4;
|
||||
|
||||
@@ -15,7 +15,7 @@
|
||||
* WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
|
||||
*/
|
||||
|
||||
/* $Id: dig.h,v 1.71 2001/08/08 22:54:15 gson Exp $ */
|
||||
/* $Id: dig.h,v 1.71.2.2 2001/10/04 22:21:45 gson Exp $ */
|
||||
|
||||
#ifndef DIG_H
|
||||
#define DIG_H
|
||||
@@ -40,7 +40,9 @@
|
||||
#define MXRD 32
|
||||
#define BUFSIZE 512
|
||||
#define COMMSIZE 0xffff
|
||||
#define RESOLVCONF "/etc/resolv.conf"
|
||||
#ifndef RESOLV_CONF
|
||||
#define RESOLV_CONF "/etc/resolv.conf"
|
||||
#endif
|
||||
#define OUTPUTBUF 32767
|
||||
#define MAXRRLIMIT 0xffffffff
|
||||
#define MAXTIMEOUT 0xffff
|
||||
@@ -191,7 +193,7 @@ void
|
||||
get_address(char *host, in_port_t port, isc_sockaddr_t *sockaddr);
|
||||
|
||||
isc_result_t
|
||||
get_reverse(char reverse[MXNAME], char *value, isc_boolean_t nibble);
|
||||
get_reverse(char *reverse, char *value, isc_boolean_t nibble);
|
||||
|
||||
void
|
||||
fatal(const char *format, ...) ISC_FORMAT_PRINTF(1, 2);
|
||||
|
||||
@@ -17,7 +17,7 @@
|
||||
* PERFORMANCE OF THIS SOFTWARE.
|
||||
*/
|
||||
|
||||
/* $Id: dnssec-keygen.c,v 1.48 2001/07/10 18:53:09 bwelling Exp $ */
|
||||
/* $Id: dnssec-keygen.c,v 1.48.2.1 2001/10/05 00:21:44 bwelling Exp $ */
|
||||
|
||||
#include <config.h>
|
||||
|
||||
@@ -40,7 +40,6 @@
|
||||
#include <dns/secalg.h>
|
||||
|
||||
#include <dst/dst.h>
|
||||
#include <dst/result.h>
|
||||
|
||||
#include "dnssectool.h"
|
||||
|
||||
@@ -342,7 +341,7 @@ main(int argc, char **argv) {
|
||||
dns_name_format(name, namestr, sizeof namestr);
|
||||
alg_format(alg, algstr, sizeof algstr);
|
||||
fatal("failed to generate key %s/%s: %s\n",
|
||||
namestr, algstr, dst_result_totext(ret));
|
||||
namestr, algstr, isc_result_totext(ret));
|
||||
exit(-1);
|
||||
}
|
||||
|
||||
|
||||
@@ -80,7 +80,7 @@ The default is 3600 seconds.
|
||||
Sets the debugging level.
|
||||
.TP
|
||||
\fBkey\fR
|
||||
Lists the keys included in the keyset file. These keys
|
||||
The list of keys to be included in the keyset file. These keys
|
||||
are expressed in the form \fIKnnnn.+aaa+iiiii\fR
|
||||
as generated by \fBdnssec-keygen\fR.
|
||||
.SH "EXAMPLE"
|
||||
|
||||
@@ -17,7 +17,7 @@
|
||||
* PERFORMANCE OF THIS SOFTWARE.
|
||||
*/
|
||||
|
||||
/* $Id: dnssec-makekeyset.c,v 1.52 2001/05/10 06:04:56 bwelling Exp $ */
|
||||
/* $Id: dnssec-makekeyset.c,v 1.52.2.1 2001/10/05 00:21:45 bwelling Exp $ */
|
||||
|
||||
#include <config.h>
|
||||
|
||||
@@ -214,7 +214,8 @@ main(int argc, char *argv[]) {
|
||||
eflags |= ISC_ENTROPY_GOODONLY;
|
||||
result = dst_lib_init(mctx, ectx, eflags);
|
||||
if (result != ISC_R_SUCCESS)
|
||||
fatal("could not initialize dst");
|
||||
fatal("could not initialize dst: %s",
|
||||
isc_result_totext(result));
|
||||
|
||||
isc_stdtime_get(&now);
|
||||
|
||||
@@ -252,7 +253,8 @@ main(int argc, char *argv[]) {
|
||||
result = dst_key_fromnamedfile(argv[i], DST_TYPE_PUBLIC,
|
||||
mctx, &key);
|
||||
if (result != ISC_R_SUCCESS)
|
||||
fatal("error loading key from %s", argv[i]);
|
||||
fatal("error loading key from %s: %s", argv[i],
|
||||
isc_result_totext(result));
|
||||
if (rdatalist.rdclass == 0)
|
||||
rdatalist.rdclass = dst_key_class(key);
|
||||
|
||||
|
||||
@@ -16,7 +16,7 @@
|
||||
- WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
|
||||
-->
|
||||
|
||||
<!-- $Id: dnssec-makekeyset.docbook,v 1.2 2001/04/10 21:50:30 bwelling Exp $ -->
|
||||
<!-- $Id: dnssec-makekeyset.docbook,v 1.2.2.1 2001/09/14 20:29:32 gson Exp $ -->
|
||||
|
||||
<refentry>
|
||||
<refentryinfo>
|
||||
@@ -166,7 +166,7 @@
|
||||
<term>key</term>
|
||||
<listitem>
|
||||
<para>
|
||||
Lists the keys included in the keyset file. These keys
|
||||
The list of keys to be included in the keyset file. These keys
|
||||
are expressed in the form <filename>Knnnn.+aaa+iiiii</filename>
|
||||
as generated by <command>dnssec-keygen</command>.
|
||||
</para>
|
||||
|
||||
@@ -281,7 +281,7 @@ CLASS="REPLACEABLE"
|
||||
>key</DT
|
||||
><DD
|
||||
><P
|
||||
> Lists the keys included in the keyset file. These keys
|
||||
> The list of keys to be included in the keyset file. These keys
|
||||
are expressed in the form <TT
|
||||
CLASS="FILENAME"
|
||||
>Knnnn.+aaa+iiiii</TT
|
||||
|
||||
@@ -17,7 +17,7 @@
|
||||
* PERFORMANCE OF THIS SOFTWARE.
|
||||
*/
|
||||
|
||||
/* $Id: dnssec-signkey.c,v 1.50 2001/05/10 06:04:57 bwelling Exp $ */
|
||||
/* $Id: dnssec-signkey.c,v 1.50.2.1 2001/10/05 00:21:46 bwelling Exp $ */
|
||||
|
||||
#include <config.h>
|
||||
|
||||
@@ -247,7 +247,8 @@ main(int argc, char *argv[]) {
|
||||
eflags |= ISC_ENTROPY_GOODONLY;
|
||||
result = dst_lib_init(mctx, ectx, eflags);
|
||||
if (result != ISC_R_SUCCESS)
|
||||
fatal("could not initialize dst");
|
||||
fatal("could not initialize dst: %s",
|
||||
isc_result_totext(result));
|
||||
|
||||
isc_stdtime_get(&now);
|
||||
|
||||
|
||||
@@ -17,7 +17,7 @@
|
||||
* PERFORMANCE OF THIS SOFTWARE.
|
||||
*/
|
||||
|
||||
/* $Id: dnssec-signzone.c,v 1.139 2001/07/22 06:09:41 mayer Exp $ */
|
||||
/* $Id: dnssec-signzone.c,v 1.139.2.1 2001/10/05 00:21:48 bwelling Exp $ */
|
||||
|
||||
#include <config.h>
|
||||
|
||||
@@ -491,7 +491,8 @@ hasnullkey(dns_rdataset_t *rdataset) {
|
||||
result = dns_dnssec_keyfromrdata(dns_rootname,
|
||||
&rdata, mctx, &key);
|
||||
if (result != ISC_R_SUCCESS)
|
||||
fatal("could not convert KEY into internal format");
|
||||
fatal("could not convert KEY into internal format: %s",
|
||||
isc_result_totext(result));
|
||||
if (dst_key_isnullkey(key))
|
||||
found = ISC_TRUE;
|
||||
dst_key_free(&key);
|
||||
@@ -1684,7 +1685,8 @@ main(int argc, char *argv[]) {
|
||||
DST_TYPE_PRIVATE,
|
||||
mctx, &newkey);
|
||||
if (result != ISC_R_SUCCESS)
|
||||
fatal("cannot load key %s", argv[i]);
|
||||
fatal("cannot load key %s: %s", argv[i],
|
||||
isc_result_totext(result));
|
||||
|
||||
key = ISC_LIST_HEAD(keylist);
|
||||
while (key != NULL) {
|
||||
|
||||
+23
-13
@@ -15,7 +15,7 @@
|
||||
* WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
|
||||
*/
|
||||
|
||||
/* $Id: client.c,v 1.176 2001/08/08 22:54:18 gson Exp $ */
|
||||
/* $Id: client.c,v 1.176.2.4 2001/10/12 19:14:47 gson Exp $ */
|
||||
|
||||
#include <config.h>
|
||||
|
||||
@@ -1223,6 +1223,7 @@ client_request(isc_task_t *task, isc_event_t *event) {
|
||||
int match;
|
||||
dns_messageid_t id;
|
||||
unsigned int flags;
|
||||
isc_boolean_t notimp;
|
||||
|
||||
REQUIRE(event != NULL);
|
||||
client = event->ev_arg;
|
||||
@@ -1370,6 +1371,20 @@ client_request(isc_task_t *task, isc_event_t *event) {
|
||||
goto cleanup;
|
||||
}
|
||||
|
||||
switch (client->message->opcode) {
|
||||
case dns_opcode_query:
|
||||
case dns_opcode_update:
|
||||
case dns_opcode_notify:
|
||||
notimp = ISC_FALSE;
|
||||
break;
|
||||
case dns_opcode_iquery:
|
||||
default:
|
||||
notimp = ISC_TRUE;
|
||||
break;
|
||||
}
|
||||
|
||||
client->message->rcode = dns_rcode_noerror;
|
||||
|
||||
/*
|
||||
* Deal with EDNS.
|
||||
*/
|
||||
@@ -1439,7 +1454,7 @@ client_request(isc_task_t *task, isc_event_t *event) {
|
||||
"message class could not be determined");
|
||||
ns_client_dumpmessage(client,
|
||||
"message class could not be determined");
|
||||
ns_client_error(client, DNS_R_FORMERR);
|
||||
ns_client_error(client, notimp ? DNS_R_NOTIMP : DNS_R_FORMERR);
|
||||
goto cleanup;
|
||||
}
|
||||
|
||||
@@ -1488,7 +1503,7 @@ client_request(isc_task_t *task, isc_event_t *event) {
|
||||
NS_LOGMODULE_CLIENT, ISC_LOG_DEBUG(1),
|
||||
"no matching view in class '%s'", classname);
|
||||
ns_client_dumpmessage(client, "no matching view in class");
|
||||
ns_client_error(client, DNS_R_REFUSED);
|
||||
ns_client_error(client, notimp ? DNS_R_NOTIMP : DNS_R_REFUSED);
|
||||
goto cleanup;
|
||||
}
|
||||
|
||||
@@ -1519,22 +1534,17 @@ client_request(isc_task_t *task, isc_event_t *event) {
|
||||
ns_client_log(client, DNS_LOGCATEGORY_SECURITY,
|
||||
NS_LOGMODULE_CLIENT, ISC_LOG_DEBUG(3),
|
||||
"request is signed by a nonauthoritative key");
|
||||
/*
|
||||
* Accept update messages signed by unknown keys so that
|
||||
* update forwarding works transparently through slaves
|
||||
* that don't have all the same keys as the master.
|
||||
*/
|
||||
if (!(client->message->tsigstatus == dns_tsigerror_badkey &&
|
||||
client->message->opcode == dns_opcode_update)) {
|
||||
ns_client_error(client, sigresult);
|
||||
goto cleanup;
|
||||
}
|
||||
} else {
|
||||
/* There is a signature, but it is bad. */
|
||||
ns_client_log(client, DNS_LOGCATEGORY_SECURITY,
|
||||
NS_LOGMODULE_CLIENT, ISC_LOG_ERROR,
|
||||
"request has invalid signature: %s",
|
||||
isc_result_totext(result));
|
||||
/*
|
||||
* Accept update messages signed by unknown keys so that
|
||||
* update forwarding works transparently through slaves
|
||||
* that don't have all the same keys as the master.
|
||||
*/
|
||||
if (!(client->message->tsigstatus == dns_tsigerror_badkey &&
|
||||
client->message->opcode == dns_opcode_update)) {
|
||||
ns_client_error(client, sigresult);
|
||||
|
||||
+7
-2
@@ -15,7 +15,7 @@
|
||||
* WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
|
||||
*/
|
||||
|
||||
/* $Id: config.c,v 1.11 2001/08/07 01:58:54 marka Exp $ */
|
||||
/* $Id: config.c,v 1.11.2.1 2001/09/21 20:30:32 gson Exp $ */
|
||||
|
||||
#include <config.h>
|
||||
|
||||
@@ -181,6 +181,7 @@ ns_config_getclass(cfg_obj_t *classobj, dns_rdataclass_t defclass,
|
||||
dns_rdataclass_t *classp) {
|
||||
char *str;
|
||||
isc_textregion_t r;
|
||||
isc_result_t result;
|
||||
|
||||
if (!cfg_obj_isstring(classobj)) {
|
||||
*classp = defclass;
|
||||
@@ -189,7 +190,11 @@ ns_config_getclass(cfg_obj_t *classobj, dns_rdataclass_t defclass,
|
||||
str = cfg_obj_asstring(classobj);
|
||||
r.base = str;
|
||||
r.length = strlen(str);
|
||||
return (dns_rdataclass_fromtext(classp, &r));
|
||||
result = dns_rdataclass_fromtext(classp, &r);
|
||||
if (result != ISC_R_SUCCESS)
|
||||
cfg_obj_log(classobj, ns_g_lctx, ISC_LOG_ERROR,
|
||||
"unknown class '%s'", str);
|
||||
return (result);
|
||||
}
|
||||
|
||||
dns_zonetype_t
|
||||
|
||||
+30
-20
@@ -15,7 +15,7 @@
|
||||
* WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
|
||||
*/
|
||||
|
||||
/* $Id: controlconf.c,v 1.28 2001/08/06 11:28:21 gson Exp $ */
|
||||
/* $Id: controlconf.c,v 1.28.2.5 2001/10/19 22:29:08 bwelling Exp $ */
|
||||
|
||||
#include <config.h>
|
||||
|
||||
@@ -105,6 +105,7 @@ struct controllistener {
|
||||
struct ns_controls {
|
||||
ns_server_t *server;
|
||||
controllistenerlist_t listeners;
|
||||
isc_boolean_t shuttingdown;
|
||||
};
|
||||
|
||||
static void control_newconn(isc_task_t *task, isc_event_t *event);
|
||||
@@ -177,11 +178,14 @@ maybe_free_connection(controlconnection_t *conn) {
|
||||
|
||||
static void
|
||||
shutdown_listener(controllistener_t *listener) {
|
||||
isc_boolean_t destroy = ISC_TRUE;
|
||||
controlconnection_t *conn;
|
||||
controlconnection_t *next;
|
||||
|
||||
if (!listener->exiting) {
|
||||
char socktext[ISC_SOCKADDR_FORMATSIZE];
|
||||
|
||||
ISC_LIST_UNLINK(listener->controls->listeners, listener, link);
|
||||
|
||||
isc_sockaddr_format(&listener->address, socktext,
|
||||
sizeof(socktext));
|
||||
isc_log_write(ns_g_lctx, NS_LOGCATEGORY_GENERAL,
|
||||
@@ -190,23 +194,19 @@ shutdown_listener(controllistener_t *listener) {
|
||||
listener->exiting = ISC_TRUE;
|
||||
}
|
||||
|
||||
if (!ISC_LIST_EMPTY(listener->connections)) {
|
||||
controlconnection_t *conn;
|
||||
for (conn = ISC_LIST_HEAD(listener->connections);
|
||||
conn != NULL;
|
||||
conn = ISC_LIST_NEXT(conn, link))
|
||||
maybe_free_connection(conn);
|
||||
destroy = ISC_FALSE;
|
||||
for (conn = ISC_LIST_HEAD(listener->connections);
|
||||
conn != NULL;
|
||||
conn = next)
|
||||
{
|
||||
next = ISC_LIST_NEXT(conn, link);
|
||||
maybe_free_connection(conn);
|
||||
}
|
||||
|
||||
if (listener->sock != NULL) {
|
||||
if (listener->listening)
|
||||
isc_socket_cancel(listener->sock, listener->task,
|
||||
ISC_SOCKCANCEL_ACCEPT);
|
||||
destroy = ISC_FALSE;
|
||||
}
|
||||
|
||||
if (destroy)
|
||||
free_listener(listener);
|
||||
maybe_free_listener(listener);
|
||||
}
|
||||
|
||||
static isc_boolean_t
|
||||
@@ -333,6 +333,10 @@ control_recvmessage(isc_task_t *task, isc_event_t *event) {
|
||||
listener = conn->listener;
|
||||
secret.rstart = NULL;
|
||||
|
||||
/* Is the server shutting down? */
|
||||
if (listener->controls->shuttingdown)
|
||||
goto cleanup;
|
||||
|
||||
if (conn->ccmsg.result != ISC_R_SUCCESS) {
|
||||
if (conn->ccmsg.result != ISC_R_CANCELED &&
|
||||
conn->ccmsg.result != ISC_R_EOF)
|
||||
@@ -515,10 +519,10 @@ control_newconn(isc_task_t *task, isc_event_t *event) {
|
||||
|
||||
UNUSED(task);
|
||||
|
||||
listener->listening = ISC_FALSE;
|
||||
|
||||
if (nevent->result != ISC_R_SUCCESS) {
|
||||
if (nevent->result == ISC_R_CANCELED) {
|
||||
isc_socket_detach(&listener->sock);
|
||||
listener->listening = ISC_FALSE;
|
||||
shutdown_listener(listener);
|
||||
goto cleanup;
|
||||
}
|
||||
@@ -554,8 +558,8 @@ control_newconn(isc_task_t *task, isc_event_t *event) {
|
||||
isc_event_free(&event);
|
||||
}
|
||||
|
||||
void
|
||||
ns_controls_shutdown(ns_controls_t *controls) {
|
||||
static void
|
||||
controls_shutdown(ns_controls_t *controls) {
|
||||
controllistener_t *listener;
|
||||
controllistener_t *next;
|
||||
|
||||
@@ -568,11 +572,16 @@ ns_controls_shutdown(ns_controls_t *controls) {
|
||||
* call their callbacks.
|
||||
*/
|
||||
next = ISC_LIST_NEXT(listener, link);
|
||||
ISC_LIST_UNLINK(controls->listeners, listener, link);
|
||||
shutdown_listener(listener);
|
||||
}
|
||||
}
|
||||
|
||||
void
|
||||
ns_controls_shutdown(ns_controls_t *controls) {
|
||||
controls_shutdown(controls);
|
||||
controls->shuttingdown = ISC_TRUE;
|
||||
}
|
||||
|
||||
static isc_result_t
|
||||
cfgkeylist_find(cfg_obj_t *keylist, const char *keyname, cfg_obj_t **objp) {
|
||||
cfg_listelt_t *element;
|
||||
@@ -1200,7 +1209,7 @@ ns_controls_configure(ns_controls_t *cp, cfg_obj_t *config,
|
||||
* were in the previous configuration (if any) that do not
|
||||
* remain in the current configuration.
|
||||
*/
|
||||
ns_controls_shutdown(cp);
|
||||
controls_shutdown(cp);
|
||||
|
||||
/*
|
||||
* Put all of the valid listeners on the listeners list.
|
||||
@@ -1219,6 +1228,7 @@ ns_controls_create(ns_server_t *server, ns_controls_t **ctrlsp) {
|
||||
return (ISC_R_NOMEMORY);
|
||||
controls->server = server;
|
||||
ISC_LIST_INIT(controls->listeners);
|
||||
controls->shuttingdown = ISC_FALSE;
|
||||
*ctrlsp = controls;
|
||||
return (ISC_R_SUCCESS);
|
||||
}
|
||||
|
||||
+72
-60
@@ -15,7 +15,7 @@
|
||||
* WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
|
||||
*/
|
||||
|
||||
/* $Id: interfacemgr.c,v 1.59 2001/06/15 23:18:04 gson Exp $ */
|
||||
/* $Id: interfacemgr.c,v 1.59.2.3 2001/10/22 17:42:05 gson Exp $ */
|
||||
|
||||
#include <config.h>
|
||||
|
||||
@@ -469,14 +469,14 @@ clearacl(isc_mem_t *mctx, dns_acl_t **aclp) {
|
||||
return (ISC_R_SUCCESS);
|
||||
}
|
||||
|
||||
static void
|
||||
static isc_result_t
|
||||
do_ipv4(ns_interfacemgr_t *mgr) {
|
||||
isc_interfaceiter_t *iter = NULL;
|
||||
isc_result_t result;
|
||||
|
||||
result = isc_interfaceiter_create(mgr->mctx, &iter);
|
||||
if (result != ISC_R_SUCCESS)
|
||||
return;
|
||||
return (result);
|
||||
|
||||
result = clearacl(mgr->mctx, &mgr->aclenv.localhost);
|
||||
if (result != ISC_R_SUCCESS)
|
||||
@@ -505,23 +505,32 @@ do_ipv4(ns_interfacemgr_t *mgr) {
|
||||
if ((interface.flags & INTERFACE_F_UP) == 0)
|
||||
continue;
|
||||
|
||||
result = isc_netaddr_masktoprefixlen(&interface.netmask,
|
||||
&prefixlen);
|
||||
if (result != ISC_R_SUCCESS)
|
||||
goto ignore_interface;
|
||||
elt.type = dns_aclelementtype_ipprefix;
|
||||
elt.negative = ISC_FALSE;
|
||||
elt.u.ip_prefix.address = interface.address;
|
||||
elt.u.ip_prefix.prefixlen = prefixlen;
|
||||
/* XXX suppress duplicates */
|
||||
result = dns_acl_appendelement(mgr->aclenv.localnets, &elt);
|
||||
if (result != ISC_R_SUCCESS)
|
||||
goto ignore_interface;
|
||||
elt.u.ip_prefix.prefixlen = 32;
|
||||
result = dns_acl_appendelement(mgr->aclenv.localhost, &elt);
|
||||
if (result != ISC_R_SUCCESS)
|
||||
goto ignore_interface;
|
||||
|
||||
result = isc_netaddr_masktoprefixlen(&interface.netmask,
|
||||
&prefixlen);
|
||||
if (result != ISC_R_SUCCESS) {
|
||||
isc_log_write(IFMGR_COMMON_LOGARGS,
|
||||
ISC_LOG_WARNING,
|
||||
"omitting IPv4 interface %s from "
|
||||
"localnets ACL: %s",
|
||||
interface.name,
|
||||
isc_result_totext(result));
|
||||
} else {
|
||||
elt.u.ip_prefix.prefixlen = prefixlen;
|
||||
/* XXX suppress duplicates */
|
||||
result = dns_acl_appendelement(mgr->aclenv.localnets,
|
||||
&elt);
|
||||
if (result != ISC_R_SUCCESS)
|
||||
goto ignore_interface;
|
||||
}
|
||||
|
||||
for (le = ISC_LIST_HEAD(mgr->listenon4->elts);
|
||||
le != NULL;
|
||||
le = ISC_LIST_NEXT(le, link))
|
||||
@@ -590,18 +599,15 @@ do_ipv4(ns_interfacemgr_t *mgr) {
|
||||
UNEXPECTED_ERROR(__FILE__, __LINE__,
|
||||
"IPv4: interface iteration failed: %s",
|
||||
isc_result_totext(result));
|
||||
else
|
||||
result = ISC_R_SUCCESS;
|
||||
cleanup_iter:
|
||||
isc_interfaceiter_destroy(&iter);
|
||||
return (result);
|
||||
}
|
||||
|
||||
static isc_boolean_t
|
||||
listenon_is_ip6_none(ns_listenlist_t *p) {
|
||||
ns_listenelt_t *elt;
|
||||
if (ISC_LIST_EMPTY(p->elts))
|
||||
return (ISC_TRUE); /* No listen-on-v6 statements */
|
||||
elt = ISC_LIST_HEAD(p->elts);
|
||||
if (ISC_LIST_NEXT(elt, link) != NULL)
|
||||
return (ISC_FALSE); /* More than one listen-on-v6 stmt */
|
||||
listenon_is_ip6_none(ns_listenelt_t *elt) {
|
||||
if (elt->acl->length == 0)
|
||||
return (ISC_TRUE); /* listen-on-v6 { } */
|
||||
if (elt->acl->length > 1)
|
||||
@@ -613,69 +619,73 @@ listenon_is_ip6_none(ns_listenlist_t *p) {
|
||||
}
|
||||
|
||||
static isc_boolean_t
|
||||
listenon_is_ip6_any(ns_listenlist_t *p, in_port_t *portp) {
|
||||
ns_listenelt_t *elt;
|
||||
if (ISC_LIST_EMPTY(p->elts))
|
||||
return (ISC_FALSE); /* No listen-on-v6 statements */
|
||||
elt = ISC_LIST_HEAD(p->elts);
|
||||
if (ISC_LIST_NEXT(elt, link) != NULL)
|
||||
return (ISC_FALSE); /* More than one listen-on-v6 stmt */
|
||||
listenon_is_ip6_any(ns_listenelt_t *elt) {
|
||||
if (elt->acl->length != 1)
|
||||
return (ISC_FALSE);
|
||||
if (elt->acl->elements[0].negative == ISC_FALSE &&
|
||||
elt->acl->elements[0].type == dns_aclelementtype_any) {
|
||||
*portp = elt->port;
|
||||
elt->acl->elements[0].type == dns_aclelementtype_any)
|
||||
return (ISC_TRUE); /* listen-on-v6 { any; } */
|
||||
}
|
||||
return (ISC_FALSE); /* All others */
|
||||
}
|
||||
|
||||
static void
|
||||
static isc_result_t
|
||||
do_ipv6(ns_interfacemgr_t *mgr) {
|
||||
isc_result_t result;
|
||||
ns_interface_t *ifp;
|
||||
isc_sockaddr_t listen_addr;
|
||||
struct in6_addr in6a;
|
||||
in_port_t port;
|
||||
ns_listenelt_t *le;
|
||||
|
||||
if (listenon_is_ip6_none(mgr->listenon6))
|
||||
return;
|
||||
|
||||
if (! listenon_is_ip6_any(mgr->listenon6, &port)) {
|
||||
isc_log_write(IFMGR_COMMON_LOGARGS,
|
||||
ISC_LOG_ERROR,
|
||||
"bad IPv6 listen-on list: must be 'any' or 'none'");
|
||||
return;
|
||||
}
|
||||
|
||||
in6a = in6addr_any;
|
||||
isc_sockaddr_fromin6(&listen_addr, &in6a, port);
|
||||
|
||||
ifp = find_matching_interface(mgr, &listen_addr);
|
||||
if (ifp != NULL) {
|
||||
ifp->generation = mgr->generation;
|
||||
} else {
|
||||
isc_log_write(IFMGR_COMMON_LOGARGS, ISC_LOG_INFO,
|
||||
"listening on IPv6 interfaces, port %u", port);
|
||||
result = ns_interface_setup(mgr, &listen_addr, "<any>", &ifp);
|
||||
if (result != ISC_R_SUCCESS) {
|
||||
for (le = ISC_LIST_HEAD(mgr->listenon6->elts);
|
||||
le != NULL;
|
||||
le = ISC_LIST_NEXT(le, link))
|
||||
{
|
||||
if (listenon_is_ip6_none(le))
|
||||
continue;
|
||||
if (! listenon_is_ip6_any(le)) {
|
||||
isc_log_write(IFMGR_COMMON_LOGARGS,
|
||||
ISC_LOG_ERROR,
|
||||
"listening on IPv6 interfaces failed");
|
||||
/* Continue. */
|
||||
"bad IPv6 listen-on list: "
|
||||
"must be 'any' or 'none'");
|
||||
return (ISC_R_FAILURE);
|
||||
}
|
||||
|
||||
in6a = in6addr_any;
|
||||
isc_sockaddr_fromin6(&listen_addr, &in6a, le->port);
|
||||
|
||||
ifp = find_matching_interface(mgr, &listen_addr);
|
||||
if (ifp != NULL) {
|
||||
ifp->generation = mgr->generation;
|
||||
} else {
|
||||
isc_log_write(IFMGR_COMMON_LOGARGS, ISC_LOG_INFO,
|
||||
"listening on IPv6 interfaces, port %u",
|
||||
le->port);
|
||||
result = ns_interface_setup(mgr, &listen_addr,
|
||||
"<any>", &ifp);
|
||||
if (result != ISC_R_SUCCESS) {
|
||||
isc_log_write(IFMGR_COMMON_LOGARGS,
|
||||
ISC_LOG_ERROR,
|
||||
"listening on IPv6 interfaces "
|
||||
"failed");
|
||||
/* Continue. */
|
||||
}
|
||||
}
|
||||
}
|
||||
return (ISC_R_SUCCESS);
|
||||
}
|
||||
|
||||
void
|
||||
ns_interfacemgr_scan(ns_interfacemgr_t *mgr, isc_boolean_t verbose) {
|
||||
isc_boolean_t purge = ISC_TRUE;
|
||||
|
||||
REQUIRE(NS_INTERFACEMGR_VALID(mgr));
|
||||
|
||||
mgr->generation++; /* Increment the generation count. */
|
||||
|
||||
if (isc_net_probeipv6() == ISC_R_SUCCESS)
|
||||
do_ipv6(mgr);
|
||||
if (isc_net_probeipv6() == ISC_R_SUCCESS) {
|
||||
if (do_ipv6(mgr) != ISC_R_SUCCESS)
|
||||
purge = ISC_FALSE;
|
||||
}
|
||||
#ifdef WANT_IPV6
|
||||
else
|
||||
isc_log_write(IFMGR_COMMON_LOGARGS,
|
||||
@@ -683,9 +693,10 @@ ns_interfacemgr_scan(ns_interfacemgr_t *mgr, isc_boolean_t verbose) {
|
||||
"no IPv6 interfaces found");
|
||||
#endif
|
||||
|
||||
if (isc_net_probeipv4() == ISC_R_SUCCESS)
|
||||
do_ipv4(mgr);
|
||||
else
|
||||
if (isc_net_probeipv4() == ISC_R_SUCCESS) {
|
||||
if (do_ipv4(mgr) != ISC_R_SUCCESS)
|
||||
purge = ISC_FALSE;
|
||||
} else
|
||||
isc_log_write(IFMGR_COMMON_LOGARGS,
|
||||
verbose ? ISC_LOG_INFO : ISC_LOG_DEBUG(1),
|
||||
"no IPv4 interfaces found");
|
||||
@@ -696,7 +707,8 @@ ns_interfacemgr_scan(ns_interfacemgr_t *mgr, isc_boolean_t verbose) {
|
||||
* how we catch interfaces that go away or change their
|
||||
* addresses.
|
||||
*/
|
||||
purge_old_interfaces(mgr);
|
||||
if (purge)
|
||||
purge_old_interfaces(mgr);
|
||||
|
||||
/*
|
||||
* Warn if we are not listening on any interface, unless
|
||||
|
||||
+6
-6
@@ -15,7 +15,7 @@
|
||||
* WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
|
||||
*/
|
||||
|
||||
/* $Id: logconf.c,v 1.30 2001/05/28 05:16:57 marka Exp $ */
|
||||
/* $Id: logconf.c,v 1.30.2.3 2001/10/11 02:03:20 marka Exp $ */
|
||||
|
||||
#include <config.h>
|
||||
|
||||
@@ -74,7 +74,7 @@ category_fromconf(cfg_obj_t *ccat, isc_logconfig_t *lctx) {
|
||||
result = isc_log_usechannel(lctx, channelname, category,
|
||||
module);
|
||||
if (result != ISC_R_SUCCESS) {
|
||||
isc_log_write(ns_g_lctx, DNS_LOGCATEGORY_CONFIG,
|
||||
isc_log_write(ns_g_lctx, CFG_LOGCATEGORY_CONFIG,
|
||||
NS_LOGMODULE_SERVER, ISC_LOG_ERROR,
|
||||
"logging channel '%s': %s", channelname,
|
||||
isc_result_totext(result));
|
||||
@@ -134,7 +134,7 @@ channel_fromconf(cfg_obj_t *channel, isc_logconfig_t *lctx) {
|
||||
cfg_obj_t *sizeobj = cfg_tuple_get(fileobj, "size");
|
||||
cfg_obj_t *versionsobj = cfg_tuple_get(fileobj, "versions");
|
||||
isc_int32_t versions = ISC_LOG_ROLLNEVER;
|
||||
isc_offset_t size = ISC_OFFSET_MAXIMUM;
|
||||
isc_offset_t size = 0;
|
||||
|
||||
type = ISC_LOG_TOFILE;
|
||||
|
||||
@@ -221,7 +221,7 @@ channel_fromconf(cfg_obj_t *channel, isc_logconfig_t *lctx) {
|
||||
*/
|
||||
result = isc_stdio_open(dest.file.name, "a", &fp);
|
||||
if (result != ISC_R_SUCCESS)
|
||||
isc_log_write(ns_g_lctx, DNS_LOGCATEGORY_CONFIG,
|
||||
isc_log_write(ns_g_lctx, CFG_LOGCATEGORY_CONFIG,
|
||||
NS_LOGMODULE_SERVER, ISC_LOG_ERROR,
|
||||
"logging channel '%s' file '%s': %s",
|
||||
channelname, dest.file.name,
|
||||
@@ -267,12 +267,12 @@ ns_log_configure(isc_logconfig_t *logconf, cfg_obj_t *logstmt) {
|
||||
CHECK(category_fromconf(category, logconf));
|
||||
if (!default_set) {
|
||||
cfg_obj_t *catname = cfg_tuple_get(category, "name");
|
||||
if (strcmp(cfg_obj_asstring(catname), "default"))
|
||||
if (strcmp(cfg_obj_asstring(catname), "default") == 0)
|
||||
default_set = ISC_TRUE;
|
||||
}
|
||||
if (!unmatched_set) {
|
||||
cfg_obj_t *catname = cfg_tuple_get(category, "name");
|
||||
if (strcmp(cfg_obj_asstring(catname), "unmatched"))
|
||||
if (strcmp(cfg_obj_asstring(catname), "unmatched") == 0)
|
||||
unmatched_set = ISC_TRUE;
|
||||
}
|
||||
}
|
||||
|
||||
+3
-3
@@ -15,7 +15,7 @@
|
||||
* WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
|
||||
*/
|
||||
|
||||
/* $Id: server.c,v 1.339 2001/08/07 01:58:56 marka Exp $ */
|
||||
/* $Id: server.c,v 1.339.2.1 2001/09/28 05:35:47 marka Exp $ */
|
||||
|
||||
#include <config.h>
|
||||
|
||||
@@ -649,8 +649,8 @@ configure_view(dns_view_t *view, cfg_obj_t *config, cfg_obj_t *vconfig,
|
||||
result = ns_config_get(maps, "lame-ttl", &obj);
|
||||
INSIST(result == ISC_R_SUCCESS);
|
||||
lame_ttl = cfg_obj_asuint32(obj);
|
||||
if (lame_ttl > 18000)
|
||||
lame_ttl = 18000;
|
||||
if (lame_ttl > 1800)
|
||||
lame_ttl = 1800;
|
||||
dns_resolver_setlamettl(view->resolver, lame_ttl);
|
||||
|
||||
/*
|
||||
|
||||
+57
-26
@@ -15,7 +15,7 @@
|
||||
* WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
|
||||
*/
|
||||
|
||||
/* $Id: os.c,v 1.46 2001/08/29 18:03:36 gson Exp $ */
|
||||
/* $Id: os.c,v 1.46.2.1 2001/10/22 23:28:12 gson Exp $ */
|
||||
|
||||
#include <config.h>
|
||||
#include <stdarg.h>
|
||||
@@ -36,6 +36,7 @@
|
||||
#include <isc/file.h>
|
||||
#include <isc/print.h>
|
||||
#include <isc/result.h>
|
||||
#include <isc/strerror.h>
|
||||
#include <isc/string.h>
|
||||
|
||||
#include <named/main.h>
|
||||
@@ -133,6 +134,7 @@ static void
|
||||
linux_setcaps(unsigned int caps) {
|
||||
struct __user_cap_header_struct caphead;
|
||||
struct __user_cap_data_struct cap;
|
||||
char strbuf[ISC_STRERRORSIZE];
|
||||
|
||||
if ((getuid() != 0 && !non_root_caps) || non_root)
|
||||
return;
|
||||
@@ -144,8 +146,10 @@ linux_setcaps(unsigned int caps) {
|
||||
cap.effective = caps;
|
||||
cap.permitted = caps;
|
||||
cap.inheritable = caps;
|
||||
if (syscall(SYS_capset, &caphead, &cap) < 0)
|
||||
ns_main_earlyfatal("capset failed: %s", strerror(errno));
|
||||
if (syscall(SYS_capset, &caphead, &cap) < 0) {
|
||||
isc__strerror(errno, strbuf, sizeof(strbuf));
|
||||
ns_main_earlyfatal("capset failed: %s", strbuf);
|
||||
}
|
||||
}
|
||||
|
||||
static void
|
||||
@@ -233,15 +237,17 @@ linux_minprivs(void) {
|
||||
#ifdef HAVE_SYS_PRCTL_H
|
||||
static void
|
||||
linux_keepcaps(void) {
|
||||
char strbuf[ISC_STRERRORSIZE];
|
||||
/*
|
||||
* Ask the kernel to allow us to keep our capabilities after we
|
||||
* setuid().
|
||||
*/
|
||||
|
||||
if (prctl(PR_SET_KEEPCAPS, 1, 0, 0, 0) < 0) {
|
||||
if (errno != EINVAL)
|
||||
ns_main_earlyfatal("prctl() failed: %s",
|
||||
strerror(errno));
|
||||
if (errno != EINVAL) {
|
||||
isc__strerror(errno, strbuf, sizeof(strbuf));
|
||||
ns_main_earlyfatal("prctl() failed: %s", strbuf);
|
||||
}
|
||||
} else {
|
||||
non_root_caps = ISC_TRUE;
|
||||
if (getuid() != 0)
|
||||
@@ -280,10 +286,13 @@ void
|
||||
ns_os_daemonize(void) {
|
||||
pid_t pid;
|
||||
int fd;
|
||||
char strbuf[ISC_STRERRORSIZE];
|
||||
|
||||
pid = fork();
|
||||
if (pid == -1)
|
||||
ns_main_earlyfatal("fork(): %s", strerror(errno));
|
||||
if (pid == -1) {
|
||||
isc__strerror(errno, strbuf, sizeof(strbuf));
|
||||
ns_main_earlyfatal("fork(): %s", strbuf);
|
||||
}
|
||||
if (pid != 0)
|
||||
_exit(0);
|
||||
|
||||
@@ -295,8 +304,10 @@ ns_os_daemonize(void) {
|
||||
mainpid = getpid();
|
||||
#endif
|
||||
|
||||
if (setsid() == -1)
|
||||
ns_main_earlyfatal("setsid(): %s", strerror(errno));
|
||||
if (setsid() == -1) {
|
||||
isc__strerror(errno, strbuf, sizeof(strbuf));
|
||||
ns_main_earlyfatal("setsid(): %s", strbuf);
|
||||
}
|
||||
|
||||
/*
|
||||
* Try to set stdin, stdout, and stderr to /dev/null, but press
|
||||
@@ -337,16 +348,22 @@ all_digits(const char *s) {
|
||||
|
||||
void
|
||||
ns_os_chroot(const char *root) {
|
||||
char strbuf[ISC_STRERRORSIZE];
|
||||
if (root != NULL) {
|
||||
if (chroot(root) < 0)
|
||||
ns_main_earlyfatal("chroot(): %s", strerror(errno));
|
||||
if (chdir("/") < 0)
|
||||
ns_main_earlyfatal("chdir(/): %s", strerror(errno));
|
||||
if (chroot(root) < 0) {
|
||||
isc__strerror(errno, strbuf, sizeof(strbuf));
|
||||
ns_main_earlyfatal("chroot(): %s", strbuf);
|
||||
}
|
||||
if (chdir("/") < 0) {
|
||||
isc__strerror(errno, strbuf, sizeof(strbuf));
|
||||
ns_main_earlyfatal("chdir(/): %s", strbuf);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void
|
||||
ns_os_inituserinfo(const char *username) {
|
||||
char strbuf[ISC_STRERRORSIZE];
|
||||
if (username == NULL)
|
||||
return;
|
||||
|
||||
@@ -360,14 +377,17 @@ ns_os_inituserinfo(const char *username) {
|
||||
ns_main_earlyfatal("user '%s' unknown", username);
|
||||
|
||||
if (getuid() == 0) {
|
||||
if (initgroups(runas_pw->pw_name, runas_pw->pw_gid) < 0)
|
||||
ns_main_earlyfatal("initgroups(): %s", strerror(errno));
|
||||
if (initgroups(runas_pw->pw_name, runas_pw->pw_gid) < 0) {
|
||||
isc__strerror(errno, strbuf, sizeof(strbuf));
|
||||
ns_main_earlyfatal("initgroups(): %s", strbuf);
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
void
|
||||
ns_os_changeuser(void) {
|
||||
char strbuf[ISC_STRERRORSIZE];
|
||||
if (runas_pw == NULL || done_setuid)
|
||||
return;
|
||||
|
||||
@@ -382,11 +402,15 @@ ns_os_changeuser(void) {
|
||||
"2.3.99-pre3 or 2.2.18 when using threads");
|
||||
#endif
|
||||
|
||||
if (setgid(runas_pw->pw_gid) < 0)
|
||||
ns_main_earlyfatal("setgid(): %s", strerror(errno));
|
||||
if (setgid(runas_pw->pw_gid) < 0) {
|
||||
isc__strerror(errno, strbuf, sizeof(strbuf));
|
||||
ns_main_earlyfatal("setgid(): %s", strbuf);
|
||||
}
|
||||
|
||||
if (setuid(runas_pw->pw_uid) < 0)
|
||||
ns_main_earlyfatal("setuid(): %s", strerror(errno));
|
||||
if (setuid(runas_pw->pw_uid) < 0) {
|
||||
isc__strerror(errno, strbuf, sizeof(strbuf));
|
||||
ns_main_earlyfatal("setuid(): %s", strbuf);
|
||||
}
|
||||
|
||||
#if defined(HAVE_LINUX_CAPABILITY_H) && !defined(HAVE_LINUXTHREADS)
|
||||
linux_minprivs();
|
||||
@@ -447,6 +471,7 @@ ns_os_writepidfile(const char *filename) {
|
||||
FILE *lockfile;
|
||||
size_t len;
|
||||
pid_t pid;
|
||||
char strbuf[ISC_STRERRORSIZE];
|
||||
|
||||
/*
|
||||
* The caller must ensure any required synchronization.
|
||||
@@ -456,20 +481,26 @@ ns_os_writepidfile(const char *filename) {
|
||||
|
||||
len = strlen(filename);
|
||||
pidfile = malloc(len + 1);
|
||||
if (pidfile == NULL)
|
||||
if (pidfile == NULL) {
|
||||
isc__strerror(errno, strbuf, sizeof(strbuf));
|
||||
ns_main_earlyfatal("couldn't malloc '%s': %s",
|
||||
filename, strerror(errno));
|
||||
filename, strbuf);
|
||||
}
|
||||
/* This is safe. */
|
||||
strcpy(pidfile, filename);
|
||||
|
||||
fd = safe_open(filename, ISC_FALSE);
|
||||
if (fd < 0)
|
||||
if (fd < 0) {
|
||||
isc__strerror(errno, strbuf, sizeof(strbuf));
|
||||
ns_main_earlyfatal("couldn't open pid file '%s': %s",
|
||||
filename, strerror(errno));
|
||||
filename, strbuf);
|
||||
}
|
||||
lockfile = fdopen(fd, "w");
|
||||
if (lockfile == NULL)
|
||||
if (lockfile == NULL) {
|
||||
isc__strerror(errno, strbuf, sizeof(strbuf));
|
||||
ns_main_earlyfatal("could not fdopen() pid file '%s': %s",
|
||||
filename, strerror(errno));
|
||||
filename, strbuf);
|
||||
}
|
||||
#ifdef HAVE_LINUXTHREADS
|
||||
pid = mainpid;
|
||||
#else
|
||||
|
||||
+10
-3
@@ -15,7 +15,7 @@
|
||||
* WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
|
||||
*/
|
||||
|
||||
/* $Id: xfrout.c,v 1.101.2.1 2001/08/31 00:37:12 gson Exp $ */
|
||||
/* $Id: xfrout.c,v 1.101.2.2 2001/09/28 22:07:12 bwelling Exp $ */
|
||||
|
||||
#include <config.h>
|
||||
|
||||
@@ -889,6 +889,7 @@ ns_xfr_start(ns_client_t *client, dns_rdatatype_t reqtype) {
|
||||
char *journalfile;
|
||||
char msg[DNS_RDATACLASS_FORMATSIZE + DNS_NAME_FORMATSIZE
|
||||
+ sizeof("zone transfer '/'")];
|
||||
isc_boolean_t is_poll = ISC_FALSE;
|
||||
|
||||
switch (reqtype) {
|
||||
case dns_rdatatype_axfr:
|
||||
@@ -1074,6 +1075,7 @@ ns_xfr_start(ns_client_t *client, dns_rdatatype_t reqtype) {
|
||||
(client->attributes & NS_CLIENTATTR_TCP) == 0)
|
||||
{
|
||||
CHECK(soa_rrstream_create(mctx, db, ver, &stream));
|
||||
is_poll = ISC_TRUE;
|
||||
goto have_stream;
|
||||
}
|
||||
journalfile = dns_zone_getjournal(zone);
|
||||
@@ -1098,6 +1100,7 @@ ns_xfr_start(ns_client_t *client, dns_rdatatype_t reqtype) {
|
||||
axfr_fallback:
|
||||
CHECK(axfr_rrstream_create(mctx, db, ver,
|
||||
&data_stream));
|
||||
mnemonic = "AXFR-style IXFR";
|
||||
}
|
||||
|
||||
/*
|
||||
@@ -1131,8 +1134,12 @@ ns_xfr_start(ns_client_t *client, dns_rdatatype_t reqtype) {
|
||||
|
||||
CHECK(xfr->stream->methods->first(xfr->stream));
|
||||
|
||||
xfrout_log1(client, question_name, question_class, ISC_LOG_INFO,
|
||||
"%s started", mnemonic);
|
||||
if (is_poll)
|
||||
xfrout_log1(client, question_name, question_class,
|
||||
ISC_LOG_DEBUG(1), "IXFR poll up to date");
|
||||
else
|
||||
xfrout_log1(client, question_name, question_class,
|
||||
ISC_LOG_INFO, "%s started", mnemonic);
|
||||
|
||||
/*
|
||||
* Hand the context over to sendstream(). Set xfr to NULL;
|
||||
|
||||
+15
-14
@@ -15,7 +15,7 @@
|
||||
* WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
|
||||
*/
|
||||
|
||||
/* $Id: zoneconf.c,v 1.87 2001/08/07 01:58:58 marka Exp $ */
|
||||
/* $Id: zoneconf.c,v 1.87.2.3 2001/10/18 00:35:20 marka Exp $ */
|
||||
|
||||
#include <config.h>
|
||||
|
||||
@@ -509,16 +509,6 @@ ns_zone_configure(cfg_obj_t *config, cfg_obj_t *vconfig, cfg_obj_t *zconfig,
|
||||
dns_zone_clearforwardacl));
|
||||
}
|
||||
|
||||
obj = NULL;
|
||||
result = ns_config_get(maps, "transfer-source", &obj);
|
||||
INSIST(result == ISC_R_SUCCESS);
|
||||
dns_zone_setxfrsource4(zone, cfg_obj_assockaddr(obj));
|
||||
|
||||
obj = NULL;
|
||||
result = ns_config_get(maps, "transfer-source-v6", &obj);
|
||||
INSIST(result == ISC_R_SUCCESS);
|
||||
dns_zone_setxfrsource6(zone, cfg_obj_assockaddr(obj));
|
||||
|
||||
/*
|
||||
* Configure slave functionality.
|
||||
*/
|
||||
@@ -571,6 +561,16 @@ ns_zone_configure(cfg_obj_t *config, cfg_obj_t *vconfig, cfg_obj_t *zconfig,
|
||||
INSIST(result == ISC_R_SUCCESS);
|
||||
dns_zone_setminretrytime(zone, cfg_obj_asuint32(obj));
|
||||
|
||||
obj = NULL;
|
||||
result = ns_config_get(maps, "transfer-source", &obj);
|
||||
INSIST(result == ISC_R_SUCCESS);
|
||||
dns_zone_setxfrsource4(zone, cfg_obj_assockaddr(obj));
|
||||
|
||||
obj = NULL;
|
||||
result = ns_config_get(maps, "transfer-source-v6", &obj);
|
||||
INSIST(result == ISC_R_SUCCESS);
|
||||
dns_zone_setxfrsource6(zone, cfg_obj_assockaddr(obj));
|
||||
|
||||
break;
|
||||
|
||||
default:
|
||||
@@ -599,9 +599,10 @@ ns_zone_reusable(dns_zone_t *zone, cfg_obj_t *zconfig) {
|
||||
else
|
||||
cfilename = NULL;
|
||||
zfilename = dns_zone_getfile(zone);
|
||||
if (cfilename == NULL || zfilename == NULL ||
|
||||
strcmp(cfilename, zfilename) != 0)
|
||||
return (ISC_FALSE);
|
||||
if (!((cfilename == NULL && zfilename == NULL) ||
|
||||
(cfilename != NULL && zfilename != NULL &&
|
||||
strcmp(cfilename, zfilename) == 0)))
|
||||
return (ISC_FALSE);
|
||||
|
||||
return (ISC_TRUE);
|
||||
}
|
||||
|
||||
+89
-95
@@ -15,7 +15,7 @@
|
||||
* WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
|
||||
*/
|
||||
|
||||
/* $Id: nsupdate.c,v 1.103.2.1 2001/09/04 19:35:49 gson Exp $ */
|
||||
/* $Id: nsupdate.c,v 1.103.2.4 2001/10/15 20:25:57 gson Exp $ */
|
||||
|
||||
#include <config.h>
|
||||
|
||||
@@ -273,102 +273,88 @@ reset_system(void) {
|
||||
}
|
||||
|
||||
static void
|
||||
setup_key(void) {
|
||||
setup_keystr(void) {
|
||||
unsigned char *secret = NULL;
|
||||
int secretlen;
|
||||
isc_buffer_t secretbuf;
|
||||
isc_result_t result;
|
||||
isc_buffer_t keynamesrc;
|
||||
char *secretstr;
|
||||
char *s;
|
||||
dns_fixedname_t fkeyname;
|
||||
dns_name_t *keyname;
|
||||
|
||||
dns_fixedname_init(&fkeyname);
|
||||
keyname = dns_fixedname_name(&fkeyname);
|
||||
|
||||
if (keystr != NULL) {
|
||||
isc_buffer_t keynamesrc;
|
||||
char *secretstr;
|
||||
char *s;
|
||||
debug("Creating key...");
|
||||
|
||||
debug("Creating key...");
|
||||
s = strchr(keystr, ':');
|
||||
if (s == NULL || s == keystr || *s == 0)
|
||||
fatal("key option must specify keyname:secret");
|
||||
secretstr = s + 1;
|
||||
|
||||
s = strchr(keystr, ':');
|
||||
if (s == NULL || s == keystr || *s == 0)
|
||||
fatal("key option must specify keyname:secret");
|
||||
secretstr = s + 1;
|
||||
isc_buffer_init(&keynamesrc, keystr, s - keystr);
|
||||
isc_buffer_add(&keynamesrc, s - keystr);
|
||||
|
||||
isc_buffer_init(&keynamesrc, keystr, s - keystr);
|
||||
isc_buffer_add(&keynamesrc, s - keystr);
|
||||
debug("namefromtext");
|
||||
result = dns_name_fromtext(keyname, &keynamesrc, dns_rootname,
|
||||
ISC_FALSE, NULL);
|
||||
check_result(result, "dns_name_fromtext");
|
||||
|
||||
debug("namefromtext");
|
||||
result = dns_name_fromtext(keyname, &keynamesrc, dns_rootname,
|
||||
ISC_FALSE, NULL);
|
||||
check_result(result, "dns_name_fromtext");
|
||||
secretlen = strlen(secretstr) * 3 / 4;
|
||||
secret = isc_mem_allocate(mctx, secretlen);
|
||||
if (secret == NULL)
|
||||
fatal("out of memory");
|
||||
|
||||
secretlen = strlen(secretstr) * 3 / 4;
|
||||
secret = isc_mem_allocate(mctx, secretlen);
|
||||
if (secret == NULL)
|
||||
fatal("out of memory");
|
||||
|
||||
isc_buffer_init(&secretbuf, secret, secretlen);
|
||||
result = isc_base64_decodestring(secretstr, &secretbuf);
|
||||
if (result != ISC_R_SUCCESS) {
|
||||
fprintf(stderr, "could not create key from %s: %s\n",
|
||||
keystr, isc_result_totext(result));
|
||||
goto failure;
|
||||
}
|
||||
|
||||
secretlen = isc_buffer_usedlength(&secretbuf);
|
||||
debug("close");
|
||||
} else {
|
||||
dst_key_t *dstkey = NULL;
|
||||
|
||||
result = dst_key_fromnamedfile(keyfile, DST_TYPE_PRIVATE,
|
||||
mctx, &dstkey);
|
||||
if (result != ISC_R_SUCCESS) {
|
||||
fprintf(stderr, "could not read key from %s: %s\n",
|
||||
keyfile, isc_result_totext(result));
|
||||
goto failure;
|
||||
}
|
||||
secretlen = (dst_key_size(dstkey) + 7) >> 3;
|
||||
secret = isc_mem_allocate(mctx, secretlen);
|
||||
if (secret == NULL)
|
||||
fatal("out of memory");
|
||||
isc_buffer_init(&secretbuf, secret, secretlen);
|
||||
result = dst_key_tobuffer(dstkey, &secretbuf);
|
||||
if (result != ISC_R_SUCCESS) {
|
||||
fprintf(stderr, "could not read key from %s: %s\n",
|
||||
keyfile, isc_result_totext(result));
|
||||
goto failure;
|
||||
}
|
||||
result = dns_name_concatenate(dst_key_name(dstkey), NULL,
|
||||
keyname, NULL);
|
||||
check_result(result, "dns_name_concatenate");
|
||||
dst_key_free(&dstkey);
|
||||
|
||||
isc_buffer_init(&secretbuf, secret, secretlen);
|
||||
result = isc_base64_decodestring(secretstr, &secretbuf);
|
||||
if (result != ISC_R_SUCCESS) {
|
||||
fprintf(stderr, "could not create key from %s: %s\n",
|
||||
keystr, isc_result_totext(result));
|
||||
goto failure;
|
||||
}
|
||||
|
||||
secretlen = isc_buffer_usedlength(&secretbuf);
|
||||
|
||||
debug("keycreate");
|
||||
result = dns_tsigkey_create(keyname, dns_tsig_hmacmd5_name,
|
||||
secret, secretlen, ISC_TRUE, NULL, 0, 0,
|
||||
mctx, NULL, &key);
|
||||
if (result != ISC_R_SUCCESS) {
|
||||
char *str;
|
||||
if (keystr != NULL)
|
||||
str = keystr;
|
||||
else
|
||||
str = keyfile;
|
||||
secret, secretlen, ISC_TRUE, NULL,
|
||||
0, 0, mctx, NULL, &key);
|
||||
if (result != ISC_R_SUCCESS)
|
||||
fprintf(stderr, "could not create key from %s: %s\n",
|
||||
str, dns_result_totext(result));
|
||||
}
|
||||
isc_mem_free(mctx, secret);
|
||||
return;
|
||||
|
||||
keystr, dns_result_totext(result));
|
||||
failure:
|
||||
|
||||
if (secret != NULL)
|
||||
isc_mem_free(mctx, secret);
|
||||
}
|
||||
|
||||
static void
|
||||
setup_keyfile(void) {
|
||||
dst_key_t *dstkey = NULL;
|
||||
isc_result_t result;
|
||||
|
||||
debug("Creating key...");
|
||||
|
||||
result = dst_key_fromnamedfile(keyfile, DST_TYPE_PRIVATE, mctx,
|
||||
&dstkey);
|
||||
if (result != ISC_R_SUCCESS) {
|
||||
fprintf(stderr, "could not read key from %s: %s\n",
|
||||
keyfile, isc_result_totext(result));
|
||||
return;
|
||||
}
|
||||
result = dns_tsigkey_createfromkey(dst_key_name(dstkey),
|
||||
dns_tsig_hmacmd5_name,
|
||||
dstkey, ISC_FALSE, NULL,
|
||||
0, 0, mctx, NULL, &key);
|
||||
if (result != ISC_R_SUCCESS) {
|
||||
fprintf(stderr, "could not create key from %s: %s\n",
|
||||
keyfile, isc_result_totext(result));
|
||||
dst_key_free(&dstkey);
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
static void
|
||||
doshutdown(void) {
|
||||
isc_task_detach(&global_task);
|
||||
@@ -471,29 +457,34 @@ setup_system(void) {
|
||||
if (lwresult != LWRES_R_SUCCESS)
|
||||
fatal("lwres_context_create failed");
|
||||
|
||||
lwresult = lwres_conf_parse(lwctx, RESOLV_CONF);
|
||||
if (lwresult != LWRES_R_SUCCESS)
|
||||
fprintf(stderr,
|
||||
"an error was encountered in %s\n", RESOLV_CONF);
|
||||
|
||||
(void)lwres_conf_parse(lwctx, RESOLV_CONF);
|
||||
lwconf = lwres_conf_get(lwctx);
|
||||
|
||||
ns_total = lwconf->nsnext;
|
||||
if (ns_total <= 0)
|
||||
fatal("no valid servers found");
|
||||
servers = isc_mem_get(mctx, ns_total * sizeof(isc_sockaddr_t));
|
||||
if (servers == NULL)
|
||||
fatal("out of memory");
|
||||
for (i = 0; i < ns_total; i++) {
|
||||
if (lwconf->nameservers[i].family == LWRES_ADDRTYPE_V4) {
|
||||
struct in_addr in4;
|
||||
memcpy(&in4, lwconf->nameservers[i].address, 4);
|
||||
isc_sockaddr_fromin(&servers[i], &in4, DNSDEFAULTPORT);
|
||||
} else {
|
||||
struct in6_addr in6;
|
||||
memcpy(&in6, lwconf->nameservers[i].address, 16);
|
||||
isc_sockaddr_fromin6(&servers[i], &in6,
|
||||
DNSDEFAULTPORT);
|
||||
if (ns_total <= 0) {
|
||||
/* No name servers in resolv.conf; default to loopback. */
|
||||
struct in_addr localhost;
|
||||
ns_total = 1;
|
||||
servers = isc_mem_get(mctx, ns_total * sizeof(isc_sockaddr_t));
|
||||
if (servers == NULL)
|
||||
fatal("out of memory");
|
||||
localhost.s_addr = htonl(INADDR_LOOPBACK);
|
||||
isc_sockaddr_fromin(&servers[0], &localhost, DNSDEFAULTPORT);
|
||||
} else {
|
||||
servers = isc_mem_get(mctx, ns_total * sizeof(isc_sockaddr_t));
|
||||
if (servers == NULL)
|
||||
fatal("out of memory");
|
||||
for (i = 0; i < ns_total; i++) {
|
||||
if (lwconf->nameservers[i].family == LWRES_ADDRTYPE_V4) {
|
||||
struct in_addr in4;
|
||||
memcpy(&in4, lwconf->nameservers[i].address, 4);
|
||||
isc_sockaddr_fromin(&servers[i], &in4, DNSDEFAULTPORT);
|
||||
} else {
|
||||
struct in6_addr in6;
|
||||
memcpy(&in6, lwconf->nameservers[i].address, 16);
|
||||
isc_sockaddr_fromin6(&servers[i], &in6,
|
||||
DNSDEFAULTPORT);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -568,8 +559,10 @@ setup_system(void) {
|
||||
else
|
||||
origin = dns_rootname;
|
||||
|
||||
if (keystr != NULL || keyfile != NULL)
|
||||
setup_key();
|
||||
if (keystr != NULL)
|
||||
setup_keystr();
|
||||
else if (keyfile != NULL)
|
||||
setup_keyfile();
|
||||
}
|
||||
|
||||
static void
|
||||
@@ -665,7 +658,8 @@ parse_args(int argc, char **argv) {
|
||||
fprintf(stderr, "%s: invalid argument -%c\n",
|
||||
argv[0], ch);
|
||||
fprintf(stderr, "usage: nsupdate [-d] "
|
||||
"[-y keyname:secret | -k keyfile] [-v]\n");
|
||||
"[-y keyname:secret | -k keyfile] [-v] "
|
||||
"[filename]\n");
|
||||
exit(1);
|
||||
}
|
||||
}
|
||||
|
||||
+3
-5
@@ -15,7 +15,7 @@
|
||||
* WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
|
||||
*/
|
||||
|
||||
/* $Id: rndc.c,v 1.77 2001/08/06 11:40:46 gson Exp $ */
|
||||
/* $Id: rndc.c,v 1.77.2.1 2001/10/17 18:26:01 gson Exp $ */
|
||||
|
||||
/*
|
||||
* Principal Author: DCL
|
||||
@@ -84,6 +84,7 @@ static int sends, recvs, connects;
|
||||
static char *command;
|
||||
static char *args;
|
||||
static char program[256];
|
||||
static isc_socket_t *sock = NULL;
|
||||
|
||||
static void
|
||||
usage(int status) {
|
||||
@@ -189,7 +190,6 @@ rndc_senddone(isc_task_t *task, isc_event_t *event) {
|
||||
|
||||
static void
|
||||
rndc_recvdone(isc_task_t *task, isc_event_t *event) {
|
||||
isc_socket_t *sock = ccmsg.sock;
|
||||
isccc_sexpr_t *response = NULL;
|
||||
isccc_sexpr_t *data;
|
||||
isccc_region_t source;
|
||||
@@ -244,7 +244,6 @@ rndc_recvdone(isc_task_t *task, isc_event_t *event) {
|
||||
static void
|
||||
rndc_connected(isc_task_t *task, isc_event_t *event) {
|
||||
isc_socketevent_t *sevent = (isc_socketevent_t *)event;
|
||||
isc_socket_t *sock = event->ev_sender;
|
||||
isccc_sexpr_t *request = NULL;
|
||||
isccc_sexpr_t *data;
|
||||
isccc_time_t now;
|
||||
@@ -293,7 +292,6 @@ rndc_connected(isc_task_t *task, isc_event_t *event) {
|
||||
static void
|
||||
rndc_start(isc_task_t *task, isc_event_t *event) {
|
||||
isc_sockaddr_t addr;
|
||||
isc_socket_t *sock = NULL;
|
||||
isc_result_t result;
|
||||
char socktext[ISC_SOCKADDR_FORMATSIZE];
|
||||
|
||||
@@ -597,7 +595,7 @@ main(int argc, char **argv) {
|
||||
isc_app_run();
|
||||
|
||||
if (connects > 0 || sends > 0 || recvs > 0)
|
||||
isc_socket_cancel(ccmsg.sock, task, ISC_SOCKCANCEL_ALL);
|
||||
isc_socket_cancel(sock, task, ISC_SOCKCANCEL_ALL);
|
||||
|
||||
isc_task_detach(&task);
|
||||
isc_taskmgr_destroy(&taskmgr);
|
||||
|
||||
@@ -15,7 +15,7 @@
|
||||
* WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
|
||||
*/
|
||||
|
||||
/* $Id: cfg_test.c,v 1.11 2001/07/23 18:57:53 gson Exp $ */
|
||||
/* $Id: cfg_test.c,v 1.11.2.1 2001/10/22 23:52:19 gson Exp $ */
|
||||
|
||||
#include <config.h>
|
||||
|
||||
@@ -51,7 +51,7 @@ output(void *closure, const char *text, int textlen) {
|
||||
}
|
||||
|
||||
static void
|
||||
usage() {
|
||||
usage(void) {
|
||||
fprintf(stderr, "usage: cfg_test --rndc|--named "
|
||||
"[--grammar] [--memstats] conffile\n");
|
||||
exit(1);
|
||||
|
||||
@@ -34,7 +34,7 @@ root name server and is listed in the hints file of the others.
|
||||
To enable all servers to run on the same machine, they bind to
|
||||
separate virtual IP address on the loopback interface. ns1 runs on
|
||||
10.53.0.1, ns2 on 10.53.0.2, etc. Before running any tests, you must
|
||||
set up these addresses by running "ifconfig.sh start".
|
||||
set up these addresses by running "ifconfig.sh up" as root.
|
||||
|
||||
The servers use port 5300 instead of the usual port 53, so they can be
|
||||
run without root privileges once the interfaces have been set up.
|
||||
@@ -48,4 +48,4 @@ The tests can be run individually like this:
|
||||
To run all the tests, just type "make test".
|
||||
|
||||
|
||||
$Id: README,v 1.9 2000/12/19 19:21:06 gson Exp $
|
||||
$Id: README,v 1.9.4.2 2001/09/17 21:43:09 gson Exp $
|
||||
|
||||
@@ -15,11 +15,11 @@
|
||||
# NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION
|
||||
# WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
|
||||
|
||||
# $Id: setup.sh,v 1.2 2001/01/11 20:51:19 bwelling Exp $
|
||||
# $Id: setup.sh,v 1.2.2.2 2001/10/12 20:12:07 gson Exp $
|
||||
|
||||
RANDFILE=../random.data
|
||||
|
||||
keyname=`$KEYGEN -a DH -b 768 -n host -r $RANDFILE server`
|
||||
keyid=`echo $keyname | perl -p -e 's/^.*\+//;'`
|
||||
keyid=`echo $keyname | $PERL -p -e 's/^.*\+0*//;'`
|
||||
rm -f named.conf
|
||||
perl -p -e "s/KEYID/$keyid/;" < named.conf.in > named.conf
|
||||
|
||||
Vendored
+3
-3
@@ -3,7 +3,7 @@
|
||||
# Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001
|
||||
# Free Software Foundation, Inc.
|
||||
|
||||
timestamp='2001-04-20'
|
||||
timestamp='2001-10-03'
|
||||
|
||||
# This file is free software; you can redistribute it and/or modify it
|
||||
# under the terms of the GNU General Public License as published by
|
||||
@@ -966,10 +966,10 @@ EOF
|
||||
echo ${UNAME_MACHINE}-pc-sysv${UNAME_REL}
|
||||
fi
|
||||
exit 0 ;;
|
||||
i*86:*:5:7*)
|
||||
i*86:*:5:[78]*)
|
||||
# Fixed at (any) Pentium or better
|
||||
UNAME_MACHINE=i586
|
||||
if [ ${UNAME_SYSTEM} = "UnixWare" ] ; then
|
||||
if [ ${UNAME_SYSTEM} = "UnixWare" -o ${UNAME_SYSTEM} = "OpenUNIX" ] ; then
|
||||
echo ${UNAME_MACHINE}-sco-sysv${UNAME_RELEASE}uw${UNAME_VERSION}
|
||||
else
|
||||
echo ${UNAME_MACHINE}-pc-sysv${UNAME_RELEASE}
|
||||
|
||||
+10
-7
@@ -16,7 +16,7 @@
|
||||
* WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
|
||||
*/
|
||||
|
||||
/* $Id: config.h.in,v 1.47 2001/08/16 06:19:56 marka Exp $ */
|
||||
/* $Id: config.h.in,v 1.47.2.1 2001/10/22 23:28:08 gson Exp $ */
|
||||
|
||||
/***
|
||||
*** This file is not to be included by any public header files, because
|
||||
@@ -32,9 +32,6 @@
|
||||
/* Define to `unsigned' if <sys/types.h> doesn't define. */
|
||||
#undef size_t
|
||||
|
||||
/* Define to `int' if <sys/types.h> doesn't define. */
|
||||
#undef ssize_t
|
||||
|
||||
/* Define if you have the ANSI C header files. */
|
||||
#undef STDC_HEADERS
|
||||
|
||||
@@ -45,6 +42,9 @@
|
||||
byte first (like Motorola and SPARC, unlike Intel and VAX). */
|
||||
#undef WORDS_BIGENDIAN
|
||||
|
||||
/* define to `int' if <sys/types.h> doesn't define. */
|
||||
#undef ssize_t
|
||||
|
||||
/* define on DEC OSF to enable 4.4BSD style sa_len support */
|
||||
#undef _SOCKADDR_LEN
|
||||
|
||||
@@ -138,6 +138,9 @@ int sigwait(const unsigned int *set, int *sig);
|
||||
/* define if pthread_attr_getstacksize() is available */
|
||||
#undef HAVE_PTHREAD_ATTR_GETSTACKSIZE
|
||||
|
||||
/* define if you have strerror in the C library. */
|
||||
#undef HAVE_STRERROR
|
||||
|
||||
/* Define if you have the <dlfcn.h> header file. */
|
||||
#undef HAVE_DLFCN_H
|
||||
|
||||
@@ -153,12 +156,12 @@ int sigwait(const unsigned int *set, int *sig);
|
||||
/* Define if you have the <sys/select.h> header file. */
|
||||
#undef HAVE_SYS_SELECT_H
|
||||
|
||||
/* Define if you have the <sys/sysctl.h> header file. */
|
||||
#undef HAVE_SYS_SYSCTL_H
|
||||
|
||||
/* Define if you have the <sys/sockio.h> header file. */
|
||||
#undef HAVE_SYS_SOCKIO_H
|
||||
|
||||
/* Define if you have the <sys/sysctl.h> header file. */
|
||||
#undef HAVE_SYS_SYSCTL_H
|
||||
|
||||
/* Define if you have the <sys/time.h> header file. */
|
||||
#undef HAVE_SYS_TIME_H
|
||||
|
||||
|
||||
@@ -30,7 +30,7 @@
|
||||
# ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT
|
||||
# OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
|
||||
|
||||
# From configure.in Revision: 1.294.2.1
|
||||
# From configure.in Revision: 1.294.2.3
|
||||
|
||||
# libtool.m4 - Configure libtool for the host system. -*-Shell-script-*-
|
||||
## Copyright 1996, 1997, 1998, 1999, 2000, 2001
|
||||
@@ -209,8 +209,8 @@ ac_help=
|
||||
ac_default_prefix=/usr/local
|
||||
# Any additions from configure.in:
|
||||
ac_help="$ac_help
|
||||
--with-openssl=PATH Specify path for system-supplied openssl
|
||||
(required for DNSSEC)"
|
||||
--with-openssl[=PATH] Build with OpenSSL [yes|no|path].
|
||||
(Required for DNSSEC)"
|
||||
ac_help="$ac_help
|
||||
--with-randomdev=PATH Specify path for random device"
|
||||
ac_help="$ac_help
|
||||
@@ -8192,10 +8192,6 @@ if { (eval echo configure:8192: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5;
|
||||
rm -rf conftest*
|
||||
echo "$ac_t""yes" 1>&6
|
||||
ISC_LWRES_NEEDRRSETINFO="#undef ISC_LWRES_NEEDRRSETINFO"
|
||||
cat >> confdefs.h <<\EOF
|
||||
#define HAVE_RRSETINFO 1
|
||||
EOF
|
||||
|
||||
else
|
||||
echo "configure: failed program was:" >&5
|
||||
cat conftest.$ac_ext >&5
|
||||
@@ -8207,9 +8203,9 @@ rm -f conftest*
|
||||
|
||||
|
||||
echo $ac_n "checking for int sethostent""... $ac_c" 1>&6
|
||||
echo "configure:8211: checking for int sethostent" >&5
|
||||
echo "configure:8207: checking for int sethostent" >&5
|
||||
cat > conftest.$ac_ext <<EOF
|
||||
#line 8213 "configure"
|
||||
#line 8209 "configure"
|
||||
#include "confdefs.h"
|
||||
|
||||
#include <netdb.h>
|
||||
@@ -8217,7 +8213,7 @@ int main() {
|
||||
int i = sethostent(0); return(0);
|
||||
; return 0; }
|
||||
EOF
|
||||
if { (eval echo configure:8221: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
|
||||
if { (eval echo configure:8217: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
|
||||
rm -rf conftest*
|
||||
echo "$ac_t""yes" 1>&6
|
||||
ISC_LWRES_SETHOSTENTINT="#define ISC_LWRES_SETHOSTENTINT 1"
|
||||
@@ -8232,9 +8228,9 @@ rm -f conftest*
|
||||
|
||||
|
||||
echo $ac_n "checking for int endhostent""... $ac_c" 1>&6
|
||||
echo "configure:8236: checking for int endhostent" >&5
|
||||
echo "configure:8232: checking for int endhostent" >&5
|
||||
cat > conftest.$ac_ext <<EOF
|
||||
#line 8238 "configure"
|
||||
#line 8234 "configure"
|
||||
#include "confdefs.h"
|
||||
|
||||
#include <netdb.h>
|
||||
@@ -8242,7 +8238,7 @@ int main() {
|
||||
int i = endhostent(); return(0);
|
||||
; return 0; }
|
||||
EOF
|
||||
if { (eval echo configure:8246: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
|
||||
if { (eval echo configure:8242: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
|
||||
rm -rf conftest*
|
||||
echo "$ac_t""yes" 1>&6
|
||||
ISC_LWRES_ENDHOSTENTINT="#define ISC_LWRES_ENDHOSTENTINT 1"
|
||||
@@ -8257,9 +8253,9 @@ rm -f conftest*
|
||||
|
||||
|
||||
echo $ac_n "checking for getnetbyaddr(in_addr_t, ...)""... $ac_c" 1>&6
|
||||
echo "configure:8261: checking for getnetbyaddr(in_addr_t, ...)" >&5
|
||||
echo "configure:8257: checking for getnetbyaddr(in_addr_t, ...)" >&5
|
||||
cat > conftest.$ac_ext <<EOF
|
||||
#line 8263 "configure"
|
||||
#line 8259 "configure"
|
||||
#include "confdefs.h"
|
||||
|
||||
#include <netdb.h>
|
||||
@@ -8268,7 +8264,7 @@ int main() {
|
||||
|
||||
; return 0; }
|
||||
EOF
|
||||
if { (eval echo configure:8272: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
|
||||
if { (eval echo configure:8268: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
|
||||
rm -rf conftest*
|
||||
echo "$ac_t""yes" 1>&6
|
||||
ISC_LWRES_GETNETBYADDRINADDR="#define ISC_LWRES_GETNETBYADDRINADDR 1"
|
||||
@@ -8283,9 +8279,9 @@ rm -f conftest*
|
||||
|
||||
|
||||
echo $ac_n "checking for int setnetent""... $ac_c" 1>&6
|
||||
echo "configure:8287: checking for int setnetent" >&5
|
||||
echo "configure:8283: checking for int setnetent" >&5
|
||||
cat > conftest.$ac_ext <<EOF
|
||||
#line 8289 "configure"
|
||||
#line 8285 "configure"
|
||||
#include "confdefs.h"
|
||||
|
||||
#include <netdb.h>
|
||||
@@ -8293,7 +8289,7 @@ int main() {
|
||||
int i = setnetent(0); return(0);
|
||||
; return 0; }
|
||||
EOF
|
||||
if { (eval echo configure:8297: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
|
||||
if { (eval echo configure:8293: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
|
||||
rm -rf conftest*
|
||||
echo "$ac_t""yes" 1>&6
|
||||
ISC_LWRES_SETNETENTINT="#define ISC_LWRES_SETNETENTINT 1"
|
||||
@@ -8308,9 +8304,9 @@ rm -f conftest*
|
||||
|
||||
|
||||
echo $ac_n "checking for int endnetent""... $ac_c" 1>&6
|
||||
echo "configure:8312: checking for int endnetent" >&5
|
||||
echo "configure:8308: checking for int endnetent" >&5
|
||||
cat > conftest.$ac_ext <<EOF
|
||||
#line 8314 "configure"
|
||||
#line 8310 "configure"
|
||||
#include "confdefs.h"
|
||||
|
||||
#include <netdb.h>
|
||||
@@ -8318,7 +8314,7 @@ int main() {
|
||||
int i = endnetent(); return(0);
|
||||
; return 0; }
|
||||
EOF
|
||||
if { (eval echo configure:8322: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
|
||||
if { (eval echo configure:8318: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
|
||||
rm -rf conftest*
|
||||
echo "$ac_t""yes" 1>&6
|
||||
ISC_LWRES_ENDNETENTINT="#define ISC_LWRES_ENDNETENTINT 1"
|
||||
@@ -8333,9 +8329,9 @@ rm -f conftest*
|
||||
|
||||
|
||||
echo $ac_n "checking for gethostbyaddr(const void *, size_t, ...)""... $ac_c" 1>&6
|
||||
echo "configure:8337: checking for gethostbyaddr(const void *, size_t, ...)" >&5
|
||||
echo "configure:8333: checking for gethostbyaddr(const void *, size_t, ...)" >&5
|
||||
cat > conftest.$ac_ext <<EOF
|
||||
#line 8339 "configure"
|
||||
#line 8335 "configure"
|
||||
#include "confdefs.h"
|
||||
|
||||
#include <netdb.h>
|
||||
@@ -8344,7 +8340,7 @@ int main() {
|
||||
return(0);
|
||||
; return 0; }
|
||||
EOF
|
||||
if { (eval echo configure:8348: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
|
||||
if { (eval echo configure:8344: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
|
||||
rm -rf conftest*
|
||||
echo "$ac_t""yes" 1>&6
|
||||
ISC_LWRES_GETHOSTBYADDRVOID="#define ISC_LWRES_GETHOSTBYADDRVOID 1"
|
||||
@@ -8359,9 +8355,9 @@ rm -f conftest*
|
||||
|
||||
|
||||
echo $ac_n "checking for h_errno in netdb.h""... $ac_c" 1>&6
|
||||
echo "configure:8363: checking for h_errno in netdb.h" >&5
|
||||
echo "configure:8359: checking for h_errno in netdb.h" >&5
|
||||
cat > conftest.$ac_ext <<EOF
|
||||
#line 8365 "configure"
|
||||
#line 8361 "configure"
|
||||
#include "confdefs.h"
|
||||
|
||||
#include <netdb.h>
|
||||
@@ -8369,7 +8365,7 @@ int main() {
|
||||
h_errno = 1; return(0);
|
||||
; return 0; }
|
||||
EOF
|
||||
if { (eval echo configure:8373: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
|
||||
if { (eval echo configure:8369: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
|
||||
rm -rf conftest*
|
||||
echo "$ac_t""yes" 1>&6
|
||||
ISC_LWRES_NEEDHERRNO="#undef ISC_LWRES_NEEDHERRNO"
|
||||
@@ -8384,12 +8380,12 @@ rm -f conftest*
|
||||
|
||||
|
||||
echo $ac_n "checking for getipnodebyname""... $ac_c" 1>&6
|
||||
echo "configure:8388: checking for getipnodebyname" >&5
|
||||
echo "configure:8384: checking for getipnodebyname" >&5
|
||||
if eval "test \"`echo '$''{'ac_cv_func_getipnodebyname'+set}'`\" = set"; then
|
||||
echo $ac_n "(cached) $ac_c" 1>&6
|
||||
else
|
||||
cat > conftest.$ac_ext <<EOF
|
||||
#line 8393 "configure"
|
||||
#line 8389 "configure"
|
||||
#include "confdefs.h"
|
||||
/* System header to define __stub macros and hopefully few prototypes,
|
||||
which can conflict with char getipnodebyname(); below. */
|
||||
@@ -8412,7 +8408,7 @@ getipnodebyname();
|
||||
|
||||
; return 0; }
|
||||
EOF
|
||||
if { (eval echo configure:8416: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
|
||||
if { (eval echo configure:8412: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
|
||||
rm -rf conftest*
|
||||
eval "ac_cv_func_getipnodebyname=yes"
|
||||
else
|
||||
@@ -8433,12 +8429,12 @@ ISC_LWRES_GETIPNODEPROTO="#define ISC_LWRES_GETIPNODEPROTO 1"
|
||||
fi
|
||||
|
||||
echo $ac_n "checking for getnameinfo""... $ac_c" 1>&6
|
||||
echo "configure:8437: checking for getnameinfo" >&5
|
||||
echo "configure:8433: checking for getnameinfo" >&5
|
||||
if eval "test \"`echo '$''{'ac_cv_func_getnameinfo'+set}'`\" = set"; then
|
||||
echo $ac_n "(cached) $ac_c" 1>&6
|
||||
else
|
||||
cat > conftest.$ac_ext <<EOF
|
||||
#line 8442 "configure"
|
||||
#line 8438 "configure"
|
||||
#include "confdefs.h"
|
||||
/* System header to define __stub macros and hopefully few prototypes,
|
||||
which can conflict with char getnameinfo(); below. */
|
||||
@@ -8461,7 +8457,7 @@ getnameinfo();
|
||||
|
||||
; return 0; }
|
||||
EOF
|
||||
if { (eval echo configure:8465: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
|
||||
if { (eval echo configure:8461: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
|
||||
rm -rf conftest*
|
||||
eval "ac_cv_func_getnameinfo=yes"
|
||||
else
|
||||
@@ -8482,12 +8478,12 @@ ISC_LWRES_GETNAMEINFOPROTO="#define ISC_LWRES_GETNAMEINFOPROTO 1"
|
||||
fi
|
||||
|
||||
echo $ac_n "checking for getaddrinfo""... $ac_c" 1>&6
|
||||
echo "configure:8486: checking for getaddrinfo" >&5
|
||||
echo "configure:8482: checking for getaddrinfo" >&5
|
||||
if eval "test \"`echo '$''{'ac_cv_func_getaddrinfo'+set}'`\" = set"; then
|
||||
echo $ac_n "(cached) $ac_c" 1>&6
|
||||
else
|
||||
cat > conftest.$ac_ext <<EOF
|
||||
#line 8491 "configure"
|
||||
#line 8487 "configure"
|
||||
#include "confdefs.h"
|
||||
/* System header to define __stub macros and hopefully few prototypes,
|
||||
which can conflict with char getaddrinfo(); below. */
|
||||
@@ -8510,7 +8506,7 @@ getaddrinfo();
|
||||
|
||||
; return 0; }
|
||||
EOF
|
||||
if { (eval echo configure:8514: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
|
||||
if { (eval echo configure:8510: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
|
||||
rm -rf conftest*
|
||||
eval "ac_cv_func_getaddrinfo=yes"
|
||||
else
|
||||
@@ -8535,12 +8531,12 @@ ISC_LWRES_GETADDRINFOPROTO="#define ISC_LWRES_GETADDRINFOPROTO 1"
|
||||
fi
|
||||
|
||||
echo $ac_n "checking for gai_strerror""... $ac_c" 1>&6
|
||||
echo "configure:8539: checking for gai_strerror" >&5
|
||||
echo "configure:8535: checking for gai_strerror" >&5
|
||||
if eval "test \"`echo '$''{'ac_cv_func_gai_strerror'+set}'`\" = set"; then
|
||||
echo $ac_n "(cached) $ac_c" 1>&6
|
||||
else
|
||||
cat > conftest.$ac_ext <<EOF
|
||||
#line 8544 "configure"
|
||||
#line 8540 "configure"
|
||||
#include "confdefs.h"
|
||||
/* System header to define __stub macros and hopefully few prototypes,
|
||||
which can conflict with char gai_strerror(); below. */
|
||||
@@ -8563,7 +8559,7 @@ gai_strerror();
|
||||
|
||||
; return 0; }
|
||||
EOF
|
||||
if { (eval echo configure:8567: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
|
||||
if { (eval echo configure:8563: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
|
||||
rm -rf conftest*
|
||||
eval "ac_cv_func_gai_strerror=yes"
|
||||
else
|
||||
@@ -8593,9 +8589,9 @@ fi
|
||||
# Look for a sysctl call to get the list of network interfaces.
|
||||
#
|
||||
echo $ac_n "checking for interface list sysctl""... $ac_c" 1>&6
|
||||
echo "configure:8597: checking for interface list sysctl" >&5
|
||||
echo "configure:8593: checking for interface list sysctl" >&5
|
||||
cat > conftest.$ac_ext <<EOF
|
||||
#line 8599 "configure"
|
||||
#line 8595 "configure"
|
||||
#include "confdefs.h"
|
||||
|
||||
#include <sys/param.h>
|
||||
@@ -8625,12 +8621,12 @@ rm -f conftest*
|
||||
# Check for some other useful functions that are not ever-present.
|
||||
#
|
||||
echo $ac_n "checking for strsep""... $ac_c" 1>&6
|
||||
echo "configure:8629: checking for strsep" >&5
|
||||
echo "configure:8625: checking for strsep" >&5
|
||||
if eval "test \"`echo '$''{'ac_cv_func_strsep'+set}'`\" = set"; then
|
||||
echo $ac_n "(cached) $ac_c" 1>&6
|
||||
else
|
||||
cat > conftest.$ac_ext <<EOF
|
||||
#line 8634 "configure"
|
||||
#line 8630 "configure"
|
||||
#include "confdefs.h"
|
||||
/* System header to define __stub macros and hopefully few prototypes,
|
||||
which can conflict with char strsep(); below. */
|
||||
@@ -8653,7 +8649,7 @@ strsep();
|
||||
|
||||
; return 0; }
|
||||
EOF
|
||||
if { (eval echo configure:8657: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
|
||||
if { (eval echo configure:8653: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
|
||||
rm -rf conftest*
|
||||
eval "ac_cv_func_strsep=yes"
|
||||
else
|
||||
@@ -8674,12 +8670,12 @@ ISC_PLATFORM_NEEDSTRSEP="#define ISC_PLATFORM_NEEDSTRSEP 1"
|
||||
fi
|
||||
|
||||
echo $ac_n "checking for vsnprintf""... $ac_c" 1>&6
|
||||
echo "configure:8678: checking for vsnprintf" >&5
|
||||
echo "configure:8674: checking for vsnprintf" >&5
|
||||
if eval "test \"`echo '$''{'ac_cv_func_vsnprintf'+set}'`\" = set"; then
|
||||
echo $ac_n "(cached) $ac_c" 1>&6
|
||||
else
|
||||
cat > conftest.$ac_ext <<EOF
|
||||
#line 8683 "configure"
|
||||
#line 8679 "configure"
|
||||
#include "confdefs.h"
|
||||
/* System header to define __stub macros and hopefully few prototypes,
|
||||
which can conflict with char vsnprintf(); below. */
|
||||
@@ -8702,7 +8698,7 @@ vsnprintf();
|
||||
|
||||
; return 0; }
|
||||
EOF
|
||||
if { (eval echo configure:8706: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
|
||||
if { (eval echo configure:8702: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
|
||||
rm -rf conftest*
|
||||
eval "ac_cv_func_vsnprintf=yes"
|
||||
else
|
||||
@@ -8726,6 +8722,57 @@ fi
|
||||
|
||||
|
||||
|
||||
echo $ac_n "checking for strerror""... $ac_c" 1>&6
|
||||
echo "configure:8727: checking for strerror" >&5
|
||||
if eval "test \"`echo '$''{'ac_cv_func_strerror'+set}'`\" = set"; then
|
||||
echo $ac_n "(cached) $ac_c" 1>&6
|
||||
else
|
||||
cat > conftest.$ac_ext <<EOF
|
||||
#line 8732 "configure"
|
||||
#include "confdefs.h"
|
||||
/* System header to define __stub macros and hopefully few prototypes,
|
||||
which can conflict with char strerror(); below. */
|
||||
#include <assert.h>
|
||||
/* Override any gcc2 internal prototype to avoid an error. */
|
||||
/* We use char because int might match the return type of a gcc2
|
||||
builtin and then its argument prototype would still apply. */
|
||||
char strerror();
|
||||
|
||||
int main() {
|
||||
|
||||
/* The GNU C library defines this for functions which it implements
|
||||
to always fail with ENOSYS. Some functions are actually named
|
||||
something starting with __ and the normal name is an alias. */
|
||||
#if defined (__stub_strerror) || defined (__stub___strerror)
|
||||
choke me
|
||||
#else
|
||||
strerror();
|
||||
#endif
|
||||
|
||||
; return 0; }
|
||||
EOF
|
||||
if { (eval echo configure:8755: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
|
||||
rm -rf conftest*
|
||||
eval "ac_cv_func_strerror=yes"
|
||||
else
|
||||
echo "configure: failed program was:" >&5
|
||||
cat conftest.$ac_ext >&5
|
||||
rm -rf conftest*
|
||||
eval "ac_cv_func_strerror=no"
|
||||
fi
|
||||
rm -f conftest*
|
||||
fi
|
||||
|
||||
if eval "test \"`echo '$ac_cv_func_'strerror`\" = yes"; then
|
||||
echo "$ac_t""yes" 1>&6
|
||||
cat >> confdefs.h <<\EOF
|
||||
#define HAVE_STRERROR 1
|
||||
EOF
|
||||
|
||||
else
|
||||
echo "$ac_t""no" 1>&6
|
||||
fi
|
||||
|
||||
|
||||
|
||||
|
||||
@@ -8738,17 +8785,17 @@ fi
|
||||
# but that's defined elsewhere since we don't use configure on Win32.
|
||||
#
|
||||
echo $ac_n "checking printf format modifier for 64-bit integers""... $ac_c" 1>&6
|
||||
echo "configure:8742: checking printf format modifier for 64-bit integers" >&5
|
||||
echo "configure:8789: checking printf format modifier for 64-bit integers" >&5
|
||||
if test "$cross_compiling" = yes; then
|
||||
echo "$ac_t""assuming target platform uses ll" 1>&6
|
||||
ISC_PLATFORM_QUADFORMAT='#define ISC_PLATFORM_QUADFORMAT "ll"'
|
||||
else
|
||||
cat > conftest.$ac_ext <<EOF
|
||||
#line 8748 "configure"
|
||||
#line 8795 "configure"
|
||||
#include "confdefs.h"
|
||||
main() { exit(!(sizeof(long long int) == sizeof(long int))); }
|
||||
EOF
|
||||
if { (eval echo configure:8752: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
|
||||
if { (eval echo configure:8799: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
|
||||
then
|
||||
echo "$ac_t""l" 1>&6
|
||||
ISC_PLATFORM_QUADFORMAT='#define ISC_PLATFORM_QUADFORMAT "l"'
|
||||
@@ -8768,12 +8815,12 @@ fi
|
||||
# Security Stuff
|
||||
#
|
||||
echo $ac_n "checking for chroot""... $ac_c" 1>&6
|
||||
echo "configure:8772: checking for chroot" >&5
|
||||
echo "configure:8819: checking for chroot" >&5
|
||||
if eval "test \"`echo '$''{'ac_cv_func_chroot'+set}'`\" = set"; then
|
||||
echo $ac_n "(cached) $ac_c" 1>&6
|
||||
else
|
||||
cat > conftest.$ac_ext <<EOF
|
||||
#line 8777 "configure"
|
||||
#line 8824 "configure"
|
||||
#include "confdefs.h"
|
||||
/* System header to define __stub macros and hopefully few prototypes,
|
||||
which can conflict with char chroot(); below. */
|
||||
@@ -8796,7 +8843,7 @@ chroot();
|
||||
|
||||
; return 0; }
|
||||
EOF
|
||||
if { (eval echo configure:8800: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
|
||||
if { (eval echo configure:8847: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
|
||||
rm -rf conftest*
|
||||
eval "ac_cv_func_chroot=yes"
|
||||
else
|
||||
@@ -8830,17 +8877,17 @@ case "$enable_linux_caps" in
|
||||
do
|
||||
ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'`
|
||||
echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6
|
||||
echo "configure:8834: checking for $ac_hdr" >&5
|
||||
echo "configure:8881: checking for $ac_hdr" >&5
|
||||
if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then
|
||||
echo $ac_n "(cached) $ac_c" 1>&6
|
||||
else
|
||||
cat > conftest.$ac_ext <<EOF
|
||||
#line 8839 "configure"
|
||||
#line 8886 "configure"
|
||||
#include "confdefs.h"
|
||||
#include <$ac_hdr>
|
||||
EOF
|
||||
ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
|
||||
{ (eval echo configure:8844: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
|
||||
{ (eval echo configure:8891: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
|
||||
ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
|
||||
if test -z "$ac_err"; then
|
||||
rm -rf conftest*
|
||||
@@ -8874,17 +8921,17 @@ for ac_hdr in sys/prctl.h
|
||||
do
|
||||
ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'`
|
||||
echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6
|
||||
echo "configure:8878: checking for $ac_hdr" >&5
|
||||
echo "configure:8925: checking for $ac_hdr" >&5
|
||||
if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then
|
||||
echo $ac_n "(cached) $ac_c" 1>&6
|
||||
else
|
||||
cat > conftest.$ac_ext <<EOF
|
||||
#line 8883 "configure"
|
||||
#line 8930 "configure"
|
||||
#include "confdefs.h"
|
||||
#include <$ac_hdr>
|
||||
EOF
|
||||
ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
|
||||
{ (eval echo configure:8888: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
|
||||
{ (eval echo configure:8935: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
|
||||
ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
|
||||
if test -z "$ac_err"; then
|
||||
rm -rf conftest*
|
||||
@@ -8915,9 +8962,9 @@ done
|
||||
# BSD/OS, and perhaps some others, don't define rlim_t.
|
||||
#
|
||||
echo $ac_n "checking for type rlim_t""... $ac_c" 1>&6
|
||||
echo "configure:8919: checking for type rlim_t" >&5
|
||||
echo "configure:8966: checking for type rlim_t" >&5
|
||||
cat > conftest.$ac_ext <<EOF
|
||||
#line 8921 "configure"
|
||||
#line 8968 "configure"
|
||||
#include "confdefs.h"
|
||||
|
||||
#include <sys/types.h>
|
||||
@@ -8927,7 +8974,7 @@ int main() {
|
||||
rlim_t rl = 19671212; return (0);
|
||||
; return 0; }
|
||||
EOF
|
||||
if { (eval echo configure:8931: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
|
||||
if { (eval echo configure:8978: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
|
||||
rm -rf conftest*
|
||||
echo "$ac_t""yes" 1>&6
|
||||
ISC_PLATFORM_RLIMITTYPE="#define ISC_PLATFORM_RLIMITTYPE rlim_t"
|
||||
@@ -8938,12 +8985,12 @@ else
|
||||
echo "$ac_t""no" 1>&6
|
||||
|
||||
echo $ac_n "checking type of rlim_cur""... $ac_c" 1>&6
|
||||
echo "configure:8942: checking type of rlim_cur" >&5
|
||||
echo "configure:8989: checking type of rlim_cur" >&5
|
||||
if test "$cross_compiling" = yes; then
|
||||
{ echo "configure: error: cannot determine type of rlim_cur when cross compiling - define rlim_t" 1>&2; exit 1; }
|
||||
else
|
||||
cat > conftest.$ac_ext <<EOF
|
||||
#line 8947 "configure"
|
||||
#line 8994 "configure"
|
||||
#include "confdefs.h"
|
||||
|
||||
#include <sys/types.h>
|
||||
@@ -8951,7 +8998,7 @@ else
|
||||
#include <sys/resource.h>
|
||||
main() { struct rlimit r; exit(!(sizeof(r.rlim_cur) == sizeof(int)));}
|
||||
EOF
|
||||
if { (eval echo configure:8955: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
|
||||
if { (eval echo configure:9002: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
|
||||
then
|
||||
echo "$ac_t""int" 1>&6
|
||||
ISC_PLATFORM_RLIMITTYPE="#define ISC_PLATFORM_RLIMITTYPE int"
|
||||
@@ -8964,7 +9011,7 @@ if test "$cross_compiling" = yes; then
|
||||
{ echo "configure: error: this cannot happen" 1>&2; exit 1; }
|
||||
else
|
||||
cat > conftest.$ac_ext <<EOF
|
||||
#line 8968 "configure"
|
||||
#line 9015 "configure"
|
||||
#include "confdefs.h"
|
||||
|
||||
#include <sys/types.h>
|
||||
@@ -8972,7 +9019,7 @@ else
|
||||
#include <sys/resource.h>
|
||||
main() { struct rlimit r; exit(!(sizeof(r.rlim_cur) == sizeof(long int)));}
|
||||
EOF
|
||||
if { (eval echo configure:8976: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
|
||||
if { (eval echo configure:9023: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
|
||||
then
|
||||
echo "$ac_t""long int" 1>&6
|
||||
ISC_PLATFORM_RLIMITTYPE="#define ISC_PLATFORM_RLIMITTYPE long int"
|
||||
@@ -8985,7 +9032,7 @@ if test "$cross_compiling" = yes; then
|
||||
{ echo "configure: error: this cannot happen" 1>&2; exit 1; }
|
||||
else
|
||||
cat > conftest.$ac_ext <<EOF
|
||||
#line 8989 "configure"
|
||||
#line 9036 "configure"
|
||||
#include "confdefs.h"
|
||||
|
||||
#include <sys/types.h>
|
||||
@@ -8993,7 +9040,7 @@ else
|
||||
#include <sys/resource.h>
|
||||
main() { struct rlimit r; exit((!sizeof(r.rlim_cur) == sizeof(long long int)));}
|
||||
EOF
|
||||
if { (eval echo configure:8997: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
|
||||
if { (eval echo configure:9044: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
|
||||
then
|
||||
echo "$ac_t""long long int" 1>&6
|
||||
ISC_PLATFORM_RLIMITTYPE="#define ISC_PLATFORM_RLIMITTYPE long long int"
|
||||
@@ -9117,7 +9164,7 @@ do
|
||||
# Extract the first word of "$ac_prog", so it can be a program name with args.
|
||||
set dummy $ac_prog; ac_word=$2
|
||||
echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
|
||||
echo "configure:9121: checking for $ac_word" >&5
|
||||
echo "configure:9168: checking for $ac_word" >&5
|
||||
if eval "test \"`echo '$''{'ac_cv_path_OPENJADE'+set}'`\" = set"; then
|
||||
echo $ac_n "(cached) $ac_c" 1>&6
|
||||
else
|
||||
@@ -9164,7 +9211,7 @@ do
|
||||
# Extract the first word of "$ac_prog", so it can be a program name with args.
|
||||
set dummy $ac_prog; ac_word=$2
|
||||
echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
|
||||
echo "configure:9168: checking for $ac_word" >&5
|
||||
echo "configure:9215: checking for $ac_word" >&5
|
||||
if eval "test \"`echo '$''{'ac_cv_path_JADETEX'+set}'`\" = set"; then
|
||||
echo $ac_n "(cached) $ac_c" 1>&6
|
||||
else
|
||||
@@ -9207,7 +9254,7 @@ do
|
||||
# Extract the first word of "$ac_prog", so it can be a program name with args.
|
||||
set dummy $ac_prog; ac_word=$2
|
||||
echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
|
||||
echo "configure:9211: checking for $ac_word" >&5
|
||||
echo "configure:9258: checking for $ac_word" >&5
|
||||
if eval "test \"`echo '$''{'ac_cv_path_PDFJADETEX'+set}'`\" = set"; then
|
||||
echo $ac_n "(cached) $ac_c" 1>&6
|
||||
else
|
||||
@@ -9263,7 +9310,7 @@ test -n "$PDFJADETEX" || PDFJADETEX="pdfjadetex"
|
||||
|
||||
SGMLCATALOG=""
|
||||
echo $ac_n "checking for catalog""... $ac_c" 1>&6
|
||||
echo "configure:9267: checking for catalog" >&5
|
||||
echo "configure:9314: checking for catalog" >&5
|
||||
for d in $sgmltrees
|
||||
do
|
||||
f=$d/catalog
|
||||
@@ -9305,7 +9352,7 @@ done
|
||||
|
||||
HTMLSTYLE=""
|
||||
echo $ac_n "checking for html/docbook.dsl""... $ac_c" 1>&6
|
||||
echo "configure:9309: checking for html/docbook.dsl" >&5
|
||||
echo "configure:9356: checking for html/docbook.dsl" >&5
|
||||
for d in $stylepath
|
||||
do
|
||||
f=$d/html/docbook.dsl
|
||||
@@ -9326,7 +9373,7 @@ fi
|
||||
|
||||
PRINTSTYLE=""
|
||||
echo $ac_n "checking for print/docbook.dsl""... $ac_c" 1>&6
|
||||
echo "configure:9330: checking for print/docbook.dsl" >&5
|
||||
echo "configure:9377: checking for print/docbook.dsl" >&5
|
||||
for d in $stylepath
|
||||
do
|
||||
f=$d/print/docbook.dsl
|
||||
@@ -9352,7 +9399,7 @@ fi
|
||||
|
||||
XMLDCL=""
|
||||
echo $ac_n "checking for docbook/dsssl/modular/dtds/decls/xml.dcl""... $ac_c" 1>&6
|
||||
echo "configure:9356: checking for docbook/dsssl/modular/dtds/decls/xml.dcl" >&5
|
||||
echo "configure:9403: checking for docbook/dsssl/modular/dtds/decls/xml.dcl" >&5
|
||||
for d in $sgmltrees
|
||||
do
|
||||
f=$d/docbook/dsssl/modular/dtds/decls/xml.dcl
|
||||
@@ -9378,7 +9425,7 @@ fi
|
||||
|
||||
DOCBOOK2MANSPEC=""
|
||||
echo $ac_n "checking for docbook2X/docbook2man-spec.pl""... $ac_c" 1>&6
|
||||
echo "configure:9382: checking for docbook2X/docbook2man-spec.pl" >&5
|
||||
echo "configure:9429: checking for docbook2X/docbook2man-spec.pl" >&5
|
||||
for d in $sgmltrees
|
||||
do
|
||||
f=$d/docbook2X/docbook2man-spec.pl
|
||||
|
||||
+6
-6
@@ -18,7 +18,7 @@ AC_DIVERT_PUSH(AC_DIVERSION_NOTICE)dnl
|
||||
esyscmd([sed "s/^/# /" COPYRIGHT])dnl
|
||||
AC_DIVERT_POP()dnl
|
||||
|
||||
AC_REVISION($Revision: 1.294.2.1 $)
|
||||
AC_REVISION($Revision: 1.294.2.3 $)
|
||||
|
||||
AC_INIT(lib/dns/name.c)
|
||||
AC_PREREQ(2.13)
|
||||
@@ -198,7 +198,7 @@ AC_CHECK_HEADERS(fcntl.h sys/time.h unistd.h sys/sockio.h sys/select.h sys/sysct
|
||||
|
||||
AC_C_CONST
|
||||
AC_C_INLINE
|
||||
AC_CHECK_FUNC(sysctlbyname, AC_DEFINE(HAVE_SYSCTLBYNAME),)
|
||||
AC_CHECK_FUNC(sysctlbyname, AC_DEFINE(HAVE_SYSCTLBYNAME))
|
||||
|
||||
#
|
||||
# UnixWare 7.1.1 with the feature supplement to the UDK compiler
|
||||
@@ -280,8 +280,8 @@ AC_C_BIGENDIAN
|
||||
#
|
||||
AC_MSG_CHECKING(for OpenSSL library)
|
||||
AC_ARG_WITH(openssl,
|
||||
[ --with-openssl=PATH Specify path for system-supplied openssl
|
||||
(required for DNSSEC)],
|
||||
[ --with-openssl[=PATH] Build with OpenSSL [yes|no|path].
|
||||
(Required for DNSSEC)],
|
||||
use_openssl="$withval", use_openssl="no")
|
||||
|
||||
case "$use_openssl" in
|
||||
@@ -1223,8 +1223,7 @@ AC_TRY_COMPILE([
|
||||
#include <netdb.h>],
|
||||
[struct rrsetinfo r; return (0);],
|
||||
[AC_MSG_RESULT(yes)
|
||||
ISC_LWRES_NEEDRRSETINFO="#undef ISC_LWRES_NEEDRRSETINFO"
|
||||
AC_DEFINE(HAVE_RRSETINFO)],
|
||||
ISC_LWRES_NEEDRRSETINFO="#undef ISC_LWRES_NEEDRRSETINFO"],
|
||||
[AC_MSG_RESULT(no)
|
||||
ISC_LWRES_NEEDRRSETINFO="#define ISC_LWRES_NEEDRRSETINFO 1"])
|
||||
AC_SUBST(ISC_LWRES_NEEDRRSETINFO)
|
||||
@@ -1345,6 +1344,7 @@ AC_CHECK_FUNC(vsnprintf,
|
||||
ISC_PLATFORM_NEEDVSNPRINTF="#define ISC_PLATFORM_NEEDVSNPRINTF 1"])
|
||||
AC_SUBST(ISC_PLATFORM_NEEDSTRSEP)
|
||||
AC_SUBST(ISC_PLATFORM_NEEDVSNPRINTF)
|
||||
AC_CHECK_FUNC(strerror, AC_DEFINE(HAVE_STRERROR))
|
||||
|
||||
AC_SUBST(ISC_EXTRA_OBJS)
|
||||
AC_SUBST(ISC_EXTRA_SRCS)
|
||||
|
||||
@@ -1,12 +1,14 @@
|
||||
# Copyright (C) 2000, 2001 Nominum, Inc. All Rights Reserved.
|
||||
|
||||
CC = @CC@
|
||||
LIBS = @LIBS@
|
||||
DEFS = @DEFS@
|
||||
|
||||
queryperf: queryperf.o
|
||||
$(CC) $(CFLAGS) queryperf.o $(LIBS) -lm -o queryperf
|
||||
$(CC) $(CFLAGS) $(DEFS) queryperf.o $(LIBS) -lm -o queryperf
|
||||
|
||||
queryperf.o: queryperf.c
|
||||
$(CC) $(CFLAGS) -c queryperf.c
|
||||
$(CC) $(CFLAGS) $(DEFS) -c queryperf.c
|
||||
|
||||
clean:
|
||||
rm -f *.o queryperf
|
||||
|
||||
Vendored
+49
-11
@@ -748,15 +748,17 @@ fi
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
echo $ac_n "checking for library containing res_mkquery""... $ac_c" 1>&6
|
||||
echo "configure:753: checking for library containing res_mkquery" >&5
|
||||
echo "configure:755: checking for library containing res_mkquery" >&5
|
||||
if eval "test \"`echo '$''{'ac_cv_search_res_mkquery'+set}'`\" = set"; then
|
||||
echo $ac_n "(cached) $ac_c" 1>&6
|
||||
else
|
||||
ac_func_search_save_LIBS="$LIBS"
|
||||
ac_cv_search_res_mkquery="no"
|
||||
cat > conftest.$ac_ext <<EOF
|
||||
#line 760 "configure"
|
||||
#line 762 "configure"
|
||||
#include "confdefs.h"
|
||||
/* Override any gcc2 internal prototype to avoid an error. */
|
||||
/* We use char because int might match the return type of a gcc2
|
||||
@@ -767,7 +769,7 @@ int main() {
|
||||
res_mkquery()
|
||||
; return 0; }
|
||||
EOF
|
||||
if { (eval echo configure:771: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
|
||||
if { (eval echo configure:773: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
|
||||
rm -rf conftest*
|
||||
ac_cv_search_res_mkquery="none required"
|
||||
else
|
||||
@@ -778,7 +780,7 @@ rm -f conftest*
|
||||
test "$ac_cv_search_res_mkquery" = "no" && for i in resolv bind; do
|
||||
LIBS="-l$i $ac_func_search_save_LIBS"
|
||||
cat > conftest.$ac_ext <<EOF
|
||||
#line 782 "configure"
|
||||
#line 784 "configure"
|
||||
#include "confdefs.h"
|
||||
/* Override any gcc2 internal prototype to avoid an error. */
|
||||
/* We use char because int might match the return type of a gcc2
|
||||
@@ -789,7 +791,7 @@ int main() {
|
||||
res_mkquery()
|
||||
; return 0; }
|
||||
EOF
|
||||
if { (eval echo configure:793: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
|
||||
if { (eval echo configure:795: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
|
||||
rm -rf conftest*
|
||||
ac_cv_search_res_mkquery="-l$i"
|
||||
break
|
||||
@@ -810,7 +812,7 @@ else :
|
||||
|
||||
fi;
|
||||
echo $ac_n "checking for socket in -lsocket""... $ac_c" 1>&6
|
||||
echo "configure:814: checking for socket in -lsocket" >&5
|
||||
echo "configure:816: checking for socket in -lsocket" >&5
|
||||
ac_lib_var=`echo socket'_'socket | sed 'y%./+-%__p_%'`
|
||||
if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
|
||||
echo $ac_n "(cached) $ac_c" 1>&6
|
||||
@@ -818,7 +820,7 @@ else
|
||||
ac_save_LIBS="$LIBS"
|
||||
LIBS="-lsocket $LIBS"
|
||||
cat > conftest.$ac_ext <<EOF
|
||||
#line 822 "configure"
|
||||
#line 824 "configure"
|
||||
#include "confdefs.h"
|
||||
/* Override any gcc2 internal prototype to avoid an error. */
|
||||
/* We use char because int might match the return type of a gcc2
|
||||
@@ -829,7 +831,7 @@ int main() {
|
||||
socket()
|
||||
; return 0; }
|
||||
EOF
|
||||
if { (eval echo configure:833: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
|
||||
if { (eval echo configure:835: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
|
||||
rm -rf conftest*
|
||||
eval "ac_cv_lib_$ac_lib_var=yes"
|
||||
else
|
||||
@@ -857,7 +859,7 @@ else
|
||||
fi
|
||||
|
||||
echo $ac_n "checking for inet_ntoa in -lnsl""... $ac_c" 1>&6
|
||||
echo "configure:861: checking for inet_ntoa in -lnsl" >&5
|
||||
echo "configure:863: checking for inet_ntoa in -lnsl" >&5
|
||||
ac_lib_var=`echo nsl'_'inet_ntoa | sed 'y%./+-%__p_%'`
|
||||
if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
|
||||
echo $ac_n "(cached) $ac_c" 1>&6
|
||||
@@ -865,7 +867,7 @@ else
|
||||
ac_save_LIBS="$LIBS"
|
||||
LIBS="-lnsl $LIBS"
|
||||
cat > conftest.$ac_ext <<EOF
|
||||
#line 869 "configure"
|
||||
#line 871 "configure"
|
||||
#include "confdefs.h"
|
||||
/* Override any gcc2 internal prototype to avoid an error. */
|
||||
/* We use char because int might match the return type of a gcc2
|
||||
@@ -876,7 +878,7 @@ int main() {
|
||||
inet_ntoa()
|
||||
; return 0; }
|
||||
EOF
|
||||
if { (eval echo configure:880: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
|
||||
if { (eval echo configure:882: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
|
||||
rm -rf conftest*
|
||||
eval "ac_cv_lib_$ac_lib_var=yes"
|
||||
else
|
||||
@@ -903,6 +905,42 @@ else
|
||||
echo "$ac_t""no" 1>&6
|
||||
fi
|
||||
|
||||
echo $ac_n "checking for socklen_t""... $ac_c" 1>&6
|
||||
echo "configure:910: checking for socklen_t" >&5
|
||||
if eval "test \"`echo '$''{'ac_cv_type_socklen_t'+set}'`\" = set"; then
|
||||
echo $ac_n "(cached) $ac_c" 1>&6
|
||||
else
|
||||
|
||||
cat > conftest.$ac_ext <<EOF
|
||||
#line 916 "configure"
|
||||
#include "confdefs.h"
|
||||
#include <sys/types.h>
|
||||
#include <sys/socket.h>
|
||||
int main() {
|
||||
socklen_t len = 42; return len;
|
||||
; return 0; }
|
||||
EOF
|
||||
if { (eval echo configure:924: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
|
||||
rm -rf conftest*
|
||||
ac_cv_type_socklen_t=yes
|
||||
else
|
||||
echo "configure: failed program was:" >&5
|
||||
cat conftest.$ac_ext >&5
|
||||
rm -rf conftest*
|
||||
ac_cv_type_socklen_t=no
|
||||
fi
|
||||
rm -f conftest*
|
||||
|
||||
fi
|
||||
|
||||
echo "$ac_t""$ac_cv_type_socklen_t" 1>&6
|
||||
if test $ac_cv_type_socklen_t != yes; then
|
||||
cat >> confdefs.h <<\EOF
|
||||
#define socklen_t int
|
||||
EOF
|
||||
|
||||
fi
|
||||
|
||||
|
||||
trap '' 1 2 15
|
||||
cat > confcache <<\EOF
|
||||
|
||||
@@ -21,8 +21,24 @@ AC_PREREQ(2.13)
|
||||
|
||||
AC_PROG_CC
|
||||
|
||||
AC_DEFUN(AC_TYPE_SOCKLEN_T,
|
||||
[AC_CACHE_CHECK([for socklen_t], ac_cv_type_socklen_t,
|
||||
[
|
||||
AC_TRY_COMPILE(
|
||||
[#include <sys/types.h>
|
||||
#include <sys/socket.h>],
|
||||
[socklen_t len = 42; return len;],
|
||||
ac_cv_type_socklen_t=yes,
|
||||
ac_cv_type_socklen_t=no)
|
||||
])
|
||||
if test $ac_cv_type_socklen_t != yes; then
|
||||
AC_DEFINE(socklen_t, int)
|
||||
fi
|
||||
])
|
||||
|
||||
AC_SEARCH_LIBS(res_mkquery, resolv bind);
|
||||
AC_CHECK_LIB(socket, socket)
|
||||
AC_CHECK_LIB(nsl, inet_ntoa)
|
||||
AC_TYPE_SOCKLEN_T
|
||||
|
||||
AC_OUTPUT(Makefile)
|
||||
|
||||
@@ -18,7 +18,7 @@
|
||||
/***
|
||||
*** DNS Query Performance Testing Tool (queryperf.c)
|
||||
***
|
||||
*** Version $Id: queryperf.c,v 1.1.1.2 2001/07/18 23:33:04 gson Exp $
|
||||
*** Version $Id: queryperf.c,v 1.1.1.2.2.1 2001/09/27 00:44:26 marka Exp $
|
||||
***
|
||||
*** Stephen Jacob <sj@nominum.com>
|
||||
***/
|
||||
@@ -164,7 +164,7 @@ void
|
||||
show_startup_info(void) {
|
||||
printf("\n"
|
||||
"DNS Query Performance Testing Tool\n"
|
||||
"Version: $Id: queryperf.c,v 1.1.1.2 2001/07/18 23:33:04 gson Exp $\n"
|
||||
"Version: $Id: queryperf.c,v 1.1.1.2.2.1 2001/09/27 00:44:26 marka Exp $\n"
|
||||
"\n");
|
||||
}
|
||||
|
||||
@@ -582,12 +582,12 @@ open_socket(void) {
|
||||
bufsize = 1024 * socket_bufsize;
|
||||
|
||||
ret = setsockopt(sock, SOL_SOCKET, SO_RCVBUF,
|
||||
&bufsize, sizeof(bufsize));
|
||||
(char *) &bufsize, sizeof(bufsize));
|
||||
if (ret < 0)
|
||||
fprintf(stderr, "Warning: setsockbuf(SO_RCVBUF) failed\n");
|
||||
|
||||
ret = setsockopt(sock, SOL_SOCKET, SO_SNDBUF,
|
||||
&bufsize, sizeof(bufsize));
|
||||
(char *) &bufsize, sizeof(bufsize));
|
||||
if (ret < 0)
|
||||
fprintf(stderr, "Warning: setsockbuf(SO_SNDBUF) failed\n");
|
||||
|
||||
|
||||
@@ -1,195 +0,0 @@
|
||||
/*
|
||||
* Copyright (C) 2000, 2001 Internet Software Consortium.
|
||||
*
|
||||
* Permission to use, copy, modify, and distribute this software for any
|
||||
* purpose with or without fee is hereby granted, provided that the above
|
||||
* copyright notice and this permission notice appear in all copies.
|
||||
*
|
||||
* THE SOFTWARE IS PROVIDED "AS IS" AND INTERNET SOFTWARE CONSORTIUM
|
||||
* DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL
|
||||
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL
|
||||
* INTERNET SOFTWARE CONSORTIUM BE LIABLE FOR ANY SPECIAL, DIRECT,
|
||||
* INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING
|
||||
* FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT,
|
||||
* NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION
|
||||
* WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
|
||||
*/
|
||||
|
||||
/* $Id: dirdb.c,v 1.9 2001/01/09 21:46:22 bwelling Exp $ */
|
||||
|
||||
/*
|
||||
* A simple database driver that returns basic information about
|
||||
* files and directories in the Unix file system as DNS data.
|
||||
*/
|
||||
|
||||
#include <config.h>
|
||||
|
||||
#include <stdio.h>
|
||||
#include <string.h>
|
||||
#include <unistd.h>
|
||||
#include <sys/stat.h>
|
||||
#include <sys/sysmacros.h>
|
||||
|
||||
#include <isc/mem.h>
|
||||
#include <isc/print.h>
|
||||
#include <isc/result.h>
|
||||
#include <isc/util.h>
|
||||
|
||||
#include <dns/sdb.h>
|
||||
|
||||
#include <named/globals.h>
|
||||
|
||||
#include "dirdb.h"
|
||||
|
||||
static dns_sdbimplementation_t *dirdb = NULL;
|
||||
|
||||
#define CHECK(op) \
|
||||
do { result = (op); \
|
||||
if (result != ISC_R_SUCCESS) return (result); \
|
||||
} while (0)
|
||||
|
||||
#define CHECKN(op) \
|
||||
do { n = (op); \
|
||||
if (n < 0) return (ISC_R_FAILURE); \
|
||||
} while (0)
|
||||
|
||||
|
||||
/*
|
||||
* This database operates on relative names.
|
||||
*
|
||||
* Any name will be interpreted as a pathname offset from the directory
|
||||
* specified in the configuration file.
|
||||
*/
|
||||
static isc_result_t
|
||||
dirdb_lookup(const char *zone, const char *name, void *dbdata,
|
||||
dns_sdblookup_t *lookup)
|
||||
{
|
||||
char filename[255];
|
||||
char filename2[255];
|
||||
char buf[1024];
|
||||
struct stat statbuf;
|
||||
isc_result_t result;
|
||||
int n;
|
||||
|
||||
UNUSED(zone);
|
||||
UNUSED(dbdata);
|
||||
|
||||
if (strcmp(name, "@") == 0)
|
||||
snprintf(filename, sizeof(filename), "%s", (char *)dbdata);
|
||||
else
|
||||
snprintf(filename, sizeof(filename), "%s/%s",
|
||||
(char *)dbdata, name);
|
||||
CHECKN(lstat(filename, &statbuf));
|
||||
|
||||
if (S_ISDIR(statbuf.st_mode))
|
||||
CHECK(dns_sdb_putrr(lookup, "txt", 3600, "dir"));
|
||||
else if (S_ISCHR(statbuf.st_mode) || S_ISBLK(statbuf.st_mode)) {
|
||||
CHECKN(snprintf(buf, sizeof(buf),
|
||||
"\"%sdev\" \"major %d\" \"minor %d\"",
|
||||
S_ISCHR(statbuf.st_mode) ? "chr" : "blk",
|
||||
major(statbuf.st_rdev),
|
||||
minor(statbuf.st_rdev)));
|
||||
CHECK(dns_sdb_putrr(lookup, "txt", 3600, buf));
|
||||
} else if (S_ISFIFO(statbuf.st_mode))
|
||||
CHECK(dns_sdb_putrr(lookup, "txt", 3600, "pipe"));
|
||||
else if (S_ISSOCK(statbuf.st_mode))
|
||||
CHECK(dns_sdb_putrr(lookup, "txt", 3600, "socket"));
|
||||
else if (S_ISLNK(statbuf.st_mode)) {
|
||||
CHECKN(readlink(filename, filename2, sizeof(filename2) - 1));
|
||||
buf[n] = 0;
|
||||
CHECKN(snprintf(buf, sizeof(buf), "\"symlink\" \"%s\"",
|
||||
filename2));
|
||||
CHECK(dns_sdb_putrr(lookup, "txt", 3600, buf));
|
||||
} else if (!S_ISREG(statbuf.st_mode))
|
||||
CHECK(dns_sdb_putrr(lookup, "txt", 3600, "unknown"));
|
||||
else {
|
||||
CHECKN(snprintf(buf, sizeof(buf), "\"file\" \"size = %u\"",
|
||||
(unsigned int)statbuf.st_size));
|
||||
CHECK(dns_sdb_putrr(lookup, "txt", 3600, buf));
|
||||
}
|
||||
|
||||
return (ISC_R_SUCCESS);
|
||||
}
|
||||
|
||||
/*
|
||||
* lookup () does not return SOA or NS records, so authority() must be defined.
|
||||
*/
|
||||
static isc_result_t
|
||||
dirdb_authority(const char *zone, void *dbdata, dns_sdblookup_t *lookup) {
|
||||
isc_result_t result;
|
||||
|
||||
UNUSED(zone);
|
||||
UNUSED(dbdata);
|
||||
|
||||
result = dns_sdb_putsoa(lookup, "ns", "hostmaster", 0);
|
||||
INSIST(result == ISC_R_SUCCESS);
|
||||
result = dns_sdb_putrr(lookup, "ns", 86400, "ns1");
|
||||
INSIST(result == ISC_R_SUCCESS);
|
||||
result = dns_sdb_putrr(lookup, "ns", 86400, "ns2");
|
||||
INSIST(result == ISC_R_SUCCESS);
|
||||
return (ISC_R_SUCCESS);
|
||||
}
|
||||
|
||||
/*
|
||||
* Each database stores the top-level directory as the dbdata opaque
|
||||
* object. The create() function allocates it. argv[0] holds the top
|
||||
* level directory.
|
||||
*/
|
||||
static isc_result_t
|
||||
dirdb_create(const char *zone, int argc, char **argv,
|
||||
void *driverdata, void **dbdata)
|
||||
{
|
||||
UNUSED(zone);
|
||||
UNUSED(driverdata);
|
||||
|
||||
if (argc < 1)
|
||||
return (ISC_R_FAILURE);
|
||||
*dbdata = isc_mem_strdup((isc_mem_t *)driverdata, argv[0]);
|
||||
if (*dbdata == NULL)
|
||||
return (ISC_R_NOMEMORY);
|
||||
return (ISC_R_SUCCESS);
|
||||
}
|
||||
|
||||
/*
|
||||
* The destroy() function frees the memory allocated by create().
|
||||
*/
|
||||
static void
|
||||
dirdb_destroy(const char *zone, void *driverdata, void **dbdata) {
|
||||
UNUSED(zone);
|
||||
UNUSED(driverdata);
|
||||
isc_mem_free((isc_mem_t *)driverdata, *dbdata);
|
||||
}
|
||||
|
||||
/*
|
||||
* This zone does not support zone transfer, so allnodes() is NULL.
|
||||
*/
|
||||
static dns_sdbmethods_t dirdb_methods = {
|
||||
dirdb_lookup,
|
||||
dirdb_authority,
|
||||
NULL, /* allnodes */
|
||||
dirdb_create,
|
||||
dirdb_destroy
|
||||
};
|
||||
|
||||
/*
|
||||
* Wrapper around dns_sdb_register(). Note that the first ns_g_mctx is
|
||||
* being passed as the "driverdata" parameter, so that will it will be
|
||||
* passed to create() and destroy().
|
||||
*/
|
||||
isc_result_t
|
||||
dirdb_init(void) {
|
||||
unsigned int flags;
|
||||
flags = DNS_SDBFLAG_RELATIVEOWNER | DNS_SDBFLAG_RELATIVERDATA |
|
||||
DNS_SDBFLAG_THREADSAFE;
|
||||
return (dns_sdb_register("dir", &dirdb_methods, ns_g_mctx, flags,
|
||||
ns_g_mctx, &dirdb));
|
||||
}
|
||||
|
||||
/*
|
||||
* Wrapper around dns_sdb_unregister().
|
||||
*/
|
||||
void
|
||||
dirdb_clear(void) {
|
||||
if (dirdb != NULL)
|
||||
dns_sdb_unregister(&dirdb);
|
||||
}
|
||||
@@ -1,25 +0,0 @@
|
||||
/*
|
||||
* Copyright (C) 2000, 2001 Internet Software Consortium.
|
||||
*
|
||||
* Permission to use, copy, modify, and distribute this software for any
|
||||
* purpose with or without fee is hereby granted, provided that the above
|
||||
* copyright notice and this permission notice appear in all copies.
|
||||
*
|
||||
* THE SOFTWARE IS PROVIDED "AS IS" AND INTERNET SOFTWARE CONSORTIUM
|
||||
* DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL
|
||||
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL
|
||||
* INTERNET SOFTWARE CONSORTIUM BE LIABLE FOR ANY SPECIAL, DIRECT,
|
||||
* INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING
|
||||
* FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT,
|
||||
* NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION
|
||||
* WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
|
||||
*/
|
||||
|
||||
/* $Id: dirdb.h,v 1.2 2001/01/09 21:46:23 bwelling Exp $ */
|
||||
|
||||
#include <isc/types.h>
|
||||
|
||||
isc_result_t dirdb_init(void);
|
||||
|
||||
void dirdb_clear(void);
|
||||
|
||||
@@ -1,55 +0,0 @@
|
||||
This is the INSTALL file for 0.4. See
|
||||
http://www.venaas.no/ldap/bind-sdb/ for updates or other information.
|
||||
|
||||
BUILDING
|
||||
|
||||
You need the source for BIND 9.1.0 or newer (for zone transfers you
|
||||
will need at least 9.1.1rc3 due to a bug). Basically you need to follow
|
||||
the instructions in doc/misc/sdb, if my instructions doesn't make sense,
|
||||
please have a look at that as well.
|
||||
|
||||
Copy ldapdb.c to bin/named and ldapdb.h to bin/named/include in the
|
||||
source tree.
|
||||
|
||||
Next alter bin/named/Makefile.in. Add ldapdb.@O@ to DBDRIVER_OBJS and
|
||||
ldapdb.c to DBDRIVER_SRCS. You also need to add something like
|
||||
-I/usr/local/include to DBDRIVER_INCLUDES and
|
||||
-L/usr/local/lib -lldap -llber -lresolv to DBDRIVER_LIBS
|
||||
depending on what LDAP library you have and where you installed it.
|
||||
|
||||
Finally you need to edit bin/named/main.c. Below where it says
|
||||
"#include "xxdb.h"", add the line "#include <ldapdb.h>". Below where
|
||||
it says "xxdb_init();" add the line "ldapdb_init();", and finally
|
||||
below where it says "xxdb_clear();", add "ldapdb_clear();".
|
||||
|
||||
Now you should hopefully be able to build it.
|
||||
|
||||
|
||||
CONFIGURING
|
||||
|
||||
Before you do any configuring of LDAP stuff, please try to configure
|
||||
and start bind as usual to see if things work.
|
||||
|
||||
To do anything useful, you need to store a zone in some LDAP server.
|
||||
From this release on, you must use a schema called dNSZone. Note that
|
||||
it relies on some attribute definitions in the Cosine schema, so that
|
||||
must be included as well. The Cosine schema probably comes with your
|
||||
LDAP server. You can find dNSZone and further details on how to store
|
||||
the data in your LDAP server at
|
||||
http://www.venaas.no/ldap/bind-sdb/
|
||||
|
||||
For an example, have a look at my venaas.com zone. Try a subtree search
|
||||
for objectClass=* at
|
||||
ldap ldap://129.241.20.67/dc=venaas,dc=com,o=DNS,dc=venaas,dc=no
|
||||
|
||||
To use it with BIND, I've added the following to named.conf:
|
||||
zone "venaas.com" {
|
||||
type master;
|
||||
database "ldap ldap://129.241.20.67/dc=venaas,dc=com,o=DNS,dc=venaas,dc=no 172800";
|
||||
};
|
||||
|
||||
When doing lookups BIND will do a sub-tree search below the base in the
|
||||
URL. The number 172800 is the TTL which will be used for all entries that
|
||||
haven't got the dNSTTL attribute.
|
||||
|
||||
Stig Venaas <venaas@uninett.no> 2001-04-12
|
||||
@@ -1,18 +0,0 @@
|
||||
This is an attempt at an LDAP back-end for BIND 9 using the new simplified
|
||||
database interface "sdb". This is the fifth release (0.5) and is not ready
|
||||
for production use yet. Note that this version (and 0.4) uses a new schema
|
||||
and is not backwards compatible with versions before 0.4. The big changes in
|
||||
0.5 are thread support and improved connection handling. Multiple threads
|
||||
can now access the back-end simultaneously, and rather than having one
|
||||
connection per zone, there is now one connection per thread per LDAP server.
|
||||
This should help people with multiple CPUs and people with a huge number of
|
||||
zones. One final change is support for literal IPv6 addresses in LDAP URLs.
|
||||
At least OpenLDAP 2 has IPv6 support, so if you use OpenLDAP 2 libraries and
|
||||
server, you got all you need.
|
||||
|
||||
If you have bug reports, fixes, comments, questions or whatever, please
|
||||
contact me. See also http://www.venaas.no/ldap/bind-sdb/ for information.
|
||||
|
||||
See INSTALL for how to build, install and use.
|
||||
|
||||
Stig Venaas <venaas@uninett.no> 2001-05-06
|
||||
@@ -1,17 +0,0 @@
|
||||
INSTALLATION
|
||||
|
||||
To Compile zone2ldap from contrib/sdb directory:
|
||||
|
||||
gcc -g `../../isc-config.sh --cflags isc dns` -c zone2ldap.c
|
||||
gcc -g -o zone2ldap zone2ldap.o `isc-config.sh --libs isc dns` -lldap -llber -lresolv
|
||||
|
||||
USAGE:
|
||||
|
||||
See zone2ldap.1
|
||||
|
||||
BUGS:
|
||||
|
||||
Jeff McNeil <jeff@snapcase.g-rock.net>
|
||||
|
||||
|
||||
|
||||
@@ -1,466 +0,0 @@
|
||||
/*
|
||||
* Copyright (C) 2001 Stig Venaas
|
||||
*
|
||||
* Permission to use, copy, modify, and distribute this software for any
|
||||
* purpose with or without fee is hereby granted, provided that the above
|
||||
* copyright notice and this permission notice appear in all copies.
|
||||
*/
|
||||
|
||||
#include <config.h>
|
||||
|
||||
#include <string.h>
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <ctype.h>
|
||||
|
||||
#include <isc/mem.h>
|
||||
#include <isc/print.h>
|
||||
#include <isc/result.h>
|
||||
#include <isc/util.h>
|
||||
#include <isc/thread.h>
|
||||
|
||||
#include <dns/sdb.h>
|
||||
|
||||
#include <named/globals.h>
|
||||
|
||||
#include <ldap.h>
|
||||
#include "ldapdb.h"
|
||||
|
||||
/*
|
||||
* A simple database driver for LDAP. Not production quality yet
|
||||
*/
|
||||
|
||||
static dns_sdbimplementation_t *ldapdb = NULL;
|
||||
|
||||
struct ldapdb_data {
|
||||
char *hostport;
|
||||
char *hostname;
|
||||
int portno;
|
||||
char *base;
|
||||
int defaultttl;
|
||||
};
|
||||
|
||||
/* used by ldapdb_getconn */
|
||||
|
||||
struct ldapdb_entry {
|
||||
void *index;
|
||||
size_t size;
|
||||
void *data;
|
||||
struct ldapdb_entry *next;
|
||||
};
|
||||
|
||||
static struct ldapdb_entry *ldapdb_find(struct ldapdb_entry *stack,
|
||||
const void *index, size_t size) {
|
||||
while (stack != NULL) {
|
||||
if (stack->size == size && !memcmp(stack->index, index, size))
|
||||
return stack;
|
||||
stack = stack->next;
|
||||
}
|
||||
return NULL;
|
||||
}
|
||||
|
||||
static void ldapdb_insert(struct ldapdb_entry **stack,
|
||||
struct ldapdb_entry *item) {
|
||||
item->next = *stack;
|
||||
*stack = item;
|
||||
}
|
||||
|
||||
static void ldapdb_lock(int what) {
|
||||
static isc_mutex_t lock;
|
||||
|
||||
switch (what) {
|
||||
case 0:
|
||||
isc_mutex_init(&lock);
|
||||
break;
|
||||
case 1:
|
||||
LOCK(&lock);
|
||||
break;
|
||||
case -1:
|
||||
UNLOCK(&lock);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
/* data == NULL means cleanup */
|
||||
static LDAP **
|
||||
ldapdb_getconn(struct ldapdb_data *data)
|
||||
{
|
||||
static struct ldapdb_entry *allthreadsdata = NULL;
|
||||
struct ldapdb_entry *threaddata, *conndata;
|
||||
unsigned long threadid;
|
||||
|
||||
if (data == NULL) {
|
||||
/* cleanup */
|
||||
/* lock out other threads */
|
||||
ldapdb_lock(1);
|
||||
while (allthreadsdata != NULL) {
|
||||
threaddata = allthreadsdata;
|
||||
free(threaddata->index);
|
||||
while (threaddata->data != NULL) {
|
||||
conndata = threaddata->data;
|
||||
free(conndata->index);
|
||||
if (conndata->data != NULL)
|
||||
ldap_unbind((LDAP *)conndata->data);
|
||||
threaddata->data = conndata->next;
|
||||
free(conndata);
|
||||
}
|
||||
allthreadsdata = threaddata->next;
|
||||
free(threaddata);
|
||||
}
|
||||
ldapdb_lock(-1);
|
||||
return (NULL);
|
||||
}
|
||||
|
||||
/* look for connection data for current thread */
|
||||
threadid = isc_thread_self();
|
||||
threaddata = ldapdb_find(allthreadsdata, &threadid, sizeof(threadid));
|
||||
if (threaddata == NULL) {
|
||||
/* no data for this thread, create empty connection list */
|
||||
threaddata = malloc(sizeof(*threaddata));
|
||||
if (threaddata == NULL)
|
||||
return (NULL);
|
||||
threaddata->index = malloc(sizeof(threadid));
|
||||
if (threaddata->index == NULL) {
|
||||
free(threaddata);
|
||||
return (NULL);
|
||||
}
|
||||
*(unsigned long *)threaddata->index = threadid;
|
||||
threaddata->size = sizeof(threadid);
|
||||
threaddata->data = NULL;
|
||||
|
||||
/* need to lock out other threads here */
|
||||
ldapdb_lock(1);
|
||||
ldapdb_insert(&allthreadsdata, threaddata);
|
||||
ldapdb_lock(-1);
|
||||
}
|
||||
|
||||
/* threaddata points at the connection list for current thread */
|
||||
/* look for existing connection to our server */
|
||||
conndata = ldapdb_find((struct ldapdb_entry *)threaddata->data,
|
||||
data->hostport, strlen(data->hostport));
|
||||
if (conndata == NULL) {
|
||||
/* no connection data structure for this server, create one */
|
||||
conndata = malloc(sizeof(*conndata));
|
||||
if (conndata == NULL)
|
||||
return (NULL);
|
||||
(char *)conndata->index = data->hostport;
|
||||
conndata->size = strlen(data->hostport);
|
||||
conndata->data = NULL;
|
||||
ldapdb_insert((struct ldapdb_entry **)&threaddata->data,
|
||||
conndata);
|
||||
}
|
||||
|
||||
return (LDAP **)&conndata->data;
|
||||
}
|
||||
|
||||
/* callback routines */
|
||||
static isc_result_t
|
||||
ldapdb_create(const char *zone, int argc, char **argv,
|
||||
void *driverdata, void **dbdata)
|
||||
{
|
||||
struct ldapdb_data *data;
|
||||
char *s;
|
||||
int defaultttl;
|
||||
|
||||
UNUSED(zone);
|
||||
UNUSED(driverdata);
|
||||
|
||||
/* we assume that only one thread will call create at a time */
|
||||
/* want to do this only once for all instances */
|
||||
|
||||
if ((argc < 2)
|
||||
|| (argv[0] != strstr( argv[0], "ldap://"))
|
||||
|| ((defaultttl = atoi(argv[1])) < 1))
|
||||
return (ISC_R_FAILURE);
|
||||
data = isc_mem_get(ns_g_mctx, sizeof(struct ldapdb_data));
|
||||
if (data == NULL)
|
||||
return (ISC_R_NOMEMORY);
|
||||
data->hostport = isc_mem_strdup(ns_g_mctx, argv[0] + strlen("ldap://"));
|
||||
if (data->hostport == NULL) {
|
||||
isc_mem_put(ns_g_mctx, data, sizeof(struct ldapdb_data));
|
||||
return (ISC_R_NOMEMORY);
|
||||
}
|
||||
data->defaultttl = defaultttl;
|
||||
s = strchr(data->hostport, '/');
|
||||
if (s != NULL) {
|
||||
*s++ = '\0';
|
||||
data->base = *s != '\0' ? s : NULL;
|
||||
}
|
||||
|
||||
/* support URLs with literal IPv6 addresses */
|
||||
data->hostname = isc_mem_strdup(ns_g_mctx, data->hostport +
|
||||
(*data->hostport == '[' ? 1 : 0));
|
||||
if (data->hostname == NULL) {
|
||||
isc_mem_free(ns_g_mctx, data->hostport);
|
||||
isc_mem_put(ns_g_mctx, data, sizeof(struct ldapdb_data));
|
||||
return (ISC_R_NOMEMORY);
|
||||
}
|
||||
|
||||
if (*data->hostport == '[' &&
|
||||
(s = strchr(data->hostname, ']')) != NULL )
|
||||
*s++ = '\0';
|
||||
else
|
||||
s = data->hostname;
|
||||
s = strchr(s, ':');
|
||||
if (s != NULL) {
|
||||
*s++ = '\0';
|
||||
data->portno = atoi(s);
|
||||
} else
|
||||
data->portno = LDAP_PORT;
|
||||
|
||||
*dbdata = data;
|
||||
return (ISC_R_SUCCESS);
|
||||
}
|
||||
|
||||
static void
|
||||
ldapdb_destroy(const char *zone, void *driverdata, void **dbdata) {
|
||||
struct ldapdb_data *data = *dbdata;
|
||||
|
||||
UNUSED(zone);
|
||||
UNUSED(driverdata);
|
||||
|
||||
if (data->hostport != NULL)
|
||||
isc_mem_free(ns_g_mctx, data->hostport);
|
||||
if (data->hostname != NULL)
|
||||
isc_mem_free(ns_g_mctx, data->hostname);
|
||||
isc_mem_put(ns_g_mctx, data, sizeof(struct ldapdb_data));
|
||||
}
|
||||
|
||||
static void
|
||||
ldapdb_bind(struct ldapdb_data *data, LDAP **ldp)
|
||||
{
|
||||
if (*ldp != NULL)
|
||||
ldap_unbind(*ldp);
|
||||
*ldp = ldap_open(data->hostname, data->portno);
|
||||
if (*ldp == NULL)
|
||||
return;
|
||||
if (ldap_simple_bind_s(*ldp, NULL, NULL) != LDAP_SUCCESS) {
|
||||
ldap_unbind(*ldp);
|
||||
*ldp = NULL;
|
||||
}
|
||||
}
|
||||
|
||||
static isc_result_t
|
||||
ldapdb_lookup(const char *zone, const char *name, void *dbdata,
|
||||
dns_sdblookup_t *lookup)
|
||||
{
|
||||
isc_result_t result = ISC_R_NOTFOUND;
|
||||
struct ldapdb_data *data = dbdata;
|
||||
LDAP **ldp;
|
||||
LDAPMessage *res, *e;
|
||||
char *fltr, *a, **vals;
|
||||
char type[64];
|
||||
BerElement *ptr;
|
||||
int i;
|
||||
|
||||
ldp = ldapdb_getconn(data);
|
||||
if (ldp == NULL)
|
||||
return (ISC_R_FAILURE);
|
||||
if (*ldp == NULL) {
|
||||
ldapdb_bind(data, ldp);
|
||||
if (*ldp == NULL)
|
||||
return (ISC_R_FAILURE);
|
||||
}
|
||||
fltr = isc_mem_get(ns_g_mctx, strlen(zone) + strlen(name) +
|
||||
strlen("(&(zoneName=)(relativeDomainName=))") + 1);
|
||||
if (fltr == NULL)
|
||||
return (ISC_R_NOMEMORY);
|
||||
|
||||
strcpy(fltr, "(&(zoneName=");
|
||||
strcat(fltr, zone);
|
||||
strcat(fltr, ")(relativeDomainName=");
|
||||
strcat(fltr, name);
|
||||
strcat(fltr, "))");
|
||||
|
||||
if (ldap_search_s(*ldp, data->base, LDAP_SCOPE_SUBTREE, fltr, NULL, 0,
|
||||
&res) != LDAP_SUCCESS) {
|
||||
ldapdb_bind(data, ldp);
|
||||
if (*ldp != NULL)
|
||||
ldap_search_s(*ldp, data->base, LDAP_SCOPE_SUBTREE,
|
||||
fltr, NULL, 0, &res);
|
||||
}
|
||||
|
||||
isc_mem_put(ns_g_mctx, fltr, strlen(fltr) + 1);
|
||||
|
||||
if (*ldp == NULL)
|
||||
goto exit;
|
||||
|
||||
for (e = ldap_first_entry(*ldp, res); e != NULL;
|
||||
e = ldap_next_entry(*ldp, e)) {
|
||||
LDAP *ld = *ldp;
|
||||
int ttl = data->defaultttl;
|
||||
|
||||
for (a = ldap_first_attribute(ld, e, &ptr); a != NULL;
|
||||
a = ldap_next_attribute(ld, e, ptr)) {
|
||||
if (!strcmp(a, "dNSTTL")) {
|
||||
vals = ldap_get_values(ld, e, a);
|
||||
ttl = atoi(vals[0]);
|
||||
ldap_value_free(vals);
|
||||
ldap_memfree(a);
|
||||
break;
|
||||
}
|
||||
ldap_memfree(a);
|
||||
}
|
||||
for (a = ldap_first_attribute(ld, e, &ptr); a != NULL;
|
||||
a = ldap_next_attribute(ld, e, ptr)) {
|
||||
char *s;
|
||||
|
||||
for (s = a; *s; s++)
|
||||
*s = toupper(*s);
|
||||
s = strstr(a, "RECORD");
|
||||
if ((s == NULL) || (s == a)
|
||||
|| (s - a >= (signed int)sizeof(type))) {
|
||||
ldap_memfree(a);
|
||||
continue;
|
||||
}
|
||||
strncpy(type, a, s - a);
|
||||
type[s - a] = '\0';
|
||||
vals = ldap_get_values(ld, e, a);
|
||||
for (i=0; vals[i] != NULL; i++) {
|
||||
result = dns_sdb_putrr(lookup, type, ttl,
|
||||
vals[i]);
|
||||
if (result != ISC_R_SUCCESS) {
|
||||
ldap_value_free(vals);
|
||||
ldap_memfree(a);
|
||||
result = ISC_R_FAILURE;
|
||||
goto exit;
|
||||
}
|
||||
}
|
||||
ldap_value_free(vals);
|
||||
ldap_memfree(a);
|
||||
}
|
||||
}
|
||||
exit:
|
||||
ldap_msgfree(res);
|
||||
return (result);
|
||||
}
|
||||
|
||||
static isc_result_t
|
||||
ldapdb_allnodes(const char *zone, void *dbdata,
|
||||
dns_sdballnodes_t *allnodes) {
|
||||
isc_result_t result = ISC_R_NOTFOUND;
|
||||
struct ldapdb_data *data = dbdata;
|
||||
LDAP **ldp;
|
||||
LDAPMessage *res, *e;
|
||||
char type[64];
|
||||
char *fltr, *a, **vals;
|
||||
BerElement *ptr;
|
||||
int i;
|
||||
|
||||
ldp = ldapdb_getconn(data);
|
||||
if (ldp == NULL)
|
||||
return (ISC_R_FAILURE);
|
||||
if (*ldp == NULL) {
|
||||
ldapdb_bind(data, ldp);
|
||||
if (*ldp == NULL)
|
||||
return (ISC_R_FAILURE);
|
||||
}
|
||||
|
||||
fltr = isc_mem_get(ns_g_mctx, strlen(zone) + strlen("(zoneName=)") + 1);
|
||||
if (fltr == NULL)
|
||||
return (ISC_R_NOMEMORY);
|
||||
|
||||
strcpy(fltr, "(zoneName=");
|
||||
strcat(fltr, zone);
|
||||
strcat(fltr, ")");
|
||||
|
||||
if (ldap_search_s(*ldp, data->base, LDAP_SCOPE_SUBTREE, fltr, NULL, 0,
|
||||
&res) != LDAP_SUCCESS) {
|
||||
ldapdb_bind(data, ldp);
|
||||
if (*ldp != NULL)
|
||||
ldap_search_s(*ldp, data->base, LDAP_SCOPE_SUBTREE,
|
||||
fltr, NULL, 0, &res);
|
||||
}
|
||||
|
||||
isc_mem_put(ns_g_mctx, fltr, strlen(fltr) + 1);
|
||||
|
||||
for (e = ldap_first_entry(*ldp, res); e != NULL;
|
||||
e = ldap_next_entry(*ldp, e)) {
|
||||
LDAP *ld = *ldp;
|
||||
char *name = NULL;
|
||||
int ttl = data->defaultttl;
|
||||
|
||||
for (a = ldap_first_attribute(ld, e, &ptr); a != NULL;
|
||||
a = ldap_next_attribute(ld, e, ptr)) {
|
||||
if (!strcmp(a, "dNSTTL")) {
|
||||
vals = ldap_get_values(ld, e, a);
|
||||
ttl = atoi(vals[0]);
|
||||
ldap_value_free(vals);
|
||||
} else if (!strcmp(a, "relativeDomainName")) {
|
||||
vals = ldap_get_values(ld, e, a);
|
||||
name = isc_mem_strdup(ns_g_mctx, vals[0]);
|
||||
ldap_value_free(vals);
|
||||
}
|
||||
ldap_memfree(a);
|
||||
}
|
||||
|
||||
if (name == NULL)
|
||||
continue;
|
||||
|
||||
for (a = ldap_first_attribute(ld, e, &ptr); a != NULL;
|
||||
a = ldap_next_attribute(ld, e, ptr)) {
|
||||
char *s;
|
||||
|
||||
for (s = a; *s; s++)
|
||||
*s = toupper(*s);
|
||||
s = strstr(a, "RECORD");
|
||||
if ((s == NULL) || (s == a)
|
||||
|| (s - a >= (signed int)sizeof(type))) {
|
||||
ldap_memfree(a);
|
||||
continue;
|
||||
}
|
||||
strncpy(type, a, s - a);
|
||||
type[s - a] = '\0';
|
||||
vals = ldap_get_values(ld, e, a);
|
||||
for (i=0; vals[i] != NULL; i++) {
|
||||
result = dns_sdb_putnamedrr(allnodes, name,
|
||||
type, ttl, vals[i]);
|
||||
if (result != ISC_R_SUCCESS) {
|
||||
ldap_value_free(vals);
|
||||
ldap_memfree(a);
|
||||
isc_mem_free(ns_g_mctx, name);
|
||||
result = ISC_R_FAILURE;
|
||||
goto exit;
|
||||
}
|
||||
}
|
||||
ldap_value_free(vals);
|
||||
ldap_memfree(a);
|
||||
}
|
||||
isc_mem_free(ns_g_mctx, name);
|
||||
}
|
||||
|
||||
exit:
|
||||
ldap_msgfree(res);
|
||||
return (result);
|
||||
}
|
||||
|
||||
static dns_sdbmethods_t ldapdb_methods = {
|
||||
ldapdb_lookup,
|
||||
NULL, /* authority */
|
||||
ldapdb_allnodes,
|
||||
ldapdb_create,
|
||||
ldapdb_destroy
|
||||
};
|
||||
|
||||
/* Wrapper around dns_sdb_register() */
|
||||
isc_result_t
|
||||
ldapdb_init(void) {
|
||||
unsigned int flags =
|
||||
DNS_SDBFLAG_RELATIVEOWNER |
|
||||
DNS_SDBFLAG_RELATIVERDATA |
|
||||
DNS_SDBFLAG_THREADSAFE;
|
||||
|
||||
ldapdb_lock(0);
|
||||
return (dns_sdb_register("ldap", &ldapdb_methods, NULL, flags,
|
||||
ns_g_mctx, &ldapdb));
|
||||
}
|
||||
|
||||
/* Wrapper around dns_sdb_unregister() */
|
||||
void
|
||||
ldapdb_clear(void) {
|
||||
if (ldapdb != NULL) {
|
||||
/* clean up thread data */
|
||||
ldapdb_getconn(NULL);
|
||||
dns_sdb_unregister(&ldapdb);
|
||||
}
|
||||
}
|
||||
@@ -1,6 +0,0 @@
|
||||
#include <isc/types.h>
|
||||
|
||||
isc_result_t ldapdb_init(void);
|
||||
|
||||
void ldapdb_clear(void);
|
||||
|
||||
@@ -1,64 +0,0 @@
|
||||
.TH zone2ldap 1 "8 March 2001"
|
||||
.SH NAME
|
||||
zone2ldap /- Load BIND 9 Zone files into LDAP Directory
|
||||
.SH SYNOPSIS
|
||||
zone2ldap [-D Bind DN] [-w Bind Password] [-b Base DN] [-z Zone] [-f Zone File ] [-h Ldap Host] [-cd] [-v]
|
||||
.SH DESCRIPTION
|
||||
zone2ldap will parse a complete BIND 9 format DNS zone file, and load
|
||||
the contents into an LDAP directory, for use with the LDAP sdb back-end.
|
||||
|
||||
If the zone already exists, zone2ldap will exit succesfully. If the zone does not exists, or
|
||||
partially exists, zone2ldap will attempt to add all/missing zone data.
|
||||
|
||||
.SS Options
|
||||
.TP
|
||||
-b
|
||||
LDAP Base DN. LDAP systems require a "base dn", which is generally considered the LDAP Directory root.
|
||||
If the zone you are loading is different from the base, then you will need to tell zone2ldap what your LDAP
|
||||
base is.
|
||||
.TP
|
||||
-v
|
||||
Print version information, and immediatly exit.
|
||||
.TP
|
||||
-f
|
||||
Zone file. Bind 9.1 compatible zone file, from which zone information will be read.
|
||||
.TP
|
||||
-d
|
||||
Dump debug information to standard out.
|
||||
.TP
|
||||
-w
|
||||
LDAP Bind password, corresponding the the value of "-b".
|
||||
.TP
|
||||
-h
|
||||
LDAP Directory host. This is the hostname of the LDAP system you wish to store zone information on.
|
||||
An LDAP server should be listening on port 389 of the target system. This may be ommited, and will default
|
||||
to "localhost".
|
||||
.TP
|
||||
-c
|
||||
This will create the zone portion of the DN you are importing. For instance, if you are creating a domain.com zone,
|
||||
zone2ldap should first create "dc=domain,dc=com". This is useful if you are creating multiple domains.
|
||||
.TP
|
||||
-z
|
||||
This is the name of the zone specified in the SOA record.
|
||||
.SH EXAMPLES
|
||||
Following are brief examples of how to import a zone file into your LDAP DIT.
|
||||
.SS Loading zone domain.com, with an LDAP Base DN of dc=domain,dc=com
|
||||
zone2ldap -D dc=root -w secret -h localhost -z domain.com -f domain.com.zone
|
||||
|
||||
This will add Resource Records into an ALREADY EXISTING dc=domain,dc=com. The final SOA DN in this case, will be
|
||||
dc=@,dc=domain,dc=com
|
||||
|
||||
.SS Loading customer.com, if your LDAP Base DN is dc=provider,dc=net.
|
||||
zone2ldap -D dc=root -w secret -h localhost -z customer.com -b dc=provider,dc=net -f customer.com.zone -c
|
||||
|
||||
This will create dc=customer,dc=com under dc=provider,dc=net, and add all necessary Resource Records. The final
|
||||
root DN to the SOA will be dc=@,dc=customer,dc=com,dc=provider,dc=net.
|
||||
|
||||
.SH "SEE ALSO"
|
||||
named(8) ldap(3)
|
||||
http://www.venaas.no/ldap/bind-sdb/
|
||||
.SH "BUGS"
|
||||
Send all bug reports to Jeff McNeil <jeff@snapcase.g-rock.net>
|
||||
.SH AUTHOR
|
||||
Jeff McNeil <jeff@snapcase.g-rock.net>
|
||||
|
||||
@@ -1,721 +0,0 @@
|
||||
/*
|
||||
* Copyright (C) 2001 Jeff McNeil <jeff@snapcase.g-rock.net>
|
||||
*
|
||||
* Permission to use, copy, modify, and distribute this software for any
|
||||
* purpose with or without fee is hereby granted, provided that the above
|
||||
* copyright notice and this permission notice appear in all copies.
|
||||
*
|
||||
* Change Log
|
||||
*
|
||||
* Tue May 1 19:19:54 EDT 2001 - Jeff McNeil
|
||||
* Update to objectClass code, and add_to_rr_list function
|
||||
* (I need to rename that) to support the dNSZone schema,
|
||||
* ditched dNSDomain2 schema support. Version 0.3-ALPHA
|
||||
*/
|
||||
|
||||
#include <errno.h>
|
||||
#include <string.h>
|
||||
#include <stdlib.h>
|
||||
#include <unistd.h>
|
||||
#include <getopt.h>
|
||||
|
||||
#include <isc/buffer.h>
|
||||
#include <isc/mem.h>
|
||||
#include <isc/print.h>
|
||||
#include <isc/result.h>
|
||||
|
||||
#include <dns/db.h>
|
||||
#include <dns/dbiterator.h>
|
||||
#include <dns/fixedname.h>
|
||||
#include <dns/name.h>
|
||||
#include <dns/rdata.h>
|
||||
#include <dns/rdataset.h>
|
||||
#include <dns/rdatasetiter.h>
|
||||
#include <dns/result.h>
|
||||
#include <dns/rdatatype.h>
|
||||
|
||||
#include <ldap.h>
|
||||
|
||||
#define DNS_OBJECT 6
|
||||
#define DNS_TOP 2
|
||||
|
||||
#define VERSION "0.4-ALPHA"
|
||||
|
||||
#define NO_SPEC 0
|
||||
#define WI_SPEC 1
|
||||
|
||||
/* Global Zone Pointer */
|
||||
char *gbl_zone = NULL;
|
||||
|
||||
typedef struct LDAP_INFO
|
||||
{
|
||||
char *dn;
|
||||
LDAPMod **attrs;
|
||||
struct LDAP_INFO *next;
|
||||
int attrcnt;
|
||||
}
|
||||
ldap_info;
|
||||
|
||||
/* usage Info */
|
||||
void usage ();
|
||||
|
||||
/* Add to the ldap dit */
|
||||
void add_ldap_values (ldap_info * ldinfo);
|
||||
|
||||
/* Init an ldap connection */
|
||||
void init_ldap_conn ();
|
||||
|
||||
/* Ldap error checking */
|
||||
void ldap_result_check (char *msg, char *dn, int err);
|
||||
|
||||
/* Put a hostname into a char ** array */
|
||||
char **hostname_to_dn_list (char *hostname, char *zone, unsigned int flags);
|
||||
|
||||
/* Find out how many items are in a char ** array */
|
||||
int get_attr_list_size (char **tmp);
|
||||
|
||||
/* Get a DN */
|
||||
char *build_dn_from_dc_list (char **dc_list, unsigned int ttl, int flag);
|
||||
|
||||
/* Add to RR list */
|
||||
void add_to_rr_list (char *dn, char *name, char *type, char *data,
|
||||
unsigned int ttl, unsigned int flags);
|
||||
|
||||
/* Error checking */
|
||||
void isc_result_check (isc_result_t res, char *errorstr);
|
||||
|
||||
/* Generate LDIF Format files */
|
||||
void generate_ldap (dns_name_t * dnsname, dns_rdata_t * rdata,
|
||||
unsigned int ttl);
|
||||
|
||||
/* head pointer to the list */
|
||||
ldap_info *ldap_info_base = NULL;
|
||||
|
||||
char *argzone, *ldapbase, *binddn, *bindpw = NULL;
|
||||
char *ldapsystem = "localhost";
|
||||
static char *objectClasses[] =
|
||||
{ "top", "dNSZone", NULL };
|
||||
static char *topObjectClasses[] = { "top", NULL };
|
||||
LDAP *conn;
|
||||
unsigned int debug = 0;
|
||||
|
||||
#ifdef DEBUG
|
||||
debug = 1;
|
||||
#endif
|
||||
|
||||
int
|
||||
main (int *argc, char **argv)
|
||||
{
|
||||
isc_mem_t *isc_ctx = NULL;
|
||||
isc_result_t result;
|
||||
char *basedn;
|
||||
ldap_info *tmp;
|
||||
LDAPMod *base_attrs[2];
|
||||
LDAPMod base;
|
||||
isc_buffer_t buff;
|
||||
char *zonefile;
|
||||
char fullbasedn[1024];
|
||||
char *ctmp;
|
||||
dns_fixedname_t fixedzone, fixedname;
|
||||
dns_rdataset_t rdataset;
|
||||
char **dc_list;
|
||||
dns_rdata_t rdata = DNS_RDATA_INIT;
|
||||
dns_rdatasetiter_t *riter;
|
||||
dns_name_t *zone, *name;
|
||||
dns_db_t *db = NULL;
|
||||
dns_dbiterator_t *dbit = NULL;
|
||||
dns_dbnode_t *node;
|
||||
extern char *optarg;
|
||||
extern int optind, opterr, optopt;
|
||||
int create_base = 0;
|
||||
int topt;
|
||||
|
||||
if ((int) argc < 2)
|
||||
{
|
||||
usage ();
|
||||
exit (-1);
|
||||
}
|
||||
|
||||
while ((topt = getopt ((int) argc, argv, "D:w:b:z:f:h:?dcv")) != -1)
|
||||
{
|
||||
switch (topt)
|
||||
{
|
||||
case 'v':
|
||||
printf("%s\n", VERSION);
|
||||
exit(0);
|
||||
case 'c':
|
||||
create_base++;
|
||||
break;
|
||||
case 'd':
|
||||
debug++;
|
||||
break;
|
||||
case 'D':
|
||||
binddn = strdup (optarg);
|
||||
break;
|
||||
case 'w':
|
||||
bindpw = strdup (optarg);
|
||||
break;
|
||||
case 'b':
|
||||
ldapbase = strdup (optarg);
|
||||
break;
|
||||
case 'z':
|
||||
argzone = strdup (optarg);
|
||||
// We wipe argzone all to hell when we parse it for the DN */
|
||||
gbl_zone = strdup(argzone);
|
||||
break;
|
||||
case 'f':
|
||||
zonefile = strdup (optarg);
|
||||
break;
|
||||
case 'h':
|
||||
ldapsystem = strdup (optarg);
|
||||
break;
|
||||
case '?':
|
||||
default:
|
||||
usage ();
|
||||
exit (0);
|
||||
}
|
||||
}
|
||||
|
||||
if ((argzone == NULL) || (zonefile == NULL))
|
||||
{
|
||||
usage ();
|
||||
exit (-1);
|
||||
}
|
||||
|
||||
if (debug)
|
||||
printf ("Initializing ISC Routines, parsing zone file\n");
|
||||
|
||||
result = isc_mem_create (0, 0, &isc_ctx);
|
||||
isc_result_check (result, "isc_mem_create");
|
||||
|
||||
isc_buffer_init (&buff, argzone, strlen (argzone));
|
||||
isc_buffer_add (&buff, strlen (argzone));
|
||||
dns_fixedname_init (&fixedzone);
|
||||
zone = dns_fixedname_name (&fixedzone);
|
||||
result = dns_name_fromtext (zone, &buff, dns_rootname, ISC_FALSE, NULL);
|
||||
isc_result_check (result, "dns_name_fromtext");
|
||||
|
||||
result =
|
||||
dns_db_create (isc_ctx, "rbt", zone, dns_dbtype_zone, dns_rdataclass_in,
|
||||
0, NULL, &db);
|
||||
isc_result_check (result, "dns_db_create");
|
||||
|
||||
result = dns_db_load (db, zonefile);
|
||||
isc_result_check (result, "Check Zone Syntax: dns_db_load");
|
||||
|
||||
result = dns_db_createiterator (db, ISC_FALSE, &dbit);
|
||||
isc_result_check (result, "dns_db_createiterator");
|
||||
|
||||
result = dns_dbiterator_first (dbit);
|
||||
isc_result_check (result, "dns_dbiterator_first");
|
||||
|
||||
dns_fixedname_init (&fixedname);
|
||||
name = dns_fixedname_name (&fixedname);
|
||||
dns_rdataset_init (&rdataset);
|
||||
dns_rdata_init (&rdata);
|
||||
|
||||
while (result == ISC_R_SUCCESS)
|
||||
{
|
||||
node = NULL;
|
||||
result = dns_dbiterator_current (dbit, &node, name);
|
||||
|
||||
if (result == ISC_R_NOMORE)
|
||||
break;
|
||||
|
||||
isc_result_check (result, "dns_dbiterator_current");
|
||||
|
||||
riter = NULL;
|
||||
result = dns_db_allrdatasets (db, node, NULL, 0, &riter);
|
||||
isc_result_check (result, "dns_db_allrdatasets");
|
||||
|
||||
result = dns_rdatasetiter_first (riter);
|
||||
//isc_result_check(result, "dns_rdatasetiter_first");
|
||||
|
||||
while (result == ISC_R_SUCCESS)
|
||||
{
|
||||
dns_rdatasetiter_current (riter, &rdataset);
|
||||
result = dns_rdataset_first (&rdataset);
|
||||
isc_result_check (result, "dns_rdatasetiter_current");
|
||||
|
||||
while (result == ISC_R_SUCCESS)
|
||||
{
|
||||
dns_rdataset_current (&rdataset, &rdata);
|
||||
generate_ldap (name, &rdata, rdataset.ttl);
|
||||
dns_rdata_reset (&rdata);
|
||||
result = dns_rdataset_next (&rdataset);
|
||||
}
|
||||
dns_rdataset_disassociate (&rdataset);
|
||||
result = dns_rdatasetiter_next (riter);
|
||||
|
||||
}
|
||||
dns_rdatasetiter_destroy (&riter);
|
||||
result = dns_dbiterator_next (dbit);
|
||||
|
||||
}
|
||||
|
||||
/* Initialize the LDAP Connection */
|
||||
if (debug)
|
||||
printf ("Initializing LDAP Connection to %s as %s\n", ldapsystem, binddn);
|
||||
|
||||
init_ldap_conn ();
|
||||
|
||||
if (create_base)
|
||||
{
|
||||
if (debug)
|
||||
printf ("Creating base zone DN %s\n", argzone);
|
||||
|
||||
dc_list = hostname_to_dn_list (argzone, argzone, DNS_TOP);
|
||||
basedn = build_dn_from_dc_list (dc_list, 0, NO_SPEC);
|
||||
|
||||
for (ctmp = &basedn[strlen (basedn)]; ctmp >= &basedn[0]; ctmp--)
|
||||
{
|
||||
if ((*ctmp == ',') || (ctmp == &basedn[0]))
|
||||
{
|
||||
base.mod_op = LDAP_MOD_ADD;
|
||||
base.mod_type = "objectClass";
|
||||
base.mod_values = topObjectClasses;
|
||||
base_attrs[0] = &base;
|
||||
base_attrs[1] = NULL;
|
||||
|
||||
if (ldapbase)
|
||||
{
|
||||
if (ctmp != &basedn[0])
|
||||
sprintf (fullbasedn, "%s,%s", ctmp + 1, ldapbase);
|
||||
else
|
||||
sprintf (fullbasedn, "%s,%s", ctmp, ldapbase);
|
||||
|
||||
}
|
||||
else
|
||||
{
|
||||
if (ctmp != &basedn[0])
|
||||
sprintf (fullbasedn, "%s", ctmp + 1);
|
||||
else
|
||||
sprintf (fullbasedn, "%s", ctmp);
|
||||
}
|
||||
result = ldap_add_s (conn, fullbasedn, base_attrs);
|
||||
ldap_result_check ("intial ldap_add_s", fullbasedn, result);
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
if (debug)
|
||||
printf ("Skipping zone base dn creation for %s\n", argzone);
|
||||
}
|
||||
|
||||
for (tmp = ldap_info_base; tmp != NULL; tmp = tmp->next)
|
||||
{
|
||||
|
||||
if (debug)
|
||||
printf ("Adding DN: %s\n", tmp->dn);
|
||||
|
||||
add_ldap_values (tmp);
|
||||
}
|
||||
|
||||
if (debug)
|
||||
printf("Operation Complete.\n");
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
/* Check the status of an isc_result_t after any isc routines.
|
||||
* I should probably rename this function, as not to cause any
|
||||
* confusion with the isc* routines. Will exit on error. */
|
||||
void
|
||||
isc_result_check (isc_result_t res, char *errorstr)
|
||||
{
|
||||
if (res != ISC_R_SUCCESS)
|
||||
{
|
||||
fprintf (stderr, " %s: %s\n", errorstr, isc_result_totext (res));
|
||||
exit (-1);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/* Takes DNS information, in bind data structure format, and adds textual
|
||||
* zone information to the LDAP run queue. */
|
||||
void
|
||||
generate_ldap (dns_name_t * dnsname, dns_rdata_t * rdata, unsigned int ttl)
|
||||
{
|
||||
unsigned char name[DNS_NAME_MAXTEXT + 1];
|
||||
unsigned int len;
|
||||
unsigned char type[20];
|
||||
unsigned char data[2048];
|
||||
char **dc_list;
|
||||
char *dn;
|
||||
|
||||
isc_buffer_t buff;
|
||||
isc_result_t result;
|
||||
|
||||
isc_buffer_init (&buff, name, sizeof (name));
|
||||
result = dns_name_totext (dnsname, ISC_TRUE, &buff);
|
||||
isc_result_check (result, "dns_name_totext");
|
||||
name[isc_buffer_usedlength (&buff)] = 0;
|
||||
|
||||
isc_buffer_init (&buff, type, sizeof (type));
|
||||
result = dns_rdatatype_totext (rdata->type, &buff);
|
||||
isc_result_check (result, "dns_rdatatype_totext");
|
||||
type[isc_buffer_usedlength (&buff)] = 0;
|
||||
|
||||
isc_buffer_init (&buff, data, sizeof (data));
|
||||
result = dns_rdata_totext (rdata, NULL, &buff);
|
||||
isc_result_check (result, "dns_rdata_totext");
|
||||
data[isc_buffer_usedlength (&buff)] = 0;
|
||||
|
||||
dc_list = hostname_to_dn_list (name, argzone, DNS_OBJECT);
|
||||
len = (get_attr_list_size (dc_list) - 2);
|
||||
dn = build_dn_from_dc_list (dc_list, ttl, WI_SPEC);
|
||||
|
||||
if (debug)
|
||||
printf ("Adding %s (%s %s) to run queue list.\n", dn, type, data);
|
||||
|
||||
add_to_rr_list (dn, dc_list[len], type, data, ttl, DNS_OBJECT);
|
||||
}
|
||||
|
||||
|
||||
/* Locate an item in the Run queue linked list, by DN. Used by functions
|
||||
* which add items to the run queue.
|
||||
*/
|
||||
ldap_info *
|
||||
locate_by_dn (char *dn)
|
||||
{
|
||||
ldap_info *tmp;
|
||||
for (tmp = ldap_info_base; tmp != (ldap_info *) NULL; tmp = tmp->next)
|
||||
{
|
||||
if (!strncmp (tmp->dn, dn, strlen (dn)))
|
||||
return tmp;
|
||||
}
|
||||
return (ldap_info *) NULL;
|
||||
}
|
||||
|
||||
|
||||
|
||||
/* Take textual zone data, and add to the LDAP Run queue. This works like so:
|
||||
* If locate_by_dn does not return, alloc a new ldap_info structure, and then
|
||||
* calloc a LDAPMod array, fill in the default "everyone needs this" information,
|
||||
* including object classes and dc's. If it locate_by_dn does return, then we'll
|
||||
* realloc for more LDAPMod structs, and appened the new data. If an LDAPMod exists
|
||||
* for the parameter we're adding, then we'll realloc the mod_values array, and
|
||||
* add the new value to the existing LDAPMod. Finnaly, it assures linkage exists
|
||||
* within the Run queue linked ilst*/
|
||||
|
||||
void
|
||||
add_to_rr_list (char *dn, char *name, char *type,
|
||||
char *data, unsigned int ttl, unsigned int flags)
|
||||
{
|
||||
int i;
|
||||
int x;
|
||||
ldap_info *tmp;
|
||||
int attrlist;
|
||||
char ldap_type_buffer[128];
|
||||
char charttl[64];
|
||||
|
||||
|
||||
if ((tmp = locate_by_dn (dn)) == NULL)
|
||||
{
|
||||
|
||||
/* There wasn't one already there, so we need to allocate a new one,
|
||||
* and stick it on the list */
|
||||
|
||||
tmp = (ldap_info *) malloc (sizeof (ldap_info));
|
||||
if (tmp == (ldap_info *) NULL)
|
||||
{
|
||||
fprintf (stderr, "malloc: %s\n", strerror (errno));
|
||||
ldap_unbind_s (conn);
|
||||
exit (-1);
|
||||
}
|
||||
|
||||
tmp->dn = strdup (dn);
|
||||
tmp->attrs = (LDAPMod **) calloc (sizeof (LDAPMod *), flags);
|
||||
if (tmp->attrs == (LDAPMod **) NULL)
|
||||
{
|
||||
fprintf (stderr, "calloc: %s\n", strerror (errno));
|
||||
ldap_unbind_s (conn);
|
||||
exit (-1);
|
||||
}
|
||||
|
||||
for (i = 0; i < flags; i++)
|
||||
{
|
||||
tmp->attrs[i] = (LDAPMod *) malloc (sizeof (LDAPMod));
|
||||
if (tmp->attrs[i] == (LDAPMod *) NULL)
|
||||
{
|
||||
fprintf (stderr, "malloc: %s\n", strerror (errno));
|
||||
exit (-1);
|
||||
}
|
||||
}
|
||||
tmp->attrs[0]->mod_op = LDAP_MOD_ADD;
|
||||
tmp->attrs[0]->mod_type = "objectClass";
|
||||
|
||||
if (flags == DNS_OBJECT)
|
||||
tmp->attrs[0]->mod_values = objectClasses;
|
||||
else
|
||||
{
|
||||
tmp->attrs[0]->mod_values = topObjectClasses;
|
||||
tmp->attrs[1] = NULL;
|
||||
tmp->attrcnt = 2;
|
||||
tmp->next = ldap_info_base;
|
||||
ldap_info_base = tmp;
|
||||
return;
|
||||
}
|
||||
|
||||
tmp->attrs[1]->mod_op = LDAP_MOD_ADD;
|
||||
tmp->attrs[1]->mod_type = "relativeDomainName";
|
||||
tmp->attrs[1]->mod_values = (char **) calloc (sizeof (char *), 2);
|
||||
|
||||
if (tmp->attrs[1]->mod_values == (char **)NULL)
|
||||
exit(-1);
|
||||
|
||||
tmp->attrs[1]->mod_values[0] = strdup (name);
|
||||
tmp->attrs[1]->mod_values[2] = NULL;
|
||||
|
||||
sprintf (ldap_type_buffer, "%sRecord", type);
|
||||
|
||||
tmp->attrs[2]->mod_op = LDAP_MOD_ADD;
|
||||
tmp->attrs[2]->mod_type = strdup (ldap_type_buffer);
|
||||
tmp->attrs[2]->mod_values = (char **) calloc (sizeof (char *), 2);
|
||||
|
||||
if (tmp->attrs[2]->mod_values == (char **)NULL)
|
||||
exit(-1);
|
||||
|
||||
tmp->attrs[2]->mod_values[0] = strdup (data);
|
||||
tmp->attrs[2]->mod_values[1] = NULL;
|
||||
|
||||
tmp->attrs[3]->mod_op = LDAP_MOD_ADD;
|
||||
tmp->attrs[3]->mod_type = "dNSTTL";
|
||||
tmp->attrs[3]->mod_values = (char **) calloc (sizeof (char *), 2);
|
||||
|
||||
if (tmp->attrs[3]->mod_values == (char **)NULL)
|
||||
exit(-1);
|
||||
|
||||
sprintf (charttl, "%d", ttl);
|
||||
tmp->attrs[3]->mod_values[0] = strdup (charttl);
|
||||
tmp->attrs[3]->mod_values[1] = NULL;
|
||||
|
||||
tmp->attrs[4]->mod_op = LDAP_MOD_ADD;
|
||||
tmp->attrs[4]->mod_type = "zoneName";
|
||||
tmp->attrs[4]->mod_values = (char **)calloc(sizeof(char *), 2);
|
||||
tmp->attrs[4]->mod_values[0] = gbl_zone;
|
||||
tmp->attrs[4]->mod_values[1] = NULL;
|
||||
|
||||
tmp->attrs[5] = NULL;
|
||||
tmp->attrcnt = flags;
|
||||
tmp->next = ldap_info_base;
|
||||
ldap_info_base = tmp;
|
||||
}
|
||||
else
|
||||
{
|
||||
|
||||
for (i = 0; tmp->attrs[i] != NULL; i++)
|
||||
{
|
||||
sprintf (ldap_type_buffer, "%sRecord", type);
|
||||
if (!strncmp
|
||||
(ldap_type_buffer, tmp->attrs[i]->mod_type,
|
||||
strlen (tmp->attrs[i]->mod_type)))
|
||||
{
|
||||
attrlist = get_attr_list_size (tmp->attrs[i]->mod_values);
|
||||
tmp->attrs[i]->mod_values =
|
||||
(char **) realloc (tmp->attrs[i]->mod_values,
|
||||
sizeof (char *) * (attrlist + 1));
|
||||
|
||||
if (tmp->attrs[i]->mod_values == (char **) NULL)
|
||||
{
|
||||
fprintf (stderr, "realloc: %s\n", strerror (errno));
|
||||
ldap_unbind_s (conn);
|
||||
exit (-1);
|
||||
}
|
||||
for (x = 0; tmp->attrs[i]->mod_values[x] != NULL; x++);
|
||||
|
||||
tmp->attrs[i]->mod_values[x] = strdup (data);
|
||||
tmp->attrs[i]->mod_values[x + 1] = NULL;
|
||||
return;
|
||||
}
|
||||
}
|
||||
tmp->attrs =
|
||||
(LDAPMod **) realloc (tmp->attrs,
|
||||
sizeof (LDAPMod) * ++(tmp->attrcnt));
|
||||
if (tmp->attrs == NULL)
|
||||
{
|
||||
fprintf (stderr, "realloc: %s\n", strerror (errno));
|
||||
ldap_unbind_s (conn);
|
||||
exit (-1);
|
||||
}
|
||||
|
||||
for (x = 0; tmp->attrs[x] != NULL; x++);
|
||||
tmp->attrs[x] = (LDAPMod *) malloc (sizeof (LDAPMod));
|
||||
tmp->attrs[x]->mod_op = LDAP_MOD_ADD;
|
||||
tmp->attrs[x]->mod_type = strdup (ldap_type_buffer);
|
||||
tmp->attrs[x]->mod_values = (char **) calloc (sizeof (char *), 2);
|
||||
tmp->attrs[x]->mod_values[0] = strdup (data);
|
||||
tmp->attrs[x]->mod_values[1] = NULL;
|
||||
tmp->attrs[x + 1] = NULL;
|
||||
}
|
||||
}
|
||||
|
||||
/* Size of a mod_values list, plus the terminating NULL field. */
|
||||
int
|
||||
get_attr_list_size (char **tmp)
|
||||
{
|
||||
int i = 0;
|
||||
char **ftmp = tmp;
|
||||
while (*ftmp != NULL)
|
||||
{
|
||||
i++;
|
||||
ftmp++;
|
||||
}
|
||||
return ++i;
|
||||
}
|
||||
|
||||
|
||||
/* take a hostname, and split it into a char ** of the dc parts,
|
||||
* example, we have www.domain.com, this function will return:
|
||||
* array[0] = com, array[1] = domain, array[2] = www. */
|
||||
|
||||
char **
|
||||
hostname_to_dn_list (char *hostname, char *zone, unsigned int flags)
|
||||
{
|
||||
char *tmp;
|
||||
static char *dn_buffer[64];
|
||||
int i = 0;
|
||||
char *zname;
|
||||
char *hnamebuff;
|
||||
|
||||
zname = strdup (hostname);
|
||||
|
||||
if (flags == DNS_OBJECT)
|
||||
{
|
||||
|
||||
if (strlen (zname) != strlen (zone))
|
||||
{
|
||||
tmp = &zname[strlen (zname) - strlen (zone)];
|
||||
*--tmp = '\0';
|
||||
hnamebuff = strdup (zname);
|
||||
zname = ++tmp;
|
||||
}
|
||||
else
|
||||
hnamebuff = "@";
|
||||
}
|
||||
else
|
||||
{
|
||||
zname = zone;
|
||||
hnamebuff = NULL;
|
||||
}
|
||||
|
||||
for (tmp = strrchr (zname, '.'); tmp != (char *) 0;
|
||||
tmp = strrchr (zname, '.'))
|
||||
{
|
||||
*tmp++ = '\0';
|
||||
dn_buffer[i++] = tmp;
|
||||
}
|
||||
dn_buffer[i++] = zname;
|
||||
dn_buffer[i++] = hnamebuff;
|
||||
dn_buffer[i] = NULL;
|
||||
|
||||
return dn_buffer;
|
||||
}
|
||||
|
||||
|
||||
/* build an sdb compatible LDAP DN from a "dc_list" (char **).
|
||||
* will append dNSTTL information to each RR Record, with the
|
||||
* exception of "@"/SOA. */
|
||||
|
||||
char *
|
||||
build_dn_from_dc_list (char **dc_list, unsigned int ttl, int flag)
|
||||
{
|
||||
int size;
|
||||
int x;
|
||||
static char dn[1024];
|
||||
char tmp[128];
|
||||
|
||||
bzero (tmp, sizeof (tmp));
|
||||
bzero (dn, sizeof (dn));
|
||||
size = get_attr_list_size (dc_list);
|
||||
for (x = size - 2; x > 0; x--)
|
||||
{
|
||||
if (flag == WI_SPEC)
|
||||
{
|
||||
if (x == (size - 2) && (strncmp (dc_list[x], "@", 1) == 0) && (ttl))
|
||||
sprintf (tmp, "relativeDomainName=%s + dNSTTL=%d,", dc_list[x], ttl);
|
||||
else if (x == (size - 2))
|
||||
sprintf(tmp, "relativeDomainName=%s,",dc_list[x]);
|
||||
else
|
||||
sprintf(tmp,"dc=%s,", dc_list[x]);
|
||||
}
|
||||
else
|
||||
{
|
||||
sprintf(tmp, "dc=%s,", dc_list[x]);
|
||||
}
|
||||
|
||||
|
||||
strncat (dn, tmp, sizeof (dn) - strlen (dn));
|
||||
}
|
||||
|
||||
sprintf (tmp, "dc=%s", dc_list[0]);
|
||||
strncat (dn, tmp, sizeof (dn) - strlen (dn));
|
||||
|
||||
fflush(NULL);
|
||||
return dn;
|
||||
}
|
||||
|
||||
|
||||
/* Initialize LDAP Conn */
|
||||
void
|
||||
init_ldap_conn ()
|
||||
{
|
||||
int result;
|
||||
conn = ldap_open (ldapsystem, LDAP_PORT);
|
||||
if (conn == NULL)
|
||||
{
|
||||
fprintf (stderr, "Error opening Ldap connection: %s\n",
|
||||
strerror (errno));
|
||||
exit (-1);
|
||||
}
|
||||
|
||||
result = ldap_simple_bind_s (conn, binddn, bindpw);
|
||||
ldap_result_check ("ldap_simple_bind_s", "LDAP Bind", result);
|
||||
}
|
||||
|
||||
/* Like isc_result_check, only for LDAP */
|
||||
void
|
||||
ldap_result_check (char *msg, char *dn, int err)
|
||||
{
|
||||
if ((err != LDAP_SUCCESS) && (err != LDAP_ALREADY_EXISTS))
|
||||
{
|
||||
fprintf(stderr, "Error while adding %s (%s):\n",
|
||||
dn, msg);
|
||||
ldap_perror (conn, dn);
|
||||
ldap_unbind_s (conn);
|
||||
exit (-1);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
/* For running the ldap_info run queue. */
|
||||
void
|
||||
add_ldap_values (ldap_info * ldinfo)
|
||||
{
|
||||
int result;
|
||||
char dnbuffer[1024];
|
||||
|
||||
|
||||
if (ldapbase != NULL)
|
||||
sprintf (dnbuffer, "%s,%s", ldinfo->dn, ldapbase);
|
||||
else
|
||||
sprintf (dnbuffer, "%s", ldinfo->dn);
|
||||
|
||||
result = ldap_add_s (conn, dnbuffer, ldinfo->attrs);
|
||||
ldap_result_check ("ldap_add_s", dnbuffer, result);
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
/* name says it all */
|
||||
void
|
||||
usage ()
|
||||
{
|
||||
fprintf (stderr,
|
||||
"zone2ldap -D [BIND DN] -w [BIND PASSWORD] -b [BASE DN] -z [ZONE] -f [ZONE FILE] -h [LDAP HOST]
|
||||
[-c Create LDAP Base structure][-d Debug Output (lots !)] \n ");}
|
||||
@@ -1,348 +0,0 @@
|
||||
/*
|
||||
* Copyright (C) 2000, 2001 Internet Software Consortium.
|
||||
*
|
||||
* Permission to use, copy, modify, and distribute this software for any
|
||||
* purpose with or without fee is hereby granted, provided that the above
|
||||
* copyright notice and this permission notice appear in all copies.
|
||||
*
|
||||
* THE SOFTWARE IS PROVIDED "AS IS" AND INTERNET SOFTWARE CONSORTIUM
|
||||
* DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL
|
||||
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL
|
||||
* INTERNET SOFTWARE CONSORTIUM BE LIABLE FOR ANY SPECIAL, DIRECT,
|
||||
* INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING
|
||||
* FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT,
|
||||
* NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION
|
||||
* WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
|
||||
*/
|
||||
|
||||
/* $Id: pgsqldb.c,v 1.12 2001/02/28 23:42:37 bwelling Exp $ */
|
||||
|
||||
#include <config.h>
|
||||
|
||||
#include <stdio.h>
|
||||
#include <string.h>
|
||||
#include <stdlib.h>
|
||||
|
||||
#include <pgsql/libpq-fe.h>
|
||||
|
||||
#include <isc/mem.h>
|
||||
#include <isc/print.h>
|
||||
#include <isc/result.h>
|
||||
#include <isc/util.h>
|
||||
|
||||
#include <dns/sdb.h>
|
||||
#include <dns/result.h>
|
||||
|
||||
#include <named/globals.h>
|
||||
|
||||
#include "pgsqldb.h"
|
||||
|
||||
/*
|
||||
* A simple database driver that interfaces to a PostgreSQL database. This
|
||||
* is not complete, and not designed for general use. It opens one
|
||||
* connection to the database per zone, which is inefficient. It also may
|
||||
* not handle quoting correctly.
|
||||
*
|
||||
* The table must contain the fields "name", "rdtype", and "rdata", and
|
||||
* is expected to contain a properly constructed zone. The program "zonetodb"
|
||||
* creates such a table.
|
||||
*/
|
||||
|
||||
static dns_sdbimplementation_t *pgsqldb = NULL;
|
||||
|
||||
struct dbinfo {
|
||||
PGconn *conn;
|
||||
char *database;
|
||||
char *table;
|
||||
char *host;
|
||||
char *user;
|
||||
char *passwd;
|
||||
};
|
||||
|
||||
static void
|
||||
pgsqldb_destroy(const char *zone, void *driverdata, void **dbdata);
|
||||
|
||||
/*
|
||||
* Canonicalize a string before writing it to the database.
|
||||
* "dest" must be an array of at least size 2*strlen(source) + 1.
|
||||
*/
|
||||
static void
|
||||
quotestring(const char *source, char *dest) {
|
||||
while (*source != 0) {
|
||||
if (*source == '\'')
|
||||
*dest++ = '\'';
|
||||
/* SQL doesn't treat \ as special, but PostgreSQL does */
|
||||
else if (*source == '\\')
|
||||
*dest++ = '\\';
|
||||
*dest++ = *source++;
|
||||
}
|
||||
*dest++ = 0;
|
||||
}
|
||||
|
||||
/*
|
||||
* Connect to the database.
|
||||
*/
|
||||
static isc_result_t
|
||||
db_connect(struct dbinfo *dbi) {
|
||||
dbi->conn = PQsetdbLogin(dbi->host, NULL, NULL, NULL, dbi->database,
|
||||
dbi->user, dbi->passwd);
|
||||
|
||||
if (PQstatus(dbi->conn) == CONNECTION_OK)
|
||||
return (ISC_R_SUCCESS);
|
||||
else
|
||||
return (ISC_R_FAILURE);
|
||||
}
|
||||
|
||||
/*
|
||||
* Check to see if the connection is still valid. If not, attempt to
|
||||
* reconnect.
|
||||
*/
|
||||
static isc_result_t
|
||||
maybe_reconnect(struct dbinfo *dbi) {
|
||||
if (PQstatus(dbi->conn) == CONNECTION_OK)
|
||||
return (ISC_R_SUCCESS);
|
||||
|
||||
return (db_connect(dbi));
|
||||
}
|
||||
|
||||
/*
|
||||
* This database operates on absolute names.
|
||||
*
|
||||
* Queries are converted into SQL queries and issued synchronously. Errors
|
||||
* are handled really badly.
|
||||
*/
|
||||
static isc_result_t
|
||||
pgsqldb_lookup(const char *zone, const char *name, void *dbdata,
|
||||
dns_sdblookup_t *lookup)
|
||||
{
|
||||
isc_result_t result;
|
||||
struct dbinfo *dbi = dbdata;
|
||||
PGresult *res;
|
||||
char str[1500];
|
||||
char *canonname;
|
||||
int i;
|
||||
|
||||
UNUSED(zone);
|
||||
|
||||
canonname = isc_mem_get(ns_g_mctx, strlen(name) * 2 + 1);
|
||||
if (canonname == NULL)
|
||||
return (ISC_R_NOMEMORY);
|
||||
quotestring(name, canonname);
|
||||
snprintf(str, sizeof(str),
|
||||
"SELECT TTL,RDTYPE,RDATA FROM \"%s\" WHERE "
|
||||
"lower(NAME) = lower('%s')", dbi->table, canonname);
|
||||
isc_mem_put(ns_g_mctx, canonname, strlen(name) * 2 + 1);
|
||||
|
||||
result = maybe_reconnect(dbi);
|
||||
if (result != ISC_R_SUCCESS)
|
||||
return (result);
|
||||
|
||||
res = PQexec(dbi->conn, str);
|
||||
if (!res || PQresultStatus(res) != PGRES_TUPLES_OK) {
|
||||
PQclear(res);
|
||||
return (ISC_R_FAILURE);
|
||||
}
|
||||
if (PQntuples(res) == 0) {
|
||||
PQclear(res);
|
||||
return (ISC_R_NOTFOUND);
|
||||
}
|
||||
|
||||
for (i = 0; i < PQntuples(res); i++) {
|
||||
char *ttlstr = PQgetvalue(res, i, 0);
|
||||
char *type = PQgetvalue(res, i, 1);
|
||||
char *data = PQgetvalue(res, i, 2);
|
||||
dns_ttl_t ttl;
|
||||
char *endp;
|
||||
ttl = strtol(ttlstr, &endp, 10);
|
||||
if (*endp != '\0') {
|
||||
PQclear(res);
|
||||
return (DNS_R_BADTTL);
|
||||
}
|
||||
result = dns_sdb_putrr(lookup, type, ttl, data);
|
||||
if (result != ISC_R_SUCCESS) {
|
||||
PQclear(res);
|
||||
return (ISC_R_FAILURE);
|
||||
}
|
||||
}
|
||||
|
||||
PQclear(res);
|
||||
return (ISC_R_SUCCESS);
|
||||
}
|
||||
|
||||
/*
|
||||
* Issue an SQL query to return all nodes in the database and fill the
|
||||
* allnodes structure.
|
||||
*/
|
||||
static isc_result_t
|
||||
pgsqldb_allnodes(const char *zone, void *dbdata, dns_sdballnodes_t *allnodes) {
|
||||
struct dbinfo *dbi = dbdata;
|
||||
PGresult *res;
|
||||
isc_result_t result;
|
||||
char str[1500];
|
||||
int i;
|
||||
|
||||
UNUSED(zone);
|
||||
|
||||
snprintf(str, sizeof(str),
|
||||
"SELECT TTL,NAME,RDTYPE,RDATA FROM \"%s\" ORDER BY NAME",
|
||||
dbi->table);
|
||||
|
||||
result = maybe_reconnect(dbi);
|
||||
if (result != ISC_R_SUCCESS)
|
||||
return (result);
|
||||
|
||||
res = PQexec(dbi->conn, str);
|
||||
if (!res || PQresultStatus(res) != PGRES_TUPLES_OK ) {
|
||||
PQclear(res);
|
||||
return (ISC_R_FAILURE);
|
||||
}
|
||||
if (PQntuples(res) == 0) {
|
||||
PQclear(res);
|
||||
return (ISC_R_NOTFOUND);
|
||||
}
|
||||
|
||||
for (i = 0; i < PQntuples(res); i++) {
|
||||
char *ttlstr = PQgetvalue(res, i, 0);
|
||||
char *name = PQgetvalue(res, i, 1);
|
||||
char *type = PQgetvalue(res, i, 2);
|
||||
char *data = PQgetvalue(res, i, 3);
|
||||
dns_ttl_t ttl;
|
||||
char *endp;
|
||||
ttl = strtol(ttlstr, &endp, 10);
|
||||
if (*endp != '\0') {
|
||||
PQclear(res);
|
||||
return (DNS_R_BADTTL);
|
||||
}
|
||||
result = dns_sdb_putnamedrr(allnodes, name, type, ttl, data);
|
||||
if (result != ISC_R_SUCCESS) {
|
||||
PQclear(res);
|
||||
return (ISC_R_FAILURE);
|
||||
}
|
||||
}
|
||||
|
||||
PQclear(res);
|
||||
return (ISC_R_SUCCESS);
|
||||
}
|
||||
|
||||
/*
|
||||
* Create a connection to the database and save any necessary information
|
||||
* in dbdata.
|
||||
*
|
||||
* argv[0] is the name of the database
|
||||
* argv[1] is the name of the table
|
||||
* argv[2] (if present) is the name of the host to connect to
|
||||
* argv[3] (if present) is the name of the user to connect as
|
||||
* argv[4] (if present) is the name of the password to connect with
|
||||
*/
|
||||
static isc_result_t
|
||||
pgsqldb_create(const char *zone, int argc, char **argv,
|
||||
void *driverdata, void **dbdata)
|
||||
{
|
||||
struct dbinfo *dbi;
|
||||
isc_result_t result;
|
||||
|
||||
UNUSED(zone);
|
||||
UNUSED(driverdata);
|
||||
|
||||
if (argc < 2)
|
||||
return (ISC_R_FAILURE);
|
||||
|
||||
dbi = isc_mem_get(ns_g_mctx, sizeof(struct dbinfo));
|
||||
if (dbi == NULL)
|
||||
return (ISC_R_NOMEMORY);
|
||||
dbi->conn = NULL;
|
||||
dbi->database = NULL;
|
||||
dbi->table = NULL;
|
||||
dbi->host = NULL;
|
||||
dbi->user = NULL;
|
||||
dbi->passwd = NULL;
|
||||
|
||||
#define STRDUP_OR_FAIL(target, source) \
|
||||
do { \
|
||||
target = isc_mem_strdup(ns_g_mctx, source); \
|
||||
if (target == NULL) { \
|
||||
result = ISC_R_NOMEMORY; \
|
||||
goto cleanup; \
|
||||
} \
|
||||
} while (0);
|
||||
|
||||
STRDUP_OR_FAIL(dbi->database, argv[0]);
|
||||
STRDUP_OR_FAIL(dbi->table, argv[1]);
|
||||
if (argc > 2)
|
||||
STRDUP_OR_FAIL(dbi->host, argv[2]);
|
||||
if (argc > 3)
|
||||
STRDUP_OR_FAIL(dbi->user, argv[3]);
|
||||
if (argc > 4)
|
||||
STRDUP_OR_FAIL(dbi->passwd, argv[4]);
|
||||
|
||||
result = db_connect(dbi);
|
||||
if (result != ISC_R_SUCCESS)
|
||||
goto cleanup;
|
||||
|
||||
*dbdata = dbi;
|
||||
return (ISC_R_SUCCESS);
|
||||
|
||||
cleanup:
|
||||
pgsqldb_destroy(zone, driverdata, (void **)&dbi);
|
||||
return (result);
|
||||
}
|
||||
|
||||
/*
|
||||
* Close the connection to the database.
|
||||
*/
|
||||
static void
|
||||
pgsqldb_destroy(const char *zone, void *driverdata, void **dbdata) {
|
||||
struct dbinfo *dbi = *dbdata;
|
||||
|
||||
UNUSED(zone);
|
||||
UNUSED(driverdata);
|
||||
|
||||
if (dbi->conn != NULL)
|
||||
PQfinish(dbi->conn);
|
||||
if (dbi->database != NULL)
|
||||
isc_mem_free(ns_g_mctx, dbi->database);
|
||||
if (dbi->table != NULL)
|
||||
isc_mem_free(ns_g_mctx, dbi->table);
|
||||
if (dbi->host != NULL)
|
||||
isc_mem_free(ns_g_mctx, dbi->host);
|
||||
if (dbi->user != NULL)
|
||||
isc_mem_free(ns_g_mctx, dbi->user);
|
||||
if (dbi->passwd != NULL)
|
||||
isc_mem_free(ns_g_mctx, dbi->passwd);
|
||||
if (dbi->database != NULL)
|
||||
isc_mem_free(ns_g_mctx, dbi->database);
|
||||
isc_mem_put(ns_g_mctx, dbi, sizeof(struct dbinfo));
|
||||
}
|
||||
|
||||
/*
|
||||
* Since the SQL database corresponds to a zone, the authority data should
|
||||
* be returned by the lookup() function. Therefore the authority() function
|
||||
* is NULL.
|
||||
*/
|
||||
static dns_sdbmethods_t pgsqldb_methods = {
|
||||
pgsqldb_lookup,
|
||||
NULL, /* authority */
|
||||
pgsqldb_allnodes,
|
||||
pgsqldb_create,
|
||||
pgsqldb_destroy
|
||||
};
|
||||
|
||||
/*
|
||||
* Wrapper around dns_sdb_register().
|
||||
*/
|
||||
isc_result_t
|
||||
pgsqldb_init(void) {
|
||||
unsigned int flags;
|
||||
flags = 0;
|
||||
return (dns_sdb_register("pgsql", &pgsqldb_methods, NULL, flags,
|
||||
ns_g_mctx, &pgsqldb));
|
||||
}
|
||||
|
||||
/*
|
||||
* Wrapper around dns_sdb_unregister().
|
||||
*/
|
||||
void
|
||||
pgsqldb_clear(void) {
|
||||
if (pgsqldb != NULL)
|
||||
dns_sdb_unregister(&pgsqldb);
|
||||
}
|
||||
@@ -1,25 +0,0 @@
|
||||
/*
|
||||
* Copyright (C) 2000, 2001 Internet Software Consortium.
|
||||
*
|
||||
* Permission to use, copy, modify, and distribute this software for any
|
||||
* purpose with or without fee is hereby granted, provided that the above
|
||||
* copyright notice and this permission notice appear in all copies.
|
||||
*
|
||||
* THE SOFTWARE IS PROVIDED "AS IS" AND INTERNET SOFTWARE CONSORTIUM
|
||||
* DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL
|
||||
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL
|
||||
* INTERNET SOFTWARE CONSORTIUM BE LIABLE FOR ANY SPECIAL, DIRECT,
|
||||
* INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING
|
||||
* FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT,
|
||||
* NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION
|
||||
* WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
|
||||
*/
|
||||
|
||||
/* $Id: pgsqldb.h,v 1.2 2001/01/09 21:46:27 bwelling Exp $ */
|
||||
|
||||
#include <isc/types.h>
|
||||
|
||||
isc_result_t pgsqldb_init(void);
|
||||
|
||||
void pgsqldb_clear(void);
|
||||
|
||||
@@ -1,51 +0,0 @@
|
||||
# Copyright (C) 2000, 2001 Internet Software Consortium.
|
||||
#
|
||||
# Permission to use, copy, modify, and distribute this software for any
|
||||
# purpose with or without fee is hereby granted, provided that the above
|
||||
# copyright notice and this permission notice appear in all copies.
|
||||
#
|
||||
# THE SOFTWARE IS PROVIDED "AS IS" AND INTERNET SOFTWARE CONSORTIUM
|
||||
# DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL
|
||||
# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL
|
||||
# INTERNET SOFTWARE CONSORTIUM BE LIABLE FOR ANY SPECIAL, DIRECT,
|
||||
# INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING
|
||||
# FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT,
|
||||
# NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION
|
||||
# WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
|
||||
|
||||
# $Id: lookup.tcl,v 1.7 2001/01/09 21:46:24 bwelling Exp $
|
||||
|
||||
#
|
||||
# Sample lookup procedure for tcldb
|
||||
#
|
||||
# This lookup procedure defines zones with identical SOA, NS, and MX
|
||||
# records at the apex and a single A record that varies from zone to
|
||||
# zone at the name "www".
|
||||
#
|
||||
# Something like this could be used by a web hosting company to serve
|
||||
# a number of domains without needing to create a separate master file
|
||||
# for each domain. Instead, all per-zone data (in this case, a single
|
||||
# IP address) specified in the named.conf file like this:
|
||||
#
|
||||
# zone "a.com." { type master; database "tcl 10.0.0.42"; };
|
||||
# zone "b.com." { type master; database "tcl 10.0.0.99"; };
|
||||
#
|
||||
# Since the tcldb driver doesn't support zone transfers, there should
|
||||
# be at least two identically configured master servers. In the
|
||||
# example below, they are assumed to be called ns1.isp.nil and
|
||||
# ns2.isp.nil.
|
||||
#
|
||||
|
||||
proc lookup {zone name} {
|
||||
global dbargs
|
||||
switch -- $name {
|
||||
@ { return [list \
|
||||
{SOA 86400 "ns1.isp.nil. hostmaster.isp.nil. \
|
||||
1 3600 1800 1814400 3600"} \
|
||||
{NS 86400 "ns1.isp.nil."} \
|
||||
{NS 86400 "ns2.isp.nil."} \
|
||||
{MX 86400 "10 mail.isp.nil."} ] }
|
||||
www { return [list [list A 3600 $dbargs($zone)] ] }
|
||||
}
|
||||
return NXDOMAIN
|
||||
}
|
||||
@@ -1,232 +0,0 @@
|
||||
/*
|
||||
* Copyright (C) 2000, 2001 Internet Software Consortium.
|
||||
*
|
||||
* Permission to use, copy, modify, and distribute this software for any
|
||||
* purpose with or without fee is hereby granted, provided that the above
|
||||
* copyright notice and this permission notice appear in all copies.
|
||||
*
|
||||
* THE SOFTWARE IS PROVIDED "AS IS" AND INTERNET SOFTWARE CONSORTIUM
|
||||
* DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL
|
||||
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL
|
||||
* INTERNET SOFTWARE CONSORTIUM BE LIABLE FOR ANY SPECIAL, DIRECT,
|
||||
* INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING
|
||||
* FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT,
|
||||
* NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION
|
||||
* WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
|
||||
*/
|
||||
|
||||
/* $Id: tcldb.c,v 1.7 2001/01/09 21:46:28 bwelling Exp $ */
|
||||
|
||||
/*
|
||||
* A simple database driver that calls a Tcl procedure to define
|
||||
* the contents of the DNS namespace. The procedure is loaded
|
||||
* from the file lookup.tcl; look at the comments there for
|
||||
* more information.
|
||||
*/
|
||||
|
||||
#include <config.h>
|
||||
|
||||
#include <string.h>
|
||||
#include <stdlib.h>
|
||||
#include <unistd.h>
|
||||
#include <sys/stat.h>
|
||||
|
||||
#include <isc/mem.h>
|
||||
#include <isc/print.h>
|
||||
#include <isc/result.h>
|
||||
#include <isc/util.h>
|
||||
|
||||
#include <dns/log.h>
|
||||
#include <dns/sdb.h>
|
||||
|
||||
#include <named/globals.h>
|
||||
|
||||
#include <tcl.h>
|
||||
|
||||
#include <tcldb.h>
|
||||
|
||||
#define CHECK(op) \
|
||||
do { result = (op); \
|
||||
if (result != ISC_R_SUCCESS) return (result); \
|
||||
} while (0)
|
||||
|
||||
typedef struct tcldb_driver {
|
||||
isc_mem_t *mctx;
|
||||
Tcl_Interp *interp;
|
||||
} tcldb_driver_t;
|
||||
|
||||
static tcldb_driver_t *the_driver = NULL;
|
||||
|
||||
static dns_sdbimplementation_t *tcldb = NULL;
|
||||
|
||||
static isc_result_t
|
||||
tcldb_driver_create(isc_mem_t *mctx, tcldb_driver_t **driverp) {
|
||||
int tclres;
|
||||
isc_result_t result = ISC_R_SUCCESS;
|
||||
tcldb_driver_t *driver = isc_mem_get(mctx, sizeof(tcldb_driver_t));
|
||||
if (driver == NULL)
|
||||
return (ISC_R_NOMEMORY);
|
||||
driver->mctx = mctx;
|
||||
driver->interp = Tcl_CreateInterp();
|
||||
|
||||
tclres = Tcl_EvalFile(driver->interp, (char *) "lookup.tcl");
|
||||
if (tclres != TCL_OK) {
|
||||
isc_log_write(dns_lctx, DNS_LOGCATEGORY_GENERAL,
|
||||
DNS_LOGMODULE_SDB, ISC_LOG_ERROR,
|
||||
"initializing tcldb: "
|
||||
"loading 'lookup.tcl' failed: %s",
|
||||
driver->interp->result);
|
||||
result = ISC_R_FAILURE;
|
||||
goto cleanup;
|
||||
}
|
||||
*driverp = driver;
|
||||
return (ISC_R_SUCCESS);
|
||||
|
||||
cleanup:
|
||||
isc_mem_put(mctx, driver, sizeof(tcldb_driver_t));
|
||||
return (result);
|
||||
|
||||
}
|
||||
|
||||
static void
|
||||
tcldb_driver_destroy(tcldb_driver_t **driverp) {
|
||||
tcldb_driver_t *driver = *driverp;
|
||||
Tcl_DeleteInterp(driver->interp);
|
||||
isc_mem_put(driver->mctx, driver, sizeof(tcldb_driver_t));
|
||||
}
|
||||
|
||||
/*
|
||||
* Perform a lookup, by invoking the Tcl procedure "lookup".
|
||||
*/
|
||||
static isc_result_t
|
||||
tcldb_lookup(const char *zone, const char *name, void *dbdata,
|
||||
dns_sdblookup_t *lookup)
|
||||
{
|
||||
isc_result_t result = ISC_R_SUCCESS;
|
||||
int tclres;
|
||||
int rrc; /* RR count */
|
||||
char **rrv; /* RR vector */
|
||||
int i;
|
||||
char *cmdv[3];
|
||||
char *cmd;
|
||||
|
||||
tcldb_driver_t *driver = (tcldb_driver_t *) dbdata;
|
||||
|
||||
cmdv[0] = "lookup";
|
||||
cmdv[1] = zone;
|
||||
cmdv[2] = name;
|
||||
cmd = Tcl_Merge(3, cmdv);
|
||||
tclres = Tcl_Eval(driver->interp, cmd);
|
||||
Tcl_Free(cmd);
|
||||
|
||||
if (tclres != TCL_OK) {
|
||||
isc_log_write(dns_lctx, DNS_LOGCATEGORY_GENERAL,
|
||||
DNS_LOGMODULE_SDB, ISC_LOG_ERROR,
|
||||
"zone '%s': tcl lookup function failed: %s",
|
||||
zone, driver->interp->result);
|
||||
return (ISC_R_FAILURE);
|
||||
}
|
||||
|
||||
if (strcmp(driver->interp->result, "NXDOMAIN") == 0) {
|
||||
result = ISC_R_NOTFOUND;
|
||||
goto fail;
|
||||
}
|
||||
|
||||
tclres = Tcl_SplitList(driver->interp, driver->interp->result,
|
||||
&rrc, &rrv);
|
||||
if (tclres != TCL_OK)
|
||||
goto malformed;
|
||||
|
||||
for (i = 0; i < rrc; i++) {
|
||||
isc_result_t tmpres;
|
||||
int fieldc; /* Field count */
|
||||
char **fieldv; /* Field vector */
|
||||
tclres = Tcl_SplitList(driver->interp, rrv[i],
|
||||
&fieldc, &fieldv);
|
||||
if (tclres != TCL_OK) {
|
||||
tmpres = ISC_R_FAILURE;
|
||||
goto failrr;
|
||||
}
|
||||
if (fieldc != 3)
|
||||
goto malformed;
|
||||
tmpres = dns_sdb_putrr(lookup, fieldv[0], atoi(fieldv[1]),
|
||||
fieldv[2]);
|
||||
Tcl_Free((char *) fieldv);
|
||||
failrr:
|
||||
if (tmpres != ISC_R_SUCCESS)
|
||||
result = tmpres;
|
||||
}
|
||||
Tcl_Free((char *) rrv);
|
||||
if (result == ISC_R_SUCCESS)
|
||||
return (result);
|
||||
|
||||
malformed:
|
||||
isc_log_write(dns_lctx, DNS_LOGCATEGORY_GENERAL,
|
||||
DNS_LOGMODULE_SDB, ISC_LOG_ERROR,
|
||||
"zone '%s': "
|
||||
"malformed return value from tcl lookup function: %s",
|
||||
zone, driver->interp->result);
|
||||
result = ISC_R_FAILURE;
|
||||
fail:
|
||||
return (result);
|
||||
}
|
||||
|
||||
/*
|
||||
* Set up per-zone state. In our case, the database arguments of the
|
||||
* zone are collected into a Tcl list and assigned to an element of
|
||||
* the global array "dbargs".
|
||||
*/
|
||||
static isc_result_t
|
||||
tcldb_create(const char *zone, int argc, char **argv,
|
||||
void *driverdata, void **dbdata)
|
||||
{
|
||||
tcldb_driver_t *driver = (tcldb_driver_t *) driverdata;
|
||||
|
||||
char *list = Tcl_Merge(argc, argv);
|
||||
|
||||
Tcl_SetVar2(driver->interp, (char *) "dbargs", (char *) zone, list, 0);
|
||||
|
||||
Tcl_Free(list);
|
||||
|
||||
*dbdata = driverdata;
|
||||
|
||||
return (ISC_R_SUCCESS);
|
||||
}
|
||||
|
||||
/*
|
||||
* This driver does not support zone transfer, so allnodes() is NULL.
|
||||
*/
|
||||
static dns_sdbmethods_t tcldb_methods = {
|
||||
tcldb_lookup,
|
||||
NULL, /* authority */
|
||||
NULL, /* allnodes */
|
||||
tcldb_create,
|
||||
NULL /* destroy */
|
||||
};
|
||||
|
||||
/*
|
||||
* Initialize the tcldb driver.
|
||||
*/
|
||||
isc_result_t
|
||||
tcldb_init(void) {
|
||||
isc_result_t result;
|
||||
int flags = DNS_SDBFLAG_RELATIVEOWNER | DNS_SDBFLAG_RELATIVERDATA;
|
||||
|
||||
result = tcldb_driver_create(ns_g_mctx, &the_driver);
|
||||
if (result != ISC_R_SUCCESS)
|
||||
return (result);
|
||||
|
||||
return (dns_sdb_register("tcl", &tcldb_methods, the_driver, flags,
|
||||
ns_g_mctx, &tcldb));
|
||||
}
|
||||
|
||||
/*
|
||||
* Wrapper around dns_sdb_unregister().
|
||||
*/
|
||||
void
|
||||
tcldb_clear(void) {
|
||||
if (tcldb != NULL)
|
||||
dns_sdb_unregister(&tcldb);
|
||||
if (the_driver != NULL)
|
||||
tcldb_driver_destroy(&the_driver);
|
||||
}
|
||||
@@ -1,143 +0,0 @@
|
||||
/*
|
||||
* Copyright (C) 2000, 2001 Internet Software Consortium.
|
||||
*
|
||||
* Permission to use, copy, modify, and distribute this software for any
|
||||
* purpose with or without fee is hereby granted, provided that the above
|
||||
* copyright notice and this permission notice appear in all copies.
|
||||
*
|
||||
* THE SOFTWARE IS PROVIDED "AS IS" AND INTERNET SOFTWARE CONSORTIUM
|
||||
* DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL
|
||||
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL
|
||||
* INTERNET SOFTWARE CONSORTIUM BE LIABLE FOR ANY SPECIAL, DIRECT,
|
||||
* INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING
|
||||
* FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT,
|
||||
* NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION
|
||||
* WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
|
||||
*/
|
||||
|
||||
/* $Id: timedb.c,v 1.7 2001/01/09 21:46:30 bwelling Exp $ */
|
||||
|
||||
/*
|
||||
* A simple database driver that enables the server to return the
|
||||
* current time in a DNS record.
|
||||
*/
|
||||
|
||||
#include <config.h>
|
||||
|
||||
#include <string.h>
|
||||
#include <stdio.h>
|
||||
#include <time.h>
|
||||
|
||||
#include <isc/print.h>
|
||||
#include <isc/result.h>
|
||||
#include <isc/util.h>
|
||||
|
||||
#include <dns/sdb.h>
|
||||
|
||||
#include <named/globals.h>
|
||||
|
||||
#include "timedb.h"
|
||||
|
||||
static dns_sdbimplementation_t *timedb = NULL;
|
||||
|
||||
/*
|
||||
* This database operates on relative names.
|
||||
*
|
||||
* "time" and "@" return the time in a TXT record.
|
||||
* "clock" is a CNAME to "time"
|
||||
* "current" is a DNAME to "@" (try time.current.time)
|
||||
*/
|
||||
static isc_result_t
|
||||
timedb_lookup(const char *zone, const char *name, void *dbdata,
|
||||
dns_sdblookup_t *lookup)
|
||||
{
|
||||
isc_result_t result;
|
||||
|
||||
UNUSED(zone);
|
||||
UNUSED(dbdata);
|
||||
|
||||
if (strcmp(name, "@") == 0 || strcmp(name, "time") == 0) {
|
||||
time_t now = time(NULL);
|
||||
char buf[100];
|
||||
int n;
|
||||
|
||||
/*
|
||||
* Call ctime to create the string, put it in quotes, and
|
||||
* remove the trailing newline.
|
||||
*/
|
||||
n = snprintf(buf, sizeof(buf), "\"%s", ctime(&now));
|
||||
if (n < 0)
|
||||
return (ISC_R_FAILURE);
|
||||
buf[n - 1] = '\"';
|
||||
result = dns_sdb_putrr(lookup, "txt", 1, buf);
|
||||
if (result != ISC_R_SUCCESS)
|
||||
return (ISC_R_FAILURE);
|
||||
} else if (strcmp(name, "clock") == 0) {
|
||||
result = dns_sdb_putrr(lookup, "cname", 1, "time");
|
||||
if (result != ISC_R_SUCCESS)
|
||||
return (ISC_R_FAILURE);
|
||||
} else if (strcmp(name, "current") == 0) {
|
||||
result = dns_sdb_putrr(lookup, "dname", 1, "@");
|
||||
if (result != ISC_R_SUCCESS)
|
||||
return (ISC_R_FAILURE);
|
||||
} else
|
||||
return (ISC_R_NOTFOUND);
|
||||
|
||||
return (ISC_R_SUCCESS);
|
||||
}
|
||||
|
||||
/*
|
||||
* lookup() does not return SOA or NS records, so authority() must be defined.
|
||||
*/
|
||||
static isc_result_t
|
||||
timedb_authority(const char *zone, void *dbdata, dns_sdblookup_t *lookup) {
|
||||
isc_result_t result;
|
||||
|
||||
UNUSED(zone);
|
||||
UNUSED(dbdata);
|
||||
|
||||
result = dns_sdb_putsoa(lookup, "localhost.", "root.localhost.", 0);
|
||||
if (result != ISC_R_SUCCESS)
|
||||
return (ISC_R_FAILURE);
|
||||
|
||||
result = dns_sdb_putrr(lookup, "ns", 86400, "ns1.localdomain.");
|
||||
if (result != ISC_R_SUCCESS)
|
||||
return (ISC_R_FAILURE);
|
||||
result = dns_sdb_putrr(lookup, "ns", 86400, "ns2.localdomain.");
|
||||
if (result != ISC_R_SUCCESS)
|
||||
return (ISC_R_FAILURE);
|
||||
|
||||
return (ISC_R_SUCCESS);
|
||||
}
|
||||
|
||||
/*
|
||||
* This zone does not support zone transfer, so allnodes() is NULL. There
|
||||
* is no database specific data, so create() and destroy() are NULL.
|
||||
*/
|
||||
static dns_sdbmethods_t timedb_methods = {
|
||||
timedb_lookup,
|
||||
timedb_authority,
|
||||
NULL, /* allnodes */
|
||||
NULL, /* create */
|
||||
NULL /* destroy */
|
||||
};
|
||||
|
||||
/*
|
||||
* Wrapper around dns_sdb_register().
|
||||
*/
|
||||
isc_result_t
|
||||
timedb_init(void) {
|
||||
unsigned int flags;
|
||||
flags = DNS_SDBFLAG_RELATIVEOWNER | DNS_SDBFLAG_RELATIVERDATA;
|
||||
return (dns_sdb_register("time", &timedb_methods, NULL, flags,
|
||||
ns_g_mctx, &timedb));
|
||||
}
|
||||
|
||||
/*
|
||||
* Wrapper around dns_sdb_unregister().
|
||||
*/
|
||||
void
|
||||
timedb_clear(void) {
|
||||
if (timedb != NULL)
|
||||
dns_sdb_unregister(&timedb);
|
||||
}
|
||||
@@ -1,25 +0,0 @@
|
||||
/*
|
||||
* Copyright (C) 2000, 2001 Internet Software Consortium.
|
||||
*
|
||||
* Permission to use, copy, modify, and distribute this software for any
|
||||
* purpose with or without fee is hereby granted, provided that the above
|
||||
* copyright notice and this permission notice appear in all copies.
|
||||
*
|
||||
* THE SOFTWARE IS PROVIDED "AS IS" AND INTERNET SOFTWARE CONSORTIUM
|
||||
* DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL
|
||||
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL
|
||||
* INTERNET SOFTWARE CONSORTIUM BE LIABLE FOR ANY SPECIAL, DIRECT,
|
||||
* INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING
|
||||
* FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT,
|
||||
* NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION
|
||||
* WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
|
||||
*/
|
||||
|
||||
/* $Id: timedb.h,v 1.2 2001/01/09 21:46:31 bwelling Exp $ */
|
||||
|
||||
#include <isc/types.h>
|
||||
|
||||
isc_result_t timedb_init(void);
|
||||
|
||||
void timedb_clear(void);
|
||||
|
||||
+24
-6
@@ -2,7 +2,7 @@
|
||||
<!DOCTYPE book PUBLIC "-//OASIS//DTD DocBook XML V4.0//EN"
|
||||
"http://www.oasis-open.org/docbook/xml/4.0/docbookx.dtd">
|
||||
|
||||
<!-- File: $Id: Bv9ARM-book.xml,v 1.155 2001/08/28 17:37:24 gson Exp $ -->
|
||||
<!-- File: $Id: Bv9ARM-book.xml,v 1.155.2.2 2001/10/15 18:21:25 gson Exp $ -->
|
||||
|
||||
<book>
|
||||
<title>BIND 9 Administrator Reference Manual</title>
|
||||
@@ -705,7 +705,7 @@ of a server.</para>
|
||||
<para>The <command>named-checkzone</command> program checks a master file for
|
||||
syntax and consistency.</para>
|
||||
<cmdsynopsis label="Usage">
|
||||
<command>check-zone</command>
|
||||
<command>named-checkzone</command>
|
||||
<arg>-dq</arg>
|
||||
<arg>-c <replaceable>class</replaceable></arg>
|
||||
<arg choice="plain"><replaceable>zone</replaceable></arg>
|
||||
@@ -2798,6 +2798,8 @@ statement in the <filename>named.conf</filename> file:</para>
|
||||
<optional> sig-validity-interval <replaceable>number</replaceable> ; </optional>
|
||||
<optional> min-roots <replaceable>number</replaceable>; </optional>
|
||||
<optional> use-ixfr <replaceable>yes_or_no</replaceable> ; </optional>
|
||||
<optional> provide-ixfr <replaceable>yes_or_no</replaceable>; </optional>
|
||||
<optional> request-ixfr <replaceable>yes_or_no</replaceable>; </optional>
|
||||
<optional> treat-cr-as-space <replaceable>yes_or_no</replaceable> ; </optional>
|
||||
<optional> min-refresh-time <replaceable>number</replaceable> ; </optional>
|
||||
<optional> max-refresh-time <replaceable>number</replaceable> ; </optional>
|
||||
@@ -3089,6 +3091,22 @@ in <xref linkend="server_statement_definition_and_usage"/>. See also
|
||||
<xref linkend="incremental_zone_transfers"/>.
|
||||
</para></listitem></varlistentry>
|
||||
|
||||
<varlistentry><term><command>provide-ixfr</command></term>
|
||||
<listitem>
|
||||
<para>
|
||||
See the description of
|
||||
<command>provide-ixfr</command> in
|
||||
<xref linkend="server_statement_definition_and_usage"/>
|
||||
</para></listitem></varlistentry>
|
||||
|
||||
<varlistentry><term><command>request-ixfr</command></term>
|
||||
<listitem>
|
||||
<para>
|
||||
See the description of
|
||||
<command>request-ixfr</command> in
|
||||
<xref linkend="server_statement_definition_and_usage"/>
|
||||
</para></listitem></varlistentry>
|
||||
|
||||
<varlistentry><term><command>treat-cr-as-space</command></term>
|
||||
<listitem><para>This option was used in <acronym>BIND</acronym> 8 to make
|
||||
the server treat carriage return ("<command>\r</command>") characters the same way
|
||||
@@ -4002,14 +4020,14 @@ zone transfer when the given remote server, a slave, requests it.
|
||||
If set to <command>yes</command>, incremental transfer will be provided
|
||||
whenever possible. If set to <command>no</command>, all transfers
|
||||
to the remote server will be nonincremental. If not set, the value
|
||||
of the <command>provide-ixfr</command> option in the global options block
|
||||
is used as a default.</para>
|
||||
of the <command>provide-ixfr</command> option in the view or
|
||||
global options block is used as a default.</para>
|
||||
|
||||
<para>The <command>request-ixfr</command> clause determines whether
|
||||
the local server, acting as a slave, will request incremental zone
|
||||
transfers from the given remote server, a master. If not set, the
|
||||
value of the <command>request-ixfr</command> option in the global
|
||||
options block is used as a default.</para>
|
||||
value of the <command>request-ixfr</command> option in the view or
|
||||
global options block is used as a default.</para>
|
||||
|
||||
<para>IXFR requests to servers that do not support IXFR will automatically
|
||||
fall back to AXFR. Therefore, there is no need to manually list
|
||||
|
||||
@@ -782,7 +782,7 @@ CLASS="command"
|
||||
><P
|
||||
><B
|
||||
CLASS="command"
|
||||
>check-zone</B
|
||||
>named-checkzone</B
|
||||
> [-dq] [-c <TT
|
||||
CLASS="replaceable"
|
||||
><I
|
||||
|
||||
+98
-44
@@ -91,7 +91,7 @@ HREF="Bv9ARM.ch06.html#Configuration_File_Grammar"
|
||||
></DT
|
||||
><DT
|
||||
>6.3. <A
|
||||
HREF="Bv9ARM.ch06.html#AEN3497"
|
||||
HREF="Bv9ARM.ch06.html#AEN3515"
|
||||
>Zone File</A
|
||||
></DT
|
||||
></DL
|
||||
@@ -3884,6 +3884,24 @@ CLASS="replaceable"
|
||||
>]
|
||||
[<SPAN
|
||||
CLASS="optional"
|
||||
> provide-ixfr <TT
|
||||
CLASS="replaceable"
|
||||
><I
|
||||
>yes_or_no</I
|
||||
></TT
|
||||
>; </SPAN
|
||||
>]
|
||||
[<SPAN
|
||||
CLASS="optional"
|
||||
> request-ixfr <TT
|
||||
CLASS="replaceable"
|
||||
><I
|
||||
>yes_or_no</I
|
||||
></TT
|
||||
>; </SPAN
|
||||
>]
|
||||
[<SPAN
|
||||
CLASS="optional"
|
||||
> treat-cr-as-space <TT
|
||||
CLASS="replaceable"
|
||||
><I
|
||||
@@ -3989,7 +4007,7 @@ CLASS="sect2"
|
||||
><H2
|
||||
CLASS="sect2"
|
||||
><A
|
||||
NAME="AEN2075"
|
||||
NAME="AEN2079"
|
||||
>6.2.14. <B
|
||||
CLASS="command"
|
||||
>options</B
|
||||
@@ -4796,6 +4814,42 @@ HREF="Bv9ARM.ch04.html#incremental_zone_transfers"
|
||||
><DT
|
||||
><B
|
||||
CLASS="command"
|
||||
>provide-ixfr</B
|
||||
></DT
|
||||
><DD
|
||||
><P
|
||||
> See the description of
|
||||
<B
|
||||
CLASS="command"
|
||||
>provide-ixfr</B
|
||||
> in
|
||||
<A
|
||||
HREF="Bv9ARM.ch06.html#server_statement_definition_and_usage"
|
||||
>Section 6.2.16</A
|
||||
>
|
||||
</P
|
||||
></DD
|
||||
><DT
|
||||
><B
|
||||
CLASS="command"
|
||||
>request-ixfr</B
|
||||
></DT
|
||||
><DD
|
||||
><P
|
||||
> See the description of
|
||||
<B
|
||||
CLASS="command"
|
||||
>request-ixfr</B
|
||||
> in
|
||||
<A
|
||||
HREF="Bv9ARM.ch06.html#server_statement_definition_and_usage"
|
||||
>Section 6.2.16</A
|
||||
>
|
||||
</P
|
||||
></DD
|
||||
><DT
|
||||
><B
|
||||
CLASS="command"
|
||||
>treat-cr-as-space</B
|
||||
></DT
|
||||
><DD
|
||||
@@ -4943,7 +4997,7 @@ CLASS="sect3"
|
||||
><H3
|
||||
CLASS="sect3"
|
||||
><A
|
||||
NAME="AEN2362"
|
||||
NAME="AEN2380"
|
||||
>6.2.14.2. Forwarding</A
|
||||
></H3
|
||||
><P
|
||||
@@ -5147,7 +5201,7 @@ CLASS="sect3"
|
||||
><H3
|
||||
CLASS="sect3"
|
||||
><A
|
||||
NAME="AEN2427"
|
||||
NAME="AEN2445"
|
||||
>6.2.14.4. Interfaces</A
|
||||
></H3
|
||||
><P
|
||||
@@ -5242,7 +5296,7 @@ CLASS="sect3"
|
||||
><H3
|
||||
CLASS="sect3"
|
||||
><A
|
||||
NAME="AEN2453"
|
||||
NAME="AEN2471"
|
||||
>6.2.14.5. Query Address</A
|
||||
></H3
|
||||
><P
|
||||
@@ -5674,7 +5728,7 @@ CLASS="sect3"
|
||||
><H3
|
||||
CLASS="sect3"
|
||||
><A
|
||||
NAME="AEN2592"
|
||||
NAME="AEN2610"
|
||||
>6.2.14.7. Operating System Resource Limits</A
|
||||
></H3
|
||||
><P
|
||||
@@ -5794,7 +5848,7 @@ CLASS="sect3"
|
||||
><H3
|
||||
CLASS="sect3"
|
||||
><A
|
||||
NAME="AEN2629"
|
||||
NAME="AEN2647"
|
||||
>6.2.14.8. Server Resource Limits</A
|
||||
></H3
|
||||
><P
|
||||
@@ -5878,7 +5932,7 @@ CLASS="sect3"
|
||||
><H3
|
||||
CLASS="sect3"
|
||||
><A
|
||||
NAME="AEN2657"
|
||||
NAME="AEN2675"
|
||||
>6.2.14.9. Periodic Task Intervals</A
|
||||
></H3
|
||||
><P
|
||||
@@ -6245,7 +6299,7 @@ CLASS="command"
|
||||
><DIV
|
||||
CLASS="informaltable"
|
||||
><A
|
||||
NAME="AEN2745"
|
||||
NAME="AEN2763"
|
||||
></A
|
||||
><P
|
||||
></P
|
||||
@@ -6632,7 +6686,7 @@ number is identical to the number in the beginning line.</P
|
||||
><DIV
|
||||
CLASS="informaltable"
|
||||
><A
|
||||
NAME="AEN2857"
|
||||
NAME="AEN2875"
|
||||
></A
|
||||
><P
|
||||
></P
|
||||
@@ -6935,8 +6989,8 @@ to the remote server will be nonincremental. If not set, the value
|
||||
of the <B
|
||||
CLASS="command"
|
||||
>provide-ixfr</B
|
||||
> option in the global options block
|
||||
is used as a default.</P
|
||||
> option in the view or
|
||||
global options block is used as a default.</P
|
||||
><P
|
||||
>The <B
|
||||
CLASS="command"
|
||||
@@ -6947,8 +7001,8 @@ transfers from the given remote server, a master. If not set, the
|
||||
value of the <B
|
||||
CLASS="command"
|
||||
>request-ixfr</B
|
||||
> option in the global
|
||||
options block is used as a default.</P
|
||||
> option in the view or
|
||||
global options block is used as a default.</P
|
||||
><P
|
||||
>IXFR requests to servers that do not support IXFR will automatically
|
||||
fall back to AXFR. Therefore, there is no need to manually list
|
||||
@@ -7068,7 +7122,7 @@ CLASS="sect2"
|
||||
><H2
|
||||
CLASS="sect2"
|
||||
><A
|
||||
NAME="AEN2972"
|
||||
NAME="AEN2990"
|
||||
>6.2.17. <B
|
||||
CLASS="command"
|
||||
>trusted-keys</B
|
||||
@@ -7143,7 +7197,7 @@ CLASS="sect2"
|
||||
><H2
|
||||
CLASS="sect2"
|
||||
><A
|
||||
NAME="AEN2988"
|
||||
NAME="AEN3006"
|
||||
>6.2.18. <B
|
||||
CLASS="command"
|
||||
>trusted-keys</B
|
||||
@@ -7178,7 +7232,7 @@ CLASS="sect2"
|
||||
><H2
|
||||
CLASS="sect2"
|
||||
><A
|
||||
NAME="AEN2996"
|
||||
NAME="AEN3014"
|
||||
>6.2.19. <B
|
||||
CLASS="command"
|
||||
>view</B
|
||||
@@ -7253,7 +7307,7 @@ CLASS="sect2"
|
||||
><H2
|
||||
CLASS="sect2"
|
||||
><A
|
||||
NAME="AEN3012"
|
||||
NAME="AEN3030"
|
||||
>6.2.20. <B
|
||||
CLASS="command"
|
||||
>view</B
|
||||
@@ -7904,7 +7958,7 @@ CLASS="sect2"
|
||||
><H2
|
||||
CLASS="sect2"
|
||||
><A
|
||||
NAME="AEN3163"
|
||||
NAME="AEN3181"
|
||||
>6.2.22. <B
|
||||
CLASS="command"
|
||||
>zone</B
|
||||
@@ -7915,13 +7969,13 @@ CLASS="sect3"
|
||||
><H3
|
||||
CLASS="sect3"
|
||||
><A
|
||||
NAME="AEN3166"
|
||||
NAME="AEN3184"
|
||||
>6.2.22.1. Zone Types</A
|
||||
></H3
|
||||
><DIV
|
||||
CLASS="informaltable"
|
||||
><A
|
||||
NAME="AEN3168"
|
||||
NAME="AEN3186"
|
||||
></A
|
||||
><P
|
||||
></P
|
||||
@@ -8159,7 +8213,7 @@ CLASS="sect3"
|
||||
><H3
|
||||
CLASS="sect3"
|
||||
><A
|
||||
NAME="AEN3223"
|
||||
NAME="AEN3241"
|
||||
>6.2.22.2. Class</A
|
||||
></H3
|
||||
><P
|
||||
@@ -8197,7 +8251,7 @@ CLASS="sect3"
|
||||
><H3
|
||||
CLASS="sect3"
|
||||
><A
|
||||
NAME="AEN3233"
|
||||
NAME="AEN3251"
|
||||
>6.2.22.3. Zone Options</A
|
||||
></H3
|
||||
><P
|
||||
@@ -8838,7 +8892,7 @@ CLASS="varname"
|
||||
><DIV
|
||||
CLASS="informaltable"
|
||||
><A
|
||||
NAME="AEN3467"
|
||||
NAME="AEN3485"
|
||||
></A
|
||||
><P
|
||||
></P
|
||||
@@ -8945,7 +8999,7 @@ CLASS="sect1"
|
||||
><H1
|
||||
CLASS="sect1"
|
||||
><A
|
||||
NAME="AEN3497"
|
||||
NAME="AEN3515"
|
||||
>6.3. Zone File</A
|
||||
></H1
|
||||
><DIV
|
||||
@@ -8966,7 +9020,7 @@ CLASS="sect3"
|
||||
><H3
|
||||
CLASS="sect3"
|
||||
><A
|
||||
NAME="AEN3502"
|
||||
NAME="AEN3520"
|
||||
>6.3.1.1. Resource Records</A
|
||||
></H3
|
||||
><P
|
||||
@@ -8989,7 +9043,7 @@ HREF="Bv9ARM.ch06.html#rrset_ordering"
|
||||
><DIV
|
||||
CLASS="informaltable"
|
||||
><A
|
||||
NAME="AEN3508"
|
||||
NAME="AEN3526"
|
||||
></A
|
||||
><P
|
||||
></P
|
||||
@@ -9100,7 +9154,7 @@ or historical (h) and no longer in general use):</P
|
||||
><DIV
|
||||
CLASS="informaltable"
|
||||
><A
|
||||
NAME="AEN3540"
|
||||
NAME="AEN3558"
|
||||
></A
|
||||
><P
|
||||
></P
|
||||
@@ -9477,7 +9531,7 @@ are currently valid in the DNS:</P
|
||||
><DIV
|
||||
CLASS="informaltable"
|
||||
><A
|
||||
NAME="AEN3652"
|
||||
NAME="AEN3670"
|
||||
></A
|
||||
><P
|
||||
></P
|
||||
@@ -9529,7 +9583,7 @@ data that describes the resource:</P
|
||||
><DIV
|
||||
CLASS="informaltable"
|
||||
><A
|
||||
NAME="AEN3668"
|
||||
NAME="AEN3686"
|
||||
></A
|
||||
><P
|
||||
></P
|
||||
@@ -9706,7 +9760,7 @@ CLASS="sect3"
|
||||
><H3
|
||||
CLASS="sect3"
|
||||
><A
|
||||
NAME="AEN3716"
|
||||
NAME="AEN3734"
|
||||
>6.3.1.2. Textual expression of RRs</A
|
||||
></H3
|
||||
><P
|
||||
@@ -9736,7 +9790,7 @@ knowledge of the typical representation for the data.</P
|
||||
><DIV
|
||||
CLASS="informaltable"
|
||||
><A
|
||||
NAME="AEN3723"
|
||||
NAME="AEN3741"
|
||||
></A
|
||||
><P
|
||||
></P
|
||||
@@ -9945,7 +9999,7 @@ domain names.</P
|
||||
><DIV
|
||||
CLASS="informaltable"
|
||||
><A
|
||||
NAME="AEN3789"
|
||||
NAME="AEN3807"
|
||||
></A
|
||||
><P
|
||||
></P
|
||||
@@ -10036,7 +10090,7 @@ CLASS="sect2"
|
||||
><H2
|
||||
CLASS="sect2"
|
||||
><A
|
||||
NAME="AEN3817"
|
||||
NAME="AEN3835"
|
||||
>6.3.2. Discussion of MX Records</A
|
||||
></H2
|
||||
><P
|
||||
@@ -10069,7 +10123,7 @@ pointed to by the CNAME.</P
|
||||
><DIV
|
||||
CLASS="informaltable"
|
||||
><A
|
||||
NAME="AEN3823"
|
||||
NAME="AEN3841"
|
||||
></A
|
||||
><P
|
||||
></P
|
||||
@@ -10365,7 +10419,7 @@ used in a zone file.</P
|
||||
><DIV
|
||||
CLASS="informaltable"
|
||||
><A
|
||||
NAME="AEN3915"
|
||||
NAME="AEN3933"
|
||||
></A
|
||||
><P
|
||||
></P
|
||||
@@ -10448,7 +10502,7 @@ CLASS="sect2"
|
||||
><H2
|
||||
CLASS="sect2"
|
||||
><A
|
||||
NAME="AEN3938"
|
||||
NAME="AEN3956"
|
||||
>6.3.4. Inverse Mapping in IPv4</A
|
||||
></H2
|
||||
><P
|
||||
@@ -10472,7 +10526,7 @@ CLASS="optional"
|
||||
><DIV
|
||||
CLASS="informaltable"
|
||||
><A
|
||||
NAME="AEN3943"
|
||||
NAME="AEN3961"
|
||||
></A
|
||||
><P
|
||||
></P
|
||||
@@ -10552,7 +10606,7 @@ CLASS="sect2"
|
||||
><H2
|
||||
CLASS="sect2"
|
||||
><A
|
||||
NAME="AEN3965"
|
||||
NAME="AEN3983"
|
||||
>6.3.5. Other Zone File Directives</A
|
||||
></H2
|
||||
><P
|
||||
@@ -10577,7 +10631,7 @@ CLASS="sect3"
|
||||
><H3
|
||||
CLASS="sect3"
|
||||
><A
|
||||
NAME="AEN3972"
|
||||
NAME="AEN3990"
|
||||
>6.3.5.1. The <B
|
||||
CLASS="command"
|
||||
>$ORIGIN</B
|
||||
@@ -10647,7 +10701,7 @@ CLASS="sect3"
|
||||
><H3
|
||||
CLASS="sect3"
|
||||
><A
|
||||
NAME="AEN3992"
|
||||
NAME="AEN4010"
|
||||
>6.3.5.2. The <B
|
||||
CLASS="command"
|
||||
>$INCLUDE</B
|
||||
@@ -10729,7 +10783,7 @@ CLASS="sect3"
|
||||
><H3
|
||||
CLASS="sect3"
|
||||
><A
|
||||
NAME="AEN4012"
|
||||
NAME="AEN4030"
|
||||
>6.3.5.3. The <B
|
||||
CLASS="command"
|
||||
>$TTL</B
|
||||
@@ -10769,7 +10823,7 @@ CLASS="sect2"
|
||||
><H2
|
||||
CLASS="sect2"
|
||||
><A
|
||||
NAME="AEN4023"
|
||||
NAME="AEN4041"
|
||||
>6.3.6. <SPAN
|
||||
CLASS="acronym"
|
||||
>BIND</SPAN
|
||||
@@ -10848,7 +10902,7 @@ CLASS="literal"
|
||||
><DIV
|
||||
CLASS="informaltable"
|
||||
><A
|
||||
NAME="AEN4043"
|
||||
NAME="AEN4061"
|
||||
></A
|
||||
><P
|
||||
></P
|
||||
|
||||
@@ -86,7 +86,7 @@ HREF="Bv9ARM.ch07.html#Access_Control_Lists"
|
||||
></DT
|
||||
><DT
|
||||
>7.2. <A
|
||||
HREF="Bv9ARM.ch07.html#AEN4115"
|
||||
HREF="Bv9ARM.ch07.html#AEN4133"
|
||||
><B
|
||||
CLASS="command"
|
||||
>chroot</B
|
||||
@@ -188,7 +188,7 @@ CLASS="sect1"
|
||||
><H1
|
||||
CLASS="sect1"
|
||||
><A
|
||||
NAME="AEN4115"
|
||||
NAME="AEN4133"
|
||||
>7.2. <B
|
||||
CLASS="command"
|
||||
>chroot</B
|
||||
@@ -267,7 +267,7 @@ CLASS="sect2"
|
||||
><H2
|
||||
CLASS="sect2"
|
||||
><A
|
||||
NAME="AEN4138"
|
||||
NAME="AEN4156"
|
||||
>7.2.1. The <B
|
||||
CLASS="command"
|
||||
>chroot</B
|
||||
@@ -340,7 +340,7 @@ CLASS="sect2"
|
||||
><H2
|
||||
CLASS="sect2"
|
||||
><A
|
||||
NAME="AEN4156"
|
||||
NAME="AEN4174"
|
||||
>7.2.2. Using the <B
|
||||
CLASS="command"
|
||||
>setuid</B
|
||||
|
||||
@@ -78,17 +78,17 @@ CLASS="TOC"
|
||||
></DT
|
||||
><DT
|
||||
>8.1. <A
|
||||
HREF="Bv9ARM.ch08.html#AEN4177"
|
||||
HREF="Bv9ARM.ch08.html#AEN4195"
|
||||
>Common Problems</A
|
||||
></DT
|
||||
><DT
|
||||
>8.2. <A
|
||||
HREF="Bv9ARM.ch08.html#AEN4182"
|
||||
HREF="Bv9ARM.ch08.html#AEN4200"
|
||||
>Incrementing and Changing the Serial Number</A
|
||||
></DT
|
||||
><DT
|
||||
>8.3. <A
|
||||
HREF="Bv9ARM.ch08.html#AEN4187"
|
||||
HREF="Bv9ARM.ch08.html#AEN4205"
|
||||
>Where Can I Get Help?</A
|
||||
></DT
|
||||
></DL
|
||||
@@ -98,7 +98,7 @@ CLASS="sect1"
|
||||
><H1
|
||||
CLASS="sect1"
|
||||
><A
|
||||
NAME="AEN4177"
|
||||
NAME="AEN4195"
|
||||
>8.1. Common Problems</A
|
||||
></H1
|
||||
><DIV
|
||||
@@ -106,7 +106,7 @@ CLASS="sect2"
|
||||
><H2
|
||||
CLASS="sect2"
|
||||
><A
|
||||
NAME="AEN4179"
|
||||
NAME="AEN4197"
|
||||
>8.1.1. It's not working; how can I figure out what's wrong?</A
|
||||
></H2
|
||||
><P
|
||||
@@ -122,7 +122,7 @@ CLASS="sect1"
|
||||
><H1
|
||||
CLASS="sect1"
|
||||
><A
|
||||
NAME="AEN4182"
|
||||
NAME="AEN4200"
|
||||
>8.2. Incrementing and Changing the Serial Number</A
|
||||
></H1
|
||||
><P
|
||||
@@ -151,7 +151,7 @@ CLASS="sect1"
|
||||
><H1
|
||||
CLASS="sect1"
|
||||
><A
|
||||
NAME="AEN4187"
|
||||
NAME="AEN4205"
|
||||
>8.3. Where Can I Get Help?</A
|
||||
></H1
|
||||
><P
|
||||
|
||||
+60
-60
@@ -72,7 +72,7 @@ CLASS="TOC"
|
||||
></DT
|
||||
><DT
|
||||
>A.1. <A
|
||||
HREF="Bv9ARM.ch09.html#AEN4203"
|
||||
HREF="Bv9ARM.ch09.html#AEN4221"
|
||||
>Acknowledgements</A
|
||||
></DT
|
||||
><DT
|
||||
@@ -85,7 +85,7 @@ CLASS="acronym"
|
||||
></DT
|
||||
><DT
|
||||
>A.3. <A
|
||||
HREF="Bv9ARM.ch09.html#AEN4244"
|
||||
HREF="Bv9ARM.ch09.html#AEN4262"
|
||||
>General <SPAN
|
||||
CLASS="acronym"
|
||||
>DNS</SPAN
|
||||
@@ -103,7 +103,7 @@ CLASS="sect1"
|
||||
><H1
|
||||
CLASS="sect1"
|
||||
><A
|
||||
NAME="AEN4203"
|
||||
NAME="AEN4221"
|
||||
>A.1. Acknowledgements</A
|
||||
></H1
|
||||
><DIV
|
||||
@@ -111,7 +111,7 @@ CLASS="sect2"
|
||||
><H2
|
||||
CLASS="sect2"
|
||||
><A
|
||||
NAME="AEN4205"
|
||||
NAME="AEN4223"
|
||||
>A.1.1. A Brief History of the <SPAN
|
||||
CLASS="acronym"
|
||||
>DNS</SPAN
|
||||
@@ -246,7 +246,7 @@ CLASS="sect3"
|
||||
><H3
|
||||
CLASS="sect3"
|
||||
><A
|
||||
NAME="AEN4235"
|
||||
NAME="AEN4253"
|
||||
>A.2.1.1. HS = hesiod</A
|
||||
></H3
|
||||
><P
|
||||
@@ -267,7 +267,7 @@ CLASS="sect3"
|
||||
><H3
|
||||
CLASS="sect3"
|
||||
><A
|
||||
NAME="AEN4240"
|
||||
NAME="AEN4258"
|
||||
>A.2.1.2. CH = chaos</A
|
||||
></H3
|
||||
><P
|
||||
@@ -285,7 +285,7 @@ CLASS="sect1"
|
||||
><H1
|
||||
CLASS="sect1"
|
||||
><A
|
||||
NAME="AEN4244"
|
||||
NAME="AEN4262"
|
||||
>A.3. General <SPAN
|
||||
CLASS="acronym"
|
||||
>DNS</SPAN
|
||||
@@ -324,7 +324,7 @@ Unicast address scheme. For more information, see RFC 2374.</P
|
||||
><DIV
|
||||
CLASS="informaltable"
|
||||
><A
|
||||
NAME="AEN4255"
|
||||
NAME="AEN4273"
|
||||
></A
|
||||
><P
|
||||
></P
|
||||
@@ -543,7 +543,7 @@ VALIGN="MIDDLE"
|
||||
<DIV
|
||||
CLASS="informaltable"
|
||||
><A
|
||||
NAME="AEN4324"
|
||||
NAME="AEN4342"
|
||||
></A
|
||||
><P
|
||||
></P
|
||||
@@ -726,7 +726,7 @@ unicast address consists of:</P
|
||||
><DIV
|
||||
CLASS="informaltable"
|
||||
><A
|
||||
NAME="AEN4379"
|
||||
NAME="AEN4397"
|
||||
></A
|
||||
><P
|
||||
></P
|
||||
@@ -886,19 +886,19 @@ TARGET="_top"
|
||||
</P
|
||||
><H3
|
||||
><A
|
||||
NAME="AEN4423"
|
||||
NAME="AEN4441"
|
||||
>Bibliography</A
|
||||
></H3
|
||||
><H1
|
||||
CLASS="bibliodiv"
|
||||
><A
|
||||
NAME="AEN4424"
|
||||
NAME="AEN4442"
|
||||
>Standards</A
|
||||
></H1
|
||||
><DIV
|
||||
CLASS="biblioentry"
|
||||
><A
|
||||
NAME="AEN4426"
|
||||
NAME="AEN4444"
|
||||
></A
|
||||
><P
|
||||
>[RFC974] <SPAN
|
||||
@@ -915,7 +915,7 @@ STYLE="margin-left=0.5in"
|
||||
><DIV
|
||||
CLASS="biblioentry"
|
||||
><A
|
||||
NAME="AEN4433"
|
||||
NAME="AEN4451"
|
||||
></A
|
||||
><P
|
||||
>[RFC1034] <SPAN
|
||||
@@ -932,7 +932,7 @@ STYLE="margin-left=0.5in"
|
||||
><DIV
|
||||
CLASS="biblioentry"
|
||||
><A
|
||||
NAME="AEN4440"
|
||||
NAME="AEN4458"
|
||||
></A
|
||||
><P
|
||||
>[RFC1035] <SPAN
|
||||
@@ -956,7 +956,7 @@ NAME="proposed_standards"
|
||||
><DIV
|
||||
CLASS="biblioentry"
|
||||
><A
|
||||
NAME="AEN4449"
|
||||
NAME="AEN4467"
|
||||
></A
|
||||
><P
|
||||
>[RFC2181] <SPAN
|
||||
@@ -976,7 +976,7 @@ STYLE="margin-left=0.5in"
|
||||
><DIV
|
||||
CLASS="biblioentry"
|
||||
><A
|
||||
NAME="AEN4457"
|
||||
NAME="AEN4475"
|
||||
></A
|
||||
><P
|
||||
>[RFC2308] <SPAN
|
||||
@@ -996,7 +996,7 @@ STYLE="margin-left=0.5in"
|
||||
><DIV
|
||||
CLASS="biblioentry"
|
||||
><A
|
||||
NAME="AEN4465"
|
||||
NAME="AEN4483"
|
||||
></A
|
||||
><P
|
||||
>[RFC1995] <SPAN
|
||||
@@ -1016,7 +1016,7 @@ STYLE="margin-left=0.5in"
|
||||
><DIV
|
||||
CLASS="biblioentry"
|
||||
><A
|
||||
NAME="AEN4473"
|
||||
NAME="AEN4491"
|
||||
></A
|
||||
><P
|
||||
>[RFC1996] <SPAN
|
||||
@@ -1033,7 +1033,7 @@ STYLE="margin-left=0.5in"
|
||||
><DIV
|
||||
CLASS="biblioentry"
|
||||
><A
|
||||
NAME="AEN4480"
|
||||
NAME="AEN4498"
|
||||
></A
|
||||
><P
|
||||
>[RFC2136] <SPAN
|
||||
@@ -1059,7 +1059,7 @@ STYLE="margin-left=0.5in"
|
||||
><DIV
|
||||
CLASS="biblioentry"
|
||||
><A
|
||||
NAME="AEN4497"
|
||||
NAME="AEN4515"
|
||||
></A
|
||||
><P
|
||||
>[RFC2845] <SPAN
|
||||
@@ -1088,13 +1088,13 @@ STYLE="margin-left=0.5in"
|
||||
><H1
|
||||
CLASS="bibliodiv"
|
||||
><A
|
||||
NAME="AEN4516"
|
||||
NAME="AEN4534"
|
||||
>Proposed Standards Still Under Development</A
|
||||
></H1
|
||||
><DIV
|
||||
CLASS="biblioentry"
|
||||
><A
|
||||
NAME="AEN4521"
|
||||
NAME="AEN4539"
|
||||
></A
|
||||
><P
|
||||
>[RFC1886] <SPAN
|
||||
@@ -1117,7 +1117,7 @@ STYLE="margin-left=0.5in"
|
||||
><DIV
|
||||
CLASS="biblioentry"
|
||||
><A
|
||||
NAME="AEN4533"
|
||||
NAME="AEN4551"
|
||||
></A
|
||||
><P
|
||||
>[RFC2065] <SPAN
|
||||
@@ -1137,7 +1137,7 @@ STYLE="margin-left=0.5in"
|
||||
><DIV
|
||||
CLASS="biblioentry"
|
||||
><A
|
||||
NAME="AEN4545"
|
||||
NAME="AEN4563"
|
||||
></A
|
||||
><P
|
||||
>[RFC2137] <SPAN
|
||||
@@ -1154,7 +1154,7 @@ STYLE="margin-left=0.5in"
|
||||
><H1
|
||||
CLASS="bibliodiv"
|
||||
><A
|
||||
NAME="AEN4553"
|
||||
NAME="AEN4571"
|
||||
>Other Important RFCs About <SPAN
|
||||
CLASS="acronym"
|
||||
>DNS</SPAN
|
||||
@@ -1163,7 +1163,7 @@ CLASS="acronym"
|
||||
><DIV
|
||||
CLASS="biblioentry"
|
||||
><A
|
||||
NAME="AEN4556"
|
||||
NAME="AEN4574"
|
||||
></A
|
||||
><P
|
||||
>[RFC1535] <SPAN
|
||||
@@ -1183,7 +1183,7 @@ STYLE="margin-left=0.5in"
|
||||
><DIV
|
||||
CLASS="biblioentry"
|
||||
><A
|
||||
NAME="AEN4564"
|
||||
NAME="AEN4582"
|
||||
></A
|
||||
><P
|
||||
>[RFC1536] <SPAN
|
||||
@@ -1215,7 +1215,7 @@ STYLE="margin-left=0.5in"
|
||||
><DIV
|
||||
CLASS="biblioentry"
|
||||
><A
|
||||
NAME="AEN4585"
|
||||
NAME="AEN4603"
|
||||
></A
|
||||
><P
|
||||
>[RFC1982] <SPAN
|
||||
@@ -1235,13 +1235,13 @@ STYLE="margin-left=0.5in"
|
||||
><H1
|
||||
CLASS="bibliodiv"
|
||||
><A
|
||||
NAME="AEN4596"
|
||||
NAME="AEN4614"
|
||||
>Resource Record Types</A
|
||||
></H1
|
||||
><DIV
|
||||
CLASS="biblioentry"
|
||||
><A
|
||||
NAME="AEN4598"
|
||||
NAME="AEN4616"
|
||||
></A
|
||||
><P
|
||||
>[RFC1183] <SPAN
|
||||
@@ -1270,7 +1270,7 @@ STYLE="margin-left=0.5in"
|
||||
><DIV
|
||||
CLASS="biblioentry"
|
||||
><A
|
||||
NAME="AEN4616"
|
||||
NAME="AEN4634"
|
||||
></A
|
||||
><P
|
||||
>[RFC1706] <SPAN
|
||||
@@ -1293,7 +1293,7 @@ STYLE="margin-left=0.5in"
|
||||
><DIV
|
||||
CLASS="biblioentry"
|
||||
><A
|
||||
NAME="AEN4628"
|
||||
NAME="AEN4646"
|
||||
></A
|
||||
><P
|
||||
>[RFC2168] <SPAN
|
||||
@@ -1314,7 +1314,7 @@ STYLE="margin-left=0.5in"
|
||||
><DIV
|
||||
CLASS="biblioentry"
|
||||
><A
|
||||
NAME="AEN4639"
|
||||
NAME="AEN4657"
|
||||
></A
|
||||
><P
|
||||
>[RFC1876] <SPAN
|
||||
@@ -1341,7 +1341,7 @@ STYLE="margin-left=0.5in"
|
||||
><DIV
|
||||
CLASS="biblioentry"
|
||||
><A
|
||||
NAME="AEN4656"
|
||||
NAME="AEN4674"
|
||||
></A
|
||||
><P
|
||||
>[RFC2052] <SPAN
|
||||
@@ -1365,7 +1365,7 @@ STYLE="margin-left=0.5in"
|
||||
><DIV
|
||||
CLASS="biblioentry"
|
||||
><A
|
||||
NAME="AEN4668"
|
||||
NAME="AEN4686"
|
||||
></A
|
||||
><P
|
||||
>[RFC2163] <SPAN
|
||||
@@ -1386,7 +1386,7 @@ STYLE="margin-left=0.5in"
|
||||
><DIV
|
||||
CLASS="biblioentry"
|
||||
><A
|
||||
NAME="AEN4676"
|
||||
NAME="AEN4694"
|
||||
></A
|
||||
><P
|
||||
>[RFC2230] <SPAN
|
||||
@@ -1406,7 +1406,7 @@ STYLE="margin-left=0.5in"
|
||||
><H1
|
||||
CLASS="bibliodiv"
|
||||
><A
|
||||
NAME="AEN4684"
|
||||
NAME="AEN4702"
|
||||
><SPAN
|
||||
CLASS="acronym"
|
||||
>DNS</SPAN
|
||||
@@ -1415,7 +1415,7 @@ CLASS="acronym"
|
||||
><DIV
|
||||
CLASS="biblioentry"
|
||||
><A
|
||||
NAME="AEN4687"
|
||||
NAME="AEN4705"
|
||||
></A
|
||||
><P
|
||||
>[RFC1101] <SPAN
|
||||
@@ -1435,7 +1435,7 @@ STYLE="margin-left=0.5in"
|
||||
><DIV
|
||||
CLASS="biblioentry"
|
||||
><A
|
||||
NAME="AEN4695"
|
||||
NAME="AEN4713"
|
||||
></A
|
||||
><P
|
||||
>[RFC1123] <SPAN
|
||||
@@ -1452,7 +1452,7 @@ STYLE="margin-left=0.5in"
|
||||
><DIV
|
||||
CLASS="biblioentry"
|
||||
><A
|
||||
NAME="AEN4702"
|
||||
NAME="AEN4720"
|
||||
></A
|
||||
><P
|
||||
>[RFC1591] <SPAN
|
||||
@@ -1469,7 +1469,7 @@ STYLE="margin-left=0.5in"
|
||||
><DIV
|
||||
CLASS="biblioentry"
|
||||
><A
|
||||
NAME="AEN4709"
|
||||
NAME="AEN4727"
|
||||
></A
|
||||
><P
|
||||
>[RFC2317] <SPAN
|
||||
@@ -1492,7 +1492,7 @@ STYLE="margin-left=0.5in"
|
||||
><H1
|
||||
CLASS="bibliodiv"
|
||||
><A
|
||||
NAME="AEN4723"
|
||||
NAME="AEN4741"
|
||||
><SPAN
|
||||
CLASS="acronym"
|
||||
>DNS</SPAN
|
||||
@@ -1501,7 +1501,7 @@ CLASS="acronym"
|
||||
><DIV
|
||||
CLASS="biblioentry"
|
||||
><A
|
||||
NAME="AEN4726"
|
||||
NAME="AEN4744"
|
||||
></A
|
||||
><P
|
||||
>[RFC1537] <SPAN
|
||||
@@ -1521,7 +1521,7 @@ STYLE="margin-left=0.5in"
|
||||
><DIV
|
||||
CLASS="biblioentry"
|
||||
><A
|
||||
NAME="AEN4734"
|
||||
NAME="AEN4752"
|
||||
></A
|
||||
><P
|
||||
>[RFC1912] <SPAN
|
||||
@@ -1541,7 +1541,7 @@ STYLE="margin-left=0.5in"
|
||||
><DIV
|
||||
CLASS="biblioentry"
|
||||
><A
|
||||
NAME="AEN4742"
|
||||
NAME="AEN4760"
|
||||
></A
|
||||
><P
|
||||
>[RFC1912] <SPAN
|
||||
@@ -1561,7 +1561,7 @@ STYLE="margin-left=0.5in"
|
||||
><DIV
|
||||
CLASS="biblioentry"
|
||||
><A
|
||||
NAME="AEN4750"
|
||||
NAME="AEN4768"
|
||||
></A
|
||||
><P
|
||||
>[RFC2010] <SPAN
|
||||
@@ -1581,7 +1581,7 @@ STYLE="margin-left=0.5in"
|
||||
><DIV
|
||||
CLASS="biblioentry"
|
||||
><A
|
||||
NAME="AEN4761"
|
||||
NAME="AEN4779"
|
||||
></A
|
||||
><P
|
||||
>[RFC2219] <SPAN
|
||||
@@ -1604,7 +1604,7 @@ STYLE="margin-left=0.5in"
|
||||
><H1
|
||||
CLASS="bibliodiv"
|
||||
><A
|
||||
NAME="AEN4773"
|
||||
NAME="AEN4791"
|
||||
>Other <SPAN
|
||||
CLASS="acronym"
|
||||
>DNS</SPAN
|
||||
@@ -1613,7 +1613,7 @@ CLASS="acronym"
|
||||
><DIV
|
||||
CLASS="biblioentry"
|
||||
><A
|
||||
NAME="AEN4779"
|
||||
NAME="AEN4797"
|
||||
></A
|
||||
><P
|
||||
>[RFC1464] <SPAN
|
||||
@@ -1630,7 +1630,7 @@ STYLE="margin-left=0.5in"
|
||||
><DIV
|
||||
CLASS="biblioentry"
|
||||
><A
|
||||
NAME="AEN4786"
|
||||
NAME="AEN4804"
|
||||
></A
|
||||
><P
|
||||
>[RFC1713] <SPAN
|
||||
@@ -1650,7 +1650,7 @@ STYLE="margin-left=0.5in"
|
||||
><DIV
|
||||
CLASS="biblioentry"
|
||||
><A
|
||||
NAME="AEN4794"
|
||||
NAME="AEN4812"
|
||||
></A
|
||||
><P
|
||||
>[RFC1794] <SPAN
|
||||
@@ -1670,7 +1670,7 @@ STYLE="margin-left=0.5in"
|
||||
><DIV
|
||||
CLASS="biblioentry"
|
||||
><A
|
||||
NAME="AEN4802"
|
||||
NAME="AEN4820"
|
||||
></A
|
||||
><P
|
||||
>[RFC2240] <SPAN
|
||||
@@ -1687,7 +1687,7 @@ STYLE="margin-left=0.5in"
|
||||
><DIV
|
||||
CLASS="biblioentry"
|
||||
><A
|
||||
NAME="AEN4809"
|
||||
NAME="AEN4827"
|
||||
></A
|
||||
><P
|
||||
>[RFC2345] <SPAN
|
||||
@@ -1710,7 +1710,7 @@ STYLE="margin-left=0.5in"
|
||||
><DIV
|
||||
CLASS="biblioentry"
|
||||
><A
|
||||
NAME="AEN4823"
|
||||
NAME="AEN4841"
|
||||
></A
|
||||
><P
|
||||
>[RFC2352] <SPAN
|
||||
@@ -1727,13 +1727,13 @@ STYLE="margin-left=0.5in"
|
||||
><H1
|
||||
CLASS="bibliodiv"
|
||||
><A
|
||||
NAME="AEN4830"
|
||||
NAME="AEN4848"
|
||||
>Obsolete and Unimplemented Experimental RRs</A
|
||||
></H1
|
||||
><DIV
|
||||
CLASS="biblioentry"
|
||||
><A
|
||||
NAME="AEN4832"
|
||||
NAME="AEN4850"
|
||||
></A
|
||||
><P
|
||||
>[RFC1712] <SPAN
|
||||
@@ -1784,7 +1784,7 @@ CLASS="sect2"
|
||||
><H2
|
||||
CLASS="sect2"
|
||||
><A
|
||||
NAME="AEN4853"
|
||||
NAME="AEN4871"
|
||||
>A.4.3. Other Documents About <SPAN
|
||||
CLASS="acronym"
|
||||
>BIND</SPAN
|
||||
@@ -1794,13 +1794,13 @@ CLASS="acronym"
|
||||
></P
|
||||
><H3
|
||||
><A
|
||||
NAME="AEN4857"
|
||||
NAME="AEN4875"
|
||||
>Bibliography</A
|
||||
></H3
|
||||
><DIV
|
||||
CLASS="biblioentry"
|
||||
><A
|
||||
NAME="AEN4858"
|
||||
NAME="AEN4876"
|
||||
></A
|
||||
><P
|
||||
><SPAN
|
||||
|
||||
+22
-22
@@ -518,7 +518,7 @@ CLASS="command"
|
||||
></DT
|
||||
><DT
|
||||
>6.2.14. <A
|
||||
HREF="Bv9ARM.ch06.html#AEN2075"
|
||||
HREF="Bv9ARM.ch06.html#AEN2079"
|
||||
><B
|
||||
CLASS="command"
|
||||
>options</B
|
||||
@@ -542,7 +542,7 @@ CLASS="command"
|
||||
></DT
|
||||
><DT
|
||||
>6.2.17. <A
|
||||
HREF="Bv9ARM.ch06.html#AEN2972"
|
||||
HREF="Bv9ARM.ch06.html#AEN2990"
|
||||
><B
|
||||
CLASS="command"
|
||||
>trusted-keys</B
|
||||
@@ -550,7 +550,7 @@ CLASS="command"
|
||||
></DT
|
||||
><DT
|
||||
>6.2.18. <A
|
||||
HREF="Bv9ARM.ch06.html#AEN2988"
|
||||
HREF="Bv9ARM.ch06.html#AEN3006"
|
||||
><B
|
||||
CLASS="command"
|
||||
>trusted-keys</B
|
||||
@@ -559,7 +559,7 @@ and Usage</A
|
||||
></DT
|
||||
><DT
|
||||
>6.2.19. <A
|
||||
HREF="Bv9ARM.ch06.html#AEN2996"
|
||||
HREF="Bv9ARM.ch06.html#AEN3014"
|
||||
><B
|
||||
CLASS="command"
|
||||
>view</B
|
||||
@@ -567,7 +567,7 @@ CLASS="command"
|
||||
></DT
|
||||
><DT
|
||||
>6.2.20. <A
|
||||
HREF="Bv9ARM.ch06.html#AEN3012"
|
||||
HREF="Bv9ARM.ch06.html#AEN3030"
|
||||
><B
|
||||
CLASS="command"
|
||||
>view</B
|
||||
@@ -584,7 +584,7 @@ Statement Grammar</A
|
||||
></DT
|
||||
><DT
|
||||
>6.2.22. <A
|
||||
HREF="Bv9ARM.ch06.html#AEN3163"
|
||||
HREF="Bv9ARM.ch06.html#AEN3181"
|
||||
><B
|
||||
CLASS="command"
|
||||
>zone</B
|
||||
@@ -594,7 +594,7 @@ CLASS="command"
|
||||
></DD
|
||||
><DT
|
||||
>6.3. <A
|
||||
HREF="Bv9ARM.ch06.html#AEN3497"
|
||||
HREF="Bv9ARM.ch06.html#AEN3515"
|
||||
>Zone File</A
|
||||
></DT
|
||||
><DD
|
||||
@@ -606,7 +606,7 @@ HREF="Bv9ARM.ch06.html#types_of_resource_records_and_when_to_use_them"
|
||||
></DT
|
||||
><DT
|
||||
>6.3.2. <A
|
||||
HREF="Bv9ARM.ch06.html#AEN3817"
|
||||
HREF="Bv9ARM.ch06.html#AEN3835"
|
||||
>Discussion of MX Records</A
|
||||
></DT
|
||||
><DT
|
||||
@@ -616,17 +616,17 @@ HREF="Bv9ARM.ch06.html#Setting_TTLs"
|
||||
></DT
|
||||
><DT
|
||||
>6.3.4. <A
|
||||
HREF="Bv9ARM.ch06.html#AEN3938"
|
||||
HREF="Bv9ARM.ch06.html#AEN3956"
|
||||
>Inverse Mapping in IPv4</A
|
||||
></DT
|
||||
><DT
|
||||
>6.3.5. <A
|
||||
HREF="Bv9ARM.ch06.html#AEN3965"
|
||||
HREF="Bv9ARM.ch06.html#AEN3983"
|
||||
>Other Zone File Directives</A
|
||||
></DT
|
||||
><DT
|
||||
>6.3.6. <A
|
||||
HREF="Bv9ARM.ch06.html#AEN4023"
|
||||
HREF="Bv9ARM.ch06.html#AEN4041"
|
||||
><SPAN
|
||||
CLASS="acronym"
|
||||
>BIND</SPAN
|
||||
@@ -656,7 +656,7 @@ HREF="Bv9ARM.ch07.html#Access_Control_Lists"
|
||||
></DT
|
||||
><DT
|
||||
>7.2. <A
|
||||
HREF="Bv9ARM.ch07.html#AEN4115"
|
||||
HREF="Bv9ARM.ch07.html#AEN4133"
|
||||
><B
|
||||
CLASS="command"
|
||||
>chroot</B
|
||||
@@ -670,7 +670,7 @@ UNIX servers)</A
|
||||
><DL
|
||||
><DT
|
||||
>7.2.1. <A
|
||||
HREF="Bv9ARM.ch07.html#AEN4138"
|
||||
HREF="Bv9ARM.ch07.html#AEN4156"
|
||||
>The <B
|
||||
CLASS="command"
|
||||
>chroot</B
|
||||
@@ -678,7 +678,7 @@ CLASS="command"
|
||||
></DT
|
||||
><DT
|
||||
>7.2.2. <A
|
||||
HREF="Bv9ARM.ch07.html#AEN4156"
|
||||
HREF="Bv9ARM.ch07.html#AEN4174"
|
||||
>Using the <B
|
||||
CLASS="command"
|
||||
>setuid</B
|
||||
@@ -702,26 +702,26 @@ HREF="Bv9ARM.ch08.html"
|
||||
><DL
|
||||
><DT
|
||||
>8.1. <A
|
||||
HREF="Bv9ARM.ch08.html#AEN4177"
|
||||
HREF="Bv9ARM.ch08.html#AEN4195"
|
||||
>Common Problems</A
|
||||
></DT
|
||||
><DD
|
||||
><DL
|
||||
><DT
|
||||
>8.1.1. <A
|
||||
HREF="Bv9ARM.ch08.html#AEN4179"
|
||||
HREF="Bv9ARM.ch08.html#AEN4197"
|
||||
>It's not working; how can I figure out what's wrong?</A
|
||||
></DT
|
||||
></DL
|
||||
></DD
|
||||
><DT
|
||||
>8.2. <A
|
||||
HREF="Bv9ARM.ch08.html#AEN4182"
|
||||
HREF="Bv9ARM.ch08.html#AEN4200"
|
||||
>Incrementing and Changing the Serial Number</A
|
||||
></DT
|
||||
><DT
|
||||
>8.3. <A
|
||||
HREF="Bv9ARM.ch08.html#AEN4187"
|
||||
HREF="Bv9ARM.ch08.html#AEN4205"
|
||||
>Where Can I Get Help?</A
|
||||
></DT
|
||||
></DL
|
||||
@@ -735,14 +735,14 @@ HREF="Bv9ARM.ch09.html"
|
||||
><DL
|
||||
><DT
|
||||
>A.1. <A
|
||||
HREF="Bv9ARM.ch09.html#AEN4203"
|
||||
HREF="Bv9ARM.ch09.html#AEN4221"
|
||||
>Acknowledgements</A
|
||||
></DT
|
||||
><DD
|
||||
><DL
|
||||
><DT
|
||||
>A.1.1. <A
|
||||
HREF="Bv9ARM.ch09.html#AEN4205"
|
||||
HREF="Bv9ARM.ch09.html#AEN4223"
|
||||
>A Brief History of the <SPAN
|
||||
CLASS="acronym"
|
||||
>DNS</SPAN
|
||||
@@ -772,7 +772,7 @@ HREF="Bv9ARM.ch09.html#classes_of_resource_records"
|
||||
></DD
|
||||
><DT
|
||||
>A.3. <A
|
||||
HREF="Bv9ARM.ch09.html#AEN4244"
|
||||
HREF="Bv9ARM.ch09.html#AEN4262"
|
||||
>General <SPAN
|
||||
CLASS="acronym"
|
||||
>DNS</SPAN
|
||||
@@ -806,7 +806,7 @@ HREF="Bv9ARM.ch09.html#internet_drafts"
|
||||
></DT
|
||||
><DT
|
||||
>A.4.3. <A
|
||||
HREF="Bv9ARM.ch09.html#AEN4853"
|
||||
HREF="Bv9ARM.ch09.html#AEN4871"
|
||||
>Other Documents About <SPAN
|
||||
CLASS="acronym"
|
||||
>BIND</SPAN
|
||||
|
||||
+19
-4
@@ -60,6 +60,7 @@ query-source as in BIND 8.
|
||||
|
||||
Multiple classes have to be put into explicit views for each class.
|
||||
|
||||
|
||||
2. Zone File Compatibility
|
||||
|
||||
2.1. Strict RFC1035 Interpretation of TTLs in Zone Files
|
||||
@@ -117,6 +118,7 @@ line.
|
||||
$GENERATE: The "$$" construct for getting a literal $ into a domain
|
||||
name is deprecated. Use \$ instead.
|
||||
|
||||
|
||||
3. Interoperability Impact of New Protocol Features
|
||||
|
||||
3.1. EDNS0
|
||||
@@ -184,10 +186,23 @@ be upgraded.
|
||||
|
||||
5. Server Administration Tools
|
||||
|
||||
5.1 Ndc Replaced by Rndc
|
||||
|
||||
The "ndc" program has been replaced by "rndc", which is capable of
|
||||
remote operation. Unlike ndc, rndc requires a configuration file;
|
||||
see the man pages in bin/rndc/rndc.1 and bin/rndc/rndc.conf.5 for
|
||||
details. Some of the ndc commands are still unimplemented in rndc.
|
||||
remote operation. Unlike ndc, rndc requires a configuration file.
|
||||
The easiest way to generate a configuration file is to run
|
||||
"rndc-confgen -a"; see the man pages for rndc(8), rndc-confgen(8),
|
||||
and rndc.conf(5) for details.
|
||||
|
||||
5.2. Nsupdate Differences
|
||||
|
||||
The BIND 8 implementation of nsupdate had an undocumented feature
|
||||
where an update request would be broken down into multiple requests
|
||||
based upon the discovered zones that contained the records. This
|
||||
behaviour has not been implemented in BIND 9. Each update request
|
||||
must pertain to a single zone, but it is still possible to do multiple
|
||||
updates in a single invocation of nsupdate by terminating each update
|
||||
with an empty line or a "send" command.
|
||||
|
||||
|
||||
6. No Information Leakage between Zones
|
||||
@@ -228,4 +243,4 @@ necessary, the umask should be set explicitly in the script used to
|
||||
start the named process.
|
||||
|
||||
|
||||
$Id: migration,v 1.37 2001/06/28 23:28:34 gson Exp $
|
||||
$Id: migration,v 1.37.2.1 2001/09/21 17:49:58 gson Exp $
|
||||
|
||||
@@ -1,9 +1,8 @@
|
||||
#ifndef LINT
|
||||
static const char rcsid[] = "$Id: gettimeofday.c,v 1.1 2001/03/29 06:30:32 marka Exp $";
|
||||
static const char rcsid[] = "$Id: gettimeofday.c,v 1.1.2.1 2001/10/08 18:10:57 gson Exp $";
|
||||
#endif
|
||||
|
||||
#include "port_before.h"
|
||||
#undef gettimeofday
|
||||
#include <stdio.h>
|
||||
#include <syslog.h>
|
||||
#include <sys/time.h>
|
||||
@@ -21,6 +20,7 @@ int
|
||||
isc__gettimeofday(struct timeval *tp, struct timezone *tzp) {
|
||||
int res;
|
||||
|
||||
#undef gettimeofday
|
||||
res = gettimeofday(tp, tzp);
|
||||
if (res < 0)
|
||||
return (res);
|
||||
|
||||
@@ -13,14 +13,14 @@
|
||||
# NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION
|
||||
# WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
|
||||
|
||||
# $Id: Makefile.in,v 1.1 2001/06/29 15:25:20 marka Exp $
|
||||
# $Id: Makefile.in,v 1.1.2.1 2001/10/22 17:00:49 gson Exp $
|
||||
|
||||
srcdir = @srcdir@
|
||||
VPATH = @srcdir@
|
||||
top_srcdir = @top_srcdir@
|
||||
|
||||
HEADERS= paths.h
|
||||
SHEADER= sys/bitypes.h sys/cdefs.h
|
||||
SHEADERS= sys/bitypes.h sys/cdefs.h
|
||||
|
||||
all:
|
||||
|
||||
|
||||
@@ -0,0 +1,2 @@
|
||||
#define _PATH_DEVNULL "/dev/null"
|
||||
|
||||
@@ -335,7 +335,11 @@ int setpassent(int stayopen);
|
||||
#endif
|
||||
|
||||
#define gettimeofday isc__gettimeofday
|
||||
#ifdef NEED_GETTIMEOFDAY
|
||||
int isc__gettimeofday(struct timeval *tvp, struct _TIMEZONE *tzp);
|
||||
#else
|
||||
int isc__gettimeofday(struct timeval *tp, struct timezone *tzp);
|
||||
#endif
|
||||
|
||||
int getnetgrent(const char **machinep, const char **userp,
|
||||
const char **domainp);
|
||||
|
||||
+38
-13
@@ -15,7 +15,7 @@
|
||||
* WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
|
||||
*/
|
||||
|
||||
/* $Id: cache.c,v 1.45 2001/07/02 20:44:30 gson Exp $ */
|
||||
/* $Id: cache.c,v 1.45.2.2 2001/10/23 01:31:08 marka Exp $ */
|
||||
|
||||
#include <config.h>
|
||||
|
||||
@@ -76,6 +76,14 @@ typedef enum {
|
||||
* task/event serialization, or locked from the cache object.
|
||||
*/
|
||||
struct cache_cleaner {
|
||||
isc_mutex_t lock;
|
||||
/*
|
||||
* Locks overmem_event, overmem. Note: never allocate memory
|
||||
* while holding this lock - that could lead to deadlock since
|
||||
* the lock is take by water() which is called from the memory
|
||||
* allocator.
|
||||
*/
|
||||
|
||||
dns_cache_t *cache;
|
||||
isc_task_t *task;
|
||||
unsigned int cleaning_interval; /* The cleaning-interval from
|
||||
@@ -272,6 +280,8 @@ cache_free(dns_cache_t *cache) {
|
||||
if (cache->cleaner.iterator != NULL)
|
||||
dns_dbiterator_destroy(&cache->cleaner.iterator);
|
||||
|
||||
DESTROYLOCK(&cache->cleaner.lock);
|
||||
|
||||
if (cache->filename) {
|
||||
isc_mem_free(cache->mctx, cache->filename);
|
||||
cache->filename = NULL;
|
||||
@@ -459,6 +469,15 @@ cache_cleaner_init(dns_cache_t *cache, isc_taskmgr_t *taskmgr,
|
||||
{
|
||||
isc_result_t result;
|
||||
|
||||
result = isc_mutex_init(&cleaner->lock);
|
||||
if (result != ISC_R_SUCCESS) {
|
||||
UNEXPECTED_ERROR(__FILE__, __LINE__,
|
||||
"isc_mutex_init() failed: %s",
|
||||
dns_result_totext(result));
|
||||
result = ISC_R_UNEXPECTED;
|
||||
goto fail;
|
||||
}
|
||||
|
||||
cleaner->increment = DNS_CACHE_CLEANERINCREMENT;
|
||||
cleaner->state = cleaner_s_idle;
|
||||
cleaner->cache = cache;
|
||||
@@ -536,7 +555,8 @@ cache_cleaner_init(dns_cache_t *cache, isc_taskmgr_t *taskmgr,
|
||||
isc_timer_detach(&cleaner->cleaning_timer);
|
||||
if (cleaner->task != NULL)
|
||||
isc_task_detach(&cleaner->task);
|
||||
|
||||
DESTROYLOCK(&cleaner->lock);
|
||||
fail:
|
||||
return (result);
|
||||
}
|
||||
|
||||
@@ -622,16 +642,10 @@ cleaning_timer_action(isc_task_t *task, isc_event_t *event) {
|
||||
INSIST(task == cleaner->task);
|
||||
INSIST(event->ev_type == ISC_TIMEREVENT_TICK);
|
||||
|
||||
if (cleaner->state == cleaner_s_idle) {
|
||||
if (cleaner->state == cleaner_s_idle)
|
||||
begin_cleaning(cleaner);
|
||||
|
||||
isc_event_free(&event);
|
||||
} else
|
||||
/*
|
||||
* incremental_cleaning_action() takes responsibility
|
||||
* for freeing or preserving the event.
|
||||
*/
|
||||
incremental_cleaning_action(task, event);
|
||||
isc_event_free(&event);
|
||||
}
|
||||
|
||||
/*
|
||||
@@ -641,6 +655,7 @@ cleaning_timer_action(isc_task_t *task, isc_event_t *event) {
|
||||
static void
|
||||
overmem_cleaning_action(isc_task_t *task, isc_event_t *event) {
|
||||
cache_cleaner_t *cleaner = event->ev_arg;
|
||||
isc_boolean_t want_cleaning = ISC_FALSE;
|
||||
|
||||
UNUSED(task);
|
||||
|
||||
@@ -648,9 +663,11 @@ overmem_cleaning_action(isc_task_t *task, isc_event_t *event) {
|
||||
INSIST(event->ev_type == DNS_EVENT_CACHEOVERMEM);
|
||||
INSIST(cleaner->overmem_event == NULL);
|
||||
|
||||
LOCK(&cleaner->lock);
|
||||
|
||||
if (cleaner->overmem) {
|
||||
if (cleaner->state == cleaner_s_idle)
|
||||
begin_cleaning(cleaner);
|
||||
want_cleaning = ISC_TRUE;
|
||||
} else {
|
||||
if (cleaner->state == cleaner_s_busy)
|
||||
/*
|
||||
@@ -665,6 +682,11 @@ overmem_cleaning_action(isc_task_t *task, isc_event_t *event) {
|
||||
}
|
||||
|
||||
cleaner->overmem_event = event;
|
||||
|
||||
UNLOCK(&cleaner->lock);
|
||||
|
||||
if (want_cleaning)
|
||||
begin_cleaning(cleaner);
|
||||
}
|
||||
|
||||
/*
|
||||
@@ -679,8 +701,7 @@ incremental_cleaning_action(isc_task_t *task, isc_event_t *event) {
|
||||
UNUSED(task);
|
||||
|
||||
INSIST(task == cleaner->task);
|
||||
INSIST(event->ev_type == DNS_EVENT_CACHECLEAN ||
|
||||
event->ev_type == ISC_TIMEREVENT_TICK);
|
||||
INSIST(event->ev_type == DNS_EVENT_CACHECLEAN);
|
||||
|
||||
if (cleaner->state == cleaner_s_done) {
|
||||
cleaner->state = cleaner_s_busy;
|
||||
@@ -831,12 +852,16 @@ water(void *arg, int mark) {
|
||||
|
||||
REQUIRE(VALID_CACHE(cache));
|
||||
|
||||
LOCK(&cache->cleaner.lock);
|
||||
|
||||
dns_db_overmem(cache->db, overmem);
|
||||
cache->cleaner.overmem = overmem;
|
||||
|
||||
if (cache->cleaner.overmem_event != NULL)
|
||||
isc_task_send(cache->cleaner.task,
|
||||
&cache->cleaner.overmem_event);
|
||||
|
||||
UNLOCK(&cache->cleaner.lock);
|
||||
}
|
||||
|
||||
void
|
||||
|
||||
@@ -15,7 +15,7 @@
|
||||
* WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
|
||||
*/
|
||||
|
||||
/* $Id: log.h,v 1.30 2001/08/27 03:36:00 marka Exp $ */
|
||||
/* $Id: log.h,v 1.30.2.1 2001/10/11 02:03:23 marka Exp $ */
|
||||
|
||||
/* Principal Authors: DCL */
|
||||
|
||||
@@ -32,7 +32,7 @@ LIBDNS_EXTERNAL_DATA extern isc_logmodule_t dns_modules[];
|
||||
#define DNS_LOGCATEGORY_NOTIFY (&dns_categories[0])
|
||||
#define DNS_LOGCATEGORY_DATABASE (&dns_categories[1])
|
||||
#define DNS_LOGCATEGORY_SECURITY (&dns_categories[2])
|
||||
#define DNS_LOGCATEGORY_CONFIG (&dns_categories[3])
|
||||
/* DNS_LOGCATEGORY_CONFIG superseded by CFG_LOGCATEGORY_CONFIG */
|
||||
#define DNS_LOGCATEGORY_DNSSEC (&dns_categories[4])
|
||||
#define DNS_LOGCATEGORY_RESOLVER (&dns_categories[5])
|
||||
#define DNS_LOGCATEGORY_XFER_IN (&dns_categories[6])
|
||||
|
||||
@@ -15,7 +15,7 @@
|
||||
* WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
|
||||
*/
|
||||
|
||||
/* $Id: result.h,v 1.81 2001/05/10 17:51:49 gson Exp $ */
|
||||
/* $Id: result.h,v 1.81.2.1 2001/09/19 21:51:42 bwelling Exp $ */
|
||||
|
||||
#ifndef DNS_RESULT_H
|
||||
#define DNS_RESULT_H 1
|
||||
@@ -114,8 +114,10 @@
|
||||
#define DNS_R_UNKNOWNPROTO (ISC_RESULTCLASS_DNS + 75)
|
||||
#define DNS_R_CLOCKSKEW (ISC_RESULTCLASS_DNS + 76)
|
||||
#define DNS_R_BADIXFR (ISC_RESULTCLASS_DNS + 77)
|
||||
/* #define DNS_R_unused (ISC_RESULTCLASS_DNS + 78) */
|
||||
#define DNS_R_NOVALIDKEY (ISC_RESULTCLASS_DNS + 79)
|
||||
|
||||
#define DNS_R_NRESULTS 78 /* Number of results */
|
||||
#define DNS_R_NRESULTS 80 /* Number of results */
|
||||
|
||||
/*
|
||||
* DNS wire format rcodes.
|
||||
|
||||
+2
-2
@@ -15,7 +15,7 @@
|
||||
* WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
|
||||
*/
|
||||
|
||||
/* $Id: journal.c,v 1.77 2001/08/06 02:10:59 marka Exp $ */
|
||||
/* $Id: journal.c,v 1.77.2.1 2001/10/15 04:57:51 marka Exp $ */
|
||||
|
||||
#include <config.h>
|
||||
|
||||
@@ -490,7 +490,7 @@ journal_file_create(isc_mem_t *mctx, const char *filename) {
|
||||
|
||||
INSIST(sizeof(journal_rawheader_t) == JOURNAL_HEADER_SIZE);
|
||||
|
||||
result = isc_stdio_open(filename, "w", &fp);
|
||||
result = isc_stdio_open(filename, "wb", &fp);
|
||||
if (result != ISC_R_SUCCESS) {
|
||||
isc_log_write(JOURNAL_COMMON_LOGARGS, ISC_LOG_ERROR,
|
||||
"%s: create: %s",
|
||||
|
||||
+2
-2
@@ -15,7 +15,7 @@
|
||||
* WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
|
||||
*/
|
||||
|
||||
/* $Id: log.c,v 1.33 2001/08/27 03:35:58 marka Exp $ */
|
||||
/* $Id: log.c,v 1.33.2.2 2001/10/11 23:07:00 gson Exp $ */
|
||||
|
||||
/* Principal Authors: DCL */
|
||||
|
||||
@@ -33,7 +33,7 @@ LIBDNS_EXTERNAL_DATA isc_logcategory_t dns_categories[] = {
|
||||
{ "notify", 0 },
|
||||
{ "database", 0 },
|
||||
{ "security", 0 },
|
||||
{ "config", 0 },
|
||||
{ "oldconfig", 0 }, /* Placeholder */
|
||||
{ "dnssec", 0 },
|
||||
{ "resolver", 0 },
|
||||
{ "xfer-in", 0 },
|
||||
|
||||
@@ -15,7 +15,7 @@
|
||||
* WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
|
||||
*/
|
||||
|
||||
/* $Id: masterdump.c,v 1.56 2001/08/29 05:52:49 marka Exp $ */
|
||||
/* $Id: masterdump.c,v 1.56.2.1 2001/10/23 02:41:55 marka Exp $ */
|
||||
|
||||
#include <config.h>
|
||||
|
||||
@@ -767,7 +767,7 @@ dump_order_compare(const void *a, const void *b) {
|
||||
|
||||
#define MAXSORT 64
|
||||
|
||||
const char *trustnames[] = {
|
||||
static const char *trustnames[] = {
|
||||
"none",
|
||||
"pending",
|
||||
"additional",
|
||||
|
||||
+6
-2
@@ -15,7 +15,7 @@
|
||||
* WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
|
||||
*/
|
||||
|
||||
/* $Id: rdata.c,v 1.147 2001/08/08 22:54:41 gson Exp $ */
|
||||
/* $Id: rdata.c,v 1.147.2.3 2001/10/03 02:07:34 marka Exp $ */
|
||||
|
||||
#include <config.h>
|
||||
#include <ctype.h>
|
||||
@@ -502,6 +502,9 @@ dns_rdata_fromwire(dns_rdata_t *rdata, dns_rdataclass_t rdclass,
|
||||
REQUIRE(DNS_RDATA_VALIDFLAGS(rdata));
|
||||
}
|
||||
|
||||
if (type == 0)
|
||||
return (DNS_R_FORMERR);
|
||||
|
||||
ss = *source;
|
||||
st = *target;
|
||||
|
||||
@@ -611,7 +614,7 @@ unknown_fromtext(dns_rdataclass_t rdclass, dns_rdatatype_t type,
|
||||
isc_buffer_t *buf = NULL;
|
||||
isc_token_t token;
|
||||
|
||||
if (dns_rdatatype_ismeta(type))
|
||||
if (type == 0 || dns_rdatatype_ismeta(type))
|
||||
return (DNS_R_METATYPE);
|
||||
|
||||
result = isc_lex_getmastertoken(lexer, &token, isc_tokentype_number,
|
||||
@@ -1053,6 +1056,7 @@ dns_rdataclass_fromtext(dns_rdataclass_t *classp, isc_textregion_t *source) {
|
||||
break;
|
||||
case 'h':
|
||||
COMPARE("hs", dns_rdataclass_hs);
|
||||
COMPARE("hesiod", dns_rdataclass_hs);
|
||||
break;
|
||||
case 'i':
|
||||
COMPARE("in", dns_rdataclass_in);
|
||||
|
||||
+47
-65
@@ -15,7 +15,7 @@
|
||||
* WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
|
||||
*/
|
||||
|
||||
/* $Id: resolver.c,v 1.218 2001/07/11 01:19:56 halley Exp $ */
|
||||
/* $Id: resolver.c,v 1.218.2.4 2001/10/12 17:49:41 gson Exp $ */
|
||||
|
||||
#include <config.h>
|
||||
|
||||
@@ -595,24 +595,6 @@ resquery_senddone(isc_task_t *task, isc_event_t *event) {
|
||||
isc_event_free(&event);
|
||||
}
|
||||
|
||||
static void
|
||||
resquery_aborted(isc_task_t *task, isc_event_t *event) {
|
||||
resquery_t *query = event->ev_arg;
|
||||
|
||||
REQUIRE(event->ev_type == DNS_EVENT_QUERYABORTED);
|
||||
|
||||
QTRACE("blackholed");
|
||||
|
||||
UNUSED(task);
|
||||
|
||||
/*
|
||||
* Treat this as a "no response" to cause the RTT estimate to go up.
|
||||
*/
|
||||
fctx_cancelquery(&query, NULL, NULL, ISC_TRUE);
|
||||
|
||||
isc_event_free(&event);
|
||||
}
|
||||
|
||||
static inline isc_result_t
|
||||
fctx_addopt(dns_message_t *message) {
|
||||
dns_rdataset_t *rdataset;
|
||||
@@ -865,11 +847,8 @@ resquery_send(resquery_t *query) {
|
||||
isc_buffer_t *buffer;
|
||||
isc_netaddr_t ipaddr;
|
||||
dns_tsigkey_t *tsigkey = NULL;
|
||||
dns_acl_t *blackhole;
|
||||
dns_peer_t *peer = NULL;
|
||||
isc_boolean_t useedns;
|
||||
isc_boolean_t bogus;
|
||||
isc_boolean_t aborted = ISC_FALSE;
|
||||
dns_compress_t cctx;
|
||||
isc_boolean_t cleanup_cctx = ISC_FALSE;
|
||||
|
||||
@@ -1083,36 +1062,6 @@ resquery_send(resquery_t *query) {
|
||||
address = &query->addrinfo->sockaddr;
|
||||
isc_buffer_usedregion(buffer, &r);
|
||||
|
||||
|
||||
blackhole = dns_dispatchmgr_getblackhole(query->dispatchmgr);
|
||||
if (blackhole != NULL) {
|
||||
int match;
|
||||
|
||||
if (dns_acl_match(&ipaddr, NULL, blackhole,
|
||||
&fctx->res->view->aclenv,
|
||||
&match, NULL) == ISC_R_SUCCESS &&
|
||||
match > 0)
|
||||
aborted = ISC_TRUE;
|
||||
}
|
||||
|
||||
if (peer != NULL &&
|
||||
dns_peer_getbogus(peer, &bogus) == ISC_R_SUCCESS &&
|
||||
bogus)
|
||||
aborted = ISC_TRUE;
|
||||
|
||||
if (aborted) {
|
||||
isc_event_t *event;
|
||||
event = isc_event_allocate(fctx->res->mctx, NULL,
|
||||
DNS_EVENT_QUERYABORTED,
|
||||
resquery_aborted, query,
|
||||
sizeof(isc_event_t));
|
||||
if (event == NULL)
|
||||
return (ISC_R_NOMEMORY);
|
||||
isc_task_send(task, &event);
|
||||
result = ISC_R_SUCCESS;
|
||||
goto cleanup_message;
|
||||
}
|
||||
|
||||
/*
|
||||
* XXXRTH Make sure we don't send to ourselves! We should probably
|
||||
* prune out these addresses when we get them from the ADB.
|
||||
@@ -1670,23 +1619,56 @@ possibly_mark(fetchctx_t *fctx, dns_adbaddrinfo_t *addr)
|
||||
isc_netaddr_t na;
|
||||
char buf[ISC_NETADDR_FORMATSIZE];
|
||||
isc_sockaddr_t *sa;
|
||||
isc_boolean_t aborted = ISC_FALSE;
|
||||
isc_boolean_t bogus;
|
||||
dns_acl_t *blackhole;
|
||||
isc_netaddr_t ipaddr;
|
||||
dns_peer_t *peer = NULL;
|
||||
dns_resolver_t *res;
|
||||
const char *msg = NULL;
|
||||
|
||||
sa = &addr->sockaddr;
|
||||
|
||||
if (sa->type.sa.sa_family != AF_INET6)
|
||||
res = fctx->res;
|
||||
isc_netaddr_fromsockaddr(&ipaddr, sa);
|
||||
blackhole = dns_dispatchmgr_getblackhole(res->dispatchmgr);
|
||||
(void) dns_peerlist_peerbyaddr(res->view->peers, &ipaddr, &peer);
|
||||
|
||||
if (blackhole != NULL) {
|
||||
int match;
|
||||
|
||||
if (dns_acl_match(&ipaddr, NULL, blackhole,
|
||||
&res->view->aclenv,
|
||||
&match, NULL) == ISC_R_SUCCESS &&
|
||||
match > 0)
|
||||
aborted = ISC_TRUE;
|
||||
}
|
||||
|
||||
if (peer != NULL &&
|
||||
dns_peer_getbogus(peer, &bogus) == ISC_R_SUCCESS &&
|
||||
bogus)
|
||||
aborted = ISC_TRUE;
|
||||
|
||||
if (aborted) {
|
||||
addr->flags |= FCTX_ADDRINFO_MARK;
|
||||
msg = "ignoring backholed / bogus server: ";
|
||||
} else if (sa->type.sa.sa_family != AF_INET6) {
|
||||
return;
|
||||
} else if (IN6_IS_ADDR_V4MAPPED(&sa->type.sin6.sin6_addr)) {
|
||||
addr->flags |= FCTX_ADDRINFO_MARK;
|
||||
msg = "ignoring IPv6 mapped IPV4 address: ";
|
||||
} else if (IN6_IS_ADDR_V4COMPAT(&sa->type.sin6.sin6_addr)) {
|
||||
addr->flags |= FCTX_ADDRINFO_MARK;
|
||||
msg = "ignoring IPv6 compatibility IPV4 address: ";
|
||||
} else
|
||||
return;
|
||||
|
||||
if (IN6_IS_ADDR_V4MAPPED(&sa->type.sin6.sin6_addr)) {
|
||||
isc_netaddr_fromsockaddr(&na, sa);
|
||||
isc_netaddr_format(&na, buf, sizeof buf);
|
||||
addr->flags |= FCTX_ADDRINFO_MARK;
|
||||
FCTXTRACE2("ignoring IPv6 mapped IPV4 address: ", buf);
|
||||
} else if (IN6_IS_ADDR_V4COMPAT(&sa->type.sin6.sin6_addr)) {
|
||||
isc_netaddr_fromsockaddr(&na, sa);
|
||||
isc_netaddr_format(&na, buf, sizeof buf);
|
||||
addr->flags |= FCTX_ADDRINFO_MARK;
|
||||
FCTXTRACE2("ignoring IPv6 compatibility IPV4 address: ", buf);
|
||||
}
|
||||
if (!isc_log_wouldlog(dns_lctx, ISC_LOG_DEBUG(3)))
|
||||
return;
|
||||
|
||||
isc_netaddr_fromsockaddr(&na, sa);
|
||||
isc_netaddr_format(&na, buf, sizeof buf);
|
||||
FCTXTRACE2(msg, buf);
|
||||
}
|
||||
|
||||
static inline dns_adbaddrinfo_t *
|
||||
@@ -3627,7 +3609,7 @@ noanswer_response(fetchctx_t *fctx, dns_name_t *oqname) {
|
||||
if (ns_name != NULL)
|
||||
ns_name->attributes &= ~DNS_NAMEATTR_CACHE;
|
||||
|
||||
if (negative_response)
|
||||
if (negative_response && oqname == NULL)
|
||||
fctx->attributes |= FCTX_ATTR_WANTNCACHE;
|
||||
|
||||
return (ISC_R_SUCCESS);
|
||||
|
||||
+4
-2
@@ -15,7 +15,7 @@
|
||||
* WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
|
||||
*/
|
||||
|
||||
/* $Id: result.c,v 1.90 2001/06/08 19:37:29 bwelling Exp $ */
|
||||
/* $Id: result.c,v 1.90.2.2 2001/09/21 23:18:45 gson Exp $ */
|
||||
|
||||
#include <config.h>
|
||||
|
||||
@@ -118,7 +118,9 @@ static const char *text[DNS_R_NRESULTS] = {
|
||||
|
||||
"unknown protocol", /* 75 DNS_R_UNKNOWNPROTO */
|
||||
"clocks are unsynchronized", /* 76 DNS_R_CLOCKSKEW */
|
||||
"IXFR failed" /* 77 DNS_R_BADIXFR */
|
||||
"IXFR failed", /* 77 DNS_R_BADIXFR */
|
||||
"<unused 78>", /* 78 unused */
|
||||
"no valid KEY" /* 79 DNS_R_NOVALIDKEY */
|
||||
};
|
||||
|
||||
static const char *rcode_text[DNS_R_NRCODERESULTS] = {
|
||||
|
||||
+6
-7
@@ -15,7 +15,7 @@
|
||||
* WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
|
||||
*/
|
||||
|
||||
/* $Id: rootns.c,v 1.20 2001/08/27 17:21:56 gson Exp $ */
|
||||
/* $Id: rootns.c,v 1.20.2.1 2001/10/03 22:30:17 gson Exp $ */
|
||||
|
||||
#include <config.h>
|
||||
|
||||
@@ -76,6 +76,9 @@ in_rootns(dns_rdataset_t *rootns, dns_name_t *name) {
|
||||
dns_rdata_t rdata = DNS_RDATA_INIT;
|
||||
dns_rdata_ns_t ns;
|
||||
|
||||
if (!dns_rdataset_isassociated(rootns))
|
||||
return (ISC_R_NOTFOUND);
|
||||
|
||||
result = dns_rdataset_first(rootns);
|
||||
while (result == ISC_R_SUCCESS) {
|
||||
dns_rdataset_current(rootns, &rdata);
|
||||
@@ -145,16 +148,12 @@ check_hints(dns_db_t *db) {
|
||||
name = dns_fixedname_name(&fixname);
|
||||
|
||||
dns_rdataset_init(&rootns);
|
||||
result = dns_db_find(db, dns_rootname, NULL, dns_rdatatype_ns, 0,
|
||||
now, NULL, name, &rootns, NULL);
|
||||
if (result != ISC_R_SUCCESS)
|
||||
goto cleanup;
|
||||
(void)dns_db_find(db, dns_rootname, NULL, dns_rdatatype_ns, 0,
|
||||
now, NULL, name, &rootns, NULL);
|
||||
result = dns_db_createiterator(db, ISC_FALSE, &dbiter);
|
||||
if (result != ISC_R_SUCCESS)
|
||||
goto cleanup;
|
||||
result = dns_dbiterator_first(dbiter);
|
||||
if (result != ISC_R_SUCCESS)
|
||||
goto cleanup;
|
||||
while (result == ISC_R_SUCCESS) {
|
||||
result = dns_dbiterator_current(dbiter, &node, name);
|
||||
if (result != ISC_R_SUCCESS)
|
||||
|
||||
@@ -19,7 +19,7 @@
|
||||
|
||||
/*
|
||||
* Principal Author: Brian Wellington
|
||||
* $Id: dst_parse.c,v 1.31 2001/05/31 00:38:07 bwelling Exp $
|
||||
* $Id: dst_parse.c,v 1.31.2.1 2001/09/15 00:37:18 gson Exp $
|
||||
*/
|
||||
|
||||
#include <config.h>
|
||||
@@ -306,8 +306,10 @@ dst__privstruct_parsefile(dst_key_t *key, const char *filename,
|
||||
|
||||
memset(&priv->elements[n], 0, sizeof(dst_private_element_t));
|
||||
tag = find_value(token.value.as_pointer, dst_key_alg(key));
|
||||
if (tag < 0 || TAG_ALG(tag) != dst_key_alg(key))
|
||||
if (tag < 0 || TAG_ALG(tag) != dst_key_alg(key)) {
|
||||
ret = DST_R_INVALIDPRIVATEKEY;
|
||||
goto fail;
|
||||
}
|
||||
priv->elements[n].tag = tag;
|
||||
|
||||
data = (unsigned char *) isc_mem_get(mctx, MAXFIELDSIZE);
|
||||
|
||||
+3
-2
@@ -16,7 +16,7 @@
|
||||
*/
|
||||
|
||||
/*
|
||||
* $Id: tkey.c,v 1.71 2001/08/08 22:54:43 gson Exp $
|
||||
* $Id: tkey.c,v 1.71.2.1 2001/10/09 23:06:57 gson Exp $
|
||||
*/
|
||||
|
||||
#include <config.h>
|
||||
@@ -643,7 +643,8 @@ dns_tkey_processquery(dns_message_t *msg, dns_tkeyctx_t *tctx,
|
||||
|
||||
if (!dns_name_equal(qname, dns_rootname)) {
|
||||
unsigned int n = dns_name_countlabels(qname);
|
||||
dns_name_getlabelsequence(qname, 0, n - 1, keyname);
|
||||
dns_name_copy(qname, keyname, NULL);
|
||||
dns_name_getlabelsequence(keyname, 0, n - 1, keyname);
|
||||
}
|
||||
else {
|
||||
static char hexdigits[16] = {
|
||||
|
||||
+17
-5
@@ -16,7 +16,7 @@
|
||||
*/
|
||||
|
||||
/*
|
||||
* $Id: tsig.c,v 1.112 2001/08/08 22:54:44 gson Exp $
|
||||
* $Id: tsig.c,v 1.112.2.1 2001/09/27 23:17:10 gson Exp $
|
||||
*/
|
||||
|
||||
#include <config.h>
|
||||
@@ -148,13 +148,25 @@ dns_tsigkey_createfromkey(dns_name_t *name, dns_name_t *algorithm,
|
||||
goto cleanup_key;
|
||||
dns_name_downcase(&tkey->name, &tkey->name, NULL);
|
||||
|
||||
if (dns_name_equal(algorithm, DNS_TSIG_HMACMD5_NAME))
|
||||
if (dns_name_equal(algorithm, DNS_TSIG_HMACMD5_NAME)) {
|
||||
tkey->algorithm = DNS_TSIG_HMACMD5_NAME;
|
||||
else if (dns_name_equal(algorithm, DNS_TSIG_GSSAPI_NAME))
|
||||
if (dstkey != NULL && dst_key_alg(dstkey) != DST_ALG_HMACMD5) {
|
||||
ret = DNS_R_BADALG;
|
||||
goto cleanup_name;
|
||||
}
|
||||
} else if (dns_name_equal(algorithm, DNS_TSIG_GSSAPI_NAME)) {
|
||||
tkey->algorithm = DNS_TSIG_GSSAPI_NAME;
|
||||
else if (dns_name_equal(algorithm, DNS_TSIG_GSSAPIMS_NAME))
|
||||
if (dstkey != NULL && dst_key_alg(dstkey) != DST_ALG_GSSAPI) {
|
||||
ret = DNS_R_BADALG;
|
||||
goto cleanup_name;
|
||||
}
|
||||
} else if (dns_name_equal(algorithm, DNS_TSIG_GSSAPIMS_NAME)) {
|
||||
tkey->algorithm = DNS_TSIG_GSSAPIMS_NAME;
|
||||
else {
|
||||
if (dstkey != NULL && dst_key_alg(dstkey) != DST_ALG_GSSAPI) {
|
||||
ret = DNS_R_BADALG;
|
||||
goto cleanup_name;
|
||||
}
|
||||
} else {
|
||||
if (key != NULL) {
|
||||
ret = DNS_R_BADALG;
|
||||
goto cleanup_name;
|
||||
|
||||
+3
-3
@@ -15,7 +15,7 @@
|
||||
* WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
|
||||
*/
|
||||
|
||||
/* $Id: validator.c,v 1.91 2001/08/08 22:54:45 gson Exp $ */
|
||||
/* $Id: validator.c,v 1.91.2.1 2001/09/19 21:51:40 bwelling Exp $ */
|
||||
|
||||
#include <config.h>
|
||||
|
||||
@@ -165,7 +165,7 @@ fetch_callback_validator(isc_task_t *task, isc_event_t *event) {
|
||||
validator_log(val, ISC_LOG_DEBUG(3),
|
||||
"fetch_callback_validator: got %s",
|
||||
dns_result_totext(eresult));
|
||||
validator_done(val, eresult);
|
||||
validator_done(val, DNS_R_NOVALIDKEY);
|
||||
}
|
||||
|
||||
out:
|
||||
@@ -284,7 +284,7 @@ fetch_callback_nullkey(isc_task_t *task, isc_event_t *event) {
|
||||
validator_log(val, ISC_LOG_DEBUG(3),
|
||||
"fetch_callback_nullkey: got %s",
|
||||
dns_result_totext(eresult));
|
||||
validator_done(val, eresult);
|
||||
validator_done(val, DNS_R_NOVALIDKEY);
|
||||
}
|
||||
UNLOCK(&val->lock);
|
||||
|
||||
|
||||
+4
-6
@@ -15,7 +15,7 @@
|
||||
* WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
|
||||
*/
|
||||
|
||||
/* $Id: zone.c,v 1.333.2.2 2001/09/05 00:38:01 gson Exp $ */
|
||||
/* $Id: zone.c,v 1.333.2.4 2001/10/23 02:41:57 marka Exp $ */
|
||||
|
||||
#include <config.h>
|
||||
|
||||
@@ -432,8 +432,8 @@ static void zone_notify(dns_zone_t *zone);
|
||||
|
||||
#define ENTER zone_debuglog(zone, me, 1, "enter")
|
||||
|
||||
const unsigned int dbargc_default = 1;
|
||||
const char *dbargv_default[] = { "rbt" };
|
||||
static const unsigned int dbargc_default = 1;
|
||||
static const char *dbargv_default[] = { "rbt" };
|
||||
|
||||
/***
|
||||
*** Public functions.
|
||||
@@ -2816,10 +2816,8 @@ save_nsrrset(dns_message_t *message, dns_name_t *name,
|
||||
result = dns_rdata_tostruct(&rdata, &ns, NULL);
|
||||
dns_rdata_reset(&rdata);
|
||||
RUNTIME_CHECK(result == ISC_R_SUCCESS);
|
||||
if (!dns_name_issubdomain(&ns.name, name)) {
|
||||
result = dns_rdataset_next(nsrdataset);
|
||||
if (!dns_name_issubdomain(&ns.name, name))
|
||||
continue;
|
||||
}
|
||||
rdataset = NULL;
|
||||
result = dns_message_findname(message, DNS_SECTION_ADDITIONAL,
|
||||
&ns.name, dns_rdatatype_a6,
|
||||
|
||||
+2
-2
@@ -13,7 +13,7 @@
|
||||
# NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION
|
||||
# WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
|
||||
|
||||
# $Id: Makefile.in,v 1.71 2001/03/02 19:25:15 bwelling Exp $
|
||||
# $Id: Makefile.in,v 1.71.2.1 2001/10/22 23:28:13 gson Exp $
|
||||
|
||||
srcdir = @srcdir@
|
||||
VPATH = @srcdir@
|
||||
@@ -36,7 +36,7 @@ UNIXOBJS = @ISC_ISCIPV6_O@ \
|
||||
unix/errno2result.@O@ unix/file.@O@ unix/fsaccess.@O@ \
|
||||
unix/interfaceiter.@O@ unix/keyboard.@O@ unix/net.@O@ \
|
||||
unix/os.@O@ unix/resource.@O@ unix/socket.@O@ unix/stdio.@O@ \
|
||||
unix/stdtime.@O@ unix/syslog.@O@ unix/time.@O@
|
||||
unix/stdtime.@O@ unix/strerror.@O@ unix/syslog.@O@ unix/time.@O@
|
||||
|
||||
|
||||
NLSOBJS = nls/msgcat.@O@
|
||||
|
||||
+2
-1
@@ -15,7 +15,7 @@
|
||||
* WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
|
||||
*/
|
||||
|
||||
/* $Id: mem.c,v 1.98.2.1 2001/09/05 17:51:13 gson Exp $ */
|
||||
/* $Id: mem.c,v 1.98.2.2 2001/10/12 01:17:37 marka Exp $ */
|
||||
|
||||
#include <config.h>
|
||||
|
||||
@@ -475,6 +475,7 @@ mem_getunlocked(isc_mem_t *ctx, size_t size) {
|
||||
* don't own.
|
||||
*/
|
||||
new_size = size;
|
||||
goto done;
|
||||
}
|
||||
|
||||
/*
|
||||
|
||||
@@ -15,7 +15,7 @@
|
||||
* WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
|
||||
*/
|
||||
|
||||
/* $Id: condition.c,v 1.30 2001/01/23 02:27:19 bwelling Exp $ */
|
||||
/* $Id: condition.c,v 1.30.2.1 2001/10/22 23:28:14 gson Exp $ */
|
||||
|
||||
#include <config.h>
|
||||
|
||||
@@ -23,6 +23,7 @@
|
||||
|
||||
#include <isc/condition.h>
|
||||
#include <isc/msgs.h>
|
||||
#include <isc/strerror.h>
|
||||
#include <isc/string.h>
|
||||
#include <isc/time.h>
|
||||
#include <isc/util.h>
|
||||
@@ -32,6 +33,7 @@ isc_condition_waituntil(isc_condition_t *c, isc_mutex_t *m, isc_time_t *t) {
|
||||
int presult;
|
||||
isc_result_t result;
|
||||
struct timespec ts;
|
||||
char strbuf[ISC_STRERRORSIZE];
|
||||
|
||||
REQUIRE(c != NULL && m != NULL && t != NULL);
|
||||
|
||||
@@ -60,10 +62,11 @@ isc_condition_waituntil(isc_condition_t *c, isc_mutex_t *m, isc_time_t *t) {
|
||||
return (ISC_R_TIMEDOUT);
|
||||
} while (presult == EINTR);
|
||||
|
||||
isc__strerror(presult, strbuf, sizeof(strbuf));
|
||||
UNEXPECTED_ERROR(__FILE__, __LINE__,
|
||||
"pthread_cond_timedwait() %s %s",
|
||||
isc_msgcat_get(isc_msgcat, ISC_MSGSET_GENERAL,
|
||||
ISC_MSG_RETURNED, "returned"),
|
||||
strerror(presult));
|
||||
strbuf);
|
||||
return (ISC_R_UNEXPECTED);
|
||||
}
|
||||
|
||||
@@ -13,7 +13,7 @@
|
||||
# NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION
|
||||
# WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
|
||||
|
||||
# $Id: Makefile.in,v 1.35 2001/03/02 19:25:16 bwelling Exp $
|
||||
# $Id: Makefile.in,v 1.35.2.1 2001/10/22 23:28:16 gson Exp $
|
||||
|
||||
srcdir = @srcdir@
|
||||
VPATH = @srcdir@
|
||||
@@ -33,14 +33,14 @@ OBJS = @ISC_IPV6_O@ \
|
||||
app.@O@ dir.@O@ entropy.@O@ errno2result.@O@ file.@O@ \
|
||||
fsaccess.@O@ interfaceiter.@O@ keyboard.@O@ net.@O@ \
|
||||
os.@O@ resource.@O@ socket.@O@ stdio.@O@ stdtime.@O@ \
|
||||
syslog.@O@ time.@O@
|
||||
strerror.@O@ syslog.@O@ time.@O@
|
||||
|
||||
# Alphabetically
|
||||
SRCS = @ISC_IPV6_C@ \
|
||||
app.c dir.c entropy.c errno2result.c file.c \
|
||||
fsaccess.c interfaceiter.c keyboard.c net.c \
|
||||
os.c resource.c socket.c stdio.c stdtime.c \
|
||||
syslog.c time.c
|
||||
strerror.c syslog.c time.c
|
||||
|
||||
SUBDIRS = include
|
||||
TARGETS = ${OBJS}
|
||||
|
||||
+31
-22
@@ -15,7 +15,7 @@
|
||||
* WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
|
||||
*/
|
||||
|
||||
/* $Id: app.c,v 1.43 2001/07/09 21:05:57 gson Exp $ */
|
||||
/* $Id: app.c,v 1.43.2.1 2001/10/22 23:28:17 gson Exp $ */
|
||||
|
||||
#include <config.h>
|
||||
|
||||
@@ -35,6 +35,7 @@
|
||||
#include <isc/mutex.h>
|
||||
#include <isc/event.h>
|
||||
#include <isc/platform.h>
|
||||
#include <isc/strerror.h>
|
||||
#include <isc/string.h>
|
||||
#include <isc/task.h>
|
||||
#include <isc/time.h>
|
||||
@@ -97,17 +98,19 @@ reload_action(int arg) {
|
||||
static isc_result_t
|
||||
handle_signal(int sig, void (*handler)(int)) {
|
||||
struct sigaction sa;
|
||||
char strbuf[ISC_STRERRORSIZE];
|
||||
|
||||
memset(&sa, 0, sizeof sa);
|
||||
sa.sa_handler = handler;
|
||||
|
||||
if (sigfillset(&sa.sa_mask) != 0 ||
|
||||
sigaction(sig, &sa, NULL) < 0) {
|
||||
isc__strerror(errno, strbuf, sizeof(strbuf));
|
||||
UNEXPECTED_ERROR(__FILE__, __LINE__,
|
||||
isc_msgcat_get(isc_msgcat, ISC_MSGSET_APP,
|
||||
ISC_MSG_SIGNALSETUP,
|
||||
"handle_signal() %d setup: %s"),
|
||||
sig, strerror(errno));
|
||||
sig, strbuf);
|
||||
return (ISC_R_UNEXPECTED);
|
||||
}
|
||||
|
||||
@@ -119,6 +122,7 @@ isc_app_start(void) {
|
||||
isc_result_t result;
|
||||
int presult;
|
||||
sigset_t sset;
|
||||
char strbuf[ISC_STRERRORSIZE];
|
||||
|
||||
/*
|
||||
* Start an ISC library application.
|
||||
@@ -130,9 +134,9 @@ isc_app_start(void) {
|
||||
*/
|
||||
presult = pthread_init();
|
||||
if (presult != 0) {
|
||||
isc__strerror(presult, strbuf, sizeof(strbuf));
|
||||
UNEXPECTED_ERROR(__FILE__, __LINE__,
|
||||
"isc_app_start() pthread_init: %s",
|
||||
strerror(presult));
|
||||
"isc_app_start() pthread_init: %s", strbuf);
|
||||
return (ISC_R_UNEXPECTED);
|
||||
}
|
||||
#endif
|
||||
@@ -204,16 +208,17 @@ isc_app_start(void) {
|
||||
sigaddset(&sset, SIGHUP) != 0 ||
|
||||
sigaddset(&sset, SIGINT) != 0 ||
|
||||
sigaddset(&sset, SIGTERM) != 0) {
|
||||
isc__strerror(errno, strbuf, sizeof(strbuf));
|
||||
UNEXPECTED_ERROR(__FILE__, __LINE__,
|
||||
"isc_app_start() sigsetops: %s",
|
||||
strerror(errno));
|
||||
"isc_app_start() sigsetops: %s", strbuf);
|
||||
return (ISC_R_UNEXPECTED);
|
||||
}
|
||||
presult = pthread_sigmask(SIG_BLOCK, &sset, NULL);
|
||||
if (presult != 0) {
|
||||
isc__strerror(presult, strbuf, sizeof(strbuf));
|
||||
UNEXPECTED_ERROR(__FILE__, __LINE__,
|
||||
"isc_app_start() pthread_sigmask: %s",
|
||||
strerror(presult));
|
||||
strbuf);
|
||||
return (ISC_R_UNEXPECTED);
|
||||
}
|
||||
#else /* ISC_PLATFORM_USETHREADS */
|
||||
@@ -228,16 +233,16 @@ isc_app_start(void) {
|
||||
sigaddset(&sset, SIGHUP) != 0 ||
|
||||
sigaddset(&sset, SIGINT) != 0 ||
|
||||
sigaddset(&sset, SIGTERM) != 0) {
|
||||
isc__strerror(errno, strbuf, sizeof(strbuf));
|
||||
UNEXPECTED_ERROR(__FILE__, __LINE__,
|
||||
"isc_app_start() sigsetops: %s",
|
||||
strerror(errno));
|
||||
"isc_app_start() sigsetops: %s", strbuf);
|
||||
return (ISC_R_UNEXPECTED);
|
||||
}
|
||||
presult = sigprocmask(SIG_UNBLOCK, &sset, NULL);
|
||||
if (presult != 0) {
|
||||
isc__strerror(presult, strbuf, sizeof(strbuf));
|
||||
UNEXPECTED_ERROR(__FILE__, __LINE__,
|
||||
"isc_app_start() sigprocmask: %s",
|
||||
strerror(presult));
|
||||
"isc_app_start() sigprocmask: %s", strbuf);
|
||||
return (ISC_R_UNEXPECTED);
|
||||
}
|
||||
#endif /* ISC_PLATFORM_USETHREADS */
|
||||
@@ -405,6 +410,7 @@ isc_app_run(void) {
|
||||
isc_task_t *task;
|
||||
#ifdef ISC_PLATFORM_USETHREADS
|
||||
sigset_t sset;
|
||||
char strbuf[ISC_STRERRORSIZE];
|
||||
#endif /* ISC_PLATFORM_USETHREADS */
|
||||
#ifdef HAVE_SIGWAIT
|
||||
int sig;
|
||||
@@ -464,9 +470,9 @@ isc_app_run(void) {
|
||||
sigaddset(&sset, SIGHUP) != 0 ||
|
||||
sigaddset(&sset, SIGINT) != 0 ||
|
||||
sigaddset(&sset, SIGTERM) != 0) {
|
||||
isc__strerror(errno, strbuf, sizeof(strbuf));
|
||||
UNEXPECTED_ERROR(__FILE__, __LINE__,
|
||||
"isc_app_run() sigsetops: %s",
|
||||
strerror(errno));
|
||||
"isc_app_run() sigsetops: %s", strbuf);
|
||||
return (ISC_R_UNEXPECTED);
|
||||
}
|
||||
|
||||
@@ -496,9 +502,9 @@ isc_app_run(void) {
|
||||
* Listen for all signals.
|
||||
*/
|
||||
if (sigemptyset(&sset) != 0) {
|
||||
isc__strerror(errno, strbuf, sizeof(strbuf));
|
||||
UNEXPECTED_ERROR(__FILE__, __LINE__,
|
||||
"isc_app_run() sigsetops: %s",
|
||||
strerror(errno));
|
||||
"isc_app_run() sigsetops: %s", strbuf);
|
||||
return (ISC_R_UNEXPECTED);
|
||||
}
|
||||
result = sigsuspend(&sset);
|
||||
@@ -532,6 +538,7 @@ isc_app_run(void) {
|
||||
isc_result_t
|
||||
isc_app_shutdown(void) {
|
||||
isc_boolean_t want_kill = ISC_TRUE;
|
||||
char strbuf[ISC_STRERRORSIZE];
|
||||
|
||||
LOCK(&lock);
|
||||
|
||||
@@ -550,16 +557,17 @@ isc_app_shutdown(void) {
|
||||
|
||||
result = pthread_kill(main_thread, SIGTERM);
|
||||
if (result != 0) {
|
||||
isc__strerror(result, strbuf, sizeof(strbuf));
|
||||
UNEXPECTED_ERROR(__FILE__, __LINE__,
|
||||
"isc_app_shutdown() pthread_kill: %s",
|
||||
strerror(result));
|
||||
strbuf);
|
||||
return (ISC_R_UNEXPECTED);
|
||||
}
|
||||
#else
|
||||
if (kill(getpid(), SIGTERM) < 0) {
|
||||
isc__strerror(errno, strbuf, sizeof(strbuf));
|
||||
UNEXPECTED_ERROR(__FILE__, __LINE__,
|
||||
"isc_app_shutdown() kill: %s",
|
||||
strerror(errno));
|
||||
"isc_app_shutdown() kill: %s", strbuf);
|
||||
return (ISC_R_UNEXPECTED);
|
||||
}
|
||||
#endif
|
||||
@@ -571,6 +579,7 @@ isc_app_shutdown(void) {
|
||||
isc_result_t
|
||||
isc_app_reload(void) {
|
||||
isc_boolean_t want_kill = ISC_TRUE;
|
||||
char strbuf[ISC_STRERRORSIZE];
|
||||
|
||||
LOCK(&lock);
|
||||
|
||||
@@ -590,16 +599,17 @@ isc_app_reload(void) {
|
||||
|
||||
result = pthread_kill(main_thread, SIGHUP);
|
||||
if (result != 0) {
|
||||
isc__strerror(result, strbuf, sizeof(strbuf));
|
||||
UNEXPECTED_ERROR(__FILE__, __LINE__,
|
||||
"isc_app_reload() pthread_kill: %s",
|
||||
strerror(result));
|
||||
strbuf);
|
||||
return (ISC_R_UNEXPECTED);
|
||||
}
|
||||
#else
|
||||
if (kill(getpid(), SIGHUP) < 0) {
|
||||
isc__strerror(errno, strbuf, sizeof(strbuf));
|
||||
UNEXPECTED_ERROR(__FILE__, __LINE__,
|
||||
"isc_app_reload() kill: %s",
|
||||
strerror(errno));
|
||||
"isc_app_reload() kill: %s", strbuf);
|
||||
return (ISC_R_UNEXPECTED);
|
||||
}
|
||||
#endif
|
||||
@@ -651,4 +661,3 @@ isc_app_unblock(void) {
|
||||
RUNTIME_CHECK(pthread_sigmask(SIG_BLOCK, &sset, NULL) == 0);
|
||||
#endif /* ISC_PLATFORM_USETHREADS */
|
||||
}
|
||||
|
||||
|
||||
@@ -15,7 +15,7 @@
|
||||
* WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
|
||||
*/
|
||||
|
||||
/* $Id: entropy.c,v 1.60 2001/07/18 01:31:13 gson Exp $ */
|
||||
/* $Id: entropy.c,v 1.60.2.1 2001/10/22 23:28:18 gson Exp $ */
|
||||
|
||||
/*
|
||||
* This is the system depenedent part of the ISC entropy API.
|
||||
@@ -29,6 +29,7 @@
|
||||
#include <unistd.h>
|
||||
|
||||
#include <isc/platform.h>
|
||||
#include <isc/strerror.h>
|
||||
|
||||
#ifdef ISC_PLATFORM_NEEDSYSSELECTH
|
||||
#include <sys/select.h>
|
||||
@@ -267,15 +268,17 @@ static isc_result_t
|
||||
make_nonblock(int fd) {
|
||||
int ret;
|
||||
int flags;
|
||||
char strbuf[ISC_STRERRORSIZE];
|
||||
|
||||
flags = fcntl(fd, F_GETFL, 0);
|
||||
flags |= O_NONBLOCK;
|
||||
ret = fcntl(fd, F_SETFL, flags);
|
||||
|
||||
if (ret == -1) {
|
||||
isc__strerror(errno, strbuf, sizeof(strbuf));
|
||||
UNEXPECTED_ERROR(__FILE__, __LINE__,
|
||||
"fcntl(%d, F_SETFL, %d): %s",
|
||||
fd, flags, strerror(errno));
|
||||
fd, flags, strbuf);
|
||||
|
||||
return (ISC_R_UNEXPECTED);
|
||||
}
|
||||
|
||||
@@ -15,7 +15,7 @@
|
||||
* WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
|
||||
*/
|
||||
|
||||
/* $Id: ifiter_ioctl.c,v 1.19 2001/07/09 21:05:58 gson Exp $ */
|
||||
/* $Id: ifiter_ioctl.c,v 1.19.2.1 2001/10/22 23:28:19 gson Exp $ */
|
||||
|
||||
/*
|
||||
* Obtain the list of network interfaces using the SIOCGLIFCONF ioctl.
|
||||
@@ -73,6 +73,7 @@ isc_result_t
|
||||
isc_interfaceiter_create(isc_mem_t *mctx, isc_interfaceiter_t **iterp) {
|
||||
isc_interfaceiter_t *iter;
|
||||
isc_result_t result;
|
||||
char strbuf[ISC_STRERRORSIZE];
|
||||
|
||||
REQUIRE(mctx != NULL);
|
||||
REQUIRE(iterp != NULL);
|
||||
@@ -89,13 +90,14 @@ isc_interfaceiter_create(isc_mem_t *mctx, isc_interfaceiter_t **iterp) {
|
||||
* Create an unbound datagram socket to do the SIOCGLIFADDR ioctl on.
|
||||
*/
|
||||
if ((iter->socket = socket(AF_INET, SOCK_DGRAM, 0)) < 0) {
|
||||
isc__strerror(errno, strbuf, sizeof(strbuf));
|
||||
UNEXPECTED_ERROR(__FILE__, __LINE__,
|
||||
isc_msgcat_get(isc_msgcat,
|
||||
ISC_MSGSET_IFITERIOCTL,
|
||||
ISC_MSG_MAKESCANSOCKET,
|
||||
"making interface "
|
||||
"scan socket: %s"),
|
||||
strerror(errno));
|
||||
strbuf);
|
||||
result = ISC_R_UNEXPECTED;
|
||||
goto socket_failure;
|
||||
}
|
||||
@@ -130,13 +132,14 @@ isc_interfaceiter_create(isc_mem_t *mctx, isc_interfaceiter_t **iterp) {
|
||||
if (ioctl(iter->socket, SIOCGLIFCONF, (char *)&iter->ifc)
|
||||
== -1) {
|
||||
if (errno != EINVAL) {
|
||||
isc__strerror(errno, strbuf, sizeof(strbuf));
|
||||
UNEXPECTED_ERROR(__FILE__, __LINE__,
|
||||
isc_msgcat_get(isc_msgcat,
|
||||
ISC_MSGSET_IFITERIOCTL,
|
||||
ISC_MSG_GETIFCONFIG,
|
||||
"get interface "
|
||||
"configuration: %s"),
|
||||
strerror(errno));
|
||||
strbuf);
|
||||
result = ISC_R_UNEXPECTED;
|
||||
goto ioctl_failure;
|
||||
}
|
||||
@@ -209,6 +212,7 @@ internal_current(isc_interfaceiter_t *iter) {
|
||||
struct lifreq *ifrp;
|
||||
struct lifreq lifreq;
|
||||
int family;
|
||||
char strbuf[ISC_STRERRORSIZE];
|
||||
|
||||
REQUIRE(VALID_IFITER(iter));
|
||||
REQUIRE (iter->pos < (unsigned int) iter->ifc.lifc_len);
|
||||
@@ -244,10 +248,10 @@ internal_current(isc_interfaceiter_t *iter) {
|
||||
* and is really hard to shut up.
|
||||
*/
|
||||
if (ioctl(iter->socket, SIOCGLIFFLAGS, (char *) &lifreq) < 0) {
|
||||
isc__strerror(errno, strbuf, sizeof(strbuf));
|
||||
UNEXPECTED_ERROR(__FILE__, __LINE__,
|
||||
"%s: getting interface flags: %s",
|
||||
lifreq.lifr_name,
|
||||
strerror(errno));
|
||||
lifreq.lifr_name, strbuf);
|
||||
return (ISC_R_IGNORE);
|
||||
}
|
||||
|
||||
@@ -271,14 +275,14 @@ internal_current(isc_interfaceiter_t *iter) {
|
||||
*/
|
||||
if (ioctl(iter->socket, SIOCGLIFDSTADDR, (char *)&lifreq)
|
||||
< 0) {
|
||||
isc__strerror(errno, strbuf, sizeof(strbuf));
|
||||
UNEXPECTED_ERROR(__FILE__, __LINE__,
|
||||
isc_msgcat_get(isc_msgcat,
|
||||
ISC_MSGSET_IFITERIOCTL,
|
||||
ISC_MSG_GETDESTADDR,
|
||||
"%s: getting "
|
||||
"destination address: %s"),
|
||||
lifreq.lifr_name,
|
||||
strerror(errno));
|
||||
lifreq.lifr_name, strbuf);
|
||||
return (ISC_R_IGNORE);
|
||||
}
|
||||
get_addr(family, &iter->current.dstaddress,
|
||||
@@ -299,13 +303,13 @@ internal_current(isc_interfaceiter_t *iter) {
|
||||
*/
|
||||
if (ioctl(iter->socket, SIOCGLIFNETMASK, (char *)&lifreq)
|
||||
< 0) {
|
||||
isc__strerror(errno, strbuf, sizeof(strbuf));
|
||||
UNEXPECTED_ERROR(__FILE__, __LINE__,
|
||||
isc_msgcat_get(isc_msgcat,
|
||||
ISC_MSGSET_IFITERIOCTL,
|
||||
ISC_MSG_GETNETMASK,
|
||||
"%s: getting netmask: %s"),
|
||||
lifreq.lifr_name,
|
||||
strerror(errno));
|
||||
lifreq.lifr_name, strbuf);
|
||||
return (ISC_R_IGNORE);
|
||||
}
|
||||
get_addr(family, &iter->current.netmask,
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (C) 2000, 2001 Internet Software Consortium.
|
||||
* Copyright (C) 2001 Internet Software Consortium.
|
||||
*
|
||||
* Permission to use, copy, modify, and distribute this software for any
|
||||
* purpose with or without fee is hereby granted, provided that the above
|
||||
@@ -15,11 +15,29 @@
|
||||
* WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
|
||||
*/
|
||||
|
||||
/* $Id: tcldb.h,v 1.4 2001/01/09 21:46:29 bwelling Exp $ */
|
||||
/* $Id: strerror.h,v 1.2 2001/08/31 05:57:58 marka Exp $ */
|
||||
|
||||
#include <isc/types.h>
|
||||
#ifndef ISC_STRERROR_H
|
||||
#define ISC_STRERROR_H
|
||||
|
||||
isc_result_t tcldb_init(void);
|
||||
#include <sys/types.h>
|
||||
|
||||
void tcldb_clear(void);
|
||||
#include <isc/lang.h>
|
||||
|
||||
ISC_LANG_BEGINDECLS
|
||||
|
||||
#define ISC_STRERRORSIZE 128
|
||||
|
||||
/*
|
||||
* Provide a thread safe wrapper to strerrror().
|
||||
* 'buf' is always returned.
|
||||
*
|
||||
* Requires:
|
||||
* 'buf' to be non NULL.
|
||||
*/
|
||||
char *
|
||||
isc__strerror(int num, char *buf, size_t bufsize);
|
||||
|
||||
ISC_LANG_ENDDECLS
|
||||
|
||||
#endif /* ISC_STRERROR_H */
|
||||
@@ -15,7 +15,7 @@
|
||||
* WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
|
||||
*/
|
||||
|
||||
/* $Id: interfaceiter.c,v 1.22 2001/06/05 06:34:11 bwelling Exp $ */
|
||||
/* $Id: interfaceiter.c,v 1.22.2.1 2001/10/22 23:28:21 gson Exp $ */
|
||||
|
||||
#include <config.h>
|
||||
|
||||
@@ -35,6 +35,7 @@
|
||||
#include <isc/msgs.h>
|
||||
#include <isc/net.h>
|
||||
#include <isc/result.h>
|
||||
#include <isc/strerror.h>
|
||||
#include <isc/string.h>
|
||||
#include <isc/types.h>
|
||||
#include <isc/interfaceiter.h>
|
||||
|
||||
+5
-2
@@ -15,7 +15,7 @@
|
||||
* WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
|
||||
*/
|
||||
|
||||
/* $Id: net.c,v 1.22 2001/07/09 21:05:59 gson Exp $ */
|
||||
/* $Id: net.c,v 1.22.2.1 2001/10/22 23:28:22 gson Exp $ */
|
||||
|
||||
#include <config.h>
|
||||
|
||||
@@ -26,6 +26,7 @@
|
||||
#include <isc/msgs.h>
|
||||
#include <isc/net.h>
|
||||
#include <isc/once.h>
|
||||
#include <isc/strerror.h>
|
||||
#include <isc/string.h>
|
||||
#include <isc/util.h>
|
||||
|
||||
@@ -42,6 +43,7 @@ static isc_result_t
|
||||
try_proto(int domain) {
|
||||
int s;
|
||||
isc_result_t result = ISC_R_SUCCESS;
|
||||
char strbuf[ISC_STRERRORSIZE];
|
||||
|
||||
s = socket(domain, SOCK_STREAM, 0);
|
||||
if (s == -1) {
|
||||
@@ -57,13 +59,14 @@ try_proto(int domain) {
|
||||
#endif
|
||||
return (ISC_R_NOTFOUND);
|
||||
default:
|
||||
isc__strerror(errno, strbuf, sizeof(strbuf));
|
||||
UNEXPECTED_ERROR(__FILE__, __LINE__,
|
||||
"socket() %s: %s",
|
||||
isc_msgcat_get(isc_msgcat,
|
||||
ISC_MSGSET_GENERAL,
|
||||
ISC_MSG_FAILED,
|
||||
"failed"),
|
||||
strerror(errno));
|
||||
strbuf);
|
||||
return (ISC_R_UNEXPECTED);
|
||||
}
|
||||
}
|
||||
|
||||
+67
-29
@@ -15,7 +15,7 @@
|
||||
* WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
|
||||
*/
|
||||
|
||||
/* $Id: socket.c,v 1.207 2001/08/16 07:27:48 marka Exp $ */
|
||||
/* $Id: socket.c,v 1.207.2.2 2001/10/22 23:28:23 gson Exp $ */
|
||||
|
||||
#include <config.h>
|
||||
|
||||
@@ -46,6 +46,7 @@
|
||||
#include <isc/print.h>
|
||||
#include <isc/region.h>
|
||||
#include <isc/socket.h>
|
||||
#include <isc/strerror.h>
|
||||
#include <isc/task.h>
|
||||
#include <isc/thread.h>
|
||||
#include <isc/util.h>
|
||||
@@ -372,6 +373,7 @@ static void
|
||||
select_poke(isc_socketmgr_t *mgr, int fd, int msg) {
|
||||
int cc;
|
||||
int buf[2];
|
||||
char strbuf[ISC_STRERRORSIZE];
|
||||
|
||||
buf[0] = fd;
|
||||
buf[1] = msg;
|
||||
@@ -380,13 +382,15 @@ select_poke(isc_socketmgr_t *mgr, int fd, int msg) {
|
||||
cc = write(mgr->pipe_fds[1], buf, sizeof(buf));
|
||||
} while (cc < 0 && SOFT_ERROR(errno));
|
||||
|
||||
if (cc < 0)
|
||||
if (cc < 0) {
|
||||
isc__strerror(errno, strbuf, sizeof(strbuf));
|
||||
FATAL_ERROR(__FILE__, __LINE__,
|
||||
isc_msgcat_get(isc_msgcat, ISC_MSGSET_SOCKET,
|
||||
ISC_MSG_WRITEFAILED,
|
||||
"write() failed "
|
||||
"during watcher poke: %s"),
|
||||
strerror(errno));
|
||||
strbuf);
|
||||
}
|
||||
|
||||
INSIST(cc == sizeof(buf));
|
||||
}
|
||||
@@ -398,6 +402,7 @@ static void
|
||||
select_readmsg(isc_socketmgr_t *mgr, int *fd, int *msg) {
|
||||
int buf[2];
|
||||
int cc;
|
||||
char strbuf[ISC_STRERRORSIZE];
|
||||
|
||||
cc = read(mgr->pipe_fds[0], buf, sizeof(buf));
|
||||
if (cc < 0) {
|
||||
@@ -405,12 +410,13 @@ select_readmsg(isc_socketmgr_t *mgr, int *fd, int *msg) {
|
||||
if (SOFT_ERROR(errno))
|
||||
return;
|
||||
|
||||
isc__strerror(errno, strbuf, sizeof(strbuf));
|
||||
FATAL_ERROR(__FILE__, __LINE__,
|
||||
isc_msgcat_get(isc_msgcat, ISC_MSGSET_SOCKET,
|
||||
ISC_MSG_READFAILED,
|
||||
"read() failed "
|
||||
"during watcher poke: %s"),
|
||||
strerror(errno));
|
||||
strbuf);
|
||||
|
||||
return;
|
||||
}
|
||||
@@ -440,15 +446,17 @@ static isc_result_t
|
||||
make_nonblock(int fd) {
|
||||
int ret;
|
||||
int flags;
|
||||
char strbuf[ISC_STRERRORSIZE];
|
||||
|
||||
flags = fcntl(fd, F_GETFL, 0);
|
||||
flags |= O_NONBLOCK;
|
||||
ret = fcntl(fd, F_SETFL, flags);
|
||||
|
||||
if (ret == -1) {
|
||||
isc__strerror(errno, strbuf, sizeof(strbuf));
|
||||
UNEXPECTED_ERROR(__FILE__, __LINE__,
|
||||
"fcntl(%d, F_SETFL, %d): %s",
|
||||
fd, flags, strerror(errno));
|
||||
fd, flags, strbuf);
|
||||
|
||||
return (ISC_R_UNEXPECTED);
|
||||
}
|
||||
@@ -879,6 +887,7 @@ doio_recv(isc_socket_t *sock, isc_socketevent_t *dev) {
|
||||
#else
|
||||
char *cmsg = NULL;
|
||||
#endif
|
||||
char strbuf[ISC_STRERRORSIZE];
|
||||
|
||||
build_msghdr_recv(sock, dev, &msghdr, cmsg, iov, &read_count);
|
||||
|
||||
@@ -893,13 +902,14 @@ doio_recv(isc_socket_t *sock, isc_socketevent_t *dev) {
|
||||
if (SOFT_ERROR(recv_errno))
|
||||
return (DOIO_SOFT);
|
||||
|
||||
if (isc_log_wouldlog(isc_lctx, IOEVENT_LEVEL))
|
||||
if (isc_log_wouldlog(isc_lctx, IOEVENT_LEVEL)) {
|
||||
isc__strerror(recv_errno, strbuf, sizeof(strbuf));
|
||||
socket_log(sock, NULL, IOEVENT,
|
||||
isc_msgcat, ISC_MSGSET_SOCKET,
|
||||
ISC_MSG_DOIORECV,
|
||||
"doio_recv: recvmsg(%d) %d bytes, err %d/%s",
|
||||
sock->fd, cc, recv_errno,
|
||||
strerror(recv_errno));
|
||||
sock->fd, cc, recv_errno, strbuf);
|
||||
}
|
||||
|
||||
#define SOFT_OR_HARD(_system, _isc) \
|
||||
if (recv_errno == _system) { \
|
||||
@@ -918,6 +928,7 @@ doio_recv(isc_socket_t *sock, isc_socketevent_t *dev) {
|
||||
SOFT_OR_HARD(ECONNREFUSED, ISC_R_CONNREFUSED);
|
||||
SOFT_OR_HARD(ENETUNREACH, ISC_R_NETUNREACH);
|
||||
SOFT_OR_HARD(EHOSTUNREACH, ISC_R_HOSTUNREACH);
|
||||
SOFT_OR_HARD(EHOSTDOWN, ISC_R_HOSTDOWN);
|
||||
ALWAYS_HARD(ENOBUFS, ISC_R_NORESOURCES);
|
||||
|
||||
#undef SOFT_OR_HARD
|
||||
@@ -1025,6 +1036,7 @@ doio_send(isc_socket_t *sock, isc_socketevent_t *dev) {
|
||||
#endif
|
||||
int attempts = 0;
|
||||
int send_errno;
|
||||
char strbuf[ISC_STRERRORSIZE];
|
||||
|
||||
build_msghdr_send(sock, dev, &msghdr, cmsg, iov, &write_count);
|
||||
|
||||
@@ -1082,9 +1094,9 @@ doio_send(isc_socket_t *sock, isc_socketevent_t *dev) {
|
||||
* a status.
|
||||
*/
|
||||
isc_sockaddr_format(&dev->address, addrbuf, sizeof(addrbuf));
|
||||
UNEXPECTED_ERROR(__FILE__, __LINE__,
|
||||
"internal_send: %s: %s",
|
||||
addrbuf, strerror(send_errno));
|
||||
isc__strerror(send_errno, strbuf, sizeof(strbuf));
|
||||
UNEXPECTED_ERROR(__FILE__, __LINE__, "internal_send: %s: %s",
|
||||
addrbuf, strbuf);
|
||||
dev->result = isc__errno2result(send_errno);
|
||||
return (DOIO_HARD);
|
||||
}
|
||||
@@ -1272,6 +1284,7 @@ isc_socket_create(isc_socketmgr_t *manager, int pf, isc_sockettype_t type,
|
||||
#if defined(USE_CMSG) || defined(SO_BSDCOMPAT)
|
||||
int on = 1;
|
||||
#endif
|
||||
char strbuf[ISC_STRERRORSIZE];
|
||||
|
||||
REQUIRE(VALID_MANAGER(manager));
|
||||
REQUIRE(socketp != NULL && *socketp == NULL);
|
||||
@@ -1323,13 +1336,14 @@ isc_socket_create(isc_socketmgr_t *manager, int pf, isc_sockettype_t type,
|
||||
return (ISC_R_FAMILYNOSUPPORT);
|
||||
|
||||
default:
|
||||
isc__strerror(errno, strbuf, sizeof(strbuf));
|
||||
UNEXPECTED_ERROR(__FILE__, __LINE__,
|
||||
"socket() %s: %s",
|
||||
isc_msgcat_get(isc_msgcat,
|
||||
ISC_MSGSET_GENERAL,
|
||||
ISC_MSG_FAILED,
|
||||
"failed"),
|
||||
strerror(errno));
|
||||
strbuf);
|
||||
return (ISC_R_UNEXPECTED);
|
||||
}
|
||||
}
|
||||
@@ -1342,12 +1356,13 @@ isc_socket_create(isc_socketmgr_t *manager, int pf, isc_sockettype_t type,
|
||||
#ifdef SO_BSDCOMPAT
|
||||
if (setsockopt(sock->fd, SOL_SOCKET, SO_BSDCOMPAT,
|
||||
(void *)&on, sizeof on) < 0) {
|
||||
isc__strerror(errno, strbuf, sizeof(strbuf));
|
||||
UNEXPECTED_ERROR(__FILE__, __LINE__,
|
||||
"setsockopt(%d, SO_BSDCOMPAT) %s: %s",
|
||||
sock->fd,
|
||||
isc_msgcat_get(isc_msgcat, ISC_MSGSET_GENERAL,
|
||||
ISC_MSG_FAILED, "failed"),
|
||||
strerror(errno));
|
||||
strbuf);
|
||||
/* Press on... */
|
||||
}
|
||||
#endif
|
||||
@@ -1359,6 +1374,7 @@ isc_socket_create(isc_socketmgr_t *manager, int pf, isc_sockettype_t type,
|
||||
if (setsockopt(sock->fd, SOL_SOCKET, SO_TIMESTAMP,
|
||||
(void *)&on, sizeof on) < 0
|
||||
&& errno != ENOPROTOOPT) {
|
||||
isc__strerror(errno, strbuf, sizeof(strbuf));
|
||||
UNEXPECTED_ERROR(__FILE__, __LINE__,
|
||||
"setsockopt(%d, SO_TIMESTAMP) %s: %s",
|
||||
sock->fd,
|
||||
@@ -1366,7 +1382,7 @@ isc_socket_create(isc_socketmgr_t *manager, int pf, isc_sockettype_t type,
|
||||
ISC_MSGSET_GENERAL,
|
||||
ISC_MSG_FAILED,
|
||||
"failed"),
|
||||
strerror(errno));
|
||||
strbuf);
|
||||
/* Press on... */
|
||||
}
|
||||
#endif /* SO_TIMESTAMP */
|
||||
@@ -1377,6 +1393,7 @@ isc_socket_create(isc_socketmgr_t *manager, int pf, isc_sockettype_t type,
|
||||
if ((pf == AF_INET6)
|
||||
&& (setsockopt(sock->fd, IPPROTO_IPV6, IPV6_RECVPKTINFO,
|
||||
(void *)&on, sizeof (on)) < 0)) {
|
||||
isc__strerror(errno, strbuf, sizeof(strbuf));
|
||||
UNEXPECTED_ERROR(__FILE__, __LINE__,
|
||||
"setsockopt(%d, IPV6_RECVPKTINFO) "
|
||||
"%s: %s", sock->fd,
|
||||
@@ -1384,13 +1401,14 @@ isc_socket_create(isc_socketmgr_t *manager, int pf, isc_sockettype_t type,
|
||||
ISC_MSGSET_GENERAL,
|
||||
ISC_MSG_FAILED,
|
||||
"failed"),
|
||||
strerror(errno));
|
||||
strbuf);
|
||||
}
|
||||
#else
|
||||
/* 2292 */
|
||||
if ((pf == AF_INET6)
|
||||
&& (setsockopt(sock->fd, IPPROTO_IPV6, IPV6_PKTINFO,
|
||||
(void *)&on, sizeof (on)) < 0)) {
|
||||
isc__strerror(errno, strbuf, sizeof(strbuf));
|
||||
UNEXPECTED_ERROR(__FILE__, __LINE__,
|
||||
"setsockopt(%d, IPV6_PKTINFO) %s: %s",
|
||||
sock->fd,
|
||||
@@ -1398,7 +1416,7 @@ isc_socket_create(isc_socketmgr_t *manager, int pf, isc_sockettype_t type,
|
||||
ISC_MSGSET_GENERAL,
|
||||
ISC_MSG_FAILED,
|
||||
"failed"),
|
||||
strerror(errno));
|
||||
strbuf);
|
||||
}
|
||||
#endif /* IPV6_RECVPKTINFO */
|
||||
#ifdef IPV6_USE_MIN_MTU /*2292bis, not too common yet*/
|
||||
@@ -1658,6 +1676,7 @@ internal_accept(isc_task_t *me, isc_event_t *ev) {
|
||||
ISC_SOCKADDR_LEN_T addrlen;
|
||||
int fd;
|
||||
isc_result_t result = ISC_R_SUCCESS;
|
||||
char strbuf[ISC_STRERRORSIZE];
|
||||
|
||||
UNUSED(me);
|
||||
|
||||
@@ -1710,13 +1729,14 @@ internal_accept(isc_task_t *me, isc_event_t *ev) {
|
||||
if (SOFT_ERROR(errno) || errno == ECONNRESET) {
|
||||
goto soft_error;
|
||||
} else {
|
||||
isc__strerror(errno, strbuf, sizeof(strbuf));
|
||||
UNEXPECTED_ERROR(__FILE__, __LINE__,
|
||||
"internal_accept: accept() %s: %s",
|
||||
isc_msgcat_get(isc_msgcat,
|
||||
ISC_MSGSET_GENERAL,
|
||||
ISC_MSG_FAILED,
|
||||
"failed"),
|
||||
strerror(errno));
|
||||
strbuf);
|
||||
fd = -1;
|
||||
result = ISC_R_UNEXPECTED;
|
||||
}
|
||||
@@ -2033,6 +2053,7 @@ watcher(void *uap) {
|
||||
fd_set writefds;
|
||||
int msg, fd;
|
||||
int maxfd;
|
||||
char strbuf[ISC_STRERRORSIZE];
|
||||
|
||||
/*
|
||||
* Get the control fd here. This will never change.
|
||||
@@ -2051,14 +2072,17 @@ watcher(void *uap) {
|
||||
|
||||
cc = select(maxfd, &readfds, &writefds, NULL, NULL);
|
||||
if (cc < 0) {
|
||||
if (!SOFT_ERROR(errno))
|
||||
if (!SOFT_ERROR(errno)) {
|
||||
isc__strerror(errno, strbuf,
|
||||
sizeof(strbuf));
|
||||
FATAL_ERROR(__FILE__, __LINE__,
|
||||
"select() %s: %s",
|
||||
isc_msgcat_get(isc_msgcat,
|
||||
ISC_MSGSET_GENERAL,
|
||||
ISC_MSG_FAILED,
|
||||
"failed"),
|
||||
strerror(errno));
|
||||
strbuf);
|
||||
}
|
||||
}
|
||||
|
||||
LOCK(&manager->lock);
|
||||
@@ -2125,6 +2149,9 @@ watcher(void *uap) {
|
||||
isc_result_t
|
||||
isc_socketmgr_create(isc_mem_t *mctx, isc_socketmgr_t **managerp) {
|
||||
isc_socketmgr_t *manager;
|
||||
#ifdef ISC_PLATFORM_USETHREADS
|
||||
char strbuf[ISC_STRERRORSIZE];
|
||||
#endif
|
||||
|
||||
REQUIRE(managerp != NULL && *managerp == NULL);
|
||||
|
||||
@@ -2170,11 +2197,12 @@ isc_socketmgr_create(isc_mem_t *mctx, isc_socketmgr_t **managerp) {
|
||||
if (pipe(manager->pipe_fds) != 0) {
|
||||
DESTROYLOCK(&manager->lock);
|
||||
isc_mem_put(mctx, manager, sizeof *manager);
|
||||
isc__strerror(errno, strbuf, sizeof(strbuf));
|
||||
UNEXPECTED_ERROR(__FILE__, __LINE__,
|
||||
"pipe() %s: %s",
|
||||
isc_msgcat_get(isc_msgcat, ISC_MSGSET_GENERAL,
|
||||
ISC_MSG_FAILED, "failed"),
|
||||
strerror(errno));
|
||||
strbuf);
|
||||
|
||||
return (ISC_R_UNEXPECTED);
|
||||
}
|
||||
@@ -2690,6 +2718,7 @@ isc_socket_sendto2(isc_socket_t *sock, isc_region_t *region,
|
||||
|
||||
isc_result_t
|
||||
isc_socket_bind(isc_socket_t *sock, isc_sockaddr_t *sockaddr) {
|
||||
char strbuf[ISC_STRERRORSIZE];
|
||||
int on = 1;
|
||||
|
||||
LOCK(&sock->lock);
|
||||
@@ -2720,8 +2749,9 @@ isc_socket_bind(isc_socket_t *sock, isc_sockaddr_t *sockaddr) {
|
||||
case EINVAL:
|
||||
return (ISC_R_BOUND);
|
||||
default:
|
||||
UNEXPECTED_ERROR(__FILE__, __LINE__,
|
||||
"bind: %s", strerror(errno));
|
||||
isc__strerror(errno, strbuf, sizeof(strbuf));
|
||||
UNEXPECTED_ERROR(__FILE__, __LINE__, "bind: %s",
|
||||
strbuf);
|
||||
return (ISC_R_UNEXPECTED);
|
||||
}
|
||||
}
|
||||
@@ -2746,6 +2776,8 @@ isc_socket_bind(isc_socket_t *sock, isc_sockaddr_t *sockaddr) {
|
||||
*/
|
||||
isc_result_t
|
||||
isc_socket_listen(isc_socket_t *sock, unsigned int backlog) {
|
||||
char strbuf[ISC_STRERRORSIZE];
|
||||
|
||||
REQUIRE(VALID_SOCKET(sock));
|
||||
|
||||
LOCK(&sock->lock);
|
||||
@@ -2759,8 +2791,9 @@ isc_socket_listen(isc_socket_t *sock, unsigned int backlog) {
|
||||
|
||||
if (listen(sock->fd, (int)backlog) < 0) {
|
||||
UNLOCK(&sock->lock);
|
||||
UNEXPECTED_ERROR(__FILE__, __LINE__, "listen: %s",
|
||||
strerror(errno));
|
||||
isc__strerror(errno, strbuf, sizeof(strbuf));
|
||||
|
||||
UNEXPECTED_ERROR(__FILE__, __LINE__, "listen: %s", strbuf);
|
||||
|
||||
return (ISC_R_UNEXPECTED);
|
||||
}
|
||||
@@ -2848,6 +2881,7 @@ isc_socket_connect(isc_socket_t *sock, isc_sockaddr_t *addr,
|
||||
isc_task_t *ntask = NULL;
|
||||
isc_socketmgr_t *manager;
|
||||
int cc;
|
||||
char strbuf[ISC_STRERRORSIZE];
|
||||
|
||||
REQUIRE(VALID_SOCKET(sock));
|
||||
REQUIRE(addr != NULL);
|
||||
@@ -2904,8 +2938,8 @@ isc_socket_connect(isc_socket_t *sock, isc_sockaddr_t *addr,
|
||||
|
||||
sock->connected = 0;
|
||||
|
||||
UNEXPECTED_ERROR(__FILE__, __LINE__, "%d/%s",
|
||||
errno, strerror(errno));
|
||||
isc__strerror(errno, strbuf, sizeof(strbuf));
|
||||
UNEXPECTED_ERROR(__FILE__, __LINE__, "%d/%s", errno, strbuf);
|
||||
|
||||
UNLOCK(&sock->lock);
|
||||
isc_event_free((isc_event_t **)&dev);
|
||||
@@ -2967,6 +3001,7 @@ internal_connect(isc_task_t *me, isc_event_t *ev) {
|
||||
isc_task_t *task;
|
||||
int cc;
|
||||
ISC_SOCKADDR_LEN_T optlen;
|
||||
char strbuf[ISC_STRERRORSIZE];
|
||||
|
||||
UNUSED(me);
|
||||
INSIST(ev->ev_type == ISC_SOCKEVENT_INTW);
|
||||
@@ -3046,9 +3081,10 @@ internal_connect(isc_task_t *me, isc_event_t *ev) {
|
||||
#undef ERROR_MATCH
|
||||
default:
|
||||
dev->result = ISC_R_UNEXPECTED;
|
||||
isc__strerror(errno, strbuf, sizeof(strbuf));
|
||||
UNEXPECTED_ERROR(__FILE__, __LINE__,
|
||||
"internal_connect: connect() %s",
|
||||
strerror(errno));
|
||||
strbuf);
|
||||
}
|
||||
} else {
|
||||
dev->result = ISC_R_SUCCESS;
|
||||
@@ -3090,6 +3126,7 @@ isc_result_t
|
||||
isc_socket_getsockname(isc_socket_t *sock, isc_sockaddr_t *addressp) {
|
||||
ISC_SOCKADDR_LEN_T len;
|
||||
isc_result_t ret;
|
||||
char strbuf[ISC_STRERRORSIZE];
|
||||
|
||||
REQUIRE(VALID_SOCKET(sock));
|
||||
REQUIRE(addressp != NULL);
|
||||
@@ -3105,8 +3142,9 @@ isc_socket_getsockname(isc_socket_t *sock, isc_sockaddr_t *addressp) {
|
||||
|
||||
len = sizeof addressp->type;
|
||||
if (getsockname(sock->fd, &addressp->type.sa, (void *)&len) < 0) {
|
||||
UNEXPECTED_ERROR(__FILE__, __LINE__,
|
||||
"getsockname: %s", strerror(errno));
|
||||
isc__strerror(errno, strbuf, sizeof(strbuf));
|
||||
UNEXPECTED_ERROR(__FILE__, __LINE__, "getsockname: %s",
|
||||
strbuf);
|
||||
ret = ISC_R_UNEXPECTED;
|
||||
goto out;
|
||||
}
|
||||
|
||||
@@ -15,7 +15,7 @@
|
||||
* WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
|
||||
*/
|
||||
|
||||
/* $Id: strerror.c,v 1.1 2001/08/30 04:33:19 marka Exp $ */
|
||||
/* $Id: strerror.c,v 1.1.2.1 2001/10/22 23:28:25 gson Exp $ */
|
||||
|
||||
#include <config.h>
|
||||
|
||||
@@ -62,9 +62,7 @@ isc__strerror(int num, char *buf, size_t size) {
|
||||
return (buf);
|
||||
#else
|
||||
unsigned int unum = num;
|
||||
isc_once_t once = ISC_ONCE_INIT;
|
||||
static lock;
|
||||
|
||||
|
||||
REQUIRE(buf != NULL);
|
||||
|
||||
if (num >= 0 && num < sys_nerr)
|
||||
|
||||
+8
-3
@@ -15,7 +15,7 @@
|
||||
* WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
|
||||
*/
|
||||
|
||||
/* $Id: time.c,v 1.34.2.4 2001/09/06 00:34:06 marka Exp $ */
|
||||
/* $Id: time.c,v 1.34.2.5 2001/10/22 23:28:26 gson Exp $ */
|
||||
|
||||
#include <config.h>
|
||||
|
||||
@@ -28,6 +28,7 @@
|
||||
|
||||
#include <isc/log.h>
|
||||
#include <isc/print.h>
|
||||
#include <isc/strerror.h>
|
||||
#include <isc/string.h>
|
||||
#include <isc/time.h>
|
||||
#include <isc/util.h>
|
||||
@@ -142,11 +143,13 @@ isc_time_isepoch(isc_time_t *t) {
|
||||
isc_result_t
|
||||
isc_time_now(isc_time_t *t) {
|
||||
struct timeval tv;
|
||||
char strbuf[ISC_STRERRORSIZE];
|
||||
|
||||
REQUIRE(t != NULL);
|
||||
|
||||
if (gettimeofday(&tv, NULL) == -1) {
|
||||
UNEXPECTED_ERROR(__FILE__, __LINE__, "%s", strerror(errno));
|
||||
isc__strerror(errno, strbuf, sizeof(strbuf));
|
||||
UNEXPECTED_ERROR(__FILE__, __LINE__, "%s", strbuf);
|
||||
return (ISC_R_UNEXPECTED);
|
||||
}
|
||||
|
||||
@@ -182,13 +185,15 @@ isc_time_now(isc_time_t *t) {
|
||||
isc_result_t
|
||||
isc_time_nowplusinterval(isc_time_t *t, isc_interval_t *i) {
|
||||
struct timeval tv;
|
||||
char strbuf[ISC_STRERRORSIZE];
|
||||
|
||||
REQUIRE(t != NULL);
|
||||
REQUIRE(i != NULL);
|
||||
INSIST(i->nanoseconds < NS_PER_S);
|
||||
|
||||
if (gettimeofday(&tv, NULL) == -1) {
|
||||
UNEXPECTED_ERROR(__FILE__, __LINE__, "%s", strerror(errno));
|
||||
isc__strerror(errno, strbuf, sizeof(strbuf));
|
||||
UNEXPECTED_ERROR(__FILE__, __LINE__, "%s", strbuf);
|
||||
return (ISC_R_UNEXPECTED);
|
||||
}
|
||||
|
||||
|
||||
+44
-54
@@ -15,7 +15,7 @@
|
||||
* WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
|
||||
*/
|
||||
|
||||
/* $Id: socket.c,v 1.5 2001/07/17 20:29:31 gson Exp $ */
|
||||
/* $Id: socket.c,v 1.5.2.1 2001/09/17 22:28:57 gson Exp $ */
|
||||
|
||||
|
||||
#define MAKE_EXTERNAL 1
|
||||
@@ -27,6 +27,8 @@
|
||||
#define _WINSOCKAPI_ /* Prevent inclusion of winsock.h in windows.h */
|
||||
#endif
|
||||
|
||||
#include "errno2result.h"
|
||||
|
||||
#include <errno.h>
|
||||
#include <stddef.h>
|
||||
#include <stdlib.h>
|
||||
@@ -69,8 +71,8 @@
|
||||
* work around it here.
|
||||
*/
|
||||
#define SOFT_ERROR(e) ((e) == EAGAIN || \
|
||||
(e) == EWOULDBLOCK || \
|
||||
(e) == EINTR || \
|
||||
(e) == WSAEWOULDBLOCK || \
|
||||
(e) == WSAEINTR || \
|
||||
(e) == 0)
|
||||
|
||||
#define DLVL(x) ISC_LOGCATEGORY_GENERAL, ISC_LOGMODULE_SOCKET, ISC_LOG_DEBUG(x)
|
||||
@@ -317,14 +319,7 @@ internal_sendmsg(int sock, const struct msghdr *msg, int flags) {
|
||||
BytesSent = -1;
|
||||
/* There is an error... */
|
||||
Error = WSAGetLastError();
|
||||
if (Error == WSAEWOULDBLOCK) {
|
||||
|
||||
/*
|
||||
* WSAEWOULDBLOCK means we have to wait for an FD_WRITE
|
||||
* before we can send.
|
||||
*/
|
||||
errno = EWOULDBLOCK;
|
||||
} else if (Error == WSA_IO_PENDING) {
|
||||
if (Error == WSA_IO_PENDING) {
|
||||
/* Overlapped send successfully initiated. */
|
||||
errno = EAGAIN;
|
||||
} else {
|
||||
@@ -997,7 +992,7 @@ doio_recv(isc_socket_t *sock, isc_socketevent_t *dev) {
|
||||
ISC_MSG_DOIORECV,
|
||||
"doio_recv: internal_recvmsg(%d) %d bytes, "
|
||||
"err %d/%s",
|
||||
sock->fd, cc, errno, strerror(errno));
|
||||
sock->fd, cc, errno, NTstrerror(errno));
|
||||
|
||||
#define SOFT_OR_HARD(_system, _isc) \
|
||||
if (errno == _system) { \
|
||||
@@ -1013,10 +1008,14 @@ doio_recv(isc_socket_t *sock, isc_socketevent_t *dev) {
|
||||
return (DOIO_HARD); \
|
||||
}
|
||||
|
||||
SOFT_OR_HARD(ECONNREFUSED, ISC_R_CONNREFUSED);
|
||||
SOFT_OR_HARD(ENETUNREACH, ISC_R_NETUNREACH);
|
||||
SOFT_OR_HARD(EHOSTUNREACH, ISC_R_HOSTUNREACH);
|
||||
ALWAYS_HARD(ENOBUFS, ISC_R_NORESOURCES);
|
||||
SOFT_OR_HARD(WSAECONNREFUSED, ISC_R_CONNREFUSED);
|
||||
SOFT_OR_HARD(WSAENETUNREACH, ISC_R_NETUNREACH);
|
||||
SOFT_OR_HARD(WSAEHOSTUNREACH, ISC_R_HOSTUNREACH);
|
||||
SOFT_OR_HARD(WSAECONNRESET, ISC_R_CONNECTIONRESET);
|
||||
SOFT_OR_HARD(WSAENETRESET, ISC_R_CONNECTIONRESET);
|
||||
SOFT_OR_HARD(WSAEDISCON, ISC_R_CONNECTIONRESET);
|
||||
SOFT_OR_HARD(WSAENETDOWN, ISC_R_NETDOWN);
|
||||
ALWAYS_HARD(WSAENOBUFS, ISC_R_NORESOURCES);
|
||||
|
||||
#undef SOFT_OR_HARD
|
||||
#undef ALWAYS_HARD
|
||||
@@ -1147,16 +1146,18 @@ doio_send(isc_socket_t *sock, isc_socketevent_t *dev) {
|
||||
return (DOIO_HARD); \
|
||||
}
|
||||
|
||||
SOFT_OR_HARD(EACCES, ISC_R_NOPERM);
|
||||
SOFT_OR_HARD(EAFNOSUPPORT, ISC_R_ADDRNOTAVAIL);
|
||||
SOFT_OR_HARD(ECONNREFUSED, ISC_R_CONNREFUSED);
|
||||
ALWAYS_HARD(EADDRNOTAVAIL, ISC_R_ADDRNOTAVAIL);
|
||||
ALWAYS_HARD(EHOSTUNREACH, ISC_R_HOSTUNREACH);
|
||||
#ifdef EHOSTDOWN
|
||||
ALWAYS_HARD(EHOSTDOWN, ISC_R_HOSTUNREACH);
|
||||
#endif
|
||||
ALWAYS_HARD(ENETUNREACH, ISC_R_NETUNREACH);
|
||||
ALWAYS_HARD(ENOBUFS, ISC_R_NORESOURCES);
|
||||
SOFT_OR_HARD(WSAEACCES, ISC_R_NOPERM);
|
||||
SOFT_OR_HARD(WSAEAFNOSUPPORT, ISC_R_ADDRNOTAVAIL);
|
||||
SOFT_OR_HARD(WSAECONNREFUSED, ISC_R_CONNREFUSED);
|
||||
SOFT_OR_HARD(WSAECONNRESET, ISC_R_CONNECTIONRESET);
|
||||
SOFT_OR_HARD(WSAENETRESET, ISC_R_CONNECTIONRESET);
|
||||
SOFT_OR_HARD(WSAEDISCON, ISC_R_CONNECTIONRESET);
|
||||
SOFT_OR_HARD(WSAENETDOWN, ISC_R_NETDOWN);
|
||||
ALWAYS_HARD(WSAEADDRNOTAVAIL, ISC_R_ADDRNOTAVAIL);
|
||||
ALWAYS_HARD(WSAEHOSTUNREACH, ISC_R_HOSTUNREACH);
|
||||
ALWAYS_HARD(WSAEHOSTDOWN, ISC_R_HOSTUNREACH);
|
||||
ALWAYS_HARD(WSAENETUNREACH, ISC_R_NETUNREACH);
|
||||
ALWAYS_HARD(WSAENOBUFS, ISC_R_NORESOURCES);
|
||||
ALWAYS_HARD(EPERM, ISC_R_HOSTUNREACH);
|
||||
ALWAYS_HARD(EPIPE, ISC_R_NOTCONNECTED);
|
||||
|
||||
@@ -1391,13 +1392,6 @@ isc_socket_create(isc_socketmgr_t *manager, int pf, isc_sockettype_t type,
|
||||
case EPROTONOSUPPORT:
|
||||
case EPFNOSUPPORT:
|
||||
case EAFNOSUPPORT:
|
||||
#ifdef LINUX
|
||||
/*
|
||||
* Linux 2.2 (and maybe others) return EINVAL instead of
|
||||
* EAFNOSUPPORT.
|
||||
*/
|
||||
case EINVAL:
|
||||
#endif
|
||||
return (ISC_R_FAMILYNOSUPPORT);
|
||||
|
||||
default:
|
||||
@@ -2914,16 +2908,14 @@ isc_socket_connect(isc_socket_t *sock, isc_sockaddr_t *addr,
|
||||
|
||||
switch (errno) {
|
||||
#define ERROR_MATCH(a, b) case a: dev->result = b; goto err_exit;
|
||||
ERROR_MATCH(EACCES, ISC_R_NOPERM);
|
||||
ERROR_MATCH(EADDRNOTAVAIL, ISC_R_ADDRNOTAVAIL);
|
||||
ERROR_MATCH(EAFNOSUPPORT, ISC_R_ADDRNOTAVAIL);
|
||||
ERROR_MATCH(ECONNREFUSED, ISC_R_CONNREFUSED);
|
||||
ERROR_MATCH(EHOSTUNREACH, ISC_R_HOSTUNREACH);
|
||||
#ifdef EHOSTDOWN
|
||||
ERROR_MATCH(EHOSTDOWN, ISC_R_HOSTUNREACH);
|
||||
#endif
|
||||
ERROR_MATCH(ENETUNREACH, ISC_R_NETUNREACH);
|
||||
ERROR_MATCH(ENOBUFS, ISC_R_NORESOURCES);
|
||||
ERROR_MATCH(WSAEACCES, ISC_R_NOPERM);
|
||||
ERROR_MATCH(WSAEADDRNOTAVAIL, ISC_R_ADDRNOTAVAIL);
|
||||
ERROR_MATCH(WSAEAFNOSUPPORT, ISC_R_ADDRNOTAVAIL);
|
||||
ERROR_MATCH(WSAECONNREFUSED, ISC_R_CONNREFUSED);
|
||||
ERROR_MATCH(WSAEHOSTUNREACH, ISC_R_HOSTUNREACH);
|
||||
ERROR_MATCH(WSAEHOSTDOWN, ISC_R_HOSTUNREACH);
|
||||
ERROR_MATCH(WSAENETUNREACH, ISC_R_NETUNREACH);
|
||||
ERROR_MATCH(WSAENOBUFS, ISC_R_NORESOURCES);
|
||||
ERROR_MATCH(EPERM, ISC_R_HOSTUNREACH);
|
||||
ERROR_MATCH(EPIPE, ISC_R_NOTCONNECTED);
|
||||
#undef ERROR_MATCH
|
||||
@@ -3057,19 +3049,17 @@ internal_connect(isc_task_t *me, isc_event_t *ev) {
|
||||
*/
|
||||
switch (errno) {
|
||||
#define ERROR_MATCH(a, b) case a: dev->result = b; break;
|
||||
ERROR_MATCH(EACCES, ISC_R_NOPERM);
|
||||
ERROR_MATCH(EADDRNOTAVAIL, ISC_R_ADDRNOTAVAIL);
|
||||
ERROR_MATCH(EAFNOSUPPORT, ISC_R_ADDRNOTAVAIL);
|
||||
ERROR_MATCH(ECONNREFUSED, ISC_R_CONNREFUSED);
|
||||
ERROR_MATCH(EHOSTUNREACH, ISC_R_HOSTUNREACH);
|
||||
#ifdef EHOSTDOWN
|
||||
ERROR_MATCH(EHOSTDOWN, ISC_R_HOSTUNREACH);
|
||||
#endif
|
||||
ERROR_MATCH(ENETUNREACH, ISC_R_NETUNREACH);
|
||||
ERROR_MATCH(ENOBUFS, ISC_R_NORESOURCES);
|
||||
ERROR_MATCH(WSAEACCES, ISC_R_NOPERM);
|
||||
ERROR_MATCH(WSAEADDRNOTAVAIL, ISC_R_ADDRNOTAVAIL);
|
||||
ERROR_MATCH(WSAEAFNOSUPPORT, ISC_R_ADDRNOTAVAIL);
|
||||
ERROR_MATCH(WSAECONNREFUSED, ISC_R_CONNREFUSED);
|
||||
ERROR_MATCH(WSAEHOSTUNREACH, ISC_R_HOSTUNREACH);
|
||||
ERROR_MATCH(WSAEHOSTDOWN, ISC_R_HOSTUNREACH);
|
||||
ERROR_MATCH(WSAENETUNREACH, ISC_R_NETUNREACH);
|
||||
ERROR_MATCH(WSAENOBUFS, ISC_R_NORESOURCES);
|
||||
ERROR_MATCH(EPERM, ISC_R_HOSTUNREACH);
|
||||
ERROR_MATCH(EPIPE, ISC_R_NOTCONNECTED);
|
||||
ERROR_MATCH(ETIMEDOUT, ISC_R_TIMEDOUT);
|
||||
ERROR_MATCH(WSAETIMEDOUT, ISC_R_TIMEDOUT);
|
||||
#undef ERROR_MATCH
|
||||
default:
|
||||
dev->result = ISC_R_UNEXPECTED;
|
||||
|
||||
@@ -15,7 +15,7 @@
|
||||
* WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
|
||||
*/
|
||||
|
||||
/* $Id: time.c,v 1.24.2.2 2001/09/05 17:32:05 gson Exp $ */
|
||||
/* $Id: time.c,v 1.24.2.3 2001/10/01 01:42:38 gson Exp $ */
|
||||
|
||||
#include <config.h>
|
||||
|
||||
@@ -227,7 +227,7 @@ isc_time_formattimestamp(const isc_time_t *t, char *buf, unsigned int len) {
|
||||
FileTimeToSystemTime(&localft, &st))
|
||||
{
|
||||
snprintf(buf, len, "%s %2u %02u:%02u:%02u.%03u",
|
||||
months[st.wMonth], st.wDay, st.wHour, st.wMinute,
|
||||
months[st.wMonth - 1], st.wDay, st.wHour, st.wMinute,
|
||||
st.wSecond, st.wMilliseconds);
|
||||
} else {
|
||||
snprintf(buf, len, badtime);
|
||||
|
||||
+7
-5
@@ -15,7 +15,7 @@
|
||||
* WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
|
||||
*/
|
||||
|
||||
/* $Id: check.c,v 1.14.2.1 2001/09/04 19:15:36 gson Exp $ */
|
||||
/* $Id: check.c,v 1.14.2.4 2001/10/11 17:12:42 gson Exp $ */
|
||||
|
||||
#include <config.h>
|
||||
|
||||
@@ -114,7 +114,7 @@ check_zoneconf(cfg_obj_t *zconfig, isc_symtab_t *symtab, isc_log_t *logctx) {
|
||||
|
||||
static optionstable options[] = {
|
||||
{ "allow-query", MASTERZONE | SLAVEZONE | STUBZONE },
|
||||
{ "allow-transfer", MASTERZONE | SLAVEZONE | STUBZONE },
|
||||
{ "allow-transfer", MASTERZONE | SLAVEZONE },
|
||||
{ "notify", MASTERZONE | SLAVEZONE },
|
||||
{ "also-notify", MASTERZONE | SLAVEZONE },
|
||||
{ "dialup", MASTERZONE | SLAVEZONE | STUBZONE },
|
||||
@@ -122,8 +122,10 @@ check_zoneconf(cfg_obj_t *zconfig, isc_symtab_t *symtab, isc_log_t *logctx) {
|
||||
{ "forwarders", MASTERZONE | SLAVEZONE | STUBZONE | FORWARDZONE},
|
||||
{ "maintain-ixfr-base", MASTERZONE | SLAVEZONE },
|
||||
{ "max-ixfr-log-size", MASTERZONE | SLAVEZONE },
|
||||
{ "transfer-source", MASTERZONE | SLAVEZONE | STUBZONE },
|
||||
{ "transfer-source-v6", MASTERZONE | SLAVEZONE | STUBZONE },
|
||||
{ "notify-source", MASTERZONE | SLAVEZONE },
|
||||
{ "notify-source-v6", MASTERZONE | SLAVEZONE },
|
||||
{ "transfer-source", SLAVEZONE | STUBZONE },
|
||||
{ "transfer-source-v6", SLAVEZONE | STUBZONE },
|
||||
{ "max-transfer-time-in", SLAVEZONE | STUBZONE },
|
||||
{ "max-transfer-time-out", MASTERZONE | SLAVEZONE },
|
||||
{ "max-transfer-idle-in", SLAVEZONE | STUBZONE },
|
||||
@@ -374,7 +376,7 @@ check_viewconf(cfg_obj_t *vconfig, const char *vname, isc_log_t *logctx,
|
||||
}
|
||||
|
||||
tresult = cfg_check_key(key, logctx);
|
||||
if (result != ISC_R_SUCCESS) {
|
||||
if (tresult != ISC_R_SUCCESS) {
|
||||
isc_symtab_destroy(&symtab);
|
||||
return (tresult);
|
||||
}
|
||||
|
||||
@@ -15,7 +15,7 @@
|
||||
* WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
|
||||
*/
|
||||
|
||||
/* $Id: log.h,v 1.3 2001/03/13 03:04:08 gson Exp $ */
|
||||
/* $Id: log.h,v 1.3.2.1 2001/10/16 05:58:29 marka Exp $ */
|
||||
|
||||
#ifndef ISCCFG_LOG_H
|
||||
#define ISCCFG_LOG_H 1
|
||||
@@ -23,8 +23,8 @@
|
||||
#include <isc/lang.h>
|
||||
#include <isc/log.h>
|
||||
|
||||
extern isc_logcategory_t cfg_categories[];
|
||||
extern isc_logmodule_t cfg_modules[];
|
||||
LIBISCCFG_EXTERNAL_DATA extern isc_logcategory_t cfg_categories[];
|
||||
LIBISCCFG_EXTERNAL_DATA extern isc_logmodule_t cfg_modules[];
|
||||
|
||||
#define CFG_LOGCATEGORY_CONFIG (&cfg_categories[0])
|
||||
|
||||
|
||||
+3
-3
@@ -15,7 +15,7 @@
|
||||
* WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
|
||||
*/
|
||||
|
||||
/* $Id: log.c,v 1.2 2001/03/13 03:04:05 gson Exp $ */
|
||||
/* $Id: log.c,v 1.2.2.1 2001/10/16 05:58:28 marka Exp $ */
|
||||
|
||||
#include <config.h>
|
||||
|
||||
@@ -27,7 +27,7 @@
|
||||
* When adding a new category, be sure to add the appropriate
|
||||
* #define to <isccfg/log.h>.
|
||||
*/
|
||||
isc_logcategory_t cfg_categories[] = {
|
||||
LIBISCCFG_EXTERNAL_DATA isc_logcategory_t cfg_categories[] = {
|
||||
{ "config", 0 },
|
||||
{ NULL, 0 }
|
||||
};
|
||||
@@ -36,7 +36,7 @@ isc_logcategory_t cfg_categories[] = {
|
||||
* When adding a new module, be sure to add the appropriate
|
||||
* #define to <isccfg/log.h>.
|
||||
*/
|
||||
isc_logmodule_t cfg_modules[] = {
|
||||
LIBISCCFG_EXTERNAL_DATA isc_logmodule_t cfg_modules[] = {
|
||||
{ "isccfg/parser", 0 },
|
||||
{ NULL, 0 }
|
||||
};
|
||||
|
||||
+6
-5
@@ -15,7 +15,7 @@
|
||||
* WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
|
||||
*/
|
||||
|
||||
/* $Id: parser.c,v 1.70.2.2 2001/09/06 23:06:43 marka Exp $ */
|
||||
/* $Id: parser.c,v 1.70.2.4 2001/10/23 02:42:00 marka Exp $ */
|
||||
|
||||
#include <config.h>
|
||||
|
||||
@@ -2780,14 +2780,16 @@ token_addr(cfg_parser_t *pctx, unsigned int flags, isc_netaddr_t *na) {
|
||||
}
|
||||
}
|
||||
}
|
||||
return (ISC_R_NOTFOUND); /* XXX */
|
||||
return (ISC_R_UNEXPECTEDTOKEN);
|
||||
}
|
||||
|
||||
static isc_result_t
|
||||
get_addr(cfg_parser_t *pctx, unsigned int flags, isc_netaddr_t *na) {
|
||||
isc_result_t result;
|
||||
CHECK(cfg_gettoken(pctx, 0));
|
||||
CHECK(token_addr(pctx, flags, na));
|
||||
result = token_addr(pctx, flags, na);
|
||||
if (result == ISC_R_UNEXPECTEDTOKEN)
|
||||
parser_error(pctx, LOG_NEAR, "expected IP address");
|
||||
cleanup:
|
||||
return (result);
|
||||
}
|
||||
@@ -2943,7 +2945,6 @@ parse_netaddr(cfg_parser_t *pctx, const cfg_type_t *type, cfg_obj_t **ret) {
|
||||
*ret = obj;
|
||||
return (ISC_R_SUCCESS);
|
||||
cleanup:
|
||||
parser_error(pctx, LOG_NEAR, "expected IP address");
|
||||
CLEANUP_OBJ(obj);
|
||||
return (result);
|
||||
}
|
||||
@@ -3769,7 +3770,7 @@ free_noop(cfg_parser_t *pctx, cfg_obj_t *obj) {
|
||||
/*
|
||||
* Data and functions for printing grammar summaries.
|
||||
*/
|
||||
struct flagtext {
|
||||
static struct flagtext {
|
||||
unsigned int flag;
|
||||
const char *text;
|
||||
} flagtexts[] = {
|
||||
|
||||
+2
-2
@@ -15,7 +15,7 @@
|
||||
# NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION
|
||||
# WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
|
||||
|
||||
# $Id: kit.sh,v 1.20 2001/05/30 21:18:07 bwelling Exp $
|
||||
# $Id: kit.sh,v 1.20.2.1 2001/10/19 01:23:23 marka Exp $
|
||||
|
||||
# Make a release kit
|
||||
#
|
||||
@@ -97,7 +97,7 @@ sh util/sanitize_all.sh
|
||||
# we still delete them from releases just in case something
|
||||
# gets accidentally resurrected.
|
||||
|
||||
rm -rf TODO conftools util doc/design doc/dev doc/expired \
|
||||
rm -rf EXCLUDED TODO conftools util doc/design doc/dev doc/expired \
|
||||
doc/html doc/todo doc/private bin/lwresd doc/man \
|
||||
lib/lwres/man/resolver.5 \
|
||||
bin/tests/system/relay lib/cfg
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
# $Id: version,v 1.26.2.2 2001/09/12 21:11:24 gson Exp $
|
||||
# $Id: version,v 1.26.2.7 2001/10/23 17:06:33 gson Exp $
|
||||
#
|
||||
# This file must follow /bin/sh rules. It is imported directly via
|
||||
# configure.
|
||||
@@ -7,4 +7,4 @@ MAJORVER=9
|
||||
MINORVER=2
|
||||
PATCHVER=0
|
||||
RELEASETYPE=rc
|
||||
RELEASEVER=3
|
||||
RELEASEVER=8
|
||||
|
||||
Reference in New Issue
Block a user