Compare commits

...

346 Commits

Author SHA1 Message Date
Daniel Stenberg
95a4b8db68 7.10.5 commit 2003-05-19 11:45:10 +00:00
Daniel Stenberg
663c1898a3 known AIX ipv6 problems 2003-05-16 10:57:53 +00:00
Daniel Stenberg
465de793e8 Skip any preceeding dots from the domain name of cookies when we keep them
in memory, only add it when we save the cookie. This makes all tailmatching
and domain string matching internally a lot easier.

This was also the reason for a remaining bug I introduced in my overhaul.
2003-05-15 22:28:19 +00:00
Daniel Stenberg
de9b76cef0 change the order of the in_addr_t tests, so that 'unsigned long' is tested
for first, as it seems to be what many systems use
2003-05-15 21:13:36 +00:00
Daniel Stenberg
1747a8d3d9 1. George Comninos' progress meter fix
2. I also added the pre-releases and dates to the log
2003-05-15 08:13:19 +00:00
Daniel Stenberg
1094e79749 documented CURLOPT_FTP_USE_EPRT 2003-05-14 09:03:51 +00:00
Daniel Stenberg
22569681bc George Comninos provided a fix that calls the progress meter when waiting
for FTP command responses take >1 second.
2003-05-14 06:31:00 +00:00
Daniel Stenberg
e615d117a0 Setup and use CURL_INADDR_NONE all over instead of INADDR_NONE. We setup
the define accordingly in the hostip.h header to work nicely all over.
2003-05-13 12:12:17 +00:00
Daniel Stenberg
a51258b6bb before using if2ip(), check if the address is an ip address and skip it if
it is.
2003-05-13 12:11:31 +00:00
Daniel Stenberg
8894bd07b6 libtool 1.4.2 is enough 2003-05-13 09:38:09 +00:00
Daniel Stenberg
ec45a9e825 fix comment 2003-05-13 09:37:45 +00:00
Daniel Stenberg
871358a6e5 before checking for network interfaces using if2ip(), check that the given
name isn't an ip address
2003-05-12 13:06:48 +00:00
Daniel Stenberg
2e2e0fba60 no more complaining when I have 1.5 and it tests for 1.4.2 2003-05-12 13:05:11 +00:00
Daniel Stenberg
4a5139e3f4 fixes from the last week+ 2003-05-12 12:49:22 +00:00
Daniel Stenberg
8f85933d7c Dan F clarified the CURLOPT_ENCODING description after his changes to
allow "" to enable all support formats.
2003-05-12 12:47:35 +00:00
Daniel Stenberg
246f3a63f6 Dan Fandrich added --compressed docu 2003-05-12 12:46:45 +00:00
Daniel Stenberg
e99eff4eb0 setting ENCODING to "" means enable-all-you-support 2003-05-12 12:45:57 +00:00
Daniel Stenberg
c0197f19cf Dan Fandrich changed CURLOPT_ENCODING to select all supported encodings if
set to "".  This frees the application from having to know which encodings
 the library supports.
2003-05-12 12:45:14 +00:00
Daniel Stenberg
3994d67eea Dan Fandrich lowered the libtool requirement 2003-05-12 12:38:52 +00:00
Daniel Stenberg
9ead79c9d4 when we have accepted the server's connection in a PORT sequence, we set
the new socket to non-blocking
2003-05-12 12:37:35 +00:00
Daniel Stenberg
9371aed46c avoid the write loop 2003-05-12 12:37:05 +00:00
Daniel Stenberg
940707ad66 incoming proxy headers shall be sent to the debug function has HEADERs not
DATA
2003-05-12 12:29:00 +00:00
Daniel Stenberg
e6c267fb4c oops, run libtoolize as the first tool 2003-05-09 08:17:41 +00:00
Daniel Stenberg
93538fccd6 run libtoolize too 2003-05-09 08:13:02 +00:00
Daniel Stenberg
83a7fad308 run libtoolize to generate these files 2003-05-09 08:12:46 +00:00
Daniel Stenberg
3c7e33388e CURLOPT_FTP_USE_EPRT added 2003-05-09 07:42:47 +00:00
Daniel Stenberg
7b0f35edb6 --disable-eprt added 2003-05-09 07:39:50 +00:00
Daniel Stenberg
94a157d0b0 support for CURLOPT_FTP_USE_EPRT added 2003-05-09 07:39:29 +00:00
Daniel Stenberg
ca04620253 AIX wants sys/select.h 2003-05-09 07:37:27 +00:00
Daniel Stenberg
073ef0b36a clarify on the curl name issue and that there may be other libcurl-based
tools that provide GUI
2003-05-09 07:07:13 +00:00
Daniel Stenberg
c41c05d4f4 Kevin Delafield reported another case where we didn't correctly check for
EAGAIN but only EWOULDBLOCK, which caused badness on HPUX. We also check for
 and act the same on EINTR errors as well now.
2003-05-06 08:19:36 +00:00
Daniel Stenberg
f1ea54e07a fixed the required tools' version numbers 2003-05-05 14:19:54 +00:00
Daniel Stenberg
a139ce901a the writable argv check now should not exit when building a cross-compiled
curl
2003-05-04 16:07:19 +00:00
Daniel Stenberg
7431957113 put back the libtool test, now for 1.5
require autoconf 2.57
require automake 1.7
2003-05-03 16:25:49 +00:00
Daniel Stenberg
1752d80915 If there is a custom Host: header specified, we use that host name to
extract the correct set of cookies to send. This functionality is verified
by test case 62.
2003-05-02 09:13:19 +00:00
Daniel Stenberg
aa7420e109 send correct cookies when using a custom Host: 2003-05-02 09:12:26 +00:00
Daniel Stenberg
a290d4b9db fixed the format slightly 2003-05-02 09:11:53 +00:00
Daniel Stenberg
19a4314e7f corrected a comment about gzip not being supported 2003-05-01 17:49:47 +00:00
Daniel Stenberg
d166e85e0a FTP URL with type=a 2003-05-01 17:48:59 +00:00
Daniel Stenberg
f213e857ab Andy Cedilnik fixed some compiler warnings 2003-05-01 13:37:36 +00:00
Daniel Stenberg
eb6130baa7 ourerrno became Curl_ourerrno() and is now available to all libcurl 2003-05-01 13:37:05 +00:00
Daniel Stenberg
f69ea2c68a Use the proper Curl_ourerrno() function instead of plain errno, for better
portability. Also use Andy Cedilnik's compiler warning fixes.
2003-05-01 13:36:28 +00:00
Daniel Stenberg
078441d477 the test numbers are now only for human readability, the numbers no longer
enforces protocol/server
2003-04-30 20:29:31 +00:00
Daniel Stenberg
95f6b15a67 no longer assume that the test number implies servers to run 2003-04-30 20:28:49 +00:00
Daniel Stenberg
ee29dbdb8f Each test case now specifies which server(s) it needs, without relying on the
test number.
2003-04-30 20:25:39 +00:00
Daniel Stenberg
15f3f4c93f we say welcome to test 142 2003-04-30 20:08:01 +00:00
Daniel Stenberg
6932e94e0e verify that curl fails fine when an FTP URL with a too deep dir hierarchy
is used
2003-04-30 20:07:37 +00:00
Daniel Stenberg
3ef06d7efe when making up the list of path parts, save the last entry pointing to NULL
as otherwise we'll go nuts
2003-04-30 20:04:17 +00:00
Daniel Stenberg
fb012b48e9 recent action 2003-04-30 20:01:22 +00:00
Daniel Stenberg
bc77bf217f if there's a cookiehost allocated, free that too 2003-04-30 19:58:36 +00:00
Daniel Stenberg
37d1e9351e ok, make the test run ok too 2003-04-30 19:56:53 +00:00
Daniel Stenberg
4494c0dee0 various new cookie tests with a custom Host: header set 2003-04-30 19:49:51 +00:00
Daniel Stenberg
26afc604ac modified to work with modified code 2003-04-30 17:16:25 +00:00
Daniel Stenberg
9aefcada19 modified to produce nicer output when a single test fails 2003-04-30 17:15:38 +00:00
Daniel Stenberg
69fc363760 make the diffs with 'diff -u' to make them nicer and easier to read 2003-04-30 17:15:00 +00:00
Daniel Stenberg
bea02ddebe stop parsing Host: host names at colons too 2003-04-30 17:12:29 +00:00
Daniel Stenberg
3fb257c39c modified to the new cookie function proto 2003-04-30 17:05:19 +00:00
Daniel Stenberg
7c96c5a39b extract host name from custom Host: headers to use for cookies 2003-04-30 17:04:53 +00:00
Daniel Stenberg
efd836d971 Many cookie fixes:
o Save domains in jars like Mozilla does. It means all domains set in
    Set-Cookie: headers are dot-prefixed.
  o Save and use the 'tailmatch' field in the Mozilla/Netscape cookie jars (the
    second column).
  o Reject cookies using illegal domains in the Set-Cookie: line. Concerns
    both domains with too few dots or domains that are outside the currently
    operating server host's domain.
  o Set the path part by default to the one used in the request, if none was
    set in the Set-Cookie line.
2003-04-30 17:03:43 +00:00
Daniel Stenberg
836aaa1647 changes need for the new ftp path treatment and the new cookie code 2003-04-30 17:01:00 +00:00
Daniel Stenberg
bf2b3dbf3e David Balazic's patch to make the FTP operations "do right" according to
RFC1738, which means it'll use one CWD for each pathpart.
2003-04-30 16:59:42 +00:00
Daniel Stenberg
b4fa2ff995 two more platforms Rich Gray built curl on 2003-04-30 07:32:43 +00:00
Daniel Stenberg
2f9cabc30b Peter Kovacs provided a patch that makes the CURLINFO_CONNECT_TIME work fine
when using the multi interface (too).
2003-04-29 18:03:30 +00:00
Daniel Stenberg
63593f5597 mention configure --help 2003-04-29 16:55:17 +00:00
Daniel Stenberg
c0acaa5d2c CURLOPT_FTPPORT could support port number too 2003-04-28 17:29:32 +00:00
Daniel Stenberg
2e46f8d0a6 corrected the comment which wasn't correct 2003-04-28 13:48:16 +00:00
Daniel Stenberg
51da6aaa07 RSAglue.lib is no longer needed with recent OpenSSL versions 2003-04-25 15:08:46 +00:00
Daniel Stenberg
c8b79e36db Dan Fandrich added support for the gzip Content-Encoding for --compressed 2003-04-24 06:34:31 +00:00
Daniel Stenberg
208374bcc9 Bryan Kemp's reported problems with curl and PUT from stdin and a faked
content-length made me add test case 60, that does exactly this, but it
seems to run fine...
2003-04-23 12:09:58 +00:00
Daniel Stenberg
7f0a6e7203 last 10 days or so 2003-04-22 23:30:04 +00:00
Daniel Stenberg
54ebb9cfd4 libtool 1.5 stuff 2003-04-22 23:29:27 +00:00
Daniel Stenberg
49e9c1495b stop checking for libtool, we don't run that in this script 2003-04-22 23:26:00 +00:00
Daniel Stenberg
a84b0fbd52 Dan Fandrich corrected the error messages on "bad encoding". 2003-04-22 22:33:39 +00:00
Daniel Stenberg
c95814c04d Dan Fandrich's gzip bugfix 2003-04-22 22:32:02 +00:00
Daniel Stenberg
9f8123f1b8 Dan Fandrich's fix 2003-04-22 22:31:02 +00:00
Daniel Stenberg
8b23db4f4d Peter Sylvester pointed out that curl_easy_setopt() will always (wrongly)
return CURLE_OK no matter what happens.
2003-04-22 21:42:39 +00:00
Daniel Stenberg
d77cc13374 two dashes is enough 2003-04-16 12:46:20 +00:00
Daniel Stenberg
9a12db1aa2 typecast the setting of the size, as it might be an off_t which is bigger
than long and libcurl expects a long...
2003-04-15 14:18:37 +00:00
Daniel Stenberg
eb54d34bec If MALLOCDEBUG, include the lib's setup.h here so that the proper defines
are set before all system headers, as otherwise we get compiler warnings
on my Solaris at least.
2003-04-15 14:01:57 +00:00
Daniel Stenberg
4b1203d4c9 include config.h before all system headers, so that _FILE_OFFSET_BITS and
similar is set properly by us first
2003-04-15 13:32:26 +00:00
Daniel Stenberg
183a9c6244 extended the -F section 2003-04-15 09:58:27 +00:00
Daniel Stenberg
1f2294d585 treat uploaded .html files as text/html by default 2003-04-15 09:29:39 +00:00
Daniel Stenberg
0b839c4f77 return the same error for the sslv2 "certificate verify failed" code 2003-04-14 22:00:36 +00:00
Daniel Stenberg
1d4fd1fcae new wording by Kevin Roth 2003-04-14 14:54:18 +00:00
Daniel Stenberg
b1d8d72c16 ignore all stamp-h* 2003-04-14 13:09:44 +00:00
Daniel Stenberg
bafb68b844 With the recent fix of libcurl, it shall now return CURLE_SSL_CACERT when
it had problems withe CA cert and thus we offer a huge blurb of verbose
help to explain to the poor user why this happens.
2003-04-14 13:09:09 +00:00
Daniel Stenberg
21873b52e9 Restored the SSL error codes since they was broken in the 7.10.4 release,
also now attempt to detect and return the specific CACERT error code.
2003-04-14 12:53:29 +00:00
Daniel Stenberg
0aa8b82871 FTP CWD response fixed
gzip content-encoding added
chunked content-encoding fixed
2003-04-14 07:13:08 +00:00
Daniel Stenberg
f9781afafd clarified the CURLINFO_SIZE_DOWNLOAD somewhat on Juan F. Codagnone's
suggestion
2003-04-11 16:52:30 +00:00
Daniel Stenberg
fece361a55 Nic fixed so that Curl_client_write() must not be called with 0 lenth data.
I edited somewhat and removed trailing whitespaces.
2003-04-11 16:31:18 +00:00
Daniel Stenberg
7b51b2f128 Nic Hines fixed this bug when deflate or gzip contents were downloaded using
chunked encoding.
2003-04-11 16:23:43 +00:00
Daniel Stenberg
22d88fb28e ah, move the zero byte too or havoc will occur 2003-04-11 16:23:06 +00:00
Daniel Stenberg
f7c5b28e76 verify the new url parser fix 2003-04-11 16:22:27 +00:00
Daniel Stenberg
5760f2a307 support ? as separator instead of / even if not protocol was given 2003-04-11 16:08:41 +00:00
Daniel Stenberg
ee46efb5a5 these guys deserve a mentioning here as well 2003-04-11 08:57:19 +00:00
Daniel Stenberg
eb6ffebfc7 Dan the man on the list 2003-04-11 08:55:08 +00:00
Daniel Stenberg
c06c44f286 Dan Fandrich's added gzip support documented. 2003-04-11 08:51:24 +00:00
Daniel Stenberg
019c4088cf Dan Fandrich's gzip patch applied 2003-04-11 08:49:20 +00:00
Daniel Stenberg
0b0a88b78d when saving a cookie jar fails, you don't get an error code or anything,
just a warning in the verbose output stream
2003-04-11 08:19:06 +00:00
Daniel Stenberg
028e9cc56f According to RFC959, CWD is supposed to return 250 on success, but
there seem to be non-compliant FTP servers out there that return 200,
 so we accept any '2xy' response now.
2003-04-11 08:10:54 +00:00
Daniel Stenberg
e0d8615ece show a verbose warning message in case cookie-saving fails, after
Ralph Mitchell's notification.
2003-04-11 07:39:16 +00:00
Daniel Stenberg
c8ecbda40b new ftp tests 2003-04-10 11:43:47 +00:00
Daniel Stenberg
2324c10d43 another week has passed 2003-04-10 11:36:56 +00:00
Daniel Stenberg
89cfa76291 Vlad Krupin's URL parsing patch to fix the URL parsing when the URL has no
slash after the host name, but still a ? and following "parameters".
2003-04-10 09:44:39 +00:00
Daniel Stenberg
072070a22c oops, committed test code not meant to be here 2003-04-09 12:02:06 +00:00
Daniel Stenberg
3c3ad134ea the default debugfunction shows incoming headers as well 2003-04-09 11:57:06 +00:00
Daniel Stenberg
a4ffcfd4d5 timecond support added
made the Last-Modified (faked) header look correct using GMT always
2003-04-09 11:56:31 +00:00
Daniel Stenberg
136670c58a three new ftp tests 2003-04-09 11:55:24 +00:00
Daniel Stenberg
28169725fa <mdtm> added 2003-04-09 11:53:09 +00:00
Daniel Stenberg
5b13106f54 MDTM support added 2003-04-09 11:52:24 +00:00
Daniel Stenberg
1a2db0dfb1 James Bursa fixed a flaw in the content-type extracting code that could
miss the first letter
2003-04-08 14:48:38 +00:00
Daniel Stenberg
696f95bb0a share.c added 2003-04-08 10:35:35 +00:00
Daniel Stenberg
acec588fe3 --disable-eprt perhaps? 2003-04-07 06:41:24 +00:00
Daniel Stenberg
6ed0da8e98 Ryan Weaver's fix to prevent the ca bundle to get installed even when
building curl without SSL support!
2003-04-06 12:29:45 +00:00
Daniel Stenberg
7fd91d70bd adjusted the formpost testcases to the new boundary string construction 2003-04-04 12:30:35 +00:00
Daniel Stenberg
61788a0389 Changed how boundary strings are generated. This new way uses 28 dashes
and 12 following hexadecimal letters, which seems to be what IE uses.
This makes curl work smoother with more stupidly written server apps.

Worked this out together with Martijn Broenland.
2003-04-04 12:24:01 +00:00
Daniel Stenberg
0821447b5b spell fix 2003-04-03 16:11:47 +00:00
Daniel Stenberg
3cba274ba6 kill a compiler warning on cygwin 2003-04-03 14:16:15 +00:00
Daniel Stenberg
df7bbcfd21 Added log output for when the writing of the input HTTP request is successful
or unsuccessful. Used to track down the recent cygwin test suite problems.
2003-04-03 13:43:15 +00:00
Daniel Stenberg
021d406f0c Modified how we log data to server.input, as we can't keep the file open
very much as it makes it troublesome on certain operating systems.
2003-04-03 13:42:06 +00:00
Daniel Stenberg
294569c502 new 2003-04-03 13:39:36 +00:00
Daniel Stenberg
bfd00ac2ed 7.10.4 commit 2003-04-02 07:48:56 +00:00
Daniel Stenberg
735a4714f4 Version 7.10.4 2003-04-02 07:42:39 +00:00
Daniel Stenberg
827fd47198 documented the new killserver tag 2003-04-01 08:43:09 +00:00
Daniel Stenberg
e26b917661 kill the ftp server afterwards, it is just so messed up 2003-04-01 08:42:37 +00:00
Daniel Stenberg
92872a2a3c log when we've returned verification that we are the test server 2003-04-01 08:42:14 +00:00
Daniel Stenberg
16ddb09cb4 support the new <killserver> tag 2003-04-01 08:41:49 +00:00
Daniel Stenberg
d37031f14e ignore lib505 too 2003-04-01 07:13:28 +00:00
Daniel Stenberg
b4e84ca7d2 lib505.c is a new test case for ftp uploading with rename 2003-04-01 07:13:04 +00:00
Daniel Stenberg
47970b9e6f Added support for the RNFR/RNTO commands 2003-04-01 07:10:08 +00:00
Daniel Stenberg
f65f120d50 updated 2003-03-31 22:16:12 +00:00
Daniel Stenberg
df00ec3c82 move the ssl config clone call to before the connectionexists call and then
also subsequently free the ssl struct if the connection struct is to be
deleted
2003-03-31 21:43:05 +00:00
Sterling Hughes
ad6fca28f9 testing, ignore this commit 2003-03-31 15:59:17 +00:00
Daniel Stenberg
fd33923496 7.10.4-pre6 commit 2003-03-31 14:02:43 +00:00
Daniel Stenberg
a55649dc82 added dist-hook that clears the tests/log dir properly as otherwise
'make distcheck' doesn't pass
2003-03-31 11:37:47 +00:00
Daniel Stenberg
9558f229db Fixup after talks with Richard Bramante. We should now make better
comparisons before re-using SSL connections and re-using SSL connection IDs.
2003-03-31 05:13:26 +00:00
Daniel Stenberg
7917bfb1c9 --location-trusted added, which does a normal location plus the new
CURLOPT_UNRESTRICTED_AUTH option set TRUE.

Patch by Guillaume Cottenceau.
2003-03-31 04:42:20 +00:00
Daniel Stenberg
25f611ca42 Guillaume Cottenceau's patch that adds CURLOPT_UNRESTRICTED_AUTH that
disables the host name check in the FOLLOWLOCATION code. With that option
set, libcurl will send user+password to all hosts.
2003-03-31 04:41:05 +00:00
Daniel Stenberg
e6eb49e7e0 10 days of fixes 2003-03-31 04:05:03 +00:00
Daniel Stenberg
9a075f53dc clarify USERPWD somewhat more 2003-03-31 04:04:40 +00:00
Daniel Stenberg
4b3f800c03 Frankie Fong filed bug report #708708 which identified a problem with
ConnectionExists() when first doing a proxy connecto to a HTTPS site and then
switching over to a HTTP connection to the same host.

This fix corrects the problem.
2003-03-31 03:42:01 +00:00
Daniel Stenberg
82bc76b243 Dan Shearer's fix from bug report #618892, which makes 'curl -O' output
an error message about a missing URL.
2003-03-29 11:03:30 +00:00
Daniel Stenberg
18b9b04907 send as much as possible of the POST at once 2003-03-28 12:56:07 +00:00
Daniel Stenberg
87f1f08b36 added section titles and a CONTACT paragraph asking people to use the mailing
lists
2003-03-27 15:09:33 +00:00
Daniel Stenberg
7d7ebbe9f7 fixed the pkg-config stuff for rh9 2003-03-26 19:05:24 +00:00
Daniel Stenberg
5111ce782f add URLs to patch and diff 2003-03-26 11:48:03 +00:00
Daniel Stenberg
20b0e563ce mention the URL to the mailing lists 2003-03-26 11:44:04 +00:00
Daniel Stenberg
8b6cf239a3 attempt to extract openssl information using pkg-config 2003-03-25 22:40:43 +00:00
Daniel Stenberg
bcc285cffd Renamed configure.in to configure.ac, as this is the supposedly new preferred
name for it.
2003-03-25 15:56:33 +00:00
Daniel Stenberg
d5ba030942 use init and copyright to get a better header in the generated script 2003-03-25 15:54:06 +00:00
Daniel Stenberg
803f43592a white space and indent fix 2003-03-25 14:23:12 +00:00
Daniel Stenberg
904b9ccaa3 ignore getdate.c 2003-03-24 23:11:16 +00:00
Daniel Stenberg
89721ff04a Richard Bramante's provided a fix for a handle re-use problem seen when you
change options on an SSL-enabled connection between requests.
2003-03-24 23:10:38 +00:00
Daniel Stenberg
6164823921 Removed the "TC TrustCenter, Germany, Class 0 CA." certificate:
"It is a DEMO certificate and was never intended to be in any list of trusted
CA certificates."

(quote by Gtz Babin-Ebell, trustcenter.de)
2003-03-24 11:06:57 +00:00
Daniel Stenberg
f8b3c47f99 all those changes 2003-03-24 10:47:06 +00:00
Daniel Stenberg
56dd2da962 Hopefully this change addresses these two bug reports: 707003 and 706624.
We need to make sure that when we init a 'connectdata' struct and then
afterwards check for and re-use another one, we must be careful so that the
newly set values are transmitted and used in the surviving connectdata struct.
2003-03-21 08:09:48 +00:00
Daniel Stenberg
68bb74d172 lib/getdate.c.cvs may need a rename if you don't have yacc or bison 2003-03-20 15:12:43 +00:00
Daniel Stenberg
bf5e12c8e0 if the cvs update fails, don't continue further 2003-03-20 14:38:42 +00:00
Daniel Stenberg
de11f5e53a make the ENGINE depend on the USE_SSLEAY define too 2003-03-19 21:28:39 +00:00
Daniel Stenberg
b125e8e23a set binary mode for some file handling and it might work better on some
cygwin installations (using DOS-style files somehow?)
2003-03-19 09:26:29 +00:00
Daniel Stenberg
b28b616eb2 typecast the conversion from const char * to char * 2003-03-19 09:16:59 +00:00
Daniel Stenberg
4534ca238d Rename getdate.c to getdate.c.cvs, since the "normal" build procedure do
imply that yacc/bison exists and can generate this file. Those without one
of those tools can then checkout and rename the getdate.c.cvs file.
2003-03-19 09:09:40 +00:00
Daniel Stenberg
cee0e94294 clarify that 22 can be returned on --fail for all HTTP errors being 400
or above
2003-03-18 10:01:51 +00:00
Daniel Stenberg
8319ea7078 more defensive checking as platforms differ... 2003-03-17 17:20:26 +00:00
Daniel Stenberg
5334a58f9b Andy Cedilnik's corrections 2003-03-17 12:38:08 +00:00
Daniel Stenberg
2616bdc4cd it just never ends 2003-03-16 18:41:00 +00:00
Daniel Stenberg
c149b3f797 regenerated from getdate.y 2003-03-16 16:20:56 +00:00
Daniel Stenberg
d349eb3d43 Juan F. Codagnone pointed out a missing thing from the march 2 fix 2003-03-16 16:15:24 +00:00
Daniel Stenberg
9b43ade1c0 typecase getpid() to int to prevent compiler warning 2003-03-16 10:46:52 +00:00
Daniel Stenberg
ad05d0a8d9 figure out select()'s argument types 2003-03-15 21:04:01 +00:00
Daniel Stenberg
e6bfbe9683 Gisle Vanem's fix to get this working nicely on windows 2003-03-15 21:02:20 +00:00
Daniel Stenberg
c871efca4b Gisle Vanem fixed a name collision with structure '"CONTEXT" in <winnt.h> 2003-03-15 21:00:47 +00:00
Daniel Stenberg
12c72b419c missing newline added 2003-03-15 17:26:59 +00:00
Daniel Stenberg
a15b7691ca no server needed 2003-03-15 17:12:46 +00:00
Daniel Stenberg
01618d323b allow 'none' as server 2003-03-15 17:11:13 +00:00
Daniel Stenberg
bb6d0e37e3 Sort out the ENGINE problems people seem to be having. Now we put all ENGINE
related stuff within HAVE_OPENSSL_ENGINE_H and we don't make any private
typedef or similar if the header is missing...
2003-03-15 16:51:43 +00:00
Daniel Stenberg
24a6100897 * use the pid returned back from test-servers and kill them before starting
them the first time
* verify that the server we start really comes up fine and works as
  expected before continue
* count test cases where the server can't be run (for whatever reason)
* prefix lots of messages with RUN: to make it easier to realize which script
  is saying what when running tests verbose
* remove the generic sleep(1) from each test, makes the suite fly! ;-)

I hope these changes will make the tests run somewhat more reliably on more
platforms.
2003-03-15 16:43:58 +00:00
Daniel Stenberg
0251563c98 report pid back in the WE ROOLZ message 2003-03-15 16:39:15 +00:00
Daniel Stenberg
72673a351b removed the "banner" when the server is starting 2003-03-15 16:05:47 +00:00
Daniel Stenberg
96b7131844 detect lack of perl before running tests 2003-03-15 15:08:55 +00:00
Daniel Stenberg
dcc2f16416 Rick Jones' minor thing to build better on HPUX 11 2003-03-15 14:47:09 +00:00
Daniel Stenberg
c2b8a04000 Nico Baggus little adjustment to build with OpenSSL 0.9.7 (the ENGINE thing) 2003-03-14 17:21:06 +00:00
Daniel Stenberg
d65587b06c improved "deeper" check 2003-03-14 12:44:56 +00:00
Daniel Stenberg
1ab0134522 No longer halts operation if select or socket are missing, since in most
cases this is wrong... and if they're truly missing, we won't succeed to
link later on anyway.
2003-03-13 23:02:33 +00:00
Daniel Stenberg
afffce80f0 Philippe Raoult needed this to build on FreeBSD 2003-03-13 21:41:02 +00:00
Daniel Stenberg
70b80b0160 Extra function-find magic for platforms that don't like the way the
default AC_CHECK_FUNCS() work. HPUX 11 is one of them.
2003-03-13 17:06:55 +00:00
Daniel Stenberg
64067a04b5 output what cvs returned, see if we can make the script bail out when
cvs update fails
2003-03-13 15:56:31 +00:00
Daniel Stenberg
38cf0268c0 use include path from BUILD dir since we want the config.h 2003-03-13 15:54:46 +00:00
Daniel Stenberg
2d2034703f Things are moving along... 2003-03-12 14:29:47 +00:00
Daniel Stenberg
571ceeff90 When we append stuff to the URL, we must make sure the text is properly
URL encoded before. Test case 58 added to verify this.
2003-03-12 14:20:16 +00:00
Daniel Stenberg
34c4ba4321 -m on curl on windows with telnet doesn't work 2003-03-12 14:14:52 +00:00
Daniel Stenberg
babb372eb9 This verifies that my fix for bug report #700275 works. 2003-03-12 14:04:23 +00:00
Daniel Stenberg
5b9b82c1cd test58 added 2003-03-12 14:03:53 +00:00
Daniel Stenberg
075c534270 improved the header checks
--enable-libgcc
check for a sed before using it
2003-03-12 13:42:07 +00:00
Daniel Stenberg
f317f8b149 Add include files to prevent warnings on some (HPUX) systems. 2003-03-12 08:54:45 +00:00
Daniel Stenberg
f8d552dde5 include "config.h" from the lib's private dir 2003-03-12 08:54:11 +00:00
Daniel Stenberg
606f72bb13 Setup include path to the lib dir to enable inclusion of "config.h" 2003-03-12 08:53:44 +00:00
Daniel Stenberg
327e6a2b4f Made set_local_option() properly static as reported by Rick Jones 2003-03-12 08:44:00 +00:00
Daniel Stenberg
be8f6c7f5c Prefix defines and symbols with CURL_ to reduce the risk of colliding with
various system's other defines.
2003-03-12 08:40:45 +00:00
Daniel Stenberg
073448e0ea support a few more common typedefs 2003-03-12 08:11:24 +00:00
Daniel Stenberg
f136f435b5 Massige use of AC_HELP_STRING() all over makes the --help output so much
nicer!
2003-03-12 08:07:30 +00:00
Daniel Stenberg
ebea6b487b another week of changes, especially libtool gave us an adventure to remember 2003-03-11 19:22:10 +00:00
Daniel Stenberg
e5b7dc56e6 syntax error 2003-03-11 19:12:07 +00:00
Daniel Stenberg
c2d8025a0a Christophe Demory fixed the check to work better for non-blocking on HP-UX
systems. Bug report #701749.
2003-03-11 19:07:41 +00:00
Daniel Stenberg
853e240e1d Use ssize_t instead of 'int' to make the 64 bit sparc compiler happier.
Fix by Richard Gorton.
2003-03-11 18:58:21 +00:00
Daniel Stenberg
8755a6d1ac Richard Gorton improved the random_the_seed() function for systems where
we don't find/know of a good random source. This way, we get a better
randomness which in turn should make SSL connections more secure.
2003-03-11 18:55:34 +00:00
Daniel Stenberg
9f723061cb don't check for netinet/if_ether.h, we don't include it and it causes
configure warnings on many systems
2003-03-11 17:16:02 +00:00
Daniel Stenberg
652683fc04 Martin C. Martin's fix to produce an error message in case of failure
in the Curl_is_connected() function.
2003-03-11 16:28:23 +00:00
Daniel Stenberg
83a463891d added things to fix at the next major release/change 2003-03-10 20:46:54 +00:00
Daniel Stenberg
957b618fdc clarify 2003-03-10 20:43:59 +00:00
Daniel Stenberg
ebe5191b63 no the data is not freed, this is left for the app to do when needed 2003-03-10 17:01:11 +00:00
Daniel Stenberg
c426234df7 AAAARG
libtool 1.4.3 is scary as hell and caused just about every build on all sorts
of platforms to stop working, thanks to the fact that it ruquires a SED
variables somehow set by the configure script. It works fine on my linux
running autoconf 2.57 and automake 1.7 but others seem not to do as fine.

Reverting back to the ltmain.sh we had previously, which I believe is 1.4.2
including handmade patches for FreeBSD.

ALERT ALERT ALERT before we try 1.4.3 or similar versions again, check the
${SED} stuff and similar carefully.
2003-03-10 14:52:33 +00:00
Daniel Stenberg
8c3a10392e Include sys/types.h as well. Ray DeGennaro reports successful compiling on
AIX when this fix is applied and I cannot see how this will break any
systems.
2003-03-10 12:25:32 +00:00
Daniel Stenberg
d0e44946e9 figure out the path to a 'sed' as otherwise libtool gets crazy 2003-03-07 13:36:32 +00:00
Daniel Stenberg
46a593d968 libtoolize 1.4.3 brought these 2003-03-07 09:03:09 +00:00
Daniel Stenberg
eb0cc34951 Removed define, risc os build, POST-GET bug fixed, AIX 4.3 problems solved
and two makefiles fixed.
2003-03-04 06:41:50 +00:00
Daniel Stenberg
1c7dfda4bc output the md5sum as the last step 2003-03-03 23:26:39 +00:00
Daniel Stenberg
3c0e4a2fa1 Added share.obj 2003-03-03 22:39:34 +00:00
Daniel Stenberg
c753072ae1 moved the disable-thread warning to the switch code so that the AIX 4.3
automatic disable won't cause a warning
2003-03-03 22:31:58 +00:00
Daniel Stenberg
243942a7aa Detect AIX 4.3 or later, and if found disable the check for the thread-safe
*_r() functions as they're not needed (and if fact mess things up for us).
Brought to our attention by the friendly Troels Walsted Hansen in bug report
#696217.
2003-03-03 22:30:25 +00:00
Daniel Stenberg
8d5ac8b43c AIX 4.3 or later should use gethostbyname() and not the *_r() version. 2003-03-03 22:23:48 +00:00
Daniel Stenberg
17962b3d2e Added typecast to please the MSVC compiler. 2003-03-03 06:45:27 +00:00
Daniel Stenberg
f70acd5979 another typecast added to please the borland compiler 2003-03-03 06:42:52 +00:00
Daniel Stenberg
ffe5c46224 Add (void) on our uses of the swrite() macro when we don't read the return
code as this makes compiler warnings. We *should* fix the code to deal with
the return codes instead...
2003-03-03 06:40:36 +00:00
Daniel Stenberg
3242ea5f66 Init postdata properly before issuing a request, so that there isn't any
lingering POST-stuff that confuses GET requests. Juan F. Codagnone reported
this problem in bug report #653859.
2003-03-02 17:43:42 +00:00
Daniel Stenberg
39a282bffc moved a variable declaration to remove a compiler warnings with the MSVC
compiler, mentioned by Andi Jahja
2003-03-02 17:20:59 +00:00
Daniel Stenberg
29583004ce include the engine stuff 2003-02-28 15:50:05 +00:00
Daniel Stenberg
0a1a185874 Andres Garcia Garcia updated to build with the most recent OpenSSL and
the recent libcurl changes.
2003-02-28 15:49:32 +00:00
Daniel Stenberg
8f809e2a93 James Bursa made it compile on RISC OS as well. 2003-02-28 13:11:10 +00:00
Daniel Stenberg
f216059b49 James Bursa wrote a section about cross-compiling for RISC OS 2003-02-28 13:10:54 +00:00
Daniel Stenberg
9121b1f41d the strequal and strnequal should now be called with the proper curl_ prefix 2003-02-28 12:20:08 +00:00
Daniel Stenberg
60e015d0c1 Removed the defines for strequal() and strnequal(). 2003-02-28 12:17:56 +00:00
Daniel Stenberg
7e049fca61 recent stuff 2003-02-28 08:40:57 +00:00
Daniel Stenberg
0f0e4de6a4 mention what happens if size is set to -1 2003-02-28 07:55:01 +00:00
Daniel Stenberg
bc1102922b spell out that POSTFIELDS should be url-encoded in most cases 2003-02-28 07:53:31 +00:00
Daniel Stenberg
a3d3642a30 spell better 2003-02-27 23:10:38 +00:00
Daniel Stenberg
248eb47329 Updated to better reflect reality. Also displays how the CURLMsg struct
looks like.
2003-02-27 14:25:54 +00:00
Daniel Stenberg
52ebf50607 It appears that there are FTP-servers that return size 0 for files
when SIZE is used on the file while being in BINARY mode. To work
around that (stupid) behavior, we attempt to parse the RETR response
even if the SIZE returned size zero.

Debugging help from Salvatore Sorrentino on February 26, 2003.
2003-02-27 12:50:54 +00:00
Daniel Stenberg
d34a4b126e test138 is for RETR without size and without a working SIZE 2003-02-26 17:09:47 +00:00
Daniel Stenberg
de96719a45 support <size>-1</size> to completely disable the SIZE command 2003-02-26 17:05:36 +00:00
Daniel Stenberg
9876ed09fe added support for RETRNOSIZE in the control file to tell RETR to not
include size in the 150-reply
2003-02-26 16:57:00 +00:00
Daniel Stenberg
17cbbe3dc5 added a test case for RETR that doesn't get the size in the 150-reply 2003-02-26 16:56:00 +00:00
Daniel Stenberg
b995af17eb added index.html 2003-02-26 13:46:38 +00:00
Daniel Stenberg
6589579850 random updates 2003-02-26 13:01:29 +00:00
Daniel Stenberg
5ddc260fc2 No longer loop to read multiple times before returning back from the transfer
function, as this could easily end up looping for a very long time (more or
less until the whole transfer was done) and no library-using app would want
that.

