- From: Mercurial notifier <nobody@w3.org>
- Date: Thu, 05 Aug 2010 14:47:21 +0000
- To: link-checker updates <www-validator-cvs@w3.org>
changeset: 310:2b47a82fd648 user: ville date: Sun Apr 19 10:35:43 2009 +0000 files: bin/checklink description: Fix asking for basic auth (need to delay writing of HTTP headers), set cookie and print form also in auth required response. diff -r 2cdfec0dc374 -r 2b47a82fd648 bin/checklink --- a/bin/checklink Sun Apr 19 09:58:25 2009 +0000 +++ b/bin/checklink Sun Apr 19 10:35:43 2009 +0000 @@ -5,7 +5,7 @@ # (c) 1999-2009 World Wide Web Consortium # based on Renaud Bruyeron's checklink.pl # -# $Id: checklink,v 4.155 2009-04-19 09:58:25 ville Exp $ +# $Id: checklink,v 4.156 2009-04-19 10:35:43 ville Exp $ # # This program is licensed under the W3C(r) Software License: # http://www.w3.org/Consortium/Legal/copyright-software @@ -275,7 +275,7 @@ $PROGRAM = 'W3C-checklink'; $VERSION = '4.5'; $REVISION = sprintf('version %s (c) 1999-2009 W3C', $VERSION); - my ($cvsver) = q$Revision: 4.155 $ =~ /(\d+[\d\.]*\.\d+)/; + my ($cvsver) = q$Revision: 4.156 $ =~ /(\d+[\d\.]*\.\d+)/; $AGENT = sprintf('%s/%s [%s] %s', $PROGRAM, $VERSION, $cvsver, (W3C::UserAgent::USE_ROBOT_UA @@ -838,18 +838,19 @@ my ($params, $uri, $check_num, $depth, $cookie, $referer, $is_start) = @_; $is_start ||= ($check_num == 1); + my $start = $Opts{Summary_Only} ? 0 : &get_timestamp(); + + # Get and parse the document + my $response = &get_document('GET', $uri, $doc_count, \%redirects, $referer, + $cookie, $params, $check_num, $is_start); + + # Can we check the resource? If not, we exit here... + return if defined($response->{Stop}); + if ($Opts{HTML}) { &html_header($uri, 0, $cookie) if ($check_num == 1); &print_form($params, $cookie, $check_num) if $is_start; } - - my $start = $Opts{Summary_Only} ? 0 : &get_timestamp(); - - # Get and parse the document - my $response = &get_document('GET', $uri, $doc_count, \%redirects, $referer); - - # Can we check the resource? If not, we exit here... - return if defined($response->{Stop}); if ($is_start) { # Starting point of a new check, eg. from the command line # Use the first URI as the recursion base unless specified otherwise. @@ -1133,15 +1134,18 @@ # Get and parse a resource to process # ####################################### -sub get_document ($$$;\%$) +sub get_document ($$$;\%$$$$$) { - my ($method, $uri, $in_recursion, $redirects, $referer) = @_; + my ($method, $uri, $in_recursion, $redirects, $referer, $cookie, $params, + $check_num, $is_start) = @_; # $method contains the HTTP method the use (GET or HEAD) # $uri contains the identifier of the resource # $in_recursion is > 0 if we are in recursion mode (i.e. it is at least # the second resource checked) # $redirects is a pointer to the hash containing the map of the redirects # $referer is the URI of the referring document + # $cookie, $params, $check_num, and $is_start are for printing HTTP headers + # and the form if $in_recursion == 0 and not authenticating # Get the resource my $response; @@ -1157,10 +1161,14 @@ if (! $in_recursion) { # Is it too late to request authentication? if ($response->code() == 401) { - &authentication($response); + &authentication($response, $cookie, $params, $check_num, $is_start); } else { + if ($Opts{HTML}) { + &html_header($uri, 0, $cookie) if ($check_num == 1); + &print_form($params, $cookie, $check_num) if $is_start; + print "<p>"; + } # TODO: style this message to make it stand out - print "<p>" if $Opts{HTML}; &hprintf("\nError: %d %s\n", $response->code(), $response->message() || '(no message)'); print "</p>\n" if $Opts{HTML}; @@ -1200,8 +1208,12 @@ if ($failed_reason) { # No, there is a problem... if (! $in_recursion) { + if ($Opts{HTML}) { + &html_header($uri, 0, $cookie) if ($check_num == 1); + &print_form($params, $cookie, $check_num) if $is_start; + print "<p>"; + } # TODO: style this message to make it stand out - print "<p>" if $Opts{HTML}; &hprintf("Can't check links: %s.\n", $failed_reason); print "</p>\n" if $Opts{HTML}; } @@ -1776,9 +1788,9 @@ # Ask for authentication # ########################## -sub authentication ($) +sub authentication ($;$$$$) { - my ($response) = @_; + my ($response, $cookie, $params, $check_num, $is_start) = @_; my $realm = ''; if ($response->www_authenticate() =~ /Basic realm=\"([^\"]+)\"/) { @@ -1795,7 +1807,10 @@ EOF } else { - printf("Status: 401 Authorization Required\nWWW-Authenticate: %s\nConnection: close\nContent-Language: en\nContent-Type: text/html; charset=utf-8\n\n", $response->www_authenticate()); + printf("Status: 401 Authorization Required\nWWW-Authenticate: %s\n%sConnection: close\nContent-Language: en\nContent-Type: text/html; charset=utf-8\n\n", + $response->www_authenticate(), + $cookie ? "Set-Cookie: $cookie\n" : "", + ); printf("%s <html lang=\"en\" xmlns=\"http://www.w3.org/1999/xhtml\" xml:lang=\"en\"> @@ -1804,6 +1819,7 @@ %s</head> <body>", $DocType, $Head); &banner(': 401 Authorization Required'); + &print_form($params, $cookie, $check_num) if $is_start; printf("<p> You need \"%s\" access to <a href=\"%s\">%s</a> to perform link checking.<br /> ", &encode($realm), (&encode($response->request()->url())) x 2);
Received on Thursday, 5 August 2010 14:47:37 UTC