mailing list archives

meli community discussions

⚠️ if something does not work as intended when interracting with the mailing lists,
reach out Github mirror Gitea repo @epilys:matrix.org

E-mail headers
From: Mark Crispin <mrc+imap@panda.com>
To: imap-protocol@u.washington.edu
Date: Fri, 08 Jun 2018 12:34:46 -0000
Message-ID: alpine.OSX.2.00.1110221212460.29979@hsinghsing.panda.com permalink / raw / eml / mbox
There is yet another broken IMAP server inflicted upon the world.  The
iCloud/.me IMAP server (a.k.a. iSCREAM, st11p00mmm-iscream--5.me.com)
advertises AUTH=PLAIN but doesn't accept it:
 	2 authenticate plain
 	2 BAD parse error

Apparently, Apple thinks think that by advertising SASL-IR, a client is
compelled to implement it.

-- Mark --

http://panda.com/mrc
Democracy is two wolves and a sheep deciding what to eat for lunch.
Liberty is a well-armed sheep contesting the vote.
Reply
E-mail headers
From: tss@iki.fi
To: imap-protocol@localhost
Date: Fri, 08 Jun 2018 12:34:46 -0000
Message-ID: 727DCD4D-BA76-4EBA-A582-B0A6853F07BB@iki.fi permalink / raw / eml / mbox
Related: I added http://imapwiki.org/ServerBugs page a while ago and there are now two servers listed there. The idea is to have a page that lists major bugs that are unlikely to get fixed in servers (i.e. big commercial ones that don't really care).
Reply
E-mail headers
From: mrc+imap@panda.com
To: imap-protocol@localhost
Date: Fri, 08 Jun 2018 12:34:46 -0000
Message-ID: alpine.OSX.2.00.1110221238470.29979@hsinghsing.panda.com permalink / raw / eml / mbox
Oh, this is a beauty.

Apparently Apple also has a server on iCloud that they bought from Oracle
which does comply with IMAP.  It's this separate thing called iSCREAM that
doesn't accept "AUTHENTICATE PLAIN" without the separate SASL-IR argument.

You would think that with all the dough that they get from overcharging
millions of fanboys for their shiny toys, they could afford to hire
competent software developers that are capable of following RFCs that were
published 15 years ago.  It isn't as if they have just heard of IMAP for
the first time either.

-- Mark --

http://panda.com/mrc
Democracy is two wolves and a sheep deciding what to eat for lunch.
Liberty is a well-armed sheep contesting the vote.
Reply
E-mail headers
From: colin@swaveit.com
To: imap-protocol@localhost
Date: Fri, 08 Jun 2018 12:34:46 -0000
Message-ID: 4E34BD88-1325-4F9A-AD45-E3B7E17C5790@swaveit.com permalink / raw / eml / mbox
iScream. Hahaha!

Colin E. McDonald
SquareWave Technologies
335 East 54th Street
Savannah, GA  31405
(912) 313-2525
colin@swaveit.com
www.swaveit.com

On Oct 22, 2011, at 3:30 PM, "Mark Crispin" <mrc+imap@panda.com> wrote:

> There is yet another broken IMAP server inflicted upon the world.  The
> iCloud/.me IMAP server (a.k.a. iSCREAM, st11p00mmm-iscream--5.me.com)
> advertises AUTH=PLAIN but doesn't accept it:
>    2 authenticate plain
>    2 BAD parse error
> 
> Apparently, Apple thinks think that by advertising SASL-IR, a client is
> compelled to implement it.
> 
> -- Mark --
> 
> http://panda.com/mrc
> Democracy is two wolves and a sheep deciding what to eat for lunch.
> Liberty is a well-armed sheep contesting the vote.
> _______________________________________________
> Imap-protocol mailing list
> Imap-protocol@u.washington.edu
> http://mailman2.u.washington.edu/mailman/listinfo/imap-protocol
Reply
E-mail headers
From: David.Harris@pmail.gen.nz
To: imap-protocol@localhost
Date: Fri, 08 Jun 2018 12:34:46 -0000
Message-ID: 4EA35064.5552.33AE28E3@David.Harris.pmail.gen.nz permalink / raw / eml / mbox
On 22 Oct 2011 at 12:20, Mark Crispin wrote:

