Net-FTPSSL
view release on metacpan or search on metacpan
Revision history for Perl extension Net::FTPSSL.
TODO:
- Implement a "find" function similar to Unix's find command.
- Support IPv6 as well as IPv4. (Started, I can detect if IPv6 is supported
by IO::Socket::SSL.) [I don't have access to a IPv6 network to test with.]
- Fix so Trace isn't so verbose. Such as making freqency a function of file
size & block size.
Version - YYYY/MM/DD
--------------------
0.42 2019/09/30 08:30:00
- Changed the copyright from 2018 to 2019 in all files.
- Removed L<http://search.cpan.org/~cleach/Net-FTPSSL-0.42/FTPSSL.pm> link
from the POD since that link seems to be in the process of being depreciated
on CPAN after its re-design in 2018. (Link gets redirected to a new URL.)
- Added BUILD_REQUIRES option to Makefile.PL
- Bug ID 130578 - Special thanks to Edward Sabol for asking for the new
aliases "ls" & "dir" (alias to nlst and list)
0.41 2018/12/20 08:30:00
- Fixed supported() to say HELP isn't supported if OverriedHELP was used.
Wasn't doing this in 100% of the logic paths.
- Fixed nlst/list bug when filter patterns & callbacks were both in use.
The results of the end callback wasn't having the pattern applied to filter
the results. Patterns are now applied to filter things before & after the
callback is called, where before it was only done before the callback was
called.
- Fixed nlst/list to both call _common_list() instead of having list do both.
- The DebugLogFile option now turns autoflush on when the log file is opened.
I was loosing the log file contents on certain types of errors when
autoflush was turned off making it difficult to troubleshoot issues.
- Tweaked the ccc() hack slightly. Also the above log file fix seems to have
stabilized the CCC hack when the logs are turned on when it works. Though
some servers sometimes throw "Unexpeced EOF" errors after executing the CCC.
So I put in a couple of sleeps for 1 second each & the command became even
more stable. Suggesting that the "Unexpected EOF" errors were caused by
timing issues.
- Added uput2() method to deal with the problem that uput() can't always
tell you the actual name of the file on the FTPS server and you really need
to know that filename. (slow)
- Rewrote the uput() POD to reflect what the command actually does instead
of what it's supposed to do. Different servers implemented it differently.
- Tweaked the depreciated "useSSL" option to make it easier to remove in
the future.
- Minor tweaks to _help() & supported() dealing with OverrideHELP & _help()
can now include disabled commands in it's hash. (The key's value is 0 if
disabled. Else non-zero if a supported command.) Before it just silently
tossed disabled commands.
- Added mlsd() - List of files in machine readable format.
- Added mlst() - Get file details in machine readable foramt.
- Added parse_mlsx() to parse the returned values of mlsd() & mlst().
- Modified size() to have option of using MLST as an alternate way to get a
file's size.
- Modified is_dir() & is_file() to be able to use MLST as the prefered way
to do these tests. Falls back on original tests if MLST isn't supported
or doesn't have the TYPE feature enabled.
- Redesigned all the test cases from scratch! Rather than choose one of 3
huge scripts to run, everything has been replaced by a lot of smaller test
cases. Makes it much simpler to verify everything is working without the
need for messy complex code or having to carefully examine log files
afterwards.
- The test cases no longer uses the depreciated "useSSL" option. They use
the "SSL_version" option instead.
0.40 2018/02/26 08:30:00
- Updated the copyright to 2018.
- Updated README to reference the new FTPSSL_SSL_VER environment variable for
the test case prompts. (t/*.t) Also fixed several typos in this file.
- BugId 124570 asked for "_mdtm()" to allow for dates from 1999 & earlier.
- Made the same BugId change in t/10-complex.t
0.39 2017/10/23 08:30:00
- Updated the LISCENSE file to 2017 (from 2015)
- Changed default from TLS v1.0 to TLS v1.2 and rearranged the POD a bit.
(BugId: 123338)
- Started depreciating useSSL. Now prints out a warning if used! Warning
says to use option "SSL_version" instead.
0.38 2017/03/30 08:30:00
- Bug Id: 120802. PreserveTimestamp bugs with _mfmt() & _mdtm(). I pulled
the arguments off the stack in the wrong order. Corrected this.
- Added instructions on how to install this module in an alternate location
to the README file.
0.37 2017/03/27 08:30:00
- Found an issue with size() function when it gets the file size via "STAT".
Found a server where "STAT" returned the results in a different format.
- Removed duplicate setting of {help_cmds_no_syntax_available} key in _help().
- Bug Id: 120623. Missed the 2nd half of the ticket. When Croak=>1 is turned
on to not treat the failure of "SITE HELP" as a fatal error!
0.36 2017/03/20 08:30:00
- Updated the copyright & version number.
- Added additional module versions to the logs in BEGIN.
- Bug Id: 120341. Turns out the latest release of IO-Socket-SSL broke
this module. (v2.046 broken, v2.012 worked) Looks like the start_SSL()
call is removing my "_FTPSSL_arguments" hash entry.
- Bug Id: 120623. The OverrideHELP option had issues. Shouldn't have called
_feat() or _site_help() for =>1 or =>\@lst. So removed in _help()!
- Bug Id: 120621. Request for a new feature of allowing objects that inherit
from IO::Handle wherever it asks for a GLOB! put/get/DebugLogFile/etc ...
Implemented via new helper function _isa_glob(). Also updated POD.
- Updated README section on using client certificates.
- Updated t/20-certificate.t to use a callback & updated the %certificate
hash.
0.35 2016/11/03 08:30:00
- Minor POD updates.
- Bug Id: 118418. Added catastrophic failure protection to _croak_or_return()
by adding: local $SIG{PIPE} = "IGNORE"; before connection termination
logic. Limits the scope to just this one code block.
0.34 2016/07/27 08:30:00
- BEHAVIOR CHANGE - Added fix_supported() as a way to make corrections to
supported(). Editing the returned hash reference of _help() no longer
works! This new method does both additions & removals.
- BEHAVIOUR CHANGE - Modified _mfmt() & _mdtm() to be able to handle localtime
vs gmtime based on changes to how PreserveTimestamp work. As an alternate
way, the behavior can be overriden by a new $local_flag option. The
default behavior is still GMT time. See the POD for a description of how
PreserveTimestamp now works.
- Made POD clarification & other comment updates.
- Increased TRACE_MOD from 5 to 10 blocks.
- Added BEGIN block to detect if IPv6 support is possible. It does this by
asking IO::Socket::SSL instead of reinventing the wheel.
- Moved the generation of the Debug log header info for CPAN support to BEGIN
as well so that this info gets centralized instead of repeated.
- Added Domain/Family as a new option for choosing IPv4 vs IPv6.
- Added OverrideHELP => -1 option to use FEAT instead, when HELP is broken!
- Updated quot() to recognize that MLSD also requires a data channel.
Also improved the disable HELP logic used here.
- Broke up _feat() into _feat() & feat(). Also added feat() to the POD.
Done since under some circumstances the feature list can be dynamic!
Also changed logic on how to tell if OPTS is supported or not.
Finally drops HELP from the list of FEAT commands returned if OverrideHELP
was used.
- Rewrote _help() to make it less confusing. Adding OverrideHELP=>-1 made it
clear it was too messy to support ongoing. Much more understandable now.
Also made it more reliable to get the list of site commands supported.
- Fixed PreserveTimestamp bug in transfer() & xtransfer().
- Added new option xWait for use by xput() & xtransfer(). Some servers won't
honor the rename of the scratch file to it's final name without instituting
a delay. So this option allows you to specify one.
- README - Added more notes about turning on/off SSL logging. Newer
versions allow for dynamic turning on/off. Also updated comments on the
naming of the trace logs.
- t/10-complex.t - Changes to the main test script!
* Now uses fix_supported() in it's is_file() tests since these test cases
hit some lies told by some servers!
* Fixed so it's main logs are named after this test program like the other
test cases do.
* Added new test to verify if the MDTM command correctly uses GMT time
instead of local time. (Assumes MFMT will use the same time zone!) Did
this test early enough so that the last connection used the correct
PreserveTimestamp settings for tests depending on it!
* Added xWait of 1 second to deal with problem FTP/S servers that require
a wait for the xput & xtransfer tests to work.
- t/05-readonly.t - Renamed 05-simple to 05-readonly to more acurately
describe the types of tests this test script does! Updated in MANIFEST &
README as well.
0.33 2016/07/06 08:30:00
- BEHAVIOUR CHANGE - Since many openssl libraries are tightening their
security, I'm adding a new option to preserve backwards compatibility.
By default this module now reuses the context of the command channel
when opening a data channel. If you need to revert back to the previous
default of not reusing the context for data channels, you must now use
option "DisableContext => 1" to do so. But hopefully the need for this
option will be rare. See the POD for more details.
- BEHAVIOUR CHANGE - Added support for SNI in the SSL handshake. Always
does it if supported.
- Changed logic on how to detect if a default "SSL_verify_mode" value needed
to be set to VERIFY_NONE() for the caller in new(). Now checks for specific
SSL_* options before setting.
- Can now pass SSL options directly to new(). You no longer need to use the
"SSL_Client_Certificate" option to pass the hash reference of SSL options.
Currently only recognises IO::Socket::SSL options that start with SSL_.
If any start with something else, I'll address in a future release.
- Clarified some POD information on a few methods.
- Enhanced "size" function to use STAT if SIZE wasn't available!
- Fixed case where sometimes the login account used wasn't being masked in
the response in the logs.
- Now prints the INET version in the log file.
- Resets $ERRSTR to default in new() in case previous call had errors!
- Fixed t/10-complex.t func run_stat_test() to test the "is_file" & "is_dir"
functions. Some tests disable the "SIZE" command so it can test the new
alternate size logic as well.
- New test program t/05-simple.t that does a simple read only test against
the FTPS server. Added so that you can run a simple test against servers
you don't want to upload anything to during the tests. These tests are
not as robust as the t/10-complex.t tests so failures here are not as
meaningfull. So run t/10-complex if you encounter any issues for more
analysis.
- Added t/05-simple.t to the MANIFEST.
- Updated the Copyright in the README file. And reworded a few sections.
- Updated all t/*.t files to add a retry the 1st time they try to connect
to a server via new(). Added a hard coded "SSL_cipher_list" value if
the defaults don't work. This kludge might not work for everyone.
- Modified t/20-certificate.t to be a bit more robust.
NOTE: Found a server where supported() doesn't completely work. That server
fails to put a "*" after some of the commands it didn't implement. So
had to hack a couple of test cases that hit this issue.
0.32 2016/06/14 08:30:00
- Clarified some POD information on a few methods.
- Bug ID: 115296 - Changed the use_ssl test when providing custom SSL_Version
settings via the SSL_Client_Certificate option. Now does a positive test
for SSL instead of a negative test.
- Modified t/10-complex.t to do a better uput test. Put into its own test
function so that I could also validate the filename returned instead of just
assuming it was correct!
- Added additional test cases for files with spaces in their names.
- Added run_stat_test() for future tests for "is_..." functions.
0.31 2016/03/30 08:30:00
- Updated the Copyright.
- Fixed issue where "uput" cmd generated "Invalid number of parameters" error.
Fix is to call STOU a 2nd time with no file name. But if this happens and
the server doesn't return the file name, uput now returns "?" instead of
making what it knows is a very flawed guess! (since it doesn't use the hint)
- Implemented mdtm() server bug fix. Some rare servers do (19xxx) instead of
(20xx) for the year part of the timestamp returned. So implemented
autodetection & fix for this server issue!
- Added undocumented Debug value to supress printing out the HELP information
during login. It got in the way of debugging via add-hock perl scripts.
- Added is_file() to validate if the given name is a regular file!
- Added is_dir() to validate if the given name is a directory!
- Fixed bug in t/10-complex.t that made it look like "make test" succeeded
when in fact it encountered a fatal error forcing it to skip over all the
other deeper tests. Affected call to config func: check_for_pasv_issue()
- Fixed some undef warnings in "uput() test" in t/10-complex.t when talking
to buggy windows FTPS servers that says it supports "uput" but handles it
really strangely or not at all. Now also handles new "?" return value in
the strange case.
- Fixed bug in t/10-complex.t in test_log_redirection() failing a EPSV test
when the destination server didn't support this functionality.
- Modified t/10-complex.t to print the "OK" results to the log file.
Makes it a bit easier to associate failures to what's in the log file!
- Fixed some typoes in the POD.
0.30 2015/08/13 08:30:00
- INCOMPATIBILITY WARNING! If you've been hacking internal undocumented
variables referenced by my module, your code is most likely broken with this
release! If you've been doing "$ftps = new (...); $x = ${*$ftps}{abc};",
it's now "$x = ${*$ftps}{_FTPSSL_arguments}->{abc};" for a lot of them.
This change was made to make it less likely I'll accidentaly step on a
IO::Socket::SSL variable in a future release of either module. It also
helps me with error log traces & some future plans if they ever happen.
- Changed t/00-basic.t so it no longer needs to call uc(). Also now uses
__PACKAGE__ keyword instead of hard coded text.
- Fixed error message bug in _get_data_channel(). Got SSL_version from wrong
hash.
- Reorganized the order of some functions in the POD.
- Fixed minor bug in the masking of the user id when writing to a log file!
- Looks like the sysread() call in response() is sometimes spurriously setting
the special variable "$!" for Perl 5.10.1 on AIX 7.1. So if the command
looks complete I'm going to ignore the error message returned in "$!".
I'm probably going to have to figure out a better test for this later on!
######
- EXPERIMENTAL: Added 2 new functions set_dc_from_hash() and copy_cc_to_dc().
They provide two different ways to micro manage the SSL options used to
manage the Data Channel without the need to hack the code base. There are
more SSL options than I know what to do with so hopefully this will help
with managing the data channel.
0.29 2015/07/06 08:30:00
- Fixed typo that broke reuse session. Bug was overwriting key value!
- Fixed uc() warning in t/00-basic.t for Perl 12 & above.
0.28 2015/07/01 08:30:00
- Updated README file with info on how to turn on SSL tracing so that I can
more easily find that information again.
- Fixed log display issue if there was no username and/or password passed
to login().
- In quot() fixed pattern match bug when setting $cmd2. (\S* to \S+)
- Added LICENSE file to my package (+ Manifest). Kwaltiee Experimental # 3.
- Rewrote Makefile.PL to support optional parameters so I could add
conditional Kwaltiee Score variables.
- Added MIN_PERL_VERSION tag to Makefile.PL Extra Kwaltiee Metric # 1.
Enforced Ver. 5.6.1, since that is the earliest perl my module was tested
against by the smoke testers. But it was last tested that way with v0.11.
Version 5.8.8 is the oldest version of Perl I test against regularly.
- Added LICENSE tag to Makefile.PL Extra Kwaltiee Metric # 2.
- Added Net::SSLeay as a fake dependancy to Makefile.PL & as a test case in
t/00-basic.t for the benifit of some Smoke Testers who fail my module due
to this indirect dependancy not working. I don't use this module, but it's
obviously a dependancy of IO::Socket::SSL. But it looks like it might
not be a declared dependancy since it's failing to load for a smoke tester
while he's testing my module.
- Fixed _print_LOG() to support multiple arguments. So no longer have to
concatinate everything before using.
- Rewrote _debug_print_hash() to be able to handle hashes of any depth.
It's now recursive with infinite loop detection.
- Added logic to support reusing the session instead of just the context.
This is via the new option "ReuseSession=>1".
Thanks Forrest Tiffany for your patch! (Bug Ids 76108 & 104407)
0.27 2015/03/28 08:30:00
- Fixed Bug Id # 102680. Bad "supported" test in xput/xtransfer with
regard to OverrideHELP=>1. (All other OverrideHELP options worked fine.)
- Added "all_supported()" to assist fixing the above bug & put into the POD.
- Some minor POD corrections.
- Added check to quot("HELP") to see if HELP was overriden. Required
a minor change in new() to support this logic. We know help is broken if
OverrideHELP was used!
- Added the INTERPRETING THE LOGS section in the POD text.
0.26 2015/02/10 08:30:00
- The deprecialted SSL_Advanced option now causes new() to call croak.
I'll remove any remaining reference to it in v0.27 or v0.28. (2016 earliest)
- The POD text no longer mentions the SSL_Advanced option at all.
- Added to README the new environment variable created for the test scripts
in the previous release.
- The RFC links in the SEE ALSO section had all expired. Located replacement
links for all referenced documents. Looks like they were just moved to
another location on the same web site. A victim of web-site remodeling.
- Enhanced _debug_print_hash(). It originally worked with just GLOBs, but
now works with regular hashes as well. Also fixed to follow SCALAR
references.
- Now dumps to the log file the contents of the SSL_Client_Certificate
hash if provided. Was difficult to debug logic when it wasn't logged.
- Bug Id # 101388, reusing SSL_Client_Certificate options on the data channel.
Added additional options to go with SSL_reuse_ctx to resolve this issue.
I checked the IO-Socket-SSL docs & all variables in the bug id are by
default part of SSL_reuse_ctx. So some low level code isn't resolving
the context correctly. This is a work arround. (Certificates were not
being used here. Just using the context for strict hostname verification.)
May be a case that when certificates are not used, the context isn't
fully used either.
0.25 2014/09/05 08:30:00
WARNING: This is a major upgrade & may not be 100% backwards compatible with
existing code. Also the response() redesign may not work for all
FTPS servers! It's a work in progress! So comments are welcome!
- Upgraded the minimum version of IO-Socket-SSL required from v1.08 to v1.26
so that I could remove the warnings in the POD for ccc(). But it should
still work with the earlier versions if you hack the code. But don't rely
on this in future releases. (minus the ccc command)
- Modified the Synopsis to use Croak since no one was reading my comments
about using it too closely anyway.
- Added a new pattern for uput() to check for file names with.
Also fixed to guarentee it will never return any path info, just the
base file name itself. [ This change may break existing programs. ]
- Another hack to recover from a garbled CCC response. This hack just
prevents unnecessary warnings.
- Hit a weird FTP server that requiers me to flip flop the binary/ASCII
settings on the server/client. See mixedModeAI() & mixedModeIA().
code something like: "if ($ftps->command("NOOP")->response() == CMD_OK)".
This should be compatible since it shouldn't be called externally, and
you should always be calling response() afterwards anyway. It still calls
die if "Croak=>1" is used. Response() will return CMD_ERROR should
command() have issues to avoid hangs.
- Modifed Net::FTPSSL to use the new command()->response() format internally.
0.17 2011/01/03 08:30:00
- Fixed a subtle bug in response(), now tests if a parse succeeded instead
of assuming it. Allowed me to simplify this messy code quite a bit.
- Reordered the methods in the POD to put some of the more relevant FTP
commands closer to the top & the more obscure at the bottom to make
for easier reading of the documentation.
- Reworked t/10-complex.t quite a bit. Made sure croak was always turned
off immediately after a successful login. Also now using the same hash
for all the connection attempts. I really need to take the time to do
further redesign this script to make it easier to troubleshoot.
- Fixed the smoke tester failures. (They always answer NO to the deeper test)
- t/10-complex.t now checks if OverridePASV or OverrideHELP are needed against
the test server & dynamically adds it for the test cases if needed.
Net::FTPSSL still can't dynamically figure this out for itself.
- Added PASV/EPSV prompt to t/10-complex.t script instead of assuming PASV.
0.16 2010/11/30 08:30:00
- Used Perl's special variables to write the Perl verion and OS to the logs
to make support easier when trouble shooting tickets.
- Fixes for Bug Id 61432.
- On systems like "Connect:Enterprise UNIX", it incorrectly sends the
response to HELP partially in clear text and partially encrypted on the
command channel. This causes this class to barf and never recover once it
hits the clear text. So a new "OverrideHELP" option was created to bypass
calls to HELP if your server has this strange behavior. This is needed
since HELP is called internally by the Net::FTPSSL class via supported()!
** Maybe in the future I'll figure out a way to dynamically handle this. **
- On some systems the server administrator won't configure their servers
correctly to use the correct IP Address in the PASV response through a
firewall when establishing a new Data Channel Connection. To get arround
this, a new "OverridePASV" option was created to force the use of the
Specified Server Name instead of the invalid IP Address returned in the
PASV response!
** Maybe in the future I'll figure out a way to dynamically handle this. **
- Added "OverridePASV" & "OverrideHELP" test cases to t/10-complex.t
- Added EPSV support. Required the reorginization of some internal
undocumented methods that no one should be using.
- Added EPSV test to t/10-complex.t
0.15 2010/04/27 08:30:00
- Fixes for Bug Id 53719. Requested all internal calls to "ALLO" be
conditional since some server connections die when it receives an "ALLO"
command.
- Fixing the above bug uncovered an infinite loop if Croak was also turned on.
Now _croak_or_return() doesn't try to close the connection if called by
command() or response() or if recursion was detected.
- Fixed quot() to no longer upshift the command to upper case. Discovered
case where lower case was required. So it's now up the the caller to
put in upper case if it's required! Also no longer checks if the command
is valid according to HELP. Some servers attempt to be sneeky by not
advertising all available commands.
0.14 2010/01/04 08:30:00
- Added minimum requirement of IO::Socket::SSL v1.08, since I just got word
that v0.97 caused Net-FTPSSL to hang! And v1.08 was the release I
originally developed Net::FTPSSL with & is easily available for Windows
users as a pre-built release. But that release is still pretty old.
(IO::Socket::SSL is currently at v1.31 as of this writting.)
- Fixed bug in _common_put() where it didn't actually test the final status
message when closing the data connection. So missed a rare failure case.
- Fixed similar bugs in list() & get() as well.
- Caught more list() & nlst() error conditions that returned undef instead of
the empty list as documented.
- Added the Server/Port to start of trace file after the version # since not
all servers returned this info in their log messagse.
0.13 2009/11/01 08:30:00
- Decided to skip unlucky release # 13!
0.12 2009/09/29 08:30:00
- Made some POD changes.
- Fixed so each class instance has it's own file hande so multiple instances
won't write to the log file of the last Net::FTPSSL->new() call made with
Debug turned on. Also fixed t/10-complex.t to use multiple connections so
we can manually verify this is finally corrected.
- Made sure the version of FTPSSL used always gets written out when Debug is
turned on. So removed this code from t/10-complex.t as no longer needed.
- Fixed "quit" to close the DebugLogFile, will write to STDERR if anything
else is improperly called after "quit" is called!
- Fixed "put" tie file handle problem from Tkt # 49378.
- Added mdtm() & mfmt() to follow FTP specs & exposed _mdtm() & _mfmt() in
the POD text, which uses timestamps instead. Per request # 49376. The
underscore versions are more user friendly.
- Added size() per request # 49377.
- Minor fixes to 10-complex.t to support new functionality.
- Reorged some older code to make it easier to maintain. Making some blocks
of code much smaller and less awkward.
- Fixed xput & xget to delete the dest file before renaming the scratch file.
Avoids rare file permission issues when the dest file already exists and the
file recognizer is down.
0.11 2009/07/19 08:30:00
- Added ccc() to end of 10-complex.t test script.
- Updated the ccc() docs on issues with older IO::Socket::SSL versions.
- Provided solution to Tkt # 47659, problems with CCC - RFC 4217 Section 12.3.
Where CCC behaves differently for different FTPS servers.
- Added Debug option to allow writing to DebugLogFile in append mode instead
of creating a new log file every time. So can use same log file when
serially making FTPS connections.
- Now allows overriding of the IMP_CRYPT port 990 to something else. Found a
server that allowed me to change the implicit port # for this. Tkt # 46851.
0.10 2009/06/30 08:30:00
- Updated the Port vs IMP_CRYPT documentation to state you can't override
port 990 for IMP_CRYPT. Where before this was just assumed.
- Added option DebugLogFile to allow you to write your Debug info to a
file of your choice instead of STDERR. This way multiple FTPS connections
can be traced separately of each other. Also keeps other writes to STDERR
separate.
0.09 2009/05/13 08:30:00
- Fixed some typos in the documentation.
- Fixed so list() & nlst() no longer return undef on some errors instead of
the empty list as documented.
- Fixed bug # 45710 where nlst() has issues returning zero rows.
- Fixed xput() so the scratch file is guaranteed to appear in the same
directory as the final file unless the prefix overrides it with a directory
of it's own. Fixes issue where the remote file wasn't being written to the
current directory on the remote server and we couldn't write to the current
directory on that server for the scratch file.
- Added xget() as the complement to xput(). Where the file recognizer is on
the client side.
- Added ccc() for finally supporting the CCC command. (Clear Command Channel)
- Improved get() logic for removing zero byte files if it can't download the
requested file. Still leaves behind partially downloaded files on purpose.
- Enhanced t/10-complex.t to test new functionality. (But not CCC due to
security concerns.)
- Added last_status_code() to return the 1 digit status returned by message()
so your code can branch on particular issues instead of just pass/fail.
0.08 2009/03/23 08:30:00
- Fixed new() to also accept a hash reference. So can do either way now!
Pass the hash by reference or pass the hash by value.
- Fixed command() & response() undefined function bug when called by a
socket data type in new() and a fatal error was encountered. Solved by
not calling the member function in the normal way.
- Added $Net::FTPSSL::ERRSTR to give you access to the error messages
generated when you couldn't create a Net::FTPSSL object via new(). Also
set when Croak is called even though you had the special perl variable $@
for this. It is also printed to STDERR when Debug is turned on.
- Fixed response() case where the ending message had CR's in it and it was
being truncated.
- Fixed response() to detect unexpected EOF: Bug # 43670.
- Now passes Timeout to start_SSL() calls in new().
- Added plain old FTP as option CLR_CRYPT. Just avoids encrypting the
command channel. Still doesn't support the CCC command.
- Fixed implicit problem. Turned out to be a bug in choosing the "default"
port as well as reading the response to soon. Bug # 28914.
- Exposed all the FTP CMD status constants for public use.
- Added unsupported option SSL_Advanced for Enhancement Request # 44042.
Use at your own risk! It's not supported by the developer of Net::FTPSSL.
- Enhanced t/10-complex.t to print the version of Net-FTPSSL being tested and
support/test the new functionality. Also now generates a backup copy of
the trace log named after the options selected to ease testing of multiple
( run in 0.519 second using v1.01-cache-2.11-cpan-39bf76dae61 )