X-Git-Url: https://sipb.mit.edu/gitweb.cgi/ikiwiki.git/blobdiff_plain/6154dd03cb9f46f58c04f91c12ac9e42c696dbbb..137624775407e433935f68b9ee282723adca1513:/IkiWiki.pm diff --git a/IkiWiki.pm b/IkiWiki.pm index 0746ef24b..51e683bb4 100644 --- a/IkiWiki.pm +++ b/IkiWiki.pm @@ -13,7 +13,8 @@ use open qw{:utf8 :std}; use vars qw{%config %links %oldlinks %pagemtime %pagectime %pagecase %pagestate %renderedfiles %oldrenderedfiles %pagesources - %destsources %depends %hooks %forcerebuild $gettext_obj}; + %destsources %depends %hooks %forcerebuild $gettext_obj + %loaded_plugins}; use Exporter q{import}; our @EXPORT = qw(hook debug error template htmlpage add_depends pagespec_match @@ -91,7 +92,7 @@ sub getsetup () { #{{{ type => "string", default => '', example => "/var/www/wiki/ikiwiki.cgi", - description => "cgi executable to generate", + description => "cgi wrapper to generate", safe => 0, # file rebuild => 0, }, @@ -115,7 +116,7 @@ sub getsetup () { #{{{ openid signinedit lockedit conditional recentchanges parentlinks}], description => "plugins to enable by default", - safe => 1, + safe => 0, rebuild => 1, }, add_plugins => { @@ -284,6 +285,13 @@ sub getsetup () { #{{{ safe => 0, # regexp rebuild => 1, }, + banned_users => { + type => "string", + default => [], + description => "users who are banned from the wiki", + safe => 1, + rebuild => 0, + }, wiki_file_prune_regexps => { type => "internal", default => [qr/(^|\/)\.\.(\/|$)/, qr/^\./, qr/\/\./, @@ -412,13 +420,6 @@ sub checkconfig () { #{{{ $config{wikistatedir}="$config{srcdir}/.ikiwiki" unless exists $config{wikistatedir}; - - if ($config{rcs}) { - loadplugin($config{rcs}); - } - else { - loadplugin("norcs"); - } if (defined $config{umask}) { umask(possibly_foolish_untaint($config{umask})); @@ -433,14 +434,14 @@ sub listplugins () { #{{{ my %ret; foreach my $dir (@INC, $config{libdir}) { - next unless defined $dir; + next unless defined $dir && length $dir; foreach my $file (glob("$dir/IkiWiki/Plugin/*.pm")) { my ($plugin)=$file=~/.*\/(.*)\.pm$/; $ret{$plugin}=1; } } foreach my $dir ($config{libdir}, "$installdir/lib/ikiwiki") { - next unless defined $dir; + next unless defined $dir && length $dir; foreach my $file (glob("$dir/plugins/*")) { $ret{basename($file)}=1 if -x $file; } @@ -450,11 +451,21 @@ sub listplugins () { #{{{ } #}}} sub loadplugins () { #{{{ - if (defined $config{libdir}) { + if (defined $config{libdir} && length $config{libdir}) { unshift @INC, possibly_foolish_untaint($config{libdir}); } loadplugin($_) foreach @{$config{default_plugins}}, @{$config{add_plugins}}; + + if ($config{rcs}) { + if (exists $IkiWiki::hooks{rcs}) { + error(gettext("cannot use multiple rcs plugins")); + } + loadplugin($config{rcs}); + } + if (! exists $IkiWiki::hooks{rcs}) { + loadplugin("norcs"); + } run_hooks(getopt => sub { shift->() }); if (grep /^-/, @ARGV) { @@ -476,6 +487,7 @@ sub loadplugin ($) { #{{{ if (defined $dir && -x "$dir/plugins/$plugin") { require IkiWiki::Plugin::external; import IkiWiki::Plugin::external "$dir/plugins/$plugin"; + $loaded_plugins{$plugin}=1; return 1; } } @@ -485,6 +497,7 @@ sub loadplugin ($) { #{{{ if ($@) { error("Failed to load plugin $mod: $@"); } + $loaded_plugins{$plugin}=1; return 1; } #}}}