> There is yet another broken IMAP server inflicted upon the world.  The
> iCloud/.me IMAP server (a.k.a. iSCREAM, st11p00mmm-iscream--5.me.com)
> advertises AUTH=PLAIN but doesn't accept it:
>  	2 authenticate plain
>  	2 BAD parse error
> 
> Apparently, Apple thinks think that by advertising SASL-IR, a client is
> compelled to implement it.

Apple has always seemed to believe that they are in the business of 
making standards, not following them. They're the new IBM in that 
regard.

As someone who's had to deal with the output from infinitely-accursed 
AppleMail in its various incarnations over the years, nothing Apple do 
could surprise me any more.

Cheers!

-- David --

------------------ David Harris -+- Pegasus Mail ----------------------
Box 5451, Dunedin, New Zealand | e-mail: 
David.Harris@pmail.gen.nz
           Phone: +64 3 453-6880 | Fax: +64 3 453-6612

Sign seen in a Rome laundry:
   "Ladies, leave your clothes here and spend the afternoon
    having a good time."
Reply
E-mail headers
From: brong@fastmail.fm
To: imap-protocol@localhost
Date: Fri, 08 Jun 2018 12:34:46 -0000
Message-ID: 20111022200153.GA3907@brong.net permalink / raw / eml / mbox
On Sat, Oct 22, 2011 at 10:39:35PM +0300, Timo Sirainen wrote:
> Related: I added http://imapwiki.org/ServerBugs page a while ago and there are now two servers listed there. The idea is to have a page that lists major bugs that are unlikely to get fixed in servers (i.e. big commercial ones that don't really care).

No Gmail yet?

I'm hoping to have Cyrus fully complient with I18NLEVEL=1 soon - and
passing all the LIST-EXT tests too.

I still feel overall that IMAP isn't really a perfect fit for how it's
being used by most servers and most clients these days.  Too many options,
too much state.  Too complex.  But I don't know what the alternative
would look like or how to get there... so I keep on implementing IMAP.

Bron.
Reply
E-mail headers
From: petite_abeille@mac.com
To: imap-protocol@localhost
Date: Fri, 08 Jun 2018 12:34:46 -0000
Message-ID: C337C5F6-9851-4A9A-9987-A30AB323D6C6@mac.com permalink / raw / eml / mbox
On Oct 22, 2011, at 9:44 PM, Mark Crispin wrote:

> they could afford to hire
> competent software developers that are capable of following RFCs that were
> published 15 years ago

Always thought the IMAP spec was just an elaborate hoax to drive developers insane :))
Reply
E-mail headers
From: brong@fastmail.fm
To: imap-protocol@localhost
Date: Fri, 08 Jun 2018 12:34:46 -0000
Message-ID: 20111023074912.GA13089@brong.net permalink / raw / eml / mbox
On Sun, Oct 23, 2011 at 12:23:16PM +1300, David Harris wrote:
> On 22 Oct 2011 at 12:20, Mark Crispin wrote:
> 
> > There is yet another broken IMAP server inflicted upon the world.  The
> > iCloud/.me IMAP server (a.k.a. iSCREAM, st11p00mmm-iscream--5.me.com)
> > advertises AUTH=PLAIN but doesn't accept it:
> >  	2 authenticate plain
> >  	2 BAD parse error
> > 
> > Apparently, Apple thinks think that by advertising SASL-IR, a client is
> > compelled to implement it.
> 
> Apple has always seemed to believe that they are in the business of 
> making standards, not following them. They're the new IBM in that 
> regard.
> 
> As someone who's had to deal with the output from infinitely-accursed 
> AppleMail in its various incarnations over the years, nothing Apple do 
> could surprise me any more.

INBOX.INBOX.INBOX.INBOX.INBOX.Inbox.Apple Mail To Do and friends?  It made
me put a lot of work into accurate handling of our "maximum mailbox size"
rules across renames and deletes.

