link-checker commit: Make forbidden protocols configurable (#29).

changeset:   361:8aee47762a31
user:        ville
date:        Thu Mar 11 17:54:33 2010 +0000
files:       NEWS bin/checklink etc/checklink.conf
description:
Make forbidden protocols configurable (#29).


diff -r 132872da47d3 -r 8aee47762a31 NEWS
--- a/NEWS	Thu Mar 11 17:13:42 2010 +0000
+++ b/NEWS	Thu Mar 11 17:54:33 2010 +0000
@@ -10,6 +10,7 @@
 - Improved heuristics when passed non-absolute URLs.
 - Support for cookies (command line only for now).
 - More "false positive" failure avoidance efforts for "make test".
+- The set of forbidden protocols is now configurable.
 - New dependencies: CSS-DOM >= 0.09.
 - Updated dependencies: Perl >= 5.8.
 
diff -r 132872da47d3 -r 8aee47762a31 bin/checklink
--- a/bin/checklink	Thu Mar 11 17:13:42 2010 +0000
+++ b/bin/checklink	Thu Mar 11 17:54:33 2010 +0000
@@ -5,7 +5,7 @@
 # (c) 1999-2010 World Wide Web Consortium
 # based on Renaud Bruyeron's checklink.pl
 #
-# $Id: checklink,v 4.192 2010-03-11 17:13:42 ville Exp $
+# $Id: checklink,v 4.193 2010-03-11 17:54:32 ville Exp $
 #
 # This program is licensed under the W3C(r) Software License:
 #       http://www.w3.org/Consortium/Legal/copyright-software
@@ -91,7 +91,6 @@
 
     $self->allow_private_ips(1);
 
-    # TODO: bug 29
     $self->protocols_forbidden([qw(mailto javascript)]);
 
     return $self;
@@ -306,7 +305,7 @@
     $PROGRAM  = 'W3C-checklink';
     $VERSION  = '4.5';
     $REVISION = sprintf('version %s (c) 1999-2010 W3C', $VERSION);
-    my ($cvsver) = q$Revision: 4.192 $ =~ /(\d+[\d\.]*\.\d+)/;
+    my ($cvsver) = q$Revision: 4.193 $ =~ /(\d+[\d\.]*\.\d+)/;
     $AGENT = sprintf(
         '%s/%s [%s] %s',
         $PROGRAM, $VERSION, $cvsver,
@@ -502,6 +501,13 @@
 EOF
 }
 
+# Add configured forbidden protocols
+if ($Cfg{Forbidden_Protocols}) {
+    my $forbidden = $ua->protocols_forbidden();
+    push(@$forbidden, split(/[,\s]+/, lc($Cfg{Forbidden_Protocols})));
+    $ua->protocols_forbidden($forbidden);
+}
+
 if ($Opts{Command_Line}) {
 
     require Text::Wrap;
@@ -568,7 +574,7 @@
     require CGI::Cookie;
 
     # file: URIs are not allowed in CGI mode
-    my $forbidden = $ua->protocols_forbidden() || [];
+    my $forbidden = $ua->protocols_forbidden();
     push(@$forbidden, 'file');
     $ua->protocols_forbidden($forbidden);
 
diff -r 132872da47d3 -r 8aee47762a31 etc/checklink.conf
--- a/etc/checklink.conf	Thu Mar 11 17:13:42 2010 +0000
+++ b/etc/checklink.conf	Thu Mar 11 17:54:33 2010 +0000
@@ -1,6 +1,6 @@
 #
 # Configuration file for the W3C Link Checker
-# $Id: checklink.conf,v 1.7 2009-02-10 18:36:31 ville Exp $
+# $Id: checklink.conf,v 1.8 2010-03-11 17:54:33 ville Exp $
 #
 # See Config::General(3) for the syntax; 'SplitPolicy' is 'equalsign' here.
 #
@@ -50,3 +50,13 @@
 #
 # Default:
 # Doc_URI = http://validator.w3.org/docs/checklink.html
+
+
+#
+# Forbidden_Protocols is a comma separated list of protocols/URI schemes
+# that the link checker is not allowed to use.  The javascript and mailto
+# schemes are always forbidden, and so is the file protocol when running
+# as a CGI script.
+#
+# Default:
+# Forbidden_Protocols = javascript,mailto

Received on Thursday, 5 August 2010 14:47:38 UTC