diff options
| author | Bharat Mediratta <bharat@menalto.com> | 2010-01-25 19:49:52 -0800 | 
|---|---|---|
| committer | Bharat Mediratta <bharat@menalto.com> | 2010-01-25 19:50:56 -0800 | 
| commit | f8b8103c24cb50612b061cb6a4787695b600735c (patch) | |
| tree | 811138f40b0d23895be51848c3945d2b4e289fe8 /modules/gallery | |
| parent | 6023f2bb46598f9da096d63f7ab1dfb914eab6f7 (diff) | |
Make only one attempt to restore the old identity provider in case of
failure.  Else, we can get into an infinite recursion.
Diffstat (limited to 'modules/gallery')
| -rw-r--r-- | modules/gallery/libraries/IdentityProvider.php | 32 | 
1 files changed, 21 insertions, 11 deletions
| diff --git a/modules/gallery/libraries/IdentityProvider.php b/modules/gallery/libraries/IdentityProvider.php index e07838d1..2ed85bd1 100644 --- a/modules/gallery/libraries/IdentityProvider.php +++ b/modules/gallery/libraries/IdentityProvider.php @@ -86,18 +86,28 @@ class IdentityProvider_Core {        auth::login($provider->admin_user());        Session::instance()->regenerate();      } catch (Exception $e) { -      // Make sure new provider is not in the database -      module::uninstall($new_provider); +      static $restore_already_running; -      // Lets reset to the current provider so that the gallery installation is still -      // working. -      module::set_var("gallery", "identity_provider", null); -      IdentityProvider::change_provider($current_provider); -      module::activate($current_provider); -      message::error( -        t("Error attempting to enable \"%new_provider\" identity provider, " . -          "reverted to \"%old_provider\" identity provider", -          array("new_provider" => $new_provider, "old_provider" => $current_provider))); +      // In case of error, make an attempt to restore the old provider.  Since that's calling into +      // this function again and can fail, we should be sure not to get into an infinite recursion. +      if (!$restore_already_running) { +        $restore_already_running = true; + +        // Make sure new provider is not in the database +        module::uninstall($new_provider); + +        // Lets reset to the current provider so that the gallery installation is still +        // working. +        module::set_var("gallery", "identity_provider", null); +        IdentityProvider::change_provider($current_provider); +        module::activate($current_provider); +        message::error( +          t("Error attempting to enable \"%new_provider\" identity provider, " . +            "reverted to \"%old_provider\" identity provider", +            array("new_provider" => $new_provider, "old_provider" => $current_provider))); + +        $restore_already_running = false; +      }        throw $e;      }    } | 
