PDA

View Full Version : ioFTPD v6.6.1 BETA Released


Yil
06-03-2008, 02:16 PM
V6.6.0 brings the first true virtual directory... "/Search" is amazingly powerful and flexible because it allows scripts to return information upon request that is turned into the appropriate style of directory listing and sent back to the user! Read the very long ChangeLog entry on how scripters can use this powerful new feature. For nxTools users I have provided a simple proof of concept so you can take advantage right now! It will change the way you look for things permanently. Of course, I expect you fine folk to set me up with account on your sites for something this cool :)

Oh yea, added a bunch of real FTP (non-site) commands to the server to support things like XCRC file verification and some other stuff...

Latest Version:
ioFTPD-v6.6.1.zip (http://home.comcast.net/~yil/ioFTPD-v6.6.1.zip)

Source:
ioFTPD-v6.6.1-src.zip (http://home.comcast.net/~yil/ioFTPD-v6.6.1-src.zip)

Yil
06-03-2008, 02:18 PM
v6.6.0 Release Notes:

1) Files in \system:
Changed : ioFTPD.[exe,pdb] - Version 6.5.1.0
Changed : ioFTPD.ini - summary of changes by section...
[Locations] : Cache_Files (deleted)
[File] : MessageCache_Size (comments changed)
[Events] : OnVirtualSearch

2) Files in \doc:
Changed : itcl.txt
Changed : Cookies.txt

3) Files in \source:
Added : ioNxSearch.itcl [Only for users using nxTools]
Changed : Some headers in include dir needed for UserFiles.

4) Files in text\ftp:
Deleted : UserInfo
Added : UserInfo.[Header, Sections, Footer]

5) Delete the entire \text\telnet directory as it is no longer needed.

6) Delete the entire \cache directory as it is no longer used.



*** New Features:

7) New ioFTPD.ini option (OnVirtualSearch under [Events]). This event
provides support for the new TOTALLY virtual directory ("/Search") which
can be used by scripts to support dynamic search queries which return the
results as a real directory listing! *** READ THAT AGAIN! ***

In order to activate the dynamic /Search directory you must have a real
/Search directory (preferably a subdir under / and not a mountpoint) and
have defined the OnVirtualServer event. If you do not define the event
then the /Search directory just displays the real directory contents.

If the event is defined then the indicated script is called whenever a
directory listing requesting contents from the /Search dir. The argument
to the script is any filename/glob pattern provided. This is true
regardless of which list command (LIST, STAT, MLSD, NLST) initiated the
listing and works for any local listing (pwd=/Search and something like
"LIST foo"), or a targetted list such as "list -al /Search/foo" in which
case the "/Search/" portion of the argument is automatically stripped off.

As a special case a symbolic link that points to /Search/ will strip the
/Search/ off and perform a search on the remaining text! Thus you can
setup things like /Top10 -> /Search/;Top10; (use site chattr +l since this
is an invalid filename) and dynamically create the list of top 10
downloaded directorys. Or perhaps a Latest link which will on the fly
list the last 20 directories created. This should be wonderfully useful!

NOTE: Many FTP clients cache the results of directory listings to avoid
having to request them each time you enter the directory. This
causes 2 problems.

1) Attempting to follow links /Search/Top10 followed by
/Search/Latest will probably show you the Top10 results until
you hit refresh to download a new listing.

2) FTP Clients are often not smart enough to realize that a manually
entered "list -al /..." probably doesn't refer to the current
directory and shouldn't be cached as that directory's listing...
Just hit refresh to get the real listing.


The script can return 2 types of lines:
N<text to show up a local directory>
L<text to show up as a linked directory>|<absolute-path-to-target-dir>
N lines are really just for informational purposes and are shown as a
local directory with a current timestamp and any attempt to cwd into
one will always fail. L lines are shown as a symbolic link with the
timestamp/permissions/size of the target directory which must exist or
the line isn't displayed. If you cwd into the name returned it will act
just like a symbolic link and take you to the linked directory. It'
important to note that there are very few limitations on the names
returned so except for "|", NULLs, and CR/LF everything else is valid.
A simple case insensitive search through the buffer of lines starting
with L looking for the text of the CWD command (after "/Search/" is
removed from the front if present) is done until a match is found and
then the target dir is used from that point on. Thus it's possible you
could return things like "1) Match", or even invalid names like "1;foo",
"1*foo", or "1/foo". The last is particularly useful because it allows
you to return a fully qualified pathname for both the name (normally not
allowed but OK with some FTP clients) AND the target directory so when
viewed by most FTP clients you will see things like /dir/0510/foo instead
of just foo in the listing. It may be necessary to use the new itcl
function [user ClientType] below to tailor output to different clients...

The first time a user does a search the script is always called. Thus
"list", "list -al", "stat -l", etc will all call the script with no
arguments which should be an indication to return some N style lines
explaining what to do or possibly some top-10, latest, etc links. Once
the script returns a result it will be cached internally and the script
will only be called when arguments to the listing function are provided.
This allows you to refresh the directory and/or return to it later and
still see your results.

I have provided an example script that uses nxTools as the underlying
search engine. It should be simple enough for other scripters to write
their own for other dupe/search engines. If you use nxTools and want
to try this feature out copy ioNxSearch.itcl from the /source directory
to the /scripts directory and set
OnVirtualSearch = TCL ..\scripts\ioNxSearch.itcl
Enjoy!

8) New FTP command (CLNT <ftp-client-name-and-version>). This command is
also advertised in the FEAT response. FTP clients that see this in the
FEATure list often issue this command to register with the server the
name and version of the FTP client being used.

9) New iTCL command ([user ClientType]). Returns whatever text followed the
CLNT command if issued by the client, or -1 if not provided.

