Some Eclipse Foundation services are deprecated, or will be soon. Please ensure you've read this important communication.
Bug 329615 - "No secure storage modules found" after removing native secure storage
Summary: "No secure storage modules found" after removing native secure storage
Status: CLOSED WONTFIX
Alias: None
Product: Equinox
Classification: Eclipse Project
Component: Security (show other bugs)
Version: 3.7   Edit
Hardware: PC Windows 7
: P3 normal with 1 vote (vote)
Target Milestone: ---   Edit
Assignee: Security Inbox CLA
QA Contact:
URL:
Whiteboard: stalebug
Keywords:
Depends on:
Blocks:
 
Reported: 2010-11-06 11:45 EDT by Olivier Thomann CLA
Modified: 2020-01-02 03:08 EST (History)
7 users (show)

See Also:


Attachments

Note You need to log in before you can comment on or make changes to this bug.
Description Olivier Thomann CLA 2010-11-06 11:45:26 EDT
Using eclipse.buildId=I20101029-1118 (4.1 build)
java.version=1.6.0_23-ea
java.vendor=Sun Microsystems Inc.
BootLoader constants: OS=win32, ARCH=x86_64, WS=win32, NL=fr_CA
Command-line arguments:  -os win32 -ws win32 -arch x86_64 -console

I got this stack trace once I entered my new password after they have been changed.
org.eclipse.equinox.security.storage.StorageException: No secure storage modules found.
at org.eclipse.equinox.internal.security.storage.PasswordProviderSelector.findStorageModule(PasswordProviderSelector.java:190)
at org.eclipse.equinox.internal.security.storage.SecurePreferencesRoot.getModulePassword(SecurePreferencesRoot.java:231)
at org.eclipse.equinox.internal.security.storage.SecurePreferencesRoot.getPassword(SecurePreferencesRoot.java:224)
at org.eclipse.equinox.internal.security.storage.SecurePreferences.put(SecurePreferences.java:224)
at org.eclipse.equinox.internal.security.storage.SecurePreferencesWrapper.put(SecurePreferencesWrapper.java:110)
at org.eclipse.team.internal.ccvs.core.connection.CVSRepositoryLocation.updateCache(CVSRepositoryLocation.java:1021)
at org.eclipse.team.internal.ccvs.core.connection.CVSRepositoryLocation.updateCache(CVSRepositoryLocation.java:1003)
at org.eclipse.team.internal.ccvs.core.connection.CVSRepositoryLocation.setAllowCaching(CVSRepositoryLocation.java:990)
at org.eclipse.team.internal.ccvs.ssh2.JSchSession$1.update(JSchSession.java:74)
at org.eclipse.jsch.internal.ui.authenticator.WorkbenchUserAuthenticator.promptForUserInfo(WorkbenchUserAuthenticator.java:81)
at org.eclipse.jsch.internal.core.UserInfoImpl.promptSecret(UserInfoImpl.java:86)
at org.eclipse.jsch.internal.core.UserInfoImpl.promptPassword(UserInfoImpl.java:118)
at com.jcraft.jsch.UserAuthPassword.start(UserAuthPassword.java:52)
at com.jcraft.jsch.Session.connect(Session.java:419)
at com.jcraft.jsch.Session.connect(Session.java:150)
at org.eclipse.jsch.internal.core.JSchProvider.connect(JSchProvider.java:87)
at org.eclipse.team.internal.ccvs.ssh2.JSchSession.createSession(JSchSession.java:112)
at org.eclipse.team.internal.ccvs.ssh2.JSchSession.getSession(JSchSession.java:83)
at org.eclipse.team.internal.ccvs.ssh2.CVSSSH2ServerConnection.internalOpen(CVSSSH2ServerConnection.java:134)
at org.eclipse.team.internal.ccvs.ssh2.CVSSSH2ServerConnection.open(CVSSSH2ServerConnection.java:119)
at org.eclipse.team.internal.ccvs.core.connection.Connection.open(Connection.java:132)
at org.eclipse.team.internal.ccvs.core.connection.CVSRepositoryLocation.createConnection(CVSRepositoryLocation.java:545)
at org.eclipse.team.internal.ccvs.core.connection.CVSRepositoryLocation.openConnection(CVSRepositoryLocation.java:806)
at org.eclipse.team.internal.ccvs.core.client.Session.open(Session.java:159)
at org.eclipse.team.internal.ccvs.core.resources.UpdateContentCachingService.cacheFileContents(UpdateContentCachingService.java:224)
at org.eclipse.team.internal.ccvs.core.resources.UpdateContentCachingService.buildRemoteTree(UpdateContentCachingService.java:118)
at org.eclipse.team.internal.ccvs.core.resources.CVSWorkspaceRoot.getRemoteTree(CVSWorkspaceRoot.java:176)
at org.eclipse.team.internal.ccvs.core.syncinfo.CVSResourceVariantTree.fetchVariant(CVSResourceVariantTree.java:78)
at org.eclipse.team.core.variants.AbstractResourceVariantTree.refresh(AbstractResourceVariantTree.java:84)
at org.eclipse.team.internal.ccvs.core.syncinfo.CVSResourceVariantTree.refresh(CVSResourceVariantTree.java:334)
at org.eclipse.team.core.variants.AbstractResourceVariantTree.refresh(AbstractResourceVariantTree.java:54)
at org.eclipse.team.core.variants.ResourceVariantTreeSubscriber.refresh(ResourceVariantTreeSubscriber.java:162)
at org.eclipse.team.core.variants.ResourceVariantTreeSubscriber.refresh(ResourceVariantTreeSubscriber.java:126)
at org.eclipse.team.core.subscribers.Subscriber.refresh(Subscriber.java:466)
at org.eclipse.team.internal.ccvs.core.CVSWorkspaceSubscriber.refreshWithContentFetch(CVSWorkspaceSubscriber.java:434)
at org.eclipse.team.internal.ccvs.ui.mappings.WorkspaceSubscriberContext.refresh(WorkspaceSubscriberContext.java:305)
at org.eclipse.team.core.mapping.provider.SynchronizationContext.refresh(SynchronizationContext.java:109)
at org.eclipse.team.internal.ui.synchronize.RefreshModelParticipantJob.doRefresh(RefreshModelParticipantJob.java:69)
at org.eclipse.team.internal.ui.synchronize.RefreshParticipantJob.run(RefreshParticipantJob.java:309)
at org.eclipse.team.internal.ui.synchronize.RefreshModelParticipantJob.run(RefreshModelParticipantJob.java:117)
at org.eclipse.core.internal.jobs.Worker.run(Worker.java:54)
Comment 1 Olivier Thomann CLA 2010-11-09 13:15:38 EST
For some reason, the security storage doesn't work anymore.
Any idea what could be wrong ?
Comment 2 Oleg Besedin CLA 2010-11-09 13:33:31 EST
I spoke with Olivier and he uses Windows 64bit with 64bit Eclipse and 64 bit JVM. There is no native integration module supplied for this configuration, see bug 226482 .

