#!/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 = ; $plistData =~ /(.*?)<\/dict>/gis; @items = split(//, $plistData); shift @items; foreach $item (@items) { $item =~ /(.*?)<\/key>.*?(.*?)<\/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 () { $BUF .= $LINE; } close(IOREGOUT); foreach $ITEM (@_) { if($BUF =~ /$ITEM/g) { $RESULT = 1; last; } } return($RESULT); }