-
Bug
-
Resolution: Fixed
-
P2
-
6
-
b27
-
generic
-
generic
-
Verified
The methods Configuration.getInstance(...) and Configuration.getConfiguration() does not recognize file which path or uri contains spaces. The following code sample throw exceptions and passes if use file path without spaces.
The file 'policyfile' exists and is empty.
--------------------------------------------------------------------------------
import java.io.File;
import java.net.URI;
import java.security.URIParameter;
import javax.security.auth.login.Configuration;
public class authLoginMinitest {
public static void main(String[] args) throws Exception {
final String defaultType = "JavaLoginConfig";
final String filename = "file:///c:/name%20with%20spaces/policyfile";
final URI uri = new URI(filename);
System.out.println("file exists: " + new File(uri).exists());
System.out.println("file name: " + new File(uri));
try {
Configuration.getInstance("JavaLoginConfig", new URIParameter(uri));
} catch (Exception ex) {
ex.printStackTrace();
}
try {
System.setProperty("java.security.auth.login.config", filename);
Configuration.getConfiguration();
} catch (Exception ex) {
ex.printStackTrace();
}
}
}
--------------------------------------------------------------------------------
program output:
--------------------------------------------------------------------------------
java.security.NoSuchAlgorithmException: Error constructing implementation (algorithm: JavaLoginConfig, provider: SUN, class: sun.security.provider.ConfigSpiFile)
at java.security.Provider$Service.newInstance(Provider.java:1240)
at sun.security.jca.GetInstance.getInstance(GetInstance.java:227)
at sun.security.jca.GetInstance.getInstance(GetInstance.java:174)
at javax.security.auth.login.Configuration.getInstance(Configuration.java:333)
at authLoginMinitest.main(authLoginMinitest.java:15)
Caused by: java.io.FileNotFoundException: c:\name%20with%20spaces\policyfile (The system cannot find the path specified)
at java.io.FileInputStream.open(Native Method)
at java.io.FileInputStream.<init>(FileInputStream.java:106)
at java.io.FileInputStream.<init>(FileInputStream.java:66)
at com.sun.security.auth.login.ConfigFile.getInputStream(ConfigFile.java:591)
at com.sun.security.auth.login.ConfigFile.init(ConfigFile.java:260)
at com.sun.security.auth.login.ConfigFile.init(ConfigFile.java:148)
at com.sun.security.auth.login.ConfigFile.<init>(ConfigFile.java:107)
at sun.security.provider.ConfigSpiFile$1.run(ConfigSpiFile.java:55)
at java.security.AccessController.doPrivileged(Native Method)
at sun.security.provider.ConfigSpiFile.<init>(ConfigSpiFile.java:44)
at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:39)
at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:27)
at java.lang.reflect.Constructor.newInstance(Constructor.java:513)
at java.security.Provider$Service.newInstance(Provider.java:1235)
... 4 more
java.lang.SecurityException: c:\name%20with%20spaces\policyfile (The system cannot find the path specified)
at com.sun.security.auth.login.ConfigFile.<init>(ConfigFile.java:93)
at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:39)
at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:27)
at java.lang.reflect.Constructor.newInstance(Constructor.java:513)
at java.lang.Class.newInstance0(Class.java:355)
at java.lang.Class.newInstance(Class.java:308)
at javax.security.auth.login.Configuration$3.run(Configuration.java:246)
at java.security.AccessController.doPrivileged(Native Method)
at javax.security.auth.login.Configuration.getConfiguration(Configuration.java:241)
at authLoginMinitest.main(authLoginMinitest.java:22)
Caused by: java.io.FileNotFoundException: c:\name%20with%20spaces\policyfile (The system cannot find the path specified)
at java.io.FileInputStream.open(Native Method)
at java.io.FileInputStream.<init>(FileInputStream.java:106)
at java.io.FileInputStream.<init>(FileInputStream.java:66)
at com.sun.security.auth.login.ConfigFile.getInputStream(ConfigFile.java:591)
at com.sun.security.auth.login.ConfigFile.init(ConfigFile.java:260)
at com.sun.security.auth.login.ConfigFile.init(ConfigFile.java:202)
at com.sun.security.auth.login.ConfigFile.<init>(ConfigFile.java:91)
... 10 more
file exists: true
file name: c:\name with spaces\policyfile
--------------------------------------------------------------------------------
The file 'policyfile' exists and is empty.
--------------------------------------------------------------------------------
import java.io.File;
import java.net.URI;
import java.security.URIParameter;
import javax.security.auth.login.Configuration;
public class authLoginMinitest {
public static void main(String[] args) throws Exception {
final String defaultType = "JavaLoginConfig";
final String filename = "file:///c:/name%20with%20spaces/policyfile";
final URI uri = new URI(filename);
System.out.println("file exists: " + new File(uri).exists());
System.out.println("file name: " + new File(uri));
try {
Configuration.getInstance("JavaLoginConfig", new URIParameter(uri));
} catch (Exception ex) {
ex.printStackTrace();
}
try {
System.setProperty("java.security.auth.login.config", filename);
Configuration.getConfiguration();
} catch (Exception ex) {
ex.printStackTrace();
}
}
}
--------------------------------------------------------------------------------
program output:
--------------------------------------------------------------------------------
java.security.NoSuchAlgorithmException: Error constructing implementation (algorithm: JavaLoginConfig, provider: SUN, class: sun.security.provider.ConfigSpiFile)
at java.security.Provider$Service.newInstance(Provider.java:1240)
at sun.security.jca.GetInstance.getInstance(GetInstance.java:227)
at sun.security.jca.GetInstance.getInstance(GetInstance.java:174)
at javax.security.auth.login.Configuration.getInstance(Configuration.java:333)
at authLoginMinitest.main(authLoginMinitest.java:15)
Caused by: java.io.FileNotFoundException: c:\name%20with%20spaces\policyfile (The system cannot find the path specified)
at java.io.FileInputStream.open(Native Method)
at java.io.FileInputStream.<init>(FileInputStream.java:106)
at java.io.FileInputStream.<init>(FileInputStream.java:66)
at com.sun.security.auth.login.ConfigFile.getInputStream(ConfigFile.java:591)
at com.sun.security.auth.login.ConfigFile.init(ConfigFile.java:260)
at com.sun.security.auth.login.ConfigFile.init(ConfigFile.java:148)
at com.sun.security.auth.login.ConfigFile.<init>(ConfigFile.java:107)
at sun.security.provider.ConfigSpiFile$1.run(ConfigSpiFile.java:55)
at java.security.AccessController.doPrivileged(Native Method)
at sun.security.provider.ConfigSpiFile.<init>(ConfigSpiFile.java:44)
at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:39)
at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:27)
at java.lang.reflect.Constructor.newInstance(Constructor.java:513)
at java.security.Provider$Service.newInstance(Provider.java:1235)
... 4 more
java.lang.SecurityException: c:\name%20with%20spaces\policyfile (The system cannot find the path specified)
at com.sun.security.auth.login.ConfigFile.<init>(ConfigFile.java:93)
at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:39)
at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:27)
at java.lang.reflect.Constructor.newInstance(Constructor.java:513)
at java.lang.Class.newInstance0(Class.java:355)
at java.lang.Class.newInstance(Class.java:308)
at javax.security.auth.login.Configuration$3.run(Configuration.java:246)
at java.security.AccessController.doPrivileged(Native Method)
at javax.security.auth.login.Configuration.getConfiguration(Configuration.java:241)
at authLoginMinitest.main(authLoginMinitest.java:22)
Caused by: java.io.FileNotFoundException: c:\name%20with%20spaces\policyfile (The system cannot find the path specified)
at java.io.FileInputStream.open(Native Method)
at java.io.FileInputStream.<init>(FileInputStream.java:106)
at java.io.FileInputStream.<init>(FileInputStream.java:66)
at com.sun.security.auth.login.ConfigFile.getInputStream(ConfigFile.java:591)
at com.sun.security.auth.login.ConfigFile.init(ConfigFile.java:260)
at com.sun.security.auth.login.ConfigFile.init(ConfigFile.java:202)
at com.sun.security.auth.login.ConfigFile.<init>(ConfigFile.java:91)
... 10 more
file exists: true
file name: c:\name with spaces\policyfile
--------------------------------------------------------------------------------