Code:
*** Bug Fixes
18) Possible "lockup" bug solution. There were 2 places in the code which
closed a socket and then removed the socket id from a list searched
in a windows callback. It should have been removed first and then
closed to avoid a race condition.
19) Secure_Ip didn't properly initialize a variable and would thus fail the
test for backwards compatibility (no rules defined at all) so it would
reject all addip attempts from non-master accounts.
20) Ident responses now update the static data structure so site swho, shared
memory commands, etc will no longer always have the default "*" in the
ident field.
21) Very rarely the etc/UserIdTable and etc/GroupIdTable files get corrupted
somehow. I assume this is a result of a power failure or a system crash.
I've added code to force the temp file to be flushed to disk along with
it's metadata and asked for the file rename to be immediately written
as well. The rename should be an atomic operation where it either works
or the OS rolls the rename back, so the only thing I can think of is that
the new file wasn't committed to disk but the rename was. Hopefully this
should fix an extremely rare, but very bad, problem.
22) UserIpHostMaskInit would crash if no users were defined at all.
23) In some cases the hostname lookup for the HOST= or BIND= parameters would
timeout or temporarily fail and you would see the following log entries:
[timestamp] Unable to read/resolve host address: xyz.com
[timestamp] Device 'Any' failed to start due to HOST/BIND/PORT error.
Nothing special needs to be done if this occurs at startup since the
next ConfigUpdate event [every 10 minutes by default] will hopefully
fix things when the DNS server returns. On an already active server when
this happens during a ConfigUpdate event the server would stop listening
for new connections until the hostname could be resolved at a future
ConfigUpdate. This is almost always the wrong thing to do and instead it
will now either bind to all addresses, and/or use the previous HOST=
resolved address. It will still report the problem, but this should
allow the server to continue accepting new logins provided the IP really
hasn't changed.
24) Rewrote the logic to avoid strcpy_s and instead use stcncpy_s in the
RecursiveAction function to avoid situations where path+filesnames which
are longer than 260 characters would trigger the safety exception and
cause the server to stop. Instead a log entry with the first 260
characters of the offending directory or file is printed in the
Error.log file.
25) Fixed a bug which resulted in a crash if an unknown user tried to login
and Require_Encrypted_Auth wasn't defined in ioFTPD.ini.