Bron.
Reply
E-mail headers
From: blong@google.com
To: imap-protocol@localhost
Date: Fri, 08 Jun 2018 12:34:46 -0000
Message-ID: CABa8R6sVubHKcdV0o_6YRSLOvgUS5MZ+rjOMGNYjNUTcR7bhYg@mail.gmail.com permalink / raw / eml / mbox
On Oct 22, 2011 1:02 PM, "Bron Gondwana" <brong@fastmail.fm> wrote:
>
> On Sat, Oct 22, 2011 at 10:39:35PM +0300, Timo Sirainen wrote:
> > Related: I added http://imapwiki.org/ServerBugs page a while ago and
there are now two servers listed there. The idea is to have a page that
lists major bugs that are unlikely to get fixed in servers (i.e. big
commercial ones that don't really care).
>
> No Gmail yet?

I think we have only one deliberate break from the spec, and that's that we
don't do substring searches.

I know there are other issues, like we sometimes don't get the size quite
right (comes of storing the message with just LF line endings and having to
convert to CRLF), but mostly we tend to bend the spec but not break them...
matching the IMAP mailbox model with the gmail one is tough.

I tried running Timo's tests against gmail, but its pretty hard to debug
failures, and the set of tests isn't quite wide or separable.  Its somewhere
on the todo list to work that again.

I would say that our biggest issue with IMAP is that the amount of resources
required for some of the commands is really high, which is hard to optimize
for or to fairly share resources.

Brandon

Brandon
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mailman13.u.washington.edu/pipermail/imap-protocol/attachments/20111022/54022461/attachment.html>
Reply
E-mail headers
From: brong@fastmail.fm
To: imap-protocol@localhost
Date: Fri, 08 Jun 2018 12:34:46 -0000
Message-ID: 20111023080449.GA10954@brong.net permalink / raw / eml / mbox
On Sat, Oct 22, 2011 at 01:56:55PM -0700, Brandon Long wrote:
> I think we have only one deliberate break from the spec, and that's that we
> don't do substring searches.

I believe your envelopes are bogus too, and we had another issue which I
should see if I can dig up...

Oh, yeah:

======================
The bug is with gmail.

http://tools.ietf.org/html/rfc3501#section-4.3.1

  8-bit textual and binary mail is supported through the use of a
  [MIME-IMB] content transfer encoding.  IMAP4rev1 implementations MAY
  transmit 8-bit or multi-octet characters in literals, but SHOULD do
  so only when the [CHARSET] is identified.

Basically, they can transfer that as utf-8, but only if they send it as
a literal.  Just quoting the string is bogus.
======================

You send 8bit stuff inside quotes.

> I know there are other issues, like we sometimes don't get the size quite
> right (comes of storing the message with just LF line endings and having to
> convert to CRLF), but mostly we tend to bend the spec but not break them...
> matching the IMAP mailbox model with the gmail one is tough.

Yeah, that's a bit messy.  Any particular reason, other than saving a
few bytes?

> I tried running Timo's tests against gmail, but its pretty hard to debug
> failures, and the set of tests isn't quite wide or separable.  Its somewhere
> on the todo list to work that again.

Improving the tests would be nice too.  We have our own thing, cassandane,
which does a whole test harness for running multiple Cyrus instances and
testing things like replication and our "murder" clustering thing too.

> I would say that our biggest issue with IMAP is that the amount of resources
> required for some of the commands is really high, which is hard to optimize
> for or to fairly share resources.

body search is the real killer for us, everything else is pretty lightweight.

Bron.
Reply
E-mail headers
From: blong@google.com
To: imap-protocol@localhost
Date: Fri, 08 Jun 2018 12:34:47 -0000
Message-ID: CABa8R6vGai5vdCbCPnNjNoT_V1K4+8iekL+DXDK2AwtcCuEaDw@mail.gmail.com permalink / raw / eml / mbox
On Sun, Oct 23, 2011 at 1:04 AM, Bron Gondwana <brong@fastmail.fm> wrote:
> On Sat, Oct 22, 2011 at 01:56:55PM -0700, Brandon Long wrote:
>> I think we have only one deliberate break from the spec, and that's that we
>> don't do substring searches.
>
> I believe your envelopes are bogus too, and we had another issue which I
> should see if I can dig up...

Not bogus, but yes, there is a specific combination where we get it
wrong.  Thought it had been fixed, but I see the bug is still open.

> Oh, yeah:
>
> ======================
> The bug is with gmail.
>
> http://tools.ietf.org/html/rfc3501#section-4.3.1
>
> ?8-bit textual and binary mail is supported through the use of a
> ?[MIME-IMB] content transfer encoding. ?IMAP4rev1 implementations MAY
> ?transmit 8-bit or multi-octet characters in literals, but SHOULD do
> ?so only when the [CHARSET] is identified.
>
> Basically, they can transfer that as utf-8, but only if they send it as
> a literal. ?Just quoting the string is bogus.
> ======================

I can believe this bug exists.  It would be nice if we didn't have to
do that (is there an extension for that?), but if you can give me
specfics, I can file the bug.

We don't live in a 7bit world, and haven't for a very long time.
Having to scan outbound text for whether the 8bit is set will just be
more lovely CPU down the drain.

> You send 8bit stuff inside quotes.

And probably in error messages, too.  Not even sure what to do about that.

>> I know there are other issues, like we sometimes don't get the size quite
>> right (comes of storing the message with just LF line endings and having to
>> convert to CRLF), but mostly we tend to bend the spec but not break them...
>> matching the IMAP mailbox model with the gmail one is tough.
>
> Yeah, that's a bit messy. ?Any particular reason, other than saving a
> few bytes?

I'm sure at the beginning it was "why do we need these anyways, it'll
save a few bytes".   Unfortunately, once N because big enough, adding
1/65th to N is also very big.  Though, with compression, probably not
appreciable so.

The more amazing thing is how far along we went in coding before we
actually had issues with it.  Almost no clients actually cared that we
only sent LF, except Outlook would eat characters when fixing
soft-line breaks for quoted-printable messages since it just blindly
assumed CRLF.

>> I tried running Timo's tests against gmail, but its pretty hard to debug
>> failures, and the set of tests isn't quite wide or separable. ?Its somewhere
>> on the todo list to work that again.
>
> Improving the tests would be nice too. ?We have our own thing, cassandane,
> which does a whole test harness for running multiple Cyrus instances and
> testing things like replication and our "murder" clustering thing too.
>
>> I would say that our biggest issue with IMAP is that the amount of resources
>> required for some of the commands is really high, which is hard to optimize
>> for or to fairly share resources.
>
> body search is the real killer for us, everything else is pretty lightweight.

Clients can ask for any random piece of information about every
message in the store, and our stores can get very large.  One of the
syncing tools (offlineimap, iirc) randomly also asked for INTERNALDATE
on every sync request (ie, UID FLAGS) even though it 1) never changes
(by spec) and 2) they didn't actually use it.  Doing that on a 1M
message store every 5-10m when that data isn't in the "small" data,
but required us to fetch the full meta data for every message...
expensive.  The smarter model is the adaptive meta-data model, but
re-generating and re-storing the metadata for 1M messages also isn't
cheap.

