CORRECT PATCH Re: sync_client bails when encountering a
deleted message
Ken Murchison
murch at andrew.cmu.edu
Tue May 15 16:11:05 EDT 2007
I don't think I was clear. With my proposal, we're well past "UPDATE". I'm talking about cutting the command short after "(<flags>)". No header_size or anything after.
(from my phone)
--
Kenneth Murchison
Systems Programmer
Project Cyrus Developer/Maintainer
Carnegie Mellon University
-----Original Message-----
From: "John Capo" <jc at irbs.com>
To: "Ken Murchison" <murch at andrew.cmu.edu>
Cc: cyrus-devel at lists.andrew.cmu.edu
Sent: 5/15/07 3:34 PM
Subject: Re: CORRECT PATCH Re: sync_client bails when encountering a deleted message
Quoting Ken Murchison (murch at andrew.cmu.edu):
> John Capo wrote:
> >Quoting Ken Murchison (murch at andrew.cmu.edu):
> >>Ken Murchison wrote:
> >>>Obviously, the chances of header_size being 0xdeadbeef is remote, but it
> >>>is possible. Would it make more sense to use ULONG_MAX as the "failure
> >>>size"?
> >>Or better yet, how about just using 0 (zero)? IIRC, RFC2822 stipulates
> >>that the message header has to be non-zero (Date and From are mandatory)
> >
> >I have seen zero size messages created with IMAP uploads from desktop
> >clients. This is probably a bug elsewhere. I do not know if the
> >zero size messages were replicated.
> >
> >Sending more than one magic number would be the safest way. The
> >value of the second magic number could be used to signal other
> >conditions if needed. I can't imagine what that would be other
> >than aborting the upload. Two ULONG_MAX is a row can't be a valid
> >message.
>
> After thinking about this some more,do we even need a magic number? If
> we don't send anything after the flags list, shouldn't this be enough to
> signal that we have an invalid/missing message?
We still need to see what's next in the stream if anything. When
upload_message_work() returns due to not being able to open a
message, the next byte in the stream should be the first letter of
a command. Testing the next character returned by prot_getc() for
alpha or numeric could signal an abort. If its alpha then its the
next command. If its numeric then its the header size. prot_ungetc()
the character and return or fetch the header size from the stream
and continue.
If the connection is closed prot_getc() would return EOF and
cmd_upload() would return to cmd_loop(). cmd_loop() would also see
EOF since its a flag in the prot structure. Not sure how to test
the EOF case.
I'll see if the basic idea works later today.
John Capo
>
> --
> Kenneth Murchison
> Systems Programmer
> Project Cyrus Developer/Maintainer
> Carnegie Mellon U
More information about the Cyrus-devel
mailing list