10) New FTP command (XCRC filename;start;end). This is used by some FTP
clients to confirm that files transfered correctly and/or that a remote
file matches a local file without transfering it. My implementation has
a couple of tricks up it's sleeve. Normally the computation of the CRC32
value is done on the fly while a file is uploaded if the ioFTPD.ini
Compute_CRC setting is set to true (it is by default) and never done
for downloaded files. After the first XCRC command the server assumes
that you will be requesting this information for all transfered files
so it automatically starts computing the CRC on the fly for both up and
downloaded files all the time to avoid having to read the entire file
later.

XCRC is also a bit tricky with respect to the last uploaded file. In
this case the first XCRC for the file will return the cached CRC32 value
for the file BEFORE any OnUpload events were run which means means that
it might not reflect the current file on disk. This is useful because
zipscripts may add/delete files (like site .nfos) immediately upon upload
and this would cause the FTP client to think it didn't transfer correctly.
This only applies to the last upload file and only the first time XCRC is
called for that file so a second call immediately after upload will
re-compute the value based on the file on disk just like the command will
do for any other file.

11) Modified site command (site uinfo <username> [totals]) Previously this
command simply looked up the indicated user and displayed the UserInfo
file with the user's info loaded. The problem was dealing with sections.
Using the %[IF] cookie I supported up to like 5 sections but figured
supporting all 25 by default was a whole lot of processing for 24 unused
sections in simple site configurations. I suggested users just copy,
paste, and modify more sections info the file if they used more than 5.
That really was sort of painful for novice users because the syntax for
%[IF] sucks and making a change to the format meant editing a LOT of
lines. Therefore I've split the UserInfo file into 3 parts now (Header,
Section, Footer) with the middle Section piece being called once for each
defined section. In that file you can refer to the simply named
$CreditSection, $StatsSection, and $Section cookies and they will refer to
the section to display information for instead of the section associated
with the user's current VFS path. This makes the file MUCH cleaner and
easier to maintain. The Footer is also special now in that I've added
functionality to total up all statistics across all the sections into
section 0. Thus you can use the AllUp, DayUp, etc of section 0 in the
footer and it will be the TOTAL bytes/file/time uploaded... If you
specify the optional "totals" argument after the username it will not
call the Section file for each section, but will still total all the
sections together so you can present summary infomation in the Footer if
you want. This is kind of useful if you have 25 sections but don't care
about seeing any of that for a particular call.

NOTE: Sections are looked up based upon their STAT section number. Thus
while it is usually true that $CreditSection == $StatsSection don't
assume it. $Section is the stat section name, ratio should use
$CreditSection to get the ratio, but the actual credits are
controlled by whether shared credits are being used which can be
looked up via %[sharedcredits]. For more info see [Sections] in
ioFTPD.ini.

12) Added REST STREAM to FEAT response to formalize support for the REST
command that is already available and commonly used.

13) Added TVFS to FEAT response which confirms "/" as a directory separator.

14) Partially implemented the MLSD (machine parsable directory listings), but
FlashFXP MLSD improperly converts UNIX.owner and UNIX.group to all
lowercase which will cause all sorts of problems if you refer to %o in
custom commands, etc. Since so many people use FlashFXP here I am not
advertising support for the command in the FEAT response because FlashFXP
notices it and will use it by default for all listings. I have not
implemented the trivial MLST and OPTS commands that go with MLSD and are
part of the standard because they aren't used much but will do so when
ready to use this.

15) The ".ioFTPD.cwd" file, if present, is now displayed before the
".ioFTPD.message" file when you cwd into a directory. This file can
contain cookies to support things like nxtools, but probably should not
be generated by zipscripts which should continue to use the
.ioFTPD.message file.


*** Functionality changes:

16) Redid the internal message cookie caching logic. Previously this would
parse a file for cookies, save the parsed internal representation into
the /cache directory and then read it back in from there each time it
was needed again. Now the server just caches the files in memory and
returns pointers to cached copies. This should be much faster. With
the v6.5 change of not parsing cookies in .ioFTPD.message files this
effectively means that the server won't be reading message files over
and over again.


*** Bug Fixes:

17) All old userfile field names are now back to being all lowercase in the
userfiles to support older scripts.

18) It should REALLY supports 25 sections now :)

Mave
06-03-2008, 02:35 PM
WoW Amazing stuff Yil

Cant wait to install this :):):)



Great Work ...... My day is wonderful again. :D

whocarez2k5
06-04-2008, 02:44 AM
Nice release Yil

Going to setup straight away


p.s.: Are multiple options in configuration separated by <space> or ; or something else?
for example: Immune_Hosts = 192.168.*.*;127.0.*.* ?
( i know 127.0.*.* is always immune but was just an example)

Flow
06-04-2008, 09:32 AM
Very cool, Thanks Yil!

whocarez2k5
06-04-2008, 10:29 AM
@Yil, got 1 little error with v6.6.0
Just to let you know
18:43:29 > site makecert
18:43:29 200-NAME="ioFTPD" [FTP_Service (Certificate_Name)]
18:43:29 500 makecert: Unknown error (2148081669).

update:
with Certificate_Name unchecked it works btw

Yil
06-04-2008, 11:08 AM
That's not really a problem with ioFTPD. It's makecert complaining about something. Check the changelog to see how to run CertMgr as a MMC plugin and look for the certificate. Windows has a host of problems associated with it's cert store. Rebooting is often required to close existing open connections which allows an old cert to actually be freed and a new one with that name to be created...

From the comment of Immune_Hosts: List of space separated wildcard IP/hosts that are immune from banning. So yea, just put a space between them :)

whocarez2k5
06-04-2008, 11:11 AM
Windows has a host of problems associated with it's cert store.Fixed, i needed to remove old cert created with v6.5.0, that was the problem.

Flow
06-04-2008, 11:55 AM
I was to mention that when user logon with missmatch ip@ident, should´n it reply with anything else but "bad password" ?

530 Login failed: Invalid password.

