diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..2fbb823 --- /dev/null +++ b/.gitignore @@ -0,0 +1 @@ +SOURCES/lftp-4.4.8.tar.xz diff --git a/.lftp.metadata b/.lftp.metadata new file mode 100644 index 0000000..16ef4ea --- /dev/null +++ b/.lftp.metadata @@ -0,0 +1 @@ +bcd12f51e8389c72a8348c09188a31f7e940188d SOURCES/lftp-4.4.8.tar.xz diff --git a/SOURCES/lftp-4.0.9-date_fmt.patch b/SOURCES/lftp-4.0.9-date_fmt.patch new file mode 100644 index 0000000..50fe672 --- /dev/null +++ b/SOURCES/lftp-4.0.9-date_fmt.patch @@ -0,0 +1,30 @@ +diff -up lftp-4.2.1/src/Http.cc.date_fmt lftp-4.2.1/src/Http.cc +--- lftp-4.2.1/src/Http.cc.date_fmt 2011-03-25 15:35:42.000000000 +0100 ++++ lftp-4.2.1/src/Http.cc 2011-03-30 14:40:54.170096624 +0200 +@@ -29,6 +29,7 @@ + #include + #include + #include ++#include + #include + #include + #include +@@ -565,15 +566,10 @@ void Http::SendRequest(const char *conne + (long long)((limit==FILE_END || limit>entity_size ? entity_size : limit)-1), + (long long)entity_size); + } +- if(entity_date!=NO_DATE) ++ if(entity_date!=NO_DATE && entity_date>0L && entity_datetm_wday],t->tm_mday,month_names[t->tm_mon], +- t->tm_year+1900,t->tm_hour,t->tm_min,t->tm_sec); ++ char d[256]; ++ strftime(d, sizeof(d), "%a, %d %b %H:%M:%S %Y GMT", gmtime(&entity_date)); + Send("Last-Modified: %s\r\n",d); + } + break; diff --git a/SOURCES/lftp-4.2.0-man.patch b/SOURCES/lftp-4.2.0-man.patch new file mode 100644 index 0000000..4b0b690 --- /dev/null +++ b/SOURCES/lftp-4.2.0-man.patch @@ -0,0 +1,412 @@ +diff -up lftp-4.3.3/doc/lftp.1.man lftp-4.3.3/doc/lftp.1 +--- lftp-4.3.3/doc/lftp.1.man 2011-10-19 15:06:57.000000000 +0200 ++++ lftp-4.3.3/doc/lftp.1 2011-10-20 15:27:30.394328377 +0200 +@@ -1,5 +1,5 @@ + .\" +-.\" lftp.1 - Sophisticated ftp program ++.\" lftp.1 - Sophisticated file transfer program + .\" + .\" This file is part of lftp. + .\" +@@ -61,28 +61,28 @@ lftp \- Sophisticated file transfer prog + This man page documents lftp version 4.4.6. + + .SH "DESCRIPTION" +-\fBlftp\fR is a file transfer program that allows sophisticated ftp, http ++\fBlftp\fR is a file transfer program that allows sophisticated FTP, HTTP + and other connections to other hosts. If \fIsite\fR is specified then lftp + will connect to that site otherwise a connection has to be established with + the open command. + .PP +-\fBlftp\fP can handle several file access methods - ftp, ftps, http, https, +-hftp, fish, sftp and file (https and ftps are only available when lftp is ++\fBlftp\fP can handle several file access methods - FTP, FTPS, HTTP, HTTPS, ++HFTP, FISH, SFTP and file (HTTPS and FTPS are only available when lftp is + compiled with GNU TLS or OpenSSL library). You can specify the method to use in `open +-URL' command, e.g. `open http://www.us.kernel.org/pub/linux'. hftp is +-ftp-over-http-proxy protocol. It can be used automatically instead of ftp ++URL' command, e.g. `open http://www.us.kernel.org/pub/linux'. HFTP is ++ftp-over-http-proxy protocol. It can be used automatically instead of FTP + if ftp:proxy is set to `http://proxy[:port]'. Fish is a protocol working + over an ssh connection to a unix account. SFtp is a protocol implemented +-in ssh2 as sftp subsystem. ++in SSH2 as SFTP subsystem. + .PP + Besides FTP-like protocols, lftp has support for BitTorrent protocol + as `torrent' command. Seeding is also supported. + + .PP +-Every operation in \fBlftp\fP is reliable, that is any not fatal error is ++Every operation in \fBlftp\fP is reliable, that is any not-fatal error is + ignored and the operation is repeated. So if downloading breaks, it +-will be restarted from the point automatically. Even if ftp server +-does not support REST command, \fBlftp\fP will try to retrieve the file from ++will be restarted from the point automatically. Even if FTP server ++does not support the REST command, \fBlftp\fP will try to retrieve the file from + the very beginning until the file is transferred completely. + + \fBlftp\fP has shell-like command syntax allowing you to launch several +@@ -95,8 +95,8 @@ commands allow redirecting their output + pipe to external command. Commands can be executed conditionally based + on termination status of previous command (&&, ||). + .PP +-If you exit \fBlftp\fP when some jobs are not finished yet, \fBlftp\fP will move +-itself to nohup mode in background. The same happens when you have a ++If you exit \fBlftp\fP before all jobs are not finished yet, \fBlftp\fP will move ++itself to nohup mode in background. The same thing happens with a + real modem hangup or when you close an xterm. + .PP + \fBlftp\fP has built-in mirror which can download or update a whole directory +@@ -119,7 +119,7 @@ all variables and their values or `set \ + Variable names can be abbreviated and prefix can be omitted unless the + rest becomes ambiguous. + .PP +-If lftp was compiled with OpenSSL (configure \-\-with\-openssl), then it includes software developed ++If lftp was compiled with OpenSSL (configure \-\-with\-openssl) it includes software developed + by the OpenSSL Project for use in the OpenSSL Toolkit. (http://www.openssl.org/) + + .SS Commands +@@ -232,11 +232,11 @@ the debug output to a file. + + .BR echo " [" \-n "] \fIstring\fR" + .PP +-guess what it does. ++Prints (echos) the given string to the display. + + .BR eval " [" -f " \fIformat\fR ] " \fIargs...\fR + .PP +-without -f it just executes given arguments as a command. With -f, arguments ++without -f it executes given arguments as a command. With -f, arguments + are transformed into a new command. The format can contain plain text and + placeholders $0...$9 and $@, corresponding to the arguments. + +@@ -275,7 +275,7 @@ put ftp://... + mput ftp://.../* + mget \-O ftp://... ftp://.../* + .De +-or other combinations to get FXP transfer (directly between two ftp servers). ++or other combinations to get FXP transfer (directly between two FTP servers). + lftp would fallback to plain copy (via client) if FXP transfer cannot be + initiated or ftp:use-fxp is false. + +@@ -566,7 +566,7 @@ not match to excludes after the include, + and the first check is exclude. Directories are matched with a slash appended. + .PP + Note that symbolic links are not created when uploading to remote server, +-because ftp protocol cannot do it. To upload files the links refer ++because FTP protocol cannot do it. To upload files the links refer + to, use `mirror \-RL' command (treat symbolic links as files). + .PP + For options \-\-newer\-than and \-\-older\-than you can either specify a +@@ -586,9 +586,9 @@ Verbosity level can be selected using \- + only newer files even if size is different. By default older files are transferred and replace newer ones. + .PP + You can mirror between two servers if you specify URLs instead of directories. +-FXP is used automatically for transfers between ftp servers, if possible. ++FXP is automatically used for transfers between FTP servers, if possible. + .PP +-Some ftp servers hide dot-files by default (e.g. \fI.htaccess\fP), and show ++Some FTP servers hide dot-files by default (e.g. \fI.htaccess\fP), and show + them only when LIST command is used with \-a option. In such case try to use + `set ftp:list-options \-a'. + +@@ -654,7 +654,7 @@ List remote file names + .BR "[" \-u " \fIuser\fP[", "\fIpass\fP]]" + .BR "[" \-p " \fIport\fP] \fIhost\fP|\fIurl\fP" + .PP +-Select an ftp server. ++Select a FTP server. + + .B pget + .RI [ OPTS ] +@@ -964,7 +964,7 @@ Print \fBlftp\fR version. + Wait for specified job to terminate. If jobno is omitted, wait for last + backgrounded job. + .PP +-`wait all' waits for all jobs termination. ++`wait all' waits for all jobs to terminate. + + .B zcat + \fIfiles\fP +@@ -1244,23 +1244,23 @@ Send this string in ACCT command after l + The closure for this setting has format \fIuser@host\fP. + .TP + .BR ftp:anon-pass \ (string) +-sets the password used for anonymous ftp access authentication. ++sets the password used for anonymous FTP access authentication. + Default is "lftp@". + .TP + .BR ftp:anon-user \ (string) +-sets the user name used for anonymous ftp access authentication. ++sets the user name used for anonymous FTP access authentication. + Default is "anonymous". + .TP + .BR ftp:auto-sync-mode \ (regex) + if first server message matches this regex, turn on sync mode for that host. + .TP + .BR ftp:charset \ (string) +-the character set used by ftp server in requests, replies and file listings. ++the character set used by FTP server in requests, replies and file listings. + Default is empty which means the same as local. This setting is only used + when the server does not support UTF8. + .TP + .BR ftp:client \ (string) +-the name of ftp client to send with CLNT command, if supported by server. ++the name of FTP client to send with CLNT command, if supported by server. + If it is empty, then no CLNT command will be sent. + .TP + .BR ftp:bind-data-socket \ (boolean) +@@ -1275,14 +1275,14 @@ instead of the one returned by PASV comm + Default is true. + .TP + .BR ftp:fxp-passive-source \ (boolean) +-if true, lftp will try to set up source ftp server in passive mode first, ++if true, lftp will try to set up source FTP server in passive mode first, + otherwise destination one. If first attempt fails, lftp tries to set them up + the other way. If the other disposition fails too, lftp falls back to plain + copy. See also ftp:use-fxp. + .TP + .BR ftp:home \ (string) + Initial directory. Default is empty string which means auto. Set this to `/' +-if you don't like the look of %2F in ftp URLs. The closure for this setting ++if you don't like the look of %2F in FTP URLs. The closure for this setting + has format \fIuser@host\fP. + .TP + .BR ftp:ignore-pasv-address \ (boolean) +@@ -1301,11 +1301,11 @@ Default is empty. + .TP + .BR ftp:nop-interval \ (seconds) + delay between NOOP commands when downloading tail of a file. This is useful +-for ftp servers which send "Transfer complete" message before flushing ++for FTP servers which send "Transfer complete" message before flushing + data transfer. In such cases NOOP commands can prevent connection timeout. + .TP + .BR ftp:passive-mode \ (boolean) +-sets passive ftp mode. This can be useful if you are behind a firewall or a ++sets passive FTP mode. This can be useful if you are behind a firewall or a + dumb masquerading router. In passive mode lftp uses PASV command, not the + PORT command which is used in active mode. In passive mode lftp itself + makes the data connection to the server; in active mode the server connects +@@ -1323,13 +1323,13 @@ Format is min-max, or `full' or `any' to + use EPSV as preferred passive mode. Default is `false'. + .TP + .BR ftp:proxy \ (URL) +-specifies ftp proxy to use. +-To disable proxy set this to empty string. Note that it is an ftp proxy which +-uses ftp protocol, not ftp over http. Default value is taken from environment +-variable \fBftp_proxy\fP if it starts with ``ftp://''. If your ftp proxy ++specifies FTP proxy to use. ++To disable proxy set this to empty string. Note that it is a FTP proxy which ++uses FTP protocol, not FTP over HTTP. Default value is taken from environment ++variable \fBftp_proxy\fP if it starts with ``ftp://''. If your FTP proxy + requires authentication, specify user name and password in the URL. +-If ftp:proxy starts with http:// then hftp protocol (ftp over http proxy) is used instead +-of ftp automatically. ++If ftp:proxy starts with http:// then hftp protocol (FTP over HTTP proxy) is used instead ++of FTP automatically. + .TP + .BR ftp:proxy-auth-type \ (string) + When set to ``joined'', lftp sends ``user@proxy_user@ftp.example.org'' as +@@ -1352,7 +1352,7 @@ then proxy password. The site user and p + .TP + .BR ftp:rest-list \ (boolean) + allow usage of REST command before LIST command. This might be useful for +-large directories, but some ftp servers silently ignore REST before LIST. ++large directories, but some FTP servers silently ignore REST before LIST. + .TP + .BR ftp:rest-stor \ (boolean) + if false, lftp will not try to use REST before STOR. This can be useful +@@ -1379,8 +1379,8 @@ do not send plain text password over the + skey/opie is not available, assume failed login. Off by default. + .TP + .BR ftp:ssl-allow \ (boolean) +-if true, try to negotiate SSL connection with ftp server for non-anonymous +-access. Default is true. This and other ssl settings are only available if lftp was compiled ++if true, try to negotiate SSL connection with FTP server for non-anonymous ++access. Default is true. This and other SSL settings are only available if lftp was compiled + with an ssl/tls library. + .TP + .BR ftp:ssl-data-use-keys \ (boolean) +@@ -1393,17 +1393,17 @@ if true, refuse to send password in clea + Default is false. + .TP + .BR ftp:ssl-protect-data \ (boolean) +-if true, request ssl connection for data transfers. This is cpu-intensive ++if true, request SSL connection for data transfers. This is cpu-intensive + but provides privacy. Default is false. + .TP + .BR ftp:ssl-protect-fxp \ (boolean) +-if true, request ssl connection for data transfer between two ftp servers +-in FXP mode. CPSV or SSCN command will be used in that case. If ssl connection ++if true, request SSL connection for data transfer between two FTP servers ++in FXP mode. CPSV or SSCN command will be used in that case. If SSL connection + fails for some reason, lftp would try unprotected FXP transfer unless + ftp:ssl-force is set for any of the two servers. Default is false. + .TP + .BR ftp:ssl-protect-list \ (boolean) +-if true, request ssl connection for file list transfers. Default is true. ++if true, request SSL connection for file list transfers. Default is true. + .TP + .BR ftp:ssl-use-ccc \ (boolean) + if true, lftp would issue CCC command after logon, thus disable +@@ -1414,10 +1414,10 @@ interval between STAT commands. Default + .TP + .BR ftp:sync-mode \ (boolean) + if true, lftp will send one command at a time and wait for +-response. This might be useful if you are using a buggy ftp server or ++response. This might be useful if you are using a buggy FTP server or + router. When it is off, lftp sends a pack of commands and waits for + responses - it speeds up operation when round trip time is significant. +-Unfortunately it does not work with all ftp servers and some routers have ++Unfortunately it does not work with all FTP servers and some routers have + troubles with it, so it is on by default. + .TP + .BR ftp:timezone \ (string) +@@ -1536,11 +1536,11 @@ allow server/proxy side caching for ftp- + specify corresponding HTTP request header. + .TP + .BR hftp:proxy \ (URL) +-specifies http proxy for ftp-over-http protocol (hftp). The protocol hftp +-cannot work without a http proxy, obviously. ++specifies HTTP proxy for FTP-over-HTTP protocol (hftp). The protocol hftp ++cannot work without a HTTP proxy, obviously. + Default value is taken from environment + variable \fBftp_proxy\fP if it starts with ``http://'', otherwise from +-environment variable \fBhttp_proxy\fP. If your ftp proxy ++environment variable \fBhttp_proxy\fP. If your FTP proxy + requires authentication, specify user name and password in the URL. + .TP + .BR hftp:use-allprop \ (boolean) +@@ -1583,23 +1583,23 @@ send this cookie to server. A closure is + set cookie/www.somehost.com "param=value" + .TP + .BR http:post-content-type " (string)" +-specifies value of Content-Type http request header for POST method. ++specifies value of Content-Type HTTP request header for POST method. + Default is ``application/x-www-form-urlencoded''. + .TP + .BR http:proxy \ (URL) +-specifies http proxy. It is used when lftp works over http protocol. ++specifies HTTP proxy. It is used when lftp works over HTTP protocol. + Default value is taken from environment variable \fBhttp_proxy\fP. + If your proxy requires authentication, specify user name and password + in the URL. + .TP + .BR http:put-method " (PUT or POST)" +-specifies which http method to use on put. ++specifies which HTTP method to use on put. + .TP + .BR http:put-content-type " (string)" +-specifies value of Content-Type http request header for PUT method. ++specifies value of Content-Type HTTP request header for PUT method. + .TP + .BR http:referer " (string)" +-specifies value for Referer http request header. Single dot `.' expands ++specifies value for Referer HTTP request header. Single dot `.' expands + to current directory URL. Default is `.'. Set to empty string to disable + Referer header. + .TP +@@ -1608,11 +1608,11 @@ if true, lftp modifies http:cookie varia + .TP + .BR http:use-mkcol \ (boolean) + if set to off, lftp will try to use `PUT' instead of `MKCOL' to create +-directories with http protocol. Default is on. ++directories with HTTP protocol. Default is on. + .TP + .BR http:use-propfind \ (boolean) + if set to off, lftp will not try to use `PROPFIND' to get directory contents +-with http protocol and use `GET' instead. Default is on. ++with HTTP protocol and use `GET' instead. Default is on. + .TP + .BR http:user-agent " (string)" + the string lftp sends in User-Agent header of HTTP request. +@@ -1700,7 +1700,7 @@ contains comma separated list of domains + Default is taken from environment variable \fBno_proxy\fP. + .TP + .BR net:persist-retries " (number)" +-ignore this number of hard errors. Useful to login to buggy ftp servers which ++ignore this number of hard errors. Useful to login to buggy FTP servers which + reply 5xx when there is too many users. + .TP + .BR net:reconnect-interval-base \ (seconds) +@@ -1710,12 +1710,12 @@ operation. + .TP + .BR net:reconnect-interval-max \ (seconds) + sets maximum reconnect interval. When current interval after multiplication +-by net:reconnect-interval-multiplier reachs this value (or exceeds it), it ++by net:reconnect-interval-multiplier reaches this value (or exceeds it), it + is reset back to net:reconnect-interval-base. + .TP + .BR net:reconnect-interval-multiplier \ (real\ number) + sets multiplier by which base interval is multiplied each time new attempt +-to perform an operation fails. When the interval reachs maximum, it is reset ++to perform an operation fails. When the interval reaches maximum, it is reset + to base value. See net:reconnect-interval-base and net:reconnect-interval-max. + .TP + .BR net:socket-bind-ipv4 " (ipv4 address)" +@@ -1733,7 +1733,7 @@ default. + .TP + .BR net:socket-maxseg \ (bytes) + use given size for TCP_MAXSEG socket option. Not all operating systems support +-this option, but linux does. ++this option, but Linux does. + .TP + .BR net:timeout " (time interval)" + sets the network protocol timeout. +@@ -1746,9 +1746,9 @@ save pget transfer status this often. Se + The status is saved to a file with suffix \fI.lftp-pget-status\fP. + .TP + .BR sftp:charset \ (string) +-the character set used by sftp server in file names and file listings. ++the character set used by SFTP server in file names and file listings. + Default is empty which means the same as local. This setting is only used +-for sftp protocol version prior to 4. Version 4 and later always use UTF-8. ++for SFTP protocol version prior to 4. Version 4 and later always use UTF-8. + .TP + .BR sftp:connect-program \ (string) + the program to use for connecting to remote server. It should support `\-l' option +@@ -1771,7 +1771,7 @@ Default is `sftp'. You can use rsh as tr + set sftp:connect-program rsh + set sftp:server-program /usr/libexec/openssh/sftp-server + .De +-Similarly you can run sftp over ssh1. ++Similarly you can run SFTP over SSH1. + .TP + .BR sftp:size-read \ (number) + Block size for reading. Default is 0x8000. +@@ -1806,7 +1806,7 @@ if set to yes, then verify server's cert + Certificate Authority and not be on Certificate Revocation List. + .TP + .BR torrent:ip " (ipv4 address)" +-IP address to send to the tracker. Specify it if you are using an http proxy. ++IP address to send to the tracker. Specify it if you are using an HTTP proxy. + .TP + .BR torrent:ipv6 " (ipv6 address)" + IPv6 address to send to the tracker. By default, first found global unicast address is used. +@@ -1904,7 +1904,7 @@ They can also have a prefix: 0 - octal, + .SS FTP asynchronous mode (pipelining) + .PP + .B Lftp +-can speed up ftp operations by sending several commands at once and ++can speed up FTP operations by sending several commands at once and + then checking all the responses. See ftp:sync-mode variable. Sometimes + this does not work, thus synchronous mode is the default. You can try + to turn synchronous mode off and see if it works for you. It is known +@@ -1914,7 +1914,7 @@ incorrectly in the case of several FTP c + RFC959 says: ``The user-process sending another command before the + completion reply would be in violation of protocol; but server-FTP + processes should queue any commands that arrive while a preceding +-command is in progress''. Also, RFC1123 says: ``Implementors MUST ++command is in progress''. Also, RFC1123 says: ``Implementers MUST + NOT assume any correspondence between READ boundaries on the control + connection and the Telnet EOL sequences (CR LF).'' and ``a single READ + from the control connection may include more than one FTP command''. +@@ -2004,7 +2004,7 @@ The file is used to store last working d + File name suffix is the host name. + .TP + .I "~/.netrc" +-The file is consulted to get default login and password to ftp server. ++The file is consulted to get default login and password to FTP server. + Passwords are also searched here if an URL with user name but with no + password is used. + diff --git a/SOURCES/lftp-4.4.8-doc-rename.patch b/SOURCES/lftp-4.4.8-doc-rename.patch new file mode 100644 index 0000000..120fbd3 --- /dev/null +++ b/SOURCES/lftp-4.4.8-doc-rename.patch @@ -0,0 +1,13 @@ +diff -up lftp-4.4.8/doc/lftp.1.doc-rename lftp-4.4.8/doc/lftp.1 +--- lftp-4.4.8/doc/lftp.1.doc-rename 2013-11-27 12:00:35.472739297 +0100 ++++ lftp-4.4.8/doc/lftp.1 2013-11-27 12:03:06.101770435 +0100 +@@ -1938,6 +1938,9 @@ of the file. + .BR xfer:verify-command \ (string) + the command to validate file integrity. The only argument is the path to + the file. ++.TP ++.BR xfer:auto-rename (boolean) ++suggested filenames provided by the server are used if user explicitly sets this option to ’on’. As this could be security risk, default is off. + + .PP + The name of a variable can be abbreviated unless it becomes diff --git a/SOURCES/lftp-4.4.8-hangs-mirror.patch b/SOURCES/lftp-4.4.8-hangs-mirror.patch new file mode 100644 index 0000000..47e6910 --- /dev/null +++ b/SOURCES/lftp-4.4.8-hangs-mirror.patch @@ -0,0 +1,299 @@ +--- a/src/SFtp.cc ++++ a/src/SFtp.cc +@@ -299,12 +299,7 @@ void SFtp::MoveConnectionHere(SFtp *o) + recv_translate=o->recv_translate.borrow(); + send_translate=o->send_translate.borrow(); + rate_limit=o->rate_limit.borrow(); +- expect_queue_size=o->expect_queue_size; o->expect_queue_size=0; +- expect_chain=o->expect_chain; o->expect_chain=0; +- expect_chain_end=o->expect_chain_end; +- if(expect_chain_end==&o->expect_chain) +- expect_chain_end=&expect_chain; +- o->expect_chain_end=&o->expect_chain; ++ expect_queue.move_here(o->expect_queue); + timeout_timer.Reset(o->timeout_timer); + ssh_id=o->ssh_id; + state=CONNECTED; +@@ -337,10 +332,6 @@ void SFtp::Init() + eof=false; + received_greeting=false; + password_sent=0; +- expect_queue_size=0; +- expect_chain=0; +- expect_chain_end=&expect_chain; +- ooo_chain=0; + protocol_version=0; + send_translate=0; + recv_translate=0; +@@ -693,8 +684,7 @@ void SFtp::Close() + CloseHandle(Expect::IGNORE); + super::Close(); + // don't need these out-of-order packets anymore +- while(ooo_chain) +- DeleteExpect(&ooo_chain); ++ ooo_chain.truncate(); + if(recv_buf) + recv_buf->Resume(); + } +@@ -796,7 +786,7 @@ void SFtp::HandleExpect(Expect *e) + SetError(NO_FILE,strerror(ENOTDIR)); + break; + } +- if(mode==CHANGE_DIR && RespQueueIsEmpty()) ++ if(mode==CHANGE_DIR && GetExpectCount(Expect::CWD)==0) + { + cwd.Set(file); + eof=true; +@@ -869,11 +859,15 @@ void SFtp::HandleExpect(Expect *e) + } + else + { +- if(e->next!=ooo_chain) +- LogNote(9,"put a packet with id=%d on out-of-order chain (need_pos=%lld packet_pos=%lld)", +- reply->GetID(),(long long)(pos+file_buf->Size()),(long long)r->pos); +- e->next=ooo_chain; +- ooo_chain=e; ++ LogNote(9,"put a packet with id=%d on out-of-order chain (need_pos=%lld packet_pos=%lld)", ++ reply->GetID(),(long long)(pos+file_buf->Size()),(long long)r->pos); ++ if(ooo_chain.count()>=64) ++ { ++ LogError(0,"Too many out-of-order packets"); ++ Disconnect(); ++ return; ++ } ++ ooo_chain.append(e); + return; + } + } +@@ -925,7 +919,7 @@ void SFtp::HandleExpect(Expect *e) + LogNote(9,"eof"); + eof=true; + state=DONE; +- if(file_buf && !ooo_chain) ++ if(file_buf && ooo_chain.count()==0) + file_buf->PutEOF(); + break; + } +@@ -1006,22 +1000,20 @@ int SFtp::HandleReplies() + if(!recv_buf) + return MOVED; + +- int i=0; +- Expect *ooo_scan=ooo_chain; +- while(ooo_scan) +- { +- Expect *next=ooo_scan->next; +- ooo_chain=next; +- HandleExpect(ooo_scan); +- ooo_scan=next; +- if(++i>64) +- { +- LogError(0,"Too many out-of-order packets"); +- Disconnect(); +- return MOVED; ++ if(file_buf) { ++ off_t need_pos=pos+file_buf->Size(); ++ // there are usually a few of out-of-order packets, no need for fast search ++ for(int i=0; ihas_data_at_pos(need_pos)) { ++ Expect *e=ooo_chain[i]; ++ ooo_chain[i]=0; // to keep the Expect ++ ooo_chain.remove(i); ++ HandleExpect(e); ++ } + } + } +- if(!ooo_chain && eof && file_buf && !file_buf->Eof()) ++ ++ if(ooo_chain.count()==0 && eof && file_buf && !file_buf->Eof()) + file_buf->PutEOF(); + + if(recv_buf->Size()<4) +@@ -1066,51 +1058,20 @@ int SFtp::HandleReplies() + HandleExpect(e); + return MOVED; + } +-SFtp::Expect **SFtp::FindExpect(Packet *p) +-{ +- unsigned id=p->GetID(); +- for(Expect **scan=&expect_chain; *scan; scan=&scan[0]->next) +- { +- if(scan[0]->request->GetID()==id) +- { +- assert(!scan[0]->reply); +- scan[0]->reply=p; +- return scan; +- } +- } +- return 0; +-} + void SFtp::PushExpect(Expect *e) + { +- e->next=*expect_chain_end; +- *expect_chain_end=e; +- expect_chain_end=&e->next; +- expect_queue_size++; +-} +-void SFtp::DeleteExpect(Expect **e) +-{ +- if(expect_chain_end==&e[0]->next) +- expect_chain_end=e; +- Expect *d=*e; +- *e=e[0]->next; +- delete d; +- expect_queue_size--; ++ expect_queue.add(e->request->GetKey(),e); + } + SFtp::Expect *SFtp::FindExpectExclusive(Packet *p) + { +- Expect **e=FindExpect(p); +- if(!e || !*e) +- return 0; +- Expect *res=*e; +- if(expect_chain_end==&res->next) +- expect_chain_end=e; +- *e=res->next; +- expect_queue_size--; +- return res; ++ Expect *e=expect_queue.borrow(p->GetKey()); ++ if(e) ++ e->reply=p; ++ return e; + } + void SFtp::CloseExpectQueue() + { +- for(Expect *e=expect_chain; e; e=e->next) ++ for(Expect *e=expect_queue.each_begin(); e; e=expect_queue.each_next()) + { + switch(e->tag) + { +@@ -1133,6 +1094,14 @@ void SFtp::CloseExpectQueue() + } + } + ++int SFtp::GetExpectCount(Expect::expect_t tag) ++{ ++ int count=0; ++ for(Expect *e=expect_queue.each_begin(); e; e=expect_queue.each_next()) ++ count+=(e->tag==tag); ++ return count; ++} ++ + Glob *SFtp::MakeGlob(const char *pat) + { + return new GenericGlob(this,pat); +--- a/src/SFtp.h ++++ a/src/SFtp.h +@@ -28,6 +28,7 @@ + #include + #include + #include "FileSet.h" ++#include "xmap.h" + + class SFtp : public SSH_Access + { +@@ -291,6 +292,7 @@ public: + packet_type GetPacketType() { return type; } + const char *GetPacketTypeText(); + unsigned GetID() const { return id; } ++ const xstring& GetKey() { return xstring::get_tmp((const char*)&id,sizeof(id)); } + void SetID(unsigned new_id) { id=new_id; } + void DropData(Buffer *b) { b->Skip(4+(length>0?length:0)); } + bool TypeIs(packet_type t) const { return type==t; } +@@ -674,10 +676,15 @@ private: + + Ref request; + Ref reply; +- Expect *next; + int i; + expect_t tag; + Expect(Packet *req,expect_t t,int j=0) : request(req), i(j), tag(t) {} ++ ++ bool has_data_at_pos(off_t pos) const { ++ if(!reply->TypeIs(SSH_FXP_DATA) || !request->TypeIs(SSH_FXP_READ)) ++ return false; ++ return request.Cast()->pos==pos; ++ } + }; + + void PushExpect(Expect *); +@@ -685,26 +692,22 @@ private: + int HandlePty(); + void HandleExpect(Expect *); + void CloseExpectQueue(); ++ int GetExpectCount(Expect::expect_t tag); + void CloseHandle(Expect::expect_t e); + int ReplyLogPriority(int); + +- int expect_queue_size; +- Expect *expect_chain; +- Expect **expect_chain_end; +- Expect **FindExpect(Packet *reply); +- void DeleteExpect(Expect **); +- Expect *FindExpectExclusive(Packet *reply); +- Expect *ooo_chain; // out of order replies buffered ++ xmap_p expect_queue; ++ const xstring& expect_key(unsigned id); + +- int RespQueueIsEmpty() { return expect_chain==0; } +- int RespQueueSize() { return expect_queue_size; } +- void EmptyRespQueue() +- { +- while(expect_chain) +- DeleteExpect(&expect_chain); +- while(ooo_chain) +- DeleteExpect(&ooo_chain); +- } ++ Expect *FindExpectExclusive(Packet *reply); ++ xarray_p ooo_chain; // out of order replies buffered ++ ++ int RespQueueSize() const { return expect_queue.count(); } ++ int RespQueueIsEmpty() const { return RespQueueSize()==0; } ++ void EmptyRespQueue() { ++ expect_queue.empty(); ++ ooo_chain.truncate(); ++ } + + bool GetBetterConnection(int level,bool limit_reached); + void MoveConnectionHere(SFtp *o); +--- a/src/xmap.cc ++++ a/src/xmap.cc +@@ -133,8 +137,9 @@ void _xmap::_remove(entry **ep) + if(!ep || !*ep) + return; + entry *e=*ep; ++ e->key.unset(); + *ep=e->next; +- delete e; ++ xfree(e); + entry_count--; + } + +--- a/src/xmap.h ++++ b/src/xmap.h +@@ -103,6 +103,7 @@ template T xmap::zero; + + template class xmap_p : public _xmap + { ++void dispose(T *p) { delete p; } + public: + xmap_p() : _xmap(sizeof(T*)) {} + ~xmap_p() { +@@ -136,7 +137,7 @@ public: + } + void add(const xstring& key,T *e0) { + entry *e=_add(key); +- delete(payload(e)); ++ dispose(payload(e)); + payload_Lv(e)=e0; + } + void add(const char *key,T *e0) { add(xstring::get_tmp(key),e0); } +@@ -148,7 +148,7 @@ public: + void empty() { + for(int i=0; ilong_desc==0 && c->short_desc==0) + { + printf(_("Sorry, no help for %s\n"),cmd); +- return; ++ return true; + } + if(c->short_desc==0 && !strchr(c->long_desc,' ')) + { + printf(_("%s is a built-in alias for %s\n"),cmd,c->long_desc); + print_cmd_help(c->long_desc); +- return; ++ return true; + } + if(c->short_desc) + printf(_("Usage: %s\n"),_(c->short_desc)); + if(c->long_desc) + printf("%s",_(c->long_desc)); +- return; ++ return true; + } + const char *a=Alias::Find(cmd); + if(a) + { + printf(_("%s is an alias to `%s'\n"),cmd,a); +- return; ++ return true; + } + if(part==0) + printf(_("No such command `%s'. Use `help' to see available commands.\n"),cmd); + else + printf(_("Ambiguous command `%s'. Use `help' to see available commands.\n"),cmd); ++ return false; + } + + void CmdExec::print_cmd_index() +@@ -2610,12 +2611,14 @@ CMD(help) + { + if(args->count()>1) + { ++ exit_code=0; + for(;;) + { + const char *cmd=args->getnext(); + if(cmd==0) + break; +- parent->print_cmd_help(cmd); ++ if(!parent->print_cmd_help(cmd)) ++ exit_code=1; + } + return 0; + } +-- +2.1.0 + diff --git a/SOURCES/lftp-4.4.8-max-retries.patch b/SOURCES/lftp-4.4.8-max-retries.patch new file mode 100644 index 0000000..687ce6a --- /dev/null +++ b/SOURCES/lftp-4.4.8-max-retries.patch @@ -0,0 +1,42 @@ +diff --git a/src/FileCopy.cc b/src/FileCopy.cc +index 18426e58..e0d25d8c 100644 +--- a/src/FileCopy.cc ++++ b/src/FileCopy.cc +@@ -786,21 +786,23 @@ int FileCopyPeerFA::Do() + return m; + } + +- if((want_size && size==NO_SIZE_YET && (mode==PUT || !start_transfer)) +- || (want_date && date==NO_DATE_YET)) ++ // if we need some info and cannot start the transfer (yet), ++ // then use ARRAY_INFO to fetch the file information. ++ if(((want_size && size==NO_SIZE_YET) || (want_date && date==NO_DATE_YET)) ++ && (mode==PUT || !start_transfer) && session->IsClosed()) ++ { ++ FileInfo *fi=new FileInfo(file); ++ if(want_size) ++ fi->Need(fi->SIZE); ++ if(want_date) ++ fi->Need(fi->DATE); ++ info.Empty(); ++ info.Add(fi); ++ session->GetInfoArray(&info); ++ m=MOVED; ++ } ++ if(session->OpenMode()==FA::ARRAY_INFO) + { +- if(session->IsClosed()) +- { +- FileInfo *fi=new FileInfo(file); +- if(want_size) +- fi->Need(fi->SIZE); +- if(want_date) +- fi->Need(fi->DATE); +- info.Empty(); +- info.Add(fi); +- session->GetInfoArray(&info); +- m=MOVED; +- } + res=session->Done(); + if(res==FA::IN_PROGRESS) + return m; diff --git a/SOURCES/lftp-4.4.8-mirror-file-size-decrease.patch b/SOURCES/lftp-4.4.8-mirror-file-size-decrease.patch new file mode 100644 index 0000000..6bef9b6 --- /dev/null +++ b/SOURCES/lftp-4.4.8-mirror-file-size-decrease.patch @@ -0,0 +1,24 @@ +diff --git a/src/SFtp.cc b/src/SFtp.cc +index 0b422fb..db1b705 100644 +--- a/src/SFtp.cc ++++ b/src/SFtp.cc +@@ -1149,7 +1149,7 @@ int SFtp::Read(void *buf,int size) + return error_code; + if(mode==CLOSED) + return 0; +- if(state==DONE) ++ if(state==DONE && !(file_buf && file_buf->Size()>0)) + return 0; // eof + if(state==FILE_RECV) + { +@@ -1161,7 +1161,10 @@ int SFtp::Read(void *buf,int size) + if(entity_size<0 || request_posSize()>0) ++ { + const char *buf1; + int size1; + file_buf->Get(&buf1,&size1); diff --git a/SOURCES/lftp-4.4.8-mirror302-2.patch b/SOURCES/lftp-4.4.8-mirror302-2.patch new file mode 100644 index 0000000..058fcb7 --- /dev/null +++ b/SOURCES/lftp-4.4.8-mirror302-2.patch @@ -0,0 +1,37 @@ +From 0f7273a52b4158c7193e44b128a9e54db74c7979 Mon Sep 17 00:00:00 2001 +From: "Alexander V. Lukyanov" +Date: Wed, 1 Apr 2015 16:00:52 +0300 +Subject: [PATCH] mirror: fixed redirection to a file with full URL. + +--- + src/MirrorJob.cc | 5 +++-- + 1 file changed, 3 insertions(+), 2 deletions(-) + +diff --git a/src/MirrorJob.cc b/src/MirrorJob.cc +index 7f89e11..ef594bc 100644 +--- a/src/MirrorJob.cc ++++ b/src/MirrorJob.cc +@@ -660,9 +660,9 @@ void MirrorJob::HandleChdir(FileAccessRef& session, int &redirections) + char *loc=alloca_strdup(loc_c); + ParsedURL u(loc,true); + ++ bool is_file=(last_char(loc)!='/'); + if(!u.proto) + { +- bool is_file=(last_char(loc)!='/'); + FileAccess::Path new_cwd(session->GetNewCwd()); + new_cwd.Change(0,is_file,loc); + session->PathVerify(new_cwd); +@@ -671,7 +671,8 @@ void MirrorJob::HandleChdir(FileAccessRef& session, int &redirections) + } + session->Close(); // loc_c is no longer valid. + session=FA::New(&u); +- session->Chdir(u.path); ++ FileAccess::Path new_cwd(u.path,is_file,url::path_ptr(loc)); ++ session->PathVerify(new_cwd); + return; + } + } +-- +2.1.0 + diff --git a/SOURCES/lftp-4.4.8-mirror302.patch b/SOURCES/lftp-4.4.8-mirror302.patch new file mode 100644 index 0000000..c602c1b --- /dev/null +++ b/SOURCES/lftp-4.4.8-mirror302.patch @@ -0,0 +1,70 @@ +diff -Naurp lftp-4.4.8.orig/src/FileAccess.h lftp-4.4.8/src/FileAccess.h +--- lftp-4.4.8.orig/src/FileAccess.h 2013-05-27 14:05:24.000000000 +0200 ++++ lftp-4.4.8/src/FileAccess.h 2015-05-13 15:02:31.556462128 +0200 +@@ -26,6 +26,7 @@ + #include "SMTask.h" + #include "trio.h" + #include "xstring.h" ++#include "misc.h" + #include "ResMgr.h" + #include "FileSet.h" + #include "ArgV.h" +@@ -86,6 +87,7 @@ public: + void Set(const char *new_path,bool new_is_file=false,const char *new_url=0,int device_prefix_len=0); + void SetURL(const char *u) { url.set(u); } + void Change(const char *new_path,bool new_is_file=false,const char *new_path_enc=0,int device_prefix_len=0); ++ const xstring& GetDirectory() const { return is_file?dirname(path):path; } + void ExpandTilde(const Path &home); + static void Optimize(xstring& p,int dev_prefix=0); + void Optimize() { Optimize(path,device_prefix_len); } +diff -Naurp lftp-4.4.8.orig/src/MirrorJob.cc lftp-4.4.8/src/MirrorJob.cc +--- lftp-4.4.8.orig/src/MirrorJob.cc 2013-03-19 13:57:12.000000000 +0100 ++++ lftp-4.4.8/src/MirrorJob.cc 2015-05-13 15:10:58.419627179 +0200 +@@ -561,22 +561,25 @@ void MirrorJob::HandleChdir(FileAccessRe + // cd to another url. + const char *loc_c=session->GetNewLocation(); + int max_redirections=ResMgr::Query("xfer:max-redirections",0); +- if(loc_c && max_redirections>0 && last_char(loc_c)=='/') ++ if(loc_c && max_redirections>0) + { + if(++redirections>max_redirections) + goto cd_err_normal; + eprintf(_("%s: received redirection to `%s'\n"),"mirror",loc_c); + + char *loc=alloca_strdup(loc_c); +- session->Close(); // loc_c is no longer valid. +- + ParsedURL u(loc,true); + + if(!u.proto) + { +- session->Chdir(url::decode(loc)); ++ bool is_file=(last_char(loc)!='/'); ++ FileAccess::Path new_cwd(session->GetNewCwd()); ++ new_cwd.Change(0,is_file,loc); ++ session->PathVerify(new_cwd); ++ session->Roll(); + return; + } ++ session->Close(); // loc_c is no longer valid. + session=FA::New(&u); + session->Chdir(u.path); + return; +@@ -680,7 +683,7 @@ int MirrorJob::Do() + if(source_session->IsOpen()) + return m; + +- source_dir.set(source_session->GetCwd()); ++ source_dir.set(source_session->GetCwd().GetDirectory()); + + pre_MAKE_TARGET_DIR: + { +@@ -763,7 +766,7 @@ int MirrorJob::Do() + return m; + create_target_dir=false; + +- target_dir.set(target_session->GetCwd()); ++ target_dir.set(target_session->GetCwd().GetDirectory()); + + pre_GETTING_LIST_INFO: + set_state(GETTING_LIST_INFO); diff --git a/SOURCES/lftp-4.4.8-overwrite.patch b/SOURCES/lftp-4.4.8-overwrite.patch new file mode 100644 index 0000000..2b384c5 --- /dev/null +++ b/SOURCES/lftp-4.4.8-overwrite.patch @@ -0,0 +1,12 @@ +diff -up lftp-4.4.8/src/FileCopy.cc.overwrite lftp-4.4.8/src/FileCopy.cc +--- lftp-4.4.8/src/FileCopy.cc.overwrite 2013-11-28 10:42:18.374656024 +0100 ++++ lftp-4.4.8/src/FileCopy.cc 2013-11-28 10:42:58.224631188 +0100 +@@ -1414,7 +1414,7 @@ int FileCopyPeerFDStream::Do() + { + const char *new_name=dir_file(dirname(stream->full_name),suggested_filename); + struct stat st; +- if(lstat(new_name,&st)==-1 && errno==ENOENT) { ++ if((lstat(new_name,&st)==-1 && errno==ENOENT) || ResMgr::QueryBool("xfer:clobber",0)) { + debug((5,"copy: renaming `%s' to `%s'\n",stream->full_name.get(),suggested_filename.get())); + if(rename(stream->full_name,new_name)==-1) + debug((3,"rename(%s, %s): %s\n",stream->full_name.get(),new_name,strerror(errno))); diff --git a/SOURCES/lftp-4.4.8-reverse-mirror.patch b/SOURCES/lftp-4.4.8-reverse-mirror.patch new file mode 100644 index 0000000..1168be8 --- /dev/null +++ b/SOURCES/lftp-4.4.8-reverse-mirror.patch @@ -0,0 +1,55 @@ +diff --git a/src/MirrorJob.cc b/src/MirrorJob.cc +index 595c37b..7eaea27 100644 +--- a/src/MirrorJob.cc ++++ b/src/MirrorJob.cc +@@ -914,24 +914,21 @@ int MirrorJob::Do() + } + continue; + } ++ bool use_rmdir = (file->defined&file->TYPE && file->filetype==file->DIRECTORY) ++ && (flags&NO_RECURSION); + if(script) + { +- ArgV args("rm"); +- if(file->defined&file->TYPE && file->filetype==file->DIRECTORY) +- { +- if(flags&NO_RECURSION) +- args.setarg(0,"rmdir"); +- else ++ ArgV args(use_rmdir?"rmdir":"rm"); ++ if((file->defined&file->TYPE && file->filetype==file->DIRECTORY) && !use_rmdir) + args.Append("-r"); +- } + args.Append(target_session->GetFileURL(file->name)); + xstring_ca cmd(args.CombineQuoted()); + fprintf(script,"%s\n",cmd.get()); + } + if(!script_only) + { +- ArgV *args=new ArgV("rm"); +- args->Append(file->name); ++ ArgV *args=new ArgV(use_rmdir?"rmdir":"rm"); ++ args->Append(dir_file(".",file->name)); + args->seek(1); + rmJob *j=new rmJob(target_session->Clone(),args); + j->cmdline.set_allocated(args->Combine()); +@@ -940,10 +937,7 @@ int MirrorJob::Do() + if(file->defined&file->TYPE && file->filetype==file->DIRECTORY) + { + if(flags&NO_RECURSION) +- { +- args->setarg(0,"rmdir"); + j->Rmdir(); +- } + else + j->Recurse(); + } +@@ -1014,7 +1008,7 @@ int MirrorJob::Do() + if(!script_only) + { + ArgV *a=new ArgV("chmod"); +- a->Append(file->name); ++ a->Append(dir_file(".",file->name)); + a->seek(1); + ChmodJob *cj=new ChmodJob(target_session->Clone(), + file->mode&~mode_mask,a); diff --git a/SOURCES/lftp-4.4.8-ssl-tls-restrict.patch b/SOURCES/lftp-4.4.8-ssl-tls-restrict.patch new file mode 100644 index 0000000..d8f0dcb --- /dev/null +++ b/SOURCES/lftp-4.4.8-ssl-tls-restrict.patch @@ -0,0 +1,91 @@ +diff -Naurp lftp-4.4.8.orig/doc/lftp.1 lftp-4.4.8/doc/lftp.1 +--- lftp-4.4.8.orig/doc/lftp.1 2015-05-13 11:31:55.000000000 +0200 ++++ lftp-4.4.8/doc/lftp.1 2015-05-13 16:34:46.648020240 +0200 +@@ -1865,6 +1865,14 @@ when true, use Server Name Indication (S + if set to yes, then verify server's certificate to be signed by a known + Certificate Authority and not be on Certificate Revocation List. + .TP ++.BR ssl:priority " (string)" ++free form priority string for GnuTLS. If built with OpenSSL the understood ++values are \fI+\fP or \fI-\fP followed by SSL3.0, TLS1.0, TLS1.1 or TLS1.2, ++separated by \fI:\fP. Example: ++.Ds ++set ssl:priority "NORMAL:-SSL3.0:-TLS1.0:-TLS1.1:+TLS1.2" ++.De ++.TP + .BR torrent:ip " (ipv4 address)" + IP address to send to the tracker. Specify it if you are using an HTTP proxy. + .TP +diff -Naurp lftp-4.4.8.orig/src/lftp_ssl.cc lftp-4.4.8/src/lftp_ssl.cc +--- lftp-4.4.8.orig/src/lftp_ssl.cc 2013-03-19 13:55:58.000000000 +0100 ++++ lftp-4.4.8/src/lftp_ssl.cc 2015-05-13 17:41:43.752418022 +0200 +@@ -270,10 +270,20 @@ lftp_ssl_gnutls::lftp_ssl_gnutls(int fd1 + + gnutls_transport_set_ptr(session,(gnutls_transport_ptr_t)fd); + +- // hack for some ftp servers +- const char *auth=ResMgr::Query("ftp:ssl-auth", hostname); +- if(auth && !strncmp(auth, "SSL", 3)) +- gnutls_priority_set_direct(session, "NORMAL:+SSL3.0:-TLS1.0:-TLS1.1:-TLS1.2",0); ++ const char *priority=ResMgr::Query("ssl:priority", 0); ++ if(priority && *priority) ++ { ++ int res = gnutls_priority_set_direct(session, priority, 0); ++ if(res != GNUTLS_E_SUCCESS) ++ Log::global->Format(0,"gnutls_priority_set_direct(`%s'): %s\n",priority,gnutls_strerror(res)); ++ } ++ else ++ { ++ // hack for some ftp servers ++ const char *auth=ResMgr::Query("ftp:ssl-auth", hostname); ++ if(auth && !strncmp(auth, "SSL", 3)) ++ gnutls_priority_set_direct(session, "NORMAL:+SSL3.0:-TLS1.0:-TLS1.1:-TLS1.2",0); ++ } + + if(h && ResMgr::QueryBool("ssl:use-sni",h)) { + if(gnutls_server_name_set(session, GNUTLS_NAME_DNS, h, xstrlen(h)) < 0) +@@ -771,7 +781,32 @@ lftp_ssl_openssl_instance::lftp_ssl_open + #else + SSLeay_add_ssl_algorithms(); + ssl_ctx=SSL_CTX_new(SSLv23_client_method()); +- SSL_CTX_set_options(ssl_ctx, SSL_OP_ALL|SSL_OP_NO_TICKET|SSL_OP_NO_SSLv2); ++ long options=SSL_OP_ALL|SSL_OP_NO_TICKET|SSL_OP_NO_SSLv2; ++ const char *priority=ResMgr::Query("ssl:priority", 0); ++ if(priority && *priority) ++ { ++ static const struct ssl_option { ++ const char name[8]; ++ long option; ++ } opt_table[] ={ ++ {"-SSL3.0",SSL_OP_NO_SSLv3}, ++ {"-TLS1.0",SSL_OP_NO_TLSv1}, ++ {"-TLS1.1",SSL_OP_NO_TLSv1_1}, ++ {"-TLS1.2",SSL_OP_NO_TLSv1_2}, ++ {"",0} ++ }; ++ char *to_parse=alloca_strdup(priority); ++ for(char *ptr=strtok(to_parse,":"); ptr; ptr=strtok(NULL,":")) { ++ for(const ssl_option *opt=opt_table; opt->name[0]; opt++) { ++ if(!strcmp(ptr,opt->name)) { ++ options|=opt->option; ++ Log::global->Format(9,"ssl: applied %s option\n",ptr); ++ break; ++ } ++ } ++ } ++ } ++ SSL_CTX_set_options(ssl_ctx, options); + SSL_CTX_set_cipher_list(ssl_ctx, "ALL:!aNULL:!eNULL:!SSLv2:!LOW:!EXP:!MD5:@STRENGTH"); + SSL_CTX_set_verify(ssl_ctx,SSL_VERIFY_PEER,lftp_ssl_openssl::verify_callback); + // SSL_CTX_set_default_passwd_cb(ssl_ctx,lftp_ssl_passwd_callback); +diff -Naurp lftp-4.4.8.orig/src/resource.cc lftp-4.4.8/src/resource.cc +--- lftp-4.4.8.orig/src/resource.cc 2013-03-19 14:00:36.000000000 +0100 ++++ lftp-4.4.8/src/resource.cc 2015-05-13 17:57:40.885954120 +0200 +@@ -354,6 +354,7 @@ static ResType lftp_vars[] = { + {"ssl:check-hostname", "yes", ResMgr::BoolValidate,0}, + {"ssl:verify-certificate", "yes", ResMgr::BoolValidate,0}, + {"ssl:use-sni", "yes", ResMgr::BoolValidate,0}, ++ {"ssl:priority", "", 0,0}, + # if USE_OPENSSL + {"ssl:ca-path", "", ResMgr::DirReadable,ResMgr::NoClosure}, + {"ssl:crl-path", "", ResMgr::DirReadable,ResMgr::NoClosure}, diff --git a/SPECS/lftp.spec b/SPECS/lftp.spec new file mode 100644 index 0000000..92965b5 --- /dev/null +++ b/SPECS/lftp.spec @@ -0,0 +1,619 @@ +Summary: A sophisticated file transfer program +Name: lftp +Version: 4.4.8 +Release: 12%{?dist} +License: GPLv3+ +Group: Applications/Internet +Source0: ftp://ftp.yar.ru/lftp/lftp-%{version}.tar.xz +URL: http://lftp.yar.ru/ +BuildRoot: %{_tmppath}/%{name}-%{version}-%{release}-root-%(%{__id_u} -n) +BuildRequires: ncurses-devel, gnutls-devel, pkgconfig, readline-devel, gettext + +Patch1: lftp-4.0.9-date_fmt.patch +Patch2: lftp-4.2.0-man.patch +Patch3: lftp-4.4.8-overwrite.patch +Patch4: lftp-4.4.8-doc-rename.patch +Patch5: lftp-4.4.8-help-exitcode.patch +Patch6: lftp-4.4.8-mirror302.patch +Patch7: lftp-4.4.8-ssl-tls-restrict.patch +Patch8: lftp-4.4.8-mirror302-2.patch +Patch9: lftp-4.4.8-hangs-mirror.patch +Patch10: lftp-4.4.8-mirror-file-size-decrease.patch +Patch11: lftp-4.4.8-max-retries.patch +Patch12: lftp-4.4.8-reverse-mirror.patch + +%description +LFTP is a sophisticated ftp/http file transfer program. Like bash, it has job +control and uses the readline library for input. It has bookmarks, built-in +mirroring, and can transfer several files in parallel. It is designed with +reliability in mind. + +%package scripts +Summary: Scripts for lftp +Group: Applications/Internet +Requires: lftp >= %{version}-%{release} +BuildArch: noarch + +%description scripts +Utility scripts for use with lftp. + +%prep +%setup -q + +%patch1 -p1 -b .date_fmt +%patch2 -p1 -b .man +%patch3 -p1 -b .overwrite +%patch4 -p1 -b .doc_rename +%patch5 -p1 -b .help_exitcode +%patch6 -p1 -b .mirror302 +%patch7 -p1 -b .ssl_tls_restrict +%patch8 -p1 -b .mirror302-2 +%patch9 -p1 -b .mirror-hangs +%patch10 -p1 -b .mirror-file-size-decrease +%patch11 -p1 -b .max-retries +%patch12 -p1 -b .reverse-mirror + +#sed -i.rpath -e '/lftp_cv_openssl/s|-R.*lib||' configure +sed -i.norpath -e \ + '/sys_lib_dlsearch_path_spec/s|/usr/lib |/usr/lib /usr/lib64 /lib64 |' \ + configure + +%build +%configure --with-modules --disable-static --with-gnutls --without-openssl --with-debug +make %{?_smp_mflags} + +%install +rm -rf $RPM_BUILD_ROOT +export tagname=CC +make DESTDIR=$RPM_BUILD_ROOT INSTALL='install -p' install +chmod 0755 $RPM_BUILD_ROOT%{_libdir}/lftp/* +chmod 0755 $RPM_BUILD_ROOT%{_libdir}/lftp/%{version}/*.so +iconv -f ISO88591 -t UTF8 NEWS -o NEWS.tmp +touch -c -r NEWS NEWS.tmp +mv NEWS.tmp NEWS +# Remove files from $RPM_BUILD_ROOT that we aren't shipping. +#rm $RPM_BUILD_ROOT%{_libdir}/lftp/%{version}/*.la +rm $RPM_BUILD_ROOT%{_libdir}/liblftp-jobs.la +rm $RPM_BUILD_ROOT%{_libdir}/liblftp-tasks.la +rm $RPM_BUILD_ROOT%{_libdir}/liblftp-jobs.so +rm $RPM_BUILD_ROOT%{_libdir}/liblftp-tasks.so + +%find_lang %{name} + +%clean +rm -rf $RPM_BUILD_ROOT + +%post -p /sbin/ldconfig + +%postun -p /sbin/ldconfig + +%files -f %{name}.lang +%defattr(-,root,root,-) +%doc BUGS COPYING ChangeLog FAQ FEATURES README* NEWS THANKS TODO +%config(noreplace) %{_sysconfdir}/lftp.conf +%{_bindir}/* +%{_mandir}/*/* +%dir %{_libdir}/lftp +%dir %{_libdir}/lftp/%{version} +%{_libdir}/lftp/%{version}/cmd-torrent.so +%{_libdir}/lftp/%{version}/cmd-mirror.so +%{_libdir}/lftp/%{version}/cmd-sleep.so +%{_libdir}/lftp/%{version}/liblftp-network.so +%{_libdir}/lftp/%{version}/liblftp-pty.so +%{_libdir}/lftp/%{version}/proto-file.so +%{_libdir}/lftp/%{version}/proto-fish.so +%{_libdir}/lftp/%{version}/proto-ftp.so +%{_libdir}/lftp/%{version}/proto-http.so +%{_libdir}/lftp/%{version}/proto-sftp.so +%{_libdir}/liblftp-jobs.so.* +%{_libdir}/liblftp-tasks.so.* + +%files scripts +%defattr(-,root,root,-) +%{_datadir}/lftp + + +%changelog +* Wed Jul 24 2019 Michal Ruprich - 4.4.8-12 +- Resolves: #1611641 - CVE-2018-10916 lftp: particular remote file names may lead to current working directory erased + +* Fri May 11 2018 Michal Ruprich - 4.4.8-11 +- Resolves: #1514815 - lftp doesn't seems to consider 'set net:max-retries' +- Resolves: #1556675 - "get" command with lftp does not fail on net:max-retries + +* Mon Nov 14 2016 Michal Ruprich - 4.4.8-10 +- Related: #1374653 - File size decreases when synchronizing folders with a sftp account using lftp + - Patch edited so that it corresponds to upstream + +* Mon Nov 07 2016 Michal Ruprich - 4.4.8-9 +- Resolves: #1374653 - File size decreases when synchronizing folders with a sftp account using lftp + +* Thu May 12 2016 Luboš Uhliarik - 4.4.8-8 +- Resolves: #1285301 - lftp hangs after dowloading one file during a mirror + +* Mon Jun 15 2015 Luboš Uhliarik - 4.4.8-7 +- Fixed issue with absolute URL locations in mirror mode +- Related: #1181580 + +* Wed May 13 2015 Luboš Uhliarik - 4.4.8-6 +- Fix lftp does not follow http redirect (302) in mirror mode (#1181580) +- Fix lftp exists randomly when "cmd:fail-exit" is set (#1193984) +- Added RFE - lftp configurations for restricting each SSL/TLS + version (#1182987) +- Fixed bogus dates of this SPEC + +* Tue May 12 2015 Lubos Uhliarik - 4.4.8-5 +- Fix option xfer:auto-rename not documented (#1035229) + +* Tue May 12 2015 Lubos Uhliarik - 4.4.8-4 +- Fix lftp to overwrite filename when auto-rename and clobber + are enabled (#1035264) + +* Fri Jan 24 2014 Daniel Mach - 4.4.8-3 +- Mass rebuild 2014-01-24 + +* Fri Dec 27 2013 Daniel Mach - 4.4.8-2 +- Mass rebuild 2013-12-27 + +* Thu Aug 08 2013 Jiri Skala - 4.4.8-1 +- updated to latest upstream 4.4.8 + +* Tue May 21 2013 Jiri Skala - 4.4.6-1 +- updated to latest upstream 4.4.6 + +* Sun Feb 10 2013 Jiri Skala - 4.4.3-1 +- updated to latest upstream 4.4.3 + +* Mon Feb 04 2013 Jiri Skala - 4.4.2-1 +- updated to latest upstream 4.4.2 + +* Tue Jan 29 2013 Jiri Skala - 4.4.1-1 +- updated to latest upstream 4.4.1 + +* Mon Oct 01 2012 Jiri Skala - 4.4.0-1 +- updated to latest upstream 4.4.0 + +* Sat Jul 21 2012 Jiri Skala - 4.3.8-1 +- updated to latest upstream 4.3.8 + +* Thu Jul 19 2012 Fedora Release Engineering - 4.3.7-2 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_18_Mass_Rebuild + +* Mon Jun 04 2012 Jiri Skala - 4.3.7-1 +- updated to latest upstream 4.3.7 + +* Mon Apr 02 2012 Jiri Skala - 4.3.6-1 +- updated to latest upstream 4.3.6 + +* Tue Jan 24 2012 Jiri Skala - 4.3.5-1 +- updated to latest upstream 4.3.5 + +* Fri Jan 13 2012 Fedora Release Engineering - 4.3.4-2 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_17_Mass_Rebuild + +* Mon Jan 02 2012 Jiri Skala - 4.3.4-1 +- updated to latest upstream 4.3.4 + +* Wed Nov 16 2011 Jiri Skala - 4.3.3-2 +- fixes #666580 - Inaccurate timestamps + +* Thu Oct 20 2011 Jiri Skala - 4.3.3-1 +- updated to latest upstream 4.3.3 + +* Tue Sep 20 2011 Jiri Skala - 4.3.2-1 +- updated to latest upstream 4.3.2 + +* Tue Jun 28 2011 Jiri Skala - 4.3.1-1 +- updated to latest upstream 4.3.1 + +* Mon Jun 20 2011 Jiri Skala - 4.3.0-1 +- updated to latest upstream 4.3.0 + +* Mon May 02 2011 Jiri Skala - 4.2.3-1 +- updated to latest upstream 4.2.3 + +* Tue Apr 12 2011 Jiri Skala - 4.2.2-1 +- updated to latest upstream 4.2.2 + +* Wed Mar 30 2011 Jiri Skala - 4.2.1-1 +- updated to latest upstream 4.2.1 + +* Mon Mar 14 2011 Jiri Skala - 4.2.0-1 +- updated to latest upstream 4.2.0 +- fixes #675126 man page corrections + +* Mon Feb 07 2011 Fedora Release Engineering - 4.1.3-2 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_15_Mass_Rebuild + +* Tue Jan 18 2011 Jiri Skala - 4.1.3-1 +- updated to latest upstream 4.1.3 + +* Mon Jan 03 2011 Jiri Skala - 4.1.2-1 +- updated to latest upstream 4.1.2 + +* Thu Dec 02 2010 Jiri Skala - 4.1.1-1 +- updated to latest upstream 4.1.1 + +* Tue Nov 23 2010 Jiri Skala - 4.1.0-1 +- updated to latest upstream 4.1.0 + +* Tue Sep 07 2010 Jiri Skala - 4.0.10-1 +- updated to latest upstream +- upstream changed tarball compression lzma -> xz + +* Thu Jun 24 2010 Jiri Skala - 4.0.9-3 +- fixes issue when some servers require forcing SSL3.0 +- corrected check for 'max time' used for fix #600218 + +* Tue Jun 22 2010 Jiri Skala - 4.0.9-2 +- fixes #600218 - [abrt] Process /usr/bin/lftp was killed by signal 1 + +* Mon Jun 14 2010 Jiri Skala - 4.0.9-1 +- updated to latest stable version + +* Thu May 27 2010 Jiri Skala - 4.0.8-1 +- updated to latest stable version + +* Wed May 05 2010 Jiri Skala - 4.0.7-1 +- updated to latest stable version + +* Thu Apr 01 2010 Jiri Skala - 4.0.6-1 +- updated to latest stable version +- added man lftp.conf + +* Thu Mar 04 2010 Jiri Skala - 4.0.5-2 +- fixes #566562 - lftp doesn't properly implement CCC + +* Thu Feb 04 2010 Jiri Skala - 4.0.5-1 +- updated to latest stable version + +* Sun Nov 22 2009 Jiri Skala - 4.0.4-1 +- updated to latest stable version + +* Sun Oct 18 2009 Jiri Skala - 4.0.2-1 +- updated to latest stable version + +* Mon Sep 14 2009 Jiri Skala - 4.0.0-1 +- updated to latest stable version + +* Wed Sep 02 2009 Jiri Skala - 3.7.15-1 +- updated to latest upstream release + +* Wed Aug 12 2009 Ville Skyttä - 3.7.14-6 +- Use lzma compressed upstream tarball. + +* Fri Jul 24 2009 Fedora Release Engineering - 3.7.14-5 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_12_Mass_Rebuild + +* Mon Jul 20 2009 Adam Jackson 3.7.14-4 +- Split utility scripts to subpackage to isolate perl dependency. (#510813) + +* Wed Jun 10 2009 Jiri Skala - 3.7.14-3 +- fixed bug in ls via http - corrupted file names containing spaces + +* Fri May 22 2009 Jiri Skala - 3.7.14-1 +- rebase to latest upstream release; among others fixes #474413 + +* Tue Apr 14 2009 Jiri Skala - 3.7.11-3 +- release number repaired + +* Tue Apr 14 2009 Jiri Skala - 3.7.11-1 +- rebase to latest upstream release + +* Wed Feb 25 2009 Fedora Release Engineering - 3.7.7-2 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_11_Mass_Rebuild + +* Wed Jan 14 2009 Jiri Skala - 3.7.7-1 +- rebase to latest upstream version +- resolves license conflict GPLv2 -> GPLv3+ due to gnulib + +* Mon Sep 29 2008 Jiri Skala - 3.7.4-1 +- Resolves: #464420 re-base to 3.7.4 +- replaced usage of OpenSSL by GNUTLS due to license conflict + +* Wed Apr 23 2008 Martin Nagy - 3.7.1-1 +- update to upstream version 3.7.1 + +* Thu Feb 28 2008 Martin Nagy - 3.6.3-2 +- fix rpath + +* Mon Feb 25 2008 Martin Nagy - 3.6.3-1 +- update to newest version +- remove patches fixed in upstream: progress_overflow, empty_argument + +* Tue Feb 12 2008 Martin Nagy - 3.6.1-2 +- fix library paths (#432468) + +* Mon Feb 11 2008 Martin Nagy - 3.6.1-1 +- upgrade to upstream version 3.6.1 +- remove rpath and make some spec file changes for review (#225984) +- remove old patches +- fix core dumping when html tag has its argument empty +- use own libtool + +* Thu Dec 13 2007 Martin Nagy - 3.5.14-3 +- Fixed coredumping when downloading (#414051) + +* Tue Dec 04 2007 Martin Nagy - 3.5.14-2.1 +- rebuild + +* Mon Sep 17 2007 Maros Barabas - 3.5.14-2 +- rebase +- deleted symlinks liblftp-jobs.so & liblftp-tasks.so + +* Thu Sep 06 2007 Maros Barabas - 3.5.10-4 +- rebuild + +* Wed Apr 11 2007 Maros Barabas - 3.5.10-3 +- Correct mistake removing devel package & calling chkconfig +- Resolves #235436 +- Removing automake autoconf +- Resolves #225984 + +* Wed Apr 04 2007 Maros Barabas - 3.5.10-2 +- Merge review fix +- Resolves #225984 + +* Wed Apr 04 2007 Maros Barabas - 3.5.10 +- Upgrade to 3.5.10 from upstream + +* Thu Jan 18 2007 Maros Barabas - 3.5.9 +- Upgrade to 3.5.9 from upstream + +* Wed Aug 23 2006 Maros Barabas - 3.5.1-2 +- remove .a & .la from libdir + +* Mon Jul 17 2006 Jason Vas Dias - 3.5.1-1.fc6 +- Upgrade to 3.5.1 + +* Wed Jul 12 2006 Jesse Keating - 3.4.7-2.FC6.1 +- rebuild + +* Mon Jun 12 2006 Jason Vas Dias - 3.4.7-2 +- Add BuildRequires for broken Brew + +* Wed May 31 2006 Jason Vas Dias - 3.4.7-1 +- Upgrade to upstream version 3.4.7 + +* Fri Apr 28 2006 Jason Vas Dias - 3.4.6-1 +- Upgrade to upstream version 3.4.6 + +* Fri Apr 21 2006 Jason Vas Dias - 3.4.4-1 +- Upgrade to upstream version 3.4.4 + +* Thu Mar 16 2006 Jason Vas Dias - 3.4.3-1 +- Upgrade to upstream version 3.4.3 + +* Fri Mar 10 2006 Bill Nottingham - 3.4.2-5 +- rebuild for ppc TLS issue (#184446) + +* Thu Feb 16 2006 Jason Vas Dias - 3.4.2-4 +- Apply upstream fix for bug 181694. + +* Wed Feb 15 2006 Jason Vas Dias - 3.4.2-2 +- fix bug 181694: segfault on redirection to non-existent location + +* Fri Feb 10 2006 Jesse Keating - 3.4.2-1.1 +- bump again for double-long bug on ppc(64) + +* Wed Feb 08 2006 Jason Vas Dias - 3.4.2-1 +- Upgrade to upstream version 3.4.2, that fixes 3.4.1's coredump + +* Tue Feb 07 2006 Jason Vas Dias - 3.4.1-1 +- Upgrade to upstream version 3.4.1 +- fix core dump + +* Fri Jan 13 2006 Jason Vas Dias - 3.4.0-1 +- Upgrade to upstream version 3.4.0 + +* Wed Dec 21 2005 Jason Vas Dias - 3.3.5-4 +- fix bug 176315: openssl libraries not being picked up - gnutls was instead +- improvements to bug 172376 fix + +* Tue Dec 20 2005 Jason Vas Dias - 3.3.5-2 +- fix bug 176175: perl-String-CRC32 now in separate RPM + +* Thu Dec 15 2005 Jason Vas Dias - 3.3.5-1 +- Upgrade to version 3.3.5 +- fix bug bz172376 : host lookups should use any address found after timeout + +* Fri Dec 09 2005 Jesse Keating +- rebuilt + +* Fri Nov 11 2005 Jason Vas Dias - 3.3.3-1 +- Upgrade to upstream 3.3.3 release, fixing bug 171884 . + +* Tue Oct 18 2005 Jason Vas Dias - 3.3.2-1 +- *** PLEASE COULD ANYONE MODIFYING lftp TEST IT BEFORE SUBMITTING! *** + (and preferably contact the lftp package maintainer (me) first - thank you!) + bug 171096 : 'mget files in lftp causes abort' (core dump actually) + resulted from not doing so . + See http://lftp.yar.ru : + Recent events:2005-10-17: + lftp-3.3.2 released. Fixed a coredump caused by double-free. + +* Sat Oct 15 2005 Florian La Roche - 3.3.1-1 +- 3.3.1 + +* Wed Aug 24 2005 Jason Vas Dias - 3.3.0-1 +- Upgrade to upstream version 3.3.0 + +* Mon Aug 8 2005 Tomas Mraz - 3.2.1-2 +- rebuild with new gnutls + +* Thu Jun 30 2005 Warren Togami 3.2.1-1 +- 3.2.1 + +* Mon Apr 25 2005 Jason Vas Dias 3.1.3-1 +- Upgrade to upstream version 3.1.3 + +* Tue Mar 8 2005 Jason Vas Dias 3.1.0-1 +- Upgrade to upstream verson 3.1.0; remove patch for broken libtool + +* Tue Mar 8 2005 Joe Orton 3.0.13-2 +- rebuild + +* Fri Jan 21 2005 Jason Vas Dias 3.0.13-1 +- Upgrade to upstream version 3.0.13 . + +* Wed Jan 12 2005 Tim Waugh 3.0.6-4 +- Rebuilt for new readline. + +* Mon Oct 18 2004 Jason Vas Dias 3.0.6-3 +- rebuilding for current FC3 glibc fixes bug 136109 + +* Mon Aug 16 2004 Nalin Dahyabhai 3.0.6-2 +- rebuild + +* Tue Jun 15 2004 Nalin Dahyabhai 3.0.6-1 +- update to 3.0.6 + +* Tue Jun 15 2004 Elliot Lee +- rebuilt + +* Fri Mar 12 2004 Nalin Dahyabhai 2.6.12-1 +- update to 2.6.12 + +* Tue Mar 02 2004 Elliot Lee +- rebuilt + +* Fri Feb 13 2004 Elliot Lee +- rebuilt + +* Tue Dec 16 2003 Nalin Dahyabhai 2.6.10-3 +- add patch to avoid DoS when connecting to HTTP servers (or "HTTP" "servers") + which don't provide status headers, or provide empty lines instead of status + headers + +* Fri Dec 12 2003 Nalin Dahyabhai 2.6.10-2 +- rebuild + +* Fri Dec 12 2003 Nalin Dahyabhai 2.6.10-1 +- update to 2.6.10, which folds in the previous patches +- configure with --with-debug so that we get useful debug info + +* Tue Dec 9 2003 Nalin Dahyabhai 2.6.9-1 +- include patch based on patch from Ulf Härnhammar to fix unsafe use of + sscanf when reading http directory listings (CAN-2003-0963) +- include patch based on patch from Ulf Härnhammar to fix compile warnings + modified based on input from Solar Designer + +* Mon Dec 8 2003 Nalin Dahyabhai +- update to 2.6.9 + +* Wed Aug 6 2003 Elliot Lee +- Fix libtool + +* Wed Jun 04 2003 Elliot Lee +- rebuilt + +* Wed Jan 22 2003 Tim Powers +- rebuilt + +* Tue Jan 7 2003 Nalin Dahyabhai 2.6.3-2 +- rebuild + +* Thu Dec 12 2002 Nalin Dahyabhai +- use openssl's pkg-config data, if available + +* Thu Nov 14 2002 Nalin Dahyabhai 2.6.3-1 +- update to 2.6.3 + +* Tue Nov 12 2002 Tim Powers 2.6.2-2 +- remove files we aren't including from the $$RPM_BUILD_ROOT + +* Fri Oct 4 2002 Nalin Dahyabhai 2.6.2-1 +- build with the system's libtool + +* Thu Sep 26 2002 Nalin Dahyabhai +- update to 2.6.2 + +* Sat Aug 10 2002 Elliot Lee +- rebuilt with gcc-3.2 (we hope) + +* Tue Jul 23 2002 Tim Powers 2.5.2-4 +- build using gcc-3.2-0.1 + +* Fri Jun 21 2002 Tim Powers 2.5.2-3 +- automated rebuild + +* Sun May 26 2002 Tim Powers 2.5.2-2 +- automated rebuild + +* Fri May 17 2002 Nalin Dahyabhai 2.5.2-1 +- update to 2.5.2 + +* Fri Feb 22 2002 Nalin Dahyabhai 2.4.9-1 +- update to 2.4.9 + +* Wed Jan 23 2002 Nalin Dahyabhai 2.4.8-1 +- update to 2.4.8 + +* Wed Jan 09 2002 Tim Powers 2.4.0-3 +- automated rebuild + +* Thu Aug 16 2001 Nalin Dahyabhai 2.4.0-2 +- remove the .la files from the final package -- these aren't libraries + people link with anyway + +* Mon Aug 6 2001 Nalin Dahyabhai 2.4.0-1 +- update to 2.4.0 (fixes some memory leaks and globbing cases) + +* Thu Jul 5 2001 Nalin Dahyabhai +- langify + +* Fri Jun 29 2001 Nalin Dahyabhai +- explicitly list the modules which are built when the package compiles, so + that module build failures (for whatever reason) get caught + +* Mon Jun 25 2001 Nalin Dahyabhai +- merge in changes from ja .spec file + +* Wed May 30 2001 Nalin Dahyabhai +- update to 2.3.11 + +* Fri Apr 27 2001 Nalin Dahyabhai +- update to 2.3.9 + +* Fri Mar 2 2001 Tim Powers +- rebuilt against openssl-0.9.6-1 + +* Fri Jan 19 2001 Nalin Dahyabhai +- update to 2.3.7 + +* Thu Jan 4 2001 Nalin Dahyabhai +- update to 2.3.6 + +* Fri Dec 1 2000 Nalin Dahyabhai +- update to 2.3.5 + +* Mon Jul 24 2000 Prospector +- rebuilt + +* Thu Jul 13 2000 Tim Powers +- patched to build with gcc-2.96 +- use gcc instead of c++ for CXX, otherwise you expose an ICE in gcc when + using g++ on two files, one being a C++ source, and the other a C source. + Using gcc does the correct thing. + +* Mon Jul 10 2000 Tim Powers +- rebuilt + +* Thu Jun 8 2000 Tim Powers +- fix man page location +- use %%makeinstall +- use predefined macros wherever possible + +* Mon May 15 2000 Tim Powers +- updated to 2.2.2 +- added locales tofiles list +- built for 7.0 + +* Thu Jan 27 2000 Tim Powers +- fixed package description etc. + +* Fri Jan 21 2000 Tim Powers +- ughh. didn't include /usr/lib/lftp in files list, fixed + +* Thu Jan 13 2000 Tim Powers +- initial build for Powertools