Create dirs if required when persisting Jakarta Auth provider config
Unlikely to be required when running in Tomcat. Is required when running
the TCK since the persistence mechanism is used outside of Tomcat and
the dirs don.t exist.
diff --git a/java/org/apache/catalina/authenticator/jaspic/LocalStrings.properties b/java/org/apache/catalina/authenticator/jaspic/LocalStrings.properties
index 1930492..7a3b0ec 100644
--- a/java/org/apache/catalina/authenticator/jaspic/LocalStrings.properties
+++ b/java/org/apache/catalina/authenticator/jaspic/LocalStrings.properties
@@ -29,6 +29,7 @@
persistentProviderRegistrations.deleteFail=The temporary file [{0}] cannot be deleted
persistentProviderRegistrations.existsDeleteFail=The temporary file [{0}] already exists and cannot be deleted
+persistentProviderRegistrations.mkdirsFail=The directory for the persistent provider registrations [{0}] cannot be created
persistentProviderRegistrations.moveFail=Failed to move [{0}] to [{1}]
persistentProviderRegistrations.xmlFeatureEncoding=Exception configuring JASPIC to permit java encoding names in XML configuration files. Only IANA encoding names will be supported.
diff --git a/java/org/apache/catalina/authenticator/jaspic/PersistentProviderRegistrations.java b/java/org/apache/catalina/authenticator/jaspic/PersistentProviderRegistrations.java
index 4084578..2766807 100644
--- a/java/org/apache/catalina/authenticator/jaspic/PersistentProviderRegistrations.java
+++ b/java/org/apache/catalina/authenticator/jaspic/PersistentProviderRegistrations.java
@@ -94,6 +94,7 @@
static void writeProviders(Providers providers, File configFile) {
File configFileOld = new File(configFile.getAbsolutePath() + ".old");
File configFileNew = new File(configFile.getAbsolutePath() + ".new");
+ File configParent = configFileNew.getParentFile();
// Remove left over temporary files if present
if (configFileOld.exists()) {
@@ -108,6 +109,12 @@
configFileNew.getAbsolutePath()));
}
}
+ if (!configParent.exists()) {
+ if (!configParent.mkdirs()) {
+ throw new SecurityException(sm.getString("persistentProviderRegistrations.mkdirsFail",
+ configParent.getAbsolutePath()));
+ }
+ }
// Write out the providers to the temporary new file
try (OutputStream fos = new FileOutputStream(configFileNew);