Thank you for asking.

The implementation in c-client is correct, and your IMAP server is incorrect. I understand how this happened, and to some extent it is my fault.

However, the problem is that the author of your IMAP server did not obey explicit instructions in RFC 3501. Specifically, he did not implement using the formal syntax, but instead relied upon the descriptive text. This is a bad idea, since it causes precisely this type of problem. RFC 3501 section 1.1 states that the Formal Syntax is normative and text in section 6 and 7 is descriptive.

The text in section 7.4.2 that says "string list" for the body location is, indeed, an error in the descriptive text. This erro has been noted in the RFC 3501 errata on the rfc-editor.org web site for some time. There is also a copy of the errata on the UW site:
        ftp://ftp.cac.washington.edu/mail/imap.rfcs/rfc3501-errata

The Formal Syntax for body-fld-loc in RFC 3501 is correct:

        body-fld-loc    = nstring

and, as noted above, overrides the incorrect "string list" text in the descriptive text in 7.4.2.

At the rest of saying "I told you so", this is why I resisted including that level of detail in the descriptive text. The IMAP specification is a very large and complex document written and maintained by fallible human beings; and in spite of best efforts such errors have (and WILL) occur. Whenever there is more than one place that seems to document something, invariably there will be people who choose the wrong place as the normative document. Usually this is alright, as the "other place" matches the normative statement; but there is always the exception such as this.

In summary: the Formal Syntax in RFC 3501 section 9, and ONLY the Formal Syntax in RFC 3501 section 9, is normative for the IMAP protocol. Any text found elsewhere, includes text in RFC 3501 section 6 or 7, that conflicts with the Formal Syntax is in error.

On Tue, 23 Oct 2007, Amit Srivastava wrote:

Hello All,

I have a query regarding the support of "location" member of the BODY
structure.

In mail.h its datatype is char*

BODY
{
.......
char *location;         /* body content URI */
....
}

But the RFC3501 says its a *stringlist*.
<<
body location
           A *string list* giving the body content URI as defined in
           [LOCATION].


Hence the problem is seen when following code is executed in
imap4r1.c

body->location = imap_parse_string
(stream,txtptr,reply,NIL,NIL,LONGT);

I am facing this issue against an imap server with RFC3501
implementing "content-location" as stringlist.
e.g.

C: fetch bodystructure
S: * 1 FETCH (BODYSTRUCTURE (("TEXT" "PLAIN" ("CHARSET" "us-ascii")
       <SPACE>NIL NIL "7BIT" 323 14 NIL NIL NIL NIL)("TEXT"
"HTML"<SPACE>
       ("CHARSET" "iso-8859-1") NIL NIL "QUOTED-PRINTABLE"
50578<SPACE>
              1111 NIL NIL NIL ("http://home.netscape.com/";))<SPACE>
       "MIXED" ("BOUNDARY"
"------------8FC7BFAA529B4689FD642892")<SPACE>
                 NIL NIL NIL))


Note the parentheses in ("http://home.netscape.com/";) above response.

UW IMAP does not handle '(' and ')' when looking for char*, but it
does handle this for STRINGLIST datatype.
Its impact is very high - not able to see attachment.

Am I missing something here or is it a bug in c-client library.


Thanks,
-Amit

__________________________________________________
Do You Yahoo!?
Tired of spam?  Yahoo! Mail has the best spam protection around
http://mail.yahoo.com
_______________________________________________
Imap-uw mailing list
[email protected]
https://mailman1.u.washington.edu/mailman/listinfo/imap-uw


-- Mark --

http://staff.washington.edu/mrc
Science does not emerge from voting, party politics, or public debate.
Si vis pacem, para bellum.
_______________________________________________
Imap-uw mailing list
[email protected]
https://mailman1.u.washington.edu/mailman/listinfo/imap-uw

Reply via email to