The real peach though is probably MULTIAPPEND which wants us to allow
a virtual infinite amount of data upload in a single transaction.
Even if we figured out a way to handle that given our constraints, we
wouldn't want to do it since the worst possible outcome there is to
throw the entire thing away on failure.  Just spend a couple hours
uploading it again!

Brandon
-- 
?Brandon Long <blong@google.com>
?Staff Engineer
?Gmail Delivery TLM
Reply
E-mail headers
From: brong@fastmail.fm
To: imap-protocol@localhost
Date: Fri, 08 Jun 2018 12:34:47 -0000
Message-ID: 1320102102.29743.140660992935961@webmail.messagingengine.com permalink / raw / eml / mbox
On Monday, October 31, 2011 3:40 PM, "Brandon Long" <blong@google.com> wrote:
> On Sun, Oct 23, 2011 at 1:04 AM, Bron Gondwana <brong@fastmail.fm> wrote:
> > On Sat, Oct 22, 2011 at 01:56:55PM -0700, Brandon Long wrote:
> >> I think we have only one deliberate break from the spec, and that's that we
> >> don't do substring searches.
> >
> > I believe your envelopes are bogus too, and we had another issue which I
> > should see if I can dig up...
> 
> Not bogus, but yes, there is a specific combination where we get it
> wrong.  Thought it had been fixed, but I see the bug is still open.

I've seen it in the wild, so yeah - still there I think.

> > Oh, yeah:
> >
> > ======================
> > The bug is with gmail.
> >
> > http://tools.ietf.org/html/rfc3501#section-4.3.1
> >
> > ?8-bit textual and binary mail is supported through the use of a
> > ?[MIME-IMB] content transfer encoding. ?IMAP4rev1 implementations MAY
> > ?transmit 8-bit or multi-octet characters in literals, but SHOULD do
> > ?so only when the [CHARSET] is identified.
> >
> > Basically, they can transfer that as utf-8, but only if they send it as
> > a literal. ?Just quoting the string is bogus.
> > ======================
> 
> I can believe this bug exists.  It would be nice if we didn't have to
> do that (is there an extension for that?), but if you can give me
> specfics, I can file the bug.

