in reply to Re^5: Strawberry perl and PAR
in thread Strawberry perl and PAR

More info:

Options tried for compile:

pp -l C:\WINNT\system32\libeay32.dll -l C:\WINNT\system32\ssleay32.dll -M Crypt::SSLeay cam_reset.pl -o cam_reset.exe

Including -M Crypt:SSLeay appears to make no difference. On machines where perl is not installed, Exe produces:

Server returned error: 501 Protocol scheme 'https' is not supported (Crypt::SSLeay not installed)

Including use Crypt::SSLeay; in source script exe produces:

Can't load 'C:\DOCUME~1\user\LOCALS~1\Temp\user\cache-956f4474c8469d5dc52a0b30e6e115813cf9edc8\b58c32ab.dll' for module Crypt::SSLeay: load_file:This application has failed to start because the application configuration is incorrect. Reinstalling the application may fix this problem at C:/strawberry/perl/lib/DynaLoader.pm line 203. at C:/strawberry/perl/site/lib/PAR/Heavy.pm line 82 Compilation failed in require at script/cam_reset.pl line 8. BEGIN failed--compilation aborted at script/cam_reset.pl line 8.

It appears that everything needed by the script gets loaded on the client (no perl installed) machine to C:\DOCUME~1\user\LOCALS~1\Temp\par-user, included dlls, SSL crypt, etc. Part of the script:
#!\C:\strawberry\perl\bin use strict; use HTTP::Request::Common qw(POST GET); use HTTP::Headers; use LWP::UserAgent; use MIME::Base64; use Crypt::SSLeay; # set up the stuff my $ua = LWP::UserAgent->new(); # Set our own user-agent string! $ua->agent("CCAAgent/v3.5.8 CleanAccessManager API"); # Set the Basic Authentication credentials my $encoded = encode_base64('user:pass'); my $url = "https://somehost/admin/cisco_api.jsp"; # Params required for the POST... if (($ARGV[0] eq 'addmac') and defined($ARGV[1])) { my $req = POST $url, 'Authorization' => "Basic ".$encoded, Content => [ admin => "user", passwd => "pass", op => "addmac", mac => "$ARGV[1]", user => "i-command", provider => "pxebuild", type => "userole", role => "Authorized_Asset", desc => "Reset via icmd" # no comma here! ]; # Fire the cannon now ! my $res = $ua->request($req); # Get the error back from the server if any my $err = $res->status_line; if ($err != 200) { print "Server returned error: $err\n"; exit 1; } # Just print the whole stuff #print $res->as_string; # Just print the return html print $res->content; exit 0;