Hi,
On Thu, 13 Jun 2024, at 8:46 PM, Michael Menge wrote:
> but as "ctl_mboxlist" is acting as a client i find it more suspicious
> that "pin->isclient" was 0 and
> therefore the "if (pin->isclient && c == '+') {" block was skipped
Since ctl_mboxlist is acting as a client here, its input ("pin") is from the server, so I think it's correct that pin->isclient is 0 -- the server is not a client. The client side of this connection is its output ("pout"), so pout->isclient ought to be 1. But getxstring doesn't consider pout->isclient at all.
There's clearly something not quite right here but I'm not sure what yet. We only consider '+' when the input is a client. Maybe that's incorrect? Or maybe it's correct, and the server end of this is behaving badly by sending '+' to a client...
RFC7888 says: "The non-synchronizing literal form MUST NOT be sent from server to client."
So I think getxstring's new pin->isclient behaviour is correct here, but is more strict than it used to be. The other end is behaving badly and ctl_mboxlist no longer tolerates it. Interesting.
Ahh yep. static int sendupdate(const mbentry_t *mbentry, void *rock) in imap/mupdate.c is what sends the LIST response, and it has hardcoded '+' in all its literal outputs. Perhaps this function sometimes outputs to a server, and sometimes to a client. In which case it ought to check and omit the '+' when pout->isclient is true, and it might need to check for the LITERAL+ capability (or whatever it's called) when talking to a server. But if it never talks to a server, then we should just remove the '+'s.
What's been baffling me so far though, is that our tests don't detect any problem. But! That's because our tests only run ctl_mboxlist -m on startup, before any mailboxes have been created, and the LIST response is empty. As part of fixing this, I think I'll probably add a ctl_mboxlist -m call on each backend as part of our post-test sanity checks. That should catch this sort of thing coming back in the future.
> Kind regards
>
> Michael Menge
Thanks heaps for your initial diagnosis, that was a big help!
Cheers,
ellie