From 93d67e0d5939181eb6c57f6141b9f1786d784233 Mon Sep 17 00:00:00 2001 From: pdontthink Date: Thu, 16 Nov 2006 12:25:48 +0000 Subject: [PATCH] Adding plugins on/off switch, which disables plugins completely (optionally for only one named user, otherwise for all users). git-svn-id: https://svn.code.sf.net/p/squirrelmail/code/trunk/squirrelmail@11959 7612ce4b-ef26-0410-bec9-ea0150e637f0 --- ChangeLog | 2 ++ config/conf.pl | 47 +++++++++++++++++++++++++++++++++++++-- config/config_default.php | 12 ++++++++++ include/init.php | 22 ++++++++++++++++-- 4 files changed, 79 insertions(+), 4 deletions(-) diff --git a/ChangeLog b/ChangeLog index 6e04ac7f..9c9b99bc 100644 --- a/ChangeLog +++ b/ChangeLog @@ -157,6 +157,8 @@ Version 1.5.2 - CVS - Added PHP pspell extension support to squirrelspell plugin. - Add CEST and MEST (non-standard) timezone codes for +0200. - Add support for SpamAssassin's X-Spam-Status header (#1589520). + - Added plugin on/off switch, which completely disables all plugins + (optionally for one named user, otherwise for all users). Version 1.5.1 (branched on 2006-02-12) -------------------------------------- diff --git a/config/conf.pl b/config/conf.pl index 894a2b19..4d6f4972 100755 --- a/config/conf.pl +++ b/config/conf.pl @@ -469,6 +469,8 @@ $config_location_base = '' if ( !$config_location_base ); $smtp_sitewide_user = '' if ( !$smtp_sitewide_user ); $smtp_sitewide_pass = '' if ( !$smtp_sitewide_pass ); $icon_theme_def = '' if ( !$icon_theme_def ); +$disable_plugins = 'false' if ( !$disable_plugins ); +$disable_plugins_user = '' if ( !$disable_plugins_user ); if ( $ARGV[0] eq '--install-plugin' ) { print "Activating plugin " . $ARGV[1] . "\n"; @@ -692,7 +694,13 @@ while ( ( $command ne "q" ) && ( $command ne "Q" ) && ( $command ne ":q" ) ) { print "\n"; print "R Return to Main Menu\n"; } elsif ( $menu == 8 ) { - print $WHT. "Plugins\n" . $NRM; + if (lc($disable_plugins) eq 'true' && $disable_plugins_user ne '') { + print $WHT. "Plugins (WARNING: All plugins are currently disabled\n for the user \"$disable_plugins_user\"!)\n" . $NRM; + } elsif (lc($disable_plugins) eq 'true') { + print $WHT. "Plugins (WARNING: All plugins are currently disabled!)\n" . $NRM; + } else { + print $WHT. "Plugins\n" . $NRM; + } print " Installed Plugins\n"; $num = 0; for ( $count = 0 ; $count <= $#plugins ; $count++ ) { @@ -726,6 +734,14 @@ while ( ( $command ne "q" ) && ( $command ne "Q" ) && ( $command ne ":q" ) ) { closedir DIR; print "\n"; + if (lc($disable_plugins) eq 'true' && $disable_plugins_user ne '') { + print "E Enable active plugins (all plugins currently\n disabled for the user \"$disable_plugins_user\")\n"; + } elsif (lc($disable_plugins) eq 'true') { + print "E Enable active plugins (all plugins currently\n disabled)\n"; + } else { + print "D Disable all plugins\n"; + } + print "U Set the user for whom plugins can be disabled\n"; print "R Return to Main Menu\n"; } elsif ( $menu == 9 ) { print $WHT. "Database\n" . $NRM; @@ -906,7 +922,10 @@ while ( ( $command ne "q" ) && ( $command ne "Q" ) && ( $command ne ":q" ) ) { } elsif ( $menu == 7 ) { if ( $command == 1 ) { $motd = command71(); } } elsif ( $menu == 8 ) { - if ( $command =~ /^[0-9]+/ ) { @plugins = command81(); } + if ( $command =~ /^[0-9]+/ ) { @plugins = command81(); } + elsif ( $command eq "u" ) { $disable_plugins_user = command82(); } + elsif ( $command eq "d" ) { $disable_plugins = 'true'; } + elsif ( $command eq "e" ) { $disable_plugins = 'false'; } } elsif ( $menu == 9 ) { if ( $command == 1 ) { $addrbook_dsn = command91(); } elsif ( $command == 2 ) { $addrbook_table = command92(); } @@ -1690,6 +1709,25 @@ sub command81 { return @plugins; } +# disable_plugins_user +sub command82 { + print "When all active plugins are disabled, they can be disabled only\n"; + print "for the one user named here. If left blank, plugins will be\n"; + print "disabled for ALL users. This setting has no effect if plugins\n"; + print "are not disabled.\n"; + print "\n"; + print "This must be the exact IMAP login name for the desired user.\n"; + print "\n"; + print "[$WHT$disable_plugins_user$NRM]: $WHT"; + $new_disable_plugins_user = ; + if ( $new_disable_plugins_user eq "\n" ) { + $new_disable_plugins_user = $disable_plugins_user; + } else { + $new_disable_plugins_user =~ s/[\r\n]//g; + } + return $new_disable_plugins_user; +} + ################# FOLDERS ################### # default_folder_prefix @@ -4367,6 +4405,11 @@ sub save_data { # string print CF "\$config_location_base = '$config_location_base';\n"; print CF "\n"; + # boolean + print CF "\$disable_plugins = $disable_plugins;\n"; + # string + print CF "\$disable_plugins_user = '$disable_plugins_user';\n"; + print CF "\n"; # all plugins are strings for ( $ct = 0 ; $ct <= $#plugins ; $ct++ ) { diff --git a/config/config_default.php b/config/config_default.php index 57215877..93b5fdac 100644 --- a/config/config_default.php +++ b/config/config_default.php @@ -883,6 +883,18 @@ $motd = ""; // Add list of enabled plugins here +/** + * To disable all plugins regardless of any that are installed + * above, turn on $disable_plugins. To disable them ONLY for + * one user, put that username into $disable_plugins_user. + * @global boolean $disable_plugins + * @global string $disable_plugins_user + * @since 1.5.2 + */ +$disable_plugins = false; +$disable_plugins_user = ''; + + /*** Database ***/ /** * Read doc/database.txt in order to get more information diff --git a/include/init.php b/include/init.php index 0d42d40a..d4abef04 100644 --- a/include/init.php +++ b/include/init.php @@ -226,10 +226,27 @@ $version = '1.5.2 [CVS]'; */ $SQM_INTERNAL_VERSION = array(1,5,2); + +/* if plugins are disabled only for one user and + * the current user is NOT that user, turn them + * back on + */ +sqgetGlobalVar('username',$username,SQ_SESSION); +if ($disable_plugins && !empty($disable_plugins_user) + && $username != $disable_plugins_user) { + $disable_plugins = false; +} + +/* remove all plugins if they are disabled */ +if ($disable_plugins) { + $plugins = array(); +} + + /** * Include Compatibility plugin if available. */ -if (file_exists(SM_PATH . 'plugins/compatibility/functions.php')) +if (!$disable_plugins && file_exists(SM_PATH . 'plugins/compatibility/functions.php')) include_once(SM_PATH . 'plugins/compatibility/functions.php'); /** @@ -239,7 +256,7 @@ if (file_exists(SM_PATH . 'plugins/compatibility/functions.php')) * and let the hook calls include only the plugins needed. */ $squirrelmail_plugin_hooks = array(); -if (file_exists(SM_PATH . 'config/plugin_hooks.php')) { +if (!$disable_plugins && file_exists(SM_PATH . 'config/plugin_hooks.php')) { require(SM_PATH . 'config/plugin_hooks.php'); } @@ -423,6 +440,7 @@ switch ($sInitLocation) { exit; } +//FIXME: remove next line if the placement of the copy of this line above does not prove to be problematic sqgetGlobalVar('username',$username,SQ_SESSION); sqgetGlobalVar('authz',$authz,SQ_SESSION); -- 2.25.1