Flow
06-04-2008, 01:06 PM
Hmm ......... maybe is me not reading the doc or too lazy using forum search tool. Im gonna try remove old CERT and create a new one. Maybe this is a ssl cert thingy .........

Yil
06-04-2008, 01:50 PM
Flow: The generic "bad password" reply is actually a security feature. If you could try random names and it would reply "bad IP/hostmask" then you know you guessed a valid account name. Deleted/expired accounts are a somewhat special case because they are technically unusable accounts at that point so leaking the name versus informing the user seemed like a good thing to make configurable. I support both options by how you setup the On[Deleted|Expired]Login events. Technically I should probably only show the deleted/expired message if you have it setup to do so AND the hostmask matches. I'll have to think about that one some more...

If people want it to return a "bad host/ip" error I can certainly make it an option you can enable, but like I said it will leak account names if someone was trying to scan the server.

whocarez2k5
06-05-2008, 02:47 AM
@Yil,
Not really v6.6.0 related but maybe you can help me out here.
I was reading config sections and having some problems with symbols part under locations.
at the symbol part i'm lost.
If i read your guide i first need to enable symbol download from ms
after that cache dir is created and i can disable download part. (all files downloaded ok)
I think it crashes because dir is empty or not even there in the first part
after download it should be now no problem to perform site LoadSymbols?
Am i right or missing things, because it still crashes when doing cmd

Symbol_Path = c:\MySymbols
# Download debugging information from MS and store it locally
;Symbol_Path = srv*c:\MySymbols*http://msdl.microsoft.com/download/symbols

Yil
06-05-2008, 03:45 AM
Looks like you did it correctly. LoadSymbols is designed to crash just like site CrashNow does. The difference is you need to answer a prompt from a stupid MS popup the first time you access their symbol server to download the .pdb files. LoadSymbols just enables that popup to be displayed...

Flow
06-05-2008, 12:11 PM
:/

Im stuck, cant login after 6.6.0 upgrade, Stuck with the "530 Login failed: Invalid password"

Yil
06-05-2008, 01:08 PM
Try swapping in the 6.5.0 executable and see if things work. I'm betting that won't fix it though. Try looking in the /log directory and see what it says when you try to login (error.log file). I remember you mentioning something about bad host/ip. Try logging into the ioFTPD account via 127.0.0.1 and see if that works... Need a little more to go on because I'm blindly guessing here :)

Flow
06-05-2008, 03:54 PM
ok, solved, found the issue. Im not gonna admit that i overwrote the /etc folder. Must be the damn cat, so problem solved. The issue was a nooby user. Sorry ....

thomas74
06-11-2008, 10:59 PM
Is the lockup bug fixed in either 5.0 or 6.0?

Yil
06-12-2008, 05:13 AM
Unsure. I removed a socket call that I thought might be causing problems so it's possible it's fixed. It's a very rare bug though and nearly impossible to reproduce so only time will tell.

thomas74
06-13-2008, 12:26 PM
it really annoys me to inform the lockup bug is still there. I use 6.0 with latest nxtools and ioninja on windows vista.

What's the latest version of ioFTPd that does not contain this bug?

Flow
06-13-2008, 09:54 PM
Lockup ? How do i reproduce this lockup? I wanna have a lockup too :p

thomas74
06-14-2008, 01:06 AM
I wish I could tell what's causing the lockup. The machine I'm running the server on is a fast 100 mbit on OS vista. If I could be of any help I'll volunteer, the lockup on this machine happens often.

And again, what release of io does not contain this bug :)

Flow
06-14-2008, 02:06 AM
Maybe Yil can make you a -debug version to resolve this issue. I myself have been using/participate with ioFTPd almost every new version without this lockup issue. You mention lockup often... your hardware are ok? HDD and MEM specially.

thomas74
06-14-2008, 02:41 AM
I'm fairly certain my hardware is OK. I have not found a pattern as to why this bug occur, but fast transfers and several bilateral threads seem to be ingredients needed to make it occur. Although, the bug might occur on little load with just one thread going. It also seems the bug will occur when there are directory changes. I don't think I've seen it occur during a transfer in progress, but only when the transfer goes from CD1 to CD2 or to Sample. However, the directory change will cause a lockup on other simultaneous going threads.

This is indeed frustrating, and I hope it gets sorted out. I'm just too effin' lazy to start learning a new ftp-soft. :o.

Yil
06-14-2008, 09:47 AM
thomas: Describe exactly what you see happening. Can you issue "site crashnow" and does it work? If you try to connect to the server immediately after you see it acting wierd do you at least get as far as the login prompt, an accepted connection, or does the connection just time out? And describe your hardware. I don't think you have a hardware problem, but I was able to see this bug on multi-processors in the past more often so that's useful to know...

Microsoft offers a tool called app-verifier. It's freeware. Try downloading that and setting it up to monitor ioFTPD. It will make ioFTPD use a lot of memory and be a bit slower but it can catch a lot of issues. If it finds any let me know. There are 1-2 false positives, but for the most part if it complains it's something that needs fixing. You might need to download MS Tools for Debugging in order to get windbg to create the stack traces app-verifier requests to assist in debugging, so grab that as well... This is the single best way to help solve this issue.

Ordinarily I'd say just send me a crashnow dump so I can see what's going on, but because the process is so badly messed up that won't work. You might be able to use the vista debug/memdump or whatever option from task manager to create a minidump of the process. I can use that to verify it's the same problem I've been trying to track down. This is actually far less useful than the app-verifier tracking because that might catch the problem when it occurs and not when it shows up later.

Yil
06-14-2008, 09:54 AM
Oh, as far as last version without this issue. I have no idea and believe me I wish I did... I'm pretty convinced it's been there forever. It's the fact that we started getting multi-processor and faster machines that is making it show up now...

Assuming you aren't running recent versions of ioNiNJA/ioSFV you could always try going all the way back to 585r just to prove it didn't occur there if it really does happen every week or so to you...

