PDA

View Full Version : userfile module


fr0z3n
11-27-2003, 06:14 PM
hey,

dark0n3 i know you don't have much time, but when you get a chance can you let me know what kinda of structure is needed for the module DLL? like what procedure is ioftpd looking for in the DLL?

maybe this is pushing it a bit... not sure but a small example (don't need much, just the basics pretty much) would be awesome :banana:

thanks in advance,
fr0z3n

darkone
11-27-2003, 06:51 PM
http://www.ioftpd.com/board/showthread.php?threadid=1952

Initialization routine name is given there + external modules work in similar fashion as io's built-in "modules". Structures, function prototypes etc. are available in source\include.

Btw. Prefer TCHARs over CHARs...

fr0z3n
11-29-2003, 09:35 AM
hey,

have one more question... been having trouble linking with the ioFTPD sources... I asked in IRC chan yesterday but seems no one used the sources before :(. Mouton suggested that should use GetProcAddress() on the ioFTPD binary but when I attempt such thing it seems to crash..., and the functions don't look like they're supposed to be resolved through GetProcAddress.

error LNK2001: unresolved external symbol "int __cdecl FragmentFree(void *)" (?FragmentFree@@YAHPAX@Z)
error LNK2001: unresolved external symbol "char * __cdecl Config_Get_Path(char *,char *,char *,char *)" (?Config_Get_Path@@YAPADPAD000@Z)
error LNK2001: unresolved external symbol "void __cdecl DataRow_ParseBuffer(char *,unsigned long,void *,struct _DATAROW *,unsigned long)" (?DataRow_ParseBuffer@@YAXPADKPAXPAU_DATAROW@@K@Z)
error LNK2001: unresolved external symbol "void __cdecl DataRow_Dump(struct _BUFFER *,void *,struct _DATAROW *,unsigned long)" (?DataRow_Dump@@YAXPAU_BUFFER@@PAXPAU_DATAROW@@K@Z )
error LNK2001: unresolved external symbol "void * __cdecl FragmentAllocate(unsigned long)" (?FragmentAllocate@@YAPAXK@Z)

was there supposed to be a static library or anything that we're supposed to link for the location of these methods?

... or am i missing something :confused:
would appreciate if you could clarify the situation

TIA,
fr0z3n

darkone
12-01-2003, 07:37 PM
You can't directly compile this... DataRow_ commands are text parser/formatting routines, code for them is irrelevant. Here's current list of available procedures: (prototypes can be found from header files)

// Memory procs
dwResult += RegisterProc("Allocate", _Allocate);
dwResult += RegisterProc("ReAllocate", _ReAllocate);
dwResult += RegisterProc("Free", _Free);
// Config procs
dwResult += RegisterProc("Config_Read", Config_Read);
dwResult += RegisterProc("Config_Write", Config_Write);
dwResult += RegisterProc("Config_Get", Config_Get);
dwResult += RegisterProc("Config_GetInt", Config_Get_Int);
dwResult += RegisterProc("Config_GetBool", Config_Get_Bool);
dwResult += RegisterProc("Config_GetPath", Config_Get_Path);
dwResult += RegisterProc("Config_GetSection", Config_Get_Section);
dwResult += RegisterProc("Config_GetLinear", Config_Get_Linear);
dwResult += RegisterProc("Config_GetPermission", Config_Get_Permission);
// Synchronization procs
dwResult += RegisterProc("InitalizeLockObject", InitializeLockObject);
dwResult += RegisterProc("DeleteLockObject", DeleteLockObject);
dwResult += RegisterProc("AcquireSharedLock", AcquireSharedLock);
dwResult += RegisterProc("ReleaseSharedLock", ReleaseSharedLock);
dwResult += RegisterProc("AcquireExclusiveLock", AcquireExclusiveLock);
dwResult += RegisterProc("ReleaseExclusiveLock", ReleaseExclusiveLock);
// User procs
dwResult += RegisterProc("CreateUser", CreateUser);
dwResult += RegisterProc("RenameUser", RenameUser);
dwResult += RegisterProc("DeleteUser", DeleteUser);
dwResult += RegisterProc("Uid2User", Uid2User);
dwResult += RegisterProc("User2Uid", User2Uid);
dwResult += RegisterProc("GetUsers", GetUsers);
// UserFile procs
dwResult += RegisterProc("UserFile_Open", UserFile_Open);
dwResult += RegisterProc("UserFile_OpenPrimitive", UserFile_OpenPrimitive);
dwResult += RegisterProc("UserFile_Lock", UserFile_Lock);
dwResult += RegisterProc("UserFile_Unlock", UserFile_Lock);
dwResult += RegisterProc("UserFile_Close", UserFile_Close);
dwResult += RegisterProc("FindFirstUser", FindFirstUser);
dwResult += RegisterProc("FindNextUser", FindNextUser);
// Group procs
dwResult += RegisterProc("CreateGroup", CreateGroup);
dwResult += RegisterProc("RenameGroup", RenameGroup);
dwResult += RegisterProc("DeleteGroup", DeleteGroup);
dwResult += RegisterProc("Gid2Group", Gid2Group);
dwResult += RegisterProc("Group2Gid", Group2Gid);
dwResult += RegisterProc("GetGroups", GetGroups);
// GroupFile procs
dwResult += RegisterProc("GroupFile_Open", GroupFile_Open);
dwResult += RegisterProc("GroupFile_OpenPrimitive", GroupFile_OpenPrimitive);
dwResult += RegisterProc("GroupFile_Lock", GroupFile_Lock);
dwResult += RegisterProc("GroupFile_Unlock", GroupFile_Lock);
dwResult += RegisterProc("GroupFile_Close", GroupFile_Close);
// Timer procs
dwResult += RegisterProc("StartIoTimer", StartIoTimer);
dwResult += RegisterProc("StopIoTimer", StopIoTimer);
// String procs
dwResult += RegisterProc("SplitString", SplitString);
dwResult += RegisterProc("ConcatString", ConcatString);
dwResult += RegisterProc("GetStringIndex", GetStringIndex);
dwResult += RegisterProc("GetStringIndexStatic", GetStringIndexStatic);
dwResult += RegisterProc("GetStringRange", GetStringRange);
dwResult += RegisterProc("FreeString", FreeString);
// Vfs procs
dwResult += RegisterProc("Access", Access);
dwResult += RegisterProc("GetFileInfo", GetFileInfo);
dwResult += RegisterProc("UpdateFileInfo", UpdateFileInfo);
dwResult += RegisterProc("CloseFileInfo", CloseFileInfo);
dwResult += RegisterProc("FindFileContext", FindFileContext);
dwResult += RegisterProc("InsertFileContext", InsertFileContext);
dwResult += RegisterProc("DeleteFileContext", DeleteFileContext);
dwResult += RegisterProc("CreateFileContext", CreateFileContext);
dwResult += RegisterProc("FreeFileContext", FreeFileContext);
dwResult += RegisterProc("OpenDirectory", OpenDirectory);
dwResult += RegisterProc("MarkDirectory", MarkDirectory);
dwResult += RegisterProc("CloseDirectory", CloseDirectory);
dwResult += RegisterProc("IoRemoveDirectory", IoRemoveDirectory);
// File procs
dwResult += RegisterProc("ioOpenFile", ioOpenFile);
dwResult += RegisterProc("ioCloseFile", ioCloseFile);
dwResult += RegisterProc("ioReadFile", IoReadFile);
dwResult += RegisterProc("ioWriteFile", IoWriteFile);
dwResult += RegisterProc("ioSeekFile", ioSeekFile);
// Socket procs
dwResult += RegisterProc("ioSend", ioSend);
dwResult += RegisterProc("ioRecv", ioRecv);
dwResult += RegisterProc("ioCloseSocket", ioCloseSocket);
dwResult += RegisterProc("Secure_SendResult", Secure_SendResult);
dwResult += RegisterProc("Secure_ReceiveResult", Secure_ReceiveResult);
// Mountfile handling
dwResult += RegisterProc("MountFile_Open", MountFile_Open);
dwResult += RegisterProc("MountFile_Close", MountFile_Close);
// Virtual path handling
dwResult += RegisterProc("PWD_CWD", PWD_CWD);
dwResult += RegisterProc("PWD_GetTable", PWD_GetTable);
dwResult += RegisterProc("PWD_Copy", PWD_Copy);
dwResult += RegisterProc("PWD_Free", PWD_Free);
dwResult += RegisterProc("PWD_Resolve", PWD_Resolve);
// Buffer formatting
dwResult += RegisterProc("FormatBuffer", Put_Buffer_Format);
dwResult += RegisterProc("InsertBuffer", Insert_Buffer);
dwResult += RegisterProc("AppendBuffer", Put_Buffer);
// Message handling
dwResult += RegisterProc("Message_Load", Message_Load);
dwResult += RegisterProc("Message_PreCompile", Message_PreCompile);
dwResult += RegisterProc("MessageFile_Show", MessageFile_Show);
dwResult += RegisterProc("Message_Compile", Message_Compile);
dwResult += RegisterProc("Message_Object_GetInt", Object_Get_Int);
dwResult += RegisterProc("Message_Object_GetString", Object_Get_String);
// Service managment
dwResult += RegisterProc("Service_Start", Service_Start);
dwResult += RegisterProc("Service_Stop", Service_Stop);
dwResult += RegisterProc("Services_Start", Services_Start);
dwResult += RegisterProc("Services_Stop", Services_Stop);
// Job managment
dwResult += RegisterProc("QueueJob", QueueJob);
dwResult += RegisterProc("QueueClientJobEx", QueueClientJobEx);
dwResult += RegisterProc("QueueIoEx", QueueIoEx);
dwResult += RegisterProc("EndJob", EndJob);
dwResult += RegisterProc("StartJobTimer", StartJobTimer);
dwResult += RegisterProc("StopJobTimer", StopJobTimer);
dwResult += RegisterProc("SetJobFilter", SetJobFilter);
// Misc procs
dwResult += RegisterProc("Putlog", Putlog);
dwResult += RegisterProc("InitDataOffsets", InitDataOffsets);
dwResult += RegisterProc("GetUserData", GetUserData);
dwResult += RegisterProc("BindCompletionPort", BindCompletionPort);