Found thanks to a report by Kyle Sallee.
2003-02-26 12:42:25 +00:00
Daniel Stenberg
db5c9cd4c0 updated, now features less mentions about older versions 2003-02-25 08:52:32 +00:00
Daniel Stenberg
9b6d010aef better sslcerts link 2003-02-25 08:36:29 +00:00
Daniel Stenberg
065b87e949 7.10.4-pre2 commit 2003-02-24 18:14:48 +00:00
Daniel Stenberg
a6206a3aef Fixes to bring back the the "Expect: 100-continue" functionality. If the
header is used, we must wait for a 100-code (or timeout), before we send the
data. The timeout is merely 1000 ms at this point. We may have reason to set
a longer timeout in the future.
2003-02-24 16:53:53 +00:00
Daniel Stenberg
30639ed72b Kjetil Jacobsen found out that setting CURLOPT_MAXCONNECTS to a value higher
than 5 could cause a segfault.
2003-02-24 14:50:20 +00:00
Daniel Stenberg
9d02a39e13 fixed language for limit-rate 2003-02-24 13:28:32 +00:00
Daniel Stenberg
fc0af0d4d1 daily was weekly, added a little thing about feb 2003 2003-02-24 08:18:17 +00:00
Daniel Stenberg
a683416081 added an EXAMPLE section 2003-02-21 15:19:50 +00:00
Daniel Stenberg
9faf57ee8d how to disable FTP PORT 2003-02-17 23:23:11 +00:00
Daniel Stenberg
44b9ccb7e2 This script clearly misses to remove the build dir at times when it exits,
so we now remove everything matching "build-*" when the script starts.
2003-02-17 09:15:26 +00:00
Daniel Stenberg
de003d9cf8 mention --trace and --trace-ascii in the -v/--versbose section to remind
people how to get even more details shown
2003-02-17 09:02:51 +00:00
Daniel Stenberg
8a2a523c70 mention more cacert magic 2003-02-14 22:28:12 +00:00
Daniel Stenberg
c3dfe50aaf Fix Curl_is_connected() even more to deal with waitconnect() return codes
even better (also based on input from Martin).
2003-02-14 09:11:51 +00:00
Daniel Stenberg
9659d862c7 Matthew Clarke built curl on AIX 3.2.5 2003-02-14 09:06:07 +00:00
Daniel Stenberg
69ab4cd391 include <sys/socket.h> to compile the fd_set stuff properly on all systems 2003-02-14 09:03:03 +00:00
Daniel Stenberg
498f3985b3 geterrno() renamed to ourerrno() to prevent the name clash that occurred in
AIX 3.2.5 and possibly other OSF-like system headers.
2003-02-14 09:01:01 +00:00
Daniel Stenberg
977175d4fd Martin C. Martin's fix for multi-interface connects to non-listening ports. 2003-02-14 08:02:55 +00:00
Daniel Stenberg
3ddc7b9390 Christopher R. Palmer fixed Curl_base64_encode() to deal with zeroes in the
data to encode.
2003-02-13 18:30:10 +00:00
Daniel Stenberg
10e9bf623f language 2003-02-08 14:36:18 +00:00
Daniel Stenberg
48a5c64e94 include stdarg.h since we use va_* stuff 2003-02-06 19:28:17 +00:00
Daniel Stenberg
140606ccd5 I made curl run fine on a XScale/PXA250 2003-02-05 08:09:33 +00:00
Daniel Stenberg
f56d006f93 Re-arranged the SSL connection code (again). The recent fix was not a very
good one. This should work fine again.
2003-02-05 07:43:05 +00:00
Jean-Philippe Barette-LaPierre
beb13a1d3e added the sharing of DNS cache 2003-02-04 23:48:46 +00:00
Daniel Stenberg
fa47138327 VMS has setjmp.h 2003-02-04 22:28:36 +00:00
Daniel Stenberg
9421d4510a Nico Baggus updated build script for VMS 2003-02-04 22:28:19 +00:00
Daniel Stenberg
ff8abfca85 assume zlib 1.1.4 - pointed out by Kevin Roth 2003-02-04 18:24:55 +00:00
Daniel Stenberg
5c858965b8 HAVE_LIBZ is the actual name of the define we use 2003-02-04 18:23:41 +00:00
Daniel Stenberg
e3f83cb17a make it more obvious what this is by not even trying to show a manual 2003-02-04 18:22:31 +00:00
Daniel Stenberg
de6008e01a James Bursa corrected a bad comment 2003-02-04 18:12:41 +00:00
Daniel Stenberg
6417e696df fixes during the last couple of days 2003-02-04 12:33:13 +00:00
Daniel Stenberg
5d28f3781b Improved error reporting in case of bad SSL_connect()s, and we also no
longer use the SSL functions that store the error message in a static buffer
since that is not very multi-thread friendly.
2003-02-04 12:29:57 +00:00
Daniel Stenberg
10026bb62e scan through the PATH as well, to find stunnel 2003-02-03 22:15:33 +00:00
Daniel Stenberg
21c16f923c Julian Noble pointed out that capath is indeed working fine on Windows
these days since the c_rehash tool is written (fixed) to do the proper
action even on file systems that don't support symlinks.
2003-02-03 21:36:52 +00:00
Daniel Stenberg
32cef52f0d Kevin Roth corrected the zlib stuff to work better. 2003-01-31 07:07:28 +00:00
Daniel Stenberg
e7dd7c54ff don't check for the CA cert bundle if --insecure is used 2003-01-30 14:48:07 +00:00
Daniel Stenberg
b0b50bd12a typecast the argument to isspace() to an int to prevent warnings on some
compilers
2003-01-30 06:06:24 +00:00
Daniel Stenberg
f2c6057490 curl now uses stricter VERIFYHOST by default and only uses a lesser check
if --insecure is used. Reported by Hamish Mackenzie.
2003-01-30 05:15:57 +00:00
Daniel Stenberg
169b2eeb94 Fixes bug #669059. We now extract the Content-Type better and more accurate. 2003-01-30 05:04:02 +00:00
Daniel Stenberg
f81d027f60 test case 57 - verifies that the Content-Type extraction does not stop on
the first space anymore but cuts off the trailing spaces only.

Bug report #669059.
2003-01-30 05:03:19 +00:00
Daniel Stenberg
872eeb7339 changes from the last week or so 2003-01-29 13:56:04 +00:00
Daniel Stenberg
7f67a28c2a HAVE_WRITABLE_ARGV is set if argv[] is writable on the system, and then
we attempt to hide some of the more sensitive command line arguments
2003-01-29 13:16:03 +00:00
Daniel Stenberg
30a46e1135 John McGowan found a problem where the DEBUGFUNCTION was called with bad
data on uploads.
2003-01-29 12:52:45 +00:00
Daniel Stenberg
3a01478ce8 add the new emacs file and removed the former one 2003-01-29 12:15:16 +00:00
Daniel Stenberg
53d71fab60 example showing how a .emacs using curl-style.el could look like, thanks
to Mats Lidell for awesome elisp hacking!
2003-01-29 12:14:37 +00:00
Daniel Stenberg
be891f112c this is the former emacs file we no longer use, go with curl-style.el and
be happy!
2003-01-29 11:55:16 +00:00
Daniel Stenberg
89934239d7 reset conn->size to -1 on the ftp-do function to make it not go on to
ftp_done() with the previous transfer's value, as Dave Halbakken found out.
He also verified this fixed corrected the problem.
2003-01-29 10:54:39 +00:00
Daniel Stenberg
8986037fdd previous changes 2003-01-29 10:17:10 +00:00
Daniel Stenberg
a7c72b7abf removed the local variables for emacs and vim, use the new sample.emacs
way for emacs, and vim users should provide a similar non-polluting style
2003-01-29 10:14:20 +00:00
Daniel Stenberg
409ac80710 removed weirdo {{{ and }}} comments
removed emacs local-variables stuff
2003-01-29 10:12:06 +00:00
Daniel Stenberg
fc7bebdf55 the README.curl is named MANUAL these days 2003-01-28 16:33:05 +00:00
Daniel Stenberg
ca52549557 revised and better 2003-01-28 08:03:13 +00:00
Daniel Stenberg
8948a65654 removed -Wcast-align from --enable-debug with gcc, it just gives too many
warnings that I can't be concerned about at this point.
2003-01-27 14:26:06 +00:00
Daniel Stenberg
b4e33cfcc7 Removed the long-living compiler warnings on the des_pcbc_encrypt() function
calls!
2003-01-27 14:19:22 +00:00
Daniel Stenberg
86742e8334 tests that were not run due to restraints (the netrc-tests) were counted
as skipped twice, and thus the total number of tests appeared wrong
2003-01-27 13:51:35 +00:00
Daniel Stenberg
173b35eaf8 made it work
made it cause less compiler warnings
made it require 7.9.7 to build
2003-01-27 10:25:20 +00:00
Daniel Stenberg
2b054e5309 Bertrand Demiddelaer found and fixed this memory leak. 2003-01-24 11:13:59 +00:00
Daniel Stenberg
a302ff1605 string.h keeps the proto for memset() on some platforms, used for FD_ZERO 2003-01-23 19:41:30 +00:00
Daniel Stenberg
f7bb4e6138 added a default to the switch() in order to prevent a compiler warning 2003-01-23 12:00:15 +00:00
Daniel Stenberg
5c5489916b fix the configure option query 2003-01-23 07:37:21 +00:00
Daniel Stenberg
5627cf7167 mention what kind of error you may get if this is not followed 2003-01-23 06:15:26 +00:00
Daniel Stenberg
c05dae4a68 spell 2003-01-23 06:09:35 +00:00
Daniel Stenberg
57e61e3743 This is the new Emacs style for curl hacking, based on work written by
Mats Lidell in project Rockbox.
2003-01-23 06:00:02 +00:00
Daniel Stenberg
a6c395c156 Duncan Wilcox reported a crash with --interface on FreeBSD when ipv6-enabled
and this has been verified to correct the problem.
2003-01-23 05:38:20 +00:00
Daniel Stenberg
543e0b1e0f oops, broken comment fixed 2003-01-22 18:50:51 +00:00
Daniel Stenberg
64b0ff875f extern C this to work in C++ conditions 2003-01-22 18:30:58 +00:00
Daniel Stenberg
a034208a00 reversed the actions on the cmp check for detecting if we're re-running
a test on the same CVS setup as previous, as they seemed to be wrong.

We're not actually using the result for anything at this point though.
2003-01-22 12:29:19 +00:00
Daniel Stenberg
5f1251586b use LANG set to C to prevent localized dates etc 2003-01-22 09:46:33 +00:00
Daniel Stenberg
6f6cffdc32 pass the options to configure properly 2003-01-22 07:57:52 +00:00
Daniel Stenberg
21a98ef264 check for empty confopts before asking for it 2003-01-22 07:41:35 +00:00
Daniel Stenberg
aa90436435 put the configure options in the setup file was well
make -i
show lib/config.h
and some initial checks to prevent this running multiple times without the
CVS having changed
2003-01-22 06:59:52 +00:00
Daniel Stenberg
61225052f9 updated copyright years 2003-01-21 17:25:58 +00:00
Daniel Stenberg
dee3163d95 when a chunked error is noticed, store the error number in the error string
to enable better error-tracking
2003-01-21 16:03:38 +00:00
Daniel Stenberg
8b0668b99e skip the chmod 2003-01-21 15:09:20 +00:00
Daniel Stenberg
8471a82c85 run 'make test-full' instead of 'make test' to get more details in case of
errors
2003-01-21 10:36:35 +00:00
Daniel Stenberg
ed4dff63b9 make test-full in the root dir should run verbose tests but not stop on
single failures
2003-01-21 10:35:34 +00:00
Daniel Stenberg
838e776542 use 'make test-full' instead of only 'make test' as it gives a lot of more
info in case of failures
2003-01-21 10:33:29 +00:00
Daniel Stenberg
39c12790bc Added a 'test-full' target to run the tests in verbose mode. 2003-01-21 10:32:40 +00:00
Daniel Stenberg
126e6d6645 pass srcdir to the ftps-server as well 2003-01-21 10:29:06 +00:00
Daniel Stenberg
5796a1b282 runtests.pl now passes the sourcedir path to the httpsserver.pl script 2003-01-21 10:14:25 +00:00
Daniel Stenberg
90982529fc automake 1.5 should be enough 2003-01-21 09:36:15 +00:00
Daniel Stenberg
aba51d6b60 use process id in build directory name to do better 2003-01-20 20:20:51 +00:00
Daniel Stenberg
49bc4567bb first attempt at script for distributed testing on various unix hosts 2003-01-20 20:07:49 +00:00
Daniel Stenberg
2ac52705c6 output summary with easy identifyable string prefixes 2003-01-20 15:43:50 +00:00
Daniel Stenberg
d0eb56dd97 made this script detect proper versions of the tools we need to build a full
curl on a unix host from CVS
2003-01-20 15:24:54 +00:00
Daniel Stenberg
b9c60df04b added description in all AC_DEFINE() calls 2003-01-20 15:16:56 +00:00
Daniel Stenberg
8c236e4dfa not used anymore 2003-01-20 15:16:17 +00:00
Daniel Stenberg
154a59f21f Five more names we owe a big THANKS for their donations to the project. 2003-01-20 14:49:57 +00:00
Daniel Stenberg
9689e1c548 today's patches and Markus' correction 2003-01-20 14:40:06 +00:00
Daniel Stenberg
5a83976c99 Markus F.X.J. Oberhumer's patch that reduces memory usage quite a bit by
only allocating the scratch memory buffer once it is needed and not always
in the handle.
2003-01-20 12:52:34 +00:00
Daniel Stenberg
b5276a9a69 given passwords in netrc must be respected accordingly 2003-01-20 12:00:46 +00:00
Daniel Stenberg
30377baa5e steps I *MUST* perform when I release a package 2003-01-20 11:29:40 +00:00
Daniel Stenberg
aa8b7dd336 reverted bad header replacement 2003-01-16 21:10:10 +00:00
Daniel Stenberg
f26a338a54 copyright year update in the source header 2003-01-16 21:08:12 +00:00
Daniel Stenberg
c4383f1d99 fixes Marcus brought 2003-01-16 21:07:50 +00:00
Daniel Stenberg
4527995e66 Allow CURLINFO_PRIVATE to be NULL, patch by Markus Oberhumer 2003-01-16 10:59:53 +00:00
Daniel Stenberg
b0fbb98f41 Markus Oberhumer fixed the -cflags option 2003-01-16 10:58:49 +00:00
Daniel Stenberg
63667dfd96 no TABs in source code 2003-01-15 11:44:33 +00:00
Daniel Stenberg
77c388c928 removed a TAB 2003-01-15 11:43:03 +00:00
Daniel Stenberg
a69b814ded Kevin fixed the bad list address 2003-01-15 08:04:09 +00:00
Daniel Stenberg
c51ada766d previous legal file, no longer accurate nor used 2003-01-14 12:55:08 +00:00
Daniel Stenberg
ef2709f97c COPYING is the name of the file 2003-01-14 12:54:11 +00:00
285 changed files with 5122 additions and 11915 deletions

473
CHANGES
View File

@@ -6,6 +6,477 @@
Changelog Changelog
Version 7.10.5 (19 May 2003)
Daniel (15 May)
- Changed the order for the in_addr_t testing, as 'unsigned long' seems to be
a very common type inet_addr() returns.
Daniel (14 May)
- George Comninos provided a fix that calls the progress meter when waiting
for FTP command responses take >1 second. It'll make applications more
"responsive" even when dealing with very slow ftp servers.
Daniel (12 May)
- George Comninos pointed out that libcurl uploads had two quirks:
o when using FTP PORT command, it used blocking sockets!
o it could loop a long time without doing progress meter updates
Both items are fixed now.
Daniel (9 May)
- Dan Fandrich changed CURLOPT_ENCODING to select all supported encodings if
set to "". This frees the application from having to know which encodings
the library supports.
- Dan Fandrich pointed out we had three unnecessary files in CVS that is
generated with libtoolize, so they're now removed and libtoolize is invoked
accordingly in the buildconf script.
- Avery Fay found out that the CURLOPT_INTERFACE way of first checking if the
given name is a network interface gave a real performance penalty on Linux,
so now we more appropriately first check if it is an IP number and if so
we don't check for a network interface with that name.
- CURLOPT_FTP_USE_EPRT added. Set this to FALSE to disable libcurl's attempts
to use EPRT and LPRT before the traditional PORT command. The command line
tool sets this option with '--disable-eprt'.
Version 7.10.5-pre2 (6 May 2003)
Daniel (6 May)
- Kevin Delafield reported another case where we didn't correctly check for
EAGAIN but only EWOULDBLOCK, which caused badness on HPUX.
Daniel (4 May)
- Ben Greear noticed that the check for 'writable argv' exited the configure
script when run for cross-compiling, which wasn't nice. Now it'll default to
no and output a warning about the fact that it was not checked for.
Daniel (2 May)
- Added test case 62 and fixed some more on the cookie sending with a custom
Host: header set.
Daniel (1 May)
- Andy Cedilnik fixed a few compiler warnings.
- Made the "SSL read error: 5" error message more verbose, by adding code that
queries the OpenSSL library to fill in the error buffer.
Daniel (30 Apr)
- Added sys/select.h include in the curl/multi.h file, after having been
reminded about this by Rich Gray.
- I made each test set its own server requirements, thus abandoning the
previous system where the test number implied what server(s) to use for a
specific test.
- David Balazic made curl more RFC1738-compliant for FTP URLs, by fixing so
that libcurl now uses one CWD command for each path part. A bunch of test
cases were fixed to work accordingly.
- Cookie fixes:
A. Save domains in jars like Mozilla does. It means all domains set in
Set-Cookie: headers are dot-prefixed.
B. Save and use the 'tailmatch' field in the Mozilla/Netscape cookie jars
(the second column).
C. Reject cookies using illegal domains in the Set-Cookie: line. Concerns
both domains with too few dots or domains that are outside the currently
operating server host's domain.
D. Set the path part by default to the one used in the request, if none was
set in the Set-Cookie line.
To make item C really good, I also made libcurl notice custom Host: headers
and extract the host name set in there and use that as the host name for the
site we're getting the cookies from. This allows user to specify a site's
IP-address, but still be able to receive and send its cookies properly if
you provide a valid Host: name for the site.
Daniel (29 Apr)
- Peter Kovacs provided a patch that makes the CURLINFO_CONNECT_TIME work fine
when using the multi interface (too).
Version 7.10.5-pre1 (23 Apr 2003)
Daniel (23 Apr)
- Upgraded to libtool 1.5.
Daniel (22 Apr)
- Peter Sylvester pointed out that curl_easy_setopt() will always (wrongly)
return CURLE_OK no matter what happens.
- Dan Fandrich fixed some gzip decompression bugs and flaws.
Daniel (16 Apr)
- Fixed minor typo in man page, reported in the Debian bug tracker.
Daniel (15 Apr)
- Fixed some FTP tests in the test suite that failed on my Solaris host, due
to the config.h not being included before the system headers. When done that
way, it did get a mixed sense of if big files are supported or not and then
stat() and fstat() (as used in test case 505) got confused and failed to
return a proper file size.
- Formposting a file using a .html suffix is now properly set to Content-Type: text/html.
Daniel (14 Apr)
- Fixed the SSL error handling to return proper SSL error messages again, they
broke in 7.10.4. I also attempt to track down CA cert problems and then
return the CURLE_SSL_CACERT error code.
- The curl tool now intercepts the CURLE_SSL_CACERT error code and displays
a fairly big and explanatory error message. Kevin Roth helped me out with
the wording.
Daniel (11 Apr)
- Nic Hines provided a second patch for gzip decompression, and fixed a bug
when deflate or gzip contents were downloaded using chunked encoding.
- Dan Fandrich made libcurl support automatic decompression of gzip contents
(as an addition to the previous deflate support).
- I made the CWD command during FTP session consider all 2xy codes to be OK
responses.
Daniel (10 Apr)
- Vlad Krupin fixed a URL parsing issue. URLs that were not using a slash
after the host name, but still had "?" and parameters appended, as in
"http://hostname.com?foobar=moo", were not properly parsed by libcurl.
Daniel (9 Apr)
- Made CURLOPT_TIMECONDITION work for FTP transfers, using the same syntax as
for HTTP. This then made -z work for ftp transfers too. Added test case 139
and 140 for verifying this.
- Getting the file date of an ftp file used the wrong time zone when
displayed. It is supposedly always GMT. Added test case 141 for this.
- Made the test suite's FTP server support MDTM.
- The default DEBUGFUNCTION, as enabled with CURLOPT_VERBOSE now outputs
CURLINFO_HEADER_IN data as well. The most notable effect from this is that
using curl -v, you get to see the incoming "headers" as well. This is
perhaps most useful when doing ftp.
Daniel (8 Apr)
- James Bursa fixed a flaw in the Content-Type extraction code, which missed
the first letter if no space followed the colon.
- Magnus Nilsson pointed out that share.c was missing in the MSVC project
file.
Daniel (6 Apr)
- Ryan Weaver provided a patch that makes the CA cert bundle not get installed
anymore when 'configure --without-ssl' has been used.
Daniel (4 Apr)
- Martijn Broenland found another cases where a server application didn't
like the boundary string used by curl when foing a multi-part/formpost. We
modified the boundary string to look like the one IE uses, as this is
probably gonna make curl work with more applications.
Daniel (3 Apr)
- Kevin Roth reported that a bunch of tests fails on cygwin. One set fails
when using perl 5.8 (and they run fine with perl 5.6), and another set
failed because of an artifact in the test suite's FTP server that I
corrected. It turned out the FTP server code was still having a file opened
while the main test script removed it and invoked the HTTP server that
attempted to create the same file name of the file the FTP server kept open.
This operation works fine on unix, but not on cygwin.
Version 7.10.4 (2 Apr 2003)
Daniel (1 Apr)
- Added test case 505 to exercise FTP upload with rename done with libcurl,
and for that I had to extend the test suite's FTP server to deal with the
RNFR and RNTO commands.
Daniel (31 Mar)
- Even more SSL config check modifications after Richard's testing.
Version 7.10.4-pre6 (31 Mar 2003)
Daniel (31 Mar)
- More fixes for the SSL session ID cache checks when SSL configs are changed
between connections. Based on tests and talks with Richard Bramante.
- Guillaume Cottenceau provided a patch that added CURLOPT_UNRESTRICTED_AUTH.
When enabled, it will prevent libcurl from limiting to which host it sends
user+password to when following locations. By default, libcurl only sends
name and password to the original host used in the first URL, but with this
option set it will send the auth info to all hosts it follows location
headers to. The new tool command line option for this is named
"--location-trusted".
- Frankie Fong reported a problem with libcurl if you re-used an easy handle
with a proxy, and you first made a https:// connction to a host and then
switched to a http:// one to the same host. libcurl would then wrongly re-use
the same connection for it and fail to get the second URL properly
Daniel (29 Mar)
- Dan Shearer's fix that makes curl complain if invoked with nothing but "curl
-O" was applied.
Daniel (26 Mar)
- Bryan Kemp was friendly enough to lend me an account on his Redhat 9 box and
I could fix the configure problems on redhat 8.1 and 9 in no time thanks to
this. Thanks a bunch Bryan!
Daniel (25 Mar)
- Renamed configure.in to configure.ac
Version 7.10.4-pre5 (25 Mar 2003)
Daniel (25 Mar)
- Richard Bramante provided a fix for a handle re-use problem seen when you
change options on an SSL-enabled connection between requests. Previously,
changing peer verification or host verification and similar things was not
taken into account when a connection were checked for re-use and thus
enabling stricter check between requests on a re-used connection made no
difference and the connection would thus be used erroneously.
Daniel (24 Mar)
- G<>tz Babin-Ebell pointed out that the ca-bundle.crt file contained a
certificate from Trustcenter that was a demo certificate only that was never
indended to be part of a CA bundle.
Daniel (21 Mar)
- Life is a mystery. Within a time period of 17 hours, Tim Pope and Michael
Churchill filed one bug report each, both identifying problems with a second
transfer when doing persistant transfers re-using a connection. Tim's one is
#706624, labeled "Multiple uploads per handle fail" and Michael's #707003
"Does not send Authorization: header when reusing connection". I could track
both down to the same piece of logic and it turned out libcurl was not using
new settings properly when re-using an existing connection. This concerned
both uploading and downloading and involved exactly those pieces these two
reports identified. This code has been this faulty since the day I
introduced persistant connection support in libcurl, more than 2 years ago.
Daniel (20 Mar 2003)
- Five year anniversary. Today five years ago, the first ever curl release saw
the light of day.
Daniel (17 Mar)
- Andy Cedilnik corrected flaws in some libcurl example-usage sources.
Daniel (16 Mar)
- Juan F. Codagnone reported that the fix from March 2nd was incomplete.
- Added code to the configure.in to check for select() argument types. I've
not made any code use the results just yet though.
Daniel (15 Mar)
- Gisle Vanem provided two patches to build better on Windows.
- Adjusted the test suite code to better make sure that the server(s) required
for a specific test is properly started before the test case is attempted.
Many tests now run a lot faster than before.
Daniel (14 Mar)
- Another configure.in adjustment made the configure detect functions properly
on HPUX now.
Daniel (13 Mar)
- Philippe Raoult fixed pre4-compile quirks for FreeBSD.
Version 7.10.4-pre4 (13 Mar 2003)
Daniel (13 Mar)
- Added a backup-check for functions that aren't found by AC_CHECK_FUNCS()
as I believe some checks on HPUX need this. At least some of the info given
to us by Rick Jones seemed to indicate this.
Daniel (12 Mar)
- Thomas Tonino found out that if you used the curl tool to do PUT operations
as in 'curl www.foo.com/dir/ -T file' and the file name included for example
space or other characters that don't belong in URLs, curl did not properly
URL encode them before using them in the URL.
- Added an option to configure called --enable-libgcc that simply adds -lgcc
to the LIBS variable, as this seems to be a common problem.
- I modified the configure.in file, so that the headers are now checked in an
order of "viality". We must also make sure to use the "default headers"
parameter to AC_CHECK_HEADERS() so that headers are checked with the proper
prerequisites included (i.e all the major and generally important header
files are included there by default). This might be what we need for various
Sun, HP, AIX and Tru64 systems to behave good again on the header check
front.
- Rick Jones pointed out a few compiler warnings on HP-UX that I addressed.
- I made the configure --help output nicer by using AC_HELP_STRING() a lot
more.
Daniel (11 Mar)
- Christophe Demory fixed the socket sending code to work better on HP-UX
when sending data to a socket that would block. It then returns EAGAIN, not
EWOULDBLOCK.
- Richard Gorton improved the seeding function for systems without a good
and reliable random source.
- Richard Gorton fixed a few warnings that popped up when you built curl
using the Sun compiler on a 64bit SPARC platform.
- Martin C. Martin fixed a case where a connect failure using the multi
interface didn't produce a human readable error string.
Daniel (10 Mar)
- Reverted ltmain.sh back to libtool 1.4.2 status again, as the 1.4.3 version
broke the build on numerous platforms. It seems that libtool 1.4.3 puts some
requirements on what versions of the other tools (autoconf + automake) that
I am not familiar with and thus I couldn't fulfill at this point.
Yes, this is more than mildly frustrating.
Daniel (7 Mar)
- Run libtoolize version 1.4.3.
Version 7.10.4-pre3 (4 Mar 2003)
Daniel (3 Mar)
- Added share.obj to the VC6 and Borland libcurl makefiles.
- Troels Walsted Hansen found and investigated a problem with libcurl on AIX,
presumably only on 4.3 or later. gethostbyname_r() is not returning data
that is possible to "keep" and cache the way libcurl does. But instead these
versions of AIX uses a gethostbyname() that works thread-safely we can
instead use the ordinary gethostbyname() and our pack_hostent() approach to
achieve what we want. The configure script now attempts to detect AIX 4.3 or
later to adjust for this.
Daniel (2 Mar)
- Juan F. Codagnone found a problem introduced in 7.10.3 when you first did a
POST and then back to a GET using the same easy handle.
Daniel (28 Feb)
- Removed the strequal and strnequal defines from curl/curl.h header. They
were never meant for the public header anyway. Philippe Raoult brought it
up.
- James Bursa fixed the RISC OS build.
Daniel (27 Feb)
- Avery Fay pointed out the very misleading curl_multi_info_read man page, and
I updated it to become more accurate.
- Salvatore Sorrentino found a problem with FTP downloading that turned out to
be his FTP server returning size zero (0 bytes) when SIZE was used on a file
while being in BINARY mode. We now make a second check for the actual size
by scanning the RETR reply anyway, even if the SIZE command returned 0.
Daniel (26 Feb)
- Kyle Sallee reported a case where he would do a transfer that didn't update
the progress meter properly. It turned out to be a case where libcurl would
loop a little too eagerly in the tranfer loop, which isn't really good for
the APIs, especially not the multi API.
Version 7.10.4-pre2 (24 Feb 2003)
Daniel (24 Feb)
- Kjetil Jacobsen found out that setting CURLOPT_MAXCONNECTS to a value higher
than 5 could cause a segfault.
- I believe I fixed the 'Expect: 100-continue' behavior that has been broken
for a while (I think since my change dated Dec 10 2002). When this header is
used, libcurl should wait for a HTTP 100 (or timeout) before sending the
post/put data.
Daniel (14 Feb)
- Matthew Clarke provided some info what to modify to make curl build
flawlessly on AIX 3.2.5.
- Martin C. Martin found and fixed a problem in the multi interface when
running on Windows and trying to connect to a port without a listener.
Daniel (13 Feb)
- Christopher R. Palmer fixed Curl_base64_encode() to deal with zeroes in the
data to encode.
Daniel (4 Feb)
- Jean-Philippe added the first code that enables the 'share' system. This
should now enable sharing of DNS data between two curl easy handles.
- Incorporated Nico Baggus' fixes to again compile flawlessly on VMS.
- James Bursa corrected a bad comment in the public include file curl/multi.h
- Peter Forret reported one of those error:00000000 cases in libcurl again
when connecting to a HTTPS site, and this time I did discover some oddities
in how curl reports SSL errors back. It could miss showing the actual error.
Version 7.10.4-pre1 (3 Feb 2003)
Daniel (3 Feb)
- Removed things in the docs saying capath doesn't work on Windows, as Julian
Noble told us it works fine.
Daniel (31 Jan)
- Kevin Roth fixed the zlib build stuff in the Mingw32 makefile.
Daniel (30 Jan)
- Kevin Roth found out that curl on Windows always checked for the CA cert
bundle using the environment variable and the path scan, even though
-k/--insecure was used.
- Hamish Mackenzie pointed out that curl only did strict host name verifying
if capath or cainfo was used. Now it'll always do it unless -k / --insecure
is used!
- Pavel Cenek pointed out that the Content-Type extraction was done wrongly
as the full string was not fetched. Added test case 57 to verify that curl
does it right now.
Daniel (29 Jan)
- Jamie Wilkinson provided a patch that now makes curl attempt to clear out
"sensitive" command line arguments so that they don't appear in ps outputs
(only on platforms that allow writing to argv[]).
- John McGowan found out that the DEBUGFUNCTION could be called with bad
arguments and thus cause the --trace outputs to go wrong.
- Removed all the emacs local variables from all files. Mats Lidell provided
the new sample.emacs file (for a sample of what to include in your .emacs)
and the curl-style.el that sets a better c-style for editing curl sources.
- Dave Halbakken found a problem with FTP downloads that could accidently
return CURLE_PARTIAL_FILE when curl_easy_perform() was called with NOBODY
set TRUE.
Daniel (27 Jan)
- The fopen.c example was flawed as Nick Humfrey noticed, and I fixed it to
work again.
Daniel (24 Jan)
- Bertrand Demiddelaer found and fixed a memory leak (the content-type string)
when following locations.
Daniel (22 Jan 2003)
- Ian Wilkes and Legoff Vincent both independently provided fixes for making
curl/multi.h work properly when compiled with a C++ compiler.
Daniel (20 Jan 2003)
- Fixed 'buildconf' to check version number of the required tools before
they're actually used.
- Wrote 'testcurl.sh', a script targeted for automatic and distributed curl
tests on various platforms.
- David Thiel pointed out that the .netrc file was not being dealt with
properly anymore. I broke this in the password prompting "fix".
- Markus F.X.J. Oberhumer patched libcurl to allocate the scratch buffer only
on demand and thus we save 32KB in each curl handle that don't use that
buffer. This need appeared when some people started using thousands of
simultaneous curl handles... :-)
Daniel (16 Jan 2003)
- Markus Oberhumer fixed curl-config --cflags when the includedir was not
/usr/include.
- Markus Oberhumer fixed CURLINFO_PRIVATE to properly return NULL if it was
set to NULL!
Version 7.10.3 (14 Jan 2003) Version 7.10.3 (14 Jan 2003)
@@ -1586,4 +2057,4 @@ Daniel (2 January 2002)
changes done on dec-20 made test case 104 cease to work (in both branches). changes done on dec-20 made test case 104 cease to work (in both branches).
- Philip Gladstone pointed out a few portability problems in the source code - Philip Gladstone pointed out a few portability problems in the source code
that didn't compile on 64-bit sparcs using Sun's native that didn't compile on 64-bit sparcs using Sun's native compiler.

View File

@@ -1,6 +1,6 @@
COPYRIGHT AND PERMISSION NOTICE COPYRIGHT AND PERMISSION NOTICE
Copyright (c) 1996 - 2002, Daniel Stenberg, <daniel@haxx.se>. Copyright (c) 1996 - 2003, Daniel Stenberg, <daniel@haxx.se>.
All rights reserved. All rights reserved.

View File

@@ -15,7 +15,8 @@ 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 for analyzing the output generated by curl if -DMALLOCDEBUG
is used when compiling is used when compiling
buildconf builds the makefiles and configure stuff buildconf builds the makefiles and configure stuff
@@ -39,17 +40,24 @@ REQUIREMENTS
You need the following software installed: You need the following software installed:
o autoconf 2.50 (or later) o autoconf 2.57 (or later)
o automake 1.5 (or later) o automake 1.7 (or later)
o libtool 1.4 (or later) o libtool 1.4.2 (or later)
o GNU m4 (required by autoconf) o GNU m4 (required by autoconf)
o nroff + perl (if you don't have nroff and perl and you for some reason o nroff + perl
don't want to install them, you can rename the source file
src/hugehelp.c.cvs to src/hugehelp.c and avoid having to generate this If you don't have nroff and perl and you for some reason don't want to
file. This will of course give you an older version of the file that isn't install them, you can rename the source file src/hugehelp.c.cvs to
up-to-date. That file was checked in once and won't be updated very src/hugehelp.c and avoid having to generate this file. This will of course
regularly.) give you an older version of the file that isn't up-to-date. That file was
checked in once and won't be updated very regularly.
o yacc/bison
If you don't have yacc or bison, you must rename the lib/getdate.c.cvs file
to lib/getdate.c to be able to build libcurl. yacc/bison is normally used
to generate the lib/getdate.c file from the lib/getdate.y source file.
MAC OS X MAC OS X

25
LEGAL
View File

@@ -1,25 +0,0 @@
Copyright (C) 1998-2002, Daniel Stenberg, <daniel@haxx.se>, et al.
Everyone is permitted to copy and distribute verbatim copies of this license
document, but changing it is not allowed.
In order to be useful for every potential user, the curl and libcurl are
dual-licensed under the MPL and the MIT/X-derivate licenses.
You may opt to use, copy, modify, merge, publish, distribute and/or sell
copies of the Software, and permit persons to whom the Software is furnished
to do so, under the terms of the MPL or the MIT/X-derivate licenses. You may
pick one of these licenses. The files MITX.txt and MPL-1.1.txt contain the
license texts.
As a courtesy to the open-source and free software community, we ask you to
dual-license any modifications that you make as well, under the terms of this
document.
Please remember to always keep the licensing information included in
individual source files up-to-date, so as to avoid misleading anyone as to
the status of these files.
I will use a submission policy according to which I will only enter
contributions into the CVS tree if the contributor agrees to both licenses
and this dual-license approach.

View File

