From 036964de4d86f0109ece00cc9394b2a044c06c1e Mon Sep 17 00:00:00 2001 From: Mike Macgirvin Date: Tue, 5 Oct 2010 19:56:09 -0700 Subject: [PATCH] friend acceptance sets up lots of important stuff, so we need to be absolutely bulletproof when (not if) things go wrong. --- boot.php | 4 +++- mod/dfrn_confirm.php | 33 +++++++++++++++++++++++++-------- 2 files changed, 28 insertions(+), 9 deletions(-) diff --git a/boot.php b/boot.php index 2e3480f405..7bf3e75a6b 100644 --- a/boot.php +++ b/boot.php @@ -248,7 +248,9 @@ function check_config(&$a) { // $s is the string requiring macro substitution. // $r is an array of key value pairs (search => replace) // returns substituted string. - +// WARNING: this is pretty basic, and doesn't properly handle search strings that are substrings of each other. +// For instance if 'test' => "foo" and 'testing' => "bar", testing could become either bar or fooing, +// depending on the order in which they were declared in the array. if(! function_exists('replace_macros')) { function replace_macros($s,$r) { diff --git a/mod/dfrn_confirm.php b/mod/dfrn_confirm.php index 43e28aef8b..5d551355bc 100644 --- a/mod/dfrn_confirm.php +++ b/mod/dfrn_confirm.php @@ -270,12 +270,30 @@ function dfrn_confirm_post(&$a) { $res = post_url($dfrn_confirm,$params); -// uncomment the following two lines and comment the following xml/status lines -// to debug the remote confirmation section (when both confirmations -// and responses originate on this system) + // Try to be robust if the remote site is having difficulty and throwing up + // errors of some kind. -// echo $res; -// $status = 0; + $leading_junk = substr($res,0,strpos($res,'status; @@ -284,9 +302,7 @@ function dfrn_confirm_post(&$a) { notice( t("Confirmation completed successfully") . EOL); break; case 1: - // birthday paradox - generate new dfrn-id and fall through. - $new_dfrn_id = random_string(); $r = q("UPDATE contact SET `issued-id` = '%s' WHERE `id` = %d AND `uid` = %d LIMIT 1", dbesc($new_dfrn_id), @@ -302,7 +318,7 @@ function dfrn_confirm_post(&$a) { case 3: notice( t("Introduction failed or was revoked. Cannot complete.") . EOL); break; - } + } if(($status == 0 || $status == 3) && ($intro_id)) { @@ -314,6 +330,7 @@ function dfrn_confirm_post(&$a) { ); } + if($status != 0) return;