Re: [Exim] asmtp questions

Top Page
Delete this message
Reply to this message
Author: Philip Hazel
Date:  
To: Paul Kelly
CC: exim-users
Subject: Re: [Exim] asmtp questions
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 ----