Some Eclipse Foundation services are deprecated, or will be soon. Please ensure you've read this important communication.

Bug 527772

Summary: Unable to locate secure storage module error in newly installed Oxygen
Product: [Eclipse Project] Equinox Reporter: Hernan Gonzalez <hjg.com.ar>
Component: SecurityAssignee: Security Inbox <equinox.security-inbox>
Status: CLOSED WONTFIX QA Contact:
Severity: normal    
Priority: P3 CC: akurtakov, andy_2639, Ed.Merks, hjg.com.ar, tjwatson
Version: unspecified   
Target Milestone: ---   
Hardware: PC   
OS: Windows 7   
Whiteboard: stalebug

Description Hernan Gonzalez CLA 2017-11-26 22:33:49 EST
I download a fresh new version of latest Eclipse from eclipse.org site
(Oxygen 4.7.1a , Eclipse IDE for Java Developers, Win 64)
eclipse-java-oxygen-1a-win32-x86_64.zip 
SHA1: 4488981c392391868d8d1076611650538af46b2a

I uncompress it in my Win7-64, with JRE Java 8 121, I open it on a new clean workspace. And on start (each time) I get six error messages "Unable to locate secure storage module"

Error detail follows

===================================================

eclipse.buildId=4.7.1.M20171009-0410
java.version=1.8.0_121
java.vendor=Oracle Corporation
BootLoader constants: OS=win32, ARCH=x86_64, WS=win32, NL=en_US
Framework arguments:  -product org.eclipse.epp.package.java.product
Command-line arguments:  -os win32 -ws win32 -arch x86_64 -product org.eclipse.epp.package.java.product

org.eclipse.core.net
Error
Mon Nov 27 00:20:58 ART 2017
Unable to locate secure storage module (org.eclipse.equinox.security.windowspasswordprovider).