thomas74
06-14-2008, 10:49 AM
thomas: Describe exactly what you see happening. Can you issue "site crashnow" and does it work? If you try to connect to the server immediately after you see it acting wierd do you at least get as far as the login prompt, an accepted connection, or does the connection just time out?

1) I send a release to the server containing two cds(two folders) and a sample(one folder). The dirs are always created successfully, and if I manage to get the SFV in, it seems like all files in the directory will transfer. It would seem that the server locks up during the directory changes. Let's say CD1 was transferred successfully and I start uploading the sample. I make the directory SAMPLE, but rather than completing the transfer I get a message similar to "no connection could be made"; and the same message is repeated until the entire queue transferred unsuccesfully. When the bug already have occured and I try to upload something, the transfer will just stall for minutes, hours or days, until I stop it -- no errors. I am of the impression that this bug occurs only during directory changes.



2) I can issue SITE CRASHNOW, but I don't see any dump being created. I see a crashlog being created, but I'm not sure if it's due to my ctrl+alt+del ending of ioFTPD or me issuing SITE CRASHNOW. From the crashlog:

Fri Jun 13 23:08:08 2008 - ioFTPD v6.6.0
Unhandled exception: Access Violation (0xC0000005)
Address: 0x0042BFDD [attempting to write data to 0x00000000]
PID=7044, PATH=C:\ioFTPD\system\ioFTPD.exe
Thread ID: 4836

System information:
Processor #0 Name: Intel(R) Core(TM)2 Duo CPU T5450 @ 1.66GHz
Processor #0 Identifier: x86 Family 6 Model 15 Stepping 13
Processor #1 Name: Intel(R) Core(TM)2 Duo CPU T5450 @ 1.66GHz
Processor #1 Identifier: x86 Family 6 Model 15 Stepping 13
OS: Windows 6.0 (build 6000)
Registry: Windows Vista (TM) Home Premium
Decoded: Vista Home Media Center Edition
Page size: 4096
Notice: Unable to acquire Debug Rights


3) Usually I am able to login after the lockup has occured, I can also issue various commands. Other times again, I'm not able to log in at all; the server won't connect to the client at all. I haven't been able to see any pattern.


And describe your hardware. I don't think you have a hardware problem, but I was able to see this bug on multi-processors in the past more often so that's useful to know...

Yes, as you can see above it's a core2duo with 2 gigabyte or RAM.


Microsoft offers a tool called app-verifier. It's freeware. Try downloading that and setting it up to monitor ioFTPD. It will make ioFTPD use a lot of memory and be a bit slower but it can catch a lot of issues. If it finds any let me know. There are 1-2 false positives, but for the most part if it complains it's something that needs fixing. You might need to download MS Tools for Debugging in order to get windbg to create the stack traces app-verifier requests to assist in debugging, so grab that as well... This is the single best way to help solve this issue.

Ordinarily I'd say just send me a crashnow dump so I can see what's going on, but because the process is so badly messed up that won't work. You might be able to use the vista debug/memdump or whatever option from task manager to create a minidump of the process. I can use that to verify it's the same problem I've been trying to track down. This is actually far less useful than the app-verifier tracking because that might catch the problem when it occurs and not when it shows up later.

Alright, I will try installing app-verifier to see if anything can be found.

Oh, as far as last version without this issue. I have no idea and believe me I wish I did... I'm pretty convinced it's been there forever. It's the fact that we started getting multi-processor and faster machines that is making it show up now...

Assuming you aren't running recent versions of ioNiNJA/ioSFV you could always try going all the way back to 585r just to prove it didn't occur there if it really does happen every week or so to you...

Hehe, could be worth the try. This bug occurs several times a week, and if I wanted I'm sure I could make it occur several times a day. Trouble however, is that I don't have physical nor complete remote access to the vista machine.

Yil
06-14-2008, 02:13 PM
Cool. Let me know what app-verifier turns up :)

Just to clarify something. If you enter "site crashnow" does the process actually exit?

After the lockup occurs a critical low level windows lock is somehow held. This prevents new processes, threads, and sockets from being created. However 10 sockets are pre-allocated for accepting new client connections so for a little bit you can actually connect and login (provided it's an IP match for the hostname because the server can't reverse resolve at this point) but you can't transfer any directory listings or files over a data channel. You can probably use stat -l and still get directory listings over the control connection though. This should also be true of your current connection after it locks up...

exitwin98
06-15-2008, 12:29 AM
use "site swho username" ioFTPD will crash

CRASH-Log.txt

Sun Jun 15 16:52:23 2008 - ioFTPD v6.6.0
Unhandled exception: Access Violation (0xC0000005)
Address: 0x0041900F [attempting to read data from 0x00000000]
PID=5328, PATH=D:\ioFTPD\system\ioFTPD.exe
Thread ID: 6000

System information:
Processor #0 Name: Intel(R) Pentium(R) Dual CPU E2140 @ 1.60GHz
Processor #0 Identifier: x86 Family 6 Model 15 Stepping 13
Processor #1 Name: Intel(R) Pentium(R) Dual CPU E2140 @ 1.60GHz
Processor #1 Identifier: x86 Family 6 Model 15 Stepping 13
OS: Windows 5.2 (build 3790)
Registry: Microsoft Windows Server 2003 R2
Decoded: Server 2003 R2 Enterprise Edition - Service Pack 2
Page size: 4096

