[Date Prev][Date Next][Thread Prev][Thread Next] [Search] [Date Index] [Thread Index]

[MacPerl] Re: [MacPerl-WebCGI] LWP Example -- kill WebSTAR 2.0 suffix maps



Hi All.

I learned a lot this weekend.  There's a rather substantial
problem with the script I posted earlier -- the realm
authentication doesn't work:

At 8:36 PM -0600 6/4/99, Eric Dobbs wrote:
[snip]
>            #   This is where all the magic happens.  LWP is cool.
>            #   Here we POST the necessary arguments to the server.
>            #   You could also modify this code to add a suffix map.
>            #   One thing -- the $ua object must be remembering the
>            #   authentication information from the last request,
>            #   because none of that is specified here.
>            $response = $ua->request(POST $url,[
>                service => qq(suffix_mappings),
>                last_locked => $last_locked,
>                list_count => $list_count,
>                selection => qq($selection),
>                button => qq(Delete Selection)
>            ]);
[snip]

In this bit, the $ua object was *not* remembering the
authentication information -- rather, the realms on
our servers were not configured properly!  Yikes.


Here's another example where I have the realm
authentication working properly.  The concept is similar:
using LWP to automate some changes to the web server's
configuration through WebSTAR's web-based interface.  In
this case we're configuring the misc. settings.

-Eric


#   misc_WWW‡_settings.pl
#   by Eric Dobbs <dobbs@dobbse.net>

#   a script to set various misc. settings
#   for a collection of WebSTAR 2.0 servers

use LWP::UserAgent;
use HTTP::Request::Common;

# We make our own specialization of LWP::UserAgent
# with methods to set the login and password
# this is critical for the realm authentication to
# work.
{
    package RequestAgent;
    @ISA = qw(LWP::UserAgent);

    my ($user,$password);
    
    sub user {
        my $self = shift;
        my $temp = shift;
        if ($temp) {
            $user = $temp;
            return;
        } else {
            return $user;
        }
    }
    sub password {
        my $self = shift;
        my $temp = shift;
        if ($temp) {
            $password = $temp;
            return;
        } else {
            return $password;
        }
    }
    sub get_basic_credentials {return ($user,$password);}
}


#   need to do this for about 20 servers
#   each element in this array contains a reference to an anonymous array
#   each anonymous array contains the following info:
#       nickname    domain or ip    realm login     realm password
my @servers = (
    [qw(server1     one.somewhere.com       pi_admin    password)],
    [qw(server2     two.somewhere.com       pi_admin    password)],
    [qw(server3     three.somewhere.com     pi_admin    password)],
    [qw(server4     four.somewhere.com      pi_admin    password)]
);

#   these are the fields in WebSTARs misc settings.
my $webstar_service                 = qq(misc_settings);
my $webstar_maxconnections          = qq(28);
my $webstar_port                    = qq(80);
my $webstar_timeout                 = qq(240);
my $webstar_reportdelay             = qq(15);
my $webstar_fileinfocachesize       = qq(400);
my $webstar_buffersize              = qq(8000);
my $webstar_keepaliveconnections    = qq(10);
my $webstar_keepaliveduration       = qq(20);
my $webstar_usedns                  = qq();
my $webstar_cgibin                  = qq();
my $webstar_index                   = qq(default.DIR);
my $webstar_error                   = qq(:error.html);
my $webstar_noaccess                = qq(:noaccess.html);
my $webstar_logfile                 = qq(:Logs:WebSTAR.log);
my $webstar_preprocess              = qq();
my $webstar_postprocess             = qq();
my $webstar_defaultmime             = qq(text/html);
my $webstar_servername              = qq(SomeServer);
my $webstar_button                  = qq(Save);

foreach (@servers) {
    my ($name,$ip,$user,$password) = @$_;
    #   this is the WebSTAR 2.0 url for text-only modification of misc. settings
    my $url = qq(http://$ip/pi_admin_ssi.admin\$adm_miscsettingstext.ssi);
    my $ua = new RequestAgent;

    $ua->user($user);
    $ua->password($password);

    my $response = $ua->request(POST $url,[
        service                 => $webstar_service,
        maxconnections          => $webstar_maxconnections,
        port                    => $webstar_port,
        timeout                 => $webstar_timeout,
        reportdelay             => $webstar_reportdelay,
        fileinfocachesize       => $webstar_fileinfocachesize,
        buffersize              => $webstar_buffersize,
        keepaliveconnections    => $webstar_keepaliveconnections,
        keepaliveduration       => $webstar_keepaliveduration,
        usedns                  => $webstar_usedns,
        cgibin                  => $webstar_cgibin,
        index                   => $webstar_index,
        error                   => $webstar_error,
        noaccess                => $webstar_noaccess,
        logfile                 => $webstar_logfile,
        preprocess              => $webstar_preprocess,
        postprocess             => $webstar_postprocess,
        defaultmime             => $webstar_defaultmime,
        servername              => $webstar_servername,
        button                  => $webstar_button
    ]);
    
    if ($response->is_error()) {
        print qq(\n) . $response->status_line . qq(\n);
    } else {
        print $response->as_string .qq(\n);
    }
}


__END__



===== Want to unsubscribe from this list?
===== Send mail with body "unsubscribe" to macperl-request@macperl.org