diff options
-rwxr-xr-x | include/items.php | 15 | ||||
-rw-r--r-- | include/notifier.php | 9 |
2 files changed, 23 insertions, 1 deletions
diff --git a/include/items.php b/include/items.php index b7bdad838..d6c6f5043 100755 --- a/include/items.php +++ b/include/items.php @@ -4799,3 +4799,18 @@ function set_linkified_perms($linkified, &$str_contact_allow, &$str_group_allow, } } } + + +/* + * We can't trust ITEM_ORIGIN to tell us if this is a local comment + * which needs to be relayed, because it was misconfigured at one point for several + * months and set for some remote items (in alternate delivery chains). This could + * cause looping, so use this hackish but accurate method. + */ + + +function comment_local_origin($item) { + if(stripos($item['mid'],get_app()->get_hostname()) && ($item['parent'] != $item['id'])) + return true; + return false; +}
\ No newline at end of file diff --git a/include/notifier.php b/include/notifier.php index f64732884..22adc78a3 100644 --- a/include/notifier.php +++ b/include/notifier.php @@ -371,7 +371,14 @@ function notifier_run($argv, $argc){ // To clarify, a site accepting a new comment is responsible for sending it to the owner for relay. // Relaying should never be initiated on a post that arrived from elsewhere. - $relay_to_owner = (((! $top_level_post) && ($target_item['item_flags'] & ITEM_ORIGIN)) ? true : false); + // We should normally be able to rely on ITEM_ORIGIN, but start_delivery_chain() incorrectly set this + // flag on comments for an extended period. So we'll also call comment_local_origin() which looks at + // the hostname in the message_id and provides a second (fallback) opinion. + + $relay_to_owner = (((! $top_level_post) && ($target_item['item_flags'] & ITEM_ORIGIN) && comment_local_origin()) + ? true + : false + ); $uplink = false; |