Usage: On the first line, write
ReplaceFile: <filename on server>
Somewhere later, between <pre></pre> tags, place the file contents.
Example use:
ReplaceFile?: /home/jrandom/wiki/intermap.txt
This is a MeatBall:PublicallyEditableInterMap.
----
<pre> WikiWiki http://c2.com/cgi/wiki? MeatBall http://meatballwiki.org/wiki/ </pre>
NOTE: File replacement is a potentially serious security risk. APPLY THIS PATCH AT YOUR OWN RISK. -- SunirShah
Add $ReplaceFile to use vars qw()
$DeletedPage = "DeletedPage"; # 0 = disable page deletion; "string" for page deletion marker text $ReplaceFile = "ReplaceFile"; # 0 = disable file replacement; "string" for file replacement marker text
sub ProcessVetos? { ...
if( $ReplaceFile && $Text{'text'} =~ /^\s*$ReplaceFile\:\s*(\S+)/o ) { my $fname = $1; # Only replace an existing file. if( -e $fname ) { if( $Text{'text'} =~ /.*<pre>.*?\n(.*?)\s*<\/pre>/ims ) { my $string = $1; $string =~ s/\r\n/\n/gms; open (OUT, ">$fname") or return 0; print OUT $string; close OUT; return ' (replaced)'; } } }
return 0; }
Personally, I'm not entirely satisfied allowing any local file to be replaced willy nilly. What if the administrator is on vacation? Perhaps the answer is to add to the configuration file an array of replaceable files.
Add @ReplaceableFiles to use vars qw()
@ReplaceableFiles = (); # A list of files users are allowed to replace. Set to undef to allow all files to be replaced.
Change
# Only replace an existing file. if( -e $fname ) {
to
# Only replace an allowed, existing file. if( (grep {$_ eq $fname} @ReplaceableFiles) && -e $fname) {
-- SunirShah