org.eclipse.equinox.security.storage.StorageException: Unable to locate secure storage module (org.eclipse.equinox.security.windowspasswordprovider).
	at org.eclipse.equinox.internal.security.storage.PasswordProviderSelector.findStorageModule(PasswordProviderSelector.java:190)
	at org.eclipse.equinox.internal.security.storage.SecurePreferencesRoot.getModulePassword(SecurePreferencesRoot.java:233)
	at org.eclipse.equinox.internal.security.storage.SecurePreferencesRoot.getPassword(SecurePreferencesRoot.java:226)
	at org.eclipse.equinox.internal.security.storage.SecurePreferences.get(SecurePreferences.java:264)
	at org.eclipse.equinox.internal.security.storage.SecurePreferencesWrapper.get(SecurePreferencesWrapper.java:106)
	at org.eclipse.core.internal.net.ProxyType.loadProxyAuth(ProxyType.java:537)
	at org.eclipse.core.internal.net.ProxyType.createProxyData(ProxyType.java:138)
	at org.eclipse.core.internal.net.ProxyType.getProxyData(ProxyType.java:127)
	at org.eclipse.core.internal.net.ProxyType.initialize(ProxyType.java:517)
	at org.eclipse.core.internal.net.ProxyManager.initialize(ProxyManager.java:264)
	at org.eclipse.core.internal.net.Activator.start(Activator.java:175)
	at org.eclipse.osgi.internal.framework.BundleContextImpl$3.run(BundleContextImpl.java:779)
	at org.eclipse.osgi.internal.framework.BundleContextImpl$3.run(BundleContextImpl.java:1)
	at java.security.AccessController.doPrivileged(Native Method)
	at org.eclipse.osgi.internal.framework.BundleContextImpl.startActivator(BundleContextImpl.java:772)
	at org.eclipse.osgi.internal.framework.BundleContextImpl.start(BundleContextImpl.java:729)
	at org.eclipse.osgi.internal.framework.EquinoxBundle.startWorker0(EquinoxBundle.java:933)
	at org.eclipse.osgi.internal.framework.EquinoxBundle$EquinoxModule.startWorker(EquinoxBundle.java:309)
	at org.eclipse.osgi.container.Module.doStart(Module.java:581)
	at org.eclipse.osgi.container.Module.start(Module.java:449)
	at org.eclipse.osgi.framework.util.SecureAction.start(SecureAction.java:468)
	at org.eclipse.osgi.internal.hooks.EclipseLazyStarter.postFindLocalClass(EclipseLazyStarter.java:103)
	at org.eclipse.osgi.internal.loader.classpath.ClasspathManager.findLocalClass(ClasspathManager.java:529)
	at org.eclipse.osgi.internal.loader.ModuleClassLoader.findLocalClass(ModuleClassLoader.java:328)
	at org.eclipse.osgi.internal.loader.BundleLoader.findLocalClass(BundleLoader.java:368)
	at org.eclipse.osgi.internal.loader.sources.SingleSourcePackage.loadClass(SingleSourcePackage.java:36)
	at org.eclipse.osgi.internal.loader.BundleLoader.findClassInternal(BundleLoader.java:442)
	at org.eclipse.osgi.internal.loader.BundleLoader.findClass(BundleLoader.java:395)
	at org.eclipse.osgi.internal.loader.BundleLoader.findClass(BundleLoader.java:387)
	at org.eclipse.osgi.internal.loader.ModuleClassLoader.loadClass(ModuleClassLoader.java:150)
	at java.lang.ClassLoader.loadClass(Unknown Source)
	at org.eclipse.jsch.internal.core.JSchCorePlugin.start(JSchCorePlugin.java:243)
	at org.eclipse.osgi.internal.framework.BundleContextImpl$3.run(BundleContextImpl.java:779)
	at org.eclipse.osgi.internal.framework.BundleContextImpl$3.run(BundleContextImpl.java:1)
	at java.security.AccessController.doPrivileged(Native Method)
	at org.eclipse.osgi.internal.framework.BundleContextImpl.startActivator(BundleContextImpl.java:772)
	at org.eclipse.osgi.internal.framework.BundleContextImpl.start(BundleContextImpl.java:729)
	at org.eclipse.osgi.internal.framework.EquinoxBundle.startWorker0(EquinoxBundle.java:933)
	at org.eclipse.osgi.internal.framework.EquinoxBundle$EquinoxModule.startWorker(EquinoxBundle.java:309)
	at org.eclipse.osgi.container.Module.doStart(Module.java:581)
	at org.eclipse.osgi.container.Module.start(Module.java:449)
	at org.eclipse.osgi.framework.util.SecureAction.start(SecureAction.java:468)
	at org.eclipse.osgi.internal.hooks.EclipseLazyStarter.postFindLocalClass(EclipseLazyStarter.java:103)
	at org.eclipse.osgi.internal.loader.classpath.ClasspathManager.findLocalClass(ClasspathManager.java:529)
	at org.eclipse.osgi.internal.loader.ModuleClassLoader.findLocalClass(ModuleClassLoader.java:328)
	at org.eclipse.osgi.internal.loader.BundleLoader.findLocalClass(BundleLoader.java:368)
	at org.eclipse.osgi.internal.loader.sources.SingleSourcePackage.loadClass(SingleSourcePackage.java:36)
	at org.eclipse.osgi.internal.loader.BundleLoader.findClassInternal(BundleLoader.java:430)
	at org.eclipse.osgi.internal.loader.BundleLoader.findClass(BundleLoader.java:395)
	at org.eclipse.osgi.internal.loader.BundleLoader.findClass(BundleLoader.java:387)
	at org.eclipse.osgi.internal.loader.ModuleClassLoader.loadClass(ModuleClassLoader.java:150)
	at java.lang.ClassLoader.loadClass(Unknown Source)
	at org.eclipse.egit.core.Activator.setupSSH(Activator.java:212)
	at org.eclipse.egit.core.Activator.start(Activator.java:186)
	at org.eclipse.osgi.internal.framework.BundleContextImpl$3.run(BundleContextImpl.java:779)
	at org.eclipse.osgi.internal.framework.BundleContextImpl$3.run(BundleContextImpl.java:1)
	at java.security.AccessController.doPrivileged(Native Method)
	at org.eclipse.osgi.internal.framework.BundleContextImpl.startActivator(BundleContextImpl.java:772)
	at org.eclipse.osgi.internal.framework.BundleContextImpl.start(BundleContextImpl.java:729)
	at org.eclipse.osgi.internal.framework.EquinoxBundle.startWorker0(EquinoxBundle.java:933)
	at org.eclipse.osgi.internal.framework.EquinoxBundle$EquinoxModule.startWorker(EquinoxBundle.java:309)
	at org.eclipse.osgi.container.Module.doStart(Module.java:581)
	at org.eclipse.osgi.container.Module.start(Module.java:449)
	at org.eclipse.osgi.framework.util.SecureAction.start(SecureAction.java:468)
	at org.eclipse.osgi.internal.hooks.EclipseLazyStarter.postFindLocalClass(EclipseLazyStarter.java:103)
	at org.eclipse.osgi.internal.loader.classpath.ClasspathManager.findLocalClass(ClasspathManager.java:529)
	at org.eclipse.osgi.internal.loader.ModuleClassLoader.findLocalClass(ModuleClassLoader.java:328)
	at org.eclipse.osgi.internal.loader.BundleLoader.findLocalClass(BundleLoader.java:368)
	at org.eclipse.osgi.internal.loader.sources.SingleSourcePackage.loadClass(SingleSourcePackage.java:36)
	at org.eclipse.osgi.internal.loader.BundleLoader.findClassInternal(BundleLoader.java:430)
	at org.eclipse.osgi.internal.loader.BundleLoader.findClass(BundleLoader.java:395)
	at org.eclipse.osgi.internal.loader.BundleLoader.findClass(BundleLoader.java:387)
	at org.eclipse.osgi.internal.loader.ModuleClassLoader.loadClass(ModuleClassLoader.java:150)
	at java.lang.ClassLoader.loadClass(Unknown Source)
	at org.eclipse.egit.ui.Activator$RepositoryChangeScanner.<init>(Activator.java:607)
	at org.eclipse.egit.ui.Activator.setupRepoChangeScanner(Activator.java:708)
	at org.eclipse.egit.ui.Activator.start(Activator.java:306)
	at org.eclipse.osgi.internal.framework.BundleContextImpl$3.run(BundleContextImpl.java:779)
	at org.eclipse.osgi.internal.framework.BundleContextImpl$3.run(BundleContextImpl.java:1)
	at java.security.AccessController.doPrivileged(Native Method)
	at org.eclipse.osgi.internal.framework.BundleContextImpl.startActivator(BundleContextImpl.java:772)
	at org.eclipse.osgi.internal.framework.BundleContextImpl.start(BundleContextImpl.java:729)
	at org.eclipse.osgi.internal.framework.EquinoxBundle.startWorker0(EquinoxBundle.java:933)
	at org.eclipse.osgi.internal.framework.EquinoxBundle$EquinoxModule.startWorker(EquinoxBundle.java:309)
	at org.eclipse.osgi.container.Module.doStart(Module.java:581)
	at org.eclipse.osgi.container.Module.start(Module.java:449)
	at org.eclipse.osgi.framework.util.SecureAction.start(SecureAction.java:468)
	at org.eclipse.osgi.internal.hooks.EclipseLazyStarter.postFindLocalClass(EclipseLazyStarter.java:103)
	at org.eclipse.osgi.internal.loader.classpath.ClasspathManager.findLocalClass(ClasspathManager.java:529)
	at org.eclipse.osgi.internal.loader.ModuleClassLoader.findLocalClass(ModuleClassLoader.java:328)
	at org.eclipse.osgi.internal.loader.BundleLoader.findLocalClass(BundleLoader.java:368)
	at org.eclipse.osgi.internal.loader.BundleLoader.findClassInternal(BundleLoader.java:446)
	at org.eclipse.osgi.internal.loader.BundleLoader.findClass(BundleLoader.java:395)
	at org.eclipse.osgi.internal.loader.BundleLoader.findClass(BundleLoader.java:387)
	at org.eclipse.osgi.internal.loader.ModuleClassLoader.loadClass(ModuleClassLoader.java:150)
	at java.lang.ClassLoader.loadClass(Unknown Source)
	at org.eclipse.osgi.internal.framework.EquinoxBundle.loadClass(EquinoxBundle.java:564)
	at org.eclipse.core.internal.registry.osgi.RegistryStrategyOSGI.createExecutableExtension(RegistryStrategyOSGI.java:174)
	at org.eclipse.core.internal.registry.ExtensionRegistry.createExecutableExtension(ExtensionRegistry.java:905)
	at org.eclipse.core.internal.registry.ConfigurationElement.createExecutableExtension(ConfigurationElement.java:243)
	at org.eclipse.core.internal.registry.ConfigurationElementHandle.createExecutableExtension(ConfigurationElementHandle.java:55)
	at org.eclipse.ui.internal.services.WorkbenchServiceRegistry.getSourceProviders(WorkbenchServiceRegistry.java:174)
	at org.eclipse.ui.internal.services.SourceProviderService.readRegistry(SourceProviderService.java:104)
	at org.eclipse.ui.internal.Workbench$34.runWithException(Workbench.java:2367)
	at org.eclipse.ui.internal.StartupThreading$StartupRunnable.run(StartupThreading.java:32)
	at org.eclipse.swt.widgets.Synchronizer.syncExec(Synchronizer.java:233)
	at org.eclipse.ui.internal.UISynchronizer.syncExec(UISynchronizer.java:144)
	at org.eclipse.swt.widgets.Display.syncExec(Display.java:4889)
	at org.eclipse.ui.internal.StartupThreading.runWithoutExceptions(StartupThreading.java:95)
	at org.eclipse.ui.internal.Workbench.initializeDefaultServices(Workbench.java:2362)
	at org.eclipse.ui.internal.Workbench.init(Workbench.java:1641)
	at org.eclipse.ui.internal.Workbench.runUI(Workbench.java:2848)
	at org.eclipse.ui.internal.Workbench.lambda$3(Workbench.java:667)
	at org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:336)
	at org.eclipse.ui.internal.Workbench.createAndRunWorkbench(Workbench.java:594)
	at org.eclipse.ui.PlatformUI.createAndRunWorkbench(PlatformUI.java:148)
	at org.eclipse.ui.internal.ide.application.IDEApplication.start(IDEApplication.java:151)
	at org.eclipse.equinox.internal.app.EclipseAppHandle.run(EclipseAppHandle.java:196)
	at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.runApplication(EclipseAppLauncher.java:134)
	at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.start(EclipseAppLauncher.java:104)
	at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:388)
	at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:243)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
	at java.lang.reflect.Method.invoke(Unknown Source)
	at org.eclipse.equinox.launcher.Main.invokeFramework(Main.java:653)
	at org.eclipse.equinox.launcher.Main.basicRun(Main.java:590)
	at org.eclipse.equinox.launcher.Main.run(Main.java:1499)