I doubt there's an extention, and as Mark pointed out - you need to fall
back for other clients anyway.

> We don't live in a 7bit world, and haven't for a very long time.
> Having to scan outbound text for whether the 8bit is set will just be
> more lovely CPU down the drain.

Not really - you're already scanning to see if it's particularly long.
We shove everything more than 1024 bytes into a literal in Cyrus,
without even parsing it.  And you need to parse the whole thing for
" characters anyway unless you're going to be REALLY bogus about it,
so your CPU argument doesn't hold any water.  Easy to just set the
"must_send_literal" flag when you see the first 8 bit character, at
which point you can stop scanning and just shove the bytes onto the
wire with a {size}\r\n in front.

> > You send 8bit stuff inside quotes.
> 
> And probably in error messages, too.  Not even sure what to do about that.

Ahh, error messages.  No, I don't know what to do about that either - but
I'm not so concerned so long as you don't eject endline characters in them.

rfc3501 says:

text            = 1*TEXT-CHAR

TEXT-CHAR       = <any CHAR except CR and LF>

It also said "any char is 7 bit US-ASCII unless otherwise specified", but
you're less likely to get into hot water here, because most things are just
scanning to the \r\n.

> >> I know there are other issues, like we sometimes don't get the size quite
> >> right (comes of storing the message with just LF line endings and having to
> >> convert to CRLF), but mostly we tend to bend the spec but not break them...
> >> matching the IMAP mailbox model with the gmail one is tough.
> >
> > Yeah, that's a bit messy. ?Any particular reason, other than saving a
> > few bytes?
> 
> I'm sure at the beginning it was "why do we need these anyways, it'll
> save a few bytes".   Unfortunately, once N because big enough, adding
> 1/65th to N is also very big.  Though, with compression, probably not
> appreciable so.

Yeah, that's a messy path to go down.  I really to like saving the
exact RFC822 blob, or alternatively enough information that you can
reconstruct it precisely.  I can see benefits in decoding base64 and
QP rubbish into the end result and storing that instead, but I'd want
to keep a reverse transcoder ID and binary diff (if required) to bring
back the original bytes if needed - and of course a checksum to make
sure they really were the original bytes.

> The more amazing thing is how far along we went in coding before we
> actually had issues with it.  Almost no clients actually cared that we
> only sent LF, except Outlook would eat characters when fixing
> soft-line breaks for quoted-printable messages since it just blindly
> assumed CRLF.

Cyrus rejects messages with a bare \n I think.

> >> I tried running Timo's tests against gmail, but its pretty hard to debug
> >> failures, and the set of tests isn't quite wide or separable. ?Its somewhere
> >> on the todo list to work that again.
> >
> > Improving the tests would be nice too. ?We have our own thing, cassandane,
> > which does a whole test harness for running multiple Cyrus instances and
> > testing things like replication and our "murder" clustering thing too.
> >
> >> I would say that our biggest issue with IMAP is that the amount of resources
> >> required for some of the commands is really high, which is hard to optimize
> >> for or to fairly share resources.
> >
> > body search is the real killer for us, everything else is pretty lightweight.
> 
> Clients can ask for any random piece of information about every
> message in the store, and our stores can get very large.  One of the
> syncing tools (offlineimap, iirc) randomly also asked for INTERNALDATE
> on every sync request (ie, UID FLAGS) even though it 1) never changes
> (by spec) and 2) they didn't actually use it.  Doing that on a 1M
> message store every 5-10m when that data isn't in the "small" data,
> but required us to fetch the full meta data for every message...
> expensive.  The smarter model is the adaptive meta-data model, but
> re-generating and re-storing the metadata for 1M messages also isn't
> cheap.

Yeah, bloody offlineimap.  I'm glad that appears to be fixed in more
recent versions.  Of course, Cyrus keeps the INTERNALDATE in the index
file, so it's trivially already present in the struct.

Of course offlineimap is probably a vanishingly small part of your
userbase, and also quite patchable - I suspect if you'd "fixed" it,
the patch would have been accepted.

