Compare commits
1284 Commits
curl-7_10_
...
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 |
@@ -9,3 +9,6 @@ config.status
|
|||||||
curl-config
|
curl-config
|
||||||
autom4te.cache
|
autom4te.cache
|
||||||
depcomp
|
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
2
COPYING
2
COPYING
@@ -1,6 +1,6 @@
|
|||||||
COPYRIGHT AND PERMISSION NOTICE
|
COPYRIGHT AND PERMISSION NOTICE
|
||||||
|
|
||||||
Copyright (c) 1996 - 2002, Daniel Stenberg, <daniel@haxx.se>.
|
Copyright (c) 1996 - 2004, Daniel Stenberg, <daniel@haxx.se>.
|
||||||
|
|
||||||
All rights reserved.
|
All rights reserved.
|
||||||
|
|
||||||
|
|||||||
30
CVS-INFO
30
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
|
||||||
|
|
||||||
@@ -39,17 +40,24 @@ 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
|
||||||
|
|
||||||
|
|||||||
25
LEGAL
25
LEGAL
@@ -1,25 +0,0 @@
|
|||||||
Copyright (C) 1998-2002, 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.
|
|
||||||
53
Makefile.am
53
Makefile.am
@@ -1,19 +1,45 @@
|
|||||||
|
#***************************************************************************
|
||||||
|
# _ _ ____ _
|
||||||
|
# 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 = CHANGES COPYING maketgz SSLCERTS reconf Makefile.dist \
|
EXTRA_DIST = CHANGES COPYING maketgz reconf Makefile.dist \
|
||||||
curl-config.in build_vms.com curl-mode.el
|
curl-config.in build_vms.com curl-style.el sample.emacs testcurl.sh \
|
||||||
|
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
|
||||||
@@ -24,7 +50,10 @@ 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
|
||||||
@@ -73,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
|
||||||
@@ -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
|
||||||
|
|||||||
50
README
50
README
@@ -11,43 +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.
|
||||||
|
|
||||||
|
CONTACT
|
||||||
|
|
||||||
|
If you have problems, questions, ideas or suggestions, please contact us
|
||||||
|
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:
|
Visit the curl web site or mirrors for the latest news:
|
||||||
|
|
||||||
http://curl.haxx.se/
|
Sweden -- http://curl.haxx.se/
|
||||||
http://curl.sf.net/
|
Australia -- http://curl.planetmirror.com/
|
||||||
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/
|
||||||
Australia -- http://curl.planetmirror.com/download/
|
US (CA) -- http://curl.mirror.redwire.net/download/
|
||||||
US -- http://curl.sourceforge.net/download/
|
US (TX) -- http://curl.cyberservers.net/download/
|
||||||
Hongkong -- http://www.execve.net/curl/
|
|
||||||
|
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.
|
||||||
90
acconfig.h
90
acconfig.h
@@ -1,90 +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
|
|
||||||
|
|
||||||
/* Define to disable DICT */
|
|
||||||
#undef CURL_DISABLE_DICT
|
|
||||||
|
|
||||||
/* Define to disable FILE */
|
|
||||||
#undef CURL_DISABLE_FILE
|
|
||||||
|
|
||||||
/* Define to disable FTP */
|
|
||||||
#undef CURL_DISABLE_FTP
|
|
||||||
|
|
||||||
/* Define to disable GOPHER */
|
|
||||||
#undef CURL_DISABLE_GOPHER
|
|
||||||
|
|
||||||
/* Define to disable HTTP */
|
|
||||||
#undef CURL_DISABLE_HTTP
|
|
||||||
|
|
||||||
/* Define to disable LDAP */
|
|
||||||
#undef CURL_DISABLE_LDAP
|
|
||||||
|
|
||||||
/* Define to disable TELNET */
|
|
||||||
#undef CURL_DISABLE_TELNET
|
|
||||||
|
|
||||||
/* Define if you have zlib present */
|
|
||||||
#undef HAVE_LIBZ
|
|
||||||
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
|
||||||
|
|||||||
@@ -1,23 +1,37 @@
|
|||||||
dnl $Id$
|
dnl $Id$
|
||||||
dnl Process this file with autoconf to produce a configure script.
|
dnl Process this file with autoconf to produce a configure script.
|
||||||
|
|
||||||
dnl Ensure that this file is processed with autoconf 2.50 or newer
|
AC_PREREQ(2.57)
|
||||||
dnl Don't even think about removing this check!
|
|
||||||
AC_PREREQ(2.50)
|
dnl We don't know the version number "staticly" so we use a dash here
|
||||||
|
AC_INIT(curl, [-], [curl-bug@haxx.se])
|
||||||
|
|
||||||
|
dnl configure script copyright
|
||||||
|
AC_COPYRIGHT([Copyright (c) 1998 - 2004 Daniel Stenberg, <daniel@haxx.se>
|
||||||
|
This configure script may be copied, distributed and modified under the
|
||||||
|
terms of the curl license; see COPYING for more details])
|
||||||
|
|
||||||
dnl First some basic init macros
|
|
||||||
AC_INIT
|
|
||||||
AC_CONFIG_SRCDIR([lib/urldata.h])
|
AC_CONFIG_SRCDIR([lib/urldata.h])
|
||||||
AM_CONFIG_HEADER(lib/config.h src/config.h tests/server/config.h lib/ca-bundle.h)
|
AM_CONFIG_HEADER(lib/config.h src/config.h)
|
||||||
AM_MAINTAINER_MODE
|
AM_MAINTAINER_MODE
|
||||||
|
|
||||||
|
dnl SED is needed by some of the tools
|
||||||
|
AC_PATH_PROG( SED, sed, , $PATH:/usr/bin:/usr/local/bin)
|
||||||
|
AC_SUBST(SED)
|
||||||
|
|
||||||
|
dnl AR is used by libtool, and try the odd Solaris path too
|
||||||
|
AC_PATH_PROG( AR, ar, , $PATH:/usr/bin:/usr/local/bin:/usr/ccs/bin)
|
||||||
|
AC_SUBST(AR)
|
||||||
|
|
||||||
dnl figure out the libcurl version
|
dnl figure out the libcurl version
|
||||||
VERSION=`sed -ne 's/^#define LIBCURL_VERSION "\(.*\)"/\1/p' ${srcdir}/include/curl/curl.h`
|
VERSION=`$SED -ne 's/^#define LIBCURL_VERSION "\(.*\)"/\1/p' ${srcdir}/include/curl/curl.h`
|
||||||
AM_INIT_AUTOMAKE(curl,$VERSION)
|
AM_INIT_AUTOMAKE(curl,$VERSION)
|
||||||
|
AC_MSG_CHECKING([curl version])
|
||||||
|
AC_MSG_RESULT($VERSION)
|
||||||
|
|
||||||
dnl
|
dnl
|
||||||
dnl we extract the numerical version for curl-config only
|
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`
|
VERSIONNUM=`$SED -ne 's/^#define LIBCURL_VERSION_NUM 0x\(.*\)/\1/p' ${srcdir}/include/curl/curl.h`
|
||||||
AC_SUBST(VERSIONNUM)
|
AC_SUBST(VERSIONNUM)
|
||||||
|
|
||||||
dnl Solaris pkgadd support definitions
|
dnl Solaris pkgadd support definitions
|
||||||
@@ -52,6 +66,7 @@ AC_LIBTOOL_WIN32_DLL
|
|||||||
dnl libtool setup
|
dnl libtool setup
|
||||||
AM_PROG_LIBTOOL
|
AM_PROG_LIBTOOL
|
||||||
|
|
||||||
|
AC_MSG_CHECKING([if we need -no-undefined])
|
||||||
case $host in
|
case $host in
|
||||||
*-*-cygwin | *-*-mingw* | *-*-pw32*)
|
*-*-cygwin | *-*-mingw* | *-*-pw32*)
|
||||||
need_no_undefined=yes
|
need_no_undefined=yes
|
||||||
@@ -60,9 +75,23 @@ case $host in
|
|||||||
need_no_undefined=no
|
need_no_undefined=no
|
||||||
;;
|
;;
|
||||||
esac
|
esac
|
||||||
|
AC_MSG_RESULT($need_no_undefined)
|
||||||
AM_CONDITIONAL(NO_UNDEFINED, test x$need_no_undefined = xyes)
|
AM_CONDITIONAL(NO_UNDEFINED, test x$need_no_undefined = xyes)
|
||||||
|
|
||||||
|
AC_MSG_CHECKING([if we need -mimpure-text])
|
||||||
|
case $host in
|
||||||
|
*-*-solaris2*)
|
||||||
|
if test "$GCC" = "yes"; then
|
||||||
|
mimpure="yes"
|
||||||
|
fi
|
||||||
|
;;
|
||||||
|
*)
|
||||||
|
mimpure=no
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
AC_MSG_RESULT($mimpure)
|
||||||
|
AM_CONDITIONAL(MIMPURE, test x$mimpure = xyes)
|
||||||
|
|
||||||
dnl The install stuff has already been taken care of by the automake stuff
|
dnl The install stuff has already been taken care of by the automake stuff
|
||||||
dnl AC_PROG_INSTALL
|
dnl AC_PROG_INSTALL
|
||||||
AC_PROG_MAKE_SET
|
AC_PROG_MAKE_SET
|
||||||
@@ -72,8 +101,8 @@ dnl switch off particular protocols
|
|||||||
dnl
|
dnl
|
||||||
AC_MSG_CHECKING([whether to support http])
|
AC_MSG_CHECKING([whether to support http])
|
||||||
AC_ARG_ENABLE(http,
|
AC_ARG_ENABLE(http,
|
||||||
[ --enable-http Enable HTTP support
|
AC_HELP_STRING([--enable-http],[Enable HTTP support])
|
||||||
--disable-http Disable HTTP support],
|
AC_HELP_STRING([--disable-http],[Disable HTTP support]),
|
||||||
[ case "$enableval" in
|
[ case "$enableval" in
|
||||||
no)
|
no)
|
||||||
AC_MSG_RESULT(no)
|
AC_MSG_RESULT(no)
|
||||||
@@ -90,8 +119,8 @@ AC_ARG_ENABLE(http,
|
|||||||
)
|
)
|
||||||
AC_MSG_CHECKING([whether to support ftp])
|
AC_MSG_CHECKING([whether to support ftp])
|
||||||
AC_ARG_ENABLE(ftp,
|
AC_ARG_ENABLE(ftp,
|
||||||
[ --enable-ftp Enable FTP support
|
AC_HELP_STRING([--enable-ftp],[Enable FTP support])
|
||||||
--disable-ftp Disable FTP support],
|
AC_HELP_STRING([--disable-ftp],[Disable FTP support]),
|
||||||
[ case "$enableval" in
|
[ case "$enableval" in
|
||||||
no)
|
no)
|
||||||
AC_MSG_RESULT(no)
|
AC_MSG_RESULT(no)
|
||||||
@@ -105,8 +134,8 @@ AC_ARG_ENABLE(ftp,
|
|||||||
)
|
)
|
||||||
AC_MSG_CHECKING([whether to support gopher])
|
AC_MSG_CHECKING([whether to support gopher])
|
||||||
AC_ARG_ENABLE(gopher,
|
AC_ARG_ENABLE(gopher,
|
||||||
[ --enable-gopher Enable GOPHER support
|
AC_HELP_STRING([--enable-gopher],[Enable GOPHER support])
|
||||||
--disable-gopher Disable GOPHER support],
|
AC_HELP_STRING([--disable-gopher],[Disable GOPHER support]),
|
||||||
[ case "$enableval" in
|
[ case "$enableval" in
|
||||||
no)
|
no)
|
||||||
AC_MSG_RESULT(no)
|
AC_MSG_RESULT(no)
|
||||||
@@ -120,8 +149,8 @@ AC_ARG_ENABLE(gopher,
|
|||||||
)
|
)
|
||||||
AC_MSG_CHECKING([whether to support file])
|
AC_MSG_CHECKING([whether to support file])
|
||||||
AC_ARG_ENABLE(file,
|
AC_ARG_ENABLE(file,
|
||||||
[ --enable-file Enable FILE support
|
AC_HELP_STRING([--enable-file],[Enable FILE support])
|
||||||
--disable-file Disable FILE support],
|
AC_HELP_STRING([--disable-file],[Disable FILE support]),
|
||||||
[ case "$enableval" in
|
[ case "$enableval" in
|
||||||
no)
|
no)
|
||||||
AC_MSG_RESULT(no)
|
AC_MSG_RESULT(no)
|
||||||
@@ -135,8 +164,8 @@ AC_ARG_ENABLE(file,
|
|||||||
)
|
)
|
||||||
AC_MSG_CHECKING([whether to support ldap])
|
AC_MSG_CHECKING([whether to support ldap])
|
||||||
AC_ARG_ENABLE(ldap,
|
AC_ARG_ENABLE(ldap,
|
||||||
[ --enable-ldap Enable LDAP support
|
AC_HELP_STRING([--enable-ldap],[Enable LDAP support])
|
||||||
--disable-ldap Disable LDAP support],
|
AC_HELP_STRING([--disable-ldap],[Disable LDAP support]),
|
||||||
[ case "$enableval" in
|
[ case "$enableval" in
|
||||||
no)
|
no)
|
||||||
AC_MSG_RESULT(no)
|
AC_MSG_RESULT(no)
|
||||||
@@ -150,12 +179,12 @@ AC_ARG_ENABLE(ldap,
|
|||||||
)
|
)
|
||||||
AC_MSG_CHECKING([whether to support dict])
|
AC_MSG_CHECKING([whether to support dict])
|
||||||
AC_ARG_ENABLE(dict,
|
AC_ARG_ENABLE(dict,
|
||||||
[ --enable-dict Enable DICT support
|
AC_HELP_STRING([--enable-dict],[Enable DICT support])
|
||||||
--disable-dict Disable DICT support],
|
AC_HELP_STRING([--disable-dict],[Disable DICT support]),
|
||||||
[ case "$enableval" in
|
[ case "$enableval" in
|
||||||
no)
|
no)
|
||||||
AC_MSG_RESULT(no)
|
AC_MSG_RESULT(no)
|
||||||
AC_DEFINE(CURL_DISABLE_DICT, 1 [to disable DICT])
|
AC_DEFINE(CURL_DISABLE_DICT, 1, [to disable DICT])
|
||||||
AC_SUBST(CURL_DISABLE_DICT)
|
AC_SUBST(CURL_DISABLE_DICT)
|
||||||
;;
|
;;
|
||||||
*) AC_MSG_RESULT(yes)
|
*) AC_MSG_RESULT(yes)
|
||||||
@@ -165,8 +194,8 @@ AC_ARG_ENABLE(dict,
|
|||||||
)
|
)
|
||||||
AC_MSG_CHECKING([whether to support telnet])
|
AC_MSG_CHECKING([whether to support telnet])
|
||||||
AC_ARG_ENABLE(telnet,
|
AC_ARG_ENABLE(telnet,
|
||||||
[ --enable-telnet Enable TELNET support
|
AC_HELP_STRING([--enable-telnet],[Enable TELNET support])
|
||||||
--disable-telnet Disable TELNET support],
|
AC_HELP_STRING([--disable-telnet],[Disable TELNET support]),
|
||||||
[ case "$enableval" in
|
[ case "$enableval" in
|
||||||
no)
|
no)
|
||||||
AC_MSG_RESULT(no)
|
AC_MSG_RESULT(no)
|
||||||
@@ -179,49 +208,6 @@ AC_ARG_ENABLE(telnet,
|
|||||||
AC_MSG_RESULT(yes)
|
AC_MSG_RESULT(yes)
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
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 **********************************************************************
|
||||||
dnl Checks for libraries.
|
dnl Checks for libraries.
|
||||||
dnl **********************************************************************
|
dnl **********************************************************************
|
||||||
@@ -236,7 +222,7 @@ fi
|
|||||||
|
|
||||||
dnl At least one system has been identified to require BOTH nsl and
|
dnl At least one system has been identified to require BOTH nsl and
|
||||||
dnl socket libs to link properly.
|
dnl socket libs to link properly.
|
||||||
if test "$ac_cv_lib_nsl_gethostbyname" = "$ac_cv_func_gethostbyname"; then
|
if test "$ac_cv_lib_nsl_gethostbyname" != "yes" -a "$ac_cv_lib_socket_gethostbyname" != "yes" -a "$ac_cv_func_gethostbyname" != "yes"; then
|
||||||
AC_MSG_CHECKING([trying both nsl and socket libs])
|
AC_MSG_CHECKING([trying both nsl and socket libs])
|
||||||
my_ac_save_LIBS=$LIBS
|
my_ac_save_LIBS=$LIBS
|
||||||
LIBS="-lnsl -lsocket $LIBS"
|
LIBS="-lnsl -lsocket $LIBS"
|
||||||
@@ -271,12 +257,67 @@ AC_CHECK_FUNC(connect, , [ AC_CHECK_LIB(socket, connect) ])
|
|||||||
dnl dl lib?
|
dnl dl lib?
|
||||||
AC_CHECK_FUNC(dlclose, , [ AC_CHECK_LIB(dl, dlopen) ])
|
AC_CHECK_FUNC(dlclose, , [ AC_CHECK_LIB(dl, dlopen) ])
|
||||||
|
|
||||||
|
AC_MSG_CHECKING([whether to use libgcc])
|
||||||
|
AC_ARG_ENABLE(libgcc,
|
||||||
|
AC_HELP_STRING([--enable-libgcc],[use libgcc when linking]),
|
||||||
|
[ case "$enableval" in
|
||||||
|
yes)
|
||||||
|
LIBS="$LIBS -lgcc"
|
||||||
|
AC_MSG_RESULT(yes)
|
||||||
|
;;
|
||||||
|
*) AC_MSG_RESULT(no)
|
||||||
|
;;
|
||||||
|
esac ],
|
||||||
|
AC_MSG_RESULT(no)
|
||||||
|
)
|
||||||
|
|
||||||
|
dnl **********************************************************************
|
||||||
|
dnl Checks for IPv6
|
||||||
|
dnl **********************************************************************
|
||||||
|
|
||||||
|
AC_MSG_CHECKING([whether to enable ipv6])
|
||||||
|
AC_ARG_ENABLE(ipv6,
|
||||||
|
AC_HELP_STRING([--enable-ipv6],[Enable ipv6 (with ipv4) support])
|
||||||
|
AC_HELP_STRING([--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 **********************************************************************
|
||||||
dnl Check how non-blocking sockets are set
|
dnl Check how non-blocking sockets are set
|
||||||
dnl **********************************************************************
|
dnl **********************************************************************
|
||||||
AC_ARG_ENABLE(nonblocking,
|
AC_ARG_ENABLE(nonblocking,
|
||||||
[ --enable-nonblocking Makes the script detect how to do it
|
AC_HELP_STRING([--enable-nonblocking],[Enable detecting how to do it])
|
||||||
--disable-nonblocking Makes the script disable non-blocking sockets],
|
AC_HELP_STRING([--disable-nonblocking],[Disable non-blocking socket detection]),
|
||||||
[
|
[
|
||||||
if test "$enableval" = "no" ; then
|
if test "$enableval" = "no" ; then
|
||||||
AC_MSG_WARN([non-blocking sockets disabled])
|
AC_MSG_WARN([non-blocking sockets disabled])
|
||||||
@@ -295,7 +336,8 @@ dnl Check for the random seed preferences
|
|||||||
dnl **********************************************************************
|
dnl **********************************************************************
|
||||||
|
|
||||||
AC_ARG_WITH(egd-socket,
|
AC_ARG_WITH(egd-socket,
|
||||||
[ --with-egd-socket=FILE Entropy Gathering Daemon socket pathname],
|
AC_HELP_STRING([--with-egd-socket=FILE],
|
||||||
|
[Entropy Gathering Daemon socket pathname]),
|
||||||
[ EGD_SOCKET="$withval" ]
|
[ EGD_SOCKET="$withval" ]
|
||||||
)
|
)
|
||||||
if test -n "$EGD_SOCKET" ; then
|
if test -n "$EGD_SOCKET" ; then
|
||||||
@@ -305,7 +347,7 @@ fi
|
|||||||
|
|
||||||
dnl Check for user-specified random device
|
dnl Check for user-specified random device
|
||||||
AC_ARG_WITH(random,
|
AC_ARG_WITH(random,
|
||||||
[ --with-random=FILE read randomness from FILE (default=/dev/urandom)],
|
AC_HELP_STRING([--with-random=FILE],[read randomness from FILE (default=/dev/urandom)]),
|
||||||
[ RANDOM_FILE="$withval" ],
|
[ RANDOM_FILE="$withval" ],
|
||||||
[
|
[
|
||||||
dnl Check for random device
|
dnl Check for random device
|
||||||
@@ -318,19 +360,50 @@ if test -n "$RANDOM_FILE" ; then
|
|||||||
[a suitable file to read random data from])
|
[a suitable file to read random data from])
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
dnl **********************************************************************
|
||||||
|
dnl Check if the operating system allows programs to write to their own argv[]
|
||||||
|
dnl **********************************************************************
|
||||||
|
|
||||||
|
AC_MSG_CHECKING([if argv can be written to])
|
||||||
|
AC_CACHE_VAL(curl_cv_writable_argv, [
|
||||||
|
AC_RUN_IFELSE([[
|
||||||
|
int main(int argc, char ** argv) {
|
||||||
|
argv[0][0] = ' ';
|
||||||
|
return (argv[0][0] == ' ')?0:1;
|
||||||
|
}
|
||||||
|
]],
|
||||||
|
curl_cv_writable_argv=yes,
|
||||||
|
curl_cv_writable_argv=no,
|
||||||
|
curl_cv_writable_argv=cross)
|
||||||
|
])
|
||||||
|
case $curl_cv_writable_argv in
|
||||||
|
yes)
|
||||||
|
AC_DEFINE(HAVE_WRITABLE_ARGV, 1, [Define this symbol if your OS supports changing the contents of argv])
|
||||||
|
AC_MSG_RESULT(yes)
|
||||||
|
;;
|
||||||
|
no)
|
||||||
|
AC_MSG_RESULT(no)
|
||||||
|
;;
|
||||||
|
*)
|
||||||
|
AC_MSG_RESULT(no)
|
||||||
|
AC_MSG_WARN([the previous check could not be made default was used])
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
|
||||||
dnl **********************************************************************
|
dnl **********************************************************************
|
||||||
dnl Check for the presence of Kerberos4 libraries and headers
|
dnl Check for the presence of Kerberos4 libraries and headers
|
||||||
dnl **********************************************************************
|
dnl **********************************************************************
|
||||||
|
|
||||||
AC_ARG_WITH(krb4-includes,
|
AC_ARG_WITH(krb4-includes,
|
||||||
[ --with-krb4-includes[=DIR] Specify location of kerberos4 headers],[
|
AC_HELP_STRING([--with-krb4-includes=DIR],
|
||||||
|
[Specify location of kerberos4 headers]),[
|
||||||
CPPFLAGS="$CPPFLAGS -I$withval"
|
CPPFLAGS="$CPPFLAGS -I$withval"
|
||||||
KRB4INC="$withval"
|
KRB4INC="$withval"
|
||||||
want_krb4=yes
|
want_krb4=yes
|
||||||
])
|
])
|
||||||
|
|
||||||
AC_ARG_WITH(krb4-libs,
|
AC_ARG_WITH(krb4-libs,
|
||||||
[ --with-krb4-libs[=DIR] Specify location of kerberos4 libs],[
|
AC_HELP_STRING([--with-krb4-libs=DIR],[Specify location of kerberos4 libs]),[
|
||||||
LDFLAGS="$LDFLAGS -L$withval"
|
LDFLAGS="$LDFLAGS -L$withval"
|
||||||
KRB4LIB="$withval"
|
KRB4LIB="$withval"
|
||||||
want_krb4=yes
|
want_krb4=yes
|
||||||
@@ -339,7 +412,7 @@ AC_ARG_WITH(krb4-libs,
|
|||||||
|
|
||||||
OPT_KRB4=off
|
OPT_KRB4=off
|
||||||
AC_ARG_WITH(krb4,dnl
|
AC_ARG_WITH(krb4,dnl
|
||||||
[ --with-krb4[=DIR] where to look for Kerberos4],[
|
AC_HELP_STRING([--with-krb4=DIR],[where to look for Kerberos4]),[
|
||||||
OPT_KRB4="$withval"
|
OPT_KRB4="$withval"
|
||||||
if test X"$OPT_KRB4" != Xyes
|
if test X"$OPT_KRB4" != Xyes
|
||||||
then
|
then
|
||||||
@@ -393,7 +466,7 @@ then
|
|||||||
AC_CHECK_FUNCS(krb_get_our_ip_for_realm)
|
AC_CHECK_FUNCS(krb_get_our_ip_for_realm)
|
||||||
|
|
||||||
dnl add define KRB4
|
dnl add define KRB4
|
||||||
AC_DEFINE(KRB4, 1,
|
AC_DEFINE(HAVE_KRB4, 1,
|
||||||
[if you have the Kerberos4 libraries (including -ldes)])
|
[if you have the Kerberos4 libraries (including -ldes)])
|
||||||
|
|
||||||
dnl substitute it too!
|
dnl substitute it too!
|
||||||
@@ -409,6 +482,127 @@ else
|
|||||||
AC_MSG_RESULT(no)
|
AC_MSG_RESULT(no)
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
dnl **********************************************************************
|
||||||
|
dnl Check for FBopenssl(SPNEGO) libraries
|
||||||
|
dnl **********************************************************************
|
||||||
|
|
||||||
|
AC_ARG_WITH(spnego,
|
||||||
|
AC_HELP_STRING([--with-spnego=DIR],
|
||||||
|
[Specify location of SPNEGO library fbopenssl]),
|
||||||
|
[ SPNEGO_ROOT="$withval"
|
||||||
|
want_spnego="yes" ]
|
||||||
|
)
|
||||||
|
AC_MSG_CHECKING([if SPNEGO support is requested])
|
||||||
|
if test x"$want_spnego" = xyes; then
|
||||||
|
|
||||||
|
if test X"$SPNEGO_ROOT" = Xyes; then
|
||||||
|
AC_MSG_ERROR([FBOpenSSL libs and/or directories were not found where specified!])
|
||||||
|
AC_MSG_RESULT(no)
|
||||||
|
else
|
||||||
|
if test -z "$SPNEGO_LIB_DIR"; then
|
||||||
|
LDFLAGS="$LDFLAGS -L$SPNEGO_ROOT -lfbopenssl"
|
||||||
|
else
|
||||||
|
LDFLAGS="$LDFLAGS $SPNEGO_LIB_DIR"
|
||||||
|
fi
|
||||||
|
|
||||||
|
AC_MSG_RESULT(yes)
|
||||||
|
AC_DEFINE(HAVE_SPNEGO, 1, [Define this if you have the SPNEGO library fbopenssl])
|
||||||
|
fi
|
||||||
|
else
|
||||||
|
AC_MSG_RESULT(no)
|
||||||
|
fi
|
||||||
|
|
||||||
|
dnl **********************************************************************
|
||||||
|
dnl Check for GSS-API libraries
|
||||||
|
dnl **********************************************************************
|
||||||
|
|
||||||
|
AC_ARG_WITH(gssapi-includes,
|
||||||
|
AC_HELP_STRING([--with-gssapi-includes=DIR],
|
||||||
|
[Specify location of GSSAPI header]),
|
||||||
|
[ GSSAPI_INCS="-I$withval"
|
||||||
|
want_gss="yes" ]
|
||||||
|
)
|
||||||
|
|
||||||
|
AC_ARG_WITH(gssapi-libs,
|
||||||
|
AC_HELP_STRING([--with-gssapi-libs=DIR],
|
||||||
|
[Specify location of GSSAPI libs]),
|
||||||
|
[ GSSAPI_LIBS="-L$withval -lgssapi"
|
||||||
|
want_gss="yes" ]
|
||||||
|
)
|
||||||
|
|
||||||
|
AC_ARG_WITH(gssapi,
|
||||||
|
AC_HELP_STRING([--with-gssapi=DIR],
|
||||||
|
[Where to look for GSSAPI]),
|
||||||
|
[ GSSAPI_ROOT="$withval"
|
||||||
|
want_gss="yes" ]
|
||||||
|
)
|
||||||
|
|
||||||
|
AC_MSG_CHECKING([if GSSAPI support is requested])
|
||||||
|
if test x"$want_gss" = xyes; then
|
||||||
|
if test -z "$GSSAPI_INCS"; then
|
||||||
|
if test -f "$GSSAPI_ROOT/bin/krb5-config"; then
|
||||||
|
GSSAPI_INCS=`$GSSAPI_ROOT/bin/krb5-config --cflags gssapi`
|
||||||
|
else
|
||||||
|
GSSAPI_INCS=="-I$GSSAPI_ROOT/include"
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
CPPFLAGS="$CPPFLAGS $GSSAPI_INCS"
|
||||||
|
|
||||||
|
if test -z "$GSSAPI_LIB_DIR"; then
|
||||||
|
if test -f "$GSSAPI_ROOT/bin/krb5-config"; then
|
||||||
|
gss_ldflags=`$GSSAPI_ROOT/bin/krb5-config --libs gssapi`
|
||||||
|
LDFLAGS="$LDFLAGS $gss_ldflags"
|
||||||
|
else
|
||||||
|
LDFLAGS="$LDFLAGS $GSSAPI_ROOT/lib -lgssapi"
|
||||||
|
fi
|
||||||
|
else
|
||||||
|
LDFLAGS="$LDFLAGS $GSSAPI_LIB_DIR"
|
||||||
|
fi
|
||||||
|
|
||||||
|
AC_MSG_RESULT(yes)
|
||||||
|
AC_DEFINE(HAVE_GSSAPI, 1, [if you have the gssapi libraries])
|
||||||
|
|
||||||
|
if test -n "$GSSAPI_INCS"; then
|
||||||
|
# cut off the preceding -I from the include path
|
||||||
|
GSSAPI_INCS=`echo $GSSAPI_INCS | sed -e s/^-I//g`
|
||||||
|
fi
|
||||||
|
|
||||||
|
if test -f "$GSSAPI_INCS/gssapi.h"; then
|
||||||
|
AC_DEFINE(HAVE_GSSHEIMDAL, 1, [if you have the Heimdal gssapi libraries])
|
||||||
|
else
|
||||||
|
AC_DEFINE(HAVE_GSSMIT, 1, [if you have the MIT gssapi libraries])
|
||||||
|
fi
|
||||||
|
|
||||||
|
else
|
||||||
|
AC_MSG_RESULT(no)
|
||||||
|
fi
|
||||||
|
|
||||||
|
|
||||||
|
dnl Detect the pkg-config tool, as it may have extra info about the
|
||||||
|
dnl openssl installation we can use. I *believe* this is what we are
|
||||||
|
dnl expected to do on really recent Redhat Linux hosts.
|
||||||
|
AC_PATH_PROG( PKGCONFIG, pkg-config, no, $PATH:/usr/bin:/usr/local/bin)
|
||||||
|
if test "$PKGCONFIG" != "no" ; then
|
||||||
|
AC_MSG_CHECKING([for OpenSSL options using pkg-config])
|
||||||
|
|
||||||
|
$PKGCONFIG --exists openssl
|
||||||
|
SSL_EXISTS=$?
|
||||||
|
|
||||||
|
if test "$SSL_EXISTS" -eq "0"; then
|
||||||
|
SSL_LIBS=`$PKGCONFIG --libs-only-l openssl 2>/dev/null`
|
||||||
|
SSL_LDFLAGS=`$PKGCONFIG --libs-only-L openssl 2>/dev/null`
|
||||||
|
SSL_CPPFLAGS=`$PKGCONFIG --cflags-only-I openssl 2>/dev/null`
|
||||||
|
|
||||||
|
LIBS="$LIBS $SSL_LIBS"
|
||||||
|
CPPFLAGS="$CPPFLAGS $SSL_CPPFLAGS"
|
||||||
|
LDFLAGS="$LDFLAGS $SSL_LDFLAGS"
|
||||||
|
|
||||||
|
AC_MSG_RESULT([yes])
|
||||||
|
else
|
||||||
|
AC_MSG_RESULT([no])
|
||||||
|
fi
|
||||||
|
|
||||||
|
fi
|
||||||
|
|
||||||
dnl **********************************************************************
|
dnl **********************************************************************
|
||||||
dnl Check for the presence of SSL libraries and headers
|
dnl Check for the presence of SSL libraries and headers
|
||||||
@@ -416,8 +610,10 @@ dnl **********************************************************************
|
|||||||
|
|
||||||
dnl Default to compiler & linker defaults for SSL files & libraries.
|
dnl Default to compiler & linker defaults for SSL files & libraries.
|
||||||
OPT_SSL=off
|
OPT_SSL=off
|
||||||
|
dnl Default to no CA bundle
|
||||||
|
ca="no"
|
||||||
AC_ARG_WITH(ssl,dnl
|
AC_ARG_WITH(ssl,dnl
|
||||||
AC_HELP_STRING([--with-ssl=PATH], [where to look for SSL, PATH points to the SSL installation (default: /usr/local/ssl)])
|
AC_HELP_STRING([--with-ssl=PATH],[where to look for SSL, PATH points to the SSL installation (default: /usr/local/ssl)])
|
||||||
AC_HELP_STRING([--without-ssl], [disable SSL]),
|
AC_HELP_STRING([--without-ssl], [disable SSL]),
|
||||||
OPT_SSL=$withval)
|
OPT_SSL=$withval)
|
||||||
|
|
||||||
@@ -499,6 +695,37 @@ else
|
|||||||
|
|
||||||
AC_SUBST(OPENSSL_ENABLED)
|
AC_SUBST(OPENSSL_ENABLED)
|
||||||
|
|
||||||
|
AC_MSG_CHECKING([CA cert bundle install path])
|
||||||
|
|
||||||
|
AC_ARG_WITH(ca-bundle,
|
||||||
|
AC_HELP_STRING([--with-ca-bundle=FILE], [File name to install the CA bundle as])
|
||||||
|
AC_HELP_STRING([--without-ca-bundle], [Don't install the CA bundle]),
|
||||||
|
[ ca="$withval" ],
|
||||||
|
[
|
||||||
|
if test "x$prefix" != xNONE; then
|
||||||
|
ca="\${prefix}/share/curl/curl-ca-bundle.crt"
|
||||||
|
else
|
||||||
|
ca="$ac_default_prefix/share/curl/curl-ca-bundle.crt"
|
||||||
|
fi
|
||||||
|
] )
|
||||||
|
|
||||||
|
if test X"$OPT_SSL" = Xno; then
|
||||||
|
ca="no"
|
||||||
|
fi
|
||||||
|
|
||||||
|
if test "x$ca" != "xno"; then
|
||||||
|
CURL_CA_BUNDLE='"'$ca'"'
|
||||||
|
AC_SUBST(CURL_CA_BUNDLE)
|
||||||
|
fi
|
||||||
|
AC_MSG_RESULT([$ca])
|
||||||
|
|
||||||
|
dnl these can only exist if openssl exists
|
||||||
|
|
||||||
|
AC_CHECK_FUNCS( RAND_status \
|
||||||
|
RAND_screen \
|
||||||
|
RAND_egd \
|
||||||
|
CRYPTO_cleanup_all_ex_data )
|
||||||
|
|
||||||
fi
|
fi
|
||||||
|
|
||||||
if test X"$OPT_SSL" != Xoff &&
|
if test X"$OPT_SSL" != Xoff &&
|
||||||
@@ -506,15 +733,10 @@ else
|
|||||||
AC_MSG_ERROR([OpenSSL libs and/or directories were not found where specified!])
|
AC_MSG_ERROR([OpenSSL libs and/or directories were not found where specified!])
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
|
||||||
dnl these can only exist if openssl exists
|
|
||||||
|
|
||||||
AC_CHECK_FUNCS( RAND_status \
|
|
||||||
RAND_screen \
|
|
||||||
RAND_egd )
|
|
||||||
|
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
AM_CONDITIONAL(CABUNDLE, test x$ca != xno)
|
||||||
|
|
||||||
dnl **********************************************************************
|
dnl **********************************************************************
|
||||||
dnl Check for the presence of ZLIB libraries and headers
|
dnl Check for the presence of ZLIB libraries and headers
|
||||||
dnl **********************************************************************
|
dnl **********************************************************************
|
||||||
@@ -525,8 +747,8 @@ _cppflags=$CPPFLAGS
|
|||||||
_ldflags=$LDFLAGS
|
_ldflags=$LDFLAGS
|
||||||
OPT_ZLIB="/usr/local"
|
OPT_ZLIB="/usr/local"
|
||||||
AC_ARG_WITH(zlib,
|
AC_ARG_WITH(zlib,
|
||||||
AC_HELP_STRING([--with-zlib=PATH], [search for zlib in PATH])
|
AC_HELP_STRING([--with-zlib=PATH],[search for zlib in PATH])
|
||||||
AC_HELP_STRING([--without-zlib], [disable use of zlib]),
|
AC_HELP_STRING([--without-zlib],[disable use of zlib]),
|
||||||
[OPT_ZLIB="$withval"])
|
[OPT_ZLIB="$withval"])
|
||||||
|
|
||||||
case "$OPT_ZLIB" in
|
case "$OPT_ZLIB" in
|
||||||
@@ -546,7 +768,6 @@ case "$OPT_ZLIB" in
|
|||||||
AC_CHECK_LIB(z, gzread,
|
AC_CHECK_LIB(z, gzread,
|
||||||
[HAVE_LIBZ="1"
|
[HAVE_LIBZ="1"
|
||||||
AC_SUBST(HAVE_LIBZ)
|
AC_SUBST(HAVE_LIBZ)
|
||||||
LIBS="$LIBS -lz"
|
|
||||||
AC_DEFINE(HAVE_ZLIB_H, 1, [if you have the zlib.h header file])
|
AC_DEFINE(HAVE_ZLIB_H, 1, [if you have the zlib.h header file])
|
||||||
AC_DEFINE(HAVE_LIBZ, 1, [If zlib is available])],
|
AC_DEFINE(HAVE_LIBZ, 1, [If zlib is available])],
|
||||||
[ CPPFLAGS=$_cppflags
|
[ CPPFLAGS=$_cppflags
|
||||||
@@ -557,16 +778,43 @@ case "$OPT_ZLIB" in
|
|||||||
;;
|
;;
|
||||||
esac
|
esac
|
||||||
|
|
||||||
|
dnl set variable for use in automakefile(s)
|
||||||
|
AM_CONDITIONAL(HAVE_LIBZ, test x"$HAVE_LIBZ" = x1)
|
||||||
|
|
||||||
dnl Default is to try the thread-safe versions of a few functions
|
dnl Default is to try the thread-safe versions of a few functions
|
||||||
OPT_THREAD=on
|
OPT_THREAD=on
|
||||||
|
|
||||||
|
dnl detect AIX 4.3 or later
|
||||||
|
dnl see full docs on this reasoning in the lib/hostip.c source file
|
||||||
|
AC_MSG_CHECKING([AIX 4.3 or later])
|
||||||
|
AC_PREPROC_IFELSE([
|
||||||
|
#if defined(_AIX) && defined(_AIX43)
|
||||||
|
printf("just fine");
|
||||||
|
#else
|
||||||
|
#error "this is not AIX 4.3 or later"
|
||||||
|
#endif
|
||||||
|
],
|
||||||
|
[ AC_MSG_RESULT([yes])
|
||||||
|
OPT_THREAD=off ],
|
||||||
|
[ AC_MSG_RESULT([no]) ]
|
||||||
|
)
|
||||||
|
|
||||||
AC_ARG_ENABLE(thread,dnl
|
AC_ARG_ENABLE(thread,dnl
|
||||||
[ --disable-thread tell configure to not look for thread-safe functions],
|
AC_HELP_STRING([--disable-thread],[don't look for thread-safe functions])
|
||||||
|
AC_HELP_STRING([--enable-thread],[look for thread-safe functions]),
|
||||||
|
[ case "$enableval" in
|
||||||
|
no)
|
||||||
OPT_THREAD=off
|
OPT_THREAD=off
|
||||||
|
AC_MSG_WARN(libcurl will not get built using thread-safe functions)
|
||||||
|
;;
|
||||||
|
*)
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
]
|
||||||
)
|
)
|
||||||
|
|
||||||
if test X"$OPT_THREAD" = Xoff
|
if test X"$OPT_THREAD" = Xoff
|
||||||
then
|
then
|
||||||
AC_MSG_WARN(libcurl will not get built using thread-safe functions)
|
|
||||||
AC_DEFINE(DISABLED_THREADSAFE, 1, \
|
AC_DEFINE(DISABLED_THREADSAFE, 1, \
|
||||||
Set to explicitly specify we don't want to use thread-safe functions)
|
Set to explicitly specify we don't want to use thread-safe functions)
|
||||||
else
|
else
|
||||||
@@ -593,21 +841,25 @@ dnl **********************************************************************
|
|||||||
|
|
||||||
dnl Checks for header files.
|
dnl Checks for header files.
|
||||||
AC_HEADER_STDC
|
AC_HEADER_STDC
|
||||||
AC_CHECK_HEADERS( \
|
|
||||||
|
dnl First check for the very most basic headers. Then we can use these
|
||||||
|
dnl ones as default-headers when checking for the rest!
|
||||||
|
AC_CHECK_HEADERS(
|
||||||
|
sys/types.h \
|
||||||
|
sys/time.h \
|
||||||
|
sys/select.h \
|
||||||
|
sys/socket.h \
|
||||||
|
assert.h \
|
||||||
unistd.h \
|
unistd.h \
|
||||||
malloc.h \
|
malloc.h \
|
||||||
stdlib.h \
|
stdlib.h \
|
||||||
|
limits.h \
|
||||||
arpa/inet.h \
|
arpa/inet.h \
|
||||||
net/if.h \
|
net/if.h \
|
||||||
netinet/in.h \
|
netinet/in.h \
|
||||||
netinet/if_ether.h \
|
|
||||||
netdb.h \
|
netdb.h \
|
||||||
sys/select.h \
|
|
||||||
sys/socket.h \
|
|
||||||
sys/sockio.h \
|
sys/sockio.h \
|
||||||
sys/stat.h \
|
sys/stat.h \
|
||||||
sys/types.h \
|
|
||||||
sys/time.h \
|
|
||||||
sys/param.h \
|
sys/param.h \
|
||||||
termios.h \
|
termios.h \
|
||||||
termio.h \
|
termio.h \
|
||||||
@@ -622,7 +874,26 @@ AC_CHECK_HEADERS( \
|
|||||||
utime.h \
|
utime.h \
|
||||||
sys/utime.h \
|
sys/utime.h \
|
||||||
sys/poll.h \
|
sys/poll.h \
|
||||||
setjmp.h
|
setjmp.h,
|
||||||
|
dnl to do if not found
|
||||||
|
[],
|
||||||
|
dnl to do if found
|
||||||
|
[],
|
||||||
|
dnl default includes
|
||||||
|
[
|
||||||
|
#ifdef HAVE_SYS_TYPES_H
|
||||||
|
#include <sys/types.h>
|
||||||
|
#endif
|
||||||
|
#ifdef HAVE_SYS_TIME_H
|
||||||
|
#include <sys/time.h>
|
||||||
|
#endif
|
||||||
|
#ifdef HAVE_SYS_SELECT_H
|
||||||
|
#include <sys/select.h>
|
||||||
|
#endif
|
||||||
|
#ifdef HAVE_SYS_SOCKET_H
|
||||||
|
#include <sys/socket.h>
|
||||||
|
#endif
|
||||||
|
]
|
||||||
)
|
)
|
||||||
|
|
||||||
dnl Checks for typedefs, structures, and compiler characteristics.
|
dnl Checks for typedefs, structures, and compiler characteristics.
|
||||||
@@ -630,24 +901,26 @@ AC_C_CONST
|
|||||||
AC_TYPE_SIZE_T
|
AC_TYPE_SIZE_T
|
||||||
AC_HEADER_TIME
|
AC_HEADER_TIME
|
||||||
|
|
||||||
# mprintf() checks:
|
AC_CHECK_SIZEOF(off_t)
|
||||||
|
|
||||||
# check for 'long double'
|
AC_CHECK_TYPE(long long,
|
||||||
# AC_CHECK_SIZEOF(long double, 8)
|
[AC_DEFINE(HAVE_LONGLONG, 1, [if your compiler supports 'long long'])])
|
||||||
# check for 'long long'
|
|
||||||
# AC_CHECK_SIZEOF(long long, 4)
|
|
||||||
|
|
||||||
# check for ssize_t
|
# check for ssize_t
|
||||||
AC_CHECK_TYPE(ssize_t, int)
|
AC_CHECK_TYPE(ssize_t, ,
|
||||||
|
AC_DEFINE(ssize_t, int, [the signed version of size_t]))
|
||||||
|
|
||||||
TYPE_SOCKLEN_T
|
TYPE_SOCKLEN_T
|
||||||
TYPE_IN_ADDR_T
|
TYPE_IN_ADDR_T
|
||||||
|
|
||||||
|
AC_FUNC_SELECT_ARGTYPES
|
||||||
|
|
||||||
dnl Checks for library functions.
|
dnl Checks for library functions.
|
||||||
dnl AC_PROG_GCC_TRADITIONAL
|
dnl AC_PROG_GCC_TRADITIONAL
|
||||||
AC_TYPE_SIGNAL
|
AC_TYPE_SIGNAL
|
||||||
dnl AC_FUNC_VPRINTF
|
dnl AC_FUNC_VPRINTF
|
||||||
AC_CHECK_FUNCS( socket \
|
AC_CHECK_FUNCS( strtoll \
|
||||||
|
socket \
|
||||||
select \
|
select \
|
||||||
strdup \
|
strdup \
|
||||||
strstr \
|
strstr \
|
||||||
@@ -661,11 +934,12 @@ AC_CHECK_FUNCS( socket \
|
|||||||
gettimeofday \
|
gettimeofday \
|
||||||
inet_addr \
|
inet_addr \
|
||||||
inet_ntoa \
|
inet_ntoa \
|
||||||
|
inet_pton \
|
||||||
tcsetattr \
|
tcsetattr \
|
||||||
tcgetattr \
|
tcgetattr \
|
||||||
perror \
|
perror \
|
||||||
closesocket \
|
closesocket \
|
||||||
setvbuf \
|
siginterrupt \
|
||||||
sigaction \
|
sigaction \
|
||||||
signal \
|
signal \
|
||||||
getpass_r \
|
getpass_r \
|
||||||
@@ -675,7 +949,21 @@ AC_CHECK_FUNCS( socket \
|
|||||||
dlopen \
|
dlopen \
|
||||||
utime \
|
utime \
|
||||||
sigsetjmp \
|
sigsetjmp \
|
||||||
poll
|
poll,
|
||||||
|
dnl if found
|
||||||
|
[],
|
||||||
|
dnl if not found, $ac_func is the name we check for
|
||||||
|
func="$ac_func"
|
||||||
|
AC_MSG_CHECKING([deeper for $func])
|
||||||
|
AC_TRY_LINK( [],
|
||||||
|
[ $func ();],
|
||||||
|
AC_MSG_RESULT(yes!)
|
||||||
|
eval "ac_cv_func_$func=yes"
|
||||||
|
def=`echo "HAVE_$func" | tr 'a-z' 'A-Z'`
|
||||||
|
AC_DEFINE_UNQUOTED($def, 1, [If you have $func]),
|
||||||
|
AC_MSG_RESULT(but still no)
|
||||||
|
)
|
||||||
|
|
||||||
)
|
)
|
||||||
|
|
||||||
dnl sigsetjmp() might be a macro and no function so if it isn't found already
|
dnl sigsetjmp() might be a macro and no function so if it isn't found already
|
||||||
@@ -691,15 +979,6 @@ if test "$ac_cv_func_sigsetjmp" != "yes"; then
|
|||||||
)
|
)
|
||||||
fi
|
fi
|
||||||
|
|
||||||
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, ,
|
AC_PATH_PROG( PERL, perl, ,
|
||||||
$PATH:/usr/local/bin/perl:/usr/bin/:/usr/local/bin )
|
$PATH:/usr/local/bin/perl:/usr/bin/:/usr/local/bin )
|
||||||
AC_SUBST(PERL)
|
AC_SUBST(PERL)
|
||||||
@@ -708,32 +987,6 @@ AC_PATH_PROGS( NROFF, gnroff nroff, ,
|
|||||||
$PATH:/usr/bin/:/usr/local/bin )
|
$PATH:/usr/bin/:/usr/local/bin )
|
||||||
AC_SUBST(NROFF)
|
AC_SUBST(NROFF)
|
||||||
|
|
||||||
|
|
||||||
AC_MSG_CHECKING([CA cert bundle install path])
|
|
||||||
|
|
||||||
AC_ARG_WITH(ca-bundle,
|
|
||||||
AC_HELP_STRING([--with-ca-bundle=FILE], [File name to install the CA bundle as])
|
|
||||||
AC_HELP_STRING([--without-ca-bundle], [Don't install the CA bundle]),
|
|
||||||
[ ca="$withval" ],
|
|
||||||
[
|
|
||||||
if test "x$prefix" != xNONE; then
|
|
||||||
ca="$prefix/share/curl/curl-ca-bundle.crt"
|
|
||||||
else
|
|
||||||
ca="$ac_default_prefix/share/curl/curl-ca-bundle.crt"
|
|
||||||
fi
|
|
||||||
] )
|
|
||||||
|
|
||||||
if test "x$ca" = "xno"; then
|
|
||||||
dnl let's not keep "no" as path name, blank it instead
|
|
||||||
ca=""
|
|
||||||
else
|
|
||||||
AC_DEFINE_UNQUOTED(CURL_CA_BUNDLE, "$ca", [CA bundle full path name])
|
|
||||||
fi
|
|
||||||
|
|
||||||
CURL_CA_BUNDLE="$ca"
|
|
||||||
AC_SUBST(CURL_CA_BUNDLE)
|
|
||||||
AC_MSG_RESULT([$ca])
|
|
||||||
|
|
||||||
AC_PROG_YACC
|
AC_PROG_YACC
|
||||||
|
|
||||||
dnl AC_PATH_PROG( RANLIB, ranlib, /usr/bin/ranlib,
|
dnl AC_PATH_PROG( RANLIB, ranlib, /usr/bin/ranlib,
|
||||||
@@ -745,18 +998,18 @@ dnl lame option to switch on debug options
|
|||||||
dnl
|
dnl
|
||||||
AC_MSG_CHECKING([whether to enable debug options])
|
AC_MSG_CHECKING([whether to enable debug options])
|
||||||
AC_ARG_ENABLE(debug,
|
AC_ARG_ENABLE(debug,
|
||||||
[ --enable-debug Enable pedantic debug options
|
AC_HELP_STRING([--enable-debug],[Enable pedantic debug options])
|
||||||
--disable-debug Disable debug options],
|
AC_HELP_STRING([--disable-debug],[Disable debug options]),
|
||||||
[ case "$enableval" in
|
[ case "$enableval" in
|
||||||
no)
|
no)
|
||||||
AC_MSG_RESULT(no)
|
AC_MSG_RESULT(no)
|
||||||
;;
|
;;
|
||||||
*) AC_MSG_RESULT(yes)
|
*) AC_MSG_RESULT(yes)
|
||||||
|
|
||||||
CPPFLAGS="$CPPFLAGS -DMALLOCDEBUG"
|
CPPFLAGS="$CPPFLAGS -DCURLDEBUG"
|
||||||
CFLAGS="$CFLAGS -g"
|
CFLAGS="$CFLAGS -g"
|
||||||
if test "$GCC" = "yes"; then
|
if test "$GCC" = "yes"; then
|
||||||
CFLAGS="$CFLAGS -W -Wall -Wwrite-strings -pedantic -Wundef -Wpointer-arith -Wcast-align -Wnested-externs"
|
CFLAGS="$CFLAGS -W -Wall -Wwrite-strings -pedantic -Wno-long-long -Wundef -Wpointer-arith -Wnested-externs"
|
||||||
fi
|
fi
|
||||||
dnl strip off optimizer flags
|
dnl strip off optimizer flags
|
||||||
NEWFLAGS=""
|
NEWFLAGS=""
|
||||||
@@ -776,6 +1029,52 @@ AC_ARG_ENABLE(debug,
|
|||||||
AC_MSG_RESULT(no)
|
AC_MSG_RESULT(no)
|
||||||
)
|
)
|
||||||
|
|
||||||
|
AC_MSG_CHECKING([whether to enable ares])
|
||||||
|
AC_ARG_ENABLE(ares,
|
||||||
|
AC_HELP_STRING([--enable-ares=PATH],[Enable ares for name lookups])
|
||||||
|
AC_HELP_STRING([--disable-ares],[Disable ares for name lookups]),
|
||||||
|
[ case "$enableval" in
|
||||||
|
no)
|
||||||
|
AC_MSG_RESULT(no)
|
||||||
|
;;
|
||||||
|
*) AC_MSG_RESULT(yes)
|
||||||
|
|
||||||
|
if test "x$IPV6_ENABLED" = "x1"; then
|
||||||
|
AC_MSG_ERROR([ares doesn't work with ipv6, disable ipv6 to use ares])
|
||||||
|
fi
|
||||||
|
|
||||||
|
AC_DEFINE(USE_ARES, 1, [Define if you want to enable ares support])
|
||||||
|
dnl substitute HAVE_ARES for curl-config and similar
|
||||||
|
HAVE_ARES="1"
|
||||||
|
AC_SUBST(HAVE_ARES)
|
||||||
|
|
||||||
|
LIBS="$LIBS -lares"
|
||||||
|
|
||||||
|
dnl For backwards compatibility default to includes/lib in srcdir/ares
|
||||||
|
dnl If a value is specified it is assumed that the libs are in $val/lib
|
||||||
|
dnl and the includes are in $val/include. This is the default setup for
|
||||||
|
dnl ares so it should not be a problem.
|
||||||
|
if test "x$enableval" = "xyes" ; then
|
||||||
|
if test -d "$srcdir/ares"; then
|
||||||
|
AC_CONFIG_SUBDIRS(ares)
|
||||||
|
aresinc=`cd $srcdir/ares && pwd`
|
||||||
|
CPPFLAGS="$CPPFLAGS -I$aresinc"
|
||||||
|
|
||||||
|
dnl the pwd= below cannot 'cd' into the ares dir to get the full
|
||||||
|
dnl path to it, since it may not exist yet if we build outside of
|
||||||
|
dnl the source tree
|
||||||
|
pwd=`pwd`
|
||||||
|
LDFLAGS="$LDFLAGS -L$pwd/ares"
|
||||||
|
fi
|
||||||
|
else
|
||||||
|
CPPFLAGS="$CPPFLAGS -I$enableval/include"
|
||||||
|
LDFLAGS="$LDFLAGS -L$enableval/lib"
|
||||||
|
fi
|
||||||
|
;;
|
||||||
|
esac ],
|
||||||
|
AC_MSG_RESULT(no)
|
||||||
|
)
|
||||||
|
|
||||||
AC_CONFIG_FILES([Makefile \
|
AC_CONFIG_FILES([Makefile \
|
||||||
docs/Makefile \
|
docs/Makefile \
|
||||||
docs/examples/Makefile \
|
docs/examples/Makefile \
|
||||||
@@ -796,6 +1095,7 @@ AC_CONFIG_FILES([Makefile \
|
|||||||
packages/Linux/RPM/curl.spec \
|
packages/Linux/RPM/curl.spec \
|
||||||
packages/Linux/RPM/curl-ssl.spec \
|
packages/Linux/RPM/curl-ssl.spec \
|
||||||
packages/Solaris/Makefile \
|
packages/Solaris/Makefile \
|
||||||
|
packages/DOS/Makefile \
|
||||||
packages/EPM/curl.list \
|
packages/EPM/curl.list \
|
||||||
packages/EPM/Makefile \
|
packages/EPM/Makefile \
|
||||||
curl-config
|
curl-config
|
||||||
@@ -90,6 +90,9 @@ while test $# -gt 0; do
|
|||||||
if test "@CURL_DISABLE_DICT@" = "1"; then
|
if test "@CURL_DISABLE_DICT@" = "1"; then
|
||||||
echo "DICT-disabled"
|
echo "DICT-disabled"
|
||||||
fi
|
fi
|
||||||
|
if test "@HAVE_ARES@" = "1"; then
|
||||||
|
echo "AsynchDNS"
|
||||||
|
fi
|
||||||
;;
|
;;
|
||||||
|
|
||||||
--version)
|
--version)
|
||||||
@@ -107,8 +110,11 @@ while test $# -gt 0; do
|
|||||||
;;
|
;;
|
||||||
|
|
||||||
--cflags)
|
--cflags)
|
||||||
#echo -I@includedir@
|
if test "X@includedir@" = "X/usr/include"; then
|
||||||
echo ""
|
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)
|
||||||
@@ -6,15 +6,20 @@
|
|||||||
|
|
||||||
libcurl bindings
|
libcurl bindings
|
||||||
|
|
||||||
Creative people have written particular bindings or interfaces for various
|
Creative people have written bindings or interfaces for various environments
|
||||||
environments and programming languages. Using one of these allows you to take
|
and programming languages. Using one of these allows you to take advantage of
|
||||||
advantage of curl powers from within your favourite language or system.
|
curl powers from within your favourite language or system.
|
||||||
|
|
||||||
This is a list of all known interfaces as of this writing.
|
This is a list of all known interfaces as of this writing.
|
||||||
|
|
||||||
The bindings listed below are not part of the curl/libcurl distribution
|
The bindings listed below are not part of the curl/libcurl distribution
|
||||||
archives, but must be downloaded and installed separately.
|
archives, but must be downloaded and installed separately.
|
||||||
|
|
||||||
|
Ada95
|
||||||
|
|
||||||
|
Writtten by Andreas Almroth.
|
||||||
|
http://www.almroth.com/adacurl/index.html
|
||||||
|
|
||||||
Basic
|
Basic
|
||||||
|
|
||||||
ScriptBasic bindings to libcurl. Writtten by Peter Verhas.
|
ScriptBasic bindings to libcurl. Writtten by Peter Verhas.
|
||||||
@@ -22,8 +27,8 @@ Basic
|
|||||||
|
|
||||||
C++
|
C++
|
||||||
|
|
||||||
Maintained by Jean-Philippe Barrette-LaPierre.
|
Written by Jean-Philippe Barrette-LaPierre.
|
||||||
http://curl.haxx.se/libcurl/cplusplus/
|
http://www.sourceforge.net/projects/curlpp
|
||||||
|
|
||||||
Cocoa
|
Cocoa
|
||||||
|
|
||||||
@@ -35,6 +40,14 @@ Dylan
|
|||||||
Written by Chris Double.
|
Written by Chris Double.
|
||||||
http://dylanlibs.sourceforge.net/
|
http://dylanlibs.sourceforge.net/
|
||||||
|
|
||||||
|
Euphoria
|
||||||
|
|
||||||
|
Written by Ray Smith.
|
||||||
|
http://rays-web.com/eulibcurl.htm
|
||||||
|
|
||||||
|
Ferite
|
||||||
|
http://www.ferite.org/
|
||||||
|
|
||||||
Java
|
Java
|
||||||
|
|
||||||
Written by Daniel Stenberg.
|
Written by Daniel Stenberg.
|
||||||
@@ -50,6 +63,11 @@ Object-Pascal
|
|||||||
Free Pascal, Delphi and Kylix binding written by Christophe Espern.
|
Free Pascal, Delphi and Kylix binding written by Christophe Espern.
|
||||||
http://www.tekool.com/opcurl
|
http://www.tekool.com/opcurl
|
||||||
|
|
||||||
|
O'Caml
|
||||||
|
|
||||||
|
Written by Lars Nilsson.
|
||||||
|
http://sourceforge.net/projects/ocurl/
|
||||||
|
|
||||||
Pascal
|
Pascal
|
||||||
|
|
||||||
Free Pascal, Delphi and Kylix binding written by Jeffrey Pohlmeyer.
|
Free Pascal, Delphi and Kylix binding written by Jeffrey Pohlmeyer.
|
||||||
|
|||||||
26
docs/BUGS
26
docs/BUGS
@@ -8,7 +8,7 @@ $Id$
|
|||||||
BUGS
|
BUGS
|
||||||
|
|
||||||
Curl and libcurl have grown substantially since the beginning. At the time
|
Curl and libcurl have grown substantially since the beginning. At the time
|
||||||
of writing (end of April 2002), there are 32000 lines of source code, and by
|
of writing (August 2003), there are about 40000 lines of source code, and by
|
||||||
the time you read this it has probably grown even more.
|
the time you read this it has probably grown even more.
|
||||||
|
|
||||||
Of course there are lots of bugs left. And lots of misfeatures.
|
Of course there are lots of bugs left. And lots of misfeatures.
|
||||||
@@ -19,18 +19,21 @@ BUGS
|
|||||||
WHERE TO REPORT
|
WHERE TO REPORT
|
||||||
|
|
||||||
If you can't fix a bug yourself and submit a fix for it, try to report an as
|
If you can't fix a bug yourself and submit a fix for it, try to report an as
|
||||||
detailed report as possible to the curl mailing list to allow one of us to
|
detailed report as possible to a curl mailing list to allow one of us to
|
||||||
have a go at a solution. You should also post your bug/problem at curl's bug
|
have a go at a solution. You should also post your bug/problem at curl's bug
|
||||||
tracking system over at
|
tracking system over at
|
||||||
|
|
||||||
http://sourceforge.net/bugs/?group_id=976
|
http://sourceforge.net/bugs/?group_id=976
|
||||||
|
|
||||||
(but please read the section below first before doing that)
|
(but please read the sections below first before doing that)
|
||||||
|
|
||||||
|
If you feel you need to ask around first, find a suitable mailing list and
|
||||||
|
post there. The lists are available on http://curl.haxx.se/mail/
|
||||||
|
|
||||||
WHAT TO REPORT
|
WHAT TO REPORT
|
||||||
|
|
||||||
When reporting a bug, you should include information that will help us
|
When reporting a bug, you should include all information that will help us
|
||||||
understand what's wrong what you expected to happen and how to repeat the
|
understand what's wrong, what you expected to happen and how to repeat the
|
||||||
bad behavior. You therefore need to tell us:
|
bad behavior. You therefore need to tell us:
|
||||||
|
|
||||||
- your operating system's name and version number (uname -a under a unix
|
- your operating system's name and version number (uname -a under a unix
|
||||||
@@ -45,16 +48,15 @@ WHAT TO REPORT
|
|||||||
enable us to help you quicker and more accurately.
|
enable us to help you quicker and more accurately.
|
||||||
|
|
||||||
Since curl deals with networks, it often helps us if you include a protocol
|
Since curl deals with networks, it often helps us if you include a protocol
|
||||||
debug dump with your bug report. The output you get by using the -v
|
debug dump with your bug report. The output you get by using the -v or
|
||||||
flag. Usually, you also get more info by using -i so that is likely to be
|
--trace options.
|
||||||
useful when reporting bugs as well.
|
|
||||||
|
|
||||||
If curl crashed, causing a core dump (in unix), there is hardly any use to
|
If curl crashed, causing a core dump (in unix), there is hardly any use to
|
||||||
send that huge file to anyone of us. Unless we have an exact same system
|
send that huge file to anyone of us. Unless we have an exact same system
|
||||||
setup as you, we can't do much with it. What we instead ask of you is to get
|
setup as you, we can't do much with it. Instead we ask you to get a stack
|
||||||
a stack trace and send that (much smaller) output to us instead!
|
trace and send that (much smaller) output to us instead!
|
||||||
|
|
||||||
The address and how to subscribe to the mailing list is detailed in the
|
The address and how to subscribe to the mailing lists are detailed in the
|
||||||
MANUAL file.
|
MANUAL file.
|
||||||
|
|
||||||
HOW TO GET A STACK TRACE
|
HOW TO GET A STACK TRACE
|
||||||
@@ -63,7 +65,7 @@ HOW TO GET A STACK TRACE
|
|||||||
don't 'strip' the final executable. Try to avoid optimizing the code as
|
don't 'strip' the final executable. Try to avoid optimizing the code as
|
||||||
well, remove -O, -O2 etc from the compiler options.
|
well, remove -O, -O2 etc from the compiler options.
|
||||||
|
|
||||||
Run the program until it dumps core.
|
Run the program until it cores.
|
||||||
|
|
||||||
Run your debugger on the core file, like '<debugger> curl core'. <debugger>
|
Run your debugger on the core file, like '<debugger> curl core'. <debugger>
|
||||||
should be replaced with the name of your debugger, in most cases that will
|
should be replaced with the name of your debugger, in most cases that will
|
||||||
|
|||||||
@@ -58,9 +58,9 @@ Commenting
|
|||||||
|
|
||||||
Comment your source code extensively using C comments (/* comment */), DO NOT
|
Comment your source code extensively using C comments (/* comment */), DO NOT
|
||||||
use C++ comments (// this style). Commented code is quality code and enables
|
use C++ comments (// this style). Commented code is quality code and enables
|
||||||
future modifications much more. Uncommented code much more risk being
|
future modifications much more. Uncommented code risk having to be completely
|
||||||
completely replaced when someone wants to extend things, since other persons'
|
replaced when someone wants to extend things, since other persons' source
|
||||||
source code can get quite hard to read.
|
code can get quite hard to read.
|
||||||
|
|
||||||
General Style
|
General Style
|
||||||
|
|
||||||
@@ -128,7 +128,7 @@ Test Cases
|
|||||||
improve it, all new features and functions that are added need to be tested
|
improve it, all new features and functions that are added need to be tested
|
||||||
in the test suite. Every feature that is added should get at least one valid
|
in the test suite. Every feature that is added should get at least one valid
|
||||||
test case that verifies that it works as documented. If every submitter also
|
test case that verifies that it works as documented. If every submitter also
|
||||||
post a few test cases, it won't end up as a heavy burden on a single person!
|
posts a few test cases, it won't end up as a heavy burden on a single person!
|
||||||
|
|
||||||
How To Make a Patch
|
How To Make a Patch
|
||||||
|
|
||||||
@@ -145,5 +145,15 @@ How To Make a Patch
|
|||||||
|
|
||||||
diff -ur curl-original-dir curl-modfied-sources-dir > my-fixes.diff
|
diff -ur curl-original-dir curl-modfied-sources-dir > my-fixes.diff
|
||||||
|
|
||||||
GNU diff exists for virtually all platforms, including all kinds of unixes
|
The GNU diff and GNU patch tools exist for virtually all platforms, including
|
||||||
and Windows.
|
all kinds of unixes and Windows:
|
||||||
|
|
||||||
|
For unix-like operating systems:
|
||||||
|
|
||||||
|
http://www.fsf.org/software/patch/patch.html
|
||||||
|
http://www.gnu.org/directory/diffutils.html
|
||||||
|
|
||||||
|
For Windows:
|
||||||
|
|
||||||
|
http://gnuwin32.sourceforge.net/packages/patch.htm
|
||||||
|
http://gnuwin32.sourceforge.net/packages/diffutils.htm
|
||||||
|
|||||||
128
docs/FAQ
128
docs/FAQ
@@ -1,4 +1,4 @@
|
|||||||
Updated: January 13, 2003 (http://curl.haxx.se/docs/faq.html)
|
Updated: December 22, 2003 (http://curl.haxx.se/docs/faq.html)
|
||||||
_ _ ____ _
|
_ _ ____ _
|
||||||
___| | | | _ \| |
|
___| | | | _ \| |
|
||||||
/ __| | | | |_) | |
|
/ __| | | | |_) | |
|
||||||
@@ -40,6 +40,7 @@ FAQ
|
|||||||
3.12 Why do FTP specific features over HTTP proxy fail?
|
3.12 Why do FTP specific features over HTTP proxy fail?
|
||||||
3.13 Why does my single/double quotes fail?
|
3.13 Why does my single/double quotes fail?
|
||||||
3.14 Does curl support javascript or pac (automated proxy config)?
|
3.14 Does curl support javascript or pac (automated proxy config)?
|
||||||
|
3.15 Can I do recursive fetches with curl?
|
||||||
|
|
||||||
4. Running Problems
|
4. Running Problems
|
||||||
4.1 Problems connecting to SSL servers.
|
4.1 Problems connecting to SSL servers.
|
||||||
@@ -66,7 +67,7 @@ FAQ
|
|||||||
5.2 How can I receive all data into a large memory chunk?
|
5.2 How can I receive all data into a large memory chunk?
|
||||||
5.3 How do I fetch multiple files with libcurl?
|
5.3 How do I fetch multiple files with libcurl?
|
||||||
5.4 Does libcurl do Winsock initing on win32 systems?
|
5.4 Does libcurl do Winsock initing on win32 systems?
|
||||||
5.5 Does CURLOPT_FILE and CURLOPT_INFILE work on win32 ?
|
5.5 Does CURLOPT_WRITEDATA and CURLOPT_READDATA work on win32 ?
|
||||||
5.6 What about Keep-Alive or persistent connections?
|
5.6 What about Keep-Alive or persistent connections?
|
||||||
5.7 Link errors when building libcurl on Windows!
|
5.7 Link errors when building libcurl on Windows!
|
||||||
|
|
||||||
@@ -97,6 +98,12 @@ FAQ
|
|||||||
We spell it cURL or just curl. We pronounce it with an initial k sound:
|
We spell it cURL or just curl. We pronounce it with an initial k sound:
|
||||||
[kurl].
|
[kurl].
|
||||||
|
|
||||||
|
NOTE: there are numerous sub-projects and related projects that also use the
|
||||||
|
word curl in the project names in various combinations, but you should take
|
||||||
|
notice that this FAQ is directed at the command-line tool named curl (and
|
||||||
|
libcurl the library), and may therefore not be valid for other curl
|
||||||
|
projects.
|
||||||
|
|
||||||
1.2 What is libcurl?
|
1.2 What is libcurl?
|
||||||
|
|
||||||
libcurl is a reliable and portable library which provides you with an easy
|
libcurl is a reliable and portable library which provides you with an easy
|
||||||
@@ -132,11 +139,9 @@ FAQ
|
|||||||
better. We do however believe in a few rules when it comes to the future of
|
better. We do however believe in a few rules when it comes to the future of
|
||||||
curl:
|
curl:
|
||||||
|
|
||||||
* Curl is to remain a command line tool. If you want GUIs or fancy scripting
|
* Curl -- the command line tool -- is to remain a non-graphical command line
|
||||||
capabilities, you're free to write another tool that uses libcurl and that
|
tool. If you want GUIs or fancy scripting capabilities, you should look
|
||||||
offers this. There's no point in having a single tool that does every
|
for another tool that uses libcurl.
|
||||||
imaginable thing. That's also one of the great advantages of having the
|
|
||||||
core of curl as a library.
|
|
||||||
|
|
||||||
* We do not add things to curl that other small and available tools already
|
* We do not add things to curl that other small and available tools already
|
||||||
do very fine at the side. Curl's output is fine to pipe into another
|
do very fine at the side. Curl's output is fine to pipe into another
|
||||||
@@ -175,20 +180,21 @@ FAQ
|
|||||||
Project cURL is entirely free and open. No person gets paid for developing
|
Project cURL is entirely free and open. No person gets paid for developing
|
||||||
curl. We do this voluntarily on our spare time.
|
curl. We do this voluntarily on our spare time.
|
||||||
|
|
||||||
We get some help from companies. Contactor Data hosts the curl web site and
|
We get some help from companies. Contactor Data hosts the curl web site,
|
||||||
the main mailing list, Haxx owns the curl web site's domain and
|
Haxx owns the curl web site's domain and sourceforge.net hosts several
|
||||||
sourceforge.net hosts several project tools we take advantage from like the
|
project services we take advantage from, like the bug tracker, mailing lists
|
||||||
bug tracker, mailing lists and more.
|
and more.
|
||||||
|
|
||||||
If you want to support our project with a donation or similar, one way of
|
If you want to support our project with a donation or similar, one way of
|
||||||
doing that would be to buy "gift certificates" at useful online shopping
|
doing that would be to buy "gift certificates" at useful online shopping
|
||||||
sites, such as amazon.com or thinkgeek.com. Another way would be to sponsor
|
sites, such as amazon.com or thinkgeek.com. Another way would be to sponsor
|
||||||
us through a banner-program or even better: by helping us coding,
|
us through a banner-program or even better: by helping us coding,
|
||||||
documenting, testing etc.
|
documenting, testing etc. You're welcome to send us a buck using paypal, as
|
||||||
|
described here: http://curl.haxx.se/donation.html
|
||||||
|
|
||||||
1.7 What about CURL from curl.com?
|
1.7 What about CURL from curl.com?
|
||||||
|
|
||||||
During the summer 2001, curl.com has been busy advertising their client-side
|
During the summer 2001, curl.com was busy advertising their client-side
|
||||||
programming language for the web, named CURL.
|
programming language for the web, named CURL.
|
||||||
|
|
||||||
We are in no way associated with curl.com or their CURL programming
|
We are in no way associated with curl.com or their CURL programming
|
||||||
@@ -203,17 +209,17 @@ FAQ
|
|||||||
|
|
||||||
1.8 I have a problem who do I mail?
|
1.8 I have a problem who do I mail?
|
||||||
|
|
||||||
Please do not attempt to mail any single individual unless you really need
|
Please do not mail any single individual unless you really need to. Keep
|
||||||
to. Keep curl-related questions on a suitable mailing list. All available
|
curl-related questions on a suitable mailing list. All available mailing
|
||||||
mailing lists are listed in the MANUAL document and online at
|
lists are listed in the MANUAL document and online at
|
||||||
http://curl.haxx.se/mail/
|
http://curl.haxx.se/mail/
|
||||||
|
|
||||||
Keeping curl-related questions and discussions on mailing lists allows others
|
Keeping curl-related questions and discussions on mailing lists allows
|
||||||
to join in and help, to share their ideas, contribute their suggestions and
|
others to join in and help, to share their ideas, contribute their
|
||||||
spread their wisdom. Keeping discussions on public mailing lists also allows
|
suggestions and spread their wisdom. Keeping discussions on public mailing
|
||||||
for others to learn from this (both current and future users thanks to the
|
lists also allows for others to learn from this (both current and future
|
||||||
web based archives of the mailing lists), thus saving us from having to
|
users thanks to the web based archives of the mailing lists), thus saving us
|
||||||
repeat ourselves even more. Thanks for respecting this.
|
from having to repeat ourselves even more. Thanks for respecting this.
|
||||||
|
|
||||||
|
|
||||||
2. Install Related Problems
|
2. Install Related Problems
|
||||||
@@ -368,9 +374,10 @@ FAQ
|
|||||||
|
|
||||||
http://curl.haxx.se/libcurl/
|
http://curl.haxx.se/libcurl/
|
||||||
|
|
||||||
In December 2001, there are interfaces available for the following
|
In February 2003, there are interfaces available for the following
|
||||||
languages: C/C++, Cocoa, Dylan, Java, Perl, PHP, Python, Rexx, Ruby, Scheme
|
languages: Basic, C, C++, Cocoa, Dylan, Euphoria, Java, Lua, Object-Pascal,
|
||||||
and Tcl. By the time you read this, additional ones may have appeared!
|
Pascal, Perl, PHP, PostgreSQL, Python, Rexx, Ruby, Scheme and Tcl. By the
|
||||||
|
time you read this, additional ones may have appeared!
|
||||||
|
|
||||||
3.10 What about SOAP, WebDAV, XML-RPC or similar protocols over HTTP?
|
3.10 What about SOAP, WebDAV, XML-RPC or similar protocols over HTTP?
|
||||||
|
|
||||||
@@ -379,8 +386,8 @@ FAQ
|
|||||||
XML-RPC are all such ones. You can use -X to set custom requests and -H to
|
XML-RPC are all such ones. You can use -X to set custom requests and -H to
|
||||||
set custom headers (or replace internally generated ones).
|
set custom headers (or replace internally generated ones).
|
||||||
|
|
||||||
Using libcurl or PHP's curl modules is just as fine and you'd just use the
|
Using libcurl is of course just as fine and you'd just use the proper
|
||||||
proper library options to do the same.
|
library options to do the same.
|
||||||
|
|
||||||
3.11 How do I POST with a different Content-Type?
|
3.11 How do I POST with a different Content-Type?
|
||||||
|
|
||||||
@@ -448,6 +455,14 @@ FAQ
|
|||||||
|
|
||||||
- Ask your admins to stop this, for a static proxy setup or similar.
|
- Ask your admins to stop this, for a static proxy setup or similar.
|
||||||
|
|
||||||
|
3.15 Can I do recursive fetches with curl?
|
||||||
|
|
||||||
|
No. curl itself has no code that performs recursive operations, such as
|
||||||
|
those performed by wget.
|
||||||
|
|
||||||
|
There exist wrapper scripts with that functionality (for example the
|
||||||
|
curlmirror perl script), and you can write programs based on libcurl to do
|
||||||
|
it, but the command line tool curl itself cannot.
|
||||||
|
|
||||||
4. Running Problems
|
4. Running Problems
|
||||||
|
|
||||||
@@ -494,8 +509,7 @@ FAQ
|
|||||||
curl '{curl,www}.haxx.se'
|
curl '{curl,www}.haxx.se'
|
||||||
|
|
||||||
To be able to use those letters as actual parts of the URL (without using
|
To be able to use those letters as actual parts of the URL (without using
|
||||||
them for the curl URL "globbing" system), use the -g/--globoff option (curl
|
them for the curl URL "globbing" system), use the -g/--globoff option:
|
||||||
7.6 and later):
|
|
||||||
|
|
||||||
curl -g 'www.site.com/weirdname[].html'
|
curl -g 'www.site.com/weirdname[].html'
|
||||||
|
|
||||||
@@ -588,9 +602,11 @@ FAQ
|
|||||||
|
|
||||||
4.9. Curl can't authenticate to the server that requires NTLM?
|
4.9. Curl can't authenticate to the server that requires NTLM?
|
||||||
|
|
||||||
NTLM is a Microsoft proprietary protocol. Unfortunately, curl does not
|
This is supported in curl 7.10.6 or later. No earlier curl version knows
|
||||||
currently support that. Proprietary formats are evil. You should not use
|
of this magic.
|
||||||
such ones.
|
|
||||||
|
NTLM is a Microsoft proprietary protocol. Proprietary formats are evil. You
|
||||||
|
should not use such ones.
|
||||||
|
|
||||||
4.10 My HTTP request using HEAD, PUT or DELETE doesn't work!
|
4.10 My HTTP request using HEAD, PUT or DELETE doesn't work!
|
||||||
|
|
||||||
@@ -630,7 +646,7 @@ FAQ
|
|||||||
this check.
|
this check.
|
||||||
|
|
||||||
Details are also in the SSLCERTS file in the release archives, found online
|
Details are also in the SSLCERTS file in the release archives, found online
|
||||||
here: http://curl.haxx.se/lxr/source/SSLCERTS
|
here: http://curl.haxx.se/docs/sslcerts.html
|
||||||
|
|
||||||
5. libcurl Issues
|
5. libcurl Issues
|
||||||
|
|
||||||
@@ -682,40 +698,35 @@ FAQ
|
|||||||
|
|
||||||
5.3 How do I fetch multiple files with libcurl?
|
5.3 How do I fetch multiple files with libcurl?
|
||||||
|
|
||||||
Starting with version 7.7, curl and libcurl will have excellent support for
|
libcurl has excellent support for transferring multiple files. You should
|
||||||
transferring multiple files. You should just repeatedly set new URLs with
|
just repeatedly set new URLs with curl_easy_setopt() and then transfer it
|
||||||
curl_easy_setopt() and then transfer it with curl_easy_perform(). The handle
|
with curl_easy_perform(). The handle you get from curl_easy_init() is not
|
||||||
you get from curl_easy_init() is not only reusable starting with libcurl
|
only reusable, but you're even encouraged to reuse it if you can, as that
|
||||||
7.7, but also you're encouraged to reuse it if you can, as that will enable
|
will enable libcurl to use persistent connections.
|
||||||
libcurl to use persistent connections.
|
|
||||||
|
|
||||||
For libcurl prior to 7.7, there was no multiple file support. The only
|
|
||||||
available way to do multiple requests was to init/perform/cleanup for each
|
|
||||||
transfer.
|
|
||||||
|
|
||||||
5.4 Does libcurl do Winsock initialization on win32 systems?
|
5.4 Does libcurl do Winsock initialization on win32 systems?
|
||||||
|
|
||||||
Yes (since 7.8.1) if told to in the curl_global_init() call.
|
Yes, if told to in the curl_global_init() call.
|
||||||
|
|
||||||
5.5 Does CURLOPT_FILE and CURLOPT_INFILE work on win32 ?
|
5.5 Does CURLOPT_WRITEDATA and CURLOPT_READDATA work on win32 ?
|
||||||
|
|
||||||
Yes, but you cannot open a FILE * and pass the pointer to a DLL and have
|
Yes, but you cannot open a FILE * and pass the pointer to a DLL and have
|
||||||
that DLL use the FILE *. If you set CURLOPT_FILE you must also use
|
that DLL use the FILE * (as the DLL and the client application cannot access
|
||||||
CURLOPT_WRITEFUNCTION as well to set a function that writes the file, even
|
each others' variable memory areas). If you set CURLOPT_WRITEDATA you must
|
||||||
if that simply writes the data to the specified FILE*. Similarly, if you use
|
also use CURLOPT_WRITEFUNCTION as well to set a function that writes the
|
||||||
CURLOPT_INFILE you must also specify CURLOPT_READFUNCTION.
|
file, even if that simply writes the data to the specified FILE *.
|
||||||
|
Similarly, if you use CURLOPT_READDATA you must also specify
|
||||||
|
CURLOPT_READFUNCTION.
|
||||||
|
|
||||||
(Provided by Joel DeYoung and Bob Schader)
|
(Provided by Joel DeYoung and Bob Schader)
|
||||||
|
|
||||||
5.6 What about Keep-Alive or persistent connections?
|
5.6 What about Keep-Alive or persistent connections?
|
||||||
|
|
||||||
Starting with version 7.7, curl and libcurl will have excellent support for
|
curl and libcurl have excellent support for persistent connections when
|
||||||
persistent connections when transferring several files from the same server.
|
transferring several files from the same server. Curl will attempt to reuse
|
||||||
Curl will attempt to reuse connections for all URLs specified on the same
|
connections for all URLs specified on the same command line/config file, and
|
||||||
command line/config file, and libcurl will reuse connections for all
|
libcurl will reuse connections for all transfers that are made using the
|
||||||
transfers that are made using the same libcurl handle.
|
same libcurl handle.
|
||||||
|
|
||||||
Previous versions had no persistent connection support.
|
|
||||||
|
|
||||||
5.7 Link errors when building libcurl on Windows!
|
5.7 Link errors when building libcurl on Windows!
|
||||||
|
|
||||||
@@ -778,6 +789,5 @@ FAQ
|
|||||||
discussions and a large amount of people have contributed with source code
|
discussions and a large amount of people have contributed with source code
|
||||||
knowing that this is the license we use. This license puts the restrictions
|
knowing that this is the license we use. This license puts the restrictions
|
||||||
we want on curl/libcurl and it does not spread to other programs or
|
we want on curl/libcurl and it does not spread to other programs or
|
||||||
libraries that use it. The recent dual license modification should make it
|
libraries that use it. It should be possible for everyone to use libcurl or
|
||||||
possible for everyone to use libcurl or curl in their projects, no matter
|
curl in their projects, no matter what license they already have in use.
|
||||||
what license they already have in use.
|
|
||||||
|
|||||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user