It is likley that secure storage was created earlier with the 32-bit integartion module; that integartion module is not available in the 64-bit version. Hence the message about the missing module.

*** This bug has been marked as a duplicate of bug 226482 ***
Comment 3 John Arthorne CLA 2010-11-09 14:41:43 EST
Oleg, shouldn't he get the default password provider defined by equinox UI in the case where no platform-specific fragment is found?  Or is this a case where the workspace was created on one architecture, and then moved to a machine with different architecture?
Comment 4 Thomas Watson CLA 2010-11-09 14:46:58 EST
(In reply to comment #3)
> Oleg, shouldn't he get the default password provider defined by equinox UI in
> the case where no platform-specific fragment is found?  Or is this a case where
> the workspace was created on one architecture, and then moved to a machine with
> different architecture?

In this case I thought a 32-bit eclipse was run on a 64-bit arch and then later a 64-bit eclipse was run and it would not work because of a previous run with a 32-bit eclipse install.  But it all happened on the same machine.
Comment 5 John Arthorne CLA 2010-11-09 14:52:32 EST
(In reply to comment #4)
> In this case I thought a 32-bit eclipse was run on a 64-bit arch and then later
> a 64-bit eclipse was run and it would not work because of a previous run with a
> 32-bit eclipse install.  But it all happened on the same machine.

Ok, whether its the same physical machine isn't the main issue. The issue is that the same workspace was used with a different architectures. I just wanted to make sure that the ugly error in the log isn't the default behaviour on platforms with no native secure storage. If you only get that error when switching architectures I'm not too worried about it (in this case the stored settings have effectively been lost so an error in the log seems legitimate).
Comment 6 John Arthorne CLA 2010-12-01 17:11:13 EST
I'm going to reopen this because we should handle Olivier's case more gracefully. The general problem case is:

1) Run with a native secure storage provider
2) native provider is uninstalled
3) Startup again, it tries to consult the native provider and throws this exception.

