Compare commits
1793 Commits
curl-7_9_7
...
curl-7_11_
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
fadf077502 | ||
|
|
863c7c7282 | ||
|
|
3a85b187c6 | ||
|
|
296ccc35d2 | ||
|
|
68826c25f8 | ||
|
|
5e2fcc1f74 | ||
|
|
e262a7265a | ||
|
|
945c6f7279 | ||
|
|
6ddec1f169 | ||
|
|
9beae7693a | ||
|
|
d204c62c39 | ||
|
|
13dd99842a | ||
|
|
2431b2caff | ||
|
|
f44bc85545 | ||
|
|
52df162c2f | ||
|
|
60787171c7 | ||
|
|
61e3d75def | ||
|
|
27b7220f1b | ||
|
|
a275365c72 | ||
|
|
80ef1bad86 | ||
|
|
686c70c5b5 | ||
|
|
f94502ecba | ||
|
|
4c70c3e820 | ||
|
|
84990cb176 | ||
|
|
eabbb5331a | ||
|
|
898bf8bb0b | ||
|
|
3d66d10fbe | ||
|
|
7052daf475 | ||
|
|
846d203d31 | ||
|
|
7561cbda0a | ||
|
|
c5c89862b2 | ||
|
|
3a70d686ee | ||
|
|
2d567af069 | ||
|
|
d2f7037ff7 | ||
|
|
c3614fa6a3 | ||
|
|
f1da9e508e | ||
|
|
9e80356dd5 | ||
|
|
4a4295290d | ||
|
|
57f67d0241 | ||
|
|
d50c9218c7 | ||
|
|
3c1bb36193 | ||
|
|
16c747da76 | ||
|
|
baf948db40 | ||
|
|
9906eb8e19 | ||
|
|
44d931dbc7 | ||
|
|
d0ad607c46 | ||
|
|
36f76396ea | ||
|
|
1cb3cd1463 | ||
|
|
a76235c008 | ||
|
|
71b3cc08a6 | ||
|
|
d8dd9b0008 | ||
|
|
35fd3a3139 | ||
|
|
90be1d157e | ||
|
|
8433068f3a | ||
|
|
e043cf22e2 | ||
|
|
206039cb76 | ||
|
|
4ba05e1128 | ||
|
|
0ae7e93299 | ||
|
|
5baf747e67 | ||
|
|
3a61c98b65 | ||
|
|
5173bab0bb | ||
|
|
b291bbc9a6 | ||
|
|
11e8600390 | ||
|
|
93aea06ed9 | ||
|
|
9e5aee63c7 | ||
|
|
60cc5a3f27 | ||
|
|
5ac047dc39 | ||
|
|
6cd280fdfb | ||
|
|
c8ac7a0d95 | ||
|
|
44031f32a1 | ||
|
|
7237221108 | ||
|
|
ad36138f52 | ||
|
|
8a16e48a6c | ||
|
|
4c3a2318ae | ||
|
|
7beac70644 | ||
|
|
b16dfbee99 | ||
|
|
202e54cf9c | ||
|
|
e0d9e7a255 | ||
|
|
c2bc5662b5 | ||
|
|
f4569f10f0 | ||
|
|
23cfb9a832 | ||
|
|
b921777057 | ||
|
|
ff6d9a1109 | ||
|
|
053f6c85ef | ||
|
|
9970fb863d | ||
|
|
feeef39ebf | ||
|
|
7bf11297fe | ||
|
|
292ef5fabb | ||
|
|
2b277f85f5 | ||
|
|
9363d94f9b | ||
|
|
ea1c98dccf | ||
|
|
1109a4a629 | ||
|
|
2d01740e1a | ||
|
|
979a1e6237 | ||
|
|
b60e0fa97e | ||
|
|
41c6f68d94 | ||
|
|
411d0cb715 | ||
|
|
8b3946efda | ||
|
|
763d6a8524 | ||
|
|
232b051254 | ||
|
|
aef6208bd7 | ||
|
|
50c5a69d70 | ||
|
|
9ebe4ab60c | ||
|
|
a0edfb90c2 | ||
|
|
93a8572928 | ||
|
|
591fe66f18 | ||
|
|
a99e6445bf | ||
|
|
f3e5d4a602 | ||
|
|
1d6248baa4 | ||
|
|
61685fee7e | ||
|
|
55e4d79111 | ||
|
|
84b3c3b569 | ||
|
|
4ea14b25df | ||
|
|
4223f602ed | ||
|
|
8146d46386 | ||
|
|
36a2fac79f | ||
|
|
58cf108251 | ||
|
|
6c6e5522cb | ||
|
|
aff9a817b4 | ||
|
|
f4e987cd19 | ||
|
|
b3afb31181 | ||
|
|
a3ad4295c9 | ||
|
|
2450506c83 | ||
|
|
23a6041698 | ||
|
|
979ba8a8b5 | ||
|
|
cd9dea3091 | ||
|
|
989ec98ebd | ||
|
|
d262d0a62a | ||
|
|
15b775e126 | ||
|
|
3788f25eac | ||
|
|
5b8852107b | ||
|
|
cfe53768dd | ||
|
|
947e656367 | ||
|
|
50e7545118 | ||
|
|
0839d6e6bc | ||
|
|
bbafc27b42 | ||
|
|
a7de09a966 | ||
|
|
1410deb8f7 | ||
|
|
7dea4acc46 | ||
|
|
a3c09e636d | ||
|
|
a025425d06 | ||
|
|
4eb9ac0821 | ||
|
|
77a5e7c646 | ||
|
|
8f0abd31c5 | ||
|
|
a13f85fb33 | ||
|
|
3b048880ad | ||
|
|
24ac5b8a6c | ||
|
|
9bc97b2d3c | ||
|
|
9825d81973 | ||
|
|
1e012c5259 | ||
|
|
68c508976f | ||
|
|
4d8a53da2f | ||
|
|
29d3deaee8 | ||
|
|
6c56340e1a | ||
|
|
134ab91358 | ||
|
|
fb927939e2 | ||
|
|
ac114ed45b | ||
|
|
d46a735418 | ||
|
|
5a87203fe4 | ||
|
|
90e9c64f72 | ||
|
|
8742d39060 | ||
|
|
821302bcf3 | ||
|
|
f68219ddaa | ||
|
|
7e3cd82b50 | ||
|
|
bc372815a8 | ||
|
|
391a37ebbf | ||
|
|
a61dc1e9c5 | ||
|
|
2e0d1a55c6 | ||
|
|
dfd1a636b4 | ||
|
|
ee337309cf | ||
|
|
437afe0767 | ||
|
|
0ab2dff69c | ||
|
|
bff59dac12 | ||
|
|
ea53aed841 | ||
|
|
e2555cf83d | ||
|
|
f7c8a57206 | ||
|
|
02bf6660bf | ||
|
|
6c8e6df38f | ||
|
|
96d3db1687 | ||
|
|
3e43105ff1 | ||
|
|
8ccc1148d9 | ||
|
|
06c38330ba | ||
|
|
0f4d042d3e | ||
|
|
c79de8d86e | ||
|
|
d670f308a6 | ||
|
|
e64e9d7fed | ||
|
|
ad5ead8bed | ||
|
|
1b99d33b59 | ||
|
|
800052dc50 | ||
|
|
d4629fd395 | ||
|
|
2c22feced2 | ||
|
|
41688a1642 | ||
|
|
2cf209d3f7 | ||
|
|
909887f310 | ||
|
|
d1d417664e | ||
|
|
7d7e99104e | ||
|
|
3eeea48839 | ||
|
|
cd653f1be9 | ||
|
|
5751796ddd | ||
|
|
012c4ee1fa | ||
|
|
426954ff95 | ||
|
|
471c30372b | ||
|
|
f6413f2cb4 | ||
|
|
e80bdd66f9 | ||
|
|
d083fac1fc | ||
|
|
1d85f950bf | ||
|
|
1d977b7848 | ||
|
|
b3803903d1 | ||
|
|
efc9410796 | ||
|
|
45614d54c6 | ||
|
|
50e690f2dd | ||
|
|
2f9f843e8a | ||
|
|
15d41dfbcd | ||
|
|
bc01ad5b9e | ||
|
|
dadc1026f1 | ||
|
|
d8cf2d42c0 | ||
|
|
96d7a95ce4 | ||
|
|
d5d55a856e | ||
|
|
dac045029a | ||
|
|
1e98727c55 | ||
|
|
1c700b5a5c | ||
|
|
af9dc9f128 | ||
|
|
4874aa6986 | ||
|
|
c0336dcc52 | ||
|
|
78fb476677 | ||
|
|
3fed12a203 | ||
|
|
ed2b831afe | ||
|
|
f481b3e1dc | ||
|
|
2769f3b245 | ||
|
|
e9a545c710 | ||
|
|
edce444551 | ||
|
|
7bee4140e8 | ||
|
|
cc48658564 | ||
|
|
79e4aee185 | ||
|
|
4d28012468 | ||
|
|
e1d01045e2 | ||
|
|
0717e4690e | ||
|
|
a0a5668dbd | ||
|
|
bfc7d6c11b | ||
|
|
dfe0118033 | ||
|
|
a701f3dddf | ||
|
|
f99a1d4e82 | ||
|
|
43bb20461f | ||
|
|
b9d3c71178 | ||
|
|
1e251a64f3 | ||
|
|
776f0bd95e | ||
|
|
cd9aabb474 | ||
|
|
e42f806b3f | ||
|
|
0850aec780 | ||
|
|
ad77f760cf | ||
|
|
a50d2a45d7 | ||
|
|
17a834bc63 | ||
|
|
c10bc0ef12 | ||
|
|
f9b1981bd7 | ||
|
|
451d34ce21 | ||
|
|
445950aa70 | ||
|
|
8be602cdfd | ||
|
|
3dd40cca9a | ||
|
|
f1445ea228 | ||
|
|
c40309ae21 | ||
|
|
fe0b5801ec | ||
|
|
3de511b248 | ||
|
|
b1aa8eb7ef | ||
|
|
967cb4d75e | ||
|
|
bcbaeaf7d5 | ||
|
|
41be41358e | ||
|
|
ecb818805b | ||
|
|
d95f7129d5 | ||
|
|
6294b356fb | ||
|
|
3e64a76498 | ||
|
|
dec9907c16 | ||
|
|
527850928d | ||
|
|
eee3f13134 | ||
|
|
80d2be541d | ||
|
|
472c4d8616 | ||
|
|
45abf75e1e | ||
|
|
4ec4e91de0 | ||
|
|
f6645094a2 | ||
|
|
7496e87d16 | ||
|
|
bd4c081157 | ||
|
|
927e392b31 | ||
|
|
aeb5edbf07 | ||
|
|
67dcddbef7 | ||
|
|
7ffb8c6aee | ||
|
|
344c378996 | ||
|
|
445f54db57 | ||
|
|
9b7c311929 | ||
|
|
6a21a28048 | ||
|
|
0adb75114b | ||
|
|
ecfb53f06d | ||
|
|
c020ee2eb6 | ||
|
|
a3279d4baf | ||
|
|
c45f43ce32 | ||
|
|
0eb037a849 | ||
|
|
5a089f6c1f | ||
|
|
556d59dfcf | ||
|
|
79cb1400ab | ||
|
|
d1b94a5f3f | ||
|
|
a07f43d202 | ||
|
|
a717afc3a7 | ||
|
|
f023b4cc79 | ||
|
|
a7aacac5e8 | ||
|
|
decdb93ccb | ||
|
|
3e24c6a957 | ||
|
|
00d2c9d92d | ||
|
|
bd383f0c60 | ||
|
|
900cecae96 | ||
|
|
ffc58c6620 | ||
|
|
39f673874f | ||
|
|
fe291202db | ||
|
|
4606dc4158 | ||
|
|
36d6b16c23 | ||
|
|
b4d8108ba1 | ||
|
|
2c120aa05c | ||
|
|
693df0fa34 | ||
|
|
fb26b2bd98 | ||
|
|
5554f1ccba | ||
|
|
46accd62d1 | ||
|
|
41535eaea9 | ||
|
|
02437b2d51 | ||
|
|
c964aedf3b | ||
|
|
5f4fb857f0 | ||
|
|
0334509754 | ||
|
|
aad70aa24e | ||
|
|
e9c835ad06 | ||
|
|
0701b973df | ||
|
|
ec59aa259f | ||
|
|
ffc6d062d8 | ||
|
|
757a7d0851 | ||
|
|
25613503cb | ||
|
|
60ef75f2ee | ||
|
|
1cdc66d927 | ||
|
|
ba12c5deda | ||
|
|
203f66d0cb | ||
|
|
54c6f2c7c0 | ||
|
|
4cccceb034 | ||
|
|
245ab7c796 | ||
|
|
2bdf52d4c5 | ||
|
|
f991a69cce | ||
|
|
3dd26b7932 | ||
|
|
a5e22867c7 | ||
|
|
5c96266d45 | ||
|
|
fcfc6de918 | ||
|
|
da0b380655 | ||
|
|
ed7ac3c932 | ||
|
|
b5d4a71883 | ||
|
|
a9d74e6c97 | ||
|
|
d46afd2b6a | ||
|
|
ce4b8420d1 | ||
|
|
faabd44658 | ||
|
|
2fe5f5ab4b | ||
|
|
656d4b4c20 | ||
|
|
7247041e21 | ||
|
|
017a78d0c5 | ||
|
|
9010bd3831 | ||
|
|
ded884e825 | ||
|
|
b53a5e92c0 | ||
|
|
69bdb82586 | ||
|
|
4799d39be6 | ||
|
|
f32d011d90 | ||
|
|
14f795816d | ||
|
|
5987791516 | ||
|
|
db074518c3 | ||
|
|
64731b0056 | ||
|
|
debe6a1432 | ||
|
|
715c3f6482 | ||
|
|
f232baf4d2 | ||
|
|
b439e8ffb7 | ||
|
|
475166fc8b | ||
|
|
be2b742b85 | ||
|
|
640d6a5564 | ||
|
|
2e9d100d03 | ||
|
|
294adcae9d | ||
|
|
1fd16e7b04 | ||
|
|
d1c08e1d85 | ||
|
|
d7c09efeb1 | ||
|
|
b83c7ade10 | ||
|
|
7d6584e140 | ||
|
|
31b6bb6a41 | ||
|
|
b84607ff7b | ||
|
|
ac2af59880 | ||
|
|
d9f961ed2d | ||
|
|
c7f5476416 | ||
|
|
381c6c5d52 | ||
|
|
9df8f9a63d | ||
|
|
5eee801d06 | ||
|
|
80a06403e4 | ||
|
|
7ad69f59c7 | ||
|
|
83b82e4472 | ||
|
|
65dab79ca5 | ||
|
|
f0089b6291 | ||
|
|
d10508e08c | ||
|
|
630995f40a | ||
|
|
f7f7cd6cce | ||
|
|
ce7326ed09 | ||
|
|
b3591ec464 | ||
|
|
b1952e773a | ||
|
|
ce5db9a86e | ||
|
|
94568f884d | ||
|
|
d095b20d1c | ||
|
|
18b809e7e4 | ||
|
|
3f458fc650 | ||
|
|
9935d33b8e | ||
|
|
d42c6b7e78 | ||
|
|
d70550f949 | ||
|
|
679654bd47 | ||
|
|
9e3f54431d | ||
|
|
3d59934163 | ||
|
|
a77d931cd0 | ||
|
|
260c353577 | ||
|
|
8823679e70 | ||
|
|
722ece4055 | ||
|
|
cc09e31acf | ||
|
|
fe09079778 | ||
|
|
8f5b80c715 | ||
|
|
460979496e | ||
|
|
cadcc12169 | ||
|
|
22adcb9cd1 | ||
|
|
597c1fe6bc | ||
|
|
7201a5a290 | ||
|
|
c6a0bb99af | ||
|
|
622984de64 | ||
|
|
a9af971c59 | ||
|
|
171229e122 | ||
|
|
b71ca15598 | ||
|
|
1c604b7ba9 | ||
|
|
749f5387c1 | ||
|
|
7553341bad | ||
|
|
c6f11b053d | ||
|
|
7d6e2a3adb | ||
|
|
43cc844d3f | ||
|
|
941dfc502a | ||
|
|
8341e8e502 | ||
|
|
e85881d7ec | ||
|
|
c9d154ca7f | ||
|
|
5911485f38 | ||
|
|
6d6de53eb9 | ||
|
|
022996e5c7 | ||
|
|
4935853eb9 | ||
|
|
d1a3c9944e | ||
|
|
8996a7346e | ||
|
|
e4adbf4017 | ||
|
|
c29740f0d8 | ||
|
|
1a4fddb9ba | ||
|
|
af19ff51e6 | ||
|
|
5438ced6b3 | ||
|
|
2eb3ad7678 | ||
|
|
b86ad6438e | ||
|
|
81f250be59 | ||
|
|
9db5dfc15d | ||
|
|
377ce6a2c2 | ||
|
|
867c189ef7 | ||
|
|
33525ac165 | ||
|
|
5c52cacc98 | ||
|
|
e612f73374 | ||
|
|
ff5b6ff528 | ||
|
|
c86768d856 | ||
|
|
9f002b1289 | ||
|
|
0436fbe226 | ||
|
|
6494889e3b | ||
|
|
f52534522c | ||
|
|
0b615afac9 | ||
|
|
b61c25af45 | ||
|
|
bf20ed5984 | ||
|
|
9d5c22d5ae | ||
|
|
aaddfa0181 | ||
|
|
17e13acd10 | ||
|
|
5564e9a321 | ||
|
|
a0118fb390 | ||
|
|
57b6202eaa | ||
|
|
0bbe184f1f | ||
|
|
1b0af1c53a | ||
|
|
23f8692058 | ||
|
|
780652e5b6 | ||
|
|
8297ac4a28 | ||
|
|
45ef092cc2 | ||
|
|
a191fe028c | ||
|
|
343291ce37 | ||
|
|
b864e25011 | ||
|
|
24836d30f5 | ||
|
|
ba1ff79b3f | ||
|
|
09d593ade0 | ||
|
|
d1b17779a3 | ||
|
|
588b63a05b | ||
|
|
a5c2a86649 | ||
|
|
8a46c64c78 | ||
|
|
2d4c0af528 | ||
|
|
edd09a1b16 | ||
|
|
0edab55dd2 | ||
|
|
16643faaa1 | ||
|
|
881c38b38a | ||
|
|
59889d45da | ||
|
|
734c17ae56 | ||
|
|
48c1943824 | ||
|
|
9ef76fecef | ||
|
|
8aa2894bfb | ||
|
|
f40467638d | ||
|
|
2297eca103 | ||
|
|
09ccfcdcd4 | ||
|
|
bbc01c36d2 | ||
|
|
b560428492 | ||
|
|
d19134e644 | ||
|
|
951e2a6545 | ||
|
|
fcacd38036 | ||
|
|
c4aca23ec4 | ||
|
|
20943292ff | ||
|
|
b2ddfb54a7 | ||
|
|
76b9631d03 | ||
|
|
58b1437cae | ||
|
|
c611ac958e | ||
|
|
e7160459ab | ||
|
|
071fc74c0e | ||
|
|
14597475b1 | ||
|
|
de3281a3a8 | ||
|
|
6e16985156 | ||
|
|
50dacab379 | ||
|
|
7c2930611b | ||
|
|
84bc46ac3b | ||
|
|
fd42247cac | ||
|
|
0efcb57623 | ||
|
|
6fde147273 | ||
|
|
cc497fd153 | ||
|
|
c1f31180a2 | ||
|
|
d4ab68cd51 | ||
|
|
e8c762981a | ||
|
|
0ef3e6fe8a | ||
|
|
adcbe03aeb | ||
|
|
359c0eac0d | ||
|
|
a53d7848eb | ||
|
|
29b7fb628e | ||
|
|
df760a0a4b | ||
|
|
f2057eb744 | ||
|
|
2956fe97a0 | ||
|
|
1f9b0e70ab | ||
|
|
8fae12b2f1 | ||
|
|
7410210f19 | ||
|
|
40e6b12cca | ||
|
|
f2d422235b | ||
|
|
6a678f6d64 | ||
|
|
52ceab5e41 | ||
|
|
cafcc242e6 | ||
|
|
2ad0a7d20f | ||
|
|
481094db90 | ||
|
|
840c0af014 | ||
|
|
f193ab4b59 | ||
|
|
f7db3023a8 | ||
|
|
cfe80449e2 | ||
|
|
818d231849 | ||
|
|
eb9937ec1a | ||
|
|
070cd2b52f | ||
|
|
96d9ddee38 | ||
|
|
5629eeaec2 | ||
|
|
46c2bc4bb6 | ||
|
|
3938e0f58b | ||
|
|
fa162e8feb | ||
|
|
a95df8246b | ||
|
|
8feb5110b5 | ||
|
|
32899f8309 | ||
|
|
dc7c6d1030 | ||
|
|
7fdd0bd367 | ||
|
|
4459d3b434 | ||
|
|
7e7d89471a | ||
|
|
e67d15b50e | ||
|
|
bd78878cc3 | ||
|
|
5974309d10 | ||
|
|
d00e4a377b | ||
|
|
afc6ade2b9 | ||
|
|
734e8d6229 | ||
|
|
61629d2c86 | ||
|
|
cb48c6a3d8 | ||
|
|
93a29c3c45 | ||
|
|
e92b7c73bc | ||
|
|
0ea74e3255 | ||
|
|
3bd52e3cb1 | ||
|
|
c7f9c51fe6 | ||
|
|
b1da98170f | ||
|
|
0496598e77 | ||
|
|
fb3eee5f0b | ||
|
|
e16bc91601 | ||
|
|
a8c78cbbb0 | ||
|
|
3a5a6038e7 | ||
|
|
d412724598 | ||
|
|
f95de76789 | ||
|
|
33cf204e9a | ||
|
|
dafc652f63 | ||
|
|
c16dd085f1 | ||
|
|
a7349a48ff | ||
|
|
8042cd93c3 | ||
|
|
394faaeb97 | ||
|
|
5c2df3e1a4 | ||
|
|
6fc55467f4 | ||
|
|
a147a07956 | ||
|
|
a10581d459 | ||
|
|
cc2d6942bb | ||
|
|
3974c02bb1 | ||
|
|
09b5ddaea5 | ||
|
|
acbcd68d89 | ||
|
|
4281470fca | ||
|
|
68a4aa6773 | ||
|
|
905b160097 | ||
|
|
52596c339b | ||
|
|
73500267ee | ||
|
|
e6011e33a6 | ||
|
|
3454319c17 | ||
|
|
02c78ecf81 | ||
|
|
caca034302 | ||
|
|
fb366ed35f | ||
|
|
b352ffca15 | ||
|
|
2d94856efd | ||
|
|
ae66bd1284 | ||
|
|
89d9d4e6c8 | ||
|
|
fe60fc4730 | ||
|
|
46690d5e1c | ||
|
|
beaea8cb25 | ||
|
|
409ec90c85 | ||
|
|
4d423eeabe | ||
|
|
019e612225 | ||
|
|
6550d271f0 | ||
|
|
c46da65263 | ||
|
|
b46745759b | ||
|
|
9687571a84 | ||
|
|
c13236de25 | ||
|
|
8ffbb6acd4 | ||
|
|
a3e5d81765 | ||
|
|
e2aecfe80f | ||
|
|
a3c1248214 | ||
|
|
b933639222 | ||
|
|
27619fc450 | ||
|
|
96fecba190 | ||
|
|
50257d4f50 | ||
|
|
3eb4ae031c | ||
|
|
6a4ec3be81 | ||
|
|
cc9ac6ad14 | ||
|
|
644990a835 | ||
|
|
d3b81ea3f7 | ||
|
|
3660f67534 | ||
|
|
203cc4a5c3 | ||
|
|
c7be232fee | ||
|
|
2617b379be | ||
|
|
84ed5e755a | ||
|
|
2f17615790 | ||
|
|
acfa131c8c | ||
|
|
793d0e27e1 | ||
|
|
fdf0c443c3 | ||
|
|
1b39b53321 | ||
|
|
1679993e3b | ||
|
|
4c831f8b68 | ||
|
|
7a19923afa | ||
|
|
3e122a765d | ||
|
|
d873ba8c9f | ||
|
|
8093338f39 | ||
|
|
07660eea1e | ||
|
|
a2b2d4cd5c | ||
|
|
96e217b496 | ||
|
|
2dd1518d63 | ||
|
|
168703b7bf | ||
|
|
0f2d680f1f | ||
|
|
b7930b6ebd | ||
|
|
8fa43b469a | ||
|
|
894e52f61a | ||
|
|
3c294691aa | ||
|
|
acbf932861 | ||
|
|
26f5c53be8 | ||
|
|
8dd069604c | ||
|
|
5dadbd094e | ||
|
|
514a8739b6 | ||
|
|
12e78a082e | ||
|
|
9273096a8a | ||
|
|
686c6133f8 | ||
|
|
1d1276cc3a | ||
|
|
d987676ef0 | ||
|
|
6e4658c89d | ||
|
|
b7cbcf7434 | ||
|
|
e347d06a49 | ||
|
|
2077e9365a | ||
|
|
6e3adc9b14 | ||
|
|
7954eee639 | ||
|
|
f9f1f0e316 | ||
|
|
a9afe6aa84 | ||
|
|
6d36796135 | ||
|
|
9e81fd5703 | ||
|
|
609059b6ec | ||
|
|
6af73f417a | ||
|
|
32468a0072 | ||
|
|
6800c45104 | ||
|
|
0d8c754ffd | ||
|
|
1b80276496 | ||
|
|
bf9a138276 | ||
|
|
b3f9c636b9 | ||
|
|
18975d44a6 | ||
|
|
b201db5cec | ||
|
|
bbe23945e4 | ||
|
|
bbdc0394ff | ||
|
|
38a9b14965 | ||
|
|
77ba0d3686 | ||
|
|
065c8d7a95 | ||
|
|
c704d1545c | ||
|
|
62b65a5f20 | ||
|
|
665a7a3848 | ||
|
|
256b9f31e1 | ||
|
|
a3037e1173 | ||
|
|
f3e7a5d755 | ||
|
|
5f0cba7775 | ||
|
|
673759fe7e | ||
|
|
b73612392d | ||
|
|
f85935f0f9 | ||
|
|
1e7e53c87e | ||
|
|
b9fdf3cc3b | ||
|
|
c462601362 | ||
|
|
859877dcfc | ||
|
|
c04ce95106 | ||
|
|
98ee12bc35 | ||
|
|
fdda786fa2 | ||
|
|
831be4f4dd | ||
|
|
41ae97e710 | ||
|
|
f72ba7f79d | ||
|
|
296046510b | ||
|
|
db9f87f697 | ||
|
|
3270ea55dd | ||
|
|
a358ac24f4 | ||
|
|
8bedd43b28 | ||
|
|
9ea2087ede | ||
|
|
9f7c634133 | ||
|
|
da20d68a12 | ||
|
|
d3e512c738 | ||
|
|
339f84fe1f | ||
|
|
2d41b735ec | ||
|
|
e3b4dd08ff | ||
|
|
6809a906bb | ||
|
|
1c35cbcc07 | ||
|
|
5f8989a436 | ||
|
|
aa7b0648ff | ||
|
|
2fbe61960f | ||
|
|
bdb5e5a250 | ||
|
|
48a580e609 | ||
|
|
1361fc69b9 | ||
|
|
93352e56d8 | ||
|
|
d9246ff24d | ||
|
|
9301bc3444 | ||
|
|
76352c4e2d | ||
|
|
428f41bd12 | ||
|
|
99c32e460f | ||
|
|
83f249cf65 | ||
|
|
2c2baa93ea | ||
|
|
f0278ca114 | ||
|
|
297b1b5013 | ||
|
|
e9f63bf4e8 | ||
|
|
556ce1c6a1 | ||
|
|
cc4ff62681 | ||
|
|
0423fd9b55 | ||
|
|
789ab20bf7 | ||
|
|
b47462bd68 | ||
|
|
1a94fee42d | ||
|
|
a91ce6a5d6 | ||
|
|
981ffd9fce | ||
|
|
e76c960624 | ||
|
|
416c92cc6f | ||
|
|
fb731eb3e7 | ||
|
|
6f2a4d290f | ||
|
|
cefc8ba938 | ||
|
|
d0bd644eef | ||
|
|
071c95128e | ||
|
|
1a192c489b | ||
|
|
56014e74a0 | ||
|
|
172271498d | ||
|
|
f2882cb88c | ||
|
|
152f1fee40 | ||
|
|
968234e6ae | ||
|
|
5e133e2dff | ||
|
|
0049c09fc3 | ||
|
|
a2a63c27f4 | ||
|
|
c50a601f1a | ||
|
|
bc0fd6db71 | ||
|
|
52b631fade | ||
|
|
2f0bc9d1f7 | ||
|
|
5ef6520d4e | ||
|
|
2c1925161e | ||
|
|
0529b349d5 | ||
|
|
b4620364a2 | ||
|
|
634aef3895 | ||
|
|
06c86d1a8c | ||
|
|
79749f8eb4 | ||
|
|
b036986b3e | ||
|
|
938f1d1da7 | ||
|
|
58b6b3df06 | ||
|
|
f9c3347f7c | ||
|
|
5b72eb0b03 | ||
|
|
6dd4c13bc0 | ||
|
|
e4e7db551f | ||
|
|
ebfde8da56 | ||
|
|
756bc0f4b7 | ||
|
|
269d491b6a | ||
|
|
449e5bc2ad | ||
|
|
8736c11d84 | ||
|
|
45fc760985 | ||
|
|
7968e3c2de | ||
|
|
964a41c75c | ||
|
|
5931d53637 | ||
|
|
3ed3ae5bcf | ||
|
|
6519cc70c5 | ||
|
|
505a4f27fa | ||
|
|
79144eba99 | ||
|
|
26e17d89c9 | ||
|
|
4322c1106f | ||
|
|
73071dfd4f | ||
|
|
b7c14b3c27 | ||
|
|
3130b44535 | ||
|
|
a2bd73334f | ||
|
|
1a393f5625 | ||
|
|
d4951e837e | ||
|
|
26f6365e93 | ||
|
|
3a552b1e63 | ||
|
|
69eb1790da | ||
|
|
a1af6f3614 | ||
|
|
3aced61465 | ||
|
|
6f02ddfce8 | ||
|
|
c2faa39b62 | ||
|
|
2d3734b8b5 | ||
|
|
ed908b7f89 | ||
|
|
f7d795a364 | ||
|
|
8919b39d54 | ||
|
|
84cedc094e | ||
|
|
3b2b2496d7 | ||
|
|
445684c409 | ||
|
|
898e067ccc | ||
|
|
12859e345f | ||
|
|
89f4af695e | ||
|
|
308bc9d919 | ||
|
|
db566c54ae | ||
|
|
81d403e207 | ||
|
|
2bd71d70ff | ||
|
|
1eef6f44ba | ||
|
|
204f03912f | ||
|
|
f8c3b3aa18 | ||
|
|
d4df981463 | ||
|
|
497c6d516d | ||
|
|
8288862b7e | ||
|
|
9aae16c236 | ||
|
|
80c194a70a | ||
|
|
c832b2db5b | ||
|
|
27018882ec | ||
|
|
caf6e9c540 | ||
|
|
e727fb82f2 | ||
|
|
c78df56801 | ||
|
|
d13202f43b | ||
|
|
9d139a6b35 | ||
|
|
d2abe44e6f | ||
|
|
bc67228576 | ||
|
|
ecf32c964a | ||
|
|
e58f30b82a | ||
|
|
654e3f1101 | ||
|
|
86689dc524 | ||
|
|
5f62a0c1ca | ||
|
|
ad1bf0f389 | ||
|
|
9c7703ace1 | ||
|
|
4a8155b53c | ||
|
|
80d6d5c5c4 | ||
|
|
c624be8388 | ||
|
|
09df1cd41e | ||
|
|
52c5b57200 | ||
|
|
5ea04a852e | ||
|
|
a2eef05198 | ||
|
|
55f75af353 | ||
|
|
fb6a51b8fd | ||
|
|
252cc2213e | ||
|
|
73c5f24fa4 | ||
|
|
4c80e103a0 | ||
|
|
39ea557360 | ||
|
|
d0cc92a01a | ||
|
|
d7980c1a45 | ||
|
|
e56ae1426c | ||
|
|
696843c020 | ||
|
|
6ff5621dd7 | ||
|
|
e7fb72a732 | ||
|
|
8d30d34e0c | ||
|
|
bc7fe85f8a | ||
|
|
89352d92c5 | ||
|
|
c32390d84c | ||
|
|
45ca866a2d | ||
|
|
ceef206c21 | ||
|
|
7c6424f0a9 | ||
|
|
bc942de6f1 | ||
|
|
06984df5cb | ||
|
|
4f136a3a76 | ||
|
|
363bf3ba30 | ||
|
|
acb895956a | ||
|
|
21e87b9bb3 | ||
|
|
c896ebcf12 | ||
|
|
d288222e80 | ||
|
|
4eb2a6c9a3 | ||
|
|
2563731c4d | ||
|
|
4e410111db | ||
|
|
5670563a26 | ||
|
|
6caa656d01 | ||
|
|
c12af7aed1 | ||
|
|
dcb6d1c01d | ||
|
|
18234cbdac | ||
|
|
06bf988dc1 | ||
|
|
55ff4c3f08 | ||
|
|
4915002168 | ||
|
|
5bd8d60e41 | ||
|
|
fc872808c5 | ||
|
|
0f4feda382 | ||
|
|
90b0f38316 | ||
|
|
18f630ab21 | ||
|
|
e97fd44151 | ||
|
|
b75679778f | ||
|
|
35a84ad576 | ||
|
|
4ed28be75a | ||
|
|
e2f4656a86 | ||
|
|
1e14da5c60 | ||
|
|
b2ef79ef3d | ||
|
|
f488874ff5 | ||
|
|
23258648da | ||
|
|
6b84ebe501 | ||
|
|
07dd067f73 | ||
|
|
420744d048 | ||
|
|
01108e3a63 | ||
|
|
8026b1e194 | ||
|
|
a39d77227f | ||
|
|
9f69deec7d | ||
|
|
e912f772e0 | ||
|
|
0102726aeb | ||
|
|
1e7aa04040 | ||
|
|
00a7c6fe6b | ||
|
|
87f8c0d471 | ||
|
|
334d78cd18 | ||
|
|
2356325592 | ||
|
|
d78ec593fa | ||
|
|
d5043133e6 | ||
|
|
509f69a457 | ||
|
|
662c659220 | ||
|
|
9a6566e774 | ||
|
|
4da0428d9e | ||
|
|
8ee1177206 | ||
|
|
e9154b2549 | ||
|
|
d398a0dd58 | ||
|
|
7723a24297 | ||
|
|
95a4b8db68 | ||
|
|
663c1898a3 | ||
|
|
465de793e8 | ||
|
|
de9b76cef0 | ||
|
|
1747a8d3d9 | ||
|
|
1094e79749 | ||
|
|
22569681bc | ||
|
|
e615d117a0 | ||
|
|
a51258b6bb | ||
|
|
8894bd07b6 | ||
|
|
ec45a9e825 | ||
|
|
871358a6e5 | ||
|
|
2e2e0fba60 | ||
|
|
4a5139e3f4 | ||
|
|
8f85933d7c | ||
|
|
246f3a63f6 | ||
|
|
e99eff4eb0 | ||
|
|
c0197f19cf | ||
|
|
3994d67eea | ||
|
|
9ead79c9d4 | ||
|
|
9371aed46c | ||
|
|
940707ad66 | ||
|
|
e6c267fb4c | ||
|
|
93538fccd6 | ||
|
|
83a7fad308 | ||
|
|
3c7e33388e | ||
|
|
7b0f35edb6 | ||
|
|
94a157d0b0 | ||
|
|
ca04620253 | ||
|
|
073ef0b36a | ||
|
|
c41c05d4f4 | ||
|
|
f1ea54e07a | ||
|
|
a139ce901a | ||
|
|
7431957113 | ||
|
|
1752d80915 | ||
|
|
aa7420e109 | ||
|
|
a290d4b9db | ||
|
|
19a4314e7f | ||
|
|
d166e85e0a | ||
|
|
f213e857ab | ||
|
|
eb6130baa7 | ||
|
|
f69ea2c68a | ||
|
|
078441d477 | ||
|
|
95f6b15a67 | ||
|
|
ee29dbdb8f | ||
|
|
15f3f4c93f | ||
|
|
6932e94e0e | ||
|
|
3ef06d7efe | ||
|
|
fb012b48e9 | ||
|
|
bc77bf217f | ||
|
|
37d1e9351e | ||
|
|
4494c0dee0 | ||
|
|
26afc604ac | ||
|
|
9aefcada19 | ||
|
|
69fc363760 | ||
|
|
bea02ddebe | ||
|
|
3fb257c39c | ||
|
|
7c96c5a39b | ||
|
|
efd836d971 | ||
|
|
836aaa1647 | ||
|
|
bf2b3dbf3e | ||
|
|
b4fa2ff995 | ||
|
|
2f9cabc30b | ||
|
|
63593f5597 | ||
|
|
c0acaa5d2c | ||
|
|
2e46f8d0a6 | ||
|
|
51da6aaa07 | ||
|
|
c8b79e36db | ||
|
|
208374bcc9 | ||
|
|
7f0a6e7203 | ||
|
|
54ebb9cfd4 | ||
|
|
49e9c1495b | ||
|
|
a84b0fbd52 | ||
|
|
c95814c04d | ||
|
|
9f8123f1b8 | ||
|
|
8b23db4f4d | ||
|
|
d77cc13374 | ||
|
|
9a12db1aa2 | ||
|
|
eb54d34bec | ||
|
|
4b1203d4c9 | ||
|
|
183a9c6244 | ||
|
|
1f2294d585 | ||
|
|
0b839c4f77 | ||
|
|
1d4fd1fcae | ||
|
|
b1d8d72c16 | ||
|
|
bafb68b844 | ||
|
|
21873b52e9 | ||
|
|
0aa8b82871 | ||
|
|
f9781afafd | ||
|
|
fece361a55 | ||
|
|
7b51b2f128 | ||
|
|
22d88fb28e | ||
|
|
f7c5b28e76 | ||
|
|
5760f2a307 | ||
|
|
ee46efb5a5 | ||
|
|
eb6ffebfc7 | ||
|
|
c06c44f286 | ||
|
|
019c4088cf | ||
|
|
0b0a88b78d | ||
|
|
028e9cc56f | ||
|
|
e0d8615ece | ||
|
|
c8ecbda40b | ||
|
|
2324c10d43 | ||
|
|
89cfa76291 | ||
|
|
072070a22c | ||
|
|
3c3ad134ea | ||
|
|
a4ffcfd4d5 | ||
|
|
136670c58a | ||
|
|
28169725fa | ||
|
|
5b13106f54 | ||
|
|
1a2db0dfb1 | ||
|
|
696f95bb0a | ||
|
|
acec588fe3 | ||
|
|
6ed0da8e98 | ||
|
|
7fd91d70bd | ||
|
|
61788a0389 | ||
|
|
0821447b5b | ||
|
|
3cba274ba6 | ||
|
|
df7bbcfd21 | ||
|
|
021d406f0c | ||
|
|
294569c502 | ||
|
|
bfd00ac2ed | ||
|
|
735a4714f4 | ||
|
|
827fd47198 | ||
|
|
e26b917661 | ||
|
|
92872a2a3c | ||
|
|
16ddb09cb4 | ||
|
|
d37031f14e | ||
|
|
b4e84ca7d2 | ||
|
|
47970b9e6f | ||
|
|
f65f120d50 | ||
|
|
df00ec3c82 | ||
|
|
ad6fca28f9 | ||
|
|
fd33923496 | ||
|
|
a55649dc82 | ||
|
|
9558f229db | ||
|
|
7917bfb1c9 | ||
|
|
25f611ca42 | ||
|
|
e6eb49e7e0 | ||
|
|
9a075f53dc | ||
|
|
4b3f800c03 | ||
|
|
82bc76b243 | ||
|
|
18b9b04907 | ||
|
|
87f1f08b36 | ||
|
|
7d7ebbe9f7 | ||
|
|
5111ce782f | ||
|
|
20b0e563ce | ||
|
|
8b6cf239a3 | ||
|
|
bcc285cffd | ||
|
|
d5ba030942 | ||
|
|
803f43592a | ||
|
|
904b9ccaa3 | ||
|
|
89721ff04a | ||
|
|
6164823921 | ||
|
|
f8b3c47f99 | ||
|
|
56dd2da962 | ||
|
|
68bb74d172 | ||
|
|
bf5e12c8e0 | ||
|
|
de11f5e53a | ||
|
|
b125e8e23a | ||
|
|
b28b616eb2 | ||
|
|
4534ca238d | ||
|
|
cee0e94294 | ||
|
|
8319ea7078 | ||
|
|
5334a58f9b | ||
|
|
2616bdc4cd | ||
|
|
c149b3f797 | ||
|
|
d349eb3d43 | ||
|
|
9b43ade1c0 | ||
|
|
ad05d0a8d9 | ||
|
|
e6bfbe9683 | ||
|
|
c871efca4b | ||
|
|
12c72b419c | ||
|
|
a15b7691ca | ||
|
|
01618d323b | ||
|
|
bb6d0e37e3 | ||
|
|
24a6100897 | ||
|
|
0251563c98 | ||
|
|
72673a351b | ||
|
|
96b7131844 | ||
|
|
dcc2f16416 | ||
|
|
c2b8a04000 | ||
|
|
d65587b06c | ||
|
|
1ab0134522 | ||
|
|
afffce80f0 | ||
|
|
70b80b0160 | ||
|
|
64067a04b5 | ||
|
|
38cf0268c0 | ||
|
|
2d2034703f | ||
|
|
571ceeff90 | ||
|
|
34c4ba4321 | ||
|
|
babb372eb9 | ||
|
|
5b9b82c1cd | ||
|
|
075c534270 | ||
|
|
f317f8b149 | ||
|
|
f8d552dde5 | ||
|
|
606f72bb13 | ||
|
|
327e6a2b4f | ||
|
|
be8f6c7f5c | ||
|
|
073448e0ea | ||
|
|
f136f435b5 | ||
|
|
ebea6b487b | ||
|
|
e5b7dc56e6 | ||
|
|
c2d8025a0a | ||
|
|
853e240e1d | ||
|
|
8755a6d1ac | ||
|
|
9f723061cb | ||
|
|
652683fc04 | ||
|
|
83a463891d | ||
|
|
957b618fdc | ||
|
|
ebe5191b63 | ||
|
|
c426234df7 | ||
|
|
8c3a10392e | ||
|
|
d0e44946e9 | ||
|
|
46a593d968 | ||
|
|
eb0cc34951 | ||
|
|
1c7dfda4bc | ||
|
|
3c0e4a2fa1 | ||
|
|
c753072ae1 | ||
|
|
243942a7aa | ||
|
|
8d5ac8b43c | ||
|
|
17962b3d2e | ||
|
|
f70acd5979 | ||
|
|
ffe5c46224 | ||
|
|
3242ea5f66 | ||
|
|
39a282bffc | ||
|
|
29583004ce | ||
|
|
0a1a185874 | ||
|
|
8f809e2a93 | ||
|
|
f216059b49 | ||
|
|
9121b1f41d | ||
|
|
60e015d0c1 | ||
|
|
7e049fca61 | ||
|
|
0f0e4de6a4 | ||
|
|
bc1102922b | ||
|
|
a3d3642a30 | ||
|
|
248eb47329 | ||
|
|
52ebf50607 | ||
|
|
d34a4b126e | ||
|
|
de96719a45 | ||
|
|
9876ed09fe | ||
|
|
17cbbe3dc5 | ||
|
|
b995af17eb | ||
|
|
6589579850 | ||
|
|
5ddc260fc2 | ||
|
|
db5c9cd4c0 | ||
|
|
9b6d010aef | ||
|
|
065b87e949 | ||
|
|
a6206a3aef | ||
|
|
30639ed72b | ||
|
|
9d02a39e13 | ||
|
|
fc0af0d4d1 | ||
|
|
a683416081 | ||
|
|
9faf57ee8d | ||
|
|
44b9ccb7e2 | ||
|
|
de003d9cf8 | ||
|
|
8a2a523c70 | ||
|
|
c3dfe50aaf | ||
|
|
9659d862c7 | ||
|
|
69ab4cd391 | ||
|
|
498f3985b3 | ||
|
|
977175d4fd | ||
|
|
3ddc7b9390 | ||
|
|
10e9bf623f | ||
|
|
48a5c64e94 | ||
|
|
140606ccd5 | ||
|
|
f56d006f93 | ||
|
|
beb13a1d3e | ||
|
|
fa47138327 | ||
|
|
9421d4510a | ||
|
|
ff8abfca85 | ||
|
|
5c858965b8 | ||
|
|
e3f83cb17a | ||
|
|
de6008e01a | ||
|
|
6417e696df | ||
|
|
5d28f3781b | ||
|
|
10026bb62e | ||
|
|
21c16f923c | ||
|
|
32cef52f0d | ||
|
|
e7dd7c54ff | ||
|
|
b0b50bd12a | ||
|
|
f2c6057490 | ||
|
|
169b2eeb94 | ||
|
|
f81d027f60 | ||
|
|
872eeb7339 | ||
|
|
7f67a28c2a | ||
|
|
30a46e1135 | ||
|
|
3a01478ce8 | ||
|
|
53d71fab60 | ||
|
|
be891f112c | ||
|
|
89934239d7 | ||
|
|
8986037fdd | ||
|
|
a7c72b7abf | ||
|
|
409ac80710 | ||
|
|
fc7bebdf55 | ||
|
|
ca52549557 | ||
|
|
8948a65654 | ||
|
|
b4e33cfcc7 | ||
|
|
86742e8334 | ||
|
|
173b35eaf8 | ||
|
|
2b054e5309 | ||
|
|
a302ff1605 | ||
|
|
f7bb4e6138 | ||
|
|
5c5489916b | ||
|
|
5627cf7167 | ||
|
|
c05dae4a68 | ||
|
|
57e61e3743 | ||
|
|
a6c395c156 | ||
|
|
543e0b1e0f | ||
|
|
64b0ff875f | ||
|
|
a034208a00 | ||
|
|
5f1251586b | ||
|
|
6f6cffdc32 | ||
|
|
21a98ef264 | ||
|
|
aa90436435 | ||
|
|
61225052f9 | ||
|
|
dee3163d95 | ||
|
|
8b0668b99e | ||
|
|
8471a82c85 | ||
|
|
ed4dff63b9 | ||
|
|
838e776542 | ||
|
|
39c12790bc | ||
|
|
126e6d6645 | ||
|
|
5796a1b282 | ||
|
|
90982529fc | ||
|
|
aba51d6b60 | ||
|
|
49bc4567bb | ||
|
|
2ac52705c6 | ||
|
|
d0eb56dd97 | ||
|
|
b9c60df04b | ||
|
|
8c236e4dfa | ||
|
|
154a59f21f | ||
|
|
9689e1c548 | ||
|
|
5a83976c99 | ||
|
|
b5276a9a69 | ||
|
|
30377baa5e | ||
|
|
aa8b7dd336 | ||
|
|
f26a338a54 | ||
|
|
c4383f1d99 | ||
|
|
4527995e66 | ||
|
|
b0fbb98f41 | ||
|
|
63667dfd96 | ||
|
|
77c388c928 | ||
|
|
a69b814ded | ||
|
|
c51ada766d | ||
|
|
ef2709f97c | ||
|
|
bf9b9ca29d | ||
|
|
64f224bb22 | ||
|
|
285a8fe4d0 | ||
|
|
3773d76dfd | ||
|
|
94c5c7bd6d | ||
|
|
12cfc4c0b0 | ||
|
|
9a2de6e6ee | ||
|
|
2ede47b8c8 | ||
|
|
76e107506f | ||
|
|
6f35ed51dc | ||
|
|
c94ba66310 | ||
|
|
a15133f5cf | ||
|
|
cc09e9d4c2 | ||
|
|
16e0da2c4b | ||
|
|
ed22f75241 | ||
|
|
ba25cad6e2 | ||
|
|
abb01123cb | ||
|
|
e2d249f8c5 | ||
|
|
4a2ac166fa | ||
|
|
5fab55383d | ||
|
|
f152f23a68 | ||
|
|
24e78b3571 | ||
|
|
9a239edb52 | ||
|
|
abcc5c5a82 | ||
|
|
cb5ba675a7 | ||
|
|
2288086695 | ||
|
|
61421b7a8f | ||
|
|
6a7e53a7c7 | ||
|
|
ca134d5522 | ||
|
|
ec24efda74 | ||
|
|
7f0f10e498 | ||
|
|
aa5af100b4 | ||
|
|
37ae32f688 | ||
|
|
d0cffdec5d | ||
|
|
0f34521612 | ||
|
|
e69362df22 | ||
|
|
3de8f6f38e | ||
|
|
5359bc8083 | ||
|
|
eb6a14fe10 | ||
|
|
2912537533 | ||
|
|
cfb32da198 | ||
|
|
9b4f92130f | ||
|
|
5a2ab686a6 | ||
|
|
3b8583b014 | ||
|
|
ed29552b1e | ||
|
|
a2ada3cf96 | ||
|
|
88825a1187 | ||
|
|
264e7fc58b | ||
|
|
1698015e3c | ||
|
|
39dc14c002 | ||
|
|
04c499a5fc | ||
|
|
efbe930a69 | ||
|
|
747f87f61e | ||
|
|
5a4c56fc44 | ||
|
|
81f45ba92a | ||
|
|
a5dc4e32f2 | ||
|
|
2b839853ec | ||
|
|
66b6cd68ed | ||
|
|
0ef3d90838 | ||
|
|
5cc50f9b27 | ||
|
|
e879e26a5b | ||
|
|
96d84150e1 | ||
|
|
2aa0c6c488 | ||
|
|
811138386f | ||
|
|
c433cf7459 | ||
|
|
e0d6ebc2f2 | ||
|
|
4938991ab8 | ||
|
|
13722f536e | ||
|
|
57f0e3292d | ||
|
|
da5ae565ab | ||
|
|
87c5066242 | ||
|
|
b528bde470 | ||
|
|
57572e550f | ||
|
|
3aea0d3d68 | ||
|
|
9ae920c1b6 | ||
|
|
dff406a360 | ||
|
|
d346ba5c3c | ||
|
|
978541adc2 | ||
|
|
637bce2707 | ||
|
|
07e3dc2ee2 | ||
|
|
ead065d803 | ||
|
|
0150bff7b4 | ||
|
|
0f493b6038 | ||
|
|
f26b709c50 | ||
|
|
ae10d9cf22 | ||
|
|
81af9674ed | ||
|
|
b63df7991a | ||
|
|
a79990465c | ||
|
|
ad6bd530ac | ||
|
|
c1b369fd4c | ||
|
|
01fcd3c2d5 | ||
|
|
7196d784d3 | ||
|
|
0f0aaf51e0 | ||
|
|
b5f493c55a | ||
|
|
0aa031beb9 | ||
|
|
db6ff224f8 | ||
|
|
b3c7cd61f3 | ||
|
|
9ae05c4d91 | ||
|
|
264e6f6efd | ||
|
|
ec7bccf671 | ||
|
|
49f75ee8ce | ||
|
|
4bcc866c52 | ||
|
|
c65e088caf | ||
|
|
6ca4116555 | ||
|
|
f6cdb820af | ||
|
|
081e5a82ff | ||
|
|
2ad2a4bd9f | ||
|
|
645e700da3 | ||
|
|
92aea29a30 | ||
|
|
e1c01af929 | ||
|
|
7ef749497d | ||
|
|
d72aa49126 | ||
|
|
e92bd312ec | ||
|
|
b097c2cfb0 | ||
|
|
a39cdc80b7 | ||
|
|
a47250810e | ||
|
|
1f50f3031f | ||
|
|
75145dd753 | ||
|
|
d0b97f7e1f | ||
|
|
199a0311e2 | ||
|
|
fa446f860f | ||
|
|
7a74303f3c | ||
|
|
7d9eabb981 | ||
|
|
ff5308a5af | ||
|
|
3f8ba3a986 | ||
|
|
4a555de1b2 | ||
|
|
d27e4a08f9 | ||
|
|
bf678a1ca9 | ||
|
|
13a903de28 | ||
|
|
a3c14c031e | ||
|
|
e90d528026 | ||
|
|
d64dd77993 | ||
|
|
113850a748 | ||
|
|
1c49a00d64 | ||
|
|
eef6c83503 | ||
|
|
ceb5648eb7 | ||
|
|
a0eadb76ea | ||
|
|
065852e46c | ||
|
|
e5e2fb8274 | ||
|
|
0210b3c893 | ||
|
|
7df5677b46 | ||
|
|
2e71876b28 | ||
|
|
11576b1142 | ||
|
|
ce011b8a2d | ||
|
|
12cfb4f7ee | ||
|
|
9e1123debe | ||
|
|
c7354142c0 | ||
|
|
dee84f448f | ||
|
|
1607711603 | ||
|
|
8bca5e05b8 | ||
|
|
f68505ee23 | ||
|
|
d2174da641 | ||
|
|
255b1e68d0 | ||
|
|
fbee6b87f5 | ||
|
|
3836a70f97 | ||
|
|
e0ec9fa294 | ||
|
|
80fe50590f | ||
|
|
ae18d1c55a | ||
|
|
75194373e0 | ||
|
|
f3875048f6 | ||
|
|
210af986ad | ||
|
|
c03044f492 | ||
|
|
522b85ae21 | ||
|
|
208e56dbe9 | ||
|
|
42acb00c81 | ||
|
|
ca6e770837 | ||
|
|
775968003c | ||
|
|
323d3e9b5d | ||
|
|
16f9755e73 | ||
|
|
66eb98bb0a | ||
|
|
299546f5c0 | ||
|
|
7be9b4c418 | ||
|
|
03c22b4576 | ||
|
|
ef749fa9ce | ||
|
|
a23c92596e | ||
|
|
abb1497c98 | ||
|
|
7a8594da43 | ||
|
|
cbf28daed9 | ||
|
|
0ff1ca30c3 | ||
|
|
2cff251863 | ||
|
|
73d996bf26 | ||
|
|
5bc78cb724 | ||
|
|
cdba92ac3c | ||
|
|
6d28f92ffe | ||
|
|
01387f42c5 | ||
|
|
8f52b731f4 | ||
|
|
d442088ed3 | ||
|
|
22a323890a | ||
|
|
163bba1410 | ||
|
|
db1c618fcf | ||
|
|
01bdfa7b6d | ||
|
|
6a88c8d845 | ||
|
|
b8a6913e09 | ||
|
|
744d8c1006 | ||
|
|
c2e2c98d81 | ||
|
|
3fa353a2d3 | ||
|
|
c27c9f80d2 | ||
|
|
b5a74715cf | ||
|
|
13ee2901f4 | ||
|
|
32c03eadd6 | ||
|
|
0fa512f26d | ||
|
|
219d88518c | ||
|
|
ecf3aee43a | ||
|
|
7f08cab73e | ||
|
|
c4e9ef199e | ||
|
|
9e612b5550 | ||
|
|
203633d34d | ||
|
|
45bd009bb1 | ||
|
|
ee656415c4 | ||
|
|
156aad198f | ||
|
|
b1ffb79a50 | ||
|
|
d6654bfe00 | ||
|
|
eefdd67d22 | ||
|
|
86a86d7afd | ||
|
|
b6dac2b484 | ||
|
|
e6367abae9 | ||
|
|
fc4d1d9a60 | ||
|
|
94bae20776 | ||
|
|
bb8c8d273c | ||
|
|
ee600ace37 | ||
|
|
da86e32eb4 | ||
|
|
b5bbc04ad1 | ||
|
|
265c58611f | ||
|
|
25c973a39e | ||
|
|
123c7b32db | ||
|
|
e2d8e2c4ae | ||
|
|
701509d322 | ||
|
|
c3cc616264 | ||
|
|
91b84b89e4 | ||
|
|
017ec204a9 | ||
|
|
8dbfecd153 | ||
|
|
512db1bc54 | ||
|
|
e157aabd4d | ||
|
|
db2fea448c | ||
|
|
dd82d69b8c | ||
|
|
27328281b7 | ||
|
|
51d205b267 | ||
|
|
84800914f6 | ||
|
|
9b296e65bd | ||
|
|
5f649a1649 | ||
|
|
daea056210 | ||
|
|
30c0db06bd | ||
|
|
91168c005c | ||
|
|
cfa0054077 | ||
|
|
3d5820648b | ||
|
|
d08df97fe5 | ||
|
|
fd6624a058 | ||
|
|
8aa41dd04b | ||
|
|
e890113fc6 | ||
|
|
e2e64798b5 | ||
|
|
b9b6a6566a | ||
|
|
dc9e415602 | ||
|
|
84fa12c885 | ||
|
|
296b35fe9b | ||
|
|
0ff89b9c3c | ||
|
|
3b33540c99 | ||
|
|
29d0174253 | ||
|
|
cc7f2a0d08 | ||
|
|
b1579aed2f | ||
|
|
9247daf953 | ||
|
|
9031e33b66 | ||
|
|
1ee1f5f427 | ||
|
|
a5874a5393 | ||
|
|
969217c9d9 | ||
|
|
e399502c7a | ||
|
|
6883f0c49f | ||
|
|
3fc2c813cc | ||
|
|
9de4b99fc7 | ||
|
|
24e7036822 | ||
|
|
ec9acbcda7 | ||
|
|
c0460660d5 | ||
|
|
b03f4919fb | ||
|
|
08620743b9 | ||
|
|
41362f063a | ||
|
|
5b3069e265 | ||
|
|
b466924717 | ||
|
|
cbc0f65fa3 | ||
|
|
35089a4289 | ||
|
|
aef3131e92 | ||
|
|
342fce97af | ||
|
|
fb5d267bd0 | ||
|
|
c19844a0a3 | ||
|
|
22cf05519a | ||
|
|
511ce35631 | ||
|
|
e9b7548dd6 | ||
|
|
010cde0a4a | ||
|
|
cac5251a98 | ||
|
|
3b825bcbfb | ||
|
|
31959fb24b | ||
|
|
5e9675ad1e | ||
|
|
084b7675b2 | ||
|
|
ed8be5bc55 | ||
|
|
efca2943a0 | ||
|
|
371da7132f | ||
|
|
9a3ff5c46a | ||
|
|
b36c654a3d | ||
|
|
ddeb2613ec | ||
|
|
2d02d20911 | ||
|
|
b2563b9f9f | ||
|
|
fccf6925b1 | ||
|
|
4a7cf65064 | ||
|
|
56587e2821 | ||
|
|
33b8e71583 | ||
|
|
1c96128695 | ||
|
|
ca516b1b26 | ||
|
|
ba4e69bebc | ||
|
|
de5e9f100c | ||
|
|
955da86a3e | ||
|
|
8d85be4c5e | ||
|
|
93eadfb10f | ||
|
|
f8e0b18439 | ||
|
|
64bbe9dfaf | ||
|
|
2e8a9416af | ||
|
|
5dd40bd0bb | ||
|
|
1822dd0549 | ||
|
|
751e49fb0a | ||
|
|
56c43604d0 | ||
|
|
7438c378be | ||
|
|
0e0caf7c06 | ||
|
|
5644f4a295 | ||
|
|
98e1605b17 | ||
|
|
73f0e32d1a | ||
|
|
713cb56fea | ||
|
|
bd3bb70ee8 | ||
|
|
8aa3f14303 | ||
|
|
ac285b453e | ||
|
|
daf55705e4 | ||
|
|
7140baae72 | ||
|
|
27a2e590cd | ||
|
|
7172fa058a | ||
|
|
c0790ccf08 | ||
|
|
87c43517cd | ||
|
|
6561ec524b | ||
|
|
982c5460f0 | ||
|
|
2a3a8848f3 | ||
|
|
752520e428 | ||
|
|
8095b776fe | ||
|
|
e504103e2c | ||
|
|
904183262a | ||
|
|
2a0bc64226 | ||
|
|
6b975c308c | ||
|
|
74be55a477 | ||
|
|
394832c2d6 | ||
|
|
f636c12255 | ||
|
|
03e4a8214c | ||
|
|
6d7785a35b | ||
|
|
904f579332 | ||
|
|
a72d789b08 | ||
|
|
87ad7ace18 | ||
|
|
35153eb524 | ||
|
|
c8ee1fa62e | ||
|
|
5c1a6ed719 | ||
|
|
9d68fde148 | ||
|
|
c7d517f6d2 | ||
|
|
183f1531d3 | ||
|
|
6dfe0ec31e | ||
|
|
8b3f1cebda | ||
|
|
086daf913c | ||
|
|
6a3e2272e9 | ||
|
|
d0e0bf53a6 | ||
|
|
0009e4dfb9 | ||
|
|
30b7a9f172 | ||
|
|
c74cb59e08 | ||
|
|
c1f29a8e08 | ||
|
|
cb895ec335 | ||
|
|
2df4866cfa | ||
|
|
423a1cf486 | ||
|
|
7aeb63c817 | ||
|
|
476fa1f4d2 | ||
|
|
0bea215560 | ||
|
|
3c20b98d99 | ||
|
|
8bcdda29d4 | ||
|
|
c88036405f | ||
|
|
60cddab4f2 | ||
|
|
411ca1c050 | ||
|
|
d1be3a4a1d | ||
|
|
b5dd257427 | ||
|
|
4cf953678d | ||
|
|
ca5678c8c1 | ||
|
|
9e4594be53 | ||
|
|
d16c757c28 | ||
|
|
312bcafd05 | ||
|
|
be24652d4d | ||
|
|
6ab44d9439 | ||
|
|
108cb14d1f | ||
|
|
b98308b524 | ||
|
|
215c445583 | ||
|
|
20d8e32a58 | ||
|
|
33306b2749 | ||
|
|
94eeeba79a | ||
|
|
ecd29a289a | ||
|
|
e7d0af72e3 | ||
|
|
fcb1d3521a | ||
|
|
890bf3bd27 | ||
|
|
dafd81178f | ||
|
|
99dfdebc64 | ||
|
|
c1cfdd6323 | ||
|
|
264a9bc6ed | ||
|
|
f79f5cbf82 | ||
|
|
7313501e30 | ||
|
|
d8b2c819e7 | ||
|
|
69f6d14b81 | ||
|
|
9f3856e646 | ||
|
|
a46e2e9900 | ||
|
|
14f0dd2dd0 | ||
|
|
c051438fa1 | ||
|
|
52e32ac1d3 | ||
|
|
7f8ad34ba2 | ||
|
|
a9c0302454 | ||
|
|
a33e89b44a | ||
|
|
e203ecebee | ||
|
|
2f8e7f56b3 | ||
|
|
2443e1f38c | ||
|
|
eb164098b7 | ||
|
|
62527fa98a | ||
|
|
b9f8e80b14 | ||
|
|
b79e250ed2 | ||
|
|
fc5c9d8f17 | ||
|
|
72d57a8ee6 | ||
|
|
23262e30bc | ||
|
|
8b4ad40ed6 | ||
|
|
d7e9797365 | ||
|
|
e54e0c7877 | ||
|
|
5cb06d8fd6 | ||
|
|
2b34d4e1f7 | ||
|
|
c7aa095fac | ||
|
|
93f1784526 | ||
|
|
559dc503c2 | ||
|
|
414afe0935 | ||
|
|
4ad4f3fc70 | ||
|
|
67273eed9b | ||
|
|
3c63e1d8d9 | ||
|
|
cae555c977 | ||
|
|
407583e8e2 | ||
|
|
131645dc31 | ||
|
|
dafd644fe7 | ||
|
|
73cc1742af | ||
|
|
87afd7686f | ||
|
|
8ce10b5dfa | ||
|
|
943e31b35c | ||
|
|
20f85b94df | ||
|
|
17b784381e | ||
|
|
e3031fddb9 | ||
|
|
38c994a7ae | ||
|
|
85e2e96fb6 | ||
|
|
be35b3ad03 | ||
|
|
dbbd871ea1 | ||
|
|
813911db59 | ||
|
|
3c49b405de | ||
|
|
4cfffd6c4a | ||
|
|
e9f1c12f0f | ||
|
|
4fe252847c | ||
|
|
109cbbe9c5 | ||
|
|
fd3881eaa6 | ||
|
|
08ef208fb7 | ||
|
|
8c45e2a641 | ||
|
|
25dc520163 | ||
|
|
fc37ef9e4b | ||
|
|
11ba367fc9 | ||
|
|
78473f71eb | ||
|
|
8b77f40f99 | ||
|
|
d866716565 | ||
|
|
307d0effe2 | ||
|
|
b47b053e54 | ||
|
|
b79f01caf3 | ||
|
|
0db227f55e | ||
|
|
ac48b38842 | ||
|
|
0cbb9365c6 | ||
|
|
798b8c522b | ||
|
|
15bc7e19f9 | ||
|
|
0be3f1a063 | ||
|
|
c0257c6721 | ||
|
|
9aec0fc7de | ||
|
|
bce5e0d82c | ||
|
|
62032ee248 | ||
|
|
775645f29b | ||
|
|
99c0456872 | ||
|
|
0236bee5de | ||
|
|
59c11b82d5 | ||
|
|
98871d1e9e | ||
|
|
b40dc5d742 | ||
|
|
17b0723713 | ||
|
|
ec585e8907 | ||
|
|
0aeb25ff3b | ||
|
|
a928f2c4aa | ||
|
|
51fcee6f81 | ||
|
|
654be65590 | ||
|
|
105ec79b2b | ||
|
|
c759d8427a | ||
|
|
c7b03d6479 | ||
|
|
2080738883 | ||
|
|
48bc73c271 | ||
|
|
3d0969d1d1 | ||
|
|
323f195036 | ||
|
|
c3c392fc98 | ||
|
|
5d2944c211 | ||
|
|
fe3ba1dd11 | ||
|
|
0c00eb93a0 | ||
|
|
baa77ec13b | ||
|
|
9263652c6d | ||
|
|
bc74375543 | ||
|
|
edb1756050 | ||
|
|
5215f6f654 | ||
|
|
1913b4eeed | ||
|
|
b44a4da5df | ||
|
|
919878fbb2 | ||
|
|
06bdf83419 | ||
|
|
2ff2810a92 | ||
|
|
20d9c1b30d |
14
.cvsignore
Normal file
14
.cvsignore
Normal file
@@ -0,0 +1,14 @@
|
|||||||
|
config.log
|
||||||
|
Makefile
|
||||||
|
libtool
|
||||||
|
Makefile.in
|
||||||
|
aclocal.m4
|
||||||
|
configure
|
||||||
|
config.h
|
||||||
|
config.status
|
||||||
|
curl-config
|
||||||
|
autom4te.cache
|
||||||
|
depcomp
|
||||||
|
config.guess
|
||||||
|
config.sub
|
||||||
|
ltmain.sh
|
||||||
1504
CHANGES.2002
Normal file
1504
CHANGES.2002
Normal file
File diff suppressed because it is too large
Load Diff
21
COPYING
Normal file
21
COPYING
Normal file
@@ -0,0 +1,21 @@
|
|||||||
|
COPYRIGHT AND PERMISSION NOTICE
|
||||||
|
|
||||||
|
Copyright (c) 1996 - 2004, Daniel Stenberg, <daniel@haxx.se>.
|
||||||
|
|
||||||
|
All rights reserved.
|
||||||
|
|
||||||
|
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", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||||
|
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||||
|
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT OF THIRD PARTY RIGHTS. IN
|
||||||
|
NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
|
||||||
|
DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
|
||||||
|
OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE
|
||||||
|
OR OTHER DEALINGS IN THE SOFTWARE.
|
||||||
|
|
||||||
|
Except as contained in this notice, the name of a copyright holder shall not
|
||||||
|
be used in advertising or otherwise to promote the sale, use or other dealings
|
||||||
|
in this Software without prior written authorization of the copyright holder.
|
||||||
39
CVS-INFO
39
CVS-INFO
@@ -15,8 +15,9 @@ Compile and build instructions follow below.
|
|||||||
CHANGES.0 contains ancient changes.
|
CHANGES.0 contains ancient changes.
|
||||||
CHANGES.$year contains changes for the particular year.
|
CHANGES.$year contains changes for the particular year.
|
||||||
|
|
||||||
memanalyze.pl is for analyzing the output generated by curl if -DMALLOCDEBUG
|
tests/memanalyze.pl
|
||||||
is used when compiling
|
is for analyzing the output generated by curl if -DCURLDEBUG
|
||||||
|
is used when compiling (run configure with --enable-debug)
|
||||||
|
|
||||||
buildconf builds the makefiles and configure stuff
|
buildconf builds the makefiles and configure stuff
|
||||||
|
|
||||||
@@ -30,25 +31,39 @@ To build after having extracted everything from CVS, do this:
|
|||||||
./configure
|
./configure
|
||||||
make
|
make
|
||||||
|
|
||||||
|
Daniel uses a ./configure line similar to this for easier development:
|
||||||
|
|
||||||
|
./configure --disable-shared --enable-debug --enable-maintainer-mode
|
||||||
|
|
||||||
|
|
||||||
REQUIREMENTS
|
REQUIREMENTS
|
||||||
|
|
||||||
You need the following software installed:
|
You need the following software installed:
|
||||||
|
|
||||||
o autoconf 2.50 (or later)
|
o autoconf 2.57 (or later)
|
||||||
o automake 1.5 (or later)
|
o automake 1.7 (or later)
|
||||||
o libtool 1.4 (or later)
|
o libtool 1.4.2 (or later)
|
||||||
o GNU m4 (required by autoconf)
|
o GNU m4 (required by autoconf)
|
||||||
|
|
||||||
o nroff + perl (if you don't have nroff and perl and you for some reason
|
o nroff + perl
|
||||||
don't want to install them, you can rename the source file
|
|
||||||
src/hugehelp.c.cvs to src/hugehelp.c and avoid having to generate this
|
If you don't have nroff and perl and you for some reason don't want to
|
||||||
file. This will of course give you an older version of the file that isn't
|
install them, you can rename the source file src/hugehelp.c.cvs to
|
||||||
up-to-date. That file was checked in once and won't be updated very
|
src/hugehelp.c and avoid having to generate this file. This will of course
|
||||||
regularly.)
|
give you an older version of the file that isn't up-to-date. That file was
|
||||||
|
checked in once and won't be updated very regularly.
|
||||||
|
|
||||||
|
o yacc/bison
|
||||||
|
|
||||||
|
If you don't have yacc or bison, you must rename the lib/getdate.c.cvs file
|
||||||
|
to lib/getdate.c to be able to build libcurl. yacc/bison is normally used
|
||||||
|
to generate the lib/getdate.c file from the lib/getdate.y source file.
|
||||||
|
|
||||||
MAC OS X
|
MAC OS X
|
||||||
|
|
||||||
For Mac OS X users, Guido Neitzer write down the following step-by-step guide:
|
With Mac OS X 10.2 and the associated Developer Tools, the installed versions
|
||||||
|
of the build tools are adequate. For Mac OS X 10.1 users, Guido Neitzer
|
||||||
|
wrote the following step-by-step guide:
|
||||||
|
|
||||||
1. Install fink (http://fink.sourceforge.net)
|
1. Install fink (http://fink.sourceforge.net)
|
||||||
2. Update fink to the newest version (with the installed fink)
|
2. Update fink to the newest version (with the installed fink)
|
||||||
|
|||||||
25
LEGAL
25
LEGAL
@@ -1,25 +0,0 @@
|
|||||||
Copyright (C) 1998-2001, Daniel Stenberg, <daniel@haxx.se>, et al.
|
|
||||||
|
|
||||||
Everyone is permitted to copy and distribute verbatim copies of this license
|
|
||||||
document, but changing it is not allowed.
|
|
||||||
|
|
||||||
In order to be useful for every potential user, the curl and libcurl are
|
|
||||||
dual-licensed under the MPL and the MIT/X-derivate licenses.
|
|
||||||
|
|
||||||
You may opt to use, copy, modify, merge, publish, distribute and/or sell
|
|
||||||
copies of the Software, and permit persons to whom the Software is furnished
|
|
||||||
to do so, under the terms of the MPL or the MIT/X-derivate licenses. You may
|
|
||||||
pick one of these licenses. The files MITX.txt and MPL-1.1.txt contain the
|
|
||||||
license texts.
|
|
||||||
|
|
||||||
As a courtesy to the open-source and free software community, we ask you to
|
|
||||||
dual-license any modifications that you make as well, under the terms of this
|
|
||||||
document.
|
|
||||||
|
|
||||||
Please remember to always keep the licensing information included in
|
|
||||||
individual source files up-to-date, so as to avoid misleading anyone as to
|
|
||||||
the status of these files.
|
|
||||||
|
|
||||||
I will use a submission policy according to which I will only enter
|
|
||||||
contributions into the CVS tree if the contributor agrees to both licenses
|
|
||||||
and this dual-license approach.
|
|
||||||
27
MITX.txt
27
MITX.txt
@@ -1,27 +0,0 @@
|
|||||||
COPYRIGHT AND PERMISSION NOTICE
|
|
||||||
|
|
||||||
Copyright (c) 1996 - 2001, Daniel Stenberg, <daniel@haxx.se>.
|
|
||||||
|
|
||||||
All rights reserved.
|
|
||||||
|
|
||||||
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
||||||
of this software and associated documentation files (the "Software"), to deal
|
|
||||||
in the Software without restriction, including without limitation the rights
|
|
||||||
to use, copy, modify, merge, publish, distribute, and/or sell copies of the
|
|
||||||
Software, and to permit persons to whom the Software is furnished to do so,
|
|
||||||
provided that the above copyright notice(s) and this permission notice appear
|
|
||||||
in all copies of the Software.
|
|
||||||
|
|
||||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
||||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
||||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT OF THIRD PARTY RIGHTS. IN
|
|
||||||
NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS NOTICE BE
|
|
||||||
LIABLE FOR ANY CLAIM, OR ANY SPECIAL 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.
|
|
||||||
|
|
||||||
Except as contained in this notice, the name of a copyright holder shall not
|
|
||||||
be used in advertising or otherwise to promote the sale, use or other dealings
|
|
||||||
in this Software without prior written authorization of the copyright holder.
|
|
||||||
|
|
||||||
470
MPL-1.1.txt
470
MPL-1.1.txt
@@ -1,470 +0,0 @@
|
|||||||
MOZILLA PUBLIC LICENSE
|
|
||||||
Version 1.1
|
|
||||||
|
|
||||||
---------------
|
|
||||||
|
|
||||||
1. Definitions.
|
|
||||||
|
|
||||||
1.0.1. "Commercial Use" means distribution or otherwise making the
|
|
||||||
Covered Code available to a third party.
|
|
||||||
|
|
||||||
1.1. "Contributor" means each entity that creates or contributes to
|
|
||||||
the creation of Modifications.
|
|
||||||
|
|
||||||
1.2. "Contributor Version" means the combination of the Original
|
|
||||||
Code, prior Modifications used by a Contributor, and the Modifications
|
|
||||||
made by that particular Contributor.
|
|
||||||
|
|
||||||
1.3. "Covered Code" means the Original Code or Modifications or the
|
|
||||||
combination of the Original Code and Modifications, in each case
|
|
||||||
including portions thereof.
|
|
||||||
|
|
||||||
1.4. "Electronic Distribution Mechanism" means a mechanism generally
|
|
||||||
accepted in the software development community for the electronic
|
|
||||||
transfer of data.
|
|
||||||
|
|
||||||
1.5. "Executable" means Covered Code in any form other than Source
|
|
||||||
Code.
|
|
||||||
|
|
||||||
1.6. "Initial Developer" means the individual or entity identified
|
|
||||||
as the Initial Developer in the Source Code notice required by Exhibit
|
|
||||||
A.
|
|
||||||
|
|
||||||
1.7. "Larger Work" means a work which combines Covered Code or
|
|
||||||
portions thereof with code not governed by the terms of this License.
|
|
||||||
|
|
||||||
1.8. "License" means this document.
|
|
||||||
|
|
||||||
1.8.1. "Licensable" means having the right to grant, to the maximum
|
|
||||||
extent possible, whether at the time of the initial grant or
|
|
||||||
subsequently acquired, any and all of the rights conveyed herein.
|
|
||||||
|
|
||||||
1.9. "Modifications" means any addition to or deletion from the
|
|
||||||
substance or structure of either the Original Code or any previous
|
|
||||||
Modifications. When Covered Code is released as a series of files, a
|
|
||||||
Modification is:
|
|
||||||
A. Any addition to or deletion from the contents of a file
|
|
||||||
containing Original Code or previous Modifications.
|
|
||||||
|
|
||||||
B. Any new file that contains any part of the Original Code or
|
|
||||||
previous Modifications.
|
|
||||||
|
|
||||||
1.10. "Original Code" means Source Code of computer software code
|
|
||||||
which is described in the Source Code notice required by Exhibit A as
|
|
||||||
Original Code, and which, at the time of its release under this
|
|
||||||
License is not already Covered Code governed by this License.
|
|
||||||
|
|
||||||
1.10.1. "Patent Claims" means any patent claim(s), now owned or
|
|
||||||
hereafter acquired, including without limitation, method, process,
|
|
||||||
and apparatus claims, in any patent Licensable by grantor.
|
|
||||||
|
|
||||||
1.11. "Source Code" means the preferred form of the Covered Code for
|
|
||||||
making modifications to it, including all modules it contains, plus
|
|
||||||
any associated interface definition files, scripts used to control
|
|
||||||
compilation and installation of an Executable, or source code
|
|
||||||
differential comparisons against either the Original Code or another
|
|
||||||
well known, available Covered Code of the Contributor's choice. The
|
|
||||||
Source Code can be in a compressed or archival form, provided the
|
|
||||||
appropriate decompression or de-archiving software is widely available
|
|
||||||
for no charge.
|
|
||||||
|
|
||||||
1.12. "You" (or "Your") means an individual or a legal entity
|
|
||||||
exercising rights under, and complying with all of the terms of, this
|
|
||||||
License or a future version of this License issued under Section 6.1.
|
|
||||||
For legal entities, "You" includes any entity which controls, is
|
|
||||||
controlled by, or is under common control with You. For purposes of
|
|
||||||
this definition, "control" means (a) the power, direct or indirect,
|
|
||||||
to cause the direction or management of such entity, whether by
|
|
||||||
contract or otherwise, or (b) ownership of more than fifty percent
|
|
||||||
(50%) of the outstanding shares or beneficial ownership of such
|
|
||||||
entity.
|
|
||||||
|
|
||||||
2. Source Code License.
|
|
||||||
|
|
||||||
2.1. The Initial Developer Grant.
|
|
||||||
The Initial Developer hereby grants You a world-wide, royalty-free,
|
|
||||||
non-exclusive license, subject to third party intellectual property
|
|
||||||
claims:
|
|
||||||
(a) under intellectual property rights (other than patent or
|
|
||||||
trademark) Licensable by Initial Developer to use, reproduce,
|
|
||||||
modify, display, perform, sublicense and distribute the Original
|
|
||||||
Code (or portions thereof) with or without Modifications, and/or
|
|
||||||
as part of a Larger Work; and
|
|
||||||
|
|
||||||
(b) under Patents Claims infringed by the making, using or
|
|
||||||
selling of Original Code, to make, have made, use, practice,
|
|
||||||
sell, and offer for sale, and/or otherwise dispose of the
|
|
||||||
Original Code (or portions thereof).
|
|
||||||
|
|
||||||
(c) the licenses granted in this Section 2.1(a) and (b) are
|
|
||||||
effective on the date Initial Developer first distributes
|
|
||||||
Original Code under the terms of this License.
|
|
||||||
|
|
||||||
(d) Notwithstanding Section 2.1(b) above, no patent license is
|
|
||||||
granted: 1) for code that You delete from the Original Code; 2)
|
|
||||||
separate from the Original Code; or 3) for infringements caused
|
|
||||||
by: i) the modification of the Original Code or ii) the
|
|
||||||
combination of the Original Code with other software or devices.
|
|
||||||
|
|
||||||
2.2. Contributor Grant.
|
|
||||||
Subject to third party intellectual property claims, each Contributor
|
|
||||||
hereby grants You a world-wide, royalty-free, non-exclusive license
|
|
||||||
|
|
||||||
(a) under intellectual property rights (other than patent or
|
|
||||||
trademark) Licensable by Contributor, to use, reproduce, modify,
|
|
||||||
display, perform, sublicense and distribute the Modifications
|
|
||||||
created by such Contributor (or portions thereof) either on an
|
|
||||||
unmodified basis, with other Modifications, as Covered Code
|
|
||||||
and/or as part of a Larger Work; and
|
|
||||||
|
|
||||||
(b) under Patent Claims infringed by the making, using, or
|
|
||||||
selling of Modifications made by that Contributor either alone
|
|
||||||
and/or in combination with its Contributor Version (or portions
|
|
||||||
of such combination), to make, use, sell, offer for sale, have
|
|
||||||
made, and/or otherwise dispose of: 1) Modifications made by that
|
|
||||||
Contributor (or portions thereof); and 2) the combination of
|
|
||||||
Modifications made by that Contributor with its Contributor
|
|
||||||
Version (or portions of such combination).
|
|
||||||
|
|
||||||
(c) the licenses granted in Sections 2.2(a) and 2.2(b) are
|
|
||||||
effective on the date Contributor first makes Commercial Use of
|
|
||||||
the Covered Code.
|
|
||||||
|
|
||||||
(d) Notwithstanding Section 2.2(b) above, no patent license is
|
|
||||||
granted: 1) for any code that Contributor has deleted from the
|
|
||||||
Contributor Version; 2) separate from the Contributor Version;
|
|
||||||
3) for infringements caused by: i) third party modifications of
|
|
||||||
Contributor Version or ii) the combination of Modifications made
|
|
||||||
by that Contributor with other software (except as part of the
|
|
||||||
Contributor Version) or other devices; or 4) under Patent Claims
|
|
||||||
infringed by Covered Code in the absence of Modifications made by
|
|
||||||
that Contributor.
|
|
||||||
|
|
||||||
3. Distribution Obligations.
|
|
||||||
|
|
||||||
3.1. Application of License.
|
|
||||||
The Modifications which You create or to which You contribute are
|
|
||||||
governed by the terms of this License, including without limitation
|
|
||||||
Section 2.2. The Source Code version of Covered Code may be
|
|
||||||
distributed only under the terms of this License or a future version
|
|
||||||
of this License released under Section 6.1, and You must include a
|
|
||||||
copy of this License with every copy of the Source Code You
|
|
||||||
distribute. You may not offer or impose any terms on any Source Code
|
|
||||||
version that alters or restricts the applicable version of this
|
|
||||||
License or the recipients' rights hereunder. However, You may include
|
|
||||||
an additional document offering the additional rights described in
|
|
||||||
Section 3.5.
|
|
||||||
|
|
||||||
3.2. Availability of Source Code.
|
|
||||||
Any Modification which You create or to which You contribute must be
|
|
||||||
made available in Source Code form under the terms of this License
|
|
||||||
either on the same media as an Executable version or via an accepted
|
|
||||||
Electronic Distribution Mechanism to anyone to whom you made an
|
|
||||||
Executable version available; and if made available via Electronic
|
|
||||||
Distribution Mechanism, must remain available for at least twelve (12)
|
|
||||||
months after the date it initially became available, or at least six
|
|
||||||
(6) months after a subsequent version of that particular Modification
|
|
||||||
has been made available to such recipients. You are responsible for
|
|
||||||
ensuring that the Source Code version remains available even if the
|
|
||||||
Electronic Distribution Mechanism is maintained by a third party.
|
|
||||||
|
|
||||||
3.3. Description of Modifications.
|
|
||||||
You must cause all Covered Code to which You contribute to contain a
|
|
||||||
file documenting the changes You made to create that Covered Code and
|
|
||||||
the date of any change. You must include a prominent statement that
|
|
||||||
the Modification is derived, directly or indirectly, from Original
|
|
||||||
Code provided by the Initial Developer and including the name of the
|
|
||||||
Initial Developer in (a) the Source Code, and (b) in any notice in an
|
|
||||||
Executable version or related documentation in which You describe the
|
|
||||||
origin or ownership of the Covered Code.
|
|
||||||
|
|
||||||
3.4. Intellectual Property Matters
|
|
||||||
(a) Third Party Claims.
|
|
||||||
If Contributor has knowledge that a license under a third party's
|
|
||||||
intellectual property rights is required to exercise the rights
|
|
||||||
granted by such Contributor under Sections 2.1 or 2.2,
|
|
||||||
Contributor must include a text file with the Source Code
|
|
||||||
distribution titled "LEGAL" which describes the claim and the
|
|
||||||
party making the claim in sufficient detail that a recipient will
|
|
||||||
know whom to contact. If Contributor obtains such knowledge after
|
|
||||||
the Modification is made available as described in Section 3.2,
|
|
||||||
Contributor shall promptly modify the LEGAL file in all copies
|
|
||||||
Contributor makes available thereafter and shall take other steps
|
|
||||||
(such as notifying appropriate mailing lists or newsgroups)
|
|
||||||
reasonably calculated to inform those who received the Covered
|
|
||||||
Code that new knowledge has been obtained.
|
|
||||||
|
|
||||||
(b) Contributor APIs.
|
|
||||||
If Contributor's Modifications include an application programming
|
|
||||||
interface and Contributor has knowledge of patent licenses which
|
|
||||||
are reasonably necessary to implement that API, Contributor must
|
|
||||||
also include this information in the LEGAL file.
|
|
||||||
|
|
||||||
(c) Representations.
|
|
||||||
Contributor represents that, except as disclosed pursuant to
|
|
||||||
Section 3.4(a) above, Contributor believes that Contributor's
|
|
||||||
Modifications are Contributor's original creation(s) and/or
|
|
||||||
Contributor has sufficient rights to grant the rights conveyed by
|
|
||||||
this License.
|
|
||||||
|
|
||||||
3.5. Required Notices.
|
|
||||||
You must duplicate the notice in Exhibit A in each file of the Source
|
|
||||||
Code. If it is not possible to put such notice in a particular Source
|
|
||||||
Code file due to its structure, then You must include such notice in a
|
|
||||||
location (such as a relevant directory) where a user would be likely
|
|
||||||
to look for such a notice. If You created one or more Modification(s)
|
|
||||||
You may add your name as a Contributor to the notice described in
|
|
||||||
Exhibit A. You must also duplicate this License in any documentation
|
|
||||||
for the Source Code where You describe recipients' rights or ownership
|
|
||||||
rights relating to Covered Code. You may choose to offer, and to
|
|
||||||
charge a fee for, warranty, support, indemnity or liability
|
|
||||||
obligations to one or more recipients of Covered Code. However, You
|
|
||||||
may do so only on Your own behalf, and not on behalf of the Initial
|
|
||||||
Developer or any Contributor. You must make it absolutely clear than
|
|
||||||
any such warranty, support, indemnity or liability obligation is
|
|
||||||
offered by You alone, and You hereby agree to indemnify the Initial
|
|
||||||
Developer and every Contributor for any liability incurred by the
|
|
||||||
Initial Developer or such Contributor as a result of warranty,
|
|
||||||
support, indemnity or liability terms You offer.
|
|
||||||
|
|
||||||
3.6. Distribution of Executable Versions.
|
|
||||||
You may distribute Covered Code in Executable form only if the
|
|
||||||
requirements of Section 3.1-3.5 have been met for that Covered Code,
|
|
||||||
and if You include a notice stating that the Source Code version of
|
|
||||||
the Covered Code is available under the terms of this License,
|
|
||||||
including a description of how and where You have fulfilled the
|
|
||||||
obligations of Section 3.2. The notice must be conspicuously included
|
|
||||||
in any notice in an Executable version, related documentation or
|
|
||||||
collateral in which You describe recipients' rights relating to the
|
|
||||||
Covered Code. You may distribute the Executable version of Covered
|
|
||||||
Code or ownership rights under a license of Your choice, which may
|
|
||||||
contain terms different from this License, provided that You are in
|
|
||||||
compliance with the terms of this License and that the license for the
|
|
||||||
Executable version does not attempt to limit or alter the recipient's
|
|
||||||
rights in the Source Code version from the rights set forth in this
|
|
||||||
License. If You distribute the Executable version under a different
|
|
||||||
license You must make it absolutely clear that any terms which differ
|
|
||||||
from this License are offered by You alone, not by the Initial
|
|
||||||
Developer or any Contributor. You hereby agree to indemnify the
|
|
||||||
Initial Developer and every Contributor for any liability incurred by
|
|
||||||
the Initial Developer or such Contributor as a result of any such
|
|
||||||
terms You offer.
|
|
||||||
|
|
||||||
3.7. Larger Works.
|
|
||||||
You may create a Larger Work by combining Covered Code with other code
|
|
||||||
not governed by the terms of this License and distribute the Larger
|
|
||||||
Work as a single product. In such a case, You must make sure the
|
|
||||||
requirements of this License are fulfilled for the Covered Code.
|
|
||||||
|
|
||||||
4. Inability to Comply Due to Statute or Regulation.
|
|
||||||
|
|
||||||
If it is impossible for You to comply with any of the terms of this
|
|
||||||
License with respect to some or all of the Covered Code due to
|
|
||||||
statute, judicial order, or regulation then You must: (a) comply with
|
|
||||||
the terms of this License to the maximum extent possible; and (b)
|
|
||||||
describe the limitations and the code they affect. Such description
|
|
||||||
must be included in the LEGAL file described in Section 3.4 and must
|
|
||||||
be included with all distributions of the Source Code. Except to the
|
|
||||||
extent prohibited by statute or regulation, such description must be
|
|
||||||
sufficiently detailed for a recipient of ordinary skill to be able to
|
|
||||||
understand it.
|
|
||||||
|
|
||||||
5. Application of this License.
|
|
||||||
|
|
||||||
This License applies to code to which the Initial Developer has
|
|
||||||
attached the notice in Exhibit A and to related Covered Code.
|
|
||||||
|
|
||||||
6. Versions of the License.
|
|
||||||
|
|
||||||
6.1. New Versions.
|
|
||||||
Netscape Communications Corporation ("Netscape") may publish revised
|
|
||||||
and/or new versions of the License from time to time. Each version
|
|
||||||
will be given a distinguishing version number.
|
|
||||||
|
|
||||||
6.2. Effect of New Versions.
|
|
||||||
Once Covered Code has been published under a particular version of the
|
|
||||||
License, You may always continue to use it under the terms of that
|
|
||||||
version. You may also choose to use such Covered Code under the terms
|
|
||||||
of any subsequent version of the License published by Netscape. No one
|
|
||||||
other than Netscape has the right to modify the terms applicable to
|
|
||||||
Covered Code created under this License.
|
|
||||||
|
|
||||||
6.3. Derivative Works.
|
|
||||||
If You create or use a modified version of this License (which you may
|
|
||||||
only do in order to apply it to code which is not already Covered Code
|
|
||||||
governed by this License), You must (a) rename Your license so that
|
|
||||||
the phrases "Mozilla", "MOZILLAPL", "MOZPL", "Netscape",
|
|
||||||
"MPL", "NPL" or any confusingly similar phrase do not appear in your
|
|
||||||
license (except to note that your license differs from this License)
|
|
||||||
and (b) otherwise make it clear that Your version of the license
|
|
||||||
contains terms which differ from the Mozilla Public License and
|
|
||||||
Netscape Public License. (Filling in the name of the Initial
|
|
||||||
Developer, Original Code or Contributor in the notice described in
|
|
||||||
Exhibit A shall not of themselves be deemed to be modifications of
|
|
||||||
this License.)
|
|
||||||
|
|
||||||
7. DISCLAIMER OF WARRANTY.
|
|
||||||
|
|
||||||
COVERED CODE IS PROVIDED UNDER THIS LICENSE ON AN "AS IS" BASIS,
|
|
||||||
WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING,
|
|
||||||
WITHOUT LIMITATION, WARRANTIES THAT THE COVERED CODE IS FREE OF
|
|
||||||
DEFECTS, MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE OR NON-INFRINGING.
|
|
||||||
THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE COVERED CODE
|
|
||||||
IS WITH YOU. SHOULD ANY COVERED CODE PROVE DEFECTIVE IN ANY RESPECT,
|
|
||||||
YOU (NOT THE INITIAL DEVELOPER OR ANY OTHER CONTRIBUTOR) ASSUME THE
|
|
||||||
COST OF ANY NECESSARY SERVICING, REPAIR OR CORRECTION. THIS DISCLAIMER
|
|
||||||
OF WARRANTY CONSTITUTES AN ESSENTIAL PART OF THIS LICENSE. NO USE OF
|
|
||||||
ANY COVERED CODE IS AUTHORIZED HEREUNDER EXCEPT UNDER THIS DISCLAIMER.
|
|
||||||
|
|
||||||
8. TERMINATION.
|
|
||||||
|
|
||||||
8.1. This License and the rights granted hereunder will terminate
|
|
||||||
automatically if You fail to comply with terms herein and fail to cure
|
|
||||||
such breach within 30 days of becoming aware of the breach. All
|
|
||||||
sublicenses to the Covered Code which are properly granted shall
|
|
||||||
survive any termination of this License. Provisions which, by their
|
|
||||||
nature, must remain in effect beyond the termination of this License
|
|
||||||
shall survive.
|
|
||||||
|
|
||||||
8.2. If You initiate litigation by asserting a patent infringement
|
|
||||||
claim (excluding declatory judgment actions) against Initial Developer
|
|
||||||
or a Contributor (the Initial Developer or Contributor against whom
|
|
||||||
You file such action is referred to as "Participant") alleging that:
|
|
||||||
|
|
||||||
(a) such Participant's Contributor Version directly or indirectly
|
|
||||||
infringes any patent, then any and all rights granted by such
|
|
||||||
Participant to You under Sections 2.1 and/or 2.2 of this License
|
|
||||||
shall, upon 60 days notice from Participant terminate prospectively,
|
|
||||||
unless if within 60 days after receipt of notice You either: (i)
|
|
||||||
agree in writing to pay Participant a mutually agreeable reasonable
|
|
||||||
royalty for Your past and future use of Modifications made by such
|
|
||||||
Participant, or (ii) withdraw Your litigation claim with respect to
|
|
||||||
the Contributor Version against such Participant. If within 60 days
|
|
||||||
of notice, a reasonable royalty and payment arrangement are not
|
|
||||||
mutually agreed upon in writing by the parties or the litigation claim
|
|
||||||
is not withdrawn, the rights granted by Participant to You under
|
|
||||||
Sections 2.1 and/or 2.2 automatically terminate at the expiration of
|
|
||||||
the 60 day notice period specified above.
|
|
||||||
|
|
||||||
(b) any software, hardware, or device, other than such Participant's
|
|
||||||
Contributor Version, directly or indirectly infringes any patent, then
|
|
||||||
any rights granted to You by such Participant under Sections 2.1(b)
|
|
||||||
and 2.2(b) are revoked effective as of the date You first made, used,
|
|
||||||
sold, distributed, or had made, Modifications made by that
|
|
||||||
Participant.
|
|
||||||
|
|
||||||
8.3. If You assert a patent infringement claim against Participant
|
|
||||||
alleging that such Participant's Contributor Version directly or
|
|
||||||
indirectly infringes any patent where such claim is resolved (such as
|
|
||||||
by license or settlement) prior to the initiation of patent
|
|
||||||
infringement litigation, then the reasonable value of the licenses
|
|
||||||
granted by such Participant under Sections 2.1 or 2.2 shall be taken
|
|
||||||
into account in determining the amount or value of any payment or
|
|
||||||
license.
|
|
||||||
|
|
||||||
8.4. In the event of termination under Sections 8.1 or 8.2 above,
|
|
||||||
all end user license agreements (excluding distributors and resellers)
|
|
||||||
which have been validly granted by You or any distributor hereunder
|
|
||||||
prior to termination shall survive termination.
|
|
||||||
|
|
||||||
9. LIMITATION OF LIABILITY.
|
|
||||||
|
|
||||||
UNDER NO CIRCUMSTANCES AND UNDER NO LEGAL THEORY, WHETHER TORT
|
|
||||||
(INCLUDING NEGLIGENCE), CONTRACT, OR OTHERWISE, SHALL YOU, THE INITIAL
|
|
||||||
DEVELOPER, ANY OTHER CONTRIBUTOR, OR ANY DISTRIBUTOR OF COVERED CODE,
|
|
||||||
OR ANY SUPPLIER OF ANY OF SUCH PARTIES, BE LIABLE TO ANY PERSON FOR
|
|
||||||
ANY INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES OF ANY
|
|
||||||
CHARACTER INCLUDING, WITHOUT LIMITATION, DAMAGES FOR LOSS OF GOODWILL,
|
|
||||||
WORK STOPPAGE, COMPUTER FAILURE OR MALFUNCTION, OR ANY AND ALL OTHER
|
|
||||||
COMMERCIAL DAMAGES OR LOSSES, EVEN IF SUCH PARTY SHALL HAVE BEEN
|
|
||||||
INFORMED OF THE POSSIBILITY OF SUCH DAMAGES. THIS LIMITATION OF
|
|
||||||
LIABILITY SHALL NOT APPLY TO LIABILITY FOR DEATH OR PERSONAL INJURY
|
|
||||||
RESULTING FROM SUCH PARTY'S NEGLIGENCE TO THE EXTENT APPLICABLE LAW
|
|
||||||
PROHIBITS SUCH LIMITATION. SOME JURISDICTIONS DO NOT ALLOW THE
|
|
||||||
EXCLUSION OR LIMITATION OF INCIDENTAL OR CONSEQUENTIAL DAMAGES, SO
|
|
||||||
THIS EXCLUSION AND LIMITATION MAY NOT APPLY TO YOU.
|
|
||||||
|
|
||||||
10. U.S. GOVERNMENT END USERS.
|
|
||||||
|
|
||||||
The Covered Code is a "commercial item," as that term is defined in
|
|
||||||
48 C.F.R. 2.101 (Oct. 1995), consisting of "commercial computer
|
|
||||||
software" and "commercial computer software documentation," as such
|
|
||||||
terms are used in 48 C.F.R. 12.212 (Sept. 1995). Consistent with 48
|
|
||||||
C.F.R. 12.212 and 48 C.F.R. 227.7202-1 through 227.7202-4 (June 1995),
|
|
||||||
all U.S. Government End Users acquire Covered Code with only those
|
|
||||||
rights set forth herein.
|
|
||||||
|
|
||||||
11. MISCELLANEOUS.
|
|
||||||
|
|
||||||
This License represents the complete agreement concerning subject
|
|
||||||
matter hereof. If any provision of this License is held to be
|
|
||||||
unenforceable, such provision shall be reformed only to the extent
|
|
||||||
necessary to make it enforceable. This License shall be governed by
|
|
||||||
California law provisions (except to the extent applicable law, if
|
|
||||||
any, provides otherwise), excluding its conflict-of-law provisions.
|
|
||||||
With respect to disputes in which at least one party is a citizen of,
|
|
||||||
or an entity chartered or registered to do business in the United
|
|
||||||
States of America, any litigation relating to this License shall be
|
|
||||||
subject to the jurisdiction of the Federal Courts of the Northern
|
|
||||||
District of California, with venue lying in Santa Clara County,
|
|
||||||
California, with the losing party responsible for costs, including
|
|
||||||
without limitation, court costs and reasonable attorneys' fees and
|
|
||||||
expenses. The application of the United Nations Convention on
|
|
||||||
Contracts for the International Sale of Goods is expressly excluded.
|
|
||||||
Any law or regulation which provides that the language of a contract
|
|
||||||
shall be construed against the drafter shall not apply to this
|
|
||||||
License.
|
|
||||||
|
|
||||||
12. RESPONSIBILITY FOR CLAIMS.
|
|
||||||
|
|
||||||
As between Initial Developer and the Contributors, each party is
|
|
||||||
responsible for claims and damages arising, directly or indirectly,
|
|
||||||
out of its utilization of rights under this License and You agree to
|
|
||||||
work with Initial Developer and Contributors to distribute such
|
|
||||||
responsibility on an equitable basis. Nothing herein is intended or
|
|
||||||
shall be deemed to constitute any admission of liability.
|
|
||||||
|
|
||||||
13. MULTIPLE-LICENSED CODE.
|
|
||||||
|
|
||||||
Initial Developer may designate portions of the Covered Code as
|
|
||||||
"Multiple-Licensed". "Multiple-Licensed" means that the Initial
|
|
||||||
Developer permits you to utilize portions of the Covered Code under
|
|
||||||
Your choice of the NPL or the alternative licenses, if any, specified
|
|
||||||
by the Initial Developer in the file described in Exhibit A.
|
|
||||||
|
|
||||||
EXHIBIT A -Mozilla Public License.
|
|
||||||
|
|
||||||
``The contents of this file are subject to the Mozilla Public License
|
|
||||||
Version 1.1 (the "License"); you may not use this file except in
|
|
||||||
compliance with the License. You may obtain a copy of the License at
|
|
||||||
http://www.mozilla.org/MPL/
|
|
||||||
|
|
||||||
Software distributed under the License is distributed on an "AS IS"
|
|
||||||
basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the
|
|
||||||
License for the specific language governing rights and limitations
|
|
||||||
under the License.
|
|
||||||
|
|
||||||
The Original Code is ______________________________________.
|
|
||||||
|
|
||||||
The Initial Developer of the Original Code is ________________________.
|
|
||||||
Portions created by ______________________ are Copyright (C) ______
|
|
||||||
_______________________. All Rights Reserved.
|
|
||||||
|
|
||||||
Contributor(s): ______________________________________.
|
|
||||||
|
|
||||||
Alternatively, the contents of this file may be used under the terms
|
|
||||||
of the _____ license (the "[___] License"), in which case the
|
|
||||||
provisions of [______] License are applicable instead of those
|
|
||||||
above. If you wish to allow use of your version of this file only
|
|
||||||
under the terms of the [____] License and not to allow others to use
|
|
||||||
your version of this file under the MPL, indicate your decision by
|
|
||||||
deleting the provisions above and replace them with the notice and
|
|
||||||
other provisions required by the [___] License. If you do not delete
|
|
||||||
the provisions above, a recipient may use your version of this file
|
|
||||||
under either the MPL or the [___] License."
|
|
||||||
|
|
||||||
[NOTE: The text of this Exhibit A may differ slightly from the text of
|
|
||||||
the notices in the Source Code files of the Original Code. You should
|
|
||||||
use the text of this Exhibit A rather than the text found in the
|
|
||||||
Original Code Source Code for Your Modifications.]
|
|
||||||
|
|
||||||
59
Makefile.am
59
Makefile.am
@@ -1,28 +1,59 @@
|
|||||||
|
#***************************************************************************
|
||||||
|
# _ _ ____ _
|
||||||
|
# Project ___| | | | _ \| |
|
||||||
|
# / __| | | | |_) | |
|
||||||
|
# | (__| |_| | _ <| |___
|
||||||
|
# \___|\___/|_| \_\_____|
|
||||||
|
#
|
||||||
|
# Copyright (C) 1998 - 2004, Daniel Stenberg, <daniel@haxx.se>, et al.
|
||||||
|
#
|
||||||
|
# This software is licensed as described in the file COPYING, which
|
||||||
|
# you should have received as part of this distribution. The terms
|
||||||
|
# are also available at http://curl.haxx.se/docs/copyright.html.
|
||||||
|
#
|
||||||
|
# You may opt to use, copy, modify, merge, publish, distribute and/or sell
|
||||||
|
# copies of the Software, and permit persons to whom the Software is
|
||||||
|
# furnished to do so, under the terms of the COPYING file.
|
||||||
|
#
|
||||||
|
# This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
|
||||||
|
# KIND, either express or implied.
|
||||||
#
|
#
|
||||||
# $Id$
|
# $Id$
|
||||||
#
|
###########################################################################
|
||||||
|
|
||||||
AUTOMAKE_OPTIONS = foreign
|
AUTOMAKE_OPTIONS = foreign
|
||||||
|
|
||||||
EXTRA_DIST = \
|
EXTRA_DIST = CHANGES COPYING maketgz reconf Makefile.dist \
|
||||||
CHANGES LEGAL maketgz MITX.txt MPL-1.1.txt \
|
curl-config.in build_vms.com curl-style.el sample.emacs testcurl.sh \
|
||||||
reconf Makefile.dist curl-config.in build_vms.com curl-mode.el
|
RELEASE-NOTES
|
||||||
|
|
||||||
bin_SCRIPTS = curl-config
|
bin_SCRIPTS = curl-config
|
||||||
|
|
||||||
SUBDIRS = docs lib src include tests packages
|
SUBDIRS = lib src
|
||||||
|
DIST_SUBDIRS = $(SUBDIRS) tests include packages docs
|
||||||
|
|
||||||
# create a root makefile in the distribution:
|
|
||||||
dist-hook:
|
dist-hook:
|
||||||
cp $(srcdir)/Makefile.dist $(distdir)/Makefile
|
rm -rf $(top_builddir)/tests/log
|
||||||
|
find $(distdir) -name "*.dist" -exec rm {} \;
|
||||||
|
(distit=`find $(srcdir) -name "*.dist"`; \
|
||||||
|
for file in $$distit; do \
|
||||||
|
strip=`echo $$file | sed -e s/^$(srcdir)// -e s/\.dist//`; \
|
||||||
|
cp $$file $(distdir)$$strip; \
|
||||||
|
done)
|
||||||
|
|
||||||
html:
|
html:
|
||||||
cd docs; make html
|
cd docs; make html
|
||||||
|
|
||||||
|
pdf:
|
||||||
|
cd docs; make pdf
|
||||||
|
|
||||||
check: test
|
check: test
|
||||||
|
|
||||||
test:
|
test:
|
||||||
@(cd tests; $(MAKE) quiet-test)
|
@(cd tests; $(MAKE) all quiet-test)
|
||||||
|
|
||||||
|
test-full:
|
||||||
|
@(cd tests; $(MAKE) all full-test)
|
||||||
|
|
||||||
#
|
#
|
||||||
# Build source and binary rpms. For rpm-3.0 and above, the ~/.rpmmacros
|
# Build source and binary rpms. For rpm-3.0 and above, the ~/.rpmmacros
|
||||||
@@ -63,7 +94,7 @@ rpm:
|
|||||||
pkgadd:
|
pkgadd:
|
||||||
umask 022 ; \
|
umask 022 ; \
|
||||||
make install DESTDIR=`/bin/pwd`/packages/Solaris/root ; \
|
make install DESTDIR=`/bin/pwd`/packages/Solaris/root ; \
|
||||||
cat LEGAL MITX.txt MPL-1.1.txt > $(srcdir)/packages/Solaris/copyright ; \
|
cat COPYING > $(srcdir)/packages/Solaris/copyright ; \
|
||||||
cd $(srcdir)/packages/Solaris && $(MAKE) package
|
cd $(srcdir)/packages/Solaris && $(MAKE) package
|
||||||
|
|
||||||
#
|
#
|
||||||
@@ -71,3 +102,13 @@ pkgadd:
|
|||||||
# resulting .tar.bz2 file will end up at packages/Win32/cygwin
|
# resulting .tar.bz2 file will end up at packages/Win32/cygwin
|
||||||
cygwinbin:
|
cygwinbin:
|
||||||
$(MAKE) -C packages/Win32/cygwin cygwinbin
|
$(MAKE) -C packages/Win32/cygwin cygwinbin
|
||||||
|
|
||||||
|
# We extend the standard install with a custom hook:
|
||||||
|
install-data-hook:
|
||||||
|
cd include && $(MAKE) install
|
||||||
|
cd docs && $(MAKE) install
|
||||||
|
|
||||||
|
# We extend the standard uninstall with a custom hook:
|
||||||
|
uninstall-hook:
|
||||||
|
cd include && $(MAKE) uninstall
|
||||||
|
cd docs && $(MAKE) uninstall
|
||||||
|
|||||||
@@ -1,25 +1,25 @@
|
|||||||
#############################################################################
|
#***************************************************************************
|
||||||
# _ _ ____ _
|
# _ _ ____ _
|
||||||
# Project ___| | | | _ \| |
|
# Project ___| | | | _ \| |
|
||||||
# / __| | | | |_) | |
|
# / __| | | | |_) | |
|
||||||
# | (__| |_| | _ <| |___
|
# | (__| |_| | _ <| |___
|
||||||
# \___|\___/|_| \_\_____|
|
# \___|\___/|_| \_\_____|
|
||||||
#
|
#
|
||||||
# Copyright (C) 2002, Daniel Stenberg, <daniel@haxx.se>, et al.
|
# Copyright (C) 1998 - 2004, Daniel Stenberg, <daniel@haxx.se>, et al.
|
||||||
#
|
#
|
||||||
# In order to be useful for every potential user, curl and libcurl are
|
# This software is licensed as described in the file COPYING, which
|
||||||
# dual-licensed under the MPL and the MIT/X-derivate licenses.
|
# you should have received as part of this distribution. The terms
|
||||||
|
# are also available at http://curl.haxx.se/docs/copyright.html.
|
||||||
#
|
#
|
||||||
# You may opt to use, copy, modify, merge, publish, distribute and/or sell
|
# You may opt to use, copy, modify, merge, publish, distribute and/or sell
|
||||||
# copies of the Software, and permit persons to whom the Software is
|
# copies of the Software, and permit persons to whom the Software is
|
||||||
# furnished to do so, under the terms of the MPL or the MIT/X-derivate
|
# furnished to do so, under the terms of the COPYING file.
|
||||||
# licenses. You may pick one of these licenses.
|
|
||||||
#
|
#
|
||||||
# This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
|
# This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
|
||||||
# KIND, either express or implied.
|
# KIND, either express or implied.
|
||||||
#
|
#
|
||||||
# $Id$
|
# $Id$
|
||||||
#############################################################################
|
###########################################################################
|
||||||
|
|
||||||
all:
|
all:
|
||||||
./configure
|
./configure
|
||||||
@@ -34,12 +34,12 @@ borland:
|
|||||||
cd src & make -f Makefile.b32
|
cd src & make -f Makefile.b32
|
||||||
|
|
||||||
mingw32:
|
mingw32:
|
||||||
cd lib & make -f Makefile.m32
|
cd lib & make -f Makefile.m32 ZLIB=1
|
||||||
cd src & make -f Makefile.m32
|
cd src & make -f Makefile.m32 ZLIB=1
|
||||||
|
|
||||||
mingw32-ssl:
|
mingw32-ssl:
|
||||||
cd lib & make -f Makefile.m32 SSL=1
|
cd lib & make -f Makefile.m32 SSL=1 ZLIB=1
|
||||||
cd src & make -f Makefile.m32 SSL=1
|
cd src & make -f Makefile.m32 SSL=1 ZLIB=1
|
||||||
|
|
||||||
vc:
|
vc:
|
||||||
cd lib
|
cd lib
|
||||||
@@ -59,6 +59,16 @@ vc-ssl-dll:
|
|||||||
cd ..\src
|
cd ..\src
|
||||||
nmake -f Makefile.vc6
|
nmake -f Makefile.vc6
|
||||||
|
|
||||||
|
vc-libcurl-ssl-dll:
|
||||||
|
cd lib
|
||||||
|
nmake -f Makefile.vc6 cfg=release-libcurl-ssl-dll
|
||||||
|
cd ..\src
|
||||||
|
nmake -f Makefile.vc6
|
||||||
|
|
||||||
|
djgpp:
|
||||||
|
make -C lib -f Makefile.dj
|
||||||
|
make -C src -f Makefile.dj
|
||||||
|
|
||||||
cygwin:
|
cygwin:
|
||||||
./configure
|
./configure
|
||||||
make
|
make
|
||||||
@@ -67,6 +77,12 @@ cygwin-ssl:
|
|||||||
./configure --with-ssl
|
./configure --with-ssl
|
||||||
make
|
make
|
||||||
|
|
||||||
|
amiga:
|
||||||
|
cd ./lib && make -f makefile.amiga
|
||||||
|
cd ./src && make -f makefile.amiga
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
unix: all
|
unix: all
|
||||||
|
|
||||||
unix-ssl: ssl
|
unix-ssl: ssl
|
||||||
|
|||||||
48
README
48
README
@@ -11,39 +11,65 @@ README
|
|||||||
MANUAL document. Find out how to install Curl by reading the INSTALL
|
MANUAL document. Find out how to install Curl by reading the INSTALL
|
||||||
document.
|
document.
|
||||||
|
|
||||||
libcurl is a library that Curl is using to do its job. It is readily
|
libcurl is the library curl is using to do its job. It is readily
|
||||||
available to be used by your software. Read the libcurl.3 man page to
|
available to be used by your software. Read the libcurl.3 man page to
|
||||||
find out how!
|
learn how!
|
||||||
|
|
||||||
You find answers to the most frequent questions we get in the FAQ document.
|
You find answers to the most frequent questions we get in the FAQ document.
|
||||||
|
|
||||||
Study the LEGAL file for distribution terms and similar.
|
Study the COPYING file for distribution terms and similar.
|
||||||
|
|
||||||
Visit the curl web site or mirror for the latest news:
|
CONTACT
|
||||||
|
|
||||||
http://curl.haxx.se/
|
If you have problems, questions, ideas or suggestions, please contact us
|
||||||
http://curl.sf.net/
|
by posting to a suitable mailing list. See http://curl.haxx.se/mail/
|
||||||
|
|
||||||
|
Many major contributors to the project are listed in the THANKS document.
|
||||||
|
|
||||||
|
WEB SITE
|
||||||
|
|
||||||
|
Visit the curl web site or mirrors for the latest news:
|
||||||
|
|
||||||
|
Sweden -- http://curl.haxx.se/
|
||||||
|
Australia -- http://curl.planetmirror.com/
|
||||||
|
Germany -- http://curl.mirror.at.stealer.net/
|
||||||
|
Russia -- http://curl.tsuren.net/
|
||||||
|
Thailand -- http://curl.siamu.ac.th/
|
||||||
|
US (CA) -- http://curl.mirror.redwire.net/
|
||||||
|
US (TX) -- http://curl.cyberservers.net/
|
||||||
|
|
||||||
|
DOWNLOAD
|
||||||
|
|
||||||
The official download mirror sites are:
|
The official download mirror sites are:
|
||||||
|
|
||||||
|
Australia -- http://curl.planetmirror.com/download/
|
||||||
|
Germany -- ftp://ftp.fu-berlin.de/pub/unix/network/curl/
|
||||||
|
Hongkong -- http://www.execve.net/curl/
|
||||||
|
Russia -- http://curl.tsuren.net/download/
|
||||||
Sweden -- ftp://ftp.sunet.se/pub/www/utilities/curl/
|
Sweden -- ftp://ftp.sunet.se/pub/www/utilities/curl/
|
||||||
Sweden -- http://cool.haxx.se/curl/
|
Sweden -- http://cool.haxx.se/curl/
|
||||||
Germany -- ftp://ftp.fu-berlin.de/pub/unix/network/curl/
|
Thailand -- http://curl.siamu.ac.th/download/
|
||||||
|
US (CA) -- http://curl.mirror.redwire.net/download/
|
||||||
|
US (TX) -- http://curl.cyberservers.net/download/
|
||||||
|
|
||||||
|
CVS
|
||||||
|
|
||||||
To download the very latest source off the CVS server do this:
|
To download the very latest source off the CVS server do this:
|
||||||
|
|
||||||
cvs -d :pserver:anonymous@cvs.curl.sourceforge.net:/cvsroot/curl login
|
cvs -d :pserver:cvsread@cvs.php.net:/repository login
|
||||||
|
|
||||||
(just press enter when asked for password)
|
(enter "phpfi" when asked for password)
|
||||||
|
|
||||||
cvs -d :pserver:anonymous@cvs.curl.sourceforge.net:/cvsroot/curl co curl
|
cvs -d :pserver:cvsread@cvs.php.net:/repository co curl
|
||||||
|
|
||||||
(you'll get a directory named curl created, filled with the source code)
|
(you'll get a directory named curl created, filled with the source code)
|
||||||
|
|
||||||
cvs -d :pserver:anonymous@cvs.curl.sourceforge.net:/cvsroot/curl logout
|
cvs -d :pserver:cvsread@cvs.php.net:/repository logout
|
||||||
|
|
||||||
(you're off the hook!)
|
(you're off the hook!)
|
||||||
|
|
||||||
|
NOTICE
|
||||||
|
|
||||||
Curl contains pieces of source code that is Copyright (c) 1998, 1999
|
Curl contains pieces of source code that is Copyright (c) 1998, 1999
|
||||||
Kungliga Tekniska H<>gskolan. This notice is included here to comply with the
|
Kungliga Tekniska H<>gskolan. This notice is included here to comply with the
|
||||||
distribution terms.
|
distribution terms.
|
||||||
|
|||||||
89
RELEASE-NOTES
Normal file
89
RELEASE-NOTES
Normal file
@@ -0,0 +1,89 @@
|
|||||||
|
Curl and libcurl 7.11.0. A minor-features-added release.
|
||||||
|
|
||||||
|
The 78th public curl release. Release number 105 counted from the very
|
||||||
|
beginning.
|
||||||
|
|
||||||
|
This release includes the following changes:
|
||||||
|
|
||||||
|
o allows the URL to be set by a callback when using the multi interface
|
||||||
|
o large file support was added. Use one of the new options: INFILESIZE_LARGE,
|
||||||
|
RESUME_FROM_LARGE and MAXFILESIZE_LARGE
|
||||||
|
o the new --ftp-pasv overrides a previous --ftpport
|
||||||
|
o CURLOPT_FTPSSL and ftps:// now do ssl over FTP "The Right Way" (the curl
|
||||||
|
tool now features the --ftp-ssl option)
|
||||||
|
o The Windows DLLs are built with an added "resource file"
|
||||||
|
o New LIBCURL_VERSION_* defines for easier checking version number
|
||||||
|
o Included Mac OS X 'framework' makefile in the release archive
|
||||||
|
o Removed the TRUE and FALSE #defines from the public curl header file
|
||||||
|
o Added CURLOPT_NETRC_FILE
|
||||||
|
|
||||||
|
This release includes the following bugfixes:
|
||||||
|
|
||||||
|
o improved config file parsing for options with required parameters
|
||||||
|
o using --trace with a bad file name could crash
|
||||||
|
o release archive contains compressed help text
|
||||||
|
o the win32 password prompting supports backspace
|
||||||
|
o builds natively on AmigaOS (without unix emulation)
|
||||||
|
o ftps:// now uses port 990 by default
|
||||||
|
o the "configure --with-spnego" action was improved
|
||||||
|
o fixed a rare follow-redirect problem
|
||||||
|
o curl-config --feature now outputs AsynchDNS if enabled
|
||||||
|
o occational re-use of freed-memory problem fixed
|
||||||
|
o curl-config --libs now include the ares link directory
|
||||||
|
o configure --enable-ares now accepts a given path
|
||||||
|
o -lz no longer appear twice on the link line
|
||||||
|
o more descriptive error message if the FTP response reader fails
|
||||||
|
o curl-config --feature now shows 'AsynchDNS' when built with ares
|
||||||
|
o VMS build up-to-date and clarified source code
|
||||||
|
o resolve bug caused socks5 to fail
|
||||||
|
o Content-Length: is ignored when getting chunked Transfer-Encoding
|
||||||
|
o POST over proxy to https server failed
|
||||||
|
o improved how libcurl deals with persistant connections over FTP when a
|
||||||
|
transfer fails
|
||||||
|
o accessing a proxy that requires Basic auth without password caused a hang
|
||||||
|
o a free free-twice problem in the server certificate code
|
||||||
|
o minor memory leak when using ranges on persistant connections
|
||||||
|
o formpost parts sending files with .html extensions now use "Content-Type:
|
||||||
|
text/html"
|
||||||
|
o formpost parts now default to "Content-Type: application/octet-stream"
|
||||||
|
o --progress-bar was slightly improved
|
||||||
|
o Failing to connect to localhost, using the multi interface on Solaris
|
||||||
|
showed a connect problem now fixed.
|
||||||
|
o The generated ca-bundle.h file is now generated in the build dir, not the
|
||||||
|
source dir
|
||||||
|
o The FTP-EPSV response parser for the 229 code was fixed
|
||||||
|
o curl finds the user's home dir slightly different and hopefully better on
|
||||||
|
Windows
|
||||||
|
o testcurl.sh can now be used to autotest daily tarballs
|
||||||
|
o a couple of command line options now check that the underlying library
|
||||||
|
actually supports the features before trying to enable them
|
||||||
|
o uninitialized variable fix
|
||||||
|
o better html versions of the man pages
|
||||||
|
|
||||||
|
Other curl-related news since the previous public release:
|
||||||
|
|
||||||
|
o pycURL 7.10.8 was released: http://pycurl.sf.net/
|
||||||
|
o TclCurl 0.10.8 was released:
|
||||||
|
http://personal1.iddeo.es/andresgarci/tclcurl/english/
|
||||||
|
o the Ferite curl binding was released: http://www.ferite.org/
|
||||||
|
o stopped the curl.sourceforge.net mirror, it now redirects to curl.haxx.se
|
||||||
|
o fresh new curl web mirrors:
|
||||||
|
US Texas - http://curl.cyberservers.net
|
||||||
|
US California - http://curl.mirrors.redwire.net
|
||||||
|
Germany - http://curl.mirror.at.stealer.net
|
||||||
|
Thailand - http://curl.siamu.ac.th
|
||||||
|
o Dan Fandrich stepped forward and helps maintaining the download web page
|
||||||
|
|
||||||
|
This release would not have looked like this without help, code, reports and
|
||||||
|
advice from friends like these:
|
||||||
|
|
||||||
|
Kevin Roth, Troels Walsted Hansen, Matt Veenstra, Marty Kuhrt, Benjamin
|
||||||
|
Gerard, Gisle Vanem, Ralph Mitchell, S<>bastien Willemijns, Kang-Jin Lee,
|
||||||
|
Peter Sylvester, Siddhartha Prakash Jain, Mathias Axelsson, Maciej
|
||||||
|
W. Rozycki, Nicolas Croiset, Josh Kapell, Gaz Iqbal, Dave May, Markus
|
||||||
|
Moeller, James Clancy, Giuseppe Attardi, swalkaus at yahoo.com, Steve Green,
|
||||||
|
Marty Kuhrt, Dominick Meglio, Diego Casorran, David Byron, John McGowan,
|
||||||
|
David J Meyer, Dan Fandrich, Pierre, Brian R Duffy, Luke Call, Vincent
|
||||||
|
Bronner
|
||||||
|
|
||||||
|
Thanks! (and sorry if I forgot to mention someone)
|
||||||
54
TODO-RELEASE
Normal file
54
TODO-RELEASE
Normal file
@@ -0,0 +1,54 @@
|
|||||||
|
Issues not sorted in any particular order. #[num] refers to bug report
|
||||||
|
numbers. UNASSIGNED means that no person has publicly stated to work on the
|
||||||
|
issue.
|
||||||
|
|
||||||
|
Fix before releasing 7.11.0
|
||||||
|
===========================
|
||||||
|
|
||||||
|
|
||||||
|
To get fixed in 7.11.1
|
||||||
|
======================
|
||||||
|
|
||||||
|
1. Introduce a new error code indicating authentication problems (for proxy
|
||||||
|
CONNECT error 407 for example). #845941 UNASSIGNED
|
||||||
|
|
||||||
|
2. Make the proxy CONNECT headers get passed to the callbacks just like other
|
||||||
|
headers are. #845941 UNASSIGNED
|
||||||
|
|
||||||
|
4. Multi-threaded OpenSSL usage needs to be addressed (Dirk Manske has stepped
|
||||||
|
forward on this)
|
||||||
|
|
||||||
|
6. REST fix for servers not behaving well on >2GB requests (some outstanding
|
||||||
|
issues, Dave Meyer works on this)
|
||||||
|
|
||||||
|
8. Resolve the occational test case 91 failure. This still has no
|
||||||
|
resolution. Test case 96 has been added to CVS to try variations of this
|
||||||
|
test. (David Byron has done lots of research) UNASSIGNED
|
||||||
|
|
||||||
|
9. Modify ares to do 'files bind' order instead of 'bind files' by default
|
||||||
|
(not actually part of libcurl) See details by Frank Ticheler posted here:
|
||||||
|
http://curl.haxx.se/mail/archive-2003-11/0020.html UNASSIGNED
|
||||||
|
|
||||||
|
10. Anton Fedorov's "dumpcert" patch (only mailed to me privately) UNASSIGNED
|
||||||
|
|
||||||
|
12. The "PUT and (NTLM/Digest) auth" bug (confusion, awaits feedback) #862835
|
||||||
|
|
||||||
|
14. Evaluate/apply Gertjan van Wingerde's SSL patches, UNASSIGNED
|
||||||
|
|
||||||
|
16. Tony Blakie's bug report about getting a 302 and Location: back from a
|
||||||
|
proxy after a CONNECT request. (correct behavior on this is not certain)
|
||||||
|
UNASSIGNED, lack of feedback on this. Subject for dismissal.
|
||||||
|
|
||||||
|
18. Modified Accept: header in the default HTTP request (being discussed).
|
||||||
|
UNASSIGNED
|
||||||
|
|
||||||
|
19. Resolve Giuseppe Attardi's "elusive cache bug" (work required)
|
||||||
|
|
||||||
|
20. Directory listing support for file:///dir/ (patch by David Hull)
|
||||||
|
http://sourceforge.net/tracker/index.php?func=detail&aid=844036&group_id=976&atid=300976
|
||||||
|
This patch needs work to become portable. UNASSIGNED
|
||||||
|
|
||||||
|
21. Send QUIT before closing an FTP connection. Joe Halpin has provided an
|
||||||
|
initial patch. Some outstanding issues.
|
||||||
|
|
||||||
|
23. Peter Sylvester's "Most Significant Common Name" patch. Feedback welcome.
|
||||||
66
acconfig.h
66
acconfig.h
@@ -1,66 +0,0 @@
|
|||||||
/* Name of this package! */
|
|
||||||
#undef PACKAGE
|
|
||||||
|
|
||||||
/* Version number of this archive. */
|
|
||||||
#undef VERSION
|
|
||||||
|
|
||||||
/* Define if you have the getpass function. */
|
|
||||||
#undef HAVE_GETPASS
|
|
||||||
|
|
||||||
/* Define cpu-machine-OS */
|
|
||||||
#undef OS
|
|
||||||
|
|
||||||
/* Define if you have the gethostbyaddr_r() function with 5 arguments */
|
|
||||||
#undef HAVE_GETHOSTBYADDR_R_5
|
|
||||||
|
|
||||||
/* Define if you have the gethostbyaddr_r() function with 7 arguments */
|
|
||||||
#undef HAVE_GETHOSTBYADDR_R_7
|
|
||||||
|
|
||||||
/* Define if you have the gethostbyaddr_r() function with 8 arguments */
|
|
||||||
#undef HAVE_GETHOSTBYADDR_R_8
|
|
||||||
|
|
||||||
/* Define if you have the gethostbyname_r() function with 3 arguments */
|
|
||||||
#undef HAVE_GETHOSTBYNAME_R_3
|
|
||||||
|
|
||||||
/* Define if you have the gethostbyname_r() function with 5 arguments */
|
|
||||||
#undef HAVE_GETHOSTBYNAME_R_5
|
|
||||||
|
|
||||||
/* Define if you have the gethostbyname_r() function with 6 arguments */
|
|
||||||
#undef HAVE_GETHOSTBYNAME_R_6
|
|
||||||
|
|
||||||
/* Define if you have the inet_ntoa_r function declared. */
|
|
||||||
#undef HAVE_INET_NTOA_R_DECL
|
|
||||||
|
|
||||||
/* Define if you need the _REENTRANT define for some functions */
|
|
||||||
#undef NEED_REENTRANT
|
|
||||||
|
|
||||||
/* Define if you have the Kerberos4 libraries (including -ldes) */
|
|
||||||
#undef KRB4
|
|
||||||
|
|
||||||
/* Define if you want to enable IPv6 support */
|
|
||||||
#undef ENABLE_IPV6
|
|
||||||
|
|
||||||
/* Define this to 'int' if ssize_t is not an available typedefed type */
|
|
||||||
#undef ssize_t
|
|
||||||
|
|
||||||
/* Define this to 'int' if socklen_t is not an available typedefed type */
|
|
||||||
#undef socklen_t
|
|
||||||
|
|
||||||
/* Define this as a suitable file to read random data from */
|
|
||||||
#undef RANDOM_FILE
|
|
||||||
|
|
||||||
/* Define this to your Entropy Gathering Daemon socket pathname */
|
|
||||||
#undef EGD_SOCKET
|
|
||||||
|
|
||||||
/* Define if you have a working OpenSSL installation */
|
|
||||||
#undef OPENSSL_ENABLED
|
|
||||||
|
|
||||||
/* Define the one correct non-blocking socket method below */
|
|
||||||
#undef HAVE_FIONBIO
|
|
||||||
#undef HAVE_IOCTLSOCKET
|
|
||||||
#undef HAVE_IOCTLSOCKET_CASE
|
|
||||||
#undef HAVE_O_NONBLOCK
|
|
||||||
#undef HAVE_DISABLED_NONBLOCKING
|
|
||||||
|
|
||||||
/* Define this to 'int' if in_addr_t is not an available typedefed type */
|
|
||||||
#undef in_addr_t
|
|
||||||
96
acinclude.m4
96
acinclude.m4
@@ -7,7 +7,7 @@ dnl There are two known platforms (AIX 3.x and SunOS 4.1.x) where the
|
|||||||
dnl O_NONBLOCK define is found but does not work. This condition is attempted
|
dnl O_NONBLOCK define is found but does not work. This condition is attempted
|
||||||
dnl to get caught in this script by using an excessive number of #ifdefs...
|
dnl to get caught in this script by using an excessive number of #ifdefs...
|
||||||
dnl
|
dnl
|
||||||
AC_DEFUN(CURL_CHECK_NONBLOCKING_SOCKET,
|
AC_DEFUN([CURL_CHECK_NONBLOCKING_SOCKET],
|
||||||
[
|
[
|
||||||
AC_MSG_CHECKING([non-blocking sockets style])
|
AC_MSG_CHECKING([non-blocking sockets style])
|
||||||
|
|
||||||
@@ -30,7 +30,7 @@ AC_DEFUN(CURL_CHECK_NONBLOCKING_SOCKET,
|
|||||||
# define PLATFORM_AIX_V3
|
# define PLATFORM_AIX_V3
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if defined(PLATFORM_SUNOS4) || defined(PLATFORM_AIX_V3)
|
#if defined(PLATFORM_SUNOS4) || defined(PLATFORM_AIX_V3) || defined(__BEOS__)
|
||||||
#error "O_NONBLOCK does not work on this platform"
|
#error "O_NONBLOCK does not work on this platform"
|
||||||
#endif
|
#endif
|
||||||
int socket;
|
int socket;
|
||||||
@@ -38,7 +38,7 @@ AC_DEFUN(CURL_CHECK_NONBLOCKING_SOCKET,
|
|||||||
],[
|
],[
|
||||||
dnl the O_NONBLOCK test was fine
|
dnl the O_NONBLOCK test was fine
|
||||||
nonblock="O_NONBLOCK"
|
nonblock="O_NONBLOCK"
|
||||||
AC_DEFINE(HAVE_O_NONBLOCK)
|
AC_DEFINE(HAVE_O_NONBLOCK, 1, [use O_NONBLOCK for non-blocking sockets])
|
||||||
],[
|
],[
|
||||||
dnl the code was bad, try a different program now, test 2
|
dnl the code was bad, try a different program now, test 2
|
||||||
|
|
||||||
@@ -47,12 +47,13 @@ dnl the code was bad, try a different program now, test 2
|
|||||||
#include <unistd.h>
|
#include <unistd.h>
|
||||||
#include <stropts.h>
|
#include <stropts.h>
|
||||||
],[
|
],[
|
||||||
/* FIONBIO source test */
|
/* FIONBIO source test (old-style unix) */
|
||||||
|
int socket;
|
||||||
int flags = ioctl(socket, FIONBIO, &flags);
|
int flags = ioctl(socket, FIONBIO, &flags);
|
||||||
],[
|
],[
|
||||||
dnl FIONBIO test was good
|
dnl FIONBIO test was good
|
||||||
nonblock="FIONBIO"
|
nonblock="FIONBIO"
|
||||||
AC_DEFINE(HAVE_FIONBIO)
|
AC_DEFINE(HAVE_FIONBIO, 1, [use FIONBIO for non-blocking sockets])
|
||||||
],[
|
],[
|
||||||
dnl FIONBIO test was also bad
|
dnl FIONBIO test was also bad
|
||||||
dnl the code was bad, try a different program now, test 3
|
dnl the code was bad, try a different program now, test 3
|
||||||
@@ -62,28 +63,49 @@ dnl the code was bad, try a different program now, test 3
|
|||||||
#include <windows.h>
|
#include <windows.h>
|
||||||
],[
|
],[
|
||||||
/* ioctlsocket source code */
|
/* ioctlsocket source code */
|
||||||
|
int socket;
|
||||||
int flags = ioctlsocket(socket, FIONBIO, &flags);
|
int flags = ioctlsocket(socket, FIONBIO, &flags);
|
||||||
],[
|
],[
|
||||||
dnl ioctlsocket test was good
|
dnl ioctlsocket test was good
|
||||||
nonblock="ioctlsocket"
|
nonblock="ioctlsocket"
|
||||||
AC_DEFINE(HAVE_IOCTLSOCKET)
|
AC_DEFINE(HAVE_IOCTLSOCKET, 1, [use ioctlsocket() for non-blocking sockets])
|
||||||
],[
|
],[
|
||||||
dnl ioctlsocket didnt compile!
|
dnl ioctlsocket didnt compile!, go to test 4
|
||||||
|
|
||||||
AC_TRY_COMPILE([
|
AC_TRY_LINK([
|
||||||
/* headers for IoctlSocket test (Amiga?) */
|
/* headers for IoctlSocket test (Amiga?) */
|
||||||
#include <sys/ioctl.h>
|
#include <sys/ioctl.h>
|
||||||
],[
|
],[
|
||||||
/* IoctlSocket source code */
|
/* IoctlSocket source code */
|
||||||
|
int socket;
|
||||||
int flags = IoctlSocket(socket, FIONBIO, (long)1);
|
int flags = IoctlSocket(socket, FIONBIO, (long)1);
|
||||||
],[
|
],[
|
||||||
dnl ioctlsocket test was good
|
dnl ioctlsocket test was good
|
||||||
nonblock="IoctlSocket"
|
nonblock="IoctlSocket"
|
||||||
AC_DEFINE(HAVE_IOCTLSOCKET_CASE)
|
AC_DEFINE(HAVE_IOCTLSOCKET_CASE, 1, [use Ioctlsocket() for non-blocking sockets])
|
||||||
],[
|
],[
|
||||||
dnl ioctlsocket didnt compile!
|
dnl Ioctlsocket didnt compile, do test 5!
|
||||||
|
AC_TRY_COMPILE([
|
||||||
|
/* headers for SO_NONBLOCK test (BeOS) */
|
||||||
|
#include <sys/types.h>
|
||||||
|
#include <unistd.h>
|
||||||
|
#include <fcntl.h>
|
||||||
|
],[
|
||||||
|
/* SO_NONBLOCK source code */
|
||||||
|
long b = 1;
|
||||||
|
int socket;
|
||||||
|
int flags = setsockopt(socket, SOL_SOCKET, SO_NONBLOCK, &b, sizeof(b));
|
||||||
|
],[
|
||||||
|
dnl the SO_NONBLOCK test was good
|
||||||
|
nonblock="SO_NONBLOCK"
|
||||||
|
AC_DEFINE(HAVE_SO_NONBLOCK, 1, [use SO_NONBLOCK for non-blocking sockets])
|
||||||
|
],[
|
||||||
|
dnl test 5 didnt compile!
|
||||||
nonblock="nada"
|
nonblock="nada"
|
||||||
AC_DEFINE(HAVE_DISABLED_NONBLOCKING)
|
AC_DEFINE(HAVE_DISABLED_NONBLOCKING, 1, [disabled non-blocking sockets])
|
||||||
|
])
|
||||||
|
dnl end of fifth test
|
||||||
|
|
||||||
])
|
])
|
||||||
dnl end of forth test
|
dnl end of forth test
|
||||||
|
|
||||||
@@ -118,8 +140,12 @@ AC_DEFUN([TYPE_SOCKLEN_T],
|
|||||||
for arg2 in "struct sockaddr" void; do
|
for arg2 in "struct sockaddr" void; do
|
||||||
for t in int size_t unsigned long "unsigned long"; do
|
for t in int size_t unsigned long "unsigned long"; do
|
||||||
AC_TRY_COMPILE([
|
AC_TRY_COMPILE([
|
||||||
|
#ifdef HAVE_SYS_TYPES_H
|
||||||
#include <sys/types.h>
|
#include <sys/types.h>
|
||||||
|
#endif
|
||||||
|
#ifdef HAVE_SYS_SOCKET_H
|
||||||
#include <sys/socket.h>
|
#include <sys/socket.h>
|
||||||
|
#endif
|
||||||
|
|
||||||
int getpeername (int, $arg2 *, $t *);
|
int getpeername (int, $arg2 *, $t *);
|
||||||
],[
|
],[
|
||||||
@@ -152,14 +178,18 @@ AC_DEFUN([TYPE_IN_ADDR_T],
|
|||||||
AC_MSG_CHECKING([for in_addr_t equivalent])
|
AC_MSG_CHECKING([for in_addr_t equivalent])
|
||||||
AC_CACHE_VAL([curl_cv_in_addr_t_equiv],
|
AC_CACHE_VAL([curl_cv_in_addr_t_equiv],
|
||||||
[
|
[
|
||||||
# Systems have either "struct sockaddr *" or
|
|
||||||
# "void *" as the second argument to getpeername
|
|
||||||
curl_cv_in_addr_t_equiv=
|
curl_cv_in_addr_t_equiv=
|
||||||
for t in int size_t unsigned long "unsigned long"; do
|
for t in "unsigned long" int size_t unsigned long; do
|
||||||
AC_TRY_COMPILE([
|
AC_TRY_COMPILE([
|
||||||
|
#ifdef HAVE_SYS_TYPES_H
|
||||||
#include <sys/types.h>
|
#include <sys/types.h>
|
||||||
|
#endif
|
||||||
|
#ifdef HAVE_SYS_SOCKET_H
|
||||||
#include <sys/socket.h>
|
#include <sys/socket.h>
|
||||||
|
#endif
|
||||||
|
#ifdef HAVE_ARPA_INET_H
|
||||||
#include <arpa/inet.h>
|
#include <arpa/inet.h>
|
||||||
|
#endif
|
||||||
],[
|
],[
|
||||||
$t data = inet_addr ("1.2.3.4");
|
$t data = inet_addr ("1.2.3.4");
|
||||||
],[
|
],[
|
||||||
@@ -185,7 +215,7 @@ dnl check for "localhost", if it doesn't exist, we can't do the
|
|||||||
dnl gethostbyname_r tests!
|
dnl gethostbyname_r tests!
|
||||||
dnl
|
dnl
|
||||||
|
|
||||||
AC_DEFUN(CURL_CHECK_WORKING_RESOLVER,[
|
AC_DEFUN([CURL_CHECK_WORKING_RESOLVER],[
|
||||||
AC_MSG_CHECKING([if "localhost" resolves])
|
AC_MSG_CHECKING([if "localhost" resolves])
|
||||||
AC_TRY_RUN([
|
AC_TRY_RUN([
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
@@ -208,7 +238,7 @@ exit (h == NULL ? 1 : 0); }],[
|
|||||||
dnl ************************************************************
|
dnl ************************************************************
|
||||||
dnl check for working getaddrinfo()
|
dnl check for working getaddrinfo()
|
||||||
dnl
|
dnl
|
||||||
AC_DEFUN(CURL_CHECK_WORKING_GETADDRINFO,[
|
AC_DEFUN([CURL_CHECK_WORKING_GETADDRINFO],[
|
||||||
AC_CACHE_CHECK(for working getaddrinfo, ac_cv_working_getaddrinfo,[
|
AC_CACHE_CHECK(for working getaddrinfo, ac_cv_working_getaddrinfo,[
|
||||||
AC_TRY_RUN( [
|
AC_TRY_RUN( [
|
||||||
#include <netdb.h>
|
#include <netdb.h>
|
||||||
@@ -247,7 +277,7 @@ fi
|
|||||||
])
|
])
|
||||||
|
|
||||||
|
|
||||||
AC_DEFUN(CURL_CHECK_LOCALTIME_R,
|
AC_DEFUN([CURL_CHECK_LOCALTIME_R],
|
||||||
[
|
[
|
||||||
dnl check for a few thread-safe functions
|
dnl check for a few thread-safe functions
|
||||||
AC_CHECK_FUNCS(localtime_r,[
|
AC_CHECK_FUNCS(localtime_r,[
|
||||||
@@ -265,27 +295,27 @@ AC_DEFUN(CURL_CHECK_LOCALTIME_R,
|
|||||||
AC_MSG_RESULT(no))])])
|
AC_MSG_RESULT(no))])])
|
||||||
])
|
])
|
||||||
|
|
||||||
AC_DEFUN(CURL_CHECK_INET_NTOA_R,
|
AC_DEFUN([CURL_CHECK_INET_NTOA_R],
|
||||||
[
|
[
|
||||||
dnl determine if function definition for inet_ntoa_r exists.
|
dnl determine if function definition for inet_ntoa_r exists.
|
||||||
AC_CHECK_FUNCS(inet_ntoa_r,[
|
AC_CHECK_FUNCS(inet_ntoa_r,[
|
||||||
AC_MSG_CHECKING(whether inet_ntoa_r is declared)
|
AC_MSG_CHECKING(whether inet_ntoa_r is declared)
|
||||||
AC_EGREP_CPP(inet_ntoa_r,[
|
AC_EGREP_CPP(inet_ntoa_r,[
|
||||||
#include <arpa/inet.h>],[
|
#include <arpa/inet.h>],[
|
||||||
AC_DEFINE(HAVE_INET_NTOA_R_DECL)
|
AC_DEFINE(HAVE_INET_NTOA_R_DECL, 1, [inet_ntoa_r() is declared])
|
||||||
AC_MSG_RESULT(yes)],[
|
AC_MSG_RESULT(yes)],[
|
||||||
AC_MSG_RESULT(no)
|
AC_MSG_RESULT(no)
|
||||||
AC_MSG_CHECKING(whether inet_ntoa_r with -D_REENTRANT is declared)
|
AC_MSG_CHECKING(whether inet_ntoa_r with -D_REENTRANT is declared)
|
||||||
AC_EGREP_CPP(inet_ntoa_r,[
|
AC_EGREP_CPP(inet_ntoa_r,[
|
||||||
#define _REENTRANT
|
#define _REENTRANT
|
||||||
#include <arpa/inet.h>],[
|
#include <arpa/inet.h>],[
|
||||||
AC_DEFINE(HAVE_INET_NTOA_R_DECL)
|
AC_DEFINE(HAVE_INET_NTOA_R_DECL, 1, [inet_ntoa_r() is declared])
|
||||||
AC_DEFINE(NEED_REENTRANT)
|
AC_DEFINE(NEED_REENTRANT, 1, [need REENTRANT defined])
|
||||||
AC_MSG_RESULT(yes)],
|
AC_MSG_RESULT(yes)],
|
||||||
AC_MSG_RESULT(no))])])
|
AC_MSG_RESULT(no))])])
|
||||||
])
|
])
|
||||||
|
|
||||||
AC_DEFUN(CURL_CHECK_GETHOSTBYADDR_R,
|
AC_DEFUN([CURL_CHECK_GETHOSTBYADDR_R],
|
||||||
[
|
[
|
||||||
dnl check for number of arguments to gethostbyaddr_r. it might take
|
dnl check for number of arguments to gethostbyaddr_r. it might take
|
||||||
dnl either 5, 7, or 8 arguments.
|
dnl either 5, 7, or 8 arguments.
|
||||||
@@ -302,7 +332,7 @@ struct hostent_data hdata;
|
|||||||
int rc;
|
int rc;
|
||||||
rc = gethostbyaddr_r(address, length, type, &h, &hdata);],[
|
rc = gethostbyaddr_r(address, length, type, &h, &hdata);],[
|
||||||
AC_MSG_RESULT(yes)
|
AC_MSG_RESULT(yes)
|
||||||
AC_DEFINE(HAVE_GETHOSTBYADDR_R_5)
|
AC_DEFINE(HAVE_GETHOSTBYADDR_R_5, 1, [gethostbyaddr_r() takes 5 args])
|
||||||
ac_cv_gethostbyaddr_args=5],[
|
ac_cv_gethostbyaddr_args=5],[
|
||||||
AC_MSG_RESULT(no)
|
AC_MSG_RESULT(no)
|
||||||
AC_MSG_CHECKING(if gethostbyaddr_r with -D_REENTRANT takes 5 arguments)
|
AC_MSG_CHECKING(if gethostbyaddr_r with -D_REENTRANT takes 5 arguments)
|
||||||
@@ -318,8 +348,8 @@ struct hostent_data hdata;
|
|||||||
int rc;
|
int rc;
|
||||||
rc = gethostbyaddr_r(address, length, type, &h, &hdata);],[
|
rc = gethostbyaddr_r(address, length, type, &h, &hdata);],[
|
||||||
AC_MSG_RESULT(yes)
|
AC_MSG_RESULT(yes)
|
||||||
AC_DEFINE(HAVE_GETHOSTBYADDR_R_5)
|
AC_DEFINE(HAVE_GETHOSTBYADDR_R_5, 1, [gethostbyaddr_r() takes 5 args])
|
||||||
AC_DEFINE(NEED_REENTRANT)
|
AC_DEFINE(NEED_REENTRANT, 1, [need REENTRANT])
|
||||||
ac_cv_gethostbyaddr_args=5],[
|
ac_cv_gethostbyaddr_args=5],[
|
||||||
AC_MSG_RESULT(no)
|
AC_MSG_RESULT(no)
|
||||||
AC_MSG_CHECKING(if gethostbyaddr_r takes 7 arguments)
|
AC_MSG_CHECKING(if gethostbyaddr_r takes 7 arguments)
|
||||||
@@ -337,7 +367,7 @@ struct hostent * hp;
|
|||||||
hp = gethostbyaddr_r(address, length, type, &h,
|
hp = gethostbyaddr_r(address, length, type, &h,
|
||||||
buffer, 8192, &h_errnop);],[
|
buffer, 8192, &h_errnop);],[
|
||||||
AC_MSG_RESULT(yes)
|
AC_MSG_RESULT(yes)
|
||||||
AC_DEFINE(HAVE_GETHOSTBYADDR_R_7)
|
AC_DEFINE(HAVE_GETHOSTBYADDR_R_7, 1, [gethostbyaddr_r() takes 7 args] )
|
||||||
ac_cv_gethostbyaddr_args=7],[
|
ac_cv_gethostbyaddr_args=7],[
|
||||||
AC_MSG_RESULT(no)
|
AC_MSG_RESULT(no)
|
||||||
AC_MSG_CHECKING(if gethostbyaddr_r takes 8 arguments)
|
AC_MSG_CHECKING(if gethostbyaddr_r takes 8 arguments)
|
||||||
@@ -356,13 +386,13 @@ int rc;
|
|||||||
rc = gethostbyaddr_r(address, length, type, &h,
|
rc = gethostbyaddr_r(address, length, type, &h,
|
||||||
buffer, 8192, &hp, &h_errnop);],[
|
buffer, 8192, &hp, &h_errnop);],[
|
||||||
AC_MSG_RESULT(yes)
|
AC_MSG_RESULT(yes)
|
||||||
AC_DEFINE(HAVE_GETHOSTBYADDR_R_8)
|
AC_DEFINE(HAVE_GETHOSTBYADDR_R_8, 1, [gethostbyaddr_r() takes 8 args])
|
||||||
ac_cv_gethostbyaddr_args=8],[
|
ac_cv_gethostbyaddr_args=8],[
|
||||||
AC_MSG_RESULT(no)
|
AC_MSG_RESULT(no)
|
||||||
have_missing_r_funcs="$have_missing_r_funcs gethostbyaddr_r"])])])])])
|
have_missing_r_funcs="$have_missing_r_funcs gethostbyaddr_r"])])])])])
|
||||||
])
|
])
|
||||||
|
|
||||||
AC_DEFUN(CURL_CHECK_GETHOSTBYNAME_R,
|
AC_DEFUN([CURL_CHECK_GETHOSTBYNAME_R],
|
||||||
[
|
[
|
||||||
dnl check for number of arguments to gethostbyname_r. it might take
|
dnl check for number of arguments to gethostbyname_r. it might take
|
||||||
dnl either 3, 5, or 6 arguments.
|
dnl either 3, 5, or 6 arguments.
|
||||||
@@ -380,7 +410,7 @@ gethostbyname_r(const char *, struct hostent *, struct hostent_data *);],[
|
|||||||
struct hostent_data data;
|
struct hostent_data data;
|
||||||
gethostbyname_r(NULL, NULL, NULL);],[
|
gethostbyname_r(NULL, NULL, NULL);],[
|
||||||
AC_MSG_RESULT(yes)
|
AC_MSG_RESULT(yes)
|
||||||
AC_DEFINE(HAVE_GETHOSTBYNAME_R_3)
|
AC_DEFINE(HAVE_GETHOSTBYNAME_R_3, 1, [gethostbyname_r() takes 3 args])
|
||||||
ac_cv_gethostbyname_args=3],[
|
ac_cv_gethostbyname_args=3],[
|
||||||
AC_MSG_RESULT(no)
|
AC_MSG_RESULT(no)
|
||||||
AC_MSG_CHECKING([if gethostbyname_r with -D_REENTRANT takes 3 arguments])
|
AC_MSG_CHECKING([if gethostbyname_r with -D_REENTRANT takes 3 arguments])
|
||||||
@@ -398,8 +428,8 @@ gethostbyname_r(const char *,struct hostent *, struct hostent_data *);],[
|
|||||||
struct hostent_data data;
|
struct hostent_data data;
|
||||||
gethostbyname_r(NULL, NULL, NULL);],[
|
gethostbyname_r(NULL, NULL, NULL);],[
|
||||||
AC_MSG_RESULT(yes)
|
AC_MSG_RESULT(yes)
|
||||||
AC_DEFINE(HAVE_GETHOSTBYNAME_R_3)
|
AC_DEFINE(HAVE_GETHOSTBYNAME_R_3, 1, [gethostbyname_r() takes 3 args])
|
||||||
AC_DEFINE(NEED_REENTRANT)
|
AC_DEFINE(NEED_REENTRANT, 1, [needs REENTRANT])
|
||||||
ac_cv_gethostbyname_args=3],[
|
ac_cv_gethostbyname_args=3],[
|
||||||
AC_MSG_RESULT(no)
|
AC_MSG_RESULT(no)
|
||||||
AC_MSG_CHECKING([if gethostbyname_r takes 5 arguments])
|
AC_MSG_CHECKING([if gethostbyname_r takes 5 arguments])
|
||||||
@@ -413,7 +443,7 @@ struct hostent *
|
|||||||
gethostbyname_r(const char *, struct hostent *, char *, int, int *);],[
|
gethostbyname_r(const char *, struct hostent *, char *, int, int *);],[
|
||||||
gethostbyname_r(NULL, NULL, NULL, 0, NULL);],[
|
gethostbyname_r(NULL, NULL, NULL, 0, NULL);],[
|
||||||
AC_MSG_RESULT(yes)
|
AC_MSG_RESULT(yes)
|
||||||
AC_DEFINE(HAVE_GETHOSTBYNAME_R_5)
|
AC_DEFINE(HAVE_GETHOSTBYNAME_R_5, 1, [gethostbyname_r() takes 5 args])
|
||||||
ac_cv_gethostbyname_args=5],[
|
ac_cv_gethostbyname_args=5],[
|
||||||
AC_MSG_RESULT(no)
|
AC_MSG_RESULT(no)
|
||||||
AC_MSG_CHECKING([if gethostbyname_r takes 6 arguments])
|
AC_MSG_CHECKING([if gethostbyname_r takes 6 arguments])
|
||||||
@@ -428,7 +458,7 @@ gethostbyname_r(const char *, struct hostent *, char *, size_t,
|
|||||||
struct hostent **, int *);],[
|
struct hostent **, int *);],[
|
||||||
gethostbyname_r(NULL, NULL, NULL, 0, NULL, NULL);],[
|
gethostbyname_r(NULL, NULL, NULL, 0, NULL, NULL);],[
|
||||||
AC_MSG_RESULT(yes)
|
AC_MSG_RESULT(yes)
|
||||||
AC_DEFINE(HAVE_GETHOSTBYNAME_R_6)
|
AC_DEFINE(HAVE_GETHOSTBYNAME_R_6, 1, [gethostbyname_r() takes 6 args])
|
||||||
ac_cv_gethostbyname_args=6],[
|
ac_cv_gethostbyname_args=6],[
|
||||||
AC_MSG_RESULT(no)
|
AC_MSG_RESULT(no)
|
||||||
have_missing_r_funcs="$have_missing_r_funcs gethostbyname_r"],
|
have_missing_r_funcs="$have_missing_r_funcs gethostbyname_r"],
|
||||||
|
|||||||
7
ares/.cvsignore
Normal file
7
ares/.cvsignore
Normal file
@@ -0,0 +1,7 @@
|
|||||||
|
configure
|
||||||
|
autom4te.cache
|
||||||
|
Makefile
|
||||||
|
adig
|
||||||
|
ahost
|
||||||
|
config.log
|
||||||
|
config.status
|
||||||
28
ares/CHANGES
Normal file
28
ares/CHANGES
Normal file
@@ -0,0 +1,28 @@
|
|||||||
|
This package is built on ares 1.1.1 (written by Greg Hudson). I've decided to
|
||||||
|
put together and release my own ares archives since the ares maintainer
|
||||||
|
doesn't want these improvements.
|
||||||
|
|
||||||
|
The package is called 'c-ares' for now since I (Daniel Stenberg) want this for
|
||||||
|
use within the curl project (hence the letter C) and it makes a nice pun.
|
||||||
|
|
||||||
|
* January 4, 2004:
|
||||||
|
|
||||||
|
- Dominick Meglio made the private gettimeofday() become ares_gettimeofday()
|
||||||
|
instead in order to not pollute the name space and risk colliding with
|
||||||
|
other libraries' versions of this function.
|
||||||
|
|
||||||
|
* October 24, 2003. Daniel Stenberg:
|
||||||
|
|
||||||
|
Added ares_version().
|
||||||
|
|
||||||
|
Version 1.0-pre1 (8 October 2003)
|
||||||
|
|
||||||
|
- James Bursa made it run on RISC OS
|
||||||
|
|
||||||
|
- Dominick Meglio made it run fine on NT4
|
||||||
|
|
||||||
|
- Duncan Wilcox made it work fine on Mac OS X
|
||||||
|
|
||||||
|
- Daniel Stenberg adjusted the windows port
|
||||||
|
|
||||||
|
- liren at vivisimo.com made the initial windows port
|
||||||
31
ares/FILES
Normal file
31
ares/FILES
Normal file
@@ -0,0 +1,31 @@
|
|||||||
|
*.c
|
||||||
|
*.h
|
||||||
|
*.3
|
||||||
|
NEWS
|
||||||
|
README
|
||||||
|
CHANGES
|
||||||
|
FILES
|
||||||
|
maketgz
|
||||||
|
aclocal.m4
|
||||||
|
Makefile.in
|
||||||
|
install-sh
|
||||||
|
mkinstalldirs
|
||||||
|
configure
|
||||||
|
configure.in
|
||||||
|
config.guess
|
||||||
|
config.sub
|
||||||
|
vc/adig/adig.dep
|
||||||
|
vc/adig/adig.dsp
|
||||||
|
vc/adig/adig.mak
|
||||||
|
vc/adig/adig.plg
|
||||||
|
vc/vc.dsw
|
||||||
|
vc/vc.ncb
|
||||||
|
vc/vc.opt
|
||||||
|
vc/ahost/ahost.dep
|
||||||
|
vc/ahost/ahost.dsp
|
||||||
|
vc/ahost/ahost.mak
|
||||||
|
vc/ahost/ahost.plg
|
||||||
|
vc/areslib/areslib.dep
|
||||||
|
vc/areslib/areslib.dsp
|
||||||
|
vc/areslib/areslib.mak
|
||||||
|
vc/areslib/areslib.plg
|
||||||
87
ares/Makefile.in
Normal file
87
ares/Makefile.in
Normal file
@@ -0,0 +1,87 @@
|
|||||||
|
# $Id$
|
||||||
|
|
||||||
|
SHELL=/bin/sh
|
||||||
|
INSTALL=@INSTALL@
|
||||||
|
RANLIB=@RANLIB@
|
||||||
|
VPATH=@srcdir@
|
||||||
|
srcdir=@srcdir@
|
||||||
|
top_srcdir=@top_srcdir@
|
||||||
|
prefix=@prefix@
|
||||||
|
exec_prefix=@exec_prefix@
|
||||||
|
libdir=@libdir@
|
||||||
|
includedir=@includedir@
|
||||||
|
mandir=@mandir@
|
||||||
|
|
||||||
|
CC=@CC@
|
||||||
|
CPPFLAGS=@CPPFLAGS@
|
||||||
|
CFLAGS=@CFLAGS@ ${WARN_CFLAGS} ${ERROR_CFLAGS}
|
||||||
|
DEFS=@DEFS@
|
||||||
|
LDFLAGS=@LDFLAGS@
|
||||||
|
LIBS=@LIBS@
|
||||||
|
ALL_CFLAGS=${CPPFLAGS} ${CFLAGS} ${DEFS}
|
||||||
|
OBJS= ares__close_sockets.o ares__get_hostent.o ares__read_line.o \
|
||||||
|
ares_destroy.o ares_expand_name.o ares_fds.o ares_free_errmem.o \
|
||||||
|
ares_free_hostent.o ares_free_string.o ares_gethostbyaddr.o \
|
||||||
|
ares_gethostbyname.o ares_init.o ares_mkquery.o ares_parse_a_reply.o \
|
||||||
|
ares_parse_ptr_reply.o ares_process.o ares_query.o ares_search.o \
|
||||||
|
ares_send.o ares_strerror.o ares_timeout.o ares_version.o
|
||||||
|
|
||||||
|
all: libares.a adig ahost
|
||||||
|
|
||||||
|
libares.a: ${OBJS}
|
||||||
|
ar cru $@ ${OBJS}
|
||||||
|
${RANLIB} $@
|
||||||
|
|
||||||
|
adig: adig.o libares.a
|
||||||
|
${CC} ${LDFLAGS} -o $@ adig.o libares.a ${LIBS}
|
||||||
|
|
||||||
|
ahost: ahost.o libares.a
|
||||||
|
${CC} ${LDFLAGS} -o $@ ahost.o libares.a ${LIBS}
|
||||||
|
|
||||||
|
${OBJS}: ares.h ares_dns.h ares_private.h
|
||||||
|
|
||||||
|
.c.o:
|
||||||
|
${CC} -c ${ALL_CFLAGS} $<
|
||||||
|
|
||||||
|
check:
|
||||||
|
|
||||||
|
install:
|
||||||
|
${top_srcdir}/mkinstalldirs ${DESTDIR}${libdir}
|
||||||
|
${top_srcdir}/mkinstalldirs ${DESTDIR}${includedir}
|
||||||
|
${top_srcdir}/mkinstalldirs ${DESTDIR}${mandir}/man3
|
||||||
|
${INSTALL} -m 644 libares.a ${DESTDIR}${libdir}
|
||||||
|
${RANLIB} ${DESTDIR}${libdir}/libares.a
|
||||||
|
chmod u-w ${DESTDIR}${libdir}/libares.a
|
||||||
|
${INSTALL} -m 444 ${srcdir}/ares.h ${DESTDIR}${includedir}
|
||||||
|
${INSTALL} -m 444 ${srcdir}/ares_destroy.3 ${DESTDIR}${mandir}/man3
|
||||||
|
${INSTALL} -m 444 ${srcdir}/ares_expand_name.3 ${DESTDIR}${mandir}/man3
|
||||||
|
${INSTALL} -m 444 ${srcdir}/ares_fds.3 ${DESTDIR}${mandir}/man3
|
||||||
|
${INSTALL} -m 444 ${srcdir}/ares_free_errmem.3 ${DESTDIR}${mandir}/man3
|
||||||
|
${INSTALL} -m 444 ${srcdir}/ares_free_hostent.3 \
|
||||||
|
${DESTDIR}${mandir}/man3
|
||||||
|
${INSTALL} -m 444 ${srcdir}/ares_free_string.3 \
|
||||||
|
${DESTDIR}${mandir}/man3
|
||||||
|
${INSTALL} -m 444 ${srcdir}/ares_gethostbyaddr.3 \
|
||||||
|
${DESTDIR}${mandir}/man3
|
||||||
|
${INSTALL} -m 444 ${srcdir}/ares_gethostbyname.3 \
|
||||||
|
${DESTDIR}${mandir}/man3
|
||||||
|
${INSTALL} -m 444 ${srcdir}/ares_init.3 ${DESTDIR}${mandir}/man3
|
||||||
|
${INSTALL} -m 444 ${srcdir}/ares_init_options.3 \
|
||||||
|
${DESTDIR}${mandir}/man3
|
||||||
|
${INSTALL} -m 444 ${srcdir}/ares_mkquery.3 ${DESTDIR}${mandir}/man3
|
||||||
|
${INSTALL} -m 444 ${srcdir}/ares_parse_a_reply.3 \
|
||||||
|
${DESTDIR}${mandir}/man3
|
||||||
|
${INSTALL} -m 444 ${srcdir}/ares_parse_ptr_reply.3 \
|
||||||
|
${DESTDIR}${mandir}/man3
|
||||||
|
${INSTALL} -m 444 ${srcdir}/ares_process.3 ${DESTDIR}${mandir}/man3
|
||||||
|
${INSTALL} -m 444 ${srcdir}/ares_query.3 ${DESTDIR}${mandir}/man3
|
||||||
|
${INSTALL} -m 444 ${srcdir}/ares_search.3 ${DESTDIR}${mandir}/man3
|
||||||
|
${INSTALL} -m 444 ${srcdir}/ares_send.3 ${DESTDIR}${mandir}/man3
|
||||||
|
${INSTALL} -m 444 ${srcdir}/ares_strerror.3 ${DESTDIR}${mandir}/man3
|
||||||
|
${INSTALL} -m 444 ${srcdir}/ares_timeout.3 ${DESTDIR}${mandir}/man3
|
||||||
|
|
||||||
|
clean:
|
||||||
|
rm -f ${OBJS} libares.a adig.o adig ahost.o ahost
|
||||||
|
|
||||||
|
distclean: clean
|
||||||
|
rm -f config.cache config.log config.status Makefile
|
||||||
18
ares/NEWS
Normal file
18
ares/NEWS
Normal file
@@ -0,0 +1,18 @@
|
|||||||
|
Major changes in release 1.1.1:
|
||||||
|
* ares should now compile as C++ code (no longer uses reserved word
|
||||||
|
"class").
|
||||||
|
* Added SRV support to adig test program.
|
||||||
|
* Fixed a few error handling bugs in query processing.
|
||||||
|
|
||||||
|
Major changes in release 1.1.0:
|
||||||
|
* Added ares_free_string() function so that memory can be freed in the
|
||||||
|
same layer as it is allocated, a desirable feature in some
|
||||||
|
environments.
|
||||||
|
* A few of the ares_dns.h macros are fixed to use the proper bitwise
|
||||||
|
operator.
|
||||||
|
* Fixed a couple of fenceposts fixed in ares_expand_name()'s
|
||||||
|
bounds-checking.
|
||||||
|
* In process_timeouts(), extract query->next before calling
|
||||||
|
next_server() and possibly freeing the query structure.
|
||||||
|
* Casted arguments to ctype macros casted to unsigned char, since not
|
||||||
|
all char values are valid inputs to those macros according to ANSI.
|
||||||
41
ares/README
Normal file
41
ares/README
Normal file
@@ -0,0 +1,41 @@
|
|||||||
|
This is ares, an asynchronous resolver library. It is intended for
|
||||||
|
applications which need to perform DNS queries without blocking, or
|
||||||
|
need to perform multiple DNS queries in parallel. The primary
|
||||||
|
examples of such applications are servers which communicate with
|
||||||
|
multiple clients and programs with graphical user interfaces.
|
||||||
|
|
||||||
|
This library implementation is not especially portable to crufty old
|
||||||
|
systems like SunOS 4. It assumes a compiler which can handle ANSI C
|
||||||
|
syntax, a system malloc which properly handles realloc(NULL, foo) and
|
||||||
|
free(NULL), and a reasonably up-to-date <arpa/nameser.h>.
|
||||||
|
|
||||||
|
I have attempted to preserve the externally visible behavior of the
|
||||||
|
BIND resolver in nearly all respects. The API of the library is, of
|
||||||
|
course, very different from the synchronous BIND API; instead of
|
||||||
|
invoking a function like res_send() and getting a return value back
|
||||||
|
indicating the number of bytes in the response, you invoke a function
|
||||||
|
like ares_send() and give it a callback function to invoke when the
|
||||||
|
response arrives. You then have to select() on the file descriptors
|
||||||
|
indicated by ares_fds(), with a timeout given by ares_timeout(). You
|
||||||
|
call ares_process() when select() returns.
|
||||||
|
|
||||||
|
Some features are missing from the current version of ares, relative
|
||||||
|
to the BIND resolver:
|
||||||
|
|
||||||
|
* There is no IPV6 support.
|
||||||
|
* There is no hostname verification.
|
||||||
|
* There is no logging of unexpected events.
|
||||||
|
* There is no debugging-oriented logging.
|
||||||
|
* There is no YP support.
|
||||||
|
|
||||||
|
libares requires an ANSI compiler to compile and use. To build the
|
||||||
|
library, just run "./configure" and "make". To install it, run "make
|
||||||
|
install". Run "./configure --help" to see a list of options you can
|
||||||
|
provide to configure to change how the library builds. libares has no
|
||||||
|
data files, so you can move the include file and library around freely
|
||||||
|
without leaving behind any dependencies on old paths. Building the
|
||||||
|
library will also build the "adig" program, a little toy for trying
|
||||||
|
out the library. It doesn't get installed.
|
||||||
|
|
||||||
|
libares is distributed at athena-dist.mit.edu:pub/ATHENA/ares. Please
|
||||||
|
send bug reports and comments to ghudson@mit.edu.
|
||||||
358
ares/aclocal.m4
vendored
Normal file
358
ares/aclocal.m4
vendored
Normal file
@@ -0,0 +1,358 @@
|
|||||||
|
dnl $Id$
|
||||||
|
|
||||||
|
dnl Copyright 1996 by the Massachusetts Institute of Technology.
|
||||||
|
dnl
|
||||||
|
dnl Permission to use, copy, modify, and distribute this
|
||||||
|
dnl software and its documentation for any purpose and without
|
||||||
|
dnl fee is hereby granted, provided that the above copyright
|
||||||
|
dnl notice appear in all copies and that both that copyright
|
||||||
|
dnl notice and this permission notice appear in supporting
|
||||||
|
dnl documentation, and that the name of M.I.T. not be used in
|
||||||
|
dnl advertising or publicity pertaining to distribution of the
|
||||||
|
dnl software without specific, written prior permission.
|
||||||
|
dnl M.I.T. makes no representations about the suitability of
|
||||||
|
dnl this software for any purpose. It is provided "as is"
|
||||||
|
dnl without express or implied warranty.
|
||||||
|
|
||||||
|
dnl This file provides local macros for packages which use specific
|
||||||
|
dnl external libraries. The public macros are:
|
||||||
|
dnl
|
||||||
|
dnl ATHENA_UTIL_COM_ERR
|
||||||
|
dnl Generates error if com_err not found.
|
||||||
|
dnl ATHENA_UTIL_SS
|
||||||
|
dnl Generates error if ss not found.
|
||||||
|
dnl ATHENA_REGEXP
|
||||||
|
dnl Sets REGEX_LIBS if rx library used; ensures POSIX
|
||||||
|
dnl regexp support.
|
||||||
|
dnl ATHENA_MOTIF
|
||||||
|
dnl Sets MOTIF_LIBS and defines HAVE_MOTIF if Motif used.
|
||||||
|
dnl ATHENA_MOTIF_REQUIRED
|
||||||
|
dnl Generates error if Motif not found.
|
||||||
|
dnl ATHENA_AFS
|
||||||
|
dnl Sets AFS_LIBS and defines HAVE_AFS if AFS used. Pass
|
||||||
|
dnl in an argument giving the desired AFS libraries;
|
||||||
|
dnl AFS_LIBS will be set to that value if AFS is found.
|
||||||
|
dnl AFS_DIR will be set to the prefix given.
|
||||||
|
dnl ATHENA_AFS_REQUIRED
|
||||||
|
dnl Generates error if AFS libraries not found. AFS_DIR
|
||||||
|
dnl will be set to the prefix given.
|
||||||
|
dnl ATHENA_KRB4
|
||||||
|
dnl Sets KRB4_LIBS and defines HAVE_KRB4 if krb4 used.
|
||||||
|
dnl ATHENA_KRB4_REQUIRED
|
||||||
|
dnl Generates error if krb4 not found. Sets KRB4_LIBS
|
||||||
|
dnl otherwise. (Special behavior because krb4 libraries
|
||||||
|
dnl may be different if using krb4 compatibility libraries
|
||||||
|
dnl from krb5.)
|
||||||
|
dnl ATHENA_KRB5
|
||||||
|
dnl Sets KRB5_LIBS and defines HAVE_KRB5 if krb5 used.
|
||||||
|
dnl ATHENA_KRB5_REQUIRED
|
||||||
|
dnl Generates error if krb5 not found.
|
||||||
|
dnl ATHENA_HESIOD
|
||||||
|
dnl Sets HESIOD_LIBS and defines HAVE_HESIOD if Hesiod
|
||||||
|
dnl used.
|
||||||
|
dnl ATHENA_HESIOD_REQUIRED
|
||||||
|
dnl Generates error if Hesiod not found.
|
||||||
|
dnl ATHENA_ARES
|
||||||
|
dnl Sets ARES_LIBS and defines HAVE_ARES if libares
|
||||||
|
dnl used.
|
||||||
|
dnl ATHENA_ARES_REQUIRED
|
||||||
|
dnl Generates error if libares not found.
|
||||||
|
dnl ATHENA_ZEPHYR
|
||||||
|
dnl Sets ZEPHYR_LIBS and defines HAVE_ZEPHYR if zephyr
|
||||||
|
dnl used.
|
||||||
|
dnl ATHENA_ZEPHYR_REQUIRED
|
||||||
|
dnl Generates error if zephyr not found.
|
||||||
|
dnl
|
||||||
|
dnl All of the macros may extend CPPFLAGS and LDFLAGS to let the
|
||||||
|
dnl compiler find the requested libraries. Put ATHENA_UTIL_COM_ERR
|
||||||
|
dnl and ATHENA_UTIL_SS before ATHENA_AFS or ATHENA_AFS_REQUIRED; there
|
||||||
|
dnl is a com_err library in the AFS libraries which requires -lutil.
|
||||||
|
|
||||||
|
dnl ----- com_err -----
|
||||||
|
|
||||||
|
AC_DEFUN(ATHENA_UTIL_COM_ERR,
|
||||||
|
[AC_ARG_WITH(com_err,
|
||||||
|
[ --with-com_err=PREFIX Specify location of com_err],
|
||||||
|
[com_err="$withval"], [com_err=yes])
|
||||||
|
if test "$com_err" != no; then
|
||||||
|
if test "$com_err" != yes; then
|
||||||
|
CPPFLAGS="$CPPFLAGS -I$com_err/include"
|
||||||
|
LDFLAGS="$LDFLAGS -L$com_err/lib"
|
||||||
|
fi
|
||||||
|
AC_CHECK_LIB(com_err, com_err, :,
|
||||||
|
[AC_MSG_ERROR(com_err library not found)])
|
||||||
|
else
|
||||||
|
AC_MSG_ERROR(This package requires com_err.)
|
||||||
|
fi])
|
||||||
|
|
||||||
|
dnl ----- ss -----
|
||||||
|
|
||||||
|
AC_DEFUN(ATHENA_UTIL_SS,
|
||||||
|
[AC_ARG_WITH(ss,
|
||||||
|
[ --with-ss=PREFIX Specify location of ss (requires com_err)],
|
||||||
|
[ss="$withval"], [ss=yes])
|
||||||
|
if test "$ss" != no; then
|
||||||
|
if test "$ss" != yes; then
|
||||||
|
CPPFLAGS="$CPPFLAGS -I$ss/include"
|
||||||
|
LDFLAGS="$LDFLAGS -L$ss/lib"
|
||||||
|
fi
|
||||||
|
AC_CHECK_LIB(ss, ss_perror, :,
|
||||||
|
[AC_MSG_ERROR(ss library not found)], -lcom_err)
|
||||||
|
else
|
||||||
|
AC_MSG_ERROR(This package requires ss.)
|
||||||
|
fi])
|
||||||
|
|
||||||
|
dnl ----- Regular expressions -----
|
||||||
|
|
||||||
|
AC_DEFUN(ATHENA_REGEXP,
|
||||||
|
[AC_ARG_WITH(regex,
|
||||||
|
[ --with-regex=PREFIX Use installed regex library],
|
||||||
|
[regex="$withval"], [regex=no])
|
||||||
|
if test "$regex" != no; then
|
||||||
|
if test "$regex" != yes; then
|
||||||
|
CPPFLAGS="$CPPFLAGS -I$regex/include"
|
||||||
|
LDFLAGS="$LDFLAGS -L$regex/lib"
|
||||||
|
fi
|
||||||
|
AC_CHECK_LIB(regex, regcomp, REGEX_LIBS=-lregex,
|
||||||
|
[AC_MSG_ERROR(regex library not found)])
|
||||||
|
else
|
||||||
|
AC_CHECK_FUNC(regcomp, :,
|
||||||
|
[AC_MSG_ERROR(can't find POSIX regexp support)])
|
||||||
|
fi
|
||||||
|
AC_SUBST(REGEX_LIBS)])
|
||||||
|
|
||||||
|
dnl ----- Motif -----
|
||||||
|
|
||||||
|
AC_DEFUN(ATHENA_MOTIF_CHECK,
|
||||||
|
[if test "$motif" != yes; then
|
||||||
|
CPPFLAGS="$CPPFLAGS -I$motif/include"
|
||||||
|
LDFLAGS="$LDFLAGS -L$motif/lib"
|
||||||
|
fi
|
||||||
|
AC_CHECK_LIB(Xm, XmStringFree, :, [AC_MSG_ERROR(Motif library not found)])])
|
||||||
|
|
||||||
|
AC_DEFUN(ATHENA_MOTIF,
|
||||||
|
[AC_ARG_WITH(motif,
|
||||||
|
[ --with-motif=PREFIX Use Motif],
|
||||||
|
[motif="$withval"], [motif=no])
|
||||||
|
if test "$motif" != no; then
|
||||||
|
ATHENA_MOTIF_CHECK
|
||||||
|
MOTIF_LIBS=-lXm
|
||||||
|
AC_DEFINE(HAVE_MOTIF)
|
||||||
|
fi
|
||||||
|
AC_SUBST(MOTIF_LIBS)])
|
||||||
|
|
||||||
|
AC_DEFUN(ATHENA_MOTIF_REQUIRED,
|
||||||
|
[AC_ARG_WITH(motif,
|
||||||
|
[ --with-motif=PREFIX Specify location of Motif],
|
||||||
|
[motif="$withval"], [motif=yes])
|
||||||
|
if test "$motif" != no; then
|
||||||
|
ATHENA_MOTIF_CHECK
|
||||||
|
else
|
||||||
|
AC_MSG_ERROR(This package requires Motif.)
|
||||||
|
fi])
|
||||||
|
|
||||||
|
dnl ----- AFS -----
|
||||||
|
|
||||||
|
AC_DEFUN(ATHENA_AFS_CHECK,
|
||||||
|
[AC_CHECK_FUNC(insque, :, AC_CHECK_LIB(compat, insque))
|
||||||
|
AC_CHECK_FUNC(gethostbyname, :, AC_CHECK_LIB(nsl, gethostbyname))
|
||||||
|
AC_CHECK_FUNC(socket, :, AC_CHECK_LIB(socket, socket))
|
||||||
|
if test "$afs" != yes; then
|
||||||
|
CPPFLAGS="$CPPFLAGS -I$afs/include"
|
||||||
|
LDFLAGS="$LDFLAGS -L$afs/lib -L$afs/lib/afs"
|
||||||
|
fi
|
||||||
|
AC_CHECK_LIB(sys, pioctl, :, [AC_MSG_ERROR(AFS libraries not found)],
|
||||||
|
-lrx -llwp -lsys)
|
||||||
|
AFS_DIR=$afs
|
||||||
|
AC_SUBST(AFS_DIR)])
|
||||||
|
|
||||||
|
dnl Specify desired AFS libraries as a parameter.
|
||||||
|
AC_DEFUN(ATHENA_AFS,
|
||||||
|
[AC_ARG_WITH(afs,
|
||||||
|
[ --with-afs=PREFIX Use AFS libraries],
|
||||||
|
[afs="$withval"], [afs=no])
|
||||||
|
if test "$afs" != no; then
|
||||||
|
ATHENA_AFS_CHECK
|
||||||
|
AFS_LIBS=$1
|
||||||
|
AC_DEFINE(HAVE_AFS)
|
||||||
|
fi
|
||||||
|
AC_SUBST(AFS_LIBS)])
|
||||||
|
|
||||||
|
AC_DEFUN(ATHENA_AFS_REQUIRED,
|
||||||
|
[AC_ARG_WITH(afs,
|
||||||
|
[ --with-afs=PREFIX Specify location of AFS libraries],
|
||||||
|
[afs="$withval"], [afs=/usr/afsws])
|
||||||
|
if test "$afs" != no; then
|
||||||
|
ATHENA_AFS_CHECK
|
||||||
|
else
|
||||||
|
AC_MSG_ERROR(This package requires AFS libraries.)
|
||||||
|
fi])
|
||||||
|
|
||||||
|
dnl ----- Kerberos 4 -----
|
||||||
|
|
||||||
|
AC_DEFUN(ATHENA_KRB4_CHECK,
|
||||||
|
[AC_CHECK_FUNC(gethostbyname, :, AC_CHECK_LIB(nsl, gethostbyname))
|
||||||
|
AC_CHECK_FUNC(socket, :, AC_CHECK_LIB(socket, socket))
|
||||||
|
AC_CHECK_LIB(gen, compile)
|
||||||
|
if test "$krb4" != yes; then
|
||||||
|
CPPFLAGS="$CPPFLAGS -I$krb4/include"
|
||||||
|
if test -d "$krb4/include/kerberosIV"; then
|
||||||
|
CPPFLAGS="$CPPFLAGS -I$krb4/include/kerberosIV"
|
||||||
|
fi
|
||||||
|
LDFLAGS="$LDFLAGS -L$krb4/lib"
|
||||||
|
fi
|
||||||
|
AC_CHECK_LIB(krb4, krb_rd_req,
|
||||||
|
[KRB4_LIBS="-lkrb4 -ldes425 -lkrb5 -lk5crypto -lcom_err"],
|
||||||
|
[AC_CHECK_LIB(krb, krb_rd_req,
|
||||||
|
[KRB4_LIBS="-lkrb -ldes"],
|
||||||
|
[AC_MSG_ERROR(Kerberos 4 libraries not found)],
|
||||||
|
-ldes)],
|
||||||
|
-ldes425 -lkrb5 -lk5crypto -lcom_err)])
|
||||||
|
|
||||||
|
AC_DEFUN(ATHENA_KRB4,
|
||||||
|
[AC_ARG_WITH(krb4,
|
||||||
|
[ --with-krb4=PREFIX Use Kerberos 4],
|
||||||
|
[krb4="$withval"], [krb4=no])
|
||||||
|
if test "$krb4" != no; then
|
||||||
|
ATHENA_KRB4_CHECK
|
||||||
|
AC_DEFINE(HAVE_KRB4)
|
||||||
|
fi
|
||||||
|
AC_SUBST(KRB4_LIBS)])
|
||||||
|
|
||||||
|
AC_DEFUN(ATHENA_KRB4_REQUIRED,
|
||||||
|
[AC_ARG_WITH(krb4,
|
||||||
|
[ --with-krb4=PREFIX Specify location of Kerberos 4],
|
||||||
|
[krb4="$withval"], [krb4=yes])
|
||||||
|
if test "$krb4" != no; then
|
||||||
|
ATHENA_KRB4_CHECK
|
||||||
|
AC_SUBST(KRB4_LIBS)
|
||||||
|
else
|
||||||
|
AC_MSG_ERROR(This package requires Kerberos 4.)
|
||||||
|
fi])
|
||||||
|
|
||||||
|
dnl ----- Kerberos 5 -----
|
||||||
|
|
||||||
|
AC_DEFUN(ATHENA_KRB5_CHECK,
|
||||||
|
[AC_SEARCH_LIBS(gethostbyname, nsl)
|
||||||
|
AC_SEARCH_LIBS(socket, socket)
|
||||||
|
AC_CHECK_LIB(gen, compile)
|
||||||
|
if test "$krb5" != yes; then
|
||||||
|
CPPFLAGS="$CPPFLAGS -I$krb5/include"
|
||||||
|
LDFLAGS="$LDFLAGS -L$krb5/lib"
|
||||||
|
fi
|
||||||
|
AC_CHECK_LIB(krb5, krb5_init_context, :,
|
||||||
|
[AC_MSG_ERROR(Kerberos 5 libraries not found)],
|
||||||
|
-lk5crypto -lcom_err)])
|
||||||
|
|
||||||
|
AC_DEFUN(ATHENA_KRB5,
|
||||||
|
[AC_ARG_WITH(krb5,
|
||||||
|
[ --with-krb5=PREFIX Use Kerberos 5],
|
||||||
|
[krb5="$withval"], [krb5=no])
|
||||||
|
if test "$krb5" != no; then
|
||||||
|
ATHENA_KRB5_CHECK
|
||||||
|
KRB5_LIBS="-lkrb5 -lk5crypto -lcom_err"
|
||||||
|
AC_DEFINE(HAVE_KRB5)
|
||||||
|
fi
|
||||||
|
AC_SUBST(KRB5_LIBS)])
|
||||||
|
|
||||||
|
AC_DEFUN(ATHENA_KRB5_REQUIRED,
|
||||||
|
[AC_ARG_WITH(krb5,
|
||||||
|
[ --with-krb5=PREFIX Specify location of Kerberos 5],
|
||||||
|
[krb5="$withval"], [krb5=yes])
|
||||||
|
if test "$krb5" != no; then
|
||||||
|
ATHENA_KRB5_CHECK
|
||||||
|
else
|
||||||
|
AC_MSG_ERROR(This package requires Kerberos 5.)
|
||||||
|
fi])
|
||||||
|
|
||||||
|
dnl ----- Hesiod -----
|
||||||
|
|
||||||
|
AC_DEFUN(ATHENA_HESIOD_CHECK,
|
||||||
|
[AC_CHECK_FUNC(res_send, :, AC_CHECK_LIB(resolv, res_send))
|
||||||
|
if test "$hesiod" != yes; then
|
||||||
|
CPPFLAGS="$CPPFLAGS -I$hesiod/include"
|
||||||
|
LDFLAGS="$LDFLAGS -L$hesiod/lib"
|
||||||
|
fi
|
||||||
|
AC_CHECK_LIB(hesiod, hes_resolve, :,
|
||||||
|
[AC_MSG_ERROR(Hesiod library not found)])])
|
||||||
|
|
||||||
|
AC_DEFUN(ATHENA_HESIOD,
|
||||||
|
[AC_ARG_WITH(hesiod,
|
||||||
|
[ --with-hesiod=PREFIX Use Hesiod],
|
||||||
|
[hesiod="$withval"], [hesiod=no])
|
||||||
|
if test "$hesiod" != no; then
|
||||||
|
ATHENA_HESIOD_CHECK
|
||||||
|
HESIOD_LIBS="-lhesiod"
|
||||||
|
AC_DEFINE(HAVE_HESIOD)
|
||||||
|
fi
|
||||||
|
AC_SUBST(HESIOD_LIBS)])
|
||||||
|
|
||||||
|
AC_DEFUN(ATHENA_HESIOD_REQUIRED,
|
||||||
|
[AC_ARG_WITH(hesiod,
|
||||||
|
[ --with-hesiod=PREFIX Specify location of Hesiod],
|
||||||
|
[hesiod="$withval"], [hesiod=yes])
|
||||||
|
if test "$hesiod" != no; then
|
||||||
|
ATHENA_HESIOD_CHECK
|
||||||
|
else
|
||||||
|
AC_MSG_ERROR(This package requires Hesiod.)
|
||||||
|
fi])
|
||||||
|
|
||||||
|
dnl ----- libares -----
|
||||||
|
|
||||||
|
AC_DEFUN(ATHENA_ARES_CHECK,
|
||||||
|
[AC_CHECK_FUNC(res_send, :, AC_CHECK_LIB(resolv, res_send))
|
||||||
|
if test "$ares" != yes; then
|
||||||
|
CPPFLAGS="$CPPFLAGS -I$ares/include"
|
||||||
|
LDFLAGS="$LDFLAGS -L$ares/lib"
|
||||||
|
fi
|
||||||
|
AC_CHECK_LIB(ares, ares_init, :, [AC_MSG_ERROR(libares not found)])])
|
||||||
|
|
||||||
|
AC_DEFUN(ATHENA_ARES,
|
||||||
|
[AC_ARG_WITH(ares,
|
||||||
|
[ --with-ares=PREFIX Use libares],
|
||||||
|
[ares="$withval"], [ares=no])
|
||||||
|
if test "$ares" != no; then
|
||||||
|
ATHENA_ARES_CHECK
|
||||||
|
ARES_LIBS="-lares"
|
||||||
|
AC_DEFINE(HAVE_ARES)
|
||||||
|
fi
|
||||||
|
AC_SUBST(ARES_LIBS)])
|
||||||
|
|
||||||
|
AC_DEFUN(ATHENA_ARES_REQUIRED,
|
||||||
|
[AC_ARG_WITH(ares,
|
||||||
|
[ --with-ares=PREFIX Specify location of libares],
|
||||||
|
[ares="$withval"], [ares=yes])
|
||||||
|
if test "$ares" != no; then
|
||||||
|
ATHENA_ARES_CHECK
|
||||||
|
else
|
||||||
|
AC_MSG_ERROR(This package requires libares.)
|
||||||
|
fi])
|
||||||
|
dnl ----- zephyr -----
|
||||||
|
|
||||||
|
AC_DEFUN(ATHENA_ZEPHYR_CHECK,
|
||||||
|
[if test "$zephyr" != yes; then
|
||||||
|
CPPFLAGS="$CPPFLAGS -I$zephyr/include"
|
||||||
|
LDFLAGS="$LDFLAGS -L$zephyr/lib"
|
||||||
|
fi
|
||||||
|
AC_CHECK_LIB(zephyr, ZFreeNotice, :, [AC_MSG_ERROR(zephyr not found)])])
|
||||||
|
|
||||||
|
AC_DEFUN(ATHENA_ZEPHYR,
|
||||||
|
[AC_ARG_WITH(zephyr,
|
||||||
|
[ --with-zephyr=PREFIX Use zephyr],
|
||||||
|
[zephyr="$withval"], [zephyr=no])
|
||||||
|
if test "$zephyr" != no; then
|
||||||
|
ATHENA_ZEPHYR_CHECK
|
||||||
|
ZEPHYR_LIBS="-lzephyr"
|
||||||
|
AC_DEFINE(HAVE_ZEPHYR)
|
||||||
|
fi
|
||||||
|
AC_SUBST(ZEPHYR_LIBS)])
|
||||||
|
|
||||||
|
AC_DEFUN(ATHENA_ZEPHYR_REQUIRED,
|
||||||
|
[AC_ARG_WITH(zephyr,
|
||||||
|
[ --with-zephyr=PREFIX Specify location of zephyr],
|
||||||
|
[zephyr="$withval"], [zephyr=yes])
|
||||||
|
if test "$zephyr" != no; then
|
||||||
|
ATHENA_ZEPHYR_CHECK
|
||||||
|
else
|
||||||
|
AC_MSG_ERROR(This package requires zephyr.)
|
||||||
|
fi])
|
||||||
623
ares/adig.c
Normal file
623
ares/adig.c
Normal file
@@ -0,0 +1,623 @@
|
|||||||
|
/* Copyright 1998 by the Massachusetts Institute of Technology.
|
||||||
|
*
|
||||||
|
* Permission to use, copy, modify, and distribute this
|
||||||
|
* software and its documentation for any purpose and without
|
||||||
|
* fee is hereby granted, provided that the above copyright
|
||||||
|
* notice appear in all copies and that both that copyright
|
||||||
|
* notice and this permission notice appear in supporting
|
||||||
|
* documentation, and that the name of M.I.T. not be used in
|
||||||
|
* advertising or publicity pertaining to distribution of the
|
||||||
|
* software without specific, written prior permission.
|
||||||
|
* M.I.T. makes no representations about the suitability of
|
||||||
|
* this software for any purpose. It is provided "as is"
|
||||||
|
* without express or implied warranty.
|
||||||
|
*/
|
||||||
|
|
||||||
|
static const char rcsid[] = "$Id$";
|
||||||
|
|
||||||
|
#include <sys/types.h>
|
||||||
|
|
||||||
|
#ifdef WIN32
|
||||||
|
#include "nameser.h"
|
||||||
|
#else
|
||||||
|
#include <sys/time.h>
|
||||||
|
#include <sys/socket.h>
|
||||||
|
#include <netinet/in.h>
|
||||||
|
#include <arpa/inet.h>
|
||||||
|
#include <arpa/nameser.h>
|
||||||
|
#include <unistd.h>
|
||||||
|
#include <netdb.h>
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#include <stdio.h>
|
||||||
|
#include <stdlib.h>
|
||||||
|
#include <string.h>
|
||||||
|
#include <ctype.h>
|
||||||
|
#include <errno.h>
|
||||||
|
#include "ares.h"
|
||||||
|
#include "ares_dns.h"
|
||||||
|
|
||||||
|
#ifndef INADDR_NONE
|
||||||
|
#define INADDR_NONE 0xffffffff
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/* Mac OS X portability check */
|
||||||
|
#ifndef T_SRV
|
||||||
|
#define T_SRV 33 /* server selection */
|
||||||
|
#endif
|
||||||
|
|
||||||
|
extern int optind;
|
||||||
|
extern char *optarg;
|
||||||
|
|
||||||
|
struct nv {
|
||||||
|
const char *name;
|
||||||
|
int value;
|
||||||
|
};
|
||||||
|
|
||||||
|
static const struct nv flags[] = {
|
||||||
|
{ "usevc", ARES_FLAG_USEVC },
|
||||||
|
{ "primary", ARES_FLAG_PRIMARY },
|
||||||
|
{ "igntc", ARES_FLAG_IGNTC },
|
||||||
|
{ "norecurse", ARES_FLAG_NORECURSE },
|
||||||
|
{ "stayopen", ARES_FLAG_STAYOPEN },
|
||||||
|
{ "noaliases", ARES_FLAG_NOALIASES }
|
||||||
|
};
|
||||||
|
static const int nflags = sizeof(flags) / sizeof(flags[0]);
|
||||||
|
|
||||||
|
static const struct nv classes[] = {
|
||||||
|
{ "IN", C_IN },
|
||||||
|
{ "CHAOS", C_CHAOS },
|
||||||
|
{ "HS", C_HS },
|
||||||
|
{ "ANY", C_ANY }
|
||||||
|
};
|
||||||
|
static const int nclasses = sizeof(classes) / sizeof(classes[0]);
|
||||||
|
|
||||||
|
static const struct nv types[] = {
|
||||||
|
{ "A", T_A },
|
||||||
|
{ "NS", T_NS },
|
||||||
|
{ "MD", T_MD },
|
||||||
|
{ "MF", T_MF },
|
||||||
|
{ "CNAME", T_CNAME },
|
||||||
|
{ "SOA", T_SOA },
|
||||||
|
{ "MB", T_MB },
|
||||||
|
{ "MG", T_MG },
|
||||||
|
{ "MR", T_MR },
|
||||||
|
{ "NULL", T_NULL },
|
||||||
|
{ "WKS", T_WKS },
|
||||||
|
{ "PTR", T_PTR },
|
||||||
|
{ "HINFO", T_HINFO },
|
||||||
|
{ "MINFO", T_MINFO },
|
||||||
|
{ "MX", T_MX },
|
||||||
|
{ "TXT", T_TXT },
|
||||||
|
{ "RP", T_RP },
|
||||||
|
{ "AFSDB", T_AFSDB },
|
||||||
|
{ "X25", T_X25 },
|
||||||
|
{ "ISDN", T_ISDN },
|
||||||
|
{ "RT", T_RT },
|
||||||
|
{ "NSAP", T_NSAP },
|
||||||
|
{ "NSAP_PTR", T_NSAP_PTR },
|
||||||
|
{ "SIG", T_SIG },
|
||||||
|
{ "KEY", T_KEY },
|
||||||
|
{ "PX", T_PX },
|
||||||
|
{ "GPOS", T_GPOS },
|
||||||
|
{ "AAAA", T_AAAA },
|
||||||
|
{ "LOC", T_LOC },
|
||||||
|
{ "SRV", T_SRV },
|
||||||
|
{ "AXFR", T_AXFR },
|
||||||
|
{ "MAILB", T_MAILB },
|
||||||
|
{ "MAILA", T_MAILA },
|
||||||
|
{ "ANY", T_ANY }
|
||||||
|
};
|
||||||
|
static const int ntypes = sizeof(types) / sizeof(types[0]);
|
||||||
|
|
||||||
|
static const char *opcodes[] = {
|
||||||
|
"QUERY", "IQUERY", "STATUS", "(reserved)", "NOTIFY",
|
||||||
|
"(unknown)", "(unknown)", "(unknown)", "(unknown)",
|
||||||
|
"UPDATEA", "UPDATED", "UPDATEDA", "UPDATEM", "UPDATEMA",
|
||||||
|
"ZONEINIT", "ZONEREF"
|
||||||
|
};
|
||||||
|
|
||||||
|
static const char *rcodes[] = {
|
||||||
|
"NOERROR", "FORMERR", "SERVFAIL", "NXDOMAIN", "NOTIMP", "REFUSED",
|
||||||
|
"(unknown)", "(unknown)", "(unknown)", "(unknown)", "(unknown)",
|
||||||
|
"(unknown)", "(unknown)", "(unknown)", "(unknown)", "NOCHANGE"
|
||||||
|
};
|
||||||
|
|
||||||
|
static void callback(void *arg, int status, unsigned char *abuf, int alen);
|
||||||
|
static const unsigned char *display_question(const unsigned char *aptr,
|
||||||
|
const unsigned char *abuf,
|
||||||
|
int alen);
|
||||||
|
static const unsigned char *display_rr(const unsigned char *aptr,
|
||||||
|
const unsigned char *abuf, int alen);
|
||||||
|
static const char *type_name(int type);
|
||||||
|
static const char *class_name(int dnsclass);
|
||||||
|
static void usage(void);
|
||||||
|
|
||||||
|
int main(int argc, char **argv)
|
||||||
|
{
|
||||||
|
ares_channel channel;
|
||||||
|
int c, i, optmask = ARES_OPT_FLAGS, dnsclass = C_IN, type = T_A;
|
||||||
|
int status, nfds, count;
|
||||||
|
struct ares_options options;
|
||||||
|
struct hostent *hostent;
|
||||||
|
fd_set read_fds, write_fds;
|
||||||
|
struct timeval *tvp, tv;
|
||||||
|
char *errmem;
|
||||||
|
|
||||||
|
#ifdef WIN32
|
||||||
|
WORD wVersionRequested = MAKEWORD(1,1);
|
||||||
|
WSADATA wsaData;
|
||||||
|
WSAStartup(wVersionRequested, &wsaData);
|
||||||
|
#endif
|
||||||
|
|
||||||
|
options.flags = ARES_FLAG_NOCHECKRESP;
|
||||||
|
options.servers = NULL;
|
||||||
|
options.nservers = 0;
|
||||||
|
while ((c = getopt(argc, argv, "f:s:c:t:T:U:")) != -1)
|
||||||
|
{
|
||||||
|
switch (c)
|
||||||
|
{
|
||||||
|
case 'f':
|
||||||
|
/* Add a flag. */
|
||||||
|
for (i = 0; i < nflags; i++)
|
||||||
|
{
|
||||||
|
if (strcmp(flags[i].name, optarg) == 0)
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
if (i == nflags)
|
||||||
|
usage();
|
||||||
|
options.flags |= flags[i].value;
|
||||||
|
break;
|
||||||
|
|
||||||
|
case 's':
|
||||||
|
/* Add a server, and specify servers in the option mask. */
|
||||||
|
hostent = gethostbyname(optarg);
|
||||||
|
if (!hostent || hostent->h_addrtype != AF_INET)
|
||||||
|
{
|
||||||
|
fprintf(stderr, "adig: server %s not found.\n", optarg);
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
options.servers = realloc(options.servers, (options.nservers + 1)
|
||||||
|
* sizeof(struct in_addr));
|
||||||
|
if (!options.servers)
|
||||||
|
{
|
||||||
|
fprintf(stderr, "Out of memory!\n");
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
memcpy(&options.servers[options.nservers], hostent->h_addr,
|
||||||
|
sizeof(struct in_addr));
|
||||||
|
options.nservers++;
|
||||||
|
optmask |= ARES_OPT_SERVERS;
|
||||||
|
break;
|
||||||
|
|
||||||
|
case 'c':
|
||||||
|
/* Set the query class. */
|
||||||
|
for (i = 0; i < nclasses; i++)
|
||||||
|
{
|
||||||
|
if (strcasecmp(classes[i].name, optarg) == 0)
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
if (i == nclasses)
|
||||||
|
usage();
|
||||||
|
dnsclass = classes[i].value;
|
||||||
|
break;
|
||||||
|
|
||||||
|
case 't':
|
||||||
|
/* Set the query type. */
|
||||||
|
for (i = 0; i < ntypes; i++)
|
||||||
|
{
|
||||||
|
if (strcasecmp(types[i].name, optarg) == 0)
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
if (i == ntypes)
|
||||||
|
usage();
|
||||||
|
type = types[i].value;
|
||||||
|
break;
|
||||||
|
|
||||||
|
case 'T':
|
||||||
|
/* Set the TCP port number. */
|
||||||
|
if (!isdigit((unsigned char)*optarg))
|
||||||
|
usage();
|
||||||
|
options.tcp_port = strtol(optarg, NULL, 0);
|
||||||
|
optmask |= ARES_OPT_TCP_PORT;
|
||||||
|
break;
|
||||||
|
|
||||||
|
case 'U':
|
||||||
|
/* Set the UDP port number. */
|
||||||
|
if (!isdigit((unsigned char)*optarg))
|
||||||
|
usage();
|
||||||
|
options.udp_port = strtol(optarg, NULL, 0);
|
||||||
|
optmask |= ARES_OPT_UDP_PORT;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
argc -= optind;
|
||||||
|
argv += optind;
|
||||||
|
if (argc == 0)
|
||||||
|
usage();
|
||||||
|
|
||||||
|
status = ares_init_options(&channel, &options, optmask);
|
||||||
|
|
||||||
|
if (status != ARES_SUCCESS)
|
||||||
|
{
|
||||||
|
fprintf(stderr, "ares_init_options: %s\n",
|
||||||
|
ares_strerror(status, &errmem));
|
||||||
|
ares_free_errmem(errmem);
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Initiate the queries, one per command-line argument. If there is
|
||||||
|
* only one query to do, supply NULL as the callback argument;
|
||||||
|
* otherwise, supply the query name as an argument so we can
|
||||||
|
* distinguish responses for the user when printing them out.
|
||||||
|
*/
|
||||||
|
if (argc == 1)
|
||||||
|
ares_query(channel, *argv, dnsclass, type, callback, (char *) NULL);
|
||||||
|
else
|
||||||
|
{
|
||||||
|
for (; *argv; argv++)
|
||||||
|
ares_query(channel, *argv, dnsclass, type, callback, *argv);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Wait for all queries to complete. */
|
||||||
|
while (1)
|
||||||
|
{
|
||||||
|
FD_ZERO(&read_fds);
|
||||||
|
FD_ZERO(&write_fds);
|
||||||
|
nfds = ares_fds(channel, &read_fds, &write_fds);
|
||||||
|
if (nfds == 0)
|
||||||
|
break;
|
||||||
|
tvp = ares_timeout(channel, NULL, &tv);
|
||||||
|
count = select(nfds, &read_fds, &write_fds, NULL, tvp);
|
||||||
|
if (count < 0 && errno != EINVAL)
|
||||||
|
{
|
||||||
|
perror("select");
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
ares_process(channel, &read_fds, &write_fds);
|
||||||
|
}
|
||||||
|
|
||||||
|
ares_destroy(channel);
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
static void callback(void *arg, int status, unsigned char *abuf, int alen)
|
||||||
|
{
|
||||||
|
char *name = (char *) arg, *errmem;
|
||||||
|
int id, qr, opcode, aa, tc, rd, ra, rcode, i;
|
||||||
|
unsigned int qdcount, ancount, nscount, arcount;
|
||||||
|
const unsigned char *aptr;
|
||||||
|
|
||||||
|
/* Display the query name if given. */
|
||||||
|
if (name)
|
||||||
|
printf("Answer for query %s:\n", name);
|
||||||
|
|
||||||
|
/* Display an error message if there was an error, but only stop if
|
||||||
|
* we actually didn't get an answer buffer.
|
||||||
|
*/
|
||||||
|
if (status != ARES_SUCCESS)
|
||||||
|
{
|
||||||
|
printf("%s\n", ares_strerror(status, &errmem));
|
||||||
|
ares_free_errmem(errmem);
|
||||||
|
if (!abuf)
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Won't happen, but check anyway, for safety. */
|
||||||
|
if (alen < HFIXEDSZ)
|
||||||
|
return;
|
||||||
|
|
||||||
|
/* Parse the answer header. */
|
||||||
|
id = DNS_HEADER_QID(abuf);
|
||||||
|
qr = DNS_HEADER_QR(abuf);
|
||||||
|
opcode = DNS_HEADER_OPCODE(abuf);
|
||||||
|
aa = DNS_HEADER_AA(abuf);
|
||||||
|
tc = DNS_HEADER_TC(abuf);
|
||||||
|
rd = DNS_HEADER_RD(abuf);
|
||||||
|
ra = DNS_HEADER_RA(abuf);
|
||||||
|
rcode = DNS_HEADER_RCODE(abuf);
|
||||||
|
qdcount = DNS_HEADER_QDCOUNT(abuf);
|
||||||
|
ancount = DNS_HEADER_ANCOUNT(abuf);
|
||||||
|
nscount = DNS_HEADER_NSCOUNT(abuf);
|
||||||
|
arcount = DNS_HEADER_ARCOUNT(abuf);
|
||||||
|
|
||||||
|
/* Display the answer header. */
|
||||||
|
printf("id: %d\n", id);
|
||||||
|
printf("flags: %s%s%s%s%s\n",
|
||||||
|
qr ? "qr " : "",
|
||||||
|
aa ? "aa " : "",
|
||||||
|
tc ? "tc " : "",
|
||||||
|
rd ? "rd " : "",
|
||||||
|
ra ? "ra " : "");
|
||||||
|
printf("opcode: %s\n", opcodes[opcode]);
|
||||||
|
printf("rcode: %s\n", rcodes[rcode]);
|
||||||
|
|
||||||
|
/* Display the questions. */
|
||||||
|
printf("Questions:\n");
|
||||||
|
aptr = abuf + HFIXEDSZ;
|
||||||
|
for (i = 0; i < qdcount; i++)
|
||||||
|
{
|
||||||
|
aptr = display_question(aptr, abuf, alen);
|
||||||
|
if (aptr == NULL)
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Display the answers. */
|
||||||
|
printf("Answers:\n");
|
||||||
|
for (i = 0; i < ancount; i++)
|
||||||
|
{
|
||||||
|
aptr = display_rr(aptr, abuf, alen);
|
||||||
|
if (aptr == NULL)
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Display the NS records. */
|
||||||
|
printf("NS records:\n");
|
||||||
|
for (i = 0; i < nscount; i++)
|
||||||
|
{
|
||||||
|
aptr = display_rr(aptr, abuf, alen);
|
||||||
|
if (aptr == NULL)
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Display the additional records. */
|
||||||
|
printf("Additional records:\n");
|
||||||
|
for (i = 0; i < arcount; i++)
|
||||||
|
{
|
||||||
|
aptr = display_rr(aptr, abuf, alen);
|
||||||
|
if (aptr == NULL)
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
static const unsigned char *display_question(const unsigned char *aptr,
|
||||||
|
const unsigned char *abuf,
|
||||||
|
int alen)
|
||||||
|
{
|
||||||
|
char *name;
|
||||||
|
int type, dnsclass, status, len;
|
||||||
|
|
||||||
|
/* Parse the question name. */
|
||||||
|
status = ares_expand_name(aptr, abuf, alen, &name, &len);
|
||||||
|
if (status != ARES_SUCCESS)
|
||||||
|
return NULL;
|
||||||
|
aptr += len;
|
||||||
|
|
||||||
|
/* Make sure there's enough data after the name for the fixed part
|
||||||
|
* of the question.
|
||||||
|
*/
|
||||||
|
if (aptr + QFIXEDSZ > abuf + alen)
|
||||||
|
{
|
||||||
|
free(name);
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Parse the question type and class. */
|
||||||
|
type = DNS_QUESTION_TYPE(aptr);
|
||||||
|
dnsclass = DNS_QUESTION_CLASS(aptr);
|
||||||
|
aptr += QFIXEDSZ;
|
||||||
|
|
||||||
|
/* Display the question, in a format sort of similar to how we will
|
||||||
|
* display RRs.
|
||||||
|
*/
|
||||||
|
printf("\t%-15s.\t", name);
|
||||||
|
if (dnsclass != C_IN)
|
||||||
|
printf("\t%s", class_name(dnsclass));
|
||||||
|
printf("\t%s\n", type_name(type));
|
||||||
|
free(name);
|
||||||
|
return aptr;
|
||||||
|
}
|
||||||
|
|
||||||
|
static const unsigned char *display_rr(const unsigned char *aptr,
|
||||||
|
const unsigned char *abuf, int alen)
|
||||||
|
{
|
||||||
|
const unsigned char *p;
|
||||||
|
char *name;
|
||||||
|
int type, dnsclass, ttl, dlen, status, len;
|
||||||
|
struct in_addr addr;
|
||||||
|
|
||||||
|
/* Parse the RR name. */
|
||||||
|
status = ares_expand_name(aptr, abuf, alen, &name, &len);
|
||||||
|
if (status != ARES_SUCCESS)
|
||||||
|
return NULL;
|
||||||
|
aptr += len;
|
||||||
|
|
||||||
|
/* Make sure there is enough data after the RR name for the fixed
|
||||||
|
* part of the RR.
|
||||||
|
*/
|
||||||
|
if (aptr + RRFIXEDSZ > abuf + alen)
|
||||||
|
{
|
||||||
|
free(name);
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Parse the fixed part of the RR, and advance to the RR data
|
||||||
|
* field. */
|
||||||
|
type = DNS_RR_TYPE(aptr);
|
||||||
|
dnsclass = DNS_RR_CLASS(aptr);
|
||||||
|
ttl = DNS_RR_TTL(aptr);
|
||||||
|
dlen = DNS_RR_LEN(aptr);
|
||||||
|
aptr += RRFIXEDSZ;
|
||||||
|
if (aptr + dlen > abuf + alen)
|
||||||
|
{
|
||||||
|
free(name);
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Display the RR name, class, and type. */
|
||||||
|
printf("\t%-15s.\t%d", name, ttl);
|
||||||
|
if (dnsclass != C_IN)
|
||||||
|
printf("\t%s", class_name(dnsclass));
|
||||||
|
printf("\t%s", type_name(type));
|
||||||
|
free(name);
|
||||||
|
|
||||||
|
/* Display the RR data. Don't touch aptr. */
|
||||||
|
switch (type)
|
||||||
|
{
|
||||||
|
case T_CNAME:
|
||||||
|
case T_MB:
|
||||||
|
case T_MD:
|
||||||
|
case T_MF:
|
||||||
|
case T_MG:
|
||||||
|
case T_MR:
|
||||||
|
case T_NS:
|
||||||
|
case T_PTR:
|
||||||
|
/* For these types, the RR data is just a domain name. */
|
||||||
|
status = ares_expand_name(aptr, abuf, alen, &name, &len);
|
||||||
|
if (status != ARES_SUCCESS)
|
||||||
|
return NULL;
|
||||||
|
printf("\t%s.", name);
|
||||||
|
free(name);
|
||||||
|
break;
|
||||||
|
|
||||||
|
case T_HINFO:
|
||||||
|
/* The RR data is two length-counted character strings. */
|
||||||
|
p = aptr;
|
||||||
|
len = *p;
|
||||||
|
if (p + len + 1 > aptr + dlen)
|
||||||
|
return NULL;
|
||||||
|
printf("\t%.*s", len, p + 1);
|
||||||
|
p += len + 1;
|
||||||
|
len = *p;
|
||||||
|
if (p + len + 1 > aptr + dlen)
|
||||||
|
return NULL;
|
||||||
|
printf("\t%.*s", len, p + 1);
|
||||||
|
break;
|
||||||
|
|
||||||
|
case T_MINFO:
|
||||||
|
/* The RR data is two domain names. */
|
||||||
|
p = aptr;
|
||||||
|
status = ares_expand_name(p, abuf, alen, &name, &len);
|
||||||
|
if (status != ARES_SUCCESS)
|
||||||
|
return NULL;
|
||||||
|
printf("\t%s.", name);
|
||||||
|
free(name);
|
||||||
|
p += len;
|
||||||
|
status = ares_expand_name(p, abuf, alen, &name, &len);
|
||||||
|
if (status != ARES_SUCCESS)
|
||||||
|
return NULL;
|
||||||
|
printf("\t%s.", name);
|
||||||
|
free(name);
|
||||||
|
break;
|
||||||
|
|
||||||
|
case T_MX:
|
||||||
|
/* The RR data is two bytes giving a preference ordering, and
|
||||||
|
* then a domain name.
|
||||||
|
*/
|
||||||
|
if (dlen < 2)
|
||||||
|
return NULL;
|
||||||
|
printf("\t%d", (aptr[0] << 8) | aptr[1]);
|
||||||
|
status = ares_expand_name(aptr + 2, abuf, alen, &name, &len);
|
||||||
|
if (status != ARES_SUCCESS)
|
||||||
|
return NULL;
|
||||||
|
printf("\t%s.", name);
|
||||||
|
free(name);
|
||||||
|
break;
|
||||||
|
|
||||||
|
case T_SOA:
|
||||||
|
/* The RR data is two domain names and then five four-byte
|
||||||
|
* numbers giving the serial number and some timeouts.
|
||||||
|
*/
|
||||||
|
p = aptr;
|
||||||
|
status = ares_expand_name(p, abuf, alen, &name, &len);
|
||||||
|
if (status != ARES_SUCCESS)
|
||||||
|
return NULL;
|
||||||
|
printf("\t%s.\n", name);
|
||||||
|
free(name);
|
||||||
|
p += len;
|
||||||
|
status = ares_expand_name(p, abuf, alen, &name, &len);
|
||||||
|
if (status != ARES_SUCCESS)
|
||||||
|
return NULL;
|
||||||
|
printf("\t\t\t\t\t\t%s.\n", name);
|
||||||
|
free(name);
|
||||||
|
p += len;
|
||||||
|
if (p + 20 > aptr + dlen)
|
||||||
|
return NULL;
|
||||||
|
printf("\t\t\t\t\t\t( %d %d %d %d %d )",
|
||||||
|
(p[0] << 24) | (p[1] << 16) | (p[2] << 8) | p[3],
|
||||||
|
(p[4] << 24) | (p[5] << 16) | (p[6] << 8) | p[7],
|
||||||
|
(p[8] << 24) | (p[9] << 16) | (p[10] << 8) | p[11],
|
||||||
|
(p[12] << 24) | (p[13] << 16) | (p[14] << 8) | p[15],
|
||||||
|
(p[16] << 24) | (p[17] << 16) | (p[18] << 8) | p[19]);
|
||||||
|
break;
|
||||||
|
|
||||||
|
case T_TXT:
|
||||||
|
/* The RR data is one or more length-counted character
|
||||||
|
* strings. */
|
||||||
|
p = aptr;
|
||||||
|
while (p < aptr + dlen)
|
||||||
|
{
|
||||||
|
len = *p;
|
||||||
|
if (p + len + 1 > aptr + dlen)
|
||||||
|
return NULL;
|
||||||
|
printf("\t%.*s", len, p + 1);
|
||||||
|
p += len + 1;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
|
||||||
|
case T_A:
|
||||||
|
/* The RR data is a four-byte Internet address. */
|
||||||
|
if (dlen != 4)
|
||||||
|
return NULL;
|
||||||
|
memcpy(&addr, aptr, sizeof(struct in_addr));
|
||||||
|
printf("\t%s", inet_ntoa(addr));
|
||||||
|
break;
|
||||||
|
|
||||||
|
case T_WKS:
|
||||||
|
/* Not implemented yet */
|
||||||
|
break;
|
||||||
|
|
||||||
|
case T_SRV:
|
||||||
|
/* The RR data is three two-byte numbers representing the
|
||||||
|
* priority, weight, and port, followed by a domain name.
|
||||||
|
*/
|
||||||
|
|
||||||
|
printf("\t%d", DNS__16BIT(aptr));
|
||||||
|
printf(" %d", DNS__16BIT(aptr + 2));
|
||||||
|
printf(" %d", DNS__16BIT(aptr + 4));
|
||||||
|
|
||||||
|
status = ares_expand_name(aptr + 6, abuf, alen, &name, &len);
|
||||||
|
if (status != ARES_SUCCESS)
|
||||||
|
return NULL;
|
||||||
|
printf("\t%s.", name);
|
||||||
|
free(name);
|
||||||
|
break;
|
||||||
|
|
||||||
|
default:
|
||||||
|
printf("\t[Unknown RR; cannot parse]");
|
||||||
|
}
|
||||||
|
printf("\n");
|
||||||
|
|
||||||
|
return aptr + dlen;
|
||||||
|
}
|
||||||
|
|
||||||
|
static const char *type_name(int type)
|
||||||
|
{
|
||||||
|
int i;
|
||||||
|
|
||||||
|
for (i = 0; i < ntypes; i++)
|
||||||
|
{
|
||||||
|
if (types[i].value == type)
|
||||||
|
return types[i].name;
|
||||||
|
}
|
||||||
|
return "(unknown)";
|
||||||
|
}
|
||||||
|
|
||||||
|
static const char *class_name(int dnsclass)
|
||||||
|
{
|
||||||
|
int i;
|
||||||
|
|
||||||
|
for (i = 0; i < nclasses; i++)
|
||||||
|
{
|
||||||
|
if (classes[i].value == dnsclass)
|
||||||
|
return classes[i].name;
|
||||||
|
}
|
||||||
|
return "(unknown)";
|
||||||
|
}
|
||||||
|
|
||||||
|
static void usage(void)
|
||||||
|
{
|
||||||
|
fprintf(stderr, "usage: adig [-f flag] [-s server] [-c class] "
|
||||||
|
"[-t type] [-p port] name ...\n");
|
||||||
|
exit(1);
|
||||||
|
}
|
||||||
122
ares/ahost.c
Normal file
122
ares/ahost.c
Normal file
@@ -0,0 +1,122 @@
|
|||||||
|
/* Copyright 1998 by the Massachusetts Institute of Technology.
|
||||||
|
*
|
||||||
|
* Permission to use, copy, modify, and distribute this
|
||||||
|
* software and its documentation for any purpose and without
|
||||||
|
* fee is hereby granted, provided that the above copyright
|
||||||
|
* notice appear in all copies and that both that copyright
|
||||||
|
* notice and this permission notice appear in supporting
|
||||||
|
* documentation, and that the name of M.I.T. not be used in
|
||||||
|
* advertising or publicity pertaining to distribution of the
|
||||||
|
* software without specific, written prior permission.
|
||||||
|
* M.I.T. makes no representations about the suitability of
|
||||||
|
* this software for any purpose. It is provided "as is"
|
||||||
|
* without express or implied warranty.
|
||||||
|
*/
|
||||||
|
|
||||||
|
static const char rcsid[] = "$Id$";
|
||||||
|
|
||||||
|
#include <sys/types.h>
|
||||||
|
|
||||||
|
#ifdef WIN32
|
||||||
|
#else
|
||||||
|
#include <sys/time.h>
|
||||||
|
#include <sys/socket.h>
|
||||||
|
#include <netinet/in.h>
|
||||||
|
#include <arpa/inet.h>
|
||||||
|
#include <netdb.h>
|
||||||
|
#include <unistd.h>
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#include <stdio.h>
|
||||||
|
#include <stdlib.h>
|
||||||
|
#include <string.h>
|
||||||
|
#include "ares.h"
|
||||||
|
#include "ares_dns.h"
|
||||||
|
|
||||||
|
#ifndef INADDR_NONE
|
||||||
|
#define INADDR_NONE 0xffffffff
|
||||||
|
#endif
|
||||||
|
|
||||||
|
static void callback(void *arg, int status, struct hostent *host);
|
||||||
|
static void usage(void);
|
||||||
|
|
||||||
|
int main(int argc, char **argv)
|
||||||
|
{
|
||||||
|
ares_channel channel;
|
||||||
|
int status, nfds;
|
||||||
|
fd_set read_fds, write_fds;
|
||||||
|
struct timeval *tvp, tv;
|
||||||
|
char *errmem;
|
||||||
|
struct in_addr addr;
|
||||||
|
|
||||||
|
#ifdef WIN32
|
||||||
|
WORD wVersionRequested = MAKEWORD(1,1);
|
||||||
|
WSADATA wsaData;
|
||||||
|
WSAStartup(wVersionRequested, &wsaData);
|
||||||
|
#endif
|
||||||
|
|
||||||
|
if (argc == 0)
|
||||||
|
usage();
|
||||||
|
|
||||||
|
status = ares_init(&channel);
|
||||||
|
if (status != ARES_SUCCESS)
|
||||||
|
{
|
||||||
|
fprintf(stderr, "ares_init: %s\n", ares_strerror(status, &errmem));
|
||||||
|
ares_free_errmem(errmem);
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Initiate the queries, one per command-line argument. */
|
||||||
|
for (argv++; *argv; argv++)
|
||||||
|
{
|
||||||
|
addr.s_addr = inet_addr(*argv);
|
||||||
|
if (addr.s_addr == INADDR_NONE)
|
||||||
|
ares_gethostbyname(channel, *argv, AF_INET, callback, *argv);
|
||||||
|
else
|
||||||
|
{
|
||||||
|
ares_gethostbyaddr(channel, &addr, sizeof(addr), AF_INET, callback,
|
||||||
|
*argv);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Wait for all queries to complete. */
|
||||||
|
while (1)
|
||||||
|
{
|
||||||
|
FD_ZERO(&read_fds);
|
||||||
|
FD_ZERO(&write_fds);
|
||||||
|
nfds = ares_fds(channel, &read_fds, &write_fds);
|
||||||
|
if (nfds == 0)
|
||||||
|
break;
|
||||||
|
tvp = ares_timeout(channel, NULL, &tv);
|
||||||
|
select(nfds, &read_fds, &write_fds, NULL, tvp);
|
||||||
|
ares_process(channel, &read_fds, &write_fds);
|
||||||
|
}
|
||||||
|
|
||||||
|
ares_destroy(channel);
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
static void callback(void *arg, int status, struct hostent *host)
|
||||||
|
{
|
||||||
|
struct in_addr addr;
|
||||||
|
char *mem, **p;
|
||||||
|
|
||||||
|
if (status != ARES_SUCCESS)
|
||||||
|
{
|
||||||
|
fprintf(stderr, "%s: %s\n", (char *) arg, ares_strerror(status, &mem));
|
||||||
|
ares_free_errmem(mem);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
for (p = host->h_addr_list; *p; p++)
|
||||||
|
{
|
||||||
|
memcpy(&addr, *p, sizeof(struct in_addr));
|
||||||
|
printf("%-32s\t%s\n", host->h_name, inet_ntoa(addr));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
static void usage(void)
|
||||||
|
{
|
||||||
|
fprintf(stderr, "usage: ahost {host|addr} ...\n");
|
||||||
|
exit(1);
|
||||||
|
}
|
||||||
130
ares/ares.h
Normal file
130
ares/ares.h
Normal file
@@ -0,0 +1,130 @@
|
|||||||
|
/* $Id$ */
|
||||||
|
|
||||||
|
/* Copyright 1998 by the Massachusetts Institute of Technology.
|
||||||
|
*
|
||||||
|
* Permission to use, copy, modify, and distribute this
|
||||||
|
* software and its documentation for any purpose and without
|
||||||
|
* fee is hereby granted, provided that the above copyright
|
||||||
|
* notice appear in all copies and that both that copyright
|
||||||
|
* notice and this permission notice appear in supporting
|
||||||
|
* documentation, and that the name of M.I.T. not be used in
|
||||||
|
* advertising or publicity pertaining to distribution of the
|
||||||
|
* software without specific, written prior permission.
|
||||||
|
* M.I.T. makes no representations about the suitability of
|
||||||
|
* this software for any purpose. It is provided "as is"
|
||||||
|
* without express or implied warranty.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef ARES__H
|
||||||
|
#define ARES__H
|
||||||
|
|
||||||
|
#include <sys/types.h>
|
||||||
|
|
||||||
|
#ifdef WIN32
|
||||||
|
#include <winsock.h>
|
||||||
|
#include <windows.h>
|
||||||
|
#else
|
||||||
|
#include <netinet/in.h>
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#define ARES_SUCCESS 0
|
||||||
|
|
||||||
|
/* Server error codes (ARES_ENODATA indicates no relevant answer) */
|
||||||
|
#define ARES_ENODATA 1
|
||||||
|
#define ARES_EFORMERR 2
|
||||||
|
#define ARES_ESERVFAIL 3
|
||||||
|
#define ARES_ENOTFOUND 4
|
||||||
|
#define ARES_ENOTIMP 5
|
||||||
|
#define ARES_EREFUSED 6
|
||||||
|
|
||||||
|
/* Locally generated error codes */
|
||||||
|
#define ARES_EBADQUERY 7
|
||||||
|
#define ARES_EBADNAME 8
|
||||||
|
#define ARES_EBADFAMILY 9
|
||||||
|
#define ARES_EBADRESP 10
|
||||||
|
#define ARES_ECONNREFUSED 11
|
||||||
|
#define ARES_ETIMEOUT 12
|
||||||
|
#define ARES_EOF 13
|
||||||
|
#define ARES_EFILE 14
|
||||||
|
#define ARES_ENOMEM 15
|
||||||
|
#define ARES_EDESTRUCTION 16
|
||||||
|
|
||||||
|
/* Flag values */
|
||||||
|
#define ARES_FLAG_USEVC (1 << 0)
|
||||||
|
#define ARES_FLAG_PRIMARY (1 << 1)
|
||||||
|
#define ARES_FLAG_IGNTC (1 << 2)
|
||||||
|
#define ARES_FLAG_NORECURSE (1 << 3)
|
||||||
|
#define ARES_FLAG_STAYOPEN (1 << 4)
|
||||||
|
#define ARES_FLAG_NOSEARCH (1 << 5)
|
||||||
|
#define ARES_FLAG_NOALIASES (1 << 6)
|
||||||
|
#define ARES_FLAG_NOCHECKRESP (1 << 7)
|
||||||
|
|
||||||
|
/* Option mask values */
|
||||||
|
#define ARES_OPT_FLAGS (1 << 0)
|
||||||
|
#define ARES_OPT_TIMEOUT (1 << 1)
|
||||||
|
#define ARES_OPT_TRIES (1 << 2)
|
||||||
|
#define ARES_OPT_NDOTS (1 << 3)
|
||||||
|
#define ARES_OPT_UDP_PORT (1 << 4)
|
||||||
|
#define ARES_OPT_TCP_PORT (1 << 5)
|
||||||
|
#define ARES_OPT_SERVERS (1 << 6)
|
||||||
|
#define ARES_OPT_DOMAINS (1 << 7)
|
||||||
|
#define ARES_OPT_LOOKUPS (1 << 8)
|
||||||
|
|
||||||
|
struct ares_options {
|
||||||
|
int flags;
|
||||||
|
int timeout;
|
||||||
|
int tries;
|
||||||
|
int ndots;
|
||||||
|
unsigned short udp_port;
|
||||||
|
unsigned short tcp_port;
|
||||||
|
struct in_addr *servers;
|
||||||
|
int nservers;
|
||||||
|
char **domains;
|
||||||
|
int ndomains;
|
||||||
|
char *lookups;
|
||||||
|
};
|
||||||
|
|
||||||
|
struct hostent;
|
||||||
|
struct timeval;
|
||||||
|
struct ares_channeldata;
|
||||||
|
typedef struct ares_channeldata *ares_channel;
|
||||||
|
typedef void (*ares_callback)(void *arg, int status, unsigned char *abuf,
|
||||||
|
int alen);
|
||||||
|
typedef void (*ares_host_callback)(void *arg, int status,
|
||||||
|
struct hostent *hostent);
|
||||||
|
|
||||||
|
int ares_init(ares_channel *channelptr);
|
||||||
|
int ares_init_options(ares_channel *channelptr, struct ares_options *options,
|
||||||
|
int optmask);
|
||||||
|
void ares_destroy(ares_channel channel);
|
||||||
|
|
||||||
|
void ares_send(ares_channel channel, const unsigned char *qbuf, int qlen,
|
||||||
|
ares_callback callback, void *arg);
|
||||||
|
void ares_query(ares_channel channel, const char *name, int dnsclass,
|
||||||
|
int type, ares_callback callback, void *arg);
|
||||||
|
void ares_search(ares_channel channel, const char *name, int dnsclass,
|
||||||
|
int type, ares_callback callback, void *arg);
|
||||||
|
void ares_gethostbyname(ares_channel channel, const char *name, int family,
|
||||||
|
ares_host_callback callback, void *arg);
|
||||||
|
void ares_gethostbyaddr(ares_channel channel, const void *addr, int addrlen,
|
||||||
|
int family, ares_host_callback callback, void *arg);
|
||||||
|
|
||||||
|
int ares_fds(ares_channel channel, fd_set *read_fds, fd_set *write_fds);
|
||||||
|
struct timeval *ares_timeout(ares_channel channel, struct timeval *maxtv,
|
||||||
|
struct timeval *tv);
|
||||||
|
void ares_process(ares_channel channel, fd_set *read_fds, fd_set *write_fds);
|
||||||
|
|
||||||
|
int ares_mkquery(const char *name, int dnsclass, int type, unsigned short id,
|
||||||
|
int rd, unsigned char **buf, int *buflen);
|
||||||
|
int ares_expand_name(const unsigned char *encoded, const unsigned char *abuf,
|
||||||
|
int alen, char **s, int *enclen);
|
||||||
|
int ares_parse_a_reply(const unsigned char *abuf, int alen,
|
||||||
|
struct hostent **host);
|
||||||
|
int ares_parse_ptr_reply(const unsigned char *abuf, int alen, const void *addr,
|
||||||
|
int addrlen, int family, struct hostent **host);
|
||||||
|
void ares_free_string(char *str);
|
||||||
|
void ares_free_hostent(struct hostent *host);
|
||||||
|
const char *ares_strerror(int code, char **memptr);
|
||||||
|
void ares_free_errmem(char *mem);
|
||||||
|
|
||||||
|
#endif /* ARES__H */
|
||||||
57
ares/ares__close_sockets.c
Normal file
57
ares/ares__close_sockets.c
Normal file
@@ -0,0 +1,57 @@
|
|||||||
|
/* Copyright 1998 by the Massachusetts Institute of Technology.
|
||||||
|
*
|
||||||
|
* Permission to use, copy, modify, and distribute this
|
||||||
|
* software and its documentation for any purpose and without
|
||||||
|
* fee is hereby granted, provided that the above copyright
|
||||||
|
* notice appear in all copies and that both that copyright
|
||||||
|
* notice and this permission notice appear in supporting
|
||||||
|
* documentation, and that the name of M.I.T. not be used in
|
||||||
|
* advertising or publicity pertaining to distribution of the
|
||||||
|
* software without specific, written prior permission.
|
||||||
|
* M.I.T. makes no representations about the suitability of
|
||||||
|
* this software for any purpose. It is provided "as is"
|
||||||
|
* without express or implied warranty.
|
||||||
|
*/
|
||||||
|
|
||||||
|
static const char rcsid[] = "$Id$";
|
||||||
|
|
||||||
|
#include <stdlib.h>
|
||||||
|
#ifdef WIN32
|
||||||
|
#else
|
||||||
|
#include <unistd.h>
|
||||||
|
#endif
|
||||||
|
#include "ares.h"
|
||||||
|
#include "ares_private.h"
|
||||||
|
|
||||||
|
void ares__close_sockets(struct server_state *server)
|
||||||
|
{
|
||||||
|
struct send_request *sendreq;
|
||||||
|
|
||||||
|
/* Free all pending output buffers. */
|
||||||
|
while (server->qhead)
|
||||||
|
{
|
||||||
|
/* Advance server->qhead; pull out query as we go. */
|
||||||
|
sendreq = server->qhead;
|
||||||
|
server->qhead = sendreq->next;
|
||||||
|
free(sendreq);
|
||||||
|
}
|
||||||
|
server->qtail = NULL;
|
||||||
|
|
||||||
|
/* Reset any existing input buffer. */
|
||||||
|
if (server->tcp_buffer)
|
||||||
|
free(server->tcp_buffer);
|
||||||
|
server->tcp_buffer = NULL;
|
||||||
|
server->tcp_lenbuf_pos = 0;
|
||||||
|
|
||||||
|
/* Close the TCP and UDP sockets. */
|
||||||
|
if (server->tcp_socket != -1)
|
||||||
|
{
|
||||||
|
closesocket(server->tcp_socket);
|
||||||
|
server->tcp_socket = -1;
|
||||||
|
}
|
||||||
|
if (server->udp_socket != -1)
|
||||||
|
{
|
||||||
|
closesocket(server->udp_socket);
|
||||||
|
server->udp_socket = -1;
|
||||||
|
}
|
||||||
|
}
|
||||||
171
ares/ares__get_hostent.c
Normal file
171
ares/ares__get_hostent.c
Normal file
@@ -0,0 +1,171 @@
|
|||||||
|
/* Copyright 1998 by the Massachusetts Institute of Technology.
|
||||||
|
*
|
||||||
|
* Permission to use, copy, modify, and distribute this
|
||||||
|
* software and its documentation for any purpose and without
|
||||||
|
* fee is hereby granted, provided that the above copyright
|
||||||
|
* notice appear in all copies and that both that copyright
|
||||||
|
* notice and this permission notice appear in supporting
|
||||||
|
* documentation, and that the name of M.I.T. not be used in
|
||||||
|
* advertising or publicity pertaining to distribution of the
|
||||||
|
* software without specific, written prior permission.
|
||||||
|
* M.I.T. makes no representations about the suitability of
|
||||||
|
* this software for any purpose. It is provided "as is"
|
||||||
|
* without express or implied warranty.
|
||||||
|
*/
|
||||||
|
|
||||||
|
static const char rcsid[] = "$Id$";
|
||||||
|
|
||||||
|
#include <sys/types.h>
|
||||||
|
|
||||||
|
#ifdef WIN32
|
||||||
|
|
||||||
|
#else
|
||||||
|
#include <sys/socket.h>
|
||||||
|
#include <netinet/in.h>
|
||||||
|
#include <arpa/inet.h>
|
||||||
|
#include <netdb.h>
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#include <stdio.h>
|
||||||
|
#include <stdlib.h>
|
||||||
|
#include <string.h>
|
||||||
|
#include <ctype.h>
|
||||||
|
|
||||||
|
#include "ares.h"
|
||||||
|
#include "ares_private.h"
|
||||||
|
|
||||||
|
int ares__get_hostent(FILE *fp, struct hostent **host)
|
||||||
|
{
|
||||||
|
char *line = NULL, *p, *q, *canonical, **alias;
|
||||||
|
int status, linesize, end_at_hostname, naliases;
|
||||||
|
struct in_addr addr;
|
||||||
|
struct hostent *hostent = NULL;
|
||||||
|
|
||||||
|
while ((status = ares__read_line(fp, &line, &linesize)) == ARES_SUCCESS)
|
||||||
|
{
|
||||||
|
/* Skip comment lines; terminate line at comment character. */
|
||||||
|
if (*line == '#' || !*line)
|
||||||
|
continue;
|
||||||
|
p = strchr(line, '#');
|
||||||
|
if (p)
|
||||||
|
*p = 0;
|
||||||
|
|
||||||
|
/* Get the address part. */
|
||||||
|
p = line;
|
||||||
|
while (*p && !isspace((unsigned char)*p))
|
||||||
|
p++;
|
||||||
|
if (!*p)
|
||||||
|
continue;
|
||||||
|
*p = 0;
|
||||||
|
addr.s_addr = inet_addr(line);
|
||||||
|
if (addr.s_addr == INADDR_NONE)
|
||||||
|
continue;
|
||||||
|
|
||||||
|
/* Get the canonical hostname. */
|
||||||
|
p++;
|
||||||
|
while (isspace((unsigned char)*p))
|
||||||
|
p++;
|
||||||
|
if (!*p)
|
||||||
|
continue;
|
||||||
|
q = p;
|
||||||
|
while (*q && !isspace((unsigned char)*q))
|
||||||
|
q++;
|
||||||
|
end_at_hostname = (*q == 0);
|
||||||
|
*q = 0;
|
||||||
|
canonical = p;
|
||||||
|
|
||||||
|
naliases = 0;
|
||||||
|
if (!end_at_hostname)
|
||||||
|
{
|
||||||
|
/* Count the aliases. */
|
||||||
|
p = q + 1;
|
||||||
|
while (isspace((unsigned char)*p))
|
||||||
|
p++;
|
||||||
|
while (*p)
|
||||||
|
{
|
||||||
|
while (*p && !isspace((unsigned char)*p))
|
||||||
|
p++;
|
||||||
|
while (isspace((unsigned char)*p))
|
||||||
|
p++;
|
||||||
|
naliases++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Allocate memory for the host structure. */
|
||||||
|
hostent = malloc(sizeof(struct hostent));
|
||||||
|
if (!hostent)
|
||||||
|
break;
|
||||||
|
hostent->h_aliases = NULL;
|
||||||
|
hostent->h_addr_list = NULL;
|
||||||
|
hostent->h_name = strdup(canonical);
|
||||||
|
if (!hostent->h_name)
|
||||||
|
break;
|
||||||
|
hostent->h_addr_list = malloc(2 * sizeof(char *));
|
||||||
|
if (!hostent->h_addr_list)
|
||||||
|
break;
|
||||||
|
hostent->h_addr_list[0] = malloc(sizeof(struct in_addr));
|
||||||
|
if (!hostent->h_addr_list[0])
|
||||||
|
break;
|
||||||
|
hostent->h_aliases = malloc((naliases + 1) * sizeof(char *));
|
||||||
|
if (!hostent->h_aliases)
|
||||||
|
break;
|
||||||
|
|
||||||
|
/* Copy in aliases. */
|
||||||
|
naliases = 0;
|
||||||
|
if (!end_at_hostname)
|
||||||
|
{
|
||||||
|
p = canonical + strlen(canonical) + 1;
|
||||||
|
while (isspace((unsigned char)*p))
|
||||||
|
p++;
|
||||||
|
while (*p)
|
||||||
|
{
|
||||||
|
q = p;
|
||||||
|
while (*q && !isspace((unsigned char)*q))
|
||||||
|
q++;
|
||||||
|
hostent->h_aliases[naliases] = malloc(q - p + 1);
|
||||||
|
if (hostent->h_aliases[naliases] == NULL)
|
||||||
|
break;
|
||||||
|
memcpy(hostent->h_aliases[naliases], p, q - p);
|
||||||
|
hostent->h_aliases[naliases][q - p] = 0;
|
||||||
|
p = q;
|
||||||
|
while (isspace((unsigned char)*p))
|
||||||
|
p++;
|
||||||
|
naliases++;
|
||||||
|
}
|
||||||
|
if (*p)
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
hostent->h_aliases[naliases] = NULL;
|
||||||
|
|
||||||
|
hostent->h_addrtype = AF_INET;
|
||||||
|
hostent->h_length = sizeof(struct in_addr);
|
||||||
|
memcpy(hostent->h_addr_list[0], &addr, sizeof(struct in_addr));
|
||||||
|
hostent->h_addr_list[1] = NULL;
|
||||||
|
*host = hostent;
|
||||||
|
free(line);
|
||||||
|
return ARES_SUCCESS;
|
||||||
|
}
|
||||||
|
free(line);
|
||||||
|
|
||||||
|
if (status == ARES_SUCCESS)
|
||||||
|
{
|
||||||
|
/* Memory allocation failure; clean up. */
|
||||||
|
if (hostent)
|
||||||
|
{
|
||||||
|
free((char *) hostent->h_name);
|
||||||
|
if (hostent->h_aliases)
|
||||||
|
{
|
||||||
|
for (alias = hostent->h_aliases; *alias; alias++)
|
||||||
|
free(*alias);
|
||||||
|
}
|
||||||
|
free(hostent->h_aliases);
|
||||||
|
if (hostent->h_addr_list)
|
||||||
|
free(hostent->h_addr_list[0]);
|
||||||
|
free(hostent->h_addr_list);
|
||||||
|
}
|
||||||
|
free(hostent);
|
||||||
|
return ARES_ENOMEM;
|
||||||
|
}
|
||||||
|
|
||||||
|
return status;
|
||||||
|
}
|
||||||
64
ares/ares__read_line.c
Normal file
64
ares/ares__read_line.c
Normal file
@@ -0,0 +1,64 @@
|
|||||||
|
/* Copyright 1998 by the Massachusetts Institute of Technology.
|
||||||
|
*
|
||||||
|
* Permission to use, copy, modify, and distribute this
|
||||||
|
* software and its documentation for any purpose and without
|
||||||
|
* fee is hereby granted, provided that the above copyright
|
||||||
|
* notice appear in all copies and that both that copyright
|
||||||
|
* notice and this permission notice appear in supporting
|
||||||
|
* documentation, and that the name of M.I.T. not be used in
|
||||||
|
* advertising or publicity pertaining to distribution of the
|
||||||
|
* software without specific, written prior permission.
|
||||||
|
* M.I.T. makes no representations about the suitability of
|
||||||
|
* this software for any purpose. It is provided "as is"
|
||||||
|
* without express or implied warranty.
|
||||||
|
*/
|
||||||
|
|
||||||
|
static const char rcsid[] = "$Id$";
|
||||||
|
|
||||||
|
#include <stdio.h>
|
||||||
|
#include <stdlib.h>
|
||||||
|
#include <string.h>
|
||||||
|
#include "ares.h"
|
||||||
|
#include "ares_private.h"
|
||||||
|
|
||||||
|
/* This is an internal function. Its contract is to read a line from
|
||||||
|
* a file into a dynamically allocated buffer, zeroing the trailing
|
||||||
|
* newline if there is one. The calling routine may call
|
||||||
|
* ares__read_line multiple times with the same buf and bufsize
|
||||||
|
* pointers; *buf will be reallocated and *bufsize adjusted as
|
||||||
|
* appropriate. The initial value of *buf should be NULL. After the
|
||||||
|
* calling routine is done reading lines, it should free *buf.
|
||||||
|
*/
|
||||||
|
int ares__read_line(FILE *fp, char **buf, int *bufsize)
|
||||||
|
{
|
||||||
|
char *newbuf;
|
||||||
|
int offset = 0, len;
|
||||||
|
|
||||||
|
if (*buf == NULL)
|
||||||
|
{
|
||||||
|
*buf = malloc(128);
|
||||||
|
if (!*buf)
|
||||||
|
return ARES_ENOMEM;
|
||||||
|
*bufsize = 128;
|
||||||
|
}
|
||||||
|
|
||||||
|
while (1)
|
||||||
|
{
|
||||||
|
if (!fgets(*buf + offset, *bufsize - offset, fp))
|
||||||
|
return (offset != 0) ? 0 : (ferror(fp)) ? ARES_EFILE : ARES_EOF;
|
||||||
|
len = offset + strlen(*buf + offset);
|
||||||
|
if ((*buf)[len - 1] == '\n')
|
||||||
|
{
|
||||||
|
(*buf)[len - 1] = 0;
|
||||||
|
return ARES_SUCCESS;
|
||||||
|
}
|
||||||
|
offset = len;
|
||||||
|
|
||||||
|
/* Allocate more space. */
|
||||||
|
newbuf = realloc(*buf, *bufsize * 2);
|
||||||
|
if (!newbuf)
|
||||||
|
return ARES_ENOMEM;
|
||||||
|
*buf = newbuf;
|
||||||
|
*bufsize *= 2;
|
||||||
|
}
|
||||||
|
}
|
||||||
43
ares/ares_destroy.3
Normal file
43
ares/ares_destroy.3
Normal file
@@ -0,0 +1,43 @@
|
|||||||
|
.\" $Id$
|
||||||
|
.\"
|
||||||
|
.\" Copyright 1998 by the Massachusetts Institute of Technology.
|
||||||
|
.\"
|
||||||
|
.\" Permission to use, copy, modify, and distribute this
|
||||||
|
.\" software and its documentation for any purpose and without
|
||||||
|
.\" fee is hereby granted, provided that the above copyright
|
||||||
|
.\" notice appear in all copies and that both that copyright
|
||||||
|
.\" notice and this permission notice appear in supporting
|
||||||
|
.\" documentation, and that the name of M.I.T. not be used in
|
||||||
|
.\" advertising or publicity pertaining to distribution of the
|
||||||
|
.\" software without specific, written prior permission.
|
||||||
|
.\" M.I.T. makes no representations about the suitability of
|
||||||
|
.\" this software for any purpose. It is provided "as is"
|
||||||
|
.\" without express or implied warranty.
|
||||||
|
.\"
|
||||||
|
.TH ARES_DESTROY 3 "23 July 1998"
|
||||||
|
.SH NAME
|
||||||
|
ares_destroy \- Destroy a resolver channel
|
||||||
|
.SH SYNOPSIS
|
||||||
|
.nf
|
||||||
|
.B #include <ares.h>
|
||||||
|
.PP
|
||||||
|
.B int ares_destroy(ares_channel \fIchannel\fP)
|
||||||
|
.fi
|
||||||
|
.SH DESCRIPTION
|
||||||
|
The
|
||||||
|
.B ares_destroy
|
||||||
|
function destroys the name service channel identified by
|
||||||
|
.IR channel ,
|
||||||
|
freeing all memory and closing all sockets used by the channel.
|
||||||
|
.B ares_destroy
|
||||||
|
invokes the callbacks for each pending query on the channel, passing a
|
||||||
|
status of
|
||||||
|
.BR ARES_EDESTRUCTION .
|
||||||
|
These calls give the callbacks a chance to clean up any state which
|
||||||
|
might have been stored in their arguments.
|
||||||
|
.SH SEE ALSO
|
||||||
|
.BR ares_init (3)
|
||||||
|
.SH AUTHOR
|
||||||
|
Greg Hudson, MIT Information Systems
|
||||||
|
.br
|
||||||
|
Copyright 1998 by the Massachusetts Institute of Technology.
|
||||||
45
ares/ares_destroy.c
Normal file
45
ares/ares_destroy.c
Normal file
@@ -0,0 +1,45 @@
|
|||||||
|
/* Copyright 1998 by the Massachusetts Institute of Technology.
|
||||||
|
*
|
||||||
|
* Permission to use, copy, modify, and distribute this
|
||||||
|
* software and its documentation for any purpose and without
|
||||||
|
* fee is hereby granted, provided that the above copyright
|
||||||
|
* notice appear in all copies and that both that copyright
|
||||||
|
* notice and this permission notice appear in supporting
|
||||||
|
* documentation, and that the name of M.I.T. not be used in
|
||||||
|
* advertising or publicity pertaining to distribution of the
|
||||||
|
* software without specific, written prior permission.
|
||||||
|
* M.I.T. makes no representations about the suitability of
|
||||||
|
* this software for any purpose. It is provided "as is"
|
||||||
|
* without express or implied warranty.
|
||||||
|
*/
|
||||||
|
|
||||||
|
static const char rcsid[] = "$Id$";
|
||||||
|
|
||||||
|
#include <stdlib.h>
|
||||||
|
#include "ares.h"
|
||||||
|
#include "ares_private.h"
|
||||||
|
|
||||||
|
void ares_destroy(ares_channel channel)
|
||||||
|
{
|
||||||
|
int i;
|
||||||
|
struct query *query;
|
||||||
|
|
||||||
|
for (i = 0; i < channel->nservers; i++)
|
||||||
|
ares__close_sockets(&channel->servers[i]);
|
||||||
|
free(channel->servers);
|
||||||
|
for (i = 0; i < channel->ndomains; i++)
|
||||||
|
free(channel->domains[i]);
|
||||||
|
free(channel->domains);
|
||||||
|
free(channel->sortlist);
|
||||||
|
free(channel->lookups);
|
||||||
|
while (channel->queries)
|
||||||
|
{
|
||||||
|
query = channel->queries;
|
||||||
|
channel->queries = query->next;
|
||||||
|
query->callback(query->arg, ARES_EDESTRUCTION, NULL, 0);
|
||||||
|
free(query->tcpbuf);
|
||||||
|
free(query->skip_server);
|
||||||
|
free(query);
|
||||||
|
}
|
||||||
|
free(channel);
|
||||||
|
}
|
||||||
81
ares/ares_dns.h
Normal file
81
ares/ares_dns.h
Normal file
@@ -0,0 +1,81 @@
|
|||||||
|
/* $Id$ */
|
||||||
|
|
||||||
|
/* Copyright 1998 by the Massachusetts Institute of Technology.
|
||||||
|
*
|
||||||
|
* Permission to use, copy, modify, and distribute this
|
||||||
|
* software and its documentation for any purpose and without
|
||||||
|
* fee is hereby granted, provided that the above copyright
|
||||||
|
* notice appear in all copies and that both that copyright
|
||||||
|
* notice and this permission notice appear in supporting
|
||||||
|
* documentation, and that the name of M.I.T. not be used in
|
||||||
|
* advertising or publicity pertaining to distribution of the
|
||||||
|
* software without specific, written prior permission.
|
||||||
|
* M.I.T. makes no representations about the suitability of
|
||||||
|
* this software for any purpose. It is provided "as is"
|
||||||
|
* without express or implied warranty.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef ARES__DNS_H
|
||||||
|
#define ARES__DNS_H
|
||||||
|
|
||||||
|
#define DNS__16BIT(p) (((p)[0] << 8) | (p)[1])
|
||||||
|
#define DNS__32BIT(p) (((p)[0] << 24) | ((p)[1] << 16) | \
|
||||||
|
((p)[2] << 8) | (p)[3])
|
||||||
|
#define DNS__SET16BIT(p, v) (((p)[0] = ((v) >> 8) & 0xff), \
|
||||||
|
((p)[1] = (v) & 0xff))
|
||||||
|
#define DNS__SET32BIT(p, v) (((p)[0] = ((v) >> 24) & 0xff), \
|
||||||
|
((p)[1] = ((v) >> 16) & 0xff), \
|
||||||
|
((p)[2] = ((v) >> 8) & 0xff), \
|
||||||
|
((p)[3] = (v) & 0xff))
|
||||||
|
|
||||||
|
/* Macros for parsing a DNS header */
|
||||||
|
#define DNS_HEADER_QID(h) DNS__16BIT(h)
|
||||||
|
#define DNS_HEADER_QR(h) (((h)[2] >> 7) & 0x1)
|
||||||
|
#define DNS_HEADER_OPCODE(h) (((h)[2] >> 3) & 0xf)
|
||||||
|
#define DNS_HEADER_AA(h) (((h)[2] >> 2) & 0x1)
|
||||||
|
#define DNS_HEADER_TC(h) (((h)[2] >> 1) & 0x1)
|
||||||
|
#define DNS_HEADER_RD(h) ((h)[2] & 0x1)
|
||||||
|
#define DNS_HEADER_RA(h) (((h)[3] >> 7) & 0x1)
|
||||||
|
#define DNS_HEADER_Z(h) (((h)[3] >> 4) & 0x7)
|
||||||
|
#define DNS_HEADER_RCODE(h) ((h)[3] & 0xf)
|
||||||
|
#define DNS_HEADER_QDCOUNT(h) DNS__16BIT((h) + 4)
|
||||||
|
#define DNS_HEADER_ANCOUNT(h) DNS__16BIT((h) + 6)
|
||||||
|
#define DNS_HEADER_NSCOUNT(h) DNS__16BIT((h) + 8)
|
||||||
|
#define DNS_HEADER_ARCOUNT(h) DNS__16BIT((h) + 10)
|
||||||
|
|
||||||
|
/* Macros for constructing a DNS header */
|
||||||
|
#define DNS_HEADER_SET_QID(h, v) DNS__SET16BIT(h, v)
|
||||||
|
#define DNS_HEADER_SET_QR(h, v) ((h)[2] |= (((v) & 0x1) << 7))
|
||||||
|
#define DNS_HEADER_SET_OPCODE(h, v) ((h)[2] |= (((v) & 0xf) << 3))
|
||||||
|
#define DNS_HEADER_SET_AA(h, v) ((h)[2] |= (((v) & 0x1) << 2))
|
||||||
|
#define DNS_HEADER_SET_TC(h, v) ((h)[2] |= (((v) & 0x1) << 1))
|
||||||
|
#define DNS_HEADER_SET_RD(h, v) ((h)[2] |= (((v) & 0x1)))
|
||||||
|
#define DNS_HEADER_SET_RA(h, v) ((h)[3] |= (((v) & 0x1) << 7))
|
||||||
|
#define DNS_HEADER_SET_Z(h, v) ((h)[3] |= (((v) & 0x7) << 4))
|
||||||
|
#define DNS_HEADER_SET_RCODE(h, v) ((h)[3] |= (((v) & 0xf)))
|
||||||
|
#define DNS_HEADER_SET_QDCOUNT(h, v) DNS__SET16BIT((h) + 4, v)
|
||||||
|
#define DNS_HEADER_SET_ANCOUNT(h, v) DNS__SET16BIT((h) + 6, v)
|
||||||
|
#define DNS_HEADER_SET_NSCOUNT(h, v) DNS__SET16BIT((h) + 8, v)
|
||||||
|
#define DNS_HEADER_SET_ARCOUNT(h, v) DNS__SET16BIT((h) + 10, v)
|
||||||
|
|
||||||
|
/* Macros for parsing the fixed part of a DNS question */
|
||||||
|
#define DNS_QUESTION_TYPE(q) DNS__16BIT(q)
|
||||||
|
#define DNS_QUESTION_CLASS(q) DNS__16BIT((q) + 2)
|
||||||
|
|
||||||
|
/* Macros for constructing the fixed part of a DNS question */
|
||||||
|
#define DNS_QUESTION_SET_TYPE(q, v) DNS__SET16BIT(q, v)
|
||||||
|
#define DNS_QUESTION_SET_CLASS(q, v) DNS__SET16BIT((q) + 2, v)
|
||||||
|
|
||||||
|
/* Macros for parsing the fixed part of a DNS resource record */
|
||||||
|
#define DNS_RR_TYPE(r) DNS__16BIT(r)
|
||||||
|
#define DNS_RR_CLASS(r) DNS__16BIT((r) + 2)
|
||||||
|
#define DNS_RR_TTL(r) DNS__32BIT((r) + 4)
|
||||||
|
#define DNS_RR_LEN(r) DNS__16BIT((r) + 8)
|
||||||
|
|
||||||
|
/* Macros for constructing the fixed part of a DNS resource record */
|
||||||
|
#define DNS_RR_SET_TYPE(r) DNS__SET16BIT(r, v)
|
||||||
|
#define DNS_RR_SET_CLASS(r) DNS__SET16BIT((r) + 2, v)
|
||||||
|
#define DNS_RR_SET_TTL(r) DNS__SET32BIT((r) + 4, v)
|
||||||
|
#define DNS_RR_SET_LEN(r) DNS__SET16BIT((r) + 8, v)
|
||||||
|
|
||||||
|
#endif /* ARES__DNS_H */
|
||||||
65
ares/ares_expand_name.3
Normal file
65
ares/ares_expand_name.3
Normal file
@@ -0,0 +1,65 @@
|
|||||||
|
.\" $Id$
|
||||||
|
.\"
|
||||||
|
.\" Copyright 1998 by the Massachusetts Institute of Technology.
|
||||||
|
.\"
|
||||||
|
.\" Permission to use, copy, modify, and distribute this
|
||||||
|
.\" software and its documentation for any purpose and without
|
||||||
|
.\" fee is hereby granted, provided that the above copyright
|
||||||
|
.\" notice appear in all copies and that both that copyright
|
||||||
|
.\" notice and this permission notice appear in supporting
|
||||||
|
.\" documentation, and that the name of M.I.T. not be used in
|
||||||
|
.\" advertising or publicity pertaining to distribution of the
|
||||||
|
.\" software without specific, written prior permission.
|
||||||
|
.\" M.I.T. makes no representations about the suitability of
|
||||||
|
.\" this software for any purpose. It is provided "as is"
|
||||||
|
.\" without express or implied warranty.
|
||||||
|
.\"
|
||||||
|
.TH ARES_EXPAND_NAME 3 "23 July 1998"
|
||||||
|
.SH NAME
|
||||||
|
ares_expand_name \- Expand a DNS-encoded domain name
|
||||||
|
.SH SYNOPSIS
|
||||||
|
.nf
|
||||||
|
.B #include <ares.h>
|
||||||
|
.PP
|
||||||
|
.B int ares_expand_name(const unsigned char *\fIencoded\fP,
|
||||||
|
.B
|
||||||
|
const unsigned char *\fIabuf\fP, int \fIalen\fP, char **\fIs\fP,
|
||||||
|
.B int *\fIenclen\fP)
|
||||||
|
.fi
|
||||||
|
.SH DESCRIPTION
|
||||||
|
The
|
||||||
|
.B ares_expand_name
|
||||||
|
function converts a DNS-encoded domain name to a dot-separated C
|
||||||
|
string. The argument
|
||||||
|
.I encoded
|
||||||
|
gives the beginning of the encoded domain name, and the arguments
|
||||||
|
.I abuf
|
||||||
|
and
|
||||||
|
.I alen
|
||||||
|
give the containing message buffer (necessary for the processing of
|
||||||
|
indirection pointers within the encoded domain name). The result is
|
||||||
|
placed in a NUL-terminated allocated buffer, a pointer to which is
|
||||||
|
stored in the variable pointed to by
|
||||||
|
.IR s .
|
||||||
|
The length of the encoded name is stored in the variable pointed to by
|
||||||
|
.I enclen
|
||||||
|
so that the caller can advance past the encoded domain name to read
|
||||||
|
further data in the message.
|
||||||
|
.SH RETURN VALUES
|
||||||
|
.B ares_expand_name
|
||||||
|
can return any of the following values:
|
||||||
|
.TP 15
|
||||||
|
.B ARES_SUCCESS
|
||||||
|
Expansion of the encoded name succeeded.
|
||||||
|
.TP 15
|
||||||
|
.B ARES_EBADNAME
|
||||||
|
The encoded domain name was malformed and could not be expanded.
|
||||||
|
.TP 15
|
||||||
|
.B ARES_ENOMEM
|
||||||
|
Memory was exhausted.
|
||||||
|
.SH SEE ALSO
|
||||||
|
.BR ares_mkquery (3)
|
||||||
|
.SH AUTHOR
|
||||||
|
Greg Hudson, MIT Information Systems
|
||||||
|
.br
|
||||||
|
Copyright 1998 by the Massachusetts Institute of Technology.
|
||||||
159
ares/ares_expand_name.c
Normal file
159
ares/ares_expand_name.c
Normal file
@@ -0,0 +1,159 @@
|
|||||||
|
/* Copyright 1998 by the Massachusetts Institute of Technology.
|
||||||
|
*
|
||||||
|
* Permission to use, copy, modify, and distribute this
|
||||||
|
* software and its documentation for any purpose and without
|
||||||
|
* fee is hereby granted, provided that the above copyright
|
||||||
|
* notice appear in all copies and that both that copyright
|
||||||
|
* notice and this permission notice appear in supporting
|
||||||
|
* documentation, and that the name of M.I.T. not be used in
|
||||||
|
* advertising or publicity pertaining to distribution of the
|
||||||
|
* software without specific, written prior permission.
|
||||||
|
* M.I.T. makes no representations about the suitability of
|
||||||
|
* this software for any purpose. It is provided "as is"
|
||||||
|
* without express or implied warranty.
|
||||||
|
*/
|
||||||
|
|
||||||
|
static const char rcsid[] = "$Id$";
|
||||||
|
|
||||||
|
#include <sys/types.h>
|
||||||
|
|
||||||
|
#ifdef WIN32
|
||||||
|
#include "nameser.h"
|
||||||
|
#else
|
||||||
|
#include <netinet/in.h>
|
||||||
|
#include <arpa/nameser.h>
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#include <stdlib.h>
|
||||||
|
#include "ares.h"
|
||||||
|
|
||||||
|
static int name_length(const unsigned char *encoded, const unsigned char *abuf,
|
||||||
|
int alen);
|
||||||
|
|
||||||
|
/* Expand an RFC1035-encoded domain name given by encoded. The
|
||||||
|
* containing message is given by abuf and alen. The result given by
|
||||||
|
* *s, which is set to a NUL-terminated allocated buffer. *enclen is
|
||||||
|
* set to the length of the encoded name (not the length of the
|
||||||
|
* expanded name; the goal is to tell the caller how many bytes to
|
||||||
|
* move forward to get past the encoded name).
|
||||||
|
*
|
||||||
|
* In the simple case, an encoded name is a series of labels, each
|
||||||
|
* composed of a one-byte length (limited to values between 0 and 63
|
||||||
|
* inclusive) followed by the label contents. The name is terminated
|
||||||
|
* by a zero-length label.
|
||||||
|
*
|
||||||
|
* In the more complicated case, a label may be terminated by an
|
||||||
|
* indirection pointer, specified by two bytes with the high bits of
|
||||||
|
* the first byte (corresponding to INDIR_MASK) set to 11. With the
|
||||||
|
* two high bits of the first byte stripped off, the indirection
|
||||||
|
* pointer gives an offset from the beginning of the containing
|
||||||
|
* message with more labels to decode. Indirection can happen an
|
||||||
|
* arbitrary number of times, so we have to detect loops.
|
||||||
|
*
|
||||||
|
* Since the expanded name uses '.' as a label separator, we use
|
||||||
|
* backslashes to escape periods or backslashes in the expanded name.
|
||||||
|
*/
|
||||||
|
|
||||||
|
int ares_expand_name(const unsigned char *encoded, const unsigned char *abuf,
|
||||||
|
int alen, char **s, int *enclen)
|
||||||
|
{
|
||||||
|
int len, indir = 0;
|
||||||
|
char *q;
|
||||||
|
const unsigned char *p;
|
||||||
|
|
||||||
|
len = name_length(encoded, abuf, alen);
|
||||||
|
if (len == -1)
|
||||||
|
return ARES_EBADNAME;
|
||||||
|
|
||||||
|
*s = malloc(len + 1);
|
||||||
|
if (!*s)
|
||||||
|
return ARES_ENOMEM;
|
||||||
|
q = *s;
|
||||||
|
|
||||||
|
/* No error-checking necessary; it was all done by name_length(). */
|
||||||
|
p = encoded;
|
||||||
|
while (*p)
|
||||||
|
{
|
||||||
|
if ((*p & INDIR_MASK) == INDIR_MASK)
|
||||||
|
{
|
||||||
|
if (!indir)
|
||||||
|
{
|
||||||
|
*enclen = p + 2 - encoded;
|
||||||
|
indir = 1;
|
||||||
|
}
|
||||||
|
p = abuf + ((*p & ~INDIR_MASK) << 8 | *(p + 1));
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
len = *p;
|
||||||
|
p++;
|
||||||
|
while (len--)
|
||||||
|
{
|
||||||
|
if (*p == '.' || *p == '\\')
|
||||||
|
*q++ = '\\';
|
||||||
|
*q++ = *p;
|
||||||
|
p++;
|
||||||
|
}
|
||||||
|
*q++ = '.';
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (!indir)
|
||||||
|
*enclen = p + 1 - encoded;
|
||||||
|
|
||||||
|
/* Nuke the trailing period if we wrote one. */
|
||||||
|
if (q > *s)
|
||||||
|
*(q - 1) = 0;
|
||||||
|
|
||||||
|
return ARES_SUCCESS;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Return the length of the expansion of an encoded domain name, or
|
||||||
|
* -1 if the encoding is invalid.
|
||||||
|
*/
|
||||||
|
static int name_length(const unsigned char *encoded, const unsigned char *abuf,
|
||||||
|
int alen)
|
||||||
|
{
|
||||||
|
int n = 0, offset, indir = 0;
|
||||||
|
|
||||||
|
/* Allow the caller to pass us abuf + alen and have us check for it. */
|
||||||
|
if (encoded == abuf + alen)
|
||||||
|
return -1;
|
||||||
|
|
||||||
|
while (*encoded)
|
||||||
|
{
|
||||||
|
if ((*encoded & INDIR_MASK) == INDIR_MASK)
|
||||||
|
{
|
||||||
|
/* Check the offset and go there. */
|
||||||
|
if (encoded + 1 >= abuf + alen)
|
||||||
|
return -1;
|
||||||
|
offset = (*encoded & ~INDIR_MASK) << 8 | *(encoded + 1);
|
||||||
|
if (offset >= alen)
|
||||||
|
return -1;
|
||||||
|
encoded = abuf + offset;
|
||||||
|
|
||||||
|
/* If we've seen more indirects than the message length,
|
||||||
|
* then there's a loop.
|
||||||
|
*/
|
||||||
|
if (++indir > alen)
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
offset = *encoded;
|
||||||
|
if (encoded + offset + 1 >= abuf + alen)
|
||||||
|
return -1;
|
||||||
|
encoded++;
|
||||||
|
while (offset--)
|
||||||
|
{
|
||||||
|
n += (*encoded == '.' || *encoded == '\\') ? 2 : 1;
|
||||||
|
encoded++;
|
||||||
|
}
|
||||||
|
n++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/* If there were any labels at all, then the number of dots is one
|
||||||
|
* less than the number of labels, so subtract one.
|
||||||
|
*/
|
||||||
|
return (n) ? n - 1 : n;
|
||||||
|
}
|
||||||
62
ares/ares_fds.3
Normal file
62
ares/ares_fds.3
Normal file
@@ -0,0 +1,62 @@
|
|||||||
|
.\" $Id$
|
||||||
|
.\"
|
||||||
|
.\" Copyright 1998 by the Massachusetts Institute of Technology.
|
||||||
|
.\"
|
||||||
|
.\" Permission to use, copy, modify, and distribute this
|
||||||
|
.\" software and its documentation for any purpose and without
|
||||||
|
.\" fee is hereby granted, provided that the above copyright
|
||||||
|
.\" notice appear in all copies and that both that copyright
|
||||||
|
.\" notice and this permission notice appear in supporting
|
||||||
|
.\" documentation, and that the name of M.I.T. not be used in
|
||||||
|
.\" advertising or publicity pertaining to distribution of the
|
||||||
|
.\" software without specific, written prior permission.
|
||||||
|
.\" M.I.T. makes no representations about the suitability of
|
||||||
|
.\" this software for any purpose. It is provided "as is"
|
||||||
|
.\" without express or implied warranty.
|
||||||
|
.\"
|
||||||
|
.TH ARES_FDS 3 "23 July 1998"
|
||||||
|
.SH NAME
|
||||||
|
ares_fds \- Get file descriptors to select on for name service
|
||||||
|
.SH SYNOPSIS
|
||||||
|
.nf
|
||||||
|
.B #include <ares.h>
|
||||||
|
.PP
|
||||||
|
.B int ares_fds(ares_channel \fIchannel\fP, fd_set *\fIread_fds\fP,
|
||||||
|
.B fd_set *\fIwrite_fds\fP)
|
||||||
|
.fi
|
||||||
|
.SH DESCRIPTION
|
||||||
|
The
|
||||||
|
.B ares_fds
|
||||||
|
function retrieves the set of file descriptors which the calling
|
||||||
|
application should select on for reading and writing for the
|
||||||
|
processing of name service queries pending on the name service channel
|
||||||
|
identified by
|
||||||
|
.IR channel .
|
||||||
|
File descriptors will be set in the file descriptor sets pointed to by
|
||||||
|
.I read_fds
|
||||||
|
and
|
||||||
|
.I write_fds
|
||||||
|
as appropriate. File descriptors already set in
|
||||||
|
.I read_fds
|
||||||
|
and
|
||||||
|
.I write_fds
|
||||||
|
will remain set; initialization of the file descriptor sets
|
||||||
|
(using
|
||||||
|
.BR FD_ZERO )
|
||||||
|
is the responsibility of the caller.
|
||||||
|
.SH RETURN VALUES
|
||||||
|
.B ares_fds
|
||||||
|
returns one greater than the number of the highest socket set in either
|
||||||
|
.I read_fds
|
||||||
|
or
|
||||||
|
.IR write_fds .
|
||||||
|
If no queries are active,
|
||||||
|
.B ares_fds
|
||||||
|
will return 0.
|
||||||
|
.SH SEE ALSO
|
||||||
|
.BR ares_timeout (3),
|
||||||
|
.BR ares_process (3)
|
||||||
|
.SH AUTHOR
|
||||||
|
Greg Hudson, MIT Information Systems
|
||||||
|
.br
|
||||||
|
Copyright 1998 by the Massachusetts Institute of Technology.
|
||||||
58
ares/ares_fds.c
Normal file
58
ares/ares_fds.c
Normal file
@@ -0,0 +1,58 @@
|
|||||||
|
/* Copyright 1998 by the Massachusetts Institute of Technology.
|
||||||
|
*
|
||||||
|
* Permission to use, copy, modify, and distribute this
|
||||||
|
* software and its documentation for any purpose and without
|
||||||
|
* fee is hereby granted, provided that the above copyright
|
||||||
|
* notice appear in all copies and that both that copyright
|
||||||
|
* notice and this permission notice appear in supporting
|
||||||
|
* documentation, and that the name of M.I.T. not be used in
|
||||||
|
* advertising or publicity pertaining to distribution of the
|
||||||
|
* software without specific, written prior permission.
|
||||||
|
* M.I.T. makes no representations about the suitability of
|
||||||
|
* this software for any purpose. It is provided "as is"
|
||||||
|
* without express or implied warranty.
|
||||||
|
*/
|
||||||
|
|
||||||
|
static const char rcsid[] = "$Id$";
|
||||||
|
|
||||||
|
#include <sys/types.h>
|
||||||
|
|
||||||
|
#ifdef WIN32
|
||||||
|
|
||||||
|
#else
|
||||||
|
#include <sys/time.h>
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#include "ares.h"
|
||||||
|
#include "ares_private.h"
|
||||||
|
|
||||||
|
int ares_fds(ares_channel channel, fd_set *read_fds, fd_set *write_fds)
|
||||||
|
{
|
||||||
|
struct server_state *server;
|
||||||
|
int i, nfds;
|
||||||
|
|
||||||
|
/* No queries, no file descriptors. */
|
||||||
|
if (!channel->queries)
|
||||||
|
return 0;
|
||||||
|
|
||||||
|
nfds = 0;
|
||||||
|
for (i = 0; i < channel->nservers; i++)
|
||||||
|
{
|
||||||
|
server = &channel->servers[i];
|
||||||
|
if (server->udp_socket != -1)
|
||||||
|
{
|
||||||
|
FD_SET(server->udp_socket, read_fds);
|
||||||
|
if (server->udp_socket >= nfds)
|
||||||
|
nfds = server->udp_socket + 1;
|
||||||
|
}
|
||||||
|
if (server->tcp_socket != -1)
|
||||||
|
{
|
||||||
|
FD_SET(server->tcp_socket, read_fds);
|
||||||
|
if (server->qhead)
|
||||||
|
FD_SET(server->tcp_socket, write_fds);
|
||||||
|
if (server->tcp_socket >= nfds)
|
||||||
|
nfds = server->tcp_socket + 1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return nfds;
|
||||||
|
}
|
||||||
42
ares/ares_free_errmem.3
Normal file
42
ares/ares_free_errmem.3
Normal file
@@ -0,0 +1,42 @@
|
|||||||
|
.\" $Id$
|
||||||
|
.\"
|
||||||
|
.\" Copyright 1998 by the Massachusetts Institute of Technology.
|
||||||
|
.\"
|
||||||
|
.\" Permission to use, copy, modify, and distribute this
|
||||||
|
.\" software and its documentation for any purpose and without
|
||||||
|
.\" fee is hereby granted, provided that the above copyright
|
||||||
|
.\" notice appear in all copies and that both that copyright
|
||||||
|
.\" notice and this permission notice appear in supporting
|
||||||
|
.\" documentation, and that the name of M.I.T. not be used in
|
||||||
|
.\" advertising or publicity pertaining to distribution of the
|
||||||
|
.\" software without specific, written prior permission.
|
||||||
|
.\" M.I.T. makes no representations about the suitability of
|
||||||
|
.\" this software for any purpose. It is provided "as is"
|
||||||
|
.\" without express or implied warranty.
|
||||||
|
.\"
|
||||||
|
.TH ARES_FREE_ERRMEM 3 "23 July 1998"
|
||||||
|
.SH NAME
|
||||||
|
ares_free_errmem \- Free memory allocated by ares_strerror
|
||||||
|
.SH SYNOPSIS
|
||||||
|
.nf
|
||||||
|
.B #include <ares.h>
|
||||||
|
.PP
|
||||||
|
.B void ares_free_errmem(char *\fIerrmem\fP)
|
||||||
|
.fi
|
||||||
|
.SH DESCRIPTION
|
||||||
|
The
|
||||||
|
.B ares_free_errmem
|
||||||
|
function frees any memory which might have been allocated by the
|
||||||
|
.BR ares_strerror (3)
|
||||||
|
function. The parameter
|
||||||
|
.I errmem
|
||||||
|
should be set to the variable pointed to by the
|
||||||
|
.I memptr
|
||||||
|
argument previously passed to
|
||||||
|
.IR ares_strerror .
|
||||||
|
.SH SEE ALSO
|
||||||
|
.BR ares_strerror (3)
|
||||||
|
.SH AUTHOR
|
||||||
|
Greg Hudson, MIT Information Systems
|
||||||
|
.br
|
||||||
|
Copyright 1998 by the Massachusetts Institute of Technology.
|
||||||
26
ares/ares_free_errmem.c
Normal file
26
ares/ares_free_errmem.c
Normal file
@@ -0,0 +1,26 @@
|
|||||||
|
/* Copyright 1998 by the Massachusetts Institute of Technology.
|
||||||
|
*
|
||||||
|
* Permission to use, copy, modify, and distribute this
|
||||||
|
* software and its documentation for any purpose and without
|
||||||
|
* fee is hereby granted, provided that the above copyright
|
||||||
|
* notice appear in all copies and that both that copyright
|
||||||
|
* notice and this permission notice appear in supporting
|
||||||
|
* documentation, and that the name of M.I.T. not be used in
|
||||||
|
* advertising or publicity pertaining to distribution of the
|
||||||
|
* software without specific, written prior permission.
|
||||||
|
* M.I.T. makes no representations about the suitability of
|
||||||
|
* this software for any purpose. It is provided "as is"
|
||||||
|
* without express or implied warranty.
|
||||||
|
*/
|
||||||
|
|
||||||
|
static const char rcsid[] = "$Id$";
|
||||||
|
|
||||||
|
#include "ares.h"
|
||||||
|
|
||||||
|
/* Do nothing, for now. A future implementation may want to deal with
|
||||||
|
* internationalization, in which case ares_strerror() might allocate
|
||||||
|
* memory which we would then have to free.
|
||||||
|
*/
|
||||||
|
void ares_free_errmem(char *mem)
|
||||||
|
{
|
||||||
|
}
|
||||||
49
ares/ares_free_hostent.3
Normal file
49
ares/ares_free_hostent.3
Normal file
@@ -0,0 +1,49 @@
|
|||||||
|
.\" $Id$
|
||||||
|
.\"
|
||||||
|
.\" Copyright 1998 by the Massachusetts Institute of Technology.
|
||||||
|
.\"
|
||||||
|
.\" Permission to use, copy, modify, and distribute this
|
||||||
|
.\" software and its documentation for any purpose and without
|
||||||
|
.\" fee is hereby granted, provided that the above copyright
|
||||||
|
.\" notice appear in all copies and that both that copyright
|
||||||
|
.\" notice and this permission notice appear in supporting
|
||||||
|
.\" documentation, and that the name of M.I.T. not be used in
|
||||||
|
.\" advertising or publicity pertaining to distribution of the
|
||||||
|
.\" software without specific, written prior permission.
|
||||||
|
.\" M.I.T. makes no representations about the suitability of
|
||||||
|
.\" this software for any purpose. It is provided "as is"
|
||||||
|
.\" without express or implied warranty.
|
||||||
|
.\"
|
||||||
|
.TH ARES_FREE_HOSTENT 3 "23 July 1998"
|
||||||
|
.SH NAME
|
||||||
|
ares_free_hostent \- Free host structure allocated by ares functions
|
||||||
|
.SH SYNOPSIS
|
||||||
|
.nf
|
||||||
|
.B #include <ares.h>
|
||||||
|
.PP
|
||||||
|
.B void ares_free_hostent(struct hostent *\fIhost\fP)
|
||||||
|
.fi
|
||||||
|
.SH DESCRIPTION
|
||||||
|
The
|
||||||
|
.I ares_free_hostent
|
||||||
|
function frees a
|
||||||
|
.B struct hostent
|
||||||
|
allocated by one of the functions
|
||||||
|
.I ares_parse_a_reply
|
||||||
|
or
|
||||||
|
.IR ares_parse_ptr_reply .
|
||||||
|
.SH SEE ALSO
|
||||||
|
.BR ares_parse_a_reply (3),
|
||||||
|
.BR ares_parse_ptr_reply (3)
|
||||||
|
.SH NOTES
|
||||||
|
It is not necessary (and is not correct) to free the host structure
|
||||||
|
passed to the callback functions for
|
||||||
|
.I ares_gethostbyname
|
||||||
|
or
|
||||||
|
.IR ares_gethostbyaddr .
|
||||||
|
The ares library will automatically free such host structures when the
|
||||||
|
callback returns.
|
||||||
|
.SH AUTHOR
|
||||||
|
Greg Hudson, MIT Information Systems
|
||||||
|
.br
|
||||||
|
Copyright 1998 by the Massachusetts Institute of Technology.
|
||||||
39
ares/ares_free_hostent.c
Normal file
39
ares/ares_free_hostent.c
Normal file
@@ -0,0 +1,39 @@
|
|||||||
|
/* Copyright 1998 by the Massachusetts Institute of Technology.
|
||||||
|
*
|
||||||
|
* Permission to use, copy, modify, and distribute this
|
||||||
|
* software and its documentation for any purpose and without
|
||||||
|
* fee is hereby granted, provided that the above copyright
|
||||||
|
* notice appear in all copies and that both that copyright
|
||||||
|
* notice and this permission notice appear in supporting
|
||||||
|
* documentation, and that the name of M.I.T. not be used in
|
||||||
|
* advertising or publicity pertaining to distribution of the
|
||||||
|
* software without specific, written prior permission.
|
||||||
|
* M.I.T. makes no representations about the suitability of
|
||||||
|
* this software for any purpose. It is provided "as is"
|
||||||
|
* without express or implied warranty.
|
||||||
|
*/
|
||||||
|
|
||||||
|
static const char rcsid[] = "$Id$";
|
||||||
|
|
||||||
|
#include <stdlib.h>
|
||||||
|
|
||||||
|
#ifdef WIN32
|
||||||
|
|
||||||
|
#else
|
||||||
|
#include <netdb.h>
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#include "ares.h"
|
||||||
|
|
||||||
|
void ares_free_hostent(struct hostent *host)
|
||||||
|
{
|
||||||
|
char **p;
|
||||||
|
|
||||||
|
free(host->h_name);
|
||||||
|
for (p = host->h_aliases; *p; p++)
|
||||||
|
free(*p);
|
||||||
|
free(host->h_aliases);
|
||||||
|
free(host->h_addr_list[0]);
|
||||||
|
free(host->h_addr_list);
|
||||||
|
free(host);
|
||||||
|
}
|
||||||
37
ares/ares_free_string.3
Normal file
37
ares/ares_free_string.3
Normal file
@@ -0,0 +1,37 @@
|
|||||||
|
.\" $Id$
|
||||||
|
.\"
|
||||||
|
.\" Copyright 2000 by the Massachusetts Institute of Technology.
|
||||||
|
.\"
|
||||||
|
.\" Permission to use, copy, modify, and distribute this
|
||||||
|
.\" software and its documentation for any purpose and without
|
||||||
|
.\" fee is hereby granted, provided that the above copyright
|
||||||
|
.\" notice appear in all copies and that both that copyright
|
||||||
|
.\" notice and this permission notice appear in supporting
|
||||||
|
.\" documentation, and that the name of M.I.T. not be used in
|
||||||
|
.\" advertising or publicity pertaining to distribution of the
|
||||||
|
.\" software without specific, written prior permission.
|
||||||
|
.\" M.I.T. makes no representations about the suitability of
|
||||||
|
.\" this software for any purpose. It is provided "as is"
|
||||||
|
.\" without express or implied warranty.
|
||||||
|
.\"
|
||||||
|
.TH ARES_FREE_STRING 3 "4 January 2000"
|
||||||
|
.SH NAME
|
||||||
|
ares_free_string \- Free strings allocated by ares functions
|
||||||
|
.SH SYNOPSIS
|
||||||
|
.nf
|
||||||
|
.B #include <ares.h>
|
||||||
|
.PP
|
||||||
|
.B void ares_free_string(char *\fIstr\fP)
|
||||||
|
.fi
|
||||||
|
.SH DESCRIPTION
|
||||||
|
The
|
||||||
|
.I ares_free_string
|
||||||
|
function frees a string allocated by the
|
||||||
|
.I ares_mkquery
|
||||||
|
function.
|
||||||
|
.SH SEE ALSO
|
||||||
|
.BR ares_mkquery (3)
|
||||||
|
.SH AUTHOR
|
||||||
|
Greg Hudson, MIT Information Systems
|
||||||
|
.br
|
||||||
|
Copyright 2000 by the Massachusetts Institute of Technology.
|
||||||
24
ares/ares_free_string.c
Normal file
24
ares/ares_free_string.c
Normal file
@@ -0,0 +1,24 @@
|
|||||||
|
/* Copyright 2000 by the Massachusetts Institute of Technology.
|
||||||
|
*
|
||||||
|
* Permission to use, copy, modify, and distribute this
|
||||||
|
* software and its documentation for any purpose and without
|
||||||
|
* fee is hereby granted, provided that the above copyright
|
||||||
|
* notice appear in all copies and that both that copyright
|
||||||
|
* notice and this permission notice appear in supporting
|
||||||
|
* documentation, and that the name of M.I.T. not be used in
|
||||||
|
* advertising or publicity pertaining to distribution of the
|
||||||
|
* software without specific, written prior permission.
|
||||||
|
* M.I.T. makes no representations about the suitability of
|
||||||
|
* this software for any purpose. It is provided "as is"
|
||||||
|
* without express or implied warranty.
|
||||||
|
*/
|
||||||
|
|
||||||
|
static const char rcsid[] = "$Id$";
|
||||||
|
|
||||||
|
#include <stdlib.h>
|
||||||
|
#include "ares.h"
|
||||||
|
|
||||||
|
void ares_free_string(char *str)
|
||||||
|
{
|
||||||
|
free(str);
|
||||||
|
}
|
||||||
100
ares/ares_gethostbyaddr.3
Normal file
100
ares/ares_gethostbyaddr.3
Normal file
@@ -0,0 +1,100 @@
|
|||||||
|
.\" $Id$
|
||||||
|
.\"
|
||||||
|
.\" Copyright 1998 by the Massachusetts Institute of Technology.
|
||||||
|
.\"
|
||||||
|
.\" Permission to use, copy, modify, and distribute this
|
||||||
|
.\" software and its documentation for any purpose and without
|
||||||
|
.\" fee is hereby granted, provided that the above copyright
|
||||||
|
.\" notice appear in all copies and that both that copyright
|
||||||
|
.\" notice and this permission notice appear in supporting
|
||||||
|
.\" documentation, and that the name of M.I.T. not be used in
|
||||||
|
.\" advertising or publicity pertaining to distribution of the
|
||||||
|
.\" software without specific, written prior permission.
|
||||||
|
.\" M.I.T. makes no representations about the suitability of
|
||||||
|
.\" this software for any purpose. It is provided "as is"
|
||||||
|
.\" without express or implied warranty.
|
||||||
|
.\"
|
||||||
|
.TH ARES_GETHOSTBYADDR 3 "24 July 1998"
|
||||||
|
.SH NAME
|
||||||
|
ares_gethostbyaddr \- Initiate a host query by address
|
||||||
|
.SH SYNOPSIS
|
||||||
|
.nf
|
||||||
|
.B #include <ares.h>
|
||||||
|
.PP
|
||||||
|
.B typedef void (*ares_host_callback)(void *\fIarg\fP, int \fIstatus\fP,
|
||||||
|
.B struct hostent *\fIhostent\fP)
|
||||||
|
.PP
|
||||||
|
.B void ares_gethostbyaddr(ares_channel \fIchannel\fP, const void *\fIaddr\fP,
|
||||||
|
.B int \fIaddrlen\fP, int \fIfamily\fP, ares_host_callback \fIcallback\fP,
|
||||||
|
.B void *\fIarg\fP)
|
||||||
|
.fi
|
||||||
|
.SH DESCRIPTION
|
||||||
|
The
|
||||||
|
.B ares_gethostbyaddr
|
||||||
|
function initiates a host query by address on the name service channel
|
||||||
|
identified by
|
||||||
|
.IR channel .
|
||||||
|
The parameters
|
||||||
|
.I addr
|
||||||
|
and
|
||||||
|
.I addrlen
|
||||||
|
give the address as a series of bytes, and
|
||||||
|
.I family
|
||||||
|
gives the type of address. When the query is complete or has failed,
|
||||||
|
the ares library will invoke
|
||||||
|
.IR callback .
|
||||||
|
Completion or failure of the query may happen immediately, or may
|
||||||
|
happen during a later call to
|
||||||
|
.BR ares_process (3)
|
||||||
|
or
|
||||||
|
.BR ares_destroy (3).
|
||||||
|
.PP
|
||||||
|
The callback argument
|
||||||
|
.I arg
|
||||||
|
is copied from the
|
||||||
|
.B ares_gethostbyaddr
|
||||||
|
argument
|
||||||
|
.IR arg .
|
||||||
|
The callback argument
|
||||||
|
.I status
|
||||||
|
indicates whether the query succeeded and, if not, how it failed. It
|
||||||
|
may have any of the following values:
|
||||||
|
.TP 19
|
||||||
|
.B ARES_SUCCESS
|
||||||
|
The host lookup completed successfully.
|
||||||
|
.TP 19
|
||||||
|
.B ARES_ENOTIMP
|
||||||
|
The ares library does not know how to look up addresses of type
|
||||||
|
.IR family .
|
||||||
|
.TP 19
|
||||||
|
.B ARES_ENOTFOUND
|
||||||
|
The address
|
||||||
|
.I addr
|
||||||
|
was not found.
|
||||||
|
.TP 19
|
||||||
|
.B ARES_ENOMEM
|
||||||
|
Memory was exhausted.
|
||||||
|
.TP 19
|
||||||
|
.B ARES_EDESTRUCTION
|
||||||
|
The name service channel
|
||||||
|
.I channel
|
||||||
|
is being destroyed; the query will not be completed.
|
||||||
|
.PP
|
||||||
|
On successful completion of the query, the callback argument
|
||||||
|
.I hostent
|
||||||
|
points to a
|
||||||
|
.B struct hostent
|
||||||
|
containing the name of the host returned by the query. The callback
|
||||||
|
need not and should not attempt to free the memory pointed to by
|
||||||
|
.IR hostent ;
|
||||||
|
the ares library will free it when the callback returns. If the query
|
||||||
|
did not complete successfully,
|
||||||
|
.I hostent
|
||||||
|
will be
|
||||||
|
.BR NULL .
|
||||||
|
.SH SEE ALSO
|
||||||
|
.BR ares_process (3)
|
||||||
|
.SH AUTHOR
|
||||||
|
Greg Hudson, MIT Information Systems
|
||||||
|
.br
|
||||||
|
Copyright 1998 by the Massachusetts Institute of Technology.
|
||||||
174
ares/ares_gethostbyaddr.c
Normal file
174
ares/ares_gethostbyaddr.c
Normal file
@@ -0,0 +1,174 @@
|
|||||||
|
/* Copyright 1998 by the Massachusetts Institute of Technology.
|
||||||
|
*
|
||||||
|
* Permission to use, copy, modify, and distribute this
|
||||||
|
* software and its documentation for any purpose and without
|
||||||
|
* fee is hereby granted, provided that the above copyright
|
||||||
|
* notice appear in all copies and that both that copyright
|
||||||
|
* notice and this permission notice appear in supporting
|
||||||
|
* documentation, and that the name of M.I.T. not be used in
|
||||||
|
* advertising or publicity pertaining to distribution of the
|
||||||
|
* software without specific, written prior permission.
|
||||||
|
* M.I.T. makes no representations about the suitability of
|
||||||
|
* this software for any purpose. It is provided "as is"
|
||||||
|
* without express or implied warranty.
|
||||||
|
*/
|
||||||
|
|
||||||
|
static const char rcsid[] = "$Id$";
|
||||||
|
|
||||||
|
#include <sys/types.h>
|
||||||
|
|
||||||
|
#ifdef WIN32
|
||||||
|
#include "nameser.h"
|
||||||
|
#else
|
||||||
|
#include <sys/socket.h>
|
||||||
|
#include <netinet/in.h>
|
||||||
|
#include <netdb.h>
|
||||||
|
#include <arpa/nameser.h>
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#include <stdio.h>
|
||||||
|
#include <stdlib.h>
|
||||||
|
#include <string.h>
|
||||||
|
#include "ares.h"
|
||||||
|
#include "ares_private.h"
|
||||||
|
|
||||||
|
struct addr_query {
|
||||||
|
/* Arguments passed to ares_gethostbyaddr() */
|
||||||
|
ares_channel channel;
|
||||||
|
struct in_addr addr;
|
||||||
|
ares_host_callback callback;
|
||||||
|
void *arg;
|
||||||
|
|
||||||
|
const char *remaining_lookups;
|
||||||
|
};
|
||||||
|
|
||||||
|
static void next_lookup(struct addr_query *aquery);
|
||||||
|
static void addr_callback(void *arg, int status, unsigned char *abuf,
|
||||||
|
int alen);
|
||||||
|
static void end_aquery(struct addr_query *aquery, int status,
|
||||||
|
struct hostent *host);
|
||||||
|
static int file_lookup(struct in_addr *addr, struct hostent **host);
|
||||||
|
|
||||||
|
void ares_gethostbyaddr(ares_channel channel, const void *addr, int addrlen,
|
||||||
|
int family, ares_host_callback callback, void *arg)
|
||||||
|
{
|
||||||
|
struct addr_query *aquery;
|
||||||
|
|
||||||
|
if (family != AF_INET || addrlen != sizeof(struct in_addr))
|
||||||
|
{
|
||||||
|
callback(arg, ARES_ENOTIMP, NULL);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
aquery = malloc(sizeof(struct addr_query));
|
||||||
|
if (!aquery)
|
||||||
|
{
|
||||||
|
callback(arg, ARES_ENOMEM, NULL);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
aquery->channel = channel;
|
||||||
|
memcpy(&aquery->addr, addr, sizeof(aquery->addr));
|
||||||
|
aquery->callback = callback;
|
||||||
|
aquery->arg = arg;
|
||||||
|
aquery->remaining_lookups = channel->lookups;
|
||||||
|
|
||||||
|
next_lookup(aquery);
|
||||||
|
}
|
||||||
|
|
||||||
|
static void next_lookup(struct addr_query *aquery)
|
||||||
|
{
|
||||||
|
const char *p;
|
||||||
|
char name[64];
|
||||||
|
int a1, a2, a3, a4, status;
|
||||||
|
struct hostent *host;
|
||||||
|
unsigned long addr;
|
||||||
|
|
||||||
|
for (p = aquery->remaining_lookups; *p; p++)
|
||||||
|
{
|
||||||
|
switch (*p)
|
||||||
|
{
|
||||||
|
case 'b':
|
||||||
|
addr = ntohl(aquery->addr.s_addr);
|
||||||
|
a1 = addr >> 24;
|
||||||
|
a2 = (addr >> 16) & 0xff;
|
||||||
|
a3 = (addr >> 8) & 0xff;
|
||||||
|
a4 = addr & 0xff;
|
||||||
|
sprintf(name, "%d.%d.%d.%d.in-addr.arpa", a4, a3, a2, a1);
|
||||||
|
aquery->remaining_lookups = p + 1;
|
||||||
|
ares_query(aquery->channel, name, C_IN, T_PTR, addr_callback,
|
||||||
|
aquery);
|
||||||
|
return;
|
||||||
|
case 'f':
|
||||||
|
status = file_lookup(&aquery->addr, &host);
|
||||||
|
if (status != ARES_ENOTFOUND)
|
||||||
|
{
|
||||||
|
end_aquery(aquery, status, host);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
end_aquery(aquery, ARES_ENOTFOUND, NULL);
|
||||||
|
}
|
||||||
|
|
||||||
|
static void addr_callback(void *arg, int status, unsigned char *abuf, int alen)
|
||||||
|
{
|
||||||
|
struct addr_query *aquery = (struct addr_query *) arg;
|
||||||
|
struct hostent *host;
|
||||||
|
|
||||||
|
if (status == ARES_SUCCESS)
|
||||||
|
{
|
||||||
|
status = ares_parse_ptr_reply(abuf, alen, &aquery->addr,
|
||||||
|
sizeof(struct in_addr), AF_INET, &host);
|
||||||
|
end_aquery(aquery, status, host);
|
||||||
|
}
|
||||||
|
else if (status == ARES_EDESTRUCTION)
|
||||||
|
end_aquery(aquery, status, NULL);
|
||||||
|
else
|
||||||
|
next_lookup(aquery);
|
||||||
|
}
|
||||||
|
|
||||||
|
static void end_aquery(struct addr_query *aquery, int status,
|
||||||
|
struct hostent *host)
|
||||||
|
{
|
||||||
|
aquery->callback(aquery->arg, status, host);
|
||||||
|
if (host)
|
||||||
|
ares_free_hostent(host);
|
||||||
|
free(aquery);
|
||||||
|
}
|
||||||
|
|
||||||
|
static int file_lookup(struct in_addr *addr, struct hostent **host)
|
||||||
|
{
|
||||||
|
FILE *fp;
|
||||||
|
int status;
|
||||||
|
|
||||||
|
#ifdef WIN32
|
||||||
|
|
||||||
|
char PATH_HOSTS[MAX_PATH];
|
||||||
|
if (IsNT) {
|
||||||
|
GetSystemDirectory(PATH_HOSTS, MAX_PATH);
|
||||||
|
strcat(PATH_HOSTS, PATH_HOSTS_NT);
|
||||||
|
} else {
|
||||||
|
GetWindowsDirectory(PATH_HOSTS, MAX_PATH);
|
||||||
|
strcat(PATH_HOSTS, PATH_HOSTS_9X);
|
||||||
|
}
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
||||||
|
fp = fopen(PATH_HOSTS, "r");
|
||||||
|
if (!fp)
|
||||||
|
return ARES_ENOTFOUND;
|
||||||
|
|
||||||
|
while ((status = ares__get_hostent(fp, host)) == ARES_SUCCESS)
|
||||||
|
{
|
||||||
|
if (memcmp((*host)->h_addr, addr, sizeof(struct in_addr)) == 0)
|
||||||
|
break;
|
||||||
|
ares_free_hostent(*host);
|
||||||
|
}
|
||||||
|
fclose(fp);
|
||||||
|
if (status == ARES_EOF)
|
||||||
|
status = ARES_ENOTFOUND;
|
||||||
|
if (status != ARES_SUCCESS)
|
||||||
|
*host = NULL;
|
||||||
|
return status;
|
||||||
|
}
|
||||||
103
ares/ares_gethostbyname.3
Normal file
103
ares/ares_gethostbyname.3
Normal file
@@ -0,0 +1,103 @@
|
|||||||
|
.\" $Id$
|
||||||
|
.\"
|
||||||
|
.\" Copyright 1998 by the Massachusetts Institute of Technology.
|
||||||
|
.\"
|
||||||
|
.\" Permission to use, copy, modify, and distribute this
|
||||||
|
.\" software and its documentation for any purpose and without
|
||||||
|
.\" fee is hereby granted, provided that the above copyright
|
||||||
|
.\" notice appear in all copies and that both that copyright
|
||||||
|
.\" notice and this permission notice appear in supporting
|
||||||
|
.\" documentation, and that the name of M.I.T. not be used in
|
||||||
|
.\" advertising or publicity pertaining to distribution of the
|
||||||
|
.\" software without specific, written prior permission.
|
||||||
|
.\" M.I.T. makes no representations about the suitability of
|
||||||
|
.\" this software for any purpose. It is provided "as is"
|
||||||
|
.\" without express or implied warranty.
|
||||||
|
.\"
|
||||||
|
.TH ARES_GETHOSTBYNAME 3 "25 July 1998"
|
||||||
|
.SH NAME
|
||||||
|
ares_gethostbyname \- Initiate a host query by name
|
||||||
|
.SH SYNOPSIS
|
||||||
|
.nf
|
||||||
|
.B #include <ares.h>
|
||||||
|
.PP
|
||||||
|
.B typedef void (*ares_host_callback)(void *\fIarg\fP, int \fIstatus\fP,
|
||||||
|
.B struct hostent *\fIhostent\fP)
|
||||||
|
.PP
|
||||||
|
.B void ares_gethostbyname(ares_channel \fIchannel\fP, const char *\fIname\fP,
|
||||||
|
.B int \fIfamily\fP, ares_host_callback \fIcallback\fP, void *\fIarg\fP)
|
||||||
|
.fi
|
||||||
|
.SH DESCRIPTION
|
||||||
|
The
|
||||||
|
.B ares_gethostbyname
|
||||||
|
function initiates a host query by name on the name service channel
|
||||||
|
identified by
|
||||||
|
.IR channel .
|
||||||
|
The parameter
|
||||||
|
.I name
|
||||||
|
gives the hostname as a NUL-terminated C string, and
|
||||||
|
.I family
|
||||||
|
gives the desired type of address for the resulting host entry. When
|
||||||
|
the query is complete or has failed, the ares library will invoke
|
||||||
|
.IR callback .
|
||||||
|
Completion or failure of the query may happen immediately, or may
|
||||||
|
happen during a later call to
|
||||||
|
.BR ares_process (3)
|
||||||
|
or
|
||||||
|
.BR ares_destroy (3).
|
||||||
|
.PP
|
||||||
|
The callback argument
|
||||||
|
.I arg
|
||||||
|
is copied from the
|
||||||
|
.B ares_gethostbyname
|
||||||
|
argument
|
||||||
|
.IR arg .
|
||||||
|
The callback argument
|
||||||
|
.I status
|
||||||
|
indicates whether the query succeeded and, if not, how it failed. It
|
||||||
|
may have any of the following values:
|
||||||
|
.TP 19
|
||||||
|
.B ARES_SUCCESS
|
||||||
|
The host lookup completed successfully.
|
||||||
|
.TP 19
|
||||||
|
.B ARES_ENOTIMP
|
||||||
|
The ares library does not know how to find addresses of type
|
||||||
|
.IR family .
|
||||||
|
.TP 19
|
||||||
|
.B ARES_EBADNAME
|
||||||
|
The hostname
|
||||||
|
.B name
|
||||||
|
is composed entirely of numbers and periods, but is not a valid
|
||||||
|
representation of an Internet address.
|
||||||
|
.TP 19
|
||||||
|
.B ARES_ENOTFOUND
|
||||||
|
The address
|
||||||
|
.I addr
|
||||||
|
was not found.
|
||||||
|
.TP 19
|
||||||
|
.B ARES_ENOMEM
|
||||||
|
Memory was exhausted.
|
||||||
|
.TP 19
|
||||||
|
.B ARES_EDESTRUCTION
|
||||||
|
The name service channel
|
||||||
|
.I channel
|
||||||
|
is being destroyed; the query will not be completed.
|
||||||
|
.PP
|
||||||
|
On successful completion of the query, the callback argument
|
||||||
|
.I hostent
|
||||||
|
points to a
|
||||||
|
.B struct hostent
|
||||||
|
containing the name of the host returned by the query. The callback
|
||||||
|
need not and should not attempt to free the memory pointed to by
|
||||||
|
.IR hostent ;
|
||||||
|
the ares library will free it when the callback returns. If the query
|
||||||
|
did not complete successfully,
|
||||||
|
.I hostent
|
||||||
|
will be
|
||||||
|
.BR NULL .
|
||||||
|
.SH SEE ALSO
|
||||||
|
.BR ares_process (3)
|
||||||
|
.SH AUTHOR
|
||||||
|
Greg Hudson, MIT Information Systems
|
||||||
|
.br
|
||||||
|
Copyright 1998 by the Massachusetts Institute of Technology.
|
||||||
297
ares/ares_gethostbyname.c
Normal file
297
ares/ares_gethostbyname.c
Normal file
@@ -0,0 +1,297 @@
|
|||||||
|
/* Copyright 1998 by the Massachusetts Institute of Technology.
|
||||||
|
*
|
||||||
|
* Permission to use, copy, modify, and distribute this
|
||||||
|
* software and its documentation for any purpose and without
|
||||||
|
* fee is hereby granted, provided that the above copyright
|
||||||
|
* notice appear in all copies and that both that copyright
|
||||||
|
* notice and this permission notice appear in supporting
|
||||||
|
* documentation, and that the name of M.I.T. not be used in
|
||||||
|
* advertising or publicity pertaining to distribution of the
|
||||||
|
* software without specific, written prior permission.
|
||||||
|
* M.I.T. makes no representations about the suitability of
|
||||||
|
* this software for any purpose. It is provided "as is"
|
||||||
|
* without express or implied warranty.
|
||||||
|
*/
|
||||||
|
|
||||||
|
static const char rcsid[] = "$Id$";
|
||||||
|
|
||||||
|
#include <sys/types.h>
|
||||||
|
|
||||||
|
#ifdef WIN32
|
||||||
|
#include "nameser.h"
|
||||||
|
#else
|
||||||
|
#include <sys/socket.h>
|
||||||
|
#include <netinet/in.h>
|
||||||
|
#include <arpa/inet.h>
|
||||||
|
#include <netdb.h>
|
||||||
|
#include <arpa/nameser.h>
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#include <stdio.h>
|
||||||
|
#include <stdlib.h>
|
||||||
|
#include <string.h>
|
||||||
|
#include <ctype.h>
|
||||||
|
#include "ares.h"
|
||||||
|
#include "ares_private.h"
|
||||||
|
|
||||||
|
struct host_query {
|
||||||
|
/* Arguments passed to ares_gethostbyname() */
|
||||||
|
ares_channel channel;
|
||||||
|
char *name;
|
||||||
|
ares_host_callback callback;
|
||||||
|
void *arg;
|
||||||
|
|
||||||
|
const char *remaining_lookups;
|
||||||
|
};
|
||||||
|
|
||||||
|
static void next_lookup(struct host_query *hquery);
|
||||||
|
static void host_callback(void *arg, int status, unsigned char *abuf,
|
||||||
|
int alen);
|
||||||
|
static void end_hquery(struct host_query *hquery, int status,
|
||||||
|
struct hostent *host);
|
||||||
|
static int fake_hostent(const char *name, ares_host_callback callback,
|
||||||
|
void *arg);
|
||||||
|
static int file_lookup(const char *name, struct hostent **host);
|
||||||
|
static void sort_addresses(struct hostent *host, struct apattern *sortlist,
|
||||||
|
int nsort);
|
||||||
|
static int get_address_index(struct in_addr *addr, struct apattern *sortlist,
|
||||||
|
int nsort);
|
||||||
|
|
||||||
|
void ares_gethostbyname(ares_channel channel, const char *name, int family,
|
||||||
|
ares_host_callback callback, void *arg)
|
||||||
|
{
|
||||||
|
struct host_query *hquery;
|
||||||
|
|
||||||
|
/* Right now we only know how to look up Internet addresses. */
|
||||||
|
if (family != AF_INET)
|
||||||
|
{
|
||||||
|
callback(arg, ARES_ENOTIMP, NULL);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (fake_hostent(name, callback, arg))
|
||||||
|
return;
|
||||||
|
|
||||||
|
/* Allocate and fill in the host query structure. */
|
||||||
|
hquery = malloc(sizeof(struct host_query));
|
||||||
|
if (!hquery)
|
||||||
|
{
|
||||||
|
callback(arg, ARES_ENOMEM, NULL);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
hquery->channel = channel;
|
||||||
|
hquery->name = strdup(name);
|
||||||
|
if (!hquery->name)
|
||||||
|
{
|
||||||
|
free(hquery);
|
||||||
|
callback(arg, ARES_ENOMEM, NULL);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
hquery->callback = callback;
|
||||||
|
hquery->arg = arg;
|
||||||
|
hquery->remaining_lookups = channel->lookups;
|
||||||
|
|
||||||
|
/* Start performing lookups according to channel->lookups. */
|
||||||
|
next_lookup(hquery);
|
||||||
|
}
|
||||||
|
|
||||||
|
static void next_lookup(struct host_query *hquery)
|
||||||
|
{
|
||||||
|
int status;
|
||||||
|
const char *p;
|
||||||
|
struct hostent *host;
|
||||||
|
|
||||||
|
for (p = hquery->remaining_lookups; *p; p++)
|
||||||
|
{
|
||||||
|
switch (*p)
|
||||||
|
{
|
||||||
|
case 'b':
|
||||||
|
/* DNS lookup */
|
||||||
|
hquery->remaining_lookups = p + 1;
|
||||||
|
ares_search(hquery->channel, hquery->name, C_IN, T_A, host_callback,
|
||||||
|
hquery);
|
||||||
|
return;
|
||||||
|
|
||||||
|
case 'f':
|
||||||
|
/* Host file lookup */
|
||||||
|
status = file_lookup(hquery->name, &host);
|
||||||
|
if (status != ARES_ENOTFOUND)
|
||||||
|
{
|
||||||
|
end_hquery(hquery, status, host);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
end_hquery(hquery, ARES_ENOTFOUND, NULL);
|
||||||
|
}
|
||||||
|
|
||||||
|
static void host_callback(void *arg, int status, unsigned char *abuf, int alen)
|
||||||
|
{
|
||||||
|
struct host_query *hquery = (struct host_query *) arg;
|
||||||
|
ares_channel channel = hquery->channel;
|
||||||
|
struct hostent *host;
|
||||||
|
|
||||||
|
if (status == ARES_SUCCESS)
|
||||||
|
{
|
||||||
|
status = ares_parse_a_reply(abuf, alen, &host);
|
||||||
|
if (host && channel->nsort)
|
||||||
|
sort_addresses(host, channel->sortlist, channel->nsort);
|
||||||
|
end_hquery(hquery, status, host);
|
||||||
|
}
|
||||||
|
else if (status == ARES_EDESTRUCTION)
|
||||||
|
end_hquery(hquery, status, NULL);
|
||||||
|
else
|
||||||
|
next_lookup(hquery);
|
||||||
|
}
|
||||||
|
|
||||||
|
static void end_hquery(struct host_query *hquery, int status,
|
||||||
|
struct hostent *host)
|
||||||
|
{
|
||||||
|
hquery->callback(hquery->arg, status, host);
|
||||||
|
if (host)
|
||||||
|
ares_free_hostent(host);
|
||||||
|
free(hquery->name);
|
||||||
|
free(hquery);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* If the name looks like an IP address, fake up a host entry, end the
|
||||||
|
* query immediately, and return true. Otherwise return false.
|
||||||
|
*/
|
||||||
|
static int fake_hostent(const char *name, ares_host_callback callback,
|
||||||
|
void *arg)
|
||||||
|
{
|
||||||
|
struct in_addr addr;
|
||||||
|
struct hostent hostent;
|
||||||
|
const char *p;
|
||||||
|
char *aliases[1] = { NULL };
|
||||||
|
char *addrs[2];
|
||||||
|
|
||||||
|
/* It only looks like an IP address if it's all numbers and dots. */
|
||||||
|
for (p = name; *p; p++)
|
||||||
|
{
|
||||||
|
if (!isdigit((unsigned char)*p) && *p != '.')
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* It also only looks like an IP address if it's non-zero-length and
|
||||||
|
* doesn't end with a dot.
|
||||||
|
*/
|
||||||
|
if (p == name || *(p - 1) == '.')
|
||||||
|
return 0;
|
||||||
|
|
||||||
|
/* It looks like an IP address. Figure out what IP address it is. */
|
||||||
|
addr.s_addr = inet_addr(name);
|
||||||
|
if (addr.s_addr == INADDR_NONE)
|
||||||
|
{
|
||||||
|
callback(arg, ARES_EBADNAME, NULL);
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Duplicate the name, to avoid a constness violation. */
|
||||||
|
hostent.h_name = strdup(name);
|
||||||
|
if (!hostent.h_name)
|
||||||
|
{
|
||||||
|
callback(arg, ARES_ENOMEM, NULL);
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Fill in the rest of the host structure and terminate the query. */
|
||||||
|
addrs[0] = (char *) &addr;
|
||||||
|
addrs[1] = NULL;
|
||||||
|
hostent.h_aliases = aliases;
|
||||||
|
hostent.h_addrtype = AF_INET;
|
||||||
|
hostent.h_length = sizeof(struct in_addr);
|
||||||
|
hostent.h_addr_list = addrs;
|
||||||
|
callback(arg, ARES_SUCCESS, &hostent);
|
||||||
|
|
||||||
|
free(hostent.h_name);
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
static int file_lookup(const char *name, struct hostent **host)
|
||||||
|
{
|
||||||
|
FILE *fp;
|
||||||
|
char **alias;
|
||||||
|
int status;
|
||||||
|
|
||||||
|
#ifdef WIN32
|
||||||
|
|
||||||
|
char PATH_HOSTS[MAX_PATH];
|
||||||
|
if (IsNT) {
|
||||||
|
GetSystemDirectory(PATH_HOSTS, MAX_PATH);
|
||||||
|
strcat(PATH_HOSTS, PATH_HOSTS_NT);
|
||||||
|
} else {
|
||||||
|
GetWindowsDirectory(PATH_HOSTS, MAX_PATH);
|
||||||
|
strcat(PATH_HOSTS, PATH_HOSTS_9X);
|
||||||
|
}
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
||||||
|
fp = fopen(PATH_HOSTS, "r");
|
||||||
|
if (!fp)
|
||||||
|
return ARES_ENOTFOUND;
|
||||||
|
|
||||||
|
while ((status = ares__get_hostent(fp, host)) == ARES_SUCCESS)
|
||||||
|
{
|
||||||
|
if (strcasecmp((*host)->h_name, name) == 0)
|
||||||
|
break;
|
||||||
|
for (alias = (*host)->h_aliases; *alias; alias++)
|
||||||
|
{
|
||||||
|
if (strcasecmp(*alias, name) == 0)
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
if (*alias)
|
||||||
|
break;
|
||||||
|
ares_free_hostent(*host);
|
||||||
|
}
|
||||||
|
fclose(fp);
|
||||||
|
if (status == ARES_EOF)
|
||||||
|
status = ARES_ENOTFOUND;
|
||||||
|
if (status != ARES_SUCCESS)
|
||||||
|
*host = NULL;
|
||||||
|
return status;
|
||||||
|
}
|
||||||
|
|
||||||
|
static void sort_addresses(struct hostent *host, struct apattern *sortlist,
|
||||||
|
int nsort)
|
||||||
|
{
|
||||||
|
struct in_addr a1, a2;
|
||||||
|
int i1, i2, ind1, ind2;
|
||||||
|
|
||||||
|
/* This is a simple insertion sort, not optimized at all. i1 walks
|
||||||
|
* through the address list, with the loop invariant that everything
|
||||||
|
* to the left of i1 is sorted. In the loop body, the value at i1 is moved
|
||||||
|
* back through the list (via i2) until it is in sorted order.
|
||||||
|
*/
|
||||||
|
for (i1 = 0; host->h_addr_list[i1]; i1++)
|
||||||
|
{
|
||||||
|
memcpy(&a1, host->h_addr_list[i1], sizeof(struct in_addr));
|
||||||
|
ind1 = get_address_index(&a1, sortlist, nsort);
|
||||||
|
for (i2 = i1 - 1; i2 >= 0; i2--)
|
||||||
|
{
|
||||||
|
memcpy(&a2, host->h_addr_list[i2], sizeof(struct in_addr));
|
||||||
|
ind2 = get_address_index(&a2, sortlist, nsort);
|
||||||
|
if (ind2 <= ind1)
|
||||||
|
break;
|
||||||
|
memcpy(host->h_addr_list[i2 + 1], &a2, sizeof(struct in_addr));
|
||||||
|
}
|
||||||
|
memcpy(host->h_addr_list[i2 + 1], &a1, sizeof(struct in_addr));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Find the first entry in sortlist which matches addr. Return nsort
|
||||||
|
* if none of them match.
|
||||||
|
*/
|
||||||
|
static int get_address_index(struct in_addr *addr, struct apattern *sortlist,
|
||||||
|
int nsort)
|
||||||
|
{
|
||||||
|
int i;
|
||||||
|
|
||||||
|
for (i = 0; i < nsort; i++)
|
||||||
|
{
|
||||||
|
if ((addr->s_addr & sortlist[i].mask.s_addr) == sortlist[i].addr.s_addr)
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
return i;
|
||||||
|
}
|
||||||
170
ares/ares_init.3
Normal file
170
ares/ares_init.3
Normal file
@@ -0,0 +1,170 @@
|
|||||||
|
.\" $Id$
|
||||||
|
.\"
|
||||||
|
.\" Copyright 1998 by the Massachusetts Institute of Technology.
|
||||||
|
.\"
|
||||||
|
.\" Permission to use, copy, modify, and distribute this
|
||||||
|
.\" software and its documentation for any purpose and without
|
||||||
|
.\" fee is hereby granted, provided that the above copyright
|
||||||
|
.\" notice appear in all copies and that both that copyright
|
||||||
|
.\" notice and this permission notice appear in supporting
|
||||||
|
.\" documentation, and that the name of M.I.T. not be used in
|
||||||
|
.\" advertising or publicity pertaining to distribution of the
|
||||||
|
.\" software without specific, written prior permission.
|
||||||
|
.\" M.I.T. makes no representations about the suitability of
|
||||||
|
.\" this software for any purpose. It is provided "as is"
|
||||||
|
.\" without express or implied warranty.
|
||||||
|
.\"
|
||||||
|
.TH ARES_INIT 3 "21 July 1998"
|
||||||
|
.SH NAME
|
||||||
|
ares_init, ares_init_options \- Initialize a resolver channel
|
||||||
|
.SH SYNOPSIS
|
||||||
|
.nf
|
||||||
|
.B #include <ares.h>
|
||||||
|
.PP
|
||||||
|
.B int ares_init(ares_channel *\fIchannel\fP)
|
||||||
|
.B int ares_init_options(ares_channel *\fIchannel\fP,
|
||||||
|
.B struct ares_options *\fIoptions\fP, int \fIoptmask\fP)
|
||||||
|
.PP
|
||||||
|
.B cc file.c -lares
|
||||||
|
.fi
|
||||||
|
.SH DESCRIPTION
|
||||||
|
The
|
||||||
|
.B ares_init
|
||||||
|
function initializes a communications channel for name service
|
||||||
|
lookups. If it returns successfully,
|
||||||
|
.B ares_init
|
||||||
|
will set the variable pointed to by
|
||||||
|
.I channel
|
||||||
|
to a handle used to identify the name service channel. The caller
|
||||||
|
should invoke
|
||||||
|
.BR ares_destroy (3)
|
||||||
|
on the handle when the channel is no longer needed.
|
||||||
|
.PP
|
||||||
|
The
|
||||||
|
.B ares_init_options
|
||||||
|
function also initializes a name service channel, with additional
|
||||||
|
options useful for applications requiring more control over name
|
||||||
|
service configuration. The
|
||||||
|
.I optmask
|
||||||
|
parameter specifies which fields in the structure pointed to by
|
||||||
|
.I options
|
||||||
|
are set, as follows:
|
||||||
|
.PP
|
||||||
|
.TP 18
|
||||||
|
.B ARES_OPT_FLAGS
|
||||||
|
.B int \fIflags\fP;
|
||||||
|
.br
|
||||||
|
Flags controlling the behavior of the resolver. See below for a
|
||||||
|
description of possible flag values.
|
||||||
|
.TP 18
|
||||||
|
.B ARES_OPT_TIMEOUT
|
||||||
|
.B int \fItimeout\fP;
|
||||||
|
.br
|
||||||
|
The number of seconds each name server is given to respond to a query
|
||||||
|
on the first try. (After the first try, the timeout algorithm becomes
|
||||||
|
more complicated, but scales linearly with the value of
|
||||||
|
\fItimeout\fP.) The default is five seconds.
|
||||||
|
.TP 18
|
||||||
|
.B ARES_OPT_TRIES
|
||||||
|
.B int \fItries\fP;
|
||||||
|
.br
|
||||||
|
The number of tries the resolver will try contacting each name server
|
||||||
|
before giving up. The default is four tries.
|
||||||
|
.TP 18
|
||||||
|
.B ARES_OPT_NDOTS
|
||||||
|
.B int \fIndots\fP;
|
||||||
|
.br
|
||||||
|
The number of dots which must be present in a domain name for it to be
|
||||||
|
queried for "as is" prior to querying for it with the default domain
|
||||||
|
extensions appended. The default value is 1 unless set otherwise by
|
||||||
|
resolv.conf or the RES_OPTIONS environment variable.
|
||||||
|
.TP 18
|
||||||
|
.B ARES_OPT_PORT
|
||||||
|
.B unsigned short \fIport\fP;
|
||||||
|
.br
|
||||||
|
The port to use for queries (both TCP and UDP), in network byte order.
|
||||||
|
The default value is 53 (in network byte order), the standard name
|
||||||
|
service port.
|
||||||
|
.TP 18
|
||||||
|
.B ARES_OPT_SERVERS
|
||||||
|
.B struct in_addr *\fIservers\fP;
|
||||||
|
.br
|
||||||
|
.B int \fInservers\fP;
|
||||||
|
.br
|
||||||
|
The list of servers to contact, instead of the servers specified in
|
||||||
|
resolv.conf or the local named.
|
||||||
|
.TP 18
|
||||||
|
.B ARES_OPT_DOMAINS
|
||||||
|
.B char **\fIdomains\fP;
|
||||||
|
.br
|
||||||
|
.B int \fIndomains\fP;
|
||||||
|
.br
|
||||||
|
The domains to search, instead of the domains specified in resolv.conf
|
||||||
|
or the domain derived from the kernel hostname variable.
|
||||||
|
.TP 18
|
||||||
|
.B ARES_OPT_LOOKUPS
|
||||||
|
.B char *\fIlookups\fP;
|
||||||
|
.br
|
||||||
|
The lookups to perform for host queries.
|
||||||
|
.I lookups
|
||||||
|
should be set to a string of the characters "b" or "f", where "b"
|
||||||
|
indicates a DNS lookup and "f" indicates a lookup in the hosts file.
|
||||||
|
.PP
|
||||||
|
The
|
||||||
|
.I flags
|
||||||
|
field should be the bitwise or of some subset of the following values:
|
||||||
|
.TP 23
|
||||||
|
.B ARES_FLAG_USEVC
|
||||||
|
Always use TCP queries (the "virtual circuit") instead of UDP
|
||||||
|
queries. Normally, TCP is only used if a UDP query yields a truncated
|
||||||
|
result.
|
||||||
|
.TP 23
|
||||||
|
.B ARES_FLAG_PRIMARY
|
||||||
|
Only query the first server in the list of servers to query.
|
||||||
|
.TP 23
|
||||||
|
.B ARES_FLAG_IGNTC
|
||||||
|
If a truncated response to a UDP query is received, do not fall back
|
||||||
|
to TCP; simply continue on with the truncated response.
|
||||||
|
.TP 23
|
||||||
|
.B ARES_FLAG_NORECURSE
|
||||||
|
Do not set the "recursion desired" bit on outgoing queries, so that
|
||||||
|
the name server being contacted will not try to fetch the answer from
|
||||||
|
other servers if it doesn't know the answer locally.
|
||||||
|
.TP 23
|
||||||
|
.B ARES_FLAG_STAYOPEN
|
||||||
|
Do not close communciations sockets when the number of active queries
|
||||||
|
drops to zero.
|
||||||
|
.TP 23
|
||||||
|
.B ARES_FLAG_NOSEARCH
|
||||||
|
Do not use the default search domains; only query hostnames as-is or
|
||||||
|
as aliases.
|
||||||
|
.TP 23
|
||||||
|
.B ARES_FLAG_NOALIASES
|
||||||
|
Do not honor the HOSTALIASES environment variable, which normally
|
||||||
|
specifies a file of hostname translations.
|
||||||
|
.TP 23
|
||||||
|
.B ARES_FLAG_NOCHECKRESP
|
||||||
|
Do not discard responses with the SERVFAIL, NOTIMP, or REFUSED
|
||||||
|
response code or responses whose questions don't match the questions
|
||||||
|
in the request. Primarily useful for writing clients which might be
|
||||||
|
used to test or debug name servers.
|
||||||
|
.SH RETURN VALUES
|
||||||
|
.I ares_init
|
||||||
|
or
|
||||||
|
.I ares_init_options
|
||||||
|
can return any of the following values:
|
||||||
|
.TP 14
|
||||||
|
.B ARES_SUCCESS
|
||||||
|
Initialization succeeded.
|
||||||
|
.TP 14
|
||||||
|
.B ARES_EFILE
|
||||||
|
A configuration file could not be read.
|
||||||
|
.TP 14
|
||||||
|
.B ARES_ENOMEM
|
||||||
|
The process's available memory was exhausted.
|
||||||
|
.SH SEE ALSO
|
||||||
|
.BR ares_destroy (3)
|
||||||
|
.SH AUTHOR
|
||||||
|
Greg Hudson, MIT Information Systems
|
||||||
|
.br
|
||||||
|
Copyright 1998 by the Massachusetts Institute of Technology.
|
||||||
776
ares/ares_init.c
Normal file
776
ares/ares_init.c
Normal file
@@ -0,0 +1,776 @@
|
|||||||
|
/* Copyright 1998 by the Massachusetts Institute of Technology.
|
||||||
|
*
|
||||||
|
* Permission to use, copy, modify, and distribute this
|
||||||
|
* software and its documentation for any purpose and without
|
||||||
|
* fee is hereby granted, provided that the above copyright
|
||||||
|
* notice appear in all copies and that both that copyright
|
||||||
|
* notice and this permission notice appear in supporting
|
||||||
|
* documentation, and that the name of M.I.T. not be used in
|
||||||
|
* advertising or publicity pertaining to distribution of the
|
||||||
|
* software without specific, written prior permission.
|
||||||
|
* M.I.T. makes no representations about the suitability of
|
||||||
|
* this software for any purpose. It is provided "as is"
|
||||||
|
* without express or implied warranty.
|
||||||
|
*/
|
||||||
|
|
||||||
|
static const char rcsid[] = "$Id$";
|
||||||
|
|
||||||
|
#include <sys/types.h>
|
||||||
|
|
||||||
|
#ifdef WIN32
|
||||||
|
#include "nameser.h"
|
||||||
|
#else
|
||||||
|
#include <sys/param.h>
|
||||||
|
#include <sys/time.h>
|
||||||
|
#include <netinet/in.h>
|
||||||
|
#include <arpa/inet.h>
|
||||||
|
#include <netdb.h>
|
||||||
|
#include <arpa/nameser.h>
|
||||||
|
#include <unistd.h>
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#include <stdio.h>
|
||||||
|
#include <stdlib.h>
|
||||||
|
#include <string.h>
|
||||||
|
#include <ctype.h>
|
||||||
|
#include <time.h>
|
||||||
|
#include <errno.h>
|
||||||
|
#include "ares.h"
|
||||||
|
#include "ares_private.h"
|
||||||
|
|
||||||
|
static int init_by_options(ares_channel channel, struct ares_options *options,
|
||||||
|
int optmask);
|
||||||
|
static int init_by_environment(ares_channel channel);
|
||||||
|
static int init_by_resolv_conf(ares_channel channel);
|
||||||
|
static int init_by_defaults(ares_channel channel);
|
||||||
|
static int config_domain(ares_channel channel, char *str);
|
||||||
|
static int config_lookup(ares_channel channel, const char *str);
|
||||||
|
static int config_nameserver(struct server_state **servers, int *nservers,
|
||||||
|
const char *str);
|
||||||
|
static int config_sortlist(struct apattern **sortlist, int *nsort,
|
||||||
|
const char *str);
|
||||||
|
static int set_search(ares_channel channel, const char *str);
|
||||||
|
static int set_options(ares_channel channel, const char *str);
|
||||||
|
static char *try_config(char *s, char *opt);
|
||||||
|
static const char *try_option(const char *p, const char *q, const char *opt);
|
||||||
|
static int ip_addr(const char *s, int len, struct in_addr *addr);
|
||||||
|
static void natural_mask(struct apattern *pat);
|
||||||
|
|
||||||
|
int ares_init(ares_channel *channelptr)
|
||||||
|
{
|
||||||
|
return ares_init_options(channelptr, NULL, 0);
|
||||||
|
}
|
||||||
|
|
||||||
|
int ares_init_options(ares_channel *channelptr, struct ares_options *options,
|
||||||
|
int optmask)
|
||||||
|
{
|
||||||
|
ares_channel channel;
|
||||||
|
int i, status;
|
||||||
|
struct server_state *server;
|
||||||
|
struct timeval tv;
|
||||||
|
|
||||||
|
channel = malloc(sizeof(struct ares_channeldata));
|
||||||
|
if (!channel)
|
||||||
|
return ARES_ENOMEM;
|
||||||
|
|
||||||
|
/* Set everything to distinguished values so we know they haven't
|
||||||
|
* been set yet.
|
||||||
|
*/
|
||||||
|
channel->flags = -1;
|
||||||
|
channel->timeout = -1;
|
||||||
|
channel->tries = -1;
|
||||||
|
channel->ndots = -1;
|
||||||
|
channel->udp_port = -1;
|
||||||
|
channel->tcp_port = -1;
|
||||||
|
channel->nservers = -1;
|
||||||
|
channel->ndomains = -1;
|
||||||
|
channel->nsort = -1;
|
||||||
|
channel->lookups = NULL;
|
||||||
|
channel->queries = NULL;
|
||||||
|
|
||||||
|
/* Initialize configuration by each of the four sources, from highest
|
||||||
|
* precedence to lowest.
|
||||||
|
*/
|
||||||
|
status = init_by_options(channel, options, optmask);
|
||||||
|
if (status == ARES_SUCCESS)
|
||||||
|
status = init_by_environment(channel);
|
||||||
|
if (status == ARES_SUCCESS)
|
||||||
|
status = init_by_resolv_conf(channel);
|
||||||
|
if (status == ARES_SUCCESS)
|
||||||
|
status = init_by_defaults(channel);
|
||||||
|
if (status != ARES_SUCCESS)
|
||||||
|
{
|
||||||
|
/* Something failed; clean up memory we may have allocated. */
|
||||||
|
if (channel->nservers != -1)
|
||||||
|
free(channel->servers);
|
||||||
|
if (channel->ndomains != -1)
|
||||||
|
{
|
||||||
|
for (i = 0; i < channel->ndomains; i++)
|
||||||
|
free(channel->domains[i]);
|
||||||
|
free(channel->domains);
|
||||||
|
}
|
||||||
|
if (channel->nsort != -1)
|
||||||
|
free(channel->sortlist);
|
||||||
|
free(channel->lookups);
|
||||||
|
free(channel);
|
||||||
|
return status;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Trim to one server if ARES_FLAG_PRIMARY is set. */
|
||||||
|
if ((channel->flags & ARES_FLAG_PRIMARY) && channel->nservers > 1)
|
||||||
|
channel->nservers = 1;
|
||||||
|
|
||||||
|
/* Initialize server states. */
|
||||||
|
for (i = 0; i < channel->nservers; i++)
|
||||||
|
{
|
||||||
|
server = &channel->servers[i];
|
||||||
|
server->udp_socket = -1;
|
||||||
|
server->tcp_socket = -1;
|
||||||
|
server->tcp_lenbuf_pos = 0;
|
||||||
|
server->tcp_buffer = NULL;
|
||||||
|
server->qhead = NULL;
|
||||||
|
server->qtail = NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Choose a somewhat random query ID. The main point is to avoid
|
||||||
|
* collisions with stale queries. An attacker trying to spoof a DNS
|
||||||
|
* answer also has to guess the query ID, but it's only a 16-bit
|
||||||
|
* field, so there's not much to be done about that.
|
||||||
|
*/
|
||||||
|
gettimeofday(&tv, NULL);
|
||||||
|
channel->next_id = (tv.tv_sec ^ tv.tv_usec ^ getpid()) & 0xffff;
|
||||||
|
|
||||||
|
channel->queries = NULL;
|
||||||
|
|
||||||
|
*channelptr = channel;
|
||||||
|
return ARES_SUCCESS;
|
||||||
|
}
|
||||||
|
|
||||||
|
static int init_by_options(ares_channel channel, struct ares_options *options,
|
||||||
|
int optmask)
|
||||||
|
{
|
||||||
|
int i;
|
||||||
|
|
||||||
|
/* Easy stuff. */
|
||||||
|
if ((optmask & ARES_OPT_FLAGS) && channel->flags == -1)
|
||||||
|
channel->flags = options->flags;
|
||||||
|
if ((optmask & ARES_OPT_TIMEOUT) && channel->timeout == -1)
|
||||||
|
channel->timeout = options->timeout;
|
||||||
|
if ((optmask & ARES_OPT_TRIES) && channel->tries == -1)
|
||||||
|
channel->tries = options->tries;
|
||||||
|
if ((optmask & ARES_OPT_NDOTS) && channel->ndots == -1)
|
||||||
|
channel->ndots = options->ndots;
|
||||||
|
if ((optmask & ARES_OPT_UDP_PORT) && channel->udp_port == -1)
|
||||||
|
channel->udp_port = options->udp_port;
|
||||||
|
if ((optmask & ARES_OPT_TCP_PORT) && channel->tcp_port == -1)
|
||||||
|
channel->tcp_port = options->tcp_port;
|
||||||
|
|
||||||
|
/* Copy the servers, if given. */
|
||||||
|
if ((optmask & ARES_OPT_SERVERS) && channel->nservers == -1)
|
||||||
|
{
|
||||||
|
channel->servers =
|
||||||
|
malloc(options->nservers * sizeof(struct server_state));
|
||||||
|
if (!channel->servers && options->nservers != 0)
|
||||||
|
return ARES_ENOMEM;
|
||||||
|
for (i = 0; i < options->nservers; i++)
|
||||||
|
channel->servers[i].addr = options->servers[i];
|
||||||
|
channel->nservers = options->nservers;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Copy the domains, if given. Keep channel->ndomains consistent so
|
||||||
|
* we can clean up in case of error.
|
||||||
|
*/
|
||||||
|
if ((optmask & ARES_OPT_DOMAINS) && channel->ndomains == -1)
|
||||||
|
{
|
||||||
|
channel->domains = malloc(options->ndomains * sizeof(char *));
|
||||||
|
if (!channel->domains && options->ndomains != 0)
|
||||||
|
return ARES_ENOMEM;
|
||||||
|
for (i = 0; i < options->ndomains; i++)
|
||||||
|
{
|
||||||
|
channel->ndomains = i;
|
||||||
|
channel->domains[i] = strdup(options->domains[i]);
|
||||||
|
if (!channel->domains[i])
|
||||||
|
return ARES_ENOMEM;
|
||||||
|
}
|
||||||
|
channel->ndomains = options->ndomains;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Set lookups, if given. */
|
||||||
|
if ((optmask & ARES_OPT_LOOKUPS) && !channel->lookups)
|
||||||
|
{
|
||||||
|
channel->lookups = strdup(options->lookups);
|
||||||
|
if (!channel->lookups)
|
||||||
|
return ARES_ENOMEM;
|
||||||
|
}
|
||||||
|
|
||||||
|
return ARES_SUCCESS;
|
||||||
|
}
|
||||||
|
|
||||||
|
static int init_by_environment(ares_channel channel)
|
||||||
|
{
|
||||||
|
const char *localdomain, *res_options;
|
||||||
|
int status;
|
||||||
|
|
||||||
|
localdomain = getenv("LOCALDOMAIN");
|
||||||
|
if (localdomain && channel->ndomains == -1)
|
||||||
|
{
|
||||||
|
status = set_search(channel, localdomain);
|
||||||
|
if (status != ARES_SUCCESS)
|
||||||
|
return status;
|
||||||
|
}
|
||||||
|
|
||||||
|
res_options = getenv("RES_OPTIONS");
|
||||||
|
if (res_options)
|
||||||
|
{
|
||||||
|
status = set_options(channel, res_options);
|
||||||
|
if (status != ARES_SUCCESS)
|
||||||
|
return status;
|
||||||
|
}
|
||||||
|
|
||||||
|
return ARES_SUCCESS;
|
||||||
|
}
|
||||||
|
#ifdef WIN32
|
||||||
|
static int get_res_size_nt(HKEY hKey, char *subkey, int *size)
|
||||||
|
{
|
||||||
|
return RegQueryValueEx(hKey, subkey, 0, NULL, NULL, size);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Warning: returns a dynamically allocated buffer, the user MUST
|
||||||
|
* use free() if the function returns 1
|
||||||
|
*/
|
||||||
|
static int get_res_nt(HKEY hKey, char *subkey, char **obuf)
|
||||||
|
{
|
||||||
|
/* Test for the size we need */
|
||||||
|
int size = 0;
|
||||||
|
int result;
|
||||||
|
result = RegQueryValueEx(hKey, subkey, 0, NULL, NULL, &size);
|
||||||
|
if ((result != ERROR_SUCCESS && result != ERROR_MORE_DATA) || !size)
|
||||||
|
return 0;
|
||||||
|
*obuf = malloc(size+1);
|
||||||
|
|
||||||
|
if (RegQueryValueEx(hKey, subkey, 0, NULL, *obuf, &size) != ERROR_SUCCESS)
|
||||||
|
{
|
||||||
|
free(*obuf);
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
if (size == 1)
|
||||||
|
{
|
||||||
|
free(*obuf);
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
static int get_res_interfaces_nt(HKEY hKey, char *subkey, char **obuf)
|
||||||
|
{
|
||||||
|
char enumbuf[39]; /* GUIDs are 38 chars + 1 for NULL */
|
||||||
|
int enum_size = 39;
|
||||||
|
int idx = 0;
|
||||||
|
HKEY hVal;
|
||||||
|
while (RegEnumKeyEx(hKey, idx++, enumbuf, &enum_size, 0, NULL, NULL, NULL) != ERROR_NO_MORE_ITEMS)
|
||||||
|
{
|
||||||
|
enum_size = 39;
|
||||||
|
if (RegOpenKeyEx(hKey, enumbuf, 0, KEY_QUERY_VALUE, &hVal) != ERROR_SUCCESS)
|
||||||
|
continue;
|
||||||
|
if (!get_res_nt(hVal, subkey, obuf))
|
||||||
|
RegCloseKey(hVal);
|
||||||
|
else
|
||||||
|
{
|
||||||
|
RegCloseKey(hVal);
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
static int init_by_resolv_conf(ares_channel channel)
|
||||||
|
{
|
||||||
|
FILE *fp;
|
||||||
|
char *line = NULL, *p;
|
||||||
|
int linesize, status, nservers = 0, nsort = 0;
|
||||||
|
struct server_state *servers = NULL;
|
||||||
|
struct apattern *sortlist = NULL;
|
||||||
|
|
||||||
|
#ifdef WIN32
|
||||||
|
|
||||||
|
/*
|
||||||
|
NameServer Registry:
|
||||||
|
|
||||||
|
On Windows 9X, the DNS server can be found in:
|
||||||
|
HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services\VxD\MSTCP\NameServer
|
||||||
|
|
||||||
|
On Windows NT/2000/XP/2003:
|
||||||
|
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters\NameServer
|
||||||
|
or
|
||||||
|
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters\DhcpNameServer
|
||||||
|
or
|
||||||
|
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters\{AdapterID}\
|
||||||
|
NameServer
|
||||||
|
or
|
||||||
|
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters\{AdapterID}\
|
||||||
|
DhcpNameServer
|
||||||
|
*/
|
||||||
|
|
||||||
|
HKEY mykey;
|
||||||
|
HKEY subkey;
|
||||||
|
DWORD data_type;
|
||||||
|
DWORD bytes;
|
||||||
|
DWORD result;
|
||||||
|
DWORD index;
|
||||||
|
char name[MAX_PATH];
|
||||||
|
DWORD keysize = MAX_PATH;
|
||||||
|
|
||||||
|
status = ARES_EFILE;
|
||||||
|
|
||||||
|
if (IsNT)
|
||||||
|
{
|
||||||
|
if (RegOpenKeyEx(
|
||||||
|
HKEY_LOCAL_MACHINE, WIN_NS_NT_KEY, 0,
|
||||||
|
KEY_READ, &mykey
|
||||||
|
) == ERROR_SUCCESS)
|
||||||
|
{
|
||||||
|
RegOpenKeyEx(mykey, "Interfaces", 0, KEY_QUERY_VALUE|KEY_ENUMERATE_SUB_KEYS, &subkey);
|
||||||
|
if (get_res_nt(mykey, NAMESERVER, &line))
|
||||||
|
{
|
||||||
|
status = config_nameserver(&servers, &nservers, line);
|
||||||
|
free(line);
|
||||||
|
}
|
||||||
|
else if (get_res_nt(mykey, DHCPNAMESERVER, &line))
|
||||||
|
{
|
||||||
|
status = config_nameserver(&servers, &nservers, line);
|
||||||
|
free(line);
|
||||||
|
}
|
||||||
|
/* Try the interfaces */
|
||||||
|
else if (get_res_interfaces_nt(subkey, NAMESERVER, &line))
|
||||||
|
{
|
||||||
|
status = config_nameserver(&servers, &nservers, line);
|
||||||
|
free(line);
|
||||||
|
}
|
||||||
|
else if (get_res_interfaces_nt(subkey, DHCPNAMESERVER, &line))
|
||||||
|
{
|
||||||
|
status = config_nameserver(&servers, &nservers, line);
|
||||||
|
free(line);
|
||||||
|
}
|
||||||
|
RegCloseKey(subkey);
|
||||||
|
RegCloseKey(mykey);
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
if (RegOpenKeyEx(
|
||||||
|
HKEY_LOCAL_MACHINE, WIN_NS_9X, 0,
|
||||||
|
KEY_READ, &mykey
|
||||||
|
) == ERROR_SUCCESS)
|
||||||
|
{
|
||||||
|
if ((result = RegQueryValueEx(
|
||||||
|
mykey, NAMESERVER, NULL, &data_type,
|
||||||
|
NULL, &bytes
|
||||||
|
)
|
||||||
|
) == ERROR_SUCCESS ||
|
||||||
|
result == ERROR_MORE_DATA)
|
||||||
|
{
|
||||||
|
if (bytes) {
|
||||||
|
line = (char *)malloc(bytes+1);
|
||||||
|
if (RegQueryValueEx(
|
||||||
|
mykey, NAMESERVER, NULL, &data_type,
|
||||||
|
(unsigned char *)line, &bytes
|
||||||
|
) == ERROR_SUCCESS) {
|
||||||
|
status = config_nameserver(&servers, &nservers, line);
|
||||||
|
}
|
||||||
|
free(line);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
RegCloseKey(mykey);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (status != ARES_EFILE) {
|
||||||
|
/*
|
||||||
|
if (!channel->lookups) {
|
||||||
|
status = config_lookup(channel, "file bind");
|
||||||
|
}
|
||||||
|
*/
|
||||||
|
status = ARES_EOF;
|
||||||
|
}
|
||||||
|
|
||||||
|
#elif defined(riscos)
|
||||||
|
|
||||||
|
/* Under RISC OS, name servers are listed in the
|
||||||
|
system variable Inet$Resolvers, space separated. */
|
||||||
|
|
||||||
|
line = getenv("Inet$Resolvers");
|
||||||
|
status = ARES_EFILE;
|
||||||
|
if (line) {
|
||||||
|
char *resolvers = strdup(line), *pos, *space;
|
||||||
|
|
||||||
|
if (!resolvers)
|
||||||
|
return ARES_ENOMEM;
|
||||||
|
|
||||||
|
pos = resolvers;
|
||||||
|
do {
|
||||||
|
space = strchr(pos, ' ');
|
||||||
|
if (space)
|
||||||
|
*space = 0;
|
||||||
|
status = config_nameserver(&servers, &nservers, pos);
|
||||||
|
if (status != ARES_SUCCESS)
|
||||||
|
break;
|
||||||
|
pos = space + 1;
|
||||||
|
} while (space);
|
||||||
|
|
||||||
|
if (status == ARES_SUCCESS)
|
||||||
|
status = ARES_EOF;
|
||||||
|
|
||||||
|
free(resolvers);
|
||||||
|
}
|
||||||
|
|
||||||
|
#else
|
||||||
|
|
||||||
|
fp = fopen(PATH_RESOLV_CONF, "r");
|
||||||
|
if (!fp)
|
||||||
|
return (errno == ENOENT) ? ARES_SUCCESS : ARES_EFILE;
|
||||||
|
while ((status = ares__read_line(fp, &line, &linesize)) == ARES_SUCCESS)
|
||||||
|
{
|
||||||
|
if ((p = try_config(line, "domain")) && channel->ndomains == -1)
|
||||||
|
status = config_domain(channel, p);
|
||||||
|
else if ((p = try_config(line, "lookup")) && !channel->lookups)
|
||||||
|
status = config_lookup(channel, p);
|
||||||
|
else if ((p = try_config(line, "search")) && channel->ndomains == -1)
|
||||||
|
status = set_search(channel, p);
|
||||||
|
else if ((p = try_config(line, "nameserver")) && channel->nservers == -1)
|
||||||
|
status = config_nameserver(&servers, &nservers, p);
|
||||||
|
else if ((p = try_config(line, "sortlist")) && channel->nsort == -1)
|
||||||
|
status = config_sortlist(&sortlist, &nsort, p);
|
||||||
|
else if ((p = try_config(line, "options")))
|
||||||
|
status = set_options(channel, p);
|
||||||
|
else
|
||||||
|
status = ARES_SUCCESS;
|
||||||
|
if (status != ARES_SUCCESS)
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
free(line);
|
||||||
|
fclose(fp);
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/* Handle errors. */
|
||||||
|
if (status != ARES_EOF)
|
||||||
|
{
|
||||||
|
if (servers != NULL) free(servers);
|
||||||
|
if (sortlist != NULL) free(sortlist);
|
||||||
|
return status;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* If we got any name server entries, fill them in. */
|
||||||
|
if (servers)
|
||||||
|
{
|
||||||
|
channel->servers = servers;
|
||||||
|
channel->nservers = nservers;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* If we got any sortlist entries, fill them in. */
|
||||||
|
if (sortlist)
|
||||||
|
{
|
||||||
|
channel->sortlist = sortlist;
|
||||||
|
channel->nsort = nsort;
|
||||||
|
}
|
||||||
|
|
||||||
|
return ARES_SUCCESS;
|
||||||
|
}
|
||||||
|
|
||||||
|
static int init_by_defaults(ares_channel channel)
|
||||||
|
{
|
||||||
|
char hostname[MAXHOSTNAMELEN + 1];
|
||||||
|
|
||||||
|
if (channel->flags == -1)
|
||||||
|
channel->flags = 0;
|
||||||
|
if (channel->timeout == -1)
|
||||||
|
channel->timeout = DEFAULT_TIMEOUT;
|
||||||
|
if (channel->tries == -1)
|
||||||
|
channel->tries = DEFAULT_TRIES;
|
||||||
|
if (channel->ndots == -1)
|
||||||
|
channel->ndots = 1;
|
||||||
|
if (channel->udp_port == -1)
|
||||||
|
channel->udp_port = htons(NAMESERVER_PORT);
|
||||||
|
if (channel->tcp_port == -1)
|
||||||
|
channel->tcp_port = htons(NAMESERVER_PORT);
|
||||||
|
|
||||||
|
if (channel->nservers == -1)
|
||||||
|
{
|
||||||
|
/* If nobody specified servers, try a local named. */
|
||||||
|
channel->servers = malloc(sizeof(struct server_state));
|
||||||
|
if (!channel->servers)
|
||||||
|
return ARES_ENOMEM;
|
||||||
|
channel->servers[0].addr.s_addr = htonl(INADDR_LOOPBACK);
|
||||||
|
channel->nservers = 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (channel->ndomains == -1)
|
||||||
|
{
|
||||||
|
/* Derive a default domain search list from the kernel hostname,
|
||||||
|
* or set it to empty if the hostname isn't helpful.
|
||||||
|
*/
|
||||||
|
if (gethostname(hostname, sizeof(hostname)) == -1
|
||||||
|
|| !strchr(hostname, '.'))
|
||||||
|
{
|
||||||
|
channel->domains = malloc(0);
|
||||||
|
channel->ndomains = 0;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
channel->domains = malloc(sizeof(char *));
|
||||||
|
if (!channel->domains)
|
||||||
|
return ARES_ENOMEM;
|
||||||
|
channel->ndomains = 0;
|
||||||
|
channel->domains[0] = strdup(strchr(hostname, '.') + 1);
|
||||||
|
if (!channel->domains[0])
|
||||||
|
return ARES_ENOMEM;
|
||||||
|
channel->ndomains = 1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (channel->nsort == -1)
|
||||||
|
{
|
||||||
|
channel->sortlist = NULL;
|
||||||
|
channel->nsort = 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!channel->lookups)
|
||||||
|
{
|
||||||
|
channel->lookups = strdup("bf");
|
||||||
|
if (!channel->lookups)
|
||||||
|
return ARES_ENOMEM;
|
||||||
|
}
|
||||||
|
|
||||||
|
return ARES_SUCCESS;
|
||||||
|
}
|
||||||
|
|
||||||
|
static int config_domain(ares_channel channel, char *str)
|
||||||
|
{
|
||||||
|
char *q;
|
||||||
|
|
||||||
|
/* Set a single search domain. */
|
||||||
|
q = str;
|
||||||
|
while (*q && !isspace((unsigned char)*q))
|
||||||
|
q++;
|
||||||
|
*q = 0;
|
||||||
|
return set_search(channel, str);
|
||||||
|
}
|
||||||
|
|
||||||
|
static int config_lookup(ares_channel channel, const char *str)
|
||||||
|
{
|
||||||
|
char lookups[3], *l;
|
||||||
|
const char *p;
|
||||||
|
|
||||||
|
/* Set the lookup order. Only the first letter of each work
|
||||||
|
* is relevant, and it has to be "b" for DNS or "f" for the
|
||||||
|
* host file. Ignore everything else.
|
||||||
|
*/
|
||||||
|
l = lookups;
|
||||||
|
p = str;
|
||||||
|
while (*p)
|
||||||
|
{
|
||||||
|
if ((*p == 'b' || *p == 'f') && l < lookups + 2)
|
||||||
|
*l++ = *p;
|
||||||
|
while (*p && !isspace((unsigned char)*p))
|
||||||
|
p++;
|
||||||
|
while (isspace((unsigned char)*p))
|
||||||
|
p++;
|
||||||
|
}
|
||||||
|
*l = 0;
|
||||||
|
channel->lookups = strdup(lookups);
|
||||||
|
return (channel->lookups) ? ARES_SUCCESS : ARES_ENOMEM;
|
||||||
|
}
|
||||||
|
|
||||||
|
static int config_nameserver(struct server_state **servers, int *nservers,
|
||||||
|
const char *str)
|
||||||
|
{
|
||||||
|
struct in_addr addr;
|
||||||
|
struct server_state *newserv;
|
||||||
|
|
||||||
|
/* Add a nameserver entry, if this is a valid address. */
|
||||||
|
addr.s_addr = inet_addr(str);
|
||||||
|
if (addr.s_addr == INADDR_NONE)
|
||||||
|
return ARES_SUCCESS;
|
||||||
|
newserv = realloc(*servers, (*nservers + 1) * sizeof(struct server_state));
|
||||||
|
if (!newserv)
|
||||||
|
return ARES_ENOMEM;
|
||||||
|
newserv[*nservers].addr = addr;
|
||||||
|
*servers = newserv;
|
||||||
|
(*nservers)++;
|
||||||
|
return ARES_SUCCESS;
|
||||||
|
}
|
||||||
|
|
||||||
|
static int config_sortlist(struct apattern **sortlist, int *nsort,
|
||||||
|
const char *str)
|
||||||
|
{
|
||||||
|
struct apattern pat, *newsort;
|
||||||
|
const char *q;
|
||||||
|
|
||||||
|
/* Add sortlist entries. */
|
||||||
|
while (*str && *str != ';')
|
||||||
|
{
|
||||||
|
q = str;
|
||||||
|
while (*q && *q != '/' && *q != ';' && !isspace((unsigned char)*q))
|
||||||
|
q++;
|
||||||
|
if (ip_addr(str, q - str, &pat.addr) == 0)
|
||||||
|
{
|
||||||
|
/* We have a pattern address; now determine the mask. */
|
||||||
|
if (*q == '/')
|
||||||
|
{
|
||||||
|
str = q + 1;
|
||||||
|
while (*q && *q != ';' && !isspace((unsigned char)*q))
|
||||||
|
q++;
|
||||||
|
if (ip_addr(str, q - str, &pat.mask) != 0)
|
||||||
|
natural_mask(&pat);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
natural_mask(&pat);
|
||||||
|
|
||||||
|
/* Add this pattern to our list. */
|
||||||
|
newsort = realloc(*sortlist, (*nsort + 1) * sizeof(struct apattern));
|
||||||
|
if (!newsort)
|
||||||
|
return ARES_ENOMEM;
|
||||||
|
newsort[*nsort] = pat;
|
||||||
|
*sortlist = newsort;
|
||||||
|
(*nsort)++;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
while (*q && *q != ';' && !isspace((unsigned char)*q))
|
||||||
|
q++;
|
||||||
|
}
|
||||||
|
str = q;
|
||||||
|
while (isspace((unsigned char)*str))
|
||||||
|
str++;
|
||||||
|
}
|
||||||
|
|
||||||
|
return ARES_SUCCESS;
|
||||||
|
}
|
||||||
|
|
||||||
|
static int set_search(ares_channel channel, const char *str)
|
||||||
|
{
|
||||||
|
int n;
|
||||||
|
const char *p, *q;
|
||||||
|
|
||||||
|
/* Count the domains given. */
|
||||||
|
n = 0;
|
||||||
|
p = str;
|
||||||
|
while (*p)
|
||||||
|
{
|
||||||
|
while (*p && !isspace((unsigned char)*p))
|
||||||
|
p++;
|
||||||
|
while (isspace((unsigned char)*p))
|
||||||
|
p++;
|
||||||
|
n++;
|
||||||
|
}
|
||||||
|
|
||||||
|
channel->domains = malloc(n * sizeof(char *));
|
||||||
|
if (!channel->domains && n)
|
||||||
|
return ARES_ENOMEM;
|
||||||
|
|
||||||
|
/* Now copy the domains. */
|
||||||
|
n = 0;
|
||||||
|
p = str;
|
||||||
|
while (*p)
|
||||||
|
{
|
||||||
|
channel->ndomains = n;
|
||||||
|
q = p;
|
||||||
|
while (*q && !isspace((unsigned char)*q))
|
||||||
|
q++;
|
||||||
|
channel->domains[n] = malloc(q - p + 1);
|
||||||
|
if (!channel->domains[n])
|
||||||
|
return ARES_ENOMEM;
|
||||||
|
memcpy(channel->domains[n], p, q - p);
|
||||||
|
channel->domains[n][q - p] = 0;
|
||||||
|
p = q;
|
||||||
|
while (isspace((unsigned char)*p))
|
||||||
|
p++;
|
||||||
|
n++;
|
||||||
|
}
|
||||||
|
channel->ndomains = n;
|
||||||
|
|
||||||
|
return ARES_SUCCESS;
|
||||||
|
}
|
||||||
|
|
||||||
|
static int set_options(ares_channel channel, const char *str)
|
||||||
|
{
|
||||||
|
const char *p, *q, *val;
|
||||||
|
|
||||||
|
p = str;
|
||||||
|
while (*p)
|
||||||
|
{
|
||||||
|
q = p;
|
||||||
|
while (*q && !isspace((unsigned char)*q))
|
||||||
|
q++;
|
||||||
|
val = try_option(p, q, "ndots:");
|
||||||
|
if (val && channel->ndots == -1)
|
||||||
|
channel->ndots = atoi(val);
|
||||||
|
val = try_option(p, q, "retrans:");
|
||||||
|
if (val && channel->timeout == -1)
|
||||||
|
channel->timeout = atoi(val);
|
||||||
|
val = try_option(p, q, "retry:");
|
||||||
|
if (val && channel->tries == -1)
|
||||||
|
channel->tries = atoi(val);
|
||||||
|
p = q;
|
||||||
|
while (isspace((unsigned char)*p))
|
||||||
|
p++;
|
||||||
|
}
|
||||||
|
|
||||||
|
return ARES_SUCCESS;
|
||||||
|
}
|
||||||
|
|
||||||
|
static char *try_config(char *s, char *opt)
|
||||||
|
{
|
||||||
|
int len;
|
||||||
|
|
||||||
|
len = strlen(opt);
|
||||||
|
if (strncmp(s, opt, len) != 0 || !isspace((unsigned char)s[len]))
|
||||||
|
return NULL;
|
||||||
|
s += len;
|
||||||
|
while (isspace((unsigned char)*s))
|
||||||
|
s++;
|
||||||
|
return s;
|
||||||
|
}
|
||||||
|
|
||||||
|
static const char *try_option(const char *p, const char *q, const char *opt)
|
||||||
|
{
|
||||||
|
int len;
|
||||||
|
|
||||||
|
len = strlen(opt);
|
||||||
|
return (q - p > len && strncmp(p, opt, len) == 0) ? p + len : NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
static int ip_addr(const char *s, int len, struct in_addr *addr)
|
||||||
|
{
|
||||||
|
char ipbuf[16];
|
||||||
|
|
||||||
|
/* Four octets and three periods yields at most 15 characters. */
|
||||||
|
if (len > 15)
|
||||||
|
return -1;
|
||||||
|
memcpy(ipbuf, s, len);
|
||||||
|
ipbuf[len] = 0;
|
||||||
|
|
||||||
|
addr->s_addr = inet_addr(ipbuf);
|
||||||
|
if (addr->s_addr == INADDR_NONE && strcmp(ipbuf, "255.255.255.255") != 0)
|
||||||
|
return -1;
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
static void natural_mask(struct apattern *pat)
|
||||||
|
{
|
||||||
|
struct in_addr addr;
|
||||||
|
|
||||||
|
/* Store a host-byte-order copy of pat in a struct in_addr. Icky,
|
||||||
|
* but portable.
|
||||||
|
*/
|
||||||
|
addr.s_addr = ntohl(pat->addr.s_addr);
|
||||||
|
|
||||||
|
/* This is out of date in the CIDR world, but some people might
|
||||||
|
* still rely on it.
|
||||||
|
*/
|
||||||
|
if (IN_CLASSA(addr.s_addr))
|
||||||
|
pat->mask.s_addr = htonl(IN_CLASSA_NET);
|
||||||
|
else if (IN_CLASSB(addr.s_addr))
|
||||||
|
pat->mask.s_addr = htonl(IN_CLASSB_NET);
|
||||||
|
else
|
||||||
|
pat->mask.s_addr = htonl(IN_CLASSC_NET);
|
||||||
|
}
|
||||||
2
ares/ares_init_options.3
Normal file
2
ares/ares_init_options.3
Normal file
@@ -0,0 +1,2 @@
|
|||||||
|
.so man3/ares_init.3
|
||||||
|
.\" $Id$
|
||||||
79
ares/ares_mkquery.3
Normal file
79
ares/ares_mkquery.3
Normal file
@@ -0,0 +1,79 @@
|
|||||||
|
.\" $Id$
|
||||||
|
.\"
|
||||||
|
.\" Copyright 1998, 2000 by the Massachusetts Institute of Technology.
|
||||||
|
.\"
|
||||||
|
.\" Permission to use, copy, modify, and distribute this
|
||||||
|
.\" software and its documentation for any purpose and without
|
||||||
|
.\" fee is hereby granted, provided that the above copyright
|
||||||
|
.\" notice appear in all copies and that both that copyright
|
||||||
|
.\" notice and this permission notice appear in supporting
|
||||||
|
.\" documentation, and that the name of M.I.T. not be used in
|
||||||
|
.\" advertising or publicity pertaining to distribution of the
|
||||||
|
.\" software without specific, written prior permission.
|
||||||
|
.\" M.I.T. makes no representations about the suitability of
|
||||||
|
.\" this software for any purpose. It is provided "as is"
|
||||||
|
.\" without express or implied warranty.
|
||||||
|
.\"
|
||||||
|
.TH ARES_MKQUERY 3 "4 January 2000"
|
||||||
|
.SH NAME
|
||||||
|
ares_mkquery \- Compose a single-question DNS query buffer
|
||||||
|
.SH SYNOPSIS
|
||||||
|
.nf
|
||||||
|
.B #include <ares.h>
|
||||||
|
.PP
|
||||||
|
.B
|
||||||
|
int ares_mkquery(const char *\fIname\fP, int \fIdnsclass\fP, int \fItype\fP,
|
||||||
|
.B
|
||||||
|
unsigned short \fIid\fP, int \fIrd\fP, char **\fIbuf\fP,
|
||||||
|
int *\fIbuflen\fP)
|
||||||
|
.fi
|
||||||
|
.SH DESCRIPTION
|
||||||
|
The
|
||||||
|
.B ares_mkquery
|
||||||
|
function composes a DNS query with a single question.
|
||||||
|
The parameter
|
||||||
|
.I name
|
||||||
|
gives the query name as a NUL-terminated C string of period-separated
|
||||||
|
labels optionally ending with a period; periods and backslashes within
|
||||||
|
a label must be escaped with a backlash. The parameters
|
||||||
|
.I dnsclass
|
||||||
|
and
|
||||||
|
.I type
|
||||||
|
give the class and type of the query using the values defined in
|
||||||
|
.BR <arpa/nameser.h> .
|
||||||
|
The parameter
|
||||||
|
.I id
|
||||||
|
gives a 16-bit identifier for the query. The parameter
|
||||||
|
.I rd
|
||||||
|
should be nonzero if recursion is desired, zero if not. The query
|
||||||
|
will be placed in an allocated buffer, a pointer to which will be
|
||||||
|
stored in the variable pointed to by
|
||||||
|
.IR buf ,
|
||||||
|
and the length of which will be stored in the variable pointed to by
|
||||||
|
.IR buflen .
|
||||||
|
It is the caller's responsibility to free this buffer using
|
||||||
|
.B ares_free_string
|
||||||
|
when it is no longer needed.
|
||||||
|
.SH RETURN VALUES
|
||||||
|
.B ares_mkquery
|
||||||
|
can return any of the following values:
|
||||||
|
.TP 15
|
||||||
|
.B ARES_SUCCESS
|
||||||
|
Construction of the DNS query succeeded.
|
||||||
|
.TP 15
|
||||||
|
.B ARES_EBADNAME
|
||||||
|
The query name
|
||||||
|
.I name
|
||||||
|
could not be encoded as a domain name, either because it contained a
|
||||||
|
zero-length label or because it contained a label of more than 63
|
||||||
|
characters.
|
||||||
|
.TP 15
|
||||||
|
.B ARES_ENOMEM
|
||||||
|
Memory was exhausted.
|
||||||
|
.SH SEE ALSO
|
||||||
|
.BR ares_expand_name (3),
|
||||||
|
.BR ares_free_string (3)
|
||||||
|
.SH AUTHOR
|
||||||
|
Greg Hudson, MIT Information Systems
|
||||||
|
.br
|
||||||
|
Copyright 1998, 2000 by the Massachusetts Institute of Technology.
|
||||||
161
ares/ares_mkquery.c
Normal file
161
ares/ares_mkquery.c
Normal file
@@ -0,0 +1,161 @@
|
|||||||
|
/* Copyright 1998 by the Massachusetts Institute of Technology.
|
||||||
|
*
|
||||||
|
* Permission to use, copy, modify, and distribute this
|
||||||
|
* software and its documentation for any purpose and without
|
||||||
|
* fee is hereby granted, provided that the above copyright
|
||||||
|
* notice appear in all copies and that both that copyright
|
||||||
|
* notice and this permission notice appear in supporting
|
||||||
|
* documentation, and that the name of M.I.T. not be used in
|
||||||
|
* advertising or publicity pertaining to distribution of the
|
||||||
|
* software without specific, written prior permission.
|
||||||
|
* M.I.T. makes no representations about the suitability of
|
||||||
|
* this software for any purpose. It is provided "as is"
|
||||||
|
* without express or implied warranty.
|
||||||
|
*/
|
||||||
|
|
||||||
|
static const char rcsid[] = "$Id$";
|
||||||
|
|
||||||
|
#include <sys/types.h>
|
||||||
|
|
||||||
|
#ifdef WIN32
|
||||||
|
#include "nameser.h"
|
||||||
|
#else
|
||||||
|
#include <netinet/in.h>
|
||||||
|
#include <arpa/nameser.h>
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#include <stdlib.h>
|
||||||
|
#include <string.h>
|
||||||
|
#include "ares.h"
|
||||||
|
#include "ares_dns.h"
|
||||||
|
|
||||||
|
/* Header format, from RFC 1035:
|
||||||
|
* 1 1 1 1 1 1
|
||||||
|
* 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5
|
||||||
|
* +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
|
||||||
|
* | ID |
|
||||||
|
* +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
|
||||||
|
* |QR| Opcode |AA|TC|RD|RA| Z | RCODE |
|
||||||
|
* +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
|
||||||
|
* | QDCOUNT |
|
||||||
|
* +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
|
||||||
|
* | ANCOUNT |
|
||||||
|
* +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
|
||||||
|
* | NSCOUNT |
|
||||||
|
* +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
|
||||||
|
* | ARCOUNT |
|
||||||
|
* +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
|
||||||
|
*
|
||||||
|
* AA, TC, RA, and RCODE are only set in responses. Brief description
|
||||||
|
* of the remaining fields:
|
||||||
|
* ID Identifier to match responses with queries
|
||||||
|
* QR Query (0) or response (1)
|
||||||
|
* Opcode For our purposes, always QUERY
|
||||||
|
* RD Recursion desired
|
||||||
|
* Z Reserved (zero)
|
||||||
|
* QDCOUNT Number of queries
|
||||||
|
* ANCOUNT Number of answers
|
||||||
|
* NSCOUNT Number of name server records
|
||||||
|
* ARCOUNT Number of additional records
|
||||||
|
*
|
||||||
|
* Question format, from RFC 1035:
|
||||||
|
* 1 1 1 1 1 1
|
||||||
|
* 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5
|
||||||
|
* +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
|
||||||
|
* | |
|
||||||
|
* / QNAME /
|
||||||
|
* / /
|
||||||
|
* +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
|
||||||
|
* | QTYPE |
|
||||||
|
* +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
|
||||||
|
* | QCLASS |
|
||||||
|
* +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
|
||||||
|
*
|
||||||
|
* The query name is encoded as a series of labels, each represented
|
||||||
|
* as a one-byte length (maximum 63) followed by the text of the
|
||||||
|
* label. The list is terminated by a label of length zero (which can
|
||||||
|
* be thought of as the root domain).
|
||||||
|
*/
|
||||||
|
|
||||||
|
int ares_mkquery(const char *name, int dnsclass, int type, unsigned short id,
|
||||||
|
int rd, unsigned char **buf, int *buflen)
|
||||||
|
{
|
||||||
|
int len;
|
||||||
|
unsigned char *q;
|
||||||
|
const char *p;
|
||||||
|
|
||||||
|
/* Compute the length of the encoded name so we can check buflen.
|
||||||
|
* Start counting at 1 for the zero-length label at the end. */
|
||||||
|
len = 1;
|
||||||
|
for (p = name; *p; p++)
|
||||||
|
{
|
||||||
|
if (*p == '\\' && *(p + 1) != 0)
|
||||||
|
p++;
|
||||||
|
len++;
|
||||||
|
}
|
||||||
|
/* If there are n periods in the name, there are n + 1 labels, and
|
||||||
|
* thus n + 1 length fields, unless the name is empty or ends with a
|
||||||
|
* period. So add 1 unless name is empty or ends with a period.
|
||||||
|
*/
|
||||||
|
if (*name && *(p - 1) != '.')
|
||||||
|
len++;
|
||||||
|
|
||||||
|
*buflen = len + HFIXEDSZ + QFIXEDSZ;
|
||||||
|
*buf = malloc(*buflen);
|
||||||
|
if (!*buf)
|
||||||
|
return ARES_ENOMEM;
|
||||||
|
|
||||||
|
/* Set up the header. */
|
||||||
|
q = *buf;
|
||||||
|
memset(q, 0, HFIXEDSZ);
|
||||||
|
DNS_HEADER_SET_QID(q, id);
|
||||||
|
DNS_HEADER_SET_OPCODE(q, QUERY);
|
||||||
|
DNS_HEADER_SET_RD(q, (rd) ? 1 : 0);
|
||||||
|
DNS_HEADER_SET_QDCOUNT(q, 1);
|
||||||
|
|
||||||
|
/* A name of "." is a screw case for the loop below, so adjust it. */
|
||||||
|
if (strcmp(name, ".") == 0)
|
||||||
|
name++;
|
||||||
|
|
||||||
|
/* Start writing out the name after the header. */
|
||||||
|
q += HFIXEDSZ;
|
||||||
|
while (*name)
|
||||||
|
{
|
||||||
|
if (*name == '.')
|
||||||
|
return ARES_EBADNAME;
|
||||||
|
|
||||||
|
/* Count the number of bytes in this label. */
|
||||||
|
len = 0;
|
||||||
|
for (p = name; *p && *p != '.'; p++)
|
||||||
|
{
|
||||||
|
if (*p == '\\' && *(p + 1) != 0)
|
||||||
|
p++;
|
||||||
|
len++;
|
||||||
|
}
|
||||||
|
if (len > MAXLABEL)
|
||||||
|
return ARES_EBADNAME;
|
||||||
|
|
||||||
|
/* Encode the length and copy the data. */
|
||||||
|
*q++ = len;
|
||||||
|
for (p = name; *p && *p != '.'; p++)
|
||||||
|
{
|
||||||
|
if (*p == '\\' && *(p + 1) != 0)
|
||||||
|
p++;
|
||||||
|
*q++ = *p;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Go to the next label and repeat, unless we hit the end. */
|
||||||
|
if (!*p)
|
||||||
|
break;
|
||||||
|
name = p + 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Add the zero-length label at the end. */
|
||||||
|
*q++ = 0;
|
||||||
|
|
||||||
|
/* Finish off the question with the type and class. */
|
||||||
|
DNS_QUESTION_SET_TYPE(q, type);
|
||||||
|
DNS_QUESTION_SET_CLASS(q, dnsclass);
|
||||||
|
|
||||||
|
return ARES_SUCCESS;
|
||||||
|
}
|
||||||
65
ares/ares_parse_a_reply.3
Normal file
65
ares/ares_parse_a_reply.3
Normal file
@@ -0,0 +1,65 @@
|
|||||||
|
.\" $Id$
|
||||||
|
.\"
|
||||||
|
.\" Copyright 1998 by the Massachusetts Institute of Technology.
|
||||||
|
.\"
|
||||||
|
.\" Permission to use, copy, modify, and distribute this
|
||||||
|
.\" software and its documentation for any purpose and without
|
||||||
|
.\" fee is hereby granted, provided that the above copyright
|
||||||
|
.\" notice appear in all copies and that both that copyright
|
||||||
|
.\" notice and this permission notice appear in supporting
|
||||||
|
.\" documentation, and that the name of M.I.T. not be used in
|
||||||
|
.\" advertising or publicity pertaining to distribution of the
|
||||||
|
.\" software without specific, written prior permission.
|
||||||
|
.\" M.I.T. makes no representations about the suitability of
|
||||||
|
.\" this software for any purpose. It is provided "as is"
|
||||||
|
.\" without express or implied warranty.
|
||||||
|
.\"
|
||||||
|
.TH ARES_PARSE_A_REPLY 3 "25 July 1998"
|
||||||
|
.SH NAME
|
||||||
|
ares_parse_a_reply \- Parse a reply to a DNS query of type A into a hostent
|
||||||
|
.SH SYNOPSIS
|
||||||
|
.nf
|
||||||
|
.B #include <ares.h>
|
||||||
|
.PP
|
||||||
|
.B
|
||||||
|
int ares_parse_a_reply(const unsigned char *\fIabuf\fB, int \fIalen\fB,
|
||||||
|
.B struct hostent **\fIhost\fB);
|
||||||
|
.fi
|
||||||
|
.SH DESCRIPTION
|
||||||
|
The
|
||||||
|
.B ares_parse_a_reply
|
||||||
|
function parses the response to a query of type A into a
|
||||||
|
.BR "struct hostent" .
|
||||||
|
The parameters
|
||||||
|
.I abuf
|
||||||
|
and
|
||||||
|
.I alen
|
||||||
|
give the contents of the response. The result is stored in allocated
|
||||||
|
memory and a pointer to it stored into the variable pointed to by
|
||||||
|
.IR host .
|
||||||
|
It is the caller's responsibility to free the resulting host structure
|
||||||
|
using
|
||||||
|
.BR ares_free_hostent (3)
|
||||||
|
when it is no longer needed.
|
||||||
|
.SH RETURN VALUES
|
||||||
|
.B ares_parse_a_reply
|
||||||
|
can return any of the following values:
|
||||||
|
.TP 15
|
||||||
|
.B ARES_SUCCESS
|
||||||
|
The response was successfully parsed.
|
||||||
|
.TP 15
|
||||||
|
.B ARES_EBADRESP
|
||||||
|
The response was malformatted.
|
||||||
|
.TP 15
|
||||||
|
.B ARES_ENODATA
|
||||||
|
The response did not contain an answer to the query.
|
||||||
|
.TP 15
|
||||||
|
.B ARES_ENOMEM
|
||||||
|
Memory was exhausted.
|
||||||
|
.SH SEE ALSO
|
||||||
|
.BR ares_gethostbyname (3),
|
||||||
|
.BR ares_free_hostent (3)
|
||||||
|
.SH AUTHOR
|
||||||
|
Greg Hudson, MIT Information Systems
|
||||||
|
.br
|
||||||
|
Copyright 1998 by the Massachusetts Institute of Technology.
|
||||||
173
ares/ares_parse_a_reply.c
Normal file
173
ares/ares_parse_a_reply.c
Normal file
@@ -0,0 +1,173 @@
|
|||||||
|
/* Copyright 1998 by the Massachusetts Institute of Technology.
|
||||||
|
*
|
||||||
|
* Permission to use, copy, modify, and distribute this
|
||||||
|
* software and its documentation for any purpose and without
|
||||||
|
* fee is hereby granted, provided that the above copyright
|
||||||
|
* notice appear in all copies and that both that copyright
|
||||||
|
* notice and this permission notice appear in supporting
|
||||||
|
* documentation, and that the name of M.I.T. not be used in
|
||||||
|
* advertising or publicity pertaining to distribution of the
|
||||||
|
* software without specific, written prior permission.
|
||||||
|
* M.I.T. makes no representations about the suitability of
|
||||||
|
* this software for any purpose. It is provided "as is"
|
||||||
|
* without express or implied warranty.
|
||||||
|
*/
|
||||||
|
|
||||||
|
static const char rcsid[] = "$Id$";
|
||||||
|
|
||||||
|
#include <sys/types.h>
|
||||||
|
|
||||||
|
#ifdef WIN32
|
||||||
|
#include "nameser.h"
|
||||||
|
#else
|
||||||
|
#include <sys/socket.h>
|
||||||
|
#include <netinet/in.h>
|
||||||
|
#include <arpa/inet.h>
|
||||||
|
#include <netdb.h>
|
||||||
|
#include <arpa/nameser.h>
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#include <stdlib.h>
|
||||||
|
#include <string.h>
|
||||||
|
#include "ares.h"
|
||||||
|
#include "ares_dns.h"
|
||||||
|
#include "ares_private.h"
|
||||||
|
|
||||||
|
int ares_parse_a_reply(const unsigned char *abuf, int alen,
|
||||||
|
struct hostent **host)
|
||||||
|
{
|
||||||
|
unsigned int qdcount, ancount;
|
||||||
|
int status, i, len, rr_type, rr_class, rr_len, naddrs;
|
||||||
|
int naliases;
|
||||||
|
const unsigned char *aptr;
|
||||||
|
char *hostname, *rr_name, *rr_data, **aliases;
|
||||||
|
struct in_addr *addrs;
|
||||||
|
struct hostent *hostent;
|
||||||
|
|
||||||
|
/* Set *host to NULL for all failure cases. */
|
||||||
|
*host = NULL;
|
||||||
|
|
||||||
|
/* Give up if abuf doesn't have room for a header. */
|
||||||
|
if (alen < HFIXEDSZ)
|
||||||
|
return ARES_EBADRESP;
|
||||||
|
|
||||||
|
/* Fetch the question and answer count from the header. */
|
||||||
|
qdcount = DNS_HEADER_QDCOUNT(abuf);
|
||||||
|
ancount = DNS_HEADER_ANCOUNT(abuf);
|
||||||
|
if (qdcount != 1)
|
||||||
|
return ARES_EBADRESP;
|
||||||
|
|
||||||
|
/* Expand the name from the question, and skip past the question. */
|
||||||
|
aptr = abuf + HFIXEDSZ;
|
||||||
|
status = ares_expand_name(aptr, abuf, alen, &hostname, &len);
|
||||||
|
if (status != ARES_SUCCESS)
|
||||||
|
return status;
|
||||||
|
if (aptr + len + QFIXEDSZ > abuf + alen)
|
||||||
|
{
|
||||||
|
free(hostname);
|
||||||
|
return ARES_EBADRESP;
|
||||||
|
}
|
||||||
|
aptr += len + QFIXEDSZ;
|
||||||
|
|
||||||
|
/* Allocate addresses and aliases; ancount gives an upper bound for both. */
|
||||||
|
addrs = malloc(ancount * sizeof(struct in_addr));
|
||||||
|
if (!addrs)
|
||||||
|
{
|
||||||
|
free(hostname);
|
||||||
|
return ARES_ENOMEM;
|
||||||
|
}
|
||||||
|
aliases = malloc((ancount + 1) * sizeof(char *));
|
||||||
|
if (!aliases)
|
||||||
|
{
|
||||||
|
free(hostname);
|
||||||
|
free(addrs);
|
||||||
|
return ARES_ENOMEM;
|
||||||
|
}
|
||||||
|
naddrs = 0;
|
||||||
|
naliases = 0;
|
||||||
|
|
||||||
|
/* Examine each answer resource record (RR) in turn. */
|
||||||
|
for (i = 0; i < ancount; i++)
|
||||||
|
{
|
||||||
|
/* Decode the RR up to the data field. */
|
||||||
|
status = ares_expand_name(aptr, abuf, alen, &rr_name, &len);
|
||||||
|
if (status != ARES_SUCCESS)
|
||||||
|
break;
|
||||||
|
aptr += len;
|
||||||
|
if (aptr + RRFIXEDSZ > abuf + alen)
|
||||||
|
{
|
||||||
|
status = ARES_EBADRESP;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
rr_type = DNS_RR_TYPE(aptr);
|
||||||
|
rr_class = DNS_RR_CLASS(aptr);
|
||||||
|
rr_len = DNS_RR_LEN(aptr);
|
||||||
|
aptr += RRFIXEDSZ;
|
||||||
|
|
||||||
|
if (rr_class == C_IN && rr_type == T_A
|
||||||
|
&& rr_len == sizeof(struct in_addr)
|
||||||
|
&& strcasecmp(rr_name, hostname) == 0)
|
||||||
|
{
|
||||||
|
memcpy(&addrs[naddrs], aptr, sizeof(struct in_addr));
|
||||||
|
naddrs++;
|
||||||
|
status = ARES_SUCCESS;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (rr_class == C_IN && rr_type == T_CNAME)
|
||||||
|
{
|
||||||
|
/* Record the RR name as an alias. */
|
||||||
|
aliases[naliases] = rr_name;
|
||||||
|
naliases++;
|
||||||
|
|
||||||
|
/* Decode the RR data and replace the hostname with it. */
|
||||||
|
status = ares_expand_name(aptr, abuf, alen, &rr_data, &len);
|
||||||
|
if (status != ARES_SUCCESS)
|
||||||
|
break;
|
||||||
|
free(hostname);
|
||||||
|
hostname = rr_data;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
free(rr_name);
|
||||||
|
|
||||||
|
aptr += rr_len;
|
||||||
|
if (aptr > abuf + alen)
|
||||||
|
{
|
||||||
|
status = ARES_EBADRESP;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (status == ARES_SUCCESS && naddrs == 0)
|
||||||
|
status = ARES_ENODATA;
|
||||||
|
if (status == ARES_SUCCESS)
|
||||||
|
{
|
||||||
|
/* We got our answer. Allocate memory to build the host entry. */
|
||||||
|
aliases[naliases] = NULL;
|
||||||
|
hostent = malloc(sizeof(struct hostent));
|
||||||
|
if (hostent)
|
||||||
|
{
|
||||||
|
hostent->h_addr_list = malloc((naddrs + 1) * sizeof(char *));
|
||||||
|
if (hostent->h_addr_list)
|
||||||
|
{
|
||||||
|
/* Fill in the hostent and return successfully. */
|
||||||
|
hostent->h_name = hostname;
|
||||||
|
hostent->h_aliases = aliases;
|
||||||
|
hostent->h_addrtype = AF_INET;
|
||||||
|
hostent->h_length = sizeof(struct in_addr);
|
||||||
|
for (i = 0; i < naddrs; i++)
|
||||||
|
hostent->h_addr_list[i] = (char *) &addrs[i];
|
||||||
|
hostent->h_addr_list[naddrs] = NULL;
|
||||||
|
*host = hostent;
|
||||||
|
return ARES_SUCCESS;
|
||||||
|
}
|
||||||
|
free(hostent);
|
||||||
|
}
|
||||||
|
status = ARES_ENOMEM;
|
||||||
|
}
|
||||||
|
for (i = 0; i < naliases; i++)
|
||||||
|
free(aliases[i]);
|
||||||
|
free(aliases);
|
||||||
|
free(addrs);
|
||||||
|
free(hostname);
|
||||||
|
return status;
|
||||||
|
}
|
||||||
77
ares/ares_parse_ptr_reply.3
Normal file
77
ares/ares_parse_ptr_reply.3
Normal file
@@ -0,0 +1,77 @@
|
|||||||
|
.\" $Id$
|
||||||
|
.\"
|
||||||
|
.\" Copyright 1998 by the Massachusetts Institute of Technology.
|
||||||
|
.\"
|
||||||
|
.\" Permission to use, copy, modify, and distribute this
|
||||||
|
.\" software and its documentation for any purpose and without
|
||||||
|
.\" fee is hereby granted, provided that the above copyright
|
||||||
|
.\" notice appear in all copies and that both that copyright
|
||||||
|
.\" notice and this permission notice appear in supporting
|
||||||
|
.\" documentation, and that the name of M.I.T. not be used in
|
||||||
|
.\" advertising or publicity pertaining to distribution of the
|
||||||
|
.\" software without specific, written prior permission.
|
||||||
|
.\" M.I.T. makes no representations about the suitability of
|
||||||
|
.\" this software for any purpose. It is provided "as is"
|
||||||
|
.\" without express or implied warranty.
|
||||||
|
.\"
|
||||||
|
.TH ARES_PARSE_PTR_REPLY 3 "25 July 1998"
|
||||||
|
.SH NAME
|
||||||
|
ares_parse_ptr_reply \- Parse a reply to a DNS query of type PTR into a hostent
|
||||||
|
.SH SYNOPSIS
|
||||||
|
.nf
|
||||||
|
.B #include <ares.h>
|
||||||
|
.PP
|
||||||
|
.B
|
||||||
|
int ares_parse_ptr_reply(const unsigned char *\fIabuf\fB, int \fIalen\fB,
|
||||||
|
.B
|
||||||
|
const void *\fIaddr\fP, int \fIaddrlen\fP, int \fIfamily\fP,
|
||||||
|
.B struct hostent **\fIhost\fB);
|
||||||
|
.fi
|
||||||
|
.SH DESCRIPTION
|
||||||
|
The
|
||||||
|
.B ares_parse_ptr_reply
|
||||||
|
function parses the response to a query of type PTR into a
|
||||||
|
.BR "struct hostent" .
|
||||||
|
The parameters
|
||||||
|
.I abuf
|
||||||
|
and
|
||||||
|
.I alen
|
||||||
|
give the contents of the response. The parameters
|
||||||
|
.IR addr ,
|
||||||
|
.IR addrlen ,
|
||||||
|
and
|
||||||
|
.I family
|
||||||
|
specify which address was queried for; they are not used to verify the
|
||||||
|
response, merely used to fill in the address of the
|
||||||
|
.BR "struct hostent" .
|
||||||
|
The resulting
|
||||||
|
.B struct hostent
|
||||||
|
is stored in allocated memory and a pointer to it stored into the
|
||||||
|
variable pointed to by
|
||||||
|
.IR host .
|
||||||
|
It is the caller's responsibility to free the resulting host structure
|
||||||
|
using
|
||||||
|
.BR ares_free_hostent (3)
|
||||||
|
when it is no longer needed.
|
||||||
|
.SH RETURN VALUES
|
||||||
|
.B ares_parse_ptr_reply
|
||||||
|
can return any of the following values:
|
||||||
|
.TP 15
|
||||||
|
.B ARES_SUCCESS
|
||||||
|
The response was successfully parsed.
|
||||||
|
.TP 15
|
||||||
|
.B ARES_EBADRESP
|
||||||
|
The response was malformatted.
|
||||||
|
.TP 15
|
||||||
|
.B ARES_ENODATA
|
||||||
|
The response did not contain an answer to the query.
|
||||||
|
.TP 15
|
||||||
|
.B ARES_ENOMEM
|
||||||
|
Memory was exhausted.
|
||||||
|
.SH SEE ALSO
|
||||||
|
.BR ares_gethostbyaddr (3),
|
||||||
|
.BR ares_free_hostent (3)
|
||||||
|
.SH AUTHOR
|
||||||
|
Greg Hudson, MIT Information Systems
|
||||||
|
.br
|
||||||
|
Copyright 1998 by the Massachusetts Institute of Technology.
|
||||||
159
ares/ares_parse_ptr_reply.c
Normal file
159
ares/ares_parse_ptr_reply.c
Normal file
@@ -0,0 +1,159 @@
|
|||||||
|
/* Copyright 1998 by the Massachusetts Institute of Technology.
|
||||||
|
*
|
||||||
|
* Permission to use, copy, modify, and distribute this
|
||||||
|
* software and its documentation for any purpose and without
|
||||||
|
* fee is hereby granted, provided that the above copyright
|
||||||
|
* notice appear in all copies and that both that copyright
|
||||||
|
* notice and this permission notice appear in supporting
|
||||||
|
* documentation, and that the name of M.I.T. not be used in
|
||||||
|
* advertising or publicity pertaining to distribution of the
|
||||||
|
* software without specific, written prior permission.
|
||||||
|
* M.I.T. makes no representations about the suitability of
|
||||||
|
* this software for any purpose. It is provided "as is"
|
||||||
|
* without express or implied warranty.
|
||||||
|
*/
|
||||||
|
|
||||||
|
static const char rcsid[] = "$Id$";
|
||||||
|
|
||||||
|
#include <sys/types.h>
|
||||||
|
|
||||||
|
#ifdef WIN32
|
||||||
|
#include "nameser.h"
|
||||||
|
#else
|
||||||
|
#include <sys/socket.h>
|
||||||
|
#include <netinet/in.h>
|
||||||
|
#include <netdb.h>
|
||||||
|
#include <arpa/nameser.h>
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#include <stdlib.h>
|
||||||
|
#include <string.h>
|
||||||
|
#include "ares.h"
|
||||||
|
#include "ares_dns.h"
|
||||||
|
#include "ares_private.h"
|
||||||
|
|
||||||
|
int ares_parse_ptr_reply(const unsigned char *abuf, int alen, const void *addr,
|
||||||
|
int addrlen, int family, struct hostent **host)
|
||||||
|
{
|
||||||
|
unsigned int qdcount, ancount;
|
||||||
|
int status, i, len, rr_type, rr_class, rr_len;
|
||||||
|
const unsigned char *aptr;
|
||||||
|
char *ptrname, *hostname, *rr_name, *rr_data;
|
||||||
|
struct hostent *hostent;
|
||||||
|
|
||||||
|
/* Set *host to NULL for all failure cases. */
|
||||||
|
*host = NULL;
|
||||||
|
|
||||||
|
/* Give up if abuf doesn't have room for a header. */
|
||||||
|
if (alen < HFIXEDSZ)
|
||||||
|
return ARES_EBADRESP;
|
||||||
|
|
||||||
|
/* Fetch the question and answer count from the header. */
|
||||||
|
qdcount = DNS_HEADER_QDCOUNT(abuf);
|
||||||
|
ancount = DNS_HEADER_ANCOUNT(abuf);
|
||||||
|
if (qdcount != 1)
|
||||||
|
return ARES_EBADRESP;
|
||||||
|
|
||||||
|
/* Expand the name from the question, and skip past the question. */
|
||||||
|
aptr = abuf + HFIXEDSZ;
|
||||||
|
status = ares_expand_name(aptr, abuf, alen, &ptrname, &len);
|
||||||
|
if (status != ARES_SUCCESS)
|
||||||
|
return status;
|
||||||
|
if (aptr + len + QFIXEDSZ > abuf + alen)
|
||||||
|
{
|
||||||
|
free(ptrname);
|
||||||
|
return ARES_EBADRESP;
|
||||||
|
}
|
||||||
|
aptr += len + QFIXEDSZ;
|
||||||
|
|
||||||
|
/* Examine each answer resource record (RR) in turn. */
|
||||||
|
hostname = NULL;
|
||||||
|
for (i = 0; i < ancount; i++)
|
||||||
|
{
|
||||||
|
/* Decode the RR up to the data field. */
|
||||||
|
status = ares_expand_name(aptr, abuf, alen, &rr_name, &len);
|
||||||
|
if (status != ARES_SUCCESS)
|
||||||
|
break;
|
||||||
|
aptr += len;
|
||||||
|
if (aptr + RRFIXEDSZ > abuf + alen)
|
||||||
|
{
|
||||||
|
status = ARES_EBADRESP;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
rr_type = DNS_RR_TYPE(aptr);
|
||||||
|
rr_class = DNS_RR_CLASS(aptr);
|
||||||
|
rr_len = DNS_RR_LEN(aptr);
|
||||||
|
aptr += RRFIXEDSZ;
|
||||||
|
|
||||||
|
if (rr_class == C_IN && rr_type == T_PTR
|
||||||
|
&& strcasecmp(rr_name, ptrname) == 0)
|
||||||
|
{
|
||||||
|
/* Decode the RR data and set hostname to it. */
|
||||||
|
status = ares_expand_name(aptr, abuf, alen, &rr_data, &len);
|
||||||
|
if (status != ARES_SUCCESS)
|
||||||
|
break;
|
||||||
|
if (hostname)
|
||||||
|
free(hostname);
|
||||||
|
hostname = rr_data;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (rr_class == C_IN && rr_type == T_CNAME)
|
||||||
|
{
|
||||||
|
/* Decode the RR data and replace ptrname with it. */
|
||||||
|
status = ares_expand_name(aptr, abuf, alen, &rr_data, &len);
|
||||||
|
if (status != ARES_SUCCESS)
|
||||||
|
break;
|
||||||
|
free(ptrname);
|
||||||
|
ptrname = rr_data;
|
||||||
|
}
|
||||||
|
|
||||||
|
free(rr_name);
|
||||||
|
aptr += rr_len;
|
||||||
|
if (aptr > abuf + alen)
|
||||||
|
{
|
||||||
|
status = ARES_EBADRESP;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (status == ARES_SUCCESS && !hostname)
|
||||||
|
status = ARES_ENODATA;
|
||||||
|
if (status == ARES_SUCCESS)
|
||||||
|
{
|
||||||
|
/* We got our answer. Allocate memory to build the host entry. */
|
||||||
|
hostent = malloc(sizeof(struct hostent));
|
||||||
|
if (hostent)
|
||||||
|
{
|
||||||
|
hostent->h_addr_list = malloc(2 * sizeof(char *));
|
||||||
|
if (hostent->h_addr_list)
|
||||||
|
{
|
||||||
|
hostent->h_addr_list[0] = malloc(addrlen);
|
||||||
|
if (hostent->h_addr_list[0])
|
||||||
|
{
|
||||||
|
hostent->h_aliases = malloc(sizeof (char *));
|
||||||
|
if (hostent->h_aliases)
|
||||||
|
{
|
||||||
|
/* Fill in the hostent and return successfully. */
|
||||||
|
hostent->h_name = hostname;
|
||||||
|
hostent->h_aliases[0] = NULL;
|
||||||
|
hostent->h_addrtype = family;
|
||||||
|
hostent->h_length = addrlen;
|
||||||
|
memcpy(hostent->h_addr_list[0], addr, addrlen);
|
||||||
|
hostent->h_addr_list[1] = NULL;
|
||||||
|
*host = hostent;
|
||||||
|
free(ptrname);
|
||||||
|
return ARES_SUCCESS;
|
||||||
|
}
|
||||||
|
free(hostent->h_addr_list[0]);
|
||||||
|
}
|
||||||
|
free(hostent->h_addr_list);
|
||||||
|
}
|
||||||
|
free(hostent);
|
||||||
|
}
|
||||||
|
status = ARES_ENOMEM;
|
||||||
|
}
|
||||||
|
if (hostname)
|
||||||
|
free(hostname);
|
||||||
|
free(ptrname);
|
||||||
|
return status;
|
||||||
|
}
|
||||||
145
ares/ares_private.h
Normal file
145
ares/ares_private.h
Normal file
@@ -0,0 +1,145 @@
|
|||||||
|
/* $Id$ */
|
||||||
|
|
||||||
|
/* Copyright 1998 by the Massachusetts Institute of Technology.
|
||||||
|
*
|
||||||
|
* Permission to use, copy, modify, and distribute this
|
||||||
|
* software and its documentation for any purpose and without
|
||||||
|
* fee is hereby granted, provided that the above copyright
|
||||||
|
* notice appear in all copies and that both that copyright
|
||||||
|
* notice and this permission notice appear in supporting
|
||||||
|
* documentation, and that the name of M.I.T. not be used in
|
||||||
|
* advertising or publicity pertaining to distribution of the
|
||||||
|
* software without specific, written prior permission.
|
||||||
|
* M.I.T. makes no representations about the suitability of
|
||||||
|
* this software for any purpose. It is provided "as is"
|
||||||
|
* without express or implied warranty.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include <stdio.h>
|
||||||
|
#include <sys/types.h>
|
||||||
|
|
||||||
|
#ifdef WIN32
|
||||||
|
|
||||||
|
#else
|
||||||
|
#include <netinet/in.h>
|
||||||
|
/* We define closesocket() here so that we can use this function all over
|
||||||
|
the source code for closing sockets. */
|
||||||
|
#define closesocket(x) close(x)
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#define DEFAULT_TIMEOUT 5
|
||||||
|
#define DEFAULT_TRIES 4
|
||||||
|
#ifndef INADDR_NONE
|
||||||
|
#define INADDR_NONE 0xffffffff
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifdef WIN32
|
||||||
|
|
||||||
|
#define IsNT ((int)GetVersion()>0)
|
||||||
|
#define WIN_NS_9X "System\\CurrentControlSet\\Services\\VxD\\MSTCP"
|
||||||
|
#define WIN_NS_NT_KEY "System\\CurrentControlSet\\Services\\Tcpip\\Parameters"
|
||||||
|
#define NAMESERVER "NameServer"
|
||||||
|
#define DHCPNAMESERVER "DhcpNameServer"
|
||||||
|
#define PATH_HOSTS_NT "\\drivers\\etc\\hosts"
|
||||||
|
#define PATH_HOSTS_9X "\\hosts"
|
||||||
|
|
||||||
|
#else
|
||||||
|
|
||||||
|
#define PATH_RESOLV_CONF "/etc/resolv.conf"
|
||||||
|
#ifdef ETC_INET
|
||||||
|
#define PATH_HOSTS "/etc/inet/hosts"
|
||||||
|
#else
|
||||||
|
#define PATH_HOSTS "/etc/hosts"
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
||||||
|
struct send_request {
|
||||||
|
/* Remaining data to send */
|
||||||
|
const char *data;
|
||||||
|
int len;
|
||||||
|
|
||||||
|
/* Next request in queue */
|
||||||
|
struct send_request *next;
|
||||||
|
};
|
||||||
|
|
||||||
|
struct server_state {
|
||||||
|
struct in_addr addr;
|
||||||
|
int udp_socket;
|
||||||
|
int tcp_socket;
|
||||||
|
|
||||||
|
/* Mini-buffer for reading the length word */
|
||||||
|
unsigned char tcp_lenbuf[2];
|
||||||
|
int tcp_lenbuf_pos;
|
||||||
|
int tcp_length;
|
||||||
|
|
||||||
|
/* Buffer for reading actual TCP data */
|
||||||
|
unsigned char *tcp_buffer;
|
||||||
|
int tcp_buffer_pos;
|
||||||
|
|
||||||
|
/* TCP output queue */
|
||||||
|
struct send_request *qhead;
|
||||||
|
struct send_request *qtail;
|
||||||
|
};
|
||||||
|
|
||||||
|
struct query {
|
||||||
|
/* Query ID from qbuf, for faster lookup, and current timeout */
|
||||||
|
unsigned short qid;
|
||||||
|
time_t timeout;
|
||||||
|
|
||||||
|
/* Query buf with length at beginning, for TCP transmission */
|
||||||
|
char *tcpbuf;
|
||||||
|
int tcplen;
|
||||||
|
|
||||||
|
/* Arguments passed to ares_send() (qbuf points into tcpbuf) */
|
||||||
|
const char *qbuf;
|
||||||
|
int qlen;
|
||||||
|
ares_callback callback;
|
||||||
|
void *arg;
|
||||||
|
|
||||||
|
/* Query status */
|
||||||
|
int try;
|
||||||
|
int server;
|
||||||
|
int *skip_server;
|
||||||
|
int using_tcp;
|
||||||
|
int error_status;
|
||||||
|
|
||||||
|
/* Next query in chain */
|
||||||
|
struct query *next;
|
||||||
|
};
|
||||||
|
|
||||||
|
/* An IP address pattern; matches an IP address X if X & mask == addr */
|
||||||
|
struct apattern {
|
||||||
|
struct in_addr addr;
|
||||||
|
struct in_addr mask;
|
||||||
|
};
|
||||||
|
|
||||||
|
struct ares_channeldata {
|
||||||
|
/* Configuration data */
|
||||||
|
int flags;
|
||||||
|
int timeout;
|
||||||
|
int tries;
|
||||||
|
int ndots;
|
||||||
|
int udp_port;
|
||||||
|
int tcp_port;
|
||||||
|
char **domains;
|
||||||
|
int ndomains;
|
||||||
|
struct apattern *sortlist;
|
||||||
|
int nsort;
|
||||||
|
char *lookups;
|
||||||
|
|
||||||
|
/* Server addresses and communications state */
|
||||||
|
struct server_state *servers;
|
||||||
|
int nservers;
|
||||||
|
|
||||||
|
/* ID to use for next query */
|
||||||
|
unsigned short next_id;
|
||||||
|
|
||||||
|
/* Active queries */
|
||||||
|
struct query *queries;
|
||||||
|
};
|
||||||
|
|
||||||
|
void ares__send_query(ares_channel channel, struct query *query, time_t now);
|
||||||
|
void ares__close_sockets(struct server_state *server);
|
||||||
|
int ares__get_hostent(FILE *fp, struct hostent **host);
|
||||||
|
int ares__read_line(FILE *fp, char **buf, int *bufsize);
|
||||||
79
ares/ares_process.3
Normal file
79
ares/ares_process.3
Normal file
@@ -0,0 +1,79 @@
|
|||||||
|
.\" $Id$
|
||||||
|
.\"
|
||||||
|
.\" Copyright 1998 by the Massachusetts Institute of Technology.
|
||||||
|
.\"
|
||||||
|
.\" Permission to use, copy, modify, and distribute this
|
||||||
|
.\" software and its documentation for any purpose and without
|
||||||
|
.\" fee is hereby granted, provided that the above copyright
|
||||||
|
.\" notice appear in all copies and that both that copyright
|
||||||
|
.\" notice and this permission notice appear in supporting
|
||||||
|
.\" documentation, and that the name of M.I.T. not be used in
|
||||||
|
.\" advertising or publicity pertaining to distribution of the
|
||||||
|
.\" software without specific, written prior permission.
|
||||||
|
.\" M.I.T. makes no representations about the suitability of
|
||||||
|
.\" this software for any purpose. It is provided "as is"
|
||||||
|
.\" without express or implied warranty.
|
||||||
|
.\"
|
||||||
|
.TH ARES_PROCESS 3 "25 July 1998"
|
||||||
|
.SH NAME
|
||||||
|
ares_process \- Process events for name resolution
|
||||||
|
.SH SYNOPSIS
|
||||||
|
.nf
|
||||||
|
.B #include <ares.h>
|
||||||
|
.PP
|
||||||
|
.B void ares_process(ares_channel \fIchannel\fP, fd_set *\fIread_fds\fP,
|
||||||
|
.B fd_set *\fIwrite_fds\fP)
|
||||||
|
.fi
|
||||||
|
.SH DESCRIPTION
|
||||||
|
The
|
||||||
|
.B ares_process
|
||||||
|
function handles input/output events and timeouts associated with
|
||||||
|
queries pending on the name service channel identified by
|
||||||
|
.IR channel .
|
||||||
|
The file descriptor sets pointed to by
|
||||||
|
.I read_fds
|
||||||
|
and
|
||||||
|
.I write_fds
|
||||||
|
should have file descriptors set in them according to whether the file
|
||||||
|
descriptors specified by
|
||||||
|
.BR ares_fds (3)
|
||||||
|
are ready for reading and writing. (The easiest way to determine this
|
||||||
|
information is to invoke
|
||||||
|
.B select
|
||||||
|
with a timeout no greater than the timeout given by
|
||||||
|
.BR ares_timeout (3)).
|
||||||
|
.PP
|
||||||
|
The
|
||||||
|
.B ares_process
|
||||||
|
function will invoke callbacks for pending queries if they complete
|
||||||
|
successfully or fail.
|
||||||
|
.SS EXAMPLE
|
||||||
|
The following code fragment waits for all pending queries on a channel
|
||||||
|
to complete:
|
||||||
|
.PP
|
||||||
|
.RS
|
||||||
|
.nf
|
||||||
|
int nfds, count;
|
||||||
|
fd_set readers, writers;
|
||||||
|
struct timeval tv, *tvp;
|
||||||
|
|
||||||
|
while (1)
|
||||||
|
{
|
||||||
|
FD_ZERO(&readers);
|
||||||
|
FD_ZERO(&writers);
|
||||||
|
nfds = ares_fds(channel, &readers, &writers);
|
||||||
|
if (nfds == 0)
|
||||||
|
break;
|
||||||
|
tvp = ares_timeout(channel, NULL, &tv);
|
||||||
|
count = select(nfds, &readers, &writers, NULL, tvp);
|
||||||
|
ares_process(channel, &readers, &writers);
|
||||||
|
}
|
||||||
|
.fi
|
||||||
|
.RE
|
||||||
|
.SH SEE ALSO
|
||||||
|
.BR ares_fds (3),
|
||||||
|
.BR ares_timeout (3)
|
||||||
|
.SH AUTHOR
|
||||||
|
Greg Hudson, MIT Information Systems
|
||||||
|
.br
|
||||||
|
Copyright 1998 by the Massachusetts Institute of Technology.
|
||||||
625
ares/ares_process.c
Normal file
625
ares/ares_process.c
Normal file
@@ -0,0 +1,625 @@
|
|||||||
|
/* Copyright 1998 by the Massachusetts Institute of Technology.
|
||||||
|
*
|
||||||
|
* Permission to use, copy, modify, and distribute this
|
||||||
|
* software and its documentation for any purpose and without
|
||||||
|
* fee is hereby granted, provided that the above copyright
|
||||||
|
* notice appear in all copies and that both that copyright
|
||||||
|
* notice and this permission notice appear in supporting
|
||||||
|
* documentation, and that the name of M.I.T. not be used in
|
||||||
|
* advertising or publicity pertaining to distribution of the
|
||||||
|
* software without specific, written prior permission.
|
||||||
|
* M.I.T. makes no representations about the suitability of
|
||||||
|
* this software for any purpose. It is provided "as is"
|
||||||
|
* without express or implied warranty.
|
||||||
|
*/
|
||||||
|
|
||||||
|
static const char rcsid[] = "$Id$";
|
||||||
|
|
||||||
|
#include <sys/types.h>
|
||||||
|
|
||||||
|
#ifdef WIN32
|
||||||
|
#include "nameser.h"
|
||||||
|
#else
|
||||||
|
#include <sys/socket.h>
|
||||||
|
#include <sys/uio.h>
|
||||||
|
#include <netinet/in.h>
|
||||||
|
#include <netdb.h>
|
||||||
|
#include <arpa/nameser.h>
|
||||||
|
#include <unistd.h>
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#include <string.h>
|
||||||
|
#include <stdlib.h>
|
||||||
|
#include <fcntl.h>
|
||||||
|
#include <time.h>
|
||||||
|
#include <errno.h>
|
||||||
|
#include "ares.h"
|
||||||
|
#include "ares_dns.h"
|
||||||
|
#include "ares_private.h"
|
||||||
|
|
||||||
|
static void write_tcp_data(ares_channel channel, fd_set *write_fds,
|
||||||
|
time_t now);
|
||||||
|
static void read_tcp_data(ares_channel channel, fd_set *read_fds, time_t now);
|
||||||
|
static void read_udp_packets(ares_channel channel, fd_set *read_fds,
|
||||||
|
time_t now);
|
||||||
|
static void process_timeouts(ares_channel channel, time_t now);
|
||||||
|
static void process_answer(ares_channel channel, unsigned char *abuf,
|
||||||
|
int alen, int whichserver, int tcp, int now);
|
||||||
|
static void handle_error(ares_channel channel, int whichserver, time_t now);
|
||||||
|
static void next_server(ares_channel channel, struct query *query, time_t now);
|
||||||
|
static int open_tcp_socket(ares_channel channel, struct server_state *server);
|
||||||
|
static int open_udp_socket(ares_channel channel, struct server_state *server);
|
||||||
|
static int same_questions(const unsigned char *qbuf, int qlen,
|
||||||
|
const unsigned char *abuf, int alen);
|
||||||
|
static void end_query(ares_channel channel, struct query *query, int status,
|
||||||
|
unsigned char *abuf, int alen);
|
||||||
|
|
||||||
|
/* Something interesting happened on the wire, or there was a timeout.
|
||||||
|
* See what's up and respond accordingly.
|
||||||
|
*/
|
||||||
|
void ares_process(ares_channel channel, fd_set *read_fds, fd_set *write_fds)
|
||||||
|
{
|
||||||
|
time_t now;
|
||||||
|
|
||||||
|
time(&now);
|
||||||
|
write_tcp_data(channel, write_fds, now);
|
||||||
|
read_tcp_data(channel, read_fds, now);
|
||||||
|
read_udp_packets(channel, read_fds, now);
|
||||||
|
process_timeouts(channel, now);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* If any TCP sockets select true for writing, write out queued data
|
||||||
|
* we have for them.
|
||||||
|
*/
|
||||||
|
static void write_tcp_data(ares_channel channel, fd_set *write_fds, time_t now)
|
||||||
|
{
|
||||||
|
struct server_state *server;
|
||||||
|
struct send_request *sendreq;
|
||||||
|
struct iovec *vec;
|
||||||
|
int i, n, count;
|
||||||
|
|
||||||
|
for (i = 0; i < channel->nservers; i++)
|
||||||
|
{
|
||||||
|
/* Make sure server has data to send and is selected in write_fds. */
|
||||||
|
server = &channel->servers[i];
|
||||||
|
if (!server->qhead || server->tcp_socket == -1
|
||||||
|
|| !FD_ISSET(server->tcp_socket, write_fds))
|
||||||
|
continue;
|
||||||
|
|
||||||
|
/* Count the number of send queue items. */
|
||||||
|
n = 0;
|
||||||
|
for (sendreq = server->qhead; sendreq; sendreq = sendreq->next)
|
||||||
|
n++;
|
||||||
|
|
||||||
|
#ifdef WIN32
|
||||||
|
vec = NULL;
|
||||||
|
#else
|
||||||
|
/* Allocate iovecs so we can send all our data at once. */
|
||||||
|
vec = malloc(n * sizeof(struct iovec));
|
||||||
|
#endif
|
||||||
|
if (vec)
|
||||||
|
{
|
||||||
|
#ifdef WIN32
|
||||||
|
#else
|
||||||
|
/* Fill in the iovecs and send. */
|
||||||
|
n = 0;
|
||||||
|
for (sendreq = server->qhead; sendreq; sendreq = sendreq->next)
|
||||||
|
{
|
||||||
|
vec[n].iov_base = (char *) sendreq->data;
|
||||||
|
vec[n].iov_len = sendreq->len;
|
||||||
|
n++;
|
||||||
|
}
|
||||||
|
count = writev(server->tcp_socket, vec, n);
|
||||||
|
free(vec);
|
||||||
|
if (count < 0)
|
||||||
|
{
|
||||||
|
handle_error(channel, i, now);
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Advance the send queue by as many bytes as we sent. */
|
||||||
|
while (count)
|
||||||
|
{
|
||||||
|
sendreq = server->qhead;
|
||||||
|
if (count >= sendreq->len)
|
||||||
|
{
|
||||||
|
count -= sendreq->len;
|
||||||
|
server->qhead = sendreq->next;
|
||||||
|
if (server->qhead == NULL)
|
||||||
|
server->qtail = NULL;
|
||||||
|
free(sendreq);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
sendreq->data += count;
|
||||||
|
sendreq->len -= count;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
/* Can't allocate iovecs; just send the first request. */
|
||||||
|
sendreq = server->qhead;
|
||||||
|
|
||||||
|
count = send(server->tcp_socket, sendreq->data, sendreq->len, 0);
|
||||||
|
|
||||||
|
if (count < 0)
|
||||||
|
{
|
||||||
|
handle_error(channel, i, now);
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Advance the send queue by as many bytes as we sent. */
|
||||||
|
if (count == sendreq->len)
|
||||||
|
{
|
||||||
|
server->qhead = sendreq->next;
|
||||||
|
if (server->qhead == NULL)
|
||||||
|
server->qtail = NULL;
|
||||||
|
free(sendreq);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
sendreq->data += count;
|
||||||
|
sendreq->len -= count;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/* If any TCP socket selects true for reading, read some data,
|
||||||
|
* allocate a buffer if we finish reading the length word, and process
|
||||||
|
* a packet if we finish reading one.
|
||||||
|
*/
|
||||||
|
static void read_tcp_data(ares_channel channel, fd_set *read_fds, time_t now)
|
||||||
|
{
|
||||||
|
struct server_state *server;
|
||||||
|
int i, count;
|
||||||
|
|
||||||
|
for (i = 0; i < channel->nservers; i++)
|
||||||
|
{
|
||||||
|
/* Make sure the server has a socket and is selected in read_fds. */
|
||||||
|
server = &channel->servers[i];
|
||||||
|
if (server->tcp_socket == -1 || !FD_ISSET(server->tcp_socket, read_fds))
|
||||||
|
continue;
|
||||||
|
|
||||||
|
if (server->tcp_lenbuf_pos != 2)
|
||||||
|
{
|
||||||
|
/* We haven't yet read a length word, so read that (or
|
||||||
|
* what's left to read of it).
|
||||||
|
*/
|
||||||
|
count = recv(server->tcp_socket,
|
||||||
|
server->tcp_lenbuf + server->tcp_buffer_pos,
|
||||||
|
2 - server->tcp_buffer_pos, 0);
|
||||||
|
if (count <= 0)
|
||||||
|
{
|
||||||
|
handle_error(channel, i, now);
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
server->tcp_lenbuf_pos += count;
|
||||||
|
if (server->tcp_lenbuf_pos == 2)
|
||||||
|
{
|
||||||
|
/* We finished reading the length word. Decode the
|
||||||
|
* length and allocate a buffer for the data.
|
||||||
|
*/
|
||||||
|
server->tcp_length = server->tcp_lenbuf[0] << 8
|
||||||
|
| server->tcp_lenbuf[1];
|
||||||
|
server->tcp_buffer = malloc(server->tcp_length);
|
||||||
|
if (!server->tcp_buffer)
|
||||||
|
handle_error(channel, i, now);
|
||||||
|
server->tcp_buffer_pos = 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
/* Read data into the allocated buffer. */
|
||||||
|
count = recv(server->tcp_socket,
|
||||||
|
server->tcp_buffer + server->tcp_buffer_pos,
|
||||||
|
server->tcp_length - server->tcp_buffer_pos, 0);
|
||||||
|
if (count <= 0)
|
||||||
|
{
|
||||||
|
handle_error(channel, i, now);
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
server->tcp_buffer_pos += count;
|
||||||
|
if (server->tcp_buffer_pos == server->tcp_length)
|
||||||
|
{
|
||||||
|
/* We finished reading this answer; process it and
|
||||||
|
* prepare to read another length word.
|
||||||
|
*/
|
||||||
|
process_answer(channel, server->tcp_buffer, server->tcp_length,
|
||||||
|
i, 1, now);
|
||||||
|
free(server->tcp_buffer);
|
||||||
|
server->tcp_buffer = NULL;
|
||||||
|
server->tcp_lenbuf_pos = 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/* If any UDP sockets select true for reading, process them. */
|
||||||
|
static void read_udp_packets(ares_channel channel, fd_set *read_fds,
|
||||||
|
time_t now)
|
||||||
|
{
|
||||||
|
struct server_state *server;
|
||||||
|
int i, count;
|
||||||
|
unsigned char buf[PACKETSZ + 1];
|
||||||
|
|
||||||
|
for (i = 0; i < channel->nservers; i++)
|
||||||
|
{
|
||||||
|
/* Make sure the server has a socket and is selected in read_fds. */
|
||||||
|
server = &channel->servers[i];
|
||||||
|
|
||||||
|
if (server->udp_socket == -1 || !FD_ISSET(server->udp_socket, read_fds))
|
||||||
|
continue;
|
||||||
|
|
||||||
|
count = recv(server->udp_socket, buf, sizeof(buf), 0);
|
||||||
|
if (count <= 0)
|
||||||
|
handle_error(channel, i, now);
|
||||||
|
|
||||||
|
process_answer(channel, buf, count, i, 0, now);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/* If any queries have timed out, note the timeout and move them on. */
|
||||||
|
static void process_timeouts(ares_channel channel, time_t now)
|
||||||
|
{
|
||||||
|
struct query *query, *next;
|
||||||
|
|
||||||
|
for (query = channel->queries; query; query = next)
|
||||||
|
{
|
||||||
|
next = query->next;
|
||||||
|
if (query->timeout != 0 && now >= query->timeout)
|
||||||
|
{
|
||||||
|
query->error_status = ARES_ETIMEOUT;
|
||||||
|
next_server(channel, query, now);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Handle an answer from a server. */
|
||||||
|
static void process_answer(ares_channel channel, unsigned char *abuf,
|
||||||
|
int alen, int whichserver, int tcp, int now)
|
||||||
|
{
|
||||||
|
int id, tc, rcode;
|
||||||
|
struct query *query;
|
||||||
|
|
||||||
|
/* If there's no room in the answer for a header, we can't do much
|
||||||
|
* with it. */
|
||||||
|
if (alen < HFIXEDSZ)
|
||||||
|
return;
|
||||||
|
|
||||||
|
/* Grab the query ID, truncate bit, and response code from the packet. */
|
||||||
|
id = DNS_HEADER_QID(abuf);
|
||||||
|
tc = DNS_HEADER_TC(abuf);
|
||||||
|
rcode = DNS_HEADER_RCODE(abuf);
|
||||||
|
|
||||||
|
/* Find the query corresponding to this packet. */
|
||||||
|
for (query = channel->queries; query; query = query->next)
|
||||||
|
{
|
||||||
|
if (query->qid == id)
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
if (!query)
|
||||||
|
return;
|
||||||
|
|
||||||
|
/* If we got a truncated UDP packet and are not ignoring truncation,
|
||||||
|
* don't accept the packet, and switch the query to TCP if we hadn't
|
||||||
|
* done so already.
|
||||||
|
*/
|
||||||
|
if ((tc || alen > PACKETSZ) && !tcp && !(channel->flags & ARES_FLAG_IGNTC))
|
||||||
|
{
|
||||||
|
if (!query->using_tcp)
|
||||||
|
{
|
||||||
|
query->using_tcp = 1;
|
||||||
|
ares__send_query(channel, query, now);
|
||||||
|
}
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Limit alen to PACKETSZ if we aren't using TCP (only relevant if we
|
||||||
|
* are ignoring truncation.
|
||||||
|
*/
|
||||||
|
if (alen > PACKETSZ && !tcp)
|
||||||
|
alen = PACKETSZ;
|
||||||
|
|
||||||
|
/* If we aren't passing through all error packets, discard packets
|
||||||
|
* with SERVFAIL, NOTIMP, or REFUSED response codes.
|
||||||
|
*/
|
||||||
|
if (!(channel->flags & ARES_FLAG_NOCHECKRESP))
|
||||||
|
{
|
||||||
|
if (rcode == SERVFAIL || rcode == NOTIMP || rcode == REFUSED)
|
||||||
|
{
|
||||||
|
query->skip_server[whichserver] = 1;
|
||||||
|
if (query->server == whichserver)
|
||||||
|
next_server(channel, query, now);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
if (!same_questions(query->qbuf, query->qlen, abuf, alen))
|
||||||
|
{
|
||||||
|
if (query->server == whichserver)
|
||||||
|
next_server(channel, query, now);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
end_query(channel, query, ARES_SUCCESS, abuf, alen);
|
||||||
|
}
|
||||||
|
|
||||||
|
static void handle_error(ares_channel channel, int whichserver, time_t now)
|
||||||
|
{
|
||||||
|
struct query *query;
|
||||||
|
|
||||||
|
/* Reset communications with this server. */
|
||||||
|
ares__close_sockets(&channel->servers[whichserver]);
|
||||||
|
|
||||||
|
/* Tell all queries talking to this server to move on and not try
|
||||||
|
* this server again.
|
||||||
|
*/
|
||||||
|
for (query = channel->queries; query; query = query->next)
|
||||||
|
{
|
||||||
|
if (query->server == whichserver)
|
||||||
|
{
|
||||||
|
query->skip_server[whichserver] = 1;
|
||||||
|
next_server(channel, query, now);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
static void next_server(ares_channel channel, struct query *query, time_t now)
|
||||||
|
{
|
||||||
|
/* Advance to the next server or try. */
|
||||||
|
query->server++;
|
||||||
|
for (; query->try < channel->tries; query->try++)
|
||||||
|
{
|
||||||
|
for (; query->server < channel->nservers; query->server++)
|
||||||
|
{
|
||||||
|
if (!query->skip_server[query->server])
|
||||||
|
{
|
||||||
|
ares__send_query(channel, query, now);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
query->server = 0;
|
||||||
|
|
||||||
|
/* Only one try if we're using TCP. */
|
||||||
|
if (query->using_tcp)
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
end_query(channel, query, query->error_status, NULL, 0);
|
||||||
|
}
|
||||||
|
|
||||||
|
void ares__send_query(ares_channel channel, struct query *query, time_t now)
|
||||||
|
{
|
||||||
|
struct send_request *sendreq;
|
||||||
|
struct server_state *server;
|
||||||
|
|
||||||
|
server = &channel->servers[query->server];
|
||||||
|
if (query->using_tcp)
|
||||||
|
{
|
||||||
|
/* Make sure the TCP socket for this server is set up and queue
|
||||||
|
* a send request.
|
||||||
|
*/
|
||||||
|
if (server->tcp_socket == -1)
|
||||||
|
{
|
||||||
|
if (open_tcp_socket(channel, server) == -1)
|
||||||
|
{
|
||||||
|
query->skip_server[query->server] = 1;
|
||||||
|
next_server(channel, query, now);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
sendreq = malloc(sizeof(struct send_request));
|
||||||
|
if (!sendreq)
|
||||||
|
end_query(channel, query, ARES_ENOMEM, NULL, 0);
|
||||||
|
sendreq->data = query->tcpbuf;
|
||||||
|
sendreq->len = query->tcplen;
|
||||||
|
sendreq->next = NULL;
|
||||||
|
if (server->qtail)
|
||||||
|
server->qtail->next = sendreq;
|
||||||
|
else
|
||||||
|
server->qhead = sendreq;
|
||||||
|
server->qtail = sendreq;
|
||||||
|
query->timeout = 0;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
if (server->udp_socket == -1)
|
||||||
|
{
|
||||||
|
if (open_udp_socket(channel, server) == -1)
|
||||||
|
{
|
||||||
|
query->skip_server[query->server] = 1;
|
||||||
|
next_server(channel, query, now);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (send(server->udp_socket, query->qbuf, query->qlen, 0) == -1)
|
||||||
|
{
|
||||||
|
query->skip_server[query->server] = 1;
|
||||||
|
next_server(channel, query, now);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
query->timeout = now
|
||||||
|
+ ((query->try == 0) ? channel->timeout
|
||||||
|
: channel->timeout << query->try / channel->nservers);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
static int open_tcp_socket(ares_channel channel, struct server_state *server)
|
||||||
|
{
|
||||||
|
int s, flags;
|
||||||
|
struct sockaddr_in sin;
|
||||||
|
|
||||||
|
/* Acquire a socket. */
|
||||||
|
s = socket(AF_INET, SOCK_STREAM, 0);
|
||||||
|
if (s == -1)
|
||||||
|
return -1;
|
||||||
|
|
||||||
|
/* Set the socket non-blocking. */
|
||||||
|
|
||||||
|
#ifdef WIN32
|
||||||
|
flags = 1;
|
||||||
|
ioctlsocket(s, FIONBIO, &flags);
|
||||||
|
#else
|
||||||
|
if (fcntl(s, F_GETFL, &flags) == -1)
|
||||||
|
{
|
||||||
|
close(s);
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
flags &= O_NONBLOCK;
|
||||||
|
if (fcntl(s, F_SETFL, flags) == -1)
|
||||||
|
{
|
||||||
|
close(s);
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/* Connect to the server. */
|
||||||
|
memset(&sin, 0, sizeof(sin));
|
||||||
|
sin.sin_family = AF_INET;
|
||||||
|
sin.sin_addr = server->addr;
|
||||||
|
sin.sin_port = channel->tcp_port;
|
||||||
|
if (connect(s, (struct sockaddr *) &sin, sizeof(sin)) == -1
|
||||||
|
&& errno != EINPROGRESS)
|
||||||
|
{
|
||||||
|
closesocket(s);
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
server->tcp_socket = s;
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
static int open_udp_socket(ares_channel channel, struct server_state *server)
|
||||||
|
{
|
||||||
|
int s;
|
||||||
|
struct sockaddr_in sin;
|
||||||
|
|
||||||
|
/* Acquire a socket. */
|
||||||
|
s = socket(AF_INET, SOCK_DGRAM, 0);
|
||||||
|
if (s == -1)
|
||||||
|
return -1;
|
||||||
|
|
||||||
|
/* Connect to the server. */
|
||||||
|
memset(&sin, 0, sizeof(sin));
|
||||||
|
sin.sin_family = AF_INET;
|
||||||
|
sin.sin_addr = server->addr;
|
||||||
|
sin.sin_port = channel->udp_port;
|
||||||
|
if (connect(s, (struct sockaddr *) &sin, sizeof(sin)) == -1)
|
||||||
|
{
|
||||||
|
closesocket(s);
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
server->udp_socket = s;
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
static int same_questions(const unsigned char *qbuf, int qlen,
|
||||||
|
const unsigned char *abuf, int alen)
|
||||||
|
{
|
||||||
|
struct {
|
||||||
|
const unsigned char *p;
|
||||||
|
int qdcount;
|
||||||
|
char *name;
|
||||||
|
int namelen;
|
||||||
|
int type;
|
||||||
|
int dnsclass;
|
||||||
|
} q, a;
|
||||||
|
int i, j;
|
||||||
|
|
||||||
|
if (qlen < HFIXEDSZ || alen < HFIXEDSZ)
|
||||||
|
return 0;
|
||||||
|
|
||||||
|
/* Extract qdcount from the request and reply buffers and compare them. */
|
||||||
|
q.qdcount = DNS_HEADER_QDCOUNT(qbuf);
|
||||||
|
a.qdcount = DNS_HEADER_QDCOUNT(abuf);
|
||||||
|
if (q.qdcount != a.qdcount)
|
||||||
|
return 0;
|
||||||
|
|
||||||
|
/* For each question in qbuf, find it in abuf. */
|
||||||
|
q.p = qbuf + HFIXEDSZ;
|
||||||
|
for (i = 0; i < q.qdcount; i++)
|
||||||
|
{
|
||||||
|
/* Decode the question in the query. */
|
||||||
|
if (ares_expand_name(q.p, qbuf, qlen, &q.name, &q.namelen)
|
||||||
|
!= ARES_SUCCESS)
|
||||||
|
return 0;
|
||||||
|
q.p += q.namelen;
|
||||||
|
if (q.p + QFIXEDSZ > qbuf + qlen)
|
||||||
|
{
|
||||||
|
free(q.name);
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
q.type = DNS_QUESTION_TYPE(q.p);
|
||||||
|
q.dnsclass = DNS_QUESTION_CLASS(q.p);
|
||||||
|
q.p += QFIXEDSZ;
|
||||||
|
|
||||||
|
/* Search for this question in the answer. */
|
||||||
|
a.p = abuf + HFIXEDSZ;
|
||||||
|
for (j = 0; j < a.qdcount; j++)
|
||||||
|
{
|
||||||
|
/* Decode the question in the answer. */
|
||||||
|
if (ares_expand_name(a.p, abuf, alen, &a.name, &a.namelen)
|
||||||
|
!= ARES_SUCCESS)
|
||||||
|
{
|
||||||
|
free(q.name);
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
a.p += a.namelen;
|
||||||
|
if (a.p + QFIXEDSZ > abuf + alen)
|
||||||
|
{
|
||||||
|
free(q.name);
|
||||||
|
free(a.name);
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
a.type = DNS_QUESTION_TYPE(a.p);
|
||||||
|
a.dnsclass = DNS_QUESTION_CLASS(a.p);
|
||||||
|
a.p += QFIXEDSZ;
|
||||||
|
|
||||||
|
/* Compare the decoded questions. */
|
||||||
|
if (strcasecmp(q.name, a.name) == 0 && q.type == a.type
|
||||||
|
&& q.dnsclass == a.dnsclass)
|
||||||
|
{
|
||||||
|
free(a.name);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
free(a.name);
|
||||||
|
}
|
||||||
|
|
||||||
|
free(q.name);
|
||||||
|
if (j == a.qdcount)
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
static void end_query(ares_channel channel, struct query *query, int status,
|
||||||
|
unsigned char *abuf, int alen)
|
||||||
|
{
|
||||||
|
struct query **q;
|
||||||
|
int i;
|
||||||
|
|
||||||
|
query->callback(query->arg, status, abuf, alen);
|
||||||
|
for (q = &channel->queries; *q; q = &(*q)->next)
|
||||||
|
{
|
||||||
|
if (*q == query)
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
*q = query->next;
|
||||||
|
free(query->tcpbuf);
|
||||||
|
free(query->skip_server);
|
||||||
|
free(query);
|
||||||
|
|
||||||
|
/* Simple cleanup policy: if no queries are remaining, close all
|
||||||
|
* network sockets unless STAYOPEN is set.
|
||||||
|
*/
|
||||||
|
if (!channel->queries && !(channel->flags & ARES_FLAG_STAYOPEN))
|
||||||
|
{
|
||||||
|
for (i = 0; i < channel->nservers; i++)
|
||||||
|
ares__close_sockets(&channel->servers[i]);
|
||||||
|
}
|
||||||
|
}
|
||||||
142
ares/ares_query.3
Normal file
142
ares/ares_query.3
Normal file
@@ -0,0 +1,142 @@
|
|||||||
|
.\" $Id$
|
||||||
|
.\"
|
||||||
|
.\" Copyright 1998 by the Massachusetts Institute of Technology.
|
||||||
|
.\"
|
||||||
|
.\" Permission to use, copy, modify, and distribute this
|
||||||
|
.\" software and its documentation for any purpose and without
|
||||||
|
.\" fee is hereby granted, provided that the above copyright
|
||||||
|
.\" notice appear in all copies and that both that copyright
|
||||||
|
.\" notice and this permission notice appear in supporting
|
||||||
|
.\" documentation, and that the name of M.I.T. not be used in
|
||||||
|
.\" advertising or publicity pertaining to distribution of the
|
||||||
|
.\" software without specific, written prior permission.
|
||||||
|
.\" M.I.T. makes no representations about the suitability of
|
||||||
|
.\" this software for any purpose. It is provided "as is"
|
||||||
|
.\" without express or implied warranty.
|
||||||
|
.\"
|
||||||
|
.TH ARES_QUERY 3 "24 July 1998"
|
||||||
|
.SH NAME
|
||||||
|
ares_query \- Initiate a single-question DNS query
|
||||||
|
.SH SYNOPSIS
|
||||||
|
.nf
|
||||||
|
.B #include <ares.h>
|
||||||
|
.PP
|
||||||
|
.B typedef void (*ares_callback)(void *\fIarg\fP, int \fIstatus\fP,
|
||||||
|
.B unsigned char *\fIabuf\fP, int \fIalen\fP)
|
||||||
|
.PP
|
||||||
|
.B void ares_query(ares_channel \fIchannel\fP, const char *\fIname\fP,
|
||||||
|
.B int \fIdnsclass\fP, int \fItype\fP, ares_callback \fIcallback\fP,
|
||||||
|
.B void *\fIarg\fP)
|
||||||
|
.fi
|
||||||
|
.SH DESCRIPTION
|
||||||
|
The
|
||||||
|
.B ares_query
|
||||||
|
function initiates a single-question DNS query on the name service
|
||||||
|
channel identified by
|
||||||
|
.IR channel .
|
||||||
|
The parameter
|
||||||
|
.I name
|
||||||
|
gives the query name as a NUL-terminated C string of period-separated
|
||||||
|
labels optionally ending with a period; periods and backslashes within
|
||||||
|
a label must be escaped with a backslash. The parameters
|
||||||
|
.I dnsclass
|
||||||
|
and
|
||||||
|
.I type
|
||||||
|
give the class and type of the query using the values defined in
|
||||||
|
.BR <arpa/nameser.h> .
|
||||||
|
When the query is complete or has failed, the ares library will invoke
|
||||||
|
.IR callback .
|
||||||
|
Completion or failure of the query may happen immediately, or may
|
||||||
|
happen during a later call to
|
||||||
|
.BR ares_process (3)
|
||||||
|
or
|
||||||
|
.BR ares_destroy (3).
|
||||||
|
.PP
|
||||||
|
The callback argument
|
||||||
|
.I arg
|
||||||
|
is copied from the
|
||||||
|
.B ares_query
|
||||||
|
argument
|
||||||
|
.IR arg .
|
||||||
|
The callback argument
|
||||||
|
.I status
|
||||||
|
indicates whether the query succeeded and, if not, how it failed. It
|
||||||
|
may have any of the following values:
|
||||||
|
.TP 19
|
||||||
|
.B ARES_SUCCESS
|
||||||
|
The query completed successfully.
|
||||||
|
.TP 19
|
||||||
|
.B ARES_ENODATA
|
||||||
|
The query completed but contains no answers.
|
||||||
|
.TP 19
|
||||||
|
.B ARES_EFORMERR
|
||||||
|
The query completed but the server claims that the query was
|
||||||
|
malformatted.
|
||||||
|
.TP 19
|
||||||
|
.B ARES_ESERVFAIL
|
||||||
|
The query completed but the server claims to have experienced a
|
||||||
|
failure. (This code can only occur if the
|
||||||
|
.B ARES_FLAG_NOCHECKRESP
|
||||||
|
flag was specified at channel initialization time; otherwise, such
|
||||||
|
responses are ignored at the
|
||||||
|
.BR ares_send (3)
|
||||||
|
level.)
|
||||||
|
.TP 19
|
||||||
|
.B ARES_ENOTFOUND
|
||||||
|
The query completed but the queried-for domain name was not found.
|
||||||
|
.TP 19
|
||||||
|
.B ARES_ENOTIMP
|
||||||
|
The query completed but the server does not implement the operation
|
||||||
|
requested by the query. (This code can only occur if the
|
||||||
|
.B ARES_FLAG_NOCHECKRESP
|
||||||
|
flag was specified at channel initialization time; otherwise, such
|
||||||
|
responses are ignored at the
|
||||||
|
.BR ares_send (3)
|
||||||
|
level.)
|
||||||
|
.TP 19
|
||||||
|
.B ARES_EREFUSED
|
||||||
|
The query completed but the server refused the query. (This code can
|
||||||
|
only occur if the
|
||||||
|
.B ARES_FLAG_NOCHECKRESP
|
||||||
|
flag was specified at channel initialization time; otherwise, such
|
||||||
|
responses are ignored at the
|
||||||
|
.BR ares_send (3)
|
||||||
|
level.)
|
||||||
|
.TP 19
|
||||||
|
.B ARES_EBADNAME
|
||||||
|
The query name
|
||||||
|
.I name
|
||||||
|
could not be encoded as a domain name, either because it contained a
|
||||||
|
zero-length label or because it contained a label of more than 63
|
||||||
|
characters.
|
||||||
|
.TP 19
|
||||||
|
.B ARES_ETIMEOUT
|
||||||
|
No name servers responded within the timeout period.
|
||||||
|
.TP 19
|
||||||
|
.B ARES_ECONNREFUSED
|
||||||
|
No name servers could be contacted.
|
||||||
|
.TP 19
|
||||||
|
.B ARES_ENOMEM
|
||||||
|
Memory was exhausted.
|
||||||
|
.TP 19
|
||||||
|
.B ARES_EDESTRUCTION
|
||||||
|
The name service channel
|
||||||
|
.I channel
|
||||||
|
is being destroyed; the query will not be completed.
|
||||||
|
.PP
|
||||||
|
If the query completed (even if there was something wrong with it, as
|
||||||
|
indicated by some of the above error codes), the callback argument
|
||||||
|
.I abuf
|
||||||
|
points to a result buffer of length
|
||||||
|
.IR alen .
|
||||||
|
If the query did not complete,
|
||||||
|
.I abuf
|
||||||
|
will be NULL and
|
||||||
|
.I alen
|
||||||
|
will be 0.
|
||||||
|
.SH SEE ALSO
|
||||||
|
.BR ares_process (3)
|
||||||
|
.SH AUTHOR
|
||||||
|
Greg Hudson, MIT Information Systems
|
||||||
|
.br
|
||||||
|
Copyright 1998 by the Massachusetts Institute of Technology.
|
||||||
112
ares/ares_query.c
Normal file
112
ares/ares_query.c
Normal file
@@ -0,0 +1,112 @@
|
|||||||
|
/* Copyright 1998 by the Massachusetts Institute of Technology.
|
||||||
|
*
|
||||||
|
* Permission to use, copy, modify, and distribute this
|
||||||
|
* software and its documentation for any purpose and without
|
||||||
|
* fee is hereby granted, provided that the above copyright
|
||||||
|
* notice appear in all copies and that both that copyright
|
||||||
|
* notice and this permission notice appear in supporting
|
||||||
|
* documentation, and that the name of M.I.T. not be used in
|
||||||
|
* advertising or publicity pertaining to distribution of the
|
||||||
|
* software without specific, written prior permission.
|
||||||
|
* M.I.T. makes no representations about the suitability of
|
||||||
|
* this software for any purpose. It is provided "as is"
|
||||||
|
* without express or implied warranty.
|
||||||
|
*/
|
||||||
|
|
||||||
|
static const char rcsid[] = "$Id$";
|
||||||
|
|
||||||
|
#include <sys/types.h>
|
||||||
|
|
||||||
|
#ifdef WIN32
|
||||||
|
#include "nameser.h"
|
||||||
|
#else
|
||||||
|
#include <netinet/in.h>
|
||||||
|
#include <arpa/nameser.h>
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#include <stdlib.h>
|
||||||
|
#include "ares.h"
|
||||||
|
#include "ares_dns.h"
|
||||||
|
#include "ares_private.h"
|
||||||
|
|
||||||
|
struct qquery {
|
||||||
|
ares_callback callback;
|
||||||
|
void *arg;
|
||||||
|
};
|
||||||
|
|
||||||
|
static void qcallback(void *arg, int status, unsigned char *abuf, int alen);
|
||||||
|
|
||||||
|
void ares_query(ares_channel channel, const char *name, int dnsclass,
|
||||||
|
int type, ares_callback callback, void *arg)
|
||||||
|
{
|
||||||
|
struct qquery *qquery;
|
||||||
|
unsigned char *qbuf;
|
||||||
|
int qlen, rd, status;
|
||||||
|
|
||||||
|
/* Compose the query. */
|
||||||
|
rd = !(channel->flags & ARES_FLAG_NORECURSE);
|
||||||
|
status = ares_mkquery(name, dnsclass, type, channel->next_id, rd, &qbuf,
|
||||||
|
&qlen);
|
||||||
|
channel->next_id++;
|
||||||
|
if (status != ARES_SUCCESS)
|
||||||
|
{
|
||||||
|
callback(arg, status, NULL, 0);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Allocate and fill in the query structure. */
|
||||||
|
qquery = malloc(sizeof(struct qquery));
|
||||||
|
if (!qquery)
|
||||||
|
{
|
||||||
|
ares_free_string(qbuf);
|
||||||
|
callback(arg, ARES_ENOMEM, NULL, 0);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
qquery->callback = callback;
|
||||||
|
qquery->arg = arg;
|
||||||
|
|
||||||
|
/* Send it off. qcallback will be called when we get an answer. */
|
||||||
|
ares_send(channel, qbuf, qlen, qcallback, qquery);
|
||||||
|
ares_free_string(qbuf);
|
||||||
|
}
|
||||||
|
|
||||||
|
static void qcallback(void *arg, int status, unsigned char *abuf, int alen)
|
||||||
|
{
|
||||||
|
struct qquery *qquery = (struct qquery *) arg;
|
||||||
|
unsigned int ancount;
|
||||||
|
int rcode;
|
||||||
|
|
||||||
|
if (status != ARES_SUCCESS)
|
||||||
|
qquery->callback(qquery->arg, status, abuf, alen);
|
||||||
|
else
|
||||||
|
{
|
||||||
|
/* Pull the response code and answer count from the packet. */
|
||||||
|
rcode = DNS_HEADER_RCODE(abuf);
|
||||||
|
ancount = DNS_HEADER_ANCOUNT(abuf);
|
||||||
|
|
||||||
|
/* Convert errors. */
|
||||||
|
switch (rcode)
|
||||||
|
{
|
||||||
|
case NOERROR:
|
||||||
|
status = (ancount > 0) ? ARES_SUCCESS : ARES_ENODATA;
|
||||||
|
break;
|
||||||
|
case FORMERR:
|
||||||
|
status = ARES_EFORMERR;
|
||||||
|
break;
|
||||||
|
case SERVFAIL:
|
||||||
|
status = ARES_ESERVFAIL;
|
||||||
|
break;
|
||||||
|
case NXDOMAIN:
|
||||||
|
status = ARES_ENOTFOUND;
|
||||||
|
break;
|
||||||
|
case NOTIMP:
|
||||||
|
status = ARES_ENOTIMP;
|
||||||
|
break;
|
||||||
|
case REFUSED:
|
||||||
|
status = ARES_EREFUSED;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
qquery->callback(qquery->arg, status, abuf, alen);
|
||||||
|
}
|
||||||
|
free(qquery);
|
||||||
|
}
|
||||||
144
ares/ares_search.3
Normal file
144
ares/ares_search.3
Normal file
@@ -0,0 +1,144 @@
|
|||||||
|
.\" $Id$
|
||||||
|
.\"
|
||||||
|
.\" Copyright 1998 by the Massachusetts Institute of Technology.
|
||||||
|
.\"
|
||||||
|
.\" Permission to use, copy, modify, and distribute this
|
||||||
|
.\" software and its documentation for any purpose and without
|
||||||
|
.\" fee is hereby granted, provided that the above copyright
|
||||||
|
.\" notice appear in all copies and that both that copyright
|
||||||
|
.\" notice and this permission notice appear in supporting
|
||||||
|
.\" documentation, and that the name of M.I.T. not be used in
|
||||||
|
.\" advertising or publicity pertaining to distribution of the
|
||||||
|
.\" software without specific, written prior permission.
|
||||||
|
.\" M.I.T. makes no representations about the suitability of
|
||||||
|
.\" this software for any purpose. It is provided "as is"
|
||||||
|
.\" without express or implied warranty.
|
||||||
|
.\"
|
||||||
|
.TH ARES_SEARCH 3 "24 July 1998"
|
||||||
|
.SH NAME
|
||||||
|
ares_search \- Initiate a DNS query with domain search
|
||||||
|
.SH SYNOPSIS
|
||||||
|
.nf
|
||||||
|
.B #include <ares.h>
|
||||||
|
.PP
|
||||||
|
.B typedef void (*ares_callback)(void *\fIarg\fP, int \fIstatus\fP,
|
||||||
|
.B unsigned char *\fIabuf\fP, int \fIalen\fP)
|
||||||
|
.PP
|
||||||
|
.B void ares_search(ares_channel \fIchannel\fP, const char *\fIname\fP,
|
||||||
|
.B int \fIdnsclass\fP, int \fItype\fP, ares_callback \fIcallback\fP,
|
||||||
|
.B void *\fIarg\fP)
|
||||||
|
.fi
|
||||||
|
.SH DESCRIPTION
|
||||||
|
The
|
||||||
|
.B ares_search
|
||||||
|
function initiates a series of single-question DNS queries on the name
|
||||||
|
service channel identified by
|
||||||
|
.IR channel ,
|
||||||
|
using the channel's search domains as well as a host alias file given
|
||||||
|
by the HOSTALIAS environment variable. The parameter
|
||||||
|
.I name
|
||||||
|
gives the alias name or the base of the query name as a NUL-terminated
|
||||||
|
C string of period-separated labels; if it ends with a period, the
|
||||||
|
channel's search domains will not be used. Periods and backslashes
|
||||||
|
within a label must be escaped with a backslash. The parameters
|
||||||
|
.I dnsclass
|
||||||
|
and
|
||||||
|
.I type
|
||||||
|
give the class and type of the query using the values defined in
|
||||||
|
.BR <arpa/nameser.h> .
|
||||||
|
When the query sequence is complete or has failed, the ares library
|
||||||
|
will invoke
|
||||||
|
.IR callback .
|
||||||
|
Completion or failure of the query sequence may happen immediately, or
|
||||||
|
may happen during a later call to
|
||||||
|
.BR ares_process (3)
|
||||||
|
or
|
||||||
|
.BR ares_destroy (3).
|
||||||
|
.PP
|
||||||
|
The callback argument
|
||||||
|
.I arg
|
||||||
|
is copied from the
|
||||||
|
.B ares_search
|
||||||
|
argument
|
||||||
|
.IR arg .
|
||||||
|
The callback argument
|
||||||
|
.I status
|
||||||
|
indicates whether the query sequence ended with a successful query
|
||||||
|
and, if not, how the query sequence failed. It may have any of the
|
||||||
|
following values:
|
||||||
|
.TP 19
|
||||||
|
.B ARES_SUCCESS
|
||||||
|
A query completed successfully.
|
||||||
|
.TP 19
|
||||||
|
.B ARES_ENODATA
|
||||||
|
No query completed successfully; when the query was tried without a
|
||||||
|
search domain appended, a response was returned with no answers.
|
||||||
|
.TP 19
|
||||||
|
.B ARES_EFORMERR
|
||||||
|
A query completed but the server claimed that the query was
|
||||||
|
malformatted.
|
||||||
|
.TP 19
|
||||||
|
.B ARES_ESERVFAIL
|
||||||
|
No query completed successfully; when the query was tried without a
|
||||||
|
search domain appended, the server claimed to have experienced a
|
||||||
|
failure. (This code can only occur if the
|
||||||
|
.B ARES_FLAG_NOCHECKRESP
|
||||||
|
flag was specified at channel initialization time; otherwise, such
|
||||||
|
responses are ignored at the
|
||||||
|
.BR ares_send (3)
|
||||||
|
level.)
|
||||||
|
.TP 19
|
||||||
|
.B ARES_ENOTFOUND
|
||||||
|
No query completed successfully; when the query was tried without a
|
||||||
|
search domain appended, the server reported that the queried-for
|
||||||
|
domain name was not found.
|
||||||
|
.TP 19
|
||||||
|
.B ARES_ENOTIMP
|
||||||
|
A query completed but the server does not implement the operation
|
||||||
|
requested by the query. (This code can only occur if the
|
||||||
|
.B ARES_FLAG_NOCHECKRESP
|
||||||
|
flag was specified at channel initialization time; otherwise, such
|
||||||
|
responses are ignored at the
|
||||||
|
.BR ares_send (3)
|
||||||
|
level.)
|
||||||
|
.TP 19
|
||||||
|
.B ARES_EREFUSED
|
||||||
|
A query completed but the server refused the query. (This code can
|
||||||
|
only occur returned if the
|
||||||
|
.B ARES_FLAG_NOCHECKRESP
|
||||||
|
flag was specified at channel initialization time; otherwise, such
|
||||||
|
responses are ignored at the
|
||||||
|
.BR ares_send (3)
|
||||||
|
level.)
|
||||||
|
.TP 19
|
||||||
|
.B ARES_TIMEOUT
|
||||||
|
No name servers responded to a query within the timeout period.
|
||||||
|
.TP 19
|
||||||
|
.B ARES_ECONNREFUSED
|
||||||
|
No name servers could be contacted.
|
||||||
|
.TP 19
|
||||||
|
.B ARES_ENOMEM
|
||||||
|
Memory was exhausted.
|
||||||
|
.TP 19
|
||||||
|
.B ARES_EDESTRUCTION
|
||||||
|
The name service channel
|
||||||
|
.I channel
|
||||||
|
is being destroyed; the query will not be completed.
|
||||||
|
.PP
|
||||||
|
If a query completed successfully, the callback argument
|
||||||
|
.I abuf
|
||||||
|
points to a result buffer of length
|
||||||
|
.IR alen .
|
||||||
|
If the query did not complete successfully,
|
||||||
|
.I abuf
|
||||||
|
will usually be NULL and
|
||||||
|
.I alen
|
||||||
|
will usually be 0, but in some cases an unsuccessful query result may
|
||||||
|
be placed in
|
||||||
|
.IR abuf .
|
||||||
|
.SH SEE ALSO
|
||||||
|
.BR ares_process (3)
|
||||||
|
.SH AUTHOR
|
||||||
|
Greg Hudson, MIT Information Systems
|
||||||
|
.br
|
||||||
|
Copyright 1998 by the Massachusetts Institute of Technology.
|
||||||
273
ares/ares_search.c
Normal file
273
ares/ares_search.c
Normal file
@@ -0,0 +1,273 @@
|
|||||||
|
/* Copyright 1998 by the Massachusetts Institute of Technology.
|
||||||
|
*
|
||||||
|
* Permission to use, copy, modify, and distribute this
|
||||||
|
* software and its documentation for any purpose and without
|
||||||
|
* fee is hereby granted, provided that the above copyright
|
||||||
|
* notice appear in all copies and that both that copyright
|
||||||
|
* notice and this permission notice appear in supporting
|
||||||
|
* documentation, and that the name of M.I.T. not be used in
|
||||||
|
* advertising or publicity pertaining to distribution of the
|
||||||
|
* software without specific, written prior permission.
|
||||||
|
* M.I.T. makes no representations about the suitability of
|
||||||
|
* this software for any purpose. It is provided "as is"
|
||||||
|
* without express or implied warranty.
|
||||||
|
*/
|
||||||
|
|
||||||
|
static const char rcsid[] = "$Id$";
|
||||||
|
|
||||||
|
#include <stdio.h>
|
||||||
|
#include <stdlib.h>
|
||||||
|
#include <string.h>
|
||||||
|
#include <ctype.h>
|
||||||
|
|
||||||
|
#ifdef WIN32
|
||||||
|
#include "nameser.h"
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#include "ares.h"
|
||||||
|
#include "ares_private.h"
|
||||||
|
|
||||||
|
struct search_query {
|
||||||
|
/* Arguments passed to ares_search */
|
||||||
|
ares_channel channel;
|
||||||
|
char *name; /* copied into an allocated buffer */
|
||||||
|
int dnsclass;
|
||||||
|
int type;
|
||||||
|
ares_callback callback;
|
||||||
|
void *arg;
|
||||||
|
|
||||||
|
int status_as_is; /* error status from trying as-is */
|
||||||
|
int next_domain; /* next search domain to try */
|
||||||
|
int trying_as_is; /* current query is for name as-is */
|
||||||
|
};
|
||||||
|
|
||||||
|
static void search_callback(void *arg, int status, unsigned char *abuf,
|
||||||
|
int alen);
|
||||||
|
static void end_squery(struct search_query *squery, int status,
|
||||||
|
unsigned char *abuf, int alen);
|
||||||
|
static int cat_domain(const char *name, const char *domain, char **s);
|
||||||
|
static int single_domain(ares_channel channel, const char *name, char **s);
|
||||||
|
|
||||||
|
void ares_search(ares_channel channel, const char *name, int dnsclass,
|
||||||
|
int type, ares_callback callback, void *arg)
|
||||||
|
{
|
||||||
|
struct search_query *squery;
|
||||||
|
char *s;
|
||||||
|
const char *p;
|
||||||
|
int status, ndots;
|
||||||
|
|
||||||
|
/* If name only yields one domain to search, then we don't have
|
||||||
|
* to keep extra state, so just do an ares_query().
|
||||||
|
*/
|
||||||
|
status = single_domain(channel, name, &s);
|
||||||
|
if (status != ARES_SUCCESS)
|
||||||
|
{
|
||||||
|
callback(arg, status, NULL, 0);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
if (s)
|
||||||
|
{
|
||||||
|
ares_query(channel, s, dnsclass, type, callback, arg);
|
||||||
|
free(s);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Allocate a search_query structure to hold the state necessary for
|
||||||
|
* doing multiple lookups.
|
||||||
|
*/
|
||||||
|
squery = malloc(sizeof(struct search_query));
|
||||||
|
if (!squery)
|
||||||
|
{
|
||||||
|
callback(arg, ARES_ENOMEM, NULL, 0);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
squery->channel = channel;
|
||||||
|
squery->name = strdup(name);
|
||||||
|
if (!squery->name)
|
||||||
|
{
|
||||||
|
free(squery);
|
||||||
|
callback(arg, ARES_ENOMEM, NULL, 0);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
squery->dnsclass = dnsclass;
|
||||||
|
squery->type = type;
|
||||||
|
squery->status_as_is = -1;
|
||||||
|
squery->callback = callback;
|
||||||
|
squery->arg = arg;
|
||||||
|
|
||||||
|
/* Count the number of dots in name. */
|
||||||
|
ndots = 0;
|
||||||
|
for (p = name; *p; p++)
|
||||||
|
{
|
||||||
|
if (*p == '.')
|
||||||
|
ndots++;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* If ndots is at least the channel ndots threshold (usually 1),
|
||||||
|
* then we try the name as-is first. Otherwise, we try the name
|
||||||
|
* as-is last.
|
||||||
|
*/
|
||||||
|
if (ndots >= channel->ndots)
|
||||||
|
{
|
||||||
|
/* Try the name as-is first. */
|
||||||
|
squery->next_domain = 0;
|
||||||
|
squery->trying_as_is = 1;
|
||||||
|
ares_query(channel, name, dnsclass, type, search_callback, squery);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
/* Try the name as-is last; start with the first search domain. */
|
||||||
|
squery->next_domain = 1;
|
||||||
|
squery->trying_as_is = 0;
|
||||||
|
status = cat_domain(name, channel->domains[0], &s);
|
||||||
|
if (status == ARES_SUCCESS)
|
||||||
|
{
|
||||||
|
ares_query(channel, s, dnsclass, type, search_callback, squery);
|
||||||
|
free(s);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
callback(arg, status, NULL, 0);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
static void search_callback(void *arg, int status, unsigned char *abuf,
|
||||||
|
int alen)
|
||||||
|
{
|
||||||
|
struct search_query *squery = (struct search_query *) arg;
|
||||||
|
ares_channel channel = squery->channel;
|
||||||
|
char *s;
|
||||||
|
|
||||||
|
/* Stop searching unless we got a non-fatal error. */
|
||||||
|
if (status != ARES_ENODATA && status != ARES_ESERVFAIL
|
||||||
|
&& status != ARES_ENOTFOUND)
|
||||||
|
end_squery(squery, status, abuf, alen);
|
||||||
|
else
|
||||||
|
{
|
||||||
|
/* Save the status if we were trying as-is. */
|
||||||
|
if (squery->trying_as_is)
|
||||||
|
squery->status_as_is = status;
|
||||||
|
if (squery->next_domain < channel->ndomains)
|
||||||
|
{
|
||||||
|
/* Try the next domain. */
|
||||||
|
status = cat_domain(squery->name,
|
||||||
|
channel->domains[squery->next_domain], &s);
|
||||||
|
if (status != ARES_SUCCESS)
|
||||||
|
end_squery(squery, status, NULL, 0);
|
||||||
|
else
|
||||||
|
{
|
||||||
|
squery->trying_as_is = 0;
|
||||||
|
squery->next_domain++;
|
||||||
|
ares_query(channel, s, squery->dnsclass, squery->type,
|
||||||
|
search_callback, squery);
|
||||||
|
free(s);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else if (squery->status_as_is == -1)
|
||||||
|
{
|
||||||
|
/* Try the name as-is at the end. */
|
||||||
|
squery->trying_as_is = 1;
|
||||||
|
ares_query(channel, squery->name, squery->dnsclass, squery->type,
|
||||||
|
search_callback, squery);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
end_squery(squery, squery->status_as_is, NULL, 0);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
static void end_squery(struct search_query *squery, int status,
|
||||||
|
unsigned char *abuf, int alen)
|
||||||
|
{
|
||||||
|
squery->callback(squery->arg, status, abuf, alen);
|
||||||
|
free(squery->name);
|
||||||
|
free(squery);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Concatenate two domains. */
|
||||||
|
static int cat_domain(const char *name, const char *domain, char **s)
|
||||||
|
{
|
||||||
|
int nlen = strlen(name), dlen = strlen(domain);
|
||||||
|
|
||||||
|
*s = malloc(nlen + 1 + dlen + 1);
|
||||||
|
if (!*s)
|
||||||
|
return ARES_ENOMEM;
|
||||||
|
memcpy(*s, name, nlen);
|
||||||
|
(*s)[nlen] = '.';
|
||||||
|
memcpy(*s + nlen + 1, domain, dlen);
|
||||||
|
(*s)[nlen + 1 + dlen] = 0;
|
||||||
|
return ARES_SUCCESS;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Determine if this name only yields one query. If it does, set *s to
|
||||||
|
* the string we should query, in an allocated buffer. If not, set *s
|
||||||
|
* to NULL.
|
||||||
|
*/
|
||||||
|
static int single_domain(ares_channel channel, const char *name, char **s)
|
||||||
|
{
|
||||||
|
int len = strlen(name);
|
||||||
|
const char *hostaliases;
|
||||||
|
FILE *fp;
|
||||||
|
char *line = NULL;
|
||||||
|
int linesize, status;
|
||||||
|
const char *p, *q;
|
||||||
|
|
||||||
|
/* If the name contains a trailing dot, then the single query is the name
|
||||||
|
* sans the trailing dot.
|
||||||
|
*/
|
||||||
|
if (name[len - 1] == '.')
|
||||||
|
{
|
||||||
|
*s = strdup(name);
|
||||||
|
return (*s) ? ARES_SUCCESS : ARES_ENOMEM;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!(channel->flags & ARES_FLAG_NOALIASES) && !strchr(name, '.'))
|
||||||
|
{
|
||||||
|
/* The name might be a host alias. */
|
||||||
|
hostaliases = getenv("HOSTALIASES");
|
||||||
|
if (hostaliases)
|
||||||
|
{
|
||||||
|
fp = fopen(hostaliases, "r");
|
||||||
|
if (fp)
|
||||||
|
{
|
||||||
|
while ((status = ares__read_line(fp, &line, &linesize))
|
||||||
|
== ARES_SUCCESS)
|
||||||
|
{
|
||||||
|
if (strncasecmp(line, name, len) != 0 ||
|
||||||
|
!isspace((unsigned char)line[len]))
|
||||||
|
continue;
|
||||||
|
p = line + len;
|
||||||
|
while (isspace((unsigned char)*p))
|
||||||
|
p++;
|
||||||
|
if (*p)
|
||||||
|
{
|
||||||
|
q = p + 1;
|
||||||
|
while (*q && !isspace((unsigned char)*q))
|
||||||
|
q++;
|
||||||
|
*s = malloc(q - p + 1);
|
||||||
|
if (*s)
|
||||||
|
{
|
||||||
|
memcpy(*s, p, q - p);
|
||||||
|
(*s)[q - p] = 0;
|
||||||
|
}
|
||||||
|
free(line);
|
||||||
|
fclose(fp);
|
||||||
|
return (*s) ? ARES_SUCCESS : ARES_ENOMEM;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
free(line);
|
||||||
|
fclose(fp);
|
||||||
|
if (status != ARES_SUCCESS)
|
||||||
|
return status;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (channel->flags & ARES_FLAG_NOSEARCH || channel->ndomains == 0)
|
||||||
|
{
|
||||||
|
/* No domain search to do; just try the name as-is. */
|
||||||
|
*s = strdup(name);
|
||||||
|
return (*s) ? ARES_SUCCESS : ARES_ENOMEM;
|
||||||
|
}
|
||||||
|
|
||||||
|
*s = NULL;
|
||||||
|
return ARES_SUCCESS;
|
||||||
|
}
|
||||||
117
ares/ares_send.3
Normal file
117
ares/ares_send.3
Normal file
@@ -0,0 +1,117 @@
|
|||||||
|
.\" $Id$
|
||||||
|
.\"
|
||||||
|
.\" Copyright 1998 by the Massachusetts Institute of Technology.
|
||||||
|
.\"
|
||||||
|
.\" Permission to use, copy, modify, and distribute this
|
||||||
|
.\" software and its documentation for any purpose and without
|
||||||
|
.\" fee is hereby granted, provided that the above copyright
|
||||||
|
.\" notice appear in all copies and that both that copyright
|
||||||
|
.\" notice and this permission notice appear in supporting
|
||||||
|
.\" documentation, and that the name of M.I.T. not be used in
|
||||||
|
.\" advertising or publicity pertaining to distribution of the
|
||||||
|
.\" software without specific, written prior permission.
|
||||||
|
.\" M.I.T. makes no representations about the suitability of
|
||||||
|
.\" this software for any purpose. It is provided "as is"
|
||||||
|
.\" without express or implied warranty.
|
||||||
|
.\"
|
||||||
|
.TH ARES_SEND 3 "25 July 1998"
|
||||||
|
.SH NAME
|
||||||
|
ares_send \- Initiate a DNS query
|
||||||
|
.SH SYNOPSIS
|
||||||
|
.nf
|
||||||
|
.B #include <ares.h>
|
||||||
|
.PP
|
||||||
|
.B typedef void (*ares_callback)(void *\fIarg\fP, int \fIstatus\fP,
|
||||||
|
.B unsigned char *\fIabuf\fP, int \fIalen\fP)
|
||||||
|
.PP
|
||||||
|
.B
|
||||||
|
void ares_send(ares_channel \fIchannel\fP, const unsigned char *\fIqbuf\fP,
|
||||||
|
.B int \fIqlen\fP, ares_callback \fIcallback\fP, void *\fIarg\fP)
|
||||||
|
.fi
|
||||||
|
.SH DESCRIPTION
|
||||||
|
The
|
||||||
|
.B ares_send
|
||||||
|
function initiates a DNS query on the name service channel identified
|
||||||
|
by
|
||||||
|
.IR channel .
|
||||||
|
The parameters
|
||||||
|
.I qbuf
|
||||||
|
and
|
||||||
|
.I qlen
|
||||||
|
give the DNS query, which should already have been formatted according
|
||||||
|
to the DNS protocol. When the query is complete or has failed, the
|
||||||
|
ares library will invoke
|
||||||
|
.IR callback .
|
||||||
|
Completion or failure of the query may happen immediately, or may
|
||||||
|
happen during a later call to
|
||||||
|
.BR ares_process (3)
|
||||||
|
or
|
||||||
|
.BR ares_destroy (3).
|
||||||
|
.PP
|
||||||
|
The callback argument
|
||||||
|
.I arg
|
||||||
|
is copied from the
|
||||||
|
.B ares_send
|
||||||
|
argument
|
||||||
|
.IR arg .
|
||||||
|
The callback argument
|
||||||
|
.I status
|
||||||
|
indicates whether the query succeeded and, if not, how it failed. It
|
||||||
|
may have any of the following values:
|
||||||
|
.TP 19
|
||||||
|
.B ARES_SUCCESS
|
||||||
|
The query completed.
|
||||||
|
.TP 19
|
||||||
|
.B ARES_EBADQUERY
|
||||||
|
The query buffer was poorly formed (was not long enough for a DNS
|
||||||
|
header or was too long for TCP transmission).
|
||||||
|
.TP 19
|
||||||
|
.B ARES_ETIMEOUT
|
||||||
|
No name servers responded within the timeout period.
|
||||||
|
.TP 19
|
||||||
|
.B ARES_ECONNREFUSED
|
||||||
|
No name servers could be contacted.
|
||||||
|
.TP 19
|
||||||
|
.B ARES_ENOMEM
|
||||||
|
Memory was exhausted.
|
||||||
|
.TP 19
|
||||||
|
.B ARES_EDESTRUCTION
|
||||||
|
The name service channel
|
||||||
|
.I channel
|
||||||
|
is being destroyed; the query will not be completed.
|
||||||
|
.PP
|
||||||
|
If the query completed, the callback argument
|
||||||
|
.I abuf
|
||||||
|
points to a result buffer of length
|
||||||
|
.IR alen .
|
||||||
|
If the query did not complete,
|
||||||
|
.I abuf
|
||||||
|
will be NULL and
|
||||||
|
.I alen
|
||||||
|
will be 0.
|
||||||
|
.PP
|
||||||
|
Unless the flag
|
||||||
|
.B ARES_FLAG_NOCHECKRESP
|
||||||
|
was set at channel initialization time,
|
||||||
|
.B ares_send
|
||||||
|
will normally ignore responses whose questions do not match the
|
||||||
|
questions in
|
||||||
|
.IR qbuf ,
|
||||||
|
as well as responses with reply codes of
|
||||||
|
.BR SERVFAIL ,
|
||||||
|
.BR NOTIMP ,
|
||||||
|
and
|
||||||
|
.BR REFUSED .
|
||||||
|
Unlike other query functions in the ares library, however,
|
||||||
|
.B ares_send
|
||||||
|
does not inspect the header of the reply packet to determine the error
|
||||||
|
status, so a callback status of
|
||||||
|
.B ARES_SUCCESS
|
||||||
|
does not reflect as much about the response as for other query
|
||||||
|
functions.
|
||||||
|
.SH SEE ALSO
|
||||||
|
.BR ares_process (3)
|
||||||
|
.SH AUTHOR
|
||||||
|
Greg Hudson, MIT Information Systems
|
||||||
|
.br
|
||||||
|
Copyright 1998 by the Massachusetts Institute of Technology.
|
||||||
104
ares/ares_send.c
Normal file
104
ares/ares_send.c
Normal file
@@ -0,0 +1,104 @@
|
|||||||
|
/* Copyright 1998 by the Massachusetts Institute of Technology.
|
||||||
|
*
|
||||||
|
* Permission to use, copy, modify, and distribute this
|
||||||
|
* software and its documentation for any purpose and without
|
||||||
|
* fee is hereby granted, provided that the above copyright
|
||||||
|
* notice appear in all copies and that both that copyright
|
||||||
|
* notice and this permission notice appear in supporting
|
||||||
|
* documentation, and that the name of M.I.T. not be used in
|
||||||
|
* advertising or publicity pertaining to distribution of the
|
||||||
|
* software without specific, written prior permission.
|
||||||
|
* M.I.T. makes no representations about the suitability of
|
||||||
|
* this software for any purpose. It is provided "as is"
|
||||||
|
* without express or implied warranty.
|
||||||
|
*/
|
||||||
|
|
||||||
|
static const char rcsid[] = "$Id$";
|
||||||
|
|
||||||
|
#include <sys/types.h>
|
||||||
|
|
||||||
|
#ifdef WIN32
|
||||||
|
#include "nameser.h"
|
||||||
|
#else
|
||||||
|
#include <netinet/in.h>
|
||||||
|
#include <arpa/nameser.h>
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#include <stdlib.h>
|
||||||
|
#include <string.h>
|
||||||
|
#include <time.h>
|
||||||
|
#include "ares.h"
|
||||||
|
#include "ares_dns.h"
|
||||||
|
#include "ares_private.h"
|
||||||
|
|
||||||
|
void ares_send(ares_channel channel, const unsigned char *qbuf, int qlen,
|
||||||
|
ares_callback callback, void *arg)
|
||||||
|
{
|
||||||
|
struct query *query;
|
||||||
|
int i;
|
||||||
|
time_t now;
|
||||||
|
|
||||||
|
/* Verify that the query is at least long enough to hold the header. */
|
||||||
|
if (qlen < HFIXEDSZ || qlen >= (1 << 16))
|
||||||
|
{
|
||||||
|
callback(arg, ARES_EBADQUERY, NULL, 0);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Allocate space for query and allocated fields. */
|
||||||
|
query = malloc(sizeof(struct query));
|
||||||
|
if (!query)
|
||||||
|
{
|
||||||
|
callback(arg, ARES_ENOMEM, NULL, 0);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
query->tcpbuf = malloc(qlen + 2);
|
||||||
|
if (!query->tcpbuf)
|
||||||
|
{
|
||||||
|
free(query);
|
||||||
|
callback(arg, ARES_ENOMEM, NULL, 0);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
query->skip_server = malloc(channel->nservers * sizeof(int));
|
||||||
|
if (!query->skip_server)
|
||||||
|
{
|
||||||
|
free(query->tcpbuf);
|
||||||
|
free(query);
|
||||||
|
callback(arg, ARES_ENOMEM, NULL, 0);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Compute the query ID. Start with no timeout. */
|
||||||
|
query->qid = DNS_HEADER_QID(qbuf);
|
||||||
|
query->timeout = 0;
|
||||||
|
|
||||||
|
/* Form the TCP query buffer by prepending qlen (as two
|
||||||
|
* network-order bytes) to qbuf.
|
||||||
|
*/
|
||||||
|
query->tcpbuf[0] = (qlen >> 8) & 0xff;
|
||||||
|
query->tcpbuf[1] = qlen & 0xff;
|
||||||
|
memcpy(query->tcpbuf + 2, qbuf, qlen);
|
||||||
|
query->tcplen = qlen + 2;
|
||||||
|
|
||||||
|
/* Fill in query arguments. */
|
||||||
|
query->qbuf = query->tcpbuf + 2;
|
||||||
|
query->qlen = qlen;
|
||||||
|
query->callback = callback;
|
||||||
|
query->arg = arg;
|
||||||
|
|
||||||
|
/* Initialize query status. */
|
||||||
|
query->try = 0;
|
||||||
|
query->server = 0;
|
||||||
|
for (i = 0; i < channel->nservers; i++)
|
||||||
|
query->skip_server[i] = 0;
|
||||||
|
query->using_tcp = (channel->flags & ARES_FLAG_USEVC) || qlen > PACKETSZ;
|
||||||
|
query->error_status = ARES_ECONNREFUSED;
|
||||||
|
|
||||||
|
/* Chain the query into this channel's query list. */
|
||||||
|
query->next = channel->queries;
|
||||||
|
channel->queries = query;
|
||||||
|
|
||||||
|
/* Perform the first query action. */
|
||||||
|
time(&now);
|
||||||
|
ares__send_query(channel, query, now);
|
||||||
|
}
|
||||||
44
ares/ares_strerror.3
Normal file
44
ares/ares_strerror.3
Normal file
@@ -0,0 +1,44 @@
|
|||||||
|
.\" $Id$
|
||||||
|
.\"
|
||||||
|
.\" Copyright 1998 by the Massachusetts Institute of Technology.
|
||||||
|
.\"
|
||||||
|
.\" Permission to use, copy, modify, and distribute this
|
||||||
|
.\" software and its documentation for any purpose and without
|
||||||
|
.\" fee is hereby granted, provided that the above copyright
|
||||||
|
.\" notice appear in all copies and that both that copyright
|
||||||
|
.\" notice and this permission notice appear in supporting
|
||||||
|
.\" documentation, and that the name of M.I.T. not be used in
|
||||||
|
.\" advertising or publicity pertaining to distribution of the
|
||||||
|
.\" software without specific, written prior permission.
|
||||||
|
.\" M.I.T. makes no representations about the suitability of
|
||||||
|
.\" this software for any purpose. It is provided "as is"
|
||||||
|
.\" without express or implied warranty.
|
||||||
|
.\"
|
||||||
|
.TH ARES_STRERROR 3 "25 July 1998"
|
||||||
|
.SH NAME
|
||||||
|
ares_strerror \- Get the description of an ares library error code
|
||||||
|
.SH SYNOPSIS
|
||||||
|
.nf
|
||||||
|
.B #include <ares.h>
|
||||||
|
.PP
|
||||||
|
.B const char *ares_strerror(int \fIcode\fP, char **\fImemptr\fP)
|
||||||
|
.fi
|
||||||
|
.SH DESCRIPTION
|
||||||
|
The
|
||||||
|
.B ares_strerror
|
||||||
|
function gets the description of the ares library error code
|
||||||
|
.IR code ,
|
||||||
|
returning the result as a NUL-terminated C string. A pointer to
|
||||||
|
allocated data necessary to compose the error description may be
|
||||||
|
stored in the variable pointed to by
|
||||||
|
.IR memptr .
|
||||||
|
It is the caller's responsibility to invoke
|
||||||
|
.BR ares_free_errmem (3)
|
||||||
|
with the value of that variable when the error description is no
|
||||||
|
longer needed.
|
||||||
|
.SH SEE ALSO
|
||||||
|
.BR ares_free_errmem (3)
|
||||||
|
.SH AUTHOR
|
||||||
|
Greg Hudson, MIT Information Systems
|
||||||
|
.br
|
||||||
|
Copyright 1998 by the Massachusetts Institute of Technology.
|
||||||
47
ares/ares_strerror.c
Normal file
47
ares/ares_strerror.c
Normal file
@@ -0,0 +1,47 @@
|
|||||||
|
/* Copyright 1998 by the Massachusetts Institute of Technology.
|
||||||
|
*
|
||||||
|
* Permission to use, copy, modify, and distribute this
|
||||||
|
* software and its documentation for any purpose and without
|
||||||
|
* fee is hereby granted, provided that the above copyright
|
||||||
|
* notice appear in all copies and that both that copyright
|
||||||
|
* notice and this permission notice appear in supporting
|
||||||
|
* documentation, and that the name of M.I.T. not be used in
|
||||||
|
* advertising or publicity pertaining to distribution of the
|
||||||
|
* software without specific, written prior permission.
|
||||||
|
* M.I.T. makes no representations about the suitability of
|
||||||
|
* this software for any purpose. It is provided "as is"
|
||||||
|
* without express or implied warranty.
|
||||||
|
*/
|
||||||
|
|
||||||
|
static const char rcsid[] = "$Id$";
|
||||||
|
|
||||||
|
#include <assert.h>
|
||||||
|
#include "ares.h"
|
||||||
|
|
||||||
|
const char *ares_strerror(int code, char **memptr)
|
||||||
|
{
|
||||||
|
/* A future implementation may want to handle internationalization.
|
||||||
|
* For now, just return a string literal from a table.
|
||||||
|
*/
|
||||||
|
const char *errtext[] = {
|
||||||
|
"Successful completion",
|
||||||
|
"DNS server returned answer with no data",
|
||||||
|
"DNS server claims query was misformatted",
|
||||||
|
"DNS server returned general failure",
|
||||||
|
"Domain name not found",
|
||||||
|
"DNS server does not implement requested operation",
|
||||||
|
"DNS server refused query",
|
||||||
|
"Misformatted DNS query",
|
||||||
|
"Misformatted domain name",
|
||||||
|
"Unsupported address family",
|
||||||
|
"Misformatted DNS reply",
|
||||||
|
"Could not contact DNS servers",
|
||||||
|
"Timeout while contacting DNS servers",
|
||||||
|
"End of file",
|
||||||
|
"Error reading file",
|
||||||
|
"Out of memory"
|
||||||
|
};
|
||||||
|
|
||||||
|
assert(code >= 0 && code < (sizeof(errtext) / sizeof(*errtext)));
|
||||||
|
return errtext[code];
|
||||||
|
}
|
||||||
64
ares/ares_timeout.3
Normal file
64
ares/ares_timeout.3
Normal file
@@ -0,0 +1,64 @@
|
|||||||
|
.\" $Id$
|
||||||
|
.\"
|
||||||
|
.\" Copyright 1998 by the Massachusetts Institute of Technology.
|
||||||
|
.\"
|
||||||
|
.\" Permission to use, copy, modify, and distribute this
|
||||||
|
.\" software and its documentation for any purpose and without
|
||||||
|
.\" fee is hereby granted, provided that the above copyright
|
||||||
|
.\" notice appear in all copies and that both that copyright
|
||||||
|
.\" notice and this permission notice appear in supporting
|
||||||
|
.\" documentation, and that the name of M.I.T. not be used in
|
||||||
|
.\" advertising or publicity pertaining to distribution of the
|
||||||
|
.\" software without specific, written prior permission.
|
||||||
|
.\" M.I.T. makes no representations about the suitability of
|
||||||
|
.\" this software for any purpose. It is provided "as is"
|
||||||
|
.\" without express or implied warranty.
|
||||||
|
.\"
|
||||||
|
.TH ARES_TIMEOUT 3 "25 July 1998"
|
||||||
|
.SH NAME
|
||||||
|
ares_fds \- Get file descriptors to select on for name service
|
||||||
|
.SH SYNOPSIS
|
||||||
|
.nf
|
||||||
|
.B #include <ares.h>
|
||||||
|
.PP
|
||||||
|
.B struct timeval *ares_timeout(ares_channel \fIchannel\fP,
|
||||||
|
.B struct timeval *\fImaxtv\fP, struct timeval *\fItvbuf\fP)
|
||||||
|
.fi
|
||||||
|
.SH DESCRIPTION
|
||||||
|
The
|
||||||
|
.B ares_timeout
|
||||||
|
function determines the maximum time for which the caller should wait
|
||||||
|
before invoking
|
||||||
|
.BR ares_process (3)
|
||||||
|
to process timeouts. The parameter
|
||||||
|
.I maxtv
|
||||||
|
specifies a existing maximum timeout, or
|
||||||
|
.B NULL
|
||||||
|
if the caller does not wish to apply a maximum timeout. The parameter
|
||||||
|
.I tvbuf
|
||||||
|
must point to a writable buffer of type
|
||||||
|
.BR "struct timeval" .
|
||||||
|
It is valid for
|
||||||
|
.I maxtv
|
||||||
|
and
|
||||||
|
.I tvbuf
|
||||||
|
to have the same value.
|
||||||
|
.PP
|
||||||
|
If no queries have timeouts pending sooner than the given maximum
|
||||||
|
timeout,
|
||||||
|
.B ares_timeout
|
||||||
|
returns the value of
|
||||||
|
.IR maxtv;
|
||||||
|
otherwise
|
||||||
|
.B ares_timeout
|
||||||
|
stores the appropriate timeout value into the buffer pointed to by
|
||||||
|
.I tvbuf
|
||||||
|
and returns the value of
|
||||||
|
.IR tvbuf .
|
||||||
|
.SH SEE ALSO
|
||||||
|
.BR ares_fds (3),
|
||||||
|
.BR ares_process (3)
|
||||||
|
.SH AUTHOR
|
||||||
|
Greg Hudson, MIT Information Systems
|
||||||
|
.br
|
||||||
|
Copyright 1998 by the Massachusetts Institute of Technology.
|
||||||
67
ares/ares_timeout.c
Normal file
67
ares/ares_timeout.c
Normal file
@@ -0,0 +1,67 @@
|
|||||||
|
/* Copyright 1998 by the Massachusetts Institute of Technology.
|
||||||
|
*
|
||||||
|
* Permission to use, copy, modify, and distribute this
|
||||||
|
* software and its documentation for any purpose and without
|
||||||
|
* fee is hereby granted, provided that the above copyright
|
||||||
|
* notice appear in all copies and that both that copyright
|
||||||
|
* notice and this permission notice appear in supporting
|
||||||
|
* documentation, and that the name of M.I.T. not be used in
|
||||||
|
* advertising or publicity pertaining to distribution of the
|
||||||
|
* software without specific, written prior permission.
|
||||||
|
* M.I.T. makes no representations about the suitability of
|
||||||
|
* this software for any purpose. It is provided "as is"
|
||||||
|
* without express or implied warranty.
|
||||||
|
*/
|
||||||
|
|
||||||
|
static const char rcsid[] = "$Id$";
|
||||||
|
|
||||||
|
#include <sys/types.h>
|
||||||
|
|
||||||
|
#ifdef WIN32
|
||||||
|
|
||||||
|
#else
|
||||||
|
#include <sys/time.h>
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#include <time.h>
|
||||||
|
#include "ares.h"
|
||||||
|
#include "ares_private.h"
|
||||||
|
|
||||||
|
struct timeval *ares_timeout(ares_channel channel, struct timeval *maxtv,
|
||||||
|
struct timeval *tvbuf)
|
||||||
|
{
|
||||||
|
struct query *query;
|
||||||
|
time_t now;
|
||||||
|
int offset, min_offset;
|
||||||
|
|
||||||
|
/* No queries, no timeout (and no fetch of the current time). */
|
||||||
|
if (!channel->queries)
|
||||||
|
return maxtv;
|
||||||
|
|
||||||
|
/* Find the minimum timeout for the current set of queries. */
|
||||||
|
time(&now);
|
||||||
|
min_offset = -1;
|
||||||
|
for (query = channel->queries; query; query = query->next)
|
||||||
|
{
|
||||||
|
if (query->timeout == 0)
|
||||||
|
continue;
|
||||||
|
offset = query->timeout - now;
|
||||||
|
if (offset < 0)
|
||||||
|
offset = 0;
|
||||||
|
if (min_offset == -1 || offset < min_offset)
|
||||||
|
min_offset = offset;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* If we found a minimum timeout and it's sooner than the one
|
||||||
|
* specified in maxtv (if any), return it. Otherwise go with
|
||||||
|
* maxtv.
|
||||||
|
*/
|
||||||
|
if (min_offset != -1 && (!maxtv || min_offset <= maxtv->tv_sec))
|
||||||
|
{
|
||||||
|
tvbuf->tv_sec = min_offset;
|
||||||
|
tvbuf->tv_usec = 0;
|
||||||
|
return tvbuf;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
return maxtv;
|
||||||
|
}
|
||||||
11
ares/ares_version.c
Normal file
11
ares/ares_version.c
Normal file
@@ -0,0 +1,11 @@
|
|||||||
|
/* $Id$ */
|
||||||
|
|
||||||
|
#include "ares_version.h"
|
||||||
|
|
||||||
|
char *ares_version(int *version)
|
||||||
|
{
|
||||||
|
if(version)
|
||||||
|
*version = ARES_VERSION;
|
||||||
|
|
||||||
|
return ARES_VERSION_STR;
|
||||||
|
}
|
||||||
17
ares/ares_version.h
Normal file
17
ares/ares_version.h
Normal file
@@ -0,0 +1,17 @@
|
|||||||
|
/* $Id$ */
|
||||||
|
|
||||||
|
#ifndef ARES__VERSION_H
|
||||||
|
#define ARES__VERSION_H
|
||||||
|
|
||||||
|
#define ARES_VERSION_MAJOR 1
|
||||||
|
#define ARES_VERSION_MINOR 0
|
||||||
|
#define ARES_VERSION_PATCH 0
|
||||||
|
#define ARES_VERSION ((ARES_VERSION_MAJOR<<16)|\
|
||||||
|
(ARES_VERSION_MINOR<<8)|\
|
||||||
|
(ARES_VERSION_PATCH))
|
||||||
|
#define ARES_VERSION_STR "1.0.0"
|
||||||
|
|
||||||
|
char *ares_version(int *version);
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
||||||
503
config.guess → ares/config.guess
vendored
503
config.guess → ares/config.guess
vendored
@@ -1,9 +1,9 @@
|
|||||||
#! /bin/sh
|
#! /bin/sh
|
||||||
# Attempt to guess a canonical system name.
|
# Attempt to guess a canonical system name.
|
||||||
# Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001
|
# Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999,
|
||||||
# Free Software Foundation, Inc.
|
# 2000, 2001, 2002, 2003 Free Software Foundation, Inc.
|
||||||
|
|
||||||
timestamp='2001-09-04'
|
timestamp='2003-02-22'
|
||||||
|
|
||||||
# This file is free software; you can redistribute it and/or modify it
|
# 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
|
# under the terms of the GNU General Public License as published by
|
||||||
@@ -24,8 +24,9 @@ timestamp='2001-09-04'
|
|||||||
# configuration script generated by Autoconf, you may include it under
|
# configuration script generated by Autoconf, you may include it under
|
||||||
# the same distribution terms that you use for the rest of that program.
|
# the same distribution terms that you use for the rest of that program.
|
||||||
|
|
||||||
# Written by Per Bothner <bothner@cygnus.com>.
|
# Originally written by Per Bothner <per@bothner.com>.
|
||||||
# Please send patches to <config-patches@gnu.org>.
|
# Please send patches to <config-patches@gnu.org>. Submit a context
|
||||||
|
# diff and a properly formatted ChangeLog entry.
|
||||||
#
|
#
|
||||||
# This script attempts to guess a canonical system name similar to
|
# This script attempts to guess a canonical system name similar to
|
||||||
# config.sub. If it succeeds, it prints the system name on stdout, and
|
# config.sub. If it succeeds, it prints the system name on stdout, and
|
||||||
@@ -87,30 +88,41 @@ if test $# != 0; then
|
|||||||
exit 1
|
exit 1
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
trap 'exit 1' 1 2 15
|
||||||
|
|
||||||
dummy=dummy-$$
|
# CC_FOR_BUILD -- compiler used by this script. Note that the use of a
|
||||||
trap 'rm -f $dummy.c $dummy.o $dummy.rel $dummy; exit 1' 1 2 15
|
# compiler to aid in system detection is discouraged as it requires
|
||||||
|
# temporary files to be created and, as you can see below, it is a
|
||||||
|
# headache to deal with in a portable fashion.
|
||||||
|
|
||||||
# CC_FOR_BUILD -- compiler used by this script.
|
|
||||||
# Historically, `CC_FOR_BUILD' used to be named `HOST_CC'. We still
|
# Historically, `CC_FOR_BUILD' used to be named `HOST_CC'. We still
|
||||||
# use `HOST_CC' if defined, but it is deprecated.
|
# use `HOST_CC' if defined, but it is deprecated.
|
||||||
|
|
||||||
set_cc_for_build='case $CC_FOR_BUILD,$HOST_CC,$CC in
|
# Portable tmp directory creation inspired by the Autoconf team.
|
||||||
,,) echo "int dummy(){}" > $dummy.c ;
|
|
||||||
for c in cc gcc c89 ; do
|
set_cc_for_build='
|
||||||
($c $dummy.c -c -o $dummy.o) >/dev/null 2>&1 ;
|
trap "exitcode=\$?; (rm -f \$tmpfiles 2>/dev/null; rmdir \$tmp 2>/dev/null) && exit \$exitcode" 0 ;
|
||||||
if test $? = 0 ; then
|
trap "rm -f \$tmpfiles 2>/dev/null; rmdir \$tmp 2>/dev/null; exit 1" 1 2 13 15 ;
|
||||||
|
: ${TMPDIR=/tmp} ;
|
||||||
|
{ tmp=`(umask 077 && mktemp -d -q "$TMPDIR/cgXXXXXX") 2>/dev/null` && test -n "$tmp" && test -d "$tmp" ; } ||
|
||||||
|
{ test -n "$RANDOM" && tmp=$TMPDIR/cg$$-$RANDOM && (umask 077 && mkdir $tmp) ; } ||
|
||||||
|
{ echo "$me: cannot create a temporary directory in $TMPDIR" >&2 ; exit 1 ; } ;
|
||||||
|
dummy=$tmp/dummy ;
|
||||||
|
tmpfiles="$dummy.c $dummy.o $dummy.rel $dummy" ;
|
||||||
|
case $CC_FOR_BUILD,$HOST_CC,$CC in
|
||||||
|
,,) echo "int x;" > $dummy.c ;
|
||||||
|
for c in cc gcc c89 c99 ; do
|
||||||
|
if ($c -c -o $dummy.o $dummy.c) >/dev/null 2>&1 ; then
|
||||||
CC_FOR_BUILD="$c"; break ;
|
CC_FOR_BUILD="$c"; break ;
|
||||||
fi ;
|
fi ;
|
||||||
done ;
|
done ;
|
||||||
rm -f $dummy.c $dummy.o $dummy.rel ;
|
|
||||||
if test x"$CC_FOR_BUILD" = x ; then
|
if test x"$CC_FOR_BUILD" = x ; then
|
||||||
CC_FOR_BUILD=no_compiler_found ;
|
CC_FOR_BUILD=no_compiler_found ;
|
||||||
fi
|
fi
|
||||||
;;
|
;;
|
||||||
,,*) CC_FOR_BUILD=$CC ;;
|
,,*) CC_FOR_BUILD=$CC ;;
|
||||||
,*,*) CC_FOR_BUILD=$HOST_CC ;;
|
,*,*) CC_FOR_BUILD=$HOST_CC ;;
|
||||||
esac'
|
esac ;'
|
||||||
|
|
||||||
# This is needed to find uname on a Pyramid OSx when run in the BSD universe.
|
# This is needed to find uname on a Pyramid OSx when run in the BSD universe.
|
||||||
# (ghazi@noc.rutgers.edu 1994-08-24)
|
# (ghazi@noc.rutgers.edu 1994-08-24)
|
||||||
@@ -127,29 +139,30 @@ UNAME_VERSION=`(uname -v) 2>/dev/null` || UNAME_VERSION=unknown
|
|||||||
|
|
||||||
case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in
|
case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in
|
||||||
*:NetBSD:*:*)
|
*:NetBSD:*:*)
|
||||||
# Netbsd (nbsd) targets should (where applicable) match one or
|
# NetBSD (nbsd) targets should (where applicable) match one or
|
||||||
# more of the tupples: *-*-netbsdelf*, *-*-netbsdaout*,
|
# more of the tupples: *-*-netbsdelf*, *-*-netbsdaout*,
|
||||||
# *-*-netbsdecoff* and *-*-netbsd*. For targets that recently
|
# *-*-netbsdecoff* and *-*-netbsd*. For targets that recently
|
||||||
# switched to ELF, *-*-netbsd* would select the old
|
# switched to ELF, *-*-netbsd* would select the old
|
||||||
# object file format. This provides both forward
|
# object file format. This provides both forward
|
||||||
# compatibility and a consistent mechanism for selecting the
|
# compatibility and a consistent mechanism for selecting the
|
||||||
# object file format.
|
# object file format.
|
||||||
# Determine the machine/vendor (is the vendor relevant).
|
#
|
||||||
case "${UNAME_MACHINE}" in
|
# Note: NetBSD doesn't particularly care about the vendor
|
||||||
amiga) machine=m68k-unknown ;;
|
# portion of the name. We always set it to "unknown".
|
||||||
arm32) machine=arm-unknown ;;
|
sysctl="sysctl -n hw.machine_arch"
|
||||||
atari*) machine=m68k-atari ;;
|
UNAME_MACHINE_ARCH=`(/sbin/$sysctl 2>/dev/null || \
|
||||||
sun3*) machine=m68k-sun ;;
|
/usr/sbin/$sysctl 2>/dev/null || echo unknown)`
|
||||||
mac68k) machine=m68k-apple ;;
|
case "${UNAME_MACHINE_ARCH}" in
|
||||||
macppc) machine=powerpc-apple ;;
|
armeb) machine=armeb-unknown ;;
|
||||||
hp3[0-9][05]) machine=m68k-hp ;;
|
arm*) machine=arm-unknown ;;
|
||||||
ibmrt|romp-ibm) machine=romp-ibm ;;
|
sh3el) machine=shl-unknown ;;
|
||||||
*) machine=${UNAME_MACHINE}-unknown ;;
|
sh3eb) machine=sh-unknown ;;
|
||||||
|
*) machine=${UNAME_MACHINE_ARCH}-unknown ;;
|
||||||
esac
|
esac
|
||||||
# The Operating System including object format, if it has switched
|
# The Operating System including object format, if it has switched
|
||||||
# to ELF recently, or will in the future.
|
# to ELF recently, or will in the future.
|
||||||
case "${UNAME_MACHINE}" in
|
case "${UNAME_MACHINE_ARCH}" in
|
||||||
i386|sparc|amiga|arm*|hp300|mvme68k|vax|atari|luna68k|mac68k|news68k|next68k|pc532|sun3*|x68k)
|
arm*|i386|m68k|ns32k|sh3*|sparc|vax)
|
||||||
eval $set_cc_for_build
|
eval $set_cc_for_build
|
||||||
if echo __ELF__ | $CC_FOR_BUILD -E - 2>/dev/null \
|
if echo __ELF__ | $CC_FOR_BUILD -E - 2>/dev/null \
|
||||||
| grep __ELF__ >/dev/null
|
| grep __ELF__ >/dev/null
|
||||||
@@ -166,73 +179,107 @@ case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in
|
|||||||
;;
|
;;
|
||||||
esac
|
esac
|
||||||
# The OS release
|
# The OS release
|
||||||
|
# Debian GNU/NetBSD machines have a different userland, and
|
||||||
|
# thus, need a distinct triplet. However, they do not need
|
||||||
|
# kernel version information, so it can be replaced with a
|
||||||
|
# suitable tag, in the style of linux-gnu.
|
||||||
|
case "${UNAME_VERSION}" in
|
||||||
|
Debian*)
|
||||||
|
release='-gnu'
|
||||||
|
;;
|
||||||
|
*)
|
||||||
release=`echo ${UNAME_RELEASE}|sed -e 's/[-_].*/\./'`
|
release=`echo ${UNAME_RELEASE}|sed -e 's/[-_].*/\./'`
|
||||||
|
;;
|
||||||
|
esac
|
||||||
# Since CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM:
|
# Since CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM:
|
||||||
# contains redundant information, the shorter form:
|
# contains redundant information, the shorter form:
|
||||||
# CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM is used.
|
# CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM is used.
|
||||||
echo "${machine}-${os}${release}"
|
echo "${machine}-${os}${release}"
|
||||||
exit 0 ;;
|
exit 0 ;;
|
||||||
|
amiga:OpenBSD:*:*)
|
||||||
|
echo m68k-unknown-openbsd${UNAME_RELEASE}
|
||||||
|
exit 0 ;;
|
||||||
|
arc:OpenBSD:*:*)
|
||||||
|
echo mipsel-unknown-openbsd${UNAME_RELEASE}
|
||||||
|
exit 0 ;;
|
||||||
|
hp300:OpenBSD:*:*)
|
||||||
|
echo m68k-unknown-openbsd${UNAME_RELEASE}
|
||||||
|
exit 0 ;;
|
||||||
|
mac68k:OpenBSD:*:*)
|
||||||
|
echo m68k-unknown-openbsd${UNAME_RELEASE}
|
||||||
|
exit 0 ;;
|
||||||
|
macppc:OpenBSD:*:*)
|
||||||
|
echo powerpc-unknown-openbsd${UNAME_RELEASE}
|
||||||
|
exit 0 ;;
|
||||||
|
mvme68k:OpenBSD:*:*)
|
||||||
|
echo m68k-unknown-openbsd${UNAME_RELEASE}
|
||||||
|
exit 0 ;;
|
||||||
|
mvme88k:OpenBSD:*:*)
|
||||||
|
echo m88k-unknown-openbsd${UNAME_RELEASE}
|
||||||
|
exit 0 ;;
|
||||||
|
mvmeppc:OpenBSD:*:*)
|
||||||
|
echo powerpc-unknown-openbsd${UNAME_RELEASE}
|
||||||
|
exit 0 ;;
|
||||||
|
pmax:OpenBSD:*:*)
|
||||||
|
echo mipsel-unknown-openbsd${UNAME_RELEASE}
|
||||||
|
exit 0 ;;
|
||||||
|
sgi:OpenBSD:*:*)
|
||||||
|
echo mipseb-unknown-openbsd${UNAME_RELEASE}
|
||||||
|
exit 0 ;;
|
||||||
|
sun3:OpenBSD:*:*)
|
||||||
|
echo m68k-unknown-openbsd${UNAME_RELEASE}
|
||||||
|
exit 0 ;;
|
||||||
|
wgrisc:OpenBSD:*:*)
|
||||||
|
echo mipsel-unknown-openbsd${UNAME_RELEASE}
|
||||||
|
exit 0 ;;
|
||||||
|
*:OpenBSD:*:*)
|
||||||
|
echo ${UNAME_MACHINE}-unknown-openbsd${UNAME_RELEASE}
|
||||||
|
exit 0 ;;
|
||||||
alpha:OSF1:*:*)
|
alpha:OSF1:*:*)
|
||||||
if test $UNAME_RELEASE = "V4.0"; then
|
if test $UNAME_RELEASE = "V4.0"; then
|
||||||
UNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $3}'`
|
UNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $3}'`
|
||||||
fi
|
fi
|
||||||
|
# According to Compaq, /usr/sbin/psrinfo has been available on
|
||||||
|
# OSF/1 and Tru64 systems produced since 1995. I hope that
|
||||||
|
# covers most systems running today. This code pipes the CPU
|
||||||
|
# types through head -n 1, so we only detect the type of CPU 0.
|
||||||
|
ALPHA_CPU_TYPE=`/usr/sbin/psrinfo -v | sed -n -e 's/^ The alpha \(.*\) processor.*$/\1/p' | head -n 1`
|
||||||
|
case "$ALPHA_CPU_TYPE" in
|
||||||
|
"EV4 (21064)")
|
||||||
|
UNAME_MACHINE="alpha" ;;
|
||||||
|
"EV4.5 (21064)")
|
||||||
|
UNAME_MACHINE="alpha" ;;
|
||||||
|
"LCA4 (21066/21068)")
|
||||||
|
UNAME_MACHINE="alpha" ;;
|
||||||
|
"EV5 (21164)")
|
||||||
|
UNAME_MACHINE="alphaev5" ;;
|
||||||
|
"EV5.6 (21164A)")
|
||||||
|
UNAME_MACHINE="alphaev56" ;;
|
||||||
|
"EV5.6 (21164PC)")
|
||||||
|
UNAME_MACHINE="alphapca56" ;;
|
||||||
|
"EV5.7 (21164PC)")
|
||||||
|
UNAME_MACHINE="alphapca57" ;;
|
||||||
|
"EV6 (21264)")
|
||||||
|
UNAME_MACHINE="alphaev6" ;;
|
||||||
|
"EV6.7 (21264A)")
|
||||||
|
UNAME_MACHINE="alphaev67" ;;
|
||||||
|
"EV6.8CB (21264C)")
|
||||||
|
UNAME_MACHINE="alphaev68" ;;
|
||||||
|
"EV6.8AL (21264B)")
|
||||||
|
UNAME_MACHINE="alphaev68" ;;
|
||||||
|
"EV6.8CX (21264D)")
|
||||||
|
UNAME_MACHINE="alphaev68" ;;
|
||||||
|
"EV6.9A (21264/EV69A)")
|
||||||
|
UNAME_MACHINE="alphaev69" ;;
|
||||||
|
"EV7 (21364)")
|
||||||
|
UNAME_MACHINE="alphaev7" ;;
|
||||||
|
"EV7.9 (21364A)")
|
||||||
|
UNAME_MACHINE="alphaev79" ;;
|
||||||
|
esac
|
||||||
# A Vn.n version is a released version.
|
# A Vn.n version is a released version.
|
||||||
# A Tn.n version is a released field test version.
|
# A Tn.n version is a released field test version.
|
||||||
# A Xn.n version is an unreleased experimental baselevel.
|
# A Xn.n version is an unreleased experimental baselevel.
|
||||||
# 1.2 uses "1.2" for uname -r.
|
# 1.2 uses "1.2" for uname -r.
|
||||||
cat <<EOF >$dummy.s
|
|
||||||
.data
|
|
||||||
\$Lformat:
|
|
||||||
.byte 37,100,45,37,120,10,0 # "%d-%x\n"
|
|
||||||
|
|
||||||
.text
|
|
||||||
.globl main
|
|
||||||
.align 4
|
|
||||||
.ent main
|
|
||||||
main:
|
|
||||||
.frame \$30,16,\$26,0
|
|
||||||
ldgp \$29,0(\$27)
|
|
||||||
.prologue 1
|
|
||||||
.long 0x47e03d80 # implver \$0
|
|
||||||
lda \$2,-1
|
|
||||||
.long 0x47e20c21 # amask \$2,\$1
|
|
||||||
lda \$16,\$Lformat
|
|
||||||
mov \$0,\$17
|
|
||||||
not \$1,\$18
|
|
||||||
jsr \$26,printf
|
|
||||||
ldgp \$29,0(\$26)
|
|
||||||
mov 0,\$16
|
|
||||||
jsr \$26,exit
|
|
||||||
.end main
|
|
||||||
EOF
|
|
||||||
eval $set_cc_for_build
|
|
||||||
$CC_FOR_BUILD $dummy.s -o $dummy 2>/dev/null
|
|
||||||
if test "$?" = 0 ; then
|
|
||||||
case `./$dummy` in
|
|
||||||
0-0)
|
|
||||||
UNAME_MACHINE="alpha"
|
|
||||||
;;
|
|
||||||
1-0)
|
|
||||||
UNAME_MACHINE="alphaev5"
|
|
||||||
;;
|
|
||||||
1-1)
|
|
||||||
UNAME_MACHINE="alphaev56"
|
|
||||||
;;
|
|
||||||
1-101)
|
|
||||||
UNAME_MACHINE="alphapca56"
|
|
||||||
;;
|
|
||||||
2-303)
|
|
||||||
UNAME_MACHINE="alphaev6"
|
|
||||||
;;
|
|
||||||
2-307)
|
|
||||||
UNAME_MACHINE="alphaev67"
|
|
||||||
;;
|
|
||||||
2-1307)
|
|
||||||
UNAME_MACHINE="alphaev68"
|
|
||||||
;;
|
|
||||||
esac
|
|
||||||
fi
|
|
||||||
rm -f $dummy.s $dummy
|
|
||||||
echo ${UNAME_MACHINE}-dec-osf`echo ${UNAME_RELEASE} | sed -e 's/^[VTX]//' | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'`
|
echo ${UNAME_MACHINE}-dec-osf`echo ${UNAME_RELEASE} | sed -e 's/^[VTX]//' | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'`
|
||||||
exit 0 ;;
|
exit 0 ;;
|
||||||
Alpha\ *:Windows_NT*:*)
|
Alpha\ *:Windows_NT*:*)
|
||||||
@@ -247,29 +294,11 @@ EOF
|
|||||||
Amiga*:UNIX_System_V:4.0:*)
|
Amiga*:UNIX_System_V:4.0:*)
|
||||||
echo m68k-unknown-sysv4
|
echo m68k-unknown-sysv4
|
||||||
exit 0;;
|
exit 0;;
|
||||||
amiga:OpenBSD:*:*)
|
|
||||||
echo m68k-unknown-openbsd${UNAME_RELEASE}
|
|
||||||
exit 0 ;;
|
|
||||||
*:[Aa]miga[Oo][Ss]:*:*)
|
*:[Aa]miga[Oo][Ss]:*:*)
|
||||||
echo ${UNAME_MACHINE}-unknown-amigaos
|
echo ${UNAME_MACHINE}-unknown-amigaos
|
||||||
exit 0 ;;
|
exit 0 ;;
|
||||||
arc64:OpenBSD:*:*)
|
*:[Mm]orph[Oo][Ss]:*:*)
|
||||||
echo mips64el-unknown-openbsd${UNAME_RELEASE}
|
echo ${UNAME_MACHINE}-unknown-morphos
|
||||||
exit 0 ;;
|
|
||||||
arc:OpenBSD:*:*)
|
|
||||||
echo mipsel-unknown-openbsd${UNAME_RELEASE}
|
|
||||||
exit 0 ;;
|
|
||||||
hkmips:OpenBSD:*:*)
|
|
||||||
echo mips-unknown-openbsd${UNAME_RELEASE}
|
|
||||||
exit 0 ;;
|
|
||||||
pmax:OpenBSD:*:*)
|
|
||||||
echo mipsel-unknown-openbsd${UNAME_RELEASE}
|
|
||||||
exit 0 ;;
|
|
||||||
sgi:OpenBSD:*:*)
|
|
||||||
echo mips-unknown-openbsd${UNAME_RELEASE}
|
|
||||||
exit 0 ;;
|
|
||||||
wgrisc:OpenBSD:*:*)
|
|
||||||
echo mipsel-unknown-openbsd${UNAME_RELEASE}
|
|
||||||
exit 0 ;;
|
exit 0 ;;
|
||||||
*:OS/390:*:*)
|
*:OS/390:*:*)
|
||||||
echo i370-ibm-openedition
|
echo i370-ibm-openedition
|
||||||
@@ -291,6 +320,10 @@ EOF
|
|||||||
NILE*:*:*:dcosx)
|
NILE*:*:*:dcosx)
|
||||||
echo pyramid-pyramid-svr4
|
echo pyramid-pyramid-svr4
|
||||||
exit 0 ;;
|
exit 0 ;;
|
||||||
|
DRS?6000:UNIX_SV:4.2*:7*)
|
||||||
|
case `/usr/bin/uname -p` in
|
||||||
|
sparc) echo sparc-icl-nx7 && exit 0 ;;
|
||||||
|
esac ;;
|
||||||
sun4H:SunOS:5.*:*)
|
sun4H:SunOS:5.*:*)
|
||||||
echo sparc-hal-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'`
|
echo sparc-hal-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'`
|
||||||
exit 0 ;;
|
exit 0 ;;
|
||||||
@@ -319,7 +352,7 @@ EOF
|
|||||||
echo m68k-sun-sunos${UNAME_RELEASE}
|
echo m68k-sun-sunos${UNAME_RELEASE}
|
||||||
exit 0 ;;
|
exit 0 ;;
|
||||||
sun*:*:4.2BSD:*)
|
sun*:*:4.2BSD:*)
|
||||||
UNAME_RELEASE=`(head -1 /etc/motd | awk '{print substr($5,1,3)}') 2>/dev/null`
|
UNAME_RELEASE=`(sed 1q /etc/motd | awk '{print substr($5,1,3)}') 2>/dev/null`
|
||||||
test "x${UNAME_RELEASE}" = "x" && UNAME_RELEASE=3
|
test "x${UNAME_RELEASE}" = "x" && UNAME_RELEASE=3
|
||||||
case "`/bin/arch`" in
|
case "`/bin/arch`" in
|
||||||
sun3)
|
sun3)
|
||||||
@@ -333,12 +366,6 @@ EOF
|
|||||||
aushp:SunOS:*:*)
|
aushp:SunOS:*:*)
|
||||||
echo sparc-auspex-sunos${UNAME_RELEASE}
|
echo sparc-auspex-sunos${UNAME_RELEASE}
|
||||||
exit 0 ;;
|
exit 0 ;;
|
||||||
sparc*:NetBSD:*)
|
|
||||||
echo `uname -p`-unknown-netbsd${UNAME_RELEASE}
|
|
||||||
exit 0 ;;
|
|
||||||
atari*:OpenBSD:*:*)
|
|
||||||
echo m68k-unknown-openbsd${UNAME_RELEASE}
|
|
||||||
exit 0 ;;
|
|
||||||
# The situation for MiNT is a little confusing. The machine name
|
# The situation for MiNT is a little confusing. The machine name
|
||||||
# can be virtually everything (everything which is not
|
# can be virtually everything (everything which is not
|
||||||
# "atarist" or "atariste" at least should have a processor
|
# "atarist" or "atariste" at least should have a processor
|
||||||
@@ -365,18 +392,6 @@ EOF
|
|||||||
*:*MiNT:*:* | *:*mint:*:* | *:*TOS:*:*)
|
*:*MiNT:*:* | *:*mint:*:* | *:*TOS:*:*)
|
||||||
echo m68k-unknown-mint${UNAME_RELEASE}
|
echo m68k-unknown-mint${UNAME_RELEASE}
|
||||||
exit 0 ;;
|
exit 0 ;;
|
||||||
sun3*:OpenBSD:*:*)
|
|
||||||
echo m68k-unknown-openbsd${UNAME_RELEASE}
|
|
||||||
exit 0 ;;
|
|
||||||
mac68k:OpenBSD:*:*)
|
|
||||||
echo m68k-unknown-openbsd${UNAME_RELEASE}
|
|
||||||
exit 0 ;;
|
|
||||||
mvme68k:OpenBSD:*:*)
|
|
||||||
echo m68k-unknown-openbsd${UNAME_RELEASE}
|
|
||||||
exit 0 ;;
|
|
||||||
mvme88k:OpenBSD:*:*)
|
|
||||||
echo m88k-unknown-openbsd${UNAME_RELEASE}
|
|
||||||
exit 0 ;;
|
|
||||||
powerpc:machten:*:*)
|
powerpc:machten:*:*)
|
||||||
echo powerpc-apple-machten${UNAME_RELEASE}
|
echo powerpc-apple-machten${UNAME_RELEASE}
|
||||||
exit 0 ;;
|
exit 0 ;;
|
||||||
@@ -415,15 +430,20 @@ EOF
|
|||||||
exit (-1);
|
exit (-1);
|
||||||
}
|
}
|
||||||
EOF
|
EOF
|
||||||
$CC_FOR_BUILD $dummy.c -o $dummy \
|
$CC_FOR_BUILD -o $dummy $dummy.c \
|
||||||
&& ./$dummy `echo "${UNAME_RELEASE}" | sed -n 's/\([0-9]*\).*/\1/p'` \
|
&& $dummy `echo "${UNAME_RELEASE}" | sed -n 's/\([0-9]*\).*/\1/p'` \
|
||||||
&& rm -f $dummy.c $dummy && exit 0
|
&& exit 0
|
||||||
rm -f $dummy.c $dummy
|
|
||||||
echo mips-mips-riscos${UNAME_RELEASE}
|
echo mips-mips-riscos${UNAME_RELEASE}
|
||||||
exit 0 ;;
|
exit 0 ;;
|
||||||
Motorola:PowerMAX_OS:*:*)
|
Motorola:PowerMAX_OS:*:*)
|
||||||
echo powerpc-motorola-powermax
|
echo powerpc-motorola-powermax
|
||||||
exit 0 ;;
|
exit 0 ;;
|
||||||
|
Motorola:*:4.3:PL8-*)
|
||||||
|
echo powerpc-harris-powermax
|
||||||
|
exit 0 ;;
|
||||||
|
Night_Hawk:*:*:PowerMAX_OS | Synergy:PowerMAX_OS:*:*)
|
||||||
|
echo powerpc-harris-powermax
|
||||||
|
exit 0 ;;
|
||||||
Night_Hawk:Power_UNIX:*:*)
|
Night_Hawk:Power_UNIX:*:*)
|
||||||
echo powerpc-harris-powerunix
|
echo powerpc-harris-powerunix
|
||||||
exit 0 ;;
|
exit 0 ;;
|
||||||
@@ -496,8 +516,7 @@ EOF
|
|||||||
exit(0);
|
exit(0);
|
||||||
}
|
}
|
||||||
EOF
|
EOF
|
||||||
$CC_FOR_BUILD $dummy.c -o $dummy && ./$dummy && rm -f $dummy.c $dummy && exit 0
|
$CC_FOR_BUILD -o $dummy $dummy.c && $dummy && exit 0
|
||||||
rm -f $dummy.c $dummy
|
|
||||||
echo rs6000-ibm-aix3.2.5
|
echo rs6000-ibm-aix3.2.5
|
||||||
elif grep bos324 /usr/include/stdio.h >/dev/null 2>&1; then
|
elif grep bos324 /usr/include/stdio.h >/dev/null 2>&1; then
|
||||||
echo rs6000-ibm-aix3.2.4
|
echo rs6000-ibm-aix3.2.4
|
||||||
@@ -506,7 +525,7 @@ EOF
|
|||||||
fi
|
fi
|
||||||
exit 0 ;;
|
exit 0 ;;
|
||||||
*:AIX:*:[45])
|
*:AIX:*:[45])
|
||||||
IBM_CPU_ID=`/usr/sbin/lsdev -C -c processor -S available | head -1 | awk '{ print $1 }'`
|
IBM_CPU_ID=`/usr/sbin/lsdev -C -c processor -S available | sed 1q | awk '{ print $1 }'`
|
||||||
if /usr/sbin/lsattr -El ${IBM_CPU_ID} | grep ' POWER' >/dev/null 2>&1; then
|
if /usr/sbin/lsattr -El ${IBM_CPU_ID} | grep ' POWER' >/dev/null 2>&1; then
|
||||||
IBM_ARCH=rs6000
|
IBM_ARCH=rs6000
|
||||||
else
|
else
|
||||||
@@ -546,8 +565,6 @@ EOF
|
|||||||
9000/31? ) HP_ARCH=m68000 ;;
|
9000/31? ) HP_ARCH=m68000 ;;
|
||||||
9000/[34]?? ) HP_ARCH=m68k ;;
|
9000/[34]?? ) HP_ARCH=m68k ;;
|
||||||
9000/[678][0-9][0-9])
|
9000/[678][0-9][0-9])
|
||||||
case "${HPUX_REV}" in
|
|
||||||
11.[0-9][0-9])
|
|
||||||
if [ -x /usr/bin/getconf ]; then
|
if [ -x /usr/bin/getconf ]; then
|
||||||
sc_cpu_version=`/usr/bin/getconf SC_CPU_VERSION 2>/dev/null`
|
sc_cpu_version=`/usr/bin/getconf SC_CPU_VERSION 2>/dev/null`
|
||||||
sc_kernel_bits=`/usr/bin/getconf SC_KERNEL_BITS 2>/dev/null`
|
sc_kernel_bits=`/usr/bin/getconf SC_KERNEL_BITS 2>/dev/null`
|
||||||
@@ -558,10 +575,10 @@ EOF
|
|||||||
case "${sc_kernel_bits}" in
|
case "${sc_kernel_bits}" in
|
||||||
32) HP_ARCH="hppa2.0n" ;;
|
32) HP_ARCH="hppa2.0n" ;;
|
||||||
64) HP_ARCH="hppa2.0w" ;;
|
64) HP_ARCH="hppa2.0w" ;;
|
||||||
|
'') HP_ARCH="hppa2.0" ;; # HP-UX 10.20
|
||||||
esac ;;
|
esac ;;
|
||||||
esac
|
esac
|
||||||
fi ;;
|
fi
|
||||||
esac
|
|
||||||
if [ "${HP_ARCH}" = "" ]; then
|
if [ "${HP_ARCH}" = "" ]; then
|
||||||
eval $set_cc_for_build
|
eval $set_cc_for_build
|
||||||
sed 's/^ //' << EOF >$dummy.c
|
sed 's/^ //' << EOF >$dummy.c
|
||||||
@@ -597,11 +614,21 @@ EOF
|
|||||||
exit (0);
|
exit (0);
|
||||||
}
|
}
|
||||||
EOF
|
EOF
|
||||||
(CCOPTS= $CC_FOR_BUILD $dummy.c -o $dummy 2>/dev/null ) && HP_ARCH=`./$dummy`
|
(CCOPTS= $CC_FOR_BUILD -o $dummy $dummy.c 2>/dev/null) && HP_ARCH=`$dummy`
|
||||||
if test -z "$HP_ARCH"; then HP_ARCH=hppa; fi
|
test -z "$HP_ARCH" && HP_ARCH=hppa
|
||||||
rm -f $dummy.c $dummy
|
|
||||||
fi ;;
|
fi ;;
|
||||||
esac
|
esac
|
||||||
|
if [ ${HP_ARCH} = "hppa2.0w" ]
|
||||||
|
then
|
||||||
|
# avoid double evaluation of $set_cc_for_build
|
||||||
|
test -n "$CC_FOR_BUILD" || eval $set_cc_for_build
|
||||||
|
if echo __LP64__ | (CCOPTS= $CC_FOR_BUILD -E -) | grep __LP64__ >/dev/null
|
||||||
|
then
|
||||||
|
HP_ARCH="hppa2.0w"
|
||||||
|
else
|
||||||
|
HP_ARCH="hppa64"
|
||||||
|
fi
|
||||||
|
fi
|
||||||
echo ${HP_ARCH}-hp-hpux${HPUX_REV}
|
echo ${HP_ARCH}-hp-hpux${HPUX_REV}
|
||||||
exit 0 ;;
|
exit 0 ;;
|
||||||
ia64:HP-UX:*:*)
|
ia64:HP-UX:*:*)
|
||||||
@@ -635,8 +662,7 @@ EOF
|
|||||||
exit (0);
|
exit (0);
|
||||||
}
|
}
|
||||||
EOF
|
EOF
|
||||||
$CC_FOR_BUILD $dummy.c -o $dummy && ./$dummy && rm -f $dummy.c $dummy && exit 0
|
$CC_FOR_BUILD -o $dummy $dummy.c && $dummy && exit 0
|
||||||
rm -f $dummy.c $dummy
|
|
||||||
echo unknown-hitachi-hiuxwe2
|
echo unknown-hitachi-hiuxwe2
|
||||||
exit 0 ;;
|
exit 0 ;;
|
||||||
9000/7??:4.3bsd:*:* | 9000/8?[79]:4.3bsd:*:* )
|
9000/7??:4.3bsd:*:* | 9000/8?[79]:4.3bsd:*:* )
|
||||||
@@ -664,9 +690,6 @@ EOF
|
|||||||
parisc*:Lites*:*:*)
|
parisc*:Lites*:*:*)
|
||||||
echo hppa1.1-hp-lites
|
echo hppa1.1-hp-lites
|
||||||
exit 0 ;;
|
exit 0 ;;
|
||||||
hppa*:OpenBSD:*:*)
|
|
||||||
echo hppa-unknown-openbsd
|
|
||||||
exit 0 ;;
|
|
||||||
C1*:ConvexOS:*:* | convex:ConvexOS:C1*:*)
|
C1*:ConvexOS:*:* | convex:ConvexOS:C1*:*)
|
||||||
echo c1-convex-bsd
|
echo c1-convex-bsd
|
||||||
exit 0 ;;
|
exit 0 ;;
|
||||||
@@ -685,9 +708,6 @@ EOF
|
|||||||
C4*:ConvexOS:*:* | convex:ConvexOS:C4*:*)
|
C4*:ConvexOS:*:* | convex:ConvexOS:C4*:*)
|
||||||
echo c4-convex-bsd
|
echo c4-convex-bsd
|
||||||
exit 0 ;;
|
exit 0 ;;
|
||||||
CRAY*X-MP:*:*:*)
|
|
||||||
echo xmp-cray-unicos
|
|
||||||
exit 0 ;;
|
|
||||||
CRAY*Y-MP:*:*:*)
|
CRAY*Y-MP:*:*:*)
|
||||||
echo ymp-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/'
|
echo ymp-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/'
|
||||||
exit 0 ;;
|
exit 0 ;;
|
||||||
@@ -700,17 +720,14 @@ EOF
|
|||||||
CRAY*TS:*:*:*)
|
CRAY*TS:*:*:*)
|
||||||
echo t90-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/'
|
echo t90-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/'
|
||||||
exit 0 ;;
|
exit 0 ;;
|
||||||
CRAY*T3D:*:*:*)
|
|
||||||
echo alpha-cray-unicosmk${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/'
|
|
||||||
exit 0 ;;
|
|
||||||
CRAY*T3E:*:*:*)
|
CRAY*T3E:*:*:*)
|
||||||
echo alphaev5-cray-unicosmk${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/'
|
echo alphaev5-cray-unicosmk${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/'
|
||||||
exit 0 ;;
|
exit 0 ;;
|
||||||
CRAY*SV1:*:*:*)
|
CRAY*SV1:*:*:*)
|
||||||
echo sv1-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/'
|
echo sv1-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/'
|
||||||
exit 0 ;;
|
exit 0 ;;
|
||||||
CRAY-2:*:*:*)
|
*:UNICOS/mp:*:*)
|
||||||
echo cray2-cray-unicos
|
echo nv1-cray-unicosmp${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/'
|
||||||
exit 0 ;;
|
exit 0 ;;
|
||||||
F30[01]:UNIX_System_V:*:* | F700:UNIX_System_V:*:*)
|
F30[01]:UNIX_System_V:*:* | F700:UNIX_System_V:*:*)
|
||||||
FUJITSU_PROC=`uname -m | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'`
|
FUJITSU_PROC=`uname -m | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'`
|
||||||
@@ -718,9 +735,6 @@ EOF
|
|||||||
FUJITSU_REL=`echo ${UNAME_RELEASE} | sed -e 's/ /_/'`
|
FUJITSU_REL=`echo ${UNAME_RELEASE} | sed -e 's/ /_/'`
|
||||||
echo "${FUJITSU_PROC}-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}"
|
echo "${FUJITSU_PROC}-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}"
|
||||||
exit 0 ;;
|
exit 0 ;;
|
||||||
hp300:OpenBSD:*:*)
|
|
||||||
echo m68k-unknown-openbsd${UNAME_RELEASE}
|
|
||||||
exit 0 ;;
|
|
||||||
i*86:BSD/386:*:* | i*86:BSD/OS:*:* | *:Ascend\ Embedded/OS:*:*)
|
i*86:BSD/386:*:* | i*86:BSD/OS:*:* | *:Ascend\ Embedded/OS:*:*)
|
||||||
echo ${UNAME_MACHINE}-pc-bsdi${UNAME_RELEASE}
|
echo ${UNAME_MACHINE}-pc-bsdi${UNAME_RELEASE}
|
||||||
exit 0 ;;
|
exit 0 ;;
|
||||||
@@ -731,10 +745,18 @@ EOF
|
|||||||
echo ${UNAME_MACHINE}-unknown-bsdi${UNAME_RELEASE}
|
echo ${UNAME_MACHINE}-unknown-bsdi${UNAME_RELEASE}
|
||||||
exit 0 ;;
|
exit 0 ;;
|
||||||
*:FreeBSD:*:*)
|
*:FreeBSD:*:*)
|
||||||
echo ${UNAME_MACHINE}-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'`
|
# Determine whether the default compiler uses glibc.
|
||||||
exit 0 ;;
|
eval $set_cc_for_build
|
||||||
*:OpenBSD:*:*)
|
sed 's/^ //' << EOF >$dummy.c
|
||||||
echo ${UNAME_MACHINE}-unknown-openbsd`echo ${UNAME_RELEASE}|sed -e 's/[-_].*/\./'`
|
#include <features.h>
|
||||||
|
#if __GLIBC__ >= 2
|
||||||
|
LIBC=gnu
|
||||||
|
#else
|
||||||
|
LIBC=
|
||||||
|
#endif
|
||||||
|
EOF
|
||||||
|
eval `$CC_FOR_BUILD -E $dummy.c 2>/dev/null | grep ^LIBC=`
|
||||||
|
echo ${UNAME_MACHINE}-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'`${LIBC:+-$LIBC}
|
||||||
exit 0 ;;
|
exit 0 ;;
|
||||||
i*:CYGWIN*:*)
|
i*:CYGWIN*:*)
|
||||||
echo ${UNAME_MACHINE}-pc-cygwin
|
echo ${UNAME_MACHINE}-pc-cygwin
|
||||||
@@ -745,11 +767,17 @@ EOF
|
|||||||
i*:PW*:*)
|
i*:PW*:*)
|
||||||
echo ${UNAME_MACHINE}-pc-pw32
|
echo ${UNAME_MACHINE}-pc-pw32
|
||||||
exit 0 ;;
|
exit 0 ;;
|
||||||
|
x86:Interix*:3*)
|
||||||
|
echo i586-pc-interix3
|
||||||
|
exit 0 ;;
|
||||||
|
[345]86:Windows_95:* | [345]86:Windows_98:* | [345]86:Windows_NT:*)
|
||||||
|
echo i${UNAME_MACHINE}-pc-mks
|
||||||
|
exit 0 ;;
|
||||||
i*:Windows_NT*:* | Pentium*:Windows_NT*:*)
|
i*:Windows_NT*:* | Pentium*:Windows_NT*:*)
|
||||||
# How do we know it's Interix rather than the generic POSIX subsystem?
|
# How do we know it's Interix rather than the generic POSIX subsystem?
|
||||||
# It also conflicts with pre-2.0 versions of AT&T UWIN. Should we
|
# It also conflicts with pre-2.0 versions of AT&T UWIN. Should we
|
||||||
# UNAME_MACHINE based on the output of uname instead of i386?
|
# UNAME_MACHINE based on the output of uname instead of i386?
|
||||||
echo i386-pc-interix
|
echo i586-pc-interix
|
||||||
exit 0 ;;
|
exit 0 ;;
|
||||||
i*:UWIN*:*)
|
i*:UWIN*:*)
|
||||||
echo ${UNAME_MACHINE}-pc-uwin
|
echo ${UNAME_MACHINE}-pc-uwin
|
||||||
@@ -770,16 +798,48 @@ EOF
|
|||||||
echo ${UNAME_MACHINE}-unknown-linux-gnu
|
echo ${UNAME_MACHINE}-unknown-linux-gnu
|
||||||
exit 0 ;;
|
exit 0 ;;
|
||||||
ia64:Linux:*:*)
|
ia64:Linux:*:*)
|
||||||
echo ${UNAME_MACHINE}-unknown-linux
|
echo ${UNAME_MACHINE}-unknown-linux-gnu
|
||||||
exit 0 ;;
|
exit 0 ;;
|
||||||
m68*:Linux:*:*)
|
m68*:Linux:*:*)
|
||||||
echo ${UNAME_MACHINE}-unknown-linux-gnu
|
echo ${UNAME_MACHINE}-unknown-linux-gnu
|
||||||
exit 0 ;;
|
exit 0 ;;
|
||||||
mips:Linux:*:*)
|
mips:Linux:*:*)
|
||||||
case `sed -n '/^byte/s/^.*: \(.*\) endian/\1/p' < /proc/cpuinfo` in
|
eval $set_cc_for_build
|
||||||
big) echo mips-unknown-linux-gnu && exit 0 ;;
|
sed 's/^ //' << EOF >$dummy.c
|
||||||
little) echo mipsel-unknown-linux-gnu && exit 0 ;;
|
#undef CPU
|
||||||
esac
|
#undef mips
|
||||||
|
#undef mipsel
|
||||||
|
#if defined(__MIPSEL__) || defined(__MIPSEL) || defined(_MIPSEL) || defined(MIPSEL)
|
||||||
|
CPU=mipsel
|
||||||
|
#else
|
||||||
|
#if defined(__MIPSEB__) || defined(__MIPSEB) || defined(_MIPSEB) || defined(MIPSEB)
|
||||||
|
CPU=mips
|
||||||
|
#else
|
||||||
|
CPU=
|
||||||
|
#endif
|
||||||
|
#endif
|
||||||
|
EOF
|
||||||
|
eval `$CC_FOR_BUILD -E $dummy.c 2>/dev/null | grep ^CPU=`
|
||||||
|
test x"${CPU}" != x && echo "${CPU}-unknown-linux-gnu" && exit 0
|
||||||
|
;;
|
||||||
|
mips64:Linux:*:*)
|
||||||
|
eval $set_cc_for_build
|
||||||
|
sed 's/^ //' << EOF >$dummy.c
|
||||||
|
#undef CPU
|
||||||
|
#undef mips64
|
||||||
|
#undef mips64el
|
||||||
|
#if defined(__MIPSEL__) || defined(__MIPSEL) || defined(_MIPSEL) || defined(MIPSEL)
|
||||||
|
CPU=mips64el
|
||||||
|
#else
|
||||||
|
#if defined(__MIPSEB__) || defined(__MIPSEB) || defined(_MIPSEB) || defined(MIPSEB)
|
||||||
|
CPU=mips64
|
||||||
|
#else
|
||||||
|
CPU=
|
||||||
|
#endif
|
||||||
|
#endif
|
||||||
|
EOF
|
||||||
|
eval `$CC_FOR_BUILD -E $dummy.c 2>/dev/null | grep ^CPU=`
|
||||||
|
test x"${CPU}" != x && echo "${CPU}-unknown-linux-gnu" && exit 0
|
||||||
;;
|
;;
|
||||||
ppc:Linux:*:*)
|
ppc:Linux:*:*)
|
||||||
echo powerpc-unknown-linux-gnu
|
echo powerpc-unknown-linux-gnu
|
||||||
@@ -828,7 +888,8 @@ EOF
|
|||||||
# The BFD linker knows what the default object file format is, so
|
# The BFD linker knows what the default object file format is, so
|
||||||
# first see if it will tell us. cd to the root directory to prevent
|
# first see if it will tell us. cd to the root directory to prevent
|
||||||
# problems with other programs or directories called `ld' in the path.
|
# problems with other programs or directories called `ld' in the path.
|
||||||
ld_supported_targets=`cd /; ld --help 2>&1 \
|
# Set LC_ALL=C to ensure ld outputs messages in English.
|
||||||
|
ld_supported_targets=`cd /; LC_ALL=C ld --help 2>&1 \
|
||||||
| sed -ne '/supported targets:/!d
|
| sed -ne '/supported targets:/!d
|
||||||
s/[ ][ ]*/ /g
|
s/[ ][ ]*/ /g
|
||||||
s/.*supported targets: *//
|
s/.*supported targets: *//
|
||||||
@@ -852,32 +913,28 @@ EOF
|
|||||||
esac
|
esac
|
||||||
# Determine whether the default compiler is a.out or elf
|
# Determine whether the default compiler is a.out or elf
|
||||||
eval $set_cc_for_build
|
eval $set_cc_for_build
|
||||||
cat >$dummy.c <<EOF
|
sed 's/^ //' << EOF >$dummy.c
|
||||||
#include <features.h>
|
#include <features.h>
|
||||||
#ifdef __cplusplus
|
#ifdef __ELF__
|
||||||
#include <stdio.h> /* for printf() prototype */
|
# ifdef __GLIBC__
|
||||||
int main (int argc, char *argv[]) {
|
# if __GLIBC__ >= 2
|
||||||
#else
|
LIBC=gnu
|
||||||
int main (argc, argv) int argc; char *argv[]; {
|
# else
|
||||||
#endif
|
LIBC=gnulibc1
|
||||||
#ifdef __ELF__
|
# endif
|
||||||
# ifdef __GLIBC__
|
# else
|
||||||
# if __GLIBC__ >= 2
|
LIBC=gnulibc1
|
||||||
printf ("%s-pc-linux-gnu\n", argv[1]);
|
# endif
|
||||||
# else
|
#else
|
||||||
printf ("%s-pc-linux-gnulibc1\n", argv[1]);
|
#ifdef __INTEL_COMPILER
|
||||||
# endif
|
LIBC=gnu
|
||||||
# else
|
#else
|
||||||
printf ("%s-pc-linux-gnulibc1\n", argv[1]);
|
LIBC=gnuaout
|
||||||
# endif
|
#endif
|
||||||
#else
|
#endif
|
||||||
printf ("%s-pc-linux-gnuaout\n", argv[1]);
|
|
||||||
#endif
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
EOF
|
EOF
|
||||||
$CC_FOR_BUILD $dummy.c -o $dummy 2>/dev/null && ./$dummy "${UNAME_MACHINE}" && rm -f $dummy.c $dummy && exit 0
|
eval `$CC_FOR_BUILD -E $dummy.c 2>/dev/null | grep ^LIBC=`
|
||||||
rm -f $dummy.c $dummy
|
test x"${LIBC}" != x && echo "${UNAME_MACHINE}-pc-linux-${LIBC}" && exit 0
|
||||||
test x"${TENTATIVE}" != x && echo "${TENTATIVE}" && exit 0
|
test x"${TENTATIVE}" != x && echo "${TENTATIVE}" && exit 0
|
||||||
;;
|
;;
|
||||||
i*86:DYNIX/ptx:4*:*)
|
i*86:DYNIX/ptx:4*:*)
|
||||||
@@ -894,6 +951,23 @@ EOF
|
|||||||
# Use sysv4.2uw... so that sysv4* matches it.
|
# Use sysv4.2uw... so that sysv4* matches it.
|
||||||
echo ${UNAME_MACHINE}-pc-sysv4.2uw${UNAME_VERSION}
|
echo ${UNAME_MACHINE}-pc-sysv4.2uw${UNAME_VERSION}
|
||||||
exit 0 ;;
|
exit 0 ;;
|
||||||
|
i*86:OS/2:*:*)
|
||||||
|
# If we were able to find `uname', then EMX Unix compatibility
|
||||||
|
# is probably installed.
|
||||||
|
echo ${UNAME_MACHINE}-pc-os2-emx
|
||||||
|
exit 0 ;;
|
||||||
|
i*86:XTS-300:*:STOP)
|
||||||
|
echo ${UNAME_MACHINE}-unknown-stop
|
||||||
|
exit 0 ;;
|
||||||
|
i*86:atheos:*:*)
|
||||||
|
echo ${UNAME_MACHINE}-unknown-atheos
|
||||||
|
exit 0 ;;
|
||||||
|
i*86:LynxOS:2.*:* | i*86:LynxOS:3.[01]*:* | i*86:LynxOS:4.0*:*)
|
||||||
|
echo i386-unknown-lynxos${UNAME_RELEASE}
|
||||||
|
exit 0 ;;
|
||||||
|
i*86:*DOS:*:*)
|
||||||
|
echo ${UNAME_MACHINE}-pc-msdosdjgpp
|
||||||
|
exit 0 ;;
|
||||||
i*86:*:4.*:* | i*86:SYSTEM_V:4.*:*)
|
i*86:*:4.*:* | i*86:SYSTEM_V:4.*:*)
|
||||||
UNAME_REL=`echo ${UNAME_RELEASE} | sed 's/\/MP$//'`
|
UNAME_REL=`echo ${UNAME_RELEASE} | sed 's/\/MP$//'`
|
||||||
if grep Novell /usr/include/link.h >/dev/null 2>/dev/null; then
|
if grep Novell /usr/include/link.h >/dev/null 2>/dev/null; then
|
||||||
@@ -915,22 +989,19 @@ EOF
|
|||||||
UNAME_REL=`sed -n 's/.*Version //p' </usr/options/cb.name`
|
UNAME_REL=`sed -n 's/.*Version //p' </usr/options/cb.name`
|
||||||
echo ${UNAME_MACHINE}-pc-isc$UNAME_REL
|
echo ${UNAME_MACHINE}-pc-isc$UNAME_REL
|
||||||
elif /bin/uname -X 2>/dev/null >/dev/null ; then
|
elif /bin/uname -X 2>/dev/null >/dev/null ; then
|
||||||
UNAME_REL=`(/bin/uname -X|egrep Release|sed -e 's/.*= //')`
|
UNAME_REL=`(/bin/uname -X|grep Release|sed -e 's/.*= //')`
|
||||||
(/bin/uname -X|egrep i80486 >/dev/null) && UNAME_MACHINE=i486
|
(/bin/uname -X|grep i80486 >/dev/null) && UNAME_MACHINE=i486
|
||||||
(/bin/uname -X|egrep '^Machine.*Pentium' >/dev/null) \
|
(/bin/uname -X|grep '^Machine.*Pentium' >/dev/null) \
|
||||||
&& UNAME_MACHINE=i586
|
&& UNAME_MACHINE=i586
|
||||||
(/bin/uname -X|egrep '^Machine.*Pent ?II' >/dev/null) \
|
(/bin/uname -X|grep '^Machine.*Pent *II' >/dev/null) \
|
||||||
&& UNAME_MACHINE=i686
|
&& UNAME_MACHINE=i686
|
||||||
(/bin/uname -X|egrep '^Machine.*Pentium Pro' >/dev/null) \
|
(/bin/uname -X|grep '^Machine.*Pentium Pro' >/dev/null) \
|
||||||
&& UNAME_MACHINE=i686
|
&& UNAME_MACHINE=i686
|
||||||
echo ${UNAME_MACHINE}-pc-sco$UNAME_REL
|
echo ${UNAME_MACHINE}-pc-sco$UNAME_REL
|
||||||
else
|
else
|
||||||
echo ${UNAME_MACHINE}-pc-sysv32
|
echo ${UNAME_MACHINE}-pc-sysv32
|
||||||
fi
|
fi
|
||||||
exit 0 ;;
|
exit 0 ;;
|
||||||
i*86:*DOS:*:*)
|
|
||||||
echo ${UNAME_MACHINE}-pc-msdosdjgpp
|
|
||||||
exit 0 ;;
|
|
||||||
pc:*:*:*)
|
pc:*:*:*)
|
||||||
# Left here for compatibility:
|
# Left here for compatibility:
|
||||||
# uname -m prints for DJGPP always 'pc', but it prints nothing about
|
# uname -m prints for DJGPP always 'pc', but it prints nothing about
|
||||||
@@ -954,9 +1025,15 @@ EOF
|
|||||||
# "miniframe"
|
# "miniframe"
|
||||||
echo m68010-convergent-sysv
|
echo m68010-convergent-sysv
|
||||||
exit 0 ;;
|
exit 0 ;;
|
||||||
|
mc68k:UNIX:SYSTEM5:3.51m)
|
||||||
|
echo m68k-convergent-sysv
|
||||||
|
exit 0 ;;
|
||||||
|
M680?0:D-NIX:5.3:*)
|
||||||
|
echo m68k-diab-dnix
|
||||||
|
exit 0 ;;
|
||||||
M68*:*:R3V[567]*:*)
|
M68*:*:R3V[567]*:*)
|
||||||
test -r /sysV68 && echo 'm68k-motorola-sysv' && exit 0 ;;
|
test -r /sysV68 && echo 'm68k-motorola-sysv' && exit 0 ;;
|
||||||
3[34]??:*:4.0:3.0 | 3[34]??A:*:4.0:3.0 | 3[34]??,*:*:4.0:3.0 | 4850:*:4.0:3.0)
|
3[34]??:*:4.0:3.0 | 3[34]??A:*:4.0:3.0 | 3[34]??,*:*:4.0:3.0 | 3[34]??/*:*:4.0:3.0 | 4400:*:4.0:3.0 | 4850:*:4.0:3.0 | SKA40:*:4.0:3.0 | SDS2:*:4.0:3.0)
|
||||||
OS_REL=''
|
OS_REL=''
|
||||||
test -r /etc/.relid \
|
test -r /etc/.relid \
|
||||||
&& OS_REL=.`sed -n 's/[^ ]* [^ ]* \([0-9][0-9]\).*/\1/p' < /etc/.relid`
|
&& OS_REL=.`sed -n 's/[^ ]* [^ ]* \([0-9][0-9]\).*/\1/p' < /etc/.relid`
|
||||||
@@ -973,9 +1050,6 @@ EOF
|
|||||||
mc68030:UNIX_System_V:4.*:*)
|
mc68030:UNIX_System_V:4.*:*)
|
||||||
echo m68k-atari-sysv4
|
echo m68k-atari-sysv4
|
||||||
exit 0 ;;
|
exit 0 ;;
|
||||||
i*86:LynxOS:2.*:* | i*86:LynxOS:3.[01]*:* | i*86:LynxOS:4.0*:*)
|
|
||||||
echo i386-unknown-lynxos${UNAME_RELEASE}
|
|
||||||
exit 0 ;;
|
|
||||||
TSUNAMI:LynxOS:2.*:*)
|
TSUNAMI:LynxOS:2.*:*)
|
||||||
echo sparc-unknown-lynxos${UNAME_RELEASE}
|
echo sparc-unknown-lynxos${UNAME_RELEASE}
|
||||||
exit 0 ;;
|
exit 0 ;;
|
||||||
@@ -1047,6 +1121,9 @@ EOF
|
|||||||
SX-5:SUPER-UX:*:*)
|
SX-5:SUPER-UX:*:*)
|
||||||
echo sx5-nec-superux${UNAME_RELEASE}
|
echo sx5-nec-superux${UNAME_RELEASE}
|
||||||
exit 0 ;;
|
exit 0 ;;
|
||||||
|
SX-6:SUPER-UX:*:*)
|
||||||
|
echo sx6-nec-superux${UNAME_RELEASE}
|
||||||
|
exit 0 ;;
|
||||||
Power*:Rhapsody:*:*)
|
Power*:Rhapsody:*:*)
|
||||||
echo powerpc-apple-rhapsody${UNAME_RELEASE}
|
echo powerpc-apple-rhapsody${UNAME_RELEASE}
|
||||||
exit 0 ;;
|
exit 0 ;;
|
||||||
@@ -1054,18 +1131,24 @@ EOF
|
|||||||
echo ${UNAME_MACHINE}-apple-rhapsody${UNAME_RELEASE}
|
echo ${UNAME_MACHINE}-apple-rhapsody${UNAME_RELEASE}
|
||||||
exit 0 ;;
|
exit 0 ;;
|
||||||
*:Darwin:*:*)
|
*:Darwin:*:*)
|
||||||
echo `uname -p`-apple-darwin${UNAME_RELEASE}
|
case `uname -p` in
|
||||||
|
*86) UNAME_PROCESSOR=i686 ;;
|
||||||
|
powerpc) UNAME_PROCESSOR=powerpc ;;
|
||||||
|
esac
|
||||||
|
echo ${UNAME_PROCESSOR}-apple-darwin${UNAME_RELEASE}
|
||||||
exit 0 ;;
|
exit 0 ;;
|
||||||
*:procnto*:*:* | *:QNX:[0123456789]*:*)
|
*:procnto*:*:* | *:QNX:[0123456789]*:*)
|
||||||
if test "${UNAME_MACHINE}" = "x86pc"; then
|
UNAME_PROCESSOR=`uname -p`
|
||||||
|
if test "$UNAME_PROCESSOR" = "x86"; then
|
||||||
|
UNAME_PROCESSOR=i386
|
||||||
UNAME_MACHINE=pc
|
UNAME_MACHINE=pc
|
||||||
fi
|
fi
|
||||||
echo `uname -p`-${UNAME_MACHINE}-nto-qnx
|
echo ${UNAME_PROCESSOR}-${UNAME_MACHINE}-nto-qnx${UNAME_RELEASE}
|
||||||
exit 0 ;;
|
exit 0 ;;
|
||||||
*:QNX:*:4*)
|
*:QNX:*:4*)
|
||||||
echo i386-pc-qnx
|
echo i386-pc-qnx
|
||||||
exit 0 ;;
|
exit 0 ;;
|
||||||
NSR-[KW]:NONSTOP_KERNEL:*:*)
|
NSR-[DGKLNPTVW]:NONSTOP_KERNEL:*:*)
|
||||||
echo nsr-tandem-nsk${UNAME_RELEASE}
|
echo nsr-tandem-nsk${UNAME_RELEASE}
|
||||||
exit 0 ;;
|
exit 0 ;;
|
||||||
*:NonStop-UX:*:*)
|
*:NonStop-UX:*:*)
|
||||||
@@ -1088,11 +1171,6 @@ EOF
|
|||||||
fi
|
fi
|
||||||
echo ${UNAME_MACHINE}-unknown-plan9
|
echo ${UNAME_MACHINE}-unknown-plan9
|
||||||
exit 0 ;;
|
exit 0 ;;
|
||||||
i*86:OS/2:*:*)
|
|
||||||
# If we were able to find `uname', then EMX Unix compatibility
|
|
||||||
# is probably installed.
|
|
||||||
echo ${UNAME_MACHINE}-pc-os2-emx
|
|
||||||
exit 0 ;;
|
|
||||||
*:TOPS-10:*:*)
|
*:TOPS-10:*:*)
|
||||||
echo pdp10-unknown-tops10
|
echo pdp10-unknown-tops10
|
||||||
exit 0 ;;
|
exit 0 ;;
|
||||||
@@ -1111,12 +1189,6 @@ EOF
|
|||||||
*:ITS:*:*)
|
*:ITS:*:*)
|
||||||
echo pdp10-unknown-its
|
echo pdp10-unknown-its
|
||||||
exit 0 ;;
|
exit 0 ;;
|
||||||
i*86:XTS-300:*:STOP)
|
|
||||||
echo ${UNAME_MACHINE}-unknown-stop
|
|
||||||
exit 0 ;;
|
|
||||||
i*86:atheos:*:*)
|
|
||||||
echo ${UNAME_MACHINE}-unknown-atheos
|
|
||||||
exit 0 ;;
|
|
||||||
esac
|
esac
|
||||||
|
|
||||||
#echo '(No uname command or uname output not recognized.)' 1>&2
|
#echo '(No uname command or uname output not recognized.)' 1>&2
|
||||||
@@ -1237,8 +1309,7 @@ main ()
|
|||||||
}
|
}
|
||||||
EOF
|
EOF
|
||||||
|
|
||||||
$CC_FOR_BUILD $dummy.c -o $dummy 2>/dev/null && ./$dummy && rm -f $dummy.c $dummy && exit 0
|
$CC_FOR_BUILD -o $dummy $dummy.c 2>/dev/null && $dummy && exit 0
|
||||||
rm -f $dummy.c $dummy
|
|
||||||
|
|
||||||
# Apollos put the system type in the environment.
|
# Apollos put the system type in the environment.
|
||||||
|
|
||||||
250
config.sub → ares/config.sub
vendored
250
config.sub → ares/config.sub
vendored
@@ -1,9 +1,9 @@
|
|||||||
#! /bin/sh
|
#! /bin/sh
|
||||||
# Configuration validation subroutine script.
|
# Configuration validation subroutine script.
|
||||||
# Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001
|
# Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999,
|
||||||
# Free Software Foundation, Inc.
|
# 2000, 2001, 2002, 2003 Free Software Foundation, Inc.
|
||||||
|
|
||||||
timestamp='2001-09-07'
|
timestamp='2003-02-22'
|
||||||
|
|
||||||
# This file is (in principle) common to ALL GNU software.
|
# This file is (in principle) common to ALL GNU software.
|
||||||
# The presence of a machine in this file suggests that SOME GNU software
|
# The presence of a machine in this file suggests that SOME GNU software
|
||||||
@@ -29,7 +29,8 @@ timestamp='2001-09-07'
|
|||||||
# configuration script generated by Autoconf, you may include it under
|
# configuration script generated by Autoconf, you may include it under
|
||||||
# the same distribution terms that you use for the rest of that program.
|
# the same distribution terms that you use for the rest of that program.
|
||||||
|
|
||||||
# Please send patches to <config-patches@gnu.org>.
|
# Please send patches to <config-patches@gnu.org>. Submit a context
|
||||||
|
# diff and a properly formatted ChangeLog entry.
|
||||||
#
|
#
|
||||||
# Configuration subroutine to validate and canonicalize a configuration type.
|
# Configuration subroutine to validate and canonicalize a configuration type.
|
||||||
# Supply the specified configuration type as an argument.
|
# Supply the specified configuration type as an argument.
|
||||||
@@ -117,7 +118,7 @@ esac
|
|||||||
# Here we must recognize all the valid KERNEL-OS combinations.
|
# Here we must recognize all the valid KERNEL-OS combinations.
|
||||||
maybe_os=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\2/'`
|
maybe_os=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\2/'`
|
||||||
case $maybe_os in
|
case $maybe_os in
|
||||||
nto-qnx* | linux-gnu* | storm-chaos* | os2-emx* | windows32-*)
|
nto-qnx* | linux-gnu* | freebsd*-gnu* | netbsd*-gnu* | storm-chaos* | os2-emx* | rtmk-nova*)
|
||||||
os=-$maybe_os
|
os=-$maybe_os
|
||||||
basic_machine=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\1/'`
|
basic_machine=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\1/'`
|
||||||
;;
|
;;
|
||||||
@@ -226,32 +227,44 @@ case $basic_machine in
|
|||||||
1750a | 580 \
|
1750a | 580 \
|
||||||
| a29k \
|
| a29k \
|
||||||
| alpha | alphaev[4-8] | alphaev56 | alphaev6[78] | alphapca5[67] \
|
| alpha | alphaev[4-8] | alphaev56 | alphaev6[78] | alphapca5[67] \
|
||||||
|
| alpha64 | alpha64ev[4-8] | alpha64ev56 | alpha64ev6[78] | alpha64pca5[67] \
|
||||||
| arc | arm | arm[bl]e | arme[lb] | armv[2345] | armv[345][lb] | avr \
|
| arc | arm | arm[bl]e | arme[lb] | armv[2345] | armv[345][lb] | avr \
|
||||||
| c4x | clipper \
|
| clipper \
|
||||||
| d10v | d30v | dsp16xx \
|
| d10v | d30v | dlx | dsp16xx \
|
||||||
| fr30 \
|
| fr30 | frv \
|
||||||
| h8300 | h8500 | hppa | hppa1.[01] | hppa2.0 | hppa2.0[nw] | hppa64 \
|
| h8300 | h8500 | hppa | hppa1.[01] | hppa2.0 | hppa2.0[nw] | hppa64 \
|
||||||
| i370 | i860 | i960 | ia64 \
|
| i370 | i860 | i960 | ia64 \
|
||||||
|
| ip2k \
|
||||||
| m32r | m68000 | m68k | m88k | mcore \
|
| m32r | m68000 | m68k | m88k | mcore \
|
||||||
| mips16 | mips64 | mips64el | mips64orion | mips64orionel \
|
| mips | mipsbe | mipseb | mipsel | mipsle \
|
||||||
| mips64vr4100 | mips64vr4100el | mips64vr4300 \
|
| mips16 \
|
||||||
| mips64vr4300el | mips64vr5000 | mips64vr5000el \
|
| mips64 | mips64el \
|
||||||
| mipsbe | mipseb | mipsel | mipsle | mipstx39 | mipstx39el \
|
| mips64vr | mips64vrel \
|
||||||
| mipsisa32 \
|
| mips64orion | mips64orionel \
|
||||||
|
| mips64vr4100 | mips64vr4100el \
|
||||||
|
| mips64vr4300 | mips64vr4300el \
|
||||||
|
| mips64vr5000 | mips64vr5000el \
|
||||||
|
| mipsisa32 | mipsisa32el \
|
||||||
|
| mipsisa32r2 | mipsisa32r2el \
|
||||||
|
| mipsisa64 | mipsisa64el \
|
||||||
|
| mipsisa64sb1 | mipsisa64sb1el \
|
||||||
|
| mipsisa64sr71k | mipsisa64sr71kel \
|
||||||
|
| mipstx39 | mipstx39el \
|
||||||
| mn10200 | mn10300 \
|
| mn10200 | mn10300 \
|
||||||
|
| msp430 \
|
||||||
| ns16k | ns32k \
|
| ns16k | ns32k \
|
||||||
| openrisc \
|
| openrisc | or32 \
|
||||||
| pdp10 | pdp11 | pj | pjl \
|
| pdp10 | pdp11 | pj | pjl \
|
||||||
| powerpc | powerpc64 | powerpc64le | powerpcle | ppcbe \
|
| powerpc | powerpc64 | powerpc64le | powerpcle | ppcbe \
|
||||||
| pyramid \
|
| pyramid \
|
||||||
| s390 | s390x \
|
| sh | sh[1234] | sh[23]e | sh[34]eb | shbe | shle | sh[1234]le | sh3ele \
|
||||||
| sh | sh[34] | sh[34]eb | shbe | shle \
|
| sh64 | sh64le \
|
||||||
| sparc | sparc64 | sparclet | sparclite | sparcv9 | sparcv9b \
|
| sparc | sparc64 | sparc86x | sparclet | sparclite | sparcv9 | sparcv9b \
|
||||||
| stormy16 | strongarm \
|
| strongarm \
|
||||||
| tahoe | thumb | tic80 | tron \
|
| tahoe | thumb | tic80 | tron \
|
||||||
| v850 \
|
| v850 | v850e \
|
||||||
| we32k \
|
| we32k \
|
||||||
| x86 | xscale \
|
| x86 | xscale | xstormy16 | xtensa \
|
||||||
| z8k)
|
| z8k)
|
||||||
basic_machine=$basic_machine-unknown
|
basic_machine=$basic_machine-unknown
|
||||||
;;
|
;;
|
||||||
@@ -278,38 +291,55 @@ case $basic_machine in
|
|||||||
580-* \
|
580-* \
|
||||||
| a29k-* \
|
| a29k-* \
|
||||||
| alpha-* | alphaev[4-8]-* | alphaev56-* | alphaev6[78]-* \
|
| alpha-* | alphaev[4-8]-* | alphaev56-* | alphaev6[78]-* \
|
||||||
| alphapca5[67]-* | arc-* \
|
| alpha64-* | alpha64ev[4-8]-* | alpha64ev56-* | alpha64ev6[78]-* \
|
||||||
| arm-* | armbe-* | armle-* | armv*-* \
|
| alphapca5[67]-* | alpha64pca5[67]-* | arc-* \
|
||||||
|
| arm-* | armbe-* | armle-* | armeb-* | armv*-* \
|
||||||
|
| avr-* \
|
||||||
| bs2000-* \
|
| bs2000-* \
|
||||||
| c[123]* | c30-* | [cjt]90-* | c54x-* \
|
| c[123]* | c30-* | [cjt]90-* | c4x-* | c54x-* | c55x-* | c6x-* \
|
||||||
| clipper-* | cray2-* | cydra-* \
|
| clipper-* | cydra-* \
|
||||||
| d10v-* | d30v-* \
|
| d10v-* | d30v-* | dlx-* \
|
||||||
| elxsi-* \
|
| elxsi-* \
|
||||||
| f30[01]-* | f700-* | fr30-* | fx80-* \
|
| f30[01]-* | f700-* | fr30-* | frv-* | fx80-* \
|
||||||
| h8300-* | h8500-* \
|
| h8300-* | h8500-* \
|
||||||
| hppa-* | hppa1.[01]-* | hppa2.0-* | hppa2.0[nw]-* | hppa64-* \
|
| hppa-* | hppa1.[01]-* | hppa2.0-* | hppa2.0[nw]-* | hppa64-* \
|
||||||
| i*86-* | i860-* | i960-* | ia64-* \
|
| i*86-* | i860-* | i960-* | ia64-* \
|
||||||
|
| ip2k-* \
|
||||||
| m32r-* \
|
| m32r-* \
|
||||||
| m68000-* | m680[01234]0-* | m68360-* | m683?2-* | m68k-* \
|
| m68000-* | m680[012346]0-* | m68360-* | m683?2-* | m68k-* \
|
||||||
| m88110-* | m88k-* | mcore-* \
|
| m88110-* | m88k-* | mcore-* \
|
||||||
| mips-* | mips16-* | mips64-* | mips64el-* | mips64orion-* \
|
| mips-* | mipsbe-* | mipseb-* | mipsel-* | mipsle-* \
|
||||||
| mips64orionel-* | mips64vr4100-* | mips64vr4100el-* \
|
| mips16-* \
|
||||||
| mips64vr4300-* | mips64vr4300el-* | mipsbe-* | mipseb-* \
|
| mips64-* | mips64el-* \
|
||||||
| mipsle-* | mipsel-* | mipstx39-* | mipstx39el-* \
|
| mips64vr-* | mips64vrel-* \
|
||||||
| none-* | np1-* | ns16k-* | ns32k-* \
|
| mips64orion-* | mips64orionel-* \
|
||||||
|
| mips64vr4100-* | mips64vr4100el-* \
|
||||||
|
| mips64vr4300-* | mips64vr4300el-* \
|
||||||
|
| mips64vr5000-* | mips64vr5000el-* \
|
||||||
|
| mipsisa32-* | mipsisa32el-* \
|
||||||
|
| mipsisa32r2-* | mipsisa32r2el-* \
|
||||||
|
| mipsisa64-* | mipsisa64el-* \
|
||||||
|
| mipsisa64sb1-* | mipsisa64sb1el-* \
|
||||||
|
| mipsisa64sr71k-* | mipsisa64sr71kel-* \
|
||||||
|
| mipstx39-* | mipstx39el-* \
|
||||||
|
| msp430-* \
|
||||||
|
| none-* | np1-* | nv1-* | ns16k-* | ns32k-* \
|
||||||
| orion-* \
|
| orion-* \
|
||||||
| pdp10-* | pdp11-* | pj-* | pjl-* | pn-* | power-* \
|
| pdp10-* | pdp11-* | pj-* | pjl-* | pn-* | power-* \
|
||||||
| powerpc-* | powerpc64-* | powerpc64le-* | powerpcle-* | ppcbe-* \
|
| powerpc-* | powerpc64-* | powerpc64le-* | powerpcle-* | ppcbe-* \
|
||||||
| pyramid-* \
|
| pyramid-* \
|
||||||
| romp-* | rs6000-* \
|
| romp-* | rs6000-* \
|
||||||
| s390-* | s390x-* \
|
| sh-* | sh[1234]-* | sh[23]e-* | sh[34]eb-* | shbe-* \
|
||||||
| sh-* | sh[34]-* | sh[34]eb-* | shbe-* | shle-* \
|
| shle-* | sh[1234]le-* | sh3ele-* | sh64-* | sh64le-* \
|
||||||
| sparc-* | sparc64-* | sparc86x-* | sparclite-* \
|
| sparc-* | sparc64-* | sparc86x-* | sparclet-* | sparclite-* \
|
||||||
| sparcv9-* | sparcv9b-* | stormy16-* | strongarm-* | sv1-* \
|
| sparcv9-* | sparcv9b-* | strongarm-* | sv1-* | sx?-* \
|
||||||
| t3e-* | tahoe-* | thumb-* | tic30-* | tic54x-* | tic80-* | tron-* \
|
| tahoe-* | thumb-* \
|
||||||
| v850-* | vax-* \
|
| tic30-* | tic4x-* | tic54x-* | tic55x-* | tic6x-* | tic80-* \
|
||||||
|
| tron-* \
|
||||||
|
| v850-* | v850e-* | vax-* \
|
||||||
| we32k-* \
|
| we32k-* \
|
||||||
| x86-* | x86_64-* | xmp-* | xps100-* | xscale-* \
|
| x86-* | x86_64-* | xps100-* | xscale-* | xstormy16-* \
|
||||||
|
| xtensa-* \
|
||||||
| ymp-* \
|
| ymp-* \
|
||||||
| z8k-*)
|
| z8k-*)
|
||||||
;;
|
;;
|
||||||
@@ -374,6 +404,10 @@ case $basic_machine in
|
|||||||
basic_machine=ns32k-sequent
|
basic_machine=ns32k-sequent
|
||||||
os=-dynix
|
os=-dynix
|
||||||
;;
|
;;
|
||||||
|
c90)
|
||||||
|
basic_machine=c90-cray
|
||||||
|
os=-unicos
|
||||||
|
;;
|
||||||
convex-c1)
|
convex-c1)
|
||||||
basic_machine=c1-convex
|
basic_machine=c1-convex
|
||||||
os=-bsd
|
os=-bsd
|
||||||
@@ -394,16 +428,8 @@ case $basic_machine in
|
|||||||
basic_machine=c38-convex
|
basic_machine=c38-convex
|
||||||
os=-bsd
|
os=-bsd
|
||||||
;;
|
;;
|
||||||
cray | ymp)
|
cray | j90)
|
||||||
basic_machine=ymp-cray
|
basic_machine=j90-cray
|
||||||
os=-unicos
|
|
||||||
;;
|
|
||||||
cray2)
|
|
||||||
basic_machine=cray2-cray
|
|
||||||
os=-unicos
|
|
||||||
;;
|
|
||||||
[cjt]90)
|
|
||||||
basic_machine=${basic_machine}-cray
|
|
||||||
os=-unicos
|
os=-unicos
|
||||||
;;
|
;;
|
||||||
crds | unos)
|
crds | unos)
|
||||||
@@ -418,6 +444,14 @@ case $basic_machine in
|
|||||||
decstation | decstation-3100 | pmax | pmax-* | pmin | dec3100 | decstatn)
|
decstation | decstation-3100 | pmax | pmax-* | pmin | dec3100 | decstatn)
|
||||||
basic_machine=mips-dec
|
basic_machine=mips-dec
|
||||||
;;
|
;;
|
||||||
|
decsystem10* | dec10*)
|
||||||
|
basic_machine=pdp10-dec
|
||||||
|
os=-tops10
|
||||||
|
;;
|
||||||
|
decsystem20* | dec20*)
|
||||||
|
basic_machine=pdp10-dec
|
||||||
|
os=-tops20
|
||||||
|
;;
|
||||||
delta | 3300 | motorola-3300 | motorola-delta \
|
delta | 3300 | motorola-3300 | motorola-delta \
|
||||||
| 3300-motorola | delta-motorola)
|
| 3300-motorola | delta-motorola)
|
||||||
basic_machine=m68k-motorola
|
basic_machine=m68k-motorola
|
||||||
@@ -598,14 +632,6 @@ case $basic_machine in
|
|||||||
basic_machine=m68k-atari
|
basic_machine=m68k-atari
|
||||||
os=-mint
|
os=-mint
|
||||||
;;
|
;;
|
||||||
mipsel*-linux*)
|
|
||||||
basic_machine=mipsel-unknown
|
|
||||||
os=-linux-gnu
|
|
||||||
;;
|
|
||||||
mips*-linux*)
|
|
||||||
basic_machine=mips-unknown
|
|
||||||
os=-linux-gnu
|
|
||||||
;;
|
|
||||||
mips3*-*)
|
mips3*-*)
|
||||||
basic_machine=`echo $basic_machine | sed -e 's/mips3/mips64/'`
|
basic_machine=`echo $basic_machine | sed -e 's/mips3/mips64/'`
|
||||||
;;
|
;;
|
||||||
@@ -620,6 +646,10 @@ case $basic_machine in
|
|||||||
basic_machine=m68k-rom68k
|
basic_machine=m68k-rom68k
|
||||||
os=-coff
|
os=-coff
|
||||||
;;
|
;;
|
||||||
|
morphos)
|
||||||
|
basic_machine=powerpc-unknown
|
||||||
|
os=-morphos
|
||||||
|
;;
|
||||||
msdos)
|
msdos)
|
||||||
basic_machine=i386-pc
|
basic_machine=i386-pc
|
||||||
os=-msdos
|
os=-msdos
|
||||||
@@ -692,6 +722,10 @@ case $basic_machine in
|
|||||||
np1)
|
np1)
|
||||||
basic_machine=np1-gould
|
basic_machine=np1-gould
|
||||||
;;
|
;;
|
||||||
|
nv1)
|
||||||
|
basic_machine=nv1-cray
|
||||||
|
os=-unicosmp
|
||||||
|
;;
|
||||||
nsr-tandem)
|
nsr-tandem)
|
||||||
basic_machine=nsr-tandem
|
basic_machine=nsr-tandem
|
||||||
;;
|
;;
|
||||||
@@ -699,6 +733,10 @@ case $basic_machine in
|
|||||||
basic_machine=hppa1.1-oki
|
basic_machine=hppa1.1-oki
|
||||||
os=-proelf
|
os=-proelf
|
||||||
;;
|
;;
|
||||||
|
or32 | or32-*)
|
||||||
|
basic_machine=or32-unknown
|
||||||
|
os=-coff
|
||||||
|
;;
|
||||||
OSE68000 | ose68000)
|
OSE68000 | ose68000)
|
||||||
basic_machine=m68000-ericsson
|
basic_machine=m68000-ericsson
|
||||||
os=-ose
|
os=-ose
|
||||||
@@ -724,16 +762,16 @@ case $basic_machine in
|
|||||||
pc532 | pc532-*)
|
pc532 | pc532-*)
|
||||||
basic_machine=ns32k-pc532
|
basic_machine=ns32k-pc532
|
||||||
;;
|
;;
|
||||||
pentium | p5 | k5 | k6 | nexgen)
|
pentium | p5 | k5 | k6 | nexgen | viac3)
|
||||||
basic_machine=i586-pc
|
basic_machine=i586-pc
|
||||||
;;
|
;;
|
||||||
pentiumpro | p6 | 6x86 | athlon)
|
pentiumpro | p6 | 6x86 | athlon | athlon_*)
|
||||||
basic_machine=i686-pc
|
basic_machine=i686-pc
|
||||||
;;
|
;;
|
||||||
pentiumii | pentium2)
|
pentiumii | pentium2)
|
||||||
basic_machine=i686-pc
|
basic_machine=i686-pc
|
||||||
;;
|
;;
|
||||||
pentium-* | p5-* | k5-* | k6-* | nexgen-*)
|
pentium-* | p5-* | k5-* | k6-* | nexgen-* | viac3-*)
|
||||||
basic_machine=i586-`echo $basic_machine | sed 's/^[^-]*-//'`
|
basic_machine=i586-`echo $basic_machine | sed 's/^[^-]*-//'`
|
||||||
;;
|
;;
|
||||||
pentiumpro-* | p6-* | 6x86-* | athlon-*)
|
pentiumpro-* | p6-* | 6x86-* | athlon-*)
|
||||||
@@ -784,10 +822,22 @@ case $basic_machine in
|
|||||||
rtpc | rtpc-*)
|
rtpc | rtpc-*)
|
||||||
basic_machine=romp-ibm
|
basic_machine=romp-ibm
|
||||||
;;
|
;;
|
||||||
|
s390 | s390-*)
|
||||||
|
basic_machine=s390-ibm
|
||||||
|
;;
|
||||||
|
s390x | s390x-*)
|
||||||
|
basic_machine=s390x-ibm
|
||||||
|
;;
|
||||||
sa29200)
|
sa29200)
|
||||||
basic_machine=a29k-amd
|
basic_machine=a29k-amd
|
||||||
os=-udi
|
os=-udi
|
||||||
;;
|
;;
|
||||||
|
sb1)
|
||||||
|
basic_machine=mipsisa64sb1-unknown
|
||||||
|
;;
|
||||||
|
sb1el)
|
||||||
|
basic_machine=mipsisa64sb1el-unknown
|
||||||
|
;;
|
||||||
sequent)
|
sequent)
|
||||||
basic_machine=i386-sequent
|
basic_machine=i386-sequent
|
||||||
;;
|
;;
|
||||||
@@ -795,7 +845,7 @@ case $basic_machine in
|
|||||||
basic_machine=sh-hitachi
|
basic_machine=sh-hitachi
|
||||||
os=-hms
|
os=-hms
|
||||||
;;
|
;;
|
||||||
sparclite-wrs)
|
sparclite-wrs | simso-wrs)
|
||||||
basic_machine=sparclite-wrs
|
basic_machine=sparclite-wrs
|
||||||
os=-vxworks
|
os=-vxworks
|
||||||
;;
|
;;
|
||||||
@@ -862,19 +912,39 @@ case $basic_machine in
|
|||||||
os=-dynix
|
os=-dynix
|
||||||
;;
|
;;
|
||||||
t3e)
|
t3e)
|
||||||
basic_machine=t3e-cray
|
basic_machine=alphaev5-cray
|
||||||
os=-unicos
|
os=-unicos
|
||||||
;;
|
;;
|
||||||
|
t90)
|
||||||
|
basic_machine=t90-cray
|
||||||
|
os=-unicos
|
||||||
|
;;
|
||||||
|
tic4x | c4x*)
|
||||||
|
basic_machine=tic4x-unknown
|
||||||
|
os=-coff
|
||||||
|
;;
|
||||||
tic54x | c54x*)
|
tic54x | c54x*)
|
||||||
basic_machine=tic54x-unknown
|
basic_machine=tic54x-unknown
|
||||||
os=-coff
|
os=-coff
|
||||||
;;
|
;;
|
||||||
|
tic55x | c55x*)
|
||||||
|
basic_machine=tic55x-unknown
|
||||||
|
os=-coff
|
||||||
|
;;
|
||||||
|
tic6x | c6x*)
|
||||||
|
basic_machine=tic6x-unknown
|
||||||
|
os=-coff
|
||||||
|
;;
|
||||||
tx39)
|
tx39)
|
||||||
basic_machine=mipstx39-unknown
|
basic_machine=mipstx39-unknown
|
||||||
;;
|
;;
|
||||||
tx39el)
|
tx39el)
|
||||||
basic_machine=mipstx39el-unknown
|
basic_machine=mipstx39el-unknown
|
||||||
;;
|
;;
|
||||||
|
toad1)
|
||||||
|
basic_machine=pdp10-xkl
|
||||||
|
os=-tops20
|
||||||
|
;;
|
||||||
tower | tower-32)
|
tower | tower-32)
|
||||||
basic_machine=m68k-ncr
|
basic_machine=m68k-ncr
|
||||||
;;
|
;;
|
||||||
@@ -921,17 +991,13 @@ case $basic_machine in
|
|||||||
basic_machine=hppa1.1-winbond
|
basic_machine=hppa1.1-winbond
|
||||||
os=-proelf
|
os=-proelf
|
||||||
;;
|
;;
|
||||||
windows32)
|
|
||||||
basic_machine=i386-pc
|
|
||||||
os=-windows32-msvcrt
|
|
||||||
;;
|
|
||||||
xmp)
|
|
||||||
basic_machine=xmp-cray
|
|
||||||
os=-unicos
|
|
||||||
;;
|
|
||||||
xps | xps100)
|
xps | xps100)
|
||||||
basic_machine=xps100-honeywell
|
basic_machine=xps100-honeywell
|
||||||
;;
|
;;
|
||||||
|
ymp)
|
||||||
|
basic_machine=ymp-cray
|
||||||
|
os=-unicos
|
||||||
|
;;
|
||||||
z8k-*-coff)
|
z8k-*-coff)
|
||||||
basic_machine=z8k-unknown
|
basic_machine=z8k-unknown
|
||||||
os=-sim
|
os=-sim
|
||||||
@@ -952,13 +1018,6 @@ case $basic_machine in
|
|||||||
op60c)
|
op60c)
|
||||||
basic_machine=hppa1.1-oki
|
basic_machine=hppa1.1-oki
|
||||||
;;
|
;;
|
||||||
mips)
|
|
||||||
if [ x$os = x-linux-gnu ]; then
|
|
||||||
basic_machine=mips-unknown
|
|
||||||
else
|
|
||||||
basic_machine=mips-mips
|
|
||||||
fi
|
|
||||||
;;
|
|
||||||
romp)
|
romp)
|
||||||
basic_machine=romp-ibm
|
basic_machine=romp-ibm
|
||||||
;;
|
;;
|
||||||
@@ -978,9 +1037,12 @@ case $basic_machine in
|
|||||||
we32k)
|
we32k)
|
||||||
basic_machine=we32k-att
|
basic_machine=we32k-att
|
||||||
;;
|
;;
|
||||||
sh3 | sh4 | sh3eb | sh4eb)
|
sh3 | sh4 | sh[34]eb | sh[1234]le | sh[23]ele)
|
||||||
basic_machine=sh-unknown
|
basic_machine=sh-unknown
|
||||||
;;
|
;;
|
||||||
|
sh64)
|
||||||
|
basic_machine=sh64-unknown
|
||||||
|
;;
|
||||||
sparc | sparcv9 | sparcv9b)
|
sparc | sparcv9 | sparcv9b)
|
||||||
basic_machine=sparc-sun
|
basic_machine=sparc-sun
|
||||||
;;
|
;;
|
||||||
@@ -999,10 +1061,6 @@ case $basic_machine in
|
|||||||
pmac | pmac-mpw)
|
pmac | pmac-mpw)
|
||||||
basic_machine=powerpc-apple
|
basic_machine=powerpc-apple
|
||||||
;;
|
;;
|
||||||
c4x*)
|
|
||||||
basic_machine=c4x-none
|
|
||||||
os=-coff
|
|
||||||
;;
|
|
||||||
*-unknown)
|
*-unknown)
|
||||||
# Make sure to match an already-canonicalized machine name.
|
# Make sure to match an already-canonicalized machine name.
|
||||||
;;
|
;;
|
||||||
@@ -1065,10 +1123,12 @@ case $os in
|
|||||||
| -chorusos* | -chorusrdb* \
|
| -chorusos* | -chorusrdb* \
|
||||||
| -cygwin* | -pe* | -psos* | -moss* | -proelf* | -rtems* \
|
| -cygwin* | -pe* | -psos* | -moss* | -proelf* | -rtems* \
|
||||||
| -mingw32* | -linux-gnu* | -uxpv* | -beos* | -mpeix* | -udk* \
|
| -mingw32* | -linux-gnu* | -uxpv* | -beos* | -mpeix* | -udk* \
|
||||||
| -interix* | -uwin* | -rhapsody* | -darwin* | -opened* \
|
| -interix* | -uwin* | -mks* | -rhapsody* | -darwin* | -opened* \
|
||||||
| -openstep* | -oskit* | -conix* | -pw32* | -nonstopux* \
|
| -openstep* | -oskit* | -conix* | -pw32* | -nonstopux* \
|
||||||
| -storm-chaos* | -tops10* | -tenex* | -tops20* | -its* \
|
| -storm-chaos* | -tops10* | -tenex* | -tops20* | -its* \
|
||||||
| -os2* | -vos*)
|
| -os2* | -vos* | -palmos* | -uclinux* | -nucleus* \
|
||||||
|
| -morphos* | -superux* | -rtmk* | -rtmk-nova* | -windiss* \
|
||||||
|
| -powermax* | -dnix*)
|
||||||
# Remember, each alternative MUST END IN *, to match a version number.
|
# Remember, each alternative MUST END IN *, to match a version number.
|
||||||
;;
|
;;
|
||||||
-qnx*)
|
-qnx*)
|
||||||
@@ -1080,8 +1140,10 @@ case $os in
|
|||||||
;;
|
;;
|
||||||
esac
|
esac
|
||||||
;;
|
;;
|
||||||
|
-nto-qnx*)
|
||||||
|
;;
|
||||||
-nto*)
|
-nto*)
|
||||||
os=-nto-qnx
|
os=`echo $os | sed -e 's|nto|nto-qnx|'`
|
||||||
;;
|
;;
|
||||||
-sim | -es1800* | -hms* | -xray | -os68k* | -none* | -v88r* \
|
-sim | -es1800* | -hms* | -xray | -os68k* | -none* | -v88r* \
|
||||||
| -windows* | -osx | -abug | -netware* | -os9* | -beos* \
|
| -windows* | -osx | -abug | -netware* | -os9* | -beos* \
|
||||||
@@ -1120,12 +1182,18 @@ case $os in
|
|||||||
-acis*)
|
-acis*)
|
||||||
os=-aos
|
os=-aos
|
||||||
;;
|
;;
|
||||||
|
-atheos*)
|
||||||
|
os=-atheos
|
||||||
|
;;
|
||||||
-386bsd)
|
-386bsd)
|
||||||
os=-bsd
|
os=-bsd
|
||||||
;;
|
;;
|
||||||
-ctix* | -uts*)
|
-ctix* | -uts*)
|
||||||
os=-sysv
|
os=-sysv
|
||||||
;;
|
;;
|
||||||
|
-nova*)
|
||||||
|
os=-rtmk-nova
|
||||||
|
;;
|
||||||
-ns2 )
|
-ns2 )
|
||||||
os=-nextstep2
|
os=-nextstep2
|
||||||
;;
|
;;
|
||||||
@@ -1169,6 +1237,12 @@ case $os in
|
|||||||
-*mint | -mint[0-9]* | -*MiNT | -MiNT[0-9]*)
|
-*mint | -mint[0-9]* | -*MiNT | -MiNT[0-9]*)
|
||||||
os=-mint
|
os=-mint
|
||||||
;;
|
;;
|
||||||
|
-aros*)
|
||||||
|
os=-aros
|
||||||
|
;;
|
||||||
|
-kaos*)
|
||||||
|
os=-kaos
|
||||||
|
;;
|
||||||
-none)
|
-none)
|
||||||
;;
|
;;
|
||||||
*)
|
*)
|
||||||
@@ -1200,6 +1274,7 @@ case $basic_machine in
|
|||||||
arm*-semi)
|
arm*-semi)
|
||||||
os=-aout
|
os=-aout
|
||||||
;;
|
;;
|
||||||
|
# This must come before the *-dec entry.
|
||||||
pdp10-*)
|
pdp10-*)
|
||||||
os=-tops20
|
os=-tops20
|
||||||
;;
|
;;
|
||||||
@@ -1230,6 +1305,9 @@ case $basic_machine in
|
|||||||
mips*-*)
|
mips*-*)
|
||||||
os=-elf
|
os=-elf
|
||||||
;;
|
;;
|
||||||
|
or32-*)
|
||||||
|
os=-coff
|
||||||
|
;;
|
||||||
*-tti) # must be before sparc entry or we get the wrong os.
|
*-tti) # must be before sparc entry or we get the wrong os.
|
||||||
os=-sysv3
|
os=-sysv3
|
||||||
;;
|
;;
|
||||||
@@ -1377,7 +1455,7 @@ case $basic_machine in
|
|||||||
-ptx*)
|
-ptx*)
|
||||||
vendor=sequent
|
vendor=sequent
|
||||||
;;
|
;;
|
||||||
-vxsim* | -vxworks*)
|
-vxsim* | -vxworks* | -windiss*)
|
||||||
vendor=wrs
|
vendor=wrs
|
||||||
;;
|
;;
|
||||||
-aux*)
|
-aux*)
|
||||||
18
ares/configure.in
Normal file
18
ares/configure.in
Normal file
@@ -0,0 +1,18 @@
|
|||||||
|
dnl Process this file with autoconf to produce a configure script.
|
||||||
|
AC_INIT(ares_init.c)
|
||||||
|
|
||||||
|
AC_PROG_CC
|
||||||
|
AC_PROG_INSTALL
|
||||||
|
AC_PROG_RANLIB
|
||||||
|
|
||||||
|
AC_CANONICAL_HOST
|
||||||
|
case $host_os in
|
||||||
|
solaris*)
|
||||||
|
AC_DEFINE(ETC_INET)
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
|
||||||
|
AC_SEARCH_LIBS(gethostbyname, nsl)
|
||||||
|
AC_SEARCH_LIBS(socket, socket)
|
||||||
|
|
||||||
|
AC_OUTPUT(Makefile)
|
||||||
250
ares/install-sh
Executable file
250
ares/install-sh
Executable file
@@ -0,0 +1,250 @@
|
|||||||
|
#!/bin/sh
|
||||||
|
#
|
||||||
|
# install - install a program, script, or datafile
|
||||||
|
# This comes from X11R5 (mit/util/scripts/install.sh).
|
||||||
|
#
|
||||||
|
# Copyright 1991 by the Massachusetts Institute of Technology
|
||||||
|
#
|
||||||
|
# Permission to use, copy, modify, distribute, and sell this software and its
|
||||||
|
# documentation for any purpose is hereby granted without fee, provided that
|
||||||
|
# the above copyright notice appear in all copies and that both that
|
||||||
|
# copyright notice and this permission notice appear in supporting
|
||||||
|
# documentation, and that the name of M.I.T. not be used in advertising or
|
||||||
|
# publicity pertaining to distribution of the software without specific,
|
||||||
|
# written prior permission. M.I.T. makes no representations about the
|
||||||
|
# suitability of this software for any purpose. It is provided "as is"
|
||||||
|
# without express or implied warranty.
|
||||||
|
#
|
||||||
|
# Calling this script install-sh is preferred over install.sh, to prevent
|
||||||
|
# `make' implicit rules from creating a file called install from it
|
||||||
|
# when there is no Makefile.
|
||||||
|
#
|
||||||
|
# This script is compatible with the BSD install script, but was written
|
||||||
|
# from scratch. It can only install one file at a time, a restriction
|
||||||
|
# shared with many OS's install programs.
|
||||||
|
|
||||||
|
|
||||||
|
# set DOITPROG to echo to test this script
|
||||||
|
|
||||||
|
# Don't use :- since 4.3BSD and earlier shells don't like it.
|
||||||
|
doit="${DOITPROG-}"
|
||||||
|
|
||||||
|
|
||||||
|
# put in absolute paths if you don't have them in your path; or use env. vars.
|
||||||
|
|
||||||
|
mvprog="${MVPROG-mv}"
|
||||||
|
cpprog="${CPPROG-cp}"
|
||||||
|
chmodprog="${CHMODPROG-chmod}"
|
||||||
|
chownprog="${CHOWNPROG-chown}"
|
||||||
|
chgrpprog="${CHGRPPROG-chgrp}"
|
||||||
|
stripprog="${STRIPPROG-strip}"
|
||||||
|
rmprog="${RMPROG-rm}"
|
||||||
|
mkdirprog="${MKDIRPROG-mkdir}"
|
||||||
|
|
||||||
|
transformbasename=""
|
||||||
|
transform_arg=""
|
||||||
|
instcmd="$mvprog"
|
||||||
|
chmodcmd="$chmodprog 0755"
|
||||||
|
chowncmd=""
|
||||||
|
chgrpcmd=""
|
||||||
|
stripcmd=""
|
||||||
|
rmcmd="$rmprog -f"
|
||||||
|
mvcmd="$mvprog"
|
||||||
|
src=""
|
||||||
|
dst=""
|
||||||
|
dir_arg=""
|
||||||
|
|
||||||
|
while [ x"$1" != x ]; do
|
||||||
|
case $1 in
|
||||||
|
-c) instcmd="$cpprog"
|
||||||
|
shift
|
||||||
|
continue;;
|
||||||
|
|
||||||
|
-d) dir_arg=true
|
||||||
|
shift
|
||||||
|
continue;;
|
||||||
|
|
||||||
|
-m) chmodcmd="$chmodprog $2"
|
||||||
|
shift
|
||||||
|
shift
|
||||||
|
continue;;
|
||||||
|
|
||||||
|
-o) chowncmd="$chownprog $2"
|
||||||
|
shift
|
||||||
|
shift
|
||||||
|
continue;;
|
||||||
|
|
||||||
|
-g) chgrpcmd="$chgrpprog $2"
|
||||||
|
shift
|
||||||
|
shift
|
||||||
|
continue;;
|
||||||
|
|
||||||
|
-s) stripcmd="$stripprog"
|
||||||
|
shift
|
||||||
|
continue;;
|
||||||
|
|
||||||
|
-t=*) transformarg=`echo $1 | sed 's/-t=//'`
|
||||||
|
shift
|
||||||
|
continue;;
|
||||||
|
|
||||||
|
-b=*) transformbasename=`echo $1 | sed 's/-b=//'`
|
||||||
|
shift
|
||||||
|
continue;;
|
||||||
|
|
||||||
|
*) if [ x"$src" = x ]
|
||||||
|
then
|
||||||
|
src=$1
|
||||||
|
else
|
||||||
|
# this colon is to work around a 386BSD /bin/sh bug
|
||||||
|
:
|
||||||
|
dst=$1
|
||||||
|
fi
|
||||||
|
shift
|
||||||
|
continue;;
|
||||||
|
esac
|
||||||
|
done
|
||||||
|
|
||||||
|
if [ x"$src" = x ]
|
||||||
|
then
|
||||||
|
echo "install: no input file specified"
|
||||||
|
exit 1
|
||||||
|
else
|
||||||
|
true
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [ x"$dir_arg" != x ]; then
|
||||||
|
dst=$src
|
||||||
|
src=""
|
||||||
|
|
||||||
|
if [ -d $dst ]; then
|
||||||
|
instcmd=:
|
||||||
|
else
|
||||||
|
instcmd=mkdir
|
||||||
|
fi
|
||||||
|
else
|
||||||
|
|
||||||
|
# Waiting for this to be detected by the "$instcmd $src $dsttmp" command
|
||||||
|
# might cause directories to be created, which would be especially bad
|
||||||
|
# if $src (and thus $dsttmp) contains '*'.
|
||||||
|
|
||||||
|
if [ -f $src -o -d $src ]
|
||||||
|
then
|
||||||
|
true
|
||||||
|
else
|
||||||
|
echo "install: $src does not exist"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [ x"$dst" = x ]
|
||||||
|
then
|
||||||
|
echo "install: no destination specified"
|
||||||
|
exit 1
|
||||||
|
else
|
||||||
|
true
|
||||||
|
fi
|
||||||
|
|
||||||
|
# If destination is a directory, append the input filename; if your system
|
||||||
|
# does not like double slashes in filenames, you may need to add some logic
|
||||||
|
|
||||||
|
if [ -d $dst ]
|
||||||
|
then
|
||||||
|
dst="$dst"/`basename $src`
|
||||||
|
else
|
||||||
|
true
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
|
||||||
|
## this sed command emulates the dirname command
|
||||||
|
dstdir=`echo $dst | sed -e 's,[^/]*$,,;s,/$,,;s,^$,.,'`
|
||||||
|
|
||||||
|
# Make sure that the destination directory exists.
|
||||||
|
# this part is taken from Noah Friedman's mkinstalldirs script
|
||||||
|
|
||||||
|
# Skip lots of stat calls in the usual case.
|
||||||
|
if [ ! -d "$dstdir" ]; then
|
||||||
|
defaultIFS='
|
||||||
|
'
|
||||||
|
IFS="${IFS-${defaultIFS}}"
|
||||||
|
|
||||||
|
oIFS="${IFS}"
|
||||||
|
# Some sh's can't handle IFS=/ for some reason.
|
||||||
|
IFS='%'
|
||||||
|
set - `echo ${dstdir} | sed -e 's@/@%@g' -e 's@^%@/@'`
|
||||||
|
IFS="${oIFS}"
|
||||||
|
|
||||||
|
pathcomp=''
|
||||||
|
|
||||||
|
while [ $# -ne 0 ] ; do
|
||||||
|
pathcomp="${pathcomp}${1}"
|
||||||
|
shift
|
||||||
|
|
||||||
|
if [ ! -d "${pathcomp}" ] ;
|
||||||
|
then
|
||||||
|
$mkdirprog "${pathcomp}"
|
||||||
|
else
|
||||||
|
true
|
||||||
|
fi
|
||||||
|
|
||||||
|
pathcomp="${pathcomp}/"
|
||||||
|
done
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [ x"$dir_arg" != x ]
|
||||||
|
then
|
||||||
|
$doit $instcmd $dst &&
|
||||||
|
|
||||||
|
if [ x"$chowncmd" != x ]; then $doit $chowncmd $dst; else true ; fi &&
|
||||||
|
if [ x"$chgrpcmd" != x ]; then $doit $chgrpcmd $dst; else true ; fi &&
|
||||||
|
if [ x"$stripcmd" != x ]; then $doit $stripcmd $dst; else true ; fi &&
|
||||||
|
if [ x"$chmodcmd" != x ]; then $doit $chmodcmd $dst; else true ; fi
|
||||||
|
else
|
||||||
|
|
||||||
|
# If we're going to rename the final executable, determine the name now.
|
||||||
|
|
||||||
|
if [ x"$transformarg" = x ]
|
||||||
|
then
|
||||||
|
dstfile=`basename $dst`
|
||||||
|
else
|
||||||
|
dstfile=`basename $dst $transformbasename |
|
||||||
|
sed $transformarg`$transformbasename
|
||||||
|
fi
|
||||||
|
|
||||||
|
# don't allow the sed command to completely eliminate the filename
|
||||||
|
|
||||||
|
if [ x"$dstfile" = x ]
|
||||||
|
then
|
||||||
|
dstfile=`basename $dst`
|
||||||
|
else
|
||||||
|
true
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Make a temp file name in the proper directory.
|
||||||
|
|
||||||
|
dsttmp=$dstdir/#inst.$$#
|
||||||
|
|
||||||
|
# Move or copy the file name to the temp name
|
||||||
|
|
||||||
|
$doit $instcmd $src $dsttmp &&
|
||||||
|
|
||||||
|
trap "rm -f ${dsttmp}" 0 &&
|
||||||
|
|
||||||
|
# and set any options; do chmod last to preserve setuid bits
|
||||||
|
|
||||||
|
# If any of these fail, we abort the whole thing. If we want to
|
||||||
|
# ignore errors from any of these, just make sure not to ignore
|
||||||
|
# errors from the above "$doit $instcmd $src $dsttmp" command.
|
||||||
|
|
||||||
|
if [ x"$chowncmd" != x ]; then $doit $chowncmd $dsttmp; else true;fi &&
|
||||||
|
if [ x"$chgrpcmd" != x ]; then $doit $chgrpcmd $dsttmp; else true;fi &&
|
||||||
|
if [ x"$stripcmd" != x ]; then $doit $stripcmd $dsttmp; else true;fi &&
|
||||||
|
if [ x"$chmodcmd" != x ]; then $doit $chmodcmd $dsttmp; else true;fi &&
|
||||||
|
|
||||||
|
# Now rename the file to the real destination.
|
||||||
|
|
||||||
|
$doit $rmcmd -f $dstdir/$dstfile &&
|
||||||
|
$doit $mvcmd $dsttmp $dstdir/$dstfile
|
||||||
|
|
||||||
|
fi &&
|
||||||
|
|
||||||
|
|
||||||
|
exit 0
|
||||||
93
ares/maketgz
Executable file
93
ares/maketgz
Executable file
@@ -0,0 +1,93 @@
|
|||||||
|
#!/usr/bin/env perl
|
||||||
|
|
||||||
|
$version = $ARGV[0];
|
||||||
|
|
||||||
|
if($version eq "") {
|
||||||
|
print "Enter version number!\n";
|
||||||
|
exit;
|
||||||
|
}
|
||||||
|
|
||||||
|
if(!-f "ares.h") {
|
||||||
|
print "run this script in the ares source root dir\n";
|
||||||
|
exit;
|
||||||
|
}
|
||||||
|
|
||||||
|
if(!-f "configure") {
|
||||||
|
`autoconf`;
|
||||||
|
}
|
||||||
|
|
||||||
|
@files=`find . -name FILES`;
|
||||||
|
|
||||||
|
my @entries;
|
||||||
|
|
||||||
|
sub dirpart {
|
||||||
|
my ($file)=@_;
|
||||||
|
my @p=split("/", $file);
|
||||||
|
$p[$#p]=""; # blank the last one
|
||||||
|
my $dir=join("/", @p);
|
||||||
|
|
||||||
|
$dir =~ s/^\.\///; # cut off ./ beginnings
|
||||||
|
|
||||||
|
$dir =~ s/\/$//; # off / trailers
|
||||||
|
|
||||||
|
if(!$dir) {
|
||||||
|
$dir = ".";
|
||||||
|
}
|
||||||
|
|
||||||
|
return $dir;
|
||||||
|
}
|
||||||
|
|
||||||
|
sub add {
|
||||||
|
my ($file)=@_;
|
||||||
|
|
||||||
|
my $dir=dirpart($file);
|
||||||
|
|
||||||
|
open(FILE, "<$file");
|
||||||
|
while(<FILE>) {
|
||||||
|
if($_ =~ /^ *\#/) {
|
||||||
|
next;
|
||||||
|
}
|
||||||
|
chomp;
|
||||||
|
push @entries, "$dir/$_";
|
||||||
|
}
|
||||||
|
close(FILE);
|
||||||
|
}
|
||||||
|
|
||||||
|
for(@files) {
|
||||||
|
chomp;
|
||||||
|
add($_);
|
||||||
|
}
|
||||||
|
|
||||||
|
sub mkalldir {
|
||||||
|
my ($dir) = @_;
|
||||||
|
|
||||||
|
my @parts = split("/", $dir);
|
||||||
|
|
||||||
|
#print "IN: $dir\n";
|
||||||
|
|
||||||
|
my $sub="";
|
||||||
|
for(@parts) {
|
||||||
|
#print "PART: $_\n";
|
||||||
|
|
||||||
|
$sub .= "$_";
|
||||||
|
if($_ eq "") {
|
||||||
|
next;
|
||||||
|
}
|
||||||
|
mkdir($sub, 0777);
|
||||||
|
#print "make $sub\n";
|
||||||
|
$sub .= "/";
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
for(@entries) {
|
||||||
|
my $dir = dirpart("arescurl-$version/$_");
|
||||||
|
# print "Create $dir\n";
|
||||||
|
mkalldir($dir);
|
||||||
|
# print "Copy $_ to $dir\n";
|
||||||
|
`cp -p $_ $dir`;
|
||||||
|
}
|
||||||
|
|
||||||
|
`tar -cf arescurl-$version.tar arescurl-$version`;
|
||||||
|
`gzip -9 arescurl-$version.tar`;
|
||||||
|
`rm -rf arescurl-$version`;
|
||||||
40
ares/mkinstalldirs
Executable file
40
ares/mkinstalldirs
Executable file
@@ -0,0 +1,40 @@
|
|||||||
|
#! /bin/sh
|
||||||
|
# mkinstalldirs --- make directory hierarchy
|
||||||
|
# Author: Noah Friedman <friedman@prep.ai.mit.edu>
|
||||||
|
# Created: 1993-05-16
|
||||||
|
# Public domain
|
||||||
|
|
||||||
|
# $Id$
|
||||||
|
|
||||||
|
errstatus=0
|
||||||
|
|
||||||
|
for file
|
||||||
|
do
|
||||||
|
set fnord `echo ":$file" | sed -ne 's/^:\//#/;s/^://;s/\// /g;s/^#/\//;p'`
|
||||||
|
shift
|
||||||
|
|
||||||
|
pathcomp=
|
||||||
|
for d
|
||||||
|
do
|
||||||
|
pathcomp="$pathcomp$d"
|
||||||
|
case "$pathcomp" in
|
||||||
|
-* ) pathcomp=./$pathcomp ;;
|
||||||
|
esac
|
||||||
|
|
||||||
|
if test ! -d "$pathcomp"; then
|
||||||
|
echo "mkdir $pathcomp" 1>&2
|
||||||
|
|
||||||
|
mkdir "$pathcomp" || lasterr=$?
|
||||||
|
|
||||||
|
if test ! -d "$pathcomp"; then
|
||||||
|
errstatus=$lasterr
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
|
||||||
|
pathcomp="$pathcomp/"
|
||||||
|
done
|
||||||
|
done
|
||||||
|
|
||||||
|
exit $errstatus
|
||||||
|
|
||||||
|
# mkinstalldirs ends here
|
||||||
206
ares/nameser.h
Normal file
206
ares/nameser.h
Normal file
@@ -0,0 +1,206 @@
|
|||||||
|
/* Windows-only header file provided by liren@vivisimo.com to make his Windows
|
||||||
|
port build */
|
||||||
|
|
||||||
|
#include <windows.h>
|
||||||
|
#include <sys/types.h>
|
||||||
|
|
||||||
|
#define MAXHOSTNAMELEN 256
|
||||||
|
|
||||||
|
#define EINPROGRESS WSAEINPROGRESS
|
||||||
|
|
||||||
|
/* Structure for scatter/gather I/O. */
|
||||||
|
struct iovec
|
||||||
|
{
|
||||||
|
void *iov_base; /* Pointer to data. */
|
||||||
|
size_t iov_len; /* Length of data. */
|
||||||
|
};
|
||||||
|
|
||||||
|
#define getpid() _getpid()
|
||||||
|
|
||||||
|
int strcasecmp(const char *a, const char *b);
|
||||||
|
int ares_gettimeofday(struct timeval *tv, struct timezone *tz);
|
||||||
|
#define gettimeofday(tv,tz) ares_gettimeofday(tv,tz)
|
||||||
|
|
||||||
|
#define NS_CMPRSFLGS 0xc0
|
||||||
|
|
||||||
|
|
||||||
|
/* Flag bits indicating name compression. */
|
||||||
|
#define INDIR_MASK NS_CMPRSFLGS
|
||||||
|
|
||||||
|
typedef enum __ns_class {
|
||||||
|
ns_c_invalid = 0, /* Cookie. */
|
||||||
|
ns_c_in = 1, /* Internet. */
|
||||||
|
ns_c_2 = 2, /* unallocated/unsupported. */
|
||||||
|
ns_c_chaos = 3, /* MIT Chaos-net. */
|
||||||
|
ns_c_hs = 4, /* MIT Hesiod. */
|
||||||
|
/* Query class values which do not appear in resource records */
|
||||||
|
ns_c_none = 254, /* for prereq. sections in update requests */
|
||||||
|
ns_c_any = 255, /* Wildcard match. */
|
||||||
|
ns_c_max = 65536
|
||||||
|
} ns_class;
|
||||||
|
|
||||||
|
#define C_IN ns_c_in
|
||||||
|
|
||||||
|
typedef enum __ns_type {
|
||||||
|
ns_t_invalid = 0, /* Cookie. */
|
||||||
|
ns_t_a = 1, /* Host address. */
|
||||||
|
ns_t_ns = 2, /* Authoritative server. */
|
||||||
|
ns_t_md = 3, /* Mail destination. */
|
||||||
|
ns_t_mf = 4, /* Mail forwarder. */
|
||||||
|
ns_t_cname = 5, /* Canonical name. */
|
||||||
|
ns_t_soa = 6, /* Start of authority zone. */
|
||||||
|
ns_t_mb = 7, /* Mailbox domain name. */
|
||||||
|
ns_t_mg = 8, /* Mail group member. */
|
||||||
|
ns_t_mr = 9, /* Mail rename name. */
|
||||||
|
ns_t_null = 10, /* Null resource record. */
|
||||||
|
ns_t_wks = 11, /* Well known service. */
|
||||||
|
ns_t_ptr = 12, /* Domain name pointer. */
|
||||||
|
ns_t_hinfo = 13, /* Host information. */
|
||||||
|
ns_t_minfo = 14, /* Mailbox information. */
|
||||||
|
ns_t_mx = 15, /* Mail routing information. */
|
||||||
|
ns_t_txt = 16, /* Text strings. */
|
||||||
|
ns_t_rp = 17, /* Responsible person. */
|
||||||
|
ns_t_afsdb = 18, /* AFS cell database. */
|
||||||
|
ns_t_x25 = 19, /* X_25 calling address. */
|
||||||
|
ns_t_isdn = 20, /* ISDN calling address. */
|
||||||
|
ns_t_rt = 21, /* Router. */
|
||||||
|
ns_t_nsap = 22, /* NSAP address. */
|
||||||
|
ns_t_nsap_ptr = 23, /* Reverse NSAP lookup (deprecated). */
|
||||||
|
ns_t_sig = 24, /* Security signature. */
|
||||||
|
ns_t_key = 25, /* Security key. */
|
||||||
|
ns_t_px = 26, /* X.400 mail mapping. */
|
||||||
|
ns_t_gpos = 27, /* Geographical position (withdrawn). */
|
||||||
|
ns_t_aaaa = 28, /* Ip6 Address. */
|
||||||
|
ns_t_loc = 29, /* Location Information. */
|
||||||
|
ns_t_nxt = 30, /* Next domain (security). */
|
||||||
|
ns_t_eid = 31, /* Endpoint identifier. */
|
||||||
|
ns_t_nimloc = 32, /* Nimrod Locator. */
|
||||||
|
ns_t_srv = 33, /* Server Selection. */
|
||||||
|
ns_t_atma = 34, /* ATM Address */
|
||||||
|
ns_t_naptr = 35, /* Naming Authority PoinTeR */
|
||||||
|
ns_t_kx = 36, /* Key Exchange */
|
||||||
|
ns_t_cert = 37, /* Certification record */
|
||||||
|
ns_t_a6 = 38, /* IPv6 address (deprecates AAAA) */
|
||||||
|
ns_t_dname = 39, /* Non-terminal DNAME (for IPv6) */
|
||||||
|
ns_t_sink = 40, /* Kitchen sink (experimentatl) */
|
||||||
|
ns_t_opt = 41, /* EDNS0 option (meta-RR) */
|
||||||
|
ns_t_tsig = 250, /* Transaction signature. */
|
||||||
|
ns_t_ixfr = 251, /* Incremental zone transfer. */
|
||||||
|
ns_t_axfr = 252, /* Transfer zone of authority. */
|
||||||
|
ns_t_mailb = 253, /* Transfer mailbox records. */
|
||||||
|
ns_t_maila = 254, /* Transfer mail agent records. */
|
||||||
|
ns_t_any = 255, /* Wildcard match. */
|
||||||
|
ns_t_zxfr = 256, /* BIND-specific, nonstandard. */
|
||||||
|
ns_t_max = 65536
|
||||||
|
} ns_type;
|
||||||
|
|
||||||
|
#define T_PTR ns_t_ptr
|
||||||
|
#define T_A ns_t_a
|
||||||
|
|
||||||
|
|
||||||
|
#define NS_DEFAULTPORT 53 /* For both TCP and UDP. */
|
||||||
|
#define NAMESERVER_PORT NS_DEFAULTPORT
|
||||||
|
|
||||||
|
#define NS_HFIXEDSZ 12 /* #/bytes of fixed data in header */
|
||||||
|
#define HFIXEDSZ NS_HFIXEDSZ
|
||||||
|
|
||||||
|
#define NS_QFIXEDSZ 4 /* #/bytes of fixed data in query */
|
||||||
|
#define QFIXEDSZ NS_QFIXEDSZ
|
||||||
|
|
||||||
|
typedef enum __ns_opcode {
|
||||||
|
ns_o_query = 0, /* Standard query. */
|
||||||
|
ns_o_iquery = 1, /* Inverse query (deprecated/unsupported). */
|
||||||
|
ns_o_status = 2, /* Name server status query (unsupported). */
|
||||||
|
/* Opcode 3 is undefined/reserved. */
|
||||||
|
ns_o_notify = 4, /* Zone change notification. */
|
||||||
|
ns_o_update = 5, /* Zone update message. */
|
||||||
|
ns_o_max = 6
|
||||||
|
} ns_opcode;
|
||||||
|
|
||||||
|
#define QUERY ns_o_query
|
||||||
|
|
||||||
|
#define NS_MAXLABEL 63
|
||||||
|
#define MAXLABEL NS_MAXLABEL
|
||||||
|
|
||||||
|
#define NS_RRFIXEDSZ 10 /* #/bytes of fixed data in r record */
|
||||||
|
#define RRFIXEDSZ NS_RRFIXEDSZ
|
||||||
|
|
||||||
|
#define T_CNAME ns_t_cname
|
||||||
|
|
||||||
|
|
||||||
|
#define NS_PACKETSZ 512 /* maximum packet size */
|
||||||
|
#define PACKETSZ NS_PACKETSZ
|
||||||
|
|
||||||
|
typedef enum __ns_rcode {
|
||||||
|
ns_r_noerror = 0, /* No error occurred. */
|
||||||
|
ns_r_formerr = 1, /* Format error. */
|
||||||
|
ns_r_servfail = 2, /* Server failure. */
|
||||||
|
ns_r_nxdomain = 3, /* Name error. */
|
||||||
|
ns_r_notimpl = 4, /* Unimplemented. */
|
||||||
|
ns_r_refused = 5, /* Operation refused. */
|
||||||
|
/* these are for BIND_UPDATE */
|
||||||
|
ns_r_yxdomain = 6, /* Name exists */
|
||||||
|
ns_r_yxrrset = 7, /* RRset exists */
|
||||||
|
ns_r_nxrrset = 8, /* RRset does not exist */
|
||||||
|
ns_r_notauth = 9, /* Not authoritative for zone */
|
||||||
|
ns_r_notzone = 10, /* Zone of record different from zone section */
|
||||||
|
ns_r_max = 11,
|
||||||
|
/* The following are TSIG extended errors */
|
||||||
|
ns_r_badsig = 16,
|
||||||
|
ns_r_badkey = 17,
|
||||||
|
ns_r_badtime = 18
|
||||||
|
} ns_rcode;
|
||||||
|
|
||||||
|
#define SERVFAIL ns_r_servfail
|
||||||
|
#define NOTIMP ns_r_notimpl
|
||||||
|
#define REFUSED ns_r_refused
|
||||||
|
#define NOERROR ns_r_noerror
|
||||||
|
#define FORMERR ns_r_formerr
|
||||||
|
#define NXDOMAIN ns_r_nxdomain
|
||||||
|
|
||||||
|
#define C_CHAOS ns_c_chaos
|
||||||
|
#define C_HS ns_c_hs
|
||||||
|
#define C_NONE ns_c_none
|
||||||
|
#define C_ANY ns_c_any
|
||||||
|
|
||||||
|
#define T_A ns_t_a
|
||||||
|
#define T_NS ns_t_ns
|
||||||
|
#define T_MD ns_t_md
|
||||||
|
#define T_MF ns_t_mf
|
||||||
|
#define T_CNAME ns_t_cname
|
||||||
|
#define T_SOA ns_t_soa
|
||||||
|
#define T_MB ns_t_mb
|
||||||
|
#define T_MG ns_t_mg
|
||||||
|
#define T_MR ns_t_mr
|
||||||
|
#define T_NULL ns_t_null
|
||||||
|
#define T_WKS ns_t_wks
|
||||||
|
#define T_PTR ns_t_ptr
|
||||||
|
#define T_HINFO ns_t_hinfo
|
||||||
|
#define T_MINFO ns_t_minfo
|
||||||
|
#define T_MX ns_t_mx
|
||||||
|
#define T_TXT ns_t_txt
|
||||||
|
#define T_RP ns_t_rp
|
||||||
|
#define T_AFSDB ns_t_afsdb
|
||||||
|
#define T_X25 ns_t_x25
|
||||||
|
#define T_ISDN ns_t_isdn
|
||||||
|
#define T_RT ns_t_rt
|
||||||
|
#define T_NSAP ns_t_nsap
|
||||||
|
#define T_NSAP_PTR ns_t_nsap_ptr
|
||||||
|
#define T_SIG ns_t_sig
|
||||||
|
#define T_KEY ns_t_key
|
||||||
|
#define T_PX ns_t_px
|
||||||
|
#define T_GPOS ns_t_gpos
|
||||||
|
#define T_AAAA ns_t_aaaa
|
||||||
|
#define T_LOC ns_t_loc
|
||||||
|
#define T_NXT ns_t_nxt
|
||||||
|
#define T_EID ns_t_eid
|
||||||
|
#define T_NIMLOC ns_t_nimloc
|
||||||
|
#define T_SRV ns_t_srv
|
||||||
|
#define T_ATMA ns_t_atma
|
||||||
|
#define T_NAPTR ns_t_naptr
|
||||||
|
#define T_TSIG ns_t_tsig
|
||||||
|
#define T_IXFR ns_t_ixfr
|
||||||
|
#define T_AXFR ns_t_axfr
|
||||||
|
#define T_MAILB ns_t_mailb
|
||||||
|
#define T_MAILA ns_t_maila
|
||||||
|
#define T_ANY ns_t_any
|
||||||
2
ares/vc/adig/adig.dep
Normal file
2
ares/vc/adig/adig.dep
Normal file
@@ -0,0 +1,2 @@
|
|||||||
|
# Microsoft Developer Studio Generated Dependency File, included by adig.mak
|
||||||
|
|
||||||
106
ares/vc/adig/adig.dsp
Normal file
106
ares/vc/adig/adig.dsp
Normal file
@@ -0,0 +1,106 @@
|
|||||||
|
# Microsoft Developer Studio Project File - Name="adig" - Package Owner=<4>
|
||||||
|
# Microsoft Developer Studio Generated Build File, Format Version 6.00
|
||||||
|
# ** DO NOT EDIT **
|
||||||
|
|
||||||
|
# TARGTYPE "Win32 (x86) Console Application" 0x0103
|
||||||
|
|
||||||
|
CFG=adig - Win32 Debug
|
||||||
|
!MESSAGE This is not a valid makefile. To build this project using NMAKE,
|
||||||
|
!MESSAGE use the Export Makefile command and run
|
||||||
|
!MESSAGE
|
||||||
|
!MESSAGE NMAKE /f "adig.mak".
|
||||||
|
!MESSAGE
|
||||||
|
!MESSAGE You can specify a configuration when running NMAKE
|
||||||
|
!MESSAGE by defining the macro CFG on the command line. For example:
|
||||||
|
!MESSAGE
|
||||||
|
!MESSAGE NMAKE /f "adig.mak" CFG="adig - Win32 Debug"
|
||||||
|
!MESSAGE
|
||||||
|
!MESSAGE Possible choices for configuration are:
|
||||||
|
!MESSAGE
|
||||||
|
!MESSAGE "adig - Win32 Release" (based on "Win32 (x86) Console Application")
|
||||||
|
!MESSAGE "adig - Win32 Debug" (based on "Win32 (x86) Console Application")
|
||||||
|
!MESSAGE
|
||||||
|
|
||||||
|
# Begin Project
|
||||||
|
# PROP AllowPerConfigDependencies 0
|
||||||
|
# PROP Scc_ProjName ""
|
||||||
|
# PROP Scc_LocalPath ""
|
||||||
|
CPP=cl.exe
|
||||||
|
RSC=rc.exe
|
||||||
|
|
||||||
|
!IF "$(CFG)" == "adig - Win32 Release"
|
||||||
|
|
||||||
|
# PROP BASE Use_MFC 0
|
||||||
|
# PROP BASE Use_Debug_Libraries 0
|
||||||
|
# PROP BASE Output_Dir "Release"
|
||||||
|
# PROP BASE Intermediate_Dir "Release"
|
||||||
|
# PROP BASE Target_Dir ""
|
||||||
|
# PROP Use_MFC 0
|
||||||
|
# PROP Use_Debug_Libraries 0
|
||||||
|
# PROP Output_Dir "Release"
|
||||||
|
# PROP Intermediate_Dir "Release"
|
||||||
|
# PROP Ignore_Export_Lib 0
|
||||||
|
# PROP Target_Dir ""
|
||||||
|
# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c
|
||||||
|
# ADD CPP /nologo /MD /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c
|
||||||
|
# ADD BASE RSC /l 0x409 /d "NDEBUG"
|
||||||
|
# ADD RSC /l 0x409 /d "NDEBUG"
|
||||||
|
BSC32=bscmake.exe
|
||||||
|
# ADD BASE BSC32 /nologo
|
||||||
|
# ADD BSC32 /nologo
|
||||||
|
LINK32=link.exe
|
||||||
|
# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386
|
||||||
|
# ADD LINK32 wsock32.lib areslib.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 /libpath:"..\areslib\Release"
|
||||||
|
|
||||||
|
!ELSEIF "$(CFG)" == "adig - Win32 Debug"
|
||||||
|
|
||||||
|
# PROP BASE Use_MFC 0
|
||||||
|
# PROP BASE Use_Debug_Libraries 1
|
||||||
|
# PROP BASE Output_Dir "Debug"
|
||||||
|
# PROP BASE Intermediate_Dir "Debug"
|
||||||
|
# PROP BASE Target_Dir ""
|
||||||
|
# PROP Use_MFC 0
|
||||||
|
# PROP Use_Debug_Libraries 1
|
||||||
|
# PROP Output_Dir "Debug"
|
||||||
|
# PROP Intermediate_Dir "Debug"
|
||||||
|
# PROP Ignore_Export_Lib 0
|
||||||
|
# PROP Target_Dir ""
|
||||||
|
# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c
|
||||||
|
# ADD CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c
|
||||||
|
# ADD BASE RSC /l 0x409 /d "_DEBUG"
|
||||||
|
# ADD RSC /l 0x409 /d "_DEBUG"
|
||||||
|
BSC32=bscmake.exe
|
||||||
|
# ADD BASE BSC32 /nologo
|
||||||
|
# ADD BSC32 /nologo
|
||||||
|
LINK32=link.exe
|
||||||
|
# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept
|
||||||
|
# ADD LINK32 wsock32.lib areslib.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept /libpath:"..\areslib\Debug"
|
||||||
|
|
||||||
|
!ENDIF
|
||||||
|
|
||||||
|
# Begin Target
|
||||||
|
|
||||||
|
# Name "adig - Win32 Release"
|
||||||
|
# Name "adig - Win32 Debug"
|
||||||
|
# Begin Group "Source Files"
|
||||||
|
|
||||||
|
# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat"
|
||||||
|
# Begin Source File
|
||||||
|
|
||||||
|
SOURCE=..\..\adig.c
|
||||||
|
# End Source File
|
||||||
|
# Begin Source File
|
||||||
|
|
||||||
|
SOURCE=..\..\getopt.c
|
||||||
|
# End Source File
|
||||||
|
# End Group
|
||||||
|
# Begin Group "Header Files"
|
||||||
|
|
||||||
|
# PROP Default_Filter "h;hpp;hxx;hm;inl"
|
||||||
|
# End Group
|
||||||
|
# Begin Group "Resource Files"
|
||||||
|
|
||||||
|
# PROP Default_Filter "ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe"
|
||||||
|
# End Group
|
||||||
|
# End Target
|
||||||
|
# End Project
|
||||||
213
ares/vc/adig/adig.mak
Normal file
213
ares/vc/adig/adig.mak
Normal file
@@ -0,0 +1,213 @@
|
|||||||
|
# Microsoft Developer Studio Generated NMAKE File, Based on adig.dsp
|
||||||
|
!IF "$(CFG)" == ""
|
||||||
|
CFG=adig - Win32 Debug
|
||||||
|
!MESSAGE No configuration specified. Defaulting to adig - Win32 Debug.
|
||||||
|
!ENDIF
|
||||||
|
|
||||||
|
!IF "$(CFG)" != "adig - Win32 Release" && "$(CFG)" != "adig - Win32 Debug"
|
||||||
|
!MESSAGE Invalid configuration "$(CFG)" specified.
|
||||||
|
!MESSAGE You can specify a configuration when running NMAKE
|
||||||
|
!MESSAGE by defining the macro CFG on the command line. For example:
|
||||||
|
!MESSAGE
|
||||||
|
!MESSAGE NMAKE /f "adig.mak" CFG="adig - Win32 Debug"
|
||||||
|
!MESSAGE
|
||||||
|
!MESSAGE Possible choices for configuration are:
|
||||||
|
!MESSAGE
|
||||||
|
!MESSAGE "adig - Win32 Release" (based on "Win32 (x86) Console Application")
|
||||||
|
!MESSAGE "adig - Win32 Debug" (based on "Win32 (x86) Console Application")
|
||||||
|
!MESSAGE
|
||||||
|
!ERROR An invalid configuration is specified.
|
||||||
|
!ENDIF
|
||||||
|
|
||||||
|
!IF "$(OS)" == "Windows_NT"
|
||||||
|
NULL=
|
||||||
|
!ELSE
|
||||||
|
NULL=nul
|
||||||
|
!ENDIF
|
||||||
|
|
||||||
|
CPP=cl.exe
|
||||||
|
RSC=rc.exe
|
||||||
|
|
||||||
|
!IF "$(CFG)" == "adig - Win32 Release"
|
||||||
|
|
||||||
|
OUTDIR=.\Release
|
||||||
|
INTDIR=.\Release
|
||||||
|
# Begin Custom Macros
|
||||||
|
OutDir=.\Release
|
||||||
|
# End Custom Macros
|
||||||
|
|
||||||
|
!IF "$(RECURSE)" == "0"
|
||||||
|
|
||||||
|
ALL : "$(OUTDIR)\adig.exe"
|
||||||
|
|
||||||
|
!ELSE
|
||||||
|
|
||||||
|
ALL : "areslib - Win32 Release" "$(OUTDIR)\adig.exe"
|
||||||
|
|
||||||
|
!ENDIF
|
||||||
|
|
||||||
|
!IF "$(RECURSE)" == "1"
|
||||||
|
CLEAN :"areslib - Win32 ReleaseCLEAN"
|
||||||
|
!ELSE
|
||||||
|
CLEAN :
|
||||||
|
!ENDIF
|
||||||
|
-@erase "$(INTDIR)\adig.obj"
|
||||||
|
-@erase "$(INTDIR)\getopt.obj"
|
||||||
|
-@erase "$(INTDIR)\vc60.idb"
|
||||||
|
-@erase "$(OUTDIR)\adig.exe"
|
||||||
|
|
||||||
|
"$(OUTDIR)" :
|
||||||
|
if not exist "$(OUTDIR)/$(NULL)" mkdir "$(OUTDIR)"
|
||||||
|
|
||||||
|
CPP_PROJ=/nologo /MD /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /Fp"$(INTDIR)\adig.pch" /YX /Fo"$(INTDIR)\\" /Fd"$(INTDIR)\\" /FD /c
|
||||||
|
BSC32=bscmake.exe
|
||||||
|
BSC32_FLAGS=/nologo /o"$(OUTDIR)\adig.bsc"
|
||||||
|
BSC32_SBRS= \
|
||||||
|
|
||||||
|
LINK32=link.exe
|
||||||
|
LINK32_FLAGS=wsock32.lib areslib.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /incremental:no /pdb:"$(OUTDIR)\adig.pdb" /machine:I386 /out:"$(OUTDIR)\adig.exe" /libpath:"..\areslib\Release"
|
||||||
|
LINK32_OBJS= \
|
||||||
|
"$(INTDIR)\adig.obj" \
|
||||||
|
"$(INTDIR)\getopt.obj" \
|
||||||
|
"..\areslib\Release\areslib.lib"
|
||||||
|
|
||||||
|
"$(OUTDIR)\adig.exe" : "$(OUTDIR)" $(DEF_FILE) $(LINK32_OBJS)
|
||||||
|
$(LINK32) @<<
|
||||||
|
$(LINK32_FLAGS) $(LINK32_OBJS)
|
||||||
|
<<
|
||||||
|
|
||||||
|
!ELSEIF "$(CFG)" == "adig - Win32 Debug"
|
||||||
|
|
||||||
|
OUTDIR=.\Debug
|
||||||
|
INTDIR=.\Debug
|
||||||
|
# Begin Custom Macros
|
||||||
|
OutDir=.\Debug
|
||||||
|
# End Custom Macros
|
||||||
|
|
||||||
|
!IF "$(RECURSE)" == "0"
|
||||||
|
|
||||||
|
ALL : "$(OUTDIR)\adig.exe"
|
||||||
|
|
||||||
|
!ELSE
|
||||||
|
|
||||||
|
ALL : "areslib - Win32 Debug" "$(OUTDIR)\adig.exe"
|
||||||
|
|
||||||
|
!ENDIF
|
||||||
|
|
||||||
|
!IF "$(RECURSE)" == "1"
|
||||||
|
CLEAN :"areslib - Win32 DebugCLEAN"
|
||||||
|
!ELSE
|
||||||
|
CLEAN :
|
||||||
|
!ENDIF
|
||||||
|
-@erase "$(INTDIR)\adig.obj"
|
||||||
|
-@erase "$(INTDIR)\getopt.obj"
|
||||||
|
-@erase "$(INTDIR)\vc60.idb"
|
||||||
|
-@erase "$(INTDIR)\vc60.pdb"
|
||||||
|
-@erase "$(OUTDIR)\adig.exe"
|
||||||
|
-@erase "$(OUTDIR)\adig.ilk"
|
||||||
|
-@erase "$(OUTDIR)\adig.pdb"
|
||||||
|
|
||||||
|
"$(OUTDIR)" :
|
||||||
|
if not exist "$(OUTDIR)/$(NULL)" mkdir "$(OUTDIR)"
|
||||||
|
|
||||||
|
CPP_PROJ=/nologo /MLd /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /Fp"$(INTDIR)\adig.pch" /YX /Fo"$(INTDIR)\\" /Fd"$(INTDIR)\\" /FD /GZ /c
|
||||||
|
BSC32=bscmake.exe
|
||||||
|
BSC32_FLAGS=/nologo /o"$(OUTDIR)\adig.bsc"
|
||||||
|
BSC32_SBRS= \
|
||||||
|
|
||||||
|
LINK32=link.exe
|
||||||
|
LINK32_FLAGS=wsock32.lib areslib.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /incremental:yes /pdb:"$(OUTDIR)\adig.pdb" /debug /machine:I386 /out:"$(OUTDIR)\adig.exe" /pdbtype:sept /libpath:"..\areslib\Debug"
|
||||||
|
LINK32_OBJS= \
|
||||||
|
"$(INTDIR)\adig.obj" \
|
||||||
|
"$(INTDIR)\getopt.obj" \
|
||||||
|
"..\areslib\Debug\areslib.lib"
|
||||||
|
|
||||||
|
"$(OUTDIR)\adig.exe" : "$(OUTDIR)" $(DEF_FILE) $(LINK32_OBJS)
|
||||||
|
$(LINK32) @<<
|
||||||
|
$(LINK32_FLAGS) $(LINK32_OBJS)
|
||||||
|
<<
|
||||||
|
|
||||||
|
!ENDIF
|
||||||
|
|
||||||
|
.c{$(INTDIR)}.obj::
|
||||||
|
$(CPP) @<<
|
||||||
|
$(CPP_PROJ) $<
|
||||||
|
<<
|
||||||
|
|
||||||
|
.cpp{$(INTDIR)}.obj::
|
||||||
|
$(CPP) @<<
|
||||||
|
$(CPP_PROJ) $<
|
||||||
|
<<
|
||||||
|
|
||||||
|
.cxx{$(INTDIR)}.obj::
|
||||||
|
$(CPP) @<<
|
||||||
|
$(CPP_PROJ) $<
|
||||||
|
<<
|
||||||
|
|
||||||
|
.c{$(INTDIR)}.sbr::
|
||||||
|
$(CPP) @<<
|
||||||
|
$(CPP_PROJ) $<
|
||||||
|
<<
|
||||||
|
|
||||||
|
.cpp{$(INTDIR)}.sbr::
|
||||||
|
$(CPP) @<<
|
||||||
|
$(CPP_PROJ) $<
|
||||||
|
<<
|
||||||
|
|
||||||
|
.cxx{$(INTDIR)}.sbr::
|
||||||
|
$(CPP) @<<
|
||||||
|
$(CPP_PROJ) $<
|
||||||
|
<<
|
||||||
|
|
||||||
|
|
||||||
|
!IF "$(NO_EXTERNAL_DEPS)" != "1"
|
||||||
|
!IF EXISTS("adig.dep")
|
||||||
|
!INCLUDE "adig.dep"
|
||||||
|
!ELSE
|
||||||
|
!MESSAGE Warning: cannot find "adig.dep"
|
||||||
|
!ENDIF
|
||||||
|
!ENDIF
|
||||||
|
|
||||||
|
|
||||||
|
!IF "$(CFG)" == "adig - Win32 Release" || "$(CFG)" == "adig - Win32 Debug"
|
||||||
|
SOURCE=..\..\adig.c
|
||||||
|
|
||||||
|
"$(INTDIR)\adig.obj" : $(SOURCE) "$(INTDIR)"
|
||||||
|
$(CPP) $(CPP_PROJ) $(SOURCE)
|
||||||
|
|
||||||
|
|
||||||
|
SOURCE=..\..\getopt.c
|
||||||
|
|
||||||
|
"$(INTDIR)\getopt.obj" : $(SOURCE) "$(INTDIR)"
|
||||||
|
$(CPP) $(CPP_PROJ) $(SOURCE)
|
||||||
|
|
||||||
|
|
||||||
|
!IF "$(CFG)" == "adig - Win32 Release"
|
||||||
|
|
||||||
|
"areslib - Win32 Release" :
|
||||||
|
cd "\ARES-1.1.1\vc\areslib"
|
||||||
|
$(MAKE) /$(MAKEFLAGS) /F ".\areslib.mak" CFG="areslib - Win32 Release"
|
||||||
|
cd "..\adig"
|
||||||
|
|
||||||
|
"areslib - Win32 ReleaseCLEAN" :
|
||||||
|
cd "\ARES-1.1.1\vc\areslib"
|
||||||
|
$(MAKE) /$(MAKEFLAGS) /F ".\areslib.mak" CFG="areslib - Win32 Release" RECURSE=1 CLEAN
|
||||||
|
cd "..\adig"
|
||||||
|
|
||||||
|
!ELSEIF "$(CFG)" == "adig - Win32 Debug"
|
||||||
|
|
||||||
|
"areslib - Win32 Debug" :
|
||||||
|
cd "\ARES-1.1.1\vc\areslib"
|
||||||
|
$(MAKE) /$(MAKEFLAGS) /F ".\areslib.mak" CFG="areslib - Win32 Debug"
|
||||||
|
cd "..\adig"
|
||||||
|
|
||||||
|
"areslib - Win32 DebugCLEAN" :
|
||||||
|
cd "\ARES-1.1.1\vc\areslib"
|
||||||
|
$(MAKE) /$(MAKEFLAGS) /F ".\areslib.mak" CFG="areslib - Win32 Debug" RECURSE=1 CLEAN
|
||||||
|
cd "..\adig"
|
||||||
|
|
||||||
|
!ENDIF
|
||||||
|
|
||||||
|
|
||||||
|
!ENDIF
|
||||||
|
|
||||||
77
ares/vc/adig/adig.plg
Normal file
77
ares/vc/adig/adig.plg
Normal file
@@ -0,0 +1,77 @@
|
|||||||
|
<html>
|
||||||
|
<body>
|
||||||
|
<pre>
|
||||||
|
<h1>Build Log</h1>
|
||||||
|
<h3>
|
||||||
|
--------------------Configuration: areslib - Win32 Release--------------------
|
||||||
|
</h3>
|
||||||
|
<h3>Command Lines</h3>
|
||||||
|
Creating temporary file "C:\DOCUME~1\liren\LOCALS~1\Temp\RSP615A.tmp" with contents
|
||||||
|
[
|
||||||
|
/nologo /MD /W3 /GX /O2 /I "..\.." /D "WIN32" /D "NDEBUG" /D "_MBCS" /D "_LIB" /Fp"Release/areslib.pch" /YX /Fo"Release/" /Fd"Release/" /FD /c
|
||||||
|
"Z:\ARES-1.1.1\ares_gethostbyname.c"
|
||||||
|
"Z:\ARES-1.1.1\ares_init.c"
|
||||||
|
]
|
||||||
|
Creating command line "cl.exe @C:\DOCUME~1\liren\LOCALS~1\Temp\RSP615A.tmp"
|
||||||
|
Creating temporary file "C:\DOCUME~1\liren\LOCALS~1\Temp\RSP615B.tmp" with contents
|
||||||
|
[
|
||||||
|
/nologo /out:"Release\areslib.lib"
|
||||||
|
".\Release\ares__close_sockets.obj"
|
||||||
|
".\Release\ares__get_hostent.obj"
|
||||||
|
".\Release\ares__read_line.obj"
|
||||||
|
".\Release\ares_destroy.obj"
|
||||||
|
".\Release\ares_expand_name.obj"
|
||||||
|
".\Release\ares_fds.obj"
|
||||||
|
".\Release\ares_free_errmem.obj"
|
||||||
|
".\Release\ares_free_hostent.obj"
|
||||||
|
".\Release\ares_free_string.obj"
|
||||||
|
".\Release\ares_gethostbyaddr.obj"
|
||||||
|
".\Release\ares_gethostbyname.obj"
|
||||||
|
".\Release\ares_init.obj"
|
||||||
|
".\Release\ares_mkquery.obj"
|
||||||
|
".\Release\ares_parse_a_reply.obj"
|
||||||
|
".\Release\ares_parse_ptr_reply.obj"
|
||||||
|
".\Release\ares_process.obj"
|
||||||
|
".\Release\ares_query.obj"
|
||||||
|
".\Release\ares_search.obj"
|
||||||
|
".\Release\ares_send.obj"
|
||||||
|
".\Release\ares_strerror.obj"
|
||||||
|
".\Release\ares_timeout.obj"
|
||||||
|
".\Release\windows_port.obj"
|
||||||
|
]
|
||||||
|
Creating command line "link.exe -lib @C:\DOCUME~1\liren\LOCALS~1\Temp\RSP615B.tmp"
|
||||||
|
<h3>Output Window</h3>
|
||||||
|
Compiling...
|
||||||
|
ares_gethostbyname.c
|
||||||
|
Z:\ARES-1.1.1\nameser.h(153) : warning C4005: 'NOERROR' : macro redefinition
|
||||||
|
C:\Program Files\Microsoft Visual Studio\VC98\INCLUDE\winerror.h(8022) : see previous definition of 'NOERROR'
|
||||||
|
ares_init.c
|
||||||
|
Z:\ARES-1.1.1\nameser.h(153) : warning C4005: 'NOERROR' : macro redefinition
|
||||||
|
C:\Program Files\Microsoft Visual Studio\VC98\INCLUDE\winerror.h(8022) : see previous definition of 'NOERROR'
|
||||||
|
Z:\ARES-1.1.1\ares_init.c(141) : warning C4013: '_getpid' undefined; assuming extern returning int
|
||||||
|
Z:\ARES-1.1.1\ares_init.c(236) : warning C4101: 'p' : unreferenced local variable
|
||||||
|
Z:\ARES-1.1.1\ares_init.c(237) : warning C4101: 'linesize' : unreferenced local variable
|
||||||
|
Z:\ARES-1.1.1\ares_init.c(235) : warning C4101: 'fp' : unreferenced local variable
|
||||||
|
Creating library...
|
||||||
|
<h3>
|
||||||
|
--------------------Configuration: adig - Win32 Release--------------------
|
||||||
|
</h3>
|
||||||
|
<h3>Command Lines</h3>
|
||||||
|
Creating temporary file "C:\DOCUME~1\liren\LOCALS~1\Temp\RSP615C.tmp" with contents
|
||||||
|
[
|
||||||
|
wsock32.lib areslib.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /incremental:no /pdb:"Release/adig.pdb" /machine:I386 /out:"Release/adig.exe" /libpath:"..\areslib\Release"
|
||||||
|
".\Release\adig.obj"
|
||||||
|
".\Release\getopt.obj"
|
||||||
|
"\ARES-1.1.1\vc\areslib\Release\areslib.lib"
|
||||||
|
]
|
||||||
|
Creating command line "link.exe @C:\DOCUME~1\liren\LOCALS~1\Temp\RSP615C.tmp"
|
||||||
|
<h3>Output Window</h3>
|
||||||
|
Linking...
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<h3>Results</h3>
|
||||||
|
adig.exe - 0 error(s), 6 warning(s)
|
||||||
|
</pre>
|
||||||
|
</body>
|
||||||
|
</html>
|
||||||
2
ares/vc/ahost/ahost.dep
Normal file
2
ares/vc/ahost/ahost.dep
Normal file
@@ -0,0 +1,2 @@
|
|||||||
|
# Microsoft Developer Studio Generated Dependency File, included by ahost.mak
|
||||||
|
|
||||||
100
ares/vc/ahost/ahost.dsp
Normal file
100
ares/vc/ahost/ahost.dsp
Normal file
@@ -0,0 +1,100 @@
|
|||||||
|
# Microsoft Developer Studio Project File - Name="ahost" - Package Owner=<4>
|
||||||
|
# Microsoft Developer Studio Generated Build File, Format Version 6.00
|
||||||
|
# ** DO NOT EDIT **
|
||||||
|
|
||||||
|
# TARGTYPE "Win32 (x86) Console Application" 0x0103
|
||||||
|
|
||||||
|
CFG=ahost - Win32 Debug
|
||||||
|
!MESSAGE This is not a valid makefile. To build this project using NMAKE,
|
||||||
|
!MESSAGE use the Export Makefile command and run
|
||||||
|
!MESSAGE
|
||||||
|
!MESSAGE NMAKE /f "ahost.mak".
|
||||||
|
!MESSAGE
|
||||||
|
!MESSAGE You can specify a configuration when running NMAKE
|
||||||
|
!MESSAGE by defining the macro CFG on the command line. For example:
|
||||||
|
!MESSAGE
|
||||||
|
!MESSAGE NMAKE /f "ahost.mak" CFG="ahost - Win32 Debug"
|
||||||
|
!MESSAGE
|
||||||
|
!MESSAGE Possible choices for configuration are:
|
||||||
|
!MESSAGE
|
||||||
|
!MESSAGE "ahost - Win32 Release" (based on "Win32 (x86) Console Application")
|
||||||
|
!MESSAGE "ahost - Win32 Debug" (based on "Win32 (x86) Console Application")
|
||||||
|
!MESSAGE
|
||||||
|
|
||||||
|
# Begin Project
|
||||||
|
# PROP AllowPerConfigDependencies 0
|
||||||
|
# PROP Scc_ProjName ""
|
||||||
|
# PROP Scc_LocalPath ""
|
||||||
|
CPP=cl.exe
|
||||||
|
RSC=rc.exe
|
||||||
|
|
||||||
|
!IF "$(CFG)" == "ahost - Win32 Release"
|
||||||
|
|
||||||
|
# PROP BASE Use_MFC 0
|
||||||
|
# PROP BASE Use_Debug_Libraries 0
|
||||||
|
# PROP BASE Output_Dir "Release"
|
||||||
|
# PROP BASE Intermediate_Dir "Release"
|
||||||
|
# PROP BASE Target_Dir ""
|
||||||
|
# PROP Use_MFC 0
|
||||||
|
# PROP Use_Debug_Libraries 0
|
||||||
|
# PROP Output_Dir "Release"
|
||||||
|
# PROP Intermediate_Dir "Release"
|
||||||
|
# PROP Target_Dir ""
|
||||||
|
# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c
|
||||||
|
# ADD CPP /nologo /MD /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c
|
||||||
|
# ADD BASE RSC /l 0x409 /d "NDEBUG"
|
||||||
|
# ADD RSC /l 0x409 /d "NDEBUG"
|
||||||
|
BSC32=bscmake.exe
|
||||||
|
# ADD BASE BSC32 /nologo
|
||||||
|
# ADD BSC32 /nologo
|
||||||
|
LINK32=link.exe
|
||||||
|
# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386
|
||||||
|
# ADD LINK32 wsock32.lib areslib.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 /libpath:"..\areslib\Release"
|
||||||
|
|
||||||
|
!ELSEIF "$(CFG)" == "ahost - Win32 Debug"
|
||||||
|
|
||||||
|
# PROP BASE Use_MFC 0
|
||||||
|
# PROP BASE Use_Debug_Libraries 1
|
||||||
|
# PROP BASE Output_Dir "Debug"
|
||||||
|
# PROP BASE Intermediate_Dir "Debug"
|
||||||
|
# PROP BASE Target_Dir ""
|
||||||
|
# PROP Use_MFC 0
|
||||||
|
# PROP Use_Debug_Libraries 1
|
||||||
|
# PROP Output_Dir "Debug"
|
||||||
|
# PROP Intermediate_Dir "Debug"
|
||||||
|
# PROP Target_Dir ""
|
||||||
|
# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c
|
||||||
|
# ADD CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /FR /YX /FD /GZ /c
|
||||||
|
# ADD BASE RSC /l 0x409 /d "_DEBUG"
|
||||||
|
# ADD RSC /l 0x409 /d "_DEBUG"
|
||||||
|
BSC32=bscmake.exe
|
||||||
|
# ADD BASE BSC32 /nologo
|
||||||
|
# ADD BSC32 /nologo
|
||||||
|
LINK32=link.exe
|
||||||
|
# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept
|
||||||
|
# ADD LINK32 wsock32.lib areslib.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept /libpath:"..\areslib\Debug"
|
||||||
|
|
||||||
|
!ENDIF
|
||||||
|
|
||||||
|
# Begin Target
|
||||||
|
|
||||||
|
# Name "ahost - Win32 Release"
|
||||||
|
# Name "ahost - Win32 Debug"
|
||||||
|
# Begin Group "Source Files"
|
||||||
|
|
||||||
|
# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat"
|
||||||
|
# Begin Source File
|
||||||
|
|
||||||
|
SOURCE=..\..\ahost.c
|
||||||
|
# End Source File
|
||||||
|
# End Group
|
||||||
|
# Begin Group "Header Files"
|
||||||
|
|
||||||
|
# PROP Default_Filter "h;hpp;hxx;hm;inl"
|
||||||
|
# End Group
|
||||||
|
# Begin Group "Resource Files"
|
||||||
|
|
||||||
|
# PROP Default_Filter "ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe"
|
||||||
|
# End Group
|
||||||
|
# End Target
|
||||||
|
# End Project
|
||||||
223
ares/vc/ahost/ahost.mak
Normal file
223
ares/vc/ahost/ahost.mak
Normal file
@@ -0,0 +1,223 @@
|
|||||||
|
# Microsoft Developer Studio Generated NMAKE File, Based on ahost.dsp
|
||||||
|
!IF "$(CFG)" == ""
|
||||||
|
CFG=ahost - Win32 Debug
|
||||||
|
!MESSAGE No configuration specified. Defaulting to ahost - Win32 Debug.
|
||||||
|
!ENDIF
|
||||||
|
|
||||||
|
!IF "$(CFG)" != "ahost - Win32 Release" && "$(CFG)" != "ahost - Win32 Debug"
|
||||||
|
!MESSAGE Invalid configuration "$(CFG)" specified.
|
||||||
|
!MESSAGE You can specify a configuration when running NMAKE
|
||||||
|
!MESSAGE by defining the macro CFG on the command line. For example:
|
||||||
|
!MESSAGE
|
||||||
|
!MESSAGE NMAKE /f "ahost.mak" CFG="ahost - Win32 Debug"
|
||||||
|
!MESSAGE
|
||||||
|
!MESSAGE Possible choices for configuration are:
|
||||||
|
!MESSAGE
|
||||||
|
!MESSAGE "ahost - Win32 Release" (based on "Win32 (x86) Console Application")
|
||||||
|
!MESSAGE "ahost - Win32 Debug" (based on "Win32 (x86) Console Application")
|
||||||
|
!MESSAGE
|
||||||
|
!ERROR An invalid configuration is specified.
|
||||||
|
!ENDIF
|
||||||
|
|
||||||
|
!IF "$(OS)" == "Windows_NT"
|
||||||
|
NULL=
|
||||||
|
!ELSE
|
||||||
|
NULL=nul
|
||||||
|
!ENDIF
|
||||||
|
|
||||||
|
CPP=cl.exe
|
||||||
|
RSC=rc.exe
|
||||||
|
|
||||||
|
!IF "$(CFG)" == "ahost - Win32 Release"
|
||||||
|
|
||||||
|
OUTDIR=.\Release
|
||||||
|
INTDIR=.\Release
|
||||||
|
# Begin Custom Macros
|
||||||
|
OutDir=.\Release
|
||||||
|
# End Custom Macros
|
||||||
|
|
||||||
|
!IF "$(RECURSE)" == "0"
|
||||||
|
|
||||||
|
ALL : "$(OUTDIR)\ahost.exe"
|
||||||
|
|
||||||
|
!ELSE
|
||||||
|
|
||||||
|
ALL : "areslib - Win32 Release" "$(OUTDIR)\ahost.exe"
|
||||||
|
|
||||||
|
!ENDIF
|
||||||
|
|
||||||
|
!IF "$(RECURSE)" == "1"
|
||||||
|
CLEAN :"areslib - Win32 ReleaseCLEAN"
|
||||||
|
!ELSE
|
||||||
|
CLEAN :
|
||||||
|
!ENDIF
|
||||||
|
-@erase "$(INTDIR)\ahost.obj"
|
||||||
|
-@erase "$(INTDIR)\vc60.idb"
|
||||||
|
-@erase "$(OUTDIR)\ahost.exe"
|
||||||
|
|
||||||
|
"$(OUTDIR)" :
|
||||||
|
if not exist "$(OUTDIR)/$(NULL)" mkdir "$(OUTDIR)"
|
||||||
|
|
||||||
|
CPP_PROJ=/nologo /MD /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /Fp"$(INTDIR)\ahost.pch" /YX /Fo"$(INTDIR)\\" /Fd"$(INTDIR)\\" /FD /c
|
||||||
|
BSC32=bscmake.exe
|
||||||
|
BSC32_FLAGS=/nologo /o"$(OUTDIR)\ahost.bsc"
|
||||||
|
BSC32_SBRS= \
|
||||||
|
|
||||||
|
LINK32=link.exe
|
||||||
|
LINK32_FLAGS=wsock32.lib areslib.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /incremental:no /pdb:"$(OUTDIR)\ahost.pdb" /machine:I386 /out:"$(OUTDIR)\ahost.exe" /libpath:"..\areslib\Release"
|
||||||
|
LINK32_OBJS= \
|
||||||
|
"$(INTDIR)\ahost.obj" \
|
||||||
|
"..\areslib\Release\areslib.lib"
|
||||||
|
|
||||||
|
"$(OUTDIR)\ahost.exe" : "$(OUTDIR)" $(DEF_FILE) $(LINK32_OBJS)
|
||||||
|
$(LINK32) @<<
|
||||||
|
$(LINK32_FLAGS) $(LINK32_OBJS)
|
||||||
|
<<
|
||||||
|
|
||||||
|
!ELSEIF "$(CFG)" == "ahost - Win32 Debug"
|
||||||
|
|
||||||
|
OUTDIR=.\Debug
|
||||||
|
INTDIR=.\Debug
|
||||||
|
# Begin Custom Macros
|
||||||
|
OutDir=.\Debug
|
||||||
|
# End Custom Macros
|
||||||
|
|
||||||
|
!IF "$(RECURSE)" == "0"
|
||||||
|
|
||||||
|
ALL : "$(OUTDIR)\ahost.exe" "$(OUTDIR)\ahost.bsc"
|
||||||
|
|
||||||
|
!ELSE
|
||||||
|
|
||||||
|
ALL : "areslib - Win32 Debug" "$(OUTDIR)\ahost.exe" "$(OUTDIR)\ahost.bsc"
|
||||||
|
|
||||||
|
!ENDIF
|
||||||
|
|
||||||
|
!IF "$(RECURSE)" == "1"
|
||||||
|
CLEAN :"areslib - Win32 DebugCLEAN"
|
||||||
|
!ELSE
|
||||||
|
CLEAN :
|
||||||
|
!ENDIF
|
||||||
|
-@erase "$(INTDIR)\ahost.obj"
|
||||||
|
-@erase "$(INTDIR)\ahost.sbr"
|
||||||
|
-@erase "$(INTDIR)\vc60.idb"
|
||||||
|
-@erase "$(INTDIR)\vc60.pdb"
|
||||||
|
-@erase "$(OUTDIR)\ahost.bsc"
|
||||||
|
-@erase "$(OUTDIR)\ahost.exe"
|
||||||
|
-@erase "$(OUTDIR)\ahost.ilk"
|
||||||
|
-@erase "$(OUTDIR)\ahost.pdb"
|
||||||
|
|
||||||
|
"$(OUTDIR)" :
|
||||||
|
if not exist "$(OUTDIR)/$(NULL)" mkdir "$(OUTDIR)"
|
||||||
|
|
||||||
|
CPP_PROJ=/nologo /MLd /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /FR"$(INTDIR)\\" /Fp"$(INTDIR)\ahost.pch" /YX /Fo"$(INTDIR)\\" /Fd"$(INTDIR)\\" /FD /GZ /c
|
||||||
|
BSC32=bscmake.exe
|
||||||
|
BSC32_FLAGS=/nologo /o"$(OUTDIR)\ahost.bsc"
|
||||||
|
BSC32_SBRS= \
|
||||||
|
"$(INTDIR)\ahost.sbr"
|
||||||
|
|
||||||
|
"$(OUTDIR)\ahost.bsc" : "$(OUTDIR)" $(BSC32_SBRS)
|
||||||
|
$(BSC32) @<<
|
||||||
|
$(BSC32_FLAGS) $(BSC32_SBRS)
|
||||||
|
<<
|
||||||
|
|
||||||
|
LINK32=link.exe
|
||||||
|
LINK32_FLAGS=wsock32.lib areslib.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /incremental:yes /pdb:"$(OUTDIR)\ahost.pdb" /debug /machine:I386 /out:"$(OUTDIR)\ahost.exe" /pdbtype:sept /libpath:"..\areslib\Debug"
|
||||||
|
LINK32_OBJS= \
|
||||||
|
"$(INTDIR)\ahost.obj" \
|
||||||
|
"..\areslib\Debug\areslib.lib"
|
||||||
|
|
||||||
|
"$(OUTDIR)\ahost.exe" : "$(OUTDIR)" $(DEF_FILE) $(LINK32_OBJS)
|
||||||
|
$(LINK32) @<<
|
||||||
|
$(LINK32_FLAGS) $(LINK32_OBJS)
|
||||||
|
<<
|
||||||
|
|
||||||
|
!ENDIF
|
||||||
|
|
||||||
|
.c{$(INTDIR)}.obj::
|
||||||
|
$(CPP) @<<
|
||||||
|
$(CPP_PROJ) $<
|
||||||
|
<<
|
||||||
|
|
||||||
|
.cpp{$(INTDIR)}.obj::
|
||||||
|
$(CPP) @<<
|
||||||
|
$(CPP_PROJ) $<
|
||||||
|
<<
|
||||||
|
|
||||||
|
.cxx{$(INTDIR)}.obj::
|
||||||
|
$(CPP) @<<
|
||||||
|
$(CPP_PROJ) $<
|
||||||
|
<<
|
||||||
|
|
||||||
|
.c{$(INTDIR)}.sbr::
|
||||||
|
$(CPP) @<<
|
||||||
|
$(CPP_PROJ) $<
|
||||||
|
<<
|
||||||
|
|
||||||
|
.cpp{$(INTDIR)}.sbr::
|
||||||
|
$(CPP) @<<
|
||||||
|
$(CPP_PROJ) $<
|
||||||
|
<<
|
||||||
|
|
||||||
|
.cxx{$(INTDIR)}.sbr::
|
||||||
|
$(CPP) @<<
|
||||||
|
$(CPP_PROJ) $<
|
||||||
|
<<
|
||||||
|
|
||||||
|
|
||||||
|
!IF "$(NO_EXTERNAL_DEPS)" != "1"
|
||||||
|
!IF EXISTS("ahost.dep")
|
||||||
|
!INCLUDE "ahost.dep"
|
||||||
|
!ELSE
|
||||||
|
!MESSAGE Warning: cannot find "ahost.dep"
|
||||||
|
!ENDIF
|
||||||
|
!ENDIF
|
||||||
|
|
||||||
|
|
||||||
|
!IF "$(CFG)" == "ahost - Win32 Release" || "$(CFG)" == "ahost - Win32 Debug"
|
||||||
|
SOURCE=..\..\ahost.c
|
||||||
|
|
||||||
|
!IF "$(CFG)" == "ahost - Win32 Release"
|
||||||
|
|
||||||
|
|
||||||
|
"$(INTDIR)\ahost.obj" : $(SOURCE) "$(INTDIR)"
|
||||||
|
$(CPP) $(CPP_PROJ) $(SOURCE)
|
||||||
|
|
||||||
|
|
||||||
|
!ELSEIF "$(CFG)" == "ahost - Win32 Debug"
|
||||||
|
|
||||||
|
|
||||||
|
"$(INTDIR)\ahost.obj" "$(INTDIR)\ahost.sbr" : $(SOURCE) "$(INTDIR)"
|
||||||
|
$(CPP) $(CPP_PROJ) $(SOURCE)
|
||||||
|
|
||||||
|
|
||||||
|
!ENDIF
|
||||||
|
|
||||||
|
!IF "$(CFG)" == "ahost - Win32 Release"
|
||||||
|
|
||||||
|
"areslib - Win32 Release" :
|
||||||
|
cd "\ARES-1.1.1\vc\areslib"
|
||||||
|
$(MAKE) /$(MAKEFLAGS) /F ".\areslib.mak" CFG="areslib - Win32 Release"
|
||||||
|
cd "..\ahost"
|
||||||
|
|
||||||
|
"areslib - Win32 ReleaseCLEAN" :
|
||||||
|
cd "\ARES-1.1.1\vc\areslib"
|
||||||
|
$(MAKE) /$(MAKEFLAGS) /F ".\areslib.mak" CFG="areslib - Win32 Release" RECURSE=1 CLEAN
|
||||||
|
cd "..\ahost"
|
||||||
|
|
||||||
|
!ELSEIF "$(CFG)" == "ahost - Win32 Debug"
|
||||||
|
|
||||||
|
"areslib - Win32 Debug" :
|
||||||
|
cd "\ARES-1.1.1\vc\areslib"
|
||||||
|
$(MAKE) /$(MAKEFLAGS) /F ".\areslib.mak" CFG="areslib - Win32 Debug"
|
||||||
|
cd "..\ahost"
|
||||||
|
|
||||||
|
"areslib - Win32 DebugCLEAN" :
|
||||||
|
cd "\ARES-1.1.1\vc\areslib"
|
||||||
|
$(MAKE) /$(MAKEFLAGS) /F ".\areslib.mak" CFG="areslib - Win32 Debug" RECURSE=1 CLEAN
|
||||||
|
cd "..\ahost"
|
||||||
|
|
||||||
|
!ENDIF
|
||||||
|
|
||||||
|
|
||||||
|
!ENDIF
|
||||||
|
|
||||||
16
ares/vc/ahost/ahost.plg
Normal file
16
ares/vc/ahost/ahost.plg
Normal file
@@ -0,0 +1,16 @@
|
|||||||
|
<html>
|
||||||
|
<body>
|
||||||
|
<pre>
|
||||||
|
<h1>Build Log</h1>
|
||||||
|
<h3>
|
||||||
|
--------------------Configuration: ahost - Win32 Release--------------------
|
||||||
|
</h3>
|
||||||
|
<h3>Command Lines</h3>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<h3>Results</h3>
|
||||||
|
ahost.exe - 0 error(s), 0 warning(s)
|
||||||
|
</pre>
|
||||||
|
</body>
|
||||||
|
</html>
|
||||||
2
ares/vc/areslib/areslib.dep
Normal file
2
ares/vc/areslib/areslib.dep
Normal file
@@ -0,0 +1,2 @@
|
|||||||
|
# Microsoft Developer Studio Generated Dependency File, included by areslib.mak
|
||||||
|
|
||||||
196
ares/vc/areslib/areslib.dsp
Normal file
196
ares/vc/areslib/areslib.dsp
Normal file
@@ -0,0 +1,196 @@
|
|||||||
|
# Microsoft Developer Studio Project File - Name="areslib" - Package Owner=<4>
|
||||||
|
# Microsoft Developer Studio Generated Build File, Format Version 6.00
|
||||||
|
# ** DO NOT EDIT **
|
||||||
|
|
||||||
|
# TARGTYPE "Win32 (x86) Static Library" 0x0104
|
||||||
|
|
||||||
|
CFG=areslib - Win32 Debug
|
||||||
|
!MESSAGE This is not a valid makefile. To build this project using NMAKE,
|
||||||
|
!MESSAGE use the Export Makefile command and run
|
||||||
|
!MESSAGE
|
||||||
|
!MESSAGE NMAKE /f "areslib.mak".
|
||||||
|
!MESSAGE
|
||||||
|
!MESSAGE You can specify a configuration when running NMAKE
|
||||||
|
!MESSAGE by defining the macro CFG on the command line. For example:
|
||||||
|
!MESSAGE
|
||||||
|
!MESSAGE NMAKE /f "areslib.mak" CFG="areslib - Win32 Debug"
|
||||||
|
!MESSAGE
|
||||||
|
!MESSAGE Possible choices for configuration are:
|
||||||
|
!MESSAGE
|
||||||
|
!MESSAGE "areslib - Win32 Release" (based on "Win32 (x86) Static Library")
|
||||||
|
!MESSAGE "areslib - Win32 Debug" (based on "Win32 (x86) Static Library")
|
||||||
|
!MESSAGE
|
||||||
|
|
||||||
|
# Begin Project
|
||||||
|
# PROP AllowPerConfigDependencies 0
|
||||||
|
# PROP Scc_ProjName ""
|
||||||
|
# PROP Scc_LocalPath ""
|
||||||
|
CPP=cl.exe
|
||||||
|
RSC=rc.exe
|
||||||
|
|
||||||
|
!IF "$(CFG)" == "areslib - Win32 Release"
|
||||||
|
|
||||||
|
# PROP BASE Use_MFC 0
|
||||||
|
# PROP BASE Use_Debug_Libraries 0
|
||||||
|
# PROP BASE Output_Dir "Release"
|
||||||
|
# PROP BASE Intermediate_Dir "Release"
|
||||||
|
# PROP BASE Target_Dir ""
|
||||||
|
# PROP Use_MFC 0
|
||||||
|
# PROP Use_Debug_Libraries 0
|
||||||
|
# PROP Output_Dir "Release"
|
||||||
|
# PROP Intermediate_Dir "Release"
|
||||||
|
# PROP Target_Dir ""
|
||||||
|
# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_MBCS" /D "_LIB" /YX /FD /c
|
||||||
|
# ADD CPP /nologo /MD /W3 /GX /O2 /I "..\.." /D "WIN32" /D "NDEBUG" /D "_MBCS" /D "_LIB" /YX /FD /c
|
||||||
|
# ADD BASE RSC /l 0x409 /d "NDEBUG"
|
||||||
|
# ADD RSC /l 0x409 /d "NDEBUG"
|
||||||
|
BSC32=bscmake.exe
|
||||||
|
# ADD BASE BSC32 /nologo
|
||||||
|
# ADD BSC32 /nologo
|
||||||
|
LIB32=link.exe -lib
|
||||||
|
# ADD BASE LIB32 /nologo
|
||||||
|
# ADD LIB32 /nologo
|
||||||
|
|
||||||
|
!ELSEIF "$(CFG)" == "areslib - Win32 Debug"
|
||||||
|
|
||||||
|
# PROP BASE Use_MFC 0
|
||||||
|
# PROP BASE Use_Debug_Libraries 1
|
||||||
|
# PROP BASE Output_Dir "Debug"
|
||||||
|
# PROP BASE Intermediate_Dir "Debug"
|
||||||
|
# PROP BASE Target_Dir ""
|
||||||
|
# PROP Use_MFC 0
|
||||||
|
# PROP Use_Debug_Libraries 1
|
||||||
|
# PROP Output_Dir "Debug"
|
||||||
|
# PROP Intermediate_Dir "Debug"
|
||||||
|
# PROP Target_Dir ""
|
||||||
|
# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_MBCS" /D "_LIB" /YX /FD /GZ /c
|
||||||
|
# ADD CPP /nologo /W3 /Gm /GX /ZI /Od /I "..\.." /D "WIN32" /D "_DEBUG" /D "_MBCS" /D "_LIB" /YX /FD /GZ /c
|
||||||
|
# ADD BASE RSC /l 0x409 /d "_DEBUG"
|
||||||
|
# ADD RSC /l 0x409 /d "_DEBUG"
|
||||||
|
BSC32=bscmake.exe
|
||||||
|
# ADD BASE BSC32 /nologo
|
||||||
|
# ADD BSC32 /nologo
|
||||||
|
LIB32=link.exe -lib
|
||||||
|
# ADD BASE LIB32 /nologo
|
||||||
|
# ADD LIB32 /nologo
|
||||||
|
|
||||||
|
!ENDIF
|
||||||
|
|
||||||
|
# Begin Target
|
||||||
|
|
||||||
|
# Name "areslib - Win32 Release"
|
||||||
|
# Name "areslib - Win32 Debug"
|
||||||
|
# Begin Group "Source Files"
|
||||||
|
|
||||||
|
# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat"
|
||||||
|
# Begin Source File
|
||||||
|
|
||||||
|
SOURCE=..\..\ares__close_sockets.c
|
||||||
|
# End Source File
|
||||||
|
# Begin Source File
|
||||||
|
|
||||||
|
SOURCE=..\..\ares__get_hostent.c
|
||||||
|
# End Source File
|
||||||
|
# Begin Source File
|
||||||
|
|
||||||
|
SOURCE=..\..\ares__read_line.c
|
||||||
|
# End Source File
|
||||||
|
# Begin Source File
|
||||||
|
|
||||||
|
SOURCE=..\..\ares_destroy.c
|
||||||
|
# End Source File
|
||||||
|
# Begin Source File
|
||||||
|
|
||||||
|
SOURCE=..\..\ares_expand_name.c
|
||||||
|
# End Source File
|
||||||
|
# Begin Source File
|
||||||
|
|
||||||
|
SOURCE=..\..\ares_fds.c
|
||||||
|
# End Source File
|
||||||
|
# Begin Source File
|
||||||
|
|
||||||
|
SOURCE=..\..\ares_free_errmem.c
|
||||||
|
# End Source File
|
||||||
|
# Begin Source File
|
||||||
|
|
||||||
|
SOURCE=..\..\ares_free_hostent.c
|
||||||
|
# End Source File
|
||||||
|
# Begin Source File
|
||||||
|
|
||||||
|
SOURCE=..\..\ares_free_string.c
|
||||||
|
# End Source File
|
||||||
|
# Begin Source File
|
||||||
|
|
||||||
|
SOURCE=..\..\ares_gethostbyaddr.c
|
||||||
|
# End Source File
|
||||||
|
# Begin Source File
|
||||||
|
|
||||||
|
SOURCE=..\..\ares_gethostbyname.c
|
||||||
|
# End Source File
|
||||||
|
# Begin Source File
|
||||||
|
|
||||||
|
SOURCE=..\..\ares_init.c
|
||||||
|
# End Source File
|
||||||
|
# Begin Source File
|
||||||
|
|
||||||
|
SOURCE=..\..\ares_mkquery.c
|
||||||
|
# End Source File
|
||||||
|
# Begin Source File
|
||||||
|
|
||||||
|
SOURCE=..\..\ares_parse_a_reply.c
|
||||||
|
# End Source File
|
||||||
|
# Begin Source File
|
||||||
|
|
||||||
|
SOURCE=..\..\ares_parse_ptr_reply.c
|
||||||
|
# End Source File
|
||||||
|
# Begin Source File
|
||||||
|
|
||||||
|
SOURCE=..\..\ares_process.c
|
||||||
|
# End Source File
|
||||||
|
# Begin Source File
|
||||||
|
|
||||||
|
SOURCE=..\..\ares_query.c
|
||||||
|
# End Source File
|
||||||
|
# Begin Source File
|
||||||
|
|
||||||
|
SOURCE=..\..\ares_search.c
|
||||||
|
# End Source File
|
||||||
|
# Begin Source File
|
||||||
|
|
||||||
|
SOURCE=..\..\ares_send.c
|
||||||
|
# End Source File
|
||||||
|
# Begin Source File
|
||||||
|
|
||||||
|
SOURCE=..\..\ares_strerror.c
|
||||||
|
# End Source File
|
||||||
|
# Begin Source File
|
||||||
|
|
||||||
|
SOURCE=..\..\ares_timeout.c
|
||||||
|
# End Source File
|
||||||
|
# Begin Source File
|
||||||
|
|
||||||
|
SOURCE=..\..\windows_port.c
|
||||||
|
# End Source File
|
||||||
|
# End Group
|
||||||
|
# Begin Group "Header Files"
|
||||||
|
|
||||||
|
# PROP Default_Filter "h;hpp;hxx;hm;inl"
|
||||||
|
# Begin Source File
|
||||||
|
|
||||||
|
SOURCE=..\..\ares.h
|
||||||
|
# End Source File
|
||||||
|
# Begin Source File
|
||||||
|
|
||||||
|
SOURCE=..\..\ares_dns.h
|
||||||
|
# End Source File
|
||||||
|
# Begin Source File
|
||||||
|
|
||||||
|
SOURCE=..\..\ares_private.h
|
||||||
|
# End Source File
|
||||||
|
# Begin Source File
|
||||||
|
|
||||||
|
SOURCE=..\..\nameser.h
|
||||||
|
# End Source File
|
||||||
|
# End Group
|
||||||
|
# End Target
|
||||||
|
# End Project
|
||||||
361
ares/vc/areslib/areslib.mak
Normal file
361
ares/vc/areslib/areslib.mak
Normal file
@@ -0,0 +1,361 @@
|
|||||||
|
# Microsoft Developer Studio Generated NMAKE File, Based on areslib.dsp
|
||||||
|
!IF "$(CFG)" == ""
|
||||||
|
CFG=areslib - Win32 Debug
|
||||||
|
!MESSAGE No configuration specified. Defaulting to areslib - Win32 Debug.
|
||||||
|
!ENDIF
|
||||||
|
|
||||||
|
!IF "$(CFG)" != "areslib - Win32 Release" && "$(CFG)" != "areslib - Win32 Debug"
|
||||||
|
!MESSAGE Invalid configuration "$(CFG)" specified.
|
||||||
|
!MESSAGE You can specify a configuration when running NMAKE
|
||||||
|
!MESSAGE by defining the macro CFG on the command line. For example:
|
||||||
|
!MESSAGE
|
||||||
|
!MESSAGE NMAKE /f "areslib.mak" CFG="areslib - Win32 Debug"
|
||||||
|
!MESSAGE
|
||||||
|
!MESSAGE Possible choices for configuration are:
|
||||||
|
!MESSAGE
|
||||||
|
!MESSAGE "areslib - Win32 Release" (based on "Win32 (x86) Static Library")
|
||||||
|
!MESSAGE "areslib - Win32 Debug" (based on "Win32 (x86) Static Library")
|
||||||
|
!MESSAGE
|
||||||
|
!ERROR An invalid configuration is specified.
|
||||||
|
!ENDIF
|
||||||
|
|
||||||
|
!IF "$(OS)" == "Windows_NT"
|
||||||
|
NULL=
|
||||||
|
!ELSE
|
||||||
|
NULL=nul
|
||||||
|
!ENDIF
|
||||||
|
|
||||||
|
CPP=cl.exe
|
||||||
|
RSC=rc.exe
|
||||||
|
|
||||||
|
!IF "$(CFG)" == "areslib - Win32 Release"
|
||||||
|
|
||||||
|
OUTDIR=.\Release
|
||||||
|
INTDIR=.\Release
|
||||||
|
# Begin Custom Macros
|
||||||
|
OutDir=.\Release
|
||||||
|
# End Custom Macros
|
||||||
|
|
||||||
|
ALL : "$(OUTDIR)\areslib.lib"
|
||||||
|
|
||||||
|
|
||||||
|
CLEAN :
|
||||||
|
-@erase "$(INTDIR)\ares__close_sockets.obj"
|
||||||
|
-@erase "$(INTDIR)\ares__get_hostent.obj"
|
||||||
|
-@erase "$(INTDIR)\ares__read_line.obj"
|
||||||
|
-@erase "$(INTDIR)\ares_destroy.obj"
|
||||||
|
-@erase "$(INTDIR)\ares_expand_name.obj"
|
||||||
|
-@erase "$(INTDIR)\ares_fds.obj"
|
||||||
|
-@erase "$(INTDIR)\ares_free_errmem.obj"
|
||||||
|
-@erase "$(INTDIR)\ares_free_hostent.obj"
|
||||||
|
-@erase "$(INTDIR)\ares_free_string.obj"
|
||||||
|
-@erase "$(INTDIR)\ares_gethostbyaddr.obj"
|
||||||
|
-@erase "$(INTDIR)\ares_gethostbyname.obj"
|
||||||
|
-@erase "$(INTDIR)\ares_init.obj"
|
||||||
|
-@erase "$(INTDIR)\ares_mkquery.obj"
|
||||||
|
-@erase "$(INTDIR)\ares_parse_a_reply.obj"
|
||||||
|
-@erase "$(INTDIR)\ares_parse_ptr_reply.obj"
|
||||||
|
-@erase "$(INTDIR)\ares_process.obj"
|
||||||
|
-@erase "$(INTDIR)\ares_query.obj"
|
||||||
|
-@erase "$(INTDIR)\ares_search.obj"
|
||||||
|
-@erase "$(INTDIR)\ares_send.obj"
|
||||||
|
-@erase "$(INTDIR)\ares_strerror.obj"
|
||||||
|
-@erase "$(INTDIR)\ares_timeout.obj"
|
||||||
|
-@erase "$(INTDIR)\vc60.idb"
|
||||||
|
-@erase "$(INTDIR)\windows_port.obj"
|
||||||
|
-@erase "$(OUTDIR)\areslib.lib"
|
||||||
|
|
||||||
|
"$(OUTDIR)" :
|
||||||
|
if not exist "$(OUTDIR)/$(NULL)" mkdir "$(OUTDIR)"
|
||||||
|
|
||||||
|
CPP_PROJ=/nologo /MD /W3 /GX /O2 /I "..\.." /D "WIN32" /D "NDEBUG" /D "_MBCS" /D "_LIB" /Fp"$(INTDIR)\areslib.pch" /YX /Fo"$(INTDIR)\\" /Fd"$(INTDIR)\\" /FD /c
|
||||||
|
BSC32=bscmake.exe
|
||||||
|
BSC32_FLAGS=/nologo /o"$(OUTDIR)\areslib.bsc"
|
||||||
|
BSC32_SBRS= \
|
||||||
|
|
||||||
|
LIB32=link.exe -lib
|
||||||
|
LIB32_FLAGS=/nologo /out:"$(OUTDIR)\areslib.lib"
|
||||||
|
LIB32_OBJS= \
|
||||||
|
"$(INTDIR)\ares__close_sockets.obj" \
|
||||||
|
"$(INTDIR)\ares__get_hostent.obj" \
|
||||||
|
"$(INTDIR)\ares__read_line.obj" \
|
||||||
|
"$(INTDIR)\ares_destroy.obj" \
|
||||||
|
"$(INTDIR)\ares_expand_name.obj" \
|
||||||
|
"$(INTDIR)\ares_fds.obj" \
|
||||||
|
"$(INTDIR)\ares_free_errmem.obj" \
|
||||||
|
"$(INTDIR)\ares_free_hostent.obj" \
|
||||||
|
"$(INTDIR)\ares_free_string.obj" \
|
||||||
|
"$(INTDIR)\ares_gethostbyaddr.obj" \
|
||||||
|
"$(INTDIR)\ares_gethostbyname.obj" \
|
||||||
|
"$(INTDIR)\ares_init.obj" \
|
||||||
|
"$(INTDIR)\ares_mkquery.obj" \
|
||||||
|
"$(INTDIR)\ares_parse_a_reply.obj" \
|
||||||
|
"$(INTDIR)\ares_parse_ptr_reply.obj" \
|
||||||
|
"$(INTDIR)\ares_process.obj" \
|
||||||
|
"$(INTDIR)\ares_query.obj" \
|
||||||
|
"$(INTDIR)\ares_search.obj" \
|
||||||
|
"$(INTDIR)\ares_send.obj" \
|
||||||
|
"$(INTDIR)\ares_strerror.obj" \
|
||||||
|
"$(INTDIR)\ares_timeout.obj" \
|
||||||
|
"$(INTDIR)\windows_port.obj"
|
||||||
|
|
||||||
|
"$(OUTDIR)\areslib.lib" : "$(OUTDIR)" $(DEF_FILE) $(LIB32_OBJS)
|
||||||
|
$(LIB32) @<<
|
||||||
|
$(LIB32_FLAGS) $(DEF_FLAGS) $(LIB32_OBJS)
|
||||||
|
<<
|
||||||
|
|
||||||
|
!ELSEIF "$(CFG)" == "areslib - Win32 Debug"
|
||||||
|
|
||||||
|
OUTDIR=.\Debug
|
||||||
|
INTDIR=.\Debug
|
||||||
|
# Begin Custom Macros
|
||||||
|
OutDir=.\Debug
|
||||||
|
# End Custom Macros
|
||||||
|
|
||||||
|
ALL : "$(OUTDIR)\areslib.lib"
|
||||||
|
|
||||||
|
|
||||||
|
CLEAN :
|
||||||
|
-@erase "$(INTDIR)\ares__close_sockets.obj"
|
||||||
|
-@erase "$(INTDIR)\ares__get_hostent.obj"
|
||||||
|
-@erase "$(INTDIR)\ares__read_line.obj"
|
||||||
|
-@erase "$(INTDIR)\ares_destroy.obj"
|
||||||
|
-@erase "$(INTDIR)\ares_expand_name.obj"
|
||||||
|
-@erase "$(INTDIR)\ares_fds.obj"
|
||||||
|
-@erase "$(INTDIR)\ares_free_errmem.obj"
|
||||||
|
-@erase "$(INTDIR)\ares_free_hostent.obj"
|
||||||
|
-@erase "$(INTDIR)\ares_free_string.obj"
|
||||||
|
-@erase "$(INTDIR)\ares_gethostbyaddr.obj"
|
||||||
|
-@erase "$(INTDIR)\ares_gethostbyname.obj"
|
||||||
|
-@erase "$(INTDIR)\ares_init.obj"
|
||||||
|
-@erase "$(INTDIR)\ares_mkquery.obj"
|
||||||
|
-@erase "$(INTDIR)\ares_parse_a_reply.obj"
|
||||||
|
-@erase "$(INTDIR)\ares_parse_ptr_reply.obj"
|
||||||
|
-@erase "$(INTDIR)\ares_process.obj"
|
||||||
|
-@erase "$(INTDIR)\ares_query.obj"
|
||||||
|
-@erase "$(INTDIR)\ares_search.obj"
|
||||||
|
-@erase "$(INTDIR)\ares_send.obj"
|
||||||
|
-@erase "$(INTDIR)\ares_strerror.obj"
|
||||||
|
-@erase "$(INTDIR)\ares_timeout.obj"
|
||||||
|
-@erase "$(INTDIR)\vc60.idb"
|
||||||
|
-@erase "$(INTDIR)\vc60.pdb"
|
||||||
|
-@erase "$(INTDIR)\windows_port.obj"
|
||||||
|
-@erase "$(OUTDIR)\areslib.lib"
|
||||||
|
|
||||||
|
"$(OUTDIR)" :
|
||||||
|
if not exist "$(OUTDIR)/$(NULL)" mkdir "$(OUTDIR)"
|
||||||
|
|
||||||
|
CPP_PROJ=/nologo /MLd /W3 /Gm /GX /ZI /Od /I "..\.." /D "WIN32" /D "_DEBUG" /D "_MBCS" /D "_LIB" /Fp"$(INTDIR)\areslib.pch" /YX /Fo"$(INTDIR)\\" /Fd"$(INTDIR)\\" /FD /GZ /c
|
||||||
|
BSC32=bscmake.exe
|
||||||
|
BSC32_FLAGS=/nologo /o"$(OUTDIR)\areslib.bsc"
|
||||||
|
BSC32_SBRS= \
|
||||||
|
|
||||||
|
LIB32=link.exe -lib
|
||||||
|
LIB32_FLAGS=/nologo /out:"$(OUTDIR)\areslib.lib"
|
||||||
|
LIB32_OBJS= \
|
||||||
|
"$(INTDIR)\ares__close_sockets.obj" \
|
||||||
|
"$(INTDIR)\ares__get_hostent.obj" \
|
||||||
|
"$(INTDIR)\ares__read_line.obj" \
|
||||||
|
"$(INTDIR)\ares_destroy.obj" \
|
||||||
|
"$(INTDIR)\ares_expand_name.obj" \
|
||||||
|
"$(INTDIR)\ares_fds.obj" \
|
||||||
|
"$(INTDIR)\ares_free_errmem.obj" \
|
||||||
|
"$(INTDIR)\ares_free_hostent.obj" \
|
||||||
|
"$(INTDIR)\ares_free_string.obj" \
|
||||||
|
"$(INTDIR)\ares_gethostbyaddr.obj" \
|
||||||
|
"$(INTDIR)\ares_gethostbyname.obj" \
|
||||||
|
"$(INTDIR)\ares_init.obj" \
|
||||||
|
"$(INTDIR)\ares_mkquery.obj" \
|
||||||
|
"$(INTDIR)\ares_parse_a_reply.obj" \
|
||||||
|
"$(INTDIR)\ares_parse_ptr_reply.obj" \
|
||||||
|
"$(INTDIR)\ares_process.obj" \
|
||||||
|
"$(INTDIR)\ares_query.obj" \
|
||||||
|
"$(INTDIR)\ares_search.obj" \
|
||||||
|
"$(INTDIR)\ares_send.obj" \
|
||||||
|
"$(INTDIR)\ares_strerror.obj" \
|
||||||
|
"$(INTDIR)\ares_timeout.obj" \
|
||||||
|
"$(INTDIR)\windows_port.obj"
|
||||||
|
|
||||||
|
"$(OUTDIR)\areslib.lib" : "$(OUTDIR)" $(DEF_FILE) $(LIB32_OBJS)
|
||||||
|
$(LIB32) @<<
|
||||||
|
$(LIB32_FLAGS) $(DEF_FLAGS) $(LIB32_OBJS)
|
||||||
|
<<
|
||||||
|
|
||||||
|
!ENDIF
|
||||||
|
|
||||||
|
.c{$(INTDIR)}.obj::
|
||||||
|
$(CPP) @<<
|
||||||
|
$(CPP_PROJ) $<
|
||||||
|
<<
|
||||||
|
|
||||||
|
.cpp{$(INTDIR)}.obj::
|
||||||
|
$(CPP) @<<
|
||||||
|
$(CPP_PROJ) $<
|
||||||
|
<<
|
||||||
|
|
||||||
|
.cxx{$(INTDIR)}.obj::
|
||||||
|
$(CPP) @<<
|
||||||
|
$(CPP_PROJ) $<
|
||||||
|
<<
|
||||||
|
|
||||||
|
.c{$(INTDIR)}.sbr::
|
||||||
|
$(CPP) @<<
|
||||||
|
$(CPP_PROJ) $<
|
||||||
|
<<
|
||||||
|
|
||||||
|
.cpp{$(INTDIR)}.sbr::
|
||||||
|
$(CPP) @<<
|
||||||
|
$(CPP_PROJ) $<
|
||||||
|
<<
|
||||||
|
|
||||||
|
.cxx{$(INTDIR)}.sbr::
|
||||||
|
$(CPP) @<<
|
||||||
|
$(CPP_PROJ) $<
|
||||||
|
<<
|
||||||
|
|
||||||
|
|
||||||
|
!IF "$(NO_EXTERNAL_DEPS)" != "1"
|
||||||
|
!IF EXISTS("areslib.dep")
|
||||||
|
!INCLUDE "areslib.dep"
|
||||||
|
!ELSE
|
||||||
|
!MESSAGE Warning: cannot find "areslib.dep"
|
||||||
|
!ENDIF
|
||||||
|
!ENDIF
|
||||||
|
|
||||||
|
|
||||||
|
!IF "$(CFG)" == "areslib - Win32 Release" || "$(CFG)" == "areslib - Win32 Debug"
|
||||||
|
SOURCE=..\..\ares__close_sockets.c
|
||||||
|
|
||||||
|
"$(INTDIR)\ares__close_sockets.obj" : $(SOURCE) "$(INTDIR)"
|
||||||
|
$(CPP) $(CPP_PROJ) $(SOURCE)
|
||||||
|
|
||||||
|
|
||||||
|
SOURCE=..\..\ares__get_hostent.c
|
||||||
|
|
||||||
|
"$(INTDIR)\ares__get_hostent.obj" : $(SOURCE) "$(INTDIR)"
|
||||||
|
$(CPP) $(CPP_PROJ) $(SOURCE)
|
||||||
|
|
||||||
|
|
||||||
|
SOURCE=..\..\ares__read_line.c
|
||||||
|
|
||||||
|
"$(INTDIR)\ares__read_line.obj" : $(SOURCE) "$(INTDIR)"
|
||||||
|
$(CPP) $(CPP_PROJ) $(SOURCE)
|
||||||
|
|
||||||
|
|
||||||
|
SOURCE=..\..\ares_destroy.c
|
||||||
|
|
||||||
|
"$(INTDIR)\ares_destroy.obj" : $(SOURCE) "$(INTDIR)"
|
||||||
|
$(CPP) $(CPP_PROJ) $(SOURCE)
|
||||||
|
|
||||||
|
|
||||||
|
SOURCE=..\..\ares_expand_name.c
|
||||||
|
|
||||||
|
"$(INTDIR)\ares_expand_name.obj" : $(SOURCE) "$(INTDIR)"
|
||||||
|
$(CPP) $(CPP_PROJ) $(SOURCE)
|
||||||
|
|
||||||
|
|
||||||
|
SOURCE=..\..\ares_fds.c
|
||||||
|
|
||||||
|
"$(INTDIR)\ares_fds.obj" : $(SOURCE) "$(INTDIR)"
|
||||||
|
$(CPP) $(CPP_PROJ) $(SOURCE)
|
||||||
|
|
||||||
|
|
||||||
|
SOURCE=..\..\ares_free_errmem.c
|
||||||
|
|
||||||
|
"$(INTDIR)\ares_free_errmem.obj" : $(SOURCE) "$(INTDIR)"
|
||||||
|
$(CPP) $(CPP_PROJ) $(SOURCE)
|
||||||
|
|
||||||
|
|
||||||
|
SOURCE=..\..\ares_free_hostent.c
|
||||||
|
|
||||||
|
"$(INTDIR)\ares_free_hostent.obj" : $(SOURCE) "$(INTDIR)"
|
||||||
|
$(CPP) $(CPP_PROJ) $(SOURCE)
|
||||||
|
|
||||||
|
|
||||||
|
SOURCE=..\..\ares_free_string.c
|
||||||
|
|
||||||
|
"$(INTDIR)\ares_free_string.obj" : $(SOURCE) "$(INTDIR)"
|
||||||
|
$(CPP) $(CPP_PROJ) $(SOURCE)
|
||||||
|
|
||||||
|
|
||||||
|
SOURCE=..\..\ares_gethostbyaddr.c
|
||||||
|
|
||||||
|
"$(INTDIR)\ares_gethostbyaddr.obj" : $(SOURCE) "$(INTDIR)"
|
||||||
|
$(CPP) $(CPP_PROJ) $(SOURCE)
|
||||||
|
|
||||||
|
|
||||||
|
SOURCE=..\..\ares_gethostbyname.c
|
||||||
|
|
||||||
|
"$(INTDIR)\ares_gethostbyname.obj" : $(SOURCE) "$(INTDIR)"
|
||||||
|
$(CPP) $(CPP_PROJ) $(SOURCE)
|
||||||
|
|
||||||
|
|
||||||
|
SOURCE=..\..\ares_init.c
|
||||||
|
|
||||||
|
"$(INTDIR)\ares_init.obj" : $(SOURCE) "$(INTDIR)"
|
||||||
|
$(CPP) $(CPP_PROJ) $(SOURCE)
|
||||||
|
|
||||||
|
|
||||||
|
SOURCE=..\..\ares_mkquery.c
|
||||||
|
|
||||||
|
"$(INTDIR)\ares_mkquery.obj" : $(SOURCE) "$(INTDIR)"
|
||||||
|
$(CPP) $(CPP_PROJ) $(SOURCE)
|
||||||
|
|
||||||
|
|
||||||
|
SOURCE=..\..\ares_parse_a_reply.c
|
||||||
|
|
||||||
|
"$(INTDIR)\ares_parse_a_reply.obj" : $(SOURCE) "$(INTDIR)"
|
||||||
|
$(CPP) $(CPP_PROJ) $(SOURCE)
|
||||||
|
|
||||||
|
|
||||||
|
SOURCE=..\..\ares_parse_ptr_reply.c
|
||||||
|
|
||||||
|
"$(INTDIR)\ares_parse_ptr_reply.obj" : $(SOURCE) "$(INTDIR)"
|
||||||
|
$(CPP) $(CPP_PROJ) $(SOURCE)
|
||||||
|
|
||||||
|
|
||||||
|
SOURCE=..\..\ares_process.c
|
||||||
|
|
||||||
|
"$(INTDIR)\ares_process.obj" : $(SOURCE) "$(INTDIR)"
|
||||||
|
$(CPP) $(CPP_PROJ) $(SOURCE)
|
||||||
|
|
||||||
|
|
||||||
|
SOURCE=..\..\ares_query.c
|
||||||
|
|
||||||
|
"$(INTDIR)\ares_query.obj" : $(SOURCE) "$(INTDIR)"
|
||||||
|
$(CPP) $(CPP_PROJ) $(SOURCE)
|
||||||
|
|
||||||
|
|
||||||
|
SOURCE=..\..\ares_search.c
|
||||||
|
|
||||||
|
"$(INTDIR)\ares_search.obj" : $(SOURCE) "$(INTDIR)"
|
||||||
|
$(CPP) $(CPP_PROJ) $(SOURCE)
|
||||||
|
|
||||||
|
|
||||||
|
SOURCE=..\..\ares_send.c
|
||||||
|
|
||||||
|
"$(INTDIR)\ares_send.obj" : $(SOURCE) "$(INTDIR)"
|
||||||
|
$(CPP) $(CPP_PROJ) $(SOURCE)
|
||||||
|
|
||||||
|
|
||||||
|
SOURCE=..\..\ares_strerror.c
|
||||||
|
|
||||||
|
"$(INTDIR)\ares_strerror.obj" : $(SOURCE) "$(INTDIR)"
|
||||||
|
$(CPP) $(CPP_PROJ) $(SOURCE)
|
||||||
|
|
||||||
|
|
||||||
|
SOURCE=..\..\ares_timeout.c
|
||||||
|
|
||||||
|
"$(INTDIR)\ares_timeout.obj" : $(SOURCE) "$(INTDIR)"
|
||||||
|
$(CPP) $(CPP_PROJ) $(SOURCE)
|
||||||
|
|
||||||
|
|
||||||
|
SOURCE=..\..\windows_port.c
|
||||||
|
|
||||||
|
"$(INTDIR)\windows_port.obj" : $(SOURCE) "$(INTDIR)"
|
||||||
|
$(CPP) $(CPP_PROJ) $(SOURCE)
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
!ENDIF
|
||||||
|
|
||||||
125
ares/vc/areslib/areslib.plg
Normal file
125
ares/vc/areslib/areslib.plg
Normal file
@@ -0,0 +1,125 @@
|
|||||||
|
<html>
|
||||||
|
<body>
|
||||||
|
<pre>
|
||||||
|
<h1>Build Log</h1>
|
||||||
|
<h3>
|
||||||
|
--------------------Configuration: areslib - Win32 Release--------------------
|
||||||
|
</h3>
|
||||||
|
<h3>Command Lines</h3>
|
||||||
|
Creating temporary file "C:\DOCUME~1\liren\LOCALS~1\Temp\RSP603D.tmp" with contents
|
||||||
|
[
|
||||||
|
/nologo /MD /W3 /GX /O2 /I "..\.." /D "WIN32" /D "NDEBUG" /D "_MBCS" /D "_LIB" /Fp"Release/areslib.pch" /YX /Fo"Release/" /Fd"Release/" /FD /c
|
||||||
|
"Z:\ares-1.1.1\ares__close_sockets.c"
|
||||||
|
"Z:\ares-1.1.1\ares__get_hostent.c"
|
||||||
|
"Z:\ares-1.1.1\ares__read_line.c"
|
||||||
|
"Z:\ares-1.1.1\ares_destroy.c"
|
||||||
|
"Z:\ares-1.1.1\ares_expand_name.c"
|
||||||
|
"Z:\ares-1.1.1\ares_fds.c"
|
||||||
|
"Z:\ares-1.1.1\ares_free_errmem.c"
|
||||||
|
"Z:\ares-1.1.1\ares_free_hostent.c"
|
||||||
|
"Z:\ares-1.1.1\ares_free_string.c"
|
||||||
|
"Z:\ares-1.1.1\ares_gethostbyaddr.c"
|
||||||
|
"Z:\ares-1.1.1\ares_gethostbyname.c"
|
||||||
|
"Z:\ares-1.1.1\ares_init.c"
|
||||||
|
"Z:\ares-1.1.1\ares_mkquery.c"
|
||||||
|
"Z:\ares-1.1.1\ares_parse_a_reply.c"
|
||||||
|
"Z:\ares-1.1.1\ares_parse_ptr_reply.c"
|
||||||
|
"Z:\ares-1.1.1\ares_process.c"
|
||||||
|
"Z:\ares-1.1.1\ares_query.c"
|
||||||
|
"Z:\ares-1.1.1\ares_search.c"
|
||||||
|
"Z:\ares-1.1.1\ares_send.c"
|
||||||
|
"Z:\ares-1.1.1\ares_strerror.c"
|
||||||
|
"Z:\ares-1.1.1\ares_timeout.c"
|
||||||
|
"Z:\ares-1.1.1\windows_port.c"
|
||||||
|
]
|
||||||
|
Creating command line "cl.exe @C:\DOCUME~1\liren\LOCALS~1\Temp\RSP603D.tmp"
|
||||||
|
Creating temporary file "C:\DOCUME~1\liren\LOCALS~1\Temp\RSP603E.tmp" with contents
|
||||||
|
[
|
||||||
|
/nologo /out:"Release\areslib.lib"
|
||||||
|
".\Release\ares__close_sockets.obj"
|
||||||
|
".\Release\ares__get_hostent.obj"
|
||||||
|
".\Release\ares__read_line.obj"
|
||||||
|
".\Release\ares_destroy.obj"
|
||||||
|
".\Release\ares_expand_name.obj"
|
||||||
|
".\Release\ares_fds.obj"
|
||||||
|
".\Release\ares_free_errmem.obj"
|
||||||
|
".\Release\ares_free_hostent.obj"
|
||||||
|
".\Release\ares_free_string.obj"
|
||||||
|
".\Release\ares_gethostbyaddr.obj"
|
||||||
|
".\Release\ares_gethostbyname.obj"
|
||||||
|
".\Release\ares_init.obj"
|
||||||
|
".\Release\ares_mkquery.obj"
|
||||||
|
".\Release\ares_parse_a_reply.obj"
|
||||||
|
".\Release\ares_parse_ptr_reply.obj"
|
||||||
|
".\Release\ares_process.obj"
|
||||||
|
".\Release\ares_query.obj"
|
||||||
|
".\Release\ares_search.obj"
|
||||||
|
".\Release\ares_send.obj"
|
||||||
|
".\Release\ares_strerror.obj"
|
||||||
|
".\Release\ares_timeout.obj"
|
||||||
|
".\Release\windows_port.obj"
|
||||||
|
]
|
||||||
|
Creating command line "link.exe -lib @C:\DOCUME~1\liren\LOCALS~1\Temp\RSP603E.tmp"
|
||||||
|
<h3>Output Window</h3>
|
||||||
|
Compiling...
|
||||||
|
ares__close_sockets.c
|
||||||
|
Z:\ares-1.1.1\ares__close_sockets.c(46) : warning C4013: 'close' undefined; assuming extern returning int
|
||||||
|
ares__get_hostent.c
|
||||||
|
ares__read_line.c
|
||||||
|
ares_destroy.c
|
||||||
|
ares_expand_name.c
|
||||||
|
Z:\ares-1.1.1\nameser.h(153) : warning C4005: 'NOERROR' : macro redefinition
|
||||||
|
C:\Program Files\Microsoft Visual Studio\VC98\INCLUDE\winerror.h(8022) : see previous definition of 'NOERROR'
|
||||||
|
ares_fds.c
|
||||||
|
ares_free_errmem.c
|
||||||
|
ares_free_hostent.c
|
||||||
|
ares_free_string.c
|
||||||
|
ares_gethostbyaddr.c
|
||||||
|
Z:\ares-1.1.1\nameser.h(153) : warning C4005: 'NOERROR' : macro redefinition
|
||||||
|
C:\Program Files\Microsoft Visual Studio\VC98\INCLUDE\winerror.h(8022) : see previous definition of 'NOERROR'
|
||||||
|
ares_gethostbyname.c
|
||||||
|
Z:\ares-1.1.1\nameser.h(153) : warning C4005: 'NOERROR' : macro redefinition
|
||||||
|
C:\Program Files\Microsoft Visual Studio\VC98\INCLUDE\winerror.h(8022) : see previous definition of 'NOERROR'
|
||||||
|
ares_init.c
|
||||||
|
Z:\ares-1.1.1\nameser.h(153) : warning C4005: 'NOERROR' : macro redefinition
|
||||||
|
C:\Program Files\Microsoft Visual Studio\VC98\INCLUDE\winerror.h(8022) : see previous definition of 'NOERROR'
|
||||||
|
Z:\ares-1.1.1\ares_init.c(141) : warning C4013: '_getpid' undefined; assuming extern returning int
|
||||||
|
Z:\ares-1.1.1\ares_init.c(236) : warning C4101: 'p' : unreferenced local variable
|
||||||
|
Z:\ares-1.1.1\ares_init.c(237) : warning C4101: 'linesize' : unreferenced local variable
|
||||||
|
Z:\ares-1.1.1\ares_init.c(235) : warning C4101: 'fp' : unreferenced local variable
|
||||||
|
ares_mkquery.c
|
||||||
|
Z:\ares-1.1.1\nameser.h(153) : warning C4005: 'NOERROR' : macro redefinition
|
||||||
|
C:\Program Files\Microsoft Visual Studio\VC98\INCLUDE\winerror.h(8022) : see previous definition of 'NOERROR'
|
||||||
|
ares_parse_a_reply.c
|
||||||
|
Z:\ares-1.1.1\nameser.h(153) : warning C4005: 'NOERROR' : macro redefinition
|
||||||
|
C:\Program Files\Microsoft Visual Studio\VC98\INCLUDE\winerror.h(8022) : see previous definition of 'NOERROR'
|
||||||
|
Z:\ares-1.1.1\ares_parse_a_reply.c(90) : warning C4018: '<' : signed/unsigned mismatch
|
||||||
|
ares_parse_ptr_reply.c
|
||||||
|
Z:\ares-1.1.1\nameser.h(153) : warning C4005: 'NOERROR' : macro redefinition
|
||||||
|
C:\Program Files\Microsoft Visual Studio\VC98\INCLUDE\winerror.h(8022) : see previous definition of 'NOERROR'
|
||||||
|
Z:\ares-1.1.1\ares_parse_ptr_reply.c(71) : warning C4018: '<' : signed/unsigned mismatch
|
||||||
|
ares_process.c
|
||||||
|
Z:\ares-1.1.1\nameser.h(153) : warning C4005: 'NOERROR' : macro redefinition
|
||||||
|
C:\Program Files\Microsoft Visual Studio\VC98\INCLUDE\winerror.h(8022) : see previous definition of 'NOERROR'
|
||||||
|
ares_query.c
|
||||||
|
Z:\ares-1.1.1\nameser.h(153) : warning C4005: 'NOERROR' : macro redefinition
|
||||||
|
C:\Program Files\Microsoft Visual Studio\VC98\INCLUDE\winerror.h(8022) : see previous definition of 'NOERROR'
|
||||||
|
ares_search.c
|
||||||
|
Z:\ares-1.1.1\ares_search.c(229) : warning C4013: 'strncasecmp' undefined; assuming extern returning int
|
||||||
|
ares_send.c
|
||||||
|
Z:\ares-1.1.1\nameser.h(153) : warning C4005: 'NOERROR' : macro redefinition
|
||||||
|
C:\Program Files\Microsoft Visual Studio\VC98\INCLUDE\winerror.h(8022) : see previous definition of 'NOERROR'
|
||||||
|
ares_strerror.c
|
||||||
|
ares_timeout.c
|
||||||
|
windows_port.c
|
||||||
|
Z:\ares-1.1.1\nameser.h(153) : warning C4005: 'NOERROR' : macro redefinition
|
||||||
|
C:\Program Files\Microsoft Visual Studio\VC98\INCLUDE\winerror.h(8022) : see previous definition of 'NOERROR'
|
||||||
|
Creating library...
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<h3>Results</h3>
|
||||||
|
areslib.lib - 0 error(s), 19 warning(s)
|
||||||
|
</pre>
|
||||||
|
</body>
|
||||||
|
</html>
|
||||||
59
ares/vc/vc.dsw
Normal file
59
ares/vc/vc.dsw
Normal file
@@ -0,0 +1,59 @@
|
|||||||
|
Microsoft Developer Studio Workspace File, Format Version 6.00
|
||||||
|
# WARNING: DO NOT EDIT OR DELETE THIS WORKSPACE FILE!
|
||||||
|
|
||||||
|
###############################################################################
|
||||||
|
|
||||||
|
Project: "adig"=".\adig\adig.dsp" - Package Owner=<4>
|
||||||
|
|
||||||
|
Package=<5>
|
||||||
|
{{{
|
||||||
|
}}}
|
||||||
|
|
||||||
|
Package=<4>
|
||||||
|
{{{
|
||||||
|
Begin Project Dependency
|
||||||
|
Project_Dep_Name areslib
|
||||||
|
End Project Dependency
|
||||||
|
}}}
|
||||||
|
|
||||||
|
###############################################################################
|
||||||
|
|
||||||
|
Project: "ahost"=".\ahost\ahost.dsp" - Package Owner=<4>
|
||||||
|
|
||||||
|
Package=<5>
|
||||||
|
{{{
|
||||||
|
}}}
|
||||||
|
|
||||||
|
Package=<4>
|
||||||
|
{{{
|
||||||
|
Begin Project Dependency
|
||||||
|
Project_Dep_Name areslib
|
||||||
|
End Project Dependency
|
||||||
|
}}}
|
||||||
|
|
||||||
|
###############################################################################
|
||||||
|
|
||||||
|
Project: "areslib"=".\areslib\areslib.dsp" - Package Owner=<4>
|
||||||
|
|
||||||
|
Package=<5>
|
||||||
|
{{{
|
||||||
|
}}}
|
||||||
|
|
||||||
|
Package=<4>
|
||||||
|
{{{
|
||||||
|
}}}
|
||||||
|
|
||||||
|
###############################################################################
|
||||||
|
|
||||||
|
Global:
|
||||||
|
|
||||||
|
Package=<5>
|
||||||
|
{{{
|
||||||
|
}}}
|
||||||
|
|
||||||
|
Package=<3>
|
||||||
|
{{{
|
||||||
|
}}}
|
||||||
|
|
||||||
|
###############################################################################
|
||||||
|
|
||||||
BIN
ares/vc/vc.ncb
Normal file
BIN
ares/vc/vc.ncb
Normal file
Binary file not shown.
BIN
ares/vc/vc.opt
Normal file
BIN
ares/vc/vc.opt
Normal file
Binary file not shown.
61
ares/windows_port.c
Normal file
61
ares/windows_port.c
Normal file
@@ -0,0 +1,61 @@
|
|||||||
|
#include <stdio.h>
|
||||||
|
#include <stdlib.h>
|
||||||
|
#include <ctype.h>
|
||||||
|
#include <string.h>
|
||||||
|
|
||||||
|
#include "nameser.h"
|
||||||
|
|
||||||
|
int
|
||||||
|
strncasecmp(const char *a, const char *b, size_t n)
|
||||||
|
{
|
||||||
|
size_t i;
|
||||||
|
|
||||||
|
for (i = 0; i < n; i++) {
|
||||||
|
int c1 = isupper(a[i]) ? tolower(a[i]) : a[i];
|
||||||
|
int c2 = isupper(b[i]) ? tolower(b[i]) : b[i];
|
||||||
|
if (c1 != c2) return c1-c2;
|
||||||
|
}
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
int
|
||||||
|
strcasecmp(const char *a, const char *b)
|
||||||
|
{
|
||||||
|
return strncasecmp(a, b, strlen(a)+1);
|
||||||
|
}
|
||||||
|
|
||||||
|
int
|
||||||
|
ares_gettimeofday(struct timeval *tv, struct timezone *tz)
|
||||||
|
{
|
||||||
|
FILETIME ft;
|
||||||
|
LARGE_INTEGER li;
|
||||||
|
__int64 t;
|
||||||
|
static int tzflag;
|
||||||
|
|
||||||
|
if (tv)
|
||||||
|
{
|
||||||
|
GetSystemTimeAsFileTime(&ft);
|
||||||
|
li.LowPart = ft.dwLowDateTime;
|
||||||
|
li.HighPart = ft.dwHighDateTime;
|
||||||
|
t = li.QuadPart; /* In 100-nanosecond intervals */
|
||||||
|
//t -= EPOCHFILETIME; /* Offset to the Epoch time */
|
||||||
|
t /= 10; /* In microseconds */
|
||||||
|
tv->tv_sec = (long)(t / 1000000);
|
||||||
|
tv->tv_usec = (long)(t % 1000000);
|
||||||
|
}
|
||||||
|
|
||||||
|
#if 0
|
||||||
|
if (tz)
|
||||||
|
{
|
||||||
|
if (!tzflag)
|
||||||
|
{
|
||||||
|
_tzset();
|
||||||
|
tzflag++;
|
||||||
|
}
|
||||||
|
tz->tz_minuteswest = _timezone / 60;
|
||||||
|
tz->tz_dsttime = _daylight;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
@@ -6,7 +6,7 @@ $ loc = f$environment("PROCEDURE")
|
|||||||
$ def = f$parse("X.X;1",loc) - "X.X;1"
|
$ def = f$parse("X.X;1",loc) - "X.X;1"
|
||||||
$
|
$
|
||||||
$ set def 'def'
|
$ set def 'def'
|
||||||
$ cc_qual = "/define=HAVE_CONFIG_H=1/include=(""../include/"",""../"",""../../openssl-0_9_6c/include/"")"
|
$ cc_qual = "/define=HAVE_CONFIG_H=1/include=(""../include/"",""../"",""../../openssl-0_9_7/include/"")"
|
||||||
$ if p1 .eqs. "LISTING" then cc_qual = cc_qual + "/LIST/MACHINE"
|
$ if p1 .eqs. "LISTING" then cc_qual = cc_qual + "/LIST/MACHINE"
|
||||||
$ if p1 .eqs. "DEBUG" then cc_qual = cc_qual + "/LIST/MACHINE/DEBUG"
|
$ if p1 .eqs. "DEBUG" then cc_qual = cc_qual + "/LIST/MACHINE/DEBUG"
|
||||||
$ msg_qual = ""
|
$ msg_qual = ""
|
||||||
@@ -14,8 +14,8 @@ $ call build "[.lib]" "*.c"
|
|||||||
$ call build "[.src]" "*.c"
|
$ call build "[.src]" "*.c"
|
||||||
$ call build "[.src]" "*.msg"
|
$ call build "[.src]" "*.msg"
|
||||||
$ link /exe=curl.exe [.src]curl/lib/include=main,[.lib]curl/lib, -
|
$ link /exe=curl.exe [.src]curl/lib/include=main,[.lib]curl/lib, -
|
||||||
[-.openssl-0_9_6c.axp.exe.ssl]libssl/lib, -
|
[-.openssl-0_9_7.axp.exe.ssl]libssl/lib, -
|
||||||
[-.openssl-0_9_6c.axp.exe.crypto]libcrypto/lib
|
[-.openssl-0_9_7.axp.exe.crypto]libcrypto/lib
|
||||||
$
|
$
|
||||||
$
|
$
|
||||||
$ goto Common_Exit
|
$ goto Common_Exit
|
||||||
|
|||||||
143
buildconf
143
buildconf
@@ -5,7 +5,142 @@ die(){
|
|||||||
exit
|
exit
|
||||||
}
|
}
|
||||||
|
|
||||||
aclocal || die "The command 'aclocal' failed"
|
#--------------------------------------------------------------------------
|
||||||
autoheader || die "The command 'autoheader' failed"
|
# autoconf 2.57 or newer
|
||||||
autoconf || die "The command 'autoconf' failed"
|
#
|
||||||
automake -a || die "The command 'automake $MAKEFILES' failed"
|
need_autoconf="2.57"
|
||||||
|
ac_version=`${AUTOCONF:-autoconf} --version 2>/dev/null|head -1| sed -e 's/^[^0-9]*//' -e 's/[a-z]* *$//'`
|
||||||
|
if test -z "$ac_version"; then
|
||||||
|
echo "buildconf: autoconf not found."
|
||||||
|
echo " You need autoconf version $need_autoconf or newer installed."
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
IFS=.; set $ac_version; IFS=' '
|
||||||
|
if test "$1" = "2" -a "$2" -lt "57" || test "$1" -lt "2"; then
|
||||||
|
echo "buildconf: autoconf version $ac_version found."
|
||||||
|
echo " You need autoconf version $need_autoconf or newer installed."
|
||||||
|
echo " If you have a sufficient autoconf installed, but it"
|
||||||
|
echo " is not named 'autoconf', then try setting the"
|
||||||
|
echo " AUTOCONF environment variable."
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
echo "buildconf: autoconf version $ac_version (ok)"
|
||||||
|
|
||||||
|
#--------------------------------------------------------------------------
|
||||||
|
# autoheader 2.50 or newer
|
||||||
|
#
|
||||||
|
ah_version=`${AUTOHEADER:-autoheader} --version 2>/dev/null|head -1| sed -e 's/^[^0-9]*//' -e 's/[a-z]* *$//'`
|
||||||
|
if test -z "$ah_version"; then
|
||||||
|
echo "buildconf: autoheader not found."
|
||||||
|
echo " You need autoheader version 2.50 or newer installed."
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
IFS=.; set $ah_version; IFS=' '
|
||||||
|
if test "$1" = "2" -a "$2" -lt "50" || test "$1" -lt "2"; then
|
||||||
|
echo "buildconf: autoheader version $ah_version found."
|
||||||
|
echo " You need autoheader version 2.50 or newer installed."
|
||||||
|
echo " If you have a sufficient autoheader installed, but it"
|
||||||
|
echo " is not named 'autoheader', then try setting the"
|
||||||
|
echo " AUTOHEADER environment variable."
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
echo "buildconf: autoheader version $ah_version (ok)"
|
||||||
|
|
||||||
|
#--------------------------------------------------------------------------
|
||||||
|
# automake 1.7 or newer
|
||||||
|
#
|
||||||
|
need_automake="1.7"
|
||||||
|
am_version=`${AUTOMAKE:-automake} --version 2>/dev/null|head -1| sed -e 's/^.* \([0-9]\)/\1/' -e 's/[a-z]* *$//'`
|
||||||
|
if test -z "$am_version"; then
|
||||||
|
echo "buildconf: automake not found."
|
||||||
|
echo " You need automake version $need_automake or newer installed."
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
IFS=.; set $am_version; IFS=' '
|
||||||
|
if test "$1" = "1" -a "$2" -lt "7" || test "$1" -lt "1"; then
|
||||||
|
echo "buildconf: automake version $am_version found."
|
||||||
|
echo " You need automake version $need_automake or newer installed."
|
||||||
|
echo " If you have a sufficient automake installed, but it"
|
||||||
|
echo " is not named 'automake', then try setting the"
|
||||||
|
echo " AUTOMAKE environment variable."
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
echo "buildconf: automake version $am_version (ok)"
|
||||||
|
|
||||||
|
|
||||||
|
#--------------------------------------------------------------------------
|
||||||
|
# libtool check
|
||||||
|
#
|
||||||
|
LIBTOOL_WANTED_MAJOR=1
|
||||||
|
LIBTOOL_WANTED_MINOR=4
|
||||||
|
LIBTOOL_WANTED_PATCH=2
|
||||||
|
LIBTOOL_WANTED_VERSION=1.4.2
|
||||||
|
|
||||||
|
libtool=`which glibtool 2>/dev/null`
|
||||||
|
if test ! -x "$libtool"; then
|
||||||
|
libtool=`which libtool`
|
||||||
|
fi
|
||||||
|
#lt_pversion=`${LIBTOOL:-$libtool} --version 2>/dev/null|head -1| sed -e 's/^.* \([0-9]\)/\1/' -e 's/[a-z]* *$//'`
|
||||||
|
lt_pversion=`$libtool --version 2>/dev/null|head -1|sed -e 's/^[^0-9]*//g' -e 's/[- ].*//'`
|
||||||
|
if test -z "$lt_pversion"; then
|
||||||
|
echo "buildconf: libtool not found."
|
||||||
|
echo " You need libtool version $LIBTOOL_WANTED_VERSION or newer installed"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
lt_version=`echo $lt_pversion|sed -e 's/\([a-z]*\)$//'`
|
||||||
|
IFS=.; set $lt_version; IFS=' '
|
||||||
|
lt_status="good"
|
||||||
|
|
||||||
|
major=$1
|
||||||
|
minor=$2
|
||||||
|
patch=$3
|
||||||
|
|
||||||
|
if test "$major" = "$LIBTOOL_WANTED_MAJOR"; then
|
||||||
|
if test "$minor" -lt "$LIBTOOL_WANTED_MINOR"; then
|
||||||
|
lt_status="bad"
|
||||||
|
elif test -n "$LIBTOOL_WANTED_PATCH"; then
|
||||||
|
if test "$minor" -gt "$LIBTOOL_WANTED_MINOR"; then
|
||||||
|
lt_status="good"
|
||||||
|
elif test -n "$patch"; then
|
||||||
|
if test "$patch" -lt "$LIBTOOL_WANTED_PATCH"; then
|
||||||
|
lt_status="bad"
|
||||||
|
fi
|
||||||
|
else
|
||||||
|
lt_status="bad"
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
if test $lt_status != "good"; then
|
||||||
|
echo "buildconf: libtool version $lt_pversion found."
|
||||||
|
echo " You need libtool version $LIBTOOL_WANTED_VERSION or newer installed"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
echo "buildconf: libtool version $lt_version (ok)"
|
||||||
|
|
||||||
|
# ------------------------------------------------------------
|
||||||
|
|
||||||
|
# run the correct scripts now
|
||||||
|
|
||||||
|
echo "buildconf: running libtoolize"
|
||||||
|
${LIBTOOLIZE:-libtoolize} --copy --automake || die "The command '${LIBTOOLIZE:-libtoolize} --copy --automake' failed"
|
||||||
|
echo "buildconf: running aclocal"
|
||||||
|
${ACLOCAL:-aclocal} || die "The command '${AUTOHEADER:-aclocal}' failed"
|
||||||
|
echo "buildconf: running autoheader"
|
||||||
|
${AUTOHEADER:-autoheader} || die "The command '${AUTOHEADER:-autoheader}' failed"
|
||||||
|
echo "buildconf: running autoconf"
|
||||||
|
${AUTOCONF:-autoconf} || die "The command '${AUTOCONF:-autoconf}' failed"
|
||||||
|
|
||||||
|
if test -d ares; then
|
||||||
|
echo "buildconf: running autoconf in the ares directory"
|
||||||
|
cd ares
|
||||||
|
${AUTOCONF:-autoconf} || die "The command '${AUTOCONF:-autoconf}' failed"
|
||||||
|
cd ..
|
||||||
|
fi
|
||||||
|
|
||||||
|
echo "buildconf: running automake"
|
||||||
|
${AUTOMAKE:-automake} -a || die "The command '${AUTOMAKE:-automake} -a' failed"
|
||||||
|
exit 0
|
||||||
|
|||||||
1103
configure.ac
Normal file
1103
configure.ac
Normal file
File diff suppressed because it is too large
Load Diff
618
configure.in
618
configure.in
@@ -1,618 +0,0 @@
|
|||||||
dnl $Id$
|
|
||||||
dnl Process this file with autoconf to produce a configure script.
|
|
||||||
|
|
||||||
dnl Ensure that this file is processed with autoconf 2.50 or newer
|
|
||||||
dnl Don't even think about removing this check!
|
|
||||||
AC_PREREQ(2.50)
|
|
||||||
|
|
||||||
dnl First some basic init macros
|
|
||||||
AC_INIT
|
|
||||||
AC_CONFIG_SRCDIR([lib/urldata.h])
|
|
||||||
AM_CONFIG_HEADER(lib/config.h src/config.h tests/server/config.h)
|
|
||||||
|
|
||||||
dnl figure out the libcurl version
|
|
||||||
VERSION=`sed -ne 's/^#define LIBCURL_VERSION "\(.*\)"/\1/p' ${srcdir}/include/curl/curl.h`
|
|
||||||
AM_INIT_AUTOMAKE(curl,$VERSION)
|
|
||||||
|
|
||||||
dnl
|
|
||||||
dnl we extract the numerical version for curl-config only
|
|
||||||
VERSIONNUM=`sed -ne 's/^#define LIBCURL_VERSION_NUM 0x\(.*\)/\1/p' ${srcdir}/include/curl/curl.h`
|
|
||||||
AC_SUBST(VERSIONNUM)
|
|
||||||
|
|
||||||
dnl Solaris pkgadd support definitions
|
|
||||||
PKGADD_PKG="HAXXcurl"
|
|
||||||
PKGADD_NAME="cURL - a client that groks URLs"
|
|
||||||
PKGADD_VENDOR="curl.haxx.se"
|
|
||||||
AC_SUBST(PKGADD_PKG)
|
|
||||||
AC_SUBST(PKGADD_NAME)
|
|
||||||
AC_SUBST(PKGADD_VENDOR)
|
|
||||||
|
|
||||||
|
|
||||||
dnl
|
|
||||||
dnl Detect the canonical host and target build environment
|
|
||||||
dnl
|
|
||||||
|
|
||||||
AC_CANONICAL_HOST
|
|
||||||
dnl Get system canonical name
|
|
||||||
AC_DEFINE_UNQUOTED(OS, "${host}")
|
|
||||||
|
|
||||||
dnl Check for AIX weirdos
|
|
||||||
AC_AIX
|
|
||||||
|
|
||||||
dnl Checks for programs.
|
|
||||||
AC_PROG_CC
|
|
||||||
|
|
||||||
dnl check for how to do large files
|
|
||||||
AC_SYS_LARGEFILE
|
|
||||||
|
|
||||||
dnl check for cygwin stuff
|
|
||||||
AC_LIBTOOL_WIN32_DLL
|
|
||||||
|
|
||||||
dnl libtool setup
|
|
||||||
AM_PROG_LIBTOOL
|
|
||||||
|
|
||||||
dnl The install stuff has already been taken care of by the automake stuff
|
|
||||||
dnl AC_PROG_INSTALL
|
|
||||||
AC_PROG_MAKE_SET
|
|
||||||
|
|
||||||
dnl ************************************************************
|
|
||||||
dnl lame option to switch on debug options
|
|
||||||
dnl
|
|
||||||
AC_MSG_CHECKING([whether to enable debug options])
|
|
||||||
AC_ARG_ENABLE(debug,
|
|
||||||
[ --enable-debug Enable pedantic debug options
|
|
||||||
--disable-debug Disable debug options],
|
|
||||||
[ case "$enableval" in
|
|
||||||
no)
|
|
||||||
AC_MSG_RESULT(no)
|
|
||||||
;;
|
|
||||||
*) AC_MSG_RESULT(yes)
|
|
||||||
|
|
||||||
CPPFLAGS="$CPPFLAGS -DMALLOCDEBUG"
|
|
||||||
CFLAGS="-W -Wall -Wwrite-strings -pedantic -Wundef -Wpointer-arith -Wcast-align -Wnested-externs -g"
|
|
||||||
;;
|
|
||||||
esac ],
|
|
||||||
AC_MSG_RESULT(no)
|
|
||||||
)
|
|
||||||
|
|
||||||
dnl **********************************************************************
|
|
||||||
dnl Checks for IPv6
|
|
||||||
dnl **********************************************************************
|
|
||||||
|
|
||||||
AC_MSG_CHECKING([whether to enable ipv6])
|
|
||||||
AC_ARG_ENABLE(ipv6,
|
|
||||||
[ --enable-ipv6 Enable ipv6 (with ipv4) support
|
|
||||||
--disable-ipv6 Disable ipv6 support],
|
|
||||||
[ case "$enableval" in
|
|
||||||
no)
|
|
||||||
AC_MSG_RESULT(no)
|
|
||||||
ipv6=no
|
|
||||||
;;
|
|
||||||
*) AC_MSG_RESULT(yes)
|
|
||||||
ipv6=yes
|
|
||||||
;;
|
|
||||||
esac ],
|
|
||||||
|
|
||||||
AC_TRY_RUN([ /* is AF_INET6 available? */
|
|
||||||
#include <sys/types.h>
|
|
||||||
#include <sys/socket.h>
|
|
||||||
main()
|
|
||||||
{
|
|
||||||
if (socket(AF_INET6, SOCK_STREAM, 0) < 0)
|
|
||||||
exit(1);
|
|
||||||
else
|
|
||||||
exit(0);
|
|
||||||
}
|
|
||||||
],
|
|
||||||
AC_MSG_RESULT(yes)
|
|
||||||
ipv6=yes,
|
|
||||||
AC_MSG_RESULT(no)
|
|
||||||
ipv6=no,
|
|
||||||
AC_MSG_RESULT(no)
|
|
||||||
ipv6=no
|
|
||||||
))
|
|
||||||
|
|
||||||
if test "$ipv6" = "yes"; then
|
|
||||||
CURL_CHECK_WORKING_GETADDRINFO
|
|
||||||
fi
|
|
||||||
|
|
||||||
|
|
||||||
dnl **********************************************************************
|
|
||||||
dnl Checks for libraries.
|
|
||||||
dnl **********************************************************************
|
|
||||||
|
|
||||||
dnl gethostbyname in the nsl lib?
|
|
||||||
AC_CHECK_FUNC(gethostbyname, , AC_CHECK_LIB(nsl, gethostbyname))
|
|
||||||
|
|
||||||
if test "$ac_cv_lib_nsl_gethostbyname" != "yes" -a "$ac_cv_func_gethostbyname" != "yes"; then
|
|
||||||
dnl gethostbyname in the socket lib?
|
|
||||||
AC_CHECK_FUNC(gethostbyname, , AC_CHECK_LIB(socket, gethostbyname))
|
|
||||||
fi
|
|
||||||
|
|
||||||
dnl At least one system has been identified to require BOTH nsl and
|
|
||||||
dnl socket libs to link properly.
|
|
||||||
if test "$ac_cv_lib_nsl_gethostbyname" = "$ac_cv_func_gethostbyname"; then
|
|
||||||
AC_MSG_CHECKING([trying both nsl and socket libs])
|
|
||||||
my_ac_save_LIBS=$LIBS
|
|
||||||
LIBS="-lnsl -lsocket $LIBS"
|
|
||||||
AC_TRY_LINK( ,
|
|
||||||
[gethostbyname();],
|
|
||||||
my_ac_link_result=success,
|
|
||||||
my_ac_link_result=failure )
|
|
||||||
|
|
||||||
if test "$my_ac_link_result" = "failure"; then
|
|
||||||
AC_MSG_RESULT([no])
|
|
||||||
AC_MSG_ERROR([couldn't find libraries for gethostbyname()])
|
|
||||||
dnl restore LIBS
|
|
||||||
LIBS=$my_ac_save_LIBS
|
|
||||||
else
|
|
||||||
AC_MSG_RESULT([yes])
|
|
||||||
fi
|
|
||||||
fi
|
|
||||||
|
|
||||||
dnl resolve lib?
|
|
||||||
AC_CHECK_FUNC(strcasecmp, , AC_CHECK_LIB(resolve, strcasecmp))
|
|
||||||
|
|
||||||
if test "$ac_cv_lib_resolve_strcasecmp" = "$ac_cv_func_strcasecmp"; then
|
|
||||||
AC_CHECK_LIB(resolve, strcasecmp,
|
|
||||||
[LIBS="-lresolve $LIBS"],
|
|
||||||
,
|
|
||||||
-lnsl)
|
|
||||||
fi
|
|
||||||
|
|
||||||
dnl socket lib?
|
|
||||||
AC_CHECK_FUNC(connect, , AC_CHECK_LIB(socket, connect))
|
|
||||||
|
|
||||||
dnl ucb lib?
|
|
||||||
AC_CHECK_FUNC(gethostname, , AC_CHECK_LIB(ucb, gethostname))
|
|
||||||
|
|
||||||
dnl dl lib?
|
|
||||||
AC_CHECK_FUNC(dlclose, , AC_CHECK_LIB(dl, dlopen))
|
|
||||||
|
|
||||||
dnl **********************************************************************
|
|
||||||
dnl Check how non-blocking sockets are set
|
|
||||||
dnl **********************************************************************
|
|
||||||
AC_ARG_ENABLE(nonblocking,
|
|
||||||
[ --enable-nonblocking Makes the script detect how to do it
|
|
||||||
--disable-nonblocking Makes the script disable non-blocking sockets],
|
|
||||||
[
|
|
||||||
if test "$enableval" = "no" ; then
|
|
||||||
AC_MSG_WARN([non-blocking sockets disabled])
|
|
||||||
AC_DEFINE(HAVE_DISABLED_NONBLOCKING)
|
|
||||||
else
|
|
||||||
CURL_CHECK_NONBLOCKING_SOCKET
|
|
||||||
fi
|
|
||||||
],
|
|
||||||
[
|
|
||||||
CURL_CHECK_NONBLOCKING_SOCKET
|
|
||||||
])
|
|
||||||
|
|
||||||
dnl **********************************************************************
|
|
||||||
dnl Check for the random seed preferences
|
|
||||||
dnl **********************************************************************
|
|
||||||
|
|
||||||
AC_ARG_WITH(egd-socket,
|
|
||||||
[ --with-egd-socket=FILE Entropy Gathering Daemon socket pathname],
|
|
||||||
[ EGD_SOCKET="$withval" ]
|
|
||||||
)
|
|
||||||
if test -n "$EGD_SOCKET" ; then
|
|
||||||
AC_DEFINE_UNQUOTED(EGD_SOCKET, "$EGD_SOCKET")
|
|
||||||
fi
|
|
||||||
|
|
||||||
dnl Check for user-specified random device
|
|
||||||
AC_ARG_WITH(random,
|
|
||||||
[ --with-random=FILE read randomness from FILE (default=/dev/urandom)],
|
|
||||||
[ RANDOM_FILE="$withval" ],
|
|
||||||
[
|
|
||||||
dnl Check for random device
|
|
||||||
AC_CHECK_FILE("/dev/urandom",
|
|
||||||
[
|
|
||||||
RANDOM_FILE="/dev/urandom";
|
|
||||||
]
|
|
||||||
)
|
|
||||||
]
|
|
||||||
)
|
|
||||||
if test -n "$RANDOM_FILE" ; then
|
|
||||||
AC_SUBST(RANDOM_FILE)
|
|
||||||
AC_DEFINE_UNQUOTED(RANDOM_FILE, "$RANDOM_FILE")
|
|
||||||
fi
|
|
||||||
|
|
||||||
dnl **********************************************************************
|
|
||||||
dnl Check for the presence of Kerberos4 libraries and headers
|
|
||||||
dnl **********************************************************************
|
|
||||||
|
|
||||||
AC_ARG_WITH(krb4-includes,
|
|
||||||
[ --with-krb4-includes[=DIR] Specify location of kerberos4 headers],[
|
|
||||||
CPPFLAGS="$CPPFLAGS -I$withval"
|
|
||||||
KRB4INC="$withval"
|
|
||||||
want_krb4=yes
|
|
||||||
])
|
|
||||||
|
|
||||||
AC_ARG_WITH(krb4-libs,
|
|
||||||
[ --with-krb4-libs[=DIR] Specify location of kerberos4 libs],[
|
|
||||||
LDFLAGS="$LDFLAGS -L$withval"
|
|
||||||
KRB4LIB="$withval"
|
|
||||||
want_krb4=yes
|
|
||||||
])
|
|
||||||
|
|
||||||
|
|
||||||
OPT_KRB4=off
|
|
||||||
AC_ARG_WITH(krb4,dnl
|
|
||||||
[ --with-krb4[=DIR] where to look for Kerberos4],[
|
|
||||||
OPT_KRB4="$withval"
|
|
||||||
if test X"$OPT_KRB4" != Xyes
|
|
||||||
then
|
|
||||||
LDFLAGS="$LDFLAGS -L$OPT_KRB4/lib"
|
|
||||||
KRB4LIB="$OPT_KRB4/lib"
|
|
||||||
CPPFLAGS="$CPPFLAGS -I$OPT_KRB4/include"
|
|
||||||
KRB4INC="$OPT_KRB4/include"
|
|
||||||
fi
|
|
||||||
want_krb4="yes"
|
|
||||||
])
|
|
||||||
|
|
||||||
AC_MSG_CHECKING([if Kerberos4 support is requested])
|
|
||||||
|
|
||||||
if test "$want_krb4" = yes
|
|
||||||
then
|
|
||||||
if test "$ipv6" = "yes"; then
|
|
||||||
echo krb4 is not compatible with IPv6
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
AC_MSG_RESULT(yes)
|
|
||||||
|
|
||||||
dnl Check for & handle argument to --with-krb4
|
|
||||||
|
|
||||||
AC_MSG_CHECKING(where to look for Kerberos4)
|
|
||||||
if test X"$OPT_KRB4" = Xyes
|
|
||||||
then
|
|
||||||
AC_MSG_RESULT([defaults])
|
|
||||||
else
|
|
||||||
AC_MSG_RESULT([libs in $KRB4LIB, headers in $KRB4INC])
|
|
||||||
fi
|
|
||||||
|
|
||||||
dnl Check for DES library
|
|
||||||
AC_CHECK_LIB(des, des_pcbc_encrypt,
|
|
||||||
[
|
|
||||||
AC_CHECK_HEADERS(des.h)
|
|
||||||
|
|
||||||
dnl resolv lib?
|
|
||||||
AC_CHECK_FUNC(res_search, , AC_CHECK_LIB(resolv, res_search))
|
|
||||||
|
|
||||||
dnl Check for the Kerberos4 library
|
|
||||||
AC_CHECK_LIB(krb, krb_net_read,
|
|
||||||
[
|
|
||||||
dnl Check for header files
|
|
||||||
AC_CHECK_HEADERS(krb.h)
|
|
||||||
|
|
||||||
dnl we found the required libraries, add to LIBS
|
|
||||||
LIBS="-lkrb -ldes $LIBS"
|
|
||||||
|
|
||||||
dnl Check for function krb_get_our_ip_for_realm
|
|
||||||
dnl this is needed for NAT networks
|
|
||||||
AC_CHECK_FUNCS(krb_get_our_ip_for_realm)
|
|
||||||
|
|
||||||
dnl add define KRB4
|
|
||||||
AC_DEFINE(KRB4)
|
|
||||||
|
|
||||||
dnl substitute it too!
|
|
||||||
KRB4_ENABLED=1
|
|
||||||
AC_SUBST(KRB4_ENABLED)
|
|
||||||
|
|
||||||
dnl the krb4 stuff needs a strlcpy()
|
|
||||||
AC_CHECK_FUNCS(strlcpy)
|
|
||||||
|
|
||||||
])
|
|
||||||
])
|
|
||||||
else
|
|
||||||
AC_MSG_RESULT(no)
|
|
||||||
fi
|
|
||||||
|
|
||||||
|
|
||||||
dnl **********************************************************************
|
|
||||||
dnl Check for the presence of SSL libraries and headers
|
|
||||||
dnl **********************************************************************
|
|
||||||
|
|
||||||
dnl Default to compiler & linker defaults for SSL files & libraries.
|
|
||||||
OPT_SSL=off
|
|
||||||
AC_ARG_WITH(ssl,dnl
|
|
||||||
[ --with-ssl[=DIR] where to look for SSL [compiler/linker default paths]
|
|
||||||
DIR points to the SSL installation [/usr/local/ssl]],
|
|
||||||
OPT_SSL=$withval
|
|
||||||
)
|
|
||||||
|
|
||||||
if test X"$OPT_SSL" = Xno
|
|
||||||
then
|
|
||||||
AC_MSG_WARN(SSL/https support disabled)
|
|
||||||
else
|
|
||||||
|
|
||||||
dnl Check for and handle argument to --with-ssl.
|
|
||||||
|
|
||||||
dnl save the pre-ssl check flags for a while
|
|
||||||
CLEANLDFLAGS="$LDFLAGS"
|
|
||||||
CLEANCPPFLAGS="$CPPFLAGS"
|
|
||||||
|
|
||||||
case "$OPT_SSL" in
|
|
||||||
yes)
|
|
||||||
EXTRA_SSL=/usr/local/ssl ;;
|
|
||||||
off)
|
|
||||||
EXTRA_SSL= ;;
|
|
||||||
*)
|
|
||||||
dnl check the given spot right away!
|
|
||||||
EXTRA_SSL=$OPT_SSL
|
|
||||||
LDFLAGS="$LDFLAGS -L$EXTRA_SSL/lib"
|
|
||||||
CPPFLAGS="$CPPFLAGS -I$EXTRA_SSL/include/openssl -I$EXTRA_SSL/include"
|
|
||||||
;;
|
|
||||||
esac
|
|
||||||
|
|
||||||
AC_CHECK_LIB(crypto, CRYPTO_lock,[
|
|
||||||
HAVECRYPTO="yes"
|
|
||||||
],[
|
|
||||||
OLDLDFLAGS="$LDFLAGS"
|
|
||||||
OLDCPPFLAGS="$CPPFLAGS"
|
|
||||||
LDFLAGS="$CLEANLDFLAGS -L$EXTRA_SSL/lib"
|
|
||||||
CPPFLAGS="$CLEANCPPFLAGS -I$EXTRA_SSL/include/openssl -I$EXTRA_SSL/include"
|
|
||||||
AC_CHECK_LIB(crypto, CRYPTO_add_lock,[
|
|
||||||
HAVECRYPTO="yes" ], [
|
|
||||||
LDFLAGS="$OLDLDFLAGS"
|
|
||||||
CPPFLAGS="$OLDCPPFLAGS"
|
|
||||||
])
|
|
||||||
])
|
|
||||||
|
|
||||||
|
|
||||||
if test "$HAVECRYPTO" = "yes"; then
|
|
||||||
dnl This is only reasonable to do if crypto actually is there: check for
|
|
||||||
dnl SSL libs NOTE: it is important to do this AFTER the crypto lib
|
|
||||||
|
|
||||||
AC_CHECK_LIB(crypto, CRYPTO_add_lock)
|
|
||||||
AC_CHECK_LIB(ssl, SSL_connect)
|
|
||||||
|
|
||||||
if test "$ac_cv_lib_ssl_SSL_connect" != yes; then
|
|
||||||
dnl we didn't find the SSL lib, try the RSAglue/rsaref stuff
|
|
||||||
AC_MSG_CHECKING(for ssl with RSAglue/rsaref libs in use);
|
|
||||||
OLIBS=$LIBS
|
|
||||||
LIBS="$LIBS -lRSAglue -lrsaref"
|
|
||||||
AC_CHECK_LIB(ssl, SSL_connect)
|
|
||||||
if test "$ac_cv_lib_ssl_SSL_connect" != yes; then
|
|
||||||
dnl still no SSL_connect
|
|
||||||
AC_MSG_RESULT(no)
|
|
||||||
LIBS=$OLIBS
|
|
||||||
else
|
|
||||||
AC_MSG_RESULT(yes)
|
|
||||||
fi
|
|
||||||
fi
|
|
||||||
|
|
||||||
|
|
||||||
dnl Check for SSLeay headers
|
|
||||||
AC_CHECK_HEADERS(openssl/x509.h openssl/rsa.h openssl/crypto.h \
|
|
||||||
openssl/pem.h openssl/ssl.h openssl/err.h,
|
|
||||||
OPENSSL_ENABLED=1)
|
|
||||||
|
|
||||||
if test $ac_cv_header_openssl_x509_h = no; then
|
|
||||||
AC_CHECK_HEADERS(x509.h rsa.h crypto.h pem.h ssl.h err.h,
|
|
||||||
OPENSSL_ENABLED=1)
|
|
||||||
fi
|
|
||||||
|
|
||||||
dnl Check for the OpenSSL engine header, it is kind of "separated"
|
|
||||||
dnl from the main SSL check
|
|
||||||
AC_CHECK_HEADERS(openssl/engine.h)
|
|
||||||
|
|
||||||
AC_SUBST(OPENSSL_ENABLED)
|
|
||||||
|
|
||||||
fi
|
|
||||||
|
|
||||||
if test X"$OPT_SSL" != Xoff &&
|
|
||||||
test "$OPENSSL_ENABLED" != "1"; then
|
|
||||||
AC_MSG_ERROR([OpenSSL libs and/or directories were not found where specified!])
|
|
||||||
fi
|
|
||||||
|
|
||||||
|
|
||||||
dnl these can only exist if openssl exists
|
|
||||||
|
|
||||||
AC_CHECK_FUNCS( RAND_status \
|
|
||||||
RAND_screen \
|
|
||||||
RAND_egd )
|
|
||||||
|
|
||||||
fi
|
|
||||||
|
|
||||||
dnl **********************************************************************
|
|
||||||
dnl Check for the presence of ZLIB libraries and headers
|
|
||||||
dnl **********************************************************************
|
|
||||||
|
|
||||||
dnl Default to compiler & linker defaults for files & libraries.
|
|
||||||
dnl OPT_ZLIB=no
|
|
||||||
dnl AC_ARG_WITH(zlib,dnl
|
|
||||||
dnl [ --with-zlib[=DIR] where to look for ZLIB [compiler/linker default paths]
|
|
||||||
dnl DIR points to the ZLIB installation prefix [/usr/local]],
|
|
||||||
dnl OPT_ZLIB=$withval,
|
|
||||||
dnl )
|
|
||||||
|
|
||||||
dnl Check for & handle argument to --with-zlib.
|
|
||||||
dnl
|
|
||||||
dnl NOTE: We *always* look for ZLIB headers & libraries, all this option
|
|
||||||
dnl does is change where we look (by adjusting LIBS and CPPFLAGS.)
|
|
||||||
dnl
|
|
||||||
|
|
||||||
dnl AC_MSG_CHECKING(where to look for ZLIB)
|
|
||||||
dnl if test X"$OPT_ZLIB" = Xno
|
|
||||||
dnl then
|
|
||||||
dnl AC_MSG_RESULT([defaults (or given in environment)])
|
|
||||||
dnl else
|
|
||||||
dnl test X"$OPT_ZLIB" = Xyes && OPT_ZLIB=/usr/local
|
|
||||||
dnl LIBS="$LIBS -L$OPT_ZLIB/lib"
|
|
||||||
dnl CPPFLAGS="$CPPFLAGS -I$OPT_ZLIB/include"
|
|
||||||
dnl AC_MSG_RESULT([$OPT_ZLIB])
|
|
||||||
dnl fi
|
|
||||||
|
|
||||||
dnl z lib?
|
|
||||||
dnl AC_CHECK_FUNC(gzread, , AC_CHECK_LIB(z, gzread))
|
|
||||||
|
|
||||||
|
|
||||||
dnl Default is to try the thread-safe versions of a few functions
|
|
||||||
OPT_THREAD=on
|
|
||||||
AC_ARG_ENABLE(thread,dnl
|
|
||||||
[ --disable-thread tell configure to not look for thread-safe functions],
|
|
||||||
OPT_THREAD=off
|
|
||||||
)
|
|
||||||
|
|
||||||
if test X"$OPT_THREAD" = Xoff
|
|
||||||
then
|
|
||||||
AC_MSG_WARN(libcurl will not get built using thread-safe functions)
|
|
||||||
AC_DEFINE(DISABLED_THREADSAFE, 1, \
|
|
||||||
Set to explicitly specify we don't want to use thread-safe functions)
|
|
||||||
else
|
|
||||||
|
|
||||||
dnl dig around for gethostbyname_r()
|
|
||||||
CURL_CHECK_GETHOSTBYNAME_R()
|
|
||||||
|
|
||||||
dnl dig around for gethostbyaddr_r()
|
|
||||||
CURL_CHECK_GETHOSTBYADDR_R()
|
|
||||||
|
|
||||||
dnl poke around for inet_ntoa_r()
|
|
||||||
CURL_CHECK_INET_NTOA_R()
|
|
||||||
|
|
||||||
dnl is there a localtime_r()
|
|
||||||
CURL_CHECK_LOCALTIME_R()
|
|
||||||
|
|
||||||
AC_CHECK_FUNCS( gmtime_r )
|
|
||||||
|
|
||||||
fi
|
|
||||||
|
|
||||||
dnl **********************************************************************
|
|
||||||
dnl Back to "normal" configuring
|
|
||||||
dnl **********************************************************************
|
|
||||||
|
|
||||||
dnl Checks for header files.
|
|
||||||
AC_HEADER_STDC
|
|
||||||
AC_CHECK_HEADERS( \
|
|
||||||
unistd.h \
|
|
||||||
malloc.h \
|
|
||||||
stdlib.h \
|
|
||||||
arpa/inet.h \
|
|
||||||
net/if.h \
|
|
||||||
netinet/in.h \
|
|
||||||
netinet/if_ether.h \
|
|
||||||
netdb.h \
|
|
||||||
sys/select.h \
|
|
||||||
sys/socket.h \
|
|
||||||
sys/sockio.h \
|
|
||||||
sys/stat.h \
|
|
||||||
sys/types.h \
|
|
||||||
sys/time.h \
|
|
||||||
sys/param.h \
|
|
||||||
termios.h \
|
|
||||||
termio.h \
|
|
||||||
sgtty.h \
|
|
||||||
fcntl.h \
|
|
||||||
dlfcn.h \
|
|
||||||
alloca.h \
|
|
||||||
winsock.h \
|
|
||||||
time.h \
|
|
||||||
io.h \
|
|
||||||
pwd.h \
|
|
||||||
utime.h \
|
|
||||||
sys/utime.h
|
|
||||||
)
|
|
||||||
|
|
||||||
dnl Check for libz header
|
|
||||||
dnl AC_CHECK_HEADERS(zlib.h)
|
|
||||||
|
|
||||||
dnl Checks for typedefs, structures, and compiler characteristics.
|
|
||||||
AC_C_CONST
|
|
||||||
AC_TYPE_SIZE_T
|
|
||||||
AC_HEADER_TIME
|
|
||||||
|
|
||||||
# mprintf() checks:
|
|
||||||
|
|
||||||
# check for 'long double'
|
|
||||||
# AC_CHECK_SIZEOF(long double, 8)
|
|
||||||
# check for 'long long'
|
|
||||||
# AC_CHECK_SIZEOF(long long, 4)
|
|
||||||
|
|
||||||
# check for ssize_t
|
|
||||||
AC_CHECK_TYPE(ssize_t, int)
|
|
||||||
|
|
||||||
TYPE_SOCKLEN_T
|
|
||||||
TYPE_IN_ADDR_T
|
|
||||||
|
|
||||||
dnl Checks for library functions.
|
|
||||||
dnl AC_PROG_GCC_TRADITIONAL
|
|
||||||
AC_TYPE_SIGNAL
|
|
||||||
dnl AC_FUNC_VPRINTF
|
|
||||||
AC_CHECK_FUNCS( socket \
|
|
||||||
select \
|
|
||||||
strdup \
|
|
||||||
strstr \
|
|
||||||
strtok_r \
|
|
||||||
strftime \
|
|
||||||
uname \
|
|
||||||
strcasecmp \
|
|
||||||
stricmp \
|
|
||||||
strcmpi \
|
|
||||||
gethostname \
|
|
||||||
gethostbyaddr \
|
|
||||||
gettimeofday \
|
|
||||||
inet_addr \
|
|
||||||
inet_ntoa \
|
|
||||||
tcsetattr \
|
|
||||||
tcgetattr \
|
|
||||||
perror \
|
|
||||||
closesocket \
|
|
||||||
setvbuf \
|
|
||||||
sigaction \
|
|
||||||
signal \
|
|
||||||
getpass_r \
|
|
||||||
strlcat \
|
|
||||||
getpwuid \
|
|
||||||
geteuid \
|
|
||||||
dlopen \
|
|
||||||
utime
|
|
||||||
)
|
|
||||||
|
|
||||||
dnl removed 'getpass' check on October 26, 2000
|
|
||||||
|
|
||||||
if test "$ac_cv_func_select" != "yes"; then
|
|
||||||
AC_MSG_ERROR(Can't work without an existing select() function)
|
|
||||||
fi
|
|
||||||
if test "$ac_cv_func_socket" != "yes"; then
|
|
||||||
AC_MSG_ERROR(Can't work without an existing socket() function)
|
|
||||||
fi
|
|
||||||
|
|
||||||
AC_PATH_PROG( PERL, perl, ,
|
|
||||||
$PATH:/usr/local/bin/perl:/usr/bin/:/usr/local/bin )
|
|
||||||
AC_SUBST(PERL)
|
|
||||||
|
|
||||||
AC_PATH_PROGS( NROFF, gnroff nroff, ,
|
|
||||||
$PATH:/usr/bin/:/usr/local/bin )
|
|
||||||
AC_SUBST(NROFF)
|
|
||||||
|
|
||||||
AC_PROG_YACC
|
|
||||||
|
|
||||||
dnl AC_PATH_PROG( RANLIB, ranlib, /usr/bin/ranlib,
|
|
||||||
dnl $PATH:/usr/bin/:/usr/local/bin )
|
|
||||||
dnl AC_SUBST(RANLIB)
|
|
||||||
|
|
||||||
AC_CONFIG_FILES([Makefile \
|
|
||||||
docs/Makefile \
|
|
||||||
docs/examples/Makefile \
|
|
||||||
docs/libcurl/Makefile \
|
|
||||||
include/Makefile \
|
|
||||||
include/curl/Makefile \
|
|
||||||
src/Makefile \
|
|
||||||
lib/Makefile \
|
|
||||||
tests/Makefile \
|
|
||||||
tests/data/Makefile \
|
|
||||||
tests/server/Makefile \
|
|
||||||
packages/Makefile \
|
|
||||||
packages/Win32/Makefile \
|
|
||||||
packages/Win32/cygwin/Makefile \
|
|
||||||
packages/Linux/Makefile \
|
|
||||||
packages/Linux/RPM/Makefile \
|
|
||||||
packages/Linux/RPM/curl.spec \
|
|
||||||
packages/Linux/RPM/curl-ssl.spec \
|
|
||||||
packages/Solaris/Makefile \
|
|
||||||
packages/EPM/curl.list \
|
|
||||||
packages/EPM/Makefile \
|
|
||||||
curl-config
|
|
||||||
])
|
|
||||||
AC_OUTPUT
|
|
||||||
|
|
||||||
@@ -16,6 +16,7 @@ Usage: curl-config [OPTION]
|
|||||||
|
|
||||||
Available values for OPTION include:
|
Available values for OPTION include:
|
||||||
|
|
||||||
|
--ca ca bundle install path
|
||||||
--cc compiler
|
--cc compiler
|
||||||
--cflags pre-processor and compiler flags
|
--cflags pre-processor and compiler flags
|
||||||
--feature newline separated list of enabled features
|
--feature newline separated list of enabled features
|
||||||
@@ -43,6 +44,10 @@ while test $# -gt 0; do
|
|||||||
esac
|
esac
|
||||||
|
|
||||||
case "$1" in
|
case "$1" in
|
||||||
|
--ca)
|
||||||
|
echo @CURL_CA_BUNDLE@
|
||||||
|
;;
|
||||||
|
|
||||||
--cc)
|
--cc)
|
||||||
echo @CC@
|
echo @CC@
|
||||||
;;
|
;;
|
||||||
@@ -61,6 +66,33 @@ while test $# -gt 0; do
|
|||||||
if test "@IPV6_ENABLED@" = "1"; then
|
if test "@IPV6_ENABLED@" = "1"; then
|
||||||
echo "IPv6"
|
echo "IPv6"
|
||||||
fi
|
fi
|
||||||
|
if test "@HAVE_LIBZ@" = "1"; then
|
||||||
|
echo "libz"
|
||||||
|
fi
|
||||||
|
if test "@CURL_DISABLE_HTTP@" = "1"; then
|
||||||
|
echo "HTTP-disabled"
|
||||||
|
fi
|
||||||
|
if test "@CURL_DISABLE_FTP@" = "1"; then
|
||||||
|
echo "FTP-disabled"
|
||||||
|
fi
|
||||||
|
if test "@CURL_DISABLE_GOPHER@" = "1"; then
|
||||||
|
echo "GOPHER-disabled"
|
||||||
|
fi
|
||||||
|
if test "@CURL_DISABLE_FILE@" = "1"; then
|
||||||
|
echo "FILE-disabled"
|
||||||
|
fi
|
||||||
|
if test "@CURL_DISABLE_TELNET@" = "1"; then
|
||||||
|
echo "TELNET-disabled"
|
||||||
|
fi
|
||||||
|
if test "@CURL_DISABLE_LDAP@" = "1"; then
|
||||||
|
echo "LDAP-disabled"
|
||||||
|
fi
|
||||||
|
if test "@CURL_DISABLE_DICT@" = "1"; then
|
||||||
|
echo "DICT-disabled"
|
||||||
|
fi
|
||||||
|
if test "@HAVE_ARES@" = "1"; then
|
||||||
|
echo "AsynchDNS"
|
||||||
|
fi
|
||||||
;;
|
;;
|
||||||
|
|
||||||
--version)
|
--version)
|
||||||
@@ -78,7 +110,11 @@ while test $# -gt 0; do
|
|||||||
;;
|
;;
|
||||||
|
|
||||||
--cflags)
|
--cflags)
|
||||||
echo -I@includedir@
|
if test "X@includedir@" = "X/usr/include"; then
|
||||||
|
echo ""
|
||||||
|
else
|
||||||
|
echo "-I@includedir@"
|
||||||
|
fi
|
||||||
;;
|
;;
|
||||||
|
|
||||||
--libs)
|
--libs)
|
||||||
|
|||||||
21
curl-mode.el
21
curl-mode.el
@@ -1,21 +0,0 @@
|
|||||||
;;;; Emacs Lisp help for writing curl code. ;;;;
|
|
||||||
|
|
||||||
;;; In C files, put something like this to load this file automatically:
|
|
||||||
;;
|
|
||||||
;; /* -----------------------------------------------------------------
|
|
||||||
;; * local variables:
|
|
||||||
;; * eval: (load-file "../curl-mode.el")
|
|
||||||
;; * end:
|
|
||||||
;; */
|
|
||||||
;;
|
|
||||||
;; (note: make sure to get the path right in the argument to load-file).
|
|
||||||
|
|
||||||
|
|
||||||
;;; The curl hacker's C conventions
|
|
||||||
|
|
||||||
;;; we use intent-level 2
|
|
||||||
(setq c-basic-offset 2)
|
|
||||||
;;; never ever use tabs to indent!
|
|
||||||
(setq indent-tabs-mode nil)
|
|
||||||
;;; I like this, stolen from Subversion! ;-)
|
|
||||||
(setq angry-mob-with-torches-and-pitchforks t)
|
|
||||||
50
curl-style.el
Normal file
50
curl-style.el
Normal file
@@ -0,0 +1,50 @@
|
|||||||
|
;;;; Emacs Lisp help for writing curl code. ;;;;
|
||||||
|
;;;; $Id$
|
||||||
|
|
||||||
|
;;; The curl hacker's C conventions.
|
||||||
|
|
||||||
|
;;; After loading this file and added the mode-hook you can in C
|
||||||
|
;;; files, put something like this to use the curl style
|
||||||
|
;;; automatically:
|
||||||
|
;;
|
||||||
|
;; /* -----------------------------------------------------------------
|
||||||
|
;; * local variables:
|
||||||
|
;; * eval: (set c-file-style "curl")
|
||||||
|
;; * end:
|
||||||
|
;; */
|
||||||
|
;;
|
||||||
|
|
||||||
|
(defconst curl-c-style
|
||||||
|
'((c-basic-offset . 2)
|
||||||
|
(c-comment-only-line-offset . 0)
|
||||||
|
(c-hanging-braces-alist . ((substatement-open before after)))
|
||||||
|
(c-offsets-alist . ((topmost-intro . 0)
|
||||||
|
(topmost-intro-cont . 0)
|
||||||
|
(substatement . +)
|
||||||
|
(substatement-open . 0)
|
||||||
|
(statement-case-intro . +)
|
||||||
|
(statement-case-open . 0)
|
||||||
|
(case-label . 0)
|
||||||
|
))
|
||||||
|
)
|
||||||
|
"Curl C Programming Style")
|
||||||
|
|
||||||
|
;; Customizations for all of c-mode, c++-mode, and objc-mode
|
||||||
|
(defun curl-c-mode-common-hook ()
|
||||||
|
"Curl C mode hook"
|
||||||
|
;; add curl style and set it for the current buffer
|
||||||
|
(c-add-style "curl" curl-c-style t)
|
||||||
|
(setq tab-width 8
|
||||||
|
indent-tabs-mode nil ; Use spaces. Not tabs.
|
||||||
|
comment-column 40
|
||||||
|
c-font-lock-extra-types (append '("bool" "CURL" "CURLcode" "ssize_t" "size_t" "socklen_t" "fd_set" "time_t" "off_t"))
|
||||||
|
)
|
||||||
|
;; keybindings for C, C++, and Objective-C. We can put these in
|
||||||
|
;; c-mode-base-map because of inheritance ...
|
||||||
|
(define-key c-mode-base-map "\M-q" 'c-fill-paragraph)
|
||||||
|
(setq c-recognize-knr-p nil)
|
||||||
|
)
|
||||||
|
|
||||||
|
;; Set this is in your .emacs if you want to use the c-mode-hook as
|
||||||
|
;; defined here right out of the box.
|
||||||
|
; (add-hook 'c-mode-common-hook 'curl-c-mode-common-hook)
|
||||||
5
docs/.cvsignore
Normal file
5
docs/.cvsignore
Normal file
@@ -0,0 +1,5 @@
|
|||||||
|
Makefile
|
||||||
|
Makefile.in
|
||||||
|
*html
|
||||||
|
*ps
|
||||||
|
*pdf
|
||||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user