opensc/MacOSX/scripts/InstallationCheck

112 lines
2.0 KiB
Perl
Executable File

#!/usr/bin/perl
my $SYSTEM_VERS = "/System/Library/CoreServices/SystemVersion.plist";
my $EXIT_VALUE = 0;
if ( $ENV{OS_INSTALL} == 1) {
exit (0);
}
DO_CHECKS: {
# 10.6.8 or higher system must be active
if(CheckVersion("$SYSTEM_VERS", "10.6.8", "ProductVersion", "<")) {
$EXIT_VALUE = ((1 << 6) | ( 1 << 5 ) | 17 );
last;
}
}
exit($EXIT_VALUE);
###
sub CheckVersion
{
my $path = $_[0];
my $version = $_[1];
my $keyName = $_[2];
my $operator = $_[3];
if (! -e $path) {
return 0;
}
if (!$operator) {
$operator = "==";
}
my $oldSeperator = $/;
$/ = \0;
open( PLIST, "$path") || do {
return 0;
};
$plistData = <PLIST>;
$plistData =~ /<dict>(.*?)<\/dict>/gis;
@items = split(/<key>/, $plistData);
shift @items;
foreach $item (@items) {
$item =~ /(.*?)<\/key>.*?<string>(.*?)<\/string>/gis;
$versiondata{ $1 } = $2;
}
close(PLIST);
$/ = $oldSeperator;
@theVersionArray = split(/\./, $versiondata{$keyName});
for ($i = 0; $i < 3; $i++) {
if(!$theVersionArray[$i]) {
$theVersionArray[$i] = '0';
}
}
@versionArray = split(/\./, $version);
my $actualVersion;
for ($i = 0; $i < 3; $i++) {
if (($theVersionArray[$i] != $versionArray[$i]) or ($i == 2)) {
$actualVersion = $theVersionArray[$i];
$version = $versionArray[$i];
last;
}
}
my $expression = '$actualVersion ' . $operator . ' $version';
if( eval ($expression) )
{
return 1;
}
else
{
return 0;
}
}
sub CheckIOReg
{
$RESULT = 0;
open(IOREGOUT, "/usr/sbin/ioreg |");
foreach $LINE (<IOREGOUT>) {
$BUF .= $LINE;
}
close(IOREGOUT);
foreach $ITEM (@_) {
if($BUF =~ /$ITEM/g) {
$RESULT = 1;
last;
}
}
return($RESULT);
}