Comment 1 Hernan Gonzalez CLA 2018-05-27 23:02:59 EDT
Problem also present with latest Oxygen 3a (4.7.3a)

Also:
I use Eclipse for RCP coding, and the error also appears when I "launch Eclipse application" from my *.product view. 
I've checked that the relevant org.eclipse.equinox.security.*
( org.eclipse.equinox.security.win32.x86_64 ) is included in the dependencies.
Comment 2 Ed Merks CLA 2018-05-28 02:45:53 EDT
Does the file <home>/.eclipse/org.eclipse.equinox.security/secure_storage exist in the file system?  If it does exist, perhaps it's corrupt in some way and you could rename/remove it so that a new version is created.
Comment 3 Hernan Gonzalez CLA 2018-05-28 09:08:46 EDT
Thanks for the answer.
Yes, after removing the secure_storage file the error was gone.

Actually, the file was not regenerated (I wonder which action could I do to trigger its creation?)

Could it be that a secure_storage generated by some Eclipse installation is incompatible with another Eclipse in the same machine-user? 

I was practically unaware of the existence <home>/.eclipse/ directory and now I'm worried: does this mechanism works well if I'm running several different Eclipse instances (32 and 64 bits) in the same machine?
Shouldn't we rather have something like <home>/.eclipse/<eclipse instance id>/ ?

