summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBharat Mediratta <bharat@menalto.com>2010-01-25 19:49:52 -0800
committerBharat Mediratta <bharat@menalto.com>2010-01-25 19:50:56 -0800
commitf8b8103c24cb50612b061cb6a4787695b600735c (patch)
tree811138f40b0d23895be51848c3945d2b4e289fe8
parent6023f2bb46598f9da096d63f7ab1dfb914eab6f7 (diff)
Make only one attempt to restore the old identity provider in case of
failure. Else, we can get into an infinite recursion.
-rw-r--r--modules/gallery/libraries/IdentityProvider.php34
1 files changed, 22 insertions, 12 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);
-
- // 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)));
+ static $restore_already_running;
+
+ // 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;
}
}