File webserver.patch of Package checkbot
--- checkbot
+++ checkbot 2005/09/28 06:30:39
@@ -37,7 +37,7 @@
=head1 NAME
-Checkbot - WWW Link Verifier
+Checkbot - WWW Link Verifier. Modified for the Novell Webconsole
=head1 SYNOPSIS
@@ -55,6 +55,8 @@
[B<--enable-virtual>]
[B<--language> language code]
[B<--suppress> suppression file]
+ [B<--username> Username for Novell Webconsole]
+ [B<--password> Password for Novell Webconsole]
[start URLs]
=head1 DESCRIPTION
@@ -305,6 +307,28 @@
# 403 Forbidden
403 http://www.herring.com/
+=item --username <username>
+
+Username for the Novell Webconsole.
+
+Before starting the link check the must exist already an account
+to the Webconsole in order getting all available links.
+So first of all there will be generated a login cookie by calling
+the <hostname>/accounts/login with the given username and password.
+
+Do NOT forget activating cookies by the --cookies option.
+
+=item --password <password>
+
+Password for the Novell Webconsole.
+
+Before starting the link check the must exist already an account
+to the Webconsole in order getting all available links.
+So first of all there will be generated a login cookie by calling
+the <hostname>/accounts/login with the given username and password.
+
+Do NOT forget activating cookies by the --cookies option.
+
=back
Deprecated options which will disappear in a future release:
@@ -480,7 +504,7 @@
# Get command-line arguments
use Getopt::Long;
- my $result = GetOptions(qw(cookies debug help noproxy=s verbose url=s match=s exclude|x=s file=s filter=s style=s ignore|z=s mailto|M=s note|N=s proxy=s internal-only sleep=f timeout=i interval=i dontwarn=s enable-virtual language=s allow-simple-hosts suppress=s));
+ my $result = GetOptions(qw(cookies debug help noproxy=s verbose url=s match=s exclude|x=s file=s filter=s style=s ignore|z=s mailto|M=s note|N=s proxy=s internal-only sleep=f timeout=i interval=i dontwarn=s enable-virtual language=s allow-simple-hosts suppress=s password=s username=s));
# Handle arguments, some are mandatory, some have defaults
&print_help if (($main::opt_help && $main::opt_help)
@@ -654,9 +678,42 @@
open(CURRENT, $main::cur_queue)
|| die "$0: Unable to open CURRENT $main::cur_queue for reading: $!\n";
+ ## initialize to webconsole specific
+ if (defined($main::opt_url))
+ {
+ my $urlstring = $main::opt_url . "/accounts/login";
+
+ my %argument = ();
+ if (defined($main::opt_username))
+ {
+ $argument{"user_login"} = $main::opt_username;
+ }
+ if (defined($main::opt_password))
+ {
+ $argument{"user_password"} = $main::opt_password;
+ }
+
+ # receiving session cookie
+ handle_url($main::opt_url);
+
+ # login
+ my $root_url = URI->new($urlstring);
+
+ my $response = $main::ua->post($root_url, \%argument);
+ if ($response->is_success || $response->is_redirect) {
+ print "Login succeeded\n";
+ print $response->content;
+ }
+ else {
+ print "Login NOT succeeded\n";
+ print STDERR $response->status_line, "\n";
+ }
+ }
+
do {
# Read a line from the queue, and process it
while (defined ($line = <CURRENT>) ) {
+ print "checking $line";
chomp($line);
&handle_url($line);
&check_point();
@@ -720,6 +777,8 @@
my $response;
my $type;
+# print "Checking URL: $urlstr \n";
+
$stats{'todo'}--;
# Add this URL to the ones we've seen already, return if it is a
@@ -790,16 +849,16 @@
if ($response->is_redirect and is_internal($url->as_string)) {
if ($response->code == 300) { # multiple choices, but no redirection available
- output 'Multiple choices', 2;
+ print 'Multiple choices\n';
} else {
my $baseURI = URI->new($url);
if (defined $response->header('Location')) {
my $redir_url = URI->new_abs($response->header('Location'), $baseURI);
- output "Redirected to $redir_url", 2;
+ print "Redirected to $redir_url\n";
add_to_queue($redir_url, $urlparent);
$stats{'todo'}++;
} else {
- output 'Location header missing from redirect response', 2;
+ print 'Location header missing from redirect response\n';
}
}
}
@@ -979,6 +1038,9 @@
print OUT "<tr><th align=\"left\">--match</th><td>Match regular expression</td><td>$main::opt_match</td></tr>\n";
print OUT "<tr><th align=\"left\">--exclude</th><td>Exclude regular expression</td><td>$main::opt_exclude</td></tr>\n" if defined $main::opt_exclude;
print OUT "<tr><th align=\"left\">--filter</th><td>Filter regular expression</td><td>$main::opt_filter</td></tr>\n" if defined $main::opt_filter;
+ print OUT "<tr><th align=\"left\">--username</th><td>Username</td><td>$main::opt_username</td></tr>\n" if defined $main::opt_username;
+ print OUT "<tr><th align=\"left\">--password</th><td>Password</td><td>set</td></tr>\n" if defined $main::opt_password;
+
print OUT "<tr><th align=\"left\">--noproxy</th><td>No Proxy for the following domains</td><td>$main::opt_noproxy</td></tr>\n" if defined $main::opt_noproxy;
print OUT "<tr><th align=\"left\">--ignore</th><td>Ignore regular expression</td><td>$main::opt_ignore</td></tr>\n" if defined $main::opt_ignore;
print OUT "<tr><th align=\"left\">--suppress</th><td>Suppress error code and URL specified by</td><td>$main::opt_suppress</td></tr>\n" if defined $main::opt_suppress;
@@ -1155,12 +1217,14 @@
my $p = HTML::LinkExtor->new(undef, $response->base);
$p->parse($response->content);
$p->eof;
-
+ my $string = $response->base->as_string;
+ print ( "URL $string \n");
# Deal with the links we found in this document
my @links = $p->links();
foreach (@links) {
my ($tag, %l) = @{$_};
foreach (keys %l) {
+ print (" $l{$_} $_ $tag\n");
# Get the canonical URL, so we don't need to worry about base, case, etc.
my $url = $l{$_}->canonical;
@@ -1426,6 +1490,12 @@
--dontwarn codes Do not write warnings for these HTTP response codes
--enable-virtual Use only virtual names, not IP numbers for servers
--language Specify 2-letter language code for language negotiation
+ --username Username for Novell Webconsole
+ --password Password for Novell Webconsole
+
+Example for checking a Novell Webconsole:
+
+checkbot --cookies --url=http://webconsole.suse.de --username=schubi --password=system --ignore=http://webconsole.suse.de/accounts/logout
Options --match, --exclude, and --ignore can take a perl regular expression
as their argument\n