Ignore:
Timestamp:
11/14/2008 2:14:26 PM (4 years ago)
Author:
lowjoel
Message:

Tighten the plugin loading criteria:
-Plugins are first loaded reflection-only, checking for the presence of the IPlugin interface being implemented. If it is not implemented, the DLL is skipped.
-The plugins are then checked for a public key. If the public key is different from the executing assembly, it is not trusted and therefore is foreign.
-Foreign plugins must be approved by the user explicitly before they are loaded.

The SettingsPanel? and the ManagerSettings? classes have therefore been updated.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • branches/eraser6/Eraser/SettingsPanel.cs

    r562 r569  
    5959        private void OnNewPluginLoaded(PluginInstance instance) 
    6060        { 
    61             ListViewItem item = pluginsManager.Items.Add(instance.Plugin.Name); 
    62             item.SubItems.Add(instance.Plugin.Author); 
     61            ListViewItem item = new ListViewItem(); 
     62            if (instance.Plugin == null) 
     63            { 
     64                item.Text = System.IO.Path.GetFileNameWithoutExtension(instance.Assembly.Location); 
     65                item.SubItems.Add(instance.AssemblyInfo.Author); 
     66            } 
     67            else 
     68            { 
     69                item.Text = instance.Plugin.Name; 
     70                item.SubItems.Add(instance.Plugin.Author); 
     71            } 
     72 
     73            item.Checked = instance.Plugin != null || 
     74                Manager.ManagerLibrary.Instance.Settings.ApprovedPlugins.IndexOf( 
     75                    instance.AssemblyInfo.GUID) != -1; 
    6376            item.SubItems.Add(instance.Assembly.GetName().Version.ToString()); 
    64             item.SubItems.Add(instance.Path); 
     77            item.SubItems.Add(instance.Assembly.Location); 
    6578            item.Tag = instance; 
     79            pluginsManager.Items.Add(item); 
    6680        } 
    6781 
     
    340354 
    341355            EraserSettings settings = new EraserSettings(); 
     356            ManagerSettings managerSettings = ManagerLibrary.Instance.Settings; 
    342357            if (((Language)uiLanguage.SelectedItem).Name != settings.Language) 
    343358            { 
     
    346361                    S._("Eraser"), MessageBoxButtons.OK, MessageBoxIcon.Information); 
    347362            } 
    348             ManagerLibrary.Instance.Settings.DefaultFileErasureMethod = 
     363            managerSettings.DefaultFileErasureMethod = 
    349364                ((ErasureMethod)eraseFilesMethod.SelectedItem).GUID; 
    350             ManagerLibrary.Instance.Settings.DefaultUnusedSpaceErasureMethod = 
     365            managerSettings.DefaultUnusedSpaceErasureMethod = 
    351366                ((ErasureMethod)eraseUnusedMethod.SelectedItem).GUID; 
    352367 
    353368            PRNG newPRNG = (PRNG)erasePRNG.SelectedItem; 
    354             if (newPRNG.GUID != ManagerLibrary.Instance.Settings.ActivePRNG) 
     369            if (newPRNG.GUID != managerSettings.ActivePRNG) 
    355370            { 
    356371                MessageBox.Show(S._("The new randomness data source will only be used when " + 
    357372                    "the next task is run.\nCurrently running tasks will use the old source."), 
    358373                    S._("Eraser"), MessageBoxButtons.OK, MessageBoxIcon.Information); 
    359                 ManagerLibrary.Instance.Settings.ActivePRNG = newPRNG.GUID; 
    360             } 
    361             ManagerLibrary.Instance.Settings.EraseLockedFilesOnRestart = 
    362                 lockedAllow.Checked; 
    363             ManagerLibrary.Instance.Settings.ConfirmEraseOnRestart = 
    364                 lockedConfirm.Checked; 
    365  
     374                managerSettings.ActivePRNG = newPRNG.GUID; 
     375            } 
     376            managerSettings.EraseLockedFilesOnRestart = lockedAllow.Checked; 
     377            managerSettings.ConfirmEraseOnRestart = lockedConfirm.Checked; 
     378 
     379            managerSettings.PlausibleDeniability = plausibleDeniability.Checked; 
    366380            List<string> plausibleDeniabilityFilesList = new List<string>(); 
    367381            foreach (string str in this.plausibleDeniabilityFiles.Items) 
    368382                plausibleDeniabilityFilesList.Add(str); 
    369             ManagerLibrary.Instance.Settings.PlausibleDeniabilityFiles = plausibleDeniabilityFilesList; 
    370  
    371             ManagerLibrary.Instance.Settings.ExecuteMissedTasksImmediately = 
    372                 schedulerMissedImmediate.Checked; 
    373             ManagerLibrary.Instance.Settings.PlausibleDeniability = 
    374                 plausibleDeniability.Checked; 
     383            managerSettings.PlausibleDeniabilityFiles = plausibleDeniabilityFilesList; 
     384 
     385            managerSettings.ExecuteMissedTasksImmediately = schedulerMissedImmediate.Checked; 
     386 
     387            foreach (ListViewItem item in pluginsManager.Items) 
     388            { 
     389                PluginInstance plugin = (PluginInstance)item.Tag; 
     390                if (item.Checked) 
     391                { 
     392                    if (managerSettings.ApprovedPlugins.IndexOf(plugin.AssemblyInfo.GUID) == -1) 
     393                        managerSettings.ApprovedPlugins.Add(plugin.AssemblyInfo.GUID); 
     394                } 
     395                else 
     396                    managerSettings.ApprovedPlugins.Remove(plugin.AssemblyInfo.GUID); 
     397            } 
    375398        } 
    376399    } 
Note: See TracChangeset for help on using the changeset viewer.