Modules:
--------
[00400000 - 0049d000]: D:\ioFTPD\system\ioFTPD.exe (v6.6.0.0)
[7c930000 - 7ca00000]: C:\WINDOWS\system32\ntdll.dll (v5.2.3790.3959)
[7c800000 - 7c92b000]: C:\WINDOWS\system32\kernel32.dll (v5.2.3790.4062)
[10000000 - 10163000]: D:\ioFTPD\system\php4ts.dll (v4.4.7.7)
[77e10000 - 77ea0000]: C:\WINDOWS\system32\user32.dll (v5.2.3790.4033)
[77bd0000 - 77c18000]: C:\WINDOWS\system32\gdi32.dll (v5.2.3790.4237)
[77f30000 - 77fdb000]: C:\WINDOWS\system32\advapi32.dll (v5.2.3790.3959)
[77c20000 - 77cbf000]: C:\WINDOWS\system32\rpcrt4.dll (v5.2.3790.4115)
[76eb0000 - 76ec3000]: C:\WINDOWS\system32\secur32.dll (v5.2.3790.3959)
[71b10000 - 71b1b000]: C:\WINDOWS\system32\wsock32.dll (v5.2.3790.0)
[71b60000 - 71b77000]: C:\WINDOWS\system32\ws2_32.dll (v5.2.3790.3959)
[77b70000 - 77bca000]: C:\WINDOWS\system32\msvcrt.dll (v7.0.3790.3959)
[71b50000 - 71b58000]: C:\WINDOWS\system32\ws2help.dll (v5.2.3790.3959)
[774b0000 - 775e9000]: C:\WINDOWS\system32\ole32.dll (v5.2.3790.3959)
[775f0000 - 7767b000]: C:\WINDOWS\system32\oleaut32.dll (v5.2.3790.4202)
[4b750000 - 4b78d000]: C:\WINDOWS\system32\odbc32.dll (v3.526.3959.0)
[77370000 - 77407000]: C:\WINDOWS\WinSxS\x86_Microsoft.Windows.Common-Controls_6595b64144ccf1df_5.82.3790.3959_x-ww_78FCF8D0\comctl32.dll (v5.82.3790.3959)
[7ca10000 - 7d1ec000]: C:\WINDOWS\system32\shell32.dll (v6.0.3790.4184)
[77eb0000 - 77f02000]: C:\WINDOWS\system32\shlwapi.dll (v6.0.3790.3959)
[761a0000 - 761e7000]: C:\WINDOWS\system32\comdlg32.dll (v6.0.3790.3959)
[004a0000 - 005a4000]: D:\ioFTPD\system\tcl85t.dll (v8.5.2.2)
[760a0000 - 76131000]: C:\WINDOWS\system32\crypt32.dll (v5.131.3790.3959)
[76080000 - 76092000]: C:\WINDOWS\system32\msasn1.dll (v5.2.3790.3959)
[77b60000 - 77b68000]: C:\WINDOWS\system32\version.dll (v5.2.3790.3959)
[76180000 - 7619d000]: C:\WINDOWS\system32\imm32.dll (v5.2.3790.3959)
[7f000000 - 7f009000]: C:\WINDOWS\system32\lpk.dll (v5.2.3790.3959)
[74ae0000 - 74b45000]: C:\WINDOWS\system32\usp10.dll (v1.422.3790.3959)
[77cd0000 - 77dd3000]: C:\WINDOWS\WinSxS\x86_Microsoft.Windows.Common-Controls_6595b64144ccf1df_6.0.3790.3959_x-ww_D8713E55\comctl32.dll (v6.0.3790.3959)
[00ba0000 - 00bb2000]: C:\WINDOWS\system32\odbcint.dll (v3.526.3959.0)
[03000000 - 03115000]: D:\ioFTPD\system\dbghelp.dll (v6.8.4.0)
[75870000 - 7592d000]: C:\WINDOWS\system32\userenv.dll (v5.2.3790.3959)
[71ba0000 - 71bf7000]: C:\WINDOWS\system32\netapi32.dll (v5.2.3790.3959)
[71a80000 - 71ac0000]: C:\WINDOWS\system32\mswsock.dll (v5.2.3790.3959)
[69660000 - 696b7000]: C:\WINDOWS\system32\hnetcfg.dll (v5.2.3790.3959)
[71a40000 - 71a48000]: C:\WINDOWS\system32\wshtcpip.dll (v5.2.3790.3959)
[76e30000 - 76e5b000]: C:\WINDOWS\system32\dnsapi.dll (v5.2.3790.4238)
[76ed0000 - 76ed7000]: C:\WINDOWS\system32\winrnr.dll (v5.2.3790.3959)
[76e70000 - 76e9e000]: C:\WINDOWS\system32\wldap32.dll (v5.2.3790.3959)
[76ee0000 - 76ee5000]: C:\WINDOWS\system32\rasadhlp.dll (v5.2.3790.3959)
[74800000 - 74807000]: C:\WINDOWS\system32\powrprof.dll (v6.0.3790.3959)


Threads:
--------
ID: 5600 [00130000-0012fbc4]
# 1: 7C9585EC -> [ntdll + 275EC] ? KiFastSystemCallRet() + 0x0
# 2: 77F45EDB -> [ADVAPI32 + 14EDB] ? LookupPrivilegeValueW() + 0x114
# 3: 77F45F82 -> [ADVAPI32 + 14F82] ? LookupPrivilegeValueW() + 0x1BB
# 4: 77F975AF -> [ADVAPI32 + 665AF] ? StartServiceCtrlDispatcherA() + 0x93
# 5: 004487C8 -> [ioFTPD + 477C8] WinMain() + 0x48
[c:\projects\ioftpd6\6.5.1\src\main.c, line 483]
# 6: 00406AEE -> [ioFTPD + 5AEE] __tmainCRTStartup() + 0x113
[f:\dd\vctools\crt_bld\self_x86\crt\src\crt0.c, line 263]
# 7: 7C82F23B -> [kernel32 + 2E23B] ? ProcessIdToSessionId() + 0x209


