117 lines
2.2 KiB
Perl
Executable File
117 lines
2.2 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.5.8 or higher system must be active
|
|
if(CheckVersion("$SYSTEM_VERS", "10.5.8", "ProductVersion", "<")) {
|
|
$EXIT_VALUE = ((1 << 6) | ( 1 << 5 ) | 17 );
|
|
last;
|
|
}
|
|
# 10.5 system must be active
|
|
if(CheckVersion("$SYSTEM_VERS", "10.6", "ProductVersion", ">")) {
|
|
$EXIT_VALUE = ((1 << 6) | ( 1 << 5 ) | 18 );
|
|
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);
|
|
}
|
|
|