And how does this works with a RCP product?

I could post my secure_storage file if this helps.
Comment 4 Ed Merks CLA 2018-05-28 09:19:14 EDT
(In reply to Hernan Gonzalez from comment #3)
> Thanks for the answer.
> Yes, after removing the secure_storage file the error was gone.
> 

That was my suspicion, i.e., that it can't read the file but doesn't explicitly log that as the failure.

> Actually, the file was not regenerated (I wonder which action could I do to
> trigger its creation?)
> 

It will only be generated if you're actually prompted for a password and you provide one and you choose to save it in secure storage.  Note there is a preference Under General -> Security -> Secure Storage.

> Could it be that a secure_storage generated by some Eclipse installation is
> incompatible with another Eclipse in the same machine-user? 
> 

No that's not likely.  This representation is highly stable and has been around for a very long time.

> I was practically unaware of the existence <home>/.eclipse/ directory and
> now I'm worried: does this mechanism works well if I'm running several
> different Eclipse instances (32 and 64 bits) in the same machine?

It's a good question about 32/64 bit. I can't really answer that.  Someone with deeper technical knowledge would need to answer that.

The only problem with several Eclipse instances at the same time is that one might overwrite the passwords already stored by another application.  There's generally a popup dialog when that would happen.  It's kind of annoying.

> Shouldn't we rather have something like <home>/.eclipse/<eclipse instance
> id>/ ?
> 

No, because then you'd need to provide the password again for every installation you ever create.  If you only have one or two, that wouldn't be a big deal, but I'm working on Oomph and I have literally hundreds...

> And how does this works with a RCP product?
> 

The same way.

> I could post my secure_storage file if this helps.

No, sharing files containing passwords is not a good idea.
Comment 5 Hernan Gonzalez CLA 2018-05-28 09:21:02 EDT
Yes, I could trigger the creation of a secure_storage file from a Eclipse 4.5.2 (32 bits) instance (recipe: go to Windows->Preferences->Network connections and set Active Provider Manual and create some HTTP proxy entry with password)

I closed that Eclipse and open my new Eclipse (4.7.3a, 64 bits) and the
"org.eclipse.equinox.security.storage.StorageException: Unable to locate secure storage module" is thrown.

So, it seems that the <home>/.eclipse/ mechanism is not robust in regard to several Eclipse instances running in the same machine/user (at least for this secure_storage file).
Comment 6 Ed Merks CLA 2018-05-28 09:52:22 EDT
(In reply to Hernan Gonzalez from comment #5)
> Yes, I could trigger the creation of a secure_storage file from a Eclipse
> 4.5.2 (32 bits) instance (recipe: go to Windows->Preferences->Network
> connections and set Active Provider Manual and create some HTTP proxy entry
> with password)
> 
> I closed that Eclipse and open my new Eclipse (4.7.3a, 64 bits) and the
> "org.eclipse.equinox.security.storage.StorageException: Unable to locate
> secure storage module" is thrown.
> 
> So, it seems that the <home>/.eclipse/ mechanism is not robust in regard to
> several Eclipse instances running in the same machine/user (at least for
> this secure_storage file).

I think this conclusion is too general. I.e., I do this (run multiple Eclipse instances) all the time without a problem (other than overwriting of the secure storage), but I don't run both 32 bit applications and 64 bit applications.

If you do things in the reverse order, i.e., run the 64 bit application first, saving a password, does the 32 bit application then manifest the problem with not being able to use the secure storage.  Certainly if the format of the file is affected by the bitness of the application, there should be one file per bitness...
Comment 7 Hernan Gonzalez CLA 2018-05-28 10:07:22 EDT

Here the secure_storage files generated with Eclipse 32/64 bits, with sensitive information masked with *** 

32 bits:

org.eclipse.equinox.security.preferences.version=1
org.eclipse.equinox.security.preferences.cipher=PBEWithMD5AndDES
org.eclipse.equinox.security.preferences.keyFactory=PBEWithMD5AndDES
/org.eclipse.equinox.secure.storage/windows/encryptedPassword=\t,***
/org.eclipse.equinox.secure.storage/verification/org.eclipse.equinox.security.windowspasswordprovider=org.eclipse.equinox.security.windowspasswordprovider\t***
/org.eclipse.core.net.proxy.auth/HTTP/user=org.eclipse.equinox.security.windowspasswordprovider\t***
/org.eclipse.core.net.proxy.auth/HTTP/pass=org.eclipse.equinox.security.windowspasswordprovider\t***

64 bits:

org.eclipse.equinox.security.preferences.version=1
org.eclipse.equinox.security.preferences.cipher=PBEWithMD5AndDES
org.eclipse.equinox.security.preferences.keyFactory=PBEWithMD5AndDES
/org.eclipse.equinox.secure.storage/windows64/encryptedPassword=\t***
/org.eclipse.equinox.secure.storage/verification/org.eclipse.equinox.security.windowspasswordprovider64bit=org.eclipse.equinox.security.windowspasswordprovider64bit\t***
/org.eclipse.core.net.proxy.auth/HTTP/user=org.eclipse.equinox.security.windowspasswordprovider64bit\t***
/org.eclipse.core.net.proxy.auth/HTTP/pass=org.eclipse.equinox.security.windowspasswordprovider64bit\t***

It seems quite clear that they are incompatible, each one specifies a concrete (32/64 bits) provider, and when it's not found an exception is thrown.


> I think this conclusion is too general.

Yes, I agree with that.
Comment 8 Ed Merks CLA 2018-05-28 10:29:58 EDT
I'll try to move this to Equinox.
Comment 9 Ed Merks CLA 2018-05-28 10:45:08 EDT
As far as being a properties file, it should be possible for both bitness versions to coexist in that file.

If you manually copied the two lines (hard to see with the wrapping):

/org.eclipse.equinox.secure.storage/verification/org.eclipse.equinox.security.windowspasswordprovider64bit=...
/org.eclipse.equinox.secure.storage/windows64/encryptedPassword=...

from the 64 bit file to the 32 bit file (or vice versa) the two lines from the 32 bit to the 64 bit:

/org.eclipse.equinox.secure.storage/verification/org.eclipse.equinox.security.windowspasswordprovider=...
/org.eclipse.equinox.secure.storage/windows/encryptedPassword=...

Does that fix the problem in both bitness applications?

I.e., if Equinox's security framework properly created the provider would that actually fix the problem.

The Equinox team will need to comment on this problem because they are the experts...
Comment 10 Hernan Gonzalez CLA 2018-05-28 11:53:16 EDT
> As far as being a properties file, it should be possible for both bitness versions to coexist in that file.

I guess so. But I also guess that, once your (say)  Eclipse 64b has written the property 

/org.eclipse.core.net.proxy.auth/HTTP/user=org.eclipse.equinox.security.windowspasswordprovider64bit\t***

... then, even if you have both (32/64) entries defined

/org.eclipse.equinox.secure.storage/verification/org.eclipse.equinox.security.windowspasswordprovider64bit=...
/org.eclipse.equinox.secure.storage/windows64/encryptedPassword=...
/org.eclipse.equinox.secure.storage/verification/org.eclipse.equinox.security.windowspasswordprovider=...

... still you'll have the problem when you open with Eclipse 32b, because it will try to locate the org.eclipse.equinox.security.windowspasswordprovider64bit and that plugin will not exist.

At most, a warning should be emitted, I think, but not an exception (several, actually).
Comment 11 Ed Merks CLA 2018-05-28 12:00:45 EDT
It would be great if you could try it, then we would not need to guess or speculate about what would and wouldn't work and about what problems it might introduce.  The implementation might be such that the fragment looks for its own properties, not that all properties are considered up front, so this might be a suitable workaround for the time being...

Hopefully someone from the Equinox team will add some insight.
Comment 12 Hernan Gonzalez CLA 2018-05-28 12:48:01 EDT
Yes, the results are these:

My secure_storage (*** is a mask, OEE = org.eclipse.equinox , line numbers prepended )

1 OEE.security.preferences.version=1
2 OEE.security.preferences.cipher=PBEWithMD5AndDES
3 OEE.security.preferences.keyFactory=PBEWithMD5AndDES
4 /OEE.secure.storage/windows/encryptedPassword=\t***
5 /OEE.secure.storage/windows64/encryptedPassword=\t***
6 /OEE.secure.storage/verification/OEE.security.windowspasswordprovider=OEE.security.windowspasswordprovider\t***
7 /OEE.secure.storage/verification/OEE.security.windowspasswordprovider64bit=OEE.security.windowspasswordprovider64bit\t***
8  #/org.eclipse.core.net.proxy.auth/HTTP/user=OEE.security.windowspasswordprovider\t***
9  #/org.eclipse.core.net.proxy.auth/HTTP/pass=OEE.security.windowspasswordprovider\t***
10 /org.eclipse.core.net.proxy.auth/HTTP/user=OEE.security.windowspasswordprovider64bit\t***
11 /org.eclipse.core.net.proxy.auth/HTTP/pass=OEE.security.windowspasswordprovider64bit\t***

In this configuration it opens ok in Eclipse 64b, it throws Exception in Eclipse 32b.
Viceversa if I comment 10,11 and uncomment 8,9.
No errors if I comment 8,9,10,11.
Comment 13 Ed Merks CLA 2018-05-29 02:09:14 EDT
Thanks for the detailed analysis.  I think it's fair to conclude from this that a single password file for 64 bit and 32 bit applications just don't work, at least not currently. Either the framework should use two bitness-specific files, or it should tolerate the union of the two sets of properties...
Comment 14 Ed Merks CLA 2018-06-12 09:17:54 EDT
I'm starting to wonder if anyone monitors this inbox.  Some sign of life would be awfully nice.
Comment 15 Thomas Watson CLA 2018-06-12 10:38:44 EDT
(In reply to Ed Merks from comment #14)
> I'm starting to wonder if anyone monitors this inbox.  Some sign of life
> would be awfully nice.

Hmmm, I see this message now, but didn't see all the past ones.  Sorry.  I am not an expert in this code so cannot immediately comment on why it is behaving this way.  Seems like someone should have a closer look and fix this ... contributions welcome.
Comment 16 Ed Merks CLA 2018-06-12 10:43:28 EDT
I guess there are not experts left, right?

Maybe I'll have some time to look at this after Photon is out the door, but it's not a big problem for me personally of course (and p2 has many more problems that could use attention and would have bigger impact for more users).
Comment 17 Alexander Kurtakov CLA 2019-02-07 04:06:52 EST
Is anyone looking into this or target should be removed?
Comment 18 Ed Merks CLA 2019-02-07 04:41:14 EST
I haven't the time and likely won't for quite a while.
Comment 19 Alexander Kurtakov CLA 2019-02-07 04:45:52 EST
Removed target platform as per previous comment.
Comment 20 Andreas Loth CLA 2019-06-25 11:23:31 EDT
https://bugs.eclipse.org/bugs/show_bug.cgi?id=355086 also has the problem of incompatible password providers for 32/64 bit Windows.

In https://bugs.eclipse.org/bugs/show_bug.cgi?id=355086#c6 I describe that this seems to be a bit artificial because actually the stored data is compatible but just the different naming of the password providers causes the problem.
Comment 21 Eclipse Genie CLA 2021-06-15 15:56:29 EDT
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. As such, we're closing this bug.

If you have further information on the current state of the bug, please add it and reopen this bug. 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.