#!/usr/local/bin/perl # ChRedirect v1.0 (c) 16.2.2001 by Andreas Ley (u) 21.2.2001 # Change Redirect Maps #use diagnostics; $confdir = "/usr/local/etc/httpd/conf"; sub usage { $image = $0; $image =~ s/.*\///; print STDERR "Usage: $image key redirect\n"; print STDERR "or: $image [-r]\n"; exit(1); } # # Handle Options # while ($ARGV[0] =~ /^-/) { $option = shift(@ARGV); last if ($option eq "--"); if ($option eq '-r') { $opt_rebuild++; } else { &usage(); } } # # Get Server Name # if (open(CONF,"$confdir/httpd.conf")) { while () { chomp; if (/^\s*ServerName\s+(.*)/) { $servername = $1; last; } } close(CONF); } if (!defined($servername)) { $servername = `/usr/segment/bin/getfqdn`; chomp $servername; } sub visible { my($url) = @_; return($1 ne $servername) if ($url =~ /http:\/\/([^\/]+)\//); return($url =~ /^[^\/]+:/); } sub url { my($url) = @_; $url =~ s/http:\/\/$servername\//\//; return($url); } if ($opt_rebuild) { &usage() if (@ARGV); dbmopen(%visible,"$confdir/visible.tmp",0644) || die "Can't open $confdir/visible.tmp: $!\n"; dbmopen(%invisible,"$confdir/invisible.tmp",0644) || die "Can't open $confdir/invisible.tmp: $!\n"; while (<>) { chomp; (&visible($2)?\%visible:\%invisible)->{$1} = &url($2) if (/^\s*([^#\s]\S*)\s+(.*\S)\s*$/); } dbmclose(%visible); dbmclose(%invisible); rename("$confdir/visible.tmp","$confdir/visible.db"); rename("$confdir/visible.tmp.dir","$confdir/visible.dir"); rename("$confdir/visible.tmp.pag","$confdir/visible.pag"); rename("$confdir/invisible.tmp","$confdir/invisible.db"); rename("$confdir/invisible.tmp.dir","$confdir/invisible.dir"); rename("$confdir/invisible.tmp.pag","$confdir/invisible.pag"); } else { &usage() if (@ARGV!=2); $map = $confdir."/".(&visible($ARGV[1])?"visible":"invisible"); dbmopen(%map,$map,0644) || die "Can't open $map: $!\n"; $map{$ARGV[0]} = &url($ARGV[1]); dbmclose(%map); }