@@ -5,7 +5,7 @@
AUTOMAKE_OPTIONS = foreign AUTOMAKE_OPTIONS = foreign
EXTRA_DIST = CHANGES COPYING maketgz SSLCERTS reconf Makefile.dist \ EXTRA_DIST = CHANGES COPYING maketgz SSLCERTS reconf Makefile.dist \
curl-config.in build_vms.com curl-mode.el curl-config.in build_vms.com curl-style.el sample.emacs testcurl.sh
bin_SCRIPTS = curl-config bin_SCRIPTS = curl-config
@@ -13,6 +13,7 @@ SUBDIRS = docs lib src include tests packages
# create a root makefile in the distribution: # create a root makefile in the distribution:
dist-hook: dist-hook:
rm -rf $(top_builddir)/tests/log
cp $(srcdir)/Makefile.dist $(distdir)/Makefile cp $(srcdir)/Makefile.dist $(distdir)/Makefile
html: html:
@@ -26,6 +27,9 @@ check: test
test: test:
@(cd tests; $(MAKE) quiet-test) @(cd tests; $(MAKE) quiet-test)
test-full:
@(cd tests; $(MAKE) 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
# must contain the following line: # must contain the following line:

27
README
View File

@@ -11,19 +11,30 @@ README
MANUAL document. Find out how to install Curl by reading the INSTALL MANUAL document. Find out how to install Curl by reading the INSTALL
document. document.
libcurl is a library that Curl is using to do its job. It is readily libcurl is the library curl is using to do its job. It is readily
available to be used by your software. Read the libcurl.3 man page to available to be used by your software. Read the libcurl.3 man page to
find out how! learn how!
You find answers to the most frequent questions we get in the FAQ document. You find answers to the most frequent questions we get in the FAQ document.
Study the LEGAL file for distribution terms and similar. Study the COPYING file for distribution terms and similar.
CONTACT
If you have problems, questions, ideas or suggestions, please contact us
by posting to a suitable mailing list. See http://curl.haxx.se/mail/
Many major contributors to the project are listed in the THANKS document.
WEB SITE
Visit the curl web site or mirrors for the latest news: Visit the curl web site or mirrors for the latest news:
http://curl.haxx.se/ Sweden -- http://curl.haxx.se/
http://curl.sf.net/ US -- http://curl.sf.net/
http://curl.planetmirror.com/ Australia -- http://curl.planetmirror.com/
DOWNLOAD
The official download mirror sites are: The official download mirror sites are:
@@ -34,6 +45,8 @@ README
US -- http://curl.sourceforge.net/download/ US -- http://curl.sourceforge.net/download/
Hongkong -- http://www.execve.net/curl/ Hongkong -- http://www.execve.net/curl/
CVS
To download the very latest source off the CVS server do this: To download the very latest source off the CVS server do this:
cvs -d :pserver:anonymous@cvs.curl.sourceforge.net:/cvsroot/curl login cvs -d :pserver:anonymous@cvs.curl.sourceforge.net:/cvsroot/curl login
@@ -48,6 +61,8 @@ README
(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.

View File

@@ -6,9 +6,9 @@ default. This is done by installing a default CA cert bundle on 'make install'
(or similar), that CA bundle package is used by default on operations against (or similar), that CA bundle package is used by default on operations against
SSL servers. SSL servers.
Alas, if you communicate with HTTPS servers using certifcates that are signed Alas, if you communicate with HTTPS servers using certificates that are signed
by CAs present in the bundle, you will not notice any changed behavior and you by CAs present in the bundle, you will not notice any changed behavior and you
will seeminglessly get a higher security level on your SSL connections since will seamlessly get a higher security level on your SSL connections since you
can be sure that the remote server really is the one it claims to be. can be sure that the remote server really is the one it claims to be.
If the remote server uses a self-signed certificate, or if you don't install If the remote server uses a self-signed certificate, or if you don't install
@@ -26,10 +26,14 @@ included in the bundle, then you need to do one of the following:
With the curl command tool: --cacert [file] With the curl command tool: --cacert [file]
This upgrade procedure has been deemed The Right Thing even though it adds Neglecting to use one of the above menthods when dealing with a server using a
this extra trouble for some users, since it adds security to a majority of the certficate that isn't signed by one of the certficates in the installed CA
SSL connections that previously weren't really secure. cert bundle, will cause SSL to report an error ("certificate verify failed")
during the handshake and SSL will then refuse further communication with that
server.
It turned out many people were using previous versions of curl/libcurl without This procedure has been deemed The Right Thing even though it adds this extra
realizing the need for the CA cert options to get truly secure SSL trouble for some users, since it adds security to a majority of the SSL
connections. connections that previously weren't really secure. It turned out many people
were using previous versions of curl/libcurl without realizing the need for
the CA cert options to get truly secure SSL connections.

View File

@@ -1,90 +0,0 @@
/* Name of this package! */
#undef PACKAGE
/* Version number of this archive. */
#undef VERSION
/* Define if you have the getpass function. */
#undef HAVE_GETPASS
/* Define cpu-machine-OS */
#undef OS
/* Define if you have the gethostbyaddr_r() function with 5 arguments */
#undef HAVE_GETHOSTBYADDR_R_5
/* Define if you have the gethostbyaddr_r() function with 7 arguments */
#undef HAVE_GETHOSTBYADDR_R_7
/* Define if you have the gethostbyaddr_r() function with 8 arguments */
#undef HAVE_GETHOSTBYADDR_R_8
/* Define if you have the gethostbyname_r() function with 3 arguments */
#undef HAVE_GETHOSTBYNAME_R_3
/* Define if you have the gethostbyname_r() function with 5 arguments */
#undef HAVE_GETHOSTBYNAME_R_5
/* Define if you have the gethostbyname_r() function with 6 arguments */
#undef HAVE_GETHOSTBYNAME_R_6
/* Define if you have the inet_ntoa_r function declared. */
#undef HAVE_INET_NTOA_R_DECL
/* Define if you need the _REENTRANT define for some functions */
#undef NEED_REENTRANT
/* Define if you have the Kerberos4 libraries (including -ldes) */
#undef KRB4
/* Define if you want to enable IPv6 support */
#undef ENABLE_IPV6
/* Define this to 'int' if ssize_t is not an available typedefed type */
#undef ssize_t
/* Define this to 'int' if socklen_t is not an available typedefed type */
#undef socklen_t
/* Define this as a suitable file to read random data from */
#undef RANDOM_FILE
/* Define this to your Entropy Gathering Daemon socket pathname */
#undef EGD_SOCKET
/* Define if you have a working OpenSSL installation */
#undef OPENSSL_ENABLED
/* Define the one correct non-blocking socket method below */
#undef HAVE_FIONBIO
#undef HAVE_IOCTLSOCKET
#undef HAVE_IOCTLSOCKET_CASE
#undef HAVE_O_NONBLOCK
#undef HAVE_DISABLED_NONBLOCKING
/* Define this to 'int' if in_addr_t is not an available typedefed type */
#undef in_addr_t
/* Define to disable DICT */
#undef CURL_DISABLE_DICT
/* Define to disable FILE */
#undef CURL_DISABLE_FILE
/* Define to disable FTP */
#undef CURL_DISABLE_FTP
/* Define to disable GOPHER */
#undef CURL_DISABLE_GOPHER
/* Define to disable HTTP */
#undef CURL_DISABLE_HTTP
/* Define to disable LDAP */
#undef CURL_DISABLE_LDAP
/* Define to disable TELNET */
#undef CURL_DISABLE_TELNET
/* Define if you have zlib present */
#undef HAVE_LIBZ

View File

@@ -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
@@ -52,7 +52,7 @@ dnl the code was bad, try a different program now, test 2
],[ ],[
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
@@ -66,7 +66,7 @@ dnl the code was bad, try a different program now, test 3
],[ ],[
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!
@@ -79,11 +79,11 @@ dnl ioctlsocket didnt compile!
],[ ],[
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!
nonblock="nada" nonblock="nada"
AC_DEFINE(HAVE_DISABLED_NONBLOCKING) AC_DEFINE(HAVE_DISABLED_NONBLOCKING, 1, [disabled non-blocking sockets])
]) ])
dnl end of forth test dnl end of forth test
@@ -152,10 +152,8 @@ 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([
#include <sys/types.h> #include <sys/types.h>
#include <sys/socket.h> #include <sys/socket.h>
@@ -272,15 +270,15 @@ AC_DEFUN(CURL_CHECK_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))])])
]) ])
@@ -302,7 +300,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 +316,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 +335,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,7 +354,7 @@ 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"])])])])])
@@ -380,7 +378,7 @@ gethostbyname_r(const char *, struct hostent *, struct hostent_data *);],[
struct hostent_data data; struct hostent_data data;
gethostbyname_r(NULL, NULL, NULL);],[ gethostbyname_r(NULL, NULL, NULL);],[
AC_MSG_RESULT(yes) AC_MSG_RESULT(yes)
AC_DEFINE(HAVE_GETHOSTBYNAME_R_3) AC_DEFINE(HAVE_GETHOSTBYNAME_R_3, 1, [gethostbyname_r() takes 3 args])
ac_cv_gethostbyname_args=3],[ ac_cv_gethostbyname_args=3],[
AC_MSG_RESULT(no) AC_MSG_RESULT(no)
AC_MSG_CHECKING([if gethostbyname_r with -D_REENTRANT takes 3 arguments]) AC_MSG_CHECKING([if gethostbyname_r with -D_REENTRANT takes 3 arguments])
@@ -398,8 +396,8 @@ gethostbyname_r(const char *,struct hostent *, struct hostent_data *);],[
struct hostent_data data; struct hostent_data data;
gethostbyname_r(NULL, NULL, NULL);],[ gethostbyname_r(NULL, NULL, NULL);],[
AC_MSG_RESULT(yes) AC_MSG_RESULT(yes)
AC_DEFINE(HAVE_GETHOSTBYNAME_R_3) AC_DEFINE(HAVE_GETHOSTBYNAME_R_3, 1, [gethostbyname_r() takes 3 args])
AC_DEFINE(NEED_REENTRANT) AC_DEFINE(NEED_REENTRANT, 1, [needs REENTRANT])
ac_cv_gethostbyname_args=3],[ ac_cv_gethostbyname_args=3],[
AC_MSG_RESULT(no) AC_MSG_RESULT(no)
AC_MSG_CHECKING([if gethostbyname_r takes 5 arguments]) AC_MSG_CHECKING([if gethostbyname_r takes 5 arguments])
@@ -413,7 +411,7 @@ struct hostent *
gethostbyname_r(const char *, struct hostent *, char *, int, int *);],[ gethostbyname_r(const char *, struct hostent *, char *, int, int *);],[
gethostbyname_r(NULL, NULL, NULL, 0, NULL);],[ gethostbyname_r(NULL, NULL, NULL, 0, NULL);],[
AC_MSG_RESULT(yes) AC_MSG_RESULT(yes)
AC_DEFINE(HAVE_GETHOSTBYNAME_R_5) AC_DEFINE(HAVE_GETHOSTBYNAME_R_5, 1, [gethostbyname_r() takes 5 args])
ac_cv_gethostbyname_args=5],[ ac_cv_gethostbyname_args=5],[
AC_MSG_RESULT(no) AC_MSG_RESULT(no)
AC_MSG_CHECKING([if gethostbyname_r takes 6 arguments]) AC_MSG_CHECKING([if gethostbyname_r takes 6 arguments])
@@ -428,7 +426,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"],

View File

@@ -6,7 +6,7 @@ $ loc = f$environment("PROCEDURE")
$ def = f$parse("X.X;1",loc) - "X.X;1" $ def = f$parse("X.X;1",loc) - "X.X;1"
$ $
$ set def 'def' $ set def 'def'
$ cc_qual = "/define=HAVE_CONFIG_H=1/include=(""../include/"",""../"",""../../openssl-0_9_6c/include/"")" $ cc_qual = "/define=HAVE_CONFIG_H=1/include=(""../include/"",""../"",""../../openssl-0_9_7/include/"")"
$ if p1 .eqs. "LISTING" then cc_qual = cc_qual + "/LIST/MACHINE" $ if p1 .eqs. "LISTING" then cc_qual = cc_qual + "/LIST/MACHINE"
$ if p1 .eqs. "DEBUG" then cc_qual = cc_qual + "/LIST/MACHINE/DEBUG" $ if p1 .eqs. "DEBUG" then cc_qual = cc_qual + "/LIST/MACHINE/DEBUG"
$ msg_qual = "" $ msg_qual = ""
@@ -14,8 +14,8 @@ $ call build "[.lib]" "*.c"
$ call build "[.src]" "*.c" $ call build "[.src]" "*.c"
$ call build "[.src]" "*.msg" $ call build "[.src]" "*.msg"
$ link /exe=curl.exe [.src]curl/lib/include=main,[.lib]curl/lib, - $ link /exe=curl.exe [.src]curl/lib/include=main,[.lib]curl/lib, -
[-.openssl-0_9_6c.axp.exe.ssl]libssl/lib, - [-.openssl-0_9_7.axp.exe.ssl]libssl/lib, -
[-.openssl-0_9_6c.axp.exe.crypto]libcrypto/lib [-.openssl-0_9_7.axp.exe.crypto]libcrypto/lib
$ $
$ $
$ goto Common_Exit $ goto Common_Exit

126
buildconf
View File

@@ -5,7 +5,125 @@ die(){
exit exit
} }
aclocal || die "The command 'aclocal' failed" #--------------------------------------------------------------------------
autoheader || die "The command 'autoheader' failed" # autoconf 2.57 or newer
autoconf || die "The command 'autoconf' failed" #
automake -a || die "The command 'automake $MAKEFILES' failed" need_autoconf="2.57"
ac_version=`${AUTOCONF:-autoconf} --version 2>/dev/null|head -1| sed -e 's/^[^0-9]*//' -e 's/[a-z]* *$//'`
if test -z "$ac_version"; then
echo "buildconf: autoconf not found."
echo " You need autoconf version $need_autoconf or newer installed."
exit 1
fi
IFS=.; set $ac_version; IFS=' '
if test "$1" = "2" -a "$2" -lt "57" || test "$1" -lt "2"; then
echo "buildconf: autoconf version $ac_version found."
echo " You need autoconf version $need_autoconf or newer installed."
echo " If you have a sufficient autoconf installed, but it"
echo " is not named 'autoconf', then try setting the"
echo " AUTOCONF environment variable."
exit 1
fi
echo "buildconf: autoconf version $ac_version (ok)"
#--------------------------------------------------------------------------
# autoheader 2.50 or newer
#
ah_version=`${AUTOHEADER:-autoheader} --version 2>/dev/null|head -1| sed -e 's/^[^0-9]*//' -e 's/[a-z]* *$//'`
if test -z "$ah_version"; then
echo "buildconf: autoheader not found."
echo " You need autoheader version 2.50 or newer installed."
exit 1
fi
IFS=.; set $ah_version; IFS=' '
if test "$1" = "2" -a "$2" -lt "50" || test "$1" -lt "2"; then
echo "buildconf: autoheader version $ah_version found."
echo " You need autoheader version 2.50 or newer installed."
echo " If you have a sufficient autoheader installed, but it"
echo " is not named 'autoheader', then try setting the"
echo " AUTOHEADER environment variable."
exit 1
fi
echo "buildconf: autoheader version $ah_version (ok)"
#--------------------------------------------------------------------------
# automake 1.7 or newer
#
need_automake="1.7"
am_version=`${AUTOMAKE:-automake} --version 2>/dev/null|head -1| sed -e 's/^.* \([0-9]\)/\1/' -e 's/[a-z]* *$//'`
if test -z "$am_version"; then
echo "buildconf: automake not found."
echo " You need automake version $need_automake or newer installed."
exit 1
fi
IFS=.; set $am_version; IFS=' '
if test "$1" = "1" -a "$2" -lt "7" || test "$1" -lt "1"; then
echo "buildconf: automake version $am_version found."
echo " You need automake version $need_automake or newer installed."
echo " If you have a sufficient automake installed, but it"
echo " is not named 'autommake', 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]*\)$/.\1/'`
IFS=.; set $lt_version; IFS=' '
lt_status="good"
if test "$1" = "$LIBTOOL_WANTED_MAJOR"; then
if test "$2" -lt "$LIBTOOL_WANTED_MINOR"; then
lt_status="bad"
elif test ! -z "$LIBTOOL_WANTED_PATCH"; then
if test -n "$3"; then
if test "$3" -lt "$LIBTOOL_WANTED_PATCH"; then
lt_status="bad"
fi
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"
echo "buildconf: running automake"
${AUTOMAKE:-automake} -a || die "The command '${AUTOMAKE:-automake} -a' failed"
exit 0

1317
config.guess vendored

File diff suppressed because it is too large Load Diff

1411
config.sub vendored

File diff suppressed because it is too large Load Diff

View File

