On Fri, 24 Sep 1999, Paul Kelly wrote:
> The problem with pegasus mail astmp and cram-md5 seems to be in the
> length checking of the reply string the clients sends back to the servers
> initial challenge.
Thanks for all that info. I found the problem. It was a bug in my base64
decoding function.
> Im not really sure, but i think the problem may be in b64decode.c not
> decrementing one from the value it returns for the extra added 0 as stated
> at the top of the file.?
No, it wasn't that, it was more serious! I append a patch below that
should fix it. I'll update the testing release, but I'll wait till you
confirm that this does fix it.
On Mon, 27 Sep 1999, Paul Kelly wrote:
> hi,
> finally found the problem with outlook express and AUTH LOGIN, it
> appears that Outlook Express requires the prompts of:
>
> Username:
> Password:
>
> as exim is currently parsing the config files server_prompts in
> plaintext.c using a colon as a string separator then it will be unable to
> send these required prompts, rather than giving out a sensible error
> message outlook just sends carraige returns and quits.
> changing the colon to another parse symbol would allow outlook to work,
> or maybe a way of escaping the colons in the config file?
You can get colons into colon-separated strings in Exim by doubling them.
> server_prompts = "Username:: : Password::"
should work.
--
Philip Hazel University of Cambridge Computing Service,
ph10@??? Cambridge, England. Phone: +44 1223 334714.
*** exim-3.036/src/auths/b64decode.c Thu Sep 16 17:19:48 1999
--- auths/b64decode.c Mon Sep 27 11:36:37 1999
***************
*** 47,52 ****
--- 47,55 ----
*ptr = result;
+ /* Each cycle of the loop handles a quantum of 4 input bytes. For the last
+ quantum this may decode to 1, 2, or 3 output bytes. */
+
while ((x = (uschar)(*code++)) != 0)
{
if (x > 127 || (x = dec64table[x]) == 255) return -1;
***************
*** 56,76 ****
if ((x = (uschar)(*code++)) == '=')
{
- *result++ = y << 4;
if (*code++ != '=' || *code != 0) return -1;
}
-
else
{
if (x > 127 || (x = dec64table[x]) == 255) return -1;
*result++ = (y << 4) | (x >> 2);
-
if ((y = (uschar)(*code++)) == '=')
{
- *result++ = x << 6;
if (*code != 0) return -1;
}
-
else
{
if (y > 127 || (y = dec64table[y]) == 255) return -1;
--- 59,74 ----