sl@0: #!/usr/bin/perl -w sl@0: sl@0: # pluginScript.pl sl@0: # sl@0: # Controls the availability of cert store plugins on the emulator, for testing sl@0: # purposes. sl@0: sl@0: $UsageMessage = <<"EOF"; sl@0: usage: sl@0: pluginScript disable PLUGIN sl@0: Disable the specified plugin by moving it to a backup location sl@0: pluginScript disable_all sl@0: Disable all plugins sl@0: pluginScript enable PLUGIN sl@0: Enable the specified plugin by copying the backup to its original location sl@0: pluginScript list PLATFORM BUILD sl@0: List the currently enabled plugins for the specified platform and build sl@0: (default is winscw udeb) sl@0: EOF sl@0: sl@0: @plugins = ('filecertstore.dll', sl@0: 'tadditionalstores.dll', sl@0: 'tadditionalstoressoftware.dll', sl@0: 'wapcertstore.dll', sl@0: 'swicertstoreplugin.dll', sl@0: 'thwsimstores.dll', sl@0: 'thwuiccstores.dll', sl@0: 'thwwimstores.dll', sl@0: 'tDeviceImmutablestores.dll', sl@0: 'MIDP2CertStore.dll'); sl@0: sl@0: @platforms = ('wins', 'winscw'); sl@0: sl@0: @builds = ('udeb', 'urel'); sl@0: sl@0: $EpocRoot = $ENV{'EPOCROOT'} . "epoc32"; sl@0: sl@0: sub usage() sl@0: { sl@0: die $UsageMessage; sl@0: } sl@0: sl@0: sub copyFile($$) sl@0: { sl@0: my ($from, $to) = @_; sl@0: print "Copying $from -> $to\n"; sl@0: die "Can't copy: $!" unless system("cmd", "/c", "copy", $from, $to) == 0; sl@0: } sl@0: sl@0: sub deleteFile($) sl@0: { sl@0: my ($file) = @_; sl@0: print "Deleting $file\n"; sl@0: die "Can't delete '$file': $!" unless unlink $file; sl@0: } sl@0: sl@0: sub ensureDir($) sl@0: { sl@0: my ($dir) = @_; sl@0: if (! -d $dir) sl@0: { sl@0: print "Creating $dir\n"; sl@0: die "Can't create dir '$dir': $!" unless mkdir $dir; sl@0: } sl@0: } sl@0: sl@0: sub isSecure($) sl@0: { sl@0: my ($plugin) = @_; sl@0: $plugin =~ s/\.dll/.rsc/i; sl@0: return -f "$EpocRoot\\data\\z\\resource\\plugins\\$plugin" sl@0: } sl@0: sl@0: sub pluginDir($$) sl@0: { sl@0: my ($plugin, $path) = @_; sl@0: sl@0: if (isSecure($plugin)) sl@0: { sl@0: return "$path"; sl@0: } sl@0: else sl@0: { sl@0: return "$path\\z\\system\\libs\\plugins"; sl@0: } sl@0: } sl@0: sl@0: sub backupDir($$) sl@0: { sl@0: my ($plugin, $path) = @_; sl@0: sl@0: if (isSecure($plugin)) sl@0: { sl@0: return "$path\\plugins_backup"; sl@0: } sl@0: else sl@0: { sl@0: return "$path\\z\\system\\libs\\plugins_backup"; sl@0: } sl@0: } sl@0: sl@0: sub disable($) sl@0: { sl@0: my ($plugin) = @_; sl@0: sl@0: for my $platform (@platforms) sl@0: { sl@0: for my $build (@builds) sl@0: { sl@0: my $path = "$EpocRoot\\release\\$platform\\$build"; sl@0: sl@0: my $backupDir = backupDir($plugin, $path); sl@0: my $pluginDir = pluginDir($plugin, $path); sl@0: my $pluginFile = "$pluginDir\\$plugin"; sl@0: my $backupFile = "$backupDir\\$plugin"; sl@0: sl@0: if (-f $pluginFile) sl@0: { sl@0: # Always copy, in case plugin has been rebuilt sl@0: ensureDir($backupDir); sl@0: copyFile($pluginFile, $backupDir); sl@0: sl@0: deleteFile($pluginFile); sl@0: } sl@0: } sl@0: } sl@0: } sl@0: sl@0: sub disableAll() sl@0: { sl@0: for my $plugin (@plugins) sl@0: { sl@0: disable($plugin) sl@0: } sl@0: } sl@0: sl@0: sub enable($) sl@0: { sl@0: my ($plugin) = @_; sl@0: sl@0: for my $platform (@platforms) sl@0: { sl@0: for my $build (@builds) sl@0: { sl@0: my $path = "$EpocRoot\\release\\$platform\\$build"; sl@0: sl@0: my $backupDir = backupDir($plugin, $path); sl@0: my $pluginDir = pluginDir($plugin, $path); sl@0: my $pluginFile = "$pluginDir\\$plugin"; sl@0: my $backupFile = "$backupDir\\$plugin"; sl@0: sl@0: if (! -f $pluginFile && -f $backupFile) sl@0: { sl@0: copyFile($backupFile, $pluginDir); sl@0: } sl@0: } sl@0: } sl@0: } sl@0: sl@0: sub list($$) sl@0: { sl@0: my ($platform, $build) = @_; sl@0: my $path = "$EpocRoot\\release\\$platform\\$build"; sl@0: sl@0: printf "%-32s %-12s %s\n", "Plugin:", "Type:", "Status:"; sl@0: sl@0: for my $plugin (@plugins) sl@0: { sl@0: my $secure = isSecure($plugin); sl@0: my $enabled = 0; sl@0: sl@0: if ($secure) sl@0: { sl@0: $enabled = -f "$path\\$plugin"; sl@0: } sl@0: else sl@0: { sl@0: $enabled = -f "$path\\z\\system\\libs\\plugins\\$plugin"; sl@0: } sl@0: sl@0: my $secureMess = $secure ? 'secure' : 'old-style'; sl@0: my $enabledMess = $enabled ? 'enabled' : 'disabled'; sl@0: sl@0: printf "%-32s %-12s %s\n", $plugin, $secureMess, $enabledMess; sl@0: } sl@0: } sl@0: sl@0: sub main(@) sl@0: { sl@0: my $action = shift || usage(); sl@0: if ($action eq 'backup_all') sl@0: { sl@0: backupAll(); sl@0: } sl@0: elsif ($action eq 'disable') sl@0: { sl@0: my $plugin = shift || usage(); sl@0: usage() unless grep { $_ eq $plugin } @plugins; sl@0: disable($plugin); sl@0: } sl@0: elsif ($action eq 'disable_all') sl@0: { sl@0: disableAll(); sl@0: } sl@0: elsif ($action eq 'enable') sl@0: { sl@0: my $plugin = shift || usage(); sl@0: usage() unless grep { $_ eq $plugin } @plugins; sl@0: enable($plugin); sl@0: } sl@0: elsif ($action eq 'list') sl@0: { sl@0: my $platform = shift || 'winscw'; sl@0: my $build = shift || 'udeb'; sl@0: usage() unless grep { $_ eq $platform } @platforms; sl@0: usage() unless grep { $_ eq $build } @builds; sl@0: list($platform, $build); sl@0: } sl@0: else sl@0: { sl@0: usage(); sl@0: } sl@0: } sl@0: sl@0: main(@ARGV);