ID: 3168 [00cd0000-00ccff28]
# 1: 7C9585EC -> [ntdll + 275EC] ? KiFastSystemCallRet() + 0x0
# 2: 0044CF11 -> [ioFTPD + 4BF11] ProcessMessages() + 0x41
[c:\projects\ioftpd6\6.5.1\src\internalmessagehandl er.c, line 106]
# 3: 00448675 -> [ioFTPD + 47675] CommonMain() + 0x35
[c:\projects\ioftpd6\6.5.1\src\main.c, line 340]
# 4: 00448740 -> [ioFTPD + 47740] ServiceMain() + 0xA0
[c:\projects\ioftpd6\6.5.1\src\main.c, line 457]
# 5: 77F45E91 -> [ADVAPI32 + 14E91] ? LookupPrivilegeValueW() + 0xCA
# 6: 7C824829 -> [kernel32 + 23829] ? GetModuleHandleA() + 0xDF


ID: 4412 [00fd0000-00fcfed4]
# 1: 7C9585EC -> [ntdll + 275EC] ? KiFastSystemCallRet() + 0x0
# 2: 7C821C8D -> [kernel32 + 20C8D] ? WaitForSingleObject() + 0x12
# 3: 0041BCE0 -> [ioFTPD + 1ACE0] TimerThread() + 0x2B0
[c:\projects\ioftpd6\6.5.1\src\timer.c, line 141]
# 4: 7C824829 -> [kernel32 + 23829] ? GetModuleHandleA() + 0xDF


ID: 1344 [01330000-0132ff0c]
# 1: 7C9585EC -> [ntdll + 275EC] ? KiFastSystemCallRet() + 0x0
# 2: 7C821C8D -> [kernel32 + 20C8D] ? WaitForSingleObject() + 0x12
# 3: 0041C45A -> [ioFTPD + 1B45A] WorkerThread() + 0x5A
[c:\projects\ioftpd6\6.5.1\src\threads.c, line 441]
# 4: 7C824829 -> [kernel32 + 23829] ? GetModuleHandleA() + 0xDF


ID: 5232 [01430000-0142ff0c]
# 1: 7C9585EC -> [ntdll + 275EC] ? KiFastSystemCallRet() + 0x0
# 2: 7C821C8D -> [kernel32 + 20C8D] ? WaitForSingleObject() + 0x12
# 3: 0041C45A -> [ioFTPD + 1B45A] WorkerThread() + 0x5A
[c:\projects\ioftpd6\6.5.1\src\threads.c, line 441]
# 4: 7C824829 -> [kernel32 + 23829] ? GetModuleHandleA() + 0xDF


ID: 4444 [01530000-0152ff0c]
# 1: 7C9585EC -> [ntdll + 275EC] ? KiFastSystemCallRet() + 0x0
# 2: 7C821C8D -> [kernel32 + 20C8D] ? WaitForSingleObject() + 0x12
# 3: 0041C45A -> [ioFTPD + 1B45A] WorkerThread() + 0x5A
[c:\projects\ioftpd6\6.5.1\src\threads.c, line 441]
# 4: 7C824829 -> [kernel32 + 23829] ? GetModuleHandleA() + 0xDF


ID: 3948 [01730000-0172ff4c]
# 1: 7C9585EC -> [ntdll + 275EC] ? KiFastSystemCallRet() + 0x0
# 2: 0041C280 -> [ioFTPD + 1B280] IoThreadEx() + 0x20
[c:\projects\ioftpd6\6.5.1\src\threads.c, line 561]
# 3: 7C824829 -> [kernel32 + 23829] ? GetModuleHandleA() + 0xDF


ID: 4468 [01830000-0182ff4c]
# 1: 7C9585EC -> [ntdll + 275EC] ? KiFastSystemCallRet() + 0x0
# 2: 0041C280 -> [ioFTPD + 1B280] IoThreadEx() + 0x20
[c:\projects\ioftpd6\6.5.1\src\threads.c, line 561]
# 3: 7C824829 -> [kernel32 + 23829] ? GetModuleHandleA() + 0xDF


ID: 5852 [01930000-0192ff14]
# 1: 7C9585EC -> [ntdll + 275EC] ? KiFastSystemCallRet() + 0x0
# 2: 7C821C8D -> [kernel32 + 20C8D] ? WaitForSingleObject() + 0x12
# 3: 0041C1A4 -> [ioFTPD + 1B1A4] EncryptionThread() + 0x14
[c:\projects\ioftpd6\6.5.1\src\threads.c, line 651]
# 4: 7C824829 -> [kernel32 + 23829] ? GetModuleHandleA() + 0xDF


ID: 5012 [01a30000-01a2ff14]
# 1: 7C9585EC -> [ntdll + 275EC] ? KiFastSystemCallRet() + 0x0
# 2: 7C821C8D -> [kernel32 + 20C8D] ? WaitForSingleObject() + 0x12
# 3: 0041C1A4 -> [ioFTPD + 1B1A4] EncryptionThread() + 0x14
[c:\projects\ioftpd6\6.5.1\src\threads.c, line 651]
# 4: 7C824829 -> [kernel32 + 23829] ? GetModuleHandleA() + 0xDF


ID: 660 [01b30000-01b2fed8]
# 1: 7C9585EC -> [ntdll + 275EC] ? KiFastSystemCallRet() + 0x0
# 2: 7C8024ED -> [kernel32 + 14ED] ? Sleep() + 0xF
# 3: 00424C15 -> [ioFTPD + 23C15] SocketSchedulerThread() + 0x4A5
[c:\projects\ioftpd6\6.5.1\src\socket.c, line 1774]
# 4: 7C824829 -> [kernel32 + 23829] ? GetModuleHandleA() + 0xDF


ID: 3180 [01c30000-01c2fcec]
# 1: 7C9585EC -> [ntdll + 275EC] ? KiFastSystemCallRet() + 0x0
# 2: 7C824829 -> [kernel32 + 23829] ? GetModuleHandleA() + 0xDF


