In article <[EMAIL PROTECTED]>,
Nathan Miller <[EMAIL PROTECTED]> wrote:
>At 11:48 AM 11/13/2001 +0000, you wrote:
>
>> >1. A perl routine to convert octal -> hex OR octal -> binary for use in
>> >md5 for comparing chap-password to digest.
>>
>># Octal to binary
>>$string =~ s/\\(\d\d\d)/sprintf("%c", oct $1)/ge;
>>
>># Binary to hex
>>$string =~ s/(.)/sprintf("%02X", ord $1)/ge;
>
>Mike, thanks for the info. I tried using these; however, about 50% of the
>time it seems to not convert the data properly and therefore the
>$chap-password and $digest do not match even if the password is
>correct. This would have been my preferred method as then nothing with
>freeradius would have had to been modified, not even the dictionary
>files... makes for easy upgrades. =)
Right. I think I know why.
FreeRadius doesn't print out all non-printable characters as
\<octal> - it can also print \r, \n or \t for CR, LF and TAB.
Also \\ is used to indicate a backslash.
So you'd use something like this first:
# Process \\, \r, \t, \n, \"
%tr = ( '\\' => "\\", 'r' => "\r", 'n' => "\n", 't' => "\t", '"' => '"' );
$string =~ s/\\([\\rtn])/$tr{$1}/ge;
Now there's still a bug in FreeRadius in that it doesn't escape
double-quotes in a double-quoted string. librad_safeprint should
probably get an extra argument that indicates if double-quotes
should be escaped or not.
Even better, it should mean "double quote this string". If the
arg is true, librad_safeprint adds the outer quotes itself
and escapes double-quotes in the string. If the arg is false it
should at least escape spaces as well (" " => "\ ")
Or we drop the \\ \r \t \n \" \<space> special cases and
always use the octal versions for those characters.
Mike.
--
"Only two things are infinite, the universe and human stupidity,
and I'm not sure about the former" -- Albert Einstein.
-
List info/subscribe/unsubscribe? See http://www.freeradius.org/list/users.html