Compare commits
2222 Commits
curl-7_9_3
...
curl-7_11_
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
fadf077502 | ||
|
|
863c7c7282 | ||
|
|
3a85b187c6 | ||
|
|
296ccc35d2 | ||
|
|
68826c25f8 | ||
|
|
5e2fcc1f74 | ||
|
|
e262a7265a | ||
|
|
945c6f7279 | ||
|
|
6ddec1f169 | ||
|
|
9beae7693a | ||
|
|
d204c62c39 | ||
|
|
13dd99842a | ||
|
|
2431b2caff | ||
|
|
f44bc85545 | ||
|
|
52df162c2f | ||
|
|
60787171c7 | ||
|
|
61e3d75def | ||
|
|
27b7220f1b | ||
|
|
a275365c72 | ||
|
|
80ef1bad86 | ||
|
|
686c70c5b5 | ||
|
|
f94502ecba | ||
|
|
4c70c3e820 | ||
|
|
84990cb176 | ||
|
|
eabbb5331a | ||
|
|
898bf8bb0b | ||
|
|
3d66d10fbe | ||
|
|
7052daf475 | ||
|
|
846d203d31 | ||
|
|
7561cbda0a | ||
|
|
c5c89862b2 | ||
|
|
3a70d686ee | ||
|
|
2d567af069 | ||
|
|
d2f7037ff7 | ||
|
|
c3614fa6a3 | ||
|
|
f1da9e508e | ||
|
|
9e80356dd5 | ||
|
|
4a4295290d | ||
|
|
57f67d0241 | ||
|
|
d50c9218c7 | ||
|
|
3c1bb36193 | ||
|
|
16c747da76 | ||
|
|
baf948db40 | ||
|
|
9906eb8e19 | ||
|
|
44d931dbc7 | ||
|
|
d0ad607c46 | ||
|
|
36f76396ea | ||
|
|
1cb3cd1463 | ||
|
|
a76235c008 | ||
|
|
71b3cc08a6 | ||
|
|
d8dd9b0008 | ||
|
|
35fd3a3139 | ||
|
|
90be1d157e | ||
|
|
8433068f3a | ||
|
|
e043cf22e2 | ||
|
|
206039cb76 | ||
|
|
4ba05e1128 | ||
|
|
0ae7e93299 | ||
|
|
5baf747e67 | ||
|
|
3a61c98b65 | ||
|
|
5173bab0bb | ||
|
|
b291bbc9a6 | ||
|
|
11e8600390 | ||
|
|
93aea06ed9 | ||
|
|
9e5aee63c7 | ||
|
|
60cc5a3f27 | ||
|
|
5ac047dc39 | ||
|
|
6cd280fdfb | ||
|
|
c8ac7a0d95 | ||
|
|
44031f32a1 | ||
|
|
7237221108 | ||
|
|
ad36138f52 | ||
|
|
8a16e48a6c | ||
|
|
4c3a2318ae | ||
|
|
7beac70644 | ||
|
|
b16dfbee99 | ||
|
|
202e54cf9c | ||
|
|
e0d9e7a255 | ||
|
|
c2bc5662b5 | ||
|
|
f4569f10f0 | ||
|
|
23cfb9a832 | ||
|
|
b921777057 | ||
|
|
ff6d9a1109 | ||
|
|
053f6c85ef | ||
|
|
9970fb863d | ||
|
|
feeef39ebf | ||
|
|
7bf11297fe | ||
|
|
292ef5fabb | ||
|
|
2b277f85f5 | ||
|
|
9363d94f9b | ||
|
|
ea1c98dccf | ||
|
|
1109a4a629 | ||
|
|
2d01740e1a | ||
|
|
979a1e6237 | ||
|
|
b60e0fa97e | ||
|
|
41c6f68d94 | ||
|
|
411d0cb715 | ||
|
|
8b3946efda | ||
|
|
763d6a8524 | ||
|
|
232b051254 | ||
|
|
aef6208bd7 | ||
|
|
50c5a69d70 | ||
|
|
9ebe4ab60c | ||
|
|
a0edfb90c2 | ||
|
|
93a8572928 | ||
|
|
591fe66f18 | ||
|
|
a99e6445bf | ||
|
|
f3e5d4a602 | ||
|
|
1d6248baa4 | ||
|
|
61685fee7e | ||
|
|
55e4d79111 | ||
|
|
84b3c3b569 | ||
|
|
4ea14b25df | ||
|
|
4223f602ed | ||
|
|
8146d46386 | ||
|
|
36a2fac79f | ||
|
|
58cf108251 | ||
|
|
6c6e5522cb | ||
|
|
aff9a817b4 | ||
|
|
f4e987cd19 | ||
|
|
b3afb31181 | ||
|
|
a3ad4295c9 | ||
|
|
2450506c83 | ||
|
|
23a6041698 | ||
|
|
979ba8a8b5 | ||
|
|
cd9dea3091 | ||
|
|
989ec98ebd | ||
|
|
d262d0a62a | ||
|
|
15b775e126 | ||
|
|
3788f25eac | ||
|
|
5b8852107b | ||
|
|
cfe53768dd | ||
|
|
947e656367 | ||
|
|
50e7545118 | ||
|
|
0839d6e6bc | ||
|
|
bbafc27b42 | ||
|
|
a7de09a966 | ||
|
|
1410deb8f7 | ||
|
|
7dea4acc46 | ||
|
|
a3c09e636d | ||
|
|
a025425d06 | ||
|
|
4eb9ac0821 | ||
|
|
77a5e7c646 | ||
|
|
8f0abd31c5 | ||
|
|
a13f85fb33 | ||
|
|
3b048880ad | ||
|
|
24ac5b8a6c | ||
|
|
9bc97b2d3c | ||
|
|
9825d81973 | ||
|
|
1e012c5259 | ||
|
|
68c508976f | ||
|
|
4d8a53da2f | ||
|
|
29d3deaee8 | ||
|
|
6c56340e1a | ||
|
|
134ab91358 | ||
|
|
fb927939e2 | ||
|
|
ac114ed45b | ||
|
|
d46a735418 | ||
|
|
5a87203fe4 | ||
|
|
90e9c64f72 | ||
|
|
8742d39060 | ||
|
|
821302bcf3 | ||
|
|
f68219ddaa | ||
|
|
7e3cd82b50 | ||
|
|
bc372815a8 | ||
|
|
391a37ebbf | ||
|
|
a61dc1e9c5 | ||
|
|
2e0d1a55c6 | ||
|
|
dfd1a636b4 | ||
|
|
ee337309cf | ||
|
|
437afe0767 | ||
|
|
0ab2dff69c | ||
|
|
bff59dac12 | ||
|
|
ea53aed841 | ||
|
|
e2555cf83d | ||
|
|
f7c8a57206 | ||
|
|
02bf6660bf | ||
|
|
6c8e6df38f | ||
|
|
96d3db1687 | ||
|
|
3e43105ff1 | ||
|
|
8ccc1148d9 | ||
|
|
06c38330ba | ||
|
|
0f4d042d3e | ||
|
|
c79de8d86e | ||
|
|
d670f308a6 | ||
|
|
e64e9d7fed | ||
|
|
ad5ead8bed | ||
|
|
1b99d33b59 | ||
|
|
800052dc50 | ||
|
|
d4629fd395 | ||
|
|
2c22feced2 | ||
|
|
41688a1642 | ||
|
|
2cf209d3f7 | ||
|
|
909887f310 | ||
|
|
d1d417664e | ||
|
|
7d7e99104e | ||
|
|
3eeea48839 | ||
|
|
cd653f1be9 | ||
|
|
5751796ddd | ||
|
|
012c4ee1fa | ||
|
|
426954ff95 | ||
|
|
471c30372b | ||
|
|
f6413f2cb4 | ||
|
|
e80bdd66f9 | ||
|
|
d083fac1fc | ||
|
|
1d85f950bf | ||
|
|
1d977b7848 | ||
|
|
b3803903d1 | ||
|
|
efc9410796 | ||
|
|
45614d54c6 | ||
|
|
50e690f2dd | ||
|
|
2f9f843e8a | ||
|
|
15d41dfbcd | ||
|
|
bc01ad5b9e | ||
|
|
dadc1026f1 | ||
|
|
d8cf2d42c0 | ||
|
|
96d7a95ce4 | ||
|
|
d5d55a856e | ||
|
|
dac045029a | ||
|
|
1e98727c55 | ||
|
|
1c700b5a5c | ||
|
|
af9dc9f128 | ||
|
|
4874aa6986 | ||
|
|
c0336dcc52 | ||
|
|
78fb476677 | ||
|
|
3fed12a203 | ||
|
|
ed2b831afe | ||
|
|
f481b3e1dc | ||
|
|
2769f3b245 | ||
|
|
e9a545c710 | ||
|
|
edce444551 | ||
|
|
7bee4140e8 | ||
|
|
cc48658564 | ||
|
|
79e4aee185 | ||
|
|
4d28012468 | ||
|
|
e1d01045e2 | ||
|
|
0717e4690e | ||
|
|
a0a5668dbd | ||
|
|
bfc7d6c11b | ||
|
|
dfe0118033 | ||
|
|
a701f3dddf | ||
|
|
f99a1d4e82 | ||
|
|
43bb20461f | ||
|
|
b9d3c71178 | ||
|
|
1e251a64f3 | ||
|
|
776f0bd95e | ||
|
|
cd9aabb474 | ||
|
|
e42f806b3f | ||
|
|
0850aec780 | ||
|
|
ad77f760cf | ||
|
|
a50d2a45d7 | ||
|
|
17a834bc63 | ||
|
|
c10bc0ef12 | ||
|
|
f9b1981bd7 | ||
|
|
451d34ce21 | ||
|
|
445950aa70 | ||
|
|
8be602cdfd | ||
|
|
3dd40cca9a | ||
|
|
f1445ea228 | ||
|
|
c40309ae21 | ||
|
|
fe0b5801ec | ||
|
|
3de511b248 | ||
|
|
b1aa8eb7ef | ||
|
|
967cb4d75e | ||
|
|
bcbaeaf7d5 | ||
|
|
41be41358e | ||
|
|
ecb818805b | ||
|
|
d95f7129d5 | ||
|
|
6294b356fb | ||
|
|
3e64a76498 | ||
|
|
dec9907c16 | ||
|
|
527850928d | ||
|
|
eee3f13134 | ||
|
|
80d2be541d | ||
|
|
472c4d8616 | ||
|
|
45abf75e1e | ||
|
|
4ec4e91de0 | ||
|
|
f6645094a2 | ||
|
|
7496e87d16 | ||
|
|
bd4c081157 | ||
|
|
927e392b31 | ||
|
|
aeb5edbf07 | ||
|
|
67dcddbef7 | ||
|
|
7ffb8c6aee | ||
|
|
344c378996 | ||
|
|
445f54db57 | ||
|
|
9b7c311929 | ||
|
|
6a21a28048 | ||
|
|
0adb75114b | ||
|
|
ecfb53f06d | ||
|
|
c020ee2eb6 | ||
|
|
a3279d4baf | ||
|
|
c45f43ce32 | ||
|
|
0eb037a849 | ||
|
|
5a089f6c1f | ||
|
|
556d59dfcf | ||
|
|
79cb1400ab | ||
|
|
d1b94a5f3f | ||
|
|
a07f43d202 | ||
|
|
a717afc3a7 | ||
|
|
f023b4cc79 | ||
|
|
a7aacac5e8 | ||
|
|
decdb93ccb | ||
|
|
3e24c6a957 | ||
|
|
00d2c9d92d | ||
|
|
bd383f0c60 | ||
|
|
900cecae96 | ||
|
|
ffc58c6620 | ||
|
|
39f673874f | ||
|
|
fe291202db | ||
|
|
4606dc4158 | ||
|
|
36d6b16c23 | ||
|
|
b4d8108ba1 | ||
|
|
2c120aa05c | ||
|
|
693df0fa34 | ||
|
|
fb26b2bd98 | ||
|
|
5554f1ccba | ||
|
|
46accd62d1 | ||
|
|
41535eaea9 | ||
|
|
02437b2d51 | ||
|
|
c964aedf3b | ||
|
|
5f4fb857f0 | ||
|
|
0334509754 | ||
|
|
aad70aa24e | ||
|
|
e9c835ad06 | ||
|
|
0701b973df | ||
|
|
ec59aa259f | ||
|
|
ffc6d062d8 | ||
|
|
757a7d0851 | ||
|
|
25613503cb | ||
|
|
60ef75f2ee | ||
|
|
1cdc66d927 | ||
|
|
ba12c5deda | ||
|
|
203f66d0cb | ||
|
|
54c6f2c7c0 | ||
|
|
4cccceb034 | ||
|
|
245ab7c796 | ||
|
|
2bdf52d4c5 | ||
|
|
f991a69cce | ||
|
|
3dd26b7932 | ||
|
|
a5e22867c7 | ||
|
|
5c96266d45 | ||
|
|
fcfc6de918 | ||
|
|
da0b380655 | ||
|
|
ed7ac3c932 | ||
|
|
b5d4a71883 | ||
|
|
a9d74e6c97 | ||
|
|
d46afd2b6a | ||
|
|
ce4b8420d1 | ||
|
|
faabd44658 | ||
|
|
2fe5f5ab4b | ||
|
|
656d4b4c20 | ||
|
|
7247041e21 | ||
|
|
017a78d0c5 | ||
|
|
9010bd3831 | ||
|
|
ded884e825 | ||
|
|
b53a5e92c0 | ||
|
|
69bdb82586 | ||
|
|
4799d39be6 | ||
|
|
f32d011d90 | ||
|
|
14f795816d | ||
|
|
5987791516 | ||
|
|
db074518c3 | ||
|
|
64731b0056 | ||
|
|
debe6a1432 | ||
|
|
715c3f6482 | ||
|
|
f232baf4d2 | ||
|
|
b439e8ffb7 | ||
|
|
475166fc8b | ||
|
|
be2b742b85 | ||
|
|
640d6a5564 | ||
|
|
2e9d100d03 | ||
|
|
294adcae9d | ||
|
|
1fd16e7b04 | ||
|
|
d1c08e1d85 | ||
|
|
d7c09efeb1 | ||
|
|
b83c7ade10 | ||
|
|
7d6584e140 | ||
|
|
31b6bb6a41 | ||
|
|
b84607ff7b | ||
|
|
ac2af59880 | ||
|
|
d9f961ed2d | ||
|
|
c7f5476416 | ||
|
|
381c6c5d52 | ||
|
|
9df8f9a63d | ||
|
|
5eee801d06 | ||
|
|
80a06403e4 | ||
|
|
7ad69f59c7 | ||
|
|
83b82e4472 | ||
|
|
65dab79ca5 | ||
|
|
f0089b6291 | ||
|
|
d10508e08c | ||
|
|
630995f40a | ||
|
|
f7f7cd6cce | ||
|
|
ce7326ed09 | ||
|
|
b3591ec464 | ||
|
|
b1952e773a | ||
|
|
ce5db9a86e | ||
|
|
94568f884d | ||
|
|
d095b20d1c | ||
|
|
18b809e7e4 | ||
|
|
3f458fc650 | ||
|
|
9935d33b8e | ||
|
|
d42c6b7e78 | ||
|
|
d70550f949 | ||
|
|
679654bd47 | ||
|
|
9e3f54431d | ||
|
|
3d59934163 | ||
|
|
a77d931cd0 | ||
|
|
260c353577 | ||
|
|
8823679e70 | ||
|
|
722ece4055 | ||
|
|
cc09e31acf | ||
|
|
fe09079778 | ||
|
|
8f5b80c715 | ||
|
|
460979496e | ||
|
|
cadcc12169 | ||
|
|
22adcb9cd1 | ||
|
|
597c1fe6bc | ||
|
|
7201a5a290 | ||
|
|
c6a0bb99af | ||
|
|
622984de64 | ||
|
|
a9af971c59 | ||
|
|
171229e122 | ||
|
|
b71ca15598 | ||
|
|
1c604b7ba9 | ||
|
|
749f5387c1 | ||
|
|
7553341bad | ||
|
|
c6f11b053d | ||
|
|
7d6e2a3adb | ||
|
|
43cc844d3f | ||
|
|
941dfc502a | ||
|
|
8341e8e502 | ||
|
|
e85881d7ec | ||
|
|
c9d154ca7f | ||
|
|
5911485f38 | ||
|
|
6d6de53eb9 | ||
|
|
022996e5c7 | ||
|
|
4935853eb9 | ||
|
|
d1a3c9944e | ||
|
|
8996a7346e | ||
|
|
e4adbf4017 | ||
|
|
c29740f0d8 | ||
|
|
1a4fddb9ba | ||
|
|
af19ff51e6 | ||
|
|
5438ced6b3 | ||
|
|
2eb3ad7678 | ||
|
|
b86ad6438e | ||
|
|
81f250be59 | ||
|
|
9db5dfc15d | ||
|
|
377ce6a2c2 | ||
|
|
867c189ef7 | ||
|
|
33525ac165 | ||
|
|
5c52cacc98 | ||
|
|
e612f73374 | ||
|
|
ff5b6ff528 | ||
|
|
c86768d856 | ||
|
|
9f002b1289 | ||
|
|
0436fbe226 | ||
|
|
6494889e3b | ||
|
|
f52534522c | ||
|
|
0b615afac9 | ||
|
|
b61c25af45 | ||
|
|
bf20ed5984 | ||
|
|
9d5c22d5ae | ||
|
|
aaddfa0181 | ||
|
|
17e13acd10 | ||
|
|
5564e9a321 | ||
|
|
a0118fb390 | ||
|
|
57b6202eaa | ||
|
|
0bbe184f1f | ||
|
|
1b0af1c53a | ||
|
|
23f8692058 | ||
|
|
780652e5b6 | ||
|
|
8297ac4a28 | ||
|
|
45ef092cc2 | ||
|
|
a191fe028c | ||
|
|
343291ce37 | ||
|
|
b864e25011 | ||
|
|
24836d30f5 | ||
|
|
ba1ff79b3f | ||
|
|
09d593ade0 | ||
|
|
d1b17779a3 | ||
|
|
588b63a05b | ||
|
|
a5c2a86649 | ||
|
|
8a46c64c78 | ||
|
|
2d4c0af528 | ||
|
|
edd09a1b16 | ||
|
|
0edab55dd2 | ||
|
|
16643faaa1 | ||
|
|
881c38b38a | ||
|
|
59889d45da | ||
|
|
734c17ae56 | ||
|
|
48c1943824 | ||
|
|
9ef76fecef | ||
|
|
8aa2894bfb | ||
|
|
f40467638d | ||
|
|
2297eca103 | ||
|
|
09ccfcdcd4 | ||
|
|
bbc01c36d2 | ||
|
|
b560428492 | ||
|
|
d19134e644 | ||
|
|
951e2a6545 | ||
|
|
fcacd38036 | ||
|
|
c4aca23ec4 | ||
|
|
20943292ff | ||
|
|
b2ddfb54a7 | ||
|
|
76b9631d03 | ||
|
|
58b1437cae | ||
|
|
c611ac958e | ||
|
|
e7160459ab | ||
|
|
071fc74c0e | ||
|
|
14597475b1 | ||
|
|
de3281a3a8 | ||
|
|
6e16985156 | ||
|
|
50dacab379 | ||
|
|
7c2930611b | ||
|
|
84bc46ac3b | ||
|
|
fd42247cac | ||
|
|
0efcb57623 | ||
|
|
6fde147273 | ||
|
|
cc497fd153 | ||
|
|
c1f31180a2 | ||
|
|
d4ab68cd51 | ||
|
|
e8c762981a | ||
|
|
0ef3e6fe8a | ||
|
|
adcbe03aeb | ||
|
|
359c0eac0d | ||
|
|
a53d7848eb | ||
|
|
29b7fb628e | ||
|
|
df760a0a4b | ||
|
|
f2057eb744 | ||
|
|
2956fe97a0 | ||
|
|
1f9b0e70ab | ||
|
|
8fae12b2f1 | ||
|
|
7410210f19 | ||
|
|
40e6b12cca | ||
|
|
f2d422235b | ||
|
|
6a678f6d64 | ||
|
|
52ceab5e41 | ||
|
|
cafcc242e6 | ||
|
|
2ad0a7d20f | ||
|
|
481094db90 | ||
|
|
840c0af014 | ||
|
|
f193ab4b59 | ||
|
|
f7db3023a8 | ||
|
|
cfe80449e2 | ||
|
|
818d231849 | ||
|
|
eb9937ec1a | ||
|
|
070cd2b52f | ||
|
|
96d9ddee38 | ||
|
|
5629eeaec2 | ||
|
|
46c2bc4bb6 | ||
|
|
3938e0f58b | ||
|
|
fa162e8feb | ||
|
|
a95df8246b | ||
|
|
8feb5110b5 | ||
|
|
32899f8309 | ||
|
|
dc7c6d1030 | ||
|
|
7fdd0bd367 | ||
|
|
4459d3b434 | ||
|
|
7e7d89471a | ||
|
|
e67d15b50e | ||
|
|
bd78878cc3 | ||
|
|
5974309d10 | ||
|
|
d00e4a377b | ||
|
|
afc6ade2b9 | ||
|
|
734e8d6229 | ||
|
|
61629d2c86 | ||
|
|
cb48c6a3d8 | ||
|
|
93a29c3c45 | ||
|
|
e92b7c73bc | ||
|
|
0ea74e3255 | ||
|
|
3bd52e3cb1 | ||
|
|
c7f9c51fe6 | ||
|
|
b1da98170f | ||
|
|
0496598e77 | ||
|
|
fb3eee5f0b | ||
|
|
e16bc91601 | ||
|
|
a8c78cbbb0 | ||
|
|
3a5a6038e7 | ||
|
|
d412724598 | ||
|
|
f95de76789 | ||
|
|
33cf204e9a | ||
|
|
dafc652f63 | ||
|
|
c16dd085f1 | ||
|
|
a7349a48ff | ||
|
|
8042cd93c3 | ||
|
|
394faaeb97 | ||
|
|
5c2df3e1a4 | ||
|
|
6fc55467f4 | ||
|
|
a147a07956 | ||
|
|
a10581d459 | ||
|
|
cc2d6942bb | ||
|
|
3974c02bb1 | ||
|
|
09b5ddaea5 | ||
|
|
acbcd68d89 | ||
|
|
4281470fca | ||
|
|
68a4aa6773 | ||
|
|
905b160097 | ||
|
|
52596c339b | ||
|
|
73500267ee | ||
|
|
e6011e33a6 | ||
|
|
3454319c17 | ||
|
|
02c78ecf81 | ||
|
|
caca034302 | ||
|
|
fb366ed35f | ||
|
|
b352ffca15 | ||
|
|
2d94856efd | ||
|
|
ae66bd1284 | ||
|
|
89d9d4e6c8 | ||
|
|
fe60fc4730 | ||
|
|
46690d5e1c | ||
|
|
beaea8cb25 | ||
|
|
409ec90c85 | ||
|
|
4d423eeabe | ||
|
|
019e612225 | ||
|
|
6550d271f0 | ||
|
|
c46da65263 | ||
|
|
b46745759b | ||
|
|
9687571a84 | ||
|
|
c13236de25 | ||
|
|
8ffbb6acd4 | ||
|
|
a3e5d81765 | ||
|
|
e2aecfe80f | ||
|
|
a3c1248214 | ||
|
|
b933639222 | ||
|
|
27619fc450 | ||
|
|
96fecba190 | ||
|
|
50257d4f50 | ||
|
|
3eb4ae031c | ||
|
|
6a4ec3be81 | ||
|
|
cc9ac6ad14 | ||
|
|
644990a835 | ||
|
|
d3b81ea3f7 | ||
|
|
3660f67534 | ||
|
|
203cc4a5c3 | ||
|
|
c7be232fee | ||
|
|
2617b379be | ||
|
|
84ed5e755a | ||
|
|
2f17615790 | ||
|
|
acfa131c8c | ||
|
|
793d0e27e1 | ||
|
|
fdf0c443c3 | ||
|
|
1b39b53321 | ||
|
|
1679993e3b | ||
|
|
4c831f8b68 | ||
|
|
7a19923afa | ||
|
|
3e122a765d | ||
|
|
d873ba8c9f | ||
|
|
8093338f39 | ||
|
|
07660eea1e | ||
|
|
a2b2d4cd5c | ||
|
|
96e217b496 | ||
|
|
2dd1518d63 | ||
|
|
168703b7bf | ||
|
|
0f2d680f1f | ||
|
|
b7930b6ebd | ||
|
|
8fa43b469a | ||
|
|
894e52f61a | ||
|
|
3c294691aa | ||
|
|
acbf932861 | ||
|
|
26f5c53be8 | ||
|
|
8dd069604c | ||
|
|
5dadbd094e | ||
|
|
514a8739b6 | ||
|
|
12e78a082e | ||
|
|
9273096a8a | ||
|
|
686c6133f8 | ||
|
|
1d1276cc3a | ||
|
|
d987676ef0 | ||
|
|
6e4658c89d | ||
|
|
b7cbcf7434 | ||
|
|
e347d06a49 | ||
|
|
2077e9365a | ||
|
|
6e3adc9b14 | ||
|
|
7954eee639 | ||
|
|
f9f1f0e316 | ||
|
|
a9afe6aa84 | ||
|
|
6d36796135 | ||
|
|
9e81fd5703 | ||
|
|
609059b6ec | ||
|
|
6af73f417a | ||
|
|
32468a0072 | ||
|
|
6800c45104 | ||
|
|
0d8c754ffd | ||
|
|
1b80276496 | ||
|
|
bf9a138276 | ||
|
|
b3f9c636b9 | ||
|
|
18975d44a6 | ||
|
|
b201db5cec | ||
|
|
bbe23945e4 | ||
|
|
bbdc0394ff | ||
|
|
38a9b14965 | ||
|
|
77ba0d3686 | ||
|
|
065c8d7a95 | ||
|
|
c704d1545c | ||
|
|
62b65a5f20 | ||
|
|
665a7a3848 | ||
|
|
256b9f31e1 | ||
|
|
a3037e1173 | ||
|
|
f3e7a5d755 | ||
|
|
5f0cba7775 | ||
|
|
673759fe7e | ||
|
|
b73612392d | ||
|
|
f85935f0f9 | ||
|
|
1e7e53c87e | ||
|
|
b9fdf3cc3b | ||
|
|
c462601362 | ||
|
|
859877dcfc | ||
|
|
c04ce95106 | ||
|
|
98ee12bc35 | ||
|
|
fdda786fa2 | ||
|
|
831be4f4dd | ||
|
|
41ae97e710 | ||
|
|
f72ba7f79d | ||
|
|
296046510b | ||
|
|
db9f87f697 | ||
|
|
3270ea55dd | ||
|
|
a358ac24f4 | ||
|
|
8bedd43b28 | ||
|
|
9ea2087ede | ||
|
|
9f7c634133 | ||
|
|
da20d68a12 | ||
|
|
d3e512c738 | ||
|
|
339f84fe1f | ||
|
|
2d41b735ec | ||
|
|
e3b4dd08ff | ||
|
|
6809a906bb | ||
|
|
1c35cbcc07 | ||
|
|
5f8989a436 | ||
|
|
aa7b0648ff | ||
|
|
2fbe61960f | ||
|
|
bdb5e5a250 | ||
|
|
48a580e609 | ||
|
|
1361fc69b9 | ||
|
|
93352e56d8 | ||
|
|
d9246ff24d | ||
|
|
9301bc3444 | ||
|
|
76352c4e2d | ||
|
|
428f41bd12 | ||
|
|
99c32e460f | ||
|
|
83f249cf65 | ||
|
|
2c2baa93ea | ||
|
|
f0278ca114 | ||
|
|
297b1b5013 | ||
|
|
e9f63bf4e8 | ||
|
|
556ce1c6a1 | ||
|
|
cc4ff62681 | ||
|
|
0423fd9b55 | ||
|
|
789ab20bf7 | ||
|
|
b47462bd68 | ||
|
|
1a94fee42d | ||
|
|
a91ce6a5d6 | ||
|
|
981ffd9fce | ||
|
|
e76c960624 | ||
|
|
416c92cc6f | ||
|
|
fb731eb3e7 | ||
|
|
6f2a4d290f | ||
|
|
cefc8ba938 | ||
|
|
d0bd644eef | ||
|
|
071c95128e | ||
|
|
1a192c489b | ||
|
|
56014e74a0 | ||
|
|
172271498d | ||
|
|
f2882cb88c | ||
|
|
152f1fee40 | ||
|
|
968234e6ae | ||
|
|
5e133e2dff | ||
|
|
0049c09fc3 | ||
|
|
a2a63c27f4 | ||
|
|
c50a601f1a | ||
|
|
bc0fd6db71 | ||
|
|
52b631fade | ||
|
|
2f0bc9d1f7 | ||
|
|
5ef6520d4e | ||
|
|
2c1925161e | ||
|
|
0529b349d5 | ||
|
|
b4620364a2 | ||
|
|
634aef3895 | ||
|
|
06c86d1a8c | ||
|
|
79749f8eb4 | ||
|
|
b036986b3e | ||
|
|
938f1d1da7 | ||
|
|
58b6b3df06 | ||
|
|
f9c3347f7c | ||
|
|
5b72eb0b03 | ||
|
|
6dd4c13bc0 | ||
|
|
e4e7db551f | ||
|
|
ebfde8da56 | ||
|
|
756bc0f4b7 | ||
|
|
269d491b6a | ||
|
|
449e5bc2ad | ||
|
|
8736c11d84 | ||
|
|
45fc760985 | ||
|
|
7968e3c2de | ||
|
|
964a41c75c | ||
|
|
5931d53637 | ||
|
|
3ed3ae5bcf | ||
|
|
6519cc70c5 | ||
|
|
505a4f27fa | ||
|
|
79144eba99 | ||
|
|
26e17d89c9 | ||
|
|
4322c1106f | ||
|
|
73071dfd4f | ||
|
|
b7c14b3c27 | ||
|
|
3130b44535 | ||
|
|
a2bd73334f | ||
|
|
1a393f5625 | ||
|
|
d4951e837e | ||
|
|
26f6365e93 | ||
|
|
3a552b1e63 | ||
|
|
69eb1790da | ||
|
|
a1af6f3614 | ||
|
|
3aced61465 | ||
|
|
6f02ddfce8 | ||
|
|
c2faa39b62 | ||
|
|
2d3734b8b5 | ||
|
|
ed908b7f89 | ||
|
|
f7d795a364 | ||
|
|
8919b39d54 | ||
|
|
84cedc094e | ||
|
|
3b2b2496d7 | ||
|
|
445684c409 | ||
|
|
898e067ccc | ||
|
|
12859e345f | ||
|
|
89f4af695e | ||
|
|
308bc9d919 | ||
|
|
db566c54ae | ||
|
|
81d403e207 | ||
|
|
2bd71d70ff | ||
|
|
1eef6f44ba | ||
|
|
204f03912f | ||
|
|
f8c3b3aa18 | ||
|
|
d4df981463 | ||
|
|
497c6d516d | ||
|
|
8288862b7e | ||
|
|
9aae16c236 | ||
|
|
80c194a70a | ||
|
|
c832b2db5b | ||
|
|
27018882ec | ||
|
|
caf6e9c540 | ||
|
|
e727fb82f2 | ||
|
|
c78df56801 | ||
|
|
d13202f43b | ||
|
|
9d139a6b35 | ||
|
|
d2abe44e6f | ||
|
|
bc67228576 | ||
|
|
ecf32c964a | ||
|
|
e58f30b82a | ||
|
|
654e3f1101 | ||
|
|
86689dc524 | ||
|
|
5f62a0c1ca | ||
|
|
ad1bf0f389 | ||
|
|
9c7703ace1 | ||
|
|
4a8155b53c | ||
|
|
80d6d5c5c4 | ||
|
|
c624be8388 | ||
|
|
09df1cd41e | ||
|
|
52c5b57200 | ||
|
|
5ea04a852e | ||
|
|
a2eef05198 | ||
|
|
55f75af353 | ||
|
|
fb6a51b8fd | ||
|
|
252cc2213e | ||
|
|
73c5f24fa4 | ||
|
|
4c80e103a0 | ||
|
|
39ea557360 | ||
|
|
d0cc92a01a | ||
|
|
d7980c1a45 | ||
|
|
e56ae1426c | ||
|
|
696843c020 | ||
|
|
6ff5621dd7 | ||
|
|
e7fb72a732 | ||
|
|
8d30d34e0c | ||
|
|
bc7fe85f8a | ||
|
|
89352d92c5 | ||
|
|
c32390d84c | ||
|
|
45ca866a2d | ||
|
|
ceef206c21 | ||
|
|
7c6424f0a9 | ||
|
|
bc942de6f1 | ||
|
|
06984df5cb | ||
|
|
4f136a3a76 | ||
|
|
363bf3ba30 | ||
|
|
acb895956a | ||
|
|
21e87b9bb3 | ||
|
|
c896ebcf12 | ||
|
|
d288222e80 | ||
|
|
4eb2a6c9a3 | ||
|
|
2563731c4d | ||
|
|
4e410111db | ||
|
|
5670563a26 | ||
|
|
6caa656d01 | ||
|
|
c12af7aed1 | ||
|
|
dcb6d1c01d | ||
|
|
18234cbdac | ||
|
|
06bf988dc1 | ||
|
|
55ff4c3f08 | ||
|
|
4915002168 | ||
|
|
5bd8d60e41 | ||
|
|
fc872808c5 | ||
|
|
0f4feda382 | ||
|
|
90b0f38316 | ||
|
|
18f630ab21 | ||
|
|
e97fd44151 | ||
|
|
b75679778f | ||
|
|
35a84ad576 | ||
|
|
4ed28be75a | ||
|
|
e2f4656a86 | ||
|
|
1e14da5c60 | ||
|
|
b2ef79ef3d | ||
|
|
f488874ff5 | ||
|
|
23258648da | ||
|
|
6b84ebe501 | ||
|
|
07dd067f73 | ||
|
|
420744d048 | ||
|
|
01108e3a63 | ||
|
|
8026b1e194 | ||
|
|
a39d77227f | ||
|
|
9f69deec7d | ||
|
|
e912f772e0 | ||
|
|
0102726aeb | ||
|
|
1e7aa04040 | ||
|
|
00a7c6fe6b | ||
|
|
87f8c0d471 | ||
|
|
334d78cd18 | ||
|
|
2356325592 | ||
|
|
d78ec593fa | ||
|
|
d5043133e6 | ||
|
|
509f69a457 | ||
|
|
662c659220 | ||
|
|
9a6566e774 | ||
|
|
4da0428d9e | ||
|
|
8ee1177206 | ||
|
|
e9154b2549 | ||
|
|
d398a0dd58 | ||
|
|
7723a24297 | ||
|
|
95a4b8db68 | ||
|
|
663c1898a3 | ||
|
|
465de793e8 | ||
|
|
de9b76cef0 | ||
|
|
1747a8d3d9 | ||
|
|
1094e79749 | ||
|
|
22569681bc | ||
|
|
e615d117a0 | ||
|
|
a51258b6bb | ||
|
|
8894bd07b6 | ||
|
|
ec45a9e825 | ||
|
|
871358a6e5 | ||
|
|
2e2e0fba60 | ||
|
|
4a5139e3f4 | ||
|
|
8f85933d7c | ||
|
|
246f3a63f6 | ||
|
|
e99eff4eb0 | ||
|
|
c0197f19cf | ||
|
|
3994d67eea | ||
|
|
9ead79c9d4 | ||
|
|
9371aed46c | ||
|
|
940707ad66 | ||
|
|
e6c267fb4c | ||
|
|
93538fccd6 | ||
|
|
83a7fad308 | ||
|
|
3c7e33388e | ||
|
|
7b0f35edb6 | ||
|
|
94a157d0b0 | ||
|
|
ca04620253 | ||
|
|
073ef0b36a | ||
|
|
c41c05d4f4 | ||
|
|
f1ea54e07a | ||
|
|
a139ce901a | ||
|
|
7431957113 | ||
|
|
1752d80915 | ||
|
|
aa7420e109 | ||
|
|
a290d4b9db | ||
|
|
19a4314e7f | ||
|
|
d166e85e0a | ||
|
|
f213e857ab | ||
|
|
eb6130baa7 | ||
|
|
f69ea2c68a | ||
|
|
078441d477 | ||
|
|
95f6b15a67 | ||
|
|
ee29dbdb8f | ||
|
|
15f3f4c93f | ||
|
|
6932e94e0e | ||
|
|
3ef06d7efe | ||
|
|
fb012b48e9 | ||
|
|
bc77bf217f | ||
|
|
37d1e9351e | ||
|
|
4494c0dee0 | ||
|
|
26afc604ac | ||
|
|
9aefcada19 | ||
|
|
69fc363760 | ||
|
|
bea02ddebe | ||
|
|
3fb257c39c | ||
|
|
7c96c5a39b | ||
|
|
efd836d971 | ||
|
|
836aaa1647 | ||
|
|
bf2b3dbf3e | ||
|
|
b4fa2ff995 | ||
|
|
2f9cabc30b | ||
|
|
63593f5597 | ||
|
|
c0acaa5d2c | ||
|
|
2e46f8d0a6 | ||
|
|
51da6aaa07 | ||
|
|
c8b79e36db | ||
|
|
208374bcc9 | ||
|
|
7f0a6e7203 | ||
|
|
54ebb9cfd4 | ||
|
|
49e9c1495b | ||
|
|
a84b0fbd52 | ||
|
|
c95814c04d | ||
|
|
9f8123f1b8 | ||
|
|
8b23db4f4d | ||
|
|
d77cc13374 | ||
|
|
9a12db1aa2 | ||
|
|
eb54d34bec | ||
|
|
4b1203d4c9 | ||
|
|
183a9c6244 | ||
|
|
1f2294d585 | ||
|
|
0b839c4f77 | ||
|
|
1d4fd1fcae | ||
|
|
b1d8d72c16 | ||
|
|
bafb68b844 | ||
|
|
21873b52e9 | ||
|
|
0aa8b82871 | ||
|
|
f9781afafd | ||
|
|
fece361a55 | ||
|
|
7b51b2f128 | ||
|
|
22d88fb28e | ||
|
|
f7c5b28e76 | ||
|
|
5760f2a307 | ||
|
|
ee46efb5a5 | ||
|
|
eb6ffebfc7 | ||
|
|
c06c44f286 | ||
|
|
019c4088cf | ||
|
|
0b0a88b78d | ||
|
|
028e9cc56f | ||
|
|
e0d8615ece | ||
|
|
c8ecbda40b | ||
|
|
2324c10d43 | ||
|
|
89cfa76291 | ||
|
|
072070a22c | ||
|
|
3c3ad134ea | ||
|
|
a4ffcfd4d5 | ||
|
|
136670c58a | ||
|
|
28169725fa | ||
|
|
5b13106f54 | ||
|
|
1a2db0dfb1 | ||
|
|
696f95bb0a | ||
|
|
acec588fe3 | ||
|
|
6ed0da8e98 | ||
|
|
7fd91d70bd | ||
|
|
61788a0389 | ||
|
|
0821447b5b | ||
|
|
3cba274ba6 | ||
|
|
df7bbcfd21 | ||
|
|
021d406f0c | ||
|
|
294569c502 | ||
|
|
bfd00ac2ed | ||
|
|
735a4714f4 | ||
|
|
827fd47198 | ||
|
|
e26b917661 | ||
|
|
92872a2a3c | ||
|
|
16ddb09cb4 | ||
|
|
d37031f14e | ||
|
|
b4e84ca7d2 | ||
|
|
47970b9e6f | ||
|
|
f65f120d50 | ||
|
|
df00ec3c82 | ||
|
|
ad6fca28f9 | ||
|
|
fd33923496 | ||
|
|
a55649dc82 | ||
|
|
9558f229db | ||
|
|
7917bfb1c9 | ||
|
|
25f611ca42 | ||
|
|
e6eb49e7e0 | ||
|
|
9a075f53dc | ||
|
|
4b3f800c03 | ||
|
|
82bc76b243 | ||
|
|
18b9b04907 | ||
|
|
87f1f08b36 | ||
|
|
7d7ebbe9f7 | ||
|
|
5111ce782f | ||
|
|
20b0e563ce | ||
|
|
8b6cf239a3 | ||
|
|
bcc285cffd | ||
|
|
d5ba030942 | ||
|
|
803f43592a | ||
|
|
904b9ccaa3 | ||
|
|
89721ff04a | ||
|
|
6164823921 | ||
|
|
f8b3c47f99 | ||
|
|
56dd2da962 | ||
|
|
68bb74d172 | ||
|
|
bf5e12c8e0 | ||
|
|
de11f5e53a | ||
|
|
b125e8e23a | ||
|
|
b28b616eb2 | ||
|
|
4534ca238d | ||
|
|
cee0e94294 | ||
|
|
8319ea7078 | ||
|
|
5334a58f9b | ||
|
|
2616bdc4cd | ||
|
|
c149b3f797 | ||
|
|
d349eb3d43 | ||
|
|
9b43ade1c0 | ||
|
|
ad05d0a8d9 | ||
|
|
e6bfbe9683 | ||
|
|
c871efca4b | ||
|
|
12c72b419c | ||
|
|
a15b7691ca | ||
|
|
01618d323b | ||
|
|
bb6d0e37e3 | ||
|
|
24a6100897 | ||
|
|
0251563c98 | ||
|
|
72673a351b | ||
|
|
96b7131844 | ||
|
|
dcc2f16416 | ||
|
|
c2b8a04000 | ||
|
|
d65587b06c | ||
|
|
1ab0134522 | ||
|
|
afffce80f0 | ||
|
|
70b80b0160 | ||
|
|
64067a04b5 | ||
|
|
38cf0268c0 | ||
|
|
2d2034703f | ||
|
|
571ceeff90 | ||
|
|
34c4ba4321 | ||
|
|
babb372eb9 | ||
|
|
5b9b82c1cd | ||
|
|
075c534270 | ||
|
|
f317f8b149 | ||
|
|
f8d552dde5 | ||
|
|
606f72bb13 | ||
|
|
327e6a2b4f | ||
|
|
be8f6c7f5c | ||
|
|
073448e0ea | ||
|
|
f136f435b5 | ||
|
|
ebea6b487b | ||
|
|
e5b7dc56e6 | ||
|
|
c2d8025a0a | ||
|
|
853e240e1d | ||
|
|
8755a6d1ac | ||
|
|
9f723061cb | ||
|
|
652683fc04 | ||
|
|
83a463891d | ||
|
|
957b618fdc | ||
|
|
ebe5191b63 | ||
|
|
c426234df7 | ||
|
|
8c3a10392e | ||
|
|
d0e44946e9 | ||
|
|
46a593d968 | ||
|
|
eb0cc34951 | ||
|
|
1c7dfda4bc | ||
|
|
3c0e4a2fa1 | ||
|
|
c753072ae1 | ||
|
|
243942a7aa | ||
|
|
8d5ac8b43c | ||
|
|
17962b3d2e | ||
|
|
f70acd5979 | ||
|
|
ffe5c46224 | ||
|
|
3242ea5f66 | ||
|
|
39a282bffc | ||
|
|
29583004ce | ||
|
|
0a1a185874 | ||
|
|
8f809e2a93 | ||
|
|
f216059b49 | ||
|
|
9121b1f41d | ||
|
|
60e015d0c1 | ||
|
|
7e049fca61 | ||
|
|
0f0e4de6a4 | ||
|
|
bc1102922b | ||
|
|
a3d3642a30 | ||
|
|
248eb47329 | ||
|
|
52ebf50607 | ||
|
|
d34a4b126e | ||
|
|
de96719a45 | ||
|
|
9876ed09fe | ||
|
|
17cbbe3dc5 | ||
|
|
b995af17eb | ||
|
|
6589579850 | ||
|
|
5ddc260fc2 | ||
|
|
db5c9cd4c0 | ||
|
|
9b6d010aef | ||
|
|
065b87e949 | ||
|
|
a6206a3aef | ||
|
|
30639ed72b | ||
|
|
9d02a39e13 | ||
|
|
fc0af0d4d1 | ||
|
|
a683416081 | ||
|
|
9faf57ee8d | ||
|
|
44b9ccb7e2 | ||
|
|
de003d9cf8 | ||
|
|
8a2a523c70 | ||
|
|
c3dfe50aaf | ||
|
|
9659d862c7 | ||
|
|
69ab4cd391 | ||
|
|
498f3985b3 | ||
|
|
977175d4fd | ||
|
|
3ddc7b9390 | ||
|
|
10e9bf623f | ||
|
|
48a5c64e94 | ||
|
|
140606ccd5 | ||
|
|
f56d006f93 | ||
|
|
beb13a1d3e | ||
|
|
fa47138327 | ||
|
|
9421d4510a | ||
|
|
ff8abfca85 | ||
|
|
5c858965b8 | ||
|
|
e3f83cb17a | ||
|
|
de6008e01a | ||
|
|
6417e696df | ||
|
|
5d28f3781b | ||
|
|
10026bb62e | ||
|
|
21c16f923c | ||
|
|
32cef52f0d | ||
|
|
e7dd7c54ff | ||
|
|
b0b50bd12a | ||
|
|
f2c6057490 | ||
|
|
169b2eeb94 | ||
|
|
f81d027f60 | ||
|
|
872eeb7339 | ||
|
|
7f67a28c2a | ||
|
|
30a46e1135 | ||
|
|
3a01478ce8 | ||
|
|
53d71fab60 | ||
|
|
be891f112c | ||
|
|
89934239d7 | ||
|
|
8986037fdd | ||
|
|
a7c72b7abf | ||
|
|
409ac80710 | ||
|
|
fc7bebdf55 | ||
|
|
ca52549557 | ||
|
|
8948a65654 | ||
|
|
b4e33cfcc7 | ||
|
|
86742e8334 | ||
|
|
173b35eaf8 | ||
|
|
2b054e5309 | ||
|
|
a302ff1605 | ||
|
|
f7bb4e6138 | ||
|
|
5c5489916b | ||
|
|
5627cf7167 | ||
|
|
c05dae4a68 | ||
|
|
57e61e3743 | ||
|
|
a6c395c156 | ||
|
|
543e0b1e0f | ||
|
|
64b0ff875f | ||
|
|
a034208a00 | ||
|
|
5f1251586b | ||
|
|
6f6cffdc32 | ||
|
|
21a98ef264 | ||
|
|
aa90436435 | ||
|
|
61225052f9 | ||
|
|
dee3163d95 | ||
|
|
8b0668b99e | ||
|
|
8471a82c85 | ||
|
|
ed4dff63b9 | ||
|
|
838e776542 | ||
|
|
39c12790bc | ||
|
|
126e6d6645 | ||
|
|
5796a1b282 | ||
|
|
90982529fc | ||
|
|
aba51d6b60 | ||
|
|
49bc4567bb | ||
|
|
2ac52705c6 | ||
|
|
d0eb56dd97 | ||
|
|
b9c60df04b | ||
|
|
8c236e4dfa | ||
|
|
154a59f21f | ||
|
|
9689e1c548 | ||
|
|
5a83976c99 | ||
|
|
b5276a9a69 | ||
|
|
30377baa5e | ||
|
|
aa8b7dd336 | ||
|
|
f26a338a54 | ||
|
|
c4383f1d99 | ||
|
|
4527995e66 | ||
|
|
b0fbb98f41 | ||
|
|
63667dfd96 | ||
|
|
77c388c928 | ||
|
|
a69b814ded | ||
|
|
c51ada766d | ||
|
|
ef2709f97c | ||
|
|
bf9b9ca29d | ||
|
|
64f224bb22 | ||
|
|
285a8fe4d0 | ||
|
|
3773d76dfd | ||
|
|
94c5c7bd6d | ||
|
|
12cfc4c0b0 | ||
|
|
9a2de6e6ee | ||
|
|
2ede47b8c8 | ||
|
|
76e107506f | ||
|
|
6f35ed51dc | ||
|
|
c94ba66310 | ||
|
|
a15133f5cf | ||
|
|
cc09e9d4c2 | ||
|
|
16e0da2c4b | ||
|
|
ed22f75241 | ||
|
|
ba25cad6e2 | ||
|
|
abb01123cb | ||
|
|
e2d249f8c5 | ||
|
|
4a2ac166fa | ||
|
|
5fab55383d | ||
|
|
f152f23a68 | ||
|
|
24e78b3571 | ||
|
|
9a239edb52 | ||
|
|
abcc5c5a82 | ||
|
|
cb5ba675a7 | ||
|
|
2288086695 | ||
|
|
61421b7a8f | ||
|
|
6a7e53a7c7 | ||
|
|
ca134d5522 | ||
|
|
ec24efda74 | ||
|
|
7f0f10e498 | ||
|
|
aa5af100b4 | ||
|
|
37ae32f688 | ||
|
|
d0cffdec5d | ||
|
|
0f34521612 | ||
|
|
e69362df22 | ||
|
|
3de8f6f38e | ||
|
|
5359bc8083 | ||
|
|
eb6a14fe10 | ||
|
|
2912537533 | ||
|
|
cfb32da198 | ||
|
|
9b4f92130f | ||
|
|
5a2ab686a6 | ||
|
|
3b8583b014 | ||
|
|
ed29552b1e | ||
|
|
a2ada3cf96 | ||
|
|
88825a1187 | ||
|
|
264e7fc58b | ||
|
|
1698015e3c | ||
|
|
39dc14c002 | ||
|
|
04c499a5fc | ||
|
|
efbe930a69 | ||
|
|
747f87f61e | ||
|
|
5a4c56fc44 | ||
|
|
81f45ba92a | ||
|
|
a5dc4e32f2 | ||
|
|
2b839853ec | ||
|
|
66b6cd68ed | ||
|
|
0ef3d90838 | ||
|
|
5cc50f9b27 | ||
|
|
e879e26a5b | ||
|
|
96d84150e1 | ||
|
|
2aa0c6c488 | ||
|
|
811138386f | ||
|
|
c433cf7459 | ||
|
|
e0d6ebc2f2 | ||
|
|
4938991ab8 | ||
|
|
13722f536e | ||
|
|
57f0e3292d | ||
|
|
da5ae565ab | ||
|
|
87c5066242 | ||
|
|
b528bde470 | ||
|
|
57572e550f | ||
|
|
3aea0d3d68 | ||
|
|
9ae920c1b6 | ||
|
|
dff406a360 | ||
|
|
d346ba5c3c | ||
|
|
978541adc2 | ||
|
|
637bce2707 | ||
|
|
07e3dc2ee2 | ||
|
|
ead065d803 | ||
|
|
0150bff7b4 | ||
|
|
0f493b6038 | ||
|
|
f26b709c50 | ||
|
|
ae10d9cf22 | ||
|
|
81af9674ed | ||
|
|
b63df7991a | ||
|
|
a79990465c | ||
|
|
ad6bd530ac | ||
|
|
c1b369fd4c | ||
|
|
01fcd3c2d5 | ||
|
|
7196d784d3 | ||
|
|
0f0aaf51e0 | ||
|
|
b5f493c55a | ||
|
|
0aa031beb9 | ||
|
|
db6ff224f8 | ||
|
|
b3c7cd61f3 | ||
|
|
9ae05c4d91 | ||
|
|
264e6f6efd | ||
|
|
ec7bccf671 | ||
|
|
49f75ee8ce | ||
|
|
4bcc866c52 | ||
|
|
c65e088caf | ||
|
|
6ca4116555 | ||
|
|
f6cdb820af | ||
|
|
081e5a82ff | ||
|
|
2ad2a4bd9f | ||
|
|
645e700da3 | ||
|
|
92aea29a30 | ||
|
|
e1c01af929 | ||
|
|
7ef749497d | ||
|
|
d72aa49126 | ||
|
|
e92bd312ec | ||
|
|
b097c2cfb0 | ||
|
|
a39cdc80b7 | ||
|
|
a47250810e | ||
|
|
1f50f3031f | ||
|
|
75145dd753 | ||
|
|
d0b97f7e1f | ||
|
|
199a0311e2 | ||
|
|
fa446f860f | ||
|
|
7a74303f3c | ||
|
|
7d9eabb981 | ||
|
|
ff5308a5af | ||
|
|
3f8ba3a986 | ||
|
|
4a555de1b2 | ||
|
|
d27e4a08f9 | ||
|
|
bf678a1ca9 | ||
|
|
13a903de28 | ||
|
|
a3c14c031e | ||
|
|
e90d528026 | ||
|
|
d64dd77993 | ||
|
|
113850a748 | ||
|
|
1c49a00d64 | ||
|
|
eef6c83503 | ||
|
|
ceb5648eb7 | ||
|
|
a0eadb76ea | ||
|
|
065852e46c | ||
|
|
e5e2fb8274 | ||
|
|
0210b3c893 | ||
|
|
7df5677b46 | ||
|
|
2e71876b28 | ||
|
|
11576b1142 | ||
|
|
ce011b8a2d | ||
|
|
12cfb4f7ee | ||
|
|
9e1123debe | ||
|
|
c7354142c0 | ||
|
|
dee84f448f | ||
|
|
1607711603 | ||
|
|
8bca5e05b8 | ||
|
|
f68505ee23 | ||
|
|
d2174da641 | ||
|
|
255b1e68d0 | ||
|
|
fbee6b87f5 | ||
|
|
3836a70f97 | ||
|
|
e0ec9fa294 | ||
|
|
80fe50590f | ||
|
|
ae18d1c55a | ||
|
|
75194373e0 | ||
|
|
f3875048f6 | ||
|
|
210af986ad | ||
|
|
c03044f492 | ||
|
|
522b85ae21 | ||
|
|
208e56dbe9 | ||
|
|
42acb00c81 | ||
|
|
ca6e770837 | ||
|
|
775968003c | ||
|
|
323d3e9b5d | ||
|
|
16f9755e73 | ||
|
|
66eb98bb0a | ||
|
|
299546f5c0 | ||
|
|
7be9b4c418 | ||
|
|
03c22b4576 | ||
|
|
ef749fa9ce | ||
|
|
a23c92596e | ||
|
|
abb1497c98 | ||
|
|
7a8594da43 | ||
|
|
cbf28daed9 | ||
|
|
0ff1ca30c3 | ||
|
|
2cff251863 | ||
|
|
73d996bf26 | ||
|
|
5bc78cb724 | ||
|
|
cdba92ac3c | ||
|
|
6d28f92ffe | ||
|
|
01387f42c5 | ||
|
|
8f52b731f4 | ||
|
|
d442088ed3 | ||
|
|
22a323890a | ||
|
|
163bba1410 | ||
|
|
db1c618fcf | ||
|
|
01bdfa7b6d | ||
|
|
6a88c8d845 | ||
|
|
b8a6913e09 | ||
|
|
744d8c1006 | ||
|
|
c2e2c98d81 | ||
|
|
3fa353a2d3 | ||
|
|
c27c9f80d2 | ||
|
|
b5a74715cf | ||
|
|
13ee2901f4 | ||
|
|
32c03eadd6 | ||
|
|
0fa512f26d | ||
|
|
219d88518c | ||
|
|
ecf3aee43a | ||
|
|
7f08cab73e | ||
|
|
c4e9ef199e | ||
|
|
9e612b5550 | ||
|
|
203633d34d | ||
|
|
45bd009bb1 | ||
|
|
ee656415c4 | ||
|
|
156aad198f | ||
|
|
b1ffb79a50 | ||
|
|
d6654bfe00 | ||
|
|
eefdd67d22 | ||
|
|
86a86d7afd | ||
|
|
b6dac2b484 | ||
|
|
e6367abae9 | ||
|
|
fc4d1d9a60 | ||
|
|
94bae20776 | ||
|
|
bb8c8d273c | ||
|
|
ee600ace37 | ||
|
|
da86e32eb4 | ||
|
|
b5bbc04ad1 | ||
|
|
265c58611f | ||
|
|
25c973a39e | ||
|
|
123c7b32db | ||
|
|
e2d8e2c4ae | ||
|
|
701509d322 | ||
|
|
c3cc616264 | ||
|
|
91b84b89e4 | ||
|
|
017ec204a9 | ||
|
|
8dbfecd153 | ||
|
|
512db1bc54 | ||
|
|
e157aabd4d | ||
|
|
db2fea448c | ||
|
|
dd82d69b8c | ||
|
|
27328281b7 | ||
|
|
51d205b267 | ||
|
|
84800914f6 | ||
|
|
9b296e65bd | ||
|
|
5f649a1649 | ||
|
|
daea056210 | ||
|
|
30c0db06bd | ||
|
|
91168c005c | ||
|
|
cfa0054077 | ||
|
|
3d5820648b | ||
|
|
d08df97fe5 | ||
|
|
fd6624a058 | ||
|
|
8aa41dd04b | ||
|
|
e890113fc6 | ||
|
|
e2e64798b5 | ||
|
|
b9b6a6566a | ||
|
|
dc9e415602 | ||
|
|
84fa12c885 | ||
|
|
296b35fe9b | ||
|
|
0ff89b9c3c | ||
|
|
3b33540c99 | ||
|
|
29d0174253 | ||
|
|
cc7f2a0d08 | ||
|
|
b1579aed2f | ||
|
|
9247daf953 | ||
|
|
9031e33b66 | ||
|
|
1ee1f5f427 | ||
|
|
a5874a5393 | ||
|
|
969217c9d9 | ||
|
|
e399502c7a | ||
|
|
6883f0c49f | ||
|
|
3fc2c813cc | ||
|
|
9de4b99fc7 | ||
|
|
24e7036822 | ||
|
|
ec9acbcda7 | ||
|
|
c0460660d5 | ||
|
|
b03f4919fb | ||
|
|
08620743b9 | ||
|
|
41362f063a | ||
|
|
5b3069e265 | ||
|
|
b466924717 | ||
|
|
cbc0f65fa3 | ||
|
|
35089a4289 | ||
|
|
aef3131e92 | ||
|
|
342fce97af | ||
|
|
fb5d267bd0 | ||
|
|
c19844a0a3 | ||
|
|
22cf05519a | ||
|
|
511ce35631 | ||
|
|
e9b7548dd6 | ||
|
|
010cde0a4a | ||
|
|
cac5251a98 | ||
|
|
3b825bcbfb | ||
|
|
31959fb24b | ||
|
|
5e9675ad1e | ||
|
|
084b7675b2 | ||
|
|
ed8be5bc55 | ||
|
|
efca2943a0 | ||
|
|
371da7132f | ||
|
|
9a3ff5c46a | ||
|
|
b36c654a3d | ||
|
|
ddeb2613ec | ||
|
|
2d02d20911 | ||
|
|
b2563b9f9f | ||
|
|
fccf6925b1 | ||
|
|
4a7cf65064 | ||
|
|
56587e2821 | ||
|
|
33b8e71583 | ||
|
|
1c96128695 | ||
|
|
ca516b1b26 | ||
|
|
ba4e69bebc | ||
|
|
de5e9f100c | ||
|
|
955da86a3e | ||
|
|
8d85be4c5e | ||
|
|
93eadfb10f | ||
|
|
f8e0b18439 | ||
|
|
64bbe9dfaf | ||
|
|
2e8a9416af | ||
|
|
5dd40bd0bb | ||
|
|
1822dd0549 | ||
|
|
751e49fb0a | ||
|
|
56c43604d0 | ||
|
|
7438c378be | ||
|
|
0e0caf7c06 | ||
|
|
5644f4a295 | ||
|
|
98e1605b17 | ||
|
|
73f0e32d1a | ||
|
|
713cb56fea | ||
|
|
bd3bb70ee8 | ||
|
|
8aa3f14303 | ||
|
|
ac285b453e | ||
|
|
daf55705e4 | ||
|
|
7140baae72 | ||
|
|
27a2e590cd | ||
|
|
7172fa058a | ||
|
|
c0790ccf08 | ||
|
|
87c43517cd | ||
|
|
6561ec524b | ||
|
|
982c5460f0 | ||
|
|
2a3a8848f3 | ||
|
|
752520e428 | ||
|
|
8095b776fe | ||
|
|
e504103e2c | ||
|
|
904183262a | ||
|
|
2a0bc64226 | ||
|
|
6b975c308c | ||
|
|
74be55a477 | ||
|
|
394832c2d6 | ||
|
|
f636c12255 | ||
|
|
03e4a8214c | ||
|
|
6d7785a35b | ||
|
|
904f579332 | ||
|
|
a72d789b08 | ||
|
|
87ad7ace18 | ||
|
|
35153eb524 | ||
|
|
c8ee1fa62e | ||
|
|
5c1a6ed719 | ||
|
|
9d68fde148 | ||
|
|
c7d517f6d2 | ||
|
|
183f1531d3 | ||
|
|
6dfe0ec31e | ||
|
|
8b3f1cebda | ||
|
|
086daf913c | ||
|
|
6a3e2272e9 | ||
|
|
d0e0bf53a6 | ||
|
|
0009e4dfb9 | ||
|
|
30b7a9f172 | ||
|
|
c74cb59e08 | ||
|
|
c1f29a8e08 | ||
|
|
cb895ec335 | ||
|
|
2df4866cfa | ||
|
|
423a1cf486 | ||
|
|
7aeb63c817 | ||
|
|
476fa1f4d2 | ||
|
|
0bea215560 | ||
|
|
3c20b98d99 | ||
|
|
8bcdda29d4 | ||
|
|
c88036405f | ||
|
|
60cddab4f2 | ||
|
|
411ca1c050 | ||
|
|
d1be3a4a1d | ||
|
|
b5dd257427 | ||
|
|
4cf953678d | ||
|
|
ca5678c8c1 | ||
|
|
9e4594be53 | ||
|
|
d16c757c28 | ||
|
|
312bcafd05 | ||
|
|
be24652d4d | ||
|
|
6ab44d9439 | ||
|
|
108cb14d1f | ||
|
|
b98308b524 | ||
|
|
215c445583 | ||
|
|
20d8e32a58 | ||
|
|
33306b2749 | ||
|
|
94eeeba79a | ||
|
|
ecd29a289a | ||
|
|
e7d0af72e3 | ||
|
|
fcb1d3521a | ||
|
|
890bf3bd27 | ||
|
|
dafd81178f | ||
|
|
99dfdebc64 | ||
|
|
c1cfdd6323 | ||
|
|
264a9bc6ed | ||
|
|
f79f5cbf82 | ||
|
|
7313501e30 | ||
|
|
d8b2c819e7 | ||
|
|
69f6d14b81 | ||
|
|
9f3856e646 | ||
|
|
a46e2e9900 | ||
|
|
14f0dd2dd0 | ||
|
|
c051438fa1 | ||
|
|
52e32ac1d3 | ||
|
|
7f8ad34ba2 | ||
|
|
a9c0302454 | ||
|
|
a33e89b44a | ||
|
|
e203ecebee | ||
|
|
2f8e7f56b3 | ||
|
|
2443e1f38c | ||
|
|
eb164098b7 | ||
|
|
62527fa98a | ||
|
|
b9f8e80b14 | ||
|
|
b79e250ed2 | ||
|
|
fc5c9d8f17 | ||
|
|
72d57a8ee6 | ||
|
|
23262e30bc | ||
|
|
8b4ad40ed6 | ||
|
|
d7e9797365 | ||
|
|
e54e0c7877 | ||
|
|
5cb06d8fd6 | ||
|
|
2b34d4e1f7 | ||
|
|
c7aa095fac | ||
|
|
93f1784526 | ||
|
|
559dc503c2 | ||
|
|
414afe0935 | ||
|
|
4ad4f3fc70 | ||
|
|
67273eed9b | ||
|
|
3c63e1d8d9 | ||
|
|
cae555c977 | ||
|
|
407583e8e2 | ||
|
|
131645dc31 | ||
|
|
dafd644fe7 | ||
|
|
73cc1742af | ||
|
|
87afd7686f | ||
|
|
8ce10b5dfa | ||
|
|
943e31b35c | ||
|
|
20f85b94df | ||
|
|
17b784381e | ||
|
|
e3031fddb9 | ||
|
|
38c994a7ae | ||
|
|
85e2e96fb6 | ||
|
|
be35b3ad03 | ||
|
|
dbbd871ea1 | ||
|
|
813911db59 | ||
|
|
3c49b405de | ||
|
|
4cfffd6c4a | ||
|
|
e9f1c12f0f | ||
|
|
4fe252847c | ||
|
|
109cbbe9c5 | ||
|
|
fd3881eaa6 | ||
|
|
08ef208fb7 | ||
|
|
8c45e2a641 | ||
|
|
25dc520163 | ||
|
|
fc37ef9e4b | ||
|
|
11ba367fc9 | ||
|
|
78473f71eb | ||
|
|
8b77f40f99 | ||
|
|
d866716565 | ||
|
|
307d0effe2 | ||
|
|
b47b053e54 | ||
|
|
b79f01caf3 | ||
|
|
0db227f55e | ||
|
|
ac48b38842 | ||
|
|
0cbb9365c6 | ||
|
|
798b8c522b | ||
|
|
15bc7e19f9 | ||
|
|
0be3f1a063 | ||
|
|
c0257c6721 | ||
|
|
9aec0fc7de | ||
|
|
bce5e0d82c | ||
|
|
62032ee248 | ||
|
|
775645f29b | ||
|
|
99c0456872 | ||
|
|
0236bee5de | ||
|
|
59c11b82d5 | ||
|
|
98871d1e9e | ||
|
|
b40dc5d742 | ||
|
|
17b0723713 | ||
|
|
ec585e8907 | ||
|
|
0aeb25ff3b | ||
|
|
a928f2c4aa | ||
|
|
51fcee6f81 | ||
|
|
654be65590 | ||
|
|
105ec79b2b | ||
|
|
c759d8427a | ||
|
|
c7b03d6479 | ||
|
|
2080738883 | ||
|
|
48bc73c271 | ||
|
|
3d0969d1d1 | ||
|
|
323f195036 | ||
|
|
c3c392fc98 | ||
|
|
5d2944c211 | ||
|
|
fe3ba1dd11 | ||
|
|
0c00eb93a0 | ||
|
|
baa77ec13b | ||
|
|
9263652c6d | ||
|
|
bc74375543 | ||
|
|
edb1756050 | ||
|
|
5215f6f654 | ||
|
|
1913b4eeed | ||
|
|
b44a4da5df | ||
|
|
919878fbb2 | ||
|
|
06bdf83419 | ||
|
|
2ff2810a92 | ||
|
|
20d9c1b30d | ||
|
|
bbe10cb0cb | ||
|
|
daba8f3a70 | ||
|
|
1458c3668d | ||
|
|
980a47b42b | ||
|
|
f7ca561b06 | ||
|
|
cacd756efd | ||
|
|
8539e76cb9 | ||
|
|
3bbf694d5a | ||
|
|
44debdde62 | ||
|
|
c6cf2b8e93 | ||
|
|
69c5452b25 | ||
|
|
d321056e8d | ||
|
|
d9a1a59f22 | ||
|
|
0b898b5a8a | ||
|
|
a9e0885be0 | ||
|
|
57ff28c9b7 | ||
|
|
86cc34c0de | ||
|
|
39028f1bd4 | ||
|
|
71f4c05665 | ||
|
|
9ef9797998 | ||
|
|
ab9374de57 | ||
|
|
913e997061 | ||
|
|
8e50d6b6f3 | ||
|
|
2db0744a7b | ||
|
|
2de0028349 | ||
|
|
35d04c5398 | ||
|
|
b1becd0ed5 | ||
|
|
bd9650bc81 | ||
|
|
969a25d1b2 | ||
|
|
f144f77ba7 | ||
|
|
abea1f8910 | ||
|
|
8eaa7fec76 | ||
|
|
fdace647e8 | ||
|
|
d7531c18fc | ||
|
|
ef3f978784 | ||
|
|
e410860e0e | ||
|
|
c64fca1b0c | ||
|
|
15b2a3af91 | ||
|
|
8358505b6d | ||
|
|
1c42779845 | ||
|
|
32823f17e0 | ||
|
|
e1c2e3f5e9 | ||
|
|
044755b30f | ||
|
|
9aa22399a8 | ||
|
|
f564905ac4 | ||
|
|
00e4f81446 | ||
|
|
8927ddec16 | ||
|
|
f6525ae200 | ||
|
|
0be7944d66 | ||
|
|
47819ea86e | ||
|
|
96ce3461ad | ||
|
|
8b6d555421 | ||
|
|
3b9ef8dfc8 | ||
|
|
db6d4bcf47 | ||
|
|
471f1d694f | ||
|
|
495f6f6bd3 | ||
|
|
36e35b6f60 | ||
|
|
192606bc4b | ||
|
|
53a9fdf078 | ||
|
|
ef436bdbe8 | ||
|
|
72d722b07b | ||
|
|
21fc402c01 | ||
|
|
381f77756d | ||
|
|
a386562d9a | ||
|
|
2bc84fb163 | ||
|
|
08f8917acb | ||
|
|
62d205a2ec | ||
|
|
29e873b12d | ||
|
|
95f78080ab | ||
|
|
9549cfde02 | ||
|
|
2361aabbef | ||
|
|
e0cc8d2ce9 | ||
|
|
53c0e97117 | ||
|
|
bb44791bf3 | ||
|
|
9ebcfe9dff | ||
|
|
f339bf613c | ||
|
|
b00c59816d | ||
|
|
a00918116d | ||
|
|
d26c318321 | ||
|
|
eb8770506f | ||
|
|
c06171a802 | ||
|
|
5528c1eaa5 | ||
|
|
93516effe4 | ||
|
|
38e518c710 | ||
|
|
3f6133be27 | ||
|
|
c3bfb355c5 | ||
|
|
c69dd14cbc | ||
|
|
7954652b80 | ||
|
|
ca35b39900 | ||
|
|
09df9b90c3 | ||
|
|
308ae5cbf2 | ||
|
|
1cd5cdfccb | ||
|
|
606e7fd744 | ||
|
|
e8109b09b1 | ||
|
|
536ea60d73 | ||
|
|
3390b6446c | ||
|
|
bfc7f1e4ac | ||
|
|
8ba410a56e | ||
|
|
14d1da3ae0 | ||
|
|
2a72641a0b | ||
|
|
9c4e5dc3ee | ||
|
|
540e5ffa90 | ||
|
|
c1a57591ee | ||
|
|
1a4f72dd4f | ||
|
|
c3c8bbd3b2 | ||
|
|
fb7d34cea8 | ||
|
|
0866c1b52d | ||
|
|
136f728b49 | ||
|
|
5d28a857a4 | ||
|
|
edbe0d166c | ||
|
|
4db8c8b1a3 | ||
|
|
2b16b8604a | ||
|
|
f630929810 | ||
|
|
016abdfef6 | ||
|
|
fd915609cd | ||
|
|
064697fde6 | ||
|
|
a03fd7b81c | ||
|
|
1cfcbc50a6 | ||
|
|
ea1f138c08 | ||
|
|
d560207ea1 | ||
|
|
90b51831fd | ||
|
|
38ed8938d8 | ||
|
|
547e91dbf0 | ||
|
|
04da96e044 | ||
|
|
4a7def101b | ||
|
|
541e5a3b82 | ||
|
|
5af61716aa | ||
|
|
6f3e0051c3 | ||
|
|
703ecc3521 | ||
|
|
67b0f9aacd | ||
|
|
854277bae5 | ||
|
|
ca9760756a | ||
|
|
f1f993a25b | ||
|
|
eb0f727818 | ||
|
|
dc3d0289d6 | ||
|
|
bd830c6f4d | ||
|
|
51d602f973 | ||
|
|
30d5401f31 | ||
|
|
ab6b0f9843 | ||
|
|
c560327f26 | ||
|
|
28939dd45c | ||
|
|
3853e3d6f3 | ||
|
|
6062a1bd68 | ||
|
|
8d94688fd1 | ||
|
|
6b4532b592 | ||
|
|
286fb6f645 | ||
|
|
340caf5da3 | ||
|
|
171c4fd49f | ||
|
|
b8a0fb1dfe | ||
|
|
e65993bccb | ||
|
|
7ffb4660ec | ||
|
|
974f314f57 | ||
|
|
4cec22fa19 | ||
|
|
069477d35c | ||
|
|
eaff1a344e | ||
|
|
1fe1e39a88 | ||
|
|
33b06f56f0 | ||
|
|
61a84abe2a | ||
|
|
3d03100079 | ||
|
|
5297a52bf0 | ||
|
|
88631276e8 | ||
|
|
2c0d9ad64c | ||
|
|
5c691ed835 | ||
|
|
f73864a045 | ||
|
|
94da04fcac | ||
|
|
5f758fbd11 | ||
|
|
fb29529a52 | ||
|
|
3cd2673077 | ||
|
|
d242214e18 | ||
|
|
468b787272 | ||
|
|
cfdb6f851c | ||
|
|
7886f120f3 | ||
|
|
76fe69b133 | ||
|
|
e1bae4fc7e | ||
|
|
bc9705f758 | ||
|
|
c819e234b8 | ||
|
|
ce021b79a7 | ||
|
|
805a2f6f99 | ||
|
|
eb78400b53 | ||
|
|
4852f9ffbd | ||
|
|
c8d2ad2513 | ||
|
|
9f374c2050 | ||
|
|
5799852424 | ||
|
|
6417fa95cf | ||
|
|
61f6284a35 | ||
|
|
6b1a1a62a3 | ||
|
|
feacb4b481 | ||
|
|
fe3c874001 | ||
|
|
d9459b54d9 | ||
|
|
017be8a882 | ||
|
|
b86e543a13 | ||
|
|
c2d4fd876c | ||
|
|
58cad04bbb | ||
|
|
9bb64d6827 | ||
|
|
4441df90c1 | ||
|
|
f51f2417c5 | ||
|
|
aad617647d | ||
|
|
49c0d62dda | ||
|
|
f752098ba5 | ||
|
|
a4477b9e4b | ||
|
|
ad3cef0fc8 | ||
|
|
d89dbe5bd6 | ||
|
|
b0475dbdbc | ||
|
|
60b2e74fa3 | ||
|
|
cda16297d1 | ||
|
|
d6c9a72e15 | ||
|
|
4d7b1512c1 | ||
|
|
d8a35d745e | ||
|
|
e22657ea13 | ||
|
|
d06d6b5534 | ||
|
|
cec8ab1fde | ||
|
|
9fc62a8dd0 | ||
|
|
61540b98c2 | ||
|
|
465ae39e86 | ||
|
|
01f04b9a41 | ||
|
|
34f9ab1046 | ||
|
|
699876778b | ||
|
|
8fc5a0d19e | ||
|
|
62b5926d58 | ||
|
|
4d1037f385 | ||
|
|
e4addb3975 | ||
|
|
2aef351980 | ||
|
|
d88c153c7d | ||
|
|
9e9883082e | ||
|
|
71440df4c7 | ||
|
|
80b004a57d | ||
|
|
ea8476a2dc | ||
|
|
cb85ca18ab | ||
|
|
f1103b95cf | ||
|
|
aa5ff53bcf | ||
|
|
907dabed5d | ||
|
|
0cacbc892c | ||
|
|
6753c3c715 | ||
|
|
36e1363e3d | ||
|
|
d1a711eb6a | ||
|
|
d8dea4dcc7 | ||
|
|
ca161737bc | ||
|
|
3612c3774e | ||
|
|
e6a65bb3ef | ||
|
|
ff291eee48 | ||
|
|
66b8f48a88 | ||
|
|
634760cbdc | ||
|
|
a23a897ad2 | ||
|
|
d9c244278d | ||
|
|
b6c4185b27 | ||
|
|
5896d35e72 | ||
|
|
b4dfdd8bbc | ||
|
|
e6ed3478ea | ||
|
|
db08d9c6b9 | ||
|
|
9490278ece | ||
|
|
fd8bf5f171 | ||
|
|
c9bc14a222 | ||
|
|
63708cbfb0 | ||
|
|
d9f307623c | ||
|
|
540f77a627 | ||
|
|
71bb2d0b8b | ||
|
|
87dc44e434 | ||
|
|
29e0fcd091 | ||
|
|
2e9a798f09 | ||
|
|
b32a39f44f | ||
|
|
d86f9611b3 | ||
|
|
6a62fc4a40 | ||
|
|
7cdd6455d7 | ||
|
|
e4fefd088d | ||
|
|
95e601e2b1 | ||
|
|
b1ffe7b74a | ||
|
|
417c8fb602 | ||
|
|
85efa64c31 | ||
|
|
d8cb026e80 | ||
|
|
41dd5121f0 | ||
|
|
94482d7ca5 | ||
|
|
4d0e51aead | ||
|
|
ae8a8c8ba4 | ||
|
|
7d043f46d5 | ||
|
|
cbca19d6c2 | ||
|
|
b40b9677b6 | ||
|
|
c80ad865db | ||
|
|
758eae49ab | ||
|
|
721b05e343 | ||
|
|
a333bddeeb | ||
|
|
4c6a52fe90 | ||
|
|
792d73a9cf | ||
|
|
9a95a3f8c3 | ||
|
|
485edb777f | ||
|
|
a8c3431ae9 | ||
|
|
6fe4a6fa9a | ||
|
|
6d8c7356d6 | ||
|
|
a782c96e81 | ||
|
|
c795123cd5 | ||
|
|
0ec370e6fb | ||
|
|
3d5732d4e0 | ||
|
|
b795929858 | ||
|
|
535258ffe4 | ||
|
|
cc161b96ac | ||
|
|
5c4b422b18 | ||
|
|
89bad584c3 | ||
|
|
e21926f7f0 | ||
|
|
e452f467d4 | ||
|
|
dfda7ba456 | ||
|
|
feb6b6445e | ||
|
|
0b57fa9c51 | ||
|
|
55c6f60c90 | ||
|
|
9def011e8e | ||
|
|
7cf6e8c9cc | ||
|
|
cdee43aa59 | ||
|
|
9c25b58b4c | ||
|
|
83f35463f5 | ||
|
|
818cdb879e | ||
|
|
3eead2d6c4 | ||
|
|
5cffe055ad | ||
|
|
3d4511daf3 | ||
|
|
4748b40ad9 | ||
|
|
c40b4f6c39 | ||
|
|
d3b96dd394 | ||
|
|
f946df640b | ||
|
|
fef78bd6f1 | ||
|
|
9e6cc86bf7 | ||
|
|
b544c5fa5c | ||
|
|
afa64ee31f | ||
|
|
e9bfef0eb1 | ||
|
|
ddbcccd43d | ||
|
|
5370d7a6eb | ||
|
|
685b180ab6 | ||
|
|
9dab850874 | ||
|
|
0d5bfe883e | ||
|
|
cc2f1d4894 | ||
|
|
a8dd13db4c | ||
|
|
325391aef9 | ||
|
|
3474ec4ecb | ||
|
|
ec1736d488 | ||
|
|
4522579688 | ||
|
|
907a6e0eed | ||
|
|
d20186a7b8 | ||
|
|
b28051881e | ||
|
|
bdea56cd3f | ||
|
|
8a3ec2c659 | ||
|
|
14e9420d2c | ||
|
|
5b58e61f28 | ||
|
|
be2f3071b5 | ||
|
|
85dbf82d93 | ||
|
|
a9c4963cc0 | ||
|
|
a4934387d5 | ||
|
|
e88a2ec6fc | ||
|
|
0666960173 | ||
|
|
f114caca90 | ||
|
|
9468c9c796 | ||
|
|
76c53c690c | ||
|
|
c341b11aaf | ||
|
|
6212e6990a | ||
|
|
28049a183c | ||
|
|
5d3dd7911e | ||
|
|
ae8375516b | ||
|
|
e3f10eb825 | ||
|
|
2b1f683239 | ||
|
|
a2b19c9a63 | ||
|
|
4146ce8267 | ||
|
|
170bd6dafc | ||
|
|
7e16ec8724 | ||
|
|
8c459156f8 | ||
|
|
2db894807b | ||
|
|
95ceeb6e0b | ||
|
|
c9c00d2a23 | ||
|
|
1afe49864d | ||
|
|
6924bee3a0 | ||
|
|
39d4552dab | ||
|
|
a23c63738f | ||
|
|
e911945c55 | ||
|
|
6d58d13710 | ||
|
|
0b177cb165 | ||
|
|
3e31b619de | ||
|
|
f925979b2f | ||
|
|
49f7fa82b9 | ||
|
|
e4cd4cf3f3 | ||
|
|
e74b20926d | ||
|
|
a312127c91 | ||
|
|
1dc5bf4f73 | ||
|
|
01cfe670c5 | ||
|
|
fd307bfe29 | ||
|
|
a00de093a7 | ||
|
|
7bfe853af3 | ||
|
|
cbaecca8e9 | ||
|
|
8edfb370a8 | ||
|
|
4c08c8f7db | ||
|
|
c174680a03 | ||
|
|
cb5f6e18e6 | ||
|
|
b798e7a5ae | ||
|
|
5deab7ad27 | ||
|
|
12cdfd282d | ||
|
|
eba8035e12 | ||
|
|
edcbf4350b | ||
|
|
9289ea471f | ||
|
|
7d06185aa6 | ||
|
|
01ecb1d7e7 | ||
|
|
e177f14595 | ||
|
|
5c6eddcadd | ||
|
|
b3b4786990 | ||
|
|
fbe2907599 | ||
|
|
343da8d4b3 | ||
|
|
8d97792dbc | ||
|
|
8d07c87be7 | ||
|
|
ed21701df3 | ||
|
|
df01507582 | ||
|
|
f2bda5fd5b | ||
|
|
cba9838e8f | ||
|
|
b6dba9f5dd | ||
|
|
6e9d1617c6 | ||
|
|
ea811fee52 | ||
|
|
7391fd8f6a | ||
|
|
6c00c58f2a | ||
|
|
4931fbce49 | ||
|
|
fefc7ea600 | ||
|
|
d220389647 | ||
|
|
a1f910c159 | ||
|
|
e4866563de | ||
|
|
47f45aa229 | ||
|
|
affe334675 | ||
|
|
ee7e184e26 | ||
|
|
bec0ebacf1 | ||
|
|
5bd6d631c6 | ||
|
|
fd1799f3bb | ||
|
|
d84a0c51e0 | ||
|
|
d9a7c7de51 | ||
|
|
d57e09889a | ||
|
|
eecb86bfb0 | ||
|
|
0b1197936c | ||
|
|
b545ac6391 | ||
|
|
a922132e4a | ||
|
|
9474e8d6d2 | ||
|
|
6328428568 |
14
.cvsignore
Normal file
14
.cvsignore
Normal file
@@ -0,0 +1,14 @@
|
|||||||
|
config.log
|
||||||
|
Makefile
|
||||||
|
libtool
|
||||||
|
Makefile.in
|
||||||
|
aclocal.m4
|
||||||
|
configure
|
||||||
|
config.h
|
||||||
|
config.status
|
||||||
|
curl-config
|
||||||
|
autom4te.cache
|
||||||
|
depcomp
|
||||||
|
config.guess
|
||||||
|
config.sub
|
||||||
|
ltmain.sh
|
||||||
1957
CHANGES.2001
Normal file
1957
CHANGES.2001
Normal file
File diff suppressed because it is too large
Load Diff
1504
CHANGES.2002
Normal file
1504
CHANGES.2002
Normal file
File diff suppressed because it is too large
Load Diff
21
COPYING
Normal file
21
COPYING
Normal file
@@ -0,0 +1,21 @@
|
|||||||
|
COPYRIGHT AND PERMISSION NOTICE
|
||||||
|
|
||||||
|
Copyright (c) 1996 - 2004, Daniel Stenberg, <daniel@haxx.se>.
|
||||||
|
|
||||||
|
All rights reserved.
|
||||||
|
|
||||||
|
Permission to use, copy, modify, and distribute this software for any purpose
|
||||||
|
with or without fee is hereby granted, provided that the above copyright
|
||||||
|
notice and this permission notice appear in all copies.
|
||||||
|
|
||||||
|
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||||
|
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||||
|
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT OF THIRD PARTY RIGHTS. IN
|
||||||
|
NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
|
||||||
|
DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
|
||||||
|
OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE
|
||||||
|
OR OTHER DEALINGS IN THE SOFTWARE.
|
||||||
|
|
||||||
|
Except as contained in this notice, the name of a copyright holder shall not
|
||||||
|
be used in advertising or otherwise to promote the sale, use or other dealings
|
||||||
|
in this Software without prior written authorization of the copyright holder.
|
||||||
39
CVS-INFO
39
CVS-INFO
@@ -15,8 +15,9 @@ Compile and build instructions follow below.
|
|||||||
CHANGES.0 contains ancient changes.
|
CHANGES.0 contains ancient changes.
|
||||||
CHANGES.$year contains changes for the particular year.
|
CHANGES.$year contains changes for the particular year.
|
||||||
|
|
||||||
memanalyze.pl is for analyzing the output generated by curl if -DMALLOCDEBUG
|
tests/memanalyze.pl
|
||||||
is used when compiling
|
is for analyzing the output generated by curl if -DCURLDEBUG
|
||||||
|
is used when compiling (run configure with --enable-debug)
|
||||||
|
|
||||||
buildconf builds the makefiles and configure stuff
|
buildconf builds the makefiles and configure stuff
|
||||||
|
|
||||||
@@ -30,25 +31,39 @@ To build after having extracted everything from CVS, do this:
|
|||||||
./configure
|
./configure
|
||||||
make
|
make
|
||||||
|
|
||||||
|
Daniel uses a ./configure line similar to this for easier development:
|
||||||
|
|
||||||
|
./configure --disable-shared --enable-debug --enable-maintainer-mode
|
||||||
|
|
||||||
|
|
||||||
REQUIREMENTS
|
REQUIREMENTS
|
||||||
|
|
||||||
You need the following software installed:
|
You need the following software installed:
|
||||||
|
|
||||||
o autoconf 2.50 (or later)
|
o autoconf 2.57 (or later)
|
||||||
o automake 1.5 (or later)
|
o automake 1.7 (or later)
|
||||||
o libtool 1.4 (or later)
|
o libtool 1.4.2 (or later)
|
||||||
o GNU m4 (required by autoconf)
|
o GNU m4 (required by autoconf)
|
||||||
|
|
||||||
o nroff + perl (if you don't have nroff and perl and you for some reason
|
o nroff + perl
|
||||||
don't want to install them, you can rename the source file
|
|
||||||
src/hugehelp.c.cvs to src/hugehelp.c and avoid having to generate this
|
If you don't have nroff and perl and you for some reason don't want to
|
||||||
file. This will of course give you an older version of the file that isn't
|
install them, you can rename the source file src/hugehelp.c.cvs to
|
||||||
up-to-date. That file was checked in once and won't be updated very
|
src/hugehelp.c and avoid having to generate this file. This will of course
|
||||||
regularly.)
|
give you an older version of the file that isn't up-to-date. That file was
|
||||||
|
checked in once and won't be updated very regularly.
|
||||||
|
|
||||||
|
o yacc/bison
|
||||||
|
|
||||||
|
If you don't have yacc or bison, you must rename the lib/getdate.c.cvs file
|
||||||
|
to lib/getdate.c to be able to build libcurl. yacc/bison is normally used
|
||||||
|
to generate the lib/getdate.c file from the lib/getdate.y source file.
|
||||||
|
|
||||||
MAC OS X
|
MAC OS X
|
||||||
|
|
||||||
For Mac OS X users, Guido Neitzer write down the following step-by-step guide:
|
With Mac OS X 10.2 and the associated Developer Tools, the installed versions
|
||||||
|
of the build tools are adequate. For Mac OS X 10.1 users, Guido Neitzer
|
||||||
|
wrote the following step-by-step guide:
|
||||||
|
|
||||||
1. Install fink (http://fink.sourceforge.net)
|
1. Install fink (http://fink.sourceforge.net)
|
||||||
2. Update fink to the newest version (with the installed fink)
|
2. Update fink to the newest version (with the installed fink)
|
||||||
|
|||||||
25
LEGAL
25
LEGAL
@@ -1,25 +0,0 @@
|
|||||||
Copyright (C) 1998-2001, Daniel Stenberg, <daniel@haxx.se>, et al.
|
|
||||||
|
|
||||||
Everyone is permitted to copy and distribute verbatim copies of this license
|
|
||||||
document, but changing it is not allowed.
|
|
||||||
|
|
||||||
In order to be useful for every potential user, the curl and libcurl are
|
|
||||||
dual-licensed under the MPL and the MIT/X-derivate licenses.
|
|
||||||
|
|
||||||
You may opt to use, copy, modify, merge, publish, distribute and/or sell
|
|
||||||
copies of the Software, and permit persons to whom the Software is furnished
|
|
||||||
to do so, under the terms of the MPL or the MIT/X-derivate licenses. You may
|
|
||||||
pick one of these licenses. The files MITX.txt and MPL-1.1.txt contain the
|
|
||||||
license texts.
|
|
||||||
|
|
||||||
As a courtesy to the open-source and free software community, we ask you to
|
|
||||||
dual-license any modifications that you make as well, under the terms of this
|
|
||||||
document.
|
|
||||||
|
|
||||||
Please remember to always keep the licensing information included in
|
|
||||||
individual source files up-to-date, so as to avoid misleading anyone as to
|
|
||||||
the status of these files.
|
|
||||||
|
|
||||||
I will use a submission policy according to which I will only enter
|
|
||||||
contributions into the CVS tree if the contributor agrees to both licenses
|
|
||||||
and this dual-license approach.
|
|
||||||
27
MITX.txt
27
MITX.txt
@@ -1,27 +0,0 @@
|
|||||||
COPYRIGHT AND PERMISSION NOTICE
|
|
||||||
|
|
||||||
Copyright (c) 1996 - 2001, Daniel Stenberg, <daniel@haxx.se>.
|
|
||||||
|
|
||||||
All rights reserved.
|
|
||||||
|
|
||||||
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
||||||
of this software and associated documentation files (the "Software"), to deal
|
|
||||||
in the Software without restriction, including without limitation the rights
|
|
||||||
to use, copy, modify, merge, publish, distribute, and/or sell copies of the
|
|
||||||
Software, and to permit persons to whom the Software is furnished to do so,
|
|
||||||
provided that the above copyright notice(s) and this permission notice appear
|
|
||||||
in all copies of the Software.
|
|
||||||
|
|
||||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
||||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
||||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT OF THIRD PARTY RIGHTS. IN
|
|
||||||
NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS NOTICE BE
|
|
||||||
LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL DAMAGES, OR ANY
|
|
||||||
DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
|
|
||||||
ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN
|
|
||||||
CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
|
|
||||||
|
|
||||||
Except as contained in this notice, the name of a copyright holder shall not
|
|
||||||
be used in advertising or otherwise to promote the sale, use or other dealings
|
|
||||||
in this Software without prior written authorization of the copyright holder.
|
|
||||||
|
|
||||||
470
MPL-1.1.txt
470
MPL-1.1.txt
@@ -1,470 +0,0 @@
|
|||||||
MOZILLA PUBLIC LICENSE
|
|
||||||
Version 1.1
|
|
||||||
|
|
||||||
---------------
|
|
||||||
|
|
||||||
1. Definitions.
|
|
||||||
|
|
||||||
1.0.1. "Commercial Use" means distribution or otherwise making the
|
|
||||||
Covered Code available to a third party.
|
|
||||||
|
|
||||||
1.1. "Contributor" means each entity that creates or contributes to
|
|
||||||
the creation of Modifications.
|
|
||||||
|
|
||||||
1.2. "Contributor Version" means the combination of the Original
|
|
||||||
Code, prior Modifications used by a Contributor, and the Modifications
|
|
||||||
made by that particular Contributor.
|
|
||||||
|
|
||||||
1.3. "Covered Code" means the Original Code or Modifications or the
|
|
||||||
combination of the Original Code and Modifications, in each case
|
|
||||||
including portions thereof.
|
|
||||||
|
|
||||||
1.4. "Electronic Distribution Mechanism" means a mechanism generally
|
|
||||||
accepted in the software development community for the electronic
|
|
||||||
transfer of data.
|
|
||||||
|
|
||||||
1.5. "Executable" means Covered Code in any form other than Source
|
|
||||||
Code.
|
|
||||||
|
|
||||||
1.6. "Initial Developer" means the individual or entity identified
|
|
||||||
as the Initial Developer in the Source Code notice required by Exhibit
|
|
||||||
A.
|
|
||||||
|
|
||||||
1.7. "Larger Work" means a work which combines Covered Code or
|
|
||||||
portions thereof with code not governed by the terms of this License.
|
|
||||||
|
|
||||||
1.8. "License" means this document.
|
|
||||||
|
|
||||||
1.8.1. "Licensable" means having the right to grant, to the maximum
|
|
||||||
extent possible, whether at the time of the initial grant or
|
|
||||||
subsequently acquired, any and all of the rights conveyed herein.
|
|
||||||
|
|
||||||
1.9. "Modifications" means any addition to or deletion from the
|
|
||||||
substance or structure of either the Original Code or any previous
|
|
||||||
Modifications. When Covered Code is released as a series of files, a
|
|
||||||
Modification is:
|
|
||||||
A. Any addition to or deletion from the contents of a file
|
|
||||||
containing Original Code or previous Modifications.
|
|
||||||
|
|
||||||
B. Any new file that contains any part of the Original Code or
|
|
||||||
previous Modifications.
|
|
||||||
|
|
||||||
1.10. "Original Code" means Source Code of computer software code
|
|
||||||
which is described in the Source Code notice required by Exhibit A as
|
|
||||||
Original Code, and which, at the time of its release under this
|
|
||||||
License is not already Covered Code governed by this License.
|
|
||||||
|
|
||||||
1.10.1. "Patent Claims" means any patent claim(s), now owned or
|
|
||||||
hereafter acquired, including without limitation, method, process,
|
|
||||||
and apparatus claims, in any patent Licensable by grantor.
|
|
||||||
|
|
||||||
1.11. "Source Code" means the preferred form of the Covered Code for
|
|
||||||
making modifications to it, including all modules it contains, plus
|
|
||||||
any associated interface definition files, scripts used to control
|
|
||||||
compilation and installation of an Executable, or source code
|
|
||||||
differential comparisons against either the Original Code or another
|
|
||||||
well known, available Covered Code of the Contributor's choice. The
|
|
||||||
Source Code can be in a compressed or archival form, provided the
|
|
||||||
appropriate decompression or de-archiving software is widely available
|
|
||||||
for no charge.
|
|
||||||
|
|
||||||
1.12. "You" (or "Your") means an individual or a legal entity
|
|
||||||
exercising rights under, and complying with all of the terms of, this
|
|
||||||
License or a future version of this License issued under Section 6.1.
|
|
||||||
For legal entities, "You" includes any entity which controls, is
|
|
||||||
controlled by, or is under common control with You. For purposes of
|
|
||||||
this definition, "control" means (a) the power, direct or indirect,
|
|
||||||
to cause the direction or management of such entity, whether by
|
|
||||||
contract or otherwise, or (b) ownership of more than fifty percent
|
|
||||||
(50%) of the outstanding shares or beneficial ownership of such
|
|
||||||
entity.
|
|
||||||
|
|
||||||
2. Source Code License.
|
|
||||||
|
|
||||||
2.1. The Initial Developer Grant.
|
|
||||||
The Initial Developer hereby grants You a world-wide, royalty-free,
|
|
||||||
non-exclusive license, subject to third party intellectual property
|
|
||||||
claims:
|
|
||||||
(a) under intellectual property rights (other than patent or
|
|
||||||
trademark) Licensable by Initial Developer to use, reproduce,
|
|
||||||
modify, display, perform, sublicense and distribute the Original
|
|
||||||
Code (or portions thereof) with or without Modifications, and/or
|
|
||||||
as part of a Larger Work; and
|
|
||||||
|
|
||||||
(b) under Patents Claims infringed by the making, using or
|
|
||||||
selling of Original Code, to make, have made, use, practice,
|
|
||||||
sell, and offer for sale, and/or otherwise dispose of the
|
|
||||||
Original Code (or portions thereof).
|
|
||||||
|
|
||||||
(c) the licenses granted in this Section 2.1(a) and (b) are
|
|
||||||
effective on the date Initial Developer first distributes
|
|
||||||
Original Code under the terms of this License.
|
|
||||||
|
|
||||||
(d) Notwithstanding Section 2.1(b) above, no patent license is
|
|
||||||
granted: 1) for code that You delete from the Original Code; 2)
|
|
||||||
separate from the Original Code; or 3) for infringements caused
|
|
||||||
by: i) the modification of the Original Code or ii) the
|
|
||||||
combination of the Original Code with other software or devices.
|
|
||||||
|
|
||||||
2.2. Contributor Grant.
|
|
||||||
Subject to third party intellectual property claims, each Contributor
|
|
||||||
hereby grants You a world-wide, royalty-free, non-exclusive license
|
|
||||||
|
|
||||||
(a) under intellectual property rights (other than patent or
|
|
||||||
trademark) Licensable by Contributor, to use, reproduce, modify,
|
|
||||||
display, perform, sublicense and distribute the Modifications
|
|
||||||
created by such Contributor (or portions thereof) either on an
|
|
||||||
unmodified basis, with other Modifications, as Covered Code
|
|
||||||
and/or as part of a Larger Work; and
|
|
||||||
|
|
||||||
(b) under Patent Claims infringed by the making, using, or
|
|
||||||
selling of Modifications made by that Contributor either alone
|
|
||||||
and/or in combination with its Contributor Version (or portions
|
|
||||||
of such combination), to make, use, sell, offer for sale, have
|
|
||||||
made, and/or otherwise dispose of: 1) Modifications made by that
|
|
||||||
Contributor (or portions thereof); and 2) the combination of
|
|
||||||
Modifications made by that Contributor with its Contributor
|
|
||||||
Version (or portions of such combination).
|
|
||||||
|
|
||||||
(c) the licenses granted in Sections 2.2(a) and 2.2(b) are
|
|
||||||
effective on the date Contributor first makes Commercial Use of
|
|
||||||
the Covered Code.
|
|
||||||
|
|
||||||
(d) Notwithstanding Section 2.2(b) above, no patent license is
|
|
||||||
granted: 1) for any code that Contributor has deleted from the
|
|
||||||
Contributor Version; 2) separate from the Contributor Version;
|
|
||||||
3) for infringements caused by: i) third party modifications of
|
|
||||||
Contributor Version or ii) the combination of Modifications made
|
|
||||||
by that Contributor with other software (except as part of the
|
|
||||||
Contributor Version) or other devices; or 4) under Patent Claims
|
|
||||||
infringed by Covered Code in the absence of Modifications made by
|
|
||||||
that Contributor.
|
|
||||||
|
|
||||||
3. Distribution Obligations.
|
|
||||||
|
|
||||||
3.1. Application of License.
|
|
||||||
The Modifications which You create or to which You contribute are
|
|
||||||
governed by the terms of this License, including without limitation
|
|
||||||
Section 2.2. The Source Code version of Covered Code may be
|
|
||||||
distributed only under the terms of this License or a future version
|
|
||||||
of this License released under Section 6.1, and You must include a
|
|
||||||
copy of this License with every copy of the Source Code You
|
|
||||||
distribute. You may not offer or impose any terms on any Source Code
|
|
||||||
version that alters or restricts the applicable version of this
|
|
||||||
License or the recipients' rights hereunder. However, You may include
|
|
||||||
an additional document offering the additional rights described in
|
|
||||||
Section 3.5.
|
|
||||||
|
|
||||||
3.2. Availability of Source Code.
|
|
||||||
Any Modification which You create or to which You contribute must be
|
|
||||||
made available in Source Code form under the terms of this License
|
|
||||||
either on the same media as an Executable version or via an accepted
|
|
||||||
Electronic Distribution Mechanism to anyone to whom you made an
|
|
||||||
Executable version available; and if made available via Electronic
|
|
||||||
Distribution Mechanism, must remain available for at least twelve (12)
|
|
||||||
months after the date it initially became available, or at least six
|
|
||||||
(6) months after a subsequent version of that particular Modification
|
|
||||||
has been made available to such recipients. You are responsible for
|
|
||||||
ensuring that the Source Code version remains available even if the
|
|
||||||
Electronic Distribution Mechanism is maintained by a third party.
|
|
||||||
|
|
||||||
3.3. Description of Modifications.
|
|
||||||
You must cause all Covered Code to which You contribute to contain a
|
|
||||||
file documenting the changes You made to create that Covered Code and
|
|
||||||
the date of any change. You must include a prominent statement that
|
|
||||||
the Modification is derived, directly or indirectly, from Original
|
|
||||||
Code provided by the Initial Developer and including the name of the
|
|
||||||
Initial Developer in (a) the Source Code, and (b) in any notice in an
|
|
||||||
Executable version or related documentation in which You describe the
|
|
||||||
origin or ownership of the Covered Code.
|
|
||||||
|
|
||||||
3.4. Intellectual Property Matters
|
|
||||||
(a) Third Party Claims.
|
|
||||||
If Contributor has knowledge that a license under a third party's
|
|
||||||
intellectual property rights is required to exercise the rights
|
|
||||||
granted by such Contributor under Sections 2.1 or 2.2,
|
|
||||||
Contributor must include a text file with the Source Code
|
|
||||||
distribution titled "LEGAL" which describes the claim and the
|
|
||||||
party making the claim in sufficient detail that a recipient will
|
|
||||||
know whom to contact. If Contributor obtains such knowledge after
|
|
||||||
the Modification is made available as described in Section 3.2,
|
|
||||||
Contributor shall promptly modify the LEGAL file in all copies
|
|
||||||
Contributor makes available thereafter and shall take other steps
|
|
||||||
(such as notifying appropriate mailing lists or newsgroups)
|
|
||||||
reasonably calculated to inform those who received the Covered
|
|
||||||
Code that new knowledge has been obtained.
|
|
||||||
|
|
||||||
(b) Contributor APIs.
|
|
||||||
If Contributor's Modifications include an application programming
|
|
||||||
interface and Contributor has knowledge of patent licenses which
|
|
||||||
are reasonably necessary to implement that API, Contributor must
|
|
||||||
also include this information in the LEGAL file.
|
|
||||||
|
|
||||||
(c) Representations.
|
|
||||||
Contributor represents that, except as disclosed pursuant to
|
|
||||||
Section 3.4(a) above, Contributor believes that Contributor's
|
|
||||||
Modifications are Contributor's original creation(s) and/or
|
|
||||||
Contributor has sufficient rights to grant the rights conveyed by
|
|
||||||
this License.
|
|
||||||
|
|
||||||
3.5. Required Notices.
|
|
||||||
You must duplicate the notice in Exhibit A in each file of the Source
|
|
||||||
Code. If it is not possible to put such notice in a particular Source
|
|
||||||
Code file due to its structure, then You must include such notice in a
|
|
||||||
location (such as a relevant directory) where a user would be likely
|
|
||||||
to look for such a notice. If You created one or more Modification(s)
|
|
||||||
You may add your name as a Contributor to the notice described in
|
|
||||||
Exhibit A. You must also duplicate this License in any documentation
|
|
||||||
for the Source Code where You describe recipients' rights or ownership
|
|
||||||
rights relating to Covered Code. You may choose to offer, and to
|
|
||||||
charge a fee for, warranty, support, indemnity or liability
|
|
||||||
obligations to one or more recipients of Covered Code. However, You
|
|
||||||
may do so only on Your own behalf, and not on behalf of the Initial
|
|
||||||
Developer or any Contributor. You must make it absolutely clear than
|
|
||||||
any such warranty, support, indemnity or liability obligation is
|
|
||||||
offered by You alone, and You hereby agree to indemnify the Initial
|
|
||||||
Developer and every Contributor for any liability incurred by the
|
|
||||||
Initial Developer or such Contributor as a result of warranty,
|
|
||||||
support, indemnity or liability terms You offer.
|
|
||||||
|
|
||||||
3.6. Distribution of Executable Versions.
|
|
||||||
You may distribute Covered Code in Executable form only if the
|
|
||||||
requirements of Section 3.1-3.5 have been met for that Covered Code,
|
|
||||||
and if You include a notice stating that the Source Code version of
|
|
||||||
the Covered Code is available under the terms of this License,
|
|
||||||
including a description of how and where You have fulfilled the
|
|
||||||
obligations of Section 3.2. The notice must be conspicuously included
|
|
||||||
in any notice in an Executable version, related documentation or
|
|
||||||
collateral in which You describe recipients' rights relating to the
|
|
||||||
Covered Code. You may distribute the Executable version of Covered
|
|
||||||
Code or ownership rights under a license of Your choice, which may
|
|
||||||
contain terms different from this License, provided that You are in
|
|
||||||
compliance with the terms of this License and that the license for the
|
|
||||||
Executable version does not attempt to limit or alter the recipient's
|
|
||||||
rights in the Source Code version from the rights set forth in this
|
|
||||||
License. If You distribute the Executable version under a different
|
|
||||||
license You must make it absolutely clear that any terms which differ
|
|
||||||
from this License are offered by You alone, not by the Initial
|
|
||||||
Developer or any Contributor. You hereby agree to indemnify the
|
|
||||||
Initial Developer and every Contributor for any liability incurred by
|
|
||||||
the Initial Developer or such Contributor as a result of any such
|
|
||||||
terms You offer.
|
|
||||||
|
|
||||||
3.7. Larger Works.
|
|
||||||
You may create a Larger Work by combining Covered Code with other code
|
|
||||||
not governed by the terms of this License and distribute the Larger
|
|
||||||
Work as a single product. In such a case, You must make sure the
|
|
||||||
requirements of this License are fulfilled for the Covered Code.
|
|
||||||
|
|
||||||
4. Inability to Comply Due to Statute or Regulation.
|
|
||||||
|
|
||||||
If it is impossible for You to comply with any of the terms of this
|
|
||||||
License with respect to some or all of the Covered Code due to
|
|
||||||
statute, judicial order, or regulation then You must: (a) comply with
|
|
||||||
the terms of this License to the maximum extent possible; and (b)
|
|
||||||
describe the limitations and the code they affect. Such description
|
|
||||||
must be included in the LEGAL file described in Section 3.4 and must
|
|
||||||
be included with all distributions of the Source Code. Except to the
|
|
||||||
extent prohibited by statute or regulation, such description must be
|
|
||||||
sufficiently detailed for a recipient of ordinary skill to be able to
|
|
||||||
understand it.
|
|
||||||
|
|
||||||
5. Application of this License.
|
|
||||||
|
|
||||||
This License applies to code to which the Initial Developer has
|
|
||||||
attached the notice in Exhibit A and to related Covered Code.
|
|
||||||
|
|
||||||
6. Versions of the License.
|
|
||||||
|
|
||||||
6.1. New Versions.
|
|
||||||
Netscape Communications Corporation ("Netscape") may publish revised
|
|
||||||
and/or new versions of the License from time to time. Each version
|
|
||||||
will be given a distinguishing version number.
|
|
||||||
|
|
||||||
6.2. Effect of New Versions.
|
|
||||||
Once Covered Code has been published under a particular version of the
|
|
||||||
License, You may always continue to use it under the terms of that
|
|
||||||
version. You may also choose to use such Covered Code under the terms
|
|
||||||
of any subsequent version of the License published by Netscape. No one
|
|
||||||
other than Netscape has the right to modify the terms applicable to
|
|
||||||
Covered Code created under this License.
|
|
||||||
|
|
||||||
6.3. Derivative Works.
|
|
||||||
If You create or use a modified version of this License (which you may
|
|
||||||
only do in order to apply it to code which is not already Covered Code
|
|
||||||
governed by this License), You must (a) rename Your license so that
|
|
||||||
the phrases "Mozilla", "MOZILLAPL", "MOZPL", "Netscape",
|
|
||||||
"MPL", "NPL" or any confusingly similar phrase do not appear in your
|
|
||||||
license (except to note that your license differs from this License)
|
|
||||||
and (b) otherwise make it clear that Your version of the license
|
|
||||||
contains terms which differ from the Mozilla Public License and
|
|
||||||
Netscape Public License. (Filling in the name of the Initial
|
|
||||||
Developer, Original Code or Contributor in the notice described in
|
|
||||||
Exhibit A shall not of themselves be deemed to be modifications of
|
|
||||||
this License.)
|
|
||||||
|
|
||||||
7. DISCLAIMER OF WARRANTY.
|
|
||||||
|
|
||||||
COVERED CODE IS PROVIDED UNDER THIS LICENSE ON AN "AS IS" BASIS,
|
|
||||||
WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING,
|
|
||||||
WITHOUT LIMITATION, WARRANTIES THAT THE COVERED CODE IS FREE OF
|
|
||||||
DEFECTS, MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE OR NON-INFRINGING.
|
|
||||||
THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE COVERED CODE
|
|
||||||
IS WITH YOU. SHOULD ANY COVERED CODE PROVE DEFECTIVE IN ANY RESPECT,
|
|
||||||
YOU (NOT THE INITIAL DEVELOPER OR ANY OTHER CONTRIBUTOR) ASSUME THE
|
|
||||||
COST OF ANY NECESSARY SERVICING, REPAIR OR CORRECTION. THIS DISCLAIMER
|
|
||||||
OF WARRANTY CONSTITUTES AN ESSENTIAL PART OF THIS LICENSE. NO USE OF
|
|
||||||
ANY COVERED CODE IS AUTHORIZED HEREUNDER EXCEPT UNDER THIS DISCLAIMER.
|
|
||||||
|
|
||||||
8. TERMINATION.
|
|
||||||
|
|
||||||
8.1. This License and the rights granted hereunder will terminate
|
|
||||||
automatically if You fail to comply with terms herein and fail to cure
|
|
||||||
such breach within 30 days of becoming aware of the breach. All
|
|
||||||
sublicenses to the Covered Code which are properly granted shall
|
|
||||||
survive any termination of this License. Provisions which, by their
|
|
||||||
nature, must remain in effect beyond the termination of this License
|
|
||||||
shall survive.
|
|
||||||
|
|
||||||
8.2. If You initiate litigation by asserting a patent infringement
|
|
||||||
claim (excluding declatory judgment actions) against Initial Developer
|
|
||||||
or a Contributor (the Initial Developer or Contributor against whom
|
|
||||||
You file such action is referred to as "Participant") alleging that:
|
|
||||||
|
|
||||||
(a) such Participant's Contributor Version directly or indirectly
|
|
||||||
infringes any patent, then any and all rights granted by such
|
|
||||||
Participant to You under Sections 2.1 and/or 2.2 of this License
|
|
||||||
shall, upon 60 days notice from Participant terminate prospectively,
|
|
||||||
unless if within 60 days after receipt of notice You either: (i)
|
|
||||||
agree in writing to pay Participant a mutually agreeable reasonable
|
|
||||||
royalty for Your past and future use of Modifications made by such
|
|
||||||
Participant, or (ii) withdraw Your litigation claim with respect to
|
|
||||||
the Contributor Version against such Participant. If within 60 days
|
|
||||||
of notice, a reasonable royalty and payment arrangement are not
|
|
||||||
mutually agreed upon in writing by the parties or the litigation claim
|
|
||||||
is not withdrawn, the rights granted by Participant to You under
|
|
||||||
Sections 2.1 and/or 2.2 automatically terminate at the expiration of
|
|
||||||
the 60 day notice period specified above.
|
|
||||||
|
|
||||||
(b) any software, hardware, or device, other than such Participant's
|
|
||||||
Contributor Version, directly or indirectly infringes any patent, then
|
|
||||||
any rights granted to You by such Participant under Sections 2.1(b)
|
|
||||||
and 2.2(b) are revoked effective as of the date You first made, used,
|
|
||||||
sold, distributed, or had made, Modifications made by that
|
|
||||||
Participant.
|
|
||||||
|
|
||||||
8.3. If You assert a patent infringement claim against Participant
|
|
||||||
alleging that such Participant's Contributor Version directly or
|
|
||||||
indirectly infringes any patent where such claim is resolved (such as
|
|
||||||
by license or settlement) prior to the initiation of patent
|
|
||||||
infringement litigation, then the reasonable value of the licenses
|
|
||||||
granted by such Participant under Sections 2.1 or 2.2 shall be taken
|
|
||||||
into account in determining the amount or value of any payment or
|
|
||||||
license.
|
|
||||||
|
|
||||||
8.4. In the event of termination under Sections 8.1 or 8.2 above,
|
|
||||||
all end user license agreements (excluding distributors and resellers)
|
|
||||||
which have been validly granted by You or any distributor hereunder
|
|
||||||
prior to termination shall survive termination.
|
|
||||||
|
|
||||||
9. LIMITATION OF LIABILITY.
|
|
||||||
|
|
||||||
UNDER NO CIRCUMSTANCES AND UNDER NO LEGAL THEORY, WHETHER TORT
|
|
||||||
(INCLUDING NEGLIGENCE), CONTRACT, OR OTHERWISE, SHALL YOU, THE INITIAL
|
|
||||||
DEVELOPER, ANY OTHER CONTRIBUTOR, OR ANY DISTRIBUTOR OF COVERED CODE,
|
|
||||||
OR ANY SUPPLIER OF ANY OF SUCH PARTIES, BE LIABLE TO ANY PERSON FOR
|
|
||||||
ANY INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES OF ANY
|
|
||||||
CHARACTER INCLUDING, WITHOUT LIMITATION, DAMAGES FOR LOSS OF GOODWILL,
|
|
||||||
WORK STOPPAGE, COMPUTER FAILURE OR MALFUNCTION, OR ANY AND ALL OTHER
|
|
||||||
COMMERCIAL DAMAGES OR LOSSES, EVEN IF SUCH PARTY SHALL HAVE BEEN
|
|
||||||
INFORMED OF THE POSSIBILITY OF SUCH DAMAGES. THIS LIMITATION OF
|
|
||||||
LIABILITY SHALL NOT APPLY TO LIABILITY FOR DEATH OR PERSONAL INJURY
|
|
||||||
RESULTING FROM SUCH PARTY'S NEGLIGENCE TO THE EXTENT APPLICABLE LAW
|
|
||||||
PROHIBITS SUCH LIMITATION. SOME JURISDICTIONS DO NOT ALLOW THE
|
|
||||||
EXCLUSION OR LIMITATION OF INCIDENTAL OR CONSEQUENTIAL DAMAGES, SO
|
|
||||||
THIS EXCLUSION AND LIMITATION MAY NOT APPLY TO YOU.
|
|
||||||
|
|
||||||
10. U.S. GOVERNMENT END USERS.
|
|
||||||
|
|
||||||
The Covered Code is a "commercial item," as that term is defined in
|
|
||||||
48 C.F.R. 2.101 (Oct. 1995), consisting of "commercial computer
|
|
||||||
software" and "commercial computer software documentation," as such
|
|
||||||
terms are used in 48 C.F.R. 12.212 (Sept. 1995). Consistent with 48
|
|
||||||
C.F.R. 12.212 and 48 C.F.R. 227.7202-1 through 227.7202-4 (June 1995),
|
|
||||||
all U.S. Government End Users acquire Covered Code with only those
|
|
||||||
rights set forth herein.
|
|
||||||
|
|
||||||
11. MISCELLANEOUS.
|
|
||||||
|
|
||||||
This License represents the complete agreement concerning subject
|
|
||||||
matter hereof. If any provision of this License is held to be
|
|
||||||
unenforceable, such provision shall be reformed only to the extent
|
|
||||||
necessary to make it enforceable. This License shall be governed by
|
|
||||||
California law provisions (except to the extent applicable law, if
|
|
||||||
any, provides otherwise), excluding its conflict-of-law provisions.
|
|
||||||
With respect to disputes in which at least one party is a citizen of,
|
|
||||||
or an entity chartered or registered to do business in the United
|
|
||||||
States of America, any litigation relating to this License shall be
|
|
||||||
subject to the jurisdiction of the Federal Courts of the Northern
|
|
||||||
District of California, with venue lying in Santa Clara County,
|
|
||||||
California, with the losing party responsible for costs, including
|
|
||||||
without limitation, court costs and reasonable attorneys' fees and
|
|
||||||
expenses. The application of the United Nations Convention on
|
|
||||||
Contracts for the International Sale of Goods is expressly excluded.
|
|
||||||
Any law or regulation which provides that the language of a contract
|
|
||||||
shall be construed against the drafter shall not apply to this
|
|
||||||
License.
|
|
||||||
|
|
||||||
12. RESPONSIBILITY FOR CLAIMS.
|
|
||||||
|
|
||||||
As between Initial Developer and the Contributors, each party is
|
|
||||||
responsible for claims and damages arising, directly or indirectly,
|
|
||||||
out of its utilization of rights under this License and You agree to
|
|
||||||
work with Initial Developer and Contributors to distribute such
|
|
||||||
responsibility on an equitable basis. Nothing herein is intended or
|
|
||||||
shall be deemed to constitute any admission of liability.
|
|
||||||
|
|
||||||
13. MULTIPLE-LICENSED CODE.
|
|
||||||
|
|
||||||
Initial Developer may designate portions of the Covered Code as
|
|
||||||
"Multiple-Licensed". "Multiple-Licensed" means that the Initial
|
|
||||||
Developer permits you to utilize portions of the Covered Code under
|
|
||||||
Your choice of the NPL or the alternative licenses, if any, specified
|
|
||||||
by the Initial Developer in the file described in Exhibit A.
|
|
||||||
|
|
||||||
EXHIBIT A -Mozilla Public License.
|
|
||||||
|
|
||||||
``The contents of this file are subject to the Mozilla Public License
|
|
||||||
Version 1.1 (the "License"); you may not use this file except in
|
|
||||||
compliance with the License. You may obtain a copy of the License at
|
|
||||||
http://www.mozilla.org/MPL/
|
|
||||||
|
|
||||||
Software distributed under the License is distributed on an "AS IS"
|
|
||||||
basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the
|
|
||||||
License for the specific language governing rights and limitations
|
|
||||||
under the License.
|
|
||||||
|
|
||||||
The Original Code is ______________________________________.
|
|
||||||
|
|
||||||
The Initial Developer of the Original Code is ________________________.
|
|
||||||
Portions created by ______________________ are Copyright (C) ______
|
|
||||||
_______________________. All Rights Reserved.
|
|
||||||
|
|
||||||
Contributor(s): ______________________________________.
|
|
||||||
|
|
||||||
Alternatively, the contents of this file may be used under the terms
|
|
||||||
of the _____ license (the "[___] License"), in which case the
|
|
||||||
provisions of [______] License are applicable instead of those
|
|
||||||
above. If you wish to allow use of your version of this file only
|
|
||||||
under the terms of the [____] License and not to allow others to use
|
|
||||||
your version of this file under the MPL, indicate your decision by
|
|
||||||
deleting the provisions above and replace them with the notice and
|
|
||||||
other provisions required by the [___] License. If you do not delete
|
|
||||||
the provisions above, a recipient may use your version of this file
|
|
||||||
under either the MPL or the [___] License."
|
|
||||||
|
|
||||||
[NOTE: The text of this Exhibit A may differ slightly from the text of
|
|
||||||
the notices in the Source Code files of the Original Code. You should
|
|
||||||
use the text of this Exhibit A rather than the text found in the
|
|
||||||
Original Code Source Code for Your Modifications.]
|
|
||||||
|
|
||||||
62
Makefile.am
62
Makefile.am
@@ -1,29 +1,59 @@
|
|||||||
|
#***************************************************************************
|
||||||
|
# _ _ ____ _
|
||||||
|
# Project ___| | | | _ \| |
|
||||||
|
# / __| | | | |_) | |
|
||||||
|
# | (__| |_| | _ <| |___
|
||||||
|
# \___|\___/|_| \_\_____|
|
||||||
|
#
|
||||||
|
# Copyright (C) 1998 - 2004, Daniel Stenberg, <daniel@haxx.se>, et al.
|
||||||
|
#
|
||||||
|
# This software is licensed as described in the file COPYING, which
|
||||||
|
# you should have received as part of this distribution. The terms
|
||||||
|
# are also available at http://curl.haxx.se/docs/copyright.html.
|
||||||
|
#
|
||||||
|
# You may opt to use, copy, modify, merge, publish, distribute and/or sell
|
||||||
|
# copies of the Software, and permit persons to whom the Software is
|
||||||
|
# furnished to do so, under the terms of the COPYING file.
|
||||||
|
#
|
||||||
|
# This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
|
||||||
|
# KIND, either express or implied.
|
||||||
#
|
#
|
||||||
# $Id$
|
# $Id$
|
||||||
#
|
###########################################################################
|
||||||
|
|
||||||
AUTOMAKE_OPTIONS = foreign no-dependencies
|
AUTOMAKE_OPTIONS = foreign
|
||||||
|
|
||||||
EXTRA_DIST = \
|
EXTRA_DIST = CHANGES COPYING maketgz reconf Makefile.dist \
|
||||||
CHANGES LEGAL maketgz MITX.txt MPL-1.1.txt \
|
curl-config.in build_vms.com curl-style.el sample.emacs testcurl.sh \
|
||||||
reconf Makefile.dist curl-config.in build_vms.com curl-mode.el \
|
RELEASE-NOTES
|
||||||
config-vms.h config-win32.h config-riscos.h config-mac.h
|
|
||||||
|
|
||||||
bin_SCRIPTS = curl-config
|
bin_SCRIPTS = curl-config
|
||||||
|
|
||||||
SUBDIRS = docs lib src include tests packages multi
|
SUBDIRS = lib src
|
||||||
|
DIST_SUBDIRS = $(SUBDIRS) tests include packages docs
|
||||||
|
|
||||||
# create a root makefile in the distribution:
|
|
||||||
dist-hook:
|
dist-hook:
|
||||||
cp $(srcdir)/Makefile.dist $(distdir)/Makefile
|
rm -rf $(top_builddir)/tests/log
|
||||||
|
find $(distdir) -name "*.dist" -exec rm {} \;
|
||||||
|
(distit=`find $(srcdir) -name "*.dist"`; \
|
||||||
|
for file in $$distit; do \
|
||||||
|
strip=`echo $$file | sed -e s/^$(srcdir)// -e s/\.dist//`; \
|
||||||
|
cp $$file $(distdir)$$strip; \
|
||||||
|
done)
|
||||||
|
|
||||||
html:
|
html:
|
||||||
cd docs; make html
|
cd docs; make html
|
||||||
|
|
||||||
|
pdf:
|
||||||
|
cd docs; make pdf
|
||||||
|
|
||||||
check: test
|
check: test
|
||||||
|
|
||||||
test:
|
test:
|
||||||
@(cd tests; $(MAKE) quiet-test)
|
@(cd tests; $(MAKE) all quiet-test)
|
||||||
|
|
||||||
|
test-full:
|
||||||
|
@(cd tests; $(MAKE) all full-test)
|
||||||
|
|
||||||
#
|
#
|
||||||
# Build source and binary rpms. For rpm-3.0 and above, the ~/.rpmmacros
|
# Build source and binary rpms. For rpm-3.0 and above, the ~/.rpmmacros
|
||||||
@@ -64,7 +94,7 @@ rpm:
|
|||||||
pkgadd:
|
pkgadd:
|
||||||
umask 022 ; \
|
umask 022 ; \
|
||||||
make install DESTDIR=`/bin/pwd`/packages/Solaris/root ; \
|
make install DESTDIR=`/bin/pwd`/packages/Solaris/root ; \
|
||||||
cat LEGAL MITX.txt MPL-1.1.txt > $(srcdir)/packages/Solaris/copyright ; \
|
cat COPYING > $(srcdir)/packages/Solaris/copyright ; \
|
||||||
cd $(srcdir)/packages/Solaris && $(MAKE) package
|
cd $(srcdir)/packages/Solaris && $(MAKE) package
|
||||||
|
|
||||||
#
|
#
|
||||||
@@ -72,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) 2001, Daniel Stenberg, <daniel@haxx.se>, et al.
|
# Copyright (C) 1998 - 2004, Daniel Stenberg, <daniel@haxx.se>, et al.
|
||||||
#
|
#
|
||||||
# In order to be useful for every potential user, curl and libcurl are
|
# This software is licensed as described in the file COPYING, which
|
||||||
# dual-licensed under the MPL and the MIT/X-derivate licenses.
|
# you should have received as part of this distribution. The terms
|
||||||
|
# are also available at http://curl.haxx.se/docs/copyright.html.
|
||||||
#
|
#
|
||||||
# You may opt to use, copy, modify, merge, publish, distribute and/or sell
|
# You may opt to use, copy, modify, merge, publish, distribute and/or sell
|
||||||
# copies of the Software, and permit persons to whom the Software is
|
# copies of the Software, and permit persons to whom the Software is
|
||||||
# furnished to do so, under the terms of the MPL or the MIT/X-derivate
|
# furnished to do so, under the terms of the COPYING file.
|
||||||
# licenses. You may pick one of these licenses.
|
|
||||||
#
|
#
|
||||||
# This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
|
# This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
|
||||||
# KIND, either express or implied.
|
# KIND, either express or implied.
|
||||||
#
|
#
|
||||||
# $Id$
|
# $Id$
|
||||||
#############################################################################
|
###########################################################################
|
||||||
|
|
||||||
all:
|
all:
|
||||||
./configure
|
./configure
|
||||||
@@ -34,12 +34,12 @@ borland:
|
|||||||
cd src & make -f Makefile.b32
|
cd src & make -f Makefile.b32
|
||||||
|
|
||||||
mingw32:
|
mingw32:
|
||||||
cd lib & make -f Makefile.m32
|
cd lib & make -f Makefile.m32 ZLIB=1
|
||||||
cd src & make -f Makefile.m32
|
cd src & make -f Makefile.m32 ZLIB=1
|
||||||
|
|
||||||
mingw32-ssl:
|
mingw32-ssl:
|
||||||
cd lib & make -f Makefile.m32 SSL=1
|
cd lib & make -f Makefile.m32 SSL=1 ZLIB=1
|
||||||
cd src & make -f Makefile.m32 SSL=1
|
cd src & make -f Makefile.m32 SSL=1 ZLIB=1
|
||||||
|
|
||||||
vc:
|
vc:
|
||||||
cd lib
|
cd lib
|
||||||
@@ -51,8 +51,24 @@ vc-ssl:
|
|||||||
cd lib
|
cd lib
|
||||||
nmake -f Makefile.vc6 cfg=release-ssl
|
nmake -f Makefile.vc6 cfg=release-ssl
|
||||||
cd ..\src
|
cd ..\src
|
||||||
|
nmake -f Makefile.vc6 cfg=release-ssl
|
||||||
|
|
||||||
|
vc-ssl-dll:
|
||||||
|
cd lib
|
||||||
|
nmake -f Makefile.vc6 cfg=release-ssl-dll
|
||||||
|
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
|
||||||
@@ -61,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
|
||||||
|
|||||||
47
README
47
README
@@ -11,38 +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.
|
||||||
|
|
||||||
Always try the Curl web site for the latest news:
|
CONTACT
|
||||||
|
|
||||||
http://curl.haxx.se
|
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:
|
||||||
|
|
||||||
|
Sweden -- http://curl.haxx.se/
|
||||||
|
Australia -- http://curl.planetmirror.com/
|
||||||
|
Germany -- http://curl.mirror.at.stealer.net/
|
||||||
|
Russia -- http://curl.tsuren.net/
|
||||||
|
Thailand -- http://curl.siamu.ac.th/
|
||||||
|
US (CA) -- http://curl.mirror.redwire.net/
|
||||||
|
US (TX) -- http://curl.cyberservers.net/
|
||||||
|
|
||||||
|
DOWNLOAD
|
||||||
|
|
||||||
The official download mirror sites are:
|
The official download mirror sites are:
|
||||||
|
|
||||||
|
Australia -- http://curl.planetmirror.com/download/
|
||||||
|
Germany -- ftp://ftp.fu-berlin.de/pub/unix/network/curl/
|
||||||
|
Hongkong -- http://www.execve.net/curl/
|
||||||
|
Russia -- http://curl.tsuren.net/download/
|
||||||
Sweden -- ftp://ftp.sunet.se/pub/www/utilities/curl/
|
Sweden -- ftp://ftp.sunet.se/pub/www/utilities/curl/
|
||||||
Sweden -- http://cool.haxx.se/curl/
|
Sweden -- http://cool.haxx.se/curl/
|
||||||
Germany -- ftp://ftp.fu-berlin.de/pub/unix/network/curl/
|
Thailand -- http://curl.siamu.ac.th/download/
|
||||||
|
US (CA) -- http://curl.mirror.redwire.net/download/
|
||||||
|
US (TX) -- http://curl.cyberservers.net/download/
|
||||||
|
|
||||||
|
CVS
|
||||||
|
|
||||||
To download the very latest source off the CVS server do this:
|
To download the very latest source off the CVS server do this:
|
||||||
|
|
||||||
cvs -d :pserver:anonymous@cvs.curl.sourceforge.net:/cvsroot/curl login
|
cvs -d :pserver:cvsread@cvs.php.net:/repository login
|
||||||
|
|
||||||
(just press enter when asked for password)
|
(enter "phpfi" when asked for password)
|
||||||
|
|
||||||
cvs -d :pserver:anonymous@cvs.curl.sourceforge.net:/cvsroot/curl co curl
|
cvs -d :pserver:cvsread@cvs.php.net:/repository co curl
|
||||||
|
|
||||||
(you'll get a directory named curl created, filled with the source code)
|
(you'll get a directory named curl created, filled with the source code)
|
||||||
|
|
||||||
cvs -d :pserver:anonymous@cvs.curl.sourceforge.net:/cvsroot/curl logout
|
cvs -d :pserver:cvsread@cvs.php.net:/repository logout
|
||||||
|
|
||||||
(you're off the hook!)
|
(you're off the hook!)
|
||||||
|
|
||||||
|
NOTICE
|
||||||
|
|
||||||
Curl contains pieces of source code that is Copyright (c) 1998, 1999
|
Curl contains pieces of source code that is Copyright (c) 1998, 1999
|
||||||
Kungliga Tekniska H<>gskolan. This notice is included here to comply with the
|
Kungliga Tekniska H<>gskolan. This notice is included here to comply with the
|
||||||
distribution terms.
|
distribution terms.
|
||||||
|
|||||||
89
RELEASE-NOTES
Normal file
89
RELEASE-NOTES
Normal file
@@ -0,0 +1,89 @@
|
|||||||
|
Curl and libcurl 7.11.0. A minor-features-added release.
|
||||||
|
|
||||||
|
The 78th public curl release. Release number 105 counted from the very
|
||||||
|
beginning.
|
||||||
|
|
||||||
|
This release includes the following changes:
|
||||||
|
|
||||||
|
o allows the URL to be set by a callback when using the multi interface
|
||||||
|
o large file support was added. Use one of the new options: INFILESIZE_LARGE,
|
||||||
|
RESUME_FROM_LARGE and MAXFILESIZE_LARGE
|
||||||
|
o the new --ftp-pasv overrides a previous --ftpport
|
||||||
|
o CURLOPT_FTPSSL and ftps:// now do ssl over FTP "The Right Way" (the curl
|
||||||
|
tool now features the --ftp-ssl option)
|
||||||
|
o The Windows DLLs are built with an added "resource file"
|
||||||
|
o New LIBCURL_VERSION_* defines for easier checking version number
|
||||||
|
o Included Mac OS X 'framework' makefile in the release archive
|
||||||
|
o Removed the TRUE and FALSE #defines from the public curl header file
|
||||||
|
o Added CURLOPT_NETRC_FILE
|
||||||
|
|
||||||
|
This release includes the following bugfixes:
|
||||||
|
|
||||||
|
o improved config file parsing for options with required parameters
|
||||||
|
o using --trace with a bad file name could crash
|
||||||
|
o release archive contains compressed help text
|
||||||
|
o the win32 password prompting supports backspace
|
||||||
|
o builds natively on AmigaOS (without unix emulation)
|
||||||
|
o ftps:// now uses port 990 by default
|
||||||
|
o the "configure --with-spnego" action was improved
|
||||||
|
o fixed a rare follow-redirect problem
|
||||||
|
o curl-config --feature now outputs AsynchDNS if enabled
|
||||||
|
o occational re-use of freed-memory problem fixed
|
||||||
|
o curl-config --libs now include the ares link directory
|
||||||
|
o configure --enable-ares now accepts a given path
|
||||||
|
o -lz no longer appear twice on the link line
|
||||||
|
o more descriptive error message if the FTP response reader fails
|
||||||
|
o curl-config --feature now shows 'AsynchDNS' when built with ares
|
||||||
|
o VMS build up-to-date and clarified source code
|
||||||
|
o resolve bug caused socks5 to fail
|
||||||
|
o Content-Length: is ignored when getting chunked Transfer-Encoding
|
||||||
|
o POST over proxy to https server failed
|
||||||
|
o improved how libcurl deals with persistant connections over FTP when a
|
||||||
|
transfer fails
|
||||||
|
o accessing a proxy that requires Basic auth without password caused a hang
|
||||||
|
o a free free-twice problem in the server certificate code
|
||||||
|
o minor memory leak when using ranges on persistant connections
|
||||||
|
o formpost parts sending files with .html extensions now use "Content-Type:
|
||||||
|
text/html"
|
||||||
|
o formpost parts now default to "Content-Type: application/octet-stream"
|
||||||
|
o --progress-bar was slightly improved
|
||||||
|
o Failing to connect to localhost, using the multi interface on Solaris
|
||||||
|
showed a connect problem now fixed.
|
||||||
|
o The generated ca-bundle.h file is now generated in the build dir, not the
|
||||||
|
source dir
|
||||||
|
o The FTP-EPSV response parser for the 229 code was fixed
|
||||||
|
o curl finds the user's home dir slightly different and hopefully better on
|
||||||
|
Windows
|
||||||
|
o testcurl.sh can now be used to autotest daily tarballs
|
||||||
|
o a couple of command line options now check that the underlying library
|
||||||
|
actually supports the features before trying to enable them
|
||||||
|
o uninitialized variable fix
|
||||||
|
o better html versions of the man pages
|
||||||
|
|
||||||
|
Other curl-related news since the previous public release:
|
||||||
|
|
||||||
|
o pycURL 7.10.8 was released: http://pycurl.sf.net/
|
||||||
|
o TclCurl 0.10.8 was released:
|
||||||
|
http://personal1.iddeo.es/andresgarci/tclcurl/english/
|
||||||
|
o the Ferite curl binding was released: http://www.ferite.org/
|
||||||
|
o stopped the curl.sourceforge.net mirror, it now redirects to curl.haxx.se
|
||||||
|
o fresh new curl web mirrors:
|
||||||
|
US Texas - http://curl.cyberservers.net
|
||||||
|
US California - http://curl.mirrors.redwire.net
|
||||||
|
Germany - http://curl.mirror.at.stealer.net
|
||||||
|
Thailand - http://curl.siamu.ac.th
|
||||||
|
o Dan Fandrich stepped forward and helps maintaining the download web page
|
||||||
|
|
||||||
|
This release would not have looked like this without help, code, reports and
|
||||||
|
advice from friends like these:
|
||||||
|
|
||||||
|
Kevin Roth, Troels Walsted Hansen, Matt Veenstra, Marty Kuhrt, Benjamin
|
||||||
|
Gerard, Gisle Vanem, Ralph Mitchell, S<>bastien Willemijns, Kang-Jin Lee,
|
||||||
|
Peter Sylvester, Siddhartha Prakash Jain, Mathias Axelsson, Maciej
|
||||||
|
W. Rozycki, Nicolas Croiset, Josh Kapell, Gaz Iqbal, Dave May, Markus
|
||||||
|
Moeller, James Clancy, Giuseppe Attardi, swalkaus at yahoo.com, Steve Green,
|
||||||
|
Marty Kuhrt, Dominick Meglio, Diego Casorran, David Byron, John McGowan,
|
||||||
|
David J Meyer, Dan Fandrich, Pierre, Brian R Duffy, Luke Call, Vincent
|
||||||
|
Bronner
|
||||||
|
|
||||||
|
Thanks! (and sorry if I forgot to mention someone)
|
||||||
54
TODO-RELEASE
Normal file
54
TODO-RELEASE
Normal file
@@ -0,0 +1,54 @@
|
|||||||
|
Issues not sorted in any particular order. #[num] refers to bug report
|
||||||
|
numbers. UNASSIGNED means that no person has publicly stated to work on the
|
||||||
|
issue.
|
||||||
|
|
||||||
|
Fix before releasing 7.11.0
|
||||||
|
===========================
|
||||||
|
|
||||||
|
|
||||||
|
To get fixed in 7.11.1
|
||||||
|
======================
|
||||||
|
|
||||||
|
1. Introduce a new error code indicating authentication problems (for proxy
|
||||||
|
CONNECT error 407 for example). #845941 UNASSIGNED
|
||||||
|
|
||||||
|
2. Make the proxy CONNECT headers get passed to the callbacks just like other
|
||||||
|
headers are. #845941 UNASSIGNED
|
||||||
|
|
||||||
|
4. Multi-threaded OpenSSL usage needs to be addressed (Dirk Manske has stepped
|
||||||
|
forward on this)
|
||||||
|
|
||||||
|
6. REST fix for servers not behaving well on >2GB requests (some outstanding
|
||||||
|
issues, Dave Meyer works on this)
|
||||||
|
|
||||||
|
8. Resolve the occational test case 91 failure. This still has no
|
||||||
|
resolution. Test case 96 has been added to CVS to try variations of this
|
||||||
|
test. (David Byron has done lots of research) UNASSIGNED
|
||||||
|
|
||||||
|
9. Modify ares to do 'files bind' order instead of 'bind files' by default
|
||||||
|
(not actually part of libcurl) See details by Frank Ticheler posted here:
|
||||||
|
http://curl.haxx.se/mail/archive-2003-11/0020.html UNASSIGNED
|
||||||
|
|
||||||
|
10. Anton Fedorov's "dumpcert" patch (only mailed to me privately) UNASSIGNED
|
||||||
|
|
||||||
|
12. The "PUT and (NTLM/Digest) auth" bug (confusion, awaits feedback) #862835
|
||||||
|
|
||||||
|
14. Evaluate/apply Gertjan van Wingerde's SSL patches, UNASSIGNED
|
||||||
|
|
||||||
|
16. Tony Blakie's bug report about getting a 302 and Location: back from a
|
||||||
|
proxy after a CONNECT request. (correct behavior on this is not certain)
|
||||||
|
UNASSIGNED, lack of feedback on this. Subject for dismissal.
|
||||||
|
|
||||||
|
18. Modified Accept: header in the default HTTP request (being discussed).
|
||||||
|
UNASSIGNED
|
||||||
|
|
||||||
|
19. Resolve Giuseppe Attardi's "elusive cache bug" (work required)
|
||||||
|
|
||||||
|
20. Directory listing support for file:///dir/ (patch by David Hull)
|
||||||
|
http://sourceforge.net/tracker/index.php?func=detail&aid=844036&group_id=976&atid=300976
|
||||||
|
This patch needs work to become portable. UNASSIGNED
|
||||||
|
|
||||||
|
21. Send QUIT before closing an FTP connection. Joe Halpin has provided an
|
||||||
|
initial patch. Some outstanding issues.
|
||||||
|
|
||||||
|
23. Peter Sylvester's "Most Significant Common Name" patch. Feedback welcome.
|
||||||
66
acconfig.h
66
acconfig.h
@@ -1,66 +0,0 @@
|
|||||||
/* Name of this package! */
|
|
||||||
#undef PACKAGE
|
|
||||||
|
|
||||||
/* Version number of this archive. */
|
|
||||||
#undef VERSION
|
|
||||||
|
|
||||||
/* Define if you have the getpass function. */
|
|
||||||
#undef HAVE_GETPASS
|
|
||||||
|
|
||||||
/* Define cpu-machine-OS */
|
|
||||||
#undef OS
|
|
||||||
|
|
||||||
/* Define if you have the gethostbyaddr_r() function with 5 arguments */
|
|
||||||
#undef HAVE_GETHOSTBYADDR_R_5
|
|
||||||
|
|
||||||
/* Define if you have the gethostbyaddr_r() function with 7 arguments */
|
|
||||||
#undef HAVE_GETHOSTBYADDR_R_7
|
|
||||||
|
|
||||||
/* Define if you have the gethostbyaddr_r() function with 8 arguments */
|
|
||||||
#undef HAVE_GETHOSTBYADDR_R_8
|
|
||||||
|
|
||||||
/* Define if you have the gethostbyname_r() function with 3 arguments */
|
|
||||||
#undef HAVE_GETHOSTBYNAME_R_3
|
|
||||||
|
|
||||||
/* Define if you have the gethostbyname_r() function with 5 arguments */
|
|
||||||
#undef HAVE_GETHOSTBYNAME_R_5
|
|
||||||
|
|
||||||
/* Define if you have the gethostbyname_r() function with 6 arguments */
|
|
||||||
#undef HAVE_GETHOSTBYNAME_R_6
|
|
||||||
|
|
||||||
/* Define if you have the inet_ntoa_r function declared. */
|
|
||||||
#undef HAVE_INET_NTOA_R_DECL
|
|
||||||
|
|
||||||
/* Define if you need the _REENTRANT define for some functions */
|
|
||||||
#undef NEED_REENTRANT
|
|
||||||
|
|
||||||
/* Define if you have the Kerberos4 libraries (including -ldes) */
|
|
||||||
#undef KRB4
|
|
||||||
|
|
||||||
/* Define if you want to enable IPv6 support */
|
|
||||||
#undef ENABLE_IPV6
|
|
||||||
|
|
||||||
/* Define this to 'int' if ssize_t is not an available typedefed type */
|
|
||||||
#undef ssize_t
|
|
||||||
|
|
||||||
/* Define this to 'int' if socklen_t is not an available typedefed type */
|
|
||||||
#undef socklen_t
|
|
||||||
|
|
||||||
/* Define this as a suitable file to read random data from */
|
|
||||||
#undef RANDOM_FILE
|
|
||||||
|
|
||||||
/* Define this to your Entropy Gathering Daemon socket pathname */
|
|
||||||
#undef EGD_SOCKET
|
|
||||||
|
|
||||||
/* Define if you have a working OpenSSL installation */
|
|
||||||
#undef OPENSSL_ENABLED
|
|
||||||
|
|
||||||
/* Define the one correct non-blocking socket method below */
|
|
||||||
#undef HAVE_FIONBIO
|
|
||||||
#undef HAVE_IOCTLSOCKET
|
|
||||||
#undef HAVE_IOCTLSOCKET_CASE
|
|
||||||
#undef HAVE_O_NONBLOCK
|
|
||||||
#undef HAVE_DISABLED_NONBLOCKING
|
|
||||||
|
|
||||||
/* Define this to 'int' if in_addr_t is not an available typedefed type */
|
|
||||||
#undef in_addr_t
|
|
||||||
100
acinclude.m4
100
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");
|
||||||
],[
|
],[
|
||||||
@@ -176,7 +206,7 @@ AC_DEFUN([TYPE_IN_ADDR_T],
|
|||||||
AC_DEFINE_UNQUOTED(in_addr_t, $curl_cv_in_addr_t_equiv,
|
AC_DEFINE_UNQUOTED(in_addr_t, $curl_cv_in_addr_t_equiv,
|
||||||
[type to use in place of in_addr_t if not defined])],
|
[type to use in place of in_addr_t if not defined])],
|
||||||
[#include <sys/types.h>
|
[#include <sys/types.h>
|
||||||
#include <sys/socket.h>,
|
#include <sys/socket.h>
|
||||||
#include <arpa/inet.h>])
|
#include <arpa/inet.h>])
|
||||||
])
|
])
|
||||||
|
|
||||||
@@ -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.
|
||||||
@@ -377,9 +407,10 @@ AC_DEFUN(CURL_CHECK_GETHOSTBYNAME_R,
|
|||||||
|
|
||||||
int
|
int
|
||||||
gethostbyname_r(const char *, struct hostent *, struct hostent_data *);],[
|
gethostbyname_r(const char *, struct hostent *, struct hostent_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])
|
||||||
@@ -394,10 +425,11 @@ gethostbyname_r(NULL, NULL, NULL);],[
|
|||||||
|
|
||||||
int
|
int
|
||||||
gethostbyname_r(const char *,struct hostent *, struct hostent_data *);],[
|
gethostbyname_r(const char *,struct hostent *, struct hostent_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])
|
||||||
@@ -411,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])
|
||||||
@@ -426,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
|
||||||
|
|
||||||
483
config.guess → ares/config.guess
vendored
483
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
|
|
||||||
#include <stdio.h> /* for printf() prototype */
|
|
||||||
int main (int argc, char *argv[]) {
|
|
||||||
#else
|
|
||||||
int main (argc, argv) int argc; char *argv[]; {
|
|
||||||
#endif
|
|
||||||
#ifdef __ELF__
|
#ifdef __ELF__
|
||||||
# ifdef __GLIBC__
|
# ifdef __GLIBC__
|
||||||
# if __GLIBC__ >= 2
|
# if __GLIBC__ >= 2
|
||||||
printf ("%s-pc-linux-gnu\n", argv[1]);
|
LIBC=gnu
|
||||||
# else
|
# else
|
||||||
printf ("%s-pc-linux-gnulibc1\n", argv[1]);
|
LIBC=gnulibc1
|
||||||
# endif
|
# endif
|
||||||
# else
|
# else
|
||||||
printf ("%s-pc-linux-gnulibc1\n", argv[1]);
|
LIBC=gnulibc1
|
||||||
# endif
|
# endif
|
||||||
#else
|
#else
|
||||||
printf ("%s-pc-linux-gnuaout\n", argv[1]);
|
#ifdef __INTEL_COMPILER
|
||||||
|
LIBC=gnu
|
||||||
|
#else
|
||||||
|
LIBC=gnuaout
|
||||||
|
#endif
|
||||||
#endif
|
#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,14 +6,16 @@ $ 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/"",""../"")"
|
$ 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 = ""
|
||||||
$ call build "[.lib]" "*.c"
|
$ 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_7.axp.exe.ssl]libssl/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 || 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,25 +0,0 @@
|
|||||||
|
|
||||||
#define socklen_t int
|
|
||||||
|
|
||||||
#define HAVE_SYS_SOCKET_H
|
|
||||||
#define HAVE_ARPA_INET_H
|
|
||||||
#define HAVE_SYS_SELECT_H
|
|
||||||
#define HAVE_FCNTL_H
|
|
||||||
#define HAVE_GETTIMEOFDAY
|
|
||||||
|
|
||||||
#define HAVE_SELECT
|
|
||||||
#define HAVE_SOCKET
|
|
||||||
#define ifr_dstaddr ifr_addr
|
|
||||||
|
|
||||||
|
|
||||||
#include <sys/socket.h>
|
|
||||||
#include <sys/if.h>
|
|
||||||
#include <sys/fcntl.h>
|
|
||||||
#include <sys/ioctl.h>
|
|
||||||
#include <netinet/in.h>
|
|
||||||
#include <netdb.h>
|
|
||||||
|
|
||||||
#define ioctl(a,b,c,d) (ioctl(a,b,c) * (d==d))
|
|
||||||
|
|
||||||
|
|
||||||
#define OS "RISC OS"
|
|
||||||
1103
configure.ac
Normal file
1103
configure.ac
Normal file
File diff suppressed because it is too large
Load Diff
615
configure.in
615
configure.in
@@ -1,615 +0,0 @@
|
|||||||
dnl $Id$
|
|
||||||
dnl Process this file with autoconf to produce a configure script.
|
|
||||||
|
|
||||||
dnl Ensure that this file is processed with autoconf 2.50 or newer
|
|
||||||
dnl Don't even think about removing this check!
|
|
||||||
AC_PREREQ(2.50)
|
|
||||||
|
|
||||||
dnl First some basic init macros
|
|
||||||
AC_INIT
|
|
||||||
AC_CONFIG_SRCDIR([lib/urldata.h])
|
|
||||||
AM_CONFIG_HEADER(config.h src/config.h)
|
|
||||||
|
|
||||||
dnl figure out the libcurl version
|
|
||||||
VERSION=`sed -ne 's/^#define LIBCURL_VERSION "\(.*\)"/\1/p' ${srcdir}/include/curl/curl.h`
|
|
||||||
AM_INIT_AUTOMAKE(curl,$VERSION)
|
|
||||||
|
|
||||||
dnl
|
|
||||||
dnl we extract the numerical version for curl-config only
|
|
||||||
VERSIONNUM=`sed -ne 's/^#define LIBCURL_VERSION_NUM 0x\(.*\)/\1/p' ${srcdir}/include/curl/curl.h`
|
|
||||||
AC_SUBST(VERSIONNUM)
|
|
||||||
|
|
||||||
dnl Solaris pkgadd support definitions
|
|
||||||
PKGADD_PKG="HAXXcurl"
|
|
||||||
PKGADD_NAME="cURL - a client that groks URLs"
|
|
||||||
PKGADD_VENDOR="curl.haxx.se"
|
|
||||||
AC_SUBST(PKGADD_PKG)
|
|
||||||
AC_SUBST(PKGADD_NAME)
|
|
||||||
AC_SUBST(PKGADD_VENDOR)
|
|
||||||
|
|
||||||
|
|
||||||
dnl
|
|
||||||
dnl Detect the canonical host and target build environment
|
|
||||||
dnl
|
|
||||||
|
|
||||||
AC_CANONICAL_HOST
|
|
||||||
dnl Get system canonical name
|
|
||||||
AC_DEFINE_UNQUOTED(OS, "${host}")
|
|
||||||
|
|
||||||
dnl Check for AIX weirdos
|
|
||||||
AC_AIX
|
|
||||||
|
|
||||||
dnl Checks for programs.
|
|
||||||
AC_PROG_CC
|
|
||||||
|
|
||||||
dnl check for how to do large files
|
|
||||||
AC_SYS_LARGEFILE
|
|
||||||
|
|
||||||
dnl check for cygwin stuff
|
|
||||||
AC_LIBTOOL_WIN32_DLL
|
|
||||||
|
|
||||||
dnl libtool setup
|
|
||||||
AM_PROG_LIBTOOL
|
|
||||||
|
|
||||||
dnl The install stuff has already been taken care of by the automake stuff
|
|
||||||
dnl AC_PROG_INSTALL
|
|
||||||
AC_PROG_MAKE_SET
|
|
||||||
|
|
||||||
dnl ************************************************************
|
|
||||||
dnl lame option to switch on debug options
|
|
||||||
dnl
|
|
||||||
AC_MSG_CHECKING([whether to enable debug options])
|
|
||||||
AC_ARG_ENABLE(debug,
|
|
||||||
[ --enable-debug Enable pedantic debug options
|
|
||||||
--disable-debug Disable debug options],
|
|
||||||
[ case "$enableval" in
|
|
||||||
no)
|
|
||||||
AC_MSG_RESULT(no)
|
|
||||||
;;
|
|
||||||
*) AC_MSG_RESULT(yes)
|
|
||||||
|
|
||||||
CPPFLAGS="$CPPFLAGS -DMALLOCDEBUG"
|
|
||||||
CFLAGS="-W -Wall -Wwrite-strings -pedantic -g"
|
|
||||||
;;
|
|
||||||
esac ],
|
|
||||||
AC_MSG_RESULT(no)
|
|
||||||
)
|
|
||||||
|
|
||||||
dnl **********************************************************************
|
|
||||||
dnl Checks for IPv6
|
|
||||||
dnl **********************************************************************
|
|
||||||
|
|
||||||
AC_MSG_CHECKING([whether to enable ipv6])
|
|
||||||
AC_ARG_ENABLE(ipv6,
|
|
||||||
[ --enable-ipv6 Enable ipv6 (with ipv4) support
|
|
||||||
--disable-ipv6 Disable ipv6 support],
|
|
||||||
[ case "$enableval" in
|
|
||||||
no)
|
|
||||||
AC_MSG_RESULT(no)
|
|
||||||
ipv6=no
|
|
||||||
;;
|
|
||||||
*) AC_MSG_RESULT(yes)
|
|
||||||
ipv6=yes
|
|
||||||
;;
|
|
||||||
esac ],
|
|
||||||
|
|
||||||
AC_TRY_RUN([ /* is AF_INET6 available? */
|
|
||||||
#include <sys/types.h>
|
|
||||||
#include <sys/socket.h>
|
|
||||||
main()
|
|
||||||
{
|
|
||||||
if (socket(AF_INET6, SOCK_STREAM, 0) < 0)
|
|
||||||
exit(1);
|
|
||||||
else
|
|
||||||
exit(0);
|
|
||||||
}
|
|
||||||
],
|
|
||||||
AC_MSG_RESULT(yes)
|
|
||||||
ipv6=yes,
|
|
||||||
AC_MSG_RESULT(no)
|
|
||||||
ipv6=no,
|
|
||||||
AC_MSG_RESULT(no)
|
|
||||||
ipv6=no
|
|
||||||
))
|
|
||||||
|
|
||||||
if test "$ipv6" = "yes"; then
|
|
||||||
CURL_CHECK_WORKING_GETADDRINFO
|
|
||||||
fi
|
|
||||||
|
|
||||||
|
|
||||||
dnl **********************************************************************
|
|
||||||
dnl Checks for libraries.
|
|
||||||
dnl **********************************************************************
|
|
||||||
|
|
||||||
dnl gethostbyname in the nsl lib?
|
|
||||||
AC_CHECK_FUNC(gethostbyname, , AC_CHECK_LIB(nsl, gethostbyname))
|
|
||||||
|
|
||||||
if test "$ac_cv_lib_nsl_gethostbyname" != "yes" -a "$ac_cv_func_gethostbyname" != "yes"; then
|
|
||||||
dnl gethostbyname in the socket lib?
|
|
||||||
AC_CHECK_FUNC(gethostbyname, , AC_CHECK_LIB(socket, gethostbyname))
|
|
||||||
fi
|
|
||||||
|
|
||||||
dnl At least one system has been identified to require BOTH nsl and
|
|
||||||
dnl socket libs to link properly.
|
|
||||||
if test "$ac_cv_lib_nsl_gethostbyname" = "$ac_cv_func_gethostbyname"; then
|
|
||||||
AC_MSG_CHECKING([trying both nsl and socket libs])
|
|
||||||
my_ac_save_LIBS=$LIBS
|
|
||||||
LIBS="-lnsl -lsocket $LIBS"
|
|
||||||
AC_TRY_LINK( ,
|
|
||||||
[gethostbyname();],
|
|
||||||
my_ac_link_result=success,
|
|
||||||
my_ac_link_result=failure )
|
|
||||||
|
|
||||||
if test "$my_ac_link_result" = "failure"; then
|
|
||||||
AC_MSG_RESULT([no])
|
|
||||||
AC_MSG_ERROR([couldn't find libraries for gethostbyname()])
|
|
||||||
dnl restore LIBS
|
|
||||||
LIBS=$my_ac_save_LIBS
|
|
||||||
else
|
|
||||||
AC_MSG_RESULT([yes])
|
|
||||||
fi
|
|
||||||
fi
|
|
||||||
|
|
||||||
dnl resolve lib?
|
|
||||||
AC_CHECK_FUNC(strcasecmp, , AC_CHECK_LIB(resolve, strcasecmp))
|
|
||||||
|
|
||||||
if test "$ac_cv_lib_resolve_strcasecmp" = "$ac_cv_func_strcasecmp"; then
|
|
||||||
AC_CHECK_LIB(resolve, strcasecmp,
|
|
||||||
[LIBS="-lresolve $LIBS"],
|
|
||||||
,
|
|
||||||
-lnsl)
|
|
||||||
fi
|
|
||||||
|
|
||||||
dnl socket lib?
|
|
||||||
AC_CHECK_FUNC(connect, , AC_CHECK_LIB(socket, connect))
|
|
||||||
|
|
||||||
dnl ucb lib?
|
|
||||||
AC_CHECK_FUNC(gethostname, , AC_CHECK_LIB(ucb, gethostname))
|
|
||||||
|
|
||||||
dnl dl lib?
|
|
||||||
AC_CHECK_FUNC(dlclose, , AC_CHECK_LIB(dl, dlopen))
|
|
||||||
|
|
||||||
dnl **********************************************************************
|
|
||||||
dnl Check how non-blocking sockets are set
|
|
||||||
dnl **********************************************************************
|
|
||||||
AC_ARG_ENABLE(nonblocking,
|
|
||||||
[ --enable-nonblocking Makes the script detect how to do it
|
|
||||||
--disable-nonblocking Makes the script disable non-blocking sockets],
|
|
||||||
[
|
|
||||||
if test "$enableval" = "no" ; then
|
|
||||||
AC_MSG_WARN([non-blocking sockets disabled])
|
|
||||||
AC_DEFINE(HAVE_DISABLED_NONBLOCKING)
|
|
||||||
else
|
|
||||||
CURL_CHECK_NONBLOCKING_SOCKET
|
|
||||||
fi
|
|
||||||
],
|
|
||||||
[
|
|
||||||
CURL_CHECK_NONBLOCKING_SOCKET
|
|
||||||
])
|
|
||||||
|
|
||||||
dnl **********************************************************************
|
|
||||||
dnl Check for the random seed preferences
|
|
||||||
dnl **********************************************************************
|
|
||||||
|
|
||||||
AC_ARG_WITH(egd-socket,
|
|
||||||
[ --with-egd-socket=FILE Entropy Gathering Daemon socket pathname],
|
|
||||||
[ EGD_SOCKET="$withval" ]
|
|
||||||
)
|
|
||||||
if test -n "$EGD_SOCKET" ; then
|
|
||||||
AC_DEFINE_UNQUOTED(EGD_SOCKET, "$EGD_SOCKET")
|
|
||||||
fi
|
|
||||||
|
|
||||||
dnl Check for user-specified random device
|
|
||||||
AC_ARG_WITH(random,
|
|
||||||
[ --with-random=FILE read randomness from FILE (default=/dev/urandom)],
|
|
||||||
[ RANDOM_FILE="$withval" ],
|
|
||||||
[
|
|
||||||
dnl Check for random device
|
|
||||||
AC_CHECK_FILE("/dev/urandom",
|
|
||||||
[
|
|
||||||
RANDOM_FILE="/dev/urandom";
|
|
||||||
]
|
|
||||||
)
|
|
||||||
]
|
|
||||||
)
|
|
||||||
if test -n "$RANDOM_FILE" ; then
|
|
||||||
AC_SUBST(RANDOM_FILE)
|
|
||||||
AC_DEFINE_UNQUOTED(RANDOM_FILE, "$RANDOM_FILE")
|
|
||||||
fi
|
|
||||||
|
|
||||||
dnl **********************************************************************
|
|
||||||
dnl Check for the presence of Kerberos4 libraries and headers
|
|
||||||
dnl **********************************************************************
|
|
||||||
|
|
||||||
AC_ARG_WITH(krb4-includes,
|
|
||||||
[ --with-krb4-includes[=DIR] Specify location of kerberos4 headers],[
|
|
||||||
CPPFLAGS="$CPPFLAGS -I$withval"
|
|
||||||
KRB4INC="$withval"
|
|
||||||
want_krb4=yes
|
|
||||||
])
|
|
||||||
|
|
||||||
AC_ARG_WITH(krb4-libs,
|
|
||||||
[ --with-krb4-libs[=DIR] Specify location of kerberos4 libs],[
|
|
||||||
LDFLAGS="$LDFLAGS -L$withval"
|
|
||||||
KRB4LIB="$withval"
|
|
||||||
want_krb4=yes
|
|
||||||
])
|
|
||||||
|
|
||||||
|
|
||||||
OPT_KRB4=off
|
|
||||||
AC_ARG_WITH(krb4,dnl
|
|
||||||
[ --with-krb4[=DIR] where to look for Kerberos4],[
|
|
||||||
OPT_KRB4="$withval"
|
|
||||||
if test X"$OPT_KRB4" != Xyes
|
|
||||||
then
|
|
||||||
LDFLAGS="$LDFLAGS -L$OPT_KRB4/lib"
|
|
||||||
KRB4LIB="$OPT_KRB4/lib"
|
|
||||||
CPPFLAGS="$CPPFLAGS -I$OPT_KRB4/include"
|
|
||||||
KRB4INC="$OPT_KRB4/include"
|
|
||||||
fi
|
|
||||||
want_krb4="yes"
|
|
||||||
])
|
|
||||||
|
|
||||||
AC_MSG_CHECKING([if Kerberos4 support is requested])
|
|
||||||
|
|
||||||
if test "$want_krb4" = yes
|
|
||||||
then
|
|
||||||
if test "$ipv6" = "yes"; then
|
|
||||||
echo krb4 is not compatible with IPv6
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
AC_MSG_RESULT(yes)
|
|
||||||
|
|
||||||
dnl Check for & handle argument to --with-krb4
|
|
||||||
|
|
||||||
AC_MSG_CHECKING(where to look for Kerberos4)
|
|
||||||
if test X"$OPT_KRB4" = Xyes
|
|
||||||
then
|
|
||||||
AC_MSG_RESULT([defaults])
|
|
||||||
else
|
|
||||||
AC_MSG_RESULT([libs in $KRB4LIB, headers in $KRB4INC])
|
|
||||||
fi
|
|
||||||
|
|
||||||
dnl Check for DES library
|
|
||||||
AC_CHECK_LIB(des, des_pcbc_encrypt,
|
|
||||||
[
|
|
||||||
AC_CHECK_HEADERS(des.h)
|
|
||||||
|
|
||||||
dnl resolv lib?
|
|
||||||
AC_CHECK_FUNC(res_search, , AC_CHECK_LIB(resolv, res_search))
|
|
||||||
|
|
||||||
dnl Check for the Kerberos4 library
|
|
||||||
AC_CHECK_LIB(krb, krb_net_read,
|
|
||||||
[
|
|
||||||
dnl Check for header files
|
|
||||||
AC_CHECK_HEADERS(krb.h)
|
|
||||||
|
|
||||||
dnl we found the required libraries, add to LIBS
|
|
||||||
LIBS="-lkrb -ldes $LIBS"
|
|
||||||
|
|
||||||
dnl Check for function krb_get_our_ip_for_realm
|
|
||||||
dnl this is needed for NAT networks
|
|
||||||
AC_CHECK_FUNCS(krb_get_our_ip_for_realm)
|
|
||||||
|
|
||||||
dnl add define KRB4
|
|
||||||
AC_DEFINE(KRB4)
|
|
||||||
|
|
||||||
dnl substitute it too!
|
|
||||||
KRB4_ENABLED=1
|
|
||||||
AC_SUBST(KRB4_ENABLED)
|
|
||||||
|
|
||||||
dnl the krb4 stuff needs a strlcpy()
|
|
||||||
AC_CHECK_FUNCS(strlcpy)
|
|
||||||
|
|
||||||
])
|
|
||||||
])
|
|
||||||
else
|
|
||||||
AC_MSG_RESULT(no)
|
|
||||||
fi
|
|
||||||
|
|
||||||
|
|
||||||
dnl **********************************************************************
|
|
||||||
dnl Check for the presence of SSL libraries and headers
|
|
||||||
dnl **********************************************************************
|
|
||||||
|
|
||||||
dnl Default to compiler & linker defaults for SSL files & libraries.
|
|
||||||
OPT_SSL=off
|
|
||||||
AC_ARG_WITH(ssl,dnl
|
|
||||||
[ --with-ssl[=DIR] where to look for SSL [compiler/linker default paths]
|
|
||||||
DIR points to the SSL installation [/usr/local/ssl]],
|
|
||||||
OPT_SSL=$withval
|
|
||||||
)
|
|
||||||
|
|
||||||
if test X"$OPT_SSL" = Xno
|
|
||||||
then
|
|
||||||
AC_MSG_WARN(SSL/https support disabled)
|
|
||||||
else
|
|
||||||
|
|
||||||
dnl Check for and handle argument to --with-ssl.
|
|
||||||
|
|
||||||
dnl save the pre-ssl check flags for a while
|
|
||||||
CLEANLDFLAGS="$LDFLAGS"
|
|
||||||
CLEANCPPFLAGS="$CPPFLAGS"
|
|
||||||
|
|
||||||
case "$OPT_SSL" in
|
|
||||||
yes)
|
|
||||||
EXTRA_SSL=/usr/local/ssl ;;
|
|
||||||
off)
|
|
||||||
EXTRA_SSL= ;;
|
|
||||||
*)
|
|
||||||
dnl check the given spot right away!
|
|
||||||
EXTRA_SSL=$OPT_SSL
|
|
||||||
LDFLAGS="$LDFLAGS -L$EXTRA_SSL/lib"
|
|
||||||
CPPFLAGS="$CPPFLAGS -I$EXTRA_SSL/include/openssl -I$EXTRA_SSL/include"
|
|
||||||
;;
|
|
||||||
esac
|
|
||||||
|
|
||||||
AC_CHECK_LIB(crypto, CRYPTO_lock,[
|
|
||||||
HAVECRYPTO="yes"
|
|
||||||
],[
|
|
||||||
OLDLDFLAGS="$LDFLAGS"
|
|
||||||
OLDCPPFLAGS="$CPPFLAGS"
|
|
||||||
LDFLAGS="$CLEANLDFLAGS -L$EXTRA_SSL/lib"
|
|
||||||
CPPFLAGS="$CLEANCPPFLAGS -I$EXTRA_SSL/include/openssl -I$EXTRA_SSL/include"
|
|
||||||
AC_CHECK_LIB(crypto, CRYPTO_add_lock,[
|
|
||||||
HAVECRYPTO="yes" ], [
|
|
||||||
LDFLAGS="$OLDLDFLAGS"
|
|
||||||
CPPFLAGS="$OLDCPPFLAGS"
|
|
||||||
])
|
|
||||||
])
|
|
||||||
|
|
||||||
|
|
||||||
if test "$HAVECRYPTO" = "yes"; then
|
|
||||||
dnl This is only reasonable to do if crypto actually is there: check for
|
|
||||||
dnl SSL libs NOTE: it is important to do this AFTER the crypto lib
|
|
||||||
|
|
||||||
AC_CHECK_LIB(crypto, CRYPTO_add_lock)
|
|
||||||
AC_CHECK_LIB(ssl, SSL_connect)
|
|
||||||
|
|
||||||
if test "$ac_cv_lib_ssl_SSL_connect" != yes; then
|
|
||||||
dnl we didn't find the SSL lib, try the RSAglue/rsaref stuff
|
|
||||||
AC_MSG_CHECKING(for ssl with RSAglue/rsaref libs in use);
|
|
||||||
OLIBS=$LIBS
|
|
||||||
LIBS="$LIBS -lRSAglue -lrsaref"
|
|
||||||
AC_CHECK_LIB(ssl, SSL_connect)
|
|
||||||
if test "$ac_cv_lib_ssl_SSL_connect" != yes; then
|
|
||||||
dnl still no SSL_connect
|
|
||||||
AC_MSG_RESULT(no)
|
|
||||||
LIBS=$OLIBS
|
|
||||||
else
|
|
||||||
AC_MSG_RESULT(yes)
|
|
||||||
fi
|
|
||||||
fi
|
|
||||||
|
|
||||||
|
|
||||||
dnl Check for SSLeay headers
|
|
||||||
AC_CHECK_HEADERS(openssl/x509.h openssl/rsa.h openssl/crypto.h \
|
|
||||||
openssl/pem.h openssl/ssl.h openssl/err.h,
|
|
||||||
OPENSSL_ENABLED=1)
|
|
||||||
|
|
||||||
if test $ac_cv_header_openssl_x509_h = no; then
|
|
||||||
AC_CHECK_HEADERS(x509.h rsa.h crypto.h pem.h ssl.h err.h,
|
|
||||||
OPENSSL_ENABLED=1)
|
|
||||||
fi
|
|
||||||
|
|
||||||
dnl Check for the OpenSSL engine header, it is kind of "separated"
|
|
||||||
dnl from the main SSL check
|
|
||||||
AC_CHECK_HEADERS(openssl/engine.h)
|
|
||||||
|
|
||||||
AC_SUBST(OPENSSL_ENABLED)
|
|
||||||
|
|
||||||
fi
|
|
||||||
|
|
||||||
if test X"$OPT_SSL" != Xoff &&
|
|
||||||
test "$OPENSSL_ENABLED" != "1"; then
|
|
||||||
AC_MSG_ERROR([OpenSSL libs and/or directories were not found where specified!])
|
|
||||||
fi
|
|
||||||
|
|
||||||
|
|
||||||
dnl these can only exist if openssl exists
|
|
||||||
|
|
||||||
AC_CHECK_FUNCS( RAND_status \
|
|
||||||
RAND_screen \
|
|
||||||
RAND_egd )
|
|
||||||
|
|
||||||
fi
|
|
||||||
|
|
||||||
dnl **********************************************************************
|
|
||||||
dnl Check for the presence of ZLIB libraries and headers
|
|
||||||
dnl **********************************************************************
|
|
||||||
|
|
||||||
dnl Default to compiler & linker defaults for files & libraries.
|
|
||||||
dnl OPT_ZLIB=no
|
|
||||||
dnl AC_ARG_WITH(zlib,dnl
|
|
||||||
dnl [ --with-zlib[=DIR] where to look for ZLIB [compiler/linker default paths]
|
|
||||||
dnl DIR points to the ZLIB installation prefix [/usr/local]],
|
|
||||||
dnl OPT_ZLIB=$withval,
|
|
||||||
dnl )
|
|
||||||
|
|
||||||
dnl Check for & handle argument to --with-zlib.
|
|
||||||
dnl
|
|
||||||
dnl NOTE: We *always* look for ZLIB headers & libraries, all this option
|
|
||||||
dnl does is change where we look (by adjusting LIBS and CPPFLAGS.)
|
|
||||||
dnl
|
|
||||||
|
|
||||||
dnl AC_MSG_CHECKING(where to look for ZLIB)
|
|
||||||
dnl if test X"$OPT_ZLIB" = Xno
|
|
||||||
dnl then
|
|
||||||
dnl AC_MSG_RESULT([defaults (or given in environment)])
|
|
||||||
dnl else
|
|
||||||
dnl test X"$OPT_ZLIB" = Xyes && OPT_ZLIB=/usr/local
|
|
||||||
dnl LIBS="$LIBS -L$OPT_ZLIB/lib"
|
|
||||||
dnl CPPFLAGS="$CPPFLAGS -I$OPT_ZLIB/include"
|
|
||||||
dnl AC_MSG_RESULT([$OPT_ZLIB])
|
|
||||||
dnl fi
|
|
||||||
|
|
||||||
dnl z lib?
|
|
||||||
dnl AC_CHECK_FUNC(gzread, , AC_CHECK_LIB(z, gzread))
|
|
||||||
|
|
||||||
|
|
||||||
dnl Default is to try the thread-safe versions of a few functions
|
|
||||||
OPT_THREAD=on
|
|
||||||
AC_ARG_ENABLE(thread,dnl
|
|
||||||
[ --disable-thread tell configure to not look for thread-safe functions],
|
|
||||||
OPT_THREAD=off
|
|
||||||
)
|
|
||||||
|
|
||||||
if test X"$OPT_THREAD" = Xoff
|
|
||||||
then
|
|
||||||
AC_MSG_WARN(libcurl will not get built using thread-safe functions)
|
|
||||||
AC_DEFINE(DISABLED_THREADSAFE, 1, \
|
|
||||||
Set to explicitly specify we don't want to use thread-safe functions)
|
|
||||||
else
|
|
||||||
|
|
||||||
dnl dig around for gethostbyname_r()
|
|
||||||
CURL_CHECK_GETHOSTBYNAME_R()
|
|
||||||
|
|
||||||
dnl dig around for gethostbyaddr_r()
|
|
||||||
CURL_CHECK_GETHOSTBYADDR_R()
|
|
||||||
|
|
||||||
dnl poke around for inet_ntoa_r()
|
|
||||||
CURL_CHECK_INET_NTOA_R()
|
|
||||||
|
|
||||||
dnl is there a localtime_r()
|
|
||||||
CURL_CHECK_LOCALTIME_R()
|
|
||||||
|
|
||||||
AC_CHECK_FUNCS( gmtime_r )
|
|
||||||
|
|
||||||
fi
|
|
||||||
|
|
||||||
dnl **********************************************************************
|
|
||||||
dnl Back to "normal" configuring
|
|
||||||
dnl **********************************************************************
|
|
||||||
|
|
||||||
dnl Checks for header files.
|
|
||||||
AC_HEADER_STDC
|
|
||||||
AC_CHECK_HEADERS( \
|
|
||||||
unistd.h \
|
|
||||||
malloc.h \
|
|
||||||
stdlib.h \
|
|
||||||
arpa/inet.h \
|
|
||||||
net/if.h \
|
|
||||||
netinet/in.h \
|
|
||||||
netinet/if_ether.h \
|
|
||||||
netdb.h \
|
|
||||||
sys/select.h \
|
|
||||||
sys/socket.h \
|
|
||||||
sys/sockio.h \
|
|
||||||
sys/stat.h \
|
|
||||||
sys/types.h \
|
|
||||||
sys/time.h \
|
|
||||||
sys/param.h \
|
|
||||||
termios.h \
|
|
||||||
termio.h \
|
|
||||||
sgtty.h \
|
|
||||||
fcntl.h \
|
|
||||||
dlfcn.h \
|
|
||||||
alloca.h \
|
|
||||||
winsock.h \
|
|
||||||
time.h \
|
|
||||||
io.h \
|
|
||||||
pwd.h \
|
|
||||||
utime.h \
|
|
||||||
sys/utime.h
|
|
||||||
)
|
|
||||||
|
|
||||||
dnl Check for libz header
|
|
||||||
dnl AC_CHECK_HEADERS(zlib.h)
|
|
||||||
|
|
||||||
dnl Checks for typedefs, structures, and compiler characteristics.
|
|
||||||
AC_C_CONST
|
|
||||||
AC_TYPE_SIZE_T
|
|
||||||
AC_HEADER_TIME
|
|
||||||
|
|
||||||
# mprintf() checks:
|
|
||||||
|
|
||||||
# check for 'long double'
|
|
||||||
AC_CHECK_SIZEOF(long double, 8)
|
|
||||||
# check for 'long long'
|
|
||||||
AC_CHECK_SIZEOF(long long, 4)
|
|
||||||
|
|
||||||
# check for ssize_t
|
|
||||||
AC_CHECK_TYPE(ssize_t, int)
|
|
||||||
|
|
||||||
TYPE_SOCKLEN_T
|
|
||||||
TYPE_IN_ADDR_T
|
|
||||||
|
|
||||||
dnl Checks for library functions.
|
|
||||||
dnl AC_PROG_GCC_TRADITIONAL
|
|
||||||
AC_TYPE_SIGNAL
|
|
||||||
dnl AC_FUNC_VPRINTF
|
|
||||||
AC_CHECK_FUNCS( socket \
|
|
||||||
select \
|
|
||||||
strdup \
|
|
||||||
strstr \
|
|
||||||
strtok_r \
|
|
||||||
strftime \
|
|
||||||
uname \
|
|
||||||
strcasecmp \
|
|
||||||
stricmp \
|
|
||||||
strcmpi \
|
|
||||||
gethostname \
|
|
||||||
gethostbyaddr \
|
|
||||||
gettimeofday \
|
|
||||||
inet_addr \
|
|
||||||
inet_ntoa \
|
|
||||||
tcsetattr \
|
|
||||||
tcgetattr \
|
|
||||||
perror \
|
|
||||||
closesocket \
|
|
||||||
setvbuf \
|
|
||||||
sigaction \
|
|
||||||
signal \
|
|
||||||
getpass_r \
|
|
||||||
strlcat \
|
|
||||||
getpwuid \
|
|
||||||
geteuid \
|
|
||||||
dlopen \
|
|
||||||
utime
|
|
||||||
)
|
|
||||||
|
|
||||||
dnl removed 'getpass' check on October 26, 2000
|
|
||||||
|
|
||||||
if test "$ac_cv_func_select" != "yes"; then
|
|
||||||
AC_MSG_ERROR(Can't work without an existing select() function)
|
|
||||||
fi
|
|
||||||
if test "$ac_cv_func_socket" != "yes"; then
|
|
||||||
AC_MSG_ERROR(Can't work without an existing socket() function)
|
|
||||||
fi
|
|
||||||
|
|
||||||
AC_PATH_PROG( PERL, perl, ,
|
|
||||||
$PATH:/usr/local/bin/perl:/usr/bin/:/usr/local/bin )
|
|
||||||
AC_SUBST(PERL)
|
|
||||||
|
|
||||||
AC_PATH_PROGS( NROFF, gnroff nroff, ,
|
|
||||||
$PATH:/usr/bin/:/usr/local/bin )
|
|
||||||
AC_SUBST(NROFF)
|
|
||||||
|
|
||||||
AC_PROG_YACC
|
|
||||||
|
|
||||||
dnl AC_PATH_PROG( RANLIB, ranlib, /usr/bin/ranlib,
|
|
||||||
dnl $PATH:/usr/bin/:/usr/local/bin )
|
|
||||||
dnl AC_SUBST(RANLIB)
|
|
||||||
|
|
||||||
AC_CONFIG_FILES([Makefile \
|
|
||||||
docs/Makefile \
|
|
||||||
docs/examples/Makefile \
|
|
||||||
include/Makefile \
|
|
||||||
include/curl/Makefile \
|
|
||||||
src/Makefile \
|
|
||||||
multi/Makefile \
|
|
||||||
lib/Makefile \
|
|
||||||
tests/Makefile \
|
|
||||||
tests/data/Makefile \
|
|
||||||
packages/Makefile \
|
|
||||||
packages/Win32/Makefile \
|
|
||||||
packages/Win32/cygwin/Makefile \
|
|
||||||
packages/Linux/Makefile \
|
|
||||||
packages/Linux/RPM/Makefile \
|
|
||||||
packages/Linux/RPM/curl.spec \
|
|
||||||
packages/Linux/RPM/curl-ssl.spec \
|
|
||||||
packages/Solaris/Makefile \
|
|
||||||
curl-config
|
|
||||||
])
|
|
||||||
AC_OUTPUT
|
|
||||||
|
|
||||||
@@ -16,6 +16,8 @@ Usage: curl-config [OPTION]
|
|||||||
|
|
||||||
Available values for OPTION include:
|
Available values for OPTION include:
|
||||||
|
|
||||||
|
--ca ca bundle install path
|
||||||
|
--cc compiler
|
||||||
--cflags pre-processor and compiler flags
|
--cflags pre-processor and compiler flags
|
||||||
--feature newline separated list of enabled features
|
--feature newline separated list of enabled features
|
||||||
--help display this help and exit
|
--help display this help and exit
|
||||||
@@ -42,6 +44,14 @@ while test $# -gt 0; do
|
|||||||
esac
|
esac
|
||||||
|
|
||||||
case "$1" in
|
case "$1" in
|
||||||
|
--ca)
|
||||||
|
echo @CURL_CA_BUNDLE@
|
||||||
|
;;
|
||||||
|
|
||||||
|
--cc)
|
||||||
|
echo @CC@
|
||||||
|
;;
|
||||||
|
|
||||||
--prefix)
|
--prefix)
|
||||||
echo $prefix
|
echo $prefix
|
||||||
;;
|
;;
|
||||||
@@ -56,6 +66,33 @@ while test $# -gt 0; do
|
|||||||
if test "@IPV6_ENABLED@" = "1"; then
|
if test "@IPV6_ENABLED@" = "1"; then
|
||||||
echo "IPv6"
|
echo "IPv6"
|
||||||
fi
|
fi
|
||||||
|
if test "@HAVE_LIBZ@" = "1"; then
|
||||||
|
echo "libz"
|
||||||
|
fi
|
||||||
|
if test "@CURL_DISABLE_HTTP@" = "1"; then
|
||||||
|
echo "HTTP-disabled"
|
||||||
|
fi
|
||||||
|
if test "@CURL_DISABLE_FTP@" = "1"; then
|
||||||
|
echo "FTP-disabled"
|
||||||
|
fi
|
||||||
|
if test "@CURL_DISABLE_GOPHER@" = "1"; then
|
||||||
|
echo "GOPHER-disabled"
|
||||||
|
fi
|
||||||
|
if test "@CURL_DISABLE_FILE@" = "1"; then
|
||||||
|
echo "FILE-disabled"
|
||||||
|
fi
|
||||||
|
if test "@CURL_DISABLE_TELNET@" = "1"; then
|
||||||
|
echo "TELNET-disabled"
|
||||||
|
fi
|
||||||
|
if test "@CURL_DISABLE_LDAP@" = "1"; then
|
||||||
|
echo "LDAP-disabled"
|
||||||
|
fi
|
||||||
|
if test "@CURL_DISABLE_DICT@" = "1"; then
|
||||||
|
echo "DICT-disabled"
|
||||||
|
fi
|
||||||
|
if test "@HAVE_ARES@" = "1"; then
|
||||||
|
echo "AsynchDNS"
|
||||||
|
fi
|
||||||
;;
|
;;
|
||||||
|
|
||||||
--version)
|
--version)
|
||||||
@@ -73,7 +110,11 @@ while test $# -gt 0; do
|
|||||||
;;
|
;;
|
||||||
|
|
||||||
--cflags)
|
--cflags)
|
||||||
echo -I@includedir@
|
if test "X@includedir@" = "X/usr/include"; then
|
||||||
|
echo ""
|
||||||
|
else
|
||||||
|
echo "-I@includedir@"
|
||||||
|
fi
|
||||||
;;
|
;;
|
||||||
|
|
||||||
--libs)
|
--libs)
|
||||||
|
|||||||
21
curl-mode.el
21
curl-mode.el
@@ -1,21 +0,0 @@
|
|||||||
;;;; Emacs Lisp help for writing curl code. ;;;;
|
|
||||||
|
|
||||||
;;; In C files, put something like this to load this file automatically:
|
|
||||||
;;
|
|
||||||
;; /* -----------------------------------------------------------------
|
|
||||||
;; * local variables:
|
|
||||||
;; * eval: (load-file "../curl-mode.el")
|
|
||||||
;; * end:
|
|
||||||
;; */
|
|
||||||
;;
|
|
||||||
;; (note: make sure to get the path right in the argument to load-file).
|
|
||||||
|
|
||||||
|
|
||||||
;;; The curl hacker's C conventions
|
|
||||||
|
|
||||||
;;; we use intent-level 2
|
|
||||||
(setq c-basic-offset 2)
|
|
||||||
;;; never ever use tabs to indent!
|
|
||||||
(setq indent-tabs-mode nil)
|
|
||||||
;;; I like this, stolen from Subversion! ;-)
|
|
||||||
(setq angry-mob-with-torches-and-pitchforks t)
|
|
||||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user