ID: 5880 [020f0000-020eff7c]
# 1: 7C9585EC -> [ntdll + 275EC] ? KiFastSystemCallRet() + 0x0
# 2: 7C824829 -> [kernel32 + 23829] ? GetModuleHandleA() + 0xDF


ID: 5984 [021f0000-021eff0c]
# 1: 7C9585EC -> [ntdll + 275EC] ? KiFastSystemCallRet() + 0x0
# 2: 7C821C8D -> [kernel32 + 20C8D] ? WaitForSingleObject() + 0x12
# 3: 0041C6E8 -> [ioFTPD + 1B6E8] WorkerThread() + 0x2E8
[c:\projects\ioftpd6\6.5.1\src\threads.c, line 519]
# 4: 7C824829 -> [kernel32 + 23829] ? GetModuleHandleA() + 0xDF


ID: 1408 [00a30000-00a2ff0c]
# 1: 7C9585EC -> [ntdll + 275EC] ? KiFastSystemCallRet() + 0x0
# 2: 7C821C8D -> [kernel32 + 20C8D] ? WaitForSingleObject() + 0x12
# 3: 0041C45A -> [ioFTPD + 1B45A] WorkerThread() + 0x5A
[c:\projects\ioftpd6\6.5.1\src\threads.c, line 441]
# 4: 7C824829 -> [kernel32 + 23829] ? GetModuleHandleA() + 0xDF


ID: 6000 [011d0000-011cd9c8]
# 1: 7C9585EC -> [ntdll + 275EC] ? KiFastSystemCallRet() + 0x0
# 2: 0153DC10 -> [[unknown module]]
# 3: 7C956D2B -> [ntdll + 25D2B] ? NtClose() + 0xC
# 4: 03062123 -> [DbgHelp + 61123] ? MiniDumpReadDumpStream() + 0x6703
# 5: 0305D50D -> [DbgHelp + 5C50D] ? MiniDumpReadDumpStream() + 0x1AED
# 6: 03063089 -> [DbgHelp + 62089] ? MiniDumpReadDumpStream() + 0x7669
# 7: 030657A9 -> [DbgHelp + 647A9] ? MiniDumpReadDumpStream() + 0x9D89
# 8: 7C95779B -> [ntdll + 2679B] ? ZwReadVirtualMemory() + 0xC
# 9: 7C80232D -> [kernel32 + 132D] ? ReadProcessMemory() + 0x1B
#10: 03062871 -> [DbgHelp + 61871] ? MiniDumpReadDumpStream() + 0x6E51
#11: 03062920 -> [DbgHelp + 61920] ? MiniDumpReadDumpStream() + 0x6F00
#12: 0303B953 -> [DbgHelp + 3A953] ? SymEnumSourceFilesW() + 0xF3



-------------------------------------------------------------------------------

Yil
06-15-2008, 11:27 AM
exitwin98: I can't reproduce that problem. Does it happen every time for you? Does it only happen for some users? Did the logfile show a user being deleted from the server around the same time? I'll PM you a server to upload the minidump to. The stack trace was unhelpful.

Yil
06-15-2008, 04:23 PM
exitwin98: I found the problem from the minidump you sent me. God, I love having added that feature. I'll get a new version out pronto to fix the issue along with a couple other things isteana pointed out to me.

exitwin98
06-15-2008, 05:12 PM
another serious problem. I tested ioFTPD for a whole day, It happened twice that i could NOT login the ftp because the process of ioFTPD took up very high percentage of the CPU. So I had to terminate the process of ioFTPD. Now I get back to use version6.4.3, version 6.5 not tested yet.

thank you so much for your prompt reply.

Yil
06-16-2008, 06:56 PM
New version:
ioFTPD-v6.6.1.zip (http://home.comcast.net/~yil/ioFTPD-v6.6.1.zip)


v6.6.1 Release Notes:

1) Files in \system:
Changed : ioFTPD.[exe,pdb] - Version 6.6.1.0
Changed : ioFTPD.ini - summary of changes by section...
[FTP] : Show_HostMask_Error


*** New Features:

2) New ioFTPD.ini option (Show_HostMask_Error under [FTP]). Previously when
a user tries to login but doesn't match any of the hostmasks for the
account they received a generic "Invalid Password" error message. I
believe this is the safest response because the server isn't susceptible
to leaking usernames. However, by popular demand, and for the sanity of
admins who have users who can't figure out why they can't login, you can
now enable this option and the user will see:
"Your IP/hostname is not authorized"


*** Functionality changes:

3) The test for deleted and expired accounts is now performed after the
check for valid hostmasks. Thus a user trying to login to an account
must match the hostmask before they can see they've been marked for
deletion or that the account has expired.


*** Bug Fixes:

4) Site purge <user> would incorrectly return a command successful reply
if the specified user was not marked for deletion or hadn't expired. It
didn't do anything before, but now it returns an error code and says:
"User not marked for deletion or account hasn't expired"

