|
Packit |
022b05 |
#!/usr/bin/perl -w -T
|
|
Packit |
022b05 |
use strict;
|
|
Packit |
022b05 |
use CGI qw(:standard);
|
|
Packit |
022b05 |
#set this for testing purposes only
|
|
Packit |
022b05 |
#use CGI::Carp qw(fatalsToBrowser);
|
|
Packit |
022b05 |
use File::Temp;
|
|
Packit |
022b05 |
|
|
Packit |
022b05 |
#some security-settings
|
|
Packit |
022b05 |
$CGI::POST_MAX = 1024 * 100;
|
|
Packit |
022b05 |
$ENV{'PATH'} = '/bin:/usr/bin:/usr/local/bin';
|
|
Packit |
022b05 |
|
|
Packit |
022b05 |
#gather all mibs in smipath into @mibnames
|
|
Packit |
022b05 |
my $smipath = "@smipath@";
|
|
Packit |
022b05 |
my @smidirs = split(/:/,$smipath);
|
|
Packit |
022b05 |
my @mibnames;
|
|
Packit |
022b05 |
foreach my $dir (@smidirs) {
|
|
Packit |
022b05 |
opendir(MIBDIR,$dir);
|
|
Packit |
022b05 |
my @entries = grep !/^\.\.?\z/, readdir(MIBDIR);
|
|
Packit |
022b05 |
closedir(MIBDIR);
|
|
Packit |
022b05 |
@mibnames = (@mibnames, @entries);
|
|
Packit |
022b05 |
}
|
|
Packit |
022b05 |
|
|
Packit |
022b05 |
if (param()) {
|
|
Packit |
022b05 |
#params present.
|
|
Packit |
022b05 |
my @options;
|
|
Packit |
022b05 |
my $localfh;
|
|
Packit |
022b05 |
my $localfn;
|
|
Packit |
022b05 |
my @mibs = param('mibs');
|
|
Packit |
022b05 |
my $width = param('width');
|
|
Packit |
022b05 |
my $height = param('height');
|
|
Packit |
022b05 |
|
|
Packit |
022b05 |
#parse options and add safe strings to the options-array
|
|
Packit |
022b05 |
if (param('deprobs')) {
|
|
Packit |
022b05 |
if (param('deprobs') eq "deprecated") {
|
|
Packit |
022b05 |
@options = (@options, "--svg-show-deprecated");
|
|
Packit |
022b05 |
} elsif (param('deprobs') eq "obsolete") {
|
|
Packit |
022b05 |
@options = (@options, "--svg-show-depr-obsolete");
|
|
Packit |
022b05 |
}
|
|
Packit |
022b05 |
}
|
|
Packit |
022b05 |
|
|
Packit |
022b05 |
if (param('static')) {
|
|
Packit |
022b05 |
@options = (@options, "--svg-static-output");
|
|
Packit |
022b05 |
}
|
|
Packit |
022b05 |
|
|
Packit |
022b05 |
if ($width =~ /(\d+)/) {
|
|
Packit |
022b05 |
if ($1 <= 2147483647) {
|
|
Packit |
022b05 |
@options = (@options, "--svg-width=$1");
|
|
Packit |
022b05 |
}
|
|
Packit |
022b05 |
}
|
|
Packit |
022b05 |
if ($height =~ /(\d+)/) {
|
|
Packit |
022b05 |
if ($1 <= 2147483647) {
|
|
Packit |
022b05 |
@options = (@options, "--svg-height=$1");
|
|
Packit |
022b05 |
}
|
|
Packit |
022b05 |
}
|
|
Packit |
022b05 |
|
|
Packit |
022b05 |
#parse selected MIBs
|
|
Packit |
022b05 |
foreach my $mibname (@mibnames) {
|
|
Packit |
022b05 |
foreach my $mib (@mibs) {
|
|
Packit |
022b05 |
if ($mibname eq $mib) {
|
|
Packit |
022b05 |
$mibname =~ /([\w\-]+)/;
|
|
Packit |
022b05 |
@options = (@options, "$1");
|
|
Packit |
022b05 |
}
|
|
Packit |
022b05 |
}
|
|
Packit |
022b05 |
}
|
|
Packit |
022b05 |
|
|
Packit |
022b05 |
#handle file upload
|
|
Packit |
022b05 |
if (param('uploadmib')) {
|
|
Packit |
022b05 |
my $remotefh = upload('uploadmib');
|
|
Packit |
022b05 |
($localfh, $localfn)
|
|
Packit |
022b05 |
= File::Temp->tempfile('tempMIBXXXX', DIR => '/tmp', UNLINK => 1)
|
|
Packit |
022b05 |
or die "Error opening outfile\n";
|
|
Packit |
022b05 |
while (<$remotefh>) {
|
|
Packit |
022b05 |
print $localfh $_;
|
|
Packit |
022b05 |
}
|
|
Packit |
022b05 |
close $remotefh;
|
|
Packit |
022b05 |
close $localfh;
|
|
Packit |
022b05 |
@options = (@options, $localfn);
|
|
Packit |
022b05 |
}
|
|
Packit |
022b05 |
|
|
Packit |
022b05 |
#call smidump
|
|
Packit |
022b05 |
my $res = open (SMIDUMP, "-|");
|
|
Packit |
022b05 |
die "Couldn't open pipe to subprocess" unless defined($res);
|
|
Packit |
022b05 |
exec "@prefix@/bin/smidump",'-u','-f','svg',@options
|
|
Packit |
022b05 |
or die "Couldn't exec smidump" if $res == 0;
|
|
Packit |
022b05 |
my @svg = <SMIDUMP>;
|
|
Packit |
022b05 |
close (SMIDUMP);
|
|
Packit |
022b05 |
|
|
Packit |
022b05 |
#serve svg
|
|
Packit |
022b05 |
my $svglength = @svg;
|
|
Packit |
022b05 |
if ($svglength eq 0) {
|
|
Packit |
022b05 |
print header;
|
|
Packit |
022b05 |
print start_html("MIB to SVG");
|
|
Packit |
022b05 |
print h2("Sorry, smidump output contained no data.");
|
|
Packit |
022b05 |
print end_html;
|
|
Packit |
022b05 |
} else {
|
|
Packit |
022b05 |
#FIXME - or + ?
|
|
Packit |
022b05 |
print header(-TYPE => "image/svg-xml");
|
|
Packit |
022b05 |
print "@svg";
|
|
Packit |
022b05 |
}
|
|
Packit |
022b05 |
|
|
Packit |
022b05 |
} else {
|
|
Packit |
022b05 |
#no params present
|
|
Packit |
022b05 |
#send form
|
|
Packit |
022b05 |
print header;
|
|
Packit |
022b05 |
print start_html("MIB to SVG");
|
|
Packit |
022b05 |
print h2("Generate a SVG Diagram from MIB Modules");
|
|
Packit |
022b05 |
print start_multipart_form();
|
|
Packit |
022b05 |
|
|
Packit |
022b05 |
print p("select one or more MIBs: ", scrolling_list(
|
|
Packit |
022b05 |
-NAME => "mibs",
|
|
Packit |
022b05 |
-VALUES => [@mibnames],
|
|
Packit |
022b05 |
-SIZE => 10,
|
|
Packit |
022b05 |
-MULTIPLE => 1,
|
|
Packit |
022b05 |
));
|
|
Packit |
022b05 |
|
|
Packit |
022b05 |
print p("or upload a MIB: ", filefield(
|
|
Packit |
022b05 |
-NAME => "uploadmib"
|
|
Packit |
022b05 |
));
|
|
Packit |
022b05 |
|
|
Packit |
022b05 |
print p("diagram width: ", textfield(
|
|
Packit |
022b05 |
-NAME => "width",
|
|
Packit |
022b05 |
-DEFAULT => "1100"
|
|
Packit |
022b05 |
));
|
|
Packit |
022b05 |
print p("diagram height: ", textfield(
|
|
Packit |
022b05 |
-NAME => "height",
|
|
Packit |
022b05 |
-DEFAULT => "700"
|
|
Packit |
022b05 |
));
|
|
Packit |
022b05 |
|
|
Packit |
022b05 |
print p(radio_group(
|
|
Packit |
022b05 |
-NAME => "deprobs",
|
|
Packit |
022b05 |
-VALUES => [ qw(none deprecated obsolete) ],
|
|
Packit |
022b05 |
-LINEBREAK => 1,
|
|
Packit |
022b05 |
-LABELS => {
|
|
Packit |
022b05 |
none => "show only current objects",
|
|
Packit |
022b05 |
deprecated => "show current and deprecated objects",
|
|
Packit |
022b05 |
obsolete => "show all objects",
|
|
Packit |
022b05 |
},
|
|
Packit |
022b05 |
));
|
|
Packit |
022b05 |
|
|
Packit |
022b05 |
print p(checkbox(
|
|
Packit |
022b05 |
-NAME => "static",
|
|
Packit |
022b05 |
-LABEL => "generate a smaller, non-interactive SVG diagram",
|
|
Packit |
022b05 |
));
|
|
Packit |
022b05 |
|
|
Packit |
022b05 |
print p(submit("generate SVG"), reset("reset form"));
|
|
Packit |
022b05 |
print end_form;
|
|
Packit |
022b05 |
print end_html;
|
|
Packit |
022b05 |
}
|