View Issue Details

IDProjectCategoryView StatusLast Update
0002298unrealircdpublic2005-02-03 19:53
ReporterStealth Assigned Tosyzop  
PrioritynormalSeverityminorReproducibilityhave not tried
Status resolvedResolutionfixed 
Product Version3.2.2 
Summary0002298: Win32 Cloaking Modules
DescriptionIt seems cloaking modules on Windows are still sensitive to SSL and non-SSL, even though they are not supposed to be...

When I ran Dependancy Walker on it, the MD5_* stuff came up as "unknown procedures" or somthing. I will attach some of the DW output if needed.
TagsNo tags attached.
3rd party modules

Activities

syzop

2005-01-22 01:01

administrator   ~0008882

Could well be.
If OpenSSL is not available, our internal routines are used (solar designers md5 implementation, src/md5.c). If OpenSSL is available, the OpenSSL routines are used.
These are binary incompatible, so it could well be that mixing it like in this case will lead to crashes.

Stealth

2005-01-22 01:11

reporter   ~0008883

Could it be possible to have the module detect OpenSSL, and based on that result depends on what the module calls?

Such as:
(SSL)
Module: Is there OpenSSL?
IRCd: Yes.
Module calls OpenSSL routines...

(Non-SSL)
Module: Is there OpenSSL?
IRCd: No.
Module calls other MD5 routines...

Perhaps this way it might be a little more compatible. If that can't be done, maybe the non-OpenSSL MD5 stuff can have the same names as the OpenSSL functions, then whatever is specified in makefile.win32 depends on what functions will be compiled into Unreal.

syzop

2005-01-22 11:38

administrator   ~0008885

Actually they have the same name, it's just the datastructures that are different ;). And since datastructures get created at compile time (talking about MD5_CTX) this is a problem (so even if you resolve any function name lookup problems you still have this problem).
One possible solution to this is abstracting stuff and also just use something like MD5() that just returns a string and does not require the use of structs by the caller...
Since we pretty much always do MD5_Init, MD5_Update, MD5_Final.. this shouldn't be a problem... OpenSSL has this function:
 unsigned char *MD5(const unsigned char *d, unsigned long n,
                  unsigned char *md);
It's just not provided by our other implementation (md5.c).
If we would place some function in the core source, like:
DoMD5(const unsigned char *d, unsigned long n, unsigned char *md)
{
#ifdef SSL
    return MD5(d, n, md);
#else
MD5_CTX...
md5_init.. md5_update.. md5_final...return...
#endif
}
And then modules/whatever could just use DoMD5()... then it should be solved.

syzop

2005-02-03 19:53

administrator   ~0009013

Done in .253

Issue History

Date Modified Username Field Change
2005-01-22 00:55 Stealth New Issue
2005-01-22 01:01 syzop Note Added: 0008882
2005-01-22 01:11 Stealth Note Added: 0008883
2005-01-22 11:38 syzop Note Added: 0008885
2005-02-03 19:53 syzop Status new => resolved
2005-02-03 19:53 syzop Resolution open => fixed
2005-02-03 19:53 syzop Assigned To => syzop
2005-02-03 19:53 syzop Note Added: 0009013