5) CWD was always trying to initiate a virtual search instead of only
on directories which were symbolic links to /Search/*. Since it would
just use the cached result when not under /Search the script wasn't being
called, but the OnVirtualSearch event in the config file was being looked
up each time and this can be avoided now.

6) Site swho <users to match> would cause a crash if a user was connected to
the server but hadn't logged in yet.

hennie1nl
06-17-2008, 07:01 AM
crc error in ioftpd.exe when unpacking...

Yil
06-17-2008, 01:31 PM
hennie1nl: Try downloading it again. I didn't get any errors when I tested the zip on the server.

exitwin98
06-18-2008, 05:45 PM
"site who" doesn't show the transmitting rate correctly.
I have limited the transmitting rate for every user to 100k/s, and the actual rate is 100k/s indeed. But the value of transmitting rate told by "site who" is between 700k/s and 800k/s.

Yil
06-27-2008, 11:22 AM
Just a quick update: For 2 weeks or so starting Monday I'll be offline. So continue to post any issues you have but don't expect a quick response :)

Flow
07-08-2008, 04:50 AM
I have like this;

/-
|---- DIR1-------A
|-----DIR1-------B
|-----DIR2
|-----DIR3
|-----DIR4

When uploading somethin to DIR1-B, the timestamp within root of DIR1 is not change, since thare is a new folder within it (B). Wow, how ugly explaination, the best i can think of rigt now, sorry, i hope you understand the issue.

rolan
07-11-2008, 03:24 AM
this version can works in the windows 2008?

Yil
07-13-2008, 02:52 PM
I'm back...

rolan: I haven't personally tested it with 2008, but other people have reported that it worked under 2008 betas when they tried it so I think you should be fine.

Flow: I'm not sure exactly what you mean, but that is the correct behavior for most filesystems. The Dir1 timestamp in your example will only be updated when the actual contents of Dir1 are changed such as through the creation/deletion of a file or subdirectory. Modifications to existing subdirs won't change the timestamp of the directory.

Flow
07-13-2008, 04:49 PM
Hmmm....you understood me correctly :p wow :p

But still .... i guess is a wish maybe since when entering root dir of ftp server and use the "sort" by date to show whare is latest created is at does not work in this term. If it is correct way then is fine.

Yil
07-13-2008, 07:30 PM
Flow: that behavior is correct and indeed common to all filesystems I'm aware of for performance/scaling reasons. Taken to the extreme if every file modification anywhere was propagated up to the root directory it would immediately become a point of contention which would affect system performance dramatically.

On the other hand, this is an FTP and not a general purpose filesystem. I've toyed with schemes to track the total size of a directory (the whole directory tree) and stuff like that but it would be better off as a feature on a newly designed server...

However, I hinted at a potential solution to what you want when I wrote the comments for v6.6! Just write a custom /Search module! You can extract the latest entries to the dupelog, or search backwards for directory creation events in the ioFTPD.log file and return them as a response to /search/[latest-20] query or something that can be setup by creating a symbolic link using a name like [Latest] or something... :)

The dynamic virtual directory feature is really pretty powerful and I'm hoping some script writers really find creative uses for it.

noelek
07-14-2008, 01:04 AM
Hi Yil, please read pm. I sent to you 2x crashlogs.

rolan
07-27-2008, 09:54 PM
hi,when i upload a sample file(.avi .mkv etc) to sample folder, it will random produce any crash(show 426 connect closed) in a day, but i can't get that crash.log file, how can i get it to send to u?
i use the lastest version:ioftpd BETA v6.6.1 and ioiNiNJA BETA 0.6.1.1

Yil
07-28-2008, 04:28 PM
Heya rolan. Is ioFTPD itself crashing and exiting? A 426 connect close error for the passive connection isn't a crash unless the control connection and the server itself also die. 426's can happen for a variety of network related reasons...

rolan
07-28-2008, 08:45 PM
ioFTPD itself working, and can login, but can't "list -al", "stat -l" can list out, but can't fxp,download,upload, it show 426 connect closed.
its network question?
thank you reply!

Yil
07-29-2008, 12:35 AM
rolan: Next time you notice it having problems issue a "site crashnow" and send me the minidump (PM me if you need the server info). If it doesn't produce a minidump and just hangs there let me know as that's the lockup bug.

rolan
07-31-2008, 03:25 PM
hi,Yil, do you receive files?

Yil
07-31-2008, 06:38 PM
Rolan: Yup, just haven't had time to look over the logs yet.

rolan
08-01-2008, 04:01 AM
okay,thank you.

o_dog
08-01-2008, 06:28 AM
Do you think it's possible to go back to tcl8.4 instead of .5?

The problem with nxtools has something to do with the dll it uses to catch freespace. And it seems neoxed is not to overeager to rewrite it. Besides, not that manyt hings were added to .5.

Yil
08-01-2008, 02:19 PM
Can you elaborate a bit more on the freespace issue with nxtools? I'm not aware of it. Neoxed did release the source for his extension library so I'm guessing we can fix whatever that issue is. That's probably easier than reverting the TCL version if everything else appears to be working.

o_dog
08-01-2008, 02:24 PM
he uses the dll to communicate with windows api (my guess haven't looked at the sorce) to get freespace and other hdd info. dunno if thats the only thing thats broken but i know that one crashes tcl8.5 and thereby ioftpd.

Flow
08-11-2008, 12:39 PM
Hey Yil, why you so quiet lately, what you doin now?

Yil, is it possible to allow ioFTPd to start/keepruning a external .exe file (eggdrop.exe -nt) from the [Scheduler] section

Like;
BotChk = 00,15,30,45 * * * EXEC z:\ioFTPD\eggdrop\eggdrop.exe -nt

Why ?, so it bind this;
# the window name, used by third party scripts and services to communicate
# with ioFTPD. the default is fine unless you are running two copies of
# ioFTPD.
WindowName = ioFTPD::MessageWindow

o_dog
08-11-2008, 01:43 PM
use something like firedaemon instead. Works better

Yil
08-11-2008, 06:52 PM
Flow: There isn't a clean way to keep an exe running all the time. o_dog is right, something like firedaemon or the free MS anysrv(?) can be used to do it. Neither will catch the program locking up like a true service might, but they should work.

Alternatively you can use a .exe or TCL wrapper run via the scheduler on a periodic basis to see if something is running and restart it if necessary. I should probably add on the wishlist a scheduler feature for items scheduled as * * * * to just start at runtime and restart if they fail. The problem with something like that is if the server itself crashed or was brought down and the exe kept running how/when should you stop it? Or should it even be stopped? What about when the server is started again? There isn't one correct answer, but any logic to do that kind of stuff would require a middleman if you want to run an off the shelf thing like eggdrop.

Of course if you have to have a middleman anyway creating the simple app and tieing it to a site command and a periodic scheduler event seems pretty easy and wouldn't require any server changes to do.