--- parser3/src/classes/math.C 2002/08/01 11:26:44 1.22 +++ parser3/src/classes/math.C 2003/04/14 14:59:29 1.26 @@ -1,11 +1,11 @@ /** @file Parser: @b math parser class. - Copyright(c) 2001, 2002 ArtLebedev Group(http://www.artlebedev.com) + Copyright(c) 2001, 2003 ArtLebedev Group(http://www.artlebedev.com) Author: Alexandr Petrosian (http://paf.design.ru) */ -static const char* IDENT_MATH_C="$Id: math.C,v 1.22 2002/08/01 11:26:44 paf Exp $"; +static const char* IDENT_MATH_C="$Date: 2003/04/14 14:59:29 $"; #include "pa_common.h" #include "pa_vint.h" @@ -47,11 +47,11 @@ static void _random(Request& r, const St Pool& pool=r.pool(); Value& range=params->as_junction(0, "range must be expression"); - double top=r.process_to_value(range).as_double(); - if(top<=1) + double top=r.process_to_value(range).as_double(); + if(top<=0) throw Exception("parser.runtime", &method_name, - "top must be above 1(%g)", top); + "top must be above 0(%g)", top); r.write_no_lang(*new(pool) VInt(pool, _random(uint(top)))); } @@ -153,7 +153,9 @@ static void _crypt(Request& r, const Str const size_t sample_size=120; char *sample_buf=(char *)pool.malloc(sample_size); pa_MD5Encode((const unsigned char *)password, - (const unsigned char *)normal_salt, sample_buf, sample_size); + (const unsigned char *)normal_salt, 1/*TRUE: mix in magic string*/, + sample_buf, sample_size, + 0, 0); r.write_pass_lang(*new(pool) String(pool, sample_buf)); } else { #ifdef HAVE_CRYPT @@ -174,6 +176,27 @@ static void _crypt(Request& r, const Str } } +static void _md5(Request& r, const String& method_name, MethodParams *params) { + Pool& pool=r.pool(); + const char *string=params->as_string(0, "parameter must be string").cstr(); + const size_t sample_size=120; + char sample_buf[sample_size]; + const int sample_bytes_count=12; + unsigned char sample_bytes[sample_bytes_count]; + pa_MD5Encode((const unsigned char *)string, + (const unsigned char *)"", 0/*FALSE: mix in magic string*/, + sample_buf, sample_size, + sample_bytes, sample_bytes_count); + char *sample_bytes_hex=(char *)pool.malloc(sample_bytes_count*2/*byte->hh*/+1/*for zero-teminator*/); + unsigned char *src=sample_bytes; + unsigned char *end=sample_bytes+sample_bytes_count; + char *dest=sample_bytes_hex; + while(src