--- parser3/src/classes/math.C 2003/04/25 11:58:20 1.24.2.12.2.13 +++ parser3/src/classes/math.C 2003/07/24 06:18:38 1.24.2.12.2.16 @@ -8,7 +8,7 @@ Copyright (C) 1996, 1997, 1998, 1999 Theodore Ts'o. */ -static const char* IDENT_MATH_C="$Date: 2003/04/25 11:58:20 $"; +static const char* IDENT_MATH_C="$Date: 2003/07/24 06:18:38 $"; #include "pa_vmethod_frame.h" #include "pa_common.h" @@ -152,13 +152,17 @@ static void random(void *buffer, size_t #endif } + // methods + +#define MAX_UINT 0xFFFFFFFFu + static inline int _random(uint top) { uint raw; random(&raw, sizeof(raw)); - return int(double(raw) / 0x100000000 * top ); + return int(double(raw) / MAX_UINT * top ); } -#define MAX_UINT 0xFFFFFFFFu + static void _random(Request& r, MethodParams& params) { Value& range=params.as_junction(0, "range must be expression"); double top=r.process_to_value(range).as_double(); @@ -259,7 +263,7 @@ static void _crypt(Request& r, MethodPar if(strncmp(normal_salt, PA_MD5PW_ID, PA_MD5PW_IDLEN) == 0) { const size_t sample_size=120; char *sample_buf=new(PointerFreeGC) char[sample_size]; - PA_MD5Encode((const unsigned char *)password, + pa_MD5Encode((const unsigned char *)password, (const unsigned char *)normal_salt, sample_buf, sample_size); String sample(sample_buf); r.write_pass_lang(sample); @@ -287,6 +291,7 @@ static const char* hex_string(unsigned c unsigned char *src=bytes; unsigned char *end=bytes+size; char *dest=bytes_hex; + static const char *hex=upcase?"0123456789ABCDEF":"0123456789abcdef"; const char *format=upcase?"%02X":"%02x"; @@ -305,9 +310,9 @@ static void _md5(Request& r, MethodParam PA_MD5_CTX context; unsigned char digest[16]; - PA_MD5Init(&context); - PA_MD5Update(&context, (const unsigned char*)string, strlen(string)); - PA_MD5Final(digest, &context); + pa_MD5Init(&context); + pa_MD5Update(&context, (const unsigned char*)string, strlen(string)); + pa_MD5Final(digest, &context); r.write_pass_lang(*new String(hex_string(digest, sizeof(digest), false))); } @@ -321,6 +326,7 @@ struct uuid { unsigned char node[6]; }; static void _uuid(Request& r, MethodParams& /*params*/) { + // random struct uuid uuid; random(&uuid, sizeof(uuid)); @@ -342,7 +348,7 @@ static void _uuid(Request& r, MethodPara uuid.time_hi_and_version = (uuid.time_hi_and_version & 0x0FFF) | 0x4000; // format - const int uuid_cstr_bufsize=32+1/*for zero-teminator*/; + const int uuid_cstr_bufsize=36+1/*for zero-teminator*/; char *uuid_cstr=new(PointerFreeGC) char[uuid_cstr_bufsize]; snprintf(uuid_cstr, uuid_cstr_bufsize, "%08X-%04X-%04X-%02X%02X-%02X%02X%02X%02X%02X%02X", @@ -355,6 +361,7 @@ static void _uuid(Request& r, MethodPara } static void _uid64(Request& r, MethodParams& /*params*/) { + unsigned char id[64/8]; random(&id, sizeof(id));