]> git.mxchange.org Git - quix0rs-gnu-social.git/commit
Prevent spurious refusals of legitimate notices posted to users via Salmon.
authorJoshua Judson Rosen <rozzin@geekspace.com>
Wed, 30 Apr 2014 04:23:23 +0000 (00:23 -0400)
committerMikael Nordfeldth <mmn@hethane.se>
Mon, 5 May 2014 11:35:38 +0000 (13:35 +0200)
commit7440dc2145ef21986073a212d5f892dda2de6ee8
tree270787b3a1ae8786298cfeffcfde52fa267434ec
parent15c0568d1b55da6121d0b98be901f867befa0fae
Prevent spurious refusals of legitimate notices posted to users via Salmon.

Make the logic match the intent described in the comments.

The intent is clearly "accept notices whenever (A or B or C)", but
the logic implemented was more like "not ((not A) or (not B) or (not C))",
which is a basical boolean algebra fail (each of those ORs need to
become ANDs for double-negation to work).

The practical implication was that, for example, writing a reply
to someone else's notice and including an @-reference to _another_
user on another site to bring them into the discussion would
fail to deliver the notice to the new user because their server
would basically say `oh no, you can't message this user
from someone else's thread' because an earlier check for
the `A' or `C' parts of `(A or B or C)' prevents `B' from
being checked.

cf.: <http://status.hackerposse.com/notice/55846>, which was
refused by the nhcrossing.com server because it didn't know
about <http://sn.jonkman.ca/notice/93724>, even though it would
have passed the later `notice contains a reference to a local user'
check if not for an exception being prematurely thrown.

The whole idea of reporting `which specific check FAILED'
in an `if ANY SUCCEEDS' analysis is just bogus, so nix all of
the distinct ClientExceptions--a single `ALL FAILED' exception
is the only one that makes sense.
plugins/OStatus/actions/usersalmon.php