@@ -5,19 +5,30 @@ dnl Ensure that this file is processed with autoconf 2.50 or newer
dnl Don't even think about removing this check! dnl Don't even think about removing this check!
AC_PREREQ(2.50) AC_PREREQ(2.50)
dnl First some basic init macros dnl We don't know the version number "staticly" so we use a dash here
AC_INIT AC_INIT(curl, [-], [curl-bug@haxx.se])
dnl configure script copyright
AC_COPYRIGHT([Copyright (c) 1998 - 2003 Daniel Stenberg, <daniel@haxx.se>
This configure script may be copied, distributed and modified under the
terms of the curl license; see COPYING for more details])
AC_CONFIG_SRCDIR([lib/urldata.h]) AC_CONFIG_SRCDIR([lib/urldata.h])
AM_CONFIG_HEADER(lib/config.h src/config.h tests/server/config.h lib/ca-bundle.h) AM_CONFIG_HEADER(lib/config.h src/config.h tests/server/config.h lib/ca-bundle.h)
AM_MAINTAINER_MODE AM_MAINTAINER_MODE
AC_PATH_PROG( SED, sed, , $PATH:/usr/bin:/usr/local/bin)
AC_SUBST(SED)
dnl figure out the libcurl version dnl figure out the libcurl version
VERSION=`sed -ne 's/^#define LIBCURL_VERSION "\(.*\)"/\1/p' ${srcdir}/include/curl/curl.h` VERSION=`$SED -ne 's/^#define LIBCURL_VERSION "\(.*\)"/\1/p' ${srcdir}/include/curl/curl.h`
AM_INIT_AUTOMAKE(curl,$VERSION) AM_INIT_AUTOMAKE(curl,$VERSION)
AC_MSG_CHECKING([curl version])
AC_MSG_RESULT($VERSION)
dnl dnl
dnl we extract the numerical version for curl-config only dnl we extract the numerical version for curl-config only
VERSIONNUM=`sed -ne 's/^#define LIBCURL_VERSION_NUM 0x\(.*\)/\1/p' ${srcdir}/include/curl/curl.h` VERSIONNUM=`$SED -ne 's/^#define LIBCURL_VERSION_NUM 0x\(.*\)/\1/p' ${srcdir}/include/curl/curl.h`
AC_SUBST(VERSIONNUM) AC_SUBST(VERSIONNUM)
dnl Solaris pkgadd support definitions dnl Solaris pkgadd support definitions
@@ -72,8 +83,8 @@ dnl switch off particular protocols
dnl dnl
AC_MSG_CHECKING([whether to support http]) AC_MSG_CHECKING([whether to support http])
AC_ARG_ENABLE(http, AC_ARG_ENABLE(http,
[ --enable-http Enable HTTP support AC_HELP_STRING([--enable-http],[Enable HTTP support])
--disable-http Disable HTTP support], AC_HELP_STRING([--disable-http],[Disable HTTP support]),
[ case "$enableval" in [ case "$enableval" in
no) no)
AC_MSG_RESULT(no) AC_MSG_RESULT(no)
@@ -90,8 +101,8 @@ AC_ARG_ENABLE(http,
) )
AC_MSG_CHECKING([whether to support ftp]) AC_MSG_CHECKING([whether to support ftp])
AC_ARG_ENABLE(ftp, AC_ARG_ENABLE(ftp,
[ --enable-ftp Enable FTP support AC_HELP_STRING([--enable-ftp],[Enable FTP support])
--disable-ftp Disable FTP support], AC_HELP_STRING([--disable-ftp],[Disable FTP support]),
[ case "$enableval" in [ case "$enableval" in
no) no)
AC_MSG_RESULT(no) AC_MSG_RESULT(no)
@@ -105,8 +116,8 @@ AC_ARG_ENABLE(ftp,
) )
AC_MSG_CHECKING([whether to support gopher]) AC_MSG_CHECKING([whether to support gopher])
AC_ARG_ENABLE(gopher, AC_ARG_ENABLE(gopher,
[ --enable-gopher Enable GOPHER support AC_HELP_STRING([--enable-gopher],[Enable GOPHER support])
--disable-gopher Disable GOPHER support], AC_HELP_STRING([--disable-gopher],[Disable GOPHER support]),
[ case "$enableval" in [ case "$enableval" in
no) no)
AC_MSG_RESULT(no) AC_MSG_RESULT(no)
@@ -120,8 +131,8 @@ AC_ARG_ENABLE(gopher,
) )
AC_MSG_CHECKING([whether to support file]) AC_MSG_CHECKING([whether to support file])
AC_ARG_ENABLE(file, AC_ARG_ENABLE(file,
[ --enable-file Enable FILE support AC_HELP_STRING([--enable-file],[Enable FILE support])
--disable-file Disable FILE support], AC_HELP_STRING([--disable-file],[Disable FILE support]),
[ case "$enableval" in [ case "$enableval" in
no) no)
AC_MSG_RESULT(no) AC_MSG_RESULT(no)
@@ -135,8 +146,8 @@ AC_ARG_ENABLE(file,
) )
AC_MSG_CHECKING([whether to support ldap]) AC_MSG_CHECKING([whether to support ldap])
AC_ARG_ENABLE(ldap, AC_ARG_ENABLE(ldap,
[ --enable-ldap Enable LDAP support AC_HELP_STRING([--enable-ldap],[Enable LDAP support])
--disable-ldap Disable LDAP support], AC_HELP_STRING([--disable-ldap],[Disable LDAP support]),
[ case "$enableval" in [ case "$enableval" in
no) no)
AC_MSG_RESULT(no) AC_MSG_RESULT(no)
@@ -150,12 +161,12 @@ AC_ARG_ENABLE(ldap,
) )
AC_MSG_CHECKING([whether to support dict]) AC_MSG_CHECKING([whether to support dict])
AC_ARG_ENABLE(dict, AC_ARG_ENABLE(dict,
[ --enable-dict Enable DICT support AC_HELP_STRING([--enable-dict],[Enable DICT support])
--disable-dict Disable DICT support], AC_HELP_STRING([--disable-dict],[Disable DICT support]),
[ case "$enableval" in [ case "$enableval" in
no) no)
AC_MSG_RESULT(no) AC_MSG_RESULT(no)
AC_DEFINE(CURL_DISABLE_DICT, 1 [to disable DICT]) AC_DEFINE(CURL_DISABLE_DICT, 1, [to disable DICT])
AC_SUBST(CURL_DISABLE_DICT) AC_SUBST(CURL_DISABLE_DICT)
;; ;;
*) AC_MSG_RESULT(yes) *) AC_MSG_RESULT(yes)
@@ -165,8 +176,8 @@ AC_ARG_ENABLE(dict,
) )
AC_MSG_CHECKING([whether to support telnet]) AC_MSG_CHECKING([whether to support telnet])
AC_ARG_ENABLE(telnet, AC_ARG_ENABLE(telnet,
[ --enable-telnet Enable TELNET support AC_HELP_STRING([--enable-telnet],[Enable TELNET support])
--disable-telnet Disable TELNET support], AC_HELP_STRING([--disable-telnet],[Disable TELNET support]),
[ case "$enableval" in [ case "$enableval" in
no) no)
AC_MSG_RESULT(no) AC_MSG_RESULT(no)
@@ -186,8 +197,8 @@ dnl **********************************************************************
AC_MSG_CHECKING([whether to enable ipv6]) AC_MSG_CHECKING([whether to enable ipv6])
AC_ARG_ENABLE(ipv6, AC_ARG_ENABLE(ipv6,
[ --enable-ipv6 Enable ipv6 (with ipv4) support AC_HELP_STRING([--enable-ipv6],[Enable ipv6 (with ipv4) support])
--disable-ipv6 Disable ipv6 support], AC_HELP_STRING([--disable-ipv6],[Disable ipv6 support]),
[ case "$enableval" in [ case "$enableval" in
no) no)
AC_MSG_RESULT(no) AC_MSG_RESULT(no)
@@ -271,12 +282,26 @@ AC_CHECK_FUNC(connect, , [ AC_CHECK_LIB(socket, connect) ])
dnl dl lib? dnl dl lib?
AC_CHECK_FUNC(dlclose, , [ AC_CHECK_LIB(dl, dlopen) ]) AC_CHECK_FUNC(dlclose, , [ AC_CHECK_LIB(dl, dlopen) ])
AC_MSG_CHECKING([whether to use libgcc])
AC_ARG_ENABLE(libgcc,
AC_HELP_STRING([--enable-libgcc],[use libgcc when linking]),
[ case "$enableval" in
yes)
LIBS="$LIBS -lgcc"
AC_MSG_RESULT(yes)
;;
*) AC_MSG_RESULT(no)
;;
esac ],
AC_MSG_RESULT(no)
)
dnl ********************************************************************** dnl **********************************************************************
dnl Check how non-blocking sockets are set dnl Check how non-blocking sockets are set
dnl ********************************************************************** dnl **********************************************************************
AC_ARG_ENABLE(nonblocking, AC_ARG_ENABLE(nonblocking,
[ --enable-nonblocking Makes the script detect how to do it AC_HELP_STRING([--enable-nonblocking],[Enable detecting how to do it])
--disable-nonblocking Makes the script disable non-blocking sockets], AC_HELP_STRING([--disable-nonblocking],[Disable non-blocking socket detection]),
[ [
if test "$enableval" = "no" ; then if test "$enableval" = "no" ; then
AC_MSG_WARN([non-blocking sockets disabled]) AC_MSG_WARN([non-blocking sockets disabled])
@@ -295,7 +320,8 @@ dnl Check for the random seed preferences
dnl ********************************************************************** dnl **********************************************************************
AC_ARG_WITH(egd-socket, AC_ARG_WITH(egd-socket,
[ --with-egd-socket=FILE Entropy Gathering Daemon socket pathname], AC_HELP_STRING([--with-egd-socket=FILE],
[Entropy Gathering Daemon socket pathname]),
[ EGD_SOCKET="$withval" ] [ EGD_SOCKET="$withval" ]
) )
if test -n "$EGD_SOCKET" ; then if test -n "$EGD_SOCKET" ; then
@@ -305,7 +331,7 @@ fi
dnl Check for user-specified random device dnl Check for user-specified random device
AC_ARG_WITH(random, AC_ARG_WITH(random,
[ --with-random=FILE read randomness from FILE (default=/dev/urandom)], AC_HELP_STRING([--with-random=FILE],[read randomness from FILE (default=/dev/urandom)]),
[ RANDOM_FILE="$withval" ], [ RANDOM_FILE="$withval" ],
[ [
dnl Check for random device dnl Check for random device
@@ -318,19 +344,38 @@ if test -n "$RANDOM_FILE" ; then
[a suitable file to read random data from]) [a suitable file to read random data from])
fi fi
dnl **********************************************************************
dnl Check if the operating system allows programs to write to their own argv[]
dnl **********************************************************************
AC_MSG_CHECKING([if argv can be written to])
AC_RUN_IFELSE([[
int main(int argc, char ** argv) {
argv[0][0] = ' ';
return (argv[0][0] == ' ')?0:1;
}
]],
AC_DEFINE(HAVE_WRITABLE_ARGV, 1, [Define this symbol if your OS supports changing the contents of argv])
AC_MSG_RESULT(yes),
AC_MSG_RESULT(no),
AC_MSG_RESULT(no)
AC_MSG_WARN([the previous check could not be made default was used])
)
dnl ********************************************************************** dnl **********************************************************************
dnl Check for the presence of Kerberos4 libraries and headers dnl Check for the presence of Kerberos4 libraries and headers
dnl ********************************************************************** dnl **********************************************************************
AC_ARG_WITH(krb4-includes, AC_ARG_WITH(krb4-includes,
[ --with-krb4-includes[=DIR] Specify location of kerberos4 headers],[ AC_HELP_STRING([--with-krb4-includes=DIR],
[Specify location of kerberos4 headers]),[
CPPFLAGS="$CPPFLAGS -I$withval" CPPFLAGS="$CPPFLAGS -I$withval"
KRB4INC="$withval" KRB4INC="$withval"
want_krb4=yes want_krb4=yes
]) ])
AC_ARG_WITH(krb4-libs, AC_ARG_WITH(krb4-libs,
[ --with-krb4-libs[=DIR] Specify location of kerberos4 libs],[ AC_HELP_STRING([--with-krb4-libs=DIR],[Specify location of kerberos4 libs]),[
LDFLAGS="$LDFLAGS -L$withval" LDFLAGS="$LDFLAGS -L$withval"
KRB4LIB="$withval" KRB4LIB="$withval"
want_krb4=yes want_krb4=yes
@@ -339,7 +384,7 @@ AC_ARG_WITH(krb4-libs,
OPT_KRB4=off OPT_KRB4=off
AC_ARG_WITH(krb4,dnl AC_ARG_WITH(krb4,dnl
[ --with-krb4[=DIR] where to look for Kerberos4],[ AC_HELP_STRING([--with-krb4=DIR],[where to look for Kerberos4]),[
OPT_KRB4="$withval" OPT_KRB4="$withval"
if test X"$OPT_KRB4" != Xyes if test X"$OPT_KRB4" != Xyes
then then
@@ -409,6 +454,31 @@ else
AC_MSG_RESULT(no) AC_MSG_RESULT(no)
fi fi
dnl Detect the pkg-config tool, as it may have extra info about the
dnl openssl installation we can use. I *believe* this is what we are
dnl expected to do on really recent Redhat Linux hosts.
AC_PATH_PROG( PKGCONFIG, pkg-config, no, $PATH:/usr/bin:/usr/local/bin)
if test "$PKGCONFIG" != "no" ; then
AC_MSG_CHECKING([for OpenSSL options using pkg-config])
$PKGCONFIG --exists openssl
SSL_EXISTS=$?
if test "$SSL_EXISTS" -eq "0"; then
SSL_LIBS=`$PKGCONFIG --libs-only-l openssl 2>/dev/null`
SSL_LDFLAGS=`$PKGCONFIG --libs-only-L openssl 2>/dev/null`
SSL_CPPFLAGS=`$PKGCONFIG --cflags-only-I openssl 2>/dev/null`
LIBS="$LIBS $SSL_LIBS"
CPPFLAGS="$CPPFLAGS $SSL_CPPFLAGS"
LDFLAGS="$LDFLAGS $SSL_LDFLAGS"
AC_MSG_RESULT([yes])
else
AC_MSG_RESULT([no])
fi
fi
dnl ********************************************************************** dnl **********************************************************************
dnl Check for the presence of SSL libraries and headers dnl Check for the presence of SSL libraries and headers
@@ -417,7 +487,7 @@ dnl **********************************************************************
dnl Default to compiler & linker defaults for SSL files & libraries. dnl Default to compiler & linker defaults for SSL files & libraries.
OPT_SSL=off OPT_SSL=off
AC_ARG_WITH(ssl,dnl AC_ARG_WITH(ssl,dnl
AC_HELP_STRING([--with-ssl=PATH], [where to look for SSL, PATH points to the SSL installation (default: /usr/local/ssl)]) AC_HELP_STRING([--with-ssl=PATH],[where to look for SSL, PATH points to the SSL installation (default: /usr/local/ssl)])
AC_HELP_STRING([--without-ssl], [disable SSL]), AC_HELP_STRING([--without-ssl], [disable SSL]),
OPT_SSL=$withval) OPT_SSL=$withval)
@@ -525,9 +595,9 @@ _cppflags=$CPPFLAGS
_ldflags=$LDFLAGS _ldflags=$LDFLAGS
OPT_ZLIB="/usr/local" OPT_ZLIB="/usr/local"
AC_ARG_WITH(zlib, AC_ARG_WITH(zlib,
AC_HELP_STRING([--with-zlib=PATH], [search for zlib in PATH]) AC_HELP_STRING([--with-zlib=PATH],[search for zlib in PATH])
AC_HELP_STRING([--without-zlib], [disable use of zlib]), AC_HELP_STRING([--without-zlib],[disable use of zlib]),
[OPT_ZLIB="$withval"]) [OPT_ZLIB="$withval"])
case "$OPT_ZLIB" in case "$OPT_ZLIB" in
no) no)
@@ -559,14 +629,30 @@ esac
dnl Default is to try the thread-safe versions of a few functions dnl Default is to try the thread-safe versions of a few functions
OPT_THREAD=on OPT_THREAD=on
dnl detect AIX 4.3 or later
dnl see full docs on this reasoning in the lib/hostip.c source file
AC_MSG_CHECKING([AIX 4.3 or later])
AC_PREPROC_IFELSE([
#if defined(_AIX) && defined(_AIX43)
printf("just fine");
#else
#error "this is not AIX 4.3 or later"
#endif
],
[ AC_MSG_RESULT([yes])
OPT_THREAD=off ],
[ AC_MSG_RESULT([no]) ]
)
AC_ARG_ENABLE(thread,dnl AC_ARG_ENABLE(thread,dnl
[ --disable-thread tell configure to not look for thread-safe functions], AC_HELP_STRING([--disable-thread],[don't look for thread-safe functions]),
OPT_THREAD=off OPT_THREAD=off
AC_MSG_WARN(libcurl will not get built using thread-safe functions)
) )
if test X"$OPT_THREAD" = Xoff if test X"$OPT_THREAD" = Xoff
then then
AC_MSG_WARN(libcurl will not get built using thread-safe functions)
AC_DEFINE(DISABLED_THREADSAFE, 1, \ AC_DEFINE(DISABLED_THREADSAFE, 1, \
Set to explicitly specify we don't want to use thread-safe functions) Set to explicitly specify we don't want to use thread-safe functions)
else else
@@ -593,21 +679,23 @@ dnl **********************************************************************
dnl Checks for header files. dnl Checks for header files.
AC_HEADER_STDC AC_HEADER_STDC
AC_CHECK_HEADERS( \
dnl First check for the very most basic headers. Then we can use these
dnl ones as default-headers when checking for the rest!
AC_CHECK_HEADERS(
sys/types.h \
sys/time.h \
sys/select.h \
sys/socket.h \
unistd.h \ unistd.h \
malloc.h \ malloc.h \
stdlib.h \ stdlib.h \
arpa/inet.h \ arpa/inet.h \
net/if.h \ net/if.h \
netinet/in.h \ netinet/in.h \
netinet/if_ether.h \
netdb.h \ netdb.h \
sys/select.h \
sys/socket.h \
sys/sockio.h \ sys/sockio.h \
sys/stat.h \ sys/stat.h \
sys/types.h \
sys/time.h \
sys/param.h \ sys/param.h \
termios.h \ termios.h \
termio.h \ termio.h \
@@ -622,7 +710,26 @@ AC_CHECK_HEADERS( \
utime.h \ utime.h \
sys/utime.h \ sys/utime.h \
sys/poll.h \ sys/poll.h \
setjmp.h setjmp.h,
dnl to do if not found
[],
dnl to do if found
[],
dnl default includes
[
#ifdef HAVE_SYS_TYPES_H
#include <sys/types.h>
#endif
#ifdef HAVE_SYS_TIME_H
#include <sys/time.h>
#endif
#ifdef HAVE_SYS_SELECT_H
#include <sys/select.h>
#endif
#ifdef HAVE_SYS_SOCKET_H
#include <sys/socket.h>
#endif
]
) )
dnl Checks for typedefs, structures, and compiler characteristics. dnl Checks for typedefs, structures, and compiler characteristics.
@@ -643,6 +750,8 @@ AC_CHECK_TYPE(ssize_t, int)
TYPE_SOCKLEN_T TYPE_SOCKLEN_T
TYPE_IN_ADDR_T TYPE_IN_ADDR_T
AC_FUNC_SELECT_ARGTYPES
dnl Checks for library functions. dnl Checks for library functions.
dnl AC_PROG_GCC_TRADITIONAL dnl AC_PROG_GCC_TRADITIONAL
AC_TYPE_SIGNAL AC_TYPE_SIGNAL
@@ -675,7 +784,21 @@ AC_CHECK_FUNCS( socket \
dlopen \ dlopen \
utime \ utime \
sigsetjmp \ sigsetjmp \
poll poll,
dnl if found
[],
dnl if not found, $ac_func is the name we check for
func="$ac_func"
AC_MSG_CHECKING([deeper for $func])
AC_TRY_LINK( [],
[ $func ();],
AC_MSG_RESULT(yes!)
eval "ac_cv_func_$func=yes"
def=`echo "HAVE_$func" | tr 'a-z' 'A-Z'`
AC_DEFINE_UNQUOTED($def, 1, [If you have $func]),
AC_MSG_RESULT(but still no)
)
) )
dnl sigsetjmp() might be a macro and no function so if it isn't found already dnl sigsetjmp() might be a macro and no function so if it isn't found already
@@ -691,15 +814,6 @@ if test "$ac_cv_func_sigsetjmp" != "yes"; then
) )
fi fi
dnl removed 'getpass' check on October 26, 2000
if test "$ac_cv_func_select" != "yes"; then
AC_MSG_ERROR(Can't work without an existing select() function)
fi
if test "$ac_cv_func_socket" != "yes"; then
AC_MSG_ERROR(Can't work without an existing socket() function)
fi
AC_PATH_PROG( PERL, perl, , AC_PATH_PROG( PERL, perl, ,
$PATH:/usr/local/bin/perl:/usr/bin/:/usr/local/bin ) $PATH:/usr/local/bin/perl:/usr/bin/:/usr/local/bin )
AC_SUBST(PERL) AC_SUBST(PERL)
@@ -708,7 +822,6 @@ AC_PATH_PROGS( NROFF, gnroff nroff, ,
$PATH:/usr/bin/:/usr/local/bin ) $PATH:/usr/bin/:/usr/local/bin )
AC_SUBST(NROFF) AC_SUBST(NROFF)
AC_MSG_CHECKING([CA cert bundle install path]) AC_MSG_CHECKING([CA cert bundle install path])
AC_ARG_WITH(ca-bundle, AC_ARG_WITH(ca-bundle,
@@ -723,6 +836,11 @@ AC_HELP_STRING([--without-ca-bundle], [Don't install the CA bundle]),
fi fi
] ) ] )
if test X"$OPT_SSL" = Xno
then
ca="no"
fi
if test "x$ca" = "xno"; then if test "x$ca" = "xno"; then
dnl let's not keep "no" as path name, blank it instead dnl let's not keep "no" as path name, blank it instead
ca="" ca=""
@@ -745,8 +863,8 @@ dnl lame option to switch on debug options
dnl dnl
AC_MSG_CHECKING([whether to enable debug options]) AC_MSG_CHECKING([whether to enable debug options])
AC_ARG_ENABLE(debug, AC_ARG_ENABLE(debug,
[ --enable-debug Enable pedantic debug options AC_HELP_STRING([--enable-debug],[Enable pedantic debug options])
--disable-debug Disable debug options], AC_HELP_STRING([--disable-debug],[Disable debug options]),
[ case "$enableval" in [ case "$enableval" in
no) no)
AC_MSG_RESULT(no) AC_MSG_RESULT(no)
@@ -756,7 +874,7 @@ AC_ARG_ENABLE(debug,
CPPFLAGS="$CPPFLAGS -DMALLOCDEBUG" CPPFLAGS="$CPPFLAGS -DMALLOCDEBUG"
CFLAGS="$CFLAGS -g" CFLAGS="$CFLAGS -g"
if test "$GCC" = "yes"; then if test "$GCC" = "yes"; then
CFLAGS="$CFLAGS -W -Wall -Wwrite-strings -pedantic -Wundef -Wpointer-arith -Wcast-align -Wnested-externs" CFLAGS="$CFLAGS -W -Wall -Wwrite-strings -pedantic -Wundef -Wpointer-arith -Wnested-externs"
fi fi
dnl strip off optimizer flags dnl strip off optimizer flags
NEWFLAGS="" NEWFLAGS=""

View File

@@ -107,8 +107,11 @@ while test $# -gt 0; do
;; ;;
--cflags) --cflags)
#echo -I@includedir@ if test "X@includedir@" = "X/usr/include"; then
echo "" echo ""
else
echo "-I@includedir@"
fi
;; ;;
--libs) --libs)

View File

@@ -1,21 +0,0 @@
;;;; Emacs Lisp help for writing curl code. ;;;;
;;; In C files, put something like this to load this file automatically:
;;
;; /* -----------------------------------------------------------------
;; * local variables:
;; * eval: (load-file "../curl-mode.el")
;; * end:
;; */
;;
;; (note: make sure to get the path right in the argument to load-file).
;;; The curl hacker's C conventions
;;; we use intent-level 2
(setq c-basic-offset 2)
;;; never ever use tabs to indent!
(setq indent-tabs-mode nil)
;;; I like this, stolen from Subversion! ;-)
(setq angry-mob-with-torches-and-pitchforks t)

50
curl-style.el Normal file
View File

@@ -0,0 +1,50 @@
;;;; Emacs Lisp help for writing curl code. ;;;;
;;;; $Id$
;;; The curl hacker's C conventions.
;;; After loading this file and added the mode-hook you can in C
;;; files, put something like this to use the curl style
;;; automatically:
;;
;; /* -----------------------------------------------------------------
;; * local variables:
;; * eval: (set c-file-style "curl")
;; * end:
;; */
;;
(defconst curl-c-style
'((c-basic-offset . 2)
(c-comment-only-line-offset . 0)
(c-hanging-braces-alist . ((substatement-open before after)))
(c-offsets-alist . ((topmost-intro . 0)
(topmost-intro-cont . 0)
(substatement . +)
(substatement-open . 0)
(statement-case-intro . +)
(statement-case-open . 0)
(case-label . 0)
))
)
"Curl C Programming Style")
;; Customizations for all of c-mode, c++-mode, and objc-mode
(defun curl-c-mode-common-hook ()
"Curl C mode hook"
;; add curl style and set it for the current buffer
(c-add-style "curl" curl-c-style t)
(setq tab-width 8
indent-tabs-mode nil ; Use spaces. Not tabs.
comment-column 40
c-font-lock-extra-types (append '("bool" "CURL" "CURLcode" "ssize_t" "size_t" "socklen_t" "fd_set"))
)
;; keybindings for C, C++, and Objective-C. We can put these in
;; c-mode-base-map because of inheritance ...
(define-key c-mode-base-map "\M-q" 'c-fill-paragraph)
(setq c-recognize-knr-p nil)
)
;; Set this is in your .emacs if you want to use the c-mode-hook as
;; defined here right out of the box.
; (add-hook 'c-mode-common-hook 'curl-c-mode-common-hook)

View File

@@ -8,7 +8,7 @@ $Id$
BUGS BUGS
Curl and libcurl have grown substantially since the beginning. At the time Curl and libcurl have grown substantially since the beginning. At the time
of writing (end of April 2002), there are 32000 lines of source code, and by of writing (end of March 2003), there are 35000 lines of source code, and by
the time you read this it has probably grown even more. the time you read this it has probably grown even more.
Of course there are lots of bugs left. And lots of misfeatures. Of course there are lots of bugs left. And lots of misfeatures.
@@ -19,18 +19,21 @@ BUGS
WHERE TO REPORT WHERE TO REPORT
If you can't fix a bug yourself and submit a fix for it, try to report an as If you can't fix a bug yourself and submit a fix for it, try to report an as
detailed report as possible to the curl mailing list to allow one of us to detailed report as possible to a curl mailing list to allow one of us to
have a go at a solution. You should also post your bug/problem at curl's bug have a go at a solution. You should also post your bug/problem at curl's bug
tracking system over at tracking system over at
http://sourceforge.net/bugs/?group_id=976 http://sourceforge.net/bugs/?group_id=976
(but please read the section below first before doing that) (but please read the sections below first before doing that)
If you feel you need to ask around first, find a suitable mailing list and
post there. The lists are available on http://curl.haxx.se/mail/
WHAT TO REPORT WHAT TO REPORT
When reporting a bug, you should include information that will help us When reporting a bug, you should include information that will help us
understand what's wrong what you expected to happen and how to repeat the understand what's wrong, what you expected to happen and how to repeat the
bad behavior. You therefore need to tell us: bad behavior. You therefore need to tell us:
- your operating system's name and version number (uname -a under a unix - your operating system's name and version number (uname -a under a unix

View File

@@ -145,5 +145,15 @@ How To Make a Patch
diff -ur curl-original-dir curl-modfied-sources-dir > my-fixes.diff diff -ur curl-original-dir curl-modfied-sources-dir > my-fixes.diff
GNU diff exists for virtually all platforms, including all kinds of unixes The GNU diff and GNU patch tools exist for virtually all platforms, including
and Windows. all kinds of unixes and Windows:
For unix-like operating systems:
http://www.fsf.org/software/patch/patch.html
http://www.gnu.org/directory/diffutils.html
For Windows:
http://gnuwin32.sourceforge.net/packages/patch.htm
http://gnuwin32.sourceforge.net/packages/diffutils.htm

View File

@@ -1,4 +1,4 @@
Updated: January 13, 2003 (http://curl.haxx.se/docs/faq.html) Updated: May 9, 2003 (http://curl.haxx.se/docs/faq.html)
_ _ ____ _ _ _ ____ _
___| | | | _ \| | ___| | | | _ \| |
/ __| | | | |_) | | / __| | | | |_) | |
@@ -97,6 +97,12 @@ FAQ
We spell it cURL or just curl. We pronounce it with an initial k sound: We spell it cURL or just curl. We pronounce it with an initial k sound:
[kurl]. [kurl].
NOTE: there are numerous sub-projects and related projects that also use the
word curl in the project names in various combinations, but you should take
notice that this FAQ is directed at the command-line tool named curl (and
libcurl the library), and may therefore not be valid for other curl
projects.
1.2 What is libcurl? 1.2 What is libcurl?
libcurl is a reliable and portable library which provides you with an easy libcurl is a reliable and portable library which provides you with an easy
@@ -132,11 +138,9 @@ FAQ
better. We do however believe in a few rules when it comes to the future of better. We do however believe in a few rules when it comes to the future of
curl: curl:
* Curl is to remain a command line tool. If you want GUIs or fancy scripting * Curl -- the command line tool -- is to remain a non-graphical command line
capabilities, you're free to write another tool that uses libcurl and that tool. If you want GUIs or fancy scripting capabilities, you should look
offers this. There's no point in having a single tool that does every for another tool that uses libcurl.
imaginable thing. That's also one of the great advantages of having the
core of curl as a library.
* We do not add things to curl that other small and available tools already * We do not add things to curl that other small and available tools already
do very fine at the side. Curl's output is fine to pipe into another do very fine at the side. Curl's output is fine to pipe into another
@@ -175,20 +179,21 @@ FAQ
Project cURL is entirely free and open. No person gets paid for developing Project cURL is entirely free and open. No person gets paid for developing
curl. We do this voluntarily on our spare time. curl. We do this voluntarily on our spare time.
We get some help from companies. Contactor Data hosts the curl web site and We get some help from companies. Contactor Data hosts the curl web site,
the main mailing list, Haxx owns the curl web site's domain and Haxx owns the curl web site's domain and sourceforge.net hosts several
sourceforge.net hosts several project tools we take advantage from like the project services we take advantage from, like the bug tracker, mailing lists
bug tracker, mailing lists and more. and more.
If you want to support our project with a donation or similar, one way of If you want to support our project with a donation or similar, one way of
doing that would be to buy "gift certificates" at useful online shopping doing that would be to buy "gift certificates" at useful online shopping
sites, such as amazon.com or thinkgeek.com. Another way would be to sponsor sites, such as amazon.com or thinkgeek.com. Another way would be to sponsor
us through a banner-program or even better: by helping us coding, us through a banner-program or even better: by helping us coding,
documenting, testing etc. documenting, testing etc. You're welcome to send us a buck using paypal, as
described here: http://curl.haxx.se/donation.html
1.7 What about CURL from curl.com? 1.7 What about CURL from curl.com?
During the summer 2001, curl.com has been busy advertising their client-side During the summer 2001, curl.com was busy advertising their client-side
programming language for the web, named CURL. programming language for the web, named CURL.
We are in no way associated with curl.com or their CURL programming We are in no way associated with curl.com or their CURL programming
@@ -203,17 +208,17 @@ FAQ
1.8 I have a problem who do I mail? 1.8 I have a problem who do I mail?
Please do not attempt to mail any single individual unless you really need Please do not mail any single individual unless you really need to. Keep
to. Keep curl-related questions on a suitable mailing list. All available curl-related questions on a suitable mailing list. All available mailing
mailing lists are listed in the MANUAL document and online at lists are listed in the MANUAL document and online at
http://curl.haxx.se/mail/ http://curl.haxx.se/mail/
Keeping curl-related questions and discussions on mailing lists allows others Keeping curl-related questions and discussions on mailing lists allows
to join in and help, to share their ideas, contribute their suggestions and others to join in and help, to share their ideas, contribute their
spread their wisdom. Keeping discussions on public mailing lists also allows suggestions and spread their wisdom. Keeping discussions on public mailing
for others to learn from this (both current and future users thanks to the lists also allows for others to learn from this (both current and future
web based archives of the mailing lists), thus saving us from having to users thanks to the web based archives of the mailing lists), thus saving us
repeat ourselves even more. Thanks for respecting this. from having to repeat ourselves even more. Thanks for respecting this.
2. Install Related Problems 2. Install Related Problems
@@ -368,9 +373,10 @@ FAQ
http://curl.haxx.se/libcurl/ http://curl.haxx.se/libcurl/
In December 2001, there are interfaces available for the following In February 2003, there are interfaces available for the following
languages: C/C++, Cocoa, Dylan, Java, Perl, PHP, Python, Rexx, Ruby, Scheme languages: Basic, C, C++, Cocoa, Dylan, Euphoria, Java, Lua, Object-Pascal,
and Tcl. By the time you read this, additional ones may have appeared! Pascal, Perl, PHP, PostgreSQL, Python, Rexx, Ruby, Scheme and Tcl. By the
time you read this, additional ones may have appeared!
3.10 What about SOAP, WebDAV, XML-RPC or similar protocols over HTTP? 3.10 What about SOAP, WebDAV, XML-RPC or similar protocols over HTTP?
@@ -379,8 +385,8 @@ FAQ
XML-RPC are all such ones. You can use -X to set custom requests and -H to XML-RPC are all such ones. You can use -X to set custom requests and -H to
set custom headers (or replace internally generated ones). set custom headers (or replace internally generated ones).
Using libcurl or PHP's curl modules is just as fine and you'd just use the Using libcurl is of course just as fine and you'd just use the proper
proper library options to do the same. library options to do the same.
3.11 How do I POST with a different Content-Type? 3.11 How do I POST with a different Content-Type?
@@ -494,8 +500,7 @@ FAQ
curl '{curl,www}.haxx.se' curl '{curl,www}.haxx.se'
To be able to use those letters as actual parts of the URL (without using To be able to use those letters as actual parts of the URL (without using
them for the curl URL "globbing" system), use the -g/--globoff option (curl them for the curl URL "globbing" system), use the -g/--globoff option:
7.6 and later):
curl -g 'www.site.com/weirdname[].html' curl -g 'www.site.com/weirdname[].html'
@@ -630,7 +635,7 @@ FAQ
this check. this check.
Details are also in the SSLCERTS file in the release archives, found online Details are also in the SSLCERTS file in the release archives, found online
here: http://curl.haxx.se/lxr/source/SSLCERTS here: http://curl.haxx.se/docs/sslcerts.html
5. libcurl Issues 5. libcurl Issues
@@ -682,20 +687,15 @@ FAQ
5.3 How do I fetch multiple files with libcurl? 5.3 How do I fetch multiple files with libcurl?
Starting with version 7.7, curl and libcurl will have excellent support for libcurl has excellent support for transferring multiple files. You should
transferring multiple files. You should just repeatedly set new URLs with just repeatedly set new URLs with curl_easy_setopt() and then transfer it
curl_easy_setopt() and then transfer it with curl_easy_perform(). The handle with curl_easy_perform(). The handle you get from curl_easy_init() is not
you get from curl_easy_init() is not only reusable starting with libcurl only reusable, but you're even encouraged to reuse it if you can, as that
7.7, but also you're encouraged to reuse it if you can, as that will enable will enable libcurl to use persistent connections.
libcurl to use persistent connections.
For libcurl prior to 7.7, there was no multiple file support. The only
available way to do multiple requests was to init/perform/cleanup for each
transfer.
5.4 Does libcurl do Winsock initialization on win32 systems? 5.4 Does libcurl do Winsock initialization on win32 systems?
Yes (since 7.8.1) if told to in the curl_global_init() call. Yes, if told to in the curl_global_init() call.
5.5 Does CURLOPT_FILE and CURLOPT_INFILE work on win32 ? 5.5 Does CURLOPT_FILE and CURLOPT_INFILE work on win32 ?
@@ -709,13 +709,11 @@ FAQ
5.6 What about Keep-Alive or persistent connections? 5.6 What about Keep-Alive or persistent connections?
Starting with version 7.7, curl and libcurl will have excellent support for curl and libcurl have excellent support for persistent connections when
persistent connections when transferring several files from the same server. transferring several files from the same server. Curl will attempt to reuse
Curl will attempt to reuse connections for all URLs specified on the same connections for all URLs specified on the same command line/config file, and
command line/config file, and libcurl will reuse connections for all libcurl will reuse connections for all transfers that are made using the
transfers that are made using the same libcurl handle. same libcurl handle.
Previous versions had no persistent connection support.
5.7 Link errors when building libcurl on Windows! 5.7 Link errors when building libcurl on Windows!

View File

@@ -54,7 +54,7 @@ OpenSSL took over where SSLeay was abandoned.
May 1999, first Debian package. May 1999, first Debian package.
August 1999, LDAP:// and FILE:// support added. The curl web site gets 1300 August 1999, LDAP:// and FILE:// support added. The curl web site gets 1300
visits daily. visits weekly.
Released curl 6.0 in September. 15000 lines of code. Released curl 6.0 in September. 15000 lines of code.
@@ -67,7 +67,7 @@ the easy interface and turned out to be the beginning of actually getting
other software and programs to get based on and powered by libcurl. Almost other software and programs to get based on and powered by libcurl. Almost
20000 lines of code. 20000 lines of code.
August 2000, the curl web site gets 4000 visits daily. August 2000, the curl web site gets 4000 visits weekly.
The PHP guys adopted libcurl already the same month, when the first ever third The PHP guys adopted libcurl already the same month, when the first ever third
party libcurl binding showed up. CURL has been a supported module in PHP since party libcurl binding showed up. CURL has been a supported module in PHP since
@@ -92,7 +92,7 @@ code.
August 2001. curl is bundled in Mac OS X, 10.1. It was already becoming more August 2001. curl is bundled in Mac OS X, 10.1. It was already becoming more
and more of a standard utility of Linux distributions and a regular in the BSD and more of a standard utility of Linux distributions and a regular in the BSD
ports collections. The curl web site gets 8000 visits daily. Curl Corporation ports collections. The curl web site gets 8000 visits weekly. Curl Corporation
contacted Daniel to discuss "the name issue". After Daniel's reply, they have contacted Daniel to discuss "the name issue". After Daniel's reply, they have
never since got in touch again. never since got in touch again.
@@ -100,7 +100,7 @@ September 2001, libcurl 7.9 introduces cookie jar and curl_formadd(). During
the forthcoming 7.9.x releases, we introduced the multi interface slowly and the forthcoming 7.9.x releases, we introduced the multi interface slowly and
without much whistles. without much whistles.
June 2002, the curl web site gets 13000 visits daily. curl and libcurl is June 2002, the curl web site gets 13000 visits weekly. curl and libcurl is
35000 lines of code. Reported successful compiles on more than 40 combinations 35000 lines of code. Reported successful compiles on more than 40 combinations
of CPUs and operating systems. of CPUs and operating systems.
@@ -111,3 +111,6 @@ distributions and otherwise retrieved as part of other software.
September 2002, with the release of curl 7.10 it is released under the MIT September 2002, with the release of curl 7.10 it is released under the MIT
license only. license only.
February 2003, the curl site averages at 20000 visits weekly. At any given
moment, there's an average of 3 people browsing the curl.haxx.se site.

25
docs/HOWTO-RELEASE Normal file
View File

@@ -0,0 +1,25 @@
Steps To Perform When Building a Public Release
* "make distcheck"
* ./maketgz
then upload the 3 curl packages maketgz created
* update these files:
www/_download.html
www/_changes.html
www/_newslog.html
www/Makefile
* commit the web changes
* 'cvs commit'
* 'cvs tag'
* write the release announcement, including:
- changes / bugfixes
- other curl-related news
- contributors
* mail release-announcement to curl-announce and curl-users

View File

@@ -31,6 +31,10 @@ UNIX
If you have checked out the sources from the CVS repository, read the If you have checked out the sources from the CVS repository, read the
CVS-INFO on how to proceed. CVS-INFO on how to proceed.
Get a full listing of all available configure options by invoking it like:
./configure --help
If you want to install curl in a different file hierarchy than /usr/local, If you want to install curl in a different file hierarchy than /usr/local,
you need to specify that already when running configure: you need to specify that already when running configure:
@@ -400,6 +404,17 @@ CROSS COMPILE
The '--prefix' parameter specifies where cURL will be installed. If The '--prefix' parameter specifies where cURL will be installed. If
'configure' completes successfully, do 'make' and 'make install' as usual. 'configure' completes successfully, do 'make' and 'make install' as usual.
RISC OS
=======
The library can be cross-compiled using gccsdk as follows:
CC=riscos-gcc AR=riscos-ar RANLIB='riscos-ar -s' ./configure \
--host=arm-riscos-aof --without-random --disable-shared
make
where riscos-gcc and riscos-ar are links to the gccsdk tools.
You can then link your program with curl/lib/.libs/libcurl.a
PORTS PORTS
===== =====
This is a probably incomplete list of known hardware and operating systems This is a probably incomplete list of known hardware and operating systems
@@ -419,7 +434,7 @@ PORTS
- MIPS IRIX 6.2, 6.5 - MIPS IRIX 6.2, 6.5
- MIPS Linux - MIPS Linux
- Pocket PC/Win CE 3.0 - Pocket PC/Win CE 3.0
- Power AIX 4.2, 4.3.1, 4.3.2, 5.1 - Power AIX 3.2.5, 4.2, 4.3.1, 4.3.2, 5.1
- PowerPC Darwin 1.0 - PowerPC Darwin 1.0
- PowerPC Linux - PowerPC Linux
- PowerPC Mac OS 9 - PowerPC Mac OS 9
@@ -443,11 +458,14 @@ PORTS
- i386 Solaris 2.7 - i386 Solaris 2.7
- i386 Windows 95, 98, ME, NT, 2000 - i386 Windows 95, 98, ME, NT, 2000
- i386 QNX 6 - i386 QNX 6
- i486 ncr-sysv4.3.03 (NCR MP-RAS)
- ia64 Linux 2.3.99 - ia64 Linux 2.3.99
- m68k AmigaOS 3 - m68k AmigaOS 3
- m68k Linux - m68k Linux
- m68k OpenBSD - m68k OpenBSD
- m88k dg-dgux5.4R3.00
- s390 Linux - s390 Linux
- XScale/PXA250 Linux 2.4
OpenSSL OpenSSL
======= =======

View File

@@ -3,6 +3,9 @@ join in and help us correct one or more of these! Also be sure to check the
changelog of the current development status, as one or more of these problems changelog of the current development status, as one or more of these problems
may have been fixed since this was written! may have been fixed since this was written!
* IPv6 support on AIX 4.3.3 doesn't work due to a missing sockaddr_storage
struct. It has been reported to work on AIX 5.1 though.
* Running 'make test' on Mac OS X gives 4 errors. This seems to be related * Running 'make test' on Mac OS X gives 4 errors. This seems to be related
to some kind of libtool problem: to some kind of libtool problem:
http://curl.haxx.se/mail/archive-2002-03/0029.html and http://curl.haxx.se/mail/archive-2002-03/0029.html and
@@ -15,6 +18,8 @@ may have been fixed since this was written!
* configure --disable-http is not fully supported. All other protocols seem * configure --disable-http is not fully supported. All other protocols seem
to work to disable. to work to disable.
* The -m parameter does not work when using telnet with curl on Windows.
* If a HTTP server responds to a HEAD request and includes a body (thus * If a HTTP server responds to a HEAD request and includes a body (thus
violating the RFC2616), curl won't wait to read the response but just stop violating the RFC2616), curl won't wait to read the response but just stop
reading and return back. If a second request (let's assume a GET) is then reading and return back. If a second request (let's assume a GET) is then

View File

@@ -166,13 +166,21 @@ UPLOADING
VERBOSE / DEBUG VERBOSE / DEBUG
If curl fails where it isn't supposed to, if the servers don't let you If curl fails where it isn't supposed to, if the servers don't let you in,
in, if you can't understand the responses: use the -v flag to get VERBOSE if you can't understand the responses: use the -v flag to get verbose
fetching. Curl will output lots of info and all data it sends and fetching. Curl will output lots of info and what it sends and receives in
receives in order to let the user see all client-server interaction. order to let the user see all client-server interaction (but it won't show
you the actual data).
curl -v ftp://ftp.upload.com/ curl -v ftp://ftp.upload.com/
To get even more details and information on what curl does, try using the
--trace or --trace-ascii options with a given file name to log to, like
this:
curl --trace trace.txt www.haxx.se
DETAILED INFORMATION DETAILED INFORMATION
Different protocols provide different ways of getting detailed information Different protocols provide different ways of getting detailed information
@@ -350,6 +358,13 @@ COOKIES
curl -b headers www.example.com curl -b headers www.example.com
While saving headers to a file is a working way to store cookies, it is
however error-prone and not the prefered way to do this. Instead, make curl
save the incoming cookies using the well-known netscape cookie format like
this:
curl -c cookies.txt www.example.com
Note that by specifying -b you enable the "cookie awareness" and with -L Note that by specifying -b you enable the "cookie awareness" and with -L
you can make curl follow a location: (which often is used in combination you can make curl follow a location: (which often is used in combination
with cookies). So that if a site sends cookies and a location, you can with cookies). So that if a site sends cookies and a location, you can
@@ -364,6 +379,10 @@ COOKIES
stored cookies which match the request as it follows the location. The stored cookies which match the request as it follows the location. The
file "empty.txt" may be a non-existant file. file "empty.txt" may be a non-existant file.
Alas, to both read and write cookies from a netscape cookie file, you can
set both -b and -c to use the same file:
curl -b cookies.txt -c cookies.txt www.example.com
PROGRESS METER PROGRESS METER
@@ -413,7 +432,8 @@ SPEED LIMIT
Forcing curl not to transfer data faster than a given rate is also possible, Forcing curl not to transfer data faster than a given rate is also possible,
which might be useful if you're using a limited bandwidth connection and you which might be useful if you're using a limited bandwidth connection and you
don't want your transfer to use all of it. don't want your transfer to use all of it (sometimes referred to as
"bandwith throttle").
Make curl transfer data no faster than 10 kilobytes per second: Make curl transfer data no faster than 10 kilobytes per second:
@@ -427,6 +447,11 @@ SPEED LIMIT
curl -T upload --limit-rate 1M ftp://uploadshereplease.com curl -T upload --limit-rate 1M ftp://uploadshereplease.com
When using the --limit-rate option, the transfer rate is regulated on a
per-second basis, which will cause the total transfer speed to become lower
than the given number. Sometimes of course substantially lower, if your
transfer stalls during periods.
CONFIG FILE CONFIG FILE
Curl automatically tries to read the .curlrc file (or _curlrc file on win32 Curl automatically tries to read the .curlrc file (or _curlrc file on win32

View File

@@ -10,7 +10,8 @@ man_MANS = \
HTMLPAGES = \ HTMLPAGES = \
curl.html \ curl.html \
curl-config.html curl-config.html \
index.html
PDFPAGES = \ PDFPAGES = \
curl.pdf \ curl.pdf \

View File

@@ -82,3 +82,11 @@ that have contributed with non-trivial parts:
- Andreas Damm <andreas-sourceforge@radab.org> - Andreas Damm <andreas-sourceforge@radab.org>
- Jacky Lam <sylam@emsoftltd.com> - Jacky Lam <sylam@emsoftltd.com>
- James Gallagher <jgallagher@gso.uri.edu> - James Gallagher <jgallagher@gso.uri.edu>
- Kjetil Jacobsen <kjetilja@cs.uit.no>
- Markus F.X.J. Oberhumer <markus@oberhumer.com>
- Miklos Nemeth <mnemeth@kfkisystems.com>
- Kevin Roth <kproth@users.sourceforge.net>
- Ralph Mitchell <rmitchell@eds.com>
- Dan Fandrich <dan@coneharvesters.com>
- Jean-Philippe Barrette-LaPierre <jpb@rrette.com>
- Richard Bramante <RBramante@on.com>

View File

@@ -24,9 +24,9 @@ TODO
less copy of data and thus a faster operation. less copy of data and thus a faster operation.
[http://curl.haxx.se/dev/no_copy_callbacks.txt] [http://curl.haxx.se/dev/no_copy_callbacks.txt]
* Add asynchronous name resolving (http://daniel.haxx.se/resolver/). This * Add asynchronous name resolving (http://libdenise.sf.net/). This should be
should be made to work on most of the supported platforms, or otherwise it made to work on most of the supported platforms, or otherwise it isn't
isn't really interesting. really interesting.
* Data sharing. Tell which easy handles within a multi handle that should * Data sharing. Tell which easy handles within a multi handle that should
share cookies, connection cache, dns cache, ssl session cache. Full share cookies, connection cache, dns cache, ssl session cache. Full
@@ -57,12 +57,15 @@ TODO
LIBCURL - multi interface LIBCURL - multi interface
* Make sure we don't ever loop because of non-blocking sockets return * Make sure we don't ever loop because of non-blocking sockets return
EWOULDBLOCK or similar. This FTP command sending etc. EWOULDBLOCK or similar. This FTP command sending, the SSL connection etc.
* Make uploads treated better. We need a way to tell libcurl we have data to * Make transfers treated more carefully. We need a way to tell libcurl we
write, as the current system expects us to upload data each time the socket have data to write, as the current system expects us to upload data each
is writable and there is no way to say that we want to upload data soon time the socket is writable and there is no way to say that we want to
just not right now, without that aborting the upload. upload data soon just not right now, without that aborting the upload. The
opposite situation should be possible as well, that we tell libcurl we're
ready to accept read data. Today libcurl feeds the data as soon as it is
available for reading, no matter what.
DOCUMENTATION DOCUMENTATION
@@ -70,6 +73,9 @@ TODO
FTP FTP
* Make CURLOPT_FTPPORT support an additional port number on the IP/if/name,
like "blabla:[port]" or possibly even "blabla:[portfirst]-[portsecond]".
* FTP ASCII upload does not follow RFC959 section 3.1.1.1: "The sender * FTP ASCII upload does not follow RFC959 section 3.1.1.1: "The sender
converts the data from an internal character representation to the standard converts the data from an internal character representation to the standard
8-bit NVT-ASCII representation (see the Telnet specification). The 8-bit NVT-ASCII representation (see the Telnet specification). The
@@ -81,20 +87,24 @@ TODO
* An option to only download remote FTP files if they're newer than the local * An option to only download remote FTP files if they're newer than the local
one is a good idea, and it would fit right into the same syntax as the one is a good idea, and it would fit right into the same syntax as the
already working http dito works. It of course requires that 'MDTM' works, already working http dito works (-z). It of course requires that 'MDTM'
and it isn't a standard FTP command. works, and it isn't a standard FTP command.
* Add FTPS support with SSL for the data connection too. This should be made * Add FTPS support with SSL for the data connection too. This should be made
according to the specs written in draft-murray-auth-ftp-ssl-08.txt, according to the specs written in draft-murray-auth-ftp-ssl-08.txt,
"Securing FTP with TLS" "Securing FTP with TLS"
* --disable-epsv exists, but for active connections we have no --disable-eprt
(or even --disable-lprt).
HTTP HTTP
* Pass a list of host name to libcurl to which we allow the user name and * If the "body" of the POST is < MSS it really aught to be sent along with
password to get sent to. Currently, it only get sent to the host name that the headers. More generally, if the last chunk of the POST body is < MSS,
the first URL uses (to prevent others from being able to read it), but this it should be sent with the previous chunk (which may be the POST headers).
also prevents the authentication info from getting sent when following So long as any one send is larger than MSS (or there is only one send when
locations to legitimate other host names. < MSS :), the Nagle Algorithm will not be a problem on any stack where
Nagle is implemented correctly. (pointed out by Rick Jones)
* Authentication: NTLM. Support for that MS crap called NTLM * Authentication: NTLM. Support for that MS crap called NTLM
authentication. MS proxies and servers sometime require that. Since that authentication. MS proxies and servers sometime require that. Since that
@@ -199,6 +209,9 @@ TODO
TEST SUITE TEST SUITE
* If perl wasn't found by the configure script, don't attempt to run the
tests but explain something nice why it doesn't.
* Extend the test suite to include more protocols. The telnet could just do * Extend the test suite to include more protocols. The telnet could just do
ftp or http operations (for which we have test servers). ftp or http operations (for which we have test servers).
@@ -206,3 +219,10 @@ TODO
fork()s and it should become even more portable. fork()s and it should become even more portable.
* Introduce a test suite that tests libcurl better and more explicitly. * Introduce a test suite that tests libcurl better and more explicitly.
NEXT MAJOR RELEASE
* curl_easy_cleanup() returns void, but curl_multi_cleanup() returns a
CURLMcode. These should be changed to be the same.
* curl_formparse() should be removed

View File

@@ -2,7 +2,7 @@
.\" nroff -man curl.1 .\" nroff -man curl.1
.\" Written by Daniel Stenberg .\" Written by Daniel Stenberg
.\" .\"
.TH curl 1 "11 Sep 2002" "Curl 7.10" "Curl Manual" .TH curl 1 "14 Feb 2003" "Curl 7.10.3" "Curl Manual"
.SH NAME .SH NAME
curl \- transfer a URL curl \- transfer a URL
.SH SYNOPSIS .SH SYNOPSIS
@@ -96,6 +96,10 @@ must be using valid ciphers. Read up on SSL cipher list details on this URL:
.I http://www.openssl.org/docs/apps/ciphers.html (Option added in curl 7.9) .I http://www.openssl.org/docs/apps/ciphers.html (Option added in curl 7.9)
If this option is used several times, the last one will override the others. If this option is used several times, the last one will override the others.
.IP "--compressed"
(HTTP) Request a compressed response using the deflate or gzip
algorithms and return the uncompressed document. If this option is used
and the server sends an unsupported encoding, Curl will report an error.
.IP "--connect-timeout <seconds>" .IP "--connect-timeout <seconds>"
Maximum time in seconds that you allow the connection to the server to take. Maximum time in seconds that you allow the connection to the server to take.
This only limits the connection phase, once curl has connected this option is This only limits the connection phase, once curl has connected this option is
@@ -110,6 +114,12 @@ no file will be written. The file will be written using the Netscape cookie
file format. If you set the file name to a single dash, "-", the cookies will file format. If you set the file name to a single dash, "-", the cookies will
be written to stdout. (Option added in curl 7.9) be written to stdout. (Option added in curl 7.9)
.B NOTE
If the cookie jar can't be created or written to, the whole curl operation
won't fail or even report an error clearly. Using -v will get a warning
displayed, but that is the only visible feedback you get about this possibly
lethal situation.
If this option is used several times, the last specfied file name will be If this option is used several times, the last specfied file name will be
used. used.
.IP "-C/--continue-at <offset>" .IP "-C/--continue-at <offset>"
@@ -122,7 +132,7 @@ Use "-C -" to tell curl to automatically find out where/how to resume the
transfer. It then uses the given output/input files to figure that out. transfer. It then uses the given output/input files to figure that out.
If this option is used several times, the last one will be used. If this option is used several times, the last one will be used.
.IP "---create-dirs" .IP "--create-dirs"
When used in conjunction with the -o option, curl will create the necessary When used in conjunction with the -o option, curl will create the necessary
local directory hierarchy as needed. local directory hierarchy as needed.
.IP "--crlf" .IP "--crlf"
@@ -217,14 +227,21 @@ If this option is used several times, the last one will be used.
peer. The file may contain multiple CA certificates. The certificate(s) must peer. The file may contain multiple CA certificates. The certificate(s) must
be in PEM format. be in PEM format.
curl recognizes the environment variable named 'CURL_CA_BUNDLE' if that is
set, and uses the given path as a path to a CA cert bundle. This option
overrides that variable.
The windows version of curl will automatically look for a CA certs file named
\'curl-ca-bundle.crt\', either in the same directory as curl.exe, or in the
Current Working Directory, or in any folder along your PATH.
If this option is used several times, the last one will be used. If this option is used several times, the last one will be used.
.IP "--capath <CA certificate directory>" .IP "--capath <CA certificate directory>"
(HTTPS) Tells curl to use the specified certificate directory to verify the (HTTPS) Tells curl to use the specified certificate directory to verify the
peer. The certificates must be in PEM format, and the directory must have been peer. The certificates must be in PEM format, and the directory must have been
processed using the c_rehash utility supplied with openssl. Certificate directories processed using the c_rehash utility supplied with openssl. Using --capath can
are not supported under Windows (because c_rehash uses symbolink links to allow curl to make https connections much more efficiently than using --cacert
create them). Using --capath can allow curl to make https connections much if the --cacert file contains many CA certificates.
more efficiently than using --cacert if the --cacert file contains many CA certificates.
If this option is used several times, the last one will be used. If this option is used several times, the last one will be used.
.IP "-f/--fail" .IP "-f/--fail"
@@ -249,12 +266,18 @@ Example, to send your password file to the server, where
\&'password' is the name of the form-field to which /etc/passwd will be the \&'password' is the name of the form-field to which /etc/passwd will be the
input: input:
.B curl \fBcurl\fP -F password=@/etc/passwd www.mypasswords.com
-F password=@/etc/passwd www.mypasswords.com
To read the file's content from stdin insted of a file, use - where the file To read the file's content from stdin insted of a file, use - where the file
name should've been. This goes for both @ and < constructs. name should've been. This goes for both @ and < constructs.
You can also tell curl what Content-Type to use for the file upload part, by
using 'type=', in a manner similar to:
\fBcurl\fP -F "web=@index.html;type=text/html" url.com
See further examples and details in the MANUAL.
This option can be used multiple times. This option can be used multiple times.
.IP "-g/--globoff" .IP "-g/--globoff"
This option switches off the "URL globbing parser". When you set this option, This option switches off the "URL globbing parser". When you set this option,
@@ -347,8 +370,8 @@ url = "http://curl.haxx.se/docs/"
This option can be used multiple times. This option can be used multiple times.
.IP "--limit-rate <speed>" .IP "--limit-rate <speed>"
Specify the maximum transfer rate you want curl to use. This feature is useful Specify the maximum transfer rate you want curl to use. This feature is useful
if you have a limited pipe and you'd prefer you have your transfer not use if you have a limited pipe and you'd like your transfer not use your entire
your entire bandwidth. bandwidth.
The given speed is measured in bytes/second, unless a suffix is The given speed is measured in bytes/second, unless a suffix is
appended. Appending 'k' or 'K' will count the number as kilobytes, 'm' or M' appended. Appending 'k' or 'K' will count the number as kilobytes, 'm' or M'
@@ -586,9 +609,9 @@ read for untrained humans.
If this option is used several times, the last one will be used. (Added in If this option is used several times, the last one will be used. (Added in
curl 7.9.7) curl 7.9.7)
.IP "-u/--user <user:password>" .IP "-u/--user <user:password>"
Specify user and password to use when fetching. See README.curl for detailed Specify user and password to use when fetching. Read the MANUAL for detailed
examples of how to use this. If no password is specified, curl will examples of how to use this. If no password is specified, curl will ask for it
ask for it interactively. interactively.
If this option is used several times, the last one will be used. If this option is used several times, the last one will be used.
.IP "-U/--proxy-user <user:password>" .IP "-U/--proxy-user <user:password>"
@@ -614,6 +637,9 @@ info provided by curl.
Note that if you want to see HTTP headers in the output, \fI-i/--include\fP Note that if you want to see HTTP headers in the output, \fI-i/--include\fP
might be option you're looking for. might be option you're looking for.
If you think this option still doesn't give you enough details, consider using
\fI--trace\fP or \fI--trace-ascii\fP instead.
If this option is used twice, the second will again disable verbose. If this option is used twice, the second will again disable verbose.
.IP "-V/--version" .IP "-V/--version"
Displays the full version of curl, libcurl and other 3rd party libraries Displays the full version of curl, libcurl and other 3rd party libraries
@@ -834,7 +860,8 @@ FTP write error. The transfer was reported bad by the server.
.IP 21 .IP 21
FTP quote error. A quote command returned error from the server. FTP quote error. A quote command returned error from the server.
.IP 22 .IP 22
HTTP not found. The requested page was not found. This return code only HTTP page not retrieved. The requested url was not found or returned another
error with the HTTP error code being 400 or above. This return code only
appears if --fail is used. appears if --fail is used.
.IP 23 .IP 23
Write error. Curl couldn't write data to a local filesystem or similar. Write error. Curl couldn't write data to a local filesystem or similar.

View File

@@ -22,10 +22,13 @@
#include <stdio.h> #include <stdio.h>
#include <string.h> #include <string.h>
#include <sys/time.h> #include <sys/time.h>
#include <stdlib.h>
#include <curl/curl.h> #include <curl/curl.h>
#include <curl/types.h>
#include <curl/easy.h> #if (LIBCURL_VERSION_NUM < 0x070907)
#error "too old libcurl version, get the latest!"
#endif
struct data { struct data {
int type; int type;
@@ -34,8 +37,8 @@ struct data {
FILE *file; FILE *file;
} handle; } handle;
/* TODO: We should perhaps document the biggest possible buffer chunk we can /* This is the documented biggest possible buffer chunk we can get from
get from libcurl in one single callback... */ libcurl in one single callback! */
char buffer[CURL_MAX_WRITE_SIZE]; char buffer[CURL_MAX_WRITE_SIZE];
char *readptr; /* read from here */ char *readptr; /* read from here */
@@ -62,6 +65,8 @@ size_t write_callback(char *buffer,
url->readptr += size; url->readptr += size;
url->bytes += size; url->bytes += size;
fprintf(stderr, "callback %d size bytes\n", size);
return size; return size;
} }
@@ -72,6 +77,7 @@ URL_FILE *url_fopen(char *url, char *operation)
URL_FILE *file; URL_FILE *file;
int still_running; int still_running;
(void)operation;
file = (URL_FILE *)malloc(sizeof(URL_FILE)); file = (URL_FILE *)malloc(sizeof(URL_FILE));
if(!file) if(!file)
@@ -134,47 +140,51 @@ size_t url_fread(void *ptr, size_t size, size_t nmemb, URL_FILE *file)
} }
} }
if(!still_running) { if(!still_running) {
printf("NO MORE RUNNING AROUND!\n"); printf("DONE RUNNING AROUND!\n");
return 0; return 0;
} }
} }
FD_ZERO(&fdread); do {
FD_ZERO(&fdwrite);
FD_ZERO(&fdexcep);
/* set a suitable timeout to fail on */ FD_ZERO(&fdread);
timeout.tv_sec = 500; /* 5 minutes */ FD_ZERO(&fdwrite);
timeout.tv_usec = 0; FD_ZERO(&fdexcep);
/* get file descriptors from the transfers */ /* set a suitable timeout to fail on */
curl_multi_fdset(multi_handle, &fdread, &fdwrite, &fdexcep, &maxfd); timeout.tv_sec = 500; /* 5 minutes */
timeout.tv_usec = 0;
rc = select(maxfd+1, &fdread, &fdwrite, &fdexcep, &timeout); /* get file descriptors from the transfers */
curl_multi_fdset(multi_handle, &fdread, &fdwrite, &fdexcep, &maxfd);
switch(rc) { rc = select(maxfd+1, &fdread, &fdwrite, &fdexcep, &timeout);
case -1:
/* select error */
break;
case 0:
break;
default:
/* timeout or readable/writable sockets */
do {
file->m = curl_multi_perform(multi_handle, &still_running);
if(file->bytes) switch(rc) {
/* we have received data, return that now */ case -1:
break; /* select error */
break;
case 0:
break;
default:
/* timeout or readable/writable sockets */
printf("select() returned %d!\n", rc);
do {
file->m = curl_multi_perform(multi_handle, &still_running);
} while(CURLM_CALL_MULTI_PERFORM == file->m); if(file->bytes)
/* we have received data, return that now */
break;
} while(CURLM_CALL_MULTI_PERFORM == file->m);
if(!still_running) if(!still_running)
printf("NO MORE RUNNING AROUND!\n"); printf("DONE RUNNING AROUND!\n");
break; break;
} }
} while(still_running && (file->bytes <= 0));
} }
else else
printf("(fread) Skip network read\n"); printf("(fread) Skip network read\n");
@@ -204,7 +214,10 @@ int main(int argc, char *argv[])
int nread; int nread;
char buffer[256]; char buffer[256];
handle = url_fopen("http://www.haxx.se", "r"); (void)argc;
(void)argv;
handle = url_fopen("http://curl.haxx.se/", "r");
if(!handle) { if(!handle) {
printf("couldn't url_fopen()\n"); printf("couldn't url_fopen()\n");

View File

@@ -11,6 +11,9 @@
#include <stdio.h> #include <stdio.h>
#include <curl/curl.h> #include <curl/curl.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
/* /*
* This example shows an FTP upload, with a rename of the file just after * This example shows an FTP upload, with a rename of the file just after

View File

@@ -74,6 +74,10 @@ int main(int argc, char **argv)
* bytes big and contains the remote file. * bytes big and contains the remote file.
* *
* Do something nice with it! * Do something nice with it!
*
* You should be aware of the fact that at this point we might have an
* allocated data block, and nothing has yet deallocated that data. So when
* you're done with it, you should free() it as a nice application.
*/ */
return 0; return 0;

View File

@@ -21,7 +21,7 @@
size_t write_data(void *ptr, size_t size, size_t nmemb, void *stream) size_t write_data(void *ptr, size_t size, size_t nmemb, void *stream)
{ {
written = fwrite(ptr, size, nmemb, (FILE *)stream); int written = fwrite(ptr, size, nmemb, (FILE *)stream);
return written; return written;
} }

View File

@@ -78,7 +78,8 @@ uploaded.
.TP .TP
.B CURLINFO_SIZE_DOWNLOAD .B CURLINFO_SIZE_DOWNLOAD
Pass a pointer to a double to receive the total amount of bytes that were Pass a pointer to a double to receive the total amount of bytes that were
downloaded. downloaded. The amount is only for the latest transfer and will be reset again
for each new transfer.
.TP .TP
.B CURLINFO_SPEED_DOWNLOAD .B CURLINFO_SPEED_DOWNLOAD
Pass a pointer to a double to receive the average download speed that curl Pass a pointer to a double to receive the average download speed that curl

View File

@@ -315,8 +315,16 @@ user.
.TP .TP
.B CURLOPT_USERPWD .B CURLOPT_USERPWD
Pass a char * as parameter, which should be [user name]:[password] to use for Pass a char * as parameter, which should be [user name]:[password] to use for
the connection. If the password is left out, you will be prompted for it. the connection. If both the colon and password is left out, you will be
\fICURLOPT_PASSWDFUNCTION\fP can be used to set your own prompt function. prompted for it while using a colon with no password will make libcurl use an
empty password. \fICURLOPT_PASSWDFUNCTION\fP can be used to set your own
prompt function.
When using HTTP and CURLOPT_FOLLOWLOCATION, libcurl might perform several
requests to possibly different hosts. libcurl will only send this user and
password information to hosts using the initial host name, so if libcurl
follows locations to other hosts it will not send the user and password to
those. This is enforced to prevent accidental information leakage.
.TP .TP
.B CURLOPT_PROXYUSERPWD .B CURLOPT_PROXYUSERPWD
Pass a char * as parameter, which should be [user name]:[password] to use for Pass a char * as parameter, which should be [user name]:[password] to use for
@@ -327,10 +335,18 @@ prompt function.
.SH HTTP OPTIONS .SH HTTP OPTIONS
.TP 0.4i .TP 0.4i
.B CURLOPT_ENCODING .B CURLOPT_ENCODING
Two encodings are supported \fIdentity\fP, which does nothing, and Sets the contents of the Accept-Encoding: header sent in an HTTP
\fIdeflate\fP to request the server to compress its reponse using the request, and enables decoding of a response when a Content-Encoding:
zlib algorithm. This is not an order, the server may or may not do it. header is received. Three encodings are supported: \fIidentity\fP,
See the special file lib/README.encoding for details. which does nothing, \fIdeflate\fP which requests the server to
compress its response using the zlib algorithm, and \fIgzip\fP which
requests the gzip algorithm. If a zero-length string is set, then an
Accept-Encoding: header containing all supported encodings is sent.
This is a request, not an order; the server may or may not do it. This
option must be set (to any non-NULL value) or else any unsolicited
encoding done by the server is ignored. See the special file
lib/README.encoding for details.
.TP .TP
.B CURLOPT_FOLLOWLOCATION .B CURLOPT_FOLLOWLOCATION
A non-zero parameter tells the library to follow any Location: header that the A non-zero parameter tells the library to follow any Location: header that the
@@ -341,6 +357,11 @@ new location and follow new Location: headers all the way until no more such
headers are returned. \fICURLOPT_MAXREDIRS\fP can be used to limit the number headers are returned. \fICURLOPT_MAXREDIRS\fP can be used to limit the number
of redirects libcurl will follow. of redirects libcurl will follow.
.TP .TP
.B CURLOPT_UNRESTRICTED_AUTH
A non-zero parameter tells the library it can continue to send authentication
(user+password) when following locations, even when hostname changed. Note
that this is meaningful only when setting \fICURLOPT_FOLLOWLOCATION\fP.
.TP
.B CURLOPT_MAXREDIRS .B CURLOPT_MAXREDIRS
Pass a long. The set number will be the redirection limit. If that many Pass a long. The set number will be the redirection limit. If that many
redirections have been followed, the next redirect will cause an error redirections have been followed, the next redirect will cause an error
@@ -361,9 +382,14 @@ will imply this option.
.TP .TP
.B CURLOPT_POSTFIELDS .B CURLOPT_POSTFIELDS
Pass a char * as parameter, which should be the full data to post in a HTTP Pass a char * as parameter, which should be the full data to post in a HTTP
post operation. This is a normal application/x-www-form-urlencoded kind, which post operation. You need to make sure that the data is formatted the way you
is the most commonly used one by HTML forms. See also the CURLOPT_POST. Since want the server to receive it. libcurl will not convert or encode it for
7.8, using CURLOPT_POSTFIELDS implies CURLOPT_POST. you. Most web servers will assume this data to be url-encoded. Take note.
This POST is a normal application/x-www-form-urlencoded kind (and libcurl will
set that Content-Type by default when this option is used), which is the most
commonly used one by HTML forms. See also the CURLOPT_POST. Using
CURLOPT_POSTFIELDS implies CURLOPT_POST.
\fBNote:\fP to make multipart/formdata posts (aka rfc1867-posts), check out \fBNote:\fP to make multipart/formdata posts (aka rfc1867-posts), check out
the \fICURLOPT_HTTPPOST\fP option. the \fICURLOPT_HTTPPOST\fP option.
@@ -460,6 +486,13 @@ is called. If no cookies are known, no file will be created. Specify "-" to
instead have the cookies written to stdout. Using this option also enables instead have the cookies written to stdout. Using this option also enables
cookies for this session, so if you for example follow a location it will make cookies for this session, so if you for example follow a location it will make
matching cookies get sent accordingly. (Added in 7.9) matching cookies get sent accordingly. (Added in 7.9)
.B NOTE
If the cookie jar file can't be created or written to (when the
curl_easy_cleanup() is called), libcurl will not and cannot report an error
for this. Using CURLOPT_VERBOSE or CURLOPT_DEBUGFUNCTION will get a warning to
display, but that is the only visible feedback you get about this possibly
lethal situation.
.TP .TP
.B CURLOPT_TIMECONDITION .B CURLOPT_TIMECONDITION
Pass a long as parameter. This defines how the CURLOPT_TIMEVALUE time value is Pass a long as parameter. This defines how the CURLOPT_TIMEVALUE time value is
@@ -502,6 +535,9 @@ tells the remote server to connect to our specified IP address. The string may
be a plain IP address, a host name, an network interface name (under Unix) or be a plain IP address, a host name, an network interface name (under Unix) or
just a '-' letter to let the library use your systems default IP just a '-' letter to let the library use your systems default IP
address. Default FTP operations are passive, and thus won't use PORT. address. Default FTP operations are passive, and thus won't use PORT.
You disable PORT again and go back to using the passive version by setting
this option to NULL.
.TP .TP
.B CURLOPT_QUOTE .B CURLOPT_QUOTE
Pass a pointer to a linked list of FTP commands to pass to the server prior to Pass a pointer to a linked list of FTP commands to pass to the server prior to
@@ -539,6 +575,13 @@ and symbolic links.
A non-zero parameter tells the library to append to the remote file instead of A non-zero parameter tells the library to append to the remote file instead of
overwrite it. This is only useful when uploading to a ftp site. overwrite it. This is only useful when uploading to a ftp site.
.TP .TP
.B CURLOPT_FTP_USE_EPRT
Pass a long. If the value is non-zero, it tells curl to use the EPRT (and
LPRT) command when doing active FTP downloads (which is enabled by
CURLOPT_FTPPORT). Using EPRT means that it will first attempt to use EPRT and
then LPRT before using PORT, but if you pass FALSE (zero) to this option, it
will not try using EPRT or LPRT, only plain PORT. (Added in 7.10.5)
.TP
.B CURLOPT_FTP_USE_EPSV .B CURLOPT_FTP_USE_EPSV
Pass a long. If the value is non-zero, it tells curl to use the EPSV command Pass a long. If the value is non-zero, it tells curl to use the EPSV command
when doing passive FTP downloads (which it always does by default). Using EPSV when doing passive FTP downloads (which it always does by default). Using EPSV

View File

@@ -1,6 +1,6 @@
.\" $Id$ .\" $Id$
.\" .\"
.TH curl_multi_info_read 3 "1 March 2002" "libcurl 7.9.5" "libcurl Manual" .TH curl_multi_info_read 3 "27 Feb 2002" "libcurl 7.10.3" "libcurl Manual"
.SH NAME .SH NAME
curl_multi_info_read - read multi stack informationals curl_multi_info_read - read multi stack informationals
.SH SYNOPSIS .SH SYNOPSIS
@@ -10,15 +10,15 @@ CURLMsg *curl_multi_info_read( CURLM *multi_handle,
int *msgs_in_queue); int *msgs_in_queue);
.ad .ad
.SH DESCRIPTION .SH DESCRIPTION
Ask the multi handle if there's any messages/informationals from the Ask the multi handle if there are any messages/informationals from the
individual transfers. Messages include informationals such as an error code individual transfers. Messages may include informationals such as an error
from the transfer or just the fact that a transfer is completed. More details code from the transfer or just the fact that a transfer is completed. More
on these should be written down as well. details on these should be written down as well.
Repeated calls to this function will return a new struct each time, until a Repeated calls to this function will return a new struct each time, until a
special "end of msgs" struct is returned as a signal that there is no more to NULL is returned as a signal that there is no more to get at this point. The
get at this point. The integer pointed to with \fImsgs_in_queue\fP will integer pointed to with \fImsgs_in_queue\fP will contain the number of
contain the number of remaining messages after this function was called. remaining messages after this function was called.
The data the returned pointer points to will not survive calling The data the returned pointer points to will not survive calling
curl_multi_cleanup(). curl_multi_cleanup().
@@ -26,10 +26,19 @@ curl_multi_cleanup().
The 'CURLMsg' struct is very simple and only contain very basic informations. The 'CURLMsg' struct is very simple and only contain very basic informations.
If more involved information is wanted, the particular "easy handle" in If more involved information is wanted, the particular "easy handle" in
present in that struct and can thus be used in subsequent regular present in that struct and can thus be used in subsequent regular
curl_easy_getinfo() calls (or similar). curl_easy_getinfo() calls (or similar):
struct CURLMsg {
CURLMSG msg; /* what this message means */
CURL *easy_handle; /* the handle it concerns */
union {
void *whatever; /* message-specific data */
CURLcode result; /* return code for transfer */
} data;
};
.SH "RETURN VALUE" .SH "RETURN VALUE"
A pointer to a filled-in struct, or NULL if it failed or ran out of A pointer to a filled-in struct, or NULL if it failed or ran out of
structs. It also writes the number of messages left in the queue (after this structs. It also writes the number of messages left in the queue (after this
read) in the integer the second argument points to. read) in the integer the second argument points to.
.SH "SEE ALSO" .SH "SEE ALSO"
.BR curl_multi_cleanup "(3)," curl_multi_init "(3)," curl_multi_perform "(3)" .BR curl_multi_cleanup "(3), " curl_multi_init "(3), " curl_multi_perform "(3)"

View File

@@ -14,6 +14,9 @@ specified easy handle be removed from this multi handle's control.
When the easy handle has been removed from a multi stack, it is again When the easy handle has been removed from a multi stack, it is again
perfectly legal to invoke \fIcurl_easy_perform()\fP on this easy handle. perfectly legal to invoke \fIcurl_easy_perform()\fP on this easy handle.
Removing a handle while being used, will effectively halt all transfers in
progress.
.SH RETURN VALUE .SH RETURN VALUE
CURLMcode type, general libcurl multi interface error code. CURLMcode type, general libcurl multi interface error code.
.SH "SEE ALSO" .SH "SEE ALSO"

View File

@@ -2,7 +2,7 @@
.\" nroff -man [file] .\" nroff -man [file]
.\" $Id$ .\" $Id$
.\" .\"
.TH curl_slist_append 3 "5 March 2001" "libcurl 7.0" "libcurl Manual" .TH curl_slist_append 3 "21 Feb 2003" "libcurl 7.10.4" "libcurl Manual"
.SH NAME .SH NAME
curl_slist_append - add a string to an slist curl_slist_append - add a string to an slist
.SH SYNOPSIS .SH SYNOPSIS
@@ -13,17 +13,26 @@ curl_slist_append - add a string to an slist
.ad .ad
.SH DESCRIPTION .SH DESCRIPTION
curl_slist_append() appends a specified string to a linked list of curl_slist_append() appends a specified string to a linked list of
strings. The existing strings. The existing \fIlist\fP should be passed as the first argument while
.I list the new list is returned from this function. The specified \fIstring\fP has
should be passed as the first argument while the new list is returned from been appended when this function returns.
this function. The specified
.I string The list should be freed again (after usage) with \fBcurl_slist_free_all()\fP.
has been appended when this function returns.
.SH RETURN VALUE .SH RETURN VALUE
A null pointer is returned if anything went wrong, otherwise the new list A null pointer is returned if anything went wrong, otherwise the new list
pointer is returned. pointer is returned.
.SH EXAMPLE
CURL handle;
curl_slist *slist=NULL;
slist = curl_slist_append(slist, "pragma:");
curl_easy_setopt(handle, CURLOPT_HTTPHEADER, slist);
curl_easy_perform(handle);
curl_slist_free_all(slist); /* free the list again */
.SH "SEE ALSO" .SH "SEE ALSO"
.BR curl_slist_free_all "(3), " .BR curl_slist_free_all "(3), "
.SH BUGS .SH BUGS
Surely there are some, you tell me! None.

View File

@@ -7,7 +7,7 @@
* | (__| |_| | _ <| |___ * | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____| * \___|\___/|_| \_\_____|
* *
* Copyright (C) 1998 - 2002, Daniel Stenberg, <daniel@haxx.se>, et al. * Copyright (C) 1998 - 2003, Daniel Stenberg, <daniel@haxx.se>, et al.
* *
* This software is licensed as described in the file COPYING, which * This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms * you should have received as part of this distribution. The terms
@@ -619,6 +619,16 @@ typedef enum {
/* Set aliases for HTTP 200 in the HTTP Response header */ /* Set aliases for HTTP 200 in the HTTP Response header */
CINIT(HTTP200ALIASES, OBJECTPOINT, 104), CINIT(HTTP200ALIASES, OBJECTPOINT, 104),
/* Continue to send authentication (user+password) when following locations,
even when hostname changed. This can potentionally send off the name
and password to whatever host the server decides. */
CINIT(UNRESTRICTED_AUTH, LONG, 105),
/* Specificly switch on or off the FTP engine's use of the EPRT command ( it
also disables the LPRT attempt). By default, those ones will always be
attempted before the good old traditional PORT command. */
CINIT(FTP_USE_EPRT, LONG, 106),
CURLOPT_LASTENTRY /* the last unused */ CURLOPT_LASTENTRY /* the last unused */
} CURLoption; } CURLoption;
@@ -696,8 +706,6 @@ typedef enum {
*/ */
extern int (curl_strequal)(const char *s1, const char *s2); extern int (curl_strequal)(const char *s1, const char *s2);
extern int (curl_strnequal)(const char *s1, const char *s2, size_t n); extern int (curl_strnequal)(const char *s1, const char *s2, size_t n);
#define strequal(a,b) curl_strequal(a,b)
#define strnequal(a,b,c) curl_strnequal(a,b,c)
/* DEPRECATED function to build formdata */ /* DEPRECATED function to build formdata */
int curl_formparse(char *, struct curl_httppost **, int curl_formparse(char *, struct curl_httppost **,
@@ -811,8 +819,8 @@ CURLcode curl_global_init(long flags);
void curl_global_cleanup(void); void curl_global_cleanup(void);
/* This is the version number */ /* This is the version number */
#define LIBCURL_VERSION "7.10.3" #define LIBCURL_VERSION "7.10.5"
#define LIBCURL_VERSION_NUM 0x070a03 #define LIBCURL_VERSION_NUM 0x070a05
/* linked-list structure for the CURLOPT_QUOTE option (and other) */ /* linked-list structure for the CURLOPT_QUOTE option (and other) */
struct curl_slist { struct curl_slist {
@@ -902,10 +910,15 @@ typedef enum {
/* Different data locks for a single share */ /* Different data locks for a single share */
typedef enum { typedef enum {
CURL_LOCK_DATA_NONE = 0, CURL_LOCK_DATA_NONE = 0,
CURL_LOCK_DATA_COOKIE = 1, /* CURL_LOCK_DATA_SHARE is used internaly to say that
CURL_LOCK_DATA_DNS = 2, * the locking is just made to change the internal state of the share
CURL_LOCK_DATA_SSL_SESSION = 3, * itself.
CURL_LOCK_DATA_CONNECT = 4, */
CURL_LOCK_DATA_SHARE,
CURL_LOCK_DATA_COOKIE,
CURL_LOCK_DATA_DNS,
CURL_LOCK_DATA_SSL_SESSION,
CURL_LOCK_DATA_CONNECT,
CURL_LOCK_DATA_LAST CURL_LOCK_DATA_LAST
} curl_lock_data; } curl_lock_data;

View File

@@ -7,7 +7,7 @@
* | (__| |_| | _ <| |___ * | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____| * \___|\___/|_| \_\_____|
* *
* Copyright (C) 1998 - 2002, Daniel Stenberg, <daniel@haxx.se>, et al. * Copyright (C) 1998 - 2003, Daniel Stenberg, <daniel@haxx.se>, et al.
* *
* This software is licensed as described in the file COPYING, which * This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms * you should have received as part of this distribution. The terms

View File

@@ -1,54 +1,25 @@
/************************************************************************* /***************************************************************************
* _ _ ____ _
* Project ___| | | | _ \| |
* / __| | | | |_) | |
* | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____|
*
* Copyright (C) 1998 - 2003, 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$
* ***************************************************************************/
* 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.
*
* THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR IMPLIED
* WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED WARRANTIES OF
* MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE AUTHORS AND
* CONTRIBUTORS ACCEPT NO RESPONSIBILITY IN ANY CONCEIVABLE MANNER.
*
*************************************************************************
*
* Preliminary documentation
*
* printf conversions:
*
* conversion ::= '%%' | '%' [position] ( number | float | string )
* position ::= digits '$'
* number ::= [number-flags] ( 'd' | 'i' | 'o' | 'x' | 'X' | 'u')
* number-flags ::= 'h' | 'l' | 'L' ...
* float ::= [float-flags] ( 'f' | 'e' | 'E' | 'g' | 'G' )
* string ::= [string-flags] 's'
* string-flags ::= padding | '#'
* digits ::= (digit)+
* digit ::= 0-9
*
* c
* p
* n
*
* qualifiers
*
* - : left adjustment
* + : show sign
* SPACE : padding
* # : alterative
* . : precision
* * : width
* 0 : padding / size
* 1-9 : size
* h : short
* l : long
* ll : longlong
* L : long double
* Z : long / longlong
* q : longlong
*
************************************************************************/
#ifndef H_MPRINTF #ifndef H_MPRINTF
#define H_MPRINTF #define H_MPRINTF

View File

@@ -7,7 +7,7 @@
* | (__| |_| | _ <| |___ * | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____| * \___|\___/|_| \_\_____|
* *
* Copyright (C) 1998 - 2002, Daniel Stenberg, <daniel@haxx.se>, et al. * Copyright (C) 1998 - 2003, Daniel Stenberg, <daniel@haxx.se>, et al.
* *
* This software is licensed as described in the file COPYING, which * This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms * you should have received as part of this distribution. The terms
@@ -44,19 +44,23 @@
o Enable the application to select() on its own file descriptors and curl's o Enable the application to select() on its own file descriptors and curl's
file descriptors simultaneous easily. file descriptors simultaneous easily.
Example sources using this interface is here: ../multi/
*/ */
#if defined(WIN32) && !defined(__GNUC__) || defined(__MINGW32__) #if defined(WIN32) && !defined(__GNUC__) || defined(__MINGW32__)
#include <winsock.h> #include <winsock.h>
#else #else
#include <sys/select.h>
#include <sys/socket.h> #include <sys/socket.h>
#include <sys/time.h> #include <sys/time.h>
#include <sys/types.h>
#endif #endif
#include "curl.h" #include "curl.h"
#ifdef __cplusplus
extern "C" {
#endif
typedef void CURLM; typedef void CURLM;
typedef enum { typedef enum {
@@ -71,7 +75,7 @@ typedef enum {
typedef enum { typedef enum {
CURLMSG_NONE, /* first, not used */ CURLMSG_NONE, /* first, not used */
CURLMSG_DONE, /* This easy handle has completed. 'whatever' points to CURLMSG_DONE, /* This easy handle has completed. 'result' contains
the CURLcode of the transfer */ the CURLcode of the transfer */
CURLMSG_LAST /* last, not used */ CURLMSG_LAST /* last, not used */
} CURLMSG; } CURLMSG;
@@ -187,4 +191,8 @@ CURLMcode curl_multi_cleanup(CURLM *multi_handle);
CURLMsg *curl_multi_info_read(CURLM *multi_handle, CURLMsg *curl_multi_info_read(CURLM *multi_handle,
int *msgs_in_queue); int *msgs_in_queue);
#ifdef __cplusplus
} /* end of extern "C" */
#endif
#endif #endif

View File

@@ -7,7 +7,7 @@
* | (__| |_| | _ <| |___ * | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____| * \___|\___/|_| \_\_____|
* *
* Copyright (C) 1998 - 2002, Daniel Stenberg, <daniel@haxx.se>, et al. * Copyright (C) 1998 - 2003, Daniel Stenberg, <daniel@haxx.se>, et al.
* *
* This software is licensed as described in the file COPYING, which * This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms * you should have received as part of this distribution. The terms

View File

@@ -7,7 +7,7 @@
* | (__| |_| | _ <| |___ * | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____| * \___|\___/|_| \_\_____|
* *
* Copyright (C) 1998 - 2002, Daniel Stenberg, <daniel@haxx.se>, et al. * Copyright (C) 1998 - 2003, Daniel Stenberg, <daniel@haxx.se>, et al.
* *
* This software is licensed as described in the file COPYING, which * This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms * you should have received as part of this distribution. The terms

View File

@@ -7,3 +7,4 @@ Makefile
config.h config.h
stamp-* stamp-*
ca-bundle.h ca-bundle.h
getdate.c

View File

@@ -66,7 +66,7 @@ getpass.c netrc.c telnet.h getinfo.c getinfo.h transfer.c strequal.c \
strequal.h easy.c security.h security.c krb4.c krb4.h memdebug.c \ strequal.h easy.c security.h security.c krb4.c krb4.h memdebug.c \
memdebug.h inet_ntoa_r.h http_chunks.c http_chunks.h strtok.c strtok.h \ memdebug.h inet_ntoa_r.h http_chunks.c http_chunks.h strtok.c strtok.h \
connect.c connect.h llist.c llist.h hash.c hash.h multi.c \ connect.c connect.h llist.c llist.h hash.c hash.h multi.c \
content_encoding.c content_encoding.h share.h content_encoding.c content_encoding.h share.c share.h
noinst_HEADERS = setup.h transfer.h noinst_HEADERS = setup.h transfer.h

View File

@@ -61,6 +61,7 @@ SOURCES = \
strtok.c \ strtok.c \
connect.c \ connect.c \
hash.c \ hash.c \
share.c \
llist.c \ llist.c \
multi.c \ multi.c \
content_encoding.c content_encoding.c

View File

@@ -30,6 +30,7 @@
+strtok.obj & +strtok.obj &
+connect.obj & +connect.obj &
+hash.obj & +hash.obj &
+share.obj &
+llist.obj & +llist.obj &
+multi.obj & +multi.obj &
+content_encoding.obj +content_encoding.obj

View File

@@ -12,8 +12,8 @@ AR = ar
RM = rm -f RM = rm -f
RANLIB = ranlib RANLIB = ranlib
STRIP = strip -g STRIP = strip -g
OPENSSL_PATH = ../../openssl-0.9.6g OPENSSL_PATH = ../../openssl-0.9.7a
ZLIB_PATH = ../../zlib-1.1.3 ZLIB_PATH = ../../zlib-1.1.4
######################################################## ########################################################
## Nothing more to do below this line! ## Nothing more to do below this line!
@@ -22,12 +22,12 @@ INCLUDES = -I. -I.. -I../include -I../src
CFLAGS = -g -O2 -DMINGW32 CFLAGS = -g -O2 -DMINGW32
ifdef SSL ifdef SSL
INCLUDES += -I"$(OPENSSL_PATH)/outinc" -I"$(OPENSSL_PATH)/outinc/openssl" INCLUDES += -I"$(OPENSSL_PATH)/outinc" -I"$(OPENSSL_PATH)/outinc/openssl"
CFLAGS += -DUSE_SSLEAY CFLAGS += -DUSE_SSLEAY -DHAVE_OPENSSL_ENGINE_H
DLL_LIBS = -L$(OPENSSL_PATH)/out -leay32 -lssl32 -lRSAglue DLL_LIBS = -L$(OPENSSL_PATH)/out -leay32 -lssl32
endif endif
ifdef ZLIB ifdef ZLIB
INCLUDES += -I"$(ZLIB_PATH)" INCLUDES += -I"$(ZLIB_PATH)"
CFLAGS += -DHAVE_ZLIB CFLAGS += -DHAVE_LIBZ -DHAVE_ZLIB_H
DLL_LIBS += -L$(ZLIB_PATH) -lz DLL_LIBS += -L$(ZLIB_PATH) -lz
endif endif
COMPILE = $(CC) $(INCLUDES) $(CFLAGS) COMPILE = $(CC) $(INCLUDES) $(CFLAGS)
@@ -42,7 +42,7 @@ libcurl_a_SOURCES = arpa_telnet.h file.c getpass.h netrc.h timeval.c base64.c \
ldap.h ssluse.h escape.c getenv.h mprintf.c telnet.c escape.h getpass.c netrc.c \ ldap.h ssluse.h escape.c getenv.h mprintf.c telnet.c escape.h getpass.c netrc.c \
telnet.h getinfo.c strequal.c strequal.h easy.c security.h \ telnet.h getinfo.c strequal.c strequal.h easy.c security.h \
security.c krb4.h krb4.c memdebug.h memdebug.c inet_ntoa_r.h http_chunks.h http_chunks.c \ security.c krb4.h krb4.c memdebug.h memdebug.c inet_ntoa_r.h http_chunks.h http_chunks.c \
strtok.c connect.c hash.c llist.c multi.c \ strtok.c connect.c hash.c llist.c multi.c share.c share.h\
content_encoding.h content_encoding.c content_encoding.h content_encoding.c
libcurl_a_OBJECTS = file.o timeval.o base64.o hostip.o progress.o \ libcurl_a_OBJECTS = file.o timeval.o base64.o hostip.o progress.o \
@@ -50,7 +50,7 @@ libcurl_a_OBJECTS = file.o timeval.o base64.o hostip.o progress.o \
speedcheck.o getdate.o transfer.o ldap.o ssluse.o version.o \ speedcheck.o getdate.o transfer.o ldap.o ssluse.o version.o \
getenv.o escape.o mprintf.o telnet.o getpass.o netrc.o getinfo.o \ getenv.o escape.o mprintf.o telnet.o getpass.o netrc.o getinfo.o \
strequal.o easy.o security.o krb4.o memdebug.o http_chunks.o \ strequal.o easy.o security.o krb4.o memdebug.o http_chunks.o \
strtok.o connect.o hash.o llist.o multi.o \ strtok.o connect.o hash.o llist.o multi.o share.o \
content_encoding.o content_encoding.o
LIBRARIES = $(libcurl_a_LIBRARIES) LIBRARIES = $(libcurl_a_LIBRARIES)

View File

@@ -33,7 +33,7 @@
LIB_NAME = libcurl LIB_NAME = libcurl
LIB_NAME_DEBUG = libcurld LIB_NAME_DEBUG = libcurld
!IFNDEF OPENSSL_PATH !IFNDEF OPENSSL_PATH
OPENSSL_PATH = ../../openssl-0.9.6 OPENSSL_PATH = ../../openssl-0.9.7a
!ENDIF !ENDIF
############################################################# #############################################################
@@ -48,7 +48,8 @@ LNKDLL = link.exe /DLL /def:libcurl.def
LNKLIB = link.exe -lib LNKLIB = link.exe -lib
LFLAGS = /nologo LFLAGS = /nologo
LINKLIBS = ws2_32.lib winmm.lib LINKLIBS = ws2_32.lib winmm.lib
SSLLIBS = libeay32.lib ssleay32.lib RSAglue.lib SSLLIBS = libeay32.lib ssleay32.lib
# RSAglue.lib was formerly needed in the SSLLIBS
CFGSET = FALSE CFGSET = FALSE
###################### ######################
@@ -200,6 +201,7 @@ X_OBJS= \
$(DIROBJ)\connect.obj \ $(DIROBJ)\connect.obj \
$(DIROBJ)\hash.obj \ $(DIROBJ)\hash.obj \
$(DIROBJ)\llist.obj \ $(DIROBJ)\llist.obj \
$(DIROBJ)\share.obj \
$(DIROBJ)\multi.obj $(DIROBJ)\multi.obj
all : $(TARGET) all : $(TARGET)

View File

@@ -5,15 +5,15 @@
HTTP/1.1 [RFC 2616] specifies that a client may request that a server encode HTTP/1.1 [RFC 2616] specifies that a client may request that a server encode
its response. This is usually used to compress a response using one of a set its response. This is usually used to compress a response using one of a set
of commonly available compression techniques. These schemes are `deflate' of commonly available compression techniques. These schemes are `deflate' (the
(the zlib algorithm), `gzip' and `compress' [sec 3.5, RFC 2616]. A client zlib algorithm), `gzip' and `compress' [sec 3.5, RFC 2616]. A client requests
requests that the sever perform an encoding by including an Accept-Encoding that the sever perform an encoding by including an Accept-Encoding header in
header in the request document. The value of the header should be one of the the request document. The value of the header should be one of the recognized
recognized tokens `deflate', ... (there's a way to register new tokens `deflate', ... (there's a way to register new schemes/tokens, see sec
schemes/tokens, see sec 3.5 of the spec). A server MAY honor the client's 3.5 of the spec). A server MAY honor the client's encoding request. When a
encoding request. When a response is encoded, the server includes a response is encoded, the server includes a Content-Encoding header in the
Content-Encoding header in the response. The value of the Content-Encoding response. The value of the Content-Encoding header indicates which scheme was
header indicates which scheme was used to encode the data. used to encode the data.
A client may tell a server that it can understand several different encoding A client may tell a server that it can understand several different encoding
schemes. In this case the server may choose any one of those and use it to schemes. In this case the server may choose any one of those and use it to
@@ -24,11 +24,10 @@ information on the Accept-Encoding header.
* Current support for content encoding: * Current support for content encoding:
I added support for the 'deflate' content encoding to both libcurl and curl. Support for the 'deflate' and 'gzip' content encoding are supported by
Both regular and chunked transfers should work although I've tested only the libcurl. Both regular and chunked transfers should work fine. The library
former. The library zlib is required for this feature. Places where I zlib is required for this feature. 'deflate' support was added by James
modified the source code are commented and typically include my initials and Gallagher, and support for the 'gzip' encoding was added by Dan Fandrich.
the date (e.g., 08/29/02 jhrg).
* The libcurl interface: * The libcurl interface:
@@ -39,11 +38,18 @@ To cause libcurl to request a content encoding use:
where <string> is the intended value of the Accept-Encoding header. where <string> is the intended value of the Accept-Encoding header.
Currently, libcurl only understands how to process responses that use the Currently, libcurl only understands how to process responses that use the
`deflate' Content-Encoding, so the only value for CURLOPT_ENCODING that will "deflate" or "gzip" Content-Encoding, so the only values for CURLOPT_ENCODING
work (besides "identity," which does nothing) is "deflate." If a response is that will work (besides "identity," which does nothing) are "deflate" and
encoded using either the `gzip' or `compress' methods, libcurl will return an "gzip" If a response is encoded using the "compress" or methods, libcurl will
error indicating that the response could not be decoded. If <string> is null return an error indicating that the response could not be decoded. If
or empty no Accept-Encoding header is generated. <string> is NULL no Accept-Encoding header is generated. If <string> is a
zero-length string, then an Accept-Encoding header containing all supported
encodings will be generated.
The CURLOPT_ENCODING must be set to any non-NULL value for content to be
automatically decoded. If it is not set and the server still sends encoded
content (despite not having been asked), the data is returned in its raw form
and the Content-Encoding type is not checked.
* The curl interface: * The curl interface:
@@ -51,3 +57,4 @@ Use the --compressed option with curl to cause it to ask servers to compress
responses using deflate. responses using deflate.
James Gallagher <jgallagher@gso.uri.edu> James Gallagher <jgallagher@gso.uri.edu>
Dan Fandrich <dan@coneharvesters.com>

View File

@@ -7,7 +7,7 @@
* | (__| |_| | _ <| |___ * | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____| * \___|\___/|_| \_\_____|
* *
* Copyright (C) 1998 - 2002, Daniel Stenberg, <daniel@haxx.se>, et al. * Copyright (C) 1998 - 2003, Daniel Stenberg, <daniel@haxx.se>, et al.
* *
* This software is licensed as described in the file COPYING, which * This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms * you should have received as part of this distribution. The terms
@@ -26,15 +26,15 @@
/* /*
* Telnet option defines. Add more here if in need. * Telnet option defines. Add more here if in need.
*/ */
#define TELOPT_BINARY 0 /* binary 8bit data */ #define CURL_TELOPT_BINARY 0 /* binary 8bit data */
#define TELOPT_SGA 3 /* Supress Go Ahead */ #define CURL_TELOPT_SGA 3 /* Supress Go Ahead */
#define TELOPT_EXOPL 255 /* EXtended OPtions List */ #define CURL_TELOPT_EXOPL 255 /* EXtended OPtions List */
#define TELOPT_TTYPE 24 /* Terminal TYPE */ #define CURL_TELOPT_TTYPE 24 /* Terminal TYPE */
#define TELOPT_XDISPLOC 35 /* X DISPlay LOCation */ #define CURL_TELOPT_XDISPLOC 35 /* X DISPlay LOCation */
#define TELOPT_NEW_ENVIRON 39 /* NEW ENVIRONment variables */ #define CURL_TELOPT_NEW_ENVIRON 39 /* NEW ENVIRONment variables */
#define NEW_ENV_VAR 0 #define CURL_NEW_ENV_VAR 0
#define NEW_ENV_VALUE 1 #define CURL_NEW_ENV_VALUE 1
/* /*
* The telnet options represented as strings * The telnet options represented as strings
@@ -53,27 +53,27 @@ static const char *telnetoptions[]=
"OLD-ENVIRON", "AUTHENTICATION", "ENCRYPT", "NEW-ENVIRON" "OLD-ENVIRON", "AUTHENTICATION", "ENCRYPT", "NEW-ENVIRON"
}; };
#define TELOPT_MAXIMUM TELOPT_NEW_ENVIRON #define CURL_TELOPT_MAXIMUM CURL_TELOPT_NEW_ENVIRON
#define TELOPT_OK(x) ((x) <= TELOPT_MAXIMUM) #define CURL_TELOPT_OK(x) ((x) <= CURL_TELOPT_MAXIMUM)
#define TELOPT(x) telnetoptions[x] #define CURL_TELOPT(x) telnetoptions[x]
#define NTELOPTS 40 #define CURL_NTELOPTS 40
/* /*
* First some defines * First some defines
*/ */
#define xEOF 236 /* End Of File */ #define CURL_xEOF 236 /* End Of File */
#define SE 240 /* Sub negotiation End */ #define CURL_SE 240 /* Sub negotiation End */
#define NOP 241 /* No OPeration */ #define CURL_NOP 241 /* No OPeration */
#define DM 242 /* Data Mark */ #define CURL_DM 242 /* Data Mark */
#define GA 249 /* Go Ahead, reverse the line */ #define CURL_GA 249 /* Go Ahead, reverse the line */
#define SB 250 /* SuBnegotiation */ #define CURL_SB 250 /* SuBnegotiation */
#define WILL 251 /* Our side WILL use this option */ #define CURL_WILL 251 /* Our side WILL use this option */
#define WONT 252 /* Our side WON'T use this option */ #define CURL_WONT 252 /* Our side WON'T use this option */
#define DO 253 /* DO use this option! */ #define CURL_DO 253 /* DO use this option! */
#define DONT 254 /* DON'T use this option! */ #define CURL_DONT 254 /* DON'T use this option! */
#define IAC 255 /* Interpret As Command */ #define CURL_IAC 255 /* Interpret As Command */
/* /*
* Then those numbers represented as strings: * Then those numbers represented as strings:
@@ -86,16 +86,16 @@ static const char *telnetcmds[]=
"WILL", "WONT", "DO", "DONT", "IAC" "WILL", "WONT", "DO", "DONT", "IAC"
}; };
#define TELCMD_MINIMUM xEOF /* the first one */ #define CURL_TELCMD_MINIMUM CURL_xEOF /* the first one */
#define TELCMD_MAXIMUM IAC /* surprise, 255 is the last one! ;-) */ #define CURL_TELCMD_MAXIMUM CURL_IAC /* surprise, 255 is the last one! ;-) */
#define TELQUAL_IS 0 #define CURL_TELQUAL_IS 0
#define TELQUAL_SEND 1 #define CURL_TELQUAL_SEND 1
#define TELQUAL_INFO 2 #define CURL_TELQUAL_INFO 2
#define TELQUAL_NAME 3 #define CURL_TELQUAL_NAME 3
#define TELCMD_OK(x) ( ((unsigned int)(x) >= TELCMD_MINIMUM) && \ #define CURL_TELCMD_OK(x) ( ((unsigned int)(x) >= CURL_TELCMD_MINIMUM) && \
((unsigned int)(x) <= TELCMD_MAXIMUM) ) ((unsigned int)(x) <= CURL_TELCMD_MAXIMUM) )
#define TELCMD(x) telnetcmds[(x)-TELCMD_MINIMUM] #define CURL_TELCMD(x) telnetcmds[(x)-CURL_TELCMD_MINIMUM]
#endif #endif
#endif #endif

View File

@@ -5,7 +5,7 @@
* | (__| |_| | _ <| |___ * | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____| * \___|\___/|_| \_\_____|
* *
* Copyright (C) 1998 - 2002, Daniel Stenberg, <daniel@haxx.se>, et al. * Copyright (C) 1998 - 2003, Daniel Stenberg, <daniel@haxx.se>, et al.
* *
* This software is licensed as described in the file COPYING, which * This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms * you should have received as part of this distribution. The terms
@@ -135,7 +135,7 @@ int Curl_base64_encode(const void *inp, int insize, char **outptr)
while(insize > 0) { while(insize > 0) {
for (i = inputparts = 0; i < 3; i++) { for (i = inputparts = 0; i < 3; i++) {
if(*indata) { if(insize > 0) {
inputparts++; inputparts++;
ibuf[i] = *indata; ibuf[i] = *indata;
indata++; indata++;
@@ -266,11 +266,3 @@ void *suck(int *lenptr)
return (void *)buf; return (void *)buf;
} }
#endif #endif
/*
* local variables:
* eval: (load-file "../curl-mode.el")
* end:
* vim600: fdm=marker
* vim: et sw=2 ts=2 sts=2 tw=78
*/

View File

@@ -7,7 +7,7 @@
* | (__| |_| | _ <| |___ * | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____| * \___|\___/|_| \_\_____|
* *
* Copyright (C) 1998 - 2002, Daniel Stenberg, <daniel@haxx.se>, et al. * Copyright (C) 1998 - 2003, Daniel Stenberg, <daniel@haxx.se>, et al.
* *
* This software is licensed as described in the file COPYING, which * This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms * you should have received as part of this distribution. The terms

View File

@@ -2287,82 +2287,6 @@ Certificate Ingredients:
ec:b9:94:6a:aa:12:4f:1a:dd:f5:77:b5:25:8c:f2:8a:0a:f1: ec:b9:94:6a:aa:12:4f:1a:dd:f5:77:b5:25:8c:f2:8a:0a:f1:
fc:52:5b:58 fc:52:5b:58
TC TrustCenter, Germany, Class 0 CA
===================================
MD5 Fingerprint: 35:85:49:8E:6E:57:FE:BD:97:F1:C9:46:23:3A:B6:7D
PEM Data:
-----BEGIN CERTIFICATE-----
MIIENTCCA56gAwIBAgIBATANBgkqhkiG9w0BAQQFADCBvDELMAkGA1UEBhMCREUx
EDAOBgNVBAgTB0hhbWJ1cmcxEDAOBgNVBAcTB0hhbWJ1cmcxOjA4BgNVBAoTMVRD
IFRydXN0Q2VudGVyIGZvciBTZWN1cml0eSBpbiBEYXRhIE5ldHdvcmtzIEdtYkgx
IjAgBgNVBAsTGVRDIFRydXN0Q2VudGVyIENsYXNzIDAgQ0ExKTAnBgkqhkiG9w0B
CQEWGmNlcnRpZmljYXRlQHRydXN0Y2VudGVyLmRlMB4XDTk4MDMwOTEzNTQ0OFoX
DTA1MTIzMTEzNTQ0OFowgbwxCzAJBgNVBAYTAkRFMRAwDgYDVQQIEwdIYW1idXJn
MRAwDgYDVQQHEwdIYW1idXJnMTowOAYDVQQKEzFUQyBUcnVzdENlbnRlciBmb3Ig
U2VjdXJpdHkgaW4gRGF0YSBOZXR3b3JrcyBHbWJIMSIwIAYDVQQLExlUQyBUcnVz
dENlbnRlciBDbGFzcyAwIENBMSkwJwYJKoZIhvcNAQkBFhpjZXJ0aWZpY2F0ZUB0
cnVzdGNlbnRlci5kZTCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEA333mvr/V
8C9tTg7R4I0LfztU6IrisJ8oxYrGubMzJ/UnyhpMVBJrtLJGsx1Ls/QhC0sCLqHC
NJyFoMR4EdvbaycrCSoYTkDMn3EZZ5l0onw/wdiLI8hjO4ohq1zeHvSN3LQYwwVz
9Gq0ofoBCCsBD203W6o4hmc51+Vf+uR+zKMCAwEAAaOCAUMwggE/MEAGCWCGSAGG
+EIBAwQzFjFodHRwczovL3d3dy50cnVzdGNlbnRlci5kZS9jZ2ktYmluL2NoZWNr
LXJldi5jZ2k/MEAGCWCGSAGG+EIBBAQzFjFodHRwczovL3d3dy50cnVzdGNlbnRl
ci5kZS9jZ2ktYmluL2NoZWNrLXJldi5jZ2k/MDwGCWCGSAGG+EIBBwQvFi1odHRw
czovL3d3dy50cnVzdGNlbnRlci5kZS9jZ2ktYmluL1JlbmV3LmNnaT8wPgYJYIZI
AYb4QgEIBDEWL2h0dHA6Ly93d3cudHJ1c3RjZW50ZXIuZGUvZ3VpZGVsaW5lcy9p
bmRleC5odG1sMCgGCWCGSAGG+EIBDQQbFhlUQyBUcnVzdENlbnRlciBDbGFzcyAw
IENBMBEGCWCGSAGG+EIBAQQEAwIABzANBgkqhkiG9w0BAQQFAAOBgQBNB39fCTAZ
kqoFR3qUdVQqrs/82AxC4UU4KySVssqHynnEw5eQXmIYxsk4YUxoNdNMFBHrxM2h
qdjFnmgnMgc1RQT4XyGgYB4cAEgEWNLFy65tMm49d5WMhcflrlCddUp7/wsneepN
pFn/7FrqJqU5g6TReM6nqX683SvKEpMDSg==
-----END CERTIFICATE-----
Certificate Ingredients:
Data:
Version: 3 (0x2)
Serial Number: 1 (0x1)
Signature Algorithm: md5WithRSAEncryption
Issuer: C=DE, ST=Hamburg, L=Hamburg, O=TC TrustCenter for Security in Data Networks GmbH, OU=TC TrustCenter Class 0 CA/Email=certificate@trustcenter.de
Validity
Not Before: Mar 9 13:54:48 1998 GMT
Not After : Dec 31 13:54:48 2005 GMT
Subject: C=DE, ST=Hamburg, L=Hamburg, O=TC TrustCenter for Security in Data Networks GmbH, OU=TC TrustCenter Class 0 CA/Email=certificate@trustcenter.de
Subject Public Key Info:
Public Key Algorithm: rsaEncryption
RSA Public Key: (1024 bit)
Modulus (1024 bit):
00:df:7d:e6:be:bf:d5:f0:2f:6d:4e:0e:d1:e0:8d:
0b:7f:3b:54:e8:8a:e2:b0:9f:28:c5:8a:c6:b9:b3:
33:27:f5:27:ca:1a:4c:54:12:6b:b4:b2:46:b3:1d:
4b:b3:f4:21:0b:4b:02:2e:a1:c2:34:9c:85:a0:c4:
78:11:db:db:6b:27:2b:09:2a:18:4e:40:cc:9f:71:
19:67:99:74:a2:7c:3f:c1:d8:8b:23:c8:63:3b:8a:
21:ab:5c:de:1e:f4:8d:dc:b4:18:c3:05:73:f4:6a:
b4:a1:fa:01:08:2b:01:0f:6d:37:5b:aa:38:86:67:
39:d7:e5:5f:fa:e4:7e:cc:a3
Exponent: 65537 (0x10001)
X509v3 extensions:
Netscape Revocation Url:
https://www.trustcenter.de/cgi-bin/check-rev.cgi?
Netscape CA Revocation Url:
https://www.trustcenter.de/cgi-bin/check-rev.cgi?
Netscape Renewal Url:
https://www.trustcenter.de/cgi-bin/Renew.cgi?
Netscape CA Policy Url:
http://www.trustcenter.de/guidelines/index.html
Netscape Comment:
TC TrustCenter Class 0 CA
Netscape Cert Type:
SSL CA, S/MIME CA, Object Signing CA
Signature Algorithm: md5WithRSAEncryption
4d:07:7f:5f:09:30:19:92:aa:05:47:7a:94:75:54:2a:ae:cf:
fc:d8:0c:42:e1:45:38:2b:24:95:b2:ca:87:ca:79:c4:c3:97:
90:5e:62:18:c6:c9:38:61:4c:68:35:d3:4c:14:11:eb:c4:cd:
a1:a9:d8:c5:9e:68:27:32:07:35:45:04:f8:5f:21:a0:60:1e:
1c:00:48:04:58:d2:c5:cb:ae:6d:32:6e:3d:77:95:8c:85:c7:
e5:ae:50:9d:75:4a:7b:ff:0b:27:79:ea:4d:a4:59:ff:ec:5a:
ea:26:a5:39:83:a4:d1:78:ce:a7:a9:7e:bc:dd:2b:ca:12:93:
03:4a
TC TrustCenter, Germany, Class 1 CA TC TrustCenter, Germany, Class 1 CA
=================================== ===================================
MD5 Fingerprint: 64:3F:F8:3E:52:14:4A:59:BA:93:56:04:0B:23:02:D1 MD5 Fingerprint: 64:3F:F8:3E:52:14:4A:59:BA:93:56:04:0B:23:02:D1

View File

@@ -369,3 +369,13 @@
/* Define if you have the `sigsetjmp' function. */ /* Define if you have the `sigsetjmp' function. */
#define HAVE_SIGSETJMP 1 #define HAVE_SIGSETJMP 1
/* Define to 1 if you have the <setjmp.h> header file. */
#define HAVE_SETJMP_H 1
/*
* This needs to be defined for OpenSSL 0.9.7 and other versions that have the
* ENGINE stuff supported. If an include of "openssl/engine.h" fails, then
* undefine the define below.
*/
#define HAVE_OPENSSL_ENGINE_H 1

View File

@@ -5,7 +5,7 @@
* | (__| |_| | _ <| |___ * | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____| * \___|\___/|_| \_\_____|
* *
* Copyright (C) 1998 - 2002, Daniel Stenberg, <daniel@haxx.se>, et al. * Copyright (C) 1998 - 2003, Daniel Stenberg, <daniel@haxx.se>, et al.
* *
* This software is licensed as described in the file COPYING, which * This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms * you should have received as part of this distribution. The terms
@@ -81,8 +81,7 @@
#include "memdebug.h" #include "memdebug.h"
#endif #endif
static int Curl_ourerrno(void)
int geterrno(void)
{ {
#ifdef WIN32 #ifdef WIN32
return (int)GetLastError(); return (int)GetLastError();
@@ -144,7 +143,11 @@ int Curl_nonblock(int socket, /* operate on this */
} }
/* /*
* Return 0 on fine connect, -1 on error and 1 on timeout. * waitconnect() returns:
* 0 fine connect
* -1 select() error
* 1 select() timeout
* 2 select() returned with an error condition
*/ */
static static
int waitconnect(int sockfd, /* socket */ int waitconnect(int sockfd, /* socket */
@@ -194,10 +197,6 @@ static CURLcode bindlocal(struct connectdata *conn,
#ifdef HAVE_INET_NTOA #ifdef HAVE_INET_NTOA
#ifndef INADDR_NONE
#define INADDR_NONE (in_addr_t) ~0
#endif
struct SessionHandle *data = conn->data; struct SessionHandle *data = conn->data;
/************************************************************* /*************************************************************
@@ -210,7 +209,11 @@ static CURLcode bindlocal(struct connectdata *conn,
char myhost[256] = ""; char myhost[256] = "";
in_addr_t in; in_addr_t in;
if(Curl_if2ip(data->set.device, myhost, sizeof(myhost))) { /* First check if the given name is an IP address */
in=inet_addr(data->set.device);
if((in == CURL_INADDR_NONE) &&
Curl_if2ip(data->set.device, myhost, sizeof(myhost))) {
/* /*
* We now have the numerical IPv4-style x.y.z.w in the 'myhost' buffer * We now have the numerical IPv4-style x.y.z.w in the 'myhost' buffer
*/ */
@@ -243,22 +246,31 @@ static CURLcode bindlocal(struct connectdata *conn,
infof(data, "We bind local end to %s\n", myhost); infof(data, "We bind local end to %s\n", myhost);
in=inet_addr(myhost); in=inet_addr(myhost);
if (INADDR_NONE != in) { if (CURL_INADDR_NONE != in) {
if ( h ) { if ( h ) {
Curl_addrinfo *addr = h->addr; Curl_addrinfo *addr = h->addr;
Curl_resolv_unlock(h); Curl_resolv_unlock(data, h);
/* we don't need it anymore after this function has returned */ /* we don't need it anymore after this function has returned */
memset((char *)&sa, 0, sizeof(sa));
#ifdef ENABLE_IPV6 #ifdef ENABLE_IPV6
memcpy((char *)&sa.sin_addr, addr->ai_addr, addr->ai_addrlen); (void)sa; /* prevent compiler warning */
sa.sin_family = addr->ai_family; if( bind(sockfd, addr->ai_addr, addr->ai_addrlen) >= 0) {
/* we succeeded to bind */
struct sockaddr_in6 add;
size = sizeof(add);
if(getsockname(sockfd, (struct sockaddr *) &add,
(socklen_t *)&size)<0) {
failf(data, "getsockname() failed");
return CURLE_HTTP_PORT_FAILED;
}
}
#else #else
memset((char *)&sa, 0, sizeof(sa));
memcpy((char *)&sa.sin_addr, addr->h_addr, addr->h_length); memcpy((char *)&sa.sin_addr, addr->h_addr, addr->h_length);
sa.sin_family = AF_INET; sa.sin_family = AF_INET;
#endif
sa.sin_addr.s_addr = in; sa.sin_addr.s_addr = in;
sa.sin_port = 0; /* get any port */ sa.sin_port = 0; /* get any port */
@@ -273,6 +285,7 @@ static CURLcode bindlocal(struct connectdata *conn,
return CURLE_HTTP_PORT_FAILED; return CURLE_HTTP_PORT_FAILED;
} }
} }
#endif
else { else {
switch(errno) { switch(errno) {
case EBADF: case EBADF:
@@ -336,7 +349,7 @@ int socketerror(int sockfd)
if( -1 == getsockopt(sockfd, SOL_SOCKET, SO_ERROR, if( -1 == getsockopt(sockfd, SOL_SOCKET, SO_ERROR,
(void *)&err, &errSize)) (void *)&err, &errSize))
err = geterrno(); err = Curl_ourerrno();
return err; return err;
} }
@@ -396,10 +409,15 @@ CURLcode Curl_is_connected(struct connectdata *conn,
return CURLE_OK; return CURLE_OK;
} }
/* nope, not connected for real */ /* nope, not connected for real */
if(err) failf(data, "Connection failed, socket error: %d", err);
return CURLE_COULDNT_CONNECT; return CURLE_COULDNT_CONNECT;
}
else if(1 != rc) {
int error = Curl_ourerrno();
failf(data, "Failed connect to %s:%d, errno: %d",
conn->hostname, conn->port, error);
return CURLE_COULDNT_CONNECT;
} }
/* /*
* If the connection phase is "done" here, we should attempt to connect * If the connection phase is "done" here, we should attempt to connect
* to the "next address" in the Curl_hostaddr structure that we resolved * to the "next address" in the Curl_hostaddr structure that we resolved
@@ -507,7 +525,7 @@ CURLcode Curl_connecthost(struct connectdata *conn, /* context */
rc = connect(sockfd, ai->ai_addr, ai->ai_addrlen); rc = connect(sockfd, ai->ai_addr, ai->ai_addrlen);
if(-1 == rc) { if(-1 == rc) {
int error=geterrno(); int error=Curl_ourerrno();
switch (error) { switch (error) {
case EINPROGRESS: case EINPROGRESS:
@@ -548,6 +566,9 @@ CURLcode Curl_connecthost(struct connectdata *conn, /* context */
failf(data, "socket error: %d", err); failf(data, "socket error: %d", err);
/* we are _not_ connected, it was a false alert, continue please */ /* we are _not_ connected, it was a false alert, continue please */
} }
else if(2 == rc)
/* waitconnect() returned error */
;
else if(data->state.used_interface == Curl_if_multi) { else if(data->state.used_interface == Curl_if_multi) {
/* When running the multi interface, we bail out here */ /* When running the multi interface, we bail out here */
rc = 0; rc = 0;
@@ -623,7 +644,7 @@ CURLcode Curl_connecthost(struct connectdata *conn, /* context */
sizeof(serv_addr)); sizeof(serv_addr));
if(-1 == rc) { if(-1 == rc) {
int error=geterrno(); int error=Curl_ourerrno();
switch (error) { switch (error) {
case EINPROGRESS: case EINPROGRESS:

View File

@@ -7,7 +7,7 @@
* | (__| |_| | _ <| |___ * | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____| * \___|\___/|_| \_\_____|
* *
* Copyright (C) 1998 - 2002, Daniel Stenberg, <daniel@haxx.se>, et al. * Copyright (C) 1998 - 2003, Daniel Stenberg, <daniel@haxx.se>, et al.
* *
* This software is licensed as described in the file COPYING, which * This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms * you should have received as part of this distribution. The terms
@@ -37,4 +37,6 @@ CURLcode Curl_connecthost(struct connectdata *conn,
Curl_ipconnect **addr, /* the one we used */ Curl_ipconnect **addr, /* the one we used */
bool *connected /* truly connected? */ bool *connected /* truly connected? */
); );
int Curl_ourerrno(void);
#endif #endif

View File

@@ -5,7 +5,7 @@
* | (__| |_| | _ <| |___ * | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____| * \___|\___/|_| \_\_____|
* *
* Copyright (C) 1998 - 2002, Daniel Stenberg, <daniel@haxx.se>, et al. * Copyright (C) 1998 - 2003, Daniel Stenberg, <daniel@haxx.se>, et al.
* *
* This software is licensed as described in the file COPYING, which * This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms * you should have received as part of this distribution. The terms
@@ -25,13 +25,26 @@
#ifdef HAVE_LIBZ #ifdef HAVE_LIBZ
#include <stdlib.h>
#include <string.h>
#include "urldata.h" #include "urldata.h"
#include <curl/curl.h> #include <curl/curl.h>
#include <curl/types.h> #include <curl/types.h>
#include "sendf.h" #include "sendf.h"
#define DSIZ 4096 /* buffer size for decompressed data */ #define DSIZ 0x10000 /* buffer size for decompressed data */
#define GZIP_MAGIC_0 0x1f
#define GZIP_MAGIC_1 0x8b
/* gzip flag byte */
#define ASCII_FLAG 0x01 /* bit 0 set: file probably ascii text */
#define HEAD_CRC 0x02 /* bit 1 set: header CRC present */
#define EXTRA_FIELD 0x04 /* bit 2 set: extra field present */
#define ORIG_NAME 0x08 /* bit 3 set: original file name present */
#define COMMENT 0x10 /* bit 4 set: file comment present */
#define RESERVED 0xE0 /* bits 5..7: reserved */
static CURLcode static CURLcode
process_zlib_error(struct SessionHandle *data, z_stream *z) process_zlib_error(struct SessionHandle *data, z_stream *z)
@@ -74,7 +87,7 @@ Curl_unencode_deflate_write(struct SessionHandle *data,
k->zlib_init = 1; k->zlib_init = 1;
} }
/* Set the compressed input when this fucntion is called */ /* Set the compressed input when this function is called */
z->next_in = (Bytef *)k->str; z->next_in = (Bytef *)k->str;
z->avail_in = nread; z->avail_in = nread;
@@ -87,11 +100,12 @@ Curl_unencode_deflate_write(struct SessionHandle *data,
status = inflate(z, Z_SYNC_FLUSH); status = inflate(z, Z_SYNC_FLUSH);
if (status == Z_OK || status == Z_STREAM_END) { if (status == Z_OK || status == Z_STREAM_END) {
result = Curl_client_write(data, CLIENTWRITE_BODY, decomp, if (DSIZ - z->avail_out) {
DSIZ - z->avail_out); result = Curl_client_write(data, CLIENTWRITE_BODY, decomp,
/* if !CURLE_OK, clean up, return */ DSIZ - z->avail_out);
if (result) { /* if !CURLE_OK, clean up, return */
return exit_zlib(z, &k->zlib_init, result); if (result)
return exit_zlib(z, &k->zlib_init, result);
} }
/* Done?; clean up, return */ /* Done?; clean up, return */
@@ -111,12 +125,230 @@ Curl_unencode_deflate_write(struct SessionHandle *data,
} }
} }
} }
#endif /* HAVE_LIBZ */
/* /* Skip over the gzip header */
* local variables: static enum {
* eval: (load-file "../curl-mode.el") GZIP_OK,
* end: GZIP_BAD,
* vim600: fdm=marker GZIP_UNDERFLOW
* vim: et sw=2 ts=2 sts=2 tw=78 } check_gzip_header(unsigned char const *data, ssize_t len, ssize_t *headerlen)
*/ {
int method, flags;
const ssize_t totallen = len;
/* The shortest header is 10 bytes */
if (len < 10)
return GZIP_UNDERFLOW;
if ((data[0] != GZIP_MAGIC_0) || (data[1] != GZIP_MAGIC_1))
return GZIP_BAD;
method = data[2];
flags = data[3];
if (method != Z_DEFLATED || (flags & RESERVED) != 0) {
/* Can't handle this compression method or unknown flag */
return GZIP_BAD;
}
/* Skip over time, xflags, OS code and all previous bytes */
len -= 10;
data += 10;
if (flags & EXTRA_FIELD) {
ssize_t extra_len;
if (len < 2)
return GZIP_UNDERFLOW;
extra_len = (data[1] << 8) | data[0];
if (len < (extra_len+2))
return GZIP_UNDERFLOW;
len -= (extra_len + 2);
}
if (flags & ORIG_NAME) {
/* Skip over NUL-terminated file name */
while (len && *data) {
--len;
++data;
}
if (!len || *data)
return GZIP_UNDERFLOW;
/* Skip over the NUL */
--len;
++data;
}
if (flags & COMMENT) {
/* Skip over NUL-terminated comment */
while (len && *data) {
--len;
++data;
}
if (!len || *data)
return GZIP_UNDERFLOW;
/* Skip over the NUL */
--len;
++data;
}
if (flags & HEAD_CRC) {
if (len < 2)
return GZIP_UNDERFLOW;
len -= 2;
data += 2;
}
*headerlen = totallen - len;
return GZIP_OK;
}
CURLcode
Curl_unencode_gzip_write(struct SessionHandle *data,
struct Curl_transfer_keeper *k,
ssize_t nread)
{
int status; /* zlib status */
int result; /* Curl_client_write status */
char decomp[DSIZ]; /* Put the decompressed data here. */
z_stream *z = &k->z; /* zlib state structure */
/* Initialize zlib? */
if (!k->zlib_init) {
z->zalloc = (alloc_func)Z_NULL;
z->zfree = (free_func)Z_NULL;
z->opaque = 0; /* of dubious use 08/27/02 jhrg */
if (inflateInit2(z, -MAX_WBITS) != Z_OK)
return process_zlib_error(data, z);
k->zlib_init = 1; /* Initial call state */
}
/* This next mess is to get around the potential case where there isn't
enough data passed in to skip over the gzip header. If that happens,
we malloc a block and copy what we have then wait for the next call. If
there still isn't enough (this is definitely a worst-case scenario), we
make the block bigger, copy the next part in and keep waiting. */
/* Skip over gzip header? */
if (k->zlib_init == 1) {
/* Initial call state */
ssize_t hlen;
switch (check_gzip_header((unsigned char *)k->str, nread, &hlen)) {
case GZIP_OK:
z->next_in = (Bytef *)k->str + hlen;
z->avail_in = nread - hlen;
k->zlib_init = 3; /* Inflating stream state */
break;
case GZIP_UNDERFLOW:
/* We need more data so we can find the end of the gzip header.
It's possible that the memory block we malloc here will never be
freed if the transfer abruptly aborts after this point. Since it's
unlikely that circumstances will be right for this code path to be
followed in the first place, and it's even more unlikely for a transfer
to fail immediately afterwards, it should seldom be a problem. */
z->avail_in = nread;
z->next_in = malloc(z->avail_in);
if (z->next_in == NULL) {
return exit_zlib(z, &k->zlib_init, CURLE_OUT_OF_MEMORY);
}
memcpy(z->next_in, k->str, z->avail_in);
k->zlib_init = 2; /* Need more gzip header data state */
/* We don't have any data to inflate yet */
return CURLE_OK;
case GZIP_BAD:
default:
return exit_zlib(z, &k->zlib_init, process_zlib_error(data, z));
}
}
else if (k->zlib_init == 2) {
/* Need more gzip header data state */
ssize_t hlen;
unsigned char *oldblock = z->next_in;
z->avail_in += nread;
z->next_in = realloc(z->next_in, z->avail_in);
if (z->next_in == NULL) {
free(oldblock);
return exit_zlib(z, &k->zlib_init, CURLE_OUT_OF_MEMORY);
}
/* Append the new block of data to the previous one */
memcpy(z->next_in + z->avail_in - nread, k->str, nread);
switch (check_gzip_header(z->next_in, z->avail_in, &hlen)) {
case GZIP_OK:
/* This is the zlib stream data */
free(z->next_in);
/* Don't point into the malloced block since we just freed it */
z->next_in = (Bytef *)k->str + hlen + nread - z->avail_in;
z->avail_in = z->avail_in - hlen;
k->zlib_init = 3; /* Inflating stream state */
break;
case GZIP_UNDERFLOW:
/* We still don't have any data to inflate! */
return CURLE_OK;
case GZIP_BAD:
default:
free(z->next_in);
return exit_zlib(z, &k->zlib_init, process_zlib_error(data, z));
}
}
else {
/* Inflating stream state */
z->next_in = (Bytef *)k->str;
z->avail_in = nread;
}
if (z->avail_in == 0) {
/* We don't have any data to inflate; wait until next time */
return CURLE_OK;
}
/* because the buffer size is fixed, iteratively decompress
and transfer to the client via client_write. */
for (;;) {
/* (re)set buffer for decompressed output for every iteration */
z->next_out = (Bytef *)&decomp[0];
z->avail_out = DSIZ;
status = inflate(z, Z_SYNC_FLUSH);
if (status == Z_OK || status == Z_STREAM_END) {
if(DSIZ - z->avail_out) {
result = Curl_client_write(data, CLIENTWRITE_BODY, decomp,
DSIZ - z->avail_out);
/* if !CURLE_OK, clean up, return */
if (result)
return exit_zlib(z, &k->zlib_init, result);
}
/* Done?; clean up, return */
/* We should really check the gzip CRC here */
if (status == Z_STREAM_END) {
if (inflateEnd(z) == Z_OK)
return exit_zlib(z, &k->zlib_init, result);
else
return exit_zlib(z, &k->zlib_init, process_zlib_error(data, z));
}
/* Done with these bytes, exit */
if (status == Z_OK && z->avail_in == 0 && z->avail_out > 0)
return result;
}
else { /* Error; exit loop, handle below */
return exit_zlib(z, &k->zlib_init, process_zlib_error(data, z));
}
}
}
#endif /* HAVE_LIBZ */

View File

@@ -5,7 +5,7 @@
* | (__| |_| | _ <| |___ * | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____| * \___|\___/|_| \_\_____|
* *
* Copyright (C) 1998 - 2002, Daniel Stenberg, <daniel@haxx.se>, et al. * Copyright (C) 1998 - 2003, Daniel Stenberg, <daniel@haxx.se>, et al.
* *
* This software is licensed as described in the file COPYING, which * This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms * you should have received as part of this distribution. The terms
@@ -20,15 +20,22 @@
* *
* $Id$ * $Id$
***************************************************************************/ ***************************************************************************/
#include "setup.h"
/*
* Comma-separated list all supported Content-Encodings ('identity' is implied)
*/
#ifdef HAVE_LIBZ
#define ALL_CONTENT_ENCODINGS "deflate, gzip"
#else
#define ALL_CONTENT_ENCODINGS "identity"
#endif
CURLcode Curl_unencode_deflate_write(struct SessionHandle *data, CURLcode Curl_unencode_deflate_write(struct SessionHandle *data,
struct Curl_transfer_keeper *k, struct Curl_transfer_keeper *k,
ssize_t nread); ssize_t nread);
/* CURLcode
* local variables: Curl_unencode_gzip_write(struct SessionHandle *data,
* eval: (load-file "../curl-mode.el") struct Curl_transfer_keeper *k,
* end: ssize_t nread);
* vim600: fdm=marker
* vim: et sw=2 ts=2 sts=2 tw=78
*/

View File

@@ -5,7 +5,7 @@
* | (__| |_| | _ <| |___ * | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____| * \___|\___/|_| \_\_____|
* *
* Copyright (C) 1998 - 2002, Daniel Stenberg, <daniel@haxx.se>, et al. * Copyright (C) 1998 - 2003, Daniel Stenberg, <daniel@haxx.se>, et al.
* *
* This software is licensed as described in the file COPYING, which * This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms * you should have received as part of this distribution. The terms
@@ -77,6 +77,7 @@ Example set of cookies:
13-Jun-1988 03:04:55 GMT; domain=.fidelity.com; path=/; secure 13-Jun-1988 03:04:55 GMT; domain=.fidelity.com; path=/; secure
****/ ****/
#include "setup.h" #include "setup.h"
#ifndef CURL_DISABLE_HTTP #ifndef CURL_DISABLE_HTTP
@@ -110,6 +111,17 @@ free_cookiemess(struct Cookie *co)
free(co); free(co);
} }
static bool tailmatch(const char *little, const char *bigone)
{
unsigned int littlelen = strlen(little);
unsigned int biglen = strlen(bigone);
if(littlelen > biglen)
return FALSE;
return strequal(little, bigone+biglen-littlelen);
}
/**************************************************************************** /****************************************************************************
* *
* Curl_cookie_add() * Curl_cookie_add()
@@ -122,7 +134,10 @@ struct Cookie *
Curl_cookie_add(struct CookieInfo *c, Curl_cookie_add(struct CookieInfo *c,
bool httpheader, /* TRUE if HTTP header-style line */ bool httpheader, /* TRUE if HTTP header-style line */
char *lineptr, /* first character of the line */ char *lineptr, /* first character of the line */
char *domain) /* default domain */ char *domain, /* default domain */
char *path) /* full path used when this cookie is set,
used to get default path for the cookie
unless set */
{ {
struct Cookie *clist; struct Cookie *clist;
char what[MAX_COOKIE_LINE]; char what[MAX_COOKIE_LINE];
@@ -133,6 +148,7 @@ Curl_cookie_add(struct CookieInfo *c,
struct Cookie *lastc=NULL; struct Cookie *lastc=NULL;
time_t now = time(NULL); time_t now = time(NULL);
bool replace_old = FALSE; bool replace_old = FALSE;
bool badcookie = FALSE; /* cookies are good by default. mmmmm yummy */
/* First, alloc and init a new struct for it */ /* First, alloc and init a new struct for it */
co = (struct Cookie *)malloc(sizeof(struct Cookie)); co = (struct Cookie *)malloc(sizeof(struct Cookie));
@@ -185,8 +201,63 @@ Curl_cookie_add(struct CookieInfo *c,
co->path=strdup(whatptr); co->path=strdup(whatptr);
} }
else if(strequal("domain", name)) { else if(strequal("domain", name)) {
co->domain=strdup(whatptr); /* note that this name may or may not have a preceeding dot, but
co->field1= (whatptr[0]=='.')?2:1; we don't care about that, we treat the names the same anyway */
char *ptr=whatptr;
int dotcount=1;
unsigned int i;
static const char *seventhree[]= {
"com", "edu", "net", "org", "gov", "mil", "int"
};
/* Count the dots, we need to make sure that there are THREE dots
in the normal domains, or TWO in the seventhree-domains. */
if('.' == whatptr[0])
/* don't count the initial dot, assume it */
ptr++;
do {
ptr = strchr(ptr, '.');
if(ptr) {
ptr++;
dotcount++;
}
} while(ptr);
for(i=0;
i<sizeof(seventhree)/sizeof(seventhree[0]); i++) {
if(tailmatch(seventhree[i], whatptr)) {
dotcount++; /* we allow one dot less for these */
break;
}
}
if(dotcount < 3) {
/* Received and skipped a cookie with a domain using too few
dots. */
badcookie=TRUE; /* mark this as a bad cookie */
}
else {
/* Now, we make sure that our host is within the given domain,
or the given domain is not valid and thus cannot be set. */
if(!domain || tailmatch(whatptr, domain)) {
char *ptr=whatptr;
if(ptr[0] == '.')
ptr++;
co->domain=strdup(ptr); /* dont prefix with dots internally */
co->tailmatch=TRUE; /* we always do that if the domain name was
given */
}
else {
/* we did not get a tailmatch and then the attempted set domain
is not a domain to which the current host belongs. Mark as
bad. */
badcookie=TRUE;
}
}
} }
else if(strequal("version", name)) { else if(strequal("version", name)) {
co->version=strdup(whatptr); co->version=strdup(whatptr);
@@ -248,8 +319,11 @@ Curl_cookie_add(struct CookieInfo *c,
semiptr=strchr(ptr, '\0'); semiptr=strchr(ptr, '\0');
} while(semiptr); } while(semiptr);
if(NULL == co->name) { if(badcookie || (NULL == co->name)) {
/* we didn't get a cookie name, this is an illegal line, bail out */ /* we didn't get a cookie name or a bad one,
this is an illegal line, bail out */
if(co->expirestr)
free(co->expirestr);
if(co->domain) if(co->domain)
free(co->domain); free(co->domain);
if(co->path) if(co->path)
@@ -263,8 +337,20 @@ Curl_cookie_add(struct CookieInfo *c,
} }
if(NULL == co->domain) if(NULL == co->domain)
/* no domain given in the header line, set the default now */ /* no domain was given in the header line, set the default now */
co->domain=domain?strdup(domain):NULL; co->domain=domain?strdup(domain):NULL;
if((NULL == co->path) && path) {
/* no path was given in the header line, set the default now */
char *endslash = strrchr(path, '/');
if(endslash) {
int pathlen = endslash-path+1; /* include the ending slash */
co->path=malloc(pathlen+1); /* one extra for the zero byte */
if(co->path) {
memcpy(co->path, path, pathlen);
co->path[pathlen]=0; /* zero terminate */
}
}
}
} }
else { else {
/* This line is NOT a HTTP header style line, we do offer support for /* This line is NOT a HTTP header style line, we do offer support for
@@ -296,9 +382,12 @@ Curl_cookie_add(struct CookieInfo *c,
/* Now loop through the fields and init the struct we already have /* Now loop through the fields and init the struct we already have
allocated */ allocated */
for(ptr=firstptr, fields=0; ptr; ptr=strtok_r(NULL, "\t", &tok_buf), fields++) { for(ptr=firstptr, fields=0; ptr;
ptr=strtok_r(NULL, "\t", &tok_buf), fields++) {
switch(fields) { switch(fields) {
case 0: case 0:
if(ptr[0]=='.') /* skip preceeding dots */
ptr++;
co->domain = strdup(ptr); co->domain = strdup(ptr);
break; break;
case 1: case 1:
@@ -311,10 +400,8 @@ Curl_cookie_add(struct CookieInfo *c,
As far as I can see, it is set to true when the cookie says As far as I can see, it is set to true when the cookie says
.domain.com and to false when the domain is complete www.domain.com .domain.com and to false when the domain is complete www.domain.com
We don't currently take advantage of this knowledge.
*/ */
co->field1=strequal(ptr, "TRUE")+1; /* store information */ co->tailmatch=strequal(ptr, "TRUE"); /* store information */
break; break;
case 2: case 2:
/* It turns out, that sometimes the file format allows the path /* It turns out, that sometimes the file format allows the path
@@ -373,13 +460,8 @@ Curl_cookie_add(struct CookieInfo *c,
/* the names are identical */ /* the names are identical */
if(clist->domain && co->domain) { if(clist->domain && co->domain) {
if(strequal(clist->domain, co->domain) || if(strequal(clist->domain, co->domain))
(clist->domain[0]=='.' && /* The domains are identical */
strequal(&(clist->domain[1]), co->domain)) ||
(co->domain[0]=='.' &&
strequal(clist->domain, &(co->domain[1]))) )
/* The domains are identical, or at least identical if you skip the
preceeding dot */
replace_old=TRUE; replace_old=TRUE;
} }
else if(!clist->domain && !co->domain) else if(!clist->domain && !co->domain)
@@ -469,7 +551,6 @@ Curl_cookie_add(struct CookieInfo *c,
} }
c->numcookies++; /* one more cookie in the jar */ c->numcookies++; /* one more cookie in the jar */
return co; return co;
} }
@@ -531,7 +612,7 @@ struct CookieInfo *Curl_cookie_init(char *file,
while(*lineptr && isspace((int)*lineptr)) while(*lineptr && isspace((int)*lineptr))
lineptr++; lineptr++;
Curl_cookie_add(c, headerline, lineptr, NULL); Curl_cookie_add(c, headerline, lineptr, NULL, NULL);
} }
if(fromfile) if(fromfile)
fclose(fp); fclose(fp);
@@ -560,9 +641,6 @@ struct Cookie *Curl_cookie_getlist(struct CookieInfo *c,
struct Cookie *newco; struct Cookie *newco;
struct Cookie *co; struct Cookie *co;
time_t now = time(NULL); time_t now = time(NULL);
int hostlen=strlen(host);
int domlen;
struct Cookie *mainco=NULL; struct Cookie *mainco=NULL;
if(!c || !c->cookies) if(!c || !c->cookies)
@@ -571,43 +649,42 @@ struct Cookie *Curl_cookie_getlist(struct CookieInfo *c,
co = c->cookies; co = c->cookies;
while(co) { while(co) {
/* only process this cookie if it is not expired or had no expire /* only process this cookie if it is not expired or had no expire
date AND that if the cookie requires we're secure we must only date AND that if the cookie requires we're secure we must only
continue if we are! */ continue if we are! */
if( (co->expires<=0 || (co->expires> now)) && if( (co->expires<=0 || (co->expires> now)) &&
(co->secure?secure:TRUE) ) { (co->secure?secure:TRUE) ) {
/* now check if the domain is correct */ /* now check if the domain is correct */
domlen=co->domain?strlen(co->domain):0; if(!co->domain ||
if(!co->domain || (co->tailmatch && tailmatch(co->domain, host)) ||
((domlen<=hostlen) && (!co->tailmatch && strequal(host, co->domain)) ) {
strequal(host+(hostlen-domlen), co->domain)) ) { /* the right part of the host matches the domain stuff in the
/* the right part of the host matches the domain stuff in the cookie data */
cookie data */
/* now check the left part of the path with the cookies path /* now check the left part of the path with the cookies path
requirement */ requirement */
if(!co->path || if(!co->path ||
checkprefix(co->path, path) ) { checkprefix(co->path, path) ) {
/* and now, we know this is a match and we should create an /* and now, we know this is a match and we should create an
entry for the return-linked-list */ entry for the return-linked-list */
newco = (struct Cookie *)malloc(sizeof(struct Cookie)); newco = (struct Cookie *)malloc(sizeof(struct Cookie));
if(newco) { if(newco) {
/* first, copy the whole source cookie: */ /* first, copy the whole source cookie: */
memcpy(newco, co, sizeof(struct Cookie)); memcpy(newco, co, sizeof(struct Cookie));
/* then modify our next */ /* then modify our next */
newco->next = mainco; newco->next = mainco;
/* point the main to us */ /* point the main to us */
mainco = newco; mainco = newco;
} }
} }
} }
} }
co = co->next; co = co->next;
} }
return mainco; /* return the new list */ return mainco; /* return the new list */
@@ -715,15 +792,19 @@ int Curl_cookie_output(struct CookieInfo *c, char *dumphere)
while(co) { while(co) {
fprintf(out, fprintf(out,
"%s\t" /* domain */ "%s%s\t" /* domain */
"%s\t" /* field1 */ "%s\t" /* tailmatch */
"%s\t" /* path */ "%s\t" /* path */
"%s\t" /* secure */ "%s\t" /* secure */
"%u\t" /* expires */ "%u\t" /* expires */
"%s\t" /* name */ "%s\t" /* name */
"%s\n", /* value */ "%s\n", /* value */
/* Make sure all domains are prefixed with a dot if they allow
tailmatching. This is Mozilla-style. */
(co->tailmatch && co->domain && co->domain[0] != '.')? ".":"",
co->domain?co->domain:"unknown", co->domain?co->domain:"unknown",
co->field1==2?"TRUE":"FALSE", co->tailmatch?"TRUE":"FALSE",
co->path?co->path:"/", co->path?co->path:"/",
co->secure?"TRUE":"FALSE", co->secure?"TRUE":"FALSE",
(unsigned int)co->expires, (unsigned int)co->expires,
@@ -768,11 +849,3 @@ int main(int argc, char **argv)
#endif #endif
#endif /* CURL_DISABLE_HTTP */ #endif /* CURL_DISABLE_HTTP */
/*
* local variables:
* eval: (load-file "../curl-mode.el")
* end:
* vim600: fdm=marker
* vim: et sw=2 ts=2 sts=2 tw=78
*/

View File

@@ -7,7 +7,7 @@
* | (__| |_| | _ <| |___ * | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____| * \___|\___/|_| \_\_____|
* *
* Copyright (C) 1998 - 2002, Daniel Stenberg, <daniel@haxx.se>, et al. * Copyright (C) 1998 - 2003, Daniel Stenberg, <daniel@haxx.se>, et al.
* *
* This software is licensed as described in the file COPYING, which * This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms * you should have received as part of this distribution. The terms
@@ -40,8 +40,7 @@ struct Cookie {
char *domain; /* domain = <this> */ char *domain; /* domain = <this> */
long expires; /* expires = <this> */ long expires; /* expires = <this> */
char *expirestr; /* the plain text version */ char *expirestr; /* the plain text version */
bool tailmatch; /* weather we do tail-matchning of the domain name */
char field1; /* read from a cookie file, 1 => FALSE, 2=> TRUE */
/* RFC 2109 keywords. Version=1 means 2109-compliant cookie sending */ /* RFC 2109 keywords. Version=1 means 2109-compliant cookie sending */
char *version; /* Version = <value> */ char *version; /* Version = <value> */
@@ -70,11 +69,11 @@ struct CookieInfo {
#define MAX_NAME_TXT "255" #define MAX_NAME_TXT "255"
/* /*
* Add a cookie to the internal list of cookies. The domain argument is only * Add a cookie to the internal list of cookies. The domain and path arguments
* used if the header boolean is TRUE. * are only used if the header boolean is TRUE.
*/ */
struct Cookie *Curl_cookie_add(struct CookieInfo *, bool header, char *line, struct Cookie *Curl_cookie_add(struct CookieInfo *, bool header, char *line,
char *domain); char *domain, char *path);
struct CookieInfo *Curl_cookie_init(char *, struct CookieInfo *, bool); struct CookieInfo *Curl_cookie_init(char *, struct CookieInfo *, bool);
struct Cookie *Curl_cookie_getlist(struct CookieInfo *, char *, char *, bool); struct Cookie *Curl_cookie_getlist(struct CookieInfo *, char *, char *, bool);

View File

@@ -243,6 +243,10 @@ SOURCE=.\url.c
# End Source File # End Source File
# Begin Source File # Begin Source File
SOURCE=.\share.c
# End Source File
# Begin Source File
SOURCE=.\version.c SOURCE=.\version.c
# End Source File # End Source File
# End Group # End Group

View File

@@ -5,7 +5,7 @@
* | (__| |_| | _ <| |___ * | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____| * \___|\___/|_| \_\_____|
* *
* Copyright (C) 1998 - 2002, Daniel Stenberg, <daniel@haxx.se>, et al. * Copyright (C) 1998 - 2003, Daniel Stenberg, <daniel@haxx.se>, et al.
* *
* This software is licensed as described in the file COPYING, which * This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms * you should have received as part of this distribution. The terms
@@ -231,11 +231,3 @@ CURLcode Curl_dict(struct connectdata *conn)
return CURLE_OK; return CURLE_OK;
} }
/*
* local variables:
* eval: (load-file "../curl-mode.el")
* end:
* vim600: fdm=marker
* vim: et sw=2 ts=2 sts=2 tw=78
*/

View File

@@ -8,7 +8,7 @@
* | (__| |_| | _ <| |___ * | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____| * \___|\___/|_| \_\_____|
* *
* Copyright (C) 1998 - 2002, Daniel Stenberg, <daniel@haxx.se>, et al. * Copyright (C) 1998 - 2003, Daniel Stenberg, <daniel@haxx.se>, et al.
* *
* This software is licensed as described in the file COPYING, which * This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms * you should have received as part of this distribution. The terms

View File

@@ -5,7 +5,7 @@
* | (__| |_| | _ <| |___ * | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____| * \___|\___/|_| \_\_____|
* *
* Copyright (C) 1998 - 2002, Daniel Stenberg, <daniel@haxx.se>, et al. * Copyright (C) 1998 - 2003, Daniel Stenberg, <daniel@haxx.se>, et al.
* *
* This software is licensed as described in the file COPYING, which * This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms * you should have received as part of this distribution. The terms
@@ -200,6 +200,7 @@ CURLcode curl_easy_setopt(CURL *curl, CURLoption tag, ...)
long param_long = 0; long param_long = 0;
void *param_obj = NULL; void *param_obj = NULL;
struct SessionHandle *data = curl; struct SessionHandle *data = curl;
CURLcode ret=CURLE_FAILED_INIT;
va_start(arg, tag); va_start(arg, tag);
@@ -213,20 +214,20 @@ CURLcode curl_easy_setopt(CURL *curl, CURLoption tag, ...)
if(tag < CURLOPTTYPE_OBJECTPOINT) { if(tag < CURLOPTTYPE_OBJECTPOINT) {
/* This is a LONG type */ /* This is a LONG type */
param_long = va_arg(arg, long); param_long = va_arg(arg, long);
Curl_setopt(data, tag, param_long); ret = Curl_setopt(data, tag, param_long);
} }
else if(tag < CURLOPTTYPE_FUNCTIONPOINT) { else if(tag < CURLOPTTYPE_FUNCTIONPOINT) {
/* This is a object pointer type */ /* This is a object pointer type */
param_obj = va_arg(arg, void *); param_obj = va_arg(arg, void *);
Curl_setopt(data, tag, param_obj); ret = Curl_setopt(data, tag, param_obj);
} }
else { else {
param_func = va_arg(arg, func_T ); param_func = va_arg(arg, func_T );
Curl_setopt(data, tag, param_func); ret = Curl_setopt(data, tag, param_func);
} }
va_end(arg); va_end(arg);
return CURLE_OK; return ret;
} }
CURLcode curl_easy_perform(CURL *curl) CURLcode curl_easy_perform(CURL *curl)
@@ -333,11 +334,3 @@ CURL *curl_easy_duphandle(CURL *incurl)
return outcurl; return outcurl;
} }
/*
* local variables:
* eval: (load-file "../curl-mode.el")
* end:
* vim600: fdm=marker
* vim: et sw=2 ts=2 sts=2 tw=78
*/

View File

@@ -5,7 +5,7 @@
* | (__| |_| | _ <| |___ * | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____| * \___|\___/|_| \_\_____|
* *
* Copyright (C) 1998 - 2002, Daniel Stenberg, <daniel@haxx.se>, et al. * Copyright (C) 1998 - 2003, Daniel Stenberg, <daniel@haxx.se>, et al.
* *
* This software is licensed as described in the file COPYING, which * This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms * you should have received as part of this distribution. The terms
@@ -113,11 +113,3 @@ void curl_free(void *p)
{ {
free(p); free(p);
} }
/*
* local variables:
* eval: (load-file "../curl-mode.el")
* end:
* vim600: fdm=marker
* vim: et sw=2 ts=2 sts=2 tw=78
*/

View File

@@ -8,7 +8,7 @@
* | (__| |_| | _ <| |___ * | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____| * \___|\___/|_| \_\_____|
* *
* Copyright (C) 1998 - 2002, Daniel Stenberg, <daniel@haxx.se>, et al. * Copyright (C) 1998 - 2003, Daniel Stenberg, <daniel@haxx.se>, et al.
* *
* This software is licensed as described in the file COPYING, which * This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms * you should have received as part of this distribution. The terms

View File

@@ -5,7 +5,7 @@
* | (__| |_| | _ <| |___ * | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____| * \___|\___/|_| \_\_____|
* *
* Copyright (C) 1998 - 2002, Daniel Stenberg, <daniel@haxx.se>, et al. * Copyright (C) 1998 - 2003, Daniel Stenberg, <daniel@haxx.se>, et al.
* *
* This software is licensed as described in the file COPYING, which * This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms * you should have received as part of this distribution. The terms
@@ -211,12 +211,4 @@ CURLcode Curl_file(struct connectdata *conn)
return res; return res;
} }
/*
* local variables:
* eval: (load-file "../curl-mode.el")
* end:
* vim600: fdm=marker
* vim: et sw=2 ts=2 sts=2 tw=78
*/
#endif #endif

View File

@@ -8,7 +8,7 @@
* | (__| |_| | _ <| |___ * | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____| * \___|\___/|_| \_\_____|
* *
* Copyright (C) 1998 - 2002, Daniel Stenberg, <daniel@haxx.se>, et al. * Copyright (C) 1998 - 2003, Daniel Stenberg, <daniel@haxx.se>, et al.
* *
* This software is licensed as described in the file COPYING, which * This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms * you should have received as part of this distribution. The terms

View File

@@ -5,7 +5,7 @@
* | (__| |_| | _ <| |___ * | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____| * \___|\___/|_| \_\_____|
* *
* Copyright (C) 1998 - 2002, Daniel Stenberg, <daniel@haxx.se>, et al. * Copyright (C) 1998 - 2003, Daniel Stenberg, <daniel@haxx.se>, et al.
* *
* This software is licensed as described in the file COPYING, which * This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms * you should have received as part of this distribution. The terms
@@ -128,11 +128,8 @@ Content-Disposition: form-data; name="FILECONTENT"
#include "memdebug.h" #include "memdebug.h"
#endif #endif
/* Length of the random boundary string. The risk of this being used /* Length of the random boundary string. */
in binary data is very close to zero, 64^32 makes #define BOUNDARY_LENGTH 40
6277101735386680763835789423207666416102355444464034512896
combinations... */
#define BOUNDARY_LENGTH 32
/* What kind of Content-Type to use on un-specified files with unrecognized /* What kind of Content-Type to use on un-specified files with unrecognized
extensions. */ extensions. */
@@ -520,7 +517,7 @@ static const char * ContentTypeForFilename (const char *filename,
{".jpg", "image/jpeg"}, {".jpg", "image/jpeg"},
{".jpeg", "image/jpeg"}, {".jpeg", "image/jpeg"},
{".txt", "text/plain"}, {".txt", "text/plain"},
{".html", "text/plain"} {".html", "text/html"}
}; };
if(prevtype) if(prevtype)
@@ -1049,22 +1046,23 @@ char *Curl_FormBoundary(void)
the same form won't be identical */ the same form won't be identical */
int i; int i;
static char table62[]= static char table16[]="abcdef0123456789";
"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789";
retstring = (char *)malloc(BOUNDARY_LENGTH); retstring = (char *)malloc(BOUNDARY_LENGTH+1);
if(!retstring) if(!retstring)
return NULL; /* failed */ return NULL; /* failed */
srand(time(NULL)+randomizer++); /* seed */ srand(time(NULL)+randomizer++); /* seed */
strcpy(retstring, "curl"); /* bonus commercials 8*) */ strcpy(retstring, "----------------------------");
for(i=4; i<(BOUNDARY_LENGTH-1); i++) { for(i=strlen(retstring); i<BOUNDARY_LENGTH; i++)
retstring[i] = table62[rand()%62]; retstring[i] = table16[rand()%16];
}
retstring[BOUNDARY_LENGTH-1]=0; /* zero terminate */ /* 28 dashes and 12 hexadecimal digits makes 12^16 (184884258895036416)
combinations */
retstring[BOUNDARY_LENGTH]=0; /* zero terminate */
return retstring; return retstring;
} }
@@ -1596,11 +1594,3 @@ int main(int argc, char **argv)
#endif #endif
#endif /* CURL_DISABLE_HTTP */ #endif /* CURL_DISABLE_HTTP */
/*
* local variables:
* eval: (load-file "../curl-mode.el")
* end:
* vim600: fdm=marker
* vim: et sw=2 ts=2 sts=2 tw=78
*/

View File

@@ -8,7 +8,7 @@
* | (__| |_| | _ <| |___ * | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____| * \___|\___/|_| \_\_____|
* *
* Copyright (C) 1998 - 2002, Daniel Stenberg, <daniel@haxx.se>, et al. * Copyright (C) 1998 - 2003, Daniel Stenberg, <daniel@haxx.se>, et al.
* *
* This software is licensed as described in the file COPYING, which * This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms * you should have received as part of this distribution. The terms

200
lib/ftp.c
View File

@@ -5,7 +5,7 @@
* | (__| |_| | _ <| |___ * | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____| * \___|\___/|_| \_\_____|
* *
* Copyright (C) 1998 - 2002, Daniel Stenberg, <daniel@haxx.se>, et al. * Copyright (C) 1998 - 2003, Daniel Stenberg, <daniel@haxx.se>, et al.
* *
* This software is licensed as described in the file COPYING, which * This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms * you should have received as part of this distribution. The terms
@@ -158,6 +158,7 @@ static CURLcode AllowServerConnect(struct SessionHandle *data,
infof(data, "Connection accepted from server\n"); infof(data, "Connection accepted from server\n");
conn->secondarysocket = s; conn->secondarysocket = s;
Curl_nonblock(s, TRUE); /* enable non-blocking */
} }
break; break;
} }
@@ -173,7 +174,7 @@ static CURLcode AllowServerConnect(struct SessionHandle *data,
* response and extract the relevant return code for the invoking function. * response and extract the relevant return code for the invoking function.
*/ */
CURLcode Curl_GetFTPResponse(int *nreadp, /* return number of bytes read */ CURLcode Curl_GetFTPResponse(ssize_t *nreadp, /* return number of bytes read */
struct connectdata *conn, struct connectdata *conn,
int *ftpcode) /* return the ftp-code */ int *ftpcode) /* return the ftp-code */
{ {
@@ -237,7 +238,7 @@ CURLcode Curl_GetFTPResponse(int *nreadp, /* return number of bytes read */
if(!ftp->cache) { if(!ftp->cache) {
readfd = rkeepfd; /* set every lap */ readfd = rkeepfd; /* set every lap */
interval.tv_sec = timeout; interval.tv_sec = 1; /* use 1 second timeout intervals */
interval.tv_usec = 0; interval.tv_usec = 0;
switch (select (sockfd+1, &readfd, NULL, NULL, &interval)) { switch (select (sockfd+1, &readfd, NULL, NULL, &interval)) {
@@ -246,9 +247,10 @@ CURLcode Curl_GetFTPResponse(int *nreadp, /* return number of bytes read */
failf(data, "Transfer aborted due to select() error: %d", errno); failf(data, "Transfer aborted due to select() error: %d", errno);
break; break;
case 0: /* timeout */ case 0: /* timeout */
result = CURLE_OPERATION_TIMEDOUT; if(Curl_pgrsUpdate(conn))
failf(data, "Transfer aborted due to timeout"); return CURLE_ABORTED_BY_CALLBACK;
break; continue; /* just continue in our loop for the timeout duration */
default: default:
break; break;
} }
@@ -387,7 +389,7 @@ CURLcode Curl_GetFTPResponse(int *nreadp, /* return number of bytes read */
CURLcode Curl_ftp_connect(struct connectdata *conn) CURLcode Curl_ftp_connect(struct connectdata *conn)
{ {
/* this is FTP and no proxy */ /* this is FTP and no proxy */
int nread; ssize_t nread;
struct SessionHandle *data=conn->data; struct SessionHandle *data=conn->data;
char *buf = data->state.buffer; /* this is our buffer */ char *buf = data->state.buffer; /* this is our buffer */
struct FTP *ftp; struct FTP *ftp;
@@ -726,7 +728,10 @@ CURLcode ftp_cwd(struct connectdata *conn, char *path)
if (result) if (result)
return result; return result;
if (ftpcode != 250) { /* According to RFC959, CWD is supposed to return 250 on success, but
there seem to be non-compliant FTP servers out there that return 200,
so we accept any '2xy' code here. */
if (ftpcode/100 != 2) {
failf(conn->data, "Couldn't cd to %s", path); failf(conn->data, "Couldn't cd to %s", path);
return CURLE_FTP_ACCESS_DENIED; return CURLE_FTP_ACCESS_DENIED;
} }
@@ -933,6 +938,7 @@ ftp_pasv_verbose(struct connectdata *conn,
# endif # endif
# else # else
(void)hostent_buf; /* avoid compiler warning */
answer = gethostbyaddr((char *) &address, sizeof(address), AF_INET); answer = gethostbyaddr((char *) &address, sizeof(address), AF_INET);
# endif # endif
#else #else
@@ -961,7 +967,7 @@ ftp_pasv_verbose(struct connectdata *conn,
#else #else
const int niflags = NI_NUMERICHOST | NI_NUMERICSERV; const int niflags = NI_NUMERICHOST | NI_NUMERICSERV;
#endif #endif
port = 0; /* unused, prevent warning */ (void)port; /* prevent compiler warning */
if (getnameinfo(addr->ai_addr, addr->ai_addrlen, if (getnameinfo(addr->ai_addr, addr->ai_addrlen,
nbuf, sizeof(nbuf), sbuf, sizeof(sbuf), niflags)) { nbuf, sizeof(nbuf), sbuf, sizeof(sbuf), niflags)) {
snprintf(nbuf, sizeof(nbuf), "?"); snprintf(nbuf, sizeof(nbuf), "?");
@@ -1076,7 +1082,8 @@ CURLcode ftp_use_port(struct connectdata *conn)
return CURLE_FTP_PORT_FAILED; return CURLE_FTP_PORT_FAILED;
} }
for (modep = (char **)mode; modep && *modep; modep++) { for (modep = (char **)(data->set.ftp_use_eprt?&mode[0]:&mode[2]);
modep && *modep; modep++) {
int lprtaf, eprtaf; int lprtaf, eprtaf;
int alen=0, plen=0; int alen=0, plen=0;
@@ -1206,7 +1213,13 @@ CURLcode ftp_use_port(struct connectdata *conn)
bool sa_filled_in = FALSE; bool sa_filled_in = FALSE;
if(data->set.ftpport) { if(data->set.ftpport) {
if(Curl_if2ip(data->set.ftpport, myhost, sizeof(myhost))) { in_addr_t in;
/* First check if the given name is an IP address */
in=inet_addr(data->set.ftpport);
if((in == CURL_INADDR_NONE) &&
Curl_if2ip(data->set.ftpport, myhost, sizeof(myhost))) {
h = Curl_resolv(data, myhost, 0); h = Curl_resolv(data, myhost, 0);
} }
else { else {
@@ -1233,7 +1246,7 @@ CURLcode ftp_use_port(struct connectdata *conn)
if(h) if(h)
/* when we return from here, we can forget about this */ /* when we return from here, we can forget about this */
Curl_resolv_unlock(h); Curl_resolv_unlock(data, h);
if ( h || sa_filled_in) { if ( h || sa_filled_in) {
if( (portsock = socket(AF_INET, SOCK_STREAM, 0)) >= 0 ) { if( (portsock = socket(AF_INET, SOCK_STREAM, 0)) >= 0 ) {
@@ -1497,7 +1510,7 @@ CURLcode ftp_use_pasv(struct connectdata *conn,
&conninfo, &conninfo,
connected); connected);
Curl_resolv_unlock(addr); /* we're done using this address */ Curl_resolv_unlock(data, addr); /* we're done using this address */
/* /*
* When this is used from the multi interface, this might've returned with * When this is used from the multi interface, this might've returned with
@@ -1854,9 +1867,19 @@ CURLcode Curl_ftp_nextconnect(struct connectdata *conn)
int size=-1; /* default unknown size */ int size=-1; /* default unknown size */
/*
* It appears that there are FTP-servers that return size 0 for files
* when SIZE is used on the file while being in BINARY mode. To work
* around that (stupid) behavior, we attempt to parse the RETR response
* even if the SIZE returned size zero.
*
* Debugging help from Salvatore Sorrentino on February 26, 2003.
*/
if(!dirlist && if(!dirlist &&
!data->set.ftp_ascii && !data->set.ftp_ascii &&
(-1 == downloadsize)) { (downloadsize < 1)) {
/* /*
* It seems directory listings either don't show the size or very * It seems directory listings either don't show the size or very
* often uses size 0 anyway. ASCII transfers may very well turn out * often uses size 0 anyway. ASCII transfers may very well turn out
@@ -1953,17 +1976,46 @@ CURLcode ftp_perform(struct connectdata *conn,
return result; return result;
} }
/* change directory first! */ {
if(ftp->dir && ftp->dir[0]) { int i; /* counter for loop */
if ((result = ftp_cwd(conn, ftp->dir)) != CURLE_OK) for (i=0; ftp->dirs[i]; i++) {
/* RFC 1738 says empty components should be respected too */
if ((result = ftp_cwd(conn, ftp->dirs[i])) != CURLE_OK)
return result; return result;
}
} }
/* Requested time of file? */ /* Requested time of file or time-depended transfer? */
if(data->set.get_filetime && ftp->file) { if((data->set.get_filetime || data->set.timecondition) &&
ftp->file) {
result = ftp_getfiletime(conn, ftp->file); result = ftp_getfiletime(conn, ftp->file);
if(result) if(result)
return result; return result;
if(data->set.timecondition) {
if((data->info.filetime > 0) && (data->set.timevalue > 0)) {
switch(data->set.timecondition) {
case TIMECOND_IFMODSINCE:
default:
if(data->info.filetime < data->set.timevalue) {
infof(data, "The requested document is not new enough\n");
ftp->no_transfer = TRUE; /* mark this to not transfer data */
return CURLE_OK;
}
break;
case TIMECOND_IFUNMODSINCE:
if(data->info.filetime > data->set.timevalue) {
infof(data, "The requested document is not old enough\n");
ftp->no_transfer = TRUE; /* mark this to not transfer data */
return CURLE_OK;
}
break;
} /* switch */
}
else {
infof(data, "Skipping time comparison\n");
}
}
} }
/* If we have selected NOBODY and HEADER, it means that we only want file /* If we have selected NOBODY and HEADER, it means that we only want file
@@ -2006,7 +2058,7 @@ CURLcode ftp_perform(struct connectdata *conn,
tm = localtime((unsigned long *)&data->info.filetime); tm = localtime((unsigned long *)&data->info.filetime);
#endif #endif
/* format: "Tue, 15 Nov 1994 12:45:26 GMT" */ /* format: "Tue, 15 Nov 1994 12:45:26 GMT" */
strftime(buf, BUFSIZE-1, "Last-Modified: %a, %d %b %Y %H:%M:%S %Z\r\n", strftime(buf, BUFSIZE-1, "Last-Modified: %a, %d %b %Y %H:%M:%S GMT\r\n",
tm); tm);
result = Curl_client_write(data, CLIENTWRITE_BOTH, buf, 0); result = Curl_client_write(data, CLIENTWRITE_BOTH, buf, 0);
if(result) if(result)
@@ -2051,33 +2103,70 @@ CURLcode ftp_perform(struct connectdata *conn,
*/ */
CURLcode Curl_ftp(struct connectdata *conn) CURLcode Curl_ftp(struct connectdata *conn)
{ {
CURLcode retcode; CURLcode retcode=CURLE_OK;
bool connected; bool connected=0;
struct SessionHandle *data = conn->data; struct SessionHandle *data = conn->data;
struct FTP *ftp; struct FTP *ftp;
int dirlength=0; /* 0 forces strlen() */
char *slash_pos; /* position of the first '/' char in curpos */
char *cur_pos=conn->ppath; /* current position in ppath. point at the begin
of next path component */
int path_part=0;/* current path component */
/* the ftp struct is already inited in ftp_connect() */ /* the ftp struct is already inited in ftp_connect() */
ftp = conn->proto.ftp; ftp = conn->proto.ftp;
conn->size = -1; /* make sure this is unknown at this point */
/* We split the path into dir and file parts *before* we URLdecode Curl_pgrsSetUploadCounter(data, 0);
it */ Curl_pgrsSetDownloadCounter(data, 0);
ftp->file = strrchr(conn->ppath, '/'); Curl_pgrsSetUploadSize(data, 0);
if(ftp->file) { Curl_pgrsSetDownloadSize(data, 0);
if(ftp->file != conn->ppath)
dirlength=ftp->file-conn->ppath; /* don't count the traling slash */
ftp->file++; /* point to the first letter in the file name part or /* fixed : initialize ftp->dirs[xxx] to NULL !
remain NULL */ is done in Curl_ftp_connect() */
}
else { /* parse the URL path into separate path components */
ftp->file = conn->ppath; /* there's only a file part */ while((slash_pos=strchr(cur_pos, '/'))) {
/* seek out the next path component */
if (0 == slash_pos-cur_pos) /* empty path component, like "x//y" */
ftp->dirs[path_part] = strdup(""); /* empty string */
else
ftp->dirs[path_part] = curl_unescape(cur_pos,slash_pos-cur_pos);
if (!ftp->dirs[path_part]) { /* run out of memory ... */
failf(data, "no memory");
retcode = CURLE_OUT_OF_MEMORY;
}
else {
cur_pos = slash_pos + 1; /* jump to the rest of the string */
if(++path_part >= (CURL_MAX_FTP_DIRDEPTH-1)) {
/* too deep, we need the last entry to be kept NULL at all
times to signal end of list */
failf(data, "too deep dir hierarchy");
retcode = CURLE_URL_MALFORMAT;
}
}
if (retcode) {
int i;
for (i=0;i<path_part;i++) { /* free previous parts */
free(ftp->dirs[i]);
ftp->dirs[i]=NULL;
}
return retcode; /* failure */
}
} }
ftp->file = cur_pos; /* the rest is the file name */
if(*ftp->file) { if(*ftp->file) {
ftp->file = curl_unescape(ftp->file, 0); ftp->file = curl_unescape(ftp->file, 0);
if(NULL == ftp->file) { if(NULL == ftp->file) {
int i;
for (i=0;i<path_part;i++){
free(ftp->dirs[i]);
ftp->dirs[i]=NULL;
}
failf(data, "no memory"); failf(data, "no memory");
return CURLE_OUT_OF_MEMORY; return CURLE_OUT_OF_MEMORY;
} }
@@ -2086,27 +2175,21 @@ CURLcode Curl_ftp(struct connectdata *conn)
ftp->file=NULL; /* instead of point to a zero byte, we make it a NULL ftp->file=NULL; /* instead of point to a zero byte, we make it a NULL
pointer */ pointer */
ftp->urlpath = conn->ppath;
if(dirlength) {
ftp->dir = curl_unescape(ftp->urlpath, dirlength);
if(NULL == ftp->dir) {
if(ftp->file)
free(ftp->file);
failf(data, "no memory");
return CURLE_OUT_OF_MEMORY; /* failure */
}
}
else
ftp->dir = NULL;
retcode = ftp_perform(conn, &connected); retcode = ftp_perform(conn, &connected);
if(CURLE_OK == retcode) { if(CURLE_OK == retcode) {
if(connected) if(connected)
retcode = Curl_ftp_nextconnect(conn); retcode = Curl_ftp_nextconnect(conn);
else else {
/* since we didn't connect now, we want do_more to get called */ if(ftp->no_transfer) {
conn->bits.do_more = TRUE; /* no data to transfer */
retcode=Curl_Transfer(conn, -1, -1, FALSE, NULL, -1, NULL);
}
else {
/* since we didn't connect now, we want do_more to get called */
conn->bits.do_more = TRUE;
}
}
} }
return retcode; return retcode;
@@ -2171,6 +2254,7 @@ CURLcode Curl_ftpsendf(struct connectdata *conn,
CURLcode Curl_ftp_disconnect(struct connectdata *conn) CURLcode Curl_ftp_disconnect(struct connectdata *conn)
{ {
struct FTP *ftp= conn->proto.ftp; struct FTP *ftp= conn->proto.ftp;
int i;
/* The FTP session may or may not have been allocated/setup at this point! */ /* The FTP session may or may not have been allocated/setup at this point! */
if(ftp) { if(ftp) {
@@ -2180,20 +2264,14 @@ CURLcode Curl_ftp_disconnect(struct connectdata *conn)
free(ftp->cache); free(ftp->cache);
if(ftp->file) if(ftp->file)
free(ftp->file); free(ftp->file);
if(ftp->dir) for (i=0;ftp->dirs[i];i++){
free(ftp->dir); free(ftp->dirs[i]);
ftp->dirs[i]=NULL;
}
ftp->file = ftp->dir = NULL; /* zero */ ftp->file = NULL; /* zero */
} }
return CURLE_OK; return CURLE_OK;
} }
/*
* local variables:
* eval: (load-file "../curl-mode.el")
* end:
* vim600: fdm=marker
* vim: et sw=2 ts=2 sts=2 tw=78
*/
#endif /* CURL_DISABLE_FTP */ #endif /* CURL_DISABLE_FTP */

View File

@@ -7,7 +7,7 @@
* | (__| |_| | _ <| |___ * | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____| * \___|\___/|_| \_\_____|
* *
* Copyright (C) 1998 - 2002, Daniel Stenberg, <daniel@haxx.se>, et al. * Copyright (C) 1998 - 2003, Daniel Stenberg, <daniel@haxx.se>, et al.
* *
* This software is licensed as described in the file COPYING, which * This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms * you should have received as part of this distribution. The terms
@@ -29,7 +29,7 @@ CURLcode Curl_ftp_done(struct connectdata *conn);
CURLcode Curl_ftp_connect(struct connectdata *conn); CURLcode Curl_ftp_connect(struct connectdata *conn);
CURLcode Curl_ftp_disconnect(struct connectdata *conn); CURLcode Curl_ftp_disconnect(struct connectdata *conn);
CURLcode Curl_ftpsendf(struct connectdata *, const char *fmt, ...); CURLcode Curl_ftpsendf(struct connectdata *, const char *fmt, ...);
CURLcode Curl_GetFTPResponse(int *nread, struct connectdata *conn, CURLcode Curl_GetFTPResponse(ssize_t *nread, struct connectdata *conn,
int *ftpcode); int *ftpcode);
CURLcode Curl_ftp_nextconnect(struct connectdata *conn); CURLcode Curl_ftp_nextconnect(struct connectdata *conn);
#endif #endif

View File

@@ -195,7 +195,7 @@ typedef enum _MERIDIAN {
} MERIDIAN; } MERIDIAN;
/* parse results and input string */ /* parse results and input string */
typedef struct _CONTEXT { typedef struct _CURL_CONTEXT {
const char *yyInput; const char *yyInput;
int yyDayOrdinal; int yyDayOrdinal;
int yyDayNumber; int yyDayNumber;
@@ -218,14 +218,14 @@ typedef struct _CONTEXT {
int yyRelMonth; int yyRelMonth;
int yyRelSeconds; int yyRelSeconds;
int yyRelYear; int yyRelYear;
} CONTEXT; } CURL_CONTEXT;
/* enable use of extra argument to yyparse and yylex which can be used to pass /* enable use of extra argument to yyparse and yylex which can be used to pass
** in a user defined value (CONTEXT struct in our case) ** in a user defined value (CURL_CONTEXT struct in our case)
*/ */
#define YYPARSE_PARAM cookie #define YYPARSE_PARAM cookie
#define YYLEX_PARAM cookie #define YYLEX_PARAM cookie
#define context ((CONTEXT *) cookie) #define context ((CURL_CONTEXT *) cookie)
#line 215 "getdate.y" #line 215 "getdate.y"
typedef union { typedef union {
@@ -397,7 +397,7 @@ static const short yycheck[] = { 0,
#define YYPURE 1 #define YYPURE 1
/* -*-C-*- Note some compilers choke on comments on `#line' lines. */ /* -*-C-*- Note some compilers choke on comments on `#line' lines. */
#line 3 "/usr/local/share/bison.simple" #line 3 "/usr/lib/bison.simple"
/* This file comes from bison-1.28. */ /* This file comes from bison-1.28. */
/* Skeleton output parser for bison, /* Skeleton output parser for bison,
@@ -611,7 +611,7 @@ __yy_memcpy (char *to, char *from, unsigned int count)
#endif #endif
#endif #endif
#line 217 "/usr/local/share/bison.simple" #line 217 "/usr/lib/bison.simple"
/* The user can define YYPARSE_PARAM as the name of an argument to be passed /* The user can define YYPARSE_PARAM as the name of an argument to be passed
into yyparse. The argument should have type void *. into yyparse. The argument should have type void *.
@@ -1303,7 +1303,7 @@ case 50:
break;} break;}
} }
/* the action file gets copied in in place of this dollarsign */ /* the action file gets copied in in place of this dollarsign */
#line 543 "/usr/local/share/bison.simple" #line 543 "/usr/lib/bison.simple"
yyvsp -= yylen; yyvsp -= yylen;
yyssp -= yylen; yyssp -= yylen;
@@ -1988,7 +1988,7 @@ curl_getdate (const char *p, const time_t *now)
{ {
struct tm tm, tm0, *tmp; struct tm tm, tm0, *tmp;
time_t Start; time_t Start;
CONTEXT cookie; CURL_CONTEXT cookie;
#ifdef HAVE_LOCALTIME_R #ifdef HAVE_LOCALTIME_R
struct tm keeptime; struct tm keeptime;
#endif #endif

View File

@@ -171,7 +171,7 @@ typedef enum _MERIDIAN {
} MERIDIAN; } MERIDIAN;
/* parse results and input string */ /* parse results and input string */
typedef struct _CONTEXT { typedef struct _CURL_CONTEXT {
const char *yyInput; const char *yyInput;
int yyDayOrdinal; int yyDayOrdinal;
int yyDayNumber; int yyDayNumber;
@@ -194,14 +194,14 @@ typedef struct _CONTEXT {
int yyRelMonth; int yyRelMonth;
int yyRelSeconds; int yyRelSeconds;
int yyRelYear; int yyRelYear;
} CONTEXT; } CURL_CONTEXT;
/* enable use of extra argument to yyparse and yylex which can be used to pass /* enable use of extra argument to yyparse and yylex which can be used to pass
** in a user defined value (CONTEXT struct in our case) ** in a user defined value (CURL_CONTEXT struct in our case)
*/ */
#define YYPARSE_PARAM cookie #define YYPARSE_PARAM cookie
#define YYLEX_PARAM cookie #define YYLEX_PARAM cookie
#define context ((CONTEXT *) cookie) #define context ((CURL_CONTEXT *) cookie)
%} %}
/* This grammar has 13 shift/reduce conflicts. */ /* This grammar has 13 shift/reduce conflicts. */
@@ -944,7 +944,7 @@ curl_getdate (const char *p, const time_t *now)
{ {
struct tm tm, tm0, *tmp; struct tm tm, tm0, *tmp;
time_t Start; time_t Start;
CONTEXT cookie; CURL_CONTEXT cookie;
#ifdef HAVE_LOCALTIME_R #ifdef HAVE_LOCALTIME_R
struct tm keeptime; struct tm keeptime;
#endif #endif

View File

@@ -5,7 +5,7 @@
* | (__| |_| | _ <| |___ * | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____| * \___|\___/|_| \_\_____|
* *
* Copyright (C) 1998 - 2002, Daniel Stenberg, <daniel@haxx.se>, et al. * Copyright (C) 1998 - 2003, Daniel Stenberg, <daniel@haxx.se>, et al.
* *
* This software is licensed as described in the file COPYING, which * This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms * you should have received as part of this distribution. The terms
@@ -67,11 +67,3 @@ char *curl_getenv(const char *v)
{ {
return GetEnv(v); return GetEnv(v);
} }
/*
* local variables:
* eval: (load-file "../curl-mode.el")
* end:
* vim600: fdm=marker
* vim: et sw=2 ts=2 sts=2 tw=78
*/

View File

@@ -5,7 +5,7 @@
* | (__| |_| | _ <| |___ * | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____| * \___|\___/|_| \_\_____|
* *
* Copyright (C) 1998 - 2002, Daniel Stenberg, <daniel@haxx.se>, et al. * Copyright (C) 1998 - 2003, Daniel Stenberg, <daniel@haxx.se>, et al.
* *
* This software is licensed as described in the file COPYING, which * This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms * you should have received as part of this distribution. The terms
@@ -38,6 +38,8 @@
/* Make this the last #include */ /* Make this the last #include */
#ifdef MALLOCDEBUG #ifdef MALLOCDEBUG
#include "memdebug.h" #include "memdebug.h"
#else
#include <stdlib.h>
#endif #endif
/* /*
@@ -159,18 +161,10 @@ CURLcode Curl_getinfo(struct SessionHandle *data, CURLINFO info, ...)
*param_charp = data->info.contenttype; *param_charp = data->info.contenttype;
break; break;
case CURLINFO_PRIVATE: case CURLINFO_PRIVATE:
*param_charp = data->set.private?data->set.private:(char *)""; *param_charp = data->set.private;
break; break;
default: default:
return CURLE_BAD_FUNCTION_ARGUMENT; return CURLE_BAD_FUNCTION_ARGUMENT;
} }
return CURLE_OK; return CURLE_OK;
} }
/*
* local variables:
* eval: (load-file "../curl-mode.el")
* end:
* vim600: fdm=marker
* vim: et sw=2 ts=2 sts=2 tw=78
*/

View File

@@ -7,7 +7,7 @@
* | (__| |_| | _ <| |___ * | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____| * \___|\___/|_| \_\_____|
* *
* Copyright (C) 1998 - 2002, Daniel Stenberg, <daniel@haxx.se>, et al. * Copyright (C) 1998 - 2003, Daniel Stenberg, <daniel@haxx.se>, et al.
* *
* This software is licensed as described in the file COPYING, which * This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms * you should have received as part of this distribution. The terms

View File

@@ -224,11 +224,3 @@ char *getpass(const char *prompt)
return getpass_r(prompt, buf, sizeof(buf)); return getpass_r(prompt, buf, sizeof(buf));
} }
#endif #endif
/*
* local variables:
* eval: (load-file "../curl-mode.el")
* end:
* vim600: fdm=marker
* vim: et sw=2 ts=2 sts=2 tw=78
*/

View File

@@ -7,7 +7,7 @@
* | (__| |_| | _ <| |___ * | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____| * \___|\___/|_| \_\_____|
* *
* Copyright (C) 1998 - 2002, Daniel Stenberg, <daniel@haxx.se>, et al. * Copyright (C) 1998 - 2003, Daniel Stenberg, <daniel@haxx.se>, et al.
* *
* This software is licensed as described in the file COPYING, which * This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms * you should have received as part of this distribution. The terms

View File

@@ -5,7 +5,7 @@
* | (__| |_| | _ <| |___ * | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____| * \___|\___/|_| \_\_____|
* *
* Copyright (C) 1998 - 2002, Daniel Stenberg, <daniel@haxx.se>, et al. * Copyright (C) 1998 - 2003, Daniel Stenberg, <daniel@haxx.se>, et al.
* *
* This software is licensed as described in the file COPYING, which * This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms * you should have received as part of this distribution. The terms
@@ -35,8 +35,6 @@
#endif #endif
/* {{{ static unsigned long _hash_str (const char *, size_t)
*/
static unsigned long static unsigned long
_hash_str (const char *key, size_t key_length) _hash_str (const char *key, size_t key_length)
{ {
@@ -50,10 +48,7 @@ _hash_str (const char *key, size_t key_length)
return h; return h;
} }
/* }}} */
/* {{{ static void _hash_element_dtor (void *, void *)
*/
static void static void
_hash_element_dtor (void *user, void *element) _hash_element_dtor (void *user, void *element)
{ {
@@ -68,10 +63,7 @@ _hash_element_dtor (void *user, void *element)
free(e); free(e);
} }
/* }}} */
/* {{{ void curl_hash_init (curl_hash *, int, curl_hash_dtor)
*/
void void
Curl_hash_init (curl_hash *h, int slots, curl_hash_dtor dtor) Curl_hash_init (curl_hash *h, int slots, curl_hash_dtor dtor)
{ {
@@ -86,10 +78,7 @@ Curl_hash_init (curl_hash *h, int slots, curl_hash_dtor dtor)
h->table[i] = Curl_llist_alloc((curl_llist_dtor) _hash_element_dtor); h->table[i] = Curl_llist_alloc((curl_llist_dtor) _hash_element_dtor);
} }
} }
/* }}} */
/* {{{ curl_hash *curl_hash_alloc (int, curl_hash_dtor)
*/
curl_hash * curl_hash *
Curl_hash_alloc (int slots, curl_hash_dtor dtor) Curl_hash_alloc (int slots, curl_hash_dtor dtor)
{ {
@@ -103,10 +92,7 @@ Curl_hash_alloc (int slots, curl_hash_dtor dtor)
return h; return h;
} }
/* }}} */
/* {{{ static int _hash_key_compare (char *, size_t, char *, size_t)
*/
static int static int
_hash_key_compare (char *key1, size_t key1_len, char *key2, size_t key2_len) _hash_key_compare (char *key1, size_t key1_len, char *key2, size_t key2_len)
{ {
@@ -118,12 +104,10 @@ _hash_key_compare (char *key1, size_t key1_len, char *key2, size_t key2_len)
return 0; return 0;
} }
/* }}} */
/* {{{ static int _mk_hash_element (curl_hash_element **, char *, size_t, const void *)
*/
static int static int
_mk_hash_element (curl_hash_element **e, char *key, size_t key_len, const void *p) _mk_hash_element (curl_hash_element **e, char *key, size_t key_len,
const void *p)
{ {
*e = (curl_hash_element *) malloc(sizeof(curl_hash_element)); *e = (curl_hash_element *) malloc(sizeof(curl_hash_element));
(*e)->key = strdup(key); (*e)->key = strdup(key);
@@ -131,16 +115,12 @@ _mk_hash_element (curl_hash_element **e, char *key, size_t key_len, const void *
(*e)->ptr = (void *) p; (*e)->ptr = (void *) p;
return 0; return 0;
} }
/* }}} */
#define find_slot(__h, __k, __k_len) (_hash_str(__k, __k_len) % (__h)->slots) #define find_slot(__h, __k, __k_len) (_hash_str(__k, __k_len) % (__h)->slots)
#define FETCH_LIST \ #define FETCH_LIST \
curl_llist *l = h->table[find_slot(h, key, key_len)] curl_llist *l = h->table[find_slot(h, key, key_len)]
/* {{{ int curl_hash_add (curl_hash *, char *, size_t, const void *)
*/
int int
Curl_hash_add (curl_hash *h, char *key, size_t key_len, const void *p) Curl_hash_add (curl_hash *h, char *key, size_t key_len, const void *p)
{ {
@@ -169,10 +149,7 @@ Curl_hash_add (curl_hash *h, char *key, size_t key_len, const void *p)
return 0; return 0;
} }
/* }}} */
/* {{{ int curl_hash_delete (curl_hash *, char *, size_t)
*/
int int
Curl_hash_delete(curl_hash *h, char *key, size_t key_len) Curl_hash_delete(curl_hash *h, char *key, size_t key_len)
{ {
@@ -193,10 +170,7 @@ Curl_hash_delete(curl_hash *h, char *key, size_t key_len)
return 0; return 0;
} }
/* }}} */
/* {{{ int curl_hash_pick (curl_hash *, char *, size_t, void **)
*/
void * void *
Curl_hash_pick(curl_hash *h, char *key, size_t key_len) Curl_hash_pick(curl_hash *h, char *key, size_t key_len)
{ {
@@ -215,10 +189,7 @@ Curl_hash_pick(curl_hash *h, char *key, size_t key_len)
return NULL; return NULL;
} }
/* }}} */
/* {{{ void curl_hash_apply (curl_hash *, void *, void (*)(void *, curl_hash_element *))
*/
void void
Curl_hash_apply(curl_hash *h, void *user, Curl_hash_apply(curl_hash *h, void *user,
void (*cb)(void *user, void *ptr)) void (*cb)(void *user, void *ptr))
@@ -235,10 +206,7 @@ Curl_hash_apply(curl_hash *h, void *user,
} }
} }
} }
/* }}} */
/* {{{ void curl_hash_clean (curl_hash *)
*/
void void
Curl_hash_clean(curl_hash *h) Curl_hash_clean(curl_hash *h)
{ {
@@ -250,11 +218,7 @@ Curl_hash_clean(curl_hash *h)
free(h->table); free(h->table);
} }
/* }}} */
/* {{{ void curl_hash_clean_with_criterium (curl_hash *, void *,
int (*)(void *, void *))
*/
void void
Curl_hash_clean_with_criterium(curl_hash *h, void *user, Curl_hash_clean_with_criterium(curl_hash *h, void *user,
int (*comp)(void *, void *)) int (*comp)(void *, void *))
@@ -277,17 +241,12 @@ Curl_hash_clean_with_criterium(curl_hash *h, void *user,
} }
} }
/* {{{ int curl_hash_count (curl_hash *)
*/
int int
Curl_hash_count(curl_hash *h) Curl_hash_count(curl_hash *h)
{ {
return h->size; return h->size;
} }
/* }}} */
/* {{{ void curl_hash_destroy (curl_hash *)
*/
void void
Curl_hash_destroy(curl_hash *h) Curl_hash_destroy(curl_hash *h)
{ {
@@ -297,12 +256,4 @@ Curl_hash_destroy(curl_hash *h)
Curl_hash_clean(h); Curl_hash_clean(h);
free(h); free(h);
} }
/* }}} */
/*
* local variables:
* eval: (load-file "../curl-mode.el")
* end:
* vim600: fdm=marker
* vim: et sw=2 ts=2 sts=2 tw=78
*/

View File

@@ -7,7 +7,7 @@
* | (__| |_| | _ <| |___ * | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____| * \___|\___/|_| \_\_____|
* *
* Copyright (C) 1998 - 2002, Daniel Stenberg, <daniel@haxx.se>, et al. * Copyright (C) 1998 - 2003, Daniel Stenberg, <daniel@haxx.se>, et al.
* *
* This software is licensed as described in the file COPYING, which * This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms * you should have received as part of this distribution. The terms
@@ -58,11 +58,3 @@ void Curl_hash_clean_with_criterium(curl_hash *h, void *user, int (*comp)(void *
void Curl_hash_destroy(curl_hash *h); void Curl_hash_destroy(curl_hash *h);
#endif #endif
/*
* local variables:
* eval: (load-file "../curl-mode.el")
* end:
* vim600: fdm=marker
* vim: et sw=2 ts=2 sts=2 tw=78
*/

View File

@@ -5,7 +5,7 @@
* | (__| |_| | _ <| |___ * | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____| * \___|\___/|_| \_\_____|
* *
* Copyright (C) 1998 - 2002, Daniel Stenberg, <daniel@haxx.se>, et al. * Copyright (C) 1998 - 2003, Daniel Stenberg, <daniel@haxx.se>, et al.
* *
* This software is licensed as described in the file COPYING, which * This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms * you should have received as part of this distribution. The terms
@@ -64,6 +64,7 @@
#include "sendf.h" #include "sendf.h"
#include "hostip.h" #include "hostip.h"
#include "hash.h" #include "hash.h"
#include "share.h"
#define _MPRINTF_REPLACE /* use our functions only */ #define _MPRINTF_REPLACE /* use our functions only */
#include <curl/mprintf.h> #include <curl/mprintf.h>
@@ -211,6 +212,10 @@ void Curl_scan_cache_used(void *user, void *ptr)
#define HOSTCACHE_RETURN(dns) \ #define HOSTCACHE_RETURN(dns) \
{ \ { \
free(entry_id); \ free(entry_id); \
if(data->share) \
{ \
Curl_share_unlock(data, CURL_LOCK_DATA_DNS); \
} \
return dns; \ return dns; \
} }
@@ -234,7 +239,7 @@ struct Curl_dns_entry *Curl_resolv(struct SessionHandle *data,
will generate a signal and we will siglongjmp() from that here */ will generate a signal and we will siglongjmp() from that here */
if(!data->set.no_signal && sigsetjmp(curl_jmpenv, 1)) { if(!data->set.no_signal && sigsetjmp(curl_jmpenv, 1)) {
/* this is coming from a siglongjmp() */ /* this is coming from a siglongjmp() */
failf(data, "name lookup time-outed"); failf(data, "name lookup timed out");
return NULL; return NULL;
} }
#endif #endif
@@ -246,6 +251,11 @@ struct Curl_dns_entry *Curl_resolv(struct SessionHandle *data,
if (!entry_id) if (!entry_id)
return NULL; return NULL;
if(data->share)
{
Curl_share_lock(data, CURL_LOCK_DATA_DNS, CURL_LOCK_ACCESS_SINGLE);
}
/* See if its already in our dns cache */ /* See if its already in our dns cache */
dns = Curl_hash_pick(data->hostcache, entry_id, entry_len+1); dns = Curl_hash_pick(data->hostcache, entry_id, entry_len+1);
@@ -284,6 +294,19 @@ struct Curl_dns_entry *Curl_resolv(struct SessionHandle *data,
HOSTCACHE_RETURN(dns); HOSTCACHE_RETURN(dns);
} }
void Curl_resolv_unlock(struct SessionHandle *data, struct Curl_dns_entry *dns)
{
if(data->share)
{
Curl_share_lock(data, CURL_LOCK_DATA_DNS, CURL_LOCK_ACCESS_SINGLE);
}
dns->inuse--;
if(data->share)
{
Curl_share_unlock(data, CURL_LOCK_DATA_DNS);
}
}
/* /*
* This is a wrapper function for freeing name information in a protocol * This is a wrapper function for freeing name information in a protocol
* independent way. This takes care of using the appropriate underlaying * independent way. This takes care of using the appropriate underlaying
@@ -488,7 +511,7 @@ static struct hostent* pack_hostent(char** buf, struct hostent* orig)
} }
#endif #endif
static char *MakeIP(unsigned long num,char *addr, int addr_len) static char *MakeIP(unsigned long num, char *addr, int addr_len)
{ {
#if defined(HAVE_INET_NTOA) || defined(HAVE_INET_NTOA_R) #if defined(HAVE_INET_NTOA) || defined(HAVE_INET_NTOA_R)
struct in_addr in; struct in_addr in;
@@ -509,10 +532,6 @@ static char *MakeIP(unsigned long num,char *addr, int addr_len)
return (addr); return (addr);
} }
#ifndef INADDR_NONE
#define INADDR_NONE (in_addr_t) ~0
#endif
static void hostcache_fixoffset(struct hostent *h, int offset) static void hostcache_fixoffset(struct hostent *h, int offset)
{ {
int i=0; int i=0;
@@ -550,7 +569,8 @@ static Curl_addrinfo *my_getaddrinfo(struct SessionHandle *data,
port=0; /* unused in IPv4 code */ port=0; /* unused in IPv4 code */
ret = 0; /* to prevent the compiler warning */ ret = 0; /* to prevent the compiler warning */
if ( (in=inet_addr(hostname)) != INADDR_NONE ) { in=inet_addr(hostname);
if (in != CURL_INADDR_NONE) {
struct in_addr *addrentry; struct in_addr *addrentry;
struct namebuf { struct namebuf {
struct hostent hostentry; struct hostent hostentry;
@@ -571,7 +591,7 @@ static Curl_addrinfo *my_getaddrinfo(struct SessionHandle *data,
h->h_addrtype = AF_INET; h->h_addrtype = AF_INET;
h->h_length = sizeof(*addrentry); h->h_length = sizeof(*addrentry);
h->h_name = &buf->h_name[0]; h->h_name = &buf->h_name[0];
MakeIP(ntohl(in), h->h_name, sizeof(buf->h_name)); MakeIP(ntohl(in), (char *)h->h_name, sizeof(buf->h_name));
} }
#if defined(HAVE_GETHOSTBYNAME_R) #if defined(HAVE_GETHOSTBYNAME_R)
else { else {
@@ -673,6 +693,19 @@ static Curl_addrinfo *my_getaddrinfo(struct SessionHandle *data,
#ifdef HAVE_GETHOSTBYNAME_R_3 #ifdef HAVE_GETHOSTBYNAME_R_3
/* AIX, Digital Unix, HPUX 10, more? */ /* AIX, Digital Unix, HPUX 10, more? */
/* For AIX 4.3 or later, we don't use gethostbyname_r() at all, because of
the plain fact that it does not return unique full buffers on each
call, but instead several of the pointers in the hostent structs will
point to the same actual data! This have the unfortunate down-side that
our caching system breaks down horribly. Luckily for us though, AIX 4.3
and more recent versions have a completely thread-safe libc where all
the data is stored in thread-specific memory areas making calls to the
plain old gethostbyname() work fine even for multi-threaded programs.
This AIX 4.3 or later detection is all made in the configure script.
Troels Walsted Hansen helped us work this out on March 3rd, 2003. */
if(CURL_NAMELOOKUP_SIZE >= if(CURL_NAMELOOKUP_SIZE >=
(sizeof(struct hostent)+sizeof(struct hostent_data))) (sizeof(struct hostent)+sizeof(struct hostent_data)))
@@ -682,7 +715,8 @@ static Curl_addrinfo *my_getaddrinfo(struct SessionHandle *data,
ret = gethostbyname_r(hostname, ret = gethostbyname_r(hostname,
(struct hostent *)buf, (struct hostent *)buf,
(struct hostent_data *)((char *)buf + sizeof(struct hostent))); (struct hostent_data *)((char *)buf +
sizeof(struct hostent)));
else else
ret = -1; /* failure, too smallish buffer size */ ret = -1; /* failure, too smallish buffer size */
@@ -718,12 +752,3 @@ static Curl_addrinfo *my_getaddrinfo(struct SessionHandle *data,
} }
#endif /* end of IPv4-specific code */ #endif /* end of IPv4-specific code */
/*
* local variables:
* eval: (load-file "../curl-mode.el")
* end:
* vim600: fdm=marker
* vim: et sw=2 ts=2 sts=2 tw=78
*/

View File

@@ -7,7 +7,7 @@
* | (__| |_| | _ <| |___ * | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____| * \___|\___/|_| \_\_____|
* *
* Copyright (C) 1998 - 2002, Daniel Stenberg, <daniel@haxx.se>, et al. * Copyright (C) 1998 - 2003, Daniel Stenberg, <daniel@haxx.se>, et al.
* *
* This software is licensed as described in the file COPYING, which * This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms * you should have received as part of this distribution. The terms
@@ -59,7 +59,7 @@ struct Curl_dns_entry *Curl_resolv(struct SessionHandle *data,
int port); int port);
/* unlock a previously resolved dns entry */ /* unlock a previously resolved dns entry */
#define Curl_resolv_unlock(dns) dns->inuse-- void Curl_resolv_unlock(struct SessionHandle *data, struct Curl_dns_entry *dns);
/* for debugging purposes only: */ /* for debugging purposes only: */
void Curl_scan_cache_used(void *user, void *ptr); void Curl_scan_cache_used(void *user, void *ptr);
@@ -79,4 +79,11 @@ int curl_getaddrinfo(char *hostname, char *service,
int line, const char *source); int line, const char *source);
#endif #endif
#ifndef INADDR_NONE
#define CURL_INADDR_NONE (in_addr_t) ~0
#else
#define CURL_INADDR_NONE INADDR_NONE
#endif
#endif #endif

View File

@@ -5,7 +5,7 @@
* | (__| |_| | _ <| |___ * | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____| * \___|\___/|_| \_\_____|
* *
* Copyright (C) 1998 - 2002, Daniel Stenberg, <daniel@haxx.se>, et al. * Copyright (C) 1998 - 2003, Daniel Stenberg, <daniel@haxx.se>, et al.
* *
* This software is licensed as described in the file COPYING, which * This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms * you should have received as part of this distribution. The terms
@@ -232,7 +232,7 @@ CURLcode add_buffer_send(send_buffer *in,
return CURLE_OK; return CURLE_OK;
} }
http->sending = HTTPSEND_BODY;
/* the full buffer was sent, clean up and return */ /* the full buffer was sent, clean up and return */
} }
if(in->buffer) if(in->buffer)
@@ -491,16 +491,16 @@ CURLcode Curl_ConnectHTTPProxyTunnel(struct connectdata *conn,
/* a newline is CRLF in ftp-talk, so the CR is ignored as /* a newline is CRLF in ftp-talk, so the CR is ignored as
the line isn't really terminated until the LF comes */ the line isn't really terminated until the LF comes */
/* output debug output if that is requested */
if(data->set.verbose)
Curl_debug(data, CURLINFO_DATA_IN, line_start, perline);
if('\r' == line_start[0]) { if('\r' == line_start[0]) {
/* end of headers */ /* end of headers */
keepon=FALSE; keepon=FALSE;
break; /* breaks out of loop, not switch */ break; /* breaks out of loop, not switch */
} }
/* output debug output if that is requested */
if(data->set.verbose)
Curl_debug(data, CURLINFO_HEADER_IN, line_start, perline);
if(2 == sscanf(line_start, "HTTP/1.%d %d", if(2 == sscanf(line_start, "HTTP/1.%d %d",
&subversion, &subversion,
&httperror)) { &httperror)) {
@@ -626,6 +626,7 @@ CURLcode Curl_http(struct connectdata *conn)
char *ppath = conn->ppath; /* three previous function arguments */ char *ppath = conn->ppath; /* three previous function arguments */
char *host = conn->name; char *host = conn->name;
const char *te = ""; /* tranfer-encoding */ const char *te = ""; /* tranfer-encoding */
char *ptr;
if(!conn->proto.http) { if(!conn->proto.http) {
/* Only allocate this struct if we don't already have it! */ /* Only allocate this struct if we don't already have it! */
@@ -663,7 +664,8 @@ CURLcode Curl_http(struct connectdata *conn)
host due to a location-follow, we do some weirdo checks here */ host due to a location-follow, we do some weirdo checks here */
if(!data->state.this_is_a_follow || if(!data->state.this_is_a_follow ||
!data->state.auth_host || !data->state.auth_host ||
curl_strequal(data->state.auth_host, conn->hostname)) { curl_strequal(data->state.auth_host, conn->hostname) ||
data->set.http_disable_hostname_check_before_authentication) {
sprintf(data->state.buffer, "%s:%s", sprintf(data->state.buffer, "%s:%s",
data->state.user, data->state.passwd); data->state.user, data->state.passwd);
if(Curl_base64_encode(data->state.buffer, strlen(data->state.buffer), if(Curl_base64_encode(data->state.buffer, strlen(data->state.buffer),
@@ -713,30 +715,30 @@ CURLcode Curl_http(struct connectdata *conn)
} }
} }
if(data->cookies) { ptr = checkheaders(data, "Host:");
co = Curl_cookie_getlist(data->cookies, if(ptr) {
host, ppath, /* If we have a given custom Host: header, we extract the host name
(conn->protocol&PROT_HTTPS?TRUE:FALSE)); in order to possibly use it for cookie reasons later on. */
} char *start = ptr+strlen("Host:");
if (data->change.proxy && *data->change.proxy && char *ptr;
!data->set.tunnel_thru_httpproxy && while(*start && isspace((int)*start ))
!(conn->protocol&PROT_HTTPS)) { start++;
/* The path sent to the proxy is in fact the entire URL */ ptr = start; /* start host-scanning here */
ppath = data->change.url;
}
if(HTTPREQ_POST_FORM == data->set.httpreq) {
/* we must build the whole darned post sequence first, so that we have
a size of the whole shebang before we start to send it */
result = Curl_getFormData(&http->sendit, data->set.httppost,
&http->postsize);
if(CURLE_OK != result) {
/* Curl_getFormData() doesn't use failf() */
failf(data, "failed creating formpost data");
return result;
}
}
if(!checkheaders(data, "Host:")) { /* scan through the string to find the end (space or colon) */
while(*ptr && !isspace((int)*ptr) && !(':'==*ptr))
ptr++;
if(ptr != start) {
int len=ptr-start;
conn->allocptr.cookiehost = malloc(len+1);
if(!conn->allocptr.cookiehost)
return CURLE_OUT_OF_MEMORY;
memcpy(conn->allocptr.cookiehost, start, len);
conn->allocptr.cookiehost[len]=0;
}
}
else {
/* if ptr_host is already set, it is almost OK since we only re-use /* if ptr_host is already set, it is almost OK since we only re-use
connections to the very same host and port, but when we use a HTTP connections to the very same host and port, but when we use a HTTP
proxy we have a persistant connect and yet we must change the Host: proxy we have a persistant connect and yet we must change the Host:
@@ -764,6 +766,32 @@ CURLcode Curl_http(struct connectdata *conn)
conn->remote_port); conn->remote_port);
} }
if(data->cookies) {
co = Curl_cookie_getlist(data->cookies,
conn->allocptr.cookiehost?
conn->allocptr.cookiehost:host, ppath,
(bool)(conn->protocol&PROT_HTTPS?TRUE:FALSE));
}
if (data->change.proxy && *data->change.proxy &&
!data->set.tunnel_thru_httpproxy &&
!(conn->protocol&PROT_HTTPS)) {
/* The path sent to the proxy is in fact the entire URL */
ppath = data->change.url;
}
if(HTTPREQ_POST_FORM == data->set.httpreq) {
/* we must build the whole darned post sequence first, so that we have
a size of the whole shebang before we start to send it */
result = Curl_getFormData(&http->sendit, data->set.httppost,
&http->postsize);
if(CURLE_OK != result) {
/* Curl_getFormData() doesn't use failf() */
failf(data, "failed creating formpost data");
return result;
}
}
if(!checkheaders(data, "Pragma:")) if(!checkheaders(data, "Pragma:"))
http->p_pragma = "Pragma: no-cache\r\n"; http->p_pragma = "Pragma: no-cache\r\n";
@@ -997,6 +1025,9 @@ CURLcode Curl_http(struct connectdata *conn)
headers = headers->next; headers = headers->next;
} }
http->postdata = NULL; /* nothing to post at this point */
Curl_pgrsSetUploadSize(data, 0); /* upload size is 0 atm */
switch(data->set.httpreq) { switch(data->set.httpreq) {
case HTTPREQ_POST_FORM: case HTTPREQ_POST_FORM:
@@ -1179,13 +1210,4 @@ CURLcode Curl_http(struct connectdata *conn)
return CURLE_OK; return CURLE_OK;
} }
/*
* local variables:
* eval: (load-file "../curl-mode.el")
* end:
* vim600: fdm=marker
* vim: et sw=2 ts=2 sts=2 tw=78
*/
#endif #endif

View File

@@ -8,7 +8,7 @@
* | (__| |_| | _ <| |___ * | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____| * \___|\___/|_| \_\_____|
* *
* Copyright (C) 1998 - 2002, Daniel Stenberg, <daniel@haxx.se>, et al. * Copyright (C) 1998 - 2003, Daniel Stenberg, <daniel@haxx.se>, et al.
* *
* This software is licensed as described in the file COPYING, which * This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms * you should have received as part of this distribution. The terms

View File

@@ -5,7 +5,7 @@
* | (__| |_| | _ <| |___ * | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____| * \___|\___/|_| \_\_____|
* *
* Copyright (C) 1998 - 2002, Daniel Stenberg, <daniel@haxx.se>, et al. * Copyright (C) 1998 - 2003, Daniel Stenberg, <daniel@haxx.se>, et al.
* *
* This software is licensed as described in the file COPYING, which * This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms * you should have received as part of this distribution. The terms
@@ -186,15 +186,22 @@ CHUNKcode Curl_httpchunk_read(struct connectdata *conn,
break; break;
case DEFLATE: case DEFLATE:
/* update conn->keep.str to point to the chunk data. */
conn->keep.str = datap;
result = Curl_unencode_deflate_write(conn->data, &conn->keep, piece); result = Curl_unencode_deflate_write(conn->data, &conn->keep, piece);
break; break;
case GZIP: case GZIP:
/* update conn->keep.str to point to the chunk data. */
conn->keep.str = datap;
result = Curl_unencode_gzip_write(conn->data, &conn->keep, piece);
break;
case COMPRESS: case COMPRESS:
default: default:
failf (conn->data, failf (conn->data,
"Unrecognized content encoding type. " "Unrecognized content encoding type. "
"libcurl understands `identity' and `deflate' " "libcurl understands `identity', `deflate' and `gzip' "
"content encodings."); "content encodings.");
return CHUNKE_BAD_ENCODING; return CHUNKE_BAD_ENCODING;
} }
@@ -248,12 +255,4 @@ CHUNKcode Curl_httpchunk_read(struct connectdata *conn,
} }
return CHUNKE_OK; return CHUNKE_OK;
} }
/*
* local variables:
* eval: (load-file "../curl-mode.el")
* end:
* vim600: fdm=marker
* vim: et sw=2 ts=2 sts=2 tw=78
*/
#endif /* CURL_DISABLE_HTTP */ #endif /* CURL_DISABLE_HTTP */

View File

@@ -7,7 +7,7 @@
* | (__| |_| | _ <| |___ * | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____| * \___|\___/|_| \_\_____|
* *
* Copyright (C) 1998 - 2002, Daniel Stenberg, <daniel@haxx.se>, et al. * Copyright (C) 1998 - 2003, Daniel Stenberg, <daniel@haxx.se>, et al.
* *
* This software is licensed as described in the file COPYING, which * This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms * you should have received as part of this distribution. The terms

View File

@@ -5,7 +5,7 @@
* | (__| |_| | _ <| |___ * | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____| * \___|\___/|_| \_\_____|
* *
* Copyright (C) 1998 - 2002, Daniel Stenberg, <daniel@haxx.se>, et al. * Copyright (C) 1998 - 2003, Daniel Stenberg, <daniel@haxx.se>, et al.
* *
* This software is licensed as described in the file COPYING, which * This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms * you should have received as part of this distribution. The terms
@@ -32,7 +32,8 @@
#include <unistd.h> #include <unistd.h>
#endif #endif
#if ! defined(WIN32) && ! defined(__BEOS__) && !defined(__CYGWIN32__) #if ! defined(WIN32) && ! defined(__BEOS__) && !defined(__CYGWIN32__) && \
! defined(__riscos__)
#ifdef HAVE_SYS_SOCKET_H #ifdef HAVE_SYS_SOCKET_H
#include <sys/socket.h> #include <sys/socket.h>
@@ -124,11 +125,3 @@ char *Curl_if2ip(char *interface, char *buf, int buf_size)
#else #else
#define if2ip(x) NULL #define if2ip(x) NULL
#endif #endif
/*
* local variables:
* eval: (load-file "../curl-mode.el")
* end:
* vim600: fdm=marker
* vim: et sw=2 ts=2 sts=2 tw=78
*/

View File

@@ -7,7 +7,7 @@
* | (__| |_| | _ <| |___ * | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____| * \___|\___/|_| \_\_____|
* *
* Copyright (C) 1998 - 2002, Daniel Stenberg, <daniel@haxx.se>, et al. * Copyright (C) 1998 - 2003, Daniel Stenberg, <daniel@haxx.se>, et al.
* *
* This software is licensed as described in the file COPYING, which * This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms * you should have received as part of this distribution. The terms
@@ -24,7 +24,8 @@
***************************************************************************/ ***************************************************************************/
#include "setup.h" #include "setup.h"
#if ! defined(WIN32) && ! defined(__BEOS__) && !defined(__CYGWIN32__) #if ! defined(WIN32) && ! defined(__BEOS__) && !defined(__CYGWIN32__) && \
! defined(__riscos__)
extern char *Curl_if2ip(char *interface, char *buf, int buf_size); extern char *Curl_if2ip(char *interface, char *buf, int buf_size);
#else #else
#define Curl_if2ip(a,b,c) NULL #define Curl_if2ip(a,b,c) NULL

View File

@@ -50,6 +50,7 @@
#include <syslog.h> #include <syslog.h>
#include <string.h> #include <string.h>
#include <krb.h> #include <krb.h>
#include <des.h>
#ifdef HAVE_UNISTD_H #ifdef HAVE_UNISTD_H
#include <unistd.h> /* for getpid() */ #include <unistd.h> /* for getpid() */
@@ -187,6 +188,10 @@ mk_auth(struct krb4_data *d, KTEXT adat,
return ret; return ret;
} }
#ifdef HAVE_KRB_GET_OUR_IP_FOR_REALM
int krb_get_our_ip_for_realm(char *, struct in_addr *);
#endif
static int static int
krb4_auth(void *app_data, struct connectdata *conn) krb4_auth(void *app_data, struct connectdata *conn)
{ {
@@ -328,7 +333,7 @@ CURLcode Curl_krb_kauth(struct connectdata *conn)
if(conn->data->state.buffer[0] != '3'){ if(conn->data->state.buffer[0] != '3'){
Curl_set_command_prot(conn, save); Curl_set_command_prot(conn, save);
return; return CURLE_FTP_WEIRD_SERVER_REPLY;
} }
p = strstr(conn->data->state.buffer, "T="); p = strstr(conn->data->state.buffer, "T=");
@@ -361,16 +366,16 @@ CURLcode Curl_krb_kauth(struct connectdata *conn)
des_string_to_key (conn->data->state.passwd, &key); des_string_to_key (conn->data->state.passwd, &key);
des_key_sched(&key, schedule); des_key_sched(&key, schedule);
des_pcbc_encrypt((des_cblock*)tkt.dat, (des_cblock*)tktcopy.dat, des_pcbc_encrypt((void *)tkt.dat, (void *)tktcopy.dat,
tkt.length, tkt.length,
schedule, &key, DES_DECRYPT); schedule, &key, DES_DECRYPT);
if (strcmp ((char*)tktcopy.dat + 8, if (strcmp ((char*)tktcopy.dat + 8,
KRB_TICKET_GRANTING_TICKET) != 0) { KRB_TICKET_GRANTING_TICKET) != 0) {
afs_string_to_key (passwd, afs_string_to_key(passwd,
krb_realmofhost(conn->hostname), krb_realmofhost(conn->hostname),
&key); &key);
des_key_sched (&key, schedule); des_key_sched(&key, schedule);
des_pcbc_encrypt((des_cblock*)tkt.dat, (des_cblock*)tktcopy.dat, des_pcbc_encrypt((void *)tkt.dat, (void *)tktcopy.dat,
tkt.length, tkt.length,
schedule, &key, DES_DECRYPT); schedule, &key, DES_DECRYPT);
} }
@@ -399,11 +404,3 @@ CURLcode Curl_krb_kauth(struct connectdata *conn)
#endif /* KRB4 */ #endif /* KRB4 */
#endif /* CURL_DISABLE_FTP */ #endif /* CURL_DISABLE_FTP */
/*
* local variables:
* eval: (load-file "../curl-mode.el")
* end:
* vim600: fdm=marker
* vim: et sw=2 ts=2 sts=2 tw=78
*/

View File

@@ -7,7 +7,7 @@
* | (__| |_| | _ <| |___ * | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____| * \___|\___/|_| \_\_____|
* *
* Copyright (C) 1998 - 2002, Daniel Stenberg, <daniel@haxx.se>, et al. * Copyright (C) 1998 - 2003, Daniel Stenberg, <daniel@haxx.se>, et al.
* *
* This software is licensed as described in the file COPYING, which * This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms * you should have received as part of this distribution. The terms

View File

@@ -5,7 +5,7 @@
* | (__| |_| | _ <| |___ * | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____| * \___|\___/|_| \_\_____|
* *
* Copyright (C) 1998 - 2002, Daniel Stenberg, <daniel@haxx.se>, et al. * Copyright (C) 1998 - 2003, Daniel Stenberg, <daniel@haxx.se>, et al.
* *
* This software is licensed as described in the file COPYING, which * This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms * you should have received as part of this distribution. The terms
@@ -222,12 +222,4 @@ CURLcode Curl_ldap(struct connectdata *conn)
return status; return status;
} }
/*
* local variables:
* eval: (load-file "../curl-mode.el")
* end:
* vim600: fdm=marker
* vim: et sw=2 ts=2 sts=2 tw=78
*/
#endif #endif

View File

@@ -8,7 +8,7 @@
* | (__| |_| | _ <| |___ * | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____| * \___|\___/|_| \_\_____|
* *
* Copyright (C) 1998 - 2002, Daniel Stenberg, <daniel@haxx.se>, et al. * Copyright (C) 1998 - 2003, Daniel Stenberg, <daniel@haxx.se>, et al.
* *
* This software is licensed as described in the file COPYING, which * This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms * you should have received as part of this distribution. The terms

View File

@@ -5,7 +5,7 @@
* | (__| |_| | _ <| |___ * | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____| * \___|\___/|_| \_\_____|
* *
* Copyright (C) 1998 - 2002, Daniel Stenberg, <daniel@haxx.se>, et al. * Copyright (C) 1998 - 2003, Daniel Stenberg, <daniel@haxx.se>, et al.
* *
* This software is licensed as described in the file COPYING, which * This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms * you should have received as part of this distribution. The terms

View File

@@ -7,7 +7,7 @@
* | (__| |_| | _ <| |___ * | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____| * \___|\___/|_| \_\_____|
* *
* Copyright (C) 1998 - 2002, Daniel Stenberg, <daniel@haxx.se>, et al. * Copyright (C) 1998 - 2003, Daniel Stenberg, <daniel@haxx.se>, et al.
* *
* This software is licensed as described in the file COPYING, which * This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms * you should have received as part of this distribution. The terms

View File

@@ -6,7 +6,7 @@
* | (__| |_| | _ <| |___ * | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____| * \___|\___/|_| \_\_____|
* *
* Copyright (C) 1998 - 2002, Daniel Stenberg, <daniel@haxx.se>, et al. * Copyright (C) 1998 - 2003, Daniel Stenberg, <daniel@haxx.se>, et al.
* *
* This software is licensed as described in the file COPYING, which * This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms * you should have received as part of this distribution. The terms
@@ -221,11 +221,3 @@ int curl_fclose(FILE *file, int line, const char *source)
int VOID_VAR_MEMDEBUG; int VOID_VAR_MEMDEBUG;
#endif #endif
#endif /* MALLOCDEBUG */ #endif /* MALLOCDEBUG */
/*
* local variables:
* eval: (load-file "../curl-mode.el")
* end:
* vim600: fdm=marker
* vim: et sw=2 ts=2 sts=2 tw=78
*/

View File

@@ -6,7 +6,7 @@
* | (__| |_| | _ <| |___ * | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____| * \___|\___/|_| \_\_____|
* *
* Copyright (C) 1998 - 2002, Daniel Stenberg, <daniel@haxx.se>, et al. * Copyright (C) 1998 - 2003, Daniel Stenberg, <daniel@haxx.se>, et al.
* *
* This software is licensed as described in the file COPYING, which * This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms * you should have received as part of this distribution. The terms
@@ -28,6 +28,9 @@
#include <sys/types.h> #include <sys/types.h>
#endif #endif
#ifdef WIN32
#include <winsock.h>
#endif
#ifdef HAVE_SYS_SOCKET_H #ifdef HAVE_SYS_SOCKET_H
#include <sys/socket.h> #include <sys/socket.h>
#endif #endif

View File

@@ -1180,11 +1180,3 @@ int main()
} }
#endif #endif
/*
* local variables:
* eval: (load-file "../curl-mode.el")
* end:
* vim600: fdm=marker
* vim: et sw=2 ts=2 sts=2 tw=78
*/

Some files were not shown because too many files have changed in this diff Show More