> The real peach though is probably MULTIAPPEND which wants us to allow
> a virtual infinite amount of data upload in a single transaction.
> Even if we figured out a way to handle that given our constraints, we
> wouldn't want to do it since the worst possible outcome there is to
> throw the entire thing away on failure.  Just spend a couple hours
> uploading it again!

Which is why I'd love to be able to upload the messages to a staging
location and then tag them with a:

(mailbox, uid, modseq, internaldate, flags, annotations)

set in a later small upload.  But that's where having a custom replication
protocol wins over generic IMAP!  It also means you can apply COPY and
UPLOAD intermingled, by calling RESERVE on the messages you're about
to copy.

Bron.
-- 
  Bron Gondwana
  brong@fastmail.fm
Reply
E-mail headers
From: mrc+imap@panda.com
To: imap-protocol@localhost
Date: Fri, 08 Jun 2018 12:34:47 -0000
Message-ID: alpine.OSX.2.00.1110311605540.9034@hsinghsing.panda.com permalink / raw / eml / mbox
On Tue, 1 Nov 2011, Bron Gondwana wrote:
> Not really - you're already scanning to see if it's particularly long.
> We shove everything more than 1024 bytes into a literal in Cyrus,
> without even parsing it.  And you need to parse the whole thing for
> " characters anyway unless you're going to be REALLY bogus about it,
> so your CPU argument doesn't hold any water.

+1.

Don't forget \ too.

>  Easy to just set the
> "must_send_literal" flag when you see the first 8 bit character, at
> which point you can stop scanning and just shove the bytes onto the
> wire with a {size}\r\n in front.

Yup.

Quoted strings are an abomination. They may be more human-readable, but
parsers do better with Hollerith type strings (e.g., literals) that do not
require prescanning.

I probably would abolish atoms as well, except for reserved tokens in
IMAP. Most software these days doesn't use atoms for astrings even when it
can be an atom.

> Ahh, error messages.  No, I don't know what to do about that either - but
> I'm not so concerned so long as you don't eject endline characters in them.

I would not object to an extension that says "all the world is now UTF-8
instead of ASCII" that redefines CHAR to CHAR8. In fact, I thought that
was what the i18n extension did at its second level.

There remains a problem with 8-bit characters that are not UTF-8.

My ideal is "death to all charsets other than UTF-8". We are closing in on
15 years from RFC 1930. People should have gotten the word by now. To be
honest, I am shocked that we still have this discussion today and have not
forced UTF-8 everywhere.

> Cyrus rejects messages with a bare \n I think.

Good. All the world is not UNIX. More to the point, the Internet standard
newline is \r\n.

>> The real peach though is probably MULTIAPPEND which wants us to allow
>> a virtual infinite amount of data upload in a single transaction.
>> Even if we figured out a way to handle that given our constraints, we
>> wouldn't want to do it since the worst possible outcome there is to
>> throw the entire thing away on failure.  Just spend a couple hours
>> uploading it again!

If MULTIAPPEND is redesigned, the following changes are desirable:

[1] Require that the total size be declared in advance. The only (IMHO)
valid reason for a server to error on a MULTIAPPEND is "storage not
available". Most clients that MULTIAPPEND have ready access to the sizes
and can easily enumerate/sum these.

[2] Allow IMAP URLAUTHs ala CATENATE. This would be valuable for the use
case of transfer from one IMAP server to another (as opposed to upload
from the client). Most of the real-world use of MULTIAPPEND is this use
case; it's actually pretty rare to upload from a client.

[3] Have a mechanism to restart a MULTIAPPEND that got dropped. Require
that a client must restart within a certain time frame (TBD) and is
forbidden from doing another MULTIAPPEND if a "paused" MULTIAPPEND is in
progress. Add appropriate mechanisms to support all this.

IMHO, these changes would reduce most of the objections to MULTIAPPEND
while keeping its desired attribute of multi-message atomicity.

If someone cared to create a new MULTIAPPEND with these characteristics, I
would help with the document, and for my part encourage migration from the
current MULTIAPPEND to the new form.

-- Mark --

http://panda.com/mrc
Democracy is two wolves and a sheep deciding what to eat for lunch.
Liberty is a well-armed sheep contesting the vote.
Reply