Ideally it should just fall back to the default storage provider automatically.
Comment 7 Oleg Besedin CLA 2010-12-02 09:02:15 EST
(In reply to comment #6)
> Ideally it should just fall back to the default storage provider automatically.

The message comes up because some code requests the encrypted data. The data was encrypted with the missing provider. There is no way to decrypt that data without the provider that was used to encrypt it.
Comment 8 John Arthorne CLA 2010-12-02 16:13:39 EST
(In reply to comment #7)
> The message comes up because some code requests the encrypted data. The data
> was encrypted with the missing provider. There is no way to decrypt that data
> without the provider that was used to encrypt it.

From the stack it looks like an attempt to store data, rather than retrieve it. I agree a retrieval request should fail in this case, so I would expect a workflow like:

CVS attempts to retrieve the stored password with the native provider
This fails, so they prompt the user to enter a password
CVS then stores the password, which uses the default provider

The current behaviour appears to be that once a user gets into this state, you can never again store passwords.
Comment 9 Michael Meß CLA 2012-06-11 02:14:21 EDT
The problem still occurs with eclipse.buildId=M20120208-0800
java.version=1.6.0_30
java.vendor=Sun Microsystems Inc.
BootLoader constants: OS=linux, ARCH=x86, WS=gtk, NL=en_DE
Framework arguments:  -product org.eclipse.epp.package.jee.product -keyring /home/michael/.eclipse-keyring/.keyring
Command-line arguments:  -os linux -ws gtk -arch x86 -product org.eclipse.epp.package.jee.product -keyring /home/michael/.eclipse-keyring/.keyring


Could not store authorization credentials

org.eclipse.equinox.security.storage.StorageException: No secure storage modules found.
	at org.eclipse.equinox.internal.security.storage.PasswordProviderSelector.findStorageModule(PasswordProviderSelector.java:190)
	at org.eclipse.equinox.internal.security.storage.SecurePreferencesRoot.getModulePassword(SecurePreferencesRoot.java:231)
	at org.eclipse.equinox.internal.security.storage.SecurePreferencesRoot.getPassword(SecurePreferencesRoot.java:224)
	at org.eclipse.equinox.internal.security.storage.SecurePreferences.put(SecurePreferences.java:224)
	at org.eclipse.equinox.internal.security.storage.SecurePreferencesWrapper.put(SecurePreferencesWrapper.java:110)
	at org.eclipse.mylyn.tasks.core.TaskRepository.addAuthInfo(TaskRepository.java:264)
	at org.eclipse.mylyn.tasks.core.TaskRepository.setCredentials(TaskRepository.java:758)
	at com.atlassian.connector.eclipse.internal.jira.ui.wizards.JiraRepositorySettingsPage.validateSettings(JiraRepositorySettingsPage.java:452)
	at org.eclipse.mylyn.tasks.ui.wizards.TaskRepositoryWizardDialog.handleExtraButtonPressed(TaskRepositoryWizardDialog.java:96)
	at org.eclipse.mylyn.commons.ui.dialogs.EnhancedWizardDialog.buttonPressed(EnhancedWizardDialog.java:98)
	at org.eclipse.jface.dialogs.Dialog$2.widgetSelected(Dialog.java:624)
	at org.eclipse.swt.widgets.TypedListener.handleEvent(TypedListener.java:240)
	at org.eclipse.swt.widgets.EventTable.sendEvent(EventTable.java:84)
	at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:1258)
	at org.eclipse.swt.widgets.Display.runDeferredEvents(Display.java:3588)
	at org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:3209)
	at org.eclipse.jface.window.Window.runEventLoop(Window.java:825)
	at org.eclipse.jface.window.Window.open(Window.java:801)
	at org.eclipse.mylyn.tasks.ui.TasksUiUtil.openEditRepositoryWizard(TasksUiUtil.java:206)
	at org.eclipse.mylyn.internal.tasks.ui.dialogs.TaskRepositoryCredentialsDialog$1.widgetSelected(TaskRepositoryCredentialsDialog.java:105)
	at org.eclipse.swt.widgets.TypedListener.handleEvent(TypedListener.java:240)
	at org.eclipse.swt.widgets.EventTable.sendEvent(EventTable.java:84)
	at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:1258)
	at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:1282)
	at org.eclipse.swt.widgets.Widget.sendSelectionEvent(Widget.java:1396)
	at org.eclipse.swt.widgets.Link.gtk_button_release_event(Link.java:339)
	at org.eclipse.swt.widgets.Widget.windowProc(Widget.java:1732)
	at org.eclipse.swt.widgets.Control.windowProc(Control.java:5016)
	at org.eclipse.swt.widgets.Display.windowProc(Display.java:4408)
	at org.eclipse.swt.internal.gtk.OS._gtk_main_do_event(Native Method)
	at org.eclipse.swt.internal.gtk.OS.gtk_main_do_event(OS.java:8422)
	at org.eclipse.swt.widgets.Display.eventProc(Display.java:1245)
	at org.eclipse.swt.internal.gtk.OS._g_main_context_iteration(Native Method)
	at org.eclipse.swt.internal.gtk.OS.g_main_context_iteration(OS.java:2276)
	at org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:3207)
	at org.eclipse.jface.window.Window.runEventLoop(Window.java:825)
	at org.eclipse.jface.window.Window.open(Window.java:801)
	at org.eclipse.mylyn.internal.tasks.ui.TaskRepositoryLocationUi$PasswordRunner.run(TaskRepositoryLocationUi.java:114)
	at org.eclipse.ui.internal.UILockListener.doPendingWork(UILockListener.java:164)
	at org.eclipse.ui.internal.UISynchronizer$3.run(UISynchronizer.java:158)
	at org.eclipse.swt.widgets.RunnableLock.run(RunnableLock.java:35)
	at org.eclipse.swt.widgets.Synchronizer.runAsyncMessages(Synchronizer.java:135)
	at org.eclipse.swt.widgets.Display.runAsyncMessages(Display.java:3563)
	at org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:3212)
	at org.eclipse.ui.internal.Workbench.runEventLoop(Workbench.java:2701)
	at org.eclipse.ui.internal.Workbench.runUI(Workbench.java:2665)
	at org.eclipse.ui.internal.Workbench.access$4(Workbench.java:2499)
	at org.eclipse.ui.internal.Workbench$7.run(Workbench.java:679)
	at org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:332)
	at org.eclipse.ui.internal.Workbench.createAndRunWorkbench(Workbench.java:668)
	at org.eclipse.ui.PlatformUI.createAndRunWorkbench(PlatformUI.java:149)
	at org.eclipse.ui.internal.ide.application.IDEApplication.start(IDEApplication.java:123)
	at org.eclipse.equinox.internal.app.EclipseAppHandle.run(EclipseAppHandle.java:196)
	at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.runApplication(EclipseAppLauncher.java:110)
	at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.start(EclipseAppLauncher.java:79)
	at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:344)
	at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:179)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
	at java.lang.reflect.Method.invoke(Method.java:597)
	at org.eclipse.equinox.launcher.Main.invokeFramework(Main.java:622)
	at org.eclipse.equinox.launcher.Main.basicRun(Main.java:577)
	at org.eclipse.equinox.launcher.Main.run(Main.java:1410)
Comment 10 Mark Lehky CLA 2012-06-11 22:15:36 EDT
Hello.

I have been bounced around from: https://bugs.eclipse.org/bugs/show_bug.cgi?id=378583
to: https://studio.atlassian.com/browse/PLE-1356
now to here. :(

I have installed "Eclipse for Testers" on my 64b Linux machine, installed the jira connector. Created a new workspace. After trying to connect to jira I get the same error as Olivier. I have not moved any workspace between any machines, everything is on the same one machine.
Is this the same problem?
Comment 11 Eclipse Genie CLA 2020-01-02 03:08:28 EST
This bug hasn't had any activity in quite some time. Maybe the problem got resolved, was a duplicate of something else, or became less pressing for some reason - or maybe it's still relevant but just hasn't been looked at yet.

If you have further information on the current state of the bug, please add it. The information can be, for example, that the problem still occurs, that you still want the feature, that more information is needed, or that the bug is (for whatever reason) no longer relevant.

--
The automated Eclipse Genie.